ZGlmZiAtLWdpdCBhL1JFQURNRS52ZXJzaW9uIGIvUkVBRE1FLnZlcnNpb24KaW5kZXggMTQ4MGVlYS4uNmVkOTk3MSAxMDA2NDQKLS0tIGEvUkVBRE1FLnZlcnNpb24KKysrIGIvUkVBRE1FLnZlcnNpb24KQEAgLTEsMiArMSwyIEBACi1VUkw6IGZ0cDovL2Z0cC5jc3guY2FtLmFjLnVrL3B1Yi9zb2Z0d2FyZS9wcm9ncmFtbWluZy9wY3JlL3BjcmUyLTEwLjIxLnRhci5negotVmVyc2lvbjogMTAuMjEKK1VSTDogZnRwOi8vZnRwLmNzeC5jYW0uYWMudWsvcHViL3NvZnR3YXJlL3Byb2dyYW1taW5nL3BjcmUvcGNyZTItMTAuMjIudGFyLmd6CitWZXJzaW9uOiAxMC4yMgpkaWZmIC0tZ2l0IGEvZGlzdDIvQ01ha2VMaXN0cy50eHQgYi9kaXN0Mi9DTWFrZUxpc3RzLnR4dAppbmRleCAyYzg0YjA1Li5jZWQzZGYyIDEwMDY0NAotLS0gYS9kaXN0Mi9DTWFrZUxpc3RzLnR4dAorKysgYi9kaXN0Mi9DTWFrZUxpc3RzLnR4dApAQCAtNzEsNiArNzEsOSBAQAogIyAyMDE1LTA3LTE2IFBIIHVwZGF0ZWQgZm9yIG5ldyBwY3JlMl9maW5kX2JyYWNrZXQgc291cmNlIG1vZHVsZQogIyAyMDE1LTA4LTI0IFBIIGNvcnJlY3QgQ19GTEFHUyBzZXR0aW5nIChwYXRjaCBmcm9tIFJveSBJdnkgSUlJKQogIyAyMDE1LTEwPTE2IFBIIGFkZGVkIHN1cHBvcnQgZm9yIG5ldmVyLWJhY2tzbGFzaC1DCisjIDIwMTYtMDMtMDEgUEggYXBwbGllZCBDaHJpcyBXaWxzb24ncyBwYXRjaCBmb3IgTVNWQyBzdGF0aWMKKyMgMjAxNi0wNi0yNCBQSCBhcHBsaWVkIENocmlzIFdpbHNvbidzIHNlY29uZCBwYXRjaCwgcHV0dGluZyB0aGUgZmlyc3QgdW5kZXIKKyMgICAgICAgICAgICBhIG5ldyBvcHRpb24gaW5zdGVhZCBvZiBiZWluZyB1bmNvbmRpdGlvbmFsLgogCiBQUk9KRUNUKFBDUkUyIEMpCiAKQEAgLTE1Nyw2ICsxNjAsOSBAQAogU0VUKFBDUkUyX1NVUFBPUlRfUENSRTJHUkVQX0pJVCBPTiBDQUNIRSBCT09MCiAgICAgIkVuYWJsZSB1c2Ugb2YgSnVzdC1pbi10aW1lIGNvbXBpbGluZyBpbiBwY3JlMmdyZXAuIikKIAorU0VUKFBDUkUyX1NVUFBPUlRfUENSRTJHUkVQX0NBTExPVVQgT04gQ0FDSEUgQk9PTAorICAgICJFbmFibGUgY2FsbG91dCBzdHJpbmcgc3VwcG9ydCBpbiBwY3JlMmdyZXAuIikKKwogU0VUKFBDUkUyX1NVUFBPUlRfVU5JQ09ERSBPTiBDQUNIRSBCT09MCiAgICAgIkVuYWJsZSBzdXBwb3J0IGZvciBVbmljb2RlIGFuZCBVVEYtOC9VVEYtMTYvVVRGLTMyIGVuY29kaW5nLiIpCiAKQEAgLTE4NCw2ICsxOTAsOSBAQAogRU5ESUYoTUlOR1cpCiAKIElGKE1TVkMpCisgIE9QVElPTihQQ1JFX1NUQVRJQ19SVU5USU1FIE9GRiBDQUNIRSBCT09MCisJIk9OPUNvbXBpbGUgYWdhaW5zdCB0aGUgc3RhdGljIHJ1bnRpbWUgKC9NVCkuIgorCU9GRikKICAgT1BUSU9OKElOU1RBTExfTVNWQ19QREIKICAgICAgICAgICJPTj1JbnN0YWxsIC5wZGIgZmlsZXMgYnVpbHQgYnkgTVNWQywgaWYgZ2VuZXJhdGVkIgogICAgICAgICAgT0ZGKQpAQCAtMjcyLDYgKzI4MSwxMCBAQAogICAgICAgICBTRVQoU1VQUE9SVF9QQ1JFMkdSRVBfSklUIDEpCiBFTkRJRihQQ1JFMl9TVVBQT1JUX1BDUkUyR1JFUF9KSVQpCiAKK0lGKFBDUkUyX1NVUFBPUlRfUENSRTJHUkVQX0NBTExPVVQpCisgICAgICAgIFNFVChTVVBQT1JUX1BDUkUyR1JFUF9DQUxMT1VUIDEpCitFTkRJRihQQ1JFMl9TVVBQT1JUX1BDUkUyR1JFUF9DQUxMT1VUKQorCiBJRihQQ1JFMl9TVVBQT1JUX1ZBTEdSSU5EKQogICAgICAgICBTRVQoU1VQUE9SVF9WQUxHUklORCAxKQogRU5ESUYoUENSRTJfU1VQUE9SVF9WQUxHUklORCkKQEAgLTQ1Niw2ICs0NjksMTggQEAKIEVORElGIChFWElTVFMgJHtQUk9KRUNUX1NPVVJDRV9ESVJ9L3BjcmUycG9zaXgucmMpCiBFTkRJRihNU1ZDIEFORCBOT1QgUENSRTJfU1RBVElDKQogCisjIEZpeCBzdGF0aWMgY29tcGlsYXRpb24gd2l0aCBNU1ZDOiBodHRwczovL2J1Z3MuZXhpbS5vcmcvc2hvd19idWcuY2dpP2lkPTE2ODEKKyMgVGhpcyBjb2RlIHdhcyB0YWtlbiBmcm9tIHRoZSBDTWFrZSB3aWtpLCBub3QgZnJvbSBXZWJNLgorCitJRihNU1ZDIEFORCBQQ1JFMl9TVEFUSUNfUlVOVElNRSkKKyAgTUVTU0FHRShTVEFUVVMgIioqIE1TVkMgYW5kIFBDUkUyX1NUQVRJQ19SVU5USU1FOiBtb2RpZnlpbmcgY29tcGlsZXIgZmxhZ3MgdG8gdXNlIHN0YXRpYyBydW50aW1lIGxpYnJhcnkiKQorICBmb3JlYWNoKGZsYWdfdmFyCisgICAgICAgICAgQ01BS0VfQ19GTEFHUyBDTUFLRV9DX0ZMQUdTX0RFQlVHIENNQUtFX0NfRkxBR1NfUkVMRUFTRQorICAgICAgICAgIENNQUtFX0NfRkxBR1NfTUlOU0laRVJFTCBDTUFLRV9DX0ZMQUdTX1JFTFdJVEhERUJJTkZPKQorICAgIHN0cmluZyhSRUdFWCBSRVBMQUNFICIvTUQiICIvTVQiICR7ZmxhZ192YXJ9ICIkeyR7ZmxhZ192YXJ9fSIpCisgIGVuZGZvcmVhY2goKQorRU5ESUYoTVNWQyBBTkQgUENSRTJfU1RBVElDX1JVTlRJTUUpCisKICMgQnVpbGQgc2V0dXAKIAogQUREX0RFRklOSVRJT05TKC1ESEFWRV9DT05GSUdfSCkKQEAgLTc0MCw2ICs3NjUsNyBAQAogICBNRVNTQUdFKFNUQVRVUyAiICBCdWlsZCBzdGF0aWMgbGlicyAuLi4uLi4uLi4uLi4uLi4gOiAke0JVSUxEX1NUQVRJQ19MSUJTfSIpCiAgIE1FU1NBR0UoU1RBVFVTICIgIEJ1aWxkIHBjcmUyZ3JlcCAuLi4uLi4uLi4uLi4uLi4uLiA6ICR7UENSRTJfQlVJTERfUENSRTJHUkVQfSIpCiAgIE1FU1NBR0UoU1RBVFVTICIgIEVuYWJsZSBKSVQgaW4gcGNyZTJncmVwIC4uLi4uLi4uLiA6ICR7UENSRTJfU1VQUE9SVF9QQ1JFMkdSRVBfSklUfSIpCisgIE1FU1NBR0UoU1RBVFVTICIgIEVuYWJsZSBjYWxsb3V0cyBpbiBwY3JlMmdyZXAgLi4uLiA6ICR7UENSRTJfU1VQUE9SVF9QQ1JFMkdSRVBfQ0FMTE9VVH0iKQogICBNRVNTQUdFKFNUQVRVUyAiICBCdWZmZXIgc2l6ZSBmb3IgcGNyZTJncmVwIC4uLi4uLi4gOiAke1BDUkUyR1JFUF9CVUZTSVpFfSIpCiAgIE1FU1NBR0UoU1RBVFVTICIgIEJ1aWxkIHRlc3RzIChpbXBsaWVzIHBjcmUydGVzdCAgLiA6ICR7UENSRTJfQlVJTERfVEVTVFN9IikKICAgTUVTU0FHRShTVEFUVVMgIiAgICAgICAgICAgICAgIGFuZCBwY3JlMmdyZXApIikKZGlmZiAtLWdpdCBhL2Rpc3QyL0NoYW5nZUxvZyBiL2Rpc3QyL0NoYW5nZUxvZwppbmRleCAyMDM1NDkwLi4zZGNlYmI5IDEwMDY0NAotLS0gYS9kaXN0Mi9DaGFuZ2VMb2cKKysrIGIvZGlzdDIvQ2hhbmdlTG9nCkBAIC0xLDYgKzEsMTgyIEBACiBDaGFuZ2UgTG9nIGZvciBQQ1JFMgogLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorCitWZXJzaW9uIDEwLjIyIDI5LUp1bHktMjAxNgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworMS4gQXBwbGllZCBKYXNvbiBIb29kJ3MgcGF0Y2hlcyB0byBSdW5UZXN0LmJhdCBhbmQgdGVzdGRhdGEvd2ludGVzdG91dHB1dDMKK3RvIGZpeCBwcm9ibGVtcyB3aXRoIHJ1bm5pbmcgdGhlIHRlc3RzIHVuZGVyIFdpbmRvd3MuCisKKzIuIEltcGxlbWVudGVkIGEgZmFjaWxpdHkgZm9yIHF1b3RpbmcgbGl0ZXJhbCBjaGFyYWN0ZXJzIHdpdGhpbiBoZXhhZGVjaW1hbAorcGF0dGVybnMgaW4gcGNyZTJ0ZXN0LCB0byBtYWtlIGl0IGVhc2llciB0byBjcmVhdGUgcGF0dGVybnMgd2l0aCBqdXN0IGEgZmV3Citub24tcHJpbnRpbmcgY2hhcmFjdGVycy4KKworMy4gQmluYXJ5IHplcm9zIGFyZSBub3Qgc3VwcG9ydGVkIGluIHBjcmUydGVzdCBpbnB1dCBmaWxlcy4gSXQgbm93IGRldGVjdHMgdGhlbQorYW5kIGdpdmVzIGFuIGVycm9yLgorCis0LiBVcGRhdGVkIHRoZSB2YWxncmluZCBwYXJhbWV0ZXJzIGluIFJ1blRlc3Q6IChhKSBjaGFuZ2VkIHNtYy1jaGVjaz1hbGwgdG8KK3NtYy1jaGVjaz1hbGwtbm9uLWZpbGU7IChiKSBjaGFuZ2VkIG9iajoqIGluIHRoZSBzdXBwcmVzc2lvbiBmaWxlIHRvIG9iajo/Pz8gc28KK3RoYXQgaXQgbWF0Y2hlcyBvbmx5IHVua25vd24gb2JqZWN0cy4KKworNS4gVXBkYXRlZCB0aGUgbWFpbnRlbmFuY2Ugc2NyaXB0IG1haW50L01hbnlDb25maWdUZXN0cyB0byBtYWtlIGl0IGVhc2llciB0bworc2VsZWN0IGluZGl2aWR1YWwgZ3JvdXBzIG9mIHRlc3RzLgorCis2LiBXaGVuIHRoZSBQT1NJWCB3cmFwcGVyIGZ1bmN0aW9uIHJlZ2NvbXAoKSBpcyBjYWxsZWQsIHRoZSBSRUdfTk9TVUIgb3B0aW9uCit1c2VkIHRvIHNldCBQQ1JFMl9OT19BVVRPX0NBUFRVUkUgd2hlbiBjYWxsaW5nIHBjcmUyX2NvbXBpbGUoKS4gSG93ZXZlciwgdGhpcworZGlzYWJsZXMgdGhlIHVzZSBvZiBiYWNrIHJlZmVyZW5jZXMgKGFuZCBzdWJyb3V0aW5lIGNhbGxzKSwgd2hpY2ggYXJlIHN1cHBvcnRlZAorYnkgb3RoZXIgaW1wbGVtZW50YXRpb25zIG9mIHJlZ2NvbXAoKSB3aXRoIFJFX05PU1VCLiBUaGVyZWZvcmUsIFJFR19OT1NVQiBubworbG9uZ2VyIGNhdXNlcyBQQ1JFMl9OT19BVVRPX0NBUFRVUkUgdG8gYmUgc2V0LCB0aG91Z2ggaXQgc3RpbGwgaWdub3JlcyBubWF0Y2gKK2FuZCBwbWF0Y2ggd2hlbiByZWdleGVjKCkgaXMgY2FsbGVkLgorCis3LiBCZWNhdXNlIG9mIDYgYWJvdmUsIHBjcmUydGVzdCBoYXMgYmVlbiBtb2RpZmllZCB3aXRoIGEgbmV3IG1vZGlmaWVyIGNhbGxlZAorcG9zaXhfbm9zdWIsIHRvIGNhbGwgcmVnY29tcCgpIHdpdGggUkVHX05PU1VCLiBQcmV2aW91c2x5IHRoZSBub19hdXRvX2NhcHR1cmUKK21vZGlmaWVyIGhhZCB0aGlzIGVmZmVjdC4gVGhhdCBvcHRpb24gaXMgbm93IGlnbm9yZWQgd2hlbiB0aGUgUE9TSVggQVBJIGlzIGluCit1c2UuCisKKzguIE1pbm9yIHRpZGllcyB0byB0aGUgcGNyZTJkZW1vLmMgc2FtcGxlIHByb2dyYW0sIGluY2x1ZGluZyBtb3JlIGNvbW1lbnRzCithYm91dCBpdHMgOC1iaXQtbmVzcy4KKworOS4gRGV0ZWN0IHVubWF0Y2hlZCBjbG9zaW5nIHBhcmVudGhlc2VzIGFuZCBnaXZlIHRoZSBlcnJvciBpbiB0aGUgcHJlLXNjYW4KK2luc3RlYWQgb2YgbGF0ZXIuIFByZXZpb3VzbHkgdGhlIHByZS1zY2FuIGNhcnJpZWQgb24gYW5kIGNvdWxkIGdpdmUgYQorbWlzbGVhZGluZyBpbmNvcnJlY3QgZXJyb3IgbWVzc2FnZS4gRm9yIGV4YW1wbGUsIC8oP0opKD8nYScpKSg/J2EnKS8gZ2F2ZSBhCittZXNzYWdlIGFib3V0IGludmFsaWQgZHVwbGljYXRlIGdyb3VwIG5hbWVzLgorCisxMC4gSXQgaGFzIGhhcHBlbmVkIHRoYXQgcGNyZTJ0ZXN0IHdhcyBhY2NpZGVudGFsbHkgbGlua2VkIHdpdGggYW5vdGhlciBQT1NJWAorcmVnZXggbGlicmFyeSBpbnN0ZWFkIG9mIGxpYnBjcmUyLXBvc2l4LiBJbiB0aGlzIHNpdHVhdGlvbiwgYSBjYWxsIHRvIHJlZ2NvbXAoKQorKGluIHRoZSBvdGhlciBsaWJyYXJ5KSBtYXkgc3VjY2VlZCwgcmV0dXJuaW5nIHplcm8sIGJ1dCBvZiBjb3Vyc2UgcHV0dGluZyBpdHMKK293biBkYXRhIGludG8gdGhlIHJlZ2V4X3QgYmxvY2suIEluIG9uZSBleGFtcGxlIHRoZSByZV9wY3JlMl9jb2RlIGZpZWxkIHdhcworbGVmdCBhcyBOVUxMLCB3aGljaCBtYWRlIHBjcmUydGVzdCB0aGluayBpdCBoYWQgbm90IGdvdCBhIGNvbXBpbGVkIFBPU0lYIHJlZ2V4LAorc28gaXQgdHJlYXRlZCB0aGUgbmV4dCBsaW5lIGFzIGFub3RoZXIgcGF0dGVybiBsaW5lLCByZXN1bHRpbmcgaW4gYSBjb25mdXNpbmcKK2Vycm9yIG1lc3NhZ2UuIEEgY2hlY2sgaGFzIGJlZW4gYWRkZWQgdG8gcGNyZTJ0ZXN0IHRvIHNlZSBpZiB0aGUgZGF0YSByZXR1cm5lZAorZnJvbSBhIHN1Y2Nlc3NmdWwgY2FsbCBvZiByZWdjb21wKCkgYXJlIHZhbGlkIGZvciBQQ1JFMidzIHJlZ2NvbXAoKS4gSWYgdGhleQorYXJlIG5vdCwgYW4gZXJyb3IgbWVzc2FnZSBpcyBvdXRwdXQgYW5kIHRoZSBwY3JlMnRlc3QgcnVuIGlzIGFiYW5kb25lZC4gVGhlCittZXNzYWdlIHBvaW50cyBvdXQgdGhlIHBvc3NpYmlsaXR5IG9mIGEgbWlzLWxpbmtpbmcuIEhvcGVmdWxseSB0aGlzIHdpbGwgYXZvaWQKK3NvbWUgaGVhZC1zY3JhdGNoaW5nIHRoZSBuZXh0IHRpbWUgdGhpcyBoYXBwZW5zLgorCisxMS4gQSBwYXR0ZXJuIHN1Y2ggYXMgLyg/PD0oKD9DKTApKS8sIHdoaWNoIGhhcyBhIGNhbGxvdXQgaW5zaWRlIGEgbG9va2JlaGluZAorYXNzZXJ0aW9uLCBjYXVzZWQgcGNyZTJ0ZXN0IHRvIG91dHB1dCBhIHZlcnkgbGFyZ2UgbnVtYmVyIG9mIHNwYWNlcyB3aGVuIHRoZQorY2FsbG91dCB3YXMgdGFrZW4sIG1ha2luZyB0aGUgcHJvZ3JhbSBhcHBlYXJpbmcgdG8gbG9vcC4KKworMTIuIEEgcGF0dGVybiB0aGF0IGluY2x1ZGVkICgqQUNDRVBUKSBpbiB0aGUgbWlkZGxlIG9mIGEgc3VmZmljaWVudGx5IGRlZXBseQorbmVzdGVkIHNldCBvZiBwYXJlbnRoZXNlcyBvZiBzdWZmaWNpZW50IHNpemUgY2F1c2VkIGFuIG92ZXJmbG93IG9mIHRoZQorY29tcGlsaW5nIHdvcmtzcGFjZSAod2hpY2ggd2FzIGRpYWdub3NlZCwgYnV0IG9mIGNvdXJzZSBpcyBub3QgZGVzaXJhYmxlKS4KKworMTMuIERldGVjdCBtaXNzaW5nIGNsb3NpbmcgcGFyZW50aGVzZXMgZHVyaW5nIHRoZSBwcmUtcGFzcyBmb3IgZ3JvdXAKK2lkZW50aWZpY2F0aW9uLgorCisxNC4gQ2hhbmdlZCBzb21lIGludGVnZXIgdmFyaWFibGUgdHlwZXMgYW5kIHB1dCBpbiBhIG51bWJlciBvZiBjYXN0cywgZm9sbG93aW5nCithIHJlcG9ydCBvZiBjb21waWxlciB3YXJuaW5ncyBmcm9tIFZpc3VhbCBTdHVkaW8gMjAxMyBhbmQgYSBmZXcgdGVzdHMgd2l0aAorZ2NjJ3MgLVdjb252ZXJzaW9uICh3aGljaCBzdGlsbCB0aHJvd3MgdXAgYSBsb3QpLgorCisxNS4gSW1wbGVtZW50ZWQgcGNyZTJfY29kZV9jb3B5KCksIGFuZCBhZGRlZCBwdXNoY29weSBhbmQgI3BvcGNvcHkgdG8gcGNyZTJ0ZXN0Citmb3IgdGVzdGluZyBpdC4KKworMTYuIENoYW5nZSA2NiBmb3IgMTAuMjEgaW50cm9kdWNlZCB0aGUgdXNlIG9mIHNucHJpbnRmKCkgaW4gUENSRTIncyB2ZXJzaW9uIG9mCityZWdlcnJvcigpLiBXaGVuIHRoZSBlcnJvciBidWZmZXIgaXMgdG9vIHNtYWxsLCBteSB2ZXJzaW9uIG9mIHNucHJpbnRmKCkgcHV0cyBhCitiaW5hcnkgemVybyBpbiB0aGUgZmluYWwgYnl0ZS4gQnVnICMxODAxIHNlZW1zIHRvIHNob3cgdGhhdCBvdGhlciB2ZXJzaW9ucyBkbworbm90IGRvIHRoaXMsIGxlYWRpbmcgdG8gYmFkIG91dHB1dCBmcm9tIHBjcmUydGVzdCB3aGVuIGl0IHdhcyBjaGVja2luZyBmb3IKK2J1ZmZlciBvdmVyZmxvdy4gSXQgbm8gbG9uZ2VyIGFzc3VtZXMgYSBiaW5hcnkgemVybyBhdCB0aGUgZW5kIG9mIGEgdG9vLXNtYWxsCityZWdlcnJvcigpIGJ1ZmZlci4KKworMTcuIEZpeGVkIHR5cG8gKCImJiIgZm9yICImIikgaW4gcGNyZTJfc3R1ZHkoKS4gRm9ydHVuYXRlbHksIHRoaXMgY291bGQgbm90CithY3R1YWxseSBhZmZlY3QgYW55dGhpbmcsIGJ5IHNoZWVyIGx1Y2suCisKKzE4LiBUd28gbWlub3IgZml4ZXMgZm9yIE1TVkMgY29tcGlsYXRpb246IChhKSByZW1vdmFsIG9mIGFwcGFyZW50bHkgaW5jb3JyZWN0CisiY29uc3QiIHF1YWxpZmllcnMgaW4gcGNyZTJ0ZXN0IGFuZCAoYikgZGVmaW5pbmcgc25wcmludGYgYXMgX3NucHJpbnRmIGZvcgorb2xkZXIgTVNWQyBjb21waWxlcnMuIFRoaXMgaGFzIGJlZW4gZG9uZSBib3RoIGluIHNyYy9wY3JlMl9pbnRlcm5hbC5oIGZvciBtb3N0CitvZiB0aGUgbGlicmFyeSwgYW5kIGFsc28gaW4gc3JjL3BjcmUycG9zaXguYywgd2hpY2ggbm8gbG9uZ2VyIGluY2x1ZGVzCitwY3JlMl9pbnRlcm5hbC5oIChzZWUgMjQgYmVsb3cpLgorCisxOS4gQXBwbGllZCBDaHJpcyBXaWxzb24ncyBwYXRjaCAoQnVnemlsbGEgIzE2ODEpIHRvIENNYWtlTGlzdHMudHh0IGZvciBNU1ZDCitzdGF0aWMgY29tcGlsYXRpb24uIFN1YnNlcXVlbnRseSBhcHBsaWVkIENocmlzIFdpbHNvbidzIHNlY29uZCBwYXRjaCwgcHV0dGluZwordGhlIGZpcnN0IHBhdGNoIHVuZGVyIGEgbmV3IG9wdGlvbiBpbnN0ZWFkIG9mIGJlaW5nIHVuY29uZGl0aW9uYWwgd2hlbgorUENSRV9TVEFUSUMgaXMgc2V0LgorCisyMC4gVXBkYXRlZCBwY3JlMmdyZXAgdG8gc2V0IHN0ZG91dCBhcyBiaW5hcnkgd2hlbiBydW4gdW5kZXIgV2luZG93cywgc28gYXMgbm90Cit0byBjb252ZXJ0IFxyXG4gYXQgdGhlIGVuZHMgb2YgcmVmbGVjdGVkIGxpbmVzIGludG8gXHJcclxuLiBUaGlzIHJlcXVpcmVkCitlbnN1cmluZyB0aGF0IG90aGVyIG91dHB1dCB0aGF0IGlzIHdyaXR0ZW4gdG8gc3Rkb3V0IChlLmcuIGZpbGUgbmFtZXMpIHVzZXMgdGhlCithcHByb3ByaWF0ZSBsaW5lIHRlcm1pbmF0b3I6IFxyXG4gZm9yIFdpbmRvd3MsIFxuIG90aGVyd2lzZS4KKworMjEuIFdoZW4gYSBsaW5lIGlzIHRvbyBsb25nIGZvciBwY3JlMmdyZXAncyBpbnRlcm5hbCBidWZmZXIsIHNob3cgdGhlIG1heGltdW0KK2xlbmd0aCBpbiB0aGUgZXJyb3IgbWVzc2FnZS4KKworMjIuIEFkZGVkIHN1cHBvcnQgZm9yIHN0cmluZyBjYWxsb3V0cyB0byBwY3JlMmdyZXAgKFpvbHRhbidzIHBhdGNoIHdpdGggUEgKK2FkZGl0aW9ucykuCisKKzIzLiBSdW5UZXN0LmJhdCB3YXMgbWlzc2luZyBhICJzZXQgdHlwZSIgbGluZSBmb3IgdGVzdCAyMi4KKworMjQuIFRoZSBwY3JlMnBvc2l4LmMgZmlsZSB3YXMgaW5jbHVkaW5nIHBjcmUyX2ludGVybmFsLmgsIGFuZCB1c2luZyBzb21lCisicHJpdmF0ZSIga25vd2xlZGdlIG9mIHRoZSBkYXRhIHN0cnVjdHVyZXMuIFRoaXMgaXMgdW5uZWNlc3Nhcnk7IHRoZSBjb2RlIGhhcworYmVlbiByZS1mYWN0b3JlZCBhbmQgbm8gbG9uZ2VyIGluY2x1ZGVzIHBjcmUyX2ludGVybmFsLmguCisKKzI1LiBBIHJhY2luZyBjb25kaXRpb24gaXMgZml4ZWQgaW4gSklUIHJlcG9ydGVkIGJ5IE1vemlsbGEuCisKKzI2LiBNaW5vciBjb2RlIHJlZmFjdG9yIHRvIGF2b2lkICJhcnJheSBzdWJzY3JpcHQgaXMgYmVsb3cgYXJyYXkgYm91bmRzIgorY29tcGlsZXIgd2FybmluZy4KKworMjcuIE1pbm9yIGNvZGUgcmVmYWN0b3IgdG8gYXZvaWQgImxlZnQgc2hpZnQgb2YgbmVnYXRpdmUgbnVtYmVyIiB3YXJuaW5nLgorCisyOC4gQWRkIGEgYml0IG1vcmUgc2FuaXR5IGNoZWNraW5nIHRvIHBjcmUyX3NlcmlhbGl6ZV9kZWNvZGUoKSBhbmQgZG9jdW1lbnQKK3RoYXQgaXQgZXhwZWN0cyB0cnVzdGVkIGRhdGEuCisKKzI5LiBGaXggdHlwbyBpbiBwY3JlMl9qaXRfdGVzdC5jCisKKzMwLiBEdWUgdG8gYW4gb3ZlcnNpZ2h0LCBwY3JlMmdyZXAgd2FzIG5vdCBtYWtpbmcgdXNlIG9mIEpJVCB3aGVuIGF2YWlsYWJsZS4KK1RoaXMgaXMgbm93IGZpeGVkLgorCiszMS4gVGhlIFJ1bkdyZXBUZXN0IHNjcmlwdCBpcyB1cGRhdGVkIHRvIHVzZSB0aGUgdmFsZ3JpbmQgc3VwcHJlc3Npb25zIGZpbGUKK3doZW4gdGVzdGluZyB3aXRoIEpJVCB1bmRlciB2YWxncmluZCAoY29tcGFyZSAxMC4yMS81MSBiZWxvdykuIFRoZSBzdXBwcmVzc2lvbnMKK2ZpbGUgaXMgdXBkYXRlZCBzbyB0aGF0IGlzIG5vdyB0aGUgc2FtZSBhcyBmb3IgUENSRTE6IGl0IHN1cHByZXNzZXMgdGhlCitNZW1jaGVjayB3YXJuaW5ncyBBZGRyMTYgYW5kIENvbmQgaW4gdW5rbm93biBvYmplY3RzICh0aGF0IGlzLCBKSVQtY29tcGlsZWQKK2NvZGUpLiBBbHNvIGNoYW5nZWQgc21jLWNoZWNrPWFsbCB0byBzbWMtY2hlY2s9YWxsLW5vbi1maWxlIGFzIHdhcyBkb25lIGZvcgorUnVuVGVzdCAoc2VlIDQgYWJvdmUpLgorCiszMi4gSW1wbGVtZW50ZWQgdGhlIFBDUkUyX05PX0pJVCBvcHRpb24gZm9yIHBjcmUyX21hdGNoKCkuCisKKzMzLiBGaXggdHlwbyB0aGF0IGdhdmUgYSBjb21waWxlciBlcnJvciB3aGVuIEpJVCBub3Qgc3VwcG9ydGVkLgorCiszNC4gRml4IGNvbW1lbnQgZGVzY3JpYmluZyB0aGUgcmV0dXJucyBmcm9tIGZpbmRfZml4ZWRsZW5ndGgoKS4KKworMzUuIEZpeCBwb3RlbnRpYWwgbmVnYXRpdmUgaW5kZXggaW4gcGNyZTJ0ZXN0LgorCiszNi4gQ2FsbHMgdG8gcGNyZTJfZ2V0X2Vycm9yX21lc3NhZ2UoKSB3aXRoIGVycm9yIG51bWJlcnMgdGhhdCBhcmUgbmV2ZXIKK3JldHVybmVkIGJ5IFBDUkUyIGZ1bmN0aW9ucyB3ZXJlIHJldHVybmluZyBlbXB0eSBzdHJpbmdzLiBOb3cgdGhlIGVycm9yIGNvZGUKK1BDUkUyX0VSUk9SX0JBRERBVEEgaXMgcmV0dXJuZWQuIEEgZmFjaWxpdHkgaGFzIGJlZW4gYWRkZWQgdG8gcGNyZTJ0ZXN0IHRvCitzaG93IHRoZSB0ZXh0cyBmb3IgZ2l2ZW4gZXJyb3IgbnVtYmVycyAoaS5lLiB0byBjYWxsIHBjcmUyX2dldF9lcnJvcl9tZXNzYWdlKCkKK2FuZCBkaXNwbGF5IHdoYXQgaXQgcmV0dXJucykgYW5kIGEgZmV3IHJlcHJlc2VudGF0aXZlIGVycm9yIGNvZGVzIGFyZSBub3cKK2NoZWNrZWQgaW4gUnVuVGVzdC4KKworMzcuIEFkZGVkICImJiAhZGVmaW5lZChfX0lOVEVMX0NPTVBJTEVSKSIgdG8gdGhlIHRlc3QgZm9yIF9fR05VQ19fIGluCitwY3JlMl9tYXRjaC5jLCBpbiBhbnRpY2lwYXRpb24gdGhhdCB0aGlzIGlzIG5lZWRlZCBmb3IgdGhlIHNhbWUgcmVhc29uIGl0IHdhcworcmVjZW50bHkgYWRkZWQgdG8gcGNyZWNwcC5jYyBpbiBQQ1JFMS4KKworMzguIFVzaW5nIC1vIHdpdGggLU0gaW4gcGNyZTJncmVwIGNvdWxkIGNhdXNlIHVubmVjZXNzYXJ5IHJlcGVhdGVkIG91dHB1dCB3aGVuCit0aGUgbWF0Y2ggZXh0ZW5kZWQgb3ZlciBhIGxpbmUgYm91bmRhcnksIGFzIGl0IHRyaWVkIHRvIGZpbmQgbW9yZSBtYXRjaGVzICJvbgordGhlIHNhbWUgbGluZSIgLSBidXQgaXQgd2FzIGFscmVhZHkgb3ZlciB0aGUgZW5kLgorCiszOS4gQWxsb3cgXEMgaW4gbG9va2JlaGluZHMgYW5kIERGQSBtYXRjaGluZyBpbiBVVEYtMzIgbW9kZSAoYnkgY29udmVydGluZyBpdAordG8gdGhlIHNhbWUgY29kZSBhcyAnLicgd2hlbiBQQ1JFMl9ET1RBTEwgaXMgc2V0KS4KKworNDAuIEZpeCB0d28gY2xhbmcgY29tcGlsZXIgd2FybmluZ3MgaW4gcGNyZTJ0ZXN0IHdoZW4gb25seSBvbmUgY29kZSB1bml0IHdpZHRoCitpcyBzdXBwb3J0ZWQuCisKKzQxLiBVcGdyYWRlIFJ1blRlc3QgdG8gYXV0b21hdGljYWxseSByZS1ydW4gdGVzdCAyIHdpdGggYSBsYXJnZSAoNjRNKSBzdGFjayBpZgoraXQgZmFpbHMgd2hlbiBydW5uaW5nIHRoZSBpbnRlcnByZXRlciB3aXRoIGEgMTZNIHN0YWNrIChhbmQgaWYgY2hhbmdpbmcgdGhlCitzdGFjayBzaXplIHZpYSBwY3JlMnRlc3QgaXMgcG9zc2libGUpLiBUaGlzIGF2b2lkcyBoYXZpbmcgdG8gbWFudWFsbHkgc2V0IGEKK2xhcmdlIHN0YWNrIHNpemUgd2hlbiB0ZXN0aW5nIHdpdGggY2xhbmcuCisKKzQyLiBGaXggcmVnaXN0ZXIgb3ZlcndpdGUgaW4gSklUIHdoZW4gU1NFMiBhY2NlbGVyYXRpb24gaXMgZW5hYmxlZC4KKworNDMuIERldGVjdCBpbnRlZ2VyIG92ZXJmbG93IGluIHBjcmUydGVzdCBwYXR0ZXJuIGFuZCBkYXRhIHJlcGV0aXRpb24gY291bnRzLgorCis0NC4gSW4gcGNyZTJ0ZXN0LCBpZ25vcmUgImFsbGNhcHR1cmVzIiBhZnRlciBERkEgbWF0Y2hpbmcuCisKKzQ1LiBGaXggdW5hbGlnbmVkIGFjY2Vzc2VzIG9uIHg4Ni4gUGF0Y2ggYnkgTWFyYyBNdXR6LgorCis0Ni4gRml4IHNvbWUgbW9yZSBjbGFuZyBjb21waWxlciB3YXJuaW5ncy4KKworCiBWZXJzaW9uIDEwLjIxIDEyLUphbnVhcnktMjAxNgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMzcxLDcgKzU0Nyw3IEBACiBQQ1JFMl9FWFRFTkRFRCwgYW5kIHRoZXJlIHdhcyBubyBzdWJzZXF1ZW50ICg/eCkgdG8gdHVybiBpdCBvbiBhZ2FpbiwKIHBjcmUyX2NvbXBpbGUoKSBhc3N1bWVkIHRoYXQgKD8teCkgYXBwbGllZCB0byB0aGUgd2hvbGUgcGF0dGVybiBhbmQKIGNvbnNlcXVlbnRseSBtaXMtY29tcGlsZWQgaXQuIFRoaXMgYnVnIHdhcyBmb3VuZCBieSB0aGUgTExWTSBmdXp6ZXIuIFRoZSBmaXgKLWZvciB0aGlzIGJ1ZyBtZWFucyB0aGF0IGEgc2V0dGluZyBvZiBhbnkgb2YgdGhlICg/aW1zeFUpIG9wdGlvbnMgYXQgdGhlIHN0YXJ0Citmb3IgdGhpcyBidWcgbWVhbnMgdGhhdCBhIHNldHRpbmcgb2YgYW55IG9mIHRoZSAoP2ltc3hKVSkgb3B0aW9ucyBhdCB0aGUgc3RhcnQKIG9mIGEgcGF0dGVybiBpcyBubyBsb25nZXIgdHJhbnNmZXJyZWQgdG8gdGhlIG9wdGlvbnMgdGhhdCBhcmUgcmV0dXJuZWQgYnkKIFBDUkUyX0lORk9fQUxMT1BUSU9OUy4gSW4gZmFjdCwgdGhpcyB3YXMgYW4gYW5hY2hyb25pc20gdGhhdCBzaG91bGQgaGF2ZQogY2hhbmdlZCB3aGVuIHRoZSBlZmZlY3RzIG9mIHRob3NlIG9wdGlvbnMgd2VyZSBhbGwgbW92ZWQgdG8gY29tcGlsZSB0aW1lLgpkaWZmIC0tZ2l0IGEvZGlzdDIvSEFDS0lORyBiL2Rpc3QyL0hBQ0tJTkcKaW5kZXggMDUxNTIwYy4uODgzYWE2NCAxMDA2NDQKLS0tIGEvZGlzdDIvSEFDS0lORworKysgYi9kaXN0Mi9IQUNLSU5HCkBAIC0yMjgsNiArMjI4LDExIEBACiBUaGlzIGVuZHMgdGhlIGFzc2VydGlvbiwgbm90IHRoZSBlbnRpcmUgcGF0dGVybiBtYXRjaC4gVGhlIGFzc2VydGlvbiAoPyEpIGlzIAogYWx3YXlzIG9wdGltaXplZCB0byBPUF9GQUlMLgogCitPUF9BTExBTlkgaXMgdXNlZCBmb3IgJy4nIHdoZW4gUENSRTJfRE9UQUxMIGlzIHNldC4gSXQgaXMgYWxzbyB1c2VkIGZvciBcQyBpbgorbm9uLVVURiBtb2RlcyBhbmQgaW4gVVRGLTMyIG1vZGUgKHNpbmNlIG9uZSBjb2RlIHVuaXQgc3RpbGwgZXF1YWxzIG9uZSAKK2NoYXJhY3RlcikuIEFub3RoZXIgdXNlIGlzIGZvciBbXl0gd2hlbiBlbXB0eSBjbGFzc2VzIGFyZSBwZXJtaXR0ZWQKKyhQQ1JFMl9BTExPV19FTVBUWV9DTEFTUyBpcyBzZXQpLgorCiAKIEJhY2t0cmFja2luZyBjb250cm9sIHZlcmJzIHdpdGggb3B0aW9uYWwgZGF0YQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC02MDEsNCArNjA2LDQgQEAKIGNvcnJlY3QgbGVuZ3RoLCBpbiBvcmRlciB0byBjYXRjaCB1cGRhdGluZyBlcnJvcnMuCiAKIFBoaWxpcCBIYXplbAotSnVuZSAyMDE1CitKdW5lIDIwMTYKZGlmZiAtLWdpdCBhL2Rpc3QyL01ha2VmaWxlLmFtIGIvZGlzdDIvTWFrZWZpbGUuYW0KaW5kZXggNTk3N2JhMC4uMzhmMWQ0MSAxMDA2NDQKLS0tIGEvZGlzdDIvTWFrZWZpbGUuYW0KKysrIGIvZGlzdDIvTWFrZWZpbGUuYW0KQEAgLTI1LDYgKzI1LDcgQEAKICAgZG9jL2h0bWwvcGNyZTItY29uZmlnLmh0bWwgXAogICBkb2MvaHRtbC9wY3JlMi5odG1sIFwKICAgZG9jL2h0bWwvcGNyZTJfY2FsbG91dF9lbnVtZXJhdGUuaHRtbCBcCisgIGRvYy9odG1sL3BjcmUyX2NvZGVfY29weS5odG1sIFwKICAgZG9jL2h0bWwvcGNyZTJfY29kZV9mcmVlLmh0bWwgXAogICBkb2MvaHRtbC9wY3JlMl9jb21waWxlLmh0bWwgXAogICBkb2MvaHRtbC9wY3JlMl9jb21waWxlX2NvbnRleHRfY29weS5odG1sIFwKQEAgLTEwNSw2ICsxMDYsNyBAQAogICBkb2MvcGNyZTItY29uZmlnLjEgXAogICBkb2MvcGNyZTIuMyBcCiAgIGRvYy9wY3JlMl9jYWxsb3V0X2VudW1lcmF0ZS4zIFwKKyAgZG9jL3BjcmUyX2NvZGVfY29weS4zIFwKICAgZG9jL3BjcmUyX2NvZGVfZnJlZS4zIFwKICAgZG9jL3BjcmUyX2NvbXBpbGUuMyBcCiAgIGRvYy9wY3JlMl9jb21waWxlX2NvbnRleHRfY29weS4zIFwKQEAgLTU2OCw2ICs1NzAsNyBAQAogICB0ZXN0ZGF0YS9ncmVwbGlzdCBcCiAgIHRlc3RkYXRhL2dyZXBvdXRwdXQgXAogICB0ZXN0ZGF0YS9ncmVwb3V0cHV0OCBcCisgIHRlc3RkYXRhL2dyZXBvdXRwdXRDIFwKICAgdGVzdGRhdGEvZ3JlcG91dHB1dE4gXAogICB0ZXN0ZGF0YS9ncmVwcGF0TjQgXAogICB0ZXN0ZGF0YS90ZXN0aW5wdXQxIFwKZGlmZiAtLWdpdCBhL2Rpc3QyL01ha2VmaWxlLmluIGIvZGlzdDIvTWFrZWZpbGUuaW4KaW5kZXggZDg2MTIwYi4uZGRjNTEzMiAxMDA2NDQKLS0tIGEvZGlzdDIvTWFrZWZpbGUuaW4KKysrIGIvZGlzdDIvTWFrZWZpbGUuaW4KQEAgLTgzMSw2ICs4MzEsNyBAQAogICBkb2MvaHRtbC9wY3JlMi1jb25maWcuaHRtbCBcCiAgIGRvYy9odG1sL3BjcmUyLmh0bWwgXAogICBkb2MvaHRtbC9wY3JlMl9jYWxsb3V0X2VudW1lcmF0ZS5odG1sIFwKKyAgZG9jL2h0bWwvcGNyZTJfY29kZV9jb3B5Lmh0bWwgXAogICBkb2MvaHRtbC9wY3JlMl9jb2RlX2ZyZWUuaHRtbCBcCiAgIGRvYy9odG1sL3BjcmUyX2NvbXBpbGUuaHRtbCBcCiAgIGRvYy9odG1sL3BjcmUyX2NvbXBpbGVfY29udGV4dF9jb3B5Lmh0bWwgXApAQCAtOTExLDYgKzkxMiw3IEBACiAgIGRvYy9wY3JlMi1jb25maWcuMSBcCiAgIGRvYy9wY3JlMi4zIFwKICAgZG9jL3BjcmUyX2NhbGxvdXRfZW51bWVyYXRlLjMgXAorICBkb2MvcGNyZTJfY29kZV9jb3B5LjMgXAogICBkb2MvcGNyZTJfY29kZV9mcmVlLjMgXAogICBkb2MvcGNyZTJfY29tcGlsZS4zIFwKICAgZG9jL3BjcmUyX2NvbXBpbGVfY29udGV4dF9jb3B5LjMgXApAQCAtMTA1MiwxNiArMTA1NCwxNyBAQAogCXRlc3RkYXRhL2dyZXBmaWxlbGlzdCB0ZXN0ZGF0YS9ncmVwaW5wdXQgdGVzdGRhdGEvZ3JlcGlucHV0MyBcCiAJdGVzdGRhdGEvZ3JlcGlucHV0OCB0ZXN0ZGF0YS9ncmVwaW5wdXR2IHRlc3RkYXRhL2dyZXBpbnB1dHggXAogCXRlc3RkYXRhL2dyZXBsaXN0IHRlc3RkYXRhL2dyZXBvdXRwdXQgdGVzdGRhdGEvZ3JlcG91dHB1dDggXAotCXRlc3RkYXRhL2dyZXBvdXRwdXROIHRlc3RkYXRhL2dyZXBwYXRONCB0ZXN0ZGF0YS90ZXN0aW5wdXQxIFwKLQl0ZXN0ZGF0YS90ZXN0aW5wdXQyIHRlc3RkYXRhL3Rlc3RpbnB1dDMgdGVzdGRhdGEvdGVzdGlucHV0NCBcCi0JdGVzdGRhdGEvdGVzdGlucHV0NSB0ZXN0ZGF0YS90ZXN0aW5wdXQ2IHRlc3RkYXRhL3Rlc3RpbnB1dDcgXAotCXRlc3RkYXRhL3Rlc3RpbnB1dDggdGVzdGRhdGEvdGVzdGlucHV0OSB0ZXN0ZGF0YS90ZXN0aW5wdXQxMCBcCi0JdGVzdGRhdGEvdGVzdGlucHV0MTEgdGVzdGRhdGEvdGVzdGlucHV0MTIgdGVzdGRhdGEvdGVzdGlucHV0MTMgXAotCXRlc3RkYXRhL3Rlc3RpbnB1dDE0IHRlc3RkYXRhL3Rlc3RpbnB1dDE1IHRlc3RkYXRhL3Rlc3RpbnB1dDE2IFwKLQl0ZXN0ZGF0YS90ZXN0aW5wdXQxNyB0ZXN0ZGF0YS90ZXN0aW5wdXQxOCB0ZXN0ZGF0YS90ZXN0aW5wdXQxOSBcCi0JdGVzdGRhdGEvdGVzdGlucHV0MjAgdGVzdGRhdGEvdGVzdGlucHV0MjEgdGVzdGRhdGEvdGVzdGlucHV0MjIgXAotCXRlc3RkYXRhL3Rlc3RpbnB1dDIzIHRlc3RkYXRhL3Rlc3RpbnB1dEVCQyBcCi0JdGVzdGRhdGEvdGVzdG91dHB1dDEgdGVzdGRhdGEvdGVzdG91dHB1dDIgdGVzdGRhdGEvdGVzdG91dHB1dDMgXAorCXRlc3RkYXRhL2dyZXBvdXRwdXRDIHRlc3RkYXRhL2dyZXBvdXRwdXROIHRlc3RkYXRhL2dyZXBwYXRONCBcCisJdGVzdGRhdGEvdGVzdGlucHV0MSB0ZXN0ZGF0YS90ZXN0aW5wdXQyIHRlc3RkYXRhL3Rlc3RpbnB1dDMgXAorCXRlc3RkYXRhL3Rlc3RpbnB1dDQgdGVzdGRhdGEvdGVzdGlucHV0NSB0ZXN0ZGF0YS90ZXN0aW5wdXQ2IFwKKwl0ZXN0ZGF0YS90ZXN0aW5wdXQ3IHRlc3RkYXRhL3Rlc3RpbnB1dDggdGVzdGRhdGEvdGVzdGlucHV0OSBcCisJdGVzdGRhdGEvdGVzdGlucHV0MTAgdGVzdGRhdGEvdGVzdGlucHV0MTEgdGVzdGRhdGEvdGVzdGlucHV0MTIgXAorCXRlc3RkYXRhL3Rlc3RpbnB1dDEzIHRlc3RkYXRhL3Rlc3RpbnB1dDE0IHRlc3RkYXRhL3Rlc3RpbnB1dDE1IFwKKwl0ZXN0ZGF0YS90ZXN0aW5wdXQxNiB0ZXN0ZGF0YS90ZXN0aW5wdXQxNyB0ZXN0ZGF0YS90ZXN0aW5wdXQxOCBcCisJdGVzdGRhdGEvdGVzdGlucHV0MTkgdGVzdGRhdGEvdGVzdGlucHV0MjAgdGVzdGRhdGEvdGVzdGlucHV0MjEgXAorCXRlc3RkYXRhL3Rlc3RpbnB1dDIyIHRlc3RkYXRhL3Rlc3RpbnB1dDIzIFwKKwl0ZXN0ZGF0YS90ZXN0aW5wdXRFQkMgdGVzdGRhdGEvdGVzdG91dHB1dDEgXAorCXRlc3RkYXRhL3Rlc3RvdXRwdXQyIHRlc3RkYXRhL3Rlc3RvdXRwdXQzIFwKIAl0ZXN0ZGF0YS90ZXN0b3V0cHV0M0EgdGVzdGRhdGEvdGVzdG91dHB1dDNCIFwKIAl0ZXN0ZGF0YS90ZXN0b3V0cHV0NCB0ZXN0ZGF0YS90ZXN0b3V0cHV0NSB0ZXN0ZGF0YS90ZXN0b3V0cHV0NiBcCiAJdGVzdGRhdGEvdGVzdG91dHB1dDcgdGVzdGRhdGEvdGVzdG91dHB1dDgtMTYtMiBcCmRpZmYgLS1naXQgYS9kaXN0Mi9ORVdTIGIvZGlzdDIvTkVXUwppbmRleCBhYWVlZTVjLi42MDJlMzI0IDEwMDY0NAotLS0gYS9kaXN0Mi9ORVdTCisrKyBiL2Rpc3QyL05FV1MKQEAgLTEsNiArMSwyOCBAQAogTmV3cyBhYm91dCBQQ1JFMiByZWxlYXNlcwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitWZXJzaW9uIDEwLjIyIDI5LUp1bHktMjAxNgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworMS4gQ2hhbmdlTG9nIGhhcyB0aGUgZGV0YWlscyBvZiBhIG51bWJlciBvZiBidWcgZml4ZXMuCisKKzIuIFRoZSBQT1NJWCB3cmFwcGVyIGZ1bmN0aW9uIHJlZ2NvbXAoKSBkaWQgbm90IHVzZWQgdG8gc3VwcG9ydCBiYWNrIHJlZmVyZW5jZXMKK2FuZCBzdWJyb3V0aW5lIGNhbGxzIGlmIGNhbGxlZCB3aXRoIHRoZSBSRUdfTk9TVUIgb3B0aW9uLiBJdCBub3cgZG9lcy4KKworMy4gQSBuZXcgZnVuY3Rpb24sIHBjcmUyX2NvZGVfY29weSgpLCBpcyBhZGRlZCwgdG8gbWFrZSBhIGNvcHkgb2YgYSBjb21waWxlZAorcGF0dGVybi4KKworNC4gU3VwcG9ydCBmb3Igc3RyaW5nIGNhbGxvdXRzIGlzIGFkZGVkIHRvIHBjcmUyZ3JlcC4KKworNS4gQWRkZWQgdGhlIFBDUkUyX05PX0pJVCBvcHRpb24gdG8gcGNyZTJfbWF0Y2goKS4KKworNi4gVGhlIHBjcmUyX2dldF9lcnJvcl9tZXNzYWdlKCkgZnVuY3Rpb24gbm93IHJldHVybnMgd2l0aCBhIG5lZ2F0aXZlIGVycm9yCitjb2RlIGlmIHRoZSBlcnJvciBudW1iZXIgaXQgaXMgZ2l2ZW4gaXMgdW5rbm93bi4KKworNy4gU2V2ZXJhbCB1cGRhdGVzIGhhdmUgYmVlbiBtYWRlIHRvIHBjcmUydGVzdCBhbmQgdGVzdCBzY3JpcHRzIChzZWUKK0NoYW5nZUxvZykuCisKKwogVmVyc2lvbiAxMC4yMSAxMi1KYW51YXJ5LTIwMTYKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKZGlmZiAtLWdpdCBhL2Rpc3QyL1JFQURNRSBiL2Rpc3QyL1JFQURNRQppbmRleCA0OGQyZmZkLi4wM2Q2N2Y2IDEwMDY0NAotLS0gYS9kaXN0Mi9SRUFETUUKKysrIGIvZGlzdDIvUkVBRE1FCkBAIC0xNjgsMTUgKzE2OCwxMiBAQAogICBidWlsdC4gSWYgeW91IHdhbnQgb25seSB0aGUgMTYtYml0IG9yIDMyLWJpdCBsaWJyYXJ5LCB1c2UgLS1kaXNhYmxlLXBjcmUyLTgKICAgdG8gZGlzYWJsZSBidWlsZGluZyB0aGUgOC1iaXQgbGlicmFyeS4KIAotLiBJZiB5b3Ugd2FudCB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIGp1c3QtaW4tdGltZSBjb21waWxpbmcsIHdoaWNoIGNhbiBnaXZlCi0gIGxhcmdlIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cyBvbiBjZXJ0YWluIHBsYXRmb3JtcywgYWRkIC0tZW5hYmxlLWppdCB0byB0aGUKLSAgImNvbmZpZ3VyZSIgY29tbWFuZC4gVGhpcyBzdXBwb3J0IGlzIGF2YWlsYWJsZSBvbmx5IGZvciBjZXJ0YWluIGhhcmR3YXJlCisuIElmIHlvdSB3YW50IHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IganVzdC1pbi10aW1lIChKSVQpIGNvbXBpbGluZywgd2hpY2ggY2FuCisgIGdpdmUgbGFyZ2UgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzIG9uIGNlcnRhaW4gcGxhdGZvcm1zLCBhZGQgLS1lbmFibGUtaml0IHRvCisgIHRoZSAiY29uZmlndXJlIiBjb21tYW5kLiBUaGlzIHN1cHBvcnQgaXMgYXZhaWxhYmxlIG9ubHkgZm9yIGNlcnRhaW4gaGFyZHdhcmUKICAgYXJjaGl0ZWN0dXJlcy4gSWYgeW91IHRyeSB0byBlbmFibGUgaXQgb24gYW4gdW5zdXBwb3J0ZWQgYXJjaGl0ZWN0dXJlLCB0aGVyZQogICB3aWxsIGJlIGEgY29tcGlsZSB0aW1lIGVycm9yLgogCi0uIFdoZW4gSklUIHN1cHBvcnQgaXMgZW5hYmxlZCwgcGNyZTJncmVwIGF1dG9tYXRpY2FsbHkgbWFrZXMgdXNlIG9mIGl0LCB1bmxlc3MKLSAgeW91IGFkZCAtLWRpc2FibGUtcGNyZTJncmVwLWppdCB0byB0aGUgImNvbmZpZ3VyZSIgY29tbWFuZC4KLQogLiBJZiB5b3UgZG8gbm90IHdhbnQgdG8gbWFrZSB1c2Ugb2YgdGhlIHN1cHBvcnQgZm9yIFVURi04IFVuaWNvZGUgY2hhcmFjdGVyCiAgIHN0cmluZ3MgaW4gdGhlIDgtYml0IGxpYnJhcnksIFVURi0xNiBVbmljb2RlIGNoYXJhY3RlciBzdHJpbmdzIGluIHRoZSAxNi1iaXQKICAgbGlicmFyeSwgb3IgVVRGLTMyIFVuaWNvZGUgY2hhcmFjdGVyIHN0cmluZ3MgaW4gdGhlIDMyLWJpdCBsaWJyYXJ5LCB5b3UgY2FuCkBAIC0zMjQsNiArMzIxLDE0IEBACiAgIHJ1bm5pbmcgIm1ha2UiIHRvIGJ1aWxkIFBDUkUyLiBUaGVyZSBpcyBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGNvdmVyYWdlCiAgIHJlcG9ydGluZyBpbiB0aGUgInBjcmUyYnVpbGQiIGRvY3VtZW50YXRpb24uCiAKKy4gV2hlbiBKSVQgc3VwcG9ydCBpcyBlbmFibGVkLCBwY3JlMmdyZXAgYXV0b21hdGljYWxseSBtYWtlcyB1c2Ugb2YgaXQsIHVubGVzcworICB5b3UgYWRkIC0tZGlzYWJsZS1wY3JlMmdyZXAtaml0IHRvIHRoZSAiY29uZmlndXJlIiBjb21tYW5kLgorCisuIE9uIG5vbi1XaW5kb3dzIHN5dGVtcyB0aGVyZSBpcyBzdXBwb3J0IGZvciBjYWxsaW5nIGV4dGVybmFsIHNjcmlwdHMgZHVyaW5nCisgIG1hdGNoaW5nIGluIHRoZSBwY3JlMmdyZXAgY29tbWFuZCB2aWEgUENSRTIncyBjYWxsb3V0IGZhY2lsaXR5IHdpdGggc3RyaW5nCisgIGFyZ3VtZW50cy4gVGhpcyBzdXBwb3J0IGNhbiBiZSBkaXNhYmxlZCBieSBhZGRpbmcgLS1kaXNhYmxlLXBjcmUyZ3JlcC1jYWxsb3V0CisgIHRvIHRoZSAiY29uZmlndXJlIiBjb21tYW5kLgorCiAuIFRoZSBwY3JlMmdyZXAgcHJvZ3JhbSBjdXJyZW50bHkgc3VwcG9ydHMgb25seSA4LWJpdCBkYXRhIGZpbGVzLCBhbmQgc28KICAgcmVxdWlyZXMgdGhlIDgtYml0IFBDUkUyIGxpYnJhcnkuIEl0IGlzIHBvc3NpYmxlIHRvIGNvbXBpbGUgcGNyZTJncmVwIHRvIHVzZQogICBsaWJ6IGFuZC9vciBsaWJiejIsIGluIG9yZGVyIHRvIHJlYWQgLmd6IGFuZCAuYnoyIGZpbGVzIChyZXNwZWN0aXZlbHkpLCBieQpAQCAtODQwLDQgKzg0NSw0IEBACiBQaGlsaXAgSGF6ZWwKIEVtYWlsIGxvY2FsIHBhcnQ6IHBoMTAKIEVtYWlsIGRvbWFpbjogY2FtLmFjLnVrCi1MYXN0IHVwZGF0ZWQ6IDE2IE9jdG9iZXIgMjAxNQorTGFzdCB1cGRhdGVkOiAwMSBBcHJpbCAyMDE2CmRpZmYgLS1naXQgYS9kaXN0Mi9SdW5HcmVwVGVzdCBiL2Rpc3QyL1J1bkdyZXBUZXN0CmluZGV4IDY3ZDY3MmIuLmEzZTEzMTIgMTAwNzU1Ci0tLSBhL2Rpc3QyL1J1bkdyZXBUZXN0CisrKyBiL2Rpc3QyL1J1bkdyZXBUZXN0CkBAIC0zNCwxNyArMzQsMjIgQEAKIHZhbGdyaW5kPQogd2hpbGUgWyAkIyAtZ3QgMCBdIDsgZG8KICAgY2FzZSAkMSBpbgotICAgIHZhbGdyaW5kKSB2YWxncmluZD0idmFsZ3JpbmQgLXEgLS1sZWFrLWNoZWNrPW5vIC0tc21jLWNoZWNrPWFsbCI7OworICAgIHZhbGdyaW5kKSB2YWxncmluZD0idmFsZ3JpbmQgLXEgLS1sZWFrLWNoZWNrPW5vIC0tc21jLWNoZWNrPWFsbC1ub24tZmlsZSI7OwogICAgICopIGVjaG8gIlJ1bkdyZXBUZXN0OiBVbmtub3duIGFyZ3VtZW50ICQxIjsgZXhpdCAxOzsKICAgZXNhYwogICBzaGlmdAogZG9uZQogCit2anM9CiBwY3JlMmdyZXBfdmVyc2lvbj1gJHBjcmUyZ3JlcCAtVmAKIGlmIFsgIiR2YWxncmluZCIgPSAiIiBdIDsgdGhlbgogICBlY2hvICJUZXN0aW5nICRwY3JlMmdyZXBfdmVyc2lvbiIKIGVsc2UKICAgZWNobyAiVGVzdGluZyAkcGNyZTJncmVwX3ZlcnNpb24gdXNpbmcgdmFsZ3JpbmQiCisgICRwY3JlMnRlc3QgLUMgaml0ID4vZGV2L251bGwKKyAgaWYgWyAkPyAtbmUgMCBdOyB0aGVuCisgICAgdmpzPSItLXN1cHByZXNzaW9ucz0uL3Rlc3RkYXRhL3ZhbGdyaW5kLWppdC5zdXBwIgorICBmaQogZmkKIAogIyBTZXQgdXAgYSBzdWl0YWJsZSAiZGlmZiIgY29tbWFuZCBmb3IgY29tcGFyaXNvbi4gU29tZSBzeXN0ZW1zIGhhdmUgYSBkaWZmCkBAIC0xMDEsMjUzICsxMDYsMjUzIEBACiBlY2hvICJUZXN0aW5nIHBjcmUyZ3JlcCBtYWluIGZlYXR1cmVzIgogCiBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgMSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID50ZXN0dHJ5Z3JlcAotKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIFBBVFRFUk4gLi90ZXN0ZGF0YS9ncmVwaW5wdXQpID4+dGVzdHRyeWdyZXAKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHZqcyAkcGNyZTJncmVwIFBBVFRFUk4gLi90ZXN0ZGF0YS9ncmVwaW5wdXQpID4+dGVzdHRyeWdyZXAKIGVjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCiAKIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCAyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAotKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwICdeUEFUVEVSTicgLi90ZXN0ZGF0YS9ncmVwaW5wdXQpID4+dGVzdHRyeWdyZXAKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHZqcyAkcGNyZTJncmVwICdeUEFUVEVSTicgLi90ZXN0ZGF0YS9ncmVwaW5wdXQpID4+dGVzdHRyeWdyZXAKIGVjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCiAKIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCAzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAotKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC1pbiBQQVRURVJOIC4vdGVzdGRhdGEvZ3JlcGlucHV0KSA+PnRlc3R0cnlncmVwCisoY2QgJHNyY2RpcjsgJHZhbGdyaW5kICR2anMgJHBjcmUyZ3JlcCAtaW4gUEFUVEVSTiAuL3Rlc3RkYXRhL2dyZXBpbnB1dCkgPj50ZXN0dHJ5Z3JlcAogZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKIAogZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PnRlc3R0cnlncmVwCi0oY2QgJHNyY2RpcjsgJHZhbGdyaW5kICRwY3JlMmdyZXAgLWljIFBBVFRFUk4gLi90ZXN0ZGF0YS9ncmVwaW5wdXQpID4+dGVzdHRyeWdyZXAKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHZqcyAkcGNyZTJncmVwIC1pYyBQQVRURVJOIC4vdGVzdGRhdGEvZ3JlcGlucHV0KSA+PnRlc3R0cnlncmVwCiBlY2hvICJSQz0kPyIgPj50ZXN0dHJ5Z3JlcAogCiBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgNSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+dGVzdHRyeWdyZXAKLShjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHBjcmUyZ3JlcCAtaW4gUEFUVEVSTiAuL3Rlc3RkYXRhL2dyZXBpbnB1dCAuL3Rlc3RkYXRhL2dyZXBpbnB1dHgpID4+dGVzdHRyeWdyZXAKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHZqcyAkcGNyZTJncmVwIC1pbiBQQVRURVJOIC4vdGVzdGRhdGEvZ3JlcGlucHV0IC4vdGVzdGRhdGEvZ3JlcGlucHV0eCkgPj50ZXN0dHJ5Z3JlcAogZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKIAogZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PnRlc3R0cnlncmVwCi0oY2QgJHNyY2RpcjsgJHZhbGdyaW5kICRwY3JlMmdyZXAgLWluaCBQQVRURVJOIC4vdGVzdGRhdGEvZ3JlcGlucHV0IC4vdGVzdGRhdGEvZ3JlcGlucHV0eCkgPj50ZXN0dHJ5Z3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkdmpzICRwY3JlMmdyZXAgLWluaCBQQVRURVJOIC4vdGVzdGRhdGEvZ3JlcGlucHV0IC4vdGVzdGRhdGEvZ3JlcGlucHV0eCkgPj50ZXN0dHJ5Z3JlcAogZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKIAogZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PnRlc3R0cnlncmVwCi0oY2QgJHNyY2RpcjsgJHZhbGdyaW5kICRwY3JlMmdyZXAgLWlsIFBBVFRFUk4gLi90ZXN0ZGF0YS9ncmVwaW5wdXQgLi90ZXN0ZGF0YS9ncmVwaW5wdXR4KSA+PnRlc3R0cnlncmVwCisoY2QgJHNyY2RpcjsgJHZhbGdyaW5kICR2anMgJHBjcmUyZ3JlcCAtaWwgUEFUVEVSTiAuL3Rlc3RkYXRhL2dyZXBpbnB1dCAuL3Rlc3RkYXRhL2dyZXBpbnB1dHgpID4+dGVzdHRyeWdyZXAKIGVjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCiAKIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCA4IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAotKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC1sIFBBVFRFUk4gLi90ZXN0ZGF0YS9ncmVwaW5wdXQgLi90ZXN0ZGF0YS9ncmVwaW5wdXR4KSA+PnRlc3R0cnlncmVwCisoY2QgJHNyY2RpcjsgJHZhbGdyaW5kICR2anMgJHBjcmUyZ3JlcCAtbCBQQVRURVJOIC4vdGVzdGRhdGEvZ3JlcGlucHV0IC4vdGVzdGRhdGEvZ3JlcGlucHV0eCkgPj50ZXN0dHJ5Z3JlcAogZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKIAogZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PnRlc3R0cnlncmVwCi0oY2QgJHNyY2RpcjsgJHZhbGdyaW5kICRwY3JlMmdyZXAgLXEgUEFUVEVSTiAuL3Rlc3RkYXRhL2dyZXBpbnB1dCAuL3Rlc3RkYXRhL2dyZXBpbnB1dHgpID4+dGVzdHRyeWdyZXAKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHZqcyAkcGNyZTJncmVwIC1xIFBBVFRFUk4gLi90ZXN0ZGF0YS9ncmVwaW5wdXQgLi90ZXN0ZGF0YS9ncmVwaW5wdXR4KSA+PnRlc3R0cnlncmVwCiBlY2hvICJSQz0kPyIgPj50ZXN0dHJ5Z3JlcAogCiBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgMTAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+dGVzdHRyeWdyZXAKLShjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHBjcmUyZ3JlcCAtcSBORVZFUi1QQVRURVJOIC4vdGVzdGRhdGEvZ3JlcGlucHV0IC4vdGVzdGRhdGEvZ3JlcGlucHV0eCkgPj50ZXN0dHJ5Z3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkdmpzICRwY3JlMmdyZXAgLXEgTkVWRVItUEFUVEVSTiAuL3Rlc3RkYXRhL2dyZXBpbnB1dCAuL3Rlc3RkYXRhL2dyZXBpbnB1dHgpID4+dGVzdHRyeWdyZXAKIGVjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCiAKIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCAxMSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAotKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC12biBwYXR0ZXJuIC4vdGVzdGRhdGEvZ3JlcGlucHV0eCkgPj50ZXN0dHJ5Z3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkdmpzICRwY3JlMmdyZXAgLXZuIHBhdHRlcm4gLi90ZXN0ZGF0YS9ncmVwaW5wdXR4KSA+PnRlc3R0cnlncmVwCiBlY2hvICJSQz0kPyIgPj50ZXN0dHJ5Z3JlcAogCiBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgMTIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+dGVzdHRyeWdyZXAKLShjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHBjcmUyZ3JlcCAtaXggcGF0dGVybiAuL3Rlc3RkYXRhL2dyZXBpbnB1dHgpID4+dGVzdHRyeWdyZXAKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHZqcyAkcGNyZTJncmVwIC1peCBwYXR0ZXJuIC4vdGVzdGRhdGEvZ3JlcGlucHV0eCkgPj50ZXN0dHJ5Z3JlcAogZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKIAogZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDEzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PnRlc3R0cnlncmVwCiBlY2hvIHNldmVudGVlbiA+dGVzdHRlbXAxZ3JlcAotKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC1mLi90ZXN0ZGF0YS9ncmVwbGlzdCAtZiAkYnVpbGRkaXIvdGVzdHRlbXAxZ3JlcCAuL3Rlc3RkYXRhL2dyZXBpbnB1dHgpID4+dGVzdHRyeWdyZXAKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHZqcyAkcGNyZTJncmVwIC1mLi90ZXN0ZGF0YS9ncmVwbGlzdCAtZiAkYnVpbGRkaXIvdGVzdHRlbXAxZ3JlcCAuL3Rlc3RkYXRhL2dyZXBpbnB1dHgpID4+dGVzdHRyeWdyZXAKIGVjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCiAKIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCAxNCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAotKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC13IHBhdCAuL3Rlc3RkYXRhL2dyZXBpbnB1dCAuL3Rlc3RkYXRhL2dyZXBpbnB1dHgpID4+dGVzdHRyeWdyZXAKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHZqcyAkcGNyZTJncmVwIC13IHBhdCAuL3Rlc3RkYXRhL2dyZXBpbnB1dCAuL3Rlc3RkYXRhL2dyZXBpbnB1dHgpID4+dGVzdHRyeWdyZXAKIGVjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCiAKIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCAxNSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAotKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwICdhYmNeKicgLi90ZXN0ZGF0YS9ncmVwaW5wdXQpIDI+PnRlc3R0cnlncmVwID4+dGVzdHRyeWdyZXAKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHZqcyAkcGNyZTJncmVwICdhYmNeKicgLi90ZXN0ZGF0YS9ncmVwaW5wdXQpIDI+PnRlc3R0cnlncmVwID4+dGVzdHRyeWdyZXAKIGVjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCiAKIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCAxNiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAotKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIGFiYyAuL3Rlc3RkYXRhL2dyZXBpbnB1dCAuL3Rlc3RkYXRhL25vbmV4aXN0ZmlsZSkgMj4+dGVzdHRyeWdyZXAgPj50ZXN0dHJ5Z3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkdmpzICRwY3JlMmdyZXAgYWJjIC4vdGVzdGRhdGEvZ3JlcGlucHV0IC4vdGVzdGRhdGEvbm9uZXhpc3RmaWxlKSAyPj50ZXN0dHJ5Z3JlcCA+PnRlc3R0cnlncmVwCiBlY2hvICJSQz0kPyIgPj50ZXN0dHJ5Z3JlcAogCiBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgMTcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+dGVzdHRyeWdyZXAKLShjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHBjcmUyZ3JlcCAtTSAndGhlXG5vdXRwdXQnIC4vdGVzdGRhdGEvZ3JlcGlucHV0KSA+PnRlc3R0cnlncmVwCisoY2QgJHNyY2RpcjsgJHZhbGdyaW5kICR2anMgJHBjcmUyZ3JlcCAtTSAndGhlXG5vdXRwdXQnIC4vdGVzdGRhdGEvZ3JlcGlucHV0KSA+PnRlc3R0cnlncmVwCiBlY2hvICJSQz0kPyIgPj50ZXN0dHJ5Z3JlcAogCiBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgMTggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+dGVzdHRyeWdyZXAKLShjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHBjcmUyZ3JlcCAtTW4gJyh0aGVcbm91dHB1dHxkb2dcLlxuLS0pJyAuL3Rlc3RkYXRhL2dyZXBpbnB1dCkgPj50ZXN0dHJ5Z3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkdmpzICRwY3JlMmdyZXAgLU1uICcodGhlXG5vdXRwdXR8ZG9nXC5cbi0tKScgLi90ZXN0ZGF0YS9ncmVwaW5wdXQpID4+dGVzdHRyeWdyZXAKIGVjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCiAKIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCAxOSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAotKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC1NaXggJ1BhdHRlcm4nIC4vdGVzdGRhdGEvZ3JlcGlucHV0eCkgPj50ZXN0dHJ5Z3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkdmpzICRwY3JlMmdyZXAgLU1peCAnUGF0dGVybicgLi90ZXN0ZGF0YS9ncmVwaW5wdXR4KSA+PnRlc3R0cnlncmVwCiBlY2hvICJSQz0kPyIgPj50ZXN0dHJ5Z3JlcAogCiBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgMjAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+dGVzdHRyeWdyZXAKLShjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHBjcmUyZ3JlcCAtTWl4biAnY29tcGxldGUgcGFpclxub2YgbGluZXMnIC4vdGVzdGRhdGEvZ3JlcGlucHV0eCkgPj50ZXN0dHJ5Z3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkdmpzICRwY3JlMmdyZXAgLU1peG4gJ2NvbXBsZXRlIHBhaXJcbm9mIGxpbmVzJyAuL3Rlc3RkYXRhL2dyZXBpbnB1dHgpID4+dGVzdHRyeWdyZXAKIGVjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCiAKIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCAyMSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAotKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC1uQTMgJ2ZvdXInIC4vdGVzdGRhdGEvZ3JlcGlucHV0eCkgPj50ZXN0dHJ5Z3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkdmpzICRwY3JlMmdyZXAgLW5BMyAnZm91cicgLi90ZXN0ZGF0YS9ncmVwaW5wdXR4KSA+PnRlc3R0cnlncmVwCiBlY2hvICJSQz0kPyIgPj50ZXN0dHJ5Z3JlcAogCiBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgMjIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+dGVzdHRyeWdyZXAKLShjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHBjcmUyZ3JlcCAtbkIzICdmb3VyJyAuL3Rlc3RkYXRhL2dyZXBpbnB1dHgpID4+dGVzdHRyeWdyZXAKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHZqcyAkcGNyZTJncmVwIC1uQjMgJ2ZvdXInIC4vdGVzdGRhdGEvZ3JlcGlucHV0eCkgPj50ZXN0dHJ5Z3JlcAogZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKIAogZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDIzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PnRlc3R0cnlncmVwCi0oY2QgJHNyY2RpcjsgJHZhbGdyaW5kICRwY3JlMmdyZXAgLUMzICdmb3VyJyAuL3Rlc3RkYXRhL2dyZXBpbnB1dHgpID4+dGVzdHRyeWdyZXAKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHZqcyAkcGNyZTJncmVwIC1DMyAnZm91cicgLi90ZXN0ZGF0YS9ncmVwaW5wdXR4KSA+PnRlc3R0cnlncmVwCiBlY2hvICJSQz0kPyIgPj50ZXN0dHJ5Z3JlcAogCiBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgMjQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+dGVzdHRyeWdyZXAKLShjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHBjcmUyZ3JlcCAtQTkgJ2ZvdXInIC4vdGVzdGRhdGEvZ3JlcGlucHV0eCkgPj50ZXN0dHJ5Z3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkdmpzICRwY3JlMmdyZXAgLUE5ICdmb3VyJyAuL3Rlc3RkYXRhL2dyZXBpbnB1dHgpID4+dGVzdHRyeWdyZXAKIGVjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCiAKIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCAyNSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAotKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC1uQjkgJ2ZvdXInIC4vdGVzdGRhdGEvZ3JlcGlucHV0eCkgPj50ZXN0dHJ5Z3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkdmpzICRwY3JlMmdyZXAgLW5COSAnZm91cicgLi90ZXN0ZGF0YS9ncmVwaW5wdXR4KSA+PnRlc3R0cnlncmVwCiBlY2hvICJSQz0kPyIgPj50ZXN0dHJ5Z3JlcAogCiBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgMjYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+dGVzdHRyeWdyZXAKLShjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHBjcmUyZ3JlcCAtQTkgLUI5ICdmb3VyJyAuL3Rlc3RkYXRhL2dyZXBpbnB1dHgpID4+dGVzdHRyeWdyZXAKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHZqcyAkcGNyZTJncmVwIC1BOSAtQjkgJ2ZvdXInIC4vdGVzdGRhdGEvZ3JlcGlucHV0eCkgPj50ZXN0dHJ5Z3JlcAogZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKIAogZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDI3IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PnRlc3R0cnlncmVwCi0oY2QgJHNyY2RpcjsgJHZhbGdyaW5kICRwY3JlMmdyZXAgLUExMCAnZm91cicgLi90ZXN0ZGF0YS9ncmVwaW5wdXR4KSA+PnRlc3R0cnlncmVwCisoY2QgJHNyY2RpcjsgJHZhbGdyaW5kICR2anMgJHBjcmUyZ3JlcCAtQTEwICdmb3VyJyAuL3Rlc3RkYXRhL2dyZXBpbnB1dHgpID4+dGVzdHRyeWdyZXAKIGVjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCiAKIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCAyOCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAotKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC1uQjEwICdmb3VyJyAuL3Rlc3RkYXRhL2dyZXBpbnB1dHgpID4+dGVzdHRyeWdyZXAKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHZqcyAkcGNyZTJncmVwIC1uQjEwICdmb3VyJyAuL3Rlc3RkYXRhL2dyZXBpbnB1dHgpID4+dGVzdHRyeWdyZXAKIGVjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCiAKIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCAyOSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAotKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC1DMTIgLUIxMCAnZm91cicgLi90ZXN0ZGF0YS9ncmVwaW5wdXR4KSA+PnRlc3R0cnlncmVwCisoY2QgJHNyY2RpcjsgJHZhbGdyaW5kICR2anMgJHBjcmUyZ3JlcCAtQzEyIC1CMTAgJ2ZvdXInIC4vdGVzdGRhdGEvZ3JlcGlucHV0eCkgPj50ZXN0dHJ5Z3JlcAogZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKIAogZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDMwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PnRlc3R0cnlncmVwCi0oY2QgJHNyY2RpcjsgJHZhbGdyaW5kICRwY3JlMmdyZXAgLWluQjMgJ3BhdHRlcm4nIC4vdGVzdGRhdGEvZ3JlcGlucHV0IC4vdGVzdGRhdGEvZ3JlcGlucHV0eCkgPj50ZXN0dHJ5Z3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkdmpzICRwY3JlMmdyZXAgLWluQjMgJ3BhdHRlcm4nIC4vdGVzdGRhdGEvZ3JlcGlucHV0IC4vdGVzdGRhdGEvZ3JlcGlucHV0eCkgPj50ZXN0dHJ5Z3JlcAogZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKIAogZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDMxIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PnRlc3R0cnlncmVwCi0oY2QgJHNyY2RpcjsgJHZhbGdyaW5kICRwY3JlMmdyZXAgLWluQTMgJ3BhdHRlcm4nIC4vdGVzdGRhdGEvZ3JlcGlucHV0IC4vdGVzdGRhdGEvZ3JlcGlucHV0eCkgPj50ZXN0dHJ5Z3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkdmpzICRwY3JlMmdyZXAgLWluQTMgJ3BhdHRlcm4nIC4vdGVzdGRhdGEvZ3JlcGlucHV0IC4vdGVzdGRhdGEvZ3JlcGlucHV0eCkgPj50ZXN0dHJ5Z3JlcAogZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKIAogZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDMyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PnRlc3R0cnlncmVwCi0oY2QgJHNyY2RpcjsgJHZhbGdyaW5kICRwY3JlMmdyZXAgLUwgJ2ZveCcgLi90ZXN0ZGF0YS9ncmVwaW5wdXQgLi90ZXN0ZGF0YS9ncmVwaW5wdXR4KSA+PnRlc3R0cnlncmVwCisoY2QgJHNyY2RpcjsgJHZhbGdyaW5kICR2anMgJHBjcmUyZ3JlcCAtTCAnZm94JyAuL3Rlc3RkYXRhL2dyZXBpbnB1dCAuL3Rlc3RkYXRhL2dyZXBpbnB1dHgpID4+dGVzdHRyeWdyZXAKIGVjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCiAKIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCAzMyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAotKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwICdmb3gnIC4vdGVzdGRhdGEvZ3JlcG5vbmV4aXN0KSA+PnRlc3R0cnlncmVwIDI+JjEKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHZqcyAkcGNyZTJncmVwICdmb3gnIC4vdGVzdGRhdGEvZ3JlcG5vbmV4aXN0KSA+PnRlc3R0cnlncmVwIDI+JjEKIGVjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCiAKIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCAzNCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAotKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC1zICdmb3gnIC4vdGVzdGRhdGEvZ3JlcG5vbmV4aXN0KSA+PnRlc3R0cnlncmVwIDI+JjEKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHZqcyAkcGNyZTJncmVwIC1zICdmb3gnIC4vdGVzdGRhdGEvZ3JlcG5vbmV4aXN0KSA+PnRlc3R0cnlncmVwIDI+JjEKIGVjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCiAKIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCAzNSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAotKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC1MIC1yIC0taW5jbHVkZT1ncmVwaW5wdXR4IC0taW5jbHVkZSBncmVwaW5wdXQ4IC0tZXhjbHVkZS1kaXI9J15cLicgJ2ZveCcgLi90ZXN0ZGF0YSB8IHNvcnQpID4+dGVzdHRyeWdyZXAKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHZqcyAkcGNyZTJncmVwIC1MIC1yIC0taW5jbHVkZT1ncmVwaW5wdXR4IC0taW5jbHVkZSBncmVwaW5wdXQ4IC0tZXhjbHVkZS1kaXI9J15cLicgJ2ZveCcgLi90ZXN0ZGF0YSB8IHNvcnQpID4+dGVzdHRyeWdyZXAKIGVjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCiAKIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCAzNiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAotKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC1MIC1yIC0taW5jbHVkZT1ncmVwaW5wdXQgLS1leGNsdWRlICdncmVwaW5wdXQkJyAtLWV4Y2x1ZGU9Z3JlcGlucHV0OCAtLWV4Y2x1ZGUtZGlyPSdeXC4nICdmb3gnIC4vdGVzdGRhdGEgfCBzb3J0KSA+PnRlc3R0cnlncmVwCisoY2QgJHNyY2RpcjsgJHZhbGdyaW5kICR2anMgJHBjcmUyZ3JlcCAtTCAtciAtLWluY2x1ZGU9Z3JlcGlucHV0IC0tZXhjbHVkZSAnZ3JlcGlucHV0JCcgLS1leGNsdWRlPWdyZXBpbnB1dDggLS1leGNsdWRlLWRpcj0nXlwuJyAnZm94JyAuL3Rlc3RkYXRhIHwgc29ydCkgPj50ZXN0dHJ5Z3JlcAogZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKIAogZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDM3IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PnRlc3R0cnlncmVwCi0oY2QgJHNyY2RpcjsgJHZhbGdyaW5kICRwY3JlMmdyZXAgICdeKGErKSpcZCcgLi90ZXN0ZGF0YS9ncmVwaW5wdXQpID4+dGVzdHRyeWdyZXAgMj50ZXN0c3RkZXJyZ3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkdmpzICRwY3JlMmdyZXAgICdeKGErKSpcZCcgLi90ZXN0ZGF0YS9ncmVwaW5wdXQpID4+dGVzdHRyeWdyZXAgMj50ZXN0c3RkZXJyZ3JlcAogZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKIGVjaG8gIj09PT09PT09IFNUREVSUiA9PT09PT09PSIgPj50ZXN0dHJ5Z3JlcAogY2F0IHRlc3RzdGRlcnJncmVwID4+dGVzdHRyeWdyZXAKIAogZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDM4IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAotKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwICc+XHgwMDwnIC4vdGVzdGRhdGEvZ3JlcGlucHV0KSA+PnRlc3R0cnlncmVwCisoY2QgJHNyY2RpcjsgJHZhbGdyaW5kICR2anMgJHBjcmUyZ3JlcCAnPlx4MDA8JyAuL3Rlc3RkYXRhL2dyZXBpbnB1dCkgPj50ZXN0dHJ5Z3JlcAogZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKIAogZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDM5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAotKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC1BMSAnYmVmb3JlIHRoZSBiaW5hcnkgemVybycgLi90ZXN0ZGF0YS9ncmVwaW5wdXQpID4+dGVzdHRyeWdyZXAKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHZqcyAkcGNyZTJncmVwIC1BMSAnYmVmb3JlIHRoZSBiaW5hcnkgemVybycgLi90ZXN0ZGF0YS9ncmVwaW5wdXQpID4+dGVzdHRyeWdyZXAKIGVjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCiAKIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCA0MCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+dGVzdHRyeWdyZXAKLShjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHBjcmUyZ3JlcCAtQjEgJ2FmdGVyIHRoZSBiaW5hcnkgemVybycgLi90ZXN0ZGF0YS9ncmVwaW5wdXQpID4+dGVzdHRyeWdyZXAKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHZqcyAkcGNyZTJncmVwIC1CMSAnYWZ0ZXIgdGhlIGJpbmFyeSB6ZXJvJyAuL3Rlc3RkYXRhL2dyZXBpbnB1dCkgPj50ZXN0dHJ5Z3JlcAogZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKIAogZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDQxIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAotKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC1CMSAtbyAnXHcrIHRoZSBiaW5hcnkgemVybycgLi90ZXN0ZGF0YS9ncmVwaW5wdXQpID4+dGVzdHRyeWdyZXAKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHZqcyAkcGNyZTJncmVwIC1CMSAtbyAnXHcrIHRoZSBiaW5hcnkgemVybycgLi90ZXN0ZGF0YS9ncmVwaW5wdXQpID4+dGVzdHRyeWdyZXAKIGVjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCiAKIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCA0MiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+dGVzdHRyeWdyZXAKLShjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHBjcmUyZ3JlcCAtQjEgLW9uSCAnXHcrIHRoZSBiaW5hcnkgemVybycgLi90ZXN0ZGF0YS9ncmVwaW5wdXQpID4+dGVzdHRyeWdyZXAKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHZqcyAkcGNyZTJncmVwIC1CMSAtb25IICdcdysgdGhlIGJpbmFyeSB6ZXJvJyAuL3Rlc3RkYXRhL2dyZXBpbnB1dCkgPj50ZXN0dHJ5Z3JlcAogZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKIAogZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDQzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAotKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC1vbiAnYmVmb3JlfHplcm98YWZ0ZXInIC4vdGVzdGRhdGEvZ3JlcGlucHV0KSA+PnRlc3R0cnlncmVwCisoY2QgJHNyY2RpcjsgJHZhbGdyaW5kICR2anMgJHBjcmUyZ3JlcCAtb24gJ2JlZm9yZXx6ZXJvfGFmdGVyJyAuL3Rlc3RkYXRhL2dyZXBpbnB1dCkgPj50ZXN0dHJ5Z3JlcAogZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKIAogZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDQ0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAotKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC1vbiAtZSBiZWZvcmUgLWV6ZXJvIC1lIGFmdGVyIC4vdGVzdGRhdGEvZ3JlcGlucHV0KSA+PnRlc3R0cnlncmVwCisoY2QgJHNyY2RpcjsgJHZhbGdyaW5kICR2anMgJHBjcmUyZ3JlcCAtb24gLWUgYmVmb3JlIC1lemVybyAtZSBhZnRlciAuL3Rlc3RkYXRhL2dyZXBpbnB1dCkgPj50ZXN0dHJ5Z3JlcAogZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKIAogZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDQ1IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAotKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC1vbiAtZiAuL3Rlc3RkYXRhL2dyZXBsaXN0IC1lIGJpbmFyeSAuL3Rlc3RkYXRhL2dyZXBpbnB1dCkgPj50ZXN0dHJ5Z3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkdmpzICRwY3JlMmdyZXAgLW9uIC1mIC4vdGVzdGRhdGEvZ3JlcGxpc3QgLWUgYmluYXJ5IC4vdGVzdGRhdGEvZ3JlcGlucHV0KSA+PnRlc3R0cnlncmVwCiBlY2hvICJSQz0kPyIgPj50ZXN0dHJ5Z3JlcAogCiBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgNDYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PnRlc3R0cnlncmVwCi0oY2QgJHNyY2RpcjsgJHZhbGdyaW5kICRwY3JlMmdyZXAgLWVhYmMgLWUgJyh1bmNsb3NlZCcgLi90ZXN0ZGF0YS9ncmVwaW5wdXQpIDI+PnRlc3R0cnlncmVwID4+dGVzdHRyeWdyZXAKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHZqcyAkcGNyZTJncmVwIC1lYWJjIC1lICcodW5jbG9zZWQnIC4vdGVzdGRhdGEvZ3JlcGlucHV0KSAyPj50ZXN0dHJ5Z3JlcCA+PnRlc3R0cnlncmVwCiBlY2hvICJSQz0kPyIgPj50ZXN0dHJ5Z3JlcAogCiBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgNDcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PnRlc3R0cnlncmVwCi0oY2QgJHNyY2RpcjsgJHZhbGdyaW5kICRwY3JlMmdyZXAgLUZ4ICJBQi5WRQorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkdmpzICRwY3JlMmdyZXAgLUZ4ICJBQi5WRQogZWxlcGhhbnQiIC4vdGVzdGRhdGEvZ3JlcGlucHV0KSA+PnRlc3R0cnlncmVwCiBlY2hvICJSQz0kPyIgPj50ZXN0dHJ5Z3JlcAogCiBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgNDggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PnRlc3R0cnlncmVwCi0oY2QgJHNyY2RpcjsgJHZhbGdyaW5kICRwY3JlMmdyZXAgLUYgIkFCLlZFCisoY2QgJHNyY2RpcjsgJHZhbGdyaW5kICR2anMgJHBjcmUyZ3JlcCAtRiAiQUIuVkUKIGVsZXBoYW50IiAuL3Rlc3RkYXRhL2dyZXBpbnB1dCkgPj50ZXN0dHJ5Z3JlcAogZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKIAogZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDQ5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAotKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC1GIC1lIERBVEEgLWUgIkFCLlZFCisoY2QgJHNyY2RpcjsgJHZhbGdyaW5kICR2anMgJHBjcmUyZ3JlcCAtRiAtZSBEQVRBIC1lICJBQi5WRQogZWxlcGhhbnQiIC4vdGVzdGRhdGEvZ3JlcGlucHV0KSA+PnRlc3R0cnlncmVwCiBlY2hvICJSQz0kPyIgPj50ZXN0dHJ5Z3JlcAogCiBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgNTAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PnRlc3R0cnlncmVwCi0oY2QgJHNyY2RpcjsgJHZhbGdyaW5kICRwY3JlMmdyZXAgIl4oYWJjfGRlZnxnaGl8amtsKSIgLi90ZXN0ZGF0YS9ncmVwaW5wdXR4KSA+PnRlc3R0cnlncmVwCisoY2QgJHNyY2RpcjsgJHZhbGdyaW5kICR2anMgJHBjcmUyZ3JlcCAiXihhYmN8ZGVmfGdoaXxqa2wpIiAuL3Rlc3RkYXRhL2dyZXBpbnB1dHgpID4+dGVzdHRyeWdyZXAKIGVjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCiAKIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCA1MSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+dGVzdHRyeWdyZXAKLShjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHBjcmUyZ3JlcCAtTXYgImJyb3duXHNmb3giIC4vdGVzdGRhdGEvZ3JlcGlucHV0dikgPj50ZXN0dHJ5Z3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkdmpzICRwY3JlMmdyZXAgLU12ICJicm93blxzZm94IiAuL3Rlc3RkYXRhL2dyZXBpbnB1dHYpID4+dGVzdHRyeWdyZXAKIGVjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCiAKIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCA1MiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+dGVzdHRyeWdyZXAKLShjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHBjcmUyZ3JlcCAtLWNvbG91cj1hbHdheXMganVtcHMgLi90ZXN0ZGF0YS9ncmVwaW5wdXR2KSA+PnRlc3R0cnlncmVwCisoY2QgJHNyY2RpcjsgJHZhbGdyaW5kICR2anMgJHBjcmUyZ3JlcCAtLWNvbG91cj1hbHdheXMganVtcHMgLi90ZXN0ZGF0YS9ncmVwaW5wdXR2KSA+PnRlc3R0cnlncmVwCiBlY2hvICJSQz0kPyIgPj50ZXN0dHJ5Z3JlcAogCiBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgNTMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PnRlc3R0cnlncmVwCi0oY2QgJHNyY2RpcjsgJHZhbGdyaW5kICRwY3JlMmdyZXAgLS1maWxlLW9mZnNldHMgJ2JlZm9yZXx6ZXJvfGFmdGVyJyAuL3Rlc3RkYXRhL2dyZXBpbnB1dCkgPj50ZXN0dHJ5Z3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkdmpzICRwY3JlMmdyZXAgLS1maWxlLW9mZnNldHMgJ2JlZm9yZXx6ZXJvfGFmdGVyJyAuL3Rlc3RkYXRhL2dyZXBpbnB1dCkgPj50ZXN0dHJ5Z3JlcAogZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKIAogZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDU0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAotKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC0tbGluZS1vZmZzZXRzICdiZWZvcmV8emVyb3xhZnRlcicgLi90ZXN0ZGF0YS9ncmVwaW5wdXQpID4+dGVzdHRyeWdyZXAKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHZqcyAkcGNyZTJncmVwIC0tbGluZS1vZmZzZXRzICdiZWZvcmV8emVyb3xhZnRlcicgLi90ZXN0ZGF0YS9ncmVwaW5wdXQpID4+dGVzdHRyeWdyZXAKIGVjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCiAKIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCA1NSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAotKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC1mLi90ZXN0ZGF0YS9ncmVwbGlzdCAtLWNvbG9yPWFsd2F5cyAuL3Rlc3RkYXRhL2dyZXBpbnB1dHgpID4+dGVzdHRyeWdyZXAKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHZqcyAkcGNyZTJncmVwIC1mLi90ZXN0ZGF0YS9ncmVwbGlzdCAtLWNvbG9yPWFsd2F5cyAuL3Rlc3RkYXRhL2dyZXBpbnB1dHgpID4+dGVzdHRyeWdyZXAKIGVjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCiAKIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCA1NiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAotKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC1jIGxhenkgLi90ZXN0ZGF0YS9ncmVwaW5wdXQqKSA+PnRlc3R0cnlncmVwCisoY2QgJHNyY2RpcjsgJHZhbGdyaW5kICR2anMgJHBjcmUyZ3JlcCAtYyBsYXp5IC4vdGVzdGRhdGEvZ3JlcGlucHV0KikgPj50ZXN0dHJ5Z3JlcAogZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKIAogZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDU3IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PnRlc3R0cnlncmVwCi0oY2QgJHNyY2RpcjsgJHZhbGdyaW5kICRwY3JlMmdyZXAgLWMgLWwgbGF6eSAuL3Rlc3RkYXRhL2dyZXBpbnB1dCopID4+dGVzdHRyeWdyZXAKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHZqcyAkcGNyZTJncmVwIC1jIC1sIGxhenkgLi90ZXN0ZGF0YS9ncmVwaW5wdXQqKSA+PnRlc3R0cnlncmVwCiBlY2hvICJSQz0kPyIgPj50ZXN0dHJ5Z3JlcAogCiBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgNTggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+dGVzdHRyeWdyZXAKLShjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHBjcmUyZ3JlcCAtLXJlZ2V4PVBBVFRFUk4gLi90ZXN0ZGF0YS9ncmVwaW5wdXQpID4+dGVzdHRyeWdyZXAKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHZqcyAkcGNyZTJncmVwIC0tcmVnZXg9UEFUVEVSTiAuL3Rlc3RkYXRhL2dyZXBpbnB1dCkgPj50ZXN0dHJ5Z3JlcAogZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKIAogZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDU5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PnRlc3R0cnlncmVwCi0oY2QgJHNyY2RpcjsgJHZhbGdyaW5kICRwY3JlMmdyZXAgLS1yZWdleHA9UEFUVEVSTiAuL3Rlc3RkYXRhL2dyZXBpbnB1dCkgPj50ZXN0dHJ5Z3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkdmpzICRwY3JlMmdyZXAgLS1yZWdleHA9UEFUVEVSTiAuL3Rlc3RkYXRhL2dyZXBpbnB1dCkgPj50ZXN0dHJ5Z3JlcAogZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKIAogZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDYwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PnRlc3R0cnlncmVwCi0oY2QgJHNyY2RpcjsgJHZhbGdyaW5kICRwY3JlMmdyZXAgLS1yZWdleCBQQVRURVJOIC4vdGVzdGRhdGEvZ3JlcGlucHV0KSA+PnRlc3R0cnlncmVwCisoY2QgJHNyY2RpcjsgJHZhbGdyaW5kICR2anMgJHBjcmUyZ3JlcCAtLXJlZ2V4IFBBVFRFUk4gLi90ZXN0ZGF0YS9ncmVwaW5wdXQpID4+dGVzdHRyeWdyZXAKIGVjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCiAKIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCA2MSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAotKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC0tcmVnZXhwIFBBVFRFUk4gLi90ZXN0ZGF0YS9ncmVwaW5wdXQpID4+dGVzdHRyeWdyZXAKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHZqcyAkcGNyZTJncmVwIC0tcmVnZXhwIFBBVFRFUk4gLi90ZXN0ZGF0YS9ncmVwaW5wdXQpID4+dGVzdHRyeWdyZXAKIGVjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCiAKIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCA2MiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcApAQCAtMzU5LDE5NiArMzY0LDIwOCBAQAogZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKIAogZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDY0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAotKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC1vMSAnKD88PVBBVClURVJOIChhcChwZWFyKXMpJyAuL3Rlc3RkYXRhL2dyZXBpbnB1dCkgPj50ZXN0dHJ5Z3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkdmpzICRwY3JlMmdyZXAgLW8xICcoPzw9UEFUKVRFUk4gKGFwKHBlYXIpcyknIC4vdGVzdGRhdGEvZ3JlcGlucHV0KSA+PnRlc3R0cnlncmVwCiBlY2hvICJSQz0kPyIgPj50ZXN0dHJ5Z3JlcAogCiBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgNjUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PnRlc3R0cnlncmVwCi0oY2QgJHNyY2RpcjsgJHZhbGdyaW5kICRwY3JlMmdyZXAgLW8yICcoPzw9UEFUKVRFUk4gKGFwKHBlYXIpcyknIC4vdGVzdGRhdGEvZ3JlcGlucHV0KSA+PnRlc3R0cnlncmVwCisoY2QgJHNyY2RpcjsgJHZhbGdyaW5kICR2anMgJHBjcmUyZ3JlcCAtbzIgJyg/PD1QQVQpVEVSTiAoYXAocGVhcilzKScgLi90ZXN0ZGF0YS9ncmVwaW5wdXQpID4+dGVzdHRyeWdyZXAKIGVjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCiAKIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCA2NiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+dGVzdHRyeWdyZXAKLShjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHBjcmUyZ3JlcCAtbzMgJyg/PD1QQVQpVEVSTiAoYXAocGVhcilzKScgLi90ZXN0ZGF0YS9ncmVwaW5wdXQpID4+dGVzdHRyeWdyZXAKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHZqcyAkcGNyZTJncmVwIC1vMyAnKD88PVBBVClURVJOIChhcChwZWFyKXMpJyAuL3Rlc3RkYXRhL2dyZXBpbnB1dCkgPj50ZXN0dHJ5Z3JlcAogZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKIAogZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDY3IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAotKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC1vMTIgJyg/PD1QQVQpVEVSTiAoYXAocGVhcilzKScgLi90ZXN0ZGF0YS9ncmVwaW5wdXQpID4+dGVzdHRyeWdyZXAKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHZqcyAkcGNyZTJncmVwIC1vMTIgJyg/PD1QQVQpVEVSTiAoYXAocGVhcilzKScgLi90ZXN0ZGF0YS9ncmVwaW5wdXQpID4+dGVzdHRyeWdyZXAKIGVjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCiAKIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCA2OCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+dGVzdHRyeWdyZXAKLShjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHBjcmUyZ3JlcCAtLW9ubHktbWF0Y2hpbmc9MiAnKD88PVBBVClURVJOIChhcChwZWFyKXMpJyAuL3Rlc3RkYXRhL2dyZXBpbnB1dCkgPj50ZXN0dHJ5Z3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkdmpzICRwY3JlMmdyZXAgLS1vbmx5LW1hdGNoaW5nPTIgJyg/PD1QQVQpVEVSTiAoYXAocGVhcilzKScgLi90ZXN0ZGF0YS9ncmVwaW5wdXQpID4+dGVzdHRyeWdyZXAKIGVjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCiAKIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCA2OSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAotKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC12biAtLWNvbG91cj1hbHdheXMgcGF0dGVybiAuL3Rlc3RkYXRhL2dyZXBpbnB1dHgpID4+dGVzdHRyeWdyZXAKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHZqcyAkcGNyZTJncmVwIC12biAtLWNvbG91cj1hbHdheXMgcGF0dGVybiAuL3Rlc3RkYXRhL2dyZXBpbnB1dHgpID4+dGVzdHRyeWdyZXAKIGVjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCiAKIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCA3MCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAotKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC0tY29sb3I9YWx3YXlzIC1NICJ0cmlwbGU6XHQuKlxuXG4iIC4vdGVzdGRhdGEvZ3JlcGlucHV0MykgPj50ZXN0dHJ5Z3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkdmpzICRwY3JlMmdyZXAgLS1jb2xvcj1hbHdheXMgLU0gInRyaXBsZTpcdC4qXG5cbiIgLi90ZXN0ZGF0YS9ncmVwaW5wdXQzKSA+PnRlc3R0cnlncmVwCiBlY2hvICJSQz0kPyIgPj50ZXN0dHJ5Z3JlcAogCiBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgNzEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+dGVzdHRyeWdyZXAKLShjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHBjcmUyZ3JlcCAtbyAiXjAxfF4wMnxeMDMiIC4vdGVzdGRhdGEvZ3JlcGlucHV0KSA+PnRlc3R0cnlncmVwCisoY2QgJHNyY2RpcjsgJHZhbGdyaW5kICR2anMgJHBjcmUyZ3JlcCAtbyAiXjAxfF4wMnxeMDMiIC4vdGVzdGRhdGEvZ3JlcGlucHV0KSA+PnRlc3R0cnlncmVwCiBlY2hvICJSQz0kPyIgPj50ZXN0dHJ5Z3JlcAogCiBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgNzIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+dGVzdHRyeWdyZXAKLShjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHBjcmUyZ3JlcCAtLWNvbG9yPWFsd2F5cyAiXjAxfF4wMnxeMDMiIC4vdGVzdGRhdGEvZ3JlcGlucHV0KSA+PnRlc3R0cnlncmVwCisoY2QgJHNyY2RpcjsgJHZhbGdyaW5kICR2anMgJHBjcmUyZ3JlcCAtLWNvbG9yPWFsd2F5cyAiXjAxfF4wMnxeMDMiIC4vdGVzdGRhdGEvZ3JlcGlucHV0KSA+PnRlc3R0cnlncmVwCiBlY2hvICJSQz0kPyIgPj50ZXN0dHJ5Z3JlcAogCiBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgNzMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+dGVzdHRyeWdyZXAKLShjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHBjcmUyZ3JlcCAtbyAtLWNvbG91cj1hbHdheXMgIl4wMXxeMDJ8XjAzIiAuL3Rlc3RkYXRhL2dyZXBpbnB1dCkgPj50ZXN0dHJ5Z3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkdmpzICRwY3JlMmdyZXAgLW8gLS1jb2xvdXI9YWx3YXlzICJeMDF8XjAyfF4wMyIgLi90ZXN0ZGF0YS9ncmVwaW5wdXQpID4+dGVzdHRyeWdyZXAKIGVjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCiAKIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCA3NCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAotKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC1vICJeMDF8MDJ8XjAzIiAuL3Rlc3RkYXRhL2dyZXBpbnB1dCkgPj50ZXN0dHJ5Z3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkdmpzICRwY3JlMmdyZXAgLW8gIl4wMXwwMnxeMDMiIC4vdGVzdGRhdGEvZ3JlcGlucHV0KSA+PnRlc3R0cnlncmVwCiBlY2hvICJSQz0kPyIgPj50ZXN0dHJ5Z3JlcAogCiBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgNzUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+dGVzdHRyeWdyZXAKLShjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHBjcmUyZ3JlcCAtLWNvbG9yPWFsd2F5cyAiXjAxfDAyfF4wMyIgLi90ZXN0ZGF0YS9ncmVwaW5wdXQpID4+dGVzdHRyeWdyZXAKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHZqcyAkcGNyZTJncmVwIC0tY29sb3I9YWx3YXlzICJeMDF8MDJ8XjAzIiAuL3Rlc3RkYXRhL2dyZXBpbnB1dCkgPj50ZXN0dHJ5Z3JlcAogZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKIAogZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDc2IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PnRlc3R0cnlncmVwCi0oY2QgJHNyY2RpcjsgJHZhbGdyaW5kICRwY3JlMmdyZXAgLW8gLS1jb2xvdXI9YWx3YXlzICJeMDF8MDJ8XjAzIiAuL3Rlc3RkYXRhL2dyZXBpbnB1dCkgPj50ZXN0dHJ5Z3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkdmpzICRwY3JlMmdyZXAgLW8gLS1jb2xvdXI9YWx3YXlzICJeMDF8MDJ8XjAzIiAuL3Rlc3RkYXRhL2dyZXBpbnB1dCkgPj50ZXN0dHJ5Z3JlcAogZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKIAogZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDc3IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PnRlc3R0cnlncmVwCi0oY2QgJHNyY2RpcjsgJHZhbGdyaW5kICRwY3JlMmdyZXAgLW8gIl4wMXxeMDJ8MDMiIC4vdGVzdGRhdGEvZ3JlcGlucHV0KSA+PnRlc3R0cnlncmVwCisoY2QgJHNyY2RpcjsgJHZhbGdyaW5kICR2anMgJHBjcmUyZ3JlcCAtbyAiXjAxfF4wMnwwMyIgLi90ZXN0ZGF0YS9ncmVwaW5wdXQpID4+dGVzdHRyeWdyZXAKIGVjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCiAKIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCA3OCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAotKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC0tY29sb3I9YWx3YXlzICJeMDF8XjAyfDAzIiAuL3Rlc3RkYXRhL2dyZXBpbnB1dCkgPj50ZXN0dHJ5Z3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkdmpzICRwY3JlMmdyZXAgLS1jb2xvcj1hbHdheXMgIl4wMXxeMDJ8MDMiIC4vdGVzdGRhdGEvZ3JlcGlucHV0KSA+PnRlc3R0cnlncmVwCiBlY2hvICJSQz0kPyIgPj50ZXN0dHJ5Z3JlcAogCiBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgNzkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+dGVzdHRyeWdyZXAKLShjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHBjcmUyZ3JlcCAtbyAtLWNvbG91cj1hbHdheXMgIl4wMXxeMDJ8MDMiIC4vdGVzdGRhdGEvZ3JlcGlucHV0KSA+PnRlc3R0cnlncmVwCisoY2QgJHNyY2RpcjsgJHZhbGdyaW5kICR2anMgJHBjcmUyZ3JlcCAtbyAtLWNvbG91cj1hbHdheXMgIl4wMXxeMDJ8MDMiIC4vdGVzdGRhdGEvZ3JlcGlucHV0KSA+PnRlc3R0cnlncmVwCiBlY2hvICJSQz0kPyIgPj50ZXN0dHJ5Z3JlcAogCiBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgODAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+dGVzdHRyeWdyZXAKLShjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHBjcmUyZ3JlcCAtbyAiXGIwMXxcYjAyIiAuL3Rlc3RkYXRhL2dyZXBpbnB1dCkgPj50ZXN0dHJ5Z3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkdmpzICRwY3JlMmdyZXAgLW8gIlxiMDF8XGIwMiIgLi90ZXN0ZGF0YS9ncmVwaW5wdXQpID4+dGVzdHRyeWdyZXAKIGVjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCiAKIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCA4MSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAotKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC0tY29sb3I9YWx3YXlzICJcXGIwMXxcXGIwMiIgLi90ZXN0ZGF0YS9ncmVwaW5wdXQpID4+dGVzdHRyeWdyZXAKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHZqcyAkcGNyZTJncmVwIC0tY29sb3I9YWx3YXlzICJcXGIwMXxcXGIwMiIgLi90ZXN0ZGF0YS9ncmVwaW5wdXQpID4+dGVzdHRyeWdyZXAKIGVjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCiAKIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCA4MiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAotKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC1vIC0tY29sb3VyPWFsd2F5cyAiXFxiMDF8XFxiMDIiIC4vdGVzdGRhdGEvZ3JlcGlucHV0KSA+PnRlc3R0cnlncmVwCisoY2QgJHNyY2RpcjsgJHZhbGdyaW5kICR2anMgJHBjcmUyZ3JlcCAtbyAtLWNvbG91cj1hbHdheXMgIlxcYjAxfFxcYjAyIiAuL3Rlc3RkYXRhL2dyZXBpbnB1dCkgPj50ZXN0dHJ5Z3JlcAogZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKIAogZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDgzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PnRlc3R0cnlncmVwCi0oY2QgJHNyY2RpcjsgJHZhbGdyaW5kICRwY3JlMmdyZXAgLS1idWZmZXItc2l6ZT0xMDAgIl5hIiAuL3Rlc3RkYXRhL2dyZXBpbnB1dDMpID4+dGVzdHRyeWdyZXAgMj4mMQorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkdmpzICRwY3JlMmdyZXAgLS1idWZmZXItc2l6ZT0xMDAgIl5hIiAuL3Rlc3RkYXRhL2dyZXBpbnB1dDMpID4+dGVzdHRyeWdyZXAgMj4mMQogZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKIAogZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDg0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PnRlc3R0cnlncmVwCiBlY2hvIHRlc3RkYXRhL2dyZXBpbnB1dDMgPnRlc3R0ZW1wMWdyZXAKLShjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHBjcmUyZ3JlcCAtLWZpbGUtbGlzdCAuL3Rlc3RkYXRhL2dyZXBmaWxlbGlzdCAtLWZpbGUtbGlzdCAkYnVpbGRkaXIvdGVzdHRlbXAxZ3JlcCAiZm94fGNvbXBsZXRlfHQ3IikgPj50ZXN0dHJ5Z3JlcCAyPiYxCisoY2QgJHNyY2RpcjsgJHZhbGdyaW5kICR2anMgJHBjcmUyZ3JlcCAtLWZpbGUtbGlzdCAuL3Rlc3RkYXRhL2dyZXBmaWxlbGlzdCAtLWZpbGUtbGlzdCAkYnVpbGRkaXIvdGVzdHRlbXAxZ3JlcCAiZm94fGNvbXBsZXRlfHQ3IikgPj50ZXN0dHJ5Z3JlcCAyPiYxCiBlY2hvICJSQz0kPyIgPj50ZXN0dHJ5Z3JlcAogCiBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgODUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+dGVzdHRyeWdyZXAKLShjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHBjcmUyZ3JlcCAtLWZpbGUtbGlzdD0uL3Rlc3RkYXRhL2dyZXBmaWxlbGlzdCAiZG9sb3IiIC4vdGVzdGRhdGEvZ3JlcGlucHV0MykgPj50ZXN0dHJ5Z3JlcCAyPiYxCisoY2QgJHNyY2RpcjsgJHZhbGdyaW5kICR2anMgJHBjcmUyZ3JlcCAtLWZpbGUtbGlzdD0uL3Rlc3RkYXRhL2dyZXBmaWxlbGlzdCAiZG9sb3IiIC4vdGVzdGRhdGEvZ3JlcGlucHV0MykgPj50ZXN0dHJ5Z3JlcCAyPiYxCiBlY2hvICJSQz0kPyIgPj50ZXN0dHJ5Z3JlcAogCiBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgODYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+dGVzdHRyeWdyZXAKLShjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHBjcmUyZ3JlcCAiZG9nIiAuL3Rlc3RkYXRhL2dyZXBiaW5hcnkpID4+dGVzdHRyeWdyZXAgMj4mMQorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkdmpzICRwY3JlMmdyZXAgImRvZyIgLi90ZXN0ZGF0YS9ncmVwYmluYXJ5KSA+PnRlc3R0cnlncmVwIDI+JjEKIGVjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCiAKIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCA4NyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAotKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwICJjYXQiIC4vdGVzdGRhdGEvZ3JlcGJpbmFyeSkgPj50ZXN0dHJ5Z3JlcCAyPiYxCisoY2QgJHNyY2RpcjsgJHZhbGdyaW5kICR2anMgJHBjcmUyZ3JlcCAiY2F0IiAuL3Rlc3RkYXRhL2dyZXBiaW5hcnkpID4+dGVzdHRyeWdyZXAgMj4mMQogZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKIAogZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDg4IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PnRlc3R0cnlncmVwCi0oY2QgJHNyY2RpcjsgJHZhbGdyaW5kICRwY3JlMmdyZXAgLXYgImNhdCIgLi90ZXN0ZGF0YS9ncmVwYmluYXJ5KSA+PnRlc3R0cnlncmVwIDI+JjEKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHZqcyAkcGNyZTJncmVwIC12ICJjYXQiIC4vdGVzdGRhdGEvZ3JlcGJpbmFyeSkgPj50ZXN0dHJ5Z3JlcCAyPiYxCiBlY2hvICJSQz0kPyIgPj50ZXN0dHJ5Z3JlcAogCiBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgODkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+dGVzdHRyeWdyZXAKLShjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHBjcmUyZ3JlcCAtSSAiZG9nIiAuL3Rlc3RkYXRhL2dyZXBiaW5hcnkpID4+dGVzdHRyeWdyZXAgMj4mMQorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkdmpzICRwY3JlMmdyZXAgLUkgImRvZyIgLi90ZXN0ZGF0YS9ncmVwYmluYXJ5KSA+PnRlc3R0cnlncmVwIDI+JjEKIGVjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCiAKIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCA5MCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAotKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC0tYmluYXJ5LWZpbGVzPXdpdGhvdXQtbWF0Y2ggImRvZyIgLi90ZXN0ZGF0YS9ncmVwYmluYXJ5KSA+PnRlc3R0cnlncmVwIDI+JjEKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHZqcyAkcGNyZTJncmVwIC0tYmluYXJ5LWZpbGVzPXdpdGhvdXQtbWF0Y2ggImRvZyIgLi90ZXN0ZGF0YS9ncmVwYmluYXJ5KSA+PnRlc3R0cnlncmVwIDI+JjEKIGVjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCiAKIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCA5MSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAotKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC1hICJkb2ciIC4vdGVzdGRhdGEvZ3JlcGJpbmFyeSkgPj50ZXN0dHJ5Z3JlcCAyPiYxCisoY2QgJHNyY2RpcjsgJHZhbGdyaW5kICR2anMgJHBjcmUyZ3JlcCAtYSAiZG9nIiAuL3Rlc3RkYXRhL2dyZXBiaW5hcnkpID4+dGVzdHRyeWdyZXAgMj4mMQogZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKIAogZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDkyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PnRlc3R0cnlncmVwCi0oY2QgJHNyY2RpcjsgJHZhbGdyaW5kICRwY3JlMmdyZXAgLS1iaW5hcnktZmlsZXM9dGV4dCAiZG9nIiAuL3Rlc3RkYXRhL2dyZXBiaW5hcnkpID4+dGVzdHRyeWdyZXAgMj4mMQorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkdmpzICRwY3JlMmdyZXAgLS1iaW5hcnktZmlsZXM9dGV4dCAiZG9nIiAuL3Rlc3RkYXRhL2dyZXBiaW5hcnkpID4+dGVzdHRyeWdyZXAgMj4mMQogZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKIAogZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDkzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PnRlc3R0cnlncmVwCi0oY2QgJHNyY2RpcjsgJHZhbGdyaW5kICRwY3JlMmdyZXAgLS10ZXh0ICJkb2ciIC4vdGVzdGRhdGEvZ3JlcGJpbmFyeSkgPj50ZXN0dHJ5Z3JlcCAyPiYxCisoY2QgJHNyY2RpcjsgJHZhbGdyaW5kICR2anMgJHBjcmUyZ3JlcCAtLXRleHQgImRvZyIgLi90ZXN0ZGF0YS9ncmVwYmluYXJ5KSA+PnRlc3R0cnlncmVwIDI+JjEKIGVjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCiAKIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCA5NCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAotKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC1MIC1yIC0taW5jbHVkZT1ncmVwaW5wdXR4IC0taW5jbHVkZSBncmVwaW5wdXQ4ICdmb3gnIC4vdGVzdGRhdGEvZ3JlcGlucHV0KiB8IHNvcnQpID4+dGVzdHRyeWdyZXAKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHZqcyAkcGNyZTJncmVwIC1MIC1yIC0taW5jbHVkZT1ncmVwaW5wdXR4IC0taW5jbHVkZSBncmVwaW5wdXQ4ICdmb3gnIC4vdGVzdGRhdGEvZ3JlcGlucHV0KiB8IHNvcnQpID4+dGVzdHRyeWdyZXAKIGVjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCiAKIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCA5NSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAotKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC0tZmlsZS1saXN0IC4vdGVzdGRhdGEvZ3JlcGZpbGVsaXN0IC0tZXhjbHVkZSBncmVwaW5wdXR2ICJmb3h8Y29tcGxldGUiKSA+PnRlc3R0cnlncmVwIDI+JjEKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHZqcyAkcGNyZTJncmVwIC0tZmlsZS1saXN0IC4vdGVzdGRhdGEvZ3JlcGZpbGVsaXN0IC0tZXhjbHVkZSBncmVwaW5wdXR2ICJmb3h8Y29tcGxldGUiKSA+PnRlc3R0cnlncmVwIDI+JjEKIGVjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCiAKIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCA5NiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAotKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC1MIC1yIC0taW5jbHVkZS1kaXI9dGVzdGRhdGEgLS1leGNsdWRlICdeKD8hZ3JlcGlucHV0KScgJ2ZveCcgLi90ZXN0KiB8IHNvcnQpID4+dGVzdHRyeWdyZXAKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHZqcyAkcGNyZTJncmVwIC1MIC1yIC0taW5jbHVkZS1kaXI9dGVzdGRhdGEgLS1leGNsdWRlICdeKD8hZ3JlcGlucHV0KScgJ2ZveCcgLi90ZXN0KiB8IHNvcnQpID4+dGVzdHRyeWdyZXAKIGVjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCiAKIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCA5NyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAogZWNobyAiZ3JlcGlucHV0JCIgPnRlc3R0ZW1wMWdyZXAKIGVjaG8gImdyZXBpbnB1dDgiID4+dGVzdHRlbXAxZ3JlcAotKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC1MIC1yIC0taW5jbHVkZT1ncmVwaW5wdXQgLS1leGNsdWRlLWZyb20gJGJ1aWxkZGlyL3Rlc3R0ZW1wMWdyZXAgLS1leGNsdWRlLWRpcj0nXlwuJyAnZm94JyAuL3Rlc3RkYXRhIHwgc29ydCkgPj50ZXN0dHJ5Z3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkdmpzICRwY3JlMmdyZXAgLUwgLXIgLS1pbmNsdWRlPWdyZXBpbnB1dCAtLWV4Y2x1ZGUtZnJvbSAkYnVpbGRkaXIvdGVzdHRlbXAxZ3JlcCAtLWV4Y2x1ZGUtZGlyPSdeXC4nICdmb3gnIC4vdGVzdGRhdGEgfCBzb3J0KSA+PnRlc3R0cnlncmVwCiBlY2hvICJSQz0kPyIgPj50ZXN0dHJ5Z3JlcAogCiBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgOTggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+dGVzdHRyeWdyZXAKIGVjaG8gImdyZXBpbnB1dCQiID50ZXN0dGVtcDFncmVwCiBlY2hvICJncmVwaW5wdXQ4IiA+PnRlc3R0ZW1wMWdyZXAKLShjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHBjcmUyZ3JlcCAtTCAtciAtLWV4Y2x1ZGU9Z3JlcGlucHV0MyAtLWluY2x1ZGU9Z3JlcGlucHV0IC0tZXhjbHVkZS1mcm9tICRidWlsZGRpci90ZXN0dGVtcDFncmVwIC0tZXhjbHVkZS1kaXI9J15cLicgJ2ZveCcgLi90ZXN0ZGF0YSB8IHNvcnQpID4+dGVzdHRyeWdyZXAKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHZqcyAkcGNyZTJncmVwIC1MIC1yIC0tZXhjbHVkZT1ncmVwaW5wdXQzIC0taW5jbHVkZT1ncmVwaW5wdXQgLS1leGNsdWRlLWZyb20gJGJ1aWxkZGlyL3Rlc3R0ZW1wMWdyZXAgLS1leGNsdWRlLWRpcj0nXlwuJyAnZm94JyAuL3Rlc3RkYXRhIHwgc29ydCkgPj50ZXN0dHJ5Z3JlcAogZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKIAogZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDk5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PnRlc3R0cnlncmVwCiBlY2hvICJncmVwaW5wdXQkIiA+dGVzdHRlbXAxZ3JlcAogZWNobyAiZ3JlcGlucHV0OCIgPnRlc3R0ZW1wMmdyZXAKLShjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHBjcmUyZ3JlcCAtTCAtciAtLWluY2x1ZGUgZ3JlcGlucHV0IC0tZXhjbHVkZS1mcm9tICRidWlsZGRpci90ZXN0dGVtcDFncmVwIC0tZXhjbHVkZS1mcm9tPSRidWlsZGRpci90ZXN0dGVtcDJncmVwIC0tZXhjbHVkZS1kaXI9J15cLicgJ2ZveCcgLi90ZXN0ZGF0YSB8IHNvcnQpID4+dGVzdHRyeWdyZXAKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHZqcyAkcGNyZTJncmVwIC1MIC1yIC0taW5jbHVkZSBncmVwaW5wdXQgLS1leGNsdWRlLWZyb20gJGJ1aWxkZGlyL3Rlc3R0ZW1wMWdyZXAgLS1leGNsdWRlLWZyb209JGJ1aWxkZGlyL3Rlc3R0ZW1wMmdyZXAgLS1leGNsdWRlLWRpcj0nXlwuJyAnZm94JyAuL3Rlc3RkYXRhIHwgc29ydCkgPj50ZXN0dHJ5Z3JlcAogZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKIAogZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDEwMCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+dGVzdHRyeWdyZXAKLShjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHBjcmUyZ3JlcCAtSG8yIC0tb25seS1tYXRjaGluZz0xIC1vMyAnKFx3KykgYmluYXJ5IChcdyspKFwuKT8nIC4vdGVzdGRhdGEvZ3JlcGlucHV0KSA+PnRlc3R0cnlncmVwCisoY2QgJHNyY2RpcjsgJHZhbGdyaW5kICR2anMgJHBjcmUyZ3JlcCAtSG8yIC0tb25seS1tYXRjaGluZz0xIC1vMyAnKFx3KykgYmluYXJ5IChcdyspKFwuKT8nIC4vdGVzdGRhdGEvZ3JlcGlucHV0KSA+PnRlc3R0cnlncmVwCiBlY2hvICJSQz0kPyIgPj50ZXN0dHJ5Z3JlcAogCiBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgMTAxIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAotKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC1vMyAtSG8yIC1vMTIgLS1vbmx5LW1hdGNoaW5nPTEgLW8zIC0tY29sb3VyPWFsd2F5cyAtLW9tLXNlcGFyYXRvcj0nfCcgJyhcdyspIGJpbmFyeSAoXHcrKShcLik/JyAuL3Rlc3RkYXRhL2dyZXBpbnB1dCkgPj50ZXN0dHJ5Z3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkdmpzICRwY3JlMmdyZXAgLW8zIC1IbzIgLW8xMiAtLW9ubHktbWF0Y2hpbmc9MSAtbzMgLS1jb2xvdXI9YWx3YXlzIC0tb20tc2VwYXJhdG9yPSd8JyAnKFx3KykgYmluYXJ5IChcdyspKFwuKT8nIC4vdGVzdGRhdGEvZ3JlcGlucHV0KSA+PnRlc3R0cnlncmVwCiBlY2hvICJSQz0kPyIgPj50ZXN0dHJ5Z3JlcAogCiBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgMTAyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PnRlc3R0cnlncmVwCi0oY2QgJHNyY2RpcjsgJHZhbGdyaW5kICRwY3JlMmdyZXAgLW4gIl4kIiAuL3Rlc3RkYXRhL2dyZXBpbnB1dDMpID4+dGVzdHRyeWdyZXAgMj4mMQorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkdmpzICRwY3JlMmdyZXAgLW4gIl4kIiAuL3Rlc3RkYXRhL2dyZXBpbnB1dDMpID4+dGVzdHRyeWdyZXAgMj4mMQogZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKIAogZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDEwMyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAotKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC0tb25seS1tYXRjaGluZyAiXiQiIC4vdGVzdGRhdGEvZ3JlcGlucHV0MykgPj50ZXN0dHJ5Z3JlcCAyPiYxCisoY2QgJHNyY2RpcjsgJHZhbGdyaW5kICR2anMgJHBjcmUyZ3JlcCAtLW9ubHktbWF0Y2hpbmcgIl4kIiAuL3Rlc3RkYXRhL2dyZXBpbnB1dDMpID4+dGVzdHRyeWdyZXAgMj4mMQogZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKIAogZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDEwNCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAotKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC1uIC0tb25seS1tYXRjaGluZyAiXiQiIC4vdGVzdGRhdGEvZ3JlcGlucHV0MykgPj50ZXN0dHJ5Z3JlcCAyPiYxCisoY2QgJHNyY2RpcjsgJHZhbGdyaW5kICR2anMgJHBjcmUyZ3JlcCAtbiAtLW9ubHktbWF0Y2hpbmcgIl4kIiAuL3Rlc3RkYXRhL2dyZXBpbnB1dDMpID4+dGVzdHRyeWdyZXAgMj4mMQogZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKIAogZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDEwNSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAotKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC0tY29sb3VyPWFsd2F5cyAiaXBzdW18IiAuL3Rlc3RkYXRhL2dyZXBpbnB1dDMpID4+dGVzdHRyeWdyZXAgMj4mMQorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkdmpzICRwY3JlMmdyZXAgLS1jb2xvdXI9YWx3YXlzICJpcHN1bXwiIC4vdGVzdGRhdGEvZ3JlcGlucHV0MykgPj50ZXN0dHJ5Z3JlcCAyPiYxCiBlY2hvICJSQz0kPyIgPj50ZXN0dHJ5Z3JlcAogCiBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgMTA2IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PnRlc3R0cnlncmVwCi0oY2QgJHNyY2RpcjsgZWNobyAiYSIgfCAkdmFsZ3JpbmQgJHBjcmUyZ3JlcCAtTSAifGEiICkgPj50ZXN0dHJ5Z3JlcCAyPiYxCisoY2QgJHNyY2RpcjsgZWNobyAiYSIgfCAkdmFsZ3JpbmQgJHZqcyAkcGNyZTJncmVwIC1NICJ8YSIgKSA+PnRlc3R0cnlncmVwIDI+JjEKIGVjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCiAKIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCAxMDcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+dGVzdHRyeWdyZXAKIGVjaG8gImEiID50ZXN0dGVtcDFncmVwCiBlY2hvICJhYWFhYSIgPj50ZXN0dGVtcDFncmVwCi0oY2QgJHNyY2RpcjsgJHZhbGdyaW5kICRwY3JlMmdyZXAgIC0tbGluZS1vZmZzZXRzICcoPzw9XEthKScgJGJ1aWxkZGlyL3Rlc3R0ZW1wMWdyZXApID4+dGVzdHRyeWdyZXAgMj4mMQorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkdmpzICRwY3JlMmdyZXAgIC0tbGluZS1vZmZzZXRzICcoPzw9XEthKScgJGJ1aWxkZGlyL3Rlc3R0ZW1wMWdyZXApID4+dGVzdHRyeWdyZXAgMj4mMQogZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKIAogZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDEwOCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+dGVzdHRyeWdyZXAKLShjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHBjcmUyZ3JlcCAtbHEgUEFUVEVSTiAuL3Rlc3RkYXRhL2dyZXBpbnB1dCAuL3Rlc3RkYXRhL2dyZXBpbnB1dHgpID4+dGVzdHRyeWdyZXAKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHZqcyAkcGNyZTJncmVwIC1scSBQQVRURVJOIC4vdGVzdGRhdGEvZ3JlcGlucHV0IC4vdGVzdGRhdGEvZ3JlcGlucHV0eCkgPj50ZXN0dHJ5Z3JlcAogZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKIAogZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDEwOSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAotKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC1jcSBsYXp5IC4vdGVzdGRhdGEvZ3JlcGlucHV0KikgPj50ZXN0dHJ5Z3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkdmpzICRwY3JlMmdyZXAgLWNxIGxhenkgLi90ZXN0ZGF0YS9ncmVwaW5wdXQqKSA+PnRlc3R0cnlncmVwCitlY2hvICJSQz0kPyIgPj50ZXN0dHJ5Z3JlcAorCitlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgMTEwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PnRlc3R0cnlncmVwCisoY2QgJHNyY2RpcjsgJHZhbGdyaW5kICR2anMgJHBjcmUyZ3JlcCAtLW9tLXNlcGFyYXRvciAvIC1NbzAgLW8xIC1vMiAnbWF0Y2ggKFxkKyk6XG4gKC4pXG4nIHRlc3RkYXRhL2dyZXBpbnB1dCkgPj50ZXN0dHJ5Z3JlcAorZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKKworZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDExMSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkdmpzICRwY3JlMmdyZXAgLS1saW5lLW9mZnNldHMgLU0gJ21hdGNoIChcZCspOlxuICguKVxuJyB0ZXN0ZGF0YS9ncmVwaW5wdXQpID4+dGVzdHRyeWdyZXAKK2VjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCisKK2VjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCAxMTIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+dGVzdHRyeWdyZXAKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHZqcyAkcGNyZTJncmVwIC0tZmlsZS1vZmZzZXRzIC1NICdtYXRjaCAoXGQrKTpcbiAoLilcbicgdGVzdGRhdGEvZ3JlcGlucHV0KSA+PnRlc3R0cnlncmVwCiBlY2hvICJSQz0kPyIgPj50ZXN0dHJ5Z3JlcAogCiAjIE5vdyBjb21wYXJlIHRoZSByZXN1bHRzLgpAQCAtNTYzLDE1ICs1ODAsMTUgQEAKICAgZWNobyAiVGVzdGluZyBwY3JlMmdyZXAgVVRGLTggZmVhdHVyZXMiCiAKICAgZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IFUxIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPnRlc3R0cnlncmVwCi0gIChjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHBjcmUyZ3JlcCAtbiAtdSAtLW5ld2xpbmU9YW55ICJeWCIgLi90ZXN0ZGF0YS9ncmVwaW5wdXQ4KSA+PnRlc3R0cnlncmVwCisgIChjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHZqcyAkcGNyZTJncmVwIC1uIC11IC0tbmV3bGluZT1hbnkgIl5YIiAuL3Rlc3RkYXRhL2dyZXBpbnB1dDgpID4+dGVzdHRyeWdyZXAKICAgZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKIAogICBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgVTIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PnRlc3R0cnlncmVwCi0gIChjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHBjcmUyZ3JlcCAtbiAtdSAtQyAzIC0tbmV3bGluZT1hbnkgIk1hdGNoIiAuL3Rlc3RkYXRhL2dyZXBpbnB1dDgpID4+dGVzdHRyeWdyZXAKKyAgKGNkICRzcmNkaXI7ICR2YWxncmluZCAkdmpzICRwY3JlMmdyZXAgLW4gLXUgLUMgMyAtLW5ld2xpbmU9YW55ICJNYXRjaCIgLi90ZXN0ZGF0YS9ncmVwaW5wdXQ4KSA+PnRlc3R0cnlncmVwCiAgIGVjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCiAKICAgZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IFUzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAotICAoY2QgJHNyY2RpcjsgJHZhbGdyaW5kICRwY3JlMmdyZXAgLS1saW5lLW9mZnNldHMgLXUgLS1uZXdsaW5lPWFueSAnKD88PVxLXHh7MTdmfSknIC4vdGVzdGRhdGEvZ3JlcGlucHV0OCkgPj50ZXN0dHJ5Z3JlcAorICAoY2QgJHNyY2RpcjsgJHZhbGdyaW5kICR2anMgJHBjcmUyZ3JlcCAtLWxpbmUtb2Zmc2V0cyAtdSAtLW5ld2xpbmU9YW55ICcoPzw9XEtceHsxN2Z9KScgLi90ZXN0ZGF0YS9ncmVwaW5wdXQ4KSA+PnRlc3R0cnlncmVwCiAgIGVjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCiAKICAgJGNmICRzcmNkaXIvdGVzdGRhdGEvZ3JlcG91dHB1dDggdGVzdHRyeWdyZXAKQEAgLTU5MywyNyArNjEwLDM4IEBACiBwcmludGYgImFiY1xyZGVmXHJcbmdoaVxuamtsIiA+dGVzdE5pbnB1dGdyZXAKIAogcHJpbnRmICIlYy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IE4xIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4iIC0gPnRlc3R0cnlncmVwCi0kdmFsZ3JpbmQgJHBjcmUyZ3JlcCAtbiAtTiBDUiAiXihhYmN8ZGVmfGdoaXxqa2wpIiB0ZXN0TmlucHV0Z3JlcCA+PnRlc3R0cnlncmVwCiskdmFsZ3JpbmQgJHZqcyAkcGNyZTJncmVwIC1uIC1OIENSICJeKGFiY3xkZWZ8Z2hpfGprbCkiIHRlc3ROaW5wdXRncmVwID4+dGVzdHRyeWdyZXAKIAogcHJpbnRmICIlYy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IE4yIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4iIC0gPj50ZXN0dHJ5Z3JlcAotJHZhbGdyaW5kICRwY3JlMmdyZXAgLW4gLS1uZXdsaW5lPWNybGYgIl4oYWJjfGRlZnxnaGl8amtsKSIgdGVzdE5pbnB1dGdyZXAgPj50ZXN0dHJ5Z3JlcAorJHZhbGdyaW5kICR2anMgJHBjcmUyZ3JlcCAtbiAtLW5ld2xpbmU9Y3JsZiAiXihhYmN8ZGVmfGdoaXxqa2wpIiB0ZXN0TmlucHV0Z3JlcCA+PnRlc3R0cnlncmVwCiAKIHByaW50ZiAiJWMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCBOMyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuIiAtID4+dGVzdHRyeWdyZXAKIHBhdHRlcm49YHByaW50ZiAnZGVmXHJqa2wnYAotJHZhbGdyaW5kICRwY3JlMmdyZXAgLW4gLS1uZXdsaW5lPWNyIC1GICIkcGF0dGVybiIgdGVzdE5pbnB1dGdyZXAgPj50ZXN0dHJ5Z3JlcAorJHZhbGdyaW5kICR2anMgJHBjcmUyZ3JlcCAtbiAtLW5ld2xpbmU9Y3IgLUYgIiRwYXR0ZXJuIiB0ZXN0TmlucHV0Z3JlcCA+PnRlc3R0cnlncmVwCiAKIHByaW50ZiAiJWMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCBONCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuIiAtID4+dGVzdHRyeWdyZXAKLSR2YWxncmluZCAkcGNyZTJncmVwIC1uIC0tbmV3bGluZT1jcmxmIC1GIC1mICRzcmNkaXIvdGVzdGRhdGEvZ3JlcHBhdE40IHRlc3ROaW5wdXRncmVwID4+dGVzdHRyeWdyZXAKKyR2YWxncmluZCAkdmpzICRwY3JlMmdyZXAgLW4gLS1uZXdsaW5lPWNybGYgLUYgLWYgJHNyY2Rpci90ZXN0ZGF0YS9ncmVwcGF0TjQgdGVzdE5pbnB1dGdyZXAgPj50ZXN0dHJ5Z3JlcAogCiBwcmludGYgIiVjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgTjUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiIgLSA+PnRlc3R0cnlncmVwCi0kdmFsZ3JpbmQgJHBjcmUyZ3JlcCAtbiAtLW5ld2xpbmU9YW55ICJeKGFiY3xkZWZ8Z2hpfGprbCkiIHRlc3ROaW5wdXRncmVwID4+dGVzdHRyeWdyZXAKKyR2YWxncmluZCAkdmpzICRwY3JlMmdyZXAgLW4gLS1uZXdsaW5lPWFueSAiXihhYmN8ZGVmfGdoaXxqa2wpIiB0ZXN0TmlucHV0Z3JlcCA+PnRlc3R0cnlncmVwCiAKIHByaW50ZiAiJWMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCBONiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuIiAtID4+dGVzdHRyeWdyZXAKLSR2YWxncmluZCAkcGNyZTJncmVwIC1uIC0tbmV3bGluZT1hbnljcmxmICJeKGFiY3xkZWZ8Z2hpfGprbCkiIHRlc3ROaW5wdXRncmVwID4+dGVzdHRyeWdyZXAKKyR2YWxncmluZCAkdmpzICRwY3JlMmdyZXAgLW4gLS1uZXdsaW5lPWFueWNybGYgIl4oYWJjfGRlZnxnaGl8amtsKSIgdGVzdE5pbnB1dGdyZXAgPj50ZXN0dHJ5Z3JlcAogCiAkY2YgJHNyY2Rpci90ZXN0ZGF0YS9ncmVwb3V0cHV0TiB0ZXN0dHJ5Z3JlcAogaWYgWyAkPyAhPSAwIF0gOyB0aGVuIGV4aXQgMTsgZmkKIAorIyBJZiBwY3JlMmdyZXAgc3VwcG9ydHMgc2NyaXB0IGNhbGxvdXRzLCBydW4gc29tZSB0ZXN0cyBvbiB0aGVtLgorCitpZiAkdmFsZ3JpbmQgJHZqcyAkcGNyZTJncmVwIC0taGVscCB8ICR2YWxncmluZCAkdmpzICRwY3JlMmdyZXAgLXEgJ0NhbGxvdXQgc2NyaXB0cyBpbiBwYXR0ZXJucyBhcmUgc3VwcG9ydGVkJzsgdGhlbgorICBlY2hvICJUZXN0aW5nIHBjcmUyZ3JlcCBzY3JpcHQgY2FsbG91dHMiCisgICR2YWxncmluZCAkdmpzICRwY3JlMmdyZXAgJyhUKSguLiguKSkoP0MiL2Jpbi9lY2hvfEFyZzE6IFskMV0gWyQyXSBbJDNdfEFyZzI6ICR8JHsxfSR8ICgkNCkgKCQxNCkgKCQwKSIpKCknICRzcmNkaXIvdGVzdGRhdGEvZ3JlcGlucHV0diA+dGVzdHRyeWdyZXAKKyAgJHZhbGdyaW5kICR2anMgJHBjcmUyZ3JlcCAnKFQpKC4uKC4pKSgpKCkoKSgpKCkoKSgpKC4uKSg/QyIvYmluL2VjaG98QXJnMTogWyQxMV0gWyR7MTF9XSIpJyAkc3JjZGlyL3Rlc3RkYXRhL2dyZXBpbnB1dHYgPj50ZXN0dHJ5Z3JlcAorICAkY2YgJHNyY2Rpci90ZXN0ZGF0YS9ncmVwb3V0cHV0QyB0ZXN0dHJ5Z3JlcAorICBpZiBbICQ/ICE9IDAgXSA7IHRoZW4gZXhpdCAxOyBmaQorZWxzZQorICBlY2hvICJTY3JpcHQgY2FsbG91dHMgYXJlIG5vdCBzdXBwb3J0ZWQiCitmaQogCiAjIEZpbmFsbHksIHNvbWUgdGVzdHMgdG8gZXhlcmNpc2UgY29kZSB0aGF0IGlzIG5vdCB0ZXN0ZWQgYWJvdmUsIGp1c3QgdG8gYmUKICMgc3VyZSB0aGF0IGl0IHJ1bnMgT0suIERvaW5nIHRoaXMgaW1wcm92ZXMgdGhlIGNvdmVyYWdlIHN0YXRpc3RpY3MuIFRoZSBvdXRwdXQKZGlmZiAtLWdpdCBhL2Rpc3QyL1J1blRlc3QgYi9kaXN0Mi9SdW5UZXN0CmluZGV4IDM2ZGM2MzguLmQwZWVjNzcgMTAwNzU1Ci0tLSBhL2Rpc3QyL1J1blRlc3QKKysrIGIvZGlzdDIvUnVuVGVzdApAQCAtNTMsNyArNTMsNyBAQAogCiB0aXRsZTA9IlRlc3QgMDogVW5jaGVja2VkIHBjcmUydGVzdCBhcmd1bWVudCB0ZXN0cyAodG8gaW1wcm92ZSBjb3ZlcmFnZSkiCiB0aXRsZTE9IlRlc3QgMTogTWFpbiBub24tVVRGLCBub24tVUNQIGZ1bmN0aW9uYWxpdHkgKGNvbXBhdGlibGUgd2l0aCBQZXJsID49IDUuMTApIgotdGl0bGUyPSJUZXN0IDI6IEFQSSwgZXJyb3JzLCBpbnRlcm5hbHMsIGFuZCBub24tUGVybCBzdHVmZiIKK3RpdGxlMj0iVGVzdCAyOiBBUEksIGVycm9ycywgaW50ZXJuYWxzIGFuZCBub24tUGVybCBzdHVmZiIKIHRpdGxlMz0iVGVzdCAzOiBMb2NhbGUtc3BlY2lmaWMgZmVhdHVyZXMiCiB0aXRsZTRBPSJUZXN0IDQ6IFVURiIKIHRpdGxlNEI9IiBhbmQgVW5pY29kZSBwcm9wZXJ0eSBzdXBwb3J0IChjb21wYXRpYmxlIHdpdGggUGVybCA+PSA1LjEwKSIKQEAgLTc0LDcgKzc0LDcgQEAKIHRpdGxlMTc9IlRlc3QgMTc6IEpJVC1zcGVjaWZpYyBmZWF0dXJlcyB3aGVuIEpJVCBpcyBhdmFpbGFibGUiCiB0aXRsZTE4PSJUZXN0IDE4OiBUZXN0cyBvZiB0aGUgUE9TSVggaW50ZXJmYWNlLCBleGNsdWRpbmcgVVRGL1VDUCIKIHRpdGxlMTk9IlRlc3QgMTk6IFRlc3RzIG9mIHRoZSBQT1NJWCBpbnRlcmZhY2Ugd2l0aCBVVEYvVUNQIgotdGl0bGUyMD0iVGVzdCAyMDogU2VyaWFsaXphdGlvbiB0ZXN0cyIKK3RpdGxlMjA9IlRlc3QgMjA6IFNlcmlhbGl6YXRpb24gYW5kIGNvZGUgY29weSB0ZXN0cyIKIHRpdGxlMjE9IlRlc3QgMjE6IFxDIHRlc3RzIHdpdGhvdXQgVVRGIChzdXBwb3J0ZWQgZm9yIERGQSBtYXRjaGluZykiCiB0aXRsZTIyPSJUZXN0IDIyOiBcQyB0ZXN0cyB3aXRoIFVURiAobm90IHN1cHBvcnRlZCBmb3IgREZBIG1hdGNoaW5nKSIKIHRpdGxlMjM9IlRlc3QgMjM6IFxDIGRpc2FibGVkIHRlc3QiCkBAIC0yNjUsOCArMjY1LDggQEAKICAgIGJpZ3N0YWNrfC1iaWdzdGFjaykgYmlnc3RhY2s9eWVzOzsKICAgIG5vaml0fC1ub2ppdCkgbm9qaXQ9eWVzOzsKICAgIHNpbXwtc2ltKSBzaGlmdDsgc2ltPSQxOzsKLSAgIHZhbGdyaW5kfC12YWxncmluZCkgdmFsZ3JpbmQ9InZhbGdyaW5kIC0tdG9vbD1tZW1jaGVjayAtcSAtLXNtYy1jaGVjaz1hbGwiOzsKLSAgIHZhbGdyaW5kLWxvZ3wtdmFsZ3JpbmQtbG9nKSB2YWxncmluZD0idmFsZ3JpbmQgLS10b29sPW1lbWNoZWNrIC0tbnVtLWNhbGxlcnM9MzAgLS1sZWFrLWNoZWNrPW5vIC0tZXJyb3ItbGltaXQ9bm8gLS1zbWMtY2hlY2s9YWxsIC0tbG9nLWZpbGU9cmVwb3J0LiVwICI7OworICAgdmFsZ3JpbmR8LXZhbGdyaW5kKSB2YWxncmluZD0idmFsZ3JpbmQgLS10b29sPW1lbWNoZWNrIC1xIC0tc21jLWNoZWNrPWFsbC1ub24tZmlsZSI7OworICAgdmFsZ3JpbmQtbG9nfC12YWxncmluZC1sb2cpIHZhbGdyaW5kPSJ2YWxncmluZCAtLXRvb2w9bWVtY2hlY2sgLS1udW0tY2FsbGVycz0zMCAtLWxlYWstY2hlY2s9bm8gLS1lcnJvci1saW1pdD1ubyAtLXNtYy1jaGVjaz1hbGwtbm9uLWZpbGUgLS1sb2ctZmlsZT1yZXBvcnQuJXAgIjs7CiAgICB+KikKICAgICAgaWYgZXhwciAiJDEiIDogJ35bMC05XVswLTldKiQnID4vZGV2L251bGw7IHRoZW4KICAgICAgICBza2lwPSIkc2tpcCBgZXhwciAiJDEiIDogJ35cKFswLTldKlwpKiQnYCIKQEAgLTMxMCw5ICszMTAsMTIgQEAKIAogIyBJZiBpdCBpcyBwb3NzaWJsZSB0byBzZXQgdGhlIHN5c3RlbSBzdGFjayBzaXplLCBhcnJhbmdlIHRvIHNldCBhIHZhbHVlIGZvcgogIyB0ZXN0IDIsIHdoaWNoIG5lZWRzIG1vcmUgdGhhbiB0aGUgZXZlbiB0aGUgTGludXggZGVmYXVsdCB3aGVuIFBDUkUyIGhhcyBiZWVuCi0jIGNvbXBpbGVkIGJ5IGdjYyB3aXRoIC1mc2FuaXRpemU9YWRkcmVzcy4gV2hlbiB0aGUgY29tcGlsZXIgaXMgY2xhbmcsIHNhbml0aXplCi0jIG9wdGlvbnMgcmVxdWlyZSBhbiBldmVuIGJpZ2dlciBzdGFjayBmb3IgdGVzdCAyLCBhbmQgYW4gaW5jcmVhc2VkIHN0YWNrIGZvcgotIyBzb21lIG9mIHRoZSBvdGhlciB0ZXN0cy4KKyMgY29tcGlsZWQgYnkgZ2NjIHdpdGggLWZzYW5pdGl6ZT1hZGRyZXNzLiBJZiAiYmlnc3RhY2siIGlzIG9uIHRoZSBjb21tYW5kCisjIGxpbmUsIHNldCBldmVuIGJpZ2dlciBudW1iZXJzLiBXaGVuIHRoZSBjb21waWxlciBpcyBjbGFuZywgc2FuaXRpemUgb3B0aW9ucworIyByZXF1aXJlIGFuIGV2ZW4gYmlnZ2VyIHN0YWNrIGZvciB0ZXN0IDIsIGFuZCBhbiBpbmNyZWFzZWQgc3RhY2sgZm9yIHNvbWUgb2YKKyMgdGhlIG90aGVyIHRlc3RzLiBUZXN0IDIgbm93IGhhcyBjb2RlIHRvIGF1dG9tYXRpY2FsbHkgdHJ5IGFnYWluIHdpdGggYSA2NE0KKyMgc3RhY2sgaWYgaXQgY3Jhc2hlcyB3aGVuIHRlc3Qyc3RhY2sgaXMgIi1TIDE2IiB3aGVuIG1hdGNoaW5nIHdpdGggdGhlCisjIGludGVycHJldGVyLgogCiAkc2ltIC4vcGNyZTJ0ZXN0IC1TIDEgL2Rldi9udWxsIC9kZXYvbnVsbAogaWYgWyAkPyAtZXEgMCBdIDsgdGhlbgpAQCAtNDk5LDE1ICs1MDIsMzIgQEAKICAgICBmb3Igb3B0IGluICIiICRqaXRvcHQ7IGRvCiAgICAgICAkc2ltICR2YWxncmluZCAke29wdDorJHZqc30gLi9wY3JlMnRlc3QgLXEgJHRlc3Qyc3RhY2sgJGJtb2RlICRvcHQgJHRlc3RkYXRhL3Rlc3RpbnB1dDIgdGVzdHRyeQogICAgICAgaWYgWyAkPyA9IDAgXSA7IHRoZW4KKyAgICAgICAgJHNpbSAkdmFsZ3JpbmQgJHtvcHQ6KyR2anN9IC4vcGNyZTJ0ZXN0IC1xICRibW9kZSAkb3B0IC1lcnJvciAtNjMsLTYyLC0yLC0xLDAsMTAwLDE4OCwxODkgPj50ZXN0dHJ5CiAgICAgICAgIGNoZWNrcmVzdWx0ICQ/IDIgIiRvcHQiCiAgICAgICBlbHNlCiAgICAgICAgIGVjaG8gIiAiCi0gICAgICAgIGVjaG8gIioqIFRlc3QgMiByZXF1aXJlcyBhIGxvdCBvZiBzdGFjay4gSWYgaXQgaGFzIGNyYXNoZWQgd2l0aCBhIgotICAgICAgICBlY2hvICIqKiBzZWdtZW50YXRpb24gZmF1bHQsIGl0IG1heSBiZSB0aGF0IHlvdSBkbyBub3QgaGF2ZSBlbm91Z2giCi0gICAgICAgIGVjaG8gIioqIHN0YWNrIGF2YWlsYWJsZSBieSBkZWZhdWx0LiBQbGVhc2Ugc2VlIHRoZSAncGNyZTJzdGFjaycgbWFuIgotICAgICAgICBlY2hvICIqKiBwYWdlIGZvciBhIGRpc2N1c3Npb24gb2YgUENSRTIncyBzdGFjayB1c2FnZS4iCisgICAgICAgIGVjaG8gIioqIFRlc3QgMiwgd2hlbiBydW4gdW5kZXIgdGhlIGludGVycHJldGVyLCByZXF1aXJlcyBhIGxvdCBvZiBzdGFjay4iCisgICAgICAgIGVjaG8gIioqIElmIGl0IGhhcyBjcmFzaGVkIHdpdGggYSBzZWdtZW50YXRpb24gZmF1bHQsIGl0IG1heSBiZSB0aGF0IHlvdSIKKyAgICAgICAgZWNobyAiKiogZG8gbm90IGhhdmUgZW5vdWdoIHN0YWNrIGF2YWlsYWJsZSBieSBkZWZhdWx0LiBQbGVhc2Ugc2VlIHRoZSIKKyAgICAgICAgZWNobyAiKiogJ3BjcmUyc3RhY2snIG1hbiBwYWdlIGZvciBhIGRpc2N1c3Npb24gb2YgUENSRTIncyBzdGFjayB1c2FnZS4iCisgICAgICAgIGlmIFsgIiR0ZXN0MnN0YWNrIiAhPSAiLVMgMTYiIC1vICIkb3B0IiAhPSAiIiBdOyB0aGVuCisgICAgICAgICAgZWNobyAiICIKKyAgICAgICAgICBleGl0IDEKKyAgICAgICAgZmkKICAgICAgICAgZWNobyAiICIKLSAgICAgICAgZXhpdCAxCisgICAgICAgIGVjaG8gIioqIFRyeWluZyBhZ2FpbiB3aXRoIGFuIGluY3JlYXNlZCBzdGFjayBzaXplLiIKKyAgICAgICAgZWNobyAiICIKKyAgICAgICAgZWNobyAkdGl0bGUyICIoZXhjbHVkaW5nIFVURi0kYml0cykgKDY0TSBzdGFjaykiCisgICAgICAgICRzaW0gJHZhbGdyaW5kICR7b3B0OiskdmpzfSAuL3BjcmUydGVzdCAtcSAtUyA2NCAkYm1vZGUgJG9wdCAkdGVzdGRhdGEvdGVzdGlucHV0MiB0ZXN0dHJ5CisgICAgICAgIGlmIFsgJD8gPSAwIF0gOyB0aGVuCisgICAgICAgICAgJHNpbSAkdmFsZ3JpbmQgJHtvcHQ6KyR2anN9IC4vcGNyZTJ0ZXN0IC1xICRibW9kZSAkb3B0IC1lcnJvciAtNjMsLTYyLC0yLC0xLDAsMTAwLDE4OCwxODkgPj50ZXN0dHJ5CisgICAgICAgICAgY2hlY2tyZXN1bHQgJD8gMiAiJG9wdCIKKyAgICAgICAgZWxzZQorICAgICAgICAgIGVjaG8gIiAiCisgICAgICAgICAgZWNobyAiKiogRmFpbGVkIHdpdGggYW4gaW5jcmVhc2VkIHN0YWNrIHNpemUuIFRlc3RzIGFiYW5kb25lZC4iCisgICAgICAgICAgZWNobyAiICIKKyAgICAgICAgICBleGl0IDEKKyAgICAgICAgZmkKICAgICAgIGZpCiAgICAgZG9uZQogICBmaQpkaWZmIC0tZ2l0IGEvZGlzdDIvUnVuVGVzdC5iYXQgYi9kaXN0Mi9SdW5UZXN0LmJhdAppbmRleCBjZTlkNWI1Li41NGQ5ZjM0IDEwMDY0NAotLS0gYS9kaXN0Mi9SdW5UZXN0LmJhdAorKysgYi9kaXN0Mi9SdW5UZXN0LmJhdApAQCAtMjUsNiArMjUsNyBAQAogQHJlbSBUaGUgZmlsZSB3YXMgY29udmVydGVkIGZvciBQQ1JFMiBieSBQSCwgRmVicnVhcnkgMjAxNS4NCiBAcmVtIFVwZGF0ZWQgZm9yIG5ldyB0ZXN0IDE0IChtb3Zpbmcgb3RoZXJzIHVwIGEgbnVtYmVyKSwgQXVndXN0IDIwMTUuDQogQHJlbSBUaWRpZWQgYW5kIHVwZGF0ZWQgZm9yIG5ldyB0ZXN0cyAyMSwgMjIsIDIzIGJ5IFBILCBPY3RvYmVyIDIwMTUuDQorQHJlbSBQSCBhZGRlZCBtaXNzaW5nICJzZXQgdHlwZSIgZm9yIHRlc3QgMjIsIEFwcmlsIDIwMTYuDQogDQogDQogc2V0bG9jYWwgZW5hYmxlZGVsYXllZGV4cGFuc2lvbg0KQEAgLTI0MiwxMSArMjQzLDE4IEBACiAgIGV4aXQgL2IgMQ0KICkNCiANCitpZiAlMSA9PSA4ICgNCisgIHNldCBvdXRudW09OC0lYml0cyUtJWxpbmtfc2l6ZSUNCispIGVsc2UgaWYgJTEgPT0gMjIgKA0KKyAgc2V0IG91dG51bT0yMi0lYml0cyUNCispIGVsc2UgKA0KKyAgc2V0IG91dG51bT0lMQ0KKykNCiBzZXQgdGVzdGlucHV0PXRlc3RpbnB1dCUxDQotc2V0IHRlc3RvdXRwdXQ9dGVzdG91dHB1dCUxDQorc2V0IHRlc3RvdXRwdXQ9dGVzdG91dHB1dCVvdXRudW0lDQogaWYgZXhpc3QgJXNyY2RpciVcdGVzdGRhdGFcd2luJXRlc3RpbnB1dCUgKA0KICAgc2V0IHRlc3RpbnB1dD13aW50ZXN0aW5wdXQlMQ0KLSAgc2V0IHRlc3RvdXRwdXQ9d2ludGVzdG91dHB1dCUxDQorICBzZXQgdGVzdG91dHB1dD13aW50ZXN0b3V0cHV0JW91dG51bSUNCiApDQogDQogZWNobyBUZXN0ICUxOiAlMw0KQEAgLTI1OSw5ICsyNjcsNiBAQAogKQ0KIA0KIHNldCB0eXBlPQ0KLWlmIFslMV09PVs4XSAoDQotICBzZXQgdHlwZT0tJWJpdHMlDQotKQ0KIGlmIFslMV09PVsxMV0gKA0KICAgc2V0IHR5cGU9LSViaXRzJQ0KICkNCkBAIC0yNzEsNiArMjc2LDkgQEAKIGlmIFslMV09PVsxNF0gKA0KICAgc2V0IHR5cGU9LSViaXRzJQ0KICkNCitpZiBbJTFdPT1bMjJdICgNCisgIHNldCB0eXBlPS0lYml0cyUNCispDQogDQogZmMgL24gJXNyY2RpciVcdGVzdGRhdGFcJXRlc3RvdXRwdXQlJXR5cGUlICUyJWJpdHMlXCV0ZXN0b3V0cHV0JSA+TlVMDQogDQpkaWZmIC0tZ2l0IGEvZGlzdDIvYWNsb2NhbC5tNCBiL2Rpc3QyL2FjbG9jYWwubTQKaW5kZXggMTBjOWNkMS4uZDcyMDRkOSAxMDA2NDQKLS0tIGEvZGlzdDIvYWNsb2NhbC5tNAorKysgYi9kaXN0Mi9hY2xvY2FsLm00CkBAIC0yMSw3ICsyMSw3IEBACiBUbyBkbyBzbywgdXNlIHRoZSBwcm9jZWR1cmUgZG9jdW1lbnRlZCBieSB0aGUgcGFja2FnZSwgdHlwaWNhbGx5ICdhdXRvcmVjb25mJy5dKV0pCiAKIGRubCBwa2cubTQgLSBNYWNyb3MgdG8gbG9jYXRlIGFuZCB1dGlsaXNlIHBrZy1jb25maWcuICAgLSotIEF1dG9jb25mIC0qLQotZG5sIHNlcmlhbCAxMSAocGtnLWNvbmZpZy0wLjI5KQorZG5sIHNlcmlhbCAxMSAocGtnLWNvbmZpZy0wLjI5LjEpCiBkbmwKIGRubCBDb3B5cmlnaHQgwqkgMjAwNCBTY290dCBKYW1lcyBSZW1uYW50IDxzY290dEBuZXRzcGxpdC5jb20+LgogZG5sIENvcHlyaWdodCDCqSAyMDEyLTIwMTUgRGFuIE5pY2hvbHNvbiA8ZGJuLmxpc3RzQGdtYWlsLmNvbT4KQEAgLTYzLDcgKzYzLDcgQEAKIGRubCBTZWUgdGhlICJTaW5jZSIgY29tbWVudCBmb3IgZWFjaCBtYWNybyB5b3UgdXNlIHRvIHNlZSB3aGF0IHZlcnNpb24KIGRubCBvZiB0aGUgbWFjcm9zIHlvdSByZXF1aXJlLgogbTRfZGVmdW4oW1BLR19QUkVSRVFdLAotW200X2RlZmluZShbUEtHX01BQ1JPU19WRVJTSU9OXSwgWzAuMjldKQorW200X2RlZmluZShbUEtHX01BQ1JPU19WRVJTSU9OXSwgWzAuMjkuMV0pCiBtNF9pZihtNF92ZXJzaW9uX2NvbXBhcmUoUEtHX01BQ1JPU19WRVJTSU9OLCBbJDFdKSwgLTEsCiAgICAgW200X2ZhdGFsKFtwa2cubTQgdmVyc2lvbiAkMSBvciBoaWdoZXIgaXMgcmVxdWlyZWQgYnV0IF1QS0dfTUFDUk9TX1ZFUlNJT05bIGZvdW5kXSldKQogXSlkbmwgUEtHX1BSRVJFUQpkaWZmIC0tZ2l0IGEvZGlzdDIvY29uZmlndXJlIGIvZGlzdDIvY29uZmlndXJlCmluZGV4IGU5ZjllMzcuLjcyYjU4YmQgMTAwNzU1Ci0tLSBhL2Rpc3QyL2NvbmZpZ3VyZQorKysgYi9kaXN0Mi9jb25maWd1cmUKQEAgLTEsNiArMSw2IEBACiAjISAvYmluL3NoCiAjIEd1ZXNzIHZhbHVlcyBmb3Igc3lzdGVtLWRlcGVuZGVudCB2YXJpYWJsZXMgYW5kIGNyZWF0ZSBNYWtlZmlsZXMuCi0jIEdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OSBmb3IgUENSRTIgMTAuMjEuCisjIEdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OSBmb3IgUENSRTIgMTAuMjIuCiAjCiAjCiAjIENvcHlyaWdodCAoQykgMTk5Mi0xOTk2LCAxOTk4LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCkBAIC01ODcsOCArNTg3LDggQEAKICMgSWRlbnRpdHkgb2YgdGhpcyBwYWNrYWdlLgogUEFDS0FHRV9OQU1FPSdQQ1JFMicKIFBBQ0tBR0VfVEFSTkFNRT0ncGNyZTInCi1QQUNLQUdFX1ZFUlNJT049JzEwLjIxJwotUEFDS0FHRV9TVFJJTkc9J1BDUkUyIDEwLjIxJworUEFDS0FHRV9WRVJTSU9OPScxMC4yMicKK1BBQ0tBR0VfU1RSSU5HPSdQQ1JFMiAxMC4yMicKIFBBQ0tBR0VfQlVHUkVQT1JUPScnCiBQQUNLQUdFX1VSTD0nJwogCkBAIC04MjEsNiArODIxLDcgQEAKIGVuYWJsZV9kZWJ1ZwogZW5hYmxlX2ppdAogZW5hYmxlX3BjcmUyZ3JlcF9qaXQKK2VuYWJsZV9wY3JlMmdyZXBfY2FsbG91dAogZW5hYmxlX3JlYnVpbGRfY2hhcnRhYmxlcwogZW5hYmxlX3VuaWNvZGUKIGVuYWJsZV9uZXdsaW5lX2lzX2NyCkBAIC0xNDAyLDcgKzE0MDMsNyBAQAogICAjIE9taXQgc29tZSBpbnRlcm5hbCBvciBvYnNvbGV0ZSBvcHRpb25zIHRvIG1ha2UgdGhlIGxpc3QgbGVzcyBpbXBvc2luZy4KICAgIyBUaGlzIG1lc3NhZ2UgaXMgdG9vIGxvbmcgdG8gYmUgYSBzdHJpbmcgaW4gdGhlIEEvVVggMy4xIHNoLgogICBjYXQgPDxfQUNFT0YKLVxgY29uZmlndXJlJyBjb25maWd1cmVzIFBDUkUyIDEwLjIxIHRvIGFkYXB0IHRvIG1hbnkga2luZHMgb2Ygc3lzdGVtcy4KK1xgY29uZmlndXJlJyBjb25maWd1cmVzIFBDUkUyIDEwLjIyIHRvIGFkYXB0IHRvIG1hbnkga2luZHMgb2Ygc3lzdGVtcy4KIAogVXNhZ2U6ICQwIFtPUFRJT05dLi4uIFtWQVI9VkFMVUVdLi4uCiAKQEAgLTE0NzIsNyArMTQ3Myw3IEBACiAKIGlmIHRlc3QgLW4gIiRhY19pbml0X2hlbHAiOyB0aGVuCiAgIGNhc2UgJGFjX2luaXRfaGVscCBpbgotICAgICBzaG9ydCB8IHJlY3Vyc2l2ZSApIGVjaG8gIkNvbmZpZ3VyYXRpb24gb2YgUENSRTIgMTAuMjE6Ijs7CisgICAgIHNob3J0IHwgcmVjdXJzaXZlICkgZWNobyAiQ29uZmlndXJhdGlvbiBvZiBQQ1JFMiAxMC4yMjoiOzsKICAgIGVzYWMKICAgY2F0IDw8XF9BQ0VPRgogCkBAIC0xNDk4LDYgKzE0OTksOCBAQAogICAtLWVuYWJsZS1kZWJ1ZyAgICAgICAgICBlbmFibGUgZGVidWdnaW5nIGNvZGUKICAgLS1lbmFibGUtaml0ICAgICAgICAgICAgZW5hYmxlIEp1c3QtSW4tVGltZSBjb21waWxpbmcgc3VwcG9ydAogICAtLWRpc2FibGUtcGNyZTJncmVwLWppdCBkaXNhYmxlIEpJVCBzdXBwb3J0IGluIHBjcmUyZ3JlcAorICAtLWRpc2FibGUtcGNyZTJncmVwLWNhbGxvdXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZSBjYWxsb3V0IHNjcmlwdCBzdXBwb3J0IGluIHBjcmUyZ3JlcAogICAtLWVuYWJsZS1yZWJ1aWxkLWNoYXJ0YWJsZXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVidWlsZCBjaGFyYWN0ZXIgdGFibGVzIGluIGN1cnJlbnQgbG9jYWxlCiAgIC0tZGlzYWJsZS11bmljb2RlICAgICAgIGRpc2FibGUgVW5pY29kZSBzdXBwb3J0CkBAIC0xNjM4LDcgKzE2NDEsNyBAQAogdGVzdCAtbiAiJGFjX2luaXRfaGVscCIgJiYgZXhpdCAkYWNfc3RhdHVzCiBpZiAkYWNfaW5pdF92ZXJzaW9uOyB0aGVuCiAgIGNhdCA8PFxfQUNFT0YKLVBDUkUyIGNvbmZpZ3VyZSAxMC4yMQorUENSRTIgY29uZmlndXJlIDEwLjIyCiBnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjkKIAogQ29weXJpZ2h0IChDKSAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgpAQCAtMjEzMyw3ICsyMTM2LDcgQEAKIFRoaXMgZmlsZSBjb250YWlucyBhbnkgbWVzc2FnZXMgcHJvZHVjZWQgYnkgY29tcGlsZXJzIHdoaWxlCiBydW5uaW5nIGNvbmZpZ3VyZSwgdG8gYWlkIGRlYnVnZ2luZyBpZiBjb25maWd1cmUgbWFrZXMgYSBtaXN0YWtlLgogCi1JdCB3YXMgY3JlYXRlZCBieSBQQ1JFMiAkYXNfbWUgMTAuMjEsIHdoaWNoIHdhcworSXQgd2FzIGNyZWF0ZWQgYnkgUENSRTIgJGFzX21lIDEwLjIyLCB3aGljaCB3YXMKIGdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OS4gIEludm9jYXRpb24gY29tbWFuZCBsaW5lIHdhcwogCiAgICQgJDAgJEAKQEAgLTI5OTcsNyArMzAwMCw3IEBACiAKICMgRGVmaW5lIHRoZSBpZGVudGl0eSBvZiB0aGUgcGFja2FnZS4KICBQQUNLQUdFPSdwY3JlMicKLSBWRVJTSU9OPScxMC4yMScKKyBWRVJTSU9OPScxMC4yMicKIAogCiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCkBAIC0xMzU5Myw5ICsxMzU5Niw5IEBACiAjIFZlcnNpb25pbmcKIAogUENSRTJfTUFKT1I9IjEwIgotUENSRTJfTUlOT1I9IjIxIgorUENSRTJfTUlOT1I9IjIyIgogUENSRTJfUFJFUkVMRUFTRT0iIgotUENSRTJfREFURT0iMjAxNi0wMS0xMiIKK1BDUkUyX0RBVEU9IjIwMTYtMDctMjkiCiAKIGlmIHRlc3QgIiRQQ1JFMl9NSU5PUiIgPSAiMDgiIC1vICIkUENSRTJfTUlOT1IiID0gIjA5IgogdGhlbgpAQCAtMTM3MDMsNiArMTM3MDYsMjAgQEAKIGZpCiAKIAorIyBIYW5kbGUgLS1kaXNhYmxlLXBjcmUyZ3JlcC1jYWxsb3V0IChlbmFibGVkIGJ5IGRlZmF1bHQpIGJ1dCBub3Qgc3VwcG9ydGVkCisjIGZvciBXaW5kb3dzLgoraWYgdGVzdCAiJEhBVkVfV0lORE9XU19IIiAhPSAiMSI7IHRoZW4KKyAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXBjcmUyZ3JlcC1jYWxsb3V0IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3BjcmUyZ3JlcF9jYWxsb3V0K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfcGNyZTJncmVwX2NhbGxvdXQ7CitlbHNlCisgIGVuYWJsZV9wY3JlMmdyZXBfY2FsbG91dD15ZXMKK2ZpCisKK2Vsc2UKKyAgZW5hYmxlX3BjcmUyZ3JlcF9jYWxsb3V0PW5vCitmaQorCiAjIEhhbmRsZSAtLWVuYWJsZS1yZWJ1aWxkLWNoYXJ0YWJsZXMKICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1yZWJ1aWxkLWNoYXJ0YWJsZXMgd2FzIGdpdmVuLgogaWYgdGVzdCAiJHtlbmFibGVfcmVidWlsZF9jaGFydGFibGVzK3NldH0iID0gc2V0OyB0aGVuIDoKQEAgLTE0MTE5LDYgKzE0MTM2LDE4IEBACiAKIGRvbmUKIAorZm9yIGFjX2hlYWRlciBpbiBzeXMvd2FpdC5oCitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJzeXMvd2FpdC5oIiAiYWNfY3ZfaGVhZGVyX3N5c193YWl0X2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3N5c193YWl0X2giID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TWVNfV0FJVF9IIDEKK19BQ0VPRgorIEhBVkVfU1lTX1dBSVRfSD0xCitmaQorCitkb25lCisKIAogIyBDb25kaXRpb25hbCBjb21waWxhdGlvbgogIGlmIHRlc3QgIngkZW5hYmxlX3BjcmUyXzgiID0gInh5ZXMiOyB0aGVuCkBAIC0xNTI0MCw2ICsxNTI2OSwyMyBAQAogCiBmaQogCisjIEN1cnJlbnRseSBwY3JlMmdyZXAgY2FsbG91dCBzdHJpbmcgaXMgbm90IHN1cHBvcnRlZCB1bmRlciBXaW5kb3dzLgorCitpZiB0ZXN0ICIkZW5hYmxlX3BjcmUyZ3JlcF9jYWxsb3V0IiA9ICJ5ZXMiOyB0aGVuCisgIGlmIHRlc3QgIiRIQVZFX1dJTkRPV1NfSCIgIT0gIjEiOyB0aGVuCisgICAgaWYgdGVzdCAiJEhBVkVfU1lTX1dBSVRfSCIgIT0gIjEiOyB0aGVuCisgICAgICBhc19mbl9lcnJvciAkPyAiQ2FsbG91dCBzY3JpcHQgc3VwcG9ydCBuZWVkcyBzeXMvd2FpdC5oLiIgIiRMSU5FTk8iIDUKKyAgICBmaQorCiskYXNfZWNobyAiI2RlZmluZSBTVVBQT1JUX1BDUkUyR1JFUF9DQUxMT1VUIC8qKi8iID4+Y29uZmRlZnMuaAorCisgIGVsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IENhbGxvdXQgc2NyaXB0IHN1cHBvcnQgaXMgbm90IGF2YWlsYWJsZSBmb3IgV2luZG93czogZGlzYWJsZWQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogQ2FsbG91dCBzY3JpcHQgc3VwcG9ydCBpcyBub3QgYXZhaWxhYmxlIGZvciBXaW5kb3dzOiBkaXNhYmxlZCIgPiYyO30KKyAgICBlbmFibGVfcGNyZTJncmVwX2NhbGxvdXQ9bm8KKyAgZmkKK2ZpCisKIGlmIHRlc3QgIiRlbmFibGVfdW5pY29kZSIgPSAieWVzIjsgdGhlbgogCiAkYXNfZWNobyAiI2RlZmluZSBTVVBQT1JUX1VOSUNPREUgLyoqLyIgPj5jb25mZGVmcy5oCkBAIC0xNTM4MywxNiArMTU0MjksMTYgQEAKICMgYXJlIG00IHZhcmlhYmxlcywgYXNzaWduZWQgYWJvdmUuCiAKIEVYVFJBX0xJQlBDUkUyXzhfTERGTEFHUz0iJEVYVFJBX0xJQlBDUkUyXzhfTERGTEFHUyBcCi0gICROT19VTkRFRklORUQgLXZlcnNpb24taW5mbyAzOjA6MyIKKyAgJE5PX1VOREVGSU5FRCAtdmVyc2lvbi1pbmZvIDQ6MDo0IgogCiBFWFRSQV9MSUJQQ1JFMl8xNl9MREZMQUdTPSIkRVhUUkFfTElCUENSRTJfMTZfTERGTEFHUyBcCi0gICROT19VTkRFRklORUQgLXZlcnNpb24taW5mbyAzOjA6MyIKKyAgJE5PX1VOREVGSU5FRCAtdmVyc2lvbi1pbmZvIDQ6MDo0IgogCiBFWFRSQV9MSUJQQ1JFMl8zMl9MREZMQUdTPSIkRVhUUkFfTElCUENSRTJfMzJfTERGTEFHUyBcCi0gICROT19VTkRFRklORUQgLXZlcnNpb24taW5mbyAzOjA6MyIKKyAgJE5PX1VOREVGSU5FRCAtdmVyc2lvbi1pbmZvIDQ6MDo0IgogCiBFWFRSQV9MSUJQQ1JFMl9QT1NJWF9MREZMQUdTPSIkRVhUUkFfTElCUENSRTJfUE9TSVhfTERGTEFHUyBcCi0gICROT19VTkRFRklORUQgLXZlcnNpb24taW5mbyAwOjE6MCIKKyAgJE5PX1VOREVGSU5FRCAtdmVyc2lvbi1pbmZvIDE6MDowIgogCiAKIApAQCAtMTY0MzUsNyArMTY0ODEsNyBAQAogIyByZXBvcnQgYWN0dWFsIGlucHV0IHZhbHVlcyBvZiBDT05GSUdfRklMRVMgZXRjLiBpbnN0ZWFkIG9mIHRoZWlyCiAjIHZhbHVlcyBhZnRlciBvcHRpb25zIGhhbmRsaW5nLgogYWNfbG9nPSIKLVRoaXMgZmlsZSB3YXMgZXh0ZW5kZWQgYnkgUENSRTIgJGFzX21lIDEwLjIxLCB3aGljaCB3YXMKK1RoaXMgZmlsZSB3YXMgZXh0ZW5kZWQgYnkgUENSRTIgJGFzX21lIDEwLjIyLCB3aGljaCB3YXMKIGdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OS4gIEludm9jYXRpb24gY29tbWFuZCBsaW5lIHdhcwogCiAgIENPTkZJR19GSUxFUyAgICA9ICRDT05GSUdfRklMRVMKQEAgLTE2NTAxLDcgKzE2NTQ3LDcgQEAKIGNhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQogYWNfY3NfY29uZmlnPSJgJGFzX2VjaG8gIiRhY19jb25maWd1cmVfYXJncyIgfCBzZWQgJ3MvXiAvLzsgcy9bXFwiIlxgXCRdL1xcXFwmL2cnYCIKIGFjX2NzX3ZlcnNpb249IlxcCi1QQ1JFMiBjb25maWcuc3RhdHVzIDEwLjIxCitQQ1JFMiBjb25maWcuc3RhdHVzIDEwLjIyCiBjb25maWd1cmVkIGJ5ICQwLCBnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjksCiAgIHdpdGggb3B0aW9ucyBcXCJcJGFjX2NzX2NvbmZpZ1xcIgogCkBAIC0xODI0NSw2ICsxODI5MSw3IEBACiAgICAgQnVpbGQgc2hhcmVkIGxpYnMgLi4uLi4uLi4uLi4uLi4uIDogJHtlbmFibGVfc2hhcmVkfQogICAgIEJ1aWxkIHN0YXRpYyBsaWJzIC4uLi4uLi4uLi4uLi4uLiA6ICR7ZW5hYmxlX3N0YXRpY30KICAgICBVc2UgSklUIGluIHBjcmUyZ3JlcCAuLi4uLi4uLi4uLi4gOiAke2VuYWJsZV9wY3JlMmdyZXBfaml0fQorICAgIEVuYWJsZSBjYWxsb3V0cyBpbiBwY3JlMmdyZXAgLi4uLiA6ICR7ZW5hYmxlX3BjcmUyZ3JlcF9jYWxsb3V0fQogICAgIEJ1ZmZlciBzaXplIGZvciBwY3JlMmdyZXAgLi4uLi4uLiA6ICR7d2l0aF9wY3JlMmdyZXBfYnVmc2l6ZX0KICAgICBMaW5rIHBjcmUyZ3JlcCB3aXRoIGxpYnogLi4uLi4uLi4gOiAke2VuYWJsZV9wY3JlMmdyZXBfbGlien0KICAgICBMaW5rIHBjcmUyZ3JlcCB3aXRoIGxpYmJ6MiAuLi4uLi4gOiAke2VuYWJsZV9wY3JlMmdyZXBfbGliYnoyfQpkaWZmIC0tZ2l0IGEvZGlzdDIvY29uZmlndXJlLmFjIGIvZGlzdDIvY29uZmlndXJlLmFjCmluZGV4IDk5YWQ4YTkuLmQ3YzU3YWEgMTAwNjQ0Ci0tLSBhL2Rpc3QyL2NvbmZpZ3VyZS5hYworKysgYi9kaXN0Mi9jb25maWd1cmUuYWMKQEAgLTksMTggKzksMTggQEAKIGRubCBiZSBkZWZpbmVkIGFzIC1SQzIsIGZvciBleGFtcGxlLiBGb3IgcmVhbCByZWxlYXNlcywgaXQgc2hvdWxkIGJlIGVtcHR5LgogCiBtNF9kZWZpbmUocGNyZTJfbWFqb3IsIFsxMF0pCi1tNF9kZWZpbmUocGNyZTJfbWlub3IsIFsyMV0pCittNF9kZWZpbmUocGNyZTJfbWlub3IsIFsyMl0pCiBtNF9kZWZpbmUocGNyZTJfcHJlcmVsZWFzZSwgW10pCi1tNF9kZWZpbmUocGNyZTJfZGF0ZSwgWzIwMTYtMDEtMTJdKQorbTRfZGVmaW5lKHBjcmUyX2RhdGUsIFsyMDE2LTA3LTI5XSkKIAogIyBOT1RFOiBUaGUgQ01ha2VMaXN0cy50eHQgZmlsZSBzZWFyY2hlcyBmb3IgdGhlIGFib3ZlIHZhcmlhYmxlcyBpbiB0aGUgZmlyc3QKICMgNTAgbGluZXMgb2YgdGhpcyBmaWxlLiBQbGVhc2UgdXBkYXRlIHRoYXQgaWYgdGhlIHZhcmlhYmxlcyBhYm92ZSBhcmUgbW92ZWQuCiAKICMgTGlidG9vbCBzaGFyZWQgbGlicmFyeSBpbnRlcmZhY2UgdmVyc2lvbnMgKGN1cnJlbnQ6cmV2aXNpb246YWdlKQotbTRfZGVmaW5lKGxpYnBjcmUyXzhfdmVyc2lvbiwgICAgIFszOjA6M10pCi1tNF9kZWZpbmUobGlicGNyZTJfMTZfdmVyc2lvbiwgICAgWzM6MDozXSkKLW00X2RlZmluZShsaWJwY3JlMl8zMl92ZXJzaW9uLCAgICBbMzowOjNdKQotbTRfZGVmaW5lKGxpYnBjcmUyX3Bvc2l4X3ZlcnNpb24sIFswOjE6MF0pCittNF9kZWZpbmUobGlicGNyZTJfOF92ZXJzaW9uLCAgICAgWzQ6MDo0XSkKK200X2RlZmluZShsaWJwY3JlMl8xNl92ZXJzaW9uLCAgICBbNDowOjRdKQorbTRfZGVmaW5lKGxpYnBjcmUyXzMyX3ZlcnNpb24sICAgIFs0OjA6NF0pCittNF9kZWZpbmUobGlicGNyZTJfcG9zaXhfdmVyc2lvbiwgWzE6MDowXSkKIAogQUNfUFJFUkVRKDIuNTcpCiBBQ19JTklUKFBDUkUyLCBwY3JlMl9tYWpvci5wY3JlMl9taW5vcltdcGNyZTJfcHJlcmVsZWFzZSwgLCBwY3JlMikKQEAgLTE0OCw2ICsxNDgsMTcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGUgSklUIHN1cHBvcnQgaW4gcGNyZTJncmVwXSksCiAgICAgICAgICAgICAgICwgZW5hYmxlX3BjcmUyZ3JlcF9qaXQ9eWVzKQogCisjIEhhbmRsZSAtLWRpc2FibGUtcGNyZTJncmVwLWNhbGxvdXQgKGVuYWJsZWQgYnkgZGVmYXVsdCkgYnV0IG5vdCBzdXBwb3J0ZWQKKyMgZm9yIFdpbmRvd3MuCitpZiB0ZXN0ICIkSEFWRV9XSU5ET1dTX0giICE9ICIxIjsgdGhlbgorICBBQ19BUkdfRU5BQkxFKHBjcmUyZ3JlcC1jYWxsb3V0LAorICAgICAgICAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtcGNyZTJncmVwLWNhbGxvdXRdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlIGNhbGxvdXQgc2NyaXB0IHN1cHBvcnQgaW4gcGNyZTJncmVwXSksCisgICAgICAgICAgICAgICAgLCBlbmFibGVfcGNyZTJncmVwX2NhbGxvdXQ9eWVzKQorZWxzZQorICBlbmFibGVfcGNyZTJncmVwX2NhbGxvdXQ9bm8KK2ZpCisKICMgSGFuZGxlIC0tZW5hYmxlLXJlYnVpbGQtY2hhcnRhYmxlcwogQUNfQVJHX0VOQUJMRShyZWJ1aWxkLWNoYXJ0YWJsZXMsCiAgICAgICAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1yZWJ1aWxkLWNoYXJ0YWJsZXNdLApAQCAtMzkyLDYgKzQwMyw3IEBACiBBQ19IRUFERVJfU1REQwogQUNfQ0hFQ0tfSEVBREVSUyhsaW1pdHMuaCBzeXMvdHlwZXMuaCBzeXMvc3RhdC5oIGRpcmVudC5oKQogQUNfQ0hFQ0tfSEVBREVSUyhbd2luZG93cy5oXSwgW0hBVkVfV0lORE9XU19IPTFdKQorQUNfQ0hFQ0tfSEVBREVSUyhbc3lzL3dhaXQuaF0sIFtIQVZFX1NZU19XQUlUX0g9MV0pCiAKICMgQ29uZGl0aW9uYWwgY29tcGlsYXRpb24KIEFNX0NPTkRJVElPTkFMKFdJVEhfUENSRTJfOCwgdGVzdCAieCRlbmFibGVfcGNyZTJfOCIgPSAieHllcyIpCkBAIC01NDYsNiArNTU4LDIxIEBACiAgICAgRGVmaW5lIHRvIGFueSB2YWx1ZSB0byBlbmFibGUgSklUIHN1cHBvcnQgaW4gcGNyZTJncmVwLl0pCiBmaQogCisjIEN1cnJlbnRseSBwY3JlMmdyZXAgY2FsbG91dCBzdHJpbmcgaXMgbm90IHN1cHBvcnRlZCB1bmRlciBXaW5kb3dzLgorCitpZiB0ZXN0ICIkZW5hYmxlX3BjcmUyZ3JlcF9jYWxsb3V0IiA9ICJ5ZXMiOyB0aGVuCisgIGlmIHRlc3QgIiRIQVZFX1dJTkRPV1NfSCIgIT0gIjEiOyB0aGVuCisgICAgaWYgdGVzdCAiJEhBVkVfU1lTX1dBSVRfSCIgIT0gIjEiOyB0aGVuCisgICAgICBBQ19NU0dfRVJST1IoW0NhbGxvdXQgc2NyaXB0IHN1cHBvcnQgbmVlZHMgc3lzL3dhaXQuaC5dKQorICAgIGZpCisgICAgQUNfREVGSU5FKFtTVVBQT1JUX1BDUkUyR1JFUF9DQUxMT1VUXSwgW10sIFsKKyAgICAgIERlZmluZSB0byBhbnkgdmFsdWUgdG8gZW5hYmxlIGNhbGxvdXQgc2NyaXB0IHN1cHBvcnQgaW4gcGNyZTJncmVwLl0pCisgIGVsc2UKKyAgICBBQ19NU0dfV0FSTihbQ2FsbG91dCBzY3JpcHQgc3VwcG9ydCBpcyBub3QgYXZhaWxhYmxlIGZvciBXaW5kb3dzOiBkaXNhYmxlZF0pCisgICAgZW5hYmxlX3BjcmUyZ3JlcF9jYWxsb3V0PW5vCisgIGZpCitmaQorCiBpZiB0ZXN0ICIkZW5hYmxlX3VuaWNvZGUiID0gInllcyI7IHRoZW4KICAgQUNfREVGSU5FKFtTVVBQT1JUX1VOSUNPREVdLCBbXSwgWwogICAgIERlZmluZSB0byBhbnkgdmFsdWUgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIFVuaWNvZGUgYW5kIFVURiBlbmNvZGluZy4KQEAgLTkwOCw2ICs5MzUsNyBAQAogICAgIEJ1aWxkIHNoYXJlZCBsaWJzIC4uLi4uLi4uLi4uLi4uLiA6ICR7ZW5hYmxlX3NoYXJlZH0KICAgICBCdWlsZCBzdGF0aWMgbGlicyAuLi4uLi4uLi4uLi4uLi4gOiAke2VuYWJsZV9zdGF0aWN9CiAgICAgVXNlIEpJVCBpbiBwY3JlMmdyZXAgLi4uLi4uLi4uLi4uIDogJHtlbmFibGVfcGNyZTJncmVwX2ppdH0KKyAgICBFbmFibGUgY2FsbG91dHMgaW4gcGNyZTJncmVwIC4uLi4gOiAke2VuYWJsZV9wY3JlMmdyZXBfY2FsbG91dH0KICAgICBCdWZmZXIgc2l6ZSBmb3IgcGNyZTJncmVwIC4uLi4uLi4gOiAke3dpdGhfcGNyZTJncmVwX2J1ZnNpemV9CiAgICAgTGluayBwY3JlMmdyZXAgd2l0aCBsaWJ6IC4uLi4uLi4uIDogJHtlbmFibGVfcGNyZTJncmVwX2xpYnp9CiAgICAgTGluayBwY3JlMmdyZXAgd2l0aCBsaWJiejIgLi4uLi4uIDogJHtlbmFibGVfcGNyZTJncmVwX2xpYmJ6Mn0KZGlmZiAtLWdpdCBhL2Rpc3QyL2RvYy9odG1sL1JFQURNRS50eHQgYi9kaXN0Mi9kb2MvaHRtbC9SRUFETUUudHh0CmluZGV4IDQ4ZDJmZmQuLjAzZDY3ZjYgMTAwNjQ0Ci0tLSBhL2Rpc3QyL2RvYy9odG1sL1JFQURNRS50eHQKKysrIGIvZGlzdDIvZG9jL2h0bWwvUkVBRE1FLnR4dApAQCAtMTY4LDE1ICsxNjgsMTIgQEAKICAgYnVpbHQuIElmIHlvdSB3YW50IG9ubHkgdGhlIDE2LWJpdCBvciAzMi1iaXQgbGlicmFyeSwgdXNlIC0tZGlzYWJsZS1wY3JlMi04CiAgIHRvIGRpc2FibGUgYnVpbGRpbmcgdGhlIDgtYml0IGxpYnJhcnkuCiAKLS4gSWYgeW91IHdhbnQgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBqdXN0LWluLXRpbWUgY29tcGlsaW5nLCB3aGljaCBjYW4gZ2l2ZQotICBsYXJnZSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMgb24gY2VydGFpbiBwbGF0Zm9ybXMsIGFkZCAtLWVuYWJsZS1qaXQgdG8gdGhlCi0gICJjb25maWd1cmUiIGNvbW1hbmQuIFRoaXMgc3VwcG9ydCBpcyBhdmFpbGFibGUgb25seSBmb3IgY2VydGFpbiBoYXJkd2FyZQorLiBJZiB5b3Ugd2FudCB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIGp1c3QtaW4tdGltZSAoSklUKSBjb21waWxpbmcsIHdoaWNoIGNhbgorICBnaXZlIGxhcmdlIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cyBvbiBjZXJ0YWluIHBsYXRmb3JtcywgYWRkIC0tZW5hYmxlLWppdCB0bworICB0aGUgImNvbmZpZ3VyZSIgY29tbWFuZC4gVGhpcyBzdXBwb3J0IGlzIGF2YWlsYWJsZSBvbmx5IGZvciBjZXJ0YWluIGhhcmR3YXJlCiAgIGFyY2hpdGVjdHVyZXMuIElmIHlvdSB0cnkgdG8gZW5hYmxlIGl0IG9uIGFuIHVuc3VwcG9ydGVkIGFyY2hpdGVjdHVyZSwgdGhlcmUKICAgd2lsbCBiZSBhIGNvbXBpbGUgdGltZSBlcnJvci4KIAotLiBXaGVuIEpJVCBzdXBwb3J0IGlzIGVuYWJsZWQsIHBjcmUyZ3JlcCBhdXRvbWF0aWNhbGx5IG1ha2VzIHVzZSBvZiBpdCwgdW5sZXNzCi0gIHlvdSBhZGQgLS1kaXNhYmxlLXBjcmUyZ3JlcC1qaXQgdG8gdGhlICJjb25maWd1cmUiIGNvbW1hbmQuCi0KIC4gSWYgeW91IGRvIG5vdCB3YW50IHRvIG1ha2UgdXNlIG9mIHRoZSBzdXBwb3J0IGZvciBVVEYtOCBVbmljb2RlIGNoYXJhY3RlcgogICBzdHJpbmdzIGluIHRoZSA4LWJpdCBsaWJyYXJ5LCBVVEYtMTYgVW5pY29kZSBjaGFyYWN0ZXIgc3RyaW5ncyBpbiB0aGUgMTYtYml0CiAgIGxpYnJhcnksIG9yIFVURi0zMiBVbmljb2RlIGNoYXJhY3RlciBzdHJpbmdzIGluIHRoZSAzMi1iaXQgbGlicmFyeSwgeW91IGNhbgpAQCAtMzI0LDYgKzMyMSwxNCBAQAogICBydW5uaW5nICJtYWtlIiB0byBidWlsZCBQQ1JFMi4gVGhlcmUgaXMgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBjb3ZlcmFnZQogICByZXBvcnRpbmcgaW4gdGhlICJwY3JlMmJ1aWxkIiBkb2N1bWVudGF0aW9uLgogCisuIFdoZW4gSklUIHN1cHBvcnQgaXMgZW5hYmxlZCwgcGNyZTJncmVwIGF1dG9tYXRpY2FsbHkgbWFrZXMgdXNlIG9mIGl0LCB1bmxlc3MKKyAgeW91IGFkZCAtLWRpc2FibGUtcGNyZTJncmVwLWppdCB0byB0aGUgImNvbmZpZ3VyZSIgY29tbWFuZC4KKworLiBPbiBub24tV2luZG93cyBzeXRlbXMgdGhlcmUgaXMgc3VwcG9ydCBmb3IgY2FsbGluZyBleHRlcm5hbCBzY3JpcHRzIGR1cmluZworICBtYXRjaGluZyBpbiB0aGUgcGNyZTJncmVwIGNvbW1hbmQgdmlhIFBDUkUyJ3MgY2FsbG91dCBmYWNpbGl0eSB3aXRoIHN0cmluZworICBhcmd1bWVudHMuIFRoaXMgc3VwcG9ydCBjYW4gYmUgZGlzYWJsZWQgYnkgYWRkaW5nIC0tZGlzYWJsZS1wY3JlMmdyZXAtY2FsbG91dAorICB0byB0aGUgImNvbmZpZ3VyZSIgY29tbWFuZC4KKwogLiBUaGUgcGNyZTJncmVwIHByb2dyYW0gY3VycmVudGx5IHN1cHBvcnRzIG9ubHkgOC1iaXQgZGF0YSBmaWxlcywgYW5kIHNvCiAgIHJlcXVpcmVzIHRoZSA4LWJpdCBQQ1JFMiBsaWJyYXJ5LiBJdCBpcyBwb3NzaWJsZSB0byBjb21waWxlIHBjcmUyZ3JlcCB0byB1c2UKICAgbGlieiBhbmQvb3IgbGliYnoyLCBpbiBvcmRlciB0byByZWFkIC5neiBhbmQgLmJ6MiBmaWxlcyAocmVzcGVjdGl2ZWx5KSwgYnkKQEAgLTg0MCw0ICs4NDUsNCBAQAogUGhpbGlwIEhhemVsCiBFbWFpbCBsb2NhbCBwYXJ0OiBwaDEwCiBFbWFpbCBkb21haW46IGNhbS5hYy51awotTGFzdCB1cGRhdGVkOiAxNiBPY3RvYmVyIDIwMTUKK0xhc3QgdXBkYXRlZDogMDEgQXByaWwgMjAxNgpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL2h0bWwvaW5kZXguaHRtbCBiL2Rpc3QyL2RvYy9odG1sL2luZGV4Lmh0bWwKaW5kZXggZjQ1OTY1Ny4uNzAzYzI5OCAxMDA2NDQKLS0tIGEvZGlzdDIvZG9jL2h0bWwvaW5kZXguaHRtbAorKysgYi9kaXN0Mi9kb2MvaHRtbC9pbmRleC5odG1sCkBAIC05MSw2ICs5MSw5IEBACiA8dHI+PHRkPjxhIGhyZWY9InBjcmUyX2NhbGxvdXRfZW51bWVyYXRlLmh0bWwiPnBjcmUyX2NhbGxvdXRfZW51bWVyYXRlPC9hPjwvdGQ+CiAgICAgPHRkPiZuYnNwOyZuYnNwO0VudW1lcmF0ZSBjYWxsb3V0cyBpbiBhIGNvbXBpbGVkIHBhdHRlcm48L3RkPjwvdHI+CiAKKzx0cj48dGQ+PGEgaHJlZj0icGNyZTJfY29kZV9jb3B5Lmh0bWwiPnBjcmUyX2NvZGVfY29weTwvYT48L3RkPgorICAgIDx0ZD4mbmJzcDsmbmJzcDtDb3B5IGEgY29tcGlsZWQgcGF0dGVybjwvdGQ+PC90cj4KKwogPHRyPjx0ZD48YSBocmVmPSJwY3JlMl9jb2RlX2ZyZWUuaHRtbCI+cGNyZTJfY29kZV9mcmVlPC9hPjwvdGQ+CiAgICAgPHRkPiZuYnNwOyZuYnNwO0ZyZWUgYSBjb21waWxlZCBwYXR0ZXJuPC90ZD48L3RyPgogCmRpZmYgLS1naXQgYS9kaXN0Mi9kb2MvaHRtbC9wY3JlMl9jb2RlX2NvcHkuaHRtbCBiL2Rpc3QyL2RvYy9odG1sL3BjcmUyX2NvZGVfY29weS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViNjgyODIKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMl9jb2RlX2NvcHkuaHRtbApAQCAtMCwwICsxLDQyIEBACis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPnBjcmUyX2NvZGVfY29weSBzcGVjaWZpY2F0aW9uPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IiNGRkZGRkYiIHRleHQ9IiMwMDAwNUEiIGxpbms9IiMwMDY2RkYiIGFsaW5rPSIjMzM5OUZGIiB2bGluaz0iIzIyMjJCQiI+Cis8aDE+cGNyZTJfY29kZV9jb3B5IG1hbiBwYWdlPC9oMT4KKzxwPgorUmV0dXJuIHRvIHRoZSA8YSBocmVmPSJpbmRleC5odG1sIj5QQ1JFMiBpbmRleCBwYWdlPC9hPi4KKzwvcD4KKzxwPgorVGhpcyBwYWdlIGlzIHBhcnQgb2YgdGhlIFBDUkUyIEhUTUwgZG9jdW1lbnRhdGlvbi4gSXQgd2FzIGdlbmVyYXRlZAorYXV0b21hdGljYWxseSBmcm9tIHRoZSBvcmlnaW5hbCBtYW4gcGFnZS4gSWYgdGhlcmUgaXMgYW55IG5vbnNlbnNlIGluIGl0LAorcGxlYXNlIGNvbnN1bHQgdGhlIG1hbiBwYWdlLCBpbiBjYXNlIHRoZSBjb252ZXJzaW9uIHdlbnQgd3JvbmcuCis8YnI+Cis8YnI+PGI+CitTWU5PUFNJUworPC9iPjxicj4KKzxQPgorPGI+I2luY2x1ZGUgJiM2MDtwY3JlMi5oJiM2Mjs8L2I+Cis8L1A+Cis8UD4KKzxiPnBjcmUyX2NvZGUgKnBjcmUyX2NvZGVfY29weShjb25zdCBwY3JlMl9jb2RlICo8aT5jb2RlPC9pPik7PC9iPgorPC9QPgorPGJyPjxiPgorREVTQ1JJUFRJT04KKzwvYj48YnI+Cis8UD4KK1RoaXMgZnVuY3Rpb24gbWFrZXMgYSBjb3B5IG9mIHRoZSBtZW1vcnkgdXNlZCBmb3IgYSBjb21waWxlZCBwYXR0ZXJuLCBleGNsdWRpbmcKK2FueSBtZW1vcnkgdXNlZCBieSB0aGUgSklUIGNvbXBpbGVyLiBXaXRob3V0IGEgc3Vic2VxdWVudCBjYWxsIHRvCis8Yj5wY3JlMl9qaXRfY29tcGlsZSgpPC9iPiwgdGhlIGNvcHkgY2FuIGJlIHVzZWQgb25seSBmb3Igbm9uLUpJVCBtYXRjaGluZy4gVGhlCit5aWVsZCBvZiB0aGUgZnVuY3Rpb24gaXMgTlVMTCBpZiA8aT5jb2RlPC9pPiBpcyBOVUxMIG9yIGlmIHN1ZmZpY2llbnQgbWVtb3J5CitjYW5ub3QgYmUgb2J0YWluZWQuCis8L1A+Cis8UD4KK1RoZXJlIGlzIGEgY29tcGxldGUgZGVzY3JpcHRpb24gb2YgdGhlIFBDUkUyIG5hdGl2ZSBBUEkgaW4gdGhlCis8YSBocmVmPSJwY3JlMmFwaS5odG1sIj48Yj5wY3JlMmFwaTwvYj48L2E+CitwYWdlIGFuZCBhIGRlc2NyaXB0aW9uIG9mIHRoZSBQT1NJWCBBUEkgaW4gdGhlCis8YSBocmVmPSJwY3JlMnBvc2l4Lmh0bWwiPjxiPnBjcmUycG9zaXg8L2I+PC9hPgorcGFnZS4KKzxwPgorUmV0dXJuIHRvIHRoZSA8YSBocmVmPSJpbmRleC5odG1sIj5QQ1JFMiBpbmRleCBwYWdlPC9hPi4KKzwvcD4KZGlmZiAtLWdpdCBhL2Rpc3QyL2RvYy9odG1sL3BjcmUyX2dldF9lcnJvcl9tZXNzYWdlLmh0bWwgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMl9nZXRfZXJyb3JfbWVzc2FnZS5odG1sCmluZGV4IDVkNDIyOTEuLjI2YzgwZmUgMTAwNjQ0Ci0tLSBhL2Rpc3QyL2RvYy9odG1sL3BjcmUyX2dldF9lcnJvcl9tZXNzYWdlLmh0bWwKKysrIGIvZGlzdDIvZG9jL2h0bWwvcGNyZTJfZ2V0X2Vycm9yX21lc3NhZ2UuaHRtbApAQCAtMzUsNyArMzUsMTAgQEAKICAgPGk+YnVmZmxlbjwvaT4gICAgIHRoZSBsZW5ndGggb2YgdGhlIGJ1ZmZlciAoY29kZSB1bml0cykKIDwvcHJlPgogVGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgbWVzc2FnZSwgZXhjbHVkaW5nIHRoZSB0cmFpbGluZyB6ZXJvLCBvcgotYSBuZWdhdGl2ZSBlcnJvciBjb2RlIGlmIHRoZSBidWZmZXIgaXMgdG9vIHNtYWxsLgordGhlIG5lZ2F0aXZlIGVycm9yIGNvZGUgUENSRTJfRVJST1JfTk9NRU1PUlkgaWYgdGhlIGJ1ZmZlciBpcyB0b28gc21hbGwuIEluCit0aGlzIGNhc2UsIHRoZSByZXR1cm5lZCBtZXNzYWdlIGlzIHRydW5jYXRlZCAoYnV0IHN0aWxsIHdpdGggYSB0cmFpbGluZyB6ZXJvKS4KK0lmIDxpPmVycm9yY29kZTwvaT4gZG9lcyBub3QgY29udGFpbiBhIHJlY29nbml6ZWQgZXJyb3IgY29kZSBudW1iZXIsIHRoZQorbmVnYXRpdmUgdmFsdWUgUENSRTJfRVJST1JfQkFEREFUQSBpcyByZXR1cm5lZC4KIDwvUD4KIDxQPgogVGhlcmUgaXMgYSBjb21wbGV0ZSBkZXNjcmlwdGlvbiBvZiB0aGUgUENSRTIgbmF0aXZlIEFQSSBpbiB0aGUKZGlmZiAtLWdpdCBhL2Rpc3QyL2RvYy9odG1sL3BjcmUyYXBpLmh0bWwgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMmFwaS5odG1sCmluZGV4IGJmMWRkOGUuLmZhOWYzNDIgMTAwNjQ0Ci0tLSBhL2Rpc3QyL2RvYy9odG1sL3BjcmUyYXBpLmh0bWwKKysrIGIvZGlzdDIvZG9jL2h0bWwvcGNyZTJhcGkuaHRtbApAQCAtNDMsMTYgKzQzLDE3IEBACiA8bGk+PGEgbmFtZT0iVE9DMjgiIGhyZWY9IiNTRUMyOCI+SE9XIFBDUkUyX01BVENIKCkgUkVUVVJOUyBBIFNUUklORyBBTkQgQ0FQVFVSRUQgU1VCU1RSSU5HUzwvYT4KIDxsaT48YSBuYW1lPSJUT0MyOSIgaHJlZj0iI1NFQzI5Ij5PVEhFUiBJTkZPUk1BVElPTiBBQk9VVCBBIE1BVENIPC9hPgogPGxpPjxhIG5hbWU9IlRPQzMwIiBocmVmPSIjU0VDMzAiPkVSUk9SIFJFVFVSTlMgRlJPTSA8Yj5wY3JlMl9tYXRjaCgpPC9iPjwvYT4KLTxsaT48YSBuYW1lPSJUT0MzMSIgaHJlZj0iI1NFQzMxIj5FWFRSQUNUSU5HIENBUFRVUkVEIFNVQlNUUklOR1MgQlkgTlVNQkVSPC9hPgotPGxpPjxhIG5hbWU9IlRPQzMyIiBocmVmPSIjU0VDMzIiPkVYVFJBQ1RJTkcgQSBMSVNUIE9GIEFMTCBDQVBUVVJFRCBTVUJTVFJJTkdTPC9hPgotPGxpPjxhIG5hbWU9IlRPQzMzIiBocmVmPSIjU0VDMzMiPkVYVFJBQ1RJTkcgQ0FQVFVSRUQgU1VCU1RSSU5HUyBCWSBOQU1FPC9hPgotPGxpPjxhIG5hbWU9IlRPQzM0IiBocmVmPSIjU0VDMzQiPkNSRUFUSU5HIEEgTkVXIFNUUklORyBXSVRIIFNVQlNUSVRVVElPTlM8L2E+Ci08bGk+PGEgbmFtZT0iVE9DMzUiIGhyZWY9IiNTRUMzNSI+RFVQTElDQVRFIFNVQlBBVFRFUk4gTkFNRVM8L2E+Ci08bGk+PGEgbmFtZT0iVE9DMzYiIGhyZWY9IiNTRUMzNiI+RklORElORyBBTEwgUE9TU0lCTEUgTUFUQ0hFUyBBVCBPTkUgUE9TSVRJT048L2E+Ci08bGk+PGEgbmFtZT0iVE9DMzciIGhyZWY9IiNTRUMzNyI+TUFUQ0hJTkcgQSBQQVRURVJOOiBUSEUgQUxURVJOQVRJVkUgRlVOQ1RJT048L2E+Ci08bGk+PGEgbmFtZT0iVE9DMzgiIGhyZWY9IiNTRUMzOCI+U0VFIEFMU088L2E+Ci08bGk+PGEgbmFtZT0iVE9DMzkiIGhyZWY9IiNTRUMzOSI+QVVUSE9SPC9hPgotPGxpPjxhIG5hbWU9IlRPQzQwIiBocmVmPSIjU0VDNDAiPlJFVklTSU9OPC9hPgorPGxpPjxhIG5hbWU9IlRPQzMxIiBocmVmPSIjU0VDMzEiPk9CVEFJTklORyBBIFRFWFRVQUwgRVJST1IgTUVTU0FHRTwvYT4KKzxsaT48YSBuYW1lPSJUT0MzMiIgaHJlZj0iI1NFQzMyIj5FWFRSQUNUSU5HIENBUFRVUkVEIFNVQlNUUklOR1MgQlkgTlVNQkVSPC9hPgorPGxpPjxhIG5hbWU9IlRPQzMzIiBocmVmPSIjU0VDMzMiPkVYVFJBQ1RJTkcgQSBMSVNUIE9GIEFMTCBDQVBUVVJFRCBTVUJTVFJJTkdTPC9hPgorPGxpPjxhIG5hbWU9IlRPQzM0IiBocmVmPSIjU0VDMzQiPkVYVFJBQ1RJTkcgQ0FQVFVSRUQgU1VCU1RSSU5HUyBCWSBOQU1FPC9hPgorPGxpPjxhIG5hbWU9IlRPQzM1IiBocmVmPSIjU0VDMzUiPkNSRUFUSU5HIEEgTkVXIFNUUklORyBXSVRIIFNVQlNUSVRVVElPTlM8L2E+Cis8bGk+PGEgbmFtZT0iVE9DMzYiIGhyZWY9IiNTRUMzNiI+RFVQTElDQVRFIFNVQlBBVFRFUk4gTkFNRVM8L2E+Cis8bGk+PGEgbmFtZT0iVE9DMzciIGhyZWY9IiNTRUMzNyI+RklORElORyBBTEwgUE9TU0lCTEUgTUFUQ0hFUyBBVCBPTkUgUE9TSVRJT048L2E+Cis8bGk+PGEgbmFtZT0iVE9DMzgiIGhyZWY9IiNTRUMzOCI+TUFUQ0hJTkcgQSBQQVRURVJOOiBUSEUgQUxURVJOQVRJVkUgRlVOQ1RJT048L2E+Cis8bGk+PGEgbmFtZT0iVE9DMzkiIGhyZWY9IiNTRUMzOSI+U0VFIEFMU088L2E+Cis8bGk+PGEgbmFtZT0iVE9DNDAiIGhyZWY9IiNTRUM0MCI+QVVUSE9SPC9hPgorPGxpPjxhIG5hbWU9IlRPQzQxIiBocmVmPSIjU0VDNDEiPlJFVklTSU9OPC9hPgogPC91bD4KIDxQPgogPGI+I2luY2x1ZGUgJiM2MDtwY3JlMi5oJiM2Mjs8L2I+CkBAIC0yOTAsNiArMjkxLDkgQEAKIDwvUD4KIDxicj48YSBuYW1lPSJTRUMxMCIgaHJlZj0iI1RPQzEiPlBDUkUyIE5BVElWRSBBUEkgQVVYSUxJQVJZIEZVTkNUSU9OUzwvYT48YnI+CiA8UD4KKzxiPnBjcmUyX2NvZGUgKnBjcmUyX2NvZGVfY29weShjb25zdCBwY3JlMl9jb2RlICo8aT5jb2RlPC9pPik7PC9iPgorPGJyPgorPGJyPgogPGI+aW50IHBjcmUyX2dldF9lcnJvcl9tZXNzYWdlKGludCA8aT5lcnJvcmNvZGU8L2k+LCBQQ1JFMl9VQ0hBUiAqPGk+YnVmZmVyPC9pPiw8L2I+CiA8Yj4gIFBDUkUyX1NJWkUgPGk+YnVmZmxlbjwvaT4pOzwvYj4KIDxicj4KQEAgLTQxNCw5ICs0MTgsMTAgQEAKIDxiPnBjcmUyX2ppdF9zdGFja19hc3NpZ24oKTwvYj4gaW4gb3JkZXIgdG8gY29udHJvbCB0aGUgSklUIGNvZGUncyBtZW1vcnkgdXNhZ2UuCiA8L1A+CiA8UD4KLUpJVCBtYXRjaGluZyBpcyBhdXRvbWF0aWNhbGx5IHVzZWQgYnkgPGI+cGNyZTJfbWF0Y2goKTwvYj4gaWYgaXQgaXMgYXZhaWxhYmxlLgotVGhlcmUgaXMgYWxzbyBhIGRpcmVjdCBpbnRlcmZhY2UgZm9yIEpJVCBtYXRjaGluZywgd2hpY2ggZ2l2ZXMgaW1wcm92ZWQKLXBlcmZvcm1hbmNlLiBUaGUgSklULXNwZWNpZmljIGZ1bmN0aW9ucyBhcmUgZGlzY3Vzc2VkIGluIHRoZQorSklUIG1hdGNoaW5nIGlzIGF1dG9tYXRpY2FsbHkgdXNlZCBieSA8Yj5wY3JlMl9tYXRjaCgpPC9iPiBpZiBpdCBpcyBhdmFpbGFibGUsCit1bmxlc3MgdGhlIFBDUkUyX05PX0pJVCBvcHRpb24gaXMgc2V0LiBUaGVyZSBpcyBhbHNvIGEgZGlyZWN0IGludGVyZmFjZSBmb3IgSklUCittYXRjaGluZywgd2hpY2ggZ2l2ZXMgaW1wcm92ZWQgcGVyZm9ybWFuY2UuIFRoZSBKSVQtc3BlY2lmaWMgZnVuY3Rpb25zIGFyZQorZGlzY3Vzc2VkIGluIHRoZQogPGEgaHJlZj0icGNyZTJqaXQuaHRtbCI+PGI+cGNyZTJqaXQ8L2I+PC9hPgogZG9jdW1lbnRhdGlvbi4KIDwvUD4KQEAgLTQ1NSwxMCArNDYwLDE5IEBACiBtYXRjaGVkLgogPC9QPgogPFA+CitGdW5jdGlvbnMgd2hvc2UgbmFtZXMgYmVnaW4gd2l0aCA8Yj5wY3JlMl9zZXJpYWxpemVfPC9iPiBhcmUgdXNlZCBmb3Igc2F2aW5nCitjb21waWxlZCBwYXR0ZXJucyBvbiBkaXNjIG9yIGVsc2V3aGVyZSwgYW5kIHJlbG9hZGluZyB0aGVtIGxhdGVyLgorPC9QPgorPFA+CiBGaW5hbGx5LCB0aGVyZSBhcmUgZnVuY3Rpb25zIGZvciBmaW5kaW5nIG91dCBpbmZvcm1hdGlvbiBhYm91dCBhIGNvbXBpbGVkCiBwYXR0ZXJuICg8Yj5wY3JlMl9wYXR0ZXJuX2luZm8oKTwvYj4pIGFuZCBhYm91dCB0aGUgY29uZmlndXJhdGlvbiB3aXRoIHdoaWNoCiBQQ1JFMiB3YXMgYnVpbHQgKDxiPnBjcmUyX2NvbmZpZygpPC9iPikuCiA8L1A+Cis8UD4KK0Z1bmN0aW9ucyB3aXRoIG5hbWVzIGVuZGluZyB3aXRoIDxiPl9mcmVlKCk8L2I+IGFyZSB1c2VkIGZvciBmcmVlaW5nIG1lbW9yeQorYmxvY2tzIG9mIHZhcmlvdXMgc29ydHMuIEluIGFsbCBjYXNlcywgaWYgb25lIG9mIHRoZXNlIGZ1bmN0aW9ucyBpcyBjYWxsZWQgd2l0aAorYSBOVUxMIGFyZ3VtZW50LCBpdCBkb2VzIG5vdGhpbmcuCis8L1A+CiA8YnI+PGEgbmFtZT0iU0VDMTMiIGhyZWY9IiNUT0MxIj5TVFJJTkcgTEVOR1RIUyBBTkQgT0ZGU0VUUzwvYT48YnI+CiA8UD4KIFRoZSBQQ1JFMiBBUEkgdXNlcyBzdHJpbmcgbGVuZ3RocyBhbmQgb2Zmc2V0cyBpbnRvIHN0cmluZ3Mgb2YgY29kZSB1bml0cyBpbgpAQCAtNTE2LDIwICs1MzAsNTEgQEAKIFRoZXJlIGFyZSBzZXZlcmFsIGRpZmZlcmVudCBibG9ja3Mgb2YgZGF0YSB0aGF0IGFyZSB1c2VkIHRvIHBhc3MgaW5mb3JtYXRpb24KIGJldHdlZW4gdGhlIGFwcGxpY2F0aW9uIGFuZCB0aGUgUENSRTIgbGlicmFyaWVzLgogPC9QPgorPGJyPjxiPgorVGhlIGNvbXBpbGVkIHBhdHRlcm4KKzwvYj48YnI+CiA8UD4KLSgxKSBBIHBvaW50ZXIgdG8gdGhlIGNvbXBpbGVkIGZvcm0gb2YgYSBwYXR0ZXJuIGlzIHJldHVybmVkIHRvIHRoZSB1c2VyIHdoZW4KK0EgcG9pbnRlciB0byB0aGUgY29tcGlsZWQgZm9ybSBvZiBhIHBhdHRlcm4gaXMgcmV0dXJuZWQgdG8gdGhlIHVzZXIgd2hlbgogPGI+cGNyZTJfY29tcGlsZSgpPC9iPiBpcyBzdWNjZXNzZnVsLiBUaGUgZGF0YSBpbiB0aGUgY29tcGlsZWQgcGF0dGVybiBpcyBmaXhlZCwKIGFuZCBkb2VzIG5vdCBjaGFuZ2Ugd2hlbiB0aGUgcGF0dGVybiBpcyBtYXRjaGVkLiBUaGVyZWZvcmUsIGl0IGlzIHRocmVhZC1zYWZlLAogdGhhdCBpcywgdGhlIHNhbWUgY29tcGlsZWQgcGF0dGVybiBjYW4gYmUgdXNlZCBieSBtb3JlIHRoYW4gb25lIHRocmVhZAotc2ltdWx0YW5lb3VzbHkuIEFuIGFwcGxpY2F0aW9uIGNhbiBjb21waWxlIGFsbCBpdHMgcGF0dGVybnMgYXQgdGhlIHN0YXJ0LAotYmVmb3JlIGZvcmtpbmcgb2ZmIG11bHRpcGxlIHRocmVhZHMgdGhhdCB1c2UgdGhlbS4gSG93ZXZlciwgaWYgdGhlIGp1c3QtaW4tdGltZQotb3B0aW1pemF0aW9uIGZlYXR1cmUgaXMgYmVpbmcgdXNlZCwgaXQgbmVlZHMgc2VwYXJhdGUgbWVtb3J5IHN0YWNrIGFyZWFzIGZvcgotZWFjaCB0aHJlYWQuIFNlZSB0aGUKK3NpbXVsdGFuZW91c2x5LiBGb3IgZXhhbXBsZSwgYW4gYXBwbGljYXRpb24gY2FuIGNvbXBpbGUgYWxsIGl0cyBwYXR0ZXJucyBhdCB0aGUKK3N0YXJ0LCBiZWZvcmUgZm9ya2luZyBvZmYgbXVsdGlwbGUgdGhyZWFkcyB0aGF0IHVzZSB0aGVtLiBIb3dldmVyLCBpZiB0aGUKK2p1c3QtaW4tdGltZSBvcHRpbWl6YXRpb24gZmVhdHVyZSBpcyBiZWluZyB1c2VkLCBpdCBuZWVkcyBzZXBhcmF0ZSBtZW1vcnkgc3RhY2sKK2FyZWFzIGZvciBlYWNoIHRocmVhZC4gU2VlIHRoZQogPGEgaHJlZj0icGNyZTJqaXQuaHRtbCI+PGI+cGNyZTJqaXQ8L2I+PC9hPgogZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBkZXRhaWxzLgogPC9QPgogPFA+Ci0oMikgVGhlIG5leHQgc2VjdGlvbiBiZWxvdyBpbnRyb2R1Y2VzIHRoZSBpZGVhIG9mICJjb250ZXh0cyIgaW4gd2hpY2ggUENSRTIKK0luIGEgbW9yZSBjb21wbGljYXRlZCBzaXR1YXRpb24sIHdoZXJlIHBhdHRlcm5zIGFyZSBjb21waWxlZCBvbmx5IHdoZW4gdGhleSBhcmUKK2ZpcnN0IG5lZWRlZCwgYnV0IGFyZSBzdGlsbCBzaGFyZWQgYmV0d2VlbiB0aHJlYWRzLCBwb2ludGVycyB0byBjb21waWxlZAorcGF0dGVybnMgbXVzdCBiZSBwcm90ZWN0ZWQgZnJvbSBzaW11bHRhbmVvdXMgd3JpdGluZyBieSBtdWx0aXBsZSB0aHJlYWRzLCBhdAorbGVhc3QgdW50aWwgYSBwYXR0ZXJuIGhhcyBiZWVuIGNvbXBpbGVkLiBUaGUgbG9naWMgY2FuIGJlIHNvbWV0aGluZyBsaWtlIHRoaXM6Cis8cHJlPgorICBHZXQgYSByZWFkLW9ubHkgKHNoYXJlZCkgbG9jayAobXV0ZXgpIGZvciBwb2ludGVyCisgIGlmIChwb2ludGVyID09IE5VTEwpCisgICAgeworICAgIEdldCBhIHdyaXRlICh1bmlxdWUpIGxvY2sgZm9yIHBvaW50ZXIKKyAgICBwb2ludGVyID0gcGNyZTJfY29tcGlsZSguLi4KKyAgICB9CisgIFJlbGVhc2UgdGhlIGxvY2sKKyAgVXNlIHBvaW50ZXIgaW4gcGNyZTJfbWF0Y2goKQorPC9wcmU+CitPZiBjb3Vyc2UsIHRlc3RpbmcgZm9yIGNvbXBpbGF0aW9uIGVycm9ycyBzaG91bGQgYWxzbyBiZSBpbmNsdWRlZCBpbiB0aGUgY29kZS4KKzwvUD4KKzxQPgorSWYgSklUIGlzIGJlaW5nIHVzZWQsIGJ1dCB0aGUgSklUIGNvbXBpbGF0aW9uIGlzIG5vdCBiZWluZyBkb25lIGltbWVkaWF0ZWx5LAorKHBlcmhhcHMgd2FpdGluZyB0byBzZWUgaWYgdGhlIHBhdHRlcm4gaXMgdXNlZCBvZnRlbiBlbm91Z2gpIHNpbWlsYXIgbG9naWMgaXMKK3JlcXVpcmVkLiBKSVQgY29tcGlsYXRpb24gdXBkYXRlcyBhIHBvaW50ZXIgd2l0aGluIHRoZSBjb21waWxlZCBjb2RlIGJsb2NrLCBzbworYSB0aHJlYWQgbXVzdCBnYWluIHVuaXF1ZSB3cml0ZSBhY2Nlc3MgdG8gdGhlIHBvaW50ZXIgYmVmb3JlIGNhbGxpbmcKKzxiPnBjcmUyX2ppdF9jb21waWxlKCk8L2I+LiBBbHRlcm5hdGl2ZWx5LCA8Yj5wY3JlMl9jb2RlX2NvcHkoKTwvYj4gY2FuIGJlIHVzZWQKK3RvIG9idGFpbiBhIHByaXZhdGUgY29weSBvZiB0aGUgY29tcGlsZWQgY29kZS4KKzwvUD4KKzxicj48Yj4KK0NvbnRleHQgYmxvY2tzCis8L2I+PGJyPgorPFA+CitUaGUgbmV4dCBtYWluIHNlY3Rpb24gYmVsb3cgaW50cm9kdWNlcyB0aGUgaWRlYSBvZiAiY29udGV4dHMiIGluIHdoaWNoIFBDUkUyCiBmdW5jdGlvbnMgYXJlIGNhbGxlZC4gQSBjb250ZXh0IGlzIG5vdGhpbmcgbW9yZSB0aGFuIGEgY29sbGVjdGlvbiBvZiBwYXJhbWV0ZXJzCiB0aGF0IGNvbnRyb2wgdGhlIHdheSBQQ1JFMiBvcGVyYXRlcy4gR3JvdXBpbmcgYSBudW1iZXIgb2YgcGFyYW1ldGVycyB0b2dldGhlcgogaW4gYSBjb250ZXh0IGlzIGEgY29udmVuaWVudCB3YXkgb2YgcGFzc2luZyB0aGVtIHRvIGEgUENSRTIgZnVuY3Rpb24gd2l0aG91dApAQCAtNTQzLDExICs1ODgsMTQgQEAKIGFueSB0aHJlYWQgbmVlZHMgdG8gY2hhbmdlIGFueSB2YWx1ZSBpbiBhIGNvbnRleHQsIGl0IG11c3QgbWFrZSBpdHMgb3duCiB0aHJlYWQtc3BlY2lmaWMgY29weS4KIDwvUD4KKzxicj48Yj4KK01hdGNoIGJsb2NrcworPC9iPjxicj4KIDxQPgotKDMpIFRoZSBtYXRjaGluZyBmdW5jdGlvbnMgbmVlZCBhIGJsb2NrIG9mIG1lbW9yeSBmb3Igd29ya2luZyBzcGFjZSBhbmQgZm9yCi1zdG9yaW5nIHRoZSByZXN1bHRzIG9mIGEgbWF0Y2guIFRoaXMgaW5jbHVkZXMgZGV0YWlscyBvZiB3aGF0IHdhcyBtYXRjaGVkLCBhcwotd2VsbCBhcyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHN1Y2ggYXMgdGhlIG5hbWUgb2YgYSAoKk1BUkspIHNldHRpbmcuIEVhY2gKLXRocmVhZCBtdXN0IHByb3ZpZGUgaXRzIG93biB2ZXJzaW9uIG9mIHRoaXMgbWVtb3J5LgorVGhlIG1hdGNoaW5nIGZ1bmN0aW9ucyBuZWVkIGEgYmxvY2sgb2YgbWVtb3J5IGZvciB3b3JraW5nIHNwYWNlIGFuZCBmb3Igc3RvcmluZwordGhlIHJlc3VsdHMgb2YgYSBtYXRjaC4gVGhpcyBpbmNsdWRlcyBkZXRhaWxzIG9mIHdoYXQgd2FzIG1hdGNoZWQsIGFzIHdlbGwgYXMKK2FkZGl0aW9uYWwgaW5mb3JtYXRpb24gc3VjaCBhcyB0aGUgbmFtZSBvZiBhICgqTUFSSykgc2V0dGluZy4gRWFjaCB0aHJlYWQgbXVzdAorcHJvdmlkZSBpdHMgb3duIGNvcHkgb2YgdGhpcyBtZW1vcnkuCiA8L1A+CiA8YnI+PGEgbmFtZT0iU0VDMTYiIGhyZWY9IiNUT0MxIj5QQ1JFMiBDT05URVhUUzwvYT48YnI+CiA8UD4KQEAgLTEwMDcsMzQgKzEwNTUsNTAgQEAKIDxicj4KIDxicj4KIDxiPnZvaWQgcGNyZTJfY29kZV9mcmVlKHBjcmUyX2NvZGUgKjxpPmNvZGU8L2k+KTs8L2I+Cis8YnI+Cis8YnI+Cis8Yj5wY3JlMl9jb2RlICpwY3JlMl9jb2RlX2NvcHkoY29uc3QgcGNyZTJfY29kZSAqPGk+Y29kZTwvaT4pOzwvYj4KIDwvUD4KIDxQPgogVGhlIDxiPnBjcmUyX2NvbXBpbGUoKTwvYj4gZnVuY3Rpb24gY29tcGlsZXMgYSBwYXR0ZXJuIGludG8gYW4gaW50ZXJuYWwgZm9ybS4KLVRoZSBwYXR0ZXJuIGlzIGRlZmluZWQgYnkgYSBwb2ludGVyIHRvIGEgc3RyaW5nIG9mIGNvZGUgdW5pdHMgYW5kIGEgbGVuZ3RoLCBJZgorVGhlIHBhdHRlcm4gaXMgZGVmaW5lZCBieSBhIHBvaW50ZXIgdG8gYSBzdHJpbmcgb2YgY29kZSB1bml0cyBhbmQgYSBsZW5ndGguIElmCiB0aGUgcGF0dGVybiBpcyB6ZXJvLXRlcm1pbmF0ZWQsIHRoZSBsZW5ndGggY2FuIGJlIHNwZWNpZmllZCBhcwogUENSRTJfWkVST19URVJNSU5BVEVELiBUaGUgZnVuY3Rpb24gcmV0dXJucyBhIHBvaW50ZXIgdG8gYSBibG9jayBvZiBtZW1vcnkgdGhhdAotY29udGFpbnMgdGhlIGNvbXBpbGVkIHBhdHRlcm4gYW5kIHJlbGF0ZWQgZGF0YS4gVGhlIGNhbGxlciBtdXN0IGZyZWUgdGhlIG1lbW9yeQotYnkgY2FsbGluZyA8Yj5wY3JlMl9jb2RlX2ZyZWUoKTwvYj4gd2hlbiBpdCBpcyBubyBsb25nZXIgbmVlZGVkLgotPC9QPgotPFA+Ci1OT1RFOiBXaGVuIG9uZSBvZiB0aGUgbWF0Y2hpbmcgZnVuY3Rpb25zIGlzIGNhbGxlZCwgcG9pbnRlcnMgdG8gdGhlIGNvbXBpbGVkCi1wYXR0ZXJuIGFuZCB0aGUgc3ViamVjdCBzdHJpbmcgYXJlIHNldCBpbiB0aGUgbWF0Y2ggZGF0YSBibG9jayBzbyB0aGF0IHRoZXkgY2FuCi1iZSByZWZlcmVuY2VkIGJ5IHRoZSBleHRyYWN0aW9uIGZ1bmN0aW9ucy4gQWZ0ZXIgcnVubmluZyBhIG1hdGNoLCB5b3UgbXVzdCBub3QKLWZyZWUgYSBjb21waWxlZCBwYXR0ZXJuIChvciBhIHN1YmplY3Qgc3RyaW5nKSB1bnRpbCBhZnRlciBhbGwgb3BlcmF0aW9ucyBvbiB0aGUKLTxhIGhyZWY9IiNtYXRjaGRhdGFibG9jayI+bWF0Y2ggZGF0YSBibG9jazwvYT4KLWhhdmUgdGFrZW4gcGxhY2UuCitjb250YWlucyB0aGUgY29tcGlsZWQgcGF0dGVybiBhbmQgcmVsYXRlZCBkYXRhLCBvciBOVUxMIGlmIGFuIGVycm9yIG9jY3VycmVkLgogPC9QPgogPFA+CiBJZiB0aGUgY29tcGlsZSBjb250ZXh0IGFyZ3VtZW50IDxpPmNjb250ZXh0PC9pPiBpcyBOVUxMLCBtZW1vcnkgZm9yIHRoZSBjb21waWxlZAogcGF0dGVybiBpcyBvYnRhaW5lZCBieSBjYWxsaW5nIDxiPm1hbGxvYygpPC9iPi4gT3RoZXJ3aXNlLCBpdCBpcyBvYnRhaW5lZCBmcm9tCi10aGUgc2FtZSBtZW1vcnkgZnVuY3Rpb24gdGhhdCB3YXMgdXNlZCBmb3IgdGhlIGNvbXBpbGUgY29udGV4dC4KK3RoZSBzYW1lIG1lbW9yeSBmdW5jdGlvbiB0aGF0IHdhcyB1c2VkIGZvciB0aGUgY29tcGlsZSBjb250ZXh0LiBUaGUgY2FsbGVyIG11c3QKK2ZyZWUgdGhlIG1lbW9yeSBieSBjYWxsaW5nIDxiPnBjcmUyX2NvZGVfZnJlZSgpPC9iPiB3aGVuIGl0IGlzIG5vIGxvbmdlciBuZWVkZWQuCiA8L1A+CiA8UD4KLVRoZSA8aT5vcHRpb25zPC9pPiBhcmd1bWVudCBjb250YWlucyB2YXJpb3VzIGJpdCBzZXR0aW5ncyB0aGF0IGFmZmVjdCB0aGUKLWNvbXBpbGF0aW9uLiBJdCBzaG91bGQgYmUgemVybyBpZiBubyBvcHRpb25zIGFyZSByZXF1aXJlZC4gVGhlIGF2YWlsYWJsZQotb3B0aW9ucyBhcmUgZGVzY3JpYmVkIGJlbG93LiBTb21lIG9mIHRoZW0gKGluIHBhcnRpY3VsYXIsIHRob3NlIHRoYXQgYXJlCi1jb21wYXRpYmxlIHdpdGggUGVybCwgYnV0IHNvbWUgb3RoZXJzIGFzIHdlbGwpIGNhbiBhbHNvIGJlIHNldCBhbmQgdW5zZXQgZnJvbQotd2l0aGluIHRoZSBwYXR0ZXJuIChzZWUgdGhlIGRldGFpbGVkIGRlc2NyaXB0aW9uIGluIHRoZQorVGhlIGZ1bmN0aW9uIDxiPnBjcmUyX2NvZGVfY29weSgpPC9iPiBtYWtlcyBhIGNvcHkgb2YgdGhlIGNvbXBpbGVkIGNvZGUgaW4gbmV3CittZW1vcnksIHVzaW5nIHRoZSBzYW1lIG1lbW9yeSBhbGxvY2F0b3IgYXMgd2FzIHVzZWQgZm9yIHRoZSBvcmlnaW5hbC4gSG93ZXZlciwKK2lmIHRoZSBjb2RlIGhhcyBiZWVuIHByb2Nlc3NlZCBieSB0aGUgSklUIGNvbXBpbGVyIChzZWUKKzxhIGhyZWY9IiNqaXRjb21waWxpbmciPmJlbG93KSw8L2E+Cit0aGUgSklUIGluZm9ybWF0aW9uIGNhbm5vdCBiZSBjb3BpZWQgKGJlY2F1c2UgaXQgaXMgcG9zaXRpb24tZGVwZW5kZW50KS4KK1RoZSBuZXcgY29weSBjYW4gaW5pdGlhbGx5IGJlIHVzZWQgb25seSBmb3Igbm9uLUpJVCBtYXRjaGluZywgdGhvdWdoIGl0IGNhbiBiZQorcGFzc2VkIHRvIDxiPnBjcmUyX2ppdF9jb21waWxlKCk8L2I+IGlmIHJlcXVpcmVkLiBUaGUgPGI+cGNyZTJfY29kZV9jb3B5KCk8L2I+CitmdW5jdGlvbiBwcm92aWRlcyBhIHdheSBmb3IgaW5kaXZpZHVhbCB0aHJlYWRzIGluIGEgbXVsdGl0aHJlYWRlZCBhcHBsaWNhdGlvbgordG8gYWNxdWlyZSBhIHByaXZhdGUgY29weSBvZiBzaGFyZWQgY29tcGlsZWQgY29kZS4KKzwvUD4KKzxQPgorTk9URTogV2hlbiBvbmUgb2YgdGhlIG1hdGNoaW5nIGZ1bmN0aW9ucyBpcyBjYWxsZWQsIHBvaW50ZXJzIHRvIHRoZSBjb21waWxlZAorcGF0dGVybiBhbmQgdGhlIHN1YmplY3Qgc3RyaW5nIGFyZSBzZXQgaW4gdGhlIG1hdGNoIGRhdGEgYmxvY2sgc28gdGhhdCB0aGV5IGNhbgorYmUgcmVmZXJlbmNlZCBieSB0aGUgc3Vic3RyaW5nIGV4dHJhY3Rpb24gZnVuY3Rpb25zLiBBZnRlciBydW5uaW5nIGEgbWF0Y2gsIHlvdQorbXVzdCBub3QgZnJlZSBhIGNvbXBpbGVkIHBhdHRlcm4gKG9yIGEgc3ViamVjdCBzdHJpbmcpIHVudGlsIGFmdGVyIGFsbAorb3BlcmF0aW9ucyBvbiB0aGUKKzxhIGhyZWY9IiNtYXRjaGRhdGFibG9jayI+bWF0Y2ggZGF0YSBibG9jazwvYT4KK2hhdmUgdGFrZW4gcGxhY2UuCis8L1A+Cis8UD4KK1RoZSA8aT5vcHRpb25zPC9pPiBhcmd1bWVudCBmb3IgPGI+cGNyZTJfY29tcGlsZSgpPC9iPiBjb250YWlucyB2YXJpb3VzIGJpdAorc2V0dGluZ3MgdGhhdCBhZmZlY3QgdGhlIGNvbXBpbGF0aW9uLiBJdCBzaG91bGQgYmUgemVybyBpZiBubyBvcHRpb25zIGFyZQorcmVxdWlyZWQuIFRoZSBhdmFpbGFibGUgb3B0aW9ucyBhcmUgZGVzY3JpYmVkIGJlbG93LiBTb21lIG9mIHRoZW0gKGluCitwYXJ0aWN1bGFyLCB0aG9zZSB0aGF0IGFyZSBjb21wYXRpYmxlIHdpdGggUGVybCwgYnV0IHNvbWUgb3RoZXJzIGFzIHdlbGwpIGNhbgorYWxzbyBiZSBzZXQgYW5kIHVuc2V0IGZyb20gd2l0aGluIHRoZSBwYXR0ZXJuIChzZWUgdGhlIGRldGFpbGVkIGRlc2NyaXB0aW9uIGluCit0aGUKIDxhIGhyZWY9InBjcmUycGF0dGVybi5odG1sIj48Yj5wY3JlMnBhdHRlcm48L2I+PC9hPgogZG9jdW1lbnRhdGlvbikuCiA8L1A+CkBAIC0xMDUxLDEzICsxMTE1LDIwIEBACiA8L1A+CiA8UD4KIElmIDxpPmVycm9yY29kZTwvaT4gb3IgPGk+ZXJyb3JvZmZzZXQ8L2k+IGlzIE5VTEwsIDxiPnBjcmUyX2NvbXBpbGUoKTwvYj4gcmV0dXJucwotTlVMTCBpbW1lZGlhdGVseS4gT3RoZXJ3aXNlLCBpZiBjb21waWxhdGlvbiBvZiBhIHBhdHRlcm4gZmFpbHMsCi08Yj5wY3JlMl9jb21waWxlKCk8L2I+IHJldHVybnMgTlVMTCwgaGF2aW5nIHNldCB0aGVzZSB2YXJpYWJsZXMgdG8gYW4gZXJyb3IgY29kZQotYW5kIGFuIG9mZnNldCAobnVtYmVyIG9mIGNvZGUgdW5pdHMpIHdpdGhpbiB0aGUgcGF0dGVybiwgcmVzcGVjdGl2ZWx5LiBUaGUKLTxiPnBjcmUyX2dldF9lcnJvcl9tZXNzYWdlKCk8L2I+IGZ1bmN0aW9uIHByb3ZpZGVzIGEgdGV4dHVhbCBtZXNzYWdlIGZvciBlYWNoCi1lcnJvciBjb2RlLiBDb21waWxhdGlvbiBlcnJvcnMgYXJlIHBvc2l0aXZlIG51bWJlcnMsIGJ1dCBVVEYgZm9ybWF0dGluZyBlcnJvcnMKLWFyZSBuZWdhdGl2ZSBudW1iZXJzLiBGb3IgYW4gaW52YWxpZCBVVEYtOCBvciBVVEYtMTYgc3RyaW5nLCB0aGUgb2Zmc2V0IGlzIHRoYXQKLW9mIHRoZSBmaXJzdCBjb2RlIHVuaXQgb2YgdGhlIGZhaWxpbmcgY2hhcmFjdGVyLgorTlVMTCBpbW1lZGlhdGVseS4gT3RoZXJ3aXNlLCB0aGUgdmFyaWFibGVzIHRvIHdoaWNoIHRoZXNlIHBvaW50IGFyZSBzZXQgdG8gYW4KK2Vycm9yIGNvZGUgYW5kIGFuIG9mZnNldCAobnVtYmVyIG9mIGNvZGUgdW5pdHMpIHdpdGhpbiB0aGUgcGF0dGVybiwKK3Jlc3BlY3RpdmVseSwgd2hlbiA8Yj5wY3JlMl9jb21waWxlKCk8L2I+IHJldHVybnMgTlVMTCBiZWNhdXNlIGEgY29tcGlsYXRpb24KK2Vycm9yIGhhcyBvY2N1cnJlZC4gVGhlIHZhbHVlcyBhcmUgbm90IGRlZmluZWQgd2hlbiBjb21waWxhdGlvbiBpcyBzdWNjZXNzZnVsCithbmQgPGI+cGNyZTJfY29tcGlsZSgpPC9iPiByZXR1cm5zIGEgbm9uLU5VTEwgdmFsdWUuCis8L1A+Cis8UD4KK1RoZSA8Yj5wY3JlMl9nZXRfZXJyb3JfbWVzc2FnZSgpPC9iPiBmdW5jdGlvbiAoc2VlICJPYnRhaW5pbmcgYSB0ZXh0dWFsIGVycm9yCittZXNzYWdlIgorPGEgaHJlZj0iI2dldGVycm9ybWVzc2FnZSI+YmVsb3cpPC9hPgorcHJvdmlkZXMgYSB0ZXh0dWFsIG1lc3NhZ2UgZm9yIGVhY2ggZXJyb3IgY29kZS4gQ29tcGlsYXRpb24gZXJyb3JzIGhhdmUKK3Bvc2l0aXZlIGVycm9yIGNvZGVzOyBVVEYgZm9ybWF0dGluZyBlcnJvciBjb2RlcyBhcmUgbmVnYXRpdmUuIEZvciBhbiBpbnZhbGlkCitVVEYtOCBvciBVVEYtMTYgc3RyaW5nLCB0aGUgb2Zmc2V0IGlzIHRoYXQgb2YgdGhlIGZpcnN0IGNvZGUgdW5pdCBvZiB0aGUKK2ZhaWxpbmcgY2hhcmFjdGVyLgogPC9QPgogPFA+CiBTb21lIGVycm9ycyBhcmUgbm90IGRldGVjdGVkIHVudGlsIHRoZSB3aG9sZSBwYXR0ZXJuIGhhcyBiZWVuIHNjYW5uZWQ7IGluIHRoZXNlCkBAIC0xMjgyLDcgKzEzNTMsOSBAQAogdGhlIHBhdHRlcm4uIEFueSBvcGVuaW5nIHBhcmVudGhlc2lzIHRoYXQgaXMgbm90IGZvbGxvd2VkIGJ5ID8gYmVoYXZlcyBhcyBpZiBpdAogd2VyZSBmb2xsb3dlZCBieSA/OiBidXQgbmFtZWQgcGFyZW50aGVzZXMgY2FuIHN0aWxsIGJlIHVzZWQgZm9yIGNhcHR1cmluZyAoYW5kCiB0aGV5IGFjcXVpcmUgbnVtYmVycyBpbiB0aGUgdXN1YWwgd2F5KS4gVGhlcmUgaXMgbm8gZXF1aXZhbGVudCBvZiB0aGlzIG9wdGlvbgotaW4gUGVybC4KK2luIFBlcmwuIE5vdGUgdGhhdCwgaWYgdGhpcyBvcHRpb24gaXMgc2V0LCByZWZlcmVuY2VzIHRvIGNhcHR1cmluZyBncm91cHMgKGJhY2sKK3JlZmVyZW5jZXMgb3IgcmVjdXJzaW9uL3N1YnJvdXRpbmUgY2FsbHMpIG1heSBvbmx5IHJlZmVyIHRvIG5hbWVkIGdyb3VwcywKK3Rob3VnaCB0aGUgcmVmZXJlbmNlIGNhbiBiZSBieSBuYW1lIG9yIGJ5IG51bWJlci4KIDxwcmU+CiAgIFBDUkUyX05PX0FVVE9fUE9TU0VTUwogPC9wcmU+CkBAIC0xNDI0LDE0ICsxNDk3LDE3IEBACiA8L1A+CiA8YnI+PGEgbmFtZT0iU0VDMTkiIGhyZWY9IiNUT0MxIj5DT01QSUxBVElPTiBFUlJPUiBDT0RFUzwvYT48YnI+CiA8UD4KLVRoZXJlIGFyZSBvdmVyIDgwIHBvc2l0aXZlIGVycm9yIGNvZGVzIHRoYXQgPGI+cGNyZTJfY29tcGlsZSgpPC9iPiBtYXkgcmV0dXJuIGlmCi1pdCBmaW5kcyBhbiBlcnJvciBpbiB0aGUgcGF0dGVybi4gVGhlcmUgYXJlIGFsc28gc29tZSBuZWdhdGl2ZSBlcnJvciBjb2RlcyB0aGF0Ci1hcmUgdXNlZCBmb3IgaW52YWxpZCBVVEYgc3RyaW5ncy4gVGhlc2UgYXJlIHRoZSBzYW1lIGFzIGdpdmVuIGJ5Ci08Yj5wY3JlMl9tYXRjaCgpPC9iPiBhbmQgPGI+cGNyZTJfZGZhX21hdGNoKCk8L2I+LCBhbmQgYXJlIGRlc2NyaWJlZCBpbiB0aGUKK1RoZXJlIGFyZSBvdmVyIDgwIHBvc2l0aXZlIGVycm9yIGNvZGVzIHRoYXQgPGI+cGNyZTJfY29tcGlsZSgpPC9iPiBtYXkgcmV0dXJuCisodmlhIDxpPmVycm9yY29kZTwvaT4pIGlmIGl0IGZpbmRzIGFuIGVycm9yIGluIHRoZSBwYXR0ZXJuLiBUaGVyZSBhcmUgYWxzbyBzb21lCituZWdhdGl2ZSBlcnJvciBjb2RlcyB0aGF0IGFyZSB1c2VkIGZvciBpbnZhbGlkIFVURiBzdHJpbmdzLiBUaGVzZSBhcmUgdGhlIHNhbWUKK2FzIGdpdmVuIGJ5IDxiPnBjcmUyX21hdGNoKCk8L2I+IGFuZCA8Yj5wY3JlMl9kZmFfbWF0Y2goKTwvYj4sIGFuZCBhcmUgZGVzY3JpYmVkCitpbiB0aGUKIDxhIGhyZWY9InBjcmUydW5pY29kZS5odG1sIj48Yj5wY3JlMnVuaWNvZGU8L2I+PC9hPgotcGFnZS4gVGhlIDxiPnBjcmUyX2dldF9lcnJvcl9tZXNzYWdlKCk8L2I+IGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgdG8gb2J0YWluIGEKLXRleHR1YWwgZXJyb3IgbWVzc2FnZSBmcm9tIGFueSBlcnJvciBjb2RlLgotPC9QPgorcGFnZS4gVGhlIDxiPnBjcmUyX2dldF9lcnJvcl9tZXNzYWdlKCk8L2I+IGZ1bmN0aW9uIChzZWUgIk9idGFpbmluZyBhIHRleHR1YWwKK2Vycm9yIG1lc3NhZ2UiCis8YSBocmVmPSIjZ2V0ZXJyb3JtZXNzYWdlIj5iZWxvdyk8L2E+CitjYW4gYmUgY2FsbGVkIHRvIG9idGFpbiBhIHRleHR1YWwgZXJyb3IgbWVzc2FnZSBmcm9tIGFueSBlcnJvciBjb2RlLgorPGEgbmFtZT0iaml0Y29tcGlsaW5nIj48L2E+PC9QPgogPGJyPjxhIG5hbWU9IlNFQzIwIiBocmVmPSIjVE9DMSI+SlVTVC1JTi1USU1FIChKSVQpIENPTVBJTEFUSU9OPC9hPjxicj4KIDxQPgogPGI+aW50IHBjcmUyX2ppdF9jb21waWxlKHBjcmUyX2NvZGUgKjxpPmNvZGU8L2k+LCB1aW50MzJfdCA8aT5vcHRpb25zPC9pPik7PC9iPgpAQCAtMTU2NywxMCArMTY0MywxNSBAQAogUmV0dXJuIGEgY29weSBvZiB0aGUgcGF0dGVybidzIG9wdGlvbnMuIFRoZSB0aGlyZCBhcmd1bWVudCBzaG91bGQgcG9pbnQgdG8gYQogPGI+dWludDMyX3Q8L2I+IHZhcmlhYmxlLiBQQ1JFMl9JTkZPX0FSR09QVElPTlMgcmV0dXJucyBleGFjdGx5IHRoZSBvcHRpb25zIHRoYXQKIHdlcmUgcGFzc2VkIHRvIDxiPnBjcmUyX2NvbXBpbGUoKTwvYj4sIHdoZXJlYXMgUENSRTJfSU5GT19BTExPUFRJT05TIHJldHVybnMKLXRoZSBjb21waWxlIG9wdGlvbnMgYXMgbW9kaWZpZWQgYnkgYW55IHRvcC1sZXZlbCBvcHRpb24gc2V0dGluZ3Mgc3VjaCBhcyAoKlVURikKLWF0IHRoZSBzdGFydCBvZiB0aGUgcGF0dGVybiBpdHNlbGYuIEZvciBleGFtcGxlLCBpZiB0aGUgcGF0dGVybiAvKCpVVEYpYWJjLyBpcwotY29tcGlsZWQgd2l0aCB0aGUgUENSRTJfRVhURU5ERUQgb3B0aW9uLCB0aGUgcmVzdWx0IGlzIFBDUkUyX0VYVEVOREVEIGFuZAotUENSRTJfVVRGLgordGhlIGNvbXBpbGUgb3B0aW9ucyBhcyBtb2RpZmllZCBieSBhbnkgdG9wLWxldmVsICgqWFhYKSBvcHRpb24gc2V0dGluZ3Mgc3VjaCBhcworKCpVVEYpIGF0IHRoZSBzdGFydCBvZiB0aGUgcGF0dGVybiBpdHNlbGYuCis8L1A+Cis8UD4KK0ZvciBleGFtcGxlLCBpZiB0aGUgcGF0dGVybiAvKCpVVEYpYWJjLyBpcyBjb21waWxlZCB3aXRoIHRoZSBQQ1JFMl9FWFRFTkRFRAorb3B0aW9uLCB0aGUgcmVzdWx0IGZvciBQQ1JFMl9JTkZPX0FMTE9QVElPTlMgaXMgUENSRTJfRVhURU5ERUQgYW5kIFBDUkUyX1VURi4KK09wdGlvbiBzZXR0aW5ncyBzdWNoIGFzICg/aSkgdGhhdCBjYW4gY2hhbmdlIHdpdGhpbiBhIHBhdHRlcm4gZG8gbm90IGFmZmVjdCB0aGUKK3Jlc3VsdCBvZiBQQ1JFMl9JTkZPX0FMTE9QVElPTlMsIGV2ZW4gaWYgdGhleSBhcHBlYXIgcmlnaHQgYXQgdGhlIHN0YXJ0IG9mIHRoZQorcGF0dGVybi4gKFRoaXMgd2FzIGRpZmZlcmVudCBpbiBzb21lIGVhcmxpZXIgcmVsZWFzZXMuKQogPC9QPgogPFA+CiBBIHBhdHRlcm4gY29tcGlsZWQgd2l0aG91dCBQQ1JFMl9BTkNIT1JFRCBpcyBhdXRvbWF0aWNhbGx5IGFuY2hvcmVkIGJ5IFBDUkUyIGlmCkBAIC0yMDI1LDE0ICsyMTA2LDE1IEBACiA8UD4KIFRoZSB1bnVzZWQgYml0cyBvZiB0aGUgPGk+b3B0aW9uczwvaT4gYXJndW1lbnQgZm9yIDxiPnBjcmUyX21hdGNoKCk8L2I+IG11c3QgYmUKIHplcm8uIFRoZSBvbmx5IGJpdHMgdGhhdCBtYXkgYmUgc2V0IGFyZSBQQ1JFMl9BTkNIT1JFRCwgUENSRTJfTk9UQk9MLAotUENSRTJfTk9URU9MLCBQQ1JFMl9OT1RFTVBUWSwgUENSRTJfTk9URU1QVFlfQVRTVEFSVCwgUENSRTJfTk9fVVRGX0NIRUNLLAotUENSRTJfUEFSVElBTF9IQVJELCBhbmQgUENSRTJfUEFSVElBTF9TT0ZULiBUaGVpciBhY3Rpb24gaXMgZGVzY3JpYmVkIGJlbG93LgorUENSRTJfTk9URU9MLCBQQ1JFMl9OT1RFTVBUWSwgUENSRTJfTk9URU1QVFlfQVRTVEFSVCwgUENSRTJfTk9fSklULAorUENSRTJfTk9fVVRGX0NIRUNLLCBQQ1JFMl9QQVJUSUFMX0hBUkQsIGFuZCBQQ1JFMl9QQVJUSUFMX1NPRlQuIFRoZWlyIGFjdGlvbiBpcworZGVzY3JpYmVkIGJlbG93LgogPC9QPgogPFA+CiBTZXR0aW5nIFBDUkUyX0FOQ0hPUkVEIGF0IG1hdGNoIHRpbWUgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUganVzdC1pbi10aW1lIChKSVQpCiBjb21waWxlci4gSWYgaXQgaXMgc2V0LCBKSVQgbWF0Y2hpbmcgaXMgZGlzYWJsZWQgYW5kIHRoZSBub3JtYWwgaW50ZXJwcmV0aXZlCi1jb2RlIGluIDxiPnBjcmUyX21hdGNoKCk8L2I+IGlzIHJ1bi4gVGhlIHJlbWFpbmluZyBvcHRpb25zIGFyZSBzdXBwb3J0ZWQgZm9yIEpJVAotbWF0Y2hpbmcuCitjb2RlIGluIDxiPnBjcmUyX21hdGNoKCk8L2I+IGlzIHJ1bi4gQXBhcnQgZnJvbSBQQ1JFMl9OT19KSVQgKG9idmlvdXNseSksIHRoZQorcmVtYWluaW5nIG9wdGlvbnMgYXJlIHN1cHBvcnRlZCBmb3IgSklUIG1hdGNoaW5nLgogPHByZT4KICAgUENSRTJfQU5DSE9SRUQKIDwvcHJlPgpAQCAtMjA4MCw2ICsyMTYyLDEzIEBACiBJZiB0aGUgcGF0dGVybiBpcyBhbmNob3JlZCwgc3VjaCBhIG1hdGNoIGNhbiBvY2N1ciBvbmx5IGlmIHRoZSBwYXR0ZXJuIGNvbnRhaW5zCiBcSy4KIDxwcmU+CisgIFBDUkUyX05PX0pJVAorPC9wcmU+CitCeSBkZWZhdWx0LCBpZiBhIHBhdHRlcm4gaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHByb2Nlc3NlZCBieQorPGI+cGNyZTJfaml0X2NvbXBpbGUoKTwvYj4sIEpJVCBpcyBhdXRvbWF0aWNhbGx5IHVzZWQgd2hlbiA8Yj5wY3JlMl9tYXRjaCgpPC9iPgoraXMgY2FsbGVkIHdpdGggb3B0aW9ucyB0aGF0IEpJVCBzdXBwb3J0cy4gU2V0dGluZyBQQ1JFMl9OT19KSVQgZGlzYWJsZXMgdGhlIHVzZQorb2YgSklUOyBpdCBmb3JjZXMgbWF0Y2hpbmcgdG8gYmUgZG9uZSBieSB0aGUgaW50ZXJwcmV0ZXIuCis8cHJlPgogICBQQ1JFMl9OT19VVEZfQ0hFQ0sKIDwvcHJlPgogV2hlbiBQQ1JFMl9VVEYgaXMgc2V0IGF0IGNvbXBpbGUgdGltZSwgdGhlIHZhbGlkaXR5IG9mIHRoZSBzdWJqZWN0IGFzIGEgVVRGCkBAIC0yMzM5LDExICsyNDI4LDEzIEBACiA8YnI+PGEgbmFtZT0iU0VDMzAiIGhyZWY9IiNUT0MxIj5FUlJPUiBSRVRVUk5TIEZST00gPGI+cGNyZTJfbWF0Y2goKTwvYj48L2E+PGJyPgogPFA+CiBJZiA8Yj5wY3JlMl9tYXRjaCgpPC9iPiBmYWlscywgaXQgcmV0dXJucyBhIG5lZ2F0aXZlIG51bWJlci4gVGhpcyBjYW4gYmUKLWNvbnZlcnRlZCB0byBhIHRleHQgc3RyaW5nIGJ5IGNhbGxpbmcgPGI+cGNyZTJfZ2V0X2Vycm9yX21lc3NhZ2UoKTwvYj4uIE5lZ2F0aXZlCi1lcnJvciBjb2RlcyBhcmUgYWxzbyByZXR1cm5lZCBieSBvdGhlciBmdW5jdGlvbnMsIGFuZCBhcmUgZG9jdW1lbnRlZCB3aXRoIHRoZW0uCi1UaGUgY29kZXMgYXJlIGdpdmVuIG5hbWVzIGluIHRoZSBoZWFkZXIgZmlsZS4gSWYgVVRGIGNoZWNraW5nIGlzIGluIGZvcmNlIGFuZAotYW4gaW52YWxpZCBVVEYgc3ViamVjdCBzdHJpbmcgaXMgZGV0ZWN0ZWQsIG9uZSBvZiBhIG51bWJlciBvZiBVVEYtc3BlY2lmaWMKLW5lZ2F0aXZlIGVycm9yIGNvZGVzIGlzIHJldHVybmVkLiBEZXRhaWxzIGFyZSBnaXZlbiBpbiB0aGUKK2NvbnZlcnRlZCB0byBhIHRleHQgc3RyaW5nIGJ5IGNhbGxpbmcgdGhlIDxiPnBjcmUyX2dldF9lcnJvcl9tZXNzYWdlKCk8L2I+CitmdW5jdGlvbiAoc2VlICJPYnRhaW5pbmcgYSB0ZXh0dWFsIGVycm9yIG1lc3NhZ2UiCis8YSBocmVmPSIjZ2V0ZXJyb3JtZXNzYWdlIj5iZWxvdykuPC9hPgorTmVnYXRpdmUgZXJyb3IgY29kZXMgYXJlIGFsc28gcmV0dXJuZWQgYnkgb3RoZXIgZnVuY3Rpb25zLCBhbmQgYXJlIGRvY3VtZW50ZWQKK3dpdGggdGhlbS4gVGhlIGNvZGVzIGFyZSBnaXZlbiBuYW1lcyBpbiB0aGUgaGVhZGVyIGZpbGUuIElmIFVURiBjaGVja2luZyBpcyBpbgorZm9yY2UgYW5kIGFuIGludmFsaWQgVVRGIHN1YmplY3Qgc3RyaW5nIGlzIGRldGVjdGVkLCBvbmUgb2YgYSBudW1iZXIgb2YKK1VURi1zcGVjaWZpYyBuZWdhdGl2ZSBlcnJvciBjb2RlcyBpcyByZXR1cm5lZC4gRGV0YWlscyBhcmUgZ2l2ZW4gaW4gdGhlCiA8YSBocmVmPSJwY3JlMnVuaWNvZGUuaHRtbCI+PGI+cGNyZTJ1bmljb2RlPC9iPjwvYT4KIHBhZ2UuIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSBvdGhlciBlcnJvcnMgdGhhdCBtYXkgYmUgcmV0dXJuZWQgYnkKIDxiPnBjcmUyX21hdGNoKCk8L2I+OgpAQCAtMjQ0NCw4ICsyNTM1LDI5IEBACiAgIFBDUkUyX0VSUk9SX1JFQ1VSU0lPTkxJTUlUCiA8L3ByZT4KIFRoZSBpbnRlcm5hbCByZWN1cnNpb24gbGltaXQgd2FzIHJlYWNoZWQuCis8YSBuYW1lPSJnZXRlcnJvcm1lc3NhZ2UiPjwvYT48L1A+Cis8YnI+PGEgbmFtZT0iU0VDMzEiIGhyZWY9IiNUT0MxIj5PQlRBSU5JTkcgQSBURVhUVUFMIEVSUk9SIE1FU1NBR0U8L2E+PGJyPgorPFA+Cis8Yj5pbnQgcGNyZTJfZ2V0X2Vycm9yX21lc3NhZ2UoaW50IDxpPmVycm9yY29kZTwvaT4sIFBDUkUyX1VDSEFSICo8aT5idWZmZXI8L2k+LDwvYj4KKzxiPiAgUENSRTJfU0laRSA8aT5idWZmbGVuPC9pPik7PC9iPgorPC9QPgorPFA+CitBIHRleHQgbWVzc2FnZSBmb3IgYW4gZXJyb3IgY29kZSBmcm9tIGFueSBQQ1JFMiBmdW5jdGlvbiAoY29tcGlsZSwgbWF0Y2gsIG9yCithdXhpbGlhcnkpIGNhbiBiZSBvYnRhaW5lZCBieSBjYWxsaW5nIDxiPnBjcmUyX2dldF9lcnJvcl9tZXNzYWdlKCk8L2I+LiBUaGUgY29kZQoraXMgcGFzc2VkIGFzIHRoZSBmaXJzdCBhcmd1bWVudCwgd2l0aCB0aGUgcmVtYWluaW5nIHR3byBhcmd1bWVudHMgc3BlY2lmeWluZyBhCitjb2RlIHVuaXQgYnVmZmVyIGFuZCBpdHMgbGVuZ3RoLCBpbnRvIHdoaWNoIHRoZSB0ZXh0IG1lc3NhZ2UgaXMgcGxhY2VkLiBOb3RlCit0aGF0IHRoZSBtZXNzYWdlIGlzIHJldHVybmVkIGluIGNvZGUgdW5pdHMgb2YgdGhlIGFwcHJvcHJpYXRlIHdpZHRoIGZvciB0aGUKK2xpYnJhcnkgdGhhdCBpcyBiZWluZyB1c2VkLgorPC9QPgorPFA+CitUaGUgcmV0dXJuZWQgbWVzc2FnZSBpcyB0ZXJtaW5hdGVkIHdpdGggYSB0cmFpbGluZyB6ZXJvLCBhbmQgdGhlIGZ1bmN0aW9uCityZXR1cm5zIHRoZSBudW1iZXIgb2YgY29kZSB1bml0cyB1c2VkLCBleGNsdWRpbmcgdGhlIHRyYWlsaW5nIHplcm8uIElmIHRoZQorZXJyb3IgbnVtYmVyIGlzIHVua25vd24sIHRoZSBuZWdhdGl2ZSBlcnJvciBjb2RlIFBDUkUyX0VSUk9SX0JBRERBVEEgaXMKK3JldHVybmVkLiBJZiB0aGUgYnVmZmVyIGlzIHRvbyBzbWFsbCwgdGhlIG1lc3NhZ2UgaXMgdHJ1bmNhdGVkIChidXQgc3RpbGwgd2l0aAorYSB0cmFpbGluZyB6ZXJvKSwgYW5kIHRoZSBuZWdhdGl2ZSBlcnJvciBjb2RlIFBDUkUyX0VSUk9SX05PTUVNT1JZIGlzIHJldHVybmVkLgorTm9uZSBvZiB0aGUgbWVzc2FnZXMgYXJlIHZlcnkgbG9uZzsgYSBidWZmZXIgc2l6ZSBvZiAxMjAgY29kZSB1bml0cyBpcyBhbXBsZS4KIDxhIG5hbWU9ImV4dHJhY3RieW51bWJlciI+PC9hPjwvUD4KLTxicj48YSBuYW1lPSJTRUMzMSIgaHJlZj0iI1RPQzEiPkVYVFJBQ1RJTkcgQ0FQVFVSRUQgU1VCU1RSSU5HUyBCWSBOVU1CRVI8L2E+PGJyPgorPGJyPjxhIG5hbWU9IlNFQzMyIiBocmVmPSIjVE9DMSI+RVhUUkFDVElORyBDQVBUVVJFRCBTVUJTVFJJTkdTIEJZIE5VTUJFUjwvYT48YnI+CiA8UD4KIDxiPmludCBwY3JlMl9zdWJzdHJpbmdfbGVuZ3RoX2J5bnVtYmVyKHBjcmUyX21hdGNoX2RhdGEgKjxpPm1hdGNoX2RhdGE8L2k+LDwvYj4KIDxiPiAgdWludDMyX3QgPGk+bnVtYmVyPC9pPiwgUENSRTJfU0laRSAqPGk+bGVuZ3RoPC9pPik7PC9iPgpAQCAtMjU0Miw3ICsyNjU0LDcgQEAKIChhYmMpfChkZWYpIGFuZCB0aGUgc3ViamVjdCBpcyAiZGVmIiwgYW5kIHRoZSBvdmVjdG9yIGNvbnRhaW5zIGF0IGxlYXN0IHR3bwogY2FwdHVyaW5nIHNsb3RzLCBzdWJzdHJpbmcgbnVtYmVyIDEgaXMgdW5zZXQuCiA8L1A+Ci08YnI+PGEgbmFtZT0iU0VDMzIiIGhyZWY9IiNUT0MxIj5FWFRSQUNUSU5HIEEgTElTVCBPRiBBTEwgQ0FQVFVSRUQgU1VCU1RSSU5HUzwvYT48YnI+Cis8YnI+PGEgbmFtZT0iU0VDMzMiIGhyZWY9IiNUT0MxIj5FWFRSQUNUSU5HIEEgTElTVCBPRiBBTEwgQ0FQVFVSRUQgU1VCU1RSSU5HUzwvYT48YnI+CiA8UD4KIDxiPmludCBwY3JlMl9zdWJzdHJpbmdfbGlzdF9nZXQocGNyZTJfbWF0Y2hfZGF0YSAqPGk+bWF0Y2hfZGF0YTwvaT4sPC9iPgogPGI+IiAgUENSRTJfVUNIQVIgKioqPGk+bGlzdHB0cjwvaT4sIFBDUkUyX1NJWkUgKio8aT5sZW5ndGhzcHRyPC9pPik7PC9iPgpAQCAtMjU4MSw3ICsyNjkzLDcgQEAKIGFwcHJvcHJpYXRlIG9mZnNldCBpbiB0aGUgb3ZlY3Rvciwgd2hpY2ggY29udGFpbiBQQ1JFMl9VTlNFVCBmb3IgdW5zZXQKIHN1YnN0cmluZ3MsIG9yIGJ5IGNhbGxpbmcgPGI+cGNyZTJfc3Vic3RyaW5nX2xlbmd0aF9ieW51bWJlcigpPC9iPi4KIDxhIG5hbWU9ImV4dHJhY3RieW5hbWUiPjwvYT48L1A+Ci08YnI+PGEgbmFtZT0iU0VDMzMiIGhyZWY9IiNUT0MxIj5FWFRSQUNUSU5HIENBUFRVUkVEIFNVQlNUUklOR1MgQlkgTkFNRTwvYT48YnI+Cis8YnI+PGEgbmFtZT0iU0VDMzQiIGhyZWY9IiNUT0MxIj5FWFRSQUNUSU5HIENBUFRVUkVEIFNVQlNUUklOR1MgQlkgTkFNRTwvYT48YnI+CiA8UD4KIDxiPmludCBwY3JlMl9zdWJzdHJpbmdfbnVtYmVyX2Zyb21fbmFtZShjb25zdCBwY3JlMl9jb2RlICo8aT5jb2RlPC9pPiw8L2I+CiA8Yj4gIFBDUkUyX1NQVFIgPGk+bmFtZTwvaT4pOzwvYj4KQEAgLTI2NDEsNyArMjc1Myw3IEBACiBudW1iZXJzLiBGb3IgdGhpcyByZWFzb24sIHRoZSB1c2Ugb2YgZGlmZmVyZW50IG5hbWVzIGZvciBzdWJwYXR0ZXJucyBvZiB0aGUKIHNhbWUgbnVtYmVyIGNhdXNlcyBhbiBlcnJvciBhdCBjb21waWxlIHRpbWUuCiA8L1A+Ci08YnI+PGEgbmFtZT0iU0VDMzQiIGhyZWY9IiNUT0MxIj5DUkVBVElORyBBIE5FVyBTVFJJTkcgV0lUSCBTVUJTVElUVVRJT05TPC9hPjxicj4KKzxicj48YSBuYW1lPSJTRUMzNSIgaHJlZj0iI1RPQzEiPkNSRUFUSU5HIEEgTkVXIFNUUklORyBXSVRIIFNVQlNUSVRVVElPTlM8L2E+PGJyPgogPFA+CiA8Yj5pbnQgcGNyZTJfc3Vic3RpdHV0ZShjb25zdCBwY3JlMl9jb2RlICo8aT5jb2RlPC9pPiwgUENSRTJfU1BUUiA8aT5zdWJqZWN0PC9pPiw8L2I+CiA8Yj4gIFBDUkUyX1NJWkUgPGk+bGVuZ3RoPC9pPiwgUENSRTJfU0laRSA8aT5zdGFydG9mZnNldDwvaT4sPC9iPgpAQCAtMjg0NCw5ICsyOTU2LDExIEBACiA8L1A+CiA8UD4KIEFzIGZvciBhbGwgUENSRTIgZXJyb3JzLCBhIHRleHQgbWVzc2FnZSB0aGF0IGRlc2NyaWJlcyB0aGUgZXJyb3IgY2FuIGJlCi1vYnRhaW5lZCBieSBjYWxsaW5nIDxiPnBjcmUyX2dldF9lcnJvcl9tZXNzYWdlKCk8L2I+Lgorb2J0YWluZWQgYnkgY2FsbGluZyB0aGUgPGI+cGNyZTJfZ2V0X2Vycm9yX21lc3NhZ2UoKTwvYj4gZnVuY3Rpb24gKHNlZQorIk9idGFpbmluZyBhIHRleHR1YWwgZXJyb3IgbWVzc2FnZSIKKzxhIGhyZWY9IiNnZXRlcnJvcm1lc3NhZ2UiPmFib3ZlKS48L2E+CiA8L1A+Ci08YnI+PGEgbmFtZT0iU0VDMzUiIGhyZWY9IiNUT0MxIj5EVVBMSUNBVEUgU1VCUEFUVEVSTiBOQU1FUzwvYT48YnI+Cis8YnI+PGEgbmFtZT0iU0VDMzYiIGhyZWY9IiNUT0MxIj5EVVBMSUNBVEUgU1VCUEFUVEVSTiBOQU1FUzwvYT48YnI+CiA8UD4KIDxiPmludCBwY3JlMl9zdWJzdHJpbmdfbmFtZXRhYmxlX3NjYW4oY29uc3QgcGNyZTJfY29kZSAqPGk+Y29kZTwvaT4sPC9iPgogPGI+ICBQQ1JFMl9TUFRSIDxpPm5hbWU8L2k+LCBQQ1JFMl9TUFRSICo8aT5maXJzdDwvaT4sIFBDUkUyX1NQVFIgKjxpPmxhc3Q8L2k+KTs8L2I+CkBAIC0yODkxLDcgKzMwMDUsNyBAQAogcmVsZXZhbnQgZW50cmllcyBmb3IgdGhlIG5hbWUsIHlvdSBjYW4gZXh0cmFjdCBlYWNoIG9mIHRoZWlyIG51bWJlcnMsIGFuZCBoZW5jZQogdGhlIGNhcHR1cmVkIGRhdGEuCiA8L1A+Ci08YnI+PGEgbmFtZT0iU0VDMzYiIGhyZWY9IiNUT0MxIj5GSU5ESU5HIEFMTCBQT1NTSUJMRSBNQVRDSEVTIEFUIE9ORSBQT1NJVElPTjwvYT48YnI+Cis8YnI+PGEgbmFtZT0iU0VDMzciIGhyZWY9IiNUT0MxIj5GSU5ESU5HIEFMTCBQT1NTSUJMRSBNQVRDSEVTIEFUIE9ORSBQT1NJVElPTjwvYT48YnI+CiA8UD4KIFRoZSB0cmFkaXRpb25hbCBtYXRjaGluZyBmdW5jdGlvbiB1c2VzIGEgc2ltaWxhciBhbGdvcml0aG0gdG8gUGVybCwgd2hpY2ggc3RvcHMKIHdoZW4gaXQgZmluZHMgdGhlIGZpcnN0IG1hdGNoIGF0IGEgZ2l2ZW4gcG9pbnQgaW4gdGhlIHN1YmplY3QuIElmIHlvdSB3YW50IHRvCkBAIC0yOTA5LDcgKzMwMjMsNyBAQAogb3RoZXIgYWx0ZXJuYXRpdmVzLiBVbHRpbWF0ZWx5LCB3aGVuIGl0IHJ1bnMgb3V0IG9mIG1hdGNoZXMsCiA8Yj5wY3JlMl9tYXRjaCgpPC9iPiB3aWxsIHlpZWxkIFBDUkUyX0VSUk9SX05PTUFUQ0guCiA8YSBuYW1lPSJkZmFtYXRjaCI+PC9hPjwvUD4KLTxicj48YSBuYW1lPSJTRUMzNyIgaHJlZj0iI1RPQzEiPk1BVENISU5HIEEgUEFUVEVSTjogVEhFIEFMVEVSTkFUSVZFIEZVTkNUSU9OPC9hPjxicj4KKzxicj48YSBuYW1lPSJTRUMzOCIgaHJlZj0iI1RPQzEiPk1BVENISU5HIEEgUEFUVEVSTjogVEhFIEFMVEVSTkFUSVZFIEZVTkNUSU9OPC9hPjxicj4KIDxQPgogPGI+aW50IHBjcmUyX2RmYV9tYXRjaChjb25zdCBwY3JlMl9jb2RlICo8aT5jb2RlPC9pPiwgUENSRTJfU1BUUiA8aT5zdWJqZWN0PC9pPiw8L2I+CiA8Yj4gIFBDUkUyX1NJWkUgPGk+bGVuZ3RoPC9pPiwgUENSRTJfU0laRSA8aT5zdGFydG9mZnNldDwvaT4sPC9iPgpAQCAtMzEwNCwxMyArMzIxOCwxMyBAQAogc2hvdWxkIGNvbnRhaW4gZGF0YSBhYm91dCB0aGUgcHJldmlvdXMgcGFydGlhbCBtYXRjaC4gSWYgYW55IG9mIHRoZXNlIGNoZWNrcwogZmFpbCwgdGhpcyBlcnJvciBpcyBnaXZlbi4KIDwvUD4KLTxicj48YSBuYW1lPSJTRUMzOCIgaHJlZj0iI1RPQzEiPlNFRSBBTFNPPC9hPjxicj4KKzxicj48YSBuYW1lPSJTRUMzOSIgaHJlZj0iI1RPQzEiPlNFRSBBTFNPPC9hPjxicj4KIDxQPgogPGI+cGNyZTJidWlsZDwvYj4oMyksIDxiPnBjcmUyY2FsbG91dDwvYj4oMyksIDxiPnBjcmUyZGVtbygzKTwvYj4sCiA8Yj5wY3JlMm1hdGNoaW5nPC9iPigzKSwgPGI+cGNyZTJwYXJ0aWFsPC9iPigzKSwgPGI+cGNyZTJwb3NpeDwvYj4oMyksCiA8Yj5wY3JlMnNhbXBsZTwvYj4oMyksIDxiPnBjcmUyc3RhY2s8L2I+KDMpLCA8Yj5wY3JlMnVuaWNvZGU8L2I+KDMpLgogPC9QPgotPGJyPjxhIG5hbWU9IlNFQzM5IiBocmVmPSIjVE9DMSI+QVVUSE9SPC9hPjxicj4KKzxicj48YSBuYW1lPSJTRUM0MCIgaHJlZj0iI1RPQzEiPkFVVEhPUjwvYT48YnI+CiA8UD4KIFBoaWxpcCBIYXplbAogPGJyPgpAQCAtMzExOSwxMSArMzIzMywxMSBAQAogQ2FtYnJpZGdlLCBFbmdsYW5kLgogPGJyPgogPC9QPgotPGJyPjxhIG5hbWU9IlNFQzQwIiBocmVmPSIjVE9DMSI+UkVWSVNJT048L2E+PGJyPgorPGJyPjxhIG5hbWU9IlNFQzQxIiBocmVmPSIjVE9DMSI+UkVWSVNJT048L2E+PGJyPgogPFA+Ci1MYXN0IHVwZGF0ZWQ6IDE2IERlY2VtYmVyIDIwMTUKK0xhc3QgdXBkYXRlZDogMTcgSnVuZSAyMDE2CiA8YnI+Ci1Db3B5cmlnaHQgJmNvcHk7IDE5OTctMjAxNSBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZS4KK0NvcHlyaWdodCAmY29weTsgMTk5Ny0yMDE2IFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlLgogPGJyPgogPHA+CiBSZXR1cm4gdG8gdGhlIDxhIGhyZWY9ImluZGV4Lmh0bWwiPlBDUkUyIGluZGV4IHBhZ2U8L2E+LgpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL2h0bWwvcGNyZTJidWlsZC5odG1sIGIvZGlzdDIvZG9jL2h0bWwvcGNyZTJidWlsZC5odG1sCmluZGV4IDFlNWY3MzcuLjZjOGUxZGUgMTAwNjQ0Ci0tLSBhL2Rpc3QyL2RvYy9odG1sL3BjcmUyYnVpbGQuaHRtbAorKysgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMmJ1aWxkLmh0bWwKQEAgLTI3LDE1ICsyNywxNiBAQAogPGxpPjxhIG5hbWU9IlRPQzEyIiBocmVmPSIjU0VDMTIiPkxJTUlUSU5HIFBDUkUyIFJFU09VUkNFIFVTQUdFPC9hPgogPGxpPjxhIG5hbWU9IlRPQzEzIiBocmVmPSIjU0VDMTMiPkNSRUFUSU5HIENIQVJBQ1RFUiBUQUJMRVMgQVQgQlVJTEQgVElNRTwvYT4KIDxsaT48YSBuYW1lPSJUT0MxNCIgaHJlZj0iI1NFQzE0Ij5VU0lORyBFQkNESUMgQ09ERTwvYT4KLTxsaT48YSBuYW1lPSJUT0MxNSIgaHJlZj0iI1NFQzE1Ij5QQ1JFMkdSRVAgT1BUSU9OUyBGT1IgQ09NUFJFU1NFRCBGSUxFIFNVUFBPUlQ8L2E+Ci08bGk+PGEgbmFtZT0iVE9DMTYiIGhyZWY9IiNTRUMxNiI+UENSRTJHUkVQIEJVRkZFUiBTSVpFPC9hPgotPGxpPjxhIG5hbWU9IlRPQzE3IiBocmVmPSIjU0VDMTciPlBDUkUyVEVTVCBPUFRJT04gRk9SIExJQlJFQURMSU5FIFNVUFBPUlQ8L2E+Ci08bGk+PGEgbmFtZT0iVE9DMTgiIGhyZWY9IiNTRUMxOCI+SU5DTFVESU5HIERFQlVHR0lORyBDT0RFPC9hPgotPGxpPjxhIG5hbWU9IlRPQzE5IiBocmVmPSIjU0VDMTkiPkRFQlVHR0lORyBXSVRIIFZBTEdSSU5EIFNVUFBPUlQ8L2E+Ci08bGk+PGEgbmFtZT0iVE9DMjAiIGhyZWY9IiNTRUMyMCI+Q09ERSBDT1ZFUkFHRSBSRVBPUlRJTkc8L2E+Ci08bGk+PGEgbmFtZT0iVE9DMjEiIGhyZWY9IiNTRUMyMSI+U0VFIEFMU088L2E+Ci08bGk+PGEgbmFtZT0iVE9DMjIiIGhyZWY9IiNTRUMyMiI+QVVUSE9SPC9hPgotPGxpPjxhIG5hbWU9IlRPQzIzIiBocmVmPSIjU0VDMjMiPlJFVklTSU9OPC9hPgorPGxpPjxhIG5hbWU9IlRPQzE1IiBocmVmPSIjU0VDMTUiPlBDUkUyR1JFUCBTVVBQT1JUIEZPUiBFWFRFUk5BTCBTQ1JJUFRTPC9hPgorPGxpPjxhIG5hbWU9IlRPQzE2IiBocmVmPSIjU0VDMTYiPlBDUkUyR1JFUCBPUFRJT05TIEZPUiBDT01QUkVTU0VEIEZJTEUgU1VQUE9SVDwvYT4KKzxsaT48YSBuYW1lPSJUT0MxNyIgaHJlZj0iI1NFQzE3Ij5QQ1JFMkdSRVAgQlVGRkVSIFNJWkU8L2E+Cis8bGk+PGEgbmFtZT0iVE9DMTgiIGhyZWY9IiNTRUMxOCI+UENSRTJURVNUIE9QVElPTiBGT1IgTElCUkVBRExJTkUgU1VQUE9SVDwvYT4KKzxsaT48YSBuYW1lPSJUT0MxOSIgaHJlZj0iI1NFQzE5Ij5JTkNMVURJTkcgREVCVUdHSU5HIENPREU8L2E+Cis8bGk+PGEgbmFtZT0iVE9DMjAiIGhyZWY9IiNTRUMyMCI+REVCVUdHSU5HIFdJVEggVkFMR1JJTkQgU1VQUE9SVDwvYT4KKzxsaT48YSBuYW1lPSJUT0MyMSIgaHJlZj0iI1NFQzIxIj5DT0RFIENPVkVSQUdFIFJFUE9SVElORzwvYT4KKzxsaT48YSBuYW1lPSJUT0MyMiIgaHJlZj0iI1NFQzIyIj5TRUUgQUxTTzwvYT4KKzxsaT48YSBuYW1lPSJUT0MyMyIgaHJlZj0iI1NFQzIzIj5BVVRIT1I8L2E+Cis8bGk+PGEgbmFtZT0iVE9DMjQiIGhyZWY9IiNTRUMyNCI+UkVWSVNJT048L2E+CiA8L3VsPgogPGJyPjxhIG5hbWU9IlNFQzEiIGhyZWY9IiNUT0MxIj5CVUlMRElORyBQQ1JFMjwvYT48YnI+CiA8UD4KQEAgLTM0OSw3ICszNTAsMTYgQEAKIGFuZCBlcXVpdmFsZW50IHJ1bi10aW1lIG9wdGlvbnMsIHJlZmVyIHRvIHRoZXNlIGNoYXJhY3RlciB2YWx1ZXMgaW4gYW4gRUJDRElDCiBlbnZpcm9ubWVudC4KIDwvUD4KLTxicj48YSBuYW1lPSJTRUMxNSIgaHJlZj0iI1RPQzEiPlBDUkUyR1JFUCBPUFRJT05TIEZPUiBDT01QUkVTU0VEIEZJTEUgU1VQUE9SVDwvYT48YnI+Cis8YnI+PGEgbmFtZT0iU0VDMTUiIGhyZWY9IiNUT0MxIj5QQ1JFMkdSRVAgU1VQUE9SVCBGT1IgRVhURVJOQUwgU0NSSVBUUzwvYT48YnI+Cis8UD4KK0J5IGRlZmF1bHQsIG9uIG5vbi1XaW5kb3dzIHN5c3RlbXMsIDxiPnBjcmUyZ3JlcDwvYj4gc3VwcG9ydHMgdGhlIHVzZSBvZgorY2FsbG91dHMgd2l0aCBzdHJpbmcgYXJndW1lbnRzIHdpdGhpbiB0aGUgcGF0dGVybnMgaXQgaXMgbWF0Y2hpbmcsIGluIG9yZGVyIHRvCitydW4gZXh0ZXJuYWwgc2NyaXB0cy4gRm9yIGRldGFpbHMsIHNlZSB0aGUKKzxhIGhyZWY9InBjcmUyZ3JlcC5odG1sIj48Yj5wY3JlMmdyZXA8L2I+PC9hPgorZG9jdW1lbnRhdGlvbi4gVGhpcyBzdXBwb3J0IGNhbiBiZSBkaXNhYmxlZCBieSBhZGRpbmcKKy0tZGlzYWJsZS1wY3JlMmdyZXAtY2FsbG91dCB0byB0aGUgPGI+Y29uZmlndXJlPC9iPiBjb21tYW5kLgorPC9QPgorPGJyPjxhIG5hbWU9IlNFQzE2IiBocmVmPSIjVE9DMSI+UENSRTJHUkVQIE9QVElPTlMgRk9SIENPTVBSRVNTRUQgRklMRSBTVVBQT1JUPC9hPjxicj4KIDxQPgogQnkgZGVmYXVsdCwgPGI+cGNyZTJncmVwPC9iPiByZWFkcyBhbGwgZmlsZXMgYXMgcGxhaW4gdGV4dC4gWW91IGNhbiBidWlsZCBpdCBzbwogdGhhdCBpdCByZWNvZ25pemVzIGZpbGVzIHdob3NlIG5hbWVzIGVuZCBpbiA8Yj4uZ3o8L2I+IG9yIDxiPi5iejI8L2I+LCBhbmQgcmVhZHMKQEAgLTM2Miw3ICszNzIsNyBAQAogcmVsZXZhbnQgbGlicmFyaWVzIGFyZSBpbnN0YWxsZWQgb24geW91ciBzeXN0ZW0uIENvbmZpZ3VyYXRpb24gd2lsbCBmYWlsIGlmCiB0aGV5IGFyZSBub3QuCiA8L1A+Ci08YnI+PGEgbmFtZT0iU0VDMTYiIGhyZWY9IiNUT0MxIj5QQ1JFMkdSRVAgQlVGRkVSIFNJWkU8L2E+PGJyPgorPGJyPjxhIG5hbWU9IlNFQzE3IiBocmVmPSIjVE9DMSI+UENSRTJHUkVQIEJVRkZFUiBTSVpFPC9hPjxicj4KIDxQPgogPGI+cGNyZTJncmVwPC9iPiB1c2VzIGFuIGludGVybmFsIGJ1ZmZlciB0byBob2xkIGEgIndpbmRvdyIgb24gdGhlIGZpbGUgaXQgaXMKIHNjYW5uaW5nLCBpbiBvcmRlciB0byBiZSBhYmxlIHRvIG91dHB1dCAiYmVmb3JlIiBhbmQgImFmdGVyIiBsaW5lcyB3aGVuIGl0CkBAIC0zNzUsOSArMzg1LDkgQEAKICAgLS13aXRoLXBjcmUyZ3JlcC1idWZzaXplPTUwSwogPC9wcmU+CiB0byB0aGUgPGI+Y29uZmlndXJlPC9iPiBjb21tYW5kLiBUaGUgY2FsbGVyIG9mIFxmUHBjcmUyZ3JlcFxmUCBjYW4gb3ZlcnJpZGUgdGhpcwotdmFsdWUgYnkgdXNpbmcgLS1idWZmZXItc2l6ZSBvbiB0aGUgY29tbWFuZCBsaW5lLi4KK3ZhbHVlIGJ5IHVzaW5nIC0tYnVmZmVyLXNpemUgb24gdGhlIGNvbW1hbmQgbGluZS4KIDwvUD4KLTxicj48YSBuYW1lPSJTRUMxNyIgaHJlZj0iI1RPQzEiPlBDUkUyVEVTVCBPUFRJT04gRk9SIExJQlJFQURMSU5FIFNVUFBPUlQ8L2E+PGJyPgorPGJyPjxhIG5hbWU9IlNFQzE4IiBocmVmPSIjVE9DMSI+UENSRTJURVNUIE9QVElPTiBGT1IgTElCUkVBRExJTkUgU1VQUE9SVDwvYT48YnI+CiA8UD4KIElmIHlvdSBhZGQgb25lIG9mCiA8cHJlPgpAQCAtNDExLDcgKzQyMSw3IEBACiA8L3ByZT4KIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgPGI+Y29uZmlndXJlPC9iPiBjb21tYW5kLgogPC9QPgotPGJyPjxhIG5hbWU9IlNFQzE4IiBocmVmPSIjVE9DMSI+SU5DTFVESU5HIERFQlVHR0lORyBDT0RFPC9hPjxicj4KKzxicj48YSBuYW1lPSJTRUMxOSIgaHJlZj0iI1RPQzEiPklOQ0xVRElORyBERUJVR0dJTkcgQ09ERTwvYT48YnI+CiA8UD4KIElmIHlvdSBhZGQKIDxwcmU+CkBAIC00MjAsNyArNDMwLDcgQEAKIHRvIHRoZSA8Yj5jb25maWd1cmU8L2I+IGNvbW1hbmQsIGFkZGl0aW9uYWwgZGVidWdnaW5nIGNvZGUgaXMgaW5jbHVkZWQgaW4gdGhlCiBidWlsZC4gVGhpcyBmZWF0dXJlIGlzIGludGVuZGVkIGZvciB1c2UgYnkgdGhlIFBDUkUyIG1haW50YWluZXJzLgogPC9QPgotPGJyPjxhIG5hbWU9IlNFQzE5IiBocmVmPSIjVE9DMSI+REVCVUdHSU5HIFdJVEggVkFMR1JJTkQgU1VQUE9SVDwvYT48YnI+Cis8YnI+PGEgbmFtZT0iU0VDMjAiIGhyZWY9IiNUT0MxIj5ERUJVR0dJTkcgV0lUSCBWQUxHUklORCBTVVBQT1JUPC9hPjxicj4KIDxQPgogSWYgeW91IGFkZAogPHByZT4KQEAgLTQzMCw3ICs0NDAsNyBAQAogY2VydGFpbiBtZW1vcnkgcmVnaW9ucyBhcyB1bmFkZHJlc3NhYmxlLiBUaGlzIGFsbG93cyBpdCB0byBkZXRlY3QgaW52YWxpZAogbWVtb3J5IGFjY2Vzc2VzLCBhbmQgaXMgbW9zdGx5IHVzZWZ1bCBmb3IgZGVidWdnaW5nIFBDUkUyIGl0c2VsZi4KIDwvUD4KLTxicj48YSBuYW1lPSJTRUMyMCIgaHJlZj0iI1RPQzEiPkNPREUgQ09WRVJBR0UgUkVQT1JUSU5HPC9hPjxicj4KKzxicj48YSBuYW1lPSJTRUMyMSIgaHJlZj0iI1RPQzEiPkNPREUgQ09WRVJBR0UgUkVQT1JUSU5HPC9hPjxicj4KIDxQPgogSWYgeW91ciBDIGNvbXBpbGVyIGlzIGdjYywgeW91IGNhbiBidWlsZCBhIHZlcnNpb24gb2YgUENSRTIgdGhhdCBjYW4gZ2VuZXJhdGUgYQogY29kZSBjb3ZlcmFnZSByZXBvcnQgZm9yIGl0cyB0ZXN0IHN1aXRlLiBUbyBlbmFibGUgdGhpcywgeW91IG11c3QgaW5zdGFsbApAQCAtNDg3LDExICs0OTcsMTEgQEAKIGluZm9ybWF0aW9uIGFib3V0IGNvZGUgY292ZXJhZ2UsIHNlZSB0aGUgPGI+Z2NvdjwvYj4gYW5kIDxiPmxjb3Y8L2I+CiBkb2N1bWVudGF0aW9uLgogPC9QPgotPGJyPjxhIG5hbWU9IlNFQzIxIiBocmVmPSIjVE9DMSI+U0VFIEFMU088L2E+PGJyPgorPGJyPjxhIG5hbWU9IlNFQzIyIiBocmVmPSIjVE9DMSI+U0VFIEFMU088L2E+PGJyPgogPFA+CiA8Yj5wY3JlMmFwaTwvYj4oMyksIDxiPnBjcmUyLWNvbmZpZzwvYj4oMykuCiA8L1A+Ci08YnI+PGEgbmFtZT0iU0VDMjIiIGhyZWY9IiNUT0MxIj5BVVRIT1I8L2E+PGJyPgorPGJyPjxhIG5hbWU9IlNFQzIzIiBocmVmPSIjVE9DMSI+QVVUSE9SPC9hPjxicj4KIDxQPgogUGhpbGlwIEhhemVsCiA8YnI+CkBAIC01MDAsMTEgKzUxMCwxMSBAQAogQ2FtYnJpZGdlLCBFbmdsYW5kLgogPGJyPgogPC9QPgotPGJyPjxhIG5hbWU9IlNFQzIzIiBocmVmPSIjVE9DMSI+UkVWSVNJT048L2E+PGJyPgorPGJyPjxhIG5hbWU9IlNFQzI0IiBocmVmPSIjVE9DMSI+UkVWSVNJT048L2E+PGJyPgogPFA+Ci1MYXN0IHVwZGF0ZWQ6IDE2IE9jdG9iZXIgMjAxNQorTGFzdCB1cGRhdGVkOiAwMSBBcHJpbCAyMDE2CiA8YnI+Ci1Db3B5cmlnaHQgJmNvcHk7IDE5OTctMjAxNSBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZS4KK0NvcHlyaWdodCAmY29weTsgMTk5Ny0yMDE2IFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlLgogPGJyPgogPHA+CiBSZXR1cm4gdG8gdGhlIDxhIGhyZWY9ImluZGV4Lmh0bWwiPlBDUkUyIGluZGV4IHBhZ2U8L2E+LgpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL2h0bWwvcGNyZTJkZW1vLmh0bWwgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMmRlbW8uaHRtbAppbmRleCA1OTE5MTE3Li5kNjRlMTZiIDEwMDY0NAotLS0gYS9kaXN0Mi9kb2MvaHRtbC9wY3JlMmRlbW8uaHRtbAorKysgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMmRlbW8uaHRtbApAQCAtMjAsMjggKzIwLDMxIEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKiBUaGlzIGlzIGEgZGVtb25zdHJhdGlvbiBwcm9ncmFtIHRvIGlsbHVzdHJhdGUgYSBzdHJhaWdodGZvcndhcmQgd2F5IG9mCi1jYWxsaW5nIHRoZSBQQ1JFMiByZWd1bGFyIGV4cHJlc3Npb24gbGlicmFyeSBmcm9tIGEgQyBwcm9ncmFtLiBTZWUgdGhlCit1c2luZyB0aGUgUENSRTIgcmVndWxhciBleHByZXNzaW9uIGxpYnJhcnkgZnJvbSBhIEMgcHJvZ3JhbS4gU2VlIHRoZQogcGNyZTJzYW1wbGUgZG9jdW1lbnRhdGlvbiBmb3IgYSBzaG9ydCBkaXNjdXNzaW9uICgibWFuIHBjcmUyc2FtcGxlIiBpZiB5b3UgaGF2ZQogdGhlIFBDUkUyIG1hbiBwYWdlcyBpbnN0YWxsZWQpLiBQQ1JFMiBpcyBhIHJldmlzZWQgQVBJIGZvciB0aGUgbGlicmFyeSwgYW5kIGlzCiBpbmNvbXBhdGlibGUgd2l0aCB0aGUgb3JpZ2luYWwgUENSRSBBUEkuCiAKIFRoZXJlIGFyZSBhY3R1YWxseSB0aHJlZSBsaWJyYXJpZXMsIGVhY2ggc3VwcG9ydGluZyBhIGRpZmZlcmVudCBjb2RlIHVuaXQKLXdpZHRoLiBUaGlzIGRlbW9uc3RyYXRpb24gcHJvZ3JhbSB1c2VzIHRoZSA4LWJpdCBsaWJyYXJ5Lgord2lkdGguIFRoaXMgZGVtb25zdHJhdGlvbiBwcm9ncmFtIHVzZXMgdGhlIDgtYml0IGxpYnJhcnkuIFRoZSBkZWZhdWx0IGlzIHRvCitwcm9jZXNzIGVhY2ggY29kZSB1bml0IGFzIGEgc2VwYXJhdGUgY2hhcmFjdGVyLCBidXQgaWYgdGhlIHBhdHRlcm4gYmVnaW5zIHdpdGgKKyIoKlVURikiLCBib3RoIGl0IGFuZCB0aGUgc3ViamVjdCBhcmUgdHJlYXRlZCBhcyBVVEYtOCBzdHJpbmdzLCB3aGVyZQorY2hhcmFjdGVycyBtYXkgb2NjdXB5IG11bHRpcGxlIGNvZGUgdW5pdHMuCiAKIEluIFVuaXgtbGlrZSBlbnZpcm9ubWVudHMsIGlmIFBDUkUyIGlzIGluc3RhbGxlZCBpbiB5b3VyIHN0YW5kYXJkIHN5c3RlbQogbGlicmFyaWVzLCB5b3Ugc2hvdWxkIGJlIGFibGUgdG8gY29tcGlsZSB0aGlzIHByb2dyYW0gdXNpbmcgdGhpcyBjb21tYW5kOgogCi1nY2MgLVdhbGwgcGNyZTJkZW1vLmMgLWxwY3JlMi04IC1vIHBjcmUyZGVtbworY2MgLVdhbGwgcGNyZTJkZW1vLmMgLWxwY3JlMi04IC1vIHBjcmUyZGVtbwogCiBJZiBQQ1JFMiBpcyBub3QgaW5zdGFsbGVkIGluIGEgc3RhbmRhcmQgcGxhY2UsIGl0IGlzIGxpa2VseSB0byBiZSBpbnN0YWxsZWQKIHdpdGggc3VwcG9ydCBmb3IgdGhlIHBrZy1jb25maWcgbWVjaGFuaXNtLiBJZiB5b3UgaGF2ZSBwa2ctY29uZmlnLCB5b3UgY2FuCiBjb21waWxlIHRoaXMgcHJvZ3JhbSB1c2luZyB0aGlzIGNvbW1hbmQ6CiAKLWdjYyAtV2FsbCBwY3JlMmRlbW8uYyBgcGtnLWNvbmZpZyAtLWNmbGFncyAtLWxpYnMgbGlicGNyZTItOGAgLW8gcGNyZTJkZW1vCitjYyAtV2FsbCBwY3JlMmRlbW8uYyBgcGtnLWNvbmZpZyAtLWNmbGFncyAtLWxpYnMgbGlicGNyZTItOGAgLW8gcGNyZTJkZW1vCiAKLUlmIHlvdSBkbyBub3QgaGF2ZSBwa2ctY29uZmlnLCB5b3UgbWF5IGhhdmUgdG8gdXNlIHRoaXM6CitJZiB5b3UgZG8gbm90IGhhdmUgcGtnLWNvbmZpZywgeW91IG1heSBoYXZlIHRvIHVzZSBzb21ldGhpbmcgbGlrZSB0aGlzOgogCi1nY2MgLVdhbGwgcGNyZTJkZW1vLmMgLUkvdXNyL2xvY2FsL2luY2x1ZGUgLUwvdXNyL2xvY2FsL2xpYiBcCitjYyAtV2FsbCBwY3JlMmRlbW8uYyAtSS91c3IvbG9jYWwvaW5jbHVkZSAtTC91c3IvbG9jYWwvbGliIFwKICAgLVIvdXNyL2xvY2FsL2xpYiAtbHBjcmUyLTggLW8gcGNyZTJkZW1vCiAKIFJlcGxhY2UgIi91c3IvbG9jYWwvaW5jbHVkZSIgYW5kICIvdXNyL2xvY2FsL2xpYiIgd2l0aCB3aGVyZXZlciB0aGUgaW5jbHVkZSBhbmQKQEAgLTU2LDkgKzU5LDE0IEBACiAKIC8qICNkZWZpbmUgUENSRTJfU1RBVElDICovCiAKLS8qIFRoaXMgbWFjcm8gbXVzdCBiZSBkZWZpbmVkIGJlZm9yZSBpbmNsdWRpbmcgcGNyZTIuaC4gRm9yIGEgcHJvZ3JhbSB0aGF0IHVzZXMKLW9ubHkgb25lIGNvZGUgdW5pdCB3aWR0aCwgaXQgbWFrZXMgaXQgcG9zc2libGUgdG8gdXNlIGdlbmVyaWMgZnVuY3Rpb24gbmFtZXMKLXN1Y2ggYXMgcGNyZTJfY29tcGlsZSgpLiAqLworLyogVGhlIFBDUkUyX0NPREVfVU5JVF9XSURUSCBtYWNybyBtdXN0IGJlIGRlZmluZWQgYmVmb3JlIGluY2x1ZGluZyBwY3JlMi5oLgorRm9yIGEgcHJvZ3JhbSB0aGF0IHVzZXMgb25seSBvbmUgY29kZSB1bml0IHdpZHRoLCBzZXR0aW5nIGl0IHRvIDgsIDE2LCBvciAzMgorbWFrZXMgaXQgcG9zc2libGUgdG8gdXNlIGdlbmVyaWMgZnVuY3Rpb24gbmFtZXMgc3VjaCBhcyBwY3JlMl9jb21waWxlKCkuIE5vdGUKK3RoYXQganVzdCBjaGFuZ2luZyA4IHRvIDE2IChmb3IgZXhhbXBsZSkgaXMgbm90IHN1ZmZpY2llbnQgdG8gY29udmVydCB0aGlzCitwcm9ncmFtIHRvIHByb2Nlc3MgMTYtYml0IGNoYXJhY3RlcnMuIEV2ZW4gaW4gYSBmdWxseSAxNi1iaXQgZW52aXJvbm1lbnQsIHdoZXJlCitzdHJpbmctaGFuZGxpbmcgZnVuY3Rpb25zIHN1Y2ggYXMgc3RyY21wKCkgYW5kIHByaW50ZigpIHdvcmsgd2l0aCAxNi1iaXQKK2NoYXJhY3RlcnMsIHRoZSBjb2RlIGZvciBoYW5kbGluZyB0aGUgdGFibGUgb2YgbmFtZWQgc3Vic3RyaW5ncyB3aWxsIHN0aWxsIG5lZWQKK3RvIGJlIG1vZGlmaWVkLiAqLwogCiAjZGVmaW5lIFBDUkUyX0NPREVfVU5JVF9XSURUSCA4CiAKQEAgLTc5LDE5ICs4NywxOSBAQAogewogcGNyZTJfY29kZSAqcmU7CiBQQ1JFMl9TUFRSIHBhdHRlcm47ICAgICAvKiBQQ1JFMl9TUFRSIGlzIGEgcG9pbnRlciB0byB1bnNpZ25lZCBjb2RlIHVuaXRzIG9mICovCi1QQ1JFMl9TUFRSIHN1YmplY3Q7ICAgICAvKiB0aGUgYXBwcm9wcmlhdGUgd2lkdGggKDgsIDE2LCBvciAzMiBiaXRzKS4gKi8KK1BDUkUyX1NQVFIgc3ViamVjdDsgICAgIC8qIHRoZSBhcHByb3ByaWF0ZSB3aWR0aCAoaW4gdGhpcyBjYXNlLCA4IGJpdHMpLiAqLwogUENSRTJfU1BUUiBuYW1lX3RhYmxlOwogCiBpbnQgY3JsZl9pc19uZXdsaW5lOwogaW50IGVycm9ybnVtYmVyOwogaW50IGZpbmRfYWxsOwogaW50IGk7Ci1pbnQgbmFtZWNvdW50OwotaW50IG5hbWVfZW50cnlfc2l6ZTsKIGludCByYzsKIGludCB1dGY4OwogCiB1aW50MzJfdCBvcHRpb25fYml0czsKK3VpbnQzMl90IG5hbWVjb3VudDsKK3VpbnQzMl90IG5hbWVfZW50cnlfc2l6ZTsKIHVpbnQzMl90IG5ld2xpbmU7CiAKIFBDUkUyX1NJWkUgZXJyb3JvZmZzZXQ7CkBAIC0xMDYsMTUgKzExNCwxOSBAQAogKiBGaXJzdCwgc29ydCBvdXQgdGhlIGNvbW1hbmQgbGluZS4gVGhlcmUgaXMgb25seSBvbmUgcG9zc2libGUgb3B0aW9uIGF0ICAqCiAqIHRoZSBtb21lbnQsICItZyIgdG8gcmVxdWVzdCByZXBlYXRlZCBtYXRjaGluZyB0byBmaW5kIGFsbCBvY2N1cnJlbmNlcywgICoKICogbGlrZSBQZXJsJ3MgL2cgb3B0aW9uLiBXZSBzZXQgdGhlIHZhcmlhYmxlIGZpbmRfYWxsIHRvIGEgbm9uLXplcm8gdmFsdWUgKgotKiBpZiB0aGUgLWcgb3B0aW9uIGlzIHByZXNlbnQuIEFwYXJ0IGZyb20gdGhhdCwgdGhlcmUgbXVzdCBiZSBleGFjdGx5IHR3byAqCi0qIGFyZ3VtZW50cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogaWYgdGhlIC1nIG9wdGlvbiBpcyBwcmVzZW50LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIGZpbmRfYWxsID0gMDsKIGZvciAoaSA9IDE7IGkgJmx0OyBhcmdjOyBpKyspCiAgIHsKICAgaWYgKHN0cmNtcChhcmd2W2ldLCAiLWciKSA9PSAwKSBmaW5kX2FsbCA9IDE7Ci0gICAgZWxzZSBicmVhazsKKyAgZWxzZSBpZiAoYXJndltpXVswXSA9PSAnLScpCisgICAgeworICAgIHByaW50ZigiVW5yZWNvZ25pc2VkIG9wdGlvbiAlc1xuIiwgYXJndltpXSk7CisgICAgcmV0dXJuIDE7CisgICAgfQorICBlbHNlIGJyZWFrOwogICB9CiAKIC8qIEFmdGVyIHRoZSBvcHRpb25zLCB3ZSByZXF1aXJlIGV4YWN0bHkgdHdvIGFyZ3VtZW50cywgd2hpY2ggYXJlIHRoZSBwYXR0ZXJuLApAQCAtMTIyLDcgKzEzNCw3IEBACiAKIGlmIChhcmdjIC0gaSAhPSAyKQogICB7Ci0gIHByaW50ZigiVHdvIGFyZ3VtZW50cyByZXF1aXJlZDogYSByZWdleCBhbmQgYSBzdWJqZWN0IHN0cmluZ1xuIik7CisgIHByaW50ZigiRXhhY3RseSB0d28gYXJndW1lbnRzIHJlcXVpcmVkOiBhIHJlZ2V4IGFuZCBhIHN1YmplY3Qgc3RyaW5nXG4iKTsKICAgcmV0dXJuIDE7CiAgIH0KIApAQCAtMjAxLDcgKzIxMyw3IEBACiBzdG9yZWQuICovCiAKIG92ZWN0b3IgPSBwY3JlMl9nZXRfb3ZlY3Rvcl9wb2ludGVyKG1hdGNoX2RhdGEpOwotcHJpbnRmKCJcbk1hdGNoIHN1Y2NlZWRlZCBhdCBvZmZzZXQgJWRcbiIsIChpbnQpb3ZlY3RvclswXSk7CitwcmludGYoIk1hdGNoIHN1Y2NlZWRlZCBhdCBvZmZzZXQgJWRcbiIsIChpbnQpb3ZlY3RvclswXSk7CiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTI0Miw3ICsyNTQsNyBAQAogICBQQ1JFMl9JTkZPX05BTUVDT1VOVCwgLyogZ2V0IHRoZSBudW1iZXIgb2YgbmFtZWQgc3Vic3RyaW5ncyAqLwogICAmYW1wO25hbWVjb3VudCk7ICAgICAgICAgIC8qIHdoZXJlIHRvIHB1dCB0aGUgYW5zd2VyICovCiAKLWlmIChuYW1lY291bnQgJmx0Oz0gMCkgcHJpbnRmKCJObyBuYW1lZCBzdWJzdHJpbmdzXG4iKTsgZWxzZQoraWYgKG5hbWVjb3VudCA9PSAwKSBwcmludGYoIk5vIG5hbWVkIHN1YnN0cmluZ3NcbiIpOyBlbHNlCiAgIHsKICAgUENSRTJfU1BUUiB0YWJwdHI7CiAgIHByaW50ZigiTmFtZWQgc3Vic3RyaW5nc1xuIik7CkBAIC0zMzAsOCArMzQyLDggQEAKIAogZm9yICg7OykKICAgewotICB1aW50MzJfdCBvcHRpb25zID0gMDsgICAgICAgICAgICAgICAgICAgIC8qIE5vcm1hbGx5IG5vIG9wdGlvbnMgKi8KLSAgUENSRTJfU0laRSBzdGFydF9vZmZzZXQgPSBvdmVjdG9yWzFdOyAgLyogU3RhcnQgYXQgZW5kIG9mIHByZXZpb3VzIG1hdGNoICovCisgIHVpbnQzMl90IG9wdGlvbnMgPSAwOyAgICAgICAgICAgICAgICAgICAvKiBOb3JtYWxseSBubyBvcHRpb25zICovCisgIFBDUkUyX1NJWkUgc3RhcnRfb2Zmc2V0ID0gb3ZlY3RvclsxXTsgICAvKiBTdGFydCBhdCBlbmQgb2YgcHJldmlvdXMgbWF0Y2ggKi8KIAogICAvKiBJZiB0aGUgcHJldmlvdXMgbWF0Y2ggd2FzIGZvciBhbiBlbXB0eSBzdHJpbmcsIHdlIGFyZSBmaW5pc2hlZCBpZiB3ZSBhcmUKICAgYXQgdGhlIGVuZCBvZiB0aGUgc3ViamVjdC4gT3RoZXJ3aXNlLCBhcnJhbmdlIHRvIHJ1biBhbm90aGVyIG1hdGNoIGF0IHRoZQpAQCAtMzcxLDcgKzM4Myw3IEBACiAgICAgewogICAgIGlmIChvcHRpb25zID09IDApIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgLyogQWxsIG1hdGNoZXMgZm91bmQgKi8KICAgICBvdmVjdG9yWzFdID0gc3RhcnRfb2Zmc2V0ICsgMTsgICAgICAgICAgICAgIC8qIEFkdmFuY2Ugb25lIGNvZGUgdW5pdCAqLwotICAgIGlmIChjcmxmX2lzX25ld2xpbmUgJmFtcDsmYW1wOyAgICAgICAgICAgICAgICAgICAgICAvKiBJZiBDUkxGIGlzIG5ld2xpbmUgJmFtcDsgKi8KKyAgICBpZiAoY3JsZl9pc19uZXdsaW5lICZhbXA7JmFtcDsgICAgICAgICAgICAgICAgICAgICAgLyogSWYgQ1JMRiBpcyBhIG5ld2xpbmUgJmFtcDsgKi8KICAgICAgICAgc3RhcnRfb2Zmc2V0ICZsdDsgc3ViamVjdF9sZW5ndGggLSAxICZhbXA7JmFtcDsgICAgLyogd2UgYXJlIGF0IENSTEYsICovCiAgICAgICAgIHN1YmplY3Rbc3RhcnRfb2Zmc2V0XSA9PSAnXHInICZhbXA7JmFtcDsKICAgICAgICAgc3ViamVjdFtzdGFydF9vZmZzZXQgKyAxXSA9PSAnXG4nKQpAQCAtNDE3LDcgKzQyOSw3IEBACiAgICAgcHJpbnRmKCIlMmQ6ICUuKnNcbiIsIGksIChpbnQpc3Vic3RyaW5nX2xlbmd0aCwgKGNoYXIgKilzdWJzdHJpbmdfc3RhcnQpOwogICAgIH0KIAotICBpZiAobmFtZWNvdW50ICZsdDs9IDApIHByaW50ZigiTm8gbmFtZWQgc3Vic3RyaW5nc1xuIik7IGVsc2UKKyAgaWYgKG5hbWVjb3VudCA9PSAwKSBwcmludGYoIk5vIG5hbWVkIHN1YnN0cmluZ3NcbiIpOyBlbHNlCiAgICAgewogICAgIFBDUkUyX1NQVFIgdGFicHRyID0gbmFtZV90YWJsZTsKICAgICBwcmludGYoIk5hbWVkIHN1YnN0cmluZ3NcbiIpOwpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL2h0bWwvcGNyZTJncmVwLmh0bWwgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMmdyZXAuaHRtbAppbmRleCBkY2ZiOTZmLi5kMDJkMzY1IDEwMDY0NAotLS0gYS9kaXN0Mi9kb2MvaHRtbC9wY3JlMmdyZXAuaHRtbAorKysgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMmdyZXAuaHRtbApAQCAtMjIsMTEgKzIyLDEyIEBACiA8bGk+PGEgbmFtZT0iVE9DNyIgaHJlZj0iI1NFQzciPk5FV0xJTkVTPC9hPgogPGxpPjxhIG5hbWU9IlRPQzgiIGhyZWY9IiNTRUM4Ij5PUFRJT05TIENPTVBBVElCSUxJVFk8L2E+CiA8bGk+PGEgbmFtZT0iVE9DOSIgaHJlZj0iI1NFQzkiPk9QVElPTlMgV0lUSCBEQVRBPC9hPgotPGxpPjxhIG5hbWU9IlRPQzEwIiBocmVmPSIjU0VDMTAiPk1BVENISU5HIEVSUk9SUzwvYT4KLTxsaT48YSBuYW1lPSJUT0MxMSIgaHJlZj0iI1NFQzExIj5ESUFHTk9TVElDUzwvYT4KLTxsaT48YSBuYW1lPSJUT0MxMiIgaHJlZj0iI1NFQzEyIj5TRUUgQUxTTzwvYT4KLTxsaT48YSBuYW1lPSJUT0MxMyIgaHJlZj0iI1NFQzEzIj5BVVRIT1I8L2E+Ci08bGk+PGEgbmFtZT0iVE9DMTQiIGhyZWY9IiNTRUMxNCI+UkVWSVNJT048L2E+Cis8bGk+PGEgbmFtZT0iVE9DMTAiIGhyZWY9IiNTRUMxMCI+Q0FMTElORyBFWFRFUk5BTCBTQ1JJUFRTPC9hPgorPGxpPjxhIG5hbWU9IlRPQzExIiBocmVmPSIjU0VDMTEiPk1BVENISU5HIEVSUk9SUzwvYT4KKzxsaT48YSBuYW1lPSJUT0MxMiIgaHJlZj0iI1NFQzEyIj5ESUFHTk9TVElDUzwvYT4KKzxsaT48YSBuYW1lPSJUT0MxMyIgaHJlZj0iI1NFQzEzIj5TRUUgQUxTTzwvYT4KKzxsaT48YSBuYW1lPSJUT0MxNCIgaHJlZj0iI1NFQzE0Ij5BVVRIT1I8L2E+Cis8bGk+PGEgbmFtZT0iVE9DMTUiIGhyZWY9IiNTRUMxNSI+UkVWSVNJT048L2E+CiA8L3VsPgogPGJyPjxhIG5hbWU9IlNFQzEiIGhyZWY9IiNUT0MxIj5TWU5PUFNJUzwvYT48YnI+CiA8UD4KQEAgLTUxMCwxMCArNTExLDE2IEBACiBzZXF1ZW5jZSB0aGUgb3V0cHV0IGVuZHMgYXQgdGhlIGVuZCBvZiB0aGF0IGxpbmUuCiA8YnI+CiA8YnI+Ci1XaGVuIHRoaXMgb3B0aW9uIGlzIHNldCwgdGhlIFBDUkUyIGxpYnJhcnkgaXMgY2FsbGVkIGluICJtdWx0aWxpbmUiIG1vZGUuCi1Ib3dldmVyLCA8Yj5wY3JlMmdyZXA8L2I+IHN0aWxsIHByb2Nlc3NlcyB0aGUgaW5wdXQgbGluZSBieSBsaW5lLiBUaGUgZGlmZmVyZW5jZQotaXMgdGhhdCBhIG1hdGNoZWQgc3RyaW5nIG1heSBleHRlbmQgcGFzdCB0aGUgZW5kIG9mIGEgbGluZSBhbmQgY29udGludWUgb24KLW9uZSBvciBtb3JlIHN1YnNlcXVlbnQgbGluZXMuIFRoZSBuZXdsaW5lIHNlcXVlbmNlIG11c3QgYmUgbWF0Y2hlZCBhcyBwYXJ0IG9mCitXaGVuIHRoaXMgb3B0aW9uIGlzIHNldCwgdGhlIFBDUkUyIGxpYnJhcnkgaXMgY2FsbGVkIGluICJtdWx0aWxpbmUiIG1vZGUuIFRoaXMKK2FsbG93cyBhIG1hdGNoZWQgc3RyaW5nIHRvIGV4dGVuZCBwYXN0IHRoZSBlbmQgb2YgYSBsaW5lIGFuZCBjb250aW51ZSBvbiBvbmUgb3IKK21vcmUgc3Vic2VxdWVudCBsaW5lcy4gSG93ZXZlciwgPGI+cGNyZTJncmVwPC9iPiBzdGlsbCBwcm9jZXNzZXMgdGhlIGlucHV0IGxpbmUKK2J5IGxpbmUuIE9uY2UgYSBtYXRjaCBoYXMgYmVlbiBoYW5kbGVkLCBzY2FubmluZyByZXN0YXJ0cyBhdCB0aGUgYmVnaW5uaW5nIG9mCit0aGUgbmV4dCBsaW5lLCBqdXN0IGFzIGl0IGRvZXMgd2hlbiA8Yj4tTTwvYj4gaXMgbm90IHByZXNlbnQuIFRoaXMgbWVhbnMgdGhhdCBpdAoraXMgcG9zc2libGUgZm9yIHRoZSBzZWNvbmQgb3Igc3Vic2VxdWVudCBsaW5lcyBpbiBhIG11bHRpbGluZSBtYXRjaCB0byBiZQorb3V0cHV0IGFnYWluIGFzIHBhcnQgb2YgYW5vdGhlciBtYXRjaC4KKzxicj4KKzxicj4KK1RoZSBuZXdsaW5lIHNlcXVlbmNlIHRoYXQgc2VwYXJhdGVzIG11bHRpcGxlIGxpbmVzIG11c3QgYmUgbWF0Y2hlZCBhcyBwYXJ0IG9mCiB0aGUgcGF0dGVybi4gRm9yIGV4YW1wbGUsIHRvIGZpbmQgdGhlIHBocmFzZSAicmVndWxhciBleHByZXNzaW9uIiBpbiBhIGZpbGUKIHdoZXJlICJyZWd1bGFyIiBtaWdodCBiZSBhdCB0aGUgZW5kIG9mIGEgbGluZSBhbmQgImV4cHJlc3Npb24iIGF0IHRoZSBzdGFydCBvZgogdGhlIG5leHQgbGluZSwgeW91IGNvdWxkIHVzZSB0aGlzIGNvbW1hbmQ6CkBAIC03MzUsNyArNzQyLDU3IEBACiBvcHRpb25zIGRvZXMgaGF2ZSBkYXRhLCBpdCBtdXN0IGJlIGdpdmVuIGluIHRoZSBmaXJzdCBmb3JtLCB1c2luZyBhbiBlcXVhbHMKIGNoYXJhY3Rlci4gT3RoZXJ3aXNlIDxiPnBjcmUyZ3JlcDwvYj4gd2lsbCBhc3N1bWUgdGhhdCBpdCBoYXMgbm8gZGF0YS4KIDwvUD4KLTxicj48YSBuYW1lPSJTRUMxMCIgaHJlZj0iI1RPQzEiPk1BVENISU5HIEVSUk9SUzwvYT48YnI+Cis8YnI+PGEgbmFtZT0iU0VDMTAiIGhyZWY9IiNUT0MxIj5DQUxMSU5HIEVYVEVSTkFMIFNDUklQVFM8L2E+PGJyPgorPFA+CitPbiBub24tV2luZG93cyBzeXN0ZW1zLCA8Yj5wY3JlMmdyZXA8L2I+IGhhcywgYnkgZGVmYXVsdCwgc3VwcG9ydCBmb3IgY2FsbGluZworZXh0ZXJuYWwgcHJvZ3JhbXMgb3Igc2NyaXB0cyBkdXJpbmcgbWF0Y2hpbmcgYnkgbWFraW5nIHVzZSBvZiBQQ1JFMidzIGNhbGxvdXQKK2ZhY2lsaXR5LiBIb3dldmVyLCB0aGlzIHN1cHBvcnQgY2FuIGJlIGRpc2FibGVkIHdoZW4gPGI+cGNyZTJncmVwPC9iPiBpcyBidWlsdC4KK1lvdSBjYW4gZmluZCBvdXQgd2hldGhlciB5b3VyIGJpbmFyeSBoYXMgc3VwcG9ydCBmb3IgY2FsbG91dHMgYnkgcnVubmluZyBpdAord2l0aCB0aGUgPGI+LS1oZWxwPC9iPiBvcHRpb24uIElmIHRoZSBzdXBwb3J0IGlzIG5vdCBlbmFibGVkLCBhbGwgY2FsbG91dHMgaW4KK3BhdHRlcm5zIGFyZSBpZ25vcmVkIGJ5IDxiPnBjcmUyZ3JlcDwvYj4uCis8L1A+Cis8UD4KK0EgY2FsbG91dCBpbiBhIFBDUkUyIHBhdHRlcm4gaXMgb2YgdGhlIGZvcm0gKD9DJiM2MDthcmcmIzYyOykgd2hlcmUgdGhlIGFyZ3VtZW50IGlzCitlaXRoZXIgYSBudW1iZXIgb3IgYSBxdW90ZWQgc3RyaW5nIChzZWUgdGhlCis8YSBocmVmPSJwY3JlMmNhbGxvdXQuaHRtbCI+PGI+cGNyZTJjYWxsb3V0PC9iPjwvYT4KK2RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMpLiBOdW1iZXJlZCBjYWxsb3V0cyBhcmUgaWdub3JlZCBieSA8Yj5wY3JlMmdyZXA8L2I+LgorU3RyaW5nIGFyZ3VtZW50cyBhcmUgcGFyc2VkIGFzIGEgbGlzdCBvZiBzdWJzdHJpbmdzIHNlcGFyYXRlZCBieSBwaXBlICh2ZXJ0aWNhbAorYmFyKSBjaGFyYWN0ZXJzLiBUaGUgZmlyc3Qgc3Vic3RyaW5nIG11c3QgYmUgYW4gZXhlY3V0YWJsZSBuYW1lLCB3aXRoIHRoZQorZm9sbG93aW5nIHN1YnN0cmluZ3Mgc3BlY2lmeWluZyBhcmd1bWVudHM6Cis8cHJlPgorICBleGVjdXRhYmxlX25hbWV8YXJnMXxhcmcyfC4uLgorPC9wcmU+CitBbnkgc3Vic3RyaW5nIChpbmNsdWRpbmcgdGhlIGV4ZWN1dGFibGUgbmFtZSkgbWF5IGNvbnRhaW4gZXNjYXBlIHNlcXVlbmNlcworc3RhcnRlZCBieSBhIGRvbGxhciBjaGFyYWN0ZXI6ICQmIzYwO2RpZ2l0cyYjNjI7IG9yICR7JiM2MDtkaWdpdHMmIzYyO30gaXMgcmVwbGFjZWQgYnkgdGhlCitjYXB0dXJlZCBzdWJzdHJpbmcgb2YgdGhlIGdpdmVuIGRlY2ltYWwgbnVtYmVyLCB3aGljaCBtdXN0IGJlIGdyZWF0ZXIgdGhhbgoremVyby4gSWYgdGhlIG51bWJlciBpcyBncmVhdGVyIHRoYW4gdGhlIG51bWJlciBvZiBjYXB0dXJpbmcgc3Vic3RyaW5ncywgb3IgaWYKK3RoZSBjYXB0dXJlIGlzIHVuc2V0LCB0aGUgcmVwbGFjZW1lbnQgaXMgZW1wdHkuCis8L1A+Cis8UD4KK0FueSBvdGhlciBjaGFyYWN0ZXIgaXMgc3Vic3RpdHV0ZWQgYnkgaXRzZWxmLiBJbiBwYXJ0aWN1bGFyLCAkJCBpcyByZXBsYWNlZCBieQorYSBzaW5nbGUgZG9sbGFyIGFuZCAkfCBpcyByZXBsYWNlZCBieSBhIHBpcGUgY2hhcmFjdGVyLiBIZXJlIGlzIGFuIGV4YW1wbGU6Cis8cHJlPgorICBlY2hvIC1lICJhYmNkZVxuMTIzNDUiIHwgcGNyZTJncmVwIFwKKyAgICAnKD94KSguKSguLiguKSkKKyAgICAoP0MiL2Jpbi9lY2hvfEFyZzE6IFskMV0gWyQyXSBbJDNdfEFyZzI6ICR8JHsxfSR8ICgkNCkiKSgpJyAtCisKKyAgT3V0cHV0OgorCisgICAgQXJnMTogW2FdIFtiY2RdIFtkXSBBcmcyOiB8YXwgKCkKKyAgICBhYmNkZQorICAgIEFyZzE6IFsxXSBbMjM0XSBbNF0gQXJnMjogfDF8ICgpCisgICAgMTIzNDUKKzwvcHJlPgorVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSA8Yj5leGVjdigpPC9iPiBzeXN0ZW0gY2FsbCB0aGF0IGlzIHVzZWQgdG8gcnVuIHRoZQorcHJvZ3JhbSBvciBzY3JpcHQgYXJlIHplcm8tdGVybWluYXRlZCBzdHJpbmdzLiBUaGlzIG1lYW5zIHRoYXQgYmluYXJ5IHplcm8KK2NoYXJhY3RlcnMgaW4gdGhlIGNhbGxvdXQgYXJndW1lbnQgd2lsbCBjYXVzZSBwcmVtYXR1cmUgdGVybWluYXRpb24gb2YgdGhlaXIKK3N1YnN0cmluZ3MsIGFuZCB0aGVyZWZvcmUgc2hvdWxkIG5vdCBiZSBwcmVzZW50LiBBbnkgc3ludGF4IGVycm9ycyBpbiB0aGUKK3N0cmluZyAoZm9yIGV4YW1wbGUsIGEgZG9sbGFyIG5vdCBmb2xsb3dlZCBieSBhbm90aGVyIGNoYXJhY3RlcikgY2F1c2UgdGhlCitjYWxsb3V0IHRvIGJlIGlnbm9yZWQuIElmIHJ1bm5pbmcgdGhlIHByb2dyYW0gZmFpbHMgZm9yIGFueSByZWFzb24gKGluY2x1ZGluZwordGhlIG5vbi1leGlzdGVuY2Ugb2YgdGhlIGV4ZWN1dGFibGUpLCBhIGxvY2FsIG1hdGNoaW5nIGZhaWx1cmUgb2NjdXJzIGFuZCB0aGUKK21hdGNoZXIgYmFja3RyYWNrcyBpbiB0aGUgbm9ybWFsIHdheS4KKzwvUD4KKzxicj48YSBuYW1lPSJTRUMxMSIgaHJlZj0iI1RPQzEiPk1BVENISU5HIEVSUk9SUzwvYT48YnI+CiA8UD4KIEl0IGlzIHBvc3NpYmxlIHRvIHN1cHBseSBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IHRha2VzIGEgdmVyeSBsb25nIHRpbWUgdG8KIGZhaWwgdG8gbWF0Y2ggY2VydGFpbiBsaW5lcy4gU3VjaCBwYXR0ZXJucyBub3JtYWxseSBpbnZvbHZlIG5lc3RlZCBpbmRlZmluaXRlCkBAIC03NTEsNyArODA4LDcgQEAKIHRoYXQgc2V0cyBhIGxpbWl0IG9uIHRoZSBhbW91bnQgb2YgbWVtb3J5ICh1c3VhbGx5IHN0YWNrKSB0aGF0IGlzIHVzZWQgKHNlZSB0aGUKIGRpc2N1c3Npb24gb2YgdGhlc2Ugb3B0aW9ucyBhYm92ZSkuCiA8L1A+Ci08YnI+PGEgbmFtZT0iU0VDMTEiIGhyZWY9IiNUT0MxIj5ESUFHTk9TVElDUzwvYT48YnI+Cis8YnI+PGEgbmFtZT0iU0VDMTIiIGhyZWY9IiNUT0MxIj5ESUFHTk9TVElDUzwvYT48YnI+CiA8UD4KIEV4aXQgc3RhdHVzIGlzIDAgaWYgYW55IG1hdGNoZXMgd2VyZSBmb3VuZCwgMSBpZiBubyBtYXRjaGVzIHdlcmUgZm91bmQsIGFuZCAyCiBmb3Igc3ludGF4IGVycm9ycywgb3ZlcmxvbmcgbGluZXMsIG5vbi1leGlzdGVudCBvciBpbmFjY2Vzc2libGUgZmlsZXMgKGV2ZW4gaWYKQEAgLTc1OSwxMSArODE2LDExIEBACiA8Yj4tczwvYj4gb3B0aW9uIHRvIHN1cHByZXNzIGVycm9yIG1lc3NhZ2VzIGFib3V0IGluYWNjZXNzaWJsZSBmaWxlcyBkb2VzIG5vdAogYWZmZWN0IHRoZSByZXR1cm4gY29kZS4KIDwvUD4KLTxicj48YSBuYW1lPSJTRUMxMiIgaHJlZj0iI1RPQzEiPlNFRSBBTFNPPC9hPjxicj4KKzxicj48YSBuYW1lPSJTRUMxMyIgaHJlZj0iI1RPQzEiPlNFRSBBTFNPPC9hPjxicj4KIDxQPgotPGI+cGNyZTJwYXR0ZXJuPC9iPigzKSwgPGI+cGNyZTJzeW50YXg8L2I+KDMpLgorPGI+cGNyZTJwYXR0ZXJuPC9iPigzKSwgPGI+cGNyZTJzeW50YXg8L2I+KDMpLCA8Yj5wY3JlMmNhbGxvdXQ8L2I+KDMpLgogPC9QPgotPGJyPjxhIG5hbWU9IlNFQzEzIiBocmVmPSIjVE9DMSI+QVVUSE9SPC9hPjxicj4KKzxicj48YSBuYW1lPSJTRUMxNCIgaHJlZj0iI1RPQzEiPkFVVEhPUjwvYT48YnI+CiA8UD4KIFBoaWxpcCBIYXplbAogPGJyPgpAQCAtNzcyLDExICs4MjksMTEgQEAKIENhbWJyaWRnZSwgRW5nbGFuZC4KIDxicj4KIDwvUD4KLTxicj48YSBuYW1lPSJTRUMxNCIgaHJlZj0iI1RPQzEiPlJFVklTSU9OPC9hPjxicj4KKzxicj48YSBuYW1lPSJTRUMxNSIgaHJlZj0iI1RPQzEiPlJFVklTSU9OPC9hPjxicj4KIDxQPgotTGFzdCB1cGRhdGVkOiAwMyBKYW51YXJ5IDIwMTUKK0xhc3QgdXBkYXRlZDogMTkgSnVuZSAyMDE2CiA8YnI+Ci1Db3B5cmlnaHQgJmNvcHk7IDE5OTctMjAxNSBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZS4KK0NvcHlyaWdodCAmY29weTsgMTk5Ny0yMDE2IFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlLgogPGJyPgogPHA+CiBSZXR1cm4gdG8gdGhlIDxhIGhyZWY9ImluZGV4Lmh0bWwiPlBDUkUyIGluZGV4IHBhZ2U8L2E+LgpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL2h0bWwvcGNyZTJqaXQuaHRtbCBiL2Rpc3QyL2RvYy9odG1sL3BjcmUyaml0Lmh0bWwKaW5kZXggNDhlZTEyMi4uNGE2ZDRmZiAxMDA2NDQKLS0tIGEvZGlzdDIvZG9jL2h0bWwvcGNyZTJqaXQuaHRtbAorKysgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMmppdC5odG1sCkBAIC0xNTIsNiArMTUyLDEwIEBACiBQQ1JFMl9BTkNIT1JFRCBvcHRpb24gaXMgbm90IHN1cHBvcnRlZCBhdCBtYXRjaCB0aW1lLgogPC9QPgogPFA+CitJZiB0aGUgUENSRTJfTk9fSklUIG9wdGlvbiBpcyBwYXNzZWQgdG8gPGI+cGNyZTJfbWF0Y2goKTwvYj4gaXQgZGlzYWJsZXMgdGhlCit1c2Ugb2YgSklULCBmb3JjaW5nIG1hdGNoaW5nIGJ5IHRoZSBpbnRlcnByZXRlciBjb2RlLgorPC9QPgorPFA+CiBUaGUgb25seSB1bnN1cHBvcnRlZCBwYXR0ZXJuIGl0ZW1zIGFyZSBcQyAobWF0Y2ggYSBzaW5nbGUgZGF0YSB1bml0KSB3aGVuCiBydW5uaW5nIGluIGEgVVRGIG1vZGUsIGFuZCBhIGNhbGxvdXQgaW1tZWRpYXRlbHkgYmVmb3JlIGFuIGFzc2VydGlvbiBjb25kaXRpb24KIGluIGEgY29uZGl0aW9uYWwgZ3JvdXAuCkBAIC00MDMsNyArNDA3LDcgQEAKIHRoZSBzYW1lIGFyZ3VtZW50cyBhcyA8Yj5wY3JlMl9tYXRjaCgpPC9iPi4gVGhlIHJldHVybiB2YWx1ZXMgYXJlIGFsc28gdGhlIHNhbWUsCiBwbHVzIFBDUkUyX0VSUk9SX0pJVF9CQURPUFRJT04gaWYgYSBtYXRjaGluZyBtb2RlIChwYXJ0aWFsIG9yIGNvbXBsZXRlKSBpcwogcmVxdWVzdGVkIHRoYXQgd2FzIG5vdCBjb21waWxlZC4gVW5zdXBwb3J0ZWQgb3B0aW9uIGJpdHMgKGZvciBleGFtcGxlLAotUENSRTJfQU5DSE9SRUQpIGFyZSBpZ25vcmVkLgorUENSRTJfQU5DSE9SRUQpIGFyZSBpZ25vcmVkLCBhcyBpcyB0aGUgUENSRTJfTk9fSklUIG9wdGlvbi4KIDwvUD4KIDxQPgogV2hlbiB5b3UgY2FsbCA8Yj5wY3JlMl9tYXRjaCgpPC9iPiwgYXMgd2VsbCBhcyB0ZXN0aW5nIGZvciBpbnZhbGlkIG9wdGlvbnMsIGEKQEAgLTQzMiw5ICs0MzYsOSBAQAogPC9QPgogPGJyPjxhIG5hbWU9IlNFQzEzIiBocmVmPSIjVE9DMSI+UkVWSVNJT048L2E+PGJyPgogPFA+Ci1MYXN0IHVwZGF0ZWQ6IDE0IE5vdmVtYmVyIDIwMTUKK0xhc3QgdXBkYXRlZDogMDUgSnVuZSAyMDE2CiA8YnI+Ci1Db3B5cmlnaHQgJmNvcHk7IDE5OTctMjAxNSBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZS4KK0NvcHlyaWdodCAmY29weTsgMTk5Ny0yMDE2IFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlLgogPGJyPgogPHA+CiBSZXR1cm4gdG8gdGhlIDxhIGhyZWY9ImluZGV4Lmh0bWwiPlBDUkUyIGluZGV4IHBhZ2U8L2E+LgpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL2h0bWwvcGNyZTJwYXR0ZXJuLmh0bWwgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMnBhdHRlcm4uaHRtbAppbmRleCBjODhlOTMxLi43OTc2OTBhIDEwMDY0NAotLS0gYS9kaXN0Mi9kb2MvaHRtbC9wY3JlMnBhdHRlcm4uaHRtbAorKysgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMnBhdHRlcm4uaHRtbApAQCAtMTI1NiwxNyArMTI1NiwyMiBAQAogPFA+CiBQQ1JFMiBkb2VzIG5vdCBhbGxvdyBcQyB0byBhcHBlYXIgaW4gbG9va2JlaGluZCBhc3NlcnRpb25zCiA8YSBocmVmPSIjbG9va2JlaGluZCI+KGRlc2NyaWJlZCBiZWxvdyk8L2E+Ci1pbiBhIFVURiBtb2RlLCBiZWNhdXNlIHRoaXMgd291bGQgbWFrZSBpdCBpbXBvc3NpYmxlIHRvIGNhbGN1bGF0ZSB0aGUgbGVuZ3RoIG9mCi10aGUgbG9va2JlaGluZC4gTmVpdGhlciB0aGUgYWx0ZXJuYXRpdmUgbWF0Y2hpbmcgZnVuY3Rpb24KLTxiPnBjcmUyX2RmYV9tYXRjaCgpPC9iPiBub3QgdGhlIEpJVCBvcHRpbWl6ZXIgc3VwcG9ydCBcQyBpbiBhIFVURiBtb2RlLiBUaGUKLWZvcm1lciBnaXZlcyBhIG1hdGNoLXRpbWUgZXJyb3I7IHRoZSBsYXR0ZXIgZmFpbHMgdG8gb3B0aW1pemUgYW5kIHNvIHRoZSBtYXRjaAotaXMgYWx3YXlzIHJ1biB1c2luZyB0aGUgaW50ZXJwcmV0ZXIuCitpbiBVVEYtOCBvciBVVEYtMTYgbW9kZXMsIGJlY2F1c2UgdGhpcyB3b3VsZCBtYWtlIGl0IGltcG9zc2libGUgdG8gY2FsY3VsYXRlCit0aGUgbGVuZ3RoIG9mIHRoZSBsb29rYmVoaW5kLiBOZWl0aGVyIHRoZSBhbHRlcm5hdGl2ZSBtYXRjaGluZyBmdW5jdGlvbgorPGI+cGNyZTJfZGZhX21hdGNoKCk8L2I+IG5vciB0aGUgSklUIG9wdGltaXplciBzdXBwb3J0IFxDIGluIHRoZXNlIFVURiBtb2Rlcy4KK1RoZSBmb3JtZXIgZ2l2ZXMgYSBtYXRjaC10aW1lIGVycm9yOyB0aGUgbGF0dGVyIGZhaWxzIHRvIG9wdGltaXplIGFuZCBzbyB0aGUKK21hdGNoIGlzIGFsd2F5cyBydW4gdXNpbmcgdGhlIGludGVycHJldGVyLgorPC9QPgorPFA+CitJbiB0aGUgMzItYml0IGxpYnJhcnksIGhvd2V2ZXIsIFxDIGlzIGFsd2F5cyBzdXBwb3J0ZWQgKHdoZW4gbm90IGV4cGxpY2l0bHkKK2xvY2tlZCBvdXQpIGJlY2F1c2UgaXQgYWx3YXlzIG1hdGNoZXMgYSBzaW5nbGUgY29kZSB1bml0LCB3aGV0aGVyIG9yIG5vdCBVVEYtMzIKK2lzIHNwZWNpZmllZC4KIDwvUD4KIDxQPgogSW4gZ2VuZXJhbCwgdGhlIFxDIGVzY2FwZSBzZXF1ZW5jZSBpcyBiZXN0IGF2b2lkZWQuIEhvd2V2ZXIsIG9uZSB3YXkgb2YgdXNpbmcKLWl0IHRoYXQgYXZvaWRzIHRoZSBwcm9ibGVtIG9mIG1hbGZvcm1lZCBVVEYgY2hhcmFjdGVycyBpcyB0byB1c2UgYSBsb29rYWhlYWQgdG8KLWNoZWNrIHRoZSBsZW5ndGggb2YgdGhlIG5leHQgY2hhcmFjdGVyLCBhcyBpbiB0aGlzIHBhdHRlcm4sIHdoaWNoIGNvdWxkIGJlIHVzZWQKLXdpdGggYSBVVEYtOCBzdHJpbmcgKGlnbm9yZSB3aGl0ZSBzcGFjZSBhbmQgbGluZSBicmVha3MpOgoraXQgdGhhdCBhdm9pZHMgdGhlIHByb2JsZW0gb2YgbWFsZm9ybWVkIFVURi04IG9yIFVURi0xNiBjaGFyYWN0ZXJzIGlzIHRvIHVzZSBhCitsb29rYWhlYWQgdG8gY2hlY2sgdGhlIGxlbmd0aCBvZiB0aGUgbmV4dCBjaGFyYWN0ZXIsIGFzIGluIHRoaXMgcGF0dGVybiwgd2hpY2gKK2NvdWxkIGJlIHVzZWQgd2l0aCBhIFVURi04IHN0cmluZyAoaWdub3JlIHdoaXRlIHNwYWNlIGFuZCBsaW5lIGJyZWFrcyk6CiA8cHJlPgogICAoP3wgKD89W1x4MDAtXHg3Zl0pKFxDKSB8CiAgICAgICAoPz1bXHg4MC1ceHs3ZmZ9XSkoXEMpKFxDKSB8CkBAIC0zMzg4LDkgKzMzOTMsOSBAQAogPC9QPgogPGJyPjxhIG5hbWU9IlNFQzMwIiBocmVmPSIjVE9DMSI+UkVWSVNJT048L2E+PGJyPgogPFA+Ci1MYXN0IHVwZGF0ZWQ6IDEzIE5vdmVtYmVyIDIwMTUKK0xhc3QgdXBkYXRlZDogMjAgSnVuZSAyMDE2CiA8YnI+Ci1Db3B5cmlnaHQgJmNvcHk7IDE5OTctMjAxNSBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZS4KK0NvcHlyaWdodCAmY29weTsgMTk5Ny0yMDE2IFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlLgogPGJyPgogPHA+CiBSZXR1cm4gdG8gdGhlIDxhIGhyZWY9ImluZGV4Lmh0bWwiPlBDUkUyIGluZGV4IHBhZ2U8L2E+LgpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL2h0bWwvcGNyZTJwb3NpeC5odG1sIGIvZGlzdDIvZG9jL2h0bWwvcGNyZTJwb3NpeC5odG1sCmluZGV4IGUxNmE0YzMuLjFkNWZlNjMgMTAwNjQ0Ci0tLSBhL2Rpc3QyL2RvYy9odG1sL3BjcmUycG9zaXguaHRtbAorKysgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMnBvc2l4Lmh0bWwKQEAgLTQ4LDcgKzQ4LDcgQEAKIGV4cHJlc3Npb24gOC1iaXQgbGlicmFyeS4gU2VlIHRoZQogPGEgaHJlZj0icGNyZTJhcGkuaHRtbCI+PGI+cGNyZTJhcGk8L2I+PC9hPgogZG9jdW1lbnRhdGlvbiBmb3IgYSBkZXNjcmlwdGlvbiBvZiBQQ1JFMidzIG5hdGl2ZSBBUEksIHdoaWNoIGNvbnRhaW5zIG11Y2gKLWFkZGl0aW9uYWwgZnVuY3Rpb25hbGl0eS4gVGhlcmUgaXMgbm8gUE9TSVgtc3R5bGUgd3JhcHBlciBmb3IgUENSRTIncyAxNi1iaXQKK2FkZGl0aW9uYWwgZnVuY3Rpb25hbGl0eS4gVGhlcmUgYXJlIG5vIFBPU0lYLXN0eWxlIHdyYXBwZXJzIGZvciBQQ1JFMidzIDE2LWJpdAogYW5kIDMyLWJpdCBsaWJyYXJpZXMuCiA8L1A+CiA8UD4KQEAgLTY3LDkgKzY3LDkgQEAKIHJlcGxhY2VtZW50IGxpYnJhcnkuIE90aGVyIFBPU0lYIG9wdGlvbnMgYXJlIG5vdCBldmVuIGRlZmluZWQuCiA8L1A+CiA8UD4KLVRoZXJlIGFyZSBhbHNvIHNvbWUgb3RoZXIgb3B0aW9ucyB0aGF0IGFyZSBub3QgZGVmaW5lZCBieSBQT1NJWC4gVGhlc2UgaGF2ZQotYmVlbiBhZGRlZCBhdCB0aGUgcmVxdWVzdCBvZiB1c2VycyB3aG8gd2FudCB0byBtYWtlIHVzZSBvZiBjZXJ0YWluCi1QQ1JFMi1zcGVjaWZpYyBmZWF0dXJlcyB2aWEgdGhlIFBPU0lYIGNhbGxpbmcgaW50ZXJmYWNlLgorVGhlcmUgYXJlIGFsc28gc29tZSBvcHRpb25zIHRoYXQgYXJlIG5vdCBkZWZpbmVkIGJ5IFBPU0lYLiBUaGVzZSBoYXZlIGJlZW4KK2FkZGVkIGF0IHRoZSByZXF1ZXN0IG9mIHVzZXJzIHdobyB3YW50IHRvIG1ha2UgdXNlIG9mIGNlcnRhaW4gUENSRTItc3BlY2lmaWMKK2ZlYXR1cmVzIHZpYSB0aGUgUE9TSVggY2FsbGluZyBpbnRlcmZhY2UuCiA8L1A+CiA8UD4KIFdoZW4gUENSRTIgaXMgY2FsbGVkIHZpYSB0aGVzZSBmdW5jdGlvbnMsIGl0IGlzIG9ubHkgdGhlIEFQSSB0aGF0IGlzIFBPU0lYLWxpa2UKQEAgLTExOSwxMSArMTE5LDExIEBACiA8cHJlPgogICBSRUdfTk9TVUIKIDwvcHJlPgotVGhlIFBDUkUyX05PX0FVVE9fQ0FQVFVSRSBvcHRpb24gaXMgc2V0IHdoZW4gdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBpcyBwYXNzZWQKLWZvciBjb21waWxhdGlvbiB0byB0aGUgbmF0aXZlIGZ1bmN0aW9uLiBJbiBhZGRpdGlvbiwgd2hlbiBhIHBhdHRlcm4gdGhhdCBpcwotY29tcGlsZWQgd2l0aCB0aGlzIGZsYWcgaXMgcGFzc2VkIHRvIDxiPnJlZ2V4ZWMoKTwvYj4gZm9yIG1hdGNoaW5nLCB0aGUKLTxpPm5tYXRjaDwvaT4gYW5kIDxpPnBtYXRjaDwvaT4gYXJndW1lbnRzIGFyZSBpZ25vcmVkLCBhbmQgbm8gY2FwdHVyZWQgc3RyaW5ncwotYXJlIHJldHVybmVkLgorV2hlbiBhIHBhdHRlcm4gdGhhdCBpcyBjb21waWxlZCB3aXRoIHRoaXMgZmxhZyBpcyBwYXNzZWQgdG8gPGI+cmVnZXhlYygpPC9iPiBmb3IKK21hdGNoaW5nLCB0aGUgPGk+bm1hdGNoPC9pPiBhbmQgPGk+cG1hdGNoPC9pPiBhcmd1bWVudHMgYXJlIGlnbm9yZWQsIGFuZCBubworY2FwdHVyZWQgc3RyaW5ncyBhcmUgcmV0dXJuZWQuIFZlcnNpb25zIG9mIHRoZSBQQ1JFIGxpYnJhcnkgcHJpb3IgdG8gMTAuMjIgdXNlZAordG8gc2V0IHRoZSBQQ1JFMl9OT19BVVRPX0NBUFRVUkUgY29tcGlsZSBvcHRpb24sIGJ1dCB0aGlzIG5vIGxvbmdlciBoYXBwZW5zCitiZWNhdXNlIGl0IGRpc2FibGVzIHRoZSB1c2Ugb2YgYmFjayByZWZlcmVuY2VzLgogPHByZT4KICAgUkVHX1VDUAogPC9wcmU+CkBAIC0yNDEsMTQgKzI0MSwxNSBAQAogPFA+CiBJZiB0aGUgcGF0dGVybiB3YXMgY29tcGlsZWQgd2l0aCB0aGUgUkVHX05PU1VCIGZsYWcsIG5vIGRhdGEgYWJvdXQgYW55IG1hdGNoZWQKIHN0cmluZ3MgaXMgcmV0dXJuZWQuIFRoZSA8aT5ubWF0Y2g8L2k+IGFuZCA8aT5wbWF0Y2g8L2k+IGFyZ3VtZW50cyBvZgotPGI+cmVnZXhlYygpPC9iPiBhcmUgaWdub3JlZC4KKzxiPnJlZ2V4ZWMoKTwvYj4gYXJlIGlnbm9yZWQgKGV4Y2VwdCBwb3NzaWJseSBhcyBpbnB1dCBmb3IgUkVHX1NUQVJURU5EKS4KIDwvUD4KIDxQPgotSWYgdGhlIHZhbHVlIG9mIDxpPm5tYXRjaDwvaT4gaXMgemVybywgb3IgaWYgdGhlIHZhbHVlIDxpPnBtYXRjaDwvaT4gaXMgTlVMTCwKLW5vIGRhdGEgYWJvdXQgYW55IG1hdGNoZWQgc3RyaW5ncyBpcyByZXR1cm5lZC4KK1RoZSB2YWx1ZSBvZiA8aT5ubWF0Y2g8L2k+IG1heSBiZSB6ZXJvLCBhbmQgdGhlIHZhbHVlIDxpPnBtYXRjaDwvaT4gbWF5IGJlIE5VTEwKKyh1bmxlc3MgUkVHX1NUQVJURU5EIGlzIHNldCk7IGluIGJvdGggdGhlc2UgY2FzZXMgbm8gZGF0YSBhYm91dCBhbnkgbWF0Y2hlZAorc3RyaW5ncyBpcyByZXR1cm5lZC4KIDwvUD4KIDxQPgotT3RoZXJ3aXNlLHRoZSBwb3J0aW9uIG9mIHRoZSBzdHJpbmcgdGhhdCB3YXMgbWF0Y2hlZCwgYW5kIGFsc28gYW55IGNhcHR1cmVkCitPdGhlcndpc2UsIHRoZSBwb3J0aW9uIG9mIHRoZSBzdHJpbmcgdGhhdCB3YXMgbWF0Y2hlZCwgYW5kIGFsc28gYW55IGNhcHR1cmVkCiBzdWJzdHJpbmdzLCBhcmUgcmV0dXJuZWQgdmlhIHRoZSA8aT5wbWF0Y2g8L2k+IGFyZ3VtZW50LCB3aGljaCBwb2ludHMgdG8gYW4KIGFycmF5IG9mIDxpPm5tYXRjaDwvaT4gc3RydWN0dXJlcyBvZiB0eXBlIDxpPnJlZ21hdGNoX3Q8L2k+LCBjb250YWluaW5nIHRoZQogbWVtYmVycyA8aT5ybV9zbzwvaT4gYW5kIDxpPnJtX2VvPC9pPi4gVGhlc2UgY29udGFpbiB0aGUgYnl0ZSBvZmZzZXQgdG8gdGhlIGZpcnN0CkBAIC0yOTAsOSArMjkxLDkgQEAKIDwvUD4KIDxicj48YSBuYW1lPSJTRUM5IiBocmVmPSIjVE9DMSI+UkVWSVNJT048L2E+PGJyPgogPFA+Ci1MYXN0IHVwZGF0ZWQ6IDI5IE5vdmVtYmVyIDIwMTUKK0xhc3QgdXBkYXRlZDogMzEgSmFudWFyeSAyMDE2CiA8YnI+Ci1Db3B5cmlnaHQgJmNvcHk7IDE5OTctMjAxNSBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZS4KK0NvcHlyaWdodCAmY29weTsgMTk5Ny0yMDE2IFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlLgogPGJyPgogPHA+CiBSZXR1cm4gdG8gdGhlIDxhIGhyZWY9ImluZGV4Lmh0bWwiPlBDUkUyIGluZGV4IHBhZ2U8L2E+LgpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL2h0bWwvcGNyZTJzYW1wbGUuaHRtbCBiL2Rpc3QyL2RvYy9odG1sL3BjcmUyc2FtcGxlLmh0bWwKaW5kZXggNjBhOTI4Yi4uMmIzNmYxZiAxMDA2NDQKLS0tIGEvZGlzdDIvZG9jL2h0bWwvcGNyZTJzYW1wbGUuaHRtbAorKysgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMnNhbXBsZS5odG1sCkBAIC0yNCwxMiArMjQsMTEgQEAKIHNhdmUgdGhpcyBsaXN0aW5nIHRvIHJlLWNyZWF0ZSB0aGUgY29udGVudHMgb2YgPGk+cGNyZTJkZW1vLmM8L2k+LgogPC9QPgogPFA+Ci1UaGUgZGVtb25zdHJhdGlvbiBwcm9ncmFtLCB3aGljaCB1c2VzIHRoZSBQQ1JFMiA4LWJpdCBsaWJyYXJ5LCBjb21waWxlcyB0aGUKLXJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IGlzIGl0cyBmaXJzdCBhcmd1bWVudCwgYW5kIG1hdGNoZXMgaXQgYWdhaW5zdCB0aGUKLXN1YmplY3Qgc3RyaW5nIGluIGl0cyBzZWNvbmQgYXJndW1lbnQuIE5vIFBDUkUyIG9wdGlvbnMgYXJlIHNldCwgYW5kIGRlZmF1bHQKLWNoYXJhY3RlciB0YWJsZXMgYXJlIHVzZWQuIElmIG1hdGNoaW5nIHN1Y2NlZWRzLCB0aGUgcHJvZ3JhbSBvdXRwdXRzIHRoZQotcG9ydGlvbiBvZiB0aGUgc3ViamVjdCB0aGF0IG1hdGNoZWQsIHRvZ2V0aGVyIHdpdGggdGhlIGNvbnRlbnRzIG9mIGFueSBjYXB0dXJlZAotc3Vic3RyaW5ncy4KK1RoZSBkZW1vbnN0cmF0aW9uIHByb2dyYW0gY29tcGlsZXMgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IGlzIGl0cworZmlyc3QgYXJndW1lbnQsIGFuZCBtYXRjaGVzIGl0IGFnYWluc3QgdGhlIHN1YmplY3Qgc3RyaW5nIGluIGl0cyBzZWNvbmQKK2FyZ3VtZW50LiBObyBQQ1JFMiBvcHRpb25zIGFyZSBzZXQsIGFuZCBkZWZhdWx0IGNoYXJhY3RlciB0YWJsZXMgYXJlIHVzZWQuIElmCittYXRjaGluZyBzdWNjZWVkcywgdGhlIHByb2dyYW0gb3V0cHV0cyB0aGUgcG9ydGlvbiBvZiB0aGUgc3ViamVjdCB0aGF0IG1hdGNoZWQsCit0b2dldGhlciB3aXRoIHRoZSBjb250ZW50cyBvZiBhbnkgY2FwdHVyZWQgc3Vic3RyaW5ncy4KIDwvUD4KIDxQPgogSWYgdGhlIC1nIG9wdGlvbiBpcyBnaXZlbiBvbiB0aGUgY29tbWFuZCBsaW5lLCB0aGUgcHJvZ3JhbSB0aGVuIGdvZXMgb24gdG8KQEAgLTM4LDM0ICszNywzOSBAQAogYW4gZW1wdHkgc3RyaW5nLiBDb21tZW50cyBpbiB0aGUgY29kZSBleHBsYWluIHdoYXQgaXMgZ29pbmcgb24uCiA8L1A+CiA8UD4KK1RoZSBjb2RlIGluIDxiPnBjcmUyZGVtby5jPC9iPiBpcyBhbiA4LWJpdCBwcm9ncmFtIHRoYXQgdXNlcyB0aGUgUENSRTIgOC1iaXQKK2xpYnJhcnkuIEl0IGhhbmRsZXMgc3RyaW5ncyBhbmQgY2hhcmFjdGVycyB0aGF0IGFyZSBzdG9yZWQgaW4gOC1iaXQgY29kZSB1bml0cy4KK0J5IGRlZmF1bHQsIG9uZSBjaGFyYWN0ZXIgY29ycmVzcG9uZHMgdG8gb25lIGNvZGUgdW5pdCwgYnV0IGlmIHRoZSBwYXR0ZXJuCitzdGFydHMgd2l0aCAiKCpVVEYpIiwgYm90aCBpdCBhbmQgdGhlIHN1YmplY3QgYXJlIHRyZWF0ZWQgYXMgVVRGLTggc3RyaW5ncywKK3doZXJlIGNoYXJhY3RlcnMgbWF5IG9jY3VweSBtdWx0aXBsZSBjb2RlIHVuaXRzLgorPC9QPgorPFA+CiBJZiBQQ1JFMiBpcyBpbnN0YWxsZWQgaW4gdGhlIHN0YW5kYXJkIGluY2x1ZGUgYW5kIGxpYnJhcnkgZGlyZWN0b3JpZXMgZm9yIHlvdXIKIG9wZXJhdGluZyBzeXN0ZW0sIHlvdSBzaG91bGQgYmUgYWJsZSB0byBjb21waWxlIHRoZSBkZW1vbnN0cmF0aW9uIHByb2dyYW0gdXNpbmcKLXRoaXMgY29tbWFuZDoKK2EgY29tbWFuZCBsaWtlIHRoaXM6CiA8cHJlPgotICBnY2MgLW8gcGNyZTJkZW1vIHBjcmUyZGVtby5jIC1scGNyZTItOAorICBjYyAtbyBwY3JlMmRlbW8gcGNyZTJkZW1vLmMgLWxwY3JlMi04CiA8L3ByZT4KIElmIFBDUkUyIGlzIGluc3RhbGxlZCBlbHNld2hlcmUsIHlvdSBtYXkgbmVlZCB0byBhZGQgYWRkaXRpb25hbCBvcHRpb25zIHRvIHRoZQogY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZSwgb24gYSBVbml4LWxpa2Ugc3lzdGVtIHRoYXQgaGFzIFBDUkUyIGluc3RhbGxlZCBpbgogPGk+L3Vzci9sb2NhbDwvaT4sIHlvdSBjYW4gY29tcGlsZSB0aGUgZGVtb25zdHJhdGlvbiBwcm9ncmFtIHVzaW5nIGEgY29tbWFuZAogbGlrZSB0aGlzOgogPHByZT4KLSAgZ2NjIC1vIHBjcmUyZGVtbyAtSS91c3IvbG9jYWwvaW5jbHVkZSBwY3JlMmRlbW8uYyAtTC91c3IvbG9jYWwvbGliIC1scGNyZTItOAotCi08L1BSRT4KLTwvUD4KLTxQPgotT25jZSB5b3UgaGF2ZSBjb21waWxlZCBhbmQgbGlua2VkIHRoZSBkZW1vbnN0cmF0aW9uIHByb2dyYW0sIHlvdSBjYW4gcnVuIHNpbXBsZQotdGVzdHMgbGlrZSB0aGlzOgorICBjYyAtbyBwY3JlMmRlbW8gLUkvdXNyL2xvY2FsL2luY2x1ZGUgcGNyZTJkZW1vLmMgLUwvdXNyL2xvY2FsL2xpYiAtbHBjcmUyLTgKKzwvcHJlPgorT25jZSB5b3UgaGF2ZSBidWlsdCB0aGUgZGVtb25zdHJhdGlvbiBwcm9ncmFtLCB5b3UgY2FuIHJ1biBzaW1wbGUgdGVzdHMgbGlrZQordGhpczoKIDxwcmU+CiAgIC4vcGNyZTJkZW1vICdjYXR8ZG9nJyAndGhlIGNhdCBzYXQgb24gdGhlIG1hdCcKICAgLi9wY3JlMmRlbW8gLWcgJ2NhdHxkb2cnICd0aGUgZG9nIHNhdCBvbiB0aGUgY2F0JwogPC9wcmU+CiBOb3RlIHRoYXQgdGhlcmUgaXMgYSBtdWNoIG1vcmUgY29tcHJlaGVuc2l2ZSB0ZXN0IHByb2dyYW0sIGNhbGxlZAogPGEgaHJlZj0icGNyZTJ0ZXN0Lmh0bWwiPjxiPnBjcmUydGVzdDwvYj4sPC9hPgotd2hpY2ggc3VwcG9ydHMgbWFueSBtb3JlIGZhY2lsaXRpZXMgZm9yIHRlc3RpbmcgcmVndWxhciBleHByZXNzaW9ucyB1c2luZyB0aGUKLVBDUkUyIGxpYnJhcmllcy4gVGhlCit3aGljaCBzdXBwb3J0cyBtYW55IG1vcmUgZmFjaWxpdGllcyBmb3IgdGVzdGluZyByZWd1bGFyIGV4cHJlc3Npb25zIHVzaW5nIGFsbAordGhyZWUgUENSRTIgbGlicmFyaWVzICg4LWJpdCwgMTYtYml0LCBhbmQgMzItYml0LCB0aG91Z2ggbm90IGFsbCB0aHJlZSBuZWVkIGJlCitpbnN0YWxsZWQpLiBUaGUKIDxhIGhyZWY9InBjcmUyZGVtby5odG1sIj48Yj5wY3JlMmRlbW88L2I+PC9hPgotcHJvZ3JhbSBpcyBwcm92aWRlZCBhcyBhIHNpbXBsZSBjb2RpbmcgZXhhbXBsZS4KK3Byb2dyYW0gaXMgcHJvdmlkZWQgYXMgYSByZWxhdGl2ZWx5IHNpbXBsZSBjb2RpbmcgZXhhbXBsZS4KIDwvUD4KIDxQPgogSWYgeW91IHRyeSB0byBydW4KQEAgLTczLDcgKzc3LDcgQEAKIHdoZW4gUENSRTIgaXMgbm90IGluc3RhbGxlZCBpbiB0aGUgc3RhbmRhcmQgbGlicmFyeSBkaXJlY3RvcnksIHlvdSBtYXkgZ2V0IGFuCiBlcnJvciBsaWtlIHRoaXMgb24gc29tZSBvcGVyYXRpbmcgc3lzdGVtcyAoZS5nLiBTb2xhcmlzKToKIDxwcmU+Ci0gIGxkLnNvLjE6IGEub3V0OiBmYXRhbDogbGlicGNyZTIuc28uMDogb3BlbiBmYWlsZWQ6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKKyAgbGQuc28uMTogcGNyZTJkZW1vOiBmYXRhbDogbGlicGNyZTItOC5zby4wOiBvcGVuIGZhaWxlZDogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQogPC9wcmU+CiBUaGlzIGlzIGNhdXNlZCBieSB0aGUgd2F5IHNoYXJlZCBsaWJyYXJ5IHN1cHBvcnQgd29ya3Mgb24gdGhvc2Ugc3lzdGVtcy4gWW91CiBuZWVkIHRvIGFkZApAQCAtOTcsOSArMTAxLDkgQEAKIFJFVklTSU9OCiA8L2I+PGJyPgogPFA+Ci1MYXN0IHVwZGF0ZWQ6IDIwIE9jdG9iZXIgMjAxNAorTGFzdCB1cGRhdGVkOiAwMiBGZWJydWFyeSAyMDE2CiA8YnI+Ci1Db3B5cmlnaHQgJmNvcHk7IDE5OTctMjAxNCBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZS4KK0NvcHlyaWdodCAmY29weTsgMTk5Ny0yMDE2IFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlLgogPGJyPgogPHA+CiBSZXR1cm4gdG8gdGhlIDxhIGhyZWY9ImluZGV4Lmh0bWwiPlBDUkUyIGluZGV4IHBhZ2U8L2E+LgpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL2h0bWwvcGNyZTJzZXJpYWxpemUuaHRtbCBiL2Rpc3QyL2RvYy9odG1sL3BjcmUyc2VyaWFsaXplLmh0bWwKaW5kZXggMzc0N2MwYS4uZWRmNDE1YSAxMDA2NDQKLS0tIGEvZGlzdDIvZG9jL2h0bWwvcGNyZTJzZXJpYWxpemUuaHRtbAorKysgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMnNlcmlhbGl6ZS5odG1sCkBAIC0xNCwxMCArMTQsMTEgQEAKIDxicj4KIDx1bD4KIDxsaT48YSBuYW1lPSJUT0MxIiBocmVmPSIjU0VDMSI+U0FWSU5HIEFORCBSRS1VU0lORyBQUkVDT01QSUxFRCBQQ1JFMiBQQVRURVJOUzwvYT4KLTxsaT48YSBuYW1lPSJUT0MyIiBocmVmPSIjU0VDMiI+U0FWSU5HIENPTVBJTEVEIFBBVFRFUk5TPC9hPgotPGxpPjxhIG5hbWU9IlRPQzMiIGhyZWY9IiNTRUMzIj5SRS1VU0lORyBQUkVDT01QSUxFRCBQQVRURVJOUzwvYT4KLTxsaT48YSBuYW1lPSJUT0M0IiBocmVmPSIjU0VDNCI+QVVUSE9SPC9hPgotPGxpPjxhIG5hbWU9IlRPQzUiIGhyZWY9IiNTRUM1Ij5SRVZJU0lPTjwvYT4KKzxsaT48YSBuYW1lPSJUT0MyIiBocmVmPSIjU0VDMiI+U0VDVVJJVFkgQ09OQ0VSTlM8L2E+Cis8bGk+PGEgbmFtZT0iVE9DMyIgaHJlZj0iI1NFQzMiPlNBVklORyBDT01QSUxFRCBQQVRURVJOUzwvYT4KKzxsaT48YSBuYW1lPSJUT0M0IiBocmVmPSIjU0VDNCI+UkUtVVNJTkcgUFJFQ09NUElMRUQgUEFUVEVSTlM8L2E+Cis8bGk+PGEgbmFtZT0iVE9DNSIgaHJlZj0iI1NFQzUiPkFVVEhPUjwvYT4KKzxsaT48YSBuYW1lPSJUT0M2IiBocmVmPSIjU0VDNiI+UkVWSVNJT048L2E+CiA8L3VsPgogPGJyPjxhIG5hbWU9IlNFQzEiIGhyZWY9IiNUT0MxIj5TQVZJTkcgQU5EIFJFLVVTSU5HIFBSRUNPTVBJTEVEIFBDUkUyIFBBVFRFUk5TPC9hPjxicj4KIDxQPgpAQCAtNDgsNyArNDksMTUgQEAKIFBDUkUyJ3MgMTYtYml0IGxpYnJhcnkgY2Fubm90IGJlIHJlbG9hZGVkIG9uIGEgNjQtYml0IHN5c3RlbSwgbm9yIGNhbiB0aGV5IGJlCiByZWxvYWRlZCB1c2luZyB0aGUgOC1iaXQgbGlicmFyeS4KIDwvUD4KLTxicj48YSBuYW1lPSJTRUMyIiBocmVmPSIjVE9DMSI+U0FWSU5HIENPTVBJTEVEIFBBVFRFUk5TPC9hPjxicj4KKzxicj48YSBuYW1lPSJTRUMyIiBocmVmPSIjVE9DMSI+U0VDVVJJVFkgQ09OQ0VSTlM8L2E+PGJyPgorPFA+CitUaGUgZmFjaWxpdHkgZm9yIHNhdmluZyBhbmQgcmVzdG9yaW5nIGNvbXBpbGVkIHBhdHRlcm5zIGlzIGludGVuZGVkIGZvciB1c2UKK3dpdGhpbiBpbmRpdmlkdWFsIGFwcGxpY2F0aW9ucy4gQXMgc3VjaCwgdGhlIGRhdGEgc3VwcGxpZWQgdG8KKzxiPnBjcmUyX3NlcmlhbGl6ZV9kZWNvZGUoKTwvYj4gaXMgZXhwZWN0ZWQgdG8gYmUgdHJ1c3RlZCBkYXRhLCBub3QgZGF0YSBmcm9tCithcmJpdHJhcnkgZXh0ZXJuYWwgc291cmNlcy4gVGhlcmUgaXMgb25seSBzb21lIHNpbXBsZSBjb25zaXN0ZW5jeSBjaGVja2luZywgbm90Citjb21wbGV0ZSB2YWxpZGF0aW9uIG9mIHdoYXQgaXMgYmVpbmcgcmUtbG9hZGVkLgorPC9QPgorPGJyPjxhIG5hbWU9IlNFQzMiIGhyZWY9IiNUT0MxIj5TQVZJTkcgQ09NUElMRUQgUEFUVEVSTlM8L2E+PGJyPgogPFA+CiBCZWZvcmUgY29tcGlsZWQgcGF0dGVybnMgY2FuIGJlIHNhdmVkIHRoZXkgbXVzdCBiZSBzZXJpYWxpemVkLCB0aGF0IGlzLAogY29udmVydGVkIHRvIGEgc3RyZWFtIG9mIGJ5dGVzLiBBIHNpbmdsZSBieXRlIHN0cmVhbSBtYXkgY29udGFpbiBhbnkgbnVtYmVyIG9mCkBAIC0xMTAsNyArMTE5LDcgQEAKIHdheSBieSBjYWxsaW5nIDxiPnBjcmUyX2NvZGVfZnJlZSgpPC9iPi4gV2hlbiB5b3UgaGF2ZSBmaW5pc2hlZCB3aXRoIHRoZSBieXRlCiBzdHJlYW0sIGl0IHRvbyBtdXN0IGJlIGZyZWVkIGJ5IGNhbGxpbmcgPGI+cGNyZTJfc2VyaWFsaXplX2ZyZWUoKTwvYj4uCiA8L1A+Ci08YnI+PGEgbmFtZT0iU0VDMyIgaHJlZj0iI1RPQzEiPlJFLVVTSU5HIFBSRUNPTVBJTEVEIFBBVFRFUk5TPC9hPjxicj4KKzxicj48YSBuYW1lPSJTRUM0IiBocmVmPSIjVE9DMSI+UkUtVVNJTkcgUFJFQ09NUElMRUQgUEFUVEVSTlM8L2E+PGJyPgogPFA+CiBJbiBvcmRlciB0byByZS11c2UgYSBzZXQgb2Ygc2F2ZWQgcGF0dGVybnMgeW91IG11c3QgZmlyc3QgbWFrZSB0aGUgc2VyaWFsaXplZAogYnl0ZSBzdHJlYW0gYXZhaWxhYmxlIGluIG1haW4gbWVtb3J5IChmb3IgZXhhbXBsZSwgYnkgcmVhZGluZyBmcm9tIGEgZmlsZSkuIFRoZQpAQCAtMTQyLDExICsxNTEsMTIgQEAKIGZ1bmN0aW9uIGlzIHRoZSBudW1iZXIgb2YgZGVjb2RlZCBwYXR0ZXJucywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcgbmVnYXRpdmUKIGVycm9yIGNvZGVzOgogPHByZT4KLSAgUENSRTJfRVJST1JfQkFEREFUQSAgIHNlY29uZCBhcmd1bWVudCBpcyB6ZXJvIG9yIGxlc3MKLSAgUENSRTJfRVJST1JfQkFETUFHSUMgIG1pc21hdGNoIG9mIGlkIGJ5dGVzIGluIHRoZSBkYXRhCi0gIFBDUkUyX0VSUk9SX0JBRE1PREUgICBtaXNtYXRjaCBvZiB2YXJpYWJsZSB1bml0IHNpemUgb3IgUENSRTIgdmVyc2lvbgotICBQQ1JFMl9FUlJPUl9NRU1PUlkgICAgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkCi0gIFBDUkUyX0VSUk9SX05VTEwgICAgICBmaXJzdCBvciB0aGlyZCBhcmd1bWVudCBpcyBOVUxMCisgIFBDUkUyX0VSUk9SX0JBRERBVEEgICAgc2Vjb25kIGFyZ3VtZW50IGlzIHplcm8gb3IgbGVzcworICBQQ1JFMl9FUlJPUl9CQURNQUdJQyAgIG1pc21hdGNoIG9mIGlkIGJ5dGVzIGluIHRoZSBkYXRhCisgIFBDUkUyX0VSUk9SX0JBRE1PREUgICAgbWlzbWF0Y2ggb2YgY29kZSB1bml0IHNpemUgb3IgUENSRTIgdmVyc2lvbgorICBQQ1JFMl9FUlJPUl9CQURTRVJJQUxJWkVEREFUQSAgb3RoZXIgc2FuaXR5IGNoZWNrIGZhaWx1cmUKKyAgUENSRTJfRVJST1JfTUVNT1JZICAgICBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQKKyAgUENSRTJfRVJST1JfTlVMTCAgICAgICBmaXJzdCBvciB0aGlyZCBhcmd1bWVudCBpcyBOVUxMCiA8L3ByZT4KIFBDUkUyX0VSUk9SX0JBRE1BR0lDIG1heSBtZWFuIHRoYXQgdGhlIGRhdGEgaXMgY29ycnVwdCwgb3IgdGhhdCBpdCB3YXMgY29tcGlsZWQKIG9uIGEgc3lzdGVtIHdpdGggZGlmZmVyZW50IGVuZGlhbm5lc3MuCkBAIC0xNjksNyArMTc5LDcgQEAKIHNhdmUvcmVzdG9yZSBjeWNsZS4gWW91IGNhbiwgaG93ZXZlciwgcHJvY2VzcyBhIHJlc3RvcmVkIHBhdHRlcm4gd2l0aAogPGI+cGNyZTJfaml0X2NvbXBpbGUoKTwvYj4gaWYgeW91IHdpc2guCiA8L1A+Ci08YnI+PGEgbmFtZT0iU0VDNCIgaHJlZj0iI1RPQzEiPkFVVEhPUjwvYT48YnI+Cis8YnI+PGEgbmFtZT0iU0VDNSIgaHJlZj0iI1RPQzEiPkFVVEhPUjwvYT48YnI+CiA8UD4KIFBoaWxpcCBIYXplbAogPGJyPgpAQCAtMTc4LDExICsxODgsMTEgQEAKIENhbWJyaWRnZSwgRW5nbGFuZC4KIDxicj4KIDwvUD4KLTxicj48YSBuYW1lPSJTRUM1IiBocmVmPSIjVE9DMSI+UkVWSVNJT048L2E+PGJyPgorPGJyPjxhIG5hbWU9IlNFQzYiIGhyZWY9IiNUT0MxIj5SRVZJU0lPTjwvYT48YnI+CiA8UD4KLUxhc3QgdXBkYXRlZDogMDMgTm92ZW1iZXIgMjAxNQorTGFzdCB1cGRhdGVkOiAyNCBNYXkgMjAxNgogPGJyPgotQ29weXJpZ2h0ICZjb3B5OyAxOTk3LTIwMTUgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UuCitDb3B5cmlnaHQgJmNvcHk7IDE5OTctMjAxNiBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZS4KIDxicj4KIDxwPgogUmV0dXJuIHRvIHRoZSA8YSBocmVmPSJpbmRleC5odG1sIj5QQ1JFMiBpbmRleCBwYWdlPC9hPi4KZGlmZiAtLWdpdCBhL2Rpc3QyL2RvYy9odG1sL3BjcmUydGVzdC5odG1sIGIvZGlzdDIvZG9jL2h0bWwvcGNyZTJ0ZXN0Lmh0bWwKaW5kZXggNTM3OTg1ZC4uMTdiMzA4ZSAxMDA2NDQKLS0tIGEvZGlzdDIvZG9jL2h0bWwvcGNyZTJ0ZXN0Lmh0bWwKKysrIGIvZGlzdDIvZG9jL2h0bWwvcGNyZTJ0ZXN0Lmh0bWwKQEAgLTk4LDEwICs5OCwxMSBAQAogPC9QPgogPFA+CiBGb3IgbWF4aW11bSBwb3J0YWJpbGl0eSwgdGhlcmVmb3JlLCBpdCBpcyBzYWZlc3QgdG8gYXZvaWQgbm9uLXByaW50aW5nCi1jaGFyYWN0ZXJzIGluIDxiPnBjcmUydGVzdDwvYj4gaW5wdXQgZmlsZXMuIFRoZXJlIGlzIGEgZmFjaWxpdHkgZm9yIHNwZWNpZnlpbmcgYQotcGF0dGVybidzIGNoYXJhY3RlcnMgYXMgaGV4YWRlY2ltYWwgcGFpcnMsIHRodXMgbWFraW5nIGl0IHBvc3NpYmxlIHRvIGluY2x1ZGUKLWJpbmFyeSB6ZXJvZXMgaW4gYSBwYXR0ZXJuIGZvciB0ZXN0aW5nIHB1cnBvc2VzLiBTdWJqZWN0IGxpbmVzIGFyZSBwcm9jZXNzZWQKLWZvciBiYWNrc2xhc2ggZXNjYXBlcywgd2hpY2ggbWFrZXMgaXQgcG9zc2libGUgdG8gaW5jbHVkZSBhbnkgZGF0YSB2YWx1ZS4KK2NoYXJhY3RlcnMgaW4gPGI+cGNyZTJ0ZXN0PC9iPiBpbnB1dCBmaWxlcy4gVGhlcmUgaXMgYSBmYWNpbGl0eSBmb3Igc3BlY2lmeWluZworc29tZSBvciBhbGwgb2YgYSBwYXR0ZXJuJ3MgY2hhcmFjdGVycyBhcyBoZXhhZGVjaW1hbCBwYWlycywgdGh1cyBtYWtpbmcgaXQKK3Bvc3NpYmxlIHRvIGluY2x1ZGUgYmluYXJ5IHplcm9lcyBpbiBhIHBhdHRlcm4gZm9yIHRlc3RpbmcgcHVycG9zZXMuIFN1YmplY3QKK2xpbmVzIGFyZSBwcm9jZXNzZWQgZm9yIGJhY2tzbGFzaCBlc2NhcGVzLCB3aGljaCBtYWtlcyBpdCBwb3NzaWJsZSB0byBpbmNsdWRlCithbnkgZGF0YSB2YWx1ZS4KIDwvUD4KIDxicj48YSBuYW1lPSJTRUM0IiBocmVmPSIjVE9DMSI+Q09NTUFORCBMSU5FIE9QVElPTlM8L2E+PGJyPgogPFA+CkBAIC0xNzgsNiArMTc5LDEzIEBACiA8Yj5wY3JlMl9tYXRjaCgpPC9iPi4KIDwvUD4KIDxQPgorPGI+LWVycm9yPC9iPiA8aT5udW1iZXJbLG51bWJlciwuLi5dPC9pPgorQ2FsbCA8Yj5wY3JlMl9nZXRfZXJyb3JfbWVzc2FnZSgpPC9iPiBmb3IgZWFjaCBvZiB0aGUgZXJyb3IgbnVtYmVycyBpbiB0aGUKK2NvbW1hLXNlcGFyYXRlZCBsaXN0LCBkaXNwbGF5IHRoZSByZXN1bHRpbmcgbWVzc2FnZXMgb24gdGhlIHN0YW5kYXJkIG91dHB1dCwKK3RoZW4gZXhpdCB3aXRoIHplcm8gZXhpdCBjb2RlLiBUaGUgbnVtYmVycyBtYXkgYmUgcG9zaXRpdmUgb3IgbmVnYXRpdmUuIFRoaXMgaXMKK2EgY29udmVuaWVuY2UgZmFjaWxpdHkgZm9yIFBDUkUyIG1haW50YWluZXJzLgorPC9QPgorPFA+CiA8Yj4taGVscDwvYj4KIE91dHB1dCBhIGJyaWVmIHN1bW1hcnkgdGhlc2Ugb3B0aW9ucyBhbmQgdGhlbiBleGl0LgogPC9QPgpAQCAtMzUyLDkgKzM2MCwxMCBAQAogY29tbWFuZCBoZWxwcyBkZXRlY3QgdGVzdHMgdGhhdCBhcmUgYWNjaWRlbnRhbGx5IHB1dCBpbiB0aGUgd3JvbmcgZmlsZS4KIDxwcmU+CiAgICNwb3AgWyYjNjA7bW9kaWZpZXJzJiM2MjtdCisgICNwb3Bjb3B5IFsmIzYwO21vZGlmaWVycyYjNjI7XQogPC9wcmU+Ci1UaGlzIGNvbW1hbmQgaXMgdXNlZCB0byBtYW5pcHVsYXRlIHRoZSBzdGFjayBvZiBjb21waWxlZCBwYXR0ZXJucywgYXMgZGVzY3JpYmVkCi1pbiB0aGUgc2VjdGlvbiBlbnRpdGxlZCAiU2F2aW5nIGFuZCByZXN0b3JpbmcgY29tcGlsZWQgcGF0dGVybnMiCitUaGVzZSBjb21tYW5kcyBhcmUgdXNlZCB0byBtYW5pcHVsYXRlIHRoZSBzdGFjayBvZiBjb21waWxlZCBwYXR0ZXJucywgYXMKK2Rlc2NyaWJlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZCAiU2F2aW5nIGFuZCByZXN0b3JpbmcgY29tcGlsZWQgcGF0dGVybnMiCiA8YSBocmVmPSIjc2F2ZXJlc3RvcmUiPmJlbG93LjwvYT4KIDxwcmU+CiAgICNzYXZlICYjNjA7ZmlsZW5hbWUmIzYyOwpAQCAtNTU5LDcgKzU2OCw3IEBACiAgICAgICBkZWJ1ZyAgICAgICAgICAgICAgICAgICAgIHNhbWUgYXMgaW5mbyxmdWxsYmluY29kZQogICAgICAgZnVsbGJpbmNvZGUgICAgICAgICAgICAgICBzaG93IGJpbmFyeSBjb2RlIHdpdGggbGVuZ3RocwogICAvSSAgaW5mbyAgICAgICAgICAgICAgICAgICAgICBzaG93IGluZm8gYWJvdXQgY29tcGlsZWQgcGF0dGVybgotICAgICAgaGV4ICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuIGlzIGNvZGVkIGluIGhleGFkZWNpbWFsCisgICAgICBoZXggICAgICAgICAgICAgICAgICAgICAgIHVucXVvdGVkIGNoYXJhY3RlcnMgYXJlIGhleGFkZWNpbWFsCiAgICAgICBqaXRbPSYjNjA7bnVtYmVyJiM2MjtdICAgICAgICAgICAgdXNlIEpJVAogICAgICAgaml0ZmFzdCAgICAgICAgICAgICAgICAgICB1c2UgSklUIGZhc3QgcGF0aAogICAgICAgaml0dmVyaWZ5ICAgICAgICAgICAgICAgICB2ZXJpZnkgSklUIHVzZQpAQCAtNTcwLDcgKzU3OSw5IEBACiAgICAgICBudWxsX2NvbnRleHQgICAgICAgICAgICAgIGNvbXBpbGUgd2l0aCBhIE5VTEwgY29udGV4dAogICAgICAgcGFyZW5zX25lc3RfbGltaXQ9JiM2MDtuJiM2MjsgICAgIHNldCBtYXhpbXVtIHBhcmVudGhlc2VzIGRlcHRoCiAgICAgICBwb3NpeCAgICAgICAgICAgICAgICAgICAgIHVzZSB0aGUgUE9TSVggQVBJCisgICAgICBwb3NpeF9ub3N1YiAgICAgICAgICAgICAgIHVzZSB0aGUgUE9TSVggQVBJIHdpdGggUkVHX05PU1VCCiAgICAgICBwdXNoICAgICAgICAgICAgICAgICAgICAgIHB1c2ggY29tcGlsZWQgcGF0dGVybiBvbnRvIHRoZSBzdGFjaworICAgICAgcHVzaGNvcHkgICAgICAgICAgICAgICAgICBwdXNoIGEgY29weSBvbnRvIHRoZSBzdGFjawogICAgICAgc3RhY2tndWFyZD0mIzYwO251bWJlciYjNjI7ICAgICAgIHRlc3QgdGhlIHN0YWNrZ3VhcmQgZmVhdHVyZQogICAgICAgdGFibGVzPVswfDF8Ml0gICAgICAgICAgICBzZWxlY3QgaW50ZXJuYWwgdGFibGVzCiA8L3ByZT4KQEAgLTY1NSwyMCArNjY2LDMxIEBACiBkZWZhdWx0IHZhbHVlcykuCiA8L1A+CiA8YnI+PGI+Ci1TcGVjaWZ5aW5nIGEgcGF0dGVybiBpbiBoZXgKK1NwZWNpZnlpbmcgcGF0dGVybiBjaGFyYWN0ZXJzIGluIGhleGFkZWNpbWFsCiA8L2I+PGJyPgogPFA+Ci1UaGUgPGI+aGV4PC9iPiBtb2RpZmllciBzcGVjaWZpZXMgdGhhdCB0aGUgY2hhcmFjdGVycyBvZiB0aGUgcGF0dGVybiBhcmUgdG8gYmUKLWludGVycHJldGVkIGFzIHBhaXJzIG9mIGhleGFkZWNpbWFsIGRpZ2l0cy4gV2hpdGUgc3BhY2UgaXMgcGVybWl0dGVkIGJldHdlZW4KLXBhaXJzLiBGb3IgZXhhbXBsZToKK1RoZSA8Yj5oZXg8L2I+IG1vZGlmaWVyIHNwZWNpZmllcyB0aGF0IHRoZSBjaGFyYWN0ZXJzIG9mIHRoZSBwYXR0ZXJuLCBleGNlcHQgZm9yCitzdWJzdHJpbmdzIGVuY2xvc2VkIGluIHNpbmdsZSBvciBkb3VibGUgcXVvdGVzLCBhcmUgdG8gYmUgaW50ZXJwcmV0ZWQgYXMgcGFpcnMKK29mIGhleGFkZWNpbWFsIGRpZ2l0cy4gVGhpcyBmZWF0dXJlIGlzIHByb3ZpZGVkIGFzIGEgd2F5IG9mIGNyZWF0aW5nIHBhdHRlcm5zCit0aGF0IGNvbnRhaW4gYmluYXJ5IHplcm9zIGFuZCBvdGhlciBub24tcHJpbnRpbmcgY2hhcmFjdGVycy4gV2hpdGUgc3BhY2UgaXMKK3Blcm1pdHRlZCBiZXR3ZWVuIHBhaXJzIG9mIGRpZ2l0cy4gRm9yIGV4YW1wbGUsIHRoaXMgcGF0dGVybiBjb250YWlucyB0aHJlZQorY2hhcmFjdGVyczoKIDxwcmU+CiAgIC9hYiAzMiA1OS9oZXgKIDwvcHJlPgotVGhpcyBmZWF0dXJlIGlzIHByb3ZpZGVkIGFzIGEgd2F5IG9mIGNyZWF0aW5nIHBhdHRlcm5zIHRoYXQgY29udGFpbiBiaW5hcnkgemVybwotYW5kIG90aGVyIG5vbi1wcmludGluZyBjaGFyYWN0ZXJzLiBCeSBkZWZhdWx0LCA8Yj5wY3JlMnRlc3Q8L2I+IHBhc3NlcyBwYXR0ZXJucwotYXMgemVyby10ZXJtaW5hdGVkIHN0cmluZ3MgdG8gPGI+cGNyZTJfY29tcGlsZSgpPC9iPiwgZ2l2aW5nIHRoZSBsZW5ndGggYXMKLVBDUkUyX1pFUk9fVEVSTUlOQVRFRC4gSG93ZXZlciwgZm9yIHBhdHRlcm5zIHNwZWNpZmllZCBpbiBoZXhhZGVjaW1hbCwgdGhlCi1hY3R1YWwgbGVuZ3RoIG9mIHRoZSBwYXR0ZXJuIGlzIHBhc3NlZC4KK1BhcnRzIG9mIHN1Y2ggYSBwYXR0ZXJuIGFyZSB0YWtlbiBsaXRlcmFsbHkgaWYgcXVvdGVkLiBUaGlzIHBhdHRlcm4gY29udGFpbnMKK25pbmUgY2hhcmFjdGVycywgb25seSB0d28gb2Ygd2hpY2ggYXJlIHNwZWNpZmllZCBpbiBoZXhhZGVjaW1hbDoKKzxwcmU+CisgIC9hYiAibGl0ZXJhbCIgMzIvaGV4Cis8L3ByZT4KK0VpdGhlciBzaW5nbGUgb3IgZG91YmxlIHF1b3RlcyBtYXkgYmUgdXNlZC4gVGhlcmUgaXMgbm8gd2F5IG9mIGluY2x1ZGluZwordGhlIGRlbGltaXRlciB3aXRoaW4gYSBzdWJzdHJpbmcuCis8L1A+Cis8UD4KK0J5IGRlZmF1bHQsIDxiPnBjcmUydGVzdDwvYj4gcGFzc2VzIHBhdHRlcm5zIGFzIHplcm8tdGVybWluYXRlZCBzdHJpbmdzIHRvCis8Yj5wY3JlMl9jb21waWxlKCk8L2I+LCBnaXZpbmcgdGhlIGxlbmd0aCBhcyBQQ1JFMl9aRVJPX1RFUk1JTkFURUQuIEhvd2V2ZXIsIGZvcgorcGF0dGVybnMgc3BlY2lmaWVkIHdpdGggdGhlIDxiPmhleDwvYj4gbW9kaWZpZXIsIHRoZSBhY3R1YWwgbGVuZ3RoIG9mIHRoZQorcGF0dGVybiBpcyBwYXNzZWQuCiA8L1A+CiA8YnI+PGI+CiBHZW5lcmF0aW5nIGxvbmcgcmVwZXRpdGl2ZSBwYXR0ZXJucwpAQCAtODIxLDE2ICs4NDMsMTcgQEAKIFVzaW5nIHRoZSBQT1NJWCB3cmFwcGVyIEFQSQogPC9iPjxicj4KIDxQPgotVGhlIDxiPi9wb3NpeDwvYj4gbW9kaWZpZXIgY2F1c2VzIDxiPnBjcmUydGVzdDwvYj4gdG8gY2FsbCBQQ1JFMiB2aWEgdGhlIFBPU0lYCi13cmFwcGVyIEFQSSByYXRoZXIgdGhhbiBpdHMgbmF0aXZlIEFQSS4gVGhpcyBzdXBwb3J0cyBvbmx5IHRoZSA4LWJpdCBsaWJyYXJ5LgotTm90ZSB0aGF0IGl0IGRvZXMgbm90IGltcGx5IFBPU0lYIG1hdGNoaW5nIHNlbWFudGljczsgZm9yIG1vcmUgZGV0YWlsIHNlZSB0aGUKK1RoZSA8Yj4vcG9zaXg8L2I+IGFuZCA8Yj5wb3NpeF9ub3N1YjwvYj4gbW9kaWZpZXJzIGNhdXNlIDxiPnBjcmUydGVzdDwvYj4gdG8gY2FsbAorUENSRTIgdmlhIHRoZSBQT1NJWCB3cmFwcGVyIEFQSSByYXRoZXIgdGhhbiBpdHMgbmF0aXZlIEFQSS4gV2hlbgorPGI+cG9zaXhfbm9zdWI8L2I+IGlzIHVzZWQsIHRoZSBQT1NJWCBvcHRpb24gUkVHX05PU1VCIGlzIHBhc3NlZCB0bworPGI+cmVnY29tcCgpPC9iPi4gVGhlIFBPU0lYIHdyYXBwZXIgc3VwcG9ydHMgb25seSB0aGUgOC1iaXQgbGlicmFyeS4gTm90ZSB0aGF0CitpdCBkb2VzIG5vdCBpbXBseSBQT1NJWCBtYXRjaGluZyBzZW1hbnRpY3M7IGZvciBtb3JlIGRldGFpbCBzZWUgdGhlCiA8YSBocmVmPSJwY3JlMnBvc2l4Lmh0bWwiPjxiPnBjcmUycG9zaXg8L2I+PC9hPgotZG9jdW1lbnRhdGlvbi4gV2hlbiB0aGUgUE9TSVggQVBJIGlzIGJlaW5nIHVzZWQsIHRoZSBmb2xsb3dpbmcgcGF0dGVybgotbW9kaWZpZXJzIHNldCBvcHRpb25zIGZvciB0aGUgPGI+cmVnY29tcCgpPC9iPiBmdW5jdGlvbjoKK2RvY3VtZW50YXRpb24uIFRoZSBmb2xsb3dpbmcgcGF0dGVybiBtb2RpZmllcnMgc2V0IG9wdGlvbnMgZm9yIHRoZQorPGI+cmVnY29tcCgpPC9iPiBmdW5jdGlvbjoKIDxwcmU+CiAgIGNhc2VsZXNzICAgICAgICAgICBSRUdfSUNBU0UKICAgbXVsdGlsaW5lICAgICAgICAgIFJFR19ORVdMSU5FCi0gIG5vX2F1dG9fY2FwdHVyZSAgICBSRUdfTk9TVUIKICAgZG90YWxsICAgICAgICAgICAgIFJFR19ET1RBTEwgICAgICkKICAgdW5ncmVlZHkgICAgICAgICAgIFJFR19VTkdSRUVEWSAgICkgVGhlc2Ugb3B0aW9ucyBhcmUgbm90IHBhcnQgb2YKICAgdWNwICAgICAgICAgICAgICAgIFJFR19VQ1AgICAgICAgICkgICB0aGUgUE9TSVggc3RhbmRhcmQKQEAgLTg0Nyw3ICs4NzAsOCBAQAogPC9QPgogPFA+CiBUaGUgPGI+YWZ0ZXJ0ZXh0PC9iPiBhbmQgPGI+YWxsYWZ0ZXJ0ZXh0PC9iPiBzdWJqZWN0IG1vZGlmaWVycyB3b3JrIGFzIGRlc2NyaWJlZAotYmVsb3cuIEFsbCBvdGhlciBtb2RpZmllcnMgY2F1c2UgYW4gZXJyb3IuCitiZWxvdy4gQWxsIG90aGVyIG1vZGlmaWVycyBhcmUgZWl0aGVyIGlnbm9yZWQsIHdpdGggYSB3YXJuaW5nIG1lc3NhZ2UsIG9yIGNhdXNlCithbiBlcnJvci4KIDwvUD4KIDxicj48Yj4KIFRlc3RpbmcgdGhlIHN0YWNrIGd1YXJkIGZlYXR1cmUKQEAgLTkxNywxMiArOTQxLDE2IEBACiBsaW5lIHRvIGNvbnRhaW4gYSBuZXcgcGF0dGVybiAob3IgYSBjb21tYW5kKSBpbnN0ZWFkIG9mIGEgc3ViamVjdCBsaW5lLiBUaGlzCiBmYWNpbGl0eSBpcyB1c2VkIHdoZW4gc2F2aW5nIGNvbXBpbGVkIHBhdHRlcm5zIHRvIGEgZmlsZSwgYXMgZGVzY3JpYmVkIGluIHRoZQogc2VjdGlvbiBlbnRpdGxlZCAiU2F2aW5nIGFuZCByZXN0b3JpbmcgY29tcGlsZWQgcGF0dGVybnMiCi08YSBocmVmPSIjc2F2ZXJlc3RvcmUiPmJlbG93LjwvYT4KLVRoZSA8Yj5wdXNoPC9iPiBtb2RpZmllciBpcyBpbmNvbXBhdGlibGUgd2l0aCBjb21waWxhdGlvbiBtb2RpZmllcnMgc3VjaCBhcwotPGI+Z2xvYmFsPC9iPiB0aGF0IGFjdCBhdCBtYXRjaCB0aW1lLiBBbnkgdGhhdCBhcmUgc3BlY2lmaWVkIGFyZSBpZ25vcmVkLCB3aXRoIGEKLXdhcm5pbmcgbWVzc2FnZSwgZXhjZXB0IGZvciA8Yj5yZXBsYWNlPC9iPiwgd2hpY2ggY2F1c2VzIGFuIGVycm9yLiBOb3RlIHRoYXQsCi08Yj5qaXR2ZXJpZnk8L2I+LCB3aGljaCBpcyBhbGxvd2VkLCBkb2VzIG5vdCBjYXJyeSB0aHJvdWdoIHRvIGFueSBzdWJzZXF1ZW50Ci1tYXRjaGluZyB0aGF0IHVzZXMgdGhpcyBwYXR0ZXJuLgorPGEgaHJlZj0iI3NhdmVyZXN0b3JlIj5iZWxvdy4gSWYgPGI+cHVzaGNvcHk8L2I+IGlzIHVzZWQgaW5zdGVhZCBvZiA8Yj5wdXNoPC9iPiwgYSBjb3B5IG9mIHRoZSBjb21waWxlZDwvYT4KK3BhdHRlcm4gaXMgc3RhY2tlZCwgbGVhdmluZyB0aGUgb3JpZ2luYWwgYXMgY3VycmVudCwgcmVhZHkgdG8gbWF0Y2ggdGhlCitmb2xsb3dpbmcgaW5wdXQgbGluZXMuIFRoaXMgcHJvdmlkZXMgYSB3YXkgb2YgdGVzdGluZyB0aGUKKzxiPnBjcmUyX2NvZGVfY29weSgpPC9iPiBmdW5jdGlvbi4KK1RoZSA8Yj5wdXNoPC9iPiBhbmQgPGI+cHVzaGNvcHkgPC9iPiBtb2RpZmllcnMgYXJlIGluY29tcGF0aWJsZSB3aXRoIGNvbXBpbGF0aW9uCittb2RpZmllcnMgc3VjaCBhcyA8Yj5nbG9iYWw8L2I+IHRoYXQgYWN0IGF0IG1hdGNoIHRpbWUuIEFueSB0aGF0IGFyZSBzcGVjaWZpZWQKK2FyZSBpZ25vcmVkIChmb3IgdGhlIHN0YWNrZWQgY29weSksIHdpdGggYSB3YXJuaW5nIG1lc3NhZ2UsIGV4Y2VwdCBmb3IKKzxiPnJlcGxhY2U8L2I+LCB3aGljaCBjYXVzZXMgYW4gZXJyb3IuIE5vdGUgdGhhdCA8Yj5qaXR2ZXJpZnk8L2I+LCB3aGljaCBpcworYWxsb3dlZCwgZG9lcyBub3QgY2FycnkgdGhyb3VnaCB0byBhbnkgc3Vic2VxdWVudCBtYXRjaGluZyB0aGF0IHVzZXMgYSBzdGFja2VkCitwYXR0ZXJuLgogPGEgbmFtZT0ic3ViamVjdG1vZGlmaWVycyI+PC9hPjwvUD4KIDxicj48YSBuYW1lPSJTRUMxMSIgaHJlZj0iI1RPQzEiPlNVQkpFQ1QgTU9ESUZJRVJTPC9hPjxicj4KIDxQPgpAQCAtOTQxLDYgKzk2OSw3IEBACiAgICAgICBhbmNob3JlZCAgICAgICAgICAgICAgICAgIHNldCBQQ1JFMl9BTkNIT1JFRAogICAgICAgZGZhX3Jlc3RhcnQgICAgICAgICAgICAgICBzZXQgUENSRTJfREZBX1JFU1RBUlQKICAgICAgIGRmYV9zaG9ydGVzdCAgICAgICAgICAgICAgc2V0IFBDUkUyX0RGQV9TSE9SVEVTVAorICAgICAgbm9faml0ICAgICAgICAgICAgICAgICAgICBzZXQgUENSRTJfTk9fSklUCiAgICAgICBub191dGZfY2hlY2sgICAgICAgICAgICAgIHNldCBQQ1JFMl9OT19VVEZfQ0hFQ0sKICAgICAgIG5vdGJvbCAgICAgICAgICAgICAgICAgICAgc2V0IFBDUkUyX05PVEJPTAogICAgICAgbm90ZW1wdHkgICAgICAgICAgICAgICAgICBzZXQgUENSRTJfTk9URU1QVFkKQEAgLTk1Nyw3ICs5ODYsNyBAQAogd3JhcHBlciBBUEkgdG8gYmUgdXNlZCwgdGhlIG9ubHkgb3B0aW9uLXNldHRpbmcgbW9kaWZpZXJzIHRoYXQgaGF2ZSBhbnkgZWZmZWN0CiBhcmUgPGI+bm90Ym9sPC9iPiwgPGI+bm90ZW1wdHk8L2I+LCBhbmQgPGI+bm90ZW9sPC9iPiwgY2F1c2luZyBSRUdfTk9UQk9MLAogUkVHX05PVEVNUFRZLCBhbmQgUkVHX05PVEVPTCwgcmVzcGVjdGl2ZWx5LCB0byBiZSBwYXNzZWQgdG8gPGI+cmVnZXhlYygpPC9iPi4KLUFueSBvdGhlciBtb2RpZmllcnMgY2F1c2UgYW4gZXJyb3IuCitUaGUgb3RoZXIgbW9kaWZpZXJzIGFyZSBpZ25vcmVkLCB3aXRoIGEgd2FybmluZyBtZXNzYWdlLgogPC9QPgogPGJyPjxiPgogU2V0dGluZyBtYXRjaCBjb250cm9scwpAQCAtMTAwMSw3ICsxMDMwLDEwIEBACiAgICAgICBzdWJzdGl0dXRlX3Vuc2V0X2VtcHR5ICAgICB1c2UgUENSRTJfU1VCU1RJVFVURV9VTlNFVF9FTVBUWQogICAgICAgemVyb190ZXJtaW5hdGUgICAgICAgICAgICAgcGFzcyB0aGUgc3ViamVjdCBhcyB6ZXJvLXRlcm1pbmF0ZWQKIDwvcHJlPgotVGhlIGVmZmVjdHMgb2YgdGhlc2UgbW9kaWZpZXJzIGFyZSBkZXNjcmliZWQgaW4gdGhlIGZvbGxvd2luZyBzZWN0aW9ucy4KK1RoZSBlZmZlY3RzIG9mIHRoZXNlIG1vZGlmaWVycyBhcmUgZGVzY3JpYmVkIGluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnMuIFdoZW4KK21hdGNoaW5nIHZpYSB0aGUgUE9TSVggd3JhcHBlciBBUEksIHRoZSA8Yj5hZnRlcnRleHQ8L2I+LCA8Yj5hbGxhZnRlcnRleHQ8L2I+LAorYW5kIDxiPm92ZWN0b3I8L2I+IHN1YmplY3QgbW9kaWZpZXJzIHdvcmsgYXMgZGVzY3JpYmVkIGJlbG93LiBBbGwgb3RoZXIKK21vZGlmaWVycyBhcmUgZWl0aGVyIGlnbm9yZWQsIHdpdGggYSB3YXJuaW5nIG1lc3NhZ2UsIG9yIGNhdXNlIGFuIGVycm9yLgogPC9QPgogPGJyPjxiPgogU2hvd2luZyBtb3JlIHRleHQKQEAgLTEwNTgsNyArMTA5MCw4IEBACiBjYXB0dXJlZCBwYXJlbnRoZXNlcyBiZSBvdXRwdXQgYWZ0ZXIgYSBtYXRjaC4gQnkgZGVmYXVsdCwgb25seSB0aG9zZSB1cCB0byB0aGUKIGhpZ2hlc3Qgb25lIGFjdHVhbGx5IHVzZWQgaW4gdGhlIG1hdGNoIGFyZSBvdXRwdXQgKGNvcnJlc3BvbmRpbmcgdG8gdGhlIHJldHVybgogY29kZSBmcm9tIDxiPnBjcmUyX21hdGNoKCk8L2I+KS4gR3JvdXBzIHRoYXQgZGlkIG5vdCB0YWtlIHBhcnQgaW4gdGhlIG1hdGNoCi1hcmUgb3V0cHV0IGFzICImIzYwO3Vuc2V0JiM2MjsiLgorYXJlIG91dHB1dCBhcyAiJiM2MDt1bnNldCYjNjI7Ii4gVGhpcyBtb2RpZmllciBpcyBub3QgcmVsZXZhbnQgZm9yIERGQSBtYXRjaGluZyAod2hpY2gKK2RvZXMgbm8gY2FwdHVyaW5nKTsgaXQgaXMgaWdub3JlZCwgd2l0aCBhIHdhcm5pbmcgbWVzc2FnZSwgaWYgcHJlc2VudC4KIDwvUD4KIDxicj48Yj4KIFRlc3RpbmcgY2FsbG91dHMKQEAgLTE1MTIsNyArMTU0NSw5IEBACiBUaGlzIG91dHB1dCBpbmRpY2F0ZXMgdGhhdCBjYWxsb3V0IG51bWJlciAwIG9jY3VycmVkIGZvciBhIG1hdGNoIGF0dGVtcHQKIHN0YXJ0aW5nIGF0IHRoZSBmb3VydGggY2hhcmFjdGVyIG9mIHRoZSBzdWJqZWN0IHN0cmluZywgd2hlbiB0aGUgcG9pbnRlciB3YXMgYXQKIHRoZSBzZXZlbnRoIGNoYXJhY3RlciwgYW5kIHdoZW4gdGhlIG5leHQgcGF0dGVybiBpdGVtIHdhcyBcZC4gSnVzdAotb25lIGNpcmN1bWZsZXggaXMgb3V0cHV0IGlmIHRoZSBzdGFydCBhbmQgY3VycmVudCBwb3NpdGlvbnMgYXJlIHRoZSBzYW1lLgorb25lIGNpcmN1bWZsZXggaXMgb3V0cHV0IGlmIHRoZSBzdGFydCBhbmQgY3VycmVudCBwb3NpdGlvbnMgYXJlIHRoZSBzYW1lLCBvciBpZgordGhlIGN1cnJlbnQgcG9zaXRpb24gcHJlY2VkZXMgdGhlIHN0YXJ0IHBvc2l0aW9uLCB3aGljaCBjYW4gaGFwcGVuIGlmIHRoZQorY2FsbG91dCBpcyBpbiBhIGxvb2tiZWhpbmQgYXNzZXJ0aW9uLgogPC9QPgogPFA+CiBDYWxsb3V0cyBudW1iZXJlZCAyNTUgYXJlIGFzc3VtZWQgdG8gYmUgYXV0b21hdGljIGNhbGxvdXRzLCBpbnNlcnRlZCBhcyBhCkBAIC0xNjA0LDExICsxNjM5LDE2IEBACiA8UD4KIFdoZW4gYSBwYXR0ZXJuIHdpdGggPGI+cHVzaDwvYj4gbW9kaWZpZXIgaXMgc3VjY2Vzc2Z1bGx5IGNvbXBpbGVkLCBpdCBpcyBwdXNoZWQKIG9udG8gYSBzdGFjayBvZiBjb21waWxlZCBwYXR0ZXJucywgYW5kIDxiPnBjcmUydGVzdDwvYj4gZXhwZWN0cyB0aGUgbmV4dCBsaW5lIHRvCi1jb250YWluIGEgbmV3IHBhdHRlcm4gKG9yIGNvbW1hbmQpIGluc3RlYWQgb2YgYSBzdWJqZWN0IGxpbmUuIEJ5IHRoaXMgbWVhbnMsIGEKLW51bWJlciBvZiBwYXR0ZXJucyBjYW4gYmUgY29tcGlsZWQgYW5kIHJldGFpbmVkLiBUaGUgPGI+cHVzaDwvYj4gbW9kaWZpZXIgaXMKLWluY29tcGF0aWJsZSB3aXRoIDxiPnBvc2l4PC9iPiwgYW5kIGNvbnRyb2wgbW9kaWZpZXJzIHRoYXQgYWN0IGF0IG1hdGNoIHRpbWUgYXJlCi1pZ25vcmVkICh3aXRoIGEgbWVzc2FnZSkuIFRoZSA8Yj5qaXR2ZXJpZnk8L2I+IG1vZGlmaWVyIGFwcGxpZXMgb25seSBhdCBjb21waWxlCi10aW1lLiBUaGUgY29tbWFuZAorY29udGFpbiBhIG5ldyBwYXR0ZXJuIChvciBjb21tYW5kKSBpbnN0ZWFkIG9mIGEgc3ViamVjdCBsaW5lLiBCeSBjb250cmFzdCwKK3RoZSA8Yj5wdXNoY29weTwvYj4gbW9kaWZpZXIgY2F1c2VzIGEgY29weSBvZiB0aGUgY29tcGlsZWQgcGF0dGVybiB0byBiZQorc3RhY2tlZCwgbGVhdmluZyB0aGUgb3JpZ2luYWwgYXZhaWxhYmxlIGZvciBpbW1lZGlhdGUgbWF0Y2hpbmcuIEJ5IHVzaW5nCis8Yj5wdXNoPC9iPiBhbmQvb3IgPGI+cHVzaGNvcHk8L2I+LCBhIG51bWJlciBvZiBwYXR0ZXJucyBjYW4gYmUgY29tcGlsZWQgYW5kCityZXRhaW5lZC4gVGhlc2UgbW9kaWZpZXJzIGFyZSBpbmNvbXBhdGlibGUgd2l0aCA8Yj5wb3NpeDwvYj4sIGFuZCBjb250cm9sCittb2RpZmllcnMgdGhhdCBhY3QgYXQgbWF0Y2ggdGltZSBhcmUgaWdub3JlZCAod2l0aCBhIG1lc3NhZ2UpIGZvciB0aGUgc3RhY2tlZAorcGF0dGVybnMuIFRoZSA8Yj5qaXR2ZXJpZnk8L2I+IG1vZGlmaWVyIGFwcGxpZXMgb25seSBhdCBjb21waWxlIHRpbWUuCis8L1A+Cis8UD4KK1RoZSBjb21tYW5kCiA8cHJlPgogICAjc2F2ZSAmIzYwO2ZpbGVuYW1lJiM2MjsKIDwvcHJlPgpAQCAtMTYyNSw3ICsxNjY1LDggQEAKIG1vZGlmaWVyIGxpc3QgY29udGFpbmluZyBvbmx5CiA8YSBocmVmPSIjY29udHJvbG1vZGlmaWVycyI+Y29udHJvbCBtb2RpZmllcnM8L2E+CiB0aGF0IGFjdCBhZnRlciBhIHBhdHRlcm4gaGFzIGJlZW4gY29tcGlsZWQuIEluIHBhcnRpY3VsYXIsIDxiPmhleDwvYj4sCi08Yj5wb3NpeDwvYj4sIGFuZCA8Yj5wdXNoPC9iPiBhcmUgbm90IGFsbG93ZWQsIG5vciBhcmUgYW55Cis8Yj5wb3NpeDwvYj4sIDxiPnBvc2l4X25vc3ViPC9iPiwgPGI+cHVzaDwvYj4sIGFuZCA8Yj5wdXNoY29weTwvYj4gYXJlIG5vdCBhbGxvd2VkLAorbm9yIGFyZSBhbnkKIDxhIGhyZWY9IiNvcHRpb25tb2RpZmllcnMiPm9wdGlvbi1zZXR0aW5nIG1vZGlmaWVycy48L2E+CiBUaGUgSklUIG1vZGlmaWVycyBhcmUsIGhvd2V2ZXIgcGVybWl0dGVkLiBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBzYXZlcyBhbmQKIHJlbG9hZHMgdHdvIHBhdHRlcm5zLgpAQCAtMTY0Myw2ICsxNjg0LDExIEBACiBJZiA8Yj5qaXR2ZXJpZnk8L2I+IGlzIHVzZWQgd2l0aCAjcG9wLCBpdCBkb2VzIG5vdCBhdXRvbWF0aWNhbGx5IGltcGx5CiA8Yj5qaXQ8L2I+LCB3aGljaCBpcyBkaWZmZXJlbnQgYmVoYXZpb3VyIGZyb20gd2hlbiBpdCBpcyB1c2VkIG9uIGEgcGF0dGVybi4KIDwvUD4KKzxQPgorVGhlICNwb3Bjb3B5IGNvbW1hbmQgaXMgYW5hbGFnb3VzIHRvIHRoZSA8Yj5wdXNoY29weTwvYj4gbW9kaWZpZXIgaW4gdGhhdCBpdAorbWFrZXMgY3VycmVudCBhIGNvcHkgb2YgdGhlIHRvcG1vc3Qgc3RhY2sgcGF0dGVybiwgbGVhdmluZyB0aGUgb3JpZ2luYWwgc3RpbGwKK29uIHRoZSBzdGFjay4KKzwvUD4KIDxicj48YSBuYW1lPSJTRUMxOSIgaHJlZj0iI1RPQzEiPlNFRSBBTFNPPC9hPjxicj4KIDxQPgogPGI+cGNyZTI8L2I+KDMpLCA8Yj5wY3JlMmFwaTwvYj4oMyksIDxiPnBjcmUyY2FsbG91dDwvYj4oMyksCkBAIC0xNjYwLDkgKzE3MDYsOSBAQAogPC9QPgogPGJyPjxhIG5hbWU9IlNFQzIxIiBocmVmPSIjVE9DMSI+UkVWSVNJT048L2E+PGJyPgogPFA+Ci1MYXN0IHVwZGF0ZWQ6IDEyIERlY2VtYmVyIDIwMTUKK0xhc3QgdXBkYXRlZDogMDYgSnVseSAyMDE2CiA8YnI+Ci1Db3B5cmlnaHQgJmNvcHk7IDE5OTctMjAxNSBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZS4KK0NvcHlyaWdodCAmY29weTsgMTk5Ny0yMDE2IFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlLgogPGJyPgogPHA+CiBSZXR1cm4gdG8gdGhlIDxhIGhyZWY9ImluZGV4Lmh0bWwiPlBDUkUyIGluZGV4IHBhZ2U8L2E+LgpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL2h0bWwvcGNyZTJ1bmljb2RlLmh0bWwgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMnVuaWNvZGUuaHRtbAppbmRleCA3YWY1NWMzLi42Y2EzNjdmIDEwMDY0NAotLS0gYS9kaXN0Mi9kb2MvaHRtbC9wY3JlMnVuaWNvZGUuaHRtbAorKysgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMnVuaWNvZGUuaHRtbApAQCAtNjcsMTYgKzY3LDIwIEBACiBzaW5nbGUgY29kZSB1bml0LgogPC9QPgogPFA+Ci1UaGUgZXNjYXBlIHNlcXVlbmNlIFxDIGNhbiBiZSB1c2VkIHRvIG1hdGNoIGEgc2luZ2xlIGNvZGUgdW5pdCwgaW4gYSBVVEYgbW9kZSwKK1RoZSBlc2NhcGUgc2VxdWVuY2UgXEMgY2FuIGJlIHVzZWQgdG8gbWF0Y2ggYSBzaW5nbGUgY29kZSB1bml0IGluIGEgVVRGIG1vZGUsCiBidXQgaXRzIHVzZSBjYW4gbGVhZCB0byBzb21lIHN0cmFuZ2UgZWZmZWN0cyBiZWNhdXNlIGl0IGJyZWFrcyB1cCBtdWx0aS11bml0CiBjaGFyYWN0ZXJzIChzZWUgdGhlIGRlc2NyaXB0aW9uIG9mIFxDIGluIHRoZQogPGEgaHJlZj0icGNyZTJwYXR0ZXJuLmh0bWwiPjxiPnBjcmUycGF0dGVybjwvYj48L2E+Ci1kb2N1bWVudGF0aW9uKS4gVGhlIHVzZSBvZiBcQyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBhbHRlcm5hdGl2ZSBtYXRjaGluZwotZnVuY3Rpb24gPGI+cGNyZTJfZGZhX21hdGNoKCk8L2I+IHdoZW4gaW4gVVRGIG1vZGUuIEl0cyB1c2UgcHJvdm9rZXMgYQotbWF0Y2gtdGltZSBlcnJvci4gVGhlIEpJVCBvcHRpbWl6YXRpb24gYWxzbyBkb2VzIG5vdCBzdXBwb3J0IFxDIGluIFVURiBtb2RlLgotSWYgSklUIG9wdGltaXphdGlvbiBpcyByZXF1ZXN0ZWQgZm9yIGEgVVRGIHBhdHRlcm4gdGhhdCBjb250YWlucyBcQywgaXQgd2lsbAotbm90IHN1Y2NlZWQsIGFuZCBzbyB0aGUgbWF0Y2hpbmcgd2lsbCBiZSBjYXJyaWVkIG91dCBieSB0aGUgbm9ybWFsIGludGVycHJldGl2ZQotZnVuY3Rpb24uCitkb2N1bWVudGF0aW9uKS4KKzwvUD4KKzxQPgorVGhlIHVzZSBvZiBcQyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBhbHRlcm5hdGl2ZSBtYXRjaGluZyBmdW5jdGlvbgorPGI+cGNyZTJfZGZhX21hdGNoKCk8L2I+IHdoZW4gaW4gVVRGLTggb3IgVVRGLTE2IG1vZGUsIHRoYXQgaXMsIHdoZW4gYSBjaGFyYWN0ZXIKK21heSBjb25zaXN0IG9mIG1vcmUgdGhhbiBvbmUgY29kZSB1bml0LiBUaGUgdXNlIG9mIFxDIGluIHRoZXNlIG1vZGVzIHByb3Zva2VzCithIG1hdGNoLXRpbWUgZXJyb3IuIEFsc28sIHRoZSBKSVQgb3B0aW1pemF0aW9uIGRvZXMgbm90IHN1cHBvcnQgXEMgaW4gdGhlc2UKK21vZGVzLiBJZiBKSVQgb3B0aW1pemF0aW9uIGlzIHJlcXVlc3RlZCBmb3IgYSBVVEYtOCBvciBVVEYtMTYgcGF0dGVybiB0aGF0Citjb250YWlucyBcQywgaXQgd2lsbCBub3Qgc3VjY2VlZCwgYW5kIHNvIHdoZW4gPGI+cGNyZTJfbWF0Y2goKTwvYj4gaXMgY2FsbGVkLAordGhlIG1hdGNoaW5nIHdpbGwgYmUgY2FycmllZCBvdXQgYnkgdGhlIG5vcm1hbCBpbnRlcnByZXRpdmUgZnVuY3Rpb24uCiA8L1A+CiA8UD4KIFRoZSBjaGFyYWN0ZXIgZXNjYXBlcyBcYiwgXEIsIFxkLCBcRCwgXHMsIFxTLCBcdywgYW5kIFxXIGNvcnJlY3RseSB0ZXN0CkBAIC0yNDQsOSArMjQ4LDkgQEAKIDxQPgogVGhlIGZvbGxvd2luZyBuZWdhdGl2ZSBlcnJvciBjb2RlcyBhcmUgZ2l2ZW4gZm9yIGludmFsaWQgVVRGLTE2IHN0cmluZ3M6CiA8cHJlPgotICBQQ1JFX1VURjE2X0VSUjEgIE1pc3NpbmcgbG93IHN1cnJvZ2F0ZSBhdCBlbmQgb2Ygc3RyaW5nCi0gIFBDUkVfVVRGMTZfRVJSMiAgSW52YWxpZCBsb3cgc3Vycm9nYXRlIGZvbGxvd3MgaGlnaCBzdXJyb2dhdGUKLSAgUENSRV9VVEYxNl9FUlIzICBJc29sYXRlZCBsb3cgc3Vycm9nYXRlCisgIFBDUkUyX0VSUk9SX1VURjE2X0VSUjEgIE1pc3NpbmcgbG93IHN1cnJvZ2F0ZSBhdCBlbmQgb2Ygc3RyaW5nCisgIFBDUkUyX0VSUk9SX1VURjE2X0VSUjIgIEludmFsaWQgbG93IHN1cnJvZ2F0ZSBmb2xsb3dzIGhpZ2ggc3Vycm9nYXRlCisgIFBDUkUyX0VSUk9SX1VURjE2X0VSUjMgIElzb2xhdGVkIGxvdyBzdXJyb2dhdGUKIAogPGEgbmFtZT0idXRmMzJzdHJpbmdzIj48L2E+PC9QUkU+CiA8L1A+CkBAIC0yNTYsOCArMjYwLDggQEAKIDxQPgogVGhlIGZvbGxvd2luZyBuZWdhdGl2ZSBlcnJvciBjb2RlcyBhcmUgZ2l2ZW4gZm9yIGludmFsaWQgVVRGLTMyIHN0cmluZ3M6CiA8cHJlPgotICBQQ1JFX1VURjMyX0VSUjEgIFN1cnJvZ2F0ZSBjaGFyYWN0ZXIgKHJhbmdlIGZyb20gMHhkODAwIHRvIDB4ZGZmZikKLSAgUENSRV9VVEYzMl9FUlIyICBDb2RlIHBvaW50IGlzIGdyZWF0ZXIgdGhhbiAweDEwZmZmZgorICBQQ1JFMl9FUlJPUl9VVEYzMl9FUlIxICBTdXJyb2dhdGUgY2hhcmFjdGVyICgweGQ4MDAgdG8gMHhkZmZmKQorICBQQ1JFMl9FUlJPUl9VVEYzMl9FUlIyICBDb2RlIHBvaW50IGlzIGdyZWF0ZXIgdGhhbiAweDEwZmZmZgogCiA8L1BSRT4KIDwvUD4KQEAgLTI3Niw5ICsyODAsOSBAQAogUkVWSVNJT04KIDwvYj48YnI+CiA8UD4KLUxhc3QgdXBkYXRlZDogMTYgT2N0b2JlciAyMDE1CitMYXN0IHVwZGF0ZWQ6IDAzIEp1bHkgMjAxNgogPGJyPgotQ29weXJpZ2h0ICZjb3B5OyAxOTk3LTIwMTUgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UuCitDb3B5cmlnaHQgJmNvcHk7IDE5OTctMjAxNiBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZS4KIDxicj4KIDxwPgogUmV0dXJuIHRvIHRoZSA8YSBocmVmPSJpbmRleC5odG1sIj5QQ1JFMiBpbmRleCBwYWdlPC9hPi4KZGlmZiAtLWdpdCBhL2Rpc3QyL2RvYy9pbmRleC5odG1sLnNyYyBiL2Rpc3QyL2RvYy9pbmRleC5odG1sLnNyYwppbmRleCBmNDU5NjU3Li43MDNjMjk4IDEwMDY0NAotLS0gYS9kaXN0Mi9kb2MvaW5kZXguaHRtbC5zcmMKKysrIGIvZGlzdDIvZG9jL2luZGV4Lmh0bWwuc3JjCkBAIC05MSw2ICs5MSw5IEBACiA8dHI+PHRkPjxhIGhyZWY9InBjcmUyX2NhbGxvdXRfZW51bWVyYXRlLmh0bWwiPnBjcmUyX2NhbGxvdXRfZW51bWVyYXRlPC9hPjwvdGQ+CiAgICAgPHRkPiZuYnNwOyZuYnNwO0VudW1lcmF0ZSBjYWxsb3V0cyBpbiBhIGNvbXBpbGVkIHBhdHRlcm48L3RkPjwvdHI+CiAKKzx0cj48dGQ+PGEgaHJlZj0icGNyZTJfY29kZV9jb3B5Lmh0bWwiPnBjcmUyX2NvZGVfY29weTwvYT48L3RkPgorICAgIDx0ZD4mbmJzcDsmbmJzcDtDb3B5IGEgY29tcGlsZWQgcGF0dGVybjwvdGQ+PC90cj4KKwogPHRyPjx0ZD48YSBocmVmPSJwY3JlMl9jb2RlX2ZyZWUuaHRtbCI+cGNyZTJfY29kZV9mcmVlPC9hPjwvdGQ+CiAgICAgPHRkPiZuYnNwOyZuYnNwO0ZyZWUgYSBjb21waWxlZCBwYXR0ZXJuPC90ZD48L3RyPgogCmRpZmYgLS1naXQgYS9kaXN0Mi9kb2MvcGNyZTIudHh0IGIvZGlzdDIvZG9jL3BjcmUyLnR4dAppbmRleCA5ZGYyZDQ3Li44ZjRlOGExIDEwMDY0NAotLS0gYS9kaXN0Mi9kb2MvcGNyZTIudHh0CisrKyBiL2Rpc3QyL2RvYy9wY3JlMi50eHQKQEAgLTM3Nyw2ICszNzcsOCBAQAogCiBQQ1JFMiBOQVRJVkUgQVBJIEFVWElMSUFSWSBGVU5DVElPTlMKIAorICAgICAgIHBjcmUyX2NvZGUgKnBjcmUyX2NvZGVfY29weShjb25zdCBwY3JlMl9jb2RlICpjb2RlKTsKKwogICAgICAgIGludCBwY3JlMl9nZXRfZXJyb3JfbWVzc2FnZShpbnQgZXJyb3Jjb2RlLCBQQ1JFMl9VQ0hBUiAqYnVmZmVyLAogICAgICAgICAgUENSRTJfU0laRSBidWZmbGVuKTsKIApAQCAtNDg3LDEwICs0ODksMTAgQEAKICAgICAgICBwY3JlMl9qaXRfc3RhY2tfYXNzaWduKCkgaW4gb3JkZXIgdG8gIGNvbnRyb2wgIHRoZSAgSklUICBjb2RlJ3MgIG1lbW9yeQogICAgICAgIHVzYWdlLgogCi0gICAgICAgSklUIG1hdGNoaW5nIGlzIGF1dG9tYXRpY2FsbHkgdXNlZCBieSBwY3JlMl9tYXRjaCgpIGlmIGl0IGlzIGF2YWlsYWJsZS4KLSAgICAgICBUaGVyZSBpcyBhbHNvIGEgZGlyZWN0IGludGVyZmFjZSBmb3IgSklUIG1hdGNoaW5nLCB3aGljaCBnaXZlcyBpbXByb3ZlZAotICAgICAgIHBlcmZvcm1hbmNlLiAgVGhlICBKSVQtc3BlY2lmaWMgZnVuY3Rpb25zIGFyZSBkaXNjdXNzZWQgaW4gdGhlIHBjcmUyaml0Ci0gICAgICAgZG9jdW1lbnRhdGlvbi4KKyAgICAgICBKSVQgbWF0Y2hpbmcgaXMgYXV0b21hdGljYWxseSB1c2VkIGJ5IHBjcmUyX21hdGNoKCkgaWYgaXQgaXMgYXZhaWxhYmxlLAorICAgICAgIHVubGVzcyB0aGUgUENSRTJfTk9fSklUIG9wdGlvbiBpcyBzZXQuIFRoZXJlIGlzIGFsc28gYSBkaXJlY3QgaW50ZXJmYWNlCisgICAgICAgZm9yICBKSVQgIG1hdGNoaW5nLCAgd2hpY2ggZ2l2ZXMgaW1wcm92ZWQgcGVyZm9ybWFuY2UuIFRoZSBKSVQtc3BlY2lmaWMKKyAgICAgICBmdW5jdGlvbnMgYXJlIGRpc2N1c3NlZCBpbiB0aGUgcGNyZTJqaXQgZG9jdW1lbnRhdGlvbi4KIAogICAgICAgIEEgc2Vjb25kIG1hdGNoaW5nIGZ1bmN0aW9uLCBwY3JlMl9kZmFfbWF0Y2goKSwgd2hpY2ggaXMgIG5vdCAgUGVybC1jb20tCiAgICAgICAgcGF0aWJsZSwgIGlzICBhbHNvICBwcm92aWRlZC4gIFRoaXMgIHVzZXMgYSBkaWZmZXJlbnQgYWxnb3JpdGhtIGZvciB0aGUKQEAgLTUyMyw3NiArNTI1LDExMyBAQAogICAgICAgIHJldHVybiBhIGNvcHkgb2YgdGhlIHN1YmplY3Qgc3RyaW5nIHdpdGggc3Vic3RpdHV0aW9ucyBmb3IgIHBhcnRzICB0aGF0CiAgICAgICAgd2VyZSBtYXRjaGVkLgogCi0gICAgICAgRmluYWxseSwgIHRoZXJlICBhcmUgZnVuY3Rpb25zIGZvciBmaW5kaW5nIG91dCBpbmZvcm1hdGlvbiBhYm91dCBhIGNvbS0KLSAgICAgICBwaWxlZCBwYXR0ZXJuIChwY3JlMl9wYXR0ZXJuX2luZm8oKSkgYW5kIGFib3V0IHRoZSAgY29uZmlndXJhdGlvbiAgd2l0aAorICAgICAgIEZ1bmN0aW9ucyAgd2hvc2UgIG5hbWVzIGJlZ2luIHdpdGggcGNyZTJfc2VyaWFsaXplXyBhcmUgdXNlZCBmb3Igc2F2aW5nCisgICAgICAgY29tcGlsZWQgcGF0dGVybnMgb24gZGlzYyBvciBlbHNld2hlcmUsIGFuZCByZWxvYWRpbmcgdGhlbSBsYXRlci4KKworICAgICAgIEZpbmFsbHksIHRoZXJlIGFyZSBmdW5jdGlvbnMgZm9yIGZpbmRpbmcgb3V0IGluZm9ybWF0aW9uIGFib3V0ICBhICBjb20tCisgICAgICAgcGlsZWQgIHBhdHRlcm4gIChwY3JlMl9wYXR0ZXJuX2luZm8oKSkgYW5kIGFib3V0IHRoZSBjb25maWd1cmF0aW9uIHdpdGgKICAgICAgICB3aGljaCBQQ1JFMiB3YXMgYnVpbHQgKHBjcmUyX2NvbmZpZygpKS4KIAorICAgICAgIEZ1bmN0aW9ucyB3aXRoIG5hbWVzIGVuZGluZyB3aXRoIF9mcmVlKCkgYXJlIHVzZWQgIGZvciAgZnJlZWluZyAgbWVtb3J5CisgICAgICAgYmxvY2tzICBvZiAgdmFyaW91cyAgc29ydHMuICBJbiBhbGwgY2FzZXMsIGlmIG9uZSBvZiB0aGVzZSBmdW5jdGlvbnMgaXMKKyAgICAgICBjYWxsZWQgd2l0aCBhIE5VTEwgYXJndW1lbnQsIGl0IGRvZXMgbm90aGluZy4KKwogCiBTVFJJTkcgTEVOR1RIUyBBTkQgT0ZGU0VUUwogCi0gICAgICAgVGhlICBQQ1JFMiAgQVBJICB1c2VzICBzdHJpbmcgIGxlbmd0aHMgYW5kIG9mZnNldHMgaW50byBzdHJpbmdzIG9mIGNvZGUKLSAgICAgICB1bml0cyBpbiBzZXZlcmFsIHBsYWNlcy4gVGhlc2UgdmFsdWVzIGFyZSBhbHdheXMgIG9mICB0eXBlICBQQ1JFMl9TSVpFLAotICAgICAgIHdoaWNoICBpcyBhbiB1bnNpZ25lZCBpbnRlZ2VyIHR5cGUsIGN1cnJlbnRseSBhbHdheXMgZGVmaW5lZCBhcyBzaXplX3QuCi0gICAgICAgVGhlIGxhcmdlc3QgIHZhbHVlICB0aGF0ICBjYW4gIGJlICBzdG9yZWQgIGluICBzdWNoICBhICB0eXBlICAodGhhdCAgaXMKLSAgICAgICB+KFBDUkUyX1NJWkUpMCkgIGlzIHJlc2VydmVkIGFzIGEgc3BlY2lhbCBpbmRpY2F0b3IgZm9yIHplcm8tdGVybWluYXRlZAotICAgICAgIHN0cmluZ3MgYW5kIHVuc2V0IG9mZnNldHMuICBUaGVyZWZvcmUsIHRoZSBsb25nZXN0IHN0cmluZyB0aGF0ICBjYW4gIGJlCisgICAgICAgVGhlIFBDUkUyIEFQSSB1c2VzIHN0cmluZyBsZW5ndGhzIGFuZCAgb2Zmc2V0cyAgaW50byAgc3RyaW5ncyAgb2YgIGNvZGUKKyAgICAgICB1bml0cyAgaW4gIHNldmVyYWwgIHBsYWNlcy4gVGhlc2UgdmFsdWVzIGFyZSBhbHdheXMgb2YgdHlwZSBQQ1JFMl9TSVpFLAorICAgICAgIHdoaWNoIGlzIGFuIHVuc2lnbmVkIGludGVnZXIgdHlwZSwgY3VycmVudGx5IGFsd2F5cyBkZWZpbmVkIGFzICBzaXplX3QuCisgICAgICAgVGhlICBsYXJnZXN0ICB2YWx1ZSAgdGhhdCAgY2FuICBiZSAgc3RvcmVkICBpbiAgc3VjaCAgYSAgdHlwZSAgKHRoYXQgaXMKKyAgICAgICB+KFBDUkUyX1NJWkUpMCkgaXMgcmVzZXJ2ZWQgYXMgYSBzcGVjaWFsIGluZGljYXRvciBmb3IgIHplcm8tdGVybWluYXRlZAorICAgICAgIHN0cmluZ3MgIGFuZCAgdW5zZXQgb2Zmc2V0cy4gIFRoZXJlZm9yZSwgdGhlIGxvbmdlc3Qgc3RyaW5nIHRoYXQgY2FuIGJlCiAgICAgICAgaGFuZGxlZCBpcyBvbmUgbGVzcyB0aGFuIHRoaXMgbWF4aW11bS4KIAogCiBORVdMSU5FUwogCiAgICAgICAgUENSRTIgc3VwcG9ydHMgZml2ZSBkaWZmZXJlbnQgY29udmVudGlvbnMgZm9yIGluZGljYXRpbmcgbGluZSBicmVha3MgaW4KLSAgICAgICBzdHJpbmdzOiBhIHNpbmdsZSBDUiAoY2FycmlhZ2UgcmV0dXJuKSBjaGFyYWN0ZXIsIGEgIHNpbmdsZSAgTEYgIChsaW5lLQorICAgICAgIHN0cmluZ3M6ICBhICBzaW5nbGUgIENSIChjYXJyaWFnZSByZXR1cm4pIGNoYXJhY3RlciwgYSBzaW5nbGUgTEYgKGxpbmUtCiAgICAgICAgZmVlZCkgY2hhcmFjdGVyLCB0aGUgdHdvLWNoYXJhY3RlciBzZXF1ZW5jZSBDUkxGLCBhbnkgb2YgdGhlIHRocmVlIHByZS0KLSAgICAgICBjZWRpbmcsIG9yIGFueSBVbmljb2RlIG5ld2xpbmUgc2VxdWVuY2UuIFRoZSBVbmljb2RlIG5ld2xpbmUgIHNlcXVlbmNlcwotICAgICAgIGFyZSAgdGhlICB0aHJlZSBqdXN0IG1lbnRpb25lZCwgcGx1cyB0aGUgc2luZ2xlIGNoYXJhY3RlcnMgVlQgKHZlcnRpY2FsCisgICAgICAgY2VkaW5nLCAgb3IgYW55IFVuaWNvZGUgbmV3bGluZSBzZXF1ZW5jZS4gVGhlIFVuaWNvZGUgbmV3bGluZSBzZXF1ZW5jZXMKKyAgICAgICBhcmUgdGhlIHRocmVlIGp1c3QgbWVudGlvbmVkLCBwbHVzIHRoZSBzaW5nbGUgY2hhcmFjdGVycyAgVlQgICh2ZXJ0aWNhbAogICAgICAgIHRhYiwgVSswMDBCKSwgRkYgKGZvcm0gZmVlZCwgVSswMDBDKSwgTkVMIChuZXh0IGxpbmUsIFUrMDA4NSksIExTIChsaW5lCiAgICAgICAgc2VwYXJhdG9yLCBVKzIwMjgpLCBhbmQgUFMgKHBhcmFncmFwaCBzZXBhcmF0b3IsIFUrMjAyOSkuCiAKLSAgICAgICBFYWNoICBvZiAgdGhlIGZpcnN0IHRocmVlIGNvbnZlbnRpb25zIGlzIHVzZWQgYnkgYXQgbGVhc3Qgb25lIG9wZXJhdGluZworICAgICAgIEVhY2ggb2YgdGhlIGZpcnN0IHRocmVlIGNvbnZlbnRpb25zIGlzIHVzZWQgYnkgYXQgbGVhc3QgIG9uZSAgb3BlcmF0aW5nCiAgICAgICAgc3lzdGVtIGFzIGl0cyBzdGFuZGFyZCBuZXdsaW5lIHNlcXVlbmNlLiBXaGVuIFBDUkUyIGlzIGJ1aWx0LCBhIGRlZmF1bHQKLSAgICAgICBjYW4gIGJlICBzcGVjaWZpZWQuICBUaGUgZGVmYXVsdCBkZWZhdWx0IGlzIExGLCB3aGljaCBpcyB0aGUgVW5peCBzdGFuLQotICAgICAgIGRhcmQuIEhvd2V2ZXIsIHRoZSBuZXdsaW5lIGNvbnZlbnRpb24gY2FuIGJlIGNoYW5nZWQgYnkgYW4gIGFwcGxpY2F0aW9uCisgICAgICAgY2FuIGJlIHNwZWNpZmllZC4gIFRoZSBkZWZhdWx0IGRlZmF1bHQgaXMgTEYsIHdoaWNoIGlzIHRoZSAgVW5peCAgc3Rhbi0KKyAgICAgICBkYXJkLiAgSG93ZXZlciwgdGhlIG5ld2xpbmUgY29udmVudGlvbiBjYW4gYmUgY2hhbmdlZCBieSBhbiBhcHBsaWNhdGlvbgogICAgICAgIHdoZW4gY2FsbGluZyBwY3JlMl9jb21waWxlKCksIG9yIGl0IGNhbiBiZSBzcGVjaWZpZWQgYnkgc3BlY2lhbCB0ZXh0IGF0CiAgICAgICAgdGhlIHN0YXJ0IG9mIHRoZSBwYXR0ZXJuIGl0c2VsZjsgdGhpcyBvdmVycmlkZXMgYW55IG90aGVyIHNldHRpbmdzLiBTZWUKICAgICAgICB0aGUgcGNyZTJwYXR0ZXJuIHBhZ2UgZm9yIGRldGFpbHMgb2YgdGhlIHNwZWNpYWwgY2hhcmFjdGVyIHNlcXVlbmNlcy4KIAotICAgICAgIEluICB0aGUgIFBDUkUyICBkb2N1bWVudGF0aW9uICB0aGUgIHdvcmQgIm5ld2xpbmUiIGlzIHVzZWQgdG8gbWVhbiAidGhlCisgICAgICAgSW4gdGhlIFBDUkUyIGRvY3VtZW50YXRpb24gdGhlIHdvcmQgIm5ld2xpbmUiICBpcyAgdXNlZCAgdG8gIG1lYW4gICJ0aGUKICAgICAgICBjaGFyYWN0ZXIgb3IgcGFpciBvZiBjaGFyYWN0ZXJzIHRoYXQgaW5kaWNhdGUgYSBsaW5lIGJyZWFrIi4gVGhlIGNob2ljZQotICAgICAgIG9mICBuZXdsaW5lIGNvbnZlbnRpb24gYWZmZWN0cyB0aGUgaGFuZGxpbmcgb2YgdGhlIGRvdCwgY2lyY3VtZmxleCwgYW5kCisgICAgICAgb2YgbmV3bGluZSBjb252ZW50aW9uIGFmZmVjdHMgdGhlIGhhbmRsaW5nIG9mIHRoZSBkb3QsIGNpcmN1bWZsZXgsICBhbmQKICAgICAgICBkb2xsYXIgbWV0YWNoYXJhY3RlcnMsIHRoZSBoYW5kbGluZyBvZiAjLWNvbW1lbnRzIGluIC94IG1vZGUsIGFuZCwgd2hlbgotICAgICAgIENSTEYgIGlzIGEgcmVjb2duaXplZCBsaW5lIGVuZGluZyBzZXF1ZW5jZSwgdGhlIG1hdGNoIHBvc2l0aW9uIGFkdmFuY2UtCisgICAgICAgQ1JMRiBpcyBhIHJlY29nbml6ZWQgbGluZSBlbmRpbmcgc2VxdWVuY2UsIHRoZSBtYXRjaCBwb3NpdGlvbiAgYWR2YW5jZS0KICAgICAgICBtZW50IGZvciBhIG5vbi1hbmNob3JlZCBwYXR0ZXJuLiBUaGVyZSBpcyBtb3JlIGRldGFpbCBhYm91dCB0aGlzIGluIHRoZQogICAgICAgIHNlY3Rpb24gb24gcGNyZTJfbWF0Y2goKSBvcHRpb25zIGJlbG93LgogCi0gICAgICAgVGhlICBjaG9pY2Ugb2YgbmV3bGluZSBjb252ZW50aW9uIGRvZXMgbm90IGFmZmVjdCB0aGUgaW50ZXJwcmV0YXRpb24gb2YKKyAgICAgICBUaGUgY2hvaWNlIG9mIG5ld2xpbmUgY29udmVudGlvbiBkb2VzIG5vdCBhZmZlY3QgdGhlIGludGVycHJldGF0aW9uICBvZgogICAgICAgIHRoZSBcbiBvciBcciBlc2NhcGUgc2VxdWVuY2VzLCBub3IgZG9lcyBpdCBhZmZlY3Qgd2hhdCBcUiBtYXRjaGVzOyB0aGlzCiAgICAgICAgaGFzIGl0cyBvd24gc2VwYXJhdGUgY29udmVudGlvbi4KIAogCiBNVUxUSVRIUkVBRElORwogCi0gICAgICAgSW4gIGEgbXVsdGl0aHJlYWRlZCBhcHBsaWNhdGlvbiBpdCBpcyBpbXBvcnRhbnQgdG8ga2VlcCB0aHJlYWQtc3BlY2lmaWMKLSAgICAgICBkYXRhIHNlcGFyYXRlIGZyb20gZGF0YSB0aGF0IGNhbiBiZSBzaGFyZWQgYmV0d2VlbiB0aHJlYWRzLiAgVGhlICBQQ1JFMgotICAgICAgIGxpYnJhcnkgIGNvZGUgIGl0c2VsZiAgaXMgIHRocmVhZC1zYWZlOiBpdCBjb250YWlucyBubyBzdGF0aWMgb3IgZ2xvYmFsCi0gICAgICAgdmFyaWFibGVzLiBUaGUgQVBJIGlzIGRlc2lnbmVkIHRvIGJlICBmYWlybHkgIHNpbXBsZSAgZm9yICBub24tdGhyZWFkZWQKLSAgICAgICBhcHBsaWNhdGlvbnMgIHdoaWxlIGF0IHRoZSBzYW1lIHRpbWUgZW5zdXJpbmcgdGhhdCBtdWx0aXRocmVhZGVkIGFwcGxpLQorICAgICAgIEluIGEgbXVsdGl0aHJlYWRlZCBhcHBsaWNhdGlvbiBpdCBpcyBpbXBvcnRhbnQgdG8ga2VlcCAgdGhyZWFkLXNwZWNpZmljCisgICAgICAgZGF0YSAgc2VwYXJhdGUgIGZyb20gZGF0YSB0aGF0IGNhbiBiZSBzaGFyZWQgYmV0d2VlbiB0aHJlYWRzLiBUaGUgUENSRTIKKyAgICAgICBsaWJyYXJ5IGNvZGUgaXRzZWxmIGlzIHRocmVhZC1zYWZlOiBpdCBjb250YWlucyAgbm8gIHN0YXRpYyAgb3IgIGdsb2JhbAorICAgICAgIHZhcmlhYmxlcy4gIFRoZSAgQVBJICBpcyAgZGVzaWduZWQgdG8gYmUgZmFpcmx5IHNpbXBsZSBmb3Igbm9uLXRocmVhZGVkCisgICAgICAgYXBwbGljYXRpb25zIHdoaWxlIGF0IHRoZSBzYW1lIHRpbWUgZW5zdXJpbmcgdGhhdCBtdWx0aXRocmVhZGVkICBhcHBsaS0KICAgICAgICBjYXRpb25zIGNhbiB1c2UgaXQuCiAKICAgICAgICBUaGVyZSBhcmUgc2V2ZXJhbCBkaWZmZXJlbnQgYmxvY2tzIG9mIGRhdGEgdGhhdCBhcmUgdXNlZCB0byBwYXNzIGluZm9yLQogICAgICAgIG1hdGlvbiBiZXR3ZWVuIHRoZSBhcHBsaWNhdGlvbiBhbmQgdGhlIFBDUkUyIGxpYnJhcmllcy4KIAotICAgICAgICgxKSBBIHBvaW50ZXIgdG8gdGhlIGNvbXBpbGVkIGZvcm0gb2YgYSBwYXR0ZXJuIGlzIHJldHVybmVkIHRvIHRoZSB1c2VyCi0gICAgICAgd2hlbiBwY3JlMl9jb21waWxlKCkgaXMgc3VjY2Vzc2Z1bC4gVGhlIGRhdGEgaW4gdGhlIGNvbXBpbGVkIHBhdHRlcm4gaXMKLSAgICAgICBmaXhlZCwgIGFuZCAgZG9lcyBub3QgY2hhbmdlIHdoZW4gdGhlIHBhdHRlcm4gaXMgbWF0Y2hlZC4gVGhlcmVmb3JlLCBpdAotICAgICAgIGlzIHRocmVhZC1zYWZlLCB0aGF0IGlzLCB0aGUgc2FtZSBjb21waWxlZCBwYXR0ZXJuIGNhbiBiZSB1c2VkIGJ5ICBtb3JlCi0gICAgICAgdGhhbiBvbmUgdGhyZWFkIHNpbXVsdGFuZW91c2x5LiBBbiBhcHBsaWNhdGlvbiBjYW4gY29tcGlsZSBhbGwgaXRzIHBhdC0KLSAgICAgICB0ZXJucyBhdCB0aGUgc3RhcnQsIGJlZm9yZSBmb3JraW5nIG9mZiBtdWx0aXBsZSB0aHJlYWRzIHRoYXQgdXNlICB0aGVtLgotICAgICAgIEhvd2V2ZXIsICBpZiAgdGhlICBqdXN0LWluLXRpbWUgIG9wdGltaXphdGlvbiBmZWF0dXJlIGlzIGJlaW5nIHVzZWQsIGl0Ci0gICAgICAgbmVlZHMgc2VwYXJhdGUgbWVtb3J5IHN0YWNrIGFyZWFzIGZvciBlYWNoICB0aHJlYWQuICBTZWUgIHRoZSAgcGNyZTJqaXQKLSAgICAgICBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGRldGFpbHMuCisgICBUaGUgY29tcGlsZWQgcGF0dGVybgogCi0gICAgICAgKDIpICBUaGUgIG5leHQgc2VjdGlvbiBiZWxvdyBpbnRyb2R1Y2VzIHRoZSBpZGVhIG9mICJjb250ZXh0cyIgaW4gd2hpY2gKKyAgICAgICBBIHBvaW50ZXIgdG8gdGhlIGNvbXBpbGVkIGZvcm0gb2YgYSBwYXR0ZXJuIGlzICByZXR1cm5lZCAgdG8gIHRoZSAgdXNlcgorICAgICAgIHdoZW4gcGNyZTJfY29tcGlsZSgpIGlzIHN1Y2Nlc3NmdWwuIFRoZSBkYXRhIGluIHRoZSBjb21waWxlZCBwYXR0ZXJuIGlzCisgICAgICAgZml4ZWQsIGFuZCBkb2VzIG5vdCBjaGFuZ2Ugd2hlbiB0aGUgcGF0dGVybiBpcyBtYXRjaGVkLiAgVGhlcmVmb3JlLCAgaXQKKyAgICAgICBpcyAgdGhyZWFkLXNhZmUsIHRoYXQgaXMsIHRoZSBzYW1lIGNvbXBpbGVkIHBhdHRlcm4gY2FuIGJlIHVzZWQgYnkgbW9yZQorICAgICAgIHRoYW4gb25lIHRocmVhZCBzaW11bHRhbmVvdXNseS4gRm9yIGV4YW1wbGUsIGFuIGFwcGxpY2F0aW9uIGNhbiBjb21waWxlCisgICAgICAgYWxsIGl0cyBwYXR0ZXJucyBhdCB0aGUgc3RhcnQsIGJlZm9yZSBmb3JraW5nIG9mZiBtdWx0aXBsZSB0aHJlYWRzIHRoYXQKKyAgICAgICB1c2UgdGhlbS4gSG93ZXZlciwgaWYgdGhlIGp1c3QtaW4tdGltZSBvcHRpbWl6YXRpb24gIGZlYXR1cmUgIGlzICBiZWluZworICAgICAgIHVzZWQsICBpdCAgbmVlZHMgIHNlcGFyYXRlICBtZW1vcnkgc3RhY2sgYXJlYXMgZm9yIGVhY2ggdGhyZWFkLiBTZWUgdGhlCisgICAgICAgcGNyZTJqaXQgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgICAgSW4gYSBtb3JlIGNvbXBsaWNhdGVkIHNpdHVhdGlvbiwgd2hlcmUgcGF0dGVybnMgYXJlIGNvbXBpbGVkIG9ubHkgIHdoZW4KKyAgICAgICB0aGV5ICBhcmUgIGZpcnN0IG5lZWRlZCwgYnV0IGFyZSBzdGlsbCBzaGFyZWQgYmV0d2VlbiB0aHJlYWRzLCBwb2ludGVycworICAgICAgIHRvIGNvbXBpbGVkIHBhdHRlcm5zIG11c3QgYmUgcHJvdGVjdGVkICBmcm9tICBzaW11bHRhbmVvdXMgIHdyaXRpbmcgIGJ5CisgICAgICAgbXVsdGlwbGUgdGhyZWFkcywgYXQgbGVhc3QgdW50aWwgYSBwYXR0ZXJuIGhhcyBiZWVuIGNvbXBpbGVkLiBUaGUgbG9naWMKKyAgICAgICBjYW4gYmUgc29tZXRoaW5nIGxpa2UgdGhpczoKKworICAgICAgICAgR2V0IGEgcmVhZC1vbmx5IChzaGFyZWQpIGxvY2sgKG11dGV4KSBmb3IgcG9pbnRlcgorICAgICAgICAgaWYgKHBvaW50ZXIgPT0gTlVMTCkKKyAgICAgICAgICAgeworICAgICAgICAgICBHZXQgYSB3cml0ZSAodW5pcXVlKSBsb2NrIGZvciBwb2ludGVyCisgICAgICAgICAgIHBvaW50ZXIgPSBwY3JlMl9jb21waWxlKC4uLgorICAgICAgICAgICB9CisgICAgICAgICBSZWxlYXNlIHRoZSBsb2NrCisgICAgICAgICBVc2UgcG9pbnRlciBpbiBwY3JlMl9tYXRjaCgpCisKKyAgICAgICBPZiBjb3Vyc2UsIHRlc3RpbmcgZm9yIGNvbXBpbGF0aW9uIGVycm9ycyBzaG91bGQgYWxzbyAgYmUgIGluY2x1ZGVkICBpbgorICAgICAgIHRoZSBjb2RlLgorCisgICAgICAgSWYgSklUIGlzIGJlaW5nIHVzZWQsIGJ1dCB0aGUgSklUIGNvbXBpbGF0aW9uIGlzIG5vdCBiZWluZyBkb25lIGltbWVkaS0KKyAgICAgICBhdGVseSwgKHBlcmhhcHMgd2FpdGluZyB0byBzZWUgaWYgdGhlIHBhdHRlcm4gIGlzICB1c2VkICBvZnRlbiAgZW5vdWdoKQorICAgICAgIHNpbWlsYXIgbG9naWMgaXMgcmVxdWlyZWQuIEpJVCBjb21waWxhdGlvbiB1cGRhdGVzIGEgcG9pbnRlciB3aXRoaW4gdGhlCisgICAgICAgY29tcGlsZWQgY29kZSBibG9jaywgc28gYSB0aHJlYWQgbXVzdCBnYWluIHVuaXF1ZSB3cml0ZSBhY2Nlc3MgIHRvICB0aGUKKyAgICAgICBwb2ludGVyICAgICBiZWZvcmUgICAgY2FsbGluZyAgICBwY3JlMl9qaXRfY29tcGlsZSgpLiAgICBBbHRlcm5hdGl2ZWx5LAorICAgICAgIHBjcmUyX2NvZGVfY29weSgpIGNhbiBiZSB1c2VkIHRvIG9idGFpbiBhIHByaXZhdGUgY29weSBvZiB0aGUgIGNvbXBpbGVkCisgICAgICAgY29kZS4KKworICAgQ29udGV4dCBibG9ja3MKKworICAgICAgIFRoZSAgbmV4dCBtYWluIHNlY3Rpb24gYmVsb3cgaW50cm9kdWNlcyB0aGUgaWRlYSBvZiAiY29udGV4dHMiIGluIHdoaWNoCiAgICAgICAgUENSRTIgZnVuY3Rpb25zIGFyZSBjYWxsZWQuIEEgY29udGV4dCBpcyBub3RoaW5nIG1vcmUgdGhhbiBhIGNvbGxlY3Rpb24KICAgICAgICBvZiBwYXJhbWV0ZXJzIHRoYXQgY29udHJvbCB0aGUgd2F5IFBDUkUyIG9wZXJhdGVzLiBHcm91cGluZyBhIG51bWJlciBvZgogICAgICAgIHBhcmFtZXRlcnMgdG9nZXRoZXIgaW4gYSBjb250ZXh0IGlzIGEgY29udmVuaWVudCB3YXkgb2YgcGFzc2luZyB0aGVtIHRvCkBAIC02MDUsNDQgKzY0NCw0NSBAQAogICAgICAgIHRocmVhZHMuIEhvd2V2ZXIsIGlmIGFueSB0aHJlYWQgbmVlZHMgdG8gY2hhbmdlIGFueSB2YWx1ZSBpbiBhIGNvbnRleHQsCiAgICAgICAgaXQgbXVzdCBtYWtlIGl0cyBvd24gdGhyZWFkLXNwZWNpZmljIGNvcHkuCiAKLSAgICAgICAoMykgVGhlIG1hdGNoaW5nIGZ1bmN0aW9ucyBuZWVkIGEgYmxvY2sgb2YgbWVtb3J5IGZvciB3b3JraW5nIHNwYWNlIGFuZAotICAgICAgIGZvciAgc3RvcmluZyAgdGhlIHJlc3VsdHMgb2YgYSBtYXRjaC4gVGhpcyBpbmNsdWRlcyBkZXRhaWxzIG9mIHdoYXQgd2FzCisgICBNYXRjaCBibG9ja3MKKworICAgICAgIFRoZSBtYXRjaGluZyBmdW5jdGlvbnMgbmVlZCBhIGJsb2NrIG9mIG1lbW9yeSBmb3Igd29ya2luZyBzcGFjZSBhbmQgZm9yCisgICAgICAgc3RvcmluZyAgdGhlICByZXN1bHRzICBvZiAgYSAgbWF0Y2guICBUaGlzIGluY2x1ZGVzIGRldGFpbHMgb2Ygd2hhdCB3YXMKICAgICAgICBtYXRjaGVkLCBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgIGluZm9ybWF0aW9uICBzdWNoICBhcyAgdGhlICBuYW1lICBvZiAgYQotICAgICAgICgqTUFSSykgIHNldHRpbmcuIEVhY2ggdGhyZWFkIG11c3QgcHJvdmlkZSBpdHMgb3duIHZlcnNpb24gb2YgdGhpcyBtZW0tCi0gICAgICAgb3J5LgorICAgICAgICgqTUFSSykgc2V0dGluZy4gRWFjaCB0aHJlYWQgbXVzdCBwcm92aWRlIGl0cyBvd24gY29weSBvZiB0aGlzIG1lbW9yeS4KIAogCiBQQ1JFMiBDT05URVhUUwogCi0gICAgICAgU29tZSBQQ1JFMiBmdW5jdGlvbnMgaGF2ZSBhIGxvdCBvZiBwYXJhbWV0ZXJzLCBtYW55IG9mIHdoaWNoICBhcmUgIHVzZWQKLSAgICAgICBvbmx5ICBieSAgc3BlY2lhbGlzdCAgYXBwbGljYXRpb25zLCAgZm9yIGV4YW1wbGUsIHRob3NlIHRoYXQgdXNlIGN1c3RvbQotICAgICAgIG1lbW9yeSBtYW5hZ2VtZW50IG9yIG5vbi1zdGFuZGFyZCBjaGFyYWN0ZXIgdGFibGVzLiAgVG8gIGtlZXAgIGZ1bmN0aW9uCi0gICAgICAgYXJndW1lbnQgIGxpc3RzICBhdCBhIHJlYXNvbmFibGUgc2l6ZSwgYW5kIGF0IHRoZSBzYW1lIHRpbWUgdG8ga2VlcCB0aGUKLSAgICAgICBBUEkgZXh0ZW5zaWJsZSwgInVuY29tbW9uIiBwYXJhbWV0ZXJzIGFyZSBwYXNzZWQgdG8gIGNlcnRhaW4gIGZ1bmN0aW9ucwotICAgICAgIGluICBhICBjb250ZXh0IGluc3RlYWQgb2YgZGlyZWN0bHkuIEEgY29udGV4dCBpcyBqdXN0IGEgYmxvY2sgb2YgbWVtb3J5Ci0gICAgICAgdGhhdCBob2xkcyB0aGUgcGFyYW1ldGVyIHZhbHVlcy4gIEFwcGxpY2F0aW9ucyAgdGhhdCAgZG8gIG5vdCAgbmVlZCAgdG8KLSAgICAgICBhZGp1c3QgIGFueSAgb2YgIHRoZSAgY29udGV4dCAgcGFyYW1ldGVycyAgY2FuIHBhc3MgTlVMTCB3aGVuIGEgY29udGV4dAorICAgICAgIFNvbWUgIFBDUkUyICBmdW5jdGlvbnMgaGF2ZSBhIGxvdCBvZiBwYXJhbWV0ZXJzLCBtYW55IG9mIHdoaWNoIGFyZSB1c2VkCisgICAgICAgb25seSBieSBzcGVjaWFsaXN0IGFwcGxpY2F0aW9ucywgZm9yIGV4YW1wbGUsICB0aG9zZSAgdGhhdCAgdXNlICBjdXN0b20KKyAgICAgICBtZW1vcnkgIG1hbmFnZW1lbnQgIG9yICBub24tc3RhbmRhcmQgY2hhcmFjdGVyIHRhYmxlcy4gVG8ga2VlcCBmdW5jdGlvbgorICAgICAgIGFyZ3VtZW50IGxpc3RzIGF0IGEgcmVhc29uYWJsZSBzaXplLCBhbmQgYXQgdGhlIHNhbWUgdGltZSB0byAga2VlcCAgdGhlCisgICAgICAgQVBJICBleHRlbnNpYmxlLCAgInVuY29tbW9uIiBwYXJhbWV0ZXJzIGFyZSBwYXNzZWQgdG8gY2VydGFpbiBmdW5jdGlvbnMKKyAgICAgICBpbiBhIGNvbnRleHQgaW5zdGVhZCBvZiBkaXJlY3RseS4gQSBjb250ZXh0IGlzIGp1c3QgYSBibG9jayAgb2YgIG1lbW9yeQorICAgICAgIHRoYXQgIGhvbGRzICB0aGUgIHBhcmFtZXRlciAgdmFsdWVzLiAgIEFwcGxpY2F0aW9ucyB0aGF0IGRvIG5vdCBuZWVkIHRvCisgICAgICAgYWRqdXN0IGFueSBvZiB0aGUgY29udGV4dCBwYXJhbWV0ZXJzICBjYW4gIHBhc3MgIE5VTEwgIHdoZW4gIGEgIGNvbnRleHQKICAgICAgICBwb2ludGVyIGlzIHJlcXVpcmVkLgogCi0gICAgICAgVGhlcmUgYXJlIHRocmVlIGRpZmZlcmVudCB0eXBlcyBvZiBjb250ZXh0OiBhIGdlbmVyYWwgY29udGV4dCAgdGhhdCAgaXMKLSAgICAgICByZWxldmFudCAgZm9yICBzZXZlcmFsICBQQ1JFMiBvcGVyYXRpb25zLCBhIGNvbXBpbGUtdGltZSBjb250ZXh0LCBhbmQgYQorICAgICAgIFRoZXJlICBhcmUgIHRocmVlIGRpZmZlcmVudCB0eXBlcyBvZiBjb250ZXh0OiBhIGdlbmVyYWwgY29udGV4dCB0aGF0IGlzCisgICAgICAgcmVsZXZhbnQgZm9yIHNldmVyYWwgUENSRTIgb3BlcmF0aW9ucywgYSBjb21waWxlLXRpbWUgIGNvbnRleHQsICBhbmQgIGEKICAgICAgICBtYXRjaC10aW1lIGNvbnRleHQuCiAKICAgIFRoZSBnZW5lcmFsIGNvbnRleHQKIAotICAgICAgIEF0IHByZXNlbnQsIHRoaXMgY29udGV4dCBqdXN0ICBjb250YWlucyAgcG9pbnRlcnMgIHRvICAoYW5kICBkYXRhICBmb3IpCi0gICAgICAgZXh0ZXJuYWwgIG1lbW9yeSAgbWFuYWdlbWVudCAgZnVuY3Rpb25zICB0aGF0ICBhcmUgIGNhbGxlZCBmcm9tIHNldmVyYWwKKyAgICAgICBBdCAgcHJlc2VudCwgIHRoaXMgIGNvbnRleHQgIGp1c3QgIGNvbnRhaW5zICBwb2ludGVycyB0byAoYW5kIGRhdGEgZm9yKQorICAgICAgIGV4dGVybmFsIG1lbW9yeSBtYW5hZ2VtZW50ICBmdW5jdGlvbnMgIHRoYXQgIGFyZSAgY2FsbGVkICBmcm9tICBzZXZlcmFsCiAgICAgICAgcGxhY2VzIGluIHRoZSBQQ1JFMiBsaWJyYXJ5LiBUaGUgY29udGV4dCBpcyBuYW1lZCBgZ2VuZXJhbCcgcmF0aGVyIHRoYW4KLSAgICAgICBzcGVjaWZpY2FsbHkgIGBtZW1vcnknICBiZWNhdXNlIGluIGZ1dHVyZSBvdGhlciBmaWVsZHMgbWF5IGJlIGFkZGVkLiBJZgotICAgICAgIHlvdSBkbyBub3Qgd2FudCB0byBzdXBwbHkgeW91ciBvd24gY3VzdG9tIG1lbW9yeSBtYW5hZ2VtZW50ICBmdW5jdGlvbnMsCi0gICAgICAgeW91ICBkbyBub3QgbmVlZCB0byBib3RoZXIgd2l0aCBhIGdlbmVyYWwgY29udGV4dC4gQSBnZW5lcmFsIGNvbnRleHQgaXMKKyAgICAgICBzcGVjaWZpY2FsbHkgYG1lbW9yeScgYmVjYXVzZSBpbiBmdXR1cmUgb3RoZXIgZmllbGRzIG1heSBiZSAgYWRkZWQuICBJZgorICAgICAgIHlvdSAgZG8gbm90IHdhbnQgdG8gc3VwcGx5IHlvdXIgb3duIGN1c3RvbSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMsCisgICAgICAgeW91IGRvIG5vdCBuZWVkIHRvIGJvdGhlciB3aXRoIGEgZ2VuZXJhbCBjb250ZXh0LiBBIGdlbmVyYWwgY29udGV4dCAgaXMKICAgICAgICBjcmVhdGVkIGJ5OgogCiAgICAgICAgcGNyZTJfZ2VuZXJhbF9jb250ZXh0ICpwY3JlMl9nZW5lcmFsX2NvbnRleHRfY3JlYXRlKAogICAgICAgICAgdm9pZCAqKCpwcml2YXRlX21hbGxvYykoUENSRTJfU0laRSwgdm9pZCAqKSwKICAgICAgICAgIHZvaWQgKCpwcml2YXRlX2ZyZWUpKHZvaWQgKiwgdm9pZCAqKSwgdm9pZCAqbWVtb3J5X2RhdGEpOwogCi0gICAgICAgVGhlIHR3byBmdW5jdGlvbiBwb2ludGVycyBzcGVjaWZ5IGN1c3RvbSBtZW1vcnkgIG1hbmFnZW1lbnQgIGZ1bmN0aW9ucywKKyAgICAgICBUaGUgIHR3byAgZnVuY3Rpb24gcG9pbnRlcnMgc3BlY2lmeSBjdXN0b20gbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zLAogICAgICAgIHdob3NlIHByb3RvdHlwZXMgYXJlOgogCiAgICAgICAgICB2b2lkICpwcml2YXRlX21hbGxvYyhQQ1JFMl9TSVpFLCB2b2lkICopOwpAQCAtNjUwLDE2ICs2OTAsMTYgQEAKIAogICAgICAgIFdoZW5ldmVyIGNvZGUgaW4gUENSRTIgY2FsbHMgdGhlc2UgZnVuY3Rpb25zLCB0aGUgZmluYWwgYXJndW1lbnQgaXMgdGhlCiAgICAgICAgdmFsdWUgb2YgbWVtb3J5X2RhdGEuIEVpdGhlciBvZiB0aGUgZmlyc3QgdHdvIGFyZ3VtZW50cyBvZiB0aGUgY3JlYXRpb24KLSAgICAgICBmdW5jdGlvbiAgbWF5IGJlIE5VTEwsIGluIHdoaWNoIGNhc2UgdGhlIHN5c3RlbSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jLQotICAgICAgIHRpb25zIG1hbGxvYygpIGFuZCBmcmVlKCkgYXJlIHVzZWQuIChUaGlzIGlzIG5vdCBjdXJyZW50bHkgIHVzZWZ1bCwgIGFzCi0gICAgICAgdGhlcmUgIGFyZSAgbm8gIG90aGVyICBmaWVsZHMgaW4gYSBnZW5lcmFsIGNvbnRleHQsIGJ1dCBpbiBmdXR1cmUgdGhlcmUKLSAgICAgICBtaWdodCBiZS4pICBUaGUgcHJpdmF0ZV9tYWxsb2MoKSBmdW5jdGlvbiAgaXMgIHVzZWQgIChpZiAgc3VwcGxpZWQpICB0bwotICAgICAgIG9idGFpbiAgbWVtb3J5ICBmb3Igc3RvcmluZyB0aGUgY29udGV4dCwgYW5kIGFsbCB0aHJlZSB2YWx1ZXMgYXJlIHNhdmVkCisgICAgICAgZnVuY3Rpb24gbWF5IGJlIE5VTEwsIGluIHdoaWNoIGNhc2UgdGhlIHN5c3RlbSBtZW1vcnkgbWFuYWdlbWVudCAgZnVuYy0KKyAgICAgICB0aW9ucyAgbWFsbG9jKCkgIGFuZCBmcmVlKCkgYXJlIHVzZWQuIChUaGlzIGlzIG5vdCBjdXJyZW50bHkgdXNlZnVsLCBhcworICAgICAgIHRoZXJlIGFyZSBubyBvdGhlciBmaWVsZHMgaW4gYSBnZW5lcmFsIGNvbnRleHQsICBidXQgIGluICBmdXR1cmUgIHRoZXJlCisgICAgICAgbWlnaHQgIGJlLikgICBUaGUgIHByaXZhdGVfbWFsbG9jKCkgIGZ1bmN0aW9uICBpcyB1c2VkIChpZiBzdXBwbGllZCkgdG8KKyAgICAgICBvYnRhaW4gbWVtb3J5IGZvciBzdG9yaW5nIHRoZSBjb250ZXh0LCBhbmQgYWxsIHRocmVlIHZhbHVlcyAgYXJlICBzYXZlZAogICAgICAgIGFzIHBhcnQgb2YgdGhlIGNvbnRleHQuCiAKLSAgICAgICBXaGVuZXZlciBQQ1JFMiBjcmVhdGVzIGEgZGF0YSBibG9jayBvZiBhbnkga2luZCwgdGhlIGJsb2NrICBjb250YWlucyAgYQotICAgICAgIHBvaW50ZXIgIHRvIHRoZSBmcmVlKCkgZnVuY3Rpb24gdGhhdCBtYXRjaGVzIHRoZSBtYWxsb2MoKSBmdW5jdGlvbiB0aGF0Ci0gICAgICAgd2FzIHVzZWQuIFdoZW4gdGhlIHRpbWUgY29tZXMgdG8gIGZyZWUgIHRoZSAgYmxvY2ssICB0aGlzICBmdW5jdGlvbiAgaXMKKyAgICAgICBXaGVuZXZlciAgUENSRTIgIGNyZWF0ZXMgYSBkYXRhIGJsb2NrIG9mIGFueSBraW5kLCB0aGUgYmxvY2sgY29udGFpbnMgYQorICAgICAgIHBvaW50ZXIgdG8gdGhlIGZyZWUoKSBmdW5jdGlvbiB0aGF0IG1hdGNoZXMgdGhlIG1hbGxvYygpIGZ1bmN0aW9uICB0aGF0CisgICAgICAgd2FzICB1c2VkLiAgV2hlbiAgdGhlICB0aW1lICBjb21lcyAgdG8gZnJlZSB0aGUgYmxvY2ssIHRoaXMgZnVuY3Rpb24gaXMKICAgICAgICBjYWxsZWQuCiAKICAgICAgICBBIGdlbmVyYWwgY29udGV4dCBjYW4gYmUgY29waWVkIGJ5IGNhbGxpbmc6CkBAIC02NzQsNyArNzE0LDcgQEAKIAogICAgVGhlIGNvbXBpbGUgY29udGV4dAogCi0gICAgICAgQSAgY29tcGlsZSBjb250ZXh0IGlzIHJlcXVpcmVkIGlmIHlvdSB3YW50IHRvIGNoYW5nZSB0aGUgZGVmYXVsdCB2YWx1ZXMKKyAgICAgICBBIGNvbXBpbGUgY29udGV4dCBpcyByZXF1aXJlZCBpZiB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgIHZhbHVlcwogICAgICAgIG9mIGFueSBvZiB0aGUgZm9sbG93aW5nIGNvbXBpbGUtdGltZSBwYXJhbWV0ZXJzOgogCiAgICAgICAgICBXaGF0IFxSIG1hdGNoZXMgKFVuaWNvZGUgbmV3bGluZXMgb3IgQ1IsIExGLCBDUkxGIG9ubHkpCkBAIC02ODQsMTEgKzcyNCwxMSBAQAogICAgICAgICAgVGhlIG1heGltdW0gbGVuZ3RoIG9mIHRoZSBwYXR0ZXJuIHN0cmluZwogICAgICAgICAgQW4gZXh0ZXJuYWwgZnVuY3Rpb24gZm9yIHN0YWNrIGNoZWNraW5nCiAKLSAgICAgICBBIGNvbXBpbGUgY29udGV4dCBpcyBhbHNvIHJlcXVpcmVkIGlmIHlvdSBhcmUgdXNpbmcgY3VzdG9tIG1lbW9yeSAgbWFuLQotICAgICAgIGFnZW1lbnQuICAgSWYgIG5vbmUgb2YgdGhlc2UgYXBwbHksIGp1c3QgcGFzcyBOVUxMIGFzIHRoZSBjb250ZXh0IGFyZ3UtCisgICAgICAgQSAgY29tcGlsZSBjb250ZXh0IGlzIGFsc28gcmVxdWlyZWQgaWYgeW91IGFyZSB1c2luZyBjdXN0b20gbWVtb3J5IG1hbi0KKyAgICAgICBhZ2VtZW50LiAgSWYgbm9uZSBvZiB0aGVzZSBhcHBseSwganVzdCBwYXNzIE5VTEwgYXMgdGhlICBjb250ZXh0ICBhcmd1LQogICAgICAgIG1lbnQgb2YgcGNyZTJfY29tcGlsZSgpLgogCi0gICAgICAgQSBjb21waWxlIGNvbnRleHQgaXMgY3JlYXRlZCwgY29waWVkLCBhbmQgZnJlZWQgYnkgdGhlIGZvbGxvd2luZyAgZnVuYy0KKyAgICAgICBBICBjb21waWxlIGNvbnRleHQgaXMgY3JlYXRlZCwgY29waWVkLCBhbmQgZnJlZWQgYnkgdGhlIGZvbGxvd2luZyBmdW5jLQogICAgICAgIHRpb25zOgogCiAgICAgICAgcGNyZTJfY29tcGlsZV9jb250ZXh0ICpwY3JlMl9jb21waWxlX2NvbnRleHRfY3JlYXRlKApAQCAtNjk5LDMzICs3MzksMzMgQEAKIAogICAgICAgIHZvaWQgcGNyZTJfY29tcGlsZV9jb250ZXh0X2ZyZWUocGNyZTJfY29tcGlsZV9jb250ZXh0ICpjY29udGV4dCk7CiAKLSAgICAgICBBICBjb21waWxlICBjb250ZXh0ICBpcyBjcmVhdGVkIHdpdGggZGVmYXVsdCB2YWx1ZXMgZm9yIGl0cyBwYXJhbWV0ZXJzLgorICAgICAgIEEgY29tcGlsZSBjb250ZXh0IGlzIGNyZWF0ZWQgd2l0aCBkZWZhdWx0IHZhbHVlcyAgZm9yICBpdHMgIHBhcmFtZXRlcnMuCiAgICAgICAgVGhlc2UgY2FuIGJlIGNoYW5nZWQgYnkgY2FsbGluZyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucywgd2hpY2ggcmV0dXJuIDAKICAgICAgICBvbiBzdWNjZXNzLCBvciBQQ1JFMl9FUlJPUl9CQUREQVRBIGlmIGludmFsaWQgZGF0YSBpcyBkZXRlY3RlZC4KIAogICAgICAgIGludCBwY3JlMl9zZXRfYnNyKHBjcmUyX2NvbXBpbGVfY29udGV4dCAqY2NvbnRleHQsCiAgICAgICAgICB1aW50MzJfdCB2YWx1ZSk7CiAKLSAgICAgICBUaGUgIHZhbHVlICBtdXN0ICBiZSBQQ1JFMl9CU1JfQU5ZQ1JMRiwgdG8gc3BlY2lmeSB0aGF0IFxSIG1hdGNoZXMgb25seQotICAgICAgIENSLCBMRiwgb3IgQ1JMRiwgb3IgUENSRTJfQlNSX1VOSUNPREUsIHRvIHNwZWNpZnkgdGhhdCBcUiAgbWF0Y2hlcyAgYW55CisgICAgICAgVGhlIHZhbHVlIG11c3QgYmUgUENSRTJfQlNSX0FOWUNSTEYsIHRvIHNwZWNpZnkgdGhhdCAgXFIgIG1hdGNoZXMgIG9ubHkKKyAgICAgICBDUiwgIExGLCAgb3IgQ1JMRiwgb3IgUENSRTJfQlNSX1VOSUNPREUsIHRvIHNwZWNpZnkgdGhhdCBcUiBtYXRjaGVzIGFueQogICAgICAgIFVuaWNvZGUgbGluZSBlbmRpbmcgc2VxdWVuY2UuIFRoZSB2YWx1ZSBpcyB1c2VkIGJ5IHRoZSBKSVQgY29tcGlsZXIgYW5kCi0gICAgICAgYnkgIHRoZSAgdHdvICBpbnRlcnByZXRlZCAgIG1hdGNoaW5nICAgZnVuY3Rpb25zLCAgIHBjcmUyX21hdGNoKCkgICBhbmQKKyAgICAgICBieSAgIHRoZSAgIHR3byAgIGludGVycHJldGVkICAgbWF0Y2hpbmcgIGZ1bmN0aW9ucywgIHBjcmUyX21hdGNoKCkgIGFuZAogICAgICAgIHBjcmUyX2RmYV9tYXRjaCgpLgogCiAgICAgICAgaW50IHBjcmUyX3NldF9jaGFyYWN0ZXJfdGFibGVzKHBjcmUyX2NvbXBpbGVfY29udGV4dCAqY2NvbnRleHQsCiAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICp0YWJsZXMpOwogCi0gICAgICAgVGhlICB2YWx1ZSAgbXVzdCAgYmUgIHRoZSByZXN1bHQgb2YgYSBjYWxsIHRvIHBjcmUyX21ha2V0YWJsZXMoKSwgd2hvc2UKKyAgICAgICBUaGUgdmFsdWUgbXVzdCBiZSB0aGUgcmVzdWx0IG9mIGEgIGNhbGwgIHRvICBwY3JlMl9tYWtldGFibGVzKCksICB3aG9zZQogICAgICAgIG9ubHkgYXJndW1lbnQgaXMgYSBnZW5lcmFsIGNvbnRleHQuIFRoaXMgZnVuY3Rpb24gYnVpbGRzIGEgc2V0IG9mIGNoYXItCiAgICAgICAgYWN0ZXIgdGFibGVzIGluIHRoZSBjdXJyZW50IGxvY2FsZS4KIAogICAgICAgIGludCBwY3JlMl9zZXRfbWF4X3BhdHRlcm5fbGVuZ3RoKHBjcmUyX2NvbXBpbGVfY29udGV4dCAqY2NvbnRleHQsCiAgICAgICAgICBQQ1JFMl9TSVpFIHZhbHVlKTsKIAotICAgICAgIFRoaXMgIHNldHMgYSBtYXhpbXVtIGxlbmd0aCwgaW4gY29kZSB1bml0cywgZm9yIHRoZSBwYXR0ZXJuIHN0cmluZyB0aGF0Ci0gICAgICAgaXMgdG8gYmUgY29tcGlsZWQuIElmIHRoZSBwYXR0ZXJuIGlzIGxvbmdlciwgIGFuICBlcnJvciAgaXMgIGdlbmVyYXRlZC4KLSAgICAgICBUaGlzICBmYWNpbGl0eSAgaXMgIHByb3ZpZGVkICBzbyB0aGF0IGFwcGxpY2F0aW9ucyB0aGF0IGFjY2VwdCBwYXR0ZXJucwotICAgICAgIGZyb20gZXh0ZXJuYWwgc291cmNlcyBjYW4gbGltaXQgdGhlaXIgc2l6ZS4gVGhlIGRlZmF1bHQgaXMgdGhlICBsYXJnZXN0CisgICAgICAgVGhpcyBzZXRzIGEgbWF4aW11bSBsZW5ndGgsIGluIGNvZGUgdW5pdHMsIGZvciB0aGUgcGF0dGVybiBzdHJpbmcgIHRoYXQKKyAgICAgICBpcyAgdG8gIGJlICBjb21waWxlZC4gIElmIHRoZSBwYXR0ZXJuIGlzIGxvbmdlciwgYW4gZXJyb3IgaXMgZ2VuZXJhdGVkLgorICAgICAgIFRoaXMgZmFjaWxpdHkgaXMgcHJvdmlkZWQgc28gdGhhdCAgYXBwbGljYXRpb25zICB0aGF0ICBhY2NlcHQgIHBhdHRlcm5zCisgICAgICAgZnJvbSAgZXh0ZXJuYWwgc291cmNlcyBjYW4gbGltaXQgdGhlaXIgc2l6ZS4gVGhlIGRlZmF1bHQgaXMgdGhlIGxhcmdlc3QKICAgICAgICBudW1iZXIgdGhhdCBhIFBDUkUyX1NJWkUgdmFyaWFibGUgY2FuIGhvbGQsIHdoaWNoIGlzIGVmZmVjdGl2ZWx5IHVubGltLQogICAgICAgIGl0ZWQuCiAKQEAgLTczMywzOCArNzczLDM4IEBACiAgICAgICAgICB1aW50MzJfdCB2YWx1ZSk7CiAKICAgICAgICBUaGlzIHNwZWNpZmllcyB3aGljaCBjaGFyYWN0ZXJzIG9yIGNoYXJhY3RlciBzZXF1ZW5jZXMgYXJlIHRvIGJlIHJlY29nLQotICAgICAgIG5pemVkICBhcyBuZXdsaW5lcy4gVGhlIHZhbHVlIG11c3QgYmUgb25lIG9mIFBDUkUyX05FV0xJTkVfQ1IgKGNhcnJpYWdlCisgICAgICAgbml6ZWQgYXMgbmV3bGluZXMuIFRoZSB2YWx1ZSBtdXN0IGJlIG9uZSBvZiBQQ1JFMl9ORVdMSU5FX0NSICAoY2FycmlhZ2UKICAgICAgICByZXR1cm4gb25seSksIFBDUkUyX05FV0xJTkVfTEYgKGxpbmVmZWVkIG9ubHkpLCBQQ1JFMl9ORVdMSU5FX0NSTEYgKHRoZQotICAgICAgIHR3by1jaGFyYWN0ZXIgIHNlcXVlbmNlICBDUiBmb2xsb3dlZCBieSBMRiksIFBDUkUyX05FV0xJTkVfQU5ZQ1JMRiAoYW55CisgICAgICAgdHdvLWNoYXJhY3RlciBzZXF1ZW5jZSBDUiBmb2xsb3dlZCBieSBMRiksICBQQ1JFMl9ORVdMSU5FX0FOWUNSTEYgIChhbnkKICAgICAgICBvZiB0aGUgYWJvdmUpLCBvciBQQ1JFMl9ORVdMSU5FX0FOWSAoYW55IFVuaWNvZGUgbmV3bGluZSBzZXF1ZW5jZSkuCiAKICAgICAgICBXaGVuIGEgcGF0dGVybiBpcyBjb21waWxlZCB3aXRoIHRoZSBQQ1JFMl9FWFRFTkRFRCBvcHRpb24sIHRoZSB2YWx1ZSBvZgotICAgICAgIHRoaXMgIHBhcmFtZXRlciAgYWZmZWN0cyAgdGhlIHJlY29nbml0aW9uIG9mIHdoaXRlIHNwYWNlIGFuZCB0aGUgZW5kIG9mCisgICAgICAgdGhpcyBwYXJhbWV0ZXIgYWZmZWN0cyB0aGUgcmVjb2duaXRpb24gb2Ygd2hpdGUgc3BhY2UgYW5kICB0aGUgIGVuZCAgb2YKICAgICAgICBpbnRlcm5hbCBjb21tZW50cyBzdGFydGluZyB3aXRoICMuIFRoZSB2YWx1ZSBpcyBzYXZlZCB3aXRoIHRoZSBjb21waWxlZAotICAgICAgIHBhdHRlcm4gIGZvciAgc3Vic2VxdWVudCAgdXNlIGJ5IHRoZSBKSVQgY29tcGlsZXIgYW5kIGJ5IHRoZSB0d28gaW50ZXItCisgICAgICAgcGF0dGVybiBmb3Igc3Vic2VxdWVudCB1c2UgYnkgdGhlIEpJVCBjb21waWxlciBhbmQgYnkgIHRoZSAgdHdvICBpbnRlci0KICAgICAgICBwcmV0ZWQgbWF0Y2hpbmcgZnVuY3Rpb25zLCBwY3JlMl9tYXRjaCgpIGFuZCBwY3JlMl9kZmFfbWF0Y2goKS4KIAogICAgICAgIGludCBwY3JlMl9zZXRfcGFyZW5zX25lc3RfbGltaXQocGNyZTJfY29tcGlsZV9jb250ZXh0ICpjY29udGV4dCwKICAgICAgICAgIHVpbnQzMl90IHZhbHVlKTsKIAogICAgICAgIFRoaXMgcGFyYW1ldGVyIGFqdXN0cyB0aGUgbGltaXQsIHNldCB3aGVuIFBDUkUyIGlzIGJ1aWx0IChkZWZhdWx0IDI1MCksCi0gICAgICAgb24gIHRoZSAgZGVwdGggIG9mICBwYXJlbnRoZXNpcyAgbmVzdGluZyBpbiBhIHBhdHRlcm4uIFRoaXMgbGltaXQgc3RvcHMKKyAgICAgICBvbiB0aGUgZGVwdGggb2YgcGFyZW50aGVzaXMgbmVzdGluZyBpbiAgYSAgcGF0dGVybi4gIFRoaXMgIGxpbWl0ICBzdG9wcwogICAgICAgIHJvZ3VlIHBhdHRlcm5zIHVzaW5nIHVwIHRvbyBtdWNoIHN5c3RlbSBzdGFjayB3aGVuIGJlaW5nIGNvbXBpbGVkLgogCiAgICAgICAgaW50IHBjcmUyX3NldF9jb21waWxlX3JlY3Vyc2lvbl9ndWFyZChwY3JlMl9jb21waWxlX2NvbnRleHQgKmNjb250ZXh0LAogICAgICAgICAgaW50ICgqZ3VhcmRfZnVuY3Rpb24pKHVpbnQzMl90LCB2b2lkICopLCB2b2lkICp1c2VyX2RhdGEpOwogCi0gICAgICAgVGhlcmUgaXMgYXQgbGVhc3Qgb25lIGFwcGxpY2F0aW9uIHRoYXQgcnVucyBQQ1JFMiBpbiB0aHJlYWRzIHdpdGggIHZlcnkKLSAgICAgICBsaW1pdGVkICBzeXN0ZW0gIHN0YWNrLCAgd2hlcmUgcnVubmluZyBvdXQgb2Ygc3RhY2sgaXMgdG8gYmUgYXZvaWRlZCBhdAotICAgICAgIGFsbCBjb3N0cy4gVGhlIHBhcmVudGhlc2lzIGxpbWl0IGFib3ZlIGNhbm5vdCB0YWtlIGFjY291bnQgb2YgaG93ICBtdWNoCi0gICAgICAgc3RhY2sgIGlzICBhY3R1YWxseSAgYXZhaWxhYmxlLiAgRm9yICBhIGZpbmVyIGNvbnRyb2wsIHlvdSBjYW4gc3VwcGx5IGEKLSAgICAgICBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aGVuZXZlciBwY3JlMl9jb21waWxlKCkgc3RhcnRzICB0byAgY29tcGlsZSAgYQotICAgICAgIHBhcmVudGhlc2l6ZWQgIHBhcnQgIG9mICBhICBwYXR0ZXJuLiBUaGlzIGZ1bmN0aW9uIGNhbiBjaGVjayB0aGUgYWN0dWFsCisgICAgICAgVGhlcmUgIGlzIGF0IGxlYXN0IG9uZSBhcHBsaWNhdGlvbiB0aGF0IHJ1bnMgUENSRTIgaW4gdGhyZWFkcyB3aXRoIHZlcnkKKyAgICAgICBsaW1pdGVkIHN5c3RlbSBzdGFjaywgd2hlcmUgcnVubmluZyBvdXQgb2Ygc3RhY2sgaXMgdG8gIGJlICBhdm9pZGVkICBhdAorICAgICAgIGFsbCAgY29zdHMuIFRoZSBwYXJlbnRoZXNpcyBsaW1pdCBhYm92ZSBjYW5ub3QgdGFrZSBhY2NvdW50IG9mIGhvdyBtdWNoCisgICAgICAgc3RhY2sgaXMgYWN0dWFsbHkgYXZhaWxhYmxlLiBGb3IgYSBmaW5lciAgY29udHJvbCwgIHlvdSAgY2FuICBzdXBwbHkgIGEKKyAgICAgICBmdW5jdGlvbiAgdGhhdCAgaXMgIGNhbGxlZCB3aGVuZXZlciBwY3JlMl9jb21waWxlKCkgc3RhcnRzIHRvIGNvbXBpbGUgYQorICAgICAgIHBhcmVudGhlc2l6ZWQgcGFydCBvZiBhIHBhdHRlcm4uIFRoaXMgZnVuY3Rpb24gIGNhbiAgY2hlY2sgIHRoZSAgYWN0dWFsCiAgICAgICAgc3RhY2sgc2l6ZSAob3IgYW55dGhpbmcgZWxzZSB0aGF0IGl0IHdhbnRzIHRvLCBvZiBjb3Vyc2UpLgogCi0gICAgICAgVGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBjYWxsb3V0IGZ1bmN0aW9uIGdpdmVzIHRoZSBjdXJyZW50ICBkZXB0aCAgb2YKLSAgICAgICBuZXN0aW5nLCAgYW5kICB0aGUgc2Vjb25kIGlzIHVzZXIgZGF0YSB0aGF0IGlzIHNldCB1cCBieSB0aGUgbGFzdCBhcmd1LQotICAgICAgIG1lbnQgIG9mICBwY3JlMl9zZXRfY29tcGlsZV9yZWN1cnNpb25fZ3VhcmQoKS4gIFRoZSAgY2FsbG91dCAgIGZ1bmN0aW9uCisgICAgICAgVGhlICBmaXJzdCAgYXJndW1lbnQgdG8gdGhlIGNhbGxvdXQgZnVuY3Rpb24gZ2l2ZXMgdGhlIGN1cnJlbnQgZGVwdGggb2YKKyAgICAgICBuZXN0aW5nLCBhbmQgdGhlIHNlY29uZCBpcyB1c2VyIGRhdGEgdGhhdCBpcyBzZXQgdXAgYnkgdGhlICBsYXN0ICBhcmd1LQorICAgICAgIG1lbnQgICBvZiAgcGNyZTJfc2V0X2NvbXBpbGVfcmVjdXJzaW9uX2d1YXJkKCkuICBUaGUgIGNhbGxvdXQgIGZ1bmN0aW9uCiAgICAgICAgc2hvdWxkIHJldHVybiB6ZXJvIGlmIGFsbCBpcyB3ZWxsLCBvciBub24temVybyB0byBmb3JjZSBhbiBlcnJvci4KIAogICAgVGhlIG1hdGNoIGNvbnRleHQKQEAgLTc3OCwxMCArODE4LDEwIEBACiAgICAgICAgICBUaGUgbGltaXQgZm9yIGNhbGxpbmcgbWF0Y2goKSByZWN1cnNpdmVseQogCiAgICAgICAgQSBtYXRjaCBjb250ZXh0IGlzIGFsc28gcmVxdWlyZWQgaWYgeW91IGFyZSB1c2luZyBjdXN0b20gbWVtb3J5IG1hbmFnZS0KLSAgICAgICBtZW50LiAgIElmICBub25lIG9mIHRoZXNlIGFwcGx5LCBqdXN0IHBhc3MgTlVMTCBhcyB0aGUgY29udGV4dCBhcmd1bWVudAorICAgICAgIG1lbnQuICBJZiBub25lIG9mIHRoZXNlIGFwcGx5LCBqdXN0IHBhc3MgTlVMTCBhcyB0aGUgIGNvbnRleHQgIGFyZ3VtZW50CiAgICAgICAgb2YgcGNyZTJfbWF0Y2goKSwgcGNyZTJfZGZhX21hdGNoKCksIG9yIHBjcmUyX2ppdF9tYXRjaCgpLgogCi0gICAgICAgQSBtYXRjaCBjb250ZXh0IGlzIGNyZWF0ZWQsIGNvcGllZCwgYW5kIGZyZWVkIGJ5ICB0aGUgIGZvbGxvd2luZyAgZnVuYy0KKyAgICAgICBBICBtYXRjaCAgY29udGV4dCAgaXMgY3JlYXRlZCwgY29waWVkLCBhbmQgZnJlZWQgYnkgdGhlIGZvbGxvd2luZyBmdW5jLQogICAgICAgIHRpb25zOgogCiAgICAgICAgcGNyZTJfbWF0Y2hfY29udGV4dCAqcGNyZTJfbWF0Y2hfY29udGV4dF9jcmVhdGUoCkBAIC03OTIsNyArODMyLDcgQEAKIAogICAgICAgIHZvaWQgcGNyZTJfbWF0Y2hfY29udGV4dF9mcmVlKHBjcmUyX21hdGNoX2NvbnRleHQgKm1jb250ZXh0KTsKIAotICAgICAgIEEgIG1hdGNoICBjb250ZXh0ICBpcyAgY3JlYXRlZCAgd2l0aCBkZWZhdWx0IHZhbHVlcyBmb3IgaXRzIHBhcmFtZXRlcnMuCisgICAgICAgQSBtYXRjaCBjb250ZXh0IGlzIGNyZWF0ZWQgd2l0aCAgZGVmYXVsdCAgdmFsdWVzICBmb3IgIGl0cyAgcGFyYW1ldGVycy4KICAgICAgICBUaGVzZSBjYW4gYmUgY2hhbmdlZCBieSBjYWxsaW5nIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zLCB3aGljaCByZXR1cm4gMAogICAgICAgIG9uIHN1Y2Nlc3MsIG9yIFBDUkUyX0VSUk9SX0JBRERBVEEgaWYgaW52YWxpZCBkYXRhIGlzIGRldGVjdGVkLgogCkBAIC04MDAsOTYgKzg0MCw5NiBAQAogICAgICAgICAgaW50ICgqY2FsbG91dF9mdW5jdGlvbikocGNyZTJfY2FsbG91dF9ibG9jayAqLCB2b2lkICopLAogICAgICAgICAgdm9pZCAqY2FsbG91dF9kYXRhKTsKIAotICAgICAgIFRoaXMgIHNldHMgIHVwIGEgImNhbGxvdXQiIGZ1bmN0aW9uLCB3aGljaCBQQ1JFMiB3aWxsIGNhbGwgYXQgc3BlY2lmaWVkCisgICAgICAgVGhpcyBzZXRzIHVwIGEgImNhbGxvdXQiIGZ1bmN0aW9uLCB3aGljaCBQQ1JFMiB3aWxsIGNhbGwgIGF0ICBzcGVjaWZpZWQKICAgICAgICBwb2ludHMgZHVyaW5nIGEgbWF0Y2hpbmcgb3BlcmF0aW9uLiBEZXRhaWxzIGFyZSBnaXZlbiBpbiB0aGUgcGNyZTJjYWxsLQogICAgICAgIG91dCBkb2N1bWVudGF0aW9uLgogCiAgICAgICAgaW50IHBjcmUyX3NldF9vZmZzZXRfbGltaXQocGNyZTJfbWF0Y2hfY29udGV4dCAqbWNvbnRleHQsCiAgICAgICAgICBQQ1JFMl9TSVpFIHZhbHVlKTsKIAotICAgICAgIFRoZSAgb2Zmc2V0X2xpbWl0ICBwYXJhbWV0ZXIgIGxpbWl0cyAgaG93ICBmYXIgYW4gdW5hbmNob3JlZCBzZWFyY2ggY2FuCi0gICAgICAgYWR2YW5jZSBpbiB0aGUgc3ViamVjdCBzdHJpbmcuIFRoZSBkZWZhdWx0IHZhbHVlICBpcyAgUENSRTJfVU5TRVQuICBUaGUKLSAgICAgICBwY3JlMl9tYXRjaCgpICAgICAgYW5kICAgICAgcGNyZTJfZGZhX21hdGNoKCkgICAgICBmdW5jdGlvbnMgICAgIHJldHVybgotICAgICAgIFBDUkUyX0VSUk9SX05PTUFUQ0ggaWYgYSBtYXRjaCB3aXRoIGEgc3RhcnRpbmcgcG9pbnQgYmVmb3JlIG9yICBhdCAgdGhlCisgICAgICAgVGhlIG9mZnNldF9saW1pdCBwYXJhbWV0ZXIgbGltaXRzIGhvdyAgZmFyICBhbiAgdW5hbmNob3JlZCAgc2VhcmNoICBjYW4KKyAgICAgICBhZHZhbmNlICBpbiAgdGhlICBzdWJqZWN0IHN0cmluZy4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgUENSRTJfVU5TRVQuIFRoZQorICAgICAgIHBjcmUyX21hdGNoKCkgICAgIGFuZCAgICAgIHBjcmUyX2RmYV9tYXRjaCgpICAgICAgZnVuY3Rpb25zICAgICAgcmV0dXJuCisgICAgICAgUENSRTJfRVJST1JfTk9NQVRDSCAgaWYgIGEgbWF0Y2ggd2l0aCBhIHN0YXJ0aW5nIHBvaW50IGJlZm9yZSBvciBhdCB0aGUKICAgICAgICBnaXZlbiBvZmZzZXQgaXMgbm90IGZvdW5kLiBGb3IgZXhhbXBsZSwgaWYgdGhlIHBhdHRlcm4gL2FiYy8gaXMgbWF0Y2hlZAotICAgICAgIGFnYWluc3QgIjEyM2FiYyIgd2l0aCBhbiBvZmZzZXQgIGxpbWl0ICBsZXNzICB0aGFuICAzLCAgdGhlICByZXN1bHQgIGlzCi0gICAgICAgUENSRTJfRVJST1JfTk9fTUFUQ0guICAgQSAgbWF0Y2ggIGNhbiBuZXZlciBiZSBmb3VuZCBpZiB0aGUgc3RhcnRvZmZzZXQKKyAgICAgICBhZ2FpbnN0ICAiMTIzYWJjIiAgd2l0aCAgYW4gIG9mZnNldCAgbGltaXQgIGxlc3MgIHRoYW4gMywgdGhlIHJlc3VsdCBpcworICAgICAgIFBDUkUyX0VSUk9SX05PX01BVENILiAgQSBtYXRjaCBjYW4gbmV2ZXIgYmUgZm91bmQgIGlmICB0aGUgIHN0YXJ0b2Zmc2V0CiAgICAgICAgYXJndW1lbnQgb2YgcGNyZTJfbWF0Y2goKSBvciBwY3JlMl9kZmFfbWF0Y2goKSBpcyBncmVhdGVyIHRoYW4gdGhlIG9mZi0KICAgICAgICBzZXQgbGltaXQuCiAKLSAgICAgICBXaGVuICB1c2luZyAgdGhpcyAgZmFjaWxpdHksICB5b3UgIG11c3Qgc2V0IFBDUkUyX1VTRV9PRkZTRVRfTElNSVQgd2hlbgotICAgICAgIGNhbGxpbmcgcGNyZTJfY29tcGlsZSgpIHNvIHRoYXQgd2hlbiBKSVQgaXMgaW4gdXNlLCBkaWZmZXJlbnQgY29kZSAgY2FuCi0gICAgICAgYmUgIGNvbXBpbGVkLiBJZiBhIG1hdGNoIGlzIHN0YXJ0ZWQgd2l0aCBhIG5vbi1kZWZhdWx0IG1hdGNoIGxpbWl0IHdoZW4KKyAgICAgICBXaGVuIHVzaW5nIHRoaXMgZmFjaWxpdHksICB5b3UgIG11c3QgIHNldCAgUENSRTJfVVNFX09GRlNFVF9MSU1JVCAgd2hlbgorICAgICAgIGNhbGxpbmcgIHBjcmUyX2NvbXBpbGUoKSBzbyB0aGF0IHdoZW4gSklUIGlzIGluIHVzZSwgZGlmZmVyZW50IGNvZGUgY2FuCisgICAgICAgYmUgY29tcGlsZWQuIElmIGEgbWF0Y2ggaXMgc3RhcnRlZCB3aXRoIGEgbm9uLWRlZmF1bHQgbWF0Y2ggbGltaXQgIHdoZW4KICAgICAgICBQQ1JFMl9VU0VfT0ZGU0VUX0xJTUlUIGlzIG5vdCBzZXQsIGFuIGVycm9yIGlzIGdlbmVyYXRlZC4KIAotICAgICAgIFRoZSBvZmZzZXQgbGltaXQgZmFjaWxpdHkgY2FuIGJlIHVzZWQgdG8gdHJhY2sgcHJvZ3Jlc3Mgd2hlbiAgc2VhcmNoaW5nCi0gICAgICAgbGFyZ2UgIHN1YmplY3QgIHN0cmluZ3MuICBTZWUgIGFsc28gIHRoZSAgUENSRTJfRklSU1RMSU5FIG9wdGlvbiwgd2hpY2gKKyAgICAgICBUaGUgIG9mZnNldCBsaW1pdCBmYWNpbGl0eSBjYW4gYmUgdXNlZCB0byB0cmFjayBwcm9ncmVzcyB3aGVuIHNlYXJjaGluZworICAgICAgIGxhcmdlIHN1YmplY3Qgc3RyaW5ncy4gIFNlZSAgYWxzbyAgdGhlICBQQ1JFMl9GSVJTVExJTkUgIG9wdGlvbiwgIHdoaWNoCiAgICAgICAgcmVxdWlyZXMgYSBtYXRjaCB0byBzdGFydCB3aXRoaW4gdGhlIGZpcnN0IGxpbmUgb2YgdGhlIHN1YmplY3QuIElmIHRoaXMKLSAgICAgICBpcyAgc2V0ICB3aXRoIGFuIG9mZnNldCBsaW1pdCwgYSBtYXRjaCBtdXN0IG9jY3VyIGluIHRoZSBmaXJzdCBsaW5lIGFuZAotICAgICAgIGFsc28gd2l0aGluIHRoZSBvZmZzZXQgbGltaXQuICBJbiBvdGhlciB3b3JkcywgIHdoaWNoZXZlciAgbGltaXQgIGNvbWVzCisgICAgICAgaXMgc2V0IHdpdGggYW4gb2Zmc2V0IGxpbWl0LCBhIG1hdGNoIG11c3Qgb2NjdXIgaW4gdGhlIGZpcnN0ICBsaW5lICBhbmQKKyAgICAgICBhbHNvICB3aXRoaW4gIHRoZSAgb2Zmc2V0IGxpbWl0LiAgSW4gb3RoZXIgd29yZHMsIHdoaWNoZXZlciBsaW1pdCBjb21lcwogICAgICAgIGZpcnN0IGlzIHVzZWQuCiAKICAgICAgICBpbnQgcGNyZTJfc2V0X21hdGNoX2xpbWl0KHBjcmUyX21hdGNoX2NvbnRleHQgKm1jb250ZXh0LAogICAgICAgICAgdWludDMyX3QgdmFsdWUpOwogCi0gICAgICAgVGhlICBtYXRjaF9saW1pdCAgcGFyYW1ldGVyICBwcm92aWRlcyAgYSBtZWFucyBvZiBwcmV2ZW50aW5nIFBDUkUyIGZyb20KKyAgICAgICBUaGUgbWF0Y2hfbGltaXQgcGFyYW1ldGVyIHByb3ZpZGVzIGEgbWVhbnMgIG9mICBwcmV2ZW50aW5nICBQQ1JFMiAgZnJvbQogICAgICAgIHVzaW5nIHVwIHRvbyBtYW55IHJlc291cmNlcyB3aGVuIHByb2Nlc3NpbmcgcGF0dGVybnMgdGhhdCBhcmUgbm90IGdvaW5nCi0gICAgICAgdG8gIG1hdGNoLCBidXQgd2hpY2ggaGF2ZSBhIHZlcnkgbGFyZ2UgbnVtYmVyIG9mIHBvc3NpYmlsaXRpZXMgaW4gdGhlaXIKLSAgICAgICBzZWFyY2ggdHJlZXMuIFRoZSBjbGFzc2ljIGV4YW1wbGUgaXMgYSBwYXR0ZXJuIHRoYXQgdXNlcyBuZXN0ZWQgIHVubGltLQorICAgICAgIHRvIG1hdGNoLCBidXQgd2hpY2ggaGF2ZSBhIHZlcnkgbGFyZ2UgbnVtYmVyIG9mIHBvc3NpYmlsaXRpZXMgaW4gIHRoZWlyCisgICAgICAgc2VhcmNoICB0cmVlcy4gVGhlIGNsYXNzaWMgZXhhbXBsZSBpcyBhIHBhdHRlcm4gdGhhdCB1c2VzIG5lc3RlZCB1bmxpbS0KICAgICAgICBpdGVkIHJlcGVhdHMuCiAKLSAgICAgICBJbnRlcm5hbGx5LCAgcGNyZTJfbWF0Y2goKSAgdXNlcyAgYSAgZnVuY3Rpb24gIGNhbGxlZCBtYXRjaCgpLCB3aGljaCBpdAotICAgICAgIGNhbGxzIHJlcGVhdGVkbHkgKHNvbWV0aW1lcyByZWN1cnNpdmVseSkuIFRoZSBsaW1pdCBzZXQgYnkgIG1hdGNoX2xpbWl0Ci0gICAgICAgaXMgIGltcG9zZWQgIG9uICB0aGUgIG51bWJlciAgb2YgdGltZXMgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZHVyaW5nIGEKKyAgICAgICBJbnRlcm5hbGx5LCBwY3JlMl9tYXRjaCgpIHVzZXMgYSAgZnVuY3Rpb24gIGNhbGxlZCAgbWF0Y2goKSwgIHdoaWNoICBpdAorICAgICAgIGNhbGxzICByZXBlYXRlZGx5IChzb21ldGltZXMgcmVjdXJzaXZlbHkpLiBUaGUgbGltaXQgc2V0IGJ5IG1hdGNoX2xpbWl0CisgICAgICAgaXMgaW1wb3NlZCBvbiB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoaXMgIGZ1bmN0aW9uICBpcyAgY2FsbGVkICBkdXJpbmcgIGEKICAgICAgICBtYXRjaCwgd2hpY2ggaGFzIHRoZSBlZmZlY3Qgb2YgbGltaXRpbmcgdGhlIGFtb3VudCBvZiBiYWNrdHJhY2tpbmcgdGhhdAotICAgICAgIGNhbiAgdGFrZSBwbGFjZS4gRm9yIHBhdHRlcm5zIHRoYXQgYXJlIG5vdCBhbmNob3JlZCwgdGhlIGNvdW50IHJlc3RhcnRzCi0gICAgICAgZnJvbSB6ZXJvIGZvciBlYWNoIHBvc2l0aW9uIGluIHRoZSBzdWJqZWN0IHN0cmluZy4gVGhpcyAgbGltaXQgIGlzICBub3QKKyAgICAgICBjYW4gdGFrZSBwbGFjZS4gRm9yIHBhdHRlcm5zIHRoYXQgYXJlIG5vdCBhbmNob3JlZCwgdGhlIGNvdW50ICByZXN0YXJ0cworICAgICAgIGZyb20gIHplcm8gIGZvciAgZWFjaCBwb3NpdGlvbiBpbiB0aGUgc3ViamVjdCBzdHJpbmcuIFRoaXMgbGltaXQgaXMgbm90CiAgICAgICAgcmVsZXZhbnQgdG8gcGNyZTJfZGZhX21hdGNoKCksIHdoaWNoIGlnbm9yZXMgaXQuCiAKLSAgICAgICBXaGVuICBwY3JlMl9tYXRjaCgpIGlzIGNhbGxlZCB3aXRoIGEgcGF0dGVybiB0aGF0IHdhcyBzdWNjZXNzZnVsbHkgcHJvLQorICAgICAgIFdoZW4gcGNyZTJfbWF0Y2goKSBpcyBjYWxsZWQgd2l0aCBhIHBhdHRlcm4gdGhhdCB3YXMgc3VjY2Vzc2Z1bGx5ICBwcm8tCiAgICAgICAgY2Vzc2VkIGJ5IHBjcmUyX2ppdF9jb21waWxlKCksIHRoZSB3YXkgaW4gd2hpY2ggbWF0Y2hpbmcgaXMgZXhlY3V0ZWQgaXMKLSAgICAgICBlbnRpcmVseSAgZGlmZmVyZW50LiBIb3dldmVyLCB0aGVyZSBpcyBzdGlsbCB0aGUgcG9zc2liaWxpdHkgb2YgcnVuYXdheQotICAgICAgIG1hdGNoaW5nIHRoYXQgZ29lcyBvbiBmb3IgYSB2ZXJ5IGxvbmcgIHRpbWUsICBhbmQgIHNvICB0aGUgIG1hdGNoX2xpbWl0Ci0gICAgICAgdmFsdWUgIGlzICBhbHNvIHVzZWQgaW4gdGhpcyBjYXNlIChidXQgaW4gYSBkaWZmZXJlbnQgd2F5KSB0byBsaW1pdCBob3cKKyAgICAgICBlbnRpcmVseSBkaWZmZXJlbnQuIEhvd2V2ZXIsIHRoZXJlIGlzIHN0aWxsIHRoZSBwb3NzaWJpbGl0eSBvZiAgcnVuYXdheQorICAgICAgIG1hdGNoaW5nICB0aGF0ICBnb2VzICBvbiAgZm9yICBhIHZlcnkgbG9uZyB0aW1lLCBhbmQgc28gdGhlIG1hdGNoX2xpbWl0CisgICAgICAgdmFsdWUgaXMgYWxzbyB1c2VkIGluIHRoaXMgY2FzZSAoYnV0IGluIGEgZGlmZmVyZW50IHdheSkgdG8gIGxpbWl0ICBob3cKICAgICAgICBsb25nIHRoZSBtYXRjaGluZyBjYW4gY29udGludWUuCiAKLSAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGxpbWl0IGNhbiBiZSBzZXQgd2hlbiAgUENSRTIgIGlzICBidWlsdDsgIHRoZQotICAgICAgIGRlZmF1bHQgIGRlZmF1bHQgIGlzIDEwIG1pbGxpb24sIHdoaWNoIGhhbmRsZXMgYWxsIGJ1dCB0aGUgbW9zdCBleHRyZW1lCi0gICAgICAgY2FzZXMuICAgSWYgICB0aGUgICBsaW1pdCAgIGlzICAgIGV4Y2VlZGVkLCAgICBwY3JlMl9tYXRjaCgpICAgIHJldHVybnMKLSAgICAgICBQQ1JFMl9FUlJPUl9NQVRDSExJTUlULiAgQSAgdmFsdWUgIGZvciB0aGUgbWF0Y2ggbGltaXQgbWF5IGFsc28gYmUgc3VwLQorICAgICAgIFRoZSAgZGVmYXVsdCAgdmFsdWUgIGZvciAgdGhlIGxpbWl0IGNhbiBiZSBzZXQgd2hlbiBQQ1JFMiBpcyBidWlsdDsgdGhlCisgICAgICAgZGVmYXVsdCBkZWZhdWx0IGlzIDEwIG1pbGxpb24sIHdoaWNoIGhhbmRsZXMgYWxsIGJ1dCB0aGUgIG1vc3QgIGV4dHJlbWUKKyAgICAgICBjYXNlcy4gICAgSWYgICAgdGhlICAgIGxpbWl0ICAgaXMgICBleGNlZWRlZCwgICBwY3JlMl9tYXRjaCgpICAgcmV0dXJucworICAgICAgIFBDUkUyX0VSUk9SX01BVENITElNSVQuIEEgdmFsdWUgZm9yIHRoZSBtYXRjaCBsaW1pdCBtYXkgIGFsc28gIGJlICBzdXAtCiAgICAgICAgcGxpZWQgYnkgYW4gaXRlbSBhdCB0aGUgc3RhcnQgb2YgYSBwYXR0ZXJuIG9mIHRoZSBmb3JtCiAKICAgICAgICAgICgqTElNSVRfTUFUQ0g9ZGRkKQogCi0gICAgICAgd2hlcmUgZGRkIGlzIGEgZGVjaW1hbCBudW1iZXIuICBIb3dldmVyLCAgc3VjaCAgYSAgc2V0dGluZyAgaXMgIGlnbm9yZWQKLSAgICAgICB1bmxlc3MgIGRkZCAgaXMgIGxlc3MgdGhhbiB0aGUgbGltaXQgc2V0IGJ5IHRoZSBjYWxsZXIgb2YgcGNyZTJfbWF0Y2goKQorICAgICAgIHdoZXJlICBkZGQgIGlzICBhICBkZWNpbWFsICBudW1iZXIuICBIb3dldmVyLCBzdWNoIGEgc2V0dGluZyBpcyBpZ25vcmVkCisgICAgICAgdW5sZXNzIGRkZCBpcyBsZXNzIHRoYW4gdGhlIGxpbWl0IHNldCBieSB0aGUgIGNhbGxlciAgb2YgIHBjcmUyX21hdGNoKCkKICAgICAgICBvciwgaWYgbm8gc3VjaCBsaW1pdCBpcyBzZXQsIGxlc3MgdGhhbiB0aGUgZGVmYXVsdC4KIAogICAgICAgIGludCBwY3JlMl9zZXRfcmVjdXJzaW9uX2xpbWl0KHBjcmUyX21hdGNoX2NvbnRleHQgKm1jb250ZXh0LAogICAgICAgICAgdWludDMyX3QgdmFsdWUpOwogCiAgICAgICAgVGhlIHJlY3Vyc2lvbl9saW1pdCBwYXJhbWV0ZXIgaXMgc2ltaWxhciB0byBtYXRjaF9saW1pdCwgYnV0IGluc3RlYWQgb2YKLSAgICAgICBsaW1pdGluZyAgdGhlICB0b3RhbCAgbnVtYmVyIG9mIHRpbWVzIHRoYXQgbWF0Y2goKSBpcyBjYWxsZWQsIGl0IGxpbWl0cwotICAgICAgIHRoZSBkZXB0aCBvZiByZWN1cnNpb24uIFRoZSByZWN1cnNpb24gZGVwdGggaXMgYSAgc21hbGxlciAgbnVtYmVyICB0aGFuCi0gICAgICAgdGhlICB0b3RhbCBudW1iZXIgb2YgY2FsbHMsIGJlY2F1c2Ugbm90IGFsbCBjYWxscyB0byBtYXRjaCgpIGFyZSByZWN1ci0KKyAgICAgICBsaW1pdGluZyB0aGUgdG90YWwgbnVtYmVyIG9mIHRpbWVzIHRoYXQgbWF0Y2goKSBpcyAgY2FsbGVkLCAgaXQgIGxpbWl0cworICAgICAgIHRoZSAgZGVwdGggIG9mICByZWN1cnNpb24uIFRoZSByZWN1cnNpb24gZGVwdGggaXMgYSBzbWFsbGVyIG51bWJlciB0aGFuCisgICAgICAgdGhlIHRvdGFsIG51bWJlciBvZiBjYWxscywgYmVjYXVzZSBub3QgYWxsIGNhbGxzIHRvIG1hdGNoKCkgYXJlICByZWN1ci0KICAgICAgICBzaXZlLiAgVGhpcyBsaW1pdCBpcyBvZiB1c2Ugb25seSBpZiBpdCBpcyBzZXQgc21hbGxlciB0aGFuIG1hdGNoX2xpbWl0LgogCiAgICAgICAgTGltaXRpbmcgdGhlIHJlY3Vyc2lvbiBkZXB0aCBsaW1pdHMgdGhlIGFtb3VudCBvZiBzeXN0ZW0gc3RhY2sgdGhhdCBjYW4KLSAgICAgICBiZSAgdXNlZCwgIG9yLCAgd2hlbiAgUENSRTIgaGFzIGJlZW4gY29tcGlsZWQgdG8gdXNlIG1lbW9yeSBvbiB0aGUgaGVhcAotICAgICAgIGluc3RlYWQgb2YgdGhlIHN0YWNrLCB0aGUgYW1vdW50IG9mIGhlYXAgbWVtb3J5IHRoYXQgY2FuIGJlIHVzZWQuICBUaGlzCi0gICAgICAgbGltaXQgIGlzIG5vdCByZWxldmFudCwgYW5kIGlzIGlnbm9yZWQsIHdoZW4gbWF0Y2hpbmcgaXMgZG9uZSB1c2luZyBKSVQKKyAgICAgICBiZSB1c2VkLCBvciwgd2hlbiBQQ1JFMiBoYXMgYmVlbiBjb21waWxlZCB0byB1c2UgIG1lbW9yeSAgb24gIHRoZSAgaGVhcAorICAgICAgIGluc3RlYWQgIG9mIHRoZSBzdGFjaywgdGhlIGFtb3VudCBvZiBoZWFwIG1lbW9yeSB0aGF0IGNhbiBiZSB1c2VkLiBUaGlzCisgICAgICAgbGltaXQgaXMgbm90IHJlbGV2YW50LCBhbmQgaXMgaWdub3JlZCwgd2hlbiBtYXRjaGluZyBpcyBkb25lIHVzaW5nICBKSVQKICAgICAgICBjb21waWxlZCBjb2RlIG9yIGJ5IHRoZSBwY3JlMl9kZmFfbWF0Y2goKSBmdW5jdGlvbi4KIAotICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIGZvciByZWN1cnNpb25fbGltaXQgY2FuIGJlIHNldCB3aGVuIFBDUkUyICBpcyAgYnVpbHQ7Ci0gICAgICAgdGhlICBkZWZhdWx0ICBkZWZhdWx0IGlzIHRoZSBzYW1lIHZhbHVlIGFzIHRoZSBkZWZhdWx0IGZvciBtYXRjaF9saW1pdC4KLSAgICAgICBJZiB0aGUgbGltaXQgaXMgZXhjZWVkZWQsIHBjcmUyX21hdGNoKCkgcmV0dXJucyAgUENSRTJfRVJST1JfUkVDVVJTSU9OLQotICAgICAgIExJTUlULiAgQSB2YWx1ZSBmb3IgdGhlIHJlY3Vyc2lvbiBsaW1pdCBtYXkgYWxzbyBiZSBzdXBwbGllZCBieSBhbiBpdGVtCisgICAgICAgVGhlICBkZWZhdWx0ICB2YWx1ZSBmb3IgcmVjdXJzaW9uX2xpbWl0IGNhbiBiZSBzZXQgd2hlbiBQQ1JFMiBpcyBidWlsdDsKKyAgICAgICB0aGUgZGVmYXVsdCBkZWZhdWx0IGlzIHRoZSBzYW1lIHZhbHVlIGFzIHRoZSBkZWZhdWx0ICBmb3IgIG1hdGNoX2xpbWl0LgorICAgICAgIElmICB0aGUgbGltaXQgaXMgZXhjZWVkZWQsIHBjcmUyX21hdGNoKCkgcmV0dXJucyBQQ1JFMl9FUlJPUl9SRUNVUlNJT04tCisgICAgICAgTElNSVQuIEEgdmFsdWUgZm9yIHRoZSByZWN1cnNpb24gbGltaXQgbWF5IGFsc28gYmUgc3VwcGxpZWQgYnkgYW4gIGl0ZW0KICAgICAgICBhdCB0aGUgc3RhcnQgb2YgYSBwYXR0ZXJuIG9mIHRoZSBmb3JtCiAKICAgICAgICAgICgqTElNSVRfUkVDVVJTSU9OPWRkZCkKIAotICAgICAgIHdoZXJlIGRkZCBpcyBhIGRlY2ltYWwgbnVtYmVyLiAgSG93ZXZlciwgIHN1Y2ggIGEgIHNldHRpbmcgIGlzICBpZ25vcmVkCi0gICAgICAgdW5sZXNzICBkZGQgIGlzICBsZXNzIHRoYW4gdGhlIGxpbWl0IHNldCBieSB0aGUgY2FsbGVyIG9mIHBjcmUyX21hdGNoKCkKKyAgICAgICB3aGVyZSAgZGRkICBpcyAgYSAgZGVjaW1hbCAgbnVtYmVyLiAgSG93ZXZlciwgc3VjaCBhIHNldHRpbmcgaXMgaWdub3JlZAorICAgICAgIHVubGVzcyBkZGQgaXMgbGVzcyB0aGFuIHRoZSBsaW1pdCBzZXQgYnkgdGhlICBjYWxsZXIgIG9mICBwY3JlMl9tYXRjaCgpCiAgICAgICAgb3IsIGlmIG5vIHN1Y2ggbGltaXQgaXMgc2V0LCBsZXNzIHRoYW4gdGhlIGRlZmF1bHQuCiAKICAgICAgICBpbnQgcGNyZTJfc2V0X3JlY3Vyc2lvbl9tZW1vcnlfbWFuYWdlbWVudCgKQEAgLTg5OCwyMSArOTM4LDIxIEBACiAgICAgICAgICB2b2lkICgqcHJpdmF0ZV9mcmVlKSh2b2lkICosIHZvaWQgKiksIHZvaWQgKm1lbW9yeV9kYXRhKTsKIAogICAgICAgIFRoaXMgZnVuY3Rpb24gc2V0cyB1cCB0d28gYWRkaXRpb25hbCBjdXN0b20gbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zCi0gICAgICAgZm9yICB1c2UgIGJ5ICBwY3JlMl9tYXRjaCgpICB3aGVuIFBDUkUyIGlzIGNvbXBpbGVkIHRvIHVzZSB0aGUgaGVhcCBmb3IKKyAgICAgICBmb3IgdXNlIGJ5IHBjcmUyX21hdGNoKCkgd2hlbiBQQ1JFMiBpcyBjb21waWxlZCB0byAgdXNlICB0aGUgIGhlYXAgIGZvcgogICAgICAgIHJlbWVtYmVyaW5nIGJhY2t0cmFja2luZyBkYXRhLCBpbnN0ZWFkIG9mIHJlY3Vyc2l2ZSBmdW5jdGlvbiBjYWxscyB0aGF0Ci0gICAgICAgdXNlICB0aGUgIHN5c3RlbSBzdGFjay4gVGhlcmUgaXMgYSBkaXNjdXNzaW9uIGFib3V0IFBDUkUyJ3Mgc3RhY2sgdXNhZ2UKLSAgICAgICBpbiB0aGUgcGNyZTJzdGFjayBkb2N1bWVudGF0aW9uLiBTZWUgdGhlIHBjcmUyYnVpbGQgIGRvY3VtZW50YXRpb24gIGZvcgorICAgICAgIHVzZSB0aGUgc3lzdGVtIHN0YWNrLiBUaGVyZSBpcyBhIGRpc2N1c3Npb24gYWJvdXQgUENSRTIncyAgc3RhY2sgIHVzYWdlCisgICAgICAgaW4gIHRoZSAgcGNyZTJzdGFjayBkb2N1bWVudGF0aW9uLiBTZWUgdGhlIHBjcmUyYnVpbGQgZG9jdW1lbnRhdGlvbiBmb3IKICAgICAgICBkZXRhaWxzIG9mIGhvdyB0byBidWlsZCBQQ1JFMi4KIAotICAgICAgIFVzaW5nICB0aGUgIGhlYXAgZm9yIHJlY3Vyc2lvbiBpcyBhIG5vbi1zdGFuZGFyZCB3YXkgb2YgYnVpbGRpbmcgUENSRTIsCi0gICAgICAgZm9yIHVzZSBpbiBlbnZpcm9ubWVudHMgIHRoYXQgIGhhdmUgIGxpbWl0ZWQgIHN0YWNrcy4gIEJlY2F1c2UgIG9mICB0aGUKKyAgICAgICBVc2luZyB0aGUgaGVhcCBmb3IgcmVjdXJzaW9uIGlzIGEgbm9uLXN0YW5kYXJkIHdheSBvZiAgYnVpbGRpbmcgIFBDUkUyLAorICAgICAgIGZvciAgdXNlICBpbiAgZW52aXJvbm1lbnRzICB0aGF0ICBoYXZlICBsaW1pdGVkICBzdGFja3MuIEJlY2F1c2Ugb2YgdGhlCiAgICAgICAgZ3JlYXRlciB1c2Ugb2YgbWVtb3J5IG1hbmFnZW1lbnQsIHBjcmUyX21hdGNoKCkgcnVucyBtb3JlIHNsb3dseS4gRnVuYy0KLSAgICAgICB0aW9ucyB0aGF0IGFyZSBkaWZmZXJlbnQgdG8gdGhlIGdlbmVyYWwgIGN1c3RvbSAgbWVtb3J5ICBmdW5jdGlvbnMgIGFyZQotICAgICAgIHByb3ZpZGVkICBzbyAgdGhhdCAgc3BlY2lhbC1wdXJwb3NlICBleHRlcm5hbCBjb2RlIGNhbiBiZSB1c2VkIGZvciB0aGlzCi0gICAgICAgY2FzZSwgYmVjYXVzZSB0aGUgbWVtb3J5IGJsb2NrcyBhcmUgYWxsIHRoZSBzYW1lIHNpemUuIFRoZSAgYmxvY2tzICBhcmUKKyAgICAgICB0aW9ucyAgdGhhdCAgYXJlICBkaWZmZXJlbnQgIHRvIHRoZSBnZW5lcmFsIGN1c3RvbSBtZW1vcnkgZnVuY3Rpb25zIGFyZQorICAgICAgIHByb3ZpZGVkIHNvIHRoYXQgc3BlY2lhbC1wdXJwb3NlIGV4dGVybmFsIGNvZGUgY2FuICBiZSAgdXNlZCAgZm9yICB0aGlzCisgICAgICAgY2FzZSwgIGJlY2F1c2UgIHRoZSBtZW1vcnkgYmxvY2tzIGFyZSBhbGwgdGhlIHNhbWUgc2l6ZS4gVGhlIGJsb2NrcyBhcmUKICAgICAgICByZXRhaW5lZCBieSBwY3JlMl9tYXRjaCgpIHVudGlsIGl0IGlzIGFib3V0IHRvIGV4aXQgc28gdGhhdCB0aGV5IGNhbiBiZQotICAgICAgIHJlLXVzZWQgd2hlbiBwb3NzaWJsZSBkdXJpbmcgdGhlIG1hdGNoLiBJbiB0aGUgYWJzZW5jZSBvZiAgdGhlc2UgIGZ1bmMtCi0gICAgICAgdGlvbnMsICB0aGUgbm9ybWFsIGN1c3RvbSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMgYXJlIHVzZWQsIGlmIHN1cC0KKyAgICAgICByZS11c2VkICB3aGVuICBwb3NzaWJsZSBkdXJpbmcgdGhlIG1hdGNoLiBJbiB0aGUgYWJzZW5jZSBvZiB0aGVzZSBmdW5jLQorICAgICAgIHRpb25zLCB0aGUgbm9ybWFsIGN1c3RvbSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMgYXJlIHVzZWQsIGlmICBzdXAtCiAgICAgICAgcGxpZWQsIG90aGVyd2lzZSB0aGUgc3lzdGVtIGZ1bmN0aW9ucy4KIAogCkBAIC05MjAsNzUgKzk2MCw3NSBAQAogCiAgICAgICAgaW50IHBjcmUyX2NvbmZpZyh1aW50MzJfdCB3aGF0LCB2b2lkICp3aGVyZSk7CiAKLSAgICAgICBUaGUgZnVuY3Rpb24gcGNyZTJfY29uZmlnKCkgbWFrZXMgaXQgcG9zc2libGUgZm9yICBhICBQQ1JFMiAgY2xpZW50ICB0bwotICAgICAgIGRpc2NvdmVyICB3aGljaCAgb3B0aW9uYWwgIGZlYXR1cmVzICBoYXZlICBiZWVuIGNvbXBpbGVkIGludG8gdGhlIFBDUkUyCi0gICAgICAgbGlicmFyeS4gVGhlIHBjcmUyYnVpbGQgZG9jdW1lbnRhdGlvbiAgaGFzICBtb3JlICBkZXRhaWxzICBhYm91dCAgdGhlc2UKKyAgICAgICBUaGUgIGZ1bmN0aW9uICBwY3JlMl9jb25maWcoKSAgbWFrZXMgIGl0IHBvc3NpYmxlIGZvciBhIFBDUkUyIGNsaWVudCB0bworICAgICAgIGRpc2NvdmVyIHdoaWNoIG9wdGlvbmFsIGZlYXR1cmVzIGhhdmUgIGJlZW4gIGNvbXBpbGVkICBpbnRvICB0aGUgIFBDUkUyCisgICAgICAgbGlicmFyeS4gIFRoZSAgcGNyZTJidWlsZCAgZG9jdW1lbnRhdGlvbiAgaGFzICBtb3JlIGRldGFpbHMgYWJvdXQgdGhlc2UKICAgICAgICBvcHRpb25hbCBmZWF0dXJlcy4KIAotICAgICAgIFRoZSAgZmlyc3QgIGFyZ3VtZW50ICBmb3IgcGNyZTJfY29uZmlnKCkgc3BlY2lmaWVzIHdoaWNoIGluZm9ybWF0aW9uIGlzCi0gICAgICAgcmVxdWlyZWQuIFRoZSBzZWNvbmQgYXJndW1lbnQgaXMgYSBwb2ludGVyIHRvICBtZW1vcnkgIGludG8gIHdoaWNoICB0aGUKLSAgICAgICBpbmZvcm1hdGlvbiAgaXMgIHBsYWNlZC4gIElmICBOVUxMICBpcyBwYXNzZWQsIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZQotICAgICAgIGFtb3VudCBvZiBtZW1vcnkgdGhhdCBpcyBuZWVkZWQgIGZvciAgdGhlICByZXF1ZXN0ZWQgIGluZm9ybWF0aW9uLiAgRm9yCi0gICAgICAgY2FsbHMgIHRoYXQgIHJldHVybiAgbnVtZXJpY2FsICB2YWx1ZXMsICB0aGUgIHZhbHVlICBpcyAgaW4gYnl0ZXM7IHdoZW4KLSAgICAgICByZXF1ZXN0aW5nIHRoZXNlIHZhbHVlcywgd2hlcmUgc2hvdWxkIHBvaW50ICB0byAgYXBwcm9wcmlhdGVseSAgYWxpZ25lZAotICAgICAgIG1lbW9yeS4gIEZvciBjYWxscyB0aGF0IHJldHVybiBzdHJpbmdzLCB0aGUgcmVxdWlyZWQgbGVuZ3RoIGlzIGdpdmVuIGluCisgICAgICAgVGhlIGZpcnN0IGFyZ3VtZW50IGZvciBwY3JlMl9jb25maWcoKSBzcGVjaWZpZXMgIHdoaWNoICBpbmZvcm1hdGlvbiAgaXMKKyAgICAgICByZXF1aXJlZC4gIFRoZSAgc2Vjb25kICBhcmd1bWVudCAgaXMgYSBwb2ludGVyIHRvIG1lbW9yeSBpbnRvIHdoaWNoIHRoZQorICAgICAgIGluZm9ybWF0aW9uIGlzIHBsYWNlZC4gSWYgTlVMTCBpcyAgcGFzc2VkLCAgdGhlICBmdW5jdGlvbiAgcmV0dXJucyAgdGhlCisgICAgICAgYW1vdW50ICBvZiAgbWVtb3J5ICB0aGF0ICBpcyAgbmVlZGVkIGZvciB0aGUgcmVxdWVzdGVkIGluZm9ybWF0aW9uLiBGb3IKKyAgICAgICBjYWxscyB0aGF0IHJldHVybiAgbnVtZXJpY2FsICB2YWx1ZXMsICB0aGUgIHZhbHVlICBpcyAgaW4gIGJ5dGVzOyAgd2hlbgorICAgICAgIHJlcXVlc3RpbmcgIHRoZXNlICB2YWx1ZXMsICB3aGVyZSBzaG91bGQgcG9pbnQgdG8gYXBwcm9wcmlhdGVseSBhbGlnbmVkCisgICAgICAgbWVtb3J5LiBGb3IgY2FsbHMgdGhhdCByZXR1cm4gc3RyaW5ncywgdGhlIHJlcXVpcmVkIGxlbmd0aCBpcyBnaXZlbiAgaW4KICAgICAgICBjb2RlIHVuaXRzLCBub3QgY291bnRpbmcgdGhlIHRlcm1pbmF0aW5nIHplcm8uCiAKLSAgICAgICBXaGVuIHJlcXVlc3RpbmcgaW5mb3JtYXRpb24sIHRoZSByZXR1cm5lZCB2YWx1ZSBmcm9tIHBjcmUyX2NvbmZpZygpICBpcwotICAgICAgIG5vbi1uZWdhdGl2ZSAgb24gc3VjY2Vzcywgb3IgdGhlIG5lZ2F0aXZlIGVycm9yIGNvZGUgUENSRTJfRVJST1JfQkFET1AtCi0gICAgICAgVElPTiBpZiB0aGUgdmFsdWUgaW4gdGhlIGZpcnN0IGFyZ3VtZW50IGlzIG5vdCByZWNvZ25pemVkLiBUaGUgIGZvbGxvdy0KKyAgICAgICBXaGVuICByZXF1ZXN0aW5nIGluZm9ybWF0aW9uLCB0aGUgcmV0dXJuZWQgdmFsdWUgZnJvbSBwY3JlMl9jb25maWcoKSBpcworICAgICAgIG5vbi1uZWdhdGl2ZSBvbiBzdWNjZXNzLCBvciB0aGUgbmVnYXRpdmUgZXJyb3IgY29kZSAgUENSRTJfRVJST1JfQkFET1AtCisgICAgICAgVElPTiAgaWYgdGhlIHZhbHVlIGluIHRoZSBmaXJzdCBhcmd1bWVudCBpcyBub3QgcmVjb2duaXplZC4gVGhlIGZvbGxvdy0KICAgICAgICBpbmcgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlOgogCiAgICAgICAgICBQQ1JFMl9DT05GSUdfQlNSCiAKLSAgICAgICBUaGUgIG91dHB1dCAgaXMgYSB1aW50MzJfdCBpbnRlZ2VyIHdob3NlIHZhbHVlIGluZGljYXRlcyB3aGF0IGNoYXJhY3RlcgotICAgICAgIHNlcXVlbmNlcyB0aGUgXFIgIGVzY2FwZSAgc2VxdWVuY2UgIG1hdGNoZXMgIGJ5ICBkZWZhdWx0LiAgQSAgdmFsdWUgIG9mCisgICAgICAgVGhlIG91dHB1dCBpcyBhIHVpbnQzMl90IGludGVnZXIgd2hvc2UgdmFsdWUgaW5kaWNhdGVzICB3aGF0ICBjaGFyYWN0ZXIKKyAgICAgICBzZXF1ZW5jZXMgIHRoZSAgXFIgIGVzY2FwZSAgc2VxdWVuY2UgIG1hdGNoZXMgIGJ5ICBkZWZhdWx0LiAgQSB2YWx1ZSBvZgogICAgICAgIFBDUkUyX0JTUl9VTklDT0RFICBtZWFucyAgdGhhdCAgXFIgIG1hdGNoZXMgIGFueSAgVW5pY29kZSAgbGluZSAgZW5kaW5nCi0gICAgICAgc2VxdWVuY2U7IGEgdmFsdWUgb2YgUENSRTJfQlNSX0FOWUNSTEYgbWVhbnMgdGhhdCBcUiBtYXRjaGVzICBvbmx5ICBDUiwKKyAgICAgICBzZXF1ZW5jZTsgIGEgIHZhbHVlIG9mIFBDUkUyX0JTUl9BTllDUkxGIG1lYW5zIHRoYXQgXFIgbWF0Y2hlcyBvbmx5IENSLAogICAgICAgIExGLCBvciBDUkxGLiBUaGUgZGVmYXVsdCBjYW4gYmUgb3ZlcnJpZGRlbiB3aGVuIGEgcGF0dGVybiBpcyBjb21waWxlZC4KIAogICAgICAgICAgUENSRTJfQ09ORklHX0pJVAogCi0gICAgICAgVGhlICBvdXRwdXQgIGlzICBhICB1aW50MzJfdCAgaW50ZWdlciB0aGF0IGlzIHNldCB0byBvbmUgaWYgc3VwcG9ydCBmb3IKKyAgICAgICBUaGUgb3V0cHV0IGlzIGEgdWludDMyX3QgaW50ZWdlciB0aGF0IGlzIHNldCAgdG8gIG9uZSAgaWYgIHN1cHBvcnQgIGZvcgogICAgICAgIGp1c3QtaW4tdGltZSBjb21waWxpbmcgaXMgYXZhaWxhYmxlOyBvdGhlcndpc2UgaXQgaXMgc2V0IHRvIHplcm8uCiAKICAgICAgICAgIFBDUkUyX0NPTkZJR19KSVRUQVJHRVQKIAotICAgICAgIFRoZSB3aGVyZSBhcmd1bWVudCBzaG91bGQgcG9pbnQgdG8gYSBidWZmZXIgdGhhdCBpcyBhdCAgbGVhc3QgIDQ4ICBjb2RlCi0gICAgICAgdW5pdHMgIGxvbmcuICAoVGhlICBleGFjdCAgbGVuZ3RoICByZXF1aXJlZCAgY2FuICBiZSAgZm91bmQgIGJ5IGNhbGxpbmcKLSAgICAgICBwY3JlMl9jb25maWcoKSB3aXRoIHdoZXJlIHNldCB0byBOVUxMLikgVGhlIGJ1ZmZlciAgaXMgIGZpbGxlZCAgd2l0aCAgYQotICAgICAgIHN0cmluZyAgdGhhdCAgY29udGFpbnMgIHRoZSAgbmFtZSBvZiB0aGUgYXJjaGl0ZWN0dXJlIGZvciB3aGljaCB0aGUgSklUCi0gICAgICAgY29tcGlsZXIgaXMgIGNvbmZpZ3VyZWQsICBmb3IgIGV4YW1wbGUgICJ4ODYgIDMyYml0ICAobGl0dGxlICBlbmRpYW4gICsKLSAgICAgICB1bmFsaWduZWQpIi4gIElmIEpJVCBzdXBwb3J0IGlzIG5vdCBhdmFpbGFibGUsIFBDUkUyX0VSUk9SX0JBRE9QVElPTiBpcwotICAgICAgIHJldHVybmVkLCBvdGhlcndpc2UgdGhlIG51bWJlciBvZiBjb2RlIHVuaXRzIHVzZWQgaXMgcmV0dXJuZWQuIFRoaXMgIGlzCisgICAgICAgVGhlICB3aGVyZSAgYXJndW1lbnQgIHNob3VsZCBwb2ludCB0byBhIGJ1ZmZlciB0aGF0IGlzIGF0IGxlYXN0IDQ4IGNvZGUKKyAgICAgICB1bml0cyBsb25nLiAgKFRoZSAgZXhhY3QgIGxlbmd0aCAgcmVxdWlyZWQgIGNhbiAgYmUgIGZvdW5kICBieSAgY2FsbGluZworICAgICAgIHBjcmUyX2NvbmZpZygpICB3aXRoICB3aGVyZSAgc2V0ICB0byBOVUxMLikgVGhlIGJ1ZmZlciBpcyBmaWxsZWQgd2l0aCBhCisgICAgICAgc3RyaW5nIHRoYXQgY29udGFpbnMgdGhlIG5hbWUgb2YgdGhlIGFyY2hpdGVjdHVyZSAgZm9yICB3aGljaCAgdGhlICBKSVQKKyAgICAgICBjb21waWxlciAgaXMgIGNvbmZpZ3VyZWQsICBmb3IgIGV4YW1wbGUgICJ4ODYgIDMyYml0ICAobGl0dGxlICBlbmRpYW4gKworICAgICAgIHVuYWxpZ25lZCkiLiBJZiBKSVQgc3VwcG9ydCBpcyBub3QgYXZhaWxhYmxlLCBQQ1JFMl9FUlJPUl9CQURPUFRJT04gIGlzCisgICAgICAgcmV0dXJuZWQsICBvdGhlcndpc2UgdGhlIG51bWJlciBvZiBjb2RlIHVuaXRzIHVzZWQgaXMgcmV0dXJuZWQuIFRoaXMgaXMKICAgICAgICB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcsIHBsdXMgb25lIHVuaXQgZm9yIHRoZSB0ZXJtaW5hdGluZyB6ZXJvLgogCiAgICAgICAgICBQQ1JFMl9DT05GSUdfTElOS1NJWkUKIAogICAgICAgIFRoZSBvdXRwdXQgaXMgYSB1aW50MzJfdCBpbnRlZ2VyIHRoYXQgY29udGFpbnMgdGhlIG51bWJlciBvZiBieXRlcyB1c2VkCi0gICAgICAgZm9yIGludGVybmFsIGxpbmthZ2UgaW4gY29tcGlsZWQgcmVndWxhciAgZXhwcmVzc2lvbnMuICBXaGVuICBQQ1JFMiAgaXMKLSAgICAgICBjb25maWd1cmVkLCAgdGhlIHZhbHVlIGNhbiBiZSBzZXQgdG8gMiwgMywgb3IgNCwgd2l0aCB0aGUgZGVmYXVsdCBiZWluZwotICAgICAgIDIuIFRoaXMgaXMgdGhlIHZhbHVlIHRoYXQgaXMgcmV0dXJuZWQgYnkgcGNyZTJfY29uZmlnKCkuIEhvd2V2ZXIsICB3aGVuCi0gICAgICAgdGhlICAxNi1iaXQgIGxpYnJhcnkgIGlzIGNvbXBpbGVkLCBhIHZhbHVlIG9mIDMgaXMgcm91bmRlZCB1cCB0byA0LCBhbmQKLSAgICAgICB3aGVuIHRoZSAzMi1iaXQgbGlicmFyeSBpcyBjb21waWxlZCwgaW50ZXJuYWwgIGxpbmthZ2VzICBhbHdheXMgIHVzZSAgNAorICAgICAgIGZvciAgaW50ZXJuYWwgIGxpbmthZ2UgIGluICBjb21waWxlZCByZWd1bGFyIGV4cHJlc3Npb25zLiBXaGVuIFBDUkUyIGlzCisgICAgICAgY29uZmlndXJlZCwgdGhlIHZhbHVlIGNhbiBiZSBzZXQgdG8gMiwgMywgb3IgNCwgd2l0aCB0aGUgZGVmYXVsdCAgYmVpbmcKKyAgICAgICAyLiAgVGhpcyBpcyB0aGUgdmFsdWUgdGhhdCBpcyByZXR1cm5lZCBieSBwY3JlMl9jb25maWcoKS4gSG93ZXZlciwgd2hlbgorICAgICAgIHRoZSAxNi1iaXQgbGlicmFyeSBpcyBjb21waWxlZCwgYSB2YWx1ZSBvZiAzIGlzIHJvdW5kZWQgdXAgIHRvICA0LCAgYW5kCisgICAgICAgd2hlbiAgdGhlICAzMi1iaXQgIGxpYnJhcnkgIGlzIGNvbXBpbGVkLCBpbnRlcm5hbCBsaW5rYWdlcyBhbHdheXMgdXNlIDQKICAgICAgICBieXRlcywgc28gdGhlIGNvbmZpZ3VyZWQgdmFsdWUgaXMgbm90IHJlbGV2YW50LgogCiAgICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgb2YgMiBmb3IgdGhlIDgtYml0IGFuZCAxNi1iaXQgbGlicmFyaWVzIGlzIHN1ZmZpY2llbnQKLSAgICAgICBmb3IgYWxsIGJ1dCB0aGUgbW9zdCBtYXNzaXZlIHBhdHRlcm5zLCBzaW5jZSBpdCBhbGxvd3MgdGhlIHNpemUgb2YgIHRoZQorICAgICAgIGZvciAgYWxsIGJ1dCB0aGUgbW9zdCBtYXNzaXZlIHBhdHRlcm5zLCBzaW5jZSBpdCBhbGxvd3MgdGhlIHNpemUgb2YgdGhlCiAgICAgICAgY29tcGlsZWQgcGF0dGVybiB0byBiZSB1cCB0byA2NEsgY29kZSB1bml0cy4gTGFyZ2VyIHZhbHVlcyBhbGxvdyBsYXJnZXIKLSAgICAgICByZWd1bGFyIGV4cHJlc3Npb25zIHRvIGJlIGNvbXBpbGVkIGJ5IHRob3NlIHR3byBsaWJyYXJpZXMsIGJ1dCAgYXQgIHRoZQorICAgICAgIHJlZ3VsYXIgIGV4cHJlc3Npb25zICB0byBiZSBjb21waWxlZCBieSB0aG9zZSB0d28gbGlicmFyaWVzLCBidXQgYXQgdGhlCiAgICAgICAgZXhwZW5zZSBvZiBzbG93ZXIgbWF0Y2hpbmcuCiAKICAgICAgICAgIFBDUkUyX0NPTkZJR19NQVRDSExJTUlUCiAKLSAgICAgICBUaGUgIG91dHB1dCAgaXMgYSB1aW50MzJfdCBpbnRlZ2VyIHRoYXQgZ2l2ZXMgdGhlIGRlZmF1bHQgbGltaXQgZm9yIHRoZQotICAgICAgIG51bWJlciBvZiBpbnRlcm5hbCBtYXRjaGluZyBmdW5jdGlvbiBjYWxscyBpbiAgYSAgcGNyZTJfbWF0Y2goKSAgZXhlY3UtCisgICAgICAgVGhlIG91dHB1dCBpcyBhIHVpbnQzMl90IGludGVnZXIgdGhhdCBnaXZlcyB0aGUgZGVmYXVsdCBsaW1pdCAgZm9yICB0aGUKKyAgICAgICBudW1iZXIgIG9mICBpbnRlcm5hbCAgbWF0Y2hpbmcgZnVuY3Rpb24gY2FsbHMgaW4gYSBwY3JlMl9tYXRjaCgpIGV4ZWN1LQogICAgICAgIHRpb24uIEZ1cnRoZXIgZGV0YWlscyBhcmUgZ2l2ZW4gd2l0aCBwY3JlMl9tYXRjaCgpIGJlbG93LgogCiAgICAgICAgICBQQ1JFMl9DT05GSUdfTkVXTElORQogCi0gICAgICAgVGhlICBvdXRwdXQgIGlzICBhICB1aW50MzJfdCAgaW50ZWdlciB3aG9zZSB2YWx1ZSBzcGVjaWZpZXMgdGhlIGRlZmF1bHQKLSAgICAgICBjaGFyYWN0ZXIgc2VxdWVuY2UgdGhhdCBpcyByZWNvZ25pemVkIGFzIG1lYW5pbmcgIm5ld2xpbmUiLiBUaGUgIHZhbHVlcworICAgICAgIFRoZSBvdXRwdXQgaXMgYSB1aW50MzJfdCBpbnRlZ2VyICB3aG9zZSAgdmFsdWUgIHNwZWNpZmllcyAgdGhlICBkZWZhdWx0CisgICAgICAgY2hhcmFjdGVyICBzZXF1ZW5jZSB0aGF0IGlzIHJlY29nbml6ZWQgYXMgbWVhbmluZyAibmV3bGluZSIuIFRoZSB2YWx1ZXMKICAgICAgICBhcmU6CiAKICAgICAgICAgIFBDUkUyX05FV0xJTkVfQ1IgICAgICAgQ2FycmlhZ2UgcmV0dXJuIChDUikKQEAgLTk5Nyw1NiArMTAzNyw1NiBAQAogICAgICAgICAgUENSRTJfTkVXTElORV9BTlkgICAgICBBbnkgVW5pY29kZSBsaW5lIGVuZGluZwogICAgICAgICAgUENSRTJfTkVXTElORV9BTllDUkxGICBBbnkgb2YgQ1IsIExGLCBvciBDUkxGCiAKLSAgICAgICBUaGUgIGRlZmF1bHQgIHNob3VsZCAgbm9ybWFsbHkgIGNvcnJlc3BvbmQgdG8gdGhlIHN0YW5kYXJkIHNlcXVlbmNlIGZvcgorICAgICAgIFRoZSBkZWZhdWx0IHNob3VsZCBub3JtYWxseSBjb3JyZXNwb25kIHRvICB0aGUgIHN0YW5kYXJkICBzZXF1ZW5jZSAgZm9yCiAgICAgICAgeW91ciBvcGVyYXRpbmcgc3lzdGVtLgogCiAgICAgICAgICBQQ1JFMl9DT05GSUdfUEFSRU5TTElNSVQKIAotICAgICAgIFRoZSBvdXRwdXQgaXMgYSB1aW50MzJfdCBpbnRlZ2VyIHRoYXQgZ2l2ZXMgdGhlIG1heGltdW0gZGVwdGggb2YgIG5lc3QtCisgICAgICAgVGhlICBvdXRwdXQgaXMgYSB1aW50MzJfdCBpbnRlZ2VyIHRoYXQgZ2l2ZXMgdGhlIG1heGltdW0gZGVwdGggb2YgbmVzdC0KICAgICAgICBpbmcgb2YgcGFyZW50aGVzZXMgKG9mIGFueSBraW5kKSBpbiBhIHBhdHRlcm4uIFRoaXMgbGltaXQgaXMgaW1wb3NlZCB0bwotICAgICAgIGNhcCB0aGUgYW1vdW50IG9mIHN5c3RlbSBzdGFjayB1c2VkIHdoZW4gYSBwYXR0ZXJuIGlzIGNvbXBpbGVkLiAgSXQgIGlzCi0gICAgICAgc3BlY2lmaWVkICB3aGVuIFBDUkUyIGlzIGJ1aWx0OyB0aGUgZGVmYXVsdCBpcyAyNTAuIFRoaXMgbGltaXQgZG9lcyBub3QKLSAgICAgICB0YWtlIGludG8gYWNjb3VudCB0aGUgc3RhY2sgdGhhdCBtYXkgYWxyZWFkeSBiZSAgdXNlZCAgYnkgIHRoZSAgY2FsbGluZwotICAgICAgIGFwcGxpY2F0aW9uLiAgRm9yICBmaW5lciAgY29udHJvbCAgb3ZlciAgY29tcGlsYXRpb24gIHN0YWNrICB1c2FnZSwgc2VlCisgICAgICAgY2FwICB0aGUgIGFtb3VudCBvZiBzeXN0ZW0gc3RhY2sgdXNlZCB3aGVuIGEgcGF0dGVybiBpcyBjb21waWxlZC4gSXQgaXMKKyAgICAgICBzcGVjaWZpZWQgd2hlbiBQQ1JFMiBpcyBidWlsdDsgdGhlIGRlZmF1bHQgaXMgMjUwLiBUaGlzIGxpbWl0IGRvZXMgIG5vdAorICAgICAgIHRha2UgIGludG8gIGFjY291bnQgIHRoZSAgc3RhY2sgdGhhdCBtYXkgYWxyZWFkeSBiZSB1c2VkIGJ5IHRoZSBjYWxsaW5nCisgICAgICAgYXBwbGljYXRpb24uIEZvciAgZmluZXIgIGNvbnRyb2wgIG92ZXIgIGNvbXBpbGF0aW9uICBzdGFjayAgdXNhZ2UsICBzZWUKICAgICAgICBwY3JlMl9zZXRfY29tcGlsZV9yZWN1cnNpb25fZ3VhcmQoKS4KIAogICAgICAgICAgUENSRTJfQ09ORklHX1JFQ1VSU0lPTkxJTUlUCiAKLSAgICAgICBUaGUgb3V0cHV0IGlzIGEgdWludDMyX3QgaW50ZWdlciB0aGF0IGdpdmVzIHRoZSBkZWZhdWx0IGxpbWl0ICBmb3IgIHRoZQotICAgICAgIGRlcHRoICBvZiAgcmVjdXJzaW9uICB3aGVuICBjYWxsaW5nIHRoZSBpbnRlcm5hbCBtYXRjaGluZyBmdW5jdGlvbiBpbiBhCi0gICAgICAgcGNyZTJfbWF0Y2goKSBleGVjdXRpb24uIEZ1cnRoZXIgZGV0YWlscyBhcmUgZ2l2ZW4gIHdpdGggIHBjcmUyX21hdGNoKCkKKyAgICAgICBUaGUgIG91dHB1dCAgaXMgYSB1aW50MzJfdCBpbnRlZ2VyIHRoYXQgZ2l2ZXMgdGhlIGRlZmF1bHQgbGltaXQgZm9yIHRoZQorICAgICAgIGRlcHRoIG9mIHJlY3Vyc2lvbiB3aGVuIGNhbGxpbmcgdGhlIGludGVybmFsICBtYXRjaGluZyAgZnVuY3Rpb24gIGluICBhCisgICAgICAgcGNyZTJfbWF0Y2goKSAgZXhlY3V0aW9uLiAgRnVydGhlciBkZXRhaWxzIGFyZSBnaXZlbiB3aXRoIHBjcmUyX21hdGNoKCkKICAgICAgICBiZWxvdy4KIAogICAgICAgICAgUENSRTJfQ09ORklHX1NUQUNLUkVDVVJTRQogCi0gICAgICAgVGhlICBvdXRwdXQgaXMgYSB1aW50MzJfdCBpbnRlZ2VyIHRoYXQgaXMgc2V0IHRvIG9uZSBpZiBpbnRlcm5hbCByZWN1ci0KLSAgICAgICBzaW9uIHdoZW4gcnVubmluZyBwY3JlMl9tYXRjaCgpIGlzIGltcGxlbWVudGVkICBieSAgcmVjdXJzaXZlICBmdW5jdGlvbgotICAgICAgIGNhbGxzICB0aGF0ICB1c2UgIHRoZSBzeXN0ZW0gc3RhY2sgdG8gcmVtZW1iZXIgdGhlaXIgc3RhdGUuIFRoaXMgaXMgdGhlCi0gICAgICAgdXN1YWwgd2F5IHRoYXQgUENSRTIgaXMgY29tcGlsZWQuIFRoZSBvdXRwdXQgaXMgemVybyBpZiBQQ1JFMiB3YXMgIGNvbS0KLSAgICAgICBwaWxlZCAgdG8gIHVzZSBibG9ja3Mgb2YgZGF0YSBvbiB0aGUgaGVhcCBpbnN0ZWFkIG9mIHJlY3Vyc2l2ZSBmdW5jdGlvbgorICAgICAgIFRoZSBvdXRwdXQgaXMgYSB1aW50MzJfdCBpbnRlZ2VyIHRoYXQgaXMgc2V0IHRvIG9uZSBpZiBpbnRlcm5hbCAgcmVjdXItCisgICAgICAgc2lvbiAgd2hlbiAgcnVubmluZyAgcGNyZTJfbWF0Y2goKSBpcyBpbXBsZW1lbnRlZCBieSByZWN1cnNpdmUgZnVuY3Rpb24KKyAgICAgICBjYWxscyB0aGF0IHVzZSB0aGUgc3lzdGVtIHN0YWNrIHRvIHJlbWVtYmVyIHRoZWlyIHN0YXRlLiAgVGhpcyAgaXMgIHRoZQorICAgICAgIHVzdWFsICB3YXkgdGhhdCBQQ1JFMiBpcyBjb21waWxlZC4gVGhlIG91dHB1dCBpcyB6ZXJvIGlmIFBDUkUyIHdhcyBjb20tCisgICAgICAgcGlsZWQgdG8gdXNlIGJsb2NrcyBvZiBkYXRhIG9uIHRoZSBoZWFwIGluc3RlYWQgb2YgIHJlY3Vyc2l2ZSAgZnVuY3Rpb24KICAgICAgICBjYWxscy4KIAogICAgICAgICAgUENSRTJfQ09ORklHX1VOSUNPREVfVkVSU0lPTgogCi0gICAgICAgVGhlIHdoZXJlIGFyZ3VtZW50IHNob3VsZCBwb2ludCB0byBhIGJ1ZmZlciB0aGF0IGlzIGF0ICBsZWFzdCAgMjQgIGNvZGUKLSAgICAgICB1bml0cyAgbG9uZy4gIChUaGUgIGV4YWN0ICBsZW5ndGggIHJlcXVpcmVkICBjYW4gIGJlICBmb3VuZCAgYnkgY2FsbGluZwotICAgICAgIHBjcmUyX2NvbmZpZygpIHdpdGggd2hlcmUgc2V0IHRvIE5VTEwuKSAgSWYgIFBDUkUyICBoYXMgIGJlZW4gIGNvbXBpbGVkCi0gICAgICAgd2l0aG91dCAgVW5pY29kZSAgc3VwcG9ydCwgIHRoZSBidWZmZXIgaXMgZmlsbGVkIHdpdGggdGhlIHRleHQgIlVuaWNvZGUKLSAgICAgICBub3Qgc3VwcG9ydGVkIi4gT3RoZXJ3aXNlLCB0aGUgVW5pY29kZSAgdmVyc2lvbiAgc3RyaW5nICAoZm9yICBleGFtcGxlLAotICAgICAgICI4LjAuMCIpICBpcyAgaW5zZXJ0ZWQuIFRoZSBudW1iZXIgb2YgY29kZSB1bml0cyB1c2VkIGlzIHJldHVybmVkLiBUaGlzCisgICAgICAgVGhlICB3aGVyZSAgYXJndW1lbnQgIHNob3VsZCBwb2ludCB0byBhIGJ1ZmZlciB0aGF0IGlzIGF0IGxlYXN0IDI0IGNvZGUKKyAgICAgICB1bml0cyBsb25nLiAgKFRoZSAgZXhhY3QgIGxlbmd0aCAgcmVxdWlyZWQgIGNhbiAgYmUgIGZvdW5kICBieSAgY2FsbGluZworICAgICAgIHBjcmUyX2NvbmZpZygpICB3aXRoICB3aGVyZSAgc2V0ICB0byAgTlVMTC4pIElmIFBDUkUyIGhhcyBiZWVuIGNvbXBpbGVkCisgICAgICAgd2l0aG91dCBVbmljb2RlIHN1cHBvcnQsIHRoZSBidWZmZXIgaXMgZmlsbGVkIHdpdGggIHRoZSAgdGV4dCAgIlVuaWNvZGUKKyAgICAgICBub3QgIHN1cHBvcnRlZCIuICBPdGhlcndpc2UsICB0aGUgIFVuaWNvZGUgdmVyc2lvbiBzdHJpbmcgKGZvciBleGFtcGxlLAorICAgICAgICI4LjAuMCIpIGlzIGluc2VydGVkLiBUaGUgbnVtYmVyIG9mIGNvZGUgdW5pdHMgdXNlZCBpcyAgcmV0dXJuZWQuICBUaGlzCiAgICAgICAgaXMgdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIHBsdXMgb25lIHVuaXQgZm9yIHRoZSB0ZXJtaW5hdGluZyB6ZXJvLgogCiAgICAgICAgICBQQ1JFMl9DT05GSUdfVU5JQ09ERQogCi0gICAgICAgVGhlIG91dHB1dCBpcyBhIHVpbnQzMl90IGludGVnZXIgdGhhdCBpcyBzZXQgdG8gb25lIGlmIFVuaWNvZGUgIHN1cHBvcnQKLSAgICAgICBpcyAgYXZhaWxhYmxlOyBvdGhlcndpc2UgaXQgaXMgc2V0IHRvIHplcm8uIFVuaWNvZGUgc3VwcG9ydCBpbXBsaWVzIFVURgorICAgICAgIFRoZSAgb3V0cHV0IGlzIGEgdWludDMyX3QgaW50ZWdlciB0aGF0IGlzIHNldCB0byBvbmUgaWYgVW5pY29kZSBzdXBwb3J0CisgICAgICAgaXMgYXZhaWxhYmxlOyBvdGhlcndpc2UgaXQgaXMgc2V0IHRvIHplcm8uIFVuaWNvZGUgc3VwcG9ydCBpbXBsaWVzICBVVEYKICAgICAgICBzdXBwb3J0LgogCiAgICAgICAgICBQQ1JFMl9DT05GSUdfVkVSU0lPTgogCi0gICAgICAgVGhlIHdoZXJlIGFyZ3VtZW50IHNob3VsZCBwb2ludCB0byBhIGJ1ZmZlciB0aGF0IGlzIGF0ICBsZWFzdCAgMTIgIGNvZGUKLSAgICAgICB1bml0cyAgbG9uZy4gIChUaGUgIGV4YWN0ICBsZW5ndGggIHJlcXVpcmVkICBjYW4gIGJlICBmb3VuZCAgYnkgY2FsbGluZwotICAgICAgIHBjcmUyX2NvbmZpZygpIHdpdGggd2hlcmUgc2V0IHRvIE5VTEwuKSBUaGUgYnVmZmVyIGlzIGZpbGxlZCAgd2l0aCAgdGhlCisgICAgICAgVGhlICB3aGVyZSAgYXJndW1lbnQgIHNob3VsZCBwb2ludCB0byBhIGJ1ZmZlciB0aGF0IGlzIGF0IGxlYXN0IDEyIGNvZGUKKyAgICAgICB1bml0cyBsb25nLiAgKFRoZSAgZXhhY3QgIGxlbmd0aCAgcmVxdWlyZWQgIGNhbiAgYmUgIGZvdW5kICBieSAgY2FsbGluZworICAgICAgIHBjcmUyX2NvbmZpZygpICB3aXRoICB3aGVyZSBzZXQgdG8gTlVMTC4pIFRoZSBidWZmZXIgaXMgZmlsbGVkIHdpdGggdGhlCiAgICAgICAgUENSRTIgdmVyc2lvbiBzdHJpbmcsIHplcm8tdGVybWluYXRlZC4gVGhlIG51bWJlciBvZiBjb2RlIHVuaXRzIHVzZWQgaXMKICAgICAgICByZXR1cm5lZC4gVGhpcyBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgcGx1cyBvbmUgdW5pdCBmb3IgdGhlIHRlcm1pLQogICAgICAgIG5hdGluZyB6ZXJvLgpAQCAtMTA2MCw1OCArMTEwMCw3NCBAQAogCiAgICAgICAgdm9pZCBwY3JlMl9jb2RlX2ZyZWUocGNyZTJfY29kZSAqY29kZSk7CiAKLSAgICAgICBUaGUgIHBjcmUyX2NvbXBpbGUoKSBmdW5jdGlvbiBjb21waWxlcyBhIHBhdHRlcm4gaW50byBhbiBpbnRlcm5hbCBmb3JtLgotICAgICAgIFRoZSBwYXR0ZXJuIGlzIGRlZmluZWQgYnkgYSBwb2ludGVyIHRvIGEgc3RyaW5nIG9mICBjb2RlICB1bml0cyAgYW5kICBhCi0gICAgICAgbGVuZ3RoLCAgSWYgdGhlIHBhdHRlcm4gaXMgemVyby10ZXJtaW5hdGVkLCB0aGUgbGVuZ3RoIGNhbiBiZSBzcGVjaWZpZWQKLSAgICAgICBhcyBQQ1JFMl9aRVJPX1RFUk1JTkFURUQuIFRoZSBmdW5jdGlvbiByZXR1cm5zIGEgcG9pbnRlciB0byBhIGJsb2NrICBvZgotICAgICAgIG1lbW9yeSAgdGhhdCBjb250YWlucyB0aGUgY29tcGlsZWQgcGF0dGVybiBhbmQgcmVsYXRlZCBkYXRhLiBUaGUgY2FsbGVyCi0gICAgICAgbXVzdCBmcmVlIHRoZSBtZW1vcnkgYnkgY2FsbGluZyBwY3JlMl9jb2RlX2ZyZWUoKSB3aGVuIGl0IGlzIG5vICBsb25nZXIKLSAgICAgICBuZWVkZWQuCisgICAgICAgcGNyZTJfY29kZSAqcGNyZTJfY29kZV9jb3B5KGNvbnN0IHBjcmUyX2NvZGUgKmNvZGUpOworCisgICAgICAgVGhlIHBjcmUyX2NvbXBpbGUoKSBmdW5jdGlvbiBjb21waWxlcyBhIHBhdHRlcm4gaW50byBhbiBpbnRlcm5hbCAgZm9ybS4KKyAgICAgICBUaGUgIHBhdHRlcm4gIGlzICBkZWZpbmVkICBieSBhIHBvaW50ZXIgdG8gYSBzdHJpbmcgb2YgY29kZSB1bml0cyBhbmQgYQorICAgICAgIGxlbmd0aC4gSWYgdGhlIHBhdHRlcm4gaXMgemVyby10ZXJtaW5hdGVkLCB0aGUgbGVuZ3RoIGNhbiBiZSAgc3BlY2lmaWVkCisgICAgICAgYXMgIFBDUkUyX1pFUk9fVEVSTUlOQVRFRC4gVGhlIGZ1bmN0aW9uIHJldHVybnMgYSBwb2ludGVyIHRvIGEgYmxvY2sgb2YKKyAgICAgICBtZW1vcnkgdGhhdCBjb250YWlucyB0aGUgY29tcGlsZWQgcGF0dGVybiBhbmQgcmVsYXRlZCBkYXRhLCBvciBOVUxMICBpZgorICAgICAgIGFuIGVycm9yIG9jY3VycmVkLgorCisgICAgICAgSWYgIHRoZSAgY29tcGlsZSBjb250ZXh0IGFyZ3VtZW50IGNjb250ZXh0IGlzIE5VTEwsIG1lbW9yeSBmb3IgdGhlIGNvbS0KKyAgICAgICBwaWxlZCBwYXR0ZXJuICBpcyAgb2J0YWluZWQgIGJ5ICBjYWxsaW5nICBtYWxsb2MoKS4gIE90aGVyd2lzZSwgIGl0ICBpcworICAgICAgIG9idGFpbmVkICBmcm9tICB0aGUgIHNhbWUgbWVtb3J5IGZ1bmN0aW9uIHRoYXQgd2FzIHVzZWQgZm9yIHRoZSBjb21waWxlCisgICAgICAgY29udGV4dC4gVGhlIGNhbGxlciBtdXN0IGZyZWUgdGhlIG1lbW9yeSBieSAgY2FsbGluZyAgcGNyZTJfY29kZV9mcmVlKCkKKyAgICAgICB3aGVuIGl0IGlzIG5vIGxvbmdlciBuZWVkZWQuCisKKyAgICAgICBUaGUgZnVuY3Rpb24gcGNyZTJfY29kZV9jb3B5KCkgbWFrZXMgYSBjb3B5IG9mIHRoZSBjb21waWxlZCBjb2RlIGluIG5ldworICAgICAgIG1lbW9yeSwgdXNpbmcgdGhlIHNhbWUgbWVtb3J5IGFsbG9jYXRvciBhcyB3YXMgdXNlZCBmb3IgIHRoZSAgb3JpZ2luYWwuCisgICAgICAgSG93ZXZlciwgIGlmICB0aGUgIGNvZGUgIGhhcyAgYmVlbiAgcHJvY2Vzc2VkICBieSB0aGUgSklUIGNvbXBpbGVyIChzZWUKKyAgICAgICBiZWxvdyksIHRoZSBKSVQgaW5mb3JtYXRpb24gY2Fubm90IGJlIGNvcGllZCAoYmVjYXVzZSBpdCAgaXMgIHBvc2l0aW9uLQorICAgICAgIGRlcGVuZGVudCkuICBUaGUgbmV3IGNvcHkgY2FuIGluaXRpYWxseSBiZSB1c2VkIG9ubHkgZm9yIG5vbi1KSVQgbWF0Y2gtCisgICAgICAgaW5nLCB0aG91Z2ggaXQgY2FuIGJlIHBhc3NlZCB0byBwY3JlMl9qaXRfY29tcGlsZSgpICBpZiAgcmVxdWlyZWQuICBUaGUKKyAgICAgICBwY3JlMl9jb2RlX2NvcHkoKSAgZnVuY3Rpb24gIHByb3ZpZGVzIGEgd2F5IGZvciBpbmRpdmlkdWFsIHRocmVhZHMgaW4gYQorICAgICAgIG11bHRpdGhyZWFkZWQgYXBwbGljYXRpb24gdG8gYWNxdWlyZSBhIHByaXZhdGUgY29weSBvZiBzaGFyZWQgIGNvbXBpbGVkCisgICAgICAgY29kZS4KIAogICAgICAgIE5PVEU6ICBXaGVuICBvbmUgIG9mICB0aGUgbWF0Y2hpbmcgZnVuY3Rpb25zIGlzIGNhbGxlZCwgcG9pbnRlcnMgdG8gdGhlCiAgICAgICAgY29tcGlsZWQgcGF0dGVybiBhbmQgdGhlIHN1YmplY3Qgc3RyaW5nIGFyZSBzZXQgaW4gdGhlIG1hdGNoIGRhdGEgYmxvY2sKLSAgICAgICBzbyAgdGhhdCB0aGV5IGNhbiBiZSByZWZlcmVuY2VkIGJ5IHRoZSBleHRyYWN0aW9uIGZ1bmN0aW9ucy4gQWZ0ZXIgcnVuLQotICAgICAgIG5pbmcgYSBtYXRjaCwgeW91IG11c3Qgbm90ICBmcmVlICBhICBjb21waWxlZCAgcGF0dGVybiAgKG9yICBhICBzdWJqZWN0Ci0gICAgICAgc3RyaW5nKSAgdW50aWwgIGFmdGVyIGFsbCBvcGVyYXRpb25zIG9uIHRoZSBtYXRjaCBkYXRhIGJsb2NrIGhhdmUgdGFrZW4KLSAgICAgICBwbGFjZS4KKyAgICAgICBzbyAgdGhhdCAgdGhleSBjYW4gYmUgcmVmZXJlbmNlZCBieSB0aGUgc3Vic3RyaW5nIGV4dHJhY3Rpb24gZnVuY3Rpb25zLgorICAgICAgIEFmdGVyIHJ1bm5pbmcgYSBtYXRjaCwgeW91IG11c3Qgbm90IGZyZWUgYSBjb21waWxlZCBwYXR0ZXJuIChvciBhICBzdWItCisgICAgICAgamVjdCAgc3RyaW5nKSAgdW50aWwgIGFmdGVyIGFsbCBvcGVyYXRpb25zIG9uIHRoZSBtYXRjaCBkYXRhIGJsb2NrIGhhdmUKKyAgICAgICB0YWtlbiBwbGFjZS4KIAotICAgICAgIElmIHRoZSBjb21waWxlIGNvbnRleHQgYXJndW1lbnQgY2NvbnRleHQgaXMgTlVMTCwgbWVtb3J5IGZvciAgdGhlICBjb20tCi0gICAgICAgcGlsZWQgIHBhdHRlcm4gIGlzICBvYnRhaW5lZCAgYnkgIGNhbGxpbmcgIG1hbGxvYygpLiAgT3RoZXJ3aXNlLCAgaXQgaXMKLSAgICAgICBvYnRhaW5lZCBmcm9tIHRoZSBzYW1lIG1lbW9yeSBmdW5jdGlvbiB0aGF0IHdhcyB1c2VkICBmb3IgIHRoZSAgY29tcGlsZQotICAgICAgIGNvbnRleHQuCisgICAgICAgVGhlIG9wdGlvbnMgYXJndW1lbnQgZm9yIHBjcmUyX2NvbXBpbGUoKSBjb250YWlucyB2YXJpb3VzIGJpdCAgc2V0dGluZ3MKKyAgICAgICB0aGF0ICBhZmZlY3QgIHRoZSAgY29tcGlsYXRpb24uICBJdCAgc2hvdWxkICBiZSAgemVybyBpZiBubyBvcHRpb25zIGFyZQorICAgICAgIHJlcXVpcmVkLiBUaGUgYXZhaWxhYmxlIG9wdGlvbnMgYXJlIGRlc2NyaWJlZCBiZWxvdy4gU29tZSBvZiAgdGhlbSAgKGluCisgICAgICAgcGFydGljdWxhciwgIHRob3NlICB0aGF0ICBhcmUgIGNvbXBhdGlibGUgd2l0aCBQZXJsLCBidXQgc29tZSBvdGhlcnMgYXMKKyAgICAgICB3ZWxsKSBjYW4gYWxzbyBiZSBzZXQgYW5kICB1bnNldCAgZnJvbSAgd2l0aGluICB0aGUgIHBhdHRlcm4gIChzZWUgIHRoZQorICAgICAgIGRldGFpbGVkIGRlc2NyaXB0aW9uIGluIHRoZSBwY3JlMnBhdHRlcm4gZG9jdW1lbnRhdGlvbikuCiAKLSAgICAgICBUaGUgb3B0aW9ucyBhcmd1bWVudCBjb250YWlucyB2YXJpb3VzIGJpdCBzZXR0aW5ncyB0aGF0IGFmZmVjdCB0aGUgY29tLQotICAgICAgIHBpbGF0aW9uLiBJdCBzaG91bGQgYmUgemVybyBpZiBubyBvcHRpb25zIGFyZSByZXF1aXJlZC4gIFRoZSAgYXZhaWxhYmxlCi0gICAgICAgb3B0aW9ucyAgYXJlICBkZXNjcmliZWQgIGJlbG93LiBTb21lIG9mIHRoZW0gKGluIHBhcnRpY3VsYXIsIHRob3NlIHRoYXQKLSAgICAgICBhcmUgY29tcGF0aWJsZSB3aXRoIFBlcmwsIGJ1dCBzb21lIG90aGVycyBhcyB3ZWxsKSBjYW4gYWxzbyBiZSBzZXQgIGFuZAotICAgICAgIHVuc2V0ICBmcm9tICB3aXRoaW4gIHRoZSAgcGF0dGVybiAgKHNlZSB0aGUgZGV0YWlsZWQgZGVzY3JpcHRpb24gaW4gdGhlCi0gICAgICAgcGNyZTJwYXR0ZXJuIGRvY3VtZW50YXRpb24pLgotCi0gICAgICAgRm9yIHRob3NlIG9wdGlvbnMgdGhhdCBjYW4gYmUgZGlmZmVyZW50IGluIGRpZmZlcmVudCBwYXJ0cyBvZiB0aGUgIHBhdC0KLSAgICAgICB0ZXJuLCAgdGhlIGNvbnRlbnRzIG9mIHRoZSBvcHRpb25zIGFyZ3VtZW50IHNwZWNpZmllcyB0aGVpciBzZXR0aW5ncyBhdAotICAgICAgIHRoZSBzdGFydCBvZiBjb21waWxhdGlvbi4gIFRoZSAgUENSRTJfQU5DSE9SRUQgIGFuZCAgUENSRTJfTk9fVVRGX0NIRUNLCisgICAgICAgRm9yICB0aG9zZSBvcHRpb25zIHRoYXQgY2FuIGJlIGRpZmZlcmVudCBpbiBkaWZmZXJlbnQgcGFydHMgb2YgdGhlIHBhdC0KKyAgICAgICB0ZXJuLCB0aGUgY29udGVudHMgb2YgdGhlIG9wdGlvbnMgYXJndW1lbnQgc3BlY2lmaWVzIHRoZWlyIHNldHRpbmdzICBhdAorICAgICAgIHRoZSAgc3RhcnQgIG9mICBjb21waWxhdGlvbi4gIFRoZSBQQ1JFMl9BTkNIT1JFRCBhbmQgUENSRTJfTk9fVVRGX0NIRUNLCiAgICAgICAgb3B0aW9ucyBjYW4gYmUgc2V0IGF0IHRoZSB0aW1lIG9mIG1hdGNoaW5nIGFzIHdlbGwgYXMgYXQgY29tcGlsZSB0aW1lLgogCi0gICAgICAgT3RoZXIsICBsZXNzICBmcmVxdWVudGx5IHJlcXVpcmVkIGNvbXBpbGUtdGltZSBwYXJhbWV0ZXJzIChmb3IgZXhhbXBsZSwKKyAgICAgICBPdGhlciwgbGVzcyBmcmVxdWVudGx5IHJlcXVpcmVkIGNvbXBpbGUtdGltZSBwYXJhbWV0ZXJzICAoZm9yICBleGFtcGxlLAogICAgICAgIHRoZSBuZXdsaW5lIHNldHRpbmcpIGNhbiBiZSBwcm92aWRlZCBpbiBhIGNvbXBpbGUgY29udGV4dCAoYXMgZGVzY3JpYmVkCiAgICAgICAgYWJvdmUpLgogCiAgICAgICAgSWYgZXJyb3Jjb2RlIG9yIGVycm9yb2Zmc2V0IGlzIE5VTEwsIHBjcmUyX2NvbXBpbGUoKSByZXR1cm5zIE5VTEwgaW1tZS0KLSAgICAgICBkaWF0ZWx5LiBPdGhlcndpc2UsIGlmIGNvbXBpbGF0aW9uIG9mIGEgcGF0dGVybiBmYWlscywgIHBjcmUyX2NvbXBpbGUoKQotICAgICAgIHJldHVybnMgTlVMTCwgaGF2aW5nIHNldCB0aGVzZSB2YXJpYWJsZXMgdG8gYW4gZXJyb3IgY29kZSBhbmQgYW4gb2Zmc2V0Ci0gICAgICAgKG51bWJlciAgb2YgIGNvZGUgIHVuaXRzKSAgd2l0aGluICB0aGUgICBwYXR0ZXJuLCAgIHJlc3BlY3RpdmVseS4gICBUaGUKLSAgICAgICBwY3JlMl9nZXRfZXJyb3JfbWVzc2FnZSgpICBmdW5jdGlvbiBwcm92aWRlcyBhIHRleHR1YWwgbWVzc2FnZSBmb3IgZWFjaAotICAgICAgIGVycm9yIGNvZGUuIENvbXBpbGF0aW9uIGVycm9ycyBhcmUgcG9zaXRpdmUgbnVtYmVycywgYnV0IFVURiBmb3JtYXR0aW5nCi0gICAgICAgZXJyb3JzIGFyZSBuZWdhdGl2ZSBudW1iZXJzLiBGb3IgYW4gaW52YWxpZCBVVEYtOCBvciBVVEYtMTYgc3RyaW5nLCB0aGUKLSAgICAgICBvZmZzZXQgaXMgdGhhdCBvZiB0aGUgZmlyc3QgY29kZSB1bml0IG9mIHRoZSBmYWlsaW5nIGNoYXJhY3Rlci4KKyAgICAgICBkaWF0ZWx5LiAgT3RoZXJ3aXNlLCAgdGhlICB2YXJpYWJsZXMgdG8gd2hpY2ggdGhlc2UgcG9pbnQgYXJlIHNldCB0byBhbgorICAgICAgIGVycm9yIGNvZGUgYW5kIGFuIG9mZnNldCAobnVtYmVyIG9mIGNvZGUgIHVuaXRzKSAgd2l0aGluICB0aGUgIHBhdHRlcm4sCisgICAgICAgcmVzcGVjdGl2ZWx5LCAgd2hlbiAgcGNyZTJfY29tcGlsZSgpIHJldHVybnMgTlVMTCBiZWNhdXNlIGEgY29tcGlsYXRpb24KKyAgICAgICBlcnJvciBoYXMgb2NjdXJyZWQuIFRoZSB2YWx1ZXMgYXJlIG5vdCBkZWZpbmVkIHdoZW4gY29tcGlsYXRpb24gaXMgc3VjLQorICAgICAgIGNlc3NmdWwgYW5kIHBjcmUyX2NvbXBpbGUoKSByZXR1cm5zIGEgbm9uLU5VTEwgdmFsdWUuCiAKLSAgICAgICBTb21lIGVycm9ycyBhcmUgbm90IGRldGVjdGVkIHVudGlsIHRoZSB3aG9sZSBwYXR0ZXJuIGhhcyBiZWVuICBzY2FubmVkOwotICAgICAgIGluICB0aGVzZSAgY2FzZXMsICB0aGUgb2Zmc2V0IHBhc3NlZCBiYWNrIGlzIHRoZSBsZW5ndGggb2YgdGhlIHBhdHRlcm4uCi0gICAgICAgTm90ZSB0aGF0IHRoZSBvZmZzZXQgaXMgaW4gY29kZSB1bml0cywgbm90IGNoYXJhY3RlcnMsIGV2ZW4gIGluICBhICBVVEYKKyAgICAgICBUaGUgIHBjcmUyX2dldF9lcnJvcl9tZXNzYWdlKCkgZnVuY3Rpb24gKHNlZSAiT2J0YWluaW5nIGEgdGV4dHVhbCBlcnJvcgorICAgICAgIG1lc3NhZ2UiIGJlbG93KSBwcm92aWRlcyBhIHRleHR1YWwgbWVzc2FnZSBmb3IgZWFjaCBlcnJvciBjb2RlLiAgQ29tcGktCisgICAgICAgbGF0aW9uIGVycm9ycyBoYXZlIHBvc2l0aXZlIGVycm9yIGNvZGVzOyBVVEYgZm9ybWF0dGluZyBlcnJvciBjb2RlcyBhcmUKKyAgICAgICBuZWdhdGl2ZS4gRm9yIGFuIGludmFsaWQgVVRGLTggb3IgVVRGLTE2IHN0cmluZywgdGhlIG9mZnNldCBpcyB0aGF0ICBvZgorICAgICAgIHRoZSBmaXJzdCBjb2RlIHVuaXQgb2YgdGhlIGZhaWxpbmcgY2hhcmFjdGVyLgorCisgICAgICAgU29tZSAgZXJyb3JzIGFyZSBub3QgZGV0ZWN0ZWQgdW50aWwgdGhlIHdob2xlIHBhdHRlcm4gaGFzIGJlZW4gc2Nhbm5lZDsKKyAgICAgICBpbiB0aGVzZSBjYXNlcywgdGhlIG9mZnNldCBwYXNzZWQgYmFjayBpcyB0aGUgbGVuZ3RoICBvZiAgdGhlICBwYXR0ZXJuLgorICAgICAgIE5vdGUgIHRoYXQgIHRoZSAgb2Zmc2V0IGlzIGluIGNvZGUgdW5pdHMsIG5vdCBjaGFyYWN0ZXJzLCBldmVuIGluIGEgVVRGCiAgICAgICAgbW9kZS4gSXQgbWF5IHNvbWV0aW1lcyBwb2ludCBpbnRvIHRoZSBtaWRkbGUgb2YgYSBVVEYtOCBvciBVVEYtMTYgY2hhci0KICAgICAgICBhY3Rlci4KIAotICAgICAgIFRoaXMgY29kZSBmcmFnbWVudCBzaG93cyBhIHR5cGljYWwgc3RyYWlnaHRmb3J3YXJkIGNhbGwgIHRvICBwY3JlMl9jb20tCisgICAgICAgVGhpcyAgY29kZSAgZnJhZ21lbnQgc2hvd3MgYSB0eXBpY2FsIHN0cmFpZ2h0Zm9yd2FyZCBjYWxsIHRvIHBjcmUyX2NvbS0KICAgICAgICBwaWxlKCk6CiAKICAgICAgICAgIHBjcmUyX2NvZGUgKnJlOwpAQCAtMTEyNSwyMDggKzExODEsMjExIEBACiAgICAgICAgICAgICZlcnJvZmZzZXQsICAgICAgICAgICAgIC8qIGZvciBlcnJvciBvZmZzZXQgKi8KICAgICAgICAgICAgTlVMTCk7ICAgICAgICAgICAgICAgICAgLyogbm8gY29tcGlsZSBjb250ZXh0ICovCiAKLSAgICAgICBUaGUgIGZvbGxvd2luZyAgbmFtZXMgZm9yIG9wdGlvbiBiaXRzIGFyZSBkZWZpbmVkIGluIHRoZSBwY3JlMi5oIGhlYWRlcgorICAgICAgIFRoZSBmb2xsb3dpbmcgbmFtZXMgZm9yIG9wdGlvbiBiaXRzIGFyZSBkZWZpbmVkIGluIHRoZSAgcGNyZTIuaCAgaGVhZGVyCiAgICAgICAgZmlsZToKIAogICAgICAgICAgUENSRTJfQU5DSE9SRUQKIAogICAgICAgIElmIHRoaXMgYml0IGlzIHNldCwgdGhlIHBhdHRlcm4gaXMgZm9yY2VkIHRvIGJlICJhbmNob3JlZCIsIHRoYXQgaXMsIGl0Ci0gICAgICAgaXMgIGNvbnN0cmFpbmVkIHRvIG1hdGNoIG9ubHkgYXQgdGhlIGZpcnN0IG1hdGNoaW5nIHBvaW50IGluIHRoZSBzdHJpbmcKLSAgICAgICB0aGF0IGlzIGJlaW5nIHNlYXJjaGVkICh0aGUgInN1YmplY3Qgc3RyaW5nIikuIFRoaXMgZWZmZWN0IGNhbiBhbHNvICBiZQotICAgICAgIGFjaGlldmVkICBieSBhcHByb3ByaWF0ZSBjb25zdHJ1Y3RzIGluIHRoZSBwYXR0ZXJuIGl0c2VsZiwgd2hpY2ggaXMgdGhlCisgICAgICAgaXMgY29uc3RyYWluZWQgdG8gbWF0Y2ggb25seSBhdCB0aGUgZmlyc3QgbWF0Y2hpbmcgcG9pbnQgaW4gdGhlICBzdHJpbmcKKyAgICAgICB0aGF0ICBpcyBiZWluZyBzZWFyY2hlZCAodGhlICJzdWJqZWN0IHN0cmluZyIpLiBUaGlzIGVmZmVjdCBjYW4gYWxzbyBiZQorICAgICAgIGFjaGlldmVkIGJ5IGFwcHJvcHJpYXRlIGNvbnN0cnVjdHMgaW4gdGhlIHBhdHRlcm4gaXRzZWxmLCB3aGljaCBpcyAgdGhlCiAgICAgICAgb25seSB3YXkgdG8gZG8gaXQgaW4gUGVybC4KIAogICAgICAgICAgUENSRTJfQUxMT1dfRU1QVFlfQ0xBU1MKIAotICAgICAgIEJ5IGRlZmF1bHQsIGZvciBjb21wYXRpYmlsaXR5IHdpdGggUGVybCwgYSBjbG9zaW5nIHNxdWFyZSBicmFja2V0ICB0aGF0Ci0gICAgICAgaW1tZWRpYXRlbHkgIGZvbGxvd3MgIGFuIG9wZW5pbmcgb25lIGlzIHRyZWF0ZWQgYXMgYSBkYXRhIGNoYXJhY3RlciBmb3IKLSAgICAgICB0aGUgY2xhc3MuIFdoZW4gIFBDUkUyX0FMTE9XX0VNUFRZX0NMQVNTICBpcyAgc2V0LCAgaXQgIHRlcm1pbmF0ZXMgIHRoZQorICAgICAgIEJ5ICBkZWZhdWx0LCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIFBlcmwsIGEgY2xvc2luZyBzcXVhcmUgYnJhY2tldCB0aGF0CisgICAgICAgaW1tZWRpYXRlbHkgZm9sbG93cyBhbiBvcGVuaW5nIG9uZSBpcyB0cmVhdGVkIGFzIGEgZGF0YSAgY2hhcmFjdGVyICBmb3IKKyAgICAgICB0aGUgIGNsYXNzLiAgV2hlbiAgUENSRTJfQUxMT1dfRU1QVFlfQ0xBU1MgIGlzICBzZXQsICBpdCB0ZXJtaW5hdGVzIHRoZQogICAgICAgIGNsYXNzLCB3aGljaCB0aGVyZWZvcmUgY29udGFpbnMgbm8gY2hhcmFjdGVycyBhbmQgc28gY2FuIG5ldmVyIG1hdGNoLgogCiAgICAgICAgICBQQ1JFMl9BTFRfQlNVWAogCi0gICAgICAgVGhpcyAgb3B0aW9uICByZXF1ZXN0ICBhbHRlcm5hdGl2ZSAgaGFuZGxpbmcgb2YgdGhyZWUgZXNjYXBlIHNlcXVlbmNlcywKLSAgICAgICB3aGljaCBtYWtlcyBQQ1JFMidzIGJlaGF2aW91ciBtb3JlIGxpa2UgIEVDTUFzY3JpcHQgIChha2EgIEphdmFTY3JpcHQpLgorICAgICAgIFRoaXMgb3B0aW9uIHJlcXVlc3QgYWx0ZXJuYXRpdmUgaGFuZGxpbmcgIG9mICB0aHJlZSAgZXNjYXBlICBzZXF1ZW5jZXMsCisgICAgICAgd2hpY2ggIG1ha2VzICBQQ1JFMidzICBiZWhhdmlvdXIgbW9yZSBsaWtlIEVDTUFzY3JpcHQgKGFrYSBKYXZhU2NyaXB0KS4KICAgICAgICBXaGVuIGl0IGlzIHNldDoKIAogICAgICAgICgxKSBcVSBtYXRjaGVzIGFuIHVwcGVyIGNhc2UgIlUiIGNoYXJhY3RlcjsgYnkgZGVmYXVsdCBcVSBjYXVzZXMgYSBjb20tCiAgICAgICAgcGlsZSB0aW1lIGVycm9yIChQZXJsIHVzZXMgXFUgdG8gdXBwZXIgY2FzZSBzdWJzZXF1ZW50IGNoYXJhY3RlcnMpLgogCiAgICAgICAgKDIpIFx1IG1hdGNoZXMgYSBsb3dlciBjYXNlICJ1IiBjaGFyYWN0ZXIgdW5sZXNzIGl0IGlzIGZvbGxvd2VkIGJ5IGZvdXIKLSAgICAgICBoZXhhZGVjaW1hbCAgZGlnaXRzLCAgaW4gIHdoaWNoIGNhc2UgdGhlIGhleGFkZWNpbWFsIG51bWJlciBkZWZpbmVzIHRoZQotICAgICAgIGNvZGUgcG9pbnQgdG8gbWF0Y2guIEJ5IGRlZmF1bHQsIFx1IGNhdXNlcyBhIGNvbXBpbGUgdGltZSAgZXJyb3IgIChQZXJsCisgICAgICAgaGV4YWRlY2ltYWwgZGlnaXRzLCBpbiB3aGljaCBjYXNlIHRoZSBoZXhhZGVjaW1hbCAgbnVtYmVyICBkZWZpbmVzICB0aGUKKyAgICAgICBjb2RlICBwb2ludCAgdG8gbWF0Y2guIEJ5IGRlZmF1bHQsIFx1IGNhdXNlcyBhIGNvbXBpbGUgdGltZSBlcnJvciAoUGVybAogICAgICAgIHVzZXMgaXQgdG8gdXBwZXIgY2FzZSB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcikuCiAKLSAgICAgICAoMykgIFx4IG1hdGNoZXMgYSBsb3dlciBjYXNlICJ4IiBjaGFyYWN0ZXIgdW5sZXNzIGl0IGlzIGZvbGxvd2VkIGJ5IHR3bwotICAgICAgIGhleGFkZWNpbWFsIGRpZ2l0cywgaW4gd2hpY2ggY2FzZSB0aGUgaGV4YWRlY2ltYWwgIG51bWJlciAgZGVmaW5lcyAgdGhlCi0gICAgICAgY29kZSAgcG9pbnQgIHRvICBtYXRjaC4gQnkgZGVmYXVsdCwgYXMgaW4gUGVybCwgYSBoZXhhZGVjaW1hbCBudW1iZXIgaXMKKyAgICAgICAoMykgXHggbWF0Y2hlcyBhIGxvd2VyIGNhc2UgIngiIGNoYXJhY3RlciB1bmxlc3MgaXQgaXMgZm9sbG93ZWQgYnkgIHR3bworICAgICAgIGhleGFkZWNpbWFsICBkaWdpdHMsICBpbiAgd2hpY2ggY2FzZSB0aGUgaGV4YWRlY2ltYWwgbnVtYmVyIGRlZmluZXMgdGhlCisgICAgICAgY29kZSBwb2ludCB0byBtYXRjaC4gQnkgZGVmYXVsdCwgYXMgaW4gUGVybCwgYSAgaGV4YWRlY2ltYWwgIG51bWJlciAgaXMKICAgICAgICBhbHdheXMgZXhwZWN0ZWQgYWZ0ZXIgXHgsIGJ1dCBpdCBtYXkgaGF2ZSB6ZXJvLCBvbmUsIG9yIHR3byBkaWdpdHMgKHNvLAogICAgICAgIGZvciBleGFtcGxlLCBceHogbWF0Y2hlcyBhIGJpbmFyeSB6ZXJvIGNoYXJhY3RlciBmb2xsb3dlZCBieSB6KS4KIAogICAgICAgICAgUENSRTJfQUxUX0NJUkNVTUZMRVgKIAogICAgICAgIEluICBtdWx0aWxpbmUgIG1vZGUgICh3aGVuICBQQ1JFMl9NVUxUSUxJTkUgIGlzICBzZXQpLCAgdGhlICBjaXJjdW1mbGV4Ci0gICAgICAgbWV0YWNoYXJhY3RlciBtYXRjaGVzIGF0IHRoZSBzdGFydCBvZiB0aGUgc3ViamVjdCAodW5sZXNzICBQQ1JFMl9OT1RCT0wKLSAgICAgICBpcyAgc2V0KSwgIGFuZCAgYWxzbyAgYWZ0ZXIgIGFueSBpbnRlcm5hbCBuZXdsaW5lLiBIb3dldmVyLCBpdCBkb2VzIG5vdAorICAgICAgIG1ldGFjaGFyYWN0ZXIgIG1hdGNoZXMgYXQgdGhlIHN0YXJ0IG9mIHRoZSBzdWJqZWN0ICh1bmxlc3MgUENSRTJfTk9UQk9MCisgICAgICAgaXMgc2V0KSwgYW5kIGFsc28gYWZ0ZXIgYW55IGludGVybmFsICBuZXdsaW5lLiAgSG93ZXZlciwgIGl0ICBkb2VzICBub3QKICAgICAgICBtYXRjaCBhZnRlciBhIG5ld2xpbmUgYXQgdGhlIGVuZCBvZiB0aGUgc3ViamVjdCwgZm9yIGNvbXBhdGliaWxpdHkgd2l0aAotICAgICAgIFBlcmwuICBJZiAgeW91IHdhbnQgYSBtdWx0aWxpbmUgY2lyY3VtZmxleCBhbHNvIHRvIG1hdGNoIGFmdGVyIGEgdGVybWktCisgICAgICAgUGVybC4gSWYgeW91IHdhbnQgYSBtdWx0aWxpbmUgY2lyY3VtZmxleCBhbHNvIHRvIG1hdGNoIGFmdGVyICBhICB0ZXJtaS0KICAgICAgICBuYXRpbmcgbmV3bGluZSwgeW91IG11c3Qgc2V0IFBDUkUyX0FMVF9DSVJDVU1GTEVYLgogCiAgICAgICAgICBQQ1JFMl9BTFRfVkVSQk5BTUVTCiAKLSAgICAgICBCeSBkZWZhdWx0LCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIFBlcmwsIHRoZSBuYW1lIGluIGFueSB2ZXJiICBzZXF1ZW5jZQotICAgICAgIHN1Y2ggIGFzICAoKk1BUks6TkFNRSkgIGlzICBhbnkgIHNlcXVlbmNlICBvZiAgY2hhcmFjdGVycyB0aGF0IGRvZXMgbm90Ci0gICAgICAgaW5jbHVkZSBhIGNsb3NpbmcgcGFyZW50aGVzaXMuIFRoZSBuYW1lIGlzIG5vdCBwcm9jZXNzZWQgIGluICBhbnkgIHdheSwKLSAgICAgICBhbmQgIGl0ICBpcyAgbm90IHBvc3NpYmxlIHRvIGluY2x1ZGUgYSBjbG9zaW5nIHBhcmVudGhlc2lzIGluIHRoZSBuYW1lLgotICAgICAgIEhvd2V2ZXIsIGlmIHRoZSBQQ1JFMl9BTFRfVkVSQk5BTUVTIG9wdGlvbiAgaXMgIHNldCwgIG5vcm1hbCAgYmFja3NsYXNoCi0gICAgICAgcHJvY2Vzc2luZyAgaXMgIGFwcGxpZWQgIHRvICB2ZXJiICBuYW1lcyAgYW5kIG9ubHkgYW4gdW5lc2NhcGVkIGNsb3NpbmcKLSAgICAgICBwYXJlbnRoZXNpcyB0ZXJtaW5hdGVzIHRoZSBuYW1lLiBBIGNsb3NpbmcgcGFyZW50aGVzaXMgY2FuIGJlICBpbmNsdWRlZAotICAgICAgIGluICBhICBuYW1lICBlaXRoZXIgIGFzICBcKSBvciBiZXR3ZWVuIFxRIGFuZCBcRS4gSWYgdGhlIFBDUkUyX0VYVEVOREVECisgICAgICAgQnkgIGRlZmF1bHQsIGZvciBjb21wYXRpYmlsaXR5IHdpdGggUGVybCwgdGhlIG5hbWUgaW4gYW55IHZlcmIgc2VxdWVuY2UKKyAgICAgICBzdWNoIGFzICgqTUFSSzpOQU1FKSBpcyAgYW55ICBzZXF1ZW5jZSAgb2YgIGNoYXJhY3RlcnMgIHRoYXQgIGRvZXMgIG5vdAorICAgICAgIGluY2x1ZGUgIGEgIGNsb3NpbmcgIHBhcmVudGhlc2lzLiBUaGUgbmFtZSBpcyBub3QgcHJvY2Vzc2VkIGluIGFueSB3YXksCisgICAgICAgYW5kIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBpbmNsdWRlIGEgY2xvc2luZyBwYXJlbnRoZXNpcyAgaW4gIHRoZSAgbmFtZS4KKyAgICAgICBIb3dldmVyLCAgaWYgIHRoZSAgUENSRTJfQUxUX1ZFUkJOQU1FUyAgb3B0aW9uIGlzIHNldCwgbm9ybWFsIGJhY2tzbGFzaAorICAgICAgIHByb2Nlc3NpbmcgaXMgYXBwbGllZCB0byB2ZXJiICBuYW1lcyAgYW5kICBvbmx5ICBhbiAgdW5lc2NhcGVkICBjbG9zaW5nCisgICAgICAgcGFyZW50aGVzaXMgIHRlcm1pbmF0ZXMgdGhlIG5hbWUuIEEgY2xvc2luZyBwYXJlbnRoZXNpcyBjYW4gYmUgaW5jbHVkZWQKKyAgICAgICBpbiBhIG5hbWUgZWl0aGVyIGFzIFwpIG9yIGJldHdlZW4gXFEgIGFuZCAgXEUuICBJZiAgdGhlICBQQ1JFMl9FWFRFTkRFRAogICAgICAgIG9wdGlvbiBpcyBzZXQsIHVuZXNjYXBlZCB3aGl0ZXNwYWNlIGluIHZlcmIgbmFtZXMgaXMgc2tpcHBlZCBhbmQgIy1jb20tCiAgICAgICAgbWVudHMgYXJlIHJlY29nbml6ZWQsIGV4YWN0bHkgYXMgaW4gdGhlIHJlc3Qgb2YgdGhlIHBhdHRlcm4uCiAKICAgICAgICAgIFBDUkUyX0FVVE9fQ0FMTE9VVAogCi0gICAgICAgSWYgIHRoaXMgIGJpdCAgaXMgIHNldCwgIHBjcmUyX2NvbXBpbGUoKSAgYXV0b21hdGljYWxseSBpbnNlcnRzIGNhbGxvdXQKKyAgICAgICBJZiB0aGlzIGJpdCAgaXMgIHNldCwgIHBjcmUyX2NvbXBpbGUoKSAgYXV0b21hdGljYWxseSAgaW5zZXJ0cyAgY2FsbG91dAogICAgICAgIGl0ZW1zLCBhbGwgd2l0aCBudW1iZXIgMjU1LCBiZWZvcmUgZWFjaCBwYXR0ZXJuIGl0ZW0uIEZvciBkaXNjdXNzaW9uIG9mCiAgICAgICAgdGhlIGNhbGxvdXQgZmFjaWxpdHksIHNlZSB0aGUgcGNyZTJjYWxsb3V0IGRvY3VtZW50YXRpb24uCiAKICAgICAgICAgIFBDUkUyX0NBU0VMRVNTCiAKLSAgICAgICBJZiAgdGhpcyAgYml0IGlzIHNldCwgbGV0dGVycyBpbiB0aGUgcGF0dGVybiBtYXRjaCBib3RoIHVwcGVyIGFuZCBsb3dlcgotICAgICAgIGNhc2UgbGV0dGVycyBpbiB0aGUgc3ViamVjdC4gSXQgaXMgZXF1aXZhbGVudCB0byBQZXJsJ3MgL2kgb3B0aW9uLCAgYW5kCisgICAgICAgSWYgdGhpcyBiaXQgaXMgc2V0LCBsZXR0ZXJzIGluIHRoZSBwYXR0ZXJuIG1hdGNoIGJvdGggdXBwZXIgIGFuZCAgbG93ZXIKKyAgICAgICBjYXNlICBsZXR0ZXJzIGluIHRoZSBzdWJqZWN0LiBJdCBpcyBlcXVpdmFsZW50IHRvIFBlcmwncyAvaSBvcHRpb24sIGFuZAogICAgICAgIGl0IGNhbiBiZSBjaGFuZ2VkIHdpdGhpbiBhIHBhdHRlcm4gYnkgYSAoP2kpIG9wdGlvbiBzZXR0aW5nLgogCiAgICAgICAgICBQQ1JFMl9ET0xMQVJfRU5ET05MWQogCi0gICAgICAgSWYgIHRoaXMgYml0IGlzIHNldCwgYSBkb2xsYXIgbWV0YWNoYXJhY3RlciBpbiB0aGUgcGF0dGVybiBtYXRjaGVzIG9ubHkKLSAgICAgICBhdCB0aGUgZW5kIG9mIHRoZSBzdWJqZWN0IHN0cmluZy4gV2l0aG91dCB0aGlzIG9wdGlvbiwgIGEgIGRvbGxhciAgYWxzbwotICAgICAgIG1hdGNoZXMgIGltbWVkaWF0ZWx5IGJlZm9yZSBhIG5ld2xpbmUgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nIChidXQgbm90Ci0gICAgICAgYmVmb3JlIGFueSBvdGhlciBuZXdsaW5lcykuIFRoZSBQQ1JFMl9ET0xMQVJfRU5ET05MWSBvcHRpb24gaXMgIGlnbm9yZWQKLSAgICAgICBpZiAgUENSRTJfTVVMVElMSU5FICBpcyAgc2V0LiAgVGhlcmUgaXMgbm8gZXF1aXZhbGVudCB0byB0aGlzIG9wdGlvbiBpbgorICAgICAgIElmIHRoaXMgYml0IGlzIHNldCwgYSBkb2xsYXIgbWV0YWNoYXJhY3RlciBpbiB0aGUgcGF0dGVybiBtYXRjaGVzICBvbmx5CisgICAgICAgYXQgIHRoZSAgZW5kICBvZiB0aGUgc3ViamVjdCBzdHJpbmcuIFdpdGhvdXQgdGhpcyBvcHRpb24sIGEgZG9sbGFyIGFsc28KKyAgICAgICBtYXRjaGVzIGltbWVkaWF0ZWx5IGJlZm9yZSBhIG5ld2xpbmUgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nIChidXQgIG5vdAorICAgICAgIGJlZm9yZSAgYW55IG90aGVyIG5ld2xpbmVzKS4gVGhlIFBDUkUyX0RPTExBUl9FTkRPTkxZIG9wdGlvbiBpcyBpZ25vcmVkCisgICAgICAgaWYgUENSRTJfTVVMVElMSU5FIGlzIHNldC4gVGhlcmUgaXMgbm8gZXF1aXZhbGVudCAgdG8gIHRoaXMgIG9wdGlvbiAgaW4KICAgICAgICBQZXJsLCBhbmQgbm8gd2F5IHRvIHNldCBpdCB3aXRoaW4gYSBwYXR0ZXJuLgogCiAgICAgICAgICBQQ1JFMl9ET1RBTEwKIAotICAgICAgIElmIHRoaXMgYml0IGlzIHNldCwgYSBkb3QgbWV0YWNoYXJhY3RlciAgaW4gIHRoZSAgcGF0dGVybiAgbWF0Y2hlcyAgYW55Ci0gICAgICAgY2hhcmFjdGVyLCAgaW5jbHVkaW5nICBvbmUgIHRoYXQgIGluZGljYXRlcyBhIG5ld2xpbmUuIEhvd2V2ZXIsIGl0IG9ubHkKKyAgICAgICBJZiAgdGhpcyAgYml0ICBpcyAgc2V0LCAgYSBkb3QgbWV0YWNoYXJhY3RlciBpbiB0aGUgcGF0dGVybiBtYXRjaGVzIGFueQorICAgICAgIGNoYXJhY3RlciwgaW5jbHVkaW5nIG9uZSB0aGF0IGluZGljYXRlcyBhICBuZXdsaW5lLiAgSG93ZXZlciwgIGl0ICBvbmx5CiAgICAgICAgZXZlciBtYXRjaGVzIG9uZSBjaGFyYWN0ZXIsIGV2ZW4gaWYgbmV3bGluZXMgYXJlIGNvZGVkIGFzIENSTEYuIFdpdGhvdXQKICAgICAgICB0aGlzIG9wdGlvbiwgYSBkb3QgZG9lcyBub3QgbWF0Y2ggd2hlbiB0aGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgc3ViLQotICAgICAgIGplY3QgaXMgYXQgYSBuZXdsaW5lLiBUaGlzIG9wdGlvbiBpcyBlcXVpdmFsZW50IHRvICBQZXJsJ3MgIC9zICBvcHRpb24sCisgICAgICAgamVjdCAgaXMgIGF0ICBhIG5ld2xpbmUuIFRoaXMgb3B0aW9uIGlzIGVxdWl2YWxlbnQgdG8gUGVybCdzIC9zIG9wdGlvbiwKICAgICAgICBhbmQgaXQgY2FuIGJlIGNoYW5nZWQgd2l0aGluIGEgcGF0dGVybiBieSBhICg/cykgb3B0aW9uIHNldHRpbmcuIEEgbmVnLQogICAgICAgIGF0aXZlIGNsYXNzIHN1Y2ggYXMgW15hXSBhbHdheXMgbWF0Y2hlcyBuZXdsaW5lIGNoYXJhY3RlcnMsIGluZGVwZW5kZW50CiAgICAgICAgb2YgdGhlIHNldHRpbmcgb2YgdGhpcyBvcHRpb24uCiAKICAgICAgICAgIFBDUkUyX0RVUE5BTUVTCiAKLSAgICAgICBJZiAgdGhpcyAgYml0IGlzIHNldCwgbmFtZXMgdXNlZCB0byBpZGVudGlmeSBjYXB0dXJpbmcgc3VicGF0dGVybnMgbmVlZAorICAgICAgIElmIHRoaXMgYml0IGlzIHNldCwgbmFtZXMgdXNlZCB0byBpZGVudGlmeSBjYXB0dXJpbmcgIHN1YnBhdHRlcm5zICBuZWVkCiAgICAgICAgbm90IGJlIHVuaXF1ZS4gVGhpcyBjYW4gYmUgaGVscGZ1bCBmb3IgY2VydGFpbiB0eXBlcyBvZiBwYXR0ZXJuIHdoZW4gaXQKLSAgICAgICBpcyAga25vd24gIHRoYXQgIG9ubHkgIG9uZSBpbnN0YW5jZSBvZiB0aGUgbmFtZWQgc3VicGF0dGVybiBjYW4gZXZlciBiZQotICAgICAgIG1hdGNoZWQuIFRoZXJlIGFyZSBtb3JlIGRldGFpbHMgb2YgbmFtZWQgc3VicGF0dGVybnMgIGJlbG93OyAgc2VlICBhbHNvCisgICAgICAgaXMga25vd24gdGhhdCBvbmx5IG9uZSBpbnN0YW5jZSBvZiB0aGUgbmFtZWQgIHN1YnBhdHRlcm4gIGNhbiAgZXZlciAgYmUKKyAgICAgICBtYXRjaGVkLiAgVGhlcmUgIGFyZSAgbW9yZSBkZXRhaWxzIG9mIG5hbWVkIHN1YnBhdHRlcm5zIGJlbG93OyBzZWUgYWxzbwogICAgICAgIHRoZSBwY3JlMnBhdHRlcm4gZG9jdW1lbnRhdGlvbi4KIAogICAgICAgICAgUENSRTJfRVhURU5ERUQKIAotICAgICAgIElmICB0aGlzICBiaXQgIGlzICBzZXQsICBtb3N0IHdoaXRlIHNwYWNlIGNoYXJhY3RlcnMgaW4gdGhlIHBhdHRlcm4gYXJlCi0gICAgICAgdG90YWxseSBpZ25vcmVkIGV4Y2VwdCB3aGVuIGVzY2FwZWQgb3IgaW5zaWRlIGEgY2hhcmFjdGVyICBjbGFzcy4gIEhvdy0KLSAgICAgICBldmVyLCAgd2hpdGUgIHNwYWNlICBpcyAgbm90ICBhbGxvd2VkIHdpdGhpbiBzZXF1ZW5jZXMgc3VjaCBhcyAoPz4gdGhhdAorICAgICAgIElmIHRoaXMgYml0IGlzIHNldCwgbW9zdCB3aGl0ZSBzcGFjZSAgY2hhcmFjdGVycyAgaW4gIHRoZSAgcGF0dGVybiAgYXJlCisgICAgICAgdG90YWxseSAgaWdub3JlZCAgZXhjZXB0IHdoZW4gZXNjYXBlZCBvciBpbnNpZGUgYSBjaGFyYWN0ZXIgY2xhc3MuIEhvdy0KKyAgICAgICBldmVyLCB3aGl0ZSBzcGFjZSBpcyBub3QgYWxsb3dlZCB3aXRoaW4gIHNlcXVlbmNlcyAgc3VjaCAgYXMgICg/PiAgdGhhdAogICAgICAgIGludHJvZHVjZSB2YXJpb3VzIHBhcmVudGhlc2l6ZWQgc3VicGF0dGVybnMsIG5vciB3aXRoaW4gbnVtZXJpY2FsIHF1YW4tCi0gICAgICAgdGlmaWVycyAgc3VjaCAgYXMgezEsM30uICBJZ25vcmFibGUgd2hpdGUgc3BhY2UgaXMgcGVybWl0dGVkIGJldHdlZW4gYW4KLSAgICAgICBpdGVtIGFuZCBhIGZvbGxvd2luZyBxdWFudGlmaWVyIGFuZCBiZXR3ZWVuIGEgcXVhbnRpZmllciBhbmQgYSAgZm9sbG93LQorICAgICAgIHRpZmllcnMgc3VjaCBhcyB7MSwzfS4gIElnbm9yYWJsZSB3aGl0ZSBzcGFjZSBpcyBwZXJtaXR0ZWQgIGJldHdlZW4gIGFuCisgICAgICAgaXRlbSAgYW5kIGEgZm9sbG93aW5nIHF1YW50aWZpZXIgYW5kIGJldHdlZW4gYSBxdWFudGlmaWVyIGFuZCBhIGZvbGxvdy0KICAgICAgICBpbmcgKyB0aGF0IGluZGljYXRlcyBwb3NzZXNzaXZlbmVzcy4KIAotICAgICAgIFBDUkUyX0VYVEVOREVEICBhbHNvIGNhdXNlcyBjaGFyYWN0ZXJzIGJldHdlZW4gYW4gdW5lc2NhcGVkICMgb3V0c2lkZSBhCi0gICAgICAgY2hhcmFjdGVyIGNsYXNzIGFuZCB0aGUgbmV4dCBuZXdsaW5lLCBpbmNsdXNpdmUsIHRvIGJlICBpZ25vcmVkLCAgd2hpY2gKKyAgICAgICBQQ1JFMl9FWFRFTkRFRCBhbHNvIGNhdXNlcyBjaGFyYWN0ZXJzIGJldHdlZW4gYW4gdW5lc2NhcGVkICMgb3V0c2lkZSAgYQorICAgICAgIGNoYXJhY3RlciAgY2xhc3MgIGFuZCB0aGUgbmV4dCBuZXdsaW5lLCBpbmNsdXNpdmUsIHRvIGJlIGlnbm9yZWQsIHdoaWNoCiAgICAgICAgbWFrZXMgaXQgcG9zc2libGUgdG8gaW5jbHVkZSBjb21tZW50cyBpbnNpZGUgY29tcGxpY2F0ZWQgcGF0dGVybnMuIE5vdGUKLSAgICAgICB0aGF0IHRoZSBlbmQgb2YgdGhpcyB0eXBlIG9mIGNvbW1lbnQgaXMgYSBsaXRlcmFsIG5ld2xpbmUgIHNlcXVlbmNlICBpbgorICAgICAgIHRoYXQgIHRoZSAgZW5kIG9mIHRoaXMgdHlwZSBvZiBjb21tZW50IGlzIGEgbGl0ZXJhbCBuZXdsaW5lIHNlcXVlbmNlIGluCiAgICAgICAgdGhlIHBhdHRlcm47IGVzY2FwZSBzZXF1ZW5jZXMgdGhhdCBoYXBwZW4gdG8gcmVwcmVzZW50IGEgbmV3bGluZSBkbyBub3QKLSAgICAgICBjb3VudC4gUENSRTJfRVhURU5ERUQgaXMgZXF1aXZhbGVudCB0byBQZXJsJ3MgL3ggb3B0aW9uLCBhbmQgaXQgY2FuICBiZQorICAgICAgIGNvdW50LiAgUENSRTJfRVhURU5ERUQgaXMgZXF1aXZhbGVudCB0byBQZXJsJ3MgL3ggb3B0aW9uLCBhbmQgaXQgY2FuIGJlCiAgICAgICAgY2hhbmdlZCB3aXRoaW4gYSBwYXR0ZXJuIGJ5IGEgKD94KSBvcHRpb24gc2V0dGluZy4KIAogICAgICAgIFdoaWNoIGNoYXJhY3RlcnMgYXJlIGludGVycHJldGVkIGFzIG5ld2xpbmVzIGNhbiBiZSBzcGVjaWZpZWQgYnkgYSBzZXQtCi0gICAgICAgdGluZyBpbiB0aGUgY29tcGlsZSBjb250ZXh0IHRoYXQgaXMgcGFzc2VkIHRvIHBjcmUyX2NvbXBpbGUoKSBvciAgYnkgIGEKLSAgICAgICBzcGVjaWFsICBzZXF1ZW5jZSBhdCB0aGUgc3RhcnQgb2YgdGhlIHBhdHRlcm4sIGFzIGRlc2NyaWJlZCBpbiB0aGUgc2VjLQotICAgICAgIHRpb24gZW50aXRsZWQgIk5ld2xpbmUgY29udmVudGlvbnMiIGluIHRoZSBwY3JlMnBhdHRlcm4gIGRvY3VtZW50YXRpb24uCisgICAgICAgdGluZyAgaW4gIHRoZSBjb21waWxlIGNvbnRleHQgdGhhdCBpcyBwYXNzZWQgdG8gcGNyZTJfY29tcGlsZSgpIG9yIGJ5IGEKKyAgICAgICBzcGVjaWFsIHNlcXVlbmNlIGF0IHRoZSBzdGFydCBvZiB0aGUgcGF0dGVybiwgYXMgZGVzY3JpYmVkIGluIHRoZSAgc2VjLQorICAgICAgIHRpb24gIGVudGl0bGVkICJOZXdsaW5lIGNvbnZlbnRpb25zIiBpbiB0aGUgcGNyZTJwYXR0ZXJuIGRvY3VtZW50YXRpb24uCiAgICAgICAgQSBkZWZhdWx0IGlzIGRlZmluZWQgd2hlbiBQQ1JFMiBpcyBidWlsdC4KIAogICAgICAgICAgUENSRTJfRklSU1RMSU5FCiAKLSAgICAgICBJZiAgdGhpcyAgb3B0aW9uICBpcyAgc2V0LCAgYW4gIHVuYW5jaG9yZWQgcGF0dGVybiBpcyByZXF1aXJlZCB0byBtYXRjaAotICAgICAgIGJlZm9yZSBvciBhdCB0aGUgZmlyc3QgIG5ld2xpbmUgIGluICB0aGUgIHN1YmplY3QgIHN0cmluZywgIHRob3VnaCAgdGhlCi0gICAgICAgbWF0Y2hlZCAgdGV4dCAgbWF5ICBjb250aW51ZSAgb3ZlciB0aGUgbmV3bGluZS4gU2VlIGFsc28gUENSRTJfVVNFX09GRi0KLSAgICAgICBTRVRfTElNSVQsICB3aGljaCAgcHJvdmlkZXMgIGEgIG1vcmUgIGdlbmVyYWwgIGxpbWl0aW5nICBmYWNpbGl0eS4gICBJZgotICAgICAgIFBDUkUyX0ZJUlNUTElORSAgaXMgc2V0IHdpdGggYW4gb2Zmc2V0IGxpbWl0LCBhIG1hdGNoIG11c3Qgb2NjdXIgaW4gdGhlCi0gICAgICAgZmlyc3QgbGluZSBhbmQgYWxzbyB3aXRoaW4gdGhlIG9mZnNldCBsaW1pdC4gSW4gb3RoZXIgd29yZHMsICB3aGljaGV2ZXIKKyAgICAgICBJZiB0aGlzIG9wdGlvbiBpcyBzZXQsIGFuICB1bmFuY2hvcmVkICBwYXR0ZXJuICBpcyAgcmVxdWlyZWQgIHRvICBtYXRjaAorICAgICAgIGJlZm9yZSAgb3IgIGF0ICB0aGUgIGZpcnN0ICBuZXdsaW5lICBpbiAgdGhlIHN1YmplY3Qgc3RyaW5nLCB0aG91Z2ggdGhlCisgICAgICAgbWF0Y2hlZCB0ZXh0IG1heSBjb250aW51ZSBvdmVyIHRoZSAgbmV3bGluZS4gIFNlZSAgYWxzbyAgUENSRTJfVVNFX09GRi0KKyAgICAgICBTRVRfTElNSVQsICAgd2hpY2ggIHByb3ZpZGVzICBhICBtb3JlICBnZW5lcmFsICBsaW1pdGluZyAgZmFjaWxpdHkuICBJZgorICAgICAgIFBDUkUyX0ZJUlNUTElORSBpcyBzZXQgd2l0aCBhbiBvZmZzZXQgbGltaXQsIGEgbWF0Y2ggbXVzdCBvY2N1ciBpbiAgdGhlCisgICAgICAgZmlyc3QgIGxpbmUgYW5kIGFsc28gd2l0aGluIHRoZSBvZmZzZXQgbGltaXQuIEluIG90aGVyIHdvcmRzLCB3aGljaGV2ZXIKICAgICAgICBsaW1pdCBjb21lcyBmaXJzdCBpcyB1c2VkLgogCiAgICAgICAgICBQQ1JFMl9NQVRDSF9VTlNFVF9CQUNLUkVGCiAKLSAgICAgICBJZiAgdGhpcyAgb3B0aW9uICBpcyBzZXQsIGEgYmFjayByZWZlcmVuY2UgdG8gYW4gdW5zZXQgc3VicGF0dGVybiBncm91cAotICAgICAgIG1hdGNoZXMgYW4gZW1wdHkgc3RyaW5nIChieSBkZWZhdWx0IHRoaXMgY2F1c2VzICB0aGUgIGN1cnJlbnQgIG1hdGNoaW5nCi0gICAgICAgYWx0ZXJuYXRpdmUgIHRvICBmYWlsKS4gICBBICBwYXR0ZXJuIHN1Y2ggYXMgKFwxKShhKSBzdWNjZWVkcyB3aGVuIHRoaXMKLSAgICAgICBvcHRpb24gaXMgc2V0IChhc3N1bWluZyBpdCBjYW4gZmluZCBhbiAiYSIgaW4gdGhlIHN1YmplY3QpLCB3aGVyZWFzICBpdAotICAgICAgIGZhaWxzICBieSAgZGVmYXVsdCwgIGZvciAgUGVybCBjb21wYXRpYmlsaXR5LiBTZXR0aW5nIHRoaXMgb3B0aW9uIG1ha2VzCisgICAgICAgSWYgdGhpcyBvcHRpb24gaXMgc2V0LCBhIGJhY2sgcmVmZXJlbmNlIHRvIGFuICB1bnNldCAgc3VicGF0dGVybiAgZ3JvdXAKKyAgICAgICBtYXRjaGVzICBhbiAgZW1wdHkgIHN0cmluZyAoYnkgZGVmYXVsdCB0aGlzIGNhdXNlcyB0aGUgY3VycmVudCBtYXRjaGluZworICAgICAgIGFsdGVybmF0aXZlIHRvIGZhaWwpLiAgQSBwYXR0ZXJuIHN1Y2ggYXMgIChcMSkoYSkgIHN1Y2NlZWRzICB3aGVuICB0aGlzCisgICAgICAgb3B0aW9uICBpcyBzZXQgKGFzc3VtaW5nIGl0IGNhbiBmaW5kIGFuICJhIiBpbiB0aGUgc3ViamVjdCksIHdoZXJlYXMgaXQKKyAgICAgICBmYWlscyBieSBkZWZhdWx0LCBmb3IgUGVybCBjb21wYXRpYmlsaXR5LiAgU2V0dGluZyAgdGhpcyAgb3B0aW9uICBtYWtlcwogICAgICAgIFBDUkUyIGJlaGF2ZSBtb3JlIGxpa2UgRUNNQXNjcmlwdCAoYWthIEphdmFTY3JpcHQpLgogCiAgICAgICAgICBQQ1JFMl9NVUxUSUxJTkUKIAotICAgICAgIEJ5IGRlZmF1bHQsIGZvciB0aGUgcHVycG9zZXMgb2YgbWF0Y2hpbmcgInN0YXJ0IG9mIGxpbmUiICBhbmQgICJlbmQgIG9mCi0gICAgICAgbGluZSIsICBQQ1JFMiAgdHJlYXRzIHRoZSBzdWJqZWN0IHN0cmluZyBhcyBjb25zaXN0aW5nIG9mIGEgc2luZ2xlIGxpbmUKLSAgICAgICBvZiBjaGFyYWN0ZXJzLCBldmVuIGlmIGl0IGFjdHVhbGx5IGNvbnRhaW5zICBuZXdsaW5lcy4gIFRoZSAgInN0YXJ0ICBvZgotICAgICAgIGxpbmUiICBtZXRhY2hhcmFjdGVyICAoXikgIG1hdGNoZXMgb25seSBhdCB0aGUgc3RhcnQgb2YgdGhlIHN0cmluZywgYW5kCi0gICAgICAgdGhlICJlbmQgb2YgbGluZSIgbWV0YWNoYXJhY3RlciAoJCkgbWF0Y2hlcyBvbmx5ICBhdCAgdGhlICBlbmQgIG9mICB0aGUKKyAgICAgICBCeSAgZGVmYXVsdCwgIGZvciAgdGhlIHB1cnBvc2VzIG9mIG1hdGNoaW5nICJzdGFydCBvZiBsaW5lIiBhbmQgImVuZCBvZgorICAgICAgIGxpbmUiLCBQQ1JFMiB0cmVhdHMgdGhlIHN1YmplY3Qgc3RyaW5nIGFzIGNvbnNpc3Rpbmcgb2YgYSAgc2luZ2xlICBsaW5lCisgICAgICAgb2YgIGNoYXJhY3RlcnMsICBldmVuICBpZiAgaXQgYWN0dWFsbHkgY29udGFpbnMgbmV3bGluZXMuIFRoZSAic3RhcnQgb2YKKyAgICAgICBsaW5lIiBtZXRhY2hhcmFjdGVyICheKSBtYXRjaGVzIG9ubHkgYXQgdGhlIHN0YXJ0IG9mICB0aGUgIHN0cmluZywgIGFuZAorICAgICAgIHRoZSAgImVuZCAgb2YgIGxpbmUiICBtZXRhY2hhcmFjdGVyICAoJCkgbWF0Y2hlcyBvbmx5IGF0IHRoZSBlbmQgb2YgdGhlCiAgICAgICAgc3RyaW5nLCAgb3IgIGJlZm9yZSAgYSAgdGVybWluYXRpbmcgIG5ld2xpbmUgIChleGNlcHQgIHdoZW4gIFBDUkUyX0RPTC0KLSAgICAgICBMQVJfRU5ET05MWSBpcyBzZXQpLiBOb3RlLCBob3dldmVyLCB0aGF0IHVubGVzcyAgUENSRTJfRE9UQUxMICBpcyAgc2V0LAorICAgICAgIExBUl9FTkRPTkxZICBpcyAgc2V0KS4gIE5vdGUsIGhvd2V2ZXIsIHRoYXQgdW5sZXNzIFBDUkUyX0RPVEFMTCBpcyBzZXQsCiAgICAgICAgdGhlICJhbnkgY2hhcmFjdGVyIiBtZXRhY2hhcmFjdGVyICguKSBkb2VzIG5vdCBtYXRjaCBhdCBhIG5ld2xpbmUuIFRoaXMKICAgICAgICBiZWhhdmlvdXIgKGZvciBeLCAkLCBhbmQgZG90KSBpcyB0aGUgc2FtZSBhcyBQZXJsLgogCi0gICAgICAgV2hlbiBQQ1JFMl9NVUxUSUxJTkUgaXQgaXMgc2V0LCB0aGUgInN0YXJ0IG9mIGxpbmUiIGFuZCAiZW5kICBvZiAgbGluZSIKLSAgICAgICBjb25zdHJ1Y3RzICBtYXRjaCAgaW1tZWRpYXRlbHkgZm9sbG93aW5nIG9yIGltbWVkaWF0ZWx5IGJlZm9yZSBpbnRlcm5hbAotICAgICAgIG5ld2xpbmVzIGluIHRoZSBzdWJqZWN0IHN0cmluZywgcmVzcGVjdGl2ZWx5LCBhcyB3ZWxsIGFzICBhdCAgdGhlICB2ZXJ5Ci0gICAgICAgc3RhcnQgIGFuZCAgZW5kLiAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIFBlcmwncyAvbSBvcHRpb24sIGFuZCBpdCBjYW4gYmUKKyAgICAgICBXaGVuICBQQ1JFMl9NVUxUSUxJTkUgIGl0IGlzIHNldCwgdGhlICJzdGFydCBvZiBsaW5lIiBhbmQgImVuZCBvZiBsaW5lIgorICAgICAgIGNvbnN0cnVjdHMgbWF0Y2ggaW1tZWRpYXRlbHkgZm9sbG93aW5nIG9yIGltbWVkaWF0ZWx5ICBiZWZvcmUgIGludGVybmFsCisgICAgICAgbmV3bGluZXMgIGluICB0aGUgIHN1YmplY3Qgc3RyaW5nLCByZXNwZWN0aXZlbHksIGFzIHdlbGwgYXMgYXQgdGhlIHZlcnkKKyAgICAgICBzdGFydCBhbmQgZW5kLiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gUGVybCdzIC9tIG9wdGlvbiwgYW5kICBpdCAgY2FuICBiZQogICAgICAgIGNoYW5nZWQgd2l0aGluIGEgcGF0dGVybiBieSBhICg/bSkgb3B0aW9uIHNldHRpbmcuIE5vdGUgdGhhdCB0aGUgInN0YXJ0CiAgICAgICAgb2YgbGluZSIgbWV0YWNoYXJhY3RlciBkb2VzIG5vdCBtYXRjaCBhZnRlciBhIG5ld2xpbmUgYXQgdGhlIGVuZCBvZiB0aGUKLSAgICAgICBzdWJqZWN0LCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIFBlcmwuICBIb3dldmVyLCB5b3UgY2FuIGNoYW5nZSB0aGlzICBieQotICAgICAgIHNldHRpbmcgIHRoZSBQQ1JFMl9BTFRfQ0lSQ1VNRkxFWCBvcHRpb24uIElmIHRoZXJlIGFyZSBubyBuZXdsaW5lcyBpbiBhCi0gICAgICAgc3ViamVjdCBzdHJpbmcsIG9yIG5vIG9jY3VycmVuY2VzIG9mIF4gIG9yICAkICBpbiAgYSAgcGF0dGVybiwgIHNldHRpbmcKKyAgICAgICBzdWJqZWN0LCAgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBQZXJsLiAgSG93ZXZlciwgeW91IGNhbiBjaGFuZ2UgdGhpcyBieQorICAgICAgIHNldHRpbmcgdGhlIFBDUkUyX0FMVF9DSVJDVU1GTEVYIG9wdGlvbi4gSWYgdGhlcmUgYXJlIG5vIG5ld2xpbmVzIGluICBhCisgICAgICAgc3ViamVjdCAgc3RyaW5nLCAgb3IgIG5vICBvY2N1cnJlbmNlcyAgb2YgIF4gb3IgJCBpbiBhIHBhdHRlcm4sIHNldHRpbmcKICAgICAgICBQQ1JFMl9NVUxUSUxJTkUgaGFzIG5vIGVmZmVjdC4KIAogICAgICAgICAgUENSRTJfTkVWRVJfQkFDS1NMQVNIX0MKIAotICAgICAgIFRoaXMgIG9wdGlvbiAgbG9ja3Mgb3V0IHRoZSB1c2Ugb2YgXEMgaW4gdGhlIHBhdHRlcm4gdGhhdCBpcyBiZWluZyBjb20tCi0gICAgICAgcGlsZWQuICBUaGlzIGVzY2FwZSBjYW4gIGNhdXNlICB1bnByZWRpY3RhYmxlICBiZWhhdmlvdXIgIGluICBVVEYtOCAgb3IKLSAgICAgICBVVEYtMTYgIG1vZGVzLCAgYmVjYXVzZSAgaXQgbWF5IGxlYXZlIHRoZSBjdXJyZW50IG1hdGNoaW5nIHBvaW50IGluIHRoZQotICAgICAgIG1pZGRsZSBvZiBhIG11bHRpLWNvZGUtdW5pdCBjaGFyYWN0ZXIuIFRoaXMgb3B0aW9uICBtYXkgIGJlICB1c2VmdWwgIGluCi0gICAgICAgYXBwbGljYXRpb25zICB0aGF0ICBwcm9jZXNzICBwYXR0ZXJucyAgZnJvbSBleHRlcm5hbCBzb3VyY2VzLiBOb3RlIHRoYXQKKyAgICAgICBUaGlzIG9wdGlvbiBsb2NrcyBvdXQgdGhlIHVzZSBvZiBcQyBpbiB0aGUgcGF0dGVybiB0aGF0IGlzICBiZWluZyAgY29tLQorICAgICAgIHBpbGVkLiAgIFRoaXMgIGVzY2FwZSAgY2FuICBjYXVzZSAgdW5wcmVkaWN0YWJsZSAgYmVoYXZpb3VyIGluIFVURi04IG9yCisgICAgICAgVVRGLTE2IG1vZGVzLCBiZWNhdXNlIGl0IG1heSBsZWF2ZSB0aGUgY3VycmVudCBtYXRjaGluZyAgcG9pbnQgIGluICB0aGUKKyAgICAgICBtaWRkbGUgIG9mICBhICBtdWx0aS1jb2RlLXVuaXQgIGNoYXJhY3Rlci4gVGhpcyBvcHRpb24gbWF5IGJlIHVzZWZ1bCBpbgorICAgICAgIGFwcGxpY2F0aW9ucyB0aGF0IHByb2Nlc3MgcGF0dGVybnMgZnJvbSAgZXh0ZXJuYWwgIHNvdXJjZXMuICBOb3RlICB0aGF0CiAgICAgICAgdGhlcmUgaXMgYWxzbyBhIGJ1aWxkLXRpbWUgb3B0aW9uIHRoYXQgcGVybWFuZW50bHkgbG9ja3Mgb3V0IHRoZSB1c2Ugb2YKICAgICAgICBcQy4KIAogICAgICAgICAgUENSRTJfTkVWRVJfVUNQCiAKLSAgICAgICBUaGlzICBvcHRpb24gIGxvY2tzICBvdXQgdGhlIHVzZSBvZiBVbmljb2RlIHByb3BlcnRpZXMgZm9yIGhhbmRsaW5nIFxCLAorICAgICAgIFRoaXMgb3B0aW9uIGxvY2tzIG91dCB0aGUgdXNlIG9mIFVuaWNvZGUgcHJvcGVydGllcyAgZm9yICBoYW5kbGluZyAgXEIsCiAgICAgICAgXGIsIFxELCBcZCwgXFMsIFxzLCBcVywgXHcsIGFuZCBzb21lIG9mIHRoZSBQT1NJWCBjaGFyYWN0ZXIgY2xhc3NlcywgYXMKLSAgICAgICBkZXNjcmliZWQgIGZvciAgdGhlICBQQ1JFMl9VQ1Agb3B0aW9uIGJlbG93LiBJbiBwYXJ0aWN1bGFyLCBpdCBwcmV2ZW50cwotICAgICAgIHRoZSBjcmVhdG9yIG9mIHRoZSBwYXR0ZXJuIGZyb20gZW5hYmxpbmcgdGhpcyBmYWNpbGl0eSBieSBzdGFydGluZyAgdGhlCi0gICAgICAgcGF0dGVybiAgd2l0aCAgKCpVQ1ApLiAgVGhpcyAgb3B0aW9uIG1heSBiZSB1c2VmdWwgaW4gYXBwbGljYXRpb25zIHRoYXQKKyAgICAgICBkZXNjcmliZWQgZm9yIHRoZSBQQ1JFMl9VQ1Agb3B0aW9uIGJlbG93LiBJbiAgcGFydGljdWxhciwgIGl0ICBwcmV2ZW50cworICAgICAgIHRoZSAgY3JlYXRvciBvZiB0aGUgcGF0dGVybiBmcm9tIGVuYWJsaW5nIHRoaXMgZmFjaWxpdHkgYnkgc3RhcnRpbmcgdGhlCisgICAgICAgcGF0dGVybiB3aXRoICgqVUNQKS4gVGhpcyBvcHRpb24gbWF5IGJlICB1c2VmdWwgIGluICBhcHBsaWNhdGlvbnMgIHRoYXQKICAgICAgICBwcm9jZXNzIHBhdHRlcm5zIGZyb20gZXh0ZXJuYWwgc291cmNlcy4gVGhlIG9wdGlvbiBjb21iaW5hdGlvbiBQQ1JFX1VDUAogICAgICAgIGFuZCBQQ1JFX05FVkVSX1VDUCBjYXVzZXMgYW4gZXJyb3IuCiAKICAgICAgICAgIFBDUkUyX05FVkVSX1VURgogCi0gICAgICAgVGhpcyAgb3B0aW9uICBsb2NrcyBvdXQgaW50ZXJwcmV0YXRpb24gb2YgdGhlIHBhdHRlcm4gYXMgVVRGLTgsIFVURi0xNiwKKyAgICAgICBUaGlzIG9wdGlvbiBsb2NrcyBvdXQgaW50ZXJwcmV0YXRpb24gb2YgdGhlIHBhdHRlcm4gYXMgIFVURi04LCAgVVRGLTE2LAogICAgICAgIG9yIFVURi0zMiwgZGVwZW5kaW5nIG9uIHdoaWNoIGxpYnJhcnkgaXMgaW4gdXNlLiBJbiBwYXJ0aWN1bGFyLCBpdCBwcmUtCi0gICAgICAgdmVudHMgIHRoZSAgY3JlYXRvciBvZiB0aGUgcGF0dGVybiBmcm9tIHN3aXRjaGluZyB0byBVVEYgaW50ZXJwcmV0YXRpb24KLSAgICAgICBieSBzdGFydGluZyB0aGUgcGF0dGVybiB3aXRoICgqVVRGKS4gIFRoaXMgIG9wdGlvbiAgbWF5ICBiZSAgdXNlZnVsICBpbgotICAgICAgIGFwcGxpY2F0aW9ucyAgdGhhdCBwcm9jZXNzIHBhdHRlcm5zIGZyb20gZXh0ZXJuYWwgc291cmNlcy4gVGhlIGNvbWJpbmEtCisgICAgICAgdmVudHMgdGhlIGNyZWF0b3Igb2YgdGhlIHBhdHRlcm4gZnJvbSBzd2l0Y2hpbmcgdG8gIFVURiAgaW50ZXJwcmV0YXRpb24KKyAgICAgICBieSAgc3RhcnRpbmcgIHRoZSAgcGF0dGVybiAgd2l0aCAgKCpVVEYpLiAgVGhpcyBvcHRpb24gbWF5IGJlIHVzZWZ1bCBpbgorICAgICAgIGFwcGxpY2F0aW9ucyB0aGF0IHByb2Nlc3MgcGF0dGVybnMgZnJvbSBleHRlcm5hbCBzb3VyY2VzLiBUaGUgIGNvbWJpbmEtCiAgICAgICAgdGlvbiBvZiBQQ1JFMl9VVEYgYW5kIFBDUkUyX05FVkVSX1VURiBjYXVzZXMgYW4gZXJyb3IuCiAKICAgICAgICAgIFBDUkUyX05PX0FVVE9fQ0FQVFVSRQogCiAgICAgICAgSWYgdGhpcyBvcHRpb24gaXMgc2V0LCBpdCBkaXNhYmxlcyB0aGUgdXNlIG9mIG51bWJlcmVkIGNhcHR1cmluZyBwYXJlbi0KLSAgICAgICB0aGVzZXMgIGluIHRoZSBwYXR0ZXJuLiBBbnkgb3BlbmluZyBwYXJlbnRoZXNpcyB0aGF0IGlzIG5vdCBmb2xsb3dlZCBieQotICAgICAgID8gYmVoYXZlcyBhcyBpZiBpdCB3ZXJlIGZvbGxvd2VkIGJ5ID86IGJ1dCBuYW1lZCBwYXJlbnRoZXNlcyBjYW4gIHN0aWxsCi0gICAgICAgYmUgIHVzZWQgIGZvciAgY2FwdHVyaW5nICAoYW5kICB0aGV5IGFjcXVpcmUgbnVtYmVycyBpbiB0aGUgdXN1YWwgd2F5KS4KLSAgICAgICBUaGVyZSBpcyBubyBlcXVpdmFsZW50IG9mIHRoaXMgb3B0aW9uIGluIFBlcmwuCisgICAgICAgdGhlc2VzIGluIHRoZSBwYXR0ZXJuLiBBbnkgb3BlbmluZyBwYXJlbnRoZXNpcyB0aGF0IGlzIG5vdCBmb2xsb3dlZCAgYnkKKyAgICAgICA/ICBiZWhhdmVzIGFzIGlmIGl0IHdlcmUgZm9sbG93ZWQgYnkgPzogYnV0IG5hbWVkIHBhcmVudGhlc2VzIGNhbiBzdGlsbAorICAgICAgIGJlIHVzZWQgZm9yIGNhcHR1cmluZyAoYW5kIHRoZXkgYWNxdWlyZSAgbnVtYmVycyAgaW4gIHRoZSAgdXN1YWwgIHdheSkuCisgICAgICAgVGhlcmUgIGlzICBubyAgZXF1aXZhbGVudCAgb2YgIHRoaXMgIG9wdGlvbiBpbiBQZXJsLiBOb3RlIHRoYXQsIGlmIHRoaXMKKyAgICAgICBvcHRpb24gaXMgc2V0LCByZWZlcmVuY2VzICB0byAgY2FwdHVyaW5nICBncm91cHMgIChiYWNrICByZWZlcmVuY2VzICBvcgorICAgICAgIHJlY3Vyc2lvbi9zdWJyb3V0aW5lICBjYWxscykgbWF5IG9ubHkgcmVmZXIgdG8gbmFtZWQgZ3JvdXBzLCB0aG91Z2ggdGhlCisgICAgICAgcmVmZXJlbmNlIGNhbiBiZSBieSBuYW1lIG9yIGJ5IG51bWJlci4KIAogICAgICAgICAgUENSRTJfTk9fQVVUT19QT1NTRVNTCiAKQEAgLTE0NjEsMTEgKzE1MjAsMTIgQEAKIENPTVBJTEFUSU9OIEVSUk9SIENPREVTCiAKICAgICAgICBUaGVyZSAgYXJlIG92ZXIgODAgcG9zaXRpdmUgZXJyb3IgY29kZXMgdGhhdCBwY3JlMl9jb21waWxlKCkgbWF5IHJldHVybgotICAgICAgIGlmIGl0IGZpbmRzIGFuIGVycm9yIGluIHRoZSBwYXR0ZXJuLiBUaGVyZSBhcmUgYWxzbyBzb21lIG5lZ2F0aXZlIGVycm9yCi0gICAgICAgY29kZXMgIHRoYXQgIGFyZSAgdXNlZCAgZm9yICBpbnZhbGlkIFVURiBzdHJpbmdzLiBUaGVzZSBhcmUgdGhlIHNhbWUgYXMKLSAgICAgICBnaXZlbiBieSBwY3JlMl9tYXRjaCgpIGFuZCBwY3JlMl9kZmFfbWF0Y2goKSwgYW5kIGFyZSBkZXNjcmliZWQgaW4gIHRoZQotICAgICAgIHBjcmUydW5pY29kZSBwYWdlLiBUaGUgcGNyZTJfZ2V0X2Vycm9yX21lc3NhZ2UoKSBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkCi0gICAgICAgdG8gb2J0YWluIGEgdGV4dHVhbCBlcnJvciBtZXNzYWdlIGZyb20gYW55IGVycm9yIGNvZGUuCisgICAgICAgKHZpYSBlcnJvcmNvZGUpIGlmIGl0IGZpbmRzIGFuIGVycm9yIGluIHRoZSAgcGF0dGVybi4gIFRoZXJlICBhcmUgIGFsc28KKyAgICAgICBzb21lICBuZWdhdGl2ZSBlcnJvciBjb2RlcyB0aGF0IGFyZSB1c2VkIGZvciBpbnZhbGlkIFVURiBzdHJpbmdzLiBUaGVzZQorICAgICAgIGFyZSB0aGUgc2FtZSBhcyBnaXZlbiBieSBwY3JlMl9tYXRjaCgpIGFuZCBwY3JlMl9kZmFfbWF0Y2goKSwgIGFuZCAgYXJlCisgICAgICAgZGVzY3JpYmVkIGluIHRoZSBwY3JlMnVuaWNvZGUgcGFnZS4gVGhlIHBjcmUyX2dldF9lcnJvcl9tZXNzYWdlKCkgZnVuYy0KKyAgICAgICB0aW9uIChzZWUgIk9idGFpbmluZyBhIHRleHR1YWwgZXJyb3IgbWVzc2FnZSIgYmVsb3cpIGNhbiBiZSAgY2FsbGVkICB0bworICAgICAgIG9idGFpbiBhIHRleHR1YWwgZXJyb3IgbWVzc2FnZSBmcm9tIGFueSBlcnJvciBjb2RlLgogCiAKIEpVU1QtSU4tVElNRSAoSklUKSBDT01QSUxBVElPTgpAQCAtMTQ4Nyw1MyArMTU0Nyw1MyBAQAogCiAgICAgICAgdm9pZCBwY3JlMl9qaXRfc3RhY2tfZnJlZShwY3JlMl9qaXRfc3RhY2sgKmppdF9zdGFjayk7CiAKLSAgICAgICBUaGVzZSBmdW5jdGlvbnMgcHJvdmlkZSBzdXBwb3J0IGZvciAgSklUICBjb21waWxhdGlvbiwgIHdoaWNoLCAgaWYgIHRoZQotICAgICAgIGp1c3QtaW4tdGltZSAgY29tcGlsZXIgIGlzIGF2YWlsYWJsZSwgZnVydGhlciBwcm9jZXNzZXMgYSBjb21waWxlZCBwYXQtCisgICAgICAgVGhlc2UgIGZ1bmN0aW9ucyAgcHJvdmlkZSAgc3VwcG9ydCAgZm9yICBKSVQgY29tcGlsYXRpb24sIHdoaWNoLCBpZiB0aGUKKyAgICAgICBqdXN0LWluLXRpbWUgY29tcGlsZXIgaXMgYXZhaWxhYmxlLCBmdXJ0aGVyIHByb2Nlc3NlcyBhICBjb21waWxlZCAgcGF0LQogICAgICAgIHRlcm4gaW50byBtYWNoaW5lIGNvZGUgdGhhdCBleGVjdXRlcyBtdWNoIGZhc3RlciB0aGFuIHRoZSBwY3JlMl9tYXRjaCgpCi0gICAgICAgaW50ZXJwcmV0aXZlICBtYXRjaGluZyBmdW5jdGlvbi4gRnVsbCBkZXRhaWxzIGFyZSBnaXZlbiBpbiB0aGUgcGNyZTJqaXQKKyAgICAgICBpbnRlcnByZXRpdmUgbWF0Y2hpbmcgZnVuY3Rpb24uIEZ1bGwgZGV0YWlscyBhcmUgZ2l2ZW4gaW4gdGhlICBwY3JlMmppdAogICAgICAgIGRvY3VtZW50YXRpb24uCiAKLSAgICAgICBKSVQgY29tcGlsYXRpb24gaXMgYSBoZWF2eXdlaWdodCBvcHRpbWl6YXRpb24uIEl0IGNhbiAgdGFrZSAgc29tZSAgdGltZQotICAgICAgIGZvciAgcGF0dGVybnMgIHRvICBiZSBhbmFseXplZCwgYW5kIGZvciBvbmUtb2ZmIG1hdGNoZXMgYW5kIHNpbXBsZSBwYXQtCi0gICAgICAgdGVybnMgdGhlIGJlbmVmaXQgb2YgZmFzdGVyIGV4ZWN1dGlvbiBtaWdodCBiZSBvZmZzZXQgYnkgYSBtdWNoICBzbG93ZXIKLSAgICAgICBjb21waWxhdGlvbiAgdGltZS4gICBNb3N0LCBidXQgbm90IGFsbCBwYXR0ZXJucyBjYW4gYmUgb3B0aW1pemVkIGJ5IHRoZQorICAgICAgIEpJVCAgY29tcGlsYXRpb24gIGlzICBhIGhlYXZ5d2VpZ2h0IG9wdGltaXphdGlvbi4gSXQgY2FuIHRha2Ugc29tZSB0aW1lCisgICAgICAgZm9yIHBhdHRlcm5zIHRvIGJlIGFuYWx5emVkLCBhbmQgZm9yIG9uZS1vZmYgbWF0Y2hlcyAgYW5kICBzaW1wbGUgIHBhdC0KKyAgICAgICB0ZXJucyAgdGhlIGJlbmVmaXQgb2YgZmFzdGVyIGV4ZWN1dGlvbiBtaWdodCBiZSBvZmZzZXQgYnkgYSBtdWNoIHNsb3dlcgorICAgICAgIGNvbXBpbGF0aW9uIHRpbWUuICBNb3N0LCBidXQgbm90IGFsbCBwYXR0ZXJucyBjYW4gYmUgb3B0aW1pemVkICBieSAgdGhlCiAgICAgICAgSklUIGNvbXBpbGVyLgogCiAKIExPQ0FMRSBTVVBQT1JUCiAKLSAgICAgICBQQ1JFMiBoYW5kbGVzIGNhc2VsZXNzIG1hdGNoaW5nLCBhbmQgZGV0ZXJtaW5lcyB3aGV0aGVyIGNoYXJhY3RlcnMgIGFyZQotICAgICAgIGxldHRlcnMsICBkaWdpdHMsIG9yIHdoYXRldmVyLCBieSByZWZlcmVuY2UgdG8gYSBzZXQgb2YgdGFibGVzLCBpbmRleGVkCi0gICAgICAgYnkgY2hhcmFjdGVyIGNvZGUgcG9pbnQuIFRoaXMgYXBwbGllcyBvbmx5ICB0byAgY2hhcmFjdGVycyAgd2hvc2UgIGNvZGUKLSAgICAgICBwb2ludHMgIGFyZSAgbGVzcyB0aGFuIDI1Ni4gQnkgZGVmYXVsdCwgaGlnaGVyLXZhbHVlZCBjb2RlIHBvaW50cyBuZXZlcgotICAgICAgIG1hdGNoIGVzY2FwZXMgc3VjaCBhcyBcdyBvciBcZC4gIEhvd2V2ZXIsIGlmIFBDUkUyIGlzICBidWlsdCAgd2l0aCAgVVRGCi0gICAgICAgc3VwcG9ydCwgIGFsbCAgY2hhcmFjdGVycyAgY2FuICBiZSAgdGVzdGVkIHdpdGggXHAgYW5kIFxQLCBvciwgYWx0ZXJuYS0KLSAgICAgICB0aXZlbHksIHRoZSBQQ1JFMl9VQ1Agb3B0aW9uIGNhbiBiZSBzZXQgd2hlbiAgYSAgcGF0dGVybiAgaXMgIGNvbXBpbGVkOwotICAgICAgIHRoaXMgIGNhdXNlcyAgXHcgYW5kIGZyaWVuZHMgdG8gdXNlIFVuaWNvZGUgcHJvcGVydHkgc3VwcG9ydCBpbnN0ZWFkIG9mCisgICAgICAgUENSRTIgIGhhbmRsZXMgY2FzZWxlc3MgbWF0Y2hpbmcsIGFuZCBkZXRlcm1pbmVzIHdoZXRoZXIgY2hhcmFjdGVycyBhcmUKKyAgICAgICBsZXR0ZXJzLCBkaWdpdHMsIG9yIHdoYXRldmVyLCBieSByZWZlcmVuY2UgdG8gYSBzZXQgb2YgdGFibGVzLCAgaW5kZXhlZAorICAgICAgIGJ5ICBjaGFyYWN0ZXIgIGNvZGUgIHBvaW50LiAgVGhpcyBhcHBsaWVzIG9ubHkgdG8gY2hhcmFjdGVycyB3aG9zZSBjb2RlCisgICAgICAgcG9pbnRzIGFyZSBsZXNzIHRoYW4gMjU2LiBCeSBkZWZhdWx0LCBoaWdoZXItdmFsdWVkIGNvZGUgIHBvaW50cyAgbmV2ZXIKKyAgICAgICBtYXRjaCAgZXNjYXBlcyAgc3VjaCAgYXMgXHcgb3IgXGQuICBIb3dldmVyLCBpZiBQQ1JFMiBpcyBidWlsdCB3aXRoIFVURgorICAgICAgIHN1cHBvcnQsIGFsbCBjaGFyYWN0ZXJzIGNhbiBiZSB0ZXN0ZWQgd2l0aCAgXHAgIGFuZCAgXFAsICBvciwgIGFsdGVybmEtCisgICAgICAgdGl2ZWx5LCAgdGhlICBQQ1JFMl9VQ1AgIG9wdGlvbiAgY2FuIGJlIHNldCB3aGVuIGEgcGF0dGVybiBpcyBjb21waWxlZDsKKyAgICAgICB0aGlzIGNhdXNlcyBcdyBhbmQgZnJpZW5kcyB0byB1c2UgVW5pY29kZSBwcm9wZXJ0eSBzdXBwb3J0ICBpbnN0ZWFkICBvZgogICAgICAgIHRoZSBidWlsdC1pbiB0YWJsZXMuCiAKLSAgICAgICBUaGUgdXNlIG9mIGxvY2FsZXMgd2l0aCBVbmljb2RlIGlzIGRpc2NvdXJhZ2VkLiAgSWYgIHlvdSAgYXJlICBoYW5kbGluZwotICAgICAgIGNoYXJhY3RlcnMgIHdpdGggIGNvZGUgIHBvaW50cyAgZ3JlYXRlciB0aGFuIDEyOCwgeW91IHNob3VsZCBlaXRoZXIgdXNlCisgICAgICAgVGhlICB1c2UgIG9mICBsb2NhbGVzICB3aXRoIFVuaWNvZGUgaXMgZGlzY291cmFnZWQuIElmIHlvdSBhcmUgaGFuZGxpbmcKKyAgICAgICBjaGFyYWN0ZXJzIHdpdGggY29kZSBwb2ludHMgZ3JlYXRlciB0aGFuIDEyOCwgIHlvdSAgc2hvdWxkICBlaXRoZXIgIHVzZQogICAgICAgIFVuaWNvZGUgc3VwcG9ydCwgb3IgdXNlIGxvY2FsZXMsIGJ1dCBub3QgdHJ5IHRvIG1peCB0aGUgdHdvLgogCi0gICAgICAgUENSRTIgY29udGFpbnMgYW4gaW50ZXJuYWwgc2V0IG9mIGNoYXJhY3RlciB0YWJsZXMgIHRoYXQgIGFyZSAgdXNlZCAgYnkKLSAgICAgICBkZWZhdWx0LiAgIFRoZXNlICBhcmUgIHN1ZmZpY2llbnQgIGZvciBtYW55IGFwcGxpY2F0aW9ucy4gTm9ybWFsbHksIHRoZQorICAgICAgIFBDUkUyICBjb250YWlucyAgYW4gIGludGVybmFsICBzZXQgb2YgY2hhcmFjdGVyIHRhYmxlcyB0aGF0IGFyZSB1c2VkIGJ5CisgICAgICAgZGVmYXVsdC4gIFRoZXNlIGFyZSBzdWZmaWNpZW50IGZvciAgbWFueSAgYXBwbGljYXRpb25zLiAgTm9ybWFsbHksICB0aGUKICAgICAgICBpbnRlcm5hbCB0YWJsZXMgcmVjb2duaXplIG9ubHkgQVNDSUkgY2hhcmFjdGVycy4gSG93ZXZlciwgd2hlbiBQQ1JFMiBpcwogICAgICAgIGJ1aWx0LCBpdCBpcyBwb3NzaWJsZSB0byBjYXVzZSB0aGUgaW50ZXJuYWwgdGFibGVzIHRvIGJlIHJlYnVpbHQgaW4gdGhlCiAgICAgICAgZGVmYXVsdCAiQyIgbG9jYWxlIG9mIHRoZSBsb2NhbCBzeXN0ZW0sIHdoaWNoIG1heSBjYXVzZSB0aGVtIHRvIGJlIGRpZi0KICAgICAgICBmZXJlbnQuCiAKLSAgICAgICBUaGUgIGludGVybmFsIHRhYmxlcyBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0YWJsZXMgc3VwcGxpZWQgYnkgdGhlIGFwcGxpLQotICAgICAgIGNhdGlvbiB0aGF0IGNhbGxzIFBDUkUyLiBUaGVzZSBtYXkgYmUgY3JlYXRlZCAgaW4gIGEgIGRpZmZlcmVudCAgbG9jYWxlCi0gICAgICAgZnJvbSAgdGhlICBkZWZhdWx0LiAgQXMgbW9yZSBhbmQgbW9yZSBhcHBsaWNhdGlvbnMgY2hhbmdlIHRvIHVzaW5nIFVuaS0KKyAgICAgICBUaGUgaW50ZXJuYWwgdGFibGVzIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHRhYmxlcyBzdXBwbGllZCBieSB0aGUgIGFwcGxpLQorICAgICAgIGNhdGlvbiAgdGhhdCAgY2FsbHMgIFBDUkUyLiAgVGhlc2UgbWF5IGJlIGNyZWF0ZWQgaW4gYSBkaWZmZXJlbnQgbG9jYWxlCisgICAgICAgZnJvbSB0aGUgZGVmYXVsdC4gIEFzIG1vcmUgYW5kIG1vcmUgYXBwbGljYXRpb25zIGNoYW5nZSB0byAgdXNpbmcgIFVuaS0KICAgICAgICBjb2RlLCB0aGUgbmVlZCBmb3IgdGhpcyBsb2NhbGUgc3VwcG9ydCBpcyBleHBlY3RlZCB0byBkaWUgYXdheS4KIAotICAgICAgIEV4dGVybmFsIHRhYmxlcyBhcmUgYnVpbHQgYnkgY2FsbGluZyB0aGUgIHBjcmUyX21ha2V0YWJsZXMoKSAgZnVuY3Rpb24sCi0gICAgICAgaW4gIHRoZSByZWxldmFudCBsb2NhbGUuIFRoZSByZXN1bHQgY2FuIGJlIHBhc3NlZCB0byBwY3JlMl9jb21waWxlKCkgYXMKLSAgICAgICBvZnRlbiAgYXMgIG5lY2Vzc2FyeSwgIGJ5ICBjcmVhdGluZyAgYSAgY29tcGlsZSAgY29udGV4dCAgYW5kICAgY2FsbGluZwotICAgICAgIHBjcmUyX3NldF9jaGFyYWN0ZXJfdGFibGVzKCkgIHRvICBzZXQgIHRoZSAgdGFibGVzIHBvaW50ZXIgdGhlcmVpbi4gRm9yCi0gICAgICAgZXhhbXBsZSwgdG8gYnVpbGQgYW5kIHVzZSB0YWJsZXMgdGhhdCBhcmUgYXBwcm9wcmlhdGUgIGZvciAgdGhlICBGcmVuY2gKLSAgICAgICBsb2NhbGUgICh3aGVyZSAgYWNjZW50ZWQgIGNoYXJhY3RlcnMgIHdpdGggIHZhbHVlcyBncmVhdGVyIHRoYW4gMTI4IGFyZQorICAgICAgIEV4dGVybmFsICB0YWJsZXMgIGFyZSBidWlsdCBieSBjYWxsaW5nIHRoZSBwY3JlMl9tYWtldGFibGVzKCkgZnVuY3Rpb24sCisgICAgICAgaW4gdGhlIHJlbGV2YW50IGxvY2FsZS4gVGhlIHJlc3VsdCBjYW4gYmUgcGFzc2VkIHRvIHBjcmUyX2NvbXBpbGUoKSAgYXMKKyAgICAgICBvZnRlbiAgIGFzICBuZWNlc3NhcnksICBieSAgY3JlYXRpbmcgIGEgIGNvbXBpbGUgIGNvbnRleHQgIGFuZCAgY2FsbGluZworICAgICAgIHBjcmUyX3NldF9jaGFyYWN0ZXJfdGFibGVzKCkgdG8gc2V0IHRoZSAgdGFibGVzICBwb2ludGVyICB0aGVyZWluLiAgRm9yCisgICAgICAgZXhhbXBsZSwgIHRvICBidWlsZCAgYW5kIHVzZSB0YWJsZXMgdGhhdCBhcmUgYXBwcm9wcmlhdGUgZm9yIHRoZSBGcmVuY2gKKyAgICAgICBsb2NhbGUgKHdoZXJlIGFjY2VudGVkIGNoYXJhY3RlcnMgd2l0aCAgdmFsdWVzICBncmVhdGVyICB0aGFuICAxMjggIGFyZQogICAgICAgIHRyZWF0ZWQgYXMgbGV0dGVycyksIHRoZSBmb2xsb3dpbmcgY29kZSBjb3VsZCBiZSB1c2VkOgogCiAgICAgICAgICBzZXRsb2NhbGUoTENfQ1RZUEUsICJmcl9GUiIpOwpAQCAtMTU0MiwxNSArMTYwMiwxNSBAQAogICAgICAgICAgcGNyZTJfc2V0X2NoYXJhY3Rlcl90YWJsZXMoY2NvbnRleHQsIHRhYmxlcyk7CiAgICAgICAgICByZSA9IHBjcmUyX2NvbXBpbGUoLi4uLCBjY29udGV4dCk7CiAKLSAgICAgICBUaGUgbG9jYWxlIG5hbWUgImZyX0ZSIiBpcyB1c2VkIG9uIExpbnV4IGFuZCBvdGhlciAgVW5peC1saWtlICBzeXN0ZW1zOwotICAgICAgIGlmICB5b3UgIGFyZSB1c2luZyBXaW5kb3dzLCB0aGUgbmFtZSBmb3IgdGhlIEZyZW5jaCBsb2NhbGUgaXMgImZyZW5jaCIuCi0gICAgICAgSXQgaXMgdGhlIGNhbGxlcidzIHJlc3BvbnNpYmlsaXR5IHRvIGVuc3VyZSB0aGF0IHRoZSBtZW1vcnkgIGNvbnRhaW5pbmcKKyAgICAgICBUaGUgIGxvY2FsZSAgbmFtZSAiZnJfRlIiIGlzIHVzZWQgb24gTGludXggYW5kIG90aGVyIFVuaXgtbGlrZSBzeXN0ZW1zOworICAgICAgIGlmIHlvdSBhcmUgdXNpbmcgV2luZG93cywgdGhlIG5hbWUgZm9yIHRoZSBGcmVuY2ggbG9jYWxlICBpcyAgImZyZW5jaCIuCisgICAgICAgSXQgIGlzIHRoZSBjYWxsZXIncyByZXNwb25zaWJpbGl0eSB0byBlbnN1cmUgdGhhdCB0aGUgbWVtb3J5IGNvbnRhaW5pbmcKICAgICAgICB0aGUgdGFibGVzIHJlbWFpbnMgYXZhaWxhYmxlIGZvciBhcyBsb25nIGFzIGl0IGlzIG5lZWRlZC4KIAogICAgICAgIFRoZSBwb2ludGVyIHRoYXQgaXMgcGFzc2VkICh2aWEgdGhlIGNvbXBpbGUgY29udGV4dCkgdG8gcGNyZTJfY29tcGlsZSgpCi0gICAgICAgaXMgc2F2ZWQgd2l0aCB0aGUgY29tcGlsZWQgcGF0dGVybiwgYW5kIHRoZSBzYW1lICB0YWJsZXMgIGFyZSAgdXNlZCAgYnkKLSAgICAgICBwY3JlMl9tYXRjaCgpICBhbmQgcGNyZV9kZmFfbWF0Y2goKS4gVGh1cywgZm9yIGFueSBzaW5nbGUgcGF0dGVybiwgY29tLQotICAgICAgIHBpbGF0aW9uLCBhbmQgbWF0Y2hpbmcgYWxsIGhhcHBlbiBpbiB0aGUgIHNhbWUgIGxvY2FsZSwgIGJ1dCAgZGlmZmVyZW50CisgICAgICAgaXMgIHNhdmVkICB3aXRoICB0aGUgIGNvbXBpbGVkIHBhdHRlcm4sIGFuZCB0aGUgc2FtZSB0YWJsZXMgYXJlIHVzZWQgYnkKKyAgICAgICBwY3JlMl9tYXRjaCgpIGFuZCBwY3JlX2RmYV9tYXRjaCgpLiBUaHVzLCBmb3IgYW55IHNpbmdsZSBwYXR0ZXJuLCAgY29tLQorICAgICAgIHBpbGF0aW9uLCAgYW5kICBtYXRjaGluZyAgYWxsICBoYXBwZW4gaW4gdGhlIHNhbWUgbG9jYWxlLCBidXQgZGlmZmVyZW50CiAgICAgICAgcGF0dGVybnMgY2FuIGJlIHByb2Nlc3NlZCBpbiBkaWZmZXJlbnQgbG9jYWxlcy4KIAogCkBAIC0xNTU4LDEzICsxNjE4LDEzIEBACiAKICAgICAgICBpbnQgcGNyZTJfcGF0dGVybl9pbmZvKGNvbnN0IHBjcmUyICpjb2RlLCB1aW50MzJfdCB3aGF0LCB2b2lkICp3aGVyZSk7CiAKLSAgICAgICBUaGUgIHBjcmUyX3BhdHRlcm5faW5mbygpICBmdW5jdGlvbiByZXR1cm5zIGdlbmVyYWwgaW5mb3JtYXRpb24gYWJvdXQgYQorICAgICAgIFRoZSBwY3JlMl9wYXR0ZXJuX2luZm8oKSBmdW5jdGlvbiByZXR1cm5zIGdlbmVyYWwgaW5mb3JtYXRpb24gIGFib3V0ICBhCiAgICAgICAgY29tcGlsZWQgcGF0dGVybi4gRm9yIGluZm9ybWF0aW9uIGFib3V0IGNhbGxvdXRzLCBzZWUgdGhlIG5leHQgc2VjdGlvbi4KLSAgICAgICBUaGUgIGZpcnN0ICBhcmd1bWVudCAgZm9yIHBjcmUyX3BhdHRlcm5faW5mbygpIGlzIGEgcG9pbnRlciB0byB0aGUgY29tLQorICAgICAgIFRoZSBmaXJzdCBhcmd1bWVudCBmb3IgcGNyZTJfcGF0dGVybl9pbmZvKCkgaXMgYSBwb2ludGVyICB0byAgdGhlICBjb20tCiAgICAgICAgcGlsZWQgcGF0dGVybi4gVGhlIHNlY29uZCBhcmd1bWVudCBzcGVjaWZpZXMgd2hpY2ggcGllY2Ugb2YgaW5mb3JtYXRpb24KLSAgICAgICBpcyAgcmVxdWlyZWQsICBhbmQgIHRoZSAgdGhpcmQgIGFyZ3VtZW50ICBpcyBhIHBvaW50ZXIgdG8gYSB2YXJpYWJsZSB0bwotICAgICAgIHJlY2VpdmUgdGhlIGRhdGEuIElmIHRoZSB0aGlyZCBhcmd1bWVudCBpcyBOVUxMLCB0aGUgZmlyc3QgYXJndW1lbnQgIGlzCi0gICAgICAgaWdub3JlZCwgIGFuZCAgdGhlICBmdW5jdGlvbiAgcmV0dXJucyB0aGUgc2l6ZSBpbiBieXRlcyBvZiB0aGUgdmFyaWFibGUKKyAgICAgICBpcyByZXF1aXJlZCwgYW5kIHRoZSB0aGlyZCBhcmd1bWVudCBpcyAgYSAgcG9pbnRlciAgdG8gIGEgIHZhcmlhYmxlICB0bworICAgICAgIHJlY2VpdmUgIHRoZSBkYXRhLiBJZiB0aGUgdGhpcmQgYXJndW1lbnQgaXMgTlVMTCwgdGhlIGZpcnN0IGFyZ3VtZW50IGlzCisgICAgICAgaWdub3JlZCwgYW5kIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBzaXplIGluICBieXRlcyAgb2YgIHRoZSAgdmFyaWFibGUKICAgICAgICB0aGF0IGlzIHJlcXVpcmVkIGZvciB0aGUgaW5mb3JtYXRpb24gcmVxdWVzdGVkLiBPdGhlcndpc2UsIFRoZSB5aWVsZCBvZgogICAgICAgIHRoZSBmdW5jdGlvbiBpcyB6ZXJvIGZvciBzdWNjZXNzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZyBuZWdhdGl2ZSBudW0tCiAgICAgICAgYmVyczoKQEAgLTE1NzQsOSArMTYzNCw5IEBACiAgICAgICAgICBQQ1JFMl9FUlJPUl9CQURPUFRJT04gICAgICB0aGUgdmFsdWUgb2Ygd2hhdCB3YXMgaW52YWxpZAogICAgICAgICAgUENSRTJfRVJST1JfVU5TRVQgICAgICAgICAgdGhlIHJlcXVlc3RlZCBmaWVsZCBpcyBub3Qgc2V0CiAKLSAgICAgICBUaGUgIm1hZ2ljIG51bWJlciIgaXMgcGxhY2VkIGF0IHRoZSBzdGFydCBvZiBlYWNoIGNvbXBpbGVkICBwYXR0ZXJuICBhcwotICAgICAgIGFuICBzaW1wbGUgY2hlY2sgYWdhaW5zdCBwYXNzaW5nIGFuIGFyYml0cmFyeSBtZW1vcnkgcG9pbnRlci4gSGVyZSBpcyBhCi0gICAgICAgdHlwaWNhbCBjYWxsIG9mIHBjcmUyX3BhdHRlcm5faW5mbygpLCB0byBvYnRhaW4gdGhlIGxlbmd0aCBvZiB0aGUgIGNvbS0KKyAgICAgICBUaGUgICJtYWdpYyAgbnVtYmVyIiBpcyBwbGFjZWQgYXQgdGhlIHN0YXJ0IG9mIGVhY2ggY29tcGlsZWQgcGF0dGVybiBhcworICAgICAgIGFuIHNpbXBsZSBjaGVjayBhZ2FpbnN0IHBhc3NpbmcgYW4gYXJiaXRyYXJ5IG1lbW9yeSBwb2ludGVyLiBIZXJlIGlzICBhCisgICAgICAgdHlwaWNhbCAgY2FsbCBvZiBwY3JlMl9wYXR0ZXJuX2luZm8oKSwgdG8gb2J0YWluIHRoZSBsZW5ndGggb2YgdGhlIGNvbS0KICAgICAgICBwaWxlZCBwYXR0ZXJuOgogCiAgICAgICAgICBpbnQgcmM7CkBAIC0xNTkzLDEyICsxNjUzLDE3IEBACiAgICAgICAgICBQQ1JFMl9JTkZPX0FSR09QVElPTlMKIAogICAgICAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHBhdHRlcm4ncyBvcHRpb25zLiBUaGUgdGhpcmQgYXJndW1lbnQgc2hvdWxkIHBvaW50Ci0gICAgICAgdG8gIGEgIHVpbnQzMl90ICB2YXJpYWJsZS4gIFBDUkUyX0lORk9fQVJHT1BUSU9OUyAgcmV0dXJucyAgZXhhY3RseSB0aGUKLSAgICAgICBvcHRpb25zIHRoYXQgd2VyZSBwYXNzZWQgdG8gcGNyZTJfY29tcGlsZSgpLCB3aGVyZWFzICBQQ1JFMl9JTkZPX0FMTE9QLQotICAgICAgIFRJT05TICByZXR1cm5zICB0aGUgY29tcGlsZSBvcHRpb25zIGFzIG1vZGlmaWVkIGJ5IGFueSB0b3AtbGV2ZWwgb3B0aW9uCi0gICAgICAgc2V0dGluZ3Mgc3VjaCBhcyAoKlVURikgYXQgdGhlIHN0YXJ0IG9mIHRoZSBwYXR0ZXJuIGl0c2VsZi4gIEZvciAgZXhhbS0KLSAgICAgICBwbGUsICBpZiAgdGhlICBwYXR0ZXJuICAvKCpVVEYpYWJjLyBpcyBjb21waWxlZCB3aXRoIHRoZSBQQ1JFMl9FWFRFTkRFRAotICAgICAgIG9wdGlvbiwgdGhlIHJlc3VsdCBpcyBQQ1JFMl9FWFRFTkRFRCBhbmQgUENSRTJfVVRGLgorICAgICAgIHRvIGEgIHVpbnQzMl90ICB2YXJpYWJsZS4gIFBDUkUyX0lORk9fQVJHT1BUSU9OUyAgcmV0dXJucyAgZXhhY3RseSAgdGhlCisgICAgICAgb3B0aW9ucyAgdGhhdCB3ZXJlIHBhc3NlZCB0byBwY3JlMl9jb21waWxlKCksIHdoZXJlYXMgUENSRTJfSU5GT19BTExPUC0KKyAgICAgICBUSU9OUyByZXR1cm5zIHRoZSBjb21waWxlIG9wdGlvbnMgYXMgbW9kaWZpZWQgYnkgYW55ICB0b3AtbGV2ZWwgICgqWFhYKQorICAgICAgIG9wdGlvbiBzZXR0aW5ncyBzdWNoIGFzICgqVVRGKSBhdCB0aGUgc3RhcnQgb2YgdGhlIHBhdHRlcm4gaXRzZWxmLgorCisgICAgICAgRm9yICAgZXhhbXBsZSwgICBpZiAgdGhlICBwYXR0ZXJuICAvKCpVVEYpYWJjLyAgaXMgIGNvbXBpbGVkICB3aXRoICB0aGUKKyAgICAgICBQQ1JFMl9FWFRFTkRFRCAgb3B0aW9uLCAgdGhlICByZXN1bHQgICBmb3IgICBQQ1JFMl9JTkZPX0FMTE9QVElPTlMgICBpcworICAgICAgIFBDUkUyX0VYVEVOREVEICBhbmQgIFBDUkUyX1VURi4gICBPcHRpb24gc2V0dGluZ3Mgc3VjaCBhcyAoP2kpIHRoYXQgY2FuCisgICAgICAgY2hhbmdlIHdpdGhpbiBhIHBhdHRlcm4gZG8gbm90IGFmZmVjdCB0aGUgcmVzdWx0ICBvZiAgUENSRTJfSU5GT19BTExPUC0KKyAgICAgICBUSU9OUywgZXZlbiBpZiB0aGV5IGFwcGVhciByaWdodCBhdCB0aGUgc3RhcnQgb2YgdGhlIHBhdHRlcm4uIChUaGlzIHdhcworICAgICAgIGRpZmZlcmVudCBpbiBzb21lIGVhcmxpZXIgcmVsZWFzZXMuKQogCiAgICAgICAgQSBwYXR0ZXJuIGNvbXBpbGVkIHdpdGhvdXQgUENSRTJfQU5DSE9SRUQgaXMgYXV0b21hdGljYWxseSBhbmNob3JlZCAgYnkKICAgICAgICBQQ1JFMiBpZiB0aGUgZmlyc3Qgc2lnbmlmaWNhbnQgaXRlbSBpbiBldmVyeSB0b3AtbGV2ZWwgYnJhbmNoIGlzIG9uZSBvZgpAQCAtMjAzOCw2MiArMjEwMyw3MCBAQAogCiAgICAgICAgVGhlIHVudXNlZCBiaXRzIG9mIHRoZSBvcHRpb25zIGFyZ3VtZW50IGZvciBwY3JlMl9tYXRjaCgpIG11c3QgYmUgemVyby4KICAgICAgICBUaGUgb25seSAgYml0cyAgdGhhdCAgbWF5ICBiZSAgc2V0ICBhcmUgIFBDUkUyX0FOQ0hPUkVELCAgUENSRTJfTk9UQk9MLAotICAgICAgIFBDUkUyX05PVEVPTCwgICAgICAgICAgUENSRTJfTk9URU1QVFksICAgICAgICAgIFBDUkUyX05PVEVNUFRZX0FUU1RBUlQsCisgICAgICAgUENSRTJfTk9URU9MLCAgIFBDUkUyX05PVEVNUFRZLCAgUENSRTJfTk9URU1QVFlfQVRTVEFSVCwgIFBDUkUyX05PX0pJVCwKICAgICAgICBQQ1JFMl9OT19VVEZfQ0hFQ0ssIFBDUkUyX1BBUlRJQUxfSEFSRCwgYW5kICBQQ1JFMl9QQVJUSUFMX1NPRlQuICBUaGVpcgogICAgICAgIGFjdGlvbiBpcyBkZXNjcmliZWQgYmVsb3cuCiAKICAgICAgICBTZXR0aW5nICBQQ1JFMl9BTkNIT1JFRCAgYXQgbWF0Y2ggdGltZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBqdXN0LWluLQogICAgICAgIHRpbWUgKEpJVCkgY29tcGlsZXIuIElmIGl0IGlzIHNldCwgSklUIG1hdGNoaW5nICBpcyAgZGlzYWJsZWQgIGFuZCAgdGhlCi0gICAgICAgbm9ybWFsIGludGVycHJldGl2ZSBjb2RlIGluIHBjcmUyX21hdGNoKCkgaXMgcnVuLiBUaGUgcmVtYWluaW5nIG9wdGlvbnMKLSAgICAgICBhcmUgc3VwcG9ydGVkIGZvciBKSVQgbWF0Y2hpbmcuCisgICAgICAgbm9ybWFsICAgaW50ZXJwcmV0aXZlICAgY29kZSAgIGluICBwY3JlMl9tYXRjaCgpICBpcyAgcnVuLiAgQXBhcnQgIGZyb20KKyAgICAgICBQQ1JFMl9OT19KSVQgKG9idmlvdXNseSksIHRoZSByZW1haW5pbmcgb3B0aW9ucyBhcmUgc3VwcG9ydGVkICBmb3IgIEpJVAorICAgICAgIG1hdGNoaW5nLgogCiAgICAgICAgICBQQ1JFMl9BTkNIT1JFRAogCiAgICAgICAgVGhlIFBDUkUyX0FOQ0hPUkVEIG9wdGlvbiBsaW1pdHMgcGNyZTJfbWF0Y2goKSB0byBtYXRjaGluZyBhdCB0aGUgZmlyc3QKLSAgICAgICBtYXRjaGluZyAgcG9zaXRpb24uICBJZiAgYSBwYXR0ZXJuIHdhcyBjb21waWxlZCB3aXRoIFBDUkUyX0FOQ0hPUkVELCBvcgotICAgICAgIHR1cm5lZCBvdXQgdG8gYmUgYW5jaG9yZWQgYnkgdmlydHVlIG9mIGl0cyBjb250ZW50cywgaXQgY2Fubm90IGJlICBtYWRlCi0gICAgICAgdW5hY2hvcmVkICBhdCBtYXRjaGluZyB0aW1lLiBOb3RlIHRoYXQgc2V0dGluZyB0aGUgb3B0aW9uIGF0IG1hdGNoIHRpbWUKKyAgICAgICBtYXRjaGluZyBwb3NpdGlvbi4gSWYgYSBwYXR0ZXJuIHdhcyBjb21waWxlZCAgd2l0aCAgUENSRTJfQU5DSE9SRUQsICBvcgorICAgICAgIHR1cm5lZCAgb3V0IHRvIGJlIGFuY2hvcmVkIGJ5IHZpcnR1ZSBvZiBpdHMgY29udGVudHMsIGl0IGNhbm5vdCBiZSBtYWRlCisgICAgICAgdW5hY2hvcmVkIGF0IG1hdGNoaW5nIHRpbWUuIE5vdGUgdGhhdCBzZXR0aW5nIHRoZSBvcHRpb24gYXQgbWF0Y2ggIHRpbWUKICAgICAgICBkaXNhYmxlcyBKSVQgbWF0Y2hpbmcuCiAKICAgICAgICAgIFBDUkUyX05PVEJPTAogCiAgICAgICAgVGhpcyBvcHRpb24gc3BlY2lmaWVzIHRoYXQgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBzdWJqZWN0IHN0cmluZyBpcyBub3QKLSAgICAgICB0aGUgIGJlZ2lubmluZyAgb2YgIGEgIGxpbmUsIHNvIHRoZSBjaXJjdW1mbGV4IG1ldGFjaGFyYWN0ZXIgc2hvdWxkIG5vdAotICAgICAgIG1hdGNoIGJlZm9yZSBpdC4gU2V0dGluZyB0aGlzIHdpdGhvdXQgIGhhdmluZyAgc2V0ICBQQ1JFMl9NVUxUSUxJTkUgIGF0CisgICAgICAgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUsIHNvIHRoZSAgY2lyY3VtZmxleCAgbWV0YWNoYXJhY3RlciAgc2hvdWxkICBub3QKKyAgICAgICBtYXRjaCAgYmVmb3JlICBpdC4gIFNldHRpbmcgIHRoaXMgd2l0aG91dCBoYXZpbmcgc2V0IFBDUkUyX01VTFRJTElORSBhdAogICAgICAgIGNvbXBpbGUgdGltZSBjYXVzZXMgY2lyY3VtZmxleCBuZXZlciB0byBtYXRjaC4gVGhpcyBvcHRpb24gYWZmZWN0cyBvbmx5CiAgICAgICAgdGhlIGJlaGF2aW91ciBvZiB0aGUgY2lyY3VtZmxleCBtZXRhY2hhcmFjdGVyLiBJdCBkb2VzIG5vdCBhZmZlY3QgXEEuCiAKICAgICAgICAgIFBDUkUyX05PVEVPTAogCiAgICAgICAgVGhpcyBvcHRpb24gc3BlY2lmaWVzIHRoYXQgdGhlIGVuZCBvZiB0aGUgc3ViamVjdCBzdHJpbmcgaXMgbm90IHRoZSBlbmQKLSAgICAgICBvZiAgYSBsaW5lLCBzbyB0aGUgZG9sbGFyIG1ldGFjaGFyYWN0ZXIgc2hvdWxkIG5vdCBtYXRjaCBpdCBub3IgKGV4Y2VwdAotICAgICAgIGluIG11bHRpbGluZSBtb2RlKSBhIG5ld2xpbmUgaW1tZWRpYXRlbHkgYmVmb3JlIGl0LiBTZXR0aW5nIHRoaXMgIHdpdGgtCi0gICAgICAgb3V0ICBoYXZpbmcgIHNldCBQQ1JFMl9NVUxUSUxJTkUgYXQgY29tcGlsZSB0aW1lIGNhdXNlcyBkb2xsYXIgbmV2ZXIgdG8KKyAgICAgICBvZiBhIGxpbmUsIHNvIHRoZSBkb2xsYXIgbWV0YWNoYXJhY3RlciBzaG91bGQgbm90IG1hdGNoIGl0IG5vciAgKGV4Y2VwdAorICAgICAgIGluICBtdWx0aWxpbmUgbW9kZSkgYSBuZXdsaW5lIGltbWVkaWF0ZWx5IGJlZm9yZSBpdC4gU2V0dGluZyB0aGlzIHdpdGgtCisgICAgICAgb3V0IGhhdmluZyBzZXQgUENSRTJfTVVMVElMSU5FIGF0IGNvbXBpbGUgdGltZSBjYXVzZXMgZG9sbGFyICBuZXZlciAgdG8KICAgICAgICBtYXRjaC4gVGhpcyBvcHRpb24gYWZmZWN0cyBvbmx5IHRoZSBiZWhhdmlvdXIgb2YgdGhlIGRvbGxhciBtZXRhY2hhcmFjLQogICAgICAgIHRlci4gSXQgZG9lcyBub3QgYWZmZWN0IFxaIG9yIFx6LgogCiAgICAgICAgICBQQ1JFMl9OT1RFTVBUWQogCiAgICAgICAgQW4gZW1wdHkgc3RyaW5nIGlzIG5vdCBjb25zaWRlcmVkIHRvIGJlIGEgdmFsaWQgbWF0Y2ggaWYgdGhpcyBvcHRpb24gaXMKLSAgICAgICBzZXQuIElmIHRoZXJlIGFyZSBhbHRlcm5hdGl2ZXMgaW4gdGhlIHBhdHRlcm4sIHRoZXkgYXJlIHRyaWVkLiAgSWYgIGFsbAotICAgICAgIHRoZSAgYWx0ZXJuYXRpdmVzICBtYXRjaCAgdGhlIGVtcHR5IHN0cmluZywgdGhlIGVudGlyZSBtYXRjaCBmYWlscy4gRm9yCisgICAgICAgc2V0LiAgSWYgIHRoZXJlIGFyZSBhbHRlcm5hdGl2ZXMgaW4gdGhlIHBhdHRlcm4sIHRoZXkgYXJlIHRyaWVkLiBJZiBhbGwKKyAgICAgICB0aGUgYWx0ZXJuYXRpdmVzIG1hdGNoIHRoZSBlbXB0eSBzdHJpbmcsIHRoZSBlbnRpcmUgIG1hdGNoICBmYWlscy4gIEZvcgogICAgICAgIGV4YW1wbGUsIGlmIHRoZSBwYXR0ZXJuCiAKICAgICAgICAgIGE/Yj8KIAotICAgICAgIGlzIGFwcGxpZWQgdG8gYSBzdHJpbmcgbm90IGJlZ2lubmluZyB3aXRoICJhIiBvciAgImIiLCAgaXQgIG1hdGNoZXMgIGFuCisgICAgICAgaXMgIGFwcGxpZWQgIHRvICBhICBzdHJpbmcgbm90IGJlZ2lubmluZyB3aXRoICJhIiBvciAiYiIsIGl0IG1hdGNoZXMgYW4KICAgICAgICBlbXB0eSBzdHJpbmcgYXQgdGhlIHN0YXJ0IG9mIHRoZSBzdWJqZWN0LiBXaXRoIFBDUkUyX05PVEVNUFRZIHNldCwgdGhpcwotICAgICAgIG1hdGNoIGlzIG5vdCB2YWxpZCwgc28gcGNyZTJfbWF0Y2goKSBzZWFyY2hlcyBmdXJ0aGVyIGludG8gIHRoZSAgc3RyaW5nCisgICAgICAgbWF0Y2ggIGlzICBub3QgdmFsaWQsIHNvIHBjcmUyX21hdGNoKCkgc2VhcmNoZXMgZnVydGhlciBpbnRvIHRoZSBzdHJpbmcKICAgICAgICBmb3Igb2NjdXJyZW5jZXMgb2YgImEiIG9yICJiIi4KIAogICAgICAgICAgUENSRTJfTk9URU1QVFlfQVRTVEFSVAogCi0gICAgICAgVGhpcyAgaXMgIGxpa2UgUENSRTJfTk9URU1QVFksIGV4Y2VwdCB0aGF0IGl0IGxvY2tzIG91dCBhbiBlbXB0eSBzdHJpbmcKKyAgICAgICBUaGlzIGlzIGxpa2UgUENSRTJfTk9URU1QVFksIGV4Y2VwdCB0aGF0IGl0IGxvY2tzIG91dCBhbiAgZW1wdHkgIHN0cmluZwogICAgICAgIG1hdGNoIG9ubHkgYXQgdGhlIGZpcnN0IG1hdGNoaW5nIHBvc2l0aW9uLCB0aGF0IGlzLCBhdCB0aGUgc3RhcnQgb2YgdGhlCi0gICAgICAgc3ViamVjdCAgcGx1cyAgdGhlICBzdGFydGluZyBvZmZzZXQuIEFuIGVtcHR5IHN0cmluZyBtYXRjaCBsYXRlciBpbiB0aGUKLSAgICAgICBzdWJqZWN0IGlzIHBlcm1pdHRlZC4gIElmIHRoZSBwYXR0ZXJuIGlzIGFuY2hvcmVkLCAgc3VjaCAgYSAgbWF0Y2ggIGNhbgorICAgICAgIHN1YmplY3QgcGx1cyB0aGUgc3RhcnRpbmcgb2Zmc2V0LiBBbiBlbXB0eSBzdHJpbmcgbWF0Y2ggIGxhdGVyICBpbiAgdGhlCisgICAgICAgc3ViamVjdCAgaXMgIHBlcm1pdHRlZC4gICBJZiAgdGhlIHBhdHRlcm4gaXMgYW5jaG9yZWQsIHN1Y2ggYSBtYXRjaCBjYW4KICAgICAgICBvY2N1ciBvbmx5IGlmIHRoZSBwYXR0ZXJuIGNvbnRhaW5zIFxLLgogCisgICAgICAgICBQQ1JFMl9OT19KSVQKKworICAgICAgIEJ5ICBkZWZhdWx0LCAgaWYgIGEgIHBhdHRlcm4gIGhhcyAgYmVlbiAgIHN1Y2Nlc3NmdWxseSAgIHByb2Nlc3NlZCAgIGJ5CisgICAgICAgcGNyZTJfaml0X2NvbXBpbGUoKSwgIEpJVCAgaXMgIGF1dG9tYXRpY2FsbHkgdXNlZCB3aGVuIHBjcmUyX21hdGNoKCkgaXMKKyAgICAgICBjYWxsZWQgd2l0aCBvcHRpb25zIHRoYXQgSklUIHN1cHBvcnRzLiAgU2V0dGluZyAgUENSRTJfTk9fSklUICBkaXNhYmxlcworICAgICAgIHRoZSB1c2Ugb2YgSklUOyBpdCBmb3JjZXMgbWF0Y2hpbmcgdG8gYmUgZG9uZSBieSB0aGUgaW50ZXJwcmV0ZXIuCisKICAgICAgICAgIFBDUkUyX05PX1VURl9DSEVDSwogCiAgICAgICAgV2hlbiBQQ1JFMl9VVEYgaXMgc2V0IGF0IGNvbXBpbGUgdGltZSwgdGhlIHZhbGlkaXR5IG9mIHRoZSBzdWJqZWN0IGFzIGEKQEAgLTIzMjIsMTMgKzIzOTUsMTQgQEAKIEVSUk9SIFJFVFVSTlMgRlJPTSBwY3JlMl9tYXRjaCgpCiAKICAgICAgICBJZiAgcGNyZTJfbWF0Y2goKSBmYWlscywgaXQgcmV0dXJucyBhIG5lZ2F0aXZlIG51bWJlci4gVGhpcyBjYW4gYmUgY29uLQotICAgICAgIHZlcnRlZCB0byBhIHRleHQgc3RyaW5nIGJ5IGNhbGxpbmcgcGNyZTJfZ2V0X2Vycm9yX21lc3NhZ2UoKS4gIE5lZ2F0aXZlCi0gICAgICAgZXJyb3IgIGNvZGVzICBhcmUgIGFsc28gcmV0dXJuZWQgYnkgb3RoZXIgZnVuY3Rpb25zLCBhbmQgYXJlIGRvY3VtZW50ZWQKLSAgICAgICB3aXRoIHRoZW0uICBUaGUgY29kZXMgYXJlIGdpdmVuIG5hbWVzIGluIHRoZSBoZWFkZXIgZmlsZS4gSWYgVVRGIGNoZWNrLQotICAgICAgIGluZyBpcyBpbiBmb3JjZSBhbmQgYW4gaW52YWxpZCBVVEYgc3ViamVjdCBzdHJpbmcgaXMgZGV0ZWN0ZWQsIG9uZSBvZiBhCi0gICAgICAgbnVtYmVyIG9mIFVURi1zcGVjaWZpYyBuZWdhdGl2ZSBlcnJvciBjb2RlcyBpcyAgcmV0dXJuZWQuICBEZXRhaWxzICBhcmUKLSAgICAgICBnaXZlbiBpbiB0aGUgcGNyZTJ1bmljb2RlIHBhZ2UuIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSBvdGhlciBlcnJvcnMgdGhhdAotICAgICAgIG1heSBiZSByZXR1cm5lZCBieSBwY3JlMl9tYXRjaCgpOgorICAgICAgIHZlcnRlZCB0byBhIHRleHQgc3RyaW5nIGJ5IGNhbGxpbmcgdGhlIHBjcmUyX2dldF9lcnJvcl9tZXNzYWdlKCkgIGZ1bmMtCisgICAgICAgdGlvbiAgKHNlZSAgIk9idGFpbmluZyBhIHRleHR1YWwgZXJyb3IgbWVzc2FnZSIgYmVsb3cpLiAgTmVnYXRpdmUgZXJyb3IKKyAgICAgICBjb2RlcyBhcmUgYWxzbyByZXR1cm5lZCBieSBvdGhlciBmdW5jdGlvbnMsICBhbmQgIGFyZSAgZG9jdW1lbnRlZCAgd2l0aAorICAgICAgIHRoZW0uICBUaGUgY29kZXMgYXJlIGdpdmVuIG5hbWVzIGluIHRoZSBoZWFkZXIgZmlsZS4gSWYgVVRGIGNoZWNraW5nIGlzCisgICAgICAgaW4gZm9yY2UgYW5kIGFuIGludmFsaWQgVVRGIHN1YmplY3Qgc3RyaW5nIGlzIGRldGVjdGVkLCBvbmUgb2YgYSBudW1iZXIKKyAgICAgICBvZiAgVVRGLXNwZWNpZmljIG5lZ2F0aXZlIGVycm9yIGNvZGVzIGlzIHJldHVybmVkLiBEZXRhaWxzIGFyZSBnaXZlbiBpbgorICAgICAgIHRoZSBwY3JlMnVuaWNvZGUgcGFnZS4gVGhlIGZvbGxvd2luZyBhcmUgdGhlIG90aGVyIGVycm9ycyB0aGF0ICBtYXkgIGJlCisgICAgICAgcmV0dXJuZWQgYnkgcGNyZTJfbWF0Y2goKToKIAogICAgICAgICAgUENSRTJfRVJST1JfTk9NQVRDSAogCkBAIC0yMzM2LDE5ICsyNDEwLDE5IEBACiAKICAgICAgICAgIFBDUkUyX0VSUk9SX1BBUlRJQUwKIAotICAgICAgIFRoZSBzdWJqZWN0IHN0cmluZyBkaWQgbm90IG1hdGNoLCBidXQgaXQgZGlkIG1hdGNoIHBhcnRpYWxseS4gIFNlZSAgdGhlCisgICAgICAgVGhlICBzdWJqZWN0ICBzdHJpbmcgZGlkIG5vdCBtYXRjaCwgYnV0IGl0IGRpZCBtYXRjaCBwYXJ0aWFsbHkuIFNlZSB0aGUKICAgICAgICBwY3JlMnBhcnRpYWwgZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscyBvZiBwYXJ0aWFsIG1hdGNoaW5nLgogCiAgICAgICAgICBQQ1JFMl9FUlJPUl9CQURNQUdJQwogCiAgICAgICAgUENSRTIgc3RvcmVzIGEgNC1ieXRlICJtYWdpYyBudW1iZXIiIGF0IHRoZSBzdGFydCBvZiB0aGUgY29tcGlsZWQgY29kZSwKLSAgICAgICB0byBjYXRjaCB0aGUgY2FzZSB3aGVuIGl0IGlzIHBhc3NlZCBhIGp1bmsgcG9pbnRlci4gVGhpcyBpcyAgdGhlICBlcnJvcgorICAgICAgIHRvICBjYXRjaCAgdGhlIGNhc2Ugd2hlbiBpdCBpcyBwYXNzZWQgYSBqdW5rIHBvaW50ZXIuIFRoaXMgaXMgdGhlIGVycm9yCiAgICAgICAgdGhhdCBpcyByZXR1cm5lZCB3aGVuIHRoZSBtYWdpYyBudW1iZXIgaXMgbm90IHByZXNlbnQuCiAKICAgICAgICAgIFBDUkUyX0VSUk9SX0JBRE1PREUKIAotICAgICAgIFRoaXMgIGVycm9yICBpcyAgZ2l2ZW4gIHdoZW4gIGEgIHBhdHRlcm4gdGhhdCB3YXMgY29tcGlsZWQgYnkgdGhlIDgtYml0Ci0gICAgICAgbGlicmFyeSBpcyBwYXNzZWQgdG8gYSAxNi1iaXQgIG9yICAzMi1iaXQgIGxpYnJhcnkgIGZ1bmN0aW9uLCAgb3IgIHZpY2UKKyAgICAgICBUaGlzIGVycm9yIGlzIGdpdmVuIHdoZW4gYSBwYXR0ZXJuICB0aGF0ICB3YXMgIGNvbXBpbGVkICBieSAgdGhlICA4LWJpdAorICAgICAgIGxpYnJhcnkgIGlzICBwYXNzZWQgIHRvICBhICAxNi1iaXQgIG9yIDMyLWJpdCBsaWJyYXJ5IGZ1bmN0aW9uLCBvciB2aWNlCiAgICAgICAgdmVyc2EuCiAKICAgICAgICAgIFBDUkUyX0VSUk9SX0JBRE9GRlNFVApAQCAtMjM2MiwzNSArMjQzNiwzNSBAQAogICAgICAgICAgUENSRTJfRVJST1JfQkFEVVRGT0ZGU0VUCiAKICAgICAgICBUaGUgVVRGIGNvZGUgdW5pdCBzZXF1ZW5jZSB0aGF0IHdhcyBwYXNzZWQgYXMgYSBzdWJqZWN0IHdhcyBjaGVja2VkIGFuZAotICAgICAgIGZvdW5kIHRvIGJlIHZhbGlkICh0aGUgUENSRTJfTk9fVVRGX0NIRUNLIG9wdGlvbiB3YXMgbm90IHNldCksIGJ1dCAgdGhlCi0gICAgICAgdmFsdWUgIG9mIHN0YXJ0b2Zmc2V0IGRpZCBub3QgcG9pbnQgdG8gdGhlIGJlZ2lubmluZyBvZiBhIFVURiBjaGFyYWN0ZXIKKyAgICAgICBmb3VuZCAgdG8gYmUgdmFsaWQgKHRoZSBQQ1JFMl9OT19VVEZfQ0hFQ0sgb3B0aW9uIHdhcyBub3Qgc2V0KSwgYnV0IHRoZQorICAgICAgIHZhbHVlIG9mIHN0YXJ0b2Zmc2V0IGRpZCBub3QgcG9pbnQgdG8gdGhlIGJlZ2lubmluZyBvZiBhIFVURiAgY2hhcmFjdGVyCiAgICAgICAgb3IgdGhlIGVuZCBvZiB0aGUgc3ViamVjdC4KIAogICAgICAgICAgUENSRTJfRVJST1JfQ0FMTE9VVAogCi0gICAgICAgVGhpcyBlcnJvciBpcyBuZXZlciBnZW5lcmF0ZWQgYnkgcGNyZTJfbWF0Y2goKSBpdHNlbGYuIEl0ICBpcyAgcHJvdmlkZWQKLSAgICAgICBmb3IgIHVzZSAgYnkgIGNhbGxvdXQgIGZ1bmN0aW9ucyAgdGhhdCAgd2FudCAgdG8gY2F1c2UgcGNyZTJfbWF0Y2goKSBvcgotICAgICAgIHBjcmUyX2NhbGxvdXRfZW51bWVyYXRlKCkgdG8gcmV0dXJuIGEgZGlzdGluY3RpdmUgZXJyb3IgY29kZS4gIFNlZSAgdGhlCisgICAgICAgVGhpcyAgZXJyb3IgIGlzIG5ldmVyIGdlbmVyYXRlZCBieSBwY3JlMl9tYXRjaCgpIGl0c2VsZi4gSXQgaXMgcHJvdmlkZWQKKyAgICAgICBmb3IgdXNlIGJ5IGNhbGxvdXQgIGZ1bmN0aW9ucyAgdGhhdCAgd2FudCAgdG8gIGNhdXNlICBwY3JlMl9tYXRjaCgpICBvcgorICAgICAgIHBjcmUyX2NhbGxvdXRfZW51bWVyYXRlKCkgIHRvICByZXR1cm4gYSBkaXN0aW5jdGl2ZSBlcnJvciBjb2RlLiBTZWUgdGhlCiAgICAgICAgcGNyZTJjYWxsb3V0IGRvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuCiAKICAgICAgICAgIFBDUkUyX0VSUk9SX0lOVEVSTkFMCiAKLSAgICAgICBBbiAgdW5leHBlY3RlZCAgaW50ZXJuYWwgZXJyb3IgaGFzIG9jY3VycmVkLiBUaGlzIGVycm9yIGNvdWxkIGJlIGNhdXNlZAorICAgICAgIEFuIHVuZXhwZWN0ZWQgaW50ZXJuYWwgZXJyb3IgaGFzIG9jY3VycmVkLiBUaGlzIGVycm9yIGNvdWxkICBiZSAgY2F1c2VkCiAgICAgICAgYnkgYSBidWcgaW4gUENSRTIgb3IgYnkgb3ZlcndyaXRpbmcgb2YgdGhlIGNvbXBpbGVkIHBhdHRlcm4uCiAKICAgICAgICAgIFBDUkUyX0VSUk9SX0pJVF9CQURPUFRJT04KIAotICAgICAgIFRoaXMgZXJyb3IgaXMgcmV0dXJuZWQgd2hlbiBhIHBhdHRlcm4gIHRoYXQgIHdhcyAgc3VjY2Vzc2Z1bGx5ICBzdHVkaWVkCi0gICAgICAgdXNpbmcgIEpJVCBpcyBiZWluZyBtYXRjaGVkLCBidXQgdGhlIG1hdGNoaW5nIG1vZGUgKHBhcnRpYWwgb3IgY29tcGxldGUKLSAgICAgICBtYXRjaCkgZG9lcyBub3QgY29ycmVzcG9uZCB0byBhbnkgSklUIGNvbXBpbGF0aW9uIG1vZGUuICBXaGVuICB0aGUgIEpJVAotICAgICAgIGZhc3QgIHBhdGggIGZ1bmN0aW9uICBpcyB1c2VkLCB0aGlzIGVycm9yIG1heSBiZSBhbHNvIGdpdmVuIGZvciBpbnZhbGlkCisgICAgICAgVGhpcyAgZXJyb3IgIGlzICByZXR1cm5lZCAgd2hlbiBhIHBhdHRlcm4gdGhhdCB3YXMgc3VjY2Vzc2Z1bGx5IHN0dWRpZWQKKyAgICAgICB1c2luZyBKSVQgaXMgYmVpbmcgbWF0Y2hlZCwgYnV0IHRoZSBtYXRjaGluZyBtb2RlIChwYXJ0aWFsIG9yICBjb21wbGV0ZQorICAgICAgIG1hdGNoKSAgZG9lcyAgbm90ICBjb3JyZXNwb25kIHRvIGFueSBKSVQgY29tcGlsYXRpb24gbW9kZS4gV2hlbiB0aGUgSklUCisgICAgICAgZmFzdCBwYXRoIGZ1bmN0aW9uIGlzIHVzZWQsIHRoaXMgZXJyb3IgbWF5IGJlIGFsc28gIGdpdmVuICBmb3IgIGludmFsaWQKICAgICAgICBvcHRpb25zLiBTZWUgdGhlIHBjcmUyaml0IGRvY3VtZW50YXRpb24gZm9yIG1vcmUgZGV0YWlscy4KIAogICAgICAgICAgUENSRTJfRVJST1JfSklUX1NUQUNLTElNSVQKIAotICAgICAgIFRoaXMgZXJyb3IgaXMgcmV0dXJuZWQgd2hlbiBhIHBhdHRlcm4gIHRoYXQgIHdhcyAgc3VjY2Vzc2Z1bGx5ICBzdHVkaWVkCi0gICAgICAgdXNpbmcgIEpJVCAgaXMgYmVpbmcgbWF0Y2hlZCwgYnV0IHRoZSBtZW1vcnkgYXZhaWxhYmxlIGZvciB0aGUganVzdC1pbi0KLSAgICAgICB0aW1lIHByb2Nlc3Npbmcgc3RhY2sgaXMgbm90IGxhcmdlIGVub3VnaC4gU2VlIHRoZSBwY3JlMmppdCAgZG9jdW1lbnRhLQorICAgICAgIFRoaXMgIGVycm9yICBpcyAgcmV0dXJuZWQgIHdoZW4gYSBwYXR0ZXJuIHRoYXQgd2FzIHN1Y2Nlc3NmdWxseSBzdHVkaWVkCisgICAgICAgdXNpbmcgSklUIGlzIGJlaW5nIG1hdGNoZWQsIGJ1dCB0aGUgbWVtb3J5IGF2YWlsYWJsZSBmb3IgIHRoZSAganVzdC1pbi0KKyAgICAgICB0aW1lICBwcm9jZXNzaW5nIHN0YWNrIGlzIG5vdCBsYXJnZSBlbm91Z2guIFNlZSB0aGUgcGNyZTJqaXQgZG9jdW1lbnRhLQogICAgICAgIHRpb24gZm9yIG1vcmUgZGV0YWlscy4KIAogICAgICAgICAgUENSRTJfRVJST1JfTUFUQ0hMSU1JVApAQCAtMjM5OSwxMCArMjQ3MywxMCBAQAogCiAgICAgICAgICBQQ1JFMl9FUlJPUl9OT01FTU9SWQogCi0gICAgICAgSWYgIGEgIHBhdHRlcm4gIGNvbnRhaW5zICBiYWNrICByZWZlcmVuY2VzLCAgYnV0IHRoZSBvdmVjdG9yIGlzIG5vdCBiaWcKLSAgICAgICBlbm91Z2ggdG8gcmVtZW1iZXIgdGhlIHJlZmVyZW5jZWQgc3Vic3RyaW5ncywgUENSRTIgIGdldHMgIGEgIGJsb2NrICBvZgorICAgICAgIElmIGEgcGF0dGVybiBjb250YWlucyBiYWNrIHJlZmVyZW5jZXMsICBidXQgIHRoZSAgb3ZlY3RvciAgaXMgIG5vdCAgYmlnCisgICAgICAgZW5vdWdoICB0byAgcmVtZW1iZXIgIHRoZSAgcmVmZXJlbmNlZCBzdWJzdHJpbmdzLCBQQ1JFMiBnZXRzIGEgYmxvY2sgb2YKICAgICAgICBtZW1vcnkgYXQgdGhlIHN0YXJ0IG9mIG1hdGNoaW5nIHRvIHVzZSBmb3IgdGhpcyBwdXJwb3NlLiBUaGVyZSBhcmUgc29tZQotICAgICAgIG90aGVyIHNwZWNpYWwgY2FzZXMgd2hlcmUgZXh0cmEgbWVtb3J5IGlzIG5lZWRlZCBkdXJpbmcgbWF0Y2hpbmcuICBUaGlzCisgICAgICAgb3RoZXIgIHNwZWNpYWwgY2FzZXMgd2hlcmUgZXh0cmEgbWVtb3J5IGlzIG5lZWRlZCBkdXJpbmcgbWF0Y2hpbmcuIFRoaXMKICAgICAgICBlcnJvciBpcyBnaXZlbiB3aGVuIG1lbW9yeSBjYW5ub3QgYmUgb2J0YWluZWQuCiAKICAgICAgICAgIFBDUkUyX0VSUk9SX05VTEwKQEAgLTI0MTEsMTIgKzI0ODUsMTIgQEAKIAogICAgICAgICAgUENSRTJfRVJST1JfUkVDVVJTRUxPT1AKIAotICAgICAgIFRoaXMgIGVycm9yICBpcyAgcmV0dXJuZWQgIHdoZW4gIHBjcmUyX21hdGNoKCkgZGV0ZWN0cyBhIHJlY3Vyc2lvbiBsb29wCi0gICAgICAgd2l0aGluIHRoZSBwYXR0ZXJuLiBTcGVjaWZpY2FsbHksIGl0IG1lYW5zIHRoYXQgZWl0aGVyIHRoZSAgd2hvbGUgIHBhdC0KKyAgICAgICBUaGlzIGVycm9yIGlzIHJldHVybmVkIHdoZW4gIHBjcmUyX21hdGNoKCkgIGRldGVjdHMgIGEgIHJlY3Vyc2lvbiAgbG9vcAorICAgICAgIHdpdGhpbiAgdGhlICBwYXR0ZXJuLiBTcGVjaWZpY2FsbHksIGl0IG1lYW5zIHRoYXQgZWl0aGVyIHRoZSB3aG9sZSBwYXQtCiAgICAgICAgdGVybiBvciBhIHN1YnBhdHRlcm4gaGFzIGJlZW4gY2FsbGVkIHJlY3Vyc2l2ZWx5IGZvciB0aGUgc2Vjb25kIHRpbWUgYXQKLSAgICAgICB0aGUgc2FtZSBwb3NpdGlvbiBpbiB0aGUgc3ViamVjdCAgc3RyaW5nLiAgU29tZSAgc2ltcGxlICBwYXR0ZXJucyAgdGhhdAotICAgICAgIG1pZ2h0ICBkbyAgdGhpcyBhcmUgZGV0ZWN0ZWQgYW5kIGZhdWx0ZWQgYXQgY29tcGlsZSB0aW1lLCBidXQgbW9yZSBjb20tCi0gICAgICAgcGxpY2F0ZWQgY2FzZXMsIGluIHBhcnRpY3VsYXIgbXV0dWFsIHJlY3Vyc2lvbnMgYmV0d2VlbiAgdHdvICBkaWZmZXJlbnQKKyAgICAgICB0aGUgIHNhbWUgIHBvc2l0aW9uICBpbiAgdGhlICBzdWJqZWN0IHN0cmluZy4gU29tZSBzaW1wbGUgcGF0dGVybnMgdGhhdAorICAgICAgIG1pZ2h0IGRvIHRoaXMgYXJlIGRldGVjdGVkIGFuZCBmYXVsdGVkIGF0IGNvbXBpbGUgdGltZSwgYnV0ICBtb3JlICBjb20tCisgICAgICAgcGxpY2F0ZWQgIGNhc2VzLCAgaW4gcGFydGljdWxhciBtdXR1YWwgcmVjdXJzaW9ucyBiZXR3ZWVuIHR3byBkaWZmZXJlbnQKICAgICAgICBzdWJwYXR0ZXJucywgY2Fubm90IGJlIGRldGVjdGVkIHVudGlsIG1hdGNoaW5nIGlzIGF0dGVtcHRlZC4KIAogICAgICAgICAgUENSRTJfRVJST1JfUkVDVVJTSU9OTElNSVQKQEAgLTI0MjQsNiArMjQ5OCwyNyBAQAogICAgICAgIFRoZSBpbnRlcm5hbCByZWN1cnNpb24gbGltaXQgd2FzIHJlYWNoZWQuCiAKIAorT0JUQUlOSU5HIEEgVEVYVFVBTCBFUlJPUiBNRVNTQUdFCisKKyAgICAgICBpbnQgcGNyZTJfZ2V0X2Vycm9yX21lc3NhZ2UoaW50IGVycm9yY29kZSwgUENSRTJfVUNIQVIgKmJ1ZmZlciwKKyAgICAgICAgIFBDUkUyX1NJWkUgYnVmZmxlbik7CisKKyAgICAgICBBIHRleHQgbWVzc2FnZSBmb3IgYW4gZXJyb3IgY29kZSAgZnJvbSAgYW55ICBQQ1JFMiAgZnVuY3Rpb24gIChjb21waWxlLAorICAgICAgIG1hdGNoLCAgb3IgIGF1eGlsaWFyeSkgIGNhbiBiZSBvYnRhaW5lZCBieSBjYWxsaW5nIHBjcmUyX2dldF9lcnJvcl9tZXMtCisgICAgICAgc2FnZSgpLiBUaGUgY29kZSBpcyBwYXNzZWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50LCAgd2l0aCAgdGhlICByZW1haW5pbmcKKyAgICAgICB0d28gIGFyZ3VtZW50cyBzcGVjaWZ5aW5nIGEgY29kZSB1bml0IGJ1ZmZlciBhbmQgaXRzIGxlbmd0aCwgaW50byB3aGljaAorICAgICAgIHRoZSB0ZXh0IG1lc3NhZ2UgaXMgcGxhY2VkLiBOb3RlIHRoYXQgdGhlIG1lc3NhZ2UgaXMgcmV0dXJuZWQgIGluICBjb2RlCisgICAgICAgdW5pdHMgb2YgdGhlIGFwcHJvcHJpYXRlIHdpZHRoIGZvciB0aGUgbGlicmFyeSB0aGF0IGlzIGJlaW5nIHVzZWQuCisKKyAgICAgICBUaGUgIHJldHVybmVkIG1lc3NhZ2UgaXMgdGVybWluYXRlZCB3aXRoIGEgdHJhaWxpbmcgemVybywgYW5kIHRoZSBmdW5jLQorICAgICAgIHRpb24gcmV0dXJucyB0aGUgbnVtYmVyIG9mIGNvZGUgIHVuaXRzICB1c2VkLCAgZXhjbHVkaW5nICB0aGUgIHRyYWlsaW5nCisgICAgICAgemVyby4gIElmICB0aGUgIGVycm9yICBudW1iZXIgIGlzICB1bmtub3duLCAgdGhlICBuZWdhdGl2ZSAgZXJyb3IgIGNvZGUKKyAgICAgICBQQ1JFMl9FUlJPUl9CQUREQVRBIGlzIHJldHVybmVkLiBJZiB0aGUgYnVmZmVyIGlzIHRvbyBzbWFsbCwgIHRoZSAgbWVzLQorICAgICAgIHNhZ2UgIGlzICB0cnVuY2F0ZWQgIChidXQgc3RpbGwgd2l0aCBhIHRyYWlsaW5nIHplcm8pLCBhbmQgdGhlIG5lZ2F0aXZlCisgICAgICAgZXJyb3IgY29kZSBQQ1JFMl9FUlJPUl9OT01FTU9SWSBpcyByZXR1cm5lZC4gIE5vbmUgb2YgdGhlIG1lc3NhZ2VzICBhcmUKKyAgICAgICB2ZXJ5IGxvbmc7IGEgYnVmZmVyIHNpemUgb2YgMTIwIGNvZGUgdW5pdHMgaXMgYW1wbGUuCisKKwogRVhUUkFDVElORyBDQVBUVVJFRCBTVUJTVFJJTkdTIEJZIE5VTUJFUgogCiAgICAgICAgaW50IHBjcmUyX3N1YnN0cmluZ19sZW5ndGhfYnludW1iZXIocGNyZTJfbWF0Y2hfZGF0YSAqbWF0Y2hfZGF0YSwKQEAgLTI3OTQsNyArMjg4OSw4IEBACiAgICAgICAgdXNlZCBpbiBhbiBhc3NlcnRpb24pLgogCiAgICAgICAgQXMgZm9yIGFsbCBQQ1JFMiBlcnJvcnMsIGEgdGV4dCBtZXNzYWdlIHRoYXQgZGVzY3JpYmVzIHRoZSBlcnJvciBjYW4gYmUKLSAgICAgICBvYnRhaW5lZCBieSBjYWxsaW5nIHBjcmUyX2dldF9lcnJvcl9tZXNzYWdlKCkuCisgICAgICAgb2J0YWluZWQgIGJ5ICBjYWxsaW5nICB0aGUgIHBjcmUyX2dldF9lcnJvcl9tZXNzYWdlKCkgICBmdW5jdGlvbiAgIChzZWUKKyAgICAgICAiT2J0YWluaW5nIGEgdGV4dHVhbCBlcnJvciBtZXNzYWdlIiBhYm92ZSkuCiAKIAogRFVQTElDQVRFIFNVQlBBVFRFUk4gTkFNRVMKQEAgLTI4MDIsNTYgKzI4OTgsNTYgQEAKICAgICAgICBpbnQgcGNyZTJfc3Vic3RyaW5nX25hbWV0YWJsZV9zY2FuKGNvbnN0IHBjcmUyX2NvZGUgKmNvZGUsCiAgICAgICAgICBQQ1JFMl9TUFRSIG5hbWUsIFBDUkUyX1NQVFIgKmZpcnN0LCBQQ1JFMl9TUFRSICpsYXN0KTsKIAotICAgICAgIFdoZW4gYSBwYXR0ZXJuIGlzIGNvbXBpbGVkIHdpdGggdGhlIFBDUkUyX0RVUE5BTUVTICBvcHRpb24sICBuYW1lcyAgZm9yCi0gICAgICAgc3VicGF0dGVybnMgIGFyZSAgbm90IHJlcXVpcmVkIHRvIGJlIHVuaXF1ZS4gRHVwbGljYXRlIG5hbWVzIGFyZSBhbHdheXMKLSAgICAgICBhbGxvd2VkIGZvciBzdWJwYXR0ZXJucyB3aXRoIHRoZSBzYW1lIG51bWJlciwgY3JlYXRlZCBieSB1c2luZyB0aGUgICg/fAotICAgICAgIGZlYXR1cmUuICBJbmRlZWQsICBpZiAgc3VjaCBzdWJwYXR0ZXJucyBhcmUgbmFtZWQsIHRoZXkgYXJlIHJlcXVpcmVkIHRvCisgICAgICAgV2hlbiAgYSAgcGF0dGVybiAgaXMgY29tcGlsZWQgd2l0aCB0aGUgUENSRTJfRFVQTkFNRVMgb3B0aW9uLCBuYW1lcyBmb3IKKyAgICAgICBzdWJwYXR0ZXJucyBhcmUgbm90IHJlcXVpcmVkIHRvIGJlIHVuaXF1ZS4gRHVwbGljYXRlIG5hbWVzICBhcmUgIGFsd2F5cworICAgICAgIGFsbG93ZWQgIGZvciBzdWJwYXR0ZXJucyB3aXRoIHRoZSBzYW1lIG51bWJlciwgY3JlYXRlZCBieSB1c2luZyB0aGUgKD98CisgICAgICAgZmVhdHVyZS4gSW5kZWVkLCBpZiBzdWNoIHN1YnBhdHRlcm5zIGFyZSBuYW1lZCwgdGhleSAgYXJlICByZXF1aXJlZCAgdG8KICAgICAgICB1c2UgdGhlIHNhbWUgbmFtZXMuCiAKICAgICAgICBOb3JtYWxseSwgcGF0dGVybnMgd2l0aCBkdXBsaWNhdGUgbmFtZXMgYXJlIHN1Y2ggdGhhdCBpbiBhbnkgb25lIG1hdGNoLAotICAgICAgIG9ubHkgIG9uZSBvZiB0aGUgbmFtZWQgc3VicGF0dGVybnMgcGFydGljaXBhdGVzLiBBbiBleGFtcGxlIGlzIHNob3duIGluCisgICAgICAgb25seSBvbmUgb2YgdGhlIG5hbWVkIHN1YnBhdHRlcm5zIHBhcnRpY2lwYXRlcy4gQW4gZXhhbXBsZSBpcyBzaG93biAgaW4KICAgICAgICB0aGUgcGNyZTJwYXR0ZXJuIGRvY3VtZW50YXRpb24uCiAKLSAgICAgICBXaGVuICBkdXBsaWNhdGVzICAgYXJlICAgcHJlc2VudCwgICBwY3JlMl9zdWJzdHJpbmdfY29weV9ieW5hbWUoKSAgIGFuZAotICAgICAgIHBjcmUyX3N1YnN0cmluZ19nZXRfYnluYW1lKCkgIHJldHVybiAgdGhlIGZpcnN0IHN1YnN0cmluZyBjb3JyZXNwb25kaW5nCi0gICAgICAgdG8gIHRoZSAgZ2l2ZW4gIG5hbWUgIHRoYXQgIGlzICBzZXQuICBPbmx5ICAgaWYgICBub25lICAgYXJlICAgc2V0ICAgaXMKLSAgICAgICBQQ1JFMl9FUlJPUl9VTlNFVCAgaXMgIHJldHVybmVkLiBUaGUgcGNyZTJfc3Vic3RyaW5nX251bWJlcl9mcm9tX25hbWUoKQorICAgICAgIFdoZW4gICBkdXBsaWNhdGVzICAgYXJlICAgcHJlc2VudCwgICBwY3JlMl9zdWJzdHJpbmdfY29weV9ieW5hbWUoKSAgYW5kCisgICAgICAgcGNyZTJfc3Vic3RyaW5nX2dldF9ieW5hbWUoKSByZXR1cm4gdGhlIGZpcnN0ICBzdWJzdHJpbmcgIGNvcnJlc3BvbmRpbmcKKyAgICAgICB0byAgIHRoZSAgIGdpdmVuICAgbmFtZSAgIHRoYXQgICBpcyAgc2V0LiAgT25seSAgaWYgIG5vbmUgIGFyZSAgc2V0ICBpcworICAgICAgIFBDUkUyX0VSUk9SX1VOU0VUIGlzIHJldHVybmVkLiAgVGhlICBwY3JlMl9zdWJzdHJpbmdfbnVtYmVyX2Zyb21fbmFtZSgpCiAgICAgICAgZnVuY3Rpb24gcmV0dXJucyB0aGUgZXJyb3IgUENSRTJfRVJST1JfTk9VTklRVUVTVUJTVFJJTkcgd2hlbiB0aGVyZSBhcmUKICAgICAgICBkdXBsaWNhdGUgbmFtZXMuCiAKLSAgICAgICBJZiAgeW91IHdhbnQgdG8gZ2V0IGZ1bGwgZGV0YWlscyBvZiBhbGwgY2FwdHVyZWQgc3Vic3RyaW5ncyBmb3IgYSBnaXZlbgotICAgICAgIG5hbWUsIHlvdSBtdXN0IHVzZSB0aGUgcGNyZTJfc3Vic3RyaW5nX25hbWV0YWJsZV9zY2FuKCkgIGZ1bmN0aW9uLiAgVGhlCi0gICAgICAgZmlyc3QgIGFyZ3VtZW50IGlzIHRoZSBjb21waWxlZCBwYXR0ZXJuLCBhbmQgdGhlIHNlY29uZCBpcyB0aGUgbmFtZS4gSWYKLSAgICAgICB0aGUgdGhpcmQgYW5kIGZvdXJ0aCBhcmd1bWVudHMgYXJlIE5VTEwsIHRoZSBmdW5jdGlvbiByZXR1cm5zICBhICBncm91cAorICAgICAgIElmIHlvdSB3YW50IHRvIGdldCBmdWxsIGRldGFpbHMgb2YgYWxsIGNhcHR1cmVkIHN1YnN0cmluZ3MgZm9yIGEgIGdpdmVuCisgICAgICAgbmFtZSwgIHlvdSAgbXVzdCB1c2UgdGhlIHBjcmUyX3N1YnN0cmluZ19uYW1ldGFibGVfc2NhbigpIGZ1bmN0aW9uLiBUaGUKKyAgICAgICBmaXJzdCBhcmd1bWVudCBpcyB0aGUgY29tcGlsZWQgcGF0dGVybiwgYW5kIHRoZSBzZWNvbmQgaXMgdGhlIG5hbWUuICBJZgorICAgICAgIHRoZSAgdGhpcmQgIGFuZCBmb3VydGggYXJndW1lbnRzIGFyZSBOVUxMLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIGdyb3VwCiAgICAgICAgbnVtYmVyIGZvciBhIHVuaXF1ZSBuYW1lLCBvciBQQ1JFMl9FUlJPUl9OT1VOSVFVRVNVQlNUUklORyBvdGhlcndpc2UuCiAKICAgICAgICBXaGVuIHRoZSB0aGlyZCBhbmQgZm91cnRoIGFyZ3VtZW50cyBhcmUgbm90IE5VTEwsIHRoZXkgbXVzdCBiZSBwb2ludGVycwotICAgICAgIHRvIHZhcmlhYmxlcyB0aGF0IGFyZSB1cGRhdGVkIGJ5IHRoZSBmdW5jdGlvbi4gQWZ0ZXIgaXQgaGFzICBydW4sICB0aGV5CisgICAgICAgdG8gIHZhcmlhYmxlcyAgdGhhdCBhcmUgdXBkYXRlZCBieSB0aGUgZnVuY3Rpb24uIEFmdGVyIGl0IGhhcyBydW4sIHRoZXkKICAgICAgICBwb2ludCB0byB0aGUgZmlyc3QgYW5kIGxhc3QgZW50cmllcyBpbiB0aGUgbmFtZS10by1udW1iZXIgdGFibGUgZm9yIHRoZQotICAgICAgIGdpdmVuIG5hbWUsIGFuZCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgbGVuZ3RoIG9mIGVhY2ggZW50cnkgIGluICBjb2RlCi0gICAgICAgdW5pdHMuICBJbiBib3RoIGNhc2VzLCBQQ1JFMl9FUlJPUl9OT1NVQlNUUklORyBpcyByZXR1cm5lZCBpZiB0aGVyZSBhcmUKKyAgICAgICBnaXZlbiAgbmFtZSwgIGFuZCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgbGVuZ3RoIG9mIGVhY2ggZW50cnkgaW4gY29kZQorICAgICAgIHVuaXRzLiBJbiBib3RoIGNhc2VzLCBQQ1JFMl9FUlJPUl9OT1NVQlNUUklORyBpcyByZXR1cm5lZCBpZiB0aGVyZSAgYXJlCiAgICAgICAgbm8gZW50cmllcyBmb3IgdGhlIGdpdmVuIG5hbWUuCiAKICAgICAgICBUaGUgZm9ybWF0IG9mIHRoZSBuYW1lIHRhYmxlIGlzIGRlc2NyaWJlZCBhYm92ZSBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAotICAgICAgIEluZm9ybWF0aW9uICBhYm91dCAgYSAgcGF0dGVybi4gIEdpdmVuIGFsbCB0aGUgcmVsZXZhbnQgZW50cmllcyBmb3IgdGhlCi0gICAgICAgbmFtZSwgeW91IGNhbiBleHRyYWN0IGVhY2ggb2YgdGhlaXIgbnVtYmVycywgIGFuZCAgaGVuY2UgIHRoZSAgY2FwdHVyZWQKKyAgICAgICBJbmZvcm1hdGlvbiBhYm91dCBhIHBhdHRlcm4uIEdpdmVuIGFsbCB0aGUgIHJlbGV2YW50ICBlbnRyaWVzICBmb3IgIHRoZQorICAgICAgIG5hbWUsICB5b3UgIGNhbiAgZXh0cmFjdCAgZWFjaCBvZiB0aGVpciBudW1iZXJzLCBhbmQgaGVuY2UgdGhlIGNhcHR1cmVkCiAgICAgICAgZGF0YS4KIAogCiBGSU5ESU5HIEFMTCBQT1NTSUJMRSBNQVRDSEVTIEFUIE9ORSBQT1NJVElPTgogCi0gICAgICAgVGhlICB0cmFkaXRpb25hbCAgbWF0Y2hpbmcgIGZ1bmN0aW9uICB1c2VzIGEgc2ltaWxhciBhbGdvcml0aG0gdG8gUGVybCwKLSAgICAgICB3aGljaCBzdG9wcyB3aGVuIGl0IGZpbmRzIHRoZSBmaXJzdCBtYXRjaCBhdCBhIGdpdmVuIHBvaW50IGluIHRoZSAgc3ViLQorICAgICAgIFRoZSB0cmFkaXRpb25hbCBtYXRjaGluZyBmdW5jdGlvbiB1c2VzIGEgIHNpbWlsYXIgIGFsZ29yaXRobSAgdG8gIFBlcmwsCisgICAgICAgd2hpY2ggIHN0b3BzIHdoZW4gaXQgZmluZHMgdGhlIGZpcnN0IG1hdGNoIGF0IGEgZ2l2ZW4gcG9pbnQgaW4gdGhlIHN1Yi0KICAgICAgICBqZWN0LiBJZiB5b3Ugd2FudCB0byBmaW5kIGFsbCBwb3NzaWJsZSBtYXRjaGVzLCBvciB0aGUgbG9uZ2VzdCBwb3NzaWJsZQotICAgICAgIG1hdGNoIGF0IGEgZ2l2ZW4gcG9zaXRpb24sICBjb25zaWRlciAgdXNpbmcgIHRoZSAgYWx0ZXJuYXRpdmUgIG1hdGNoaW5nCi0gICAgICAgZnVuY3Rpb24gIChzZWUgIGJlbG93KSBpbnN0ZWFkLiBJZiB5b3UgY2Fubm90IHVzZSB0aGUgYWx0ZXJuYXRpdmUgZnVuYy0KKyAgICAgICBtYXRjaCAgYXQgIGEgIGdpdmVuICBwb3NpdGlvbiwgIGNvbnNpZGVyIHVzaW5nIHRoZSBhbHRlcm5hdGl2ZSBtYXRjaGluZworICAgICAgIGZ1bmN0aW9uIChzZWUgYmVsb3cpIGluc3RlYWQuIElmIHlvdSBjYW5ub3QgdXNlIHRoZSAgYWx0ZXJuYXRpdmUgIGZ1bmMtCiAgICAgICAgdGlvbiwgeW91IGNhbiBrbHVkZ2UgaXQgdXAgYnkgbWFraW5nIHVzZSBvZiB0aGUgY2FsbG91dCBmYWNpbGl0eSwgd2hpY2gKICAgICAgICBpcyBkZXNjcmliZWQgaW4gdGhlIHBjcmUyY2FsbG91dCBkb2N1bWVudGF0aW9uLgogCiAgICAgICAgV2hhdCB5b3UgaGF2ZSB0byBkbyBpcyB0byBpbnNlcnQgYSBjYWxsb3V0IHJpZ2h0IGF0IHRoZSBlbmQgb2YgdGhlIHBhdC0KLSAgICAgICB0ZXJuLiAgV2hlbiB5b3VyIGNhbGxvdXQgZnVuY3Rpb24gaXMgY2FsbGVkLCBleHRyYWN0IGFuZCBzYXZlIHRoZSAgY3VyLQotICAgICAgIHJlbnQgIG1hdGNoZWQgIHN1YnN0cmluZy4gIFRoZW4gcmV0dXJuIDEsIHdoaWNoIGZvcmNlcyBwY3JlMl9tYXRjaCgpIHRvCi0gICAgICAgYmFja3RyYWNrIGFuZCB0cnkgb3RoZXIgYWx0ZXJuYXRpdmVzLiBVbHRpbWF0ZWx5LCB3aGVuIGl0IHJ1bnMgIG91dCAgb2YKKyAgICAgICB0ZXJuLiAgIFdoZW4geW91ciBjYWxsb3V0IGZ1bmN0aW9uIGlzIGNhbGxlZCwgZXh0cmFjdCBhbmQgc2F2ZSB0aGUgY3VyLQorICAgICAgIHJlbnQgbWF0Y2hlZCBzdWJzdHJpbmcuIFRoZW4gcmV0dXJuIDEsIHdoaWNoICBmb3JjZXMgIHBjcmUyX21hdGNoKCkgIHRvCisgICAgICAgYmFja3RyYWNrICBhbmQgIHRyeSBvdGhlciBhbHRlcm5hdGl2ZXMuIFVsdGltYXRlbHksIHdoZW4gaXQgcnVucyBvdXQgb2YKICAgICAgICBtYXRjaGVzLCBwY3JlMl9tYXRjaCgpIHdpbGwgeWllbGQgUENSRTJfRVJST1JfTk9NQVRDSC4KIAogCkBAIC0yODYzLDI2ICsyOTU5LDI2IEBACiAgICAgICAgICBwY3JlMl9tYXRjaF9jb250ZXh0ICptY29udGV4dCwKICAgICAgICAgIGludCAqd29ya3NwYWNlLCBQQ1JFMl9TSVpFIHdzY291bnQpOwogCi0gICAgICAgVGhlICBmdW5jdGlvbiAgcGNyZTJfZGZhX21hdGNoKCkgIGlzICBjYWxsZWQgIHRvIG1hdGNoIGEgc3ViamVjdCBzdHJpbmcKLSAgICAgICBhZ2FpbnN0IGEgY29tcGlsZWQgcGF0dGVybiwgdXNpbmcgYSBtYXRjaGluZyBhbGdvcml0aG0gdGhhdCAgc2NhbnMgIHRoZQotICAgICAgIHN1YmplY3QgIHN0cmluZyAganVzdCAgb25jZSwgYW5kIGRvZXMgbm90IGJhY2t0cmFjay4gVGhpcyBoYXMgZGlmZmVyZW50Ci0gICAgICAgY2hhcmFjdGVyaXN0aWNzIHRvIHRoZSBub3JtYWwgYWxnb3JpdGhtLCBhbmQgIGlzICBub3QgIGNvbXBhdGlibGUgIHdpdGgKLSAgICAgICBQZXJsLiAgU29tZSBvZiB0aGUgZmVhdHVyZXMgb2YgUENSRTIgcGF0dGVybnMgYXJlIG5vdCBzdXBwb3J0ZWQuIE5ldmVyLQotICAgICAgIHRoZWxlc3MsIHRoZXJlIGFyZSB0aW1lcyB3aGVuIHRoaXMga2luZCBvZiBtYXRjaGluZyBjYW4gYmUgdXNlZnVsLiAgRm9yCi0gICAgICAgYSAgZGlzY3Vzc2lvbiAgb2YgIHRoZSAgdHdvIG1hdGNoaW5nIGFsZ29yaXRobXMsIGFuZCBhIGxpc3Qgb2YgZmVhdHVyZXMKKyAgICAgICBUaGUgZnVuY3Rpb24gcGNyZTJfZGZhX21hdGNoKCkgaXMgY2FsbGVkICB0byAgbWF0Y2ggIGEgIHN1YmplY3QgIHN0cmluZworICAgICAgIGFnYWluc3QgIGEgIGNvbXBpbGVkIHBhdHRlcm4sIHVzaW5nIGEgbWF0Y2hpbmcgYWxnb3JpdGhtIHRoYXQgc2NhbnMgdGhlCisgICAgICAgc3ViamVjdCBzdHJpbmcganVzdCBvbmNlLCBhbmQgZG9lcyBub3QgYmFja3RyYWNrLiAgVGhpcyAgaGFzICBkaWZmZXJlbnQKKyAgICAgICBjaGFyYWN0ZXJpc3RpY3MgIHRvICB0aGUgIG5vcm1hbCAgYWxnb3JpdGhtLCBhbmQgaXMgbm90IGNvbXBhdGlibGUgd2l0aAorICAgICAgIFBlcmwuIFNvbWUgb2YgdGhlIGZlYXR1cmVzIG9mIFBDUkUyIHBhdHRlcm5zIGFyZSBub3Qgc3VwcG9ydGVkLiAgTmV2ZXItCisgICAgICAgdGhlbGVzcywgIHRoZXJlIGFyZSB0aW1lcyB3aGVuIHRoaXMga2luZCBvZiBtYXRjaGluZyBjYW4gYmUgdXNlZnVsLiBGb3IKKyAgICAgICBhIGRpc2N1c3Npb24gb2YgdGhlIHR3byBtYXRjaGluZyBhbGdvcml0aG1zLCBhbmQgIGEgIGxpc3QgIG9mICBmZWF0dXJlcwogICAgICAgIHRoYXQgcGNyZTJfZGZhX21hdGNoKCkgZG9lcyBub3Qgc3VwcG9ydCwgc2VlIHRoZSBwY3JlMm1hdGNoaW5nIGRvY3VtZW4tCiAgICAgICAgdGF0aW9uLgogCi0gICAgICAgVGhlICBhcmd1bWVudHMgIGZvciAgdGhlIHBjcmUyX2RmYV9tYXRjaCgpIGZ1bmN0aW9uIGFyZSB0aGUgc2FtZSBhcyBmb3IKKyAgICAgICBUaGUgYXJndW1lbnRzIGZvciB0aGUgcGNyZTJfZGZhX21hdGNoKCkgZnVuY3Rpb24gYXJlIHRoZSAgc2FtZSAgYXMgIGZvcgogICAgICAgIHBjcmUyX21hdGNoKCksIHBsdXMgdHdvIGV4dHJhcy4gVGhlIG92ZWN0b3Igd2l0aGluIHRoZSBtYXRjaCBkYXRhIGJsb2NrCiAgICAgICAgaXMgdXNlZCBpbiBhIGRpZmZlcmVudCB3YXksIGFuZCB0aGlzIGlzIGRlc2NyaWJlZCBiZWxvdy4gVGhlIG90aGVyIGNvbS0KLSAgICAgICBtb24gYXJndW1lbnRzIGFyZSB1c2VkIGluIHRoZSBzYW1lIHdheSBhcyBmb3IgcGNyZTJfbWF0Y2goKSwgIHNvICB0aGVpcgorICAgICAgIG1vbiAgYXJndW1lbnRzICBhcmUgdXNlZCBpbiB0aGUgc2FtZSB3YXkgYXMgZm9yIHBjcmUyX21hdGNoKCksIHNvIHRoZWlyCiAgICAgICAgZGVzY3JpcHRpb24gaXMgbm90IHJlcGVhdGVkIGhlcmUuCiAKLSAgICAgICBUaGUgIHR3byAgYWRkaXRpb25hbCAgYXJndW1lbnRzIHByb3ZpZGUgd29ya3NwYWNlIGZvciB0aGUgZnVuY3Rpb24uIFRoZQotICAgICAgIHdvcmtzcGFjZSB2ZWN0b3Igc2hvdWxkIGNvbnRhaW4gYXQgbGVhc3QgMjAgZWxlbWVudHMuIEl0ICBpcyAgdXNlZCAgZm9yCisgICAgICAgVGhlIHR3byBhZGRpdGlvbmFsIGFyZ3VtZW50cyBwcm92aWRlIHdvcmtzcGFjZSBmb3IgIHRoZSAgZnVuY3Rpb24uICBUaGUKKyAgICAgICB3b3Jrc3BhY2UgIHZlY3RvciAgc2hvdWxkICBjb250YWluIGF0IGxlYXN0IDIwIGVsZW1lbnRzLiBJdCBpcyB1c2VkIGZvcgogICAgICAgIGtlZXBpbmcgIHRyYWNrICBvZiAgbXVsdGlwbGUgIHBhdGhzICB0aHJvdWdoICB0aGUgIHBhdHRlcm4gIHRyZWUuICBNb3JlCi0gICAgICAgd29ya3NwYWNlIGlzIG5lZWRlZCBmb3IgcGF0dGVybnMgYW5kIHN1YmplY3RzIHdoZXJlIHRoZXJlIGFyZSBhIGxvdCAgb2YKKyAgICAgICB3b3Jrc3BhY2UgIGlzIG5lZWRlZCBmb3IgcGF0dGVybnMgYW5kIHN1YmplY3RzIHdoZXJlIHRoZXJlIGFyZSBhIGxvdCBvZgogICAgICAgIHBvdGVudGlhbCBtYXRjaGVzLgogCiAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIG9mIGEgc2ltcGxlIGNhbGwgdG8gcGNyZTJfZGZhX21hdGNoKCk6CkBAIC0yOTAyLDQ1ICsyOTk4LDQ1IEBACiAKICAgIE9wdGlvbiBiaXRzIGZvciBwY3JlX2RmYV9tYXRjaCgpCiAKLSAgICAgICBUaGUgIHVudXNlZCAgYml0cyBvZiB0aGUgb3B0aW9ucyBhcmd1bWVudCBmb3IgcGNyZTJfZGZhX21hdGNoKCkgbXVzdCBiZQotICAgICAgIHplcm8uIFRoZSBvbmx5IGJpdHMgdGhhdCBtYXkgYmUgc2V0IGFyZSAgUENSRTJfQU5DSE9SRUQsICBQQ1JFMl9OT1RCT0wsCisgICAgICAgVGhlIHVudXNlZCBiaXRzIG9mIHRoZSBvcHRpb25zIGFyZ3VtZW50IGZvciBwY3JlMl9kZmFfbWF0Y2goKSAgbXVzdCAgYmUKKyAgICAgICB6ZXJvLiAgVGhlICBvbmx5IGJpdHMgdGhhdCBtYXkgYmUgc2V0IGFyZSBQQ1JFMl9BTkNIT1JFRCwgUENSRTJfTk9UQk9MLAogICAgICAgIFBDUkUyX05PVEVPTCwgICAgICAgICAgUENSRTJfTk9URU1QVFksICAgICAgICAgIFBDUkUyX05PVEVNUFRZX0FUU1RBUlQsCiAgICAgICAgUENSRTJfTk9fVVRGX0NIRUNLLCAgICAgICBQQ1JFMl9QQVJUSUFMX0hBUkQsICAgICAgIFBDUkUyX1BBUlRJQUxfU09GVCwKLSAgICAgICBQQ1JFMl9ERkFfU0hPUlRFU1QsICBhbmQgIFBDUkUyX0RGQV9SRVNUQVJULiAgQWxsICBidXQgdGhlIGxhc3QgZm91ciBvZgotICAgICAgIHRoZXNlIGFyZSBleGFjdGx5IHRoZSBzYW1lIGFzIGZvciBwY3JlMl9tYXRjaCgpLCBzbyAgdGhlaXIgIGRlc2NyaXB0aW9uCisgICAgICAgUENSRTJfREZBX1NIT1JURVNULCBhbmQgUENSRTJfREZBX1JFU1RBUlQuIEFsbCBidXQgIHRoZSAgbGFzdCAgZm91ciAgb2YKKyAgICAgICB0aGVzZSAgYXJlICBleGFjdGx5IHRoZSBzYW1lIGFzIGZvciBwY3JlMl9tYXRjaCgpLCBzbyB0aGVpciBkZXNjcmlwdGlvbgogICAgICAgIGlzIG5vdCByZXBlYXRlZCBoZXJlLgogCiAgICAgICAgICBQQ1JFMl9QQVJUSUFMX0hBUkQKICAgICAgICAgIFBDUkUyX1BBUlRJQUxfU09GVAogCi0gICAgICAgVGhlc2UgIGhhdmUgIHRoZSAgc2FtZSBnZW5lcmFsIGVmZmVjdCBhcyB0aGV5IGRvIGZvciBwY3JlMl9tYXRjaCgpLCBidXQKLSAgICAgICB0aGUgZGV0YWlscyBhcmUgc2xpZ2h0bHkgZGlmZmVyZW50LiBXaGVuIFBDUkUyX1BBUlRJQUxfSEFSRCBpcyBzZXQgIGZvcgotICAgICAgIHBjcmUyX2RmYV9tYXRjaCgpLCAgaXQgIHJldHVybnMgIFBDUkUyX0VSUk9SX1BBUlRJQUwgIGlmIHRoZSBlbmQgb2YgdGhlCisgICAgICAgVGhlc2UgaGF2ZSB0aGUgc2FtZSBnZW5lcmFsIGVmZmVjdCBhcyB0aGV5IGRvICBmb3IgIHBjcmUyX21hdGNoKCksICBidXQKKyAgICAgICB0aGUgIGRldGFpbHMgYXJlIHNsaWdodGx5IGRpZmZlcmVudC4gV2hlbiBQQ1JFMl9QQVJUSUFMX0hBUkQgaXMgc2V0IGZvcgorICAgICAgIHBjcmUyX2RmYV9tYXRjaCgpLCBpdCByZXR1cm5zIFBDUkUyX0VSUk9SX1BBUlRJQUwgaWYgIHRoZSAgZW5kICBvZiAgdGhlCiAgICAgICAgc3ViamVjdCBpcyByZWFjaGVkIGFuZCB0aGVyZSBpcyBzdGlsbCBhdCBsZWFzdCBvbmUgbWF0Y2hpbmcgcG9zc2liaWxpdHkKICAgICAgICB0aGF0IHJlcXVpcmVzIGFkZGl0aW9uYWwgY2hhcmFjdGVycy4gVGhpcyBoYXBwZW5zIGV2ZW4gaWYgc29tZSBjb21wbGV0ZQotICAgICAgIG1hdGNoZXMgaGF2ZSBhbHJlYWR5IGJlZW4gZm91bmQuIFdoZW4gUENSRTJfUEFSVElBTF9TT0ZUICBpcyAgc2V0LCAgdGhlCi0gICAgICAgcmV0dXJuICBjb2RlICBQQ1JFMl9FUlJPUl9OT01BVENIIGlzIGNvbnZlcnRlZCBpbnRvIFBDUkUyX0VSUk9SX1BBUlRJQUwKLSAgICAgICBpZiB0aGUgZW5kIG9mIHRoZSBzdWJqZWN0IGlzICByZWFjaGVkLCAgdGhlcmUgIGhhdmUgIGJlZW4gIG5vICBjb21wbGV0ZQorICAgICAgIG1hdGNoZXMgIGhhdmUgIGFscmVhZHkgIGJlZW4gZm91bmQuIFdoZW4gUENSRTJfUEFSVElBTF9TT0ZUIGlzIHNldCwgdGhlCisgICAgICAgcmV0dXJuIGNvZGUgUENSRTJfRVJST1JfTk9NQVRDSCBpcyBjb252ZXJ0ZWQgIGludG8gIFBDUkUyX0VSUk9SX1BBUlRJQUwKKyAgICAgICBpZiAgdGhlICBlbmQgIG9mICB0aGUgIHN1YmplY3QgIGlzIHJlYWNoZWQsIHRoZXJlIGhhdmUgYmVlbiBubyBjb21wbGV0ZQogICAgICAgIG1hdGNoZXMsIGJ1dCB0aGVyZSBpcyBzdGlsbCBhdCBsZWFzdCBvbmUgbWF0Y2hpbmcgcG9zc2liaWxpdHkuIFRoZSBwb3ItCi0gICAgICAgdGlvbiBvZiB0aGUgc3RyaW5nIHRoYXQgd2FzIGluc3BlY3RlZCB3aGVuIHRoZSAgbG9uZ2VzdCAgcGFydGlhbCAgbWF0Y2gKKyAgICAgICB0aW9uICBvZiAgdGhlICBzdHJpbmcgdGhhdCB3YXMgaW5zcGVjdGVkIHdoZW4gdGhlIGxvbmdlc3QgcGFydGlhbCBtYXRjaAogICAgICAgIHdhcyBmb3VuZCBpcyBzZXQgYXMgdGhlIGZpcnN0IG1hdGNoaW5nIHN0cmluZyBpbiBib3RoIGNhc2VzLiBUaGVyZSBpcyBhCi0gICAgICAgbW9yZSBkZXRhaWxlZCBkaXNjdXNzaW9uIG9mIHBhcnRpYWwgYW5kICBtdWx0aS1zZWdtZW50ICBtYXRjaGluZywgIHdpdGgKKyAgICAgICBtb3JlICBkZXRhaWxlZCAgZGlzY3Vzc2lvbiAgb2YgcGFydGlhbCBhbmQgbXVsdGktc2VnbWVudCBtYXRjaGluZywgd2l0aAogICAgICAgIGV4YW1wbGVzLCBpbiB0aGUgcGNyZTJwYXJ0aWFsIGRvY3VtZW50YXRpb24uCiAKICAgICAgICAgIFBDUkUyX0RGQV9TSE9SVEVTVAogCi0gICAgICAgU2V0dGluZyAgdGhlIFBDUkUyX0RGQV9TSE9SVEVTVCBvcHRpb24gY2F1c2VzIHRoZSBtYXRjaGluZyBhbGdvcml0aG0gdG8KKyAgICAgICBTZXR0aW5nIHRoZSBQQ1JFMl9ERkFfU0hPUlRFU1Qgb3B0aW9uIGNhdXNlcyB0aGUgbWF0Y2hpbmcgYWxnb3JpdGhtICB0bwogICAgICAgIHN0b3AgYXMgc29vbiBhcyBpdCBoYXMgZm91bmQgb25lIG1hdGNoLiBCZWNhdXNlIG9mIHRoZSB3YXkgdGhlIGFsdGVybmEtCi0gICAgICAgdGl2ZSAgYWxnb3JpdGhtICB3b3JrcywgdGhpcyBpcyBuZWNlc3NhcmlseSB0aGUgc2hvcnRlc3QgcG9zc2libGUgbWF0Y2gKKyAgICAgICB0aXZlIGFsZ29yaXRobSB3b3JrcywgdGhpcyBpcyBuZWNlc3NhcmlseSB0aGUgc2hvcnRlc3QgIHBvc3NpYmxlICBtYXRjaAogICAgICAgIGF0IHRoZSBmaXJzdCBwb3NzaWJsZSBtYXRjaGluZyBwb2ludCBpbiB0aGUgc3ViamVjdCBzdHJpbmcuCiAKICAgICAgICAgIFBDUkUyX0RGQV9SRVNUQVJUCiAKLSAgICAgICBXaGVuIHBjcmUyX2RmYV9tYXRjaCgpIHJldHVybnMgYSBwYXJ0aWFsIG1hdGNoLCBpdCBpcyBwb3NzaWJsZSB0byAgY2FsbAorICAgICAgIFdoZW4gIHBjcmUyX2RmYV9tYXRjaCgpIHJldHVybnMgYSBwYXJ0aWFsIG1hdGNoLCBpdCBpcyBwb3NzaWJsZSB0byBjYWxsCiAgICAgICAgaXQgYWdhaW4sIHdpdGggYWRkaXRpb25hbCBzdWJqZWN0IGNoYXJhY3RlcnMsIGFuZCBoYXZlIGl0IGNvbnRpbnVlIHdpdGgKICAgICAgICB0aGUgc2FtZSBtYXRjaC4gVGhlIFBDUkUyX0RGQV9SRVNUQVJUIG9wdGlvbiByZXF1ZXN0cyB0aGlzIGFjdGlvbjsgd2hlbgotICAgICAgIGl0ICBpcyAgc2V0LCAgdGhlIHdvcmtzcGFjZSBhbmQgd3Njb3VudCBvcHRpb25zIG11c3QgcmVmZXJlbmNlIHRoZSBzYW1lCi0gICAgICAgdmVjdG9yIGFzIGJlZm9yZSBiZWNhdXNlIGRhdGEgYWJvdXQgdGhlIG1hdGNoIHNvIGZhciBpcyAgbGVmdCAgaW4gIHRoZW0KKyAgICAgICBpdCBpcyBzZXQsIHRoZSB3b3Jrc3BhY2UgYW5kIHdzY291bnQgb3B0aW9ucyBtdXN0ICByZWZlcmVuY2UgIHRoZSAgc2FtZQorICAgICAgIHZlY3RvciAgYXMgIGJlZm9yZSAgYmVjYXVzZSBkYXRhIGFib3V0IHRoZSBtYXRjaCBzbyBmYXIgaXMgbGVmdCBpbiB0aGVtCiAgICAgICAgYWZ0ZXIgYSBwYXJ0aWFsIG1hdGNoLiBUaGVyZSBpcyBtb3JlIGRpc2N1c3Npb24gb2YgdGhpcyBmYWNpbGl0eSBpbiB0aGUKICAgICAgICBwY3JlMnBhcnRpYWwgZG9jdW1lbnRhdGlvbi4KIApAQCAtMjk0OCw4ICszMDQ0LDggQEAKIAogICAgICAgIFdoZW4gcGNyZTJfZGZhX21hdGNoKCkgc3VjY2VlZHMsIGl0IG1heSBoYXZlIG1hdGNoZWQgbW9yZSB0aGFuIG9uZSBzdWItCiAgICAgICAgc3RyaW5nIGluIHRoZSBzdWJqZWN0LiBOb3RlLCBob3dldmVyLCB0aGF0IGFsbCB0aGUgbWF0Y2hlcyBmcm9tIG9uZSBydW4KLSAgICAgICBvZiB0aGUgZnVuY3Rpb24gc3RhcnQgYXQgdGhlIHNhbWUgcG9pbnQgaW4gIHRoZSAgc3ViamVjdC4gIFRoZSAgc2hvcnRlcgotICAgICAgIG1hdGNoZXMgIGFyZSBhbGwgaW5pdGlhbCBzdWJzdHJpbmdzIG9mIHRoZSBsb25nZXIgbWF0Y2hlcy4gRm9yIGV4YW1wbGUsCisgICAgICAgb2YgIHRoZSAgZnVuY3Rpb24gIHN0YXJ0ICBhdCB0aGUgc2FtZSBwb2ludCBpbiB0aGUgc3ViamVjdC4gVGhlIHNob3J0ZXIKKyAgICAgICBtYXRjaGVzIGFyZSBhbGwgaW5pdGlhbCBzdWJzdHJpbmdzIG9mIHRoZSBsb25nZXIgbWF0Y2hlcy4gRm9yICBleGFtcGxlLAogICAgICAgIGlmIHRoZSBwYXR0ZXJuCiAKICAgICAgICAgIDwuKj4KQEAgLTI5NjQsMTcgKzMwNjAsMTcgQEAKICAgICAgICAgIDxzb21ldGhpbmc+IDxzb21ldGhpbmcgZWxzZT4KICAgICAgICAgIDxzb21ldGhpbmc+CiAKLSAgICAgICBPbiBzdWNjZXNzLCB0aGUgeWllbGQgb2YgdGhlIGZ1bmN0aW9uIGlzIGEgbnVtYmVyICBncmVhdGVyICB0aGFuICB6ZXJvLAotICAgICAgIHdoaWNoICBpcyAgdGhlICBudW1iZXIgIG9mICBtYXRjaGVkIHN1YnN0cmluZ3MuIFRoZSBvZmZzZXRzIG9mIHRoZSBzdWItCi0gICAgICAgc3RyaW5ncyBhcmUgcmV0dXJuZWQgaW4gdGhlIG92ZWN0b3IsIGFuZCBjYW4gYmUgZXh0cmFjdGVkIGJ5IG51bWJlciAgaW4KLSAgICAgICB0aGUgIHNhbWUgd2F5IGFzIGZvciBwY3JlMl9tYXRjaCgpLCBidXQgdGhlIG51bWJlcnMgYmVhciBubyByZWxhdGlvbiB0bwotICAgICAgIGFueSBjYXB0dXJpbmcgZ3JvdXBzIHRoYXQgbWF5IGV4aXN0IGluIHRoZSBwYXR0ZXJuLCBiZWNhdXNlIERGQSAgbWF0Y2gtCisgICAgICAgT24gIHN1Y2Nlc3MsICB0aGUgIHlpZWxkIG9mIHRoZSBmdW5jdGlvbiBpcyBhIG51bWJlciBncmVhdGVyIHRoYW4gemVybywKKyAgICAgICB3aGljaCBpcyB0aGUgbnVtYmVyIG9mIG1hdGNoZWQgc3Vic3RyaW5ncy4gIFRoZSAgb2Zmc2V0cyAgb2YgIHRoZSAgc3ViLQorICAgICAgIHN0cmluZ3MgIGFyZSByZXR1cm5lZCBpbiB0aGUgb3ZlY3RvciwgYW5kIGNhbiBiZSBleHRyYWN0ZWQgYnkgbnVtYmVyIGluCisgICAgICAgdGhlIHNhbWUgd2F5IGFzIGZvciBwY3JlMl9tYXRjaCgpLCBidXQgdGhlIG51bWJlcnMgYmVhciBubyByZWxhdGlvbiAgdG8KKyAgICAgICBhbnkgIGNhcHR1cmluZyBncm91cHMgdGhhdCBtYXkgZXhpc3QgaW4gdGhlIHBhdHRlcm4sIGJlY2F1c2UgREZBIG1hdGNoLQogICAgICAgIGluZyBkb2VzIG5vdCBzdXBwb3J0IGdyb3VwIGNhcHR1cmUuCiAKLSAgICAgICBDYWxscyAgdG8gIHRoZSAgY29udmVuaWVuY2UgIGZ1bmN0aW9ucyAgdGhhdCBleHRyYWN0IHN1YnN0cmluZ3MgYnkgbmFtZQotICAgICAgIHJldHVybiB0aGUgZXJyb3IgUENSRTJfRVJST1JfREZBX1VGVU5DICh1bnN1cHBvcnRlZCBmdW5jdGlvbikgIGlmICB1c2VkCisgICAgICAgQ2FsbHMgdG8gdGhlIGNvbnZlbmllbmNlIGZ1bmN0aW9ucyAgdGhhdCAgZXh0cmFjdCAgc3Vic3RyaW5ncyAgYnkgIG5hbWUKKyAgICAgICByZXR1cm4gIHRoZSAgZXJyb3IgUENSRTJfRVJST1JfREZBX1VGVU5DICh1bnN1cHBvcnRlZCBmdW5jdGlvbikgaWYgdXNlZAogICAgICAgIGFmdGVyIGEgREZBIG1hdGNoLiBUaGUgY29udmVuaWVuY2UgZnVuY3Rpb25zIHRoYXQgZXh0cmFjdCBzdWJzdHJpbmdzIGJ5Ci0gICAgICAgbnVtYmVyIG5ldmVyIHJldHVybiBQQ1JFMl9FUlJPUl9OT1NVQlNUUklORywgYW5kIHRoZSBtZWFuaW5ncyAgb2YgIHNvbWUKKyAgICAgICBudW1iZXIgIG5ldmVyICByZXR1cm4gUENSRTJfRVJST1JfTk9TVUJTVFJJTkcsIGFuZCB0aGUgbWVhbmluZ3Mgb2Ygc29tZQogICAgICAgIG90aGVyIGVycm9ycyBhcmUgc2xpZ2h0bHkgZGlmZmVyZW50OgogCiAgICAgICAgICBQQ1JFMl9FUlJPUl9VTkFWQUlMQUJMRQpAQCAtMjk4NCw2NCArMzA4MCw2NCBAQAogCiAgICAgICAgICBQQ1JFMl9FUlJPUl9VTlNFVAogCi0gICAgICAgVGhlcmUgaXMgYSBzbG90IGluIHRoZSBvdmVjdG9yICBmb3IgIHRoaXMgIHN1YnN0cmluZywgIGJ1dCAgdGhlcmUgIHdlcmUKKyAgICAgICBUaGVyZSAgaXMgIGEgIHNsb3QgIGluICB0aGUgIG92ZWN0b3IgZm9yIHRoaXMgc3Vic3RyaW5nLCBidXQgdGhlcmUgd2VyZQogICAgICAgIGluc3VmZmljaWVudCBtYXRjaGVzIHRvIGZpbGwgaXQuCiAKLSAgICAgICBUaGUgIG1hdGNoZWQgIHN0cmluZ3MgIGFyZSAgc3RvcmVkICBpbiAgdGhlIG92ZWN0b3IgaW4gcmV2ZXJzZSBvcmRlciBvZgotICAgICAgIGxlbmd0aDsgdGhhdCBpcywgdGhlIGxvbmdlc3QgbWF0Y2hpbmcgc3RyaW5nIGlzIGZpcnN0LiAgSWYgIHRoZXJlICB3ZXJlCi0gICAgICAgdG9vICBtYW55IG1hdGNoZXMgdG8gZml0IGludG8gdGhlIG92ZWN0b3IsIHRoZSB5aWVsZCBvZiB0aGUgZnVuY3Rpb24gaXMKKyAgICAgICBUaGUgbWF0Y2hlZCBzdHJpbmdzIGFyZSBzdG9yZWQgaW4gIHRoZSAgb3ZlY3RvciAgaW4gIHJldmVyc2UgIG9yZGVyICBvZgorICAgICAgIGxlbmd0aDsgIHRoYXQgIGlzLCAgdGhlIGxvbmdlc3QgbWF0Y2hpbmcgc3RyaW5nIGlzIGZpcnN0LiBJZiB0aGVyZSB3ZXJlCisgICAgICAgdG9vIG1hbnkgbWF0Y2hlcyB0byBmaXQgaW50byB0aGUgb3ZlY3RvciwgdGhlIHlpZWxkIG9mIHRoZSBmdW5jdGlvbiAgaXMKICAgICAgICB6ZXJvLCBhbmQgdGhlIHZlY3RvciBpcyBmaWxsZWQgd2l0aCB0aGUgbG9uZ2VzdCBtYXRjaGVzLgogCi0gICAgICAgTk9URTogUENSRTIncyAiYXV0by1wb3NzZXNzaWZpY2F0aW9uIiBvcHRpbWl6YXRpb24gdXN1YWxseSAgYXBwbGllcyAgdG8KLSAgICAgICBjaGFyYWN0ZXIgIHJlcGVhdHMgYXQgdGhlIGVuZCBvZiBhIHBhdHRlcm4gKGFzIHdlbGwgYXMgaW50ZXJuYWxseSkuIEZvcgotICAgICAgIGV4YW1wbGUsIHRoZSBwYXR0ZXJuICJhXGQrIiBpcyBjb21waWxlZCBhcyBpZiBpdCB3ZXJlICJhXGQrKyIuIEZvciAgREZBCi0gICAgICAgbWF0Y2hpbmcsICB0aGlzICBtZWFucyAgdGhhdCAgb25seSAgb25lIHBvc3NpYmxlIG1hdGNoIGlzIGZvdW5kLiBJZiB5b3UKLSAgICAgICByZWFsbHkgZG8gd2FudCBtdWx0aXBsZSBtYXRjaGVzIGluIHN1Y2ggY2FzZXMsIGVpdGhlciB1c2UgIGFuICB1bmdyZWVkeQotICAgICAgIHJlcGVhdCAgYXVjaCAgYXMgICJhXGQrPyIgIG9yIHNldCB0aGUgUENSRTJfTk9fQVVUT19QT1NTRVNTIG9wdGlvbiB3aGVuCisgICAgICAgTk9URTogIFBDUkUyJ3MgICJhdXRvLXBvc3Nlc3NpZmljYXRpb24iIG9wdGltaXphdGlvbiB1c3VhbGx5IGFwcGxpZXMgdG8KKyAgICAgICBjaGFyYWN0ZXIgcmVwZWF0cyBhdCB0aGUgZW5kIG9mIGEgcGF0dGVybiAoYXMgd2VsbCBhcyBpbnRlcm5hbGx5KS4gIEZvcgorICAgICAgIGV4YW1wbGUsICB0aGUgcGF0dGVybiAiYVxkKyIgaXMgY29tcGlsZWQgYXMgaWYgaXQgd2VyZSAiYVxkKysiLiBGb3IgREZBCisgICAgICAgbWF0Y2hpbmcsIHRoaXMgbWVhbnMgdGhhdCBvbmx5IG9uZSBwb3NzaWJsZSAgbWF0Y2ggIGlzICBmb3VuZC4gIElmICB5b3UKKyAgICAgICByZWFsbHkgIGRvICB3YW50IG11bHRpcGxlIG1hdGNoZXMgaW4gc3VjaCBjYXNlcywgZWl0aGVyIHVzZSBhbiB1bmdyZWVkeQorICAgICAgIHJlcGVhdCBhdWNoIGFzICJhXGQrPyIgb3Igc2V0ICB0aGUgIFBDUkUyX05PX0FVVE9fUE9TU0VTUyAgb3B0aW9uICB3aGVuCiAgICAgICAgY29tcGlsaW5nLgogCiAgICBFcnJvciByZXR1cm5zIGZyb20gcGNyZTJfZGZhX21hdGNoKCkKIAogICAgICAgIFRoZSBwY3JlMl9kZmFfbWF0Y2goKSBmdW5jdGlvbiByZXR1cm5zIGEgbmVnYXRpdmUgbnVtYmVyIHdoZW4gaXQgZmFpbHMuCi0gICAgICAgTWFueSAgb2YgIHRoZSAgZXJyb3JzICBhcmUgIHRoZSBzYW1lIGFzIGZvciBwY3JlMl9tYXRjaCgpLCBhcyBkZXNjcmliZWQKKyAgICAgICBNYW55IG9mIHRoZSBlcnJvcnMgYXJlIHRoZSBzYW1lICBhcyAgZm9yICBwY3JlMl9tYXRjaCgpLCAgYXMgIGRlc2NyaWJlZAogICAgICAgIGFib3ZlLiAgVGhlcmUgYXJlIGluIGFkZGl0aW9uIHRoZSBmb2xsb3dpbmcgZXJyb3JzIHRoYXQgYXJlIHNwZWNpZmljIHRvCiAgICAgICAgcGNyZTJfZGZhX21hdGNoKCk6CiAKICAgICAgICAgIFBDUkUyX0VSUk9SX0RGQV9VSVRFTQogCi0gICAgICAgVGhpcyAgcmV0dXJuICBpcyAgZ2l2ZW4gIGlmIHBjcmUyX2RmYV9tYXRjaCgpIGVuY291bnRlcnMgYW4gaXRlbSBpbiB0aGUKLSAgICAgICBwYXR0ZXJuIHRoYXQgaXQgZG9lcyBub3Qgc3VwcG9ydCwgZm9yIGluc3RhbmNlLCB0aGUgdXNlIG9mIFxDIGluIGEgIFVURgorICAgICAgIFRoaXMgcmV0dXJuIGlzIGdpdmVuIGlmIHBjcmUyX2RmYV9tYXRjaCgpIGVuY291bnRlcnMgIGFuICBpdGVtICBpbiAgdGhlCisgICAgICAgcGF0dGVybiAgdGhhdCBpdCBkb2VzIG5vdCBzdXBwb3J0LCBmb3IgaW5zdGFuY2UsIHRoZSB1c2Ugb2YgXEMgaW4gYSBVVEYKICAgICAgICBtb2RlIG9yIGEgYmFjayByZWZlcmVuY2UuCiAKICAgICAgICAgIFBDUkUyX0VSUk9SX0RGQV9VQ09ORAogCi0gICAgICAgVGhpcyAgcmV0dXJuICBpcyBnaXZlbiBpZiBwY3JlMl9kZmFfbWF0Y2goKSBlbmNvdW50ZXJzIGEgY29uZGl0aW9uIGl0ZW0KLSAgICAgICB0aGF0IHVzZXMgYSBiYWNrIHJlZmVyZW5jZSBmb3IgdGhlIGNvbmRpdGlvbiwgb3IgYSB0ZXN0ICBmb3IgIHJlY3Vyc2lvbgorICAgICAgIFRoaXMgcmV0dXJuIGlzIGdpdmVuIGlmIHBjcmUyX2RmYV9tYXRjaCgpIGVuY291bnRlcnMgYSAgY29uZGl0aW9uICBpdGVtCisgICAgICAgdGhhdCAgdXNlcyAgYSBiYWNrIHJlZmVyZW5jZSBmb3IgdGhlIGNvbmRpdGlvbiwgb3IgYSB0ZXN0IGZvciByZWN1cnNpb24KICAgICAgICBpbiBhIHNwZWNpZmljIGdyb3VwLiBUaGVzZSBhcmUgbm90IHN1cHBvcnRlZC4KIAogICAgICAgICAgUENSRTJfRVJST1JfREZBX1dTU0laRQogCi0gICAgICAgVGhpcyAgcmV0dXJuICBpcyAgZ2l2ZW4gIGlmICBwY3JlMl9kZmFfbWF0Y2goKSBydW5zIG91dCBvZiBzcGFjZSBpbiB0aGUKKyAgICAgICBUaGlzIHJldHVybiBpcyBnaXZlbiBpZiBwY3JlMl9kZmFfbWF0Y2goKSBydW5zICBvdXQgIG9mICBzcGFjZSAgaW4gIHRoZQogICAgICAgIHdvcmtzcGFjZSB2ZWN0b3IuCiAKICAgICAgICAgIFBDUkUyX0VSUk9SX0RGQV9SRUNVUlNFCiAKLSAgICAgICBXaGVuIGEgcmVjdXJzaXZlIHN1YnBhdHRlcm4gaXMgcHJvY2Vzc2VkLCB0aGUgbWF0Y2hpbmcgIGZ1bmN0aW9uICBjYWxscworICAgICAgIFdoZW4gIGEgIHJlY3Vyc2l2ZSBzdWJwYXR0ZXJuIGlzIHByb2Nlc3NlZCwgdGhlIG1hdGNoaW5nIGZ1bmN0aW9uIGNhbGxzCiAgICAgICAgaXRzZWxmIHJlY3Vyc2l2ZWx5LCB1c2luZyBwcml2YXRlIG1lbW9yeSBmb3IgdGhlIG92ZWN0b3IgYW5kIHdvcmtzcGFjZS4KLSAgICAgICBUaGlzIGVycm9yIGlzIGdpdmVuIGlmIHRoZSBpbnRlcm5hbCBvdmVjdG9yIGlzIG5vdCBsYXJnZSAgZW5vdWdoLiAgVGhpcworICAgICAgIFRoaXMgIGVycm9yICBpcyBnaXZlbiBpZiB0aGUgaW50ZXJuYWwgb3ZlY3RvciBpcyBub3QgbGFyZ2UgZW5vdWdoLiBUaGlzCiAgICAgICAgc2hvdWxkIGJlIGV4dHJlbWVseSByYXJlLCBhcyBhIHZlY3RvciBvZiBzaXplIDEwMDAgaXMgdXNlZC4KIAogICAgICAgICAgUENSRTJfRVJST1JfREZBX0JBRFJFU1RBUlQKIAotICAgICAgIFdoZW4gIHBjcmUyX2RmYV9tYXRjaCgpICBpcyAgY2FsbGVkICB3aXRoIHRoZSBQQ1JFMl9ERkFfUkVTVEFSVCBvcHRpb24sCi0gICAgICAgc29tZSBwbGF1c2liaWxpdHkgY2hlY2tzIGFyZSBtYWRlIG9uIHRoZSAgY29udGVudHMgIG9mICB0aGUgIHdvcmtzcGFjZSwKLSAgICAgICB3aGljaCAgc2hvdWxkICBjb250YWluIGRhdGEgYWJvdXQgdGhlIHByZXZpb3VzIHBhcnRpYWwgbWF0Y2guIElmIGFueSBvZgorICAgICAgIFdoZW4gcGNyZTJfZGZhX21hdGNoKCkgaXMgY2FsbGVkICB3aXRoICB0aGUgIFBDUkUyX0RGQV9SRVNUQVJUICBvcHRpb24sCisgICAgICAgc29tZSAgcGxhdXNpYmlsaXR5ICBjaGVja3MgIGFyZSAgbWFkZSBvbiB0aGUgY29udGVudHMgb2YgdGhlIHdvcmtzcGFjZSwKKyAgICAgICB3aGljaCBzaG91bGQgY29udGFpbiBkYXRhIGFib3V0IHRoZSBwcmV2aW91cyBwYXJ0aWFsIG1hdGNoLiBJZiAgYW55ICBvZgogICAgICAgIHRoZXNlIGNoZWNrcyBmYWlsLCB0aGlzIGVycm9yIGlzIGdpdmVuLgogCiAKIFNFRSBBTFNPCiAKLSAgICAgICBwY3JlMmJ1aWxkKDMpLCAgIHBjcmUyY2FsbG91dCgzKSwgICAgcGNyZTJkZW1vKDMpLCAgICBwY3JlMm1hdGNoaW5nKDMpLAorICAgICAgIHBjcmUyYnVpbGQoMyksICAgIHBjcmUyY2FsbG91dCgzKSwgICAgcGNyZTJkZW1vKDMpLCAgIHBjcmUybWF0Y2hpbmcoMyksCiAgICAgICAgcGNyZTJwYXJ0aWFsKDMpLCAgICBwY3JlMnBvc2l4KDMpLCAgICBwY3JlMnNhbXBsZSgzKSwgICAgcGNyZTJzdGFjaygzKSwKICAgICAgICBwY3JlMnVuaWNvZGUoMykuCiAKQEAgLTMwNTUsOCArMzE1MSw4IEBACiAKIFJFVklTSU9OCiAKLSAgICAgICBMYXN0IHVwZGF0ZWQ6IDE2IERlY2VtYmVyIDIwMTUKLSAgICAgICBDb3B5cmlnaHQgKGMpIDE5OTctMjAxNSBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZS4KKyAgICAgICBMYXN0IHVwZGF0ZWQ6IDE3IEp1bmUgMjAxNgorICAgICAgIENvcHlyaWdodCAoYykgMTk5Ny0yMDE2IFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlLgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIApAQCAtMzM4Myw2ICszNDc5LDE1IEBACiAgICAgICAgYW4gRUJDRElDIGVudmlyb25tZW50LgogCiAKK1BDUkUyR1JFUCBTVVBQT1JUIEZPUiBFWFRFUk5BTCBTQ1JJUFRTCisKKyAgICAgICBCeSBkZWZhdWx0LCBvbiBub24tV2luZG93cyBzeXN0ZW1zLCBwY3JlMmdyZXAgc3VwcG9ydHMgdGhlIHVzZSBvZiBjYWxsLQorICAgICAgIG91dHMgd2l0aCBzdHJpbmcgYXJndW1lbnRzIHdpdGhpbiB0aGUgcGF0dGVybnMgaXQgaXMgbWF0Y2hpbmcsIGluIG9yZGVyCisgICAgICAgdG8gIHJ1biBleHRlcm5hbCBzY3JpcHRzLiBGb3IgZGV0YWlscywgc2VlIHRoZSBwY3JlMmdyZXAgZG9jdW1lbnRhdGlvbi4KKyAgICAgICBUaGlzIHN1cHBvcnQgY2FuIGJlIGRpc2FibGVkIGJ5IGFkZGluZyAgLS1kaXNhYmxlLXBjcmUyZ3JlcC1jYWxsb3V0ICB0bworICAgICAgIHRoZSBjb25maWd1cmUgY29tbWFuZC4KKworCiBQQ1JFMkdSRVAgT1BUSU9OUyBGT1IgQ09NUFJFU1NFRCBGSUxFIFNVUFBPUlQKIAogICAgICAgIEJ5ICBkZWZhdWx0LCAgcGNyZTJncmVwIHJlYWRzIGFsbCBmaWxlcyBhcyBwbGFpbiB0ZXh0LiBZb3UgY2FuIGJ1aWxkIGl0CkBAIC0zNDEwLDcgKzM1MTUsNyBAQAogICAgICAgICAgLS13aXRoLXBjcmUyZ3JlcC1idWZzaXplPTUwSwogCiAgICAgICAgdG8gIHRoZSAgY29uZmlndXJlICBjb21tYW5kLiAgVGhlIGNhbGxlciBvZiBwY3JlMmdyZXAgY2FuIG92ZXJyaWRlIHRoaXMKLSAgICAgICB2YWx1ZSBieSB1c2luZyAtLWJ1ZmZlci1zaXplIG9uIHRoZSBjb21tYW5kIGxpbmUuLgorICAgICAgIHZhbHVlIGJ5IHVzaW5nIC0tYnVmZmVyLXNpemUgb24gdGhlIGNvbW1hbmQgbGluZS4KIAogCiBQQ1JFMlRFU1QgT1BUSU9OIEZPUiBMSUJSRUFETElORSBTVVBQT1JUCkBAIC0zNTM5LDggKzM2NDQsOCBAQAogCiBSRVZJU0lPTgogCi0gICAgICAgTGFzdCB1cGRhdGVkOiAxNiBPY3RvYmVyIDIwMTUKLSAgICAgICBDb3B5cmlnaHQgKGMpIDE5OTctMjAxNSBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZS4KKyAgICAgICBMYXN0IHVwZGF0ZWQ6IDAxIEFwcmlsIDIwMTYKKyAgICAgICBDb3B5cmlnaHQgKGMpIDE5OTctMjAxNiBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZS4KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAKQEAgLTQyMTgsNDkgKzQzMjMsNTIgQEAKICAgICAgICBQQ1JFMl9OT19VVEZfQ0hFQ0ssICBQQ1JFMl9QQVJUSUFMX0hBUkQsICBhbmQgIFBDUkUyX1BBUlRJQUxfU09GVC4gIFRoZQogICAgICAgIFBDUkUyX0FOQ0hPUkVEIG9wdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGF0IG1hdGNoIHRpbWUuCiAKLSAgICAgICBUaGUgIG9ubHkgIHVuc3VwcG9ydGVkICBwYXR0ZXJuIGl0ZW1zIGFyZSBcQyAobWF0Y2ggYSBzaW5nbGUgZGF0YSB1bml0KQotICAgICAgIHdoZW4gcnVubmluZyBpbiBhIFVURiBtb2RlLCBhbmQgYSBjYWxsb3V0IGltbWVkaWF0ZWx5IGJlZm9yZSBhbiAgYXNzZXItCisgICAgICAgSWYgIHRoZSAgUENSRTJfTk9fSklUIG9wdGlvbiBpcyBwYXNzZWQgdG8gcGNyZTJfbWF0Y2goKSBpdCBkaXNhYmxlcyB0aGUKKyAgICAgICB1c2Ugb2YgSklULCBmb3JjaW5nIG1hdGNoaW5nIGJ5IHRoZSBpbnRlcnByZXRlciBjb2RlLgorCisgICAgICAgVGhlIG9ubHkgdW5zdXBwb3J0ZWQgcGF0dGVybiBpdGVtcyBhcmUgXEMgKG1hdGNoIGEgIHNpbmdsZSAgZGF0YSAgdW5pdCkKKyAgICAgICB3aGVuICBydW5uaW5nIGluIGEgVVRGIG1vZGUsIGFuZCBhIGNhbGxvdXQgaW1tZWRpYXRlbHkgYmVmb3JlIGFuIGFzc2VyLQogICAgICAgIHRpb24gY29uZGl0aW9uIGluIGEgY29uZGl0aW9uYWwgZ3JvdXAuCiAKIAogUkVUVVJOIFZBTFVFUyBGUk9NIEpJVCBNQVRDSElORwogCiAgICAgICAgV2hlbiBhIHBhdHRlcm4gaXMgbWF0Y2hlZCB1c2luZyBKSVQgbWF0Y2hpbmcsIHRoZSByZXR1cm4gdmFsdWVzIGFyZSB0aGUKLSAgICAgICBzYW1lIGFzIHRob3NlIGdpdmVuIGJ5IHRoZSBpbnRlcnByZXRpdmUgcGNyZTJfbWF0Y2goKSAgY29kZSwgIHdpdGggIHRoZQotICAgICAgIGFkZGl0aW9uICBvZiBvbmUgbmV3IGVycm9yIGNvZGU6IFBDUkUyX0VSUk9SX0pJVF9TVEFDS0xJTUlULiBUaGlzIG1lYW5zCi0gICAgICAgdGhhdCB0aGUgbWVtb3J5IHVzZWQgZm9yIHRoZSBKSVQgc3RhY2sgd2FzIGluc3VmZmljaWVudC4gU2VlICAiQ29udHJvbC0KKyAgICAgICBzYW1lICBhcyAgdGhvc2UgIGdpdmVuIGJ5IHRoZSBpbnRlcnByZXRpdmUgcGNyZTJfbWF0Y2goKSBjb2RlLCB3aXRoIHRoZQorICAgICAgIGFkZGl0aW9uIG9mIG9uZSBuZXcgZXJyb3IgY29kZTogUENSRTJfRVJST1JfSklUX1NUQUNLTElNSVQuIFRoaXMgIG1lYW5zCisgICAgICAgdGhhdCAgdGhlIG1lbW9yeSB1c2VkIGZvciB0aGUgSklUIHN0YWNrIHdhcyBpbnN1ZmZpY2llbnQuIFNlZSAiQ29udHJvbC0KICAgICAgICBsaW5nIHRoZSBKSVQgc3RhY2siIGJlbG93IGZvciBhIGRpc2N1c3Npb24gb2YgSklUIHN0YWNrIHVzYWdlLgogCi0gICAgICAgVGhlICBlcnJvciAgY29kZSAgUENSRTJfRVJST1JfTUFUQ0hMSU1JVCBpcyByZXR1cm5lZCBieSB0aGUgSklUIGNvZGUgaWYKLSAgICAgICBzZWFyY2hpbmcgYSB2ZXJ5IGxhcmdlIHBhdHRlcm4gdHJlZSBnb2VzIG9uIGZvciB0b28gbG9uZywgYXMgaXQgIGlzICBpbgotICAgICAgIHRoZSAgc2FtZSBjaXJjdW1zdGFuY2Ugd2hlbiBKSVQgaXMgbm90IHVzZWQsIGJ1dCB0aGUgZGV0YWlscyBvZiBleGFjdGx5Ci0gICAgICAgd2hhdCBpcyBjb3VudGVkIGFyZSBub3QgdGhlIHNhbWUuIFRoZSBQQ1JFMl9FUlJPUl9SRUNVUlNJT05MSU1JVCAgZXJyb3IKKyAgICAgICBUaGUgZXJyb3IgY29kZSBQQ1JFMl9FUlJPUl9NQVRDSExJTUlUIGlzIHJldHVybmVkIGJ5IHRoZSAgSklUICBjb2RlICBpZgorICAgICAgIHNlYXJjaGluZyAgYSAgdmVyeSBsYXJnZSBwYXR0ZXJuIHRyZWUgZ29lcyBvbiBmb3IgdG9vIGxvbmcsIGFzIGl0IGlzIGluCisgICAgICAgdGhlIHNhbWUgY2lyY3Vtc3RhbmNlIHdoZW4gSklUIGlzIG5vdCB1c2VkLCBidXQgdGhlIGRldGFpbHMgb2YgIGV4YWN0bHkKKyAgICAgICB3aGF0ICBpcyBjb3VudGVkIGFyZSBub3QgdGhlIHNhbWUuIFRoZSBQQ1JFMl9FUlJPUl9SRUNVUlNJT05MSU1JVCBlcnJvcgogICAgICAgIGNvZGUgaXMgbmV2ZXIgcmV0dXJuZWQgd2hlbiBKSVQgbWF0Y2hpbmcgaXMgdXNlZC4KIAogCiBDT05UUk9MTElORyBUSEUgSklUIFNUQUNLCiAKICAgICAgICBXaGVuIHRoZSBjb21waWxlZCBKSVQgY29kZSBydW5zLCBpdCBuZWVkcyBhIGJsb2NrIG9mIG1lbW9yeSB0byB1c2UgYXMgYQotICAgICAgIHN0YWNrLiAgQnkgZGVmYXVsdCwgaXQgdXNlcyAzMksgb24gdGhlICBtYWNoaW5lICBzdGFjay4gIEhvd2V2ZXIsICBzb21lCi0gICAgICAgbGFyZ2UgICBvciAgIGNvbXBsaWNhdGVkICBwYXR0ZXJucyAgbmVlZCAgbW9yZSAgdGhhbiAgdGhpcy4gIFRoZSAgZXJyb3IKLSAgICAgICBQQ1JFMl9FUlJPUl9KSVRfU1RBQ0tMSU1JVCBpcyBnaXZlbiB3aGVuIHRoZXJlICBpcyAgbm90ICBlbm91Z2ggIHN0YWNrLgotICAgICAgIFRocmVlICBmdW5jdGlvbnMgIGFyZSBwcm92aWRlZCBmb3IgbWFuYWdpbmcgYmxvY2tzIG9mIG1lbW9yeSBmb3IgdXNlIGFzCi0gICAgICAgSklUIHN0YWNrcy4gVGhlcmUgaXMgZnVydGhlciBkaXNjdXNzaW9uIGFib3V0IHRoZSB1c2Ugb2YgSklUIHN0YWNrcyAgaW4KKyAgICAgICBzdGFjay4gICBCeSAgZGVmYXVsdCwgIGl0ICB1c2VzIDMySyBvbiB0aGUgbWFjaGluZSBzdGFjay4gSG93ZXZlciwgc29tZQorICAgICAgIGxhcmdlICBvciAgY29tcGxpY2F0ZWQgIHBhdHRlcm5zICBuZWVkICBtb3JlICB0aGFuICB0aGlzLiAgIFRoZSAgIGVycm9yCisgICAgICAgUENSRTJfRVJST1JfSklUX1NUQUNLTElNSVQgIGlzICBnaXZlbiAgd2hlbiAgdGhlcmUgaXMgbm90IGVub3VnaCBzdGFjay4KKyAgICAgICBUaHJlZSBmdW5jdGlvbnMgYXJlIHByb3ZpZGVkIGZvciBtYW5hZ2luZyBibG9ja3Mgb2YgbWVtb3J5IGZvciAgdXNlICBhcworICAgICAgIEpJVCAgc3RhY2tzLiBUaGVyZSBpcyBmdXJ0aGVyIGRpc2N1c3Npb24gYWJvdXQgdGhlIHVzZSBvZiBKSVQgc3RhY2tzIGluCiAgICAgICAgdGhlIHNlY3Rpb24gZW50aXRsZWQgIkpJVCBzdGFjayBGQVEiIGJlbG93LgogCi0gICAgICAgVGhlICBwY3JlMl9qaXRfc3RhY2tfY3JlYXRlKCkgIGZ1bmN0aW9uICBjcmVhdGVzIGEgSklUIHN0YWNrLiBJdHMgYXJndS0KLSAgICAgICBtZW50cyBhcmUgYSBzdGFydGluZyBzaXplLCBhIG1heGltdW0gc2l6ZSwgYW5kIGEgZ2VuZXJhbCAgY29udGV4dCAgKGZvcgotICAgICAgIG1lbW9yeSAgYWxsb2NhdGlvbiAgZnVuY3Rpb25zLCBvciBOVUxMIGZvciBzdGFuZGFyZCBtZW1vcnkgYWxsb2NhdGlvbikuCisgICAgICAgVGhlIHBjcmUyX2ppdF9zdGFja19jcmVhdGUoKSBmdW5jdGlvbiBjcmVhdGVzIGEgSklUICBzdGFjay4gIEl0cyAgYXJndS0KKyAgICAgICBtZW50cyAgYXJlICBhIHN0YXJ0aW5nIHNpemUsIGEgbWF4aW11bSBzaXplLCBhbmQgYSBnZW5lcmFsIGNvbnRleHQgKGZvcgorICAgICAgIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9ucywgb3IgTlVMTCBmb3Igc3RhbmRhcmQgIG1lbW9yeSAgYWxsb2NhdGlvbikuCiAgICAgICAgSXQgcmV0dXJucyBhIHBvaW50ZXIgdG8gYW4gb3BhcXVlIHN0cnVjdHVyZSBvZiB0eXBlIHBjcmUyX2ppdF9zdGFjaywgb3IKLSAgICAgICBOVUxMICBpZiB0aGVyZSBpcyBhbiBlcnJvci4gVGhlIHBjcmUyX2ppdF9zdGFja19mcmVlKCkgZnVuY3Rpb24gaXMgdXNlZAotICAgICAgIHRvIGZyZWUgYSBzdGFjayB0aGF0IGlzIG5vIGxvbmdlciBuZWVkZWQuIChGb3IgdGhlIHRlY2huaWNhbGx5ICBtaW5kZWQ6CisgICAgICAgTlVMTCBpZiB0aGVyZSBpcyBhbiBlcnJvci4gVGhlIHBjcmUyX2ppdF9zdGFja19mcmVlKCkgZnVuY3Rpb24gaXMgIHVzZWQKKyAgICAgICB0byAgZnJlZSBhIHN0YWNrIHRoYXQgaXMgbm8gbG9uZ2VyIG5lZWRlZC4gKEZvciB0aGUgdGVjaG5pY2FsbHkgbWluZGVkOgogICAgICAgIHRoZSBhZGRyZXNzIHNwYWNlIGlzIGFsbG9jYXRlZCBieSBtbWFwIG9yIFZpcnR1YWxBbGxvYy4pCiAKLSAgICAgICBKSVQgIHVzZXMgZmFyIGxlc3MgbWVtb3J5IGZvciByZWN1cnNpb24gdGhhbiB0aGUgaW50ZXJwcmV0aXZlIGNvZGUsIGFuZAotICAgICAgIGEgbWF4aW11bSBzdGFjayBzaXplIG9mIDUxMksgdG8gMU0gc2hvdWxkIGJlIG1vcmUgdGhhbiBlbm91Z2ggIGZvciAgYW55CisgICAgICAgSklUIHVzZXMgZmFyIGxlc3MgbWVtb3J5IGZvciByZWN1cnNpb24gdGhhbiB0aGUgaW50ZXJwcmV0aXZlIGNvZGUsICBhbmQKKyAgICAgICBhICBtYXhpbXVtICBzdGFjayBzaXplIG9mIDUxMksgdG8gMU0gc2hvdWxkIGJlIG1vcmUgdGhhbiBlbm91Z2ggZm9yIGFueQogICAgICAgIHBhdHRlcm4uCiAKLSAgICAgICBUaGUgIHBjcmUyX2ppdF9zdGFja19hc3NpZ24oKSAgZnVuY3Rpb24gIHNwZWNpZmllcyB3aGljaCBzdGFjayBKSVQgY29kZQorICAgICAgIFRoZSBwY3JlMl9qaXRfc3RhY2tfYXNzaWduKCkgZnVuY3Rpb24gc3BlY2lmaWVzIHdoaWNoICBzdGFjayAgSklUICBjb2RlCiAgICAgICAgc2hvdWxkIHVzZS4gSXRzIGFyZ3VtZW50cyBhcmUgYXMgZm9sbG93czoKIAogICAgICAgICAgcGNyZTJfbWF0Y2hfY29udGV4dCAgKm1jb250ZXh0CkBAIC00MjY5LDcgKzQzNzcsNyBAQAogCiAgICAgICAgVGhlIGZpcnN0IGFyZ3VtZW50IGlzIGEgcG9pbnRlciB0byBhIG1hdGNoIGNvbnRleHQuIFdoZW4gdGhpcyBpcyBzdWJzZS0KICAgICAgICBxdWVudGx5IHBhc3NlZCB0byBhIG1hdGNoaW5nIGZ1bmN0aW9uLCBpdHMgaW5mb3JtYXRpb24gZGV0ZXJtaW5lcyB3aGljaAotICAgICAgIEpJVCBzdGFjayBpcyB1c2VkLiBUaGVyZSBhcmUgdGhyZWUgY2FzZXMgZm9yIHRoZSB2YWx1ZXMgIG9mICB0aGUgIG90aGVyCisgICAgICAgSklUICBzdGFjayAgaXMgIHVzZWQuIFRoZXJlIGFyZSB0aHJlZSBjYXNlcyBmb3IgdGhlIHZhbHVlcyBvZiB0aGUgb3RoZXIKICAgICAgICB0d28gb3B0aW9uczoKIAogICAgICAgICAgKDEpIElmIGNhbGxiYWNrIGlzIE5VTEwgYW5kIGRhdGEgaXMgTlVMTCwgYW4gaW50ZXJuYWwgMzJLIGJsb2NrCkBAIC00Mjg3LDM0ICs0Mzk1LDM0IEBACiAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlIG11c3QgYmUgYSB2YWxpZCBKSVQgc3RhY2ssIHRoZSByZXN1bHQgb2YgY2FsbGluZwogICAgICAgICAgICAgIHBjcmUyX2ppdF9zdGFja19jcmVhdGUoKS4KIAotICAgICAgIEEgIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIG9iZXllZCB3aGVuZXZlciBKSVQgY29kZSBpcyBhYm91dCB0byBiZSBydW47IGl0CisgICAgICAgQSBjYWxsYmFjayBmdW5jdGlvbiBpcyBvYmV5ZWQgd2hlbmV2ZXIgSklUIGNvZGUgaXMgYWJvdXQgdG8gYmUgcnVuOyAgaXQKICAgICAgICBpcyBub3Qgb2JleWVkIHdoZW4gcGNyZTJfbWF0Y2goKSBpcyBjYWxsZWQgd2l0aCBvcHRpb25zIHRoYXQgYXJlIGluY29tLQotICAgICAgIHBhdGlibGUgIGZvciBKSVQgbWF0Y2hpbmcuIEEgY2FsbGJhY2sgZnVuY3Rpb24gY2FuIHRoZXJlZm9yZSBiZSB1c2VkIHRvCi0gICAgICAgZGV0ZXJtaW5lIHdoZXRoZXIgYSBtYXRjaCBvcGVyYXRpb24gd2FzICBleGVjdXRlZCAgYnkgIEpJVCAgb3IgIGJ5ICB0aGUKKyAgICAgICBwYXRpYmxlIGZvciBKSVQgbWF0Y2hpbmcuIEEgY2FsbGJhY2sgZnVuY3Rpb24gY2FuIHRoZXJlZm9yZSBiZSB1c2VkICB0bworICAgICAgIGRldGVybWluZSAgd2hldGhlciAgYSAgbWF0Y2ggIG9wZXJhdGlvbiAgd2FzICBleGVjdXRlZCBieSBKSVQgb3IgYnkgdGhlCiAgICAgICAgaW50ZXJwcmV0ZXIuCiAKICAgICAgICBZb3UgbWF5IHNhZmVseSB1c2UgdGhlIHNhbWUgSklUIHN0YWNrIGZvciBtb3JlIHRoYW4gb25lIHBhdHRlcm4gKGVpdGhlcgotICAgICAgIGJ5IGFzc2lnbmluZyBkaXJlY3RseSBvciBieSBjYWxsYmFjayksIGFzICBsb25nICBhcyAgdGhlICBwYXR0ZXJucyAgYXJlCisgICAgICAgYnkgIGFzc2lnbmluZyAgZGlyZWN0bHkgIG9yICBieSAgY2FsbGJhY2spLCBhcyBsb25nIGFzIHRoZSBwYXR0ZXJucyBhcmUKICAgICAgICBtYXRjaGVkIHNlcXVlbnRpYWxseSBpbiB0aGUgc2FtZSB0aHJlYWQuIEN1cnJlbnRseSwgdGhlIG9ubHkgd2F5IHRvIHNldAotICAgICAgIHVwIG5vbi1zZXF1ZW50aWFsIG1hdGNoZXMgaW4gb25lIHRocmVhZCBpcyB0byB1c2UgY2FsbG91dHM6IGlmIGEgIGNhbGwtCi0gICAgICAgb3V0ICBmdW5jdGlvbiBzdGFydHMgYW5vdGhlciBtYXRjaCwgdGhhdCBtYXRjaCBtdXN0IHVzZSBhIGRpZmZlcmVudCBKSVQKKyAgICAgICB1cCAgbm9uLXNlcXVlbnRpYWwgbWF0Y2hlcyBpbiBvbmUgdGhyZWFkIGlzIHRvIHVzZSBjYWxsb3V0czogaWYgYSBjYWxsLQorICAgICAgIG91dCBmdW5jdGlvbiBzdGFydHMgYW5vdGhlciBtYXRjaCwgdGhhdCBtYXRjaCBtdXN0IHVzZSBhIGRpZmZlcmVudCAgSklUCiAgICAgICAgc3RhY2sgdG8gdGhlIG9uZSB1c2VkIGZvciBjdXJyZW50bHkgc3VzcGVuZGVkIG1hdGNoKGVzKS4KIAotICAgICAgIEluIGEgbXVsdGl0aHJlYWQgYXBwbGljYXRpb24sIGlmIHlvdSBkbyBub3Qgc3BlY2lmeSBhIEpJVCBzdGFjaywgb3IgIGlmCi0gICAgICAgeW91ICBhc3NpZ24gIG9yICBwYXNzICBiYWNrICBOVUxMIGZyb20gYSBjYWxsYmFjaywgdGhhdCBpcyB0aHJlYWQtc2FmZSwKLSAgICAgICBiZWNhdXNlIGVhY2ggdGhyZWFkIGhhcyBpdHMgb3duIG1hY2hpbmUgc3RhY2suIEhvd2V2ZXIsIGlmICB5b3UgIGFzc2lnbgotICAgICAgIG9yICBwYXNzICBiYWNrIGEgbm9uLU5VTEwgSklUIHN0YWNrLCB0aGlzIG11c3QgYmUgYSBkaWZmZXJlbnQgc3RhY2sgZm9yCisgICAgICAgSW4gIGEgbXVsdGl0aHJlYWQgYXBwbGljYXRpb24sIGlmIHlvdSBkbyBub3Qgc3BlY2lmeSBhIEpJVCBzdGFjaywgb3IgaWYKKyAgICAgICB5b3UgYXNzaWduIG9yIHBhc3MgYmFjayBOVUxMIGZyb20gIGEgIGNhbGxiYWNrLCAgdGhhdCAgaXMgIHRocmVhZC1zYWZlLAorICAgICAgIGJlY2F1c2UgIGVhY2ggIHRocmVhZCBoYXMgaXRzIG93biBtYWNoaW5lIHN0YWNrLiBIb3dldmVyLCBpZiB5b3UgYXNzaWduCisgICAgICAgb3IgcGFzcyBiYWNrIGEgbm9uLU5VTEwgSklUIHN0YWNrLCB0aGlzIG11c3QgYmUgYSBkaWZmZXJlbnQgIHN0YWNrICBmb3IKICAgICAgICBlYWNoIHRocmVhZCBzbyB0aGF0IHRoZSBhcHBsaWNhdGlvbiBpcyB0aHJlYWQtc2FmZS4KIAotICAgICAgIFN0cmljdGx5IHNwZWFraW5nLCBldmVuIG1vcmUgaXMgYWxsb3dlZC4gWW91IGNhbiBhc3NpZ24gdGhlICBzYW1lICBub24tCi0gICAgICAgTlVMTCAgc3RhY2sgIHRvIGEgbWF0Y2ggY29udGV4dCB0aGF0IGlzIHVzZWQgYnkgYW55IG51bWJlciBvZiBwYXR0ZXJucywKLSAgICAgICBhcyBsb25nIGFzIHRoZXkgYXJlIG5vdCB1c2VkIGZvciBtYXRjaGluZyBieSBtdWx0aXBsZSAgdGhyZWFkcyAgYXQgIHRoZQotICAgICAgIHNhbWUgIHRpbWUuICBGb3IgIGV4YW1wbGUsIHlvdSBjb3VsZCB1c2UgdGhlIHNhbWUgc3RhY2sgaW4gYWxsIGNvbXBpbGVkCi0gICAgICAgcGF0dGVybnMsIHdpdGggYSBnbG9iYWwgbXV0ZXggaW4gdGhlIGNhbGxiYWNrIHRvIHdhaXQgdW50aWwgIHRoZSAgc3RhY2sKKyAgICAgICBTdHJpY3RseSAgc3BlYWtpbmcsICBldmVuIG1vcmUgaXMgYWxsb3dlZC4gWW91IGNhbiBhc3NpZ24gdGhlIHNhbWUgbm9uLQorICAgICAgIE5VTEwgc3RhY2sgdG8gYSBtYXRjaCBjb250ZXh0IHRoYXQgaXMgdXNlZCBieSBhbnkgbnVtYmVyICBvZiAgcGF0dGVybnMsCisgICAgICAgYXMgIGxvbmcgIGFzICB0aGV5IGFyZSBub3QgdXNlZCBmb3IgbWF0Y2hpbmcgYnkgbXVsdGlwbGUgdGhyZWFkcyBhdCB0aGUKKyAgICAgICBzYW1lIHRpbWUuIEZvciBleGFtcGxlLCB5b3UgY291bGQgdXNlIHRoZSBzYW1lIHN0YWNrICBpbiAgYWxsICBjb21waWxlZAorICAgICAgIHBhdHRlcm5zLCAgd2l0aCAgYSBnbG9iYWwgbXV0ZXggaW4gdGhlIGNhbGxiYWNrIHRvIHdhaXQgdW50aWwgdGhlIHN0YWNrCiAgICAgICAgaXMgYXZhaWxhYmxlIGZvciB1c2UuIEhvd2V2ZXIsIHRoaXMgaXMgYW4gaW5lZmZpY2llbnQgc29sdXRpb24sIGFuZCBub3QKICAgICAgICByZWNvbW1lbmRlZC4KIAotICAgICAgIFRoaXMgaXMgYSBzdWdnZXN0aW9uIGZvciBob3cgYSBtdWx0aXRocmVhZGVkIHByb2dyYW0gdGhhdCBuZWVkcyB0byAgc2V0CisgICAgICAgVGhpcyAgaXMgYSBzdWdnZXN0aW9uIGZvciBob3cgYSBtdWx0aXRocmVhZGVkIHByb2dyYW0gdGhhdCBuZWVkcyB0byBzZXQKICAgICAgICB1cCBub24tZGVmYXVsdCBKSVQgc3RhY2tzIG1pZ2h0IG9wZXJhdGU6CiAKICAgICAgICAgIER1cmluZyB0aHJlYWQgaW5pdGFsaXphdGlvbgpAQCAtNDMyNiw3ICs0NDM0LDcgQEAKICAgICAgICAgIFVzZSBhIG9uZS1saW5lIGNhbGxiYWNrIGZ1bmN0aW9uCiAgICAgICAgICAgIHJldHVybiB0aHJlYWRfbG9jYWxfdmFyCiAKLSAgICAgICBBbGwgIHRoZSAgZnVuY3Rpb25zICBkZXNjcmliZWQgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdGhpbmcgaWYgSklUIGlzIG5vdAorICAgICAgIEFsbCB0aGUgZnVuY3Rpb25zIGRlc2NyaWJlZCBpbiB0aGlzIHNlY3Rpb24gZG8gbm90aGluZyBpZiAgSklUICBpcyAgbm90CiAgICAgICAgYXZhaWxhYmxlLgogCiAKQEAgLTQzMzUsMjAgKzQ0NDMsMjAgQEAKICAgICAgICAoMSkgV2h5IGRvIHdlIG5lZWQgSklUIHN0YWNrcz8KIAogICAgICAgIFBDUkUyIChhbmQgSklUKSBpcyBhIHJlY3Vyc2l2ZSwgZGVwdGgtZmlyc3QgZW5naW5lLCBzbyBpdCBuZWVkcyBhIHN0YWNrCi0gICAgICAgd2hlcmUgIHRoZSBsb2NhbCBkYXRhIG9mIHRoZSBjdXJyZW50IG5vZGUgaXMgcHVzaGVkIGJlZm9yZSBjaGVja2luZyBpdHMKKyAgICAgICB3aGVyZSB0aGUgbG9jYWwgZGF0YSBvZiB0aGUgY3VycmVudCBub2RlIGlzIHB1c2hlZCBiZWZvcmUgY2hlY2tpbmcgIGl0cwogICAgICAgIGNoaWxkIG5vZGVzLiAgQWxsb2NhdGluZyByZWFsIG1hY2hpbmUgc3RhY2sgb24gc29tZSBwbGF0Zm9ybXMgaXMgZGlmZmktCiAgICAgICAgY3VsdC4gRm9yIGV4YW1wbGUsIHRoZSBzdGFjayBjaGFpbiBuZWVkcyB0byBiZSB1cGRhdGVkIGV2ZXJ5IHRpbWUgaWYgd2UKLSAgICAgICBleHRlbmQgdGhlIHN0YWNrIG9uIFBvd2VyUEMuICBBbHRob3VnaCBpdCAgaXMgIHBvc3NpYmxlLCAgaXRzICB1cGRhdGluZworICAgICAgIGV4dGVuZCAgdGhlICBzdGFjayAgb24gIFBvd2VyUEMuICBBbHRob3VnaCBpdCBpcyBwb3NzaWJsZSwgaXRzIHVwZGF0aW5nCiAgICAgICAgdGltZSBvdmVyaGVhZCBkZWNyZWFzZXMgcGVyZm9ybWFuY2UuIFNvIHdlIGRvIHRoZSByZWN1cnNpb24gaW4gbWVtb3J5LgogCiAgICAgICAgKDIpIFdoeSBkb24ndCB3ZSBzaW1wbHkgYWxsb2NhdGUgYmxvY2tzIG9mIG1lbW9yeSB3aXRoIG1hbGxvYygpPwogCi0gICAgICAgTW9kZXJuICBvcGVyYXRpbmcgIHN5c3RlbXMgIGhhdmUgIGEgIG5pY2UgIGZlYXR1cmU6IHRoZXkgY2FuIHJlc2VydmUgYW4KKyAgICAgICBNb2Rlcm4gb3BlcmF0aW5nIHN5c3RlbXMgaGF2ZSBhICBuaWNlICBmZWF0dXJlOiAgdGhleSAgY2FuICByZXNlcnZlICBhbgogICAgICAgIGFkZHJlc3Mgc3BhY2UgaW5zdGVhZCBvZiBhbGxvY2F0aW5nIG1lbW9yeS4gV2UgY2FuIHNhZmVseSBhbGxvY2F0ZSBtZW0tCi0gICAgICAgb3J5ICBwYWdlcyAgaW5zaWRlICB0aGlzIGFkZHJlc3Mgc3BhY2UsIHNvIHRoZSBzdGFjayBjb3VsZCBncm93IHdpdGhvdXQKKyAgICAgICBvcnkgcGFnZXMgaW5zaWRlIHRoaXMgYWRkcmVzcyBzcGFjZSwgc28gdGhlIHN0YWNrICBjb3VsZCAgZ3JvdyAgd2l0aG91dAogICAgICAgIG1vdmluZyBtZW1vcnkgZGF0YSAodGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBvZiBwb2ludGVycykuIFRodXMgd2UgY2FuCi0gICAgICAgYWxsb2NhdGUgIDFNICBhZGRyZXNzIHNwYWNlLCBhbmQgdXNlIG9ubHkgYSBzaW5nbGUgbWVtb3J5IHBhZ2UgKHVzdWFsbHkKLSAgICAgICA0SykgaWYgdGhhdCBpcyBlbm91Z2guIEhvd2V2ZXIsIHdlIGNhbiBzdGlsbCBncm93IHVwIHRvIDFNICBhbnl0aW1lICBpZgorICAgICAgIGFsbG9jYXRlIDFNIGFkZHJlc3Mgc3BhY2UsIGFuZCB1c2Ugb25seSBhIHNpbmdsZSBtZW1vcnkgIHBhZ2UgICh1c3VhbGx5CisgICAgICAgNEspICBpZiAgdGhhdCBpcyBlbm91Z2guIEhvd2V2ZXIsIHdlIGNhbiBzdGlsbCBncm93IHVwIHRvIDFNIGFueXRpbWUgaWYKICAgICAgICBuZWVkZWQuCiAKICAgICAgICAoMykgV2hvICJvd25zIiBhIEpJVCBzdGFjaz8KQEAgLTQzNTYsOCArNDQ2NCw4IEBACiAgICAgICAgVGhlIG93bmVyIG9mIHRoZSBzdGFjayBpcyB0aGUgdXNlciBwcm9ncmFtLCBub3QgdGhlIEpJVCBzdHVkaWVkIHBhdHRlcm4KICAgICAgICBvciBhbnl0aGluZyBlbHNlLiBUaGUgdXNlciBwcm9ncmFtIG11c3QgZW5zdXJlIHRoYXQgaWYgYSBzdGFjayBpcyBiZWluZwogICAgICAgIHVzZWQgYnkgcGNyZTJfbWF0Y2goKSwgKHRoYXQgaXMsIGl0IGlzIGFzc2lnbmVkIHRvIGEgbWF0Y2ggY29udGV4dCB0aGF0Ci0gICAgICAgaXMgcGFzc2VkIHRvIHRoZSBwYXR0ZXJuIGN1cnJlbnRseSBydW5uaW5nKSwgdGhhdCAgc3RhY2sgIG11c3QgIG5vdCAgYmUKLSAgICAgICB1c2VkICBieSBhbnkgb3RoZXIgdGhyZWFkcyAodG8gYXZvaWQgb3ZlcndyaXRpbmcgdGhlIHNhbWUgbWVtb3J5IGFyZWEpLgorICAgICAgIGlzICBwYXNzZWQgIHRvICB0aGUgIHBhdHRlcm4gY3VycmVudGx5IHJ1bm5pbmcpLCB0aGF0IHN0YWNrIG11c3Qgbm90IGJlCisgICAgICAgdXNlZCBieSBhbnkgb3RoZXIgdGhyZWFkcyAodG8gYXZvaWQgb3ZlcndyaXRpbmcgdGhlIHNhbWUgbWVtb3J5ICBhcmVhKS4KICAgICAgICBUaGUgYmVzdCBwcmFjdGljZSBmb3IgbXVsdGl0aHJlYWRlZCBwcm9ncmFtcyBpcyB0byBhbGxvY2F0ZSBhIHN0YWNrIGZvcgogICAgICAgIGVhY2ggdGhyZWFkLCBhbmQgcmV0dXJuIHRoaXMgc3RhY2sgdGhyb3VnaCB0aGUgSklUIGNhbGxiYWNrIGZ1bmN0aW9uLgogCkBAIC00MzY1LDM2ICs0NDczLDM2IEBACiAKICAgICAgICBZb3UgY2FuIGZyZWUgYSBKSVQgc3RhY2sgYXQgYW55IHRpbWUsIGFzIGxvbmcgYXMgaXQgd2lsbCBub3QgYmUgdXNlZCBieQogICAgICAgIHBjcmUyX21hdGNoKCkgYWdhaW4uIFdoZW4geW91IGFzc2lnbiB0aGUgc3RhY2sgdG8gYSBtYXRjaCBjb250ZXh0LCBvbmx5Ci0gICAgICAgYSAgcG9pbnRlciAgaXMgIHNldC4gVGhlcmUgaXMgbm8gcmVmZXJlbmNlIGNvdW50aW5nIG9yIGFueSBvdGhlciBtYWdpYy4KKyAgICAgICBhIHBvaW50ZXIgaXMgc2V0LiBUaGVyZSBpcyBubyByZWZlcmVuY2UgY291bnRpbmcgb3IgIGFueSAgb3RoZXIgIG1hZ2ljLgogICAgICAgIFlvdSBjYW4gZnJlZSBjb21waWxlZCBwYXR0ZXJucywgY29udGV4dHMsIGFuZCBzdGFja3MgaW4gYW55IG9yZGVyLCBhbnktCi0gICAgICAgdGltZS4gIEp1c3QgIGRvIG5vdCBjYWxsIHBjcmUyX21hdGNoKCkgd2l0aCBhIG1hdGNoIGNvbnRleHQgcG9pbnRpbmcgdG8KKyAgICAgICB0aW1lLiBKdXN0IGRvIG5vdCBjYWxsIHBjcmUyX21hdGNoKCkgd2l0aCBhIG1hdGNoIGNvbnRleHQgIHBvaW50aW5nICB0bwogICAgICAgIGFuIGFscmVhZHkgZnJlZWQgc3RhY2ssIGFzIHRoYXQgd2lsbCBjYXVzZSBTRUdGQVVMVC4gKEFsc28sIGRvIG5vdCBmcmVlCi0gICAgICAgYSAgc3RhY2sgIGN1cnJlbnRseSAgdXNlZCAgYnkgcGNyZTJfbWF0Y2goKSBpbiBhbm90aGVyIHRocmVhZCkuIFlvdSBjYW4KLSAgICAgICBhbHNvIHJlcGxhY2UgdGhlIHN0YWNrIGluIGEgY29udGV4dCBhdCBhbnkgdGltZSB3aGVuIGl0IGlzIG5vdCBpbiAgdXNlLgorICAgICAgIGEgc3RhY2sgY3VycmVudGx5IHVzZWQgYnkgcGNyZTJfbWF0Y2goKSBpbiAgYW5vdGhlciAgdGhyZWFkKS4gIFlvdSAgY2FuCisgICAgICAgYWxzbyAgcmVwbGFjZSB0aGUgc3RhY2sgaW4gYSBjb250ZXh0IGF0IGFueSB0aW1lIHdoZW4gaXQgaXMgbm90IGluIHVzZS4KICAgICAgICBZb3Ugc2hvdWxkIGZyZWUgdGhlIHByZXZpb3VzIHN0YWNrIGJlZm9yZSBhc3NpZ25pbmcgYSByZXBsYWNlbWVudC4KIAotICAgICAgICg1KSAgU2hvdWxkICBJICBhbGxvY2F0ZS9mcmVlICBhICBzdGFjayBldmVyeSB0aW1lIGJlZm9yZS9hZnRlciBjYWxsaW5nCisgICAgICAgKDUpIFNob3VsZCBJIGFsbG9jYXRlL2ZyZWUgYSAgc3RhY2sgIGV2ZXJ5ICB0aW1lICBiZWZvcmUvYWZ0ZXIgIGNhbGxpbmcKICAgICAgICBwY3JlMl9tYXRjaCgpPwogCi0gICAgICAgTm8sIGJlY2F1c2UgdGhpcyBpcyB0b28gY29zdGx5IGluICB0ZXJtcyAgb2YgIHJlc291cmNlcy4gIEhvd2V2ZXIsICB5b3UKLSAgICAgICBjb3VsZCAgaW1wbGVtZW50ICBzb21lIGNsZXZlciBpZGVhIHdoaWNoIHJlbGVhc2UgdGhlIHN0YWNrIGlmIGl0IGlzIG5vdAotICAgICAgIHVzZWQgaW4gbGV0J3Mgc2F5IHR3byBtaW51dGVzLiBUaGUgSklUIGNhbGxiYWNrICBjYW4gIGhlbHAgIHRvICBhY2hpZXZlCisgICAgICAgTm8sICBiZWNhdXNlICB0aGlzICBpcyAgdG9vICBjb3N0bHkgaW4gdGVybXMgb2YgcmVzb3VyY2VzLiBIb3dldmVyLCB5b3UKKyAgICAgICBjb3VsZCBpbXBsZW1lbnQgc29tZSBjbGV2ZXIgaWRlYSB3aGljaCByZWxlYXNlIHRoZSBzdGFjayBpZiBpdCAgaXMgIG5vdAorICAgICAgIHVzZWQgIGluICBsZXQncyAgc2F5ICB0d28gbWludXRlcy4gVGhlIEpJVCBjYWxsYmFjayBjYW4gaGVscCB0byBhY2hpZXZlCiAgICAgICAgdGhpcyB3aXRob3V0IGtlZXBpbmcgYSBsaXN0IG9mIHBhdHRlcm5zLgogCi0gICAgICAgKDYpICBPSywgdGhlIHN0YWNrIGlzIGZvciBsb25nIHRlcm0gbWVtb3J5IGFsbG9jYXRpb24uIEJ1dCB3aGF0IGhhcHBlbnMKLSAgICAgICBpZiBhIHBhdHRlcm4gY2F1c2VzIHN0YWNrIG92ZXJmbG93IHdpdGggYSBzdGFjayBvZiAxTT8gSXMgdGhhdCAxTSAga2VwdAorICAgICAgICg2KSBPSywgdGhlIHN0YWNrIGlzIGZvciBsb25nIHRlcm0gbWVtb3J5IGFsbG9jYXRpb24uIEJ1dCB3aGF0ICBoYXBwZW5zCisgICAgICAgaWYgIGEgcGF0dGVybiBjYXVzZXMgc3RhY2sgb3ZlcmZsb3cgd2l0aCBhIHN0YWNrIG9mIDFNPyBJcyB0aGF0IDFNIGtlcHQKICAgICAgICB1bnRpbCB0aGUgc3RhY2sgaXMgZnJlZWQ/CiAKLSAgICAgICBFc3BlY2lhbGx5ICBvbiBlbWJlZGRlZCBzeXRlbXMsIGl0IG1pZ2h0IGJlIGEgZ29vZCBpZGVhIHRvIHJlbGVhc2UgbWVtLQotICAgICAgIG9yeSBzb21ldGltZXMgd2l0aG91dCBmcmVlaW5nIHRoZSBzdGFjay4gVGhlcmUgaXMgbm8gQVBJICBmb3IgIHRoaXMgIGF0Ci0gICAgICAgdGhlICBtb21lbnQuICBQcm9iYWJseSBhIGZ1bmN0aW9uIGNhbGwgd2hpY2ggcmV0dXJucyB3aXRoIHRoZSBjdXJyZW50bHkKLSAgICAgICBhbGxvY2F0ZWQgbWVtb3J5IGZvciBhbnkgc3RhY2sgYW5kIGFub3RoZXIgd2hpY2ggYWxsb3dzIHJlbGVhc2luZyAgbWVtLQorICAgICAgIEVzcGVjaWFsbHkgb24gZW1iZWRkZWQgc3l0ZW1zLCBpdCBtaWdodCBiZSBhIGdvb2QgaWRlYSB0byByZWxlYXNlICBtZW0tCisgICAgICAgb3J5ICBzb21ldGltZXMgIHdpdGhvdXQgIGZyZWVpbmcgdGhlIHN0YWNrLiBUaGVyZSBpcyBubyBBUEkgZm9yIHRoaXMgYXQKKyAgICAgICB0aGUgbW9tZW50LiAgUHJvYmFibHkgYSBmdW5jdGlvbiBjYWxsIHdoaWNoIHJldHVybnMgd2l0aCB0aGUgIGN1cnJlbnRseQorICAgICAgIGFsbG9jYXRlZCAgbWVtb3J5IGZvciBhbnkgc3RhY2sgYW5kIGFub3RoZXIgd2hpY2ggYWxsb3dzIHJlbGVhc2luZyBtZW0tCiAgICAgICAgb3J5IChzaHJpbmtpbmcgdGhlIHN0YWNrKSB3b3VsZCBiZSBhIGdvb2QgaWRlYSBpZiBzb21lb25lIG5lZWRzIHRoaXMuCiAKICAgICAgICAoNykgVGhpcyBpcyB0b28gbXVjaCBvZiBhIGhlYWRhY2hlLiBJc24ndCB0aGVyZSBhbnkgYmV0dGVyIHNvbHV0aW9uIGZvcgogICAgICAgIEpJVCBzdGFjayBoYW5kbGluZz8KIAotICAgICAgIE5vLCB0aGFua3MgdG8gV2luZG93cy4gSWYgUE9TSVggdGhyZWFkcyB3ZXJlIHVzZWQgZXZlcnl3aGVyZSwgd2UgIGNvdWxkCisgICAgICAgTm8sICB0aGFua3MgdG8gV2luZG93cy4gSWYgUE9TSVggdGhyZWFkcyB3ZXJlIHVzZWQgZXZlcnl3aGVyZSwgd2UgY291bGQKICAgICAgICB0aHJvdyBvdXQgdGhpcyBjb21wbGljYXRlZCBBUEkuCiAKIApAQCAtNDQwMywxOCArNDUxMSwxOCBAQAogICAgICAgIHZvaWQgcGNyZTJfaml0X2ZyZWVfdW51c2VkX21lbW9yeShwY3JlMl9nZW5lcmFsX2NvbnRleHQgKmdjb250ZXh0KTsKIAogICAgICAgIFRoZSBKSVQgZXhlY3V0YWJsZSBhbGxvY2F0b3IgZG9lcyBub3QgZnJlZSBhbGwgbWVtb3J5IHdoZW4gaXQgaXMgcG9zc2ktCi0gICAgICAgYmxlLiAgSXQgZXhwZWN0cyBuZXcgYWxsb2NhdGlvbnMsIGFuZCBrZWVwcyBzb21lIGZyZWUgbWVtb3J5IGFyb3VuZCAgdG8KLSAgICAgICBpbXByb3ZlICBhbGxvY2F0aW9uICBzcGVlZC4gSG93ZXZlciwgaW4gbG93IG1lbW9yeSBjb25kaXRpb25zLCBpdCBtaWdodAotICAgICAgIGJlIGJldHRlciB0byBmcmVlIGFsbCBwb3NzaWJsZSBtZW1vcnkuIFlvdSBjYW4gY2F1c2UgdGhpcyB0byBoYXBwZW4gIGJ5Ci0gICAgICAgY2FsbGluZyAgcGNyZTJfaml0X2ZyZWVfdW51c2VkX21lbW9yeSgpLiBJdHMgYXJndW1lbnQgaXMgYSBnZW5lcmFsIGNvbi0KKyAgICAgICBibGUuICAgSXQgZXhwZWN0cyBuZXcgYWxsb2NhdGlvbnMsIGFuZCBrZWVwcyBzb21lIGZyZWUgbWVtb3J5IGFyb3VuZCB0bworICAgICAgIGltcHJvdmUgYWxsb2NhdGlvbiBzcGVlZC4gSG93ZXZlciwgaW4gbG93IG1lbW9yeSBjb25kaXRpb25zLCAgaXQgIG1pZ2h0CisgICAgICAgYmUgIGJldHRlciB0byBmcmVlIGFsbCBwb3NzaWJsZSBtZW1vcnkuIFlvdSBjYW4gY2F1c2UgdGhpcyB0byBoYXBwZW4gYnkKKyAgICAgICBjYWxsaW5nIHBjcmUyX2ppdF9mcmVlX3VudXNlZF9tZW1vcnkoKS4gSXRzIGFyZ3VtZW50IGlzIGEgZ2VuZXJhbCAgY29uLQogICAgICAgIHRleHQsIGZvciBjdXN0b20gbWVtb3J5IG1hbmFnZW1lbnQsIG9yIE5VTEwgZm9yIHN0YW5kYXJkIG1lbW9yeSBtYW5hZ2UtCiAgICAgICAgbWVudC4KIAogCiBFWEFNUExFIENPREUKIAotICAgICAgIFRoaXMgIGlzICBhICBzaW5nbGUtdGhyZWFkZWQgZXhhbXBsZSB0aGF0IHNwZWNpZmllcyBhIEpJVCBzdGFjayB3aXRob3V0Ci0gICAgICAgdXNpbmcgYSBjYWxsYmFjay4gQSByZWFsIHByb2dyYW0gc2hvdWxkIGluY2x1ZGUgIGVycm9yICBjaGVja2luZyAgYWZ0ZXIKKyAgICAgICBUaGlzIGlzIGEgc2luZ2xlLXRocmVhZGVkIGV4YW1wbGUgdGhhdCBzcGVjaWZpZXMgYSAgSklUICBzdGFjayAgd2l0aG91dAorICAgICAgIHVzaW5nICBhICBjYWxsYmFjay4gIEEgcmVhbCBwcm9ncmFtIHNob3VsZCBpbmNsdWRlIGVycm9yIGNoZWNraW5nIGFmdGVyCiAgICAgICAgYWxsIHRoZSBmdW5jdGlvbiBjYWxscy4KIAogICAgICAgICAgaW50IHJjOwpAQCAtNDQ0MiwxOSArNDU1MCwyMCBAQAogSklUIEZBU1QgUEFUSCBBUEkKIAogICAgICAgIEJlY2F1c2UgdGhlIEFQSSBkZXNjcmliZWQgYWJvdmUgZmFsbHMgYmFjayB0byBpbnRlcnByZXRlZCBtYXRjaGluZyB3aGVuCi0gICAgICAgSklUIGlzIG5vdCBhdmFpbGFibGUsIGl0IGlzIGNvbnZlbmllbnQgZm9yIHByb2dyYW1zICB0aGF0ICBhcmUgIHdyaXR0ZW4KKyAgICAgICBKSVQgIGlzICBub3QgIGF2YWlsYWJsZSwgaXQgaXMgY29udmVuaWVudCBmb3IgcHJvZ3JhbXMgdGhhdCBhcmUgd3JpdHRlbgogICAgICAgIGZvciAgZ2VuZXJhbCAgdXNlICBpbiAgbWFueSAgZW52aXJvbm1lbnRzLiAgSG93ZXZlciwgIGNhbGxpbmcgIEpJVCAgdmlhCiAgICAgICAgcGNyZTJfbWF0Y2goKSBkb2VzIGhhdmUgYSBwZXJmb3JtYW5jZSBpbXBhY3QuIFByb2dyYW1zIHRoYXQgYXJlIHdyaXR0ZW4KLSAgICAgICBmb3IgIHVzZSAgd2hlcmUgIEpJVCAgaXMga25vd24gdG8gYmUgYXZhaWxhYmxlLCBhbmQgd2hpY2ggbmVlZCB0aGUgYmVzdAotICAgICAgIHBvc3NpYmxlIHBlcmZvcm1hbmNlLCBjYW4gaW5zdGVhZCB1c2UgYSAiZmFzdCBwYXRoIiAgQVBJICB0byAgY2FsbCAgSklUCi0gICAgICAgbWF0Y2hpbmcgIGRpcmVjdGx5IGluc3RlYWQgb2YgY2FsbGluZyBwY3JlMl9tYXRjaCgpIChvYnZpb3VzbHkgb25seSBmb3IKKyAgICAgICBmb3IgdXNlIHdoZXJlIEpJVCBpcyBrbm93biB0byBiZSBhdmFpbGFibGUsIGFuZCAgd2hpY2ggIG5lZWQgIHRoZSAgYmVzdAorICAgICAgIHBvc3NpYmxlICBwZXJmb3JtYW5jZSwgIGNhbiAgaW5zdGVhZCAgdXNlIGEgImZhc3QgcGF0aCIgQVBJIHRvIGNhbGwgSklUCisgICAgICAgbWF0Y2hpbmcgZGlyZWN0bHkgaW5zdGVhZCBvZiBjYWxsaW5nIHBjcmUyX21hdGNoKCkgKG9idmlvdXNseSBvbmx5ICBmb3IKICAgICAgICBwYXR0ZXJucyB0aGF0IGhhdmUgYmVlbiBzdWNjZXNzZnVsbHkgcHJvY2Vzc2VkIGJ5IHBjcmUyX2ppdF9jb21waWxlKCkpLgogCi0gICAgICAgVGhlIGZhc3QgcGF0aCAgZnVuY3Rpb24gIGlzICBjYWxsZWQgIHBjcmUyX2ppdF9tYXRjaCgpLCAgYW5kICBpdCAgdGFrZXMKKyAgICAgICBUaGUgIGZhc3QgIHBhdGggIGZ1bmN0aW9uICBpcyAgY2FsbGVkICBwY3JlMl9qaXRfbWF0Y2goKSwgIGFuZCBpdCB0YWtlcwogICAgICAgIGV4YWN0bHkgdGhlIHNhbWUgYXJndW1lbnRzIGFzIHBjcmUyX21hdGNoKCkuIFRoZSByZXR1cm4gdmFsdWVzIGFyZSBhbHNvCiAgICAgICAgdGhlIHNhbWUsIHBsdXMgUENSRTJfRVJST1JfSklUX0JBRE9QVElPTiBpZiBhIG1hdGNoaW5nIG1vZGUgKHBhcnRpYWwgb3IKLSAgICAgICBjb21wbGV0ZSkgIGlzICByZXF1ZXN0ZWQgdGhhdCB3YXMgbm90IGNvbXBpbGVkLiBVbnN1cHBvcnRlZCBvcHRpb24gYml0cwotICAgICAgIChmb3IgZXhhbXBsZSwgUENSRTJfQU5DSE9SRUQpIGFyZSBpZ25vcmVkLgorICAgICAgIGNvbXBsZXRlKSBpcyByZXF1ZXN0ZWQgdGhhdCB3YXMgbm90IGNvbXBpbGVkLiBVbnN1cHBvcnRlZCAgb3B0aW9uICBiaXRzCisgICAgICAgKGZvciAgZXhhbXBsZSwgIFBDUkUyX0FOQ0hPUkVEKSAgYXJlICBpZ25vcmVkLCAgYXMgIGlzIHRoZSBQQ1JFMl9OT19KSVQKKyAgICAgICBvcHRpb24uCiAKICAgICAgICBXaGVuIHlvdSBjYWxsIHBjcmUyX21hdGNoKCksIGFzIHdlbGwgYXMgdGVzdGluZyBmb3IgaW52YWxpZCBvcHRpb25zLCAgYQogICAgICAgIG51bWJlciBvZiBvdGhlciBzYW5pdHkgY2hlY2tzIGFyZSBwZXJmb3JtZWQgb24gdGhlIGFyZ3VtZW50cy4gRm9yIGV4YW0tCkBAIC00NDgxLDggKzQ1OTAsOCBAQAogCiBSRVZJU0lPTgogCi0gICAgICAgTGFzdCB1cGRhdGVkOiAxNCBOb3ZlbWJlciAyMDE1Ci0gICAgICAgQ29weXJpZ2h0IChjKSAxOTk3LTIwMTUgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UuCisgICAgICAgTGFzdCB1cGRhdGVkOiAwNSBKdW5lIDIwMTYKKyAgICAgICBDb3B5cmlnaHQgKGMpIDE5OTctMjAxNiBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZS4KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAKQEAgLTYyMjksMTcgKzYzMzgsMjEgQEAKICAgICAgICBwb3NzaWJsZSB0byBidWlsZCBQQ1JFMiB3aXRoIHRoZSB1c2Ugb2YgXEMgcGVybWFuZW50bHkgZGlzYWJsZWQuCiAKICAgICAgICBQQ1JFMiAgZG9lcyAgbm90IGFsbG93IFxDIHRvIGFwcGVhciBpbiBsb29rYmVoaW5kIGFzc2VydGlvbnMgKGRlc2NyaWJlZAotICAgICAgIGJlbG93KSBpbiBhIFVURiBtb2RlLCBiZWNhdXNlIHRoaXMgd291bGQgbWFrZSBpdCBpbXBvc3NpYmxlICB0byAgY2FsY3UtCi0gICAgICAgbGF0ZSAgdGhlICBsZW5ndGggIG9mICB0aGUgbG9va2JlaGluZC4gTmVpdGhlciB0aGUgYWx0ZXJuYXRpdmUgbWF0Y2hpbmcKLSAgICAgICBmdW5jdGlvbiBwY3JlMl9kZmFfbWF0Y2goKSBub3QgdGhlIEpJVCBvcHRpbWl6ZXIgc3VwcG9ydCBcQyAgaW4gIGEgIFVURgotICAgICAgIG1vZGUuIFRoZSBmb3JtZXIgZ2l2ZXMgYSBtYXRjaC10aW1lIGVycm9yOyB0aGUgbGF0dGVyIGZhaWxzIHRvIG9wdGltaXplCi0gICAgICAgYW5kIHNvIHRoZSBtYXRjaCBpcyBhbHdheXMgcnVuIHVzaW5nIHRoZSBpbnRlcnByZXRlci4KKyAgICAgICBiZWxvdykgaW4gVVRGLTggb3IgVVRGLTE2IG1vZGVzLCBiZWNhdXNlIHRoaXMgd291bGQgbWFrZSBpdCAgaW1wb3NzaWJsZQorICAgICAgIHRvICBjYWxjdWxhdGUgIHRoZSAgbGVuZ3RoICBvZiAgdGhlIGxvb2tiZWhpbmQuIE5laXRoZXIgdGhlIGFsdGVybmF0aXZlCisgICAgICAgbWF0Y2hpbmcgZnVuY3Rpb24gcGNyZTJfZGZhX21hdGNoKCkgbm9yIHRoZSBKSVQgb3B0aW1pemVyIHN1cHBvcnQgXEMgaW4KKyAgICAgICB0aGVzZSBVVEYgbW9kZXMuICBUaGUgZm9ybWVyIGdpdmVzIGEgbWF0Y2gtdGltZSBlcnJvcjsgdGhlIGxhdHRlciBmYWlscworICAgICAgIHRvIG9wdGltaXplIGFuZCBzbyB0aGUgbWF0Y2ggaXMgYWx3YXlzIHJ1biB1c2luZyB0aGUgaW50ZXJwcmV0ZXIuCisKKyAgICAgICBJbiB0aGUgMzItYml0IGxpYnJhcnksICBob3dldmVyLCAgXEMgIGlzICBhbHdheXMgIHN1cHBvcnRlZCAgKHdoZW4gIG5vdAorICAgICAgIGV4cGxpY2l0bHkgIGxvY2tlZCAgb3V0KSAgYmVjYXVzZSBpdCBhbHdheXMgbWF0Y2hlcyBhIHNpbmdsZSBjb2RlIHVuaXQsCisgICAgICAgd2hldGhlciBvciBub3QgVVRGLTMyIGlzIHNwZWNpZmllZC4KIAogICAgICAgIEluIGdlbmVyYWwsIHRoZSBcQyBlc2NhcGUgc2VxdWVuY2UgaXMgYmVzdCBhdm9pZGVkLiBIb3dldmVyLCBvbmUgd2F5IG9mCi0gICAgICAgdXNpbmcgIGl0IHRoYXQgYXZvaWRzIHRoZSBwcm9ibGVtIG9mIG1hbGZvcm1lZCBVVEYgY2hhcmFjdGVycyBpcyB0byB1c2UKLSAgICAgICBhIGxvb2thaGVhZCB0byBjaGVjayB0aGUgbGVuZ3RoIG9mIHRoZSBuZXh0IGNoYXJhY3RlciwgYXMgaW4gdGhpcyAgcGF0LQotICAgICAgIHRlcm4sICB3aGljaCAgY291bGQgYmUgdXNlZCB3aXRoIGEgVVRGLTggc3RyaW5nIChpZ25vcmUgd2hpdGUgc3BhY2UgYW5kCi0gICAgICAgbGluZSBicmVha3MpOgorICAgICAgIHVzaW5nICBpdCAgdGhhdCBhdm9pZHMgdGhlIHByb2JsZW0gb2YgbWFsZm9ybWVkIFVURi04IG9yIFVURi0xNiBjaGFyYWMtCisgICAgICAgdGVycyBpcyB0byB1c2UgYSBsb29rYWhlYWQgdG8gY2hlY2sgdGhlIGxlbmd0aCBvZiB0aGUgIG5leHQgIGNoYXJhY3RlciwKKyAgICAgICBhcyAgaW4gIHRoaXMgIHBhdHRlcm4sICB3aGljaCBjb3VsZCBiZSB1c2VkIHdpdGggYSBVVEYtOCBzdHJpbmcgKGlnbm9yZQorICAgICAgIHdoaXRlIHNwYWNlIGFuZCBsaW5lIGJyZWFrcyk6CiAKICAgICAgICAgICg/fCAoPz1bXHgwMC1ceDdmXSkoXEMpIHwKICAgICAgICAgICAgICAoPz1bXHg4MC1ceHs3ZmZ9XSkoXEMpKFxDKSB8CkBAIC04MjU0LDggKzgzNjcsOCBAQAogCiBSRVZJU0lPTgogCi0gICAgICAgTGFzdCB1cGRhdGVkOiAxMyBOb3ZlbWJlciAyMDE1Ci0gICAgICAgQ29weXJpZ2h0IChjKSAxOTk3LTIwMTUgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UuCisgICAgICAgTGFzdCB1cGRhdGVkOiAyMCBKdW5lIDIwMTYKKyAgICAgICBDb3B5cmlnaHQgKGMpIDE5OTctMjAxNiBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZS4KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAKQEAgLTg0NjAsNyArODU3Myw3IEBACiAgICAgICAgVGhpcyAgc2V0IG9mIGZ1bmN0aW9ucyBwcm92aWRlcyBhIFBPU0lYLXN0eWxlIEFQSSBmb3IgdGhlIFBDUkUyIHJlZ3VsYXIKICAgICAgICBleHByZXNzaW9uIDgtYml0IGxpYnJhcnkuIFNlZSB0aGUgcGNyZTJhcGkgZG9jdW1lbnRhdGlvbiBmb3IgYSBkZXNjcmlwLQogICAgICAgIHRpb24gIG9mIFBDUkUyJ3MgbmF0aXZlIEFQSSwgd2hpY2ggY29udGFpbnMgbXVjaCBhZGRpdGlvbmFsIGZ1bmN0aW9uYWwtCi0gICAgICAgaXR5LiBUaGVyZSBpcyBubyBQT1NJWC1zdHlsZSB3cmFwcGVyICBmb3IgIFBDUkUyJ3MgIDE2LWJpdCAgYW5kICAzMi1iaXQKKyAgICAgICBpdHkuIFRoZXJlIGFyZSBubyBQT1NJWC1zdHlsZSB3cmFwcGVycyBmb3IgUENSRTIncyAgMTYtYml0ICBhbmQgIDMyLWJpdAogICAgICAgIGxpYnJhcmllcy4KIAogICAgICAgIFRoZSBmdW5jdGlvbnMgZGVzY3JpYmVkIGhlcmUgYXJlIGp1c3Qgd3JhcHBlciBmdW5jdGlvbnMgdGhhdCB1bHRpbWF0ZWx5CkBAIC04NDc4LDggKzg1OTEsOCBAQAogICAgICAgIGVhc2llciAgdG8gIHNsb3QgaW4gUENSRTIgYXMgYSByZXBsYWNlbWVudCBsaWJyYXJ5LiBPdGhlciBQT1NJWCBvcHRpb25zCiAgICAgICAgYXJlIG5vdCBldmVuIGRlZmluZWQuCiAKLSAgICAgICBUaGVyZSBhcmUgYWxzbyBzb21lIG90aGVyIG9wdGlvbnMgdGhhdCBhcmUgbm90IGRlZmluZWQgYnkgUE9TSVguICBUaGVzZQotICAgICAgIGhhdmUgYmVlbiBhZGRlZCBhdCB0aGUgcmVxdWVzdCBvZiB1c2VycyB3aG8gd2FudCB0byBtYWtlIHVzZSBvZiBjZXJ0YWluCisgICAgICAgVGhlcmUgYXJlIGFsc28gc29tZSBvcHRpb25zIHRoYXQgYXJlIG5vdCBkZWZpbmVkIGJ5IFBPU0lYLiAgVGhlc2UgIGhhdmUKKyAgICAgICBiZWVuICBhZGRlZCAgYXQgIHRoZSAgcmVxdWVzdCAgb2YgdXNlcnMgd2hvIHdhbnQgdG8gbWFrZSB1c2Ugb2YgY2VydGFpbgogICAgICAgIFBDUkUyLXNwZWNpZmljIGZlYXR1cmVzIHZpYSB0aGUgUE9TSVggY2FsbGluZyBpbnRlcmZhY2UuCiAKICAgICAgICBXaGVuIFBDUkUyIGlzIGNhbGxlZCB2aWEgdGhlc2UgZnVuY3Rpb25zLCBpdCBpcyBvbmx5IHRoZSAgQVBJICB0aGF0ICBpcwpAQCAtODUzMCwxMSArODY0MywxMSBAQAogCiAgICAgICAgICBSRUdfTk9TVUIKIAotICAgICAgIFRoZSAgUENSRTJfTk9fQVVUT19DQVBUVVJFIG9wdGlvbiBpcyBzZXQgd2hlbiB0aGUgcmVndWxhciBleHByZXNzaW9uIGlzCi0gICAgICAgcGFzc2VkIGZvciBjb21waWxhdGlvbiB0byB0aGUgbmF0aXZlIGZ1bmN0aW9uLiBJbiBhZGRpdGlvbiwgd2hlbiBhIHBhdC0KLSAgICAgICB0ZXJuICB0aGF0IGlzIGNvbXBpbGVkIHdpdGggdGhpcyBmbGFnIGlzIHBhc3NlZCB0byByZWdleGVjKCkgZm9yIG1hdGNoLQotICAgICAgIGluZywgdGhlIG5tYXRjaCBhbmQgcG1hdGNoICBhcmd1bWVudHMgIGFyZSAgaWdub3JlZCwgIGFuZCAgbm8gIGNhcHR1cmVkCi0gICAgICAgc3RyaW5ncyBhcmUgcmV0dXJuZWQuCisgICAgICAgV2hlbiAgYSAgcGF0dGVybiB0aGF0IGlzIGNvbXBpbGVkIHdpdGggdGhpcyBmbGFnIGlzIHBhc3NlZCB0byByZWdleGVjKCkKKyAgICAgICBmb3IgbWF0Y2hpbmcsIHRoZSBubWF0Y2ggYW5kIHBtYXRjaCBhcmd1bWVudHMgYXJlIGlnbm9yZWQsIGFuZCBubyAgY2FwLQorICAgICAgIHR1cmVkIHN0cmluZ3MgYXJlIHJldHVybmVkLiBWZXJzaW9ucyBvZiB0aGUgUENSRSBsaWJyYXJ5IHByaW9yIHRvIDEwLjIyCisgICAgICAgdXNlZCB0byBzZXQgdGhlICBQQ1JFMl9OT19BVVRPX0NBUFRVUkUgIGNvbXBpbGUgIG9wdGlvbiwgIGJ1dCAgdGhpcyAgbm8KKyAgICAgICBsb25nZXIgaGFwcGVucyBiZWNhdXNlIGl0IGRpc2FibGVzIHRoZSB1c2Ugb2YgYmFjayByZWZlcmVuY2VzLgogCiAgICAgICAgICBSRUdfVUNQCiAKQEAgLTg2NTMsNDMgKzg3NjYsNDQgQEAKIAogICAgICAgIElmIHRoZSBwYXR0ZXJuIHdhcyBjb21waWxlZCB3aXRoIHRoZSBSRUdfTk9TVUIgZmxhZywgbm8gZGF0YSBhYm91dCAgYW55CiAgICAgICAgbWF0Y2hlZCAgc3RyaW5ncyAgaXMgIHJldHVybmVkLiAgVGhlICBubWF0Y2ggIGFuZCAgcG1hdGNoICBhcmd1bWVudHMgb2YKLSAgICAgICByZWdleGVjKCkgYXJlIGlnbm9yZWQuCisgICAgICAgcmVnZXhlYygpIGFyZSBpZ25vcmVkIChleGNlcHQgcG9zc2libHkgYXMgaW5wdXQgZm9yIFJFR19TVEFSVEVORCkuCiAKLSAgICAgICBJZiB0aGUgdmFsdWUgb2Ygbm1hdGNoIGlzIHplcm8sIG9yIGlmIHRoZSB2YWx1ZSBwbWF0Y2ggaXMgTlVMTCwgbm8gZGF0YQotICAgICAgIGFib3V0IGFueSBtYXRjaGVkIHN0cmluZ3MgaXMgcmV0dXJuZWQuCisgICAgICAgVGhlIHZhbHVlIG9mIG5tYXRjaCBtYXkgYmUgemVybywgYW5kICB0aGUgIHZhbHVlICBwbWF0Y2ggIG1heSAgYmUgIE5VTEwKKyAgICAgICAodW5sZXNzICBSRUdfU1RBUlRFTkQgIGlzICBzZXQpOyAgaW4gYm90aCB0aGVzZSBjYXNlcyBubyBkYXRhIGFib3V0IGFueQorICAgICAgIG1hdGNoZWQgc3RyaW5ncyBpcyByZXR1cm5lZC4KIAotICAgICAgIE90aGVyd2lzZSx0aGUgcG9ydGlvbiBvZiB0aGUgc3RyaW5nIHRoYXQgd2FzIG1hdGNoZWQsIGFuZCBhbHNvIGFueSBjYXAtCi0gICAgICAgdHVyZWQgc3Vic3RyaW5ncywgYXJlIHJldHVybmVkIHZpYSB0aGUgcG1hdGNoIGFyZ3VtZW50LCB3aGljaCBwb2ludHMgdG8KLSAgICAgICBhbiAgYXJyYXkgIG9mIG5tYXRjaCBzdHJ1Y3R1cmVzIG9mIHR5cGUgcmVnbWF0Y2hfdCwgY29udGFpbmluZyB0aGUgbWVtLQotICAgICAgIGJlcnMgcm1fc28gYW5kIHJtX2VvLiBUaGVzZSBjb250YWluIHRoZSBieXRlIG9mZnNldCB0byB0aGUgZmlyc3QgIGNoYXItCi0gICAgICAgYWN0ZXIgb2YgZWFjaCBzdWJzdHJpbmcgYW5kIHRoZSBvZmZzZXQgdG8gdGhlIGZpcnN0IGNoYXJhY3RlciBhZnRlciB0aGUKLSAgICAgICBlbmQgb2YgZWFjaCBzdWJzdHJpbmcsIHJlc3BlY3RpdmVseS4gVGhlICAwdGggIGVsZW1lbnQgIG9mICB0aGUgIHZlY3RvcgotICAgICAgIHJlbGF0ZXMgIHRvICB0aGUgIGVudGlyZSBwb3J0aW9uIG9mIHN0cmluZyB0aGF0IHdhcyBtYXRjaGVkOyBzdWJzZXF1ZW50CisgICAgICAgT3RoZXJ3aXNlLCB0aGUgcG9ydGlvbiBvZiB0aGUgc3RyaW5nIHRoYXQgd2FzICBtYXRjaGVkLCAgYW5kICBhbHNvICBhbnkKKyAgICAgICBjYXB0dXJlZCBzdWJzdHJpbmdzLCBhcmUgcmV0dXJuZWQgdmlhIHRoZSBwbWF0Y2ggYXJndW1lbnQsIHdoaWNoIHBvaW50cworICAgICAgIHRvIGFuIGFycmF5IG9mIG5tYXRjaCBzdHJ1Y3R1cmVzIG9mICB0eXBlICByZWdtYXRjaF90LCAgY29udGFpbmluZyAgdGhlCisgICAgICAgbWVtYmVycyAgcm1fc28gIGFuZCAgcm1fZW8uICBUaGVzZSBjb250YWluIHRoZSBieXRlIG9mZnNldCB0byB0aGUgZmlyc3QKKyAgICAgICBjaGFyYWN0ZXIgb2YgZWFjaCBzdWJzdHJpbmcgYW5kIHRoZSBvZmZzZXQgdG8gdGhlIGZpcnN0IGNoYXJhY3RlciBhZnRlcgorICAgICAgIHRoZSAgZW5kIG9mIGVhY2ggc3Vic3RyaW5nLCByZXNwZWN0aXZlbHkuIFRoZSAwdGggZWxlbWVudCBvZiB0aGUgdmVjdG9yCisgICAgICAgcmVsYXRlcyB0byB0aGUgZW50aXJlIHBvcnRpb24gb2Ygc3RyaW5nIHRoYXQgIHdhcyAgbWF0Y2hlZDsgIHN1YnNlcXVlbnQKICAgICAgICBlbGVtZW50cyByZWxhdGUgdG8gdGhlIGNhcHR1cmluZyBzdWJwYXR0ZXJucyBvZiB0aGUgcmVndWxhciBleHByZXNzaW9uLgogICAgICAgIFVudXNlZCBlbnRyaWVzIGluIHRoZSBhcnJheSBoYXZlIGJvdGggc3RydWN0dXJlIG1lbWJlcnMgc2V0IHRvIC0xLgogCi0gICAgICAgQSAgc3VjY2Vzc2Z1bCAgbWF0Y2ggIHlpZWxkcyAgYSAgemVybyAgcmV0dXJuOyAgdmFyaW91cyBlcnJvciBjb2RlcyBhcmUKLSAgICAgICBkZWZpbmVkIGluIHRoZSBoZWFkZXIgZmlsZSwgb2YgIHdoaWNoICBSRUdfTk9NQVRDSCAgaXMgIHRoZSAgImV4cGVjdGVkIgorICAgICAgIEEgc3VjY2Vzc2Z1bCBtYXRjaCB5aWVsZHMgIGEgIHplcm8gIHJldHVybjsgIHZhcmlvdXMgIGVycm9yICBjb2RlcyAgYXJlCisgICAgICAgZGVmaW5lZCAgaW4gIHRoZSAgaGVhZGVyICBmaWxlLCAgb2Ygd2hpY2ggUkVHX05PTUFUQ0ggaXMgdGhlICJleHBlY3RlZCIKICAgICAgICBmYWlsdXJlIGNvZGUuCiAKIAogRVJST1IgTUVTU0FHRVMKIAogICAgICAgIFRoZSByZWdlcnJvcigpIGZ1bmN0aW9uIG1hcHMgYSBub24temVybyBlcnJvcmNvZGUgZnJvbSBlaXRoZXIgcmVnY29tcCgpCi0gICAgICAgb3IgcmVnZXhlYygpIHRvIGEgcHJpbnRhYmxlIG1lc3NhZ2UuIElmIHByZWcgaXMgIG5vdCAgTlVMTCwgIHRoZSAgZXJyb3IKKyAgICAgICBvciAgcmVnZXhlYygpICB0byAgYSAgcHJpbnRhYmxlIG1lc3NhZ2UuIElmIHByZWcgaXMgbm90IE5VTEwsIHRoZSBlcnJvcgogICAgICAgIHNob3VsZCBoYXZlIGFyaXNlbiBmcm9tIHRoZSB1c2Ugb2YgdGhhdCBzdHJ1Y3R1cmUuIEEgbWVzc2FnZSB0ZXJtaW5hdGVkCi0gICAgICAgYnkgYSBiaW5hcnkgemVybyBpcyBwbGFjZWQgaW4gZXJyYnVmLiBJZiB0aGUgYnVmZmVyIGlzIHRvbyBzaG9ydCwgIG9ubHkKKyAgICAgICBieSAgYSBiaW5hcnkgemVybyBpcyBwbGFjZWQgaW4gZXJyYnVmLiBJZiB0aGUgYnVmZmVyIGlzIHRvbyBzaG9ydCwgb25seQogICAgICAgIHRoZSBmaXJzdCBlcnJidWZfc2l6ZSAtIDEgY2hhcmFjdGVycyBvZiB0aGUgZXJyb3IgbWVzc2FnZSBhcmUgdXNlZC4gVGhlCi0gICAgICAgeWllbGQgb2YgdGhlIGZ1bmN0aW9uIGlzIHRoZSBzaXplIG9mIGJ1ZmZlciBuZWVkZWQgdG8gIGhvbGQgIHRoZSAgd2hvbGUKLSAgICAgICBtZXNzYWdlLCAgaW5jbHVkaW5nICB0aGUgIHRlcm1pbmF0aW5nICB6ZXJvLiBUaGlzIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbgorICAgICAgIHlpZWxkICBvZiAgdGhlICBmdW5jdGlvbiBpcyB0aGUgc2l6ZSBvZiBidWZmZXIgbmVlZGVkIHRvIGhvbGQgdGhlIHdob2xlCisgICAgICAgbWVzc2FnZSwgaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdGluZyB6ZXJvLiBUaGlzICB2YWx1ZSAgaXMgIGdyZWF0ZXIgIHRoYW4KICAgICAgICBlcnJidWZfc2l6ZSBpZiB0aGUgbWVzc2FnZSB3YXMgdHJ1bmNhdGVkLgogCiAKIE1FTU9SWSBVU0FHRQogCi0gICAgICAgQ29tcGlsaW5nIGEgcmVndWxhciBleHByZXNzaW9uIGNhdXNlcyBtZW1vcnkgdG8gYmUgYWxsb2NhdGVkIGFuZCAgYXNzby0KLSAgICAgICBjaWF0ZWQgIHdpdGggIHRoZSBwcmVnIHN0cnVjdHVyZS4gVGhlIGZ1bmN0aW9uIHJlZ2ZyZWUoKSBmcmVlcyBhbGwgc3VjaAotICAgICAgIG1lbW9yeSwgYWZ0ZXIgd2hpY2ggcHJlZyBtYXkgbm8gbG9uZ2VyIGJlIHVzZWQgYXMgIGEgIGNvbXBpbGVkICBleHByZXMtCisgICAgICAgQ29tcGlsaW5nICBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBjYXVzZXMgbWVtb3J5IHRvIGJlIGFsbG9jYXRlZCBhbmQgYXNzby0KKyAgICAgICBjaWF0ZWQgd2l0aCB0aGUgcHJlZyBzdHJ1Y3R1cmUuIFRoZSBmdW5jdGlvbiByZWdmcmVlKCkgZnJlZXMgIGFsbCAgc3VjaAorICAgICAgIG1lbW9yeSwgIGFmdGVyICB3aGljaCAgcHJlZyBtYXkgbm8gbG9uZ2VyIGJlIHVzZWQgYXMgYSBjb21waWxlZCBleHByZXMtCiAgICAgICAgc2lvbi4KIAogCkBAIC04NzAyLDggKzg4MTYsOCBAQAogCiBSRVZJU0lPTgogCi0gICAgICAgTGFzdCB1cGRhdGVkOiAyOSBOb3ZlbWJlciAyMDE1Ci0gICAgICAgQ29weXJpZ2h0IChjKSAxOTk3LTIwMTUgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UuCisgICAgICAgTGFzdCB1cGRhdGVkOiAzMSBKYW51YXJ5IDIwMTYKKyAgICAgICBDb3B5cmlnaHQgKGMpIDE5OTctMjAxNiBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZS4KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAKQEAgLTg3MjIsMTIgKzg4MzYsMTIgQEAKICAgICAgICBkb2N1bWVudGF0aW9uLiBJZiB5b3UgZG8gbm90IGhhdmUgYSBjb3B5IG9mIHRoZSBQQ1JFMiBkaXN0cmlidXRpb24sIHlvdQogICAgICAgIGNhbiBzYXZlIHRoaXMgbGlzdGluZyB0byByZS1jcmVhdGUgdGhlIGNvbnRlbnRzIG9mIHBjcmUyZGVtby5jLgogCi0gICAgICAgVGhlIGRlbW9uc3RyYXRpb24gcHJvZ3JhbSwgd2hpY2ggdXNlcyB0aGUgUENSRTIgOC1iaXQgbGlicmFyeSwgY29tcGlsZXMKLSAgICAgICB0aGUgcmVndWxhciBleHByZXNzaW9uIHRoYXQgaXMgIGl0cyAgZmlyc3QgIGFyZ3VtZW50LCAgYW5kICBtYXRjaGVzICBpdAotICAgICAgIGFnYWluc3QgdGhlIHN1YmplY3Qgc3RyaW5nIGluIGl0cyBzZWNvbmQgYXJndW1lbnQuIE5vIFBDUkUyIG9wdGlvbnMgYXJlCi0gICAgICAgc2V0LCBhbmQgZGVmYXVsdCBjaGFyYWN0ZXIgdGFibGVzIGFyZSB1c2VkLiBJZiBtYXRjaGluZyAgc3VjY2VlZHMsICB0aGUKLSAgICAgICBwcm9ncmFtICBvdXRwdXRzIHRoZSBwb3J0aW9uIG9mIHRoZSBzdWJqZWN0IHRoYXQgbWF0Y2hlZCwgdG9nZXRoZXIgd2l0aAotICAgICAgIHRoZSBjb250ZW50cyBvZiBhbnkgY2FwdHVyZWQgc3Vic3RyaW5ncy4KKyAgICAgICBUaGUgIGRlbW9uc3RyYXRpb24gIHByb2dyYW0gY29tcGlsZXMgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IGlzIGl0cworICAgICAgIGZpcnN0IGFyZ3VtZW50LCBhbmQgbWF0Y2hlcyBpdCBhZ2FpbnN0IHRoZSBzdWJqZWN0IHN0cmluZyBpbiBpdHMgc2Vjb25kCisgICAgICAgYXJndW1lbnQuICBObyAgUENSRTIgIG9wdGlvbnMgYXJlIHNldCwgYW5kIGRlZmF1bHQgY2hhcmFjdGVyIHRhYmxlcyBhcmUKKyAgICAgICB1c2VkLiBJZiBtYXRjaGluZyBzdWNjZWVkcywgdGhlIHByb2dyYW0gb3V0cHV0cyB0aGUgcG9ydGlvbiBvZiB0aGUgc3ViLQorICAgICAgIGplY3QgIHRoYXQgIG1hdGNoZWQsICB0b2dldGhlciAgd2l0aCAgdGhlIGNvbnRlbnRzIG9mIGFueSBjYXB0dXJlZCBzdWItCisgICAgICAgc3RyaW5ncy4KIAogICAgICAgIElmIHRoZSAtZyBvcHRpb24gaXMgZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZSwgdGhlIHByb2dyYW0gdGhlbiBnb2VzIG9uCiAgICAgICAgdG8gY2hlY2sgZm9yIGZ1cnRoZXIgbWF0Y2hlcyBvZiB0aGUgc2FtZSByZWd1bGFyIGV4cHJlc3Npb24gaW4gdGhlIHNhbWUKQEAgLTg3MzUsMzggKzg4NDksNDUgQEAKICAgICAgICBiaWxpdHkgIG9mICBtYXRjaGluZyBhbiBlbXB0eSBzdHJpbmcuIENvbW1lbnRzIGluIHRoZSBjb2RlIGV4cGxhaW4gd2hhdAogICAgICAgIGlzIGdvaW5nIG9uLgogCi0gICAgICAgSWYgUENSRTIgaXMgaW5zdGFsbGVkIGluIHRoZSBzdGFuZGFyZCBpbmNsdWRlIGFuZCAgbGlicmFyeSAgZGlyZWN0b3JpZXMKLSAgICAgICBmb3IgeW91ciBvcGVyYXRpbmcgc3lzdGVtLCB5b3Ugc2hvdWxkIGJlIGFibGUgdG8gY29tcGlsZSB0aGUgZGVtb25zdHJhLQotICAgICAgIHRpb24gcHJvZ3JhbSB1c2luZyB0aGlzIGNvbW1hbmQ6CisgICAgICAgVGhlIGNvZGUgaW4gcGNyZTJkZW1vLmMgaXMgYW4gOC1iaXQgcHJvZ3JhbSB0aGF0IHVzZXMgdGhlICBQQ1JFMiAgOC1iaXQKKyAgICAgICBsaWJyYXJ5LiAgSXQgIGhhbmRsZXMgIHN0cmluZ3MgIGFuZCBjaGFyYWN0ZXJzIHRoYXQgYXJlIHN0b3JlZCBpbiA4LWJpdAorICAgICAgIGNvZGUgdW5pdHMuICBCeSBkZWZhdWx0LCBvbmUgY2hhcmFjdGVyIGNvcnJlc3BvbmRzIHRvICBvbmUgIGNvZGUgIHVuaXQsCisgICAgICAgYnV0ICBpZiAgdGhlICBwYXR0ZXJuIHN0YXJ0cyB3aXRoICIoKlVURikiLCBib3RoIGl0IGFuZCB0aGUgc3ViamVjdCBhcmUKKyAgICAgICB0cmVhdGVkIGFzIFVURi04IHN0cmluZ3MsIHdoZXJlIGNoYXJhY3RlcnMgIG1heSAgb2NjdXB5ICBtdWx0aXBsZSAgY29kZQorICAgICAgIHVuaXRzLgogCi0gICAgICAgICBnY2MgLW8gcGNyZTJkZW1vIHBjcmUyZGVtby5jIC1scGNyZTItOAorICAgICAgIElmICBQQ1JFMiAgaXMgaW5zdGFsbGVkIGluIHRoZSBzdGFuZGFyZCBpbmNsdWRlIGFuZCBsaWJyYXJ5IGRpcmVjdG9yaWVzCisgICAgICAgZm9yIHlvdXIgb3BlcmF0aW5nIHN5c3RlbSwgeW91IHNob3VsZCBiZSBhYmxlIHRvIGNvbXBpbGUgdGhlIGRlbW9uc3RyYS0KKyAgICAgICB0aW9uIHByb2dyYW0gdXNpbmcgYSBjb21tYW5kIGxpa2UgdGhpczoKKworICAgICAgICAgY2MgLW8gcGNyZTJkZW1vIHBjcmUyZGVtby5jIC1scGNyZTItOAogCiAgICAgICAgSWYgUENSRTIgaXMgaW5zdGFsbGVkIGVsc2V3aGVyZSwgeW91IG1heSBuZWVkIHRvIGFkZCBhZGRpdGlvbmFsIG9wdGlvbnMKLSAgICAgICB0byAgdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGUsIG9uIGEgVW5peC1saWtlIHN5c3RlbSB0aGF0IGhhcyBQQ1JFMgotICAgICAgIGluc3RhbGxlZCBpbiAvdXNyL2xvY2FsLCB5b3UgIGNhbiAgY29tcGlsZSAgdGhlICBkZW1vbnN0cmF0aW9uICBwcm9ncmFtCisgICAgICAgdG8gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGUsIG9uIGEgVW5peC1saWtlIHN5c3RlbSB0aGF0IGhhcyAgUENSRTIKKyAgICAgICBpbnN0YWxsZWQgIGluICAvdXNyL2xvY2FsLCAgeW91ICBjYW4gIGNvbXBpbGUgdGhlIGRlbW9uc3RyYXRpb24gcHJvZ3JhbQogICAgICAgIHVzaW5nIGEgY29tbWFuZCBsaWtlIHRoaXM6CiAKLSAgICAgICAgIGdjYyAtbyBwY3JlMmRlbW8gLUkvdXNyL2xvY2FsL2luY2x1ZGUgcGNyZTJkZW1vLmMgXAotICAgICAgICAgICAgIC1ML3Vzci9sb2NhbC9saWIgLWxwY3JlMi04CisgICAgICAgICBjYyAtbyBwY3JlMmRlbW8gLUkvdXNyL2xvY2FsL2luY2x1ZGUgcGNyZTJkZW1vLmMgXAorICAgICAgICAgICAgLUwvdXNyL2xvY2FsL2xpYiAtbHBjcmUyLTgKIAotCi0gICAgICAgT25jZSAgeW91ICBoYXZlICBjb21waWxlZCBhbmQgbGlua2VkIHRoZSBkZW1vbnN0cmF0aW9uIHByb2dyYW0sIHlvdSBjYW4KLSAgICAgICBydW4gc2ltcGxlIHRlc3RzIGxpa2UgdGhpczoKKyAgICAgICBPbmNlIHlvdSBoYXZlIGJ1aWx0IHRoZSBkZW1vbnN0cmF0aW9uIHByb2dyYW0sIHlvdSBjYW4gcnVuIHNpbXBsZSB0ZXN0cworICAgICAgIGxpa2UgdGhpczoKIAogICAgICAgICAgLi9wY3JlMmRlbW8gJ2NhdHxkb2cnICd0aGUgY2F0IHNhdCBvbiB0aGUgbWF0JwogICAgICAgICAgLi9wY3JlMmRlbW8gLWcgJ2NhdHxkb2cnICd0aGUgZG9nIHNhdCBvbiB0aGUgY2F0JwogCi0gICAgICAgTm90ZSB0aGF0IHRoZXJlIGlzIGEgIG11Y2ggIG1vcmUgIGNvbXByZWhlbnNpdmUgIHRlc3QgIHByb2dyYW0sICBjYWxsZWQKLSAgICAgICBwY3JlMnRlc3QsICB3aGljaCAgc3VwcG9ydHMgIG1hbnkgIG1vcmUgIGZhY2lsaXRpZXMgZm9yIHRlc3RpbmcgcmVndWxhcgotICAgICAgIGV4cHJlc3Npb25zIHVzaW5nIHRoZSBQQ1JFMiBsaWJyYXJpZXMuIFRoZSBwY3JlMmRlbW8gIHByb2dyYW0gIGlzICBwcm8tCi0gICAgICAgdmlkZWQgYXMgYSBzaW1wbGUgY29kaW5nIGV4YW1wbGUuCisgICAgICAgTm90ZSAgdGhhdCAgdGhlcmUgIGlzICBhICBtdWNoICBtb3JlIGNvbXByZWhlbnNpdmUgdGVzdCBwcm9ncmFtLCBjYWxsZWQKKyAgICAgICBwY3JlMnRlc3QsIHdoaWNoIHN1cHBvcnRzIG1hbnkgIG1vcmUgIGZhY2lsaXRpZXMgIGZvciAgdGVzdGluZyAgcmVndWxhcgorICAgICAgIGV4cHJlc3Npb25zIHVzaW5nIGFsbCB0aHJlZSBQQ1JFMiBsaWJyYXJpZXMgKDgtYml0LCAxNi1iaXQsIGFuZCAzMi1iaXQsCisgICAgICAgdGhvdWdoIG5vdCBhbGwgdGhyZWUgbmVlZCBiZSBpbnN0YWxsZWQpLiBUaGUgcGNyZTJkZW1vIHByb2dyYW0gaXMgIHByby0KKyAgICAgICB2aWRlZCBhcyBhIHJlbGF0aXZlbHkgc2ltcGxlIGNvZGluZyBleGFtcGxlLgogCiAgICAgICAgSWYgeW91IHRyeSB0byBydW4gcGNyZTJkZW1vIHdoZW4gUENSRTIgaXMgbm90IGluc3RhbGxlZCBpbiB0aGUgc3RhbmRhcmQKICAgICAgICBsaWJyYXJ5IGRpcmVjdG9yeSwgeW91IG1heSBnZXQgYW4gZXJyb3IgbGlrZSAgdGhpcyAgb24gIHNvbWUgIG9wZXJhdGluZwogICAgICAgIHN5c3RlbXMgKGUuZy4gU29sYXJpcyk6CiAKLSAgICAgICAgIGxkLnNvLjE6ICBhLm91dDogIGZhdGFsOiAgbGlicGNyZTIuc28uMDogb3BlbiBmYWlsZWQ6IE5vIHN1Y2ggZmlsZSBvcgotICAgICAgIGRpcmVjdG9yeQorICAgICAgICAgbGQuc28uMTogcGNyZTJkZW1vOiBmYXRhbDogbGlicGNyZTItOC5zby4wOiBvcGVuIGZhaWxlZDogTm8gc3VjaCBmaWxlCisgICAgICAgb3IgZGlyZWN0b3J5CiAKICAgICAgICBUaGlzIGlzIGNhdXNlZCBieSB0aGUgd2F5IHNoYXJlZCBsaWJyYXJ5IHN1cHBvcnQgd29ya3MgIG9uICB0aG9zZSAgc3lzLQogICAgICAgIHRlbXMuIFlvdSBuZWVkIHRvIGFkZApAQCAtODc4NSw4ICs4OTA2LDggQEAKIAogUkVWSVNJT04KIAotICAgICAgIExhc3QgdXBkYXRlZDogMjAgT2N0b2JlciAyMDE0Ci0gICAgICAgQ29weXJpZ2h0IChjKSAxOTk3LTIwMTQgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UuCisgICAgICAgTGFzdCB1cGRhdGVkOiAwMiBGZWJydWFyeSAyMDE2CisgICAgICAgQ29weXJpZ2h0IChjKSAxOTk3LTIwMTYgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UuCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFBDUkUyU0VSSUFMSVpFKDMpICAgICAgICAgIExpYnJhcnkgRnVuY3Rpb25zIE1hbnVhbCAgICAgICAgICBQQ1JFMlNFUklBTElaRSgzKQogCkBAIC04ODIyLDYgKzg5NDMsMTUgQEAKICAgICAgICB1c2luZyB0aGUgOC1iaXQgbGlicmFyeS4KIAogCitTRUNVUklUWSBDT05DRVJOUworCisgICAgICAgVGhlIGZhY2lsaXR5IGZvciBzYXZpbmcgYW5kIHJlc3RvcmluZyBjb21waWxlZCBwYXR0ZXJucyBpcyBpbnRlbmRlZCBmb3IKKyAgICAgICB1c2Ugd2l0aGluIGluZGl2aWR1YWwgYXBwbGljYXRpb25zLiAgQXMgIHN1Y2gsICB0aGUgIGRhdGEgIHN1cHBsaWVkICB0bworICAgICAgIHBjcmUyX3NlcmlhbGl6ZV9kZWNvZGUoKSAgaXMgZXhwZWN0ZWQgdG8gYmUgdHJ1c3RlZCBkYXRhLCBub3QgZGF0YSBmcm9tCisgICAgICAgYXJiaXRyYXJ5IGV4dGVybmFsIHNvdXJjZXMuICBUaGVyZSAgaXMgIG9ubHkgIHNvbWUgIHNpbXBsZSAgY29uc2lzdGVuY3kKKyAgICAgICBjaGVja2luZywgbm90IGNvbXBsZXRlIHZhbGlkYXRpb24gb2Ygd2hhdCBpcyBiZWluZyByZS1sb2FkZWQuCisKKwogU0FWSU5HIENPTVBJTEVEIFBBVFRFUk5TCiAKICAgICAgICBCZWZvcmUgY29tcGlsZWQgcGF0dGVybnMgY2FuIGJlIHNhdmVkIHRoZXkgbXVzdCBiZSBzZXJpYWxpemVkLCB0aGF0IGlzLApAQCAtODkxNSwxMSArOTA0NSwxMiBAQAogICAgICAgIGlnbm9yZWQuIFRoZSB5aWVsZCBvZiB0aGUgZnVuY3Rpb24gaXMgdGhlIG51bWJlciBvZiAgZGVjb2RlZCAgcGF0dGVybnMsCiAgICAgICAgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcgbmVnYXRpdmUgZXJyb3IgY29kZXM6CiAKLSAgICAgICAgIFBDUkUyX0VSUk9SX0JBRERBVEEgICBzZWNvbmQgYXJndW1lbnQgaXMgemVybyBvciBsZXNzCi0gICAgICAgICBQQ1JFMl9FUlJPUl9CQURNQUdJQyAgbWlzbWF0Y2ggb2YgaWQgYnl0ZXMgaW4gdGhlIGRhdGEKLSAgICAgICAgIFBDUkUyX0VSUk9SX0JBRE1PREUgICBtaXNtYXRjaCBvZiB2YXJpYWJsZSB1bml0IHNpemUgb3IgUENSRTIgdmVyc2lvbgotICAgICAgICAgUENSRTJfRVJST1JfTUVNT1JZICAgIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZAotICAgICAgICAgUENSRTJfRVJST1JfTlVMTCAgICAgIGZpcnN0IG9yIHRoaXJkIGFyZ3VtZW50IGlzIE5VTEwKKyAgICAgICAgIFBDUkUyX0VSUk9SX0JBRERBVEEgICAgc2Vjb25kIGFyZ3VtZW50IGlzIHplcm8gb3IgbGVzcworICAgICAgICAgUENSRTJfRVJST1JfQkFETUFHSUMgICBtaXNtYXRjaCBvZiBpZCBieXRlcyBpbiB0aGUgZGF0YQorICAgICAgICAgUENSRTJfRVJST1JfQkFETU9ERSAgICBtaXNtYXRjaCBvZiBjb2RlIHVuaXQgc2l6ZSBvciBQQ1JFMiB2ZXJzaW9uCisgICAgICAgICBQQ1JFMl9FUlJPUl9CQURTRVJJQUxJWkVEREFUQSAgb3RoZXIgc2FuaXR5IGNoZWNrIGZhaWx1cmUKKyAgICAgICAgIFBDUkUyX0VSUk9SX01FTU9SWSAgICAgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkCisgICAgICAgICBQQ1JFMl9FUlJPUl9OVUxMICAgICAgIGZpcnN0IG9yIHRoaXJkIGFyZ3VtZW50IGlzIE5VTEwKIAogICAgICAgIFBDUkUyX0VSUk9SX0JBRE1BR0lDICBtYXkgbWVhbiB0aGF0IHRoZSBkYXRhIGlzIGNvcnJ1cHQsIG9yIHRoYXQgaXQgd2FzCiAgICAgICAgY29tcGlsZWQgb24gYSBzeXN0ZW0gd2l0aCBkaWZmZXJlbnQgZW5kaWFubmVzcy4KQEAgLTg5NTEsOCArOTA4Miw4IEBACiAKIFJFVklTSU9OCiAKLSAgICAgICBMYXN0IHVwZGF0ZWQ6IDAzIE5vdmVtYmVyIDIwMTUKLSAgICAgICBDb3B5cmlnaHQgKGMpIDE5OTctMjAxNSBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZS4KKyAgICAgICBMYXN0IHVwZGF0ZWQ6IDI0IE1heSAyMDE2CisgICAgICAgQ29weXJpZ2h0IChjKSAxOTk3LTIwMTYgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UuCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogCkBAIC05NjA5LDE1ICs5NzQwLDE5IEBACiAgICAgICAgSW4gVVRGIG1vZGVzLCB0aGUgZG90IG1ldGFjaGFyYWN0ZXIgbWF0Y2hlcyBvbmUgVVRGICBjaGFyYWN0ZXIgIGluc3RlYWQKICAgICAgICBvZiBhIHNpbmdsZSBjb2RlIHVuaXQuCiAKLSAgICAgICBUaGUgIGVzY2FwZSAgc2VxdWVuY2UgIFxDIGNhbiBiZSB1c2VkIHRvIG1hdGNoIGEgc2luZ2xlIGNvZGUgdW5pdCwgaW4gYQotICAgICAgIFVURiBtb2RlLCBidXQgaXRzIHVzZSBjYW4gbGVhZCAgdG8gIHNvbWUgIHN0cmFuZ2UgIGVmZmVjdHMgIGJlY2F1c2UgIGl0Ci0gICAgICAgYnJlYWtzICB1cCAgbXVsdGktdW5pdCAgY2hhcmFjdGVycyAgKHNlZSAgdGhlICBkZXNjcmlwdGlvbiBvZiBcQyBpbiB0aGUKLSAgICAgICBwY3JlMnBhdHRlcm4gZG9jdW1lbnRhdGlvbikuIFRoZSB1c2Ugb2YgXEMgIGlzICBub3QgIHN1cHBvcnRlZCAgYnkgIHRoZQotICAgICAgIGFsdGVybmF0aXZlICBtYXRjaGluZyAgZnVuY3Rpb24gcGNyZTJfZGZhX21hdGNoKCkgd2hlbiBpbiBVVEYgbW9kZS4gSXRzCi0gICAgICAgdXNlIHByb3Zva2VzIGEgbWF0Y2gtdGltZSBlcnJvci4gVGhlIEpJVCAgb3B0aW1pemF0aW9uICBhbHNvICBkb2VzICBub3QKLSAgICAgICBzdXBwb3J0ICBcQyAgaW4gIFVURiAgbW9kZS4gIElmIEpJVCBvcHRpbWl6YXRpb24gaXMgcmVxdWVzdGVkIGZvciBhIFVURgotICAgICAgIHBhdHRlcm4gdGhhdCBjb250YWlucyBcQywgaXQgd2lsbCBub3Qgc3VjY2VlZCwgYW5kIHNvIHRoZSBtYXRjaGluZyB3aWxsCi0gICAgICAgYmUgY2FycmllZCBvdXQgYnkgdGhlIG5vcm1hbCBpbnRlcnByZXRpdmUgZnVuY3Rpb24uCisgICAgICAgVGhlIGVzY2FwZSBzZXF1ZW5jZSBcQyBjYW4gYmUgdXNlZCB0byBtYXRjaCBhIHNpbmdsZSBjb2RlIHVuaXQgaW4gYSBVVEYKKyAgICAgICBtb2RlLCBidXQgaXRzIHVzZSBjYW4gbGVhZCB0byBzb21lIHN0cmFuZ2UgZWZmZWN0cyBiZWNhdXNlIGl0IGJyZWFrcyB1cAorICAgICAgIG11bHRpLXVuaXQgIGNoYXJhY3RlcnMgIChzZWUgIHRoZSBkZXNjcmlwdGlvbiBvZiBcQyBpbiB0aGUgcGNyZTJwYXR0ZXJuCisgICAgICAgZG9jdW1lbnRhdGlvbikuCisKKyAgICAgICBUaGUgdXNlIG9mIFxDIGlzIG5vdCBzdXBwb3J0ZWQgYnkgIHRoZSAgYWx0ZXJuYXRpdmUgIG1hdGNoaW5nICBmdW5jdGlvbgorICAgICAgIHBjcmUyX2RmYV9tYXRjaCgpIHdoZW4gaW4gVVRGLTggb3IgVVRGLTE2IG1vZGUsIHRoYXQgaXMsIHdoZW4gYSBjaGFyYWMtCisgICAgICAgdGVyIG1heSBjb25zaXN0IG9mIG1vcmUgdGhhbiBvbmUgY29kZSB1bml0LiBUaGUgIHVzZSAgb2YgIFxDICBpbiAgdGhlc2UKKyAgICAgICBtb2RlcyAgcHJvdm9rZXMgYSBtYXRjaC10aW1lIGVycm9yLiBBbHNvLCB0aGUgSklUIG9wdGltaXphdGlvbiBkb2VzIG5vdAorICAgICAgIHN1cHBvcnQgXEMgaW4gdGhlc2UgbW9kZXMuIElmIEpJVCBvcHRpbWl6YXRpb24gaXMgcmVxdWVzdGVkIGZvciBhIFVURi04CisgICAgICAgb3IgIFVURi0xNiAgcGF0dGVybiAgdGhhdCBjb250YWlucyBcQywgaXQgd2lsbCBub3Qgc3VjY2VlZCwgYW5kIHNvIHdoZW4KKyAgICAgICBwY3JlMl9tYXRjaCgpIGlzIGNhbGxlZCwgdGhlIG1hdGNoaW5nIHdpbGwgYmUgY2FycmllZCBvdXQgYnkgdGhlIG5vcm1hbAorICAgICAgIGludGVycHJldGl2ZSBmdW5jdGlvbi4KIAogICAgICAgIFRoZSBjaGFyYWN0ZXIgZXNjYXBlcyBcYiwgXEIsIFxkLCBcRCwgXHMsIFxTLCBcdywgYW5kIFxXIGNvcnJlY3RseSB0ZXN0CiAgICAgICAgY2hhcmFjdGVycyBvZiBhbnkgY29kZSB2YWx1ZSwgYnV0LCAgYnkgIGRlZmF1bHQsICB0aGUgIGNoYXJhY3RlcnMgIHRoYXQKQEAgLTk3NjksOSArOTkwNCw5IEBACiAgICAgICAgVGhlIGZvbGxvd2luZyAgbmVnYXRpdmUgIGVycm9yICBjb2RlcyAgYXJlICBnaXZlbiAgZm9yICBpbnZhbGlkICBVVEYtMTYKICAgICAgICBzdHJpbmdzOgogCi0gICAgICAgICBQQ1JFX1VURjE2X0VSUjEgIE1pc3NpbmcgbG93IHN1cnJvZ2F0ZSBhdCBlbmQgb2Ygc3RyaW5nCi0gICAgICAgICBQQ1JFX1VURjE2X0VSUjIgIEludmFsaWQgbG93IHN1cnJvZ2F0ZSBmb2xsb3dzIGhpZ2ggc3Vycm9nYXRlCi0gICAgICAgICBQQ1JFX1VURjE2X0VSUjMgIElzb2xhdGVkIGxvdyBzdXJyb2dhdGUKKyAgICAgICAgIFBDUkUyX0VSUk9SX1VURjE2X0VSUjEgIE1pc3NpbmcgbG93IHN1cnJvZ2F0ZSBhdCBlbmQgb2Ygc3RyaW5nCisgICAgICAgICBQQ1JFMl9FUlJPUl9VVEYxNl9FUlIyICBJbnZhbGlkIGxvdyBzdXJyb2dhdGUgZm9sbG93cyBoaWdoIHN1cnJvZ2F0ZQorICAgICAgICAgUENSRTJfRVJST1JfVVRGMTZfRVJSMyAgSXNvbGF0ZWQgbG93IHN1cnJvZ2F0ZQogCiAKICAgIEVycm9ycyBpbiBVVEYtMzIgc3RyaW5ncwpAQCAtOTc3OSw4ICs5OTE0LDggQEAKICAgICAgICBUaGUgIGZvbGxvd2luZyAgbmVnYXRpdmUgIGVycm9yICBjb2RlcyAgYXJlICBnaXZlbiAgZm9yICBpbnZhbGlkIFVURi0zMgogICAgICAgIHN0cmluZ3M6CiAKLSAgICAgICAgIFBDUkVfVVRGMzJfRVJSMSAgU3Vycm9nYXRlIGNoYXJhY3RlciAocmFuZ2UgZnJvbSAweGQ4MDAgdG8gMHhkZmZmKQotICAgICAgICAgUENSRV9VVEYzMl9FUlIyICBDb2RlIHBvaW50IGlzIGdyZWF0ZXIgdGhhbiAweDEwZmZmZgorICAgICAgICAgUENSRTJfRVJST1JfVVRGMzJfRVJSMSAgU3Vycm9nYXRlIGNoYXJhY3RlciAoMHhkODAwIHRvIDB4ZGZmZikKKyAgICAgICAgIFBDUkUyX0VSUk9SX1VURjMyX0VSUjIgIENvZGUgcG9pbnQgaXMgZ3JlYXRlciB0aGFuIDB4MTBmZmZmCiAKIAogQVVUSE9SCkBAIC05NzkyLDggKzk5MjcsOCBAQAogCiBSRVZJU0lPTgogCi0gICAgICAgTGFzdCB1cGRhdGVkOiAxNiBPY3RvYmVyIDIwMTUKLSAgICAgICBDb3B5cmlnaHQgKGMpIDE5OTctMjAxNSBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZS4KKyAgICAgICBMYXN0IHVwZGF0ZWQ6IDAzIEp1bHkgMjAxNgorICAgICAgIENvcHlyaWdodCAoYykgMTk5Ny0yMDE2IFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlLgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIApkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL3BjcmUyX2NvZGVfY29weS4zIGIvZGlzdDIvZG9jL3BjcmUyX2NvZGVfY29weS4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3MGIzYTYKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9kb2MvcGNyZTJfY29kZV9jb3B5LjMKQEAgLTAsMCArMSwzMCBAQAorLlRIIFBDUkUyX0NPREVfQ09QWSAzICIyNiBGZWJydWFyeSAyMDE2IiAiUENSRTIgMTAuMjIiCisuU0ggTkFNRQorUENSRTIgLSBQZXJsLWNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9ucyAocmV2aXNlZCBBUEkpCisuU0ggU1lOT1BTSVMKKy5ycworLnNwCisuQiAjaW5jbHVkZSA8cGNyZTIuaD4KKy5QUAorLm5mCisuQiBwY3JlMl9jb2RlICpwY3JlMl9jb2RlX2NvcHkoY29uc3QgcGNyZTJfY29kZSAqXGZJY29kZVxmUCk7CisuZmkKKy4KKy5TSCBERVNDUklQVElPTgorLnJzCisuc3AKK1RoaXMgZnVuY3Rpb24gbWFrZXMgYSBjb3B5IG9mIHRoZSBtZW1vcnkgdXNlZCBmb3IgYSBjb21waWxlZCBwYXR0ZXJuLCBleGNsdWRpbmcKK2FueSBtZW1vcnkgdXNlZCBieSB0aGUgSklUIGNvbXBpbGVyLiBXaXRob3V0IGEgc3Vic2VxdWVudCBjYWxsIHRvCitcZkJwY3JlMl9qaXRfY29tcGlsZSgpXGZQLCB0aGUgY29weSBjYW4gYmUgdXNlZCBvbmx5IGZvciBub24tSklUIG1hdGNoaW5nLiBUaGUKK3lpZWxkIG9mIHRoZSBmdW5jdGlvbiBpcyBOVUxMIGlmIFxmSWNvZGVcZlAgaXMgTlVMTCBvciBpZiBzdWZmaWNpZW50IG1lbW9yeQorY2Fubm90IGJlIG9idGFpbmVkLgorLlAKK1RoZXJlIGlzIGEgY29tcGxldGUgZGVzY3JpcHRpb24gb2YgdGhlIFBDUkUyIG5hdGl2ZSBBUEkgaW4gdGhlCisuXCIgSFJFRgorXGZCcGNyZTJhcGlcZlAKKy5cIgorcGFnZSBhbmQgYSBkZXNjcmlwdGlvbiBvZiB0aGUgUE9TSVggQVBJIGluIHRoZQorLlwiIEhSRUYKK1xmQnBjcmUycG9zaXhcZlAKKy5cIgorcGFnZS4KZGlmZiAtLWdpdCBhL2Rpc3QyL2RvYy9wY3JlMl9nZXRfZXJyb3JfbWVzc2FnZS4zIGIvZGlzdDIvZG9jL3BjcmUyX2dldF9lcnJvcl9tZXNzYWdlLjMKaW5kZXggOWZmNTM0Mi4uOTM3OGIxOCAxMDA2NDQKLS0tIGEvZGlzdDIvZG9jL3BjcmUyX2dldF9lcnJvcl9tZXNzYWdlLjMKKysrIGIvZGlzdDIvZG9jL3BjcmUyX2dldF9lcnJvcl9tZXNzYWdlLjMKQEAgLTEsNCArMSw0IEBACi0uVEggUENSRTJfR0VUX0VSUk9SX01FU1NBR0UgMyAiMjEgT2N0b2JlciAyMDE0IiAiUENSRTIgMTAuMDAiCisuVEggUENSRTJfR0VUX0VSUk9SX01FU1NBR0UgMyAiMTcgSnVuZSAyMDE2IiAiUENSRTIgMTAuMjIiCiAuU0ggTkFNRQogUENSRTIgLSBQZXJsLWNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9ucyAocmV2aXNlZCBBUEkpCiAuU0ggU1lOT1BTSVMKQEAgLTIzLDcgKzIzLDEwIEBACiAgIFxmSWJ1ZmZsZW5cZlAgICAgIHRoZSBsZW5ndGggb2YgdGhlIGJ1ZmZlciAoY29kZSB1bml0cykKIC5zcAogVGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgbWVzc2FnZSwgZXhjbHVkaW5nIHRoZSB0cmFpbGluZyB6ZXJvLCBvcgotYSBuZWdhdGl2ZSBlcnJvciBjb2RlIGlmIHRoZSBidWZmZXIgaXMgdG9vIHNtYWxsLgordGhlIG5lZ2F0aXZlIGVycm9yIGNvZGUgUENSRTJfRVJST1JfTk9NRU1PUlkgaWYgdGhlIGJ1ZmZlciBpcyB0b28gc21hbGwuIEluCit0aGlzIGNhc2UsIHRoZSByZXR1cm5lZCBtZXNzYWdlIGlzIHRydW5jYXRlZCAoYnV0IHN0aWxsIHdpdGggYSB0cmFpbGluZyB6ZXJvKS4KK0lmIFxmSWVycm9yY29kZVxmUCBkb2VzIG5vdCBjb250YWluIGEgcmVjb2duaXplZCBlcnJvciBjb2RlIG51bWJlciwgdGhlCituZWdhdGl2ZSB2YWx1ZSBQQ1JFMl9FUlJPUl9CQUREQVRBIGlzIHJldHVybmVkLgogLlAKIFRoZXJlIGlzIGEgY29tcGxldGUgZGVzY3JpcHRpb24gb2YgdGhlIFBDUkUyIG5hdGl2ZSBBUEkgaW4gdGhlCiAuXCIgSFJFRgpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL3BjcmUyYXBpLjMgYi9kaXN0Mi9kb2MvcGNyZTJhcGkuMwppbmRleCBiMjlmN2IwLi5kYjYxZWEwIDEwMDY0NAotLS0gYS9kaXN0Mi9kb2MvcGNyZTJhcGkuMworKysgYi9kaXN0Mi9kb2MvcGNyZTJhcGkuMwpAQCAtMSw0ICsxLDQgQEAKLS5USCBQQ1JFMkFQSSAzICIxNiBEZWNlbWJlciAyMDE1IiAiUENSRTIgMTAuMjEiCisuVEggUENSRTJBUEkgMyAiMTcgSnVuZSAyMDE2IiAiUENSRTIgMTAuMjIiCiAuU0ggTkFNRQogUENSRTIgLSBQZXJsLWNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9ucyAocmV2aXNlZCBBUEkpCiAuc3AKQEAgLTIzMyw2ICsyMzMsOCBAQAogLnJzCiAuc3AKIC5uZgorLkIgcGNyZTJfY29kZSAqcGNyZTJfY29kZV9jb3B5KGNvbnN0IHBjcmUyX2NvZGUgKlxmSWNvZGVcZlApOworLnNwCiAuQiBpbnQgcGNyZTJfZ2V0X2Vycm9yX21lc3NhZ2UoaW50IFxmSWVycm9yY29kZVxmUCwgUENSRTJfVUNIQVIgKlxmSWJ1ZmZlclxmUCwKIC5CICIgIFBDUkUyX1NJWkUgXGZJYnVmZmxlblxmUCk7IgogLnNwCkBAIC0zNTIsOSArMzU0LDEwIEBACiBcZkJwY3JlMl9qaXRfc3RhY2tfY3JlYXRlKClcZlAsIFxmQnBjcmUyX2ppdF9zdGFja19mcmVlKClcZlAsIGFuZAogXGZCcGNyZTJfaml0X3N0YWNrX2Fzc2lnbigpXGZQIGluIG9yZGVyIHRvIGNvbnRyb2wgdGhlIEpJVCBjb2RlJ3MgbWVtb3J5IHVzYWdlLgogLlAKLUpJVCBtYXRjaGluZyBpcyBhdXRvbWF0aWNhbGx5IHVzZWQgYnkgXGZCcGNyZTJfbWF0Y2goKVxmUCBpZiBpdCBpcyBhdmFpbGFibGUuCi1UaGVyZSBpcyBhbHNvIGEgZGlyZWN0IGludGVyZmFjZSBmb3IgSklUIG1hdGNoaW5nLCB3aGljaCBnaXZlcyBpbXByb3ZlZAotcGVyZm9ybWFuY2UuIFRoZSBKSVQtc3BlY2lmaWMgZnVuY3Rpb25zIGFyZSBkaXNjdXNzZWQgaW4gdGhlCitKSVQgbWF0Y2hpbmcgaXMgYXV0b21hdGljYWxseSB1c2VkIGJ5IFxmQnBjcmUyX21hdGNoKClcZlAgaWYgaXQgaXMgYXZhaWxhYmxlLAordW5sZXNzIHRoZSBQQ1JFMl9OT19KSVQgb3B0aW9uIGlzIHNldC4gVGhlcmUgaXMgYWxzbyBhIGRpcmVjdCBpbnRlcmZhY2UgZm9yIEpJVAorbWF0Y2hpbmcsIHdoaWNoIGdpdmVzIGltcHJvdmVkIHBlcmZvcm1hbmNlLiBUaGUgSklULXNwZWNpZmljIGZ1bmN0aW9ucyBhcmUKK2Rpc2N1c3NlZCBpbiB0aGUKIC5cIiBIUkVGCiBcZkJwY3JlMmppdFxmUAogLlwiCkBAIC0zOTMsOSArMzk2LDE2IEBACiByZXR1cm4gYSBjb3B5IG9mIHRoZSBzdWJqZWN0IHN0cmluZyB3aXRoIHN1YnN0aXR1dGlvbnMgZm9yIHBhcnRzIHRoYXQgd2VyZQogbWF0Y2hlZC4KIC5QCitGdW5jdGlvbnMgd2hvc2UgbmFtZXMgYmVnaW4gd2l0aCBcZkJwY3JlMl9zZXJpYWxpemVfXGZQIGFyZSB1c2VkIGZvciBzYXZpbmcKK2NvbXBpbGVkIHBhdHRlcm5zIG9uIGRpc2Mgb3IgZWxzZXdoZXJlLCBhbmQgcmVsb2FkaW5nIHRoZW0gbGF0ZXIuCisuUAogRmluYWxseSwgdGhlcmUgYXJlIGZ1bmN0aW9ucyBmb3IgZmluZGluZyBvdXQgaW5mb3JtYXRpb24gYWJvdXQgYSBjb21waWxlZAogcGF0dGVybiAoXGZCcGNyZTJfcGF0dGVybl9pbmZvKClcZlApIGFuZCBhYm91dCB0aGUgY29uZmlndXJhdGlvbiB3aXRoIHdoaWNoCiBQQ1JFMiB3YXMgYnVpbHQgKFxmQnBjcmUyX2NvbmZpZygpXGZQKS4KKy5QCitGdW5jdGlvbnMgd2l0aCBuYW1lcyBlbmRpbmcgd2l0aCBcZkJfZnJlZSgpXGZQIGFyZSB1c2VkIGZvciBmcmVlaW5nIG1lbW9yeQorYmxvY2tzIG9mIHZhcmlvdXMgc29ydHMuIEluIGFsbCBjYXNlcywgaWYgb25lIG9mIHRoZXNlIGZ1bmN0aW9ucyBpcyBjYWxsZWQgd2l0aAorYSBOVUxMIGFyZ3VtZW50LCBpdCBkb2VzIG5vdGhpbmcuCiAuCiAuCiAuU0ggIlNUUklORyBMRU5HVEhTIEFORCBPRkZTRVRTIgpAQCAtNDYxLDIxICs0NzEsNTIgQEAKIC5QCiBUaGVyZSBhcmUgc2V2ZXJhbCBkaWZmZXJlbnQgYmxvY2tzIG9mIGRhdGEgdGhhdCBhcmUgdXNlZCB0byBwYXNzIGluZm9ybWF0aW9uCiBiZXR3ZWVuIHRoZSBhcHBsaWNhdGlvbiBhbmQgdGhlIFBDUkUyIGxpYnJhcmllcy4KLS5QCi0oMSkgQSBwb2ludGVyIHRvIHRoZSBjb21waWxlZCBmb3JtIG9mIGEgcGF0dGVybiBpcyByZXR1cm5lZCB0byB0aGUgdXNlciB3aGVuCisuCisuCisuU1MgIlRoZSBjb21waWxlZCBwYXR0ZXJuIgorLnJzCisuc3AKK0EgcG9pbnRlciB0byB0aGUgY29tcGlsZWQgZm9ybSBvZiBhIHBhdHRlcm4gaXMgcmV0dXJuZWQgdG8gdGhlIHVzZXIgd2hlbgogXGZCcGNyZTJfY29tcGlsZSgpXGZQIGlzIHN1Y2Nlc3NmdWwuIFRoZSBkYXRhIGluIHRoZSBjb21waWxlZCBwYXR0ZXJuIGlzIGZpeGVkLAogYW5kIGRvZXMgbm90IGNoYW5nZSB3aGVuIHRoZSBwYXR0ZXJuIGlzIG1hdGNoZWQuIFRoZXJlZm9yZSwgaXQgaXMgdGhyZWFkLXNhZmUsCiB0aGF0IGlzLCB0aGUgc2FtZSBjb21waWxlZCBwYXR0ZXJuIGNhbiBiZSB1c2VkIGJ5IG1vcmUgdGhhbiBvbmUgdGhyZWFkCi1zaW11bHRhbmVvdXNseS4gQW4gYXBwbGljYXRpb24gY2FuIGNvbXBpbGUgYWxsIGl0cyBwYXR0ZXJucyBhdCB0aGUgc3RhcnQsCi1iZWZvcmUgZm9ya2luZyBvZmYgbXVsdGlwbGUgdGhyZWFkcyB0aGF0IHVzZSB0aGVtLiBIb3dldmVyLCBpZiB0aGUganVzdC1pbi10aW1lCi1vcHRpbWl6YXRpb24gZmVhdHVyZSBpcyBiZWluZyB1c2VkLCBpdCBuZWVkcyBzZXBhcmF0ZSBtZW1vcnkgc3RhY2sgYXJlYXMgZm9yCi1lYWNoIHRocmVhZC4gU2VlIHRoZQorc2ltdWx0YW5lb3VzbHkuIEZvciBleGFtcGxlLCBhbiBhcHBsaWNhdGlvbiBjYW4gY29tcGlsZSBhbGwgaXRzIHBhdHRlcm5zIGF0IHRoZQorc3RhcnQsIGJlZm9yZSBmb3JraW5nIG9mZiBtdWx0aXBsZSB0aHJlYWRzIHRoYXQgdXNlIHRoZW0uIEhvd2V2ZXIsIGlmIHRoZQoranVzdC1pbi10aW1lIG9wdGltaXphdGlvbiBmZWF0dXJlIGlzIGJlaW5nIHVzZWQsIGl0IG5lZWRzIHNlcGFyYXRlIG1lbW9yeSBzdGFjaworYXJlYXMgZm9yIGVhY2ggdGhyZWFkLiBTZWUgdGhlCiAuXCIgSFJFRgogXGZCcGNyZTJqaXRcZlAKIC5cIgogZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBkZXRhaWxzLgogLlAKLSgyKSBUaGUgbmV4dCBzZWN0aW9uIGJlbG93IGludHJvZHVjZXMgdGhlIGlkZWEgb2YgImNvbnRleHRzIiBpbiB3aGljaCBQQ1JFMgorSW4gYSBtb3JlIGNvbXBsaWNhdGVkIHNpdHVhdGlvbiwgd2hlcmUgcGF0dGVybnMgYXJlIGNvbXBpbGVkIG9ubHkgd2hlbiB0aGV5IGFyZQorZmlyc3QgbmVlZGVkLCBidXQgYXJlIHN0aWxsIHNoYXJlZCBiZXR3ZWVuIHRocmVhZHMsIHBvaW50ZXJzIHRvIGNvbXBpbGVkCitwYXR0ZXJucyBtdXN0IGJlIHByb3RlY3RlZCBmcm9tIHNpbXVsdGFuZW91cyB3cml0aW5nIGJ5IG11bHRpcGxlIHRocmVhZHMsIGF0CitsZWFzdCB1bnRpbCBhIHBhdHRlcm4gaGFzIGJlZW4gY29tcGlsZWQuIFRoZSBsb2dpYyBjYW4gYmUgc29tZXRoaW5nIGxpa2UgdGhpczoKKy5zcAorICBHZXQgYSByZWFkLW9ubHkgKHNoYXJlZCkgbG9jayAobXV0ZXgpIGZvciBwb2ludGVyCisgIGlmIChwb2ludGVyID09IE5VTEwpCisgICAgeworICAgIEdldCBhIHdyaXRlICh1bmlxdWUpIGxvY2sgZm9yIHBvaW50ZXIKKyAgICBwb2ludGVyID0gcGNyZTJfY29tcGlsZSguLi4KKyAgICB9CisgIFJlbGVhc2UgdGhlIGxvY2sKKyAgVXNlIHBvaW50ZXIgaW4gcGNyZTJfbWF0Y2goKQorLnNwCitPZiBjb3Vyc2UsIHRlc3RpbmcgZm9yIGNvbXBpbGF0aW9uIGVycm9ycyBzaG91bGQgYWxzbyBiZSBpbmNsdWRlZCBpbiB0aGUgY29kZS4KKy5QCitJZiBKSVQgaXMgYmVpbmcgdXNlZCwgYnV0IHRoZSBKSVQgY29tcGlsYXRpb24gaXMgbm90IGJlaW5nIGRvbmUgaW1tZWRpYXRlbHksCisocGVyaGFwcyB3YWl0aW5nIHRvIHNlZSBpZiB0aGUgcGF0dGVybiBpcyB1c2VkIG9mdGVuIGVub3VnaCkgc2ltaWxhciBsb2dpYyBpcworcmVxdWlyZWQuIEpJVCBjb21waWxhdGlvbiB1cGRhdGVzIGEgcG9pbnRlciB3aXRoaW4gdGhlIGNvbXBpbGVkIGNvZGUgYmxvY2ssIHNvCithIHRocmVhZCBtdXN0IGdhaW4gdW5pcXVlIHdyaXRlIGFjY2VzcyB0byB0aGUgcG9pbnRlciBiZWZvcmUgY2FsbGluZworXGZCcGNyZTJfaml0X2NvbXBpbGUoKVxmUC4gQWx0ZXJuYXRpdmVseSwgXGZCcGNyZTJfY29kZV9jb3B5KClcZlAgY2FuIGJlIHVzZWQKK3RvIG9idGFpbiBhIHByaXZhdGUgY29weSBvZiB0aGUgY29tcGlsZWQgY29kZS4KKy4KKy4KKy5TUyAiQ29udGV4dCBibG9ja3MiCisucnMKKy5zcAorVGhlIG5leHQgbWFpbiBzZWN0aW9uIGJlbG93IGludHJvZHVjZXMgdGhlIGlkZWEgb2YgImNvbnRleHRzIiBpbiB3aGljaCBQQ1JFMgogZnVuY3Rpb25zIGFyZSBjYWxsZWQuIEEgY29udGV4dCBpcyBub3RoaW5nIG1vcmUgdGhhbiBhIGNvbGxlY3Rpb24gb2YgcGFyYW1ldGVycwogdGhhdCBjb250cm9sIHRoZSB3YXkgUENSRTIgb3BlcmF0ZXMuIEdyb3VwaW5nIGEgbnVtYmVyIG9mIHBhcmFtZXRlcnMgdG9nZXRoZXIKIGluIGEgY29udGV4dCBpcyBhIGNvbnZlbmllbnQgd2F5IG9mIHBhc3NpbmcgdGhlbSB0byBhIFBDUkUyIGZ1bmN0aW9uIHdpdGhvdXQKQEAgLTQ4NywxMSArNTI4LDE1IEBACiBhcmUgbmV2ZXIgY2hhbmdlZCwgdGhlIHNhbWUgY29udGV4dCBjYW4gYmUgdXNlZCBieSBhbGwgdGhlIHRocmVhZHMuIEhvd2V2ZXIsIGlmCiBhbnkgdGhyZWFkIG5lZWRzIHRvIGNoYW5nZSBhbnkgdmFsdWUgaW4gYSBjb250ZXh0LCBpdCBtdXN0IG1ha2UgaXRzIG93bgogdGhyZWFkLXNwZWNpZmljIGNvcHkuCi0uUAotKDMpIFRoZSBtYXRjaGluZyBmdW5jdGlvbnMgbmVlZCBhIGJsb2NrIG9mIG1lbW9yeSBmb3Igd29ya2luZyBzcGFjZSBhbmQgZm9yCi1zdG9yaW5nIHRoZSByZXN1bHRzIG9mIGEgbWF0Y2guIFRoaXMgaW5jbHVkZXMgZGV0YWlscyBvZiB3aGF0IHdhcyBtYXRjaGVkLCBhcwotd2VsbCBhcyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHN1Y2ggYXMgdGhlIG5hbWUgb2YgYSAoKk1BUkspIHNldHRpbmcuIEVhY2gKLXRocmVhZCBtdXN0IHByb3ZpZGUgaXRzIG93biB2ZXJzaW9uIG9mIHRoaXMgbWVtb3J5LgorLgorLgorLlNTICJNYXRjaCBibG9ja3MiCisucnMKKy5zcAorVGhlIG1hdGNoaW5nIGZ1bmN0aW9ucyBuZWVkIGEgYmxvY2sgb2YgbWVtb3J5IGZvciB3b3JraW5nIHNwYWNlIGFuZCBmb3Igc3RvcmluZwordGhlIHJlc3VsdHMgb2YgYSBtYXRjaC4gVGhpcyBpbmNsdWRlcyBkZXRhaWxzIG9mIHdoYXQgd2FzIG1hdGNoZWQsIGFzIHdlbGwgYXMKK2FkZGl0aW9uYWwgaW5mb3JtYXRpb24gc3VjaCBhcyB0aGUgbmFtZSBvZiBhICgqTUFSSykgc2V0dGluZy4gRWFjaCB0aHJlYWQgbXVzdAorcHJvdmlkZSBpdHMgb3duIGNvcHkgb2YgdGhpcyBtZW1vcnkuCiAuCiAuCiAuU0ggIlBDUkUyIENPTlRFWFRTIgpAQCAtOTc5LDM0ICsxMDI0LDUxIEBACiAuQiAiICBwY3JlMl9jb21waWxlX2NvbnRleHQgKlxmSWNjb250ZXh0XGZQKTsiCiAuc3AKIC5CIHZvaWQgcGNyZTJfY29kZV9mcmVlKHBjcmUyX2NvZGUgKlxmSWNvZGVcZlApOworLnNwCisuQiBwY3JlMl9jb2RlICpwY3JlMl9jb2RlX2NvcHkoY29uc3QgcGNyZTJfY29kZSAqXGZJY29kZVxmUCk7CiAuZmkKIC5QCiBUaGUgXGZCcGNyZTJfY29tcGlsZSgpXGZQIGZ1bmN0aW9uIGNvbXBpbGVzIGEgcGF0dGVybiBpbnRvIGFuIGludGVybmFsIGZvcm0uCi1UaGUgcGF0dGVybiBpcyBkZWZpbmVkIGJ5IGEgcG9pbnRlciB0byBhIHN0cmluZyBvZiBjb2RlIHVuaXRzIGFuZCBhIGxlbmd0aCwgSWYKK1RoZSBwYXR0ZXJuIGlzIGRlZmluZWQgYnkgYSBwb2ludGVyIHRvIGEgc3RyaW5nIG9mIGNvZGUgdW5pdHMgYW5kIGEgbGVuZ3RoLiBJZgogdGhlIHBhdHRlcm4gaXMgemVyby10ZXJtaW5hdGVkLCB0aGUgbGVuZ3RoIGNhbiBiZSBzcGVjaWZpZWQgYXMKIFBDUkUyX1pFUk9fVEVSTUlOQVRFRC4gVGhlIGZ1bmN0aW9uIHJldHVybnMgYSBwb2ludGVyIHRvIGEgYmxvY2sgb2YgbWVtb3J5IHRoYXQKLWNvbnRhaW5zIHRoZSBjb21waWxlZCBwYXR0ZXJuIGFuZCByZWxhdGVkIGRhdGEuIFRoZSBjYWxsZXIgbXVzdCBmcmVlIHRoZSBtZW1vcnkKLWJ5IGNhbGxpbmcgXGZCcGNyZTJfY29kZV9mcmVlKClcZlAgd2hlbiBpdCBpcyBubyBsb25nZXIgbmVlZGVkLgorY29udGFpbnMgdGhlIGNvbXBpbGVkIHBhdHRlcm4gYW5kIHJlbGF0ZWQgZGF0YSwgb3IgTlVMTCBpZiBhbiBlcnJvciBvY2N1cnJlZC4KKy5QCitJZiB0aGUgY29tcGlsZSBjb250ZXh0IGFyZ3VtZW50IFxmSWNjb250ZXh0XGZQIGlzIE5VTEwsIG1lbW9yeSBmb3IgdGhlIGNvbXBpbGVkCitwYXR0ZXJuIGlzIG9idGFpbmVkIGJ5IGNhbGxpbmcgXGZCbWFsbG9jKClcZlAuIE90aGVyd2lzZSwgaXQgaXMgb2J0YWluZWQgZnJvbQordGhlIHNhbWUgbWVtb3J5IGZ1bmN0aW9uIHRoYXQgd2FzIHVzZWQgZm9yIHRoZSBjb21waWxlIGNvbnRleHQuIFRoZSBjYWxsZXIgbXVzdAorZnJlZSB0aGUgbWVtb3J5IGJ5IGNhbGxpbmcgXGZCcGNyZTJfY29kZV9mcmVlKClcZlAgd2hlbiBpdCBpcyBubyBsb25nZXIgbmVlZGVkLgorLlAKK1RoZSBmdW5jdGlvbiBcZkJwY3JlMl9jb2RlX2NvcHkoKVxmUCBtYWtlcyBhIGNvcHkgb2YgdGhlIGNvbXBpbGVkIGNvZGUgaW4gbmV3CittZW1vcnksIHVzaW5nIHRoZSBzYW1lIG1lbW9yeSBhbGxvY2F0b3IgYXMgd2FzIHVzZWQgZm9yIHRoZSBvcmlnaW5hbC4gSG93ZXZlciwKK2lmIHRoZSBjb2RlIGhhcyBiZWVuIHByb2Nlc3NlZCBieSB0aGUgSklUIGNvbXBpbGVyIChzZWUKKy5cIiBIVE1MIDxhIGhyZWY9IiNqaXRjb21waWxpbmciPgorLlwiIDwvYT4KK2JlbG93KSwKKy5cIgordGhlIEpJVCBpbmZvcm1hdGlvbiBjYW5ub3QgYmUgY29waWVkIChiZWNhdXNlIGl0IGlzIHBvc2l0aW9uLWRlcGVuZGVudCkuCitUaGUgbmV3IGNvcHkgY2FuIGluaXRpYWxseSBiZSB1c2VkIG9ubHkgZm9yIG5vbi1KSVQgbWF0Y2hpbmcsIHRob3VnaCBpdCBjYW4gYmUKK3Bhc3NlZCB0byBcZkJwY3JlMl9qaXRfY29tcGlsZSgpXGZQIGlmIHJlcXVpcmVkLiBUaGUgXGZCcGNyZTJfY29kZV9jb3B5KClcZlAKK2Z1bmN0aW9uIHByb3ZpZGVzIGEgd2F5IGZvciBpbmRpdmlkdWFsIHRocmVhZHMgaW4gYSBtdWx0aXRocmVhZGVkIGFwcGxpY2F0aW9uCit0byBhY3F1aXJlIGEgcHJpdmF0ZSBjb3B5IG9mIHNoYXJlZCBjb21waWxlZCBjb2RlLgogLlAKIE5PVEU6IFdoZW4gb25lIG9mIHRoZSBtYXRjaGluZyBmdW5jdGlvbnMgaXMgY2FsbGVkLCBwb2ludGVycyB0byB0aGUgY29tcGlsZWQKIHBhdHRlcm4gYW5kIHRoZSBzdWJqZWN0IHN0cmluZyBhcmUgc2V0IGluIHRoZSBtYXRjaCBkYXRhIGJsb2NrIHNvIHRoYXQgdGhleSBjYW4KLWJlIHJlZmVyZW5jZWQgYnkgdGhlIGV4dHJhY3Rpb24gZnVuY3Rpb25zLiBBZnRlciBydW5uaW5nIGEgbWF0Y2gsIHlvdSBtdXN0IG5vdAotZnJlZSBhIGNvbXBpbGVkIHBhdHRlcm4gKG9yIGEgc3ViamVjdCBzdHJpbmcpIHVudGlsIGFmdGVyIGFsbCBvcGVyYXRpb25zIG9uIHRoZQorYmUgcmVmZXJlbmNlZCBieSB0aGUgc3Vic3RyaW5nIGV4dHJhY3Rpb24gZnVuY3Rpb25zLiBBZnRlciBydW5uaW5nIGEgbWF0Y2gsIHlvdQorbXVzdCBub3QgZnJlZSBhIGNvbXBpbGVkIHBhdHRlcm4gKG9yIGEgc3ViamVjdCBzdHJpbmcpIHVudGlsIGFmdGVyIGFsbAorb3BlcmF0aW9ucyBvbiB0aGUKIC5cIiBIVE1MIDxhIGhyZWY9IiNtYXRjaGRhdGFibG9jayI+CiAuXCIgPC9hPgogbWF0Y2ggZGF0YSBibG9jawogLlwiCiBoYXZlIHRha2VuIHBsYWNlLgogLlAKLUlmIHRoZSBjb21waWxlIGNvbnRleHQgYXJndW1lbnQgXGZJY2NvbnRleHRcZlAgaXMgTlVMTCwgbWVtb3J5IGZvciB0aGUgY29tcGlsZWQKLXBhdHRlcm4gaXMgb2J0YWluZWQgYnkgY2FsbGluZyBcZkJtYWxsb2MoKVxmUC4gT3RoZXJ3aXNlLCBpdCBpcyBvYnRhaW5lZCBmcm9tCi10aGUgc2FtZSBtZW1vcnkgZnVuY3Rpb24gdGhhdCB3YXMgdXNlZCBmb3IgdGhlIGNvbXBpbGUgY29udGV4dC4KLS5QCi1UaGUgXGZJb3B0aW9uc1xmUCBhcmd1bWVudCBjb250YWlucyB2YXJpb3VzIGJpdCBzZXR0aW5ncyB0aGF0IGFmZmVjdCB0aGUKLWNvbXBpbGF0aW9uLiBJdCBzaG91bGQgYmUgemVybyBpZiBubyBvcHRpb25zIGFyZSByZXF1aXJlZC4gVGhlIGF2YWlsYWJsZQotb3B0aW9ucyBhcmUgZGVzY3JpYmVkIGJlbG93LiBTb21lIG9mIHRoZW0gKGluIHBhcnRpY3VsYXIsIHRob3NlIHRoYXQgYXJlCi1jb21wYXRpYmxlIHdpdGggUGVybCwgYnV0IHNvbWUgb3RoZXJzIGFzIHdlbGwpIGNhbiBhbHNvIGJlIHNldCBhbmQgdW5zZXQgZnJvbQotd2l0aGluIHRoZSBwYXR0ZXJuIChzZWUgdGhlIGRldGFpbGVkIGRlc2NyaXB0aW9uIGluIHRoZQorVGhlIFxmSW9wdGlvbnNcZlAgYXJndW1lbnQgZm9yIFxmQnBjcmUyX2NvbXBpbGUoKVxmUCBjb250YWlucyB2YXJpb3VzIGJpdAorc2V0dGluZ3MgdGhhdCBhZmZlY3QgdGhlIGNvbXBpbGF0aW9uLiBJdCBzaG91bGQgYmUgemVybyBpZiBubyBvcHRpb25zIGFyZQorcmVxdWlyZWQuIFRoZSBhdmFpbGFibGUgb3B0aW9ucyBhcmUgZGVzY3JpYmVkIGJlbG93LiBTb21lIG9mIHRoZW0gKGluCitwYXJ0aWN1bGFyLCB0aG9zZSB0aGF0IGFyZSBjb21wYXRpYmxlIHdpdGggUGVybCwgYnV0IHNvbWUgb3RoZXJzIGFzIHdlbGwpIGNhbgorYWxzbyBiZSBzZXQgYW5kIHVuc2V0IGZyb20gd2l0aGluIHRoZSBwYXR0ZXJuIChzZWUgdGhlIGRldGFpbGVkIGRlc2NyaXB0aW9uIGluCit0aGUKIC5cIiBIUkVGCiBcZkJwY3JlMnBhdHRlcm5cZlAKIC5cIgpAQCAtMTAyNSwxMyArMTA4NywyMiBAQAogLlwiCiAuUAogSWYgXGZJZXJyb3Jjb2RlXGZQIG9yIFxmSWVycm9yb2Zmc2V0XGZQIGlzIE5VTEwsIFxmQnBjcmUyX2NvbXBpbGUoKVxmUCByZXR1cm5zCi1OVUxMIGltbWVkaWF0ZWx5LiBPdGhlcndpc2UsIGlmIGNvbXBpbGF0aW9uIG9mIGEgcGF0dGVybiBmYWlscywKLVxmQnBjcmUyX2NvbXBpbGUoKVxmUCByZXR1cm5zIE5VTEwsIGhhdmluZyBzZXQgdGhlc2UgdmFyaWFibGVzIHRvIGFuIGVycm9yIGNvZGUKLWFuZCBhbiBvZmZzZXQgKG51bWJlciBvZiBjb2RlIHVuaXRzKSB3aXRoaW4gdGhlIHBhdHRlcm4sIHJlc3BlY3RpdmVseS4gVGhlCi1cZkJwY3JlMl9nZXRfZXJyb3JfbWVzc2FnZSgpXGZQIGZ1bmN0aW9uIHByb3ZpZGVzIGEgdGV4dHVhbCBtZXNzYWdlIGZvciBlYWNoCi1lcnJvciBjb2RlLiBDb21waWxhdGlvbiBlcnJvcnMgYXJlIHBvc2l0aXZlIG51bWJlcnMsIGJ1dCBVVEYgZm9ybWF0dGluZyBlcnJvcnMKLWFyZSBuZWdhdGl2ZSBudW1iZXJzLiBGb3IgYW4gaW52YWxpZCBVVEYtOCBvciBVVEYtMTYgc3RyaW5nLCB0aGUgb2Zmc2V0IGlzIHRoYXQKLW9mIHRoZSBmaXJzdCBjb2RlIHVuaXQgb2YgdGhlIGZhaWxpbmcgY2hhcmFjdGVyLgorTlVMTCBpbW1lZGlhdGVseS4gT3RoZXJ3aXNlLCB0aGUgdmFyaWFibGVzIHRvIHdoaWNoIHRoZXNlIHBvaW50IGFyZSBzZXQgdG8gYW4KK2Vycm9yIGNvZGUgYW5kIGFuIG9mZnNldCAobnVtYmVyIG9mIGNvZGUgdW5pdHMpIHdpdGhpbiB0aGUgcGF0dGVybiwKK3Jlc3BlY3RpdmVseSwgd2hlbiBcZkJwY3JlMl9jb21waWxlKClcZlAgcmV0dXJucyBOVUxMIGJlY2F1c2UgYSBjb21waWxhdGlvbgorZXJyb3IgaGFzIG9jY3VycmVkLiBUaGUgdmFsdWVzIGFyZSBub3QgZGVmaW5lZCB3aGVuIGNvbXBpbGF0aW9uIGlzIHN1Y2Nlc3NmdWwKK2FuZCBcZkJwY3JlMl9jb21waWxlKClcZlAgcmV0dXJucyBhIG5vbi1OVUxMIHZhbHVlLgorLlAKK1RoZSBcZkJwY3JlMl9nZXRfZXJyb3JfbWVzc2FnZSgpXGZQIGZ1bmN0aW9uIChzZWUgIk9idGFpbmluZyBhIHRleHR1YWwgZXJyb3IKK21lc3NhZ2UiCisuXCIgSFRNTCA8YSBocmVmPSIjZ2V0ZXJyb3JtZXNzYWdlIj4KKy5cIiA8L2E+CitiZWxvdykKKy5cIgorcHJvdmlkZXMgYSB0ZXh0dWFsIG1lc3NhZ2UgZm9yIGVhY2ggZXJyb3IgY29kZS4gQ29tcGlsYXRpb24gZXJyb3JzIGhhdmUKK3Bvc2l0aXZlIGVycm9yIGNvZGVzOyBVVEYgZm9ybWF0dGluZyBlcnJvciBjb2RlcyBhcmUgbmVnYXRpdmUuIEZvciBhbiBpbnZhbGlkCitVVEYtOCBvciBVVEYtMTYgc3RyaW5nLCB0aGUgb2Zmc2V0IGlzIHRoYXQgb2YgdGhlIGZpcnN0IGNvZGUgdW5pdCBvZiB0aGUKK2ZhaWxpbmcgY2hhcmFjdGVyLgogLlAKIFNvbWUgZXJyb3JzIGFyZSBub3QgZGV0ZWN0ZWQgdW50aWwgdGhlIHdob2xlIHBhdHRlcm4gaGFzIGJlZW4gc2Nhbm5lZDsgaW4gdGhlc2UKIGNhc2VzLCB0aGUgb2Zmc2V0IHBhc3NlZCBiYWNrIGlzIHRoZSBsZW5ndGggb2YgdGhlIHBhdHRlcm4uIE5vdGUgdGhhdCB0aGUKQEAgLTEyNTUsNyArMTMyNiw5IEBACiB0aGUgcGF0dGVybi4gQW55IG9wZW5pbmcgcGFyZW50aGVzaXMgdGhhdCBpcyBub3QgZm9sbG93ZWQgYnkgPyBiZWhhdmVzIGFzIGlmIGl0CiB3ZXJlIGZvbGxvd2VkIGJ5ID86IGJ1dCBuYW1lZCBwYXJlbnRoZXNlcyBjYW4gc3RpbGwgYmUgdXNlZCBmb3IgY2FwdHVyaW5nIChhbmQKIHRoZXkgYWNxdWlyZSBudW1iZXJzIGluIHRoZSB1c3VhbCB3YXkpLiBUaGVyZSBpcyBubyBlcXVpdmFsZW50IG9mIHRoaXMgb3B0aW9uCi1pbiBQZXJsLgoraW4gUGVybC4gTm90ZSB0aGF0LCBpZiB0aGlzIG9wdGlvbiBpcyBzZXQsIHJlZmVyZW5jZXMgdG8gY2FwdHVyaW5nIGdyb3VwcyAoYmFjaworcmVmZXJlbmNlcyBvciByZWN1cnNpb24vc3Vicm91dGluZSBjYWxscykgbWF5IG9ubHkgcmVmZXIgdG8gbmFtZWQgZ3JvdXBzLAordGhvdWdoIHRoZSByZWZlcmVuY2UgY2FuIGJlIGJ5IG5hbWUgb3IgYnkgbnVtYmVyLgogLnNwCiAgIFBDUkUyX05PX0FVVE9fUE9TU0VTUwogLnNwCkBAIC0xNDE2LDE3ICsxNDg5LDI0IEBACiAuU0ggIkNPTVBJTEFUSU9OIEVSUk9SIENPREVTIgogLnJzCiAuc3AKLVRoZXJlIGFyZSBvdmVyIDgwIHBvc2l0aXZlIGVycm9yIGNvZGVzIHRoYXQgXGZCcGNyZTJfY29tcGlsZSgpXGZQIG1heSByZXR1cm4gaWYKLWl0IGZpbmRzIGFuIGVycm9yIGluIHRoZSBwYXR0ZXJuLiBUaGVyZSBhcmUgYWxzbyBzb21lIG5lZ2F0aXZlIGVycm9yIGNvZGVzIHRoYXQKLWFyZSB1c2VkIGZvciBpbnZhbGlkIFVURiBzdHJpbmdzLiBUaGVzZSBhcmUgdGhlIHNhbWUgYXMgZ2l2ZW4gYnkKLVxmQnBjcmUyX21hdGNoKClcZlAgYW5kIFxmQnBjcmUyX2RmYV9tYXRjaCgpXGZQLCBhbmQgYXJlIGRlc2NyaWJlZCBpbiB0aGUKK1RoZXJlIGFyZSBvdmVyIDgwIHBvc2l0aXZlIGVycm9yIGNvZGVzIHRoYXQgXGZCcGNyZTJfY29tcGlsZSgpXGZQIG1heSByZXR1cm4KKyh2aWEgXGZJZXJyb3Jjb2RlXGZQKSBpZiBpdCBmaW5kcyBhbiBlcnJvciBpbiB0aGUgcGF0dGVybi4gVGhlcmUgYXJlIGFsc28gc29tZQorbmVnYXRpdmUgZXJyb3IgY29kZXMgdGhhdCBhcmUgdXNlZCBmb3IgaW52YWxpZCBVVEYgc3RyaW5ncy4gVGhlc2UgYXJlIHRoZSBzYW1lCithcyBnaXZlbiBieSBcZkJwY3JlMl9tYXRjaCgpXGZQIGFuZCBcZkJwY3JlMl9kZmFfbWF0Y2goKVxmUCwgYW5kIGFyZSBkZXNjcmliZWQKK2luIHRoZQogLlwiIEhSRUYKIFxmQnBjcmUydW5pY29kZVxmUAogLlwiCi1wYWdlLiBUaGUgXGZCcGNyZTJfZ2V0X2Vycm9yX21lc3NhZ2UoKVxmUCBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIHRvIG9idGFpbiBhCi10ZXh0dWFsIGVycm9yIG1lc3NhZ2UgZnJvbSBhbnkgZXJyb3IgY29kZS4KK3BhZ2UuIFRoZSBcZkJwY3JlMl9nZXRfZXJyb3JfbWVzc2FnZSgpXGZQIGZ1bmN0aW9uIChzZWUgIk9idGFpbmluZyBhIHRleHR1YWwKK2Vycm9yIG1lc3NhZ2UiCisuXCIgSFRNTCA8YSBocmVmPSIjZ2V0ZXJyb3JtZXNzYWdlIj4KKy5cIiA8L2E+CitiZWxvdykKKy5cIgorY2FuIGJlIGNhbGxlZCB0byBvYnRhaW4gYSB0ZXh0dWFsIGVycm9yIG1lc3NhZ2UgZnJvbSBhbnkgZXJyb3IgY29kZS4KIC4KIC4KKy5cIiBIVE1MIDxhIG5hbWU9ImppdGNvbXBpbGluZyI+PC9hPgogLlNIICJKVVNULUlOLVRJTUUgKEpJVCkgQ09NUElMQVRJT04iCiAucnMKIC5zcApAQCAtMTU2NSwxMCArMTY0NSwxNCBAQAogUmV0dXJuIGEgY29weSBvZiB0aGUgcGF0dGVybidzIG9wdGlvbnMuIFRoZSB0aGlyZCBhcmd1bWVudCBzaG91bGQgcG9pbnQgdG8gYQogXGZCdWludDMyX3RcZlAgdmFyaWFibGUuIFBDUkUyX0lORk9fQVJHT1BUSU9OUyByZXR1cm5zIGV4YWN0bHkgdGhlIG9wdGlvbnMgdGhhdAogd2VyZSBwYXNzZWQgdG8gXGZCcGNyZTJfY29tcGlsZSgpXGZQLCB3aGVyZWFzIFBDUkUyX0lORk9fQUxMT1BUSU9OUyByZXR1cm5zCi10aGUgY29tcGlsZSBvcHRpb25zIGFzIG1vZGlmaWVkIGJ5IGFueSB0b3AtbGV2ZWwgb3B0aW9uIHNldHRpbmdzIHN1Y2ggYXMgKCpVVEYpCi1hdCB0aGUgc3RhcnQgb2YgdGhlIHBhdHRlcm4gaXRzZWxmLiBGb3IgZXhhbXBsZSwgaWYgdGhlIHBhdHRlcm4gLygqVVRGKWFiYy8gaXMKLWNvbXBpbGVkIHdpdGggdGhlIFBDUkUyX0VYVEVOREVEIG9wdGlvbiwgdGhlIHJlc3VsdCBpcyBQQ1JFMl9FWFRFTkRFRCBhbmQKLVBDUkUyX1VURi4KK3RoZSBjb21waWxlIG9wdGlvbnMgYXMgbW9kaWZpZWQgYnkgYW55IHRvcC1sZXZlbCAoKlhYWCkgb3B0aW9uIHNldHRpbmdzIHN1Y2ggYXMKKygqVVRGKSBhdCB0aGUgc3RhcnQgb2YgdGhlIHBhdHRlcm4gaXRzZWxmLgorLlAKK0ZvciBleGFtcGxlLCBpZiB0aGUgcGF0dGVybiAvKCpVVEYpYWJjLyBpcyBjb21waWxlZCB3aXRoIHRoZSBQQ1JFMl9FWFRFTkRFRAorb3B0aW9uLCB0aGUgcmVzdWx0IGZvciBQQ1JFMl9JTkZPX0FMTE9QVElPTlMgaXMgUENSRTJfRVhURU5ERUQgYW5kIFBDUkUyX1VURi4KK09wdGlvbiBzZXR0aW5ncyBzdWNoIGFzICg/aSkgdGhhdCBjYW4gY2hhbmdlIHdpdGhpbiBhIHBhdHRlcm4gZG8gbm90IGFmZmVjdCB0aGUKK3Jlc3VsdCBvZiBQQ1JFMl9JTkZPX0FMTE9QVElPTlMsIGV2ZW4gaWYgdGhleSBhcHBlYXIgcmlnaHQgYXQgdGhlIHN0YXJ0IG9mIHRoZQorcGF0dGVybi4gKFRoaXMgd2FzIGRpZmZlcmVudCBpbiBzb21lIGVhcmxpZXIgcmVsZWFzZXMuKQogLlAKIEEgcGF0dGVybiBjb21waWxlZCB3aXRob3V0IFBDUkUyX0FOQ0hPUkVEIGlzIGF1dG9tYXRpY2FsbHkgYW5jaG9yZWQgYnkgUENSRTIgaWYKIHRoZSBmaXJzdCBzaWduaWZpY2FudCBpdGVtIGluIGV2ZXJ5IHRvcC1sZXZlbCBicmFuY2ggaXMgb25lIG9mIHRoZSBmb2xsb3dpbmc6CkBAIC0yMDQzLDEzICsyMTI3LDE0IEBACiAuc3AKIFRoZSB1bnVzZWQgYml0cyBvZiB0aGUgXGZJb3B0aW9uc1xmUCBhcmd1bWVudCBmb3IgXGZCcGNyZTJfbWF0Y2goKVxmUCBtdXN0IGJlCiB6ZXJvLiBUaGUgb25seSBiaXRzIHRoYXQgbWF5IGJlIHNldCBhcmUgUENSRTJfQU5DSE9SRUQsIFBDUkUyX05PVEJPTCwKLVBDUkUyX05PVEVPTCwgUENSRTJfTk9URU1QVFksIFBDUkUyX05PVEVNUFRZX0FUU1RBUlQsIFBDUkUyX05PX1VURl9DSEVDSywKLVBDUkUyX1BBUlRJQUxfSEFSRCwgYW5kIFBDUkUyX1BBUlRJQUxfU09GVC4gVGhlaXIgYWN0aW9uIGlzIGRlc2NyaWJlZCBiZWxvdy4KK1BDUkUyX05PVEVPTCwgUENSRTJfTk9URU1QVFksIFBDUkUyX05PVEVNUFRZX0FUU1RBUlQsIFBDUkUyX05PX0pJVCwKK1BDUkUyX05PX1VURl9DSEVDSywgUENSRTJfUEFSVElBTF9IQVJELCBhbmQgUENSRTJfUEFSVElBTF9TT0ZULiBUaGVpciBhY3Rpb24gaXMKK2Rlc2NyaWJlZCBiZWxvdy4KIC5QCiBTZXR0aW5nIFBDUkUyX0FOQ0hPUkVEIGF0IG1hdGNoIHRpbWUgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUganVzdC1pbi10aW1lIChKSVQpCiBjb21waWxlci4gSWYgaXQgaXMgc2V0LCBKSVQgbWF0Y2hpbmcgaXMgZGlzYWJsZWQgYW5kIHRoZSBub3JtYWwgaW50ZXJwcmV0aXZlCi1jb2RlIGluIFxmQnBjcmUyX21hdGNoKClcZlAgaXMgcnVuLiBUaGUgcmVtYWluaW5nIG9wdGlvbnMgYXJlIHN1cHBvcnRlZCBmb3IgSklUCi1tYXRjaGluZy4KK2NvZGUgaW4gXGZCcGNyZTJfbWF0Y2goKVxmUCBpcyBydW4uIEFwYXJ0IGZyb20gUENSRTJfTk9fSklUIChvYnZpb3VzbHkpLCB0aGUKK3JlbWFpbmluZyBvcHRpb25zIGFyZSBzdXBwb3J0ZWQgZm9yIEpJVCBtYXRjaGluZy4KIC5zcAogICBQQ1JFMl9BTkNIT1JFRAogLnNwCkBAIC0yMDk3LDYgKzIxODIsMTMgQEAKIElmIHRoZSBwYXR0ZXJuIGlzIGFuY2hvcmVkLCBzdWNoIGEgbWF0Y2ggY2FuIG9jY3VyIG9ubHkgaWYgdGhlIHBhdHRlcm4gY29udGFpbnMKIFxlSy4KIC5zcAorICBQQ1JFMl9OT19KSVQKKy5zcAorQnkgZGVmYXVsdCwgaWYgYSBwYXR0ZXJuIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBwcm9jZXNzZWQgYnkKK1xmQnBjcmUyX2ppdF9jb21waWxlKClcZlAsIEpJVCBpcyBhdXRvbWF0aWNhbGx5IHVzZWQgd2hlbiBcZkJwY3JlMl9tYXRjaCgpXGZQCitpcyBjYWxsZWQgd2l0aCBvcHRpb25zIHRoYXQgSklUIHN1cHBvcnRzLiBTZXR0aW5nIFBDUkUyX05PX0pJVCBkaXNhYmxlcyB0aGUgdXNlCitvZiBKSVQ7IGl0IGZvcmNlcyBtYXRjaGluZyB0byBiZSBkb25lIGJ5IHRoZSBpbnRlcnByZXRlci4KKy5zcAogICBQQ1JFMl9OT19VVEZfQ0hFQ0sKIC5zcAogV2hlbiBQQ1JFMl9VVEYgaXMgc2V0IGF0IGNvbXBpbGUgdGltZSwgdGhlIHZhbGlkaXR5IG9mIHRoZSBzdWJqZWN0IGFzIGEgVVRGCkBAIC0yMzc4LDExICsyNDcwLDE2IEBACiAucnMKIC5zcAogSWYgXGZCcGNyZTJfbWF0Y2goKVxmUCBmYWlscywgaXQgcmV0dXJucyBhIG5lZ2F0aXZlIG51bWJlci4gVGhpcyBjYW4gYmUKLWNvbnZlcnRlZCB0byBhIHRleHQgc3RyaW5nIGJ5IGNhbGxpbmcgXGZCcGNyZTJfZ2V0X2Vycm9yX21lc3NhZ2UoKVxmUC4gTmVnYXRpdmUKLWVycm9yIGNvZGVzIGFyZSBhbHNvIHJldHVybmVkIGJ5IG90aGVyIGZ1bmN0aW9ucywgYW5kIGFyZSBkb2N1bWVudGVkIHdpdGggdGhlbS4KLVRoZSBjb2RlcyBhcmUgZ2l2ZW4gbmFtZXMgaW4gdGhlIGhlYWRlciBmaWxlLiBJZiBVVEYgY2hlY2tpbmcgaXMgaW4gZm9yY2UgYW5kCi1hbiBpbnZhbGlkIFVURiBzdWJqZWN0IHN0cmluZyBpcyBkZXRlY3RlZCwgb25lIG9mIGEgbnVtYmVyIG9mIFVURi1zcGVjaWZpYwotbmVnYXRpdmUgZXJyb3IgY29kZXMgaXMgcmV0dXJuZWQuIERldGFpbHMgYXJlIGdpdmVuIGluIHRoZQorY29udmVydGVkIHRvIGEgdGV4dCBzdHJpbmcgYnkgY2FsbGluZyB0aGUgXGZCcGNyZTJfZ2V0X2Vycm9yX21lc3NhZ2UoKVxmUAorZnVuY3Rpb24gKHNlZSAiT2J0YWluaW5nIGEgdGV4dHVhbCBlcnJvciBtZXNzYWdlIgorLlwiIEhUTUwgPGEgaHJlZj0iI2dldGVycm9ybWVzc2FnZSI+CisuXCIgPC9hPgorYmVsb3cpLgorLlwiCitOZWdhdGl2ZSBlcnJvciBjb2RlcyBhcmUgYWxzbyByZXR1cm5lZCBieSBvdGhlciBmdW5jdGlvbnMsIGFuZCBhcmUgZG9jdW1lbnRlZAord2l0aCB0aGVtLiBUaGUgY29kZXMgYXJlIGdpdmVuIG5hbWVzIGluIHRoZSBoZWFkZXIgZmlsZS4gSWYgVVRGIGNoZWNraW5nIGlzIGluCitmb3JjZSBhbmQgYW4gaW52YWxpZCBVVEYgc3ViamVjdCBzdHJpbmcgaXMgZGV0ZWN0ZWQsIG9uZSBvZiBhIG51bWJlciBvZgorVVRGLXNwZWNpZmljIG5lZ2F0aXZlIGVycm9yIGNvZGVzIGlzIHJldHVybmVkLiBEZXRhaWxzIGFyZSBnaXZlbiBpbiB0aGUKIC5cIiBIUkVGCiBcZkJwY3JlMnVuaWNvZGVcZlAKIC5cIgpAQCAtMjQ5NSw2ICsyNTkyLDMwIEBACiBUaGUgaW50ZXJuYWwgcmVjdXJzaW9uIGxpbWl0IHdhcyByZWFjaGVkLgogLgogLgorLlwiIEhUTUwgPGEgbmFtZT0iZ2V0ZXJyb3JtZXNzYWdlIj48L2E+CisuU0ggIk9CVEFJTklORyBBIFRFWFRVQUwgRVJST1IgTUVTU0FHRSIKKy5ycworLnNwCisubmYKKy5CIGludCBwY3JlMl9nZXRfZXJyb3JfbWVzc2FnZShpbnQgXGZJZXJyb3Jjb2RlXGZQLCBQQ1JFMl9VQ0hBUiAqXGZJYnVmZmVyXGZQLAorLkIgIiAgUENSRTJfU0laRSBcZklidWZmbGVuXGZQKTsiCisuZmkKKy5QCitBIHRleHQgbWVzc2FnZSBmb3IgYW4gZXJyb3IgY29kZSBmcm9tIGFueSBQQ1JFMiBmdW5jdGlvbiAoY29tcGlsZSwgbWF0Y2gsIG9yCithdXhpbGlhcnkpIGNhbiBiZSBvYnRhaW5lZCBieSBjYWxsaW5nIFxmQnBjcmUyX2dldF9lcnJvcl9tZXNzYWdlKClcZlAuIFRoZSBjb2RlCitpcyBwYXNzZWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50LCB3aXRoIHRoZSByZW1haW5pbmcgdHdvIGFyZ3VtZW50cyBzcGVjaWZ5aW5nIGEKK2NvZGUgdW5pdCBidWZmZXIgYW5kIGl0cyBsZW5ndGgsIGludG8gd2hpY2ggdGhlIHRleHQgbWVzc2FnZSBpcyBwbGFjZWQuIE5vdGUKK3RoYXQgdGhlIG1lc3NhZ2UgaXMgcmV0dXJuZWQgaW4gY29kZSB1bml0cyBvZiB0aGUgYXBwcm9wcmlhdGUgd2lkdGggZm9yIHRoZQorbGlicmFyeSB0aGF0IGlzIGJlaW5nIHVzZWQuCisuUAorVGhlIHJldHVybmVkIG1lc3NhZ2UgaXMgdGVybWluYXRlZCB3aXRoIGEgdHJhaWxpbmcgemVybywgYW5kIHRoZSBmdW5jdGlvbgorcmV0dXJucyB0aGUgbnVtYmVyIG9mIGNvZGUgdW5pdHMgdXNlZCwgZXhjbHVkaW5nIHRoZSB0cmFpbGluZyB6ZXJvLiBJZiB0aGUKK2Vycm9yIG51bWJlciBpcyB1bmtub3duLCB0aGUgbmVnYXRpdmUgZXJyb3IgY29kZSBQQ1JFMl9FUlJPUl9CQUREQVRBIGlzCityZXR1cm5lZC4gSWYgdGhlIGJ1ZmZlciBpcyB0b28gc21hbGwsIHRoZSBtZXNzYWdlIGlzIHRydW5jYXRlZCAoYnV0IHN0aWxsIHdpdGgKK2EgdHJhaWxpbmcgemVybyksIGFuZCB0aGUgbmVnYXRpdmUgZXJyb3IgY29kZSBQQ1JFMl9FUlJPUl9OT01FTU9SWSBpcyByZXR1cm5lZC4KK05vbmUgb2YgdGhlIG1lc3NhZ2VzIGFyZSB2ZXJ5IGxvbmc7IGEgYnVmZmVyIHNpemUgb2YgMTIwIGNvZGUgdW5pdHMgaXMgYW1wbGUuCisuCisuCiAuXCIgSFRNTCA8YSBuYW1lPSJleHRyYWN0YnludW1iZXIiPjwvYT4KIC5TSCAiRVhUUkFDVElORyBDQVBUVVJFRCBTVUJTVFJJTkdTIEJZIE5VTUJFUiIKIC5ycwpAQCAtMjg3Miw3ICsyOTkzLDEyIEBACiBzdGFydGVkLCB3aGljaCBjYW4gaGFwcGVuIGlmIFxlSyBpcyB1c2VkIGluIGFuIGFzc2VydGlvbikuCiAuUAogQXMgZm9yIGFsbCBQQ1JFMiBlcnJvcnMsIGEgdGV4dCBtZXNzYWdlIHRoYXQgZGVzY3JpYmVzIHRoZSBlcnJvciBjYW4gYmUKLW9idGFpbmVkIGJ5IGNhbGxpbmcgXGZCcGNyZTJfZ2V0X2Vycm9yX21lc3NhZ2UoKVxmUC4KK29idGFpbmVkIGJ5IGNhbGxpbmcgdGhlIFxmQnBjcmUyX2dldF9lcnJvcl9tZXNzYWdlKClcZlAgZnVuY3Rpb24gKHNlZQorIk9idGFpbmluZyBhIHRleHR1YWwgZXJyb3IgbWVzc2FnZSIKKy5cIiBIVE1MIDxhIGhyZWY9IiNnZXRlcnJvcm1lc3NhZ2UiPgorLlwiIDwvYT4KK2Fib3ZlKS4KKy5cIgogLgogLgogLlNIICJEVVBMSUNBVEUgU1VCUEFUVEVSTiBOQU1FUyIKQEAgLTMxNjYsNiArMzI5Miw2IEBACiAucnMKIC5zcAogLm5mCi1MYXN0IHVwZGF0ZWQ6IDE2IERlY2VtYmVyIDIwMTUKLUNvcHlyaWdodCAoYykgMTk5Ny0yMDE1IFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlLgorTGFzdCB1cGRhdGVkOiAxNyBKdW5lIDIwMTYKK0NvcHlyaWdodCAoYykgMTk5Ny0yMDE2IFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlLgogLmZpCmRpZmYgLS1naXQgYS9kaXN0Mi9kb2MvcGNyZTJidWlsZC4zIGIvZGlzdDIvZG9jL3BjcmUyYnVpbGQuMwppbmRleCBhOTBmMWIyLi4xMWIxYzU3IDEwMDY0NAotLS0gYS9kaXN0Mi9kb2MvcGNyZTJidWlsZC4zCisrKyBiL2Rpc3QyL2RvYy9wY3JlMmJ1aWxkLjMKQEAgLTEsNCArMSw0IEBACi0uVEggUENSRTJCVUlMRCAzICIxNiBPY3RvYmVyIDIwMTUiICJQQ1JFMiAxMC4yMSIKKy5USCBQQ1JFMkJVSUxEIDMgIjAxIEFwcmlsIDIwMTYiICJQQ1JFMiAxMC4yMiIKIC5TSCBOQU1FCiBQQ1JFMiAtIFBlcmwtY29tcGF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIChyZXZpc2VkIEFQSSkKIC4KQEAgLTM1Miw2ICszNTIsMTkgQEAKIGVudmlyb25tZW50LgogLgogLgorLlNIICJQQ1JFMkdSRVAgU1VQUE9SVCBGT1IgRVhURVJOQUwgU0NSSVBUUyIKKy5ycworLnNwCitCeSBkZWZhdWx0LCBvbiBub24tV2luZG93cyBzeXN0ZW1zLCBcZkJwY3JlMmdyZXBcZlAgc3VwcG9ydHMgdGhlIHVzZSBvZgorY2FsbG91dHMgd2l0aCBzdHJpbmcgYXJndW1lbnRzIHdpdGhpbiB0aGUgcGF0dGVybnMgaXQgaXMgbWF0Y2hpbmcsIGluIG9yZGVyIHRvCitydW4gZXh0ZXJuYWwgc2NyaXB0cy4gRm9yIGRldGFpbHMsIHNlZSB0aGUKKy5cIiBIUkVGCitcZkJwY3JlMmdyZXBcZlAKKy5cIgorZG9jdW1lbnRhdGlvbi4gVGhpcyBzdXBwb3J0IGNhbiBiZSBkaXNhYmxlZCBieSBhZGRpbmcKKy0tZGlzYWJsZS1wY3JlMmdyZXAtY2FsbG91dCB0byB0aGUgXGZCY29uZmlndXJlXGZQIGNvbW1hbmQuCisuCisuCiAuU0ggIlBDUkUyR1JFUCBPUFRJT05TIEZPUiBDT01QUkVTU0VEIEZJTEUgU1VQUE9SVCIKIC5ycwogLnNwCkBAIC0zODEsNyArMzk0LDcgQEAKICAgLS13aXRoLXBjcmUyZ3JlcC1idWZzaXplPTUwSwogLnNwCiB0byB0aGUgXGZCY29uZmlndXJlXGZQIGNvbW1hbmQuIFRoZSBjYWxsZXIgb2YgXGZQcGNyZTJncmVwXGZQIGNhbiBvdmVycmlkZSB0aGlzCi12YWx1ZSBieSB1c2luZyAtLWJ1ZmZlci1zaXplIG9uIHRoZSBjb21tYW5kIGxpbmUuLgordmFsdWUgYnkgdXNpbmcgLS1idWZmZXItc2l6ZSBvbiB0aGUgY29tbWFuZCBsaW5lLgogLgogLgogLlNIICJQQ1JFMlRFU1QgT1BUSU9OIEZPUiBMSUJSRUFETElORSBTVVBQT1JUIgpAQCAtNTE5LDYgKzUzMiw2IEBACiAucnMKIC5zcAogLm5mCi1MYXN0IHVwZGF0ZWQ6IDE2IE9jdG9iZXIgMjAxNQotQ29weXJpZ2h0IChjKSAxOTk3LTIwMTUgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UuCitMYXN0IHVwZGF0ZWQ6IDAxIEFwcmlsIDIwMTYKK0NvcHlyaWdodCAoYykgMTk5Ny0yMDE2IFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlLgogLmZpCmRpZmYgLS1naXQgYS9kaXN0Mi9kb2MvcGNyZTJkZW1vLjMgYi9kaXN0Mi9kb2MvcGNyZTJkZW1vLjMKaW5kZXggNWRlZWQwYS4uYzAyZGNkOSAxMDA2NDQKLS0tIGEvZGlzdDIvZG9jL3BjcmUyZGVtby4zCisrKyBiL2Rpc3QyL2RvYy9wY3JlMmRlbW8uMwpAQCAtMjAsMjggKzIwLDMxIEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKiBUaGlzIGlzIGEgZGVtb25zdHJhdGlvbiBwcm9ncmFtIHRvIGlsbHVzdHJhdGUgYSBzdHJhaWdodGZvcndhcmQgd2F5IG9mCi1jYWxsaW5nIHRoZSBQQ1JFMiByZWd1bGFyIGV4cHJlc3Npb24gbGlicmFyeSBmcm9tIGEgQyBwcm9ncmFtLiBTZWUgdGhlCit1c2luZyB0aGUgUENSRTIgcmVndWxhciBleHByZXNzaW9uIGxpYnJhcnkgZnJvbSBhIEMgcHJvZ3JhbS4gU2VlIHRoZQogcGNyZTJzYW1wbGUgZG9jdW1lbnRhdGlvbiBmb3IgYSBzaG9ydCBkaXNjdXNzaW9uICgibWFuIHBjcmUyc2FtcGxlIiBpZiB5b3UgaGF2ZQogdGhlIFBDUkUyIG1hbiBwYWdlcyBpbnN0YWxsZWQpLiBQQ1JFMiBpcyBhIHJldmlzZWQgQVBJIGZvciB0aGUgbGlicmFyeSwgYW5kIGlzCiBpbmNvbXBhdGlibGUgd2l0aCB0aGUgb3JpZ2luYWwgUENSRSBBUEkuCiAKIFRoZXJlIGFyZSBhY3R1YWxseSB0aHJlZSBsaWJyYXJpZXMsIGVhY2ggc3VwcG9ydGluZyBhIGRpZmZlcmVudCBjb2RlIHVuaXQKLXdpZHRoLiBUaGlzIGRlbW9uc3RyYXRpb24gcHJvZ3JhbSB1c2VzIHRoZSA4LWJpdCBsaWJyYXJ5Lgord2lkdGguIFRoaXMgZGVtb25zdHJhdGlvbiBwcm9ncmFtIHVzZXMgdGhlIDgtYml0IGxpYnJhcnkuIFRoZSBkZWZhdWx0IGlzIHRvCitwcm9jZXNzIGVhY2ggY29kZSB1bml0IGFzIGEgc2VwYXJhdGUgY2hhcmFjdGVyLCBidXQgaWYgdGhlIHBhdHRlcm4gYmVnaW5zIHdpdGgKKyIoKlVURikiLCBib3RoIGl0IGFuZCB0aGUgc3ViamVjdCBhcmUgdHJlYXRlZCBhcyBVVEYtOCBzdHJpbmdzLCB3aGVyZQorY2hhcmFjdGVycyBtYXkgb2NjdXB5IG11bHRpcGxlIGNvZGUgdW5pdHMuCiAKIEluIFVuaXgtbGlrZSBlbnZpcm9ubWVudHMsIGlmIFBDUkUyIGlzIGluc3RhbGxlZCBpbiB5b3VyIHN0YW5kYXJkIHN5c3RlbQogbGlicmFyaWVzLCB5b3Ugc2hvdWxkIGJlIGFibGUgdG8gY29tcGlsZSB0aGlzIHByb2dyYW0gdXNpbmcgdGhpcyBjb21tYW5kOgogCi1nY2MgLVdhbGwgcGNyZTJkZW1vLmMgLWxwY3JlMi04IC1vIHBjcmUyZGVtbworY2MgLVdhbGwgcGNyZTJkZW1vLmMgLWxwY3JlMi04IC1vIHBjcmUyZGVtbwogCiBJZiBQQ1JFMiBpcyBub3QgaW5zdGFsbGVkIGluIGEgc3RhbmRhcmQgcGxhY2UsIGl0IGlzIGxpa2VseSB0byBiZSBpbnN0YWxsZWQKIHdpdGggc3VwcG9ydCBmb3IgdGhlIHBrZy1jb25maWcgbWVjaGFuaXNtLiBJZiB5b3UgaGF2ZSBwa2ctY29uZmlnLCB5b3UgY2FuCiBjb21waWxlIHRoaXMgcHJvZ3JhbSB1c2luZyB0aGlzIGNvbW1hbmQ6CiAKLWdjYyAtV2FsbCBwY3JlMmRlbW8uYyBgcGtnLWNvbmZpZyAtLWNmbGFncyAtLWxpYnMgbGlicGNyZTItOGAgLW8gcGNyZTJkZW1vCitjYyAtV2FsbCBwY3JlMmRlbW8uYyBgcGtnLWNvbmZpZyAtLWNmbGFncyAtLWxpYnMgbGlicGNyZTItOGAgLW8gcGNyZTJkZW1vCiAKLUlmIHlvdSBkbyBub3QgaGF2ZSBwa2ctY29uZmlnLCB5b3UgbWF5IGhhdmUgdG8gdXNlIHRoaXM6CitJZiB5b3UgZG8gbm90IGhhdmUgcGtnLWNvbmZpZywgeW91IG1heSBoYXZlIHRvIHVzZSBzb21ldGhpbmcgbGlrZSB0aGlzOgogCi1nY2MgLVdhbGwgcGNyZTJkZW1vLmMgLUkvdXNyL2xvY2FsL2luY2x1ZGUgLUwvdXNyL2xvY2FsL2xpYiBcZQorY2MgLVdhbGwgcGNyZTJkZW1vLmMgLUkvdXNyL2xvY2FsL2luY2x1ZGUgLUwvdXNyL2xvY2FsL2xpYiBcZQogICAtUi91c3IvbG9jYWwvbGliIC1scGNyZTItOCAtbyBwY3JlMmRlbW8KIAogUmVwbGFjZSAiL3Vzci9sb2NhbC9pbmNsdWRlIiBhbmQgIi91c3IvbG9jYWwvbGliIiB3aXRoIHdoZXJldmVyIHRoZSBpbmNsdWRlIGFuZApAQCAtNTYsOSArNTksMTQgQEAKIAogLyogI2RlZmluZSBQQ1JFMl9TVEFUSUMgKi8KIAotLyogVGhpcyBtYWNybyBtdXN0IGJlIGRlZmluZWQgYmVmb3JlIGluY2x1ZGluZyBwY3JlMi5oLiBGb3IgYSBwcm9ncmFtIHRoYXQgdXNlcwotb25seSBvbmUgY29kZSB1bml0IHdpZHRoLCBpdCBtYWtlcyBpdCBwb3NzaWJsZSB0byB1c2UgZ2VuZXJpYyBmdW5jdGlvbiBuYW1lcwotc3VjaCBhcyBwY3JlMl9jb21waWxlKCkuICovCisvKiBUaGUgUENSRTJfQ09ERV9VTklUX1dJRFRIIG1hY3JvIG11c3QgYmUgZGVmaW5lZCBiZWZvcmUgaW5jbHVkaW5nIHBjcmUyLmguCitGb3IgYSBwcm9ncmFtIHRoYXQgdXNlcyBvbmx5IG9uZSBjb2RlIHVuaXQgd2lkdGgsIHNldHRpbmcgaXQgdG8gOCwgMTYsIG9yIDMyCittYWtlcyBpdCBwb3NzaWJsZSB0byB1c2UgZ2VuZXJpYyBmdW5jdGlvbiBuYW1lcyBzdWNoIGFzIHBjcmUyX2NvbXBpbGUoKS4gTm90ZQordGhhdCBqdXN0IGNoYW5naW5nIDggdG8gMTYgKGZvciBleGFtcGxlKSBpcyBub3Qgc3VmZmljaWVudCB0byBjb252ZXJ0IHRoaXMKK3Byb2dyYW0gdG8gcHJvY2VzcyAxNi1iaXQgY2hhcmFjdGVycy4gRXZlbiBpbiBhIGZ1bGx5IDE2LWJpdCBlbnZpcm9ubWVudCwgd2hlcmUKK3N0cmluZy1oYW5kbGluZyBmdW5jdGlvbnMgc3VjaCBhcyBzdHJjbXAoKSBhbmQgcHJpbnRmKCkgd29yayB3aXRoIDE2LWJpdAorY2hhcmFjdGVycywgdGhlIGNvZGUgZm9yIGhhbmRsaW5nIHRoZSB0YWJsZSBvZiBuYW1lZCBzdWJzdHJpbmdzIHdpbGwgc3RpbGwgbmVlZAordG8gYmUgbW9kaWZpZWQuICovCiAKICNkZWZpbmUgUENSRTJfQ09ERV9VTklUX1dJRFRIIDgKIApAQCAtNzksMTkgKzg3LDE5IEBACiB7CiBwY3JlMl9jb2RlICpyZTsKIFBDUkUyX1NQVFIgcGF0dGVybjsgICAgIC8qIFBDUkUyX1NQVFIgaXMgYSBwb2ludGVyIHRvIHVuc2lnbmVkIGNvZGUgdW5pdHMgb2YgKi8KLVBDUkUyX1NQVFIgc3ViamVjdDsgICAgIC8qIHRoZSBhcHByb3ByaWF0ZSB3aWR0aCAoOCwgMTYsIG9yIDMyIGJpdHMpLiAqLworUENSRTJfU1BUUiBzdWJqZWN0OyAgICAgLyogdGhlIGFwcHJvcHJpYXRlIHdpZHRoIChpbiB0aGlzIGNhc2UsIDggYml0cykuICovCiBQQ1JFMl9TUFRSIG5hbWVfdGFibGU7CiAKIGludCBjcmxmX2lzX25ld2xpbmU7CiBpbnQgZXJyb3JudW1iZXI7CiBpbnQgZmluZF9hbGw7CiBpbnQgaTsKLWludCBuYW1lY291bnQ7Ci1pbnQgbmFtZV9lbnRyeV9zaXplOwogaW50IHJjOwogaW50IHV0Zjg7CiAKIHVpbnQzMl90IG9wdGlvbl9iaXRzOwordWludDMyX3QgbmFtZWNvdW50OwordWludDMyX3QgbmFtZV9lbnRyeV9zaXplOwogdWludDMyX3QgbmV3bGluZTsKIAogUENSRTJfU0laRSBlcnJvcm9mZnNldDsKQEAgLTEwNiwxNSArMTE0LDE5IEBACiAqIEZpcnN0LCBzb3J0IG91dCB0aGUgY29tbWFuZCBsaW5lLiBUaGVyZSBpcyBvbmx5IG9uZSBwb3NzaWJsZSBvcHRpb24gYXQgICoKICogdGhlIG1vbWVudCwgIi1nIiB0byByZXF1ZXN0IHJlcGVhdGVkIG1hdGNoaW5nIHRvIGZpbmQgYWxsIG9jY3VycmVuY2VzLCAgKgogKiBsaWtlIFBlcmwncyAvZyBvcHRpb24uIFdlIHNldCB0aGUgdmFyaWFibGUgZmluZF9hbGwgdG8gYSBub24temVybyB2YWx1ZSAqCi0qIGlmIHRoZSAtZyBvcHRpb24gaXMgcHJlc2VudC4gQXBhcnQgZnJvbSB0aGF0LCB0aGVyZSBtdXN0IGJlIGV4YWN0bHkgdHdvICoKLSogYXJndW1lbnRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiBpZiB0aGUgLWcgb3B0aW9uIGlzIHByZXNlbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogZmluZF9hbGwgPSAwOwogZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykKICAgewogICBpZiAoc3RyY21wKGFyZ3ZbaV0sICItZyIpID09IDApIGZpbmRfYWxsID0gMTsKLSAgICBlbHNlIGJyZWFrOworICBlbHNlIGlmIChhcmd2W2ldWzBdID09ICctJykKKyAgICB7CisgICAgcHJpbnRmKCJVbnJlY29nbmlzZWQgb3B0aW9uICVzXGVuIiwgYXJndltpXSk7CisgICAgcmV0dXJuIDE7CisgICAgfQorICBlbHNlIGJyZWFrOwogICB9CiAKIC8qIEFmdGVyIHRoZSBvcHRpb25zLCB3ZSByZXF1aXJlIGV4YWN0bHkgdHdvIGFyZ3VtZW50cywgd2hpY2ggYXJlIHRoZSBwYXR0ZXJuLApAQCAtMTIyLDcgKzEzNCw3IEBACiAKIGlmIChhcmdjIC0gaSAhPSAyKQogICB7Ci0gIHByaW50ZigiVHdvIGFyZ3VtZW50cyByZXF1aXJlZDogYSByZWdleCBhbmQgYSBzdWJqZWN0IHN0cmluZ1xlbiIpOworICBwcmludGYoIkV4YWN0bHkgdHdvIGFyZ3VtZW50cyByZXF1aXJlZDogYSByZWdleCBhbmQgYSBzdWJqZWN0IHN0cmluZ1xlbiIpOwogICByZXR1cm4gMTsKICAgfQogCkBAIC0yMDEsNyArMjEzLDcgQEAKIHN0b3JlZC4gKi8KIAogb3ZlY3RvciA9IHBjcmUyX2dldF9vdmVjdG9yX3BvaW50ZXIobWF0Y2hfZGF0YSk7Ci1wcmludGYoIlxlbk1hdGNoIHN1Y2NlZWRlZCBhdCBvZmZzZXQgJWRcZW4iLCAoaW50KW92ZWN0b3JbMF0pOworcHJpbnRmKCJNYXRjaCBzdWNjZWVkZWQgYXQgb2Zmc2V0ICVkXGVuIiwgKGludClvdmVjdG9yWzBdKTsKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMjQyLDcgKzI1NCw3IEBACiAgIFBDUkUyX0lORk9fTkFNRUNPVU5ULCAvKiBnZXQgdGhlIG51bWJlciBvZiBuYW1lZCBzdWJzdHJpbmdzICovCiAgICZuYW1lY291bnQpOyAgICAgICAgICAvKiB3aGVyZSB0byBwdXQgdGhlIGFuc3dlciAqLwogCi1pZiAobmFtZWNvdW50IDw9IDApIHByaW50ZigiTm8gbmFtZWQgc3Vic3RyaW5nc1xlbiIpOyBlbHNlCitpZiAobmFtZWNvdW50ID09IDApIHByaW50ZigiTm8gbmFtZWQgc3Vic3RyaW5nc1xlbiIpOyBlbHNlCiAgIHsKICAgUENSRTJfU1BUUiB0YWJwdHI7CiAgIHByaW50ZigiTmFtZWQgc3Vic3RyaW5nc1xlbiIpOwpAQCAtMzMwLDggKzM0Miw4IEBACiAKIGZvciAoOzspCiAgIHsKLSAgdWludDMyX3Qgb3B0aW9ucyA9IDA7ICAgICAgICAgICAgICAgICAgICAvKiBOb3JtYWxseSBubyBvcHRpb25zICovCi0gIFBDUkUyX1NJWkUgc3RhcnRfb2Zmc2V0ID0gb3ZlY3RvclsxXTsgIC8qIFN0YXJ0IGF0IGVuZCBvZiBwcmV2aW91cyBtYXRjaCAqLworICB1aW50MzJfdCBvcHRpb25zID0gMDsgICAgICAgICAgICAgICAgICAgLyogTm9ybWFsbHkgbm8gb3B0aW9ucyAqLworICBQQ1JFMl9TSVpFIHN0YXJ0X29mZnNldCA9IG92ZWN0b3JbMV07ICAgLyogU3RhcnQgYXQgZW5kIG9mIHByZXZpb3VzIG1hdGNoICovCiAKICAgLyogSWYgdGhlIHByZXZpb3VzIG1hdGNoIHdhcyBmb3IgYW4gZW1wdHkgc3RyaW5nLCB3ZSBhcmUgZmluaXNoZWQgaWYgd2UgYXJlCiAgIGF0IHRoZSBlbmQgb2YgdGhlIHN1YmplY3QuIE90aGVyd2lzZSwgYXJyYW5nZSB0byBydW4gYW5vdGhlciBtYXRjaCBhdCB0aGUKQEAgLTM3MSw3ICszODMsNyBAQAogICAgIHsKICAgICBpZiAob3B0aW9ucyA9PSAwKSBicmVhazsgICAgICAgICAgICAgICAgICAgIC8qIEFsbCBtYXRjaGVzIGZvdW5kICovCiAgICAgb3ZlY3RvclsxXSA9IHN0YXJ0X29mZnNldCArIDE7ICAgICAgICAgICAgICAvKiBBZHZhbmNlIG9uZSBjb2RlIHVuaXQgKi8KLSAgICBpZiAoY3JsZl9pc19uZXdsaW5lICYmICAgICAgICAgICAgICAgICAgICAgIC8qIElmIENSTEYgaXMgbmV3bGluZSAmICovCisgICAgaWYgKGNybGZfaXNfbmV3bGluZSAmJiAgICAgICAgICAgICAgICAgICAgICAvKiBJZiBDUkxGIGlzIGEgbmV3bGluZSAmICovCiAgICAgICAgIHN0YXJ0X29mZnNldCA8IHN1YmplY3RfbGVuZ3RoIC0gMSAmJiAgICAvKiB3ZSBhcmUgYXQgQ1JMRiwgKi8KICAgICAgICAgc3ViamVjdFtzdGFydF9vZmZzZXRdID09ICdcZXInICYmCiAgICAgICAgIHN1YmplY3Rbc3RhcnRfb2Zmc2V0ICsgMV0gPT0gJ1xlbicpCkBAIC00MTcsNyArNDI5LDcgQEAKICAgICBwcmludGYoIiUyZDogJS4qc1xlbiIsIGksIChpbnQpc3Vic3RyaW5nX2xlbmd0aCwgKGNoYXIgKilzdWJzdHJpbmdfc3RhcnQpOwogICAgIH0KIAotICBpZiAobmFtZWNvdW50IDw9IDApIHByaW50ZigiTm8gbmFtZWQgc3Vic3RyaW5nc1xlbiIpOyBlbHNlCisgIGlmIChuYW1lY291bnQgPT0gMCkgcHJpbnRmKCJObyBuYW1lZCBzdWJzdHJpbmdzXGVuIik7IGVsc2UKICAgICB7CiAgICAgUENSRTJfU1BUUiB0YWJwdHIgPSBuYW1lX3RhYmxlOwogICAgIHByaW50ZigiTmFtZWQgc3Vic3RyaW5nc1xlbiIpOwpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL3BjcmUyZ3JlcC4xIGIvZGlzdDIvZG9jL3BjcmUyZ3JlcC4xCmluZGV4IDAyOGE5MWUuLjZkMjc3ODAgMTAwNjQ0Ci0tLSBhL2Rpc3QyL2RvYy9wY3JlMmdyZXAuMQorKysgYi9kaXN0Mi9kb2MvcGNyZTJncmVwLjEKQEAgLTEsNCArMSw0IEBACi0uVEggUENSRTJHUkVQIDEgIjAzIEphbnVhcnkgMjAxNSIgIlBDUkUyIDEwLjAwIgorLlRIIFBDUkUyR1JFUCAxICIxOSBKdW5lIDIwMTYiICJQQ1JFMiAxMC4yMiIKIC5TSCBOQU1FCiBwY3JlMmdyZXAgLSBhIGdyZXAgd2l0aCBQZXJsLWNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9ucy4KIC5TSCBTWU5PUFNJUwpAQCAtNDQwLDEwICs0NDAsMTUgQEAKIGxpbmUgaW4gd2hpY2ggdGhlIG1hdGNoIGVuZGVkLiBJZiB0aGUgbWF0Y2hlZCBzdHJpbmcgZW5kcyB3aXRoIGEgbmV3bGluZQogc2VxdWVuY2UgdGhlIG91dHB1dCBlbmRzIGF0IHRoZSBlbmQgb2YgdGhhdCBsaW5lLgogLnNwCi1XaGVuIHRoaXMgb3B0aW9uIGlzIHNldCwgdGhlIFBDUkUyIGxpYnJhcnkgaXMgY2FsbGVkIGluICJtdWx0aWxpbmUiIG1vZGUuCi1Ib3dldmVyLCBcZkJwY3JlMmdyZXBcZlAgc3RpbGwgcHJvY2Vzc2VzIHRoZSBpbnB1dCBsaW5lIGJ5IGxpbmUuIFRoZSBkaWZmZXJlbmNlCi1pcyB0aGF0IGEgbWF0Y2hlZCBzdHJpbmcgbWF5IGV4dGVuZCBwYXN0IHRoZSBlbmQgb2YgYSBsaW5lIGFuZCBjb250aW51ZSBvbgotb25lIG9yIG1vcmUgc3Vic2VxdWVudCBsaW5lcy4gVGhlIG5ld2xpbmUgc2VxdWVuY2UgbXVzdCBiZSBtYXRjaGVkIGFzIHBhcnQgb2YKK1doZW4gdGhpcyBvcHRpb24gaXMgc2V0LCB0aGUgUENSRTIgbGlicmFyeSBpcyBjYWxsZWQgaW4gIm11bHRpbGluZSIgbW9kZS4gVGhpcworYWxsb3dzIGEgbWF0Y2hlZCBzdHJpbmcgdG8gZXh0ZW5kIHBhc3QgdGhlIGVuZCBvZiBhIGxpbmUgYW5kIGNvbnRpbnVlIG9uIG9uZSBvcgorbW9yZSBzdWJzZXF1ZW50IGxpbmVzLiBIb3dldmVyLCBcZkJwY3JlMmdyZXBcZlAgc3RpbGwgcHJvY2Vzc2VzIHRoZSBpbnB1dCBsaW5lCitieSBsaW5lLiBPbmNlIGEgbWF0Y2ggaGFzIGJlZW4gaGFuZGxlZCwgc2Nhbm5pbmcgcmVzdGFydHMgYXQgdGhlIGJlZ2lubmluZyBvZgordGhlIG5leHQgbGluZSwganVzdCBhcyBpdCBkb2VzIHdoZW4gXGZCLU1cZlAgaXMgbm90IHByZXNlbnQuIFRoaXMgbWVhbnMgdGhhdCBpdAoraXMgcG9zc2libGUgZm9yIHRoZSBzZWNvbmQgb3Igc3Vic2VxdWVudCBsaW5lcyBpbiBhIG11bHRpbGluZSBtYXRjaCB0byBiZQorb3V0cHV0IGFnYWluIGFzIHBhcnQgb2YgYW5vdGhlciBtYXRjaC4KKy5zcAorVGhlIG5ld2xpbmUgc2VxdWVuY2UgdGhhdCBzZXBhcmF0ZXMgbXVsdGlwbGUgbGluZXMgbXVzdCBiZSBtYXRjaGVkIGFzIHBhcnQgb2YKIHRoZSBwYXR0ZXJuLiBGb3IgZXhhbXBsZSwgdG8gZmluZCB0aGUgcGhyYXNlICJyZWd1bGFyIGV4cHJlc3Npb24iIGluIGEgZmlsZQogd2hlcmUgInJlZ3VsYXIiIG1pZ2h0IGJlIGF0IHRoZSBlbmQgb2YgYSBsaW5lIGFuZCAiZXhwcmVzc2lvbiIgYXQgdGhlIHN0YXJ0IG9mCiB0aGUgbmV4dCBsaW5lLCB5b3UgY291bGQgdXNlIHRoaXMgY29tbWFuZDoKQEAgLTY1Myw2ICs2NTgsNTggQEAKIGNoYXJhY3Rlci4gT3RoZXJ3aXNlIFxmQnBjcmUyZ3JlcFxmUCB3aWxsIGFzc3VtZSB0aGF0IGl0IGhhcyBubyBkYXRhLgogLgogLgorLlNIICJDQUxMSU5HIEVYVEVSTkFMIFNDUklQVFMiCisucnMKKy5zcAorT24gbm9uLVdpbmRvd3Mgc3lzdGVtcywgXGZCcGNyZTJncmVwXGZQIGhhcywgYnkgZGVmYXVsdCwgc3VwcG9ydCBmb3IgY2FsbGluZworZXh0ZXJuYWwgcHJvZ3JhbXMgb3Igc2NyaXB0cyBkdXJpbmcgbWF0Y2hpbmcgYnkgbWFraW5nIHVzZSBvZiBQQ1JFMidzIGNhbGxvdXQKK2ZhY2lsaXR5LiBIb3dldmVyLCB0aGlzIHN1cHBvcnQgY2FuIGJlIGRpc2FibGVkIHdoZW4gXGZCcGNyZTJncmVwXGZQIGlzIGJ1aWx0LgorWW91IGNhbiBmaW5kIG91dCB3aGV0aGVyIHlvdXIgYmluYXJ5IGhhcyBzdXBwb3J0IGZvciBjYWxsb3V0cyBieSBydW5uaW5nIGl0Cit3aXRoIHRoZSBcZkItLWhlbHBcZlAgb3B0aW9uLiBJZiB0aGUgc3VwcG9ydCBpcyBub3QgZW5hYmxlZCwgYWxsIGNhbGxvdXRzIGluCitwYXR0ZXJucyBhcmUgaWdub3JlZCBieSBcZkJwY3JlMmdyZXBcZlAuCisuUAorQSBjYWxsb3V0IGluIGEgUENSRTIgcGF0dGVybiBpcyBvZiB0aGUgZm9ybSAoP0M8YXJnPikgd2hlcmUgdGhlIGFyZ3VtZW50IGlzCitlaXRoZXIgYSBudW1iZXIgb3IgYSBxdW90ZWQgc3RyaW5nIChzZWUgdGhlCisuXCIgSFJFRgorXGZCcGNyZTJjYWxsb3V0XGZQCisuXCIKK2RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMpLiBOdW1iZXJlZCBjYWxsb3V0cyBhcmUgaWdub3JlZCBieSBcZkJwY3JlMmdyZXBcZlAuCitTdHJpbmcgYXJndW1lbnRzIGFyZSBwYXJzZWQgYXMgYSBsaXN0IG9mIHN1YnN0cmluZ3Mgc2VwYXJhdGVkIGJ5IHBpcGUgKHZlcnRpY2FsCitiYXIpIGNoYXJhY3RlcnMuIFRoZSBmaXJzdCBzdWJzdHJpbmcgbXVzdCBiZSBhbiBleGVjdXRhYmxlIG5hbWUsIHdpdGggdGhlCitmb2xsb3dpbmcgc3Vic3RyaW5ncyBzcGVjaWZ5aW5nIGFyZ3VtZW50czoKKy5zcAorICBleGVjdXRhYmxlX25hbWV8YXJnMXxhcmcyfC4uLgorLnNwCitBbnkgc3Vic3RyaW5nIChpbmNsdWRpbmcgdGhlIGV4ZWN1dGFibGUgbmFtZSkgbWF5IGNvbnRhaW4gZXNjYXBlIHNlcXVlbmNlcworc3RhcnRlZCBieSBhIGRvbGxhciBjaGFyYWN0ZXI6ICQ8ZGlnaXRzPiBvciAkezxkaWdpdHM+fSBpcyByZXBsYWNlZCBieSB0aGUKK2NhcHR1cmVkIHN1YnN0cmluZyBvZiB0aGUgZ2l2ZW4gZGVjaW1hbCBudW1iZXIsIHdoaWNoIG11c3QgYmUgZ3JlYXRlciB0aGFuCit6ZXJvLiBJZiB0aGUgbnVtYmVyIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbnVtYmVyIG9mIGNhcHR1cmluZyBzdWJzdHJpbmdzLCBvciBpZgordGhlIGNhcHR1cmUgaXMgdW5zZXQsIHRoZSByZXBsYWNlbWVudCBpcyBlbXB0eS4KKy5QCitBbnkgb3RoZXIgY2hhcmFjdGVyIGlzIHN1YnN0aXR1dGVkIGJ5IGl0c2VsZi4gSW4gcGFydGljdWxhciwgJCQgaXMgcmVwbGFjZWQgYnkKK2Egc2luZ2xlIGRvbGxhciBhbmQgJHwgaXMgcmVwbGFjZWQgYnkgYSBwaXBlIGNoYXJhY3Rlci4gSGVyZSBpcyBhbiBleGFtcGxlOgorLnNwCisgIGVjaG8gLWUgImFiY2RlXGVuMTIzNDUiIHwgcGNyZTJncmVwIFxlCisgICAgJyg/eCkoLikoLi4oLikpCisgICAgKD9DIi9iaW4vZWNob3xBcmcxOiBbJDFdIFskMl0gWyQzXXxBcmcyOiAkfCR7MX0kfCAoJDQpIikoKScgLQorLnNwCisgIE91dHB1dDoKKy5zcAorICAgIEFyZzE6IFthXSBbYmNkXSBbZF0gQXJnMjogfGF8ICgpCisgICAgYWJjZGUKKyAgICBBcmcxOiBbMV0gWzIzNF0gWzRdIEFyZzI6IHwxfCAoKQorICAgIDEyMzQ1Cisuc3AKK1RoZSBwYXJhbWV0ZXJzIGZvciB0aGUgXGZCZXhlY3YoKVxmUCBzeXN0ZW0gY2FsbCB0aGF0IGlzIHVzZWQgdG8gcnVuIHRoZQorcHJvZ3JhbSBvciBzY3JpcHQgYXJlIHplcm8tdGVybWluYXRlZCBzdHJpbmdzLiBUaGlzIG1lYW5zIHRoYXQgYmluYXJ5IHplcm8KK2NoYXJhY3RlcnMgaW4gdGhlIGNhbGxvdXQgYXJndW1lbnQgd2lsbCBjYXVzZSBwcmVtYXR1cmUgdGVybWluYXRpb24gb2YgdGhlaXIKK3N1YnN0cmluZ3MsIGFuZCB0aGVyZWZvcmUgc2hvdWxkIG5vdCBiZSBwcmVzZW50LiBBbnkgc3ludGF4IGVycm9ycyBpbiB0aGUKK3N0cmluZyAoZm9yIGV4YW1wbGUsIGEgZG9sbGFyIG5vdCBmb2xsb3dlZCBieSBhbm90aGVyIGNoYXJhY3RlcikgY2F1c2UgdGhlCitjYWxsb3V0IHRvIGJlIGlnbm9yZWQuIElmIHJ1bm5pbmcgdGhlIHByb2dyYW0gZmFpbHMgZm9yIGFueSByZWFzb24gKGluY2x1ZGluZwordGhlIG5vbi1leGlzdGVuY2Ugb2YgdGhlIGV4ZWN1dGFibGUpLCBhIGxvY2FsIG1hdGNoaW5nIGZhaWx1cmUgb2NjdXJzIGFuZCB0aGUKK21hdGNoZXIgYmFja3RyYWNrcyBpbiB0aGUgbm9ybWFsIHdheS4KKy4KKy4KIC5TSCAiTUFUQ0hJTkcgRVJST1JTIgogLnJzCiAuc3AKQEAgLTY4Myw3ICs3NDAsNyBAQAogLlNIICJTRUUgQUxTTyIKIC5ycwogLnNwCi1cZkJwY3JlMnBhdHRlcm5cZlAoMyksIFxmQnBjcmUyc3ludGF4XGZQKDMpLgorXGZCcGNyZTJwYXR0ZXJuXGZQKDMpLCBcZkJwY3JlMnN5bnRheFxmUCgzKSwgXGZCcGNyZTJjYWxsb3V0XGZQKDMpLgogLgogLgogLlNIIEFVVEhPUgpAQCAtNzAwLDYgKzc1Nyw2IEBACiAucnMKIC5zcAogLm5mCi1MYXN0IHVwZGF0ZWQ6IDAzIEphbnVhcnkgMjAxNQotQ29weXJpZ2h0IChjKSAxOTk3LTIwMTUgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UuCitMYXN0IHVwZGF0ZWQ6IDE5IEp1bmUgMjAxNgorQ29weXJpZ2h0IChjKSAxOTk3LTIwMTYgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UuCiAuZmkKZGlmZiAtLWdpdCBhL2Rpc3QyL2RvYy9wY3JlMmdyZXAudHh0IGIvZGlzdDIvZG9jL3BjcmUyZ3JlcC50eHQKaW5kZXggMjljZDc1Yy4uMzFhYTYxMCAxMDA2NDQKLS0tIGEvZGlzdDIvZG9jL3BjcmUyZ3JlcC50eHQKKysrIGIvZGlzdDIvZG9jL3BjcmUyZ3JlcC50eHQKQEAgLTQ5MywxNCArNDkzLDIwIEBACiAgICAgICAgICAgICAgICAgIGVuZCBvZiB0aGF0IGxpbmUuCiAKICAgICAgICAgICAgICAgICAgV2hlbiB0aGlzIG9wdGlvbiBpcyBzZXQsIHRoZSBQQ1JFMiBsaWJyYXJ5IGlzIGNhbGxlZCBpbiAibXVsLQotICAgICAgICAgICAgICAgICB0aWxpbmUiICBtb2RlLiAgIEhvd2V2ZXIsIHBjcmUyZ3JlcCBzdGlsbCBwcm9jZXNzZXMgdGhlIGlucHV0Ci0gICAgICAgICAgICAgICAgIGxpbmUgYnkgbGluZS4gVGhlIGRpZmZlcmVuY2UgaXMgdGhhdCAgYSAgbWF0Y2hlZCAgc3RyaW5nICBtYXkKLSAgICAgICAgICAgICAgICAgZXh0ZW5kICBwYXN0ICB0aGUgIGVuZCAgb2YgYSBsaW5lIGFuZCBjb250aW51ZSBvbiBvbmUgb3IgbW9yZQotICAgICAgICAgICAgICAgICBzdWJzZXF1ZW50IGxpbmVzLiBUaGUgbmV3bGluZSBzZXF1ZW5jZSAgbXVzdCAgYmUgIG1hdGNoZWQgIGFzCi0gICAgICAgICAgICAgICAgIHBhcnQgb2YgdGhlIHBhdHRlcm4uIEZvciBleGFtcGxlLCB0byBmaW5kIHRoZSBwaHJhc2UgInJlZ3VsYXIKLSAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbiIgaW4gYSBmaWxlIHdoZXJlICJyZWd1bGFyIiBtaWdodCBiZSBhdCB0aGUgZW5kICBvZgotICAgICAgICAgICAgICAgICBhICBsaW5lICBhbmQgICJleHByZXNzaW9uIiBhdCB0aGUgc3RhcnQgb2YgdGhlIG5leHQgbGluZSwgeW91Ci0gICAgICAgICAgICAgICAgIGNvdWxkIHVzZSB0aGlzIGNvbW1hbmQ6CisgICAgICAgICAgICAgICAgIHRpbGluZSIgbW9kZS4gVGhpcyBhbGxvd3MgYSBtYXRjaGVkIHN0cmluZyB0byBleHRlbmQgcGFzdCB0aGUKKyAgICAgICAgICAgICAgICAgZW5kIG9mIGEgbGluZSBhbmQgY29udGludWUgb24gb25lIG9yIG1vcmUgIHN1YnNlcXVlbnQgIGxpbmVzLgorICAgICAgICAgICAgICAgICBIb3dldmVyLCAgcGNyZTJncmVwICBzdGlsbCAgcHJvY2Vzc2VzIHRoZSBpbnB1dCBsaW5lIGJ5IGxpbmUuCisgICAgICAgICAgICAgICAgIE9uY2UgYSBtYXRjaCBoYXMgIGJlZW4gIGhhbmRsZWQsICBzY2FubmluZyAgcmVzdGFydHMgIGF0ICB0aGUKKyAgICAgICAgICAgICAgICAgYmVnaW5uaW5nICBvZiAgdGhlICBuZXh0IGxpbmUsIGp1c3QgYXMgaXQgZG9lcyB3aGVuIC1NIGlzIG5vdAorICAgICAgICAgICAgICAgICBwcmVzZW50LiBUaGlzIG1lYW5zIHRoYXQgaXQgaXMgcG9zc2libGUgIGZvciAgdGhlICBzZWNvbmQgIG9yCisgICAgICAgICAgICAgICAgIHN1YnNlcXVlbnQgIGxpbmVzICBpbiBhIG11bHRpbGluZSBtYXRjaCB0byBiZSBvdXRwdXQgYWdhaW4gYXMKKyAgICAgICAgICAgICAgICAgcGFydCBvZiBhbm90aGVyIG1hdGNoLgorCisgICAgICAgICAgICAgICAgIFRoZSBuZXdsaW5lIHNlcXVlbmNlIHRoYXQgc2VwYXJhdGVzIG11bHRpcGxlICBsaW5lcyAgbXVzdCAgYmUKKyAgICAgICAgICAgICAgICAgbWF0Y2hlZCAgYXMgIHBhcnQgIG9mICB0aGUgIHBhdHRlcm4uIEZvciBleGFtcGxlLCB0byBmaW5kIHRoZQorICAgICAgICAgICAgICAgICBwaHJhc2UgInJlZ3VsYXIgZXhwcmVzc2lvbiIgaW4gYSBmaWxlIHdoZXJlICAicmVndWxhciIgIG1pZ2h0CisgICAgICAgICAgICAgICAgIGJlICBhdCB0aGUgZW5kIG9mIGEgbGluZSBhbmQgImV4cHJlc3Npb24iIGF0IHRoZSBzdGFydCBvZiB0aGUKKyAgICAgICAgICAgICAgICAgbmV4dCBsaW5lLCB5b3UgY291bGQgdXNlIHRoaXMgY29tbWFuZDoKIAogICAgICAgICAgICAgICAgICAgIHBjcmUyZ3JlcCAtTSAncmVndWxhclxzK2V4cHJlc3Npb24nIDxmaWxlPgogCkBAIC03MjUsMzUgKzczMSw4NiBAQAogICAgICAgIGVxdWFscyBjaGFyYWN0ZXIuIE90aGVyd2lzZSBwY3JlMmdyZXAgd2lsbCBhc3N1bWUgdGhhdCBpdCBoYXMgbm8gZGF0YS4KIAogCitDQUxMSU5HIEVYVEVSTkFMIFNDUklQVFMKKworICAgICAgIE9uIG5vbi1XaW5kb3dzIHN5c3RlbXMsIHBjcmUyZ3JlcCBoYXMsIGJ5IGRlZmF1bHQsIHN1cHBvcnQgZm9yICBjYWxsaW5nCisgICAgICAgZXh0ZXJuYWwgIHByb2dyYW1zICBvciBzY3JpcHRzIGR1cmluZyBtYXRjaGluZyBieSBtYWtpbmcgdXNlIG9mIFBDUkUyJ3MKKyAgICAgICBjYWxsb3V0IGZhY2lsaXR5LiBIb3dldmVyLCB0aGlzIHN1cHBvcnQgY2FuIGJlIGRpc2FibGVkIHdoZW4gIHBjcmUyZ3JlcAorICAgICAgIGlzICBidWlsdC4gICBZb3UgY2FuIGZpbmQgb3V0IHdoZXRoZXIgeW91ciBiaW5hcnkgaGFzIHN1cHBvcnQgZm9yIGNhbGwtCisgICAgICAgb3V0cyBieSBydW5uaW5nIGl0IHdpdGggdGhlICAtLWhlbHAgIG9wdGlvbi4gIElmICB0aGUgIHN1cHBvcnQgIGlzICBub3QKKyAgICAgICBlbmFibGVkLCBhbGwgY2FsbG91dHMgaW4gcGF0dGVybnMgYXJlIGlnbm9yZWQgYnkgcGNyZTJncmVwLgorCisgICAgICAgQSAgY2FsbG91dCAgaW4gYSBQQ1JFMiBwYXR0ZXJuIGlzIG9mIHRoZSBmb3JtICg/Qzxhcmc+KSB3aGVyZSB0aGUgYXJndS0KKyAgICAgICBtZW50IGlzIGVpdGhlciBhIG51bWJlciBvciBhIHF1b3RlZCBzdHJpbmcgKHNlZSB0aGUgcGNyZTJjYWxsb3V0ICBkb2N1LQorICAgICAgIG1lbnRhdGlvbiAgZm9yICBkZXRhaWxzKS4gIE51bWJlcmVkICBjYWxsb3V0cyBhcmUgaWdub3JlZCBieSBwY3JlMmdyZXAuCisgICAgICAgU3RyaW5nIGFyZ3VtZW50cyBhcmUgcGFyc2VkIGFzIGEgbGlzdCBvZiBzdWJzdHJpbmdzIHNlcGFyYXRlZCAgYnkgIHBpcGUKKyAgICAgICAodmVydGljYWwgIGJhcikgIGNoYXJhY3RlcnMuICBUaGUgZmlyc3Qgc3Vic3RyaW5nIG11c3QgYmUgYW4gZXhlY3V0YWJsZQorICAgICAgIG5hbWUsIHdpdGggdGhlIGZvbGxvd2luZyBzdWJzdHJpbmdzIHNwZWNpZnlpbmcgYXJndW1lbnRzOgorCisgICAgICAgICBleGVjdXRhYmxlX25hbWV8YXJnMXxhcmcyfC4uLgorCisgICAgICAgQW55IHN1YnN0cmluZyAgKGluY2x1ZGluZyAgdGhlICBleGVjdXRhYmxlICBuYW1lKSAgbWF5ICBjb250YWluICBlc2NhcGUKKyAgICAgICBzZXF1ZW5jZXMgIHN0YXJ0ZWQgIGJ5ICBhIGRvbGxhciBjaGFyYWN0ZXI6ICQ8ZGlnaXRzPiBvciAkezxkaWdpdHM+fSBpcworICAgICAgIHJlcGxhY2VkIGJ5IHRoZSBjYXB0dXJlZCBzdWJzdHJpbmcgb2YgdGhlIGdpdmVuIGRlY2ltYWwgIG51bWJlciwgIHdoaWNoCisgICAgICAgbXVzdCAgYmUgZ3JlYXRlciB0aGFuIHplcm8uIElmIHRoZSBudW1iZXIgaXMgZ3JlYXRlciB0aGFuIHRoZSBudW1iZXIgb2YKKyAgICAgICBjYXB0dXJpbmcgc3Vic3RyaW5ncywgb3IgaWYgdGhlIGNhcHR1cmUgaXMgdW5zZXQsICB0aGUgIHJlcGxhY2VtZW50ICBpcworICAgICAgIGVtcHR5LgorCisgICAgICAgQW55ICBvdGhlciAgY2hhcmFjdGVyICBpcyAgc3Vic3RpdHV0ZWQgIGJ5IGl0c2VsZi4gSW4gcGFydGljdWxhciwgJCQgaXMKKyAgICAgICByZXBsYWNlZCBieSBhIHNpbmdsZSBkb2xsYXIgYW5kICR8IGlzIHJlcGxhY2VkICBieSAgYSAgcGlwZSAgY2hhcmFjdGVyLgorICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKworICAgICAgICAgZWNobyAtZSAiYWJjZGVcbjEyMzQ1IiB8IHBjcmUyZ3JlcCBcCisgICAgICAgICAgICcoP3gpKC4pKC4uKC4pKQorICAgICAgICAgICAoP0MiL2Jpbi9lY2hvfEFyZzE6IFskMV0gWyQyXSBbJDNdfEFyZzI6ICR8JHsxfSR8ICgkNCkiKSgpJyAtCisKKyAgICAgICAgIE91dHB1dDoKKworICAgICAgICAgICBBcmcxOiBbYV0gW2JjZF0gW2RdIEFyZzI6IHxhfCAoKQorICAgICAgICAgICBhYmNkZQorICAgICAgICAgICBBcmcxOiBbMV0gWzIzNF0gWzRdIEFyZzI6IHwxfCAoKQorICAgICAgICAgICAxMjM0NQorCisgICAgICAgVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBleGVjdigpIHN5c3RlbSBjYWxsIHRoYXQgaXMgdXNlZCB0byBydW4gdGhlIHByby0KKyAgICAgICBncmFtIG9yIHNjcmlwdCBhcmUgemVyby10ZXJtaW5hdGVkIHN0cmluZ3MuIFRoaXMgbWVhbnMgdGhhdCBiaW5hcnkgemVybworICAgICAgIGNoYXJhY3RlcnMgIGluIHRoZSBjYWxsb3V0IGFyZ3VtZW50IHdpbGwgY2F1c2UgcHJlbWF0dXJlIHRlcm1pbmF0aW9uIG9mCisgICAgICAgdGhlaXIgc3Vic3RyaW5ncywgYW5kIHRoZXJlZm9yZSAgc2hvdWxkICBub3QgIGJlICBwcmVzZW50LiAgQW55ICBzeW50YXgKKyAgICAgICBlcnJvcnMgIGluICB0aGUgIHN0cmluZyAgKGZvciBleGFtcGxlLCBhIGRvbGxhciBub3QgZm9sbG93ZWQgYnkgYW5vdGhlcgorICAgICAgIGNoYXJhY3RlcikgY2F1c2UgdGhlIGNhbGxvdXQgdG8gYmUgIGlnbm9yZWQuICBJZiAgcnVubmluZyAgdGhlICBwcm9ncmFtCisgICAgICAgZmFpbHMgZm9yIGFueSByZWFzb24gKGluY2x1ZGluZyB0aGUgbm9uLWV4aXN0ZW5jZSBvZiB0aGUgZXhlY3V0YWJsZSksIGEKKyAgICAgICBsb2NhbCBtYXRjaGluZyBmYWlsdXJlIG9jY3VycyBhbmQgdGhlIG1hdGNoZXIgYmFja3RyYWNrcyBpbiB0aGUgIG5vcm1hbAorICAgICAgIHdheS4KKworCiBNQVRDSElORyBFUlJPUlMKIAotICAgICAgIEl0IGlzIHBvc3NpYmxlIHRvIHN1cHBseSBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IHRha2VzICBhICB2ZXJ5ICBsb25nCi0gICAgICAgdGltZSAgdG8gIGZhaWwgIHRvICBtYXRjaCBjZXJ0YWluIGxpbmVzLiBTdWNoIHBhdHRlcm5zIG5vcm1hbGx5IGludm9sdmUKLSAgICAgICBuZXN0ZWQgaW5kZWZpbml0ZSByZXBlYXRzLCBmb3IgZXhhbXBsZTogKGErKSpcZCB3aGVuIG1hdGNoZWQgYWdhaW5zdCAgYQotICAgICAgIGxpbmUgIG9mICBhJ3MgIHdpdGggIG5vICBmaW5hbCBkaWdpdC4gVGhlIFBDUkUyIG1hdGNoaW5nIGZ1bmN0aW9uIGhhcyBhCi0gICAgICAgcmVzb3VyY2UgbGltaXQgdGhhdCBjYXVzZXMgaXQgdG8gYWJvcnQgaW4gdGhlc2UgY2lyY3Vtc3RhbmNlcy4gSWYgIHRoaXMKLSAgICAgICBoYXBwZW5zLCAgcGNyZTJncmVwICBvdXRwdXRzICBhbiBlcnJvciBtZXNzYWdlIGFuZCB0aGUgbGluZSB0aGF0IGNhdXNlZAotICAgICAgIHRoZSBwcm9ibGVtIHRvIHRoZSBzdGFuZGFyZCBlcnJvciBzdHJlYW0uIElmIHRoZXJlICBhcmUgIG1vcmUgIHRoYW4gIDIwCisgICAgICAgSXQgIGlzICBwb3NzaWJsZSAgdG8gc3VwcGx5IGEgcmVndWxhciBleHByZXNzaW9uIHRoYXQgdGFrZXMgYSB2ZXJ5IGxvbmcKKyAgICAgICB0aW1lIHRvIGZhaWwgdG8gbWF0Y2ggY2VydGFpbiBsaW5lcy4gIFN1Y2ggIHBhdHRlcm5zICBub3JtYWxseSAgaW52b2x2ZQorICAgICAgIG5lc3RlZCAgaW5kZWZpbml0ZSByZXBlYXRzLCBmb3IgZXhhbXBsZTogKGErKSpcZCB3aGVuIG1hdGNoZWQgYWdhaW5zdCBhCisgICAgICAgbGluZSBvZiBhJ3Mgd2l0aCBubyBmaW5hbCBkaWdpdC4gVGhlICBQQ1JFMiAgbWF0Y2hpbmcgIGZ1bmN0aW9uICBoYXMgIGEKKyAgICAgICByZXNvdXJjZSAgbGltaXQgdGhhdCBjYXVzZXMgaXQgdG8gYWJvcnQgaW4gdGhlc2UgY2lyY3Vtc3RhbmNlcy4gSWYgdGhpcworICAgICAgIGhhcHBlbnMsIHBjcmUyZ3JlcCBvdXRwdXRzIGFuIGVycm9yIG1lc3NhZ2UgYW5kIHRoZSAgbGluZSAgdGhhdCAgY2F1c2VkCisgICAgICAgdGhlICBwcm9ibGVtICB0byAgdGhlICBzdGFuZGFyZCBlcnJvciBzdHJlYW0uIElmIHRoZXJlIGFyZSBtb3JlIHRoYW4gMjAKICAgICAgICBzdWNoIGVycm9ycywgcGNyZTJncmVwIGdpdmVzIHVwLgogCi0gICAgICAgVGhlICAtLW1hdGNoLWxpbWl0ICBvcHRpb24gIG9mIHBjcmUyZ3JlcCBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIG92ZXJhbGwKLSAgICAgICByZXNvdXJjZSBsaW1pdDsgdGhlcmUgaXMgYSBzZWNvbmQgb3B0aW9uIGNhbGxlZCAtLXJlY3Vyc2lvbi1saW1pdCAgdGhhdAotICAgICAgIHNldHMgIGEgbGltaXQgb24gdGhlIGFtb3VudCBvZiBtZW1vcnkgKHVzdWFsbHkgc3RhY2spIHRoYXQgaXMgdXNlZCAoc2VlCisgICAgICAgVGhlIC0tbWF0Y2gtbGltaXQgb3B0aW9uIG9mIHBjcmUyZ3JlcCBjYW4gYmUgdXNlZCB0byAgc2V0ICB0aGUgIG92ZXJhbGwKKyAgICAgICByZXNvdXJjZSAgbGltaXQ7IHRoZXJlIGlzIGEgc2Vjb25kIG9wdGlvbiBjYWxsZWQgLS1yZWN1cnNpb24tbGltaXQgdGhhdAorICAgICAgIHNldHMgYSBsaW1pdCBvbiB0aGUgYW1vdW50IG9mIG1lbW9yeSAodXN1YWxseSBzdGFjaykgdGhhdCBpcyB1c2VkICAoc2VlCiAgICAgICAgdGhlIGRpc2N1c3Npb24gb2YgdGhlc2Ugb3B0aW9ucyBhYm92ZSkuCiAKIAogRElBR05PU1RJQ1MKIAogICAgICAgIEV4aXQgc3RhdHVzIGlzIDAgaWYgYW55IG1hdGNoZXMgd2VyZSBmb3VuZCwgMSBpZiBubyBtYXRjaGVzIHdlcmUgZm91bmQsCi0gICAgICAgYW5kICAyICBmb3Igc3ludGF4IGVycm9ycywgb3ZlcmxvbmcgbGluZXMsIG5vbi1leGlzdGVudCBvciBpbmFjY2Vzc2libGUKLSAgICAgICBmaWxlcyAoZXZlbiBpZiBtYXRjaGVzIHdlcmUgZm91bmQgaW4gb3RoZXIgZmlsZXMpIG9yIHRvbyBtYW55ICBtYXRjaGluZworICAgICAgIGFuZCAyIGZvciBzeW50YXggZXJyb3JzLCBvdmVybG9uZyBsaW5lcywgbm9uLWV4aXN0ZW50ICBvciAgaW5hY2Nlc3NpYmxlCisgICAgICAgZmlsZXMgIChldmVuIGlmIG1hdGNoZXMgd2VyZSBmb3VuZCBpbiBvdGhlciBmaWxlcykgb3IgdG9vIG1hbnkgbWF0Y2hpbmcKICAgICAgICBlcnJvcnMuIFVzaW5nIHRoZSAtcyBvcHRpb24gdG8gc3VwcHJlc3MgZXJyb3IgbWVzc2FnZXMgYWJvdXQgaW5hY2Nlc3NpLQogICAgICAgIGJsZSBmaWxlcyBkb2VzIG5vdCBhZmZlY3QgdGhlIHJldHVybiBjb2RlLgogCiAKIFNFRSBBTFNPCiAKLSAgICAgICBwY3JlMnBhdHRlcm4oMyksIHBjcmUyc3ludGF4KDMpLgorICAgICAgIHBjcmUycGF0dGVybigzKSwgcGNyZTJzeW50YXgoMyksIHBjcmUyY2FsbG91dCgzKS4KIAogCiBBVVRIT1IKQEAgLTc2NSw1ICs4MjIsNSBAQAogCiBSRVZJU0lPTgogCi0gICAgICAgTGFzdCB1cGRhdGVkOiAwMyBKYW51YXJ5IDIwMTUKLSAgICAgICBDb3B5cmlnaHQgKGMpIDE5OTctMjAxNSBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZS4KKyAgICAgICBMYXN0IHVwZGF0ZWQ6IDE5IEp1bmUgMjAxNgorICAgICAgIENvcHlyaWdodCAoYykgMTk5Ny0yMDE2IFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlLgpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL3BjcmUyaml0LjMgYi9kaXN0Mi9kb2MvcGNyZTJqaXQuMwppbmRleCBhMjExN2VhLi4wYjk1YjRkIDEwMDY0NAotLS0gYS9kaXN0Mi9kb2MvcGNyZTJqaXQuMworKysgYi9kaXN0Mi9kb2MvcGNyZTJqaXQuMwpAQCAtMSw0ICsxLDQgQEAKLS5USCBQQ1JFMkpJVCAzICIxNCBOb3ZlbWJlciAyMDE1IiAiUENSRTIgMTAuMjEiCisuVEggUENSRTJKSVQgMyAiMDUgSnVuZSAyMDE2IiAiUENSRTIgMTAuMjIiCiAuU0ggTkFNRQogUENSRTIgLSBQZXJsLWNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9ucyAocmV2aXNlZCBBUEkpCiAuU0ggIlBDUkUyIEpVU1QtSU4tVElNRSBDT01QSUxFUiBTVVBQT1JUIgpAQCAtMTI4LDYgKzEyOCw5IEBACiBQQ1JFMl9OT19VVEZfQ0hFQ0ssIFBDUkUyX1BBUlRJQUxfSEFSRCwgYW5kIFBDUkUyX1BBUlRJQUxfU09GVC4gVGhlCiBQQ1JFMl9BTkNIT1JFRCBvcHRpb24gaXMgbm90IHN1cHBvcnRlZCBhdCBtYXRjaCB0aW1lLgogLlAKK0lmIHRoZSBQQ1JFMl9OT19KSVQgb3B0aW9uIGlzIHBhc3NlZCB0byBcZkJwY3JlMl9tYXRjaCgpXGZQIGl0IGRpc2FibGVzIHRoZQordXNlIG9mIEpJVCwgZm9yY2luZyBtYXRjaGluZyBieSB0aGUgaW50ZXJwcmV0ZXIgY29kZS4KKy5QCiBUaGUgb25seSB1bnN1cHBvcnRlZCBwYXR0ZXJuIGl0ZW1zIGFyZSBcZUMgKG1hdGNoIGEgc2luZ2xlIGRhdGEgdW5pdCkgd2hlbgogcnVubmluZyBpbiBhIFVURiBtb2RlLCBhbmQgYSBjYWxsb3V0IGltbWVkaWF0ZWx5IGJlZm9yZSBhbiBhc3NlcnRpb24gY29uZGl0aW9uCiBpbiBhIGNvbmRpdGlvbmFsIGdyb3VwLgpAQCAtMzc3LDcgKzM4MCw3IEBACiB0aGUgc2FtZSBhcmd1bWVudHMgYXMgXGZCcGNyZTJfbWF0Y2goKVxmUC4gVGhlIHJldHVybiB2YWx1ZXMgYXJlIGFsc28gdGhlIHNhbWUsCiBwbHVzIFBDUkUyX0VSUk9SX0pJVF9CQURPUFRJT04gaWYgYSBtYXRjaGluZyBtb2RlIChwYXJ0aWFsIG9yIGNvbXBsZXRlKSBpcwogcmVxdWVzdGVkIHRoYXQgd2FzIG5vdCBjb21waWxlZC4gVW5zdXBwb3J0ZWQgb3B0aW9uIGJpdHMgKGZvciBleGFtcGxlLAotUENSRTJfQU5DSE9SRUQpIGFyZSBpZ25vcmVkLgorUENSRTJfQU5DSE9SRUQpIGFyZSBpZ25vcmVkLCBhcyBpcyB0aGUgUENSRTJfTk9fSklUIG9wdGlvbi4KIC5QCiBXaGVuIHlvdSBjYWxsIFxmQnBjcmUyX21hdGNoKClcZlAsIGFzIHdlbGwgYXMgdGVzdGluZyBmb3IgaW52YWxpZCBvcHRpb25zLCBhCiBudW1iZXIgb2Ygb3RoZXIgc2FuaXR5IGNoZWNrcyBhcmUgcGVyZm9ybWVkIG9uIHRoZSBhcmd1bWVudHMuIEZvciBleGFtcGxlLCBpZgpAQCAtNDEwLDYgKzQxMyw2IEBACiAucnMKIC5zcAogLm5mCi1MYXN0IHVwZGF0ZWQ6IDE0IE5vdmVtYmVyIDIwMTUKLUNvcHlyaWdodCAoYykgMTk5Ny0yMDE1IFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlLgorTGFzdCB1cGRhdGVkOiAwNSBKdW5lIDIwMTYKK0NvcHlyaWdodCAoYykgMTk5Ny0yMDE2IFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlLgogLmZpCmRpZmYgLS1naXQgYS9kaXN0Mi9kb2MvcGNyZTJwYXR0ZXJuLjMgYi9kaXN0Mi9kb2MvcGNyZTJwYXR0ZXJuLjMKaW5kZXggOGQwZTlkZi4uNzBhYzE0YSAxMDA2NDQKLS0tIGEvZGlzdDIvZG9jL3BjcmUycGF0dGVybi4zCisrKyBiL2Rpc3QyL2RvYy9wY3JlMnBhdHRlcm4uMwpAQCAtMSw0ICsxLDQgQEAKLS5USCBQQ1JFMlBBVFRFUk4gMyAiMTMgTm92ZW1iZXIgMjAxNSIgIlBDUkUyIDEwLjIxIgorLlRIIFBDUkUyUEFUVEVSTiAzICIyMCBKdW5lIDIwMTYiICJQQ1JFMiAxMC4yMiIKIC5TSCBOQU1FCiBQQ1JFMiAtIFBlcmwtY29tcGF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIChyZXZpc2VkIEFQSSkKIC5TSCAiUENSRTIgUkVHVUxBUiBFWFBSRVNTSU9OIERFVEFJTFMiCkBAIC0xMjU2LDE2ICsxMjU2LDIwIEBACiAuXCIgPC9hPgogKGRlc2NyaWJlZCBiZWxvdykKIC5cIgotaW4gYSBVVEYgbW9kZSwgYmVjYXVzZSB0aGlzIHdvdWxkIG1ha2UgaXQgaW1wb3NzaWJsZSB0byBjYWxjdWxhdGUgdGhlIGxlbmd0aCBvZgotdGhlIGxvb2tiZWhpbmQuIE5laXRoZXIgdGhlIGFsdGVybmF0aXZlIG1hdGNoaW5nIGZ1bmN0aW9uCi1cZkJwY3JlMl9kZmFfbWF0Y2goKVxmUCBub3QgdGhlIEpJVCBvcHRpbWl6ZXIgc3VwcG9ydCBcZUMgaW4gYSBVVEYgbW9kZS4gVGhlCi1mb3JtZXIgZ2l2ZXMgYSBtYXRjaC10aW1lIGVycm9yOyB0aGUgbGF0dGVyIGZhaWxzIHRvIG9wdGltaXplIGFuZCBzbyB0aGUgbWF0Y2gKLWlzIGFsd2F5cyBydW4gdXNpbmcgdGhlIGludGVycHJldGVyLgoraW4gVVRGLTggb3IgVVRGLTE2IG1vZGVzLCBiZWNhdXNlIHRoaXMgd291bGQgbWFrZSBpdCBpbXBvc3NpYmxlIHRvIGNhbGN1bGF0ZQordGhlIGxlbmd0aCBvZiB0aGUgbG9va2JlaGluZC4gTmVpdGhlciB0aGUgYWx0ZXJuYXRpdmUgbWF0Y2hpbmcgZnVuY3Rpb24KK1xmQnBjcmUyX2RmYV9tYXRjaCgpXGZQIG5vciB0aGUgSklUIG9wdGltaXplciBzdXBwb3J0IFxlQyBpbiB0aGVzZSBVVEYgbW9kZXMuCitUaGUgZm9ybWVyIGdpdmVzIGEgbWF0Y2gtdGltZSBlcnJvcjsgdGhlIGxhdHRlciBmYWlscyB0byBvcHRpbWl6ZSBhbmQgc28gdGhlCittYXRjaCBpcyBhbHdheXMgcnVuIHVzaW5nIHRoZSBpbnRlcnByZXRlci4KKy5QCitJbiB0aGUgMzItYml0IGxpYnJhcnksIGhvd2V2ZXIsIFxlQyBpcyBhbHdheXMgc3VwcG9ydGVkICh3aGVuIG5vdCBleHBsaWNpdGx5Citsb2NrZWQgb3V0KSBiZWNhdXNlIGl0IGFsd2F5cyBtYXRjaGVzIGEgc2luZ2xlIGNvZGUgdW5pdCwgd2hldGhlciBvciBub3QgVVRGLTMyCitpcyBzcGVjaWZpZWQuCiAuUAogSW4gZ2VuZXJhbCwgdGhlIFxlQyBlc2NhcGUgc2VxdWVuY2UgaXMgYmVzdCBhdm9pZGVkLiBIb3dldmVyLCBvbmUgd2F5IG9mIHVzaW5nCi1pdCB0aGF0IGF2b2lkcyB0aGUgcHJvYmxlbSBvZiBtYWxmb3JtZWQgVVRGIGNoYXJhY3RlcnMgaXMgdG8gdXNlIGEgbG9va2FoZWFkIHRvCi1jaGVjayB0aGUgbGVuZ3RoIG9mIHRoZSBuZXh0IGNoYXJhY3RlciwgYXMgaW4gdGhpcyBwYXR0ZXJuLCB3aGljaCBjb3VsZCBiZSB1c2VkCi13aXRoIGEgVVRGLTggc3RyaW5nIChpZ25vcmUgd2hpdGUgc3BhY2UgYW5kIGxpbmUgYnJlYWtzKToKK2l0IHRoYXQgYXZvaWRzIHRoZSBwcm9ibGVtIG9mIG1hbGZvcm1lZCBVVEYtOCBvciBVVEYtMTYgY2hhcmFjdGVycyBpcyB0byB1c2UgYQorbG9va2FoZWFkIHRvIGNoZWNrIHRoZSBsZW5ndGggb2YgdGhlIG5leHQgY2hhcmFjdGVyLCBhcyBpbiB0aGlzIHBhdHRlcm4sIHdoaWNoCitjb3VsZCBiZSB1c2VkIHdpdGggYSBVVEYtOCBzdHJpbmcgKGlnbm9yZSB3aGl0ZSBzcGFjZSBhbmQgbGluZSBicmVha3MpOgogLnNwCiAgICg/fCAoPz1bXGV4MDAtXGV4N2ZdKShcZUMpIHwKICAgICAgICg/PVtcZXg4MC1cZXh7N2ZmfV0pKFxlQykoXGVDKSB8CkBAIC0zNDI1LDYgKzM0MjksNiBAQAogLnJzCiAuc3AKIC5uZgotTGFzdCB1cGRhdGVkOiAxMyBOb3ZlbWJlciAyMDE1Ci1Db3B5cmlnaHQgKGMpIDE5OTctMjAxNSBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZS4KK0xhc3QgdXBkYXRlZDogMjAgSnVuZSAyMDE2CitDb3B5cmlnaHQgKGMpIDE5OTctMjAxNiBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZS4KIC5maQpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL3BjcmUycG9zaXguMyBiL2Rpc3QyL2RvYy9wY3JlMnBvc2l4LjMKaW5kZXggODMzZTk2Yy4uNzBhODZkOCAxMDA2NDQKLS0tIGEvZGlzdDIvZG9jL3BjcmUycG9zaXguMworKysgYi9kaXN0Mi9kb2MvcGNyZTJwb3NpeC4zCkBAIC0xLDQgKzEsNCBAQAotLlRIIFBDUkUyUE9TSVggMyAiMjkgTm92ZW1iZXIgMjAxNSIgIlBDUkUyIDEwLjIxIgorLlRIIFBDUkUyUE9TSVggMyAiMzEgSmFudWFyeSAyMDE2IiAiUENSRTIgMTAuMjIiCiAuU0ggTkFNRQogUENSRTIgLSBQZXJsLWNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9ucyAocmV2aXNlZCBBUEkpCiAuU0ggIlNZTk9QU0lTIgpAQCAtMjgsNyArMjgsNyBAQAogXGZCcGNyZTJhcGlcZlAKIC5cIgogZG9jdW1lbnRhdGlvbiBmb3IgYSBkZXNjcmlwdGlvbiBvZiBQQ1JFMidzIG5hdGl2ZSBBUEksIHdoaWNoIGNvbnRhaW5zIG11Y2gKLWFkZGl0aW9uYWwgZnVuY3Rpb25hbGl0eS4gVGhlcmUgaXMgbm8gUE9TSVgtc3R5bGUgd3JhcHBlciBmb3IgUENSRTIncyAxNi1iaXQKK2FkZGl0aW9uYWwgZnVuY3Rpb25hbGl0eS4gVGhlcmUgYXJlIG5vIFBPU0lYLXN0eWxlIHdyYXBwZXJzIGZvciBQQ1JFMidzIDE2LWJpdAogYW5kIDMyLWJpdCBsaWJyYXJpZXMuCiAuUAogVGhlIGZ1bmN0aW9ucyBkZXNjcmliZWQgaGVyZSBhcmUganVzdCB3cmFwcGVyIGZ1bmN0aW9ucyB0aGF0IHVsdGltYXRlbHkgY2FsbApAQCAtNDQsOSArNDQsOSBAQAogUE9TSVggaW50ZXJmYWNlIG9mdGVuIHVzZSBpdCwgdGhpcyBtYWtlcyBpdCBlYXNpZXIgdG8gc2xvdCBpbiBQQ1JFMiBhcyBhCiByZXBsYWNlbWVudCBsaWJyYXJ5LiBPdGhlciBQT1NJWCBvcHRpb25zIGFyZSBub3QgZXZlbiBkZWZpbmVkLgogLlAKLVRoZXJlIGFyZSBhbHNvIHNvbWUgb3RoZXIgb3B0aW9ucyB0aGF0IGFyZSBub3QgZGVmaW5lZCBieSBQT1NJWC4gVGhlc2UgaGF2ZQotYmVlbiBhZGRlZCBhdCB0aGUgcmVxdWVzdCBvZiB1c2VycyB3aG8gd2FudCB0byBtYWtlIHVzZSBvZiBjZXJ0YWluCi1QQ1JFMi1zcGVjaWZpYyBmZWF0dXJlcyB2aWEgdGhlIFBPU0lYIGNhbGxpbmcgaW50ZXJmYWNlLgorVGhlcmUgYXJlIGFsc28gc29tZSBvcHRpb25zIHRoYXQgYXJlIG5vdCBkZWZpbmVkIGJ5IFBPU0lYLiBUaGVzZSBoYXZlIGJlZW4KK2FkZGVkIGF0IHRoZSByZXF1ZXN0IG9mIHVzZXJzIHdobyB3YW50IHRvIG1ha2UgdXNlIG9mIGNlcnRhaW4gUENSRTItc3BlY2lmaWMKK2ZlYXR1cmVzIHZpYSB0aGUgUE9TSVggY2FsbGluZyBpbnRlcmZhY2UuCiAuUAogV2hlbiBQQ1JFMiBpcyBjYWxsZWQgdmlhIHRoZXNlIGZ1bmN0aW9ucywgaXQgaXMgb25seSB0aGUgQVBJIHRoYXQgaXMgUE9TSVgtbGlrZQogaW4gc3R5bGUuIFRoZSBzeW50YXggYW5kIHNlbWFudGljcyBvZiB0aGUgcmVndWxhciBleHByZXNzaW9ucyB0aGVtc2VsdmVzIGFyZQpAQCAtOTUsMTEgKzk1LDExIEBACiAuc3AKICAgUkVHX05PU1VCCiAuc3AKLVRoZSBQQ1JFMl9OT19BVVRPX0NBUFRVUkUgb3B0aW9uIGlzIHNldCB3aGVuIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gaXMgcGFzc2VkCi1mb3IgY29tcGlsYXRpb24gdG8gdGhlIG5hdGl2ZSBmdW5jdGlvbi4gSW4gYWRkaXRpb24sIHdoZW4gYSBwYXR0ZXJuIHRoYXQgaXMKLWNvbXBpbGVkIHdpdGggdGhpcyBmbGFnIGlzIHBhc3NlZCB0byBcZkJyZWdleGVjKClcZlAgZm9yIG1hdGNoaW5nLCB0aGUKLVxmSW5tYXRjaFxmUCBhbmQgXGZJcG1hdGNoXGZQIGFyZ3VtZW50cyBhcmUgaWdub3JlZCwgYW5kIG5vIGNhcHR1cmVkIHN0cmluZ3MKLWFyZSByZXR1cm5lZC4KK1doZW4gYSBwYXR0ZXJuIHRoYXQgaXMgY29tcGlsZWQgd2l0aCB0aGlzIGZsYWcgaXMgcGFzc2VkIHRvIFxmQnJlZ2V4ZWMoKVxmUCBmb3IKK21hdGNoaW5nLCB0aGUgXGZJbm1hdGNoXGZQIGFuZCBcZklwbWF0Y2hcZlAgYXJndW1lbnRzIGFyZSBpZ25vcmVkLCBhbmQgbm8KK2NhcHR1cmVkIHN0cmluZ3MgYXJlIHJldHVybmVkLiBWZXJzaW9ucyBvZiB0aGUgUENSRSBsaWJyYXJ5IHByaW9yIHRvIDEwLjIyIHVzZWQKK3RvIHNldCB0aGUgUENSRTJfTk9fQVVUT19DQVBUVVJFIGNvbXBpbGUgb3B0aW9uLCBidXQgdGhpcyBubyBsb25nZXIgaGFwcGVucworYmVjYXVzZSBpdCBkaXNhYmxlcyB0aGUgdXNlIG9mIGJhY2sgcmVmZXJlbmNlcy4KIC5zcAogICBSRUdfVUNQCiAuc3AKQEAgLTIxNiwxMiArMjE2LDEzIEBACiAuUAogSWYgdGhlIHBhdHRlcm4gd2FzIGNvbXBpbGVkIHdpdGggdGhlIFJFR19OT1NVQiBmbGFnLCBubyBkYXRhIGFib3V0IGFueSBtYXRjaGVkCiBzdHJpbmdzIGlzIHJldHVybmVkLiBUaGUgXGZJbm1hdGNoXGZQIGFuZCBcZklwbWF0Y2hcZlAgYXJndW1lbnRzIG9mCi1cZkJyZWdleGVjKClcZlAgYXJlIGlnbm9yZWQuCitcZkJyZWdleGVjKClcZlAgYXJlIGlnbm9yZWQgKGV4Y2VwdCBwb3NzaWJseSBhcyBpbnB1dCBmb3IgUkVHX1NUQVJURU5EKS4KIC5QCi1JZiB0aGUgdmFsdWUgb2YgXGZJbm1hdGNoXGZQIGlzIHplcm8sIG9yIGlmIHRoZSB2YWx1ZSBcZklwbWF0Y2hcZlAgaXMgTlVMTCwKLW5vIGRhdGEgYWJvdXQgYW55IG1hdGNoZWQgc3RyaW5ncyBpcyByZXR1cm5lZC4KK1RoZSB2YWx1ZSBvZiBcZklubWF0Y2hcZlAgbWF5IGJlIHplcm8sIGFuZCB0aGUgdmFsdWUgXGZJcG1hdGNoXGZQIG1heSBiZSBOVUxMCisodW5sZXNzIFJFR19TVEFSVEVORCBpcyBzZXQpOyBpbiBib3RoIHRoZXNlIGNhc2VzIG5vIGRhdGEgYWJvdXQgYW55IG1hdGNoZWQKK3N0cmluZ3MgaXMgcmV0dXJuZWQuCiAuUAotT3RoZXJ3aXNlLHRoZSBwb3J0aW9uIG9mIHRoZSBzdHJpbmcgdGhhdCB3YXMgbWF0Y2hlZCwgYW5kIGFsc28gYW55IGNhcHR1cmVkCitPdGhlcndpc2UsIHRoZSBwb3J0aW9uIG9mIHRoZSBzdHJpbmcgdGhhdCB3YXMgbWF0Y2hlZCwgYW5kIGFsc28gYW55IGNhcHR1cmVkCiBzdWJzdHJpbmdzLCBhcmUgcmV0dXJuZWQgdmlhIHRoZSBcZklwbWF0Y2hcZlAgYXJndW1lbnQsIHdoaWNoIHBvaW50cyB0byBhbgogYXJyYXkgb2YgXGZJbm1hdGNoXGZQIHN0cnVjdHVyZXMgb2YgdHlwZSBcZklyZWdtYXRjaF90XGZQLCBjb250YWluaW5nIHRoZQogbWVtYmVycyBcZklybV9zb1xmUCBhbmQgXGZJcm1fZW9cZlAuIFRoZXNlIGNvbnRhaW4gdGhlIGJ5dGUgb2Zmc2V0IHRvIHRoZSBmaXJzdApAQCAtMjcwLDYgKzI3MSw2IEBACiAucnMKIC5zcAogLm5mCi1MYXN0IHVwZGF0ZWQ6IDI5IE5vdmVtYmVyIDIwMTUKLUNvcHlyaWdodCAoYykgMTk5Ny0yMDE1IFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlLgorTGFzdCB1cGRhdGVkOiAzMSBKYW51YXJ5IDIwMTYKK0NvcHlyaWdodCAoYykgMTk5Ny0yMDE2IFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlLgogLmZpCmRpZmYgLS1naXQgYS9kaXN0Mi9kb2MvcGNyZTJzYW1wbGUuMyBiL2Rpc3QyL2RvYy9wY3JlMnNhbXBsZS4zCmluZGV4IDdiNDY5MzUuLjY2MWUzOTIgMTAwNjQ0Ci0tLSBhL2Rpc3QyL2RvYy9wY3JlMnNhbXBsZS4zCisrKyBiL2Rpc3QyL2RvYy9wY3JlMnNhbXBsZS4zCkBAIC0xLDQgKzEsNCBAQAotLlRIIFBDUkUyU0FNUExFIDMgIjIwIE9jdG9iZXIgMjAxNCIgIlBDUkUyIDEwLjAwIgorLlRIIFBDUkUyU0FNUExFIDMgIjAyIEZlYnJ1YXJ5IDIwMTYiICJQQ1JFMiAxMC4yMiIKIC5TSCBOQU1FCiBQQ1JFMiAtIFBlcmwtY29tcGF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIChyZXZpc2VkIEFQSSkKIC5TSCAiUENSRTIgU0FNUExFIFBST0dSQU0iCkBAIC0xMywyMyArMTMsMjggQEAKIGRvY3VtZW50YXRpb24uIElmIHlvdSBkbyBub3QgaGF2ZSBhIGNvcHkgb2YgdGhlIFBDUkUyIGRpc3RyaWJ1dGlvbiwgeW91IGNhbgogc2F2ZSB0aGlzIGxpc3RpbmcgdG8gcmUtY3JlYXRlIHRoZSBjb250ZW50cyBvZiBcZklwY3JlMmRlbW8uY1xmUC4KIC5QCi1UaGUgZGVtb25zdHJhdGlvbiBwcm9ncmFtLCB3aGljaCB1c2VzIHRoZSBQQ1JFMiA4LWJpdCBsaWJyYXJ5LCBjb21waWxlcyB0aGUKLXJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IGlzIGl0cyBmaXJzdCBhcmd1bWVudCwgYW5kIG1hdGNoZXMgaXQgYWdhaW5zdCB0aGUKLXN1YmplY3Qgc3RyaW5nIGluIGl0cyBzZWNvbmQgYXJndW1lbnQuIE5vIFBDUkUyIG9wdGlvbnMgYXJlIHNldCwgYW5kIGRlZmF1bHQKLWNoYXJhY3RlciB0YWJsZXMgYXJlIHVzZWQuIElmIG1hdGNoaW5nIHN1Y2NlZWRzLCB0aGUgcHJvZ3JhbSBvdXRwdXRzIHRoZQotcG9ydGlvbiBvZiB0aGUgc3ViamVjdCB0aGF0IG1hdGNoZWQsIHRvZ2V0aGVyIHdpdGggdGhlIGNvbnRlbnRzIG9mIGFueSBjYXB0dXJlZAotc3Vic3RyaW5ncy4KK1RoZSBkZW1vbnN0cmF0aW9uIHByb2dyYW0gY29tcGlsZXMgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IGlzIGl0cworZmlyc3QgYXJndW1lbnQsIGFuZCBtYXRjaGVzIGl0IGFnYWluc3QgdGhlIHN1YmplY3Qgc3RyaW5nIGluIGl0cyBzZWNvbmQKK2FyZ3VtZW50LiBObyBQQ1JFMiBvcHRpb25zIGFyZSBzZXQsIGFuZCBkZWZhdWx0IGNoYXJhY3RlciB0YWJsZXMgYXJlIHVzZWQuIElmCittYXRjaGluZyBzdWNjZWVkcywgdGhlIHByb2dyYW0gb3V0cHV0cyB0aGUgcG9ydGlvbiBvZiB0aGUgc3ViamVjdCB0aGF0IG1hdGNoZWQsCit0b2dldGhlciB3aXRoIHRoZSBjb250ZW50cyBvZiBhbnkgY2FwdHVyZWQgc3Vic3RyaW5ncy4KIC5QCiBJZiB0aGUgLWcgb3B0aW9uIGlzIGdpdmVuIG9uIHRoZSBjb21tYW5kIGxpbmUsIHRoZSBwcm9ncmFtIHRoZW4gZ29lcyBvbiB0bwogY2hlY2sgZm9yIGZ1cnRoZXIgbWF0Y2hlcyBvZiB0aGUgc2FtZSByZWd1bGFyIGV4cHJlc3Npb24gaW4gdGhlIHNhbWUgc3ViamVjdAogc3RyaW5nLiBUaGUgbG9naWMgaXMgYSBsaXR0bGUgYml0IHRyaWNreSBiZWNhdXNlIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBtYXRjaGluZwogYW4gZW1wdHkgc3RyaW5nLiBDb21tZW50cyBpbiB0aGUgY29kZSBleHBsYWluIHdoYXQgaXMgZ29pbmcgb24uCiAuUAorVGhlIGNvZGUgaW4gXGZCcGNyZTJkZW1vLmNcZlAgaXMgYW4gOC1iaXQgcHJvZ3JhbSB0aGF0IHVzZXMgdGhlIFBDUkUyIDgtYml0CitsaWJyYXJ5LiBJdCBoYW5kbGVzIHN0cmluZ3MgYW5kIGNoYXJhY3RlcnMgdGhhdCBhcmUgc3RvcmVkIGluIDgtYml0IGNvZGUgdW5pdHMuCitCeSBkZWZhdWx0LCBvbmUgY2hhcmFjdGVyIGNvcnJlc3BvbmRzIHRvIG9uZSBjb2RlIHVuaXQsIGJ1dCBpZiB0aGUgcGF0dGVybgorc3RhcnRzIHdpdGggIigqVVRGKSIsIGJvdGggaXQgYW5kIHRoZSBzdWJqZWN0IGFyZSB0cmVhdGVkIGFzIFVURi04IHN0cmluZ3MsCit3aGVyZSBjaGFyYWN0ZXJzIG1heSBvY2N1cHkgbXVsdGlwbGUgY29kZSB1bml0cy4KKy5QCiBJZiBQQ1JFMiBpcyBpbnN0YWxsZWQgaW4gdGhlIHN0YW5kYXJkIGluY2x1ZGUgYW5kIGxpYnJhcnkgZGlyZWN0b3JpZXMgZm9yIHlvdXIKIG9wZXJhdGluZyBzeXN0ZW0sIHlvdSBzaG91bGQgYmUgYWJsZSB0byBjb21waWxlIHRoZSBkZW1vbnN0cmF0aW9uIHByb2dyYW0gdXNpbmcKLXRoaXMgY29tbWFuZDoKK2EgY29tbWFuZCBsaWtlIHRoaXM6CiAuc3AKLSAgZ2NjIC1vIHBjcmUyZGVtbyBwY3JlMmRlbW8uYyAtbHBjcmUyLTgKKyAgY2MgLW8gcGNyZTJkZW1vIHBjcmUyZGVtby5jIC1scGNyZTItOAogLnNwCiBJZiBQQ1JFMiBpcyBpbnN0YWxsZWQgZWxzZXdoZXJlLCB5b3UgbWF5IG5lZWQgdG8gYWRkIGFkZGl0aW9uYWwgb3B0aW9ucyB0byB0aGUKIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGUsIG9uIGEgVW5peC1saWtlIHN5c3RlbSB0aGF0IGhhcyBQQ1JFMiBpbnN0YWxsZWQgaW4KQEAgLTM3LDEyICs0MiwxMSBAQAogbGlrZSB0aGlzOgogLnNwCiAuXCIgSk9JTlNICi0gIGdjYyAtbyBwY3JlMmRlbW8gLUkvdXNyL2xvY2FsL2luY2x1ZGUgcGNyZTJkZW1vLmMgXGUKLSAgICAgIC1ML3Vzci9sb2NhbC9saWIgLWxwY3JlMi04CisgIGNjIC1vIHBjcmUyZGVtbyAtSS91c3IvbG9jYWwvaW5jbHVkZSBwY3JlMmRlbW8uYyBcZQorICAgICAtTC91c3IvbG9jYWwvbGliIC1scGNyZTItOAogLnNwCi0uUAotT25jZSB5b3UgaGF2ZSBjb21waWxlZCBhbmQgbGlua2VkIHRoZSBkZW1vbnN0cmF0aW9uIHByb2dyYW0sIHlvdSBjYW4gcnVuIHNpbXBsZQotdGVzdHMgbGlrZSB0aGlzOgorT25jZSB5b3UgaGF2ZSBidWlsdCB0aGUgZGVtb25zdHJhdGlvbiBwcm9ncmFtLCB5b3UgY2FuIHJ1biBzaW1wbGUgdGVzdHMgbGlrZQordGhpczoKIC5zcAogICAuL3BjcmUyZGVtbyAnY2F0fGRvZycgJ3RoZSBjYXQgc2F0IG9uIHRoZSBtYXQnCiAgIC4vcGNyZTJkZW1vIC1nICdjYXR8ZG9nJyAndGhlIGRvZyBzYXQgb24gdGhlIGNhdCcKQEAgLTUxLDEyICs1NSwxMyBAQAogLlwiIEhSRUYKIFxmQnBjcmUydGVzdFxmUCwKIC5cIgotd2hpY2ggc3VwcG9ydHMgbWFueSBtb3JlIGZhY2lsaXRpZXMgZm9yIHRlc3RpbmcgcmVndWxhciBleHByZXNzaW9ucyB1c2luZyB0aGUKLVBDUkUyIGxpYnJhcmllcy4gVGhlCit3aGljaCBzdXBwb3J0cyBtYW55IG1vcmUgZmFjaWxpdGllcyBmb3IgdGVzdGluZyByZWd1bGFyIGV4cHJlc3Npb25zIHVzaW5nIGFsbAordGhyZWUgUENSRTIgbGlicmFyaWVzICg4LWJpdCwgMTYtYml0LCBhbmQgMzItYml0LCB0aG91Z2ggbm90IGFsbCB0aHJlZSBuZWVkIGJlCitpbnN0YWxsZWQpLiBUaGUKIC5cIiBIUkVGCiBcZkJwY3JlMmRlbW9cZlAKIC5cIgotcHJvZ3JhbSBpcyBwcm92aWRlZCBhcyBhIHNpbXBsZSBjb2RpbmcgZXhhbXBsZS4KK3Byb2dyYW0gaXMgcHJvdmlkZWQgYXMgYSByZWxhdGl2ZWx5IHNpbXBsZSBjb2RpbmcgZXhhbXBsZS4KIC5QCiBJZiB5b3UgdHJ5IHRvIHJ1bgogLlwiIEhSRUYKQEAgLTY1LDcgKzcwLDcgQEAKIHdoZW4gUENSRTIgaXMgbm90IGluc3RhbGxlZCBpbiB0aGUgc3RhbmRhcmQgbGlicmFyeSBkaXJlY3RvcnksIHlvdSBtYXkgZ2V0IGFuCiBlcnJvciBsaWtlIHRoaXMgb24gc29tZSBvcGVyYXRpbmcgc3lzdGVtcyAoZS5nLiBTb2xhcmlzKToKIC5zcAotICBsZC5zby4xOiBhLm91dDogZmF0YWw6IGxpYnBjcmUyLnNvLjA6IG9wZW4gZmFpbGVkOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CisgIGxkLnNvLjE6IHBjcmUyZGVtbzogZmF0YWw6IGxpYnBjcmUyLTguc28uMDogb3BlbiBmYWlsZWQ6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKIC5zcAogVGhpcyBpcyBjYXVzZWQgYnkgdGhlIHdheSBzaGFyZWQgbGlicmFyeSBzdXBwb3J0IHdvcmtzIG9uIHRob3NlIHN5c3RlbXMuIFlvdQogbmVlZCB0byBhZGQKQEAgLTg5LDYgKzk0LDYgQEAKIC5ycwogLnNwCiAubmYKLUxhc3QgdXBkYXRlZDogMjAgT2N0b2JlciAyMDE0Ci1Db3B5cmlnaHQgKGMpIDE5OTctMjAxNCBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZS4KK0xhc3QgdXBkYXRlZDogMDIgRmVicnVhcnkgMjAxNgorQ29weXJpZ2h0IChjKSAxOTk3LTIwMTYgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UuCiAuZmkKZGlmZiAtLWdpdCBhL2Rpc3QyL2RvYy9wY3JlMnNlcmlhbGl6ZS4zIGIvZGlzdDIvZG9jL3BjcmUyc2VyaWFsaXplLjMKaW5kZXggNjliY2IxOC4uNjY0YzFkYiAxMDA2NDQKLS0tIGEvZGlzdDIvZG9jL3BjcmUyc2VyaWFsaXplLjMKKysrIGIvZGlzdDIvZG9jL3BjcmUyc2VyaWFsaXplLjMKQEAgLTEsNCArMSw0IEBACi0uVEggUENSRTJTRVJJQUxJWkUgMyAiMDMgTm92ZW1iZXIgMjAxNSIgIlBDUkUyIDEwLjIxIgorLlRIIFBDUkUyU0VSSUFMSVpFIDMgIjI0IE1heSAyMDE2IiAiUENSRTIgMTAuMjIiCiAuU0ggTkFNRQogUENSRTIgLSBQZXJsLWNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9ucyAocmV2aXNlZCBBUEkpCiAuU0ggIlNBVklORyBBTkQgUkUtVVNJTkcgUFJFQ09NUElMRUQgUENSRTIgUEFUVEVSTlMiCkBAIC0zMCw2ICszMCwxNiBAQAogcmVsb2FkZWQgdXNpbmcgdGhlIDgtYml0IGxpYnJhcnkuCiAuCiAuCisuU0ggIlNFQ1VSSVRZIENPTkNFUk5TIgorLnJzCisuc3AKK1RoZSBmYWNpbGl0eSBmb3Igc2F2aW5nIGFuZCByZXN0b3JpbmcgY29tcGlsZWQgcGF0dGVybnMgaXMgaW50ZW5kZWQgZm9yIHVzZQord2l0aGluIGluZGl2aWR1YWwgYXBwbGljYXRpb25zLiBBcyBzdWNoLCB0aGUgZGF0YSBzdXBwbGllZCB0bworXGZCcGNyZTJfc2VyaWFsaXplX2RlY29kZSgpXGZQIGlzIGV4cGVjdGVkIHRvIGJlIHRydXN0ZWQgZGF0YSwgbm90IGRhdGEgZnJvbQorYXJiaXRyYXJ5IGV4dGVybmFsIHNvdXJjZXMuIFRoZXJlIGlzIG9ubHkgc29tZSBzaW1wbGUgY29uc2lzdGVuY3kgY2hlY2tpbmcsIG5vdAorY29tcGxldGUgdmFsaWRhdGlvbiBvZiB3aGF0IGlzIGJlaW5nIHJlLWxvYWRlZC4KKy4KKy4KIC5TSCAiU0FWSU5HIENPTVBJTEVEIFBBVFRFUk5TIgogLnJzCiAuc3AKQEAgLTEyOSwxMSArMTM5LDEyIEBACiBmdW5jdGlvbiBpcyB0aGUgbnVtYmVyIG9mIGRlY29kZWQgcGF0dGVybnMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nIG5lZ2F0aXZlCiBlcnJvciBjb2RlczoKIC5zcAotICBQQ1JFMl9FUlJPUl9CQUREQVRBICAgc2Vjb25kIGFyZ3VtZW50IGlzIHplcm8gb3IgbGVzcwotICBQQ1JFMl9FUlJPUl9CQURNQUdJQyAgbWlzbWF0Y2ggb2YgaWQgYnl0ZXMgaW4gdGhlIGRhdGEKLSAgUENSRTJfRVJST1JfQkFETU9ERSAgIG1pc21hdGNoIG9mIHZhcmlhYmxlIHVuaXQgc2l6ZSBvciBQQ1JFMiB2ZXJzaW9uCi0gIFBDUkUyX0VSUk9SX01FTU9SWSAgICBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQKLSAgUENSRTJfRVJST1JfTlVMTCAgICAgIGZpcnN0IG9yIHRoaXJkIGFyZ3VtZW50IGlzIE5VTEwKKyAgUENSRTJfRVJST1JfQkFEREFUQSAgICBzZWNvbmQgYXJndW1lbnQgaXMgemVybyBvciBsZXNzCisgIFBDUkUyX0VSUk9SX0JBRE1BR0lDICAgbWlzbWF0Y2ggb2YgaWQgYnl0ZXMgaW4gdGhlIGRhdGEKKyAgUENSRTJfRVJST1JfQkFETU9ERSAgICBtaXNtYXRjaCBvZiBjb2RlIHVuaXQgc2l6ZSBvciBQQ1JFMiB2ZXJzaW9uCisgIFBDUkUyX0VSUk9SX0JBRFNFUklBTElaRUREQVRBICBvdGhlciBzYW5pdHkgY2hlY2sgZmFpbHVyZQorICBQQ1JFMl9FUlJPUl9NRU1PUlkgICAgIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZAorICBQQ1JFMl9FUlJPUl9OVUxMICAgICAgIGZpcnN0IG9yIHRoaXJkIGFyZ3VtZW50IGlzIE5VTEwKIC5zcAogUENSRTJfRVJST1JfQkFETUFHSUMgbWF5IG1lYW4gdGhhdCB0aGUgZGF0YSBpcyBjb3JydXB0LCBvciB0aGF0IGl0IHdhcyBjb21waWxlZAogb24gYSBzeXN0ZW0gd2l0aCBkaWZmZXJlbnQgZW5kaWFubmVzcy4KQEAgLTE3MCw2ICsxODEsNiBAQAogLnJzCiAuc3AKIC5uZgotTGFzdCB1cGRhdGVkOiAwMyBOb3ZlbWJlciAyMDE1Ci1Db3B5cmlnaHQgKGMpIDE5OTctMjAxNSBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZS4KK0xhc3QgdXBkYXRlZDogMjQgTWF5IDIwMTYKK0NvcHlyaWdodCAoYykgMTk5Ny0yMDE2IFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlLgogLmZpCmRpZmYgLS1naXQgYS9kaXN0Mi9kb2MvcGNyZTJ0ZXN0LjEgYi9kaXN0Mi9kb2MvcGNyZTJ0ZXN0LjEKaW5kZXggYjhlZWY5My4uMmZiZjc5NCAxMDA2NDQKLS0tIGEvZGlzdDIvZG9jL3BjcmUydGVzdC4xCisrKyBiL2Rpc3QyL2RvYy9wY3JlMnRlc3QuMQpAQCAtMSw0ICsxLDQgQEAKLS5USCBQQ1JFMlRFU1QgMSAiMTIgRGVjZW1iZXIgMjAxNSIgIlBDUkUgMTAuMjEiCisuVEggUENSRTJURVNUIDEgIjA2IEp1bHkgMjAxNiIgIlBDUkUgMTAuMjIiCiAuU0ggTkFNRQogcGNyZTJ0ZXN0IC0gYSBwcm9ncmFtIGZvciB0ZXN0aW5nIFBlcmwtY29tcGF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zLgogLlNIIFNZTk9QU0lTCkBAIC02OCwxMCArNjgsMTEgQEAKIGZ1cnRoZXIgZGF0YSBpcyByZWFkLgogLlAKIEZvciBtYXhpbXVtIHBvcnRhYmlsaXR5LCB0aGVyZWZvcmUsIGl0IGlzIHNhZmVzdCB0byBhdm9pZCBub24tcHJpbnRpbmcKLWNoYXJhY3RlcnMgaW4gXGZCcGNyZTJ0ZXN0XGZQIGlucHV0IGZpbGVzLiBUaGVyZSBpcyBhIGZhY2lsaXR5IGZvciBzcGVjaWZ5aW5nIGEKLXBhdHRlcm4ncyBjaGFyYWN0ZXJzIGFzIGhleGFkZWNpbWFsIHBhaXJzLCB0aHVzIG1ha2luZyBpdCBwb3NzaWJsZSB0byBpbmNsdWRlCi1iaW5hcnkgemVyb2VzIGluIGEgcGF0dGVybiBmb3IgdGVzdGluZyBwdXJwb3Nlcy4gU3ViamVjdCBsaW5lcyBhcmUgcHJvY2Vzc2VkCi1mb3IgYmFja3NsYXNoIGVzY2FwZXMsIHdoaWNoIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGluY2x1ZGUgYW55IGRhdGEgdmFsdWUuCitjaGFyYWN0ZXJzIGluIFxmQnBjcmUydGVzdFxmUCBpbnB1dCBmaWxlcy4gVGhlcmUgaXMgYSBmYWNpbGl0eSBmb3Igc3BlY2lmeWluZworc29tZSBvciBhbGwgb2YgYSBwYXR0ZXJuJ3MgY2hhcmFjdGVycyBhcyBoZXhhZGVjaW1hbCBwYWlycywgdGh1cyBtYWtpbmcgaXQKK3Bvc3NpYmxlIHRvIGluY2x1ZGUgYmluYXJ5IHplcm9lcyBpbiBhIHBhdHRlcm4gZm9yIHRlc3RpbmcgcHVycG9zZXMuIFN1YmplY3QKK2xpbmVzIGFyZSBwcm9jZXNzZWQgZm9yIGJhY2tzbGFzaCBlc2NhcGVzLCB3aGljaCBtYWtlcyBpdCBwb3NzaWJsZSB0byBpbmNsdWRlCithbnkgZGF0YSB2YWx1ZS4KIC4KIC4KIC5TSCAiQ09NTUFORCBMSU5FIE9QVElPTlMiCkBAIC0xNDIsNiArMTQzLDEyIEBACiB1c2luZyB0aGUgXGZCcGNyZTJfZGZhX21hdGNoKClcZlAgZnVuY3Rpb24gaW5zdGVhZCBvZiB0aGUgZGVmYXVsdAogXGZCcGNyZTJfbWF0Y2goKVxmUC4KIC5UUCAxMAorXGZCLWVycm9yXGZQIFxmSW51bWJlclssbnVtYmVyLC4uLl1cZlAKK0NhbGwgXGZCcGNyZTJfZ2V0X2Vycm9yX21lc3NhZ2UoKVxmUCBmb3IgZWFjaCBvZiB0aGUgZXJyb3IgbnVtYmVycyBpbiB0aGUKK2NvbW1hLXNlcGFyYXRlZCBsaXN0LCBkaXNwbGF5IHRoZSByZXN1bHRpbmcgbWVzc2FnZXMgb24gdGhlIHN0YW5kYXJkIG91dHB1dCwKK3RoZW4gZXhpdCB3aXRoIHplcm8gZXhpdCBjb2RlLiBUaGUgbnVtYmVycyBtYXkgYmUgcG9zaXRpdmUgb3IgbmVnYXRpdmUuIFRoaXMgaXMKK2EgY29udmVuaWVuY2UgZmFjaWxpdHkgZm9yIFBDUkUyIG1haW50YWluZXJzLgorLlRQIDEwCiBcZkItaGVscFxmUAogT3V0cHV0IGEgYnJpZWYgc3VtbWFyeSB0aGVzZSBvcHRpb25zIGFuZCB0aGVuIGV4aXQuCiAuVFAgMTAKQEAgLTMwNSw5ICszMTIsMTAgQEAKIGNvbW1hbmQgaGVscHMgZGV0ZWN0IHRlc3RzIHRoYXQgYXJlIGFjY2lkZW50YWxseSBwdXQgaW4gdGhlIHdyb25nIGZpbGUuCiAuc3AKICAgI3BvcCBbPG1vZGlmaWVycz5dCisgICNwb3Bjb3B5IFs8bW9kaWZpZXJzPl0KIC5zcAotVGhpcyBjb21tYW5kIGlzIHVzZWQgdG8gbWFuaXB1bGF0ZSB0aGUgc3RhY2sgb2YgY29tcGlsZWQgcGF0dGVybnMsIGFzIGRlc2NyaWJlZAotaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQgIlNhdmluZyBhbmQgcmVzdG9yaW5nIGNvbXBpbGVkIHBhdHRlcm5zIgorVGhlc2UgY29tbWFuZHMgYXJlIHVzZWQgdG8gbWFuaXB1bGF0ZSB0aGUgc3RhY2sgb2YgY29tcGlsZWQgcGF0dGVybnMsIGFzCitkZXNjcmliZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQgIlNhdmluZyBhbmQgcmVzdG9yaW5nIGNvbXBpbGVkIHBhdHRlcm5zIgogLlwiIEhUTUwgPGEgaHJlZj0iI3NhdmVyZXN0b3JlIj4KIC5cIiA8L2E+CiBiZWxvdy4KQEAgLTUyMyw3ICs1MzEsNyBAQAogICAgICAgZGVidWcgICAgICAgICAgICAgICAgICAgICBzYW1lIGFzIGluZm8sZnVsbGJpbmNvZGUKICAgICAgIGZ1bGxiaW5jb2RlICAgICAgICAgICAgICAgc2hvdyBiaW5hcnkgY29kZSB3aXRoIGxlbmd0aHMKICAgL0kgIGluZm8gICAgICAgICAgICAgICAgICAgICAgc2hvdyBpbmZvIGFib3V0IGNvbXBpbGVkIHBhdHRlcm4KLSAgICAgIGhleCAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybiBpcyBjb2RlZCBpbiBoZXhhZGVjaW1hbAorICAgICAgaGV4ICAgICAgICAgICAgICAgICAgICAgICB1bnF1b3RlZCBjaGFyYWN0ZXJzIGFyZSBoZXhhZGVjaW1hbAogICAgICAgaml0Wz08bnVtYmVyPl0gICAgICAgICAgICB1c2UgSklUCiAgICAgICBqaXRmYXN0ICAgICAgICAgICAgICAgICAgIHVzZSBKSVQgZmFzdCBwYXRoCiAgICAgICBqaXR2ZXJpZnkgICAgICAgICAgICAgICAgIHZlcmlmeSBKSVQgdXNlCkBAIC01MzQsNyArNTQyLDkgQEAKICAgICAgIG51bGxfY29udGV4dCAgICAgICAgICAgICAgY29tcGlsZSB3aXRoIGEgTlVMTCBjb250ZXh0CiAgICAgICBwYXJlbnNfbmVzdF9saW1pdD08bj4gICAgIHNldCBtYXhpbXVtIHBhcmVudGhlc2VzIGRlcHRoCiAgICAgICBwb3NpeCAgICAgICAgICAgICAgICAgICAgIHVzZSB0aGUgUE9TSVggQVBJCisgICAgICBwb3NpeF9ub3N1YiAgICAgICAgICAgICAgIHVzZSB0aGUgUE9TSVggQVBJIHdpdGggUkVHX05PU1VCCiAgICAgICBwdXNoICAgICAgICAgICAgICAgICAgICAgIHB1c2ggY29tcGlsZWQgcGF0dGVybiBvbnRvIHRoZSBzdGFjaworICAgICAgcHVzaGNvcHkgICAgICAgICAgICAgICAgICBwdXNoIGEgY29weSBvbnRvIHRoZSBzdGFjawogICAgICAgc3RhY2tndWFyZD08bnVtYmVyPiAgICAgICB0ZXN0IHRoZSBzdGFja2d1YXJkIGZlYXR1cmUKICAgICAgIHRhYmxlcz1bMHwxfDJdICAgICAgICAgICAgc2VsZWN0IGludGVybmFsIHRhYmxlcwogLnNwCkBAIC02MTQsMjAgKzYyNCwzMCBAQAogZGVmYXVsdCB2YWx1ZXMpLgogLgogLgotLlNTICJTcGVjaWZ5aW5nIGEgcGF0dGVybiBpbiBoZXgiCisuU1MgIlNwZWNpZnlpbmcgcGF0dGVybiBjaGFyYWN0ZXJzIGluIGhleGFkZWNpbWFsIgogLnJzCiAuc3AKLVRoZSBcZkJoZXhcZlAgbW9kaWZpZXIgc3BlY2lmaWVzIHRoYXQgdGhlIGNoYXJhY3RlcnMgb2YgdGhlIHBhdHRlcm4gYXJlIHRvIGJlCi1pbnRlcnByZXRlZCBhcyBwYWlycyBvZiBoZXhhZGVjaW1hbCBkaWdpdHMuIFdoaXRlIHNwYWNlIGlzIHBlcm1pdHRlZCBiZXR3ZWVuCi1wYWlycy4gRm9yIGV4YW1wbGU6CitUaGUgXGZCaGV4XGZQIG1vZGlmaWVyIHNwZWNpZmllcyB0aGF0IHRoZSBjaGFyYWN0ZXJzIG9mIHRoZSBwYXR0ZXJuLCBleGNlcHQgZm9yCitzdWJzdHJpbmdzIGVuY2xvc2VkIGluIHNpbmdsZSBvciBkb3VibGUgcXVvdGVzLCBhcmUgdG8gYmUgaW50ZXJwcmV0ZWQgYXMgcGFpcnMKK29mIGhleGFkZWNpbWFsIGRpZ2l0cy4gVGhpcyBmZWF0dXJlIGlzIHByb3ZpZGVkIGFzIGEgd2F5IG9mIGNyZWF0aW5nIHBhdHRlcm5zCit0aGF0IGNvbnRhaW4gYmluYXJ5IHplcm9zIGFuZCBvdGhlciBub24tcHJpbnRpbmcgY2hhcmFjdGVycy4gV2hpdGUgc3BhY2UgaXMKK3Blcm1pdHRlZCBiZXR3ZWVuIHBhaXJzIG9mIGRpZ2l0cy4gRm9yIGV4YW1wbGUsIHRoaXMgcGF0dGVybiBjb250YWlucyB0aHJlZQorY2hhcmFjdGVyczoKIC5zcAogICAvYWIgMzIgNTkvaGV4CiAuc3AKLVRoaXMgZmVhdHVyZSBpcyBwcm92aWRlZCBhcyBhIHdheSBvZiBjcmVhdGluZyBwYXR0ZXJucyB0aGF0IGNvbnRhaW4gYmluYXJ5IHplcm8KLWFuZCBvdGhlciBub24tcHJpbnRpbmcgY2hhcmFjdGVycy4gQnkgZGVmYXVsdCwgXGZCcGNyZTJ0ZXN0XGZQIHBhc3NlcyBwYXR0ZXJucwotYXMgemVyby10ZXJtaW5hdGVkIHN0cmluZ3MgdG8gXGZCcGNyZTJfY29tcGlsZSgpXGZQLCBnaXZpbmcgdGhlIGxlbmd0aCBhcwotUENSRTJfWkVST19URVJNSU5BVEVELiBIb3dldmVyLCBmb3IgcGF0dGVybnMgc3BlY2lmaWVkIGluIGhleGFkZWNpbWFsLCB0aGUKLWFjdHVhbCBsZW5ndGggb2YgdGhlIHBhdHRlcm4gaXMgcGFzc2VkLgorUGFydHMgb2Ygc3VjaCBhIHBhdHRlcm4gYXJlIHRha2VuIGxpdGVyYWxseSBpZiBxdW90ZWQuIFRoaXMgcGF0dGVybiBjb250YWlucworbmluZSBjaGFyYWN0ZXJzLCBvbmx5IHR3byBvZiB3aGljaCBhcmUgc3BlY2lmaWVkIGluIGhleGFkZWNpbWFsOgorLnNwCisgIC9hYiAibGl0ZXJhbCIgMzIvaGV4Cisuc3AKK0VpdGhlciBzaW5nbGUgb3IgZG91YmxlIHF1b3RlcyBtYXkgYmUgdXNlZC4gVGhlcmUgaXMgbm8gd2F5IG9mIGluY2x1ZGluZwordGhlIGRlbGltaXRlciB3aXRoaW4gYSBzdWJzdHJpbmcuCisuUAorQnkgZGVmYXVsdCwgXGZCcGNyZTJ0ZXN0XGZQIHBhc3NlcyBwYXR0ZXJucyBhcyB6ZXJvLXRlcm1pbmF0ZWQgc3RyaW5ncyB0bworXGZCcGNyZTJfY29tcGlsZSgpXGZQLCBnaXZpbmcgdGhlIGxlbmd0aCBhcyBQQ1JFMl9aRVJPX1RFUk1JTkFURUQuIEhvd2V2ZXIsIGZvcgorcGF0dGVybnMgc3BlY2lmaWVkIHdpdGggdGhlIFxmQmhleFxmUCBtb2RpZmllciwgdGhlIGFjdHVhbCBsZW5ndGggb2YgdGhlCitwYXR0ZXJuIGlzIHBhc3NlZC4KIC4KIC4KIC5TUyAiR2VuZXJhdGluZyBsb25nIHJlcGV0aXRpdmUgcGF0dGVybnMiCkBAIC03ODAsMTggKzgwMCwxOSBAQAogLlNTICJVc2luZyB0aGUgUE9TSVggd3JhcHBlciBBUEkiCiAucnMKIC5zcAotVGhlIFxmQi9wb3NpeFxmUCBtb2RpZmllciBjYXVzZXMgXGZCcGNyZTJ0ZXN0XGZQIHRvIGNhbGwgUENSRTIgdmlhIHRoZSBQT1NJWAotd3JhcHBlciBBUEkgcmF0aGVyIHRoYW4gaXRzIG5hdGl2ZSBBUEkuIFRoaXMgc3VwcG9ydHMgb25seSB0aGUgOC1iaXQgbGlicmFyeS4KLU5vdGUgdGhhdCBpdCBkb2VzIG5vdCBpbXBseSBQT1NJWCBtYXRjaGluZyBzZW1hbnRpY3M7IGZvciBtb3JlIGRldGFpbCBzZWUgdGhlCitUaGUgXGZCL3Bvc2l4XGZQIGFuZCBcZkJwb3NpeF9ub3N1YlxmUCBtb2RpZmllcnMgY2F1c2UgXGZCcGNyZTJ0ZXN0XGZQIHRvIGNhbGwKK1BDUkUyIHZpYSB0aGUgUE9TSVggd3JhcHBlciBBUEkgcmF0aGVyIHRoYW4gaXRzIG5hdGl2ZSBBUEkuIFdoZW4KK1xmQnBvc2l4X25vc3ViXGZQIGlzIHVzZWQsIHRoZSBQT1NJWCBvcHRpb24gUkVHX05PU1VCIGlzIHBhc3NlZCB0bworXGZCcmVnY29tcCgpXGZQLiBUaGUgUE9TSVggd3JhcHBlciBzdXBwb3J0cyBvbmx5IHRoZSA4LWJpdCBsaWJyYXJ5LiBOb3RlIHRoYXQKK2l0IGRvZXMgbm90IGltcGx5IFBPU0lYIG1hdGNoaW5nIHNlbWFudGljczsgZm9yIG1vcmUgZGV0YWlsIHNlZSB0aGUKIC5cIiBIUkVGCiBcZkJwY3JlMnBvc2l4XGZQCiAuXCIKLWRvY3VtZW50YXRpb24uIFdoZW4gdGhlIFBPU0lYIEFQSSBpcyBiZWluZyB1c2VkLCB0aGUgZm9sbG93aW5nIHBhdHRlcm4KLW1vZGlmaWVycyBzZXQgb3B0aW9ucyBmb3IgdGhlIFxmQnJlZ2NvbXAoKVxmUCBmdW5jdGlvbjoKK2RvY3VtZW50YXRpb24uIFRoZSBmb2xsb3dpbmcgcGF0dGVybiBtb2RpZmllcnMgc2V0IG9wdGlvbnMgZm9yIHRoZQorXGZCcmVnY29tcCgpXGZQIGZ1bmN0aW9uOgogLnNwCiAgIGNhc2VsZXNzICAgICAgICAgICBSRUdfSUNBU0UKICAgbXVsdGlsaW5lICAgICAgICAgIFJFR19ORVdMSU5FCi0gIG5vX2F1dG9fY2FwdHVyZSAgICBSRUdfTk9TVUIKICAgZG90YWxsICAgICAgICAgICAgIFJFR19ET1RBTEwgICAgICkKICAgdW5ncmVlZHkgICAgICAgICAgIFJFR19VTkdSRUVEWSAgICkgVGhlc2Ugb3B0aW9ucyBhcmUgbm90IHBhcnQgb2YKICAgdWNwICAgICAgICAgICAgICAgIFJFR19VQ1AgICAgICAgICkgICB0aGUgUE9TSVggc3RhbmRhcmQKQEAgLTgwNyw3ICs4MjgsOCBAQAogbGFyZ2UgYnVmZmVyIGlzIHVzZWQuCiAuUAogVGhlIFxmQmFmdGVydGV4dFxmUCBhbmQgXGZCYWxsYWZ0ZXJ0ZXh0XGZQIHN1YmplY3QgbW9kaWZpZXJzIHdvcmsgYXMgZGVzY3JpYmVkCi1iZWxvdy4gQWxsIG90aGVyIG1vZGlmaWVycyBjYXVzZSBhbiBlcnJvci4KK2JlbG93LiBBbGwgb3RoZXIgbW9kaWZpZXJzIGFyZSBlaXRoZXIgaWdub3JlZCwgd2l0aCBhIHdhcm5pbmcgbWVzc2FnZSwgb3IgY2F1c2UKK2FuIGVycm9yLgogLgogLgogLlNTICJUZXN0aW5nIHRoZSBzdGFjayBndWFyZCBmZWF0dXJlIgpAQCAtODgxLDEzICs5MDMsMTcgQEAKIHNlY3Rpb24gZW50aXRsZWQgIlNhdmluZyBhbmQgcmVzdG9yaW5nIGNvbXBpbGVkIHBhdHRlcm5zIgogLlwiIEhUTUwgPGEgaHJlZj0iI3NhdmVyZXN0b3JlIj4KIC5cIiA8L2E+Ci1iZWxvdy4KK2JlbG93LiBJZiBcZkJwdXNoY29weVxmUCBpcyB1c2VkIGluc3RlYWQgb2YgXGZCcHVzaFxmUCwgYSBjb3B5IG9mIHRoZSBjb21waWxlZAorcGF0dGVybiBpcyBzdGFja2VkLCBsZWF2aW5nIHRoZSBvcmlnaW5hbCBhcyBjdXJyZW50LCByZWFkeSB0byBtYXRjaCB0aGUKK2ZvbGxvd2luZyBpbnB1dCBsaW5lcy4gVGhpcyBwcm92aWRlcyBhIHdheSBvZiB0ZXN0aW5nIHRoZQorXGZCcGNyZTJfY29kZV9jb3B5KClcZlAgZnVuY3Rpb24uCiAuXCIKLVRoZSBcZkJwdXNoXGZQIG1vZGlmaWVyIGlzIGluY29tcGF0aWJsZSB3aXRoIGNvbXBpbGF0aW9uIG1vZGlmaWVycyBzdWNoIGFzCi1cZkJnbG9iYWxcZlAgdGhhdCBhY3QgYXQgbWF0Y2ggdGltZS4gQW55IHRoYXQgYXJlIHNwZWNpZmllZCBhcmUgaWdub3JlZCwgd2l0aCBhCi13YXJuaW5nIG1lc3NhZ2UsIGV4Y2VwdCBmb3IgXGZCcmVwbGFjZVxmUCwgd2hpY2ggY2F1c2VzIGFuIGVycm9yLiBOb3RlIHRoYXQsCi1cZkJqaXR2ZXJpZnlcZlAsIHdoaWNoIGlzIGFsbG93ZWQsIGRvZXMgbm90IGNhcnJ5IHRocm91Z2ggdG8gYW55IHN1YnNlcXVlbnQKLW1hdGNoaW5nIHRoYXQgdXNlcyB0aGlzIHBhdHRlcm4uCitUaGUgXGZCcHVzaFxmUCBhbmQgXGZCcHVzaGNvcHkgXGZQIG1vZGlmaWVycyBhcmUgaW5jb21wYXRpYmxlIHdpdGggY29tcGlsYXRpb24KK21vZGlmaWVycyBzdWNoIGFzIFxmQmdsb2JhbFxmUCB0aGF0IGFjdCBhdCBtYXRjaCB0aW1lLiBBbnkgdGhhdCBhcmUgc3BlY2lmaWVkCithcmUgaWdub3JlZCAoZm9yIHRoZSBzdGFja2VkIGNvcHkpLCB3aXRoIGEgd2FybmluZyBtZXNzYWdlLCBleGNlcHQgZm9yCitcZkJyZXBsYWNlXGZQLCB3aGljaCBjYXVzZXMgYW4gZXJyb3IuIE5vdGUgdGhhdCBcZkJqaXR2ZXJpZnlcZlAsIHdoaWNoIGlzCithbGxvd2VkLCBkb2VzIG5vdCBjYXJyeSB0aHJvdWdoIHRvIGFueSBzdWJzZXF1ZW50IG1hdGNoaW5nIHRoYXQgdXNlcyBhIHN0YWNrZWQKK3BhdHRlcm4uCiAuCiAuCiAuXCIgSFRNTCA8YSBuYW1lPSJzdWJqZWN0bW9kaWZpZXJzIj48L2E+CkBAIC05MTEsNiArOTM3LDcgQEAKICAgICAgIGFuY2hvcmVkICAgICAgICAgICAgICAgICAgc2V0IFBDUkUyX0FOQ0hPUkVECiAgICAgICBkZmFfcmVzdGFydCAgICAgICAgICAgICAgIHNldCBQQ1JFMl9ERkFfUkVTVEFSVAogICAgICAgZGZhX3Nob3J0ZXN0ICAgICAgICAgICAgICBzZXQgUENSRTJfREZBX1NIT1JURVNUCisgICAgICBub19qaXQgICAgICAgICAgICAgICAgICAgIHNldCBQQ1JFMl9OT19KSVQKICAgICAgIG5vX3V0Zl9jaGVjayAgICAgICAgICAgICAgc2V0IFBDUkUyX05PX1VURl9DSEVDSwogICAgICAgbm90Ym9sICAgICAgICAgICAgICAgICAgICBzZXQgUENSRTJfTk9UQk9MCiAgICAgICBub3RlbXB0eSAgICAgICAgICAgICAgICAgIHNldCBQQ1JFMl9OT1RFTVBUWQpAQCAtOTI2LDcgKzk1Myw3IEBACiB3cmFwcGVyIEFQSSB0byBiZSB1c2VkLCB0aGUgb25seSBvcHRpb24tc2V0dGluZyBtb2RpZmllcnMgdGhhdCBoYXZlIGFueSBlZmZlY3QKIGFyZSBcZkJub3Rib2xcZlAsIFxmQm5vdGVtcHR5XGZQLCBhbmQgXGZCbm90ZW9sXGZQLCBjYXVzaW5nIFJFR19OT1RCT0wsCiBSRUdfTk9URU1QVFksIGFuZCBSRUdfTk9URU9MLCByZXNwZWN0aXZlbHksIHRvIGJlIHBhc3NlZCB0byBcZkJyZWdleGVjKClcZlAuCi1Bbnkgb3RoZXIgbW9kaWZpZXJzIGNhdXNlIGFuIGVycm9yLgorVGhlIG90aGVyIG1vZGlmaWVycyBhcmUgaWdub3JlZCwgd2l0aCBhIHdhcm5pbmcgbWVzc2FnZS4KIC4KIC4KIC5TUyAiU2V0dGluZyBtYXRjaCBjb250cm9scyIKQEAgLTk3MCw3ICs5OTcsMTAgQEAKICAgICAgIHN1YnN0aXR1dGVfdW5zZXRfZW1wdHkgICAgIHVzZSBQQ1JFMl9TVUJTVElUVVRFX1VOU0VUX0VNUFRZCiAgICAgICB6ZXJvX3Rlcm1pbmF0ZSAgICAgICAgICAgICBwYXNzIHRoZSBzdWJqZWN0IGFzIHplcm8tdGVybWluYXRlZAogLnNwCi1UaGUgZWZmZWN0cyBvZiB0aGVzZSBtb2RpZmllcnMgYXJlIGRlc2NyaWJlZCBpbiB0aGUgZm9sbG93aW5nIHNlY3Rpb25zLgorVGhlIGVmZmVjdHMgb2YgdGhlc2UgbW9kaWZpZXJzIGFyZSBkZXNjcmliZWQgaW4gdGhlIGZvbGxvd2luZyBzZWN0aW9ucy4gV2hlbgorbWF0Y2hpbmcgdmlhIHRoZSBQT1NJWCB3cmFwcGVyIEFQSSwgdGhlIFxmQmFmdGVydGV4dFxmUCwgXGZCYWxsYWZ0ZXJ0ZXh0XGZQLAorYW5kIFxmQm92ZWN0b3JcZlAgc3ViamVjdCBtb2RpZmllcnMgd29yayBhcyBkZXNjcmliZWQgYmVsb3cuIEFsbCBvdGhlcgorbW9kaWZpZXJzIGFyZSBlaXRoZXIgaWdub3JlZCwgd2l0aCBhIHdhcm5pbmcgbWVzc2FnZSwgb3IgY2F1c2UgYW4gZXJyb3IuCiAuCiAuCiAuU1MgIlNob3dpbmcgbW9yZSB0ZXh0IgpAQCAtMTAyNSw3ICsxMDU1LDggQEAKIGNhcHR1cmVkIHBhcmVudGhlc2VzIGJlIG91dHB1dCBhZnRlciBhIG1hdGNoLiBCeSBkZWZhdWx0LCBvbmx5IHRob3NlIHVwIHRvIHRoZQogaGlnaGVzdCBvbmUgYWN0dWFsbHkgdXNlZCBpbiB0aGUgbWF0Y2ggYXJlIG91dHB1dCAoY29ycmVzcG9uZGluZyB0byB0aGUgcmV0dXJuCiBjb2RlIGZyb20gXGZCcGNyZTJfbWF0Y2goKVxmUCkuIEdyb3VwcyB0aGF0IGRpZCBub3QgdGFrZSBwYXJ0IGluIHRoZSBtYXRjaAotYXJlIG91dHB1dCBhcyAiPHVuc2V0PiIuCithcmUgb3V0cHV0IGFzICI8dW5zZXQ+Ii4gVGhpcyBtb2RpZmllciBpcyBub3QgcmVsZXZhbnQgZm9yIERGQSBtYXRjaGluZyAod2hpY2gKK2RvZXMgbm8gY2FwdHVyaW5nKTsgaXQgaXMgaWdub3JlZCwgd2l0aCBhIHdhcm5pbmcgbWVzc2FnZSwgaWYgcHJlc2VudC4KIC4KIC4KIC5TUyAiVGVzdGluZyBjYWxsb3V0cyIKQEAgLTE0NzUsNyArMTUwNiw5IEBACiBUaGlzIG91dHB1dCBpbmRpY2F0ZXMgdGhhdCBjYWxsb3V0IG51bWJlciAwIG9jY3VycmVkIGZvciBhIG1hdGNoIGF0dGVtcHQKIHN0YXJ0aW5nIGF0IHRoZSBmb3VydGggY2hhcmFjdGVyIG9mIHRoZSBzdWJqZWN0IHN0cmluZywgd2hlbiB0aGUgcG9pbnRlciB3YXMgYXQKIHRoZSBzZXZlbnRoIGNoYXJhY3RlciwgYW5kIHdoZW4gdGhlIG5leHQgcGF0dGVybiBpdGVtIHdhcyBcZWQuIEp1c3QKLW9uZSBjaXJjdW1mbGV4IGlzIG91dHB1dCBpZiB0aGUgc3RhcnQgYW5kIGN1cnJlbnQgcG9zaXRpb25zIGFyZSB0aGUgc2FtZS4KK29uZSBjaXJjdW1mbGV4IGlzIG91dHB1dCBpZiB0aGUgc3RhcnQgYW5kIGN1cnJlbnQgcG9zaXRpb25zIGFyZSB0aGUgc2FtZSwgb3IgaWYKK3RoZSBjdXJyZW50IHBvc2l0aW9uIHByZWNlZGVzIHRoZSBzdGFydCBwb3NpdGlvbiwgd2hpY2ggY2FuIGhhcHBlbiBpZiB0aGUKK2NhbGxvdXQgaXMgaW4gYSBsb29rYmVoaW5kIGFzc2VydGlvbi4KIC5QCiBDYWxsb3V0cyBudW1iZXJlZCAyNTUgYXJlIGFzc3VtZWQgdG8gYmUgYXV0b21hdGljIGNhbGxvdXRzLCBpbnNlcnRlZCBhcyBhCiByZXN1bHQgb2YgdGhlIFxmQi9hdXRvX2NhbGxvdXRcZlAgcGF0dGVybiBtb2RpZmllci4gSW4gdGhpcyBjYXNlLCBpbnN0ZWFkIG9mCkBAIC0xNTcxLDExICsxNjA0LDE1IEBACiAuUAogV2hlbiBhIHBhdHRlcm4gd2l0aCBcZkJwdXNoXGZQIG1vZGlmaWVyIGlzIHN1Y2Nlc3NmdWxseSBjb21waWxlZCwgaXQgaXMgcHVzaGVkCiBvbnRvIGEgc3RhY2sgb2YgY29tcGlsZWQgcGF0dGVybnMsIGFuZCBcZkJwY3JlMnRlc3RcZlAgZXhwZWN0cyB0aGUgbmV4dCBsaW5lIHRvCi1jb250YWluIGEgbmV3IHBhdHRlcm4gKG9yIGNvbW1hbmQpIGluc3RlYWQgb2YgYSBzdWJqZWN0IGxpbmUuIEJ5IHRoaXMgbWVhbnMsIGEKLW51bWJlciBvZiBwYXR0ZXJucyBjYW4gYmUgY29tcGlsZWQgYW5kIHJldGFpbmVkLiBUaGUgXGZCcHVzaFxmUCBtb2RpZmllciBpcwotaW5jb21wYXRpYmxlIHdpdGggXGZCcG9zaXhcZlAsIGFuZCBjb250cm9sIG1vZGlmaWVycyB0aGF0IGFjdCBhdCBtYXRjaCB0aW1lIGFyZQotaWdub3JlZCAod2l0aCBhIG1lc3NhZ2UpLiBUaGUgXGZCaml0dmVyaWZ5XGZQIG1vZGlmaWVyIGFwcGxpZXMgb25seSBhdCBjb21waWxlCi10aW1lLiBUaGUgY29tbWFuZAorY29udGFpbiBhIG5ldyBwYXR0ZXJuIChvciBjb21tYW5kKSBpbnN0ZWFkIG9mIGEgc3ViamVjdCBsaW5lLiBCeSBjb250cmFzdCwKK3RoZSBcZkJwdXNoY29weVxmUCBtb2RpZmllciBjYXVzZXMgYSBjb3B5IG9mIHRoZSBjb21waWxlZCBwYXR0ZXJuIHRvIGJlCitzdGFja2VkLCBsZWF2aW5nIHRoZSBvcmlnaW5hbCBhdmFpbGFibGUgZm9yIGltbWVkaWF0ZSBtYXRjaGluZy4gQnkgdXNpbmcKK1xmQnB1c2hcZlAgYW5kL29yIFxmQnB1c2hjb3B5XGZQLCBhIG51bWJlciBvZiBwYXR0ZXJucyBjYW4gYmUgY29tcGlsZWQgYW5kCityZXRhaW5lZC4gVGhlc2UgbW9kaWZpZXJzIGFyZSBpbmNvbXBhdGlibGUgd2l0aCBcZkJwb3NpeFxmUCwgYW5kIGNvbnRyb2wKK21vZGlmaWVycyB0aGF0IGFjdCBhdCBtYXRjaCB0aW1lIGFyZSBpZ25vcmVkICh3aXRoIGEgbWVzc2FnZSkgZm9yIHRoZSBzdGFja2VkCitwYXR0ZXJucy4gVGhlIFxmQmppdHZlcmlmeVxmUCBtb2RpZmllciBhcHBsaWVzIG9ubHkgYXQgY29tcGlsZSB0aW1lLgorLlAKK1RoZSBjb21tYW5kCiAuc3AKICAgI3NhdmUgPGZpbGVuYW1lPgogLnNwCkBAIC0xNTk1LDcgKzE2MzIsOCBAQAogY29udHJvbCBtb2RpZmllcnMKIC5cIgogdGhhdCBhY3QgYWZ0ZXIgYSBwYXR0ZXJuIGhhcyBiZWVuIGNvbXBpbGVkLiBJbiBwYXJ0aWN1bGFyLCBcZkJoZXhcZlAsCi1cZkJwb3NpeFxmUCwgYW5kIFxmQnB1c2hcZlAgYXJlIG5vdCBhbGxvd2VkLCBub3IgYXJlIGFueQorXGZCcG9zaXhcZlAsIFxmQnBvc2l4X25vc3ViXGZQLCBcZkJwdXNoXGZQLCBhbmQgXGZCcHVzaGNvcHlcZlAgYXJlIG5vdCBhbGxvd2VkLAorbm9yIGFyZSBhbnkKIC5cIiBIVE1MIDxhIGhyZWY9IiNvcHRpb25tb2RpZmllcnMiPgogLlwiIDwvYT4KIG9wdGlvbi1zZXR0aW5nIG1vZGlmaWVycy4KQEAgLTE2MTUsNiArMTY1MywxMCBAQAogLnNwCiBJZiBcZkJqaXR2ZXJpZnlcZlAgaXMgdXNlZCB3aXRoICNwb3AsIGl0IGRvZXMgbm90IGF1dG9tYXRpY2FsbHkgaW1wbHkKIFxmQmppdFxmUCwgd2hpY2ggaXMgZGlmZmVyZW50IGJlaGF2aW91ciBmcm9tIHdoZW4gaXQgaXMgdXNlZCBvbiBhIHBhdHRlcm4uCisuUAorVGhlICNwb3Bjb3B5IGNvbW1hbmQgaXMgYW5hbGFnb3VzIHRvIHRoZSBcZkJwdXNoY29weVxmUCBtb2RpZmllciBpbiB0aGF0IGl0CittYWtlcyBjdXJyZW50IGEgY29weSBvZiB0aGUgdG9wbW9zdCBzdGFjayBwYXR0ZXJuLCBsZWF2aW5nIHRoZSBvcmlnaW5hbCBzdGlsbAorb24gdGhlIHN0YWNrLgogLgogLgogLgpAQCAtMTY0MCw2ICsxNjgyLDYgQEAKIC5ycwogLnNwCiAubmYKLUxhc3QgdXBkYXRlZDogMTIgRGVjZW1iZXIgMjAxNQotQ29weXJpZ2h0IChjKSAxOTk3LTIwMTUgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UuCitMYXN0IHVwZGF0ZWQ6IDA2IEp1bHkgMjAxNgorQ29weXJpZ2h0IChjKSAxOTk3LTIwMTYgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UuCiAuZmkKZGlmZiAtLWdpdCBhL2Rpc3QyL2RvYy9wY3JlMnRlc3QudHh0IGIvZGlzdDIvZG9jL3BjcmUydGVzdC50eHQKaW5kZXggZDlkYmM0ZC4uY2ZhMGJhYSAxMDA2NDQKLS0tIGEvZGlzdDIvZG9jL3BjcmUydGVzdC50eHQKKysrIGIvZGlzdDIvZG9jL3BjcmUydGVzdC50eHQKQEAgLTY3LDEwICs2NywxMCBAQAogCiAgICAgICAgRm9yICBtYXhpbXVtIHBvcnRhYmlsaXR5LCB0aGVyZWZvcmUsIGl0IGlzIHNhZmVzdCB0byBhdm9pZCBub24tcHJpbnRpbmcKICAgICAgICBjaGFyYWN0ZXJzIGluIHBjcmUydGVzdCBpbnB1dCBmaWxlcy4gVGhlcmUgaXMgYSBmYWNpbGl0eSBmb3Igc3BlY2lmeWluZwotICAgICAgIGEgcGF0dGVybidzIGNoYXJhY3RlcnMgYXMgaGV4YWRlY2ltYWwgcGFpcnMsIHRodXMgbWFraW5nIGl0IHBvc3NpYmxlIHRvCi0gICAgICAgaW5jbHVkZSBiaW5hcnkgemVyb2VzIGluIGEgcGF0dGVybiBmb3IgdGVzdGluZyBwdXJwb3Nlcy4gU3ViamVjdCAgbGluZXMKLSAgICAgICBhcmUgcHJvY2Vzc2VkIGZvciBiYWNrc2xhc2ggZXNjYXBlcywgd2hpY2ggbWFrZXMgaXQgcG9zc2libGUgdG8gaW5jbHVkZQotICAgICAgIGFueSBkYXRhIHZhbHVlLgorICAgICAgIHNvbWUgb3IgYWxsIG9mIGEgcGF0dGVybidzIGNoYXJhY3RlcnMgYXMgaGV4YWRlY2ltYWwgcGFpcnMsIHRodXMgbWFraW5nCisgICAgICAgaXQgcG9zc2libGUgdG8gaW5jbHVkZSBiaW5hcnkgemVyb2VzIGluIGEgcGF0dGVybiBmb3IgdGVzdGluZyBwdXJwb3Nlcy4KKyAgICAgICBTdWJqZWN0ICBsaW5lcyBhcmUgcHJvY2Vzc2VkIGZvciBiYWNrc2xhc2ggZXNjYXBlcywgd2hpY2ggbWFrZXMgaXQgcG9zLQorICAgICAgIHNpYmxlIHRvIGluY2x1ZGUgYW55IGRhdGEgdmFsdWUuCiAKIAogQ09NTUFORCBMSU5FIE9QVElPTlMKQEAgLTEzOCw2ICsxMzgsMTMgQEAKICAgICAgICAgICAgICAgICAgaXMgIGRvbmUgIHVzaW5nIHRoZSBwY3JlMl9kZmFfbWF0Y2goKSBmdW5jdGlvbiBpbnN0ZWFkIG9mIHRoZQogICAgICAgICAgICAgICAgICBkZWZhdWx0IHBjcmUyX21hdGNoKCkuCiAKKyAgICAgICAtZXJyb3IgbnVtYmVyWyxudW1iZXIsLi4uXQorICAgICAgICAgICAgICAgICBDYWxsIHBjcmUyX2dldF9lcnJvcl9tZXNzYWdlKCkgZm9yIGVhY2ggb2YgdGhlIGVycm9yICBudW1iZXJzCisgICAgICAgICAgICAgICAgIGluICB0aGUgIGNvbW1hLXNlcGFyYXRlZCBsaXN0LCBkaXNwbGF5IHRoZSByZXN1bHRpbmcgbWVzc2FnZXMKKyAgICAgICAgICAgICAgICAgb24gdGhlIHN0YW5kYXJkIG91dHB1dCwgdGhlbiBleGl0IHdpdGggemVybyAgZXhpdCAgY29kZS4gIFRoZQorICAgICAgICAgICAgICAgICBudW1iZXJzICBtYXkgIGJlICBwb3NpdGl2ZSBvciBuZWdhdGl2ZS4gVGhpcyBpcyBhIGNvbnZlbmllbmNlCisgICAgICAgICAgICAgICAgIGZhY2lsaXR5IGZvciBQQ1JFMiBtYWludGFpbmVycy4KKwogICAgICAgIC1oZWxwICAgICBPdXRwdXQgYSBicmllZiBzdW1tYXJ5IHRoZXNlIG9wdGlvbnMgYW5kIHRoZW4gZXhpdC4KIAogICAgICAgIC1pICAgICAgICBCZWhhdmUgYXMgaWYgZWFjaCBwYXR0ZXJuIGhhcyB0aGUgL2luZm8gbW9kaWZpZXI7IGluZm9ybWF0aW9uCkBAIC0yOTYsMTAgKzMwMywxMSBAQAogICAgICAgIHdyb25nIGZpbGUuCiAKICAgICAgICAgICNwb3AgWzxtb2RpZmllcnM+XQorICAgICAgICAgI3BvcGNvcHkgWzxtb2RpZmllcnM+XQogCi0gICAgICAgVGhpcyAgY29tbWFuZCAgaXMgdXNlZCB0byBtYW5pcHVsYXRlIHRoZSBzdGFjayBvZiBjb21waWxlZCBwYXR0ZXJucywgYXMKLSAgICAgICBkZXNjcmliZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQgIlNhdmluZyBhbmQgcmVzdG9yaW5nICBjb21waWxlZCAgcGF0LQotICAgICAgIHRlcm5zIiBiZWxvdy4KKyAgICAgICBUaGVzZSAgY29tbWFuZHMgIGFyZSB1c2VkIHRvIG1hbmlwdWxhdGUgdGhlIHN0YWNrIG9mIGNvbXBpbGVkIHBhdHRlcm5zLAorICAgICAgIGFzIGRlc2NyaWJlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZCAgIlNhdmluZyAgYW5kICByZXN0b3JpbmcgIGNvbXBpbGVkCisgICAgICAgcGF0dGVybnMiIGJlbG93LgogCiAgICAgICAgICAjc2F2ZSA8ZmlsZW5hbWU+CiAKQEAgLTUwNSw3ICs1MTMsNyBAQAogICAgICAgICAgICAgIGRlYnVnICAgICAgICAgICAgICAgICAgICAgc2FtZSBhcyBpbmZvLGZ1bGxiaW5jb2RlCiAgICAgICAgICAgICAgZnVsbGJpbmNvZGUgICAgICAgICAgICAgICBzaG93IGJpbmFyeSBjb2RlIHdpdGggbGVuZ3RocwogICAgICAgICAgL0kgIGluZm8gICAgICAgICAgICAgICAgICAgICAgc2hvdyBpbmZvIGFib3V0IGNvbXBpbGVkIHBhdHRlcm4KLSAgICAgICAgICAgICBoZXggICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm4gaXMgY29kZWQgaW4gaGV4YWRlY2ltYWwKKyAgICAgICAgICAgICBoZXggICAgICAgICAgICAgICAgICAgICAgIHVucXVvdGVkIGNoYXJhY3RlcnMgYXJlIGhleGFkZWNpbWFsCiAgICAgICAgICAgICAgaml0Wz08bnVtYmVyPl0gICAgICAgICAgICB1c2UgSklUCiAgICAgICAgICAgICAgaml0ZmFzdCAgICAgICAgICAgICAgICAgICB1c2UgSklUIGZhc3QgcGF0aAogICAgICAgICAgICAgIGppdHZlcmlmeSAgICAgICAgICAgICAgICAgdmVyaWZ5IEpJVCB1c2UKQEAgLTUxNiw3ICs1MjQsOSBAQAogICAgICAgICAgICAgIG51bGxfY29udGV4dCAgICAgICAgICAgICAgY29tcGlsZSB3aXRoIGEgTlVMTCBjb250ZXh0CiAgICAgICAgICAgICAgcGFyZW5zX25lc3RfbGltaXQ9PG4+ICAgICBzZXQgbWF4aW11bSBwYXJlbnRoZXNlcyBkZXB0aAogICAgICAgICAgICAgIHBvc2l4ICAgICAgICAgICAgICAgICAgICAgdXNlIHRoZSBQT1NJWCBBUEkKKyAgICAgICAgICAgICBwb3NpeF9ub3N1YiAgICAgICAgICAgICAgIHVzZSB0aGUgUE9TSVggQVBJIHdpdGggUkVHX05PU1VCCiAgICAgICAgICAgICAgcHVzaCAgICAgICAgICAgICAgICAgICAgICBwdXNoIGNvbXBpbGVkIHBhdHRlcm4gb250byB0aGUgc3RhY2sKKyAgICAgICAgICAgICBwdXNoY29weSAgICAgICAgICAgICAgICAgIHB1c2ggYSBjb3B5IG9udG8gdGhlIHN0YWNrCiAgICAgICAgICAgICAgc3RhY2tndWFyZD08bnVtYmVyPiAgICAgICB0ZXN0IHRoZSBzdGFja2d1YXJkIGZlYXR1cmUKICAgICAgICAgICAgICB0YWJsZXM9WzB8MXwyXSAgICAgICAgICAgIHNlbGVjdCBpbnRlcm5hbCB0YWJsZXMKIApAQCAtNTkxLDU5ICs2MDEsNzAgQEAKICAgICAgICB0ZXN0aW5nIHRoYXQgcGNyZTJfY29tcGlsZSgpIGJlaGF2ZXMgY29ycmVjdGx5IGluIHRoaXMgIGNhc2UgIChpdCAgdXNlcwogICAgICAgIGRlZmF1bHQgdmFsdWVzKS4KIAotICAgU3BlY2lmeWluZyBhIHBhdHRlcm4gaW4gaGV4CisgICBTcGVjaWZ5aW5nIHBhdHRlcm4gY2hhcmFjdGVycyBpbiBoZXhhZGVjaW1hbAogCi0gICAgICAgVGhlIGhleCBtb2RpZmllciBzcGVjaWZpZXMgdGhhdCB0aGUgY2hhcmFjdGVycyBvZiB0aGUgcGF0dGVybiBhcmUgdG8gYmUKLSAgICAgICBpbnRlcnByZXRlZCBhcyBwYWlycyBvZiBoZXhhZGVjaW1hbCBkaWdpdHMuIFdoaXRlICBzcGFjZSAgaXMgIHBlcm1pdHRlZAotICAgICAgIGJldHdlZW4gcGFpcnMuIEZvciBleGFtcGxlOgorICAgICAgIFRoZSAgaGV4ICBtb2RpZmllciBzcGVjaWZpZXMgdGhhdCB0aGUgY2hhcmFjdGVycyBvZiB0aGUgcGF0dGVybiwgZXhjZXB0CisgICAgICAgZm9yIHN1YnN0cmluZ3MgZW5jbG9zZWQgaW4gc2luZ2xlIG9yIGRvdWJsZSBxdW90ZXMsIGFyZSAgdG8gIGJlICBpbnRlci0KKyAgICAgICBwcmV0ZWQgIGFzICBwYWlycyAgb2YgaGV4YWRlY2ltYWwgZGlnaXRzLiBUaGlzIGZlYXR1cmUgaXMgcHJvdmlkZWQgYXMgYQorICAgICAgIHdheSBvZiBjcmVhdGluZyBwYXR0ZXJucyB0aGF0IGNvbnRhaW4gYmluYXJ5IHplcm9zIGFuZCBvdGhlciBub24tcHJpbnQtCisgICAgICAgaW5nICBjaGFyYWN0ZXJzLiAgV2hpdGUgc3BhY2UgaXMgcGVybWl0dGVkIGJldHdlZW4gcGFpcnMgb2YgZGlnaXRzLiBGb3IKKyAgICAgICBleGFtcGxlLCB0aGlzIHBhdHRlcm4gY29udGFpbnMgdGhyZWUgY2hhcmFjdGVyczoKIAogICAgICAgICAgL2FiIDMyIDU5L2hleAogCi0gICAgICAgVGhpcyAgZmVhdHVyZSAgaXMgIHByb3ZpZGVkICBhcyBhIHdheSBvZiBjcmVhdGluZyBwYXR0ZXJucyB0aGF0IGNvbnRhaW4KLSAgICAgICBiaW5hcnkgemVybyBhbmQgb3RoZXIgbm9uLXByaW50aW5nIGNoYXJhY3RlcnMuICBCeSAgZGVmYXVsdCwgIHBjcmUydGVzdAotICAgICAgIHBhc3NlcyAgcGF0dGVybnMgIGFzIHplcm8tdGVybWluYXRlZCBzdHJpbmdzIHRvIHBjcmUyX2NvbXBpbGUoKSwgZ2l2aW5nCi0gICAgICAgdGhlIGxlbmd0aCBhcyBQQ1JFMl9aRVJPX1RFUk1JTkFURUQuIEhvd2V2ZXIsIGZvciBwYXR0ZXJucyBzcGVjaWZpZWQgaW4KLSAgICAgICBoZXhhZGVjaW1hbCwgdGhlIGFjdHVhbCBsZW5ndGggb2YgdGhlIHBhdHRlcm4gaXMgcGFzc2VkLgorICAgICAgIFBhcnRzIG9mIHN1Y2ggYSBwYXR0ZXJuIGFyZSB0YWtlbiBsaXRlcmFsbHkgIGlmICBxdW90ZWQuICBUaGlzICBwYXR0ZXJuCisgICAgICAgY29udGFpbnMgIG5pbmUgY2hhcmFjdGVycywgb25seSB0d28gb2Ygd2hpY2ggYXJlIHNwZWNpZmllZCBpbiBoZXhhZGVjaS0KKyAgICAgICBtYWw6CisKKyAgICAgICAgIC9hYiAibGl0ZXJhbCIgMzIvaGV4CisKKyAgICAgICBFaXRoZXIgc2luZ2xlIG9yIGRvdWJsZSBxdW90ZXMgbWF5IGJlIHVzZWQuIFRoZXJlIGlzIG5vIHdheSBvZiAgaW5jbHVkLQorICAgICAgIGluZyB0aGUgZGVsaW1pdGVyIHdpdGhpbiBhIHN1YnN0cmluZy4KKworICAgICAgIEJ5ICBkZWZhdWx0LCAgcGNyZTJ0ZXN0ICBwYXNzZXMgIHBhdHRlcm5zIGFzIHplcm8tdGVybWluYXRlZCBzdHJpbmdzIHRvCisgICAgICAgcGNyZTJfY29tcGlsZSgpLCBnaXZpbmcgdGhlIGxlbmd0aCBhcyAgUENSRTJfWkVST19URVJNSU5BVEVELiAgSG93ZXZlciwKKyAgICAgICBmb3IgIHBhdHRlcm5zIHNwZWNpZmllZCB3aXRoIHRoZSBoZXggbW9kaWZpZXIsIHRoZSBhY3R1YWwgbGVuZ3RoIG9mIHRoZQorICAgICAgIHBhdHRlcm4gaXMgcGFzc2VkLgogCiAgICBHZW5lcmF0aW5nIGxvbmcgcmVwZXRpdGl2ZSBwYXR0ZXJucwogCi0gICAgICAgU29tZSAgdGVzdHMgdXNlIGxvbmcgcGF0dGVybnMgdGhhdCBhcmUgdmVyeSByZXBldGl0aXZlLiBJbnN0ZWFkIG9mIGNyZS0KLSAgICAgICBhdGluZyBhIHZlcnkgbG9uZyBpbnB1dCBsaW5lIGZvciBzdWNoIGEgcGF0dGVybiwgeW91IGNhbiB1c2UgYSAgc3BlY2lhbAotICAgICAgIHJlcGV0aXRpb24gIGZlYXR1cmUsICBzaW1pbGFyICB0byAgdGhlICBvbmUgZGVzY3JpYmVkIGZvciBzdWJqZWN0IGxpbmVzCi0gICAgICAgYWJvdmUuIElmIHRoZSBleHBhbmQgbW9kaWZpZXIgaXMgcHJlc2VudCBvbiBhICBwYXR0ZXJuLCAgcGFydHMgIG9mICB0aGUKKyAgICAgICBTb21lIHRlc3RzIHVzZSBsb25nIHBhdHRlcm5zIHRoYXQgYXJlIHZlcnkgcmVwZXRpdGl2ZS4gSW5zdGVhZCBvZiAgY3JlLQorICAgICAgIGF0aW5nICBhIHZlcnkgbG9uZyBpbnB1dCBsaW5lIGZvciBzdWNoIGEgcGF0dGVybiwgeW91IGNhbiB1c2UgYSBzcGVjaWFsCisgICAgICAgcmVwZXRpdGlvbiBmZWF0dXJlLCBzaW1pbGFyIHRvIHRoZSAgb25lICBkZXNjcmliZWQgIGZvciAgc3ViamVjdCAgbGluZXMKKyAgICAgICBhYm92ZS4gIElmICB0aGUgIGV4cGFuZCAgbW9kaWZpZXIgaXMgcHJlc2VudCBvbiBhIHBhdHRlcm4sIHBhcnRzIG9mIHRoZQogICAgICAgIHBhdHRlcm4gdGhhdCBoYXZlIHRoZSBmb3JtCiAKICAgICAgICAgIFxbPGNoYXJhY3RlcnM+XXs8Y291bnQ+fQogCiAgICAgICAgYXJlIGV4cGFuZGVkIGJlZm9yZSB0aGUgcGF0dGVybiBpcyBwYXNzZWQgdG8gcGNyZTJfY29tcGlsZSgpLiBGb3IgZXhhbS0KICAgICAgICBwbGUsIFxbQUJdezYwMDB9IGlzIGV4cGFuZGVkIHRvICJBQkFCLi4uIiA2MDAwIHRpbWVzLiBUaGlzIGNvbnN0cnVjdGlvbgotICAgICAgIGNhbm5vdCAgYmUgIG5lc3RlZC4gQW4gaW5pdGlhbCAiXFsiIHNlcXVlbmNlIGlzIHJlY29nbml6ZWQgb25seSBpZiAiXXsiCi0gICAgICAgZm9sbG93ZWQgYnkgZGVjaW1hbCBkaWdpdHMgYW5kICJ9IiBpcyBmb3VuZCBsYXRlciBpbiAgdGhlICBwYXR0ZXJuLiAgSWYKKyAgICAgICBjYW5ub3QgYmUgbmVzdGVkLiBBbiBpbml0aWFsICJcWyIgc2VxdWVuY2UgaXMgcmVjb2duaXplZCBvbmx5ICBpZiAgIl17IgorICAgICAgIGZvbGxvd2VkICBieSAgZGVjaW1hbCAgZGlnaXRzIGFuZCAifSIgaXMgZm91bmQgbGF0ZXIgaW4gdGhlIHBhdHRlcm4uIElmCiAgICAgICAgbm90LCB0aGUgY2hhcmFjdGVycyByZW1haW4gaW4gdGhlIHBhdHRlcm4gdW5hbHRlcmVkLgogCi0gICAgICAgSWYgIHBhcnQgIG9mIGFuIGV4cGFuZGVkIHBhdHRlcm4gbG9va3MgbGlrZSBhbiBleHBhbnNpb24sIGJ1dCBpcyByZWFsbHkKKyAgICAgICBJZiBwYXJ0IG9mIGFuIGV4cGFuZGVkIHBhdHRlcm4gbG9va3MgbGlrZSBhbiBleHBhbnNpb24sIGJ1dCAgaXMgIHJlYWxseQogICAgICAgIHBhcnQgb2YgdGhlIGFjdHVhbCBwYXR0ZXJuLCB1bndhbnRlZCBleHBhbnNpb24gY2FuIGJlIGF2b2lkZWQgYnkgZ2l2aW5nCiAgICAgICAgdHdvIHZhbHVlcyBpbiB0aGUgcXVhbnRpZmllci4gRm9yIGV4YW1wbGUsIFxbQUJdezYwMDAsNjAwMH0gaXMgbm90IHJlYy0KICAgICAgICBvZ25pemVkIGFzIGFuIGV4cGFuc2lvbiBpdGVtLgogCi0gICAgICAgSWYgdGhlIGluZm8gbW9kaWZpZXIgaXMgc2V0IG9uIGFuIGV4cGFuZGVkIHBhdHRlcm4sIHRoZSByZXN1bHQgIG9mICB0aGUKKyAgICAgICBJZiAgdGhlICBpbmZvIG1vZGlmaWVyIGlzIHNldCBvbiBhbiBleHBhbmRlZCBwYXR0ZXJuLCB0aGUgcmVzdWx0IG9mIHRoZQogICAgICAgIGV4cGFuc2lvbiBpcyBpbmNsdWRlZCBpbiB0aGUgaW5mb3JtYXRpb24gdGhhdCBpcyBvdXRwdXQuCiAKICAgIEpJVCBjb21waWxhdGlvbgogCi0gICAgICAgSnVzdC1pbi10aW1lICAoSklUKSAgY29tcGlsaW5nICBpcyAgYSBoZWF2eXdlaWdodCBvcHRpbWl6YXRpb24gdGhhdCBjYW4KLSAgICAgICBncmVhdGx5IHNwZWVkIHVwIHBhdHRlcm4gbWF0Y2hpbmcuIFNlZSB0aGUgcGNyZTJqaXQgIGRvY3VtZW50YXRpb24gIGZvcgotICAgICAgIGRldGFpbHMuICBKSVQgIGNvbXBpbGluZyAgaGFwcGVucywgb3B0aW9uYWxseSwgYWZ0ZXIgYSBwYXR0ZXJuIGhhcyBiZWVuCi0gICAgICAgc3VjY2Vzc2Z1bGx5IGNvbXBpbGVkIGludG8gYW4gaW50ZXJuYWwgZm9ybS4gVGhlIEpJVCBjb21waWxlciAgY29udmVydHMKKyAgICAgICBKdXN0LWluLXRpbWUgKEpJVCkgY29tcGlsaW5nIGlzIGEgIGhlYXZ5d2VpZ2h0ICBvcHRpbWl6YXRpb24gIHRoYXQgIGNhbgorICAgICAgIGdyZWF0bHkgIHNwZWVkICB1cCBwYXR0ZXJuIG1hdGNoaW5nLiBTZWUgdGhlIHBjcmUyaml0IGRvY3VtZW50YXRpb24gZm9yCisgICAgICAgZGV0YWlscy4gSklUIGNvbXBpbGluZyBoYXBwZW5zLCBvcHRpb25hbGx5LCBhZnRlciBhICBwYXR0ZXJuICBoYXMgIGJlZW4KKyAgICAgICBzdWNjZXNzZnVsbHkgIGNvbXBpbGVkIGludG8gYW4gaW50ZXJuYWwgZm9ybS4gVGhlIEpJVCBjb21waWxlciBjb252ZXJ0cwogICAgICAgIHRoaXMgdG8gb3B0aW1pemVkIG1hY2hpbmUgY29kZS4gSXQgbmVlZHMgdG8ga25vdyB3aGV0aGVyIHRoZSBtYXRjaC10aW1lCiAgICAgICAgb3B0aW9ucyBQQ1JFMl9QQVJUSUFMX0hBUkQgYW5kIFBDUkUyX1BBUlRJQUxfU09GVCBhcmUgZ29pbmcgdG8gYmUgdXNlZCwKLSAgICAgICBiZWNhdXNlICBkaWZmZXJlbnQgIGNvZGUgIGlzIGdlbmVyYXRlZCBmb3IgdGhlIGRpZmZlcmVudCBjYXNlcy4gU2VlIHRoZQotICAgICAgIHBhcnRpYWwgbW9kaWZpZXIgaW4gIlN1YmplY3QgTW9kaWZpZXJzIiBiZWxvdyBmb3IgZGV0YWlscyBvZiBob3cgIHRoZXNlCisgICAgICAgYmVjYXVzZSBkaWZmZXJlbnQgY29kZSBpcyBnZW5lcmF0ZWQgZm9yIHRoZSBkaWZmZXJlbnQgIGNhc2VzLiAgU2VlICB0aGUKKyAgICAgICBwYXJ0aWFsICBtb2RpZmllciBpbiAiU3ViamVjdCBNb2RpZmllcnMiIGJlbG93IGZvciBkZXRhaWxzIG9mIGhvdyB0aGVzZQogICAgICAgIG9wdGlvbnMgYXJlIHNwZWNpZmllZCBmb3IgZWFjaCBtYXRjaCBhdHRlbXB0LgogCi0gICAgICAgSklUICBjb21waWxhdGlvbiAgaXMgIHJlcXVlc3RlZCBieSB0aGUgL2ppdCBwYXR0ZXJuIG1vZGlmaWVyLCB3aGljaCBtYXkKKyAgICAgICBKSVQgY29tcGlsYXRpb24gaXMgcmVxdWVzdGVkIGJ5IHRoZSAvaml0IHBhdHRlcm4gIG1vZGlmaWVyLCAgd2hpY2ggIG1heQogICAgICAgIG9wdGlvbmFsbHkgYmUgZm9sbG93ZWQgYnkgYW4gZXF1YWxzIHNpZ24gYW5kIGEgbnVtYmVyIGluIHRoZSByYW5nZSAwIHRvCi0gICAgICAgNy4gICBUaGUgIHRocmVlIGJpdHMgdGhhdCBtYWtlIHVwIHRoZSBudW1iZXIgc3BlY2lmeSB3aGljaCBvZiB0aGUgdGhyZWUKKyAgICAgICA3LiAgVGhlIHRocmVlIGJpdHMgdGhhdCBtYWtlIHVwIHRoZSBudW1iZXIgc3BlY2lmeSB3aGljaCBvZiAgdGhlICB0aHJlZQogICAgICAgIEpJVCBvcGVyYXRpbmcgbW9kZXMgYXJlIHRvIGJlIGNvbXBpbGVkOgogCiAgICAgICAgICAxICBjb21waWxlIEpJVCBjb2RlIGZvciBub24tcGFydGlhbCBtYXRjaGluZwpAQCAtNjYwLDMxICs2ODEsMzEgQEAKICAgICAgICAgIDYgIHNvZnQgYW5kIGhhcmQgcGFydGlhbCBtYXRjaGluZyBvbmx5CiAgICAgICAgICA3ICBhbGwgdGhyZWUgbW9kZXMKIAotICAgICAgIElmIG5vIG51bWJlciBpcyBnaXZlbiwgNyBpcyAgYXNzdW1lZC4gIFRoZSAgcGhyYXNlICAicGFydGlhbCAgbWF0Y2hpbmciCisgICAgICAgSWYgIG5vICBudW1iZXIgIGlzICBnaXZlbiwgIDcgaXMgYXNzdW1lZC4gVGhlIHBocmFzZSAicGFydGlhbCBtYXRjaGluZyIKICAgICAgICBtZWFucyBhIGNhbGwgdG8gcGNyZTJfbWF0Y2goKSB3aXRoIGVpdGhlciB0aGUgUENSRTJfUEFSVElBTF9TT0ZUIG9yIHRoZQotICAgICAgIFBDUkUyX1BBUlRJQUxfSEFSRCBvcHRpb24gc2V0LiBOb3RlIHRoYXQgc3VjaCBhIGNhbGwgbWF5IHJldHVybiBhICBjb20tCisgICAgICAgUENSRTJfUEFSVElBTF9IQVJEICBvcHRpb24gc2V0LiBOb3RlIHRoYXQgc3VjaCBhIGNhbGwgbWF5IHJldHVybiBhIGNvbS0KICAgICAgICBwbGV0ZSBtYXRjaDsgdGhlIG9wdGlvbnMgZW5hYmxlIHRoZSBwb3NzaWJpbGl0eSBvZiBhIHBhcnRpYWwgbWF0Y2gsIGJ1dAotICAgICAgIGRvIG5vdCByZXF1aXJlIGl0LiBOb3RlIGFsc28gdGhhdCBpZiB5b3UgcmVxdWVzdCBKSVQgIGNvbXBpbGF0aW9uICBvbmx5Ci0gICAgICAgZm9yICBwYXJ0aWFsICBtYXRjaGluZyAoZm9yIGV4YW1wbGUsIC9qaXQ9MikgYnV0IGRvIG5vdCBzZXQgdGhlIHBhcnRpYWwKLSAgICAgICBtb2RpZmllciBvbiBhIHN1YmplY3QgbGluZSwgdGhhdCBtYXRjaCB3aWxsIG5vdCB1c2UgIEpJVCAgY29kZSAgYmVjYXVzZQorICAgICAgIGRvICBub3QgIHJlcXVpcmUgaXQuIE5vdGUgYWxzbyB0aGF0IGlmIHlvdSByZXF1ZXN0IEpJVCBjb21waWxhdGlvbiBvbmx5CisgICAgICAgZm9yIHBhcnRpYWwgbWF0Y2hpbmcgKGZvciBleGFtcGxlLCAvaml0PTIpIGJ1dCBkbyBub3Qgc2V0ICB0aGUgIHBhcnRpYWwKKyAgICAgICBtb2RpZmllciAgb24gIGEgIHN1YmplY3QgbGluZSwgdGhhdCBtYXRjaCB3aWxsIG5vdCB1c2UgSklUIGNvZGUgYmVjYXVzZQogICAgICAgIG5vbmUgd2FzIGNvbXBpbGVkIGZvciBub24tcGFydGlhbCBtYXRjaGluZy4KIAotICAgICAgIElmICBKSVQgY29tcGlsYXRpb24gaXMgc3VjY2Vzc2Z1bCwgdGhlIGNvbXBpbGVkIEpJVCBjb2RlIHdpbGwgYXV0b21hdGktCi0gICAgICAgY2FsbHkgYmUgdXNlZCB3aGVuIGFuIGFwcHJvcHJpYXRlIHR5cGUgb2YgbWF0Y2ggIGlzICBydW4sICBleGNlcHQgIHdoZW4KLSAgICAgICBpbmNvbXBhdGlibGUgIHJ1bi10aW1lIG9wdGlvbnMgYXJlIHNwZWNpZmllZC4gRm9yIG1vcmUgZGV0YWlscywgc2VlIHRoZQotICAgICAgIHBjcmUyaml0IGRvY3VtZW50YXRpb24uIFNlZSBhbHNvIHRoZSBqaXRzdGFjayBtb2RpZmllciBiZWxvdyBmb3IgYSAgd2F5CisgICAgICAgSWYgSklUIGNvbXBpbGF0aW9uIGlzIHN1Y2Nlc3NmdWwsIHRoZSBjb21waWxlZCBKSVQgY29kZSB3aWxsICBhdXRvbWF0aS0KKyAgICAgICBjYWxseSAgYmUgIHVzZWQgIHdoZW4gIGFuIGFwcHJvcHJpYXRlIHR5cGUgb2YgbWF0Y2ggaXMgcnVuLCBleGNlcHQgd2hlbgorICAgICAgIGluY29tcGF0aWJsZSBydW4tdGltZSBvcHRpb25zIGFyZSBzcGVjaWZpZWQuIEZvciBtb3JlIGRldGFpbHMsIHNlZSAgdGhlCisgICAgICAgcGNyZTJqaXQgIGRvY3VtZW50YXRpb24uIFNlZSBhbHNvIHRoZSBqaXRzdGFjayBtb2RpZmllciBiZWxvdyBmb3IgYSB3YXkKICAgICAgICBvZiBzZXR0aW5nIHRoZSBzaXplIG9mIHRoZSBKSVQgc3RhY2suCiAKLSAgICAgICBJZiAgdGhlICBqaXRmYXN0ICBtb2RpZmllciBpcyBzcGVjaWZpZWQsIG1hdGNoaW5nIGlzIGRvbmUgdXNpbmcgdGhlIEpJVAotICAgICAgICJmYXN0IHBhdGgiIGludGVyZmFjZSwgcGNyZTJfaml0X21hdGNoKCksIHdoaWNoIHNraXBzIHNvbWUgb2YgdGhlICBzYW4tCi0gICAgICAgaXR5ICBjaGVja3MgdGhhdCBhcmUgZG9uZSBieSBwY3JlMl9tYXRjaCgpLCBhbmQgb2YgY291cnNlIGRvZXMgbm90IHdvcmsKLSAgICAgICB3aGVuIEpJVCBpcyBub3Qgc3VwcG9ydGVkLiBJZiBqaXRmYXN0IGlzIHNwZWNpZmllZCB3aXRob3V0ICBqaXQsICBqaXQ9NworICAgICAgIElmIHRoZSBqaXRmYXN0IG1vZGlmaWVyIGlzIHNwZWNpZmllZCwgbWF0Y2hpbmcgaXMgZG9uZSAgdXNpbmcgIHRoZSAgSklUCisgICAgICAgImZhc3QgIHBhdGgiIGludGVyZmFjZSwgcGNyZTJfaml0X21hdGNoKCksIHdoaWNoIHNraXBzIHNvbWUgb2YgdGhlIHNhbi0KKyAgICAgICBpdHkgY2hlY2tzIHRoYXQgYXJlIGRvbmUgYnkgcGNyZTJfbWF0Y2goKSwgYW5kIG9mIGNvdXJzZSBkb2VzIG5vdCAgd29yaworICAgICAgIHdoZW4gIEpJVCAgaXMgbm90IHN1cHBvcnRlZC4gSWYgaml0ZmFzdCBpcyBzcGVjaWZpZWQgd2l0aG91dCBqaXQsIGppdD03CiAgICAgICAgaXMgYXNzdW1lZC4KIAotICAgICAgIElmICB0aGUgaml0dmVyaWZ5IG1vZGlmaWVyIGlzIHNwZWNpZmllZCwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbXBpbGVkCi0gICAgICAgcGF0dGVybiBzaG93cyB3aGV0aGVyIEpJVCBjb21waWxhdGlvbiB3YXMgb3IgIHdhcyAgbm90ICBzdWNjZXNzZnVsLiAgSWYKLSAgICAgICBqaXR2ZXJpZnkgIGlzICBzcGVjaWZpZWQgd2l0aG91dCBqaXQsIGppdD03IGlzIGFzc3VtZWQuIElmIEpJVCBjb21waWxhLQotICAgICAgIHRpb24gaXMgc3VjY2Vzc2Z1bCB3aGVuIGppdHZlcmlmeSBpcyBzZXQsIHRoZSB0ZXh0ICIoSklUKSIgaXMgYWRkZWQgIHRvCisgICAgICAgSWYgdGhlIGppdHZlcmlmeSBtb2RpZmllciBpcyBzcGVjaWZpZWQsIGluZm9ybWF0aW9uIGFib3V0IHRoZSAgY29tcGlsZWQKKyAgICAgICBwYXR0ZXJuICBzaG93cyAgd2hldGhlciAgSklUICBjb21waWxhdGlvbiB3YXMgb3Igd2FzIG5vdCBzdWNjZXNzZnVsLiBJZgorICAgICAgIGppdHZlcmlmeSBpcyBzcGVjaWZpZWQgd2l0aG91dCBqaXQsIGppdD03IGlzIGFzc3VtZWQuIElmICBKSVQgIGNvbXBpbGEtCisgICAgICAgdGlvbiAgaXMgc3VjY2Vzc2Z1bCB3aGVuIGppdHZlcmlmeSBpcyBzZXQsIHRoZSB0ZXh0ICIoSklUKSIgaXMgYWRkZWQgdG8KICAgICAgICB0aGUgZmlyc3Qgb3V0cHV0IGxpbmUgYWZ0ZXIgYSBtYXRjaCBvciBub24gbWF0Y2ggd2hlbiBKSVQtY29tcGlsZWQgY29kZQogICAgICAgIHdhcyBhY3R1YWxseSB1c2VkIGluIHRoZSBtYXRjaC4KIApAQCAtNjk1LDE4ICs3MTYsMTggQEAKICAgICAgICAgIC9wYXR0ZXJuL2xvY2FsZT1mcl9GUgogCiAgICAgICAgVGhlIGdpdmVuIGxvY2FsZSBpcyBzZXQsIHBjcmUyX21ha2V0YWJsZXMoKSBpcyBjYWxsZWQgdG8gYnVpbGQgYSBzZXQgb2YKLSAgICAgICBjaGFyYWN0ZXIgIHRhYmxlcyBmb3IgdGhlIGxvY2FsZSwgYW5kIHRoaXMgaXMgdGhlbiBwYXNzZWQgdG8gcGNyZTJfY29tLQotICAgICAgIHBpbGUoKSB3aGVuIGNvbXBpbGluZyB0aGUgcmVndWxhciBleHByZXNzaW9uLiBUaGUgc2FtZSB0YWJsZXMgYXJlICB1c2VkCisgICAgICAgY2hhcmFjdGVyIHRhYmxlcyBmb3IgdGhlIGxvY2FsZSwgYW5kIHRoaXMgaXMgdGhlbiBwYXNzZWQgdG8gIHBjcmUyX2NvbS0KKyAgICAgICBwaWxlKCkgIHdoZW4gY29tcGlsaW5nIHRoZSByZWd1bGFyIGV4cHJlc3Npb24uIFRoZSBzYW1lIHRhYmxlcyBhcmUgdXNlZAogICAgICAgIHdoZW4gbWF0Y2hpbmcgdGhlIGZvbGxvd2luZyBzdWJqZWN0IGxpbmVzLiBUaGUgL2xvY2FsZSBtb2RpZmllciBhcHBsaWVzCiAgICAgICAgb25seSB0byB0aGUgcGF0dGVybiBvbiB3aGljaCBpdCBhcHBlYXJzLCBidXQgY2FuIGJlIGdpdmVuIGluIGEgI3BhdHRlcm4KLSAgICAgICBjb21tYW5kICBpZiBhIGRlZmF1bHQgaXMgbmVlZGVkLiBTZXR0aW5nIGEgbG9jYWxlIGFuZCBhbHRlcm5hdGUgY2hhcmFjLQorICAgICAgIGNvbW1hbmQgaWYgYSBkZWZhdWx0IGlzIG5lZWRlZC4gU2V0dGluZyBhIGxvY2FsZSBhbmQgYWx0ZXJuYXRlICBjaGFyYWMtCiAgICAgICAgdGVyIHRhYmxlcyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLgogCiAgICBTaG93aW5nIHBhdHRlcm4gbWVtb3J5CiAKLSAgICAgICBUaGUgL21lbW9yeSBtb2RpZmllciBjYXVzZXMgdGhlIHNpemUgaW4gYnl0ZXMgb2YgIHRoZSAgbWVtb3J5ICB1c2VkICB0bwotICAgICAgIGhvbGQgIHRoZSBjb21waWxlZCBwYXR0ZXJuIHRvIGJlIG91dHB1dC4gVGhpcyBkb2VzIG5vdCBpbmNsdWRlIHRoZSBzaXplCi0gICAgICAgb2YgdGhlIHBjcmUyX2NvZGUgYmxvY2s7IGl0IGlzIGp1c3QgdGhlIGFjdHVhbCBjb21waWxlZCAgZGF0YS4gIElmICB0aGUKKyAgICAgICBUaGUgIC9tZW1vcnkgIG1vZGlmaWVyICBjYXVzZXMgIHRoZSBzaXplIGluIGJ5dGVzIG9mIHRoZSBtZW1vcnkgdXNlZCB0bworICAgICAgIGhvbGQgdGhlIGNvbXBpbGVkIHBhdHRlcm4gdG8gYmUgb3V0cHV0LiBUaGlzIGRvZXMgbm90IGluY2x1ZGUgdGhlICBzaXplCisgICAgICAgb2YgIHRoZSAgcGNyZTJfY29kZSAgYmxvY2s7IGl0IGlzIGp1c3QgdGhlIGFjdHVhbCBjb21waWxlZCBkYXRhLiBJZiB0aGUKICAgICAgICBwYXR0ZXJuIGlzIHN1YnNlcXVlbnRseSBwYXNzZWQgdG8gdGhlIEpJVCBjb21waWxlciwgdGhlIHNpemUgb2YgdGhlIEpJVAogICAgICAgIGNvbXBpbGVkIGNvZGUgaXMgYWxzbyBvdXRwdXQuIEhlcmUgaXMgYW4gZXhhbXBsZToKIApAQCAtNzE3LDMxICs3MzgsMzEgQEAKIAogICAgTGltaXRpbmcgbmVzdGVkIHBhcmVudGhlc2VzCiAKLSAgICAgICBUaGUgcGFyZW5zX25lc3RfbGltaXQgbW9kaWZpZXIgc2V0cyBhIGxpbWl0ICBvbiAgdGhlICBkZXB0aCAgb2YgIG5lc3RlZAotICAgICAgIHBhcmVudGhlc2VzICBpbiAgYSAgcGF0dGVybi4gIEJyZWFjaGluZyAgdGhlIGxpbWl0IGNhdXNlcyBhIGNvbXBpbGF0aW9uCi0gICAgICAgZXJyb3IuICBUaGUgZGVmYXVsdCBmb3IgdGhlIGxpYnJhcnkgaXMgc2V0IHdoZW4gIFBDUkUyICBpcyAgYnVpbHQsICBidXQKLSAgICAgICBwY3JlMnRlc3QgIHNldHMgIGl0cyAgb3duIGRlZmF1bHQgb2YgMjIwLCB3aGljaCBpcyByZXF1aXJlZCBmb3IgcnVubmluZworICAgICAgIFRoZSAgcGFyZW5zX25lc3RfbGltaXQgIG1vZGlmaWVyICBzZXRzICBhICBsaW1pdCBvbiB0aGUgZGVwdGggb2YgbmVzdGVkCisgICAgICAgcGFyZW50aGVzZXMgaW4gYSBwYXR0ZXJuLiBCcmVhY2hpbmcgIHRoZSAgbGltaXQgIGNhdXNlcyAgYSAgY29tcGlsYXRpb24KKyAgICAgICBlcnJvci4gICBUaGUgIGRlZmF1bHQgIGZvciAgdGhlIGxpYnJhcnkgaXMgc2V0IHdoZW4gUENSRTIgaXMgYnVpbHQsIGJ1dAorICAgICAgIHBjcmUydGVzdCBzZXRzIGl0cyBvd24gZGVmYXVsdCBvZiAyMjAsIHdoaWNoIGlzICByZXF1aXJlZCAgZm9yICBydW5uaW5nCiAgICAgICAgdGhlIHN0YW5kYXJkIHRlc3Qgc3VpdGUuCiAKICAgIExpbWl0aW5nIHRoZSBwYXR0ZXJuIGxlbmd0aAogCi0gICAgICAgVGhlIG1heF9wYXR0ZXJuX2xlbmd0aCBtb2RpZmllciBzZXRzIGEgbGltaXQsIGluICBjb2RlICB1bml0cywgIHRvICB0aGUKKyAgICAgICBUaGUgIG1heF9wYXR0ZXJuX2xlbmd0aCAgbW9kaWZpZXIgIHNldHMgIGEgbGltaXQsIGluIGNvZGUgdW5pdHMsIHRvIHRoZQogICAgICAgIGxlbmd0aCBvZiBwYXR0ZXJuIHRoYXQgcGNyZTJfY29tcGlsZSgpIHdpbGwgYWNjZXB0LiBCcmVhY2hpbmcgdGhlIGxpbWl0Ci0gICAgICAgY2F1c2VzIGEgY29tcGlsYXRpb24gIGVycm9yLiAgVGhlICBkZWZhdWx0ICBpcyAgdGhlICBsYXJnZXN0ICBudW1iZXIgIGEKKyAgICAgICBjYXVzZXMgIGEgIGNvbXBpbGF0aW9uICBlcnJvci4gIFRoZSAgZGVmYXVsdCAgaXMgIHRoZSAgbGFyZ2VzdCBudW1iZXIgYQogICAgICAgIFBDUkUyX1NJWkUgdmFyaWFibGUgY2FuIGhvbGQgKGVzc2VudGlhbGx5IHVubGltaXRlZCkuCiAKICAgIFVzaW5nIHRoZSBQT1NJWCB3cmFwcGVyIEFQSQogCi0gICAgICAgVGhlICAvcG9zaXggbW9kaWZpZXIgY2F1c2VzIHBjcmUydGVzdCB0byBjYWxsIFBDUkUyIHZpYSB0aGUgUE9TSVggd3JhcC0KLSAgICAgICBwZXIgQVBJIHJhdGhlciB0aGFuIGl0cyAgbmF0aXZlICBBUEkuICBUaGlzICBzdXBwb3J0cyAgb25seSAgdGhlICA4LWJpdAotICAgICAgIGxpYnJhcnkuICAgTm90ZSAgdGhhdCAgaXQgIGRvZXMgbm90IGltcGx5IFBPU0lYIG1hdGNoaW5nIHNlbWFudGljczsgZm9yCi0gICAgICAgbW9yZSBkZXRhaWwgc2VlIHRoZSBwY3JlMnBvc2l4IGRvY3VtZW50YXRpb24uIFdoZW4gIHRoZSAgUE9TSVggIEFQSSAgaXMKLSAgICAgICBiZWluZyAgdXNlZCwgIHRoZSAgZm9sbG93aW5nIHBhdHRlcm4gbW9kaWZpZXJzIHNldCBvcHRpb25zIGZvciB0aGUgcmVnLQotICAgICAgIGNvbXAoKSBmdW5jdGlvbjoKKyAgICAgICBUaGUgL3Bvc2l4IGFuZCBwb3NpeF9ub3N1YiBtb2RpZmllcnMgY2F1c2UgcGNyZTJ0ZXN0IHRvIGNhbGwgUENSRTIgIHZpYQorICAgICAgIHRoZSAgUE9TSVggIHdyYXBwZXIgQVBJIHJhdGhlciB0aGFuIGl0cyBuYXRpdmUgQVBJLiBXaGVuIHBvc2l4X25vc3ViIGlzCisgICAgICAgdXNlZCwgdGhlIFBPU0lYIG9wdGlvbiBSRUdfTk9TVUIgaXMgIHBhc3NlZCAgdG8gIHJlZ2NvbXAoKS4gIFRoZSAgUE9TSVgKKyAgICAgICB3cmFwcGVyICBzdXBwb3J0cyAgb25seSAgdGhlIDgtYml0IGxpYnJhcnkuIE5vdGUgdGhhdCBpdCBkb2VzIG5vdCBpbXBseQorICAgICAgIFBPU0lYIG1hdGNoaW5nIHNlbWFudGljczsgZm9yIG1vcmUgZGV0YWlsIHNlZSB0aGUgcGNyZTJwb3NpeCBkb2N1bWVudGEtCisgICAgICAgdGlvbi4gIFRoZSAgZm9sbG93aW5nICBwYXR0ZXJuICBtb2RpZmllcnMgc2V0IG9wdGlvbnMgZm9yIHRoZSByZWdjb21wKCkKKyAgICAgICBmdW5jdGlvbjoKIAogICAgICAgICAgY2FzZWxlc3MgICAgICAgICAgIFJFR19JQ0FTRQogICAgICAgICAgbXVsdGlsaW5lICAgICAgICAgIFJFR19ORVdMSU5FCi0gICAgICAgICBub19hdXRvX2NhcHR1cmUgICAgUkVHX05PU1VCCiAgICAgICAgICBkb3RhbGwgICAgICAgICAgICAgUkVHX0RPVEFMTCAgICAgKQogICAgICAgICAgdW5ncmVlZHkgICAgICAgICAgIFJFR19VTkdSRUVEWSAgICkgVGhlc2Ugb3B0aW9ucyBhcmUgbm90IHBhcnQgb2YKICAgICAgICAgIHVjcCAgICAgICAgICAgICAgICBSRUdfVUNQICAgICAgICApICAgdGhlIFBPU0lYIHN0YW5kYXJkCkBAIC03NTgsMjMgKzc3OSwyNCBAQAogICAgICAgIGJlZW4gc2V0LCBhIGxhcmdlIGJ1ZmZlciBpcyB1c2VkLgogCiAgICAgICAgVGhlIGFmdGVydGV4dCBhbmQgYWxsYWZ0ZXJ0ZXh0ICBzdWJqZWN0ICBtb2RpZmllcnMgIHdvcmsgIGFzICBkZXNjcmliZWQKLSAgICAgICBiZWxvdy4gQWxsIG90aGVyIG1vZGlmaWVycyBjYXVzZSBhbiBlcnJvci4KKyAgICAgICBiZWxvdy4gIEFsbCBvdGhlciBtb2RpZmllcnMgYXJlIGVpdGhlciBpZ25vcmVkLCB3aXRoIGEgd2FybmluZyBtZXNzYWdlLAorICAgICAgIG9yIGNhdXNlIGFuIGVycm9yLgogCiAgICBUZXN0aW5nIHRoZSBzdGFjayBndWFyZCBmZWF0dXJlCiAKLSAgICAgICBUaGUgIC9zdGFja2d1YXJkICBtb2RpZmllciAgaXMgIHVzZWQgIHRvIHRlc3QgdGhlIHVzZSBvZiBwY3JlMl9zZXRfY29tLQotICAgICAgIHBpbGVfcmVjdXJzaW9uX2d1YXJkKCksIGEgZnVuY3Rpb24gdGhhdCBpcyAgcHJvdmlkZWQgIHRvICBlbmFibGUgIHN0YWNrCi0gICAgICAgYXZhaWxhYmlsaXR5ICB0byAgYmUgY2hlY2tlZCBkdXJpbmcgY29tcGlsYXRpb24gKHNlZSB0aGUgcGNyZTJhcGkgZG9jdS0KLSAgICAgICBtZW50YXRpb24gZm9yIGRldGFpbHMpLiBJZiB0aGUgbnVtYmVyICBzcGVjaWZpZWQgIGJ5ICB0aGUgIG1vZGlmaWVyICBpcworICAgICAgIFRoZSAvc3RhY2tndWFyZCBtb2RpZmllciBpcyB1c2VkIHRvICB0ZXN0ICB0aGUgIHVzZSAgb2YgIHBjcmUyX3NldF9jb20tCisgICAgICAgcGlsZV9yZWN1cnNpb25fZ3VhcmQoKSwgIGEgIGZ1bmN0aW9uICB0aGF0ICBpcyBwcm92aWRlZCB0byBlbmFibGUgc3RhY2sKKyAgICAgICBhdmFpbGFiaWxpdHkgdG8gYmUgY2hlY2tlZCBkdXJpbmcgY29tcGlsYXRpb24gKHNlZSB0aGUgIHBjcmUyYXBpICBkb2N1LQorICAgICAgIG1lbnRhdGlvbiAgZm9yICBkZXRhaWxzKS4gIElmICB0aGUgIG51bWJlciBzcGVjaWZpZWQgYnkgdGhlIG1vZGlmaWVyIGlzCiAgICAgICAgZ3JlYXRlciB0aGFuIHplcm8sIHBjcmUyX3NldF9jb21waWxlX3JlY3Vyc2lvbl9ndWFyZCgpIGlzIGNhbGxlZCB0byBzZXQKLSAgICAgICB1cCBjYWxsYmFjayBmcm9tIHBjcmUyX2NvbXBpbGUoKSB0byBhIGxvY2FsIGZ1bmN0aW9uLiBUaGUgIGFyZ3VtZW50ICBpdAotICAgICAgIHJlY2VpdmVzICBpcyAgdGhlIGN1cnJlbnQgbmVzdGluZyBwYXJlbnRoZXNpcyBkZXB0aDsgaWYgdGhpcyBpcyBncmVhdGVyCisgICAgICAgdXAgIGNhbGxiYWNrICBmcm9tIHBjcmUyX2NvbXBpbGUoKSB0byBhIGxvY2FsIGZ1bmN0aW9uLiBUaGUgYXJndW1lbnQgaXQKKyAgICAgICByZWNlaXZlcyBpcyB0aGUgY3VycmVudCBuZXN0aW5nIHBhcmVudGhlc2lzIGRlcHRoOyBpZiB0aGlzICBpcyAgZ3JlYXRlcgogICAgICAgIHRoYW4gdGhlIHZhbHVlIGdpdmVuIGJ5IHRoZSBtb2RpZmllciwgbm9uLXplcm8gaXMgcmV0dXJuZWQsIGNhdXNpbmcgdGhlCiAgICAgICAgY29tcGlsYXRpb24gdG8gYmUgYWJvcnRlZC4KIAogICAgVXNpbmcgYWx0ZXJuYXRpdmUgY2hhcmFjdGVyIHRhYmxlcwogCi0gICAgICAgVGhlICB2YWx1ZSBzcGVjaWZpZWQgZm9yIHRoZSAvdGFibGVzIG1vZGlmaWVyIG11c3QgYmUgb25lIG9mIHRoZSBkaWdpdHMKKyAgICAgICBUaGUgdmFsdWUgc3BlY2lmaWVkIGZvciB0aGUgL3RhYmxlcyBtb2RpZmllciBtdXN0IGJlIG9uZSBvZiB0aGUgIGRpZ2l0cwogICAgICAgIDAsIDEsIG9yIDIuIEl0IGNhdXNlcyBhIHNwZWNpZmljIHNldCBvZiBidWlsdC1pbiBjaGFyYWN0ZXIgdGFibGVzIHRvIGJlCiAgICAgICAgcGFzc2VkIHRvIHBjcmUyX2NvbXBpbGUoKS4gVGhpcyBpcyB1c2VkIGluIHRoZSBQQ1JFMiB0ZXN0cyB0byBjaGVjayBiZS0KICAgICAgICBoYXZpb3VyIHdpdGggZGlmZmVyZW50IGNoYXJhY3RlciB0YWJsZXMuIFRoZSBkaWdpdCBzcGVjaWZpZXMgdGhlIHRhYmxlcwpAQCAtNzg1LDE1ICs4MDcsMTUgQEAKICAgICAgICAgICAgICAgIHBjcmUyX2NoYXJ0YWJsZXMuYy5kaXN0CiAgICAgICAgICAyICAgYSBzZXQgb2YgdGFibGVzIGRlZmluaW5nIElTTyA4ODU5IGNoYXJhY3RlcnMKIAotICAgICAgIEluICB0YWJsZSAyLCBzb21lIGNoYXJhY3RlcnMgd2hvc2UgY29kZXMgYXJlIGdyZWF0ZXIgdGhhbiAxMjggYXJlIGlkZW4tCi0gICAgICAgdGlmaWVkIGFzIGxldHRlcnMsIGRpZ2l0cywgc3BhY2VzLCAgZXRjLiAgU2V0dGluZyAgYWx0ZXJuYXRlICBjaGFyYWN0ZXIKKyAgICAgICBJbiB0YWJsZSAyLCBzb21lIGNoYXJhY3RlcnMgd2hvc2UgY29kZXMgYXJlIGdyZWF0ZXIgdGhhbiAxMjggYXJlICBpZGVuLQorICAgICAgIHRpZmllZCAgYXMgIGxldHRlcnMsICBkaWdpdHMsICBzcGFjZXMsIGV0Yy4gU2V0dGluZyBhbHRlcm5hdGUgY2hhcmFjdGVyCiAgICAgICAgdGFibGVzIGFuZCBhIGxvY2FsZSBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLgogCiAgICBTZXR0aW5nIGNlcnRhaW4gbWF0Y2ggY29udHJvbHMKIAogICAgICAgIFRoZSBmb2xsb3dpbmcgbW9kaWZpZXJzIGFyZSByZWFsbHkgc3ViamVjdCBtb2RpZmllcnMsIGFuZCBhcmUgZGVzY3JpYmVkCi0gICAgICAgYmVsb3cuICBIb3dldmVyLCB0aGV5IG1heSBiZSBpbmNsdWRlZCBpbiBhIHBhdHRlcm4ncyBtb2RpZmllciBsaXN0LCAgaW4KLSAgICAgICB3aGljaCAgY2FzZSAgdGhleSAgYXJlICBhcHBsaWVkIHRvIGV2ZXJ5IHN1YmplY3QgbGluZSB0aGF0IGlzIHByb2Nlc3NlZAorICAgICAgIGJlbG93LiAgIEhvd2V2ZXIsIHRoZXkgbWF5IGJlIGluY2x1ZGVkIGluIGEgcGF0dGVybidzIG1vZGlmaWVyIGxpc3QsIGluCisgICAgICAgd2hpY2ggY2FzZSB0aGV5IGFyZSBhcHBsaWVkIHRvIGV2ZXJ5IHN1YmplY3QgIGxpbmUgIHRoYXQgIGlzICBwcm9jZXNzZWQKICAgICAgICB3aXRoIHRoYXQgcGF0dGVybi4gVGhleSBtYXkgbm90IGFwcGVhciBpbiAjcGF0dGVybiBjb21tYW5kcy4gVGhlc2UgbW9kLQogICAgICAgIGlmaWVycyBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxhdGlvbiBwcm9jZXNzLgogCkBAIC04MTAsMjEgKzgzMiwyNSBAQAogICAgICAgICAgICAgIHN1YnN0aXR1dGVfdW5rbm93bl91bnNldCAgIHVzZSBQQ1JFMl9TVUJTVElUVVRFX1VOS05PV05fVU5TRVQKICAgICAgICAgICAgICBzdWJzdGl0dXRlX3Vuc2V0X2VtcHR5ICAgICB1c2UgUENSRTJfU1VCU1RJVFVURV9VTlNFVF9FTVBUWQogCi0gICAgICAgVGhlc2UgIG1vZGlmaWVycyBtYXkgbm90IGFwcGVhciBpbiBhICNwYXR0ZXJuIGNvbW1hbmQuIElmIHlvdSB3YW50IHRoZW0KKyAgICAgICBUaGVzZSBtb2RpZmllcnMgbWF5IG5vdCBhcHBlYXIgaW4gYSAjcGF0dGVybiBjb21tYW5kLiBJZiB5b3Ugd2FudCAgdGhlbQogICAgICAgIGFzIGRlZmF1bHRzLCBzZXQgdGhlbSBpbiBhICNzdWJqZWN0IGNvbW1hbmQuCiAKICAgIFNhdmluZyBhIGNvbXBpbGVkIHBhdHRlcm4KIAotICAgICAgIFdoZW4gYSBwYXR0ZXJuIHdpdGggdGhlIHB1c2ggbW9kaWZpZXIgaXMgc3VjY2Vzc2Z1bGx5IGNvbXBpbGVkLCAgaXQgIGlzCi0gICAgICAgcHVzaGVkICBvbnRvICBhICBzdGFjayAgb2YgY29tcGlsZWQgcGF0dGVybnMsIGFuZCBwY3JlMnRlc3QgZXhwZWN0cyB0aGUKLSAgICAgICBuZXh0IGxpbmUgdG8gY29udGFpbiBhIG5ldyBwYXR0ZXJuIChvciBhIGNvbW1hbmQpIGluc3RlYWQgb2YgYSAgc3ViamVjdAorICAgICAgIFdoZW4gIGEgIHBhdHRlcm4gd2l0aCB0aGUgcHVzaCBtb2RpZmllciBpcyBzdWNjZXNzZnVsbHkgY29tcGlsZWQsIGl0IGlzCisgICAgICAgcHVzaGVkIG9udG8gYSBzdGFjayBvZiBjb21waWxlZCBwYXR0ZXJucywgIGFuZCAgcGNyZTJ0ZXN0ICBleHBlY3RzICB0aGUKKyAgICAgICBuZXh0ICBsaW5lIHRvIGNvbnRhaW4gYSBuZXcgcGF0dGVybiAob3IgYSBjb21tYW5kKSBpbnN0ZWFkIG9mIGEgc3ViamVjdAogICAgICAgIGxpbmUuIFRoaXMgZmFjaWxpdHkgaXMgdXNlZCB3aGVuIHNhdmluZyBjb21waWxlZCBwYXR0ZXJucyB0byBhIGZpbGUsIGFzCi0gICAgICAgZGVzY3JpYmVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkICJTYXZpbmcgYW5kIHJlc3RvcmluZyAgY29tcGlsZWQgIHBhdC0KLSAgICAgICB0ZXJucyIgYmVsb3cuICBUaGUgcHVzaCBtb2RpZmllciBpcyBpbmNvbXBhdGlibGUgd2l0aCBjb21waWxhdGlvbiBtb2RpLQotICAgICAgIGZpZXJzIHN1Y2ggYXMgZ2xvYmFsIHRoYXQgYWN0IGF0IG1hdGNoIHRpbWUuIEFueSB0aGF0IGFyZSBzcGVjaWZpZWQgYXJlCi0gICAgICAgaWdub3JlZCwgIHdpdGggIGEgIHdhcm5pbmcgbWVzc2FnZSwgZXhjZXB0IGZvciByZXBsYWNlLCB3aGljaCBjYXVzZXMgYW4KLSAgICAgICBlcnJvci4gTm90ZSB0aGF0LCBqaXR2ZXJpZnksIHdoaWNoIGlzIGFsbG93ZWQsIGRvZXMgbm90ICBjYXJyeSAgdGhyb3VnaAotICAgICAgIHRvIGFueSBzdWJzZXF1ZW50IG1hdGNoaW5nIHRoYXQgdXNlcyB0aGlzIHBhdHRlcm4uCisgICAgICAgZGVzY3JpYmVkICBpbiAgdGhlIHNlY3Rpb24gZW50aXRsZWQgIlNhdmluZyBhbmQgcmVzdG9yaW5nIGNvbXBpbGVkIHBhdC0KKyAgICAgICB0ZXJucyIgYmVsb3cuIElmIHB1c2hjb3B5IGlzIHVzZWQgaW5zdGVhZCBvZiBwdXNoLCBhIGNvcHkgb2YgIHRoZSAgY29tLQorICAgICAgIHBpbGVkICBwYXR0ZXJuICBpcyAgc3RhY2tlZCwgIGxlYXZpbmcgdGhlIG9yaWdpbmFsIGFzIGN1cnJlbnQsIHJlYWR5IHRvCisgICAgICAgbWF0Y2ggdGhlIGZvbGxvd2luZyBpbnB1dCBsaW5lcy4gVGhpcyBwcm92aWRlcyBhICB3YXkgIG9mICB0ZXN0aW5nICB0aGUKKyAgICAgICBwY3JlMl9jb2RlX2NvcHkoKSAgZnVuY3Rpb24uICAgVGhlICBwdXNoICBhbmQgIHB1c2hjb3B5ICAgbW9kaWZpZXJzIGFyZQorICAgICAgIGluY29tcGF0aWJsZSB3aXRoIGNvbXBpbGF0aW9uIG1vZGlmaWVycyBzdWNoICBhcyAgZ2xvYmFsICB0aGF0ICBhY3QgIGF0CisgICAgICAgbWF0Y2ggIHRpbWUuIEFueSB0aGF0IGFyZSBzcGVjaWZpZWQgYXJlIGlnbm9yZWQgKGZvciB0aGUgc3RhY2tlZCBjb3B5KSwKKyAgICAgICB3aXRoIGEgd2FybmluZyBtZXNzYWdlLCBleGNlcHQgZm9yIHJlcGxhY2UsIHdoaWNoIGNhdXNlcyBhbiBlcnJvci4gTm90ZQorICAgICAgIHRoYXQgIGppdHZlcmlmeSwgd2hpY2ggaXMgYWxsb3dlZCwgZG9lcyBub3QgY2FycnkgdGhyb3VnaCB0byBhbnkgc3Vic2UtCisgICAgICAgcXVlbnQgbWF0Y2hpbmcgdGhhdCB1c2VzIGEgc3RhY2tlZCBwYXR0ZXJuLgogCiAKIFNVQkpFQ1QgTU9ESUZJRVJTCkBAIC04MzQsMTIgKzg2MCwxMyBAQAogCiAgICBTZXR0aW5nIG1hdGNoIG9wdGlvbnMKIAotICAgICAgIFRoZSAgIGZvbGxvd2luZyAgIG1vZGlmaWVycyAgIHNldCAgIG9wdGlvbnMgICBmb3IgICBwY3JlMl9tYXRjaCgpICAgIG9yCisgICAgICAgVGhlICAgIGZvbGxvd2luZyAgIG1vZGlmaWVycyAgIHNldCAgIG9wdGlvbnMgICBmb3IgICBwY3JlMl9tYXRjaCgpICAgb3IKICAgICAgICBwY3JlMl9kZmFfbWF0Y2goKS4gU2VlIHBjcmVhcGkgZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlaXIgZWZmZWN0cy4KIAogICAgICAgICAgICAgIGFuY2hvcmVkICAgICAgICAgICAgICAgICAgc2V0IFBDUkUyX0FOQ0hPUkVECiAgICAgICAgICAgICAgZGZhX3Jlc3RhcnQgICAgICAgICAgICAgICBzZXQgUENSRTJfREZBX1JFU1RBUlQKICAgICAgICAgICAgICBkZmFfc2hvcnRlc3QgICAgICAgICAgICAgIHNldCBQQ1JFMl9ERkFfU0hPUlRFU1QKKyAgICAgICAgICAgICBub19qaXQgICAgICAgICAgICAgICAgICAgIHNldCBQQ1JFMl9OT19KSVQKICAgICAgICAgICAgICBub191dGZfY2hlY2sgICAgICAgICAgICAgIHNldCBQQ1JFMl9OT19VVEZfQ0hFQ0sKICAgICAgICAgICAgICBub3Rib2wgICAgICAgICAgICAgICAgICAgIHNldCBQQ1JFMl9OT1RCT0wKICAgICAgICAgICAgICBub3RlbXB0eSAgICAgICAgICAgICAgICAgIHNldCBQQ1JFMl9OT1RFTVBUWQpAQCAtODQ4LDIwICs4NzUsMjAgQEAKICAgICAgICAgICAgICBwYXJ0aWFsX2hhcmQgKG9yIHBoKSAgICAgIHNldCBQQ1JFMl9QQVJUSUFMX0hBUkQKICAgICAgICAgICAgICBwYXJ0aWFsX3NvZnQgKG9yIHBzKSAgICAgIHNldCBQQ1JFMl9QQVJUSUFMX1NPRlQKIAotICAgICAgIFRoZSAgcGFydGlhbCBtYXRjaGluZyBtb2RpZmllcnMgYXJlIHByb3ZpZGVkIHdpdGggYWJicmV2aWF0aW9ucyBiZWNhdXNlCisgICAgICAgVGhlIHBhcnRpYWwgbWF0Y2hpbmcgbW9kaWZpZXJzIGFyZSBwcm92aWRlZCB3aXRoIGFiYnJldmlhdGlvbnMgIGJlY2F1c2UKICAgICAgICB0aGV5IGFwcGVhciBmcmVxdWVudGx5IGluIHRlc3RzLgogCi0gICAgICAgSWYgdGhlIC9wb3NpeCBtb2RpZmllciB3YXMgcHJlc2VudCBvbiB0aGUgcGF0dGVybiwgIGNhdXNpbmcgIHRoZSAgUE9TSVgKKyAgICAgICBJZiAgdGhlICAvcG9zaXggIG1vZGlmaWVyIHdhcyBwcmVzZW50IG9uIHRoZSBwYXR0ZXJuLCBjYXVzaW5nIHRoZSBQT1NJWAogICAgICAgIHdyYXBwZXIgQVBJIHRvIGJlIHVzZWQsIHRoZSBvbmx5IG9wdGlvbi1zZXR0aW5nIG1vZGlmaWVycyB0aGF0IGhhdmUgYW55Ci0gICAgICAgZWZmZWN0ICBhcmUgIG5vdGJvbCwgIG5vdGVtcHR5LCAgIGFuZCAgIG5vdGVvbCwgICBjYXVzaW5nICAgUkVHX05PVEJPTCwKLSAgICAgICBSRUdfTk9URU1QVFksICBhbmQgUkVHX05PVEVPTCwgcmVzcGVjdGl2ZWx5LCB0byBiZSBwYXNzZWQgdG8gcmVnZXhlYygpLgotICAgICAgIEFueSBvdGhlciBtb2RpZmllcnMgY2F1c2UgYW4gZXJyb3IuCisgICAgICAgZWZmZWN0ICAgYXJlICAgbm90Ym9sLCAgIG5vdGVtcHR5LCAgIGFuZCAgbm90ZW9sLCAgY2F1c2luZyAgUkVHX05PVEJPTCwKKyAgICAgICBSRUdfTk9URU1QVFksIGFuZCBSRUdfTk9URU9MLCByZXNwZWN0aXZlbHksIHRvIGJlIHBhc3NlZCB0byAgcmVnZXhlYygpLgorICAgICAgIFRoZSBvdGhlciBtb2RpZmllcnMgYXJlIGlnbm9yZWQsIHdpdGggYSB3YXJuaW5nIG1lc3NhZ2UuCiAKICAgIFNldHRpbmcgbWF0Y2ggY29udHJvbHMKIAotICAgICAgIFRoZSBmb2xsb3dpbmcgbW9kaWZpZXJzIGFmZmVjdCB0aGUgbWF0Y2hpbmcgcHJvY2VzcyAgb3IgIHJlcXVlc3QgIGFkZGktCi0gICAgICAgdGlvbmFsICBpbmZvcm1hdGlvbi4gIFNvbWUgIG9mICB0aGVtIG1heSBhbHNvIGJlIHNwZWNpZmllZCBvbiBhIHBhdHRlcm4KLSAgICAgICBsaW5lIChzZWUgYWJvdmUpLCBpbiB3aGljaCBjYXNlIHRoZXkgYXBwbHkgdG8gZXZlcnkgc3ViamVjdCAgbGluZSAgdGhhdAorICAgICAgIFRoZSAgZm9sbG93aW5nICBtb2RpZmllcnMgIGFmZmVjdCB0aGUgbWF0Y2hpbmcgcHJvY2VzcyBvciByZXF1ZXN0IGFkZGktCisgICAgICAgdGlvbmFsIGluZm9ybWF0aW9uLiBTb21lIG9mIHRoZW0gbWF5IGFsc28gYmUgIHNwZWNpZmllZCAgb24gIGEgIHBhdHRlcm4KKyAgICAgICBsaW5lICAoc2VlICBhYm92ZSksIGluIHdoaWNoIGNhc2UgdGhleSBhcHBseSB0byBldmVyeSBzdWJqZWN0IGxpbmUgdGhhdAogICAgICAgIGlzIG1hdGNoZWQgYWdhaW5zdCB0aGF0IHBhdHRlcm4uCiAKICAgICAgICAgICAgICBhZnRlcnRleHQgICAgICAgICAgICAgICAgICBzaG93IHRleHQgYWZ0ZXIgbWF0Y2gKQEAgLTg5OCw2ICs5MjUsOSBAQAogICAgICAgICAgICAgIHplcm9fdGVybWluYXRlICAgICAgICAgICAgIHBhc3MgdGhlIHN1YmplY3QgYXMgemVyby10ZXJtaW5hdGVkCiAKICAgICAgICBUaGUgZWZmZWN0cyBvZiB0aGVzZSBtb2RpZmllcnMgYXJlIGRlc2NyaWJlZCBpbiB0aGUgZm9sbG93aW5nIHNlY3Rpb25zLgorICAgICAgIFdoZW4gIG1hdGNoaW5nICB2aWEgdGhlIFBPU0lYIHdyYXBwZXIgQVBJLCB0aGUgYWZ0ZXJ0ZXh0LCBhbGxhZnRlcnRleHQsCisgICAgICAgYW5kIG92ZWN0b3Igc3ViamVjdCBtb2RpZmllcnMgd29yayBhcyBkZXNjcmliZWQgYmVsb3cuIEFsbCBvdGhlciAgbW9kaS0KKyAgICAgICBmaWVycyBhcmUgZWl0aGVyIGlnbm9yZWQsIHdpdGggYSB3YXJuaW5nIG1lc3NhZ2UsIG9yIGNhdXNlIGFuIGVycm9yLgogCiAgICBTaG93aW5nIG1vcmUgdGV4dAogCkBAIC05NTEsNyArOTgxLDkgQEAKICAgICAgICB0dXJlZCBwYXJlbnRoZXNlcyBiZSBvdXRwdXQgYWZ0ZXIgYSBtYXRjaC4gQnkgZGVmYXVsdCwgb25seSB0aG9zZSB1cCB0bwogICAgICAgIHRoZSBoaWdoZXN0IG9uZSBhY3R1YWxseSB1c2VkIGluIHRoZSBtYXRjaCBhcmUgb3V0cHV0IChjb3JyZXNwb25kaW5nIHRvCiAgICAgICAgdGhlIHJldHVybiBjb2RlIGZyb20gcGNyZTJfbWF0Y2goKSkuIEdyb3VwcyB0aGF0IGRpZCBub3QgdGFrZSAgcGFydCAgaW4KLSAgICAgICB0aGUgbWF0Y2ggYXJlIG91dHB1dCBhcyAiPHVuc2V0PiIuCisgICAgICAgdGhlICBtYXRjaCAgYXJlICBvdXRwdXQgYXMgIjx1bnNldD4iLiBUaGlzIG1vZGlmaWVyIGlzIG5vdCByZWxldmFudCBmb3IKKyAgICAgICBERkEgbWF0Y2hpbmcgKHdoaWNoIGRvZXMgbm8gY2FwdHVyaW5nKTsgaXQgaXMgaWdub3JlZCwgd2l0aCAgYSAgd2FybmluZworICAgICAgIG1lc3NhZ2UsIGlmIHByZXNlbnQuCiAKICAgIFRlc3RpbmcgY2FsbG91dHMKIApAQCAtMTM2MywxMCArMTM5NSwxMSBAQAogICAgICAgIGF0dGVtcHQgc3RhcnRpbmcgYXQgdGhlIGZvdXJ0aCBjaGFyYWN0ZXIgb2YgdGhlICBzdWJqZWN0ICBzdHJpbmcsICB3aGVuCiAgICAgICAgdGhlICBwb2ludGVyICB3YXMgIGF0ICB0aGUgc2V2ZW50aCBjaGFyYWN0ZXIsIGFuZCB3aGVuIHRoZSBuZXh0IHBhdHRlcm4KICAgICAgICBpdGVtIHdhcyBcZC4gSnVzdCBvbmUgY2lyY3VtZmxleCBpcyBvdXRwdXQgaWYgIHRoZSAgc3RhcnQgIGFuZCAgY3VycmVudAotICAgICAgIHBvc2l0aW9ucyBhcmUgdGhlIHNhbWUuCisgICAgICAgcG9zaXRpb25zICBhcmUgIHRoZSBzYW1lLCBvciBpZiB0aGUgY3VycmVudCBwb3NpdGlvbiBwcmVjZWRlcyB0aGUgc3RhcnQKKyAgICAgICBwb3NpdGlvbiwgd2hpY2ggY2FuIGhhcHBlbiBpZiB0aGUgY2FsbG91dCBpcyBpbiBhIGxvb2tiZWhpbmQgYXNzZXJ0aW9uLgogCiAgICAgICAgQ2FsbG91dHMgbnVtYmVyZWQgMjU1IGFyZSBhc3N1bWVkIHRvIGJlIGF1dG9tYXRpYyBjYWxsb3V0cywgaW5zZXJ0ZWQgYXMKLSAgICAgICBhIHJlc3VsdCBvZiB0aGUgL2F1dG9fY2FsbG91dCBwYXR0ZXJuIG1vZGlmaWVyLiBJbiB0aGlzICBjYXNlLCAgaW5zdGVhZAorICAgICAgIGEgIHJlc3VsdCAgb2YgdGhlIC9hdXRvX2NhbGxvdXQgcGF0dGVybiBtb2RpZmllci4gSW4gdGhpcyBjYXNlLCBpbnN0ZWFkCiAgICAgICAgb2Ygc2hvd2luZyB0aGUgY2FsbG91dCBudW1iZXIsIHRoZSBvZmZzZXQgaW4gdGhlIHBhdHRlcm4sIHByZWNlZGVkIGJ5IGEKICAgICAgICBwbHVzLCBpcyBvdXRwdXQuIEZvciBleGFtcGxlOgogCkBAIC0xMzgwLDcgKzE0MTMsNyBAQAogICAgICAgICAgIDA6IEUqCiAKICAgICAgICBJZiBhIHBhdHRlcm4gY29udGFpbnMgKCpNQVJLKSBpdGVtcywgYW4gYWRkaXRpb25hbCBsaW5lIGlzIG91dHB1dCB3aGVuLQotICAgICAgIGV2ZXIgIGEgIGNoYW5nZSAgb2YgIGxhdGVzdCBtYXJrIGlzIHBhc3NlZCB0byB0aGUgY2FsbG91dCBmdW5jdGlvbi4gRm9yCisgICAgICAgZXZlciBhIGNoYW5nZSBvZiBsYXRlc3QgbWFyayBpcyBwYXNzZWQgdG8gIHRoZSAgY2FsbG91dCAgZnVuY3Rpb24uICBGb3IKICAgICAgICBleGFtcGxlOgogCiAgICAgICAgICAgIHJlPiAvYSgqTUFSSzpYKWJjL2F1dG9fY2FsbG91dApAQCAtMTM5NCwxNyArMTQyNywxNyBAQAogICAgICAgICAgKzEyIF4gIF4KICAgICAgICAgICAwOiBhYmMKIAotICAgICAgIFRoZSBtYXJrIGNoYW5nZXMgYmV0d2VlbiBtYXRjaGluZyAiYSIgYW5kICJiIiwgYnV0IHN0YXlzIHRoZSAgc2FtZSAgZm9yCi0gICAgICAgdGhlICByZXN0ICBvZiAgdGhlIG1hdGNoLCBzbyBub3RoaW5nIG1vcmUgaXMgb3V0cHV0LiBJZiwgYXMgYSByZXN1bHQgb2YKLSAgICAgICBiYWNrdHJhY2tpbmcsIHRoZSBtYXJrIHJldmVydHMgdG8gYmVpbmcgdW5zZXQsIHRoZSAgdGV4dCAgIjx1bnNldD4iICBpcworICAgICAgIFRoZSAgbWFyayAgY2hhbmdlcyBiZXR3ZWVuIG1hdGNoaW5nICJhIiBhbmQgImIiLCBidXQgc3RheXMgdGhlIHNhbWUgZm9yCisgICAgICAgdGhlIHJlc3Qgb2YgdGhlIG1hdGNoLCBzbyBub3RoaW5nIG1vcmUgaXMgb3V0cHV0LiBJZiwgYXMgIGEgIHJlc3VsdCAgb2YKKyAgICAgICBiYWNrdHJhY2tpbmcsICB0aGUgIG1hcmsgIHJldmVydHMgdG8gYmVpbmcgdW5zZXQsIHRoZSB0ZXh0ICI8dW5zZXQ+IiBpcwogICAgICAgIG91dHB1dC4KIAogICAgQ2FsbG91dHMgd2l0aCBzdHJpbmcgYXJndW1lbnRzCiAKICAgICAgICBUaGUgb3V0cHV0IGZvciBhIGNhbGxvdXQgd2l0aCBhIHN0cmluZyBhcmd1bWVudCBpcyBzaW1pbGFyLCBleGNlcHQgdGhhdAotICAgICAgIGluc3RlYWQgb2Ygb3V0cHV0dGluZyBhIGNhbGxvdXQgbnVtYmVyIGJlZm9yZSB0aGUgcG9zaXRpb24gIGluZGljYXRvcnMsCi0gICAgICAgdGhlICBjYWxsb3V0ICBzdHJpbmcgIGFuZCAgaXRzICBvZmZzZXQgaW4gdGhlIHBhdHRlcm4gc3RyaW5nIGFyZSBvdXRwdXQKLSAgICAgICBiZWZvcmUgdGhlIHJlZmxlY3Rpb24gb2YgdGhlIHN1YmplY3Qgc3RyaW5nLCBhbmQgdGhlIHN1YmplY3Qgc3RyaW5nICBpcworICAgICAgIGluc3RlYWQgIG9mIG91dHB1dHRpbmcgYSBjYWxsb3V0IG51bWJlciBiZWZvcmUgdGhlIHBvc2l0aW9uIGluZGljYXRvcnMsCisgICAgICAgdGhlIGNhbGxvdXQgc3RyaW5nIGFuZCBpdHMgb2Zmc2V0IGluICB0aGUgIHBhdHRlcm4gIHN0cmluZyAgYXJlICBvdXRwdXQKKyAgICAgICBiZWZvcmUgIHRoZSByZWZsZWN0aW9uIG9mIHRoZSBzdWJqZWN0IHN0cmluZywgYW5kIHRoZSBzdWJqZWN0IHN0cmluZyBpcwogICAgICAgIHJlZmxlY3RlZCBmb3IgZWFjaCBjYWxsb3V0LiBGb3IgZXhhbXBsZToKIAogICAgICAgICAgICByZT4gL15hYig/QydmaXJzdCcpY2QoP0Mic2Vjb25kIillZi8KQEAgLTE0MjEsNDEgKzE0NTQsNDYgQEAKIE5PTi1QUklOVElORyBDSEFSQUNURVJTCiAKICAgICAgICBXaGVuIHBjcmUydGVzdCBpcyBvdXRwdXR0aW5nIHRleHQgaW4gdGhlIGNvbXBpbGVkIHZlcnNpb24gb2YgYSBwYXR0ZXJuLAotICAgICAgIGJ5dGVzIG90aGVyIHRoYW4gMzItMTI2IGFyZSBhbHdheXMgdHJlYXRlZCBhcyAgbm9uLXByaW50aW5nICBjaGFyYWN0ZXJzCisgICAgICAgYnl0ZXMgIG90aGVyICB0aGFuIDMyLTEyNiBhcmUgYWx3YXlzIHRyZWF0ZWQgYXMgbm9uLXByaW50aW5nIGNoYXJhY3RlcnMKICAgICAgICBhbmQgYXJlIHRoZXJlZm9yZSBzaG93biBhcyBoZXggZXNjYXBlcy4KIAotICAgICAgIFdoZW4gIHBjcmUydGVzdCAgaXMgb3V0cHV0dGluZyB0ZXh0IHRoYXQgaXMgYSBtYXRjaGVkIHBhcnQgb2YgYSBzdWJqZWN0Ci0gICAgICAgc3RyaW5nLCBpdCBiZWhhdmVzIGluIHRoZSBzYW1lIHdheSwgdW5sZXNzIGEgZGlmZmVyZW50IGxvY2FsZSBoYXMgIGJlZW4KLSAgICAgICBzZXQgIGZvciAgdGhlICBwYXR0ZXJuICAodXNpbmcgdGhlIC9sb2NhbGUgbW9kaWZpZXIpLiBJbiB0aGlzIGNhc2UsIHRoZQotICAgICAgIGlzcHJpbnQoKSBmdW5jdGlvbiBpcyB1c2VkIHRvICBkaXN0aW5ndWlzaCAgcHJpbnRpbmcgIGFuZCAgbm9uLXByaW50aW5nCisgICAgICAgV2hlbiBwY3JlMnRlc3QgaXMgb3V0cHV0dGluZyB0ZXh0IHRoYXQgaXMgYSBtYXRjaGVkIHBhcnQgb2YgIGEgIHN1YmplY3QKKyAgICAgICBzdHJpbmcsICBpdCBiZWhhdmVzIGluIHRoZSBzYW1lIHdheSwgdW5sZXNzIGEgZGlmZmVyZW50IGxvY2FsZSBoYXMgYmVlbgorICAgICAgIHNldCBmb3IgdGhlIHBhdHRlcm4gKHVzaW5nIHRoZSAvbG9jYWxlIG1vZGlmaWVyKS4gIEluICB0aGlzICBjYXNlLCAgdGhlCisgICAgICAgaXNwcmludCgpICBmdW5jdGlvbiAgaXMgIHVzZWQgIHRvIGRpc3Rpbmd1aXNoIHByaW50aW5nIGFuZCBub24tcHJpbnRpbmcKICAgICAgICBjaGFyYWN0ZXJzLgogCiAKIFNBVklORyBBTkQgUkVTVE9SSU5HIENPTVBJTEVEIFBBVFRFUk5TCiAKLSAgICAgICBJdCAgaXMgIHBvc3NpYmxlICB0byAgc2F2ZSAgY29tcGlsZWQgcGF0dGVybnMgb24gZGlzYyBvciBlbHNld2hlcmUsIGFuZAorICAgICAgIEl0IGlzIHBvc3NpYmxlIHRvIHNhdmUgY29tcGlsZWQgcGF0dGVybnMgIG9uICBkaXNjICBvciAgZWxzZXdoZXJlLCAgYW5kCiAgICAgICAgcmVsb2FkIHRoZW0gbGF0ZXIsIHN1YmplY3QgdG8gYSBudW1iZXIgb2YgcmVzdHJpY3Rpb25zLiBKSVQgZGF0YSBjYW5ub3QKLSAgICAgICBiZSAgc2F2ZWQuICBUaGUgaG9zdCBvbiB3aGljaCB0aGUgcGF0dGVybnMgYXJlIHJlbG9hZGVkIG11c3QgYmUgcnVubmluZworICAgICAgIGJlIHNhdmVkLiBUaGUgaG9zdCBvbiB3aGljaCB0aGUgcGF0dGVybnMgYXJlIHJlbG9hZGVkIG11c3QgIGJlICBydW5uaW5nCiAgICAgICAgdGhlIHNhbWUgdmVyc2lvbiBvZiBQQ1JFMiwgd2l0aCB0aGUgc2FtZSBjb2RlIHVuaXQgd2lkdGgsIGFuZCBtdXN0IGFsc28KLSAgICAgICBoYXZlICB0aGUgIHNhbWUgIGVuZGlhbm5lc3MsICBwb2ludGVyIHdpZHRoIGFuZCBQQ1JFMl9TSVpFIHR5cGUuIEJlZm9yZQotICAgICAgIGNvbXBpbGVkIHBhdHRlcm5zIGNhbiBiZSBzYXZlZCB0aGV5IG11c3QgYmUgc2VyaWFsaXplZCwgdGhhdCAgaXMsICBjb24tCi0gICAgICAgdmVydGVkICB0byBhIHN0cmVhbSBvZiBieXRlcy4gQSBzaW5nbGUgYnl0ZSBzdHJlYW0gbWF5IGNvbnRhaW4gYW55IG51bS0KLSAgICAgICBiZXIgb2YgY29tcGlsZWQgcGF0dGVybnMsIGJ1dCB0aGV5IG11c3QgIGFsbCAgdXNlICB0aGUgIHNhbWUgIGNoYXJhY3RlcgorICAgICAgIGhhdmUgdGhlIHNhbWUgZW5kaWFubmVzcywgcG9pbnRlciB3aWR0aCAgYW5kICBQQ1JFMl9TSVpFICB0eXBlLiAgQmVmb3JlCisgICAgICAgY29tcGlsZWQgIHBhdHRlcm5zICBjYW4gYmUgc2F2ZWQgdGhleSBtdXN0IGJlIHNlcmlhbGl6ZWQsIHRoYXQgaXMsIGNvbi0KKyAgICAgICB2ZXJ0ZWQgdG8gYSBzdHJlYW0gb2YgYnl0ZXMuIEEgc2luZ2xlIGJ5dGUgc3RyZWFtIG1heSBjb250YWluIGFueSAgbnVtLQorICAgICAgIGJlciAgb2YgIGNvbXBpbGVkICBwYXR0ZXJucywgIGJ1dCAgdGhleSBtdXN0IGFsbCB1c2UgdGhlIHNhbWUgY2hhcmFjdGVyCiAgICAgICAgdGFibGVzLiBBIHNpbmdsZSBjb3B5IG9mIHRoZSB0YWJsZXMgaXMgaW5jbHVkZWQgaW4gdGhlIGJ5dGUgc3RyZWFtIChpdHMKICAgICAgICBzaXplIGlzIDEwODggYnl0ZXMpLgogCi0gICAgICAgVGhlIGZ1bmN0aW9ucyB3aG9zZSBuYW1lcyBiZWdpbiAgd2l0aCAgcGNyZTJfc2VyaWFsaXplXyAgYXJlICB1c2VkICBmb3IKLSAgICAgICBzZXJpYWxpemluZyAgYW5kIGRlLXNlcmlhbGl6aW5nLiBUaGV5IGFyZSBkZXNjcmliZWQgaW4gdGhlIHBjcmUyc2VyaWFsLQorICAgICAgIFRoZSAgZnVuY3Rpb25zICB3aG9zZSAgbmFtZXMgIGJlZ2luICB3aXRoIHBjcmUyX3NlcmlhbGl6ZV8gYXJlIHVzZWQgZm9yCisgICAgICAgc2VyaWFsaXppbmcgYW5kIGRlLXNlcmlhbGl6aW5nLiBUaGV5IGFyZSBkZXNjcmliZWQgaW4gdGhlICBwY3JlMnNlcmlhbC0KICAgICAgICBpemUgIGRvY3VtZW50YXRpb24uICBJbiAgdGhpcyAgc2VjdGlvbiAgd2UgIGRlc2NyaWJlICB0aGUgIGZlYXR1cmVzICBvZgogICAgICAgIHBjcmUydGVzdCB0aGF0IGNhbiBiZSB1c2VkIHRvIHRlc3QgdGhlc2UgZnVuY3Rpb25zLgogCi0gICAgICAgV2hlbiAgYSAgcGF0dGVybiAgd2l0aCAgcHVzaCAgbW9kaWZpZXIgIGlzIHN1Y2Nlc3NmdWxseSBjb21waWxlZCwgaXQgaXMKLSAgICAgICBwdXNoZWQgb250byBhIHN0YWNrIG9mIGNvbXBpbGVkIHBhdHRlcm5zLCAgYW5kICBwY3JlMnRlc3QgIGV4cGVjdHMgIHRoZQotICAgICAgIG5leHQgIGxpbmUgIHRvICBjb250YWluIGEgbmV3IHBhdHRlcm4gKG9yIGNvbW1hbmQpIGluc3RlYWQgb2YgYSBzdWJqZWN0Ci0gICAgICAgbGluZS4gQnkgdGhpcyBtZWFucywgYSBudW1iZXIgb2YgcGF0dGVybnMgY2FuIGJlIGNvbXBpbGVkIGFuZCByZXRhaW5lZC4KLSAgICAgICBUaGUgIHB1c2ggIG1vZGlmaWVyICBpcyAgaW5jb21wYXRpYmxlIHdpdGggcG9zaXgsIGFuZCBjb250cm9sIG1vZGlmaWVycwotICAgICAgIHRoYXQgYWN0IGF0IG1hdGNoIHRpbWUgYXJlIGlnbm9yZWQgKHdpdGggYSBtZXNzYWdlKS4gVGhlIGppdHZlcmlmeSBtb2QtCi0gICAgICAgaWZpZXIgYXBwbGllcyBvbmx5IGF0IGNvbXBpbGUgdGltZS4gVGhlIGNvbW1hbmQKKyAgICAgICBXaGVuIGEgcGF0dGVybiB3aXRoIHB1c2ggIG1vZGlmaWVyICBpcyAgc3VjY2Vzc2Z1bGx5ICBjb21waWxlZCwgIGl0ICBpcworICAgICAgIHB1c2hlZCAgb250byAgYSAgc3RhY2sgIG9mIGNvbXBpbGVkIHBhdHRlcm5zLCBhbmQgcGNyZTJ0ZXN0IGV4cGVjdHMgdGhlCisgICAgICAgbmV4dCBsaW5lIHRvIGNvbnRhaW4gYSBuZXcgcGF0dGVybiAob3IgY29tbWFuZCkgaW5zdGVhZCAgb2YgIGEgIHN1YmplY3QKKyAgICAgICBsaW5lLiAgQnkgY29udHJhc3QsIHRoZSBwdXNoY29weSBtb2RpZmllciBjYXVzZXMgYSBjb3B5IG9mIHRoZSBjb21waWxlZAorICAgICAgIHBhdHRlcm4gdG8gYmUgc3RhY2tlZCwgbGVhdmluZyB0aGUgIG9yaWdpbmFsICBhdmFpbGFibGUgIGZvciAgaW1tZWRpYXRlCisgICAgICAgbWF0Y2hpbmcuICBCeSAgdXNpbmcgIHB1c2ggYW5kL29yIHB1c2hjb3B5LCBhIG51bWJlciBvZiBwYXR0ZXJucyBjYW4gYmUKKyAgICAgICBjb21waWxlZCBhbmQgcmV0YWluZWQuIFRoZXNlIG1vZGlmaWVycyBhcmUgaW5jb21wYXRpYmxlIHdpdGggcG9zaXgsIGFuZAorICAgICAgIGNvbnRyb2wgIG1vZGlmaWVycyAgdGhhdCBhY3QgYXQgbWF0Y2ggdGltZSBhcmUgaWdub3JlZCAod2l0aCBhIG1lc3NhZ2UpCisgICAgICAgZm9yIHRoZSBzdGFja2VkIHBhdHRlcm5zLiBUaGUgaml0dmVyaWZ5IG1vZGlmaWVyIGFwcGxpZXMgb25seSAgYXQgIGNvbS0KKyAgICAgICBwaWxlIHRpbWUuCisKKyAgICAgICBUaGUgY29tbWFuZAogCiAgICAgICAgICAjc2F2ZSA8ZmlsZW5hbWU+CiAKQEAgLTE0NzIsOSArMTUxMCwxMCBAQAogICAgICAgIG1hdGNoZWQgIHdpdGggIHRoZSBwYXR0ZXJuLCB0ZXJtaW5hdGVkIGFzIHVzdWFsIGJ5IGFuIGVtcHR5IGxpbmUgb3IgZW5kCiAgICAgICAgb2YgZmlsZS4gVGhpcyBjb21tYW5kIG1heSBiZSBmb2xsb3dlZCBieSAgYSAgbW9kaWZpZXIgIGxpc3QgIGNvbnRhaW5pbmcKICAgICAgICBvbmx5ICBjb250cm9sICBtb2RpZmllcnMgdGhhdCBhY3QgYWZ0ZXIgYSBwYXR0ZXJuIGhhcyBiZWVuIGNvbXBpbGVkLiBJbgotICAgICAgIHBhcnRpY3VsYXIsIGhleCwgcG9zaXgsIGFuZCBwdXNoIGFyZSBub3QgYWxsb3dlZCwgbm9yIGFyZSAgYW55ICBvcHRpb24tCi0gICAgICAgc2V0dGluZyAgbW9kaWZpZXJzLiAgIFRoZSBKSVQgbW9kaWZpZXJzIGFyZSwgaG93ZXZlciBwZXJtaXR0ZWQuIEhlcmUgaXMKLSAgICAgICBhbiBleGFtcGxlIHRoYXQgc2F2ZXMgYW5kIHJlbG9hZHMgdHdvIHBhdHRlcm5zLgorICAgICAgIHBhcnRpY3VsYXIsICBoZXgsICBwb3NpeCwgIHBvc2l4X25vc3ViLCAgcHVzaCwgIGFuZCAgcHVzaGNvcHkgIGFyZSAgbm90CisgICAgICAgYWxsb3dlZCwgIG5vciBhcmUgYW55IG9wdGlvbi1zZXR0aW5nIG1vZGlmaWVycy4gIFRoZSBKSVQgbW9kaWZpZXJzIGFyZSwKKyAgICAgICBob3dldmVyIHBlcm1pdHRlZC4gSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgc2F2ZXMgYW5kIHJlbG9hZHMgIHR3byAgcGF0LQorICAgICAgIHRlcm5zLgogCiAgICAgICAgICAvYWJjL3B1c2gKICAgICAgICAgIC94eXovcHVzaApAQCAtMTQ4Niw5ICsxNTI1LDEzIEBACiAgICAgICAgICAjcG9wIGppdCxiaW5jb2RlCiAgICAgICAgICBhYmMKIAotICAgICAgIElmIGppdHZlcmlmeSBpcyB1c2VkIHdpdGggI3BvcCwgaXQgZG9lcyBub3QgIGF1dG9tYXRpY2FsbHkgIGltcGx5ICBqaXQsCisgICAgICAgSWYgIGppdHZlcmlmeSAgaXMgIHVzZWQgd2l0aCAjcG9wLCBpdCBkb2VzIG5vdCBhdXRvbWF0aWNhbGx5IGltcGx5IGppdCwKICAgICAgICB3aGljaCBpcyBkaWZmZXJlbnQgYmVoYXZpb3VyIGZyb20gd2hlbiBpdCBpcyB1c2VkIG9uIGEgcGF0dGVybi4KIAorICAgICAgIFRoZSAjcG9wY29weSBjb21tYW5kIGlzIGFuYWxhZ291cyB0byB0aGUgcHVzaGNvcHkgbW9kaWZpZXIgaW4gIHRoYXQgIGl0CisgICAgICAgbWFrZXMgY3VycmVudCBhIGNvcHkgb2YgdGhlIHRvcG1vc3Qgc3RhY2sgcGF0dGVybiwgbGVhdmluZyB0aGUgb3JpZ2luYWwKKyAgICAgICBzdGlsbCBvbiB0aGUgc3RhY2suCisKIAogU0VFIEFMU08KIApAQCAtMTUwNSw1ICsxNTQ4LDUgQEAKIAogUkVWSVNJT04KIAotICAgICAgIExhc3QgdXBkYXRlZDogMTIgRGVjZW1iZXIgMjAxNQotICAgICAgIENvcHlyaWdodCAoYykgMTk5Ny0yMDE1IFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlLgorICAgICAgIExhc3QgdXBkYXRlZDogMDYgSnVseSAyMDE2CisgICAgICAgQ29weXJpZ2h0IChjKSAxOTk3LTIwMTYgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UuCmRpZmYgLS1naXQgYS9kaXN0Mi9kb2MvcGNyZTJ1bmljb2RlLjMgYi9kaXN0Mi9kb2MvcGNyZTJ1bmljb2RlLjMKaW5kZXggNTllMjI2ZS4uMjUzZDRiNiAxMDA2NDQKLS0tIGEvZGlzdDIvZG9jL3BjcmUydW5pY29kZS4zCisrKyBiL2Rpc3QyL2RvYy9wY3JlMnVuaWNvZGUuMwpAQCAtMSw0ICsxLDQgQEAKLS5USCBQQ1JFMlVOSUNPREUgMyAiMTYgT2N0b2JlciAyMDE1IiAiUENSRTIgMTAuMjEiCisuVEggUENSRTJVTklDT0RFIDMgIjAzIEp1bHkgMjAxNiIgIlBDUkUyIDEwLjIyIgogLlNIIE5BTUUKIFBDUkUgLSBQZXJsLWNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9ucyAocmV2aXNlZCBBUEkpCiAuU0ggIlVOSUNPREUgQU5EIFVURiBTVVBQT1JUIgpAQCAtNTcsMTggKzU3LDIxIEBACiBJbiBVVEYgbW9kZXMsIHRoZSBkb3QgbWV0YWNoYXJhY3RlciBtYXRjaGVzIG9uZSBVVEYgY2hhcmFjdGVyIGluc3RlYWQgb2YgYQogc2luZ2xlIGNvZGUgdW5pdC4KIC5QCi1UaGUgZXNjYXBlIHNlcXVlbmNlIFxlQyBjYW4gYmUgdXNlZCB0byBtYXRjaCBhIHNpbmdsZSBjb2RlIHVuaXQsIGluIGEgVVRGIG1vZGUsCitUaGUgZXNjYXBlIHNlcXVlbmNlIFxlQyBjYW4gYmUgdXNlZCB0byBtYXRjaCBhIHNpbmdsZSBjb2RlIHVuaXQgaW4gYSBVVEYgbW9kZSwKIGJ1dCBpdHMgdXNlIGNhbiBsZWFkIHRvIHNvbWUgc3RyYW5nZSBlZmZlY3RzIGJlY2F1c2UgaXQgYnJlYWtzIHVwIG11bHRpLXVuaXQKIGNoYXJhY3RlcnMgKHNlZSB0aGUgZGVzY3JpcHRpb24gb2YgXGVDIGluIHRoZQogLlwiIEhSRUYKIFxmQnBjcmUycGF0dGVyblxmUAogLlwiCi1kb2N1bWVudGF0aW9uKS4gVGhlIHVzZSBvZiBcZUMgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgYWx0ZXJuYXRpdmUgbWF0Y2hpbmcKLWZ1bmN0aW9uIFxmQnBjcmUyX2RmYV9tYXRjaCgpXGZQIHdoZW4gaW4gVVRGIG1vZGUuIEl0cyB1c2UgcHJvdm9rZXMgYQotbWF0Y2gtdGltZSBlcnJvci4gVGhlIEpJVCBvcHRpbWl6YXRpb24gYWxzbyBkb2VzIG5vdCBzdXBwb3J0IFxlQyBpbiBVVEYgbW9kZS4KLUlmIEpJVCBvcHRpbWl6YXRpb24gaXMgcmVxdWVzdGVkIGZvciBhIFVURiBwYXR0ZXJuIHRoYXQgY29udGFpbnMgXGVDLCBpdCB3aWxsCi1ub3Qgc3VjY2VlZCwgYW5kIHNvIHRoZSBtYXRjaGluZyB3aWxsIGJlIGNhcnJpZWQgb3V0IGJ5IHRoZSBub3JtYWwgaW50ZXJwcmV0aXZlCi1mdW5jdGlvbi4KK2RvY3VtZW50YXRpb24pLgorLlAKK1RoZSB1c2Ugb2YgXGVDIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGFsdGVybmF0aXZlIG1hdGNoaW5nIGZ1bmN0aW9uCitcZkJwY3JlMl9kZmFfbWF0Y2goKVxmUCB3aGVuIGluIFVURi04IG9yIFVURi0xNiBtb2RlLCB0aGF0IGlzLCB3aGVuIGEgY2hhcmFjdGVyCittYXkgY29uc2lzdCBvZiBtb3JlIHRoYW4gb25lIGNvZGUgdW5pdC4gVGhlIHVzZSBvZiBcZUMgaW4gdGhlc2UgbW9kZXMgcHJvdm9rZXMKK2EgbWF0Y2gtdGltZSBlcnJvci4gQWxzbywgdGhlIEpJVCBvcHRpbWl6YXRpb24gZG9lcyBub3Qgc3VwcG9ydCBcZUMgaW4gdGhlc2UKK21vZGVzLiBJZiBKSVQgb3B0aW1pemF0aW9uIGlzIHJlcXVlc3RlZCBmb3IgYSBVVEYtOCBvciBVVEYtMTYgcGF0dGVybiB0aGF0Citjb250YWlucyBcZUMsIGl0IHdpbGwgbm90IHN1Y2NlZWQsIGFuZCBzbyB3aGVuIFxmQnBjcmUyX21hdGNoKClcZlAgaXMgY2FsbGVkLAordGhlIG1hdGNoaW5nIHdpbGwgYmUgY2FycmllZCBvdXQgYnkgdGhlIG5vcm1hbCBpbnRlcnByZXRpdmUgZnVuY3Rpb24uCiAuUAogVGhlIGNoYXJhY3RlciBlc2NhcGVzIFxlYiwgXGVCLCBcZWQsIFxlRCwgXGVzLCBcZVMsIFxldywgYW5kIFxlVyBjb3JyZWN0bHkgdGVzdAogY2hhcmFjdGVycyBvZiBhbnkgY29kZSB2YWx1ZSwgYnV0LCBieSBkZWZhdWx0LCB0aGUgY2hhcmFjdGVycyB0aGF0IFBDUkUyCkBAIC0yMzIsOSArMjM1LDkgQEAKIC5zcAogVGhlIGZvbGxvd2luZyBuZWdhdGl2ZSBlcnJvciBjb2RlcyBhcmUgZ2l2ZW4gZm9yIGludmFsaWQgVVRGLTE2IHN0cmluZ3M6CiAuc3AKLSAgUENSRV9VVEYxNl9FUlIxICBNaXNzaW5nIGxvdyBzdXJyb2dhdGUgYXQgZW5kIG9mIHN0cmluZwotICBQQ1JFX1VURjE2X0VSUjIgIEludmFsaWQgbG93IHN1cnJvZ2F0ZSBmb2xsb3dzIGhpZ2ggc3Vycm9nYXRlCi0gIFBDUkVfVVRGMTZfRVJSMyAgSXNvbGF0ZWQgbG93IHN1cnJvZ2F0ZQorICBQQ1JFMl9FUlJPUl9VVEYxNl9FUlIxICBNaXNzaW5nIGxvdyBzdXJyb2dhdGUgYXQgZW5kIG9mIHN0cmluZworICBQQ1JFMl9FUlJPUl9VVEYxNl9FUlIyICBJbnZhbGlkIGxvdyBzdXJyb2dhdGUgZm9sbG93cyBoaWdoIHN1cnJvZ2F0ZQorICBQQ1JFMl9FUlJPUl9VVEYxNl9FUlIzICBJc29sYXRlZCBsb3cgc3Vycm9nYXRlCiAuc3AKIC4KIC4KQEAgLTI0NCw4ICsyNDcsOCBAQAogLnNwCiBUaGUgZm9sbG93aW5nIG5lZ2F0aXZlIGVycm9yIGNvZGVzIGFyZSBnaXZlbiBmb3IgaW52YWxpZCBVVEYtMzIgc3RyaW5nczoKIC5zcAotICBQQ1JFX1VURjMyX0VSUjEgIFN1cnJvZ2F0ZSBjaGFyYWN0ZXIgKHJhbmdlIGZyb20gMHhkODAwIHRvIDB4ZGZmZikKLSAgUENSRV9VVEYzMl9FUlIyICBDb2RlIHBvaW50IGlzIGdyZWF0ZXIgdGhhbiAweDEwZmZmZgorICBQQ1JFMl9FUlJPUl9VVEYzMl9FUlIxICBTdXJyb2dhdGUgY2hhcmFjdGVyICgweGQ4MDAgdG8gMHhkZmZmKQorICBQQ1JFMl9FUlJPUl9VVEYzMl9FUlIyICBDb2RlIHBvaW50IGlzIGdyZWF0ZXIgdGhhbiAweDEwZmZmZgogLnNwCiAuCiAuCkBAIC0yNjMsNiArMjY2LDYgQEAKIC5ycwogLnNwCiAubmYKLUxhc3QgdXBkYXRlZDogMTYgT2N0b2JlciAyMDE1Ci1Db3B5cmlnaHQgKGMpIDE5OTctMjAxNSBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZS4KK0xhc3QgdXBkYXRlZDogMDMgSnVseSAyMDE2CitDb3B5cmlnaHQgKGMpIDE5OTctMjAxNiBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZS4KIC5maQpkaWZmIC0tZ2l0IGEvZGlzdDIvc3JjL2NvbmZpZy5oLmdlbmVyaWMgYi9kaXN0Mi9zcmMvY29uZmlnLmguZ2VuZXJpYwppbmRleCA3NDRmMTk4Li44YTcxYmUwIDEwMDY0NAotLS0gYS9kaXN0Mi9zcmMvY29uZmlnLmguZ2VuZXJpYworKysgYi9kaXN0Mi9zcmMvY29uZmlnLmguZ2VuZXJpYwpAQCAtMTExLDYgKzExMSw5IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy90eXBlcy5oPiBoZWFkZXIgZmlsZS4gKi8KIC8qICN1bmRlZiBIQVZFX1NZU19UWVBFU19IICovCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3dhaXQuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9TWVNfV0FJVF9IICovCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8dW5pc3RkLmg+IGhlYWRlciBmaWxlLiAqLwogLyogI3VuZGVmIEhBVkVfVU5JU1REX0ggKi8KIApAQCAtMjAzLDcgKzIwNiw3IEBACiAjZGVmaW5lIFBBQ0tBR0VfTkFNRSAiUENSRTIiCiAKIC8qIERlZmluZSB0byB0aGUgZnVsbCBuYW1lIGFuZCB2ZXJzaW9uIG9mIHRoaXMgcGFja2FnZS4gKi8KLSNkZWZpbmUgUEFDS0FHRV9TVFJJTkcgIlBDUkUyIDEwLjIxIgorI2RlZmluZSBQQUNLQUdFX1NUUklORyAiUENSRTIgMTAuMjIiCiAKIC8qIERlZmluZSB0byB0aGUgb25lIHN5bWJvbCBzaG9ydCBuYW1lIG9mIHRoaXMgcGFja2FnZS4gKi8KICNkZWZpbmUgUEFDS0FHRV9UQVJOQU1FICJwY3JlMiIKQEAgLTIxMiw3ICsyMTUsNyBAQAogI2RlZmluZSBQQUNLQUdFX1VSTCAiIgogCiAvKiBEZWZpbmUgdG8gdGhlIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLiAqLwotI2RlZmluZSBQQUNLQUdFX1ZFUlNJT04gIjEwLjIxIgorI2RlZmluZSBQQUNLQUdFX1ZFUlNJT04gIjEwLjIyIgogCiAvKiBUaGUgdmFsdWUgb2YgUEFSRU5TX05FU1RfTElNSVQgc3BlY2lmaWVzIHRoZSBtYXhpbXVtIGRlcHRoIG9mIG5lc3RlZAogICAgcGFyZW50aGVzZXMgKG9mIGFueSBraW5kKSBpbiBhIHBhdHRlcm4uIFRoaXMgbGltaXRzIHRoZSBhbW91bnQgb2Ygc3lzdGVtCkBAIC0yNzEsNiArMjc0LDkgQEAKICAgIGlzIGFibGUgdG8gaGFuZGxlIC5neiBmaWxlcy4gKi8KIC8qICN1bmRlZiBTVVBQT1JUX0xJQlogKi8KIAorLyogRGVmaW5lIHRvIGFueSB2YWx1ZSB0byBlbmFibGUgY2FsbG91dCBzY3JpcHQgc3VwcG9ydCBpbiBwY3JlMmdyZXAuICovCisvKiAjdW5kZWYgU1VQUE9SVF9QQ1JFMkdSRVBfQ0FMTE9VVCAqLworCiAvKiBEZWZpbmUgdG8gYW55IHZhbHVlIHRvIGVuYWJsZSBKSVQgc3VwcG9ydCBpbiBwY3JlMmdyZXAuICovCiAvKiAjdW5kZWYgU1VQUE9SVF9QQ1JFMkdSRVBfSklUICovCiAKQEAgLTI5Myw3ICsyOTksNyBAQAogLyogI3VuZGVmIFNVUFBPUlRfVkFMR1JJTkQgKi8KIAogLyogVmVyc2lvbiBudW1iZXIgb2YgcGFja2FnZSAqLwotI2RlZmluZSBWRVJTSU9OICIxMC4yMSIKKyNkZWZpbmUgVkVSU0lPTiAiMTAuMjIiCiAKIC8qIERlZmluZSB0byBlbXB0eSBpZiBgY29uc3QnIGRvZXMgbm90IGNvbmZvcm0gdG8gQU5TSSBDLiAqLwogLyogI3VuZGVmIGNvbnN0ICovCmRpZmYgLS1naXQgYS9kaXN0Mi9zcmMvY29uZmlnLmguaW4gYi9kaXN0Mi9zcmMvY29uZmlnLmguaW4KaW5kZXggZTU1ZDBhMC4uZDQ4MjFhZiAxMDA2NDQKLS0tIGEvZGlzdDIvc3JjL2NvbmZpZy5oLmluCisrKyBiL2Rpc3QyL3NyYy9jb25maWcuaC5pbgpAQCAtMTExLDYgKzExMSw5IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy90eXBlcy5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX1NZU19UWVBFU19ICiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3dhaXQuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfV0FJVF9ICisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8dW5pc3RkLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfVU5JU1REX0gKIApAQCAtMjYyLDYgKzI2NSw5IEBACiAgICBpcyBhYmxlIHRvIGhhbmRsZSAuZ3ogZmlsZXMuICovCiAjdW5kZWYgU1VQUE9SVF9MSUJaCiAKKy8qIERlZmluZSB0byBhbnkgdmFsdWUgdG8gZW5hYmxlIGNhbGxvdXQgc2NyaXB0IHN1cHBvcnQgaW4gcGNyZTJncmVwLiAqLworI3VuZGVmIFNVUFBPUlRfUENSRTJHUkVQX0NBTExPVVQKKwogLyogRGVmaW5lIHRvIGFueSB2YWx1ZSB0byBlbmFibGUgSklUIHN1cHBvcnQgaW4gcGNyZTJncmVwLiAqLwogI3VuZGVmIFNVUFBPUlRfUENSRTJHUkVQX0pJVAogCmRpZmYgLS1naXQgYS9kaXN0Mi9zcmMvcGNyZTIuaC5nZW5lcmljIGIvZGlzdDIvc3JjL3BjcmUyLmguZ2VuZXJpYwppbmRleCA3ZjliYTRmLi4yMGQyMjFiIDEwMDY0NAotLS0gYS9kaXN0Mi9zcmMvcGNyZTIuaC5nZW5lcmljCisrKyBiL2Rpc3QyL3NyYy9wY3JlMi5oLmdlbmVyaWMKQEAgLTQyLDkgKzQyLDkgQEAKIC8qIFRoZSBjdXJyZW50IFBDUkUgdmVyc2lvbiBpbmZvcm1hdGlvbi4gKi8KIAogI2RlZmluZSBQQ1JFMl9NQUpPUiAgICAgICAgICAxMAotI2RlZmluZSBQQ1JFMl9NSU5PUiAgICAgICAgICAyMQorI2RlZmluZSBQQ1JFMl9NSU5PUiAgICAgICAgICAyMgogI2RlZmluZSBQQ1JFMl9QUkVSRUxFQVNFICAgICAKLSNkZWZpbmUgUENSRTJfREFURSAgICAgICAgICAgMjAxNi0wMS0xMgorI2RlZmluZSBQQ1JFMl9EQVRFICAgICAgICAgICAyMDE2LTA3LTI5CiAKIC8qIFdoZW4gYW4gYXBwbGljYXRpb24gbGlua3MgdG8gYSBQQ1JFIERMTCBpbiBXaW5kb3dzLCB0aGUgc3ltYm9scyB0aGF0IGFyZQogaW1wb3J0ZWQgaGF2ZSB0byBiZSBpZGVudGlmaWVkIGFzIHN1Y2guIFdoZW4gYnVpbGRpbmcgUENSRTIsIHRoZSBhcHByb3ByaWF0ZQpAQCAtMTQ2LDcgKzE0Niw4IEBACiAjZGVmaW5lIFBDUkUyX0RGQV9SRVNUQVJUICAgICAgICAgMHgwMDAwMDA0MHUKICNkZWZpbmUgUENSRTJfREZBX1NIT1JURVNUICAgICAgICAweDAwMDAwMDgwdQogCi0vKiBUaGVzZSBhcmUgYWRkaXRpb25hbCBvcHRpb25zIGZvciBwY3JlMl9zdWJzdGl0dXRlKCkuICovCisvKiBUaGVzZSBhcmUgYWRkaXRpb25hbCBvcHRpb25zIGZvciBwY3JlMl9zdWJzdGl0dXRlKCksIHdoaWNoIHBhc3NlcyBhbnkgb3RoZXJzCit0aHJvdWdoIHRvIHBjcmUyX21hdGNoKCkuICovCiAKICNkZWZpbmUgUENSRTJfU1VCU1RJVFVURV9HTE9CQUwgICAgICAgICAgIDB4MDAwMDAxMDB1CiAjZGVmaW5lIFBDUkUyX1NVQlNUSVRVVEVfRVhURU5ERUQgICAgICAgICAweDAwMDAwMjAwdQpAQCAtMTU0LDYgKzE1NSwxMSBAQAogI2RlZmluZSBQQ1JFMl9TVUJTVElUVVRFX1VOS05PV05fVU5TRVQgICAgMHgwMDAwMDgwMHUKICNkZWZpbmUgUENSRTJfU1VCU1RJVFVURV9PVkVSRkxPV19MRU5HVEggIDB4MDAwMDEwMDB1CiAKKy8qIEEgZnVydGhlciBvcHRpb24gZm9yIHBjcmUyX21hdGNoKCksIG5vdCBhbGxvd2VkIGZvciBwY3JlMl9kZmFfbWF0Y2goKSwKK2lnbm9yZWQgZm9yIHBjcmUyX2ppdF9tYXRjaCgpLiAqLworCisjZGVmaW5lIFBDUkUyX05PX0pJVCAgICAgICAgICAgICAgMHgwMDAwMjAwMHUKKwogLyogTmV3bGluZSBhbmQgXFIgc2V0dGluZ3MsIGZvciB1c2UgaW4gY29tcGlsZSBjb250ZXh0cy4gVGhlIG5ld2xpbmUgdmFsdWVzCiBtdXN0IGJlIGtlcHQgaW4gc3RlcCB3aXRoIHZhbHVlcyBzZXQgaW4gY29uZmlnLmggYW5kIGJvdGggc2V0cyBtdXN0IGFsbCBiZQogZ3JlYXRlciB0aGFuIHplcm8uICovCkBAIC0yNDUsNiArMjUxLDcgQEAKICNkZWZpbmUgUENSRTJfRVJST1JfQkFEU1VCU1RJVFVUSU9OICAgKC01OSkKICNkZWZpbmUgUENSRTJfRVJST1JfQkFEU1VCU1BBVFRFUk4gICAgKC02MCkKICNkZWZpbmUgUENSRTJfRVJST1JfVE9PTUFOWVJFUExBQ0UgICAgKC02MSkKKyNkZWZpbmUgUENSRTJfRVJST1JfQkFEU0VSSUFMSVpFRERBVEEgKC02MikKIAogLyogUmVxdWVzdCB0eXBlcyBmb3IgcGNyZTJfcGF0dGVybl9pbmZvKCkgKi8KIApAQCAtNDM2LDcgKzQ0Myw5IEBACiBQQ1JFMl9FWFBfREVDTCBcCiAgIHBjcmUyX2NvZGUgICAgICAgICAgICAqcGNyZTJfY29tcGlsZShQQ1JFMl9TUFRSLCBQQ1JFMl9TSVpFLCB1aW50MzJfdCwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICosIFBDUkUyX1NJWkUgKiwgcGNyZTJfY29tcGlsZV9jb250ZXh0ICopOyBcCi1QQ1JFMl9FWFBfREVDTCB2b2lkICAgICAgcGNyZTJfY29kZV9mcmVlKHBjcmUyX2NvZGUgKik7CitQQ1JFMl9FWFBfREVDTCB2b2lkICAgICAgcGNyZTJfY29kZV9mcmVlKHBjcmUyX2NvZGUgKik7IFwKK1BDUkUyX0VYUF9ERUNMIFwKKyAgcGNyZTJfY29kZSAgICAgICAgICAgICpwY3JlMl9jb2RlX2NvcHkoY29uc3QgcGNyZTJfY29kZSAqKTsKIAogCiAvKiBGdW5jdGlvbnMgdGhhdCBnaXZlIGluZm9ybWF0aW9uIGFib3V0IGEgY29tcGlsZWQgcGF0dGVybi4gKi8KQEAgLTU4NSw2ICs1OTQsNyBAQAogLyogRnVuY3Rpb25zOiB0aGUgY29tcGxldGUgbGlzdCBpbiBhbHBoYWJldGljYWwgb3JkZXIgKi8KIAogI2RlZmluZSBwY3JlMl9jYWxsb3V0X2VudW1lcmF0ZSAgICAgICAgICAgICAgIFBDUkUyX1NVRkZJWChwY3JlMl9jYWxsb3V0X2VudW1lcmF0ZV8pCisjZGVmaW5lIHBjcmUyX2NvZGVfY29weSAgICAgICAgICAgICAgICAgICAgICAgUENSRTJfU1VGRklYKHBjcmUyX2NvZGVfY29weV8pCiAjZGVmaW5lIHBjcmUyX2NvZGVfZnJlZSAgICAgICAgICAgICAgICAgICAgICAgUENSRTJfU1VGRklYKHBjcmUyX2NvZGVfZnJlZV8pCiAjZGVmaW5lIHBjcmUyX2NvbXBpbGUgICAgICAgICAgICAgICAgICAgICAgICAgUENSRTJfU1VGRklYKHBjcmUyX2NvbXBpbGVfKQogI2RlZmluZSBwY3JlMl9jb21waWxlX2NvbnRleHRfY29weSAgICAgICAgICAgIFBDUkUyX1NVRkZJWChwY3JlMl9jb21waWxlX2NvbnRleHRfY29weV8pCmRpZmYgLS1naXQgYS9kaXN0Mi9zcmMvcGNyZTIuaC5pbiBiL2Rpc3QyL3NyYy9wY3JlMi5oLmluCmluZGV4IDQ5ZjE5MDkuLmUxZDk0NGQgMTAwNjQ0Ci0tLSBhL2Rpc3QyL3NyYy9wY3JlMi5oLmluCisrKyBiL2Rpc3QyL3NyYy9wY3JlMi5oLmluCkBAIC0xNDYsNyArMTQ2LDggQEAKICNkZWZpbmUgUENSRTJfREZBX1JFU1RBUlQgICAgICAgICAweDAwMDAwMDQwdQogI2RlZmluZSBQQ1JFMl9ERkFfU0hPUlRFU1QgICAgICAgIDB4MDAwMDAwODB1CiAKLS8qIFRoZXNlIGFyZSBhZGRpdGlvbmFsIG9wdGlvbnMgZm9yIHBjcmUyX3N1YnN0aXR1dGUoKS4gKi8KKy8qIFRoZXNlIGFyZSBhZGRpdGlvbmFsIG9wdGlvbnMgZm9yIHBjcmUyX3N1YnN0aXR1dGUoKSwgd2hpY2ggcGFzc2VzIGFueSBvdGhlcnMKK3Rocm91Z2ggdG8gcGNyZTJfbWF0Y2goKS4gKi8KIAogI2RlZmluZSBQQ1JFMl9TVUJTVElUVVRFX0dMT0JBTCAgICAgICAgICAgMHgwMDAwMDEwMHUKICNkZWZpbmUgUENSRTJfU1VCU1RJVFVURV9FWFRFTkRFRCAgICAgICAgIDB4MDAwMDAyMDB1CkBAIC0xNTQsNiArMTU1LDExIEBACiAjZGVmaW5lIFBDUkUyX1NVQlNUSVRVVEVfVU5LTk9XTl9VTlNFVCAgICAweDAwMDAwODAwdQogI2RlZmluZSBQQ1JFMl9TVUJTVElUVVRFX09WRVJGTE9XX0xFTkdUSCAgMHgwMDAwMTAwMHUKIAorLyogQSBmdXJ0aGVyIG9wdGlvbiBmb3IgcGNyZTJfbWF0Y2goKSwgbm90IGFsbG93ZWQgZm9yIHBjcmUyX2RmYV9tYXRjaCgpLAoraWdub3JlZCBmb3IgcGNyZTJfaml0X21hdGNoKCkuICovCisKKyNkZWZpbmUgUENSRTJfTk9fSklUICAgICAgICAgICAgICAweDAwMDAyMDAwdQorCiAvKiBOZXdsaW5lIGFuZCBcUiBzZXR0aW5ncywgZm9yIHVzZSBpbiBjb21waWxlIGNvbnRleHRzLiBUaGUgbmV3bGluZSB2YWx1ZXMKIG11c3QgYmUga2VwdCBpbiBzdGVwIHdpdGggdmFsdWVzIHNldCBpbiBjb25maWcuaCBhbmQgYm90aCBzZXRzIG11c3QgYWxsIGJlCiBncmVhdGVyIHRoYW4gemVyby4gKi8KQEAgLTI0NSw2ICsyNTEsNyBAQAogI2RlZmluZSBQQ1JFMl9FUlJPUl9CQURTVUJTVElUVVRJT04gICAoLTU5KQogI2RlZmluZSBQQ1JFMl9FUlJPUl9CQURTVUJTUEFUVEVSTiAgICAoLTYwKQogI2RlZmluZSBQQ1JFMl9FUlJPUl9UT09NQU5ZUkVQTEFDRSAgICAoLTYxKQorI2RlZmluZSBQQ1JFMl9FUlJPUl9CQURTRVJJQUxJWkVEREFUQSAoLTYyKQogCiAvKiBSZXF1ZXN0IHR5cGVzIGZvciBwY3JlMl9wYXR0ZXJuX2luZm8oKSAqLwogCkBAIC00MzYsNyArNDQzLDkgQEAKIFBDUkUyX0VYUF9ERUNMIFwKICAgcGNyZTJfY29kZSAgICAgICAgICAgICpwY3JlMl9jb21waWxlKFBDUkUyX1NQVFIsIFBDUkUyX1NJWkUsIHVpbnQzMl90LCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKiwgUENSRTJfU0laRSAqLCBwY3JlMl9jb21waWxlX2NvbnRleHQgKik7IFwKLVBDUkUyX0VYUF9ERUNMIHZvaWQgICAgICBwY3JlMl9jb2RlX2ZyZWUocGNyZTJfY29kZSAqKTsKK1BDUkUyX0VYUF9ERUNMIHZvaWQgICAgICBwY3JlMl9jb2RlX2ZyZWUocGNyZTJfY29kZSAqKTsgXAorUENSRTJfRVhQX0RFQ0wgXAorICBwY3JlMl9jb2RlICAgICAgICAgICAgKnBjcmUyX2NvZGVfY29weShjb25zdCBwY3JlMl9jb2RlICopOwogCiAKIC8qIEZ1bmN0aW9ucyB0aGF0IGdpdmUgaW5mb3JtYXRpb24gYWJvdXQgYSBjb21waWxlZCBwYXR0ZXJuLiAqLwpAQCAtNTg1LDYgKzU5NCw3IEBACiAvKiBGdW5jdGlvbnM6IHRoZSBjb21wbGV0ZSBsaXN0IGluIGFscGhhYmV0aWNhbCBvcmRlciAqLwogCiAjZGVmaW5lIHBjcmUyX2NhbGxvdXRfZW51bWVyYXRlICAgICAgICAgICAgICAgUENSRTJfU1VGRklYKHBjcmUyX2NhbGxvdXRfZW51bWVyYXRlXykKKyNkZWZpbmUgcGNyZTJfY29kZV9jb3B5ICAgICAgICAgICAgICAgICAgICAgICBQQ1JFMl9TVUZGSVgocGNyZTJfY29kZV9jb3B5XykKICNkZWZpbmUgcGNyZTJfY29kZV9mcmVlICAgICAgICAgICAgICAgICAgICAgICBQQ1JFMl9TVUZGSVgocGNyZTJfY29kZV9mcmVlXykKICNkZWZpbmUgcGNyZTJfY29tcGlsZSAgICAgICAgICAgICAgICAgICAgICAgICBQQ1JFMl9TVUZGSVgocGNyZTJfY29tcGlsZV8pCiAjZGVmaW5lIHBjcmUyX2NvbXBpbGVfY29udGV4dF9jb3B5ICAgICAgICAgICAgUENSRTJfU1VGRklYKHBjcmUyX2NvbXBpbGVfY29udGV4dF9jb3B5XykKZGlmZiAtLWdpdCBhL2Rpc3QyL3NyYy9wY3JlMl9hdXRvX3Bvc3Nlc3MuYyBiL2Rpc3QyL3NyYy9wY3JlMl9hdXRvX3Bvc3Nlc3MuYwppbmRleCBkNGQyMzM0Li44ZDBmYTg5IDEwMDY0NAotLS0gYS9kaXN0Mi9zcmMvcGNyZTJfYXV0b19wb3NzZXNzLmMKKysrIGIvZGlzdDIvc3JjL3BjcmUyX2F1dG9fcG9zc2Vzcy5jCkBAIC05MSw2ICs5MSw3IEBACiAgIHsgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCB9ICAgLyogXFggKi8KIH07CiAKKyNpZmRlZiBTVVBQT1JUX1VOSUNPREUKIC8qIFRoaXMgdGFibGUgaXMgdXNlZCB0byBjaGVjayB3aGV0aGVyIGF1dG8tcG9zc2Vzc2lmaWNhdGlvbiBpcyBwb3NzaWJsZQogYmV0d2VlbiBhZGphY2VudCBVbmljb2RlIHByb3BlcnR5IG9wY29kZXMgKE9QX1BST1AgYW5kIE9QX05PVFBST1ApLiBUaGUKIGxlZnQtaGFuZCAocmVwZWF0ZWQpIG9wY29kZSBpcyB1c2VkIHRvIHNlbGVjdCB0aGUgcm93LCBhbmQgdGhlIHJpZ2h0LWhhbmQKQEAgLTE3MCw2ICsxNzEsNyBAQAogICB7IHVjcF9aLCB1Y3BfWiwgdWNwX0MsIHVjcF9DYyB9LCAgLyogU1BBQ0UgYW5kIFBYU1BBQ0UsIDJuZCB2YWx1ZSByZWR1bmRhbnQgKi8KICAgeyB1Y3BfTCwgdWNwX04sIHVjcF9QLCB1Y3BfUG8gfSAgIC8qIFdPUkQgKi8KIH07CisjZW5kaWYgIC8qIFNVUFBPUlRfVU5JQ09ERSAqLwogCiAKIApkaWZmIC0tZ2l0IGEvZGlzdDIvc3JjL3BjcmUyX2NvbXBpbGUuYyBiL2Rpc3QyL3NyYy9wY3JlMl9jb21waWxlLmMKaW5kZXggZDg1MjgzNy4uYmI5NzM2YyAxMDA2NDQKLS0tIGEvZGlzdDIvc3JjL3BjcmUyX2NvbXBpbGUuYworKysgYi9kaXN0Mi9zcmMvcGNyZTJfY29tcGlsZS5jCkBAIC04MSw3ICs4MSw3IEBACiAKIC8qIEZ1bmN0aW9uIGRlZmluaXRpb25zIHRvIGFsbG93IG11dHVhbCByZWN1cnNpb24gKi8KIAotc3RhdGljIGludAorc3RhdGljIHVuc2lnbmVkIGludAogICBhZGRfbGlzdF90b19jbGFzcyh1aW50OF90ICosIFBDUkUyX1VDSEFSICoqLCB1aW50MzJfdCwgY29tcGlsZV9ibG9jayAqLAogICAgIGNvbnN0IHVpbnQzMl90ICosIHVuc2lnbmVkIGludCk7CiAKQEAgLTE0OSw5ICsxNDksMTYgQEAKIAogI2RlZmluZSBPRkxPV19NQVggKElOVF9NQVggLSAyMCkKIAotLyogTWFjcm8gZm9yIHNldHRpbmcgaW5kaXZpZHVhbCBiaXRzIGluIGNsYXNzIGJpdG1hcHMuICovCisvKiBNYWNybyBmb3Igc2V0dGluZyBpbmRpdmlkdWFsIGJpdHMgaW4gY2xhc3MgYml0bWFwcy4gSXQgdG9vayBzb21lCitleHBlcmltZW50aW5nIHRvIGZpZ3VyZSBvdXQgaG93IHRvIHN0b3AgZ2NjIDUuMy4wIGZyb20gd2FybmluZyB3aXRoCistV2NvbnZlcnNpb24uIFRoaXMgdmVyc2lvbiBnZXRzIGEgd2FybmluZzoKIAotI2RlZmluZSBTRVRCSVQoYSxiKSBhWyhiKS84XSB8PSAoMSA8PCAoKGIpJjcpKQorICAjZGVmaW5lIFNFVEJJVChhLGIpIGFbKGIpLzhdIHw9ICh1aW50OF90KSgxIDw8ICgoYikmNykpCisKK0xldCdzIGhvcGUgdGhlIGFwcGFyZW50bHkgbGVzcyBlZmZpY2llbnQgdmVyc2lvbiBpc24ndCBhY3R1YWxseSBzbyBiYWQgaWYgdGhlCitjb21waWxlciBpcyBjbGV2ZXIgd2l0aCBpZGVudGljYWwgc3ViZXhwcmVzc2lvbnMuICovCisKKyNkZWZpbmUgU0VUQklUKGEsYikgYVsoYikvOF0gPSAodWludDhfdCkoYVsoYikvOF0gfCAoMSA8PCAoKGIpJjcpKSkKIAogLyogUHJpdmF0ZSBmbGFncyBhZGRlZCB0byBmaXJzdGN1IGFuZCByZXFjdS4gKi8KIApAQCAtNzIzLDYgKzczMCwzOSBAQAogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgICAgICAgQ29weSBjb21waWxlZCBjb2RlICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogQ29tcGlsZWQgSklUIGNvZGUgY2Fubm90IGJlIGNvcGllZCwgc28gdGhlIG5ldyBjb21waWxlZCBibG9jayBoYXMgbm8KK2Fzc29jaWF0ZWQgSklUIGRhdGEuICovCisKK1BDUkUyX0VYUF9ERUZOIHBjcmUyX2NvZGUgKiBQQ1JFMl9DQUxMX0NPTlZFTlRJT04KK3BjcmUyX2NvZGVfY29weShjb25zdCBwY3JlMl9jb2RlICpjb2RlKQoreworUENSRTJfU0laRSogcmVmX2NvdW50OworcGNyZTJfY29kZSAqbmV3Y29kZTsKKworaWYgKGNvZGUgPT0gTlVMTCkgcmV0dXJuIE5VTEw7CituZXdjb2RlID0gY29kZS0+bWVtY3RsLm1hbGxvYyhjb2RlLT5ibG9ja3NpemUsIGNvZGUtPm1lbWN0bC5tZW1vcnlfZGF0YSk7CitpZiAobmV3Y29kZSA9PSBOVUxMKSByZXR1cm4gTlVMTDsKK21lbWNweShuZXdjb2RlLCBjb2RlLCBjb2RlLT5ibG9ja3NpemUpOworbmV3Y29kZS0+ZXhlY3V0YWJsZV9qaXQgPSBOVUxMOworCisvKiBJZiB0aGUgY29kZSBpcyBvbmUgdGhhdCBoYXMgYmVlbiBkZXNlcmlhbGl6ZWQsIGluY3JlbWVudCB0aGUgcmVmZXJlbmNlIGNvdW50CitpbiB0aGUgZGVjb2RlZCB0YWJsZXMuICovCisKK2lmICgoY29kZS0+ZmxhZ3MgJiBQQ1JFMl9ERVJFRl9UQUJMRVMpICE9IDApCisgIHsKKyAgcmVmX2NvdW50ID0gKFBDUkUyX1NJWkUgKikoY29kZS0+dGFibGVzICsgdGFibGVzX2xlbmd0aCk7CisgICgqcmVmX2NvdW50KSsrOworICB9CisKK3JldHVybiBuZXdjb2RlOworfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogICAgICAgICAgICAgICBGcmVlIGNvbXBpbGVkIGNvZGUgICAgICAgICAgICAgICAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCkBAIC04MDQsNyArODQ0LDcgQEAKIGNvbXBsZXRlX2NhbGxvdXQoUENSRTJfVUNIQVIgKnByZXZpb3VzX2NhbGxvdXQsIFBDUkUyX1NQVFIgcHRyLAogICBjb21waWxlX2Jsb2NrICpjYikKIHsKLXNpemVfdCBsZW5ndGggPSBwdHIgLSBjYi0+c3RhcnRfcGF0dGVybiAtIEdFVChwcmV2aW91c19jYWxsb3V0LCAxKTsKK3NpemVfdCBsZW5ndGggPSAoc2l6ZV90KShwdHIgLSBjYi0+c3RhcnRfcGF0dGVybiAtIEdFVChwcmV2aW91c19jYWxsb3V0LCAxKSk7CiBQVVQocHJldmlvdXNfY2FsbG91dCwgMSArIExJTktfU0laRSwgbGVuZ3RoKTsKIH0KIApAQCAtODM5LDkgKzg3OSwxMCBAQAogUmV0dXJuczogICBpZiBub24tbmVnYXRpdmUsIHRoZSBmaXhlZCBsZW5ndGgsCiAgICAgICAgICAgICAgb3IgLTEgaWYgYW4gT1BfUkVDVVJTRSBpdGVtIHdhcyBlbmNvdW50ZXJlZCBhbmQgYXRlbmQgaXMgRkFMU0UKICAgICAgICAgICAgICBvciAtMiBpZiB0aGVyZSBpcyBubyBmaXhlZCBsZW5ndGgsCi0gICAgICAgICAgICAgb3IgLTMgaWYgXEMgd2FzIGVuY291bnRlcmVkIChpbiBVVEYtOCBtb2RlIG9ubHkpCi0gICAgICAgICAgICAgb3IgLTQgbGVuZ3RoIGlzIHRvbyBsb25nCi0gICAgICAgICAgICAgb3IgLTUgaWYgYW4gdW5rbm93biBvcGNvZGUgd2FzIGVuY291bnRlcmVkIChpbnRlcm5hbCBlcnJvcikKKyAgICAgICAgICAgICBvciAtMyBpZiBcQyB3YXMgZW5jb3VudGVyZWQgKGluIFVURiBtb2RlIG9ubHkpCisgICAgICAgICAgICAgb3IgLTQgaWYgbGVuZ3RoIGlzIHRvbyBsb25nCisgICAgICAgICAgICAgb3IgLTUgaWYgcmVnZXggaXMgdG9vIGNvbXBsaWNhdGVkCisgICAgICAgICAgICAgb3IgLTYgaWYgYW4gdW5rbm93biBvcGNvZGUgd2FzIGVuY291bnRlcmVkIChpbnRlcm5hbCBlcnJvcikKICovCiAKICNkZWZpbmUgRkZMX0xBVEVSICAgICAgICAgICAoLTEpCkBAIC04NTUsMTEgKzg5NiwxMSBAQAogZmluZF9maXhlZGxlbmd0aChQQ1JFMl9VQ0hBUiAqY29kZSwgQk9PTCB1dGYsIEJPT0wgYXRlbmQsIGNvbXBpbGVfYmxvY2sgKmNiLAogICByZWN1cnNlX2NoZWNrICpyZWN1cnNlcywgaW50ICpjb3VudHB0cikKIHsKLWludCBsZW5ndGggPSAtMTsKK3VpbnQzMl90IGxlbmd0aCA9IDB4ZmZmZmZmZmZ1OyAgIC8qIFVuc2V0ICovCiB1aW50MzJfdCBncm91cCA9IDA7CiB1aW50MzJfdCBncm91cGluZm8gPSAwOwogcmVjdXJzZV9jaGVjayB0aGlzX3JlY3Vyc2U7Ci1yZWdpc3RlciBpbnQgYnJhbmNobGVuZ3RoID0gMDsKK3JlZ2lzdGVyIHVpbnQzMl90IGJyYW5jaGxlbmd0aCA9IDA7CiByZWdpc3RlciBQQ1JFMl9VQ0hBUiAqY2MgPSBjb2RlICsgMSArIExJTktfU0laRTsKIAogLyogSWYgdGhpcyBpcyBhIGNhcHR1cmluZyBncm91cCwgd2UgbWF5IGhhdmUgdGhlIGFuc3dlciBjYWNoZWQsIGJ1dCB3ZSBjYW4gb25seQpAQCAtOTEwLDcgKzk1MSw3IEBACiAgICAgY2FzZSBPUF9DT05EOgogICAgIGQgPSBmaW5kX2ZpeGVkbGVuZ3RoKGNjLCB1dGYsIGF0ZW5kLCBjYiwgcmVjdXJzZXMsIGNvdW50cHRyKTsKICAgICBpZiAoZCA8IDApIHJldHVybiBkOwotICAgIGJyYW5jaGxlbmd0aCArPSBkOworICAgIGJyYW5jaGxlbmd0aCArPSAodWludDMyX3QpZDsKICAgICBkbyBjYyArPSBHRVQoY2MsIDEpOyB3aGlsZSAoKmNjID09IE9QX0FMVCk7CiAgICAgY2MgKz0gMSArIExJTktfU0laRTsKICAgICBicmVhazsKQEAgLTkyNiwxNiArOTY3LDE2IEBACiAgICAgY2FzZSBPUF9FTkQ6CiAgICAgY2FzZSBPUF9BQ0NFUFQ6CiAgICAgY2FzZSBPUF9BU1NFUlRfQUNDRVBUOgotICAgIGlmIChsZW5ndGggPCAwKSBsZW5ndGggPSBicmFuY2hsZW5ndGg7CisgICAgaWYgKGxlbmd0aCA9PSAweGZmZmZmZmZmdSkgbGVuZ3RoID0gYnJhbmNobGVuZ3RoOwogICAgICAgZWxzZSBpZiAobGVuZ3RoICE9IGJyYW5jaGxlbmd0aCkgZ290byBJU05PVEZJWEVEOwogICAgIGlmICgqY2MgIT0gT1BfQUxUKQogICAgICAgewogICAgICAgaWYgKGdyb3VwID4gMCkKICAgICAgICAgewotICAgICAgICBncm91cGluZm8gfD0gKEdJX1NFVF9GSVhFRF9MRU5HVEggfCBsZW5ndGgpOworICAgICAgICBncm91cGluZm8gfD0gKHVpbnQzMl90KShHSV9TRVRfRklYRURfTEVOR1RIIHwgbGVuZ3RoKTsKICAgICAgICAgY2ItPmdyb3VwaW5mb1tncm91cF0gPSBncm91cGluZm87CiAgICAgICAgIH0KLSAgICAgIHJldHVybiBsZW5ndGg7CisgICAgICByZXR1cm4gKGludClsZW5ndGg7CiAgICAgICB9CiAgICAgY2MgKz0gMSArIExJTktfU0laRTsKICAgICBicmFuY2hsZW5ndGggPSAwOwpAQCAtOTYwLDcgKzEwMDEsNyBAQAogICAgIHRoaXNfcmVjdXJzZS5ncm91cCA9IGNzOwogICAgIGQgPSBmaW5kX2ZpeGVkbGVuZ3RoKGNzLCB1dGYsIGF0ZW5kLCBjYiwgJnRoaXNfcmVjdXJzZSwgY291bnRwdHIpOwogICAgIGlmIChkIDwgMCkgcmV0dXJuIGQ7Ci0gICAgYnJhbmNobGVuZ3RoICs9IGQ7CisgICAgYnJhbmNobGVuZ3RoICs9ICh1aW50MzJfdClkOwogICAgIGNjICs9IDEgKyBMSU5LX1NJWkU7CiAgICAgYnJlYWs7CiAKQEAgLTEwMzksNyArMTA4MCw3IEBACiAgICAgY2FzZSBPUF9FWEFDVEk6CiAgICAgY2FzZSBPUF9OT1RFWEFDVDoKICAgICBjYXNlIE9QX05PVEVYQUNUSToKLSAgICBicmFuY2hsZW5ndGggKz0gKGludClHRVQyKGNjLDEpOworICAgIGJyYW5jaGxlbmd0aCArPSBHRVQyKGNjLDEpOwogICAgIGNjICs9IDIgKyBJTU0yX1NJWkU7CiAjaWZkZWYgU1VQUE9SVF9VTklDT0RFCiAgICAgaWYgKHV0ZiAmJiBIQVNfRVhUUkFMRU4oY2NbLTFdKSkgY2MgKz0gR0VUX0VYVFJBTEVOKGNjWy0xXSk7CkBAIC0xMDc2LDggKzExMTcsOCBAQAogICAgIGNjKys7CiAgICAgYnJlYWs7CiAKLSAgICAvKiBUaGUgc2luZ2xlLWJ5dGUgbWF0Y2hlciBpc24ndCBhbGxvd2VkLiBUaGlzIG9ubHkgaGFwcGVucyBpbiBVVEYtOCBtb2RlOwotICAgIG90aGVyd2lzZSBcQyBpcyBjb2RlZCBhcyBPUF9BTExBTlkuICovCisgICAgLyogVGhlIHNpbmdsZS1ieXRlIG1hdGNoZXIgaXNuJ3QgYWxsb3dlZC4gVGhpcyBvbmx5IGhhcHBlbnMgaW4gVVRGLTggb3IKKyAgICBVVEYtMTYgbW9kZTsgb3RoZXJ3aXNlIFxDIGlzIGNvZGVkIGFzIE9QX0FMTEFOWS4gKi8KIAogICAgIGNhc2UgT1BfQU5ZQllURToKICAgICByZXR1cm4gRkZMX0JBQ0tTTEFTSEM7CkBAIC0xMTE1LDcgKzExNTYsNyBAQAogICAgICAgY2FzZSBPUF9DUk1JTlJBTkdFOgogICAgICAgY2FzZSBPUF9DUlBPU1JBTkdFOgogICAgICAgaWYgKEdFVDIoY2MsMSkgIT0gR0VUMihjYywxK0lNTTJfU0laRSkpIGdvdG8gSVNOT1RGSVhFRDsKLSAgICAgIGJyYW5jaGxlbmd0aCArPSAoaW50KUdFVDIoY2MsMSk7CisgICAgICBicmFuY2hsZW5ndGggKz0gR0VUMihjYywxKTsKICAgICAgIGNjICs9IDEgKyAyICogSU1NMl9TSVpFOwogICAgICAgYnJlYWs7CiAKQEAgLTE5NDEsNyArMTk4Miw3IEBACiAgICAgICAgIG92ZXJmbG93ID0gVFJVRTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgIHMgPSBzICogMTAgKyAoaW50KSgqKCsrcHRyKSAtIENIQVJfMCk7CisgICAgICBzID0gcyAqIDEwICsgKHVuc2lnbmVkIGludCkoKigrK3B0cikgLSBDSEFSXzApOwogICAgICAgfQogICAgIGlmIChvdmVyZmxvdykgLyogSW50ZWdlciBvdmVyZmxvdyAqLwogICAgICAgewpAQCAtMjAwNSw3ICsyMDQ2LDcgQEAKICAgICAgICAgICBvdmVyZmxvdyA9IFRSVUU7CiAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgfQotICAgICAgICBzID0gcyAqIDEwICsgKGludCkoKigrK3B0cikgLSBDSEFSXzApOworICAgICAgICBzID0gcyAqIDEwICsgKHVuc2lnbmVkIGludCkoKigrK3B0cikgLSBDSEFSXzApOwogICAgICAgICB9CiAgICAgICBpZiAob3ZlcmZsb3cpIC8qIEludGVnZXIgb3ZlcmZsb3cgKi8KICAgICAgICAgewpAQCAtMjI4NSw3ICsyMzI2LDcgQEAKICAgdW5zaWduZWQgaW50ICpwZGF0YXB0ciwgaW50ICplcnJvcmNvZGVwdHIsIGNvbXBpbGVfYmxvY2sgKmNiKQogewogcmVnaXN0ZXIgUENSRTJfVUNIQVIgYzsKLWludCBpLCBib3QsIHRvcDsKK3NpemVfdCBpLCBib3QsIHRvcDsKIFBDUkUyX1NQVFIgcHRyID0gKnB0cnB0cjsKIFBDUkUyX1VDSEFSIG5hbWVbMzJdOwogCkBAIC0yNzUzLDEzICsyNzk0LDEzIEBACiAgICAgICAgICAgICAgICAgdGhlIHBvaW50ZXIgdG8gZXh0cmEgZGF0YSBpcyB1cGRhdGVkCiAqLwogCi1zdGF0aWMgaW50CitzdGF0aWMgdW5zaWduZWQgaW50CiBhZGRfdG9fY2xhc3ModWludDhfdCAqY2xhc3NiaXRzLCBQQ1JFMl9VQ0hBUiAqKnVjaGFyZHB0ciwgdWludDMyX3Qgb3B0aW9ucywKICAgY29tcGlsZV9ibG9jayAqY2IsIHVpbnQzMl90IHN0YXJ0LCB1aW50MzJfdCBlbmQpCiB7CiB1aW50MzJfdCBjOwogdWludDMyX3QgY2xhc3NiaXRzX2VuZCA9IChlbmQgPD0gMHhmZiA/IGVuZCA6IDB4ZmYpOwotaW50IG44ID0gMDsKK3Vuc2lnbmVkIGludCBuOCA9IDA7CiAKIC8qIElmIGNhc2VsZXNzIG1hdGNoaW5nIGlzIHJlcXVpcmVkLCBzY2FuIHRoZSByYW5nZSBhbmQgcHJvY2VzcyBhbHRlcm5hdGUKIGNhc2VzLiBJbiBVbmljb2RlLCB0aGVyZSBhcmUgOC1iaXQgY2hhcmFjdGVycyB0aGF0IGhhdmUgYWx0ZXJuYXRlIGNhc2VzIHRoYXQKQEAgLTI5MDcsMTQgKzI5NDgsMTQgQEAKICAgICAgICAgICAgICAgICB0aGUgcG9pbnRlciB0byBleHRyYSBkYXRhIGlzIHVwZGF0ZWQKICovCiAKLXN0YXRpYyBpbnQKK3N0YXRpYyB1bnNpZ25lZCBpbnQKIGFkZF9saXN0X3RvX2NsYXNzKHVpbnQ4X3QgKmNsYXNzYml0cywgUENSRTJfVUNIQVIgKip1Y2hhcmRwdHIsIHVpbnQzMl90IG9wdGlvbnMsCiAgIGNvbXBpbGVfYmxvY2sgKmNiLCBjb25zdCB1aW50MzJfdCAqcCwgdW5zaWduZWQgaW50IGV4Y2VwdCkKIHsKLWludCBuOCA9IDA7Cit1bnNpZ25lZCBpbnQgbjggPSAwOwogd2hpbGUgKHBbMF0gPCBOT1RBQ0hBUikKICAgewotICBpbnQgbiA9IDA7CisgIHVuc2lnbmVkIGludCBuID0gMDsKICAgaWYgKHBbMF0gIT0gZXhjZXB0KQogICAgIHsKICAgICB3aGlsZShwW24rMV0gPT0gcFswXSArIG4gKyAxKSBuKys7CkBAIC0yOTQ1LDEyICsyOTg2LDEyIEBACiAgICAgICAgICAgICAgICAgdGhlIHBvaW50ZXIgdG8gZXh0cmEgZGF0YSBpcyB1cGRhdGVkCiAqLwogCi1zdGF0aWMgaW50CitzdGF0aWMgdW5zaWduZWQgaW50CiBhZGRfbm90X2xpc3RfdG9fY2xhc3ModWludDhfdCAqY2xhc3NiaXRzLCBQQ1JFMl9VQ0hBUiAqKnVjaGFyZHB0ciwKICAgdWludDMyX3Qgb3B0aW9ucywgY29tcGlsZV9ibG9jayAqY2IsIGNvbnN0IHVpbnQzMl90ICpwKQogewogQk9PTCB1dGYgPSAob3B0aW9ucyAmIFBDUkUyX1VURikgIT0gMDsKLWludCBuOCA9IDA7Cit1bnNpZ25lZCBpbnQgbjggPSAwOwogaWYgKHBbMF0gPiAwKQogICBuOCArPSBhZGRfdG9fY2xhc3MoY2xhc3NiaXRzLCB1Y2hhcmRwdHIsIG9wdGlvbnMsIGNiLCAwLCBwWzBdIC0gMSk7CiB3aGlsZSAocFswXSA8IE5PVEFDSEFSKQpAQCAtMzA5OSw3ICszMTQwLDcgQEAKIAogICAvKiBOb3QgVVRGICovCiAgICAgewotICAgIGlmIChjb2RlICE9IE5VTEwpICpjb2RlKysgPSB4OworICAgIGlmIChjb2RlICE9IE5VTEwpICpjb2RlKysgPSAoUENSRTJfVUNIQVIpeDsKICAgICB9CiAKICAgYXJnbGVuKys7CkBAIC0zMTczLDIwICszMjE0LDIwIEBACiAjZGVmaW5lIE5TRl9FWFRFTkRFRCAweDAwMDJ1CiAjZGVmaW5lIE5TRl9EVVBOQU1FUyAweDAwMDR1CiAKLXN0YXRpYyB1aW50MzJfdCBzY2FuX2Zvcl9jYXB0dXJlcyhQQ1JFMl9TUFRSICpwdHJwdHIsIHVpbnQzMl90IG9wdGlvbnMsCitzdGF0aWMgaW50IHNjYW5fZm9yX2NhcHR1cmVzKFBDUkUyX1NQVFIgKnB0cnB0ciwgdWludDMyX3Qgb3B0aW9ucywKICAgY29tcGlsZV9ibG9jayAqY2IpCiB7CiB1aW50MzJfdCBjOwogdWludDMyX3QgZGVsaW1pdGVyOwotdWludDMyX3QgbmVzdF9kZXB0aCA9IDA7CiB1aW50MzJfdCBzZXQsIHVuc2V0LCAqb3B0c2V0OwordWludDMyX3Qgc2tpcHRva2V0ID0gMDsKK3VpbnQxNl90IG5lc3RfZGVwdGggPSAwOwogaW50IGVycm9yY29kZSA9IDA7CiBpbnQgZXNjYXBlOwogaW50IG5hbWVsZW47CiBpbnQgaTsKIEJPT0wgaW5lc2NxID0gRkFMU0U7CiBCT09MIGlzZHVwbmFtZTsKLUJPT0wgc2tpcHRva2V0ID0gRkFMU0U7CiBCT09MIHV0ZiA9IChvcHRpb25zICYgUENSRTJfVVRGKSAhPSAwOwogQk9PTCBuZWdhdGVfY2xhc3M7CiBQQ1JFMl9TUFRSIG5hbWU7CkBAIC0zMjEzLDEwICszMjU0LDEwIEBACiAgIG5leHQgY2xvc2luZyBwYXJlbnRoZXNpcyBtdXN0IGJlIGlnbm9yZWQuIFRoZSBwYXJlbnRoZXNpcyBpdHNlbGYgbXVzdCBiZQogICBwcm9jZXNzZWQgKHRvIGVuZCB0aGUgbmVzdGVkIHBhcmVudGhlc2l6ZWQgaXRlbSkuICovCiAKLSAgaWYgKHNraXB0b2tldCkKKyAgaWYgKHNraXB0b2tldCAhPSAwKQogICAgIHsKICAgICBpZiAoYyAhPSBDSEFSX1JJR0hUX1BBUkVOVEhFU0lTKSBjb250aW51ZTsKLSAgICBza2lwdG9rZXQgPSBGQUxTRTsKKyAgICBza2lwdG9rZXQgPSAwOwogICAgIH0KIAogICAvKiBTa2lwIG92ZXIgbGl0ZXJhbHMgKi8KQEAgLTMyMzEsMTcgKzMyNzIsMTYgQEAKICAgICBjb250aW51ZTsKICAgICB9CiAKLSAgLyogU2tpcCBvdmVyIGNvbW1lbnRzIGFuZCB3aGl0ZXNwYWNlIGluIGV4dGVuZGVkIG1vZGUuIE5lZWQgYSBsb29wIHRvIGhhbmRsZQotICB3aGl0ZXNwYWNlIGFmdGVyIGEgY29tbWVudC4gKi8KKyAgLyogU2tpcCBvdmVyICMgY29tbWVudHMgYW5kIHdoaXRlc3BhY2UgaW4gZXh0ZW5kZWQgbW9kZS4gKi8KIAogICBpZiAoKG9wdGlvbnMgJiBQQ1JFMl9FWFRFTkRFRCkgIT0gMCkKICAgICB7Ci0gICAgZm9yICg7OykKKyAgICBQQ1JFMl9TUFRSIHdzY3B0ciA9IHB0cjsKKyAgICB3aGlsZSAoTUFYXzI1NShjKSAmJiAoY2ItPmN0eXBlc1tjXSAmIGN0eXBlX3NwYWNlKSAhPSAwKSBjID0gKigrK3B0cik7CisgICAgaWYgKGMgPT0gQ0hBUl9OVU1CRVJfU0lHTikKICAgICAgIHsKLSAgICAgIHdoaWxlIChNQVhfMjU1KGMpICYmIChjYi0+Y3R5cGVzW2NdICYgY3R5cGVfc3BhY2UpICE9IDApIGMgPSAqKCsrcHRyKTsKLSAgICAgIGlmIChjICE9IENIQVJfTlVNQkVSX1NJR04pIGJyZWFrOwogICAgICAgcHRyKys7Ci0gICAgICB3aGlsZSAoKnB0ciAhPSBDSEFSX05VTEwpCisgICAgICB3aGlsZSAocHRyIDwgY2ItPmVuZF9wYXR0ZXJuKQogICAgICAgICB7CiAgICAgICAgIGlmIChJU19ORVdMSU5FKHB0cikpICAgICAgICAgLyogRm9yIG5vbi1maXhlZC1sZW5ndGggbmV3bGluZSBjYXNlcywgKi8KICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJU19ORVdMSU5FIHNldHMgY2ItPm5sbGVuLiAqLwpAQCAtMzI1Myw3ICszMjkzLDE1IEBACiAgICAgICAgIGlmICh1dGYpIEZPUldBUkRDSEFSKHB0cik7CiAjZW5kaWYKICAgICAgICAgfQotICAgICAgYyA9ICpwdHI7ICAgICAvKiBFaXRoZXIgTlVMTCBvciB0aGUgY2hhciBhZnRlciBhIG5ld2xpbmUgKi8KKyAgICAgIH0KKworICAgIC8qIElmIHdlIHNraXBwZWQgYW55IGNoYXJhY3RlcnMsIHJlc3RhcnQgdGhlIGxvb3AuIE90aGVyd2lzZSwgd2UgZGlkbid0IHNlZQorICAgIGEgY29tbWVudC4gKi8KKworICAgIGlmIChwdHIgPiB3c2NwdHIpCisgICAgICB7CisgICAgICBwdHItLTsKKyAgICAgIGNvbnRpbnVlOwogICAgICAgfQogICAgIH0KIApAQCAtMzM3NywyNyArMzQyNSwyNCBAQAogICAgICAgICBpZiAoKG9wdGlvbnMgJiBQQ1JFMl9OT19BVVRPX0NBUFRVUkUpID09IDApIGNiLT5icmFjb3VudCsrOwogICAgICAgICB9CiAKLSAgICAgIC8qICgqc29tZXRoaW5nKSAtIGp1c3Qgc2tpcCB0byBjbG9zaW5nIGtldCB1bmxlc3MgUENSRTJfQUxUX1ZFUkJOQU1FUyBpcwotICAgICAgc2V0LCBpbiB3aGljaCBjYXNlIHdlIGhhdmUgdG8gcHJvY2VzcyBlc2NhcGVzIGluIHRoZSBzdHJpbmcgYWZ0ZXIgdGhlCi0gICAgICBuYW1lLiAqLworICAgICAgLyogKCpzb21ldGhpbmcpIC0gc2tpcCBvdmVyIGEgbmFtZSwgYW5kIHRoZW4ganVzdCBza2lwIHRvIGNsb3Npbmcga2V0CisgICAgICB1bmxlc3MgUENSRTJfQUxUX1ZFUkJOQU1FUyBpcyBzZXQsIGluIHdoaWNoIGNhc2Ugd2UgaGF2ZSB0byBwcm9jZXNzCisgICAgICBlc2NhcGVzIGluIHRoZSBzdHJpbmcgYWZ0ZXIgYSB2ZXJiIG5hbWUgdGVybWluYXRlZCBieSBhIGNvbG9uLiAqLwogCiAgICAgICBlbHNlCiAgICAgICAgIHsKICAgICAgICAgcHRyICs9IDI7CiAgICAgICAgIHdoaWxlIChNQVhfMjU1KCpwdHIpICYmIChjYi0+Y3R5cGVzWypwdHJdICYgY3R5cGVfd29yZCkgIT0gMCkgcHRyKys7Ci0gICAgICAgIGlmICgqcHRyID09IENIQVJfQ09MT04pCisgICAgICAgIGlmICgqcHRyID09IENIQVJfQ09MT04gJiYgKG9wdGlvbnMgJiBQQ1JFMl9BTFRfVkVSQk5BTUVTKSAhPSAwKQogICAgICAgICAgIHsKICAgICAgICAgICBwdHIrKzsKLSAgICAgICAgICBpZiAoKG9wdGlvbnMgJiBQQ1JFMl9BTFRfVkVSQk5BTUVTKSAhPSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgaWYgKHByb2Nlc3NfdmVyYl9uYW1lKCZwdHIsIE5VTEwsICZlcnJvcmNvZGUsIG9wdGlvbnMsIHV0ZiwgY2IpIDwgMCkKLSAgICAgICAgICAgICAgZ290byBGQUlMRUQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgd2hpbGUgKHB0ciA8IGNiLT5lbmRfcGF0dGVybiAmJiAqcHRyICE9IENIQVJfUklHSFRfUEFSRU5USEVTSVMpCi0gICAgICAgICAgICAgIHB0cisrOwotICAgICAgICAgICAgfQorICAgICAgICAgIGlmIChwcm9jZXNzX3ZlcmJfbmFtZSgmcHRyLCBOVUxMLCAmZXJyb3Jjb2RlLCBvcHRpb25zLCB1dGYsIGNiKSA8IDApCisgICAgICAgICAgICBnb3RvIEZBSUxFRDsKKyAgICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICB7CisgICAgICAgICAgd2hpbGUgKHB0ciA8IGNiLT5lbmRfcGF0dGVybiAmJiAqcHRyICE9IENIQVJfUklHSFRfUEFSRU5USEVTSVMpCisgICAgICAgICAgICBwdHIrKzsKICAgICAgICAgICB9CiAgICAgICAgIG5lc3RfZGVwdGgtLTsKICAgICAgICAgfQpAQCAtMzQxNCw3ICszNDU5LDcgQEAKICAgICAgICAgICBJU19ESUdJVChwdHJbMF0pIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogKD9uKSAqLwogICAgICAgICAgIChwdHJbMF0gPT0gQ0hBUl9NSU5VUyAmJiBJU19ESUdJVChwdHJbMV0pKSkgICAvKiAoPy1uKSAqLwogICAgICAgICB7Ci0gICAgICAgIHNraXB0b2tldCA9IFRSVUU7CisgICAgICAgIHNraXB0b2tldCA9IHB0clswXTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtMzQzNCw4ICszNDc5LDggQEAKIAogICAgICAgaWYgKCpwdHIgPT0gQ0hBUl9WRVJUSUNBTF9MSU5FKQogICAgICAgICB7Ci0gICAgICAgIHRvcF9uZXN0LT5yZXNldF9ncm91cCA9IGNiLT5icmFjb3VudDsKLSAgICAgICAgdG9wX25lc3QtPm1heF9ncm91cCA9IGNiLT5icmFjb3VudDsKKyAgICAgICAgdG9wX25lc3QtPnJlc2V0X2dyb3VwID0gKHVpbnQxNl90KWNiLT5icmFjb3VudDsKKyAgICAgICAgdG9wX25lc3QtPm1heF9ncm91cCA9ICh1aW50MTZfdCljYi0+YnJhY291bnQ7CiAgICAgICAgIHRvcF9uZXN0LT5mbGFncyB8PSBOU0ZfUkVTRVQ7CiAgICAgICAgIGNiLT5leHRlcm5hbF9mbGFncyB8PSBQQ1JFMl9EVVBDQVBVU0VEOwogICAgICAgICBicmVhazsKQEAgLTM0NzAsOSArMzUxNSwxMCBAQAogICAgICAgICAgIGNhc2UgQ0hBUl9VOgogICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgZGVmYXVsdDogIGVycm9yY29kZSA9IEVSUjExOwotICAgICAgICAgICAgICAgICAgICBwdHItLTsgICAgLyogQ29ycmVjdCB0aGUgb2Zmc2V0ICovCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gRkFJTEVEOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgZXJyb3Jjb2RlID0gRVJSMTE7CisgICAgICAgICAgcHRyLS07ICAgIC8qIENvcnJlY3QgdGhlIG9mZnNldCAqLworICAgICAgICAgIGdvdG8gRkFJTEVEOwogICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC0zNjQ4LDcgKzM2OTQsNyBAQAogICAgICAgICB9CiAKICAgICAgIGlmIChuYW1lbGVuICsgSU1NMl9TSVpFICsgMSA+IGNiLT5uYW1lX2VudHJ5X3NpemUpCi0gICAgICAgIGNiLT5uYW1lX2VudHJ5X3NpemUgPSBuYW1lbGVuICsgSU1NMl9TSVpFICsgMTsKKyAgICAgICAgY2ItPm5hbWVfZW50cnlfc2l6ZSA9ICh1aW50MTZfdCkobmFtZWxlbiArIElNTTJfU0laRSArIDEpOwogCiAgICAgICAvKiBXZSBoYXZlIGEgdmFsaWQgbmFtZSBmb3IgdGhpcyBjYXB0dXJpbmcgZ3JvdXAuICovCiAKQEAgLTM2NjYsNyArMzcxMiw3IEBACiAgICAgICBmb3IgKGkgPSAwOyBpIDwgY2ItPm5hbWVzX2ZvdW5kOyBpKyssIG5nKyspCiAgICAgICAgIHsKICAgICAgICAgaWYgKG5hbWVsZW4gPT0gbmctPmxlbmd0aCAmJgotICAgICAgICAgICAgUFJJVihzdHJuY21wKShuYW1lLCBuZy0+bmFtZSwgbmFtZWxlbikgPT0gMCkKKyAgICAgICAgICAgIFBSSVYoc3RybmNtcCkobmFtZSwgbmctPm5hbWUsIChzaXplX3QpbmFtZWxlbikgPT0gMCkKICAgICAgICAgICB7CiAgICAgICAgICAgaWYgKG5nLT5udW1iZXIgPT0gY2ItPmJyYWNvdW50KSBicmVhazsKICAgICAgICAgICBpZiAoKG9wdGlvbnMgJiBQQ1JFMl9EVVBOQU1FUykgPT0gMCkKQEAgLTM2OTAsNyArMzczNiw3IEBACiAKICAgICAgIGlmIChjYi0+bmFtZXNfZm91bmQgPj0gY2ItPm5hbWVkX2dyb3VwX2xpc3Rfc2l6ZSkKICAgICAgICAgewotICAgICAgICBpbnQgbmV3c2l6ZSA9IGNiLT5uYW1lZF9ncm91cF9saXN0X3NpemUgKiAyOworICAgICAgICB1aW50MzJfdCBuZXdzaXplID0gY2ItPm5hbWVkX2dyb3VwX2xpc3Rfc2l6ZSAqIDI7CiAgICAgICAgIG5hbWVkX2dyb3VwICpuZXdzcGFjZSA9CiAgICAgICAgICAgY2ItPmN4LT5tZW1jdGwubWFsbG9jKG5ld3NpemUgKiBzaXplb2YobmFtZWRfZ3JvdXApLAogICAgICAgICAgIGNiLT5jeC0+bWVtY3RsLm1lbW9yeV9kYXRhKTsKQEAgLTM3MTIsOSArMzc1OCw5IEBACiAgICAgICAvKiBBZGQgdGhpcyBuYW1lIHRvIHRoZSBsaXN0ICovCiAKICAgICAgIGNiLT5uYW1lZF9ncm91cHNbY2ItPm5hbWVzX2ZvdW5kXS5uYW1lID0gbmFtZTsKLSAgICAgIGNiLT5uYW1lZF9ncm91cHNbY2ItPm5hbWVzX2ZvdW5kXS5sZW5ndGggPSBuYW1lbGVuOworICAgICAgY2ItPm5hbWVkX2dyb3Vwc1tjYi0+bmFtZXNfZm91bmRdLmxlbmd0aCA9ICh1aW50MTZfdCluYW1lbGVuOwogICAgICAgY2ItPm5hbWVkX2dyb3Vwc1tjYi0+bmFtZXNfZm91bmRdLm51bWJlciA9IGNiLT5icmFjb3VudDsKLSAgICAgIGNiLT5uYW1lZF9ncm91cHNbY2ItPm5hbWVzX2ZvdW5kXS5pc2R1cCA9IGlzZHVwbmFtZTsKKyAgICAgIGNiLT5uYW1lZF9ncm91cHNbY2ItPm5hbWVzX2ZvdW5kXS5pc2R1cCA9ICh1aW50MTZfdClpc2R1cG5hbWU7CiAgICAgICBjYi0+bmFtZXNfZm91bmQrKzsKICAgICAgIGJyZWFrOwogICAgICAgfSAgICAgICAgLyogRW5kIG9mICg/IHN3aXRjaCAqLwpAQCAtMzcyNyw3ICszNzczLDcgQEAKICAgICAgICAgKHRvcF9uZXN0LT5mbGFncyAmIE5TRl9SRVNFVCkgIT0gMCkKICAgICAgIHsKICAgICAgIGlmIChjYi0+YnJhY291bnQgPiB0b3BfbmVzdC0+bWF4X2dyb3VwKQotICAgICAgICB0b3BfbmVzdC0+bWF4X2dyb3VwID0gY2ItPmJyYWNvdW50OworICAgICAgICB0b3BfbmVzdC0+bWF4X2dyb3VwID0gKHVpbnQxNl90KWNiLT5icmFjb3VudDsKICAgICAgIGNiLT5icmFjb3VudCA9IHRvcF9uZXN0LT5yZXNldF9ncm91cDsKICAgICAgIH0KICAgICBicmVhazsKQEAgLTM3NDgsMTMgKzM3OTQsMjYgQEAKICAgICAgIGlmICh0b3BfbmVzdCA9PSAobmVzdF9zYXZlICopKGNiLT5zdGFydF93b3Jrc3BhY2UpKSB0b3BfbmVzdCA9IE5VTEw7CiAgICAgICAgIGVsc2UgdG9wX25lc3QtLTsKICAgICAgIH0KLSAgICBpZiAobmVzdF9kZXB0aCA+IDApIG5lc3RfZGVwdGgtLTsgIC8qIENhbiBiZSAwIGZvciB1bm1hdGNoZWQgKSAqLworICAgIGlmIChuZXN0X2RlcHRoID09IDApICAgIC8qIFVubWF0Y2hlZCBjbG9zaW5nIHBhcmVudGhlc2lzICovCisgICAgICB7CisgICAgICBlcnJvcmNvZGUgPSBFUlIyMjsKKyAgICAgIGdvdG8gRkFJTEVEOworICAgICAgfQorICAgIG5lc3RfZGVwdGgtLTsKICAgICBicmVhazsKICAgICB9CiAgIH0KIAotY2ItPmZpbmFsX2JyYWNvdW50ID0gY2ItPmJyYWNvdW50OwotcmV0dXJuIDA7CitpZiAobmVzdF9kZXB0aCA9PSAwKQorICB7CisgIGNiLT5maW5hbF9icmFjb3VudCA9IGNiLT5icmFjb3VudDsKKyAgcmV0dXJuIDA7CisgIH0KKworLyogV2UgZ2l2ZSBhIHNwZWNpYWwgZXJyb3IgZm9yIGEgbWlzc2luZyBjbG9zaW5nIHBhcmVudGhlc2VzIGFmdGVyICg/IyBiZWNhdXNlCitpdCBtaWdodCBvdGhlcndpc2UgYmUgaGFyZCB0byBzZWUgd2hlcmUgdGhlIG1pc3NpbmcgY2hhcmFjdGVyIGlzLiAqLworCitlcnJvcmNvZGUgPSAoc2tpcHRva2V0ID09IENIQVJfTlVNQkVSX1NJR04pPyBFUlIxOCA6IEVSUjE0OwogCiBGQUlMRUQ6CiAqcHRycHRyID0gcHRyOwpAQCAtMzkwNSw2ICszOTY0LDEwIEBACiAgIGludDMyX3Qgc3VicmVxY3VmbGFncywgc3ViZmlyc3RjdWZsYWdzOyAgLyogTXVzdCBiZSBzaWduZWQgKi8KICAgUENSRTJfVUNIQVIgbWNidWZmZXJbOF07CiAKKyAgLyogQ29tZSBoZXJlIHRvIHJlc3RhcnQgdGhlIGxvb3AuICovCisKKyAgUkVET19MT09QOgorCiAgIC8qIEdldCBuZXh0IGNoYXJhY3RlciBpbiB0aGUgcGF0dGVybiAqLwogCiAgIGMgPSAqcHRyOwpAQCAtMzk0OSw3ICs0MDEyLDcgQEAKICAgICAgICplcnJvcmNvZGVwdHIgPSBFUlIyMDsKICAgICAgIGdvdG8gRkFJTEVEOwogICAgICAgfQotICAgICpsZW5ndGhwdHIgKz0gY29kZSAtIGxhc3RfY29kZTsKKyAgICAqbGVuZ3RocHRyICs9IChzaXplX3QpKGNvZGUgLSBsYXN0X2NvZGUpOwogCiAgICAgLyogSWYgInByZXZpb3VzIiBpcyBzZXQgYW5kIGl0IGlzIG5vdCBhdCB0aGUgc3RhcnQgb2YgdGhlIHdvcmsgc3BhY2UsIG1vdmUKICAgICBpdCBiYWNrIHRvIHRoZXJlLCBpbiBvcmRlciB0byBhdm9pZCBmaWxsaW5nIHVwIHRoZSB3b3JrIHNwYWNlLiBPdGhlcndpc2UsCkBAIC0zOTU5LDcgKzQwMjIsNyBAQAogICAgICAgewogICAgICAgaWYgKHByZXZpb3VzID4gb3JpZ19jb2RlKQogICAgICAgICB7Ci0gICAgICAgIG1lbW1vdmUob3JpZ19jb2RlLCBwcmV2aW91cywgQ1UyQllURVMoY29kZSAtIHByZXZpb3VzKSk7CisgICAgICAgIG1lbW1vdmUob3JpZ19jb2RlLCBwcmV2aW91cywgKHNpemVfdClDVTJCWVRFUyhjb2RlIC0gcHJldmlvdXMpKTsKICAgICAgICAgY29kZSAtPSBwcmV2aW91cyAtIG9yaWdfY29kZTsKICAgICAgICAgcHJldmlvdXMgPSBvcmlnX2NvZGU7CiAgICAgICAgIH0KQEAgLTQwNDUsMTEgKzQxMDgsNyBAQAogICAgIC8qIElmIHdlIHNraXBwZWQgYW55IGNoYXJhY3RlcnMsIHJlc3RhcnQgdGhlIGxvb3AuIE90aGVyd2lzZSwgd2UgZGlkbid0IHNlZQogICAgIGEgY29tbWVudC4gKi8KIAotICAgIGlmIChwdHIgPiB3c2NwdHIpCi0gICAgICB7Ci0gICAgICBwdHItLTsKLSAgICAgIGNvbnRpbnVlOwotICAgICAgfQorICAgIGlmIChwdHIgPiB3c2NwdHIpIGdvdG8gUkVET19MT09QOwogICAgIH0KIAogICAvKiBTa2lwIG92ZXIgKD8jIGNvbW1lbnRzLiAqLwpAQCAtNDEyMCw3ICs0MTc5LDcgQEAKICAgICAgICAgKmVycm9yY29kZXB0ciA9IEVSUjIwOwogICAgICAgICBnb3RvIEZBSUxFRDsKICAgICAgICAgfQotICAgICAgKmxlbmd0aHB0ciArPSBjb2RlIC0gbGFzdF9jb2RlOyAgIC8qIFRvIGluY2x1ZGUgY2FsbG91dCBsZW5ndGggKi8KKyAgICAgICpsZW5ndGhwdHIgKz0gKHNpemVfdCkoY29kZSAtIGxhc3RfY29kZSk7ICAvKiBUbyBpbmNsdWRlIGNhbGxvdXQgbGVuZ3RoICovCiAgICAgICB9CiAgICAgcmV0dXJuIFRSVUU7CiAKQEAgLTQxODksMTcgKzQyNDgsMTUgQEAKICAgICBpZiAoUFJJVihzdHJuY21wX2M4KShwdHIrMSwgU1RSSU5HX1dFSVJEX1NUQVJUV09SRCwgNikgPT0gMCkKICAgICAgIHsKICAgICAgIGNiLT5uZXN0cHRyWzBdID0gcHRyICsgNzsKLSAgICAgIHB0ciA9IHN1Yl9zdGFydF9vZl93b3JkOyAgLyogRG8gbm90IGNvbWJpbmUgdGhlc2Ugc3RhdGVtZW50czsgY2xhbmcncyAqLwotICAgICAgcHRyLS07ICAgICAgICAgICAgICAgICAgICAvKiBzYW5pdGl6ZXIgbW9hbnMgYWJvdXQgYSBuZWdhdGl2ZSBpbmRleC4gKi8KLSAgICAgIGNvbnRpbnVlOworICAgICAgcHRyID0gc3ViX3N0YXJ0X29mX3dvcmQ7CisgICAgICBnb3RvIFJFRE9fTE9PUDsKICAgICAgIH0KIAogICAgIGlmIChQUklWKHN0cm5jbXBfYzgpKHB0cisxLCBTVFJJTkdfV0VJUkRfRU5EV09SRCwgNikgPT0gMCkKICAgICAgIHsKICAgICAgIGNiLT5uZXN0cHRyWzBdID0gcHRyICsgNzsKLSAgICAgIHB0ciA9IHN1Yl9lbmRfb2Zfd29yZDsgICAgLyogRG8gbm90IGNvbWJpbmUgdGhlc2Ugc3RhdGVtZW50czsgY2xhbmcncyAqLwotICAgICAgcHRyLS07ICAgICAgICAgICAgICAgICAgICAvKiBzYW5pdGl6ZXIgbW9hbnMgYWJvdXQgYSBuZWdhdGl2ZSBpbmRleC4gKi8KLSAgICAgIGNvbnRpbnVlOworICAgICAgcHRyID0gc3ViX2VuZF9vZl93b3JkOworICAgICAgZ290byBSRURPX0xPT1A7CiAgICAgICB9CiAKICAgICAvKiBIYW5kbGUgYSByZWFsIGNoYXJhY3RlciBjbGFzcy4gKi8KQEAgLTQ0MDgsNyArNDQ2NSw3IEBACiAgICAgICAgICAgICBjYXNlIFBDX1BVTkNUOgogICAgICAgICAgICAgaWYgKHB0eXBlID09IDApIHB0eXBlID0gUFRfUFhQVU5DVDsKICAgICAgICAgICAgICpjbGFzc191Y2hhcmRhdGErKyA9IGxvY2FsX25lZ2F0ZT8gWENMX05PVFBST1AgOiBYQ0xfUFJPUDsKLSAgICAgICAgICAgICpjbGFzc191Y2hhcmRhdGErKyA9IHB0eXBlOworICAgICAgICAgICAgKmNsYXNzX3VjaGFyZGF0YSsrID0gKFBDUkUyX1VDSEFSKXB0eXBlOwogICAgICAgICAgICAgKmNsYXNzX3VjaGFyZGF0YSsrID0gMDsKICAgICAgICAgICAgIHhjbGFzc19oYXNfcHJvcCA9IFRSVUU7CiAgICAgICAgICAgICBwdHIgPSB0ZW1wcHRyICsgMTsKQEAgLTQ0NTYsOSArNDUxMyw5IEBACiAgICAgICAgIGlmICh0YWJvZmZzZXQgPj0gMCkKICAgICAgICAgICB7CiAgICAgICAgICAgaWYgKHRhYm9wdCA+PSAwKQotICAgICAgICAgICAgZm9yIChjID0gMDsgYyA8IDMyOyBjKyspIHBiaXRzW2NdIHw9IGNiaXRzW2MgKyB0YWJvZmZzZXRdOworICAgICAgICAgICAgZm9yIChjID0gMDsgYyA8IDMyOyBjKyspIHBiaXRzW2NdIHw9IGNiaXRzWyhpbnQpYyArIHRhYm9mZnNldF07CiAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgZm9yIChjID0gMDsgYyA8IDMyOyBjKyspIHBiaXRzW2NdICY9IH5jYml0c1tjICsgdGFib2Zmc2V0XTsKKyAgICAgICAgICAgIGZvciAoYyA9IDA7IGMgPCAzMjsgYysrKSBwYml0c1tjXSAmPSB+Y2JpdHNbKGludCljICsgdGFib2Zmc2V0XTsKICAgICAgICAgICB9CiAKICAgICAgICAgLyogTm93IHNlZSBpZiB3ZSBuZWVkIHRvIHJlbW92ZSBhbnkgc3BlY2lhbCBjaGFyYWN0ZXJzLiBBbiBvcHRpb24KQEAgLTU4OTksMTAgKzU5NTYsMjIgQEAKICAgICAgICAgICAgICAgZ290byBGQUlMRUQ7CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNiLT5oYWRfYWNjZXB0ID0gVFJVRTsKKworICAgICAgICAgICAgLyogSW4gdGhlIGZpcnN0IHBhc3MsIGp1c3QgYWNjdW11bGF0ZSB0aGUgbGVuZ3RoIHJlcXVpcmVkOworICAgICAgICAgICAgb3RoZXJ3aXNlIGhpdHRpbmcgKCpBQ0NFUFQpIGluc2lkZSBtYW55IG5lc3RlZCBwYXJlbnRoZXNlcyBjYW4KKyAgICAgICAgICAgIGNhdXNlIHdvcmtzcGFjZSBvdmVyZmxvdy4gKi8KKwogICAgICAgICAgICAgZm9yIChvYyA9IGNiLT5vcGVuX2NhcHM7IG9jICE9IE5VTEw7IG9jID0gb2MtPm5leHQpCiAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgKmNvZGUrKyA9IE9QX0NMT1NFOwotICAgICAgICAgICAgICBQVVQySU5DKGNvZGUsIDAsIG9jLT5udW1iZXIpOworICAgICAgICAgICAgICBpZiAobGVuZ3RocHRyICE9IE5VTEwpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICpsZW5ndGhwdHIgKz0gQ1UyQllURVMoMSkgKyBJTU0yX1NJWkU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICpjb2RlKysgPSBPUF9DTE9TRTsKKyAgICAgICAgICAgICAgICBQVVQySU5DKGNvZGUsIDAsIG9jLT5udW1iZXIpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgc2V0dmVyYiA9ICpjb2RlKysgPQogICAgICAgICAgICAgICAoY2ItPmFzc2VydF9kZXB0aCA+IDApPyBPUF9BU1NFUlRfQUNDRVBUIDogT1BfQUNDRVBUOwpAQCAtNzA0Miw3ICs3MTExLDkgQEAKICAgICAgICAgfQogICAgICAgfQogCi0gICAgLyogRXJyb3IgaWYgaGl0IGVuZCBvZiBwYXR0ZXJuICovCisgICAgLyogQXQgdGhlIGVuZCBvZiBhIGdyb3VwLCBpdCdzIGFuIGVycm9yIGlmIHdlIGhpdCBlbmQgb2YgcGF0dGVybiBvcgorICAgIGFueSBub24tY2xvc2luZyBwYXJlbnRoZXNpcy4gVGhpcyBjaGVjayBhbHNvIGhhcHBlbnMgaW4gdGhlIHByZS1zY2FuLAorICAgIHNvIHNob3VsZCBub3QgdHJpZ2dlciBoZXJlLCBidXQgbGVhdmUgdGhpcyBjb2RlIGFzIGFuIGluc3VyYW5jZS4gKi8KIAogICAgIGlmICgqcHRyICE9IENIQVJfUklHSFRfUEFSRU5USEVTSVMpCiAgICAgICB7CkBAIC03MzQ5LDEyICs3NDIwLDE3IEBACiAgICAgICAgICAgfQogICAgICAgICBlbHNlCiAjZW5kaWYKLSAgICAgICAgLyogSW4gbm9uLVVURiBtb2RlLCB3ZSB0dXJuIFxDIGludG8gT1BfQUxMQU5ZIGluc3RlYWQgb2YgT1BfQU5ZQllURQotICAgICAgICBzbyB0aGF0IGl0IHdvcmtzIGluIERGQSBtb2RlIGFuZCBpbiBsb29rYmVoaW5kcy4gKi8KKyAgICAgICAgLyogSW4gbm9uLVVURiBtb2RlLCBhbmQgZm9yIGJvdGggMzItYml0IG1vZGVzLCB3ZSB0dXJuIFxDIGludG8KKyAgICAgICAgT1BfQUxMQU5ZIGluc3RlYWQgb2YgT1BfQU5ZQllURSBzbyB0aGF0IGl0IHdvcmtzIGluIERGQSBtb2RlIGFuZCBpbgorICAgICAgICBsb29rYmVoaW5kcy4gKi8KIAogICAgICAgICAgIHsKICAgICAgICAgICBwcmV2aW91cyA9IChlc2NhcGUgPiBFU0NfYiAmJiBlc2NhcGUgPCBFU0NfWik/IGNvZGUgOiBOVUxMOworI2lmIFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSAzMgorICAgICAgICAgICpjb2RlKysgPSAoZXNjYXBlID09IEVTQ19DKT8gT1BfQUxMQU5ZIDogZXNjYXBlOworI2Vsc2UKICAgICAgICAgICAqY29kZSsrID0gKCF1dGYgJiYgZXNjYXBlID09IEVTQ19DKT8gT1BfQUxMQU5ZIDogZXNjYXBlOworI2VuZGlmCiAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICBjb250aW51ZTsKQEAgLTg3MDQsMTQgKzg3ODAsMTEgQEAKICAgcmVxY3VmbGFncyA9IFJFUV9OT05FOwogICB9CiAKLS8qIElmIHdlIGhhdmUgbm90IHJlYWNoZWQgZW5kIG9mIHBhdHRlcm4gYWZ0ZXIgYSBzdWNjZXNzZnVsIGNvbXBpbGUsIHRoZXJlJ3MgYW4KLWV4Y2VzcyBicmFja2V0LiBGaWxsIGluIHRoZSBmaW5hbCBvcGNvZGUgYW5kIGNoZWNrIGZvciBkaXNhc3Ryb3VzIG92ZXJmbG93LgotSWYgbm8gb3ZlcmZsb3csIGJ1dCB0aGUgZXN0aW1hdGVkIGxlbmd0aCBleGNlZWRzIHRoZSByZWFsbHkgdXNlZCBsZW5ndGgsIGFkanVzdAotdGhlIHZhbHVlIG9mIHJlLT5ibG9ja3NpemUsIGFuZCBpZiB2YWxncmluZCBzdXBwb3J0IGlzIGNvbmZpZ3VyZWQsIG1hcmsgdGhlCi1leHRyYSBhbGxvY2F0ZWQgbWVtb3J5IGFzIHVuYWRkcmVzc2FibGUsIHNvIHRoYXQgYW55IG91dC1vZi1ib3VuZCByZWFkcyBjYW4gYmUKLWRldGVjdGVkLiAqLworLyogRmlsbCBpbiB0aGUgZmluYWwgb3Bjb2RlIGFuZCBjaGVjayBmb3IgZGlzYXN0cm91cyBvdmVyZmxvdy4gSWYgbm8gb3ZlcmZsb3csCitidXQgdGhlIGVzdGltYXRlZCBsZW5ndGggZXhjZWVkcyB0aGUgcmVhbGx5IHVzZWQgbGVuZ3RoLCBhZGp1c3QgdGhlIHZhbHVlIG9mCityZS0+YmxvY2tzaXplLCBhbmQgaWYgdmFsZ3JpbmQgc3VwcG9ydCBpcyBjb25maWd1cmVkLCBtYXJrIHRoZSBleHRyYSBhbGxvY2F0ZWQKK21lbW9yeSBhcyB1bmFkZHJlc3NhYmxlLCBzbyB0aGF0IGFueSBvdXQtb2YtYm91bmQgcmVhZHMgY2FuIGJlIGRldGVjdGVkLiAqLwogCi1pZiAoZXJyb3Jjb2RlID09IDAgJiYgcHRyIDwgY2IuZW5kX3BhdHRlcm4pIGVycm9yY29kZSA9IEVSUjIyOwogKmNvZGUrKyA9IE9QX0VORDsKIHVzZWRsZW5ndGggPSBjb2RlIC0gY29kZXN0YXJ0OwogaWYgKHVzZWRsZW5ndGggPiBsZW5ndGgpIGVycm9yY29kZSA9IEVSUjIzOyBlbHNlCmRpZmYgLS1naXQgYS9kaXN0Mi9zcmMvcGNyZTJfY29uZmlnLmMgYi9kaXN0Mi9zcmMvcGNyZTJfY29uZmlnLmMKaW5kZXggOTIxODQ1OS4uZTk5MjcyZiAxMDA2NDQKLS0tIGEvZGlzdDIvc3JjL3BjcmUyX2NvbmZpZy5jCisrKyBiL2Rpc3QyL3NyYy9wY3JlMl9jb25maWcuYwpAQCAtNjEsMTUgKzYxLDE2IEBACiAqIFJldHVybiBpbmZvIGFib3V0IHdoYXQgZmVhdHVyZXMgYXJlIGNvbmZpZ3VyZWQgKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotLyoKKy8qIElmIHdoZXJlIGlzIE5VTEwsIHRoZSBsZW5ndGggb2YgbWVtb3J5IHJlcXVpcmVkIGlzIHJldHVybmVkLgorCiBBcmd1bWVudHM6CiAgIHdoYXQgICAgICAgICAgICAgd2hhdCBpbmZvcm1hdGlvbiBpcyByZXF1aXJlZAogICB3aGVyZSAgICAgICAgICAgIHdoZXJlIHRvIHB1dCB0aGUgaW5mb3JtYXRpb24KIAotUmV0dXJuczogICAgICAgICAgIDAgaWYgZGF0YSByZXR1cm5lZAotICAgICAgICAgICAgICAgICAgID49IDAgaWYgd2hlcmUgaXMgTlVMTCwgZ2l2aW5nIGxlbmd0aCByZXF1aXJlZAorUmV0dXJuczogICAgICAgICAgIDAgaWYgYSBudW1lcmljYWwgdmFsdWUgaXMgcmV0dXJuZWQKKyAgICAgICAgICAgICAgICAgICA+PSAwIGlmIGEgc3RyaW5nIHZhbHVlCiAgICAgICAgICAgICAgICAgICAgUENSRTJfRVJST1JfQkFET1BUSU9OIGlmICJ3aGVyZSIgbm90IHJlY29nbml6ZWQKLSAgICAgICAgICAgICAgICAgICBvciBKSVQgdGFyZ2V0IHJlcXVlc3RlZCB3aGVuIEpJVCBub3QgZW5hYmxlZAorICAgICAgICAgICAgICAgICAgICAgb3IgSklUIHRhcmdldCByZXF1ZXN0ZWQgd2hlbiBKSVQgbm90IGVuYWJsZWQKICovCiAKIFBDUkUyX0VYUF9ERUZOIGludCBQQ1JFMl9DQUxMX0NPTlZFTlRJT04KQEAgLTEyNywxNSArMTI4LDE1IEBACiAjaWZkZWYgU1VQUE9SVF9KSVQKICAgICB7CiAgICAgY29uc3QgY2hhciAqdiA9IFBSSVYoaml0X2dldF90YXJnZXQpKCk7Ci0gICAgcmV0dXJuIDEgKyAoKHdoZXJlID09IE5VTEwpPwotICAgICAgc3RybGVuKHYpIDogUFJJVihzdHJjcHlfYzgpKChQQ1JFMl9VQ0hBUiAqKXdoZXJlLCB2KSk7CisgICAgcmV0dXJuIChpbnQpKDEgKyAoKHdoZXJlID09IE5VTEwpPworICAgICAgc3RybGVuKHYpIDogUFJJVihzdHJjcHlfYzgpKChQQ1JFMl9VQ0hBUiAqKXdoZXJlLCB2KSkpOwogICAgIH0KICNlbHNlCiAgIHJldHVybiBQQ1JFMl9FUlJPUl9CQURPUFRJT047CiAjZW5kaWYKIAogICBjYXNlIFBDUkUyX0NPTkZJR19MSU5LU0laRToKLSAgKigodWludDMyX3QgKil3aGVyZSkgPSBjb25maWd1cmVkX2xpbmtfc2l6ZTsKKyAgKigodWludDMyX3QgKil3aGVyZSkgPSAodWludDMyX3QpY29uZmlndXJlZF9saW5rX3NpemU7CiAgIGJyZWFrOwogCiAgIGNhc2UgUENSRTJfQ09ORklHX01BVENITElNSVQ6CkBAIC0xNjksOCArMTcwLDggQEAKICNlbHNlCiAgICAgY29uc3QgY2hhciAqdiA9ICJVbmljb2RlIG5vdCBzdXBwb3J0ZWQiOwogI2VuZGlmCi0gICAgcmV0dXJuIDEgKyAoKHdoZXJlID09IE5VTEwpPwotICAgICAgc3RybGVuKHYpOiBQUklWKHN0cmNweV9jOCkoKFBDUkUyX1VDSEFSICopd2hlcmUsIHYpKTsKKyAgICByZXR1cm4gKGludCkoMSArICgod2hlcmUgPT0gTlVMTCk/CisgICAgICBzdHJsZW4odikgOiBQUklWKHN0cmNweV9jOCkoKFBDUkUyX1VDSEFSICopd2hlcmUsIHYpKSk7CiAgICB9CiAgIGJyZWFrOwogCkBAIC0yMDYsOCArMjA3LDggQEAKICAgICBjb25zdCBjaGFyICp2ID0gKFhTVFJJTkcoWiBQQ1JFMl9QUkVSRUxFQVNFKVsxXSA9PSAwKT8KICAgICAgIFhTVFJJTkcoUENSRTJfTUFKT1IuUENSRTJfTUlOT1IgUENSRTJfREFURSkgOgogICAgICAgWFNUUklORyhQQ1JFMl9NQUpPUi5QQ1JFMl9NSU5PUikgWFNUUklORyhQQ1JFMl9QUkVSRUxFQVNFIFBDUkUyX0RBVEUpOwotICAgIHJldHVybiAxICsgKCh3aGVyZSA9PSBOVUxMKT8KLSAgICAgIHN0cmxlbih2KSA6IFBSSVYoc3RyY3B5X2M4KSgoUENSRTJfVUNIQVIgKil3aGVyZSwgdikpOworICAgIHJldHVybiAoaW50KSgxICsgKCh3aGVyZSA9PSBOVUxMKT8KKyAgICAgIHN0cmxlbih2KSA6IFBSSVYoc3RyY3B5X2M4KSgoUENSRTJfVUNIQVIgKil3aGVyZSwgdikpKTsKICAgICB9CiAgIH0KIApkaWZmIC0tZ2l0IGEvZGlzdDIvc3JjL3BjcmUyX2RmYV9tYXRjaC5jIGIvZGlzdDIvc3JjL3BjcmUyX2RmYV9tYXRjaC5jCmluZGV4IDc2YmMwODUuLjEyYjMxYjEgMTAwNjQ0Ci0tLSBhL2Rpc3QyL3NyYy9wY3JlMl9kZmFfbWF0Y2guYworKysgYi9kaXN0Mi9zcmMvcGNyZTJfZGZhX21hdGNoLmMKQEAgLTQwMSw3ICs0MDEsNyBAQAogQk9PTCByZXNldF9jb3VsZF9jb250aW51ZSA9IEZBTFNFOwogCiBybGV2ZWwrKzsKLW9mZnNldGNvdW50ICY9ICgtMik7CitvZmZzZXRjb3VudCAmPSAodWludDMyX3QpKC0yKTsgIC8qIFJvdW5kIGRvd24gKi8KIAogd3Njb3VudCAtPSAyOwogd3Njb3VudCA9ICh3c2NvdW50IC0gKHdzY291bnQgJSAoSU5UU19QRVJfU1RBVEVCTE9DSyAqIDIpKSkgLwpAQCAtNDM5LDcgKzQzOSw3IEBACiAgIGVuZF9jb2RlID0gdGhpc19zdGFydF9jb2RlOwogICBkbwogICAgIHsKLSAgICBzaXplX3QgYmFjayA9IEdFVChlbmRfY29kZSwgMitMSU5LX1NJWkUpOworICAgIHNpemVfdCBiYWNrID0gKHNpemVfdClHRVQoZW5kX2NvZGUsIDIrTElOS19TSVpFKTsKICAgICBpZiAoYmFjayA+IG1heF9iYWNrKSBtYXhfYmFjayA9IGJhY2s7CiAgICAgZW5kX2NvZGUgKz0gR0VUKGVuZF9jb2RlLCAxKTsKICAgICB9CkBAIC00ODEsMTEgKzQ4MSwxMSBAQAogICBlbmRfY29kZSA9IHRoaXNfc3RhcnRfY29kZTsKICAgZG8KICAgICB7Ci0gICAgc2l6ZV90IGJhY2sgPSBHRVQoZW5kX2NvZGUsIDIrTElOS19TSVpFKTsKKyAgICBzaXplX3QgYmFjayA9IChzaXplX3QpR0VUKGVuZF9jb2RlLCAyK0xJTktfU0laRSk7CiAgICAgaWYgKGJhY2sgPD0gZ29uZV9iYWNrKQogICAgICAgewogICAgICAgaW50IGJzdGF0ZSA9IChpbnQpKGVuZF9jb2RlIC0gc3RhcnRfY29kZSArIDIgKyAyKkxJTktfU0laRSk7Ci0gICAgICBBRERfTkVXX0RBVEEoLWJzdGF0ZSwgMCwgZ29uZV9iYWNrIC0gYmFjayk7CisgICAgICBBRERfTkVXX0RBVEEoLWJzdGF0ZSwgMCwgKGludCkoZ29uZV9iYWNrIC0gYmFjaykpOwogICAgICAgfQogICAgIGVuZF9jb2RlICs9IEdFVChlbmRfY29kZSwgMSk7CiAgICAgfQpAQCAtNTA5LDcgKzUwOSw3IEBACiAgICAgZG8geyBlbmRfY29kZSArPSBHRVQoZW5kX2NvZGUsIDEpOyB9IHdoaWxlICgqZW5kX2NvZGUgPT0gT1BfQUxUKTsKICAgICBuZXdfY291bnQgPSB3b3Jrc3BhY2VbMV07CiAgICAgaWYgKCF3b3Jrc3BhY2VbMF0pCi0gICAgICBtZW1jcHkobmV3X3N0YXRlcywgYWN0aXZlX3N0YXRlcywgbmV3X2NvdW50ICogc2l6ZW9mKHN0YXRlYmxvY2spKTsKKyAgICAgIG1lbWNweShuZXdfc3RhdGVzLCBhY3RpdmVfc3RhdGVzLCAoc2l6ZV90KW5ld19jb3VudCAqIHNpemVvZihzdGF0ZWJsb2NrKSk7CiAgICAgfQogCiAgIC8qIE5vdCByZXN0YXJ0aW5nICovCkBAIC01OTMsOCArNTkzLDkgQEAKICAgICBzdGF0ZWJsb2NrICpjdXJyZW50X3N0YXRlID0gYWN0aXZlX3N0YXRlcyArIGk7CiAgICAgQk9PTCBjYXNlbGVzcyA9IEZBTFNFOwogICAgIFBDUkUyX1NQVFIgY29kZTsKKyAgICB1aW50MzJfdCBjb2RldmFsdWU7CiAgICAgaW50IHN0YXRlX29mZnNldCA9IGN1cnJlbnRfc3RhdGUtPm9mZnNldDsKLSAgICBpbnQgY29kZXZhbHVlLCBycmM7CisgICAgaW50IHJyYzsKICAgICBpbnQgY291bnQ7CiAKICAgICAvKiBBIG5lZ2F0aXZlIG9mZnNldCBpcyBhIHNwZWNpYWwgY2FzZSBtZWFuaW5nICJob2xkIG9mZiBnb2luZyB0byB0aGlzCkBAIC03MTksNyArNzIwLDcgQEAKICAgICAgICAgQUREX0FDVElWRShzdGF0ZV9vZmZzZXQgKyAxICsgTElOS19TSVpFLCAwKTsKICAgICAgICAgaWYgKGNvZGV2YWx1ZSAhPSBPUF9LRVQpCiAgICAgICAgICAgewotICAgICAgICAgIEFERF9BQ1RJVkUoc3RhdGVfb2Zmc2V0IC0gR0VUKGNvZGUsIDEpLCAwKTsKKyAgICAgICAgICBBRERfQUNUSVZFKHN0YXRlX29mZnNldCAtIChpbnQpR0VUKGNvZGUsIDEpLCAwKTsKICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgIGVsc2UKQEAgLTczMywxMSArNzM0LDEyIEBACiAgICAgICAgICAgICBlbHNlIGlmIChtYXRjaF9jb3VudCA+IDAgJiYgKyttYXRjaF9jb3VudCAqIDIgPiAoaW50KW9mZnNldGNvdW50KQogICAgICAgICAgICAgICBtYXRjaF9jb3VudCA9IDA7CiAgICAgICAgICAgY291bnQgPSAoKG1hdGNoX2NvdW50ID09IDApPyAoaW50KW9mZnNldGNvdW50IDogbWF0Y2hfY291bnQgKiAyKSAtIDI7Ci0gICAgICAgICAgaWYgKGNvdW50ID4gMCkgbWVtbW92ZShvZmZzZXRzICsgMiwgb2Zmc2V0cywgY291bnQgKiBzaXplb2YoUENSRTJfU0laRSkpOworICAgICAgICAgIGlmIChjb3VudCA+IDApIG1lbW1vdmUob2Zmc2V0cyArIDIsIG9mZnNldHMsCisgICAgICAgICAgICAoc2l6ZV90KWNvdW50ICogc2l6ZW9mKFBDUkUyX1NJWkUpKTsKICAgICAgICAgICBpZiAob2Zmc2V0Y291bnQgPj0gMikKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgIG9mZnNldHNbMF0gPSAoaW50KShjdXJyZW50X3N1YmplY3QgLSBzdGFydF9zdWJqZWN0KTsKLSAgICAgICAgICAgIG9mZnNldHNbMV0gPSAoaW50KShwdHIgLSBzdGFydF9zdWJqZWN0KTsKKyAgICAgICAgICAgIG9mZnNldHNbMF0gPSAoUENSRTJfU0laRSkoY3VycmVudF9zdWJqZWN0IC0gc3RhcnRfc3ViamVjdCk7CisgICAgICAgICAgICBvZmZzZXRzWzFdID0gKFBDUkUyX1NJWkUpKHB0ciAtIHN0YXJ0X3N1YmplY3QpOwogICAgICAgICAgICAgfQogICAgICAgICAgIGlmICgobWItPm1vcHRpb25zICYgUENSRTJfREZBX1NIT1JURVNUKSAhPSAwKSByZXR1cm4gbWF0Y2hfY291bnQ7CiAgICAgICAgICAgfQpAQCAtOTU5LDcgKzk2MSw3IEBACiAgICAgICAgICAgICB7CiAgICAgICAgICAgICBpZiAoZCA9PSAnXycpIGxlZnRfd29yZCA9IFRSVUU7IGVsc2UKICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICBpbnQgY2F0ID0gVUNEX0NBVEVHT1JZKGQpOworICAgICAgICAgICAgICB1aW50MzJfdCBjYXQgPSBVQ0RfQ0FURUdPUlkoZCk7CiAgICAgICAgICAgICAgIGxlZnRfd29yZCA9IChjYXQgPT0gdWNwX0wgfHwgY2F0ID09IHVjcF9OKTsKICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtOTg0LDcgKzk4Niw3IEBACiAgICAgICAgICAgICB7CiAgICAgICAgICAgICBpZiAoYyA9PSAnXycpIHJpZ2h0X3dvcmQgPSBUUlVFOyBlbHNlCiAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgaW50IGNhdCA9IFVDRF9DQVRFR09SWShjKTsKKyAgICAgICAgICAgICAgdWludDMyX3QgY2F0ID0gVUNEX0NBVEVHT1JZKGMpOwogICAgICAgICAgICAgICByaWdodF93b3JkID0gKGNhdCA9PSB1Y3BfTCB8fCBjYXQgPT0gdWNwX04pOwogICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0xMzY5LDcgKzEzNzEsNyBAQAogICAgICAgaWYgKGNvdW50ID4gMCkgeyBBRERfQUNUSVZFKHN0YXRlX29mZnNldCArIDIsIDApOyB9CiAgICAgICBpZiAoY2xlbiA+IDApCiAgICAgICAgIHsKLSAgICAgICAgaW50IGxnYiwgcmdiOworICAgICAgICB1aW50MzJfdCBsZ2IsIHJnYjsKICAgICAgICAgUENSRTJfU1BUUiBucHRyID0gcHRyICsgY2xlbjsKICAgICAgICAgaW50IG5jb3VudCA9IDA7CiAgICAgICAgIGlmIChjb3VudCA+IDAgJiYgY29kZXZhbHVlID09IE9QX0VYVFVOSV9FWFRSQSArIE9QX1RZUEVQT1NQTFVTKQpAQCAtMTM4Myw3ICsxMzg1LDcgQEAKICAgICAgICAgICBkbGVuID0gMTsKICAgICAgICAgICBpZiAoIXV0ZikgZCA9ICpucHRyOyBlbHNlIHsgR0VUQ0hBUkxFTihkLCBucHRyLCBkbGVuKTsgfQogICAgICAgICAgIHJnYiA9IFVDRF9HUkFQSEJSRUFLKGQpOwotICAgICAgICAgIGlmICgoUFJJVih1Y3BfZ2J0YWJsZSlbbGdiXSAmICgxIDw8IHJnYikpID09IDApIGJyZWFrOworICAgICAgICAgIGlmICgoUFJJVih1Y3BfZ2J0YWJsZSlbbGdiXSAmICgxdSA8PCByZ2IpKSA9PSAwKSBicmVhazsKICAgICAgICAgICBuY291bnQrKzsKICAgICAgICAgICBsZ2IgPSByZ2I7CiAgICAgICAgICAgbnB0ciArPSBkbGVuOwpAQCAtMTYzMCw3ICsxNjMyLDcgQEAKICAgICAgIEFERF9BQ1RJVkUoc3RhdGVfb2Zmc2V0ICsgMiwgMCk7CiAgICAgICBpZiAoY2xlbiA+IDApCiAgICAgICAgIHsKLSAgICAgICAgaW50IGxnYiwgcmdiOworICAgICAgICB1aW50MzJfdCBsZ2IsIHJnYjsKICAgICAgICAgUENSRTJfU1BUUiBucHRyID0gcHRyICsgY2xlbjsKICAgICAgICAgaW50IG5jb3VudCA9IDA7CiAgICAgICAgIGlmIChjb2RldmFsdWUgPT0gT1BfRVhUVU5JX0VYVFJBICsgT1BfVFlQRVBPU1NUQVIgfHwKQEAgLTE2NDUsNyArMTY0Nyw3IEBACiAgICAgICAgICAgZGxlbiA9IDE7CiAgICAgICAgICAgaWYgKCF1dGYpIGQgPSAqbnB0cjsgZWxzZSB7IEdFVENIQVJMRU4oZCwgbnB0ciwgZGxlbik7IH0KICAgICAgICAgICByZ2IgPSBVQ0RfR1JBUEhCUkVBSyhkKTsKLSAgICAgICAgICBpZiAoKFBSSVYodWNwX2didGFibGUpW2xnYl0gJiAoMSA8PCByZ2IpKSA9PSAwKSBicmVhazsKKyAgICAgICAgICBpZiAoKFBSSVYodWNwX2didGFibGUpW2xnYl0gJiAoMXUgPDwgcmdiKSkgPT0gMCkgYnJlYWs7CiAgICAgICAgICAgbmNvdW50Kys7CiAgICAgICAgICAgbGdiID0gcmdiOwogICAgICAgICAgIG5wdHIgKz0gZGxlbjsKQEAgLTE5MDIsNyArMTkwNCw3IEBACiAgICAgICBjb3VudCA9IGN1cnJlbnRfc3RhdGUtPmNvdW50OyAgLyogTnVtYmVyIGFscmVhZHkgbWF0Y2hlZCAqLwogICAgICAgaWYgKGNsZW4gPiAwKQogICAgICAgICB7Ci0gICAgICAgIGludCBsZ2IsIHJnYjsKKyAgICAgICAgdWludDMyX3QgbGdiLCByZ2I7CiAgICAgICAgIFBDUkUyX1NQVFIgbnB0ciA9IHB0ciArIGNsZW47CiAgICAgICAgIGludCBuY291bnQgPSAwOwogICAgICAgICBpZiAoY29kZXZhbHVlID09IE9QX0VYVFVOSV9FWFRSQSArIE9QX1RZUEVQT1NVUFRPKQpAQCAtMTkxNiw3ICsxOTE4LDcgQEAKICAgICAgICAgICBkbGVuID0gMTsKICAgICAgICAgICBpZiAoIXV0ZikgZCA9ICpucHRyOyBlbHNlIHsgR0VUQ0hBUkxFTihkLCBucHRyLCBkbGVuKTsgfQogICAgICAgICAgIHJnYiA9IFVDRF9HUkFQSEJSRUFLKGQpOwotICAgICAgICAgIGlmICgoUFJJVih1Y3BfZ2J0YWJsZSlbbGdiXSAmICgxIDw8IHJnYikpID09IDApIGJyZWFrOworICAgICAgICAgIGlmICgoUFJJVih1Y3BfZ2J0YWJsZSlbbGdiXSAmICgxdSA8PCByZ2IpKSA9PSAwKSBicmVhazsKICAgICAgICAgICBuY291bnQrKzsKICAgICAgICAgICBsZ2IgPSByZ2I7CiAgICAgICAgICAgbnB0ciArPSBkbGVuOwpAQCAtMjA5Nyw3ICsyMDk5LDcgQEAKICAgICAgIGNhc2UgT1BfRVhUVU5JOgogICAgICAgaWYgKGNsZW4gPiAwKQogICAgICAgICB7Ci0gICAgICAgIGludCBsZ2IsIHJnYjsKKyAgICAgICAgdWludDMyX3QgbGdiLCByZ2I7CiAgICAgICAgIFBDUkUyX1NQVFIgbnB0ciA9IHB0ciArIGNsZW47CiAgICAgICAgIGludCBuY291bnQgPSAwOwogICAgICAgICBsZ2IgPSBVQ0RfR1JBUEhCUkVBSyhjKTsKQEAgLTIxMDYsNyArMjEwOCw3IEBACiAgICAgICAgICAgZGxlbiA9IDE7CiAgICAgICAgICAgaWYgKCF1dGYpIGQgPSAqbnB0cjsgZWxzZSB7IEdFVENIQVJMRU4oZCwgbnB0ciwgZGxlbik7IH0KICAgICAgICAgICByZ2IgPSBVQ0RfR1JBUEhCUkVBSyhkKTsKLSAgICAgICAgICBpZiAoKFBSSVYodWNwX2didGFibGUpW2xnYl0gJiAoMSA8PCByZ2IpKSA9PSAwKSBicmVhazsKKyAgICAgICAgICBpZiAoKFBSSVYodWNwX2didGFibGUpW2xnYl0gJiAoMXUgPDwgcmdiKSkgPT0gMCkgYnJlYWs7CiAgICAgICAgICAgbmNvdW50Kys7CiAgICAgICAgICAgbGdiID0gcmdiOwogICAgICAgICAgIG5wdHIgKz0gZGxlbjsKQEAgLTI1ODIsNyArMjU4NCw3IEBACiAgICAgICAgICAgbWIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzdGF0aWMgbWF0Y2ggZGF0YSAqLwogICAgICAgICAgIGNvZGUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdGhpcyBzdWJleHByZXNzaW9uJ3MgY29kZSAqLwogICAgICAgICAgIHB0ciwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogd2hlcmUgd2UgY3VycmVudGx5IGFyZSAqLwotICAgICAgICAgIChpbnQpKHB0ciAtIHN0YXJ0X3N1YmplY3QpLCAgICAgICAgICAgLyogc3RhcnQgb2Zmc2V0ICovCisgICAgICAgICAgKFBDUkUyX1NJWkUpKHB0ciAtIHN0YXJ0X3N1YmplY3QpLCAgICAvKiBzdGFydCBvZmZzZXQgKi8KICAgICAgICAgICBsb2NhbF9vZmZzZXRzLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIG9mZnNldCB2ZWN0b3IgKi8KICAgICAgICAgICBzaXplb2YobG9jYWxfb2Zmc2V0cykvc2l6ZW9mKFBDUkUyX1NJWkUpLCAvKiBzaXplIG9mIHNhbWUgKi8KICAgICAgICAgICBsb2NhbF93b3Jrc3BhY2UsICAgICAgICAgICAgICAgICAgICAgIC8qIHdvcmtzcGFjZSB2ZWN0b3IgKi8KQEAgLTI2MDEsOCArMjYwMyw4IEBACiAgICAgICAgIHsKICAgICAgICAgUENSRTJfU0laRSBsb2NhbF9vZmZzZXRzWzEwMDBdOwogICAgICAgICBpbnQgbG9jYWxfd29ya3NwYWNlWzEwMDBdOwotICAgICAgICBpbnQgY29kZWxpbmsgPSBHRVQoY29kZSwgMSk7Ci0gICAgICAgIGludCBjb25kY29kZTsKKyAgICAgICAgaW50IGNvZGVsaW5rID0gKGludClHRVQoY29kZSwgMSk7CisgICAgICAgIFBDUkUyX1VDSEFSIGNvbmRjb2RlOwogCiAgICAgICAgIC8qIEJlY2F1c2Ugb2YgdGhlIHdheSBhdXRvLWNhbGxvdXQgd29ya3MgZHVyaW5nIGNvbXBpbGUsIGEgY2FsbG91dCBpdGVtCiAgICAgICAgIGlzIGluc2VydGVkIGJldHdlZW4gT1BfQ09ORCBhbmQgYW4gYXNzZXJ0aW9uIGNvbmRpdGlvbi4gVGhpcyBkb2VzIG5vdApAQCAtMjYxMSw4ICsyNjEzLDEwIEBACiAgICAgICAgIGlmIChjb2RlW0xJTktfU0laRSArIDFdID09IE9QX0NBTExPVVQKICAgICAgICAgICAgIHx8IGNvZGVbTElOS19TSVpFICsgMV0gPT0gT1BfQ0FMTE9VVF9TVFIpCiAgICAgICAgICAgewotICAgICAgICAgIHVuc2lnbmVkIGludCBjYWxsb3V0X2xlbmd0aCA9IChjb2RlW0xJTktfU0laRSArIDFdID09IE9QX0NBTExPVVQpCi0gICAgICAgICAgICAgID8gUFJJVihPUF9sZW5ndGhzKVtPUF9DQUxMT1VUXSA6IEdFVChjb2RlLCAyICsgMypMSU5LX1NJWkUpOworICAgICAgICAgIFBDUkUyX1NJWkUgY2FsbG91dF9sZW5ndGggPSAoY29kZVtMSU5LX1NJWkUgKyAxXSA9PSBPUF9DQUxMT1VUKT8KKyAgICAgICAgICAgIChQQ1JFMl9TSVpFKVBSSVYoT1BfbGVuZ3RocylbT1BfQ0FMTE9VVF0gOgorICAgICAgICAgICAgKFBDUkUyX1NJWkUpR0VUKGNvZGUsIDIgKyAzKkxJTktfU0laRSk7CisKICAgICAgICAgICBycmMgPSAwOwogICAgICAgICAgIGlmIChtYi0+Y2FsbG91dCAhPSBOVUxMKQogICAgICAgICAgICAgewpAQCAtMjY3OCw3ICsyNjgyLDcgQEAKIAogICAgICAgICBlbHNlIGlmIChjb25kY29kZSA9PSBPUF9SUkVGKQogICAgICAgICAgIHsKLSAgICAgICAgICBpbnQgdmFsdWUgPSBHRVQyKGNvZGUsIExJTktfU0laRSArIDIpOworICAgICAgICAgIHVuc2lnbmVkIGludCB2YWx1ZSA9IEdFVDIoY29kZSwgTElOS19TSVpFICsgMik7CiAgICAgICAgICAgaWYgKHZhbHVlICE9IFJSRUZfQU5ZKSByZXR1cm4gUENSRTJfRVJST1JfREZBX1VDT05EOwogICAgICAgICAgIGlmIChtYi0+cmVjdXJzaXZlICE9IE5VTEwpCiAgICAgICAgICAgICB7IEFERF9BQ1RJVkUoc3RhdGVfb2Zmc2V0ICsgTElOS19TSVpFICsgMiArIElNTTJfU0laRSwgMCk7IH0KQEAgLTI2OTksNyArMjcwMyw3IEBACiAgICAgICAgICAgICBtYiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZpeGVkIG1hdGNoIGRhdGEgKi8KICAgICAgICAgICAgIGFzc2NvZGUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdGhpcyBzdWJleHByZXNzaW9uJ3MgY29kZSAqLwogICAgICAgICAgICAgcHRyLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB3aGVyZSB3ZSBjdXJyZW50bHkgYXJlICovCi0gICAgICAgICAgICAoaW50KShwdHIgLSBzdGFydF9zdWJqZWN0KSwgICAgICAgICAgIC8qIHN0YXJ0IG9mZnNldCAqLworICAgICAgICAgICAgKFBDUkUyX1NJWkUpKHB0ciAtIHN0YXJ0X3N1YmplY3QpLCAgICAvKiBzdGFydCBvZmZzZXQgKi8KICAgICAgICAgICAgIGxvY2FsX29mZnNldHMsICAgICAgICAgICAgICAgICAgICAgICAgLyogb2Zmc2V0IHZlY3RvciAqLwogICAgICAgICAgICAgc2l6ZW9mKGxvY2FsX29mZnNldHMpL3NpemVvZihQQ1JFMl9TSVpFKSwgLyogc2l6ZSBvZiBzYW1lICovCiAgICAgICAgICAgICBsb2NhbF93b3Jrc3BhY2UsICAgICAgICAgICAgICAgICAgICAgIC8qIHdvcmtzcGFjZSB2ZWN0b3IgKi8KQEAgLTI3NDcsNyArMjc1MSw3IEBACiAgICAgICAgICAgbWIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmaXhlZCBtYXRjaCBkYXRhICovCiAgICAgICAgICAgY2FsbHBhdCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0aGlzIHN1YmV4cHJlc3Npb24ncyBjb2RlICovCiAgICAgICAgICAgcHRyLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB3aGVyZSB3ZSBjdXJyZW50bHkgYXJlICovCi0gICAgICAgICAgKGludCkocHRyIC0gc3RhcnRfc3ViamVjdCksICAgICAgICAgICAvKiBzdGFydCBvZmZzZXQgKi8KKyAgICAgICAgICAoUENSRTJfU0laRSkocHRyIC0gc3RhcnRfc3ViamVjdCksICAgIC8qIHN0YXJ0IG9mZnNldCAqLwogICAgICAgICAgIGxvY2FsX29mZnNldHMsICAgICAgICAgICAgICAgICAgICAgICAgLyogb2Zmc2V0IHZlY3RvciAqLwogICAgICAgICAgIHNpemVvZihsb2NhbF9vZmZzZXRzKS9zaXplb2YoUENSRTJfU0laRSksIC8qIHNpemUgb2Ygc2FtZSAqLwogICAgICAgICAgIGxvY2FsX3dvcmtzcGFjZSwgICAgICAgICAgICAgICAgICAgICAgLyogd29ya3NwYWNlIHZlY3RvciAqLwpAQCAtMjc2OCw3ICsyNzcyLDcgQEAKICAgICAgICAgICB7CiAgICAgICAgICAgZm9yIChyYyA9IHJjKjIgLSAyOyByYyA+PSAwOyByYyAtPSAyKQogICAgICAgICAgICAgewotICAgICAgICAgICAgaW50IGNoYXJjb3VudCA9IGxvY2FsX29mZnNldHNbcmMrMV0gLSBsb2NhbF9vZmZzZXRzW3JjXTsKKyAgICAgICAgICAgIFBDUkUyX1NJWkUgY2hhcmNvdW50ID0gbG9jYWxfb2Zmc2V0c1tyYysxXSAtIGxvY2FsX29mZnNldHNbcmNdOwogI2lmIGRlZmluZWQgU1VQUE9SVF9VTklDT0RFICYmIFBDUkUyX0NPREVfVU5JVF9XSURUSCAhPSAzMgogICAgICAgICAgICAgaWYgKHV0ZikKICAgICAgICAgICAgICAgewpAQCAtMjc3OSw3ICsyNzgzLDggQEAKICNlbmRpZgogICAgICAgICAgICAgaWYgKGNoYXJjb3VudCA+IDApCiAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgQUREX05FV19EQVRBKC0oc3RhdGVfb2Zmc2V0ICsgTElOS19TSVpFICsgMSksIDAsIChjaGFyY291bnQgLSAxKSk7CisgICAgICAgICAgICAgIEFERF9ORVdfREFUQSgtKHN0YXRlX29mZnNldCArIExJTktfU0laRSArIDEpLCAwLAorICAgICAgICAgICAgICAgIChpbnQpKGNoYXJjb3VudCAtIDEpKTsKICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICB7CkBAIC0yNzk4LDcgKzI4MDMsNyBAQAogICAgICAgY2FzZSBPUF9TQ0JSQVBPUzoKICAgICAgIGNhc2UgT1BfQlJBUE9TWkVSTzoKICAgICAgICAgewotICAgICAgICBpbnQgY2hhcmNvdW50LCBtYXRjaGVkX2NvdW50OworICAgICAgICBQQ1JFMl9TSVpFIGNoYXJjb3VudCwgbWF0Y2hlZF9jb3VudDsKICAgICAgICAgUENSRTJfU1BUUiBsb2NhbF9wdHIgPSBwdHI7CiAgICAgICAgIEJPT0wgYWxsb3dfemVybzsKIApAQCAtMjgyMSw3ICsyODI2LDcgQEAKICAgICAgICAgICAgIG1iLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZml4ZWQgbWF0Y2ggZGF0YSAqLwogICAgICAgICAgICAgY29kZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0aGlzIHN1YmV4cHJlc3Npb24ncyBjb2RlICovCiAgICAgICAgICAgICBsb2NhbF9wdHIsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHdoZXJlIHdlIGN1cnJlbnRseSBhcmUgKi8KLSAgICAgICAgICAgIChpbnQpKHB0ciAtIHN0YXJ0X3N1YmplY3QpLCAgICAgICAgICAgLyogc3RhcnQgb2Zmc2V0ICovCisgICAgICAgICAgICAoUENSRTJfU0laRSkocHRyIC0gc3RhcnRfc3ViamVjdCksICAgIC8qIHN0YXJ0IG9mZnNldCAqLwogICAgICAgICAgICAgbG9jYWxfb2Zmc2V0cywgICAgICAgICAgICAgICAgICAgICAgICAvKiBvZmZzZXQgdmVjdG9yICovCiAgICAgICAgICAgICBzaXplb2YobG9jYWxfb2Zmc2V0cykvc2l6ZW9mKFBDUkUyX1NJWkUpLCAvKiBzaXplIG9mIHNhbWUgKi8KICAgICAgICAgICAgIGxvY2FsX3dvcmtzcGFjZSwgICAgICAgICAgICAgICAgICAgICAgLyogd29ya3NwYWNlIHZlY3RvciAqLwpAQCAtMjg3MiwxMSArMjg3NywxMSBAQAogICAgICAgICAgICAgewogICAgICAgICAgICAgUENSRTJfU1BUUiBwID0gcHRyOwogICAgICAgICAgICAgUENSRTJfU1BUUiBwcCA9IGxvY2FsX3B0cjsKLSAgICAgICAgICAgIGNoYXJjb3VudCA9IChpbnQpKHBwIC0gcCk7CisgICAgICAgICAgICBjaGFyY291bnQgPSAoUENSRTJfU0laRSkocHAgLSBwKTsKICNpZiBkZWZpbmVkIFNVUFBPUlRfVU5JQ09ERSAmJiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggIT0gMzIKICAgICAgICAgICAgIGlmICh1dGYpIHdoaWxlIChwIDwgcHApIGlmIChOT1RfRklSU1RDVSgqcCsrKSkgY2hhcmNvdW50LS07CiAjZW5kaWYKLSAgICAgICAgICAgIEFERF9ORVdfREFUQSgtbmV4dF9zdGF0ZV9vZmZzZXQsIDAsIChjaGFyY291bnQgLSAxKSk7CisgICAgICAgICAgICBBRERfTkVXX0RBVEEoLW5leHRfc3RhdGVfb2Zmc2V0LCAwLCAoaW50KShjaGFyY291bnQgLSAxKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0yODkzLDcgKzI4OTgsNyBAQAogICAgICAgICAgIG1iLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZml4ZWQgbWF0Y2ggZGF0YSAqLwogICAgICAgICAgIGNvZGUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdGhpcyBzdWJleHByZXNzaW9uJ3MgY29kZSAqLwogICAgICAgICAgIHB0ciwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogd2hlcmUgd2UgY3VycmVudGx5IGFyZSAqLwotICAgICAgICAgIChpbnQpKHB0ciAtIHN0YXJ0X3N1YmplY3QpLCAgICAgICAgICAgLyogc3RhcnQgb2Zmc2V0ICovCisgICAgICAgICAgKFBDUkUyX1NJWkUpKHB0ciAtIHN0YXJ0X3N1YmplY3QpLCAgICAvKiBzdGFydCBvZmZzZXQgKi8KICAgICAgICAgICBsb2NhbF9vZmZzZXRzLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIG9mZnNldCB2ZWN0b3IgKi8KICAgICAgICAgICBzaXplb2YobG9jYWxfb2Zmc2V0cykvc2l6ZW9mKFBDUkUyX1NJWkUpLCAvKiBzaXplIG9mIHNhbWUgKi8KICAgICAgICAgICBsb2NhbF93b3Jrc3BhY2UsICAgICAgICAgICAgICAgICAgICAgIC8qIHdvcmtzcGFjZSB2ZWN0b3IgKi8KQEAgLTI5MDMsNyArMjkwOCw3IEBACiAgICAgICAgIGlmIChyYyA+PSAwKQogICAgICAgICAgIHsKICAgICAgICAgICBQQ1JFMl9TUFRSIGVuZF9zdWJwYXR0ZXJuID0gY29kZTsKLSAgICAgICAgICBpbnQgY2hhcmNvdW50ID0gbG9jYWxfb2Zmc2V0c1sxXSAtIGxvY2FsX29mZnNldHNbMF07CisgICAgICAgICAgUENSRTJfU0laRSBjaGFyY291bnQgPSBsb2NhbF9vZmZzZXRzWzFdIC0gbG9jYWxfb2Zmc2V0c1swXTsKICAgICAgICAgICBpbnQgbmV4dF9zdGF0ZV9vZmZzZXQsIHJlcGVhdF9zdGF0ZV9vZmZzZXQ7CiAKICAgICAgICAgICBkbyB7IGVuZF9zdWJwYXR0ZXJuICs9IEdFVChlbmRfc3VicGF0dGVybiwgMSk7IH0KQEAgLTI5NjMsOSArMjk2OCw5IEBACiAgICAgICAgICAgICAgIHdoaWxlIChwIDwgcHApIGlmIChOT1RfRklSU1RDVSgqcCsrKSkgY2hhcmNvdW50LS07CiAgICAgICAgICAgICAgIH0KICNlbmRpZgotICAgICAgICAgICAgQUREX05FV19EQVRBKC1uZXh0X3N0YXRlX29mZnNldCwgMCwgKGNoYXJjb3VudCAtIDEpKTsKKyAgICAgICAgICAgIEFERF9ORVdfREFUQSgtbmV4dF9zdGF0ZV9vZmZzZXQsIDAsIChpbnQpKGNoYXJjb3VudCAtIDEpKTsKICAgICAgICAgICAgIGlmIChyZXBlYXRfc3RhdGVfb2Zmc2V0ID49IDApCi0gICAgICAgICAgICAgIHsgQUREX05FV19EQVRBKC1yZXBlYXRfc3RhdGVfb2Zmc2V0LCAwLCAoY2hhcmNvdW50IC0gMSkpOyB9CisgICAgICAgICAgICAgIHsgQUREX05FV19EQVRBKC1yZXBlYXRfc3RhdGVfb2Zmc2V0LCAwLCAoaW50KShjaGFyY291bnQgLSAxKSk7IH0KICAgICAgICAgICAgIH0KICAgICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKHJjICE9IFBDUkUyX0VSUk9SX05PTUFUQ0gpIHJldHVybiByYzsKQEAgLTMwMTgsNyArMzAyMyw3IEBACiAgICAgICAgICAgICByZXR1cm4gcnJjOyAgIC8qIEFiYW5kb24gKi8KICAgICAgICAgICB9CiAgICAgICAgIGlmIChycmMgPT0gMCkKLSAgICAgICAgICB7IEFERF9BQ1RJVkUoc3RhdGVfb2Zmc2V0ICsgY2FsbG91dF9sZW5ndGgsIDApOyB9CisgICAgICAgICAgeyBBRERfQUNUSVZFKHN0YXRlX29mZnNldCArIChpbnQpY2FsbG91dF9sZW5ndGgsIDApOyB9CiAgICAgICAgIH0KICAgICAgIGJyZWFrOwogCkBAIC0zMzA3LDEwICszMzEyLDEwIEBACiAgIG9mZnNldCB0byBiZSBhbiBhYnNvbHV0ZSBvZmZzZXQgaW4gdGhlIHdob2xlIHN0cmluZy4gKi8KIAogICBtYXRjaF9kYXRhLT5yYyA9IFBSSVYodmFsaWRfdXRmKShjaGVja19zdWJqZWN0LAotICAgIGxlbmd0aCAtIChjaGVja19zdWJqZWN0IC0gc3ViamVjdCksICYobWF0Y2hfZGF0YS0+c3RhcnRjaGFyKSk7CisgICAgbGVuZ3RoIC0gKFBDUkUyX1NJWkUpKGNoZWNrX3N1YmplY3QgLSBzdWJqZWN0KSwgJihtYXRjaF9kYXRhLT5zdGFydGNoYXIpKTsKICAgaWYgKG1hdGNoX2RhdGEtPnJjICE9IDApCiAgICAgewotICAgIG1hdGNoX2RhdGEtPnN0YXJ0Y2hhciArPSBjaGVja19zdWJqZWN0IC0gc3ViamVjdDsKKyAgICBtYXRjaF9kYXRhLT5zdGFydGNoYXIgKz0gKFBDUkUyX1NJWkUpKGNoZWNrX3N1YmplY3QgLSBzdWJqZWN0KTsKICAgICByZXR1cm4gbWF0Y2hfZGF0YS0+cmM7CiAgICAgfQogICB9CkBAIC0zMzMyLDcgKzMzMzcsOCBAQAogICAgICAgewogICAgICAgZmlyc3RfY3UyID0gVEFCTEVfR0VUKGZpcnN0X2N1LCBtYi0+dGFibGVzICsgZmNjX29mZnNldCwgZmlyc3RfY3UpOwogI2lmIGRlZmluZWQgU1VQUE9SVF9VTklDT0RFICYmIFBDUkUyX0NPREVfVU5JVF9XSURUSCAhPSA4Ci0gICAgICBpZiAodXRmICYmIGZpcnN0X2N1ID4gMTI3KSBmaXJzdF9jdTIgPSBVQ0RfT1RIRVJDQVNFKGZpcnN0X2N1KTsKKyAgICAgIGlmICh1dGYgJiYgZmlyc3RfY3UgPiAxMjcpCisgICAgICAgIGZpcnN0X2N1MiA9IChQQ1JFMl9VQ0hBUilVQ0RfT1RIRVJDQVNFKGZpcnN0X2N1KTsKICNlbmRpZgogICAgICAgfQogICAgIH0KQEAgLTMzNTIsNyArMzM1OCw3IEBACiAgICAgewogICAgIHJlcV9jdTIgPSBUQUJMRV9HRVQocmVxX2N1LCBtYi0+dGFibGVzICsgZmNjX29mZnNldCwgcmVxX2N1KTsKICNpZiBkZWZpbmVkIFNVUFBPUlRfVU5JQ09ERSAmJiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggIT0gOAotICAgIGlmICh1dGYgJiYgcmVxX2N1ID4gMTI3KSByZXFfY3UyID0gVUNEX09USEVSQ0FTRShyZXFfY3UpOworICAgIGlmICh1dGYgJiYgcmVxX2N1ID4gMTI3KSByZXFfY3UyID0gKFBDUkUyX1VDSEFSKVVDRF9PVEhFUkNBU0UocmVxX2N1KTsKICNlbmRpZgogICAgIH0KICAgfQpAQCAtMzU2MCw5ICszNTY2LDkgQEAKICAgICBzdGFydF9tYXRjaCwgICAgICAgICAgICAgICAgICAvKiB3aGVyZSB3ZSBjdXJyZW50bHkgYXJlICovCiAgICAgc3RhcnRfb2Zmc2V0LCAgICAgICAgICAgICAgICAgLyogc3RhcnQgb2Zmc2V0IGluIHN1YmplY3QgKi8KICAgICBtYXRjaF9kYXRhLT5vdmVjdG9yLCAgICAgICAgICAvKiBvZmZzZXQgdmVjdG9yICovCi0gICAgbWF0Y2hfZGF0YS0+b3ZlY2NvdW50ICogMiwgICAgLyogYWN0dWFsIHNpemUgb2Ygc2FtZSAqLworICAgICh1aW50MzJfdCltYXRjaF9kYXRhLT5vdmVjY291bnQgKiAyLCAgLyogYWN0dWFsIHNpemUgb2Ygc2FtZSAqLwogICAgIHdvcmtzcGFjZSwgICAgICAgICAgICAgICAgICAgIC8qIHdvcmtzcGFjZSB2ZWN0b3IgKi8KLSAgICB3c2NvdW50LCAgICAgICAgICAgICAgICAgICAgICAvKiBzaXplIG9mIHNhbWUgKi8KKyAgICAoaW50KXdzY291bnQsICAgICAgICAgICAgICAgICAvKiBzaXplIG9mIHNhbWUgKi8KICAgICAwKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmdW5jdGlvbiByZWN1cnNlIGxldmVsICovCiAKICAgLyogQW55dGhpbmcgb3RoZXIgdGhhbiAibm8gbWF0Y2giIG1lYW5zIHdlIGFyZSBkb25lLCBhbHdheXM7IG90aGVyd2lzZSwgY2FycnkKQEAgLTM1NzYsNyArMzU4Miw3IEBACiAgICAgICBtYXRjaF9kYXRhLT5vdmVjdG9yWzFdID0gKFBDUkUyX1NJWkUpKGVuZF9zdWJqZWN0IC0gc3ViamVjdCk7CiAgICAgICB9CiAgICAgbWF0Y2hfZGF0YS0+bGVmdGNoYXIgPSAoUENSRTJfU0laRSkobWItPnN0YXJ0X3VzZWRfcHRyIC0gc3ViamVjdCk7Ci0gICAgbWF0Y2hfZGF0YS0+cmlnaHRjaGFyID0gbWItPmxhc3RfdXNlZF9wdHIgLSBzdWJqZWN0OworICAgIG1hdGNoX2RhdGEtPnJpZ2h0Y2hhciA9IChQQ1JFMl9TSVpFKSggbWItPmxhc3RfdXNlZF9wdHIgLSBzdWJqZWN0KTsKICAgICBtYXRjaF9kYXRhLT5zdGFydGNoYXIgPSAoUENSRTJfU0laRSkoc3RhcnRfbWF0Y2ggLSBzdWJqZWN0KTsKICAgICBtYXRjaF9kYXRhLT5yYyA9IHJjOwogICAgIHJldHVybiByYzsKZGlmZiAtLWdpdCBhL2Rpc3QyL3NyYy9wY3JlMl9lcnJvci5jIGIvZGlzdDIvc3JjL3BjcmUyX2Vycm9yLmMKaW5kZXggNmI0NzU2YS4uNzdmZDVmNCAxMDA2NDQKLS0tIGEvZGlzdDIvc3JjL3BjcmUyX2Vycm9yLmMKKysrIGIvZGlzdDIvc3JjL3BjcmUyX2Vycm9yLmMKQEAgLTYyLDcgKzYyLDcgQEAKIHN1YnN0cmluZywgc28gdGhhdCB0aGUgd2hvbGUgc3RyaW5nIGVuZHMgd2l0aCBcMFwwLCB3aGljaCBjYW4gYmUgZGV0ZWN0ZWQgd2hlbgogY291bnRpbmcgdGhyb3VnaC4gKi8KIAotc3RhdGljIGNvbnN0IGNoYXIgY29tcGlsZV9lcnJvcl90ZXh0c1tdID0KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGNvbXBpbGVfZXJyb3JfdGV4dHNbXSA9CiAgICJubyBlcnJvclwwIgogICAiXFwgYXQgZW5kIG9mIHBhdHRlcm5cMCIKICAgIlxcYyBhdCBlbmQgb2YgcGF0dGVyblwwIgpAQCAtMTA2LDcgKzEwNiw3IEBACiAgICJjaGFyYWN0ZXIgY29kZSBwb2ludCB2YWx1ZSBpbiBcXHh7fSBvciBcXG97fSBpcyB0b28gbGFyZ2VcMCIKICAgLyogMzUgKi8KICAgImludmFsaWQgY29uZGl0aW9uICg/KDApXDAiCi0gICJcXEMgaXMgbm90IGFsbG93ZWQgaW4gYSBsb29rYmVoaW5kIGFzc2VydGlvblwwIgorICAiXFxDIGlzIG5vdCBhbGxvd2VkIGluIGEgbG9va2JlaGluZCBhc3NlcnRpb24gaW4gVVRGLSIgWFNUUklORyhQQ1JFMl9DT0RFX1VOSVRfV0lEVEgpICIgbW9kZVwwIgogICAiUENSRSBkb2VzIG5vdCBzdXBwb3J0IFxcTCwgXFxsLCBcXE57bmFtZX0sIFxcVSwgb3IgXFx1XDAiCiAgICJudW1iZXIgYWZ0ZXIgKD9DIGlzIGdyZWF0ZXIgdGhhbiAyNTVcMCIKICAgImNsb3NpbmcgcGFyZW50aGVzaXMgZm9yICg/QyBleHBlY3RlZFwwIgpAQCAtMTc3LDcgKzE3Nyw3IEBACiAKIC8qIE1hdGNoLXRpbWUgYW5kIFVURiBlcnJvciB0ZXh0cyBhcmUgaW4gdGhlIHNhbWUgZm9ybWF0LiAqLwogCi1zdGF0aWMgY29uc3QgY2hhciBtYXRjaF9lcnJvcl90ZXh0c1tdID0KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1hdGNoX2Vycm9yX3RleHRzW10gPQogICAibm8gZXJyb3JcMCIKICAgIm5vIG1hdGNoXDAiCiAgICJwYXJ0aWFsIG1hdGNoXDAiCkBAIC0yNTIsNiArMjUyLDcgQEAKICAgLyogNjAgKi8KICAgIm1hdGNoIHdpdGggZW5kIGJlZm9yZSBzdGFydCBpcyBub3Qgc3VwcG9ydGVkXDAiCiAgICJ0b28gbWFueSByZXBsYWNlbWVudHMgKG1vcmUgdGhhbiBJTlRfTUFYKVwwIgorICAiYmFkIHNlcmlhbGl6ZWQgZGF0YVwwIgogICA7CiAKIApAQCAtMjc2LDMyICsyNzcsMzIgQEAKIFBDUkUyX0VYUF9ERUZOIGludCBQQ1JFMl9DQUxMX0NPTlZFTlRJT04KIHBjcmUyX2dldF9lcnJvcl9tZXNzYWdlKGludCBlbnVtYmVyLCBQQ1JFMl9VQ0hBUiAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKIHsKLWNoYXIgeGJ1ZmZbMTI4XTsKLWNvbnN0IGNoYXIgKm1lc3NhZ2U7Citjb25zdCB1bnNpZ25lZCBjaGFyICptZXNzYWdlOwogc2l6ZV90IGk7Ci11aW50MzJfdCBuOworaW50IG47CiAKIGlmIChzaXplID09IDApIHJldHVybiBQQ1JFMl9FUlJPUl9OT01FTU9SWTsKIAotaWYgKGVudW1iZXIgPiBDT01QSUxFX0VSUk9SX0JBU0UpICAvKiBDb21waWxlIGVycm9yICovCitpZiAoZW51bWJlciA+PSBDT01QSUxFX0VSUk9SX0JBU0UpICAvKiBDb21waWxlIGVycm9yICovCiAgIHsKICAgbWVzc2FnZSA9IGNvbXBpbGVfZXJyb3JfdGV4dHM7CiAgIG4gPSBlbnVtYmVyIC0gQ09NUElMRV9FUlJPUl9CQVNFOwogICB9Ci1lbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1hdGNoIG9yIFVURiBlcnJvciAqLworZWxzZSBpZiAoZW51bWJlciA8IDApICAgICAgICAgICAgICAgLyogTWF0Y2ggb3IgVVRGIGVycm9yICovCiAgIHsKICAgbWVzc2FnZSA9IG1hdGNoX2Vycm9yX3RleHRzOwogICBuID0gLWVudW1iZXI7CiAgIH0KK2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEludmFsaWQgZXJyb3IgbnVtYmVyICovCisgIHsKKyAgbWVzc2FnZSA9ICh1bnNpZ25lZCBjaGFyICopIlwwIjsgIC8qIEVtcHR5IG1lc3NhZ2UgbGlzdCAqLworICBuID0gMTsKKyAgfQogCiBmb3IgKDsgbiA+IDA7IG4tLSkKICAgewogICB3aGlsZSAoKm1lc3NhZ2UrKyAhPSBDSEFSX05VTEwpIHt9OwotICBpZiAoKm1lc3NhZ2UgPT0gQ0hBUl9OVUxMKQotICAgIHsKLSAgICBzcHJpbnRmKHhidWZmLCAiTm8gdGV4dCBmb3IgZXJyb3IgJWQiLCBlbnVtYmVyKTsKLSAgICBicmVhazsKLSAgICB9CisgIGlmICgqbWVzc2FnZSA9PSBDSEFSX05VTEwpIHJldHVybiBQQ1JFMl9FUlJPUl9CQUREQVRBOwogICB9CiAKIGZvciAoaSA9IDA7ICptZXNzYWdlICE9IDA7IGkrKykKQEAgLTMxNSw3ICszMTYsNyBAQAogICB9CiAKIGJ1ZmZlcltpXSA9IDA7Ci1yZXR1cm4gaTsKK3JldHVybiAoaW50KWk7CiB9CiAKIC8qIEVuZCBvZiBwY3JlMl9lcnJvci5jICovCmRpZmYgLS1naXQgYS9kaXN0Mi9zcmMvcGNyZTJfaW50ZXJuYWwuaCBiL2Rpc3QyL3NyYy9wY3JlMl9pbnRlcm5hbC5oCmluZGV4IDdjOWY2NmMuLjU2OTA4NzAgMTAwNjQ0Ci0tLSBhL2Rpc3QyL3NyYy9wY3JlMl9pbnRlcm5hbC5oCisrKyBiL2Rpc3QyL3NyYy9wY3JlMl9pbnRlcm5hbC5oCkBAIC0yLDcgKzIsNyBAQAogKiAgICAgIFBlcmwtQ29tcGF0aWJsZSBSZWd1bGFyIEV4cHJlc3Npb25zICAgICAgICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLS8qIFBDUkUgaXMgYSBsaWJyYXJ5IG9mIGZ1bmN0aW9ucyB0byBzdXBwb3J0IHJlZ3VsYXIgZXhwcmVzc2lvbnMgd2hvc2Ugc3ludGF4CisvKiBQQ1JFMiBpcyBhIGxpYnJhcnkgb2YgZnVuY3Rpb25zIHRvIHN1cHBvcnQgcmVndWxhciBleHByZXNzaW9ucyB3aG9zZSBzeW50YXgKIGFuZCBzZW1hbnRpY3MgYXJlIGFzIGNsb3NlIGFzIHBvc3NpYmxlIHRvIHRob3NlIG9mIHRoZSBQZXJsIDUgbGFuZ3VhZ2UuCiAKICAgICAgICAgICAgICAgICAgICAgICAgV3JpdHRlbiBieSBQaGlsaXAgSGF6ZWwKQEAgLTczLDYgKzczLDE0IEBACiAjaW5jbHVkZSA8dmFsZ3JpbmQvbWVtY2hlY2suaD4KICNlbmRpZgogCisvKiBPbGRlciB2ZXJzaW9ucyBvZiBNU1ZDIGxhY2sgc25wcmludGYoKS4gVGhpcyBkZWZpbmUgYWxsb3dzIGZvcgord2FybmluZy9lcnJvci1mcmVlIGNvbXBpbGF0aW9uIGFuZCB0ZXN0aW5nIHdpdGggTVNWQyBjb21waWxlcnMgYmFjayB0byBhdCBsZWFzdAorTVNWQyAxMC8yMDEwLiBFeGNlcHQgZm9yIFZDNiAod2hpY2ggaXMgbWlzc2luZyBzb21lIGZ1bmRhbWVudGFscyBhbmQgZmFpbHMpLiAqLworCisjaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgKF9NU0NfVkVSIDwgMTkwMCkKKyNkZWZpbmUgc25wcmludGYgX3NucHJpbnRmCisjZW5kaWYKKwogLyogV2hlbiBjb21waWxpbmcgYSBETEwgZm9yIFdpbmRvd3MsIHRoZSBleHBvcnRlZCBzeW1ib2xzIGhhdmUgdG8gYmUgZGVjbGFyZWQKIHVzaW5nIHNvbWUgTVMgbWFnaWMuIEkgZm91bmQgc29tZSB1c2VmdWwgaW5mb3JtYXRpb24gb24gdGhpcyB3ZWIgcGFnZToKIGh0dHA6Ly9tc2RuMi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkveTRoN2JjeTYoVlMuODApLmFzcHguIEFjY29yZGluZyB0byB0aGUKQEAgLTE2OSw3ICsxNzcsNyBAQAogI2VuZGlmCiAKIC8qIFdoZW4gY29tcGlsaW5nIGZvciB1c2Ugd2l0aCB0aGUgVmlydHVhbCBQYXNjYWwgY29tcGlsZXIsIHRoZXNlIGZ1bmN0aW9ucwotbmVlZCB0byBoYXZlIHRoZWlyIG5hbWVzIGNoYW5nZWQuIFBDUkUgbXVzdCBiZSBjb21waWxlZCB3aXRoIHRoZSAtRFZQQ09NUEFUCituZWVkIHRvIGhhdmUgdGhlaXIgbmFtZXMgY2hhbmdlZC4gUENSRTIgbXVzdCBiZSBjb21waWxlZCB3aXRoIHRoZSAtRFZQQ09NUEFUCiBvcHRpb24gb24gdGhlIGNvbW1hbmQgbGluZS4gKi8KIAogI2lmZGVmIFZQQ09NUEFUCkBAIC0xOTIsNyArMjAwLDcgQEAKICNkZWZpbmUgbWVtbW92ZShhLCBiLCBjKSBiY29weShiLCBhLCBjKQogI2Vsc2UgIC8qIEhBVkVfQkNPUFkgKi8KIHN0YXRpYyB2b2lkICoKLXBjcmVfbWVtbW92ZSh2b2lkICpkLCBjb25zdCB2b2lkICpzLCBzaXplX3QgbikKK3BjcmUyX21lbW1vdmUodm9pZCAqZCwgY29uc3Qgdm9pZCAqcywgc2l6ZV90IG4pCiB7CiBzaXplX3QgaTsKIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSAodW5zaWduZWQgY2hhciAqKWQ7CkBAIC0yMTAsNyArMjE4LDcgQEAKICAgcmV0dXJuICh2b2lkICopKGRlc3QgLSBuKTsKICAgfQogfQotI2RlZmluZSBtZW1tb3ZlKGEsIGIsIGMpIHBjcmVfbWVtbW92ZShhLCBiLCBjKQorI2RlZmluZSBtZW1tb3ZlKGEsIGIsIGMpIHBjcmUyX21lbW1vdmUoYSwgYiwgYykKICNlbmRpZiAgIC8qIG5vdCBIQVZFX0JDT1BZICovCiAjZW5kaWYgICAvKiBub3QgSEFWRV9NRU1NT1ZFICovCiAjZW5kaWYgICAvKiBub3QgVlBDT01QQVQgKi8KQEAgLTIzNCw4ICsyNDIsMTUgQEAKIAogI2RlZmluZSBNQVhfVVRGX0NPREVfUE9JTlQgMHgxMGZmZmYKIAotLyogQ29tcGlsZS10aW1lIGVycm9ycyBhcmUgYWRkZWQgdG8gdGhpcyB2YWx1ZS4gQXMgdGhleSBhcmUgZG9jdW1lbnRlZCwgaXQKLXNob3VsZCBwcm9iYWJseSBuZXZlciBiZSBjaGFuZ2VkLiAqLworLyogQ29tcGlsZS10aW1lIHBvc2l0aXZlIGVycm9yIG51bWJlcnMgKGFsbCBleGNlcHQgVVRGIGVycm9ycywgd2hpY2ggYXJlCituZWdhdGl2ZSkgc3RhcnQgYXQgdGhpcyB2YWx1ZS4gSXQgc2hvdWxkIHByb2JhYmx5IG5ldmVyIGJlIGNoYW5nZWQsIGluIGNhc2UKK3NvbWUgYXBwbGljYXRpb24gaXMgY2hlY2tpbmcgZm9yIHNwZWNpZmljIG51bWJlcnMuIFRoZXJlIGlzIGEgY29weSBvZiB0aGlzCisjZGVmaW5lIGluIHBjcmUycG9zaXguYyAod2hpY2ggbm93IG5vIGxvbmdlciBpbmNsdWRlcyB0aGlzIGZpbGUpLiBJZGVhbGx5LCBhCit3YXkgb2YgaGF2aW5nIGEgc2luZ2xlIGRlZmluaXRpb24gc2hvdWxkIGJlIGZvdW5kLCBidXQgYXMgdGhlIG51bWJlciBpcwordW5saWtlbHkgdG8gY2hhbmdlLCB0aGlzIGlzIG5vdCBhIHByZXNzaW5nIGlzc3VlLiBUaGUgb3JpZ2luYWwgcmVhc29uIGZvcgoraGF2aW5nIGEgYmFzZSBvdGhlciB0aGFuIDAgd2FzIHRvIGtlZXAgdGhlIGFic29sdXRlIHZhbHVlcyBvZiBjb21waWxlLXRpbWUgYW5kCitydW4tdGltZSBlcnJvciBudW1iZXJzIG51bWVyaWNhbGx5IGRpZmZlcmVudCwgYnV0IGluIHRoZSBldmVudCB0aGUgY29kZSBkb2VzCitub3QgcmVseSBvbiB0aGlzLiAqLwogCiAjZGVmaW5lIENPTVBJTEVfRVJST1JfQkFTRSAxMDAKIApAQCAtMjY5LDIxICsyODQsMjEgQEAKIAogI2RlZmluZSBHRVRVVEY4KGMsIGVwdHIpIFwKICAgICB7IFwKLSAgICBpZiAoKGMgJiAweDIwKSA9PSAwKSBcCi0gICAgICBjID0gKChjICYgMHgxZikgPDwgNikgfCAoZXB0clsxXSAmIDB4M2YpOyBcCi0gICAgZWxzZSBpZiAoKGMgJiAweDEwKSA9PSAwKSBcCi0gICAgICBjID0gKChjICYgMHgwZikgPDwgMTIpIHwgKChlcHRyWzFdICYgMHgzZikgPDwgNikgfCAoZXB0clsyXSAmIDB4M2YpOyBcCi0gICAgZWxzZSBpZiAoKGMgJiAweDA4KSA9PSAwKSBcCi0gICAgICBjID0gKChjICYgMHgwNykgPDwgMTgpIHwgKChlcHRyWzFdICYgMHgzZikgPDwgMTIpIHwgXAotICAgICAgKChlcHRyWzJdICYgMHgzZikgPDwgNikgfCAoZXB0clszXSAmIDB4M2YpOyBcCi0gICAgZWxzZSBpZiAoKGMgJiAweDA0KSA9PSAwKSBcCi0gICAgICBjID0gKChjICYgMHgwMykgPDwgMjQpIHwgKChlcHRyWzFdICYgMHgzZikgPDwgMTgpIHwgXAotICAgICAgICAgICgoZXB0clsyXSAmIDB4M2YpIDw8IDEyKSB8ICgoZXB0clszXSAmIDB4M2YpIDw8IDYpIHwgXAotICAgICAgICAgIChlcHRyWzRdICYgMHgzZik7IFwKKyAgICBpZiAoKGMgJiAweDIwdSkgPT0gMCkgXAorICAgICAgYyA9ICgoYyAmIDB4MWZ1KSA8PCA2KSB8IChlcHRyWzFdICYgMHgzZnUpOyBcCisgICAgZWxzZSBpZiAoKGMgJiAweDEwdSkgPT0gMCkgXAorICAgICAgYyA9ICgoYyAmIDB4MGZ1KSA8PCAxMikgfCAoKGVwdHJbMV0gJiAweDNmdSkgPDwgNikgfCAoZXB0clsyXSAmIDB4M2Z1KTsgXAorICAgIGVsc2UgaWYgKChjICYgMHgwOHUpID09IDApIFwKKyAgICAgIGMgPSAoKGMgJiAweDA3dSkgPDwgMTgpIHwgKChlcHRyWzFdICYgMHgzZnUpIDw8IDEyKSB8IFwKKyAgICAgICgoZXB0clsyXSAmIDB4M2Z1KSA8PCA2KSB8IChlcHRyWzNdICYgMHgzZnUpOyBcCisgICAgZWxzZSBpZiAoKGMgJiAweDA0dSkgPT0gMCkgXAorICAgICAgYyA9ICgoYyAmIDB4MDN1KSA8PCAyNCkgfCAoKGVwdHJbMV0gJiAweDNmdSkgPDwgMTgpIHwgXAorICAgICAgICAgICgoZXB0clsyXSAmIDB4M2Z1KSA8PCAxMikgfCAoKGVwdHJbM10gJiAweDNmdSkgPDwgNikgfCBcCisgICAgICAgICAgKGVwdHJbNF0gJiAweDNmdSk7IFwKICAgICBlbHNlIFwKLSAgICAgIGMgPSAoKGMgJiAweDAxKSA8PCAzMCkgfCAoKGVwdHJbMV0gJiAweDNmKSA8PCAyNCkgfCBcCi0gICAgICAgICAgKChlcHRyWzJdICYgMHgzZikgPDwgMTgpIHwgKChlcHRyWzNdICYgMHgzZikgPDwgMTIpIHwgXAotICAgICAgICAgICgoZXB0cls0XSAmIDB4M2YpIDw8IDYpIHwgKGVwdHJbNV0gJiAweDNmKTsgXAorICAgICAgYyA9ICgoYyAmIDB4MDF1KSA8PCAzMCkgfCAoKGVwdHJbMV0gJiAweDNmdSkgPDwgMjQpIHwgXAorICAgICAgICAgICgoZXB0clsyXSAmIDB4M2Z1KSA8PCAxOCkgfCAoKGVwdHJbM10gJiAweDNmdSkgPDwgMTIpIHwgXAorICAgICAgICAgICgoZXB0cls0XSAmIDB4M2Z1KSA8PCA2KSB8IChlcHRyWzVdICYgMHgzZnUpOyBcCiAgICAgfQogCiAvKiBCYXNlIG1hY3JvIHRvIHBpY2sgdXAgdGhlIHJlbWFpbmluZyBieXRlcyBvZiBhIFVURi04IGNoYXJhY3RlciwgYWR2YW5jaW5nCkBAIC0yOTEsMzEgKzMwNiwzMSBAQAogCiAjZGVmaW5lIEdFVFVURjhJTkMoYywgZXB0cikgXAogICAgIHsgXAotICAgIGlmICgoYyAmIDB4MjApID09IDApIFwKLSAgICAgIGMgPSAoKGMgJiAweDFmKSA8PCA2KSB8ICgqZXB0cisrICYgMHgzZik7IFwKLSAgICBlbHNlIGlmICgoYyAmIDB4MTApID09IDApIFwKKyAgICBpZiAoKGMgJiAweDIwdSkgPT0gMCkgXAorICAgICAgYyA9ICgoYyAmIDB4MWZ1KSA8PCA2KSB8ICgqZXB0cisrICYgMHgzZnUpOyBcCisgICAgZWxzZSBpZiAoKGMgJiAweDEwdSkgPT0gMCkgXAogICAgICAgeyBcCi0gICAgICBjID0gKChjICYgMHgwZikgPDwgMTIpIHwgKCgqZXB0ciAmIDB4M2YpIDw8IDYpIHwgKGVwdHJbMV0gJiAweDNmKTsgXAorICAgICAgYyA9ICgoYyAmIDB4MGZ1KSA8PCAxMikgfCAoKCplcHRyICYgMHgzZnUpIDw8IDYpIHwgKGVwdHJbMV0gJiAweDNmdSk7IFwKICAgICAgIGVwdHIgKz0gMjsgXAogICAgICAgfSBcCi0gICAgZWxzZSBpZiAoKGMgJiAweDA4KSA9PSAwKSBcCisgICAgZWxzZSBpZiAoKGMgJiAweDA4dSkgPT0gMCkgXAogICAgICAgeyBcCi0gICAgICBjID0gKChjICYgMHgwNykgPDwgMTgpIHwgKCgqZXB0ciAmIDB4M2YpIDw8IDEyKSB8IFwKLSAgICAgICAgICAoKGVwdHJbMV0gJiAweDNmKSA8PCA2KSB8IChlcHRyWzJdICYgMHgzZik7IFwKKyAgICAgIGMgPSAoKGMgJiAweDA3dSkgPDwgMTgpIHwgKCgqZXB0ciAmIDB4M2Z1KSA8PCAxMikgfCBcCisgICAgICAgICAgKChlcHRyWzFdICYgMHgzZnUpIDw8IDYpIHwgKGVwdHJbMl0gJiAweDNmdSk7IFwKICAgICAgIGVwdHIgKz0gMzsgXAogICAgICAgfSBcCi0gICAgZWxzZSBpZiAoKGMgJiAweDA0KSA9PSAwKSBcCisgICAgZWxzZSBpZiAoKGMgJiAweDA0dSkgPT0gMCkgXAogICAgICAgeyBcCi0gICAgICBjID0gKChjICYgMHgwMykgPDwgMjQpIHwgKCgqZXB0ciAmIDB4M2YpIDw8IDE4KSB8IFwKLSAgICAgICAgICAoKGVwdHJbMV0gJiAweDNmKSA8PCAxMikgfCAoKGVwdHJbMl0gJiAweDNmKSA8PCA2KSB8IFwKLSAgICAgICAgICAoZXB0clszXSAmIDB4M2YpOyBcCisgICAgICBjID0gKChjICYgMHgwM3UpIDw8IDI0KSB8ICgoKmVwdHIgJiAweDNmdSkgPDwgMTgpIHwgXAorICAgICAgICAgICgoZXB0clsxXSAmIDB4M2Z1KSA8PCAxMikgfCAoKGVwdHJbMl0gJiAweDNmdSkgPDwgNikgfCBcCisgICAgICAgICAgKGVwdHJbM10gJiAweDNmdSk7IFwKICAgICAgIGVwdHIgKz0gNDsgXAogICAgICAgfSBcCiAgICAgZWxzZSBcCiAgICAgICB7IFwKLSAgICAgIGMgPSAoKGMgJiAweDAxKSA8PCAzMCkgfCAoKCplcHRyICYgMHgzZikgPDwgMjQpIHwgXAotICAgICAgICAgICgoZXB0clsxXSAmIDB4M2YpIDw8IDE4KSB8ICgoZXB0clsyXSAmIDB4M2YpIDw8IDEyKSB8IFwKLSAgICAgICAgICAoKGVwdHJbM10gJiAweDNmKSA8PCA2KSB8IChlcHRyWzRdICYgMHgzZik7IFwKKyAgICAgIGMgPSAoKGMgJiAweDAxdSkgPDwgMzApIHwgKCgqZXB0ciAmIDB4M2Z1KSA8PCAyNCkgfCBcCisgICAgICAgICAgKChlcHRyWzFdICYgMHgzZnUpIDw8IDE4KSB8ICgoZXB0clsyXSAmIDB4M2Z1KSA8PCAxMikgfCBcCisgICAgICAgICAgKChlcHRyWzNdICYgMHgzZnUpIDw8IDYpIHwgKGVwdHJbNF0gJiAweDNmdSk7IFwKICAgICAgIGVwdHIgKz0gNTsgXAogICAgICAgfSBcCiAgICAgfQpAQCAtMzI1LDM0ICszNDAsMzQgQEAKIAogI2RlZmluZSBHRVRVVEY4TEVOKGMsIGVwdHIsIGxlbikgXAogICAgIHsgXAotICAgIGlmICgoYyAmIDB4MjApID09IDApIFwKKyAgICBpZiAoKGMgJiAweDIwdSkgPT0gMCkgXAogICAgICAgeyBcCi0gICAgICBjID0gKChjICYgMHgxZikgPDwgNikgfCAoZXB0clsxXSAmIDB4M2YpOyBcCisgICAgICBjID0gKChjICYgMHgxZnUpIDw8IDYpIHwgKGVwdHJbMV0gJiAweDNmdSk7IFwKICAgICAgIGxlbisrOyBcCiAgICAgICB9IFwKLSAgICBlbHNlIGlmICgoYyAmIDB4MTApICA9PSAwKSBcCisgICAgZWxzZSBpZiAoKGMgJiAweDEwdSkgID09IDApIFwKICAgICAgIHsgXAotICAgICAgYyA9ICgoYyAmIDB4MGYpIDw8IDEyKSB8ICgoZXB0clsxXSAmIDB4M2YpIDw8IDYpIHwgKGVwdHJbMl0gJiAweDNmKTsgXAorICAgICAgYyA9ICgoYyAmIDB4MGZ1KSA8PCAxMikgfCAoKGVwdHJbMV0gJiAweDNmdSkgPDwgNikgfCAoZXB0clsyXSAmIDB4M2Z1KTsgXAogICAgICAgbGVuICs9IDI7IFwKICAgICAgIH0gXAotICAgIGVsc2UgaWYgKChjICYgMHgwOCkgID09IDApIFwKKyAgICBlbHNlIGlmICgoYyAmIDB4MDh1KSAgPT0gMCkgXAogICAgICAge1wKLSAgICAgIGMgPSAoKGMgJiAweDA3KSA8PCAxOCkgfCAoKGVwdHJbMV0gJiAweDNmKSA8PCAxMikgfCBcCi0gICAgICAgICAgKChlcHRyWzJdICYgMHgzZikgPDwgNikgfCAoZXB0clszXSAmIDB4M2YpOyBcCisgICAgICBjID0gKChjICYgMHgwN3UpIDw8IDE4KSB8ICgoZXB0clsxXSAmIDB4M2Z1KSA8PCAxMikgfCBcCisgICAgICAgICAgKChlcHRyWzJdICYgMHgzZnUpIDw8IDYpIHwgKGVwdHJbM10gJiAweDNmdSk7IFwKICAgICAgIGxlbiArPSAzOyBcCiAgICAgICB9IFwKLSAgICBlbHNlIGlmICgoYyAmIDB4MDQpICA9PSAwKSBcCisgICAgZWxzZSBpZiAoKGMgJiAweDA0dSkgID09IDApIFwKICAgICAgIHsgXAotICAgICAgYyA9ICgoYyAmIDB4MDMpIDw8IDI0KSB8ICgoZXB0clsxXSAmIDB4M2YpIDw8IDE4KSB8IFwKLSAgICAgICAgICAoKGVwdHJbMl0gJiAweDNmKSA8PCAxMikgfCAoKGVwdHJbM10gJiAweDNmKSA8PCA2KSB8IFwKLSAgICAgICAgICAoZXB0cls0XSAmIDB4M2YpOyBcCisgICAgICBjID0gKChjICYgMHgwM3UpIDw8IDI0KSB8ICgoZXB0clsxXSAmIDB4M2Z1KSA8PCAxOCkgfCBcCisgICAgICAgICAgKChlcHRyWzJdICYgMHgzZnUpIDw8IDEyKSB8ICgoZXB0clszXSAmIDB4M2Z1KSA8PCA2KSB8IFwKKyAgICAgICAgICAoZXB0cls0XSAmIDB4M2Z1KTsgXAogICAgICAgbGVuICs9IDQ7IFwKICAgICAgIH0gXAogICAgIGVsc2UgXAogICAgICAge1wKLSAgICAgIGMgPSAoKGMgJiAweDAxKSA8PCAzMCkgfCAoKGVwdHJbMV0gJiAweDNmKSA8PCAyNCkgfCBcCi0gICAgICAgICAgKChlcHRyWzJdICYgMHgzZikgPDwgMTgpIHwgKChlcHRyWzNdICYgMHgzZikgPDwgMTIpIHwgXAotICAgICAgICAgICgoZXB0cls0XSAmIDB4M2YpIDw8IDYpIHwgKGVwdHJbNV0gJiAweDNmKTsgXAorICAgICAgYyA9ICgoYyAmIDB4MDF1KSA8PCAzMCkgfCAoKGVwdHJbMV0gJiAweDNmdSkgPDwgMjQpIHwgXAorICAgICAgICAgICgoZXB0clsyXSAmIDB4M2Z1KSA8PCAxOCkgfCAoKGVwdHJbM10gJiAweDNmdSkgPDwgMTIpIHwgXAorICAgICAgICAgICgoZXB0cls0XSAmIDB4M2Z1KSA8PCA2KSB8IChlcHRyWzVdICYgMHgzZnUpOyBcCiAgICAgICBsZW4gKz0gNTsgXAogICAgICAgfSBcCiAgICAgfQpAQCAtMzgyLDcgKzM5Nyw3IEBACiAvKiBDaGFyYWN0ZXIgVSsxODBFIChNb25nb2xpYW4gVm93ZWwgU2VwYXJhdG9yKSBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIGxpc3Qgb2YKIHNwYWNlcyBpbiB0aGUgVW5pY29kZSBmaWxlIFByb3BMaXN0LnR4dCwgYW5kIFBlcmwgZG9lcyBub3QgcmVjb2duaXplIGl0IGFzIGEKIHNwYWNlLiBIb3dldmVyLCBpbiBtYW55IG90aGVyIHNvdXJjZXMgaXQgaXMgbGlzdGVkIGFzIGEgc3BhY2UgYW5kIGhhcyBiZWVuIGluCi1QQ1JFIGZvciBhIGxvbmcgdGltZS4gKi8KK1BDUkUgKGJvdGggQVBJcykgZm9yIGEgbG9uZyB0aW1lLiAqLwogCiAjZGVmaW5lIEhTUEFDRV9MSVNUIFwKICAgQ0hBUl9IVCwgQ0hBUl9TUEFDRSwgQ0hBUl9OQlNQLCBcCkBAIC01NTAsMTcgKzU2NSw5IEBACiAKICNkZWZpbmUgUkVRX0NVX01BWCAxMDAwCiAKLS8qIEJpdCBkZWZpbml0aW9ucyBmb3IgZW50cmllcyBpbiB0aGUgcGNyZV9jdHlwZXMgdGFibGUuICovCi0KLSNkZWZpbmUgY3R5cGVfc3BhY2UgICAweDAxCi0jZGVmaW5lIGN0eXBlX2xldHRlciAgMHgwMgotI2RlZmluZSBjdHlwZV9kaWdpdCAgIDB4MDQKLSNkZWZpbmUgY3R5cGVfeGRpZ2l0ICAweDA4Ci0jZGVmaW5lIGN0eXBlX3dvcmQgICAgMHgxMCAgICAvKiBhbHBoYW51bWVyaWMgb3IgJ18nICovCi0jZGVmaW5lIGN0eXBlX21ldGEgICAgMHg4MCAgICAvKiByZWdleHAgbWV0YSBjaGFyIG9yIHplcm8gKGVuZCBwYXR0ZXJuKSAqLwotCi0vKiBPZmZzZXRzIGZvciB0aGUgYml0bWFwIHRhYmxlcyBpbiBwY3JlX2NiaXRzLiBFYWNoIHRhYmxlIGNvbnRhaW5zIGEgc2V0Ci1vZiBiaXRzIGZvciBhIGNsYXNzIG1hcC4gU29tZSBjbGFzc2VzIGFyZSBidWlsdCBieSBjb21iaW5pbmcgdGhlc2UgdGFibGVzLiAqLworLyogT2Zmc2V0cyBmb3IgdGhlIGJpdG1hcCB0YWJsZXMgaW4gdGhlIGNiaXRzIHNldCBvZiB0YWJsZXMuIEVhY2ggdGFibGUKK2NvbnRhaW5zIGEgc2V0IG9mIGJpdHMgZm9yIGEgY2xhc3MgbWFwLiBTb21lIGNsYXNzZXMgYXJlIGJ1aWx0IGJ5IGNvbWJpbmluZwordGhlc2UgdGFibGVzLiAqLwogCiAjZGVmaW5lIGNiaXRfc3BhY2UgICAgIDAgICAgICAvKiBbOnNwYWNlOl0gb3IgXHMgKi8KICNkZWZpbmUgY2JpdF94ZGlnaXQgICAzMiAgICAgIC8qIFs6eGRpZ2l0Ol0gKi8KQEAgLTU3NCwxOSArNTgxLDI4IEBACiAjZGVmaW5lIGNiaXRfY250cmwgICAyODggICAgICAvKiBbOmNudHJsOl0gKi8KICNkZWZpbmUgY2JpdF9sZW5ndGggIDMyMCAgICAgIC8qIExlbmd0aCBvZiB0aGUgY2JpdHMgdGFibGUgKi8KIAotLyogT2Zmc2V0cyBvZiB0aGUgdmFyaW91cyB0YWJsZXMgZnJvbSB0aGUgYmFzZSB0YWJsZXMgcG9pbnRlciwgYW5kCi10b3RhbCBsZW5ndGguICovCisvKiBCaXQgZGVmaW5pdGlvbnMgZm9yIGVudHJpZXMgaW4gdGhlIGN0eXBlcyB0YWJsZS4gKi8KIAotI2RlZmluZSBsY2Nfb2Zmc2V0ICAgICAgMAotI2RlZmluZSBmY2Nfb2Zmc2V0ICAgIDI1NgotI2RlZmluZSBjYml0c19vZmZzZXQgIDUxMgotI2RlZmluZSBjdHlwZXNfb2Zmc2V0IChjYml0c19vZmZzZXQgKyBjYml0X2xlbmd0aCkKKyNkZWZpbmUgY3R5cGVfc3BhY2UgICAweDAxCisjZGVmaW5lIGN0eXBlX2xldHRlciAgMHgwMgorI2RlZmluZSBjdHlwZV9kaWdpdCAgIDB4MDQKKyNkZWZpbmUgY3R5cGVfeGRpZ2l0ICAweDA4CisjZGVmaW5lIGN0eXBlX3dvcmQgICAgMHgxMCAgICAvKiBhbHBoYW51bWVyaWMgb3IgJ18nICovCisjZGVmaW5lIGN0eXBlX21ldGEgICAgMHg4MCAgICAvKiByZWdleHAgbWV0YSBjaGFyIG9yIHplcm8gKGVuZCBwYXR0ZXJuKSAqLworCisvKiBPZmZzZXRzIG9mIHRoZSB2YXJpb3VzIHRhYmxlcyBmcm9tIHRoZSBiYXNlIHRhYmxlcyBwb2ludGVyLCBhbmQKK3RvdGFsIGxlbmd0aCBvZiB0aGUgdGFibGVzLiAqLworCisjZGVmaW5lIGxjY19vZmZzZXQgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTG93ZXIgY2FzZSAqLworI2RlZmluZSBmY2Nfb2Zmc2V0ICAgIDI1NiAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZsaXAgY2FzZSAqLworI2RlZmluZSBjYml0c19vZmZzZXQgIDUxMiAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENoYXJhY3RlciBjbGFzc2VzICovCisjZGVmaW5lIGN0eXBlc19vZmZzZXQgKGNiaXRzX29mZnNldCArIGNiaXRfbGVuZ3RoKSAgLyogQ2hhcmFjdGVyIHR5cGVzICovCiAjZGVmaW5lIHRhYmxlc19sZW5ndGggKGN0eXBlc19vZmZzZXQgKyAyNTYpCiAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ2hhcmFjdGVyIGFuZCBzdHJpbmcgbmFtZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLS8qIElmIFBDUkUgaXMgdG8gc3VwcG9ydCBVVEYtOCBvbiBFQkNESUMgcGxhdGZvcm1zLCB3ZSBjYW5ub3QgdXNlIG5vcm1hbAorLyogSWYgUENSRTIgaXMgdG8gc3VwcG9ydCBVVEYtOCBvbiBFQkNESUMgcGxhdGZvcm1zLCB3ZSBjYW5ub3QgdXNlIG5vcm1hbAogY2hhcmFjdGVyIGNvbnN0YW50cyBsaWtlICcqJyBiZWNhdXNlIHRoZSBjb21waWxlciB3b3VsZCBlbWl0IHRoZWlyIEVCQ0RJQyBjb2RlLAogd2hpY2ggaXMgZGlmZmVyZW50IGZyb20gdGhlaXIgQVNDSUkvVVRGLTggY29kZS4gSW5zdGVhZCB3ZSBkZWZpbmUgbWFjcm9zIGZvcgogdGhlIGNoYXJhY3RlcnMgc28gdGhhdCB0aGV5IGFsd2F5cyB1c2UgdGhlIEFTQ0lJL1VURi04IGNvZGUgd2hlbiBVVEYtOCBzdXBwb3J0CkBAIC01OTQsNyArNjEwLDcgQEAKIGxpdGVyYWxzLiBCb3RoIGNoYXJhY3RlciBhbmQgc3RyaW5nIHZlcnNpb25zIG9mIGVhY2ggY2hhcmFjdGVyIGFyZSBuZWVkZWQsIGFuZAogdGhlcmUgYXJlIHNvbWUgbG9uZ2VyIHN0cmluZ3MgYXMgd2VsbC4KIAotVGhpcyBtZWFucyB0aGF0LCBvbiBFQkNESUMgcGxhdGZvcm1zLCB0aGUgUENSRSBsaWJyYXJ5IGNhbiBoYW5kbGUgZWl0aGVyCitUaGlzIG1lYW5zIHRoYXQsIG9uIEVCQ0RJQyBwbGF0Zm9ybXMsIHRoZSBQQ1JFMiBsaWJyYXJ5IGNhbiBoYW5kbGUgZWl0aGVyCiBFQkNESUMsIG9yIFVURi04LCBidXQgbm90IGJvdGguIFRvIHN1cHBvcnQgYm90aCBpbiB0aGUgc2FtZSBjb21waWxlZCBsaWJyYXJ5CiB3b3VsZCBuZWVkIGRpZmZlcmVudCBsb29rdXBzIGRlcGVuZGluZyBvbiB3aGV0aGVyIFBDUkUyX1VURiB3YXMgc2V0IG9yIG5vdC4KIFRoaXMgd291bGQgbWFrZSBpdCBpbXBvc3NpYmxlIHRvIHVzZSBjaGFyYWN0ZXJzIGluIHN3aXRjaC9jYXNlIHN0YXRlbWVudHMsCkBAIC02MDYsNyArNjIyLDcgQEAKICNpZm5kZWYgU1VQUE9SVF9VTklDT0RFCiAKIC8qIFVURi04IHN1cHBvcnQgaXMgbm90IGVuYWJsZWQ7IHVzZSB0aGUgcGxhdGZvcm0tZGVwZW5kZW50IGNoYXJhY3RlciBsaXRlcmFscwotc28gdGhhdCBQQ1JFIHdvcmtzIGluIGJvdGggQVNDSUkgYW5kIEVCQ0RJQyBlbnZpcm9ubWVudHMsIGJ1dCBvbmx5IGluIG5vbi1VVEYKK3NvIHRoYXQgUENSRTIgd29ya3MgaW4gYm90aCBBU0NJSSBhbmQgRUJDRElDIGVudmlyb25tZW50cywgYnV0IG9ubHkgaW4gbm9uLVVURgogbW9kZS4gTmV3bGluZSBjaGFyYWN0ZXJzIGFyZSBwcm9ibGVtYXRpYyBpbiBFQkNESUMuIFRob3VnaCBpdCBoYXMgQ1IgYW5kIExGCiBjaGFyYWN0ZXJzLCBhIGNvbW1vbiBwcmFjdGljZSBoYXMgYmVlbiB0byB1c2UgaXRzIE5MICgweDE1KSBjaGFyYWN0ZXIgYXMgdGhlCiBsaW5lIHRlcm1pbmF0b3IgaW4gQy1saWtlIHByb2Nlc3NpbmcgZW52aXJvbm1lbnRzLiBIb3dldmVyLCBzb21ldGltZXMgdGhlIExGCkBAIC02MTQsNyArNjMwLDcgQEAKIAogaHR0cDovL3VuaWNvZGUub3JnL3N0YW5kYXJkL3JlcG9ydHMvdHIxMy90cjEzLTUuaHRtbAogCi1QQ1JFIGRlZmF1bHRzIEVCQ0RJQyBOTCB0byAweDE1LCBidXQgaGFzIGEgYnVpbGQtdGltZSBvcHRpb24gdG8gc2VsZWN0IDB4MjUKK1BDUkUyIGRlZmF1bHRzIEVCQ0RJQyBOTCB0byAweDE1LCBidXQgaGFzIGEgYnVpbGQtdGltZSBvcHRpb24gdG8gc2VsZWN0IDB4MjUKIGluc3RlYWQuIFdoaWNoZXZlciBpcyAqbm90KiBjaG9zZW4gaXMgZGVmaW5lZCBhcyBORUwuCiAKIEluIGJvdGggQVNDSUkgYW5kIEVCQ0RJQyBlbnZpcm9ubWVudHMsIENIQVJfTkwgYW5kIENIQVJfTEYgYXJlIHN5bm9ueW1zIGZvciB0aGUKQEAgLTEyMTksNyArMTIzNSw3IEBACiAjZGVmaW5lIFBUX1RBQlNJWkUgICAxMSAgICAvKiBTaXplIG9mIHNxdWFyZSB0YWJsZSBmb3IgYXV0b3Bvc3Nlc3NpZnkgdGVzdHMgKi8KIAogLyogVGhlIGZvbGxvd2luZyBzcGVjaWFsIHByb3BlcnRpZXMgYXJlIHVzZWQgb25seSBpbiBYQ0xBU1MgaXRlbXMsIHdoZW4gUE9TSVgKLWNsYXNzZXMgYXJlIHNwZWNpZmllZCBhbmQgUENSRV9VQ1AgaXMgc2V0IC0gaW4gb3RoZXIgd29yZHMsIGZvciBVbmljb2RlCitjbGFzc2VzIGFyZSBzcGVjaWZpZWQgYW5kIFBDUkUyX1VDUCBpcyBzZXQgLSBpbiBvdGhlciB3b3JkcywgZm9yIFVuaWNvZGUKIGhhbmRsaW5nIG9mIHRoZXNlIGNsYXNzZXMuIFRoZXkgYXJlIG5vdCBhdmFpbGFibGUgdmlhIHRoZSBccCBvciBcUCBlc2NhcGVzIGxpa2UKIHRob3NlIGluIHRoZSBhYm92ZSBsaXN0LCBhbmQgc28gdGhleSBkbyBub3QgdGFrZSBwYXJ0IGluIHRoZSBhdXRvcG9zc2Vzc2lmeWluZwogdGFibGUuICovCkBAIC0xMjgzLDcgKzEyOTksNyBAQAogbGlrZSBcTi4KIAogVGhlIHNwZWNpYWwgdmFsdWVzIEVTQ19EVSwgRVNDX2R1LCBldGMuIGFyZSB1c2VkIGluc3RlYWQgb2YgRVNDX0QsIEVTQ19kLCBldGMuCi13aGVuIFBDUkVfVUNQIGlzIHNldCBhbmQgcmVwbGFjZW1lbnQgb2YgXGQgZXRjIGJ5IFxwIHNlcXVlbmNlcyBpcyByZXF1aXJlZC4KK3doZW4gUENSRTJfVUNQIGlzIHNldCBhbmQgcmVwbGFjZW1lbnQgb2YgXGQgZXRjIGJ5IFxwIHNlcXVlbmNlcyBpcyByZXF1aXJlZC4KIFRoZXkgbXVzdCBiZSBjb250aWd1b3VzLCBhbmQgcmVtYWluIGluIG9yZGVyIHNvIHRoYXQgdGhlIHJlcGxhY2VtZW50cyBjYW4gYmUKIGxvb2tlZCB1cCBmcm9tIGEgdGFibGUuCiAKQEAgLTEzMDgsMTIgKzEzMjQsMTIgQEAKIFN0YXJ0aW5nIGZyb20gMSAoaS5lLiBhZnRlciBPUF9FTkQpLCB0aGUgdmFsdWVzIHVwIHRvIE9QX0VPRCBtdXN0IGNvcnJlc3BvbmQgaW4KIG9yZGVyIHRvIHRoZSBsaXN0IG9mIGVzY2FwZXMgaW1tZWRpYXRlbHkgYWJvdmUuIEZ1cnRoZXJtb3JlLCB2YWx1ZXMgdXAgdG8KIE9QX0RPTExNIG11c3Qgbm90IGJlIGNoYW5nZWQgd2l0aG91dCBhZGp1c3RpbmcgdGhlIHRhYmxlIGNhbGxlZCBhdXRvcG9zc3RhYiBpbgotcGNyZV9jb21waWxlLmMKK3BjcmUyX2F1dG9fcG9zc2Vzcy5jCiAKIFdoZW5ldmVyIHRoaXMgbGlzdCBpcyB1cGRhdGVkLCB0aGUgdHdvIG1hY3JvIGRlZmluaXRpb25zIHRoYXQgZm9sbG93IG11c3QgYmUKIHVwZGF0ZWQgdG8gbWF0Y2guIFRoZSBwb3NzZXNzaWZpY2F0aW9uIHRhYmxlIGNhbGxlZCAib3Bjb2RlX3Bvc3Nlc3NpZnkiIGluCi1wY3JlX2NvbXBpbGUuYyBtdXN0IGFsc28gYmUgdXBkYXRlZCwgYW5kIGFsc28gdGhlIHRhYmxlcyBjYWxsZWQgImNvcHRhYmxlIgotYW5kICJwb3B0YWJsZSIgaW4gcGNyZV9kZmFfZXhlYy5jLgorcGNyZTJfY29tcGlsZS5jIG11c3QgYWxzbyBiZSB1cGRhdGVkLCBhbmQgYWxzbyB0aGUgdGFibGVzIGNhbGxlZCAiY29wdGFibGUiCithbmQgInBvcHRhYmxlIiBpbiBwY3JlMl9kZmFfbWF0Y2guYy4KIAogKioqKioqIE5PVEUgTk9URSBOT1RFICoqKioqKi8KIApAQCAtMTg5MCw3ICsxOTA2LDcgQEAKIAogLyogUHJpdmF0ZSAiZXh0ZXJuYWwiIGZ1bmN0aW9ucy4gVGhlc2UgYXJlIGludGVybmFsIGZ1bmN0aW9ucyB0aGF0IGFyZSBjYWxsZWQKIGZyb20gbW9kdWxlcyBvdGhlciB0aGFuIHRoZSBvbmUgaW4gd2hpY2ggdGhleSBhcmUgZGVmaW5lZC4gVGhleSBoYXZlIHRvIGJlCi0iZXh0ZXJuYWwiIGluIHRoZSBDIHNlbnNlLCBidXQgYXJlIG5vdCBwYXJ0IG9mIHRoZSBQQ1JFIHB1YmxpYyBBUEkuIFRoZXkgYXJlCisiZXh0ZXJuYWwiIGluIHRoZSBDIHNlbnNlLCBidXQgYXJlIG5vdCBwYXJ0IG9mIHRoZSBQQ1JFMiBwdWJsaWMgQVBJLiBUaGV5IGFyZQogbm90IHJlZmVyZW5jZWQgZnJvbSBwY3JlMnRlc3QsIGFuZCBtdXN0IG5vdCBiZSBkZWZpbmVkIHdoZW4gbm8gY29kZSB1bml0IHdpZHRoCiBpcyBhdmFpbGFibGUuICovCiAKZGlmZiAtLWdpdCBhL2Rpc3QyL3NyYy9wY3JlMl9pbnRtb2RlZGVwLmggYi9kaXN0Mi9zcmMvcGNyZTJfaW50bW9kZWRlcC5oCmluZGV4IDkwYjc5NTkuLjU5NmQ2MmMgMTAwNjQ0Ci0tLSBhL2Rpc3QyL3NyYy9wY3JlMl9pbnRtb2RlZGVwLmgKKysrIGIvZGlzdDIvc3JjL3BjcmUyX2ludG1vZGVkZXAuaApAQCAtOTQsNyArOTQsNyBAQAogdW5pdCBzdHJpbmcgaXMgbm93IGhhbmRsZWQgYnkgdGhlIG1hY3JvcyB0aGF0IGFyZSBkZWZpbmVkIGhlcmUuCiAKIFRoZSBtYWNyb3MgYXJlIGNvbnRyb2xsZWQgYnkgdGhlIHZhbHVlIG9mIExJTktfU0laRS4gVGhpcyBkZWZhdWx0cyB0byAyLCBidXQKLXZhbHVlcyBvZiAyIG9yIDQgYXJlIGFsc28gc3VwcG9ydGVkLiAqLwordmFsdWVzIG9mIDMgb3IgNCBhcmUgYWxzbyBzdXBwb3J0ZWQuICovCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0gOC1iaXQgc3VwcG9ydCAgLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKQEAgLTEwMiwyOSArMTAyLDI5IEBACiAKICNpZiBMSU5LX1NJWkUgPT0gMgogI2RlZmluZSBQVVQoYSxuLGQpICAgXAotICAoYVtuXSA9IChkKSA+PiA4KSwgXAotICAoYVsobikrMV0gPSAoZCkgJiAyNTUpCisgIChhW25dID0gKFBDUkUyX1VDSEFSKSgoZCkgPj4gOCkpLCBcCisgIChhWyhuKSsxXSA9IChQQ1JFMl9VQ0hBUikoKGQpICYgMjU1KSkKICNkZWZpbmUgR0VUKGEsbikgXAotICAoKChhKVtuXSA8PCA4KSB8IChhKVsobikrMV0pCisgICh1bnNpZ25lZCBpbnQpKCgoYSlbbl0gPDwgOCkgfCAoYSlbKG4pKzFdKQogI2RlZmluZSBNQVhfUEFUVEVSTl9TSVpFICgxIDw8IDE2KQogCiAjZWxpZiBMSU5LX1NJWkUgPT0gMwogI2RlZmluZSBQVVQoYSxuLGQpICAgICAgIFwKLSAgKGFbbl0gPSAoZCkgPj4gMTYpLCAgICBcCi0gIChhWyhuKSsxXSA9IChkKSA+PiA4KSwgXAotICAoYVsobikrMl0gPSAoZCkgJiAyNTUpCisgIChhW25dID0gKFBDUkUyX1VDSEFSKSgoZCkgPj4gMTYpKSwgICAgXAorICAoYVsobikrMV0gPSAoUENSRTJfVUNIQVIpKChkKSA+PiA4KSksIFwKKyAgKGFbKG4pKzJdID0gKFBDUkUyX1VDSEFSKSgoZCkgJiAyNTUpKQogI2RlZmluZSBHRVQoYSxuKSBcCi0gICgoKGEpW25dIDw8IDE2KSB8ICgoYSlbKG4pKzFdIDw8IDgpIHwgKGEpWyhuKSsyXSkKKyAgKHVuc2lnbmVkIGludCkoKChhKVtuXSA8PCAxNikgfCAoKGEpWyhuKSsxXSA8PCA4KSB8IChhKVsobikrMl0pCiAjZGVmaW5lIE1BWF9QQVRURVJOX1NJWkUgKDEgPDwgMjQpCiAKICNlbGlmIExJTktfU0laRSA9PSA0CiAjZGVmaW5lIFBVVChhLG4sZCkgICAgICAgIFwKLSAgKGFbbl0gPSAoZCkgPj4gMjQpLCAgICAgXAotICAoYVsobikrMV0gPSAoZCkgPj4gMTYpLCBcCi0gIChhWyhuKSsyXSA9IChkKSA+PiA4KSwgIFwKLSAgKGFbKG4pKzNdID0gKGQpICYgMjU1KQorICAoYVtuXSA9IChQQ1JFMl9VQ0hBUikoKGQpID4+IDI0KSksICAgICBcCisgIChhWyhuKSsxXSA9IChQQ1JFMl9VQ0hBUikoKGQpID4+IDE2KSksIFwKKyAgKGFbKG4pKzJdID0gKFBDUkUyX1VDSEFSKSgoZCkgPj4gOCkpLCAgXAorICAoYVsobikrM10gPSAoUENSRTJfVUNIQVIpKChkKSAmIDI1NSkpCiAjZGVmaW5lIEdFVChhLG4pIFwKLSAgKCgoYSlbbl0gPDwgMjQpIHwgKChhKVsobikrMV0gPDwgMTYpIHwgKChhKVsobikrMl0gPDwgOCkgfCAoYSlbKG4pKzNdKQorICAodW5zaWduZWQgaW50KSgoKGEpW25dIDw8IDI0KSB8ICgoYSlbKG4pKzFdIDw8IDE2KSB8ICgoYSlbKG4pKzJdIDw8IDgpIHwgKGEpWyhuKSszXSkKICNkZWZpbmUgTUFYX1BBVFRFUk5fU0laRSAoMSA8PCAzMCkgICAvKiBLZWVwIGl0IHBvc2l0aXZlICovCiAKICNlbHNlCkBAIC0xNDksMTAgKzE0OSwxMCBAQAogI3VuZGVmIExJTktfU0laRQogI2RlZmluZSBMSU5LX1NJWkUgMgogI2RlZmluZSBQVVQoYSxuLGQpICAgXAotICAoYVtuXSA9IChkKSA+PiAxNiksIFwKLSAgKGFbKG4pKzFdID0gKGQpICYgNjU1MzUpCisgIChhW25dID0gKFBDUkUyX1VDSEFSKSgoZCkgPj4gMTYpKSwgXAorICAoYVsobikrMV0gPSAoUENSRTJfVUNIQVIpKChkKSAmIDY1NTM1KSkKICNkZWZpbmUgR0VUKGEsbikgXAotICAoKChhKVtuXSA8PCAxNikgfCAoYSlbKG4pKzFdKQorICAodW5zaWduZWQgaW50KSgoKGEpW25dIDw8IDE2KSB8IChhKVsobikrMV0pCiAjZGVmaW5lIE1BWF9QQVRURVJOX1NJWkUgKDEgPDwgMzApICAvKiBLZWVwIGl0IHBvc2l0aXZlICovCiAKICNlbHNlCkBAIC0yODMsNDcgKzI4Myw0NyBAQAogLyogUmV0dXJucyB3aXRoIHRoZSBhZGRpdGlvbmFsIG51bWJlciBvZiBjaGFyYWN0ZXJzIGlmIElTX01VTFRJQ0hBUihjKSBpcyBUUlVFLgogT3RoZXJ3aXNlIGl0IGhhcyBhbiB1bmRlZmluZWQgYmVoYXZpb3VyLiAqLwogCi0jZGVmaW5lIEdFVF9FWFRSQUxFTihjKSAoUFJJVih1dGY4X3RhYmxlNClbKGMpICYgMHgzZl0pCisjZGVmaW5lIEdFVF9FWFRSQUxFTihjKSAoUFJJVih1dGY4X3RhYmxlNClbKGMpICYgMHgzZnVdKQogCiAvKiBSZXR1cm5zIFRSVUUsIGlmIHRoZSBnaXZlbiB2YWx1ZSBpcyBub3QgdGhlIGZpcnN0IGNvZGUgdW5pdCBvZiBhIFVURgogc2VxdWVuY2UuICovCiAKLSNkZWZpbmUgTk9UX0ZJUlNUQ1UoYykgKCgoYykgJiAweGMwKSA9PSAweDgwKQorI2RlZmluZSBOT1RfRklSU1RDVShjKSAoKChjKSAmIDB4YzB1KSA9PSAweDgwdSkKIAogLyogR2V0IHRoZSBuZXh0IFVURi04IGNoYXJhY3Rlciwgbm90IGFkdmFuY2luZyB0aGUgcG9pbnRlci4gVGhpcyBpcyBjYWxsZWQgd2hlbgogd2Uga25vdyB3ZSBhcmUgaW4gVVRGLTggbW9kZS4gKi8KIAogI2RlZmluZSBHRVRDSEFSKGMsIGVwdHIpIFwKICAgYyA9ICplcHRyOyBcCi0gIGlmIChjID49IDB4YzApIEdFVFVURjgoYywgZXB0cik7CisgIGlmIChjID49IDB4YzB1KSBHRVRVVEY4KGMsIGVwdHIpOwogCiAvKiBHZXQgdGhlIG5leHQgVVRGLTggY2hhcmFjdGVyLCB0ZXN0aW5nIGZvciBVVEYtOCBtb2RlLCBhbmQgbm90IGFkdmFuY2luZyB0aGUKIHBvaW50ZXIuICovCiAKICNkZWZpbmUgR0VUQ0hBUlRFU1QoYywgZXB0cikgXAogICBjID0gKmVwdHI7IFwKLSAgaWYgKHV0ZiAmJiBjID49IDB4YzApIEdFVFVURjgoYywgZXB0cik7CisgIGlmICh1dGYgJiYgYyA+PSAweGMwdSkgR0VUVVRGOChjLCBlcHRyKTsKIAogLyogR2V0IHRoZSBuZXh0IFVURi04IGNoYXJhY3RlciwgYWR2YW5jaW5nIHRoZSBwb2ludGVyLiBUaGlzIGlzIGNhbGxlZCB3aGVuIHdlCiBrbm93IHdlIGFyZSBpbiBVVEYtOCBtb2RlLiAqLwogCiAjZGVmaW5lIEdFVENIQVJJTkMoYywgZXB0cikgXAogICBjID0gKmVwdHIrKzsgXAotICBpZiAoYyA+PSAweGMwKSBHRVRVVEY4SU5DKGMsIGVwdHIpOworICBpZiAoYyA+PSAweGMwdSkgR0VUVVRGOElOQyhjLCBlcHRyKTsKIAogLyogR2V0IHRoZSBuZXh0IGNoYXJhY3RlciwgdGVzdGluZyBmb3IgVVRGLTggbW9kZSwgYW5kIGFkdmFuY2luZyB0aGUgcG9pbnRlci4KIFRoaXMgaXMgY2FsbGVkIHdoZW4gd2UgZG9uJ3Qga25vdyBpZiB3ZSBhcmUgaW4gVVRGLTggbW9kZS4gKi8KIAogI2RlZmluZSBHRVRDSEFSSU5DVEVTVChjLCBlcHRyKSBcCiAgIGMgPSAqZXB0cisrOyBcCi0gIGlmICh1dGYgJiYgYyA+PSAweGMwKSBHRVRVVEY4SU5DKGMsIGVwdHIpOworICBpZiAodXRmICYmIGMgPj0gMHhjMHUpIEdFVFVURjhJTkMoYywgZXB0cik7CiAKIC8qIEdldCB0aGUgbmV4dCBVVEYtOCBjaGFyYWN0ZXIsIG5vdCBhZHZhbmNpbmcgdGhlIHBvaW50ZXIsIGluY3JlbWVudGluZyBsZW5ndGgKIGlmIHRoZXJlIGFyZSBleHRyYSBieXRlcy4gVGhpcyBpcyBjYWxsZWQgd2hlbiB3ZSBrbm93IHdlIGFyZSBpbiBVVEYtOCBtb2RlLiAqLwogCiAjZGVmaW5lIEdFVENIQVJMRU4oYywgZXB0ciwgbGVuKSBcCiAgIGMgPSAqZXB0cjsgXAotICBpZiAoYyA+PSAweGMwKSBHRVRVVEY4TEVOKGMsIGVwdHIsIGxlbik7CisgIGlmIChjID49IDB4YzB1KSBHRVRVVEY4TEVOKGMsIGVwdHIsIGxlbik7CiAKIC8qIEdldCB0aGUgbmV4dCBVVEYtOCBjaGFyYWN0ZXIsIHRlc3RpbmcgZm9yIFVURi04IG1vZGUsIG5vdCBhZHZhbmNpbmcgdGhlCiBwb2ludGVyLCBpbmNyZW1lbnRpbmcgbGVuZ3RoIGlmIHRoZXJlIGFyZSBleHRyYSBieXRlcy4gVGhpcyBpcyBjYWxsZWQgd2hlbiB3ZQpAQCAtMzMxLDIxICszMzEsMjEgQEAKIAogI2RlZmluZSBHRVRDSEFSTEVOVEVTVChjLCBlcHRyLCBsZW4pIFwKICAgYyA9ICplcHRyOyBcCi0gIGlmICh1dGYgJiYgYyA+PSAweGMwKSBHRVRVVEY4TEVOKGMsIGVwdHIsIGxlbik7CisgIGlmICh1dGYgJiYgYyA+PSAweGMwdSkgR0VUVVRGOExFTihjLCBlcHRyLCBsZW4pOwogCiAvKiBJZiB0aGUgcG9pbnRlciBpcyBub3QgYXQgdGhlIHN0YXJ0IG9mIGEgY2hhcmFjdGVyLCBtb3ZlIGl0IGJhY2sgdW50aWwKIGl0IGlzLiBUaGlzIGlzIGNhbGxlZCBvbmx5IGluIFVURi04IG1vZGUgLSB3ZSBkb24ndCBwdXQgYSB0ZXN0IHdpdGhpbiB0aGUgbWFjcm8KIGJlY2F1c2UgYWxtb3N0IGFsbCBjYWxscyBhcmUgYWxyZWFkeSB3aXRoaW4gYSBibG9jayBvZiBVVEYtOCBvbmx5IGNvZGUuICovCiAKLSNkZWZpbmUgQkFDS0NIQVIoZXB0cikgd2hpbGUoKCplcHRyICYgMHhjMCkgPT0gMHg4MCkgZXB0ci0tCisjZGVmaW5lIEJBQ0tDSEFSKGVwdHIpIHdoaWxlKCgqZXB0ciAmIDB4YzB1KSA9PSAweDgwdSkgZXB0ci0tCiAKIC8qIFNhbWUgYXMgYWJvdmUsIGp1c3QgaW4gdGhlIG90aGVyIGRpcmVjdGlvbi4gKi8KLSNkZWZpbmUgRk9SV0FSRENIQVIoZXB0cikgd2hpbGUoKCplcHRyICYgMHhjMCkgPT0gMHg4MCkgZXB0cisrCi0jZGVmaW5lIEZPUldBUkRDSEFSVEVTVChlcHRyLGVuZCkgd2hpbGUoZXB0ciA8IGVuZCAmJiAoKmVwdHIgJiAweGMwKSA9PSAweDgwKSBlcHRyKysKKyNkZWZpbmUgRk9SV0FSRENIQVIoZXB0cikgd2hpbGUoKCplcHRyICYgMHhjMHUpID09IDB4ODB1KSBlcHRyKysKKyNkZWZpbmUgRk9SV0FSRENIQVJURVNUKGVwdHIsZW5kKSB3aGlsZShlcHRyIDwgZW5kICYmICgqZXB0ciAmIDB4YzB1KSA9PSAweDgwdSkgZXB0cisrCiAKIC8qIFNhbWUgYXMgYWJvdmUsIGJ1dCBpdCBhbGxvd3MgYSBmdWxseSBjdXN0b21pemFibGUgZm9ybS4gKi8KICNkZWZpbmUgQUNST1NTQ0hBUihjb25kaXRpb24sIGVwdHIsIGFjdGlvbikgXAotICB3aGlsZSgoY29uZGl0aW9uKSAmJiAoKGVwdHIpICYgMHhjMCkgPT0gMHg4MCkgYWN0aW9uCisgIHdoaWxlKChjb25kaXRpb24pICYmICgoZXB0cikgJiAweGMwdSkgPT0gMHg4MHUpIGFjdGlvbgogCiAvKiBEZXBvc2l0IGEgY2hhcmFjdGVyIGludG8gbWVtb3J5LCByZXR1cm5pbmcgdGhlIG51bWJlciBvZiBjb2RlIHVuaXRzLiAqLwogCkBAIC0zNjQsNyArMzY0LDcgQEAKIAogLyogVGVzdHMgd2hldGhlciB0aGUgY29kZSBwb2ludCBuZWVkcyBleHRyYSBjaGFyYWN0ZXJzIHRvIGRlY29kZS4gKi8KIAotI2RlZmluZSBIQVNfRVhUUkFMRU4oYykgKCgoYykgJiAweGZjMDApID09IDB4ZDgwMCkKKyNkZWZpbmUgSEFTX0VYVFJBTEVOKGMpICgoKGMpICYgMHhmYzAwdSkgPT0gMHhkODAwdSkKIAogLyogUmV0dXJucyB3aXRoIHRoZSBhZGRpdGlvbmFsIG51bWJlciBvZiBjaGFyYWN0ZXJzIGlmIElTX01VTFRJQ0hBUihjKSBpcyBUUlVFLgogT3RoZXJ3aXNlIGl0IGhhcyBhbiB1bmRlZmluZWQgYmVoYXZpb3VyLiAqLwpAQCAtMzc0LDUzICszNzQsNTMgQEAKIC8qIFJldHVybnMgVFJVRSwgaWYgdGhlIGdpdmVuIHZhbHVlIGlzIG5vdCB0aGUgZmlyc3QgY29kZSB1bml0IG9mIGEgVVRGCiBzZXF1ZW5jZS4gKi8KIAotI2RlZmluZSBOT1RfRklSU1RDVShjKSAoKChjKSAmIDB4ZmMwMCkgPT0gMHhkYzAwKQorI2RlZmluZSBOT1RfRklSU1RDVShjKSAoKChjKSAmIDB4ZmMwMHUpID09IDB4ZGMwMHUpCiAKIC8qIEJhc2UgbWFjcm8gdG8gcGljayB1cCB0aGUgbG93IHN1cnJvZ2F0ZSBvZiBhIFVURi0xNiBjaGFyYWN0ZXIsIG5vdAogYWR2YW5jaW5nIHRoZSBwb2ludGVyLiAqLwogCiAjZGVmaW5lIEdFVFVURjE2KGMsIGVwdHIpIFwKLSAgIHsgYyA9ICgoKGMgJiAweDNmZikgPDwgMTApIHwgKGVwdHJbMV0gJiAweDNmZikpICsgMHgxMDAwMDsgfQorICAgeyBjID0gKCgoYyAmIDB4M2ZmdSkgPDwgMTApIHwgKGVwdHJbMV0gJiAweDNmZnUpKSArIDB4MTAwMDB1OyB9CiAKIC8qIEdldCB0aGUgbmV4dCBVVEYtMTYgY2hhcmFjdGVyLCBub3QgYWR2YW5jaW5nIHRoZSBwb2ludGVyLiBUaGlzIGlzIGNhbGxlZCB3aGVuCiB3ZSBrbm93IHdlIGFyZSBpbiBVVEYtMTYgbW9kZS4gKi8KIAogI2RlZmluZSBHRVRDSEFSKGMsIGVwdHIpIFwKICAgYyA9ICplcHRyOyBcCi0gIGlmICgoYyAmIDB4ZmMwMCkgPT0gMHhkODAwKSBHRVRVVEYxNihjLCBlcHRyKTsKKyAgaWYgKChjICYgMHhmYzAwdSkgPT0gMHhkODAwdSkgR0VUVVRGMTYoYywgZXB0cik7CiAKIC8qIEdldCB0aGUgbmV4dCBVVEYtMTYgY2hhcmFjdGVyLCB0ZXN0aW5nIGZvciBVVEYtMTYgbW9kZSwgYW5kIG5vdCBhZHZhbmNpbmcgdGhlCiBwb2ludGVyLiAqLwogCiAjZGVmaW5lIEdFVENIQVJURVNUKGMsIGVwdHIpIFwKICAgYyA9ICplcHRyOyBcCi0gIGlmICh1dGYgJiYgKGMgJiAweGZjMDApID09IDB4ZDgwMCkgR0VUVVRGMTYoYywgZXB0cik7CisgIGlmICh1dGYgJiYgKGMgJiAweGZjMDB1KSA9PSAweGQ4MDB1KSBHRVRVVEYxNihjLCBlcHRyKTsKIAogLyogQmFzZSBtYWNybyB0byBwaWNrIHVwIHRoZSBsb3cgc3Vycm9nYXRlIG9mIGEgVVRGLTE2IGNoYXJhY3RlciwgYWR2YW5jaW5nCiB0aGUgcG9pbnRlci4gKi8KIAogI2RlZmluZSBHRVRVVEYxNklOQyhjLCBlcHRyKSBcCi0gICB7IGMgPSAoKChjICYgMHgzZmYpIDw8IDEwKSB8ICgqZXB0cisrICYgMHgzZmYpKSArIDB4MTAwMDA7IH0KKyAgIHsgYyA9ICgoKGMgJiAweDNmZnUpIDw8IDEwKSB8ICgqZXB0cisrICYgMHgzZmZ1KSkgKyAweDEwMDAwdTsgfQogCiAvKiBHZXQgdGhlIG5leHQgVVRGLTE2IGNoYXJhY3RlciwgYWR2YW5jaW5nIHRoZSBwb2ludGVyLiBUaGlzIGlzIGNhbGxlZCB3aGVuIHdlCiBrbm93IHdlIGFyZSBpbiBVVEYtMTYgbW9kZS4gKi8KIAogI2RlZmluZSBHRVRDSEFSSU5DKGMsIGVwdHIpIFwKICAgYyA9ICplcHRyKys7IFwKLSAgaWYgKChjICYgMHhmYzAwKSA9PSAweGQ4MDApIEdFVFVURjE2SU5DKGMsIGVwdHIpOworICBpZiAoKGMgJiAweGZjMDB1KSA9PSAweGQ4MDB1KSBHRVRVVEYxNklOQyhjLCBlcHRyKTsKIAogLyogR2V0IHRoZSBuZXh0IGNoYXJhY3RlciwgdGVzdGluZyBmb3IgVVRGLTE2IG1vZGUsIGFuZCBhZHZhbmNpbmcgdGhlIHBvaW50ZXIuCiBUaGlzIGlzIGNhbGxlZCB3aGVuIHdlIGRvbid0IGtub3cgaWYgd2UgYXJlIGluIFVURi0xNiBtb2RlLiAqLwogCiAjZGVmaW5lIEdFVENIQVJJTkNURVNUKGMsIGVwdHIpIFwKICAgYyA9ICplcHRyKys7IFwKLSAgaWYgKHV0ZiAmJiAoYyAmIDB4ZmMwMCkgPT0gMHhkODAwKSBHRVRVVEYxNklOQyhjLCBlcHRyKTsKKyAgaWYgKHV0ZiAmJiAoYyAmIDB4ZmMwMHUpID09IDB4ZDgwMHUpIEdFVFVURjE2SU5DKGMsIGVwdHIpOwogCiAvKiBCYXNlIG1hY3JvIHRvIHBpY2sgdXAgdGhlIGxvdyBzdXJyb2dhdGUgb2YgYSBVVEYtMTYgY2hhcmFjdGVyLCBub3QKIGFkdmFuY2luZyB0aGUgcG9pbnRlciwgaW5jcmVtZW50aW5nIHRoZSBsZW5ndGguICovCiAKICNkZWZpbmUgR0VUVVRGMTZMRU4oYywgZXB0ciwgbGVuKSBcCi0gICB7IGMgPSAoKChjICYgMHgzZmYpIDw8IDEwKSB8IChlcHRyWzFdICYgMHgzZmYpKSArIDB4MTAwMDA7IGxlbisrOyB9CisgICB7IGMgPSAoKChjICYgMHgzZmZ1KSA8PCAxMCkgfCAoZXB0clsxXSAmIDB4M2ZmdSkpICsgMHgxMDAwMHU7IGxlbisrOyB9CiAKIC8qIEdldCB0aGUgbmV4dCBVVEYtMTYgY2hhcmFjdGVyLCBub3QgYWR2YW5jaW5nIHRoZSBwb2ludGVyLCBpbmNyZW1lbnRpbmcKIGxlbmd0aCBpZiB0aGVyZSBpcyBhIGxvdyBzdXJyb2dhdGUuIFRoaXMgaXMgY2FsbGVkIHdoZW4gd2Uga25vdyB3ZSBhcmUgaW4KQEAgLTQyOCw3ICs0MjgsNyBAQAogCiAjZGVmaW5lIEdFVENIQVJMRU4oYywgZXB0ciwgbGVuKSBcCiAgIGMgPSAqZXB0cjsgXAotICBpZiAoKGMgJiAweGZjMDApID09IDB4ZDgwMCkgR0VUVVRGMTZMRU4oYywgZXB0ciwgbGVuKTsKKyAgaWYgKChjICYgMHhmYzAwdSkgPT0gMHhkODAwdSkgR0VUVVRGMTZMRU4oYywgZXB0ciwgbGVuKTsKIAogLyogR2V0IHRoZSBuZXh0IFVURi04MTZjaGFyYWN0ZXIsIHRlc3RpbmcgZm9yIFVURi0xNiBtb2RlLCBub3QgYWR2YW5jaW5nIHRoZQogcG9pbnRlciwgaW5jcmVtZW50aW5nIGxlbmd0aCBpZiB0aGVyZSBpcyBhIGxvdyBzdXJyb2dhdGUuIFRoaXMgaXMgY2FsbGVkIHdoZW4KQEAgLTQzNiwyMiArNDM2LDIyIEBACiAKICNkZWZpbmUgR0VUQ0hBUkxFTlRFU1QoYywgZXB0ciwgbGVuKSBcCiAgIGMgPSAqZXB0cjsgXAotICBpZiAodXRmICYmIChjICYgMHhmYzAwKSA9PSAweGQ4MDApIEdFVFVURjE2TEVOKGMsIGVwdHIsIGxlbik7CisgIGlmICh1dGYgJiYgKGMgJiAweGZjMDB1KSA9PSAweGQ4MDB1KSBHRVRVVEYxNkxFTihjLCBlcHRyLCBsZW4pOwogCiAvKiBJZiB0aGUgcG9pbnRlciBpcyBub3QgYXQgdGhlIHN0YXJ0IG9mIGEgY2hhcmFjdGVyLCBtb3ZlIGl0IGJhY2sgdW50aWwKIGl0IGlzLiBUaGlzIGlzIGNhbGxlZCBvbmx5IGluIFVURi0xNiBtb2RlIC0gd2UgZG9uJ3QgcHV0IGEgdGVzdCB3aXRoaW4gdGhlCiBtYWNybyBiZWNhdXNlIGFsbW9zdCBhbGwgY2FsbHMgYXJlIGFscmVhZHkgd2l0aGluIGEgYmxvY2sgb2YgVVRGLTE2IG9ubHkKIGNvZGUuICovCiAKLSNkZWZpbmUgQkFDS0NIQVIoZXB0cikgaWYgKCgqZXB0ciAmIDB4ZmMwMCkgPT0gMHhkYzAwKSBlcHRyLS0KKyNkZWZpbmUgQkFDS0NIQVIoZXB0cikgaWYgKCgqZXB0ciAmIDB4ZmMwMHUpID09IDB4ZGMwMHUpIGVwdHItLQogCiAvKiBTYW1lIGFzIGFib3ZlLCBqdXN0IGluIHRoZSBvdGhlciBkaXJlY3Rpb24uICovCi0jZGVmaW5lIEZPUldBUkRDSEFSKGVwdHIpIGlmICgoKmVwdHIgJiAweGZjMDApID09IDB4ZGMwMCkgZXB0cisrCi0jZGVmaW5lIEZPUldBUkRDSEFSVEVTVChlcHRyLGVuZCkgaWYgKGVwdHIgPCBlbmQgJiYgKCplcHRyICYgMHhmYzAwKSA9PSAweGRjMDApIGVwdHIrKworI2RlZmluZSBGT1JXQVJEQ0hBUihlcHRyKSBpZiAoKCplcHRyICYgMHhmYzAwdSkgPT0gMHhkYzAwdSkgZXB0cisrCisjZGVmaW5lIEZPUldBUkRDSEFSVEVTVChlcHRyLGVuZCkgaWYgKGVwdHIgPCBlbmQgJiYgKCplcHRyICYgMHhmYzAwdSkgPT0gMHhkYzAwdSkgZXB0cisrCiAKIC8qIFNhbWUgYXMgYWJvdmUsIGJ1dCBpdCBhbGxvd3MgYSBmdWxseSBjdXN0b21pemFibGUgZm9ybS4gKi8KICNkZWZpbmUgQUNST1NTQ0hBUihjb25kaXRpb24sIGVwdHIsIGFjdGlvbikgXAotICBpZiAoKGNvbmRpdGlvbikgJiYgKChlcHRyKSAmIDB4ZmMwMCkgPT0gMHhkYzAwKSBhY3Rpb24KKyAgaWYgKChjb25kaXRpb24pICYmICgoZXB0cikgJiAweGZjMDB1KSA9PSAweGRjMDB1KSBhY3Rpb24KIAogLyogRGVwb3NpdCBhIGNoYXJhY3RlciBpbnRvIG1lbW9yeSwgcmV0dXJuaW5nIHRoZSBudW1iZXIgb2YgY29kZSB1bml0cy4gKi8KIApkaWZmIC0tZ2l0IGEvZGlzdDIvc3JjL3BjcmUyX2ppdF9jb21waWxlLmMgYi9kaXN0Mi9zcmMvcGNyZTJfaml0X2NvbXBpbGUuYwppbmRleCBiNDZmNGUzLi44ZGVhOTBhIDEwMDY0NAotLS0gYS9kaXN0Mi9zcmMvcGNyZTJfaml0X2NvbXBpbGUuYworKysgYi9kaXN0Mi9zcmMvcGNyZTJfaml0X2NvbXBpbGUuYwpAQCAtMzgsNyArMzgsNiBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICovCiAKLQogI2lmZGVmIEhBVkVfQ09ORklHX0gKICNpbmNsdWRlICJjb25maWcuaCIKICNlbmRpZgpAQCAtMTg3LDkgKzE4Niw5IEBACiAgIHZvaWQgKmNhbGxvdXRfZGF0YTsKICAgLyogRXZlcnl0aGluZyBlbHNlIGFmdGVyLiAqLwogICBzbGppdF91dyBvZmZzZXRfbGltaXQ7Ci0gIHNsaml0X3VpIGxpbWl0X21hdGNoOwotICB1aW50MzJfdCBvdmVjY291bnQ7Ci0gIHVpbnQzMl90IG9wdGlvbnM7CisgIHNsaml0X3UzMiBsaW1pdF9tYXRjaDsKKyAgc2xqaXRfdTMyIG92ZWNjb3VudDsKKyAgc2xqaXRfdTMyIG9wdGlvbnM7CiB9IGppdF9hcmd1bWVudHM7CiAKICNkZWZpbmUgSklUX05VTUJFUl9PRl9DT01QSUxFX01PREVTIDMKQEAgLTE5OCw4ICsxOTcsOCBAQAogICB2b2lkICpleGVjdXRhYmxlX2Z1bmNzW0pJVF9OVU1CRVJfT0ZfQ09NUElMRV9NT0RFU107CiAgIHZvaWQgKnJlYWRfb25seV9kYXRhX2hlYWRzW0pJVF9OVU1CRVJfT0ZfQ09NUElMRV9NT0RFU107CiAgIHNsaml0X3V3IGV4ZWN1dGFibGVfc2l6ZXNbSklUX05VTUJFUl9PRl9DT01QSUxFX01PREVTXTsKLSAgc2xqaXRfdWkgdG9wX2JyYWNrZXQ7Ci0gIHNsaml0X3VpIGxpbWl0X21hdGNoOworICBzbGppdF91MzIgdG9wX2JyYWNrZXQ7CisgIHNsaml0X3UzMiBsaW1pdF9tYXRjaDsKIH0gZXhlY3V0YWJsZV9mdW5jdGlvbnM7CiAKIHR5cGVkZWYgc3RydWN0IGp1bXBfbGlzdCB7CkBAIC0zNTAsNDYgKzM0OSw0NiBAQAogICAvKiBGaXJzdCBieXRlIGNvZGUuICovCiAgIFBDUkUyX1NQVFIgc3RhcnQ7CiAgIC8qIE1hcHMgcHJpdmF0ZSBkYXRhIG9mZnNldCB0byBlYWNoIG9wY29kZS4gKi8KLSAgc2xqaXRfc2kgKnByaXZhdGVfZGF0YV9wdHJzOworICBzbGppdF9zMzIgKnByaXZhdGVfZGF0YV9wdHJzOwogICAvKiBDaGFpbiBsaXN0IG9mIHJlYWQtb25seSBkYXRhIHB0cnMuICovCiAgIHZvaWQgKnJlYWRfb25seV9kYXRhX2hlYWQ7CiAgIC8qIFRlbGxzIHdoZXRoZXIgdGhlIGNhcHR1cmluZyBicmFja2V0IGlzIG9wdGltaXplZC4gKi8KLSAgc2xqaXRfdWIgKm9wdGltaXplZF9jYnJhY2tldDsKKyAgc2xqaXRfdTggKm9wdGltaXplZF9jYnJhY2tldDsKICAgLyogVGVsbHMgd2hldGhlciB0aGUgc3RhcnRpbmcgb2Zmc2V0IGlzIGEgdGFyZ2V0IG9mIHRoZW4uICovCi0gIHNsaml0X3ViICp0aGVuX29mZnNldHM7CisgIHNsaml0X3U4ICp0aGVuX29mZnNldHM7CiAgIC8qIEN1cnJlbnQgcG9zaXRpb24gd2hlcmUgYSBUSEVOIG11c3QganVtcC4gKi8KICAgdGhlbl90cmFwX2JhY2t0cmFjayAqdGhlbl90cmFwOwogICAvKiBTdGFydGluZyBvZmZzZXQgb2YgcHJpdmF0ZSBkYXRhIGZvciBjYXB0dXJpbmcgYnJhY2tldHMuICovCi0gIHNsaml0X3NpIGNicmFfcHRyOworICBzbGppdF9zMzIgY2JyYV9wdHI7CiAgIC8qIE91dHB1dCB2ZWN0b3Igc3RhcnRpbmcgcG9pbnQuIE11c3QgYmUgZGl2aXNpYmxlIGJ5IDIuICovCi0gIHNsaml0X3NpIG92ZWN0b3Jfc3RhcnQ7CisgIHNsaml0X3MzMiBvdmVjdG9yX3N0YXJ0OwogICAvKiBQb2ludHMgdG8gdGhlIHN0YXJ0aW5nIGNoYXJhY3RlciBvZiB0aGUgY3VycmVudCBtYXRjaC4gKi8KLSAgc2xqaXRfc2kgc3RhcnRfcHRyOworICBzbGppdF9zMzIgc3RhcnRfcHRyOwogICAvKiBMYXN0IGtub3duIHBvc2l0aW9uIG9mIHRoZSByZXF1ZXN0ZWQgYnl0ZS4gKi8KLSAgc2xqaXRfc2kgcmVxX2NoYXJfcHRyOworICBzbGppdF9zMzIgcmVxX2NoYXJfcHRyOwogICAvKiBIZWFkIG9mIHRoZSBsYXN0IHJlY3Vyc2lvbi4gKi8KLSAgc2xqaXRfc2kgcmVjdXJzaXZlX2hlYWRfcHRyOworICBzbGppdF9zMzIgcmVjdXJzaXZlX2hlYWRfcHRyOwogICAvKiBGaXJzdCBpbnNwZWN0ZWQgY2hhcmFjdGVyIGZvciBwYXJ0aWFsIG1hdGNoaW5nLgogICAgICAoTmVlZGVkIGZvciBhdm9pZGluZyB6ZXJvIGxlbmd0aCBwYXJ0aWFsIG1hdGNoZXMuKSAqLwotICBzbGppdF9zaSBzdGFydF91c2VkX3B0cjsKKyAgc2xqaXRfczMyIHN0YXJ0X3VzZWRfcHRyOwogICAvKiBTdGFydGluZyBwb2ludGVyIGZvciBwYXJ0aWFsIHNvZnQgbWF0Y2hlcy4gKi8KLSAgc2xqaXRfc2kgaGl0X3N0YXJ0OworICBzbGppdF9zMzIgaGl0X3N0YXJ0OwogICAvKiBQb2ludGVyIG9mIHRoZSBtYXRjaCBlbmQgcG9zaXRpb24uICovCi0gIHNsaml0X3NpIG1hdGNoX2VuZF9wdHI7CisgIHNsaml0X3MzMiBtYXRjaF9lbmRfcHRyOwogICAvKiBQb2ludHMgdG8gdGhlIG1hcmtlZCBzdHJpbmcuICovCi0gIHNsaml0X3NpIG1hcmtfcHRyOworICBzbGppdF9zMzIgbWFya19wdHI7CiAgIC8qIFJlY3Vyc2l2ZSBjb250cm9sIHZlcmIgbWFuYWdlbWVudCBjaGFpbi4gKi8KLSAgc2xqaXRfc2kgY29udHJvbF9oZWFkX3B0cjsKKyAgc2xqaXRfczMyIGNvbnRyb2xfaGVhZF9wdHI7CiAgIC8qIFBvaW50cyB0byB0aGUgbGFzdCBtYXRjaGVkIGNhcHR1cmUgYmxvY2sgaW5kZXguICovCi0gIHNsaml0X3NpIGNhcHR1cmVfbGFzdF9wdHI7CisgIHNsaml0X3MzMiBjYXB0dXJlX2xhc3RfcHRyOwogICAvKiBGYXN0IGZvcndhcmQgc2tpcHBpbmcgYnl0ZSBjb2RlIHBvaW50ZXIuICovCiAgIFBDUkUyX1NQVFIgZmFzdF9mb3J3YXJkX2JjX3B0cjsKICAgLyogTG9jYWxzIHVzZWQgYnkgZmFzdCBmYWlsIG9wdGltaXphdGlvbi4gKi8KLSAgc2xqaXRfc2kgZmFzdF9mYWlsX3N0YXJ0X3B0cjsKLSAgc2xqaXRfc2kgZmFzdF9mYWlsX2VuZF9wdHI7CisgIHNsaml0X3MzMiBmYXN0X2ZhaWxfc3RhcnRfcHRyOworICBzbGppdF9zMzIgZmFzdF9mYWlsX2VuZF9wdHI7CiAKICAgLyogRmxpcHBlZCBhbmQgbG93ZXIgY2FzZSB0YWJsZXMuICovCi0gIGNvbnN0IHNsaml0X3ViICpmY2M7CisgIGNvbnN0IHNsaml0X3U4ICpmY2M7CiAgIHNsaml0X3N3IGxjYzsKICAgLyogTW9kZSBjYW4gYmUgUENSRTJfSklUX0NPTVBMRVRFIGFuZCBvdGhlcnMuICovCiAgIGludCBtb2RlOwpAQCAtNDA5LDEyICs0MDgsMTIgQEAKICAgQk9PTCBwb3NpdGl2ZV9hc3NlcnQ7CiAgIC8qIE5ld2xpbmUgY29udHJvbC4gKi8KICAgaW50IG5sdHlwZTsKLSAgc2xqaXRfdWkgbmxtYXg7Ci0gIHNsaml0X3VpIG5sbWluOworICBzbGppdF91MzIgbmxtYXg7CisgIHNsaml0X3UzMiBubG1pbjsKICAgaW50IG5ld2xpbmU7CiAgIGludCBic3Jfbmx0eXBlOwotICBzbGppdF91aSBic3JfbmxtYXg7Ci0gIHNsaml0X3VpIGJzcl9ubG1pbjsKKyAgc2xqaXRfdTMyIGJzcl9ubG1heDsKKyAgc2xqaXRfdTMyIGJzcl9ubG1pbjsKICAgLyogRG9sbGFyIGVuZG9ubHkuICovCiAgIGludCBlbmRvbmx5OwogICAvKiBUYWJsZXMuICovCkBAIC00NzEsMjcgKzQ3MCwyNyBAQAogI2lmIGRlZmluZWQgU0xKSVRfVU5BTElHTkVEICYmIFNMSklUX1VOQUxJR05FRAogICBpbnQgdWNoYXJwdHI7CiAgIHVuaW9uIHsKLSAgICBzbGppdF9zaSBhc2ludDsKLSAgICBzbGppdF91aCBhc3VzaG9ydDsKKyAgICBzbGppdF9zMzIgYXNpbnQ7CisgICAgc2xqaXRfdTE2IGFzdXNob3J0OwogI2lmIFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSA4Ci0gICAgc2xqaXRfdWIgYXNieXRlOwotICAgIHNsaml0X3ViIGFzdWNoYXJzWzRdOworICAgIHNsaml0X3U4IGFzYnl0ZTsKKyAgICBzbGppdF91OCBhc3VjaGFyc1s0XTsKICNlbGlmIFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSAxNgotICAgIHNsaml0X3VoIGFzdWNoYXJzWzJdOworICAgIHNsaml0X3UxNiBhc3VjaGFyc1syXTsKICNlbGlmIFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSAzMgotICAgIHNsaml0X3VpIGFzdWNoYXJzWzFdOworICAgIHNsaml0X3UzMiBhc3VjaGFyc1sxXTsKICNlbmRpZgogICB9IGM7CiAgIHVuaW9uIHsKLSAgICBzbGppdF9zaSBhc2ludDsKLSAgICBzbGppdF91aCBhc3VzaG9ydDsKKyAgICBzbGppdF9zMzIgYXNpbnQ7CisgICAgc2xqaXRfdTE2IGFzdXNob3J0OwogI2lmIFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSA4Ci0gICAgc2xqaXRfdWIgYXNieXRlOwotICAgIHNsaml0X3ViIGFzdWNoYXJzWzRdOworICAgIHNsaml0X3U4IGFzYnl0ZTsKKyAgICBzbGppdF91OCBhc3VjaGFyc1s0XTsKICNlbGlmIFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSAxNgotICAgIHNsaml0X3VoIGFzdWNoYXJzWzJdOworICAgIHNsaml0X3UxNiBhc3VjaGFyc1syXTsKICNlbGlmIFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSAzMgotICAgIHNsaml0X3VpIGFzdWNoYXJzWzFdOworICAgIHNsaml0X3UzMiBhc3VjaGFyc1sxXTsKICNlbmRpZgogICB9IG9jOwogI2VuZGlmCkBAIC01MzMsMTkgKzUzMiwxOSBAQAogI2RlZmluZSBQUklWQVRFX0RBVEEoY2MpIChjb21tb24tPnByaXZhdGVfZGF0YV9wdHJzWyhjYykgLSBjb21tb24tPnN0YXJ0XSkKIAogI2lmIFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSA4Ci0jZGVmaW5lIE1PVl9VQ0hBUiAgU0xKSVRfTU9WX1VCCi0jZGVmaW5lIE1PVlVfVUNIQVIgU0xKSVRfTU9WVV9VQgorI2RlZmluZSBNT1ZfVUNIQVIgIFNMSklUX01PVl9VOAorI2RlZmluZSBNT1ZVX1VDSEFSIFNMSklUX01PVlVfVTgKICNkZWZpbmUgSU5fVUNIQVJTKHgpICh4KQogI2VsaWYgUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDE2Ci0jZGVmaW5lIE1PVl9VQ0hBUiAgU0xKSVRfTU9WX1VICi0jZGVmaW5lIE1PVlVfVUNIQVIgU0xKSVRfTU9WVV9VSAorI2RlZmluZSBNT1ZfVUNIQVIgIFNMSklUX01PVl9VMTYKKyNkZWZpbmUgTU9WVV9VQ0hBUiBTTEpJVF9NT1ZVX1UxNgogI2RlZmluZSBVQ0hBUl9TSElGVCAoMSkKLSNkZWZpbmUgSU5fVUNIQVJTKHgpICgoeCkgPDwgVUNIQVJfU0hJRlQpCisjZGVmaW5lIElOX1VDSEFSUyh4KSAoKHgpICogMikKICNlbGlmIFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSAzMgotI2RlZmluZSBNT1ZfVUNIQVIgIFNMSklUX01PVl9VSQotI2RlZmluZSBNT1ZVX1VDSEFSIFNMSklUX01PVlVfVUkKKyNkZWZpbmUgTU9WX1VDSEFSICBTTEpJVF9NT1ZfVTMyCisjZGVmaW5lIE1PVlVfVUNIQVIgU0xKSVRfTU9WVV9VMzIKICNkZWZpbmUgVUNIQVJfU0hJRlQgKDIpCi0jZGVmaW5lIElOX1VDSEFSUyh4KSAoKHgpIDw8IFVDSEFSX1NISUZUKQorI2RlZmluZSBJTl9VQ0hBUlMoeCkgKCh4KSAqIDQpCiAjZWxzZQogI2Vycm9yIFVuc3VwcG9ydGVkIGNvbXBpbGluZyBtb2RlCiAjZW5kaWYKQEAgLTEwNTYsNyArMTA1NSw3IEBACiByZXR1cm4gRkFMU0U7CiB9CiAKLXN0YXRpYyBTTEpJVF9JTkxJTkUgdm9pZCBkZXRlY3RfZmFzdF9mYWlsKGNvbXBpbGVyX2NvbW1vbiAqY29tbW9uLCBQQ1JFMl9TUFRSIGNjLCBpbnQgKnByaXZhdGVfZGF0YV9zdGFydCwgc2xqaXRfc2kgZGVwdGgpCitzdGF0aWMgU0xKSVRfSU5MSU5FIHZvaWQgZGV0ZWN0X2Zhc3RfZmFpbChjb21waWxlcl9jb21tb24gKmNvbW1vbiwgUENSRTJfU1BUUiBjYywgaW50ICpwcml2YXRlX2RhdGFfc3RhcnQsIHNsaml0X3MzMiBkZXB0aCkKIHsKICAgUENSRTJfU1BUUiBuZXh0X2FsdDsKIApAQCAtMTEyMSw4ICsxMTIwLDggQEAKIAogc3RhdGljIGludCBnZXRfY2xhc3NfaXRlcmF0b3Jfc2l6ZShQQ1JFMl9TUFRSIGNjKQogewotc2xqaXRfdWkgbWluOwotc2xqaXRfdWkgbWF4Oworc2xqaXRfdTMyIG1pbjsKK3Nsaml0X3UzMiBtYXg7CiBzd2l0Y2goKmNjKQogICB7CiAgIGNhc2UgT1BfQ1JTVEFSOgpAQCAtMTE1OSw3ICsxMTU4LDcgQEAKIFBDUkUyX1NQVFIgbWF4X2VuZDsKIFBDUkUyX1VDSEFSIHR5cGU7CiBzbGppdF9zdyBsZW5ndGggPSBlbmQgLSBiZWdpbjsKLXNsaml0X3NpIG1pbiwgbWF4LCBpOworc2xqaXRfczMyIG1pbiwgbWF4LCBpOwogCiAvKiBEZXRlY3QgZml4ZWQgaXRlcmF0aW9ucyBmaXJzdC4gKi8KIGlmIChlbmRbLSgxICsgTElOS19TSVpFKV0gIT0gT1BfS0VUKQpAQCAtMTQxNywxNCArMTQxNiwxNCBAQAogCiAgICAgY2FzZSBPUF9DTEFTUzoKICAgICBjYXNlIE9QX05DTEFTUzoKLSAgICBzaXplID0gMSArIDMyIC8gc2l6ZW9mKFBDUkUyX1VDSEFSKTsKICAgICBzcGFjZSA9IGdldF9jbGFzc19pdGVyYXRvcl9zaXplKGNjICsgc2l6ZSk7CisgICAgc2l6ZSA9IDEgKyAzMiAvIHNpemVvZihQQ1JFMl9VQ0hBUik7CiAgICAgYnJlYWs7CiAKICNpZiBkZWZpbmVkIFNVUFBPUlRfVU5JQ09ERSB8fCBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggIT0gOAogICAgIGNhc2UgT1BfWENMQVNTOgotICAgIHNpemUgPSBHRVQoY2MsIDEpOwogICAgIHNwYWNlID0gZ2V0X2NsYXNzX2l0ZXJhdG9yX3NpemUoY2MgKyBzaXplKTsKKyAgICBzaXplID0gR0VUKGNjLCAxKTsKICAgICBicmVhazsKICNlbmRpZgogCkBAIC0yMjI0LDcgKzIyMjMsNyBAQAogU0xKSVRfQVNTRVJUKGNjID09IGNjZW5kICYmIHN0YWNrcHRyID09IHN0YWNrdG9wICYmIChzYXZlIHx8ICh0bXAxZW1wdHkgJiYgdG1wMmVtcHR5KSkpOwogfQogCi1zdGF0aWMgU0xKSVRfSU5MSU5FIFBDUkUyX1NQVFIgc2V0X3RoZW5fb2Zmc2V0cyhjb21waWxlcl9jb21tb24gKmNvbW1vbiwgUENSRTJfU1BUUiBjYywgc2xqaXRfdWIgKmN1cnJlbnRfb2Zmc2V0KQorc3RhdGljIFNMSklUX0lOTElORSBQQ1JFMl9TUFRSIHNldF90aGVuX29mZnNldHMoY29tcGlsZXJfY29tbW9uICpjb21tb24sIFBDUkUyX1NQVFIgY2MsIHNsaml0X3U4ICpjdXJyZW50X29mZnNldCkKIHsKIFBDUkUyX1NQVFIgZW5kID0gYnJhY2tldGVuZChjYyk7CiBCT09MIGhhc19hbHRlcm5hdGl2ZXMgPSBjY1tHRVQoY2MsIDEpXSA9PSBPUF9BTFQ7CkBAIC0yMzYyLDYgKzIzNjEsNyBAQAogc3RhdGljIFNMSklUX0lOTElORSB2b2lkIGZyZWVfc3RhY2soY29tcGlsZXJfY29tbW9uICpjb21tb24sIGludCBzaXplKQogewogREVGSU5FX0NPTVBJTEVSOworCiBTTEpJVF9BU1NFUlQoc2l6ZSA+IDApOwogT1AyKFNMSklUX1NVQiwgU1RBQ0tfVE9QLCAwLCBTVEFDS19UT1AsIDAsIFNMSklUX0lNTSwgc2l6ZSAqIHNpemVvZihzbGppdF9zdykpOwogfQpAQCAtMjM5MCw3ICsyMzkwLDcgQEAKIHsKIERFRklORV9DT01QSUxFUjsKIHN0cnVjdCBzbGppdF9sYWJlbCAqbG9vcDsKLXNsaml0X3NpIGk7CitzbGppdF9zMzIgaTsKIAogLyogQXQgdGhpcyBwb2ludCB3ZSBjYW4gZnJlZWx5IHVzZSBhbGwgdGVtcG9yYXJ5IHJlZ2lzdGVycy4gKi8KIFNMSklUX0FTU0VSVChsZW5ndGggPiAxKTsKQEAgLTI0MTUsNyArMjQxNSw3IEBACiBzdGF0aWMgU0xKSVRfSU5MSU5FIHZvaWQgcmVzZXRfZmFzdF9mYWlsKGNvbXBpbGVyX2NvbW1vbiAqY29tbW9uKQogewogREVGSU5FX0NPTVBJTEVSOwotc2xqaXRfc2kgaTsKK3Nsaml0X3MzMiBpOwogCiBTTEpJVF9BU1NFUlQoY29tbW9uLT5mYXN0X2ZhaWxfc3RhcnRfcHRyIDwgY29tbW9uLT5mYXN0X2ZhaWxfZW5kX3B0cik7CiAKQEAgLTI0OTYsNyArMjQ5Niw3IEBACiBPUDEoU0xKSVRfTU9WLCBTTEpJVF9TMCwgMCwgU0xKSVRfTUVNMShTTEpJVF9TUCksIGNvbW1vbi0+c3RhcnRfcHRyKTsKIGlmIChjb21tb24tPm1hcmtfcHRyICE9IDApCiAgIE9QMShTTEpJVF9NT1YsIFNMSklUX1IyLCAwLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgY29tbW9uLT5tYXJrX3B0cik7Ci1PUDEoU0xKSVRfTU9WX1VJLCBTTEpJVF9SMSwgMCwgU0xKSVRfTUVNMShTTEpJVF9SMCksIFNMSklUX09GRlNFVE9GKGppdF9hcmd1bWVudHMsIG92ZWNjb3VudCkpOworT1AxKFNMSklUX01PVl9VMzIsIFNMSklUX1IxLCAwLCBTTEpJVF9NRU0xKFNMSklUX1IwKSwgU0xKSVRfT0ZGU0VUT0Yoaml0X2FyZ3VtZW50cywgb3ZlY2NvdW50KSk7CiBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNMSklUX1IwKSwgU0xKSVRfT0ZGU0VUT0Yoaml0X2FyZ3VtZW50cywgc3RhcnRjaGFyX3B0ciksIFNMSklUX1MwLCAwKTsKIGlmIChjb21tb24tPm1hcmtfcHRyICE9IDApCiAgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU0xKSVRfUjApLCBTTEpJVF9PRkZTRVRPRihqaXRfYXJndW1lbnRzLCBtYXJrX3B0ciksIFNMSklUX1IyLCAwKTsKQEAgLTI1MTUsNyArMjUxNSw3IEBACiAjZW5kaWYKIFNMSklUX0FTU0VSVChzaXplb2YoUENSRTJfU0laRSkgPT0gNCB8fCBzaXplb2YoUENSRTJfU0laRSkgPT0gOCk7CiBpZiAoc2l6ZW9mKFBDUkUyX1NJWkUpID09IDQpCi0gIE9QMShTTEpJVF9NT1ZVX1VJLCBTTEpJVF9NRU0xKFNMSklUX1IyKSwgc2l6ZW9mKFBDUkUyX1NJWkUpLCBTTEpJVF9TMSwgMCk7CisgIE9QMShTTEpJVF9NT1ZVX1UzMiwgU0xKSVRfTUVNMShTTEpJVF9SMiksIHNpemVvZihQQ1JFMl9TSVpFKSwgU0xKSVRfUzEsIDApOwogZWxzZQogICBPUDEoU0xKSVRfTU9WVSwgU0xKSVRfTUVNMShTTEpJVF9SMiksIHNpemVvZihQQ1JFMl9TSVpFKSwgU0xKSVRfUzEsIDApOwogT1AyKFNMSklUX1NVQiB8IFNMSklUX1NFVF9FLCBTTEpJVF9SMSwgMCwgU0xKSVRfUjEsIDAsIFNMSklUX0lNTSwgMSk7CkBAIC0yNTQxLDcgKzI1NDEsNyBAQAogc3RhdGljIFNMSklUX0lOTElORSB2b2lkIHJldHVybl93aXRoX3BhcnRpYWxfbWF0Y2goY29tcGlsZXJfY29tbW9uICpjb21tb24sIHN0cnVjdCBzbGppdF9sYWJlbCAqcXVpdCkKIHsKIERFRklORV9DT01QSUxFUjsKLXNsaml0X3NpIG1vdl9vcGNvZGU7CitzbGppdF9zMzIgbW92X29wY29kZTsKIAogU0xKSVRfQ09NUElMRV9BU1NFUlQoU1RSX0VORCA9PSBTTEpJVF9TMSwgc3RyX2VuZF9tdXN0X2JlX3NhdmVkX3JlZzIpOwogU0xKSVRfQVNTRVJUKGNvbW1vbi0+c3RhcnRfdXNlZF9wdHIgIT0gMCAmJiBjb21tb24tPnN0YXJ0X3B0ciAhPSAwCkBAIC0yNTU3LDcgKzI1NTcsNyBAQAogT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTTEpJVF9SMSksIFNMSklUX09GRlNFVE9GKGppdF9hcmd1bWVudHMsIHN0YXJ0Y2hhcl9wdHIpLCBTTEpJVF9SMiwgMCk7CiBPUDEoU0xKSVRfTU9WLCBTTEpJVF9SMSwgMCwgU0xKSVRfTUVNMShTTEpJVF9SMSksIFNMSklUX09GRlNFVE9GKGppdF9hcmd1bWVudHMsIG1hdGNoX2RhdGEpKTsKIAotbW92X29wY29kZSA9IChzaXplb2YoUENSRTJfU0laRSkgPT0gNCkgPyBTTEpJVF9NT1ZfVUkgOiBTTEpJVF9NT1Y7Cittb3Zfb3Bjb2RlID0gKHNpemVvZihQQ1JFMl9TSVpFKSA9PSA0KSA/IFNMSklUX01PVl9VMzIgOiBTTEpJVF9NT1Y7CiAKIE9QMihTTEpJVF9TVUIsIFNMSklUX1IyLCAwLCBTTEpJVF9SMiwgMCwgU0xKSVRfUzAsIDApOwogI2lmIFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSAxNiB8fCBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gMzIKQEAgLTI3OTQsNyArMjc5NCw3IEBACiBKVU1QSEVSRShqdW1wKTsKIH0KIAotc3RhdGljIHZvaWQgcGVla19jaGFyKGNvbXBpbGVyX2NvbW1vbiAqY29tbW9uLCBzbGppdF91aSBtYXgpCitzdGF0aWMgdm9pZCBwZWVrX2NoYXIoY29tcGlsZXJfY29tbW9uICpjb21tb24sIHNsaml0X3UzMiBtYXgpCiB7CiAvKiBSZWFkcyB0aGUgY2hhcmFjdGVyIGludG8gVE1QMSwga2VlcHMgU1RSX1BUUi4KIERvZXMgbm90IGNoZWNrIFNUUl9FTkQuIFRNUDIgRGVzdHJveWVkLiAqLwpAQCAtMjgzOSwxMiArMjgzOSwxMiBAQAogCiAjaWYgZGVmaW5lZCBTVVBQT1JUX1VOSUNPREUgJiYgUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDgKIAotc3RhdGljIEJPT0wgaXNfY2hhcjdfYml0c2V0KGNvbnN0IHNsaml0X3ViICpiaXRzZXQsIEJPT0wgbmNsYXNzKQorc3RhdGljIEJPT0wgaXNfY2hhcjdfYml0c2V0KGNvbnN0IHNsaml0X3U4ICpiaXRzZXQsIEJPT0wgbmNsYXNzKQogewogLyogVGVsbHMgd2hldGhlciB0aGUgY2hhcmFjdGVyIGNvZGVzIGJlbG93IDEyOCBhcmUgZW5vdWdoCiB0byBkZXRlcm1pbmUgYSBtYXRjaC4gKi8KLWNvbnN0IHNsaml0X3ViIHZhbHVlID0gbmNsYXNzID8gMHhmZiA6IDA7Ci1jb25zdCBzbGppdF91YiAqZW5kID0gYml0c2V0ICsgMzI7Citjb25zdCBzbGppdF91OCB2YWx1ZSA9IG5jbGFzcyA/IDB4ZmYgOiAwOworY29uc3Qgc2xqaXRfdTggKmVuZCA9IGJpdHNldCArIDMyOwogCiBiaXRzZXQgKz0gMTY7CiBkbwpAQCAtMjg2OSwxMiArMjg2OSwxMiBAQAogT1AxKE1PVl9VQ0hBUiwgVE1QMiwgMCwgU0xKSVRfTUVNMShTVFJfUFRSKSwgMCk7CiBPUDIoU0xKSVRfQURELCBTVFJfUFRSLCAwLCBTVFJfUFRSLCAwLCBTTEpJVF9JTU0sIElOX1VDSEFSUygxKSk7CiAKLU9QMShTTEpJVF9NT1ZfVUIsIFRNUDEsIDAsIFNMSklUX01FTTEoVE1QMiksIGNvbW1vbi0+Y3R5cGVzKTsKK09QMShTTEpJVF9NT1ZfVTgsIFRNUDEsIDAsIFNMSklUX01FTTEoVE1QMiksIGNvbW1vbi0+Y3R5cGVzKTsKIAogaWYgKGZ1bGxfcmVhZCkKICAgewogICBqdW1wID0gQ01QKFNMSklUX0xFU1MsIFRNUDIsIDAsIFNMSklUX0lNTSwgMHhjMCk7Ci0gIE9QMShTTEpJVF9NT1ZfVUIsIFRNUDIsIDAsIFNMSklUX01FTTEoVE1QMiksIChzbGppdF9zdylQUklWKHV0ZjhfdGFibGU0KSAtIDB4YzApOworICBPUDEoU0xKSVRfTU9WX1U4LCBUTVAyLCAwLCBTTEpJVF9NRU0xKFRNUDIpLCAoc2xqaXRfc3cpUFJJVih1dGY4X3RhYmxlNCkgLSAweGMwKTsKICAgT1AyKFNMSklUX0FERCwgU1RSX1BUUiwgMCwgU1RSX1BUUiwgMCwgVE1QMiwgMCk7CiAgIEpVTVBIRVJFKGp1bXApOwogICB9CkBAIC0yODgyLDcgKzI4ODIsNyBAQAogCiAjZW5kaWYgLyogU1VQUE9SVF9VTklDT0RFICYmIFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSA4ICovCiAKLXN0YXRpYyB2b2lkIHJlYWRfY2hhcl9yYW5nZShjb21waWxlcl9jb21tb24gKmNvbW1vbiwgc2xqaXRfdWkgbWluLCBzbGppdF91aSBtYXgsIEJPT0wgdXBkYXRlX3N0cl9wdHIpCitzdGF0aWMgdm9pZCByZWFkX2NoYXJfcmFuZ2UoY29tcGlsZXJfY29tbW9uICpjb21tb24sIHNsaml0X3UzMiBtaW4sIHNsaml0X3UzMiBtYXgsIEJPT0wgdXBkYXRlX3N0cl9wdHIpCiB7CiAvKiBSZWFkcyB0aGUgcHJlY2lzZSB2YWx1ZSBvZiBhIGNoYXJhY3RlciBpbnRvIFRNUDEsIGlmIHRoZSBjaGFyYWN0ZXIgaXMKIGJldHdlZW4gbWluIGFuZCBtYXggKGMgPj0gbWluICYmIGMgPD0gbWF4KS4gT3RoZXJ3aXNlIGl0IHJldHVybnMgd2l0aCBhIHZhbHVlCkBAIC0yOTEzLDcgKzI5MTMsNyBAQAogICAgIHsKICAgICBPUDIoU0xKSVRfU1VCLCBUTVAyLCAwLCBUTVAxLCAwLCBTTEpJVF9JTU0sIDB4ZjApOwogICAgIGlmICh1cGRhdGVfc3RyX3B0cikKLSAgICAgIE9QMShTTEpJVF9NT1ZfVUIsIFJFVFVSTl9BRERSLCAwLCBTTEpJVF9NRU0xKFRNUDEpLCAoc2xqaXRfc3cpUFJJVih1dGY4X3RhYmxlNCkgLSAweGMwKTsKKyAgICAgIE9QMShTTEpJVF9NT1ZfVTgsIFJFVFVSTl9BRERSLCAwLCBTTEpJVF9NRU0xKFRNUDEpLCAoc2xqaXRfc3cpUFJJVih1dGY4X3RhYmxlNCkgLSAweGMwKTsKICAgICBPUDEoTU9WX1VDSEFSLCBUTVAxLCAwLCBTTEpJVF9NRU0xKFNUUl9QVFIpLCBJTl9VQ0hBUlMoMCkpOwogICAgIGp1bXAyID0gQ01QKFNMSklUX0dSRUFURVIsIFRNUDIsIDAsIFNMSklUX0lNTSwgMHg3KTsKICAgICBPUDIoU0xKSVRfU0hMLCBUTVAyLCAwLCBUTVAyLCAwLCBTTEpJVF9JTU0sIDYpOwpAQCAtMjkzNyw3ICsyOTM3LDcgQEAKICAgICB7CiAgICAgT1AyKFNMSklUX1NVQiwgVE1QMiwgMCwgVE1QMSwgMCwgU0xKSVRfSU1NLCAweGUwKTsKICAgICBpZiAodXBkYXRlX3N0cl9wdHIpCi0gICAgICBPUDEoU0xKSVRfTU9WX1VCLCBSRVRVUk5fQUREUiwgMCwgU0xKSVRfTUVNMShUTVAxKSwgKHNsaml0X3N3KVBSSVYodXRmOF90YWJsZTQpIC0gMHhjMCk7CisgICAgICBPUDEoU0xKSVRfTU9WX1U4LCBSRVRVUk5fQUREUiwgMCwgU0xKSVRfTUVNMShUTVAxKSwgKHNsaml0X3N3KVBSSVYodXRmOF90YWJsZTQpIC0gMHhjMCk7CiAgICAgT1AxKE1PVl9VQ0hBUiwgVE1QMSwgMCwgU0xKSVRfTUVNMShTVFJfUFRSKSwgSU5fVUNIQVJTKDApKTsKICAgICBqdW1wMiA9IENNUChTTEpJVF9HUkVBVEVSLCBUTVAyLCAwLCBTTEpJVF9JTU0sIDB4Zik7CiAgICAgT1AyKFNMSklUX1NITCwgVE1QMiwgMCwgVE1QMiwgMCwgU0xKSVRfSU1NLCA2KTsKQEAgLTI5NTcsNyArMjk1Nyw3IEBACiAgICAgYWRkX2p1bXAoY29tcGlsZXIsIChtYXggPCAweDEwMDAwKSA/ICZjb21tb24tPnV0ZnJlYWRjaGFyMTYgOiAmY29tbW9uLT51dGZyZWFkY2hhciwgSlVNUChTTEpJVF9GQVNUX0NBTEwpKTsKICAgZWxzZSBpZiAobWF4IDwgMTI4KQogICAgIHsKLSAgICBPUDEoU0xKSVRfTU9WX1VCLCBUTVAyLCAwLCBTTEpJVF9NRU0xKFRNUDEpLCAoc2xqaXRfc3cpUFJJVih1dGY4X3RhYmxlNCkgLSAweGMwKTsKKyAgICBPUDEoU0xKSVRfTU9WX1U4LCBUTVAyLCAwLCBTTEpJVF9NRU0xKFRNUDEpLCAoc2xqaXRfc3cpUFJJVih1dGY4X3RhYmxlNCkgLSAweGMwKTsKICAgICBPUDIoU0xKSVRfQURELCBTVFJfUFRSLCAwLCBTVFJfUFRSLCAwLCBUTVAyLCAwKTsKICAgICB9CiAgIGVsc2UKQEAgLTI5NjYsNyArMjk2Niw3IEBACiAgICAgaWYgKCF1cGRhdGVfc3RyX3B0cikKICAgICAgIE9QMihTTEpJVF9BREQsIFNUUl9QVFIsIDAsIFNUUl9QVFIsIDAsIFNMSklUX0lNTSwgSU5fVUNIQVJTKDEpKTsKICAgICBlbHNlCi0gICAgICBPUDEoU0xKSVRfTU9WX1VCLCBSRVRVUk5fQUREUiwgMCwgU0xKSVRfTUVNMShUTVAxKSwgKHNsaml0X3N3KVBSSVYodXRmOF90YWJsZTQpIC0gMHhjMCk7CisgICAgICBPUDEoU0xKSVRfTU9WX1U4LCBSRVRVUk5fQUREUiwgMCwgU0xKSVRfTUVNMShUTVAxKSwgKHNsaml0X3N3KVBSSVYodXRmOF90YWJsZTQpIC0gMHhjMCk7CiAgICAgT1AyKFNMSklUX0FORCwgVE1QMSwgMCwgVE1QMSwgMCwgU0xKSVRfSU1NLCAweDNmKTsKICAgICBPUDIoU0xKSVRfU0hMLCBUTVAxLCAwLCBUTVAxLCAwLCBTTEpJVF9JTU0sIDYpOwogICAgIE9QMihTTEpJVF9BTkQsIFRNUDIsIDAsIFRNUDIsIDAsIFNMSklUX0lNTSwgMHgzZik7CkBAIC0zMDM2LDcgKzMwMzYsNyBAQAogICB7CiAgIC8qIFRoaXMgY2FuIGJlIGFuIGV4dHJhIHJlYWQgaW4gc29tZSBzaXR1YXRpb25zLCBidXQgaG9wZWZ1bGx5CiAgIGl0IGlzIG5lZWRlZCBpbiBtb3N0IGNhc2VzLiAqLwotICBPUDEoU0xKSVRfTU9WX1VCLCBUTVAxLCAwLCBTTEpJVF9NRU0xKFRNUDIpLCBjb21tb24tPmN0eXBlcyk7CisgIE9QMShTTEpJVF9NT1ZfVTgsIFRNUDEsIDAsIFNMSklUX01FTTEoVE1QMiksIGNvbW1vbi0+Y3R5cGVzKTsKICAganVtcCA9IENNUChTTEpJVF9MRVNTLCBUTVAyLCAwLCBTTEpJVF9JTU0sIDB4YzApOwogICBpZiAoIXVwZGF0ZV9zdHJfcHRyKQogICAgIHsKQEAgLTMwNDgsNyArMzA0OCw3IEBACiAgICAgT1AyKFNMSklUX09SLCBUTVAyLCAwLCBUTVAyLCAwLCBUTVAxLCAwKTsKICAgICBPUDEoU0xKSVRfTU9WLCBUTVAxLCAwLCBTTEpJVF9JTU0sIDApOwogICAgIGp1bXAyID0gQ01QKFNMSklUX0dSRUFURVIsIFRNUDIsIDAsIFNMSklUX0lNTSwgMjU1KTsKLSAgICBPUDEoU0xKSVRfTU9WX1VCLCBUTVAxLCAwLCBTTEpJVF9NRU0xKFRNUDIpLCBjb21tb24tPmN0eXBlcyk7CisgICAgT1AxKFNMSklUX01PVl9VOCwgVE1QMSwgMCwgU0xKSVRfTUVNMShUTVAyKSwgY29tbW9uLT5jdHlwZXMpOwogICAgIEpVTVBIRVJFKGp1bXAyKTsKICAgICB9CiAgIGVsc2UKQEAgLTMwNjMsNyArMzA2Myw3IEBACiBPUDEoU0xKSVRfTU9WLCBUTVAxLCAwLCBTTEpJVF9JTU0sIDApOwoganVtcCA9IENNUChTTEpJVF9HUkVBVEVSLCBUTVAyLCAwLCBTTEpJVF9JTU0sIDI1NSk7CiAjZW5kaWYKLU9QMShTTEpJVF9NT1ZfVUIsIFRNUDEsIDAsIFNMSklUX01FTTEoVE1QMiksIGNvbW1vbi0+Y3R5cGVzKTsKK09QMShTTEpJVF9NT1ZfVTgsIFRNUDEsIDAsIFNMSklUX01FTTEoVE1QMiksIGNvbW1vbi0+Y3R5cGVzKTsKICNpZiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggIT0gOAogSlVNUEhFUkUoanVtcCk7CiAjZW5kaWYKQEAgLTMyNTUsNyArMzI1NSw3IEBACiBPUDIoU0xKSVRfU0hMLCBUTVAyLCAwLCBUTVAyLCAwLCBTTEpJVF9JTU0sIDYpOwogT1AyKFNMSklUX0FORCwgVE1QMSwgMCwgVE1QMSwgMCwgU0xKSVRfSU1NLCAweDNmKTsKIE9QMihTTEpJVF9PUiwgVE1QMiwgMCwgVE1QMiwgMCwgVE1QMSwgMCk7Ci1PUDEoU0xKSVRfTU9WX1VCLCBUTVAxLCAwLCBTTEpJVF9NRU0xKFRNUDIpLCBjb21tb24tPmN0eXBlcyk7CitPUDEoU0xKSVRfTU9WX1U4LCBUTVAxLCAwLCBTTEpJVF9NRU0xKFRNUDIpLCBjb21tb24tPmN0eXBlcyk7CiBzbGppdF9lbWl0X2Zhc3RfcmV0dXJuKGNvbXBpbGVyLCBSRVRVUk5fQUREUiwgMCk7CiAKIEpVTVBIRVJFKGNvbXBhcmUpOwpAQCAtMzI2NCw3ICszMjY0LDcgQEAKIAogLyogV2Ugb25seSBoYXZlIHR5cGVzIGZvciBjaGFyYWN0ZXJzIGxlc3MgdGhhbiAyNTYuICovCiBKVU1QSEVSRShqdW1wKTsKLU9QMShTTEpJVF9NT1ZfVUIsIFRNUDIsIDAsIFNMSklUX01FTTEoVE1QMiksIChzbGppdF9zdylQUklWKHV0ZjhfdGFibGU0KSAtIDB4YzApOworT1AxKFNMSklUX01PVl9VOCwgVE1QMiwgMCwgU0xKSVRfTUVNMShUTVAyKSwgKHNsaml0X3N3KVBSSVYodXRmOF90YWJsZTQpIC0gMHhjMCk7CiBPUDEoU0xKSVRfTU9WLCBUTVAxLCAwLCBTTEpJVF9JTU0sIDApOwogT1AyKFNMSklUX0FERCwgU1RSX1BUUiwgMCwgU1RSX1BUUiwgMCwgVE1QMiwgMCk7CiBzbGppdF9lbWl0X2Zhc3RfcmV0dXJuKGNvbXBpbGVyLCBSRVRVUk5fQUREUiwgMCk7CkBAIC0zMjg2LDIwICszMjg2LDIwIEBACiAKIHNsaml0X2VtaXRfZmFzdF9lbnRlcihjb21waWxlciwgUkVUVVJOX0FERFIsIDApOwogT1AyKFNMSklUX0xTSFIsIFRNUDIsIDAsIFRNUDEsIDAsIFNMSklUX0lNTSwgVUNEX0JMT0NLX1NISUZUKTsKLU9QMShTTEpJVF9NT1ZfVUIsIFRNUDIsIDAsIFNMSklUX01FTTEoVE1QMiksIChzbGppdF9zdylQUklWKHVjZF9zdGFnZTEpKTsKK09QMShTTEpJVF9NT1ZfVTgsIFRNUDIsIDAsIFNMSklUX01FTTEoVE1QMiksIChzbGppdF9zdylQUklWKHVjZF9zdGFnZTEpKTsKIE9QMihTTEpJVF9BTkQsIFRNUDEsIDAsIFRNUDEsIDAsIFNMSklUX0lNTSwgVUNEX0JMT0NLX01BU0spOwogT1AyKFNMSklUX1NITCwgVE1QMiwgMCwgVE1QMiwgMCwgU0xKSVRfSU1NLCBVQ0RfQkxPQ0tfU0hJRlQpOwogT1AyKFNMSklUX0FERCwgVE1QMSwgMCwgVE1QMSwgMCwgVE1QMiwgMCk7CiBPUDEoU0xKSVRfTU9WLCBUTVAyLCAwLCBTTEpJVF9JTU0sIChzbGppdF9zdylQUklWKHVjZF9zdGFnZTIpKTsKLU9QMShTTEpJVF9NT1ZfVUgsIFRNUDIsIDAsIFNMSklUX01FTTIoVE1QMiwgVE1QMSksIDEpOworT1AxKFNMSklUX01PVl9VMTYsIFRNUDIsIDAsIFNMSklUX01FTTIoVE1QMiwgVE1QMSksIDEpOwogT1AxKFNMSklUX01PViwgVE1QMSwgMCwgU0xKSVRfSU1NLCAoc2xqaXRfc3cpUFJJVih1Y2RfcmVjb3JkcykgKyBTTEpJVF9PRkZTRVRPRih1Y2RfcmVjb3JkLCBjaGFydHlwZSkpOwotT1AxKFNMSklUX01PVl9VQiwgVE1QMSwgMCwgU0xKSVRfTUVNMihUTVAxLCBUTVAyKSwgMyk7CitPUDEoU0xKSVRfTU9WX1U4LCBUTVAxLCAwLCBTTEpJVF9NRU0yKFRNUDEsIFRNUDIpLCAzKTsKIHNsaml0X2VtaXRfZmFzdF9yZXR1cm4oY29tcGlsZXIsIFJFVFVSTl9BRERSLCAwKTsKIH0KIAogI2VuZGlmIC8qIFNVUFBPUlRfVU5JQ09ERSAqLwogCi1zdGF0aWMgU0xKSVRfSU5MSU5FIHN0cnVjdCBzbGppdF9sYWJlbCAqbWFpbmxvb3BfZW50cnkoY29tcGlsZXJfY29tbW9uICpjb21tb24sIEJPT0wgaGFzY3JvcmxmLCB1aW50MzJfdCBvdmVyYWxsX29wdGlvbnMpCitzdGF0aWMgU0xKSVRfSU5MSU5FIHN0cnVjdCBzbGppdF9sYWJlbCAqbWFpbmxvb3BfZW50cnkoY29tcGlsZXJfY29tbW9uICpjb21tb24sIEJPT0wgaGFzY3JvcmxmLCBzbGppdF91MzIgb3ZlcmFsbF9vcHRpb25zKQogewogREVGSU5FX0NPTVBJTEVSOwogc3RydWN0IHNsaml0X2xhYmVsICptYWlubG9vcDsKQEAgLTM0MTcsNyArMzQxNyw3IEBACiBpZiAoY29tbW9uLT51dGYpCiAgIHsKICAgc2luZ2xlY2hhciA9IENNUChTTEpJVF9MRVNTLCBUTVAxLCAwLCBTTEpJVF9JTU0sIDB4YzApOwotICBPUDEoU0xKSVRfTU9WX1VCLCBUTVAxLCAwLCBTTEpJVF9NRU0xKFRNUDEpLCAoc2xqaXRfc3cpUFJJVih1dGY4X3RhYmxlNCkgLSAweGMwKTsKKyAgT1AxKFNMSklUX01PVl9VOCwgVE1QMSwgMCwgU0xKSVRfTUVNMShUTVAxKSwgKHNsaml0X3N3KVBSSVYodXRmOF90YWJsZTQpIC0gMHhjMCk7CiAgIE9QMihTTEpJVF9BREQsIFNUUl9QVFIsIDAsIFNUUl9QVFIsIDAsIFRNUDEsIDApOwogICBKVU1QSEVSRShzaW5nbGVjaGFyKTsKICAgfQpAQCAtMzQ3OCwxMyArMzQ3OCwxMyBAQAogY2hhcnNbMF0gPSBsZW47CiB9CiAKLXN0YXRpYyBpbnQgc2Nhbl9wcmVmaXgoY29tcGlsZXJfY29tbW9uICpjb21tb24sIFBDUkUyX1NQVFIgY2MsIFBDUkUyX1VDSEFSICpjaGFycywgaW50IG1heF9jaGFycywgdWludDMyX3QgKnJlY19jb3VudCkKK3N0YXRpYyBpbnQgc2Nhbl9wcmVmaXgoY29tcGlsZXJfY29tbW9uICpjb21tb24sIFBDUkUyX1NQVFIgY2MsIFBDUkUyX1VDSEFSICpjaGFycywgaW50IG1heF9jaGFycywgc2xqaXRfdTMyICpyZWNfY291bnQpCiB7CiAvKiBSZWN1cnNpdmUgZnVuY3Rpb24sIHdoaWNoIHNjYW5zIHByZWZpeCBsaXRlcmFscy4gKi8KIEJPT0wgbGFzdCwgYW55LCBjbGFzcywgY2FzZWxlc3M7CiBpbnQgbGVuLCByZXBlYXQsIGxlbl9zYXZlLCBjb25zdW1lZCA9IDA7Ci1zbGppdF91aSBjaHI7IC8qIEFueSB1bmljb2RlIGNoYXJhY3Rlci4gKi8KLXNsaml0X3ViICpieXRlcywgKmJ5dGVzX2VuZCwgYnl0ZTsKK3Nsaml0X3UzMiBjaHI7IC8qIEFueSB1bmljb2RlIGNoYXJhY3Rlci4gKi8KK3Nsaml0X3U4ICpieXRlcywgKmJ5dGVzX2VuZCwgYnl0ZTsKIFBDUkUyX1NQVFIgYWx0ZXJuYXRpdmUsIGNjX3NhdmUsIG9jOwogI2lmIGRlZmluZWQgU1VQUE9SVF9VTklDT0RFICYmIFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSA4CiBQQ1JFMl9VQ0hBUiBvdGhlcmNhc2VbOF07CkBAIC0zNjAzLDcgKzM2MDMsOCBAQAogCiAgICAgY2FzZSBPUF9DTEFTUzoKICNpZiBkZWZpbmVkIFNVUFBPUlRfVU5JQ09ERSAmJiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gOAotICAgIGlmIChjb21tb24tPnV0ZiAmJiAhaXNfY2hhcjdfYml0c2V0KChjb25zdCBzbGppdF91YiAqKShjYyArIDEpLCBGQUxTRSkpIHJldHVybiBjb25zdW1lZDsKKyAgICBpZiAoY29tbW9uLT51dGYgJiYgIWlzX2NoYXI3X2JpdHNldCgoY29uc3Qgc2xqaXRfdTggKikoY2MgKyAxKSwgRkFMU0UpKQorICAgICAgcmV0dXJuIGNvbnN1bWVkOwogI2VuZGlmCiAgICAgY2xhc3MgPSBUUlVFOwogICAgIGJyZWFrOwpAQCAtMzYyNyw3ICszNjI4LDcgQEAKIAogICAgIGNhc2UgT1BfRElHSVQ6CiAjaWYgZGVmaW5lZCBTVVBQT1JUX1VOSUNPREUgJiYgUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDgKLSAgICBpZiAoY29tbW9uLT51dGYgJiYgIWlzX2NoYXI3X2JpdHNldCgoY29uc3Qgc2xqaXRfdWIgKiljb21tb24tPmN0eXBlcyAtIGNiaXRfbGVuZ3RoICsgY2JpdF9kaWdpdCwgRkFMU0UpKQorICAgIGlmIChjb21tb24tPnV0ZiAmJiAhaXNfY2hhcjdfYml0c2V0KChjb25zdCBzbGppdF91OCAqKWNvbW1vbi0+Y3R5cGVzIC0gY2JpdF9sZW5ndGggKyBjYml0X2RpZ2l0LCBGQUxTRSkpCiAgICAgICByZXR1cm4gY29uc3VtZWQ7CiAjZW5kaWYKICAgICBhbnkgPSBUUlVFOwpAQCAtMzYzNiw3ICszNjM3LDcgQEAKIAogICAgIGNhc2UgT1BfV0hJVEVTUEFDRToKICNpZiBkZWZpbmVkIFNVUFBPUlRfVU5JQ09ERSAmJiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gOAotICAgIGlmIChjb21tb24tPnV0ZiAmJiAhaXNfY2hhcjdfYml0c2V0KChjb25zdCBzbGppdF91YiAqKWNvbW1vbi0+Y3R5cGVzIC0gY2JpdF9sZW5ndGggKyBjYml0X3NwYWNlLCBGQUxTRSkpCisgICAgaWYgKGNvbW1vbi0+dXRmICYmICFpc19jaGFyN19iaXRzZXQoKGNvbnN0IHNsaml0X3U4ICopY29tbW9uLT5jdHlwZXMgLSBjYml0X2xlbmd0aCArIGNiaXRfc3BhY2UsIEZBTFNFKSkKICAgICAgIHJldHVybiBjb25zdW1lZDsKICNlbmRpZgogICAgIGFueSA9IFRSVUU7CkBAIC0zNjQ1LDcgKzM2NDYsNyBAQAogCiAgICAgY2FzZSBPUF9XT1JEQ0hBUjoKICNpZiBkZWZpbmVkIFNVUFBPUlRfVU5JQ09ERSAmJiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gOAotICAgIGlmIChjb21tb24tPnV0ZiAmJiAhaXNfY2hhcjdfYml0c2V0KChjb25zdCBzbGppdF91YiAqKWNvbW1vbi0+Y3R5cGVzIC0gY2JpdF9sZW5ndGggKyBjYml0X3dvcmQsIEZBTFNFKSkKKyAgICBpZiAoY29tbW9uLT51dGYgJiYgIWlzX2NoYXI3X2JpdHNldCgoY29uc3Qgc2xqaXRfdTggKiljb21tb24tPmN0eXBlcyAtIGNiaXRfbGVuZ3RoICsgY2JpdF93b3JkLCBGQUxTRSkpCiAgICAgICByZXR1cm4gY29uc3VtZWQ7CiAjZW5kaWYKICAgICBhbnkgPSBUUlVFOwpAQCAtMzcxNyw3ICszNzE4LDcgQEAKIAogICBpZiAoY2xhc3MpCiAgICAgewotICAgIGJ5dGVzID0gKHNsaml0X3ViKikgKGNjICsgMSk7CisgICAgYnl0ZXMgPSAoc2xqaXRfdTgqKSAoY2MgKyAxKTsKICAgICBjYyArPSAxICsgMzIgLyBzaXplb2YoUENSRTJfVUNIQVIpOwogCiAgICAgc3dpdGNoICgqY2MpCkBAIC0zODc3LDkgKzM4NzgsOSBAQAogCiAjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1g4NiAmJiBTTEpJVF9DT05GSUdfWDg2KQogCi1zdGF0aWMgc2xqaXRfc2kgY2hhcmFjdGVyX3RvX2ludDMyKFBDUkUyX1VDSEFSIGNocikKK3N0YXRpYyBzbGppdF9zMzIgY2hhcmFjdGVyX3RvX2ludDMyKFBDUkUyX1VDSEFSIGNocikKIHsKLXNsaml0X3NpIHZhbHVlID0gKHNsaml0X3NpKWNocjsKK3Nsaml0X3MzMiB2YWx1ZSA9IChzbGppdF9zMzIpY2hyOwogI2lmIFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSA4CiAjZGVmaW5lIFNTRTJfQ09NUEFSRV9UWVBFX0lOREVYIDAKIHJldHVybiAodmFsdWUgPDwgMjQpIHwgKHZhbHVlIDw8IDE2KSB8ICh2YWx1ZSA8PCA4KSB8IHZhbHVlOwpAQCAtMzkwMCwxMCArMzkwMSwxMCBAQAogc3RydWN0IHNsaml0X2xhYmVsICpzdGFydDsKIHN0cnVjdCBzbGppdF9qdW1wICpxdWl0WzNdOwogc3RydWN0IHNsaml0X2p1bXAgKm5vbWF0Y2g7Ci1zbGppdF91YiBpbnN0cnVjdGlvbls4XTsKLXNsaml0X3NpIHRtcDFfaW5kID0gc2xqaXRfZ2V0X3JlZ2lzdGVyX2luZGV4KFRNUDEpOwotc2xqaXRfc2kgdG1wMl9pbmQgPSBzbGppdF9nZXRfcmVnaXN0ZXJfaW5kZXgoVE1QMik7Ci1zbGppdF9zaSBzdHJfcHRyX2luZCA9IHNsaml0X2dldF9yZWdpc3Rlcl9pbmRleChTVFJfUFRSKTsKK3Nsaml0X3U4IGluc3RydWN0aW9uWzhdOworc2xqaXRfczMyIHRtcDFfaW5kID0gc2xqaXRfZ2V0X3JlZ2lzdGVyX2luZGV4KFRNUDEpOworc2xqaXRfczMyIHRtcDJfaW5kID0gc2xqaXRfZ2V0X3JlZ2lzdGVyX2luZGV4KFRNUDIpOworc2xqaXRfczMyIHN0cl9wdHJfaW5kID0gc2xqaXRfZ2V0X3JlZ2lzdGVyX2luZGV4KFNUUl9QVFIpOwogQk9PTCBsb2FkX3R3aWNlID0gRkFMU0U7CiBQQ1JFMl9VQ0hBUiBiaXQ7CiAKQEAgLTQwMjYsMTIgKzQwMjcsMTIgQEAKIAogaWYgKGxvYWRfdHdpY2UpCiAgIHsKLSAgT1AxKFNMSklUX01PViwgVE1QMywgMCwgVE1QMiwgMCk7CisgIE9QMShTTEpJVF9NT1YsIFJFVFVSTl9BRERSLCAwLCBUTVAyLCAwKTsKICAgaW5zdHJ1Y3Rpb25bM10gPSAweGMwIHwgKHRtcDJfaW5kIDw8IDMpIHwgMTsKICAgc2xqaXRfZW1pdF9vcF9jdXN0b20oY29tcGlsZXIsIGluc3RydWN0aW9uLCA0KTsKIAogICBPUDIoU0xKSVRfT1IsIFRNUDEsIDAsIFRNUDEsIDAsIFRNUDIsIDApOwotICBPUDEoU0xKSVRfTU9WLCBUTVAyLCAwLCBUTVAzLCAwKTsKKyAgT1AxKFNMSklUX01PViwgVE1QMiwgMCwgUkVUVVJOX0FERFIsIDApOwogICB9CiAKIE9QMihTTEpJVF9BU0hSLCBUTVAxLCAwLCBUTVAxLCAwLCBUTVAyLCAwKTsKQEAgLTQxNTYsNyArNDE1Nyw3IEBACiAKICNlbmRpZgogCi1zdGF0aWMgdm9pZCBmYXN0X2ZvcndhcmRfZmlyc3RfY2hhcjIoY29tcGlsZXJfY29tbW9uICpjb21tb24sIFBDUkUyX1VDSEFSIGNoYXIxLCBQQ1JFMl9VQ0hBUiBjaGFyMiwgc2xqaXRfc2kgb2Zmc2V0KQorc3RhdGljIHZvaWQgZmFzdF9mb3J3YXJkX2ZpcnN0X2NoYXIyKGNvbXBpbGVyX2NvbW1vbiAqY29tbW9uLCBQQ1JFMl9VQ0hBUiBjaGFyMSwgUENSRTJfVUNIQVIgY2hhcjIsIHNsaml0X3MzMiBvZmZzZXQpCiB7CiBERUZJTkVfQ09NUElMRVI7CiBzdHJ1Y3Qgc2xqaXRfbGFiZWwgKnN0YXJ0OwpAQCAtNDMzMywxNCArNDMzNCwxNCBAQAogLyogYnl0ZXNbMF0gcmVwcmVzZW50IHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBiZXR3ZWVuIDAKIGFuZCBNQVhfTl9CWVRFUyAtIDEsIDI1NSByZXByZXNlbnRzIGFueSBjaGFyYWN0ZXIuICovCiBQQ1JFMl9VQ0hBUiBjaGFyc1tNQVhfTl9DSEFSUyAqIE1BWF9ESUZGX0NIQVJTXTsKLXNsaml0X3NpIG9mZnNldDsKK3Nsaml0X3MzMiBvZmZzZXQ7CiBQQ1JFMl9VQ0hBUiBtYXNrOwogUENSRTJfVUNIQVIgKmNoYXJfc2V0LCAqY2hhcl9zZXRfZW5kOwogaW50IGksIG1heCwgZnJvbTsKIGludCByYW5nZV9yaWdodCA9IC0xLCByYW5nZV9sZW47Ci1zbGppdF91YiAqdXBkYXRlX3RhYmxlID0gTlVMTDsKK3Nsaml0X3U4ICp1cGRhdGVfdGFibGUgPSBOVUxMOwogQk9PTCBpbl9yYW5nZTsKLXVpbnQzMl90IHJlY19jb3VudDsKK3Nsaml0X3UzMiByZWNfY291bnQ7CiAKIGZvciAoaSA9IDA7IGkgPCBNQVhfTl9DSEFSUzsgaSsrKQogICBjaGFyc1tpICogTUFYX0RJRkZfQ0hBUlNdID0gMDsKQEAgLTQzNzgsNyArNDM3OSw3IEBACiAKIGlmIChyYW5nZV9yaWdodCA+PSAwKQogICB7Ci0gIHVwZGF0ZV90YWJsZSA9IChzbGppdF91YiAqKWFsbG9jYXRlX3JlYWRfb25seV9kYXRhKGNvbW1vbiwgMjU2KTsKKyAgdXBkYXRlX3RhYmxlID0gKHNsaml0X3U4ICopYWxsb2NhdGVfcmVhZF9vbmx5X2RhdGEoY29tbW9uLCAyNTYpOwogICBpZiAodXBkYXRlX3RhYmxlID09IE5VTEwpCiAgICAgcmV0dXJuIFRSVUU7CiAgIG1lbXNldCh1cGRhdGVfdGFibGUsIElOX1VDSEFSUyhyYW5nZV9sZW4pLCAyNTYpOwpAQCAtNDQ2NCwxNSArNDQ2NSwxNSBAQAogcXVpdCA9IENNUChTTEpJVF9HUkVBVEVSX0VRVUFMLCBTVFJfUFRSLCAwLCBTVFJfRU5ELCAwKTsKIAogI2lmIFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSA4IHx8IChkZWZpbmVkIFNMSklUX0xJVFRMRV9FTkRJQU4gJiYgU0xKSVRfTElUVExFX0VORElBTikKLU9QMShTTEpJVF9NT1ZfVUIsIFRNUDEsIDAsIFNMSklUX01FTTEoU1RSX1BUUiksIElOX1VDSEFSUyhyYW5nZV9yaWdodCkpOworT1AxKFNMSklUX01PVl9VOCwgVE1QMSwgMCwgU0xKSVRfTUVNMShTVFJfUFRSKSwgSU5fVUNIQVJTKHJhbmdlX3JpZ2h0KSk7CiAjZWxzZQotT1AxKFNMSklUX01PVl9VQiwgVE1QMSwgMCwgU0xKSVRfTUVNMShTVFJfUFRSKSwgSU5fVUNIQVJTKHJhbmdlX3JpZ2h0ICsgMSkgLSAxKTsKK09QMShTTEpJVF9NT1ZfVTgsIFRNUDEsIDAsIFNMSklUX01FTTEoU1RSX1BUUiksIElOX1VDSEFSUyhyYW5nZV9yaWdodCArIDEpIC0gMSk7CiAjZW5kaWYKIAogI2lmICEoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2XzMyICYmIFNMSklUX0NPTkZJR19YODZfMzIpCi1PUDEoU0xKSVRfTU9WX1VCLCBUTVAxLCAwLCBTTEpJVF9NRU0yKFJFVFVSTl9BRERSLCBUTVAxKSwgMCk7CitPUDEoU0xKSVRfTU9WX1U4LCBUTVAxLCAwLCBTTEpJVF9NRU0yKFJFVFVSTl9BRERSLCBUTVAxKSwgMCk7CiAjZWxzZQotT1AxKFNMSklUX01PVl9VQiwgVE1QMSwgMCwgU0xKSVRfTUVNMShUTVAxKSwgKHNsaml0X3N3KXVwZGF0ZV90YWJsZSk7CitPUDEoU0xKSVRfTU9WX1U4LCBUTVAxLCAwLCBTTEpJVF9NRU0xKFRNUDEpLCAoc2xqaXRfc3cpdXBkYXRlX3RhYmxlKTsKICNlbmRpZgogT1AyKFNMSklUX0FERCwgU1RSX1BUUiwgMCwgU1RSX1BUUiwgMCwgVE1QMSwgMCk7CiBDTVBUTyhTTEpJVF9OT1RfRVFVQUwsIFRNUDEsIDAsIFNMSklUX0lNTSwgMCwgc3RhcnQpOwpAQCAtNDU0OCw3ICs0NTQ5LDYgQEAKIH0KIAogI3VuZGVmIE1BWF9OX0NIQVJTCi0jdW5kZWYgTUFYX05fQllURVMKIAogc3RhdGljIFNMSklUX0lOTElORSB2b2lkIGZhc3RfZm9yd2FyZF9maXJzdF9jaGFyKGNvbXBpbGVyX2NvbW1vbiAqY29tbW9uLCBQQ1JFMl9VQ0hBUiBmaXJzdF9jaGFyLCBCT09MIGNhc2VsZXNzKQogewpAQCAtNDY1NCw5ICs0NjU0LDkgQEAKICAgT1AxKFNMSklUX01PViwgU1RSX0VORCwgMCwgVE1QMywgMCk7CiB9CiAKLXN0YXRpYyBCT09MIGNoZWNrX2NsYXNzX3Jhbmdlcyhjb21waWxlcl9jb21tb24gKmNvbW1vbiwgY29uc3Qgc2xqaXRfdWIgKmJpdHMsIEJPT0wgbmNsYXNzLCBCT09MIGludmVydCwganVtcF9saXN0ICoqYmFja3RyYWNrcyk7CitzdGF0aWMgQk9PTCBjaGVja19jbGFzc19yYW5nZXMoY29tcGlsZXJfY29tbW9uICpjb21tb24sIGNvbnN0IHNsaml0X3U4ICpiaXRzLCBCT09MIG5jbGFzcywgQk9PTCBpbnZlcnQsIGp1bXBfbGlzdCAqKmJhY2t0cmFja3MpOwogCi1zdGF0aWMgU0xKSVRfSU5MSU5FIHZvaWQgZmFzdF9mb3J3YXJkX3N0YXJ0X2JpdHMoY29tcGlsZXJfY29tbW9uICpjb21tb24sIGNvbnN0IHNsaml0X3ViICpzdGFydF9iaXRzKQorc3RhdGljIFNMSklUX0lOTElORSB2b2lkIGZhc3RfZm9yd2FyZF9zdGFydF9iaXRzKGNvbXBpbGVyX2NvbW1vbiAqY29tbW9uLCBjb25zdCBzbGppdF91OCAqc3RhcnRfYml0cykKIHsKIERFRklORV9DT01QSUxFUjsKIHN0cnVjdCBzbGppdF9sYWJlbCAqc3RhcnQ7CkBAIC00NjkwLDcgKzQ2OTAsNyBAQAogI2VuZGlmCiAgIE9QMihTTEpJVF9BTkQsIFRNUDIsIDAsIFRNUDEsIDAsIFNMSklUX0lNTSwgMHg3KTsKICAgT1AyKFNMSklUX0xTSFIsIFRNUDEsIDAsIFRNUDEsIDAsIFNMSklUX0lNTSwgMyk7Ci0gIE9QMShTTEpJVF9NT1ZfVUIsIFRNUDEsIDAsIFNMSklUX01FTTEoVE1QMSksIChzbGppdF9zdylzdGFydF9iaXRzKTsKKyAgT1AxKFNMSklUX01PVl9VOCwgVE1QMSwgMCwgU0xKSVRfTUVNMShUTVAxKSwgKHNsaml0X3N3KXN0YXJ0X2JpdHMpOwogICBPUDIoU0xKSVRfU0hMLCBUTVAyLCAwLCBTTEpJVF9JTU0sIDEsIFRNUDIsIDApOwogICBPUDIoU0xKSVRfQU5EIHwgU0xKSVRfU0VUX0UsIFNMSklUX1VOVVNFRCwgMCwgVE1QMSwgMCwgVE1QMiwgMCk7CiAgIGZvdW5kID0gSlVNUChTTEpJVF9OT1RfWkVSTyk7CkBAIC00NzA2LDcgKzQ3MDYsNyBAQAogaWYgKGNvbW1vbi0+dXRmKQogICB7CiAgIENNUFRPKFNMSklUX0xFU1MsIFRNUDEsIDAsIFNMSklUX0lNTSwgMHhjMCwgc3RhcnQpOwotICBPUDEoU0xKSVRfTU9WX1VCLCBUTVAxLCAwLCBTTEpJVF9NRU0xKFRNUDEpLCAoc2xqaXRfc3cpUFJJVih1dGY4X3RhYmxlNCkgLSAweGMwKTsKKyAgT1AxKFNMSklUX01PVl9VOCwgVE1QMSwgMCwgU0xKSVRfTUVNMShUTVAxKSwgKHNsaml0X3N3KVBSSVYodXRmOF90YWJsZTQpIC0gMHhjMCk7CiAgIE9QMihTTEpJVF9BREQsIFNUUl9QVFIsIDAsIFNUUl9QVFIsIDAsIFRNUDEsIDApOwogICB9CiAjZWxpZiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gMTYKQEAgLTQ3NDEsNyArNDc0MSw3IEBACiBzdHJ1Y3Qgc2xqaXRfanVtcCAqZm91bmQ7CiBzdHJ1Y3Qgc2xqaXRfanVtcCAqZm91bmRvYyA9IE5VTEw7CiBzdHJ1Y3Qgc2xqaXRfanVtcCAqbm90Zm91bmQ7Ci1zbGppdF91aSBvYywgYml0Oworc2xqaXRfdTMyIG9jLCBiaXQ7CiAKIFNMSklUX0FTU0VSVChjb21tb24tPnJlcV9jaGFyX3B0ciAhPSAwKTsKIE9QMShTTEpJVF9NT1YsIFRNUDIsIDAsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBjb21tb24tPnJlcV9jaGFyX3B0cik7CkBAIC00ODc4LDcgKzQ4NzgsNyBAQAogICBpZiAoY29tbW9uLT51dGYpCiAgICAganVtcCA9IENNUChTTEpJVF9HUkVBVEVSLCBUTVAxLCAwLCBTTEpJVF9JTU0sIDI1NSk7CiAjZW5kaWYgLyogUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDggKi8KLSAgT1AxKFNMSklUX01PVl9VQiwgVE1QMSwgMCwgU0xKSVRfTUVNMShUTVAxKSwgY29tbW9uLT5jdHlwZXMpOworICBPUDEoU0xKSVRfTU9WX1U4LCBUTVAxLCAwLCBTTEpJVF9NRU0xKFRNUDEpLCBjb21tb24tPmN0eXBlcyk7CiAgIE9QMihTTEpJVF9MU0hSLCBUTVAxLCAwLCBUTVAxLCAwLCBTTEpJVF9JTU0sIDQgLyogY3R5cGVfd29yZCAqLyk7CiAgIE9QMihTTEpJVF9BTkQsIFRNUDEsIDAsIFRNUDEsIDAsIFNMSklUX0lNTSwgMSk7CiAgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBMT0NBTFMxLCBUTVAxLCAwKTsKQEAgLTQ5MjMsNyArNDkyMyw3IEBACiAgIGlmIChjb21tb24tPnV0ZikKICAgICBqdW1wID0gQ01QKFNMSklUX0dSRUFURVIsIFRNUDEsIDAsIFNMSklUX0lNTSwgMjU1KTsKICNlbmRpZgotICBPUDEoU0xKSVRfTU9WX1VCLCBUTVAyLCAwLCBTTEpJVF9NRU0xKFRNUDEpLCBjb21tb24tPmN0eXBlcyk7CisgIE9QMShTTEpJVF9NT1ZfVTgsIFRNUDIsIDAsIFNMSklUX01FTTEoVE1QMSksIGNvbW1vbi0+Y3R5cGVzKTsKICAgT1AyKFNMSklUX0xTSFIsIFRNUDIsIDAsIFRNUDIsIDAsIFNMSklUX0lNTSwgNCAvKiBjdHlwZV93b3JkICovKTsKICAgT1AyKFNMSklUX0FORCwgVE1QMiwgMCwgVE1QMiwgMCwgU0xKSVRfSU1NLCAxKTsKICNpZiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggIT0gOApAQCAtNDkzOSwxMiArNDkzOSwxMiBAQAogc2xqaXRfZW1pdF9mYXN0X3JldHVybihjb21waWxlciwgU0xKSVRfTUVNMShTTEpJVF9TUCksIExPQ0FMUzApOwogfQogCi1zdGF0aWMgQk9PTCBjaGVja19jbGFzc19yYW5nZXMoY29tcGlsZXJfY29tbW9uICpjb21tb24sIGNvbnN0IHNsaml0X3ViICpiaXRzLCBCT09MIG5jbGFzcywgQk9PTCBpbnZlcnQsIGp1bXBfbGlzdCAqKmJhY2t0cmFja3MpCitzdGF0aWMgQk9PTCBjaGVja19jbGFzc19yYW5nZXMoY29tcGlsZXJfY29tbW9uICpjb21tb24sIGNvbnN0IHNsaml0X3U4ICpiaXRzLCBCT09MIG5jbGFzcywgQk9PTCBpbnZlcnQsIGp1bXBfbGlzdCAqKmJhY2t0cmFja3MpCiB7CiAvKiBNYXkgZGVzdHJveSBUTVAxLiAqLwogREVGSU5FX0NPTVBJTEVSOwogaW50IHJhbmdlc1tNQVhfUkFOR0VfU0laRV07Ci1zbGppdF91YiBiaXQsIGNiaXQsIGFsbDsKK3Nsaml0X3U4IGJpdCwgY2JpdCwgYWxsOwogaW50IGksIGJ5dGUsIGxlbmd0aCA9IDA7CiAKIGJpdCA9IGJpdHNbMF0gJiAweDE7CkBAIC01MjM5LDEyICs1MjM5LDEyIEBACiAjaWYgUENSRTJfQ09ERV9VTklUX1dJRFRIICE9IDgKIGp1bXAgPSBDTVAoU0xKSVRfR1JFQVRFUiwgQ0hBUjEsIDAsIFNMSklUX0lNTSwgMjU1KTsKICNlbmRpZgotT1AxKFNMSklUX01PVl9VQiwgQ0hBUjEsIDAsIFNMSklUX01FTTIoTENDX1RBQkxFLCBDSEFSMSksIDApOworT1AxKFNMSklUX01PVl9VOCwgQ0hBUjEsIDAsIFNMSklUX01FTTIoTENDX1RBQkxFLCBDSEFSMSksIDApOwogI2lmIFBDUkUyX0NPREVfVU5JVF9XSURUSCAhPSA4CiBKVU1QSEVSRShqdW1wKTsKIGp1bXAgPSBDTVAoU0xKSVRfR1JFQVRFUiwgQ0hBUjIsIDAsIFNMSklUX0lNTSwgMjU1KTsKICNlbmRpZgotT1AxKFNMSklUX01PVl9VQiwgQ0hBUjIsIDAsIFNMSklUX01FTTIoTENDX1RBQkxFLCBDSEFSMiksIDApOworT1AxKFNMSklUX01PVl9VOCwgQ0hBUjIsIDAsIFNMSklUX01FTTIoTENDX1RBQkxFLCBDSEFSMiksIDApOwogI2lmIFBDUkUyX0NPREVfVU5JVF9XSURUSCAhPSA4CiBKVU1QSEVSRShqdW1wKTsKICNlbmRpZgpAQCAtNTI2OSwxMSArNTI2OSwxMSBAQAogc3RhdGljIFBDUkUyX1NQVFIgU0xKSVRfQ0FMTCBkb191dGZfY2FzZWxlc3NjbXAoUENSRTJfU1BUUiBzcmMxLCBqaXRfYXJndW1lbnRzICphcmdzLCBQQ1JFMl9TUFRSIGVuZDEpCiB7CiAvKiBUaGlzIGZ1bmN0aW9uIHdvdWxkIGJlIGluZWZmZWN0aXZlIHRvIGRvIGluIEpJVCBsZXZlbC4gKi8KLXNsaml0X3VpIGMxLCBjMjsKK3Nsaml0X3UzMiBjMSwgYzI7CiBQQ1JFMl9TUFRSIHNyYzIgPSBhcmdzLT5zdGFydGNoYXJfcHRyOwogUENSRTJfU1BUUiBlbmQyID0gYXJncy0+ZW5kOwogY29uc3QgdWNkX3JlY29yZCAqdXI7Ci1jb25zdCBzbGppdF91aSAqcHA7Citjb25zdCBzbGppdF91MzIgKnBwOwogCiB3aGlsZSAoc3JjMSA8IGVuZDEpCiAgIHsKQEAgLTUyOTcsOCArNTI5Nyw2IEBACiAKICNlbmRpZiAvKiBTVVBQT1JUX1VOSUNPREUgKi8KIAotc3RhdGljIFBDUkUyX1NQVFIgY29tcGlsZV9jaGFyMV9tYXRjaGluZ3BhdGgoY29tcGlsZXJfY29tbW9uICpjb21tb24sIFBDUkUyX1VDSEFSIHR5cGUsIFBDUkUyX1NQVFIgY2MsIGp1bXBfbGlzdCAqKmJhY2t0cmFja3MsIEJPT0wgY2hlY2tfc3RyX3B0cik7Ci0KIHN0YXRpYyBQQ1JFMl9TUFRSIGJ5dGVfc2VxdWVuY2VfY29tcGFyZShjb21waWxlcl9jb21tb24gKmNvbW1vbiwgQk9PTCBjYXNlbGVzcywgUENSRTJfU1BUUiBjYywKICAgICBjb21wYXJlX2NvbnRleHQgKmNvbnRleHQsIGp1bXBfbGlzdCAqKmJhY2t0cmFja3MpCiB7CkBAIC01MzM1LDE2ICs1MzMzLDE2IEBACiAjaWYgUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDgKICNpZiBkZWZpbmVkIFNMSklUX1VOQUxJR05FRCAmJiBTTEpJVF9VTkFMSUdORUQKICAgaWYgKGNvbnRleHQtPmxlbmd0aCA+PSA0KQotICAgIE9QMShTTEpJVF9NT1ZfU0ksIFRNUDEsIDAsIFNMSklUX01FTTEoU1RSX1BUUiksIC1jb250ZXh0LT5sZW5ndGgpOworICAgIE9QMShTTEpJVF9NT1ZfUzMyLCBUTVAxLCAwLCBTTEpJVF9NRU0xKFNUUl9QVFIpLCAtY29udGV4dC0+bGVuZ3RoKTsKICAgZWxzZSBpZiAoY29udGV4dC0+bGVuZ3RoID49IDIpCi0gICAgT1AxKFNMSklUX01PVl9VSCwgVE1QMSwgMCwgU0xKSVRfTUVNMShTVFJfUFRSKSwgLWNvbnRleHQtPmxlbmd0aCk7CisgICAgT1AxKFNMSklUX01PVl9VMTYsIFRNUDEsIDAsIFNMSklUX01FTTEoU1RSX1BUUiksIC1jb250ZXh0LT5sZW5ndGgpOwogICBlbHNlCiAjZW5kaWYKLSAgICBPUDEoU0xKSVRfTU9WX1VCLCBUTVAxLCAwLCBTTEpJVF9NRU0xKFNUUl9QVFIpLCAtY29udGV4dC0+bGVuZ3RoKTsKKyAgICBPUDEoU0xKSVRfTU9WX1U4LCBUTVAxLCAwLCBTTEpJVF9NRU0xKFNUUl9QVFIpLCAtY29udGV4dC0+bGVuZ3RoKTsKICNlbGlmIFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSAxNgogI2lmIGRlZmluZWQgU0xKSVRfVU5BTElHTkVEICYmIFNMSklUX1VOQUxJR05FRAogICBpZiAoY29udGV4dC0+bGVuZ3RoID49IDQpCi0gICAgT1AxKFNMSklUX01PVl9TSSwgVE1QMSwgMCwgU0xKSVRfTUVNMShTVFJfUFRSKSwgLWNvbnRleHQtPmxlbmd0aCk7CisgICAgT1AxKFNMSklUX01PVl9TMzIsIFRNUDEsIDAsIFNMSklUX01FTTEoU1RSX1BUUiksIC1jb250ZXh0LT5sZW5ndGgpOwogICBlbHNlCiAjZW5kaWYKICAgICBPUDEoTU9WX1VDSEFSLCBUTVAxLCAwLCBTTEpJVF9NRU0xKFNUUl9QVFIpLCAtY29udGV4dC0+bGVuZ3RoKTsKQEAgLTUzODYsMTIgKzUzODQsMTIgQEAKICNlbmRpZgogICAgIHsKICAgICBpZiAoY29udGV4dC0+bGVuZ3RoID49IDQpCi0gICAgICBPUDEoU0xKSVRfTU9WX1NJLCBjb250ZXh0LT5zb3VyY2VyZWcsIDAsIFNMSklUX01FTTEoU1RSX1BUUiksIC1jb250ZXh0LT5sZW5ndGgpOworICAgICAgT1AxKFNMSklUX01PVl9TMzIsIGNvbnRleHQtPnNvdXJjZXJlZywgMCwgU0xKSVRfTUVNMShTVFJfUFRSKSwgLWNvbnRleHQtPmxlbmd0aCk7CiAgICAgZWxzZSBpZiAoY29udGV4dC0+bGVuZ3RoID49IDIpCi0gICAgICBPUDEoU0xKSVRfTU9WX1VILCBjb250ZXh0LT5zb3VyY2VyZWcsIDAsIFNMSklUX01FTTEoU1RSX1BUUiksIC1jb250ZXh0LT5sZW5ndGgpOworICAgICAgT1AxKFNMSklUX01PVl9VMTYsIGNvbnRleHQtPnNvdXJjZXJlZywgMCwgU0xKSVRfTUVNMShTVFJfUFRSKSwgLWNvbnRleHQtPmxlbmd0aCk7CiAjaWYgUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDgKICAgICBlbHNlIGlmIChjb250ZXh0LT5sZW5ndGggPj0gMSkKLSAgICAgIE9QMShTTEpJVF9NT1ZfVUIsIGNvbnRleHQtPnNvdXJjZXJlZywgMCwgU0xKSVRfTUVNMShTVFJfUFRSKSwgLWNvbnRleHQtPmxlbmd0aCk7CisgICAgICBPUDEoU0xKSVRfTU9WX1U4LCBjb250ZXh0LT5zb3VyY2VyZWcsIDAsIFNMSklUX01FTTEoU1RSX1BUUiksIC1jb250ZXh0LT5sZW5ndGgpOwogI2VuZGlmIC8qIFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSA4ICovCiAgICAgY29udGV4dC0+c291cmNlcmVnID0gY29udGV4dC0+c291cmNlcmVnID09IFRNUDEgPyBUTVAyIDogVE1QMTsKIApAQCAtNTQ3NCw2ICs1NDcyLDggQEAKICAgICB9IFwKICAgY2hhcm9mZnNldCA9ICh2YWx1ZSk7CiAKK3N0YXRpYyBQQ1JFMl9TUFRSIGNvbXBpbGVfY2hhcjFfbWF0Y2hpbmdwYXRoKGNvbXBpbGVyX2NvbW1vbiAqY29tbW9uLCBQQ1JFMl9VQ0hBUiB0eXBlLCBQQ1JFMl9TUFRSIGNjLCBqdW1wX2xpc3QgKipiYWNrdHJhY2tzLCBCT09MIGNoZWNrX3N0cl9wdHIpOworCiBzdGF0aWMgdm9pZCBjb21waWxlX3hjbGFzc19tYXRjaGluZ3BhdGgoY29tcGlsZXJfY29tbW9uICpjb21tb24sIFBDUkUyX1NQVFIgY2MsIGp1bXBfbGlzdCAqKmJhY2t0cmFja3MpCiB7CiBERUZJTkVfQ09NUElMRVI7CkBAIC01NDkxLDcgKzU0OTEsNyBAQAogQk9PTCBuZWVkc3R5cGUgPSBGQUxTRSwgbmVlZHNzY3JpcHQgPSBGQUxTRSwgbmVlZHNjaGFyID0gRkFMU0U7CiBCT09MIGNoYXJzYXZlZCA9IEZBTFNFOwogaW50IHR5cGVyZWcgPSBUTVAxOwotY29uc3Qgc2xqaXRfdWkgKm90aGVyX2Nhc2VzOworY29uc3Qgc2xqaXRfdTMyICpvdGhlcl9jYXNlczsKIHNsaml0X3V3IHR5cGVvZmZzZXQ7CiAjZW5kaWYKIApAQCAtNTYwOSwxMSArNTYwOSwxMSBAQAogICBpZiAoKGNjWy0xXSAmIFhDTF9NQVApICE9IDApCiAgICAgewogICAgIGp1bXAgPSBDTVAoU0xKSVRfR1JFQVRFUiwgVE1QMSwgMCwgU0xKSVRfSU1NLCAyNTUpOwotICAgIGlmICghY2hlY2tfY2xhc3NfcmFuZ2VzKGNvbW1vbiwgKGNvbnN0IHNsaml0X3ViICopY2MsICgoKGNvbnN0IHNsaml0X3ViICopY2MpWzMxXSAmIDB4ODApICE9IDAsIFRSVUUsICZmb3VuZCkpCisgICAgaWYgKCFjaGVja19jbGFzc19yYW5nZXMoY29tbW9uLCAoY29uc3Qgc2xqaXRfdTggKiljYywgKCgoY29uc3Qgc2xqaXRfdTggKiljYylbMzFdICYgMHg4MCkgIT0gMCwgVFJVRSwgJmZvdW5kKSkKICAgICAgIHsKICAgICAgIE9QMihTTEpJVF9BTkQsIFRNUDIsIDAsIFRNUDEsIDAsIFNMSklUX0lNTSwgMHg3KTsKICAgICAgIE9QMihTTEpJVF9MU0hSLCBUTVAxLCAwLCBUTVAxLCAwLCBTTEpJVF9JTU0sIDMpOwotICAgICAgT1AxKFNMSklUX01PVl9VQiwgVE1QMSwgMCwgU0xKSVRfTUVNMShUTVAxKSwgKHNsaml0X3N3KWNjKTsKKyAgICAgIE9QMShTTEpJVF9NT1ZfVTgsIFRNUDEsIDAsIFNMSklUX01FTTEoVE1QMSksIChzbGppdF9zdyljYyk7CiAgICAgICBPUDIoU0xKSVRfU0hMLCBUTVAyLCAwLCBTTEpJVF9JTU0sIDEsIFRNUDIsIDApOwogICAgICAgT1AyKFNMSklUX0FORCB8IFNMSklUX1NFVF9FLCBTTEpJVF9VTlVTRUQsIDAsIFRNUDEsIDAsIFRNUDIsIDApOwogICAgICAgYWRkX2p1bXAoY29tcGlsZXIsICZmb3VuZCwgSlVNUChTTEpJVF9OT1RfWkVSTykpOwpAQCAtNTYzNiw3ICs1NjM2LDcgQEAKICNpZmRlZiBTVVBQT1JUX1VOSUNPREUKICAgY2hhcnNhdmVkID0gVFJVRTsKICNlbmRpZgotICBpZiAoIWNoZWNrX2NsYXNzX3Jhbmdlcyhjb21tb24sIChjb25zdCBzbGppdF91YiAqKWNjLCBGQUxTRSwgVFJVRSwgbGlzdCkpCisgIGlmICghY2hlY2tfY2xhc3NfcmFuZ2VzKGNvbW1vbiwgKGNvbnN0IHNsaml0X3U4ICopY2MsIEZBTFNFLCBUUlVFLCBsaXN0KSkKICAgICB7CiAjaWYgUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDgKICAgICBqdW1wID0gTlVMTDsKQEAgLTU2NDYsNyArNTY0Niw3IEBACiAKICAgICBPUDIoU0xKSVRfQU5ELCBUTVAyLCAwLCBUTVAxLCAwLCBTTEpJVF9JTU0sIDB4Nyk7CiAgICAgT1AyKFNMSklUX0xTSFIsIFRNUDEsIDAsIFRNUDEsIDAsIFNMSklUX0lNTSwgMyk7Ci0gICAgT1AxKFNMSklUX01PVl9VQiwgVE1QMSwgMCwgU0xKSVRfTUVNMShUTVAxKSwgKHNsaml0X3N3KWNjKTsKKyAgICBPUDEoU0xKSVRfTU9WX1U4LCBUTVAxLCAwLCBTTEpJVF9NRU0xKFRNUDEpLCAoc2xqaXRfc3cpY2MpOwogICAgIE9QMihTTEpJVF9TSEwsIFRNUDIsIDAsIFNMSklUX0lNTSwgMSwgVE1QMiwgMCk7CiAgICAgT1AyKFNMSklUX0FORCB8IFNMSklUX1NFVF9FLCBTTEpJVF9VTlVTRUQsIDAsIFRNUDEsIDAsIFRNUDIsIDApOwogICAgIGFkZF9qdW1wKGNvbXBpbGVyLCBsaXN0LCBKVU1QKFNMSklUX05PVF9aRVJPKSk7CkBAIC01NjY4LDE4ICs1NjY4LDE4IEBACiAgICAgT1AxKFNMSklUX01PViwgUkVUVVJOX0FERFIsIDAsIFRNUDEsIDApOwogCiAgIE9QMihTTEpJVF9MU0hSLCBUTVAyLCAwLCBUTVAxLCAwLCBTTEpJVF9JTU0sIFVDRF9CTE9DS19TSElGVCk7Ci0gIE9QMShTTEpJVF9NT1ZfVUIsIFRNUDIsIDAsIFNMSklUX01FTTEoVE1QMiksIChzbGppdF9zdylQUklWKHVjZF9zdGFnZTEpKTsKKyAgT1AxKFNMSklUX01PVl9VOCwgVE1QMiwgMCwgU0xKSVRfTUVNMShUTVAyKSwgKHNsaml0X3N3KVBSSVYodWNkX3N0YWdlMSkpOwogICBPUDIoU0xKSVRfQU5ELCBUTVAxLCAwLCBUTVAxLCAwLCBTTEpJVF9JTU0sIFVDRF9CTE9DS19NQVNLKTsKICAgT1AyKFNMSklUX1NITCwgVE1QMiwgMCwgVE1QMiwgMCwgU0xKSVRfSU1NLCBVQ0RfQkxPQ0tfU0hJRlQpOwogICBPUDIoU0xKSVRfQURELCBUTVAxLCAwLCBUTVAxLCAwLCBUTVAyLCAwKTsKICAgT1AxKFNMSklUX01PViwgVE1QMiwgMCwgU0xKSVRfSU1NLCAoc2xqaXRfc3cpUFJJVih1Y2Rfc3RhZ2UyKSk7Ci0gIE9QMShTTEpJVF9NT1ZfVUgsIFRNUDIsIDAsIFNMSklUX01FTTIoVE1QMiwgVE1QMSksIDEpOworICBPUDEoU0xKSVRfTU9WX1UxNiwgVE1QMiwgMCwgU0xKSVRfTUVNMihUTVAyLCBUTVAxKSwgMSk7CiAKICAgLyogQmVmb3JlIGFueXRoaW5nIGVsc2UsIHdlIGRlYWwgd2l0aCBzY3JpcHRzLiAqLwogICBpZiAobmVlZHNzY3JpcHQpCiAgICAgewogICAgIE9QMShTTEpJVF9NT1YsIFRNUDEsIDAsIFNMSklUX0lNTSwgKHNsaml0X3N3KVBSSVYodWNkX3JlY29yZHMpICsgU0xKSVRfT0ZGU0VUT0YodWNkX3JlY29yZCwgc2NyaXB0KSk7Ci0gICAgT1AxKFNMSklUX01PVl9VQiwgVE1QMSwgMCwgU0xKSVRfTUVNMihUTVAxLCBUTVAyKSwgMyk7CisgICAgT1AxKFNMSklUX01PVl9VOCwgVE1QMSwgMCwgU0xKSVRfTUVNMihUTVAxLCBUTVAyKSwgMyk7CiAKICAgICBjY2JlZ2luID0gY2M7CiAKQEAgLTU3MjYsMTIgKzU3MjYsMTIgQEAKICAgICBpZiAoIW5lZWRzY2hhcikKICAgICAgIHsKICAgICAgIE9QMShTTEpJVF9NT1YsIFRNUDEsIDAsIFNMSklUX0lNTSwgKHNsaml0X3N3KVBSSVYodWNkX3JlY29yZHMpICsgU0xKSVRfT0ZGU0VUT0YodWNkX3JlY29yZCwgY2hhcnR5cGUpKTsKLSAgICAgIE9QMShTTEpJVF9NT1ZfVUIsIFRNUDEsIDAsIFNMSklUX01FTTIoVE1QMSwgVE1QMiksIDMpOworICAgICAgT1AxKFNMSklUX01PVl9VOCwgVE1QMSwgMCwgU0xKSVRfTUVNMihUTVAxLCBUTVAyKSwgMyk7CiAgICAgICB9CiAgICAgZWxzZQogICAgICAgewogICAgICAgT1AyKFNMSklUX1NITCwgVE1QMiwgMCwgVE1QMiwgMCwgU0xKSVRfSU1NLCAzKTsKLSAgICAgIE9QMShTTEpJVF9NT1ZfVUIsIFJFVFVSTl9BRERSLCAwLCBTTEpJVF9NRU0xKFRNUDIpLCAoc2xqaXRfc3cpUFJJVih1Y2RfcmVjb3JkcykgKyBTTEpJVF9PRkZTRVRPRih1Y2RfcmVjb3JkLCBjaGFydHlwZSkpOworICAgICAgT1AxKFNMSklUX01PVl9VOCwgUkVUVVJOX0FERFIsIDAsIFNMSklUX01FTTEoVE1QMiksIChzbGppdF9zdylQUklWKHVjZF9yZWNvcmRzKSArIFNMSklUX09GRlNFVE9GKHVjZF9yZWNvcmQsIGNoYXJ0eXBlKSk7CiAgICAgICB0eXBlcmVnID0gUkVUVVJOX0FERFI7CiAgICAgICB9CiAgICAgfQpAQCAtNjEyNyw0NyArNjEyNyw5IEBACiAgIGNoZWNrX3BhcnRpYWwoY29tbW9uLCBGQUxTRSk7CiAgIHJldHVybiBjYzsKIAotICBjYXNlIE9QX0NJUkM6Ci0gIE9QMShTTEpJVF9NT1YsIFRNUDIsIDAsIEFSR1VNRU5UUywgMCk7Ci0gIE9QMShTTEpJVF9NT1YsIFRNUDEsIDAsIFNMSklUX01FTTEoVE1QMiksIFNMSklUX09GRlNFVE9GKGppdF9hcmd1bWVudHMsIGJlZ2luKSk7Ci0gIGFkZF9qdW1wKGNvbXBpbGVyLCBiYWNrdHJhY2tzLCBDTVAoU0xKSVRfR1JFQVRFUiwgU1RSX1BUUiwgMCwgVE1QMSwgMCkpOwotICBPUDIoU0xKSVRfSUFORCB8IFNMSklUX1NFVF9FLCBTTEpJVF9VTlVTRUQsIDAsIFNMSklUX01FTTEoVE1QMiksIFNMSklUX09GRlNFVE9GKGppdF9hcmd1bWVudHMsIG9wdGlvbnMpLCBTTEpJVF9JTU0sIFBDUkUyX05PVEJPTCk7Ci0gIGFkZF9qdW1wKGNvbXBpbGVyLCBiYWNrdHJhY2tzLCBKVU1QKFNMSklUX05PVF9aRVJPKSk7Ci0gIHJldHVybiBjYzsKLQotICBjYXNlIE9QX0NJUkNNOgotICBPUDEoU0xKSVRfTU9WLCBUTVAyLCAwLCBBUkdVTUVOVFMsIDApOwotICBPUDEoU0xKSVRfTU9WLCBUTVAxLCAwLCBTTEpJVF9NRU0xKFRNUDIpLCBTTEpJVF9PRkZTRVRPRihqaXRfYXJndW1lbnRzLCBiZWdpbikpOwotICBqdW1wWzFdID0gQ01QKFNMSklUX0dSRUFURVIsIFNUUl9QVFIsIDAsIFRNUDEsIDApOwotICBPUDIoU0xKSVRfSUFORCB8IFNMSklUX1NFVF9FLCBTTEpJVF9VTlVTRUQsIDAsIFNMSklUX01FTTEoVE1QMiksIFNMSklUX09GRlNFVE9GKGppdF9hcmd1bWVudHMsIG9wdGlvbnMpLCBTTEpJVF9JTU0sIFBDUkUyX05PVEJPTCk7Ci0gIGFkZF9qdW1wKGNvbXBpbGVyLCBiYWNrdHJhY2tzLCBKVU1QKFNMSklUX05PVF9aRVJPKSk7Ci0gIGp1bXBbMF0gPSBKVU1QKFNMSklUX0pVTVApOwotICBKVU1QSEVSRShqdW1wWzFdKTsKLQotICBpZiAoIWNvbW1vbi0+YWx0X2NpcmN1bWZsZXgpCi0gICAgYWRkX2p1bXAoY29tcGlsZXIsIGJhY2t0cmFja3MsIENNUChTTEpJVF9HUkVBVEVSX0VRVUFMLCBTVFJfUFRSLCAwLCBTVFJfRU5ELCAwKSk7Ci0KLSAgaWYgKGNvbW1vbi0+bmx0eXBlID09IE5MVFlQRV9GSVhFRCAmJiBjb21tb24tPm5ld2xpbmUgPiAyNTUpCi0gICAgewotICAgIE9QMihTTEpJVF9TVUIsIFRNUDIsIDAsIFNUUl9QVFIsIDAsIFNMSklUX0lNTSwgSU5fVUNIQVJTKDIpKTsKLSAgICBhZGRfanVtcChjb21waWxlciwgYmFja3RyYWNrcywgQ01QKFNMSklUX0xFU1MsIFRNUDIsIDAsIFRNUDEsIDApKTsKLSAgICBPUDEoTU9WX1VDSEFSLCBUTVAxLCAwLCBTTEpJVF9NRU0xKFNUUl9QVFIpLCBJTl9VQ0hBUlMoLTIpKTsKLSAgICBPUDEoTU9WX1VDSEFSLCBUTVAyLCAwLCBTTEpJVF9NRU0xKFNUUl9QVFIpLCBJTl9VQ0hBUlMoLTEpKTsKLSAgICBhZGRfanVtcChjb21waWxlciwgYmFja3RyYWNrcywgQ01QKFNMSklUX05PVF9FUVVBTCwgVE1QMSwgMCwgU0xKSVRfSU1NLCAoY29tbW9uLT5uZXdsaW5lID4+IDgpICYgMHhmZikpOwotICAgIGFkZF9qdW1wKGNvbXBpbGVyLCBiYWNrdHJhY2tzLCBDTVAoU0xKSVRfTk9UX0VRVUFMLCBUTVAyLCAwLCBTTEpJVF9JTU0sIGNvbW1vbi0+bmV3bGluZSAmIDB4ZmYpKTsKLSAgICB9Ci0gIGVsc2UKLSAgICB7Ci0gICAgc2tpcF9jaGFyX2JhY2soY29tbW9uKTsKLSAgICByZWFkX2NoYXJfcmFuZ2UoY29tbW9uLCBjb21tb24tPm5sbWluLCBjb21tb24tPm5sbWF4LCBUUlVFKTsKLSAgICBjaGVja19uZXdsaW5lY2hhcihjb21tb24sIGNvbW1vbi0+bmx0eXBlLCBiYWNrdHJhY2tzLCBGQUxTRSk7Ci0gICAgfQotICBKVU1QSEVSRShqdW1wWzBdKTsKLSAgcmV0dXJuIGNjOwotCiAgIGNhc2UgT1BfRE9MTDoKICAgT1AxKFNMSklUX01PViwgVE1QMiwgMCwgQVJHVU1FTlRTLCAwKTsKLSAgT1AyKFNMSklUX0lBTkQgfCBTTEpJVF9TRVRfRSwgU0xKSVRfVU5VU0VELCAwLCBTTEpJVF9NRU0xKFRNUDIpLCBTTEpJVF9PRkZTRVRPRihqaXRfYXJndW1lbnRzLCBvcHRpb25zKSwgU0xKSVRfSU1NLCBQQ1JFMl9OT1RFT0wpOworICBPUDIoU0xKSVRfQU5EMzIgfCBTTEpJVF9TRVRfRSwgU0xKSVRfVU5VU0VELCAwLCBTTEpJVF9NRU0xKFRNUDIpLCBTTEpJVF9PRkZTRVRPRihqaXRfYXJndW1lbnRzLCBvcHRpb25zKSwgU0xKSVRfSU1NLCBQQ1JFMl9OT1RFT0wpOwogICBhZGRfanVtcChjb21waWxlciwgYmFja3RyYWNrcywgSlVNUChTTEpJVF9OT1RfWkVSTykpOwogCiAgIGlmICghY29tbW9uLT5lbmRvbmx5KQpAQCAtNjE4Miw3ICs2MTQ0LDcgQEAKICAgY2FzZSBPUF9ET0xMTToKICAganVtcFsxXSA9IENNUChTTEpJVF9MRVNTLCBTVFJfUFRSLCAwLCBTVFJfRU5ELCAwKTsKICAgT1AxKFNMSklUX01PViwgVE1QMiwgMCwgQVJHVU1FTlRTLCAwKTsKLSAgT1AyKFNMSklUX0lBTkQgfCBTTEpJVF9TRVRfRSwgU0xKSVRfVU5VU0VELCAwLCBTTEpJVF9NRU0xKFRNUDIpLCBTTEpJVF9PRkZTRVRPRihqaXRfYXJndW1lbnRzLCBvcHRpb25zKSwgU0xKSVRfSU1NLCBQQ1JFMl9OT1RFT0wpOworICBPUDIoU0xKSVRfQU5EMzIgfCBTTEpJVF9TRVRfRSwgU0xKSVRfVU5VU0VELCAwLCBTTEpJVF9NRU0xKFRNUDIpLCBTTEpJVF9PRkZTRVRPRihqaXRfYXJndW1lbnRzLCBvcHRpb25zKSwgU0xKSVRfSU1NLCBQQ1JFMl9OT1RFT0wpOwogICBhZGRfanVtcChjb21waWxlciwgYmFja3RyYWNrcywgSlVNUChTTEpJVF9OT1RfWkVSTykpOwogICBjaGVja19wYXJ0aWFsKGNvbW1vbiwgRkFMU0UpOwogICBqdW1wWzBdID0gSlVNUChTTEpJVF9KVU1QKTsKQEAgLTYyMTYsNiArNjE3OCw0NCBAQAogICBKVU1QSEVSRShqdW1wWzBdKTsKICAgcmV0dXJuIGNjOwogCisgIGNhc2UgT1BfQ0lSQzoKKyAgT1AxKFNMSklUX01PViwgVE1QMiwgMCwgQVJHVU1FTlRTLCAwKTsKKyAgT1AxKFNMSklUX01PViwgVE1QMSwgMCwgU0xKSVRfTUVNMShUTVAyKSwgU0xKSVRfT0ZGU0VUT0Yoaml0X2FyZ3VtZW50cywgYmVnaW4pKTsKKyAgYWRkX2p1bXAoY29tcGlsZXIsIGJhY2t0cmFja3MsIENNUChTTEpJVF9HUkVBVEVSLCBTVFJfUFRSLCAwLCBUTVAxLCAwKSk7CisgIE9QMihTTEpJVF9BTkQzMiB8IFNMSklUX1NFVF9FLCBTTEpJVF9VTlVTRUQsIDAsIFNMSklUX01FTTEoVE1QMiksIFNMSklUX09GRlNFVE9GKGppdF9hcmd1bWVudHMsIG9wdGlvbnMpLCBTTEpJVF9JTU0sIFBDUkUyX05PVEJPTCk7CisgIGFkZF9qdW1wKGNvbXBpbGVyLCBiYWNrdHJhY2tzLCBKVU1QKFNMSklUX05PVF9aRVJPKSk7CisgIHJldHVybiBjYzsKKworICBjYXNlIE9QX0NJUkNNOgorICBPUDEoU0xKSVRfTU9WLCBUTVAyLCAwLCBBUkdVTUVOVFMsIDApOworICBPUDEoU0xKSVRfTU9WLCBUTVAxLCAwLCBTTEpJVF9NRU0xKFRNUDIpLCBTTEpJVF9PRkZTRVRPRihqaXRfYXJndW1lbnRzLCBiZWdpbikpOworICBqdW1wWzFdID0gQ01QKFNMSklUX0dSRUFURVIsIFNUUl9QVFIsIDAsIFRNUDEsIDApOworICBPUDIoU0xKSVRfQU5EMzIgfCBTTEpJVF9TRVRfRSwgU0xKSVRfVU5VU0VELCAwLCBTTEpJVF9NRU0xKFRNUDIpLCBTTEpJVF9PRkZTRVRPRihqaXRfYXJndW1lbnRzLCBvcHRpb25zKSwgU0xKSVRfSU1NLCBQQ1JFMl9OT1RCT0wpOworICBhZGRfanVtcChjb21waWxlciwgYmFja3RyYWNrcywgSlVNUChTTEpJVF9OT1RfWkVSTykpOworICBqdW1wWzBdID0gSlVNUChTTEpJVF9KVU1QKTsKKyAgSlVNUEhFUkUoanVtcFsxXSk7CisKKyAgaWYgKCFjb21tb24tPmFsdF9jaXJjdW1mbGV4KQorICAgIGFkZF9qdW1wKGNvbXBpbGVyLCBiYWNrdHJhY2tzLCBDTVAoU0xKSVRfR1JFQVRFUl9FUVVBTCwgU1RSX1BUUiwgMCwgU1RSX0VORCwgMCkpOworCisgIGlmIChjb21tb24tPm5sdHlwZSA9PSBOTFRZUEVfRklYRUQgJiYgY29tbW9uLT5uZXdsaW5lID4gMjU1KQorICAgIHsKKyAgICBPUDIoU0xKSVRfU1VCLCBUTVAyLCAwLCBTVFJfUFRSLCAwLCBTTEpJVF9JTU0sIElOX1VDSEFSUygyKSk7CisgICAgYWRkX2p1bXAoY29tcGlsZXIsIGJhY2t0cmFja3MsIENNUChTTEpJVF9MRVNTLCBUTVAyLCAwLCBUTVAxLCAwKSk7CisgICAgT1AxKE1PVl9VQ0hBUiwgVE1QMSwgMCwgU0xKSVRfTUVNMShTVFJfUFRSKSwgSU5fVUNIQVJTKC0yKSk7CisgICAgT1AxKE1PVl9VQ0hBUiwgVE1QMiwgMCwgU0xKSVRfTUVNMShTVFJfUFRSKSwgSU5fVUNIQVJTKC0xKSk7CisgICAgYWRkX2p1bXAoY29tcGlsZXIsIGJhY2t0cmFja3MsIENNUChTTEpJVF9OT1RfRVFVQUwsIFRNUDEsIDAsIFNMSklUX0lNTSwgKGNvbW1vbi0+bmV3bGluZSA+PiA4KSAmIDB4ZmYpKTsKKyAgICBhZGRfanVtcChjb21waWxlciwgYmFja3RyYWNrcywgQ01QKFNMSklUX05PVF9FUVVBTCwgVE1QMiwgMCwgU0xKSVRfSU1NLCBjb21tb24tPm5ld2xpbmUgJiAweGZmKSk7CisgICAgfQorICBlbHNlCisgICAgeworICAgIHNraXBfY2hhcl9iYWNrKGNvbW1vbik7CisgICAgcmVhZF9jaGFyX3JhbmdlKGNvbW1vbiwgY29tbW9uLT5ubG1pbiwgY29tbW9uLT5ubG1heCwgVFJVRSk7CisgICAgY2hlY2tfbmV3bGluZWNoYXIoY29tbW9uLCBjb21tb24tPm5sdHlwZSwgYmFja3RyYWNrcywgRkFMU0UpOworICAgIH0KKyAgSlVNUEhFUkUoanVtcFswXSk7CisgIHJldHVybiBjYzsKKwogICBjYXNlIE9QX1JFVkVSU0U6CiAgIGxlbmd0aCA9IEdFVChjYywgMCk7CiAgIGlmIChsZW5ndGggPT0gMCkKQEAgLTYyNjcsNyArNjI2Nyw3IEBACiAgIGlmIChjaGVja19zdHJfcHRyKQogICAgIGRldGVjdF9wYXJ0aWFsX21hdGNoKGNvbW1vbiwgYmFja3RyYWNrcyk7CiAjaWYgZGVmaW5lZCBTVVBQT1JUX1VOSUNPREUgJiYgUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDgKLSAgaWYgKGNvbW1vbi0+dXRmICYmIGlzX2NoYXI3X2JpdHNldCgoY29uc3Qgc2xqaXRfdWIqKWNvbW1vbi0+Y3R5cGVzIC0gY2JpdF9sZW5ndGggKyBjYml0X2RpZ2l0LCBGQUxTRSkpCisgIGlmIChjb21tb24tPnV0ZiAmJiBpc19jaGFyN19iaXRzZXQoKGNvbnN0IHNsaml0X3U4Kiljb21tb24tPmN0eXBlcyAtIGNiaXRfbGVuZ3RoICsgY2JpdF9kaWdpdCwgRkFMU0UpKQogICAgIHJlYWRfY2hhcjdfdHlwZShjb21tb24sIHR5cGUgPT0gT1BfTk9UX0RJR0lUKTsKICAgZWxzZQogI2VuZGlmCkBAIC02MjgyLDcgKzYyODIsNyBAQAogICBpZiAoY2hlY2tfc3RyX3B0cikKICAgICBkZXRlY3RfcGFydGlhbF9tYXRjaChjb21tb24sIGJhY2t0cmFja3MpOwogI2lmIGRlZmluZWQgU1VQUE9SVF9VTklDT0RFICYmIFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSA4Ci0gIGlmIChjb21tb24tPnV0ZiAmJiBpc19jaGFyN19iaXRzZXQoKGNvbnN0IHNsaml0X3ViKiljb21tb24tPmN0eXBlcyAtIGNiaXRfbGVuZ3RoICsgY2JpdF9zcGFjZSwgRkFMU0UpKQorICBpZiAoY29tbW9uLT51dGYgJiYgaXNfY2hhcjdfYml0c2V0KChjb25zdCBzbGppdF91OCopY29tbW9uLT5jdHlwZXMgLSBjYml0X2xlbmd0aCArIGNiaXRfc3BhY2UsIEZBTFNFKSkKICAgICByZWFkX2NoYXI3X3R5cGUoY29tbW9uLCB0eXBlID09IE9QX05PVF9XSElURVNQQUNFKTsKICAgZWxzZQogI2VuZGlmCkBAIC02Mjk2LDcgKzYyOTYsNyBAQAogICBpZiAoY2hlY2tfc3RyX3B0cikKICAgICBkZXRlY3RfcGFydGlhbF9tYXRjaChjb21tb24sIGJhY2t0cmFja3MpOwogI2lmIGRlZmluZWQgU1VQUE9SVF9VTklDT0RFICYmIFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSA4Ci0gIGlmIChjb21tb24tPnV0ZiAmJiBpc19jaGFyN19iaXRzZXQoKGNvbnN0IHNsaml0X3ViKiljb21tb24tPmN0eXBlcyAtIGNiaXRfbGVuZ3RoICsgY2JpdF93b3JkLCBGQUxTRSkpCisgIGlmIChjb21tb24tPnV0ZiAmJiBpc19jaGFyN19iaXRzZXQoKGNvbnN0IHNsaml0X3U4Kiljb21tb24tPmN0eXBlcyAtIGNiaXRfbGVuZ3RoICsgY2JpdF93b3JkLCBGQUxTRSkpCiAgICAgcmVhZF9jaGFyN190eXBlKGNvbW1vbiwgdHlwZSA9PSBPUF9OT1RfV09SRENIQVIpOwogICBlbHNlCiAjZW5kaWYKQEAgLTYzMzgsNyArNjMzOCw3IEBACiAjaWYgUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDggfHwgUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDE2CiAjaWYgUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDgKICAgICBqdW1wWzBdID0gQ01QKFNMSklUX0xFU1MsIFRNUDEsIDAsIFNMSklUX0lNTSwgMHhjMCk7Ci0gICAgT1AxKFNMSklUX01PVl9VQiwgVE1QMSwgMCwgU0xKSVRfTUVNMShUTVAxKSwgKHNsaml0X3N3KVBSSVYodXRmOF90YWJsZTQpIC0gMHhjMCk7CisgICAgT1AxKFNMSklUX01PVl9VOCwgVE1QMSwgMCwgU0xKSVRfTUVNMShUTVAxKSwgKHNsaml0X3N3KVBSSVYodXRmOF90YWJsZTQpIC0gMHhjMCk7CiAgICAgT1AyKFNMSklUX0FERCwgU1RSX1BUUiwgMCwgU1RSX1BUUiwgMCwgVE1QMSwgMCk7CiAjZWxpZiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gMTYKICAgICBqdW1wWzBdID0gQ01QKFNMSklUX0xFU1MsIFRNUDEsIDAsIFNMSklUX0lNTSwgMHhkODAwKTsKQEAgLTY0MjUsNyArNjQyNSw3IEBACiAgIE9QMShTTEpJVF9NT1YsIFRNUDEsIDAsIFNMSklUX0lNTSwgKHNsaml0X3N3KVBSSVYodWNkX3JlY29yZHMpICsgU0xKSVRfT0ZGU0VUT0YodWNkX3JlY29yZCwgZ2Jwcm9wKSk7CiAgIC8qIE9wdGltaXplIHJlZ2lzdGVyIGFsbG9jYXRpb246IHVzZSBhIHJlYWwgcmVnaXN0ZXIuICovCiAgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBMT0NBTFMwLCBTVEFDS19UT1AsIDApOwotICBPUDEoU0xKSVRfTU9WX1VCLCBTVEFDS19UT1AsIDAsIFNMSklUX01FTTIoVE1QMSwgVE1QMiksIDMpOworICBPUDEoU0xKSVRfTU9WX1U4LCBTVEFDS19UT1AsIDAsIFNMSklUX01FTTIoVE1QMSwgVE1QMiksIDMpOwogCiAgIGxhYmVsID0gTEFCRUwoKTsKICAganVtcFswXSA9IENNUChTTEpJVF9HUkVBVEVSX0VRVUFMLCBTVFJfUFRSLCAwLCBTVFJfRU5ELCAwKTsKQEAgLTY0MzMsMTAgKzY0MzMsMTAgQEAKICAgcmVhZF9jaGFyKGNvbW1vbik7CiAgIGFkZF9qdW1wKGNvbXBpbGVyLCAmY29tbW9uLT5nZXR1Y2QsIEpVTVAoU0xKSVRfRkFTVF9DQUxMKSk7CiAgIE9QMShTTEpJVF9NT1YsIFRNUDEsIDAsIFNMSklUX0lNTSwgKHNsaml0X3N3KVBSSVYodWNkX3JlY29yZHMpICsgU0xKSVRfT0ZGU0VUT0YodWNkX3JlY29yZCwgZ2Jwcm9wKSk7Ci0gIE9QMShTTEpJVF9NT1ZfVUIsIFRNUDIsIDAsIFNMSklUX01FTTIoVE1QMSwgVE1QMiksIDMpOworICBPUDEoU0xKSVRfTU9WX1U4LCBUTVAyLCAwLCBTTEpJVF9NRU0yKFRNUDEsIFRNUDIpLCAzKTsKIAogICBPUDIoU0xKSVRfU0hMLCBTVEFDS19UT1AsIDAsIFNUQUNLX1RPUCwgMCwgU0xKSVRfSU1NLCAyKTsKLSAgT1AxKFNMSklUX01PVl9VSSwgVE1QMSwgMCwgU0xKSVRfTUVNMShTVEFDS19UT1ApLCAoc2xqaXRfc3cpUFJJVih1Y3BfZ2J0YWJsZSkpOworICBPUDEoU0xKSVRfTU9WX1UzMiwgVE1QMSwgMCwgU0xKSVRfTUVNMShTVEFDS19UT1ApLCAoc2xqaXRfc3cpUFJJVih1Y3BfZ2J0YWJsZSkpOwogICBPUDEoU0xKSVRfTU9WLCBTVEFDS19UT1AsIDAsIFRNUDIsIDApOwogICBPUDIoU0xKSVRfU0hMLCBUTVAyLCAwLCBTTEpJVF9JTU0sIDEsIFRNUDIsIDApOwogICBPUDIoU0xKSVRfQU5EIHwgU0xKSVRfU0VUX0UsIFNMSklUX1VOVVNFRCwgMCwgVE1QMSwgMCwgVE1QMiwgMCk7CkBAIC02NTIwLDcgKzY1MjAsNyBAQAogICAgIGMgPSAqY2M7CiAgICAgaWYgKGMgPCAxMjgpCiAgICAgICB7Ci0gICAgICBPUDEoU0xKSVRfTU9WX1VCLCBUTVAxLCAwLCBTTEpJVF9NRU0xKFNUUl9QVFIpLCAwKTsKKyAgICAgIE9QMShTTEpJVF9NT1ZfVTgsIFRNUDEsIDAsIFNMSklUX01FTTEoU1RSX1BUUiksIDApOwogICAgICAgaWYgKHR5cGUgPT0gT1BfTk9UIHx8ICFjaGFyX2hhc19vdGhlcmNhc2UoY29tbW9uLCBjYykpCiAgICAgICAgIGFkZF9qdW1wKGNvbXBpbGVyLCBiYWNrdHJhY2tzLCBDTVAoU0xKSVRfRVFVQUwsIFRNUDEsIDAsIFNMSklUX0lNTSwgYykpOwogICAgICAgZWxzZQpAQCAtNjU3NiwxMyArNjU3NiwxMyBAQAogICAgIGRldGVjdF9wYXJ0aWFsX21hdGNoKGNvbW1vbiwgYmFja3RyYWNrcyk7CiAKICNpZiBkZWZpbmVkIFNVUFBPUlRfVU5JQ09ERSAmJiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gOAotICBiaXQgPSAoY29tbW9uLT51dGYgJiYgaXNfY2hhcjdfYml0c2V0KChjb25zdCBzbGppdF91YiAqKWNjLCB0eXBlID09IE9QX05DTEFTUykpID8gMTI3IDogMjU1OworICBiaXQgPSAoY29tbW9uLT51dGYgJiYgaXNfY2hhcjdfYml0c2V0KChjb25zdCBzbGppdF91OCAqKWNjLCB0eXBlID09IE9QX05DTEFTUykpID8gMTI3IDogMjU1OwogICByZWFkX2NoYXJfcmFuZ2UoY29tbW9uLCAwLCBiaXQsIHR5cGUgPT0gT1BfTkNMQVNTKTsKICNlbHNlCiAgIHJlYWRfY2hhcl9yYW5nZShjb21tb24sIDAsIDI1NSwgdHlwZSA9PSBPUF9OQ0xBU1MpOwogI2VuZGlmCiAKLSAgaWYgKGNoZWNrX2NsYXNzX3Jhbmdlcyhjb21tb24sIChjb25zdCBzbGppdF91YiAqKWNjLCB0eXBlID09IE9QX05DTEFTUywgRkFMU0UsIGJhY2t0cmFja3MpKQorICBpZiAoY2hlY2tfY2xhc3NfcmFuZ2VzKGNvbW1vbiwgKGNvbnN0IHNsaml0X3U4ICopY2MsIHR5cGUgPT0gT1BfTkNMQVNTLCBGQUxTRSwgYmFja3RyYWNrcykpCiAgICAgcmV0dXJuIGNjICsgMzIgLyBzaXplb2YoUENSRTJfVUNIQVIpOwogCiAjaWYgZGVmaW5lZCBTVVBQT1JUX1VOSUNPREUgJiYgUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDgKQEAgLTY2MDcsNyArNjYwNyw3IEBACiAKICAgT1AyKFNMSklUX0FORCwgVE1QMiwgMCwgVE1QMSwgMCwgU0xKSVRfSU1NLCAweDcpOwogICBPUDIoU0xKSVRfTFNIUiwgVE1QMSwgMCwgVE1QMSwgMCwgU0xKSVRfSU1NLCAzKTsKLSAgT1AxKFNMSklUX01PVl9VQiwgVE1QMSwgMCwgU0xKSVRfTUVNMShUTVAxKSwgKHNsaml0X3N3KWNjKTsKKyAgT1AxKFNMSklUX01PVl9VOCwgVE1QMSwgMCwgU0xKSVRfTUVNMShUTVAxKSwgKHNsaml0X3N3KWNjKTsKICAgT1AyKFNMSklUX1NITCwgVE1QMiwgMCwgU0xKSVRfSU1NLCAxLCBUTVAyLCAwKTsKICAgT1AyKFNMSklUX0FORCB8IFNMSklUX1NFVF9FLCBTTEpJVF9VTlVTRUQsIDAsIFRNUDEsIDAsIFRNUDIsIDApOwogICBhZGRfanVtcChjb21waWxlciwgYmFja3RyYWNrcywgSlVNUChTTEpJVF9aRVJPKSk7CkBAIC03MTM0LDggKzcxMzQsOCBAQAogewogUENSRTJfU1BUUiBiZWdpbiA9IGFyZ3VtZW50cy0+YmVnaW47CiBQQ1JFMl9TSVpFICpvdmVjdG9yID0gYXJndW1lbnRzLT5tYXRjaF9kYXRhLT5vdmVjdG9yOwotdWludDMyX3Qgb3ZlY2NvdW50ID0gYXJndW1lbnRzLT5vdmVjY291bnQ7Ci11aW50MzJfdCBpOworc2xqaXRfdTMyIG92ZWNjb3VudCA9IGFyZ3VtZW50cy0+b3ZlY2NvdW50Oworc2xqaXRfdTMyIGk7CiAKIGlmIChhcmd1bWVudHMtPmNhbGxvdXQgPT0gTlVMTCkKICAgcmV0dXJuIDA7CkBAIC03MTc2LDcgKzcxNzYsNyBAQAogewogREVGSU5FX0NPTVBJTEVSOwogYmFja3RyYWNrX2NvbW1vbiAqYmFja3RyYWNrOwotc2xqaXRfc2kgbW92X29wY29kZTsKK3Nsaml0X3MzMiBtb3Zfb3Bjb2RlOwogdW5zaWduZWQgaW50IGNhbGxvdXRfbGVuZ3RoID0gKCpjYyA9PSBPUF9DQUxMT1VUKQogICAgID8gUFJJVihPUF9sZW5ndGhzKVtPUF9DQUxMT1VUXSA6IEdFVChjYywgMSArIDIgKiBMSU5LX1NJWkUpOwogc2xqaXRfc3cgdmFsdWUxOwpAQCAtNzE5MSw4ICs3MTkxLDggQEAKIE9QMShTTEpJVF9NT1YsIFRNUDIsIDAsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBjb21tb24tPmNhcHR1cmVfbGFzdF9wdHIpOwogT1AxKFNMSklUX01PViwgVE1QMSwgMCwgQVJHVU1FTlRTLCAwKTsKIHZhbHVlMSA9ICgqY2MgPT0gT1BfQ0FMTE9VVCkgPyBjY1sxICsgMiAqIExJTktfU0laRV0gOiAwOwotT1AxKFNMSklUX01PVl9VSSwgU0xKSVRfTUVNMShTVEFDS19UT1ApLCBDQUxMT1VUX0FSR19PRkZTRVQoY2FsbG91dF9udW1iZXIpLCBTTEpJVF9JTU0sIHZhbHVlMSk7Ci1PUDEoU0xKSVRfTU9WX1VJLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIENBTExPVVRfQVJHX09GRlNFVChjYXB0dXJlX2xhc3QpLCBUTVAyLCAwKTsKK09QMShTTEpJVF9NT1ZfVTMyLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIENBTExPVVRfQVJHX09GRlNFVChjYWxsb3V0X251bWJlciksIFNMSklUX0lNTSwgdmFsdWUxKTsKK09QMShTTEpJVF9NT1ZfVTMyLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIENBTExPVVRfQVJHX09GRlNFVChjYXB0dXJlX2xhc3QpLCBUTVAyLCAwKTsKIAogLyogVGhlc2UgcG9pbnRlciBzaXplZCBmaWVsZHMgdGVtcG9yYXJseSBzdG9yZXMgaW50ZXJuYWwgdmFyaWFibGVzLiAqLwogT1AxKFNMSklUX01PViwgVE1QMiwgMCwgU0xKSVRfTUVNMShTTEpJVF9TUCksIE9WRUNUT1IoMCkpOwpAQCAtNzIwMSw3ICs3MjAxLDcgQEAKIAogaWYgKGNvbW1vbi0+bWFya19wdHIgIT0gMCkKICAgT1AxKFNMSklUX01PViwgVE1QMiwgMCwgU0xKSVRfTUVNMShUTVAxKSwgU0xKSVRfT0ZGU0VUT0Yoaml0X2FyZ3VtZW50cywgbWFya19wdHIpKTsKLW1vdl9vcGNvZGUgPSAoc2l6ZW9mKFBDUkUyX1NJWkUpID09IDQpID8gU0xKSVRfTU9WX1VJIDogU0xKSVRfTU9WOworbW92X29wY29kZSA9IChzaXplb2YoUENSRTJfU0laRSkgPT0gNCkgPyBTTEpJVF9NT1ZfVTMyIDogU0xKSVRfTU9WOwogT1AxKG1vdl9vcGNvZGUsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgQ0FMTE9VVF9BUkdfT0ZGU0VUKHBhdHRlcm5fcG9zaXRpb24pLCBTTEpJVF9JTU0sIEdFVChjYywgMSkpOwogT1AxKG1vdl9vcGNvZGUsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgQ0FMTE9VVF9BUkdfT0ZGU0VUKG5leHRfaXRlbV9sZW5ndGgpLCBTTEpJVF9JTU0sIEdFVChjYywgMSArIExJTktfU0laRSkpOwogCkBAIC03MjI4LDcgKzcyMjgsNyBAQAogT1AyKFNMSklUX1NVQiwgU0xKSVRfUjEsIDAsIFNUQUNLX1RPUCwgMCwgU0xKSVRfSU1NLCBDQUxMT1VUX0FSR19TSVpFKTsKIEdFVF9MT0NBTF9CQVNFKFNMSklUX1IyLCAwLCBPVkVDVE9SX1NUQVJUKTsKIHNsaml0X2VtaXRfaWp1bXAoY29tcGlsZXIsIFNMSklUX0NBTEwzLCBTTEpJVF9JTU0sIFNMSklUX0ZVTkNfT0ZGU0VUKGRvX2NhbGxvdXQpKTsKLU9QMShTTEpJVF9NT1ZfU0ksIFNMSklUX1JFVFVSTl9SRUcsIDAsIFNMSklUX1JFVFVSTl9SRUcsIDApOworT1AxKFNMSklUX01PVl9TMzIsIFNMSklUX1JFVFVSTl9SRUcsIDAsIFNMSklUX1JFVFVSTl9SRUcsIDApOwogT1AxKFNMSklUX01PViwgU1RBQ0tfVE9QLCAwLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgTE9DQUxTMCk7CiBmcmVlX3N0YWNrKGNvbW1vbiwgQ0FMTE9VVF9BUkdfU0laRSAvIHNpemVvZihzbGppdF9zdykpOwogCkBAIC03MjU3LDYgKzcyNTcsMTAgQEAKIAogICAgIGNhc2UgT1BfTk9UX1dPUkRfQk9VTkRBUlk6CiAgICAgY2FzZSBPUF9XT1JEX0JPVU5EQVJZOgorICAgIGNhc2UgT1BfQ0lSQzoKKyAgICBjYXNlIE9QX0NJUkNNOgorICAgIGNhc2UgT1BfRE9MTDoKKyAgICBjYXNlIE9QX0RPTExNOgogICAgIGNhc2UgT1BfQ0FMTE9VVDoKICAgICBjYXNlIE9QX0FMVDoKICAgICBjYyArPSBQUklWKE9QX2xlbmd0aHMpWypjY107CkBAIC04NjUwLDcgKzg2NTQsNyBAQAogcmV0dXJuIGNjICsgMSArIExJTktfU0laRTsKIH0KIAotc3RhdGljIFNMSklUX0lOTElORSBQQ1JFMl9TUFRSIGdldF9pdGVyYXRvcl9wYXJhbWV0ZXJzKGNvbXBpbGVyX2NvbW1vbiAqY29tbW9uLCBQQ1JFMl9TUFRSIGNjLCBQQ1JFMl9VQ0hBUiAqb3Bjb2RlLCBQQ1JFMl9VQ0hBUiAqdHlwZSwgc2xqaXRfdWkgKm1heCwgc2xqaXRfdWkgKmV4YWN0LCBQQ1JFMl9TUFRSICplbmQpCitzdGF0aWMgU0xKSVRfSU5MSU5FIFBDUkUyX1NQVFIgZ2V0X2l0ZXJhdG9yX3BhcmFtZXRlcnMoY29tcGlsZXJfY29tbW9uICpjb21tb24sIFBDUkUyX1NQVFIgY2MsIFBDUkUyX1VDSEFSICpvcGNvZGUsIFBDUkUyX1VDSEFSICp0eXBlLCBzbGppdF91MzIgKm1heCwgc2xqaXRfdTMyICpleGFjdCwgUENSRTJfU1BUUiAqZW5kKQogewogaW50IGNsYXNzX2xlbjsKIApAQCAtODgwMSw5ICs4ODA1LDkgQEAKIGJhY2t0cmFja19jb21tb24gKmJhY2t0cmFjazsKIFBDUkUyX1VDSEFSIG9wY29kZTsKIFBDUkUyX1VDSEFSIHR5cGU7Ci1zbGppdF91aSBtYXggPSAwLCBleGFjdDsKK3Nsaml0X3UzMiBtYXggPSAwLCBleGFjdDsKIEJPT0wgZmFzdF9mYWlsOwotc2xqaXRfc2kgZmFzdF9zdHJfcHRyOworc2xqaXRfczMyIGZhc3Rfc3RyX3B0cjsKIEJPT0wgY2hhcnBvc19lbmFibGVkOwogUENSRTJfVUNIQVIgY2hhcnBvc19jaGFyOwogdW5zaWduZWQgaW50IGNoYXJwb3Nfb3RoZXJjYXNlYml0OwpAQCAtODk0Myw5ICs4OTQ3LDcgQEAKICNlbGlmIFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSAxNiB8fCBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gMzIKICAgICAgICAgU0xKSVRfQVNTRVJUKChjaGFycG9zX290aGVyY2FzZWJpdCA+PiA5KSA9PSAwKTsKICAgICAgICAgaWYgKChjaGFycG9zX290aGVyY2FzZWJpdCAmIDB4MTAwKSAhPSAwKQotICAgICAgICAgIHsKICAgICAgICAgICBjaGFycG9zX290aGVyY2FzZWJpdCA9IChjaGFycG9zX290aGVyY2FzZWJpdCAmIDB4ZmYpIDw8IDg7Ci0gICAgICAgICAgfQogI2VuZGlmCiAgICAgICAgIGlmIChjaGFycG9zX290aGVyY2FzZWJpdCAhPSAwKQogICAgICAgICAgIGNoYXJwb3NfY2hhciB8PSBjaGFycG9zX290aGVyY2FzZWJpdDsKQEAgLTkyMjAsNyArOTIyMiw3IEBACiBlbHNlCiAgIENNUFRPKFNMSklUX05PVF9FUVVBTCwgU1RSX1BUUiwgMCwgU0xKSVRfTUVNMShTTEpJVF9TUCksIE9WRUNUT1IoMCksIGNvbW1vbi0+YWNjZXB0X2xhYmVsKTsKIE9QMShTTEpJVF9NT1YsIFRNUDEsIDAsIEFSR1VNRU5UUywgMCk7Ci1PUDEoU0xKSVRfTU9WX1VJLCBUTVAyLCAwLCBTTEpJVF9NRU0xKFRNUDEpLCBTTEpJVF9PRkZTRVRPRihqaXRfYXJndW1lbnRzLCBvcHRpb25zKSk7CitPUDEoU0xKSVRfTU9WX1UzMiwgVE1QMiwgMCwgU0xKSVRfTUVNMShUTVAxKSwgU0xKSVRfT0ZGU0VUT0Yoaml0X2FyZ3VtZW50cywgb3B0aW9ucykpOwogT1AyKFNMSklUX0FORCB8IFNMSklUX1NFVF9FLCBTTEpJVF9VTlVTRUQsIDAsIFRNUDIsIDAsIFNMSklUX0lNTSwgUENSRTJfTk9URU1QVFkpOwogYWRkX2p1bXAoY29tcGlsZXIsICZiYWNrdHJhY2stPnRvcGJhY2t0cmFja3MsIEpVTVAoU0xKSVRfTk9UX1pFUk8pKTsKIE9QMihTTEpJVF9BTkQgfCBTTEpJVF9TRVRfRSwgU0xKSVRfVU5VU0VELCAwLCBUTVAyLCAwLCBTTEpJVF9JTU0sIFBDUkUyX05PVEVNUFRZX0FUU1RBUlQpOwpAQCAtOTM0NywxMCArOTM0OSwxMCBAQAogICAgIGNhc2UgT1BfV09SRF9CT1VOREFSWToKICAgICBjYXNlIE9QX0VPRE46CiAgICAgY2FzZSBPUF9FT0Q6Ci0gICAgY2FzZSBPUF9DSVJDOgotICAgIGNhc2UgT1BfQ0lSQ006CiAgICAgY2FzZSBPUF9ET0xMOgogICAgIGNhc2UgT1BfRE9MTE06CisgICAgY2FzZSBPUF9DSVJDOgorICAgIGNhc2UgT1BfQ0lSQ006CiAgICAgY2FzZSBPUF9SRVZFUlNFOgogICAgIGNjID0gY29tcGlsZV9zaW1wbGVfYXNzZXJ0aW9uX21hdGNoaW5ncGF0aChjb21tb24sICpjYywgY2MgKyAxLCBwYXJlbnQtPnRvcCAhPSBOVUxMID8gJnBhcmVudC0+dG9wLT5uZXh0YmFja3RyYWNrcyA6ICZwYXJlbnQtPnRvcGJhY2t0cmFja3MpOwogICAgIGJyZWFrOwpAQCAtOTY1Miw3ICs5NjU0LDcgQEAKIFBDUkUyX1NQVFIgY2MgPSBjdXJyZW50LT5jYzsKIFBDUkUyX1VDSEFSIG9wY29kZTsKIFBDUkUyX1VDSEFSIHR5cGU7Ci1zbGppdF91aSBtYXggPSAwLCBleGFjdDsKK3Nsaml0X3UzMiBtYXggPSAwLCBleGFjdDsKIHN0cnVjdCBzbGppdF9sYWJlbCAqbGFiZWwgPSBOVUxMOwogc3RydWN0IHNsaml0X2p1bXAgKmp1bXAgPSBOVUxMOwoganVtcF9saXN0ICpqdW1wbGlzdCA9IE5VTEw7CkBAIC05NzcxLDcgKzk3NzMsNyBAQAogICBicmVhazsKICAgfQogCi0gIHNldF9qdW1wcyhjdXJyZW50LT50b3BiYWNrdHJhY2tzLCBMQUJFTCgpKTsKK3NldF9qdW1wcyhjdXJyZW50LT50b3BiYWNrdHJhY2tzLCBMQUJFTCgpKTsKIH0KIAogc3RhdGljIFNMSklUX0lOTElORSB2b2lkIGNvbXBpbGVfcmVmX2l0ZXJhdG9yX2JhY2t0cmFja2luZ3BhdGgoY29tcGlsZXJfY29tbW9uICpjb21tb24sIHN0cnVjdCBiYWNrdHJhY2tfY29tbW9uICpjdXJyZW50KQpAQCAtMTA4MjYsMTQgKzEwODI4LDE0IEBACiAjdW5kZWYgQ09NUElMRV9CQUNLVFJBQ0tJTkdQQVRICiAjdW5kZWYgQ1VSUkVOVF9BUwogCi1zdGF0aWMgaW50IGppdF9jb21waWxlKHBjcmUyX2NvZGUgKmNvZGUsIHVpbnQzMl90IG1vZGUpCitzdGF0aWMgaW50IGppdF9jb21waWxlKHBjcmUyX2NvZGUgKmNvZGUsIHNsaml0X3UzMiBtb2RlKQogewogcGNyZTJfcmVhbF9jb2RlICpyZSA9IChwY3JlMl9yZWFsX2NvZGUgKiljb2RlOwogc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlcjsKIGJhY2t0cmFja19jb21tb24gcm9vdGJhY2t0cmFjazsKIGNvbXBpbGVyX2NvbW1vbiBjb21tb25fZGF0YTsKIGNvbXBpbGVyX2NvbW1vbiAqY29tbW9uID0gJmNvbW1vbl9kYXRhOwotY29uc3Qgc2xqaXRfdWIgKnRhYmxlcyA9IHJlLT50YWJsZXM7Citjb25zdCBzbGppdF91OCAqdGFibGVzID0gcmUtPnRhYmxlczsKIHZvaWQgKmFsbG9jYXRvcl9kYXRhID0gJnJlLT5tZW1jdGw7CiBpbnQgcHJpdmF0ZV9kYXRhX3NpemU7CiBQQ1JFMl9TUFRSIGNjZW5kOwpAQCAtMTA5MzAsNyArMTA5MzIsNyBAQAogCiAvKiBDYWxjdWxhdGUgdGhlIGxvY2FsIHNwYWNlIHNpemUgb24gdGhlIHN0YWNrLiAqLwogY29tbW9uLT5vdmVjdG9yX3N0YXJ0ID0gTElNSVRfTUFUQ0ggKyBzaXplb2Yoc2xqaXRfc3cpOwotY29tbW9uLT5vcHRpbWl6ZWRfY2JyYWNrZXQgPSAoc2xqaXRfdWIgKilTTEpJVF9NQUxMT0MocmUtPnRvcF9icmFja2V0ICsgMSwgYWxsb2NhdG9yX2RhdGEpOworY29tbW9uLT5vcHRpbWl6ZWRfY2JyYWNrZXQgPSAoc2xqaXRfdTggKilTTEpJVF9NQUxMT0MocmUtPnRvcF9icmFja2V0ICsgMSwgYWxsb2NhdG9yX2RhdGEpOwogaWYgKCFjb21tb24tPm9wdGltaXplZF9jYnJhY2tldCkKICAgcmV0dXJuIFBDUkUyX0VSUk9SX05PTUVNT1JZOwogI2lmIGRlZmluZWQgREVCVUdfRk9SQ0VfVU5PUFRJTUlaRURfQ0JSQVMgJiYgREVCVUdfRk9SQ0VfVU5PUFRJTUlaRURfQ0JSQVMgPT0gMQpAQCAtMTEwMDEsMTMgKzExMDAzLDEzIEBACiBjb21tb24tPmNicmFfcHRyID0gT1ZFQ1RPUl9TVEFSVCArIChyZS0+dG9wX2JyYWNrZXQgKyAxKSAqIDIgKiBzaXplb2Yoc2xqaXRfc3cpOwogCiB0b3RhbF9sZW5ndGggPSBjY2VuZCAtIGNvbW1vbi0+c3RhcnQ7Ci1jb21tb24tPnByaXZhdGVfZGF0YV9wdHJzID0gKHNsaml0X3NpICopU0xKSVRfTUFMTE9DKHRvdGFsX2xlbmd0aCAqIChzaXplb2Yoc2xqaXRfc2kpICsgKGNvbW1vbi0+aGFzX3RoZW4gPyAxIDogMCkpLCBhbGxvY2F0b3JfZGF0YSk7Citjb21tb24tPnByaXZhdGVfZGF0YV9wdHJzID0gKHNsaml0X3MzMiAqKVNMSklUX01BTExPQyh0b3RhbF9sZW5ndGggKiAoc2l6ZW9mKHNsaml0X3MzMikgKyAoY29tbW9uLT5oYXNfdGhlbiA/IDEgOiAwKSksIGFsbG9jYXRvcl9kYXRhKTsKIGlmICghY29tbW9uLT5wcml2YXRlX2RhdGFfcHRycykKICAgewogICBTTEpJVF9GUkVFKGNvbW1vbi0+b3B0aW1pemVkX2NicmFja2V0LCBhbGxvY2F0b3JfZGF0YSk7CiAgIHJldHVybiBQQ1JFMl9FUlJPUl9OT01FTU9SWTsKICAgfQotbWVtc2V0KGNvbW1vbi0+cHJpdmF0ZV9kYXRhX3B0cnMsIDAsIHRvdGFsX2xlbmd0aCAqIHNpemVvZihzbGppdF9zaSkpOworbWVtc2V0KGNvbW1vbi0+cHJpdmF0ZV9kYXRhX3B0cnMsIDAsIHRvdGFsX2xlbmd0aCAqIHNpemVvZihzbGppdF9zMzIpKTsKIAogcHJpdmF0ZV9kYXRhX3NpemUgPSBjb21tb24tPmNicmFfcHRyICsgKHJlLT50b3BfYnJhY2tldCArIDEpICogc2l6ZW9mKHNsaml0X3N3KTsKIHNldF9wcml2YXRlX2RhdGFfcHRycyhjb21tb24sICZwcml2YXRlX2RhdGFfc2l6ZSwgY2NlbmQpOwpAQCAtMTEwMjgsNyArMTEwMzAsNyBAQAogCiBpZiAoY29tbW9uLT5oYXNfdGhlbikKICAgewotICBjb21tb24tPnRoZW5fb2Zmc2V0cyA9IChzbGppdF91YiAqKShjb21tb24tPnByaXZhdGVfZGF0YV9wdHJzICsgdG90YWxfbGVuZ3RoKTsKKyAgY29tbW9uLT50aGVuX29mZnNldHMgPSAoc2xqaXRfdTggKikoY29tbW9uLT5wcml2YXRlX2RhdGFfcHRycyArIHRvdGFsX2xlbmd0aCk7CiAgIG1lbXNldChjb21tb24tPnRoZW5fb2Zmc2V0cywgMCwgdG90YWxfbGVuZ3RoKTsKICAgc2V0X3RoZW5fb2Zmc2V0cyhjb21tb24sIGNvbW1vbi0+c3RhcnQsIE5VTEwpOwogICB9CkBAIC0xMTA1NSw3ICsxMTA1Nyw3IEBACiBPUDEoU0xKSVRfTU9WLCBTVFJfUFRSLCAwLCBTTEpJVF9NRU0xKFRNUDEpLCBTTEpJVF9PRkZTRVRPRihqaXRfYXJndW1lbnRzLCBzdHIpKTsKIE9QMShTTEpJVF9NT1YsIFNUUl9FTkQsIDAsIFNMSklUX01FTTEoVE1QMSksIFNMSklUX09GRlNFVE9GKGppdF9hcmd1bWVudHMsIGVuZCkpOwogT1AxKFNMSklUX01PViwgVE1QMiwgMCwgU0xKSVRfTUVNMShUTVAxKSwgU0xKSVRfT0ZGU0VUT0Yoaml0X2FyZ3VtZW50cywgc3RhY2spKTsKLU9QMShTTEpJVF9NT1ZfVUksIFRNUDEsIDAsIFNMSklUX01FTTEoVE1QMSksIFNMSklUX09GRlNFVE9GKGppdF9hcmd1bWVudHMsIGxpbWl0X21hdGNoKSk7CitPUDEoU0xKSVRfTU9WX1UzMiwgVE1QMSwgMCwgU0xKSVRfTUVNMShUTVAxKSwgU0xKSVRfT0ZGU0VUT0Yoaml0X2FyZ3VtZW50cywgbGltaXRfbWF0Y2gpKTsKIE9QMShTTEpJVF9NT1YsIFNUQUNLX1RPUCwgMCwgU0xKSVRfTUVNMShUTVAyKSwgU0xKSVRfT0ZGU0VUT0Yoc3RydWN0IHNsaml0X3N0YWNrLCBiYXNlKSk7CiBPUDEoU0xKSVRfTU9WLCBTVEFDS19MSU1JVCwgMCwgU0xKSVRfTUVNMShUTVAyKSwgU0xKSVRfT0ZGU0VUT0Yoc3RydWN0IHNsaml0X3N0YWNrLCBsaW1pdCkpOwogT1AyKFNMSklUX0FERCwgVE1QMSwgMCwgVE1QMSwgMCwgU0xKSVRfSU1NLCAxKTsKQEAgLTExMTkyLDEwICsxMTE5NCw4IEBACiAgIE9QMShTTEpJVF9NT1YsIFRNUDEsIDAsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBjb21tb24tPm1hdGNoX2VuZF9wdHIpOwogICB9CiAKLWlmIChjb21tb24tPmZhc3RfZm9yd2FyZF9iY19wdHIgIT0gTlVMTCkKLSAgT1AxKFNMSklUX01PViwgU1RSX1BUUiwgMCwgU0xKSVRfTUVNMShTTEpJVF9TUCksIFBSSVZBVEVfREFUQShjb21tb24tPmZhc3RfZm9yd2FyZF9iY19wdHIgKyAxKSk7Ci1lbHNlCi0gIE9QMShTTEpJVF9NT1YsIFNUUl9QVFIsIDAsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBjb21tb24tPnN0YXJ0X3B0cik7CitPUDEoU0xKSVRfTU9WLCBTVFJfUFRSLCAwLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwKKyAgICAoY29tbW9uLT5mYXN0X2ZvcndhcmRfYmNfcHRyICE9IE5VTEwpID8gKFBSSVZBVEVfREFUQShjb21tb24tPmZhc3RfZm9yd2FyZF9iY19wdHIgKyAxKSkgOiBjb21tb24tPnN0YXJ0X3B0cik7CiAKIGlmICgocmUtPm92ZXJhbGxfb3B0aW9ucyAmIFBDUkUyX0FOQ0hPUkVEKSA9PSAwKQogICB7CkBAIC0xMTIxNiw5ICsxMTIxNiw3IEBACiAgICAgICB9CiAgICAgfQogICBlbHNlCi0gICAgewogICAgIENNUFRPKFNMSklUX0xFU1MsIFNUUl9QVFIsIDAsIChjb21tb24tPm1hdGNoX2VuZF9wdHIgPT0gMCkgPyBTVFJfRU5EIDogVE1QMSwgMCwgbWFpbmxvb3BfbGFiZWwpOwotICAgIH0KICAgfQogCiAvKiBObyBtb3JlIHJlbWFpbmluZyBjaGFyYWN0ZXJzLiAqLwpAQCAtMTEyMzcsNyArMTEyMzUsNyBAQAogICB7CiAgIEpVTVBIRVJFKGVtcHR5X21hdGNoKTsKICAgT1AxKFNMSklUX01PViwgVE1QMSwgMCwgQVJHVU1FTlRTLCAwKTsKLSAgT1AxKFNMSklUX01PVl9VSSwgVE1QMiwgMCwgU0xKSVRfTUVNMShUTVAxKSwgU0xKSVRfT0ZGU0VUT0Yoaml0X2FyZ3VtZW50cywgb3B0aW9ucykpOworICBPUDEoU0xKSVRfTU9WX1UzMiwgVE1QMiwgMCwgU0xKSVRfTUVNMShUTVAxKSwgU0xKSVRfT0ZGU0VUT0Yoaml0X2FyZ3VtZW50cywgb3B0aW9ucykpOwogICBPUDIoU0xKSVRfQU5EIHwgU0xKSVRfU0VUX0UsIFNMSklUX1VOVVNFRCwgMCwgVE1QMiwgMCwgU0xKSVRfSU1NLCBQQ1JFMl9OT1RFTVBUWSk7CiAgIEpVTVBUTyhTTEpJVF9OT1RfWkVSTywgZW1wdHlfbWF0Y2hfYmFja3RyYWNrX2xhYmVsKTsKICAgT1AyKFNMSklUX0FORCB8IFNMSklUX1NFVF9FLCBTTEpJVF9VTlVTRUQsIDAsIFRNUDIsIDAsIFNMSklUX0lNTSwgUENSRTJfTk9URU1QVFlfQVRTVEFSVCk7CmRpZmYgLS1naXQgYS9kaXN0Mi9zcmMvcGNyZTJfaml0X21hdGNoLmMgYi9kaXN0Mi9zcmMvcGNyZTJfaml0X21hdGNoLmMKaW5kZXggZDgwNGNmZS4uYTMyMzk3MSAxMDA2NDQKLS0tIGEvZGlzdDIvc3JjL3BjcmUyX2ppdF9tYXRjaC5jCisrKyBiL2Rpc3QyL3NyYy9wY3JlMl9qaXRfbWF0Y2guYwpAQCAtNDYsNyArNDYsNyBAQAogCiBzdGF0aWMgU0xKSVRfTk9JTkxJTkUgaW50IGppdF9tYWNoaW5lX3N0YWNrX2V4ZWMoaml0X2FyZ3VtZW50cyAqYXJndW1lbnRzLCBqaXRfZnVuY3Rpb24gZXhlY3V0YWJsZV9mdW5jKQogewotc2xqaXRfdWIgbG9jYWxfc3BhY2VbTUFDSElORV9TVEFDS19TSVpFXTsKK3Nsaml0X3U4IGxvY2FsX3NwYWNlW01BQ0hJTkVfU1RBQ0tfU0laRV07CiBzdHJ1Y3Qgc2xqaXRfc3RhY2sgbG9jYWxfc3RhY2s7CiAKIGxvY2FsX3N0YWNrLnRvcCA9IChzbGppdF9zdykmbG9jYWxfc3BhY2U7CmRpZmYgLS1naXQgYS9kaXN0Mi9zcmMvcGNyZTJfaml0X3Rlc3QuYyBiL2Rpc3QyL3NyYy9wY3JlMl9qaXRfdGVzdC5jCmluZGV4IDc4ODM3Y2YuLjcwNWJhMTggMTAwNjQ0Ci0tLSBhL2Rpc3QyL3NyYy9wY3JlMl9qaXRfdGVzdC5jCisrKyBiL2Rpc3QyL3NyYy9wY3JlMl9qaXRfdGVzdC5jCkBAIC0xNDAsNyArMTQwLDYgQEAKICNkZWZpbmUgRl9ESUZGCQkweDA4MDAwMAogI2RlZmluZSBGX0ZPUkNFQ09OVgkweDEwMDAwMAogI2RlZmluZSBGX1BST1BFUlRZCTB4MjAwMDAwCi0jZGVmaW5lIEZfU1RVRFkJCTB4NDAwMDAwCiAKIHN0cnVjdCByZWdyZXNzaW9uX3Rlc3RfY2FzZSB7CiAJaW50IGNvbXBpbGVfb3B0aW9uczsKQEAgLTY5Myw2ICs2OTIsNyBAQAogCXsgUENSRTJfRklSU1RMSU5FIHwgUENSRTJfRE9UQUxMLCBQQ1JFMl9ORVdMSU5FX0xGLCAwLCAwIHwgRl9OT01BVENILCAiYWIuIiwgImFiIiB9LAogCXsgTVUgfCBQQ1JFMl9GSVJTVExJTkUsIEEsIDAsIDEgfCBGX05PTUFUQ0gsICJeW2EtZDAtOV0iLCAiXG54eFxuZCIgfSwKIAl7IFBDUkUyX0ZJUlNUTElORSB8IFBDUkUyX0RPVEFMTCwgUENSRTJfTkVXTElORV9BTlksIDAsIDAsICIuLi4uYSIsICIwMTJcbjBhIiB9LAorCXsgTVUgfCBQQ1JFMl9GSVJTVExJTkUsIEEsIDAsIDAsICJbYUNdIiwgImEiIH0sCiAKIAkvKiBSZWN1cnNlLiAqLwogCXsgTVUsIEEsIDAsIDAsICIoYSkoPzEpIiwgImFhIiB9LApAQCAtNzc5LDExICs3NzksMTEgQEAKIAl7IE1VLCBBLCAwLCAwLCAiKD8oREVGSU5FKShhKCo6YWEpKSlhKD8xKWJ8YWFjIiwgImFhYyIgfSwKIAl7IE1VLCBBLCAwLCAwLCAiKGEoKjphYSkpezB9KD86Yig/MSlifGMpK2MiLCAiYmFiYmFiIGNjIiB9LAogCXsgTVUsIEEsIDAsIDAsICIoYSgqOmFhKSl7MH0oPzpiKD8xKWIpKyIsICJiYWJiYSIgfSwKLQl7IE1VLCBBLCAwLCAwIHwgRl9OT01BVENIIHwgRl9TVFVEWSwgIihhKCo6YWEpKXswfSg/OmIoPzEpYikrIiwgImJhIiB9LAorCXsgTVUsIEEsIDAsIDAgfCBGX05PTUFUQ0gsICIoYSgqOmFhKSl7MH0oPzpiKD8xKWIpKyIsICJiYSIgfSwKIAl7IE1VLCBBLCAwLCAwLCAiKGFcXEsoKjphYSkpezB9KD86Yig/MSlifGMpK2MiLCAiYmFiYmFiIGNjIiB9LAogCXsgTVUsIEEsIDAsIDAsICIoYVxcSygqOmFhKSl7MH0oPzpiKD8xKWIpKyIsICJiYWJiYSIgfSwKLQl7IE1VLCBBLCAwLCAwIHwgRl9OT01BVENIIHwgRl9TVFVEWSwgIihhXFxLKCo6YWEpKXswfSg/OmIoPzEpYikrIiwgImJhIiB9LAotCXsgTVUsIEEsIDAsIDAgfCBGX05PTUFUQ0ggfCBGX1NUVURZLCAiKCo6bWFyayltIiwgImEiIH0sCisJeyBNVSwgQSwgMCwgMCB8IEZfTk9NQVRDSCwgIihhXFxLKCo6YWEpKXswfSg/OmIoPzEpYikrIiwgImJhIiB9LAorCXsgTVUsIEEsIDAsIDAgfCBGX05PTUFUQ0gsICIoKjptYXJrKW0iLCAiYSIgfSwKIAogCS8qICgqQ09NTUlUKSB2ZXJiLiAqLwogCXsgTVUsIEEsIDAsIDAgfCBGX05PTUFUQ0gsICJhKCpDT01NSVQpYiIsICJhYyIgfSwKQEAgLTE1MzMsMTAgKzE1MzMsMTAgQEAKIAkJCQkJCQlpc19zdWNjZXNzZnVsID0gMDsKIAkJCQkJCX0KICNlbmRpZgotI2lmIGRlZmluZWQgU1VQUE9SVF9QQ1JFMl8xNiAmJiBkZWZpbmVkIFNVUFBPUlRfUENSRTJfMTYKLQkJCQkJCWlmIChvdmVjdG9yMTZfMVtpXSAhPSBvdmVjdG9yMTZfMltpXSB8fCBvdmVjdG9yMTZfMVtpXSAhPSBvdmVjdG9yMTZfMVtpXSB8fCBvdmVjdG9yMTZfMVtpXSAhPSBvdmVjdG9yMTZfMltpXSkgewotCQkJCQkJCXByaW50ZigiXG4xNiBhbmQgMTYgYml0OiBPdmVjdG9yWyVkXSB2YWx1ZSBkaWZmZXJzKEoxNjolZCxJMTY6JWQsSjMyOiVkLEkzMjolZCk6IFslZF0gJyVzJyBAICclcycgXG4iLAotCQkJCQkJCQlpLCBvdmVjdG9yMTZfMVtpXSwgb3ZlY3RvcjE2XzJbaV0sIG92ZWN0b3IxNl8xW2ldLCBvdmVjdG9yMTZfMltpXSwKKyNpZiBkZWZpbmVkIFNVUFBPUlRfUENSRTJfMTYgJiYgZGVmaW5lZCBTVVBQT1JUX1BDUkUyXzMyCisJCQkJCQlpZiAob3ZlY3RvcjE2XzFbaV0gIT0gb3ZlY3RvcjE2XzJbaV0gfHwgb3ZlY3RvcjE2XzFbaV0gIT0gb3ZlY3RvcjMyXzFbaV0gfHwgb3ZlY3RvcjE2XzFbaV0gIT0gb3ZlY3RvcjMyXzJbaV0pIHsKKwkJCQkJCQlwcmludGYoIlxuMTYgYW5kIDMyIGJpdDogT3ZlY3RvclslZF0gdmFsdWUgZGlmZmVycyhKMTY6JWQsSTE2OiVkLEozMjolZCxJMzI6JWQpOiBbJWRdICclcycgQCAnJXMnIFxuIiwKKwkJCQkJCQkJaSwgb3ZlY3RvcjE2XzFbaV0sIG92ZWN0b3IxNl8yW2ldLCBvdmVjdG9yMzJfMVtpXSwgb3ZlY3RvcjMyXzJbaV0sCiAJCQkJCQkJCXRvdGFsLCBjdXJyZW50LT5wYXR0ZXJuLCBjdXJyZW50LT5pbnB1dCk7CiAJCQkJCQkJaXNfc3VjY2Vzc2Z1bCA9IDA7CiAJCQkJCQl9CmRpZmYgLS1naXQgYS9kaXN0Mi9zcmMvcGNyZTJfbWF0Y2guYyBiL2Rpc3QyL3NyYy9wY3JlMl9tYXRjaC5jCmluZGV4IGY1Mjc1YzcuLjA3NjNhMjMgMTAwNjQ0Ci0tLSBhL2Rpc3QyL3NyYy9wY3JlMl9tYXRjaC5jCisrKyBiL2Rpc3QyL3NyYy9wY3JlMl9tYXRjaC5jCkBAIC01NSw3ICs1NSw3IEBACiAjZGVmaW5lIFBVQkxJQ19NQVRDSF9PUFRJT05TIFwKICAgKFBDUkUyX0FOQ0hPUkVEfFBDUkUyX05PVEJPTHxQQ1JFMl9OT1RFT0x8UENSRTJfTk9URU1QVFl8IFwKICAgIFBDUkUyX05PVEVNUFRZX0FUU1RBUlR8UENSRTJfTk9fVVRGX0NIRUNLfFBDUkUyX1BBUlRJQUxfSEFSRHwgXAotICAgUENSRTJfUEFSVElBTF9TT0ZUKQorICAgUENSRTJfUEFSVElBTF9TT0ZUfFBDUkUyX05PX0pJVCkKIAogI2RlZmluZSBQVUJMSUNfSklUX01BVENIX09QVElPTlMgXAogICAgKFBDUkUyX05PX1VURl9DSEVDS3xQQ1JFMl9OT1RCT0x8UENSRTJfTk9URU9MfFBDUkUyX05PVEVNUFRZfFwKQEAgLTQ2NSw3ICs0NjUsNyBAQAogKi8KIAogc3RhdGljIGludAotI2lmZGVmIF9fR05VQ19fCisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgIWRlZmluZWQoX19JTlRFTF9DT01QSUxFUikKIF9fYXR0cmlidXRlX18gKChub2lubGluZSkpCiAjZW5kaWYKIG9wX3JlY3Vyc2Vfb3ZlY3NhdmUoUkVHSVNURVIgUENSRTJfU1BUUiBlcHRyLCBQQ1JFMl9TUFRSIGNhbGxwYXQsCmRpZmYgLS1naXQgYS9kaXN0Mi9zcmMvcGNyZTJfcHJpbnRpbnQuYyBiL2Rpc3QyL3NyYy9wY3JlMl9wcmludGludC5jCmluZGV4IDQwYTYzM2MuLjJkMzA5MjYgMTAwNjQ0Ci0tLSBhL2Rpc3QyL3NyYy9wY3JlMl9wcmludGludC5jCisrKyBiL2Rpc3QyL3NyYy9wY3JlMl9wcmludGludC5jCkBAIC0yMTQsNyArMjE0LDcgQEAKIHN0YXRpYyB2b2lkCiBwcmludF9jdXN0cmluZ19ieWxlbihGSUxFICpmLCBQQ1JFMl9TUFRSIHB0ciwgUENSRTJfVUNIQVIgbGVuKQogewotd2hpbGUgKGxlbi0tID4gMCkKK2ZvciAoOyBsZW4gPiAwOyBsZW4tLSkKICAgewogICByZWdpc3RlciB1aW50MzJfdCBjID0gKnB0cisrOwogICBpZiAoUFJJTlRBQkxFKGMpKSBmcHJpbnRmKGYsICIlYyIsIGMpOyBlbHNlIGZwcmludGYoZiwgIlxceHsleH0iLCBjKTsKZGlmZiAtLWdpdCBhL2Rpc3QyL3NyYy9wY3JlMl9zZXJpYWxpemUuYyBiL2Rpc3QyL3NyYy9wY3JlMl9zZXJpYWxpemUuYwppbmRleCA4YzQ0YWNmLi4wYWYyNmQ4IDEwMDY0NAotLS0gYS9kaXN0Mi9zcmMvcGNyZTJfc2VyaWFsaXplLmMKKysrIGIvZGlzdDIvc3JjL3BjcmUyX3NlcmlhbGl6ZS5jCkBAIC0xNTgsNiArMTU4LDcgQEAKIAogaWYgKGRhdGEgPT0gTlVMTCB8fCBjb2RlcyA9PSBOVUxMKSByZXR1cm4gUENSRTJfRVJST1JfTlVMTDsKIGlmIChudW1iZXJfb2ZfY29kZXMgPD0gMCkgcmV0dXJuIFBDUkUyX0VSUk9SX0JBRERBVEE7CitpZiAoZGF0YS0+bnVtYmVyX29mX2NvZGVzIDw9IDApIHJldHVybiBQQ1JFMl9FUlJPUl9CQURTRVJJQUxJWkVEREFUQTsKIGlmIChkYXRhLT5tYWdpYyAhPSBTRVJJQUxJWkVEX0RBVEFfTUFHSUMpIHJldHVybiBQQ1JFMl9FUlJPUl9CQURNQUdJQzsKIGlmIChkYXRhLT52ZXJzaW9uICE9IFNFUklBTElaRURfREFUQV9WRVJTSU9OKSByZXR1cm4gUENSRTJfRVJST1JfQkFETU9ERTsKIGlmIChkYXRhLT5jb25maWcgIT0gU0VSSUFMSVpFRF9EQVRBX0NPTkZJRykgcmV0dXJuIFBDUkUyX0VSUk9SX0JBRE1PREU7CkBAIC0xODgsNiArMTg5LDggQEAKICAgQ09ERV9CTE9DS1NJWkVfVFlQRSBibG9ja3NpemU7CiAgIG1lbWNweSgmYmxvY2tzaXplLCBzcmNfYnl0ZXMgKyBvZmZzZXRvZihwY3JlMl9yZWFsX2NvZGUsIGJsb2Nrc2l6ZSksCiAgICAgc2l6ZW9mKENPREVfQkxPQ0tTSVpFX1RZUEUpKTsKKyAgaWYgKGJsb2Nrc2l6ZSA8PSBzaXplb2YocGNyZTJfcmVhbF9jb2RlKSkKKyAgICByZXR1cm4gUENSRTJfRVJST1JfQkFEU0VSSUFMSVpFRERBVEE7CiAKICAgLyogVGhlIGFsbG9jYXRvciBwcm92aWRlZCBieSBnY29udGV4dCByZXBsYWNlcyB0aGUgb3JpZ2luYWwgb25lLiAqLwogCkBAIC0yMDgsNiArMjExLDEwIEBACiAKICAgbWVtY3B5KCgodWludDhfdCAqKWRzdF9yZSkgKyBzaXplb2YocGNyZTJfbWVtY3RsKSwKICAgICBzcmNfYnl0ZXMgKyBzaXplb2YocGNyZTJfbWVtY3RsKSwgYmxvY2tzaXplIC0gc2l6ZW9mKHBjcmUyX21lbWN0bCkpOworICBpZiAoZHN0X3JlLT5tYWdpY19udW1iZXIgIT0gTUFHSUNfTlVNQkVSIHx8CisgICAgICBkc3RfcmUtPm5hbWVfZW50cnlfc2l6ZSA+IE1BWF9OQU1FX1NJWkUgKyBJTU0yX1NJWkUgKyAxIHx8CisgICAgICBkc3RfcmUtPm5hbWVfY291bnQgPiBNQVhfTkFNRV9DT1VOVCkKKyAgICByZXR1cm4gUENSRTJfRVJST1JfQkFEU0VSSUFMSVpFRERBVEE7CiAKICAgLyogQXQgdGhlIG1vbWVudCBvbmx5IG9uZSB0YWJsZSBpcyBzdXBwb3J0ZWQuICovCiAKZGlmZiAtLWdpdCBhL2Rpc3QyL3NyYy9wY3JlMl9zdHVkeS5jIGIvZGlzdDIvc3JjL3BjcmUyX3N0dWR5LmMKaW5kZXggMTg5MzJhZC4uZGIwODI2NiAxMDA2NDQKLS0tIGEvZGlzdDIvc3JjL3BjcmUyX3N0dWR5LmMKKysrIGIvZGlzdDIvc3JjL3BjcmUyX3N0dWR5LmMKQEAgLTE0NTIsNyArMTQ1Miw3IEBACiAgICAgICAgICAgZm9yIChjID0gMDsgYyA8IDE2OyBjKyspIHJlLT5zdGFydF9iaXRtYXBbY10gfD0gY2xhc3NtYXBbY107CiAgICAgICAgICAgZm9yIChjID0gMTI4OyBjIDwgMjU2OyBjKyspCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoKGNsYXNzbWFwW2MvOF0gJiYgKDEgPDwgKGMmNykpKSAhPSAwKQorICAgICAgICAgICAgaWYgKChjbGFzc21hcFtjLzhdICYgKDEgPDwgKGMmNykpKSAhPSAwKQogICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgIGludCBkID0gKGMgPj4gNikgfCAweGMwOyAgICAgICAgICAgIC8qIFNldCBiaXQgZm9yIHRoaXMgc3RhcnRlciAqLwogICAgICAgICAgICAgICByZS0+c3RhcnRfYml0bWFwW2QvOF0gfD0gKDEgPDwgKGQmNykpOyAgLyogYW5kIHRoZW4gc2tpcCBvbiB0byB0aGUgKi8KZGlmZiAtLWdpdCBhL2Rpc3QyL3NyYy9wY3JlMl9zdWJzdHJpbmcuYyBiL2Rpc3QyL3NyYy9wY3JlMl9zdWJzdHJpbmcuYwppbmRleCA1OGI1MDRkLi5mNmQ3YzM5IDEwMDY0NAotLS0gYS9kaXN0Mi9zcmMvcGNyZTJfc3Vic3RyaW5nLmMKKysrIGIvZGlzdDIvc3JjL3BjcmUyX3N1YnN0cmluZy5jCkBAIC0yNDAsOCArMjQwLDExIEBACiBQQ1JFMl9FWFBfREVGTiB2b2lkIFBDUkUyX0NBTExfQ09OVkVOVElPTgogcGNyZTJfc3Vic3RyaW5nX2ZyZWUoUENSRTJfVUNIQVIgKnN0cmluZykKIHsKLXBjcmUyX21lbWN0bCAqbWVtY3RsID0gKHBjcmUyX21lbWN0bCAqKSgoY2hhciAqKXN0cmluZyAtIHNpemVvZihwY3JlMl9tZW1jdGwpKTsKLW1lbWN0bC0+ZnJlZShtZW1jdGwsIG1lbWN0bC0+bWVtb3J5X2RhdGEpOworaWYgKHN0cmluZyAhPSBOVUxMKQorICB7CisgIHBjcmUyX21lbWN0bCAqbWVtY3RsID0gKHBjcmUyX21lbWN0bCAqKSgoY2hhciAqKXN0cmluZyAtIHNpemVvZihwY3JlMl9tZW1jdGwpKTsKKyAgbWVtY3RsLT5mcmVlKG1lbWN0bCwgbWVtY3RsLT5tZW1vcnlfZGF0YSk7CisgIH0KIH0KIAogCkBAIC00MzYsOCArNDM5LDExIEBACiBQQ1JFMl9FWFBfREVGTiB2b2lkIFBDUkUyX0NBTExfQ09OVkVOVElPTgogcGNyZTJfc3Vic3RyaW5nX2xpc3RfZnJlZShQQ1JFMl9TUFRSICpsaXN0KQogewotcGNyZTJfbWVtY3RsICptZW1jdGwgPSAocGNyZTJfbWVtY3RsICopKChjaGFyICopbGlzdCAtIHNpemVvZihwY3JlMl9tZW1jdGwpKTsKLW1lbWN0bC0+ZnJlZShtZW1jdGwsIG1lbWN0bC0+bWVtb3J5X2RhdGEpOworaWYgKGxpc3QgIT0gTlVMTCkKKyAgeworICBwY3JlMl9tZW1jdGwgKm1lbWN0bCA9IChwY3JlMl9tZW1jdGwgKikoKGNoYXIgKilsaXN0IC0gc2l6ZW9mKHBjcmUyX21lbWN0bCkpOworICBtZW1jdGwtPmZyZWUobWVtY3RsLCBtZW1jdGwtPm1lbW9yeV9kYXRhKTsKKyAgfQogfQogCiAKZGlmZiAtLWdpdCBhL2Rpc3QyL3NyYy9wY3JlMmRlbW8uYyBiL2Rpc3QyL3NyYy9wY3JlMmRlbW8uYwppbmRleCBlYzUxY2YxLi44YWU0OWYxIDEwMDY0NAotLS0gYS9kaXN0Mi9zcmMvcGNyZTJkZW1vLmMKKysrIGIvZGlzdDIvc3JjL3BjcmUyZGVtby5jCkBAIC0zLDI4ICszLDMxIEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKiBUaGlzIGlzIGEgZGVtb25zdHJhdGlvbiBwcm9ncmFtIHRvIGlsbHVzdHJhdGUgYSBzdHJhaWdodGZvcndhcmQgd2F5IG9mCi1jYWxsaW5nIHRoZSBQQ1JFMiByZWd1bGFyIGV4cHJlc3Npb24gbGlicmFyeSBmcm9tIGEgQyBwcm9ncmFtLiBTZWUgdGhlCit1c2luZyB0aGUgUENSRTIgcmVndWxhciBleHByZXNzaW9uIGxpYnJhcnkgZnJvbSBhIEMgcHJvZ3JhbS4gU2VlIHRoZQogcGNyZTJzYW1wbGUgZG9jdW1lbnRhdGlvbiBmb3IgYSBzaG9ydCBkaXNjdXNzaW9uICgibWFuIHBjcmUyc2FtcGxlIiBpZiB5b3UgaGF2ZQogdGhlIFBDUkUyIG1hbiBwYWdlcyBpbnN0YWxsZWQpLiBQQ1JFMiBpcyBhIHJldmlzZWQgQVBJIGZvciB0aGUgbGlicmFyeSwgYW5kIGlzCiBpbmNvbXBhdGlibGUgd2l0aCB0aGUgb3JpZ2luYWwgUENSRSBBUEkuCiAKIFRoZXJlIGFyZSBhY3R1YWxseSB0aHJlZSBsaWJyYXJpZXMsIGVhY2ggc3VwcG9ydGluZyBhIGRpZmZlcmVudCBjb2RlIHVuaXQKLXdpZHRoLiBUaGlzIGRlbW9uc3RyYXRpb24gcHJvZ3JhbSB1c2VzIHRoZSA4LWJpdCBsaWJyYXJ5Lgord2lkdGguIFRoaXMgZGVtb25zdHJhdGlvbiBwcm9ncmFtIHVzZXMgdGhlIDgtYml0IGxpYnJhcnkuIFRoZSBkZWZhdWx0IGlzIHRvCitwcm9jZXNzIGVhY2ggY29kZSB1bml0IGFzIGEgc2VwYXJhdGUgY2hhcmFjdGVyLCBidXQgaWYgdGhlIHBhdHRlcm4gYmVnaW5zIHdpdGgKKyIoKlVURikiLCBib3RoIGl0IGFuZCB0aGUgc3ViamVjdCBhcmUgdHJlYXRlZCBhcyBVVEYtOCBzdHJpbmdzLCB3aGVyZQorY2hhcmFjdGVycyBtYXkgb2NjdXB5IG11bHRpcGxlIGNvZGUgdW5pdHMuCiAKIEluIFVuaXgtbGlrZSBlbnZpcm9ubWVudHMsIGlmIFBDUkUyIGlzIGluc3RhbGxlZCBpbiB5b3VyIHN0YW5kYXJkIHN5c3RlbQogbGlicmFyaWVzLCB5b3Ugc2hvdWxkIGJlIGFibGUgdG8gY29tcGlsZSB0aGlzIHByb2dyYW0gdXNpbmcgdGhpcyBjb21tYW5kOgogCi1nY2MgLVdhbGwgcGNyZTJkZW1vLmMgLWxwY3JlMi04IC1vIHBjcmUyZGVtbworY2MgLVdhbGwgcGNyZTJkZW1vLmMgLWxwY3JlMi04IC1vIHBjcmUyZGVtbwogCiBJZiBQQ1JFMiBpcyBub3QgaW5zdGFsbGVkIGluIGEgc3RhbmRhcmQgcGxhY2UsIGl0IGlzIGxpa2VseSB0byBiZSBpbnN0YWxsZWQKIHdpdGggc3VwcG9ydCBmb3IgdGhlIHBrZy1jb25maWcgbWVjaGFuaXNtLiBJZiB5b3UgaGF2ZSBwa2ctY29uZmlnLCB5b3UgY2FuCiBjb21waWxlIHRoaXMgcHJvZ3JhbSB1c2luZyB0aGlzIGNvbW1hbmQ6CiAKLWdjYyAtV2FsbCBwY3JlMmRlbW8uYyBgcGtnLWNvbmZpZyAtLWNmbGFncyAtLWxpYnMgbGlicGNyZTItOGAgLW8gcGNyZTJkZW1vCitjYyAtV2FsbCBwY3JlMmRlbW8uYyBgcGtnLWNvbmZpZyAtLWNmbGFncyAtLWxpYnMgbGlicGNyZTItOGAgLW8gcGNyZTJkZW1vCiAKLUlmIHlvdSBkbyBub3QgaGF2ZSBwa2ctY29uZmlnLCB5b3UgbWF5IGhhdmUgdG8gdXNlIHRoaXM6CitJZiB5b3UgZG8gbm90IGhhdmUgcGtnLWNvbmZpZywgeW91IG1heSBoYXZlIHRvIHVzZSBzb21ldGhpbmcgbGlrZSB0aGlzOgogCi1nY2MgLVdhbGwgcGNyZTJkZW1vLmMgLUkvdXNyL2xvY2FsL2luY2x1ZGUgLUwvdXNyL2xvY2FsL2xpYiBcCitjYyAtV2FsbCBwY3JlMmRlbW8uYyAtSS91c3IvbG9jYWwvaW5jbHVkZSAtTC91c3IvbG9jYWwvbGliIFwKICAgLVIvdXNyL2xvY2FsL2xpYiAtbHBjcmUyLTggLW8gcGNyZTJkZW1vCiAKIFJlcGxhY2UgIi91c3IvbG9jYWwvaW5jbHVkZSIgYW5kICIvdXNyL2xvY2FsL2xpYiIgd2l0aCB3aGVyZXZlciB0aGUgaW5jbHVkZSBhbmQKQEAgLTM5LDkgKzQyLDE0IEBACiAKIC8qICNkZWZpbmUgUENSRTJfU1RBVElDICovCiAKLS8qIFRoaXMgbWFjcm8gbXVzdCBiZSBkZWZpbmVkIGJlZm9yZSBpbmNsdWRpbmcgcGNyZTIuaC4gRm9yIGEgcHJvZ3JhbSB0aGF0IHVzZXMKLW9ubHkgb25lIGNvZGUgdW5pdCB3aWR0aCwgaXQgbWFrZXMgaXQgcG9zc2libGUgdG8gdXNlIGdlbmVyaWMgZnVuY3Rpb24gbmFtZXMKLXN1Y2ggYXMgcGNyZTJfY29tcGlsZSgpLiAqLworLyogVGhlIFBDUkUyX0NPREVfVU5JVF9XSURUSCBtYWNybyBtdXN0IGJlIGRlZmluZWQgYmVmb3JlIGluY2x1ZGluZyBwY3JlMi5oLgorRm9yIGEgcHJvZ3JhbSB0aGF0IHVzZXMgb25seSBvbmUgY29kZSB1bml0IHdpZHRoLCBzZXR0aW5nIGl0IHRvIDgsIDE2LCBvciAzMgorbWFrZXMgaXQgcG9zc2libGUgdG8gdXNlIGdlbmVyaWMgZnVuY3Rpb24gbmFtZXMgc3VjaCBhcyBwY3JlMl9jb21waWxlKCkuIE5vdGUKK3RoYXQganVzdCBjaGFuZ2luZyA4IHRvIDE2IChmb3IgZXhhbXBsZSkgaXMgbm90IHN1ZmZpY2llbnQgdG8gY29udmVydCB0aGlzCitwcm9ncmFtIHRvIHByb2Nlc3MgMTYtYml0IGNoYXJhY3RlcnMuIEV2ZW4gaW4gYSBmdWxseSAxNi1iaXQgZW52aXJvbm1lbnQsIHdoZXJlCitzdHJpbmctaGFuZGxpbmcgZnVuY3Rpb25zIHN1Y2ggYXMgc3RyY21wKCkgYW5kIHByaW50ZigpIHdvcmsgd2l0aCAxNi1iaXQKK2NoYXJhY3RlcnMsIHRoZSBjb2RlIGZvciBoYW5kbGluZyB0aGUgdGFibGUgb2YgbmFtZWQgc3Vic3RyaW5ncyB3aWxsIHN0aWxsIG5lZWQKK3RvIGJlIG1vZGlmaWVkLiAqLwogCiAjZGVmaW5lIFBDUkUyX0NPREVfVU5JVF9XSURUSCA4CiAKQEAgLTYyLDE5ICs3MCwxOSBAQAogewogcGNyZTJfY29kZSAqcmU7CiBQQ1JFMl9TUFRSIHBhdHRlcm47ICAgICAvKiBQQ1JFMl9TUFRSIGlzIGEgcG9pbnRlciB0byB1bnNpZ25lZCBjb2RlIHVuaXRzIG9mICovCi1QQ1JFMl9TUFRSIHN1YmplY3Q7ICAgICAvKiB0aGUgYXBwcm9wcmlhdGUgd2lkdGggKDgsIDE2LCBvciAzMiBiaXRzKS4gKi8KK1BDUkUyX1NQVFIgc3ViamVjdDsgICAgIC8qIHRoZSBhcHByb3ByaWF0ZSB3aWR0aCAoaW4gdGhpcyBjYXNlLCA4IGJpdHMpLiAqLwogUENSRTJfU1BUUiBuYW1lX3RhYmxlOwogCiBpbnQgY3JsZl9pc19uZXdsaW5lOwogaW50IGVycm9ybnVtYmVyOwogaW50IGZpbmRfYWxsOwogaW50IGk7Ci1pbnQgbmFtZWNvdW50OwotaW50IG5hbWVfZW50cnlfc2l6ZTsKIGludCByYzsKIGludCB1dGY4OwogCiB1aW50MzJfdCBvcHRpb25fYml0czsKK3VpbnQzMl90IG5hbWVjb3VudDsKK3VpbnQzMl90IG5hbWVfZW50cnlfc2l6ZTsKIHVpbnQzMl90IG5ld2xpbmU7CiAKIFBDUkUyX1NJWkUgZXJyb3JvZmZzZXQ7CkBAIC04OSwxNSArOTcsMTkgQEAKICogRmlyc3QsIHNvcnQgb3V0IHRoZSBjb21tYW5kIGxpbmUuIFRoZXJlIGlzIG9ubHkgb25lIHBvc3NpYmxlIG9wdGlvbiBhdCAgKgogKiB0aGUgbW9tZW50LCAiLWciIHRvIHJlcXVlc3QgcmVwZWF0ZWQgbWF0Y2hpbmcgdG8gZmluZCBhbGwgb2NjdXJyZW5jZXMsICAqCiAqIGxpa2UgUGVybCdzIC9nIG9wdGlvbi4gV2Ugc2V0IHRoZSB2YXJpYWJsZSBmaW5kX2FsbCB0byBhIG5vbi16ZXJvIHZhbHVlICoKLSogaWYgdGhlIC1nIG9wdGlvbiBpcyBwcmVzZW50LiBBcGFydCBmcm9tIHRoYXQsIHRoZXJlIG11c3QgYmUgZXhhY3RseSB0d28gKgotKiBhcmd1bWVudHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqIGlmIHRoZSAtZyBvcHRpb24gaXMgcHJlc2VudC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiBmaW5kX2FsbCA9IDA7CiBmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKQogICB7CiAgIGlmIChzdHJjbXAoYXJndltpXSwgIi1nIikgPT0gMCkgZmluZF9hbGwgPSAxOwotICAgIGVsc2UgYnJlYWs7CisgIGVsc2UgaWYgKGFyZ3ZbaV1bMF0gPT0gJy0nKQorICAgIHsKKyAgICBwcmludGYoIlVucmVjb2duaXNlZCBvcHRpb24gJXNcbiIsIGFyZ3ZbaV0pOworICAgIHJldHVybiAxOworICAgIH0KKyAgZWxzZSBicmVhazsKICAgfQogCiAvKiBBZnRlciB0aGUgb3B0aW9ucywgd2UgcmVxdWlyZSBleGFjdGx5IHR3byBhcmd1bWVudHMsIHdoaWNoIGFyZSB0aGUgcGF0dGVybiwKQEAgLTEwNSw3ICsxMTcsNyBAQAogCiBpZiAoYXJnYyAtIGkgIT0gMikKICAgewotICBwcmludGYoIlR3byBhcmd1bWVudHMgcmVxdWlyZWQ6IGEgcmVnZXggYW5kIGEgc3ViamVjdCBzdHJpbmdcbiIpOworICBwcmludGYoIkV4YWN0bHkgdHdvIGFyZ3VtZW50cyByZXF1aXJlZDogYSByZWdleCBhbmQgYSBzdWJqZWN0IHN0cmluZ1xuIik7CiAgIHJldHVybiAxOwogICB9CiAKQEAgLTE4NCw3ICsxOTYsNyBAQAogc3RvcmVkLiAqLwogCiBvdmVjdG9yID0gcGNyZTJfZ2V0X292ZWN0b3JfcG9pbnRlcihtYXRjaF9kYXRhKTsKLXByaW50ZigiXG5NYXRjaCBzdWNjZWVkZWQgYXQgb2Zmc2V0ICVkXG4iLCAoaW50KW92ZWN0b3JbMF0pOworcHJpbnRmKCJNYXRjaCBzdWNjZWVkZWQgYXQgb2Zmc2V0ICVkXG4iLCAoaW50KW92ZWN0b3JbMF0pOwogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0yMjUsNyArMjM3LDcgQEAKICAgUENSRTJfSU5GT19OQU1FQ09VTlQsIC8qIGdldCB0aGUgbnVtYmVyIG9mIG5hbWVkIHN1YnN0cmluZ3MgKi8KICAgJm5hbWVjb3VudCk7ICAgICAgICAgIC8qIHdoZXJlIHRvIHB1dCB0aGUgYW5zd2VyICovCiAKLWlmIChuYW1lY291bnQgPD0gMCkgcHJpbnRmKCJObyBuYW1lZCBzdWJzdHJpbmdzXG4iKTsgZWxzZQoraWYgKG5hbWVjb3VudCA9PSAwKSBwcmludGYoIk5vIG5hbWVkIHN1YnN0cmluZ3NcbiIpOyBlbHNlCiAgIHsKICAgUENSRTJfU1BUUiB0YWJwdHI7CiAgIHByaW50ZigiTmFtZWQgc3Vic3RyaW5nc1xuIik7CkBAIC0zMTMsOCArMzI1LDggQEAKIAogZm9yICg7OykKICAgewotICB1aW50MzJfdCBvcHRpb25zID0gMDsgICAgICAgICAgICAgICAgICAgIC8qIE5vcm1hbGx5IG5vIG9wdGlvbnMgKi8KLSAgUENSRTJfU0laRSBzdGFydF9vZmZzZXQgPSBvdmVjdG9yWzFdOyAgLyogU3RhcnQgYXQgZW5kIG9mIHByZXZpb3VzIG1hdGNoICovCisgIHVpbnQzMl90IG9wdGlvbnMgPSAwOyAgICAgICAgICAgICAgICAgICAvKiBOb3JtYWxseSBubyBvcHRpb25zICovCisgIFBDUkUyX1NJWkUgc3RhcnRfb2Zmc2V0ID0gb3ZlY3RvclsxXTsgICAvKiBTdGFydCBhdCBlbmQgb2YgcHJldmlvdXMgbWF0Y2ggKi8KIAogICAvKiBJZiB0aGUgcHJldmlvdXMgbWF0Y2ggd2FzIGZvciBhbiBlbXB0eSBzdHJpbmcsIHdlIGFyZSBmaW5pc2hlZCBpZiB3ZSBhcmUKICAgYXQgdGhlIGVuZCBvZiB0aGUgc3ViamVjdC4gT3RoZXJ3aXNlLCBhcnJhbmdlIHRvIHJ1biBhbm90aGVyIG1hdGNoIGF0IHRoZQpAQCAtMzU0LDcgKzM2Niw3IEBACiAgICAgewogICAgIGlmIChvcHRpb25zID09IDApIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgLyogQWxsIG1hdGNoZXMgZm91bmQgKi8KICAgICBvdmVjdG9yWzFdID0gc3RhcnRfb2Zmc2V0ICsgMTsgICAgICAgICAgICAgIC8qIEFkdmFuY2Ugb25lIGNvZGUgdW5pdCAqLwotICAgIGlmIChjcmxmX2lzX25ld2xpbmUgJiYgICAgICAgICAgICAgICAgICAgICAgLyogSWYgQ1JMRiBpcyBuZXdsaW5lICYgKi8KKyAgICBpZiAoY3JsZl9pc19uZXdsaW5lICYmICAgICAgICAgICAgICAgICAgICAgIC8qIElmIENSTEYgaXMgYSBuZXdsaW5lICYgKi8KICAgICAgICAgc3RhcnRfb2Zmc2V0IDwgc3ViamVjdF9sZW5ndGggLSAxICYmICAgIC8qIHdlIGFyZSBhdCBDUkxGLCAqLwogICAgICAgICBzdWJqZWN0W3N0YXJ0X29mZnNldF0gPT0gJ1xyJyAmJgogICAgICAgICBzdWJqZWN0W3N0YXJ0X29mZnNldCArIDFdID09ICdcbicpCkBAIC00MDAsNyArNDEyLDcgQEAKICAgICBwcmludGYoIiUyZDogJS4qc1xuIiwgaSwgKGludClzdWJzdHJpbmdfbGVuZ3RoLCAoY2hhciAqKXN1YnN0cmluZ19zdGFydCk7CiAgICAgfQogCi0gIGlmIChuYW1lY291bnQgPD0gMCkgcHJpbnRmKCJObyBuYW1lZCBzdWJzdHJpbmdzXG4iKTsgZWxzZQorICBpZiAobmFtZWNvdW50ID09IDApIHByaW50ZigiTm8gbmFtZWQgc3Vic3RyaW5nc1xuIik7IGVsc2UKICAgICB7CiAgICAgUENSRTJfU1BUUiB0YWJwdHIgPSBuYW1lX3RhYmxlOwogICAgIHByaW50ZigiTmFtZWQgc3Vic3RyaW5nc1xuIik7CmRpZmYgLS1naXQgYS9kaXN0Mi9zcmMvcGNyZTJncmVwLmMgYi9kaXN0Mi9zcmMvcGNyZTJncmVwLmMKaW5kZXggYWFkYjIyYS4uNDk3NDdjMCAxMDA2NDQKLS0tIGEvZGlzdDIvc3JjL3BjcmUyZ3JlcC5jCisrKyBiL2Rpc3QyL3NyYy9wY3JlMmdyZXAuYwpAQCAtNTgsNiArNTgsMTUgQEAKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDxzeXMvc3RhdC5oPgogCisjaWYgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoV0lOMzIpCisjaW5jbHVkZSA8aW8uaD4gICAgICAgICAgICAgICAgLyogRm9yIF9zZXRtb2RlKCkgKi8KKyNpbmNsdWRlIDxmY250bC5oPiAgICAgICAgICAgICAvKiBGb3IgX09fQklOQVJZICovCisjZW5kaWYKKworI2lmZGVmIFNVUFBPUlRfUENSRTJHUkVQX0NBTExPVVQKKyNpbmNsdWRlIDxzeXMvd2FpdC5oPgorI2VuZGlmCisKICNpZmRlZiBIQVZFX1VOSVNURF9ICiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjZW5kaWYKQEAgLTEyMSw2ICsxMzAsMTcgQEAKIAogI2RlZmluZSBGV1JJVEUoYSxiLGMsZCkgaWYgKGZ3cml0ZShhLGIsYyxkKSkge30KIAorLyogVW5kZXIgV2luZG93cywgd2UgaGF2ZSB0byBzZXQgc3Rkb3V0IHRvIGJlIGJpbmFyeSwgc28gdGhhdCBpdCBkb2VzIG5vdAorY29udmVydCBcclxuIGF0IHRoZSBlbmRzIG9mIG91dHB1dCBsaW5lcyB0byBcclxyXG4uIEhvd2V2ZXIsIHRoYXQgbWVhbnMgdGhhdAorYW55IG1lc3NhZ2VzIHdyaXR0ZW4gdG8gc3Rkb3V0IG11c3QgaGF2ZSBcclxuIGFzIHRoZWlyIGxpbmUgdGVybWluYXRvci4gVGhpcyBpcworaGFuZGxlZCBieSB1c2luZyBTVERPVVRfTkwgYXMgdGhlIG5ld2xpbmUgc3RyaW5nLiAqLworCisjaWYgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoV0lOMzIpCisjZGVmaW5lIFNURE9VVF9OTCAgIlxyXG4iCisjZWxzZQorI2RlZmluZSBTVERPVVRfTkwgICJcbiIKKyNlbmRpZgorCiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTg4NSwyNyArOTA1LDM0IEBACiB7CiBvcHRpb25faXRlbSAqb3A7CiAKLXByaW50ZigiVXNhZ2U6IHBjcmUyZ3JlcCBbT1BUSU9OXS4uLiBbUEFUVEVSTl0gW0ZJTEUxIEZJTEUyIC4uLl1cbiIpOwotcHJpbnRmKCJTZWFyY2ggZm9yIFBBVFRFUk4gaW4gZWFjaCBGSUxFIG9yIHN0YW5kYXJkIGlucHV0LlxuIik7Ci1wcmludGYoIlBBVFRFUk4gbXVzdCBiZSBwcmVzZW50IGlmIG5laXRoZXIgLWUgbm9yIC1mIGlzIHVzZWQuXG4iKTsKLXByaW50ZigiXCItXCIgY2FuIGJlIHVzZWQgYXMgYSBmaWxlIG5hbWUgdG8gbWVhbiBTVERJTi5cbiIpOworcHJpbnRmKCJVc2FnZTogcGNyZTJncmVwIFtPUFRJT05dLi4uIFtQQVRURVJOXSBbRklMRTEgRklMRTIgLi4uXSIgU1RET1VUX05MKTsKK3ByaW50ZigiU2VhcmNoIGZvciBQQVRURVJOIGluIGVhY2ggRklMRSBvciBzdGFuZGFyZCBpbnB1dC4iIFNURE9VVF9OTCk7CitwcmludGYoIlBBVFRFUk4gbXVzdCBiZSBwcmVzZW50IGlmIG5laXRoZXIgLWUgbm9yIC1mIGlzIHVzZWQuIiBTVERPVVRfTkwpOworCisjaWZkZWYgU1VQUE9SVF9QQ1JFMkdSRVBfQ0FMTE9VVAorcHJpbnRmKCJDYWxsb3V0IHNjcmlwdHMgaW4gcGF0dGVybnMgYXJlIHN1cHBvcnRlZC4iIFNURE9VVF9OTCk7CisjZWxzZQorcHJpbnRmKCJDYWxsb3V0IHNjcmlwdHMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBwY3JlMmdyZXAuIiBTVERPVVRfTkwpOworI2VuZGlmCisKK3ByaW50ZigiXCItXCIgY2FuIGJlIHVzZWQgYXMgYSBmaWxlIG5hbWUgdG8gbWVhbiBTVERJTi4iIFNURE9VVF9OTCk7CiAKICNpZmRlZiBTVVBQT1JUX0xJQloKLXByaW50ZigiRmlsZXMgd2hvc2UgbmFtZXMgZW5kIGluIC5neiBhcmUgcmVhZCB1c2luZyB6bGliLlxuIik7CitwcmludGYoIkZpbGVzIHdob3NlIG5hbWVzIGVuZCBpbiAuZ3ogYXJlIHJlYWQgdXNpbmcgemxpYi4iIFNURE9VVF9OTCk7CiAjZW5kaWYKIAogI2lmZGVmIFNVUFBPUlRfTElCQloyCi1wcmludGYoIkZpbGVzIHdob3NlIG5hbWVzIGVuZCBpbiAuYnoyIGFyZSByZWFkIHVzaW5nIGJ6bGliMi5cbiIpOworcHJpbnRmKCJGaWxlcyB3aG9zZSBuYW1lcyBlbmQgaW4gLmJ6MiBhcmUgcmVhZCB1c2luZyBiemxpYjIuIiBTVERPVVRfTkwpOwogI2VuZGlmCiAKICNpZiBkZWZpbmVkIFNVUFBPUlRfTElCWiB8fCBkZWZpbmVkIFNVUFBPUlRfTElCQloyCi1wcmludGYoIk90aGVyIGZpbGVzIGFuZCB0aGUgc3RhbmRhcmQgaW5wdXQgYXJlIHJlYWQgYXMgcGxhaW4gZmlsZXMuXG5cbiIpOworcHJpbnRmKCJPdGhlciBmaWxlcyBhbmQgdGhlIHN0YW5kYXJkIGlucHV0IGFyZSByZWFkIGFzIHBsYWluIGZpbGVzLiIgU1RET1VUX05MIFNURE9VVF9OTCk7CiAjZWxzZQotcHJpbnRmKCJBbGwgZmlsZXMgYXJlIHJlYWQgYXMgcGxhaW4gZmlsZXMsIHdpdGhvdXQgYW55IGludGVycHJldGF0aW9uLlxuXG4iKTsKK3ByaW50ZigiQWxsIGZpbGVzIGFyZSByZWFkIGFzIHBsYWluIGZpbGVzLCB3aXRob3V0IGFueSBpbnRlcnByZXRhdGlvbi4iIFNURE9VVF9OTCBTVERPVVRfTkwpOwogI2VuZGlmCiAKLXByaW50ZigiRXhhbXBsZTogcGNyZTJncmVwIC1pICdoZWxsby4qd29ybGQnIG1lbnUuaCBtYWluLmNcblxuIik7Ci1wcmludGYoIk9wdGlvbnM6XG4iKTsKK3ByaW50ZigiRXhhbXBsZTogcGNyZTJncmVwIC1pICdoZWxsby4qd29ybGQnIG1lbnUuaCBtYWluLmMiIFNURE9VVF9OTCBTVERPVVRfTkwpOworcHJpbnRmKCJPcHRpb25zOiIgU1RET1VUX05MKTsKIAogZm9yIChvcCA9IG9wdGlvbmxpc3Q7IG9wLT5vbmVfY2hhciAhPSAwOyBvcCsrKQogICB7CkBAIC05MjIsMTcgKzk0OSwxNyBAQAogICAgIH0KIAogICBpZiAobiA8IDEpIG4gPSAxOwotICBwcmludGYoIiUuKnMlc1xuIiwgbiwgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICIsIG9wLT5oZWxwX3RleHQpOworICBwcmludGYoIiUuKnMlcyIgU1RET1VUX05MLCBuLCAiICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwgb3AtPmhlbHBfdGV4dCk7CiAgIH0KIAotcHJpbnRmKCJcbk51bWJlcnMgbWF5IGJlIGZvbGxvd2VkIGJ5IEsgb3IgTSwgZS5nLiAtLWJ1ZmZlci1zaXplPTEwMEsuXG4iKTsKLXByaW50ZigiVGhlIGRlZmF1bHQgdmFsdWUgZm9yIC0tYnVmZmVyLXNpemUgaXMgJWQuXG4iLCBQQ1JFMkdSRVBfQlVGU0laRSk7Ci1wcmludGYoIldoZW4gcmVhZGluZyBwYXR0ZXJucyBvciBmaWxlIG5hbWVzIGZyb20gYSBmaWxlLCB0cmFpbGluZyB3aGl0ZVxuIik7Ci1wcmludGYoInNwYWNlIGlzIHJlbW92ZWQgYW5kIGJsYW5rIGxpbmVzIGFyZSBpZ25vcmVkLlxuIik7Ci1wcmludGYoIlRoZSBtYXhpbXVtIHNpemUgb2YgYW55IHBhdHRlcm4gaXMgJWQgYnl0ZXMuXG4iLCBNQVhQQVRMRU4pOworcHJpbnRmKFNURE9VVF9OTCAiTnVtYmVycyBtYXkgYmUgZm9sbG93ZWQgYnkgSyBvciBNLCBlLmcuIC0tYnVmZmVyLXNpemU9MTAwSy4iIFNURE9VVF9OTCk7CitwcmludGYoIlRoZSBkZWZhdWx0IHZhbHVlIGZvciAtLWJ1ZmZlci1zaXplIGlzICVkLiIgU1RET1VUX05MLCBQQ1JFMkdSRVBfQlVGU0laRSk7CitwcmludGYoIldoZW4gcmVhZGluZyBwYXR0ZXJucyBvciBmaWxlIG5hbWVzIGZyb20gYSBmaWxlLCB0cmFpbGluZyB3aGl0ZSIgU1RET1VUX05MKTsKK3ByaW50Zigic3BhY2UgaXMgcmVtb3ZlZCBhbmQgYmxhbmsgbGluZXMgYXJlIGlnbm9yZWQuIiBTVERPVVRfTkwpOworcHJpbnRmKCJUaGUgbWF4aW11bSBzaXplIG9mIGFueSBwYXR0ZXJuIGlzICVkIGJ5dGVzLiIgU1RET1VUX05MLCBNQVhQQVRMRU4pOwogCi1wcmludGYoIlxuV2l0aCBubyBGSUxFcywgcmVhZCBzdGFuZGFyZCBpbnB1dC4gSWYgZmV3ZXIgdGhhbiB0d28gRklMRXMgZ2l2ZW4sIGFzc3VtZSAtaC5cbiIpOwotcHJpbnRmKCJFeGl0IHN0YXR1cyBpcyAwIGlmIGFueSBtYXRjaGVzLCAxIGlmIG5vIG1hdGNoZXMsIGFuZCAyIGlmIHRyb3VibGUuXG4iKTsKK3ByaW50ZihTVERPVVRfTkwgIldpdGggbm8gRklMRXMsIHJlYWQgc3RhbmRhcmQgaW5wdXQuIElmIGZld2VyIHRoYW4gdHdvIEZJTEVzIGdpdmVuLCBhc3N1bWUgLWguIiBTVERPVVRfTkwpOworcHJpbnRmKCJFeGl0IHN0YXR1cyBpcyAwIGlmIGFueSBtYXRjaGVzLCAxIGlmIG5vIG1hdGNoZXMsIGFuZCAyIGlmIHRyb3VibGUuIiBTVERPVVRfTkwpOwogfQogCiAKQEAgLTE0NzMsNiArMTUwMCwyNzQgQEAKIH0KIAogCisjaWZkZWYgU1VQUE9SVF9QQ1JFMkdSRVBfQ0FMTE9VVAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgUGFyc2UgYW5kIGV4ZWN1dGUgY2FsbG91dCBzY3JpcHRzICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFRoaXMgZnVuY3Rpb24gcGFyc2VzIGEgY2FsbG91dCBzdHJpbmcgYmxvY2sgYW5kIGV4ZWN1dGVzIHRoZQorcHJvZ3JhbSBzcGVjaWZpZWQgYnkgdGhlIHN0cmluZy4gVGhlIHN0cmluZyBpcyBhIGxpc3Qgb2Ygc3Vic3RyaW5ncworc2VwYXJhdGVkIGJ5IHBpcGUgY2hhcmFjdGVycy4gVGhlIGZpcnN0IHN1YnN0cmluZyByZXByZXNlbnRzIHRoZQorZXhlY3V0YWJsZSBuYW1lLCBhbmQgdGhlIGZvbGxvd2luZyBzdWJzdHJpbmdzIHNwZWNpZnkgdGhlIGFyZ3VtZW50czoKKworICBwcm9ncmFtX25hbWV8cGFyYW0xfHBhcmFtMnwuLi4KKworQW55IHN1YnN0aXJuZyAoaW5jbHVkaW5nIHRoZSBwcm9ncmFtIG5hbWUpIGNhbiBjb250YWluIGVzY2FwZSBzZXF1ZW5jZXMKK3N0YXJ0ZWQgYnkgdGhlIGRvbGxhciBjaGFyYWN0ZXIuIFRoZSBlc2NhcGUgc2VxdWVuY2VzIGFyZSBzdWJzdGl0dXRlZCBhcworZm9sbG93czoKKworICAkPGRpZ2l0cz4gb3IgJHs8ZGlnaXRzPn0gaXMgcmVwbGFjZWQgYnkgdGhlIGNhcHR1cmVkIHN1YnN0cmluZyBvZiB0aGUgZ2l2ZW4KKyAgZGVjaW1hbCBudW1iZXIsIHdoaWNoIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uIElmIHRoZSBudW1iZXIgaXMgZ3JlYXRlcgorICB0aGFuIHRoZSBudW1iZXIgb2YgY2FwdHVyaW5nIHN1YnN0cmluZ3MsIG9yIGlmIHRoZSBjYXB0dXJlIGlzIHVuc2V0LCB0aGUKKyAgcmVwbGFjZW1lbnQgaXMgZW1wdHkuCisKKyAgQW55IG90aGVyIGNoYXJhY3RlciBpcyBzdWJzdGl0dXRlZCBieSBpdHNlbGYuIEUuZzogJCQgaXMgcmVwbGFjZWQgYnkgYSBzaW5nbGUKKyAgZG9sbGFyIG9yICR8IHJlcGxhY2VkIGJ5IGEgcGlwZSBjaGFyYWN0ZXIuCisKK0V4YW1wbGU6CisKKyAgZWNobyAtZSAiYWJjZGVcbjEyMzQ1IiB8IHBjcmUyZ3JlcCBcCisgICAgJyguKSguLiguKSkoP0MiL2Jpbi9lY2hvfEFyZzE6IFskMV0gWyQyXSBbJDNdfEFyZzI6ICR8JHsxfSR8ICgkNCkiKSgpJyAtCisKKyAgT3V0cHV0OgorCisgICAgQXJnMTogW2FdIFtiY2RdIFtkXSBBcmcyOiB8YXwgKCkKKyAgICBhYmNkZQorICAgIEFyZzE6IFsxXSBbMjM0XSBbNF0gQXJnMjogfDF8ICgpCisgICAgMTIzNDUKKworQXJndW1lbnRzOgorICBibG9ja3B0ciAgICAgdGhlIGNhbGxvdXQgYmxvY2sKKworUmV0dXJuczogICAgICAgY3VycmVudGx5IGl0IGFsd2F5cyByZXR1cm5zIHdpdGggMAorKi8KKworc3RhdGljIGludAorcGNyZTJncmVwX2NhbGxvdXQocGNyZTJfY2FsbG91dF9ibG9jayAqY2FsbG91dHB0ciwgdm9pZCAqdW51c2VkKQoreworUENSRTJfU0laRSBsZW5ndGggPSBjYWxsb3V0cHRyLT5jYWxsb3V0X3N0cmluZ19sZW5ndGg7CitQQ1JFMl9TUFRSIHN0cmluZyA9IGNhbGxvdXRwdHItPmNhbGxvdXRfc3RyaW5nOworUENSRTJfU1BUUiBzdWJqZWN0ID0gY2FsbG91dHB0ci0+c3ViamVjdDsKK1BDUkUyX1NJWkUgKm92ZWN0b3IgPSBjYWxsb3V0cHRyLT5vZmZzZXRfdmVjdG9yOworUENSRTJfU0laRSBjYXB0dXJlX3RvcCA9IGNhbGxvdXRwdHItPmNhcHR1cmVfdG9wOworUENSRTJfU0laRSBhcmdzdmVjdG9ybGVuID0gMjsKK1BDUkUyX1NJWkUgYXJnc2xlbiA9IDE7CitjaGFyICphcmdzOworY2hhciAqYXJnc3B0cjsKK2NoYXIgKiphcmdzdmVjdG9yOworY2hhciAqKmFyZ3N2ZWN0b3JwdHI7CitwaWRfdCBwaWQ7CitpbnQgcmVzdWx0ID0gMDsKKworKHZvaWQpdW51c2VkOyAgIC8qIEF2b2lkIGNvbXBpbGVyIHdhcm5pbmcgKi8KKworLyogT25seSBjYWxsb3V0IHdpdGggc3RyaW5ncyBhcmUgc3VwcG9ydGVkLiAqLworaWYgKHN0cmluZyA9PSBOVUxMIHx8IGxlbmd0aCA9PSAwKSByZXR1cm4gMDsKKworLyogQ2hlY2tpbmcgc3ludGF4IGFuZCBjb21wdXRlIHRoZSBudW1iZXIgb2Ygc3RyaW5nIGZyYWdtZW50cy4gQ2FsbG91dCBzdHJpbmdzCithcmUgaWdub3JlZCBpbiBjYXNlIG9mIGEgc3ludGF4IGVycm9yLiAqLworCit3aGlsZSAobGVuZ3RoID4gMCkKKyAgeworICBpZiAoKnN0cmluZyA9PSAnfCcpCisgICAgeworICAgIGFyZ3N2ZWN0b3JsZW4rKzsKKworICAgIC8qIE1heGltdW0gMTAwMDAgYXJndW1lbnRzIGFsbG93ZWQuICovCisgICAgaWYgKGFyZ3N2ZWN0b3JsZW4gPiAxMDAwMCkgcmV0dXJuIDA7CisgICAgfQorICBlbHNlIGlmICgqc3RyaW5nID09ICckJykKKyAgICB7CisgICAgUENSRTJfU0laRSBjYXB0dXJlX2lkID0gMDsKKworICAgIHN0cmluZysrOworICAgIGxlbmd0aC0tOworCisgICAgLyogU3ludGF4IGVycm9yOiBhIGNoYXJhY3RlciBtdXN0IGJlIHByZXNlbnQgYWZ0ZXIgJC4gKi8KKyAgICBpZiAobGVuZ3RoID09IDApIHJldHVybiAwOworCisgICAgaWYgKCpzdHJpbmcgPj0gJzEnICYmICpzdHJpbmcgPD0gJzknKQorICAgICAgeworICAgICAgZG8KKyAgICAgICAgeworICAgICAgICAvKiBNYXhpbXVtIGNhcHR1cmUgaWQgaXMgNjU1MzUuICovCisgICAgICAgIGlmIChjYXB0dXJlX2lkIDw9IDY1NTM1KQorICAgICAgICAgIGNhcHR1cmVfaWQgPSBjYXB0dXJlX2lkICogMTAgKyAoKnN0cmluZyAtICcwJyk7CisKKyAgICAgICAgc3RyaW5nKys7CisgICAgICAgIGxlbmd0aC0tOworICAgICAgICB9CisgICAgICB3aGlsZSAobGVuZ3RoID4gMCAmJiAqc3RyaW5nID49ICcwJyAmJiAqc3RyaW5nIDw9ICc5Jyk7CisKKyAgICAgIC8qIFRvIG5lZ2F0ZSB0aGUgZWZmZWN0IG9mIHN0cmluZysrIGJlbG93LiAqLworICAgICAgc3RyaW5nLS07CisgICAgICBsZW5ndGgrKzsKKyAgICAgIH0KKyAgICBlbHNlIGlmICgqc3RyaW5nID09ICd7JykKKyAgICAgIHsKKyAgICAgIC8qIE11c3QgYmUgYSBkZWNpbWFsIG51bWJlciBpbiBwYXJlbnRoZXNpcywgZS5nOiAoNSkgb3IgKDM4KSAqLworICAgICAgc3RyaW5nKys7CisgICAgICBsZW5ndGgtLTsKKworICAgICAgLyogU3ludGF4IGVycm9yOiBhIGRlY2ltYWwgbnVtYmVyIHJlcXVpcmVkLiAqLworICAgICAgaWYgKGxlbmd0aCA9PSAwKSByZXR1cm4gMDsKKyAgICAgIGlmICgqc3RyaW5nIDwgJzEnIHx8ICpzdHJpbmcgPiAnOScpIHJldHVybiAwOworCisgICAgICBkbworICAgICAgICB7CisgICAgICAgIC8qIE1heGltdW0gY2FwdHVyZSBpZCBpcyA2NTUzNS4gKi8KKyAgICAgICAgaWYgKGNhcHR1cmVfaWQgPD0gNjU1MzUpCisgICAgICAgICAgY2FwdHVyZV9pZCA9IGNhcHR1cmVfaWQgKiAxMCArICgqc3RyaW5nIC0gJzAnKTsKKworICAgICAgICBzdHJpbmcrKzsKKyAgICAgICAgbGVuZ3RoLS07CisKKyAgICAgICAgLyogU3ludGF4IGVycm9yOiBubyBtb3JlIGNoYXJhY3RlcnMgKi8KKyAgICAgICAgaWYgKGxlbmd0aCA9PSAwKSByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgd2hpbGUgKCpzdHJpbmcgPj0gJzAnICYmICpzdHJpbmcgPD0gJzknKTsKKworICAgICAgLyogU3ludGF4IGVycm9yOiBjbG9zZSBwYXJlbiBpcyBtaXNzaW5nLiAqLworICAgICAgaWYgKCpzdHJpbmcgIT0gJ30nKSByZXR1cm4gMDsKKyAgICAgIH0KKworICAgIGlmIChjYXB0dXJlX2lkID4gMCkKKyAgICAgIHsKKyAgICAgIGlmIChjYXB0dXJlX2lkIDwgY2FwdHVyZV90b3ApCisgICAgICAgIHsKKyAgICAgICAgY2FwdHVyZV9pZCAqPSAyOworICAgICAgICBhcmdzbGVuICs9IG92ZWN0b3JbY2FwdHVyZV9pZCArIDFdIC0gb3ZlY3RvcltjYXB0dXJlX2lkXTsKKyAgICAgICAgfQorCisgICAgICAvKiBUbyBuZWdhdGUgdGhlIGVmZmVjdCBvZiBhcmdzbGVuKysgYmVsb3cuICovCisgICAgICBhcmdzbGVuLS07CisgICAgICB9CisgICAgfQorCisgIHN0cmluZysrOworICBsZW5ndGgtLTsKKyAgYXJnc2xlbisrOworICB9CisKK2FyZ3MgPSAoY2hhciopbWFsbG9jKGFyZ3NsZW4pOworaWYgKGFyZ3MgPT0gTlVMTCkgcmV0dXJuIDA7CisKK2FyZ3N2ZWN0b3IgPSAoY2hhcioqKW1hbGxvYyhhcmdzdmVjdG9ybGVuICogc2l6ZW9mKGNoYXIqKSk7CitpZiAoYXJnc3ZlY3RvciA9PSBOVUxMKQorICB7CisgIGZyZWUoYXJncyk7CisgIHJldHVybiAwOworICB9CisKK2FyZ3NwdHIgPSBhcmdzOworYXJnc3ZlY3RvcnB0ciA9IGFyZ3N2ZWN0b3I7CisKKyphcmdzdmVjdG9ycHRyKysgPSBhcmdzcHRyOworCitsZW5ndGggPSBjYWxsb3V0cHRyLT5jYWxsb3V0X3N0cmluZ19sZW5ndGg7CitzdHJpbmcgPSBjYWxsb3V0cHRyLT5jYWxsb3V0X3N0cmluZzsKKword2hpbGUgKGxlbmd0aCA+IDApCisgIHsKKyAgaWYgKCpzdHJpbmcgPT0gJ3wnKQorICAgIHsKKyAgICAqYXJnc3B0cisrID0gJ1wwJzsKKyAgICAqYXJnc3ZlY3RvcnB0cisrID0gYXJnc3B0cjsKKyAgICB9CisgIGVsc2UgaWYgKCpzdHJpbmcgPT0gJyQnKQorICAgIHsKKyAgICBzdHJpbmcrKzsKKyAgICBsZW5ndGgtLTsKKworICAgIGlmICgoKnN0cmluZyA+PSAnMScgJiYgKnN0cmluZyA8PSAnOScpIHx8ICpzdHJpbmcgPT0gJ3snKQorICAgICAgeworICAgICAgUENSRTJfU0laRSBjYXB0dXJlX2lkID0gMDsKKworICAgICAgaWYgKCpzdHJpbmcgIT0gJ3snKQorICAgICAgICB7CisgICAgICAgIGRvCisgICAgICAgICAgeworICAgICAgICAgIC8qIE1heGltdW0gY2FwdHVyZSBpZCBpcyA2NTUzNS4gKi8KKyAgICAgICAgICBpZiAoY2FwdHVyZV9pZCA8PSA2NTUzNSkKKyAgICAgICAgICAgIGNhcHR1cmVfaWQgPSBjYXB0dXJlX2lkICogMTAgKyAoKnN0cmluZyAtICcwJyk7CisKKyAgICAgICAgICBzdHJpbmcrKzsKKyAgICAgICAgICBsZW5ndGgtLTsKKyAgICAgICAgICB9CisgICAgICAgIHdoaWxlIChsZW5ndGggPiAwICYmICpzdHJpbmcgPj0gJzAnICYmICpzdHJpbmcgPD0gJzknKTsKKworICAgICAgICAvKiBUbyBuZWdhdGUgdGhlIGVmZmVjdCBvZiBzdHJpbmcrKyBiZWxvdy4gKi8KKyAgICAgICAgc3RyaW5nLS07CisgICAgICAgIGxlbmd0aCsrOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgc3RyaW5nKys7CisgICAgICAgIGxlbmd0aC0tOworCisgICAgICAgIGRvCisgICAgICAgICAgeworICAgICAgICAgIC8qIE1heGltdW0gY2FwdHVyZSBpZCBpcyA2NTUzNS4gKi8KKyAgICAgICAgICBpZiAoY2FwdHVyZV9pZCA8PSA2NTUzNSkKKyAgICAgICAgICAgIGNhcHR1cmVfaWQgPSBjYXB0dXJlX2lkICogMTAgKyAoKnN0cmluZyAtICcwJyk7CisKKyAgICAgICAgICBzdHJpbmcrKzsKKyAgICAgICAgICBsZW5ndGgtLTsKKyAgICAgICAgICB9CisgICAgICAgIHdoaWxlICgqc3RyaW5nICE9ICd9Jyk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY2FwdHVyZV9pZCA8IGNhcHR1cmVfdG9wKQorICAgICAgICAgIHsKKyAgICAgICAgICBQQ1JFMl9TSVpFIGNhcHR1cmVzaXplOworICAgICAgICAgIGNhcHR1cmVfaWQgKj0gMjsKKworICAgICAgICAgIGNhcHR1cmVzaXplID0gb3ZlY3RvcltjYXB0dXJlX2lkICsgMV0gLSBvdmVjdG9yW2NhcHR1cmVfaWRdOworICAgICAgICAgIG1lbWNweShhcmdzcHRyLCBzdWJqZWN0ICsgb3ZlY3RvcltjYXB0dXJlX2lkXSwgY2FwdHVyZXNpemUpOworICAgICAgICAgIGFyZ3NwdHIgKz0gY2FwdHVyZXNpemU7CisgICAgICAgICAgfQorICAgICAgfQorICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICphcmdzcHRyKysgPSAqc3RyaW5nOworICAgICAgfQorICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAqYXJnc3B0cisrID0gKnN0cmluZzsKKyAgICB9CisKKyAgc3RyaW5nKys7CisgIGxlbmd0aC0tOworICB9CisKKyphcmdzcHRyKysgPSAnXDAnOworKmFyZ3N2ZWN0b3JwdHIgPSBOVUxMOworCitwaWQgPSBmb3JrKCk7CisKK2lmIChwaWQgPT0gMCkKKyAgeworICAodm9pZClleGVjdihhcmdzdmVjdG9yWzBdLCBhcmdzdmVjdG9yKTsKKyAgLyogQ29udHJvbCBnZXRzIGhlcmUgaWYgdGhlcmUgaXMgYW4gZXJyb3IsIGUuZy4gYSBub24tZXhpc3RlbnQgcHJvZ3JhbSAqLworICBleGl0KDEpOworICB9CitlbHNlIGlmIChwaWQgPiAwKQorICAodm9pZCl3YWl0cGlkKHBpZCwgJnJlc3VsdCwgMCk7CisKK2ZyZWUoYXJncyk7CitmcmVlKGFyZ3N2ZWN0b3IpOworCisvKiBDdXJyZW50bHkgbmVnYXRpdmUgcmV0dXJuIHZhbHVlcyBhcmUgbm90IHN1cHBvcnRlZCwgb25seSB6ZXJvIChtYXRjaAorY29udGludWVzKSBvciBub24temVybyAobWF0Y2ggZmFpbHMpLiAqLworCityZXR1cm4gcmVzdWx0ICE9IDA7Cit9CisKKyNlbmRpZgorCisKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogICAgICAgICAgICBHcmVwIGFuIGluZGl2aWR1YWwgZmlsZSAgICAgICAgICAgICAqCkBAIC0xNTkxLDcgKzE4ODYsNyBAQAogICBzaXplX3Qgc3RhcnRvZmZzZXQgPSAwOwogCiAgIC8qIEF0IHRoaXMgcG9pbnQsIHB0ciBpcyBhdCB0aGUgc3RhcnQgb2YgYSBsaW5lLiBXZSBuZWVkIHRvIGZpbmQgdGhlIGxlbmd0aAotICBvZiB0aGUgc3ViamVjdCBzdHJpbmcgdG8gcGFzcyB0byBwY3JlX2V4ZWMoKS4gSW4gbXVsdGlsaW5lIG1vZGUsIGl0IGlzIHRoZQorICBvZiB0aGUgc3ViamVjdCBzdHJpbmcgdG8gcGFzcyB0byBwY3JlMl9tYXRjaCgpLiBJbiBtdWx0aWxpbmUgbW9kZSwgaXQgaXMgdGhlCiAgIGxlbmd0aCByZW1haW5kZXIgb2YgdGhlIGRhdGEgaW4gdGhlIGJ1ZmZlci4gT3RoZXJ3aXNlLCBpdCBpcyB0aGUgbGVuZ3RoIG9mCiAgIHRoZSBuZXh0IGxpbmUsIGV4Y2x1ZGluZyB0aGUgdGVybWluYXRpbmcgbmV3bGluZS4gQWZ0ZXIgbWF0Y2hpbmcsIHdlIGFsd2F5cwogICBhZHZhbmNlIGJ5IHRoZSBsZW5ndGggb2YgdGhlIG5leHQgbGluZS4gSW4gbXVsdGlsaW5lIG1vZGUgdGhlIFBDUkUyX0ZJUlNUTElORQpAQCAtMTYwOSwxMCArMTkwNCwxMiBAQAogICBpZiAoZW5kbGluZWxlbmd0aCA9PSAwICYmIHQgPT0gbWFpbl9idWZmZXIgKyBidWZzaXplKQogICAgIHsKICAgICBmcHJpbnRmKHN0ZGVyciwgInBjcmUyZ3JlcDogbGluZSAlZCVzJXMgaXMgdG9vIGxvbmcgZm9yIHRoZSBpbnRlcm5hbCBidWZmZXJcbiIKLSAgICAgICAgICAgICAgICAgICAgInBjcmUyZ3JlcDogY2hlY2sgdGhlIC0tYnVmZmVyLXNpemUgb3B0aW9uXG4iLAorICAgICAgICAgICAgICAgICAgICAicGNyZTJncmVwOiB0aGUgYnVmZmVyIHNpemUgaXMgJWRcbiIKKyAgICAgICAgICAgICAgICAgICAgInBjcmUyZ3JlcDogdXNlIHRoZSAtLWJ1ZmZlci1zaXplIG9wdGlvbiB0byBjaGFuZ2UgaXRcbiIsCiAgICAgICAgICAgICAgICAgICAgIGxpbmVudW1iZXIsCiAgICAgICAgICAgICAgICAgICAgIChmaWxlbmFtZSA9PSBOVUxMKT8gIiIgOiAiIG9mIGZpbGUgIiwKLSAgICAgICAgICAgICAgICAgICAgKGZpbGVuYW1lID09IE5VTEwpPyAiIiA6IGZpbGVuYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgKGZpbGVuYW1lID09IE5VTEwpPyAiIiA6IGZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICBidWZ0aGlyZCk7CiAgICAgcmV0dXJuIDI7CiAgICAgfQogCkBAIC0xNzA1LDcgKzIwMDIsNyBAQAogCiAgICAgZWxzZSBpZiAoYmluYXJ5KQogICAgICAgewotICAgICAgZnByaW50ZihzdGRvdXQsICJCaW5hcnkgZmlsZSAlcyBtYXRjaGVzXG4iLCBmaWxlbmFtZSk7CisgICAgICBmcHJpbnRmKHN0ZG91dCwgIkJpbmFyeSBmaWxlICVzIG1hdGNoZXMiIFNURE9VVF9OTCwgZmlsZW5hbWUpOwogICAgICAgcmV0dXJuIDA7CiAgICAgICB9CiAKQEAgLTE3MTQsNyArMjAxMSw3IEBACiAKICAgICBlbHNlIGlmIChmaWxlbmFtZXMgPT0gRk5fTUFUQ0hfT05MWSkKICAgICAgIHsKLSAgICAgIGZwcmludGYoc3Rkb3V0LCAiJXNcbiIsIHByaW50bmFtZSk7CisgICAgICBmcHJpbnRmKHN0ZG91dCwgIiVzIiBTVERPVVRfTkwsIHByaW50bmFtZSk7CiAgICAgICByZXR1cm4gMDsKICAgICAgIH0KIApAQCAtMTczOSwxMyArMjAzNiwxMyBAQAogICAgICAgICAvKiBIYW5kbGUgLS1saW5lLW9mZnNldHMgKi8KIAogICAgICAgICBpZiAobGluZV9vZmZzZXRzKQotICAgICAgICAgIGZwcmludGYoc3Rkb3V0LCAiJWQsJWRcbiIsIChpbnQpKG1hdGNocHRyICsgb2Zmc2V0c1swXSAtIHB0ciksCisgICAgICAgICAgZnByaW50ZihzdGRvdXQsICIlZCwlZCIgU1RET1VUX05MLCAoaW50KShtYXRjaHB0ciArIG9mZnNldHNbMF0gLSBwdHIpLAogICAgICAgICAgICAgKGludCkob2Zmc2V0c1sxXSAtIG9mZnNldHNbMF0pKTsKIAogICAgICAgICAvKiBIYW5kbGUgLS1maWxlLW9mZnNldHMgKi8KIAogICAgICAgICBlbHNlIGlmIChmaWxlX29mZnNldHMpCi0gICAgICAgICAgZnByaW50ZihzdGRvdXQsICIlZCwlZFxuIiwKKyAgICAgICAgICBmcHJpbnRmKHN0ZG91dCwgIiVkLCVkIiBTVERPVVRfTkwsCiAgICAgICAgICAgICAoaW50KShmaWxlcG9zICsgbWF0Y2hwdHIgKyBvZmZzZXRzWzBdIC0gcHRyKSwKICAgICAgICAgICAgIChpbnQpKG9mZnNldHNbMV0gLSBvZmZzZXRzWzBdKSk7CiAKQEAgLTE3NzMsMTcgKzIwNzAsMjYgQEAKICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCi0gICAgICAgICAgaWYgKHByaW50ZWQgfHwgcHJpbnRuYW1lICE9IE5VTEwgfHwgbnVtYmVyKSBmcHJpbnRmKHN0ZG91dCwgIlxuIik7CisgICAgICAgICAgaWYgKHByaW50ZWQgfHwgcHJpbnRuYW1lICE9IE5VTEwgfHwgbnVtYmVyKQorICAgICAgICAgICAgZnByaW50ZihzdGRvdXQsIFNURE9VVF9OTCk7CiAgICAgICAgICAgfQogCi0gICAgICAgIC8qIFByZXBhcmUgdG8gcmVwZWF0IHRvIGZpbmQgdGhlIG5leHQgbWF0Y2guIElmIHRoZSBwYXR0ZXJuIGNvbnRhaW5lZCBhCi0gICAgICAgIGxvb2tiZWhpbmQgdGhhdCBpbmNsdWRlZCBcSywgaXQgaXMgcG9zc2libGUgdGhhdCB0aGUgZW5kIG9mIHRoZSBtYXRjaAotICAgICAgICBtaWdodCBiZSBhdCBvciBiZWZvcmUgdGhlIGFjdHVhbCBzdGFydGluZyBvZmZzZXQgd2UgaGF2ZSBqdXN0IHVzZWQuIEluCi0gICAgICAgIHRoaXMgY2FzZSwgc3RhcnQgb25lIGNoYXJhY3RlciBmdXJ0aGVyIG9uLiAqLworICAgICAgICAvKiBQcmVwYXJlIHRvIHJlcGVhdCB0byBmaW5kIHRoZSBuZXh0IG1hdGNoIGluIHRoZSBsaW5lLiAqLwogCiAgICAgICAgIG1hdGNoID0gRkFMU0U7CiAgICAgICAgIGlmIChsaW5lX2J1ZmZlcmVkKSBmZmx1c2goc3Rkb3V0KTsKICAgICAgICAgcmMgPSAwOyAgICAgICAgICAgICAgICAgICAgICAvKiBIYWQgc29tZSBzdWNjZXNzICovCisKKyAgICAgICAgLyogSWYgdGhlIGN1cnJlbnQgbWF0Y2ggZW5kZWQgcGFzdCB0aGUgZW5kIG9mIHRoZSBsaW5lIChvbmx5IHBvc3NpYmxlCisgICAgICAgIGluIG11bHRpbGluZSBtb2RlKSwgd2UgYXJlIGRvbmUgd2l0aCB0aGlzIGxpbmUuICovCisKKyAgICAgICAgaWYgKG9mZnNldHNbMV0gPiBsaW5lbGVuZ3RoKSBnb3RvIEVORF9PTkVfTUFUQ0g7CisKKyAgICAgICAgLyogSWYgdGhlIHBhdHRlcm4gY29udGFpbmVkIGEgbG9va2JlaGluZCB0aGF0IGluY2x1ZGVkIFxLLCBpdCBpcworICAgICAgICBwb3NzaWJsZSB0aGF0IHRoZSBlbmQgb2YgdGhlIG1hdGNoIG1pZ2h0IGJlIGF0IG9yIGJlZm9yZSB0aGUgYWN0dWFsCisgICAgICAgIHN0YXJ0aW5nIG9mZnNldCB3ZSBoYXZlIGp1c3QgdXNlZC4gSW4gdGhpcyBjYXNlLCBzdGFydCBvbmUgY2hhcmFjdGVyCisgICAgICAgIGZ1cnRoZXIgb24uICovCisKICAgICAgICAgc3RhcnRvZmZzZXQgPSBvZmZzZXRzWzFdOyAgICAvKiBSZXN0YXJ0IGFmdGVyIHRoZSBtYXRjaCAqLwogICAgICAgICBvbGRzdGFydG9mZnNldCA9IHBjcmUyX2dldF9zdGFydGNoYXIobWF0Y2hfZGF0YSk7CiAgICAgICAgIGlmIChzdGFydG9mZnNldCA8PSBvbGRzdGFydG9mZnNldCkKQEAgLTE4MzgsNyArMjE0NCw3IEBACiAKICAgICAgIGlmIChoeXBoZW5wZW5kaW5nKQogICAgICAgICB7Ci0gICAgICAgIGZwcmludGYoc3Rkb3V0LCAiLS1cbiIpOworICAgICAgICBmcHJpbnRmKHN0ZG91dCwgIi0tIiBTVERPVVRfTkwpOwogICAgICAgICBoeXBoZW5wZW5kaW5nID0gRkFMU0U7CiAgICAgICAgIGh5cGhlbnByaW50ZWQgPSBUUlVFOwogICAgICAgICB9CkBAIC0xODU5LDcgKzIxNjUsNyBAQAogICAgICAgICAgIH0KIAogICAgICAgICBpZiAobGFzdG1hdGNobnVtYmVyID4gMCAmJiBwID4gbGFzdG1hdGNocmVzdGFydCAmJiAhaHlwaGVucHJpbnRlZCkKLSAgICAgICAgICBmcHJpbnRmKHN0ZG91dCwgIi0tXG4iKTsKKyAgICAgICAgICBmcHJpbnRmKHN0ZG91dCwgIi0tIiBTVERPVVRfTkwpOwogCiAgICAgICAgIHdoaWxlIChwIDwgcHRyKQogICAgICAgICAgIHsKQEAgLTIwNjMsNyArMjM2OSw3IEBACiAKIGlmIChmaWxlbmFtZXMgPT0gRk5fTk9NQVRDSF9PTkxZKQogICB7Ci0gIGZwcmludGYoc3Rkb3V0LCAiJXNcbiIsIHByaW50bmFtZSk7CisgIGZwcmludGYoc3Rkb3V0LCAiJXMiIFNURE9VVF9OTCwgcHJpbnRuYW1lKTsKICAgcmV0dXJuIDA7CiAgIH0KIApAQCAtMjA3NSw3ICsyMzgxLDcgQEAKICAgICB7CiAgICAgaWYgKHByaW50bmFtZSAhPSBOVUxMICYmIGZpbGVuYW1lcyAhPSBGTl9OT05FKQogICAgICAgZnByaW50ZihzdGRvdXQsICIlczoiLCBwcmludG5hbWUpOwotICAgIGZwcmludGYoc3Rkb3V0LCAiJWRcbiIsIGNvdW50KTsKKyAgICBmcHJpbnRmKHN0ZG91dCwgIiVkIiBTVERPVVRfTkwsIGNvdW50KTsKICAgICB9CiAgIH0KIApAQCAtMjM5Niw3ICsyNzAyLDcgQEAKICAgICB7CiAgICAgdW5zaWduZWQgY2hhciBidWZmZXJbMTI4XTsKICAgICAodm9pZClwY3JlMl9jb25maWcoUENSRTJfQ09ORklHX1ZFUlNJT04sIGJ1ZmZlcik7Ci0gICAgZnByaW50ZihzdGRvdXQsICJwY3JlMmdyZXAgdmVyc2lvbiAlc1xuIiwgYnVmZmVyKTsKKyAgICBmcHJpbnRmKHN0ZG91dCwgInBjcmUyZ3JlcCB2ZXJzaW9uICVzIiBTVERPVVRfTkwsIGJ1ZmZlcik7CiAgICAgfQogICBwY3JlMmdyZXBfZXhpdCgwKTsKICAgYnJlYWs7CkBAIC0yNDg4LDExICsyNzk0LDI2IEBACiAgIH0KIAogc3ByaW50ZigoY2hhciAqKWJ1ZmZlciwgIiVzJS4qcyVzIiwgcHJlZml4W3BvcHRzXSwgcGF0bGVuLCBwcywgc3VmZml4W3BvcHRzXSk7Ci1wLT5jb21waWxlZCA9IHBjcmUyX2NvbXBpbGUoYnVmZmVyLCAtMSwgb3B0aW9ucywgJmVycmNvZGUsICZlcnJvZmZzZXQsCi0gIGNvbXBpbGVfY29udGV4dCk7Ci1pZiAocC0+Y29tcGlsZWQgIT0gTlVMTCkgcmV0dXJuIFRSVUU7CitwLT5jb21waWxlZCA9IHBjcmUyX2NvbXBpbGUoYnVmZmVyLCBQQ1JFMl9aRVJPX1RFUk1JTkFURUQsIG9wdGlvbnMsICZlcnJjb2RlLAorICAmZXJyb2Zmc2V0LCBjb21waWxlX2NvbnRleHQpOwogCi0vKiBIYW5kbGUgY29tcGlsZSBlcnJvcnMgKi8KKy8qIEhhbmRsZSBzdWNjZXNzZnVsIGNvbXBpbGUgKi8KKworaWYgKHAtPmNvbXBpbGVkICE9IE5VTEwpCisgIHsKKyNpZmRlZiBTVVBQT1JUX1BDUkUyR1JFUF9KSVQKKyAgaWYgKHVzZV9qaXQpCisgICAgeworICAgIGVycmNvZGUgPSBwY3JlMl9qaXRfY29tcGlsZShwLT5jb21waWxlZCwgUENSRTJfSklUX0NPTVBMRVRFKTsKKyAgICBpZiAoZXJyY29kZSA9PSAwKSByZXR1cm4gVFJVRTsKKyAgICBlcnJvZmZzZXQgPSBQQ1JFMl9TSVpFX01BWDsgICAgIC8qIFdpbGwgZ2V0IHJlZHVjZWQgdG8gcGF0bGVuIGJlbG93ICovCisgICAgfQorICBlbHNlCisjZW5kaWYKKyAgcmV0dXJuIFRSVUU7CisgIH0KKworLyogSGFuZGxlIGNvbXBpbGUgYW5kIEpJVCBjb21waWxlIGVycm9ycyAqLwogCiBlcnJvZmZzZXQgLT0gKGludClzdHJsZW4ocHJlZml4W3BvcHRzXSk7CiBpZiAoZXJyb2Zmc2V0ID4gcGF0bGVuKSBlcnJvZmZzZXQgPSBwYXRsZW47CkBAIC0yNjIzLDYgKzI5NDQsMTYgQEAKIHBjcmUyX2ppdF9zdGFjayAqaml0X3N0YWNrID0gTlVMTDsKICNlbmRpZgogCisvKiBJbiBXaW5kb3dzLCBzdGRvdXQgaXMgc2V0IHVwIGFzIGEgdGV4dCBzdHJlYW0sIHdoaWNoIG1lYW5zIHRoYXQgXG4gaXMKK2NvbnZlcnRlZCB0byBcclxuLiBUaGlzIGNhdXNlcyBvdXRwdXQgbGluZXMgdGhhdCBhcmUgY29waWVkIGZyb20gdGhlIGlucHV0IHRvCitjaGFuZ2UgZnJvbSAuLi4uXHJcbiB0byAuLi4uXHJcclxuLCB3aGljaCBpcyBub3QgcmlnaHQuIFdlIHRoZXJlZm9yZSBlbnN1cmUKK3RoYXQgc3Rkb3V0IGlzIGEgYmluYXJ5IHN0cmVhbS4gTm90ZSB0aGF0IHRoaXMgbWVhbnMgYWxsIG90aGVyIG91dHB1dCB0byBzdGRvdXQKK211c3QgdXNlIFNURE9VVF9OTCB0byB0ZXJtaW5hdGUgbGluZXMuICovCisKKyNpZiBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChXSU4zMikKK19zZXRtb2RlKCBfZmlsZW5vKHN0ZG91dCksIF9PX0JJTkFSWSk7CisjZW5kaWYKKwogLyogU2V0IHVwIGEgZGVmYXVsdCBjb21waWxlIGFuZCBtYXRjaCBjb250ZXh0cyBhbmQgYSBtYXRjaCBkYXRhIGJsb2NrLiAqLwogCiBjb21waWxlX2NvbnRleHQgPSBwY3JlMl9jb21waWxlX2NvbnRleHRfY3JlYXRlKE5VTEwpOwpAQCAtMjYzMCw2ICsyOTYxLDEzIEBACiBtYXRjaF9kYXRhID0gcGNyZTJfbWF0Y2hfZGF0YV9jcmVhdGUoT0ZGU0VUX1NJWkUsIE5VTEwpOwogb2Zmc2V0cyA9IHBjcmUyX2dldF9vdmVjdG9yX3BvaW50ZXIobWF0Y2hfZGF0YSk7CiAKKy8qIElmIHN0cmluZyAoc2NyaXB0KSBjYWxsb3V0cyBhcmUgc3VwcG9ydGVkLCBzZXQgdXAgdGhlIGNhbGxvdXQgcHJvY2Vzc2luZworZnVuY3Rpb24uICovCisKKyNpZmRlZiBTVVBQT1JUX1BDUkUyR1JFUF9DQUxMT1VUCitwY3JlMl9zZXRfY2FsbG91dChtYXRjaF9jb250ZXh0LCBwY3JlMmdyZXBfY2FsbG91dCwgTlVMTCk7CisjZW5kaWYKKwogLyogUHJvY2VzcyB0aGUgb3B0aW9ucyAqLwogCiBmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKQpkaWZmIC0tZ2l0IGEvZGlzdDIvc3JjL3BjcmUycG9zaXguYyBiL2Rpc3QyL3NyYy9wY3JlMnBvc2l4LmMKaW5kZXggMWQ2ZTViNy4uZTdjZjljMiAxMDA2NDQKLS0tIGEvZGlzdDIvc3JjL3BjcmUycG9zaXguYworKysgYi9kaXN0Mi9zcmMvcGNyZTJwb3NpeC5jCkBAIC01OCwxNiArNTgsNDkgQEAKICMgIGRlZmluZSBQQ1JFMlBPU0lYX0VYUF9ERUZOIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQogI2VuZGlmCiAKLS8qIFdlIGluY2x1ZGUgcGNyZTIuaCBiZWZvcmUgcGNyZTJfaW50ZXJuYWwuaCBzbyB0aGF0IHRoZSBQQ1JFMiBsaWJyYXJ5Ci1mdW5jdGlvbnMgYXJlIGRlY2xhcmVkIGFzICJpbXBvcnQiIGZvciBXaW5kb3dzIGJ5IGRlZmluaW5nIFBDUkUyX0VYUF9ERUNMIGFzCi0iaW1wb3J0Ii4gVGhpcyBpcyBuZWVkZWQgZXZlbiB0aG91Z2ggcGNyZTJfaW50ZXJuYWwuaCBpdHNlbGYgaW5jbHVkZXMgcGNyZTIuaCwKLWJlY2F1c2UgaXQgZG9lcyBzbyBhZnRlciBpdCBoYXMgc2V0IFBDUkUyX0VYUF9ERUNMIHRvICJleHBvcnQiIGlmIGl0IGlzIG5vdAotYWxyZWFkeSBzZXQuICovCisvKiBPbGRlciB2ZXJzaW9ucyBvZiBNU1ZDIGxhY2sgc25wcmludGYoKS4gVGhpcyBkZWZpbmUgYWxsb3dzIGZvcgord2FybmluZy9lcnJvci1mcmVlIGNvbXBpbGF0aW9uIGFuZCB0ZXN0aW5nIHdpdGggTVNWQyBjb21waWxlcnMgYmFjayB0byBhdCBsZWFzdAorTVNWQyAxMC8yMDEwLiBFeGNlcHQgZm9yIFZDNiAod2hpY2ggaXMgbWlzc2luZyBzb21lIGZ1bmRhbWVudGFscyBhbmQgZmFpbHMpLiAqLworCisjaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgKF9NU0NfVkVSIDwgMTkwMCkKKyNkZWZpbmUgc25wcmludGYgX3NucHJpbnRmCisjZW5kaWYKKworCisvKiBDb21waWxlLXRpbWUgZXJyb3IgbnVtYmVycyBzdGFydCBhdCB0aGlzIHZhbHVlLiBJdCBzaG91bGQgcHJvYmFibHkgbmV2ZXIgYmUKK2NoYW5nZWQuIFRoaXMgI2RlZmluZSBpcyBhIGNvcHkgb2YgdGhlIG9uZSBpbiBwY3JlMl9pbnRlcm5hbC5oLiAqLworCisjZGVmaW5lIENPTVBJTEVfRVJST1JfQkFTRSAxMDAKKworCisvKiBTdGFuZGFyZCBDIGhlYWRlcnMgKi8KKworI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworLyogUENSRTIgaGVhZGVycyAqLwogCiAjaW5jbHVkZSAicGNyZTIuaCIKLSNpbmNsdWRlICJwY3JlMl9pbnRlcm5hbC5oIgogI2luY2x1ZGUgInBjcmUycG9zaXguaCIKIAorLyogV2hlbiBjb21waWxpbmcgd2l0aCB0aGUgTVNWQyBjb21waWxlciwgaXQgaXMgc29tZXRpbWVzIG5lY2Vzc2FyeSB0byBpbmNsdWRlCithICJjYWxsaW5nIGNvbnZlbnRpb24iIGJlZm9yZSBleHBvcnRlZCBmdW5jdGlvbiBuYW1lcy4gKFRoaXMgaXMgc2Vjb25kaGFuZAoraW5mb3JtYXRpb247IEkga25vdyBub3RoaW5nIGFib3V0IE1TVkMgbXlzZWxmKS4gRm9yIGV4YW1wbGUsIHNvbWV0aGluZyBsaWtlCisKKyAgdm9pZCBfX2NkZWNsIGZ1bmN0aW9uKC4uLi4pCisKK21pZ2h0IGJlIG5lZWRlZC4gSW4gb3JkZXIgc28gbWFrZSB0aGlzIGVhc3ksIGFsbCB0aGUgZXhwb3J0ZWQgZnVuY3Rpb25zIGhhdmUKK1BDUkUyX0NBTExfQ09OVkVOVElPTiBqdXN0IGJlZm9yZSB0aGVpciBuYW1lcy4gSXQgaXMgcmFyZWx5IG5lZWRlZDsgaWYgbm90CitzZXQsIHdlIGVuc3VyZSBoZXJlIHRoYXQgaXQgaGFzIG5vIGVmZmVjdC4gKi8KKworI2lmbmRlZiBQQ1JFMl9DQUxMX0NPTlZFTlRJT04KKyNkZWZpbmUgUENSRTJfQ0FMTF9DT05WRU5USU9OCisjZW5kaWYKKwogLyogVGFibGUgdG8gdHJhbnNsYXRlIFBDUkUyIGNvbXBpbGUgdGltZSBlcnJvciBjb2RlcyBpbnRvIFBPU0lYIGVycm9yIGNvZGVzLgogT25seSBhIGZldyBQQ1JFMiBlcnJvcnMgd2l0aCBhIHZhbHVlIGdyZWF0ZXIgdGhhbiAyMyB0dXJuIGludG8gc3BlY2lhbCBQT1NJWAogY29kZXM6IG1vc3QgZ28gdG8gUkVHX0JBRFBBVC4gVGhlIHNlY29uZCB0YWJsZSBsaXN0cywgaW4gcGFpcnMsIHRob3NlIHRoYXQKQEAgLTIwNSwxMSArMjM4LDExIEBACiBpZiAoKGNmbGFncyAmIFJFR19JQ0FTRSkgIT0gMCkgICAgb3B0aW9ucyB8PSBQQ1JFMl9DQVNFTEVTUzsKIGlmICgoY2ZsYWdzICYgUkVHX05FV0xJTkUpICE9IDApICBvcHRpb25zIHw9IFBDUkUyX01VTFRJTElORTsKIGlmICgoY2ZsYWdzICYgUkVHX0RPVEFMTCkgIT0gMCkgICBvcHRpb25zIHw9IFBDUkUyX0RPVEFMTDsKLWlmICgoY2ZsYWdzICYgUkVHX05PU1VCKSAhPSAwKSAgICBvcHRpb25zIHw9IFBDUkUyX05PX0FVVE9fQ0FQVFVSRTsKIGlmICgoY2ZsYWdzICYgUkVHX1VURikgIT0gMCkgICAgICBvcHRpb25zIHw9IFBDUkUyX1VURjsKIGlmICgoY2ZsYWdzICYgUkVHX1VDUCkgIT0gMCkgICAgICBvcHRpb25zIHw9IFBDUkUyX1VDUDsKIGlmICgoY2ZsYWdzICYgUkVHX1VOR1JFRURZKSAhPSAwKSBvcHRpb25zIHw9IFBDUkUyX1VOR1JFRURZOwogCitwcmVnLT5yZV9jZmxhZ3MgPSBjZmxhZ3M7CiBwcmVnLT5yZV9wY3JlMl9jb2RlID0gcGNyZTJfY29tcGlsZSgoUENSRTJfU1BUUilwYXR0ZXJuLCBQQ1JFMl9aRVJPX1RFUk1JTkFURUQsCiAgICBvcHRpb25zLCAmZXJyb3Jjb2RlLCAmZXJyb2Zmc2V0LCBOVUxMKTsKIHByZWctPnJlX2Vycm9mZnNldCA9IGVycm9mZnNldDsKQEAgLTIzNCw3ICsyNjcsNiBAQAogKHZvaWQpcGNyZTJfcGF0dGVybl9pbmZvKChjb25zdCBwY3JlMl9jb2RlICopcHJlZy0+cmVfcGNyZTJfY29kZSwKICAgUENSRTJfSU5GT19DQVBUVVJFQ09VTlQsICZyZV9uc3ViKTsKIHByZWctPnJlX25zdWIgPSAoc2l6ZV90KXJlX25zdWI7Ci1pZiAoKG9wdGlvbnMgJiBQQ1JFMl9OT19BVVRPX0NBUFRVUkUpICE9IDApIHJlX25zdWIgPSAtMTsKIHByZWctPnJlX21hdGNoX2RhdGEgPSBwY3JlMl9tYXRjaF9kYXRhX2NyZWF0ZShyZV9uc3ViICsgMSwgTlVMTCk7CiAKIGlmIChwcmVnLT5yZV9tYXRjaF9kYXRhID09IE5VTEwpCkBAIC0yNzIsMTEgKzMwNCwxMSBAQAogCiAoKHJlZ2V4X3QgKilwcmVnKS0+cmVfZXJyb2Zmc2V0ID0gKHNpemVfdCkoLTEpOyAgLyogT25seSBoYXMgbWVhbmluZyBhZnRlciBjb21waWxlICovCiAKLS8qIFdoZW4gbm8gc3RyaW5nIGRhdGEgaXMgYmVpbmcgcmV0dXJuZWQsIG9yIG5vIHZlY3RvciBoYXMgYmVlbiBwYXNzZWQgaW4gd2hpY2gKLXRvIHB1dCBpdCwgZW5zdXJlIHRoYXQgbm1hdGNoIGlzIHplcm8uICovCisvKiBXaGVuIFJFR19OT1NVQiB3YXMgc3BlY2lmaWVkLCBvciBpZiBubyB2ZWN0b3IgaGFzIGJlZW4gcGFzc2VkIGluIHdoaWNoIHRvCitwdXQgY2FwdHVyZWQgc3RyaW5ncywgZW5zdXJlIHRoYXQgbm1hdGNoIGlzIHplcm8uIFRoaXMgd2lsbCBzdG9wIGFueSBhdHRlbXB0IHRvCit3cml0ZSB0byBwbWF0Y2guICovCiAKLWlmICgoKChwY3JlMl9yZWFsX2NvZGUgKikocHJlZy0+cmVfcGNyZTJfY29kZSkpLT5jb21waWxlX29wdGlvbnMgJgotICBQQ1JFMl9OT19BVVRPX0NBUFRVUkUpICE9IDAgfHwgcG1hdGNoID09IE5VTEwpIG5tYXRjaCA9IDA7CitpZiAoKHByZWctPnJlX2NmbGFncyAmIFJFR19OT1NVQikgIT0gMCB8fCBwbWF0Y2ggPT0gTlVMTCkgbm1hdGNoID0gMDsKIAogLyogUkVHX1NUQVJURU5EIGlzIGEgQlNEIGV4dGVuc2lvbiwgdG8gYWxsb3cgZm9yIG5vbi1OVUwtdGVybWluYXRlZCBzdHJpbmdzLgogVGhlIG1hbiBwYWdlIGZyb20gT1MgWCBzYXlzICJSRUdfU1RBUlRFTkQgYWZmZWN0cyBvbmx5IHRoZSBsb2NhdGlvbiBvZiB0aGUKQEAgLTMwMywxMSArMzM1LDEyIEBACiBpZiAocmMgPj0gMCkKICAgewogICBzaXplX3QgaTsKKyAgUENSRTJfU0laRSAqb3ZlY3RvciA9IHBjcmUyX2dldF9vdmVjdG9yX3BvaW50ZXIobWQpOwogICBpZiAoKHNpemVfdClyYyA+IG5tYXRjaCkgcmMgPSAoaW50KW5tYXRjaDsKICAgZm9yIChpID0gMDsgaSA8IChzaXplX3QpcmM7IGkrKykKICAgICB7Ci0gICAgcG1hdGNoW2ldLnJtX3NvID0gbWQtPm92ZWN0b3JbaSoyXTsKLSAgICBwbWF0Y2hbaV0ucm1fZW8gPSBtZC0+b3ZlY3RvcltpKjIrMV07CisgICAgcG1hdGNoW2ldLnJtX3NvID0gb3ZlY3RvcltpKjJdOworICAgIHBtYXRjaFtpXS5ybV9lbyA9IG92ZWN0b3JbaSoyKzFdOwogICAgIH0KICAgZm9yICg7IGkgPCBubWF0Y2g7IGkrKykgcG1hdGNoW2ldLnJtX3NvID0gcG1hdGNoW2ldLnJtX2VvID0gLTE7CiAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZGlzdDIvc3JjL3BjcmUycG9zaXguaCBiL2Rpc3QyL3NyYy9wY3JlMnBvc2l4LmgKaW5kZXggNDRhMmZkOC4uNWYyOTA2YSAxMDA2NDQKLS0tIGEvZGlzdDIvc3JjL3BjcmUycG9zaXguaAorKysgYi9kaXN0Mi9zcmMvcGNyZTJwb3NpeC5oCkBAIC05OCw2ICs5OCw3IEBACiAgIHZvaWQgKnJlX21hdGNoX2RhdGE7CiAgIHNpemVfdCByZV9uc3ViOwogICBzaXplX3QgcmVfZXJyb2Zmc2V0OworICBpbnQgcmVfY2ZsYWdzOwogfSByZWdleF90OwogCiAvKiBUaGUgc3RydWN0dXJlIGluIHdoaWNoIGEgY2FwdHVyZWQgb2Zmc2V0IGlzIHJldHVybmVkLiAqLwpkaWZmIC0tZ2l0IGEvZGlzdDIvc3JjL3BjcmUydGVzdC5jIGIvZGlzdDIvc3JjL3BjcmUydGVzdC5jCmluZGV4IDBhNTg3OWUuLmE4ZGZmYTMgMTAwNjQ0Ci0tLSBhL2Rpc3QyL3NyYy9wY3JlMnRlc3QuYworKysgYi9kaXN0Mi9zcmMvcGNyZTJ0ZXN0LmMKQEAgLTM1Myw3ICszNTMsNyBAQAogfSBjbWRzdHJ1Y3Q7CiAKIGVudW0geyBDTURfRk9SQklEX1VURiwgQ01EX0xPQUQsIENNRF9ORVdMSU5FX0RFRkFVTFQsIENNRF9QQVRURVJOLAotICBDTURfUEVSTFRFU1QsIENNRF9QT1AsIENNRF9TQVZFLCBDTURfU1VCSkVDVCwgQ01EX1VOS05PV04gfTsKKyAgQ01EX1BFUkxURVNULCBDTURfUE9QLCBDTURfUE9QQ09QWSwgQ01EX1NBVkUsIENNRF9TVUJKRUNULCBDTURfVU5LTk9XTiB9OwogCiBzdGF0aWMgY21kc3RydWN0IGNtZGxpc3RbXSA9IHsKICAgeyAiZm9yYmlkX3V0ZiIsICAgICAgQ01EX0ZPUkJJRF9VVEYgfSwKQEAgLTM2Miw2ICszNjIsNyBAQAogICB7ICJwYXR0ZXJuIiwgICAgICAgICBDTURfUEFUVEVSTiB9LAogICB7ICJwZXJsdGVzdCIsICAgICAgICBDTURfUEVSTFRFU1QgfSwKICAgeyAicG9wIiwgICAgICAgICAgICAgQ01EX1BPUCB9LAorICB7ICJwb3Bjb3B5IiwgICAgICAgICBDTURfUE9QQ09QWSB9LAogICB7ICJzYXZlIiwgICAgICAgICAgICBDTURfU0FWRSB9LAogICB7ICJzdWJqZWN0IiwgICAgICAgICBDTURfU1VCSkVDVCB9fTsKIApAQCAtNDI1LDExICs0MjYsMTEgQEAKICNkZWZpbmUgQ1RMX01FTU9SWSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMHUKICNkZWZpbmUgQ1RMX05VTExDT05URVhUICAgICAgICAgICAgICAgICAgMHgwMDIwMDAwMHUKICNkZWZpbmUgQ1RMX1BPU0lYICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMHUKLSNkZWZpbmUgQ1RMX1BVU0ggICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwMDAwMHUKLSNkZWZpbmUgQ1RMX1NUQVJUQ0hBUiAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMHUKLSNkZWZpbmUgQ1RMX1pFUk9fVEVSTUlOQVRFICAgICAgICAgICAgICAgMHgwMjAwMDAwMHUKLS8qIFNwYXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMHUgICovCi0vKiBTcGFyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDB1ICAqLworI2RlZmluZSBDVExfUE9TSVhfTk9TVUIgICAgICAgICAgICAgICAgICAweDAwODAwMDAwdQorI2RlZmluZSBDVExfUFVTSCAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwdQorI2RlZmluZSBDVExfUFVTSENPUFkgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwdQorI2RlZmluZSBDVExfU1RBUlRDSEFSICAgICAgICAgICAgICAgICAgICAweDA0MDAwMDAwdQorI2RlZmluZSBDVExfWkVST19URVJNSU5BVEUgICAgICAgICAgICAgICAweDA4MDAwMDAwdQogLyogU3BhcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAwMDAwdSAgKi8KIC8qIFNwYXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMHUgICovCiAjZGVmaW5lIENUTF9OTF9TRVQgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDB1ICAvKiBJbmZvcm1hdGlvbmFsICovCkBAIC01ODUsNiArNTg2LDcgQEAKICAgeyAibm9fYXV0b19jYXB0dXJlIiwgICAgICAgICAgICBNT0RfUEFULCAgTU9EX09QVCwgUENSRTJfTk9fQVVUT19DQVBUVVJFLCAgICAgIFBPKG9wdGlvbnMpIH0sCiAgIHsgIm5vX2F1dG9fcG9zc2VzcyIsICAgICAgICAgICAgTU9EX1BBVFAsIE1PRF9PUFQsIFBDUkUyX05PX0FVVE9fUE9TU0VTUywgICAgICBQTyhvcHRpb25zKSB9LAogICB7ICJub19kb3RzdGFyX2FuY2hvciIsICAgICAgICAgIE1PRF9QQVQsICBNT0RfT1BULCBQQ1JFMl9OT19ET1RTVEFSX0FOQ0hPUiwgICAgUE8ob3B0aW9ucykgfSwKKyAgeyAibm9faml0IiwgICAgICAgICAgICAgICAgICAgICBNT0RfREFULCAgTU9EX09QVCwgUENSRTJfTk9fSklULCAgICAgICAgICAgICAgIERPKG9wdGlvbnMpIH0sCiAgIHsgIm5vX3N0YXJ0X29wdGltaXplIiwgICAgICAgICAgTU9EX1BBVFAsIE1PRF9PUFQsIFBDUkUyX05PX1NUQVJUX09QVElNSVpFLCAgICBQTyhvcHRpb25zKSB9LAogICB7ICJub191dGZfY2hlY2siLCAgICAgICAgICAgICAgIE1PRF9QRCwgICBNT0RfT1BULCBQQ1JFMl9OT19VVEZfQ0hFQ0ssICAgICAgICAgUEQob3B0aW9ucykgfSwKICAgeyAibm90Ym9sIiwgICAgICAgICAgICAgICAgICAgICBNT0RfREFULCAgTU9EX09QVCwgUENSRTJfTk9UQk9MLCAgICAgICAgICAgICAgIERPKG9wdGlvbnMpIH0sCkBAIC02MDAsOCArNjAyLDEwIEBACiAgIHsgInBhcnRpYWxfc29mdCIsICAgICAgICAgICAgICAgTU9EX0RBVCwgIE1PRF9PUFQsIFBDUkUyX1BBUlRJQUxfU09GVCwgICAgICAgICBETyhvcHRpb25zKSB9LAogICB7ICJwaCIsICAgICAgICAgICAgICAgICAgICAgICAgIE1PRF9EQVQsICBNT0RfT1BULCBQQ1JFMl9QQVJUSUFMX0hBUkQsICAgICAgICAgRE8ob3B0aW9ucykgfSwKICAgeyAicG9zaXgiLCAgICAgICAgICAgICAgICAgICAgICBNT0RfUEFULCAgTU9EX0NUTCwgQ1RMX1BPU0lYLCAgICAgICAgICAgICAgICAgIFBPKGNvbnRyb2wpIH0sCisgIHsgInBvc2l4X25vc3ViIiwgICAgICAgICAgICAgICAgTU9EX1BBVCwgIE1PRF9DVEwsIENUTF9QT1NJWHxDVExfUE9TSVhfTk9TVUIsICBQTyhjb250cm9sKSB9LAogICB7ICJwcyIsICAgICAgICAgICAgICAgICAgICAgICAgIE1PRF9EQVQsICBNT0RfT1BULCBQQ1JFMl9QQVJUSUFMX1NPRlQsICAgICAgICAgRE8ob3B0aW9ucykgfSwKICAgeyAicHVzaCIsICAgICAgICAgICAgICAgICAgICAgICBNT0RfUEFULCAgTU9EX0NUTCwgQ1RMX1BVU0gsICAgICAgICAgICAgICAgICAgIFBPKGNvbnRyb2wpIH0sCisgIHsgInB1c2hjb3B5IiwgICAgICAgICAgICAgICAgICAgTU9EX1BBVCwgIE1PRF9DVEwsIENUTF9QVVNIQ09QWSwgICAgICAgICAgICAgIFBPKGNvbnRyb2wpIH0sCiAgIHsgInJlY3Vyc2lvbl9saW1pdCIsICAgICAgICAgICAgTU9EX0NUTSwgIE1PRF9JTlQsIDAsICAgICAgICAgICAgICAgICAgICAgICAgICBNTyhyZWN1cnNpb25fbGltaXQpIH0sCiAgIHsgInJlZ2Vycm9yX2J1ZmZzaXplIiwgICAgICAgICAgTU9EX1BBVCwgIE1PRF9JTlQsIDAsICAgICAgICAgICAgICAgICAgICAgICAgICBQTyhyZWdlcnJvcl9idWZmc2l6ZSkgfSwKICAgeyAicmVwbGFjZSIsICAgICAgICAgICAgICAgICAgICBNT0RfUE5ELCAgTU9EX1NUUiwgUkVQTEFDRV9NT0RTSVpFLCAgICAgICAgICAgIFBPKHJlcGxhY2VtZW50KSB9LApAQCAtNjI1LDExICs2MjksMTEgQEAKIC8qIENvbnRyb2xzIGFuZCBvcHRpb25zIHRoYXQgYXJlIHN1cHBvcnRlZCBmb3IgdXNlIHdpdGggdGhlIFBPU0lYIGludGVyZmFjZS4gKi8KIAogI2RlZmluZSBQT1NJWF9TVVBQT1JURURfQ09NUElMRV9PUFRJT05TICggXAotICBQQ1JFMl9DQVNFTEVTU3xQQ1JFMl9ET1RBTEx8UENSRTJfTVVMVElMSU5FfFBDUkUyX05PX0FVVE9fQ0FQVFVSRXwgXAotICBQQ1JFMl9VQ1B8UENSRTJfVVRGfFBDUkUyX1VOR1JFRURZKQorICBQQ1JFMl9DQVNFTEVTU3xQQ1JFMl9ET1RBTEx8UENSRTJfTVVMVElMSU5FfFBDUkUyX1VDUHxQQ1JFMl9VVEZ8IFwKKyAgUENSRTJfVU5HUkVFRFkpCiAKICNkZWZpbmUgUE9TSVhfU1VQUE9SVEVEX0NPTVBJTEVfQ09OVFJPTFMgKCBcCi0gIENUTF9BRlRFUlRFWFR8Q1RMX0FMTEFGVEVSVEVYVHxDVExfRVhQQU5EfENUTF9QT1NJWCkKKyAgQ1RMX0FGVEVSVEVYVHxDVExfQUxMQUZURVJURVhUfENUTF9FWFBBTkR8Q1RMX1BPU0lYfENUTF9QT1NJWF9OT1NVQikKIAogI2RlZmluZSBQT1NJWF9TVVBQT1JURURfQ09NUElMRV9DT05UUk9MUzIgKDApCiAKQEAgLTY0Myw3ICs2NDcsNyBAQAogCiAjZGVmaW5lIFBVU0hfU1VQUE9SVEVEX0NPTVBJTEVfQ09OVFJPTFMgKCBcCiAgIENUTF9CSU5DT0RFfENUTF9DQUxMT1VUX0lORk98Q1RMX0ZVTExCSU5DT0RFfENUTF9IRVhQQVR8Q1RMX0lORk98IFwKLSAgQ1RMX0pJVFZFUklGWXxDVExfTUVNT1JZfENUTF9QVVNIfENUTF9CU1JfU0VUfENUTF9OTF9TRVQpCisgIENUTF9KSVRWRVJJRll8Q1RMX01FTU9SWXxDVExfUFVTSHxDVExfUFVTSENPUFl8Q1RMX0JTUl9TRVR8Q1RMX05MX1NFVCkKIAogI2RlZmluZSBQVVNIX1NVUFBPUlRFRF9DT01QSUxFX0NPTlRST0xTMiAoMCkKIApAQCAtNjUyLDE2ICs2NTYsMTkgQEAKICNkZWZpbmUgUFVTSF9DT01QSUxFX09OTFlfQ09OVFJPTFMgICBDVExfSklUVkVSSUZZCiAjZGVmaW5lIFBVU0hfQ09NUElMRV9PTkxZX0NPTlRST0xTMiAgKDApCiAKLS8qIENvbnRyb2xzIHRoYXQgYXJlIGZvcmJpZGRlbiB3aXRoICNwb3AuICovCisvKiBDb250cm9scyB0aGF0IGFyZSBmb3JiaWRkZW4gd2l0aCAjcG9wIG9yICNwb3Bjb3B5LiAqLwogCi0jZGVmaW5lIE5PVFBPUF9DT05UUk9MUyAoQ1RMX0hFWFBBVHxDVExfUE9TSVh8Q1RMX1BVU0gpCisjZGVmaW5lIE5PVFBPUF9DT05UUk9MUyAoQ1RMX0hFWFBBVHxDVExfUE9TSVh8Q1RMX1BPU0lYX05PU1VCfENUTF9QVVNIfCBcCisgIENUTF9QVVNIQ09QWSkKIAogLyogUGF0dGVybiBjb250cm9scyB0aGF0IGFyZSBtdXR1YWxseSBleGNsdXNpdmUuIEF0IHByZXNlbnQgdGhlc2UgYXJlIGFsbCBpbgotdGhlIGZpcnN0IGNvbnRyb2wgd29yZC4gKi8KK3RoZSBmaXJzdCBjb250cm9sIHdvcmQuIE5vdGUgdGhhdCBDVExfUE9TSVhfTk9TVUIgaXMgYWx3YXlzIGFjY29tcGFuaWVkIGJ5CitDVExfUE9TSVgsIHNvIGl0IGRvZXNuJ3QgbmVlZCBpdHMgb3duIGVudHJpZXMuICovCiAKIHN0YXRpYyB1aW50MzJfdCBleGNsdXNpdmVfcGF0X2NvbnRyb2xzW10gPSB7CiAgIENUTF9QT1NJWCAgfCBDVExfSEVYUEFULAogICBDVExfUE9TSVggIHwgQ1RMX1BVU0gsCisgIENUTF9QT1NJWCAgfCBDVExfUFVTSENPUFksCiAgIENUTF9FWFBBTkQgfCBDVExfSEVYUEFUIH07CiAKIC8qIERhdGEgY29udHJvbHMgdGhhdCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiBBdCBwcmVzZW50IHRoZXNlIGFyZSBhbGwgaW4gdGhlCkBAIC04MTEsNyArODE4LDcgQEAKIHN0YXRpYyBpbnQgcGF0c3RhY2tuZXh0ID0gMDsKIAogI2lmZGVmIFNVUFBPUlRfUENSRTJfOAotc3RhdGljIHJlZ2V4X3QgcHJlZyA9IHsgTlVMTCwgTlVMTCwgMCwgMCB9Oworc3RhdGljIHJlZ2V4X3QgcHJlZyA9IHsgTlVMTCwgTlVMTCwgMCwgMCwgMCB9OwogI2VuZGlmCiAKIHN0YXRpYyBpbnQgKmRmYV93b3Jrc3BhY2UgPSBOVUxMOwpAQCAtOTQzLDYgKzk1MCwyMiBAQAogICAgICBhID0gcGNyZTJfY2FsbG91dF9lbnVtZXJhdGVfMzIoY29tcGlsZWRfY29kZTMyLCBcCiAgICAgICAgKGludCAoKikoc3RydWN0IHBjcmUyX2NhbGxvdXRfZW51bWVyYXRlX2Jsb2NrXzMyICosIHZvaWQgKikpYixjKQogCisjZGVmaW5lIFBDUkUyX0NPREVfQ09QWV9GUk9NX1ZPSUQoYSxiKSBcCisgIGlmICh0ZXN0X21vZGUgPT0gUENSRThfTU9ERSkgXAorICAgIEcoYSw4KSA9IHBjcmUyX2NvZGVfY29weV84KGIpOyBcCisgIGVsc2UgaWYgKHRlc3RfbW9kZSA9PSBQQ1JFMTZfTU9ERSkgXAorICAgIEcoYSwxNikgPSBwY3JlMl9jb2RlX2NvcHlfMTYoYik7IFwKKyAgZWxzZSBcCisgICAgRyhhLDMyKSA9IHBjcmUyX2NvZGVfY29weV8zMihiKQorCisjZGVmaW5lIFBDUkUyX0NPREVfQ09QWV9UT19WT0lEKGEsYikgXAorICBpZiAodGVzdF9tb2RlID09IFBDUkU4X01PREUpIFwKKyAgICBhID0gKHZvaWQgKilwY3JlMl9jb2RlX2NvcHlfOChHKGIsOCkpOyBcCisgIGVsc2UgaWYgKHRlc3RfbW9kZSA9PSBQQ1JFMTZfTU9ERSkgXAorICAgIGEgPSAodm9pZCAqKXBjcmUyX2NvZGVfY29weV8xNihHKGIsMTYpKTsgXAorICBlbHNlIFwKKyAgICBhID0gKHZvaWQgKilwY3JlMl9jb2RlX2NvcHlfMzIoRyhiLDMyKSkKKwogI2RlZmluZSBQQ1JFMl9DT01QSUxFKGEsYixjLGQsZSxmLGcpIFwKICAgaWYgKHRlc3RfbW9kZSA9PSBQQ1JFOF9NT0RFKSBcCiAgICAgRyhhLDgpID0gcGNyZTJfY29tcGlsZV84KEcoYiw4KSxjLGQsZSxmLGcpOyBcCkBAIC0xMzk0LDYgKzE0MTcsMTggQEAKICAgICAgYSA9IEcocGNyZTJfY2FsbG91dF9lbnVtZXJhdGUsQklUVFdPKShHKGNvbXBpbGVkX2NvZGUsQklUVFdPKSwgXAogICAgICAgIChpbnQgKCopKHN0cnVjdCBHKHBjcmUyX2NhbGxvdXRfZW51bWVyYXRlX2Jsb2NrXyxCSVRUV08pICosIHZvaWQgKikpYixjKQogCisjZGVmaW5lIFBDUkUyX0NPREVfQ09QWV9GUk9NX1ZPSUQoYSxiKSBcCisgIGlmICh0ZXN0X21vZGUgPT0gRyhHKFBDUkUsQklUT05FKSxfTU9ERSkpIFwKKyAgICBHKGEsQklUT05FKSA9IEcocGNyZTJfY29kZV9jb3B5XyxCSVRPTkUpKGIpOyBcCisgIGVsc2UgXAorICAgIEcoYSxCSVRUV08pID0gRyhwY3JlMl9jb2RlX2NvcHlfLEJJVFRXTykoYikKKworI2RlZmluZSBQQ1JFMl9DT0RFX0NPUFlfVE9fVk9JRChhLGIpIFwKKyAgaWYgKHRlc3RfbW9kZSA9PSBHKEcoUENSRSxCSVRPTkUpLF9NT0RFKSkgXAorICAgIGEgPSAodm9pZCAqKUcocGNyZTJfY29kZV9jb3B5XyxCSVRPTkUpKEcoYixCSVRPTkUpKTsgXAorICBlbHNlIFwKKyAgICBhID0gKHZvaWQgKilHKHBjcmUyX2NvZGVfY29weV8sQklUVFdPKShHKGIsQklUVFdPKSkKKwogI2RlZmluZSBQQ1JFMl9DT01QSUxFKGEsYixjLGQsZSxmLGcpIFwKICAgaWYgKHRlc3RfbW9kZSA9PSBHKEcoUENSRSxCSVRPTkUpLF9NT0RFKSkgXAogICAgIEcoYSxCSVRPTkUpID0gRyhwY3JlMl9jb21waWxlXyxCSVRPTkUpKEcoYixCSVRPTkUpLGMsZCxlLGYsZyk7IFwKQEAgLTE3MjksNiArMTc2NCw4IEBACiAjZGVmaW5lIFBDUkUyX0NBTExPVVRfRU5VTUVSQVRFKGEsYixjKSBcCiAgICBhID0gcGNyZTJfY2FsbG91dF9lbnVtZXJhdGVfOChjb21waWxlZF9jb2RlOCwgXAogICAgICAoaW50ICgqKShzdHJ1Y3QgcGNyZTJfY2FsbG91dF9lbnVtZXJhdGVfYmxvY2tfOCAqLCB2b2lkICopKWIsYykKKyNkZWZpbmUgUENSRTJfQ09ERV9DT1BZX0ZST01fVk9JRChhLGIpIEcoYSw4KSA9IHBjcmUyX2NvZGVfY29weV84KGIpCisjZGVmaW5lIFBDUkUyX0NPREVfQ09QWV9UT19WT0lEKGEsYikgYSA9ICh2b2lkICopcGNyZTJfY29kZV9jb3B5XzgoRyhiLDgpKQogI2RlZmluZSBQQ1JFMl9DT01QSUxFKGEsYixjLGQsZSxmLGcpIFwKICAgRyhhLDgpID0gcGNyZTJfY29tcGlsZV84KEcoYiw4KSxjLGQsZSxmLGcpCiAjZGVmaW5lIFBDUkUyX0RGQV9NQVRDSChhLGIsYyxkLGUsZixnLGgsaSxqKSBcCkBAIC0xODIyLDYgKzE4NTksOCBAQAogI2RlZmluZSBQQ1JFMl9DQUxMT1VUX0VOVU1FUkFURShhLGIsYykgXAogICAgYSA9IHBjcmUyX2NhbGxvdXRfZW51bWVyYXRlXzE2KGNvbXBpbGVkX2NvZGUxNiwgXAogICAgICAoaW50ICgqKShzdHJ1Y3QgcGNyZTJfY2FsbG91dF9lbnVtZXJhdGVfYmxvY2tfMTYgKiwgdm9pZCAqKSliLGMpCisjZGVmaW5lIFBDUkUyX0NPREVfQ09QWV9GUk9NX1ZPSUQoYSxiKSBHKGEsMTYpID0gcGNyZTJfY29kZV9jb3B5XzE2KGIpCisjZGVmaW5lIFBDUkUyX0NPREVfQ09QWV9UT19WT0lEKGEsYikgYSA9ICh2b2lkICopcGNyZTJfY29kZV9jb3B5XzE2KEcoYiwxNikpCiAjZGVmaW5lIFBDUkUyX0NPTVBJTEUoYSxiLGMsZCxlLGYsZykgXAogICBHKGEsMTYpID0gcGNyZTJfY29tcGlsZV8xNihHKGIsMTYpLGMsZCxlLGYsZykKICNkZWZpbmUgUENSRTJfREZBX01BVENIKGEsYixjLGQsZSxmLGcsaCxpLGopIFwKQEAgLTE5MTUsNiArMTk1NCw4IEBACiAjZGVmaW5lIFBDUkUyX0NBTExPVVRfRU5VTUVSQVRFKGEsYixjKSBcCiAgICBhID0gcGNyZTJfY2FsbG91dF9lbnVtZXJhdGVfMzIoY29tcGlsZWRfY29kZTMyLCBcCiAgICAgIChpbnQgKCopKHN0cnVjdCBwY3JlMl9jYWxsb3V0X2VudW1lcmF0ZV9ibG9ja18zMiAqLCB2b2lkICopKWIsYykKKyNkZWZpbmUgUENSRTJfQ09ERV9DT1BZX0ZST01fVk9JRChhLGIpIEcoYSwzMikgPSBwY3JlMl9jb2RlX2NvcHlfMzIoYikKKyNkZWZpbmUgUENSRTJfQ09ERV9DT1BZX1RPX1ZPSUQoYSxiKSBhID0gKHZvaWQgKilwY3JlMl9jb2RlX2NvcHlfMzIoRyhiLDMyKSkKICNkZWZpbmUgUENSRTJfQ09NUElMRShhLGIsYyxkLGUsZixnKSBcCiAgIEcoYSwzMikgPSBwY3JlMl9jb21waWxlXzMyKEcoYiwzMiksYyxkLGUsZixnKQogI2RlZmluZSBQQ1JFMl9ERkFfTUFUQ0goYSxiLGMsZCxlLGYsZyxoLGksaikgXApAQCAtMjU0NiwxMiArMjU4NywxMyBAQAogCiAvKiBNdXN0IGhhbmRsZSBVVEYtOCBzdHJpbmdzIGluIHV0ZjggbW9kZS4gWWllbGRzIG51bWJlciBvZiBjaGFyYWN0ZXJzIHByaW50ZWQuCiBGb3IgcHJpbnRpbmcgKk1BUksgc3RyaW5ncywgYSBuZWdhdGl2ZSBsZW5ndGggaXMgZ2l2ZW4uIElmIGhhbmRlZCBhIE5VTEwgZmlsZSwKLWp1c3QgY291bnRzIGNoYXJzIHdpdGhvdXQgcHJpbnRpbmcuICovCitqdXN0IGNvdW50cyBjaGFycyB3aXRob3V0IHByaW50aW5nIChiZWNhdXNlIHBjaGFyKCkgZG9lcyB0aGF0KS4gKi8KIAogc3RhdGljIGludCBwY2hhcnM4KFBDUkUyX1NQVFI4IHAsIGludCBsZW5ndGgsIEJPT0wgdXRmLCBGSUxFICpmKQogewogdWludDMyX3QgYyA9IDA7CiBpbnQgeWllbGQgPSAwOworCiBpZiAobGVuZ3RoIDwgMCkgbGVuZ3RoID0gcFstMV07CiB3aGlsZSAobGVuZ3RoLS0gPiAwKQogICB7CkBAIC0yNTY5LDYgKzI2MTEsNyBAQAogICBjID0gKnArKzsKICAgeWllbGQgKz0gcGNoYXIoYywgdXRmLCBmKTsKICAgfQorCiByZXR1cm4geWllbGQ7CiB9CiAjZW5kaWYKQEAgLTI5MTMsMTAgKzI5NTYsMTEgQEAKIC8qIElucHV0IGxpbmVzIGFyZSByZWFkIGludG8gYnVmZmVyLCBidXQgYm90aCBwYXR0ZXJucyBhbmQgZGF0YSBsaW5lcyBjYW4gYmUKIGNvbnRpbnVlZCBvdmVyIG11bHRpcGxlIGlucHV0IGxpbmVzLiBJbiBhZGRpdGlvbiwgaWYgdGhlIGJ1ZmZlciBmaWxscyB1cCwgd2UKIHdhbnQgdG8gYXV0b21hdGljYWxseSBleHBhbmQgaXQgc28gYXMgdG8gYmUgYWJsZSB0byBoYW5kbGUgZXh0cmVtZWx5IGxhcmdlCi1saW5lcyB0aGF0IGFyZSBuZWVkZWQgZm9yIGNlcnRhaW4gc3RyZXNzIHRlc3RzLiBXaGVuIHRoZSBpbnB1dCBidWZmZXIgaXMKLWV4cGFuZGVkLCB0aGUgb3RoZXIgdHdvIGJ1ZmZlcnMgbXVzdCBhbHNvIGJlIGV4cGFuZGVkIGxpa2V3aXNlLCBhbmQgdGhlCi1jb250ZW50cyBvZiBwYnVmZmVyLCB3aGljaCBhcmUgYSBjb3B5IG9mIHRoZSBpbnB1dCBmb3IgY2FsbG91dHMsIG11c3QgYmUKLXByZXNlcnZlZCAoZm9yIHdoZW4gZXhwYW5zaW9uIGhhcHBlbnMgZm9yIGEgZGF0YSBsaW5lKS4gVGhpcyBpcyBub3QgdGhlIG1vc3QKK2xpbmVzIHRoYXQgYXJlIG5lZWRlZCBmb3IgY2VydGFpbiBzdHJlc3MgdGVzdHMsIGFsdGhvdWdoIHRoaXMgaXMgbGVzcyBsaWtlbHkKK25vdyB0aGF0IHRoZXJlIGFyZSByZXBldGl0aW9uIGZlYXR1cmVzIGZvciBib3RoIHBhdHRlcm5zIGFuZCBkYXRhLiBXaGVuIHRoZQoraW5wdXQgYnVmZmVyIGlzIGV4cGFuZGVkLCB0aGUgb3RoZXIgdHdvIGJ1ZmZlcnMgbXVzdCBhbHNvIGJlIGV4cGFuZGVkIGxpa2V3aXNlLAorYW5kIHRoZSBjb250ZW50cyBvZiBwYnVmZmVyLCB3aGljaCBhcmUgYSBjb3B5IG9mIHRoZSBpbnB1dCBmb3IgY2FsbG91dHMsIG11c3QKK2JlIHByZXNlcnZlZCAoZm9yIHdoZW4gZXhwYW5zaW9uIGhhcHBlbnMgZm9yIGEgZGF0YSBsaW5lKS4gVGhpcyBpcyBub3QgdGhlIG1vc3QKIG9wdGltYWwgd2F5IG9mIGhhbmRsaW5nIHRoaXMsIGJ1dCBoZXksIHRoaXMgaXMganVzdCBhIHRlc3QgcHJvZ3JhbSEKIAogQXJndW1lbnRzOgpAQCAtMjk0MCw3ICsyOTg0LDcgQEAKIAogICBpZiAocmxlbiA+IDEwMDApCiAgICAgewotICAgIGludCBkbGVuOworICAgIHNpemVfdCBkbGVuOwogCiAgICAgLyogSWYgbGlicmVhZGxpbmUgb3IgbGliZWRpdCBzdXBwb3J0IGlzIHJlcXVpcmVkLCB1c2UgcmVhZGxpbmUoKSB0byByZWFkIGEKICAgICBsaW5lIGlmIHRoZSBpbnB1dCBpcyBhIHRlcm1pbmFsLiBOb3RlIHRoYXQgcmVhZGxpbmUoKSByZW1vdmVzIHRoZSB0cmFpbGluZwpAQCAtMjk3MSw5ICszMDE1LDI3IEBACiAgICAgICAgIHJldHVybiAoaGVyZSA9PSBzdGFydCk/IE5VTEwgOiBzdGFydDsKICAgICAgIH0KIAotICAgIGRsZW4gPSAoaW50KXN0cmxlbigoY2hhciAqKWhlcmUpOwotICAgIGlmIChkbGVuID4gMCAmJiBoZXJlW2RsZW4gLSAxXSA9PSAnXG4nKSByZXR1cm4gc3RhcnQ7CisgICAgZGxlbiA9IHN0cmxlbigoY2hhciAqKWhlcmUpOwogICAgIGhlcmUgKz0gZGxlbjsKKworICAgIC8qIENoZWNrIGZvciBlbmQgb2YgbGluZSByZWFjaGVkLiBUYWtlIGNhcmUgbm90IHRvIHJlYWQgZGF0YSBmcm9tIGJlZm9yZQorICAgIHN0YXJ0IChkbGVuIHdpbGwgYmUgemVybyBmb3IgYSBmaWxlIHN0YXJ0aW5nIHdpdGggYSBiaW5hcnkgemVybykuICovCisKKyAgICBpZiAoaGVyZSA+IHN0YXJ0ICYmIGhlcmVbLTFdID09ICdcbicpIHJldHVybiBzdGFydDsKKworICAgIC8qIElmIHdlIGhhdmUgbm90IHJlYWQgYSBuZXdsaW5lIHdoZW4gcmVhZGluZyBhIGZpbGUsIHdlIGhhdmUgZWl0aGVyIGZpbGxlZAorICAgIHRoZSBidWZmZXIgb3IgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBmaWxlLiBXZSBjYW4gZGV0ZWN0IHRoZSBmb3JtZXIgYnkKKyAgICBjaGVja2luZyB0aGF0IHRoZSBzdHJpbmcgZmlsbHMgdGhlIGJ1ZmZlciwgYW5kIHRoZSBsYXR0ZXIgYnkgZmVvZigpLiBJZgorICAgIG5laXRoZXIgb2YgdGhlc2UgaXMgdHJ1ZSwgaXQgbWVhbnMgd2UgcmVhZCBhIGJpbmFyeSB6ZXJvIHdoaWNoIGhhcyBjYXVzZWQKKyAgICBzdHJsZW4oKSB0byBnaXZlIGEgc2hvcnQgbGVuZ3RoLiBUaGlzIGlzIGEgaGFyZCBlcnJvciBiZWNhdXNlIHBjcmUydGVzdAorICAgIGV4cGVjdHMgdG8gd29yayB3aXRoIEMgc3RyaW5ncy4gKi8KKworICAgIGlmICghSU5URVJBQ1RJVkUoZikgJiYgZGxlbiA8IHJsZW4gLSAxICYmICFmZW9mKGYpKQorICAgICAgeworICAgICAgZnByaW50ZihvdXRmaWxlLCAiKiogQmluYXJ5IHplcm8gZW5jb3VudGVyZWQgaW4gaW5wdXRcbiIpOworICAgICAgZnByaW50ZihvdXRmaWxlLCAiKiogcGNyZTJ0ZXN0IHJ1biBhYmFuZG9uZWRcbiIpOworICAgICAgZXhpdCgxKTsKKyAgICAgIH0KICAgICB9CiAKICAgZWxzZQpAQCAtMzU2NSw3ICszNjI3LDcgQEAKIHN0YXRpYyB2b2lkCiBzaG93X2NvbnRyb2xzKHVpbnQzMl90IGNvbnRyb2xzLCB1aW50MzJfdCBjb250cm9sczIsIGNvbnN0IGNoYXIgKmJlZm9yZSkKIHsKLWZwcmludGYob3V0ZmlsZSwgIiVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyIsCitmcHJpbnRmKG91dGZpbGUsICIlcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzIiwKICAgYmVmb3JlLAogICAoKGNvbnRyb2xzICYgQ1RMX0FGVEVSVEVYVCkgIT0gMCk/ICIgYWZ0ZXJ0ZXh0IiA6ICIiLAogICAoKGNvbnRyb2xzICYgQ1RMX0FMTEFGVEVSVEVYVCkgIT0gMCk/ICIgYWxsYWZ0ZXJ0ZXh0IiA6ICIiLApAQCAtMzU5Miw3ICszNjU0LDkgQEAKICAgKChjb250cm9scyAmIENUTF9OTF9TRVQpICE9IDApPyAiIG5ld2xpbmUiIDogIiIsCiAgICgoY29udHJvbHMgJiBDVExfTlVMTENPTlRFWFQpICE9IDApPyAiIG51bGxfY29udGV4dCIgOiAiIiwKICAgKChjb250cm9scyAmIENUTF9QT1NJWCkgIT0gMCk/ICIgcG9zaXgiIDogIiIsCisgICgoY29udHJvbHMgJiBDVExfUE9TSVhfTk9TVUIpICE9IDApPyAiIHBvc2l4X25vc3ViIiA6ICIiLAogICAoKGNvbnRyb2xzICYgQ1RMX1BVU0gpICE9IDApPyAiIHB1c2giIDogIiIsCisgICgoY29udHJvbHMgJiBDVExfUFVTSENPUFkpICE9IDApPyAiIHB1c2hjb3B5IiA6ICIiLAogICAoKGNvbnRyb2xzICYgQ1RMX1NUQVJUQ0hBUikgIT0gMCk/ICIgc3RhcnRjaGFyIiA6ICIiLAogICAoKGNvbnRyb2xzMiAmIENUTDJfU1VCU1RJVFVURV9FWFRFTkRFRCkgIT0gMCk/ICIgc3Vic3RpdHV0ZV9leHRlbmRlZCIgOiAiIiwKICAgKChjb250cm9sczIgJiBDVEwyX1NVQlNUSVRVVEVfT1ZFUkZMT1dfTEVOR1RIKSAhPSAwKT8gIiBzdWJzdGl0dXRlX292ZXJmbG93X2xlbmd0aCIgOiAiIiwKQEAgLTM2OTAsNiArMzc1NCwxMCBAQAogdWludDMyX3QgbmFtZV9jb3VudCwgbmFtZV9lbnRyeV9zaXplOwogc2l6ZV90IHNpemUsIGNibG9ja19zaXplOwogCisvKiBPbmUgb2YgdGhlIHRlc3RfbW9kZSB2YWx1ZXMgd2lsbCBhbHdheXMgYmUgdHJ1ZSwgYnV0IHRvIHN0b3AgYSBjb21waWxlcgord2FybmluZyB3ZSBtdXN0IGluaXRpYWxpemUgY2Jsb2NrX3NpemUuICovCisKK2NibG9ja19zaXplID0gMDsKICNpZmRlZiBTVVBQT1JUX1BDUkUyXzgKIGlmICh0ZXN0X21vZGUgPT0gOCkgY2Jsb2NrX3NpemUgPSBzaXplb2YocGNyZTJfcmVhbF9jb2RlXzgpOwogI2VuZGlmCkBAIC0zNzkxLDggKzM4NTksOCBAQAogCiBpZiAoKHBhdF9wYXRjdGwuY29udHJvbCAmIENUTF9JTkZPKSAhPSAwKQogICB7Ci0gIGNvbnN0IHZvaWQgKm5hbWV0YWJsZTsKLSAgY29uc3QgdWludDhfdCAqc3RhcnRfYml0czsKKyAgdm9pZCAqbmFtZXRhYmxlOworICB1aW50OF90ICpzdGFydF9iaXRzOwogICBCT09MIG1hdGNoX2xpbWl0X3NldCwgcmVjdXJzaW9uX2xpbWl0X3NldDsKICAgdWludDMyX3QgYmFja3JlZm1heCwgYnNyX2NvbnZlbnRpb24sIGNhcHR1cmVfY291bnQsIGZpcnN0X2N0eXBlLCBmaXJzdF9jdW5pdCwKICAgICBoYXNiYWNrc2xhc2hjLCBoYXNjcm9ybGYsIGpjaGFuZ2VkLCBsYXN0X2N0eXBlLCBsYXN0X2N1bml0LCBtYXRjaF9lbXB0eSwKQEAgLTQyNDAsMTEgKzQzMDgsMTIgQEAKICAgbG9jYWxfbmV3bGluZV9kZWZhdWx0ID0gZmlyc3RfbGlzdGVkX25ld2xpbmU7CiAgIGJyZWFrOwogCi0gIC8qIFBvcCBhIGNvbXBpbGVkIHBhdHRlcm4gb2ZmIHRoZSBzdGFjay4gTW9kaWZpZXJzIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUKLSAgY29tcGlsZWQgcGF0dGVybiAoZS5nLiB0byBnaXZlIGluZm9ybWF0aW9uKSBhcmUgcGVybWl0dGVkLiBUaGUgZGVmYXVsdAorICAvKiBQb3Agb3IgY29weSBhIGNvbXBpbGVkIHBhdHRlcm4gb2ZmIHRoZSBzdGFjay4gTW9kaWZpZXJzIHRoYXQgZG8gbm90IGFmZmVjdAorICB0aGUgY29tcGlsZWQgcGF0dGVybiAoZS5nLiB0byBnaXZlIGluZm9ybWF0aW9uKSBhcmUgcGVybWl0dGVkLiBUaGUgZGVmYXVsdAogICBwYXR0ZXJuIG1vZGlmaWVycyBhcmUgaWdub3JlZC4gKi8KIAogICBjYXNlIENNRF9QT1A6CisgIGNhc2UgQ01EX1BPUENPUFk6CiAgIGlmIChwYXRzdGFja25leHQgPD0gMCkKICAgICB7CiAgICAgZnByaW50ZihvdXRmaWxlLCAiKiogQ2FuJ3QgcG9wIG9mZiBhbiBlbXB0eSBzdGFja1xuIik7CkBAIC00MjUzLDcgKzQzMjIsMTYgQEAKICAgbWVtc2V0KCZwYXRfcGF0Y3RsLCAwLCBzaXplb2YocGF0Y3RsKSk7ICAgLyogQ29tcGxldGVseSB1bnNldCAqLwogICBpZiAoIWRlY29kZV9tb2RpZmllcnMoYXJncHRyLCBDVFhfUE9QUEFULCAmcGF0X3BhdGN0bCwgTlVMTCkpCiAgICAgcmV0dXJuIFBSX1NLSVA7Ci0gIFNFVChjb21waWxlZF9jb2RlLCBwYXRzdGFja1stLXBhdHN0YWNrbmV4dF0pOworCisgIGlmIChjbWQgPT0gQ01EX1BPUCkKKyAgICB7CisgICAgU0VUKGNvbXBpbGVkX2NvZGUsIHBhdHN0YWNrWy0tcGF0c3RhY2tuZXh0XSk7CisgICAgfQorICBlbHNlCisgICAgeworICAgIFBDUkUyX0NPREVfQ09QWV9GUk9NX1ZPSUQoY29tcGlsZWRfY29kZSwgcGF0c3RhY2tbcGF0c3RhY2tuZXh0IC0gMV0pOworICAgIH0KKwogICBpZiAocGF0X3BhdGN0bC5qaXQgIT0gMCkKICAgICB7CiAgICAgUENSRTJfSklUX0NPTVBJTEUoaml0cmMsIGNvbXBpbGVkX2NvZGUsIHBhdF9wYXRjdGwuaml0KTsKQEAgLTQ0NTEsOSArNDUyOSw5IEBACiAgIHBhdF9wYXRjdGwuaml0ID0gNzsKIAogLyogTm93IGNvcHkgdGhlIHBhdHRlcm4gdG8gcGJ1ZmZlcjggZm9yIHVzZSBpbiA4LWJpdCB0ZXN0aW5nIGFuZCBmb3IgcmVmbGVjdGluZwotaW4gY2FsbG91dHMuIENvbnZlcnQgZnJvbSBoZXggaWYgcmVxdWlyZWQ7IHRoaXMgbXVzdCBuZWNlc3NhcmlseSBiZSBmZXdlcgotY2hhcmFjdGVycyBzbyB3aWxsIGFsd2F5cyBmaXQgaW4gcGJ1ZmZlcjguIEFsdGVybmF0aXZlbHksIHByb2Nlc3MgZm9yCi1yZXBldGl0aW9uIGlmIHJlcXVlc3RlZC4gKi8KK2luIGNhbGxvdXRzLiBDb252ZXJ0IGZyb20gaGV4IGlmIHJlcXVlc3RlZCAobGl0ZXJhbCBzdHJpbmdzIGluIHF1b3RlcyBtYXkgYmUKK3ByZXNlbnQgd2l0aGluIHRoZSBoZXhhZGVjaW1hbCBwYWlycykuIFRoZSByZXN1bHQgbXVzdCBuZWNlc3NhcmlseSBiZSBmZXdlcgorY2hhcmFjdGVycyBzbyB3aWxsIGFsd2F5cyBmaXQgaW4gcGJ1ZmZlcjguICovCiAKIGlmICgocGF0X3BhdGN0bC5jb250cm9sICYgQ1RMX0hFWFBBVCkgIT0gMCkKICAgewpAQCAtNDQ2NCwyNSArNDU0Miw1OSBAQAogICBmb3IgKHBwID0gYnVmZmVyICsgMTsgKnBwICE9IDA7IHBwKyspCiAgICAgewogICAgIGlmIChpc3NwYWNlKCpwcCkpIGNvbnRpbnVlOwotICAgIGMgPSB0b3VwcGVyKCpwcCsrKTsKLSAgICBpZiAoKnBwID09IDApCisgICAgYyA9ICpwcCsrOworCisgICAgLyogSGFuZGxlIGEgbGl0ZXJhbCBzdWJzdHJpbmcgKi8KKworICAgIGlmIChjID09ICdcJycgfHwgYyA9PSAnIicpCiAgICAgICB7Ci0gICAgICBmcHJpbnRmKG91dGZpbGUsICIqKiBPZGQgbnVtYmVyIG9mIGRpZ2l0cyBpbiBoZXggcGF0dGVybi5cbiIpOwotICAgICAgcmV0dXJuIFBSX1NLSVA7CisgICAgICBmb3IgKDs7IHBwKyspCisgICAgICAgIHsKKyAgICAgICAgZCA9ICpwcDsKKyAgICAgICAgaWYgKGQgPT0gMCkKKyAgICAgICAgICB7CisgICAgICAgICAgZnByaW50ZihvdXRmaWxlLCAiKiogTWlzc2luZyBjbG9zaW5nIHF1b3RlIGluIGhleCBwYXR0ZXJuXG4iKTsKKyAgICAgICAgICByZXR1cm4gUFJfU0tJUDsKKyAgICAgICAgICB9CisgICAgICAgIGlmIChkID09IGMpIGJyZWFrOworICAgICAgICAqcHQrKyA9IGQ7CisgICAgICAgIH0KICAgICAgIH0KLSAgICBkID0gdG91cHBlcigqcHApOwotICAgIGlmICghaXN4ZGlnaXQoYykgfHwgIWlzeGRpZ2l0KGQpKQorCisgICAgLyogRXhwZWN0IGEgaGV4IHBhaXIgKi8KKworICAgIGVsc2UKICAgICAgIHsKLSAgICAgIGZwcmludGYob3V0ZmlsZSwgIioqIE5vbi1oZXgtZGlnaXQgaW4gaGV4IHBhdHRlcm4uXG4iKTsKLSAgICAgIHJldHVybiBQUl9TS0lQOworICAgICAgaWYgKCFpc3hkaWdpdChjKSkKKyAgICAgICAgeworICAgICAgICBmcHJpbnRmKG91dGZpbGUsICIqKiBVbmV4cGVjdGVkIG5vbi1oZXgtZGlnaXQgJyVjJyBpbiBoZXggcGF0dGVybjogIgorICAgICAgICAgICJxdW90ZSBtaXNzaW5nP1xuIiwgYyk7CisgICAgICAgIHJldHVybiBQUl9TS0lQOworICAgICAgICB9CisgICAgICBpZiAoKnBwID09IDApCisgICAgICAgIHsKKyAgICAgICAgZnByaW50ZihvdXRmaWxlLCAiKiogT2RkIG51bWJlciBvZiBkaWdpdHMgaW4gaGV4IHBhdHRlcm5cbiIpOworICAgICAgICByZXR1cm4gUFJfU0tJUDsKKyAgICAgICAgfQorICAgICAgZCA9ICpwcDsKKyAgICAgIGlmICghaXN4ZGlnaXQoZCkpCisgICAgICAgIHsKKyAgICAgICAgZnByaW50ZihvdXRmaWxlLCAiKiogVW5leHBlY3RlZCBub24taGV4LWRpZ2l0ICclYycgaW4gaGV4IHBhdHRlcm46ICIKKyAgICAgICAgICAicXVvdGUgbWlzc2luZz9cbiIsIGQpOworICAgICAgICByZXR1cm4gUFJfU0tJUDsKKyAgICAgICAgfQorICAgICAgYyA9IHRvdXBwZXIoYyk7CisgICAgICBkID0gdG91cHBlcihkKTsKKyAgICAgICpwdCsrID0gKChpc2RpZ2l0KGMpPyAoYyAtICcwJykgOiAoYyAtICdBJyArIDEwKSkgPDwgNCkgKworICAgICAgICAgICAgICAgKGlzZGlnaXQoZCk/IChkIC0gJzAnKSA6IChkIC0gJ0EnICsgMTApKTsKICAgICAgIH0KLSAgICAqcHQrKyA9ICgoaXNkaWdpdChjKT8gKGMgLSAnMCcpIDogKGMgLSAnQScgKyAxMCkpIDw8IDQpICsKLSAgICAgICAgICAgICAoaXNkaWdpdChkKT8gKGQgLSAnMCcpIDogKGQgLSAnQScgKyAxMCkpOwogICAgIH0KICAgKnB0ID0gMDsKICAgcGF0bGVuID0gcHQgLSBwYnVmZmVyODsKICAgfQogCisvKiBJZiBub3QgYSBoZXggc3RyaW5nLCBwcm9jZXNzIGZvciByZXBldGl0aW9uIGV4cGFuc2lvbiBpZiByZXF1ZXN0ZWQuICovCisKIGVsc2UgaWYgKChwYXRfcGF0Y3RsLmNvbnRyb2wgJiBDVExfRVhQQU5EKSAhPSAwKQogICB7CiAgIHVpbnQ4X3QgKnBwLCAqcHQ7CkBAIC00NTA2LDggKzQ2MTgsMTkgQEAKICAgICAgICAgICB7CiAgICAgICAgICAgdWludDMyX3QgY2xlbiA9IHBlIC0gcGMgLSAyOwogICAgICAgICAgIHVpbnQzMl90IGkgPSAwOworICAgICAgICAgIHVuc2lnbmVkIGxvbmcgdWxpOworICAgICAgICAgIGNoYXIgKmVuZHB0cjsKKwogICAgICAgICAgIHBlICs9IDI7Ci0gICAgICAgICAgd2hpbGUgKGlzZGlnaXQoKnBlKSkgaSA9IGkgKiAxMCArICpwZSsrIC0gJzAnOworICAgICAgICAgIHVsaSA9IHN0cnRvdWwoKGNvbnN0IGNoYXIgKilwZSwgJmVuZHB0ciwgMTApOworICAgICAgICAgIGlmIChVMzJPVkVSRkxPVyh1bGkpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgZnByaW50ZihvdXRmaWxlLCAiKiogUGF0dGVybiByZXBlYXQgY291bnQgdG9vIGxhcmdlXG4iKTsKKyAgICAgICAgICAgIHJldHVybiBQUl9TS0lQOworICAgICAgICAgICAgfQorCisgICAgICAgICAgaSA9ICh1aW50MzJfdCl1bGk7CisgICAgICAgICAgcGUgPSAodWludDhfdCAqKWVuZHB0cjsKICAgICAgICAgICBpZiAoKnBlID09ICd9JykKICAgICAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChpID09IDApCkBAIC00NTQwLDcgKzQ2NjMsNyBAQAogICAgICAgcHQgPSBwYnVmZmVyOCArIHB0X29mZnNldDsKICAgICAgIH0KIAotICAgIHdoaWxlIChjb3VudC0tID4gMCkKKyAgICBmb3IgKDsgY291bnQgPiAwOyBjb3VudC0tKQogICAgICAgewogICAgICAgbWVtY3B5KHB0LCBwYywgbGVuZ3RoKTsKICAgICAgIHB0ICs9IGxlbmd0aDsKQEAgLTQ1NjcsNyArNDY5MCw3IEBACiAgIHsKICAgaWYgKHBhdF9wYXRjdGwudGFibGVzX2lkICE9IDApCiAgICAgewotICAgIGZwcmludGYob3V0ZmlsZSwgIioqICdMb2NhbGUnIGFuZCAndGFibGVzJyBtdXN0IG5vdCBib3RoIGJlIHNldC5cbiIpOworICAgIGZwcmludGYob3V0ZmlsZSwgIioqICdMb2NhbGUnIGFuZCAndGFibGVzJyBtdXN0IG5vdCBib3RoIGJlIHNldFxuIik7CiAgICAgcmV0dXJuIFBSX1NLSVA7CiAgICAgfQogICBpZiAoc2V0bG9jYWxlKExDX0NUWVBFLCAoY29uc3QgY2hhciAqKXBhdF9wYXRjdGwubG9jYWxlKSA9PSBOVUxMKQpAQCAtNDY0OSwyMSArNDc3MiwyNCBAQAogCiAgIGlmIChtc2dbMF0gPT0gMCkgZnByaW50ZihvdXRmaWxlLCAiXG4iKTsKIAotICAvKiBUcmFuc2xhdGUgUENSRTIgb3B0aW9ucyB0byBQT1NJWCBvcHRpb25zIGFuZCB0aGVuIGNvbXBpbGUuIE9uIHN1Y2Nlc3MsIHNldAotICB1cCBhIG1hdGNoX2RhdGEgYmxvY2sgdG8gYmUgdXNlZCBmb3IgYWxsIG1hdGNoZXMuICovCisgIC8qIFRyYW5zbGF0ZSBQQ1JFMiBvcHRpb25zIHRvIFBPU0lYIG9wdGlvbnMgYW5kIHRoZW4gY29tcGlsZS4gKi8KIAogICBpZiAodXRmKSBjZmxhZ3MgfD0gUkVHX1VURjsKKyAgaWYgKChwYXRfcGF0Y3RsLmNvbnRyb2wgJiBDVExfUE9TSVhfTk9TVUIpICE9IDApIGNmbGFncyB8PSBSRUdfTk9TVUI7CiAgIGlmICgocGF0X3BhdGN0bC5vcHRpb25zICYgUENSRTJfVUNQKSAhPSAwKSBjZmxhZ3MgfD0gUkVHX1VDUDsKICAgaWYgKChwYXRfcGF0Y3RsLm9wdGlvbnMgJiBQQ1JFMl9DQVNFTEVTUykgIT0gMCkgY2ZsYWdzIHw9IFJFR19JQ0FTRTsKICAgaWYgKChwYXRfcGF0Y3RsLm9wdGlvbnMgJiBQQ1JFMl9NVUxUSUxJTkUpICE9IDApIGNmbGFncyB8PSBSRUdfTkVXTElORTsKICAgaWYgKChwYXRfcGF0Y3RsLm9wdGlvbnMgJiBQQ1JFMl9ET1RBTEwpICE9IDApIGNmbGFncyB8PSBSRUdfRE9UQUxMOwotICBpZiAoKHBhdF9wYXRjdGwub3B0aW9ucyAmIFBDUkUyX05PX0FVVE9fQ0FQVFVSRSkgIT0gMCkgY2ZsYWdzIHw9IFJFR19OT1NVQjsKICAgaWYgKChwYXRfcGF0Y3RsLm9wdGlvbnMgJiBQQ1JFMl9VTkdSRUVEWSkgIT0gMCkgY2ZsYWdzIHw9IFJFR19VTkdSRUVEWTsKIAogICByYyA9IHJlZ2NvbXAoJnByZWcsIChjaGFyICopcGJ1ZmZlcjgsIGNmbGFncyk7Ci0gIGlmIChyYyAhPSAwKSAgIC8qIEZhaWx1cmUgKi8KKworICAvKiBDb21waWxpbmcgZmFpbGVkICovCisKKyAgaWYgKHJjICE9IDApCiAgICAgewogICAgIHNpemVfdCBic2l6ZSwgdXNpemU7CisgICAgaW50IHBzaXplOwogCiAgICAgcHJlZy5yZV9wY3JlMl9jb2RlID0gTlVMTDsgICAgIC8qIEluIGNhc2Ugc29tZXRoaW5nIHdhcyBsZWZ0IGluIHRoZXJlICovCiAgICAgcHJlZy5yZV9tYXRjaF9kYXRhID0gTlVMTDsKQEAgLTQ2NzQsNyArNDgwMCwxMiBAQAogICAgICAgbWVtY3B5KHBidWZmZXI4ICsgYnNpemUsICJERUFEQkVFRiIsIDgpOwogICAgIHVzaXplID0gcmVnZXJyb3IocmMsICZwcmVnLCAoY2hhciAqKXBidWZmZXI4LCBic2l6ZSk7CiAKLSAgICBmcHJpbnRmKG91dGZpbGUsICJGYWlsZWQ6IFBPU0lYIGNvZGUgJWQ6ICVzXG4iLCByYywgcGJ1ZmZlcjgpOworICAgIC8qIEluc2lkZSByZWdlcnJvcigpLCBzbnByaW50ZigpIGlzIHVzZWQuIElmIHRoZSBidWZmZXIgaXMgdG9vIHNtYWxsLCBzb21lCisgICAgdmVyc2lvbnMgb2Ygc25wcmludGYoKSBwdXQgYSB6ZXJvIGJ5dGUgYXQgdGhlIGVuZCwgYnV0IG90aGVycyBkbyBub3QuCisgICAgVGhlcmVmb3JlLCB3ZSBwcmludCBhIG1heGltdW0gb2Ygb25lIGxlc3MgdGhhbiB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyLiAqLworCisgICAgcHNpemUgPSAoaW50KWJzaXplIC0gMTsKKyAgICBmcHJpbnRmKG91dGZpbGUsICJGYWlsZWQ6IFBPU0lYIGNvZGUgJWQ6ICUuKnNcbiIsIHJjLCBwc2l6ZSwgcGJ1ZmZlcjgpOwogICAgIGlmICh1c2l6ZSA+IGJzaXplKQogICAgICAgewogICAgICAgZnByaW50ZihvdXRmaWxlLCAiKiogcmVnZXJyb3IoKSBtZXNzYWdlIHRydW5jYXRlZFxuIik7CkBAIC00NjgzLDYgKzQ4MTQsMjkgQEAKICAgICAgIH0KICAgICByZXR1cm4gUFJfU0tJUDsKICAgICB9CisKKyAgLyogQ29tcGlsaW5nIHN1Y2NlZWRlZC4gQ2hlY2sgdGhhdCB0aGUgdmFsdWVzIGluIHRoZSBwcmVnIGJsb2NrIGFyZSBzZW5zaWJsZS4KKyAgSXQgY2FuIGhhcHBlbiB0aGF0IHBjcmUydGVzdCBpcyBhY2NpZGVudGFsbHkgbGlua2VkIHdpdGggYSBkaWZmZXJlbnQgUE9TSVgKKyAgbGlicmFyeSB3aGljaCBzdWNjZWVkcywgYnV0IG9mIGNvdXJzZSBwdXRzIGRpZmZlcmVudCB0aGluZ3MgaW50byBwcmVnLiBJbgorICB0aGlzIHNpdHVhdGlvbiwgY2FsbGluZyByZWdmcmVlKCkgbWF5IGNhdXNlIGEgc2VnZmF1bHQgKG9yIGludmFsaWQgZnJlZSgpIGluCisgIHZhbGdyaW5kKSwgc28gZW5zdXJlIHRoYXQgcHJlZy5yZV9wY3JlMl9jb2RlIGlzIE5VTEwsIHdoaWNoIHN1cHByZXNzZXMgdGhlCisgIGNhbGxpbmcgb2YgcmVnZnJlZSgpIG9uIGV4aXQuICovCisKKyAgaWYgKHByZWcucmVfcGNyZTJfY29kZSA9PSBOVUxMIHx8CisgICAgICAoKHBjcmUyX3JlYWxfY29kZV84ICopcHJlZy5yZV9wY3JlMl9jb2RlKS0+bWFnaWNfbnVtYmVyICE9IE1BR0lDX05VTUJFUiB8fAorICAgICAgKChwY3JlMl9yZWFsX2NvZGVfOCAqKXByZWcucmVfcGNyZTJfY29kZSktPnRvcF9icmFja2V0ICE9IHByZWcucmVfbnN1YiB8fAorICAgICAgcHJlZy5yZV9tYXRjaF9kYXRhID09IE5VTEwgfHwKKyAgICAgIHByZWcucmVfY2ZsYWdzICE9IGNmbGFncykKKyAgICB7CisgICAgZnByaW50ZihvdXRmaWxlLAorICAgICAgIioqIFRoZSByZWdjb21wKCkgZnVuY3Rpb24gcmV0dXJuZWQgemVybyAoc3VjY2VzcyksIGJ1dCB0aGUgdmFsdWVzIHNldFxuIgorICAgICAgIioqIGluIHRoZSBwcmVnIGJsb2NrIGFyZSBub3QgdmFsaWQgZm9yIFBDUkUyLiBDaGVjayB0aGF0IHBjcmUydGVzdCBpc1xuIgorICAgICAgIioqIGxpbmtlZCB3aXRoIFBDUkUyJ3MgcGNyZTJwb3NpeCBtb2R1bGUgKC1scGNyZTItcG9zaXgpIGFuZCBub3Qgd2l0aFxuIgorICAgICAgIioqIHNvbWUgb3RoZXIgUE9TSVggcmVnZXggbGlicmFyeS5cbioqXG4iKTsKKyAgICBwcmVnLnJlX3BjcmUyX2NvZGUgPSBOVUxMOworICAgIHJldHVybiBQUl9BQkVORDsKKyAgICB9CisKICAgcmV0dXJuIFBSX09LOwogI2VuZGlmICAvKiBTVVBQT1JUX1BDUkUyXzggKi8KICAgfQpAQCAtNDY5MCw3ICs0ODQ0LDcgQEAKIC8qIEhhbmRsZSBjb21waWxpbmcgdmlhIHRoZSBuYXRpdmUgaW50ZXJmYWNlLiBDb250cm9scyB0aGF0IGFjdCBsYXRlciBhcmUKIGlnbm9yZWQgd2l0aCAicHVzaCIuIFJlcGxhY2VtZW50cyBhcmUgbG9ja2VkIG91dC4gKi8KIAotaWYgKChwYXRfcGF0Y3RsLmNvbnRyb2wgJiBDVExfUFVTSCkgIT0gMCkKK2lmICgocGF0X3BhdGN0bC5jb250cm9sICYgKENUTF9QVVNIfENUTF9QVVNIQ09QWSkpICE9IDApCiAgIHsKICAgaWYgKHBhdF9wYXRjdGwucmVwbGFjZW1lbnRbMF0gIT0gMCkKICAgICB7CkBAIC00NzE3LDkgKzQ4NzEsNyBAQAogCiAvKiBDb252ZXJ0IHRoZSBpbnB1dCBpbiBub24tOC1iaXQgbW9kZXMuICovCiAKLSNpZmRlZiBTVVBQT1JUX1BDUkUyXzgKLWlmICh0ZXN0X21vZGUgPT0gUENSRThfTU9ERSkgZXJyb3Jjb2RlID0gMDsKLSNlbmRpZgorZXJyb3Jjb2RlID0gMDsKIAogI2lmZGVmIFNVUFBPUlRfUENSRTJfMTYKIGlmICh0ZXN0X21vZGUgPT0gUENSRTE2X01PREUpIGVycm9yY29kZSA9IHRvMTYocGJ1ZmZlcjgsIHV0ZiwgJnBhdGxlbik7CkBAIC00ODkzLDYgKzUwNDUsMTkgQEAKICAgU0VUKGNvbXBpbGVkX2NvZGUsIE5VTEwpOwogICB9CiAKKy8qIFRoZSAicHVzaGNvcHkiIGNvbnRyb2wgaXMgc2ltaWxhciwgYnV0IHB1c2hlcyBhIGNvcHkgb2YgdGhlIHBhdHRlcm4uIFRoaXMKK3Rlc3RzIHRoZSBwY3JlMl9jb2RlX2NvcHkoKSBmdW5jdGlvbi4gKi8KKworaWYgKChwYXRfcGF0Y3RsLmNvbnRyb2wgJiBDVExfUFVTSENPUFkpICE9IDApCisgIHsKKyAgaWYgKHBhdHN0YWNrbmV4dCA+PSBQQVRTVEFDS1NJWkUpCisgICAgeworICAgIGZwcmludGYob3V0ZmlsZSwgIioqIFRvbyBtYW55IHB1c2hlZCBwYXR0ZXJucyAobWF4ICVkKVxuIiwgUEFUU1RBQ0tTSVpFKTsKKyAgICByZXR1cm4gUFJfQUJFTkQ7CisgICAgfQorICBQQ1JFMl9DT0RFX0NPUFlfVE9fVk9JRChwYXRzdGFja1twYXRzdGFja25leHQrK10sIGNvbXBpbGVkX2NvZGUpOworICB9CisKIHJldHVybiBQUl9PSzsKIH0KIApAQCAtNDk3NSw2ICs1MTQwLDcgQEAKIGNhbGxvdXRfZnVuY3Rpb24ocGNyZTJfY2FsbG91dF9ibG9ja184ICpjYiwgdm9pZCAqY2FsbG91dF9kYXRhX3B0cikKIHsKIHVpbnQzMl90IGksIHByZV9zdGFydCwgcG9zdF9zdGFydCwgc3ViamVjdF9sZW5ndGg7CitQQ1JFMl9TSVpFIGN1cnJlbnRfcG9zaXRpb247CiBCT09MIHV0ZiA9IChGTEQoY29tcGlsZWRfY29kZSwgb3ZlcmFsbF9vcHRpb25zKSAmIFBDUkUyX1VURikgIT0gMDsKIEJPT0wgY2FsbG91dF9jYXB0dXJlID0gKGRhdF9kYXRjdGwuY29udHJvbCAmIENUTF9DQUxMT1VUX0NBUFRVUkUpICE9IDA7CiAKQEAgLTUwMjUsMjIgKzUxOTEsMzcgQEAKICAgICB9CiAgIH0KIAotLyogUmUtcHJpbnQgdGhlIHN1YmplY3QgaW4gY2Fub25pY2FsIGZvcm0sIHRoZSBmaXJzdCB0aW1lIG9yIGlmIGdpdmluZyBmdWxsCi1kYXRhaWxzLiBPbiBzdWJzZXF1ZW50IGNhbGxzIGluIHRoZSBzYW1lIG1hdGNoLCB3ZSB1c2UgcGNoYXJzIGp1c3QgdG8gZmluZCB0aGUKLXByaW50ZWQgbGVuZ3RocyBvZiB0aGUgc3Vic3RyaW5ncy4gKi8KKy8qIFJlLXByaW50IHRoZSBzdWJqZWN0IGluIGNhbm9uaWNhbCBmb3JtICh3aXRoIGVzY2FwZXMgZm9yIG5vbi1wcmludGluZworY2hhcmFjdGVycyksIHRoZSBmaXJzdCB0aW1lLCBvciBpZiBnaXZpbmcgZnVsbCBkZXRhaWxzLiBPbiBzdWJzZXF1ZW50IGNhbGxzIGluCit0aGUgc2FtZSBtYXRjaCwgd2UgdXNlIFBDSEFSUygpIGp1c3QgdG8gZmluZCB0aGUgcHJpbnRlZCBsZW5ndGhzIG9mIHRoZQorc3Vic3RyaW5ncy4gKi8KIAogaWYgKGYgIT0gTlVMTCkgZnByaW50ZihmLCAiLS0tPiIpOwogCisvKiBUaGUgc3ViamVjdCBiZWZvcmUgdGhlIG1hdGNoIHN0YXJ0LiAqLworCiBQQ0hBUlMocHJlX3N0YXJ0LCBjYi0+c3ViamVjdCwgMCwgY2ItPnN0YXJ0X21hdGNoLCB1dGYsIGYpOwogCisvKiBJZiBhIGxvb2tiZWhpbmQgaXMgaW52b2x2ZWQsIHRoZSBjdXJyZW50IHBvc2l0aW9uIG1heSBiZSBlYXJsaWVyIHRoYW4gdGhlCittYXRjaCBzdGFydC4gSWYgc28sIHVzZSB0aGUgbWF0Y2ggc3RhcnQgaW5zdGVhZC4gKi8KKworY3VycmVudF9wb3NpdGlvbiA9IChjYi0+Y3VycmVudF9wb3NpdGlvbiA+PSBjYi0+c3RhcnRfbWF0Y2gpPworICBjYi0+Y3VycmVudF9wb3NpdGlvbiA6IGNiLT5zdGFydF9tYXRjaDsKKworLyogVGhlIHN1YmplY3QgYmV0d2VlbiB0aGUgbWF0Y2ggc3RhcnQgYW5kIHRoZSBjdXJyZW50IHBvc2l0aW9uLiAqLworCiBQQ0hBUlMocG9zdF9zdGFydCwgY2ItPnN1YmplY3QsIGNiLT5zdGFydF9tYXRjaCwKLSAgY2ItPmN1cnJlbnRfcG9zaXRpb24gLSBjYi0+c3RhcnRfbWF0Y2gsIHV0ZiwgZik7CisgIGN1cnJlbnRfcG9zaXRpb24gLSBjYi0+c3RhcnRfbWF0Y2gsIHV0ZiwgZik7CisKKy8qIFByaW50IGZyb20gdGhlIGN1cnJlbnQgcG9zaXRpb24gdG8gdGhlIGVuZC4gKi8KKworUENIQVJTVihjYi0+c3ViamVjdCwgY3VycmVudF9wb3NpdGlvbiwgY2ItPnN1YmplY3RfbGVuZ3RoIC0gY3VycmVudF9wb3NpdGlvbiwKKyAgdXRmLCBmKTsKKworLyogQ2FsY3VsYXRlIHRoZSB0b3RhbCBzdWJqZWN0IHByaW50ZWQgbGVuZ3RoIChubyBwcmludCkuICovCiAKIFBDSEFSUyhzdWJqZWN0X2xlbmd0aCwgY2ItPnN1YmplY3QsIDAsIGNiLT5zdWJqZWN0X2xlbmd0aCwgdXRmLCBOVUxMKTsKIAotUENIQVJTVihjYi0+c3ViamVjdCwgY2ItPmN1cnJlbnRfcG9zaXRpb24sCi0gIGNiLT5zdWJqZWN0X2xlbmd0aCAtIGNiLT5jdXJyZW50X3Bvc2l0aW9uLCB1dGYsIGYpOwotCiBpZiAoZiAhPSBOVUxMKSBmcHJpbnRmKGYsICJcbiIpOwogCiAvKiBGb3IgYXV0b21hdGljIGNhbGxvdXRzLCBzaG93IHRoZSBwYXR0ZXJuIG9mZnNldC4gT3RoZXJ3aXNlLCBmb3IgYSBudW1lcmljYWwKQEAgLTU0NDUsMTMgKzU2MjYsMTUgQEAKIAogd2hpbGUgKChjID0gKnArKykgIT0gMCkKICAgewotICBpbnQgaSA9IDA7CisgIGludDMyX3QgaSA9IDA7CiAgIHNpemVfdCByZXBsZW47CiAKICAgLyogXSBtYXkgbWFyayB0aGUgZW5kIG9mIGEgcmVwbGljYXRlZCBzZXF1ZW5jZSAqLwogCiAgIGlmIChjID09ICddJyAmJiBzdGFydF9yZXAgIT0gTlVMTCkKICAgICB7CisgICAgbG9uZyBsaTsKKyAgICBjaGFyICplbmRwdHI7CiAgICAgc2l6ZV90IHFvZmZzZXQgPSBDQVNUOFZBUihxKSAtIGRidWZmZXI7CiAgICAgc2l6ZV90IHJlcF9vZmZzZXQgPSBzdGFydF9yZXAgLSBkYnVmZmVyOwogCkBAIC01NDYwLDEyICs1NjQzLDIyIEBACiAgICAgICBmcHJpbnRmKG91dGZpbGUsICIqKiBFeHBlY3RlZCAneycgYWZ0ZXIgXFxbLi4uLl1cbiIpOwogICAgICAgcmV0dXJuIFBSX09LOwogICAgICAgfQotICAgIHdoaWxlIChpc2RpZ2l0KCpwKSkgaSA9IGkgKiAxMCArICpwKysgLSAnMCc7CisKKyAgICBsaSA9IHN0cnRvbCgoY29uc3QgY2hhciAqKXAsICZlbmRwdHIsIDEwKTsKKyAgICBpZiAoUzMyT1ZFUkZMT1cobGkpKQorICAgICAgeworICAgICAgZnByaW50ZihvdXRmaWxlLCAiKiogUmVwZWF0IGNvdW50IHRvbyBsYXJnZVxuIik7CisgICAgICByZXR1cm4gUFJfT0s7CisgICAgICB9CisKKyAgICBwID0gKHVpbnQ4X3QgKillbmRwdHI7CiAgICAgaWYgKCpwKysgIT0gJ30nKQogICAgICAgewogICAgICAgZnByaW50ZihvdXRmaWxlLCAiKiogRXhwZWN0ZWQgJ30nIGFmdGVyIFxcWy4uLl17Li4uXG4iKTsKICAgICAgIHJldHVybiBQUl9PSzsKICAgICAgIH0KKworICAgIGkgPSAoaW50MzJfdClsaTsKICAgICBpZiAoaS0tID09IDApCiAgICAgICB7CiAgICAgICBmcHJpbnRmKG91dGZpbGUsICIqKiBaZXJvIHJlcGVhdCBub3QgYWxsb3dlZFxuIik7CkBAIC01NzgwLDcgKzU5NzMsNyBAQAogICAgICh2b2lkKXJlZ2Vycm9yKHJjLCAmcHJlZywgKGNoYXIgKilwYnVmZmVyOCwgcGJ1ZmZlcjhfc2l6ZSk7CiAgICAgZnByaW50ZihvdXRmaWxlLCAiTm8gbWF0Y2g6IFBPU0lYIGNvZGUgJWQ6ICVzXG4iLCByYywgcGJ1ZmZlcjgpOwogICAgIH0KLSAgZWxzZSBpZiAoKHBhdF9wYXRjdGwub3B0aW9ucyAmIFBDUkUyX05PX0FVVE9fQ0FQVFVSRSkgIT0gMCkKKyAgZWxzZSBpZiAoKHBhdF9wYXRjdGwuY29udHJvbCAmIENUTF9QT1NJWF9OT1NVQikgIT0gMCkKICAgICBmcHJpbnRmKG91dGZpbGUsICJNYXRjaGVkIHdpdGggUkVHX05PU1VCXG4iKTsKICAgZWxzZSBpZiAoZGF0X2RhdGN0bC5vdmVjY291bnQgPT0gMCkKICAgICBmcHJpbnRmKG91dGZpbGUsICJNYXRjaGVkIHdpdGhvdXQgY2FwdHVyZVxuIik7CkBAIC02MjQzLDE1ICs2NDM2LDIzIEBACiAKICAgICAvKiAiYWxsY2FwdHVyZXMiIHJlcXVlc3RzIHNob3dpbmcgb2YgYWxsIGNhcHR1cmVzIGluIHRoZSBwYXR0ZXJuLCB0byBjaGVjawogICAgIHVuc2V0IG9uZXMgYXQgdGhlIGVuZC4gSXQgbWF5IGJlIHNldCBvbiB0aGUgcGF0dGVybiBvciB0aGUgZGF0YS4gSW1wbGVtZW50Ci0gICAgYnkgc2V0dGluZyBjYXBjb3VudCB0byB0aGUgbWF4aW11bS4gKi8KKyAgICBieSBzZXR0aW5nIGNhcGNvdW50IHRvIHRoZSBtYXhpbXVtLiBUaGlzIGlzIG5vdCByZWxldmFudCBmb3IgREZBIG1hdGNoaW5nLAorICAgIHNvIGlnbm9yZSBpdC4gKi8KIAogICAgIGlmICgoZGF0X2RhdGN0bC5jb250cm9sICYgQ1RMX0FMTENBUFRVUkVTKSAhPSAwKQogICAgICAgewogICAgICAgdWludDMyX3QgbWF4Y2FwY291bnQ7Ci0gICAgICBpZiAocGF0dGVybl9pbmZvKFBDUkUyX0lORk9fQ0FQVFVSRUNPVU5ULCAmbWF4Y2FwY291bnQsIEZBTFNFKSA8IDApCi0gICAgICAgIHJldHVybiBQUl9TS0lQOwotICAgICAgY2FwY291bnQgPSBtYXhjYXBjb3VudCArIDE7ICAgLyogQWxsb3cgZm9yIGZ1bGwgbWF0Y2ggKi8KLSAgICAgIGlmIChjYXBjb3VudCA+IChpbnQpb3ZlY2NvdW50KSBjYXBjb3VudCA9IG92ZWNjb3VudDsKKyAgICAgIGlmICgoZGF0X2RhdGN0bC5jb250cm9sICYgQ1RMX0RGQSkgIT0gMCkKKyAgICAgICAgeworICAgICAgICBmcHJpbnRmKG91dGZpbGUsICIqKiBJZ25vcmVkIGFmdGVyIERGQSBtYXRjaGluZzogYWxsY2FwdHVyZXNcbiIpOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgaWYgKHBhdHRlcm5faW5mbyhQQ1JFMl9JTkZPX0NBUFRVUkVDT1VOVCwgJm1heGNhcGNvdW50LCBGQUxTRSkgPCAwKQorICAgICAgICAgIHJldHVybiBQUl9TS0lQOworICAgICAgICBjYXBjb3VudCA9IG1heGNhcGNvdW50ICsgMTsgICAvKiBBbGxvdyBmb3IgZnVsbCBtYXRjaCAqLworICAgICAgICBpZiAoY2FwY291bnQgPiAoaW50KW92ZWNjb3VudCkgY2FwY291bnQgPSBvdmVjY291bnQ7CisgICAgICAgIH0KICAgICAgIH0KIAogICAgIC8qIE91dHB1dCB0aGUgY2FwdHVyZWQgc3Vic3RyaW5ncy4gTm90ZSB0aGF0LCBmb3IgdGhlIG1hdGNoZWQgc3RyaW5nLApAQCAtNjcxNyw2ICs2OTE4LDcgQEAKIHByaW50ZigiICAgICB1bmljb2RlICAgICAgICBVbmljb2RlIGFuZCBVVEYgc3VwcG9ydCBlbmFibGVkIFswLCAxXVxuIik7CiBwcmludGYoIiAgLWQgICAgICAgICAgICBzZXQgZGVmYXVsdCBwYXR0ZXJuIGNvbnRyb2wgJ2RlYnVnJ1xuIik7CiBwcmludGYoIiAgLWRmYSAgICAgICAgICBzZXQgZGVmYXVsdCBzdWJqZWN0IGNvbnRyb2wgJ2RmYSdcbiIpOworcHJpbnRmKCIgIC1lcnJvciA8bixtLC4uPiAgc2hvdyBtZXNzYWdlcyBmb3IgZXJyb3IgbnVtYmVycywgdGhlbiBleGl0XG4iKTsKIHByaW50ZigiICAtaGVscCAgICAgICAgIHNob3cgdXNhZ2UgaW5mb3JtYXRpb25cbiIpOwogcHJpbnRmKCIgIC1pICAgICAgICAgICAgc2V0IGRlZmF1bHQgcGF0dGVybiBjb250cm9sICdpbmZvJ1xuIik7CiBwcmludGYoIiAgLWppdCAgICAgICAgICBzZXQgZGVmYXVsdCBwYXR0ZXJuIGNvbnRyb2wgJ2ppdCdcbiIpOwpAQCAtNjg5NCw2ICs3MDk2LDcgQEAKIEJPT0wgc2tpcHBpbmcgPSBGQUxTRTsKIGNoYXIgKmFyZ19zdWJqZWN0ID0gTlVMTDsKIGNoYXIgKmFyZ19wYXR0ZXJuID0gTlVMTDsKK2NoYXIgKmFyZ19lcnJvciA9IE5VTEw7CiAKIC8qIFRoZSBvZmZzZXRzIHRvIHRoZSBvcHRpb25zIGFuZCBjb250cm9sIGJpdHMgZmllbGRzIG9mIHRoZSBwYXR0ZXJuIGFuZCBkYXRhCiBjb250cm9sIGJsb2NrcyBtdXN0IGJlIHRoZSBzYW1lIHNvIHRoYXQgY29tbW9uIG9wdGlvbnMgYW5kIGNvbnRyb2xzIHN1Y2ggYXMKQEAgLTcwMjEsNyArNzIyNCw3IEBACiAgICAgc3RydWN0IHJsaW1pdCBybGltOwogICAgIGlmIChVMzJPVkVSRkxPVyh1bGkpKQogICAgICAgewotICAgICAgZnByaW50ZihzdGRlcnIsICIrKysgQXJndW1lbnQgZm9yIC1TIGlzIHRvbyBiaWdcbiIpOworICAgICAgZnByaW50ZihzdGRlcnIsICIqKiBBcmd1bWVudCBmb3IgLVMgaXMgdG9vIGJpZ1xuIik7CiAgICAgICBleGl0KDEpOwogICAgICAgfQogICAgIHN0YWNrX3NpemUgPSAodWludDMyX3QpdWxpOwpAQCAtNzA3Myw3ICs3Mjc2LDcgQEAKICAgICAgIHsKICAgICAgIGlmIChVMzJPVkVSRkxPVyh1bGkpKQogICAgICAgICB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiKysrIEFyZ3VtZW50IGZvciAlcyBpcyB0b28gYmlnXG4iLCBhcmcpOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIioqIEFyZ3VtZW50IGZvciAlcyBpcyB0b28gYmlnXG4iLCBhcmcpOwogICAgICAgICBleGl0KDEpOwogICAgICAgICB9CiAgICAgICB0aW1laXRtID0gKGludCl1bGk7CkBAIC03MTA1LDYgKzczMDgsMTIgQEAKICAgLyogVGhlIGZvbGxvd2luZyBvcHRpb25zIHNhdmUgdGhlaXIgZGF0YSBmb3IgcHJvY2Vzc2luZyBvbmNlIHdlIGtub3cgd2hhdAogICB0aGUgcnVubmluZyBtb2RlIGlzLiAqLwogCisgIGVsc2UgaWYgKHN0cmNtcChhcmcsICItZXJyb3IiKSA9PSAwKQorICAgIHsKKyAgICBhcmdfZXJyb3IgPSBhcmd2W29wKzFdOworICAgIGdvdG8gQ0hFQ0tfVkFMVUVfRVhJU1RTOworICAgIH0KKwogICBlbHNlIGlmIChzdHJjbXAoYXJnLCAiLXN1YmplY3QiKSA9PSAwKQogICAgIHsKICAgICBhcmdfc3ViamVjdCA9IGFyZ3Zbb3ArMV07CkBAIC03MTM4LDYgKzczNDcsODggQEAKICAgYXJnYy0tOwogICB9CiAKKy8qIElmIC1lcnJvciB3YXMgcHJlc2VudCwgZ2V0IHRoZSBlcnJvciBudW1iZXJzLCBzaG93IHRoZSBtZXNzYWdlcywgYW5kIGV4aXQuCitXZSB3YWl0IHRvIGRvIHRoaXMgdW50aWwgd2Uga25vdyB3aGljaCBtb2RlIHdlIGFyZSBpbi4gKi8KKworaWYgKGFyZ19lcnJvciAhPSBOVUxMKQorICB7CisgIGludCBsZW47CisgIGludCBlcnJjb2RlOworICBjaGFyICplbmRwdHI7CisKKy8qIEVuc3VyZSB0aGUgcmVsZXZhbnQgbm9uLTgtYml0IGJ1ZmZlciBpcyBhdmFpbGFibGUuICovCisKKyNpZmRlZiBTVVBQT1JUX1BDUkUyXzE2CisgIGlmICh0ZXN0X21vZGUgPT0gUENSRTE2X01PREUpCisgICAgeworICAgIHBidWZmZXIxNl9zaXplID0gMjU2OworICAgIHBidWZmZXIxNiA9ICh1aW50MTZfdCAqKW1hbGxvYyhwYnVmZmVyMTZfc2l6ZSk7CisgICAgaWYgKHBidWZmZXIxNiA9PSBOVUxMKQorICAgICAgeworICAgICAgZnByaW50ZihzdGRlcnIsICJwY3JlMnRlc3Q6IG1hbGxvYyglbHUpIGZhaWxlZCBmb3IgcGJ1ZmZlcjE2XG4iLAorICAgICAgICAodW5zaWduZWQgbG9uZyBpbnQpcGJ1ZmZlcjE2X3NpemUpOworICAgICAgeWllbGQgPSAxOworICAgICAgZ290byBFWElUOworICAgICAgfQorICAgIH0KKyNlbmRpZgorCisjaWZkZWYgU1VQUE9SVF9QQ1JFMl8zMgorICBpZiAodGVzdF9tb2RlID09IFBDUkUzMl9NT0RFKQorICAgIHsKKyAgICBwYnVmZmVyMzJfc2l6ZSA9IDI1NjsKKyAgICBwYnVmZmVyMzIgPSAodWludDMyX3QgKiltYWxsb2MocGJ1ZmZlcjMyX3NpemUpOworICAgIGlmIChwYnVmZmVyMzIgPT0gTlVMTCkKKyAgICAgIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAicGNyZTJ0ZXN0OiBtYWxsb2MoJWx1KSBmYWlsZWQgZm9yIHBidWZmZXIzMlxuIiwKKyAgICAgICAgKHVuc2lnbmVkIGxvbmcgaW50KXBidWZmZXIzMl9zaXplKTsKKyAgICAgIHlpZWxkID0gMTsKKyAgICAgIGdvdG8gRVhJVDsKKyAgICAgIH0KKyAgICB9CisjZW5kaWYKKworICAvKiBMb29wIGFsb25nIGEgbGlzdCBvZiBlcnJvciBudW1iZXJzLiAqLworCisgIGZvciAoOzspCisgICAgeworICAgIGVycmNvZGUgPSBzdHJ0b2woYXJnX2Vycm9yLCAmZW5kcHRyLCAxMCk7CisgICAgaWYgKCplbmRwdHIgIT0gMCAmJiAqZW5kcHRyICE9IENIQVJfQ09NTUEpCisgICAgICB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgIioqICclcycgaXMgbm90IGEgdmFsaWQgZXJyb3IgbnVtYmVyIGxpc3RcbiIsIGFyZ19lcnJvcik7CisgICAgICB5aWVsZCA9IDE7CisgICAgICBnb3RvIEVYSVQ7CisgICAgICB9CisgICAgcHJpbnRmKCJFcnJvciAlZDogIiwgZXJyY29kZSk7CisgICAgUENSRTJfR0VUX0VSUk9SX01FU1NBR0UobGVuLCBlcnJjb2RlLCBwYnVmZmVyKTsKKyAgICBpZiAobGVuIDwgMCkKKyAgICAgIHsKKyAgICAgIHN3aXRjaCAobGVuKQorICAgICAgICB7CisgICAgICAgIGNhc2UgUENSRTJfRVJST1JfQkFEREFUQToKKyAgICAgICAgcHJpbnRmKCJQQ1JFMl9FUlJPUl9CQUREQVRBICh1bmtub3duIGVycm9yIG51bWJlcikiKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBQQ1JFMl9FUlJPUl9OT01FTU9SWToKKyAgICAgICAgcHJpbnRmKCJQQ1JFMl9FUlJPUl9OT01FTU9SWSAoYnVmZmVyIHRvbyBzbWFsbCkiKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgcHJpbnRmKCJVbmV4cGVjdGVkIHJldHVybiAoJWQpIGZyb20gcGNyZTJfZ2V0X2Vycm9yX21lc3NhZ2UoKSIsIGxlbik7CisgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9CisgICAgZWxzZQorICAgICAgeworICAgICAgUENIQVJTVihDQVNUVkFSKHZvaWQgKiwgcGJ1ZmZlciksIDAsIGxlbiwgRkFMU0UsIHN0ZG91dCk7CisgICAgICB9CisgICAgcHJpbnRmKCJcbiIpOworICAgIGlmICgqZW5kcHRyID09IDApIGdvdG8gRVhJVDsKKyAgICBhcmdfZXJyb3IgPSBlbmRwdHIgKyAxOworICAgIH0KKyAgLyogQ29udHJvbCBuZXZlciByZWFjaGVzIGhlcmUgKi8KKyAgfSAgLyogRW5kIG9mIC1lcnJvciBoYW5kbGluZyAqLworCiAvKiBJbml0aWFsaXplIHRoaW5ncyB0aGF0IGNhbm5vdCBiZSBkb25lIHVudGlsIHdlIGtub3cgd2hpY2ggdGVzdCBtb2RlIHdlIGFyZQogcnVubmluZyBpbi4gV2hlbiBIRUFQX01BVENIX1JFQ1VSU0UgaXMgdW5kZWZpbmVkLCBjYWxsaW5nIHBjcmUyX3NldF9yZWN1cnNpb25fCiBtZW1vcnlfbWFuYWdlbWVudCgpIGlzIGEgbm8tb3AsIGJ1dCB3ZSBjYWxsIGl0IGluIG9yZGVyIHRvIGV4ZXJjaXNlIGl0LiBBbHNvCkBAIC03Mzk4LDcgKzc2ODksNyBAQAogI2lmZGVmIFNVUFBPUlRfUENSRTJfOAogI3VuZGVmIEJJVFMKICNkZWZpbmUgQklUUyA4Ci1yZWdmcmVlKCZwcmVnKTsKK2lmIChwcmVnLnJlX3BjcmUyX2NvZGUgIT0gTlVMTCkgcmVnZnJlZSgmcHJlZyk7CiBGUkVFQ09OVEVYVFM7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZGlzdDIvc3JjL3Nsaml0L3Nsaml0Q29uZmlnLmggYi9kaXN0Mi9zcmMvc2xqaXQvc2xqaXRDb25maWcuaAppbmRleCAxYzhhNTIxLi5hNTQ4YzM3IDEwMDY0NAotLS0gYS9kaXN0Mi9zcmMvc2xqaXQvc2xqaXRDb25maWcuaAorKysgYi9kaXN0Mi9zcmMvc2xqaXQvc2xqaXRDb25maWcuaApAQCAtODIsNyArODIsNyBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIC8qIElmIFNMSklUX1NURF9NQUNST1NfREVGSU5FRCBpcyBub3QgZGVmaW5lZCwgdGhlIGFwcGxpY2F0aW9uIHNob3VsZAotICAgZGVmaW5lIFNMSklUX01BTExPQywgU0xKSVRfRlJFRSwgU0xKSVRfTUVNTU9WRSwgYW5kIE5VTEwuICovCisgICBkZWZpbmUgU0xKSVRfTUFMTE9DLCBTTEpJVF9GUkVFLCBTTEpJVF9NRU1DUFksIGFuZCBOVUxMLiAqLwogI2lmbmRlZiBTTEpJVF9TVERfTUFDUk9TX0RFRklORUQKIC8qIERpc2FibGVkIGJ5IGRlZmF1bHQuICovCiAjZGVmaW5lIFNMSklUX1NURF9NQUNST1NfREVGSU5FRCAwCmRpZmYgLS1naXQgYS9kaXN0Mi9zcmMvc2xqaXQvc2xqaXRDb25maWdJbnRlcm5hbC5oIGIvZGlzdDIvc3JjL3Nsaml0L3Nsaml0Q29uZmlnSW50ZXJuYWwuaAppbmRleCAxNmUzNTQ3Li41NjZjMzY4IDEwMDY0NAotLS0gYS9kaXN0Mi9zcmMvc2xqaXQvc2xqaXRDb25maWdJbnRlcm5hbC5oCisrKyBiL2Rpc3QyL3NyYy9zbGppdC9zbGppdENvbmZpZ0ludGVybmFsLmgKQEAgLTMxLDE0ICszMSwxNCBAQAogICAgU0xKSVQgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGFyY2hpdGVjdHVyZSBkZXBlbmRlbnQgdHlwZXMgYW5kIG1hY3JvczoKIAogICAgVHlwZXM6Ci0gICAgIHNsaml0X3NiLCBzbGppdF91YiA6IHNpZ25lZCBhbmQgdW5zaWduZWQgOCBiaXQgYnl0ZQotICAgICBzbGppdF9zaCwgc2xqaXRfdWggOiBzaWduZWQgYW5kIHVuc2lnbmVkIDE2IGJpdCBoYWxmLXdvcmQgKHNob3J0KSB0eXBlCi0gICAgIHNsaml0X3NpLCBzbGppdF91aSA6IHNpZ25lZCBhbmQgdW5zaWduZWQgMzIgYml0IGludGVnZXIgdHlwZQotICAgICBzbGppdF9zdywgc2xqaXRfdXcgOiBzaWduZWQgYW5kIHVuc2lnbmVkIG1hY2hpbmUgd29yZCwgZW5vdWdoIHRvIHN0b3JlIGEgcG9pbnRlcgotICAgICBzbGppdF9wIDogdW5zZ2luZWQgcG9pbnRlciB2YWx1ZSAodXN1YWxseSB0aGUgc2FtZSBhcyBzbGppdF91dywgYnV0Ci0gICAgICAgICAgICAgICBzb21lIDY0IGJpdCBBQklzIG1heSB1c2UgMzIgYml0IHBvaW50ZXJzKQotICAgICBzbGppdF9zIDogc2luZ2xlIHByZWNpc2lvbiBmbG9hdGluZyBwb2ludCB2YWx1ZQotICAgICBzbGppdF9kIDogZG91YmxlIHByZWNpc2lvbiBmbG9hdGluZyBwb2ludCB2YWx1ZQorICAgICBzbGppdF9zOCwgc2xqaXRfdTggICA6IHNpZ25lZCBhbmQgdW5zaWduZWQgOCBiaXQgaW50ZWdlciB0eXBlCisgICAgIHNsaml0X3MxNiwgc2xqaXRfdTE2IDogc2lnbmVkIGFuZCB1bnNpZ25lZCAxNiBiaXQgaW50ZWdlciB0eXBlCisgICAgIHNsaml0X3MzMiwgc2xqaXRfdTMyIDogc2lnbmVkIGFuZCB1bnNpZ25lZCAzMiBiaXQgaW50ZWdlciB0eXBlCisgICAgIHNsaml0X3N3LCBzbGppdF91dyAgIDogc2lnbmVkIGFuZCB1bnNpZ25lZCBtYWNoaW5lIHdvcmQsIGVub3VnaCB0byBzdG9yZSBhIHBvaW50ZXIKKyAgICAgc2xqaXRfcCAgICAgICAgICAgICAgOiB1bnNnaW5lZCBwb2ludGVyIHZhbHVlICh1c3VhbGx5IHRoZSBzYW1lIGFzIHNsaml0X3V3LCBidXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb21lIDY0IGJpdCBBQklzIG1heSB1c2UgMzIgYml0IHBvaW50ZXJzKQorICAgICBzbGppdF9mMzIgICAgICAgICAgICA6IDMyIGJpdCBzaW5nbGUgcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IHZhbHVlCisgICAgIHNsaml0X2Y2NCAgICAgICAgICAgIDogNjQgYml0IGRvdWJsZSBwcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgdmFsdWUKIAogICAgTWFjcm9zIGZvciBmZWF0dXJlIGRldGVjdGlvbiAoYm9vbGVhbik6CiAgICAgIFNMSklUXzMyQklUX0FSQ0hJVEVDVFVSRSA6IDMyIGJpdCBhcmNoaXRlY3R1cmUKQEAgLTU2LDEwICs1NiwxMCBAQAogICAgICBTTEpJVF9OVU1CRVJfT0ZfU0NSQVRDSF9GTE9BVF9SRUdJU1RFUlMgOiBudW1iZXIgb2YgYXZhaWxhYmxlIGZsb2F0aW5nIHBvaW50IHNjcmF0Y2ggcmVnaXN0ZXJzCiAgICAgIFNMSklUX05VTUJFUl9PRl9TQVZFRF9GTE9BVF9SRUdJU1RFUlMgOiBudW1iZXIgb2YgYXZhaWxhYmxlIGZsb2F0aW5nIHBvaW50IHNhdmVkIHJlZ2lzdGVycwogICAgICBTTEpJVF9XT1JEX1NISUZUIDogdGhlIHNoaWZ0IHJlcXVpcmVkIHRvIGFwcGx5IHdoZW4gYWNjZXNzaW5nIGEgc2xqaXRfc3cvc2xqaXRfdXcgYXJyYXkgYnkgaW5kZXgKLSAgICAgU0xKSVRfRE9VQkxFX1NISUZUIDogdGhlIHNoaWZ0IHJlcXVpcmVkIHRvIGFwcGx5IHdoZW4gYWNjZXNzaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGEgZG91YmxlIHByZWNpc2lvbiBmbG9hdGluZyBwb2ludCBhcnJheSBieSBpbmRleAotICAgICBTTEpJVF9TSU5HTEVfU0hJRlQgOiB0aGUgc2hpZnQgcmVxdWlyZWQgdG8gYXBwbHkgd2hlbiBhY2Nlc3NpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYSBzaW5nbGUgcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IGFycmF5IGJ5IGluZGV4CisgICAgIFNMSklUX0YzMl9TSElGVCA6IHRoZSBzaGlmdCByZXF1aXJlZCB0byBhcHBseSB3aGVuIGFjY2Vzc2luZworICAgICAgICAgICAgICAgICAgICAgICBhIHNpbmdsZSBwcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgYXJyYXkgYnkgaW5kZXgKKyAgICAgU0xKSVRfRjY0X1NISUZUIDogdGhlIHNoaWZ0IHJlcXVpcmVkIHRvIGFwcGx5IHdoZW4gYWNjZXNzaW5nCisgICAgICAgICAgICAgICAgICAgICAgIGEgZG91YmxlIHByZWNpc2lvbiBmbG9hdGluZyBwb2ludCBhcnJheSBieSBpbmRleAogICAgICBTTEpJVF9MT0NBTFNfT0ZGU0VUIDogbG9jYWwgc3BhY2Ugc3RhcnRpbmcgb2Zmc2V0IChTTEpJVF9TUCArIFNMSklUX0xPQ0FMU19PRkZTRVQpCiAgICAgIFNMSklUX1JFVFVSTl9BRERSRVNTX09GRlNFVCA6IGEgcmV0dXJuIGluc3RydWN0aW9uIGFsd2F5cyBhZGRzIHRoaXMgb2Zmc2V0IHRvIHRoZSByZXR1cm4gYWRkcmVzcwogCkBAIC0yMTAsOCArMjEwLDggQEAKICNkZWZpbmUgU0xKSVRfRlJFRShwdHIsIGFsbG9jYXRvcl9kYXRhKSBmcmVlKHB0cikKICNlbmRpZgogCi0jaWZuZGVmIFNMSklUX01FTU1PVkUKLSNkZWZpbmUgU0xKSVRfTUVNTU9WRShkZXN0LCBzcmMsIGxlbikgbWVtbW92ZShkZXN0LCBzcmMsIGxlbikKKyNpZm5kZWYgU0xKSVRfTUVNQ1BZCisjZGVmaW5lIFNMSklUX01FTUNQWShkZXN0LCBzcmMsIGxlbikgbWVtY3B5KGRlc3QsIHNyYywgbGVuKQogI2VuZGlmCiAKICNpZm5kZWYgU0xKSVRfWkVST01FTQpAQCAtMjUyLDExICsyNTIsNiBAQAogI2VuZGlmCiAjZW5kaWYgLyogIVNMSklUX0lOTElORSAqLwogCi0jaWZuZGVmIFNMSklUX0NPTlNUCi0vKiBDb25zdCB2YXJpYWJsZXMuICovCi0jZGVmaW5lIFNMSklUX0NPTlNUIGNvbnN0Ci0jZW5kaWYKLQogI2lmbmRlZiBTTEpJVF9VTlVTRURfQVJHCiAvKiBVbnVzZWQgYXJndW1lbnRzLiAqLwogI2RlZmluZSBTTEpJVF9VTlVTRURfQVJHKGFyZykgKHZvaWQpYXJnCkBAIC0yODQsNiArMjc5LDE1IEBACiAvKiBJbnN0cnVjdGlvbiBjYWNoZSBmbHVzaC4gKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCisjaWYgKCFkZWZpbmVkIFNMSklUX0NBQ0hFX0ZMVVNIICYmIGRlZmluZWQgX19oYXNfYnVpbHRpbikKKyNpZiBfX2hhc19idWlsdGluKF9fYnVpbHRpbl9fX2NsZWFyX2NhY2hlKQorCisjZGVmaW5lIFNMSklUX0NBQ0hFX0ZMVVNIKGZyb20sIHRvKSBcCisJX19idWlsdGluX19fY2xlYXJfY2FjaGUoKGNoYXIqKWZyb20sIChjaGFyKil0bykKKworI2VuZGlmIC8qIF9faGFzX2J1aWx0aW4oX19idWlsdGluX19fY2xlYXJfY2FjaGUpICovCisjZW5kaWYgLyogKCFkZWZpbmVkIFNMSklUX0NBQ0hFX0ZMVVNIICYmIGRlZmluZWQgX19oYXNfYnVpbHRpbikgKi8KKwogI2lmbmRlZiBTTEpJVF9DQUNIRV9GTFVTSAogCiAjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1g4NiAmJiBTTEpJVF9DT05GSUdfWDg2KQpAQCAtMzAwLDYgKzMwNCwxMSBAQAogI2RlZmluZSBTTEpJVF9DQUNIRV9GTFVTSChmcm9tLCB0bykgXAogCXN5c19pY2FjaGVfaW52YWxpZGF0ZSgoY2hhciopKGZyb20pLCAoY2hhciopKHRvKSAtIChjaGFyKikoZnJvbSkpCiAKKyNlbGlmIChkZWZpbmVkKF9fR05VQ19fKSAmJiAoX19HTlVDX18gPj0gNSB8fCAoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA+PSAzKSkpCisKKyNkZWZpbmUgU0xKSVRfQ0FDSEVfRkxVU0goZnJvbSwgdG8pIFwKKwlfX2J1aWx0aW5fX19jbGVhcl9jYWNoZSgoY2hhciopZnJvbSwgKGNoYXIqKXRvKQorCiAjZWxpZiBkZWZpbmVkIF9fQU5EUk9JRF9fCiAKIC8qIEFuZHJvaWQgbGFja3MgX19jbGVhcl9jYWNoZTsgaW5zdGVhZCwgY2FjaGVmbHVzaCBzaG91bGQgYmUgdXNlZC4gKi8KQEAgLTMxMiwxMiArMzIxLDE0IEBACiAvKiBUaGUgX19jbGVhcl9jYWNoZSgpIGltcGxlbWVudGF0aW9uIG9mIEdDQyBpcyBhIGR1bW15IGZ1bmN0aW9uIG9uIFBvd2VyUEMuICovCiAjZGVmaW5lIFNMSklUX0NBQ0hFX0ZMVVNIKGZyb20sIHRvKSBcCiAJcHBjX2NhY2hlX2ZsdXNoKChmcm9tKSwgKHRvKSkKKyNkZWZpbmUgU0xKSVRfQ0FDSEVfRkxVU0hfT1dOX0lNUEwgMQogCiAjZWxpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfU1BBUkNfMzIgJiYgU0xKSVRfQ09ORklHX1NQQVJDXzMyKQogCiAvKiBUaGUgX19jbGVhcl9jYWNoZSgpIGltcGxlbWVudGF0aW9uIG9mIEdDQyBpcyBhIGR1bW15IGZ1bmN0aW9uIG9uIFNwYXJjLiAqLwogI2RlZmluZSBTTEpJVF9DQUNIRV9GTFVTSChmcm9tLCB0bykgXAogCXNwYXJjX2NhY2hlX2ZsdXNoKChmcm9tKSwgKHRvKSkKKyNkZWZpbmUgU0xKSVRfQ0FDSEVfRkxVU0hfT1dOX0lNUEwgMQogCiAjZWxzZQogCkBAIC0zMzAsMjAgKzM0MSwyMCBAQAogI2VuZGlmIC8qICFTTEpJVF9DQUNIRV9GTFVTSCAqLwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogQnl0ZS9oYWxmL2ludC93b3JkL3NpbmdsZS9kb3VibGUgdHlwZSBkZWZpbml0aW9ucy4gKi8KKy8qICAgIEludGVnZXIgYW5kIGZsb2F0aW5nIHBvaW50IHR5cGUgZGVmaW5pdGlvbnMuICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKiA4IGJpdCBieXRlIHR5cGUuICovCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIgc2xqaXRfdWI7Ci10eXBlZGVmIHNpZ25lZCBjaGFyIHNsaml0X3NiOwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIHNsaml0X3U4OwordHlwZWRlZiBzaWduZWQgY2hhciBzbGppdF9zODsKIAogLyogMTYgYml0IGhhbGYtd29yZCB0eXBlLiAqLwotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgc2xqaXRfdWg7Ci10eXBlZGVmIHNpZ25lZCBzaG9ydCBpbnQgc2xqaXRfc2g7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBzbGppdF91MTY7Cit0eXBlZGVmIHNpZ25lZCBzaG9ydCBpbnQgc2xqaXRfczE2OwogCiAvKiAzMiBiaXQgaW50ZWdlciB0eXBlLiAqLwotdHlwZWRlZiB1bnNpZ25lZCBpbnQgc2xqaXRfdWk7Ci10eXBlZGVmIHNpZ25lZCBpbnQgc2xqaXRfc2k7Cit0eXBlZGVmIHVuc2lnbmVkIGludCBzbGppdF91MzI7Cit0eXBlZGVmIHNpZ25lZCBpbnQgc2xqaXRfczMyOwogCiAvKiBNYWNoaW5lIHdvcmQgdHlwZS4gRW5vdWdoIGZvciBzdG9yaW5nIGEgcG9pbnRlci4KICAgICAgMzIgYml0IGZvciAzMiBiaXQgbWFjaGluZXMuCkBAIC0zNzcsMTUgKzM4OCwxNSBAQAogdHlwZWRlZiBzbGppdF91dyBzbGppdF9wOwogCiAvKiBGbG9hdGluZyBwb2ludCB0eXBlcy4gKi8KLXR5cGVkZWYgZmxvYXQgc2xqaXRfczsKLXR5cGVkZWYgZG91YmxlIHNsaml0X2Q7Cit0eXBlZGVmIGZsb2F0IHNsaml0X2YzMjsKK3R5cGVkZWYgZG91YmxlIHNsaml0X2Y2NDsKIAogLyogU2hpZnQgZm9yIHBvaW50ZXIgc2l6ZWQgZGF0YS4gKi8KICNkZWZpbmUgU0xKSVRfUE9JTlRFUl9TSElGVCBTTEpJVF9XT1JEX1NISUZUCiAKIC8qIFNoaWZ0IGZvciBkb3VibGUgcHJlY2lzaW9uIHNpemVkIGRhdGEuICovCi0jZGVmaW5lIFNMSklUX0RPVUJMRV9TSElGVCAzCi0jZGVmaW5lIFNMSklUX1NJTkdMRV9TSElGVCAyCisjZGVmaW5lIFNMSklUX0YzMl9TSElGVCAyCisjZGVmaW5lIFNMSklUX0Y2NF9TSElGVCAzCiAKICNpZm5kZWYgU0xKSVRfVwogCmRpZmYgLS1naXQgYS9kaXN0Mi9zcmMvc2xqaXQvc2xqaXRFeGVjQWxsb2NhdG9yLmMgYi9kaXN0Mi9zcmMvc2xqaXQvc2xqaXRFeGVjQWxsb2NhdG9yLmMKaW5kZXggZjI0ZWQzMy4uNTRmMDVmNSAxMDA2NDQKLS0tIGEvZGlzdDIvc3JjL3Nsaml0L3Nsaml0RXhlY0FsbG9jYXRvci5jCisrKyBiL2Rpc3QyL3NyYy9zbGppdC9zbGppdEV4ZWNBbGxvY2F0b3IuYwpAQCAtMTM3LDEwICsxMzcsMTAgQEAKIH07CiAKICNkZWZpbmUgQVNfQkxPQ0tfSEVBREVSKGJhc2UsIG9mZnNldCkgXAotCSgoc3RydWN0IGJsb2NrX2hlYWRlciopKCgoc2xqaXRfdWIqKWJhc2UpICsgb2Zmc2V0KSkKKwkoKHN0cnVjdCBibG9ja19oZWFkZXIqKSgoKHNsaml0X3U4KiliYXNlKSArIG9mZnNldCkpCiAjZGVmaW5lIEFTX0ZSRUVfQkxPQ0soYmFzZSwgb2Zmc2V0KSBcCi0JKChzdHJ1Y3QgZnJlZV9ibG9jayopKCgoc2xqaXRfdWIqKWJhc2UpICsgb2Zmc2V0KSkKLSNkZWZpbmUgTUVNX1NUQVJUKGJhc2UpCQkoKHZvaWQqKSgoKHNsaml0X3ViKiliYXNlKSArIHNpemVvZihzdHJ1Y3QgYmxvY2tfaGVhZGVyKSkpCisJKChzdHJ1Y3QgZnJlZV9ibG9jayopKCgoc2xqaXRfdTgqKWJhc2UpICsgb2Zmc2V0KSkKKyNkZWZpbmUgTUVNX1NUQVJUKGJhc2UpCQkoKHZvaWQqKSgoKHNsaml0X3U4KiliYXNlKSArIHNpemVvZihzdHJ1Y3QgYmxvY2tfaGVhZGVyKSkpCiAjZGVmaW5lIEFMSUdOX1NJWkUoc2l6ZSkJKCgoc2l6ZSkgKyBzaXplb2Yoc3RydWN0IGJsb2NrX2hlYWRlcikgKyA3KSAmIH43KQogCiBzdGF0aWMgc3RydWN0IGZyZWVfYmxvY2sqIGZyZWVfYmxvY2tzOwpAQCAtMTUzLDcgKzE1Myw3IEBACiAJZnJlZV9ibG9jay0+c2l6ZSA9IHNpemU7CiAKIAlmcmVlX2Jsb2NrLT5uZXh0ID0gZnJlZV9ibG9ja3M7Ci0JZnJlZV9ibG9jay0+cHJldiA9IDA7CisJZnJlZV9ibG9jay0+cHJldiA9IE5VTEw7CiAJaWYgKGZyZWVfYmxvY2tzKQogCQlmcmVlX2Jsb2Nrcy0+cHJldiA9IGZyZWVfYmxvY2s7CiAJZnJlZV9ibG9ja3MgPSBmcmVlX2Jsb2NrOwpkaWZmIC0tZ2l0IGEvZGlzdDIvc3JjL3Nsaml0L3Nsaml0TGlyLmMgYi9kaXN0Mi9zcmMvc2xqaXQvc2xqaXRMaXIuYwppbmRleCAwZjFiMWM5Li5lYzE3ODFlIDEwMDY0NAotLS0gYS9kaXN0Mi9zcmMvc2xqaXQvc2xqaXRMaXIuYworKysgYi9kaXN0Mi9zcmMvc2xqaXQvc2xqaXRMaXIuYwpAQCAtNzcsMTYgKzc3LDE2IEBACiAjaWYgIShkZWZpbmVkIFNMSklUX0NPTkZJR19VTlNVUFBPUlRFRCAmJiBTTEpJVF9DT05GSUdfVU5TVVBQT1JURUQpCiAKICNkZWZpbmUgR0VUX09QQ09ERShvcCkgXAotCSgob3ApICYgfihTTEpJVF9JTlRfT1AgfCBTTEpJVF9TRVRfRSB8IFNMSklUX1NFVF9VIHwgU0xKSVRfU0VUX1MgfCBTTEpJVF9TRVRfTyB8IFNMSklUX1NFVF9DIHwgU0xKSVRfS0VFUF9GTEFHUykpCisJKChvcCkgJiB+KFNMSklUX0kzMl9PUCB8IFNMSklUX1NFVF9FIHwgU0xKSVRfU0VUX1UgfCBTTEpJVF9TRVRfUyB8IFNMSklUX1NFVF9PIHwgU0xKSVRfU0VUX0MgfCBTTEpJVF9LRUVQX0ZMQUdTKSkKIAogI2RlZmluZSBHRVRfRkxBR1Mob3ApIFwKIAkoKG9wKSAmIChTTEpJVF9TRVRfRSB8IFNMSklUX1NFVF9VIHwgU0xKSVRfU0VUX1MgfCBTTEpJVF9TRVRfTyB8IFNMSklUX1NFVF9DKSkKIAogI2RlZmluZSBHRVRfQUxMX0ZMQUdTKG9wKSBcCi0JKChvcCkgJiAoU0xKSVRfSU5UX09QIHwgU0xKSVRfU0VUX0UgfCBTTEpJVF9TRVRfVSB8IFNMSklUX1NFVF9TIHwgU0xKSVRfU0VUX08gfCBTTEpJVF9TRVRfQyB8IFNMSklUX0tFRVBfRkxBR1MpKQorCSgob3ApICYgKFNMSklUX0kzMl9PUCB8IFNMSklUX1NFVF9FIHwgU0xKSVRfU0VUX1UgfCBTTEpJVF9TRVRfUyB8IFNMSklUX1NFVF9PIHwgU0xKSVRfU0VUX0MgfCBTTEpJVF9LRUVQX0ZMQUdTKSkKIAogI2RlZmluZSBUWVBFX0NBU1RfTkVFREVEKG9wKSBcCi0JKCgob3ApID49IFNMSklUX01PVl9VQiAmJiAob3ApIDw9IFNMSklUX01PVl9TSCkgfHwgKChvcCkgPj0gU0xKSVRfTU9WVV9VQiAmJiAob3ApIDw9IFNMSklUX01PVlVfU0gpKQorCSgoKG9wKSA+PSBTTEpJVF9NT1ZfVTggJiYgKG9wKSA8PSBTTEpJVF9NT1ZfUzE2KSB8fCAoKG9wKSA+PSBTTEpJVF9NT1ZVX1U4ICYmIChvcCkgPD0gU0xKSVRfTU9WVV9TMTYpKQogCiAjZGVmaW5lIEJVRl9TSVpFCTQwOTYKIApAQCAtMjU3LDcgKzI1Nyw3IEBACiAJCQlyZXR1cm4gMTsgXAogCX0gd2hpbGUgKDApCiAKLSNkZWZpbmUgQ0hFQ0tfUkVUVVJOX1RZUEUgc2xqaXRfc2kKKyNkZWZpbmUgQ0hFQ0tfUkVUVVJOX1RZUEUgc2xqaXRfczMyCiAjZGVmaW5lIENIRUNLX1JFVFVSTl9PSyByZXR1cm4gMAogCiAjZGVmaW5lIENIRUNLKHgpIFwKQEAgLTMyMCw3ICszMjAsNyBAQAogCiAjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX0FSTV9WNSAmJiBTTEpJVF9DT05GSUdfQVJNX1Y1KSB8fCAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2ICYmIFNMSklUX0NPTkZJR19YODYpCiAjZGVmaW5lIFNMSklUX05FRURTX0NPTVBJTEVSX0lOSVQgMQotc3RhdGljIHNsaml0X3NpIGNvbXBpbGVyX2luaXRpYWxpemVkID0gMDsKK3N0YXRpYyBzbGppdF9zMzIgY29tcGlsZXJfaW5pdGlhbGl6ZWQgPSAwOwogLyogQSB0aHJlYWQgc2FmZSBpbml0aWFsaXphdGlvbi4gKi8KIHN0YXRpYyB2b2lkIGluaXRfY29tcGlsZXIodm9pZCk7CiAjZW5kaWYKQEAgLTMzMywxNyArMzMzLDE3IEBACiAJU0xKSVRfWkVST01FTShjb21waWxlciwgc2l6ZW9mKHN0cnVjdCBzbGppdF9jb21waWxlcikpOwogCiAJU0xKSVRfQ09NUElMRV9BU1NFUlQoCi0JCXNpemVvZihzbGppdF9zYikgPT0gMSAmJiBzaXplb2Yoc2xqaXRfdWIpID09IDEKLQkJJiYgc2l6ZW9mKHNsaml0X3NoKSA9PSAyICYmIHNpemVvZihzbGppdF91aCkgPT0gMgotCQkmJiBzaXplb2Yoc2xqaXRfc2kpID09IDQgJiYgc2l6ZW9mKHNsaml0X3VpKSA9PSA0CisJCXNpemVvZihzbGppdF9zOCkgPT0gMSAmJiBzaXplb2Yoc2xqaXRfdTgpID09IDEKKwkJJiYgc2l6ZW9mKHNsaml0X3MxNikgPT0gMiAmJiBzaXplb2Yoc2xqaXRfdTE2KSA9PSAyCisJCSYmIHNpemVvZihzbGppdF9zMzIpID09IDQgJiYgc2l6ZW9mKHNsaml0X3UzMikgPT0gNAogCQkmJiAoc2l6ZW9mKHNsaml0X3ApID09IDQgfHwgc2l6ZW9mKHNsaml0X3ApID09IDgpCiAJCSYmIHNpemVvZihzbGppdF9wKSA8PSBzaXplb2Yoc2xqaXRfc3cpCiAJCSYmIChzaXplb2Yoc2xqaXRfc3cpID09IDQgfHwgc2l6ZW9mKHNsaml0X3N3KSA9PSA4KQogCQkmJiAoc2l6ZW9mKHNsaml0X3V3KSA9PSA0IHx8IHNpemVvZihzbGppdF91dykgPT0gOCksCiAJCWludmFsaWRfaW50ZWdlcl90eXBlcyk7Ci0JU0xKSVRfQ09NUElMRV9BU1NFUlQoU0xKSVRfSU5UX09QID09IFNMSklUX1NJTkdMRV9PUCwKKwlTTEpJVF9DT01QSUxFX0FTU0VSVChTTEpJVF9JMzJfT1AgPT0gU0xKSVRfRjMyX09QLAogCQlpbnRfb3BfYW5kX3NpbmdsZV9vcF9tdXN0X2JlX3RoZV9zYW1lKTsKLQlTTEpJVF9DT01QSUxFX0FTU0VSVChTTEpJVF9SRVdSSVRBQkxFX0pVTVAgIT0gU0xKSVRfU0lOR0xFX09QLAorCVNMSklUX0NPTVBJTEVfQVNTRVJUKFNMSklUX1JFV1JJVEFCTEVfSlVNUCAhPSBTTEpJVF9GMzJfT1AsCiAJCXJld3JpdGFibGVfanVtcF9hbmRfc2luZ2xlX29wX211c3Rfbm90X2JlX3RoZV9zYW1lKTsKIAogCS8qIE9ubHkgdGhlIG5vbi16ZXJvIG1lbWJlcnMgbXVzdCBiZSBzZXQuICovCkBAIC0zNzksMTQgKzM3OSwxNCBAQAogCiAjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX0FSTV9WNSAmJiBTTEpJVF9DT05GSUdfQVJNX1Y1KQogCWNvbXBpbGVyLT5jcG9vbCA9IChzbGppdF91dyopU0xKSVRfTUFMTE9DKENQT09MX1NJWkUgKiBzaXplb2Yoc2xqaXRfdXcpCi0JCSsgQ1BPT0xfU0laRSAqIHNpemVvZihzbGppdF91YiksIGFsbG9jYXRvcl9kYXRhKTsKKwkJKyBDUE9PTF9TSVpFICogc2l6ZW9mKHNsaml0X3U4KSwgYWxsb2NhdG9yX2RhdGEpOwogCWlmICghY29tcGlsZXItPmNwb29sKSB7CiAJCVNMSklUX0ZSRUUoY29tcGlsZXItPmJ1ZiwgYWxsb2NhdG9yX2RhdGEpOwogCQlTTEpJVF9GUkVFKGNvbXBpbGVyLT5hYnVmLCBhbGxvY2F0b3JfZGF0YSk7CiAJCVNMSklUX0ZSRUUoY29tcGlsZXIsIGFsbG9jYXRvcl9kYXRhKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQotCWNvbXBpbGVyLT5jcG9vbF91bmlxdWUgPSAoc2xqaXRfdWIqKShjb21waWxlci0+Y3Bvb2wgKyBDUE9PTF9TSVpFKTsKKwljb21waWxlci0+Y3Bvb2xfdW5pcXVlID0gKHNsaml0X3U4KikoY29tcGlsZXItPmNwb29sICsgQ1BPT0xfU0laRSk7CiAJY29tcGlsZXItPmNwb29sX2RpZmYgPSAweGZmZmZmZmZmOwogI2VuZGlmCiAKQEAgLTQ4NSw3ICs0ODUsNyBAQAogCiBzdGF0aWMgdm9pZCogZW5zdXJlX2J1ZihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF91dyBzaXplKQogewotCXNsaml0X3ViICpyZXQ7CisJc2xqaXRfdTggKnJldDsKIAlzdHJ1Y3Qgc2xqaXRfbWVtb3J5X2ZyYWdtZW50ICpuZXdfZnJhZzsKIAogCVNMSklUX0FTU0VSVChzaXplIDw9IDI1Nik7CkBAIC01MDQsNyArNTA0LDcgQEAKIAogc3RhdGljIHZvaWQqIGVuc3VyZV9hYnVmKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3V3IHNpemUpCiB7Ci0Jc2xqaXRfdWIgKnJldDsKKwlzbGppdF91OCAqcmV0OwogCXN0cnVjdCBzbGppdF9tZW1vcnlfZnJhZ21lbnQgKm5ld19mcmFnOwogCiAJU0xKSVRfQVNTRVJUKHNpemUgPD0gMjU2KTsKQEAgLTUyMSw3ICs1MjEsNyBAQAogCXJldHVybiBuZXdfZnJhZy0+bWVtb3J5OwogfQogCi1TTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgdm9pZCogc2xqaXRfYWxsb2NfbWVtb3J5KHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIHNpemUpCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgdm9pZCogc2xqaXRfYWxsb2NfbWVtb3J5KHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiBzaXplKQogewogCUNIRUNLX0VSUk9SX1BUUigpOwogCkBAIC01NTQsOCArNTU0LDggQEAKIH0KIAogc3RhdGljIFNMSklUX0lOTElORSB2b2lkIHNldF9lbWl0X2VudGVyKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsCi0Jc2xqaXRfc2kgb3B0aW9ucywgc2xqaXRfc2kgYXJncywgc2xqaXRfc2kgc2NyYXRjaGVzLCBzbGppdF9zaSBzYXZlZHMsCi0Jc2xqaXRfc2kgZnNjcmF0Y2hlcywgc2xqaXRfc2kgZnNhdmVkcywgc2xqaXRfc2kgbG9jYWxfc2l6ZSkKKwlzbGppdF9zMzIgb3B0aW9ucywgc2xqaXRfczMyIGFyZ3MsIHNsaml0X3MzMiBzY3JhdGNoZXMsIHNsaml0X3MzMiBzYXZlZHMsCisJc2xqaXRfczMyIGZzY3JhdGNoZXMsIHNsaml0X3MzMiBmc2F2ZWRzLCBzbGppdF9zMzIgbG9jYWxfc2l6ZSkKIHsKIAlTTEpJVF9VTlVTRURfQVJHKGFyZ3MpOwogCVNMSklUX1VOVVNFRF9BUkcobG9jYWxfc2l6ZSk7CkBAIC01NzEsOCArNTcxLDggQEAKIH0KIAogc3RhdGljIFNMSklUX0lOTElORSB2b2lkIHNldF9zZXRfY29udGV4dChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLAotCXNsaml0X3NpIG9wdGlvbnMsIHNsaml0X3NpIGFyZ3MsIHNsaml0X3NpIHNjcmF0Y2hlcywgc2xqaXRfc2kgc2F2ZWRzLAotCXNsaml0X3NpIGZzY3JhdGNoZXMsIHNsaml0X3NpIGZzYXZlZHMsIHNsaml0X3NpIGxvY2FsX3NpemUpCisJc2xqaXRfczMyIG9wdGlvbnMsIHNsaml0X3MzMiBhcmdzLCBzbGppdF9zMzIgc2NyYXRjaGVzLCBzbGppdF9zMzIgc2F2ZWRzLAorCXNsaml0X3MzMiBmc2NyYXRjaGVzLCBzbGppdF9zMzIgZnNhdmVkcywgc2xqaXRfczMyIGxvY2FsX3NpemUpCiB7CiAJU0xKSVRfVU5VU0VEX0FSRyhhcmdzKTsKIAlTTEpJVF9VTlVTRURfQVJHKGxvY2FsX3NpemUpOwpAQCAtNTk4LDcgKzU5OCw3IEBACiAJY29tcGlsZXItPmxhc3RfbGFiZWwgPSBsYWJlbDsKIH0KIAotc3RhdGljIFNMSklUX0lOTElORSB2b2lkIHNldF9qdW1wKHN0cnVjdCBzbGppdF9qdW1wICpqdW1wLCBzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBmbGFncykKK3N0YXRpYyBTTEpJVF9JTkxJTkUgdm9pZCBzZXRfanVtcChzdHJ1Y3Qgc2xqaXRfanVtcCAqanVtcCwgc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIGZsYWdzKQogewogCWp1bXAtPm5leHQgPSBOVUxMOwogCWp1bXAtPmZsYWdzID0gZmxhZ3M7CkBAIC02NTQsMTkgKzY1NCwxOSBAQAogCQlicmVhazsgXAogCWNhc2UgU0xKSVRfQlJFQUtQT0lOVDogXAogCWNhc2UgU0xKSVRfTk9QOiBcCi0JY2FzZSBTTEpJVF9MVU1VTDogXAotCWNhc2UgU0xKSVRfTFNNVUw6IFwKKwljYXNlIFNMSklUX0xNVUxfVVc6IFwKKwljYXNlIFNMSklUX0xNVUxfU1c6IFwKIAljYXNlIFNMSklUX01PVjogXAotCWNhc2UgU0xKSVRfTU9WX1VJOiBcCisJY2FzZSBTTEpJVF9NT1ZfVTMyOiBcCiAJY2FzZSBTTEpJVF9NT1ZfUDogXAogCWNhc2UgU0xKSVRfTU9WVTogXAotCWNhc2UgU0xKSVRfTU9WVV9VSTogXAorCWNhc2UgU0xKSVRfTU9WVV9VMzI6IFwKIAljYXNlIFNMSklUX01PVlVfUDogXAogCQkvKiBOb3RoaW5nIGFsbG93ZWQgKi8gXAotCQlDSEVDS19BUkdVTUVOVCghKG9wICYgKFNMSklUX0lOVF9PUCB8IFNMSklUX1NFVF9FIHwgU0xKSVRfU0VUX1UgfCBTTEpJVF9TRVRfUyB8IFNMSklUX1NFVF9PIHwgU0xKSVRfU0VUX0MgfCBTTEpJVF9LRUVQX0ZMQUdTKSkpOyBcCisJCUNIRUNLX0FSR1VNRU5UKCEob3AgJiAoU0xKSVRfSTMyX09QIHwgU0xKSVRfU0VUX0UgfCBTTEpJVF9TRVRfVSB8IFNMSklUX1NFVF9TIHwgU0xKSVRfU0VUX08gfCBTTEpJVF9TRVRfQyB8IFNMSklUX0tFRVBfRkxBR1MpKSk7IFwKIAkJYnJlYWs7IFwKIAlkZWZhdWx0OiBcCi0JCS8qIE9ubHkgU0xKSVRfSU5UX09QIG9yIFNMSklUX1NJTkdMRV9PUCBpcyBhbGxvd2VkLiAqLyBcCisJCS8qIE9ubHkgU0xKSVRfSTMyX09QIG9yIFNMSklUX0YzMl9PUCBpcyBhbGxvd2VkLiAqLyBcCiAJCUNIRUNLX0FSR1VNRU5UKCEob3AgJiAoU0xKSVRfU0VUX0UgfCBTTEpJVF9TRVRfVSB8IFNMSklUX1NFVF9TIHwgU0xKSVRfU0VUX08gfCBTTEpJVF9TRVRfQyB8IFNMSklUX0tFRVBfRkxBR1MpKSk7IFwKIAkJYnJlYWs7IFwKIAl9CkBAIC02NzQsMTIgKzY3NCwxMiBAQAogI2RlZmluZSBGVU5DVElPTl9DSEVDS19GT1AoKSBcCiAJQ0hFQ0tfQVJHVU1FTlQoIUdFVF9GTEFHUyhvcCkgfHwgIShvcCAmIFNMSklUX0tFRVBfRkxBR1MpKTsgXAogCXN3aXRjaCAoR0VUX09QQ09ERShvcCkpIHsgXAotCWNhc2UgU0xKSVRfRENNUDogXAorCWNhc2UgU0xKSVRfQ01QX0Y2NDogXAogCQlDSEVDS19BUkdVTUVOVCghKG9wICYgKFNMSklUX1NFVF9VIHwgU0xKSVRfU0VUX08gfCBTTEpJVF9TRVRfQyB8IFNMSklUX0tFRVBfRkxBR1MpKSk7IFwKIAkJQ0hFQ0tfQVJHVU1FTlQoKG9wICYgKFNMSklUX1NFVF9FIHwgU0xKSVRfU0VUX1MpKSk7IFwKIAkJYnJlYWs7IFwKIAlkZWZhdWx0OiBcCi0JCS8qIE9ubHkgU0xKSVRfSU5UX09QIG9yIFNMSklUX1NJTkdMRV9PUCBpcyBhbGxvd2VkLiAqLyBcCisJCS8qIE9ubHkgU0xKSVRfSTMyX09QIG9yIFNMSklUX0YzMl9PUCBpcyBhbGxvd2VkLiAqLyBcCiAJCUNIRUNLX0FSR1VNRU5UKCEob3AgJiAoU0xKSVRfU0VUX0UgfCBTTEpJVF9TRVRfVSB8IFNMSklUX1NFVF9TIHwgU0xKSVRfU0VUX08gfCBTTEpJVF9TRVRfQyB8IFNMSklUX0tFRVBfRkxBR1MpKSk7IFwKIAkJYnJlYWs7IFwKIAl9CkBAIC04NDQsMzggKzg0NCwzOCBAQAogCQkJZnByaW50Zihjb21waWxlci0+dmVyYm9zZSwgImZzJWQiLCBTTEpJVF9OVU1CRVJfT0ZfRkxPQVRfUkVHSVNURVJTIC0gKHApKTsgXAogCX0KIAotc3RhdGljIFNMSklUX0NPTlNUIGNoYXIqIG9wMF9uYW1lc1tdID0gewotCShjaGFyKikiYnJlYWtwb2ludCIsIChjaGFyKikibm9wIiwgKGNoYXIqKSJsdW11bCIsIChjaGFyKikibHNtdWwiLAotCShjaGFyKikidWRpdm1vZCIsIChjaGFyKikic2Rpdm1vZCIsIChjaGFyKikidWRpdmkiLCAoY2hhciopInNkaXZpIgorc3RhdGljIGNvbnN0IGNoYXIqIG9wMF9uYW1lc1tdID0geworCShjaGFyKikiYnJlYWtwb2ludCIsIChjaGFyKikibm9wIiwgKGNoYXIqKSJsbXVsLnV3IiwgKGNoYXIqKSJsbXVsLnN3IiwKKwkoY2hhciopImRpdm1vZC51IiwgKGNoYXIqKSJkaXZtb2QucyIsIChjaGFyKikiZGl2LnUiLCAoY2hhciopImRpdi5zIgogfTsKIAotc3RhdGljIFNMSklUX0NPTlNUIGNoYXIqIG9wMV9uYW1lc1tdID0gewotCShjaGFyKikibW92IiwgKGNoYXIqKSJtb3ZfdWIiLCAoY2hhciopIm1vdl9zYiIsIChjaGFyKikibW92X3VoIiwKLQkoY2hhciopIm1vdl9zaCIsIChjaGFyKikibW92X3VpIiwgKGNoYXIqKSJtb3Zfc2kiLCAoY2hhciopIm1vdl9wIiwKLQkoY2hhciopIm1vdnUiLCAoY2hhciopIm1vdnVfdWIiLCAoY2hhciopIm1vdnVfc2IiLCAoY2hhciopIm1vdnVfdWgiLAotCShjaGFyKikibW92dV9zaCIsIChjaGFyKikibW92dV91aSIsIChjaGFyKikibW92dV9zaSIsIChjaGFyKikibW92dV9wIiwKK3N0YXRpYyBjb25zdCBjaGFyKiBvcDFfbmFtZXNbXSA9IHsKKwkoY2hhciopIiIsIChjaGFyKikiLnU4IiwgKGNoYXIqKSIuczgiLCAoY2hhciopIi51MTYiLAorCShjaGFyKikiLnMxNiIsIChjaGFyKikiLnUzMiIsIChjaGFyKikiLnMzMiIsIChjaGFyKikiLnAiLAorCShjaGFyKikiIiwgKGNoYXIqKSIudTgiLCAoY2hhciopIi5zOCIsIChjaGFyKikiLnUxNiIsCisJKGNoYXIqKSIuczE2IiwgKGNoYXIqKSIudTMyIiwgKGNoYXIqKSIuczMyIiwgKGNoYXIqKSIucCIsCiAJKGNoYXIqKSJub3QiLCAoY2hhciopIm5lZyIsIChjaGFyKikiY2x6IiwKIH07CiAKLXN0YXRpYyBTTEpJVF9DT05TVCBjaGFyKiBvcDJfbmFtZXNbXSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyKiBvcDJfbmFtZXNbXSA9IHsKIAkoY2hhciopImFkZCIsIChjaGFyKikiYWRkYyIsIChjaGFyKikic3ViIiwgKGNoYXIqKSJzdWJjIiwKIAkoY2hhciopIm11bCIsIChjaGFyKikiYW5kIiwgKGNoYXIqKSJvciIsIChjaGFyKikieG9yIiwKIAkoY2hhciopInNobCIsIChjaGFyKikibHNociIsIChjaGFyKikiYXNociIsCiB9OwogCi1zdGF0aWMgU0xKSVRfQ09OU1QgY2hhciogZm9wMV9uYW1lc1tdID0geworc3RhdGljIGNvbnN0IGNoYXIqIGZvcDFfbmFtZXNbXSA9IHsKIAkoY2hhciopIm1vdiIsIChjaGFyKikiY29udiIsIChjaGFyKikiY29udiIsIChjaGFyKikiY29udiIsCiAJKGNoYXIqKSJjb252IiwgKGNoYXIqKSJjb252IiwgKGNoYXIqKSJjbXAiLCAoY2hhciopIm5lZyIsCiAJKGNoYXIqKSJhYnMiLAogfTsKIAotc3RhdGljIFNMSklUX0NPTlNUIGNoYXIqIGZvcDJfbmFtZXNbXSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyKiBmb3AyX25hbWVzW10gPSB7CiAJKGNoYXIqKSJhZGQiLCAoY2hhciopInN1YiIsIChjaGFyKikibXVsIiwgKGNoYXIqKSJkaXYiCiB9OwogCi0jZGVmaW5lIEpVTVBfUFJFRklYKHR5cGUpIFwKLQkoKHR5cGUgJiAweGZmKSA8PSBTTEpJVF9NVUxfTk9UX09WRVJGTE9XID8gKCh0eXBlICYgU0xKSVRfSU5UX09QKSA/ICJpXyIgOiAiIikgXAotCTogKCh0eXBlICYgMHhmZikgPD0gU0xKSVRfRF9PUkRFUkVEID8gKCh0eXBlICYgU0xKSVRfU0lOR0xFX09QKSA/ICJzXyIgOiAiZF8iKSA6ICIiKSkKKyNkZWZpbmUgSlVNUF9QT1NURklYKHR5cGUpIFwKKwkoKHR5cGUgJiAweGZmKSA8PSBTTEpJVF9NVUxfTk9UX09WRVJGTE9XID8gKCh0eXBlICYgU0xKSVRfSTMyX09QKSA/ICIzMiIgOiAiIikgXAorCTogKCh0eXBlICYgMHhmZikgPD0gU0xKSVRfT1JERVJFRF9GNjQgPyAoKHR5cGUgJiBTTEpJVF9GMzJfT1ApID8gIi5mMzIiIDogIi5mNjQiKSA6ICIiKSkKIAogc3RhdGljIGNoYXIqIGp1bXBfbmFtZXNbXSA9IHsKIAkoY2hhciopImVxdWFsIiwgKGNoYXIqKSJub3RfZXF1YWwiLApAQCAtOTIzLDggKzkyMyw4IEBACiB9CiAKIHN0YXRpYyBTTEpJVF9JTkxJTkUgQ0hFQ0tfUkVUVVJOX1RZUEUgY2hlY2tfc2xqaXRfZW1pdF9lbnRlcihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLAotCXNsaml0X3NpIG9wdGlvbnMsIHNsaml0X3NpIGFyZ3MsIHNsaml0X3NpIHNjcmF0Y2hlcywgc2xqaXRfc2kgc2F2ZWRzLAotCXNsaml0X3NpIGZzY3JhdGNoZXMsIHNsaml0X3NpIGZzYXZlZHMsIHNsaml0X3NpIGxvY2FsX3NpemUpCisJc2xqaXRfczMyIG9wdGlvbnMsIHNsaml0X3MzMiBhcmdzLCBzbGppdF9zMzIgc2NyYXRjaGVzLCBzbGppdF9zMzIgc2F2ZWRzLAorCXNsaml0X3MzMiBmc2NyYXRjaGVzLCBzbGppdF9zMzIgZnNhdmVkcywgc2xqaXRfczMyIGxvY2FsX3NpemUpCiB7CiAJU0xKSVRfVU5VU0VEX0FSRyhjb21waWxlcik7CiAKQEAgLTk0OSw4ICs5NDksOCBAQAogfQogCiBzdGF0aWMgU0xKSVRfSU5MSU5FIENIRUNLX1JFVFVSTl9UWVBFIGNoZWNrX3Nsaml0X3NldF9jb250ZXh0KHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsCi0Jc2xqaXRfc2kgb3B0aW9ucywgc2xqaXRfc2kgYXJncywgc2xqaXRfc2kgc2NyYXRjaGVzLCBzbGppdF9zaSBzYXZlZHMsCi0Jc2xqaXRfc2kgZnNjcmF0Y2hlcywgc2xqaXRfc2kgZnNhdmVkcywgc2xqaXRfc2kgbG9jYWxfc2l6ZSkKKwlzbGppdF9zMzIgb3B0aW9ucywgc2xqaXRfczMyIGFyZ3MsIHNsaml0X3MzMiBzY3JhdGNoZXMsIHNsaml0X3MzMiBzYXZlZHMsCisJc2xqaXRfczMyIGZzY3JhdGNoZXMsIHNsaml0X3MzMiBmc2F2ZWRzLCBzbGppdF9zMzIgbG9jYWxfc2l6ZSkKIHsKIAlpZiAoU0xKSVRfVU5MSUtFTFkoY29tcGlsZXItPnNraXBfY2hlY2tzKSkgewogCQljb21waWxlci0+c2tpcF9jaGVja3MgPSAwOwpAQCAtOTc3LDcgKzk3Nyw3IEBACiAJQ0hFQ0tfUkVUVVJOX09LOwogfQogCi1zdGF0aWMgU0xKSVRfSU5MSU5FIENIRUNLX1JFVFVSTl9UWVBFIGNoZWNrX3Nsaml0X2VtaXRfcmV0dXJuKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIG9wLCBzbGppdF9zaSBzcmMsIHNsaml0X3N3IHNyY3cpCitzdGF0aWMgU0xKSVRfSU5MSU5FIENIRUNLX1JFVFVSTl9UWVBFIGNoZWNrX3Nsaml0X2VtaXRfcmV0dXJuKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiBvcCwgc2xqaXRfczMyIHNyYywgc2xqaXRfc3cgc3JjdykKIHsKICNpZiAoZGVmaW5lZCBTTEpJVF9BUkdVTUVOVF9DSEVDS1MgJiYgU0xKSVRfQVJHVU1FTlRfQ0hFQ0tTKQogCUNIRUNLX0FSR1VNRU5UKGNvbXBpbGVyLT5zY3JhdGNoZXMgPj0gMCk7CkBAIC05OTMsNyArOTkzLDcgQEAKIAkJaWYgKG9wID09IFNMSklUX1VOVVNFRCkKIAkJCWZwcmludGYoY29tcGlsZXItPnZlcmJvc2UsICIgIHJldHVyblxuIik7CiAJCWVsc2UgewotCQkJZnByaW50Zihjb21waWxlci0+dmVyYm9zZSwgIiAgcmV0dXJuLiVzICIsIG9wMV9uYW1lc1tvcCAtIFNMSklUX09QMV9CQVNFXSk7CisJCQlmcHJpbnRmKGNvbXBpbGVyLT52ZXJib3NlLCAiICByZXR1cm4lcyAiLCBvcDFfbmFtZXNbb3AgLSBTTEpJVF9PUDFfQkFTRV0pOwogCQkJc2xqaXRfdmVyYm9zZV9wYXJhbShjb21waWxlciwgc3JjLCBzcmN3KTsKIAkJCWZwcmludGYoY29tcGlsZXItPnZlcmJvc2UsICJcbiIpOwogCQl9CkBAIC0xMDAyLDcgKzEwMDIsNyBAQAogCUNIRUNLX1JFVFVSTl9PSzsKIH0KIAotc3RhdGljIFNMSklUX0lOTElORSBDSEVDS19SRVRVUk5fVFlQRSBjaGVja19zbGppdF9lbWl0X2Zhc3RfZW50ZXIoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3KQorc3RhdGljIFNMSklUX0lOTElORSBDSEVDS19SRVRVUk5fVFlQRSBjaGVja19zbGppdF9lbWl0X2Zhc3RfZW50ZXIoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIGRzdCwgc2xqaXRfc3cgZHN0dykKIHsKICNpZiAoZGVmaW5lZCBTTEpJVF9BUkdVTUVOVF9DSEVDS1MgJiYgU0xKSVRfQVJHVU1FTlRfQ0hFQ0tTKQogCUZVTkNUSU9OX0NIRUNLX0RTVChkc3QsIGRzdHcpOwpAQCAtMTAxNyw3ICsxMDE3LDcgQEAKIAlDSEVDS19SRVRVUk5fT0s7CiB9CiAKLXN0YXRpYyBTTEpJVF9JTkxJTkUgQ0hFQ0tfUkVUVVJOX1RZUEUgY2hlY2tfc2xqaXRfZW1pdF9mYXN0X3JldHVybihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBzcmMsIHNsaml0X3N3IHNyY3cpCitzdGF0aWMgU0xKSVRfSU5MSU5FIENIRUNLX1JFVFVSTl9UWVBFIGNoZWNrX3Nsaml0X2VtaXRfZmFzdF9yZXR1cm4oc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIHNyYywgc2xqaXRfc3cgc3JjdykKIHsKICNpZiAoZGVmaW5lZCBTTEpJVF9BUkdVTUVOVF9DSEVDS1MgJiYgU0xKSVRfQVJHVU1FTlRfQ0hFQ0tTKQogCUZVTkNUSU9OX0NIRUNLX1NSQyhzcmMsIHNyY3cpOwpAQCAtMTAzMiwyMyArMTAzMiwyOSBAQAogCUNIRUNLX1JFVFVSTl9PSzsKIH0KIAotc3RhdGljIFNMSklUX0lOTElORSBDSEVDS19SRVRVUk5fVFlQRSBjaGVja19zbGppdF9lbWl0X29wMChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCkKK3N0YXRpYyBTTEpJVF9JTkxJTkUgQ0hFQ0tfUkVUVVJOX1RZUEUgY2hlY2tfc2xqaXRfZW1pdF9vcDAoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIG9wKQogewogI2lmIChkZWZpbmVkIFNMSklUX0FSR1VNRU5UX0NIRUNLUyAmJiBTTEpJVF9BUkdVTUVOVF9DSEVDS1MpCi0JQ0hFQ0tfQVJHVU1FTlQoKG9wID49IFNMSklUX0JSRUFLUE9JTlQgJiYgb3AgPD0gU0xKSVRfTFNNVUwpCi0JCXx8ICgob3AgJiB+U0xKSVRfSU5UX09QKSA+PSBTTEpJVF9VRElWTU9EICYmIChvcCAmIH5TTEpJVF9JTlRfT1ApIDw9IFNMSklUX1NESVZJKSk7Ci0JQ0hFQ0tfQVJHVU1FTlQob3AgPCBTTEpJVF9MVU1VTCB8fCBjb21waWxlci0+c2NyYXRjaGVzID49IDIpOworCUNIRUNLX0FSR1VNRU5UKChvcCA+PSBTTEpJVF9CUkVBS1BPSU5UICYmIG9wIDw9IFNMSklUX0xNVUxfU1cpCisJCXx8ICgob3AgJiB+U0xKSVRfSTMyX09QKSA+PSBTTEpJVF9ESVZNT0RfVVcgJiYgKG9wICYgflNMSklUX0kzMl9PUCkgPD0gU0xKSVRfRElWX1NXKSk7CisJQ0hFQ0tfQVJHVU1FTlQob3AgPCBTTEpJVF9MTVVMX1VXIHx8IGNvbXBpbGVyLT5zY3JhdGNoZXMgPj0gMik7CiAjZW5kaWYKICNpZiAoZGVmaW5lZCBTTEpJVF9WRVJCT1NFICYmIFNMSklUX1ZFUkJPU0UpCiAJaWYgKFNMSklUX1VOTElLRUxZKCEhY29tcGlsZXItPnZlcmJvc2UpKQotCQlmcHJpbnRmKGNvbXBpbGVyLT52ZXJib3NlLCAiICAlcyVzXG4iLCAhKG9wICYgU0xKSVRfSU5UX09QKSA/ICIiIDogImkiLCBvcDBfbmFtZXNbR0VUX09QQ09ERShvcCkgLSBTTEpJVF9PUDBfQkFTRV0pOworCXsKKwkJZnByaW50Zihjb21waWxlci0+dmVyYm9zZSwgIiAgJXMiLCBvcDBfbmFtZXNbR0VUX09QQ09ERShvcCkgLSBTTEpJVF9PUDBfQkFTRV0pOworCQlpZiAoR0VUX09QQ09ERShvcCkgPj0gU0xKSVRfRElWTU9EX1VXKSB7CisJCQlmcHJpbnRmKGNvbXBpbGVyLT52ZXJib3NlLCAob3AgJiBTTEpJVF9JMzJfT1ApID8gIjMyIiA6ICJ3Iik7CisJCX0KKwkJZnByaW50Zihjb21waWxlci0+dmVyYm9zZSwgIlxuIik7CisJfQogI2VuZGlmCiAJQ0hFQ0tfUkVUVVJOX09LOwogfQogCi1zdGF0aWMgU0xKSVRfSU5MSU5FIENIRUNLX1JFVFVSTl9UWVBFIGNoZWNrX3Nsaml0X2VtaXRfb3AxKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIG9wLAotCXNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dywKLQlzbGppdF9zaSBzcmMsIHNsaml0X3N3IHNyY3cpCitzdGF0aWMgU0xKSVRfSU5MSU5FIENIRUNLX1JFVFVSTl9UWVBFIGNoZWNrX3Nsaml0X2VtaXRfb3AxKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiBvcCwKKwlzbGppdF9zMzIgZHN0LCBzbGppdF9zdyBkc3R3LAorCXNsaml0X3MzMiBzcmMsIHNsaml0X3N3IHNyY3cpCiB7CiAJaWYgKFNMSklUX1VOTElLRUxZKGNvbXBpbGVyLT5za2lwX2NoZWNrcykpIHsKIAkJY29tcGlsZXItPnNraXBfY2hlY2tzID0gMDsKQEAgLTEwNjQsOSArMTA3MCwxOCBAQAogI2VuZGlmCiAjaWYgKGRlZmluZWQgU0xKSVRfVkVSQk9TRSAmJiBTTEpJVF9WRVJCT1NFKQogCWlmIChTTEpJVF9VTkxJS0VMWSghIWNvbXBpbGVyLT52ZXJib3NlKSkgewotCQlmcHJpbnRmKGNvbXBpbGVyLT52ZXJib3NlLCAiICAlcyVzJXMlcyVzJXMlcyVzICIsICEob3AgJiBTTEpJVF9JTlRfT1ApID8gIiIgOiAiaSIsIG9wMV9uYW1lc1tHRVRfT1BDT0RFKG9wKSAtIFNMSklUX09QMV9CQVNFXSwKLQkJCSEob3AgJiBTTEpJVF9TRVRfRSkgPyAiIiA6ICIuZSIsICEob3AgJiBTTEpJVF9TRVRfVSkgPyAiIiA6ICIudSIsICEob3AgJiBTTEpJVF9TRVRfUykgPyAiIiA6ICIucyIsCi0JCQkhKG9wICYgU0xKSVRfU0VUX08pID8gIiIgOiAiLm8iLCAhKG9wICYgU0xKSVRfU0VUX0MpID8gIiIgOiAiLmMiLCAhKG9wICYgU0xKSVRfS0VFUF9GTEFHUykgPyAiIiA6ICIuayIpOworCQlpZiAoR0VUX09QQ09ERShvcCkgPD0gU0xKSVRfTU9WVV9QKQorCQl7CisJCQlmcHJpbnRmKGNvbXBpbGVyLT52ZXJib3NlLCAiICBtb3YlcyVzJXMgIiwgKEdFVF9PUENPREUob3ApID49IFNMSklUX01PVlUpID8gInUiIDogIiIsCisJCQkJIShvcCAmIFNMSklUX0kzMl9PUCkgPyAiIiA6ICIzMiIsIChvcCAhPSBTTEpJVF9NT1YzMiAmJiBvcCAhPSBTTEpJVF9NT1ZVMzIpID8gb3AxX25hbWVzW0dFVF9PUENPREUob3ApIC0gU0xKSVRfT1AxX0JBU0VdIDogIiIpOworCQl9CisJCWVsc2UKKwkJeworCQkJZnByaW50Zihjb21waWxlci0+dmVyYm9zZSwgIiAgJXMlcyVzJXMlcyVzJXMlcyAiLCBvcDFfbmFtZXNbR0VUX09QQ09ERShvcCkgLSBTTEpJVF9PUDFfQkFTRV0sICEob3AgJiBTTEpJVF9JMzJfT1ApID8gIiIgOiAiMzIiLAorCQkJCSEob3AgJiBTTEpJVF9TRVRfRSkgPyAiIiA6ICIuZSIsICEob3AgJiBTTEpJVF9TRVRfVSkgPyAiIiA6ICIudSIsICEob3AgJiBTTEpJVF9TRVRfUykgPyAiIiA6ICIucyIsCisJCQkJIShvcCAmIFNMSklUX1NFVF9PKSA/ICIiIDogIi5vIiwgIShvcCAmIFNMSklUX1NFVF9DKSA/ICIiIDogIi5jIiwgIShvcCAmIFNMSklUX0tFRVBfRkxBR1MpID8gIiIgOiAiLmsiKTsKKwkJfQorCiAJCXNsaml0X3ZlcmJvc2VfcGFyYW0oY29tcGlsZXIsIGRzdCwgZHN0dyk7CiAJCWZwcmludGYoY29tcGlsZXItPnZlcmJvc2UsICIsICIpOwogCQlzbGppdF92ZXJib3NlX3BhcmFtKGNvbXBpbGVyLCBzcmMsIHNyY3cpOwpAQCAtMTA3NiwxMCArMTA5MSwxMCBAQAogCUNIRUNLX1JFVFVSTl9PSzsKIH0KIAotc3RhdGljIFNMSklUX0lOTElORSBDSEVDS19SRVRVUk5fVFlQRSBjaGVja19zbGppdF9lbWl0X29wMihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwKLQlzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsCi0Jc2xqaXRfc2kgc3JjMSwgc2xqaXRfc3cgc3JjMXcsCi0Jc2xqaXRfc2kgc3JjMiwgc2xqaXRfc3cgc3JjMncpCitzdGF0aWMgU0xKSVRfSU5MSU5FIENIRUNLX1JFVFVSTl9UWVBFIGNoZWNrX3Nsaml0X2VtaXRfb3AyKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiBvcCwKKwlzbGppdF9zMzIgZHN0LCBzbGppdF9zdyBkc3R3LAorCXNsaml0X3MzMiBzcmMxLCBzbGppdF9zdyBzcmMxdywKKwlzbGppdF9zMzIgc3JjMiwgc2xqaXRfc3cgc3JjMncpCiB7CiAJaWYgKFNMSklUX1VOTElLRUxZKGNvbXBpbGVyLT5za2lwX2NoZWNrcykpIHsKIAkJY29tcGlsZXItPnNraXBfY2hlY2tzID0gMDsKQEAgLTEwOTUsNyArMTExMCw3IEBACiAjZW5kaWYKICNpZiAoZGVmaW5lZCBTTEpJVF9WRVJCT1NFICYmIFNMSklUX1ZFUkJPU0UpCiAJaWYgKFNMSklUX1VOTElLRUxZKCEhY29tcGlsZXItPnZlcmJvc2UpKSB7Ci0JCWZwcmludGYoY29tcGlsZXItPnZlcmJvc2UsICIgICVzJXMlcyVzJXMlcyVzJXMgIiwgIShvcCAmIFNMSklUX0lOVF9PUCkgPyAiIiA6ICJpIiwgb3AyX25hbWVzW0dFVF9PUENPREUob3ApIC0gU0xKSVRfT1AyX0JBU0VdLAorCQlmcHJpbnRmKGNvbXBpbGVyLT52ZXJib3NlLCAiICAlcyVzJXMlcyVzJXMlcyVzICIsIG9wMl9uYW1lc1tHRVRfT1BDT0RFKG9wKSAtIFNMSklUX09QMl9CQVNFXSwgIShvcCAmIFNMSklUX0kzMl9PUCkgPyAiIiA6ICIzMiIsCiAJCQkhKG9wICYgU0xKSVRfU0VUX0UpID8gIiIgOiAiLmUiLCAhKG9wICYgU0xKSVRfU0VUX1UpID8gIiIgOiAiLnUiLCAhKG9wICYgU0xKSVRfU0VUX1MpID8gIiIgOiAiLnMiLAogCQkJIShvcCAmIFNMSklUX1NFVF9PKSA/ICIiIDogIi5vIiwgIShvcCAmIFNMSklUX1NFVF9DKSA/ICIiIDogIi5jIiwgIShvcCAmIFNMSklUX0tFRVBfRkxBR1MpID8gIiIgOiAiLmsiKTsKIAkJc2xqaXRfdmVyYm9zZV9wYXJhbShjb21waWxlciwgZHN0LCBkc3R3KTsKQEAgLTExMDksNyArMTEyNCw3IEBACiAJQ0hFQ0tfUkVUVVJOX09LOwogfQogCi1zdGF0aWMgU0xKSVRfSU5MSU5FIENIRUNLX1JFVFVSTl9UWVBFIGNoZWNrX3Nsaml0X2dldF9yZWdpc3Rlcl9pbmRleChzbGppdF9zaSByZWcpCitzdGF0aWMgU0xKSVRfSU5MSU5FIENIRUNLX1JFVFVSTl9UWVBFIGNoZWNrX3Nsaml0X2dldF9yZWdpc3Rlcl9pbmRleChzbGppdF9zMzIgcmVnKQogewogCVNMSklUX1VOVVNFRF9BUkcocmVnKTsKICNpZiAoZGVmaW5lZCBTTEpJVF9BUkdVTUVOVF9DSEVDS1MgJiYgU0xKSVRfQVJHVU1FTlRfQ0hFQ0tTKQpAQCAtMTExOCw3ICsxMTMzLDcgQEAKIAlDSEVDS19SRVRVUk5fT0s7CiB9CiAKLXN0YXRpYyBTTEpJVF9JTkxJTkUgQ0hFQ0tfUkVUVVJOX1RZUEUgY2hlY2tfc2xqaXRfZ2V0X2Zsb2F0X3JlZ2lzdGVyX2luZGV4KHNsaml0X3NpIHJlZykKK3N0YXRpYyBTTEpJVF9JTkxJTkUgQ0hFQ0tfUkVUVVJOX1RZUEUgY2hlY2tfc2xqaXRfZ2V0X2Zsb2F0X3JlZ2lzdGVyX2luZGV4KHNsaml0X3MzMiByZWcpCiB7CiAJU0xKSVRfVU5VU0VEX0FSRyhyZWcpOwogI2lmIChkZWZpbmVkIFNMSklUX0FSR1VNRU5UX0NIRUNLUyAmJiBTTEpJVF9BUkdVTUVOVF9DSEVDS1MpCkBAIC0xMTI4LDcgKzExNDMsNyBAQAogfQogCiBzdGF0aWMgU0xKSVRfSU5MSU5FIENIRUNLX1JFVFVSTl9UWVBFIGNoZWNrX3Nsaml0X2VtaXRfb3BfY3VzdG9tKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsCi0Jdm9pZCAqaW5zdHJ1Y3Rpb24sIHNsaml0X3NpIHNpemUpCisJdm9pZCAqaW5zdHJ1Y3Rpb24sIHNsaml0X3MzMiBzaXplKQogewogI2lmIChkZWZpbmVkIFNMSklUX1ZFUkJPU0UgJiYgU0xKSVRfVkVSQk9TRSkKIAlpbnQgaTsKQEAgLTExNTIsMTYgKzExNjcsMTYgQEAKIAlpZiAoU0xKSVRfVU5MSUtFTFkoISFjb21waWxlci0+dmVyYm9zZSkpIHsKIAkJZnByaW50Zihjb21waWxlci0+dmVyYm9zZSwgIiAgb3BfY3VzdG9tIik7CiAJCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspCi0JCQlmcHJpbnRmKGNvbXBpbGVyLT52ZXJib3NlLCAiIDB4JXgiLCAoKHNsaml0X3ViKilpbnN0cnVjdGlvbilbaV0pOworCQkJZnByaW50Zihjb21waWxlci0+dmVyYm9zZSwgIiAweCV4IiwgKChzbGppdF91OCopaW5zdHJ1Y3Rpb24pW2ldKTsKIAkJZnByaW50Zihjb21waWxlci0+dmVyYm9zZSwgIlxuIik7CiAJfQogI2VuZGlmCiAJQ0hFQ0tfUkVUVVJOX09LOwogfQogCi1zdGF0aWMgU0xKSVRfSU5MSU5FIENIRUNLX1JFVFVSTl9UWVBFIGNoZWNrX3Nsaml0X2VtaXRfZm9wMShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwKLQlzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsCi0Jc2xqaXRfc2kgc3JjLCBzbGppdF9zdyBzcmN3KQorc3RhdGljIFNMSklUX0lOTElORSBDSEVDS19SRVRVUk5fVFlQRSBjaGVja19zbGppdF9lbWl0X2ZvcDEoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIG9wLAorCXNsaml0X3MzMiBkc3QsIHNsaml0X3N3IGRzdHcsCisJc2xqaXRfczMyIHNyYywgc2xqaXRfc3cgc3JjdykKIHsKIAlpZiAoU0xKSVRfVU5MSUtFTFkoY29tcGlsZXItPnNraXBfY2hlY2tzKSkgewogCQljb21waWxlci0+c2tpcF9jaGVja3MgPSAwOwpAQCAtMTE3MCwxOSArMTE4NSwxOSBAQAogCiAjaWYgKGRlZmluZWQgU0xKSVRfQVJHVU1FTlRfQ0hFQ0tTICYmIFNMSklUX0FSR1VNRU5UX0NIRUNLUykKIAlDSEVDS19BUkdVTUVOVChzbGppdF9pc19mcHVfYXZhaWxhYmxlKCkpOwotCUNIRUNLX0FSR1VNRU5UKEdFVF9PUENPREUob3ApID49IFNMSklUX0RNT1YgJiYgR0VUX09QQ09ERShvcCkgPD0gU0xKSVRfREFCUyk7CisJQ0hFQ0tfQVJHVU1FTlQoR0VUX09QQ09ERShvcCkgPj0gU0xKSVRfTU9WX0Y2NCAmJiBHRVRfT1BDT0RFKG9wKSA8PSBTTEpJVF9BQlNfRjY0KTsKIAlGVU5DVElPTl9DSEVDS19GT1AoKTsKIAlGVU5DVElPTl9GQ0hFQ0soc3JjLCBzcmN3KTsKIAlGVU5DVElPTl9GQ0hFQ0soZHN0LCBkc3R3KTsKICNlbmRpZgogI2lmIChkZWZpbmVkIFNMSklUX1ZFUkJPU0UgJiYgU0xKSVRfVkVSQk9TRSkKIAlpZiAoU0xKSVRfVU5MSUtFTFkoISFjb21waWxlci0+dmVyYm9zZSkpIHsKLQkJaWYgKEdFVF9PUENPREUob3ApID09IFNMSklUX0NPTlZEX0ZST01TKQotCQkJZnByaW50Zihjb21waWxlci0+dmVyYm9zZSwgIiAgJXMlcyAiLCBmb3AxX25hbWVzW1NMSklUX0NPTlZEX0ZST01TIC0gU0xKSVRfRk9QMV9CQVNFXSwKLQkJCQkob3AgJiBTTEpJVF9TSU5HTEVfT1ApID8gInMuZnJvbWQiIDogImQuZnJvbXMiKTsKKwkJaWYgKEdFVF9PUENPREUob3ApID09IFNMSklUX0NPTlZfRjY0X0ZST01fRjMyKQorCQkJZnByaW50Zihjb21waWxlci0+dmVyYm9zZSwgIiAgJXMlcyAiLCBmb3AxX25hbWVzW1NMSklUX0NPTlZfRjY0X0ZST01fRjMyIC0gU0xKSVRfRk9QMV9CQVNFXSwKKwkJCQkob3AgJiBTTEpJVF9GMzJfT1ApID8gIi5mMzIuZnJvbS5mNjQiIDogIi5mNjQuZnJvbS5mMzIiKTsKIAkJZWxzZQotCQkJZnByaW50Zihjb21waWxlci0+dmVyYm9zZSwgIiAgJXMlcyAiLCAob3AgJiBTTEpJVF9TSU5HTEVfT1ApID8gInMiIDogImQiLAotCQkJCWZvcDFfbmFtZXNbR0VUX09QQ09ERShvcCkgLSBTTEpJVF9GT1AxX0JBU0VdKTsKKwkJCWZwcmludGYoY29tcGlsZXItPnZlcmJvc2UsICIgICVzJXMgIiwgZm9wMV9uYW1lc1tHRVRfT1BDT0RFKG9wKSAtIFNMSklUX0ZPUDFfQkFTRV0sCisJCQkJKG9wICYgU0xKSVRfRjMyX09QKSA/ICIuZjMyIiA6ICIuZjY0Iik7CiAKIAkJc2xqaXRfdmVyYm9zZV9mcGFyYW0oY29tcGlsZXIsIGRzdCwgZHN0dyk7CiAJCWZwcmludGYoY29tcGlsZXItPnZlcmJvc2UsICIsICIpOwpAQCAtMTE5Myw5ICsxMjA4LDkgQEAKIAlDSEVDS19SRVRVUk5fT0s7CiB9CiAKLXN0YXRpYyBTTEpJVF9JTkxJTkUgQ0hFQ0tfUkVUVVJOX1RZUEUgY2hlY2tfc2xqaXRfZW1pdF9mb3AxX2NtcChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwKLQlzbGppdF9zaSBzcmMxLCBzbGppdF9zdyBzcmMxdywKLQlzbGppdF9zaSBzcmMyLCBzbGppdF9zdyBzcmMydykKK3N0YXRpYyBTTEpJVF9JTkxJTkUgQ0hFQ0tfUkVUVVJOX1RZUEUgY2hlY2tfc2xqaXRfZW1pdF9mb3AxX2NtcChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgb3AsCisJc2xqaXRfczMyIHNyYzEsIHNsaml0X3N3IHNyYzF3LAorCXNsaml0X3MzMiBzcmMyLCBzbGppdF9zdyBzcmMydykKIHsKIAlpZiAoU0xKSVRfVU5MSUtFTFkoY29tcGlsZXItPnNraXBfY2hlY2tzKSkgewogCQljb21waWxlci0+c2tpcF9jaGVja3MgPSAwOwpAQCAtMTIwNCwxNCArMTIxOSwxNCBAQAogCiAjaWYgKGRlZmluZWQgU0xKSVRfQVJHVU1FTlRfQ0hFQ0tTICYmIFNMSklUX0FSR1VNRU5UX0NIRUNLUykKIAlDSEVDS19BUkdVTUVOVChzbGppdF9pc19mcHVfYXZhaWxhYmxlKCkpOwotCUNIRUNLX0FSR1VNRU5UKEdFVF9PUENPREUob3ApID09IFNMSklUX0RDTVApOworCUNIRUNLX0FSR1VNRU5UKEdFVF9PUENPREUob3ApID09IFNMSklUX0NNUF9GNjQpOwogCUZVTkNUSU9OX0NIRUNLX0ZPUCgpOwogCUZVTkNUSU9OX0ZDSEVDSyhzcmMxLCBzcmMxdyk7CiAJRlVOQ1RJT05fRkNIRUNLKHNyYzIsIHNyYzJ3KTsKICNlbmRpZgogI2lmIChkZWZpbmVkIFNMSklUX1ZFUkJPU0UgJiYgU0xKSVRfVkVSQk9TRSkKIAlpZiAoU0xKSVRfVU5MSUtFTFkoISFjb21waWxlci0+dmVyYm9zZSkpIHsKLQkJZnByaW50Zihjb21waWxlci0+dmVyYm9zZSwgIiAgJXMlcyVzJXMgIiwgKG9wICYgU0xKSVRfU0lOR0xFX09QKSA/ICJzIiA6ICJkIiwgZm9wMV9uYW1lc1tTTEpJVF9EQ01QIC0gU0xKSVRfRk9QMV9CQVNFXSwKKwkJZnByaW50Zihjb21waWxlci0+dmVyYm9zZSwgIiAgJXMlcyVzJXMgIiwgZm9wMV9uYW1lc1tTTEpJVF9DTVBfRjY0IC0gU0xKSVRfRk9QMV9CQVNFXSwgKG9wICYgU0xKSVRfRjMyX09QKSA/ICIuZjMyIiA6ICIuZjY0IiwKIAkJCShvcCAmIFNMSklUX1NFVF9FKSA/ICIuZSIgOiAiIiwgKG9wICYgU0xKSVRfU0VUX1MpID8gIi5zIiA6ICIiKTsKIAkJc2xqaXRfdmVyYm9zZV9mcGFyYW0oY29tcGlsZXIsIHNyYzEsIHNyYzF3KTsKIAkJZnByaW50Zihjb21waWxlci0+dmVyYm9zZSwgIiwgIik7CkBAIC0xMjIyLDkgKzEyMzcsOSBAQAogCUNIRUNLX1JFVFVSTl9PSzsKIH0KIAotc3RhdGljIFNMSklUX0lOTElORSBDSEVDS19SRVRVUk5fVFlQRSBjaGVja19zbGppdF9lbWl0X2ZvcDFfY29udndfZnJvbWQoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsCi0Jc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3LAotCXNsaml0X3NpIHNyYywgc2xqaXRfc3cgc3JjdykKK3N0YXRpYyBTTEpJVF9JTkxJTkUgQ0hFQ0tfUkVUVVJOX1RZUEUgY2hlY2tfc2xqaXRfZW1pdF9mb3AxX2NvbnZfc3dfZnJvbV9mNjQoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIG9wLAorCXNsaml0X3MzMiBkc3QsIHNsaml0X3N3IGRzdHcsCisJc2xqaXRfczMyIHNyYywgc2xqaXRfc3cgc3JjdykKIHsKIAlpZiAoU0xKSVRfVU5MSUtFTFkoY29tcGlsZXItPnNraXBfY2hlY2tzKSkgewogCQljb21waWxlci0+c2tpcF9jaGVja3MgPSAwOwpAQCAtMTIzMyw3ICsxMjQ4LDcgQEAKIAogI2lmIChkZWZpbmVkIFNMSklUX0FSR1VNRU5UX0NIRUNLUyAmJiBTTEpJVF9BUkdVTUVOVF9DSEVDS1MpCiAJQ0hFQ0tfQVJHVU1FTlQoc2xqaXRfaXNfZnB1X2F2YWlsYWJsZSgpKTsKLQlDSEVDS19BUkdVTUVOVChHRVRfT1BDT0RFKG9wKSA+PSBTTEpJVF9DT05WV19GUk9NRCAmJiBHRVRfT1BDT0RFKG9wKSA8PSBTTEpJVF9DT05WSV9GUk9NRCk7CisJQ0hFQ0tfQVJHVU1FTlQoR0VUX09QQ09ERShvcCkgPj0gU0xKSVRfQ09OVl9TV19GUk9NX0Y2NCAmJiBHRVRfT1BDT0RFKG9wKSA8PSBTTEpJVF9DT05WX1MzMl9GUk9NX0Y2NCk7CiAJRlVOQ1RJT05fQ0hFQ0tfRk9QKCk7CiAJRlVOQ1RJT05fRkNIRUNLKHNyYywgc3Jjdyk7CiAJRlVOQ1RJT05fQ0hFQ0tfRFNUKGRzdCwgZHN0dyk7CkBAIC0xMjQxLDggKzEyNTYsOCBAQAogI2lmIChkZWZpbmVkIFNMSklUX1ZFUkJPU0UgJiYgU0xKSVRfVkVSQk9TRSkKIAlpZiAoU0xKSVRfVU5MSUtFTFkoISFjb21waWxlci0+dmVyYm9zZSkpIHsKIAkJZnByaW50Zihjb21waWxlci0+dmVyYm9zZSwgIiAgJXMlcy5mcm9tJXMgIiwgZm9wMV9uYW1lc1tHRVRfT1BDT0RFKG9wKSAtIFNMSklUX0ZPUDFfQkFTRV0sCi0JCQkoR0VUX09QQ09ERShvcCkgPT0gU0xKSVRfQ09OVklfRlJPTUQpID8gImkiIDogInciLAotCQkJKG9wICYgU0xKSVRfU0lOR0xFX09QKSA/ICJzIiA6ICJkIik7CisJCQkoR0VUX09QQ09ERShvcCkgPT0gU0xKSVRfQ09OVl9TMzJfRlJPTV9GNjQpID8gIi5zMzIiIDogIi5zdyIsCisJCQkob3AgJiBTTEpJVF9GMzJfT1ApID8gIi5mMzIiIDogIi5mNjQiKTsKIAkJc2xqaXRfdmVyYm9zZV9wYXJhbShjb21waWxlciwgZHN0LCBkc3R3KTsKIAkJZnByaW50Zihjb21waWxlci0+dmVyYm9zZSwgIiwgIik7CiAJCXNsaml0X3ZlcmJvc2VfZnBhcmFtKGNvbXBpbGVyLCBzcmMsIHNyY3cpOwpAQCAtMTI1Miw5ICsxMjY3LDkgQEAKIAlDSEVDS19SRVRVUk5fT0s7CiB9CiAKLXN0YXRpYyBTTEpJVF9JTkxJTkUgQ0hFQ0tfUkVUVVJOX1RZUEUgY2hlY2tfc2xqaXRfZW1pdF9mb3AxX2NvbnZkX2Zyb213KHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIG9wLAotCXNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dywKLQlzbGppdF9zaSBzcmMsIHNsaml0X3N3IHNyY3cpCitzdGF0aWMgU0xKSVRfSU5MSU5FIENIRUNLX1JFVFVSTl9UWVBFIGNoZWNrX3Nsaml0X2VtaXRfZm9wMV9jb252X2Y2NF9mcm9tX3N3KHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiBvcCwKKwlzbGppdF9zMzIgZHN0LCBzbGppdF9zdyBkc3R3LAorCXNsaml0X3MzMiBzcmMsIHNsaml0X3N3IHNyY3cpCiB7CiAJaWYgKFNMSklUX1VOTElLRUxZKGNvbXBpbGVyLT5za2lwX2NoZWNrcykpIHsKIAkJY29tcGlsZXItPnNraXBfY2hlY2tzID0gMDsKQEAgLTEyNjMsNyArMTI3OCw3IEBACiAKICNpZiAoZGVmaW5lZCBTTEpJVF9BUkdVTUVOVF9DSEVDS1MgJiYgU0xKSVRfQVJHVU1FTlRfQ0hFQ0tTKQogCUNIRUNLX0FSR1VNRU5UKHNsaml0X2lzX2ZwdV9hdmFpbGFibGUoKSk7Ci0JQ0hFQ0tfQVJHVU1FTlQoR0VUX09QQ09ERShvcCkgPj0gU0xKSVRfQ09OVkRfRlJPTVcgJiYgR0VUX09QQ09ERShvcCkgPD0gU0xKSVRfQ09OVkRfRlJPTUkpOworCUNIRUNLX0FSR1VNRU5UKEdFVF9PUENPREUob3ApID49IFNMSklUX0NPTlZfRjY0X0ZST01fU1cgJiYgR0VUX09QQ09ERShvcCkgPD0gU0xKSVRfQ09OVl9GNjRfRlJPTV9TMzIpOwogCUZVTkNUSU9OX0NIRUNLX0ZPUCgpOwogCUZVTkNUSU9OX0NIRUNLX1NSQyhzcmMsIHNyY3cpOwogCUZVTkNUSU9OX0ZDSEVDSyhkc3QsIGRzdHcpOwpAQCAtMTI3MSw4ICsxMjg2LDggQEAKICNpZiAoZGVmaW5lZCBTTEpJVF9WRVJCT1NFICYmIFNMSklUX1ZFUkJPU0UpCiAJaWYgKFNMSklUX1VOTElLRUxZKCEhY29tcGlsZXItPnZlcmJvc2UpKSB7CiAJCWZwcmludGYoY29tcGlsZXItPnZlcmJvc2UsICIgICVzJXMuZnJvbSVzICIsIGZvcDFfbmFtZXNbR0VUX09QQ09ERShvcCkgLSBTTEpJVF9GT1AxX0JBU0VdLAotCQkJKG9wICYgU0xKSVRfU0lOR0xFX09QKSA/ICJzIiA6ICJkIiwKLQkJCShHRVRfT1BDT0RFKG9wKSA9PSBTTEpJVF9DT05WRF9GUk9NSSkgPyAiaSIgOiAidyIpOworCQkJKG9wICYgU0xKSVRfRjMyX09QKSA/ICIuZjMyIiA6ICIuZjY0IiwKKwkJCShHRVRfT1BDT0RFKG9wKSA9PSBTTEpJVF9DT05WX0Y2NF9GUk9NX1MzMikgPyAiLnMzMiIgOiAiLnN3Iik7CiAJCXNsaml0X3ZlcmJvc2VfZnBhcmFtKGNvbXBpbGVyLCBkc3QsIGRzdHcpOwogCQlmcHJpbnRmKGNvbXBpbGVyLT52ZXJib3NlLCAiLCAiKTsKIAkJc2xqaXRfdmVyYm9zZV9wYXJhbShjb21waWxlciwgc3JjLCBzcmN3KTsKQEAgLTEyODIsMTQgKzEyOTcsMTQgQEAKIAlDSEVDS19SRVRVUk5fT0s7CiB9CiAKLXN0YXRpYyBTTEpJVF9JTkxJTkUgQ0hFQ0tfUkVUVVJOX1RZUEUgY2hlY2tfc2xqaXRfZW1pdF9mb3AyKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIG9wLAotCXNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dywKLQlzbGppdF9zaSBzcmMxLCBzbGppdF9zdyBzcmMxdywKLQlzbGppdF9zaSBzcmMyLCBzbGppdF9zdyBzcmMydykKK3N0YXRpYyBTTEpJVF9JTkxJTkUgQ0hFQ0tfUkVUVVJOX1RZUEUgY2hlY2tfc2xqaXRfZW1pdF9mb3AyKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiBvcCwKKwlzbGppdF9zMzIgZHN0LCBzbGppdF9zdyBkc3R3LAorCXNsaml0X3MzMiBzcmMxLCBzbGppdF9zdyBzcmMxdywKKwlzbGppdF9zMzIgc3JjMiwgc2xqaXRfc3cgc3JjMncpCiB7CiAjaWYgKGRlZmluZWQgU0xKSVRfQVJHVU1FTlRfQ0hFQ0tTICYmIFNMSklUX0FSR1VNRU5UX0NIRUNLUykKIAlDSEVDS19BUkdVTUVOVChzbGppdF9pc19mcHVfYXZhaWxhYmxlKCkpOwotCUNIRUNLX0FSR1VNRU5UKEdFVF9PUENPREUob3ApID49IFNMSklUX0RBREQgJiYgR0VUX09QQ09ERShvcCkgPD0gU0xKSVRfRERJVik7CisJQ0hFQ0tfQVJHVU1FTlQoR0VUX09QQ09ERShvcCkgPj0gU0xKSVRfQUREX0Y2NCAmJiBHRVRfT1BDT0RFKG9wKSA8PSBTTEpJVF9ESVZfRjY0KTsKIAlGVU5DVElPTl9DSEVDS19GT1AoKTsKIAlGVU5DVElPTl9GQ0hFQ0soc3JjMSwgc3JjMXcpOwogCUZVTkNUSU9OX0ZDSEVDSyhzcmMyLCBzcmMydyk7CkBAIC0xMjk3LDcgKzEzMTIsNyBAQAogI2VuZGlmCiAjaWYgKGRlZmluZWQgU0xKSVRfVkVSQk9TRSAmJiBTTEpJVF9WRVJCT1NFKQogCWlmIChTTEpJVF9VTkxJS0VMWSghIWNvbXBpbGVyLT52ZXJib3NlKSkgewotCQlmcHJpbnRmKGNvbXBpbGVyLT52ZXJib3NlLCAiICAlcyVzICIsIChvcCAmIFNMSklUX1NJTkdMRV9PUCkgPyAicyIgOiAiZCIsIGZvcDJfbmFtZXNbR0VUX09QQ09ERShvcCkgLSBTTEpJVF9GT1AyX0JBU0VdKTsKKwkJZnByaW50Zihjb21waWxlci0+dmVyYm9zZSwgIiAgJXMlcyAiLCBmb3AyX25hbWVzW0dFVF9PUENPREUob3ApIC0gU0xKSVRfRk9QMl9CQVNFXSwgKG9wICYgU0xKSVRfRjMyX09QKSA/ICIuZjMyIiA6ICIuZjY0Iik7CiAJCXNsaml0X3ZlcmJvc2VfZnBhcmFtKGNvbXBpbGVyLCBkc3QsIGRzdHcpOwogCQlmcHJpbnRmKGNvbXBpbGVyLT52ZXJib3NlLCAiLCAiKTsKIAkJc2xqaXRfdmVyYm9zZV9mcGFyYW0oY29tcGlsZXIsIHNyYzEsIHNyYzF3KTsKQEAgLTEzMjAsNyArMTMzNSw3IEBACiAJQ0hFQ0tfUkVUVVJOX09LOwogfQogCi1zdGF0aWMgU0xKSVRfSU5MSU5FIENIRUNLX1JFVFVSTl9UWVBFIGNoZWNrX3Nsaml0X2VtaXRfanVtcChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSB0eXBlKQorc3RhdGljIFNMSklUX0lOTElORSBDSEVDS19SRVRVUk5fVFlQRSBjaGVja19zbGppdF9lbWl0X2p1bXAoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIHR5cGUpCiB7CiAJaWYgKFNMSklUX1VOTElLRUxZKGNvbXBpbGVyLT5za2lwX2NoZWNrcykpIHsKIAkJY29tcGlsZXItPnNraXBfY2hlY2tzID0gMDsKQEAgLTEzMjgsMzMgKzEzNDMsMzMgQEAKIAl9CiAKICNpZiAoZGVmaW5lZCBTTEpJVF9BUkdVTUVOVF9DSEVDS1MgJiYgU0xKSVRfQVJHVU1FTlRfQ0hFQ0tTKQotCUNIRUNLX0FSR1VNRU5UKCEodHlwZSAmIH4oMHhmZiB8IFNMSklUX1JFV1JJVEFCTEVfSlVNUCB8IFNMSklUX0lOVF9PUCkpKTsKKwlDSEVDS19BUkdVTUVOVCghKHR5cGUgJiB+KDB4ZmYgfCBTTEpJVF9SRVdSSVRBQkxFX0pVTVAgfCBTTEpJVF9JMzJfT1ApKSk7CiAJQ0hFQ0tfQVJHVU1FTlQoKHR5cGUgJiAweGZmKSA+PSBTTEpJVF9FUVVBTCAmJiAodHlwZSAmIDB4ZmYpIDw9IFNMSklUX0NBTEwzKTsKLQlDSEVDS19BUkdVTUVOVCgodHlwZSAmIDB4ZmYpIDwgU0xKSVRfSlVNUCB8fCAhKHR5cGUgJiBTTEpJVF9JTlRfT1ApKTsKKwlDSEVDS19BUkdVTUVOVCgodHlwZSAmIDB4ZmYpIDwgU0xKSVRfSlVNUCB8fCAhKHR5cGUgJiBTTEpJVF9JMzJfT1ApKTsKIAlDSEVDS19BUkdVTUVOVCgodHlwZSAmIDB4ZmYpIDw9IFNMSklUX0NBTEwwIHx8ICgodHlwZSAmIDB4ZmYpIC0gU0xKSVRfQ0FMTDApIDw9IGNvbXBpbGVyLT5zY3JhdGNoZXMpOwogI2VuZGlmCiAjaWYgKGRlZmluZWQgU0xKSVRfVkVSQk9TRSAmJiBTTEpJVF9WRVJCT1NFKQogCWlmIChTTEpJVF9VTkxJS0VMWSghIWNvbXBpbGVyLT52ZXJib3NlKSkKLQkJZnByaW50Zihjb21waWxlci0+dmVyYm9zZSwgIiAganVtcCVzLiVzJXNcbiIsICEodHlwZSAmIFNMSklUX1JFV1JJVEFCTEVfSlVNUCkgPyAiIiA6ICIuciIsCi0JCQlKVU1QX1BSRUZJWCh0eXBlKSwganVtcF9uYW1lc1t0eXBlICYgMHhmZl0pOworCQlmcHJpbnRmKGNvbXBpbGVyLT52ZXJib3NlLCAiICBqdW1wJXMgJXMlc1xuIiwgISh0eXBlICYgU0xKSVRfUkVXUklUQUJMRV9KVU1QKSA/ICIiIDogIi5yIiwKKwkJCWp1bXBfbmFtZXNbdHlwZSAmIDB4ZmZdLCBKVU1QX1BPU1RGSVgodHlwZSkpOwogI2VuZGlmCiAJQ0hFQ0tfUkVUVVJOX09LOwogfQogCi1zdGF0aWMgU0xKSVRfSU5MSU5FIENIRUNLX1JFVFVSTl9UWVBFIGNoZWNrX3Nsaml0X2VtaXRfY21wKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIHR5cGUsCi0Jc2xqaXRfc2kgc3JjMSwgc2xqaXRfc3cgc3JjMXcsCi0Jc2xqaXRfc2kgc3JjMiwgc2xqaXRfc3cgc3JjMncpCitzdGF0aWMgU0xKSVRfSU5MSU5FIENIRUNLX1JFVFVSTl9UWVBFIGNoZWNrX3Nsaml0X2VtaXRfY21wKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiB0eXBlLAorCXNsaml0X3MzMiBzcmMxLCBzbGppdF9zdyBzcmMxdywKKwlzbGppdF9zMzIgc3JjMiwgc2xqaXRfc3cgc3JjMncpCiB7CiAjaWYgKGRlZmluZWQgU0xKSVRfQVJHVU1FTlRfQ0hFQ0tTICYmIFNMSklUX0FSR1VNRU5UX0NIRUNLUykKLQlDSEVDS19BUkdVTUVOVCghKHR5cGUgJiB+KDB4ZmYgfCBTTEpJVF9SRVdSSVRBQkxFX0pVTVAgfCBTTEpJVF9JTlRfT1ApKSk7CisJQ0hFQ0tfQVJHVU1FTlQoISh0eXBlICYgfigweGZmIHwgU0xKSVRfUkVXUklUQUJMRV9KVU1QIHwgU0xKSVRfSTMyX09QKSkpOwogCUNIRUNLX0FSR1VNRU5UKCh0eXBlICYgMHhmZikgPj0gU0xKSVRfRVFVQUwgJiYgKHR5cGUgJiAweGZmKSA8PSBTTEpJVF9TSUdfTEVTU19FUVVBTCk7CiAJRlVOQ1RJT05fQ0hFQ0tfU1JDKHNyYzEsIHNyYzF3KTsKIAlGVU5DVElPTl9DSEVDS19TUkMoc3JjMiwgc3JjMncpOwogI2VuZGlmCiAjaWYgKGRlZmluZWQgU0xKSVRfVkVSQk9TRSAmJiBTTEpJVF9WRVJCT1NFKQogCWlmIChTTEpJVF9VTkxJS0VMWSghIWNvbXBpbGVyLT52ZXJib3NlKSkgewotCQlmcHJpbnRmKGNvbXBpbGVyLT52ZXJib3NlLCAiICBjbXAlcy4lcyVzICIsICEodHlwZSAmIFNMSklUX1JFV1JJVEFCTEVfSlVNUCkgPyAiIiA6ICIuciIsCi0JCQkodHlwZSAmIFNMSklUX0lOVF9PUCkgPyAiaV8iIDogIiIsIGp1bXBfbmFtZXNbdHlwZSAmIDB4ZmZdKTsKKwkJZnByaW50Zihjb21waWxlci0+dmVyYm9zZSwgIiAgY21wJXMgJXMlcywgIiwgISh0eXBlICYgU0xKSVRfUkVXUklUQUJMRV9KVU1QKSA/ICIiIDogIi5yIiwKKwkJCWp1bXBfbmFtZXNbdHlwZSAmIDB4ZmZdLCAodHlwZSAmIFNMSklUX0kzMl9PUCkgPyAiMzIiIDogIiIpOwogCQlzbGppdF92ZXJib3NlX3BhcmFtKGNvbXBpbGVyLCBzcmMxLCBzcmMxdyk7CiAJCWZwcmludGYoY29tcGlsZXItPnZlcmJvc2UsICIsICIpOwogCQlzbGppdF92ZXJib3NlX3BhcmFtKGNvbXBpbGVyLCBzcmMyLCBzcmMydyk7CkBAIC0xMzY0LDIxICsxMzc5LDIxIEBACiAJQ0hFQ0tfUkVUVVJOX09LOwogfQogCi1zdGF0aWMgU0xKSVRfSU5MSU5FIENIRUNLX1JFVFVSTl9UWVBFIGNoZWNrX3Nsaml0X2VtaXRfZmNtcChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSB0eXBlLAotCXNsaml0X3NpIHNyYzEsIHNsaml0X3N3IHNyYzF3LAotCXNsaml0X3NpIHNyYzIsIHNsaml0X3N3IHNyYzJ3KQorc3RhdGljIFNMSklUX0lOTElORSBDSEVDS19SRVRVUk5fVFlQRSBjaGVja19zbGppdF9lbWl0X2ZjbXAoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIHR5cGUsCisJc2xqaXRfczMyIHNyYzEsIHNsaml0X3N3IHNyYzF3LAorCXNsaml0X3MzMiBzcmMyLCBzbGppdF9zdyBzcmMydykKIHsKICNpZiAoZGVmaW5lZCBTTEpJVF9BUkdVTUVOVF9DSEVDS1MgJiYgU0xKSVRfQVJHVU1FTlRfQ0hFQ0tTKQogCUNIRUNLX0FSR1VNRU5UKHNsaml0X2lzX2ZwdV9hdmFpbGFibGUoKSk7Ci0JQ0hFQ0tfQVJHVU1FTlQoISh0eXBlICYgfigweGZmIHwgU0xKSVRfUkVXUklUQUJMRV9KVU1QIHwgU0xKSVRfU0lOR0xFX09QKSkpOwotCUNIRUNLX0FSR1VNRU5UKCh0eXBlICYgMHhmZikgPj0gU0xKSVRfRF9FUVVBTCAmJiAodHlwZSAmIDB4ZmYpIDw9IFNMSklUX0RfT1JERVJFRCk7CisJQ0hFQ0tfQVJHVU1FTlQoISh0eXBlICYgfigweGZmIHwgU0xKSVRfUkVXUklUQUJMRV9KVU1QIHwgU0xKSVRfRjMyX09QKSkpOworCUNIRUNLX0FSR1VNRU5UKCh0eXBlICYgMHhmZikgPj0gU0xKSVRfRVFVQUxfRjY0ICYmICh0eXBlICYgMHhmZikgPD0gU0xKSVRfT1JERVJFRF9GNjQpOwogCUZVTkNUSU9OX0ZDSEVDSyhzcmMxLCBzcmMxdyk7CiAJRlVOQ1RJT05fRkNIRUNLKHNyYzIsIHNyYzJ3KTsKICNlbmRpZgogI2lmIChkZWZpbmVkIFNMSklUX1ZFUkJPU0UgJiYgU0xKSVRfVkVSQk9TRSkKIAlpZiAoU0xKSVRfVU5MSUtFTFkoISFjb21waWxlci0+dmVyYm9zZSkpIHsKLQkJZnByaW50Zihjb21waWxlci0+dmVyYm9zZSwgIiAgZmNtcCVzLiVzJXMgIiwgISh0eXBlICYgU0xKSVRfUkVXUklUQUJMRV9KVU1QKSA/ICIiIDogIi5yIiwKLQkJCSh0eXBlICYgU0xKSVRfU0lOR0xFX09QKSA/ICJzXyIgOiAiZF8iLCBqdW1wX25hbWVzW3R5cGUgJiAweGZmXSk7CisJCWZwcmludGYoY29tcGlsZXItPnZlcmJvc2UsICIgIGZjbXAlcyAlcyVzLCAiLCAhKHR5cGUgJiBTTEpJVF9SRVdSSVRBQkxFX0pVTVApID8gIiIgOiAiLnIiLAorCQkJanVtcF9uYW1lc1t0eXBlICYgMHhmZl0sICh0eXBlICYgU0xKSVRfRjMyX09QKSA/ICIuZjMyIiA6ICIuZjY0Iik7CiAJCXNsaml0X3ZlcmJvc2VfZnBhcmFtKGNvbXBpbGVyLCBzcmMxLCBzcmMxdyk7CiAJCWZwcmludGYoY29tcGlsZXItPnZlcmJvc2UsICIsICIpOwogCQlzbGppdF92ZXJib3NlX2ZwYXJhbShjb21waWxlciwgc3JjMiwgc3JjMncpOwpAQCAtMTM4OCw3ICsxNDAzLDcgQEAKIAlDSEVDS19SRVRVUk5fT0s7CiB9CiAKLXN0YXRpYyBTTEpJVF9JTkxJTkUgQ0hFQ0tfUkVUVVJOX1RZUEUgY2hlY2tfc2xqaXRfZW1pdF9panVtcChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSB0eXBlLCBzbGppdF9zaSBzcmMsIHNsaml0X3N3IHNyY3cpCitzdGF0aWMgU0xKSVRfSU5MSU5FIENIRUNLX1JFVFVSTl9UWVBFIGNoZWNrX3Nsaml0X2VtaXRfaWp1bXAoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIHR5cGUsIHNsaml0X3MzMiBzcmMsIHNsaml0X3N3IHNyY3cpCiB7CiAJaWYgKFNMSklUX1VOTElLRUxZKGNvbXBpbGVyLT5za2lwX2NoZWNrcykpIHsKIAkJY29tcGlsZXItPnNraXBfY2hlY2tzID0gMDsKQEAgLTE0MTAsMTUgKzE0MjUsMTUgQEAKIAlDSEVDS19SRVRVUk5fT0s7CiB9CiAKLXN0YXRpYyBTTEpJVF9JTkxJTkUgQ0hFQ0tfUkVUVVJOX1RZUEUgY2hlY2tfc2xqaXRfZW1pdF9vcF9mbGFncyhzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwKLQlzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsCi0Jc2xqaXRfc2kgc3JjLCBzbGppdF9zdyBzcmN3LAotCXNsaml0X3NpIHR5cGUpCitzdGF0aWMgU0xKSVRfSU5MSU5FIENIRUNLX1JFVFVSTl9UWVBFIGNoZWNrX3Nsaml0X2VtaXRfb3BfZmxhZ3Moc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIG9wLAorCXNsaml0X3MzMiBkc3QsIHNsaml0X3N3IGRzdHcsCisJc2xqaXRfczMyIHNyYywgc2xqaXRfc3cgc3JjdywKKwlzbGppdF9zMzIgdHlwZSkKIHsKICNpZiAoZGVmaW5lZCBTTEpJVF9BUkdVTUVOVF9DSEVDS1MgJiYgU0xKSVRfQVJHVU1FTlRfQ0hFQ0tTKQotCUNIRUNLX0FSR1VNRU5UKCEodHlwZSAmIH4oMHhmZiB8IFNMSklUX0lOVF9PUCkpKTsKLQlDSEVDS19BUkdVTUVOVCgodHlwZSAmIDB4ZmYpID49IFNMSklUX0VRVUFMICYmICh0eXBlICYgMHhmZikgPD0gU0xKSVRfRF9PUkRFUkVEKTsKLQlDSEVDS19BUkdVTUVOVChvcCA9PSBTTEpJVF9NT1YgfHwgR0VUX09QQ09ERShvcCkgPT0gU0xKSVRfTU9WX1VJIHx8IEdFVF9PUENPREUob3ApID09IFNMSklUX01PVl9TSQorCUNIRUNLX0FSR1VNRU5UKCEodHlwZSAmIH4oMHhmZiB8IFNMSklUX0kzMl9PUCkpKTsKKwlDSEVDS19BUkdVTUVOVCgodHlwZSAmIDB4ZmYpID49IFNMSklUX0VRVUFMICYmICh0eXBlICYgMHhmZikgPD0gU0xKSVRfT1JERVJFRF9GNjQpOworCUNIRUNLX0FSR1VNRU5UKG9wID09IFNMSklUX01PViB8fCBHRVRfT1BDT0RFKG9wKSA9PSBTTEpJVF9NT1ZfVTMyIHx8IEdFVF9PUENPREUob3ApID09IFNMSklUX01PVl9TMzIKIAkJfHwgKEdFVF9PUENPREUob3ApID49IFNMSklUX0FORCAmJiBHRVRfT1BDT0RFKG9wKSA8PSBTTEpJVF9YT1IpKTsKIAlDSEVDS19BUkdVTUVOVCgob3AgJiAoU0xKSVRfU0VUX1UgfCBTTEpJVF9TRVRfUyB8IFNMSklUX1NFVF9PIHwgU0xKSVRfU0VUX0MpKSA9PSAwKTsKIAlDSEVDS19BUkdVTUVOVCgob3AgJiAoU0xKSVRfU0VUX0UgfCBTTEpJVF9LRUVQX0ZMQUdTKSkgIT0gKFNMSklUX1NFVF9FIHwgU0xKSVRfS0VFUF9GTEFHUykpOwpAQCAtMTQzMSwyMSArMTQ0NiwyMiBAQAogI2VuZGlmCiAjaWYgKGRlZmluZWQgU0xKSVRfVkVSQk9TRSAmJiBTTEpJVF9WRVJCT1NFKQogCWlmIChTTEpJVF9VTkxJS0VMWSghIWNvbXBpbGVyLT52ZXJib3NlKSkgewotCQlmcHJpbnRmKGNvbXBpbGVyLT52ZXJib3NlLCAiICBmbGFncy4lcyVzJXMlcyAiLCAhKG9wICYgU0xKSVRfSU5UX09QKSA/ICIiIDogImkiLAotCQkJR0VUX09QQ09ERShvcCkgPj0gU0xKSVRfT1AyX0JBU0UgPyBvcDJfbmFtZXNbR0VUX09QQ09ERShvcCkgLSBTTEpJVF9PUDJfQkFTRV0gOiBvcDFfbmFtZXNbR0VUX09QQ09ERShvcCkgLSBTTEpJVF9PUDFfQkFTRV0sCi0JCQkhKG9wICYgU0xKSVRfU0VUX0UpID8gIiIgOiAiLmUiLCAhKG9wICYgU0xKSVRfS0VFUF9GTEFHUykgPyAiIiA6ICIuayIpOworCQlmcHJpbnRmKGNvbXBpbGVyLT52ZXJib3NlLCAiICBmbGFncyAlcyVzJXMlcywgIiwKKwkJCSEob3AgJiBTTEpJVF9TRVRfRSkgPyAiIiA6ICIuZSIsICEob3AgJiBTTEpJVF9LRUVQX0ZMQUdTKSA/ICIiIDogIi5rIiwKKwkJCUdFVF9PUENPREUob3ApIDwgU0xKSVRfT1AyX0JBU0UgPyAibW92IiA6IG9wMl9uYW1lc1tHRVRfT1BDT0RFKG9wKSAtIFNMSklUX09QMl9CQVNFXSwKKwkJCUdFVF9PUENPREUob3ApIDwgU0xKSVRfT1AyX0JBU0UgPyBvcDFfbmFtZXNbR0VUX09QQ09ERShvcCkgLSBTTEpJVF9PUDFfQkFTRV0gOiAoKG9wICYgU0xKSVRfSTMyX09QKSA/ICIzMiIgOiAiIikpOwogCQlzbGppdF92ZXJib3NlX3BhcmFtKGNvbXBpbGVyLCBkc3QsIGRzdHcpOwogCQlpZiAoc3JjICE9IFNMSklUX1VOVVNFRCkgewogCQkJZnByaW50Zihjb21waWxlci0+dmVyYm9zZSwgIiwgIik7CiAJCQlzbGppdF92ZXJib3NlX3BhcmFtKGNvbXBpbGVyLCBzcmMsIHNyY3cpOwogCQl9Ci0JCWZwcmludGYoY29tcGlsZXItPnZlcmJvc2UsICIsICVzJXNcbiIsIEpVTVBfUFJFRklYKHR5cGUpLCBqdW1wX25hbWVzW3R5cGUgJiAweGZmXSk7CisJCWZwcmludGYoY29tcGlsZXItPnZlcmJvc2UsICIsICVzJXNcbiIsIGp1bXBfbmFtZXNbdHlwZSAmIDB4ZmZdLCBKVU1QX1BPU1RGSVgodHlwZSkpOwogCX0KICNlbmRpZgogCUNIRUNLX1JFVFVSTl9PSzsKIH0KIAotc3RhdGljIFNMSklUX0lOTElORSBDSEVDS19SRVRVUk5fVFlQRSBjaGVja19zbGppdF9nZXRfbG9jYWxfYmFzZShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsIHNsaml0X3N3IG9mZnNldCkKK3N0YXRpYyBTTEpJVF9JTkxJTkUgQ0hFQ0tfUkVUVVJOX1RZUEUgY2hlY2tfc2xqaXRfZ2V0X2xvY2FsX2Jhc2Uoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIGRzdCwgc2xqaXRfc3cgZHN0dywgc2xqaXRfc3cgb2Zmc2V0KQogewogCVNMSklUX1VOVVNFRF9BUkcob2Zmc2V0KTsKIApAQCAtMTQ2Miw3ICsxNDc4LDcgQEAKIAlDSEVDS19SRVRVUk5fT0s7CiB9CiAKLXN0YXRpYyBTTEpJVF9JTkxJTkUgQ0hFQ0tfUkVUVVJOX1RZUEUgY2hlY2tfc2xqaXRfZW1pdF9jb25zdChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsIHNsaml0X3N3IGluaXRfdmFsdWUpCitzdGF0aWMgU0xKSVRfSU5MSU5FIENIRUNLX1JFVFVSTl9UWVBFIGNoZWNrX3Nsaml0X2VtaXRfY29uc3Qoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIGRzdCwgc2xqaXRfc3cgZHN0dywgc2xqaXRfc3cgaW5pdF92YWx1ZSkKIHsKIAlTTEpJVF9VTlVTRURfQVJHKGluaXRfdmFsdWUpOwogCkBAIC0xNDgyLDMxICsxNDk4LDMxIEBACiAjZW5kaWYgLyogU0xKSVRfQVJHVU1FTlRfQ0hFQ0tTIHx8IFNMSklUX1ZFUkJPU0UgKi8KIAogI2RlZmluZSBTRUxFQ1RfRk9QMV9PUEVSQVRJT05fV0lUSF9DSEVDS1MoY29tcGlsZXIsIG9wLCBkc3QsIGRzdHcsIHNyYywgc3JjdykgXAotCVNMSklUX0NPTVBJTEVfQVNTRVJUKCEoU0xKSVRfQ09OVldfRlJPTUQgJiAweDEpICYmICEoU0xKSVRfQ09OVkRfRlJPTVcgJiAweDEpLCBcCisJU0xKSVRfQ09NUElMRV9BU1NFUlQoIShTTEpJVF9DT05WX1NXX0ZST01fRjY0ICYgMHgxKSAmJiAhKFNMSklUX0NPTlZfRjY0X0ZST01fU1cgJiAweDEpLCBcCiAJCWludmFsaWRfZmxvYXRfb3Bjb2Rlcyk7IFwKLQlpZiAoR0VUX09QQ09ERShvcCkgPj0gU0xKSVRfQ09OVldfRlJPTUQgJiYgR0VUX09QQ09ERShvcCkgPD0gU0xKSVRfRENNUCkgeyBcCi0JCWlmIChHRVRfT1BDT0RFKG9wKSA9PSBTTEpJVF9EQ01QKSB7IFwKKwlpZiAoR0VUX09QQ09ERShvcCkgPj0gU0xKSVRfQ09OVl9TV19GUk9NX0Y2NCAmJiBHRVRfT1BDT0RFKG9wKSA8PSBTTEpJVF9DTVBfRjY0KSB7IFwKKwkJaWYgKEdFVF9PUENPREUob3ApID09IFNMSklUX0NNUF9GNjQpIHsgXAogCQkJQ0hFQ0soY2hlY2tfc2xqaXRfZW1pdF9mb3AxX2NtcChjb21waWxlciwgb3AsIGRzdCwgZHN0dywgc3JjLCBzcmN3KSk7IFwKIAkJCUFESlVTVF9MT0NBTF9PRkZTRVQoZHN0LCBkc3R3KTsgXAogCQkJQURKVVNUX0xPQ0FMX09GRlNFVChzcmMsIHNyY3cpOyBcCiAJCQlyZXR1cm4gc2xqaXRfZW1pdF9mb3AxX2NtcChjb21waWxlciwgb3AsIGRzdCwgZHN0dywgc3JjLCBzcmN3KTsgXAogCQl9IFwKLQkJaWYgKChHRVRfT1BDT0RFKG9wKSB8IDB4MSkgPT0gU0xKSVRfQ09OVklfRlJPTUQpIHsgXAotCQkJQ0hFQ0soY2hlY2tfc2xqaXRfZW1pdF9mb3AxX2NvbnZ3X2Zyb21kKGNvbXBpbGVyLCBvcCwgZHN0LCBkc3R3LCBzcmMsIHNyY3cpKTsgXAorCQlpZiAoKEdFVF9PUENPREUob3ApIHwgMHgxKSA9PSBTTEpJVF9DT05WX1MzMl9GUk9NX0Y2NCkgeyBcCisJCQlDSEVDSyhjaGVja19zbGppdF9lbWl0X2ZvcDFfY29udl9zd19mcm9tX2Y2NChjb21waWxlciwgb3AsIGRzdCwgZHN0dywgc3JjLCBzcmN3KSk7IFwKIAkJCUFESlVTVF9MT0NBTF9PRkZTRVQoZHN0LCBkc3R3KTsgXAogCQkJQURKVVNUX0xPQ0FMX09GRlNFVChzcmMsIHNyY3cpOyBcCi0JCQlyZXR1cm4gc2xqaXRfZW1pdF9mb3AxX2NvbnZ3X2Zyb21kKGNvbXBpbGVyLCBvcCwgZHN0LCBkc3R3LCBzcmMsIHNyY3cpOyBcCisJCQlyZXR1cm4gc2xqaXRfZW1pdF9mb3AxX2NvbnZfc3dfZnJvbV9mNjQoY29tcGlsZXIsIG9wLCBkc3QsIGRzdHcsIHNyYywgc3Jjdyk7IFwKIAkJfSBcCi0JCUNIRUNLKGNoZWNrX3Nsaml0X2VtaXRfZm9wMV9jb252ZF9mcm9tdyhjb21waWxlciwgb3AsIGRzdCwgZHN0dywgc3JjLCBzcmN3KSk7IFwKKwkJQ0hFQ0soY2hlY2tfc2xqaXRfZW1pdF9mb3AxX2NvbnZfZjY0X2Zyb21fc3coY29tcGlsZXIsIG9wLCBkc3QsIGRzdHcsIHNyYywgc3JjdykpOyBcCiAJCUFESlVTVF9MT0NBTF9PRkZTRVQoZHN0LCBkc3R3KTsgXAogCQlBREpVU1RfTE9DQUxfT0ZGU0VUKHNyYywgc3Jjdyk7IFwKLQkJcmV0dXJuIHNsaml0X2VtaXRfZm9wMV9jb252ZF9mcm9tdyhjb21waWxlciwgb3AsIGRzdCwgZHN0dywgc3JjLCBzcmN3KTsgXAorCQlyZXR1cm4gc2xqaXRfZW1pdF9mb3AxX2NvbnZfZjY0X2Zyb21fc3coY29tcGlsZXIsIG9wLCBkc3QsIGRzdHcsIHNyYywgc3Jjdyk7IFwKIAl9IFwKIAlDSEVDSyhjaGVja19zbGppdF9lbWl0X2ZvcDEoY29tcGlsZXIsIG9wLCBkc3QsIGRzdHcsIHNyYywgc3JjdykpOyBcCiAJQURKVVNUX0xPQ0FMX09GRlNFVChkc3QsIGRzdHcpOyBcCiAJQURKVVNUX0xPQ0FMX09GRlNFVChzcmMsIHNyY3cpOwogCi1zdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X3NpIGVtaXRfbW92X2JlZm9yZV9yZXR1cm4oc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsIHNsaml0X3NpIHNyYywgc2xqaXRfc3cgc3JjdykKK3N0YXRpYyBTTEpJVF9JTkxJTkUgc2xqaXRfczMyIGVtaXRfbW92X2JlZm9yZV9yZXR1cm4oc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIG9wLCBzbGppdF9zMzIgc3JjLCBzbGppdF9zdyBzcmN3KQogewogCS8qIFJldHVybiBpZiBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nLiAqLwogCWlmIChvcCA9PSBTTEpJVF9VTlVTRUQpCkBAIC0xNTE3LDcgKzE1MzMsNyBAQAogCWlmIChzcmMgPT0gU0xKSVRfUkVUVVJOX1JFRyAmJiAob3AgPT0gU0xKSVRfTU9WIHx8IG9wID09IFNMSklUX01PVl9QKSkKIAkJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CiAjZWxzZQotCWlmIChzcmMgPT0gU0xKSVRfUkVUVVJOX1JFRyAmJiAob3AgPT0gU0xKSVRfTU9WIHx8IG9wID09IFNMSklUX01PVl9VSSB8fCBvcCA9PSBTTEpJVF9NT1ZfU0kgfHwgb3AgPT0gU0xKSVRfTU9WX1ApKQorCWlmIChzcmMgPT0gU0xKSVRfUkVUVVJOX1JFRyAmJiAob3AgPT0gU0xKSVRfTU9WIHx8IG9wID09IFNMSklUX01PVl9VMzIgfHwgb3AgPT0gU0xKSVRfTU9WX1MzMiB8fCBvcCA9PSBTTEpJVF9NT1ZfUCkpCiAJCXJldHVybiBTTEpJVF9TVUNDRVNTOwogI2VuZGlmCiAKQEAgLTE1NzYsMTIgKzE1OTIsMTIgQEAKIAogI2lmICEoZGVmaW5lZCBTTEpJVF9DT05GSUdfTUlQUyAmJiBTTEpJVF9DT05GSUdfTUlQUykKIAotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHN0cnVjdCBzbGppdF9qdW1wKiBzbGppdF9lbWl0X2NtcChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSB0eXBlLAotCXNsaml0X3NpIHNyYzEsIHNsaml0X3N3IHNyYzF3LAotCXNsaml0X3NpIHNyYzIsIHNsaml0X3N3IHNyYzJ3KQorU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHN0cnVjdCBzbGppdF9qdW1wKiBzbGppdF9lbWl0X2NtcChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgdHlwZSwKKwlzbGppdF9zMzIgc3JjMSwgc2xqaXRfc3cgc3JjMXcsCisJc2xqaXRfczMyIHNyYzIsIHNsaml0X3N3IHNyYzJ3KQogewogCS8qIERlZmF1bHQgY29tcGFyZSBmb3IgbW9zdCBhcmNoaXRlY3R1cmVzLiAqLwotCXNsaml0X3NpIGZsYWdzLCB0bXBfc3JjLCBjb25kaXRpb247CisJc2xqaXRfczMyIGZsYWdzLCB0bXBfc3JjLCBjb25kaXRpb247CiAJc2xqaXRfc3cgdG1wX3NyY3c7CiAKIAlDSEVDS19FUlJPUl9QVFIoKTsKQEAgLTE2MjksNyArMTY0NSw3IEBACiAJCQljb25kaXRpb24gPSBTTEpJVF9TSUdfR1JFQVRFUl9FUVVBTDsKIAkJCWJyZWFrOwogCQl9Ci0JCXR5cGUgPSBjb25kaXRpb24gfCAodHlwZSAmIChTTEpJVF9JTlRfT1AgfCBTTEpJVF9SRVdSSVRBQkxFX0pVTVApKTsKKwkJdHlwZSA9IGNvbmRpdGlvbiB8ICh0eXBlICYgKFNMSklUX0kzMl9PUCB8IFNMSklUX1JFV1JJVEFCTEVfSlVNUCkpOwogCQl0bXBfc3JjID0gc3JjMTsKIAkJc3JjMSA9IHNyYzI7CiAJCXNyYzIgPSB0bXBfc3JjOwpAQCAtMTY0OSw3ICsxNjY1LDcgQEAKIAkJfHwgKGRlZmluZWQgU0xKSVRfQVJHVU1FTlRfQ0hFQ0tTICYmIFNMSklUX0FSR1VNRU5UX0NIRUNLUykKIAljb21waWxlci0+c2tpcF9jaGVja3MgPSAxOwogI2VuZGlmCi0JUFRSX0ZBSUxfSUYoc2xqaXRfZW1pdF9vcDIoY29tcGlsZXIsIFNMSklUX1NVQiB8IGZsYWdzIHwgKHR5cGUgJiBTTEpJVF9JTlRfT1ApLAorCVBUUl9GQUlMX0lGKHNsaml0X2VtaXRfb3AyKGNvbXBpbGVyLCBTTEpJVF9TVUIgfCBmbGFncyB8ICh0eXBlICYgU0xKSVRfSTMyX09QKSwKIAkJU0xKSVRfVU5VU0VELCAwLCBzcmMxLCBzcmMxdywgc3JjMiwgc3JjMncpKTsKICNpZiAoZGVmaW5lZCBTTEpJVF9WRVJCT1NFICYmIFNMSklUX1ZFUkJPU0UpIFwKIAkJfHwgKGRlZmluZWQgU0xKSVRfQVJHVU1FTlRfQ0hFQ0tTICYmIFNMSklUX0FSR1VNRU5UX0NIRUNLUykKQEAgLTE2NTgsMjUgKzE2NzQsMjUgQEAKIAlyZXR1cm4gc2xqaXRfZW1pdF9qdW1wKGNvbXBpbGVyLCBjb25kaXRpb24gfCAodHlwZSAmIFNMSklUX1JFV1JJVEFCTEVfSlVNUCkpOwogfQogCi1TTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc3RydWN0IHNsaml0X2p1bXAqIHNsaml0X2VtaXRfZmNtcChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSB0eXBlLAotCXNsaml0X3NpIHNyYzEsIHNsaml0X3N3IHNyYzF3LAotCXNsaml0X3NpIHNyYzIsIHNsaml0X3N3IHNyYzJ3KQorU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHN0cnVjdCBzbGppdF9qdW1wKiBzbGppdF9lbWl0X2ZjbXAoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIHR5cGUsCisJc2xqaXRfczMyIHNyYzEsIHNsaml0X3N3IHNyYzF3LAorCXNsaml0X3MzMiBzcmMyLCBzbGppdF9zdyBzcmMydykKIHsKLQlzbGppdF9zaSBmbGFncywgY29uZGl0aW9uOworCXNsaml0X3MzMiBmbGFncywgY29uZGl0aW9uOwogCiAJQ0hFQ0tfRVJST1JfUFRSKCk7CiAJQ0hFQ0tfUFRSKGNoZWNrX3Nsaml0X2VtaXRfZmNtcChjb21waWxlciwgdHlwZSwgc3JjMSwgc3JjMXcsIHNyYzIsIHNyYzJ3KSk7CiAKIAljb25kaXRpb24gPSB0eXBlICYgMHhmZjsKLQlmbGFncyA9IChjb25kaXRpb24gPD0gU0xKSVRfRF9OT1RfRVFVQUwpID8gU0xKSVRfU0VUX0UgOiBTTEpJVF9TRVRfUzsKLQlpZiAodHlwZSAmIFNMSklUX1NJTkdMRV9PUCkKLQkJZmxhZ3MgfD0gU0xKSVRfU0lOR0xFX09QOworCWZsYWdzID0gKGNvbmRpdGlvbiA8PSBTTEpJVF9OT1RfRVFVQUxfRjY0KSA/IFNMSklUX1NFVF9FIDogU0xKSVRfU0VUX1M7CisJaWYgKHR5cGUgJiBTTEpJVF9GMzJfT1ApCisJCWZsYWdzIHw9IFNMSklUX0YzMl9PUDsKIAogI2lmIChkZWZpbmVkIFNMSklUX1ZFUkJPU0UgJiYgU0xKSVRfVkVSQk9TRSkgXAogCQl8fCAoZGVmaW5lZCBTTEpJVF9BUkdVTUVOVF9DSEVDS1MgJiYgU0xKSVRfQVJHVU1FTlRfQ0hFQ0tTKQogCWNvbXBpbGVyLT5za2lwX2NoZWNrcyA9IDE7CiAjZW5kaWYKLQlzbGppdF9lbWl0X2ZvcDEoY29tcGlsZXIsIFNMSklUX0RDTVAgfCBmbGFncywgc3JjMSwgc3JjMXcsIHNyYzIsIHNyYzJ3KTsKKwlzbGppdF9lbWl0X2ZvcDEoY29tcGlsZXIsIFNMSklUX0NNUF9GNjQgfCBmbGFncywgc3JjMSwgc3JjMXcsIHNyYzIsIHNyYzJ3KTsKIAogI2lmIChkZWZpbmVkIFNMSklUX1ZFUkJPU0UgJiYgU0xKSVRfVkVSQk9TRSkgXAogCQl8fCAoZGVmaW5lZCBTTEpJVF9BUkdVTUVOVF9DSEVDS1MgJiYgU0xKSVRfQVJHVU1FTlRfQ0hFQ0tTKQpAQCAtMTY4OSw3ICsxNzA1LDcgQEAKIAogI2lmICEoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2ICYmIFNMSklUX0NPTkZJR19YODYpCiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9nZXRfbG9jYWxfYmFzZShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsIHNsaml0X3N3IG9mZnNldCkKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zMzIgc2xqaXRfZ2V0X2xvY2FsX2Jhc2Uoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIGRzdCwgc2xqaXRfc3cgZHN0dywgc2xqaXRfc3cgb2Zmc2V0KQogewogCUNIRUNLX0VSUk9SKCk7CiAJQ0hFQ0soY2hlY2tfc2xqaXRfZ2V0X2xvY2FsX2Jhc2UoY29tcGlsZXIsIGRzdCwgZHN0dywgb2Zmc2V0KSk7CkBAIC0xNzEwLDcgKzE3MjYsNyBAQAogCiAvKiBFbXB0eSBmdW5jdGlvbiBib2RpZXMgZm9yIHRob3NlIG1hY2hpbmVzLCB3aGljaCBhcmUgbm90ICh5ZXQpIHN1cHBvcnRlZC4gKi8KIAotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIFNMSklUX0NPTlNUIGNoYXIqIHNsaml0X2dldF9wbGF0Zm9ybV9uYW1lKHZvaWQpCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgY29uc3QgY2hhciogc2xqaXRfZ2V0X3BsYXRmb3JtX25hbWUodm9pZCkKIHsKIAlyZXR1cm4gInVuc3VwcG9ydGVkIjsKIH0KQEAgLTE3MjcsNyArMTc0Myw3IEBACiAJU0xKSVRfQVNTRVJUX1NUT1AoKTsKIH0KIAotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHZvaWQqIHNsaml0X2FsbG9jX21lbW9yeShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBzaXplKQorU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHZvaWQqIHNsaml0X2FsbG9jX21lbW9yeShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgc2l6ZSkKIHsKIAlTTEpJVF9VTlVTRURfQVJHKGNvbXBpbGVyKTsKIAlTTEpJVF9VTlVTRURfQVJHKHNpemUpOwpAQCAtMTc1Nyw5ICsxNzczLDkgQEAKIAlTTEpJVF9BU1NFUlRfU1RPUCgpOwogfQogCi1TTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9lbnRlcihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLAotCXNsaml0X3NpIG9wdGlvbnMsIHNsaml0X3NpIGFyZ3MsIHNsaml0X3NpIHNjcmF0Y2hlcywgc2xqaXRfc2kgc2F2ZWRzLAotCXNsaml0X3NpIGZzY3JhdGNoZXMsIHNsaml0X3NpIGZzYXZlZHMsIHNsaml0X3NpIGxvY2FsX3NpemUpCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfczMyIHNsaml0X2VtaXRfZW50ZXIoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwKKwlzbGppdF9zMzIgb3B0aW9ucywgc2xqaXRfczMyIGFyZ3MsIHNsaml0X3MzMiBzY3JhdGNoZXMsIHNsaml0X3MzMiBzYXZlZHMsCisJc2xqaXRfczMyIGZzY3JhdGNoZXMsIHNsaml0X3MzMiBmc2F2ZWRzLCBzbGppdF9zMzIgbG9jYWxfc2l6ZSkKIHsKIAlTTEpJVF9VTlVTRURfQVJHKGNvbXBpbGVyKTsKIAlTTEpJVF9VTlVTRURfQVJHKG9wdGlvbnMpOwpAQCAtMTc3Myw5ICsxNzg5LDkgQEAKIAlyZXR1cm4gU0xKSVRfRVJSX1VOU1VQUE9SVEVEOwogfQogCi1TTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfc2V0X2NvbnRleHQoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwKLQlzbGppdF9zaSBvcHRpb25zLCBzbGppdF9zaSBhcmdzLCBzbGppdF9zaSBzY3JhdGNoZXMsIHNsaml0X3NpIHNhdmVkcywKLQlzbGppdF9zaSBmc2NyYXRjaGVzLCBzbGppdF9zaSBmc2F2ZWRzLCBzbGppdF9zaSBsb2NhbF9zaXplKQorU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3MzMiBzbGppdF9zZXRfY29udGV4dChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLAorCXNsaml0X3MzMiBvcHRpb25zLCBzbGppdF9zMzIgYXJncywgc2xqaXRfczMyIHNjcmF0Y2hlcywgc2xqaXRfczMyIHNhdmVkcywKKwlzbGppdF9zMzIgZnNjcmF0Y2hlcywgc2xqaXRfczMyIGZzYXZlZHMsIHNsaml0X3MzMiBsb2NhbF9zaXplKQogewogCVNMSklUX1VOVVNFRF9BUkcoY29tcGlsZXIpOwogCVNMSklUX1VOVVNFRF9BUkcob3B0aW9ucyk7CkBAIC0xNzg5LDcgKzE4MDUsNyBAQAogCXJldHVybiBTTEpJVF9FUlJfVU5TVVBQT1JURUQ7CiB9CiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X3JldHVybihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwgc2xqaXRfc2kgc3JjLCBzbGppdF9zdyBzcmN3KQorU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3MzMiBzbGppdF9lbWl0X3JldHVybihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgb3AsIHNsaml0X3MzMiBzcmMsIHNsaml0X3N3IHNyY3cpCiB7CiAJU0xKSVRfVU5VU0VEX0FSRyhjb21waWxlcik7CiAJU0xKSVRfVU5VU0VEX0FSRyhvcCk7CkBAIC0xNzk5LDcgKzE4MTUsNyBAQAogCXJldHVybiBTTEpJVF9FUlJfVU5TVVBQT1JURUQ7CiB9CiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X2Zhc3RfZW50ZXIoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3KQorU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3MzMiBzbGppdF9lbWl0X2Zhc3RfZW50ZXIoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIGRzdCwgc2xqaXRfc3cgZHN0dykKIHsKIAlTTEpJVF9VTlVTRURfQVJHKGNvbXBpbGVyKTsKIAlTTEpJVF9VTlVTRURfQVJHKGRzdCk7CkBAIC0xODA4LDcgKzE4MjQsNyBAQAogCXJldHVybiBTTEpJVF9FUlJfVU5TVVBQT1JURUQ7CiB9CiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X2Zhc3RfcmV0dXJuKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIHNyYywgc2xqaXRfc3cgc3JjdykKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zMzIgc2xqaXRfZW1pdF9mYXN0X3JldHVybihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgc3JjLCBzbGppdF9zdyBzcmN3KQogewogCVNMSklUX1VOVVNFRF9BUkcoY29tcGlsZXIpOwogCVNMSklUX1VOVVNFRF9BUkcoc3JjKTsKQEAgLTE4MTcsNyArMTgzMyw3IEBACiAJcmV0dXJuIFNMSklUX0VSUl9VTlNVUFBPUlRFRDsKIH0KIAotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfb3AwKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIG9wKQorU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3MzMiBzbGppdF9lbWl0X29wMChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgb3ApCiB7CiAJU0xKSVRfVU5VU0VEX0FSRyhjb21waWxlcik7CiAJU0xKSVRfVU5VU0VEX0FSRyhvcCk7CkBAIC0xODI1LDkgKzE4NDEsOSBAQAogCXJldHVybiBTTEpJVF9FUlJfVU5TVVBQT1JURUQ7CiB9CiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X29wMShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwKLQlzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsCi0Jc2xqaXRfc2kgc3JjLCBzbGppdF9zdyBzcmN3KQorU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3MzMiBzbGppdF9lbWl0X29wMShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgb3AsCisJc2xqaXRfczMyIGRzdCwgc2xqaXRfc3cgZHN0dywKKwlzbGppdF9zMzIgc3JjLCBzbGppdF9zdyBzcmN3KQogewogCVNMSklUX1VOVVNFRF9BUkcoY29tcGlsZXIpOwogCVNMSklUX1VOVVNFRF9BUkcob3ApOwpAQCAtMTgzOSwxMCArMTg1NSwxMCBAQAogCXJldHVybiBTTEpJVF9FUlJfVU5TVVBQT1JURUQ7CiB9CiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X29wMihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwKLQlzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsCi0Jc2xqaXRfc2kgc3JjMSwgc2xqaXRfc3cgc3JjMXcsCi0Jc2xqaXRfc2kgc3JjMiwgc2xqaXRfc3cgc3JjMncpCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfczMyIHNsaml0X2VtaXRfb3AyKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiBvcCwKKwlzbGppdF9zMzIgZHN0LCBzbGppdF9zdyBkc3R3LAorCXNsaml0X3MzMiBzcmMxLCBzbGppdF9zdyBzcmMxdywKKwlzbGppdF9zMzIgc3JjMiwgc2xqaXRfc3cgc3JjMncpCiB7CiAJU0xKSVRfVU5VU0VEX0FSRyhjb21waWxlcik7CiAJU0xKSVRfVU5VU0VEX0FSRyhvcCk7CkBAIC0xODU2LDE0ICsxODcyLDE0IEBACiAJcmV0dXJuIFNMSklUX0VSUl9VTlNVUFBPUlRFRDsKIH0KIAotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2dldF9yZWdpc3Rlcl9pbmRleChzbGppdF9zaSByZWcpCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfczMyIHNsaml0X2dldF9yZWdpc3Rlcl9pbmRleChzbGppdF9zMzIgcmVnKQogewogCVNMSklUX0FTU0VSVF9TVE9QKCk7CiAJcmV0dXJuIHJlZzsKIH0KIAotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfb3BfY3VzdG9tKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsCi0Jdm9pZCAqaW5zdHJ1Y3Rpb24sIHNsaml0X3NpIHNpemUpCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfczMyIHNsaml0X2VtaXRfb3BfY3VzdG9tKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsCisJdm9pZCAqaW5zdHJ1Y3Rpb24sIHNsaml0X3MzMiBzaXplKQogewogCVNMSklUX1VOVVNFRF9BUkcoY29tcGlsZXIpOwogCVNMSklUX1VOVVNFRF9BUkcoaW5zdHJ1Y3Rpb24pOwpAQCAtMTg3MiwxNSArMTg4OCwxNSBAQAogCXJldHVybiBTTEpJVF9FUlJfVU5TVVBQT1JURUQ7CiB9CiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9pc19mcHVfYXZhaWxhYmxlKHZvaWQpCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfczMyIHNsaml0X2lzX2ZwdV9hdmFpbGFibGUodm9pZCkKIHsKIAlTTEpJVF9BU1NFUlRfU1RPUCgpOwogCXJldHVybiAwOwogfQogCi1TTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9mb3AxKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIG9wLAotCXNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dywKLQlzbGppdF9zaSBzcmMsIHNsaml0X3N3IHNyY3cpCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfczMyIHNsaml0X2VtaXRfZm9wMShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgb3AsCisJc2xqaXRfczMyIGRzdCwgc2xqaXRfc3cgZHN0dywKKwlzbGppdF9zMzIgc3JjLCBzbGppdF9zdyBzcmN3KQogewogCVNMSklUX1VOVVNFRF9BUkcoY29tcGlsZXIpOwogCVNMSklUX1VOVVNFRF9BUkcob3ApOwpAQCAtMTg5MiwxMCArMTkwOCwxMCBAQAogCXJldHVybiBTTEpJVF9FUlJfVU5TVVBQT1JURUQ7CiB9CiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X2ZvcDIoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsCi0Jc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3LAotCXNsaml0X3NpIHNyYzEsIHNsaml0X3N3IHNyYzF3LAotCXNsaml0X3NpIHNyYzIsIHNsaml0X3N3IHNyYzJ3KQorU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3MzMiBzbGppdF9lbWl0X2ZvcDIoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIG9wLAorCXNsaml0X3MzMiBkc3QsIHNsaml0X3N3IGRzdHcsCisJc2xqaXRfczMyIHNyYzEsIHNsaml0X3N3IHNyYzF3LAorCXNsaml0X3MzMiBzcmMyLCBzbGppdF9zdyBzcmMydykKIHsKIAlTTEpJVF9VTlVTRURfQVJHKGNvbXBpbGVyKTsKIAlTTEpJVF9VTlVTRURfQVJHKG9wKTsKQEAgLTE5MTYsNyArMTkzMiw3IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzdHJ1Y3Qgc2xqaXRfanVtcCogc2xqaXRfZW1pdF9qdW1wKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIHR5cGUpCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc3RydWN0IHNsaml0X2p1bXAqIHNsaml0X2VtaXRfanVtcChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgdHlwZSkKIHsKIAlTTEpJVF9VTlVTRURfQVJHKGNvbXBpbGVyKTsKIAlTTEpJVF9VTlVTRURfQVJHKHR5cGUpOwpAQCAtMTkyNCw5ICsxOTQwLDkgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHN0cnVjdCBzbGppdF9qdW1wKiBzbGppdF9lbWl0X2NtcChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSB0eXBlLAotCXNsaml0X3NpIHNyYzEsIHNsaml0X3N3IHNyYzF3LAotCXNsaml0X3NpIHNyYzIsIHNsaml0X3N3IHNyYzJ3KQorU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHN0cnVjdCBzbGppdF9qdW1wKiBzbGppdF9lbWl0X2NtcChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgdHlwZSwKKwlzbGppdF9zMzIgc3JjMSwgc2xqaXRfc3cgc3JjMXcsCisJc2xqaXRfczMyIHNyYzIsIHNsaml0X3N3IHNyYzJ3KQogewogCVNMSklUX1VOVVNFRF9BUkcoY29tcGlsZXIpOwogCVNMSklUX1VOVVNFRF9BUkcodHlwZSk7CkBAIC0xOTM4LDkgKzE5NTQsOSBAQAogCXJldHVybiBOVUxMOwogfQogCi1TTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc3RydWN0IHNsaml0X2p1bXAqIHNsaml0X2VtaXRfZmNtcChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSB0eXBlLAotCXNsaml0X3NpIHNyYzEsIHNsaml0X3N3IHNyYzF3LAotCXNsaml0X3NpIHNyYzIsIHNsaml0X3N3IHNyYzJ3KQorU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHN0cnVjdCBzbGppdF9qdW1wKiBzbGppdF9lbWl0X2ZjbXAoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIHR5cGUsCisJc2xqaXRfczMyIHNyYzEsIHNsaml0X3N3IHNyYzF3LAorCXNsaml0X3MzMiBzcmMyLCBzbGppdF9zdyBzcmMydykKIHsKIAlTTEpJVF9VTlVTRURfQVJHKGNvbXBpbGVyKTsKIAlTTEpJVF9VTlVTRURfQVJHKHR5cGUpOwpAQCAtMTk2Niw3ICsxOTgyLDcgQEAKIAlTTEpJVF9BU1NFUlRfU1RPUCgpOwogfQogCi1TTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9panVtcChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSB0eXBlLCBzbGppdF9zaSBzcmMsIHNsaml0X3N3IHNyY3cpCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfczMyIHNsaml0X2VtaXRfaWp1bXAoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIHR5cGUsIHNsaml0X3MzMiBzcmMsIHNsaml0X3N3IHNyY3cpCiB7CiAJU0xKSVRfVU5VU0VEX0FSRyhjb21waWxlcik7CiAJU0xKSVRfVU5VU0VEX0FSRyh0eXBlKTsKQEAgLTE5NzYsMTAgKzE5OTIsMTAgQEAKIAlyZXR1cm4gU0xKSVRfRVJSX1VOU1VQUE9SVEVEOwogfQogCi1TTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9vcF9mbGFncyhzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwKLQlzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsCi0Jc2xqaXRfc2kgc3JjLCBzbGppdF9zdyBzcmN3LAotCXNsaml0X3NpIHR5cGUpCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfczMyIHNsaml0X2VtaXRfb3BfZmxhZ3Moc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIG9wLAorCXNsaml0X3MzMiBkc3QsIHNsaml0X3N3IGRzdHcsCisJc2xqaXRfczMyIHNyYywgc2xqaXRfc3cgc3JjdywKKwlzbGppdF9zMzIgdHlwZSkKIHsKIAlTTEpJVF9VTlVTRURfQVJHKGNvbXBpbGVyKTsKIAlTTEpJVF9VTlVTRURfQVJHKG9wKTsKQEAgLTE5OTIsNyArMjAwOCw3IEBACiAJcmV0dXJuIFNMSklUX0VSUl9VTlNVUFBPUlRFRDsKIH0KIAotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2dldF9sb2NhbF9iYXNlKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dywgc2xqaXRfc3cgb2Zmc2V0KQorU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3MzMiBzbGppdF9nZXRfbG9jYWxfYmFzZShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgZHN0LCBzbGppdF9zdyBkc3R3LCBzbGppdF9zdyBvZmZzZXQpCiB7CiAJU0xKSVRfVU5VU0VEX0FSRyhjb21waWxlcik7CiAJU0xKSVRfVU5VU0VEX0FSRyhkc3QpOwpAQCAtMjAwMiw3ICsyMDE4LDcgQEAKIAlyZXR1cm4gU0xKSVRfRVJSX1VOU1VQUE9SVEVEOwogfQogCi1TTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc3RydWN0IHNsaml0X2NvbnN0KiBzbGppdF9lbWl0X2NvbnN0KHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dywgc2xqaXRfc3cgaW5pdHZhbCkKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzdHJ1Y3Qgc2xqaXRfY29uc3QqIHNsaml0X2VtaXRfY29uc3Qoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIGRzdCwgc2xqaXRfc3cgZHN0dywgc2xqaXRfc3cgaW5pdHZhbCkKIHsKIAlTTEpJVF9VTlVTRURfQVJHKGNvbXBpbGVyKTsKIAlTTEpJVF9VTlVTRURfQVJHKGRzdCk7CmRpZmYgLS1naXQgYS9kaXN0Mi9zcmMvc2xqaXQvc2xqaXRMaXIuaCBiL2Rpc3QyL3NyYy9zbGppdC9zbGppdExpci5oCmluZGV4IDJlMmU5YWMuLmRmNjliODYgMTAwNjQ0Ci0tLSBhL2Rpc3QyL3NyYy9zbGppdC9zbGppdExpci5oCisrKyBiL2Rpc3QyL3NyYy9zbGppdC9zbGppdExpci5oCkBAIC0yMjYsNyArMjI2LDcgQEAKIC8qICBGbG9hdGluZyBwb2ludCByZWdpc3RlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLS8qIEVhY2ggZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXIgY2FuIHN0b3JlIGEgZG91YmxlIG9yIHNpbmdsZSBwcmVjaXNpb24KKy8qIEVhY2ggZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXIgY2FuIHN0b3JlIGEgMzIgb3IgYSA2NCBiaXQgcHJlY2lzaW9uCiAgICB2YWx1ZS4gVGhlIEZSIGFuZCBGUyByZWdpc3RlciBzZXRzIGFyZSBvdmVybGFwIGluIHRoZSBzYW1lIHdheSBhcyBSCiAgICBhbmQgUyByZWdpc3RlciBzZXRzLiBTZWUgYWJvdmUuICovCiAKQEAgLTI3MSw3ICsyNzEsNyBAQAogCXN0cnVjdCBzbGppdF9tZW1vcnlfZnJhZ21lbnQgKm5leHQ7CiAJc2xqaXRfdXcgdXNlZF9zaXplOwogCS8qIE11c3QgYmUgYWxpZ25lZCB0byBzbGppdF9zdy4gKi8KLQlzbGppdF91YiBtZW1vcnlbMV07CisJc2xqaXRfdTggbWVtb3J5WzFdOwogfTsKIAogc3RydWN0IHNsaml0X2xhYmVsIHsKQEAgLTI5Nyw4ICsyOTcsOCBAQAogfTsKIAogc3RydWN0IHNsaml0X2NvbXBpbGVyIHsKLQlzbGppdF9zaSBlcnJvcjsKLQlzbGppdF9zaSBvcHRpb25zOworCXNsaml0X3MzMiBlcnJvcjsKKwlzbGppdF9zMzIgb3B0aW9uczsKIAogCXN0cnVjdCBzbGppdF9sYWJlbCAqbGFiZWxzOwogCXN0cnVjdCBzbGppdF9qdW1wICpqdW1wczsKQEAgLTMxMiwzNiArMzEyLDM2IEBACiAJc3RydWN0IHNsaml0X21lbW9yeV9mcmFnbWVudCAqYWJ1ZjsKIAogCS8qIFVzZWQgc2NyYXRjaCByZWdpc3RlcnMuICovCi0Jc2xqaXRfc2kgc2NyYXRjaGVzOworCXNsaml0X3MzMiBzY3JhdGNoZXM7CiAJLyogVXNlZCBzYXZlZCByZWdpc3RlcnMuICovCi0Jc2xqaXRfc2kgc2F2ZWRzOworCXNsaml0X3MzMiBzYXZlZHM7CiAJLyogVXNlZCBmbG9hdCBzY3JhdGNoIHJlZ2lzdGVycy4gKi8KLQlzbGppdF9zaSBmc2NyYXRjaGVzOworCXNsaml0X3MzMiBmc2NyYXRjaGVzOwogCS8qIFVzZWQgZmxvYXQgc2F2ZWQgcmVnaXN0ZXJzLiAqLwotCXNsaml0X3NpIGZzYXZlZHM7CisJc2xqaXRfczMyIGZzYXZlZHM7CiAJLyogTG9jYWwgc3RhY2sgc2l6ZS4gKi8KLQlzbGppdF9zaSBsb2NhbF9zaXplOworCXNsaml0X3MzMiBsb2NhbF9zaXplOwogCS8qIENvZGUgc2l6ZS4gKi8KIAlzbGppdF91dyBzaXplOwogCS8qIEZvciBzdGF0aXN0aWNhbCBwdXJwb3Nlcy4gKi8KIAlzbGppdF91dyBleGVjdXRhYmxlX3NpemU7CiAKICNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2XzMyICYmIFNMSklUX0NPTkZJR19YODZfMzIpCi0Jc2xqaXRfc2kgYXJnczsKKwlzbGppdF9zMzIgYXJnczsKICNlbmRpZgogCiAjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1g4Nl82NCAmJiBTTEpJVF9DT05GSUdfWDg2XzY0KQotCXNsaml0X3NpIG1vZGUzMjsKKwlzbGppdF9zMzIgbW9kZTMyOwogI2VuZGlmCiAKICNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2ICYmIFNMSklUX0NPTkZJR19YODYpCi0Jc2xqaXRfc2kgZmxhZ3Nfc2F2ZWQ7CisJc2xqaXRfczMyIGZsYWdzX3NhdmVkOwogI2VuZGlmCiAKICNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfQVJNX1Y1ICYmIFNMSklUX0NPTkZJR19BUk1fVjUpCiAJLyogQ29uc3RhbnQgcG9vbCBoYW5kbGluZy4gKi8KIAlzbGppdF91dyAqY3Bvb2w7Ci0Jc2xqaXRfdWIgKmNwb29sX3VuaXF1ZTsKKwlzbGppdF91OCAqY3Bvb2xfdW5pcXVlOwogCXNsaml0X3V3IGNwb29sX2RpZmY7CiAJc2xqaXRfdXcgY3Bvb2xfZmlsbDsKIAkvKiBPdGhlciBtZW1iZXJzLiAqLwpAQCAtMzUyLDQwICszNTIsNDAgQEAKICNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfQVJNX1Y1ICYmIFNMSklUX0NPTkZJR19BUk1fVjUpIHx8IChkZWZpbmVkIFNMSklUX0NPTkZJR19BUk1fVjcgJiYgU0xKSVRfQ09ORklHX0FSTV9WNykKIAkvKiBUZW1wb3JhcnkgZmllbGRzLiAqLwogCXNsaml0X3V3IHNoaWZ0X2ltbTsKLQlzbGppdF9zaSBjYWNoZV9hcmc7CisJc2xqaXRfczMyIGNhY2hlX2FyZzsKIAlzbGppdF9zdyBjYWNoZV9hcmd3OwogI2VuZGlmCiAKICNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfQVJNX1RIVU1CMiAmJiBTTEpJVF9DT05GSUdfQVJNX1RIVU1CMikKLQlzbGppdF9zaSBjYWNoZV9hcmc7CisJc2xqaXRfczMyIGNhY2hlX2FyZzsKIAlzbGppdF9zdyBjYWNoZV9hcmd3OwogI2VuZGlmCiAKICNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfQVJNXzY0ICYmIFNMSklUX0NPTkZJR19BUk1fNjQpCi0Jc2xqaXRfc2kgY2FjaGVfYXJnOworCXNsaml0X3MzMiBjYWNoZV9hcmc7CiAJc2xqaXRfc3cgY2FjaGVfYXJndzsKICNlbmRpZgogCiAjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1BQQyAmJiBTTEpJVF9DT05GSUdfUFBDKQogCXNsaml0X3N3IGltbTsKLQlzbGppdF9zaSBjYWNoZV9hcmc7CisJc2xqaXRfczMyIGNhY2hlX2FyZzsKIAlzbGppdF9zdyBjYWNoZV9hcmd3OwogI2VuZGlmCiAKICNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfTUlQUyAmJiBTTEpJVF9DT05GSUdfTUlQUykKLQlzbGppdF9zaSBkZWxheV9zbG90OwotCXNsaml0X3NpIGNhY2hlX2FyZzsKKwlzbGppdF9zMzIgZGVsYXlfc2xvdDsKKwlzbGppdF9zMzIgY2FjaGVfYXJnOwogCXNsaml0X3N3IGNhY2hlX2FyZ3c7CiAjZW5kaWYKIAogI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19TUEFSQ18zMiAmJiBTTEpJVF9DT05GSUdfU1BBUkNfMzIpCi0Jc2xqaXRfc2kgZGVsYXlfc2xvdDsKLQlzbGppdF9zaSBjYWNoZV9hcmc7CisJc2xqaXRfczMyIGRlbGF5X3Nsb3Q7CisJc2xqaXRfczMyIGNhY2hlX2FyZzsKIAlzbGppdF9zdyBjYWNoZV9hcmd3OwogI2VuZGlmCiAKICNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfVElMRUdYICYmIFNMSklUX0NPTkZJR19USUxFR1gpCi0Jc2xqaXRfc2kgY2FjaGVfYXJnOworCXNsaml0X3MzMiBjYWNoZV9hcmc7CiAJc2xqaXRfc3cgY2FjaGVfYXJndzsKICNlbmRpZgogCkBAIC0zOTYsMTMgKzM5NiwxMyBAQAogI2lmIChkZWZpbmVkIFNMSklUX0FSR1VNRU5UX0NIRUNLUyAmJiBTTEpJVF9BUkdVTUVOVF9DSEVDS1MpIFwKIAkJfHwgKGRlZmluZWQgU0xKSVRfREVCVUcgJiYgU0xKSVRfREVCVUcpCiAJLyogTG9jYWwgc2l6ZSBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9ucy4gKi8KLQlzbGppdF9zaSBsb2dpY2FsX2xvY2FsX3NpemU7CisJc2xqaXRfczMyIGxvZ2ljYWxfbG9jYWxfc2l6ZTsKICNlbmRpZgogCiAjaWYgKGRlZmluZWQgU0xKSVRfQVJHVU1FTlRfQ0hFQ0tTICYmIFNMSklUX0FSR1VNRU5UX0NIRUNLUykgXAogCQl8fCAoZGVmaW5lZCBTTEpJVF9ERUJVRyAmJiBTTEpJVF9ERUJVRykgXAogCQl8fCAoZGVmaW5lZCBTTEpJVF9WRVJCT1NFICYmIFNMSklUX1ZFUkJPU0UpCi0Jc2xqaXRfc2kgc2tpcF9jaGVja3M7CisJc2xqaXRfczMyIHNraXBfY2hlY2tzOwogI2VuZGlmCiB9OwogCkBAIC00MjcsNyArNDI3LDcgQEAKICAgIGVycm9yIGNvZGUuIFRodXMgdGhlcmUgaXMgbm8gbmVlZCBmb3IgY2hlY2tpbmcgdGhlIGVycm9yIGFmdGVyIGV2ZXJ5CiAgICBjYWxsLCBpdCBpcyBlbm91Z2ggdG8gZG8gaXQgYmVmb3JlIHRoZSBjb2RlIGlzIGNvbXBpbGVkLiBSZW1vdmluZwogICAgdGhlc2UgY2hlY2tzIGluY3JlYXNlcyB0aGUgcGVyZm9ybWFuY2Ugb2YgdGhlIGNvbXBpbGluZyBwcm9jZXNzLiAqLwotc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9zaSBzbGppdF9nZXRfY29tcGlsZXJfZXJyb3Ioc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlcikgeyByZXR1cm4gY29tcGlsZXItPmVycm9yOyB9CitzdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X3MzMiBzbGppdF9nZXRfY29tcGlsZXJfZXJyb3Ioc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlcikgeyByZXR1cm4gY29tcGlsZXItPmVycm9yOyB9CiAKIC8qIFNldHMgdGhlIGNvbXBpbGVyIGVycm9yIGNvZGUgdG8gU0xKSVRfRVJSX0FMTE9DX0ZBSUxFRCBleGNlcHQKICAgIGlmIGFuIGVycm9yIHdhcyBkZXRlY3RlZCBiZWZvcmUuIEFmdGVyIHRoZSBlcnJvciBjb2RlIGlzIHNldApAQCAtNDQ4LDcgKzQ0OCw3IEBACiAgICBpbmRpY2F0ZSB0aGF0IHRoZXJlIGlzIG5vIG1vcmUgbWVtb3J5IChkb2VzIG5vdCBzZXQgdGhlIGN1cnJlbnQgZXJyb3IgY29kZQogICAgb2YgdGhlIGNvbXBpbGVyIHRvIG91dC1vZi1tZW1vcnkgc3RhdHVzKS4KICovCi1TTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgdm9pZCogc2xqaXRfYWxsb2NfbWVtb3J5KHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIHNpemUpOworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHZvaWQqIHNsaml0X2FsbG9jX21lbW9yeShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgc2l6ZSk7CiAKICNpZiAoZGVmaW5lZCBTTEpJVF9WRVJCT1NFICYmIFNMSklUX1ZFUkJPU0UpCiAvKiBQYXNzaW5nIE5VTEwgZGlzYWJsZXMgdmVyYm9zZS4gKi8KQEAgLTUxOCw5ICs1MTgsOSBAQAogLyogVGhlIGxvY2FsX3NpemUgbXVzdCBiZSA+PSAwIGFuZCA8PSBTTEpJVF9NQVhfTE9DQUxfU0laRS4gKi8KICNkZWZpbmUgU0xKSVRfTUFYX0xPQ0FMX1NJWkUJNjU1MzYKIAotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfZW50ZXIoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwKLQlzbGppdF9zaSBvcHRpb25zLCBzbGppdF9zaSBhcmdzLCBzbGppdF9zaSBzY3JhdGNoZXMsIHNsaml0X3NpIHNhdmVkcywKLQlzbGppdF9zaSBmc2NyYXRjaGVzLCBzbGppdF9zaSBmc2F2ZWRzLCBzbGppdF9zaSBsb2NhbF9zaXplKTsKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zMzIgc2xqaXRfZW1pdF9lbnRlcihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLAorCXNsaml0X3MzMiBvcHRpb25zLCBzbGppdF9zMzIgYXJncywgc2xqaXRfczMyIHNjcmF0Y2hlcywgc2xqaXRfczMyIHNhdmVkcywKKwlzbGppdF9zMzIgZnNjcmF0Y2hlcywgc2xqaXRfczMyIGZzYXZlZHMsIHNsaml0X3MzMiBsb2NhbF9zaXplKTsKIAogLyogVGhlIG1hY2hpbmUgY29kZSBoYXMgYSBjb250ZXh0ICh3aGljaCBjb250YWlucyB0aGUgbG9jYWwgc3RhY2sgc3BhY2Ugc2l6ZSwKICAgIG51bWJlciBvZiB1c2VkIHJlZ2lzdGVycywgZXRjLikgd2hpY2ggaW5pdGlhbGl6ZWQgYnkgc2xqaXRfZW1pdF9lbnRlci4gU2V2ZXJhbApAQCAtNTMyLDkgKzUzMiw5IEBACiAgICBOb3RlOiBldmVyeSBjYWxsIG9mIHNsaml0X2VtaXRfZW50ZXIgYW5kIHNsaml0X3NldF9jb250ZXh0IG92ZXJ3cml0ZXMKICAgICAgICAgIHRoZSBwcmV2aW91cyBjb250ZXh0LiAqLwogCi1TTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfc2V0X2NvbnRleHQoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwKLQlzbGppdF9zaSBvcHRpb25zLCBzbGppdF9zaSBhcmdzLCBzbGppdF9zaSBzY3JhdGNoZXMsIHNsaml0X3NpIHNhdmVkcywKLQlzbGppdF9zaSBmc2NyYXRjaGVzLCBzbGppdF9zaSBmc2F2ZWRzLCBzbGppdF9zaSBsb2NhbF9zaXplKTsKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zMzIgc2xqaXRfc2V0X2NvbnRleHQoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwKKwlzbGppdF9zMzIgb3B0aW9ucywgc2xqaXRfczMyIGFyZ3MsIHNsaml0X3MzMiBzY3JhdGNoZXMsIHNsaml0X3MzMiBzYXZlZHMsCisJc2xqaXRfczMyIGZzY3JhdGNoZXMsIHNsaml0X3MzMiBmc2F2ZWRzLCBzbGppdF9zMzIgbG9jYWxfc2l6ZSk7CiAKIC8qIFJldHVybiBmcm9tIG1hY2hpbmUgY29kZS4gIFRoZSBvcCBhcmd1bWVudCBjYW4gYmUgU0xKSVRfVU5VU0VEIHdoaWNoIG1lYW5zIHRoZQogICAgZnVuY3Rpb24gZG9lcyBub3QgcmV0dXJuIHdpdGggYW55dGhpbmcgb3IgYW55IG9wY29kZSBiZXR3ZWVuIFNMSklUX01PViBhbmQKQEAgLTU0Miw4ICs1NDIsOCBAQAogICAgaXMgU0xKSVRfVU5VU0VELCBvdGhlcndpc2Ugc2VlIGJlbG93IHRoZSBkZXNjcmlwdGlvbiBhYm91dCBzb3VyY2UgYW5kCiAgICBkZXN0aW5hdGlvbiBhcmd1bWVudHMuICovCiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X3JldHVybihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwKLQlzbGppdF9zaSBzcmMsIHNsaml0X3N3IHNyY3cpOworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3MzMiBzbGppdF9lbWl0X3JldHVybihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgb3AsCisJc2xqaXRfczMyIHNyYywgc2xqaXRfc3cgc3Jjdyk7CiAKIC8qIEZhc3QgY2FsbGluZyBtZWNoYW5pc20gZm9yIHV0aWxpdHkgZnVuY3Rpb25zIChzZWUgU0xKSVRfRkFTVF9DQUxMKS4gQWxsIHJlZ2lzdGVycyBhbmQKICAgIGV2ZW4gdGhlIHN0YWNrIGZyYW1lIGlzIHBhc3NlZCB0byB0aGUgY2FsbGVlLiBUaGUgcmV0dXJuIGFkZHJlc3MgaXMgcHJlc2VydmVkIGluCkBAIC01NjAsOCArNTYwLDggQEAKIC8qIE5vdGU6IGFsdGhvdWdoIHNsaml0X2VtaXRfZmFzdF9yZXR1cm4gY291bGQgYmUgcmVwbGFjZWQgYnkgYW4gaWp1bXAsIGl0IGlzIG5vdCBzdWdnZXN0ZWQsCiAgICBzaW5jZSBtYW55IGFyY2hpdGVjdHVyZXMgZG8gY2xldmVyIGJyYW5jaCBwcmVkaWN0aW9uIG9uIGNhbGwgLyByZXR1cm4gaW5zdHJ1Y3Rpb24gcGFpcnMuICovCiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X2Zhc3RfZW50ZXIoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3KTsKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X2Zhc3RfcmV0dXJuKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIHNyYywgc2xqaXRfc3cgc3Jjdyk7CitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfczMyIHNsaml0X2VtaXRfZmFzdF9lbnRlcihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgZHN0LCBzbGppdF9zdyBkc3R3KTsKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zMzIgc2xqaXRfZW1pdF9mYXN0X3JldHVybihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgc3JjLCBzbGppdF9zdyBzcmN3KTsKIAogLyoKICAgIFNvdXJjZSBhbmQgZGVzdGluYXRpb24gdmFsdWVzIGZvciBhcml0aG1ldGljYWwgaW5zdHJ1Y3Rpb25zCkBAIC02MjQsMzEgKzYyNCwyOSBAQAogI2RlZmluZSBTTEpJVF9NRU0yKHIxLCByMikJKFNMSklUX01FTSB8IChyMSkgfCAoKHIyKSA8PCA4KSkKICNkZWZpbmUgU0xKSVRfSU1NCQkweDQwCiAKLS8qIFNldCAzMiBiaXQgb3BlcmF0aW9uIG1vZGUgKEkpIG9uIDY0IGJpdCBDUFVzLiBUaGUgZmxhZyBpcyB0b3RhbGx5IGlnbm9yZWQgb24KLSAgIDMyIGJpdCBDUFVzLiBJZiB0aGlzIGZsYWcgaXMgc2V0IGZvciBhbiBhcml0aG1ldGljIG9wZXJhdGlvbiwgaXQgdXNlcyBvbmx5IHRoZQotICAgbG93ZXIgMzIgYml0IG9mIHRoZSBpbnB1dCByZWdpc3RlcihzKSwgYW5kIHNldCB0aGUgQ1BVIHN0YXR1cyBmbGFncyBhY2NvcmRpbmcKLSAgIHRvIHRoZSAzMiBiaXQgcmVzdWx0LiBUaGUgaGlnaGVyIDMyIGJpdHMgYXJlIHVuZGVmaW5lZCBmb3IgYm90aCB0aGUgaW5wdXQgYW5kCi0gICBvdXRwdXQuIEhvd2V2ZXIsIHRoZSBDUFUgbWlnaHQgbm90IGlnbm9yZSB0aG9zZSBoaWdoZXIgMzIgYml0cywgbGlrZSBNSVBTLCB3aGljaAotICAgZXhwZWN0cyBpdCB0byBiZSB0aGUgc2lnbiBleHRlbnNpb24gb2YgdGhlIGxvd2VyIDMyIGJpdC4gQWxsIDMyIGJpdCBvcGVyYXRpb25zCi0gICBhcmUgdW5kZWZpbmVkLCBpZiB0aGlzIGNvbmRpdGlvbiBpcyBub3QgZnVsZmlsbGVkLiBUaGVyZWZvcmUsIHdoZW4gU0xKSVRfSU5UX09QCi0gICBpcyBzcGVjaWZpZWQsIGFsbCByZWdpc3RlciBhcmd1bWVudHMgbXVzdCBiZSB0aGUgcmVzdWx0IG9mIG90aGVyIG9wZXJhdGlvbnMgd2l0aAotICAgdGhlIHNhbWUgU0xKSVRfSU5UX09QIGZsYWcuIEluIG90aGVyIHdvcmRzLCBhbHRob3VnaCBhIHJlZ2lzdGVyIGNhbiBob2xkIGVpdGhlcgotICAgYSA2NCBvciAzMiBiaXQgdmFsdWUsIHRoZXNlIHZhbHVlcyBjYW5ub3QgYmUgbWl4ZWQuIFRoZSBvbmx5IGV4Y2VwdGlvbnMgYXJlCi0gICBTTEpJVF9JTU9WIGFuZCBTTEpJVF9JTU9WVSAoU0xKSVRfTU9WX1NJL1NMSklUX01PVlVfU0kgd2l0aCBTTEpJVF9JTlRfT1AgZmxhZykKLSAgIHdoaWNoIGNhbiBjb252ZXJ0IGFueSBzb3VyY2UgYXJndW1lbnQgdG8gU0xKSVRfSU5UX09QIGNvbXBhdGlibGUgcmVzdWx0LiBUaGlzCi0gICBjb252ZXJzaW9uIG1pZ2h0IGJlIHVubmVjZXNzYXJ5IG9uIHNvbWUgQ1BVcyBsaWtlIHg4Ni02NCwgc2luY2UgdGhlIHVwcGVyIDMyCi0gICBiaXQgaXMgYWx3YXlzIGlnbm9yZWQuIEluIHRoaXMgY2FzZSBTTEpJVCBpcyBjbGV2ZXIgZW5vdWdoIHRvIG5vdCBnZW5lcmF0ZSBhbnkKLSAgIGluc3RydWN0aW9ucyBpZiB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBvcGVyYW5kcyBhcmUgdGhlIHNhbWUgcmVnaXN0ZXJzLgotICAgQWZmZWN0cyBzbGppdF9lbWl0X29wMCwgc2xqaXRfZW1pdF9vcDEgYW5kIHNsaml0X2VtaXRfb3AyLiAqLwotI2RlZmluZSBTTEpJVF9JTlRfT1AJCTB4MTAwCisvKiBTZXQgMzIgYml0IG9wZXJhdGlvbiBtb2RlIChJKSBvbiA2NCBiaXQgQ1BVcy4gVGhpcyBmbGFnIGlzIGlnbm9yZWQgb24gMzIKKyAgIGJpdCBDUFVzLiBXaGVuIHRoaXMgZmxhZyBpcyBzZXQgZm9yIGFuIGFyaXRobWV0aWMgb3BlcmF0aW9uLCBvbmx5IHRoZQorICAgbG93ZXIgMzIgYml0IG9mIHRoZSBpbnB1dCByZWdpc3RlcihzKSBhcmUgdXNlZCwgYW5kIHRoZSBDUFUgc3RhdHVzIGZsYWdzCisgICBhcmUgc2V0IGFjY29yZGluZyB0byB0aGUgMzIgYml0IHJlc3VsdC4gQWx0aG91Z2ggdGhlIGhpZ2hlciAzMiBiaXQgb2YKKyAgIHRoZSBpbnB1dCBhbmQgdGhlIHJlc3VsdCByZWdpc3RlcnMgYXJlIG5vdCBkZWZpbmVkIGJ5IFNMSklULCBpdCBtaWdodCBiZQorICAgZGVmaW5lZCBieSB0aGUgQ1BVIGFyY2hpdGVjdHVyZSAoZS5nLiBNSVBTKS4gVG8gc2F0aXNmeSB0aGVzZSByZXF1aXJlbWVudHMKKyAgIGFsbCBzb3VyY2UgcmVnaXN0ZXJzIG11c3QgYmUgY29tcHV0ZWQgYnkgb3BlcmF0aW9ucyB3aGVyZSB0aGlzIGZsYWcgaXMKKyAgIGFsc28gc2V0LiBJbiBvdGhlciB3b3JkcyAzMiBhbmQgNjQgYml0IGFyaXRobWV0aWMgb3BlcmF0aW9ucyBjYW5ub3QgYmUKKyAgIG1peGVkLiBUaGUgb25seSBleGNlcHRpb24gaXMgU0xKSVRfSU1PViBhbmQgU0xKSVRfSU1PVlUgd2hvc2Ugc291cmNlCisgICByZWdpc3RlciBjYW4gaG9sZCBhbnkgMzIgb3IgNjQgYml0IHZhbHVlLiBUaGlzIHNvdXJjZSByZWdpc3RlciBpcworICAgY29udmVydGVkIHRvIGEgMzIgYml0IGNvbXBhdGlibGUgZm9ybWF0LiBTTEpJVCBkb2VzIG5vdCBnZW5lcmF0ZSBhbnkKKyAgIGluc3RydWN0aW9ucyBvbiBjZXJ0YWluIENQVXMgKGUuZy4gb24geDg2IGFuZCBBUk0pIGlmIHRoZSBzb3VyY2UgYW5kCisgICBkZXN0aW5hdGlvbiBvcGVyYW5kcyBhcmUgdGhlIHNhbWUgcmVnaXN0ZXJzLiBBZmZlY3RzIHNsaml0X2VtaXRfb3AwLAorICAgc2xqaXRfZW1pdF9vcDEgYW5kIHNsaml0X2VtaXRfb3AyLiAqLworI2RlZmluZSBTTEpJVF9JMzJfT1AJCTB4MTAwCiAKLS8qIFNpbmdsZSBwcmVjaXNpb24gbW9kZSAoU1ApLiBUaGlzIGZsYWcgaXMgc2ltaWxhciB0byBTTEpJVF9JTlRfT1AsIGp1c3QKKy8qIEYzMiBwcmVjaXNpb24gbW9kZSAoU1ApLiBUaGlzIGZsYWcgaXMgc2ltaWxhciB0byBTTEpJVF9JMzJfT1AsIGp1c3QKICAgIGl0IGFwcGxpZXMgdG8gZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzIChpdCBpcyBldmVuIHRoZSBzYW1lIGJpdCkuIFdoZW4KLSAgIHRoaXMgZmxhZyBpcyBwYXNzZWQsIHRoZSBDUFUgcGVyZm9ybXMgc2luZ2xlIHByZWNpc2lvbiBmbG9hdGluZyBwb2ludAotICAgb3BlcmF0aW9ucy4gU2ltaWxhciB0byBTTEpJVF9JTlRfT1AsIGFsbCByZWdpc3RlciBhcmd1bWVudHMgbXVzdCBiZSB0aGUKLSAgIHJlc3VsdCBvZiBvdGhlciBmbG9hdGluZyBwb2ludCBvcGVyYXRpb25zIHdpdGggdGhpcyBmbGFnLiBBZmZlY3RzCisgICB0aGlzIGZsYWcgaXMgcGFzc2VkLCB0aGUgQ1BVIHBlcmZvcm1zIDMyIGJpdCBmbG9hdGluZyBwb2ludCBvcGVyYXRpb25zLgorICAgU2ltaWxhciB0byBTTEpJVF9JMzJfT1AsIGFsbCByZWdpc3RlciBhcmd1bWVudHMgbXVzdCBiZSBjb21wdXRlZCBieQorICAgZmxvYXRpbmcgcG9pbnQgb3BlcmF0aW9ucyB3aGVyZSB0aGlzIGZsYWcgaXMgYWxzbyBzZXQuIEFmZmVjdHMKICAgIHNsaml0X2VtaXRfZm9wMSwgc2xqaXRfZW1pdF9mb3AyIGFuZCBzbGppdF9lbWl0X2ZjbXAuICovCi0jZGVmaW5lIFNMSklUX1NJTkdMRV9PUAkJMHgxMDAKKyNkZWZpbmUgU0xKSVRfRjMyX09QCQkweDEwMAogCiAvKiBDb21tb24gQ1BVIHN0YXR1cyBmbGFncyBmb3IgYWxsIGFyY2hpdGVjdHVyZXMgKHg4NiwgQVJNLCBQUEMpCiAgICAgLSBjYXJyeSBmbGFnCkBAIC02OTcsNDMgKzY5NSw0MSBAQAogLyogRmxhZ3M6IC0gKG1heSBkZXN0cm95IGZsYWdzKQogICAgVW5zaWduZWQgbXVsdGlwbGljYXRpb24gb2YgU0xKSVRfUjAgYW5kIFNMSklUX1IxLgogICAgUmVzdWx0IGlzIHBsYWNlZCBpbnRvIFNMSklUX1IxOlNMSklUX1IwIChoaWdoOmxvdykgd29yZCAqLwotI2RlZmluZSBTTEpJVF9MVU1VTAkJCShTTEpJVF9PUDBfQkFTRSArIDIpCisjZGVmaW5lIFNMSklUX0xNVUxfVVcJCQkoU0xKSVRfT1AwX0JBU0UgKyAyKQogLyogRmxhZ3M6IC0gKG1heSBkZXN0cm95IGZsYWdzKQogICAgU2lnbmVkIG11bHRpcGxpY2F0aW9uIG9mIFNMSklUX1IwIGFuZCBTTEpJVF9SMS4KICAgIFJlc3VsdCBpcyBwbGFjZWQgaW50byBTTEpJVF9SMTpTTEpJVF9SMCAoaGlnaDpsb3cpIHdvcmQgKi8KLSNkZWZpbmUgU0xKSVRfTFNNVUwJCQkoU0xKSVRfT1AwX0JBU0UgKyAzKQorI2RlZmluZSBTTEpJVF9MTVVMX1NXCQkJKFNMSklUX09QMF9CQVNFICsgMykKIC8qIEZsYWdzOiBJIC0gKG1heSBkZXN0cm95IGZsYWdzKQogICAgVW5zaWduZWQgZGl2aWRlIG9mIHRoZSB2YWx1ZSBpbiBTTEpJVF9SMCBieSB0aGUgdmFsdWUgaW4gU0xKSVRfUjEuCiAgICBUaGUgcmVzdWx0IGlzIHBsYWNlZCBpbnRvIFNMSklUX1IwIGFuZCB0aGUgcmVtYWluZGVyIGludG8gU0xKSVRfUjEuCiAgICBOb3RlOiBpZiBTTEpJVF9SMSBpcyAwLCB0aGUgYmVoYXZpb3VyIGlzIHVuZGVmaW5lZC4gKi8KLSNkZWZpbmUgU0xKSVRfVURJVk1PRAkJCShTTEpJVF9PUDBfQkFTRSArIDQpCi0jZGVmaW5lIFNMSklUX0lVRElWTU9ECQkJKFNMSklUX1VESVZNT0QgfCBTTEpJVF9JTlRfT1ApCisjZGVmaW5lIFNMSklUX0RJVk1PRF9VVwkJCShTTEpJVF9PUDBfQkFTRSArIDQpCisjZGVmaW5lIFNMSklUX0RJVk1PRF9VMzIJCShTTEpJVF9ESVZNT0RfVVcgfCBTTEpJVF9JMzJfT1ApCiAvKiBGbGFnczogSSAtIChtYXkgZGVzdHJveSBmbGFncykKICAgIFNpZ25lZCBkaXZpZGUgb2YgdGhlIHZhbHVlIGluIFNMSklUX1IwIGJ5IHRoZSB2YWx1ZSBpbiBTTEpJVF9SMS4KICAgIFRoZSByZXN1bHQgaXMgcGxhY2VkIGludG8gU0xKSVRfUjAgYW5kIHRoZSByZW1haW5kZXIgaW50byBTTEpJVF9SMS4KICAgIE5vdGU6IGlmIFNMSklUX1IxIGlzIDAsIHRoZSBiZWhhdmlvdXIgaXMgdW5kZWZpbmVkLgogICAgTm90ZTogaWYgU0xKSVRfUjEgaXMgLTEgYW5kIFNMSklUX1IwIGlzIGludGVnZXIgbWluICgweDgwMC4uMDApLAogICAgICAgICAgdGhlIGJlaGF2aW91ciBpcyB1bmRlZmluZWQuICovCi0jZGVmaW5lIFNMSklUX1NESVZNT0QJCQkoU0xKSVRfT1AwX0JBU0UgKyA1KQotI2RlZmluZSBTTEpJVF9JU0RJVk1PRAkJCShTTEpJVF9TRElWTU9EIHwgU0xKSVRfSU5UX09QKQorI2RlZmluZSBTTEpJVF9ESVZNT0RfU1cJCQkoU0xKSVRfT1AwX0JBU0UgKyA1KQorI2RlZmluZSBTTEpJVF9ESVZNT0RfUzMyCQkoU0xKSVRfRElWTU9EX1NXIHwgU0xKSVRfSTMyX09QKQogLyogRmxhZ3M6IEkgLSAobWF5IGRlc3Ryb3kgZmxhZ3MpCiAgICBVbnNpZ25lZCBkaXZpZGUgb2YgdGhlIHZhbHVlIGluIFNMSklUX1IwIGJ5IHRoZSB2YWx1ZSBpbiBTTEpJVF9SMS4KICAgIFRoZSByZXN1bHQgaXMgcGxhY2VkIGludG8gU0xKSVRfUjAuIFNMSklUX1IxIHByZXNlcnZlcyBpdHMgdmFsdWUuCi0gICBOb3RlOiBpZiBTTEpJVF9SMSBpcyAwLCB0aGUgYmVoYXZpb3VyIGlzIHVuZGVmaW5lZC4KLSAgIE5vdGU6IFNMSklUX1NESVYgaXMgc2luZ2xlIHByZWNpc2lvbiBkaXZpZGUuICovCi0jZGVmaW5lIFNMSklUX1VESVZJCQkJKFNMSklUX09QMF9CQVNFICsgNikKLSNkZWZpbmUgU0xKSVRfSVVESVZJCQkJKFNMSklUX1VESVZJIHwgU0xKSVRfSU5UX09QKQorICAgTm90ZTogaWYgU0xKSVRfUjEgaXMgMCwgdGhlIGJlaGF2aW91ciBpcyB1bmRlZmluZWQuICovCisjZGVmaW5lIFNMSklUX0RJVl9VVwkJCShTTEpJVF9PUDBfQkFTRSArIDYpCisjZGVmaW5lIFNMSklUX0RJVl9VMzIJCQkoU0xKSVRfRElWX1VXIHwgU0xKSVRfSTMyX09QKQogLyogRmxhZ3M6IEkgLSAobWF5IGRlc3Ryb3kgZmxhZ3MpCiAgICBTaWduZWQgZGl2aWRlIG9mIHRoZSB2YWx1ZSBpbiBTTEpJVF9SMCBieSB0aGUgdmFsdWUgaW4gU0xKSVRfUjEuCiAgICBUaGUgcmVzdWx0IGlzIHBsYWNlZCBpbnRvIFNMSklUX1IwLiBTTEpJVF9SMSBwcmVzZXJ2ZXMgaXRzIHZhbHVlLgogICAgTm90ZTogaWYgU0xKSVRfUjEgaXMgMCwgdGhlIGJlaGF2aW91ciBpcyB1bmRlZmluZWQuCiAgICBOb3RlOiBpZiBTTEpJVF9SMSBpcyAtMSBhbmQgU0xKSVRfUjAgaXMgaW50ZWdlciBtaW4gKDB4ODAwLi4wMCksCi0gICAgICAgICB0aGUgYmVoYXZpb3VyIGlzIHVuZGVmaW5lZC4KLSAgIE5vdGU6IFNMSklUX1NESVYgaXMgc2luZ2xlIHByZWNpc2lvbiBkaXZpZGUuICovCi0jZGVmaW5lIFNMSklUX1NESVZJCQkJKFNMSklUX09QMF9CQVNFICsgNykKLSNkZWZpbmUgU0xKSVRfSVNESVZJCQkJKFNMSklUX1NESVZJIHwgU0xKSVRfSU5UX09QKQorICAgICAgICAgdGhlIGJlaGF2aW91ciBpcyB1bmRlZmluZWQuICovCisjZGVmaW5lIFNMSklUX0RJVl9TVwkJCShTTEpJVF9PUDBfQkFTRSArIDcpCisjZGVmaW5lIFNMSklUX0RJVl9TMzIJCQkoU0xKSVRfRElWX1NXIHwgU0xKSVRfSTMyX09QKQogCi1TTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9vcDAoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3ApOworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3MzMiBzbGppdF9lbWl0X29wMChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgb3ApOwogCiAvKiBTdGFydGluZyBpbmRleCBvZiBvcGNvZGVzIGZvciBzbGppdF9lbWl0X29wMS4gKi8KICNkZWZpbmUgU0xKSVRfT1AxX0JBU0UJCQkzMgpAQCAtNzUyLDE4OCArNzQ4LDE4OCBAQAogLyogRmxhZ3M6IC0gKG5ldmVyIHNldCBhbnkgZmxhZ3MpICovCiAjZGVmaW5lIFNMSklUX01PVgkJCShTTEpJVF9PUDFfQkFTRSArIDApCiAvKiBGbGFnczogSSAtIChuZXZlciBzZXQgYW55IGZsYWdzKSAqLwotI2RlZmluZSBTTEpJVF9NT1ZfVUIJCQkoU0xKSVRfT1AxX0JBU0UgKyAxKQotI2RlZmluZSBTTEpJVF9JTU9WX1VCCQkJKFNMSklUX01PVl9VQiB8IFNMSklUX0lOVF9PUCkKKyNkZWZpbmUgU0xKSVRfTU9WX1U4CQkJKFNMSklUX09QMV9CQVNFICsgMSkKKyNkZWZpbmUgU0xKSVRfTU9WMzJfVTgJCQkoU0xKSVRfTU9WX1U4IHwgU0xKSVRfSTMyX09QKQogLyogRmxhZ3M6IEkgLSAobmV2ZXIgc2V0IGFueSBmbGFncykgKi8KLSNkZWZpbmUgU0xKSVRfTU9WX1NCCQkJKFNMSklUX09QMV9CQVNFICsgMikKLSNkZWZpbmUgU0xKSVRfSU1PVl9TQgkJCShTTEpJVF9NT1ZfU0IgfCBTTEpJVF9JTlRfT1ApCisjZGVmaW5lIFNMSklUX01PVl9TOAkJCShTTEpJVF9PUDFfQkFTRSArIDIpCisjZGVmaW5lIFNMSklUX01PVjMyX1M4CQkJKFNMSklUX01PVl9TOCB8IFNMSklUX0kzMl9PUCkKIC8qIEZsYWdzOiBJIC0gKG5ldmVyIHNldCBhbnkgZmxhZ3MpICovCi0jZGVmaW5lIFNMSklUX01PVl9VSAkJCShTTEpJVF9PUDFfQkFTRSArIDMpCi0jZGVmaW5lIFNMSklUX0lNT1ZfVUgJCQkoU0xKSVRfTU9WX1VIIHwgU0xKSVRfSU5UX09QKQorI2RlZmluZSBTTEpJVF9NT1ZfVTE2CQkJKFNMSklUX09QMV9CQVNFICsgMykKKyNkZWZpbmUgU0xKSVRfTU9WMzJfVTE2CQkJKFNMSklUX01PVl9VMTYgfCBTTEpJVF9JMzJfT1ApCiAvKiBGbGFnczogSSAtIChuZXZlciBzZXQgYW55IGZsYWdzKSAqLwotI2RlZmluZSBTTEpJVF9NT1ZfU0gJCQkoU0xKSVRfT1AxX0JBU0UgKyA0KQotI2RlZmluZSBTTEpJVF9JTU9WX1NICQkJKFNMSklUX01PVl9TSCB8IFNMSklUX0lOVF9PUCkKKyNkZWZpbmUgU0xKSVRfTU9WX1MxNgkJCShTTEpJVF9PUDFfQkFTRSArIDQpCisjZGVmaW5lIFNMSklUX01PVjMyX1MxNgkJCShTTEpJVF9NT1ZfUzE2IHwgU0xKSVRfSTMyX09QKQogLyogRmxhZ3M6IEkgLSAobmV2ZXIgc2V0IGFueSBmbGFncykKLSAgIE5vdGU6IHNlZSBTTEpJVF9JTlRfT1AgZm9yIGZ1cnRoZXIgZGV0YWlscy4gKi8KLSNkZWZpbmUgU0xKSVRfTU9WX1VJCQkJKFNMSklUX09QMV9CQVNFICsgNSkKLS8qIE5vIFNMSklUX0lOVF9PUCBmb3JtLCBzaW5jZSBpdCBpcyB0aGUgc2FtZSBhcyBTTEpJVF9JTU9WLiAqLworICAgTm90ZTogbm8gU0xKSVRfTU9WMzJfVTMyIGZvcm0sIHNpbmNlIGl0IGlzIHRoZSBzYW1lIGFzIFNMSklUX01PVjMyICovCisjZGVmaW5lIFNMSklUX01PVl9VMzIJCQkoU0xKSVRfT1AxX0JBU0UgKyA1KQogLyogRmxhZ3M6IEkgLSAobmV2ZXIgc2V0IGFueSBmbGFncykKLSAgIE5vdGU6IHNlZSBTTEpJVF9JTlRfT1AgZm9yIGZ1cnRoZXIgZGV0YWlscy4gKi8KLSNkZWZpbmUgU0xKSVRfTU9WX1NJCQkJKFNMSklUX09QMV9CQVNFICsgNikKLSNkZWZpbmUgU0xKSVRfSU1PVgkJCShTTEpJVF9NT1ZfU0kgfCBTTEpJVF9JTlRfT1ApCisgICBOb3RlOiBubyBTTEpJVF9NT1YzMl9TMzIgZm9ybSwgc2luY2UgaXQgaXMgdGhlIHNhbWUgYXMgU0xKSVRfTU9WMzIgKi8KKyNkZWZpbmUgU0xKSVRfTU9WX1MzMgkJCShTTEpJVF9PUDFfQkFTRSArIDYpCisvKiBGbGFnczogSSAtIChuZXZlciBzZXQgYW55IGZsYWdzKSAqLworI2RlZmluZSBTTEpJVF9NT1YzMgkJCShTTEpJVF9NT1ZfUzMyIHwgU0xKSVRfSTMyX09QKQogLyogRmxhZ3M6IC0gKG5ldmVyIHNldCBhbnkgZmxhZ3MpICovCiAjZGVmaW5lIFNMSklUX01PVl9QCQkJKFNMSklUX09QMV9CQVNFICsgNykKIC8qIEZsYWdzOiAtIChuZXZlciBzZXQgYW55IGZsYWdzKSAqLwogI2RlZmluZSBTTEpJVF9NT1ZVCQkJKFNMSklUX09QMV9CQVNFICsgOCkKIC8qIEZsYWdzOiBJIC0gKG5ldmVyIHNldCBhbnkgZmxhZ3MpICovCi0jZGVmaW5lIFNMSklUX01PVlVfVUIJCQkoU0xKSVRfT1AxX0JBU0UgKyA5KQotI2RlZmluZSBTTEpJVF9JTU9WVV9VQgkJCShTTEpJVF9NT1ZVX1VCIHwgU0xKSVRfSU5UX09QKQorI2RlZmluZSBTTEpJVF9NT1ZVX1U4CQkJKFNMSklUX09QMV9CQVNFICsgOSkKKyNkZWZpbmUgU0xKSVRfTU9WVTMyX1U4CQkJKFNMSklUX01PVlVfVTggfCBTTEpJVF9JMzJfT1ApCiAvKiBGbGFnczogSSAtIChuZXZlciBzZXQgYW55IGZsYWdzKSAqLwotI2RlZmluZSBTTEpJVF9NT1ZVX1NCCQkJKFNMSklUX09QMV9CQVNFICsgMTApCi0jZGVmaW5lIFNMSklUX0lNT1ZVX1NCCQkJKFNMSklUX01PVlVfU0IgfCBTTEpJVF9JTlRfT1ApCisjZGVmaW5lIFNMSklUX01PVlVfUzgJCQkoU0xKSVRfT1AxX0JBU0UgKyAxMCkKKyNkZWZpbmUgU0xKSVRfTU9WVTMyX1M4CQkJKFNMSklUX01PVlVfUzggfCBTTEpJVF9JMzJfT1ApCiAvKiBGbGFnczogSSAtIChuZXZlciBzZXQgYW55IGZsYWdzKSAqLwotI2RlZmluZSBTTEpJVF9NT1ZVX1VICQkJKFNMSklUX09QMV9CQVNFICsgMTEpCi0jZGVmaW5lIFNMSklUX0lNT1ZVX1VICQkJKFNMSklUX01PVlVfVUggfCBTTEpJVF9JTlRfT1ApCisjZGVmaW5lIFNMSklUX01PVlVfVTE2CQkJKFNMSklUX09QMV9CQVNFICsgMTEpCisjZGVmaW5lIFNMSklUX01PVlUzMl9VMTYJCQkoU0xKSVRfTU9WVV9VMTYgfCBTTEpJVF9JMzJfT1ApCiAvKiBGbGFnczogSSAtIChuZXZlciBzZXQgYW55IGZsYWdzKSAqLwotI2RlZmluZSBTTEpJVF9NT1ZVX1NICQkJKFNMSklUX09QMV9CQVNFICsgMTIpCi0jZGVmaW5lIFNMSklUX0lNT1ZVX1NICQkJKFNMSklUX01PVlVfU0ggfCBTTEpJVF9JTlRfT1ApCisjZGVmaW5lIFNMSklUX01PVlVfUzE2CQkJKFNMSklUX09QMV9CQVNFICsgMTIpCisjZGVmaW5lIFNMSklUX01PVlUzMl9TMTYJCShTTEpJVF9NT1ZVX1MxNiB8IFNMSklUX0kzMl9PUCkKIC8qIEZsYWdzOiBJIC0gKG5ldmVyIHNldCBhbnkgZmxhZ3MpCi0gICBOb3RlOiBzZWUgU0xKSVRfSU5UX09QIGZvciBmdXJ0aGVyIGRldGFpbHMuICovCi0jZGVmaW5lIFNMSklUX01PVlVfVUkJCQkoU0xKSVRfT1AxX0JBU0UgKyAxMykKLS8qIE5vIFNMSklUX0lOVF9PUCBmb3JtLCBzaW5jZSBpdCBpcyB0aGUgc2FtZSBhcyBTTEpJVF9JTU9WVS4gKi8KKyAgIE5vdGU6IG5vIFNMSklUX01PVlUzMl9VMzIgZm9ybSwgc2luY2UgaXQgaXMgdGhlIHNhbWUgYXMgU0xKSVRfTU9WVTMyICovCisjZGVmaW5lIFNMSklUX01PVlVfVTMyCQkJKFNMSklUX09QMV9CQVNFICsgMTMpCiAvKiBGbGFnczogSSAtIChuZXZlciBzZXQgYW55IGZsYWdzKQotICAgTm90ZTogc2VlIFNMSklUX0lOVF9PUCBmb3IgZnVydGhlciBkZXRhaWxzLiAqLwotI2RlZmluZSBTTEpJVF9NT1ZVX1NJCQkJKFNMSklUX09QMV9CQVNFICsgMTQpCi0jZGVmaW5lIFNMSklUX0lNT1ZVCQkJKFNMSklUX01PVlVfU0kgfCBTTEpJVF9JTlRfT1ApCisgICBOb3RlOiBubyBTTEpJVF9NT1ZVMzJfUzMyIGZvcm0sIHNpbmNlIGl0IGlzIHRoZSBzYW1lIGFzIFNMSklUX01PVlUzMiAqLworI2RlZmluZSBTTEpJVF9NT1ZVX1MzMgkJCShTTEpJVF9PUDFfQkFTRSArIDE0KQorLyogRmxhZ3M6IEkgLSAobmV2ZXIgc2V0IGFueSBmbGFncykgKi8KKyNkZWZpbmUgU0xKSVRfTU9WVTMyCQkJKFNMSklUX01PVlVfUzMyIHwgU0xKSVRfSTMyX09QKQogLyogRmxhZ3M6IC0gKG5ldmVyIHNldCBhbnkgZmxhZ3MpICovCiAjZGVmaW5lIFNMSklUX01PVlVfUAkJCShTTEpJVF9PUDFfQkFTRSArIDE1KQogLyogRmxhZ3M6IEkgfCBFIHwgSyAqLwogI2RlZmluZSBTTEpJVF9OT1QJCQkoU0xKSVRfT1AxX0JBU0UgKyAxNikKLSNkZWZpbmUgU0xKSVRfSU5PVAkJCShTTEpJVF9OT1QgfCBTTEpJVF9JTlRfT1ApCisjZGVmaW5lIFNMSklUX05PVDMyCQkJKFNMSklUX05PVCB8IFNMSklUX0kzMl9PUCkKIC8qIEZsYWdzOiBJIHwgRSB8IE8gfCBLICovCiAjZGVmaW5lIFNMSklUX05FRwkJCShTTEpJVF9PUDFfQkFTRSArIDE3KQotI2RlZmluZSBTTEpJVF9JTkVHCQkJKFNMSklUX05FRyB8IFNMSklUX0lOVF9PUCkKKyNkZWZpbmUgU0xKSVRfTkVHMzIJCQkoU0xKSVRfTkVHIHwgU0xKSVRfSTMyX09QKQogLyogQ291bnQgbGVhZGluZyB6ZXJvZXMKICAgIEZsYWdzOiBJIHwgRSB8IEsKICAgIEltcG9ydGFudCBub3RlISBTcGFyYyAzMiBkb2VzIG5vdCBzdXBwb3J0IEsgZmxhZywgc2luY2UKICAgIHRoZSByZXF1aXJlZCBwb3BjIGluc3RydWN0aW9uIGlzIGludHJvZHVjZWQgb25seSBpbiBzcGFyYyA2NC4gKi8KICNkZWZpbmUgU0xKSVRfQ0xaCQkJKFNMSklUX09QMV9CQVNFICsgMTgpCi0jZGVmaW5lIFNMSklUX0lDTFoJCQkoU0xKSVRfQ0xaIHwgU0xKSVRfSU5UX09QKQorI2RlZmluZSBTTEpJVF9DTFozMgkJCShTTEpJVF9DTFogfCBTTEpJVF9JMzJfT1ApCiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X29wMShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwKLQlzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsCi0Jc2xqaXRfc2kgc3JjLCBzbGppdF9zdyBzcmN3KTsKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zMzIgc2xqaXRfZW1pdF9vcDEoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIG9wLAorCXNsaml0X3MzMiBkc3QsIHNsaml0X3N3IGRzdHcsCisJc2xqaXRfczMyIHNyYywgc2xqaXRfc3cgc3Jjdyk7CiAKIC8qIFN0YXJ0aW5nIGluZGV4IG9mIG9wY29kZXMgZm9yIHNsaml0X2VtaXRfb3AyLiAqLwogI2RlZmluZSBTTEpJVF9PUDJfQkFTRQkJCTk2CiAKIC8qIEZsYWdzOiBJIHwgRSB8IE8gfCBDIHwgSyAqLwogI2RlZmluZSBTTEpJVF9BREQJCQkoU0xKSVRfT1AyX0JBU0UgKyAwKQotI2RlZmluZSBTTEpJVF9JQURECQkJKFNMSklUX0FERCB8IFNMSklUX0lOVF9PUCkKKyNkZWZpbmUgU0xKSVRfQUREMzIJCQkoU0xKSVRfQUREIHwgU0xKSVRfSTMyX09QKQogLyogRmxhZ3M6IEkgfCBDIHwgSyAqLwogI2RlZmluZSBTTEpJVF9BRERDCQkJKFNMSklUX09QMl9CQVNFICsgMSkKLSNkZWZpbmUgU0xKSVRfSUFEREMJCQkoU0xKSVRfQUREQyB8IFNMSklUX0lOVF9PUCkKKyNkZWZpbmUgU0xKSVRfQUREQzMyCQkJKFNMSklUX0FEREMgfCBTTEpJVF9JMzJfT1ApCiAvKiBGbGFnczogSSB8IEUgfCBVIHwgUyB8IE8gfCBDIHwgSyAqLwogI2RlZmluZSBTTEpJVF9TVUIJCQkoU0xKSVRfT1AyX0JBU0UgKyAyKQotI2RlZmluZSBTTEpJVF9JU1VCCQkJKFNMSklUX1NVQiB8IFNMSklUX0lOVF9PUCkKKyNkZWZpbmUgU0xKSVRfU1VCMzIJCQkoU0xKSVRfU1VCIHwgU0xKSVRfSTMyX09QKQogLyogRmxhZ3M6IEkgfCBDIHwgSyAqLwogI2RlZmluZSBTTEpJVF9TVUJDCQkJKFNMSklUX09QMl9CQVNFICsgMykKLSNkZWZpbmUgU0xKSVRfSVNVQkMJCQkoU0xKSVRfU1VCQyB8IFNMSklUX0lOVF9PUCkKKyNkZWZpbmUgU0xKSVRfU1VCQzMyCQkJKFNMSklUX1NVQkMgfCBTTEpJVF9JMzJfT1ApCiAvKiBOb3RlOiBpbnRlZ2VyIG11bAogICAgRmxhZ3M6IEkgfCBPIChzZWUgU0xKSVRfQ19NVUxfKikgfCBLICovCiAjZGVmaW5lIFNMSklUX01VTAkJCShTTEpJVF9PUDJfQkFTRSArIDQpCi0jZGVmaW5lIFNMSklUX0lNVUwJCQkoU0xKSVRfTVVMIHwgU0xKSVRfSU5UX09QKQorI2RlZmluZSBTTEpJVF9NVUwzMgkJCShTTEpJVF9NVUwgfCBTTEpJVF9JMzJfT1ApCiAvKiBGbGFnczogSSB8IEUgfCBLICovCiAjZGVmaW5lIFNMSklUX0FORAkJCShTTEpJVF9PUDJfQkFTRSArIDUpCi0jZGVmaW5lIFNMSklUX0lBTkQJCQkoU0xKSVRfQU5EIHwgU0xKSVRfSU5UX09QKQorI2RlZmluZSBTTEpJVF9BTkQzMgkJCShTTEpJVF9BTkQgfCBTTEpJVF9JMzJfT1ApCiAvKiBGbGFnczogSSB8IEUgfCBLICovCiAjZGVmaW5lIFNMSklUX09SCQkJKFNMSklUX09QMl9CQVNFICsgNikKLSNkZWZpbmUgU0xKSVRfSU9SCQkJKFNMSklUX09SIHwgU0xKSVRfSU5UX09QKQorI2RlZmluZSBTTEpJVF9PUjMyCQkJKFNMSklUX09SIHwgU0xKSVRfSTMyX09QKQogLyogRmxhZ3M6IEkgfCBFIHwgSyAqLwogI2RlZmluZSBTTEpJVF9YT1IJCQkoU0xKSVRfT1AyX0JBU0UgKyA3KQotI2RlZmluZSBTTEpJVF9JWE9SCQkJKFNMSklUX1hPUiB8IFNMSklUX0lOVF9PUCkKKyNkZWZpbmUgU0xKSVRfWE9SMzIJCQkoU0xKSVRfWE9SIHwgU0xKSVRfSTMyX09QKQogLyogRmxhZ3M6IEkgfCBFIHwgSwogICAgTGV0IGJpdF9sZW5ndGggYmUgdGhlIGxlbmd0aCBvZiB0aGUgc2hpZnQgb3BlcmF0aW9uOiAzMiBvciA2NC4KICAgIElmIHNyYzIgaXMgaW1tZWRpYXRlLCBzcmMydyBpcyBtYXNrZWQgYnkgKGJpdF9sZW5ndGggLSAxKS4KICAgIE90aGVyd2lzZSwgaWYgdGhlIGNvbnRlbnQgb2Ygc3JjMiBpcyBvdXRzaWRlIHRoZSByYW5nZSBmcm9tIDAKICAgIHRvIGJpdF9sZW5ndGggLSAxLCB0aGUgcmVzdWx0IGlzIHVuZGVmaW5lZC4gKi8KICNkZWZpbmUgU0xKSVRfU0hMCQkJKFNMSklUX09QMl9CQVNFICsgOCkKLSNkZWZpbmUgU0xKSVRfSVNITAkJCShTTEpJVF9TSEwgfCBTTEpJVF9JTlRfT1ApCisjZGVmaW5lIFNMSklUX1NITDMyCQkJKFNMSklUX1NITCB8IFNMSklUX0kzMl9PUCkKIC8qIEZsYWdzOiBJIHwgRSB8IEsKICAgIExldCBiaXRfbGVuZ3RoIGJlIHRoZSBsZW5ndGggb2YgdGhlIHNoaWZ0IG9wZXJhdGlvbjogMzIgb3IgNjQuCiAgICBJZiBzcmMyIGlzIGltbWVkaWF0ZSwgc3JjMncgaXMgbWFza2VkIGJ5IChiaXRfbGVuZ3RoIC0gMSkuCiAgICBPdGhlcndpc2UsIGlmIHRoZSBjb250ZW50IG9mIHNyYzIgaXMgb3V0c2lkZSB0aGUgcmFuZ2UgZnJvbSAwCiAgICB0byBiaXRfbGVuZ3RoIC0gMSwgdGhlIHJlc3VsdCBpcyB1bmRlZmluZWQuICovCiAjZGVmaW5lIFNMSklUX0xTSFIJCQkoU0xKSVRfT1AyX0JBU0UgKyA5KQotI2RlZmluZSBTTEpJVF9JTFNIUgkJCShTTEpJVF9MU0hSIHwgU0xKSVRfSU5UX09QKQorI2RlZmluZSBTTEpJVF9MU0hSMzIJCQkoU0xKSVRfTFNIUiB8IFNMSklUX0kzMl9PUCkKIC8qIEZsYWdzOiBJIHwgRSB8IEsKICAgIExldCBiaXRfbGVuZ3RoIGJlIHRoZSBsZW5ndGggb2YgdGhlIHNoaWZ0IG9wZXJhdGlvbjogMzIgb3IgNjQuCiAgICBJZiBzcmMyIGlzIGltbWVkaWF0ZSwgc3JjMncgaXMgbWFza2VkIGJ5IChiaXRfbGVuZ3RoIC0gMSkuCiAgICBPdGhlcndpc2UsIGlmIHRoZSBjb250ZW50IG9mIHNyYzIgaXMgb3V0c2lkZSB0aGUgcmFuZ2UgZnJvbSAwCiAgICB0byBiaXRfbGVuZ3RoIC0gMSwgdGhlIHJlc3VsdCBpcyB1bmRlZmluZWQuICovCiAjZGVmaW5lIFNMSklUX0FTSFIJCQkoU0xKSVRfT1AyX0JBU0UgKyAxMCkKLSNkZWZpbmUgU0xKSVRfSUFTSFIJCQkoU0xKSVRfQVNIUiB8IFNMSklUX0lOVF9PUCkKKyNkZWZpbmUgU0xKSVRfQVNIUjMyCQkJKFNMSklUX0FTSFIgfCBTTEpJVF9JMzJfT1ApCiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X29wMihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwKLQlzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsCi0Jc2xqaXRfc2kgc3JjMSwgc2xqaXRfc3cgc3JjMXcsCi0Jc2xqaXRfc2kgc3JjMiwgc2xqaXRfc3cgc3JjMncpOworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3MzMiBzbGppdF9lbWl0X29wMihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgb3AsCisJc2xqaXRfczMyIGRzdCwgc2xqaXRfc3cgZHN0dywKKwlzbGppdF9zMzIgc3JjMSwgc2xqaXRfc3cgc3JjMXcsCisJc2xqaXRfczMyIHNyYzIsIHNsaml0X3N3IHNyYzJ3KTsKIAogLyogUmV0dXJucyB3aXRoIG5vbi16ZXJvIGlmIGZwdSBpcyBhdmFpbGFibGUuICovCiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9pc19mcHVfYXZhaWxhYmxlKHZvaWQpOworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3MzMiBzbGppdF9pc19mcHVfYXZhaWxhYmxlKHZvaWQpOwogCiAvKiBTdGFydGluZyBpbmRleCBvZiBvcGNvZGVzIGZvciBzbGppdF9lbWl0X2ZvcDEuICovCiAjZGVmaW5lIFNMSklUX0ZPUDFfQkFTRQkJCTEyOAogCiAvKiBGbGFnczogU1AgLSAobmV2ZXIgc2V0IGFueSBmbGFncykgKi8KLSNkZWZpbmUgU0xKSVRfRE1PVgkJCShTTEpJVF9GT1AxX0JBU0UgKyAwKQotI2RlZmluZSBTTEpJVF9TTU9WCQkJKFNMSklUX0RNT1YgfCBTTEpJVF9TSU5HTEVfT1ApCisjZGVmaW5lIFNMSklUX01PVl9GNjQJCQkoU0xKSVRfRk9QMV9CQVNFICsgMCkKKyNkZWZpbmUgU0xKSVRfTU9WX0YzMgkJCShTTEpJVF9NT1ZfRjY0IHwgU0xKSVRfRjMyX09QKQogLyogQ29udmVydCBvcGNvZGVzOiBDT05WW0RTVF9UWVBFXS5GUk9NW1NSQ19UWVBFXQogICAgU1JDL0RTVCBUWVBFIGNhbiBiZTogRCAtIGRvdWJsZSwgUyAtIHNpbmdsZSwgVyAtIHNpZ25lZCB3b3JkLCBJIC0gc2lnbmVkIGludAogICAgUm91bmRpbmcgbW9kZSB3aGVuIHRoZSBkZXN0aW5hdGlvbiBpcyBXIG9yIEk6IHJvdW5kIHRvd2FyZHMgemVyby4gKi8KIC8qIEZsYWdzOiBTUCAtIChuZXZlciBzZXQgYW55IGZsYWdzKSAqLwotI2RlZmluZSBTTEpJVF9DT05WRF9GUk9NUwkJKFNMSklUX0ZPUDFfQkFTRSArIDEpCi0jZGVmaW5lIFNMSklUX0NPTlZTX0ZST01ECQkoU0xKSVRfQ09OVkRfRlJPTVMgfCBTTEpJVF9TSU5HTEVfT1ApCisjZGVmaW5lIFNMSklUX0NPTlZfRjY0X0ZST01fRjMyCQkoU0xKSVRfRk9QMV9CQVNFICsgMSkKKyNkZWZpbmUgU0xKSVRfQ09OVl9GMzJfRlJPTV9GNjQJCShTTEpJVF9DT05WX0Y2NF9GUk9NX0YzMiB8IFNMSklUX0YzMl9PUCkKIC8qIEZsYWdzOiBTUCAtIChuZXZlciBzZXQgYW55IGZsYWdzKSAqLwotI2RlZmluZSBTTEpJVF9DT05WV19GUk9NRAkJKFNMSklUX0ZPUDFfQkFTRSArIDIpCi0jZGVmaW5lIFNMSklUX0NPTlZXX0ZST01TCQkoU0xKSVRfQ09OVldfRlJPTUQgfCBTTEpJVF9TSU5HTEVfT1ApCisjZGVmaW5lIFNMSklUX0NPTlZfU1dfRlJPTV9GNjQJCShTTEpJVF9GT1AxX0JBU0UgKyAyKQorI2RlZmluZSBTTEpJVF9DT05WX1NXX0ZST01fRjMyCQkoU0xKSVRfQ09OVl9TV19GUk9NX0Y2NCB8IFNMSklUX0YzMl9PUCkKIC8qIEZsYWdzOiBTUCAtIChuZXZlciBzZXQgYW55IGZsYWdzKSAqLwotI2RlZmluZSBTTEpJVF9DT05WSV9GUk9NRAkJKFNMSklUX0ZPUDFfQkFTRSArIDMpCi0jZGVmaW5lIFNMSklUX0NPTlZJX0ZST01TCQkoU0xKSVRfQ09OVklfRlJPTUQgfCBTTEpJVF9TSU5HTEVfT1ApCisjZGVmaW5lIFNMSklUX0NPTlZfUzMyX0ZST01fRjY0CQkoU0xKSVRfRk9QMV9CQVNFICsgMykKKyNkZWZpbmUgU0xKSVRfQ09OVl9TMzJfRlJPTV9GMzIJCShTTEpJVF9DT05WX1MzMl9GUk9NX0Y2NCB8IFNMSklUX0YzMl9PUCkKIC8qIEZsYWdzOiBTUCAtIChuZXZlciBzZXQgYW55IGZsYWdzKSAqLwotI2RlZmluZSBTTEpJVF9DT05WRF9GUk9NVwkJKFNMSklUX0ZPUDFfQkFTRSArIDQpCi0jZGVmaW5lIFNMSklUX0NPTlZTX0ZST01XCQkoU0xKSVRfQ09OVkRfRlJPTVcgfCBTTEpJVF9TSU5HTEVfT1ApCisjZGVmaW5lIFNMSklUX0NPTlZfRjY0X0ZST01fU1cJCShTTEpJVF9GT1AxX0JBU0UgKyA0KQorI2RlZmluZSBTTEpJVF9DT05WX0YzMl9GUk9NX1NXCQkoU0xKSVRfQ09OVl9GNjRfRlJPTV9TVyB8IFNMSklUX0YzMl9PUCkKIC8qIEZsYWdzOiBTUCAtIChuZXZlciBzZXQgYW55IGZsYWdzKSAqLwotI2RlZmluZSBTTEpJVF9DT05WRF9GUk9NSQkJKFNMSklUX0ZPUDFfQkFTRSArIDUpCi0jZGVmaW5lIFNMSklUX0NPTlZTX0ZST01JCQkoU0xKSVRfQ09OVkRfRlJPTUkgfCBTTEpJVF9TSU5HTEVfT1ApCisjZGVmaW5lIFNMSklUX0NPTlZfRjY0X0ZST01fUzMyCQkoU0xKSVRfRk9QMV9CQVNFICsgNSkKKyNkZWZpbmUgU0xKSVRfQ09OVl9GMzJfRlJPTV9TMzIJCShTTEpJVF9DT05WX0Y2NF9GUk9NX1MzMiB8IFNMSklUX0YzMl9PUCkKIC8qIE5vdGU6IGRzdCBpcyB0aGUgbGVmdCBhbmQgc3JjIGlzIHRoZSByaWdodCBvcGVyYW5kIGZvciBTTEpJVF9DTVBELgogICAgTm90ZTogTmFOIGNoZWNrIGlzIGFsd2F5cyBwZXJmb3JtZWQuIElmIFNMSklUX0NfRkxPQVRfVU5PUkRFUkVEIGZsYWcKICAgICAgICAgIGlzIHNldCwgdGhlIGNvbXBhcmlzb24gcmVzdWx0IGlzIHVucHJlZGljdGFibGUuCiAgICBGbGFnczogU1AgfCBFIHwgUyAoc2VlIFNMSklUX0NfRkxPQVRfKikgKi8KLSNkZWZpbmUgU0xKSVRfRENNUAkJCShTTEpJVF9GT1AxX0JBU0UgKyA2KQotI2RlZmluZSBTTEpJVF9TQ01QCQkJKFNMSklUX0RDTVAgfCBTTEpJVF9TSU5HTEVfT1ApCisjZGVmaW5lIFNMSklUX0NNUF9GNjQJCQkoU0xKSVRfRk9QMV9CQVNFICsgNikKKyNkZWZpbmUgU0xKSVRfQ01QX0YzMgkJCShTTEpJVF9DTVBfRjY0IHwgU0xKSVRfRjMyX09QKQogLyogRmxhZ3M6IFNQIC0gKG5ldmVyIHNldCBhbnkgZmxhZ3MpICovCi0jZGVmaW5lIFNMSklUX0RORUcJCQkoU0xKSVRfRk9QMV9CQVNFICsgNykKLSNkZWZpbmUgU0xKSVRfU05FRwkJCShTTEpJVF9ETkVHIHwgU0xKSVRfU0lOR0xFX09QKQorI2RlZmluZSBTTEpJVF9ORUdfRjY0CQkJKFNMSklUX0ZPUDFfQkFTRSArIDcpCisjZGVmaW5lIFNMSklUX05FR19GMzIJCQkoU0xKSVRfTkVHX0Y2NCB8IFNMSklUX0YzMl9PUCkKIC8qIEZsYWdzOiBTUCAtIChuZXZlciBzZXQgYW55IGZsYWdzKSAqLwotI2RlZmluZSBTTEpJVF9EQUJTCQkJKFNMSklUX0ZPUDFfQkFTRSArIDgpCi0jZGVmaW5lIFNMSklUX1NBQlMJCQkoU0xKSVRfREFCUyB8IFNMSklUX1NJTkdMRV9PUCkKKyNkZWZpbmUgU0xKSVRfQUJTX0Y2NAkJCShTTEpJVF9GT1AxX0JBU0UgKyA4KQorI2RlZmluZSBTTEpJVF9BQlNfRjMyCQkJKFNMSklUX0FCU19GNjQgfCBTTEpJVF9GMzJfT1ApCiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X2ZvcDEoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsCi0Jc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3LAotCXNsaml0X3NpIHNyYywgc2xqaXRfc3cgc3Jjdyk7CitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfczMyIHNsaml0X2VtaXRfZm9wMShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgb3AsCisJc2xqaXRfczMyIGRzdCwgc2xqaXRfc3cgZHN0dywKKwlzbGppdF9zMzIgc3JjLCBzbGppdF9zdyBzcmN3KTsKIAogLyogU3RhcnRpbmcgaW5kZXggb2Ygb3Bjb2RlcyBmb3Igc2xqaXRfZW1pdF9mb3AyLiAqLwogI2RlZmluZSBTTEpJVF9GT1AyX0JBU0UJCQkxNjAKIAogLyogRmxhZ3M6IFNQIC0gKG5ldmVyIHNldCBhbnkgZmxhZ3MpICovCi0jZGVmaW5lIFNMSklUX0RBREQJCQkoU0xKSVRfRk9QMl9CQVNFICsgMCkKLSNkZWZpbmUgU0xKSVRfU0FERAkJCShTTEpJVF9EQUREIHwgU0xKSVRfU0lOR0xFX09QKQorI2RlZmluZSBTTEpJVF9BRERfRjY0CQkJKFNMSklUX0ZPUDJfQkFTRSArIDApCisjZGVmaW5lIFNMSklUX0FERF9GMzIJCQkoU0xKSVRfQUREX0Y2NCB8IFNMSklUX0YzMl9PUCkKIC8qIEZsYWdzOiBTUCAtIChuZXZlciBzZXQgYW55IGZsYWdzKSAqLwotI2RlZmluZSBTTEpJVF9EU1VCCQkJKFNMSklUX0ZPUDJfQkFTRSArIDEpCi0jZGVmaW5lIFNMSklUX1NTVUIJCQkoU0xKSVRfRFNVQiB8IFNMSklUX1NJTkdMRV9PUCkKKyNkZWZpbmUgU0xKSVRfU1VCX0Y2NAkJCShTTEpJVF9GT1AyX0JBU0UgKyAxKQorI2RlZmluZSBTTEpJVF9TVUJfRjMyCQkJKFNMSklUX1NVQl9GNjQgfCBTTEpJVF9GMzJfT1ApCiAvKiBGbGFnczogU1AgLSAobmV2ZXIgc2V0IGFueSBmbGFncykgKi8KLSNkZWZpbmUgU0xKSVRfRE1VTAkJCShTTEpJVF9GT1AyX0JBU0UgKyAyKQotI2RlZmluZSBTTEpJVF9TTVVMCQkJKFNMSklUX0RNVUwgfCBTTEpJVF9TSU5HTEVfT1ApCisjZGVmaW5lIFNMSklUX01VTF9GNjQJCQkoU0xKSVRfRk9QMl9CQVNFICsgMikKKyNkZWZpbmUgU0xKSVRfTVVMX0YzMgkJCShTTEpJVF9NVUxfRjY0IHwgU0xKSVRfRjMyX09QKQogLyogRmxhZ3M6IFNQIC0gKG5ldmVyIHNldCBhbnkgZmxhZ3MpICovCi0jZGVmaW5lIFNMSklUX0RESVYJCQkoU0xKSVRfRk9QMl9CQVNFICsgMykKLSNkZWZpbmUgU0xKSVRfU0RJVgkJCShTTEpJVF9ERElWIHwgU0xKSVRfU0lOR0xFX09QKQorI2RlZmluZSBTTEpJVF9ESVZfRjY0CQkJKFNMSklUX0ZPUDJfQkFTRSArIDMpCisjZGVmaW5lIFNMSklUX0RJVl9GMzIJCQkoU0xKSVRfRElWX0Y2NCB8IFNMSklUX0YzMl9PUCkKIAotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfZm9wMihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwKLQlzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsCi0Jc2xqaXRfc2kgc3JjMSwgc2xqaXRfc3cgc3JjMXcsCi0Jc2xqaXRfc2kgc3JjMiwgc2xqaXRfc3cgc3JjMncpOworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3MzMiBzbGppdF9lbWl0X2ZvcDIoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIG9wLAorCXNsaml0X3MzMiBkc3QsIHNsaml0X3N3IGRzdHcsCisJc2xqaXRfczMyIHNyYzEsIHNsaml0X3N3IHNyYzF3LAorCXNsaml0X3MzMiBzcmMyLCBzbGppdF9zdyBzcmMydyk7CiAKIC8qIExhYmVsIGFuZCBqdW1wIGluc3RydWN0aW9ucy4gKi8KIApAQCAtOTQzLDU4ICs5MzksNTggQEAKIAogLyogSW50ZWdlciBjb21wYXJpc29uIHR5cGVzLiAqLwogI2RlZmluZSBTTEpJVF9FUVVBTAkJCTAKLSNkZWZpbmUgU0xKSVRfSV9FUVVBTAkJCShTTEpJVF9FUVVBTCB8IFNMSklUX0lOVF9PUCkKKyNkZWZpbmUgU0xKSVRfRVFVQUwzMgkJCShTTEpJVF9FUVVBTCB8IFNMSklUX0kzMl9PUCkKICNkZWZpbmUgU0xKSVRfWkVSTwkJCTAKLSNkZWZpbmUgU0xKSVRfSV9aRVJPCQkJKFNMSklUX1pFUk8gfCBTTEpJVF9JTlRfT1ApCisjZGVmaW5lIFNMSklUX1pFUk8zMgkJCShTTEpJVF9aRVJPIHwgU0xKSVRfSTMyX09QKQogI2RlZmluZSBTTEpJVF9OT1RfRVFVQUwJCQkxCi0jZGVmaW5lIFNMSklUX0lfTk9UX0VRVUFMCQkoU0xKSVRfTk9UX0VRVUFMIHwgU0xKSVRfSU5UX09QKQorI2RlZmluZSBTTEpJVF9OT1RfRVFVQUwzMgkJKFNMSklUX05PVF9FUVVBTCB8IFNMSklUX0kzMl9PUCkKICNkZWZpbmUgU0xKSVRfTk9UX1pFUk8JCQkxCi0jZGVmaW5lIFNMSklUX0lfTk9UX1pFUk8JCShTTEpJVF9OT1RfWkVSTyB8IFNMSklUX0lOVF9PUCkKKyNkZWZpbmUgU0xKSVRfTk9UX1pFUk8zMgkJKFNMSklUX05PVF9aRVJPIHwgU0xKSVRfSTMyX09QKQogCiAjZGVmaW5lIFNMSklUX0xFU1MJCQkyCi0jZGVmaW5lIFNMSklUX0lfTEVTUwkJCShTTEpJVF9MRVNTIHwgU0xKSVRfSU5UX09QKQorI2RlZmluZSBTTEpJVF9MRVNTMzIJCQkoU0xKSVRfTEVTUyB8IFNMSklUX0kzMl9PUCkKICNkZWZpbmUgU0xKSVRfR1JFQVRFUl9FUVVBTAkJMwotI2RlZmluZSBTTEpJVF9JX0dSRUFURVJfRVFVQUwJCShTTEpJVF9HUkVBVEVSX0VRVUFMIHwgU0xKSVRfSU5UX09QKQorI2RlZmluZSBTTEpJVF9HUkVBVEVSX0VRVUFMMzIJCShTTEpJVF9HUkVBVEVSX0VRVUFMIHwgU0xKSVRfSTMyX09QKQogI2RlZmluZSBTTEpJVF9HUkVBVEVSCQkJNAotI2RlZmluZSBTTEpJVF9JX0dSRUFURVIJCQkoU0xKSVRfR1JFQVRFUiB8IFNMSklUX0lOVF9PUCkKKyNkZWZpbmUgU0xKSVRfR1JFQVRFUjMyCQkJKFNMSklUX0dSRUFURVIgfCBTTEpJVF9JMzJfT1ApCiAjZGVmaW5lIFNMSklUX0xFU1NfRVFVQUwJCTUKLSNkZWZpbmUgU0xKSVRfSV9MRVNTX0VRVUFMCQkoU0xKSVRfTEVTU19FUVVBTCB8IFNMSklUX0lOVF9PUCkKKyNkZWZpbmUgU0xKSVRfTEVTU19FUVVBTDMyCQkoU0xKSVRfTEVTU19FUVVBTCB8IFNMSklUX0kzMl9PUCkKICNkZWZpbmUgU0xKSVRfU0lHX0xFU1MJCQk2Ci0jZGVmaW5lIFNMSklUX0lfU0lHX0xFU1MJCShTTEpJVF9TSUdfTEVTUyB8IFNMSklUX0lOVF9PUCkKKyNkZWZpbmUgU0xKSVRfU0lHX0xFU1MzMgkJKFNMSklUX1NJR19MRVNTIHwgU0xKSVRfSTMyX09QKQogI2RlZmluZSBTTEpJVF9TSUdfR1JFQVRFUl9FUVVBTAkJNwotI2RlZmluZSBTTEpJVF9JX1NJR19HUkVBVEVSX0VRVUFMCShTTEpJVF9TSUdfR1JFQVRFUl9FUVVBTCB8IFNMSklUX0lOVF9PUCkKKyNkZWZpbmUgU0xKSVRfU0lHX0dSRUFURVJfRVFVQUwzMgkoU0xKSVRfU0lHX0dSRUFURVJfRVFVQUwgfCBTTEpJVF9JMzJfT1ApCiAjZGVmaW5lIFNMSklUX1NJR19HUkVBVEVSCQk4Ci0jZGVmaW5lIFNMSklUX0lfU0lHX0dSRUFURVIJCShTTEpJVF9TSUdfR1JFQVRFUiB8IFNMSklUX0lOVF9PUCkKKyNkZWZpbmUgU0xKSVRfU0lHX0dSRUFURVIzMgkJKFNMSklUX1NJR19HUkVBVEVSIHwgU0xKSVRfSTMyX09QKQogI2RlZmluZSBTTEpJVF9TSUdfTEVTU19FUVVBTAkJOQotI2RlZmluZSBTTEpJVF9JX1NJR19MRVNTX0VRVUFMCQkoU0xKSVRfU0lHX0xFU1NfRVFVQUwgfCBTTEpJVF9JTlRfT1ApCisjZGVmaW5lIFNMSklUX1NJR19MRVNTX0VRVUFMMzIJCShTTEpJVF9TSUdfTEVTU19FUVVBTCB8IFNMSklUX0kzMl9PUCkKIAogI2RlZmluZSBTTEpJVF9PVkVSRkxPVwkJCTEwCi0jZGVmaW5lIFNMSklUX0lfT1ZFUkZMT1cJCShTTEpJVF9PVkVSRkxPVyB8IFNMSklUX0lOVF9PUCkKKyNkZWZpbmUgU0xKSVRfT1ZFUkZMT1czMgkJKFNMSklUX09WRVJGTE9XIHwgU0xKSVRfSTMyX09QKQogI2RlZmluZSBTTEpJVF9OT1RfT1ZFUkZMT1cJCTExCi0jZGVmaW5lIFNMSklUX0lfTk9UX09WRVJGTE9XCQkoU0xKSVRfTk9UX09WRVJGTE9XIHwgU0xKSVRfSU5UX09QKQorI2RlZmluZSBTTEpJVF9OT1RfT1ZFUkZMT1czMgkJKFNMSklUX05PVF9PVkVSRkxPVyB8IFNMSklUX0kzMl9PUCkKIAogI2RlZmluZSBTTEpJVF9NVUxfT1ZFUkZMT1cJCTEyCi0jZGVmaW5lIFNMSklUX0lfTVVMX09WRVJGTE9XCQkoU0xKSVRfTVVMX09WRVJGTE9XIHwgU0xKSVRfSU5UX09QKQorI2RlZmluZSBTTEpJVF9NVUxfT1ZFUkZMT1czMgkJKFNMSklUX01VTF9PVkVSRkxPVyB8IFNMSklUX0kzMl9PUCkKICNkZWZpbmUgU0xKSVRfTVVMX05PVF9PVkVSRkxPVwkJMTMKLSNkZWZpbmUgU0xKSVRfSV9NVUxfTk9UX09WRVJGTE9XCShTTEpJVF9NVUxfTk9UX09WRVJGTE9XIHwgU0xKSVRfSU5UX09QKQorI2RlZmluZSBTTEpJVF9NVUxfTk9UX09WRVJGTE9XMzIJKFNMSklUX01VTF9OT1RfT1ZFUkZMT1cgfCBTTEpJVF9JMzJfT1ApCiAKIC8qIEZsb2F0aW5nIHBvaW50IGNvbXBhcmlzb24gdHlwZXMuICovCi0jZGVmaW5lIFNMSklUX0RfRVFVQUwJCQkxNAotI2RlZmluZSBTTEpJVF9TX0VRVUFMCQkJKFNMSklUX0RfRVFVQUwgfCBTTEpJVF9TSU5HTEVfT1ApCi0jZGVmaW5lIFNMSklUX0RfTk9UX0VRVUFMCQkxNQotI2RlZmluZSBTTEpJVF9TX05PVF9FUVVBTAkJKFNMSklUX0RfTk9UX0VRVUFMIHwgU0xKSVRfU0lOR0xFX09QKQotI2RlZmluZSBTTEpJVF9EX0xFU1MJCQkxNgotI2RlZmluZSBTTEpJVF9TX0xFU1MJCQkoU0xKSVRfRF9MRVNTIHwgU0xKSVRfU0lOR0xFX09QKQotI2RlZmluZSBTTEpJVF9EX0dSRUFURVJfRVFVQUwJCTE3Ci0jZGVmaW5lIFNMSklUX1NfR1JFQVRFUl9FUVVBTAkJKFNMSklUX0RfR1JFQVRFUl9FUVVBTCB8IFNMSklUX1NJTkdMRV9PUCkKLSNkZWZpbmUgU0xKSVRfRF9HUkVBVEVSCQkJMTgKLSNkZWZpbmUgU0xKSVRfU19HUkVBVEVSCQkJKFNMSklUX0RfR1JFQVRFUiB8IFNMSklUX1NJTkdMRV9PUCkKLSNkZWZpbmUgU0xKSVRfRF9MRVNTX0VRVUFMCQkxOQotI2RlZmluZSBTTEpJVF9TX0xFU1NfRVFVQUwJCShTTEpJVF9EX0xFU1NfRVFVQUwgfCBTTEpJVF9TSU5HTEVfT1ApCi0jZGVmaW5lIFNMSklUX0RfVU5PUkRFUkVECQkyMAotI2RlZmluZSBTTEpJVF9TX1VOT1JERVJFRAkJKFNMSklUX0RfVU5PUkRFUkVEIHwgU0xKSVRfU0lOR0xFX09QKQotI2RlZmluZSBTTEpJVF9EX09SREVSRUQJCQkyMQotI2RlZmluZSBTTEpJVF9TX09SREVSRUQJCQkoU0xKSVRfRF9PUkRFUkVEIHwgU0xKSVRfU0lOR0xFX09QKQorI2RlZmluZSBTTEpJVF9FUVVBTF9GNjQJCQkxNAorI2RlZmluZSBTTEpJVF9FUVVBTF9GMzIJCQkoU0xKSVRfRVFVQUxfRjY0IHwgU0xKSVRfRjMyX09QKQorI2RlZmluZSBTTEpJVF9OT1RfRVFVQUxfRjY0CQkxNQorI2RlZmluZSBTTEpJVF9OT1RfRVFVQUxfRjMyCQkoU0xKSVRfTk9UX0VRVUFMX0Y2NCB8IFNMSklUX0YzMl9PUCkKKyNkZWZpbmUgU0xKSVRfTEVTU19GNjQJCQkxNgorI2RlZmluZSBTTEpJVF9MRVNTX0YzMgkJCShTTEpJVF9MRVNTX0Y2NCB8IFNMSklUX0YzMl9PUCkKKyNkZWZpbmUgU0xKSVRfR1JFQVRFUl9FUVVBTF9GNjQJCTE3CisjZGVmaW5lIFNMSklUX0dSRUFURVJfRVFVQUxfRjMyCQkoU0xKSVRfR1JFQVRFUl9FUVVBTF9GNjQgfCBTTEpJVF9GMzJfT1ApCisjZGVmaW5lIFNMSklUX0dSRUFURVJfRjY0CQkxOAorI2RlZmluZSBTTEpJVF9HUkVBVEVSX0YzMgkJKFNMSklUX0dSRUFURVJfRjY0IHwgU0xKSVRfRjMyX09QKQorI2RlZmluZSBTTEpJVF9MRVNTX0VRVUFMX0Y2NAkJMTkKKyNkZWZpbmUgU0xKSVRfTEVTU19FUVVBTF9GMzIJCShTTEpJVF9MRVNTX0VRVUFMX0Y2NCB8IFNMSklUX0YzMl9PUCkKKyNkZWZpbmUgU0xKSVRfVU5PUkRFUkVEX0Y2NAkJMjAKKyNkZWZpbmUgU0xKSVRfVU5PUkRFUkVEX0YzMgkJKFNMSklUX1VOT1JERVJFRF9GNjQgfCBTTEpJVF9GMzJfT1ApCisjZGVmaW5lIFNMSklUX09SREVSRURfRjY0CQkyMQorI2RlZmluZSBTTEpJVF9PUkRFUkVEX0YzMgkJKFNMSklUX09SREVSRURfRjY0IHwgU0xKSVRfRjMyX09QKQogCiAvKiBVbmNvbmRpdGlvbmFsIGp1bXAgdHlwZXMuICovCiAjZGVmaW5lIFNMSklUX0pVTVAJCQkyMgpAQCAtMTAxNCw3ICsxMDEwLDcgQEAKICAgICB0eXBlIGNhbiBiZSBjb21iaW5lZCAob3InZWQpIHdpdGggU0xKSVRfUkVXUklUQUJMRV9KVU1QCiAgICBGbGFnczogLSAobmV2ZXIgc2V0IGFueSBmbGFncykgZm9yIGJvdGggY29uZGl0aW9uYWwgYW5kIHVuY29uZGl0aW9uYWwganVtcHMuCiAgICBGbGFnczogZGVzdHJveSBhbGwgZmxhZ3MgZm9yIGNhbGxzLiAqLwotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHN0cnVjdCBzbGppdF9qdW1wKiBzbGppdF9lbWl0X2p1bXAoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgdHlwZSk7CitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc3RydWN0IHNsaml0X2p1bXAqIHNsaml0X2VtaXRfanVtcChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgdHlwZSk7CiAKIC8qIEJhc2ljIGFyaXRobWV0aWMgY29tcGFyaXNvbi4gSW4gbW9zdCBhcmNoaXRlY3R1cmVzIGl0IGlzIGltcGxlbWVudGVkIGFzCiAgICBhbiBTTEpJVF9TVUIgb3BlcmF0aW9uICh3aXRoIFNMSklUX1VOVVNFRCBkZXN0aW5hdGlvbiBhbmQgc2V0dGluZwpAQCAtMTAyNCwyMyArMTAyMCwyMyBAQAogICAgIHR5cGUgbXVzdCBiZSBiZXR3ZWVuIFNMSklUX0VRVUFMIGFuZCBTTEpJVF9JX1NJR19MRVNTX0VRVUFMCiAgICAgdHlwZSBjYW4gYmUgY29tYmluZWQgKG9yJ2VkKSB3aXRoIFNMSklUX1JFV1JJVEFCTEVfSlVNUAogICAgRmxhZ3M6IGRlc3Ryb3kgZmxhZ3MuICovCi1TTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc3RydWN0IHNsaml0X2p1bXAqIHNsaml0X2VtaXRfY21wKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIHR5cGUsCi0Jc2xqaXRfc2kgc3JjMSwgc2xqaXRfc3cgc3JjMXcsCi0Jc2xqaXRfc2kgc3JjMiwgc2xqaXRfc3cgc3JjMncpOworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHN0cnVjdCBzbGppdF9qdW1wKiBzbGppdF9lbWl0X2NtcChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgdHlwZSwKKwlzbGppdF9zMzIgc3JjMSwgc2xqaXRfc3cgc3JjMXcsCisJc2xqaXRfczMyIHNyYzIsIHNsaml0X3N3IHNyYzJ3KTsKIAogLyogQmFzaWMgZmxvYXRpbmcgcG9pbnQgY29tcGFyaXNvbi4gSW4gbW9zdCBhcmNoaXRlY3R1cmVzIGl0IGlzIGltcGxlbWVudGVkIGFzCiAgICBhbiBTTEpJVF9GQ01QIG9wZXJhdGlvbiAoc2V0dGluZyBhcHByb3ByaWF0ZSBmbGFncykgZm9sbG93ZWQgYnkgYQogICAgc2xqaXRfZW1pdF9qdW1wLiBIb3dldmVyIHNvbWUgYXJjaGl0ZWN0dXJlcyAoaS5lOiBNSVBTKSBtYXkgZW1wbG95CiAgICBzcGVjaWFsIG9wdGltaXphdGlvbnMgaGVyZS4gSXQgaXMgc3VnZ2VzdGVkIHRvIHVzZSB0aGlzIGNvbXBhcmlzb24gZm9ybQogICAgd2hlbiBhcHByb3ByaWF0ZS4KLSAgICB0eXBlIG11c3QgYmUgYmV0d2VlbiBTTEpJVF9EX0VRVUFMIGFuZCBTTEpJVF9TX09SREVSRUQKKyAgICB0eXBlIG11c3QgYmUgYmV0d2VlbiBTTEpJVF9FUVVBTF9GNjQgYW5kIFNMSklUX09SREVSRURfRjMyCiAgICAgdHlwZSBjYW4gYmUgY29tYmluZWQgKG9yJ2VkKSB3aXRoIFNMSklUX1JFV1JJVEFCTEVfSlVNUAogICAgRmxhZ3M6IGRlc3Ryb3kgZmxhZ3MuCiAgICBOb3RlOiBpZiBlaXRoZXIgb3BlcmFuZCBpcyBOYU4sIHRoZSBiZWhhdmlvdXIgaXMgdW5kZWZpbmVkIGZvcgogICAgICAgICAgdHlwZXMgdXAgdG8gU0xKSVRfU19MRVNTX0VRVUFMLiAqLwotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHN0cnVjdCBzbGppdF9qdW1wKiBzbGppdF9lbWl0X2ZjbXAoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgdHlwZSwKLQlzbGppdF9zaSBzcmMxLCBzbGppdF9zdyBzcmMxdywKLQlzbGppdF9zaSBzcmMyLCBzbGppdF9zdyBzcmMydyk7CitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc3RydWN0IHNsaml0X2p1bXAqIHNsaml0X2VtaXRfZmNtcChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgdHlwZSwKKwlzbGppdF9zMzIgc3JjMSwgc2xqaXRfc3cgc3JjMXcsCisJc2xqaXRfczMyIHNyYzIsIHNsaml0X3N3IHNyYzJ3KTsKIAogLyogU2V0IHRoZSBkZXN0aW5hdGlvbiBvZiB0aGUganVtcCB0byB0aGlzIGxhYmVsLiAqLwogU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHZvaWQgc2xqaXRfc2V0X2xhYmVsKHN0cnVjdCBzbGppdF9qdW1wICpqdW1wLCBzdHJ1Y3Qgc2xqaXRfbGFiZWwqIGxhYmVsKTsKQEAgLTEwNTMsMTQgKzEwNDksMTQgQEAKICAgICBJbmRpcmVjdCBmb3JtOiBhbnkgb3RoZXIgdmFsaWQgYWRkcmVzc2luZyBtb2RlCiAgICBGbGFnczogLSAobmV2ZXIgc2V0IGFueSBmbGFncykgZm9yIHVuY29uZGl0aW9uYWwganVtcHMuCiAgICBGbGFnczogZGVzdHJveSBhbGwgZmxhZ3MgZm9yIGNhbGxzLiAqLwotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfaWp1bXAoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgdHlwZSwgc2xqaXRfc2kgc3JjLCBzbGppdF9zdyBzcmN3KTsKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zMzIgc2xqaXRfZW1pdF9panVtcChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgdHlwZSwgc2xqaXRfczMyIHNyYywgc2xqaXRfc3cgc3Jjdyk7CiAKIC8qIFBlcmZvcm0gdGhlIG9wZXJhdGlvbiB1c2luZyB0aGUgY29uZGl0aW9uYWwgZmxhZ3MgYXMgdGhlIHNlY29uZCBhcmd1bWVudC4KICAgIFR5cGUgbXVzdCBhbHdheXMgYmUgYmV0d2VlbiBTTEpJVF9FUVVBTCBhbmQgU0xKSVRfU19PUkRFUkVELiBUaGUgdmFsdWUKICAgIHJlcHJlc2VudGVkIGJ5IHRoZSB0eXBlIGlzIDEsIGlmIHRoZSBjb25kaXRpb24gcmVwcmVzZW50ZWQgYnkgdGhlIHR5cGUKICAgIGlzIGZ1bGZpbGxlZCwgYW5kIDAgb3RoZXJ3aXNlLgogCi0gICBJZiBvcCA9PSBTTEpJVF9NT1YsIFNMSklUX01PVl9TSSwgU0xKSVRfTU9WX1VJOgorICAgSWYgb3AgPT0gU0xKSVRfTU9WLCBTTEpJVF9NT1ZfUzMyLCBTTEpJVF9NT1ZfVTMyOgogICAgICBTZXQgZHN0IHRvIHRoZSB2YWx1ZSByZXByZXNlbnRlZCBieSB0aGUgdHlwZSAoMCBvciAxKS4KICAgICAgU3JjIG11c3QgYmUgU0xKSVRfVU5VU0VELCBhbmQgc3JjdyBtdXN0IGJlIDAKICAgICAgRmxhZ3M6IC0gKG5ldmVyIHNldCBhbnkgZmxhZ3MpCkBAIC0xMDcwLDE4ICsxMDY2LDE4IEBACiAgICAgIEltcG9ydGFudCBub3RlOiBvbmx5IGRzdD1zcmMgYW5kIGRzdHc9c3JjdyBpcyBzdXBwb3J0ZWQgYXQgdGhlIG1vbWVudCEKICAgICAgRmxhZ3M6IEkgfCBFIHwgSwogICAgTm90ZTogc2xqaXRfZW1pdF9vcF9mbGFncyBkb2VzIG5vdGhpbmcsIGlmIGRzdCBpcyBTTEpJVF9VTlVTRUQgKHJlZ2FyZGxlc3Mgb2Ygb3ApLiAqLwotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfb3BfZmxhZ3Moc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsCi0Jc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3LAotCXNsaml0X3NpIHNyYywgc2xqaXRfc3cgc3JjdywKLQlzbGppdF9zaSB0eXBlKTsKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zMzIgc2xqaXRfZW1pdF9vcF9mbGFncyhzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgb3AsCisJc2xqaXRfczMyIGRzdCwgc2xqaXRfc3cgZHN0dywKKwlzbGppdF9zMzIgc3JjLCBzbGppdF9zdyBzcmN3LAorCXNsaml0X3MzMiB0eXBlKTsKIAogLyogQ29waWVzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgU0xKSVRfU1AgKyBvZmZzZXQgdG8gZHN0LgogICAgRmxhZ3M6IC0gKG5ldmVyIHNldCBhbnkgZmxhZ3MpICovCi1TTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZ2V0X2xvY2FsX2Jhc2Uoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3LCBzbGppdF9zdyBvZmZzZXQpOworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3MzMiBzbGppdF9nZXRfbG9jYWxfYmFzZShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgZHN0LCBzbGppdF9zdyBkc3R3LCBzbGppdF9zdyBvZmZzZXQpOwogCiAvKiBUaGUgY29uc3RhbnQgY2FuIGJlIGNoYW5nZWQgcnVudGltZSAoc2VlOiBzbGppdF9zZXRfY29uc3QpCiAgICBGbGFnczogLSAobmV2ZXIgc2V0IGFueSBmbGFncykgKi8KLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzdHJ1Y3Qgc2xqaXRfY29uc3QqIHNsaml0X2VtaXRfY29uc3Qoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3LCBzbGppdF9zdyBpbml0X3ZhbHVlKTsKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzdHJ1Y3Qgc2xqaXRfY29uc3QqIHNsaml0X2VtaXRfY29uc3Qoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIGRzdCwgc2xqaXRfc3cgZHN0dywgc2xqaXRfc3cgaW5pdF92YWx1ZSk7CiAKIC8qIEFmdGVyIHRoZSBjb2RlIGdlbmVyYXRpb24gdGhlIGFkZHJlc3MgZm9yIGxhYmVsLCBqdW1wIGFuZCBjb25zdCBpbnN0cnVjdGlvbnMKICAgIGFyZSBjb21wdXRlZC4gU2luY2UgdGhlc2Ugc3RydWN0dXJlcyBhcmUgZnJlZWQgYnkgc2xqaXRfZnJlZV9jb21waWxlciwgdGhlCkBAIC0xMTA0LDcgKzExMDAsNyBAQAogLyogR2V0IHRoZSBodW1hbiByZWFkYWJsZSBuYW1lIG9mIHRoZSBwbGF0Zm9ybS4gQ2FuIGJlIHVzZWZ1bCBvbiBwbGF0Zm9ybXMKICAgIGxpa2UgQVJNLCB3aGVyZSBBUk0gYW5kIFRodW1iMiBmdW5jdGlvbnMgY2FuIGJlIG1peGVkLCBhbmQKICAgIGl0IGlzIHVzZWZ1bCB0byBrbm93IHRoZSB0eXBlIG9mIHRoZSBjb2RlIGdlbmVyYXRvci4gKi8KLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBTTEpJVF9DT05TVCBjaGFyKiBzbGppdF9nZXRfcGxhdGZvcm1fbmFtZSh2b2lkKTsKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBjb25zdCBjaGFyKiBzbGppdF9nZXRfcGxhdGZvcm1fbmFtZSh2b2lkKTsKIAogLyogUG9ydGFibGUgaGVscGVyIGZ1bmN0aW9uIHRvIGdldCBhbiBvZmZzZXQgb2YgYSBtZW1iZXIuICovCiAjZGVmaW5lIFNMSklUX09GRlNFVE9GKGJhc2UsIG1lbWJlcikgKChzbGppdF9zdykoJigoYmFzZSopMHgxMCktPm1lbWJlcikgLSAweDEwKQpAQCAtMTE5NiwxNCArMTE5MiwxNCBAQAogCiAgICBOb3RlOiBpdCByZXR1cm5zIHdpdGggLTEgZm9yIHZpcnR1YWwgcmVnaXN0ZXJzIChvbmx5IG9uIHg4Ni0zMikuICovCiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9nZXRfcmVnaXN0ZXJfaW5kZXgoc2xqaXRfc2kgcmVnKTsKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zMzIgc2xqaXRfZ2V0X3JlZ2lzdGVyX2luZGV4KHNsaml0X3MzMiByZWcpOwogCiAvKiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9uIGlzIGEgaGVscGVyIGZ1bmN0aW9uIGZvciBzbGppdF9lbWl0X29wX2N1c3RvbS4KICAgIEl0IHJldHVybnMgd2l0aCB0aGUgcmVhbCBtYWNoaW5lIHJlZ2lzdGVyIGluZGV4IG9mIGFueSBTTEpJVF9GTE9BVCByZWdpc3Rlci4KIAogICAgTm90ZTogdGhlIGluZGV4IGlzIGFsd2F5cyBhbiBldmVuIG51bWJlciBvbiBBUk0gKGV4Y2VwdCBBUk0tNjQpLCBNSVBTLCBhbmQgU1BBUkMuICovCiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9nZXRfZmxvYXRfcmVnaXN0ZXJfaW5kZXgoc2xqaXRfc2kgcmVnKTsKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zMzIgc2xqaXRfZ2V0X2Zsb2F0X3JlZ2lzdGVyX2luZGV4KHNsaml0X3MzMiByZWcpOwogCiAvKiBBbnkgaW5zdHJ1Y3Rpb24gY2FuIGJlIGluc2VydGVkIGludG8gdGhlIGluc3RydWN0aW9uIHN0cmVhbSBieQogICAgc2xqaXRfZW1pdF9vcF9jdXN0b20uIEl0IGhhcyBhIHNpbWlsYXIgcHVycG9zZSBhcyBpbmxpbmUgYXNzZW1ibHkuCkBAIC0xMjE1LDE4ICsxMjExLDE4IEBACiAgICAgICAgICAgICAgIGlmIHNpemUgPT0gNCwgdGhlIGluc3RydWN0aW9uIGFyZ3VtZW50IG11c3QgYmUgNCBieXRlIGFsaWduZWQuCiAgICBPdGhlcndpc2U6IHNpemUgbXVzdCBiZSA0IGFuZCBpbnN0cnVjdGlvbiBhcmd1bWVudCBtdXN0IGJlIDQgYnl0ZSBhbGlnbmVkLiAqLwogCi1TTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9vcF9jdXN0b20oc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwKLQl2b2lkICppbnN0cnVjdGlvbiwgc2xqaXRfc2kgc2l6ZSk7CitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfczMyIHNsaml0X2VtaXRfb3BfY3VzdG9tKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsCisJdm9pZCAqaW5zdHJ1Y3Rpb24sIHNsaml0X3MzMiBzaXplKTsKIAogI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19YODYgJiYgU0xKSVRfQ09ORklHX1g4NikKIAogLyogUmV0dXJucyB3aXRoIG5vbi16ZXJvIGlmIHNzZTIgaXMgYXZhaWxhYmxlLiAqLwogCi1TTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfeDg2X2lzX3NzZTJfYXZhaWxhYmxlKHZvaWQpOworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3MzMiBzbGppdF94ODZfaXNfc3NlMl9hdmFpbGFibGUodm9pZCk7CiAKIC8qIFJldHVybnMgd2l0aCBub24temVybyBpZiBjbW92IGluc3RydWN0aW9uIGlzIGF2YWlsYWJsZS4gKi8KIAotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X3g4Nl9pc19jbW92X2F2YWlsYWJsZSh2b2lkKTsKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zMzIgc2xqaXRfeDg2X2lzX2Ntb3ZfYXZhaWxhYmxlKHZvaWQpOwogCiAvKiBFbWl0IGEgY29uZGl0aW9uYWwgbW92IGluc3RydWN0aW9uIG9uIHg4NiBDUFVzLiBUaGlzIGluc3RydWN0aW9uCiAgICBtb3ZlcyBzcmMgdG8gZGVzdGluYXRpb24sIGlmIHRoZSBjb25kaXRpb24gaXMgc2F0aXNmaWVkLiBVbmxpa2UKQEAgLTEyMzUsMTQgKzEyMzEsMTQgQEAKICAgIGNoZWNrZWQgYnkgc2xqaXRfeDg2X2lzX2Ntb3ZfYXZhaWxhYmxlIGZ1bmN0aW9uLgogICAgIHR5cGUgbXVzdCBiZSBiZXR3ZWVuIFNMSklUX0VRVUFMIGFuZCBTTEpJVF9TX09SREVSRUQKICAgICBkc3RfcmVnIG11c3QgYmUgYSB2YWxpZCByZWdpc3RlciBhbmQgaXQgY2FuIGJlIGNvbWJpbmVkCi0gICAgICB3aXRoIFNMSklUX0lOVF9PUCB0byBwZXJmb3JtIDMyIGJpdCBhcml0aG1ldGljCisgICAgICB3aXRoIFNMSklUX0kzMl9PUCB0byBwZXJmb3JtIDMyIGJpdCBhcml0aG1ldGljCiAgICBGbGFnczogSSAtIChuZXZlciBzZXQgYW55IGZsYWdzKQogICovCiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF94ODZfZW1pdF9jbW92KHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsCi0Jc2xqaXRfc2kgdHlwZSwKLQlzbGppdF9zaSBkc3RfcmVnLAotCXNsaml0X3NpIHNyYywgc2xqaXRfc3cgc3Jjdyk7CitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfczMyIHNsaml0X3g4Nl9lbWl0X2Ntb3Yoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwKKwlzbGppdF9zMzIgdHlwZSwKKwlzbGppdF9zMzIgZHN0X3JlZywKKwlzbGppdF9zMzIgc3JjLCBzbGppdF9zdyBzcmN3KTsKIAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2Rpc3QyL3NyYy9zbGppdC9zbGppdE5hdGl2ZUFSTV8zMi5jIGIvZGlzdDIvc3JjL3Nsaml0L3Nsaml0TmF0aXZlQVJNXzMyLmMKaW5kZXggNWNkNGM3MS4uYjkyODA4ZiAxMDA2NDQKLS0tIGEvZGlzdDIvc3JjL3Nsaml0L3Nsaml0TmF0aXZlQVJNXzMyLmMKKysrIGIvZGlzdDIvc3JjL3Nsaml0L3Nsaml0TmF0aXZlQVJNXzMyLmMKQEAgLTI0LDcgKzI0LDcgQEAKICAqIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi1TTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgU0xKSVRfQ09OU1QgY2hhciogc2xqaXRfZ2V0X3BsYXRmb3JtX25hbWUodm9pZCkKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBjb25zdCBjaGFyKiBzbGppdF9nZXRfcGxhdGZvcm1fbmFtZSh2b2lkKQogewogI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19BUk1fVjcgJiYgU0xKSVRfQ09ORklHX0FSTV9WNykKIAlyZXR1cm4gIkFSTXY3IiBTTEpJVF9DUFVJTkZPOwpAQCAtNTIsMTAgKzUyLDEwIEBACiAjZGVmaW5lIEFMSUdOX0lOU1RSVUNUSU9OKHB0cikgXAogCShzbGppdF91dyopKCgoc2xqaXRfdXcpKHB0cikgKyAoQ09OU1RfUE9PTF9BTElHTk1FTlQgKiBzaXplb2Yoc2xqaXRfdXcpKSAtIDEpICYgfigoQ09OU1RfUE9PTF9BTElHTk1FTlQgKiBzaXplb2Yoc2xqaXRfdXcpKSAtIDEpKQogI2RlZmluZSBNQVhfRElGRkVSRU5DRShtYXhfZGlmZikgXAotCSgoKG1heF9kaWZmKSAvIChzbGppdF9zaSlzaXplb2Yoc2xqaXRfdXcpKSAtIChDT05TVF9QT09MX0FMSUdOTUVOVCAtIDEpKQorCSgoKG1heF9kaWZmKSAvIChzbGppdF9zMzIpc2l6ZW9mKHNsaml0X3V3KSkgLSAoQ09OU1RfUE9PTF9BTElHTk1FTlQgLSAxKSkKIAogLyogU2VlIHNsaml0X2VtaXRfZW50ZXIgYW5kIHNsaml0X2VtaXRfb3AwIGlmIHlvdSB3YW50IHRvIGNoYW5nZSB0aGVtLiAqLwotc3RhdGljIFNMSklUX0NPTlNUIHNsaml0X3ViIHJlZ19tYXBbU0xKSVRfTlVNQkVSX09GX1JFR0lTVEVSUyArIDZdID0geworc3RhdGljIGNvbnN0IHNsaml0X3U4IHJlZ19tYXBbU0xKSVRfTlVNQkVSX09GX1JFR0lTVEVSUyArIDZdID0gewogCTAsIDAsIDEsIDIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMTMsIDMsIDEyLCAxNCwgMTUKIH07CiAKQEAgLTEyNiwxMyArMTI2LDEzIEBACiAKICNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfQVJNX1Y1ICYmIFNMSklUX0NPTkZJR19BUk1fVjUpCiAKLXN0YXRpYyBzbGppdF9zaSBwdXNoX2Nwb29sKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIpCitzdGF0aWMgc2xqaXRfczMyIHB1c2hfY3Bvb2woc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlcikKIHsKIAkvKiBQdXNoaW5nIHRoZSBjb25zdGFudCBwb29sIGludG8gdGhlIGluc3RydWN0aW9uIHN0cmVhbS4gKi8KIAlzbGppdF91dyogaW5zdDsKIAlzbGppdF91dyogY3Bvb2xfcHRyOwogCXNsaml0X3V3KiBjcG9vbF9lbmQ7Ci0Jc2xqaXRfc2kgaTsKKwlzbGppdF9zMzIgaTsKIAogCS8qIFRoZSBsYWJlbCBjb3VsZCBwb2ludCB0aGUgYWRkcmVzcyBhZnRlciB0aGUgY29uc3RhbnQgcG9vbC4gKi8KIAlpZiAoY29tcGlsZXItPmxhc3RfbGFiZWwgJiYgY29tcGlsZXItPmxhc3RfbGFiZWwtPnNpemUgPT0gY29tcGlsZXItPnNpemUpCkBAIC0xNjQsNyArMTY0LDcgQEAKIAlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKIH0KIAotc3RhdGljIHNsaml0X3NpIHB1c2hfaW5zdChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF91dyBpbnN0KQorc3RhdGljIHNsaml0X3MzMiBwdXNoX2luc3Qoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfdXcgaW5zdCkKIHsKIAlzbGppdF91dyogcHRyOwogCkBAIC0xNzgsMTMgKzE3OCwxMyBAQAogCXJldHVybiBTTEpJVF9TVUNDRVNTOwogfQogCi1zdGF0aWMgc2xqaXRfc2kgcHVzaF9pbnN0X3dpdGhfbGl0ZXJhbChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF91dyBpbnN0LCBzbGppdF91dyBsaXRlcmFsKQorc3RhdGljIHNsaml0X3MzMiBwdXNoX2luc3Rfd2l0aF9saXRlcmFsKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3V3IGluc3QsIHNsaml0X3V3IGxpdGVyYWwpCiB7CiAJc2xqaXRfdXcqIHB0cjsKIAlzbGppdF91dyBjcG9vbF9pbmRleCA9IENQT09MX1NJWkU7CiAJc2xqaXRfdXcqIGNwb29sX3B0cjsKIAlzbGppdF91dyogY3Bvb2xfZW5kOwotCXNsaml0X3ViKiBjcG9vbF91bmlxdWVfcHRyOworCXNsaml0X3U4KiBjcG9vbF91bmlxdWVfcHRyOwogCiAJaWYgKFNMSklUX1VOTElLRUxZKGNvbXBpbGVyLT5jcG9vbF9kaWZmICE9IENPTlNUX1BPT0xfRU1QVFkgJiYgY29tcGlsZXItPnNpemUgLSBjb21waWxlci0+Y3Bvb2xfZGlmZiA+PSBNQVhfRElGRkVSRU5DRSg0MDkyKSkpCiAJCUZBSUxfSUYocHVzaF9jcG9vbChjb21waWxlcikpOwpAQCAtMjI4LDcgKzIyOCw3IEBACiAJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBzbGppdF9zaSBwdXNoX2luc3Rfd2l0aF91bmlxdWVfbGl0ZXJhbChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF91dyBpbnN0LCBzbGppdF91dyBsaXRlcmFsKQorc3RhdGljIHNsaml0X3MzMiBwdXNoX2luc3Rfd2l0aF91bmlxdWVfbGl0ZXJhbChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF91dyBpbnN0LCBzbGppdF91dyBsaXRlcmFsKQogewogCXNsaml0X3V3KiBwdHI7CiAJaWYgKFNMSklUX1VOTElLRUxZKChjb21waWxlci0+Y3Bvb2xfZGlmZiAhPSBDT05TVF9QT09MX0VNUFRZICYmIGNvbXBpbGVyLT5zaXplIC0gY29tcGlsZXItPmNwb29sX2RpZmYgPj0gTUFYX0RJRkZFUkVOQ0UoNDA5MikpIHx8IGNvbXBpbGVyLT5jcG9vbF9maWxsID49IENQT09MX1NJWkUpKQpAQCAtMjQ4LDcgKzI0OCw3IEBACiAJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBTTEpJVF9JTkxJTkUgc2xqaXRfc2kgcHJlcGFyZV9ibHgoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlcikKK3N0YXRpYyBTTEpJVF9JTkxJTkUgc2xqaXRfczMyIHByZXBhcmVfYmx4KHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIpCiB7CiAJLyogUGxhY2UgZm9yIGF0IGxlYXN0IHR3byBpbnN0cnVjdGlvbiAoZG9lc24ndCBtYXR0ZXIgd2hldGhlciB0aGUgZmlyc3QgaGFzIGEgbGl0ZXJhbCkuICovCiAJaWYgKFNMSklUX1VOTElLRUxZKGNvbXBpbGVyLT5jcG9vbF9kaWZmICE9IENPTlNUX1BPT0xfRU1QVFkgJiYgY29tcGlsZXItPnNpemUgLSBjb21waWxlci0+Y3Bvb2xfZGlmZiA+PSBNQVhfRElGRkVSRU5DRSg0MDg4KSkpCkBAIC0yNTYsNyArMjU2LDcgQEAKIAlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKIH0KIAotc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9zaSBlbWl0X2JseChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyKQorc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9zMzIgZW1pdF9ibHgoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlcikKIHsKIAkvKiBNdXN0IGZvbGxvdyB0aWdodGx5IHRoZSBwcmV2aW91cyBpbnN0cnVjdGlvbiAodG8gYmUgYWJsZSB0byBjb252ZXJ0IGl0IHRvIGJsIGluc3RydWN0aW9uKS4gKi8KIAlTTEpJVF9BU1NFUlQoY29tcGlsZXItPmNwb29sX2RpZmYgPT0gQ09OU1RfUE9PTF9FTVBUWSB8fCBjb21waWxlci0+c2l6ZSAtIGNvbXBpbGVyLT5jcG9vbF9kaWZmIDwgTUFYX0RJRkZFUkVOQ0UoNDA5MikpOwpAQCAtMjg2LDcgKzI4Niw3IEBACiAKIAkJCS8qIE11c3QgYmUgYSBsb2FkIGluc3RydWN0aW9uIHdpdGggaW1tZWRpYXRlIG9mZnNldC4gKi8KIAkJCVNMSklUX0FTU0VSVChpbmQgPCBjcG9vbF9zaXplICYmICEoKmxhc3RfcGNfcGF0Y2ggJiAoMSA8PCAyNSkpICYmICgqbGFzdF9wY19wYXRjaCAmICgxIDw8IDIwKSkpOwotCQkJaWYgKChzbGppdF9zaSljb25zdF9wb29sW2luZF0gPCAwKSB7CisJCQlpZiAoKHNsaml0X3MzMiljb25zdF9wb29sW2luZF0gPCAwKSB7CiAJCQkJY29uc3RfcG9vbFtpbmRdID0gY291bnRlcjsKIAkJCQlpbmQgPSBjb3VudGVyOwogCQkJCWNvdW50ZXIrKzsKQEAgLTMxMSwyNiArMzExLDI2IEBACiAvKiBJbiBzb21lIHJhcmUgb2Nhc2lvbnMgd2UgbWF5IG5lZWQgZnV0dXJlIHBhdGNoZXMuIFRoZSBwcm9iYWJpbGl0eSBpcyBjbG9zZSB0byAwIGluIHByYWN0aWNlLiAqLwogc3RydWN0IGZ1dHVyZV9wYXRjaCB7CiAJc3RydWN0IGZ1dHVyZV9wYXRjaCogbmV4dDsKLQlzbGppdF9zaSBpbmRleDsKLQlzbGppdF9zaSB2YWx1ZTsKKwlzbGppdF9zMzIgaW5kZXg7CisJc2xqaXRfczMyIHZhbHVlOwogfTsKIAotc3RhdGljIHNsaml0X3NpIHJlc29sdmVfY29uc3RfcG9vbF9pbmRleChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzdHJ1Y3QgZnV0dXJlX3BhdGNoICoqZmlyc3RfcGF0Y2gsIHNsaml0X3V3IGNwb29sX2N1cnJlbnRfaW5kZXgsIHNsaml0X3V3ICpjcG9vbF9zdGFydF9hZGRyZXNzLCBzbGppdF91dyAqYnVmX3B0cikKK3N0YXRpYyBzbGppdF9zMzIgcmVzb2x2ZV9jb25zdF9wb29sX2luZGV4KHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHN0cnVjdCBmdXR1cmVfcGF0Y2ggKipmaXJzdF9wYXRjaCwgc2xqaXRfdXcgY3Bvb2xfY3VycmVudF9pbmRleCwgc2xqaXRfdXcgKmNwb29sX3N0YXJ0X2FkZHJlc3MsIHNsaml0X3V3ICpidWZfcHRyKQogewotCXNsaml0X3NpIHZhbHVlOworCXNsaml0X3MzMiB2YWx1ZTsKIAlzdHJ1Y3QgZnV0dXJlX3BhdGNoICpjdXJyX3BhdGNoLCAqcHJldl9wYXRjaDsKIAogCVNMSklUX1VOVVNFRF9BUkcoY29tcGlsZXIpOwogCiAJLyogVXNpbmcgdGhlIHZhbHVlcyBnZW5lcmF0ZWQgYnkgcGF0Y2hfcGNfcmVsYXRpdmVfbG9hZHMuICovCiAJaWYgKCEqZmlyc3RfcGF0Y2gpCi0JCXZhbHVlID0gKHNsaml0X3NpKWNwb29sX3N0YXJ0X2FkZHJlc3NbY3Bvb2xfY3VycmVudF9pbmRleF07CisJCXZhbHVlID0gKHNsaml0X3MzMiljcG9vbF9zdGFydF9hZGRyZXNzW2Nwb29sX2N1cnJlbnRfaW5kZXhdOwogCWVsc2UgewogCQljdXJyX3BhdGNoID0gKmZpcnN0X3BhdGNoOwotCQlwcmV2X3BhdGNoID0gMDsKKwkJcHJldl9wYXRjaCA9IE5VTEw7CiAJCXdoaWxlICgxKSB7CiAJCQlpZiAoIWN1cnJfcGF0Y2gpIHsKLQkJCQl2YWx1ZSA9IChzbGppdF9zaSljcG9vbF9zdGFydF9hZGRyZXNzW2Nwb29sX2N1cnJlbnRfaW5kZXhdOworCQkJCXZhbHVlID0gKHNsaml0X3MzMiljcG9vbF9zdGFydF9hZGRyZXNzW2Nwb29sX2N1cnJlbnRfaW5kZXhdOwogCQkJCWJyZWFrOwogCQkJfQogCQkJaWYgKChzbGppdF91dyljdXJyX3BhdGNoLT5pbmRleCA9PSBjcG9vbF9jdXJyZW50X2luZGV4KSB7CkBAIC0zNzAsNyArMzcwLDcgQEAKIAogI2Vsc2UKIAotc3RhdGljIHNsaml0X3NpIHB1c2hfaW5zdChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF91dyBpbnN0KQorc3RhdGljIHNsaml0X3MzMiBwdXNoX2luc3Qoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfdXcgaW5zdCkKIHsKIAlzbGppdF91dyogcHRyOwogCkBAIC0zODEsNyArMzgxLDcgQEAKIAlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKIH0KIAotc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9zaSBlbWl0X2ltbShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSByZWcsIHNsaml0X3N3IGltbSkKK3N0YXRpYyBTTEpJVF9JTkxJTkUgc2xqaXRfczMyIGVtaXRfaW1tKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiByZWcsIHNsaml0X3N3IGltbSkKIHsKIAlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgTU9WVyB8IFJEKHJlZykgfCAoKGltbSA8PCA0KSAmIDB4ZjAwMDApIHwgKGltbSAmIDB4ZmZmKSkpOwogCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIE1PVlQgfCBSRChyZWcpIHwgKChpbW0gPj4gMTIpICYgMHhmMDAwMCkgfCAoKGltbSA+PiAxNikgJiAweGZmZikpOwpAQCAtMzg5LDcgKzM4OSw3IEBACiAKICNlbmRpZgogCi1zdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X3NpIGRldGVjdF9qdW1wX3R5cGUoc3RydWN0IHNsaml0X2p1bXAgKmp1bXAsIHNsaml0X3V3ICpjb2RlX3B0ciwgc2xqaXRfdXcgKmNvZGUpCitzdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X3MzMiBkZXRlY3RfanVtcF90eXBlKHN0cnVjdCBzbGppdF9qdW1wICpqdW1wLCBzbGppdF91dyAqY29kZV9wdHIsIHNsaml0X3V3ICpjb2RlKQogewogCXNsaml0X3N3IGRpZmY7CiAKQEAgLTQ0NiwxMyArNDQ2LDEzIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBTTEpJVF9JTkxJTkUgdm9pZCBpbmxpbmVfc2V0X2p1bXBfYWRkcihzbGppdF91dyBhZGRyLCBzbGppdF91dyBuZXdfYWRkciwgc2xqaXRfc2kgZmx1c2gpCitzdGF0aWMgU0xKSVRfSU5MSU5FIHZvaWQgaW5saW5lX3NldF9qdW1wX2FkZHIoc2xqaXRfdXcgYWRkciwgc2xqaXRfdXcgbmV3X2FkZHIsIHNsaml0X3MzMiBmbHVzaCkKIHsKICNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfQVJNX1Y1ICYmIFNMSklUX0NPTkZJR19BUk1fVjUpCiAJc2xqaXRfdXcgKnB0ciA9IChzbGppdF91dyopYWRkcjsKIAlzbGppdF91dyAqaW5zdCA9IChzbGppdF91dyopcHRyWzBdOwogCXNsaml0X3V3IG1vdl9wYyA9IHB0clsxXTsKLQlzbGppdF9zaSBibCA9IChtb3ZfcGMgJiAweDAwMDBmMDAwKSAhPSBSRChUTVBfUEMpOworCXNsaml0X3MzMiBibCA9IChtb3ZfcGMgJiAweDAwMDBmMDAwKSAhPSBSRChUTVBfUEMpOwogCXNsaml0X3N3IGRpZmYgPSAoc2xqaXRfc3cpKCgoc2xqaXRfc3cpbmV3X2FkZHIgLSAoc2xqaXRfc3cpKGluc3QgKyAyKSkgPj4gMik7CiAKIAlpZiAoZGlmZiA8PSAweDdmZmZmZiAmJiBkaWZmID49IC0weDgwMDAwMCkgewpAQCAtNTA0LDcgKzUwNCw3IEBACiAKIHN0YXRpYyBzbGppdF91dyBnZXRfaW1tKHNsaml0X3V3IGltbSk7CiAKLXN0YXRpYyBTTEpJVF9JTkxJTkUgdm9pZCBpbmxpbmVfc2V0X2NvbnN0KHNsaml0X3V3IGFkZHIsIHNsaml0X3N3IG5ld19jb25zdGFudCwgc2xqaXRfc2kgZmx1c2gpCitzdGF0aWMgU0xKSVRfSU5MSU5FIHZvaWQgaW5saW5lX3NldF9jb25zdChzbGppdF91dyBhZGRyLCBzbGppdF9zdyBuZXdfY29uc3RhbnQsIHNsaml0X3MzMiBmbHVzaCkKIHsKICNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfQVJNX1Y1ICYmIFNMSklUX0NPTkZJR19BUk1fVjUpCiAJc2xqaXRfdXcgKnB0ciA9IChzbGppdF91dyopYWRkcjsKQEAgLTc4OSw3ICs3ODksNyBAQAogCX0KICNlbmRpZgogCi0JU0xKSVRfQVNTRVJUKGNvZGVfcHRyIC0gY29kZSA8PSAoc2xqaXRfc2kpc2l6ZSk7CisJU0xKSVRfQVNTRVJUKGNvZGVfcHRyIC0gY29kZSA8PSAoc2xqaXRfczMyKXNpemUpOwogCiAJY29tcGlsZXItPmVycm9yID0gU0xKSVRfRVJSX0NPTVBJTEVEOwogCWNvbXBpbGVyLT5leGVjdXRhYmxlX3NpemUgPSAoY29kZV9wdHIgLSBjb2RlKSAqIHNpemVvZihzbGppdF91dyk7CkBAIC04MjAsMTYgKzgyMCwxNiBAQAogI2RlZmluZSBFTUlUX0RBVEFfUFJPQ0VTU19JTlMob3Bjb2RlLCBzZXRfZmxhZ3MsIGRzdCwgc3JjMSwgc3JjMikgXAogCSgweGUwMDAwMDAwIHwgKChvcGNvZGUpIDw8IDIxKSB8IChzZXRfZmxhZ3MpIHwgUkQoZHN0KSB8IFJOKHNyYzEpIHwgKHNyYzIpKQogCi1zdGF0aWMgc2xqaXRfc2kgZW1pdF9vcChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwgc2xqaXRfc2kgaW5wX2ZsYWdzLAotCXNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dywKLQlzbGppdF9zaSBzcmMxLCBzbGppdF9zdyBzcmMxdywKLQlzbGppdF9zaSBzcmMyLCBzbGppdF9zdyBzcmMydyk7CitzdGF0aWMgc2xqaXRfczMyIGVtaXRfb3Aoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIG9wLCBzbGppdF9zMzIgaW5wX2ZsYWdzLAorCXNsaml0X3MzMiBkc3QsIHNsaml0X3N3IGRzdHcsCisJc2xqaXRfczMyIHNyYzEsIHNsaml0X3N3IHNyYzF3LAorCXNsaml0X3MzMiBzcmMyLCBzbGppdF9zdyBzcmMydyk7CiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X2VudGVyKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsCi0Jc2xqaXRfc2kgb3B0aW9ucywgc2xqaXRfc2kgYXJncywgc2xqaXRfc2kgc2NyYXRjaGVzLCBzbGppdF9zaSBzYXZlZHMsCi0Jc2xqaXRfc2kgZnNjcmF0Y2hlcywgc2xqaXRfc2kgZnNhdmVkcywgc2xqaXRfc2kgbG9jYWxfc2l6ZSkKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zMzIgc2xqaXRfZW1pdF9lbnRlcihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLAorCXNsaml0X3MzMiBvcHRpb25zLCBzbGppdF9zMzIgYXJncywgc2xqaXRfczMyIHNjcmF0Y2hlcywgc2xqaXRfczMyIHNhdmVkcywKKwlzbGppdF9zMzIgZnNjcmF0Y2hlcywgc2xqaXRfczMyIGZzYXZlZHMsIHNsaml0X3MzMiBsb2NhbF9zaXplKQogewotCXNsaml0X3NpIHNpemUsIGksIHRtcDsKKwlzbGppdF9zMzIgc2l6ZSwgaSwgdG1wOwogCXNsaml0X3V3IHB1c2g7CiAKIAlDSEVDS19FUlJPUigpOwpAQCAtODY2LDExICs4NjYsMTEgQEAKIAlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKIH0KIAotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X3NldF9jb250ZXh0KHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsCi0Jc2xqaXRfc2kgb3B0aW9ucywgc2xqaXRfc2kgYXJncywgc2xqaXRfc2kgc2NyYXRjaGVzLCBzbGppdF9zaSBzYXZlZHMsCi0Jc2xqaXRfc2kgZnNjcmF0Y2hlcywgc2xqaXRfc2kgZnNhdmVkcywgc2xqaXRfc2kgbG9jYWxfc2l6ZSkKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zMzIgc2xqaXRfc2V0X2NvbnRleHQoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwKKwlzbGppdF9zMzIgb3B0aW9ucywgc2xqaXRfczMyIGFyZ3MsIHNsaml0X3MzMiBzY3JhdGNoZXMsIHNsaml0X3MzMiBzYXZlZHMsCisJc2xqaXRfczMyIGZzY3JhdGNoZXMsIHNsaml0X3MzMiBmc2F2ZWRzLCBzbGppdF9zMzIgbG9jYWxfc2l6ZSkKIHsKLQlzbGppdF9zaSBzaXplOworCXNsaml0X3MzMiBzaXplOwogCiAJQ0hFQ0tfRVJST1IoKTsKIAlDSEVDSyhjaGVja19zbGppdF9zZXRfY29udGV4dChjb21waWxlciwgb3B0aW9ucywgYXJncywgc2NyYXRjaGVzLCBzYXZlZHMsIGZzY3JhdGNoZXMsIGZzYXZlZHMsIGxvY2FsX3NpemUpKTsKQEAgLTg4MSw5ICs4ODEsOSBAQAogCXJldHVybiBTTEpJVF9TVUNDRVNTOwogfQogCi1TTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9yZXR1cm4oc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsIHNsaml0X3NpIHNyYywgc2xqaXRfc3cgc3JjdykKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zMzIgc2xqaXRfZW1pdF9yZXR1cm4oc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIG9wLCBzbGppdF9zMzIgc3JjLCBzbGppdF9zdyBzcmN3KQogewotCXNsaml0X3NpIGksIHRtcDsKKwlzbGppdF9zMzIgaSwgdG1wOwogCXNsaml0X3V3IHBvcDsKIAogCUNIRUNLX0VSUk9SKCk7CkBAIC05ODMsOCArOTgzLDggQEAKIAl9IFwKIAlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBFTUlUX0RBVEFfUFJPQ0VTU19JTlMoTU9WX0RQLCBmbGFncyAmIFNFVF9GTEFHUywgZHN0LCBTTEpJVF9VTlVTRUQsIChyZWdfbWFwWyhmbGFncyAmIEFSR1NfU1dBUFBFRCkgPyBzcmMxIDogc3JjMl0gPDwgOCkgfCAob3Bjb2RlIDw8IDUpIHwgMHgxMCB8ICgoZmxhZ3MgJiBBUkdTX1NXQVBQRUQpID8gcmVnX21hcFtzcmMyXSA6IHJlZ19tYXBbc3JjMV0pKSk7CiAKLXN0YXRpYyBTTEpJVF9JTkxJTkUgc2xqaXRfc2kgZW1pdF9zaW5nbGVfb3Aoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsIHNsaml0X3NpIGZsYWdzLAotCXNsaml0X3NpIGRzdCwgc2xqaXRfc2kgc3JjMSwgc2xqaXRfc2kgc3JjMikKK3N0YXRpYyBTTEpJVF9JTkxJTkUgc2xqaXRfczMyIGVtaXRfc2luZ2xlX29wKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiBvcCwgc2xqaXRfczMyIGZsYWdzLAorCXNsaml0X3MzMiBkc3QsIHNsaml0X3MzMiBzcmMxLCBzbGppdF9zMzIgc3JjMikKIHsKIAlzbGppdF9zdyBtdWxfaW5zdDsKIApAQCAtMTAwMSwxNyArMTAwMSwxNyBAQAogCQl9CiAJCXJldHVybiBTTEpJVF9TVUNDRVNTOwogCi0JY2FzZSBTTEpJVF9NT1ZfVUI6Ci0JY2FzZSBTTEpJVF9NT1ZfU0I6CisJY2FzZSBTTEpJVF9NT1ZfVTg6CisJY2FzZSBTTEpJVF9NT1ZfUzg6CiAJCVNMSklUX0FTU0VSVChzcmMxID09IFRNUF9SRUcxICYmICEoZmxhZ3MgJiBBUkdTX1NXQVBQRUQpKTsKIAkJaWYgKChmbGFncyAmIChSRUdfREVTVCB8IFJFR19TT1VSQ0UpKSA9PSAoUkVHX0RFU1QgfCBSRUdfU09VUkNFKSkgewogI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19BUk1fVjUgJiYgU0xKSVRfQ09ORklHX0FSTV9WNSkKLQkJCWlmIChvcCA9PSBTTEpJVF9NT1ZfVUIpCisJCQlpZiAob3AgPT0gU0xKSVRfTU9WX1U4KQogCQkJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIEVNSVRfREFUQV9QUk9DRVNTX0lOUyhBTkRfRFAsIDAsIGRzdCwgc3JjMiwgU1JDMl9JTU0gfCAweGZmKSk7CiAJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgRU1JVF9EQVRBX1BST0NFU1NfSU5TKE1PVl9EUCwgMCwgZHN0LCBTTEpJVF9VTlVTRUQsICgyNCA8PCA3KSB8IHJlZ19tYXBbc3JjMl0pKSk7Ci0JCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBFTUlUX0RBVEFfUFJPQ0VTU19JTlMoTU9WX0RQLCAwLCBkc3QsIFNMSklUX1VOVVNFRCwgKDI0IDw8IDcpIHwgKG9wID09IFNMSklUX01PVl9VQiA/IDB4MjAgOiAweDQwKSB8IHJlZ19tYXBbZHN0XSkpOworCQkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgRU1JVF9EQVRBX1BST0NFU1NfSU5TKE1PVl9EUCwgMCwgZHN0LCBTTEpJVF9VTlVTRUQsICgyNCA8PCA3KSB8IChvcCA9PSBTTEpJVF9NT1ZfVTggPyAweDIwIDogMHg0MCkgfCByZWdfbWFwW2RzdF0pKTsKICNlbHNlCi0JCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCAob3AgPT0gU0xKSVRfTU9WX1VCID8gVVhUQiA6IFNYVEIpIHwgUkQoZHN0KSB8IFJNKHNyYzIpKTsKKwkJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIChvcCA9PSBTTEpJVF9NT1ZfVTggPyBVWFRCIDogU1hUQikgfCBSRChkc3QpIHwgUk0oc3JjMikpOwogI2VuZGlmCiAJCX0KIAkJZWxzZSBpZiAoZHN0ICE9IHNyYzIpIHsKQEAgLTEwMjIsMTUgKzEwMjIsMTUgQEAKIAkJfQogCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKIAotCWNhc2UgU0xKSVRfTU9WX1VIOgotCWNhc2UgU0xKSVRfTU9WX1NIOgorCWNhc2UgU0xKSVRfTU9WX1UxNjoKKwljYXNlIFNMSklUX01PVl9TMTY6CiAJCVNMSklUX0FTU0VSVChzcmMxID09IFRNUF9SRUcxICYmICEoZmxhZ3MgJiBBUkdTX1NXQVBQRUQpKTsKIAkJaWYgKChmbGFncyAmIChSRUdfREVTVCB8IFJFR19TT1VSQ0UpKSA9PSAoUkVHX0RFU1QgfCBSRUdfU09VUkNFKSkgewogI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19BUk1fVjUgJiYgU0xKSVRfQ09ORklHX0FSTV9WNSkKIAkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBFTUlUX0RBVEFfUFJPQ0VTU19JTlMoTU9WX0RQLCAwLCBkc3QsIFNMSklUX1VOVVNFRCwgKDE2IDw8IDcpIHwgcmVnX21hcFtzcmMyXSkpKTsKLQkJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIEVNSVRfREFUQV9QUk9DRVNTX0lOUyhNT1ZfRFAsIDAsIGRzdCwgU0xKSVRfVU5VU0VELCAoMTYgPDwgNykgfCAob3AgPT0gU0xKSVRfTU9WX1VIID8gMHgyMCA6IDB4NDApIHwgcmVnX21hcFtkc3RdKSk7CisJCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBFTUlUX0RBVEFfUFJPQ0VTU19JTlMoTU9WX0RQLCAwLCBkc3QsIFNMSklUX1VOVVNFRCwgKDE2IDw8IDcpIHwgKG9wID09IFNMSklUX01PVl9VMTYgPyAweDIwIDogMHg0MCkgfCByZWdfbWFwW2RzdF0pKTsKICNlbHNlCi0JCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCAob3AgPT0gU0xKSVRfTU9WX1VIID8gVVhUSCA6IFNYVEgpIHwgUkQoZHN0KSB8IFJNKHNyYzIpKTsKKwkJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIChvcCA9PSBTTEpJVF9NT1ZfVTE2ID8gVVhUSCA6IFNYVEgpIHwgUkQoZHN0KSB8IFJNKHNyYzIpKTsKICNlbmRpZgogCQl9CiAJCWVsc2UgaWYgKGRzdCAhPSBzcmMyKSB7CkBAIC0xMTM5LDcgKzExMzksNyBAQAogICAgUmV0dXJucyB3aXRoIDAgaWYgbm90IHBvc3NpYmxlLiAqLwogc3RhdGljIHNsaml0X3V3IGdldF9pbW0oc2xqaXRfdXcgaW1tKQogewotCXNsaml0X3NpIHJvbDsKKwlzbGppdF9zMzIgcm9sOwogCiAJaWYgKGltbSA8PSAweGZmKQogCQlyZXR1cm4gU1JDMl9JTU0gfCBpbW07CkBAIC0xMTc1LDEyICsxMTc1LDEyIEBACiB9CiAKICNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfQVJNX1Y1ICYmIFNMSklUX0NPTkZJR19BUk1fVjUpCi1zdGF0aWMgc2xqaXRfc2kgZ2VuZXJhdGVfaW50KHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIHJlZywgc2xqaXRfdXcgaW1tLCBzbGppdF9zaSBwb3NpdGl2ZSkKK3N0YXRpYyBzbGppdF9zMzIgZ2VuZXJhdGVfaW50KHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiByZWcsIHNsaml0X3V3IGltbSwgc2xqaXRfczMyIHBvc2l0aXZlKQogewogCXNsaml0X3V3IG1hc2s7CiAJc2xqaXRfdXcgaW1tMTsKIAlzbGppdF91dyBpbW0yOwotCXNsaml0X3NpIHJvbDsKKwlzbGppdF9zMzIgcm9sOwogCiAJLyogU3RlcDE6IFNlYXJjaCBhIHplcm8gYnl0ZSAoOCBjb250aW5vdXMgemVybyBiaXQpLiAqLwogCW1hc2sgPSAweGZmMDAwMDAwOwpAQCAtMTI4Niw3ICsxMjg2LDcgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgc2xqaXRfc2kgbG9hZF9pbW1lZGlhdGUoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgcmVnLCBzbGppdF91dyBpbW0pCitzdGF0aWMgc2xqaXRfczMyIGxvYWRfaW1tZWRpYXRlKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiByZWcsIHNsaml0X3V3IGltbSkKIHsKIAlzbGppdF91dyB0bXA7CiAKQEAgLTEzMTcsNyArMTMxNyw3IEBACiB9CiAKIC8qIEhlbHBlciBmdW5jdGlvbi4gRHN0IHNob3VsZCBiZSByZWcgKyB2YWx1ZSwgdXNpbmcgYXQgbW9zdCAxIGluc3RydWN0aW9uLCBmbGFncyBkb2VzIG5vdCBzZXQuICovCi1zdGF0aWMgc2xqaXRfc2kgZW1pdF9zZXRfZGVsdGEoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgZHN0LCBzbGppdF9zaSByZWcsIHNsaml0X3N3IHZhbHVlKQorc3RhdGljIHNsaml0X3MzMiBlbWl0X3NldF9kZWx0YShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgZHN0LCBzbGppdF9zMzIgcmVnLCBzbGppdF9zdyB2YWx1ZSkKIHsKIAlpZiAodmFsdWUgPj0gMCkgewogCQl2YWx1ZSA9IGdldF9pbW0odmFsdWUpOwpAQCAtMTMzMyw3ICsxMzMzLDcgQEAKIH0KIAogLyogQ2FuIHBlcmZvcm0gYW4gb3BlcmF0aW9uIHVzaW5nIGF0IG1vc3QgMSBpbnN0cnVjdGlvbi4gKi8KLXN0YXRpYyBzbGppdF9zaSBnZXRwdXRfYXJnX2Zhc3Qoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgaW5wX2ZsYWdzLCBzbGppdF9zaSByZWcsIHNsaml0X3NpIGFyZywgc2xqaXRfc3cgYXJndykKK3N0YXRpYyBzbGppdF9zMzIgZ2V0cHV0X2FyZ19mYXN0KHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiBpbnBfZmxhZ3MsIHNsaml0X3MzMiByZWcsIHNsaml0X3MzMiBhcmcsIHNsaml0X3N3IGFyZ3cpCiB7CiAJc2xqaXRfdXcgaW1tOwogCkBAIC0xNDA4LDcgKzE0MDgsNyBAQAogLyogU2VlIGdldHB1dF9hcmcgYmVsb3cuCiAgICBOb3RlOiBjYW5fY2FjaGUgaXMgY2FsbGVkIG9ubHkgZm9yIGJpbmFyeSBvcGVyYXRvcnMuIFRob3NlCiAgICBvcGVyYXRvcnMgYWx3YXlzIHVzZXMgd29yZCBhcmd1bWVudHMgd2l0aG91dCB3cml0ZSBiYWNrLiAqLwotc3RhdGljIHNsaml0X3NpIGNhbl9jYWNoZShzbGppdF9zaSBhcmcsIHNsaml0X3N3IGFyZ3csIHNsaml0X3NpIG5leHRfYXJnLCBzbGppdF9zdyBuZXh0X2FyZ3cpCitzdGF0aWMgc2xqaXRfczMyIGNhbl9jYWNoZShzbGppdF9zMzIgYXJnLCBzbGppdF9zdyBhcmd3LCBzbGppdF9zMzIgbmV4dF9hcmcsIHNsaml0X3N3IG5leHRfYXJndykKIHsKIAkvKiBJbW1lZGlhdGUgY2FjaGluZyBpcyBub3Qgc3VwcG9ydGVkIGFzIGl0IHdvdWxkIGJlIGFuIG9wZXJhdGlvbiBvbiBjb25zdGFudCBhcmd1bWVudHMuICovCiAJaWYgKGFyZyAmIFNMSklUX0lNTSkKQEAgLTE0NTYsOSArMTQ1Niw5IEBACiAJfQogCiAvKiBFbWl0IHRoZSBuZWNlc3NhcnkgaW5zdHJ1Y3Rpb25zLiBTZWUgY2FuX2NhY2hlIGFib3ZlLiAqLwotc3RhdGljIHNsaml0X3NpIGdldHB1dF9hcmcoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgaW5wX2ZsYWdzLCBzbGppdF9zaSByZWcsIHNsaml0X3NpIGFyZywgc2xqaXRfc3cgYXJndywgc2xqaXRfc2kgbmV4dF9hcmcsIHNsaml0X3N3IG5leHRfYXJndykKK3N0YXRpYyBzbGppdF9zMzIgZ2V0cHV0X2FyZyhzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgaW5wX2ZsYWdzLCBzbGppdF9zMzIgcmVnLCBzbGppdF9zMzIgYXJnLCBzbGppdF9zdyBhcmd3LCBzbGppdF9zMzIgbmV4dF9hcmcsIHNsaml0X3N3IG5leHRfYXJndykKIHsKLQlzbGppdF9zaSB0bXBfcjsKKwlzbGppdF9zMzIgdG1wX3I7CiAJc2xqaXRfc3cgbWF4X2RlbHRhOwogCXNsaml0X3N3IHNpZ247CiAJc2xqaXRfdXcgaW1tOwpAQCAtMTU4Myw3ICsxNTgzLDcgQEAKIAlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBFTUlUX0RBVEFfVFJBTlNGRVIoaW5wX2ZsYWdzLCAxLCBpbnBfZmxhZ3MgJiBXUklURV9CQUNLLCByZWcsIGFyZyAmIFJFR19NQVNLLCByZWdfbWFwW3RtcF9yXSB8IChtYXhfZGVsdGEgJiAweGYwMCA/IFNSQzJfSU1NIDogMCkpKTsKIH0KIAotc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9zaSBlbWl0X29wX21lbShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBmbGFncywgc2xqaXRfc2kgcmVnLCBzbGppdF9zaSBhcmcsIHNsaml0X3N3IGFyZ3cpCitzdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X3MzMiBlbWl0X29wX21lbShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgZmxhZ3MsIHNsaml0X3MzMiByZWcsIHNsaml0X3MzMiBhcmcsIHNsaml0X3N3IGFyZ3cpCiB7CiAJaWYgKGdldHB1dF9hcmdfZmFzdChjb21waWxlciwgZmxhZ3MsIHJlZywgYXJnLCBhcmd3KSkKIAkJcmV0dXJuIGNvbXBpbGVyLT5lcnJvcjsKQEAgLTE1OTIsMTcgKzE1OTIsMTcgQEAKIAlyZXR1cm4gZ2V0cHV0X2FyZyhjb21waWxlciwgZmxhZ3MsIHJlZywgYXJnLCBhcmd3LCAwLCAwKTsKIH0KIAotc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9zaSBlbWl0X29wX21lbTIoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgZmxhZ3MsIHNsaml0X3NpIHJlZywgc2xqaXRfc2kgYXJnMSwgc2xqaXRfc3cgYXJnMXcsIHNsaml0X3NpIGFyZzIsIHNsaml0X3N3IGFyZzJ3KQorc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9zMzIgZW1pdF9vcF9tZW0yKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiBmbGFncywgc2xqaXRfczMyIHJlZywgc2xqaXRfczMyIGFyZzEsIHNsaml0X3N3IGFyZzF3LCBzbGppdF9zMzIgYXJnMiwgc2xqaXRfc3cgYXJnMncpCiB7CiAJaWYgKGdldHB1dF9hcmdfZmFzdChjb21waWxlciwgZmxhZ3MsIHJlZywgYXJnMSwgYXJnMXcpKQogCQlyZXR1cm4gY29tcGlsZXItPmVycm9yOwogCXJldHVybiBnZXRwdXRfYXJnKGNvbXBpbGVyLCBmbGFncywgcmVnLCBhcmcxLCBhcmcxdywgYXJnMiwgYXJnMncpOwogfQogCi1zdGF0aWMgc2xqaXRfc2kgZW1pdF9vcChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwgc2xqaXRfc2kgaW5wX2ZsYWdzLAotCXNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dywKLQlzbGppdF9zaSBzcmMxLCBzbGppdF9zdyBzcmMxdywKLQlzbGppdF9zaSBzcmMyLCBzbGppdF9zdyBzcmMydykKK3N0YXRpYyBzbGppdF9zMzIgZW1pdF9vcChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgb3AsIHNsaml0X3MzMiBpbnBfZmxhZ3MsCisJc2xqaXRfczMyIGRzdCwgc2xqaXRfc3cgZHN0dywKKwlzbGppdF9zMzIgc3JjMSwgc2xqaXRfc3cgc3JjMXcsCisJc2xqaXRfczMyIHNyYzIsIHNsaml0X3N3IHNyYzJ3KQogewogCS8qIGFyZzEgZ29lcyB0byBUTVBfUkVHMSBvciBzcmMgcmVnCiAJICAgYXJnMiBnb2VzIHRvIFRNUF9SRUcyLCBpbW0gb3Igc3JjIHJlZwpAQCAtMTYxMCwyNSArMTYxMCwyNSBAQAogCSAgIHJlc3VsdCBnb2VzIHRvIFRNUF9SRUcyLCBzbyBwdXQgcmVzdWx0IGNhbiB1c2UgVE1QX1JFRzEgYW5kIFRNUF9SRUczLiAqLwogCiAJLyogV2UgcHJlZmVycyByZWdpc3RlciBhbmQgc2ltcGxlIGNvbnN0cy4gKi8KLQlzbGppdF9zaSBkc3RfcjsKLQlzbGppdF9zaSBzcmMxX3I7Ci0Jc2xqaXRfc2kgc3JjMl9yID0gMDsKLQlzbGppdF9zaSBzdWdnX3NyYzJfciA9IFRNUF9SRUcyOwotCXNsaml0X3NpIGZsYWdzID0gR0VUX0ZMQUdTKG9wKSA/IFNFVF9GTEFHUyA6IDA7CisJc2xqaXRfczMyIGRzdF9yOworCXNsaml0X3MzMiBzcmMxX3I7CisJc2xqaXRfczMyIHNyYzJfciA9IDA7CisJc2xqaXRfczMyIHN1Z2dfc3JjMl9yID0gVE1QX1JFRzI7CisJc2xqaXRfczMyIGZsYWdzID0gR0VUX0ZMQUdTKG9wKSA/IFNFVF9GTEFHUyA6IDA7CiAKIAljb21waWxlci0+Y2FjaGVfYXJnID0gMDsKIAljb21waWxlci0+Y2FjaGVfYXJndyA9IDA7CiAKIAkvKiBEZXN0aW5hdGlvbiBjaGVjay4gKi8KIAlpZiAoU0xKSVRfVU5MSUtFTFkoZHN0ID09IFNMSklUX1VOVVNFRCkpIHsKLQkJaWYgKG9wID49IFNMSklUX01PViAmJiBvcCA8PSBTTEpJVF9NT1ZVX1NJICYmICEoc3JjMiAmIFNMSklUX01FTSkpCisJCWlmIChvcCA+PSBTTEpJVF9NT1YgJiYgb3AgPD0gU0xKSVRfTU9WVV9TMzIgJiYgIShzcmMyICYgU0xKSVRfTUVNKSkKIAkJCXJldHVybiBTTEpJVF9TVUNDRVNTOwogCQlkc3RfciA9IFRNUF9SRUcyOwogCX0KIAllbHNlIGlmIChGQVNUX0lTX1JFRyhkc3QpKSB7CiAJCWRzdF9yID0gZHN0OwogCQlmbGFncyB8PSBSRUdfREVTVDsKLQkJaWYgKG9wID49IFNMSklUX01PViAmJiBvcCA8PSBTTEpJVF9NT1ZVX1NJKQorCQlpZiAob3AgPj0gU0xKSVRfTU9WICYmIG9wIDw9IFNMSklUX01PVlVfUzMyKQogCQkJc3VnZ19zcmMyX3IgPSBkc3RfcjsKIAl9CiAJZWxzZSB7CkBAIC0xNjk1LDcgKzE2OTUsNyBAQAogCQlpZiAoRkFTVF9JU19SRUcoc3JjMikpIHsKIAkJCXNyYzJfciA9IHNyYzI7CiAJCQlmbGFncyB8PSBSRUdfU09VUkNFOwotCQkJaWYgKCEoZmxhZ3MgJiBSRUdfREVTVCkgJiYgb3AgPj0gU0xKSVRfTU9WICYmIG9wIDw9IFNMSklUX01PVlVfU0kpCisJCQlpZiAoIShmbGFncyAmIFJFR19ERVNUKSAmJiBvcCA+PSBTTEpJVF9NT1YgJiYgb3AgPD0gU0xKSVRfTU9WVV9TMzIpCiAJCQkJZHN0X3IgPSBzcmMyX3I7CiAJCX0KIAkJZWxzZSBkbyB7IC8qIGRvIHsgfSB3aGlsZSgwKSBpcyB1c2VkIGJlY2F1c2Ugb2YgYnJlYWtzLiAqLwpAQCAtMTgwNCw3ICsxODA0LDcgQEAKIH0KICNlbmRpZgogCi1TTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9vcDAoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3ApCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfczMyIHNsaml0X2VtaXRfb3AwKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiBvcCkKIHsKIAlDSEVDS19FUlJPUigpOwogCUNIRUNLKGNoZWNrX3Nsaml0X2VtaXRfb3AwKGNvbXBpbGVyLCBvcCkpOwpAQCAtMTgxNyw1OCArMTgxNyw1OCBAQAogCWNhc2UgU0xKSVRfTk9QOgogCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgTk9QKSk7CiAJCWJyZWFrOwotCWNhc2UgU0xKSVRfTFVNVUw6Ci0JY2FzZSBTTEpJVF9MU01VTDoKKwljYXNlIFNMSklUX0xNVUxfVVc6CisJY2FzZSBTTEpJVF9MTVVMX1NXOgogI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19BUk1fVjcgJiYgU0xKSVRfQ09ORklHX0FSTV9WNykKLQkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgKG9wID09IFNMSklUX0xVTVVMID8gVU1VTEwgOiBTTVVMTCkKKwkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgKG9wID09IFNMSklUX0xNVUxfVVcgPyBVTVVMTCA6IFNNVUxMKQogCQkJfCAocmVnX21hcFtTTEpJVF9SMV0gPDwgMTYpCiAJCQl8IChyZWdfbWFwW1NMSklUX1IwXSA8PCAxMikKIAkJCXwgKHJlZ19tYXBbU0xKSVRfUjBdIDw8IDgpCiAJCQl8IHJlZ19tYXBbU0xKSVRfUjFdKTsKICNlbHNlCiAJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBFTUlUX0RBVEFfUFJPQ0VTU19JTlMoTU9WX0RQLCAwLCBUTVBfUkVHMSwgU0xKSVRfVU5VU0VELCBSTShTTEpJVF9SMSkpKSk7Ci0JCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIChvcCA9PSBTTEpJVF9MVU1VTCA/IFVNVUxMIDogU01VTEwpCisJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIChvcCA9PSBTTEpJVF9MTVVMX1VXID8gVU1VTEwgOiBTTVVMTCkKIAkJCXwgKHJlZ19tYXBbU0xKSVRfUjFdIDw8IDE2KQogCQkJfCAocmVnX21hcFtTTEpJVF9SMF0gPDwgMTIpCiAJCQl8IChyZWdfbWFwW1NMSklUX1IwXSA8PCA4KQogCQkJfCByZWdfbWFwW1RNUF9SRUcxXSk7CiAjZW5kaWYKLQljYXNlIFNMSklUX1VESVZNT0Q6Ci0JY2FzZSBTTEpJVF9TRElWTU9EOgotCWNhc2UgU0xKSVRfVURJVkk6Ci0JY2FzZSBTTEpJVF9TRElWSToKLQkJU0xKSVRfQ09NUElMRV9BU1NFUlQoKFNMSklUX1VESVZNT0QgJiAweDIpID09IDAgJiYgU0xKSVRfVURJVkkgLSAweDIgPT0gU0xKSVRfVURJVk1PRCwgYmFkX2Rpdl9vcGNvZGVfYXNzaWdubWVudHMpOworCWNhc2UgU0xKSVRfRElWTU9EX1VXOgorCWNhc2UgU0xKSVRfRElWTU9EX1NXOgorCWNhc2UgU0xKSVRfRElWX1VXOgorCWNhc2UgU0xKSVRfRElWX1NXOgorCQlTTEpJVF9DT01QSUxFX0FTU0VSVCgoU0xKSVRfRElWTU9EX1VXICYgMHgyKSA9PSAwICYmIFNMSklUX0RJVl9VVyAtIDB4MiA9PSBTTEpJVF9ESVZNT0RfVVcsIGJhZF9kaXZfb3Bjb2RlX2Fzc2lnbm1lbnRzKTsKIAkJU0xKSVRfQ09NUElMRV9BU1NFUlQocmVnX21hcFsyXSA9PSAxICYmIHJlZ19tYXBbM10gPT0gMiwgYmFkX3JlZ2lzdGVyX21hcHBpbmcpOwogCi0JCWlmICgob3AgPj0gU0xKSVRfVURJVkkpICYmIChjb21waWxlci0+c2NyYXRjaGVzID49IDMpKSB7CisJCWlmICgob3AgPj0gU0xKSVRfRElWX1VXKSAmJiAoY29tcGlsZXItPnNjcmF0Y2hlcyA+PSAzKSkgewogCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIDB4ZTUyZDIwMDggLyogc3RyIHIyLCBbc3AsICMtOF0hICovKSk7CiAJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgMHhlNThkMTAwNCAvKiBzdHIgcjEsIFtzcCwgIzRdICovKSk7CiAJCX0KLQkJZWxzZSBpZiAoKG9wID49IFNMSklUX1VESVZJKSB8fCAoY29tcGlsZXItPnNjcmF0Y2hlcyA+PSAzKSkKLQkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCAweGU1MmQwMDA4IHwgKG9wID49IFNMSklUX1VESVZJID8gMHgxMDAwIDogMHgyMDAwKSAvKiBzdHIgcjEvcjIsIFtzcCwgIy04XSEgKi8pKTsKKwkJZWxzZSBpZiAoKG9wID49IFNMSklUX0RJVl9VVykgfHwgKGNvbXBpbGVyLT5zY3JhdGNoZXMgPj0gMykpCisJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgMHhlNTJkMDAwOCB8IChvcCA+PSBTTEpJVF9ESVZfVVcgPyAweDEwMDAgOiAweDIwMDApIC8qIHN0ciByMS9yMiwgW3NwLCAjLThdISAqLykpOwogCiAjaWYgZGVmaW5lZChfX0dOVUNfXykKIAkJRkFJTF9JRihzbGppdF9lbWl0X2lqdW1wKGNvbXBpbGVyLCBTTEpJVF9GQVNUX0NBTEwsIFNMSklUX0lNTSwKLQkJCSgob3AgfCAweDIpID09IFNMSklUX1VESVZJID8gU0xKSVRfRlVOQ19PRkZTRVQoX19hZWFiaV91aWRpdm1vZCkgOiBTTEpJVF9GVU5DX09GRlNFVChfX2FlYWJpX2lkaXZtb2QpKSkpOworCQkJKChvcCB8IDB4MikgPT0gU0xKSVRfRElWX1VXID8gU0xKSVRfRlVOQ19PRkZTRVQoX19hZWFiaV91aWRpdm1vZCkgOiBTTEpJVF9GVU5DX09GRlNFVChfX2FlYWJpX2lkaXZtb2QpKSkpOwogI2Vsc2UKICNlcnJvciAiU29mdHdhcmUgZGl2bW9kIGZ1bmN0aW9ucyBhcmUgbmVlZGVkIgogI2VuZGlmCiAKLQkJaWYgKChvcCA+PSBTTEpJVF9VRElWSSkgJiYgKGNvbXBpbGVyLT5zY3JhdGNoZXMgPj0gMykpIHsKKwkJaWYgKChvcCA+PSBTTEpJVF9ESVZfVVcpICYmIChjb21waWxlci0+c2NyYXRjaGVzID49IDMpKSB7CiAJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgMHhlNTlkMTAwNCAvKiBsZHIgcjEsIFtzcCwgIzRdICovKSk7CiAJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgMHhlNDlkMjAwOCAvKiBsZHIgcjIsIFtzcF0sICM4ICovKSk7CiAJCX0KLQkJZWxzZSBpZiAoKG9wID49IFNMSklUX1VESVZJKSB8fCAoY29tcGlsZXItPnNjcmF0Y2hlcyA+PSAzKSkKLQkJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIDB4ZTQ5ZDAwMDggfCAob3AgPj0gU0xKSVRfVURJVkkgPyAweDEwMDAgOiAweDIwMDApIC8qIGxkciByMS9yMiwgW3NwXSwgIzggKi8pOworCQllbHNlIGlmICgob3AgPj0gU0xKSVRfRElWX1VXKSB8fCAoY29tcGlsZXItPnNjcmF0Y2hlcyA+PSAzKSkKKwkJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIDB4ZTQ5ZDAwMDggfCAob3AgPj0gU0xKSVRfRElWX1VXID8gMHgxMDAwIDogMHgyMDAwKSAvKiBsZHIgcjEvcjIsIFtzcF0sICM4ICovKTsKIAkJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CiAJfQogCiAJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CiB9CiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X29wMShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwKLQlzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsCi0Jc2xqaXRfc2kgc3JjLCBzbGppdF9zdyBzcmN3KQorU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3MzMiBzbGppdF9lbWl0X29wMShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgb3AsCisJc2xqaXRfczMyIGRzdCwgc2xqaXRfc3cgZHN0dywKKwlzbGppdF9zMzIgc3JjLCBzbGppdF9zdyBzcmN3KQogewogCUNIRUNLX0VSUk9SKCk7CiAJQ0hFQ0soY2hlY2tfc2xqaXRfZW1pdF9vcDEoY29tcGlsZXIsIG9wLCBkc3QsIGRzdHcsIHNyYywgc3JjdykpOwpAQCAtMTg3Nyw0MCArMTg3Nyw0MCBAQAogCiAJc3dpdGNoIChHRVRfT1BDT0RFKG9wKSkgewogCWNhc2UgU0xKSVRfTU9WOgotCWNhc2UgU0xKSVRfTU9WX1VJOgotCWNhc2UgU0xKSVRfTU9WX1NJOgorCWNhc2UgU0xKSVRfTU9WX1UzMjoKKwljYXNlIFNMSklUX01PVl9TMzI6CiAJY2FzZSBTTEpJVF9NT1ZfUDoKIAkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01PViwgQUxMT1dfQU5ZX0lNTSwgZHN0LCBkc3R3LCBUTVBfUkVHMSwgMCwgc3JjLCBzcmN3KTsKIAotCWNhc2UgU0xKSVRfTU9WX1VCOgotCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfTU9WX1VCLCBBTExPV19BTllfSU1NIHwgQllURV9EQVRBLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIChzcmMgJiBTTEpJVF9JTU0pID8gKHNsaml0X3ViKXNyY3cgOiBzcmN3KTsKKwljYXNlIFNMSklUX01PVl9VODoKKwkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01PVl9VOCwgQUxMT1dfQU5ZX0lNTSB8IEJZVEVfREFUQSwgZHN0LCBkc3R3LCBUTVBfUkVHMSwgMCwgc3JjLCAoc3JjICYgU0xKSVRfSU1NKSA/IChzbGppdF91OClzcmN3IDogc3Jjdyk7CiAKLQljYXNlIFNMSklUX01PVl9TQjoKLQkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01PVl9TQiwgQUxMT1dfQU5ZX0lNTSB8IFNJR05FRF9EQVRBIHwgQllURV9EQVRBLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIChzcmMgJiBTTEpJVF9JTU0pID8gKHNsaml0X3NiKXNyY3cgOiBzcmN3KTsKKwljYXNlIFNMSklUX01PVl9TODoKKwkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01PVl9TOCwgQUxMT1dfQU5ZX0lNTSB8IFNJR05FRF9EQVRBIHwgQllURV9EQVRBLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIChzcmMgJiBTTEpJVF9JTU0pID8gKHNsaml0X3M4KXNyY3cgOiBzcmN3KTsKIAotCWNhc2UgU0xKSVRfTU9WX1VIOgotCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfTU9WX1VILCBBTExPV19BTllfSU1NIHwgSEFMRl9EQVRBLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIChzcmMgJiBTTEpJVF9JTU0pID8gKHNsaml0X3VoKXNyY3cgOiBzcmN3KTsKKwljYXNlIFNMSklUX01PVl9VMTY6CisJCXJldHVybiBlbWl0X29wKGNvbXBpbGVyLCBTTEpJVF9NT1ZfVTE2LCBBTExPV19BTllfSU1NIHwgSEFMRl9EQVRBLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIChzcmMgJiBTTEpJVF9JTU0pID8gKHNsaml0X3UxNilzcmN3IDogc3Jjdyk7CiAKLQljYXNlIFNMSklUX01PVl9TSDoKLQkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01PVl9TSCwgQUxMT1dfQU5ZX0lNTSB8IFNJR05FRF9EQVRBIHwgSEFMRl9EQVRBLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIChzcmMgJiBTTEpJVF9JTU0pID8gKHNsaml0X3NoKXNyY3cgOiBzcmN3KTsKKwljYXNlIFNMSklUX01PVl9TMTY6CisJCXJldHVybiBlbWl0X29wKGNvbXBpbGVyLCBTTEpJVF9NT1ZfUzE2LCBBTExPV19BTllfSU1NIHwgU0lHTkVEX0RBVEEgfCBIQUxGX0RBVEEsIGRzdCwgZHN0dywgVE1QX1JFRzEsIDAsIHNyYywgKHNyYyAmIFNMSklUX0lNTSkgPyAoc2xqaXRfczE2KXNyY3cgOiBzcmN3KTsKIAogCWNhc2UgU0xKSVRfTU9WVToKLQljYXNlIFNMSklUX01PVlVfVUk6Ci0JY2FzZSBTTEpJVF9NT1ZVX1NJOgorCWNhc2UgU0xKSVRfTU9WVV9VMzI6CisJY2FzZSBTTEpJVF9NT1ZVX1MzMjoKIAljYXNlIFNMSklUX01PVlVfUDoKIAkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01PViwgQUxMT1dfQU5ZX0lNTSB8IFdSSVRFX0JBQ0ssIGRzdCwgZHN0dywgVE1QX1JFRzEsIDAsIHNyYywgc3Jjdyk7CiAKLQljYXNlIFNMSklUX01PVlVfVUI6Ci0JCXJldHVybiBlbWl0X29wKGNvbXBpbGVyLCBTTEpJVF9NT1ZfVUIsIEFMTE9XX0FOWV9JTU0gfCBCWVRFX0RBVEEgfCBXUklURV9CQUNLLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIChzcmMgJiBTTEpJVF9JTU0pID8gKHNsaml0X3ViKXNyY3cgOiBzcmN3KTsKKwljYXNlIFNMSklUX01PVlVfVTg6CisJCXJldHVybiBlbWl0X29wKGNvbXBpbGVyLCBTTEpJVF9NT1ZfVTgsIEFMTE9XX0FOWV9JTU0gfCBCWVRFX0RBVEEgfCBXUklURV9CQUNLLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIChzcmMgJiBTTEpJVF9JTU0pID8gKHNsaml0X3U4KXNyY3cgOiBzcmN3KTsKIAotCWNhc2UgU0xKSVRfTU9WVV9TQjoKLQkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01PVl9TQiwgQUxMT1dfQU5ZX0lNTSB8IFNJR05FRF9EQVRBIHwgQllURV9EQVRBIHwgV1JJVEVfQkFDSywgZHN0LCBkc3R3LCBUTVBfUkVHMSwgMCwgc3JjLCAoc3JjICYgU0xKSVRfSU1NKSA/IChzbGppdF9zYilzcmN3IDogc3Jjdyk7CisJY2FzZSBTTEpJVF9NT1ZVX1M4OgorCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfTU9WX1M4LCBBTExPV19BTllfSU1NIHwgU0lHTkVEX0RBVEEgfCBCWVRFX0RBVEEgfCBXUklURV9CQUNLLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIChzcmMgJiBTTEpJVF9JTU0pID8gKHNsaml0X3M4KXNyY3cgOiBzcmN3KTsKIAotCWNhc2UgU0xKSVRfTU9WVV9VSDoKLQkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01PVl9VSCwgQUxMT1dfQU5ZX0lNTSB8IEhBTEZfREFUQSB8IFdSSVRFX0JBQ0ssIGRzdCwgZHN0dywgVE1QX1JFRzEsIDAsIHNyYywgKHNyYyAmIFNMSklUX0lNTSkgPyAoc2xqaXRfdWgpc3JjdyA6IHNyY3cpOworCWNhc2UgU0xKSVRfTU9WVV9VMTY6CisJCXJldHVybiBlbWl0X29wKGNvbXBpbGVyLCBTTEpJVF9NT1ZfVTE2LCBBTExPV19BTllfSU1NIHwgSEFMRl9EQVRBIHwgV1JJVEVfQkFDSywgZHN0LCBkc3R3LCBUTVBfUkVHMSwgMCwgc3JjLCAoc3JjICYgU0xKSVRfSU1NKSA/IChzbGppdF91MTYpc3JjdyA6IHNyY3cpOwogCi0JY2FzZSBTTEpJVF9NT1ZVX1NIOgotCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfTU9WX1NILCBBTExPV19BTllfSU1NIHwgU0lHTkVEX0RBVEEgfCBIQUxGX0RBVEEgfCBXUklURV9CQUNLLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIChzcmMgJiBTTEpJVF9JTU0pID8gKHNsaml0X3NoKXNyY3cgOiBzcmN3KTsKKwljYXNlIFNMSklUX01PVlVfUzE2OgorCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfTU9WX1MxNiwgQUxMT1dfQU5ZX0lNTSB8IFNJR05FRF9EQVRBIHwgSEFMRl9EQVRBIHwgV1JJVEVfQkFDSywgZHN0LCBkc3R3LCBUTVBfUkVHMSwgMCwgc3JjLCAoc3JjICYgU0xKSVRfSU1NKSA/IChzbGppdF9zMTYpc3JjdyA6IHNyY3cpOwogCiAJY2FzZSBTTEpJVF9OT1Q6CiAJCXJldHVybiBlbWl0X29wKGNvbXBpbGVyLCBvcCwgQUxMT1dfQU5ZX0lNTSwgZHN0LCBkc3R3LCBUTVBfUkVHMSwgMCwgc3JjLCBzcmN3KTsKQEAgLTE5MjksMTAgKzE5MjksMTAgQEAKIAlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKIH0KIAotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfb3AyKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIG9wLAotCXNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dywKLQlzbGppdF9zaSBzcmMxLCBzbGppdF9zdyBzcmMxdywKLQlzbGppdF9zaSBzcmMyLCBzbGppdF9zdyBzcmMydykKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zMzIgc2xqaXRfZW1pdF9vcDIoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIG9wLAorCXNsaml0X3MzMiBkc3QsIHNsaml0X3N3IGRzdHcsCisJc2xqaXRfczMyIHNyYzEsIHNsaml0X3N3IHNyYzF3LAorCXNsaml0X3MzMiBzcmMyLCBzbGppdF9zdyBzcmMydykKIHsKIAlDSEVDS19FUlJPUigpOwogCUNIRUNLKGNoZWNrX3Nsaml0X2VtaXRfb3AyKGNvbXBpbGVyLCBvcCwgZHN0LCBkc3R3LCBzcmMxLCBzcmMxdywgc3JjMiwgc3JjMncpKTsKQEAgLTE5NzEsMjAgKzE5NzEsMjAgQEAKIAlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKIH0KIAotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2dldF9yZWdpc3Rlcl9pbmRleChzbGppdF9zaSByZWcpCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfczMyIHNsaml0X2dldF9yZWdpc3Rlcl9pbmRleChzbGppdF9zMzIgcmVnKQogewogCUNIRUNLX1JFR19JTkRFWChjaGVja19zbGppdF9nZXRfcmVnaXN0ZXJfaW5kZXgocmVnKSk7CiAJcmV0dXJuIHJlZ19tYXBbcmVnXTsKIH0KIAotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2dldF9mbG9hdF9yZWdpc3Rlcl9pbmRleChzbGppdF9zaSByZWcpCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfczMyIHNsaml0X2dldF9mbG9hdF9yZWdpc3Rlcl9pbmRleChzbGppdF9zMzIgcmVnKQogewogCUNIRUNLX1JFR19JTkRFWChjaGVja19zbGppdF9nZXRfZmxvYXRfcmVnaXN0ZXJfaW5kZXgocmVnKSk7CiAJcmV0dXJuIHJlZyA8PCAxOwogfQogCi1TTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9vcF9jdXN0b20oc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwKLQl2b2lkICppbnN0cnVjdGlvbiwgc2xqaXRfc2kgc2l6ZSkKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zMzIgc2xqaXRfZW1pdF9vcF9jdXN0b20oc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwKKwl2b2lkICppbnN0cnVjdGlvbiwgc2xqaXRfczMyIHNpemUpCiB7CiAJQ0hFQ0tfRVJST1IoKTsKIAlDSEVDSyhjaGVja19zbGppdF9lbWl0X29wX2N1c3RvbShjb21waWxlciwgaW5zdHJ1Y3Rpb24sIHNpemUpKTsKQEAgLTIwMDAsNyArMjAwMCw3IEBACiAKIC8qIDAgLSBubyBmcHUKICAgIDEgLSB2ZnAgKi8KLXN0YXRpYyBzbGppdF9zaSBhcm1fZnB1X3R5cGUgPSAtMTsKK3N0YXRpYyBzbGppdF9zMzIgYXJtX2ZwdV90eXBlID0gLTE7CiAKIHN0YXRpYyB2b2lkIGluaXRfY29tcGlsZXIodm9pZCkKIHsKQEAgLTIwMTEsNyArMjAxMSw3IEBACiAJYXJtX2ZwdV90eXBlID0gMTsKIH0KIAotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2lzX2ZwdV9hdmFpbGFibGUodm9pZCkKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zMzIgc2xqaXRfaXNfZnB1X2F2YWlsYWJsZSh2b2lkKQogewogI2lmZGVmIFNMSklUX0lTX0ZQVV9BVkFJTEFCTEUKIAlyZXR1cm4gU0xKSVRfSVNfRlBVX0FWQUlMQUJMRTsKQEAgLTIwMjYsNyArMjAyNiw3IEBACiAKICNkZWZpbmUgYXJtX2ZwdV90eXBlIDEKIAotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2lzX2ZwdV9hdmFpbGFibGUodm9pZCkKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zMzIgc2xqaXRfaXNfZnB1X2F2YWlsYWJsZSh2b2lkKQogewogCS8qIEFsd2F5cyBhdmFpbGFibGUuICovCiAJcmV0dXJuIDE7CkBAIC0yMDQwLDExICsyMDQwLDExIEBACiAjZGVmaW5lIEVNSVRfRlBVX09QRVJBVElPTihvcGNvZGUsIG1vZGUsIGRzdCwgc3JjMSwgc3JjMikgXAogCSgob3Bjb2RlKSB8IChtb2RlKSB8ICgoZHN0KSA8PCAxMikgfCAoc3JjMSkgfCAoKHNyYzIpIDw8IDE2KSkKIAotc3RhdGljIHNsaml0X3NpIGVtaXRfZm9wX21lbShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBmbGFncywgc2xqaXRfc2kgcmVnLCBzbGppdF9zaSBhcmcsIHNsaml0X3N3IGFyZ3cpCitzdGF0aWMgc2xqaXRfczMyIGVtaXRfZm9wX21lbShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgZmxhZ3MsIHNsaml0X3MzMiByZWcsIHNsaml0X3MzMiBhcmcsIHNsaml0X3N3IGFyZ3cpCiB7CiAJc2xqaXRfc3cgdG1wOwogCXNsaml0X3V3IGltbTsKLQlzbGppdF9zdyBpbnN0ID0gVlNUUl9GMzIgfCAoZmxhZ3MgJiAoU0xKSVRfU0lOR0xFX09QIHwgRlBVX0xPQUQpKTsKKwlzbGppdF9zdyBpbnN0ID0gVlNUUl9GMzIgfCAoZmxhZ3MgJiAoU0xKSVRfRjMyX09QIHwgRlBVX0xPQUQpKTsKIAlTTEpJVF9BU1NFUlQoYXJnICYgU0xKSVRfTUVNKTsKIAogCWlmIChTTEpJVF9VTkxJS0VMWShhcmcgJiBPRkZTX1JFR19NQVNLKSkgewpAQCAtMjEwNCwxNiArMjEwNCwxNiBAQAogCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIEVNSVRfRlBVX0RBVEFfVFJBTlNGRVIoaW5zdCwgMSwgVE1QX1JFRzMsIHJlZywgMCkpOwogfQogCi1zdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X3NpIHNsaml0X2VtaXRfZm9wMV9jb252d19mcm9tZChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwKLQlzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsCi0Jc2xqaXRfc2kgc3JjLCBzbGppdF9zdyBzcmN3KQorc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9zMzIgc2xqaXRfZW1pdF9mb3AxX2NvbnZfc3dfZnJvbV9mNjQoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIG9wLAorCXNsaml0X3MzMiBkc3QsIHNsaml0X3N3IGRzdHcsCisJc2xqaXRfczMyIHNyYywgc2xqaXRfc3cgc3JjdykKIHsKIAlpZiAoc3JjICYgU0xKSVRfTUVNKSB7Ci0JCUZBSUxfSUYoZW1pdF9mb3BfbWVtKGNvbXBpbGVyLCAob3AgJiBTTEpJVF9TSU5HTEVfT1ApIHwgRlBVX0xPQUQsIFRNUF9GUkVHMSwgc3JjLCBzcmN3KSk7CisJCUZBSUxfSUYoZW1pdF9mb3BfbWVtKGNvbXBpbGVyLCAob3AgJiBTTEpJVF9GMzJfT1ApIHwgRlBVX0xPQUQsIFRNUF9GUkVHMSwgc3JjLCBzcmN3KSk7CiAJCXNyYyA9IFRNUF9GUkVHMTsKIAl9CiAKLQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgRU1JVF9GUFVfT1BFUkFUSU9OKFZDVlRfUzMyX0YzMiwgb3AgJiBTTEpJVF9TSU5HTEVfT1AsIFRNUF9GUkVHMSwgc3JjLCAwKSkpOworCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBFTUlUX0ZQVV9PUEVSQVRJT04oVkNWVF9TMzJfRjMyLCBvcCAmIFNMSklUX0YzMl9PUCwgVE1QX0ZSRUcxLCBzcmMsIDApKSk7CiAKIAlpZiAoZHN0ID09IFNMSklUX1VOVVNFRCkKIAkJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CkBAIC0yMTI1LDExICsyMTI1LDExIEBACiAJcmV0dXJuIGVtaXRfZm9wX21lbShjb21waWxlciwgMCwgVE1QX0ZSRUcxLCBkc3QsIGRzdHcpOwogfQogCi1zdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X3NpIHNsaml0X2VtaXRfZm9wMV9jb252ZF9mcm9tdyhzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwKLQlzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsCi0Jc2xqaXRfc2kgc3JjLCBzbGppdF9zdyBzcmN3KQorc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9zMzIgc2xqaXRfZW1pdF9mb3AxX2NvbnZfZjY0X2Zyb21fc3coc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIG9wLAorCXNsaml0X3MzMiBkc3QsIHNsaml0X3N3IGRzdHcsCisJc2xqaXRfczMyIHNyYywgc2xqaXRfc3cgc3JjdykKIHsKLQlzbGppdF9zaSBkc3RfciA9IEZBU1RfSVNfUkVHKGRzdCkgPyBkc3QgOiBUTVBfRlJFRzE7CisJc2xqaXRfczMyIGRzdF9yID0gRkFTVF9JU19SRUcoZHN0KSA/IGRzdCA6IFRNUF9GUkVHMTsKIAogCWlmIChGQVNUX0lTX1JFRyhzcmMpKQogCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgVk1PViB8IFJEKHNyYykgfCAoVE1QX0ZSRUcxIDw8IDE2KSkpOwpAQCAtMjE0Miw4NSArMjE0Miw4NSBAQAogCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgVk1PViB8IFJEKFRNUF9SRUcxKSB8IChUTVBfRlJFRzEgPDwgMTYpKSk7CiAJfQogCi0JRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIEVNSVRfRlBVX09QRVJBVElPTihWQ1ZUX0YzMl9TMzIsIG9wICYgU0xKSVRfU0lOR0xFX09QLCBkc3RfciwgVE1QX0ZSRUcxLCAwKSkpOworCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBFTUlUX0ZQVV9PUEVSQVRJT04oVkNWVF9GMzJfUzMyLCBvcCAmIFNMSklUX0YzMl9PUCwgZHN0X3IsIFRNUF9GUkVHMSwgMCkpKTsKIAogCWlmIChkc3QgJiBTTEpJVF9NRU0pCi0JCXJldHVybiBlbWl0X2ZvcF9tZW0oY29tcGlsZXIsIChvcCAmIFNMSklUX1NJTkdMRV9PUCksIFRNUF9GUkVHMSwgZHN0LCBkc3R3KTsKKwkJcmV0dXJuIGVtaXRfZm9wX21lbShjb21waWxlciwgKG9wICYgU0xKSVRfRjMyX09QKSwgVE1QX0ZSRUcxLCBkc3QsIGRzdHcpOwogCXJldHVybiBTTEpJVF9TVUNDRVNTOwogfQogCi1zdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X3NpIHNsaml0X2VtaXRfZm9wMV9jbXAoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsCi0Jc2xqaXRfc2kgc3JjMSwgc2xqaXRfc3cgc3JjMXcsCi0Jc2xqaXRfc2kgc3JjMiwgc2xqaXRfc3cgc3JjMncpCitzdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X3MzMiBzbGppdF9lbWl0X2ZvcDFfY21wKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiBvcCwKKwlzbGppdF9zMzIgc3JjMSwgc2xqaXRfc3cgc3JjMXcsCisJc2xqaXRfczMyIHNyYzIsIHNsaml0X3N3IHNyYzJ3KQogewogCWlmIChzcmMxICYgU0xKSVRfTUVNKSB7Ci0JCUZBSUxfSUYoZW1pdF9mb3BfbWVtKGNvbXBpbGVyLCAob3AgJiBTTEpJVF9TSU5HTEVfT1ApIHwgRlBVX0xPQUQsIFRNUF9GUkVHMSwgc3JjMSwgc3JjMXcpKTsKKwkJRkFJTF9JRihlbWl0X2ZvcF9tZW0oY29tcGlsZXIsIChvcCAmIFNMSklUX0YzMl9PUCkgfCBGUFVfTE9BRCwgVE1QX0ZSRUcxLCBzcmMxLCBzcmMxdykpOwogCQlzcmMxID0gVE1QX0ZSRUcxOwogCX0KIAogCWlmIChzcmMyICYgU0xKSVRfTUVNKSB7Ci0JCUZBSUxfSUYoZW1pdF9mb3BfbWVtKGNvbXBpbGVyLCAob3AgJiBTTEpJVF9TSU5HTEVfT1ApIHwgRlBVX0xPQUQsIFRNUF9GUkVHMiwgc3JjMiwgc3JjMncpKTsKKwkJRkFJTF9JRihlbWl0X2ZvcF9tZW0oY29tcGlsZXIsIChvcCAmIFNMSklUX0YzMl9PUCkgfCBGUFVfTE9BRCwgVE1QX0ZSRUcyLCBzcmMyLCBzcmMydykpOwogCQlzcmMyID0gVE1QX0ZSRUcyOwogCX0KIAotCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBFTUlUX0ZQVV9PUEVSQVRJT04oVkNNUF9GMzIsIG9wICYgU0xKSVRfU0lOR0xFX09QLCBzcmMxLCBzcmMyLCAwKSkpOworCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBFTUlUX0ZQVV9PUEVSQVRJT04oVkNNUF9GMzIsIG9wICYgU0xKSVRfRjMyX09QLCBzcmMxLCBzcmMyLCAwKSkpOwogCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIFZNUlMpOwogfQogCi1TTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9mb3AxKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIG9wLAotCXNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dywKLQlzbGppdF9zaSBzcmMsIHNsaml0X3N3IHNyY3cpCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfczMyIHNsaml0X2VtaXRfZm9wMShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgb3AsCisJc2xqaXRfczMyIGRzdCwgc2xqaXRfc3cgZHN0dywKKwlzbGppdF9zMzIgc3JjLCBzbGppdF9zdyBzcmN3KQogewotCXNsaml0X3NpIGRzdF9yOworCXNsaml0X3MzMiBkc3RfcjsKIAogCUNIRUNLX0VSUk9SKCk7CiAJY29tcGlsZXItPmNhY2hlX2FyZyA9IDA7CiAJY29tcGlsZXItPmNhY2hlX2FyZ3cgPSAwOwotCWlmIChHRVRfT1BDT0RFKG9wKSAhPSBTTEpJVF9DT05WRF9GUk9NUykKLQkJb3AgXj0gU0xKSVRfU0lOR0xFX09QOworCWlmIChHRVRfT1BDT0RFKG9wKSAhPSBTTEpJVF9DT05WX0Y2NF9GUk9NX0YzMikKKwkJb3AgXj0gU0xKSVRfRjMyX09QOwogCi0JU0xKSVRfQ09NUElMRV9BU1NFUlQoKFNMSklUX1NJTkdMRV9PUCA9PSAweDEwMCksIGZsb2F0X3RyYW5zZmVyX2JpdF9lcnJvcik7CisJU0xKSVRfQ09NUElMRV9BU1NFUlQoKFNMSklUX0YzMl9PUCA9PSAweDEwMCksIGZsb2F0X3RyYW5zZmVyX2JpdF9lcnJvcik7CiAJU0VMRUNUX0ZPUDFfT1BFUkFUSU9OX1dJVEhfQ0hFQ0tTKGNvbXBpbGVyLCBvcCwgZHN0LCBkc3R3LCBzcmMsIHNyY3cpOwogCiAJZHN0X3IgPSBGQVNUX0lTX1JFRyhkc3QpID8gZHN0IDogVE1QX0ZSRUcxOwogCiAJaWYgKHNyYyAmIFNMSklUX01FTSkgewotCQlGQUlMX0lGKGVtaXRfZm9wX21lbShjb21waWxlciwgKG9wICYgU0xKSVRfU0lOR0xFX09QKSB8IEZQVV9MT0FELCBkc3Rfciwgc3JjLCBzcmN3KSk7CisJCUZBSUxfSUYoZW1pdF9mb3BfbWVtKGNvbXBpbGVyLCAob3AgJiBTTEpJVF9GMzJfT1ApIHwgRlBVX0xPQUQsIGRzdF9yLCBzcmMsIHNyY3cpKTsKIAkJc3JjID0gZHN0X3I7CiAJfQogCiAJc3dpdGNoIChHRVRfT1BDT0RFKG9wKSkgewotCWNhc2UgU0xKSVRfRE1PVjoKKwljYXNlIFNMSklUX01PVl9GNjQ6CiAJCWlmIChzcmMgIT0gZHN0X3IpIHsKIAkJCWlmIChkc3RfciAhPSBUTVBfRlJFRzEpCi0JCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIEVNSVRfRlBVX09QRVJBVElPTihWTU9WX0YzMiwgb3AgJiBTTEpJVF9TSU5HTEVfT1AsIGRzdF9yLCBzcmMsIDApKSk7CisJCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIEVNSVRfRlBVX09QRVJBVElPTihWTU9WX0YzMiwgb3AgJiBTTEpJVF9GMzJfT1AsIGRzdF9yLCBzcmMsIDApKSk7CiAJCQllbHNlCiAJCQkJZHN0X3IgPSBzcmM7CiAJCX0KIAkJYnJlYWs7Ci0JY2FzZSBTTEpJVF9ETkVHOgotCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgRU1JVF9GUFVfT1BFUkFUSU9OKFZORUdfRjMyLCBvcCAmIFNMSklUX1NJTkdMRV9PUCwgZHN0X3IsIHNyYywgMCkpKTsKKwljYXNlIFNMSklUX05FR19GNjQ6CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBFTUlUX0ZQVV9PUEVSQVRJT04oVk5FR19GMzIsIG9wICYgU0xKSVRfRjMyX09QLCBkc3Rfciwgc3JjLCAwKSkpOwogCQlicmVhazsKLQljYXNlIFNMSklUX0RBQlM6Ci0JCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBFTUlUX0ZQVV9PUEVSQVRJT04oVkFCU19GMzIsIG9wICYgU0xKSVRfU0lOR0xFX09QLCBkc3Rfciwgc3JjLCAwKSkpOworCWNhc2UgU0xKSVRfQUJTX0Y2NDoKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIEVNSVRfRlBVX09QRVJBVElPTihWQUJTX0YzMiwgb3AgJiBTTEpJVF9GMzJfT1AsIGRzdF9yLCBzcmMsIDApKSk7CiAJCWJyZWFrOwotCWNhc2UgU0xKSVRfQ09OVkRfRlJPTVM6Ci0JCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBFTUlUX0ZQVV9PUEVSQVRJT04oVkNWVF9GNjRfRjMyLCBvcCAmIFNMSklUX1NJTkdMRV9PUCwgZHN0X3IsIHNyYywgMCkpKTsKLQkJb3AgXj0gU0xKSVRfU0lOR0xFX09QOworCWNhc2UgU0xKSVRfQ09OVl9GNjRfRlJPTV9GMzI6CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBFTUlUX0ZQVV9PUEVSQVRJT04oVkNWVF9GNjRfRjMyLCBvcCAmIFNMSklUX0YzMl9PUCwgZHN0X3IsIHNyYywgMCkpKTsKKwkJb3AgXj0gU0xKSVRfRjMyX09QOwogCQlicmVhazsKIAl9CiAKIAlpZiAoZHN0ICYgU0xKSVRfTUVNKQotCQlyZXR1cm4gZW1pdF9mb3BfbWVtKGNvbXBpbGVyLCAob3AgJiBTTEpJVF9TSU5HTEVfT1ApLCBkc3RfciwgZHN0LCBkc3R3KTsKKwkJcmV0dXJuIGVtaXRfZm9wX21lbShjb21waWxlciwgKG9wICYgU0xKSVRfRjMyX09QKSwgZHN0X3IsIGRzdCwgZHN0dyk7CiAJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CiB9CiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X2ZvcDIoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsCi0Jc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3LAotCXNsaml0X3NpIHNyYzEsIHNsaml0X3N3IHNyYzF3LAotCXNsaml0X3NpIHNyYzIsIHNsaml0X3N3IHNyYzJ3KQorU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3MzMiBzbGppdF9lbWl0X2ZvcDIoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIG9wLAorCXNsaml0X3MzMiBkc3QsIHNsaml0X3N3IGRzdHcsCisJc2xqaXRfczMyIHNyYzEsIHNsaml0X3N3IHNyYzF3LAorCXNsaml0X3MzMiBzcmMyLCBzbGppdF9zdyBzcmMydykKIHsKLQlzbGppdF9zaSBkc3RfcjsKKwlzbGppdF9zMzIgZHN0X3I7CiAKIAlDSEVDS19FUlJPUigpOwogCUNIRUNLKGNoZWNrX3Nsaml0X2VtaXRfZm9wMihjb21waWxlciwgb3AsIGRzdCwgZHN0dywgc3JjMSwgc3JjMXcsIHNyYzIsIHNyYzJ3KSk7CkBAIC0yMjMwLDQwICsyMjMwLDQwIEBACiAKIAljb21waWxlci0+Y2FjaGVfYXJnID0gMDsKIAljb21waWxlci0+Y2FjaGVfYXJndyA9IDA7Ci0Jb3AgXj0gU0xKSVRfU0lOR0xFX09QOworCW9wIF49IFNMSklUX0YzMl9PUDsKIAogCWRzdF9yID0gRkFTVF9JU19SRUcoZHN0KSA/IGRzdCA6IFRNUF9GUkVHMTsKIAogCWlmIChzcmMyICYgU0xKSVRfTUVNKSB7Ci0JCUZBSUxfSUYoZW1pdF9mb3BfbWVtKGNvbXBpbGVyLCAob3AgJiBTTEpJVF9TSU5HTEVfT1ApIHwgRlBVX0xPQUQsIFRNUF9GUkVHMiwgc3JjMiwgc3JjMncpKTsKKwkJRkFJTF9JRihlbWl0X2ZvcF9tZW0oY29tcGlsZXIsIChvcCAmIFNMSklUX0YzMl9PUCkgfCBGUFVfTE9BRCwgVE1QX0ZSRUcyLCBzcmMyLCBzcmMydykpOwogCQlzcmMyID0gVE1QX0ZSRUcyOwogCX0KIAogCWlmIChzcmMxICYgU0xKSVRfTUVNKSB7Ci0JCUZBSUxfSUYoZW1pdF9mb3BfbWVtKGNvbXBpbGVyLCAob3AgJiBTTEpJVF9TSU5HTEVfT1ApIHwgRlBVX0xPQUQsIFRNUF9GUkVHMSwgc3JjMSwgc3JjMXcpKTsKKwkJRkFJTF9JRihlbWl0X2ZvcF9tZW0oY29tcGlsZXIsIChvcCAmIFNMSklUX0YzMl9PUCkgfCBGUFVfTE9BRCwgVE1QX0ZSRUcxLCBzcmMxLCBzcmMxdykpOwogCQlzcmMxID0gVE1QX0ZSRUcxOwogCX0KIAogCXN3aXRjaCAoR0VUX09QQ09ERShvcCkpIHsKLQljYXNlIFNMSklUX0RBREQ6Ci0JCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBFTUlUX0ZQVV9PUEVSQVRJT04oVkFERF9GMzIsIG9wICYgU0xKSVRfU0lOR0xFX09QLCBkc3Rfciwgc3JjMiwgc3JjMSkpKTsKKwljYXNlIFNMSklUX0FERF9GNjQ6CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBFTUlUX0ZQVV9PUEVSQVRJT04oVkFERF9GMzIsIG9wICYgU0xKSVRfRjMyX09QLCBkc3Rfciwgc3JjMiwgc3JjMSkpKTsKIAkJYnJlYWs7CiAKLQljYXNlIFNMSklUX0RTVUI6Ci0JCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBFTUlUX0ZQVV9PUEVSQVRJT04oVlNVQl9GMzIsIG9wICYgU0xKSVRfU0lOR0xFX09QLCBkc3Rfciwgc3JjMiwgc3JjMSkpKTsKKwljYXNlIFNMSklUX1NVQl9GNjQ6CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBFTUlUX0ZQVV9PUEVSQVRJT04oVlNVQl9GMzIsIG9wICYgU0xKSVRfRjMyX09QLCBkc3Rfciwgc3JjMiwgc3JjMSkpKTsKIAkJYnJlYWs7CiAKLQljYXNlIFNMSklUX0RNVUw6Ci0JCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBFTUlUX0ZQVV9PUEVSQVRJT04oVk1VTF9GMzIsIG9wICYgU0xKSVRfU0lOR0xFX09QLCBkc3Rfciwgc3JjMiwgc3JjMSkpKTsKKwljYXNlIFNMSklUX01VTF9GNjQ6CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBFTUlUX0ZQVV9PUEVSQVRJT04oVk1VTF9GMzIsIG9wICYgU0xKSVRfRjMyX09QLCBkc3Rfciwgc3JjMiwgc3JjMSkpKTsKIAkJYnJlYWs7CiAKLQljYXNlIFNMSklUX0RESVY6Ci0JCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBFTUlUX0ZQVV9PUEVSQVRJT04oVkRJVl9GMzIsIG9wICYgU0xKSVRfU0lOR0xFX09QLCBkc3Rfciwgc3JjMiwgc3JjMSkpKTsKKwljYXNlIFNMSklUX0RJVl9GNjQ6CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBFTUlUX0ZQVV9PUEVSQVRJT04oVkRJVl9GMzIsIG9wICYgU0xKSVRfRjMyX09QLCBkc3Rfciwgc3JjMiwgc3JjMSkpKTsKIAkJYnJlYWs7CiAJfQogCiAJaWYgKGRzdF9yID09IFRNUF9GUkVHMSkKLQkJRkFJTF9JRihlbWl0X2ZvcF9tZW0oY29tcGlsZXIsIChvcCAmIFNMSklUX1NJTkdMRV9PUCksIFRNUF9GUkVHMSwgZHN0LCBkc3R3KSk7CisJCUZBSUxfSUYoZW1pdF9mb3BfbWVtKGNvbXBpbGVyLCAob3AgJiBTTEpJVF9GMzJfT1ApLCBUTVBfRlJFRzEsIGRzdCwgZHN0dykpOwogCiAJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CiB9CkBAIC0yMjc2LDcgKzIyNzYsNyBAQAogLyogIE90aGVyIGluc3RydWN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfZmFzdF9lbnRlcihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcpCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfczMyIHNsaml0X2VtaXRfZmFzdF9lbnRlcihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgZHN0LCBzbGppdF9zdyBkc3R3KQogewogCUNIRUNLX0VSUk9SKCk7CiAJQ0hFQ0soY2hlY2tfc2xqaXRfZW1pdF9mYXN0X2VudGVyKGNvbXBpbGVyLCBkc3QsIGRzdHcpKTsKQEAgLTIyOTksNyArMjI5OSw3IEBACiAJcmV0dXJuIGdldHB1dF9hcmcoY29tcGlsZXIsIFdPUkRfREFUQSwgVE1QX1JFRzIsIGRzdCwgZHN0dywgMCwgMCk7CiB9CiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X2Zhc3RfcmV0dXJuKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIHNyYywgc2xqaXRfc3cgc3JjdykKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zMzIgc2xqaXRfZW1pdF9mYXN0X3JldHVybihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgc3JjLCBzbGppdF9zdyBzcmN3KQogewogCUNIRUNLX0VSUk9SKCk7CiAJQ0hFQ0soY2hlY2tfc2xqaXRfZW1pdF9mYXN0X3JldHVybihjb21waWxlciwgc3JjLCBzcmN3KSk7CkBAIC0yMzI2LDMzICsyMzI2LDMzIEBACiAvKiAgQ29uZGl0aW9uYWwgaW5zdHJ1Y3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgc2xqaXRfdXcgZ2V0X2NjKHNsaml0X3NpIHR5cGUpCitzdGF0aWMgc2xqaXRfdXcgZ2V0X2NjKHNsaml0X3MzMiB0eXBlKQogewogCXN3aXRjaCAodHlwZSkgewogCWNhc2UgU0xKSVRfRVFVQUw6CiAJY2FzZSBTTEpJVF9NVUxfTk9UX09WRVJGTE9XOgotCWNhc2UgU0xKSVRfRF9FUVVBTDoKKwljYXNlIFNMSklUX0VRVUFMX0Y2NDoKIAkJcmV0dXJuIDB4MDAwMDAwMDA7CiAKIAljYXNlIFNMSklUX05PVF9FUVVBTDoKIAljYXNlIFNMSklUX01VTF9PVkVSRkxPVzoKLQljYXNlIFNMSklUX0RfTk9UX0VRVUFMOgorCWNhc2UgU0xKSVRfTk9UX0VRVUFMX0Y2NDoKIAkJcmV0dXJuIDB4MTAwMDAwMDA7CiAKIAljYXNlIFNMSklUX0xFU1M6Ci0JY2FzZSBTTEpJVF9EX0xFU1M6CisJY2FzZSBTTEpJVF9MRVNTX0Y2NDoKIAkJcmV0dXJuIDB4MzAwMDAwMDA7CiAKIAljYXNlIFNMSklUX0dSRUFURVJfRVFVQUw6Ci0JY2FzZSBTTEpJVF9EX0dSRUFURVJfRVFVQUw6CisJY2FzZSBTTEpJVF9HUkVBVEVSX0VRVUFMX0Y2NDoKIAkJcmV0dXJuIDB4MjAwMDAwMDA7CiAKIAljYXNlIFNMSklUX0dSRUFURVI6Ci0JY2FzZSBTTEpJVF9EX0dSRUFURVI6CisJY2FzZSBTTEpJVF9HUkVBVEVSX0Y2NDoKIAkJcmV0dXJuIDB4ODAwMDAwMDA7CiAKIAljYXNlIFNMSklUX0xFU1NfRVFVQUw6Ci0JY2FzZSBTTEpJVF9EX0xFU1NfRVFVQUw6CisJY2FzZSBTTEpJVF9MRVNTX0VRVUFMX0Y2NDoKIAkJcmV0dXJuIDB4OTAwMDAwMDA7CiAKIAljYXNlIFNMSklUX1NJR19MRVNTOgpAQCAtMjM2OCwxMSArMjM2OCwxMSBAQAogCQlyZXR1cm4gMHhkMDAwMDAwMDsKIAogCWNhc2UgU0xKSVRfT1ZFUkZMT1c6Ci0JY2FzZSBTTEpJVF9EX1VOT1JERVJFRDoKKwljYXNlIFNMSklUX1VOT1JERVJFRF9GNjQ6CiAJCXJldHVybiAweDYwMDAwMDAwOwogCiAJY2FzZSBTTEpJVF9OT1RfT1ZFUkZMT1c6Ci0JY2FzZSBTTEpJVF9EX09SREVSRUQ6CisJY2FzZSBTTEpJVF9PUkRFUkVEX0Y2NDoKIAkJcmV0dXJuIDB4NzAwMDAwMDA7CiAKIAlkZWZhdWx0OgpAQCAtMjM5Nyw3ICsyMzk3LDcgQEAKIAlyZXR1cm4gbGFiZWw7CiB9CiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzdHJ1Y3Qgc2xqaXRfanVtcCogc2xqaXRfZW1pdF9qdW1wKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIHR5cGUpCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc3RydWN0IHNsaml0X2p1bXAqIHNsaml0X2VtaXRfanVtcChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgdHlwZSkKIHsKIAlzdHJ1Y3Qgc2xqaXRfanVtcCAqanVtcDsKIApAQCAtMjQzOCw3ICsyNDM4LDcgQEAKIAlyZXR1cm4ganVtcDsKIH0KIAotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfaWp1bXAoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgdHlwZSwgc2xqaXRfc2kgc3JjLCBzbGppdF9zdyBzcmN3KQorU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3MzMiBzbGppdF9lbWl0X2lqdW1wKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiB0eXBlLCBzbGppdF9zMzIgc3JjLCBzbGppdF9zdyBzcmN3KQogewogCXN0cnVjdCBzbGppdF9qdW1wICpqdW1wOwogCkBAIC0yNDc1LDEyICsyNDc1LDEyIEBACiAJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CiB9CiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X29wX2ZsYWdzKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIG9wLAotCXNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dywKLQlzbGppdF9zaSBzcmMsIHNsaml0X3N3IHNyY3csCi0Jc2xqaXRfc2kgdHlwZSkKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zMzIgc2xqaXRfZW1pdF9vcF9mbGFncyhzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgb3AsCisJc2xqaXRfczMyIGRzdCwgc2xqaXRfc3cgZHN0dywKKwlzbGppdF9zMzIgc3JjLCBzbGppdF9zdyBzcmN3LAorCXNsaml0X3MzMiB0eXBlKQogewotCXNsaml0X3NpIGRzdF9yLCBmbGFncyA9IEdFVF9BTExfRkxBR1Mob3ApOworCXNsaml0X3MzMiBkc3RfciwgZmxhZ3MgPSBHRVRfQUxMX0ZMQUdTKG9wKTsKIAlzbGppdF91dyBjYywgaW5zOwogCiAJQ0hFQ0tfRVJST1IoKTsKQEAgLTI1MjgsMTAgKzI1MjgsMTAgQEAKIAlyZXR1cm4gKGZsYWdzICYgU0xKSVRfU0VUX0UpID8gcHVzaF9pbnN0KGNvbXBpbGVyLCBFTUlUX0RBVEFfUFJPQ0VTU19JTlMoTU9WX0RQLCBTRVRfRkxBR1MsIFRNUF9SRUcxLCBTTEpJVF9VTlVTRUQsIFJNKGRzdF9yKSkpIDogU0xKSVRfU1VDQ0VTUzsKIH0KIAotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHN0cnVjdCBzbGppdF9jb25zdCogc2xqaXRfZW1pdF9jb25zdChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsIHNsaml0X3N3IGluaXRfdmFsdWUpCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc3RydWN0IHNsaml0X2NvbnN0KiBzbGppdF9lbWl0X2NvbnN0KHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiBkc3QsIHNsaml0X3N3IGRzdHcsIHNsaml0X3N3IGluaXRfdmFsdWUpCiB7CiAJc3RydWN0IHNsaml0X2NvbnN0ICpjb25zdF87Ci0Jc2xqaXRfc2kgcmVnOworCXNsaml0X3MzMiByZWc7CiAKIAlDSEVDS19FUlJPUl9QVFIoKTsKIAlDSEVDS19QVFIoY2hlY2tfc2xqaXRfZW1pdF9jb25zdChjb21waWxlciwgZHN0LCBkc3R3LCBpbml0X3ZhbHVlKSk7CmRpZmYgLS1naXQgYS9kaXN0Mi9zcmMvc2xqaXQvc2xqaXROYXRpdmVBUk1fNjQuYyBiL2Rpc3QyL3NyYy9zbGppdC9zbGppdE5hdGl2ZUFSTV82NC5jCmluZGV4IDA0NGE2NzUuLmQ5OTU4NTEgMTAwNjQ0Ci0tLSBhL2Rpc3QyL3NyYy9zbGppdC9zbGppdE5hdGl2ZUFSTV82NC5jCisrKyBiL2Rpc3QyL3NyYy9zbGppdC9zbGppdE5hdGl2ZUFSTV82NC5jCkBAIC0yNCwxMyArMjQsMTMgQEAKICAqIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi1TTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgU0xKSVRfQ09OU1QgY2hhciogc2xqaXRfZ2V0X3BsYXRmb3JtX25hbWUodm9pZCkKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBjb25zdCBjaGFyKiBzbGppdF9nZXRfcGxhdGZvcm1fbmFtZSh2b2lkKQogewogCXJldHVybiAiQVJNLTY0IiBTTEpJVF9DUFVJTkZPOwogfQogCiAvKiBMZW5ndGggb2YgYW4gaW5zdHJ1Y3Rpb24gd29yZCAqLwotdHlwZWRlZiBzbGppdF91aSBzbGppdF9pbnM7Cit0eXBlZGVmIHNsaml0X3UzMiBzbGppdF9pbnM7CiAKICNkZWZpbmUgVE1QX1pFUk8JKDApCiAKQEAgLTQzLDcgKzQzLDcgQEAKICNkZWZpbmUgVE1QX0ZSRUcxCSgwKQogI2RlZmluZSBUTVBfRlJFRzIJKFNMSklUX05VTUJFUl9PRl9GTE9BVF9SRUdJU1RFUlMgKyAxKQogCi1zdGF0aWMgU0xKSVRfQ09OU1Qgc2xqaXRfdWIgcmVnX21hcFtTTEpJVF9OVU1CRVJfT0ZfUkVHSVNURVJTICsgOF0gPSB7CitzdGF0aWMgY29uc3Qgc2xqaXRfdTggcmVnX21hcFtTTEpJVF9OVU1CRVJfT0ZfUkVHSVNURVJTICsgOF0gPSB7CiAgIDMxLCAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCAxMiwgMTMsIDE0LCAxNSwgMTYsIDE3LCA4LCAyOCwgMjcsIDI2LCAyNSwgMjQsIDIzLCAyMiwgMjEsIDIwLCAxOSwgMjksIDksIDEwLCAxMSwgMzAsIDMxCiB9OwogCkBAIC0xMjQsNyArMTI0LDcgQEAKIAogLyogZGVzdF9yZWcgaXMgdGhlIGFic29sdXRlIG5hbWUgb2YgdGhlIHJlZ2lzdGVyCiAgICBVc2VmdWwgZm9yIHJlb3JkZXJpbmcgaW5zdHJ1Y3Rpb25zIGluIHRoZSBkZWxheSBzbG90LiAqLwotc3RhdGljIHNsaml0X3NpIHB1c2hfaW5zdChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9pbnMgaW5zKQorc3RhdGljIHNsaml0X3MzMiBwdXNoX2luc3Qoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfaW5zIGlucykKIHsKIAlzbGppdF9pbnMgKnB0ciA9IChzbGppdF9pbnMqKWVuc3VyZV9idWYoY29tcGlsZXIsIHNpemVvZihzbGppdF9pbnMpKTsKIAlGQUlMX0lGKCFwdHIpOwpAQCAtMTMzLDcgKzEzMyw3IEBACiAJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBTTEpJVF9JTkxJTkUgc2xqaXRfc2kgZW1pdF9pbW02NF9jb25zdChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBkc3QsIHNsaml0X3V3IGltbSkKK3N0YXRpYyBTTEpJVF9JTkxJTkUgc2xqaXRfczMyIGVtaXRfaW1tNjRfY29uc3Qoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIGRzdCwgc2xqaXRfdXcgaW1tKQogewogCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBNT1ZaIHwgUkQoZHN0KSB8ICgoaW1tICYgMHhmZmZmKSA8PCA1KSkpOwogCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBNT1ZLIHwgUkQoZHN0KSB8ICgoKGltbSA+PiAxNikgJiAweGZmZmYpIDw8IDUpIHwgKDEgPDwgMjEpKSk7CkBAIC0xNDMsNyArMTQzLDcgQEAKIAogc3RhdGljIFNMSklUX0lOTElORSB2b2lkIG1vZGlmeV9pbW02NF9jb25zdChzbGppdF9pbnMqIGluc3QsIHNsaml0X3V3IG5ld19pbW0pCiB7Ci0Jc2xqaXRfc2kgZHN0ID0gaW5zdFswXSAmIDB4MWY7CisJc2xqaXRfczMyIGRzdCA9IGluc3RbMF0gJiAweDFmOwogCVNMSklUX0FTU0VSVCgoaW5zdFswXSAmIDB4ZmZlMDAwMDApID09IE1PVlogJiYgKGluc3RbMV0gJiAweGZmZTAwMDAwKSA9PSAoTU9WSyB8ICgxIDw8IDIxKSkpOwogCWluc3RbMF0gPSBNT1ZaIHwgZHN0IHwgKChuZXdfaW1tICYgMHhmZmZmKSA8PCA1KTsKIAlpbnN0WzFdID0gTU9WSyB8IGRzdCB8ICgoKG5ld19pbW0gPj4gMTYpICYgMHhmZmZmKSA8PCA1KSB8ICgxIDw8IDIxKTsKQEAgLTE1MSw3ICsxNTEsNyBAQAogCWluc3RbM10gPSBNT1ZLIHwgZHN0IHwgKChuZXdfaW1tID4+IDQ4KSA8PCA1KSB8ICgzIDw8IDIxKTsKIH0KIAotc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9zaSBkZXRlY3RfanVtcF90eXBlKHN0cnVjdCBzbGppdF9qdW1wICpqdW1wLCBzbGppdF9pbnMgKmNvZGVfcHRyLCBzbGppdF9pbnMgKmNvZGUpCitzdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X3MzMiBkZXRlY3RfanVtcF90eXBlKHN0cnVjdCBzbGppdF9qdW1wICpqdW1wLCBzbGppdF9pbnMgKmNvZGVfcHRyLCBzbGppdF9pbnMgKmNvZGUpCiB7CiAJc2xqaXRfc3cgZGlmZjsKIAlzbGppdF91dyB0YXJnZXRfYWRkcjsKQEAgLTIxMiw3ICsyMTIsNyBAQAogCXNsaml0X2lucyAqYnVmX2VuZDsKIAlzbGppdF91dyB3b3JkX2NvdW50OwogCXNsaml0X3V3IGFkZHI7Ci0Jc2xqaXRfc2kgZHN0OworCXNsaml0X3MzMiBkc3Q7CiAKIAlzdHJ1Y3Qgc2xqaXRfbGFiZWwgKmxhYmVsOwogCXN0cnVjdCBzbGppdF9qdW1wICpqdW1wOwpAQCAtMzQ2LDkgKzM0Niw5IEBACiAKICNkZWZpbmUgTE9HSUNBTF9JTU1fQ0hFQ0sgMHgxMDAKIAotc3RhdGljIHNsaml0X2lucyBsb2dpY2FsX2ltbShzbGppdF9zdyBpbW0sIHNsaml0X3NpIGxlbikKK3N0YXRpYyBzbGppdF9pbnMgbG9naWNhbF9pbW0oc2xqaXRfc3cgaW1tLCBzbGppdF9zMzIgbGVuKQogewotCXNsaml0X3NpIG5lZ2F0ZWQsIG9uZXMsIHJpZ2h0OworCXNsaml0X3MzMiBuZWdhdGVkLCBvbmVzLCByaWdodDsKIAlzbGppdF91dyBtYXNrLCB1aW1tOwogCXNsaml0X2lucyBpbnM7CiAKQEAgLTM1NiwxMiArMzU2LDEyIEBACiAJCWxlbiAmPSB+TE9HSUNBTF9JTU1fQ0hFQ0s7CiAJCWlmIChsZW4gPT0gMzIgJiYgKGltbSA9PSAwIHx8IGltbSA9PSAtMSkpCiAJCQlyZXR1cm4gMDsKLQkJaWYgKGxlbiA9PSAxNiAmJiAoKHNsaml0X3NpKWltbSA9PSAwIHx8IChzbGppdF9zaSlpbW0gPT0gLTEpKQorCQlpZiAobGVuID09IDE2ICYmICgoc2xqaXRfczMyKWltbSA9PSAwIHx8IChzbGppdF9zMzIpaW1tID09IC0xKSkKIAkJCXJldHVybiAwOwogCX0KIAogCVNMSklUX0FTU0VSVCgobGVuID09IDMyICYmIGltbSAhPSAwICYmIGltbSAhPSAtMSkKLQkJfHwgKGxlbiA9PSAxNiAmJiAoc2xqaXRfc2kpaW1tICE9IDAgJiYgKHNsaml0X3NpKWltbSAhPSAtMSkpOworCQl8fCAobGVuID09IDE2ICYmIChzbGppdF9zMzIpaW1tICE9IDAgJiYgKHNsaml0X3MzMilpbW0gIT0gLTEpKTsKIAl1aW1tID0gKHNsaml0X3V3KWltbTsKIAl3aGlsZSAoMSkgewogCQlpZiAobGVuIDw9IDApIHsKQEAgLTQxMCwxMCArNDEwLDEwIEBACiAKICN1bmRlZiBDT1VOVF9UUkFJTElOR19aRVJPCiAKLXN0YXRpYyBzbGppdF9zaSBsb2FkX2ltbWVkaWF0ZShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBkc3QsIHNsaml0X3N3IHNpbW0pCitzdGF0aWMgc2xqaXRfczMyIGxvYWRfaW1tZWRpYXRlKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiBkc3QsIHNsaml0X3N3IHNpbW0pCiB7CiAJc2xqaXRfdXcgaW1tID0gKHNsaml0X3V3KXNpbW07Ci0Jc2xqaXRfc2kgaSwgemVyb3MsIG9uZXMsIGZpcnN0OworCXNsaml0X3MzMiBpLCB6ZXJvcywgb25lcywgZmlyc3Q7CiAJc2xqaXRfaW5zIGJpdG1hc2s7CiAKIAlpZiAoaW1tIDw9IDB4ZmZmZikKQEAgLTUxMiwxNSArNTEyLDE1IEBACiAJCQlkc3QgPSBUTVBfWkVSTzsgXAogCX0KIAotc3RhdGljIHNsaml0X3NpIGVtaXRfb3BfaW1tKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIGZsYWdzLCBzbGppdF9zaSBkc3QsIHNsaml0X3N3IGFyZzEsIHNsaml0X3N3IGFyZzIpCitzdGF0aWMgc2xqaXRfczMyIGVtaXRfb3BfaW1tKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiBmbGFncywgc2xqaXRfczMyIGRzdCwgc2xqaXRfc3cgYXJnMSwgc2xqaXRfc3cgYXJnMikKIHsKIAkvKiBkc3QgbXVzdCBiZSByZWdpc3RlciwgVE1QX1JFRzEKIAkgICBhcmcxIG11c3QgYmUgcmVnaXN0ZXIsIFRNUF9SRUcxLCBpbW0KIAkgICBhcmcyIG11c3QgYmUgcmVnaXN0ZXIsIFRNUF9SRUcyLCBpbW0gKi8KIAlzbGppdF9pbnMgaW52X2JpdHMgPSAoZmxhZ3MgJiBJTlRfT1ApID8gKDEgPDwgMzEpIDogMDsKIAlzbGppdF9pbnMgaW5zdF9iaXRzOwotCXNsaml0X3NpIG9wID0gKGZsYWdzICYgMHhmZmZmKTsKLQlzbGppdF9zaSByZWc7CisJc2xqaXRfczMyIG9wID0gKGZsYWdzICYgMHhmZmZmKTsKKwlzbGppdF9zMzIgcmVnOwogCXNsaml0X3N3IGltbSwgbmltbTsKIAogCWlmIChTTEpJVF9VTkxJS0VMWSgoZmxhZ3MgJiAoQVJHMV9JTU0gfCBBUkcyX0lNTSkpID09IChBUkcxX0lNTSB8IEFSRzJfSU1NKSkpIHsKQEAgLTY2NywzNCArNjY3LDM0IEBACiAJCWlmIChkc3QgPT0gYXJnMikKIAkJCXJldHVybiBTTEpJVF9TVUNDRVNTOwogCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBPUlIgfCBSRChkc3QpIHwgUk4oVE1QX1pFUk8pIHwgUk0oYXJnMikpOwotCWNhc2UgU0xKSVRfTU9WX1VCOgotCWNhc2UgU0xKSVRfTU9WVV9VQjoKKwljYXNlIFNMSklUX01PVl9VODoKKwljYXNlIFNMSklUX01PVlVfVTg6CiAJCVNMSklUX0FTU0VSVCghKGZsYWdzICYgU0VUX0ZMQUdTKSAmJiBhcmcxID09IFRNUF9SRUcxKTsKIAkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgKFVCRk0gXiAoMSA8PCAzMSkpIHwgUkQoZHN0KSB8IFJOKGFyZzIpIHwgKDcgPDwgMTApKTsKLQljYXNlIFNMSklUX01PVl9TQjoKLQljYXNlIFNMSklUX01PVlVfU0I6CisJY2FzZSBTTEpJVF9NT1ZfUzg6CisJY2FzZSBTTEpJVF9NT1ZVX1M4OgogCQlTTEpJVF9BU1NFUlQoIShmbGFncyAmIFNFVF9GTEFHUykgJiYgYXJnMSA9PSBUTVBfUkVHMSk7CiAJCWlmICghKGZsYWdzICYgSU5UX09QKSkKIAkJCWludl9iaXRzIHw9IDEgPDwgMjI7CiAJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIChTQkZNIF4gaW52X2JpdHMpIHwgUkQoZHN0KSB8IFJOKGFyZzIpIHwgKDcgPDwgMTApKTsKLQljYXNlIFNMSklUX01PVl9VSDoKLQljYXNlIFNMSklUX01PVlVfVUg6CisJY2FzZSBTTEpJVF9NT1ZfVTE2OgorCWNhc2UgU0xKSVRfTU9WVV9VMTY6CiAJCVNMSklUX0FTU0VSVCghKGZsYWdzICYgU0VUX0ZMQUdTKSAmJiBhcmcxID09IFRNUF9SRUcxKTsKIAkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgKFVCRk0gXiAoMSA8PCAzMSkpIHwgUkQoZHN0KSB8IFJOKGFyZzIpIHwgKDE1IDw8IDEwKSk7Ci0JY2FzZSBTTEpJVF9NT1ZfU0g6Ci0JY2FzZSBTTEpJVF9NT1ZVX1NIOgorCWNhc2UgU0xKSVRfTU9WX1MxNjoKKwljYXNlIFNMSklUX01PVlVfUzE2OgogCQlTTEpJVF9BU1NFUlQoIShmbGFncyAmIFNFVF9GTEFHUykgJiYgYXJnMSA9PSBUTVBfUkVHMSk7CiAJCWlmICghKGZsYWdzICYgSU5UX09QKSkKIAkJCWludl9iaXRzIHw9IDEgPDwgMjI7CiAJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIChTQkZNIF4gaW52X2JpdHMpIHwgUkQoZHN0KSB8IFJOKGFyZzIpIHwgKDE1IDw8IDEwKSk7Ci0JY2FzZSBTTEpJVF9NT1ZfVUk6Ci0JY2FzZSBTTEpJVF9NT1ZVX1VJOgorCWNhc2UgU0xKSVRfTU9WX1UzMjoKKwljYXNlIFNMSklUX01PVlVfVTMyOgogCQlTTEpJVF9BU1NFUlQoIShmbGFncyAmIFNFVF9GTEFHUykgJiYgYXJnMSA9PSBUTVBfUkVHMSk7CiAJCWlmICgoZmxhZ3MgJiBJTlRfT1ApICYmIGRzdCA9PSBhcmcyKQogCQkJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CiAJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIChPUlIgXiAoMSA8PCAzMSkpIHwgUkQoZHN0KSB8IFJOKFRNUF9aRVJPKSB8IFJNKGFyZzIpKTsKLQljYXNlIFNMSklUX01PVl9TSToKLQljYXNlIFNMSklUX01PVlVfU0k6CisJY2FzZSBTTEpJVF9NT1ZfUzMyOgorCWNhc2UgU0xKSVRfTU9WVV9TMzI6CiAJCVNMSklUX0FTU0VSVCghKGZsYWdzICYgU0VUX0ZMQUdTKSAmJiBhcmcxID09IFRNUF9SRUcxKTsKIAkJaWYgKChmbGFncyAmIElOVF9PUCkgJiYgZHN0ID09IGFyZzIpCiAJCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKQEAgLTc3NywyOCArNzc3LDI4IEBACiAKICNkZWZpbmUgTUVNX1NJWkVfU0hJRlQoZmxhZ3MpICgoZmxhZ3MpID4+IDgpCiAKLXN0YXRpYyBTTEpJVF9DT05TVCBzbGppdF9pbnMgc2xqaXRfbWVtX2ltbVs0XSA9IHsKK3N0YXRpYyBjb25zdCBzbGppdF9pbnMgc2xqaXRfbWVtX2ltbVs0XSA9IHsKIC8qIHUgbCAqLyAweDM5NDAwMDAwIC8qIGxkcmIgW3JlZyxpbW1dICovLAogLyogdSBzICovIDB4MzkwMDAwMDAgLyogc3RyYiBbcmVnLGltbV0gKi8sCiAvKiBzIGwgKi8gMHgzOTgwMDAwMCAvKiBsZHJzYiBbcmVnLGltbV0gKi8sCiAvKiBzIHMgKi8gMHgzOTAwMDAwMCAvKiBzdHJiIFtyZWcsaW1tXSAqLywKIH07CiAKLXN0YXRpYyBTTEpJVF9DT05TVCBzbGppdF9pbnMgc2xqaXRfbWVtX3NpbW1bNF0gPSB7CitzdGF0aWMgY29uc3Qgc2xqaXRfaW5zIHNsaml0X21lbV9zaW1tWzRdID0gewogLyogdSBsICovIDB4Mzg0MDAwMDAgLyogbGR1cmIgW3JlZyxpbW1dICovLAogLyogdSBzICovIDB4MzgwMDAwMDAgLyogc3R1cmIgW3JlZyxpbW1dICovLAogLyogcyBsICovIDB4Mzg4MDAwMDAgLyogbGR1cnNiIFtyZWcsaW1tXSAqLywKIC8qIHMgcyAqLyAweDM4MDAwMDAwIC8qIHN0dXJiIFtyZWcsaW1tXSAqLywKIH07CiAKLXN0YXRpYyBTTEpJVF9DT05TVCBzbGppdF9pbnMgc2xqaXRfbWVtX3ByZV9zaW1tWzRdID0geworc3RhdGljIGNvbnN0IHNsaml0X2lucyBzbGppdF9tZW1fcHJlX3NpbW1bNF0gPSB7CiAvKiB1IGwgKi8gMHgzODQwMGMwMCAvKiBsZHJiIFtyZWcsaW1tXSEgKi8sCiAvKiB1IHMgKi8gMHgzODAwMGMwMCAvKiBzdHJiIFtyZWcsaW1tXSEgKi8sCiAvKiBzIGwgKi8gMHgzODgwMGMwMCAvKiBsZHJzYiBbcmVnLGltbV0hICovLAogLyogcyBzICovIDB4MzgwMDBjMDAgLyogc3RyYiBbcmVnLGltbV0hICovLAogfTsKIAotc3RhdGljIFNMSklUX0NPTlNUIHNsaml0X2lucyBzbGppdF9tZW1fcmVnWzRdID0geworc3RhdGljIGNvbnN0IHNsaml0X2lucyBzbGppdF9tZW1fcmVnWzRdID0gewogLyogdSBsICovIDB4Mzg2MDY4MDAgLyogbGRyYiBbcmVnLHJlZ10gKi8sCiAvKiB1IHMgKi8gMHgzODIwNjgwMCAvKiBzdHJiIFtyZWcscmVnXSAqLywKIC8qIHMgbCAqLyAweDM4YTA2ODAwIC8qIGxkcnNiIFtyZWcscmVnXSAqLywKQEAgLTgwNiw3ICs4MDYsNyBAQAogfTsKIAogLyogSGVscGVyIGZ1bmN0aW9uLiBEc3Qgc2hvdWxkIGJlIHJlZyArIHZhbHVlLCB1c2luZyBhdCBtb3N0IDEgaW5zdHJ1Y3Rpb24sIGZsYWdzIGRvZXMgbm90IHNldC4gKi8KLXN0YXRpYyBzbGppdF9zaSBlbWl0X3NldF9kZWx0YShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBkc3QsIHNsaml0X3NpIHJlZywgc2xqaXRfc3cgdmFsdWUpCitzdGF0aWMgc2xqaXRfczMyIGVtaXRfc2V0X2RlbHRhKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiBkc3QsIHNsaml0X3MzMiByZWcsIHNsaml0X3N3IHZhbHVlKQogewogCWlmICh2YWx1ZSA+PSAwKSB7CiAJCWlmICh2YWx1ZSA8PSAweGZmZikKQEAgLTgyNSw5ICs4MjUsOSBAQAogfQogCiAvKiBDYW4gcGVyZm9ybSBhbiBvcGVyYXRpb24gdXNpbmcgYXQgbW9zdCAxIGluc3RydWN0aW9uLiAqLwotc3RhdGljIHNsaml0X3NpIGdldHB1dF9hcmdfZmFzdChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBmbGFncywgc2xqaXRfc2kgcmVnLCBzbGppdF9zaSBhcmcsIHNsaml0X3N3IGFyZ3cpCitzdGF0aWMgc2xqaXRfczMyIGdldHB1dF9hcmdfZmFzdChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgZmxhZ3MsIHNsaml0X3MzMiByZWcsIHNsaml0X3MzMiBhcmcsIHNsaml0X3N3IGFyZ3cpCiB7Ci0Jc2xqaXRfdWkgc2hpZnQgPSBNRU1fU0laRV9TSElGVChmbGFncyk7CisJc2xqaXRfdTMyIHNoaWZ0ID0gTUVNX1NJWkVfU0hJRlQoZmxhZ3MpOwogCiAJU0xKSVRfQVNTRVJUKGFyZyAmIFNMSklUX01FTSk7CiAKQEAgLTg4Miw3ICs4ODIsNyBAQAogLyogc2VlIGdldHB1dF9hcmcgYmVsb3cuCiAgICBOb3RlOiBjYW5fY2FjaGUgaXMgY2FsbGVkIG9ubHkgZm9yIGJpbmFyeSBvcGVyYXRvcnMuIFRob3NlCiAgICBvcGVyYXRvcnMgYWx3YXlzIHVzZXMgd29yZCBhcmd1bWVudHMgd2l0aG91dCB3cml0ZSBiYWNrLiAqLwotc3RhdGljIHNsaml0X3NpIGNhbl9jYWNoZShzbGppdF9zaSBhcmcsIHNsaml0X3N3IGFyZ3csIHNsaml0X3NpIG5leHRfYXJnLCBzbGppdF9zdyBuZXh0X2FyZ3cpCitzdGF0aWMgc2xqaXRfczMyIGNhbl9jYWNoZShzbGppdF9zMzIgYXJnLCBzbGppdF9zdyBhcmd3LCBzbGppdF9zMzIgbmV4dF9hcmcsIHNsaml0X3N3IG5leHRfYXJndykKIHsKIAlzbGppdF9zdyBkaWZmOwogCWlmICgoYXJnICYgT0ZGU19SRUdfTUFTSykgfHwgIShuZXh0X2FyZyAmIFNMSklUX01FTSkpCkBAIC05MDYsMTEgKzkwNiwxMSBAQAogfQogCiAvKiBFbWl0IHRoZSBuZWNlc3NhcnkgaW5zdHJ1Y3Rpb25zLiBTZWUgY2FuX2NhY2hlIGFib3ZlLiAqLwotc3RhdGljIHNsaml0X3NpIGdldHB1dF9hcmcoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgZmxhZ3MsIHNsaml0X3NpIHJlZywKLQlzbGppdF9zaSBhcmcsIHNsaml0X3N3IGFyZ3csIHNsaml0X3NpIG5leHRfYXJnLCBzbGppdF9zdyBuZXh0X2FyZ3cpCitzdGF0aWMgc2xqaXRfczMyIGdldHB1dF9hcmcoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIGZsYWdzLCBzbGppdF9zMzIgcmVnLAorCXNsaml0X3MzMiBhcmcsIHNsaml0X3N3IGFyZ3csIHNsaml0X3MzMiBuZXh0X2FyZywgc2xqaXRfc3cgbmV4dF9hcmd3KQogewotCXNsaml0X3VpIHNoaWZ0ID0gTUVNX1NJWkVfU0hJRlQoZmxhZ3MpOwotCXNsaml0X3NpIHRtcF9yLCBvdGhlcl9yOworCXNsaml0X3UzMiBzaGlmdCA9IE1FTV9TSVpFX1NISUZUKGZsYWdzKTsKKwlzbGppdF9zMzIgdG1wX3IsIG90aGVyX3I7CiAJc2xqaXRfc3cgZGlmZjsKIAogCVNMSklUX0FTU0VSVChhcmcgJiBTTEpJVF9NRU0pOwpAQCAtMTA0MCw3ICsxMDQwLDcgQEAKIAlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBzbGppdF9tZW1faW1tW2ZsYWdzICYgMHgzXSB8IChzaGlmdCA8PCAzMCkgfCBSVChyZWcpIHwgUk4oVE1QX1JFRzMpKTsKIH0KIAotc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9zaSBlbWl0X29wX21lbShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBmbGFncywgc2xqaXRfc2kgcmVnLCBzbGppdF9zaSBhcmcsIHNsaml0X3N3IGFyZ3cpCitzdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X3MzMiBlbWl0X29wX21lbShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgZmxhZ3MsIHNsaml0X3MzMiByZWcsIHNsaml0X3MzMiBhcmcsIHNsaml0X3N3IGFyZ3cpCiB7CiAJaWYgKGdldHB1dF9hcmdfZmFzdChjb21waWxlciwgZmxhZ3MsIHJlZywgYXJnLCBhcmd3KSkKIAkJcmV0dXJuIGNvbXBpbGVyLT5lcnJvcjsKQEAgLTEwNDksNyArMTA0OSw3IEBACiAJcmV0dXJuIGdldHB1dF9hcmcoY29tcGlsZXIsIGZsYWdzLCByZWcsIGFyZywgYXJndywgMCwgMCk7CiB9CiAKLXN0YXRpYyBTTEpJVF9JTkxJTkUgc2xqaXRfc2kgZW1pdF9vcF9tZW0yKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIGZsYWdzLCBzbGppdF9zaSByZWcsIHNsaml0X3NpIGFyZzEsIHNsaml0X3N3IGFyZzF3LCBzbGppdF9zaSBhcmcyLCBzbGppdF9zdyBhcmcydykKK3N0YXRpYyBTTEpJVF9JTkxJTkUgc2xqaXRfczMyIGVtaXRfb3BfbWVtMihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgZmxhZ3MsIHNsaml0X3MzMiByZWcsIHNsaml0X3MzMiBhcmcxLCBzbGppdF9zdyBhcmcxdywgc2xqaXRfczMyIGFyZzIsIHNsaml0X3N3IGFyZzJ3KQogewogCWlmIChnZXRwdXRfYXJnX2Zhc3QoY29tcGlsZXIsIGZsYWdzLCByZWcsIGFyZzEsIGFyZzF3KSkKIAkJcmV0dXJuIGNvbXBpbGVyLT5lcnJvcjsKQEAgLTEwNjAsMTEgKzEwNjAsMTEgQEAKIC8qICBFbnRyeSwgZXhpdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X2VudGVyKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsCi0Jc2xqaXRfc2kgb3B0aW9ucywgc2xqaXRfc2kgYXJncywgc2xqaXRfc2kgc2NyYXRjaGVzLCBzbGppdF9zaSBzYXZlZHMsCi0Jc2xqaXRfc2kgZnNjcmF0Y2hlcywgc2xqaXRfc2kgZnNhdmVkcywgc2xqaXRfc2kgbG9jYWxfc2l6ZSkKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zMzIgc2xqaXRfZW1pdF9lbnRlcihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLAorCXNsaml0X3MzMiBvcHRpb25zLCBzbGppdF9zMzIgYXJncywgc2xqaXRfczMyIHNjcmF0Y2hlcywgc2xqaXRfczMyIHNhdmVkcywKKwlzbGppdF9zMzIgZnNjcmF0Y2hlcywgc2xqaXRfczMyIGZzYXZlZHMsIHNsaml0X3MzMiBsb2NhbF9zaXplKQogewotCXNsaml0X3NpIGksIHRtcCwgb2ZmcywgcHJldiwgc2F2ZWRfcmVnc19zaXplOworCXNsaml0X3MzMiBpLCB0bXAsIG9mZnMsIHByZXYsIHNhdmVkX3JlZ3Nfc2l6ZTsKIAogCUNIRUNLX0VSUk9SKCk7CiAJQ0hFQ0soY2hlY2tfc2xqaXRfZW1pdF9lbnRlcihjb21waWxlciwgb3B0aW9ucywgYXJncywgc2NyYXRjaGVzLCBzYXZlZHMsIGZzY3JhdGNoZXMsIGZzYXZlZHMsIGxvY2FsX3NpemUpKTsKQEAgLTExNDgsOSArMTE0OCw5IEBACiAJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CiB9CiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9zZXRfY29udGV4dChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLAotCXNsaml0X3NpIG9wdGlvbnMsIHNsaml0X3NpIGFyZ3MsIHNsaml0X3NpIHNjcmF0Y2hlcywgc2xqaXRfc2kgc2F2ZWRzLAotCXNsaml0X3NpIGZzY3JhdGNoZXMsIHNsaml0X3NpIGZzYXZlZHMsIHNsaml0X3NpIGxvY2FsX3NpemUpCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfczMyIHNsaml0X3NldF9jb250ZXh0KHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsCisJc2xqaXRfczMyIG9wdGlvbnMsIHNsaml0X3MzMiBhcmdzLCBzbGppdF9zMzIgc2NyYXRjaGVzLCBzbGppdF9zMzIgc2F2ZWRzLAorCXNsaml0X3MzMiBmc2NyYXRjaGVzLCBzbGppdF9zMzIgZnNhdmVkcywgc2xqaXRfczMyIGxvY2FsX3NpemUpCiB7CiAJQ0hFQ0tfRVJST1IoKTsKIAlDSEVDSyhjaGVja19zbGppdF9zZXRfY29udGV4dChjb21waWxlciwgb3B0aW9ucywgYXJncywgc2NyYXRjaGVzLCBzYXZlZHMsIGZzY3JhdGNoZXMsIGZzYXZlZHMsIGxvY2FsX3NpemUpKTsKQEAgLTExNjIsMTAgKzExNjIsMTAgQEAKIAlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKIH0KIAotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfcmV0dXJuKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIG9wLCBzbGppdF9zaSBzcmMsIHNsaml0X3N3IHNyY3cpCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfczMyIHNsaml0X2VtaXRfcmV0dXJuKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiBvcCwgc2xqaXRfczMyIHNyYywgc2xqaXRfc3cgc3JjdykKIHsKLQlzbGppdF9zaSBsb2NhbF9zaXplOwotCXNsaml0X3NpIGksIHRtcCwgb2ZmcywgcHJldiwgc2F2ZWRfcmVnc19zaXplOworCXNsaml0X3MzMiBsb2NhbF9zaXplOworCXNsaml0X3MzMiBpLCB0bXAsIG9mZnMsIHByZXYsIHNhdmVkX3JlZ3Nfc2l6ZTsKIAogCUNIRUNLX0VSUk9SKCk7CiAJQ0hFQ0soY2hlY2tfc2xqaXRfZW1pdF9yZXR1cm4oY29tcGlsZXIsIG9wLCBzcmMsIHNyY3cpKTsKQEAgLTEyNDMsOSArMTI0Myw5IEBACiAvKiAgT3BlcmF0b3JzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1TTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9vcDAoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3ApCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfczMyIHNsaml0X2VtaXRfb3AwKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiBvcCkKIHsKLQlzbGppdF9pbnMgaW52X2JpdHMgPSAob3AgJiBTTEpJVF9JTlRfT1ApID8gKDEgPDwgMzEpIDogMDsKKwlzbGppdF9pbnMgaW52X2JpdHMgPSAob3AgJiBTTEpJVF9JMzJfT1ApID8gKDEgPDwgMzEpIDogMDsKIAogCUNIRUNLX0VSUk9SKCk7CiAJQ0hFQ0soY2hlY2tfc2xqaXRfZW1pdF9vcDAoY29tcGlsZXIsIG9wKSk7CkBAIC0xMjU2LDMxICsxMjU2LDMxIEBACiAJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIEJSSyk7CiAJY2FzZSBTTEpJVF9OT1A6CiAJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIE5PUCk7Ci0JY2FzZSBTTEpJVF9MVU1VTDoKLQljYXNlIFNMSklUX0xTTVVMOgorCWNhc2UgU0xKSVRfTE1VTF9VVzoKKwljYXNlIFNMSklUX0xNVUxfU1c6CiAJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBPUlIgfCBSRChUTVBfUkVHMSkgfCBSTihUTVBfWkVSTykgfCBSTShTTEpJVF9SMCkpKTsKIAkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIE1BREQgfCBSRChTTEpJVF9SMCkgfCBSTihTTEpJVF9SMCkgfCBSTShTTEpJVF9SMSkgfCBSVDIoVE1QX1pFUk8pKSk7Ci0JCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIChvcCA9PSBTTEpJVF9MVU1VTCA/IFVNVUxIIDogU01VTEgpIHwgUkQoU0xKSVRfUjEpIHwgUk4oVE1QX1JFRzEpIHwgUk0oU0xKSVRfUjEpKTsKLQljYXNlIFNMSklUX1VESVZNT0Q6Ci0JY2FzZSBTTEpJVF9TRElWTU9EOgorCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCAob3AgPT0gU0xKSVRfTE1VTF9VVyA/IFVNVUxIIDogU01VTEgpIHwgUkQoU0xKSVRfUjEpIHwgUk4oVE1QX1JFRzEpIHwgUk0oU0xKSVRfUjEpKTsKKwljYXNlIFNMSklUX0RJVk1PRF9VVzoKKwljYXNlIFNMSklUX0RJVk1PRF9TVzoKIAkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIChPUlIgXiBpbnZfYml0cykgfCBSRChUTVBfUkVHMSkgfCBSTihUTVBfWkVSTykgfCBSTShTTEpJVF9SMCkpKTsKLQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsICgob3AgPT0gU0xKSVRfVURJVk1PRCA/IFVESVYgOiBTRElWKSBeIGludl9iaXRzKSB8IFJEKFNMSklUX1IwKSB8IFJOKFNMSklUX1IwKSB8IFJNKFNMSklUX1IxKSkpOworCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgKChvcCA9PSBTTEpJVF9ESVZNT0RfVVcgPyBVRElWIDogU0RJVikgXiBpbnZfYml0cykgfCBSRChTTEpJVF9SMCkgfCBSTihTTEpJVF9SMCkgfCBSTShTTEpJVF9SMSkpKTsKIAkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIChNQUREIF4gaW52X2JpdHMpIHwgUkQoU0xKSVRfUjEpIHwgUk4oU0xKSVRfUjApIHwgUk0oU0xKSVRfUjEpIHwgUlQyKFRNUF9aRVJPKSkpOwogCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCAoU1VCIF4gaW52X2JpdHMpIHwgUkQoU0xKSVRfUjEpIHwgUk4oVE1QX1JFRzEpIHwgUk0oU0xKSVRfUjEpKTsKLQljYXNlIFNMSklUX1VESVZJOgotCWNhc2UgU0xKSVRfU0RJVkk6Ci0JCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsICgob3AgPT0gU0xKSVRfVURJVkkgPyBVRElWIDogU0RJVikgXiBpbnZfYml0cykgfCBSRChTTEpJVF9SMCkgfCBSTihTTEpJVF9SMCkgfCBSTShTTEpJVF9SMSkpOworCWNhc2UgU0xKSVRfRElWX1VXOgorCWNhc2UgU0xKSVRfRElWX1NXOgorCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCAoKG9wID09IFNMSklUX0RJVl9VVyA/IFVESVYgOiBTRElWKSBeIGludl9iaXRzKSB8IFJEKFNMSklUX1IwKSB8IFJOKFNMSklUX1IwKSB8IFJNKFNMSklUX1IxKSk7CiAJfQogCiAJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CiB9CiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X29wMShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwKLQlzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsCi0Jc2xqaXRfc2kgc3JjLCBzbGppdF9zdyBzcmN3KQorU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3MzMiBzbGppdF9lbWl0X29wMShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgb3AsCisJc2xqaXRfczMyIGRzdCwgc2xqaXRfc3cgZHN0dywKKwlzbGppdF9zMzIgc3JjLCBzbGppdF9zdyBzcmN3KQogewotCXNsaml0X3NpIGRzdF9yLCBmbGFncywgbWVtX2ZsYWdzOwotCXNsaml0X3NpIG9wX2ZsYWdzID0gR0VUX0FMTF9GTEFHUyhvcCk7CisJc2xqaXRfczMyIGRzdF9yLCBmbGFncywgbWVtX2ZsYWdzOworCXNsaml0X3MzMiBvcF9mbGFncyA9IEdFVF9BTExfRkxBR1Mob3ApOwogCiAJQ0hFQ0tfRVJST1IoKTsKIAlDSEVDSyhjaGVja19zbGppdF9lbWl0X29wMShjb21waWxlciwgb3AsIGRzdCwgZHN0dywgc3JjLCBzcmN3KSk7CkBAIC0xMjk5LDY5ICsxMjk5LDY5IEBACiAJCWNhc2UgU0xKSVRfTU9WX1A6CiAJCQlmbGFncyA9IFdPUkRfU0laRTsKIAkJCWJyZWFrOwotCQljYXNlIFNMSklUX01PVl9VQjoKKwkJY2FzZSBTTEpJVF9NT1ZfVTg6CiAJCQlmbGFncyA9IEJZVEVfU0laRTsKIAkJCWlmIChzcmMgJiBTTEpJVF9JTU0pCi0JCQkJc3JjdyA9IChzbGppdF91YilzcmN3OworCQkJCXNyY3cgPSAoc2xqaXRfdTgpc3JjdzsKIAkJCWJyZWFrOwotCQljYXNlIFNMSklUX01PVl9TQjoKKwkJY2FzZSBTTEpJVF9NT1ZfUzg6CiAJCQlmbGFncyA9IEJZVEVfU0laRSB8IFNJR05FRDsKIAkJCWlmIChzcmMgJiBTTEpJVF9JTU0pCi0JCQkJc3JjdyA9IChzbGppdF9zYilzcmN3OworCQkJCXNyY3cgPSAoc2xqaXRfczgpc3JjdzsKIAkJCWJyZWFrOwotCQljYXNlIFNMSklUX01PVl9VSDoKKwkJY2FzZSBTTEpJVF9NT1ZfVTE2OgogCQkJZmxhZ3MgPSBIQUxGX1NJWkU7CiAJCQlpZiAoc3JjICYgU0xKSVRfSU1NKQotCQkJCXNyY3cgPSAoc2xqaXRfdWgpc3JjdzsKKwkJCQlzcmN3ID0gKHNsaml0X3UxNilzcmN3OwogCQkJYnJlYWs7Ci0JCWNhc2UgU0xKSVRfTU9WX1NIOgorCQljYXNlIFNMSklUX01PVl9TMTY6CiAJCQlmbGFncyA9IEhBTEZfU0laRSB8IFNJR05FRDsKIAkJCWlmIChzcmMgJiBTTEpJVF9JTU0pCi0JCQkJc3JjdyA9IChzbGppdF9zaClzcmN3OworCQkJCXNyY3cgPSAoc2xqaXRfczE2KXNyY3c7CiAJCQlicmVhazsKLQkJY2FzZSBTTEpJVF9NT1ZfVUk6CisJCWNhc2UgU0xKSVRfTU9WX1UzMjoKIAkJCWZsYWdzID0gSU5UX1NJWkU7CiAJCQlpZiAoc3JjICYgU0xKSVRfSU1NKQotCQkJCXNyY3cgPSAoc2xqaXRfdWkpc3JjdzsKKwkJCQlzcmN3ID0gKHNsaml0X3UzMilzcmN3OwogCQkJYnJlYWs7Ci0JCWNhc2UgU0xKSVRfTU9WX1NJOgorCQljYXNlIFNMSklUX01PVl9TMzI6CiAJCQlmbGFncyA9IElOVF9TSVpFIHwgU0lHTkVEOwogCQkJaWYgKHNyYyAmIFNMSklUX0lNTSkKLQkJCQlzcmN3ID0gKHNsaml0X3NpKXNyY3c7CisJCQkJc3JjdyA9IChzbGppdF9zMzIpc3JjdzsKIAkJCWJyZWFrOwogCQljYXNlIFNMSklUX01PVlU6CiAJCWNhc2UgU0xKSVRfTU9WVV9QOgogCQkJZmxhZ3MgPSBXT1JEX1NJWkUgfCBVUERBVEU7CiAJCQlicmVhazsKLQkJY2FzZSBTTEpJVF9NT1ZVX1VCOgorCQljYXNlIFNMSklUX01PVlVfVTg6CiAJCQlmbGFncyA9IEJZVEVfU0laRSB8IFVQREFURTsKIAkJCWlmIChzcmMgJiBTTEpJVF9JTU0pCi0JCQkJc3JjdyA9IChzbGppdF91YilzcmN3OworCQkJCXNyY3cgPSAoc2xqaXRfdTgpc3JjdzsKIAkJCWJyZWFrOwotCQljYXNlIFNMSklUX01PVlVfU0I6CisJCWNhc2UgU0xKSVRfTU9WVV9TODoKIAkJCWZsYWdzID0gQllURV9TSVpFIHwgU0lHTkVEIHwgVVBEQVRFOwogCQkJaWYgKHNyYyAmIFNMSklUX0lNTSkKLQkJCQlzcmN3ID0gKHNsaml0X3NiKXNyY3c7CisJCQkJc3JjdyA9IChzbGppdF9zOClzcmN3OwogCQkJYnJlYWs7Ci0JCWNhc2UgU0xKSVRfTU9WVV9VSDoKKwkJY2FzZSBTTEpJVF9NT1ZVX1UxNjoKIAkJCWZsYWdzID0gSEFMRl9TSVpFIHwgVVBEQVRFOwogCQkJaWYgKHNyYyAmIFNMSklUX0lNTSkKLQkJCQlzcmN3ID0gKHNsaml0X3VoKXNyY3c7CisJCQkJc3JjdyA9IChzbGppdF91MTYpc3JjdzsKIAkJCWJyZWFrOwotCQljYXNlIFNMSklUX01PVlVfU0g6CisJCWNhc2UgU0xKSVRfTU9WVV9TMTY6CiAJCQlmbGFncyA9IEhBTEZfU0laRSB8IFNJR05FRCB8IFVQREFURTsKIAkJCWlmIChzcmMgJiBTTEpJVF9JTU0pCi0JCQkJc3JjdyA9IChzbGppdF9zaClzcmN3OworCQkJCXNyY3cgPSAoc2xqaXRfczE2KXNyY3c7CiAJCQlicmVhazsKLQkJY2FzZSBTTEpJVF9NT1ZVX1VJOgorCQljYXNlIFNMSklUX01PVlVfVTMyOgogCQkJZmxhZ3MgPSBJTlRfU0laRSB8IFVQREFURTsKIAkJCWlmIChzcmMgJiBTTEpJVF9JTU0pCi0JCQkJc3JjdyA9IChzbGppdF91aSlzcmN3OworCQkJCXNyY3cgPSAoc2xqaXRfdTMyKXNyY3c7CiAJCQlicmVhazsKLQkJY2FzZSBTTEpJVF9NT1ZVX1NJOgorCQljYXNlIFNMSklUX01PVlVfUzMyOgogCQkJZmxhZ3MgPSBJTlRfU0laRSB8IFNJR05FRCB8IFVQREFURTsKIAkJCWlmIChzcmMgJiBTTEpJVF9JTU0pCi0JCQkJc3JjdyA9IChzbGppdF9zaSlzcmN3OworCQkJCXNyY3cgPSAoc2xqaXRfczMyKXNyY3c7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCVNMSklUX0FTU0VSVF9TVE9QKCk7CkBAIC0xMzc4LDcgKzEzNzgsNyBAQAogCQkJCUZBSUxfSUYoZ2V0cHV0X2FyZyhjb21waWxlciwgZmxhZ3MsIGRzdF9yLCBzcmMsIHNyY3csIGRzdCwgZHN0dykpOwogCQl9IGVsc2UgewogCQkJaWYgKGRzdF9yICE9IFRNUF9SRUcxKQotCQkJCXJldHVybiBlbWl0X29wX2ltbShjb21waWxlciwgb3AgfCAoKG9wX2ZsYWdzICYgU0xKSVRfSU5UX09QKSA/IElOVF9PUCA6IDApLCBkc3RfciwgVE1QX1JFRzEsIHNyYyk7CisJCQkJcmV0dXJuIGVtaXRfb3BfaW1tKGNvbXBpbGVyLCBvcCB8ICgob3BfZmxhZ3MgJiBTTEpJVF9JMzJfT1ApID8gSU5UX09QIDogMCksIGRzdF9yLCBUTVBfUkVHMSwgc3JjKTsKIAkJCWRzdF9yID0gc3JjOwogCQl9CiAKQEAgLTEzOTMsNyArMTM5Myw3IEBACiAKIAlmbGFncyA9IEdFVF9GTEFHUyhvcF9mbGFncykgPyBTRVRfRkxBR1MgOiAwOwogCW1lbV9mbGFncyA9IFdPUkRfU0laRTsKLQlpZiAob3BfZmxhZ3MgJiBTTEpJVF9JTlRfT1ApIHsKKwlpZiAob3BfZmxhZ3MgJiBTTEpJVF9JMzJfT1ApIHsKIAkJZmxhZ3MgfD0gSU5UX09QOwogCQltZW1fZmxhZ3MgPSBJTlRfU0laRTsKIAl9CkBAIC0xNDExLDggKzE0MTEsOCBAQAogCiAJaWYgKHNyYyAmIFNMSklUX0lNTSkgewogCQlmbGFncyB8PSBBUkcyX0lNTTsKLQkJaWYgKG9wX2ZsYWdzICYgU0xKSVRfSU5UX09QKQotCQkJc3JjdyA9IChzbGppdF9zaSlzcmN3OworCQlpZiAob3BfZmxhZ3MgJiBTTEpJVF9JMzJfT1ApCisJCQlzcmN3ID0gKHNsaml0X3MzMilzcmN3OwogCX0gZWxzZQogCQlzcmN3ID0gc3JjOwogCkBAIC0xNDI3LDEyICsxNDI3LDEyIEBACiAJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CiB9CiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X29wMihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwKLQlzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsCi0Jc2xqaXRfc2kgc3JjMSwgc2xqaXRfc3cgc3JjMXcsCi0Jc2xqaXRfc2kgc3JjMiwgc2xqaXRfc3cgc3JjMncpCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfczMyIHNsaml0X2VtaXRfb3AyKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiBvcCwKKwlzbGppdF9zMzIgZHN0LCBzbGppdF9zdyBkc3R3LAorCXNsaml0X3MzMiBzcmMxLCBzbGppdF9zdyBzcmMxdywKKwlzbGppdF9zMzIgc3JjMiwgc2xqaXRfc3cgc3JjMncpCiB7Ci0Jc2xqaXRfc2kgZHN0X3IsIGZsYWdzLCBtZW1fZmxhZ3M7CisJc2xqaXRfczMyIGRzdF9yLCBmbGFncywgbWVtX2ZsYWdzOwogCiAJQ0hFQ0tfRVJST1IoKTsKIAlDSEVDSyhjaGVja19zbGppdF9lbWl0X29wMihjb21waWxlciwgb3AsIGRzdCwgZHN0dywgc3JjMSwgc3JjMXcsIHNyYzIsIHNyYzJ3KSk7CkBAIC0xNDQ2LDcgKzE0NDYsNyBAQAogCWRzdF9yID0gU0xPV19JU19SRUcoZHN0KSA/IGRzdCA6IFRNUF9SRUcxOwogCWZsYWdzID0gR0VUX0ZMQUdTKG9wKSA/IFNFVF9GTEFHUyA6IDA7CiAJbWVtX2ZsYWdzID0gV09SRF9TSVpFOwotCWlmIChvcCAmIFNMSklUX0lOVF9PUCkgeworCWlmIChvcCAmIFNMSklUX0kzMl9PUCkgewogCQlmbGFncyB8PSBJTlRfT1A7CiAJCW1lbV9mbGFncyA9IElOVF9TSVpFOwogCX0KQEAgLTE1MTIsMjAgKzE1MTIsMjAgQEAKIAlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKIH0KIAotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2dldF9yZWdpc3Rlcl9pbmRleChzbGppdF9zaSByZWcpCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfczMyIHNsaml0X2dldF9yZWdpc3Rlcl9pbmRleChzbGppdF9zMzIgcmVnKQogewogCUNIRUNLX1JFR19JTkRFWChjaGVja19zbGppdF9nZXRfcmVnaXN0ZXJfaW5kZXgocmVnKSk7CiAJcmV0dXJuIHJlZ19tYXBbcmVnXTsKIH0KIAotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2dldF9mbG9hdF9yZWdpc3Rlcl9pbmRleChzbGppdF9zaSByZWcpCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfczMyIHNsaml0X2dldF9mbG9hdF9yZWdpc3Rlcl9pbmRleChzbGppdF9zMzIgcmVnKQogewogCUNIRUNLX1JFR19JTkRFWChjaGVja19zbGppdF9nZXRfZmxvYXRfcmVnaXN0ZXJfaW5kZXgocmVnKSk7CiAJcmV0dXJuIHJlZzsKIH0KIAotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfb3BfY3VzdG9tKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsCi0Jdm9pZCAqaW5zdHJ1Y3Rpb24sIHNsaml0X3NpIHNpemUpCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfczMyIHNsaml0X2VtaXRfb3BfY3VzdG9tKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsCisJdm9pZCAqaW5zdHJ1Y3Rpb24sIHNsaml0X3MzMiBzaXplKQogewogCUNIRUNLX0VSUk9SKCk7CiAJQ0hFQ0soY2hlY2tfc2xqaXRfZW1pdF9vcF9jdXN0b20oY29tcGlsZXIsIGluc3RydWN0aW9uLCBzaXplKSk7CkBAIC0xNTM3LDcgKzE1MzcsNyBAQAogLyogIEZsb2F0aW5nIHBvaW50IG9wZXJhdG9ycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2lzX2ZwdV9hdmFpbGFibGUodm9pZCkKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zMzIgc2xqaXRfaXNfZnB1X2F2YWlsYWJsZSh2b2lkKQogewogI2lmZGVmIFNMSklUX0lTX0ZQVV9BVkFJTEFCTEUKIAlyZXR1cm4gU0xKSVRfSVNfRlBVX0FWQUlMQUJMRTsKQEAgLTE1NDcsMTEgKzE1NDcsMTEgQEAKICNlbmRpZgogfQogCi1zdGF0aWMgc2xqaXRfc2kgZW1pdF9mb3BfbWVtKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIGZsYWdzLCBzbGppdF9zaSByZWcsIHNsaml0X3NpIGFyZywgc2xqaXRfc3cgYXJndykKK3N0YXRpYyBzbGppdF9zMzIgZW1pdF9mb3BfbWVtKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiBmbGFncywgc2xqaXRfczMyIHJlZywgc2xqaXRfczMyIGFyZywgc2xqaXRfc3cgYXJndykKIHsKLQlzbGppdF91aSBzaGlmdCA9IE1FTV9TSVpFX1NISUZUKGZsYWdzKTsKKwlzbGppdF91MzIgc2hpZnQgPSBNRU1fU0laRV9TSElGVChmbGFncyk7CiAJc2xqaXRfaW5zIGluc19iaXRzID0gKHNoaWZ0IDw8IDMwKTsKLQlzbGppdF9zaSBvdGhlcl9yOworCXNsaml0X3MzMiBvdGhlcl9yOwogCXNsaml0X3N3IGRpZmY7CiAKIAlTTEpJVF9BU1NFUlQoYXJnICYgU0xKSVRfTUVNKTsKQEAgLTE2MDAsNDUgKzE2MDAsNDUgQEAKIAlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBTVFJfRkkgfCBpbnNfYml0cyB8IFZUKHJlZykgfCBSTihUTVBfUkVHMykpOwogfQogCi1zdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X3NpIHNsaml0X2VtaXRfZm9wMV9jb252d19mcm9tZChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwKLQlzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsCi0Jc2xqaXRfc2kgc3JjLCBzbGppdF9zdyBzcmN3KQorc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9zMzIgc2xqaXRfZW1pdF9mb3AxX2NvbnZfc3dfZnJvbV9mNjQoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIG9wLAorCXNsaml0X3MzMiBkc3QsIHNsaml0X3N3IGRzdHcsCisJc2xqaXRfczMyIHNyYywgc2xqaXRfc3cgc3JjdykKIHsKLQlzbGppdF9zaSBkc3RfciA9IFNMT1dfSVNfUkVHKGRzdCkgPyBkc3QgOiBUTVBfUkVHMTsKLQlzbGppdF9pbnMgaW52X2JpdHMgPSAob3AgJiBTTEpJVF9TSU5HTEVfT1ApID8gKDEgPDwgMjIpIDogMDsKKwlzbGppdF9zMzIgZHN0X3IgPSBTTE9XX0lTX1JFRyhkc3QpID8gZHN0IDogVE1QX1JFRzE7CisJc2xqaXRfaW5zIGludl9iaXRzID0gKG9wICYgU0xKSVRfRjMyX09QKSA/ICgxIDw8IDIyKSA6IDA7CiAKLQlpZiAoR0VUX09QQ09ERShvcCkgPT0gU0xKSVRfQ09OVklfRlJPTUQpCisJaWYgKEdFVF9PUENPREUob3ApID09IFNMSklUX0NPTlZfUzMyX0ZST01fRjY0KQogCQlpbnZfYml0cyB8PSAoMSA8PCAzMSk7CiAKIAlpZiAoc3JjICYgU0xKSVRfTUVNKSB7Ci0JCWVtaXRfZm9wX21lbShjb21waWxlciwgKG9wICYgU0xKSVRfU0lOR0xFX09QKSA/IElOVF9TSVpFIDogV09SRF9TSVpFLCBUTVBfRlJFRzEsIHNyYywgc3Jjdyk7CisJCWVtaXRfZm9wX21lbShjb21waWxlciwgKG9wICYgU0xKSVRfRjMyX09QKSA/IElOVF9TSVpFIDogV09SRF9TSVpFLCBUTVBfRlJFRzEsIHNyYywgc3Jjdyk7CiAJCXNyYyA9IFRNUF9GUkVHMTsKIAl9CiAKIAlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgKEZDVlRaUyBeIGludl9iaXRzKSB8IFJEKGRzdF9yKSB8IFZOKHNyYykpKTsKIAogCWlmIChkc3RfciA9PSBUTVBfUkVHMSAmJiBkc3QgIT0gU0xKSVRfVU5VU0VEKQotCQlyZXR1cm4gZW1pdF9vcF9tZW0oY29tcGlsZXIsICgoR0VUX09QQ09ERShvcCkgPT0gU0xKSVRfQ09OVklfRlJPTUQpID8gSU5UX1NJWkUgOiBXT1JEX1NJWkUpIHwgU1RPUkUsIFRNUF9SRUcxLCBkc3QsIGRzdHcpOworCQlyZXR1cm4gZW1pdF9vcF9tZW0oY29tcGlsZXIsICgoR0VUX09QQ09ERShvcCkgPT0gU0xKSVRfQ09OVl9TMzJfRlJPTV9GNjQpID8gSU5UX1NJWkUgOiBXT1JEX1NJWkUpIHwgU1RPUkUsIFRNUF9SRUcxLCBkc3QsIGRzdHcpOwogCXJldHVybiBTTEpJVF9TVUNDRVNTOwogfQogCi1zdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X3NpIHNsaml0X2VtaXRfZm9wMV9jb252ZF9mcm9tdyhzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwKLQlzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsCi0Jc2xqaXRfc2kgc3JjLCBzbGppdF9zdyBzcmN3KQorc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9zMzIgc2xqaXRfZW1pdF9mb3AxX2NvbnZfZjY0X2Zyb21fc3coc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIG9wLAorCXNsaml0X3MzMiBkc3QsIHNsaml0X3N3IGRzdHcsCisJc2xqaXRfczMyIHNyYywgc2xqaXRfc3cgc3JjdykKIHsKLQlzbGppdF9zaSBkc3RfciA9IEZBU1RfSVNfUkVHKGRzdCkgPyBkc3QgOiBUTVBfRlJFRzE7Ci0Jc2xqaXRfaW5zIGludl9iaXRzID0gKG9wICYgU0xKSVRfU0lOR0xFX09QKSA/ICgxIDw8IDIyKSA6IDA7CisJc2xqaXRfczMyIGRzdF9yID0gRkFTVF9JU19SRUcoZHN0KSA/IGRzdCA6IFRNUF9GUkVHMTsKKwlzbGppdF9pbnMgaW52X2JpdHMgPSAob3AgJiBTTEpJVF9GMzJfT1ApID8gKDEgPDwgMjIpIDogMDsKIAotCWlmIChHRVRfT1BDT0RFKG9wKSA9PSBTTEpJVF9DT05WRF9GUk9NSSkKKwlpZiAoR0VUX09QQ09ERShvcCkgPT0gU0xKSVRfQ09OVl9GNjRfRlJPTV9TMzIpCiAJCWludl9iaXRzIHw9ICgxIDw8IDMxKTsKIAogCWlmIChzcmMgJiBTTEpJVF9NRU0pIHsKLQkJZW1pdF9vcF9tZW0oY29tcGlsZXIsICgoR0VUX09QQ09ERShvcCkgPT0gU0xKSVRfQ09OVkRfRlJPTUkpID8gSU5UX1NJWkUgOiBXT1JEX1NJWkUpLCBUTVBfUkVHMSwgc3JjLCBzcmN3KTsKKwkJZW1pdF9vcF9tZW0oY29tcGlsZXIsICgoR0VUX09QQ09ERShvcCkgPT0gU0xKSVRfQ09OVl9GNjRfRlJPTV9TMzIpID8gSU5UX1NJWkUgOiBXT1JEX1NJWkUpLCBUTVBfUkVHMSwgc3JjLCBzcmN3KTsKIAkJc3JjID0gVE1QX1JFRzE7CiAJfSBlbHNlIGlmIChzcmMgJiBTTEpJVF9JTU0pIHsKICNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2XzY0ICYmIFNMSklUX0NPTkZJR19YODZfNjQpCi0JCWlmIChHRVRfT1BDT0RFKG9wKSA9PSBTTEpJVF9DT05WRF9GUk9NSSkKLQkJCXNyY3cgPSAoc2xqaXRfc2kpc3JjdzsKKwkJaWYgKEdFVF9PUENPREUob3ApID09IFNMSklUX0NPTlZfRjY0X0ZST01fUzMyKQorCQkJc3JjdyA9IChzbGppdF9zMzIpc3JjdzsKICNlbmRpZgogCQlGQUlMX0lGKGxvYWRfaW1tZWRpYXRlKGNvbXBpbGVyLCBUTVBfUkVHMSwgc3JjdykpOwogCQlzcmMgPSBUTVBfUkVHMTsKQEAgLTE2NDcsMTYgKzE2NDcsMTYgQEAKIAlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgKFNDVlRGIF4gaW52X2JpdHMpIHwgVkQoZHN0X3IpIHwgUk4oc3JjKSkpOwogCiAJaWYgKGRzdCAmIFNMSklUX01FTSkKLQkJcmV0dXJuIGVtaXRfZm9wX21lbShjb21waWxlciwgKChvcCAmIFNMSklUX1NJTkdMRV9PUCkgPyBJTlRfU0laRSA6IFdPUkRfU0laRSkgfCBTVE9SRSwgVE1QX0ZSRUcxLCBkc3QsIGRzdHcpOworCQlyZXR1cm4gZW1pdF9mb3BfbWVtKGNvbXBpbGVyLCAoKG9wICYgU0xKSVRfRjMyX09QKSA/IElOVF9TSVpFIDogV09SRF9TSVpFKSB8IFNUT1JFLCBUTVBfRlJFRzEsIGRzdCwgZHN0dyk7CiAJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBTTEpJVF9JTkxJTkUgc2xqaXRfc2kgc2xqaXRfZW1pdF9mb3AxX2NtcChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwKLQlzbGppdF9zaSBzcmMxLCBzbGppdF9zdyBzcmMxdywKLQlzbGppdF9zaSBzcmMyLCBzbGppdF9zdyBzcmMydykKK3N0YXRpYyBTTEpJVF9JTkxJTkUgc2xqaXRfczMyIHNsaml0X2VtaXRfZm9wMV9jbXAoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIG9wLAorCXNsaml0X3MzMiBzcmMxLCBzbGppdF9zdyBzcmMxdywKKwlzbGppdF9zMzIgc3JjMiwgc2xqaXRfc3cgc3JjMncpCiB7Ci0Jc2xqaXRfc2kgbWVtX2ZsYWdzID0gKG9wICYgU0xKSVRfU0lOR0xFX09QKSA/IElOVF9TSVpFIDogV09SRF9TSVpFOwotCXNsaml0X2lucyBpbnZfYml0cyA9IChvcCAmIFNMSklUX1NJTkdMRV9PUCkgPyAoMSA8PCAyMikgOiAwOworCXNsaml0X3MzMiBtZW1fZmxhZ3MgPSAob3AgJiBTTEpJVF9GMzJfT1ApID8gSU5UX1NJWkUgOiBXT1JEX1NJWkU7CisJc2xqaXRfaW5zIGludl9iaXRzID0gKG9wICYgU0xKSVRfRjMyX09QKSA/ICgxIDw8IDIyKSA6IDA7CiAKIAlpZiAoc3JjMSAmIFNMSklUX01FTSkgewogCQllbWl0X2ZvcF9tZW0oY29tcGlsZXIsIG1lbV9mbGFncywgVE1QX0ZSRUcxLCBzcmMxLCBzcmMxdyk7CkBAIC0xNjcxLDExICsxNjcxLDExIEBACiAJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgKEZDTVAgXiBpbnZfYml0cykgfCBWTihzcmMxKSB8IFZNKHNyYzIpKTsKIH0KIAotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfZm9wMShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwKLQlzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsCi0Jc2xqaXRfc2kgc3JjLCBzbGppdF9zdyBzcmN3KQorU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3MzMiBzbGppdF9lbWl0X2ZvcDEoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIG9wLAorCXNsaml0X3MzMiBkc3QsIHNsaml0X3N3IGRzdHcsCisJc2xqaXRfczMyIHNyYywgc2xqaXRfc3cgc3JjdykKIHsKLQlzbGppdF9zaSBkc3RfciwgbWVtX2ZsYWdzID0gKG9wICYgU0xKSVRfU0lOR0xFX09QKSA/IElOVF9TSVpFIDogV09SRF9TSVpFOworCXNsaml0X3MzMiBkc3RfciwgbWVtX2ZsYWdzID0gKG9wICYgU0xKSVRfRjMyX09QKSA/IElOVF9TSVpFIDogV09SRF9TSVpFOwogCXNsaml0X2lucyBpbnZfYml0czsKIAogCUNIRUNLX0VSUk9SKCk7CkBAIC0xNjg1LDE2ICsxNjg1LDE2IEBACiAJU0xKSVRfQ09NUElMRV9BU1NFUlQoKElOVF9TSVpFIF4gMHgxMDApID09IFdPUkRfU0laRSwgbXVzdF9iZV9vbmVfYml0X2RpZmZlcmVuY2UpOwogCVNFTEVDVF9GT1AxX09QRVJBVElPTl9XSVRIX0NIRUNLUyhjb21waWxlciwgb3AsIGRzdCwgZHN0dywgc3JjLCBzcmN3KTsKIAotCWludl9iaXRzID0gKG9wICYgU0xKSVRfU0lOR0xFX09QKSA/ICgxIDw8IDIyKSA6IDA7CisJaW52X2JpdHMgPSAob3AgJiBTTEpJVF9GMzJfT1ApID8gKDEgPDwgMjIpIDogMDsKIAlkc3RfciA9IEZBU1RfSVNfUkVHKGRzdCkgPyBkc3QgOiBUTVBfRlJFRzE7CiAKIAlpZiAoc3JjICYgU0xKSVRfTUVNKSB7Ci0JCWVtaXRfZm9wX21lbShjb21waWxlciwgKEdFVF9PUENPREUob3ApID09IFNMSklUX0NPTlZEX0ZST01TKSA/IChtZW1fZmxhZ3MgXiAweDEwMCkgOiBtZW1fZmxhZ3MsIGRzdF9yLCBzcmMsIHNyY3cpOworCQllbWl0X2ZvcF9tZW0oY29tcGlsZXIsIChHRVRfT1BDT0RFKG9wKSA9PSBTTEpJVF9DT05WX0Y2NF9GUk9NX0YzMikgPyAobWVtX2ZsYWdzIF4gMHgxMDApIDogbWVtX2ZsYWdzLCBkc3Rfciwgc3JjLCBzcmN3KTsKIAkJc3JjID0gZHN0X3I7CiAJfQogCiAJc3dpdGNoIChHRVRfT1BDT0RFKG9wKSkgewotCWNhc2UgU0xKSVRfRE1PVjoKKwljYXNlIFNMSklUX01PVl9GNjQ6CiAJCWlmIChzcmMgIT0gZHN0X3IpIHsKIAkJCWlmIChkc3RfciAhPSBUTVBfRlJFRzEpCiAJCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIChGTU9WIF4gaW52X2JpdHMpIHwgVkQoZHN0X3IpIHwgVk4oc3JjKSkpOwpAQCAtMTcwMiwxNCArMTcwMiwxNCBAQAogCQkJCWRzdF9yID0gc3JjOwogCQl9CiAJCWJyZWFrOwotCWNhc2UgU0xKSVRfRE5FRzoKKwljYXNlIFNMSklUX05FR19GNjQ6CiAJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCAoRk5FRyBeIGludl9iaXRzKSB8IFZEKGRzdF9yKSB8IFZOKHNyYykpKTsKIAkJYnJlYWs7Ci0JY2FzZSBTTEpJVF9EQUJTOgorCWNhc2UgU0xKSVRfQUJTX0Y2NDoKIAkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIChGQUJTIF4gaW52X2JpdHMpIHwgVkQoZHN0X3IpIHwgVk4oc3JjKSkpOwogCQlicmVhazsKLQljYXNlIFNMSklUX0NPTlZEX0ZST01TOgotCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgRkNWVCB8ICgob3AgJiBTTEpJVF9TSU5HTEVfT1ApID8gKDEgPDwgMjIpIDogKDEgPDwgMTUpKSB8IFZEKGRzdF9yKSB8IFZOKHNyYykpKTsKKwljYXNlIFNMSklUX0NPTlZfRjY0X0ZST01fRjMyOgorCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgRkNWVCB8ICgob3AgJiBTTEpJVF9GMzJfT1ApID8gKDEgPDwgMjIpIDogKDEgPDwgMTUpKSB8IFZEKGRzdF9yKSB8IFZOKHNyYykpKTsKIAkJYnJlYWs7CiAJfQogCkBAIC0xNzE4LDEzICsxNzE4LDEzIEBACiAJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CiB9CiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X2ZvcDIoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsCi0Jc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3LAotCXNsaml0X3NpIHNyYzEsIHNsaml0X3N3IHNyYzF3LAotCXNsaml0X3NpIHNyYzIsIHNsaml0X3N3IHNyYzJ3KQorU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3MzMiBzbGppdF9lbWl0X2ZvcDIoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIG9wLAorCXNsaml0X3MzMiBkc3QsIHNsaml0X3N3IGRzdHcsCisJc2xqaXRfczMyIHNyYzEsIHNsaml0X3N3IHNyYzF3LAorCXNsaml0X3MzMiBzcmMyLCBzbGppdF9zdyBzcmMydykKIHsKLQlzbGppdF9zaSBkc3RfciwgbWVtX2ZsYWdzID0gKG9wICYgU0xKSVRfU0lOR0xFX09QKSA/IElOVF9TSVpFIDogV09SRF9TSVpFOwotCXNsaml0X2lucyBpbnZfYml0cyA9IChvcCAmIFNMSklUX1NJTkdMRV9PUCkgPyAoMSA8PCAyMikgOiAwOworCXNsaml0X3MzMiBkc3RfciwgbWVtX2ZsYWdzID0gKG9wICYgU0xKSVRfRjMyX09QKSA/IElOVF9TSVpFIDogV09SRF9TSVpFOworCXNsaml0X2lucyBpbnZfYml0cyA9IChvcCAmIFNMSklUX0YzMl9PUCkgPyAoMSA8PCAyMikgOiAwOwogCiAJQ0hFQ0tfRVJST1IoKTsKIAlDSEVDSyhjaGVja19zbGppdF9lbWl0X2ZvcDIoY29tcGlsZXIsIG9wLCBkc3QsIGRzdHcsIHNyYzEsIHNyYzF3LCBzcmMyLCBzcmMydykpOwpAQCAtMTc0NiwxNiArMTc0NiwxNiBAQAogCX0KIAogCXN3aXRjaCAoR0VUX09QQ09ERShvcCkpIHsKLQljYXNlIFNMSklUX0RBREQ6CisJY2FzZSBTTEpJVF9BRERfRjY0OgogCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgKEZBREQgXiBpbnZfYml0cykgfCBWRChkc3RfcikgfCBWTihzcmMxKSB8IFZNKHNyYzIpKSk7CiAJCWJyZWFrOwotCWNhc2UgU0xKSVRfRFNVQjoKKwljYXNlIFNMSklUX1NVQl9GNjQ6CiAJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCAoRlNVQiBeIGludl9iaXRzKSB8IFZEKGRzdF9yKSB8IFZOKHNyYzEpIHwgVk0oc3JjMikpKTsKIAkJYnJlYWs7Ci0JY2FzZSBTTEpJVF9ETVVMOgorCWNhc2UgU0xKSVRfTVVMX0Y2NDoKIAkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIChGTVVMIF4gaW52X2JpdHMpIHwgVkQoZHN0X3IpIHwgVk4oc3JjMSkgfCBWTShzcmMyKSkpOwogCQlicmVhazsKLQljYXNlIFNMSklUX0RESVY6CisJY2FzZSBTTEpJVF9ESVZfRjY0OgogCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgKEZESVYgXiBpbnZfYml0cykgfCBWRChkc3RfcikgfCBWTihzcmMxKSB8IFZNKHNyYzIpKSk7CiAJCWJyZWFrOwogCX0KQEAgLTE3NjksNyArMTc2OSw3IEBACiAvKiAgT3RoZXIgaW5zdHJ1Y3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1TTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9mYXN0X2VudGVyKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dykKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zMzIgc2xqaXRfZW1pdF9mYXN0X2VudGVyKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiBkc3QsIHNsaml0X3N3IGRzdHcpCiB7CiAJQ0hFQ0tfRVJST1IoKTsKIAlDSEVDSyhjaGVja19zbGppdF9lbWl0X2Zhc3RfZW50ZXIoY29tcGlsZXIsIGRzdCwgZHN0dykpOwpAQCAtMTc4Niw3ICsxNzg2LDcgQEAKIAlyZXR1cm4gZW1pdF9vcF9tZW0oY29tcGlsZXIsIFdPUkRfU0laRSB8IFNUT1JFLCBUTVBfTFIsIGRzdCwgZHN0dyk7CiB9CiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X2Zhc3RfcmV0dXJuKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIHNyYywgc2xqaXRfc3cgc3JjdykKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zMzIgc2xqaXRfZW1pdF9mYXN0X3JldHVybihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgc3JjLCBzbGppdF9zdyBzcmN3KQogewogCUNIRUNLX0VSUk9SKCk7CiAJQ0hFQ0soY2hlY2tfc2xqaXRfZW1pdF9mYXN0X3JldHVybihjb21waWxlciwgc3JjLCBzcmN3KSk7CkBAIC0xODA2LDMzICsxODA2LDMzIEBACiAvKiAgQ29uZGl0aW9uYWwgaW5zdHJ1Y3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgc2xqaXRfdXcgZ2V0X2NjKHNsaml0X3NpIHR5cGUpCitzdGF0aWMgc2xqaXRfdXcgZ2V0X2NjKHNsaml0X3MzMiB0eXBlKQogewogCXN3aXRjaCAodHlwZSkgewogCWNhc2UgU0xKSVRfRVFVQUw6CiAJY2FzZSBTTEpJVF9NVUxfTk9UX09WRVJGTE9XOgotCWNhc2UgU0xKSVRfRF9FUVVBTDoKKwljYXNlIFNMSklUX0VRVUFMX0Y2NDoKIAkJcmV0dXJuIDB4MTsKIAogCWNhc2UgU0xKSVRfTk9UX0VRVUFMOgogCWNhc2UgU0xKSVRfTVVMX09WRVJGTE9XOgotCWNhc2UgU0xKSVRfRF9OT1RfRVFVQUw6CisJY2FzZSBTTEpJVF9OT1RfRVFVQUxfRjY0OgogCQlyZXR1cm4gMHgwOwogCiAJY2FzZSBTTEpJVF9MRVNTOgotCWNhc2UgU0xKSVRfRF9MRVNTOgorCWNhc2UgU0xKSVRfTEVTU19GNjQ6CiAJCXJldHVybiAweDI7CiAKIAljYXNlIFNMSklUX0dSRUFURVJfRVFVQUw6Ci0JY2FzZSBTTEpJVF9EX0dSRUFURVJfRVFVQUw6CisJY2FzZSBTTEpJVF9HUkVBVEVSX0VRVUFMX0Y2NDoKIAkJcmV0dXJuIDB4MzsKIAogCWNhc2UgU0xKSVRfR1JFQVRFUjoKLQljYXNlIFNMSklUX0RfR1JFQVRFUjoKKwljYXNlIFNMSklUX0dSRUFURVJfRjY0OgogCQlyZXR1cm4gMHg5OwogCiAJY2FzZSBTTEpJVF9MRVNTX0VRVUFMOgotCWNhc2UgU0xKSVRfRF9MRVNTX0VRVUFMOgorCWNhc2UgU0xKSVRfTEVTU19FUVVBTF9GNjQ6CiAJCXJldHVybiAweDg7CiAKIAljYXNlIFNMSklUX1NJR19MRVNTOgpAQCAtMTg0OCwxMSArMTg0OCwxMSBAQAogCQlyZXR1cm4gMHhjOwogCiAJY2FzZSBTTEpJVF9PVkVSRkxPVzoKLQljYXNlIFNMSklUX0RfVU5PUkRFUkVEOgorCWNhc2UgU0xKSVRfVU5PUkRFUkVEX0Y2NDoKIAkJcmV0dXJuIDB4NzsKIAogCWNhc2UgU0xKSVRfTk9UX09WRVJGTE9XOgotCWNhc2UgU0xKSVRfRF9PUkRFUkVEOgorCWNhc2UgU0xKSVRfT1JERVJFRF9GNjQ6CiAJCXJldHVybiAweDY7CiAKIAlkZWZhdWx0OgpAQCAtMTg3Nyw3ICsxODc3LDcgQEAKIAlyZXR1cm4gbGFiZWw7CiB9CiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzdHJ1Y3Qgc2xqaXRfanVtcCogc2xqaXRfZW1pdF9qdW1wKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIHR5cGUpCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc3RydWN0IHNsaml0X2p1bXAqIHNsaml0X2VtaXRfanVtcChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgdHlwZSkKIHsKIAlzdHJ1Y3Qgc2xqaXRfanVtcCAqanVtcDsKIApAQCAtMTkwMywxMSArMTkwMywxMSBAQAogCXJldHVybiBqdW1wOwogfQogCi1zdGF0aWMgU0xKSVRfSU5MSU5FIHN0cnVjdCBzbGppdF9qdW1wKiBlbWl0X2NtcF90bzAoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgdHlwZSwKLQlzbGppdF9zaSBzcmMsIHNsaml0X3N3IHNyY3cpCitzdGF0aWMgU0xKSVRfSU5MSU5FIHN0cnVjdCBzbGppdF9qdW1wKiBlbWl0X2NtcF90bzAoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIHR5cGUsCisJc2xqaXRfczMyIHNyYywgc2xqaXRfc3cgc3JjdykKIHsKIAlzdHJ1Y3Qgc2xqaXRfanVtcCAqanVtcDsKLQlzbGppdF9pbnMgaW52X2JpdHMgPSAodHlwZSAmIFNMSklUX0lOVF9PUCkgPyAoMSA8PCAzMSkgOiAwOworCXNsaml0X2lucyBpbnZfYml0cyA9ICh0eXBlICYgU0xKSVRfSTMyX09QKSA/ICgxIDw8IDMxKSA6IDA7CiAKIAlTTEpJVF9BU1NFUlQoKHR5cGUgJiAweGZmKSA9PSBTTEpJVF9FUVVBTCB8fCAodHlwZSAmIDB4ZmYpID09IFNMSklUX05PVF9FUVVBTCk7CiAJQURKVVNUX0xPQ0FMX09GRlNFVChzcmMsIHNyY3cpOwpAQCAtMTkzNyw3ICsxOTM3LDcgQEAKIAlyZXR1cm4ganVtcDsKIH0KIAotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfaWp1bXAoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgdHlwZSwgc2xqaXRfc2kgc3JjLCBzbGppdF9zdyBzcmN3KQorU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3MzMiBzbGppdF9lbWl0X2lqdW1wKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiB0eXBlLCBzbGppdF9zMzIgc3JjLCBzbGppdF9zdyBzcmN3KQogewogCXN0cnVjdCBzbGppdF9qdW1wICpqdW1wOwogCkBAIC0xOTY0LDEyICsxOTY0LDEyIEBACiAJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgKCh0eXBlID49IFNMSklUX0ZBU1RfQ0FMTCkgPyBCTFIgOiBCUikgfCBSTihUTVBfUkVHMSkpOwogfQogCi1TTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9vcF9mbGFncyhzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwKLQlzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsCi0Jc2xqaXRfc2kgc3JjLCBzbGppdF9zdyBzcmN3LAotCXNsaml0X3NpIHR5cGUpCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfczMyIHNsaml0X2VtaXRfb3BfZmxhZ3Moc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIG9wLAorCXNsaml0X3MzMiBkc3QsIHNsaml0X3N3IGRzdHcsCisJc2xqaXRfczMyIHNyYywgc2xqaXRfc3cgc3JjdywKKwlzbGppdF9zMzIgdHlwZSkKIHsKLQlzbGppdF9zaSBkc3RfciwgZmxhZ3MsIG1lbV9mbGFnczsKKwlzbGppdF9zMzIgZHN0X3IsIGZsYWdzLCBtZW1fZmxhZ3M7CiAJc2xqaXRfaW5zIGNjOwogCiAJQ0hFQ0tfRVJST1IoKTsKQEAgLTE5OTQsNyArMTk5NCw3IEBACiAJY29tcGlsZXItPmNhY2hlX2FyZ3cgPSAwOwogCWZsYWdzID0gR0VUX0ZMQUdTKG9wKSA/IFNFVF9GTEFHUyA6IDA7CiAJbWVtX2ZsYWdzID0gV09SRF9TSVpFOwotCWlmIChvcCAmIFNMSklUX0lOVF9PUCkgeworCWlmIChvcCAmIFNMSklUX0kzMl9PUCkgewogCQlmbGFncyB8PSBJTlRfT1A7CiAJCW1lbV9mbGFncyA9IElOVF9TSVpFOwogCX0KQEAgLTIwMTQsMTAgKzIwMTQsMTAgQEAKIAlyZXR1cm4gZW1pdF9vcF9tZW0yKGNvbXBpbGVyLCBtZW1fZmxhZ3MgfCBTVE9SRSwgVE1QX1JFRzEsIGRzdCwgZHN0dywgMCwgMCk7CiB9CiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzdHJ1Y3Qgc2xqaXRfY29uc3QqIHNsaml0X2VtaXRfY29uc3Qoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3LCBzbGppdF9zdyBpbml0X3ZhbHVlKQorU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHN0cnVjdCBzbGppdF9jb25zdCogc2xqaXRfZW1pdF9jb25zdChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgZHN0LCBzbGppdF9zdyBkc3R3LCBzbGppdF9zdyBpbml0X3ZhbHVlKQogewogCXN0cnVjdCBzbGppdF9jb25zdCAqY29uc3RfOwotCXNsaml0X3NpIGRzdF9yOworCXNsaml0X3MzMiBkc3RfcjsKIAogCUNIRUNLX0VSUk9SX1BUUigpOwogCUNIRUNLX1BUUihjaGVja19zbGppdF9lbWl0X2NvbnN0KGNvbXBpbGVyLCBkc3QsIGRzdHcsIGluaXRfdmFsdWUpKTsKZGlmZiAtLWdpdCBhL2Rpc3QyL3NyYy9zbGppdC9zbGppdE5hdGl2ZUFSTV9UMl8zMi5jIGIvZGlzdDIvc3JjL3Nsaml0L3Nsaml0TmF0aXZlQVJNX1QyXzMyLmMKaW5kZXggZjk4MDNmNS4uMWVkNDRhOCAxMDA2NDQKLS0tIGEvZGlzdDIvc3JjL3Nsaml0L3Nsaml0TmF0aXZlQVJNX1QyXzMyLmMKKysrIGIvZGlzdDIvc3JjL3Nsaml0L3Nsaml0TmF0aXZlQVJNX1QyXzMyLmMKQEAgLTI0LDEzICsyNCwxMyBAQAogICogQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBTTEpJVF9DT05TVCBjaGFyKiBzbGppdF9nZXRfcGxhdGZvcm1fbmFtZSh2b2lkKQorU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIGNvbnN0IGNoYXIqIHNsaml0X2dldF9wbGF0Zm9ybV9uYW1lKHZvaWQpCiB7CiAJcmV0dXJuICJBUk0tVGh1bWIyIiBTTEpJVF9DUFVJTkZPOwogfQogCiAvKiBMZW5ndGggb2YgYW4gaW5zdHJ1Y3Rpb24gd29yZC4gKi8KLXR5cGVkZWYgc2xqaXRfdWkgc2xqaXRfaW5zOwordHlwZWRlZiBzbGppdF91MzIgc2xqaXRfaW5zOwogCiAvKiBMYXN0IHJlZ2lzdGVyICsgMS4gKi8KICNkZWZpbmUgVE1QX1JFRzEJKFNMSklUX05VTUJFUl9PRl9SRUdJU1RFUlMgKyAyKQpAQCAtNDIsNyArNDIsNyBAQAogI2RlZmluZSBUTVBfRlJFRzIJKFNMSklUX05VTUJFUl9PRl9GTE9BVF9SRUdJU1RFUlMgKyAxKQogCiAvKiBTZWUgc2xqaXRfZW1pdF9lbnRlciBhbmQgc2xqaXRfZW1pdF9vcDAgaWYgeW91IHdhbnQgdG8gY2hhbmdlIHRoZW0uICovCi1zdGF0aWMgU0xKSVRfQ09OU1Qgc2xqaXRfdWIgcmVnX21hcFtTTEpJVF9OVU1CRVJfT0ZfUkVHSVNURVJTICsgNl0gPSB7CitzdGF0aWMgY29uc3Qgc2xqaXRfdTggcmVnX21hcFtTTEpJVF9OVU1CRVJfT0ZfUkVHSVNURVJTICsgNl0gPSB7CiAJMCwgMCwgMSwgMiwgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgMTMsIDMsIDQsIDE0LCAxNQogfTsKIApAQCAtMTgxLDIxICsxODEsMjEgQEAKICNkZWZpbmUgVlNUUl9GMzIJMHhlZDAwMGEwMAogI2RlZmluZSBWU1VCX0YzMgkweGVlMzAwYTQwCiAKLXN0YXRpYyBzbGppdF9zaSBwdXNoX2luc3QxNihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9pbnMgaW5zdCkKK3N0YXRpYyBzbGppdF9zMzIgcHVzaF9pbnN0MTYoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfaW5zIGluc3QpCiB7Ci0Jc2xqaXRfdWggKnB0cjsKKwlzbGppdF91MTYgKnB0cjsKIAlTTEpJVF9BU1NFUlQoIShpbnN0ICYgMHhmZmZmMDAwMCkpOwogCi0JcHRyID0gKHNsaml0X3VoKillbnN1cmVfYnVmKGNvbXBpbGVyLCBzaXplb2Yoc2xqaXRfdWgpKTsKKwlwdHIgPSAoc2xqaXRfdTE2KillbnN1cmVfYnVmKGNvbXBpbGVyLCBzaXplb2Yoc2xqaXRfdTE2KSk7CiAJRkFJTF9JRighcHRyKTsKIAkqcHRyID0gaW5zdDsKIAljb21waWxlci0+c2l6ZSsrOwogCXJldHVybiBTTEpJVF9TVUNDRVNTOwogfQogCi1zdGF0aWMgc2xqaXRfc2kgcHVzaF9pbnN0MzIoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfaW5zIGluc3QpCitzdGF0aWMgc2xqaXRfczMyIHB1c2hfaW5zdDMyKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X2lucyBpbnN0KQogewotCXNsaml0X3VoICpwdHIgPSAoc2xqaXRfdWgqKWVuc3VyZV9idWYoY29tcGlsZXIsIHNpemVvZihzbGppdF9pbnMpKTsKKwlzbGppdF91MTYgKnB0ciA9IChzbGppdF91MTYqKWVuc3VyZV9idWYoY29tcGlsZXIsIHNpemVvZihzbGppdF9pbnMpKTsKIAlGQUlMX0lGKCFwdHIpOwogCSpwdHIrKyA9IGluc3QgPj4gMTY7CiAJKnB0ciA9IGluc3Q7CkBAIC0yMDMsNyArMjAzLDcgQEAKIAlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKIH0KIAotc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9zaSBlbWl0X2ltbTMyX2NvbnN0KHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIGRzdCwgc2xqaXRfdXcgaW1tKQorc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9zMzIgZW1pdF9pbW0zMl9jb25zdChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgZHN0LCBzbGppdF91dyBpbW0pCiB7CiAJRkFJTF9JRihwdXNoX2luc3QzMihjb21waWxlciwgTU9WVyB8IFJENChkc3QpIHwKIAkJQ09QWV9CSVRTKGltbSwgMTIsIDE2LCA0KSB8IENPUFlfQklUUyhpbW0sIDExLCAyNiwgMSkgfCBDT1BZX0JJVFMoaW1tLCA4LCAxMiwgMykgfCAoaW1tICYgMHhmZikpKTsKQEAgLTIxMSw5ICsyMTEsOSBAQAogCQlDT1BZX0JJVFMoaW1tLCAxMiArIDE2LCAxNiwgNCkgfCBDT1BZX0JJVFMoaW1tLCAxMSArIDE2LCAyNiwgMSkgfCBDT1BZX0JJVFMoaW1tLCA4ICsgMTYsIDEyLCAzKSB8ICgoaW1tICYgMHhmZjAwMDApID4+IDE2KSk7CiB9CiAKLXN0YXRpYyBTTEpJVF9JTkxJTkUgdm9pZCBtb2RpZnlfaW1tMzJfY29uc3Qoc2xqaXRfdWggKmluc3QsIHNsaml0X3V3IG5ld19pbW0pCitzdGF0aWMgU0xKSVRfSU5MSU5FIHZvaWQgbW9kaWZ5X2ltbTMyX2NvbnN0KHNsaml0X3UxNiAqaW5zdCwgc2xqaXRfdXcgbmV3X2ltbSkKIHsKLQlzbGppdF9zaSBkc3QgPSBpbnN0WzFdICYgMHgwZjAwOworCXNsaml0X3MzMiBkc3QgPSBpbnN0WzFdICYgMHgwZjAwOwogCVNMSklUX0FTU0VSVCgoKGluc3RbMF0gJiAweGZiZjApID09IChNT1ZXID4+IDE2KSkgJiYgKChpbnN0WzJdICYgMHhmYmYwKSA9PSAoTU9WVCA+PiAxNikpICYmIGRzdCA9PSAoaW5zdFszXSAmIDB4MGYwMCkpOwogCWluc3RbMF0gPSAoTU9WVyA+PiAxNikgfCBDT1BZX0JJVFMobmV3X2ltbSwgMTIsIDAsIDQpIHwgQ09QWV9CSVRTKG5ld19pbW0sIDExLCAxMCwgMSk7CiAJaW5zdFsxXSA9IGRzdCB8IENPUFlfQklUUyhuZXdfaW1tLCA4LCAxMiwgMykgfCAobmV3X2ltbSAmIDB4ZmYpOwpAQCAtMjIxLDcgKzIyMSw3IEBACiAJaW5zdFszXSA9IGRzdCB8IENPUFlfQklUUyhuZXdfaW1tLCA4ICsgMTYsIDEyLCAzKSB8ICgobmV3X2ltbSAmIDB4ZmYwMDAwKSA+PiAxNik7CiB9CiAKLXN0YXRpYyBTTEpJVF9JTkxJTkUgc2xqaXRfc2kgZGV0ZWN0X2p1bXBfdHlwZShzdHJ1Y3Qgc2xqaXRfanVtcCAqanVtcCwgc2xqaXRfdWggKmNvZGVfcHRyLCBzbGppdF91aCAqY29kZSkKK3N0YXRpYyBTTEpJVF9JTkxJTkUgc2xqaXRfczMyIGRldGVjdF9qdW1wX3R5cGUoc3RydWN0IHNsaml0X2p1bXAgKmp1bXAsIHNsaml0X3UxNiAqY29kZV9wdHIsIHNsaml0X3UxNiAqY29kZSkKIHsKIAlzbGppdF9zdyBkaWZmOwogCkBAIC0yNzgsMTMgKzI3OCwxMyBAQAogCiBzdGF0aWMgU0xKSVRfSU5MSU5FIHZvaWQgc2V0X2p1bXBfaW5zdHJ1Y3Rpb24oc3RydWN0IHNsaml0X2p1bXAgKmp1bXApCiB7Ci0Jc2xqaXRfc2kgdHlwZSA9IChqdW1wLT5mbGFncyA+PiA0KSAmIDB4ZjsKKwlzbGppdF9zMzIgdHlwZSA9IChqdW1wLT5mbGFncyA+PiA0KSAmIDB4ZjsKIAlzbGppdF9zdyBkaWZmOwotCXNsaml0X3VoICpqdW1wX2luc3Q7Ci0Jc2xqaXRfc2kgcywgajEsIGoyOworCXNsaml0X3UxNiAqanVtcF9pbnN0OworCXNsaml0X3MzMiBzLCBqMSwgajI7CiAKIAlpZiAoU0xKSVRfVU5MSUtFTFkodHlwZSA9PSAwKSkgewotCQltb2RpZnlfaW1tMzJfY29uc3QoKHNsaml0X3VoKilqdW1wLT5hZGRyLCAoanVtcC0+ZmxhZ3MgJiBKVU1QX0xBQkVMKSA/IGp1bXAtPnUubGFiZWwtPmFkZHIgOiBqdW1wLT51LnRhcmdldCk7CisJCW1vZGlmeV9pbW0zMl9jb25zdCgoc2xqaXRfdTE2KilqdW1wLT5hZGRyLCAoanVtcC0+ZmxhZ3MgJiBKVU1QX0xBQkVMKSA/IGp1bXAtPnUubGFiZWwtPmFkZHIgOiBqdW1wLT51LnRhcmdldCk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTI5NCw3ICsyOTQsNyBAQAogCX0KIAllbHNlCiAJCWRpZmYgPSAoKHNsaml0X3N3KShqdW1wLT51LmxhYmVsLT5hZGRyKSAtIChzbGppdF9zdykoanVtcC0+YWRkciArIDQpKSA+PiAxOwotCWp1bXBfaW5zdCA9IChzbGppdF91aCopanVtcC0+YWRkcjsKKwlqdW1wX2luc3QgPSAoc2xqaXRfdTE2KilqdW1wLT5hZGRyOwogCiAJc3dpdGNoICh0eXBlKSB7CiAJY2FzZSAxOgpAQCAtMzQyLDEwICszNDIsMTAgQEAKIFNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSB2b2lkKiBzbGppdF9nZW5lcmF0ZV9jb2RlKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIpCiB7CiAJc3RydWN0IHNsaml0X21lbW9yeV9mcmFnbWVudCAqYnVmOwotCXNsaml0X3VoICpjb2RlOwotCXNsaml0X3VoICpjb2RlX3B0cjsKLQlzbGppdF91aCAqYnVmX3B0cjsKLQlzbGppdF91aCAqYnVmX2VuZDsKKwlzbGppdF91MTYgKmNvZGU7CisJc2xqaXRfdTE2ICpjb2RlX3B0cjsKKwlzbGppdF91MTYgKmJ1Zl9wdHI7CisJc2xqaXRfdTE2ICpidWZfZW5kOwogCXNsaml0X3V3IGhhbGZfY291bnQ7CiAKIAlzdHJ1Y3Qgc2xqaXRfbGFiZWwgKmxhYmVsOwpAQCAtMzU2LDcgKzM1Niw3IEBACiAJQ0hFQ0tfUFRSKGNoZWNrX3Nsaml0X2dlbmVyYXRlX2NvZGUoY29tcGlsZXIpKTsKIAlyZXZlcnNlX2J1Zihjb21waWxlcik7CiAKLQljb2RlID0gKHNsaml0X3VoKilTTEpJVF9NQUxMT0NfRVhFQyhjb21waWxlci0+c2l6ZSAqIHNpemVvZihzbGppdF91aCkpOworCWNvZGUgPSAoc2xqaXRfdTE2KilTTEpJVF9NQUxMT0NfRVhFQyhjb21waWxlci0+c2l6ZSAqIHNpemVvZihzbGppdF91MTYpKTsKIAlQVFJfRkFJTF9XSVRIX0VYRUNfSUYoY29kZSk7CiAJYnVmID0gY29tcGlsZXItPmJ1ZjsKIApAQCAtMzY3LDcgKzM2Nyw3IEBACiAJY29uc3RfID0gY29tcGlsZXItPmNvbnN0czsKIAogCWRvIHsKLQkJYnVmX3B0ciA9IChzbGppdF91aCopYnVmLT5tZW1vcnk7CisJCWJ1Zl9wdHIgPSAoc2xqaXRfdTE2KilidWYtPm1lbW9yeTsKIAkJYnVmX2VuZCA9IGJ1Zl9wdHIgKyAoYnVmLT51c2VkX3NpemUgPj4gMSk7CiAJCWRvIHsKIAkJCSpjb2RlX3B0ciA9ICpidWZfcHRyKys7CkBAIC00MTQsNyArNDE0LDcgQEAKIAl9CiAKIAljb21waWxlci0+ZXJyb3IgPSBTTEpJVF9FUlJfQ09NUElMRUQ7Ci0JY29tcGlsZXItPmV4ZWN1dGFibGVfc2l6ZSA9IChjb2RlX3B0ciAtIGNvZGUpICogc2l6ZW9mKHNsaml0X3VoKTsKKwljb21waWxlci0+ZXhlY3V0YWJsZV9zaXplID0gKGNvZGVfcHRyIC0gY29kZSkgKiBzaXplb2Yoc2xqaXRfdTE2KTsKIAlTTEpJVF9DQUNIRV9GTFVTSChjb2RlLCBjb2RlX3B0cik7CiAJLyogU2V0IHRodW1iIG1vZGUgZmxhZy4gKi8KIAlyZXR1cm4gKHZvaWQqKSgoc2xqaXRfdXcpY29kZSB8IDB4MSk7CkBAIC00MjgsNyArNDI4LDcgQEAKIHN0YXRpYyBzbGppdF91dyBnZXRfaW1tKHNsaml0X3V3IGltbSkKIHsKIAkvKiBUaHVtYiBpbW1lZGlhdGUgZm9ybS4gKi8KLQlzbGppdF9zaSBjb3VudGVyOworCXNsaml0X3MzMiBjb3VudGVyOwogCiAJaWYgKGltbSA8PSAweGZmKQogCQlyZXR1cm4gaW1tOwpAQCAtNDc0LDcgKzQ3NCw3IEBACiAJcmV0dXJuICgoaW1tID4+IDI0KSAmIDB4N2YpIHwgQ09QWV9CSVRTKGNvdW50ZXIsIDQsIDI2LCAxKSB8IENPUFlfQklUUyhjb3VudGVyLCAxLCAxMiwgMykgfCBDT1BZX0JJVFMoY291bnRlciwgMCwgNywgMSk7CiB9CiAKLXN0YXRpYyBzbGppdF9zaSBsb2FkX2ltbWVkaWF0ZShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBkc3QsIHNsaml0X3V3IGltbSkKK3N0YXRpYyBzbGppdF9zMzIgbG9hZF9pbW1lZGlhdGUoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIGRzdCwgc2xqaXRfdXcgaW1tKQogewogCXNsaml0X3V3IHRtcDsKIApAQCAtNTA4LDEyICs1MDgsMTIgQEAKICNkZWZpbmUgU0xPV19TUkMxCTB4MDgwMDAwMAogI2RlZmluZSBTTE9XX1NSQzIJMHgxMDAwMDAwCiAKLXN0YXRpYyBzbGppdF9zaSBlbWl0X29wX2ltbShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBmbGFncywgc2xqaXRfc2kgZHN0LCBzbGppdF91dyBhcmcxLCBzbGppdF91dyBhcmcyKQorc3RhdGljIHNsaml0X3MzMiBlbWl0X29wX2ltbShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgZmxhZ3MsIHNsaml0X3MzMiBkc3QsIHNsaml0X3V3IGFyZzEsIHNsaml0X3V3IGFyZzIpCiB7CiAJLyogZHN0IG11c3QgYmUgcmVnaXN0ZXIsIFRNUF9SRUcxCiAJICAgYXJnMSBtdXN0IGJlIHJlZ2lzdGVyLCBUTVBfUkVHMSwgaW1tCiAJICAgYXJnMiBtdXN0IGJlIHJlZ2lzdGVyLCBUTVBfUkVHMiwgaW1tICovCi0Jc2xqaXRfc2kgcmVnOworCXNsaml0X3MzMiByZWc7CiAJc2xqaXRfdXcgaW1tLCBuaW1tOwogCiAJaWYgKFNMSklUX1VOTElLRUxZKChmbGFncyAmIChBUkcxX0lNTSB8IEFSRzJfSU1NKSkgPT0gKEFSRzFfSU1NIHwgQVJHMl9JTU0pKSkgewpAQCAtNjc3LDM3ICs2NzcsMzcgQEAKIAkvKiBCb3RoIGFyZ3VtZW50cyBhcmUgcmVnaXN0ZXJzLiAqLwogCXN3aXRjaCAoZmxhZ3MgJiAweGZmZmYpIHsKIAljYXNlIFNMSklUX01PVjoKLQljYXNlIFNMSklUX01PVl9VSToKLQljYXNlIFNMSklUX01PVl9TSToKKwljYXNlIFNMSklUX01PVl9VMzI6CisJY2FzZSBTTEpJVF9NT1ZfUzMyOgogCWNhc2UgU0xKSVRfTU9WX1A6CiAJY2FzZSBTTEpJVF9NT1ZVOgotCWNhc2UgU0xKSVRfTU9WVV9VSToKLQljYXNlIFNMSklUX01PVlVfU0k6CisJY2FzZSBTTEpJVF9NT1ZVX1UzMjoKKwljYXNlIFNMSklUX01PVlVfUzMyOgogCWNhc2UgU0xKSVRfTU9WVV9QOgogCQlTTEpJVF9BU1NFUlQoIShmbGFncyAmIFNFVF9GTEFHUykgJiYgYXJnMSA9PSBUTVBfUkVHMSk7CiAJCWlmIChkc3QgPT0gYXJnMikKIAkJCXJldHVybiBTTEpJVF9TVUNDRVNTOwogCQlyZXR1cm4gcHVzaF9pbnN0MTYoY29tcGlsZXIsIE1PViB8IFNFVF9SRUdTNDQoZHN0LCBhcmcyKSk7Ci0JY2FzZSBTTEpJVF9NT1ZfVUI6Ci0JY2FzZSBTTEpJVF9NT1ZVX1VCOgorCWNhc2UgU0xKSVRfTU9WX1U4OgorCWNhc2UgU0xKSVRfTU9WVV9VODoKIAkJU0xKSVRfQVNTRVJUKCEoZmxhZ3MgJiBTRVRfRkxBR1MpICYmIGFyZzEgPT0gVE1QX1JFRzEpOwogCQlpZiAoSVNfMl9MT19SRUdTKGRzdCwgYXJnMikpCiAJCQlyZXR1cm4gcHVzaF9pbnN0MTYoY29tcGlsZXIsIFVYVEIgfCBSRDMoZHN0KSB8IFJOMyhhcmcyKSk7CiAJCXJldHVybiBwdXNoX2luc3QzMihjb21waWxlciwgVVhUQl9XIHwgUkQ0KGRzdCkgfCBSTTQoYXJnMikpOwotCWNhc2UgU0xKSVRfTU9WX1NCOgotCWNhc2UgU0xKSVRfTU9WVV9TQjoKKwljYXNlIFNMSklUX01PVl9TODoKKwljYXNlIFNMSklUX01PVlVfUzg6CiAJCVNMSklUX0FTU0VSVCghKGZsYWdzICYgU0VUX0ZMQUdTKSAmJiBhcmcxID09IFRNUF9SRUcxKTsKIAkJaWYgKElTXzJfTE9fUkVHUyhkc3QsIGFyZzIpKQogCQkJcmV0dXJuIHB1c2hfaW5zdDE2KGNvbXBpbGVyLCBTWFRCIHwgUkQzKGRzdCkgfCBSTjMoYXJnMikpOwogCQlyZXR1cm4gcHVzaF9pbnN0MzIoY29tcGlsZXIsIFNYVEJfVyB8IFJENChkc3QpIHwgUk00KGFyZzIpKTsKLQljYXNlIFNMSklUX01PVl9VSDoKLQljYXNlIFNMSklUX01PVlVfVUg6CisJY2FzZSBTTEpJVF9NT1ZfVTE2OgorCWNhc2UgU0xKSVRfTU9WVV9VMTY6CiAJCVNMSklUX0FTU0VSVCghKGZsYWdzICYgU0VUX0ZMQUdTKSAmJiBhcmcxID09IFRNUF9SRUcxKTsKIAkJaWYgKElTXzJfTE9fUkVHUyhkc3QsIGFyZzIpKQogCQkJcmV0dXJuIHB1c2hfaW5zdDE2KGNvbXBpbGVyLCBVWFRIIHwgUkQzKGRzdCkgfCBSTjMoYXJnMikpOwogCQlyZXR1cm4gcHVzaF9pbnN0MzIoY29tcGlsZXIsIFVYVEhfVyB8IFJENChkc3QpIHwgUk00KGFyZzIpKTsKLQljYXNlIFNMSklUX01PVl9TSDoKLQljYXNlIFNMSklUX01PVlVfU0g6CisJY2FzZSBTTEpJVF9NT1ZfUzE2OgorCWNhc2UgU0xKSVRfTU9WVV9TMTY6CiAJCVNMSklUX0FTU0VSVCghKGZsYWdzICYgU0VUX0ZMQUdTKSAmJiBhcmcxID09IFRNUF9SRUcxKTsKIAkJaWYgKElTXzJfTE9fUkVHUyhkc3QsIGFyZzIpKQogCQkJcmV0dXJuIHB1c2hfaW5zdDE2KGNvbXBpbGVyLCBTWFRIIHwgUkQzKGRzdCkgfCBSTjMoYXJnMikpOwpAQCAtODEzLDcgKzgxMyw3IEBACiAgIHMgPSBzdG9yZQogKi8KIAotc3RhdGljIFNMSklUX0NPTlNUIHNsaml0X2lucyBzbGppdF9tZW0xNlsxMl0gPSB7CitzdGF0aWMgY29uc3Qgc2xqaXRfaW5zIHNsaml0X21lbTE2WzEyXSA9IHsKIC8qIHcgdSBsICovIDB4NTgwMCAvKiBsZHIgKi8sCiAvKiB3IHUgcyAqLyAweDUwMDAgLyogc3RyICovLAogLyogdyBzIGwgKi8gMHg1ODAwIC8qIGxkciAqLywKQEAgLTgzMCw3ICs4MzAsNyBAQAogLyogaCBzIHMgKi8gMHg1MjAwIC8qIHN0cmggKi8sCiB9OwogCi1zdGF0aWMgU0xKSVRfQ09OU1Qgc2xqaXRfaW5zIHNsaml0X21lbTE2X2ltbTVbMTJdID0geworc3RhdGljIGNvbnN0IHNsaml0X2lucyBzbGppdF9tZW0xNl9pbW01WzEyXSA9IHsKIC8qIHcgdSBsICovIDB4NjgwMCAvKiBsZHIgaW1tNSAqLywKIC8qIHcgdSBzICovIDB4NjAwMCAvKiBzdHIgaW1tNSAqLywKIC8qIHcgcyBsICovIDB4NjgwMCAvKiBsZHIgaW1tNSAqLywKQEAgLTg0OSw3ICs4NDksNyBAQAogCiAjZGVmaW5lIE1FTV9JTU04CTB4YzAwCiAjZGVmaW5lIE1FTV9JTU0xMgkweDgwMDAwMAotc3RhdGljIFNMSklUX0NPTlNUIHNsaml0X2lucyBzbGppdF9tZW0zMlsxMl0gPSB7CitzdGF0aWMgY29uc3Qgc2xqaXRfaW5zIHNsaml0X21lbTMyWzEyXSA9IHsKIC8qIHcgdSBsICovIDB4Zjg1MDAwMDAgLyogbGRyLncgKi8sCiAvKiB3IHUgcyAqLyAweGY4NDAwMDAwIC8qIHN0ci53ICovLAogLyogdyBzIGwgKi8gMHhmODUwMDAwMCAvKiBsZHIudyAqLywKQEAgLTg2Nyw3ICs4NjcsNyBAQAogfTsKIAogLyogSGVscGVyIGZ1bmN0aW9uLiBEc3Qgc2hvdWxkIGJlIHJlZyArIHZhbHVlLCB1c2luZyBhdCBtb3N0IDEgaW5zdHJ1Y3Rpb24sIGZsYWdzIGRvZXMgbm90IHNldC4gKi8KLXN0YXRpYyBzbGppdF9zaSBlbWl0X3NldF9kZWx0YShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBkc3QsIHNsaml0X3NpIHJlZywgc2xqaXRfc3cgdmFsdWUpCitzdGF0aWMgc2xqaXRfczMyIGVtaXRfc2V0X2RlbHRhKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiBkc3QsIHNsaml0X3MzMiByZWcsIHNsaml0X3N3IHZhbHVlKQogewogCWlmICh2YWx1ZSA+PSAwKSB7CiAJCWlmICh2YWx1ZSA8PSAweGZmZikKQEAgLTg4OCw5ICs4ODgsOSBAQAogfQogCiAvKiBDYW4gcGVyZm9ybSBhbiBvcGVyYXRpb24gdXNpbmcgYXQgbW9zdCAxIGluc3RydWN0aW9uLiAqLwotc3RhdGljIHNsaml0X3NpIGdldHB1dF9hcmdfZmFzdChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBmbGFncywgc2xqaXRfc2kgcmVnLCBzbGppdF9zaSBhcmcsIHNsaml0X3N3IGFyZ3cpCitzdGF0aWMgc2xqaXRfczMyIGdldHB1dF9hcmdfZmFzdChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgZmxhZ3MsIHNsaml0X3MzMiByZWcsIHNsaml0X3MzMiBhcmcsIHNsaml0X3N3IGFyZ3cpCiB7Ci0Jc2xqaXRfc2kgb3RoZXJfciwgc2hpZnQ7CisJc2xqaXRfczMyIG90aGVyX3IsIHNoaWZ0OwogCiAJU0xKSVRfQVNTRVJUKGFyZyAmIFNMSklUX01FTSk7CiAKQEAgLTk3NSw3ICs5NzUsNyBAQAogLyogc2VlIGdldHB1dF9hcmcgYmVsb3cuCiAgICBOb3RlOiBjYW5fY2FjaGUgaXMgY2FsbGVkIG9ubHkgZm9yIGJpbmFyeSBvcGVyYXRvcnMuIFRob3NlCiAgICBvcGVyYXRvcnMgYWx3YXlzIHVzZXMgd29yZCBhcmd1bWVudHMgd2l0aG91dCB3cml0ZSBiYWNrLiAqLwotc3RhdGljIHNsaml0X3NpIGNhbl9jYWNoZShzbGppdF9zaSBhcmcsIHNsaml0X3N3IGFyZ3csIHNsaml0X3NpIG5leHRfYXJnLCBzbGppdF9zdyBuZXh0X2FyZ3cpCitzdGF0aWMgc2xqaXRfczMyIGNhbl9jYWNoZShzbGppdF9zMzIgYXJnLCBzbGppdF9zdyBhcmd3LCBzbGppdF9zMzIgbmV4dF9hcmcsIHNsaml0X3N3IG5leHRfYXJndykKIHsKIAlzbGppdF9zdyBkaWZmOwogCWlmICgoYXJnICYgT0ZGU19SRUdfTUFTSykgfHwgIShuZXh0X2FyZyAmIFNMSklUX01FTSkpCkBAIC05OTksMTAgKzk5OSwxMCBAQAogfQogCiAvKiBFbWl0IHRoZSBuZWNlc3NhcnkgaW5zdHJ1Y3Rpb25zLiBTZWUgY2FuX2NhY2hlIGFib3ZlLiAqLwotc3RhdGljIHNsaml0X3NpIGdldHB1dF9hcmcoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgZmxhZ3MsIHNsaml0X3NpIHJlZywKLQlzbGppdF9zaSBhcmcsIHNsaml0X3N3IGFyZ3csIHNsaml0X3NpIG5leHRfYXJnLCBzbGppdF9zdyBuZXh0X2FyZ3cpCitzdGF0aWMgc2xqaXRfczMyIGdldHB1dF9hcmcoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIGZsYWdzLCBzbGppdF9zMzIgcmVnLAorCXNsaml0X3MzMiBhcmcsIHNsaml0X3N3IGFyZ3csIHNsaml0X3MzMiBuZXh0X2FyZywgc2xqaXRfc3cgbmV4dF9hcmd3KQogewotCXNsaml0X3NpIHRtcF9yLCBvdGhlcl9yOworCXNsaml0X3MzMiB0bXBfciwgb3RoZXJfcjsKIAlzbGppdF9zdyBkaWZmOwogCiAJU0xKSVRfQVNTRVJUKGFyZyAmIFNMSklUX01FTSk7CkBAIC0xMTA3LDcgKzExMDcsNyBAQAogCXJldHVybiBwdXNoX2luc3QzMihjb21waWxlciwgc2xqaXRfbWVtMzJbZmxhZ3NdIHwgTUVNX0lNTTEyIHwgUlQ0KHJlZykgfCBSTjQoVE1QX1JFRzMpIHwgMCk7CiB9CiAKLXN0YXRpYyBTTEpJVF9JTkxJTkUgc2xqaXRfc2kgZW1pdF9vcF9tZW0oc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgZmxhZ3MsIHNsaml0X3NpIHJlZywgc2xqaXRfc2kgYXJnLCBzbGppdF9zdyBhcmd3KQorc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9zMzIgZW1pdF9vcF9tZW0oc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIGZsYWdzLCBzbGppdF9zMzIgcmVnLCBzbGppdF9zMzIgYXJnLCBzbGppdF9zdyBhcmd3KQogewogCWlmIChnZXRwdXRfYXJnX2Zhc3QoY29tcGlsZXIsIGZsYWdzLCByZWcsIGFyZywgYXJndykpCiAJCXJldHVybiBjb21waWxlci0+ZXJyb3I7CkBAIC0xMTE2LDcgKzExMTYsNyBAQAogCXJldHVybiBnZXRwdXRfYXJnKGNvbXBpbGVyLCBmbGFncywgcmVnLCBhcmcsIGFyZ3csIDAsIDApOwogfQogCi1zdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X3NpIGVtaXRfb3BfbWVtMihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBmbGFncywgc2xqaXRfc2kgcmVnLCBzbGppdF9zaSBhcmcxLCBzbGppdF9zdyBhcmcxdywgc2xqaXRfc2kgYXJnMiwgc2xqaXRfc3cgYXJnMncpCitzdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X3MzMiBlbWl0X29wX21lbTIoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIGZsYWdzLCBzbGppdF9zMzIgcmVnLCBzbGppdF9zMzIgYXJnMSwgc2xqaXRfc3cgYXJnMXcsIHNsaml0X3MzMiBhcmcyLCBzbGppdF9zdyBhcmcydykKIHsKIAlpZiAoZ2V0cHV0X2FyZ19mYXN0KGNvbXBpbGVyLCBmbGFncywgcmVnLCBhcmcxLCBhcmcxdykpCiAJCXJldHVybiBjb21waWxlci0+ZXJyb3I7CkBAIC0xMTI3LDExICsxMTI3LDExIEBACiAvKiAgRW50cnksIGV4aXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1TTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9lbnRlcihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLAotCXNsaml0X3NpIG9wdGlvbnMsIHNsaml0X3NpIGFyZ3MsIHNsaml0X3NpIHNjcmF0Y2hlcywgc2xqaXRfc2kgc2F2ZWRzLAotCXNsaml0X3NpIGZzY3JhdGNoZXMsIHNsaml0X3NpIGZzYXZlZHMsIHNsaml0X3NpIGxvY2FsX3NpemUpCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfczMyIHNsaml0X2VtaXRfZW50ZXIoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwKKwlzbGppdF9zMzIgb3B0aW9ucywgc2xqaXRfczMyIGFyZ3MsIHNsaml0X3MzMiBzY3JhdGNoZXMsIHNsaml0X3MzMiBzYXZlZHMsCisJc2xqaXRfczMyIGZzY3JhdGNoZXMsIHNsaml0X3MzMiBmc2F2ZWRzLCBzbGppdF9zMzIgbG9jYWxfc2l6ZSkKIHsKLQlzbGppdF9zaSBzaXplLCBpLCB0bXA7CisJc2xqaXRfczMyIHNpemUsIGksIHRtcDsKIAlzbGppdF9pbnMgcHVzaDsKIAogCUNIRUNLX0VSUk9SKCk7CkBAIC0xMTcyLDExICsxMTcyLDExIEBACiAJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CiB9CiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9zZXRfY29udGV4dChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLAotCXNsaml0X3NpIG9wdGlvbnMsIHNsaml0X3NpIGFyZ3MsIHNsaml0X3NpIHNjcmF0Y2hlcywgc2xqaXRfc2kgc2F2ZWRzLAotCXNsaml0X3NpIGZzY3JhdGNoZXMsIHNsaml0X3NpIGZzYXZlZHMsIHNsaml0X3NpIGxvY2FsX3NpemUpCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfczMyIHNsaml0X3NldF9jb250ZXh0KHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsCisJc2xqaXRfczMyIG9wdGlvbnMsIHNsaml0X3MzMiBhcmdzLCBzbGppdF9zMzIgc2NyYXRjaGVzLCBzbGppdF9zMzIgc2F2ZWRzLAorCXNsaml0X3MzMiBmc2NyYXRjaGVzLCBzbGppdF9zMzIgZnNhdmVkcywgc2xqaXRfczMyIGxvY2FsX3NpemUpCiB7Ci0Jc2xqaXRfc2kgc2l6ZTsKKwlzbGppdF9zMzIgc2l6ZTsKIAogCUNIRUNLX0VSUk9SKCk7CiAJQ0hFQ0soY2hlY2tfc2xqaXRfc2V0X2NvbnRleHQoY29tcGlsZXIsIG9wdGlvbnMsIGFyZ3MsIHNjcmF0Y2hlcywgc2F2ZWRzLCBmc2NyYXRjaGVzLCBmc2F2ZWRzLCBsb2NhbF9zaXplKSk7CkBAIC0xMTg3LDkgKzExODcsOSBAQAogCXJldHVybiBTTEpJVF9TVUNDRVNTOwogfQogCi1TTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9yZXR1cm4oc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsIHNsaml0X3NpIHNyYywgc2xqaXRfc3cgc3JjdykKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zMzIgc2xqaXRfZW1pdF9yZXR1cm4oc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIG9wLCBzbGppdF9zMzIgc3JjLCBzbGppdF9zdyBzcmN3KQogewotCXNsaml0X3NpIGksIHRtcDsKKwlzbGppdF9zMzIgaSwgdG1wOwogCXNsaml0X2lucyBwb3A7CiAKIAlDSEVDS19FUlJPUigpOwpAQCAtMTIzNyw3ICsxMjM3LDcgQEAKIH0KICNlbmRpZgogCi1TTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9vcDAoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3ApCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfczMyIHNsaml0X2VtaXRfb3AwKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiBvcCkKIHsKIAlzbGppdF9zdyBzYXZlZF9yZWdfbGlzdFszXTsKIAlzbGppdF9zdyBzYXZlZF9yZWdfY291bnQ7CkBAIC0xMjUxLDE4ICsxMjUxLDE4IEBACiAJCXJldHVybiBwdXNoX2luc3QxNihjb21waWxlciwgQktQVCk7CiAJY2FzZSBTTEpJVF9OT1A6CiAJCXJldHVybiBwdXNoX2luc3QxNihjb21waWxlciwgTk9QKTsKLQljYXNlIFNMSklUX0xVTVVMOgotCWNhc2UgU0xKSVRfTFNNVUw6Ci0JCXJldHVybiBwdXNoX2luc3QzMihjb21waWxlciwgKG9wID09IFNMSklUX0xVTVVMID8gVU1VTEwgOiBTTVVMTCkKKwljYXNlIFNMSklUX0xNVUxfVVc6CisJY2FzZSBTTEpJVF9MTVVMX1NXOgorCQlyZXR1cm4gcHVzaF9pbnN0MzIoY29tcGlsZXIsIChvcCA9PSBTTEpJVF9MTVVMX1VXID8gVU1VTEwgOiBTTVVMTCkKIAkJCXwgKHJlZ19tYXBbU0xKSVRfUjFdIDw8IDgpCiAJCQl8IChyZWdfbWFwW1NMSklUX1IwXSA8PCAxMikKIAkJCXwgKHJlZ19tYXBbU0xKSVRfUjBdIDw8IDE2KQogCQkJfCByZWdfbWFwW1NMSklUX1IxXSk7Ci0JY2FzZSBTTEpJVF9VRElWTU9EOgotCWNhc2UgU0xKSVRfU0RJVk1PRDoKLQljYXNlIFNMSklUX1VESVZJOgotCWNhc2UgU0xKSVRfU0RJVkk6Ci0JCVNMSklUX0NPTVBJTEVfQVNTRVJUKChTTEpJVF9VRElWTU9EICYgMHgyKSA9PSAwICYmIFNMSklUX1VESVZJIC0gMHgyID09IFNMSklUX1VESVZNT0QsIGJhZF9kaXZfb3Bjb2RlX2Fzc2lnbm1lbnRzKTsKKwljYXNlIFNMSklUX0RJVk1PRF9VVzoKKwljYXNlIFNMSklUX0RJVk1PRF9TVzoKKwljYXNlIFNMSklUX0RJVl9VVzoKKwljYXNlIFNMSklUX0RJVl9TVzoKKwkJU0xKSVRfQ09NUElMRV9BU1NFUlQoKFNMSklUX0RJVk1PRF9VVyAmIDB4MikgPT0gMCAmJiBTTEpJVF9ESVZfVVcgLSAweDIgPT0gU0xKSVRfRElWTU9EX1VXLCBiYWRfZGl2X29wY29kZV9hc3NpZ25tZW50cyk7CiAJCVNMSklUX0NPTVBJTEVfQVNTRVJUKHJlZ19tYXBbMl0gPT0gMSAmJiByZWdfbWFwWzNdID09IDIgJiYgcmVnX21hcFs0XSA9PSAxMiwgYmFkX3JlZ2lzdGVyX21hcHBpbmcpOwogCiAJCXNhdmVkX3JlZ19jb3VudCA9IDA7CkBAIC0xMjcwLDcgKzEyNzAsNyBAQAogCQkJc2F2ZWRfcmVnX2xpc3Rbc2F2ZWRfcmVnX2NvdW50KytdID0gMTI7CiAJCWlmIChjb21waWxlci0+c2NyYXRjaGVzID49IDMpCiAJCQlzYXZlZF9yZWdfbGlzdFtzYXZlZF9yZWdfY291bnQrK10gPSAyOwotCQlpZiAob3AgPj0gU0xKSVRfVURJVkkpCisJCWlmIChvcCA+PSBTTEpJVF9ESVZfVVcpCiAJCQlzYXZlZF9yZWdfbGlzdFtzYXZlZF9yZWdfY291bnQrK10gPSAxOwogCiAJCWlmIChzYXZlZF9yZWdfY291bnQgPiAwKSB7CkBAIC0xMjg4LDcgKzEyODgsNyBAQAogCiAjaWYgZGVmaW5lZChfX0dOVUNfXykKIAkJRkFJTF9JRihzbGppdF9lbWl0X2lqdW1wKGNvbXBpbGVyLCBTTEpJVF9GQVNUX0NBTEwsIFNMSklUX0lNTSwKLQkJCSgob3AgfCAweDIpID09IFNMSklUX1VESVZJID8gU0xKSVRfRlVOQ19PRkZTRVQoX19hZWFiaV91aWRpdm1vZCkgOiBTTEpJVF9GVU5DX09GRlNFVChfX2FlYWJpX2lkaXZtb2QpKSkpOworCQkJKChvcCB8IDB4MikgPT0gU0xKSVRfRElWX1VXID8gU0xKSVRfRlVOQ19PRkZTRVQoX19hZWFiaV91aWRpdm1vZCkgOiBTTEpJVF9GVU5DX09GRlNFVChfX2FlYWJpX2lkaXZtb2QpKSkpOwogI2Vsc2UKICNlcnJvciAiU29mdHdhcmUgZGl2bW9kIGZ1bmN0aW9ucyBhcmUgbmVlZGVkIgogI2VuZGlmCkBAIC0xMzExLDEyICsxMzExLDEyIEBACiAJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CiB9CiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X29wMShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwKLQlzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsCi0Jc2xqaXRfc2kgc3JjLCBzbGppdF9zdyBzcmN3KQorU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3MzMiBzbGppdF9lbWl0X29wMShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgb3AsCisJc2xqaXRfczMyIGRzdCwgc2xqaXRfc3cgZHN0dywKKwlzbGppdF9zMzIgc3JjLCBzbGppdF9zdyBzcmN3KQogewotCXNsaml0X3NpIGRzdF9yLCBmbGFnczsKLQlzbGppdF9zaSBvcF9mbGFncyA9IEdFVF9BTExfRkxBR1Mob3ApOworCXNsaml0X3MzMiBkc3RfciwgZmxhZ3M7CisJc2xqaXRfczMyIG9wX2ZsYWdzID0gR0VUX0FMTF9GTEFHUyhvcCk7CiAKIAlDSEVDS19FUlJPUigpOwogCUNIRUNLKGNoZWNrX3Nsaml0X2VtaXRfb3AxKGNvbXBpbGVyLCBvcCwgZHN0LCBkc3R3LCBzcmMsIHNyY3cpKTsKQEAgLTEzMzIsNTYgKzEzMzIsNTYgQEAKIAlpZiAob3AgPj0gU0xKSVRfTU9WICYmIG9wIDw9IFNMSklUX01PVlVfUCkgewogCQlzd2l0Y2ggKG9wKSB7CiAJCWNhc2UgU0xKSVRfTU9WOgotCQljYXNlIFNMSklUX01PVl9VSToKLQkJY2FzZSBTTEpJVF9NT1ZfU0k6CisJCWNhc2UgU0xKSVRfTU9WX1UzMjoKKwkJY2FzZSBTTEpJVF9NT1ZfUzMyOgogCQljYXNlIFNMSklUX01PVl9QOgogCQkJZmxhZ3MgPSBXT1JEX1NJWkU7CiAJCQlicmVhazsKLQkJY2FzZSBTTEpJVF9NT1ZfVUI6CisJCWNhc2UgU0xKSVRfTU9WX1U4OgogCQkJZmxhZ3MgPSBCWVRFX1NJWkU7CiAJCQlpZiAoc3JjICYgU0xKSVRfSU1NKQotCQkJCXNyY3cgPSAoc2xqaXRfdWIpc3JjdzsKKwkJCQlzcmN3ID0gKHNsaml0X3U4KXNyY3c7CiAJCQlicmVhazsKLQkJY2FzZSBTTEpJVF9NT1ZfU0I6CisJCWNhc2UgU0xKSVRfTU9WX1M4OgogCQkJZmxhZ3MgPSBCWVRFX1NJWkUgfCBTSUdORUQ7CiAJCQlpZiAoc3JjICYgU0xKSVRfSU1NKQotCQkJCXNyY3cgPSAoc2xqaXRfc2Ipc3JjdzsKKwkJCQlzcmN3ID0gKHNsaml0X3M4KXNyY3c7CiAJCQlicmVhazsKLQkJY2FzZSBTTEpJVF9NT1ZfVUg6CisJCWNhc2UgU0xKSVRfTU9WX1UxNjoKIAkJCWZsYWdzID0gSEFMRl9TSVpFOwogCQkJaWYgKHNyYyAmIFNMSklUX0lNTSkKLQkJCQlzcmN3ID0gKHNsaml0X3VoKXNyY3c7CisJCQkJc3JjdyA9IChzbGppdF91MTYpc3JjdzsKIAkJCWJyZWFrOwotCQljYXNlIFNMSklUX01PVl9TSDoKKwkJY2FzZSBTTEpJVF9NT1ZfUzE2OgogCQkJZmxhZ3MgPSBIQUxGX1NJWkUgfCBTSUdORUQ7CiAJCQlpZiAoc3JjICYgU0xKSVRfSU1NKQotCQkJCXNyY3cgPSAoc2xqaXRfc2gpc3JjdzsKKwkJCQlzcmN3ID0gKHNsaml0X3MxNilzcmN3OwogCQkJYnJlYWs7CiAJCWNhc2UgU0xKSVRfTU9WVToKLQkJY2FzZSBTTEpJVF9NT1ZVX1VJOgotCQljYXNlIFNMSklUX01PVlVfU0k6CisJCWNhc2UgU0xKSVRfTU9WVV9VMzI6CisJCWNhc2UgU0xKSVRfTU9WVV9TMzI6CiAJCWNhc2UgU0xKSVRfTU9WVV9QOgogCQkJZmxhZ3MgPSBXT1JEX1NJWkUgfCBVUERBVEU7CiAJCQlicmVhazsKLQkJY2FzZSBTTEpJVF9NT1ZVX1VCOgorCQljYXNlIFNMSklUX01PVlVfVTg6CiAJCQlmbGFncyA9IEJZVEVfU0laRSB8IFVQREFURTsKIAkJCWlmIChzcmMgJiBTTEpJVF9JTU0pCi0JCQkJc3JjdyA9IChzbGppdF91YilzcmN3OworCQkJCXNyY3cgPSAoc2xqaXRfdTgpc3JjdzsKIAkJCWJyZWFrOwotCQljYXNlIFNMSklUX01PVlVfU0I6CisJCWNhc2UgU0xKSVRfTU9WVV9TODoKIAkJCWZsYWdzID0gQllURV9TSVpFIHwgU0lHTkVEIHwgVVBEQVRFOwogCQkJaWYgKHNyYyAmIFNMSklUX0lNTSkKLQkJCQlzcmN3ID0gKHNsaml0X3NiKXNyY3c7CisJCQkJc3JjdyA9IChzbGppdF9zOClzcmN3OwogCQkJYnJlYWs7Ci0JCWNhc2UgU0xKSVRfTU9WVV9VSDoKKwkJY2FzZSBTTEpJVF9NT1ZVX1UxNjoKIAkJCWZsYWdzID0gSEFMRl9TSVpFIHwgVVBEQVRFOwogCQkJaWYgKHNyYyAmIFNMSklUX0lNTSkKLQkJCQlzcmN3ID0gKHNsaml0X3VoKXNyY3c7CisJCQkJc3JjdyA9IChzbGppdF91MTYpc3JjdzsKIAkJCWJyZWFrOwotCQljYXNlIFNMSklUX01PVlVfU0g6CisJCWNhc2UgU0xKSVRfTU9WVV9TMTY6CiAJCQlmbGFncyA9IEhBTEZfU0laRSB8IFNJR05FRCB8IFVQREFURTsKIAkJCWlmIChzcmMgJiBTTEpJVF9JTU0pCi0JCQkJc3JjdyA9IChzbGppdF9zaClzcmN3OworCQkJCXNyY3cgPSAoc2xqaXRfczE2KXNyY3c7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCVNMSklUX0FTU0VSVF9TVE9QKCk7CkBAIC0xNDQ0LDEyICsxNDQ0LDEyIEBACiAJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CiB9CiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X29wMihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwKLQlzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsCi0Jc2xqaXRfc2kgc3JjMSwgc2xqaXRfc3cgc3JjMXcsCi0Jc2xqaXRfc2kgc3JjMiwgc2xqaXRfc3cgc3JjMncpCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfczMyIHNsaml0X2VtaXRfb3AyKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiBvcCwKKwlzbGppdF9zMzIgZHN0LCBzbGppdF9zdyBkc3R3LAorCXNsaml0X3MzMiBzcmMxLCBzbGppdF9zdyBzcmMxdywKKwlzbGppdF9zMzIgc3JjMiwgc2xqaXRfc3cgc3JjMncpCiB7Ci0Jc2xqaXRfc2kgZHN0X3IsIGZsYWdzOworCXNsaml0X3MzMiBkc3RfciwgZmxhZ3M7CiAKIAlDSEVDS19FUlJPUigpOwogCUNIRUNLKGNoZWNrX3Nsaml0X2VtaXRfb3AyKGNvbXBpbGVyLCBvcCwgZHN0LCBkc3R3LCBzcmMxLCBzcmMxdywgc3JjMiwgc3JjMncpKTsKQEAgLTE1MjMsMjYgKzE1MjMsMjYgQEAKIAlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKIH0KIAotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2dldF9yZWdpc3Rlcl9pbmRleChzbGppdF9zaSByZWcpCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfczMyIHNsaml0X2dldF9yZWdpc3Rlcl9pbmRleChzbGppdF9zMzIgcmVnKQogewogCUNIRUNLX1JFR19JTkRFWChjaGVja19zbGppdF9nZXRfcmVnaXN0ZXJfaW5kZXgocmVnKSk7CiAJcmV0dXJuIHJlZ19tYXBbcmVnXTsKIH0KIAotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2dldF9mbG9hdF9yZWdpc3Rlcl9pbmRleChzbGppdF9zaSByZWcpCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfczMyIHNsaml0X2dldF9mbG9hdF9yZWdpc3Rlcl9pbmRleChzbGppdF9zMzIgcmVnKQogewogCUNIRUNLX1JFR19JTkRFWChjaGVja19zbGppdF9nZXRfZmxvYXRfcmVnaXN0ZXJfaW5kZXgocmVnKSk7CiAJcmV0dXJuIHJlZyA8PCAxOwogfQogCi1TTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9vcF9jdXN0b20oc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwKLQl2b2lkICppbnN0cnVjdGlvbiwgc2xqaXRfc2kgc2l6ZSkKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zMzIgc2xqaXRfZW1pdF9vcF9jdXN0b20oc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwKKwl2b2lkICppbnN0cnVjdGlvbiwgc2xqaXRfczMyIHNpemUpCiB7CiAJQ0hFQ0tfRVJST1IoKTsKIAlDSEVDSyhjaGVja19zbGppdF9lbWl0X29wX2N1c3RvbShjb21waWxlciwgaW5zdHJ1Y3Rpb24sIHNpemUpKTsKIAogCWlmIChzaXplID09IDIpCi0JCXJldHVybiBwdXNoX2luc3QxNihjb21waWxlciwgKihzbGppdF91aCopaW5zdHJ1Y3Rpb24pOworCQlyZXR1cm4gcHVzaF9pbnN0MTYoY29tcGlsZXIsICooc2xqaXRfdTE2KilpbnN0cnVjdGlvbik7CiAJcmV0dXJuIHB1c2hfaW5zdDMyKGNvbXBpbGVyLCAqKHNsaml0X2lucyopaW5zdHJ1Y3Rpb24pOwogfQogCkBAIC0xNTUwLDcgKzE1NTAsNyBAQAogLyogIEZsb2F0aW5nIHBvaW50IG9wZXJhdG9ycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2lzX2ZwdV9hdmFpbGFibGUodm9pZCkKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zMzIgc2xqaXRfaXNfZnB1X2F2YWlsYWJsZSh2b2lkKQogewogI2lmZGVmIFNMSklUX0lTX0ZQVV9BVkFJTEFCTEUKIAlyZXR1cm4gU0xKSVRfSVNfRlBVX0FWQUlMQUJMRTsKQEAgLTE1NjIsMTEgKzE1NjIsMTEgQEAKIAogI2RlZmluZSBGUFVfTE9BRCAoMSA8PCAyMCkKIAotc3RhdGljIHNsaml0X3NpIGVtaXRfZm9wX21lbShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBmbGFncywgc2xqaXRfc2kgcmVnLCBzbGppdF9zaSBhcmcsIHNsaml0X3N3IGFyZ3cpCitzdGF0aWMgc2xqaXRfczMyIGVtaXRfZm9wX21lbShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgZmxhZ3MsIHNsaml0X3MzMiByZWcsIHNsaml0X3MzMiBhcmcsIHNsaml0X3N3IGFyZ3cpCiB7CiAJc2xqaXRfc3cgdG1wOwogCXNsaml0X3V3IGltbTsKLQlzbGppdF9zdyBpbnN0ID0gVlNUUl9GMzIgfCAoZmxhZ3MgJiAoU0xKSVRfU0lOR0xFX09QIHwgRlBVX0xPQUQpKTsKKwlzbGppdF9zdyBpbnN0ID0gVlNUUl9GMzIgfCAoZmxhZ3MgJiAoU0xKSVRfRjMyX09QIHwgRlBVX0xPQUQpKTsKIAogCVNMSklUX0FTU0VSVChhcmcgJiBTTEpJVF9NRU0pOwogCkBAIC0xNjI2LDE2ICsxNjI2LDE2IEBACiAJcmV0dXJuIHB1c2hfaW5zdDMyKGNvbXBpbGVyLCBpbnN0IHwgMHg4MDAwMDAgfCBSTjQoVE1QX1JFRzMpIHwgREQ0KHJlZykpOwogfQogCi1zdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X3NpIHNsaml0X2VtaXRfZm9wMV9jb252d19mcm9tZChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwKLQlzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsCi0Jc2xqaXRfc2kgc3JjLCBzbGppdF9zdyBzcmN3KQorc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9zMzIgc2xqaXRfZW1pdF9mb3AxX2NvbnZfc3dfZnJvbV9mNjQoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIG9wLAorCXNsaml0X3MzMiBkc3QsIHNsaml0X3N3IGRzdHcsCisJc2xqaXRfczMyIHNyYywgc2xqaXRfc3cgc3JjdykKIHsKIAlpZiAoc3JjICYgU0xKSVRfTUVNKSB7Ci0JCUZBSUxfSUYoZW1pdF9mb3BfbWVtKGNvbXBpbGVyLCAob3AgJiBTTEpJVF9TSU5HTEVfT1ApIHwgRlBVX0xPQUQsIFRNUF9GUkVHMSwgc3JjLCBzcmN3KSk7CisJCUZBSUxfSUYoZW1pdF9mb3BfbWVtKGNvbXBpbGVyLCAob3AgJiBTTEpJVF9GMzJfT1ApIHwgRlBVX0xPQUQsIFRNUF9GUkVHMSwgc3JjLCBzcmN3KSk7CiAJCXNyYyA9IFRNUF9GUkVHMTsKIAl9CiAKLQlGQUlMX0lGKHB1c2hfaW5zdDMyKGNvbXBpbGVyLCBWQ1ZUX1MzMl9GMzIgfCAob3AgJiBTTEpJVF9TSU5HTEVfT1ApIHwgREQ0KFRNUF9GUkVHMSkgfCBETTQoc3JjKSkpOworCUZBSUxfSUYocHVzaF9pbnN0MzIoY29tcGlsZXIsIFZDVlRfUzMyX0YzMiB8IChvcCAmIFNMSklUX0YzMl9PUCkgfCBERDQoVE1QX0ZSRUcxKSB8IERNNChzcmMpKSk7CiAKIAlpZiAoZHN0ID09IFNMSklUX1VOVVNFRCkKIAkJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CkBAIC0xNjQ3LDExICsxNjQ3LDExIEBACiAJcmV0dXJuIGVtaXRfZm9wX21lbShjb21waWxlciwgMCwgVE1QX0ZSRUcxLCBkc3QsIGRzdHcpOwogfQogCi1zdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X3NpIHNsaml0X2VtaXRfZm9wMV9jb252ZF9mcm9tdyhzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwKLQlzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsCi0Jc2xqaXRfc2kgc3JjLCBzbGppdF9zdyBzcmN3KQorc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9zMzIgc2xqaXRfZW1pdF9mb3AxX2NvbnZfZjY0X2Zyb21fc3coc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIG9wLAorCXNsaml0X3MzMiBkc3QsIHNsaml0X3N3IGRzdHcsCisJc2xqaXRfczMyIHNyYywgc2xqaXRfc3cgc3JjdykKIHsKLQlzbGppdF9zaSBkc3RfciA9IEZBU1RfSVNfUkVHKGRzdCkgPyBkc3QgOiBUTVBfRlJFRzE7CisJc2xqaXRfczMyIGRzdF9yID0gRkFTVF9JU19SRUcoZHN0KSA/IGRzdCA6IFRNUF9GUkVHMTsKIAogCWlmIChGQVNUX0lTX1JFRyhzcmMpKQogCQlGQUlMX0lGKHB1c2hfaW5zdDMyKGNvbXBpbGVyLCBWTU9WIHwgUlQ0KHNyYykgfCBETjQoVE1QX0ZSRUcxKSkpOwpAQCAtMTY2NCw4NSArMTY2NCw4NSBAQAogCQlGQUlMX0lGKHB1c2hfaW5zdDMyKGNvbXBpbGVyLCBWTU9WIHwgUlQ0KFRNUF9SRUcxKSB8IERONChUTVBfRlJFRzEpKSk7CiAJfQogCi0JRkFJTF9JRihwdXNoX2luc3QzMihjb21waWxlciwgVkNWVF9GMzJfUzMyIHwgKG9wICYgU0xKSVRfU0lOR0xFX09QKSB8IERENChkc3RfcikgfCBETTQoVE1QX0ZSRUcxKSkpOworCUZBSUxfSUYocHVzaF9pbnN0MzIoY29tcGlsZXIsIFZDVlRfRjMyX1MzMiB8IChvcCAmIFNMSklUX0YzMl9PUCkgfCBERDQoZHN0X3IpIHwgRE00KFRNUF9GUkVHMSkpKTsKIAogCWlmIChkc3QgJiBTTEpJVF9NRU0pCi0JCXJldHVybiBlbWl0X2ZvcF9tZW0oY29tcGlsZXIsIChvcCAmIFNMSklUX1NJTkdMRV9PUCksIFRNUF9GUkVHMSwgZHN0LCBkc3R3KTsKKwkJcmV0dXJuIGVtaXRfZm9wX21lbShjb21waWxlciwgKG9wICYgU0xKSVRfRjMyX09QKSwgVE1QX0ZSRUcxLCBkc3QsIGRzdHcpOwogCXJldHVybiBTTEpJVF9TVUNDRVNTOwogfQogCi1zdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X3NpIHNsaml0X2VtaXRfZm9wMV9jbXAoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsCi0Jc2xqaXRfc2kgc3JjMSwgc2xqaXRfc3cgc3JjMXcsCi0Jc2xqaXRfc2kgc3JjMiwgc2xqaXRfc3cgc3JjMncpCitzdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X3MzMiBzbGppdF9lbWl0X2ZvcDFfY21wKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiBvcCwKKwlzbGppdF9zMzIgc3JjMSwgc2xqaXRfc3cgc3JjMXcsCisJc2xqaXRfczMyIHNyYzIsIHNsaml0X3N3IHNyYzJ3KQogewogCWlmIChzcmMxICYgU0xKSVRfTUVNKSB7Ci0JCWVtaXRfZm9wX21lbShjb21waWxlciwgKG9wICYgU0xKSVRfU0lOR0xFX09QKSB8IEZQVV9MT0FELCBUTVBfRlJFRzEsIHNyYzEsIHNyYzF3KTsKKwkJZW1pdF9mb3BfbWVtKGNvbXBpbGVyLCAob3AgJiBTTEpJVF9GMzJfT1ApIHwgRlBVX0xPQUQsIFRNUF9GUkVHMSwgc3JjMSwgc3JjMXcpOwogCQlzcmMxID0gVE1QX0ZSRUcxOwogCX0KIAogCWlmIChzcmMyICYgU0xKSVRfTUVNKSB7Ci0JCWVtaXRfZm9wX21lbShjb21waWxlciwgKG9wICYgU0xKSVRfU0lOR0xFX09QKSB8IEZQVV9MT0FELCBUTVBfRlJFRzIsIHNyYzIsIHNyYzJ3KTsKKwkJZW1pdF9mb3BfbWVtKGNvbXBpbGVyLCAob3AgJiBTTEpJVF9GMzJfT1ApIHwgRlBVX0xPQUQsIFRNUF9GUkVHMiwgc3JjMiwgc3JjMncpOwogCQlzcmMyID0gVE1QX0ZSRUcyOwogCX0KIAotCUZBSUxfSUYocHVzaF9pbnN0MzIoY29tcGlsZXIsIFZDTVBfRjMyIHwgKG9wICYgU0xKSVRfU0lOR0xFX09QKSB8IERENChzcmMxKSB8IERNNChzcmMyKSkpOworCUZBSUxfSUYocHVzaF9pbnN0MzIoY29tcGlsZXIsIFZDTVBfRjMyIHwgKG9wICYgU0xKSVRfRjMyX09QKSB8IERENChzcmMxKSB8IERNNChzcmMyKSkpOwogCXJldHVybiBwdXNoX2luc3QzMihjb21waWxlciwgVk1SUyk7CiB9CiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X2ZvcDEoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsCi0Jc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3LAotCXNsaml0X3NpIHNyYywgc2xqaXRfc3cgc3JjdykKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zMzIgc2xqaXRfZW1pdF9mb3AxKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiBvcCwKKwlzbGppdF9zMzIgZHN0LCBzbGppdF9zdyBkc3R3LAorCXNsaml0X3MzMiBzcmMsIHNsaml0X3N3IHNyY3cpCiB7Ci0Jc2xqaXRfc2kgZHN0X3I7CisJc2xqaXRfczMyIGRzdF9yOwogCiAJQ0hFQ0tfRVJST1IoKTsKIAljb21waWxlci0+Y2FjaGVfYXJnID0gMDsKIAljb21waWxlci0+Y2FjaGVfYXJndyA9IDA7Ci0JaWYgKEdFVF9PUENPREUob3ApICE9IFNMSklUX0NPTlZEX0ZST01TKQotCQlvcCBePSBTTEpJVF9TSU5HTEVfT1A7CisJaWYgKEdFVF9PUENPREUob3ApICE9IFNMSklUX0NPTlZfRjY0X0ZST01fRjMyKQorCQlvcCBePSBTTEpJVF9GMzJfT1A7CiAKLQlTTEpJVF9DT01QSUxFX0FTU0VSVCgoU0xKSVRfU0lOR0xFX09QID09IDB4MTAwKSwgZmxvYXRfdHJhbnNmZXJfYml0X2Vycm9yKTsKKwlTTEpJVF9DT01QSUxFX0FTU0VSVCgoU0xKSVRfRjMyX09QID09IDB4MTAwKSwgZmxvYXRfdHJhbnNmZXJfYml0X2Vycm9yKTsKIAlTRUxFQ1RfRk9QMV9PUEVSQVRJT05fV0lUSF9DSEVDS1MoY29tcGlsZXIsIG9wLCBkc3QsIGRzdHcsIHNyYywgc3Jjdyk7CiAKIAlkc3RfciA9IEZBU1RfSVNfUkVHKGRzdCkgPyBkc3QgOiBUTVBfRlJFRzE7CiAKIAlpZiAoc3JjICYgU0xKSVRfTUVNKSB7Ci0JCWVtaXRfZm9wX21lbShjb21waWxlciwgKG9wICYgU0xKSVRfU0lOR0xFX09QKSB8IEZQVV9MT0FELCBkc3Rfciwgc3JjLCBzcmN3KTsKKwkJZW1pdF9mb3BfbWVtKGNvbXBpbGVyLCAob3AgJiBTTEpJVF9GMzJfT1ApIHwgRlBVX0xPQUQsIGRzdF9yLCBzcmMsIHNyY3cpOwogCQlzcmMgPSBkc3RfcjsKIAl9CiAKIAlzd2l0Y2ggKEdFVF9PUENPREUob3ApKSB7Ci0JY2FzZSBTTEpJVF9ETU9WOgorCWNhc2UgU0xKSVRfTU9WX0Y2NDoKIAkJaWYgKHNyYyAhPSBkc3RfcikgewogCQkJaWYgKGRzdF9yICE9IFRNUF9GUkVHMSkKLQkJCQlGQUlMX0lGKHB1c2hfaW5zdDMyKGNvbXBpbGVyLCBWTU9WX0YzMiB8IChvcCAmIFNMSklUX1NJTkdMRV9PUCkgfCBERDQoZHN0X3IpIHwgRE00KHNyYykpKTsKKwkJCQlGQUlMX0lGKHB1c2hfaW5zdDMyKGNvbXBpbGVyLCBWTU9WX0YzMiB8IChvcCAmIFNMSklUX0YzMl9PUCkgfCBERDQoZHN0X3IpIHwgRE00KHNyYykpKTsKIAkJCWVsc2UKIAkJCQlkc3RfciA9IHNyYzsKIAkJfQogCQlicmVhazsKLQljYXNlIFNMSklUX0RORUc6Ci0JCUZBSUxfSUYocHVzaF9pbnN0MzIoY29tcGlsZXIsIFZORUdfRjMyIHwgKG9wICYgU0xKSVRfU0lOR0xFX09QKSB8IERENChkc3RfcikgfCBETTQoc3JjKSkpOworCWNhc2UgU0xKSVRfTkVHX0Y2NDoKKwkJRkFJTF9JRihwdXNoX2luc3QzMihjb21waWxlciwgVk5FR19GMzIgfCAob3AgJiBTTEpJVF9GMzJfT1ApIHwgREQ0KGRzdF9yKSB8IERNNChzcmMpKSk7CiAJCWJyZWFrOwotCWNhc2UgU0xKSVRfREFCUzoKLQkJRkFJTF9JRihwdXNoX2luc3QzMihjb21waWxlciwgVkFCU19GMzIgfCAob3AgJiBTTEpJVF9TSU5HTEVfT1ApIHwgREQ0KGRzdF9yKSB8IERNNChzcmMpKSk7CisJY2FzZSBTTEpJVF9BQlNfRjY0OgorCQlGQUlMX0lGKHB1c2hfaW5zdDMyKGNvbXBpbGVyLCBWQUJTX0YzMiB8IChvcCAmIFNMSklUX0YzMl9PUCkgfCBERDQoZHN0X3IpIHwgRE00KHNyYykpKTsKIAkJYnJlYWs7Ci0JY2FzZSBTTEpJVF9DT05WRF9GUk9NUzoKLQkJRkFJTF9JRihwdXNoX2luc3QzMihjb21waWxlciwgVkNWVF9GNjRfRjMyIHwgKG9wICYgU0xKSVRfU0lOR0xFX09QKSB8IERENChkc3RfcikgfCBETTQoc3JjKSkpOwotCQlvcCBePSBTTEpJVF9TSU5HTEVfT1A7CisJY2FzZSBTTEpJVF9DT05WX0Y2NF9GUk9NX0YzMjoKKwkJRkFJTF9JRihwdXNoX2luc3QzMihjb21waWxlciwgVkNWVF9GNjRfRjMyIHwgKG9wICYgU0xKSVRfRjMyX09QKSB8IERENChkc3RfcikgfCBETTQoc3JjKSkpOworCQlvcCBePSBTTEpJVF9GMzJfT1A7CiAJCWJyZWFrOwogCX0KIAogCWlmIChkc3QgJiBTTEpJVF9NRU0pCi0JCXJldHVybiBlbWl0X2ZvcF9tZW0oY29tcGlsZXIsIChvcCAmIFNMSklUX1NJTkdMRV9PUCksIGRzdF9yLCBkc3QsIGRzdHcpOworCQlyZXR1cm4gZW1pdF9mb3BfbWVtKGNvbXBpbGVyLCAob3AgJiBTTEpJVF9GMzJfT1ApLCBkc3RfciwgZHN0LCBkc3R3KTsKIAlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKIH0KIAotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfZm9wMihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwKLQlzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsCi0Jc2xqaXRfc2kgc3JjMSwgc2xqaXRfc3cgc3JjMXcsCi0Jc2xqaXRfc2kgc3JjMiwgc2xqaXRfc3cgc3JjMncpCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfczMyIHNsaml0X2VtaXRfZm9wMihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgb3AsCisJc2xqaXRfczMyIGRzdCwgc2xqaXRfc3cgZHN0dywKKwlzbGppdF9zMzIgc3JjMSwgc2xqaXRfc3cgc3JjMXcsCisJc2xqaXRfczMyIHNyYzIsIHNsaml0X3N3IHNyYzJ3KQogewotCXNsaml0X3NpIGRzdF9yOworCXNsaml0X3MzMiBkc3RfcjsKIAogCUNIRUNLX0VSUk9SKCk7CiAJQ0hFQ0soY2hlY2tfc2xqaXRfZW1pdF9mb3AyKGNvbXBpbGVyLCBvcCwgZHN0LCBkc3R3LCBzcmMxLCBzcmMxdywgc3JjMiwgc3JjMncpKTsKQEAgLTE3NTIsMzYgKzE3NTIsMzYgQEAKIAogCWNvbXBpbGVyLT5jYWNoZV9hcmcgPSAwOwogCWNvbXBpbGVyLT5jYWNoZV9hcmd3ID0gMDsKLQlvcCBePSBTTEpJVF9TSU5HTEVfT1A7CisJb3AgXj0gU0xKSVRfRjMyX09QOwogCiAJZHN0X3IgPSBGQVNUX0lTX1JFRyhkc3QpID8gZHN0IDogVE1QX0ZSRUcxOwogCWlmIChzcmMxICYgU0xKSVRfTUVNKSB7Ci0JCWVtaXRfZm9wX21lbShjb21waWxlciwgKG9wICYgU0xKSVRfU0lOR0xFX09QKSB8IEZQVV9MT0FELCBUTVBfRlJFRzEsIHNyYzEsIHNyYzF3KTsKKwkJZW1pdF9mb3BfbWVtKGNvbXBpbGVyLCAob3AgJiBTTEpJVF9GMzJfT1ApIHwgRlBVX0xPQUQsIFRNUF9GUkVHMSwgc3JjMSwgc3JjMXcpOwogCQlzcmMxID0gVE1QX0ZSRUcxOwogCX0KIAlpZiAoc3JjMiAmIFNMSklUX01FTSkgewotCQllbWl0X2ZvcF9tZW0oY29tcGlsZXIsIChvcCAmIFNMSklUX1NJTkdMRV9PUCkgfCBGUFVfTE9BRCwgVE1QX0ZSRUcyLCBzcmMyLCBzcmMydyk7CisJCWVtaXRfZm9wX21lbShjb21waWxlciwgKG9wICYgU0xKSVRfRjMyX09QKSB8IEZQVV9MT0FELCBUTVBfRlJFRzIsIHNyYzIsIHNyYzJ3KTsKIAkJc3JjMiA9IFRNUF9GUkVHMjsKIAl9CiAKIAlzd2l0Y2ggKEdFVF9PUENPREUob3ApKSB7Ci0JY2FzZSBTTEpJVF9EQUREOgotCQlGQUlMX0lGKHB1c2hfaW5zdDMyKGNvbXBpbGVyLCBWQUREX0YzMiB8IChvcCAmIFNMSklUX1NJTkdMRV9PUCkgfCBERDQoZHN0X3IpIHwgRE40KHNyYzEpIHwgRE00KHNyYzIpKSk7CisJY2FzZSBTTEpJVF9BRERfRjY0OgorCQlGQUlMX0lGKHB1c2hfaW5zdDMyKGNvbXBpbGVyLCBWQUREX0YzMiB8IChvcCAmIFNMSklUX0YzMl9PUCkgfCBERDQoZHN0X3IpIHwgRE40KHNyYzEpIHwgRE00KHNyYzIpKSk7CiAJCWJyZWFrOwotCWNhc2UgU0xKSVRfRFNVQjoKLQkJRkFJTF9JRihwdXNoX2luc3QzMihjb21waWxlciwgVlNVQl9GMzIgfCAob3AgJiBTTEpJVF9TSU5HTEVfT1ApIHwgREQ0KGRzdF9yKSB8IERONChzcmMxKSB8IERNNChzcmMyKSkpOworCWNhc2UgU0xKSVRfU1VCX0Y2NDoKKwkJRkFJTF9JRihwdXNoX2luc3QzMihjb21waWxlciwgVlNVQl9GMzIgfCAob3AgJiBTTEpJVF9GMzJfT1ApIHwgREQ0KGRzdF9yKSB8IERONChzcmMxKSB8IERNNChzcmMyKSkpOwogCQlicmVhazsKLQljYXNlIFNMSklUX0RNVUw6Ci0JCUZBSUxfSUYocHVzaF9pbnN0MzIoY29tcGlsZXIsIFZNVUxfRjMyIHwgKG9wICYgU0xKSVRfU0lOR0xFX09QKSB8IERENChkc3RfcikgfCBETjQoc3JjMSkgfCBETTQoc3JjMikpKTsKKwljYXNlIFNMSklUX01VTF9GNjQ6CisJCUZBSUxfSUYocHVzaF9pbnN0MzIoY29tcGlsZXIsIFZNVUxfRjMyIHwgKG9wICYgU0xKSVRfRjMyX09QKSB8IERENChkc3RfcikgfCBETjQoc3JjMSkgfCBETTQoc3JjMikpKTsKIAkJYnJlYWs7Ci0JY2FzZSBTTEpJVF9ERElWOgotCQlGQUlMX0lGKHB1c2hfaW5zdDMyKGNvbXBpbGVyLCBWRElWX0YzMiB8IChvcCAmIFNMSklUX1NJTkdMRV9PUCkgfCBERDQoZHN0X3IpIHwgRE40KHNyYzEpIHwgRE00KHNyYzIpKSk7CisJY2FzZSBTTEpJVF9ESVZfRjY0OgorCQlGQUlMX0lGKHB1c2hfaW5zdDMyKGNvbXBpbGVyLCBWRElWX0YzMiB8IChvcCAmIFNMSklUX0YzMl9PUCkgfCBERDQoZHN0X3IpIHwgRE40KHNyYzEpIHwgRE00KHNyYzIpKSk7CiAJCWJyZWFrOwogCX0KIAogCWlmICghKGRzdCAmIFNMSklUX01FTSkpCiAJCXJldHVybiBTTEpJVF9TVUNDRVNTOwotCXJldHVybiBlbWl0X2ZvcF9tZW0oY29tcGlsZXIsIChvcCAmIFNMSklUX1NJTkdMRV9PUCksIFRNUF9GUkVHMSwgZHN0LCBkc3R3KTsKKwlyZXR1cm4gZW1pdF9mb3BfbWVtKGNvbXBpbGVyLCAob3AgJiBTTEpJVF9GMzJfT1ApLCBUTVBfRlJFRzEsIGRzdCwgZHN0dyk7CiB9CiAKICN1bmRlZiBGUFVfTE9BRApAQCAtMTc5MCw3ICsxNzkwLDcgQEAKIC8qICBPdGhlciBpbnN0cnVjdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X2Zhc3RfZW50ZXIoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3KQorU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3MzMiBzbGppdF9lbWl0X2Zhc3RfZW50ZXIoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIGRzdCwgc2xqaXRfc3cgZHN0dykKIHsKIAlDSEVDS19FUlJPUigpOwogCUNIRUNLKGNoZWNrX3Nsaml0X2VtaXRfZmFzdF9lbnRlcihjb21waWxlciwgZHN0LCBkc3R3KSk7CkBAIC0xODEzLDcgKzE4MTMsNyBAQAogCXJldHVybiBnZXRwdXRfYXJnKGNvbXBpbGVyLCBXT1JEX1NJWkUgfCBTVE9SRSwgVE1QX1JFRzIsIGRzdCwgZHN0dywgMCwgMCk7CiB9CiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X2Zhc3RfcmV0dXJuKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIHNyYywgc2xqaXRfc3cgc3JjdykKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zMzIgc2xqaXRfZW1pdF9mYXN0X3JldHVybihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgc3JjLCBzbGppdF9zdyBzcmN3KQogewogCUNIRUNLX0VSUk9SKCk7CiAJQ0hFQ0soY2hlY2tfc2xqaXRfZW1pdF9mYXN0X3JldHVybihjb21waWxlciwgc3JjLCBzcmN3KSk7CkBAIC0xODQwLDMzICsxODQwLDMzIEBACiAvKiAgQ29uZGl0aW9uYWwgaW5zdHJ1Y3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgc2xqaXRfdXcgZ2V0X2NjKHNsaml0X3NpIHR5cGUpCitzdGF0aWMgc2xqaXRfdXcgZ2V0X2NjKHNsaml0X3MzMiB0eXBlKQogewogCXN3aXRjaCAodHlwZSkgewogCWNhc2UgU0xKSVRfRVFVQUw6CiAJY2FzZSBTTEpJVF9NVUxfTk9UX09WRVJGTE9XOgotCWNhc2UgU0xKSVRfRF9FUVVBTDoKKwljYXNlIFNMSklUX0VRVUFMX0Y2NDoKIAkJcmV0dXJuIDB4MDsKIAogCWNhc2UgU0xKSVRfTk9UX0VRVUFMOgogCWNhc2UgU0xKSVRfTVVMX09WRVJGTE9XOgotCWNhc2UgU0xKSVRfRF9OT1RfRVFVQUw6CisJY2FzZSBTTEpJVF9OT1RfRVFVQUxfRjY0OgogCQlyZXR1cm4gMHgxOwogCiAJY2FzZSBTTEpJVF9MRVNTOgotCWNhc2UgU0xKSVRfRF9MRVNTOgorCWNhc2UgU0xKSVRfTEVTU19GNjQ6CiAJCXJldHVybiAweDM7CiAKIAljYXNlIFNMSklUX0dSRUFURVJfRVFVQUw6Ci0JY2FzZSBTTEpJVF9EX0dSRUFURVJfRVFVQUw6CisJY2FzZSBTTEpJVF9HUkVBVEVSX0VRVUFMX0Y2NDoKIAkJcmV0dXJuIDB4MjsKIAogCWNhc2UgU0xKSVRfR1JFQVRFUjoKLQljYXNlIFNMSklUX0RfR1JFQVRFUjoKKwljYXNlIFNMSklUX0dSRUFURVJfRjY0OgogCQlyZXR1cm4gMHg4OwogCiAJY2FzZSBTTEpJVF9MRVNTX0VRVUFMOgotCWNhc2UgU0xKSVRfRF9MRVNTX0VRVUFMOgorCWNhc2UgU0xKSVRfTEVTU19FUVVBTF9GNjQ6CiAJCXJldHVybiAweDk7CiAKIAljYXNlIFNMSklUX1NJR19MRVNTOgpAQCAtMTg4MiwxMSArMTg4MiwxMSBAQAogCQlyZXR1cm4gMHhkOwogCiAJY2FzZSBTTEpJVF9PVkVSRkxPVzoKLQljYXNlIFNMSklUX0RfVU5PUkRFUkVEOgorCWNhc2UgU0xKSVRfVU5PUkRFUkVEX0Y2NDoKIAkJcmV0dXJuIDB4NjsKIAogCWNhc2UgU0xKSVRfTk9UX09WRVJGTE9XOgotCWNhc2UgU0xKSVRfRF9PUkRFUkVEOgorCWNhc2UgU0xKSVRfT1JERVJFRF9GNjQ6CiAJCXJldHVybiAweDc7CiAKIAlkZWZhdWx0OiAvKiBTTEpJVF9KVU1QICovCkBAIC0xOTExLDcgKzE5MTEsNyBAQAogCXJldHVybiBsYWJlbDsKIH0KIAotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHN0cnVjdCBzbGppdF9qdW1wKiBzbGppdF9lbWl0X2p1bXAoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgdHlwZSkKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzdHJ1Y3Qgc2xqaXRfanVtcCogc2xqaXRfZW1pdF9qdW1wKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiB0eXBlKQogewogCXN0cnVjdCBzbGppdF9qdW1wICpqdW1wOwogCXNsaml0X2lucyBjYzsKQEAgLTE5NDQsNyArMTk0NCw3IEBACiAJcmV0dXJuIGp1bXA7CiB9CiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X2lqdW1wKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIHR5cGUsIHNsaml0X3NpIHNyYywgc2xqaXRfc3cgc3JjdykKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zMzIgc2xqaXRfZW1pdF9panVtcChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgdHlwZSwgc2xqaXRfczMyIHNyYywgc2xqaXRfc3cgc3JjdykKIHsKIAlzdHJ1Y3Qgc2xqaXRfanVtcCAqanVtcDsKIApAQCAtMTk3MiwxMiArMTk3MiwxMiBAQAogCXJldHVybiBwdXNoX2luc3QxNihjb21waWxlciwgKHR5cGUgPD0gU0xKSVRfSlVNUCA/IEJYIDogQkxYKSB8IFJOMyhUTVBfUkVHMSkpOwogfQogCi1TTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9vcF9mbGFncyhzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwKLQlzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsCi0Jc2xqaXRfc2kgc3JjLCBzbGppdF9zdyBzcmN3LAotCXNsaml0X3NpIHR5cGUpCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfczMyIHNsaml0X2VtaXRfb3BfZmxhZ3Moc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIG9wLAorCXNsaml0X3MzMiBkc3QsIHNsaml0X3N3IGRzdHcsCisJc2xqaXRfczMyIHNyYywgc2xqaXRfc3cgc3JjdywKKwlzbGppdF9zMzIgdHlwZSkKIHsKLQlzbGppdF9zaSBkc3RfciwgZmxhZ3MgPSBHRVRfQUxMX0ZMQUdTKG9wKTsKKwlzbGppdF9zMzIgZHN0X3IsIGZsYWdzID0gR0VUX0FMTF9GTEFHUyhvcCk7CiAJc2xqaXRfaW5zIGNjLCBpbnM7CiAKIAlDSEVDS19FUlJPUigpOwpAQCAtMjA1NCwxMCArMjA1NCwxMCBAQAogCXJldHVybiBTTEpJVF9TVUNDRVNTOwogfQogCi1TTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc3RydWN0IHNsaml0X2NvbnN0KiBzbGppdF9lbWl0X2NvbnN0KHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dywgc2xqaXRfc3cgaW5pdF92YWx1ZSkKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzdHJ1Y3Qgc2xqaXRfY29uc3QqIHNsaml0X2VtaXRfY29uc3Qoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIGRzdCwgc2xqaXRfc3cgZHN0dywgc2xqaXRfc3cgaW5pdF92YWx1ZSkKIHsKIAlzdHJ1Y3Qgc2xqaXRfY29uc3QgKmNvbnN0XzsKLQlzbGppdF9zaSBkc3RfcjsKKwlzbGppdF9zMzIgZHN0X3I7CiAKIAlDSEVDS19FUlJPUl9QVFIoKTsKIAlDSEVDS19QVFIoY2hlY2tfc2xqaXRfZW1pdF9jb25zdChjb21waWxlciwgZHN0LCBkc3R3LCBpbml0X3ZhbHVlKSk7CkBAIC0yMDc3LDE0ICsyMDc3LDE0IEBACiAKIFNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSB2b2lkIHNsaml0X3NldF9qdW1wX2FkZHIoc2xqaXRfdXcgYWRkciwgc2xqaXRfdXcgbmV3X2FkZHIpCiB7Ci0Jc2xqaXRfdWggKmluc3QgPSAoc2xqaXRfdWgqKWFkZHI7CisJc2xqaXRfdTE2ICppbnN0ID0gKHNsaml0X3UxNiopYWRkcjsKIAltb2RpZnlfaW1tMzJfY29uc3QoaW5zdCwgbmV3X2FkZHIpOwogCVNMSklUX0NBQ0hFX0ZMVVNIKGluc3QsIGluc3QgKyA0KTsKIH0KIAogU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHZvaWQgc2xqaXRfc2V0X2NvbnN0KHNsaml0X3V3IGFkZHIsIHNsaml0X3N3IG5ld19jb25zdGFudCkKIHsKLQlzbGppdF91aCAqaW5zdCA9IChzbGppdF91aCopYWRkcjsKKwlzbGppdF91MTYgKmluc3QgPSAoc2xqaXRfdTE2KilhZGRyOwogCW1vZGlmeV9pbW0zMl9jb25zdChpbnN0LCBuZXdfY29uc3RhbnQpOwogCVNMSklUX0NBQ0hFX0ZMVVNIKGluc3QsIGluc3QgKyA0KTsKIH0KZGlmZiAtLWdpdCBhL2Rpc3QyL3NyYy9zbGppdC9zbGppdE5hdGl2ZU1JUFNfMzIuYyBiL2Rpc3QyL3NyYy9zbGppdC9zbGppdE5hdGl2ZU1JUFNfMzIuYwppbmRleCBiMmI2MGQ3Li41MDk2ZTRmIDEwMDY0NAotLS0gYS9kaXN0Mi9zcmMvc2xqaXQvc2xqaXROYXRpdmVNSVBTXzMyLmMKKysrIGIvZGlzdDIvc3JjL3Nsaml0L3Nsaml0TmF0aXZlTUlQU18zMi5jCkBAIC0yNiw3ICsyNiw3IEBACiAKIC8qIG1pcHMgMzItYml0IGFyY2ggZGVwZW5kZW50IGZ1bmN0aW9ucy4gKi8KIAotc3RhdGljIHNsaml0X3NpIGxvYWRfaW1tZWRpYXRlKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIGRzdF9hciwgc2xqaXRfc3cgaW1tKQorc3RhdGljIHNsaml0X3MzMiBsb2FkX2ltbWVkaWF0ZShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgZHN0X2FyLCBzbGppdF9zdyBpbW0pCiB7CiAJaWYgKCEoaW1tICYgfjB4ZmZmZikpCiAJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIE9SSSB8IFNBKDApIHwgVEEoZHN0X2FyKSB8IElNTShpbW0pLCBkc3RfYXIpOwpAQCAtNjYsMjQgKzY2LDI0IEBACiAJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgb3BfdiB8IFMoc3JjMikgfCBUKHNyYzEpIHwgRChkc3QpLCBEUihkc3QpKSk7IFwKIAl9CiAKLXN0YXRpYyBTTEpJVF9JTkxJTkUgc2xqaXRfc2kgZW1pdF9zaW5nbGVfb3Aoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsIHNsaml0X3NpIGZsYWdzLAotCXNsaml0X3NpIGRzdCwgc2xqaXRfc2kgc3JjMSwgc2xqaXRfc3cgc3JjMikKK3N0YXRpYyBTTEpJVF9JTkxJTkUgc2xqaXRfczMyIGVtaXRfc2luZ2xlX29wKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiBvcCwgc2xqaXRfczMyIGZsYWdzLAorCXNsaml0X3MzMiBkc3QsIHNsaml0X3MzMiBzcmMxLCBzbGppdF9zdyBzcmMyKQogewogCXN3aXRjaCAoR0VUX09QQ09ERShvcCkpIHsKIAljYXNlIFNMSklUX01PVjoKLQljYXNlIFNMSklUX01PVl9VSToKLQljYXNlIFNMSklUX01PVl9TSToKKwljYXNlIFNMSklUX01PVl9VMzI6CisJY2FzZSBTTEpJVF9NT1ZfUzMyOgogCWNhc2UgU0xKSVRfTU9WX1A6CiAJCVNMSklUX0FTU0VSVChzcmMxID09IFRNUF9SRUcxICYmICEoZmxhZ3MgJiBTUkMyX0lNTSkpOwogCQlpZiAoZHN0ICE9IHNyYzIpCiAJCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBBRERVIHwgUyhzcmMyKSB8IFRBKDApIHwgRChkc3QpLCBEUihkc3QpKTsKIAkJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CiAKLQljYXNlIFNMSklUX01PVl9VQjoKLQljYXNlIFNMSklUX01PVl9TQjoKKwljYXNlIFNMSklUX01PVl9VODoKKwljYXNlIFNMSklUX01PVl9TODoKIAkJU0xKSVRfQVNTRVJUKHNyYzEgPT0gVE1QX1JFRzEgJiYgIShmbGFncyAmIFNSQzJfSU1NKSk7CiAJCWlmICgoZmxhZ3MgJiAoUkVHX0RFU1QgfCBSRUcyX1NPVVJDRSkpID09IChSRUdfREVTVCB8IFJFRzJfU09VUkNFKSkgewotCQkJaWYgKG9wID09IFNMSklUX01PVl9TQikgeworCQkJaWYgKG9wID09IFNMSklUX01PVl9TOCkgewogI2lmIChkZWZpbmVkIFNMSklUX01JUFNfUjEgJiYgU0xKSVRfTUlQU19SMSkKIAkJCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBTRUIgfCBUKHNyYzIpIHwgRChkc3QpLCBEUihkc3QpKTsKICNlbHNlCkBAIC05NywxMSArOTcsMTEgQEAKIAkJCVNMSklUX0FTU0VSVF9TVE9QKCk7CiAJCXJldHVybiBTTEpJVF9TVUNDRVNTOwogCi0JY2FzZSBTTEpJVF9NT1ZfVUg6Ci0JY2FzZSBTTEpJVF9NT1ZfU0g6CisJY2FzZSBTTEpJVF9NT1ZfVTE2OgorCWNhc2UgU0xKSVRfTU9WX1MxNjoKIAkJU0xKSVRfQVNTRVJUKHNyYzEgPT0gVE1QX1JFRzEgJiYgIShmbGFncyAmIFNSQzJfSU1NKSk7CiAJCWlmICgoZmxhZ3MgJiAoUkVHX0RFU1QgfCBSRUcyX1NPVVJDRSkpID09IChSRUdfREVTVCB8IFJFRzJfU09VUkNFKSkgewotCQkJaWYgKG9wID09IFNMSklUX01PVl9TSCkgeworCQkJaWYgKG9wID09IFNMSklUX01PVl9TMTYpIHsKICNpZiAoZGVmaW5lZCBTTEpJVF9NSVBTX1IxICYmIFNMSklUX01JUFNfUjEpCiAJCQkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgU0VIIHwgVChzcmMyKSB8IEQoZHN0KSwgRFIoZHN0KSk7CiAjZWxzZQpAQCAtMzQxLDcgKzM0MSw3IEBACiAJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBTTEpJVF9JTkxJTkUgc2xqaXRfc2kgZW1pdF9jb25zdChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBkc3QsIHNsaml0X3N3IGluaXRfdmFsdWUpCitzdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X3MzMiBlbWl0X2NvbnN0KHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiBkc3QsIHNsaml0X3N3IGluaXRfdmFsdWUpCiB7CiAJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIExVSSB8IFQoZHN0KSB8IElNTShpbml0X3ZhbHVlID4+IDE2KSwgRFIoZHN0KSkpOwogCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIE9SSSB8IFMoZHN0KSB8IFQoZHN0KSB8IElNTShpbml0X3ZhbHVlKSwgRFIoZHN0KSk7CmRpZmYgLS1naXQgYS9kaXN0Mi9zcmMvc2xqaXQvc2xqaXROYXRpdmVNSVBTXzY0LmMgYi9kaXN0Mi9zcmMvc2xqaXQvc2xqaXROYXRpdmVNSVBTXzY0LmMKaW5kZXggMTg1ZmI1Ny4uYzdlZThjOSAxMDA2NDQKLS0tIGEvZGlzdDIvc3JjL3Nsaml0L3Nsaml0TmF0aXZlTUlQU182NC5jCisrKyBiL2Rpc3QyL3NyYy9zbGppdC9zbGppdE5hdGl2ZU1JUFNfNjQuYwpAQCAtMjYsMTEgKzI2LDExIEBACiAKIC8qIG1pcHMgNjQtYml0IGFyY2ggZGVwZW5kZW50IGZ1bmN0aW9ucy4gKi8KIAotc3RhdGljIHNsaml0X3NpIGxvYWRfaW1tZWRpYXRlKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIGRzdF9hciwgc2xqaXRfc3cgaW1tKQorc3RhdGljIHNsaml0X3MzMiBsb2FkX2ltbWVkaWF0ZShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgZHN0X2FyLCBzbGppdF9zdyBpbW0pCiB7Ci0Jc2xqaXRfc2kgc2hpZnQgPSAzMjsKLQlzbGppdF9zaSBzaGlmdDI7Ci0Jc2xqaXRfc2kgaW52ID0gMDsKKwlzbGppdF9zMzIgc2hpZnQgPSAzMjsKKwlzbGppdF9zMzIgc2hpZnQyOworCXNsaml0X3MzMiBpbnYgPSAwOwogCXNsaml0X2lucyBpbnM7CiAJc2xqaXRfdXcgdWltbTsKIApAQCAtMTE5LDcgKzExOSw3IEBACiB9CiAKICNkZWZpbmUgU0VMRUNUX09QKGEsIGIpIFwKLQkoIShvcCAmIFNMSklUX0lOVF9PUCkgPyBhIDogYikKKwkoIShvcCAmIFNMSklUX0kzMl9PUCkgPyBhIDogYikKIAogI2RlZmluZSBFTUlUX0xPR0lDQUwob3BfaW1tLCBvcF9ub3JtKSBcCiAJaWYgKGZsYWdzICYgU1JDMl9JTU0pIHsgXApAQCAtMTM4LDI3ICsxMzgsMjcgQEAKICNkZWZpbmUgRU1JVF9TSElGVChvcF9kaW1tLCBvcF9kaW1tMzIsIG9wX2ltbSwgb3BfZHYsIG9wX3YpIFwKIAlpZiAoZmxhZ3MgJiBTUkMyX0lNTSkgeyBcCiAJCWlmIChzcmMyID49IDMyKSB7IFwKLQkJCVNMSklUX0FTU0VSVCghKG9wICYgU0xKSVRfSU5UX09QKSk7IFwKKwkJCVNMSklUX0FTU0VSVCghKG9wICYgU0xKSVRfSTMyX09QKSk7IFwKIAkJCWlucyA9IG9wX2RpbW0zMjsgXAogCQkJc3JjMiAtPSAzMjsgXAogCQl9IFwKIAkJZWxzZSBcCi0JCQlpbnMgPSAob3AgJiBTTEpJVF9JTlRfT1ApID8gb3BfaW1tIDogb3BfZGltbTsgXAorCQkJaW5zID0gKG9wICYgU0xKSVRfSTMyX09QKSA/IG9wX2ltbSA6IG9wX2RpbW07IFwKIAkJaWYgKG9wICYgU0xKSVRfU0VUX0UpIFwKIAkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBpbnMgfCBUKHNyYzEpIHwgREEoRVFVQUxfRkxBRykgfCBTSF9JTU0oc3JjMiksIEVRVUFMX0ZMQUcpKTsgXAogCQlpZiAoQ0hFQ0tfRkxBR1MoU0xKSVRfU0VUX0UpKSBcCiAJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgaW5zIHwgVChzcmMxKSB8IEQoZHN0KSB8IFNIX0lNTShzcmMyKSwgRFIoZHN0KSkpOyBcCiAJfSBcCiAJZWxzZSB7IFwKLQkJaW5zID0gKG9wICYgU0xKSVRfSU5UX09QKSA/IG9wX3YgOiBvcF9kdjsgXAorCQlpbnMgPSAob3AgJiBTTEpJVF9JMzJfT1ApID8gb3BfdiA6IG9wX2R2OyBcCiAJCWlmIChvcCAmIFNMSklUX1NFVF9FKSBcCiAJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgaW5zIHwgUyhzcmMyKSB8IFQoc3JjMSkgfCBEQShFUVVBTF9GTEFHKSwgRVFVQUxfRkxBRykpOyBcCiAJCWlmIChDSEVDS19GTEFHUyhTTEpJVF9TRVRfRSkpIFwKIAkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBpbnMgfCBTKHNyYzIpIHwgVChzcmMxKSB8IEQoZHN0KSwgRFIoZHN0KSkpOyBcCiAJfQogCi1zdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X3NpIGVtaXRfc2luZ2xlX29wKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIG9wLCBzbGppdF9zaSBmbGFncywKLQlzbGppdF9zaSBkc3QsIHNsaml0X3NpIHNyYzEsIHNsaml0X3N3IHNyYzIpCitzdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X3MzMiBlbWl0X3NpbmdsZV9vcChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgb3AsIHNsaml0X3MzMiBmbGFncywKKwlzbGppdF9zMzIgZHN0LCBzbGppdF9zMzIgc3JjMSwgc2xqaXRfc3cgc3JjMikKIHsKIAlzbGppdF9pbnMgaW5zOwogCkBAIC0xNzAsMTEgKzE3MCwxMSBAQAogCQkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgU0VMRUNUX09QKERBRERVLCBBRERVKSB8IFMoc3JjMikgfCBUQSgwKSB8IEQoZHN0KSwgRFIoZHN0KSk7CiAJCXJldHVybiBTTEpJVF9TVUNDRVNTOwogCi0JY2FzZSBTTEpJVF9NT1ZfVUI6Ci0JY2FzZSBTTEpJVF9NT1ZfU0I6CisJY2FzZSBTTEpJVF9NT1ZfVTg6CisJY2FzZSBTTEpJVF9NT1ZfUzg6CiAJCVNMSklUX0FTU0VSVChzcmMxID09IFRNUF9SRUcxICYmICEoZmxhZ3MgJiBTUkMyX0lNTSkpOwogCQlpZiAoKGZsYWdzICYgKFJFR19ERVNUIHwgUkVHMl9TT1VSQ0UpKSA9PSAoUkVHX0RFU1QgfCBSRUcyX1NPVVJDRSkpIHsKLQkJCWlmIChvcCA9PSBTTEpJVF9NT1ZfU0IpIHsKKwkJCWlmIChvcCA9PSBTTEpJVF9NT1ZfUzgpIHsKIAkJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgRFNMTDMyIHwgVChzcmMyKSB8IEQoZHN0KSB8IFNIX0lNTSgyNCksIERSKGRzdCkpKTsKIAkJCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBEU1JBMzIgfCBUKGRzdCkgfCBEKGRzdCkgfCBTSF9JTU0oMjQpLCBEUihkc3QpKTsKIAkJCX0KQEAgLTE4NCwxMSArMTg0LDExIEBACiAJCQlTTEpJVF9BU1NFUlRfU1RPUCgpOwogCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKIAotCWNhc2UgU0xKSVRfTU9WX1VIOgotCWNhc2UgU0xKSVRfTU9WX1NIOgorCWNhc2UgU0xKSVRfTU9WX1UxNjoKKwljYXNlIFNMSklUX01PVl9TMTY6CiAJCVNMSklUX0FTU0VSVChzcmMxID09IFRNUF9SRUcxICYmICEoZmxhZ3MgJiBTUkMyX0lNTSkpOwogCQlpZiAoKGZsYWdzICYgKFJFR19ERVNUIHwgUkVHMl9TT1VSQ0UpKSA9PSAoUkVHX0RFU1QgfCBSRUcyX1NPVVJDRSkpIHsKLQkJCWlmIChvcCA9PSBTTEpJVF9NT1ZfU0gpIHsKKwkJCWlmIChvcCA9PSBTTEpJVF9NT1ZfUzE2KSB7CiAJCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIERTTEwzMiB8IFQoc3JjMikgfCBEKGRzdCkgfCBTSF9JTU0oMTYpLCBEUihkc3QpKSk7CiAJCQkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgRFNSQTMyIHwgVChkc3QpIHwgRChkc3QpIHwgU0hfSU1NKDE2KSwgRFIoZHN0KSk7CiAJCQl9CkBAIC0xOTgsMTIgKzE5OCwxMiBAQAogCQkJU0xKSVRfQVNTRVJUX1NUT1AoKTsKIAkJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CiAKLQljYXNlIFNMSklUX01PVl9VSToKLQkJU0xKSVRfQVNTRVJUKCEob3AgJiBTTEpJVF9JTlRfT1ApKTsKKwljYXNlIFNMSklUX01PVl9VMzI6CisJCVNMSklUX0FTU0VSVCghKG9wICYgU0xKSVRfSTMyX09QKSk7CiAJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBEU0xMMzIgfCBUKHNyYzIpIHwgRChkc3QpIHwgU0hfSU1NKDApLCBEUihkc3QpKSk7CiAJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIERTUkwzMiB8IFQoZHN0KSB8IEQoZHN0KSB8IFNIX0lNTSgwKSwgRFIoZHN0KSk7CiAKLQljYXNlIFNMSklUX01PVl9TSToKKwljYXNlIFNMSklUX01PVl9TMzI6CiAJCVNMSklUX0FTU0VSVChzcmMxID09IFRNUF9SRUcxICYmICEoZmxhZ3MgJiBTUkMyX0lNTSkpOwogCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBTTEwgfCBUKHNyYzIpIHwgRChkc3QpIHwgU0hfSU1NKDApLCBEUihkc3QpKTsKIApAQCAtMjMxLDcgKzIzMSw3IEBACiAJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBTRUxFQ1RfT1AoREFERFUsIEFERFUpIHwgUyhzcmMyKSB8IFRBKDApIHwgRChUTVBfUkVHMSksIERSKFRNUF9SRUcxKSkpOwogCQkvKiBDaGVjayB6ZXJvLiAqLwogCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgQkVRIHwgUyhUTVBfUkVHMSkgfCBUQSgwKSB8IElNTSg1KSwgVU5NT1ZBQkxFX0lOUykpOwotCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgT1JJIHwgU0EoMCkgfCBUKGRzdCkgfCBJTU0oKG9wICYgU0xKSVRfSU5UX09QKSA/IDMyIDogNjQpLCBVTk1PVkFCTEVfSU5TKSk7CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBPUkkgfCBTQSgwKSB8IFQoZHN0KSB8IElNTSgob3AgJiBTTEpJVF9JMzJfT1ApID8gMzIgOiA2NCksIFVOTU9WQUJMRV9JTlMpKTsKIAkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIFNFTEVDVF9PUChEQURESVUsIEFERElVKSB8IFNBKDApIHwgVChkc3QpIHwgSU1NKC0xKSwgRFIoZHN0KSkpOwogCQkvKiBMb29wIGZvciBzZWFyY2hpbmcgdGhlIGhpZ2hlc3QgYml0LiAqLwogCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgU0VMRUNUX09QKERBRERJVSwgQURESVUpIHwgUyhkc3QpIHwgVChkc3QpIHwgSU1NKDEpLCBEUihkc3QpKSk7CkBAIC0zOTIsNyArMzkyLDcgQEAKIAkJU0xKSVRfQVNTRVJUKCEoZmxhZ3MgJiBTUkMyX0lNTSkpOwogCQlpZiAoIShvcCAmIFNMSklUX1NFVF9PKSkgewogI2lmIChkZWZpbmVkIFNMSklUX01JUFNfUjEgJiYgU0xKSVRfTUlQU19SMSkKLQkJCWlmIChvcCAmIFNMSklUX0lOVF9PUCkKKwkJCWlmIChvcCAmIFNMSklUX0kzMl9PUCkKIAkJCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBNVUwgfCBTKHNyYzEpIHwgVChzcmMyKSB8IEQoZHN0KSwgRFIoZHN0KSk7CiAJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgRE1VTFQgfCBTKHNyYzEpIHwgVChzcmMyKSwgTU9WQUJMRV9JTlMpKTsKIAkJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIE1GTE8gfCBEKGRzdCksIERSKGRzdCkpOwpAQCAtNDM2LDcgKzQzNiw3IEBACiAJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBTTEpJVF9JTkxJTkUgc2xqaXRfc2kgZW1pdF9jb25zdChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBkc3QsIHNsaml0X3N3IGluaXRfdmFsdWUpCitzdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X3MzMiBlbWl0X2NvbnN0KHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiBkc3QsIHNsaml0X3N3IGluaXRfdmFsdWUpCiB7CiAJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIExVSSB8IFQoZHN0KSB8IElNTShpbml0X3ZhbHVlID4+IDQ4KSwgRFIoZHN0KSkpOwogCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBPUkkgfCBTKGRzdCkgfCBUKGRzdCkgfCBJTU0oaW5pdF92YWx1ZSA+PiAzMiksIERSKGRzdCkpKTsKZGlmZiAtLWdpdCBhL2Rpc3QyL3NyYy9zbGppdC9zbGppdE5hdGl2ZU1JUFNfY29tbW9uLmMgYi9kaXN0Mi9zcmMvc2xqaXQvc2xqaXROYXRpdmVNSVBTX2NvbW1vbi5jCmluZGV4IGNmMzUzNWYuLmMyYzI1MWIgMTAwNjQ0Ci0tLSBhL2Rpc3QyL3NyYy9zbGppdC9zbGppdE5hdGl2ZU1JUFNfY29tbW9uLmMKKysrIGIvZGlzdDIvc3JjL3Nsaml0L3Nsaml0TmF0aXZlTUlQU19jb21tb24uYwpAQCAtMjcsNyArMjcsNyBAQAogLyogTGF0ZXN0IE1JUFMgYXJjaGl0ZWN0dXJlLiAqLwogLyogQXV0b21hdGljYWxseSBkZXRlY3QgU0xKSVRfTUlQU19SMSAqLwogCi1TTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgU0xKSVRfQ09OU1QgY2hhciogc2xqaXRfZ2V0X3BsYXRmb3JtX25hbWUodm9pZCkKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBjb25zdCBjaGFyKiBzbGppdF9nZXRfcGxhdGZvcm1fbmFtZSh2b2lkKQogewogI2lmIChkZWZpbmVkIFNMSklUX01JUFNfUjEgJiYgU0xKSVRfTUlQU19SMSkKICNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfTUlQU18zMiAmJiBTTEpJVF9DT05GSUdfTUlQU18zMikKQEAgLTQyLDcgKzQyLDcgQEAKIAogLyogTGVuZ3RoIG9mIGFuIGluc3RydWN0aW9uIHdvcmQKICAgIEJvdGggZm9yIG1pcHMtMzIgYW5kIG1pcHMtNjQgKi8KLXR5cGVkZWYgc2xqaXRfdWkgc2xqaXRfaW5zOwordHlwZWRlZiBzbGppdF91MzIgc2xqaXRfaW5zOwogCiAjZGVmaW5lIFRNUF9SRUcxCShTTEpJVF9OVU1CRVJfT0ZfUkVHSVNURVJTICsgMikKICNkZWZpbmUgVE1QX1JFRzIJKFNMSklUX05VTUJFUl9PRl9SRUdJU1RFUlMgKyAzKQpAQCAtNjgsNyArNjgsNyBAQAogI2RlZmluZSBUTVBfRlJFRzEJKDApCiAjZGVmaW5lIFRNUF9GUkVHMgkoKFNMSklUX05VTUJFUl9PRl9GTE9BVF9SRUdJU1RFUlMgKyAxKSA8PCAxKQogCi1zdGF0aWMgU0xKSVRfQ09OU1Qgc2xqaXRfdWIgcmVnX21hcFtTTEpJVF9OVU1CRVJfT0ZfUkVHSVNURVJTICsgNV0gPSB7CitzdGF0aWMgY29uc3Qgc2xqaXRfdTggcmVnX21hcFtTTEpJVF9OVU1CRVJfT0ZfUkVHSVNURVJTICsgNV0gPSB7CiAJMCwgMiwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAyNCwgMjMsIDIyLCAyMSwgMjAsIDE5LCAxOCwgMTcsIDE2LCAyOSwgMywgMjUsIDQKIH07CiAKQEAgLTIwMSw3ICsyMDEsNyBAQAogCiAvKiBkZXN0X3JlZyBpcyB0aGUgYWJzb2x1dGUgbmFtZSBvZiB0aGUgcmVnaXN0ZXIKICAgIFVzZWZ1bCBmb3IgcmVvcmRlcmluZyBpbnN0cnVjdGlvbnMgaW4gdGhlIGRlbGF5IHNsb3QuICovCi1zdGF0aWMgc2xqaXRfc2kgcHVzaF9pbnN0KHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X2lucyBpbnMsIHNsaml0X3NpIGRlbGF5X3Nsb3QpCitzdGF0aWMgc2xqaXRfczMyIHB1c2hfaW5zdChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9pbnMgaW5zLCBzbGppdF9zMzIgZGVsYXlfc2xvdCkKIHsKIAlTTEpJVF9BU1NFUlQoZGVsYXlfc2xvdCA9PSBNT1ZBQkxFX0lOUyB8fCBkZWxheV9zbG90ID49IFVOTU9WQUJMRV9JTlMKIAkJfHwgZGVsYXlfc2xvdCA9PSAoKGlucyA+PiAxMSkgJiAweDFmKSB8fCBkZWxheV9zbG90ID09ICgoaW5zID4+IDE2KSAmIDB4MWYpKTsKQEAgLTIxMyw3ICsyMTMsNyBAQAogCXJldHVybiBTTEpJVF9TVUNDRVNTOwogfQogCi1zdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X2lucyBpbnZlcnRfYnJhbmNoKHNsaml0X3NpIGZsYWdzKQorc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9pbnMgaW52ZXJ0X2JyYW5jaChzbGppdF9zMzIgZmxhZ3MpCiB7CiAJcmV0dXJuIChmbGFncyAmIElTX0JJVDI2X0NPTkQpID8gKDEgPDwgMjYpIDogKDEgPDwgMTYpOwogfQpAQCAtNTM4LDEyICs1MzgsMTIgQEAKICNpbmNsdWRlICJzbGppdE5hdGl2ZU1JUFNfNjQuYyIKICNlbmRpZgogCi1TTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9lbnRlcihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLAotCXNsaml0X3NpIG9wdGlvbnMsIHNsaml0X3NpIGFyZ3MsIHNsaml0X3NpIHNjcmF0Y2hlcywgc2xqaXRfc2kgc2F2ZWRzLAotCXNsaml0X3NpIGZzY3JhdGNoZXMsIHNsaml0X3NpIGZzYXZlZHMsIHNsaml0X3NpIGxvY2FsX3NpemUpCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfczMyIHNsaml0X2VtaXRfZW50ZXIoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwKKwlzbGppdF9zMzIgb3B0aW9ucywgc2xqaXRfczMyIGFyZ3MsIHNsaml0X3MzMiBzY3JhdGNoZXMsIHNsaml0X3MzMiBzYXZlZHMsCisJc2xqaXRfczMyIGZzY3JhdGNoZXMsIHNsaml0X3MzMiBmc2F2ZWRzLCBzbGppdF9zMzIgbG9jYWxfc2l6ZSkKIHsKIAlzbGppdF9pbnMgYmFzZTsKLQlzbGppdF9zaSBpLCB0bXAsIG9mZnM7CisJc2xqaXRfczMyIGksIHRtcCwgb2ZmczsKIAogCUNIRUNLX0VSUk9SKCk7CiAJQ0hFQ0soY2hlY2tfc2xqaXRfZW1pdF9lbnRlcihjb21waWxlciwgb3B0aW9ucywgYXJncywgc2NyYXRjaGVzLCBzYXZlZHMsIGZzY3JhdGNoZXMsIGZzYXZlZHMsIGxvY2FsX3NpemUpKTsKQEAgLTU3NSwxMiArNTc1LDEyIEBACiAKIAl0bXAgPSBzYXZlZHMgPCBTTEpJVF9OVU1CRVJfT0ZfU0FWRURfUkVHSVNURVJTID8gKFNMSklUX1MwICsgMSAtIHNhdmVkcykgOiBTTEpJVF9GSVJTVF9TQVZFRF9SRUc7CiAJZm9yIChpID0gU0xKSVRfUzA7IGkgPj0gdG1wOyBpLS0pIHsKLQkJb2ZmcyAtPSAoc2xqaXRfc2kpKHNpemVvZihzbGppdF9zdykpOworCQlvZmZzIC09IChzbGppdF9zMzIpKHNpemVvZihzbGppdF9zdykpOwogCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgU1RBQ0tfU1RPUkUgfCBiYXNlIHwgVChpKSB8IElNTShvZmZzKSwgTU9WQUJMRV9JTlMpKTsKIAl9CiAKIAlmb3IgKGkgPSBzY3JhdGNoZXM7IGkgPj0gU0xKSVRfRklSU1RfU0FWRURfUkVHOyBpLS0pIHsKLQkJb2ZmcyAtPSAoc2xqaXRfc2kpKHNpemVvZihzbGppdF9zdykpOworCQlvZmZzIC09IChzbGppdF9zMzIpKHNpemVvZihzbGppdF9zdykpOwogCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgU1RBQ0tfU1RPUkUgfCBiYXNlIHwgVChpKSB8IElNTShvZmZzKSwgTU9WQUJMRV9JTlMpKTsKIAl9CiAKQEAgLTU5NCw5ICs1OTQsOSBAQAogCXJldHVybiBTTEpJVF9TVUNDRVNTOwogfQogCi1TTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfc2V0X2NvbnRleHQoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwKLQlzbGppdF9zaSBvcHRpb25zLCBzbGppdF9zaSBhcmdzLCBzbGppdF9zaSBzY3JhdGNoZXMsIHNsaml0X3NpIHNhdmVkcywKLQlzbGppdF9zaSBmc2NyYXRjaGVzLCBzbGppdF9zaSBmc2F2ZWRzLCBzbGppdF9zaSBsb2NhbF9zaXplKQorU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3MzMiBzbGppdF9zZXRfY29udGV4dChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLAorCXNsaml0X3MzMiBvcHRpb25zLCBzbGppdF9zMzIgYXJncywgc2xqaXRfczMyIHNjcmF0Y2hlcywgc2xqaXRfczMyIHNhdmVkcywKKwlzbGppdF9zMzIgZnNjcmF0Y2hlcywgc2xqaXRfczMyIGZzYXZlZHMsIHNsaml0X3MzMiBsb2NhbF9zaXplKQogewogCUNIRUNLX0VSUk9SKCk7CiAJQ0hFQ0soY2hlY2tfc2xqaXRfc2V0X2NvbnRleHQoY29tcGlsZXIsIG9wdGlvbnMsIGFyZ3MsIHNjcmF0Y2hlcywgc2F2ZWRzLCBmc2NyYXRjaGVzLCBmc2F2ZWRzLCBsb2NhbF9zaXplKSk7CkBAIC02MTEsOSArNjExLDkgQEAKIAlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKIH0KIAotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfcmV0dXJuKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIG9wLCBzbGppdF9zaSBzcmMsIHNsaml0X3N3IHNyY3cpCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfczMyIHNsaml0X2VtaXRfcmV0dXJuKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiBvcCwgc2xqaXRfczMyIHNyYywgc2xqaXRfc3cgc3JjdykKIHsKLQlzbGppdF9zaSBsb2NhbF9zaXplLCBpLCB0bXAsIG9mZnM7CisJc2xqaXRfczMyIGxvY2FsX3NpemUsIGksIHRtcCwgb2ZmczsKIAlzbGppdF9pbnMgYmFzZTsKIAogCUNIRUNLX0VSUk9SKCk7CkBAIC02MzEsMTkgKzYzMSwxOSBAQAogCQlsb2NhbF9zaXplID0gMDsKIAl9CiAKLQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgU1RBQ0tfTE9BRCB8IGJhc2UgfCBUQShSRVRVUk5fQUREUl9SRUcpIHwgSU1NKGxvY2FsX3NpemUgLSAoc2xqaXRfc2kpc2l6ZW9mKHNsaml0X3N3KSksIFJFVFVSTl9BRERSX1JFRykpOwotCW9mZnMgPSBsb2NhbF9zaXplIC0gKHNsaml0X3NpKUdFVF9TQVZFRF9SRUdJU1RFUlNfU0laRShjb21waWxlci0+c2NyYXRjaGVzLCBjb21waWxlci0+c2F2ZWRzLCAxKTsKKwlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgU1RBQ0tfTE9BRCB8IGJhc2UgfCBUQShSRVRVUk5fQUREUl9SRUcpIHwgSU1NKGxvY2FsX3NpemUgLSAoc2xqaXRfczMyKXNpemVvZihzbGppdF9zdykpLCBSRVRVUk5fQUREUl9SRUcpKTsKKwlvZmZzID0gbG9jYWxfc2l6ZSAtIChzbGppdF9zMzIpR0VUX1NBVkVEX1JFR0lTVEVSU19TSVpFKGNvbXBpbGVyLT5zY3JhdGNoZXMsIGNvbXBpbGVyLT5zYXZlZHMsIDEpOwogCiAJdG1wID0gY29tcGlsZXItPnNjcmF0Y2hlczsKIAlmb3IgKGkgPSBTTEpJVF9GSVJTVF9TQVZFRF9SRUc7IGkgPD0gdG1wOyBpKyspIHsKIAkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIFNUQUNLX0xPQUQgfCBiYXNlIHwgVChpKSB8IElNTShvZmZzKSwgRFIoaSkpKTsKLQkJb2ZmcyArPSAoc2xqaXRfc2kpKHNpemVvZihzbGppdF9zdykpOworCQlvZmZzICs9IChzbGppdF9zMzIpKHNpemVvZihzbGppdF9zdykpOwogCX0KIAogCXRtcCA9IGNvbXBpbGVyLT5zYXZlZHMgPCBTTEpJVF9OVU1CRVJfT0ZfU0FWRURfUkVHSVNURVJTID8gKFNMSklUX1MwICsgMSAtIGNvbXBpbGVyLT5zYXZlZHMpIDogU0xKSVRfRklSU1RfU0FWRURfUkVHOwogCWZvciAoaSA9IHRtcDsgaSA8PSBTTEpJVF9TMDsgaSsrKSB7CiAJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBTVEFDS19MT0FEIHwgYmFzZSB8IFQoaSkgfCBJTU0ob2ZmcyksIERSKGkpKSk7Ci0JCW9mZnMgKz0gKHNsaml0X3NpKShzaXplb2Yoc2xqaXRfc3cpKTsKKwkJb2ZmcyArPSAoc2xqaXRfczMyKShzaXplb2Yoc2xqaXRfc3cpKTsKIAl9CiAKIAlTTEpJVF9BU1NFUlQob2ZmcyA9PSBsb2NhbF9zaXplIC0gKHNsaml0X3N3KShzaXplb2Yoc2xqaXRfc3cpKSk7CkBAIC02NjgsNyArNjY4LDcgQEAKICNkZWZpbmUgQVJDSF8zMl82NChhLCBiKQliCiAjZW5kaWYKIAotc3RhdGljIFNMSklUX0NPTlNUIHNsaml0X2lucyBkYXRhX3RyYW5zZmVyX2luc3RzWzE2ICsgNF0gPSB7CitzdGF0aWMgY29uc3Qgc2xqaXRfaW5zIGRhdGFfdHJhbnNmZXJfaW5zdHNbMTYgKyA0XSA9IHsKIC8qIHUgdyBzICovIEFSQ0hfMzJfNjQoSEkoNDMpIC8qIHN3ICovLCBISSg2MykgLyogc2QgKi8pLAogLyogdSB3IGwgKi8gQVJDSF8zMl82NChISSgzNSkgLyogbHcgKi8sIEhJKDU1KSAvKiBsZCAqLyksCiAvKiB1IGIgcyAqLyBISSg0MCkgLyogc2IgKi8sCkBAIC02OTgsNyArNjk4LDcgQEAKIC8qIHJlZ19hciBpcyBhbiBhYnNvdWx1dGUgcmVnaXN0ZXIhICovCiAKIC8qIENhbiBwZXJmb3JtIGFuIG9wZXJhdGlvbiB1c2luZyBhdCBtb3N0IDEgaW5zdHJ1Y3Rpb24uICovCi1zdGF0aWMgc2xqaXRfc2kgZ2V0cHV0X2FyZ19mYXN0KHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIGZsYWdzLCBzbGppdF9zaSByZWdfYXIsIHNsaml0X3NpIGFyZywgc2xqaXRfc3cgYXJndykKK3N0YXRpYyBzbGppdF9zMzIgZ2V0cHV0X2FyZ19mYXN0KHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiBmbGFncywgc2xqaXRfczMyIHJlZ19hciwgc2xqaXRfczMyIGFyZywgc2xqaXRfc3cgYXJndykKIHsKIAlTTEpJVF9BU1NFUlQoYXJnICYgU0xKSVRfTUVNKTsKIApAQCAtNzE2LDcgKzcxNiw3IEBACiAvKiBTZWUgZ2V0cHV0X2FyZyBiZWxvdy4KICAgIE5vdGU6IGNhbl9jYWNoZSBpcyBjYWxsZWQgb25seSBmb3IgYmluYXJ5IG9wZXJhdG9ycy4gVGhvc2UKICAgIG9wZXJhdG9ycyBhbHdheXMgdXNlcyB3b3JkIGFyZ3VtZW50cyB3aXRob3V0IHdyaXRlIGJhY2suICovCi1zdGF0aWMgc2xqaXRfc2kgY2FuX2NhY2hlKHNsaml0X3NpIGFyZywgc2xqaXRfc3cgYXJndywgc2xqaXRfc2kgbmV4dF9hcmcsIHNsaml0X3N3IG5leHRfYXJndykKK3N0YXRpYyBzbGppdF9zMzIgY2FuX2NhY2hlKHNsaml0X3MzMiBhcmcsIHNsaml0X3N3IGFyZ3csIHNsaml0X3MzMiBuZXh0X2FyZywgc2xqaXRfc3cgbmV4dF9hcmd3KQogewogCVNMSklUX0FTU0VSVCgoYXJnICYgU0xKSVRfTUVNKSAmJiAobmV4dF9hcmcgJiBTTEpJVF9NRU0pKTsKIApAQCAtNzM5LDkgKzczOSw5IEBACiB9CiAKIC8qIEVtaXQgdGhlIG5lY2Vzc2FyeSBpbnN0cnVjdGlvbnMuIFNlZSBjYW5fY2FjaGUgYWJvdmUuICovCi1zdGF0aWMgc2xqaXRfc2kgZ2V0cHV0X2FyZyhzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBmbGFncywgc2xqaXRfc2kgcmVnX2FyLCBzbGppdF9zaSBhcmcsIHNsaml0X3N3IGFyZ3csIHNsaml0X3NpIG5leHRfYXJnLCBzbGppdF9zdyBuZXh0X2FyZ3cpCitzdGF0aWMgc2xqaXRfczMyIGdldHB1dF9hcmcoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIGZsYWdzLCBzbGppdF9zMzIgcmVnX2FyLCBzbGppdF9zMzIgYXJnLCBzbGppdF9zdyBhcmd3LCBzbGppdF9zMzIgbmV4dF9hcmcsIHNsaml0X3N3IG5leHRfYXJndykKIHsKLQlzbGppdF9zaSB0bXBfYXIsIGJhc2UsIGRlbGF5X3Nsb3Q7CisJc2xqaXRfczMyIHRtcF9hciwgYmFzZSwgZGVsYXlfc2xvdDsKIAogCVNMSklUX0FTU0VSVChhcmcgJiBTTEpJVF9NRU0pOwogCWlmICghKG5leHRfYXJnICYgU0xKSVRfTUVNKSkgewpAQCAtODc4LDcgKzg3OCw3IEBACiAJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgZGF0YV90cmFuc2Zlcl9pbnN0c1tmbGFncyAmIE1FTV9NQVNLXSB8IFNBKHRtcF9hcikgfCBUQShyZWdfYXIpLCBkZWxheV9zbG90KTsKIH0KIAotc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9zaSBlbWl0X29wX21lbShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBmbGFncywgc2xqaXRfc2kgcmVnX2FyLCBzbGppdF9zaSBhcmcsIHNsaml0X3N3IGFyZ3cpCitzdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X3MzMiBlbWl0X29wX21lbShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgZmxhZ3MsIHNsaml0X3MzMiByZWdfYXIsIHNsaml0X3MzMiBhcmcsIHNsaml0X3N3IGFyZ3cpCiB7CiAJaWYgKGdldHB1dF9hcmdfZmFzdChjb21waWxlciwgZmxhZ3MsIHJlZ19hciwgYXJnLCBhcmd3KSkKIAkJcmV0dXJuIGNvbXBpbGVyLT5lcnJvcjsKQEAgLTg4NywyNiArODg3LDI2IEBACiAJcmV0dXJuIGdldHB1dF9hcmcoY29tcGlsZXIsIGZsYWdzLCByZWdfYXIsIGFyZywgYXJndywgMCwgMCk7CiB9CiAKLXN0YXRpYyBTTEpJVF9JTkxJTkUgc2xqaXRfc2kgZW1pdF9vcF9tZW0yKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIGZsYWdzLCBzbGppdF9zaSByZWcsIHNsaml0X3NpIGFyZzEsIHNsaml0X3N3IGFyZzF3LCBzbGppdF9zaSBhcmcyLCBzbGppdF9zdyBhcmcydykKK3N0YXRpYyBTTEpJVF9JTkxJTkUgc2xqaXRfczMyIGVtaXRfb3BfbWVtMihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgZmxhZ3MsIHNsaml0X3MzMiByZWcsIHNsaml0X3MzMiBhcmcxLCBzbGppdF9zdyBhcmcxdywgc2xqaXRfczMyIGFyZzIsIHNsaml0X3N3IGFyZzJ3KQogewogCWlmIChnZXRwdXRfYXJnX2Zhc3QoY29tcGlsZXIsIGZsYWdzLCByZWcsIGFyZzEsIGFyZzF3KSkKIAkJcmV0dXJuIGNvbXBpbGVyLT5lcnJvcjsKIAlyZXR1cm4gZ2V0cHV0X2FyZyhjb21waWxlciwgZmxhZ3MsIHJlZywgYXJnMSwgYXJnMXcsIGFyZzIsIGFyZzJ3KTsKIH0KIAotc3RhdGljIHNsaml0X3NpIGVtaXRfb3Aoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsIHNsaml0X3NpIGZsYWdzLAotCXNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dywKLQlzbGppdF9zaSBzcmMxLCBzbGppdF9zdyBzcmMxdywKLQlzbGppdF9zaSBzcmMyLCBzbGppdF9zdyBzcmMydykKK3N0YXRpYyBzbGppdF9zMzIgZW1pdF9vcChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgb3AsIHNsaml0X3MzMiBmbGFncywKKwlzbGppdF9zMzIgZHN0LCBzbGppdF9zdyBkc3R3LAorCXNsaml0X3MzMiBzcmMxLCBzbGppdF9zdyBzcmMxdywKKwlzbGppdF9zMzIgc3JjMiwgc2xqaXRfc3cgc3JjMncpCiB7CiAJLyogYXJnMSBnb2VzIHRvIFRNUF9SRUcxIG9yIHNyYyByZWcKIAkgICBhcmcyIGdvZXMgdG8gVE1QX1JFRzIsIGltbSBvciBzcmMgcmVnCiAJICAgVE1QX1JFRzMgY2FuIGJlIHVzZWQgZm9yIGNhY2hpbmcKIAkgICByZXN1bHQgZ29lcyB0byBUTVBfUkVHMiwgc28gcHV0IHJlc3VsdCBjYW4gdXNlIFRNUF9SRUcxIGFuZCBUTVBfUkVHMy4gKi8KLQlzbGppdF9zaSBkc3RfciA9IFRNUF9SRUcyOwotCXNsaml0X3NpIHNyYzFfcjsKKwlzbGppdF9zMzIgZHN0X3IgPSBUTVBfUkVHMjsKKwlzbGppdF9zMzIgc3JjMV9yOwogCXNsaml0X3N3IHNyYzJfciA9IDA7Ci0Jc2xqaXRfc2kgc3VnZ19zcmMyX3IgPSBUTVBfUkVHMjsKKwlzbGppdF9zMzIgc3VnZ19zcmMyX3IgPSBUTVBfUkVHMjsKIAogCWlmICghKGZsYWdzICYgQUxUX0tFRVBfQ0FDSEUpKSB7CiAJCWNvbXBpbGVyLT5jYWNoZV9hcmcgPSAwOwpAQCAtOTE0LDcgKzkxNCw3IEBACiAJfQogCiAJaWYgKFNMSklUX1VOTElLRUxZKGRzdCA9PSBTTEpJVF9VTlVTRUQpKSB7Ci0JCWlmIChvcCA+PSBTTEpJVF9NT1YgJiYgb3AgPD0gU0xKSVRfTU9WVV9TSSAmJiAhKHNyYzIgJiBTTEpJVF9NRU0pKQorCQlpZiAob3AgPj0gU0xKSVRfTU9WICYmIG9wIDw9IFNMSklUX01PVlVfUzMyICYmICEoc3JjMiAmIFNMSklUX01FTSkpCiAJCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKIAkJaWYgKEdFVF9GTEFHUyhvcCkpCiAJCQlmbGFncyB8PSBVTlVTRURfREVTVDsKQEAgLTkyMiw3ICs5MjIsNyBAQAogCWVsc2UgaWYgKEZBU1RfSVNfUkVHKGRzdCkpIHsKIAkJZHN0X3IgPSBkc3Q7CiAJCWZsYWdzIHw9IFJFR19ERVNUOwotCQlpZiAob3AgPj0gU0xKSVRfTU9WICYmIG9wIDw9IFNMSklUX01PVlVfU0kpCisJCWlmIChvcCA+PSBTTEpJVF9NT1YgJiYgb3AgPD0gU0xKSVRfTU9WVV9TMzIpCiAJCQlzdWdnX3NyYzJfciA9IGRzdF9yOwogCX0KIAllbHNlIGlmICgoZHN0ICYgU0xKSVRfTUVNKSAmJiAhZ2V0cHV0X2FyZ19mYXN0KGNvbXBpbGVyLCBmbGFncyB8IEFSR19URVNULCBEUihUTVBfUkVHMSksIGRzdCwgZHN0dykpCkBAIC05NzYsNyArOTc2LDcgQEAKIAlpZiAoRkFTVF9JU19SRUcoc3JjMikpIHsKIAkJc3JjMl9yID0gc3JjMjsKIAkJZmxhZ3MgfD0gUkVHMl9TT1VSQ0U7Ci0JCWlmICghKGZsYWdzICYgUkVHX0RFU1QpICYmIG9wID49IFNMSklUX01PViAmJiBvcCA8PSBTTEpJVF9NT1ZVX1NJKQorCQlpZiAoIShmbGFncyAmIFJFR19ERVNUKSAmJiBvcCA+PSBTTEpJVF9NT1YgJiYgb3AgPD0gU0xKSVRfTU9WVV9TMzIpCiAJCQlkc3RfciA9IHNyYzJfcjsKIAl9CiAJZWxzZSBpZiAoc3JjMiAmIFNMSklUX0lNTSkgewpAQCAtOTg3LDcgKzk4Nyw3IEBACiAJCQl9CiAJCQllbHNlIHsKIAkJCQlzcmMyX3IgPSAwOwotCQkJCWlmICgob3AgPj0gU0xKSVRfTU9WICYmIG9wIDw9IFNMSklUX01PVlVfU0kpICYmIChkc3QgJiBTTEpJVF9NRU0pKQorCQkJCWlmICgob3AgPj0gU0xKSVRfTU9WICYmIG9wIDw9IFNMSklUX01PVlVfUzMyKSAmJiAoZHN0ICYgU0xKSVRfTUVNKSkKIAkJCQkJZHN0X3IgPSAwOwogCQkJfQogCQl9CkBAIC0xMDI5LDEwICsxMDI5LDEwIEBACiAJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CiB9CiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X29wMChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCkKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zMzIgc2xqaXRfZW1pdF9vcDAoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIG9wKQogewogI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19NSVBTXzY0ICYmIFNMSklUX0NPTkZJR19NSVBTXzY0KQotCXNsaml0X3NpIGludF9vcCA9IG9wICYgU0xKSVRfSU5UX09QOworCXNsaml0X3MzMiBpbnRfb3AgPSBvcCAmIFNMSklUX0kzMl9PUDsKICNlbmRpZgogCiAJQ0hFQ0tfRVJST1IoKTsKQEAgLTEwNDQsMjAgKzEwNDQsMjAgQEAKIAkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgQlJFQUssIFVOTU9WQUJMRV9JTlMpOwogCWNhc2UgU0xKSVRfTk9QOgogCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBOT1AsIFVOTU9WQUJMRV9JTlMpOwotCWNhc2UgU0xKSVRfTFVNVUw6Ci0JY2FzZSBTTEpJVF9MU01VTDoKKwljYXNlIFNMSklUX0xNVUxfVVc6CisJY2FzZSBTTEpJVF9MTVVMX1NXOgogI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19NSVBTXzY0ICYmIFNMSklUX0NPTkZJR19NSVBTXzY0KQotCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgKG9wID09IFNMSklUX0xVTVVMID8gRE1VTFRVIDogRE1VTFQpIHwgUyhTTEpJVF9SMCkgfCBUKFNMSklUX1IxKSwgTU9WQUJMRV9JTlMpKTsKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIChvcCA9PSBTTEpJVF9MTVVMX1VXID8gRE1VTFRVIDogRE1VTFQpIHwgUyhTTEpJVF9SMCkgfCBUKFNMSklUX1IxKSwgTU9WQUJMRV9JTlMpKTsKICNlbHNlCi0JCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCAob3AgPT0gU0xKSVRfTFVNVUwgPyBNVUxUVSA6IE1VTFQpIHwgUyhTTEpJVF9SMCkgfCBUKFNMSklUX1IxKSwgTU9WQUJMRV9JTlMpKTsKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIChvcCA9PSBTTEpJVF9MTVVMX1VXID8gTVVMVFUgOiBNVUxUKSB8IFMoU0xKSVRfUjApIHwgVChTTEpJVF9SMSksIE1PVkFCTEVfSU5TKSk7CiAjZW5kaWYKIAkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIE1GTE8gfCBEKFNMSklUX1IwKSwgRFIoU0xKSVRfUjApKSk7CiAJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIE1GSEkgfCBEKFNMSklUX1IxKSwgRFIoU0xKSVRfUjEpKTsKLQljYXNlIFNMSklUX1VESVZNT0Q6Ci0JY2FzZSBTTEpJVF9TRElWTU9EOgotCWNhc2UgU0xKSVRfVURJVkk6Ci0JY2FzZSBTTEpJVF9TRElWSToKLQkJU0xKSVRfQ09NUElMRV9BU1NFUlQoKFNMSklUX1VESVZNT0QgJiAweDIpID09IDAgJiYgU0xKSVRfVURJVkkgLSAweDIgPT0gU0xKSVRfVURJVk1PRCwgYmFkX2Rpdl9vcGNvZGVfYXNzaWdubWVudHMpOworCWNhc2UgU0xKSVRfRElWTU9EX1VXOgorCWNhc2UgU0xKSVRfRElWTU9EX1NXOgorCWNhc2UgU0xKSVRfRElWX1VXOgorCWNhc2UgU0xKSVRfRElWX1NXOgorCQlTTEpJVF9DT01QSUxFX0FTU0VSVCgoU0xKSVRfRElWTU9EX1VXICYgMHgyKSA9PSAwICYmIFNMSklUX0RJVl9VVyAtIDB4MiA9PSBTTEpJVF9ESVZNT0RfVVcsIGJhZF9kaXZfb3Bjb2RlX2Fzc2lnbm1lbnRzKTsKICNpZiAhKGRlZmluZWQgU0xKSVRfTUlQU19SMSAmJiBTTEpJVF9NSVBTX1IxKQogCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgTk9QLCBVTk1PVkFCTEVfSU5TKSk7CiAJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBOT1AsIFVOTU9WQUJMRV9JTlMpKTsKQEAgLTEwNjUsMjggKzEwNjUsMjggQEAKIAogI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19NSVBTXzY0ICYmIFNMSklUX0NPTkZJR19NSVBTXzY0KQogCQlpZiAoaW50X29wKQotCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsICgob3AgfCAweDIpID09IFNMSklUX1VESVZJID8gRElWVSA6IERJVikgfCBTKFNMSklUX1IwKSB8IFQoU0xKSVRfUjEpLCBNT1ZBQkxFX0lOUykpOworCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsICgob3AgfCAweDIpID09IFNMSklUX0RJVl9VVyA/IERJVlUgOiBESVYpIHwgUyhTTEpJVF9SMCkgfCBUKFNMSklUX1IxKSwgTU9WQUJMRV9JTlMpKTsKIAkJZWxzZQotCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsICgob3AgfCAweDIpID09IFNMSklUX1VESVZJID8gRERJVlUgOiBERElWKSB8IFMoU0xKSVRfUjApIHwgVChTTEpJVF9SMSksIE1PVkFCTEVfSU5TKSk7CisJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgKChvcCB8IDB4MikgPT0gU0xKSVRfRElWX1VXID8gRERJVlUgOiBERElWKSB8IFMoU0xKSVRfUjApIHwgVChTTEpJVF9SMSksIE1PVkFCTEVfSU5TKSk7CiAjZWxzZQotCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgKChvcCB8IDB4MikgPT0gU0xKSVRfVURJVkkgPyBESVZVIDogRElWKSB8IFMoU0xKSVRfUjApIHwgVChTTEpJVF9SMSksIE1PVkFCTEVfSU5TKSk7CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCAoKG9wIHwgMHgyKSA9PSBTTEpJVF9ESVZfVVcgPyBESVZVIDogRElWKSB8IFMoU0xKSVRfUjApIHwgVChTTEpJVF9SMSksIE1PVkFCTEVfSU5TKSk7CiAjZW5kaWYKIAogCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgTUZMTyB8IEQoU0xKSVRfUjApLCBEUihTTEpJVF9SMCkpKTsKLQkJcmV0dXJuIChvcCA+PSBTTEpJVF9VRElWSSkgPyBTTEpJVF9TVUNDRVNTIDogcHVzaF9pbnN0KGNvbXBpbGVyLCBNRkhJIHwgRChTTEpJVF9SMSksIERSKFNMSklUX1IxKSk7CisJCXJldHVybiAob3AgPj0gU0xKSVRfRElWX1VXKSA/IFNMSklUX1NVQ0NFU1MgOiBwdXNoX2luc3QoY29tcGlsZXIsIE1GSEkgfCBEKFNMSklUX1IxKSwgRFIoU0xKSVRfUjEpKTsKIAl9CiAKIAlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKIH0KIAotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfb3AxKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIG9wLAotCXNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dywKLQlzbGppdF9zaSBzcmMsIHNsaml0X3N3IHNyY3cpCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfczMyIHNsaml0X2VtaXRfb3AxKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiBvcCwKKwlzbGppdF9zMzIgZHN0LCBzbGppdF9zdyBkc3R3LAorCXNsaml0X3MzMiBzcmMsIHNsaml0X3N3IHNyY3cpCiB7CiAjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX01JUFNfMzIgJiYgU0xKSVRfQ09ORklHX01JUFNfMzIpCiAjCWRlZmluZSBmbGFncyAwCiAjZWxzZQotCXNsaml0X3NpIGZsYWdzID0gMDsKKwlzbGppdF9zMzIgZmxhZ3MgPSAwOwogI2VuZGlmCiAKIAlDSEVDS19FUlJPUigpOwpAQCAtMTA5NSwxMCArMTA5NSwxMCBAQAogCUFESlVTVF9MT0NBTF9PRkZTRVQoc3JjLCBzcmN3KTsKIAogI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19NSVBTXzY0ICYmIFNMSklUX0NPTkZJR19NSVBTXzY0KQotCWlmICgob3AgJiBTTEpJVF9JTlRfT1ApICYmIEdFVF9PUENPREUob3ApID49IFNMSklUX05PVCkgeworCWlmICgob3AgJiBTTEpJVF9JMzJfT1ApICYmIEdFVF9PUENPREUob3ApID49IFNMSklUX05PVCkgewogCQlmbGFncyB8PSBJTlRfREFUQSB8IFNJR05FRF9EQVRBOwogCQlpZiAoc3JjICYgU0xKSVRfSU1NKQotCQkJc3JjdyA9IChzbGppdF9zaSlzcmN3OworCQkJc3JjdyA9IChzbGppdF9zMzIpc3JjdzsKIAl9CiAjZW5kaWYKIApAQCAtMTEwNyw2MSArMTEwNyw2MSBAQAogCWNhc2UgU0xKSVRfTU9WX1A6CiAJCXJldHVybiBlbWl0X29wKGNvbXBpbGVyLCBTTEpJVF9NT1YsIFdPUkRfREFUQSwgZHN0LCBkc3R3LCBUTVBfUkVHMSwgMCwgc3JjLCBzcmN3KTsKIAotCWNhc2UgU0xKSVRfTU9WX1VJOgorCWNhc2UgU0xKSVRfTU9WX1UzMjoKICNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfTUlQU18zMiAmJiBTTEpJVF9DT05GSUdfTUlQU18zMikKLQkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01PVl9VSSwgSU5UX0RBVEEsIGRzdCwgZHN0dywgVE1QX1JFRzEsIDAsIHNyYywgc3Jjdyk7CisJCXJldHVybiBlbWl0X29wKGNvbXBpbGVyLCBTTEpJVF9NT1ZfVTMyLCBJTlRfREFUQSwgZHN0LCBkc3R3LCBUTVBfUkVHMSwgMCwgc3JjLCBzcmN3KTsKICNlbHNlCi0JCXJldHVybiBlbWl0X29wKGNvbXBpbGVyLCBTTEpJVF9NT1ZfVUksIElOVF9EQVRBLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIChzcmMgJiBTTEpJVF9JTU0pID8gKHNsaml0X3VpKXNyY3cgOiBzcmN3KTsKKwkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01PVl9VMzIsIElOVF9EQVRBLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIChzcmMgJiBTTEpJVF9JTU0pID8gKHNsaml0X3UzMilzcmN3IDogc3Jjdyk7CiAjZW5kaWYKIAotCWNhc2UgU0xKSVRfTU9WX1NJOgorCWNhc2UgU0xKSVRfTU9WX1MzMjoKICNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfTUlQU18zMiAmJiBTTEpJVF9DT05GSUdfTUlQU18zMikKLQkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01PVl9TSSwgSU5UX0RBVEEgfCBTSUdORURfREFUQSwgZHN0LCBkc3R3LCBUTVBfUkVHMSwgMCwgc3JjLCBzcmN3KTsKKwkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01PVl9TMzIsIElOVF9EQVRBIHwgU0lHTkVEX0RBVEEsIGRzdCwgZHN0dywgVE1QX1JFRzEsIDAsIHNyYywgc3Jjdyk7CiAjZWxzZQotCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfTU9WX1NJLCBJTlRfREFUQSB8IFNJR05FRF9EQVRBLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIChzcmMgJiBTTEpJVF9JTU0pID8gKHNsaml0X3NpKXNyY3cgOiBzcmN3KTsKKwkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01PVl9TMzIsIElOVF9EQVRBIHwgU0lHTkVEX0RBVEEsIGRzdCwgZHN0dywgVE1QX1JFRzEsIDAsIHNyYywgKHNyYyAmIFNMSklUX0lNTSkgPyAoc2xqaXRfczMyKXNyY3cgOiBzcmN3KTsKICNlbmRpZgogCi0JY2FzZSBTTEpJVF9NT1ZfVUI6Ci0JCXJldHVybiBlbWl0X29wKGNvbXBpbGVyLCBTTEpJVF9NT1ZfVUIsIEJZVEVfREFUQSwgZHN0LCBkc3R3LCBUTVBfUkVHMSwgMCwgc3JjLCAoc3JjICYgU0xKSVRfSU1NKSA/IChzbGppdF91YilzcmN3IDogc3Jjdyk7CisJY2FzZSBTTEpJVF9NT1ZfVTg6CisJCXJldHVybiBlbWl0X29wKGNvbXBpbGVyLCBTTEpJVF9NT1ZfVTgsIEJZVEVfREFUQSwgZHN0LCBkc3R3LCBUTVBfUkVHMSwgMCwgc3JjLCAoc3JjICYgU0xKSVRfSU1NKSA/IChzbGppdF91OClzcmN3IDogc3Jjdyk7CiAKLQljYXNlIFNMSklUX01PVl9TQjoKLQkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01PVl9TQiwgQllURV9EQVRBIHwgU0lHTkVEX0RBVEEsIGRzdCwgZHN0dywgVE1QX1JFRzEsIDAsIHNyYywgKHNyYyAmIFNMSklUX0lNTSkgPyAoc2xqaXRfc2Ipc3JjdyA6IHNyY3cpOworCWNhc2UgU0xKSVRfTU9WX1M4OgorCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfTU9WX1M4LCBCWVRFX0RBVEEgfCBTSUdORURfREFUQSwgZHN0LCBkc3R3LCBUTVBfUkVHMSwgMCwgc3JjLCAoc3JjICYgU0xKSVRfSU1NKSA/IChzbGppdF9zOClzcmN3IDogc3Jjdyk7CiAKLQljYXNlIFNMSklUX01PVl9VSDoKLQkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01PVl9VSCwgSEFMRl9EQVRBLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIChzcmMgJiBTTEpJVF9JTU0pID8gKHNsaml0X3VoKXNyY3cgOiBzcmN3KTsKKwljYXNlIFNMSklUX01PVl9VMTY6CisJCXJldHVybiBlbWl0X29wKGNvbXBpbGVyLCBTTEpJVF9NT1ZfVTE2LCBIQUxGX0RBVEEsIGRzdCwgZHN0dywgVE1QX1JFRzEsIDAsIHNyYywgKHNyYyAmIFNMSklUX0lNTSkgPyAoc2xqaXRfdTE2KXNyY3cgOiBzcmN3KTsKIAotCWNhc2UgU0xKSVRfTU9WX1NIOgotCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfTU9WX1NILCBIQUxGX0RBVEEgfCBTSUdORURfREFUQSwgZHN0LCBkc3R3LCBUTVBfUkVHMSwgMCwgc3JjLCAoc3JjICYgU0xKSVRfSU1NKSA/IChzbGppdF9zaClzcmN3IDogc3Jjdyk7CisJY2FzZSBTTEpJVF9NT1ZfUzE2OgorCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfTU9WX1MxNiwgSEFMRl9EQVRBIHwgU0lHTkVEX0RBVEEsIGRzdCwgZHN0dywgVE1QX1JFRzEsIDAsIHNyYywgKHNyYyAmIFNMSklUX0lNTSkgPyAoc2xqaXRfczE2KXNyY3cgOiBzcmN3KTsKIAogCWNhc2UgU0xKSVRfTU9WVToKIAljYXNlIFNMSklUX01PVlVfUDoKIAkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01PViwgV09SRF9EQVRBIHwgV1JJVEVfQkFDSywgZHN0LCBkc3R3LCBUTVBfUkVHMSwgMCwgc3JjLCBzcmN3KTsKIAotCWNhc2UgU0xKSVRfTU9WVV9VSToKKwljYXNlIFNMSklUX01PVlVfVTMyOgogI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19NSVBTXzMyICYmIFNMSklUX0NPTkZJR19NSVBTXzMyKQotCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfTU9WX1VJLCBJTlRfREFUQSB8IFdSSVRFX0JBQ0ssIGRzdCwgZHN0dywgVE1QX1JFRzEsIDAsIHNyYywgc3Jjdyk7CisJCXJldHVybiBlbWl0X29wKGNvbXBpbGVyLCBTTEpJVF9NT1ZfVTMyLCBJTlRfREFUQSB8IFdSSVRFX0JBQ0ssIGRzdCwgZHN0dywgVE1QX1JFRzEsIDAsIHNyYywgc3Jjdyk7CiAjZWxzZQotCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfTU9WX1VJLCBJTlRfREFUQSB8IFdSSVRFX0JBQ0ssIGRzdCwgZHN0dywgVE1QX1JFRzEsIDAsIHNyYywgKHNyYyAmIFNMSklUX0lNTSkgPyAoc2xqaXRfdWkpc3JjdyA6IHNyY3cpOworCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfTU9WX1UzMiwgSU5UX0RBVEEgfCBXUklURV9CQUNLLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIChzcmMgJiBTTEpJVF9JTU0pID8gKHNsaml0X3UzMilzcmN3IDogc3Jjdyk7CiAjZW5kaWYKIAotCWNhc2UgU0xKSVRfTU9WVV9TSToKKwljYXNlIFNMSklUX01PVlVfUzMyOgogI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19NSVBTXzMyICYmIFNMSklUX0NPTkZJR19NSVBTXzMyKQotCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfTU9WX1NJLCBJTlRfREFUQSB8IFNJR05FRF9EQVRBIHwgV1JJVEVfQkFDSywgZHN0LCBkc3R3LCBUTVBfUkVHMSwgMCwgc3JjLCBzcmN3KTsKKwkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01PVl9TMzIsIElOVF9EQVRBIHwgU0lHTkVEX0RBVEEgfCBXUklURV9CQUNLLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIHNyY3cpOwogI2Vsc2UKLQkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01PVl9TSSwgSU5UX0RBVEEgfCBTSUdORURfREFUQSB8IFdSSVRFX0JBQ0ssIGRzdCwgZHN0dywgVE1QX1JFRzEsIDAsIHNyYywgKHNyYyAmIFNMSklUX0lNTSkgPyAoc2xqaXRfc2kpc3JjdyA6IHNyY3cpOworCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfTU9WX1MzMiwgSU5UX0RBVEEgfCBTSUdORURfREFUQSB8IFdSSVRFX0JBQ0ssIGRzdCwgZHN0dywgVE1QX1JFRzEsIDAsIHNyYywgKHNyYyAmIFNMSklUX0lNTSkgPyAoc2xqaXRfczMyKXNyY3cgOiBzcmN3KTsKICNlbmRpZgogCi0JY2FzZSBTTEpJVF9NT1ZVX1VCOgotCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfTU9WX1VCLCBCWVRFX0RBVEEgfCBXUklURV9CQUNLLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIChzcmMgJiBTTEpJVF9JTU0pID8gKHNsaml0X3ViKXNyY3cgOiBzcmN3KTsKKwljYXNlIFNMSklUX01PVlVfVTg6CisJCXJldHVybiBlbWl0X29wKGNvbXBpbGVyLCBTTEpJVF9NT1ZfVTgsIEJZVEVfREFUQSB8IFdSSVRFX0JBQ0ssIGRzdCwgZHN0dywgVE1QX1JFRzEsIDAsIHNyYywgKHNyYyAmIFNMSklUX0lNTSkgPyAoc2xqaXRfdTgpc3JjdyA6IHNyY3cpOwogCi0JY2FzZSBTTEpJVF9NT1ZVX1NCOgotCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfTU9WX1NCLCBCWVRFX0RBVEEgfCBTSUdORURfREFUQSB8IFdSSVRFX0JBQ0ssIGRzdCwgZHN0dywgVE1QX1JFRzEsIDAsIHNyYywgKHNyYyAmIFNMSklUX0lNTSkgPyAoc2xqaXRfc2Ipc3JjdyA6IHNyY3cpOworCWNhc2UgU0xKSVRfTU9WVV9TODoKKwkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01PVl9TOCwgQllURV9EQVRBIHwgU0lHTkVEX0RBVEEgfCBXUklURV9CQUNLLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIChzcmMgJiBTTEpJVF9JTU0pID8gKHNsaml0X3M4KXNyY3cgOiBzcmN3KTsKIAotCWNhc2UgU0xKSVRfTU9WVV9VSDoKLQkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01PVl9VSCwgSEFMRl9EQVRBIHwgV1JJVEVfQkFDSywgZHN0LCBkc3R3LCBUTVBfUkVHMSwgMCwgc3JjLCAoc3JjICYgU0xKSVRfSU1NKSA/IChzbGppdF91aClzcmN3IDogc3Jjdyk7CisJY2FzZSBTTEpJVF9NT1ZVX1UxNjoKKwkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01PVl9VMTYsIEhBTEZfREFUQSB8IFdSSVRFX0JBQ0ssIGRzdCwgZHN0dywgVE1QX1JFRzEsIDAsIHNyYywgKHNyYyAmIFNMSklUX0lNTSkgPyAoc2xqaXRfdTE2KXNyY3cgOiBzcmN3KTsKIAotCWNhc2UgU0xKSVRfTU9WVV9TSDoKLQkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01PVl9TSCwgSEFMRl9EQVRBIHwgU0lHTkVEX0RBVEEgfCBXUklURV9CQUNLLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIChzcmMgJiBTTEpJVF9JTU0pID8gKHNsaml0X3NoKXNyY3cgOiBzcmN3KTsKKwljYXNlIFNMSklUX01PVlVfUzE2OgorCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfTU9WX1MxNiwgSEFMRl9EQVRBIHwgU0lHTkVEX0RBVEEgfCBXUklURV9CQUNLLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIChzcmMgJiBTTEpJVF9JTU0pID8gKHNsaml0X3MxNilzcmN3IDogc3Jjdyk7CiAKIAljYXNlIFNMSklUX05PVDoKIAkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIG9wLCBmbGFncywgZHN0LCBkc3R3LCBUTVBfUkVHMSwgMCwgc3JjLCBzcmN3KTsKQEAgLTExODAsMTUgKzExODAsMTUgQEAKICNlbmRpZgogfQogCi1TTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9vcDIoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsCi0Jc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3LAotCXNsaml0X3NpIHNyYzEsIHNsaml0X3N3IHNyYzF3LAotCXNsaml0X3NpIHNyYzIsIHNsaml0X3N3IHNyYzJ3KQorU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3MzMiBzbGppdF9lbWl0X29wMihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgb3AsCisJc2xqaXRfczMyIGRzdCwgc2xqaXRfc3cgZHN0dywKKwlzbGppdF9zMzIgc3JjMSwgc2xqaXRfc3cgc3JjMXcsCisJc2xqaXRfczMyIHNyYzIsIHNsaml0X3N3IHNyYzJ3KQogewogI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19NSVBTXzMyICYmIFNMSklUX0NPTkZJR19NSVBTXzMyKQogIwlkZWZpbmUgZmxhZ3MgMAogI2Vsc2UKLQlzbGppdF9zaSBmbGFncyA9IDA7CisJc2xqaXRfczMyIGZsYWdzID0gMDsKICNlbmRpZgogCiAJQ0hFQ0tfRVJST1IoKTsKQEAgLTExOTgsMTIgKzExOTgsMTIgQEAKIAlBREpVU1RfTE9DQUxfT0ZGU0VUKHNyYzIsIHNyYzJ3KTsKIAogI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19NSVBTXzY0ICYmIFNMSklUX0NPTkZJR19NSVBTXzY0KQotCWlmIChvcCAmIFNMSklUX0lOVF9PUCkgeworCWlmIChvcCAmIFNMSklUX0kzMl9PUCkgewogCQlmbGFncyB8PSBJTlRfREFUQSB8IFNJR05FRF9EQVRBOwogCQlpZiAoc3JjMSAmIFNMSklUX0lNTSkKLQkJCXNyYzF3ID0gKHNsaml0X3NpKXNyYzF3OworCQkJc3JjMXcgPSAoc2xqaXRfczMyKXNyYzF3OwogCQlpZiAoc3JjMiAmIFNMSklUX0lNTSkKLQkJCXNyYzJ3ID0gKHNsaml0X3NpKXNyYzJ3OworCQkJc3JjMncgPSAoc2xqaXRfczMyKXNyYzJ3OwogCX0KICNlbmRpZgogCkBAIC0xMjMyLDcgKzEyMzIsNyBAQAogCQkJc3JjMncgJj0gMHgxZjsKICNlbHNlCiAJCWlmIChzcmMyICYgU0xKSVRfSU1NKSB7Ci0JCQlpZiAob3AgJiBTTEpJVF9JTlRfT1ApCisJCQlpZiAob3AgJiBTTEpJVF9JMzJfT1ApCiAJCQkJc3JjMncgJj0gMHgxZjsKIAkJCWVsc2UKIAkJCQlzcmMydyAmPSAweDNmOwpAQCAtMTI0OCwyMCArMTI0OCwyMCBAQAogI2VuZGlmCiB9CiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9nZXRfcmVnaXN0ZXJfaW5kZXgoc2xqaXRfc2kgcmVnKQorU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3MzMiBzbGppdF9nZXRfcmVnaXN0ZXJfaW5kZXgoc2xqaXRfczMyIHJlZykKIHsKIAlDSEVDS19SRUdfSU5ERVgoY2hlY2tfc2xqaXRfZ2V0X3JlZ2lzdGVyX2luZGV4KHJlZykpOwogCXJldHVybiByZWdfbWFwW3JlZ107CiB9CiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9nZXRfZmxvYXRfcmVnaXN0ZXJfaW5kZXgoc2xqaXRfc2kgcmVnKQorU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3MzMiBzbGppdF9nZXRfZmxvYXRfcmVnaXN0ZXJfaW5kZXgoc2xqaXRfczMyIHJlZykKIHsKIAlDSEVDS19SRUdfSU5ERVgoY2hlY2tfc2xqaXRfZ2V0X2Zsb2F0X3JlZ2lzdGVyX2luZGV4KHJlZykpOwogCXJldHVybiByZWcgPDwgMTsKIH0KIAotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfb3BfY3VzdG9tKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsCi0Jdm9pZCAqaW5zdHJ1Y3Rpb24sIHNsaml0X3NpIHNpemUpCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfczMyIHNsaml0X2VtaXRfb3BfY3VzdG9tKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsCisJdm9pZCAqaW5zdHJ1Y3Rpb24sIHNsaml0X3MzMiBzaXplKQogewogCUNIRUNLX0VSUk9SKCk7CiAJQ0hFQ0soY2hlY2tfc2xqaXRfZW1pdF9vcF9jdXN0b20oY29tcGlsZXIsIGluc3RydWN0aW9uLCBzaXplKSk7CkBAIC0xMjczLDcgKzEyNzMsNyBAQAogLyogIEZsb2F0aW5nIHBvaW50IG9wZXJhdG9ycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2lzX2ZwdV9hdmFpbGFibGUodm9pZCkKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zMzIgc2xqaXRfaXNfZnB1X2F2YWlsYWJsZSh2b2lkKQogewogI2lmZGVmIFNMSklUX0lTX0ZQVV9BVkFJTEFCTEUKIAlyZXR1cm4gU0xKSVRfSVNfRlBVX0FWQUlMQUJMRTsKQEAgLTEyODYsMTcgKzEyODYsMTcgQEAKICNlbmRpZgogfQogCi0jZGVmaW5lIEZMT0FUX0RBVEEob3ApIChET1VCTEVfREFUQSB8ICgob3AgJiBTTEpJVF9TSU5HTEVfT1ApID4+IDcpKQotI2RlZmluZSBGTVQob3ApICgoKG9wICYgU0xKSVRfU0lOR0xFX09QKSBeIFNMSklUX1NJTkdMRV9PUCkgPDwgKDIxIC0gOCkpCisjZGVmaW5lIEZMT0FUX0RBVEEob3ApIChET1VCTEVfREFUQSB8ICgob3AgJiBTTEpJVF9GMzJfT1ApID4+IDcpKQorI2RlZmluZSBGTVQob3ApICgoKG9wICYgU0xKSVRfRjMyX09QKSBeIFNMSklUX0YzMl9PUCkgPDwgKDIxIC0gOCkpCiAKLXN0YXRpYyBTTEpJVF9JTkxJTkUgc2xqaXRfc2kgc2xqaXRfZW1pdF9mb3AxX2NvbnZ3X2Zyb21kKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIG9wLAotCXNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dywKLQlzbGppdF9zaSBzcmMsIHNsaml0X3N3IHNyY3cpCitzdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X3MzMiBzbGppdF9lbWl0X2ZvcDFfY29udl9zd19mcm9tX2Y2NChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgb3AsCisJc2xqaXRfczMyIGRzdCwgc2xqaXRfc3cgZHN0dywKKwlzbGppdF9zMzIgc3JjLCBzbGppdF9zdyBzcmN3KQogewogI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19NSVBTXzMyICYmIFNMSklUX0NPTkZJR19NSVBTXzMyKQogIwlkZWZpbmUgZmxhZ3MgMAogI2Vsc2UKLQlzbGppdF9zaSBmbGFncyA9IChHRVRfT1BDT0RFKG9wKSA9PSBTTEpJVF9DT05WV19GUk9NRCkgPDwgMjE7CisJc2xqaXRfczMyIGZsYWdzID0gKEdFVF9PUENPREUob3ApID09IFNMSklUX0NPTlZfU1dfRlJPTV9GNjQpIDw8IDIxOwogI2VuZGlmCiAKIAlpZiAoc3JjICYgU0xKSVRfTUVNKSB7CkBAIC0xMzIyLDE3ICsxMzIyLDE3IEBACiAjZW5kaWYKIH0KIAotc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9zaSBzbGppdF9lbWl0X2ZvcDFfY29udmRfZnJvbXcoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsCi0Jc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3LAotCXNsaml0X3NpIHNyYywgc2xqaXRfc3cgc3JjdykKK3N0YXRpYyBTTEpJVF9JTkxJTkUgc2xqaXRfczMyIHNsaml0X2VtaXRfZm9wMV9jb252X2Y2NF9mcm9tX3N3KHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiBvcCwKKwlzbGppdF9zMzIgZHN0LCBzbGppdF9zdyBkc3R3LAorCXNsaml0X3MzMiBzcmMsIHNsaml0X3N3IHNyY3cpCiB7CiAjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX01JUFNfMzIgJiYgU0xKSVRfQ09ORklHX01JUFNfMzIpCiAjCWRlZmluZSBmbGFncyAwCiAjZWxzZQotCXNsaml0X3NpIGZsYWdzID0gKEdFVF9PUENPREUob3ApID09IFNMSklUX0NPTlZEX0ZST01XKSA8PCAyMTsKKwlzbGppdF9zMzIgZmxhZ3MgPSAoR0VUX09QQ09ERShvcCkgPT0gU0xKSVRfQ09OVl9GNjRfRlJPTV9TVykgPDwgMjE7CiAjZW5kaWYKIAotCXNsaml0X3NpIGRzdF9yID0gRkFTVF9JU19SRUcoZHN0KSA/IChkc3QgPDwgMSkgOiBUTVBfRlJFRzE7CisJc2xqaXRfczMyIGRzdF9yID0gRkFTVF9JU19SRUcoZHN0KSA/IChkc3QgPDwgMSkgOiBUTVBfRlJFRzE7CiAKIAlpZiAoRkFTVF9JU19SRUcoc3JjKSkKIAkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIE1UQzEgfCBmbGFncyB8IFQoc3JjKSB8IEZTKFRNUF9GUkVHMSksIE1PVkFCTEVfSU5TKSk7CkBAIC0xMzQyLDE0ICsxMzQyLDE0IEBACiAJfQogCWVsc2UgewogI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19YODZfNjQgJiYgU0xKSVRfQ09ORklHX1g4Nl82NCkKLQkJaWYgKEdFVF9PUENPREUob3ApID09IFNMSklUX0NPTlZEX0ZST01JKQotCQkJc3JjdyA9IChzbGppdF9zaSlzcmN3OworCQlpZiAoR0VUX09QQ09ERShvcCkgPT0gU0xKSVRfQ09OVl9GNjRfRlJPTV9TMzIpCisJCQlzcmN3ID0gKHNsaml0X3MzMilzcmN3OwogI2VuZGlmCiAJCUZBSUxfSUYobG9hZF9pbW1lZGlhdGUoY29tcGlsZXIsIERSKFRNUF9SRUcxKSwgc3JjdykpOwogCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgTVRDMSB8IGZsYWdzIHwgVChUTVBfUkVHMSkgfCBGUyhUTVBfRlJFRzEpLCBNT1ZBQkxFX0lOUykpOwogCX0KIAotCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBDVlRfU19TIHwgZmxhZ3MgfCAoNCA8PCAyMSkgfCAoKChvcCAmIFNMSklUX1NJTkdMRV9PUCkgXiBTTEpJVF9TSU5HTEVfT1ApID4+IDgpIHwgRlMoVE1QX0ZSRUcxKSB8IEZEKGRzdF9yKSwgTU9WQUJMRV9JTlMpKTsKKwlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgQ1ZUX1NfUyB8IGZsYWdzIHwgKDQgPDwgMjEpIHwgKCgob3AgJiBTTEpJVF9GMzJfT1ApIF4gU0xKSVRfRjMyX09QKSA+PiA4KSB8IEZTKFRNUF9GUkVHMSkgfCBGRChkc3RfciksIE1PVkFCTEVfSU5TKSk7CiAKIAlpZiAoZHN0ICYgU0xKSVRfTUVNKQogCQlyZXR1cm4gZW1pdF9vcF9tZW0yKGNvbXBpbGVyLCBGTE9BVF9EQVRBKG9wKSwgVE1QX0ZSRUcxLCBkc3QsIGRzdHcsIDAsIDApOwpAQCAtMTM2MCw5ICsxMzYwLDkgQEAKICNlbmRpZgogfQogCi1zdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X3NpIHNsaml0X2VtaXRfZm9wMV9jbXAoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsCi0Jc2xqaXRfc2kgc3JjMSwgc2xqaXRfc3cgc3JjMXcsCi0Jc2xqaXRfc2kgc3JjMiwgc2xqaXRfc3cgc3JjMncpCitzdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X3MzMiBzbGppdF9lbWl0X2ZvcDFfY21wKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiBvcCwKKwlzbGppdF9zMzIgc3JjMSwgc2xqaXRfc3cgc3JjMXcsCisJc2xqaXRfczMyIHNyYzIsIHNsaml0X3N3IHNyYzJ3KQogewogCWlmIChzcmMxICYgU0xKSVRfTUVNKSB7CiAJCUZBSUxfSUYoZW1pdF9vcF9tZW0yKGNvbXBpbGVyLCBGTE9BVF9EQVRBKG9wKSB8IExPQURfREFUQSwgVE1QX0ZSRUcxLCBzcmMxLCBzcmMxdywgc3JjMiwgc3JjMncpKTsKQEAgLTEzOTksMjEgKzEzOTksMjEgQEAKIAlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBDX1VOX1MgfCBGTVQob3ApIHwgRlQoc3JjMikgfCBGUyhzcmMxKSwgRkNTUl9GQ0MpOwogfQogCi1TTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9mb3AxKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIG9wLAotCXNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dywKLQlzbGppdF9zaSBzcmMsIHNsaml0X3N3IHNyY3cpCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfczMyIHNsaml0X2VtaXRfZm9wMShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgb3AsCisJc2xqaXRfczMyIGRzdCwgc2xqaXRfc3cgZHN0dywKKwlzbGppdF9zMzIgc3JjLCBzbGppdF9zdyBzcmN3KQogewotCXNsaml0X3NpIGRzdF9yOworCXNsaml0X3MzMiBkc3RfcjsKIAogCUNIRUNLX0VSUk9SKCk7CiAJY29tcGlsZXItPmNhY2hlX2FyZyA9IDA7CiAJY29tcGlsZXItPmNhY2hlX2FyZ3cgPSAwOwogCi0JU0xKSVRfQ09NUElMRV9BU1NFUlQoKFNMSklUX1NJTkdMRV9PUCA9PSAweDEwMCkgJiYgIShET1VCTEVfREFUQSAmIDB4MiksIGZsb2F0X3RyYW5zZmVyX2JpdF9lcnJvcik7CisJU0xKSVRfQ09NUElMRV9BU1NFUlQoKFNMSklUX0YzMl9PUCA9PSAweDEwMCkgJiYgIShET1VCTEVfREFUQSAmIDB4MiksIGZsb2F0X3RyYW5zZmVyX2JpdF9lcnJvcik7CiAJU0VMRUNUX0ZPUDFfT1BFUkFUSU9OX1dJVEhfQ0hFQ0tTKGNvbXBpbGVyLCBvcCwgZHN0LCBkc3R3LCBzcmMsIHNyY3cpOwogCi0JaWYgKEdFVF9PUENPREUob3ApID09IFNMSklUX0NPTlZEX0ZST01TKQotCQlvcCBePSBTTEpJVF9TSU5HTEVfT1A7CisJaWYgKEdFVF9PUENPREUob3ApID09IFNMSklUX0NPTlZfRjY0X0ZST01fRjMyKQorCQlvcCBePSBTTEpJVF9GMzJfT1A7CiAKIAlkc3RfciA9IEZBU1RfSVNfUkVHKGRzdCkgPyAoZHN0IDw8IDEpIDogVE1QX0ZSRUcxOwogCkBAIC0xNDI1LDcgKzE0MjUsNyBAQAogCQlzcmMgPDw9IDE7CiAKIAlzd2l0Y2ggKEdFVF9PUENPREUob3ApKSB7Ci0JY2FzZSBTTEpJVF9ETU9WOgorCWNhc2UgU0xKSVRfTU9WX0Y2NDoKIAkJaWYgKHNyYyAhPSBkc3RfcikgewogCQkJaWYgKGRzdF9yICE9IFRNUF9GUkVHMSkKIAkJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgTU9WX1MgfCBGTVQob3ApIHwgRlMoc3JjKSB8IEZEKGRzdF9yKSwgTU9WQUJMRV9JTlMpKTsKQEAgLTE0MzMsMTUgKzE0MzMsMTUgQEAKIAkJCQlkc3RfciA9IHNyYzsKIAkJfQogCQlicmVhazsKLQljYXNlIFNMSklUX0RORUc6CisJY2FzZSBTTEpJVF9ORUdfRjY0OgogCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgTkVHX1MgfCBGTVQob3ApIHwgRlMoc3JjKSB8IEZEKGRzdF9yKSwgTU9WQUJMRV9JTlMpKTsKIAkJYnJlYWs7Ci0JY2FzZSBTTEpJVF9EQUJTOgorCWNhc2UgU0xKSVRfQUJTX0Y2NDoKIAkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIEFCU19TIHwgRk1UKG9wKSB8IEZTKHNyYykgfCBGRChkc3RfciksIE1PVkFCTEVfSU5TKSk7CiAJCWJyZWFrOwotCWNhc2UgU0xKSVRfQ09OVkRfRlJPTVM6Ci0JCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBDVlRfU19TIHwgKChvcCAmIFNMSklUX1NJTkdMRV9PUCkgPyAxIDogKDEgPDwgMjEpKSB8IEZTKHNyYykgfCBGRChkc3RfciksIE1PVkFCTEVfSU5TKSk7Ci0JCW9wIF49IFNMSklUX1NJTkdMRV9PUDsKKwljYXNlIFNMSklUX0NPTlZfRjY0X0ZST01fRjMyOgorCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgQ1ZUX1NfUyB8ICgob3AgJiBTTEpJVF9GMzJfT1ApID8gMSA6ICgxIDw8IDIxKSkgfCBGUyhzcmMpIHwgRkQoZHN0X3IpLCBNT1ZBQkxFX0lOUykpOworCQlvcCBePSBTTEpJVF9GMzJfT1A7CiAJCWJyZWFrOwogCX0KIApAQCAtMTQ1MCwxMiArMTQ1MCwxMiBAQAogCXJldHVybiBTTEpJVF9TVUNDRVNTOwogfQogCi1TTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9mb3AyKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIG9wLAotCXNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dywKLQlzbGppdF9zaSBzcmMxLCBzbGppdF9zdyBzcmMxdywKLQlzbGppdF9zaSBzcmMyLCBzbGppdF9zdyBzcmMydykKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zMzIgc2xqaXRfZW1pdF9mb3AyKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiBvcCwKKwlzbGppdF9zMzIgZHN0LCBzbGppdF9zdyBkc3R3LAorCXNsaml0X3MzMiBzcmMxLCBzbGppdF9zdyBzcmMxdywKKwlzbGppdF9zMzIgc3JjMiwgc2xqaXRfc3cgc3JjMncpCiB7Ci0Jc2xqaXRfc2kgZHN0X3IsIGZsYWdzID0gMDsKKwlzbGppdF9zMzIgZHN0X3IsIGZsYWdzID0gMDsKIAogCUNIRUNLX0VSUk9SKCk7CiAJQ0hFQ0soY2hlY2tfc2xqaXRfZW1pdF9mb3AyKGNvbXBpbGVyLCBvcCwgZHN0LCBkc3R3LCBzcmMxLCBzcmMxdywgc3JjMiwgc3JjMncpKTsKQEAgLTE1MDksMTkgKzE1MDksMTkgQEAKIAkJc3JjMiA9IFRNUF9GUkVHMjsKIAogCXN3aXRjaCAoR0VUX09QQ09ERShvcCkpIHsKLQljYXNlIFNMSklUX0RBREQ6CisJY2FzZSBTTEpJVF9BRERfRjY0OgogCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgQUREX1MgfCBGTVQob3ApIHwgRlQoc3JjMikgfCBGUyhzcmMxKSB8IEZEKGRzdF9yKSwgTU9WQUJMRV9JTlMpKTsKIAkJYnJlYWs7CiAKLQljYXNlIFNMSklUX0RTVUI6CisJY2FzZSBTTEpJVF9TVUJfRjY0OgogCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgU1VCX1MgfCBGTVQob3ApIHwgRlQoc3JjMikgfCBGUyhzcmMxKSB8IEZEKGRzdF9yKSwgTU9WQUJMRV9JTlMpKTsKIAkJYnJlYWs7CiAKLQljYXNlIFNMSklUX0RNVUw6CisJY2FzZSBTTEpJVF9NVUxfRjY0OgogCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgTVVMX1MgfCBGTVQob3ApIHwgRlQoc3JjMikgfCBGUyhzcmMxKSB8IEZEKGRzdF9yKSwgTU9WQUJMRV9JTlMpKTsKIAkJYnJlYWs7CiAKLQljYXNlIFNMSklUX0RESVY6CisJY2FzZSBTTEpJVF9ESVZfRjY0OgogCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgRElWX1MgfCBGTVQob3ApIHwgRlQoc3JjMikgfCBGUyhzcmMxKSB8IEZEKGRzdF9yKSwgTU9WQUJMRV9JTlMpKTsKIAkJYnJlYWs7CiAJfQpAQCAtMTUzNiw3ICsxNTM2LDcgQEAKIC8qICBPdGhlciBpbnN0cnVjdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X2Zhc3RfZW50ZXIoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3KQorU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3MzMiBzbGppdF9lbWl0X2Zhc3RfZW50ZXIoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIGRzdCwgc2xqaXRfc3cgZHN0dykKIHsKIAlDSEVDS19FUlJPUigpOwogCUNIRUNLKGNoZWNrX3Nsaml0X2VtaXRfZmFzdF9lbnRlcihjb21waWxlciwgZHN0LCBkc3R3KSk7CkBAIC0xNTUzLDcgKzE1NTMsNyBAQAogCXJldHVybiBlbWl0X29wX21lbShjb21waWxlciwgV09SRF9EQVRBLCBSRVRVUk5fQUREUl9SRUcsIGRzdCwgZHN0dyk7CiB9CiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X2Zhc3RfcmV0dXJuKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIHNyYywgc2xqaXRfc3cgc3JjdykKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zMzIgc2xqaXRfZW1pdF9mYXN0X3JldHVybihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgc3JjLCBzbGppdF9zdyBzcmN3KQogewogCUNIRUNLX0VSUk9SKCk7CiAJQ0hFQ0soY2hlY2tfc2xqaXRfZW1pdF9mYXN0X3JldHVybihjb21waWxlciwgc3JjLCBzcmN3KSk7CkBAIC0xNjE3LDEyICsxNjE3LDEyIEBACiAJZmxhZ3MgPSBJU19CSVQxNl9DT05EOyBcCiAJZGVsYXlfY2hlY2sgPSBGQ1NSX0ZDQzsKIAotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHN0cnVjdCBzbGppdF9qdW1wKiBzbGppdF9lbWl0X2p1bXAoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgdHlwZSkKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzdHJ1Y3Qgc2xqaXRfanVtcCogc2xqaXRfZW1pdF9qdW1wKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiB0eXBlKQogewogCXN0cnVjdCBzbGppdF9qdW1wICpqdW1wOwogCXNsaml0X2lucyBpbnN0OwotCXNsaml0X3NpIGZsYWdzID0gMDsKLQlzbGppdF9zaSBkZWxheV9jaGVjayA9IFVOTU9WQUJMRV9JTlM7CisJc2xqaXRfczMyIGZsYWdzID0gMDsKKwlzbGppdF9zMzIgZGVsYXlfY2hlY2sgPSBVTk1PVkFCTEVfSU5TOwogCiAJQ0hFQ0tfRVJST1JfUFRSKCk7CiAJQ0hFQ0tfUFRSKGNoZWNrX3Nsaml0X2VtaXRfanVtcChjb21waWxlciwgdHlwZSkpOwpAQCAtMTYzNCwyNyArMTYzNCwyNyBAQAogCiAJc3dpdGNoICh0eXBlKSB7CiAJY2FzZSBTTEpJVF9FUVVBTDoKLQljYXNlIFNMSklUX0RfTk9UX0VRVUFMOgorCWNhc2UgU0xKSVRfTk9UX0VRVUFMX0Y2NDoKIAkJQlJfTlooRVFVQUxfRkxBRyk7CiAJCWJyZWFrOwogCWNhc2UgU0xKSVRfTk9UX0VRVUFMOgotCWNhc2UgU0xKSVRfRF9FUVVBTDoKKwljYXNlIFNMSklUX0VRVUFMX0Y2NDoKIAkJQlJfWihFUVVBTF9GTEFHKTsKIAkJYnJlYWs7CiAJY2FzZSBTTEpJVF9MRVNTOgotCWNhc2UgU0xKSVRfRF9MRVNTOgorCWNhc2UgU0xKSVRfTEVTU19GNjQ6CiAJCUJSX1ooVUxFU1NfRkxBRyk7CiAJCWJyZWFrOwogCWNhc2UgU0xKSVRfR1JFQVRFUl9FUVVBTDoKLQljYXNlIFNMSklUX0RfR1JFQVRFUl9FUVVBTDoKKwljYXNlIFNMSklUX0dSRUFURVJfRVFVQUxfRjY0OgogCQlCUl9OWihVTEVTU19GTEFHKTsKIAkJYnJlYWs7CiAJY2FzZSBTTEpJVF9HUkVBVEVSOgotCWNhc2UgU0xKSVRfRF9HUkVBVEVSOgorCWNhc2UgU0xKSVRfR1JFQVRFUl9GNjQ6CiAJCUJSX1ooVUdSRUFURVJfRkxBRyk7CiAJCWJyZWFrOwogCWNhc2UgU0xKSVRfTEVTU19FUVVBTDoKLQljYXNlIFNMSklUX0RfTEVTU19FUVVBTDoKKwljYXNlIFNMSklUX0xFU1NfRVFVQUxfRjY0OgogCQlCUl9OWihVR1JFQVRFUl9GTEFHKTsKIAkJYnJlYWs7CiAJY2FzZSBTTEpJVF9TSUdfTEVTUzoKQEAgLTE2NzcsMTAgKzE2NzcsMTAgQEAKIAljYXNlIFNMSklUX01VTF9OT1RfT1ZFUkZMT1c6CiAJCUJSX05aKE9WRVJGTE9XX0ZMQUcpOwogCQlicmVhazsKLQljYXNlIFNMSklUX0RfVU5PUkRFUkVEOgorCWNhc2UgU0xKSVRfVU5PUkRFUkVEX0Y2NDoKIAkJQlJfRigpOwogCQlicmVhazsKLQljYXNlIFNMSklUX0RfT1JERVJFRDoKKwljYXNlIFNMSklUX09SREVSRURfRjY0OgogCQlCUl9UKCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0xNzMzLDEyICsxNzMzLDEyIEBACiAJCQlzcmMyID0gMDsgXAogCX0KIAotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHN0cnVjdCBzbGppdF9qdW1wKiBzbGppdF9lbWl0X2NtcChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSB0eXBlLAotCXNsaml0X3NpIHNyYzEsIHNsaml0X3N3IHNyYzF3LAotCXNsaml0X3NpIHNyYzIsIHNsaml0X3N3IHNyYzJ3KQorU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHN0cnVjdCBzbGppdF9qdW1wKiBzbGppdF9lbWl0X2NtcChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgdHlwZSwKKwlzbGppdF9zMzIgc3JjMSwgc2xqaXRfc3cgc3JjMXcsCisJc2xqaXRfczMyIHNyYzIsIHNsaml0X3N3IHNyYzJ3KQogewogCXN0cnVjdCBzbGppdF9qdW1wICpqdW1wOwotCXNsaml0X3NpIGZsYWdzOworCXNsaml0X3MzMiBmbGFnczsKIAlzbGppdF9pbnMgaW5zdDsKIAogCUNIRUNLX0VSUk9SX1BUUigpOwpAQCAtMTc0OCw3ICsxNzQ4LDcgQEAKIAogCWNvbXBpbGVyLT5jYWNoZV9hcmcgPSAwOwogCWNvbXBpbGVyLT5jYWNoZV9hcmd3ID0gMDsKLQlmbGFncyA9ICgodHlwZSAmIFNMSklUX0lOVF9PUCkgPyBJTlRfREFUQSA6IFdPUkRfREFUQSkgfCBMT0FEX0RBVEE7CisJZmxhZ3MgPSAoKHR5cGUgJiBTTEpJVF9JMzJfT1ApID8gSU5UX0RBVEEgOiBXT1JEX0RBVEEpIHwgTE9BRF9EQVRBOwogCWlmIChzcmMxICYgU0xKSVRfTUVNKSB7CiAJCVBUUl9GQUlMX0lGKGVtaXRfb3BfbWVtMihjb21waWxlciwgZmxhZ3MsIERSKFRNUF9SRUcxKSwgc3JjMSwgc3JjMXcsIHNyYzIsIHNyYzJ3KSk7CiAJCXNyYzEgPSBUTVBfUkVHMTsKQEAgLTE4NTQsMTMgKzE4NTQsMTMgQEAKICN1bmRlZiBSRVNPTFZFX0lNTTEKICN1bmRlZiBSRVNPTFZFX0lNTTIKIAotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHN0cnVjdCBzbGppdF9qdW1wKiBzbGppdF9lbWl0X2ZjbXAoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgdHlwZSwKLQlzbGppdF9zaSBzcmMxLCBzbGppdF9zdyBzcmMxdywKLQlzbGppdF9zaSBzcmMyLCBzbGppdF9zdyBzcmMydykKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzdHJ1Y3Qgc2xqaXRfanVtcCogc2xqaXRfZW1pdF9mY21wKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiB0eXBlLAorCXNsaml0X3MzMiBzcmMxLCBzbGppdF9zdyBzcmMxdywKKwlzbGppdF9zMzIgc3JjMiwgc2xqaXRfc3cgc3JjMncpCiB7CiAJc3RydWN0IHNsaml0X2p1bXAgKmp1bXA7CiAJc2xqaXRfaW5zIGluc3Q7Ci0Jc2xqaXRfc2kgaWZfdHJ1ZTsKKwlzbGppdF9zMzIgaWZfdHJ1ZTsKIAogCUNIRUNLX0VSUk9SX1BUUigpOwogCUNIRUNLX1BUUihjaGVja19zbGppdF9lbWl0X2ZjbXAoY29tcGlsZXIsIHR5cGUsIHNyYzEsIHNyYzF3LCBzcmMyLCBzcmMydykpOwpAQCAtMTg4OCwzNyArMTg4OCwzNyBAQAogCWp1bXAtPmZsYWdzIHw9IElTX0JJVDE2X0NPTkQ7CiAKIAlzd2l0Y2ggKHR5cGUgJiAweGZmKSB7Ci0JY2FzZSBTTEpJVF9EX0VRVUFMOgorCWNhc2UgU0xKSVRfRVFVQUxfRjY0OgogCQlpbnN0ID0gQ19VRVFfUzsKIAkJaWZfdHJ1ZSA9IDE7CiAJCWJyZWFrOwotCWNhc2UgU0xKSVRfRF9OT1RfRVFVQUw6CisJY2FzZSBTTEpJVF9OT1RfRVFVQUxfRjY0OgogCQlpbnN0ID0gQ19VRVFfUzsKIAkJaWZfdHJ1ZSA9IDA7CiAJCWJyZWFrOwotCWNhc2UgU0xKSVRfRF9MRVNTOgorCWNhc2UgU0xKSVRfTEVTU19GNjQ6CiAJCWluc3QgPSBDX1VMVF9TOwogCQlpZl90cnVlID0gMTsKIAkJYnJlYWs7Ci0JY2FzZSBTTEpJVF9EX0dSRUFURVJfRVFVQUw6CisJY2FzZSBTTEpJVF9HUkVBVEVSX0VRVUFMX0Y2NDoKIAkJaW5zdCA9IENfVUxUX1M7CiAJCWlmX3RydWUgPSAwOwogCQlicmVhazsKLQljYXNlIFNMSklUX0RfR1JFQVRFUjoKKwljYXNlIFNMSklUX0dSRUFURVJfRjY0OgogCQlpbnN0ID0gQ19VTEVfUzsKIAkJaWZfdHJ1ZSA9IDA7CiAJCWJyZWFrOwotCWNhc2UgU0xKSVRfRF9MRVNTX0VRVUFMOgorCWNhc2UgU0xKSVRfTEVTU19FUVVBTF9GNjQ6CiAJCWluc3QgPSBDX1VMRV9TOwogCQlpZl90cnVlID0gMTsKIAkJYnJlYWs7Ci0JY2FzZSBTTEpJVF9EX1VOT1JERVJFRDoKKwljYXNlIFNMSklUX1VOT1JERVJFRF9GNjQ6CiAJCWluc3QgPSBDX1VOX1M7CiAJCWlmX3RydWUgPSAxOwogCQlicmVhazsKIAlkZWZhdWx0OiAvKiBNYWtlIGNvbXBpbGVycyBoYXBweS4gKi8KIAkJU0xKSVRfQVNTRVJUX1NUT1AoKTsKLQljYXNlIFNMSklUX0RfT1JERVJFRDoKKwljYXNlIFNMSklUX09SREVSRURfRjY0OgogCQlpbnN0ID0gQ19VTl9TOwogCQlpZl90cnVlID0gMDsKIAkJYnJlYWs7CkBAIC0xOTQzLDkgKzE5NDMsOSBAQAogI3VuZGVmIEZMT0FUX0RBVEEKICN1bmRlZiBGTVQKIAotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfaWp1bXAoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgdHlwZSwgc2xqaXRfc2kgc3JjLCBzbGppdF9zdyBzcmN3KQorU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3MzMiBzbGppdF9lbWl0X2lqdW1wKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiB0eXBlLCBzbGppdF9zMzIgc3JjLCBzbGppdF9zdyBzcmN3KQogewotCXNsaml0X3NpIHNyY19yID0gVE1QX1JFRzI7CisJc2xqaXRfczMyIHNyY19yID0gVE1QX1JFRzI7CiAJc3RydWN0IHNsaml0X2p1bXAgKmp1bXAgPSBOVUxMOwogCiAJQ0hFQ0tfRVJST1IoKTsKQEAgLTIwMDEsMTcgKzIwMDEsMTcgQEAKIAlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKIH0KIAotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfb3BfZmxhZ3Moc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsCi0Jc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3LAotCXNsaml0X3NpIHNyYywgc2xqaXRfc3cgc3JjdywKLQlzbGppdF9zaSB0eXBlKQorU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3MzMiBzbGppdF9lbWl0X29wX2ZsYWdzKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiBvcCwKKwlzbGppdF9zMzIgZHN0LCBzbGppdF9zdyBkc3R3LAorCXNsaml0X3MzMiBzcmMsIHNsaml0X3N3IHNyY3csCisJc2xqaXRfczMyIHR5cGUpCiB7Ci0Jc2xqaXRfc2kgc3VnZ19kc3RfYXIsIGRzdF9hcjsKLQlzbGppdF9zaSBmbGFncyA9IEdFVF9BTExfRkxBR1Mob3ApOworCXNsaml0X3MzMiBzdWdnX2RzdF9hciwgZHN0X2FyOworCXNsaml0X3MzMiBmbGFncyA9IEdFVF9BTExfRkxBR1Mob3ApOwogI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19NSVBTXzMyICYmIFNMSklUX0NPTkZJR19NSVBTXzMyKQogIwlkZWZpbmUgbWVtX3R5cGUgV09SRF9EQVRBCiAjZWxzZQotCXNsaml0X3NpIG1lbV90eXBlID0gKG9wICYgU0xKSVRfSU5UX09QKSA/IChJTlRfREFUQSB8IFNJR05FRF9EQVRBKSA6IFdPUkRfREFUQTsKKwlzbGppdF9zMzIgbWVtX3R5cGUgPSAob3AgJiBTTEpJVF9JMzJfT1ApID8gKElOVF9EQVRBIHwgU0lHTkVEX0RBVEEpIDogV09SRF9EQVRBOwogI2VuZGlmCiAKIAlDSEVDS19FUlJPUigpOwpAQCAtMjAyMyw3ICsyMDIzLDcgQEAKIAogCW9wID0gR0VUX09QQ09ERShvcCk7CiAjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX01JUFNfNjQgJiYgU0xKSVRfQ09ORklHX01JUFNfNjQpCi0JaWYgKG9wID09IFNMSklUX01PVl9TSSB8fCBvcCA9PSBTTEpJVF9NT1ZfVUkpCisJaWYgKG9wID09IFNMSklUX01PVl9TMzIgfHwgb3AgPT0gU0xKSVRfTU9WX1UzMikKIAkJbWVtX3R5cGUgPSBJTlRfREFUQSB8IFNJR05FRF9EQVRBOwogI2VuZGlmCiAJc3VnZ19kc3RfYXIgPSBEUigob3AgPCBTTEpJVF9BREQgJiYgRkFTVF9JU19SRUcoZHN0KSkgPyBkc3QgOiBUTVBfUkVHMik7CkBAIC0yMDQ1LDE0ICsyMDQ1LDE0IEBACiAJCWJyZWFrOwogCWNhc2UgU0xKSVRfTEVTUzoKIAljYXNlIFNMSklUX0dSRUFURVJfRVFVQUw6Ci0JY2FzZSBTTEpJVF9EX0xFU1M6Ci0JY2FzZSBTTEpJVF9EX0dSRUFURVJfRVFVQUw6CisJY2FzZSBTTEpJVF9MRVNTX0Y2NDoKKwljYXNlIFNMSklUX0dSRUFURVJfRVFVQUxfRjY0OgogCQlkc3RfYXIgPSBVTEVTU19GTEFHOwogCQlicmVhazsKIAljYXNlIFNMSklUX0dSRUFURVI6CiAJY2FzZSBTTEpJVF9MRVNTX0VRVUFMOgotCWNhc2UgU0xKSVRfRF9HUkVBVEVSOgotCWNhc2UgU0xKSVRfRF9MRVNTX0VRVUFMOgorCWNhc2UgU0xKSVRfR1JFQVRFUl9GNjQ6CisJY2FzZSBTTEpJVF9MRVNTX0VRVUFMX0Y2NDoKIAkJZHN0X2FyID0gVUdSRUFURVJfRkxBRzsKIAkJYnJlYWs7CiAJY2FzZSBTTEpJVF9TSUdfTEVTUzoKQEAgLTIwNzMsMTMgKzIwNzMsMTMgQEAKIAkJZHN0X2FyID0gc3VnZ19kc3RfYXI7CiAJCXR5cGUgXj0gMHgxOyAvKiBGbGlwIHR5cGUgYml0IGZvciB0aGUgWE9SSSBiZWxvdy4gKi8KIAkJYnJlYWs7Ci0JY2FzZSBTTEpJVF9EX0VRVUFMOgotCWNhc2UgU0xKSVRfRF9OT1RfRVFVQUw6CisJY2FzZSBTTEpJVF9FUVVBTF9GNjQ6CisJY2FzZSBTTEpJVF9OT1RfRVFVQUxfRjY0OgogCQlkc3RfYXIgPSBFUVVBTF9GTEFHOwogCQlicmVhazsKIAotCWNhc2UgU0xKSVRfRF9VTk9SREVSRUQ6Ci0JY2FzZSBTTEpJVF9EX09SREVSRUQ6CisJY2FzZSBTTEpJVF9VTk9SREVSRURfRjY0OgorCWNhc2UgU0xKSVRfT1JERVJFRF9GNjQ6CiAJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBDRkMxIHwgVEEoc3VnZ19kc3RfYXIpIHwgREEoRkNTUl9SRUcpLCBzdWdnX2RzdF9hcikpOwogCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgU1JMIHwgVEEoc3VnZ19kc3RfYXIpIHwgREEoc3VnZ19kc3RfYXIpIHwgU0hfSU1NKDIzKSwgc3VnZ19kc3RfYXIpKTsKIAkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIEFOREkgfCBTQShzdWdnX2RzdF9hcikgfCBUQShzdWdnX2RzdF9hcikgfCBJTU0oMSksIHN1Z2dfZHN0X2FyKSk7CkBAIC0yMTE1LDEwICsyMTE1LDEwIEBACiAjZW5kaWYKIH0KIAotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHN0cnVjdCBzbGppdF9jb25zdCogc2xqaXRfZW1pdF9jb25zdChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsIHNsaml0X3N3IGluaXRfdmFsdWUpCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc3RydWN0IHNsaml0X2NvbnN0KiBzbGppdF9lbWl0X2NvbnN0KHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiBkc3QsIHNsaml0X3N3IGRzdHcsIHNsaml0X3N3IGluaXRfdmFsdWUpCiB7CiAJc3RydWN0IHNsaml0X2NvbnN0ICpjb25zdF87Ci0Jc2xqaXRfc2kgcmVnOworCXNsaml0X3MzMiByZWc7CiAKIAlDSEVDS19FUlJPUl9QVFIoKTsKIAlDSEVDS19QVFIoY2hlY2tfc2xqaXRfZW1pdF9jb25zdChjb21waWxlciwgZHN0LCBkc3R3LCBpbml0X3ZhbHVlKSk7CmRpZmYgLS1naXQgYS9kaXN0Mi9zcmMvc2xqaXQvc2xqaXROYXRpdmVQUENfMzIuYyBiL2Rpc3QyL3NyYy9zbGppdC9zbGppdE5hdGl2ZVBQQ18zMi5jCmluZGV4IGIxNGI3NWMuLjBmMjNjZjggMTAwNjQ0Ci0tLSBhL2Rpc3QyL3NyYy9zbGppdC9zbGppdE5hdGl2ZVBQQ18zMi5jCisrKyBiL2Rpc3QyL3NyYy9zbGppdC9zbGppdE5hdGl2ZVBQQ18zMi5jCkBAIC0yNiw3ICsyNiw3IEBACiAKIC8qIHBwYyAzMi1iaXQgYXJjaCBkZXBlbmRlbnQgZnVuY3Rpb25zLiAqLwogCi1zdGF0aWMgc2xqaXRfc2kgbG9hZF9pbW1lZGlhdGUoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgcmVnLCBzbGppdF9zdyBpbW0pCitzdGF0aWMgc2xqaXRfczMyIGxvYWRfaW1tZWRpYXRlKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiByZWcsIHNsaml0X3N3IGltbSkKIHsKIAlpZiAoaW1tIDw9IFNJTU1fTUFYICYmIGltbSA+PSBTSU1NX01JTikKIAkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgQURESSB8IEQocmVnKSB8IEEoMCkgfCBJTU0oaW1tKSk7CkBAIC00MSwzOSArNDEsMzkgQEAKICNkZWZpbmUgSU5TX0NMRUFSX0xFRlQoZHN0LCBzcmMsIGZyb20pIFwKIAkoUkxXSU5NIHwgUyhzcmMpIHwgQShkc3QpIHwgKChmcm9tKSA8PCA2KSB8ICgzMSA8PCAxKSkKIAotc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9zaSBlbWl0X3NpbmdsZV9vcChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwgc2xqaXRfc2kgZmxhZ3MsCi0Jc2xqaXRfc2kgZHN0LCBzbGppdF9zaSBzcmMxLCBzbGppdF9zaSBzcmMyKQorc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9zMzIgZW1pdF9zaW5nbGVfb3Aoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIG9wLCBzbGppdF9zMzIgZmxhZ3MsCisJc2xqaXRfczMyIGRzdCwgc2xqaXRfczMyIHNyYzEsIHNsaml0X3MzMiBzcmMyKQogewogCXN3aXRjaCAob3ApIHsKIAljYXNlIFNMSklUX01PVjoKLQljYXNlIFNMSklUX01PVl9VSToKLQljYXNlIFNMSklUX01PVl9TSToKKwljYXNlIFNMSklUX01PVl9VMzI6CisJY2FzZSBTTEpJVF9NT1ZfUzMyOgogCWNhc2UgU0xKSVRfTU9WX1A6CiAJCVNMSklUX0FTU0VSVChzcmMxID09IFRNUF9SRUcxKTsKIAkJaWYgKGRzdCAhPSBzcmMyKQogCQkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgT1IgfCBTKHNyYzIpIHwgQShkc3QpIHwgQihzcmMyKSk7CiAJCXJldHVybiBTTEpJVF9TVUNDRVNTOwogCi0JY2FzZSBTTEpJVF9NT1ZfVUI6Ci0JY2FzZSBTTEpJVF9NT1ZfU0I6CisJY2FzZSBTTEpJVF9NT1ZfVTg6CisJY2FzZSBTTEpJVF9NT1ZfUzg6CiAJCVNMSklUX0FTU0VSVChzcmMxID09IFRNUF9SRUcxKTsKIAkJaWYgKChmbGFncyAmIChSRUdfREVTVCB8IFJFRzJfU09VUkNFKSkgPT0gKFJFR19ERVNUIHwgUkVHMl9TT1VSQ0UpKSB7Ci0JCQlpZiAob3AgPT0gU0xKSVRfTU9WX1NCKQorCQkJaWYgKG9wID09IFNMSklUX01PVl9TOCkKIAkJCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBFWFRTQiB8IFMoc3JjMikgfCBBKGRzdCkpOwogCQkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgSU5TX0NMRUFSX0xFRlQoZHN0LCBzcmMyLCAyNCkpOwogCQl9Ci0JCWVsc2UgaWYgKChmbGFncyAmIFJFR19ERVNUKSAmJiBvcCA9PSBTTEpJVF9NT1ZfU0IpCisJCWVsc2UgaWYgKChmbGFncyAmIFJFR19ERVNUKSAmJiBvcCA9PSBTTEpJVF9NT1ZfUzgpCiAJCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBFWFRTQiB8IFMoc3JjMikgfCBBKGRzdCkpOwogCQllbHNlIHsKIAkJCVNMSklUX0FTU0VSVChkc3QgPT0gc3JjMik7CiAJCX0KIAkJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CiAKLQljYXNlIFNMSklUX01PVl9VSDoKLQljYXNlIFNMSklUX01PVl9TSDoKKwljYXNlIFNMSklUX01PVl9VMTY6CisJY2FzZSBTTEpJVF9NT1ZfUzE2OgogCQlTTEpJVF9BU1NFUlQoc3JjMSA9PSBUTVBfUkVHMSk7CiAJCWlmICgoZmxhZ3MgJiAoUkVHX0RFU1QgfCBSRUcyX1NPVVJDRSkpID09IChSRUdfREVTVCB8IFJFRzJfU09VUkNFKSkgewotCQkJaWYgKG9wID09IFNMSklUX01PVl9TSCkKKwkJCWlmIChvcCA9PSBTTEpJVF9NT1ZfUzE2KQogCQkJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIEVYVFNIIHwgUyhzcmMyKSB8IEEoZHN0KSk7CiAJCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBJTlNfQ0xFQVJfTEVGVChkc3QsIHNyYzIsIDE2KSk7CiAJCX0KQEAgLTI0NCw3ICsyNDQsNyBAQAogCXJldHVybiBTTEpJVF9TVUNDRVNTOwogfQogCi1zdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X3NpIGVtaXRfY29uc3Qoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgcmVnLCBzbGppdF9zdyBpbml0X3ZhbHVlKQorc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9zMzIgZW1pdF9jb25zdChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgcmVnLCBzbGppdF9zdyBpbml0X3ZhbHVlKQogewogCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBBRERJUyB8IEQocmVnKSB8IEEoMCkgfCBJTU0oaW5pdF92YWx1ZSA+PiAxNikpKTsKIAlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBPUkkgfCBTKHJlZykgfCBBKHJlZykgfCBJTU0oaW5pdF92YWx1ZSkpOwpkaWZmIC0tZ2l0IGEvZGlzdDIvc3JjL3Nsaml0L3Nsaml0TmF0aXZlUFBDXzY0LmMgYi9kaXN0Mi9zcmMvc2xqaXQvc2xqaXROYXRpdmVQUENfNjQuYwppbmRleCAxODJhYzdiLi44ZTMyMjNmIDEwMDY0NAotLS0gYS9kaXN0Mi9zcmMvc2xqaXQvc2xqaXROYXRpdmVQUENfNjQuYworKysgYi9kaXN0Mi9zcmMvc2xqaXQvc2xqaXROYXRpdmVQUENfNjQuYwpAQCAtNDEsNyArNDEsNyBAQAogI2RlZmluZSBQVVNIX1JMRElDUihyZWcsIHNoaWZ0KSBcCiAJcHVzaF9pbnN0KGNvbXBpbGVyLCBSTERJKHJlZywgcmVnLCA2MyAtIHNoaWZ0LCBzaGlmdCwgMSkpCiAKLXN0YXRpYyBzbGppdF9zaSBsb2FkX2ltbWVkaWF0ZShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSByZWcsIHNsaml0X3N3IGltbSkKK3N0YXRpYyBzbGppdF9zMzIgbG9hZF9pbW1lZGlhdGUoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIHJlZywgc2xqaXRfc3cgaW1tKQogewogCXNsaml0X3V3IHRtcDsKIAlzbGppdF91dyBzaGlmdDsKQEAgLTE0NSw4ICsxNDUsOCBAQAogCQlzcmMxID0gVE1QX1JFRzE7IFwKIAl9CiAKLXN0YXRpYyBTTEpJVF9JTkxJTkUgc2xqaXRfc2kgZW1pdF9zaW5nbGVfb3Aoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsIHNsaml0X3NpIGZsYWdzLAotCXNsaml0X3NpIGRzdCwgc2xqaXRfc2kgc3JjMSwgc2xqaXRfc2kgc3JjMikKK3N0YXRpYyBTTEpJVF9JTkxJTkUgc2xqaXRfczMyIGVtaXRfc2luZ2xlX29wKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiBvcCwgc2xqaXRfczMyIGZsYWdzLAorCXNsaml0X3MzMiBkc3QsIHNsaml0X3MzMiBzcmMxLCBzbGppdF9zMzIgc3JjMikKIHsKIAlzd2l0Y2ggKG9wKSB7CiAJY2FzZSBTTEpJVF9NT1Y6CkBAIC0xNTYsMTEgKzE1NiwxMSBAQAogCQkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgT1IgfCBTKHNyYzIpIHwgQShkc3QpIHwgQihzcmMyKSk7CiAJCXJldHVybiBTTEpJVF9TVUNDRVNTOwogCi0JY2FzZSBTTEpJVF9NT1ZfVUk6Ci0JY2FzZSBTTEpJVF9NT1ZfU0k6CisJY2FzZSBTTEpJVF9NT1ZfVTMyOgorCWNhc2UgU0xKSVRfTU9WX1MzMjoKIAkJU0xKSVRfQVNTRVJUKHNyYzEgPT0gVE1QX1JFRzEpOwogCQlpZiAoKGZsYWdzICYgKFJFR19ERVNUIHwgUkVHMl9TT1VSQ0UpKSA9PSAoUkVHX0RFU1QgfCBSRUcyX1NPVVJDRSkpIHsKLQkJCWlmIChvcCA9PSBTTEpJVF9NT1ZfU0kpCisJCQlpZiAob3AgPT0gU0xKSVRfTU9WX1MzMikKIAkJCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBFWFRTVyB8IFMoc3JjMikgfCBBKGRzdCkpOwogCQkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgSU5TX0NMRUFSX0xFRlQoZHN0LCBzcmMyLCAwKSk7CiAJCX0KQEAgLTE2OSwyNiArMTY5LDI2IEBACiAJCX0KIAkJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CiAKLQljYXNlIFNMSklUX01PVl9VQjoKLQljYXNlIFNMSklUX01PVl9TQjoKKwljYXNlIFNMSklUX01PVl9VODoKKwljYXNlIFNMSklUX01PVl9TODoKIAkJU0xKSVRfQVNTRVJUKHNyYzEgPT0gVE1QX1JFRzEpOwogCQlpZiAoKGZsYWdzICYgKFJFR19ERVNUIHwgUkVHMl9TT1VSQ0UpKSA9PSAoUkVHX0RFU1QgfCBSRUcyX1NPVVJDRSkpIHsKLQkJCWlmIChvcCA9PSBTTEpJVF9NT1ZfU0IpCisJCQlpZiAob3AgPT0gU0xKSVRfTU9WX1M4KQogCQkJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIEVYVFNCIHwgUyhzcmMyKSB8IEEoZHN0KSk7CiAJCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBJTlNfQ0xFQVJfTEVGVChkc3QsIHNyYzIsIDI0KSk7CiAJCX0KLQkJZWxzZSBpZiAoKGZsYWdzICYgUkVHX0RFU1QpICYmIG9wID09IFNMSklUX01PVl9TQikKKwkJZWxzZSBpZiAoKGZsYWdzICYgUkVHX0RFU1QpICYmIG9wID09IFNMSklUX01PVl9TOCkKIAkJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIEVYVFNCIHwgUyhzcmMyKSB8IEEoZHN0KSk7CiAJCWVsc2UgewogCQkJU0xKSVRfQVNTRVJUKGRzdCA9PSBzcmMyKTsKIAkJfQogCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKIAotCWNhc2UgU0xKSVRfTU9WX1VIOgotCWNhc2UgU0xKSVRfTU9WX1NIOgorCWNhc2UgU0xKSVRfTU9WX1UxNjoKKwljYXNlIFNMSklUX01PVl9TMTY6CiAJCVNMSklUX0FTU0VSVChzcmMxID09IFRNUF9SRUcxKTsKIAkJaWYgKChmbGFncyAmIChSRUdfREVTVCB8IFJFRzJfU09VUkNFKSkgPT0gKFJFR19ERVNUIHwgUkVHMl9TT1VSQ0UpKSB7Ci0JCQlpZiAob3AgPT0gU0xKSVRfTU9WX1NIKQorCQkJaWYgKG9wID09IFNMSklUX01PVl9TMTYpCiAJCQkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgRVhUU0ggfCBTKHNyYzIpIHwgQShkc3QpKTsKIAkJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIElOU19DTEVBUl9MRUZUKGRzdCwgc3JjMiwgMTYpKTsKIAkJfQpAQCAtMzg5LDcgKzM4OSw3IEBACiAJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBTTEpJVF9JTkxJTkUgc2xqaXRfc2kgZW1pdF9jb25zdChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSByZWcsIHNsaml0X3N3IGluaXRfdmFsdWUpCitzdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X3MzMiBlbWl0X2NvbnN0KHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiByZWcsIHNsaml0X3N3IGluaXRfdmFsdWUpCiB7CiAJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIEFERElTIHwgRChyZWcpIHwgQSgwKSB8IElNTShpbml0X3ZhbHVlID4+IDQ4KSkpOwogCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBPUkkgfCBTKHJlZykgfCBBKHJlZykgfCBJTU0oaW5pdF92YWx1ZSA+PiAzMikpKTsKZGlmZiAtLWdpdCBhL2Rpc3QyL3NyYy9zbGppdC9zbGppdE5hdGl2ZVBQQ19jb21tb24uYyBiL2Rpc3QyL3NyYy9zbGppdC9zbGppdE5hdGl2ZVBQQ19jb21tb24uYwppbmRleCBiNmEwNDNmLi5hMzY0NzMyIDEwMDY0NAotLS0gYS9kaXN0Mi9zcmMvc2xqaXQvc2xqaXROYXRpdmVQUENfY29tbW9uLmMKKysrIGIvZGlzdDIvc3JjL3Nsaml0L3Nsaml0TmF0aXZlUFBDX2NvbW1vbi5jCkBAIC0yNCwxNCArMjQsMTQgQEAKICAqIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi1TTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgU0xKSVRfQ09OU1QgY2hhciogc2xqaXRfZ2V0X3BsYXRmb3JtX25hbWUodm9pZCkKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBjb25zdCBjaGFyKiBzbGppdF9nZXRfcGxhdGZvcm1fbmFtZSh2b2lkKQogewogCXJldHVybiAiUG93ZXJQQyIgU0xKSVRfQ1BVSU5GTzsKIH0KIAogLyogTGVuZ3RoIG9mIGFuIGluc3RydWN0aW9uIHdvcmQuCiAgICBCb3RoIGZvciBwcGMtMzIgYW5kIHBwYy02NC4gKi8KLXR5cGVkZWYgc2xqaXRfdWkgc2xqaXRfaW5zOwordHlwZWRlZiBzbGppdF91MzIgc2xqaXRfaW5zOwogCiAjaWYgKChkZWZpbmVkIFNMSklUX0NPTkZJR19QUENfMzIgJiYgU0xKSVRfQ09ORklHX1BQQ18zMikgJiYgKGRlZmluZWQgX0FJWCkpIFwKIAl8fCAoZGVmaW5lZCBTTEpJVF9DT05GSUdfUFBDXzY0ICYmIFNMSklUX0NPTkZJR19QUENfNjQpCkBAIC00Niw2ICs0Niw4IEBACiAjZGVmaW5lIFNMSklUX1BBU1NfRU5UUllfQUREUl9UT19DQUxMIDEKICNlbmRpZgogCisjaWYgKGRlZmluZWQgU0xKSVRfQ0FDSEVfRkxVU0hfT1dOX0lNUEwgJiYgU0xKSVRfQ0FDSEVfRkxVU0hfT1dOX0lNUEwpCisKIHN0YXRpYyB2b2lkIHBwY19jYWNoZV9mbHVzaChzbGppdF9pbnMgKmZyb20sIHNsaml0X2lucyAqdG8pCiB7CiAjaWZkZWYgX0FJWApAQCAtODcsNiArODksOCBAQAogI2VuZGlmIC8qIF9BSVggKi8KIH0KIAorI2VuZGlmIC8qIChkZWZpbmVkIFNMSklUX0NBQ0hFX0ZMVVNIX09XTl9JTVBMICYmIFNMSklUX0NBQ0hFX0ZMVVNIX09XTl9JTVBMKSAqLworCiAjZGVmaW5lIFRNUF9SRUcxCShTTEpJVF9OVU1CRVJfT0ZfUkVHSVNURVJTICsgMikKICNkZWZpbmUgVE1QX1JFRzIJKFNMSklUX05VTUJFUl9PRl9SRUdJU1RFUlMgKyAzKQogI2RlZmluZSBUTVBfUkVHMwkoU0xKSVRfTlVNQkVSX09GX1JFR0lTVEVSUyArIDQpCkBAIC0xMDEsNyArMTA1LDcgQEAKICNkZWZpbmUgVE1QX0ZSRUcxCSgwKQogI2RlZmluZSBUTVBfRlJFRzIJKFNMSklUX05VTUJFUl9PRl9GTE9BVF9SRUdJU1RFUlMgKyAxKQogCi1zdGF0aWMgU0xKSVRfQ09OU1Qgc2xqaXRfdWIgcmVnX21hcFtTTEpJVF9OVU1CRVJfT0ZfUkVHSVNURVJTICsgN10gPSB7CitzdGF0aWMgY29uc3Qgc2xqaXRfdTggcmVnX21hcFtTTEpJVF9OVU1CRVJfT0ZfUkVHSVNURVJTICsgN10gPSB7CiAJMCwgMywgNCwgNSwgNiwgNywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwgMjAsIDIxLCAyMiwgMjMsIDI0LCAyNSwgMjYsIDI3LCAyOCwgMjksIDMwLCAxLCA4LCA5LCAxMCwgMzEsIDEyCiB9OwogCkBAIC0yMzYsNyArMjQwLDcgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgc2xqaXRfc2kgcHVzaF9pbnN0KHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X2lucyBpbnMpCitzdGF0aWMgc2xqaXRfczMyIHB1c2hfaW5zdChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9pbnMgaW5zKQogewogCXNsaml0X2lucyAqcHRyID0gKHNsaml0X2lucyopZW5zdXJlX2J1Zihjb21waWxlciwgc2l6ZW9mKHNsaml0X2lucykpOwogCUZBSUxfSUYoIXB0cik7CkBAIC0yNDUsNyArMjQ5LDcgQEAKIAlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKIH0KIAotc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9zaSBkZXRlY3RfanVtcF90eXBlKHN0cnVjdCBzbGppdF9qdW1wICpqdW1wLCBzbGppdF9pbnMgKmNvZGVfcHRyLCBzbGppdF9pbnMgKmNvZGUpCitzdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X3MzMiBkZXRlY3RfanVtcF90eXBlKHN0cnVjdCBzbGppdF9qdW1wICpqdW1wLCBzbGppdF9pbnMgKmNvZGVfcHRyLCBzbGppdF9pbnMgKmNvZGUpCiB7CiAJc2xqaXRfc3cgZGlmZjsKIAlzbGppdF91dyB0YXJnZXRfYWRkcjsKQEAgLTU3MSwzMiArNTc1LDMyIEBACiAjZGVmaW5lIFNUQUNLX0xPQUQJTEQKICNlbmRpZgogCi1TTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9lbnRlcihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLAotCXNsaml0X3NpIG9wdGlvbnMsIHNsaml0X3NpIGFyZ3MsIHNsaml0X3NpIHNjcmF0Y2hlcywgc2xqaXRfc2kgc2F2ZWRzLAotCXNsaml0X3NpIGZzY3JhdGNoZXMsIHNsaml0X3NpIGZzYXZlZHMsIHNsaml0X3NpIGxvY2FsX3NpemUpCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfczMyIHNsaml0X2VtaXRfZW50ZXIoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwKKwlzbGppdF9zMzIgb3B0aW9ucywgc2xqaXRfczMyIGFyZ3MsIHNsaml0X3MzMiBzY3JhdGNoZXMsIHNsaml0X3MzMiBzYXZlZHMsCisJc2xqaXRfczMyIGZzY3JhdGNoZXMsIHNsaml0X3MzMiBmc2F2ZWRzLCBzbGppdF9zMzIgbG9jYWxfc2l6ZSkKIHsKLQlzbGppdF9zaSBpLCB0bXAsIG9mZnM7CisJc2xqaXRfczMyIGksIHRtcCwgb2ZmczsKIAogCUNIRUNLX0VSUk9SKCk7CiAJQ0hFQ0soY2hlY2tfc2xqaXRfZW1pdF9lbnRlcihjb21waWxlciwgb3B0aW9ucywgYXJncywgc2NyYXRjaGVzLCBzYXZlZHMsIGZzY3JhdGNoZXMsIGZzYXZlZHMsIGxvY2FsX3NpemUpKTsKIAlzZXRfZW1pdF9lbnRlcihjb21waWxlciwgb3B0aW9ucywgYXJncywgc2NyYXRjaGVzLCBzYXZlZHMsIGZzY3JhdGNoZXMsIGZzYXZlZHMsIGxvY2FsX3NpemUpOwogCiAJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIE1GTFIgfCBEKDApKSk7Ci0Jb2ZmcyA9IC0oc2xqaXRfc2kpKHNpemVvZihzbGppdF9zdykpOworCW9mZnMgPSAtKHNsaml0X3MzMikoc2l6ZW9mKHNsaml0X3N3KSk7CiAJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIFNUQUNLX1NUT1JFIHwgUyhUTVBfWkVSTykgfCBBKFNMSklUX1NQKSB8IElNTShvZmZzKSkpOwogCiAJdG1wID0gc2F2ZWRzIDwgU0xKSVRfTlVNQkVSX09GX1NBVkVEX1JFR0lTVEVSUyA/IChTTEpJVF9TMCArIDEgLSBzYXZlZHMpIDogU0xKSVRfRklSU1RfU0FWRURfUkVHOwogCWZvciAoaSA9IFNMSklUX1MwOyBpID49IHRtcDsgaS0tKSB7Ci0JCW9mZnMgLT0gKHNsaml0X3NpKShzaXplb2Yoc2xqaXRfc3cpKTsKKwkJb2ZmcyAtPSAoc2xqaXRfczMyKShzaXplb2Yoc2xqaXRfc3cpKTsKIAkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIFNUQUNLX1NUT1JFIHwgUyhpKSB8IEEoU0xKSVRfU1ApIHwgSU1NKG9mZnMpKSk7CiAJfQogCiAJZm9yIChpID0gc2NyYXRjaGVzOyBpID49IFNMSklUX0ZJUlNUX1NBVkVEX1JFRzsgaS0tKSB7Ci0JCW9mZnMgLT0gKHNsaml0X3NpKShzaXplb2Yoc2xqaXRfc3cpKTsKKwkJb2ZmcyAtPSAoc2xqaXRfczMyKShzaXplb2Yoc2xqaXRfc3cpKTsKIAkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIFNUQUNLX1NUT1JFIHwgUyhpKSB8IEEoU0xKSVRfU1ApIHwgSU1NKG9mZnMpKSk7CiAJfQogCi0JU0xKSVRfQVNTRVJUKG9mZnMgPT0gLShzbGppdF9zaSlHRVRfU0FWRURfUkVHSVNURVJTX1NJWkUoY29tcGlsZXItPnNjcmF0Y2hlcywgY29tcGlsZXItPnNhdmVkcywgMSkpOworCVNMSklUX0FTU0VSVChvZmZzID09IC0oc2xqaXRfczMyKUdFVF9TQVZFRF9SRUdJU1RFUlNfU0laRShjb21waWxlci0+c2NyYXRjaGVzLCBjb21waWxlci0+c2F2ZWRzLCAxKSk7CiAKICNpZiAoZGVmaW5lZCBTTEpJVF9QUENfU1RBQ0tfRlJBTUVfVjIgJiYgU0xKSVRfUFBDX1NUQUNLX0ZSQU1FX1YyKQogCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBTVEFDS19TVE9SRSB8IFMoMCkgfCBBKFNMSklUX1NQKSB8IElNTSgyICogc2l6ZW9mKHNsaml0X3N3KSkpKTsKQEAgLTYzNSw5ICs2MzksOSBAQAogCXJldHVybiBTTEpJVF9TVUNDRVNTOwogfQogCi1TTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfc2V0X2NvbnRleHQoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwKLQlzbGppdF9zaSBvcHRpb25zLCBzbGppdF9zaSBhcmdzLCBzbGppdF9zaSBzY3JhdGNoZXMsIHNsaml0X3NpIHNhdmVkcywKLQlzbGppdF9zaSBmc2NyYXRjaGVzLCBzbGppdF9zaSBmc2F2ZWRzLCBzbGppdF9zaSBsb2NhbF9zaXplKQorU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3MzMiBzbGppdF9zZXRfY29udGV4dChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLAorCXNsaml0X3MzMiBvcHRpb25zLCBzbGppdF9zMzIgYXJncywgc2xqaXRfczMyIHNjcmF0Y2hlcywgc2xqaXRfczMyIHNhdmVkcywKKwlzbGppdF9zMzIgZnNjcmF0Y2hlcywgc2xqaXRfczMyIGZzYXZlZHMsIHNsaml0X3MzMiBsb2NhbF9zaXplKQogewogCUNIRUNLX0VSUk9SKCk7CiAJQ0hFQ0soY2hlY2tfc2xqaXRfc2V0X2NvbnRleHQoY29tcGlsZXIsIG9wdGlvbnMsIGFyZ3MsIHNjcmF0Y2hlcywgc2F2ZWRzLCBmc2NyYXRjaGVzLCBmc2F2ZWRzLCBsb2NhbF9zaXplKSk7CkBAIC02NDgsOSArNjUyLDkgQEAKIAlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKIH0KIAotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfcmV0dXJuKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIG9wLCBzbGppdF9zaSBzcmMsIHNsaml0X3N3IHNyY3cpCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfczMyIHNsaml0X2VtaXRfcmV0dXJuKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiBvcCwgc2xqaXRfczMyIHNyYywgc2xqaXRfc3cgc3JjdykKIHsKLQlzbGppdF9zaSBpLCB0bXAsIG9mZnM7CisJc2xqaXRfczMyIGksIHRtcCwgb2ZmczsKIAogCUNIRUNLX0VSUk9SKCk7CiAJQ0hFQ0soY2hlY2tfc2xqaXRfZW1pdF9yZXR1cm4oY29tcGlsZXIsIG9wLCBzcmMsIHNyY3cpKTsKQEAgLTY3MCwxOCArNjc0LDE4IEBACiAJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIFNUQUNLX0xPQUQgfCBEKDApIHwgQShTTEpJVF9TUCkgfCBJTU0oc2l6ZW9mKHNsaml0X3N3KSkpKTsKICNlbmRpZgogCi0Jb2ZmcyA9IC0oc2xqaXRfc2kpR0VUX1NBVkVEX1JFR0lTVEVSU19TSVpFKGNvbXBpbGVyLT5zY3JhdGNoZXMsIGNvbXBpbGVyLT5zYXZlZHMsIDEpOworCW9mZnMgPSAtKHNsaml0X3MzMilHRVRfU0FWRURfUkVHSVNURVJTX1NJWkUoY29tcGlsZXItPnNjcmF0Y2hlcywgY29tcGlsZXItPnNhdmVkcywgMSk7CiAKIAl0bXAgPSBjb21waWxlci0+c2NyYXRjaGVzOwogCWZvciAoaSA9IFNMSklUX0ZJUlNUX1NBVkVEX1JFRzsgaSA8PSB0bXA7IGkrKykgewogCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgU1RBQ0tfTE9BRCB8IEQoaSkgfCBBKFNMSklUX1NQKSB8IElNTShvZmZzKSkpOwotCQlvZmZzICs9IChzbGppdF9zaSkoc2l6ZW9mKHNsaml0X3N3KSk7CisJCW9mZnMgKz0gKHNsaml0X3MzMikoc2l6ZW9mKHNsaml0X3N3KSk7CiAJfQogCiAJdG1wID0gY29tcGlsZXItPnNhdmVkcyA8IFNMSklUX05VTUJFUl9PRl9TQVZFRF9SRUdJU1RFUlMgPyAoU0xKSVRfUzAgKyAxIC0gY29tcGlsZXItPnNhdmVkcykgOiBTTEpJVF9GSVJTVF9TQVZFRF9SRUc7CiAJZm9yIChpID0gdG1wOyBpIDw9IFNMSklUX1MwOyBpKyspIHsKIAkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIFNUQUNLX0xPQUQgfCBEKGkpIHwgQShTTEpJVF9TUCkgfCBJTU0ob2ZmcykpKTsKLQkJb2ZmcyArPSAoc2xqaXRfc2kpKHNpemVvZihzbGppdF9zdykpOworCQlvZmZzICs9IChzbGppdF9zMzIpKHNpemVvZihzbGppdF9zdykpOwogCX0KIAogCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBTVEFDS19MT0FEIHwgRChUTVBfWkVSTykgfCBBKFNMSklUX1NQKSB8IElNTShvZmZzKSkpOwpAQCAtNzIyLDcgKzcyNiw3IEBACiAJKCgoaW5zdCkgJiB+KElOVF9BTElHTkVEIHwgVVBEQVRFX1JFUSkpIHwgKCgoZmxhZ3MpICYgTUVNX01BU0spIDw9IEdQUl9SRUcgPyBEKHJlZykgOiBGRChyZWcpKSkKICNlbmRpZgogCi1zdGF0aWMgU0xKSVRfQ09OU1Qgc2xqaXRfaW5zIGRhdGFfdHJhbnNmZXJfaW5zdHNbNjQgKyA4XSA9IHsKK3N0YXRpYyBjb25zdCBzbGppdF9pbnMgZGF0YV90cmFuc2Zlcl9pbnN0c1s2NCArIDhdID0gewogCiAvKiAtLS0tLS0tLSBVbnNpZ25lZCAtLS0tLS0tLSAqLwogCkBAIC04NDEsNyArODQ1LDcgQEAKICN1bmRlZiBBUkNIXzMyXzY0CiAKIC8qIFNpbXBsZSBjYXNlcywgKG5vIGNhY2hpbmcgaXMgcmVxdWlyZWQpLiAqLwotc3RhdGljIHNsaml0X3NpIGdldHB1dF9hcmdfZmFzdChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBpbnBfZmxhZ3MsIHNsaml0X3NpIHJlZywgc2xqaXRfc2kgYXJnLCBzbGppdF9zdyBhcmd3KQorc3RhdGljIHNsaml0X3MzMiBnZXRwdXRfYXJnX2Zhc3Qoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIGlucF9mbGFncywgc2xqaXRfczMyIHJlZywgc2xqaXRfczMyIGFyZywgc2xqaXRfc3cgYXJndykKIHsKIAlzbGppdF9pbnMgaW5zdDsKIApAQCAtODkxLDcgKzg5NSw3IEBACiAvKiBTZWUgZ2V0cHV0X2FyZyBiZWxvdy4KICAgIE5vdGU6IGNhbl9jYWNoZSBpcyBjYWxsZWQgb25seSBmb3IgYmluYXJ5IG9wZXJhdG9ycy4gVGhvc2Ugb3BlcmF0b3IgYWx3YXlzCiAgICB1c2VzIHdvcmQgYXJndW1lbnRzIHdpdGhvdXQgd3JpdGUgYmFjay4gKi8KLXN0YXRpYyBzbGppdF9zaSBjYW5fY2FjaGUoc2xqaXRfc2kgYXJnLCBzbGppdF9zdyBhcmd3LCBzbGppdF9zaSBuZXh0X2FyZywgc2xqaXRfc3cgbmV4dF9hcmd3KQorc3RhdGljIHNsaml0X3MzMiBjYW5fY2FjaGUoc2xqaXRfczMyIGFyZywgc2xqaXRfc3cgYXJndywgc2xqaXRfczMyIG5leHRfYXJnLCBzbGppdF9zdyBuZXh0X2FyZ3cpCiB7CiAJc2xqaXRfc3cgaGlnaF9zaG9ydCwgbmV4dF9oaWdoX3Nob3J0OwogI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19QUENfNjQgJiYgU0xKSVRfQ09ORklHX1BQQ182NCkKQEAgLTk0MCw5ICs5NDQsOSBAQAogI2VuZGlmCiAKIC8qIEVtaXQgdGhlIG5lY2Vzc2FyeSBpbnN0cnVjdGlvbnMuIFNlZSBjYW5fY2FjaGUgYWJvdmUuICovCi1zdGF0aWMgc2xqaXRfc2kgZ2V0cHV0X2FyZyhzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBpbnBfZmxhZ3MsIHNsaml0X3NpIHJlZywgc2xqaXRfc2kgYXJnLCBzbGppdF9zdyBhcmd3LCBzbGppdF9zaSBuZXh0X2FyZywgc2xqaXRfc3cgbmV4dF9hcmd3KQorc3RhdGljIHNsaml0X3MzMiBnZXRwdXRfYXJnKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiBpbnBfZmxhZ3MsIHNsaml0X3MzMiByZWcsIHNsaml0X3MzMiBhcmcsIHNsaml0X3N3IGFyZ3csIHNsaml0X3MzMiBuZXh0X2FyZywgc2xqaXRfc3cgbmV4dF9hcmd3KQogewotCXNsaml0X3NpIHRtcF9yOworCXNsaml0X3MzMiB0bXBfcjsKIAlzbGppdF9pbnMgaW5zdDsKIAlzbGppdF9zdyBoaWdoX3Nob3J0LCBuZXh0X2hpZ2hfc2hvcnQ7CiAjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1BQQ182NCAmJiBTTEpJVF9DT05GSUdfUFBDXzY0KQpAQCAtOTkyLDcgKzk5Niw3IEBACiAjZW5kaWYKIAogCQlhcmcgJj0gUkVHX01BU0s7Ci0JCWhpZ2hfc2hvcnQgPSAoc2xqaXRfc2kpKGFyZ3cgKyAoKGFyZ3cgJiAweDgwMDApIDw8IDEpKSAmIH4weGZmZmY7CisJCWhpZ2hfc2hvcnQgPSAoc2xqaXRfczMyKShhcmd3ICsgKChhcmd3ICYgMHg4MDAwKSA8PCAxKSkgJiB+MHhmZmZmOwogCQkvKiBUaGUgZ2V0cHV0X2FyZ19mYXN0IHNob3VsZCBoYW5kbGUgdGhpcyBvdGhlcndpc2UuICovCiAjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1BQQ182NCAmJiBTTEpJVF9DT05GSUdfUFBDXzY0KQogCQlTTEpJVF9BU1NFUlQoaGlnaF9zaG9ydCAmJiBoaWdoX3Nob3J0IDw9IDB4N2ZmZmZmZmZsICYmIGhpZ2hfc2hvcnQgPj0gLTB4ODAwMDAwMDBsKTsKQEAgLTEwMTAsNyArMTAxNCw3IEBACiAJCX0KIAkJZWxzZSBpZiAoY29tcGlsZXItPmNhY2hlX2FyZyAhPSAoU0xKSVRfTUVNIHwgYXJnKSB8fCBoaWdoX3Nob3J0ICE9IGNvbXBpbGVyLT5jYWNoZV9hcmd3KSB7CiAJCQlpZiAoKG5leHRfYXJnICYgU0xKSVRfTUVNKSAmJiAhKG5leHRfYXJnICYgT0ZGU19SRUdfTUFTSykpIHsKLQkJCQluZXh0X2hpZ2hfc2hvcnQgPSAoc2xqaXRfc2kpKG5leHRfYXJndyArICgobmV4dF9hcmd3ICYgMHg4MDAwKSA8PCAxKSkgJiB+MHhmZmZmOworCQkJCW5leHRfaGlnaF9zaG9ydCA9IChzbGppdF9zMzIpKG5leHRfYXJndyArICgobmV4dF9hcmd3ICYgMHg4MDAwKSA8PCAxKSkgJiB+MHhmZmZmOwogCQkJCWlmIChoaWdoX3Nob3J0ID09IG5leHRfaGlnaF9zaG9ydCkgewogCQkJCQljb21waWxlci0+Y2FjaGVfYXJnID0gU0xKSVRfTUVNIHwgYXJnOwogCQkJCQljb21waWxlci0+Y2FjaGVfYXJndyA9IGhpZ2hfc2hvcnQ7CkBAIC0xMTA3LDI3ICsxMTExLDI3IEBACiAjZW5kaWYKIH0KIAotc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9zaSBlbWl0X29wX21lbTIoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgZmxhZ3MsIHNsaml0X3NpIHJlZywgc2xqaXRfc2kgYXJnMSwgc2xqaXRfc3cgYXJnMXcsIHNsaml0X3NpIGFyZzIsIHNsaml0X3N3IGFyZzJ3KQorc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9zMzIgZW1pdF9vcF9tZW0yKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiBmbGFncywgc2xqaXRfczMyIHJlZywgc2xqaXRfczMyIGFyZzEsIHNsaml0X3N3IGFyZzF3LCBzbGppdF9zMzIgYXJnMiwgc2xqaXRfc3cgYXJnMncpCiB7CiAJaWYgKGdldHB1dF9hcmdfZmFzdChjb21waWxlciwgZmxhZ3MsIHJlZywgYXJnMSwgYXJnMXcpKQogCQlyZXR1cm4gY29tcGlsZXItPmVycm9yOwogCXJldHVybiBnZXRwdXRfYXJnKGNvbXBpbGVyLCBmbGFncywgcmVnLCBhcmcxLCBhcmcxdywgYXJnMiwgYXJnMncpOwogfQogCi1zdGF0aWMgc2xqaXRfc2kgZW1pdF9vcChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwgc2xqaXRfc2kgaW5wdXRfZmxhZ3MsCi0Jc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3LAotCXNsaml0X3NpIHNyYzEsIHNsaml0X3N3IHNyYzF3LAotCXNsaml0X3NpIHNyYzIsIHNsaml0X3N3IHNyYzJ3KQorc3RhdGljIHNsaml0X3MzMiBlbWl0X29wKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiBvcCwgc2xqaXRfczMyIGlucHV0X2ZsYWdzLAorCXNsaml0X3MzMiBkc3QsIHNsaml0X3N3IGRzdHcsCisJc2xqaXRfczMyIHNyYzEsIHNsaml0X3N3IHNyYzF3LAorCXNsaml0X3MzMiBzcmMyLCBzbGppdF9zdyBzcmMydykKIHsKIAkvKiBhcmcxIGdvZXMgdG8gVE1QX1JFRzEgb3Igc3JjIHJlZwogCSAgIGFyZzIgZ29lcyB0byBUTVBfUkVHMiwgaW1tIG9yIHNyYyByZWcKIAkgICBUTVBfUkVHMyBjYW4gYmUgdXNlZCBmb3IgY2FjaGluZwogCSAgIHJlc3VsdCBnb2VzIHRvIFRNUF9SRUcyLCBzbyBwdXQgcmVzdWx0IGNhbiB1c2UgVE1QX1JFRzEgYW5kIFRNUF9SRUczLiAqLwotCXNsaml0X3NpIGRzdF9yOwotCXNsaml0X3NpIHNyYzFfcjsKLQlzbGppdF9zaSBzcmMyX3I7Ci0Jc2xqaXRfc2kgc3VnZ19zcmMyX3IgPSBUTVBfUkVHMjsKLQlzbGppdF9zaSBmbGFncyA9IGlucHV0X2ZsYWdzICYgKEFMVF9GT1JNMSB8IEFMVF9GT1JNMiB8IEFMVF9GT1JNMyB8IEFMVF9GT1JNNCB8IEFMVF9GT1JNNSB8IEFMVF9GT1JNNiB8IEFMVF9TSUdOX0VYVCB8IEFMVF9TRVRfRkxBR1MpOworCXNsaml0X3MzMiBkc3RfcjsKKwlzbGppdF9zMzIgc3JjMV9yOworCXNsaml0X3MzMiBzcmMyX3I7CisJc2xqaXRfczMyIHN1Z2dfc3JjMl9yID0gVE1QX1JFRzI7CisJc2xqaXRfczMyIGZsYWdzID0gaW5wdXRfZmxhZ3MgJiAoQUxUX0ZPUk0xIHwgQUxUX0ZPUk0yIHwgQUxUX0ZPUk0zIHwgQUxUX0ZPUk00IHwgQUxUX0ZPUk01IHwgQUxUX0ZPUk02IHwgQUxUX1NJR05fRVhUIHwgQUxUX1NFVF9GTEFHUyk7CiAKIAlpZiAoIShpbnB1dF9mbGFncyAmIEFMVF9LRUVQX0NBQ0hFKSkgewogCQljb21waWxlci0+Y2FjaGVfYXJnID0gMDsKQEAgLTExMzYsMTQgKzExNDAsMTQgQEAKIAogCS8qIERlc3RpbmF0aW9uIGNoZWNrLiAqLwogCWlmIChTTEpJVF9VTkxJS0VMWShkc3QgPT0gU0xKSVRfVU5VU0VEKSkgewotCQlpZiAob3AgPj0gU0xKSVRfTU9WICYmIG9wIDw9IFNMSklUX01PVlVfU0kgJiYgIShzcmMyICYgU0xKSVRfTUVNKSkKKwkJaWYgKG9wID49IFNMSklUX01PViAmJiBvcCA8PSBTTEpJVF9NT1ZVX1MzMiAmJiAhKHNyYzIgJiBTTEpJVF9NRU0pKQogCQkJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CiAJCWRzdF9yID0gVE1QX1JFRzI7CiAJfQogCWVsc2UgaWYgKEZBU1RfSVNfUkVHKGRzdCkpIHsKIAkJZHN0X3IgPSBkc3Q7CiAJCWZsYWdzIHw9IFJFR19ERVNUOwotCQlpZiAob3AgPj0gU0xKSVRfTU9WICYmIG9wIDw9IFNMSklUX01PVlVfU0kpCisJCWlmIChvcCA+PSBTTEpJVF9NT1YgJiYgb3AgPD0gU0xKSVRfTU9WVV9TMzIpCiAJCQlzdWdnX3NyYzJfciA9IGRzdF9yOwogCX0KIAllbHNlIHsKQEAgLTExNzgsNyArMTE4Miw3IEBACiAJaWYgKEZBU1RfSVNfUkVHKHNyYzIpKSB7CiAJCXNyYzJfciA9IHNyYzI7CiAJCWZsYWdzIHw9IFJFRzJfU09VUkNFOwotCQlpZiAoIShmbGFncyAmIFJFR19ERVNUKSAmJiBvcCA+PSBTTEpJVF9NT1YgJiYgb3AgPD0gU0xKSVRfTU9WVV9TSSkKKwkJaWYgKCEoZmxhZ3MgJiBSRUdfREVTVCkgJiYgb3AgPj0gU0xKSVRfTU9WICYmIG9wIDw9IFNMSklUX01PVlVfUzMyKQogCQkJZHN0X3IgPSBzcmMyX3I7CiAJfQogCWVsc2UgaWYgKHNyYzIgJiBTTEpJVF9JTU0pIHsKQEAgLTEyNDMsMTAgKzEyNDcsMTAgQEAKIAlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKIH0KIAotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfb3AwKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIG9wKQorU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3MzMiBzbGppdF9lbWl0X29wMChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgb3ApCiB7CiAjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1BQQ182NCAmJiBTTEpJVF9DT05GSUdfUFBDXzY0KQotCXNsaml0X3NpIGludF9vcCA9IG9wICYgU0xKSVRfSU5UX09QOworCXNsaml0X3MzMiBpbnRfb3AgPSBvcCAmIFNMSklUX0kzMl9PUDsKICNlbmRpZgogCiAJQ0hFQ0tfRVJST1IoKTsKQEAgLTEyNTcsMzMgKzEyNjEsMzMgQEAKIAljYXNlIFNMSklUX0JSRUFLUE9JTlQ6CiAJY2FzZSBTTEpJVF9OT1A6CiAJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIE5PUCk7Ci0JY2FzZSBTTEpJVF9MVU1VTDoKLQljYXNlIFNMSklUX0xTTVVMOgorCWNhc2UgU0xKSVRfTE1VTF9VVzoKKwljYXNlIFNMSklUX0xNVUxfU1c6CiAJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBPUiB8IFMoU0xKSVRfUjApIHwgQShUTVBfUkVHMSkgfCBCKFNMSklUX1IwKSkpOwogI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19QUENfNjQgJiYgU0xKSVRfQ09ORklHX1BQQ182NCkKIAkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIE1VTExEIHwgRChTTEpJVF9SMCkgfCBBKFRNUF9SRUcxKSB8IEIoU0xKSVRfUjEpKSk7Ci0JCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIChvcCA9PSBTTEpJVF9MVU1VTCA/IE1VTEhEVSA6IE1VTEhEKSB8IEQoU0xKSVRfUjEpIHwgQShUTVBfUkVHMSkgfCBCKFNMSklUX1IxKSk7CisJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIChvcCA9PSBTTEpJVF9MTVVMX1VXID8gTVVMSERVIDogTVVMSEQpIHwgRChTTEpJVF9SMSkgfCBBKFRNUF9SRUcxKSB8IEIoU0xKSVRfUjEpKTsKICNlbHNlCiAJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBNVUxMVyB8IEQoU0xKSVRfUjApIHwgQShUTVBfUkVHMSkgfCBCKFNMSklUX1IxKSkpOwotCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCAob3AgPT0gU0xKSVRfTFVNVUwgPyBNVUxIV1UgOiBNVUxIVykgfCBEKFNMSklUX1IxKSB8IEEoVE1QX1JFRzEpIHwgQihTTEpJVF9SMSkpOworCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCAob3AgPT0gU0xKSVRfTE1VTF9VVyA/IE1VTEhXVSA6IE1VTEhXKSB8IEQoU0xKSVRfUjEpIHwgQShUTVBfUkVHMSkgfCBCKFNMSklUX1IxKSk7CiAjZW5kaWYKLQljYXNlIFNMSklUX1VESVZNT0Q6Ci0JY2FzZSBTTEpJVF9TRElWTU9EOgorCWNhc2UgU0xKSVRfRElWTU9EX1VXOgorCWNhc2UgU0xKSVRfRElWTU9EX1NXOgogCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgT1IgfCBTKFNMSklUX1IwKSB8IEEoVE1QX1JFRzEpIHwgQihTTEpJVF9SMCkpKTsKICNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfUFBDXzY0ICYmIFNMSklUX0NPTkZJR19QUENfNjQpCi0JCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCAoaW50X29wID8gKG9wID09IFNMSklUX1VESVZNT0QgPyBESVZXVSA6IERJVlcpIDogKG9wID09IFNMSklUX1VESVZNT0QgPyBESVZEVSA6IERJVkQpKSB8IEQoU0xKSVRfUjApIHwgQShTTEpJVF9SMCkgfCBCKFNMSklUX1IxKSkpOworCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgKGludF9vcCA/IChvcCA9PSBTTEpJVF9ESVZNT0RfVVcgPyBESVZXVSA6IERJVlcpIDogKG9wID09IFNMSklUX0RJVk1PRF9VVyA/IERJVkRVIDogRElWRCkpIHwgRChTTEpJVF9SMCkgfCBBKFNMSklUX1IwKSB8IEIoU0xKSVRfUjEpKSk7CiAJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCAoaW50X29wID8gTVVMTFcgOiBNVUxMRCkgfCBEKFNMSklUX1IxKSB8IEEoU0xKSVRfUjApIHwgQihTTEpJVF9SMSkpKTsKICNlbHNlCi0JCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCAob3AgPT0gU0xKSVRfVURJVk1PRCA/IERJVldVIDogRElWVykgfCBEKFNMSklUX1IwKSB8IEEoU0xKSVRfUjApIHwgQihTTEpJVF9SMSkpKTsKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIChvcCA9PSBTTEpJVF9ESVZNT0RfVVcgPyBESVZXVSA6IERJVlcpIHwgRChTTEpJVF9SMCkgfCBBKFNMSklUX1IwKSB8IEIoU0xKSVRfUjEpKSk7CiAJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBNVUxMVyB8IEQoU0xKSVRfUjEpIHwgQShTTEpJVF9SMCkgfCBCKFNMSklUX1IxKSkpOwogI2VuZGlmCiAJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIFNVQkYgfCBEKFNMSklUX1IxKSB8IEEoU0xKSVRfUjEpIHwgQihUTVBfUkVHMSkpOwotCWNhc2UgU0xKSVRfVURJVkk6Ci0JY2FzZSBTTEpJVF9TRElWSToKKwljYXNlIFNMSklUX0RJVl9VVzoKKwljYXNlIFNMSklUX0RJVl9TVzoKICNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfUFBDXzY0ICYmIFNMSklUX0NPTkZJR19QUENfNjQpCi0JCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIChpbnRfb3AgPyAob3AgPT0gU0xKSVRfVURJVkkgPyBESVZXVSA6IERJVlcpIDogKG9wID09IFNMSklUX1VESVZJID8gRElWRFUgOiBESVZEKSkgfCBEKFNMSklUX1IwKSB8IEEoU0xKSVRfUjApIHwgQihTTEpJVF9SMSkpOworCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCAoaW50X29wID8gKG9wID09IFNMSklUX0RJVl9VVyA/IERJVldVIDogRElWVykgOiAob3AgPT0gU0xKSVRfRElWX1VXID8gRElWRFUgOiBESVZEKSkgfCBEKFNMSklUX1IwKSB8IEEoU0xKSVRfUjApIHwgQihTTEpJVF9SMSkpOwogI2Vsc2UKLQkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgKG9wID09IFNMSklUX1VESVZJID8gRElWV1UgOiBESVZXKSB8IEQoU0xKSVRfUjApIHwgQShTTEpJVF9SMCkgfCBCKFNMSklUX1IxKSk7CisJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIChvcCA9PSBTTEpJVF9ESVZfVVcgPyBESVZXVSA6IERJVlcpIHwgRChTTEpJVF9SMCkgfCBBKFNMSklUX1IwKSB8IEIoU0xKSVRfUjEpKTsKICNlbmRpZgogCX0KIApAQCAtMTI5MywxMiArMTI5NywxMiBAQAogI2RlZmluZSBFTUlUX01PVih0eXBlLCB0eXBlX2ZsYWdzLCB0eXBlX2Nhc3QpIFwKIAllbWl0X29wKGNvbXBpbGVyLCAoc3JjICYgU0xKSVRfSU1NKSA/IFNMSklUX01PViA6IHR5cGUsIGZsYWdzIHwgKHR5cGVfZmxhZ3MpLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIChzcmMgJiBTTEpJVF9JTU0pID8gdHlwZV9jYXN0IHNyY3cgOiBzcmN3KQogCi1TTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9vcDEoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsCi0Jc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3LAotCXNsaml0X3NpIHNyYywgc2xqaXRfc3cgc3JjdykKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zMzIgc2xqaXRfZW1pdF9vcDEoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIG9wLAorCXNsaml0X3MzMiBkc3QsIHNsaml0X3N3IGRzdHcsCisJc2xqaXRfczMyIHNyYywgc2xqaXRfc3cgc3JjdykKIHsKLQlzbGppdF9zaSBmbGFncyA9IEdFVF9GTEFHUyhvcCkgPyBBTFRfU0VUX0ZMQUdTIDogMDsKLQlzbGppdF9zaSBvcF9mbGFncyA9IEdFVF9BTExfRkxBR1Mob3ApOworCXNsaml0X3MzMiBmbGFncyA9IEdFVF9GTEFHUyhvcCkgPyBBTFRfU0VUX0ZMQUdTIDogMDsKKwlzbGppdF9zMzIgb3BfZmxhZ3MgPSBHRVRfQUxMX0ZMQUdTKG9wKTsKIAogCUNIRUNLX0VSUk9SKCk7CiAJQ0hFQ0soY2hlY2tfc2xqaXRfZW1pdF9vcDEoY29tcGlsZXIsIG9wLCBkc3QsIGRzdHcsIHNyYywgc3JjdykpOwpAQCAtMTMxMiwyMSArMTMxNiwyMSBAQAogCWlmIChvcF9mbGFncyAmIFNMSklUX1NFVF9PKQogCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgTVRYRVIgfCBTKFRNUF9aRVJPKSkpOwogCi0JaWYgKG9wX2ZsYWdzICYgU0xKSVRfSU5UX09QKSB7CisJaWYgKG9wX2ZsYWdzICYgU0xKSVRfSTMyX09QKSB7CiAJCWlmIChvcCA8IFNMSklUX05PVCkgewogCQkJaWYgKEZBU1RfSVNfUkVHKHNyYykgJiYgc3JjID09IGRzdCkgewogCQkJCWlmICghVFlQRV9DQVNUX05FRURFRChvcCkpCiAJCQkJCXJldHVybiBTTEpJVF9TVUNDRVNTOwogCQkJfQogI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19QUENfNjQgJiYgU0xKSVRfQ09ORklHX1BQQ182NCkKLQkJCWlmIChvcCA9PSBTTEpJVF9NT1ZfU0kgJiYgKHNyYyAmIFNMSklUX01FTSkpCi0JCQkJb3AgPSBTTEpJVF9NT1ZfVUk7Ci0JCQlpZiAob3AgPT0gU0xKSVRfTU9WVV9TSSAmJiAoc3JjICYgU0xKSVRfTUVNKSkKLQkJCQlvcCA9IFNMSklUX01PVlVfVUk7Ci0JCQlpZiAob3AgPT0gU0xKSVRfTU9WX1VJICYmIChzcmMgJiBTTEpJVF9JTU0pKQotCQkJCW9wID0gU0xKSVRfTU9WX1NJOwotCQkJaWYgKG9wID09IFNMSklUX01PVlVfVUkgJiYgKHNyYyAmIFNMSklUX0lNTSkpCi0JCQkJb3AgPSBTTEpJVF9NT1ZVX1NJOworCQkJaWYgKG9wID09IFNMSklUX01PVl9TMzIgJiYgKHNyYyAmIFNMSklUX01FTSkpCisJCQkJb3AgPSBTTEpJVF9NT1ZfVTMyOworCQkJaWYgKG9wID09IFNMSklUX01PVlVfUzMyICYmIChzcmMgJiBTTEpJVF9NRU0pKQorCQkJCW9wID0gU0xKSVRfTU9WVV9VMzI7CisJCQlpZiAob3AgPT0gU0xKSVRfTU9WX1UzMiAmJiAoc3JjICYgU0xKSVRfSU1NKSkKKwkJCQlvcCA9IFNMSklUX01PVl9TMzI7CisJCQlpZiAob3AgPT0gU0xKSVRfTU9WVV9VMzIgJiYgKHNyYyAmIFNMSklUX0lNTSkpCisJCQkJb3AgPSBTTEpJVF9NT1ZVX1MzMjsKICNlbmRpZgogCQl9CiAjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1BQQ182NCAmJiBTTEpJVF9DT05GSUdfUFBDXzY0KQpAQCAtMTMzNCw3ICsxMzM4LDcgQEAKIAkJCS8qIE1vc3Qgb3BlcmF0aW9ucyBleHBlY3Qgc2lnbiBleHRlbmRlZCBhcmd1bWVudHMuICovCiAJCQlmbGFncyB8PSBJTlRfREFUQSB8IFNJR05FRF9EQVRBOwogCQkJaWYgKHNyYyAmIFNMSklUX0lNTSkKLQkJCQlzcmN3ID0gKHNsaml0X3NpKXNyY3c7CisJCQkJc3JjdyA9IChzbGppdF9zMzIpc3JjdzsKIAkJfQogI2VuZGlmCiAJfQpAQCAtMTM0Myw1OCArMTM0Nyw1OCBAQAogCWNhc2UgU0xKSVRfTU9WOgogCWNhc2UgU0xKSVRfTU9WX1A6CiAjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1BQQ18zMiAmJiBTTEpJVF9DT05GSUdfUFBDXzMyKQotCWNhc2UgU0xKSVRfTU9WX1VJOgotCWNhc2UgU0xKSVRfTU9WX1NJOgorCWNhc2UgU0xKSVRfTU9WX1UzMjoKKwljYXNlIFNMSklUX01PVl9TMzI6CiAjZW5kaWYKIAkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01PViwgZmxhZ3MgfCBXT1JEX0RBVEEsIGRzdCwgZHN0dywgVE1QX1JFRzEsIDAsIHNyYywgc3Jjdyk7CiAKICNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfUFBDXzY0ICYmIFNMSklUX0NPTkZJR19QUENfNjQpCi0JY2FzZSBTTEpJVF9NT1ZfVUk6Ci0JCXJldHVybiBFTUlUX01PVihTTEpJVF9NT1ZfVUksIElOVF9EQVRBLCAoc2xqaXRfdWkpKTsKKwljYXNlIFNMSklUX01PVl9VMzI6CisJCXJldHVybiBFTUlUX01PVihTTEpJVF9NT1ZfVTMyLCBJTlRfREFUQSwgKHNsaml0X3UzMikpOwogCi0JY2FzZSBTTEpJVF9NT1ZfU0k6Ci0JCXJldHVybiBFTUlUX01PVihTTEpJVF9NT1ZfU0ksIElOVF9EQVRBIHwgU0lHTkVEX0RBVEEsIChzbGppdF9zaSkpOworCWNhc2UgU0xKSVRfTU9WX1MzMjoKKwkJcmV0dXJuIEVNSVRfTU9WKFNMSklUX01PVl9TMzIsIElOVF9EQVRBIHwgU0lHTkVEX0RBVEEsIChzbGppdF9zMzIpKTsKICNlbmRpZgogCi0JY2FzZSBTTEpJVF9NT1ZfVUI6Ci0JCXJldHVybiBFTUlUX01PVihTTEpJVF9NT1ZfVUIsIEJZVEVfREFUQSwgKHNsaml0X3ViKSk7CisJY2FzZSBTTEpJVF9NT1ZfVTg6CisJCXJldHVybiBFTUlUX01PVihTTEpJVF9NT1ZfVTgsIEJZVEVfREFUQSwgKHNsaml0X3U4KSk7CiAKLQljYXNlIFNMSklUX01PVl9TQjoKLQkJcmV0dXJuIEVNSVRfTU9WKFNMSklUX01PVl9TQiwgQllURV9EQVRBIHwgU0lHTkVEX0RBVEEsIChzbGppdF9zYikpOworCWNhc2UgU0xKSVRfTU9WX1M4OgorCQlyZXR1cm4gRU1JVF9NT1YoU0xKSVRfTU9WX1M4LCBCWVRFX0RBVEEgfCBTSUdORURfREFUQSwgKHNsaml0X3M4KSk7CiAKLQljYXNlIFNMSklUX01PVl9VSDoKLQkJcmV0dXJuIEVNSVRfTU9WKFNMSklUX01PVl9VSCwgSEFMRl9EQVRBLCAoc2xqaXRfdWgpKTsKKwljYXNlIFNMSklUX01PVl9VMTY6CisJCXJldHVybiBFTUlUX01PVihTTEpJVF9NT1ZfVTE2LCBIQUxGX0RBVEEsIChzbGppdF91MTYpKTsKIAotCWNhc2UgU0xKSVRfTU9WX1NIOgotCQlyZXR1cm4gRU1JVF9NT1YoU0xKSVRfTU9WX1NILCBIQUxGX0RBVEEgfCBTSUdORURfREFUQSwgKHNsaml0X3NoKSk7CisJY2FzZSBTTEpJVF9NT1ZfUzE2OgorCQlyZXR1cm4gRU1JVF9NT1YoU0xKSVRfTU9WX1MxNiwgSEFMRl9EQVRBIHwgU0lHTkVEX0RBVEEsIChzbGppdF9zMTYpKTsKIAogCWNhc2UgU0xKSVRfTU9WVToKIAljYXNlIFNMSklUX01PVlVfUDoKICNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfUFBDXzMyICYmIFNMSklUX0NPTkZJR19QUENfMzIpCi0JY2FzZSBTTEpJVF9NT1ZVX1VJOgotCWNhc2UgU0xKSVRfTU9WVV9TSToKKwljYXNlIFNMSklUX01PVlVfVTMyOgorCWNhc2UgU0xKSVRfTU9WVV9TMzI6CiAjZW5kaWYKIAkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01PViwgZmxhZ3MgfCBXT1JEX0RBVEEgfCBXUklURV9CQUNLLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIHNyY3cpOwogCiAjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1BQQ182NCAmJiBTTEpJVF9DT05GSUdfUFBDXzY0KQotCWNhc2UgU0xKSVRfTU9WVV9VSToKLQkJcmV0dXJuIEVNSVRfTU9WKFNMSklUX01PVl9VSSwgSU5UX0RBVEEgfCBXUklURV9CQUNLLCAoc2xqaXRfdWkpKTsKKwljYXNlIFNMSklUX01PVlVfVTMyOgorCQlyZXR1cm4gRU1JVF9NT1YoU0xKSVRfTU9WX1UzMiwgSU5UX0RBVEEgfCBXUklURV9CQUNLLCAoc2xqaXRfdTMyKSk7CiAKLQljYXNlIFNMSklUX01PVlVfU0k6Ci0JCXJldHVybiBFTUlUX01PVihTTEpJVF9NT1ZfU0ksIElOVF9EQVRBIHwgU0lHTkVEX0RBVEEgfCBXUklURV9CQUNLLCAoc2xqaXRfc2kpKTsKKwljYXNlIFNMSklUX01PVlVfUzMyOgorCQlyZXR1cm4gRU1JVF9NT1YoU0xKSVRfTU9WX1MzMiwgSU5UX0RBVEEgfCBTSUdORURfREFUQSB8IFdSSVRFX0JBQ0ssIChzbGppdF9zMzIpKTsKICNlbmRpZgogCi0JY2FzZSBTTEpJVF9NT1ZVX1VCOgotCQlyZXR1cm4gRU1JVF9NT1YoU0xKSVRfTU9WX1VCLCBCWVRFX0RBVEEgfCBXUklURV9CQUNLLCAoc2xqaXRfdWIpKTsKKwljYXNlIFNMSklUX01PVlVfVTg6CisJCXJldHVybiBFTUlUX01PVihTTEpJVF9NT1ZfVTgsIEJZVEVfREFUQSB8IFdSSVRFX0JBQ0ssIChzbGppdF91OCkpOwogCi0JY2FzZSBTTEpJVF9NT1ZVX1NCOgotCQlyZXR1cm4gRU1JVF9NT1YoU0xKSVRfTU9WX1NCLCBCWVRFX0RBVEEgfCBTSUdORURfREFUQSB8IFdSSVRFX0JBQ0ssIChzbGppdF9zYikpOworCWNhc2UgU0xKSVRfTU9WVV9TODoKKwkJcmV0dXJuIEVNSVRfTU9WKFNMSklUX01PVl9TOCwgQllURV9EQVRBIHwgU0lHTkVEX0RBVEEgfCBXUklURV9CQUNLLCAoc2xqaXRfczgpKTsKIAotCWNhc2UgU0xKSVRfTU9WVV9VSDoKLQkJcmV0dXJuIEVNSVRfTU9WKFNMSklUX01PVl9VSCwgSEFMRl9EQVRBIHwgV1JJVEVfQkFDSywgKHNsaml0X3VoKSk7CisJY2FzZSBTTEpJVF9NT1ZVX1UxNjoKKwkJcmV0dXJuIEVNSVRfTU9WKFNMSklUX01PVl9VMTYsIEhBTEZfREFUQSB8IFdSSVRFX0JBQ0ssIChzbGppdF91MTYpKTsKIAotCWNhc2UgU0xKSVRfTU9WVV9TSDoKLQkJcmV0dXJuIEVNSVRfTU9WKFNMSklUX01PVl9TSCwgSEFMRl9EQVRBIHwgU0lHTkVEX0RBVEEgfCBXUklURV9CQUNLLCAoc2xqaXRfc2gpKTsKKwljYXNlIFNMSklUX01PVlVfUzE2OgorCQlyZXR1cm4gRU1JVF9NT1YoU0xKSVRfTU9WX1MxNiwgSEFMRl9EQVRBIHwgU0lHTkVEX0RBVEEgfCBXUklURV9CQUNLLCAoc2xqaXRfczE2KSk7CiAKIAljYXNlIFNMSklUX05PVDoKIAkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX05PVCwgZmxhZ3MsIGRzdCwgZHN0dywgVE1QX1JFRzEsIDAsIHNyYywgc3Jjdyk7CkBAIC0xNDA0LDcgKzE0MDgsNyBAQAogCiAJY2FzZSBTTEpJVF9DTFo6CiAjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1BQQ182NCAmJiBTTEpJVF9DT05GSUdfUFBDXzY0KQotCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfQ0xaLCBmbGFncyB8ICghKG9wX2ZsYWdzICYgU0xKSVRfSU5UX09QKSA/IDAgOiBBTFRfRk9STTEpLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIHNyY3cpOworCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfQ0xaLCBmbGFncyB8ICghKG9wX2ZsYWdzICYgU0xKSVRfSTMyX09QKSA/IDAgOiBBTFRfRk9STTEpLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIHNyY3cpOwogI2Vsc2UKIAkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX0NMWiwgZmxhZ3MsIGRzdCwgZHN0dywgVE1QX1JFRzEsIDAsIHNyYywgc3Jjdyk7CiAjZW5kaWYKQEAgLTE0NDgsMTIgKzE0NTIsMTIgQEAKIAkoKHNyYykgJiBTTEpJVF9JTU0pCiAjZW5kaWYKIAotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfb3AyKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIG9wLAotCXNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dywKLQlzbGppdF9zaSBzcmMxLCBzbGppdF9zdyBzcmMxdywKLQlzbGppdF9zaSBzcmMyLCBzbGppdF9zdyBzcmMydykKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zMzIgc2xqaXRfZW1pdF9vcDIoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIG9wLAorCXNsaml0X3MzMiBkc3QsIHNsaml0X3N3IGRzdHcsCisJc2xqaXRfczMyIHNyYzEsIHNsaml0X3N3IHNyYzF3LAorCXNsaml0X3MzMiBzcmMyLCBzbGppdF9zdyBzcmMydykKIHsKLQlzbGppdF9zaSBmbGFncyA9IEdFVF9GTEFHUyhvcCkgPyBBTFRfU0VUX0ZMQUdTIDogMDsKKwlzbGppdF9zMzIgZmxhZ3MgPSBHRVRfRkxBR1Mob3ApID8gQUxUX1NFVF9GTEFHUyA6IDA7CiAKIAlDSEVDS19FUlJPUigpOwogCUNIRUNLKGNoZWNrX3Nsaml0X2VtaXRfb3AyKGNvbXBpbGVyLCBvcCwgZHN0LCBkc3R3LCBzcmMxLCBzcmMxdywgc3JjMiwgc3JjMncpKTsKQEAgLTE0NjcsMTMgKzE0NzEsMTMgQEAKIAkJc3JjMiA9IFRNUF9aRVJPOwogCiAjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1BQQ182NCAmJiBTTEpJVF9DT05GSUdfUFBDXzY0KQotCWlmIChvcCAmIFNMSklUX0lOVF9PUCkgeworCWlmIChvcCAmIFNMSklUX0kzMl9PUCkgewogCQkvKiBNb3N0IG9wZXJhdGlvbnMgZXhwZWN0IHNpZ24gZXh0ZW5kZWQgYXJndW1lbnRzLiAqLwogCQlmbGFncyB8PSBJTlRfREFUQSB8IFNJR05FRF9EQVRBOwogCQlpZiAoc3JjMSAmIFNMSklUX0lNTSkKLQkJCXNyYzF3ID0gKHNsaml0X3NpKShzcmMxdyk7CisJCQlzcmMxdyA9IChzbGppdF9zMzIpKHNyYzF3KTsKIAkJaWYgKHNyYzIgJiBTTEpJVF9JTU0pCi0JCQlzcmMydyA9IChzbGppdF9zaSkoc3JjMncpOworCQkJc3JjMncgPSAoc2xqaXRfczMyKShzcmMydyk7CiAJCWlmIChHRVRfRkxBR1Mob3ApKQogCQkJZmxhZ3MgfD0gQUxUX1NJR05fRVhUOwogCX0KQEAgLTE1NDksNyArMTU1Myw3IEBACiAJCX0KIAkJaWYgKGRzdCA9PSBTTEpJVF9VTlVTRUQgJiYgKG9wICYgKFNMSklUX1NFVF9FIHwgU0xKSVRfU0VUX1UgfCBTTEpJVF9TRVRfUykpICYmICEob3AgJiAoU0xKSVRfU0VUX08gfCBTTEpJVF9TRVRfQykpKSB7CiAJCQlpZiAoIShvcCAmIFNMSklUX1NFVF9VKSkgewotCQkJCS8qIFdlIGtub3cgQUxUX1NJR05fRVhUIGlzIHNldCBpZiBpdCBpcyBhbiBTTEpJVF9JTlRfT1Agb24gNjQgYml0IHN5c3RlbXMuICovCisJCQkJLyogV2Uga25vdyBBTFRfU0lHTl9FWFQgaXMgc2V0IGlmIGl0IGlzIGFuIFNMSklUX0kzMl9PUCBvbiA2NCBiaXQgc3lzdGVtcy4gKi8KIAkJCQlpZiAoVEVTVF9TTF9JTU0oc3JjMiwgc3JjMncpKSB7CiAJCQkJCWNvbXBpbGVyLT5pbW0gPSBzcmMydyAmIDB4ZmZmZjsKIAkJCQkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX1NVQiwgZmxhZ3MgfCBBTFRfRk9STTIsIGRzdCwgZHN0dywgc3JjMSwgc3JjMXcsIFRNUF9SRUcyLCAwKTsKQEAgLTE1NjAsNyArMTU2NCw3IEBACiAJCQkJfQogCQkJfQogCQkJaWYgKCEob3AgJiAoU0xKSVRfU0VUX0UgfCBTTEpJVF9TRVRfUykpKSB7Ci0JCQkJLyogV2Uga25vdyBBTFRfU0lHTl9FWFQgaXMgc2V0IGlmIGl0IGlzIGFuIFNMSklUX0lOVF9PUCBvbiA2NCBiaXQgc3lzdGVtcy4gKi8KKwkJCQkvKiBXZSBrbm93IEFMVF9TSUdOX0VYVCBpcyBzZXQgaWYgaXQgaXMgYW4gU0xKSVRfSTMyX09QIG9uIDY0IGJpdCBzeXN0ZW1zLiAqLwogCQkJCWlmIChURVNUX1VMX0lNTShzcmMyLCBzcmMydykpIHsKIAkJCQkJY29tcGlsZXItPmltbSA9IHNyYzJ3ICYgMHhmZmZmOwogCQkJCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfU1VCLCBmbGFncyB8IEFMVF9GT1JNMywgZHN0LCBkc3R3LCBzcmMxLCBzcmMxdywgVE1QX1JFRzIsIDApOwpAQCAtMTU3OSw3ICsxNTgzLDcgQEAKIAkJCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfQURELCBmbGFncyB8IEFMVF9GT1JNMywgZHN0LCBkc3R3LCBzcmMxLCBzcmMxdywgVE1QX1JFRzIsIDApOwogCQkJfQogCQl9Ci0JCS8qIFdlIGtub3cgQUxUX1NJR05fRVhUIGlzIHNldCBpZiBpdCBpcyBhbiBTTEpJVF9JTlRfT1Agb24gNjQgYml0IHN5c3RlbXMuICovCisJCS8qIFdlIGtub3cgQUxUX1NJR05fRVhUIGlzIHNldCBpZiBpdCBpcyBhbiBTTEpJVF9JMzJfT1Agb24gNjQgYml0IHN5c3RlbXMuICovCiAJCXJldHVybiBlbWl0X29wKGNvbXBpbGVyLCBTTEpJVF9TVUIsIGZsYWdzIHwgKCEob3AgJiBTTEpJVF9TRVRfVSkgPyAwIDogQUxUX0ZPUk02KSwgZHN0LCBkc3R3LCBzcmMxLCBzcmMxdywgc3JjMiwgc3JjMncpOwogCiAJY2FzZSBTTEpJVF9TVUJDOgpAQCAtMTU4Nyw3ICsxNTkxLDcgQEAKIAogCWNhc2UgU0xKSVRfTVVMOgogI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19QUENfNjQgJiYgU0xKSVRfQ09ORklHX1BQQ182NCkKLQkJaWYgKG9wICYgU0xKSVRfSU5UX09QKQorCQlpZiAob3AgJiBTTEpJVF9JMzJfT1ApCiAJCQlmbGFncyB8PSBBTFRfRk9STTI7CiAjZW5kaWYKIAkJaWYgKCFHRVRfRkxBR1Mob3ApKSB7CkBAIC0xNjQzLDcgKzE2NDcsNyBAQAogCWNhc2UgU0xKSVRfU0hMOgogCWNhc2UgU0xKSVRfTFNIUjoKICNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfUFBDXzY0ICYmIFNMSklUX0NPTkZJR19QUENfNjQpCi0JCWlmIChvcCAmIFNMSklUX0lOVF9PUCkKKwkJaWYgKG9wICYgU0xKSVRfSTMyX09QKQogCQkJZmxhZ3MgfD0gQUxUX0ZPUk0yOwogI2VuZGlmCiAJCWlmIChzcmMyICYgU0xKSVRfSU1NKSB7CkBAIC0xNjU2LDIwICsxNjYwLDIwIEBACiAJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CiB9CiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9nZXRfcmVnaXN0ZXJfaW5kZXgoc2xqaXRfc2kgcmVnKQorU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3MzMiBzbGppdF9nZXRfcmVnaXN0ZXJfaW5kZXgoc2xqaXRfczMyIHJlZykKIHsKIAlDSEVDS19SRUdfSU5ERVgoY2hlY2tfc2xqaXRfZ2V0X3JlZ2lzdGVyX2luZGV4KHJlZykpOwogCXJldHVybiByZWdfbWFwW3JlZ107CiB9CiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9nZXRfZmxvYXRfcmVnaXN0ZXJfaW5kZXgoc2xqaXRfc2kgcmVnKQorU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3MzMiBzbGppdF9nZXRfZmxvYXRfcmVnaXN0ZXJfaW5kZXgoc2xqaXRfczMyIHJlZykKIHsKIAlDSEVDS19SRUdfSU5ERVgoY2hlY2tfc2xqaXRfZ2V0X2Zsb2F0X3JlZ2lzdGVyX2luZGV4KHJlZykpOwogCXJldHVybiByZWc7CiB9CiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X29wX2N1c3RvbShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLAotCXZvaWQgKmluc3RydWN0aW9uLCBzbGppdF9zaSBzaXplKQorU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3MzMiBzbGppdF9lbWl0X29wX2N1c3RvbShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLAorCXZvaWQgKmluc3RydWN0aW9uLCBzbGppdF9zMzIgc2l6ZSkKIHsKIAlDSEVDS19FUlJPUigpOwogCUNIRUNLKGNoZWNrX3Nsaml0X2VtaXRfb3BfY3VzdG9tKGNvbXBpbGVyLCBpbnN0cnVjdGlvbiwgc2l6ZSkpOwpAQCAtMTY4MSw3ICsxNjg1LDcgQEAKIC8qICBGbG9hdGluZyBwb2ludCBvcGVyYXRvcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9pc19mcHVfYXZhaWxhYmxlKHZvaWQpCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfczMyIHNsaml0X2lzX2ZwdV9hdmFpbGFibGUodm9pZCkKIHsKICNpZmRlZiBTTEpJVF9JU19GUFVfQVZBSUxBQkxFCiAJcmV0dXJuIFNMSklUX0lTX0ZQVV9BVkFJTEFCTEU7CkBAIC0xNjkxLDggKzE2OTUsOCBAQAogI2VuZGlmCiB9CiAKLSNkZWZpbmUgRkxPQVRfREFUQShvcCkgKERPVUJMRV9EQVRBIHwgKChvcCAmIFNMSklUX1NJTkdMRV9PUCkgPj4gNikpCi0jZGVmaW5lIFNFTEVDVF9GT1Aob3AsIHNpbmdsZSwgZG91YmxlKSAoKG9wICYgU0xKSVRfU0lOR0xFX09QKSA/IHNpbmdsZSA6IGRvdWJsZSkKKyNkZWZpbmUgRkxPQVRfREFUQShvcCkgKERPVUJMRV9EQVRBIHwgKChvcCAmIFNMSklUX0YzMl9PUCkgPj4gNikpCisjZGVmaW5lIFNFTEVDVF9GT1Aob3AsIHNpbmdsZSwgZG91YmxlKSAoKG9wICYgU0xKSVRfRjMyX09QKSA/IHNpbmdsZSA6IGRvdWJsZSkKIAogI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19QUENfNjQgJiYgU0xKSVRfQ09ORklHX1BQQ182NCkKICNkZWZpbmUgRkxPQVRfVE1QX01FTV9PRkZTRVQgKDYgKiBzaXplb2Yoc2xqaXRfc3cpKQpAQCAtMTcwOSw5ICsxNzEzLDkgQEAKIAogI2VuZGlmIC8qIFNMSklUX0NPTkZJR19QUENfNjQgKi8KIAotc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9zaSBzbGppdF9lbWl0X2ZvcDFfY29udndfZnJvbWQoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsCi0Jc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3LAotCXNsaml0X3NpIHNyYywgc2xqaXRfc3cgc3JjdykKK3N0YXRpYyBTTEpJVF9JTkxJTkUgc2xqaXRfczMyIHNsaml0X2VtaXRfZm9wMV9jb252X3N3X2Zyb21fZjY0KHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiBvcCwKKwlzbGppdF9zMzIgZHN0LCBzbGppdF9zdyBkc3R3LAorCXNsaml0X3MzMiBzcmMsIHNsaml0X3N3IHNyY3cpCiB7CiAJaWYgKHNyYyAmIFNMSklUX01FTSkgewogCQkvKiBXZSBjYW4gaWdub3JlIHRoZSB0ZW1wb3JhcnkgZGF0YSBzdG9yZSBvbiB0aGUgc3RhY2sgZnJvbSBjYWNoaW5nIHBvaW50IG9mIHZpZXcuICovCkBAIC0xNzIxLDEyICsxNzI1LDEyIEBACiAKICNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfUFBDXzY0ICYmIFNMSklUX0NPTkZJR19QUENfNjQpCiAJb3AgPSBHRVRfT1BDT0RFKG9wKTsKLQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgKG9wID09IFNMSklUX0NPTlZJX0ZST01EID8gRkNUSVdaIDogRkNUSURaKSB8IEZEKFRNUF9GUkVHMSkgfCBGQihzcmMpKSk7CisJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIChvcCA9PSBTTEpJVF9DT05WX1MzMl9GUk9NX0Y2NCA/IEZDVElXWiA6IEZDVElEWikgfCBGRChUTVBfRlJFRzEpIHwgRkIoc3JjKSkpOwogCiAJaWYgKGRzdCA9PSBTTEpJVF9VTlVTRUQpCiAJCXJldHVybiBTTEpJVF9TVUNDRVNTOwogCi0JaWYgKG9wID09IFNMSklUX0NPTlZXX0ZST01EKSB7CisJaWYgKG9wID09IFNMSklUX0NPTlZfU1dfRlJPTV9GNjQpIHsKIAkJaWYgKEZBU1RfSVNfUkVHKGRzdCkpIHsKIAkJCUZBSUxfSUYoZW1pdF9vcF9tZW0yKGNvbXBpbGVyLCBET1VCTEVfREFUQSwgVE1QX0ZSRUcxLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgRkxPQVRfVE1QX01FTV9PRkZTRVQsIDAsIDApKTsKIAkJCXJldHVybiBlbWl0X29wX21lbTIoY29tcGlsZXIsIFdPUkRfREFUQSB8IExPQURfREFUQSwgZHN0LCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgRkxPQVRfVE1QX01FTV9PRkZTRVQsIDAsIDApOwpAQCAtMTc3NywyMSArMTc4MSwyMSBAQAogCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIFNURklXWCB8IEZTKFRNUF9GUkVHMSkgfCBBKGRzdCAmIFJFR19NQVNLKSB8IEIoZHN0dykpOwogfQogCi1zdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X3NpIHNsaml0X2VtaXRfZm9wMV9jb252ZF9mcm9tdyhzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwKLQlzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsCi0Jc2xqaXRfc2kgc3JjLCBzbGppdF9zdyBzcmN3KQorc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9zMzIgc2xqaXRfZW1pdF9mb3AxX2NvbnZfZjY0X2Zyb21fc3coc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIG9wLAorCXNsaml0X3MzMiBkc3QsIHNsaml0X3N3IGRzdHcsCisJc2xqaXRfczMyIHNyYywgc2xqaXRfc3cgc3JjdykKIHsKICNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfUFBDXzY0ICYmIFNMSklUX0NPTkZJR19QUENfNjQpCiAKLQlzbGppdF9zaSBkc3RfciA9IEZBU1RfSVNfUkVHKGRzdCkgPyBkc3QgOiBUTVBfRlJFRzE7CisJc2xqaXRfczMyIGRzdF9yID0gRkFTVF9JU19SRUcoZHN0KSA/IGRzdCA6IFRNUF9GUkVHMTsKIAogCWlmIChzcmMgJiBTTEpJVF9JTU0pIHsKLQkJaWYgKEdFVF9PUENPREUob3ApID09IFNMSklUX0NPTlZEX0ZST01JKQotCQkJc3JjdyA9IChzbGppdF9zaSlzcmN3OworCQlpZiAoR0VUX09QQ09ERShvcCkgPT0gU0xKSVRfQ09OVl9GNjRfRlJPTV9TMzIpCisJCQlzcmN3ID0gKHNsaml0X3MzMilzcmN3OwogCQlGQUlMX0lGKGxvYWRfaW1tZWRpYXRlKGNvbXBpbGVyLCBUTVBfUkVHMSwgc3JjdykpOwogCQlzcmMgPSBUTVBfUkVHMTsKIAl9Ci0JZWxzZSBpZiAoR0VUX09QQ09ERShvcCkgPT0gU0xKSVRfQ09OVkRfRlJPTUkpIHsKKwllbHNlIGlmIChHRVRfT1BDT0RFKG9wKSA9PSBTTEpJVF9DT05WX0Y2NF9GUk9NX1MzMikgewogCQlpZiAoRkFTVF9JU19SRUcoc3JjKSkKIAkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBFWFRTVyB8IFMoc3JjKSB8IEEoVE1QX1JFRzEpKSk7CiAJCWVsc2UKQEAgLTE4MTAsMTQgKzE4MTQsMTQgQEAKIAogCWlmIChkc3QgJiBTTEpJVF9NRU0pCiAJCXJldHVybiBlbWl0X29wX21lbTIoY29tcGlsZXIsIEZMT0FUX0RBVEEob3ApLCBUTVBfRlJFRzEsIGRzdCwgZHN0dywgMCwgMCk7Ci0JaWYgKG9wICYgU0xKSVRfU0lOR0xFX09QKQorCWlmIChvcCAmIFNMSklUX0YzMl9PUCkKIAkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgRlJTUCB8IEZEKGRzdF9yKSB8IEZCKGRzdF9yKSk7CiAJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CiAKICNlbHNlCiAKLQlzbGppdF9zaSBkc3RfciA9IEZBU1RfSVNfUkVHKGRzdCkgPyBkc3QgOiBUTVBfRlJFRzE7Ci0Jc2xqaXRfc2kgaW52ZXJ0X3NpZ24gPSAxOworCXNsaml0X3MzMiBkc3RfciA9IEZBU1RfSVNfUkVHKGRzdCkgPyBkc3QgOiBUTVBfRlJFRzE7CisJc2xqaXRfczMyIGludmVydF9zaWduID0gMTsKIAogCWlmIChzcmMgJiBTTEpJVF9JTU0pIHsKIAkJRkFJTF9JRihsb2FkX2ltbWVkaWF0ZShjb21waWxlciwgVE1QX1JFRzEsIHNyY3cgXiAweDgwMDAwMDAwKSk7CkBAIC0xODQ4LDE2ICsxODUyLDE2IEBACiAKIAlpZiAoZHN0ICYgU0xKSVRfTUVNKQogCQlyZXR1cm4gZW1pdF9vcF9tZW0yKGNvbXBpbGVyLCBGTE9BVF9EQVRBKG9wKSwgVE1QX0ZSRUcxLCBkc3QsIGRzdHcsIDAsIDApOwotCWlmIChvcCAmIFNMSklUX1NJTkdMRV9PUCkKKwlpZiAob3AgJiBTTEpJVF9GMzJfT1ApCiAJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIEZSU1AgfCBGRChkc3RfcikgfCBGQihkc3RfcikpOwogCXJldHVybiBTTEpJVF9TVUNDRVNTOwogCiAjZW5kaWYKIH0KIAotc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9zaSBzbGppdF9lbWl0X2ZvcDFfY21wKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIG9wLAotCXNsaml0X3NpIHNyYzEsIHNsaml0X3N3IHNyYzF3LAotCXNsaml0X3NpIHNyYzIsIHNsaml0X3N3IHNyYzJ3KQorc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9zMzIgc2xqaXRfZW1pdF9mb3AxX2NtcChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgb3AsCisJc2xqaXRfczMyIHNyYzEsIHNsaml0X3N3IHNyYzF3LAorCXNsaml0X3MzMiBzcmMyLCBzbGppdF9zdyBzcmMydykKIHsKIAlpZiAoc3JjMSAmIFNMSklUX01FTSkgewogCQlGQUlMX0lGKGVtaXRfb3BfbWVtMihjb21waWxlciwgRkxPQVRfREFUQShvcCkgfCBMT0FEX0RBVEEsIFRNUF9GUkVHMSwgc3JjMSwgc3JjMXcsIHNyYzIsIHNyYzJ3KSk7CkBAIC0xODcyLDIxICsxODc2LDIxIEBACiAJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgRkNNUFUgfCBDUkQoNCkgfCBGQShzcmMxKSB8IEZCKHNyYzIpKTsKIH0KIAotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfZm9wMShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwKLQlzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsCi0Jc2xqaXRfc2kgc3JjLCBzbGppdF9zdyBzcmN3KQorU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3MzMiBzbGppdF9lbWl0X2ZvcDEoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIG9wLAorCXNsaml0X3MzMiBkc3QsIHNsaml0X3N3IGRzdHcsCisJc2xqaXRfczMyIHNyYywgc2xqaXRfc3cgc3JjdykKIHsKLQlzbGppdF9zaSBkc3RfcjsKKwlzbGppdF9zMzIgZHN0X3I7CiAKIAlDSEVDS19FUlJPUigpOwogCWNvbXBpbGVyLT5jYWNoZV9hcmcgPSAwOwogCWNvbXBpbGVyLT5jYWNoZV9hcmd3ID0gMDsKIAotCVNMSklUX0NPTVBJTEVfQVNTRVJUKChTTEpJVF9TSU5HTEVfT1AgPT0gMHgxMDApICYmICEoRE9VQkxFX0RBVEEgJiAweDQpLCBmbG9hdF90cmFuc2Zlcl9iaXRfZXJyb3IpOworCVNMSklUX0NPTVBJTEVfQVNTRVJUKChTTEpJVF9GMzJfT1AgPT0gMHgxMDApICYmICEoRE9VQkxFX0RBVEEgJiAweDQpLCBmbG9hdF90cmFuc2Zlcl9iaXRfZXJyb3IpOwogCVNFTEVDVF9GT1AxX09QRVJBVElPTl9XSVRIX0NIRUNLUyhjb21waWxlciwgb3AsIGRzdCwgZHN0dywgc3JjLCBzcmN3KTsKIAotCWlmIChHRVRfT1BDT0RFKG9wKSA9PSBTTEpJVF9DT05WRF9GUk9NUykKLQkJb3AgXj0gU0xKSVRfU0lOR0xFX09QOworCWlmIChHRVRfT1BDT0RFKG9wKSA9PSBTTEpJVF9DT05WX0Y2NF9GUk9NX0YzMikKKwkJb3AgXj0gU0xKSVRfRjMyX09QOwogCiAJZHN0X3IgPSBGQVNUX0lTX1JFRyhkc3QpID8gZHN0IDogVE1QX0ZSRUcxOwogCkBAIC0xODk2LDE0ICsxOTAwLDE0IEBACiAJfQogCiAJc3dpdGNoIChHRVRfT1BDT0RFKG9wKSkgewotCWNhc2UgU0xKSVRfQ09OVkRfRlJPTVM6Ci0JCW9wIF49IFNMSklUX1NJTkdMRV9PUDsKLQkJaWYgKG9wICYgU0xKSVRfU0lOR0xFX09QKSB7CisJY2FzZSBTTEpJVF9DT05WX0Y2NF9GUk9NX0YzMjoKKwkJb3AgXj0gU0xKSVRfRjMyX09QOworCQlpZiAob3AgJiBTTEpJVF9GMzJfT1ApIHsKIAkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBGUlNQIHwgRkQoZHN0X3IpIHwgRkIoc3JjKSkpOwogCQkJYnJlYWs7CiAJCX0KIAkJLyogRmFsbCB0aHJvdWdoLiAqLwotCWNhc2UgU0xKSVRfRE1PVjoKKwljYXNlIFNMSklUX01PVl9GNjQ6CiAJCWlmIChzcmMgIT0gZHN0X3IpIHsKIAkJCWlmIChkc3RfciAhPSBUTVBfRlJFRzEpCiAJCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIEZNUiB8IEZEKGRzdF9yKSB8IEZCKHNyYykpKTsKQEAgLTE5MTEsMTAgKzE5MTUsMTAgQEAKIAkJCQlkc3RfciA9IHNyYzsKIAkJfQogCQlicmVhazsKLQljYXNlIFNMSklUX0RORUc6CisJY2FzZSBTTEpJVF9ORUdfRjY0OgogCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgRk5FRyB8IEZEKGRzdF9yKSB8IEZCKHNyYykpKTsKIAkJYnJlYWs7Ci0JY2FzZSBTTEpJVF9EQUJTOgorCWNhc2UgU0xKSVRfQUJTX0Y2NDoKIAkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIEZBQlMgfCBGRChkc3RfcikgfCBGQihzcmMpKSk7CiAJCWJyZWFrOwogCX0KQEAgLTE5MjQsMTIgKzE5MjgsMTIgQEAKIAlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKIH0KIAotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfZm9wMihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwKLQlzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsCi0Jc2xqaXRfc2kgc3JjMSwgc2xqaXRfc3cgc3JjMXcsCi0Jc2xqaXRfc2kgc3JjMiwgc2xqaXRfc3cgc3JjMncpCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfczMyIHNsaml0X2VtaXRfZm9wMihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgb3AsCisJc2xqaXRfczMyIGRzdCwgc2xqaXRfc3cgZHN0dywKKwlzbGppdF9zMzIgc3JjMSwgc2xqaXRfc3cgc3JjMXcsCisJc2xqaXRfczMyIHNyYzIsIHNsaml0X3N3IHNyYzJ3KQogewotCXNsaml0X3NpIGRzdF9yLCBmbGFncyA9IDA7CisJc2xqaXRfczMyIGRzdF9yLCBmbGFncyA9IDA7CiAKIAlDSEVDS19FUlJPUigpOwogCUNIRUNLKGNoZWNrX3Nsaml0X2VtaXRfZm9wMihjb21waWxlciwgb3AsIGRzdCwgZHN0dywgc3JjMSwgc3JjMXcsIHNyYzIsIHNyYzJ3KSk7CkBAIC0xOTc5LDE5ICsxOTgzLDE5IEBACiAJCXNyYzIgPSBUTVBfRlJFRzI7CiAKIAlzd2l0Y2ggKEdFVF9PUENPREUob3ApKSB7Ci0JY2FzZSBTTEpJVF9EQUREOgorCWNhc2UgU0xKSVRfQUREX0Y2NDoKIAkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIFNFTEVDVF9GT1Aob3AsIEZBRERTLCBGQUREKSB8IEZEKGRzdF9yKSB8IEZBKHNyYzEpIHwgRkIoc3JjMikpKTsKIAkJYnJlYWs7CiAKLQljYXNlIFNMSklUX0RTVUI6CisJY2FzZSBTTEpJVF9TVUJfRjY0OgogCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgU0VMRUNUX0ZPUChvcCwgRlNVQlMsIEZTVUIpIHwgRkQoZHN0X3IpIHwgRkEoc3JjMSkgfCBGQihzcmMyKSkpOwogCQlicmVhazsKIAotCWNhc2UgU0xKSVRfRE1VTDoKKwljYXNlIFNMSklUX01VTF9GNjQ6CiAJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBTRUxFQ1RfRk9QKG9wLCBGTVVMUywgRk1VTCkgfCBGRChkc3RfcikgfCBGQShzcmMxKSB8IEZDKHNyYzIpIC8qIEZNVUwgdXNlIEZDIGFzIHNyYzIgKi8pKTsKIAkJYnJlYWs7CiAKLQljYXNlIFNMSklUX0RESVY6CisJY2FzZSBTTEpJVF9ESVZfRjY0OgogCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgU0VMRUNUX0ZPUChvcCwgRkRJVlMsIEZESVYpIHwgRkQoZHN0X3IpIHwgRkEoc3JjMSkgfCBGQihzcmMyKSkpOwogCQlicmVhazsKIAl9CkBAIC0yMDA5LDcgKzIwMTMsNyBAQAogLyogIE90aGVyIGluc3RydWN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfZmFzdF9lbnRlcihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcpCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfczMyIHNsaml0X2VtaXRfZmFzdF9lbnRlcihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgZHN0LCBzbGppdF9zdyBkc3R3KQogewogCUNIRUNLX0VSUk9SKCk7CiAJQ0hFQ0soY2hlY2tfc2xqaXRfZW1pdF9mYXN0X2VudGVyKGNvbXBpbGVyLCBkc3QsIGRzdHcpKTsKQEAgLTIwMjcsNyArMjAzMSw3IEBACiAJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01PViwgV09SRF9EQVRBLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBUTVBfUkVHMiwgMCk7CiB9CiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X2Zhc3RfcmV0dXJuKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIHNyYywgc2xqaXRfc3cgc3JjdykKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zMzIgc2xqaXRfZW1pdF9mYXN0X3JldHVybihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgc3JjLCBzbGppdF9zdyBzcmN3KQogewogCUNIRUNLX0VSUk9SKCk7CiAJQ0hFQ0soY2hlY2tfc2xqaXRfZW1pdF9mYXN0X3JldHVybihjb21waWxlciwgc3JjLCBzcmN3KSk7CkBAIC0yMDY1LDcgKzIwNjksNyBAQAogCXJldHVybiBsYWJlbDsKIH0KIAotc3RhdGljIHNsaml0X2lucyBnZXRfYm9fYmlfZmxhZ3Moc2xqaXRfc2kgdHlwZSkKK3N0YXRpYyBzbGppdF9pbnMgZ2V0X2JvX2JpX2ZsYWdzKHNsaml0X3MzMiB0eXBlKQogewogCXN3aXRjaCAodHlwZSkgewogCWNhc2UgU0xKSVRfRVFVQUw6CkBAIC0yMDc1LDE5ICsyMDc5LDE5IEBACiAJCXJldHVybiAoNCA8PCAyMSkgfCAoMiA8PCAxNik7CiAKIAljYXNlIFNMSklUX0xFU1M6Ci0JY2FzZSBTTEpJVF9EX0xFU1M6CisJY2FzZSBTTEpJVF9MRVNTX0Y2NDoKIAkJcmV0dXJuICgxMiA8PCAyMSkgfCAoKDQgKyAwKSA8PCAxNik7CiAKIAljYXNlIFNMSklUX0dSRUFURVJfRVFVQUw6Ci0JY2FzZSBTTEpJVF9EX0dSRUFURVJfRVFVQUw6CisJY2FzZSBTTEpJVF9HUkVBVEVSX0VRVUFMX0Y2NDoKIAkJcmV0dXJuICg0IDw8IDIxKSB8ICgoNCArIDApIDw8IDE2KTsKIAogCWNhc2UgU0xKSVRfR1JFQVRFUjoKLQljYXNlIFNMSklUX0RfR1JFQVRFUjoKKwljYXNlIFNMSklUX0dSRUFURVJfRjY0OgogCQlyZXR1cm4gKDEyIDw8IDIxKSB8ICgoNCArIDEpIDw8IDE2KTsKIAogCWNhc2UgU0xKSVRfTEVTU19FUVVBTDoKLQljYXNlIFNMSklUX0RfTEVTU19FUVVBTDoKKwljYXNlIFNMSklUX0xFU1NfRVFVQUxfRjY0OgogCQlyZXR1cm4gKDQgPDwgMjEpIHwgKCg0ICsgMSkgPDwgMTYpOwogCiAJY2FzZSBTTEpJVF9TSUdfTEVTUzoKQEAgLTIxMTAsMTYgKzIxMTQsMTYgQEAKIAljYXNlIFNMSklUX01VTF9OT1RfT1ZFUkZMT1c6CiAJCXJldHVybiAoNCA8PCAyMSkgfCAoMyA8PCAxNik7CiAKLQljYXNlIFNMSklUX0RfRVFVQUw6CisJY2FzZSBTTEpJVF9FUVVBTF9GNjQ6CiAJCXJldHVybiAoMTIgPDwgMjEpIHwgKCg0ICsgMikgPDwgMTYpOwogCi0JY2FzZSBTTEpJVF9EX05PVF9FUVVBTDoKKwljYXNlIFNMSklUX05PVF9FUVVBTF9GNjQ6CiAJCXJldHVybiAoNCA8PCAyMSkgfCAoKDQgKyAyKSA8PCAxNik7CiAKLQljYXNlIFNMSklUX0RfVU5PUkRFUkVEOgorCWNhc2UgU0xKSVRfVU5PUkRFUkVEX0Y2NDoKIAkJcmV0dXJuICgxMiA8PCAyMSkgfCAoKDQgKyAzKSA8PCAxNik7CiAKLQljYXNlIFNMSklUX0RfT1JERVJFRDoKKwljYXNlIFNMSklUX09SREVSRURfRjY0OgogCQlyZXR1cm4gKDQgPDwgMjEpIHwgKCg0ICsgMykgPDwgMTYpOwogCiAJZGVmYXVsdDoKQEAgLTIxMjgsNyArMjEzMiw3IEBACiAJfQogfQogCi1TTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc3RydWN0IHNsaml0X2p1bXAqIHNsaml0X2VtaXRfanVtcChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSB0eXBlKQorU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHN0cnVjdCBzbGppdF9qdW1wKiBzbGppdF9lbWl0X2p1bXAoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIHR5cGUpCiB7CiAJc3RydWN0IHNsaml0X2p1bXAgKmp1bXA7CiAJc2xqaXRfaW5zIGJvX2JpX2ZsYWdzOwpAQCAtMjE2MCwxMCArMjE2NCwxMCBAQAogCXJldHVybiBqdW1wOwogfQogCi1TTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9panVtcChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSB0eXBlLCBzbGppdF9zaSBzcmMsIHNsaml0X3N3IHNyY3cpCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfczMyIHNsaml0X2VtaXRfaWp1bXAoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIHR5cGUsIHNsaml0X3MzMiBzcmMsIHNsaml0X3N3IHNyY3cpCiB7CiAJc3RydWN0IHNsaml0X2p1bXAgKmp1bXAgPSBOVUxMOwotCXNsaml0X3NpIHNyY19yOworCXNsaml0X3MzMiBzcmNfcjsKIAogCUNIRUNLX0VSUk9SKCk7CiAJQ0hFQ0soY2hlY2tfc2xqaXRfZW1pdF9panVtcChjb21waWxlciwgdHlwZSwgc3JjLCBzcmN3KSk7CkBAIC0yMjExLDEzICsyMjE1LDEzIEBACiAjZGVmaW5lIElOVkVSVF9CSVQoZHN0KSBcCiAJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIFhPUkkgfCBTKGRzdCkgfCBBKGRzdCkgfCAweDEpKTsKIAotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfb3BfZmxhZ3Moc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsCi0Jc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3LAotCXNsaml0X3NpIHNyYywgc2xqaXRfc3cgc3JjdywKLQlzbGppdF9zaSB0eXBlKQorU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3MzMiBzbGppdF9lbWl0X29wX2ZsYWdzKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiBvcCwKKwlzbGppdF9zMzIgZHN0LCBzbGppdF9zdyBkc3R3LAorCXNsaml0X3MzMiBzcmMsIHNsaml0X3N3IHNyY3csCisJc2xqaXRfczMyIHR5cGUpCiB7Ci0Jc2xqaXRfc2kgcmVnLCBpbnB1dF9mbGFnczsKLQlzbGppdF9zaSBmbGFncyA9IEdFVF9BTExfRkxBR1Mob3ApOworCXNsaml0X3MzMiByZWcsIGlucHV0X2ZsYWdzOworCXNsaml0X3MzMiBmbGFncyA9IEdFVF9BTExfRkxBR1Mob3ApOwogCXNsaml0X3N3IG9yaWdpbmFsX2RzdHcgPSBkc3R3OwogCiAJQ0hFQ0tfRVJST1IoKTsKQEAgLTIyMzUsNyArMjIzOSw3IEBACiAJaWYgKG9wID49IFNMSklUX0FERCAmJiAoc3JjICYgU0xKSVRfTUVNKSkgewogCQlBREpVU1RfTE9DQUxfT0ZGU0VUKHNyYywgc3Jjdyk7CiAjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1BQQ182NCAmJiBTTEpJVF9DT05GSUdfUFBDXzY0KQotCQlpbnB1dF9mbGFncyA9IChmbGFncyAmIFNMSklUX0lOVF9PUCkgPyBJTlRfREFUQSA6IFdPUkRfREFUQTsKKwkJaW5wdXRfZmxhZ3MgPSAoZmxhZ3MgJiBTTEpJVF9JMzJfT1ApID8gSU5UX0RBVEEgOiBXT1JEX0RBVEE7CiAjZWxzZQogCQlpbnB1dF9mbGFncyA9IFdPUkRfREFUQTsKICNlbmRpZgpAQCAtMjI1NSwyMyArMjI1OSwyMyBAQAogCQlicmVhazsKIAogCWNhc2UgU0xKSVRfTEVTUzoKLQljYXNlIFNMSklUX0RfTEVTUzoKKwljYXNlIFNMSklUX0xFU1NfRjY0OgogCQlHRVRfQ1JfQklUKDQgKyAwLCByZWcpOwogCQlicmVhazsKIAogCWNhc2UgU0xKSVRfR1JFQVRFUl9FUVVBTDoKLQljYXNlIFNMSklUX0RfR1JFQVRFUl9FUVVBTDoKKwljYXNlIFNMSklUX0dSRUFURVJfRVFVQUxfRjY0OgogCQlHRVRfQ1JfQklUKDQgKyAwLCByZWcpOwogCQlJTlZFUlRfQklUKHJlZyk7CiAJCWJyZWFrOwogCiAJY2FzZSBTTEpJVF9HUkVBVEVSOgotCWNhc2UgU0xKSVRfRF9HUkVBVEVSOgorCWNhc2UgU0xKSVRfR1JFQVRFUl9GNjQ6CiAJCUdFVF9DUl9CSVQoNCArIDEsIHJlZyk7CiAJCWJyZWFrOwogCiAJY2FzZSBTTEpJVF9MRVNTX0VRVUFMOgotCWNhc2UgU0xKSVRfRF9MRVNTX0VRVUFMOgorCWNhc2UgU0xKSVRfTEVTU19FUVVBTF9GNjQ6CiAJCUdFVF9DUl9CSVQoNCArIDEsIHJlZyk7CiAJCUlOVkVSVF9CSVQocmVnKTsKIAkJYnJlYWs7CkBAIC0yMzA1LDIwICsyMzA5LDIwIEBACiAJCUlOVkVSVF9CSVQocmVnKTsKIAkJYnJlYWs7CiAKLQljYXNlIFNMSklUX0RfRVFVQUw6CisJY2FzZSBTTEpJVF9FUVVBTF9GNjQ6CiAJCUdFVF9DUl9CSVQoNCArIDIsIHJlZyk7CiAJCWJyZWFrOwogCi0JY2FzZSBTTEpJVF9EX05PVF9FUVVBTDoKKwljYXNlIFNMSklUX05PVF9FUVVBTF9GNjQ6CiAJCUdFVF9DUl9CSVQoNCArIDIsIHJlZyk7CiAJCUlOVkVSVF9CSVQocmVnKTsKIAkJYnJlYWs7CiAKLQljYXNlIFNMSklUX0RfVU5PUkRFUkVEOgorCWNhc2UgU0xKSVRfVU5PUkRFUkVEX0Y2NDoKIAkJR0VUX0NSX0JJVCg0ICsgMywgcmVnKTsKIAkJYnJlYWs7CiAKLQljYXNlIFNMSklUX0RfT1JERVJFRDoKKwljYXNlIFNMSklUX09SREVSRURfRjY0OgogCQlHRVRfQ1JfQklUKDQgKyAzLCByZWcpOwogCQlJTlZFUlRfQklUKHJlZyk7CiAJCWJyZWFrOwpAQCAtMjMzMyw3ICsyMzM3LDcgQEAKIAkJaWYgKG9wID09IFNMSklUX01PVikKIAkJCWlucHV0X2ZsYWdzID0gV09SRF9EQVRBOwogCQllbHNlIHsKLQkJCW9wID0gU0xKSVRfTU9WX1VJOworCQkJb3AgPSBTTEpJVF9NT1ZfVTMyOwogCQkJaW5wdXRfZmxhZ3MgPSBJTlRfREFUQTsKIAkJfQogI2Vsc2UKQEAgLTIzNTIsMTAgKzIzNTYsMTAgQEAKIAlyZXR1cm4gc2xqaXRfZW1pdF9vcDIoY29tcGlsZXIsIG9wIHwgZmxhZ3MsIGRzdCwgb3JpZ2luYWxfZHN0dywgc3JjLCBzcmN3LCBUTVBfUkVHMiwgMCk7CiB9CiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzdHJ1Y3Qgc2xqaXRfY29uc3QqIHNsaml0X2VtaXRfY29uc3Qoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3LCBzbGppdF9zdyBpbml0X3ZhbHVlKQorU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHN0cnVjdCBzbGppdF9jb25zdCogc2xqaXRfZW1pdF9jb25zdChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgZHN0LCBzbGppdF9zdyBkc3R3LCBzbGppdF9zdyBpbml0X3ZhbHVlKQogewogCXN0cnVjdCBzbGppdF9jb25zdCAqY29uc3RfOwotCXNsaml0X3NpIHJlZzsKKwlzbGppdF9zMzIgcmVnOwogCiAJQ0hFQ0tfRVJST1JfUFRSKCk7CiAJQ0hFQ0tfUFRSKGNoZWNrX3Nsaml0X2VtaXRfY29uc3QoY29tcGlsZXIsIGRzdCwgZHN0dywgaW5pdF92YWx1ZSkpOwpkaWZmIC0tZ2l0IGEvZGlzdDIvc3JjL3Nsaml0L3Nsaml0TmF0aXZlU1BBUkNfMzIuYyBiL2Rpc3QyL3NyYy9zbGppdC9zbGppdE5hdGl2ZVNQQVJDXzMyLmMKaW5kZXggNGEyZTYyOS4uN2U1ODlhMSAxMDA2NDQKLS0tIGEvZGlzdDIvc3JjL3Nsaml0L3Nsaml0TmF0aXZlU1BBUkNfMzIuYworKysgYi9kaXN0Mi9zcmMvc2xqaXQvc2xqaXROYXRpdmVTUEFSQ18zMi5jCkBAIC0yNCw3ICsyNCw3IEBACiAgKiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotc3RhdGljIHNsaml0X3NpIGxvYWRfaW1tZWRpYXRlKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIGRzdCwgc2xqaXRfc3cgaW1tKQorc3RhdGljIHNsaml0X3MzMiBsb2FkX2ltbWVkaWF0ZShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgZHN0LCBzbGppdF9zdyBpbW0pCiB7CiAJaWYgKGltbSA8PSBTSU1NX01BWCAmJiBpbW0gPj0gU0lNTV9NSU4pCiAJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIE9SIHwgRChkc3QpIHwgUzEoMCkgfCBJTU0oaW1tKSwgRFIoZHN0KSk7CkBAIC0zNSwyNiArMzUsMjYgQEAKIAogI2RlZmluZSBBUkcyKGZsYWdzLCBzcmMyKSAoKGZsYWdzICYgU1JDMl9JTU0pID8gSU1NKHNyYzIpIDogUzIoc3JjMikpCiAKLXN0YXRpYyBTTEpJVF9JTkxJTkUgc2xqaXRfc2kgZW1pdF9zaW5nbGVfb3Aoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsIHNsaml0X3NpIGZsYWdzLAotCXNsaml0X3NpIGRzdCwgc2xqaXRfc2kgc3JjMSwgc2xqaXRfc3cgc3JjMikKK3N0YXRpYyBTTEpJVF9JTkxJTkUgc2xqaXRfczMyIGVtaXRfc2luZ2xlX29wKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiBvcCwgc2xqaXRfczMyIGZsYWdzLAorCXNsaml0X3MzMiBkc3QsIHNsaml0X3MzMiBzcmMxLCBzbGppdF9zdyBzcmMyKQogewogCVNMSklUX0NPTVBJTEVfQVNTRVJUKElDQ19JU19TRVQgPT0gU0VUX0ZMQUdTLCBpY2NfaXNfc2V0X2FuZF9zZXRfZmxhZ3NfbXVzdF9iZV90aGVfc2FtZSk7CiAKIAlzd2l0Y2ggKG9wKSB7CiAJY2FzZSBTTEpJVF9NT1Y6Ci0JY2FzZSBTTEpJVF9NT1ZfVUk6Ci0JY2FzZSBTTEpJVF9NT1ZfU0k6CisJY2FzZSBTTEpJVF9NT1ZfVTMyOgorCWNhc2UgU0xKSVRfTU9WX1MzMjoKIAljYXNlIFNMSklUX01PVl9QOgogCQlTTEpJVF9BU1NFUlQoc3JjMSA9PSBUTVBfUkVHMSAmJiAhKGZsYWdzICYgU1JDMl9JTU0pKTsKIAkJaWYgKGRzdCAhPSBzcmMyKQogCQkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgT1IgfCBEKGRzdCkgfCBTMSgwKSB8IFMyKHNyYzIpLCBEUihkc3QpKTsKIAkJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CiAKLQljYXNlIFNMSklUX01PVl9VQjoKLQljYXNlIFNMSklUX01PVl9TQjoKKwljYXNlIFNMSklUX01PVl9VODoKKwljYXNlIFNMSklUX01PVl9TODoKIAkJU0xKSVRfQVNTRVJUKHNyYzEgPT0gVE1QX1JFRzEgJiYgIShmbGFncyAmIFNSQzJfSU1NKSk7CiAJCWlmICgoZmxhZ3MgJiAoUkVHX0RFU1QgfCBSRUcyX1NPVVJDRSkpID09IChSRUdfREVTVCB8IFJFRzJfU09VUkNFKSkgewotCQkJaWYgKG9wID09IFNMSklUX01PVl9VQikKKwkJCWlmIChvcCA9PSBTTEpJVF9NT1ZfVTgpCiAJCQkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgQU5EIHwgRChkc3QpIHwgUzEoc3JjMikgfCBJTU0oMHhmZiksIERSKGRzdCkpOwogCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIFNMTCB8IEQoZHN0KSB8IFMxKHNyYzIpIHwgSU1NKDI0KSwgRFIoZHN0KSkpOwogCQkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgU1JBIHwgRChkc3QpIHwgUzEoZHN0KSB8IElNTSgyNCksIERSKGRzdCkpOwpAQCAtNjMsMTIgKzYzLDEyIEBACiAJCQlTTEpJVF9BU1NFUlRfU1RPUCgpOwogCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKIAotCWNhc2UgU0xKSVRfTU9WX1VIOgotCWNhc2UgU0xKSVRfTU9WX1NIOgorCWNhc2UgU0xKSVRfTU9WX1UxNjoKKwljYXNlIFNMSklUX01PVl9TMTY6CiAJCVNMSklUX0FTU0VSVChzcmMxID09IFRNUF9SRUcxICYmICEoZmxhZ3MgJiBTUkMyX0lNTSkpOwogCQlpZiAoKGZsYWdzICYgKFJFR19ERVNUIHwgUkVHMl9TT1VSQ0UpKSA9PSAoUkVHX0RFU1QgfCBSRUcyX1NPVVJDRSkpIHsKIAkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBTTEwgfCBEKGRzdCkgfCBTMShzcmMyKSB8IElNTSgxNiksIERSKGRzdCkpKTsKLQkJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIChvcCA9PSBTTEpJVF9NT1ZfU0ggPyBTUkEgOiBTUkwpIHwgRChkc3QpIHwgUzEoZHN0KSB8IElNTSgxNiksIERSKGRzdCkpOworCQkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgKG9wID09IFNMSklUX01PVl9TMTYgPyBTUkEgOiBTUkwpIHwgRChkc3QpIHwgUzEoZHN0KSB8IElNTSgxNiksIERSKGRzdCkpOwogCQl9CiAJCWVsc2UgaWYgKGRzdCAhPSBzcmMyKQogCQkJU0xKSVRfQVNTRVJUX1NUT1AoKTsKQEAgLTEzOSw3ICsxMzksNyBAQAogCXJldHVybiBTTEpJVF9TVUNDRVNTOwogfQogCi1zdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X3NpIGVtaXRfY29uc3Qoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBpbml0X3ZhbHVlKQorc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9zMzIgZW1pdF9jb25zdChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgZHN0LCBzbGppdF9zdyBpbml0X3ZhbHVlKQogewogCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBTRVRISSB8IEQoZHN0KSB8ICgoaW5pdF92YWx1ZSA+PiAxMCkgJiAweDNmZmZmZiksIERSKGRzdCkpKTsKIAlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBPUiB8IEQoZHN0KSB8IFMxKGRzdCkgfCBJTU1fQVJHIHwgKGluaXRfdmFsdWUgJiAweDNmZiksIERSKGRzdCkpOwpkaWZmIC0tZ2l0IGEvZGlzdDIvc3JjL3Nsaml0L3Nsaml0TmF0aXZlU1BBUkNfY29tbW9uLmMgYi9kaXN0Mi9zcmMvc2xqaXQvc2xqaXROYXRpdmVTUEFSQ19jb21tb24uYwppbmRleCAzMjdjNDI2Li5mM2EzM2ExIDEwMDY0NAotLS0gYS9kaXN0Mi9zcmMvc2xqaXQvc2xqaXROYXRpdmVTUEFSQ19jb21tb24uYworKysgYi9kaXN0Mi9zcmMvc2xqaXQvc2xqaXROYXRpdmVTUEFSQ19jb21tb24uYwpAQCAtMjQsMTQgKzI0LDE2IEBACiAgKiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIFNMSklUX0NPTlNUIGNoYXIqIHNsaml0X2dldF9wbGF0Zm9ybV9uYW1lKHZvaWQpCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgY29uc3QgY2hhciogc2xqaXRfZ2V0X3BsYXRmb3JtX25hbWUodm9pZCkKIHsKIAlyZXR1cm4gIlNQQVJDIiBTTEpJVF9DUFVJTkZPOwogfQogCiAvKiBMZW5ndGggb2YgYW4gaW5zdHJ1Y3Rpb24gd29yZAogICAgQm90aCBmb3Igc3BhcmMtMzIgYW5kIHNwYXJjLTY0ICovCi10eXBlZGVmIHNsaml0X3VpIHNsaml0X2luczsKK3R5cGVkZWYgc2xqaXRfdTMyIHNsaml0X2luczsKKworI2lmIChkZWZpbmVkIFNMSklUX0NBQ0hFX0ZMVVNIX09XTl9JTVBMICYmIFNMSklUX0NBQ0hFX0ZMVVNIX09XTl9JTVBMKQogCiBzdGF0aWMgdm9pZCBzcGFyY19jYWNoZV9mbHVzaChzbGppdF9pbnMgKmZyb20sIHNsaml0X2lucyAqdG8pCiB7CkBAIC04Miw2ICs4NCw4IEBACiAjZW5kaWYKIH0KIAorI2VuZGlmIC8qIChkZWZpbmVkIFNMSklUX0NBQ0hFX0ZMVVNIX09XTl9JTVBMICYmIFNMSklUX0NBQ0hFX0ZMVVNIX09XTl9JTVBMKSAqLworCiAvKiBUTVBfUkVHMiBpcyBub3QgdXNlZCBieSBnZXRwdXRfYXJnICovCiAjZGVmaW5lIFRNUF9SRUcxCShTTEpJVF9OVU1CRVJfT0ZfUkVHSVNURVJTICsgMikKICNkZWZpbmUgVE1QX1JFRzIJKFNMSklUX05VTUJFUl9PRl9SRUdJU1RFUlMgKyAzKQpAQCAtOTEsNyArOTUsNyBAQAogI2RlZmluZSBUTVBfRlJFRzEJKDApCiAjZGVmaW5lIFRNUF9GUkVHMgkoKFNMSklUX05VTUJFUl9PRl9GTE9BVF9SRUdJU1RFUlMgKyAxKSA8PCAxKQogCi1zdGF0aWMgU0xKSVRfQ09OU1Qgc2xqaXRfdWIgcmVnX21hcFtTTEpJVF9OVU1CRVJfT0ZfUkVHSVNURVJTICsgNl0gPSB7CitzdGF0aWMgY29uc3Qgc2xqaXRfdTggcmVnX21hcFtTTEpJVF9OVU1CRVJfT0ZfUkVHSVNURVJTICsgNl0gPSB7CiAJMCwgOCwgOSwgMTAsIDEzLCAyOSwgMjgsIDI3LCAyMywgMjIsIDIxLCAyMCwgMTksIDE4LCAxNywgMTYsIDI2LCAyNSwgMjQsIDE0LCAxLCAxMSwgMTIsIDE1CiB9OwogCkBAIC0xODEsNyArMTg1LDcgQEAKIAogLyogZGVzdF9yZWcgaXMgdGhlIGFic29sdXRlIG5hbWUgb2YgdGhlIHJlZ2lzdGVyCiAgICBVc2VmdWwgZm9yIHJlb3JkZXJpbmcgaW5zdHJ1Y3Rpb25zIGluIHRoZSBkZWxheSBzbG90LiAqLwotc3RhdGljIHNsaml0X3NpIHB1c2hfaW5zdChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9pbnMgaW5zLCBzbGppdF9zaSBkZWxheV9zbG90KQorc3RhdGljIHNsaml0X3MzMiBwdXNoX2luc3Qoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfaW5zIGlucywgc2xqaXRfczMyIGRlbGF5X3Nsb3QpCiB7CiAJc2xqaXRfaW5zICpwdHI7CiAJU0xKSVRfQVNTRVJUKChkZWxheV9zbG90ICYgRFNUX0lOU19NQVNLKSA9PSBVTk1PVkFCTEVfSU5TCkBAIC0zNDAsNyArMzQ0LDcgQEAKIAlTTEpJVF9BU1NFUlQoIWxhYmVsKTsKIAlTTEpJVF9BU1NFUlQoIWp1bXApOwogCVNMSklUX0FTU0VSVCghY29uc3RfKTsKLQlTTEpJVF9BU1NFUlQoY29kZV9wdHIgLSBjb2RlIDw9IChzbGppdF9zaSljb21waWxlci0+c2l6ZSk7CisJU0xKSVRfQVNTRVJUKGNvZGVfcHRyIC0gY29kZSA8PSAoc2xqaXRfczMyKWNvbXBpbGVyLT5zaXplKTsKIAogCWp1bXAgPSBjb21waWxlci0+anVtcHM7CiAJd2hpbGUgKGp1bXApIHsKQEAgLTQxOCw5ICs0MjIsOSBAQAogI2luY2x1ZGUgInNsaml0TmF0aXZlU1BBUkNfNjQuYyIKICNlbmRpZgogCi1TTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9lbnRlcihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLAotCXNsaml0X3NpIG9wdGlvbnMsIHNsaml0X3NpIGFyZ3MsIHNsaml0X3NpIHNjcmF0Y2hlcywgc2xqaXRfc2kgc2F2ZWRzLAotCXNsaml0X3NpIGZzY3JhdGNoZXMsIHNsaml0X3NpIGZzYXZlZHMsIHNsaml0X3NpIGxvY2FsX3NpemUpCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfczMyIHNsaml0X2VtaXRfZW50ZXIoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwKKwlzbGppdF9zMzIgb3B0aW9ucywgc2xqaXRfczMyIGFyZ3MsIHNsaml0X3MzMiBzY3JhdGNoZXMsIHNsaml0X3MzMiBzYXZlZHMsCisJc2xqaXRfczMyIGZzY3JhdGNoZXMsIHNsaml0X3MzMiBmc2F2ZWRzLCBzbGppdF9zMzIgbG9jYWxfc2l6ZSkKIHsKIAlDSEVDS19FUlJPUigpOwogCUNIRUNLKGNoZWNrX3Nsaml0X2VtaXRfZW50ZXIoY29tcGlsZXIsIG9wdGlvbnMsIGFyZ3MsIHNjcmF0Y2hlcywgc2F2ZWRzLCBmc2NyYXRjaGVzLCBmc2F2ZWRzLCBsb2NhbF9zaXplKSk7CkBAIC00NDIsOSArNDQ2LDkgQEAKIAlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKIH0KIAotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X3NldF9jb250ZXh0KHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsCi0Jc2xqaXRfc2kgb3B0aW9ucywgc2xqaXRfc2kgYXJncywgc2xqaXRfc2kgc2NyYXRjaGVzLCBzbGppdF9zaSBzYXZlZHMsCi0Jc2xqaXRfc2kgZnNjcmF0Y2hlcywgc2xqaXRfc2kgZnNhdmVkcywgc2xqaXRfc2kgbG9jYWxfc2l6ZSkKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zMzIgc2xqaXRfc2V0X2NvbnRleHQoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwKKwlzbGppdF9zMzIgb3B0aW9ucywgc2xqaXRfczMyIGFyZ3MsIHNsaml0X3MzMiBzY3JhdGNoZXMsIHNsaml0X3MzMiBzYXZlZHMsCisJc2xqaXRfczMyIGZzY3JhdGNoZXMsIHNsaml0X3MzMiBmc2F2ZWRzLCBzbGppdF9zMzIgbG9jYWxfc2l6ZSkKIHsKIAlDSEVDS19FUlJPUigpOwogCUNIRUNLKGNoZWNrX3Nsaml0X3NldF9jb250ZXh0KGNvbXBpbGVyLCBvcHRpb25zLCBhcmdzLCBzY3JhdGNoZXMsIHNhdmVkcywgZnNjcmF0Y2hlcywgZnNhdmVkcywgbG9jYWxfc2l6ZSkpOwpAQCAtNDU0LDcgKzQ1OCw3IEBACiAJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CiB9CiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X3JldHVybihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwgc2xqaXRfc2kgc3JjLCBzbGppdF9zdyBzcmN3KQorU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3MzMiBzbGppdF9lbWl0X3JldHVybihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgb3AsIHNsaml0X3MzMiBzcmMsIHNsaml0X3N3IHNyY3cpCiB7CiAJQ0hFQ0tfRVJST1IoKTsKIAlDSEVDSyhjaGVja19zbGppdF9lbWl0X3JldHVybihjb21waWxlciwgb3AsIHNyYywgc3JjdykpOwpAQCAtNDc4LDcgKzQ4Miw3IEBACiAjZGVmaW5lIEFSQ0hfMzJfNjQoYSwgYikJYgogI2VuZGlmCiAKLXN0YXRpYyBTTEpJVF9DT05TVCBzbGppdF9pbnMgZGF0YV90cmFuc2Zlcl9pbnN0c1sxNiArIDRdID0geworc3RhdGljIGNvbnN0IHNsaml0X2lucyBkYXRhX3RyYW5zZmVyX2luc3RzWzE2ICsgNF0gPSB7CiAvKiB1IHcgcyAqLyBBUkNIXzMyXzY0KE9QQzEoMykgfCBPUEMzKDB4MDQpIC8qIHN0dyAqLywgT1BDMSgzKSB8IE9QQzMoMHgwZSkgLyogc3R4ICovKSwKIC8qIHUgdyBsICovIEFSQ0hfMzJfNjQoT1BDMSgzKSB8IE9QQzMoMHgwMCkgLyogbGR1dyAqLywgT1BDMSgzKSB8IE9QQzMoMHgwYikgLyogbGR4ICovKSwKIC8qIHUgYiBzICovIE9QQzEoMykgfCBPUEMzKDB4MDUpIC8qIHN0YiAqLywKQEAgLTUwNiw3ICs1MTAsNyBAQAogI3VuZGVmIEFSQ0hfMzJfNjQKIAogLyogQ2FuIHBlcmZvcm0gYW4gb3BlcmF0aW9uIHVzaW5nIGF0IG1vc3QgMSBpbnN0cnVjdGlvbi4gKi8KLXN0YXRpYyBzbGppdF9zaSBnZXRwdXRfYXJnX2Zhc3Qoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgZmxhZ3MsIHNsaml0X3NpIHJlZywgc2xqaXRfc2kgYXJnLCBzbGppdF9zdyBhcmd3KQorc3RhdGljIHNsaml0X3MzMiBnZXRwdXRfYXJnX2Zhc3Qoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIGZsYWdzLCBzbGppdF9zMzIgcmVnLCBzbGppdF9zMzIgYXJnLCBzbGppdF9zdyBhcmd3KQogewogCVNMSklUX0FTU0VSVChhcmcgJiBTTEpJVF9NRU0pOwogCkBAIC01MjksNyArNTMzLDcgQEAKIC8qIFNlZSBnZXRwdXRfYXJnIGJlbG93LgogICAgTm90ZTogY2FuX2NhY2hlIGlzIGNhbGxlZCBvbmx5IGZvciBiaW5hcnkgb3BlcmF0b3JzLiBUaG9zZQogICAgb3BlcmF0b3JzIGFsd2F5cyB1c2VzIHdvcmQgYXJndW1lbnRzIHdpdGhvdXQgd3JpdGUgYmFjay4gKi8KLXN0YXRpYyBzbGppdF9zaSBjYW5fY2FjaGUoc2xqaXRfc2kgYXJnLCBzbGppdF9zdyBhcmd3LCBzbGppdF9zaSBuZXh0X2FyZywgc2xqaXRfc3cgbmV4dF9hcmd3KQorc3RhdGljIHNsaml0X3MzMiBjYW5fY2FjaGUoc2xqaXRfczMyIGFyZywgc2xqaXRfc3cgYXJndywgc2xqaXRfczMyIG5leHRfYXJnLCBzbGppdF9zdyBuZXh0X2FyZ3cpCiB7CiAJU0xKSVRfQVNTRVJUKChhcmcgJiBTTEpJVF9NRU0pICYmIChuZXh0X2FyZyAmIFNMSklUX01FTSkpOwogCkBAIC01NDksOSArNTUzLDkgQEAKIH0KIAogLyogRW1pdCB0aGUgbmVjZXNzYXJ5IGluc3RydWN0aW9ucy4gU2VlIGNhbl9jYWNoZSBhYm92ZS4gKi8KLXN0YXRpYyBzbGppdF9zaSBnZXRwdXRfYXJnKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIGZsYWdzLCBzbGppdF9zaSByZWcsIHNsaml0X3NpIGFyZywgc2xqaXRfc3cgYXJndywgc2xqaXRfc2kgbmV4dF9hcmcsIHNsaml0X3N3IG5leHRfYXJndykKK3N0YXRpYyBzbGppdF9zMzIgZ2V0cHV0X2FyZyhzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgZmxhZ3MsIHNsaml0X3MzMiByZWcsIHNsaml0X3MzMiBhcmcsIHNsaml0X3N3IGFyZ3csIHNsaml0X3MzMiBuZXh0X2FyZywgc2xqaXRfc3cgbmV4dF9hcmd3KQogewotCXNsaml0X3NpIGJhc2UsIGFyZzIsIGRlbGF5X3Nsb3Q7CisJc2xqaXRfczMyIGJhc2UsIGFyZzIsIGRlbGF5X3Nsb3Q7CiAJc2xqaXRfaW5zIGRlc3Q7CiAKIAlTTEpJVF9BU1NFUlQoYXJnICYgU0xKSVRfTUVNKTsKQEAgLTYxMyw3ICs2MTcsNyBAQAogCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIEFERCB8IEQoYmFzZSkgfCBTMShiYXNlKSB8IFMyKGFyZzIpLCBEUihiYXNlKSk7CiB9CiAKLXN0YXRpYyBTTEpJVF9JTkxJTkUgc2xqaXRfc2kgZW1pdF9vcF9tZW0oc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgZmxhZ3MsIHNsaml0X3NpIHJlZywgc2xqaXRfc2kgYXJnLCBzbGppdF9zdyBhcmd3KQorc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9zMzIgZW1pdF9vcF9tZW0oc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIGZsYWdzLCBzbGppdF9zMzIgcmVnLCBzbGppdF9zMzIgYXJnLCBzbGppdF9zdyBhcmd3KQogewogCWlmIChnZXRwdXRfYXJnX2Zhc3QoY29tcGlsZXIsIGZsYWdzLCByZWcsIGFyZywgYXJndykpCiAJCXJldHVybiBjb21waWxlci0+ZXJyb3I7CkBAIC02MjIsMjYgKzYyNiwyNiBAQAogCXJldHVybiBnZXRwdXRfYXJnKGNvbXBpbGVyLCBmbGFncywgcmVnLCBhcmcsIGFyZ3csIDAsIDApOwogfQogCi1zdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X3NpIGVtaXRfb3BfbWVtMihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBmbGFncywgc2xqaXRfc2kgcmVnLCBzbGppdF9zaSBhcmcxLCBzbGppdF9zdyBhcmcxdywgc2xqaXRfc2kgYXJnMiwgc2xqaXRfc3cgYXJnMncpCitzdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X3MzMiBlbWl0X29wX21lbTIoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIGZsYWdzLCBzbGppdF9zMzIgcmVnLCBzbGppdF9zMzIgYXJnMSwgc2xqaXRfc3cgYXJnMXcsIHNsaml0X3MzMiBhcmcyLCBzbGppdF9zdyBhcmcydykKIHsKIAlpZiAoZ2V0cHV0X2FyZ19mYXN0KGNvbXBpbGVyLCBmbGFncywgcmVnLCBhcmcxLCBhcmcxdykpCiAJCXJldHVybiBjb21waWxlci0+ZXJyb3I7CiAJcmV0dXJuIGdldHB1dF9hcmcoY29tcGlsZXIsIGZsYWdzLCByZWcsIGFyZzEsIGFyZzF3LCBhcmcyLCBhcmcydyk7CiB9CiAKLXN0YXRpYyBzbGppdF9zaSBlbWl0X29wKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIG9wLCBzbGppdF9zaSBmbGFncywKLQlzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsCi0Jc2xqaXRfc2kgc3JjMSwgc2xqaXRfc3cgc3JjMXcsCi0Jc2xqaXRfc2kgc3JjMiwgc2xqaXRfc3cgc3JjMncpCitzdGF0aWMgc2xqaXRfczMyIGVtaXRfb3Aoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIG9wLCBzbGppdF9zMzIgZmxhZ3MsCisJc2xqaXRfczMyIGRzdCwgc2xqaXRfc3cgZHN0dywKKwlzbGppdF9zMzIgc3JjMSwgc2xqaXRfc3cgc3JjMXcsCisJc2xqaXRfczMyIHNyYzIsIHNsaml0X3N3IHNyYzJ3KQogewogCS8qIGFyZzEgZ29lcyB0byBUTVBfUkVHMSBvciBzcmMgcmVnCiAJICAgYXJnMiBnb2VzIHRvIFRNUF9SRUcyLCBpbW0gb3Igc3JjIHJlZwogCSAgIFRNUF9SRUczIGNhbiBiZSB1c2VkIGZvciBjYWNoaW5nCiAJICAgcmVzdWx0IGdvZXMgdG8gVE1QX1JFRzIsIHNvIHB1dCByZXN1bHQgY2FuIHVzZSBUTVBfUkVHMSBhbmQgVE1QX1JFRzMuICovCi0Jc2xqaXRfc2kgZHN0X3IgPSBUTVBfUkVHMjsKLQlzbGppdF9zaSBzcmMxX3I7CisJc2xqaXRfczMyIGRzdF9yID0gVE1QX1JFRzI7CisJc2xqaXRfczMyIHNyYzFfcjsKIAlzbGppdF9zdyBzcmMyX3IgPSAwOwotCXNsaml0X3NpIHN1Z2dfc3JjMl9yID0gVE1QX1JFRzI7CisJc2xqaXRfczMyIHN1Z2dfc3JjMl9yID0gVE1QX1JFRzI7CiAKIAlpZiAoIShmbGFncyAmIEFMVF9LRUVQX0NBQ0hFKSkgewogCQljb21waWxlci0+Y2FjaGVfYXJnID0gMDsKQEAgLTY0OSwxMyArNjUzLDEzIEBACiAJfQogCiAJaWYgKFNMSklUX1VOTElLRUxZKGRzdCA9PSBTTEpJVF9VTlVTRUQpKSB7Ci0JCWlmIChvcCA+PSBTTEpJVF9NT1YgJiYgb3AgPD0gU0xKSVRfTU9WVV9TSSAmJiAhKHNyYzIgJiBTTEpJVF9NRU0pKQorCQlpZiAob3AgPj0gU0xKSVRfTU9WICYmIG9wIDw9IFNMSklUX01PVlVfUzMyICYmICEoc3JjMiAmIFNMSklUX01FTSkpCiAJCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKIAl9CiAJZWxzZSBpZiAoRkFTVF9JU19SRUcoZHN0KSkgewogCQlkc3RfciA9IGRzdDsKIAkJZmxhZ3MgfD0gUkVHX0RFU1Q7Ci0JCWlmIChvcCA+PSBTTEpJVF9NT1YgJiYgb3AgPD0gU0xKSVRfTU9WVV9TSSkKKwkJaWYgKG9wID49IFNMSklUX01PViAmJiBvcCA8PSBTTEpJVF9NT1ZVX1MzMikKIAkJCXN1Z2dfc3JjMl9yID0gZHN0X3I7CiAJfQogCWVsc2UgaWYgKChkc3QgJiBTTEpJVF9NRU0pICYmICFnZXRwdXRfYXJnX2Zhc3QoY29tcGlsZXIsIGZsYWdzIHwgQVJHX1RFU1QsIFRNUF9SRUcxLCBkc3QsIGRzdHcpKQpAQCAtNzA1LDcgKzcwOSw3IEBACiAJaWYgKEZBU1RfSVNfUkVHKHNyYzIpKSB7CiAJCXNyYzJfciA9IHNyYzI7CiAJCWZsYWdzIHw9IFJFRzJfU09VUkNFOwotCQlpZiAoIShmbGFncyAmIFJFR19ERVNUKSAmJiBvcCA+PSBTTEpJVF9NT1YgJiYgb3AgPD0gU0xKSVRfTU9WVV9TSSkKKwkJaWYgKCEoZmxhZ3MgJiBSRUdfREVTVCkgJiYgb3AgPj0gU0xKSVRfTU9WICYmIG9wIDw9IFNMSklUX01PVlVfUzMyKQogCQkJZHN0X3IgPSBzcmMyX3I7CiAJfQogCWVsc2UgaWYgKHNyYzIgJiBTTEpJVF9JTU0pIHsKQEAgLTcxNiw3ICs3MjAsNyBAQAogCQkJfQogCQkJZWxzZSB7CiAJCQkJc3JjMl9yID0gMDsKLQkJCQlpZiAoKG9wID49IFNMSklUX01PViAmJiBvcCA8PSBTTEpJVF9NT1ZVX1NJKSAmJiAoZHN0ICYgU0xKSVRfTUVNKSkKKwkJCQlpZiAoKG9wID49IFNMSklUX01PViAmJiBvcCA8PSBTTEpJVF9NT1ZVX1MzMikgJiYgKGRzdCAmIFNMSklUX01FTSkpCiAJCQkJCWRzdF9yID0gMDsKIAkJCX0KIAkJfQpAQCAtNzU4LDcgKzc2Miw3IEBACiAJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CiB9CiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X29wMChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCkKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zMzIgc2xqaXRfZW1pdF9vcDAoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIG9wKQogewogCUNIRUNLX0VSUk9SKCk7CiAJQ0hFQ0soY2hlY2tfc2xqaXRfZW1pdF9vcDAoY29tcGlsZXIsIG9wKSk7CkBAIC03NjksMzAgKzc3MywzMCBAQAogCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBUQSwgVU5NT1ZBQkxFX0lOUyk7CiAJY2FzZSBTTEpJVF9OT1A6CiAJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIE5PUCwgVU5NT1ZBQkxFX0lOUyk7Ci0JY2FzZSBTTEpJVF9MVU1VTDoKLQljYXNlIFNMSklUX0xTTVVMOgorCWNhc2UgU0xKSVRfTE1VTF9VVzoKKwljYXNlIFNMSklUX0xNVUxfU1c6CiAjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1NQQVJDXzMyICYmIFNMSklUX0NPTkZJR19TUEFSQ18zMikKLQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIChvcCA9PSBTTEpJVF9MVU1VTCA/IFVNVUwgOiBTTVVMKSB8IEQoU0xKSVRfUjApIHwgUzEoU0xKSVRfUjApIHwgUzIoU0xKSVRfUjEpLCBEUihTTEpJVF9SMCkpKTsKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIChvcCA9PSBTTEpJVF9MTVVMX1VXID8gVU1VTCA6IFNNVUwpIHwgRChTTEpJVF9SMCkgfCBTMShTTEpJVF9SMCkgfCBTMihTTEpJVF9SMSksIERSKFNMSklUX1IwKSkpOwogCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBSRFkgfCBEKFNMSklUX1IxKSwgRFIoU0xKSVRfUjEpKTsKICNlbHNlCiAjZXJyb3IgIkltcGxlbWVudGF0aW9uIHJlcXVpcmVkIgogI2VuZGlmCi0JY2FzZSBTTEpJVF9VRElWTU9EOgotCWNhc2UgU0xKSVRfU0RJVk1PRDoKLQljYXNlIFNMSklUX1VESVZJOgotCWNhc2UgU0xKSVRfU0RJVkk6Ci0JCVNMSklUX0NPTVBJTEVfQVNTRVJUKChTTEpJVF9VRElWTU9EICYgMHgyKSA9PSAwICYmIFNMSklUX1VESVZJIC0gMHgyID09IFNMSklUX1VESVZNT0QsIGJhZF9kaXZfb3Bjb2RlX2Fzc2lnbm1lbnRzKTsKKwljYXNlIFNMSklUX0RJVk1PRF9VVzoKKwljYXNlIFNMSklUX0RJVk1PRF9TVzoKKwljYXNlIFNMSklUX0RJVl9VVzoKKwljYXNlIFNMSklUX0RJVl9TVzoKKwkJU0xKSVRfQ09NUElMRV9BU1NFUlQoKFNMSklUX0RJVk1PRF9VVyAmIDB4MikgPT0gMCAmJiBTTEpJVF9ESVZfVVcgLSAweDIgPT0gU0xKSVRfRElWTU9EX1VXLCBiYWRfZGl2X29wY29kZV9hc3NpZ25tZW50cyk7CiAjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1NQQVJDXzMyICYmIFNMSklUX0NPTkZJR19TUEFSQ18zMikKLQkJaWYgKChvcCB8IDB4MikgPT0gU0xKSVRfVURJVkkpCisJCWlmICgob3AgfCAweDIpID09IFNMSklUX0RJVl9VVykKIAkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBXUlkgfCBTMSgwKSwgTU9WQUJMRV9JTlMpKTsKIAkJZWxzZSB7CiAJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgU1JBIHwgRChUTVBfUkVHMSkgfCBTMShTTEpJVF9SMCkgfCBJTU0oMzEpLCBEUihUTVBfUkVHMSkpKTsKIAkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBXUlkgfCBTMShUTVBfUkVHMSksIE1PVkFCTEVfSU5TKSk7CiAJCX0KLQkJaWYgKG9wIDw9IFNMSklUX1NESVZNT0QpCisJCWlmIChvcCA8PSBTTEpJVF9ESVZNT0RfU1cpCiAJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgT1IgfCBEKFRNUF9SRUcyKSB8IFMxKDApIHwgUzIoU0xKSVRfUjApLCBEUihUTVBfUkVHMikpKTsKLQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsICgob3AgfCAweDIpID09IFNMSklUX1VESVZJID8gVURJViA6IFNESVYpIHwgRChTTEpJVF9SMCkgfCBTMShTTEpJVF9SMCkgfCBTMihTTEpJVF9SMSksIERSKFNMSklUX1IwKSkpOwotCQlpZiAob3AgPj0gU0xKSVRfVURJVkkpCisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCAoKG9wIHwgMHgyKSA9PSBTTEpJVF9ESVZfVVcgPyBVRElWIDogU0RJVikgfCBEKFNMSklUX1IwKSB8IFMxKFNMSklUX1IwKSB8IFMyKFNMSklUX1IxKSwgRFIoU0xKSVRfUjApKSk7CisJCWlmIChvcCA+PSBTTEpJVF9ESVZfVVcpCiAJCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKIAkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIFNNVUwgfCBEKFNMSklUX1IxKSB8IFMxKFNMSklUX1IwKSB8IFMyKFNMSklUX1IxKSwgRFIoU0xKSVRfUjEpKSk7CiAJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIFNVQiB8IEQoU0xKSVRfUjEpIHwgUzEoVE1QX1JFRzIpIHwgUzIoU0xKSVRfUjEpLCBEUihTTEpJVF9SMSkpOwpAQCAtODA0LDExICs4MDgsMTEgQEAKIAlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKIH0KIAotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfb3AxKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIG9wLAotCXNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dywKLQlzbGppdF9zaSBzcmMsIHNsaml0X3N3IHNyY3cpCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfczMyIHNsaml0X2VtaXRfb3AxKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiBvcCwKKwlzbGppdF9zMzIgZHN0LCBzbGppdF9zdyBkc3R3LAorCXNsaml0X3MzMiBzcmMsIHNsaml0X3N3IHNyY3cpCiB7Ci0Jc2xqaXRfc2kgZmxhZ3MgPSBHRVRfRkxBR1Mob3ApID8gU0VUX0ZMQUdTIDogMDsKKwlzbGppdF9zMzIgZmxhZ3MgPSBHRVRfRkxBR1Mob3ApID8gU0VUX0ZMQUdTIDogMDsKIAogCUNIRUNLX0VSUk9SKCk7CiAJQ0hFQ0soY2hlY2tfc2xqaXRfZW1pdF9vcDEoY29tcGlsZXIsIG9wLCBkc3QsIGRzdHcsIHNyYywgc3JjdykpOwpAQCAtODIxLDQ1ICs4MjUsNDUgQEAKIAljYXNlIFNMSklUX01PVl9QOgogCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfTU9WLCBmbGFncyB8IFdPUkRfREFUQSwgZHN0LCBkc3R3LCBUTVBfUkVHMSwgMCwgc3JjLCBzcmN3KTsKIAotCWNhc2UgU0xKSVRfTU9WX1VJOgotCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfTU9WX1VJLCBmbGFncyB8IElOVF9EQVRBLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIHNyY3cpOworCWNhc2UgU0xKSVRfTU9WX1UzMjoKKwkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01PVl9VMzIsIGZsYWdzIHwgSU5UX0RBVEEsIGRzdCwgZHN0dywgVE1QX1JFRzEsIDAsIHNyYywgc3Jjdyk7CiAKLQljYXNlIFNMSklUX01PVl9TSToKLQkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01PVl9TSSwgZmxhZ3MgfCBJTlRfREFUQSB8IFNJR05FRF9EQVRBLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIHNyY3cpOworCWNhc2UgU0xKSVRfTU9WX1MzMjoKKwkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01PVl9TMzIsIGZsYWdzIHwgSU5UX0RBVEEgfCBTSUdORURfREFUQSwgZHN0LCBkc3R3LCBUTVBfUkVHMSwgMCwgc3JjLCBzcmN3KTsKIAotCWNhc2UgU0xKSVRfTU9WX1VCOgotCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfTU9WX1VCLCBmbGFncyB8IEJZVEVfREFUQSwgZHN0LCBkc3R3LCBUTVBfUkVHMSwgMCwgc3JjLCAoc3JjICYgU0xKSVRfSU1NKSA/IChzbGppdF91YilzcmN3IDogc3Jjdyk7CisJY2FzZSBTTEpJVF9NT1ZfVTg6CisJCXJldHVybiBlbWl0X29wKGNvbXBpbGVyLCBTTEpJVF9NT1ZfVTgsIGZsYWdzIHwgQllURV9EQVRBLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIChzcmMgJiBTTEpJVF9JTU0pID8gKHNsaml0X3U4KXNyY3cgOiBzcmN3KTsKIAotCWNhc2UgU0xKSVRfTU9WX1NCOgotCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfTU9WX1NCLCBmbGFncyB8IEJZVEVfREFUQSB8IFNJR05FRF9EQVRBLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIChzcmMgJiBTTEpJVF9JTU0pID8gKHNsaml0X3NiKXNyY3cgOiBzcmN3KTsKKwljYXNlIFNMSklUX01PVl9TODoKKwkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01PVl9TOCwgZmxhZ3MgfCBCWVRFX0RBVEEgfCBTSUdORURfREFUQSwgZHN0LCBkc3R3LCBUTVBfUkVHMSwgMCwgc3JjLCAoc3JjICYgU0xKSVRfSU1NKSA/IChzbGppdF9zOClzcmN3IDogc3Jjdyk7CiAKLQljYXNlIFNMSklUX01PVl9VSDoKLQkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01PVl9VSCwgZmxhZ3MgfCBIQUxGX0RBVEEsIGRzdCwgZHN0dywgVE1QX1JFRzEsIDAsIHNyYywgKHNyYyAmIFNMSklUX0lNTSkgPyAoc2xqaXRfdWgpc3JjdyA6IHNyY3cpOworCWNhc2UgU0xKSVRfTU9WX1UxNjoKKwkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01PVl9VMTYsIGZsYWdzIHwgSEFMRl9EQVRBLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIChzcmMgJiBTTEpJVF9JTU0pID8gKHNsaml0X3UxNilzcmN3IDogc3Jjdyk7CiAKLQljYXNlIFNMSklUX01PVl9TSDoKLQkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01PVl9TSCwgZmxhZ3MgfCBIQUxGX0RBVEEgfCBTSUdORURfREFUQSwgZHN0LCBkc3R3LCBUTVBfUkVHMSwgMCwgc3JjLCAoc3JjICYgU0xKSVRfSU1NKSA/IChzbGppdF9zaClzcmN3IDogc3Jjdyk7CisJY2FzZSBTTEpJVF9NT1ZfUzE2OgorCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfTU9WX1MxNiwgZmxhZ3MgfCBIQUxGX0RBVEEgfCBTSUdORURfREFUQSwgZHN0LCBkc3R3LCBUTVBfUkVHMSwgMCwgc3JjLCAoc3JjICYgU0xKSVRfSU1NKSA/IChzbGppdF9zMTYpc3JjdyA6IHNyY3cpOwogCiAJY2FzZSBTTEpJVF9NT1ZVOgogCWNhc2UgU0xKSVRfTU9WVV9QOgogCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfTU9WLCBmbGFncyB8IFdPUkRfREFUQSB8IFdSSVRFX0JBQ0ssIGRzdCwgZHN0dywgVE1QX1JFRzEsIDAsIHNyYywgc3Jjdyk7CiAKLQljYXNlIFNMSklUX01PVlVfVUk6Ci0JCXJldHVybiBlbWl0X29wKGNvbXBpbGVyLCBTTEpJVF9NT1ZfVUksIGZsYWdzIHwgSU5UX0RBVEEgfCBXUklURV9CQUNLLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIHNyY3cpOworCWNhc2UgU0xKSVRfTU9WVV9VMzI6CisJCXJldHVybiBlbWl0X29wKGNvbXBpbGVyLCBTTEpJVF9NT1ZfVTMyLCBmbGFncyB8IElOVF9EQVRBIHwgV1JJVEVfQkFDSywgZHN0LCBkc3R3LCBUTVBfUkVHMSwgMCwgc3JjLCBzcmN3KTsKIAotCWNhc2UgU0xKSVRfTU9WVV9TSToKLQkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01PVl9TSSwgZmxhZ3MgfCBJTlRfREFUQSB8IFNJR05FRF9EQVRBIHwgV1JJVEVfQkFDSywgZHN0LCBkc3R3LCBUTVBfUkVHMSwgMCwgc3JjLCBzcmN3KTsKKwljYXNlIFNMSklUX01PVlVfUzMyOgorCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfTU9WX1MzMiwgZmxhZ3MgfCBJTlRfREFUQSB8IFNJR05FRF9EQVRBIHwgV1JJVEVfQkFDSywgZHN0LCBkc3R3LCBUTVBfUkVHMSwgMCwgc3JjLCBzcmN3KTsKIAotCWNhc2UgU0xKSVRfTU9WVV9VQjoKLQkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01PVl9VQiwgZmxhZ3MgfCBCWVRFX0RBVEEgfCBXUklURV9CQUNLLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIChzcmMgJiBTTEpJVF9JTU0pID8gKHNsaml0X3ViKXNyY3cgOiBzcmN3KTsKKwljYXNlIFNMSklUX01PVlVfVTg6CisJCXJldHVybiBlbWl0X29wKGNvbXBpbGVyLCBTTEpJVF9NT1ZfVTgsIGZsYWdzIHwgQllURV9EQVRBIHwgV1JJVEVfQkFDSywgZHN0LCBkc3R3LCBUTVBfUkVHMSwgMCwgc3JjLCAoc3JjICYgU0xKSVRfSU1NKSA/IChzbGppdF91OClzcmN3IDogc3Jjdyk7CiAKLQljYXNlIFNMSklUX01PVlVfU0I6Ci0JCXJldHVybiBlbWl0X29wKGNvbXBpbGVyLCBTTEpJVF9NT1ZfU0IsIGZsYWdzIHwgQllURV9EQVRBIHwgU0lHTkVEX0RBVEEgfCBXUklURV9CQUNLLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIChzcmMgJiBTTEpJVF9JTU0pID8gKHNsaml0X3NiKXNyY3cgOiBzcmN3KTsKKwljYXNlIFNMSklUX01PVlVfUzg6CisJCXJldHVybiBlbWl0X29wKGNvbXBpbGVyLCBTTEpJVF9NT1ZfUzgsIGZsYWdzIHwgQllURV9EQVRBIHwgU0lHTkVEX0RBVEEgfCBXUklURV9CQUNLLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIChzcmMgJiBTTEpJVF9JTU0pID8gKHNsaml0X3M4KXNyY3cgOiBzcmN3KTsKIAotCWNhc2UgU0xKSVRfTU9WVV9VSDoKLQkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01PVl9VSCwgZmxhZ3MgfCBIQUxGX0RBVEEgfCBXUklURV9CQUNLLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIChzcmMgJiBTTEpJVF9JTU0pID8gKHNsaml0X3VoKXNyY3cgOiBzcmN3KTsKKwljYXNlIFNMSklUX01PVlVfVTE2OgorCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfTU9WX1UxNiwgZmxhZ3MgfCBIQUxGX0RBVEEgfCBXUklURV9CQUNLLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIChzcmMgJiBTTEpJVF9JTU0pID8gKHNsaml0X3UxNilzcmN3IDogc3Jjdyk7CiAKLQljYXNlIFNMSklUX01PVlVfU0g6Ci0JCXJldHVybiBlbWl0X29wKGNvbXBpbGVyLCBTTEpJVF9NT1ZfU0gsIGZsYWdzIHwgSEFMRl9EQVRBIHwgU0lHTkVEX0RBVEEgfCBXUklURV9CQUNLLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIChzcmMgJiBTTEpJVF9JTU0pID8gKHNsaml0X3NoKXNyY3cgOiBzcmN3KTsKKwljYXNlIFNMSklUX01PVlVfUzE2OgorCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfTU9WX1MxNiwgZmxhZ3MgfCBIQUxGX0RBVEEgfCBTSUdORURfREFUQSB8IFdSSVRFX0JBQ0ssIGRzdCwgZHN0dywgVE1QX1JFRzEsIDAsIHNyYywgKHNyYyAmIFNMSklUX0lNTSkgPyAoc2xqaXRfczE2KXNyY3cgOiBzcmN3KTsKIAogCWNhc2UgU0xKSVRfTk9UOgogCWNhc2UgU0xKSVRfQ0xaOgpAQCAtODcyLDEyICs4NzYsMTIgQEAKIAlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKIH0KIAotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfb3AyKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIG9wLAotCXNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dywKLQlzbGppdF9zaSBzcmMxLCBzbGppdF9zdyBzcmMxdywKLQlzbGppdF9zaSBzcmMyLCBzbGppdF9zdyBzcmMydykKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zMzIgc2xqaXRfZW1pdF9vcDIoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIG9wLAorCXNsaml0X3MzMiBkc3QsIHNsaml0X3N3IGRzdHcsCisJc2xqaXRfczMyIHNyYzEsIHNsaml0X3N3IHNyYzF3LAorCXNsaml0X3MzMiBzcmMyLCBzbGppdF9zdyBzcmMydykKIHsKLQlzbGppdF9zaSBmbGFncyA9IEdFVF9GTEFHUyhvcCkgPyBTRVRfRkxBR1MgOiAwOworCXNsaml0X3MzMiBmbGFncyA9IEdFVF9GTEFHUyhvcCkgPyBTRVRfRkxBR1MgOiAwOwogCiAJQ0hFQ0tfRVJST1IoKTsKIAlDSEVDSyhjaGVja19zbGppdF9lbWl0X29wMihjb21waWxlciwgb3AsIGRzdCwgZHN0dywgc3JjMSwgc3JjMXcsIHNyYzIsIHNyYzJ3KSk7CkBAIC05MTQsMjAgKzkxOCwyMCBAQAogCXJldHVybiBTTEpJVF9TVUNDRVNTOwogfQogCi1TTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZ2V0X3JlZ2lzdGVyX2luZGV4KHNsaml0X3NpIHJlZykKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zMzIgc2xqaXRfZ2V0X3JlZ2lzdGVyX2luZGV4KHNsaml0X3MzMiByZWcpCiB7CiAJQ0hFQ0tfUkVHX0lOREVYKGNoZWNrX3Nsaml0X2dldF9yZWdpc3Rlcl9pbmRleChyZWcpKTsKIAlyZXR1cm4gcmVnX21hcFtyZWddOwogfQogCi1TTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZ2V0X2Zsb2F0X3JlZ2lzdGVyX2luZGV4KHNsaml0X3NpIHJlZykKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zMzIgc2xqaXRfZ2V0X2Zsb2F0X3JlZ2lzdGVyX2luZGV4KHNsaml0X3MzMiByZWcpCiB7CiAJQ0hFQ0tfUkVHX0lOREVYKGNoZWNrX3Nsaml0X2dldF9mbG9hdF9yZWdpc3Rlcl9pbmRleChyZWcpKTsKIAlyZXR1cm4gcmVnIDw8IDE7CiB9CiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X29wX2N1c3RvbShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLAotCXZvaWQgKmluc3RydWN0aW9uLCBzbGppdF9zaSBzaXplKQorU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3MzMiBzbGppdF9lbWl0X29wX2N1c3RvbShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLAorCXZvaWQgKmluc3RydWN0aW9uLCBzbGppdF9zMzIgc2l6ZSkKIHsKIAlDSEVDS19FUlJPUigpOwogCUNIRUNLKGNoZWNrX3Nsaml0X2VtaXRfb3BfY3VzdG9tKGNvbXBpbGVyLCBpbnN0cnVjdGlvbiwgc2l6ZSkpOwpAQCAtOTM5LDcgKzk0Myw3IEBACiAvKiAgRmxvYXRpbmcgcG9pbnQgb3BlcmF0b3JzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1TTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfaXNfZnB1X2F2YWlsYWJsZSh2b2lkKQorU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3MzMiBzbGppdF9pc19mcHVfYXZhaWxhYmxlKHZvaWQpCiB7CiAjaWZkZWYgU0xKSVRfSVNfRlBVX0FWQUlMQUJMRQogCXJldHVybiBTTEpJVF9JU19GUFVfQVZBSUxBQkxFOwpAQCAtOTQ5LDEzICs5NTMsMTMgQEAKICNlbmRpZgogfQogCi0jZGVmaW5lIEZMT0FUX0RBVEEob3ApIChET1VCTEVfREFUQSB8ICgob3AgJiBTTEpJVF9TSU5HTEVfT1ApID4+IDcpKQotI2RlZmluZSBTRUxFQ1RfRk9QKG9wLCBzaW5nbGUsIGRvdWJsZSkgKChvcCAmIFNMSklUX1NJTkdMRV9PUCkgPyBzaW5nbGUgOiBkb3VibGUpCisjZGVmaW5lIEZMT0FUX0RBVEEob3ApIChET1VCTEVfREFUQSB8ICgob3AgJiBTTEpJVF9GMzJfT1ApID4+IDcpKQorI2RlZmluZSBTRUxFQ1RfRk9QKG9wLCBzaW5nbGUsIGRvdWJsZSkgKChvcCAmIFNMSklUX0YzMl9PUCkgPyBzaW5nbGUgOiBkb3VibGUpCiAjZGVmaW5lIEZMT0FUX1RNUF9NRU1fT0ZGU0VUICgyMiAqIHNpemVvZihzbGppdF9zdykpCiAKLXN0YXRpYyBTTEpJVF9JTkxJTkUgc2xqaXRfc2kgc2xqaXRfZW1pdF9mb3AxX2NvbnZ3X2Zyb21kKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIG9wLAotCXNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dywKLQlzbGppdF9zaSBzcmMsIHNsaml0X3N3IHNyY3cpCitzdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X3MzMiBzbGppdF9lbWl0X2ZvcDFfY29udl9zd19mcm9tX2Y2NChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgb3AsCisJc2xqaXRfczMyIGRzdCwgc2xqaXRfc3cgZHN0dywKKwlzbGppdF9zMzIgc3JjLCBzbGppdF9zdyBzcmN3KQogewogCWlmIChzcmMgJiBTTEpJVF9NRU0pIHsKIAkJRkFJTF9JRihlbWl0X29wX21lbTIoY29tcGlsZXIsIEZMT0FUX0RBVEEob3ApIHwgTE9BRF9EQVRBLCBUTVBfRlJFRzEsIHNyYywgc3JjdywgZHN0LCBkc3R3KSk7CkBAIC05NzgsMTYgKzk4MiwxNiBAQAogCXJldHVybiBlbWl0X29wX21lbTIoY29tcGlsZXIsIFNJTkdMRV9EQVRBLCBUTVBfRlJFRzEsIGRzdCwgZHN0dywgMCwgMCk7CiB9CiAKLXN0YXRpYyBTTEpJVF9JTkxJTkUgc2xqaXRfc2kgc2xqaXRfZW1pdF9mb3AxX2NvbnZkX2Zyb213KHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIG9wLAotCXNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dywKLQlzbGppdF9zaSBzcmMsIHNsaml0X3N3IHNyY3cpCitzdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X3MzMiBzbGppdF9lbWl0X2ZvcDFfY29udl9mNjRfZnJvbV9zdyhzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgb3AsCisJc2xqaXRfczMyIGRzdCwgc2xqaXRfc3cgZHN0dywKKwlzbGppdF9zMzIgc3JjLCBzbGppdF9zdyBzcmN3KQogewotCXNsaml0X3NpIGRzdF9yID0gRkFTVF9JU19SRUcoZHN0KSA/IChkc3QgPDwgMSkgOiBUTVBfRlJFRzE7CisJc2xqaXRfczMyIGRzdF9yID0gRkFTVF9JU19SRUcoZHN0KSA/IChkc3QgPDwgMSkgOiBUTVBfRlJFRzE7CiAKIAlpZiAoc3JjICYgU0xKSVRfSU1NKSB7CiAjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1g4Nl82NCAmJiBTTEpJVF9DT05GSUdfWDg2XzY0KQotCQlpZiAoR0VUX09QQ09ERShvcCkgPT0gU0xKSVRfQ09OVkRfRlJPTUkpCi0JCQlzcmN3ID0gKHNsaml0X3NpKXNyY3c7CisJCWlmIChHRVRfT1BDT0RFKG9wKSA9PSBTTEpJVF9DT05WX0Y2NF9GUk9NX1MzMikKKwkJCXNyY3cgPSAoc2xqaXRfczMyKXNyY3c7CiAjZW5kaWYKIAkJRkFJTF9JRihsb2FkX2ltbWVkaWF0ZShjb21waWxlciwgVE1QX1JFRzEsIHNyY3cpKTsKIAkJc3JjID0gVE1QX1JFRzE7CkBAIC0xMDA4LDkgKzEwMTIsOSBAQAogCXJldHVybiBTTEpJVF9TVUNDRVNTOwogfQogCi1zdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X3NpIHNsaml0X2VtaXRfZm9wMV9jbXAoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsCi0Jc2xqaXRfc2kgc3JjMSwgc2xqaXRfc3cgc3JjMXcsCi0Jc2xqaXRfc2kgc3JjMiwgc2xqaXRfc3cgc3JjMncpCitzdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X3MzMiBzbGppdF9lbWl0X2ZvcDFfY21wKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiBvcCwKKwlzbGppdF9zMzIgc3JjMSwgc2xqaXRfc3cgc3JjMXcsCisJc2xqaXRfczMyIHNyYzIsIHNsaml0X3N3IHNyYzJ3KQogewogCWlmIChzcmMxICYgU0xKSVRfTUVNKSB7CiAJCUZBSUxfSUYoZW1pdF9vcF9tZW0yKGNvbXBpbGVyLCBGTE9BVF9EQVRBKG9wKSB8IExPQURfREFUQSwgVE1QX0ZSRUcxLCBzcmMxLCBzcmMxdywgc3JjMiwgc3JjMncpKTsKQEAgLTEwMjksMjEgKzEwMzMsMjEgQEAKIAlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBTRUxFQ1RfRk9QKG9wLCBGQ01QUywgRkNNUEQpIHwgUzFBKHNyYzEpIHwgUzJBKHNyYzIpLCBGQ0NfSVNfU0VUIHwgTU9WQUJMRV9JTlMpOwogfQogCi1TTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9mb3AxKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIG9wLAotCXNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dywKLQlzbGppdF9zaSBzcmMsIHNsaml0X3N3IHNyY3cpCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfczMyIHNsaml0X2VtaXRfZm9wMShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgb3AsCisJc2xqaXRfczMyIGRzdCwgc2xqaXRfc3cgZHN0dywKKwlzbGppdF9zMzIgc3JjLCBzbGppdF9zdyBzcmN3KQogewotCXNsaml0X3NpIGRzdF9yOworCXNsaml0X3MzMiBkc3RfcjsKIAogCUNIRUNLX0VSUk9SKCk7CiAJY29tcGlsZXItPmNhY2hlX2FyZyA9IDA7CiAJY29tcGlsZXItPmNhY2hlX2FyZ3cgPSAwOwogCi0JU0xKSVRfQ09NUElMRV9BU1NFUlQoKFNMSklUX1NJTkdMRV9PUCA9PSAweDEwMCkgJiYgIShET1VCTEVfREFUQSAmIDB4MiksIGZsb2F0X3RyYW5zZmVyX2JpdF9lcnJvcik7CisJU0xKSVRfQ09NUElMRV9BU1NFUlQoKFNMSklUX0YzMl9PUCA9PSAweDEwMCkgJiYgIShET1VCTEVfREFUQSAmIDB4MiksIGZsb2F0X3RyYW5zZmVyX2JpdF9lcnJvcik7CiAJU0VMRUNUX0ZPUDFfT1BFUkFUSU9OX1dJVEhfQ0hFQ0tTKGNvbXBpbGVyLCBvcCwgZHN0LCBkc3R3LCBzcmMsIHNyY3cpOwogCi0JaWYgKEdFVF9PUENPREUob3ApID09IFNMSklUX0NPTlZEX0ZST01TKQotCQlvcCBePSBTTEpJVF9TSU5HTEVfT1A7CisJaWYgKEdFVF9PUENPREUob3ApID09IFNMSklUX0NPTlZfRjY0X0ZST01fRjMyKQorCQlvcCBePSBTTEpJVF9GMzJfT1A7CiAKIAlkc3RfciA9IEZBU1RfSVNfUkVHKGRzdCkgPyAoZHN0IDw8IDEpIDogVE1QX0ZSRUcxOwogCkBAIC0xMDU1LDMwICsxMDU5LDMwIEBACiAJCXNyYyA8PD0gMTsKIAogCXN3aXRjaCAoR0VUX09QQ09ERShvcCkpIHsKLQljYXNlIFNMSklUX0RNT1Y6CisJY2FzZSBTTEpJVF9NT1ZfRjY0OgogCQlpZiAoc3JjICE9IGRzdF9yKSB7CiAJCQlpZiAoZHN0X3IgIT0gVE1QX0ZSRUcxKSB7CiAJCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIEZNT1ZTIHwgREEoZHN0X3IpIHwgUzJBKHNyYyksIE1PVkFCTEVfSU5TKSk7Ci0JCQkJaWYgKCEob3AgJiBTTEpJVF9TSU5HTEVfT1ApKQorCQkJCWlmICghKG9wICYgU0xKSVRfRjMyX09QKSkKIAkJCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIEZNT1ZTIHwgREEoZHN0X3IgfCAxKSB8IFMyQShzcmMgfCAxKSwgTU9WQUJMRV9JTlMpKTsKIAkJCX0KIAkJCWVsc2UKIAkJCQlkc3RfciA9IHNyYzsKIAkJfQogCQlicmVhazsKLQljYXNlIFNMSklUX0RORUc6CisJY2FzZSBTTEpJVF9ORUdfRjY0OgogCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgRk5FR1MgfCBEQShkc3RfcikgfCBTMkEoc3JjKSwgTU9WQUJMRV9JTlMpKTsKLQkJaWYgKGRzdF9yICE9IHNyYyAmJiAhKG9wICYgU0xKSVRfU0lOR0xFX09QKSkKKwkJaWYgKGRzdF9yICE9IHNyYyAmJiAhKG9wICYgU0xKSVRfRjMyX09QKSkKIAkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBGTU9WUyB8IERBKGRzdF9yIHwgMSkgfCBTMkEoc3JjIHwgMSksIE1PVkFCTEVfSU5TKSk7CiAJCWJyZWFrOwotCWNhc2UgU0xKSVRfREFCUzoKKwljYXNlIFNMSklUX0FCU19GNjQ6CiAJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBGQUJTUyB8IERBKGRzdF9yKSB8IFMyQShzcmMpLCBNT1ZBQkxFX0lOUykpOwotCQlpZiAoZHN0X3IgIT0gc3JjICYmICEob3AgJiBTTEpJVF9TSU5HTEVfT1ApKQorCQlpZiAoZHN0X3IgIT0gc3JjICYmICEob3AgJiBTTEpJVF9GMzJfT1ApKQogCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIEZNT1ZTIHwgREEoZHN0X3IgfCAxKSB8IFMyQShzcmMgfCAxKSwgTU9WQUJMRV9JTlMpKTsKIAkJYnJlYWs7Ci0JY2FzZSBTTEpJVF9DT05WRF9GUk9NUzoKKwljYXNlIFNMSklUX0NPTlZfRjY0X0ZST01fRjMyOgogCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgU0VMRUNUX0ZPUChvcCwgRlNUT0QsIEZEVE9TKSB8IERBKGRzdF9yKSB8IFMyQShzcmMpLCBNT1ZBQkxFX0lOUykpOwotCQlvcCBePSBTTEpJVF9TSU5HTEVfT1A7CisJCW9wIF49IFNMSklUX0YzMl9PUDsKIAkJYnJlYWs7CiAJfQogCkBAIC0xMDg3LDEyICsxMDkxLDEyIEBACiAJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CiB9CiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X2ZvcDIoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsCi0Jc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3LAotCXNsaml0X3NpIHNyYzEsIHNsaml0X3N3IHNyYzF3LAotCXNsaml0X3NpIHNyYzIsIHNsaml0X3N3IHNyYzJ3KQorU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3MzMiBzbGppdF9lbWl0X2ZvcDIoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIG9wLAorCXNsaml0X3MzMiBkc3QsIHNsaml0X3N3IGRzdHcsCisJc2xqaXRfczMyIHNyYzEsIHNsaml0X3N3IHNyYzF3LAorCXNsaml0X3MzMiBzcmMyLCBzbGppdF9zdyBzcmMydykKIHsKLQlzbGppdF9zaSBkc3RfciwgZmxhZ3MgPSAwOworCXNsaml0X3MzMiBkc3RfciwgZmxhZ3MgPSAwOwogCiAJQ0hFQ0tfRVJST1IoKTsKIAlDSEVDSyhjaGVja19zbGppdF9lbWl0X2ZvcDIoY29tcGlsZXIsIG9wLCBkc3QsIGRzdHcsIHNyYzEsIHNyYzF3LCBzcmMyLCBzcmMydykpOwpAQCAtMTE0NiwxOSArMTE1MCwxOSBAQAogCQlzcmMyID0gVE1QX0ZSRUcyOwogCiAJc3dpdGNoIChHRVRfT1BDT0RFKG9wKSkgewotCWNhc2UgU0xKSVRfREFERDoKKwljYXNlIFNMSklUX0FERF9GNjQ6CiAJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBTRUxFQ1RfRk9QKG9wLCBGQUREUywgRkFEREQpIHwgREEoZHN0X3IpIHwgUzFBKHNyYzEpIHwgUzJBKHNyYzIpLCBNT1ZBQkxFX0lOUykpOwogCQlicmVhazsKIAotCWNhc2UgU0xKSVRfRFNVQjoKKwljYXNlIFNMSklUX1NVQl9GNjQ6CiAJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBTRUxFQ1RfRk9QKG9wLCBGU1VCUywgRlNVQkQpIHwgREEoZHN0X3IpIHwgUzFBKHNyYzEpIHwgUzJBKHNyYzIpLCBNT1ZBQkxFX0lOUykpOwogCQlicmVhazsKIAotCWNhc2UgU0xKSVRfRE1VTDoKKwljYXNlIFNMSklUX01VTF9GNjQ6CiAJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBTRUxFQ1RfRk9QKG9wLCBGTVVMUywgRk1VTEQpIHwgREEoZHN0X3IpIHwgUzFBKHNyYzEpIHwgUzJBKHNyYzIpLCBNT1ZBQkxFX0lOUykpOwogCQlicmVhazsKIAotCWNhc2UgU0xKSVRfRERJVjoKKwljYXNlIFNMSklUX0RJVl9GNjQ6CiAJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBTRUxFQ1RfRk9QKG9wLCBGRElWUywgRkRJVkQpIHwgREEoZHN0X3IpIHwgUzFBKHNyYzEpIHwgUzJBKHNyYzIpLCBNT1ZBQkxFX0lOUykpOwogCQlicmVhazsKIAl9CkBAIC0xMTc2LDcgKzExODAsNyBAQAogLyogIE90aGVyIGluc3RydWN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfZmFzdF9lbnRlcihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcpCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfczMyIHNsaml0X2VtaXRfZmFzdF9lbnRlcihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgZHN0LCBzbGppdF9zdyBkc3R3KQogewogCUNIRUNLX0VSUk9SKCk7CiAJQ0hFQ0soY2hlY2tfc2xqaXRfZW1pdF9mYXN0X2VudGVyKGNvbXBpbGVyLCBkc3QsIGRzdHcpKTsKQEAgLTExOTMsNyArMTE5Nyw3IEBACiAJcmV0dXJuIGVtaXRfb3BfbWVtKGNvbXBpbGVyLCBXT1JEX0RBVEEsIFRNUF9MSU5LLCBkc3QsIGRzdHcpOwogfQogCi1TTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9mYXN0X3JldHVybihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBzcmMsIHNsaml0X3N3IHNyY3cpCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfczMyIHNsaml0X2VtaXRfZmFzdF9yZXR1cm4oc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIHNyYywgc2xqaXRfc3cgc3JjdykKIHsKIAlDSEVDS19FUlJPUigpOwogCUNIRUNLKGNoZWNrX3Nsaml0X2VtaXRfZmFzdF9yZXR1cm4oY29tcGlsZXIsIHNyYywgc3JjdykpOwpAQCAtMTIzMSwzMyArMTIzNSwzMyBAQAogCXJldHVybiBsYWJlbDsKIH0KIAotc3RhdGljIHNsaml0X2lucyBnZXRfY2Moc2xqaXRfc2kgdHlwZSkKK3N0YXRpYyBzbGppdF9pbnMgZ2V0X2NjKHNsaml0X3MzMiB0eXBlKQogewogCXN3aXRjaCAodHlwZSkgewogCWNhc2UgU0xKSVRfRVFVQUw6CiAJY2FzZSBTTEpJVF9NVUxfTk9UX09WRVJGTE9XOgotCWNhc2UgU0xKSVRfRF9OT1RfRVFVQUw6IC8qIFVub3JkZXJlZC4gKi8KKwljYXNlIFNMSklUX05PVF9FUVVBTF9GNjQ6IC8qIFVub3JkZXJlZC4gKi8KIAkJcmV0dXJuIERBKDB4MSk7CiAKIAljYXNlIFNMSklUX05PVF9FUVVBTDoKIAljYXNlIFNMSklUX01VTF9PVkVSRkxPVzoKLQljYXNlIFNMSklUX0RfRVFVQUw6CisJY2FzZSBTTEpJVF9FUVVBTF9GNjQ6CiAJCXJldHVybiBEQSgweDkpOwogCiAJY2FzZSBTTEpJVF9MRVNTOgotCWNhc2UgU0xKSVRfRF9HUkVBVEVSOiAvKiBVbm9yZGVyZWQuICovCisJY2FzZSBTTEpJVF9HUkVBVEVSX0Y2NDogLyogVW5vcmRlcmVkLiAqLwogCQlyZXR1cm4gREEoMHg1KTsKIAogCWNhc2UgU0xKSVRfR1JFQVRFUl9FUVVBTDoKLQljYXNlIFNMSklUX0RfTEVTU19FUVVBTDoKKwljYXNlIFNMSklUX0xFU1NfRVFVQUxfRjY0OgogCQlyZXR1cm4gREEoMHhkKTsKIAogCWNhc2UgU0xKSVRfR1JFQVRFUjoKLQljYXNlIFNMSklUX0RfR1JFQVRFUl9FUVVBTDogLyogVW5vcmRlcmVkLiAqLworCWNhc2UgU0xKSVRfR1JFQVRFUl9FUVVBTF9GNjQ6IC8qIFVub3JkZXJlZC4gKi8KIAkJcmV0dXJuIERBKDB4Yyk7CiAKIAljYXNlIFNMSklUX0xFU1NfRVFVQUw6Ci0JY2FzZSBTTEpJVF9EX0xFU1M6CisJY2FzZSBTTEpJVF9MRVNTX0Y2NDoKIAkJcmV0dXJuIERBKDB4NCk7CiAKIAljYXNlIFNMSklUX1NJR19MRVNTOgpAQCAtMTI3MywxMSArMTI3NywxMSBAQAogCQlyZXR1cm4gREEoMHgyKTsKIAogCWNhc2UgU0xKSVRfT1ZFUkZMT1c6Ci0JY2FzZSBTTEpJVF9EX1VOT1JERVJFRDoKKwljYXNlIFNMSklUX1VOT1JERVJFRF9GNjQ6CiAJCXJldHVybiBEQSgweDcpOwogCiAJY2FzZSBTTEpJVF9OT1RfT1ZFUkZMT1c6Ci0JY2FzZSBTTEpJVF9EX09SREVSRUQ6CisJY2FzZSBTTEpJVF9PUkRFUkVEX0Y2NDoKIAkJcmV0dXJuIERBKDB4Zik7CiAKIAlkZWZhdWx0OgpAQCAtMTI4Niw3ICsxMjkwLDcgQEAKIAl9CiB9CiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzdHJ1Y3Qgc2xqaXRfanVtcCogc2xqaXRfZW1pdF9qdW1wKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIHR5cGUpCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc3RydWN0IHNsaml0X2p1bXAqIHNsaml0X2VtaXRfanVtcChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgdHlwZSkKIHsKIAlzdHJ1Y3Qgc2xqaXRfanVtcCAqanVtcDsKIApAQCAtMTI5OCw3ICsxMzAyLDcgQEAKIAlzZXRfanVtcChqdW1wLCBjb21waWxlciwgdHlwZSAmIFNMSklUX1JFV1JJVEFCTEVfSlVNUCk7CiAJdHlwZSAmPSAweGZmOwogCi0JaWYgKHR5cGUgPCBTTEpJVF9EX0VRVUFMKSB7CisJaWYgKHR5cGUgPCBTTEpJVF9FUVVBTF9GNjQpIHsKIAkJanVtcC0+ZmxhZ3MgfD0gSVNfQ09ORDsKIAkJaWYgKCgoY29tcGlsZXItPmRlbGF5X3Nsb3QgJiBEU1RfSU5TX01BU0spICE9IFVOTU9WQUJMRV9JTlMpICYmICEoY29tcGlsZXItPmRlbGF5X3Nsb3QgJiBJQ0NfSVNfU0VUKSkKIAkJCWp1bXAtPmZsYWdzIHw9IElTX01PVkFCTEU7CkBAIC0xMzMyLDEwICsxMzM2LDEwIEBACiAJcmV0dXJuIGp1bXA7CiB9CiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X2lqdW1wKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIHR5cGUsIHNsaml0X3NpIHNyYywgc2xqaXRfc3cgc3JjdykKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zMzIgc2xqaXRfZW1pdF9panVtcChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgdHlwZSwgc2xqaXRfczMyIHNyYywgc2xqaXRfc3cgc3JjdykKIHsKIAlzdHJ1Y3Qgc2xqaXRfanVtcCAqanVtcCA9IE5VTEw7Ci0Jc2xqaXRfc2kgc3JjX3I7CisJc2xqaXRfczMyIHNyY19yOwogCiAJQ0hFQ0tfRVJST1IoKTsKIAlDSEVDSyhjaGVja19zbGppdF9lbWl0X2lqdW1wKGNvbXBpbGVyLCB0eXBlLCBzcmMsIHNyY3cpKTsKQEAgLTEzNjcsMTIgKzEzNzEsMTIgQEAKIAlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBOT1AsIFVOTU9WQUJMRV9JTlMpOwogfQogCi1TTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9vcF9mbGFncyhzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwKLQlzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsCi0Jc2xqaXRfc2kgc3JjLCBzbGppdF9zdyBzcmN3LAotCXNsaml0X3NpIHR5cGUpCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfczMyIHNsaml0X2VtaXRfb3BfZmxhZ3Moc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIG9wLAorCXNsaml0X3MzMiBkc3QsIHNsaml0X3N3IGRzdHcsCisJc2xqaXRfczMyIHNyYywgc2xqaXRfc3cgc3JjdywKKwlzbGppdF9zMzIgdHlwZSkKIHsKLQlzbGppdF9zaSByZWcsIGZsYWdzID0gKEdFVF9GTEFHUyhvcCkgPyBTRVRfRkxBR1MgOiAwKTsKKwlzbGppdF9zMzIgcmVnLCBmbGFncyA9IChHRVRfRkxBR1Mob3ApID8gU0VUX0ZMQUdTIDogMCk7CiAKIAlDSEVDS19FUlJPUigpOwogCUNIRUNLKGNoZWNrX3Nsaml0X2VtaXRfb3BfZmxhZ3MoY29tcGlsZXIsIG9wLCBkc3QsIGRzdHcsIHNyYywgc3JjdywgdHlwZSkpOwpAQCAtMTM5NSw3ICsxMzk5LDcgQEAKIAl9CiAKIAl0eXBlICY9IDB4ZmY7Ci0JaWYgKHR5cGUgPCBTTEpJVF9EX0VRVUFMKQorCWlmICh0eXBlIDwgU0xKSVRfRVFVQUxfRjY0KQogCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgQklDQyB8IGdldF9jYyh0eXBlKSB8IDMsIFVOTU9WQUJMRV9JTlMpKTsKIAllbHNlCiAJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBGQkZDQyB8IGdldF9jYyh0eXBlKSB8IDMsIFVOTU9WQUJMRV9JTlMpKTsKQEAgLTE0MTIsOSArMTQxNiw5IEBACiAjZW5kaWYKIH0KIAotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHN0cnVjdCBzbGppdF9jb25zdCogc2xqaXRfZW1pdF9jb25zdChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsIHNsaml0X3N3IGluaXRfdmFsdWUpCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc3RydWN0IHNsaml0X2NvbnN0KiBzbGppdF9lbWl0X2NvbnN0KHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiBkc3QsIHNsaml0X3N3IGRzdHcsIHNsaml0X3N3IGluaXRfdmFsdWUpCiB7Ci0Jc2xqaXRfc2kgcmVnOworCXNsaml0X3MzMiByZWc7CiAJc3RydWN0IHNsaml0X2NvbnN0ICpjb25zdF87CiAKIAlDSEVDS19FUlJPUl9QVFIoKTsKZGlmZiAtLWdpdCBhL2Rpc3QyL3NyYy9zbGppdC9zbGppdE5hdGl2ZVRJTEVHWF82NC5jIGIvZGlzdDIvc3JjL3Nsaml0L3Nsaml0TmF0aXZlVElMRUdYXzY0LmMKaW5kZXggNGQ0MDM5Mi4uNDYyYThiOSAxMDA2NDQKLS0tIGEvZGlzdDIvc3JjL3Nsaml0L3Nsaml0TmF0aXZlVElMRUdYXzY0LmMKKysrIGIvZGlzdDIvc3JjL3Nsaml0L3Nsaml0TmF0aXZlVElMRUdYXzY0LmMKQEAgLTQ5LDcgKzQ5LDcgQEAKICNkZWZpbmUgQUREUl9UTVAgKFNMSklUX05VTUJFUl9PRl9SRUdJU1RFUlMgKyA1KQogI2RlZmluZSBQSUNfQUREUl9SRUcgVE1QX1JFRzIKIAotc3RhdGljIFNMSklUX0NPTlNUIHNsaml0X3ViIHJlZ19tYXBbU0xKSVRfTlVNQkVSX09GX1JFR0lTVEVSUyArIDZdID0geworc3RhdGljIGNvbnN0IHNsaml0X3U4IHJlZ19tYXBbU0xKSVRfTlVNQkVSX09GX1JFR0lTVEVSUyArIDZdID0gewogCTYzLCAwLCAxLCAyLCAzLCA0LCAzMCwgMzEsIDMyLCAzMywgMzQsIDU0LCA1LCAxNiwgNiwgNwogfTsKIApAQCAtMTA2LDcgKzEwNiw3IEBACiAgKi8KICNkZWZpbmUgQ0hFQ0tfRkxBR1MobGlzdCkgKCEoZmxhZ3MgJiBVTlVTRURfREVTVCkgfHwgKG9wICYgR0VUX0ZMQUdTKH4obGlzdCkpKSkKIAotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIFNMSklUX0NPTlNUIGNoYXIgKnNsaml0X2dldF9wbGF0Zm9ybV9uYW1lKHZvaWQpCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgY29uc3QgY2hhciAqc2xqaXRfZ2V0X3BsYXRmb3JtX25hbWUodm9pZCkKIHsKIAlyZXR1cm4gIlRpbGVHWCIgU0xKSVRfQ1BVSU5GTzsKIH0KQEAgLTMwNyw3ICszMDcsNyBAQAogI2RlZmluZSBKT0ZGX1gxKHgpIGNyZWF0ZV9KdW1wT2ZmX1gxKHgpCiAjZGVmaW5lIEJPRkZfWDEoeCkgY3JlYXRlX0JyT2ZmX1gxKHgpCiAKLXN0YXRpYyBTTEpJVF9DT05TVCB0aWxlZ3hfbW5lbW9uaWMgZGF0YV90cmFuc2Zlcl9pbnN0c1sxNl0gPSB7CitzdGF0aWMgY29uc3QgdGlsZWd4X21uZW1vbmljIGRhdGFfdHJhbnNmZXJfaW5zdHNbMTZdID0gewogCS8qIHUgdyBzICovIFRJTEVHWF9PUENfU1QgICAvKiBzdCAqLywKIAkvKiB1IHcgbCAqLyBUSUxFR1hfT1BDX0xEICAgLyogbGQgKi8sCiAJLyogdSBiIHMgKi8gVElMRUdYX09QQ19TVDEgIC8qIHN0MSAqLywKQEAgLTMyNyw3ICszMjcsNyBAQAogfTsKIAogI2lmZGVmIFRJTEVHWF9KSVRfREVCVUcKLXN0YXRpYyBzbGppdF9zaSBwdXNoX2luc3RfZGVidWcoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfaW5zIGlucywgaW50IGxpbmUpCitzdGF0aWMgc2xqaXRfczMyIHB1c2hfaW5zdF9kZWJ1ZyhzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9pbnMgaW5zLCBpbnQgbGluZSkKIHsKIAlzbGppdF9pbnMgKnB0ciA9IChzbGppdF9pbnMgKillbnN1cmVfYnVmKGNvbXBpbGVyLCBzaXplb2Yoc2xqaXRfaW5zKSk7CiAJRkFJTF9JRighcHRyKTsKQEAgLTMzOCw3ICszMzgsNyBAQAogCXJldHVybiBTTEpJVF9TVUNDRVNTOwogfQogCi1zdGF0aWMgc2xqaXRfc2kgcHVzaF9pbnN0X25vZGVidWcoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfaW5zIGlucykKK3N0YXRpYyBzbGppdF9zMzIgcHVzaF9pbnN0X25vZGVidWcoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfaW5zIGlucykKIHsKIAlzbGppdF9pbnMgKnB0ciA9IChzbGppdF9pbnMgKillbnN1cmVfYnVmKGNvbXBpbGVyLCBzaXplb2Yoc2xqaXRfaW5zKSk7CiAJRkFJTF9JRighcHRyKTsKQEAgLTM0OSw3ICszNDksNyBAQAogCiAjZGVmaW5lIHB1c2hfaW5zdChhLCBiKSBwdXNoX2luc3RfZGVidWcoYSwgYiwgX19MSU5FX18pCiAjZWxzZQotc3RhdGljIHNsaml0X3NpIHB1c2hfaW5zdChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9pbnMgaW5zKQorc3RhdGljIHNsaml0X3MzMiBwdXNoX2luc3Qoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfaW5zIGlucykKIHsKIAlzbGppdF9pbnMgKnB0ciA9IChzbGppdF9pbnMgKillbnN1cmVfYnVmKGNvbXBpbGVyLCBzaXplb2Yoc2xqaXRfaW5zKSk7CiAJRkFJTF9JRighcHRyKTsKQEAgLTU1Nyw3ICs1NTcsNyBAQAogCXJldHVybiBtYXRjaDsKIH0KIAotc2xqaXRfc2kgYXNzaWduX3BpcGVzKCkKK3Nsaml0X3MzMiBhc3NpZ25fcGlwZXMoKQogewogCXVuc2lnbmVkIGxvbmcgb3V0cHV0X3JlZ2lzdGVycyA9IDA7CiAJdW5zaWduZWQgaW50IGkgPSAwOwpAQCAtNjIxLDcgKzYyMSw3IEBACiAJcmV0dXJuIGJpdHM7CiB9CiAKLXN0YXRpYyBzbGppdF9zaSB1cGRhdGVfYnVmZmVyKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIpCitzdGF0aWMgc2xqaXRfczMyIHVwZGF0ZV9idWZmZXIoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlcikKIHsKIAlpbnQgaTsKIAlpbnQgb3JpZ19pbmRleCA9IGluc3RfYnVmX2luZGV4OwpAQCAtNzMzLDcgKzczMyw3IEBACiAJU0xKSVRfQVNTRVJUX1NUT1AoKTsKIH0KIAotc3RhdGljIHNsaml0X3NpIGZsdXNoX2J1ZmZlcihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyKQorc3RhdGljIHNsaml0X3MzMiBmbHVzaF9idWZmZXIoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlcikKIHsKIAl3aGlsZSAoaW5zdF9idWZfaW5kZXggIT0gMCkgewogCQlGQUlMX0lGKHVwZGF0ZV9idWZmZXIoY29tcGlsZXIpKTsKQEAgLTc0MSw3ICs3NDEsNyBAQAogCXJldHVybiBTTEpJVF9TVUNDRVNTOwogfQogCi1zdGF0aWMgc2xqaXRfc2kgcHVzaF80X2J1ZmZlcihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCB0aWxlZ3hfbW5lbW9uaWMgb3BjLCBpbnQgb3AwLCBpbnQgb3AxLCBpbnQgb3AyLCBpbnQgb3AzLCBpbnQgbGluZSkKK3N0YXRpYyBzbGppdF9zMzIgcHVzaF80X2J1ZmZlcihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCB0aWxlZ3hfbW5lbW9uaWMgb3BjLCBpbnQgb3AwLCBpbnQgb3AxLCBpbnQgb3AyLCBpbnQgb3AzLCBpbnQgbGluZSkKIHsKIAlpZiAoaW5zdF9idWZfaW5kZXggPT0gVElMRUdYX01BWF9JTlNUUlVDVElPTlNfUEVSX0JVTkRMRSkKIAkJRkFJTF9JRih1cGRhdGVfYnVmZmVyKGNvbXBpbGVyKSk7CkBAIC03NjEsNyArNzYxLDcgQEAKIAlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKIH0KIAotc3RhdGljIHNsaml0X3NpIHB1c2hfM19idWZmZXIoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgdGlsZWd4X21uZW1vbmljIG9wYywgaW50IG9wMCwgaW50IG9wMSwgaW50IG9wMiwgaW50IGxpbmUpCitzdGF0aWMgc2xqaXRfczMyIHB1c2hfM19idWZmZXIoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgdGlsZWd4X21uZW1vbmljIG9wYywgaW50IG9wMCwgaW50IG9wMSwgaW50IG9wMiwgaW50IGxpbmUpCiB7CiAJaWYgKGluc3RfYnVmX2luZGV4ID09IFRJTEVHWF9NQVhfSU5TVFJVQ1RJT05TX1BFUl9CVU5ETEUpCiAJCUZBSUxfSUYodXBkYXRlX2J1ZmZlcihjb21waWxlcikpOwpAQCAtODIyLDcgKzgyMiw3IEBACiAJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBzbGppdF9zaSBwdXNoXzJfYnVmZmVyKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHRpbGVneF9tbmVtb25pYyBvcGMsIGludCBvcDAsIGludCBvcDEsIGludCBsaW5lKQorc3RhdGljIHNsaml0X3MzMiBwdXNoXzJfYnVmZmVyKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHRpbGVneF9tbmVtb25pYyBvcGMsIGludCBvcDAsIGludCBvcDEsIGludCBsaW5lKQogewogCWlmIChpbnN0X2J1Zl9pbmRleCA9PSBUSUxFR1hfTUFYX0lOU1RSVUNUSU9OU19QRVJfQlVORExFKQogCQlGQUlMX0lGKHVwZGF0ZV9idWZmZXIoY29tcGlsZXIpKTsKQEAgLTg2Nyw3ICs4NjcsNyBAQAogCXJldHVybiBTTEpJVF9TVUNDRVNTOwogfQogCi1zdGF0aWMgc2xqaXRfc2kgcHVzaF8wX2J1ZmZlcihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCB0aWxlZ3hfbW5lbW9uaWMgb3BjLCBpbnQgbGluZSkKK3N0YXRpYyBzbGppdF9zMzIgcHVzaF8wX2J1ZmZlcihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCB0aWxlZ3hfbW5lbW9uaWMgb3BjLCBpbnQgbGluZSkKIHsKIAlpZiAoaW5zdF9idWZfaW5kZXggPT0gVElMRUdYX01BWF9JTlNUUlVDVElPTlNfUEVSX0JVTkRMRSkKIAkJRkFJTF9JRih1cGRhdGVfYnVmZmVyKGNvbXBpbGVyKSk7CkBAIC04ODMsNyArODgzLDcgQEAKIAlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKIH0KIAotc3RhdGljIHNsaml0X3NpIHB1c2hfanJfYnVmZmVyKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHRpbGVneF9tbmVtb25pYyBvcGMsIGludCBvcDAsIGludCBsaW5lKQorc3RhdGljIHNsaml0X3MzMiBwdXNoX2pyX2J1ZmZlcihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCB0aWxlZ3hfbW5lbW9uaWMgb3BjLCBpbnQgb3AwLCBpbnQgbGluZSkKIHsKIAlpZiAoaW5zdF9idWZfaW5kZXggPT0gVElMRUdYX01BWF9JTlNUUlVDVElPTlNfUEVSX0JVTkRMRSkKIAkJRkFJTF9JRih1cGRhdGVfYnVmZmVyKGNvbXBpbGVyKSk7CkBAIC0xMTE3LDcgKzExMTcsNyBAQAogCXJldHVybiBjb2RlOwogfQogCi1zdGF0aWMgc2xqaXRfc2kgbG9hZF9pbW1lZGlhdGUoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgZHN0X2FyLCBzbGppdF9zdyBpbW0pCitzdGF0aWMgc2xqaXRfczMyIGxvYWRfaW1tZWRpYXRlKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiBkc3RfYXIsIHNsaml0X3N3IGltbSkKIHsKIAogCWlmIChpbW0gPD0gU0lNTV8xNkJJVF9NQVggJiYgaW1tID49IFNJTU1fMTZCSVRfTUlOKQpAQCAtMTE0MCw3ICsxMTQwLDcgQEAKIAlyZXR1cm4gU0hMMTZJTlNMSShkc3RfYXIsIGRzdF9hciwgaW1tKTsKIH0KIAotc3RhdGljIHNsaml0X3NpIGVtaXRfY29uc3Qoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgZHN0X2FyLCBzbGppdF9zdyBpbW0sIGludCBmbHVzaCkKK3N0YXRpYyBzbGppdF9zMzIgZW1pdF9jb25zdChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgZHN0X2FyLCBzbGppdF9zdyBpbW0sIGludCBmbHVzaCkKIHsKIAkvKiBTaG91bGQgKm5vdCogYmUgb3B0aW1pemVkIGFzIGxvYWRfaW1tZWRpYXRlLCBhcyBwY3JlIHJlbG9jYXRpb24KIAkgICBtZWNoYW5pc20gd2lsbCBtYXRjaCB0aGlzIGZpeGVkIDQtaW5zdHJ1Y3Rpb24gcGF0dGVybi4gKi8KQEAgLTExNTUsNyArMTE1NSw3IEBACiAJcmV0dXJuIFNITDE2SU5TTEkoZHN0X2FyLCBkc3RfYXIsIGltbSk7CiB9CiAKLXN0YXRpYyBzbGppdF9zaSBlbWl0X2NvbnN0XzY0KHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIGRzdF9hciwgc2xqaXRfc3cgaW1tLCBpbnQgZmx1c2gpCitzdGF0aWMgc2xqaXRfczMyIGVtaXRfY29uc3RfNjQoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIGRzdF9hciwgc2xqaXRfc3cgaW1tLCBpbnQgZmx1c2gpCiB7CiAJLyogU2hvdWxkICpub3QqIGJlIG9wdGltaXplZCBhcyBsb2FkX2ltbWVkaWF0ZSwgYXMgcGNyZSByZWxvY2F0aW9uCiAJICAgbWVjaGFuaXNtIHdpbGwgbWF0Y2ggdGhpcyBmaXhlZCA0LWluc3RydWN0aW9uIHBhdHRlcm4uICovCkBAIC0xMTcyLDEyICsxMTcyLDEyIEBACiAJcmV0dXJuIFNITDE2SU5TTEkocmVnX21hcFtkc3RfYXJdLCByZWdfbWFwW2RzdF9hcl0sIGltbSk7CiB9CiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X2VudGVyKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsCi0Jc2xqaXRfc2kgb3B0aW9ucywgc2xqaXRfc2kgYXJncywgc2xqaXRfc2kgc2NyYXRjaGVzLCBzbGppdF9zaSBzYXZlZHMsCi0Jc2xqaXRfc2kgZnNjcmF0Y2hlcywgc2xqaXRfc2kgZnNhdmVkcywgc2xqaXRfc2kgbG9jYWxfc2l6ZSkKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zMzIgc2xqaXRfZW1pdF9lbnRlcihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLAorCXNsaml0X3MzMiBvcHRpb25zLCBzbGppdF9zMzIgYXJncywgc2xqaXRfczMyIHNjcmF0Y2hlcywgc2xqaXRfczMyIHNhdmVkcywKKwlzbGppdF9zMzIgZnNjcmF0Y2hlcywgc2xqaXRfczMyIGZzYXZlZHMsIHNsaml0X3MzMiBsb2NhbF9zaXplKQogewogCXNsaml0X2lucyBiYXNlOwotCXNsaml0X3NpIGksIHRtcDsKKwlzbGppdF9zMzIgaSwgdG1wOwogIAogCUNIRUNLX0VSUk9SKCk7CiAJQ0hFQ0soY2hlY2tfc2xqaXRfZW1pdF9lbnRlcihjb21waWxlciwgb3B0aW9ucywgYXJncywgc2NyYXRjaGVzLCBzYXZlZHMsIGZzY3JhdGNoZXMsIGZzYXZlZHMsIGxvY2FsX3NpemUpKTsKQEAgLTEyMjIsOSArMTIyMiw5IEBACiAJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CiB9CiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9zZXRfY29udGV4dChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLAotCXNsaml0X3NpIG9wdGlvbnMsIHNsaml0X3NpIGFyZ3MsIHNsaml0X3NpIHNjcmF0Y2hlcywgc2xqaXRfc2kgc2F2ZWRzLAotCXNsaml0X3NpIGZzY3JhdGNoZXMsIHNsaml0X3NpIGZzYXZlZHMsIHNsaml0X3NpIGxvY2FsX3NpemUpCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfczMyIHNsaml0X3NldF9jb250ZXh0KHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsCisJc2xqaXRfczMyIG9wdGlvbnMsIHNsaml0X3MzMiBhcmdzLCBzbGppdF9zMzIgc2NyYXRjaGVzLCBzbGppdF9zMzIgc2F2ZWRzLAorCXNsaml0X3MzMiBmc2NyYXRjaGVzLCBzbGppdF9zMzIgZnNhdmVkcywgc2xqaXRfczMyIGxvY2FsX3NpemUpCiB7CiAJQ0hFQ0tfRVJST1IoKTsKIAlDSEVDSyhjaGVja19zbGppdF9zZXRfY29udGV4dChjb21waWxlciwgb3B0aW9ucywgYXJncywgc2NyYXRjaGVzLCBzYXZlZHMsIGZzY3JhdGNoZXMsIGZzYXZlZHMsIGxvY2FsX3NpemUpKTsKQEAgLTEyMzYsMTIgKzEyMzYsMTIgQEAKIAlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKIH0KIAotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfcmV0dXJuKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIG9wLCBzbGppdF9zaSBzcmMsIHNsaml0X3N3IHNyY3cpCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfczMyIHNsaml0X2VtaXRfcmV0dXJuKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiBvcCwgc2xqaXRfczMyIHNyYywgc2xqaXRfc3cgc3JjdykKIHsKLQlzbGppdF9zaSBsb2NhbF9zaXplOworCXNsaml0X3MzMiBsb2NhbF9zaXplOwogCXNsaml0X2lucyBiYXNlOwotCXNsaml0X3NpIGksIHRtcDsKLQlzbGppdF9zaSBzYXZlZHM7CisJc2xqaXRfczMyIGksIHRtcDsKKwlzbGppdF9zMzIgc2F2ZWRzOwogCiAJQ0hFQ0tfRVJST1IoKTsKIAlDSEVDSyhjaGVja19zbGppdF9lbWl0X3JldHVybihjb21waWxlciwgb3AsIHNyYywgc3JjdykpOwpAQCAtMTI4NSw3ICsxMjg1LDcgQEAKIC8qIHJlZ19hciBpcyBhbiBhYnNvdWx1dGUgcmVnaXN0ZXIhICovCiAKIC8qIENhbiBwZXJmb3JtIGFuIG9wZXJhdGlvbiB1c2luZyBhdCBtb3N0IDEgaW5zdHJ1Y3Rpb24uICovCi1zdGF0aWMgc2xqaXRfc2kgZ2V0cHV0X2FyZ19mYXN0KHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIGZsYWdzLCBzbGppdF9zaSByZWdfYXIsIHNsaml0X3NpIGFyZywgc2xqaXRfc3cgYXJndykKK3N0YXRpYyBzbGppdF9zMzIgZ2V0cHV0X2FyZ19mYXN0KHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiBmbGFncywgc2xqaXRfczMyIHJlZ19hciwgc2xqaXRfczMyIGFyZywgc2xqaXRfc3cgYXJndykKIHsKIAlTTEpJVF9BU1NFUlQoYXJnICYgU0xKSVRfTUVNKTsKIApAQCAtMTMxMSw3ICsxMzExLDcgQEAKIC8qIFNlZSBnZXRwdXRfYXJnIGJlbG93LgogICAgTm90ZTogY2FuX2NhY2hlIGlzIGNhbGxlZCBvbmx5IGZvciBiaW5hcnkgb3BlcmF0b3JzLiBUaG9zZQogICAgb3BlcmF0b3JzIGFsd2F5cyB1c2VzIHdvcmQgYXJndW1lbnRzIHdpdGhvdXQgd3JpdGUgYmFjay4gKi8KLXN0YXRpYyBzbGppdF9zaSBjYW5fY2FjaGUoc2xqaXRfc2kgYXJnLCBzbGppdF9zdyBhcmd3LCBzbGppdF9zaSBuZXh0X2FyZywgc2xqaXRfc3cgbmV4dF9hcmd3KQorc3RhdGljIHNsaml0X3MzMiBjYW5fY2FjaGUoc2xqaXRfczMyIGFyZywgc2xqaXRfc3cgYXJndywgc2xqaXRfczMyIG5leHRfYXJnLCBzbGppdF9zdyBuZXh0X2FyZ3cpCiB7CiAJU0xKSVRfQVNTRVJUKChhcmcgJiBTTEpJVF9NRU0pICYmIChuZXh0X2FyZyAmIFNMSklUX01FTSkpOwogCkBAIC0xMzM3LDkgKzEzMzcsOSBAQAogfQogCiAvKiBFbWl0IHRoZSBuZWNlc3NhcnkgaW5zdHJ1Y3Rpb25zLiBTZWUgY2FuX2NhY2hlIGFib3ZlLiAqLwotc3RhdGljIHNsaml0X3NpIGdldHB1dF9hcmcoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgZmxhZ3MsIHNsaml0X3NpIHJlZ19hciwgc2xqaXRfc2kgYXJnLCBzbGppdF9zdyBhcmd3LCBzbGppdF9zaSBuZXh0X2FyZywgc2xqaXRfc3cgbmV4dF9hcmd3KQorc3RhdGljIHNsaml0X3MzMiBnZXRwdXRfYXJnKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiBmbGFncywgc2xqaXRfczMyIHJlZ19hciwgc2xqaXRfczMyIGFyZywgc2xqaXRfc3cgYXJndywgc2xqaXRfczMyIG5leHRfYXJnLCBzbGppdF9zdyBuZXh0X2FyZ3cpCiB7Ci0Jc2xqaXRfc2kgdG1wX2FyLCBiYXNlOworCXNsaml0X3MzMiB0bXBfYXIsIGJhc2U7CiAKIAlTTEpJVF9BU1NFUlQoYXJnICYgU0xKSVRfTUVNKTsKIAlpZiAoIShuZXh0X2FyZyAmIFNMSklUX01FTSkpIHsKQEAgLTE1MzAsNyArMTUzMCw3IEBACiAJCXJldHVybiBQQjIoZGF0YV90cmFuc2Zlcl9pbnN0c1tmbGFncyAmIE1FTV9NQVNLXSwgdG1wX2FyLCByZWdfYXIpOwogfQogCi1zdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X3NpIGVtaXRfb3BfbWVtKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIGZsYWdzLCBzbGppdF9zaSByZWdfYXIsIHNsaml0X3NpIGFyZywgc2xqaXRfc3cgYXJndykKK3N0YXRpYyBTTEpJVF9JTkxJTkUgc2xqaXRfczMyIGVtaXRfb3BfbWVtKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiBmbGFncywgc2xqaXRfczMyIHJlZ19hciwgc2xqaXRfczMyIGFyZywgc2xqaXRfc3cgYXJndykKIHsKIAlpZiAoZ2V0cHV0X2FyZ19mYXN0KGNvbXBpbGVyLCBmbGFncywgcmVnX2FyLCBhcmcsIGFyZ3cpKQogCQlyZXR1cm4gY29tcGlsZXItPmVycm9yOwpAQCAtMTU0MCwxNCArMTU0MCwxNCBAQAogCXJldHVybiBnZXRwdXRfYXJnKGNvbXBpbGVyLCBmbGFncywgcmVnX2FyLCBhcmcsIGFyZ3csIDAsIDApOwogfQogCi1zdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X3NpIGVtaXRfb3BfbWVtMihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBmbGFncywgc2xqaXRfc2kgcmVnLCBzbGppdF9zaSBhcmcxLCBzbGppdF9zdyBhcmcxdywgc2xqaXRfc2kgYXJnMiwgc2xqaXRfc3cgYXJnMncpCitzdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X3MzMiBlbWl0X29wX21lbTIoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIGZsYWdzLCBzbGppdF9zMzIgcmVnLCBzbGppdF9zMzIgYXJnMSwgc2xqaXRfc3cgYXJnMXcsIHNsaml0X3MzMiBhcmcyLCBzbGppdF9zdyBhcmcydykKIHsKIAlpZiAoZ2V0cHV0X2FyZ19mYXN0KGNvbXBpbGVyLCBmbGFncywgcmVnLCBhcmcxLCBhcmcxdykpCiAJCXJldHVybiBjb21waWxlci0+ZXJyb3I7CiAJcmV0dXJuIGdldHB1dF9hcmcoY29tcGlsZXIsIGZsYWdzLCByZWcsIGFyZzEsIGFyZzF3LCBhcmcyLCBhcmcydyk7CiB9CiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X2Zhc3RfZW50ZXIoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3KQorU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3MzMiBzbGppdF9lbWl0X2Zhc3RfZW50ZXIoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIGRzdCwgc2xqaXRfc3cgZHN0dykKIHsKIAlDSEVDS19FUlJPUigpOwogCUNIRUNLKGNoZWNrX3Nsaml0X2VtaXRfZmFzdF9lbnRlcihjb21waWxlciwgZHN0LCBkc3R3KSk7CkBAIC0xNTY0LDcgKzE1NjQsNyBAQAogCXJldHVybiBlbWl0X29wX21lbShjb21waWxlciwgV09SRF9EQVRBLCBSQSwgZHN0LCBkc3R3KTsKIH0KIAotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfZmFzdF9yZXR1cm4oc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgc3JjLCBzbGppdF9zdyBzcmN3KQorU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3MzMiBzbGppdF9lbWl0X2Zhc3RfcmV0dXJuKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiBzcmMsIHNsaml0X3N3IHNyY3cpCiB7CiAJQ0hFQ0tfRVJST1IoKTsKIAlDSEVDSyhjaGVja19zbGppdF9lbWl0X2Zhc3RfcmV0dXJuKGNvbXBpbGVyLCBzcmMsIHNyY3cpKTsKQEAgLTE1ODIsOSArMTU4Miw5IEBACiAJcmV0dXJuIEpSKFJBKTsKIH0KIAotc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9zaSBlbWl0X3NpbmdsZV9vcChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwgc2xqaXRfc2kgZmxhZ3MsIHNsaml0X3NpIGRzdCwgc2xqaXRfc2kgc3JjMSwgc2xqaXRfc3cgc3JjMikKK3N0YXRpYyBTTEpJVF9JTkxJTkUgc2xqaXRfczMyIGVtaXRfc2luZ2xlX29wKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiBvcCwgc2xqaXRfczMyIGZsYWdzLCBzbGppdF9zMzIgZHN0LCBzbGppdF9zMzIgc3JjMSwgc2xqaXRfc3cgc3JjMikKIHsKLQlzbGppdF9zaSBvdmVyZmxvd19yYSA9IDA7CisJc2xqaXRfczMyIG92ZXJmbG93X3JhID0gMDsKIAogCXN3aXRjaCAoR0VUX09QQ09ERShvcCkpIHsKIAljYXNlIFNMSklUX01PVjoKQEAgLTE1OTQsMTEgKzE1OTQsMTEgQEAKIAkJCXJldHVybiBBREQocmVnX21hcFtkc3RdLCByZWdfbWFwW3NyYzJdLCBaRVJPKTsKIAkJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CiAKLQljYXNlIFNMSklUX01PVl9VSToKLQljYXNlIFNMSklUX01PVl9TSToKKwljYXNlIFNMSklUX01PVl9VMzI6CisJY2FzZSBTTEpJVF9NT1ZfUzMyOgogCQlTTEpJVF9BU1NFUlQoc3JjMSA9PSBUTVBfUkVHMSAmJiAhKGZsYWdzICYgU1JDMl9JTU0pKTsKIAkJaWYgKChmbGFncyAmIChSRUdfREVTVCB8IFJFRzJfU09VUkNFKSkgPT0gKFJFR19ERVNUIHwgUkVHMl9TT1VSQ0UpKSB7Ci0JCQlpZiAob3AgPT0gU0xKSVRfTU9WX1NJKQorCQkJaWYgKG9wID09IFNMSklUX01PVl9TMzIpCiAJCQkJcmV0dXJuIEJGRVhUUyhyZWdfbWFwW2RzdF0sIHJlZ19tYXBbc3JjMl0sIDAsIDMxKTsKIAogCQkJcmV0dXJuIEJGRVhUVShyZWdfbWFwW2RzdF0sIHJlZ19tYXBbc3JjMl0sIDAsIDMxKTsKQEAgLTE2MDksMTEgKzE2MDksMTEgQEAKIAogCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKIAotCWNhc2UgU0xKSVRfTU9WX1VCOgotCWNhc2UgU0xKSVRfTU9WX1NCOgorCWNhc2UgU0xKSVRfTU9WX1U4OgorCWNhc2UgU0xKSVRfTU9WX1M4OgogCQlTTEpJVF9BU1NFUlQoc3JjMSA9PSBUTVBfUkVHMSAmJiAhKGZsYWdzICYgU1JDMl9JTU0pKTsKIAkJaWYgKChmbGFncyAmIChSRUdfREVTVCB8IFJFRzJfU09VUkNFKSkgPT0gKFJFR19ERVNUIHwgUkVHMl9TT1VSQ0UpKSB7Ci0JCQlpZiAob3AgPT0gU0xKSVRfTU9WX1NCKQorCQkJaWYgKG9wID09IFNMSklUX01PVl9TOCkKIAkJCQlyZXR1cm4gQkZFWFRTKHJlZ19tYXBbZHN0XSwgcmVnX21hcFtzcmMyXSwgMCwgNyk7CiAKIAkJCXJldHVybiBCRkVYVFUocmVnX21hcFtkc3RdLCByZWdfbWFwW3NyYzJdLCAwLCA3KTsKQEAgLTE2MjQsMTEgKzE2MjQsMTEgQEAKIAogCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKIAotCWNhc2UgU0xKSVRfTU9WX1VIOgotCWNhc2UgU0xKSVRfTU9WX1NIOgorCWNhc2UgU0xKSVRfTU9WX1UxNjoKKwljYXNlIFNMSklUX01PVl9TMTY6CiAJCVNMSklUX0FTU0VSVChzcmMxID09IFRNUF9SRUcxICYmICEoZmxhZ3MgJiBTUkMyX0lNTSkpOwogCQlpZiAoKGZsYWdzICYgKFJFR19ERVNUIHwgUkVHMl9TT1VSQ0UpKSA9PSAoUkVHX0RFU1QgfCBSRUcyX1NPVVJDRSkpIHsKLQkJCWlmIChvcCA9PSBTTEpJVF9NT1ZfU0gpCisJCQlpZiAob3AgPT0gU0xKSVRfTU9WX1MxNikKIAkJCQlyZXR1cm4gQkZFWFRTKHJlZ19tYXBbZHN0XSwgcmVnX21hcFtzcmMyXSwgMCwgMTUpOwogCiAJCQlyZXR1cm4gQkZFWFRVKHJlZ19tYXBbZHN0XSwgcmVnX21hcFtzcmMyXSwgMCwgMTUpOwpAQCAtMTk1NiwxNiArMTk1NiwxNiBAQAogCXJldHVybiBTTEpJVF9TVUNDRVNTOwogfQogCi1zdGF0aWMgc2xqaXRfc2kgZW1pdF9vcChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwgc2xqaXRfc2kgZmxhZ3MsIHNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dywgc2xqaXRfc2kgc3JjMSwgc2xqaXRfc3cgc3JjMXcsIHNsaml0X3NpIHNyYzIsIHNsaml0X3N3IHNyYzJ3KQorc3RhdGljIHNsaml0X3MzMiBlbWl0X29wKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiBvcCwgc2xqaXRfczMyIGZsYWdzLCBzbGppdF9zMzIgZHN0LCBzbGppdF9zdyBkc3R3LCBzbGppdF9zMzIgc3JjMSwgc2xqaXRfc3cgc3JjMXcsIHNsaml0X3MzMiBzcmMyLCBzbGppdF9zdyBzcmMydykKIHsKIAkvKiBhcmcxIGdvZXMgdG8gVE1QX1JFRzEgb3Igc3JjIHJlZy4KIAkgICBhcmcyIGdvZXMgdG8gVE1QX1JFRzIsIGltbSBvciBzcmMgcmVnLgogCSAgIFRNUF9SRUczIGNhbiBiZSB1c2VkIGZvciBjYWNoaW5nLgogCSAgIHJlc3VsdCBnb2VzIHRvIFRNUF9SRUcyLCBzbyBwdXQgcmVzdWx0IGNhbiB1c2UgVE1QX1JFRzEgYW5kIFRNUF9SRUczLiAqLwotCXNsaml0X3NpIGRzdF9yID0gVE1QX1JFRzI7Ci0Jc2xqaXRfc2kgc3JjMV9yOworCXNsaml0X3MzMiBkc3RfciA9IFRNUF9SRUcyOworCXNsaml0X3MzMiBzcmMxX3I7CiAJc2xqaXRfc3cgc3JjMl9yID0gMDsKLQlzbGppdF9zaSBzdWdnX3NyYzJfciA9IFRNUF9SRUcyOworCXNsaml0X3MzMiBzdWdnX3NyYzJfciA9IFRNUF9SRUcyOwogCiAJaWYgKCEoZmxhZ3MgJiBBTFRfS0VFUF9DQUNIRSkpIHsKIAkJY29tcGlsZXItPmNhY2hlX2FyZyA9IDA7CkBAIC0xOTczLDE0ICsxOTczLDE0IEBACiAJfQogCiAJaWYgKFNMSklUX1VOTElLRUxZKGRzdCA9PSBTTEpJVF9VTlVTRUQpKSB7Ci0JCWlmIChvcCA+PSBTTEpJVF9NT1YgJiYgb3AgPD0gU0xKSVRfTU9WVV9TSSAmJiAhKHNyYzIgJiBTTEpJVF9NRU0pKQorCQlpZiAob3AgPj0gU0xKSVRfTU9WICYmIG9wIDw9IFNMSklUX01PVlVfUzMyICYmICEoc3JjMiAmIFNMSklUX01FTSkpCiAJCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKIAkJaWYgKEdFVF9GTEFHUyhvcCkpCiAJCQlmbGFncyB8PSBVTlVTRURfREVTVDsKIAl9IGVsc2UgaWYgKEZBU1RfSVNfUkVHKGRzdCkpIHsKIAkJZHN0X3IgPSBkc3Q7CiAJCWZsYWdzIHw9IFJFR19ERVNUOwotCQlpZiAob3AgPj0gU0xKSVRfTU9WICYmIG9wIDw9IFNMSklUX01PVlVfU0kpCisJCWlmIChvcCA+PSBTTEpJVF9NT1YgJiYgb3AgPD0gU0xKSVRfTU9WVV9TMzIpCiAJCQlzdWdnX3NyYzJfciA9IGRzdF9yOwogCX0gZWxzZSBpZiAoKGRzdCAmIFNMSklUX01FTSkgJiYgIWdldHB1dF9hcmdfZmFzdChjb21waWxlciwgZmxhZ3MgfCBBUkdfVEVTVCwgVE1QX1JFRzFfbWFwcGVkLCBkc3QsIGRzdHcpKQogCQlmbGFncyB8PSBTTE9XX0RFU1Q7CkBAIC0yMDMzLDcgKzIwMzMsNyBAQAogCWlmIChGQVNUX0lTX1JFRyhzcmMyKSkgewogCQlzcmMyX3IgPSBzcmMyOwogCQlmbGFncyB8PSBSRUcyX1NPVVJDRTsKLQkJaWYgKCEoZmxhZ3MgJiBSRUdfREVTVCkgJiYgb3AgPj0gU0xKSVRfTU9WICYmIG9wIDw9IFNMSklUX01PVlVfU0kpCisJCWlmICghKGZsYWdzICYgUkVHX0RFU1QpICYmIG9wID49IFNMSklUX01PViAmJiBvcCA8PSBTTEpJVF9NT1ZVX1MzMikKIAkJCWRzdF9yID0gc3JjMl9yOwogCX0gZWxzZSBpZiAoc3JjMiAmIFNMSklUX0lNTSkgewogCQlpZiAoIShmbGFncyAmIFNSQzJfSU1NKSkgewpAQCAtMjA0Miw3ICsyMDQyLDcgQEAKIAkJCQlzcmMyX3IgPSBzdWdnX3NyYzJfcjsKIAkJCX0gZWxzZSB7CiAJCQkJc3JjMl9yID0gMDsKLQkJCQlpZiAoKG9wID49IFNMSklUX01PViAmJiBvcCA8PSBTTEpJVF9NT1ZVX1NJKSAmJiAoZHN0ICYgU0xKSVRfTUVNKSkKKwkJCQlpZiAoKG9wID49IFNMSklUX01PViAmJiBvcCA8PSBTTEpJVF9NT1ZVX1MzMikgJiYgKGRzdCAmIFNMSklUX01FTSkpCiAJCQkJCWRzdF9yID0gMDsKIAkJCX0KIAkJfQpAQCAtMjA4MiwxMSArMjA4MiwxMSBAQAogCXJldHVybiBTTEpJVF9TVUNDRVNTOwogfQogCi1TTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9vcF9mbGFncyhzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwgc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3LCBzbGppdF9zaSBzcmMsIHNsaml0X3N3IHNyY3csIHNsaml0X3NpIHR5cGUpCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfczMyIHNsaml0X2VtaXRfb3BfZmxhZ3Moc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIG9wLCBzbGppdF9zMzIgZHN0LCBzbGppdF9zdyBkc3R3LCBzbGppdF9zMzIgc3JjLCBzbGppdF9zdyBzcmN3LCBzbGppdF9zMzIgdHlwZSkKIHsKLQlzbGppdF9zaSBzdWdnX2RzdF9hciwgZHN0X2FyOwotCXNsaml0X3NpIGZsYWdzID0gR0VUX0FMTF9GTEFHUyhvcCk7Ci0Jc2xqaXRfc2kgbWVtX3R5cGUgPSAob3AgJiBTTEpJVF9JTlRfT1ApID8gKElOVF9EQVRBIHwgU0lHTkVEX0RBVEEpIDogV09SRF9EQVRBOworCXNsaml0X3MzMiBzdWdnX2RzdF9hciwgZHN0X2FyOworCXNsaml0X3MzMiBmbGFncyA9IEdFVF9BTExfRkxBR1Mob3ApOworCXNsaml0X3MzMiBtZW1fdHlwZSA9IChvcCAmIFNMSklUX0kzMl9PUCkgPyAoSU5UX0RBVEEgfCBTSUdORURfREFUQSkgOiBXT1JEX0RBVEE7CiAKIAlDSEVDS19FUlJPUigpOwogCUNIRUNLKGNoZWNrX3Nsaml0X2VtaXRfb3BfZmxhZ3MoY29tcGlsZXIsIG9wLCBkc3QsIGRzdHcsIHNyYywgc3JjdywgdHlwZSkpOwpAQCAtMjA5Niw3ICsyMDk2LDcgQEAKIAkJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CiAKIAlvcCA9IEdFVF9PUENPREUob3ApOwotCWlmIChvcCA9PSBTTEpJVF9NT1ZfU0kgfHwgb3AgPT0gU0xKSVRfTU9WX1VJKQorCWlmIChvcCA9PSBTTEpJVF9NT1ZfUzMyIHx8IG9wID09IFNMSklUX01PVl9VMzIpCiAJCW1lbV90eXBlID0gSU5UX0RBVEEgfCBTSUdORURfREFUQTsKIAlzdWdnX2RzdF9hciA9IHJlZ19tYXBbKG9wIDwgU0xKSVRfQUREICYmIEZBU1RfSVNfUkVHKGRzdCkpID8gZHN0IDogVE1QX1JFRzJdOwogCkBAIC0yMTY4LDcgKzIxNjgsNyBAQAogCXJldHVybiBTTEpJVF9TVUNDRVNTOwogfQogCi1TTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9vcDAoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3ApIHsKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zMzIgc2xqaXRfZW1pdF9vcDAoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIG9wKSB7CiAJQ0hFQ0tfRVJST1IoKTsKIAlDSEVDSyhjaGVja19zbGppdF9lbWl0X29wMChjb21waWxlciwgb3ApKTsKIApAQCAtMjE4MCwxNyArMjE4MCwxOSBAQAogCWNhc2UgU0xKSVRfQlJFQUtQT0lOVDoKIAkJcmV0dXJuIFBJKEJQVCk7CiAKLQljYXNlIFNMSklUX0xVTVVMOgotCWNhc2UgU0xKSVRfTFNNVUw6Ci0JY2FzZSBTTEpJVF9VRElWSToKLQljYXNlIFNMSklUX1NESVZJOgorCWNhc2UgU0xKSVRfTE1VTF9VVzoKKwljYXNlIFNMSklUX0xNVUxfU1c6CisJY2FzZSBTTEpJVF9ESVZNT0RfVVc6CisJY2FzZSBTTEpJVF9ESVZNT0RfU1c6CisJY2FzZSBTTEpJVF9ESVZfVVc6CisJY2FzZSBTTEpJVF9ESVZfU1c6CiAJCVNMSklUX0FTU0VSVF9TVE9QKCk7CiAJfQogCiAJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CiB9CiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X29wMShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwgc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3LCBzbGppdF9zaSBzcmMsIHNsaml0X3N3IHNyY3cpCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfczMyIHNsaml0X2VtaXRfb3AxKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiBvcCwgc2xqaXRfczMyIGRzdCwgc2xqaXRfc3cgZHN0dywgc2xqaXRfczMyIHNyYywgc2xqaXRfc3cgc3JjdykKIHsKIAlDSEVDS19FUlJPUigpOwogCUNIRUNLKGNoZWNrX3Nsaml0X2VtaXRfb3AxKGNvbXBpbGVyLCBvcCwgZHN0LCBkc3R3LCBzcmMsIHNyY3cpKTsKQEAgLTIyMDIsNDUgKzIyMDQsNDUgQEAKIAljYXNlIFNMSklUX01PVl9QOgogCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfTU9WLCBXT1JEX0RBVEEsIGRzdCwgZHN0dywgVE1QX1JFRzEsIDAsIHNyYywgc3Jjdyk7CiAKLQljYXNlIFNMSklUX01PVl9VSToKLQkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01PVl9VSSwgSU5UX0RBVEEsIGRzdCwgZHN0dywgVE1QX1JFRzEsIDAsIHNyYywgc3Jjdyk7CisJY2FzZSBTTEpJVF9NT1ZfVTMyOgorCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfTU9WX1UzMiwgSU5UX0RBVEEsIGRzdCwgZHN0dywgVE1QX1JFRzEsIDAsIHNyYywgc3Jjdyk7CiAKLQljYXNlIFNMSklUX01PVl9TSToKLQkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01PVl9TSSwgSU5UX0RBVEEgfCBTSUdORURfREFUQSwgZHN0LCBkc3R3LCBUTVBfUkVHMSwgMCwgc3JjLCBzcmN3KTsKKwljYXNlIFNMSklUX01PVl9TMzI6CisJCXJldHVybiBlbWl0X29wKGNvbXBpbGVyLCBTTEpJVF9NT1ZfUzMyLCBJTlRfREFUQSB8IFNJR05FRF9EQVRBLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIHNyY3cpOwogCi0JY2FzZSBTTEpJVF9NT1ZfVUI6Ci0JCXJldHVybiBlbWl0X29wKGNvbXBpbGVyLCBTTEpJVF9NT1ZfVUIsIEJZVEVfREFUQSwgZHN0LCBkc3R3LCBUTVBfUkVHMSwgMCwgc3JjLCAoc3JjICYgU0xKSVRfSU1NKSA/IChzbGppdF91Yikgc3JjdyA6IHNyY3cpOworCWNhc2UgU0xKSVRfTU9WX1U4OgorCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfTU9WX1U4LCBCWVRFX0RBVEEsIGRzdCwgZHN0dywgVE1QX1JFRzEsIDAsIHNyYywgKHNyYyAmIFNMSklUX0lNTSkgPyAoc2xqaXRfdTgpIHNyY3cgOiBzcmN3KTsKIAotCWNhc2UgU0xKSVRfTU9WX1NCOgotCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfTU9WX1NCLCBCWVRFX0RBVEEgfCBTSUdORURfREFUQSwgZHN0LCBkc3R3LCBUTVBfUkVHMSwgMCwgc3JjLCAoc3JjICYgU0xKSVRfSU1NKSA/IChzbGppdF9zYikgc3JjdyA6IHNyY3cpOworCWNhc2UgU0xKSVRfTU9WX1M4OgorCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfTU9WX1M4LCBCWVRFX0RBVEEgfCBTSUdORURfREFUQSwgZHN0LCBkc3R3LCBUTVBfUkVHMSwgMCwgc3JjLCAoc3JjICYgU0xKSVRfSU1NKSA/IChzbGppdF9zOCkgc3JjdyA6IHNyY3cpOwogCi0JY2FzZSBTTEpJVF9NT1ZfVUg6Ci0JCXJldHVybiBlbWl0X29wKGNvbXBpbGVyLCBTTEpJVF9NT1ZfVUgsIEhBTEZfREFUQSwgZHN0LCBkc3R3LCBUTVBfUkVHMSwgMCwgc3JjLCAoc3JjICYgU0xKSVRfSU1NKSA/IChzbGppdF91aCkgc3JjdyA6IHNyY3cpOworCWNhc2UgU0xKSVRfTU9WX1UxNjoKKwkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01PVl9VMTYsIEhBTEZfREFUQSwgZHN0LCBkc3R3LCBUTVBfUkVHMSwgMCwgc3JjLCAoc3JjICYgU0xKSVRfSU1NKSA/IChzbGppdF91MTYpIHNyY3cgOiBzcmN3KTsKIAotCWNhc2UgU0xKSVRfTU9WX1NIOgotCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfTU9WX1NILCBIQUxGX0RBVEEgfCBTSUdORURfREFUQSwgZHN0LCBkc3R3LCBUTVBfUkVHMSwgMCwgc3JjLCAoc3JjICYgU0xKSVRfSU1NKSA/IChzbGppdF9zaCkgc3JjdyA6IHNyY3cpOworCWNhc2UgU0xKSVRfTU9WX1MxNjoKKwkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01PVl9TMTYsIEhBTEZfREFUQSB8IFNJR05FRF9EQVRBLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIChzcmMgJiBTTEpJVF9JTU0pID8gKHNsaml0X3MxNikgc3JjdyA6IHNyY3cpOwogCiAJY2FzZSBTTEpJVF9NT1ZVOgogCWNhc2UgU0xKSVRfTU9WVV9QOgogCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfTU9WLCBXT1JEX0RBVEEgfCBXUklURV9CQUNLLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIHNyY3cpOwogCi0JY2FzZSBTTEpJVF9NT1ZVX1VJOgotCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfTU9WX1VJLCBJTlRfREFUQSB8IFdSSVRFX0JBQ0ssIGRzdCwgZHN0dywgVE1QX1JFRzEsIDAsIHNyYywgc3Jjdyk7CisJY2FzZSBTTEpJVF9NT1ZVX1UzMjoKKwkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01PVl9VMzIsIElOVF9EQVRBIHwgV1JJVEVfQkFDSywgZHN0LCBkc3R3LCBUTVBfUkVHMSwgMCwgc3JjLCBzcmN3KTsKIAotCWNhc2UgU0xKSVRfTU9WVV9TSToKLQkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01PVl9TSSwgSU5UX0RBVEEgfCBTSUdORURfREFUQSB8IFdSSVRFX0JBQ0ssIGRzdCwgZHN0dywgVE1QX1JFRzEsIDAsIHNyYywgc3Jjdyk7CisJY2FzZSBTTEpJVF9NT1ZVX1MzMjoKKwkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01PVl9TMzIsIElOVF9EQVRBIHwgU0lHTkVEX0RBVEEgfCBXUklURV9CQUNLLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIHNyY3cpOwogCi0JY2FzZSBTTEpJVF9NT1ZVX1VCOgotCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfTU9WX1VCLCBCWVRFX0RBVEEgfCBXUklURV9CQUNLLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIChzcmMgJiBTTEpJVF9JTU0pID8gKHNsaml0X3ViKSBzcmN3IDogc3Jjdyk7CisJY2FzZSBTTEpJVF9NT1ZVX1U4OgorCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfTU9WX1U4LCBCWVRFX0RBVEEgfCBXUklURV9CQUNLLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIChzcmMgJiBTTEpJVF9JTU0pID8gKHNsaml0X3U4KSBzcmN3IDogc3Jjdyk7CiAKLQljYXNlIFNMSklUX01PVlVfU0I6Ci0JCXJldHVybiBlbWl0X29wKGNvbXBpbGVyLCBTTEpJVF9NT1ZfU0IsIEJZVEVfREFUQSB8IFNJR05FRF9EQVRBIHwgV1JJVEVfQkFDSywgZHN0LCBkc3R3LCBUTVBfUkVHMSwgMCwgc3JjLCAoc3JjICYgU0xKSVRfSU1NKSA/IChzbGppdF9zYikgc3JjdyA6IHNyY3cpOworCWNhc2UgU0xKSVRfTU9WVV9TODoKKwkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01PVl9TOCwgQllURV9EQVRBIHwgU0lHTkVEX0RBVEEgfCBXUklURV9CQUNLLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIChzcmMgJiBTTEpJVF9JTU0pID8gKHNsaml0X3M4KSBzcmN3IDogc3Jjdyk7CiAKLQljYXNlIFNMSklUX01PVlVfVUg6Ci0JCXJldHVybiBlbWl0X29wKGNvbXBpbGVyLCBTTEpJVF9NT1ZfVUgsIEhBTEZfREFUQSB8IFdSSVRFX0JBQ0ssIGRzdCwgZHN0dywgVE1QX1JFRzEsIDAsIHNyYywgKHNyYyAmIFNMSklUX0lNTSkgPyAoc2xqaXRfdWgpIHNyY3cgOiBzcmN3KTsKKwljYXNlIFNMSklUX01PVlVfVTE2OgorCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfTU9WX1UxNiwgSEFMRl9EQVRBIHwgV1JJVEVfQkFDSywgZHN0LCBkc3R3LCBUTVBfUkVHMSwgMCwgc3JjLCAoc3JjICYgU0xKSVRfSU1NKSA/IChzbGppdF91MTYpIHNyY3cgOiBzcmN3KTsKIAotCWNhc2UgU0xKSVRfTU9WVV9TSDoKLQkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01PVl9TSCwgSEFMRl9EQVRBIHwgU0lHTkVEX0RBVEEgfCBXUklURV9CQUNLLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIChzcmMgJiBTTEpJVF9JTU0pID8gKHNsaml0X3NoKSBzcmN3IDogc3Jjdyk7CisJY2FzZSBTTEpJVF9NT1ZVX1MxNjoKKwkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01PVl9TMTYsIEhBTEZfREFUQSB8IFNJR05FRF9EQVRBIHwgV1JJVEVfQkFDSywgZHN0LCBkc3R3LCBUTVBfUkVHMSwgMCwgc3JjLCAoc3JjICYgU0xKSVRfSU1NKSA/IChzbGppdF9zMTYpIHNyY3cgOiBzcmN3KTsKIAogCWNhc2UgU0xKSVRfTk9UOgogCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgb3AsIDAsIGRzdCwgZHN0dywgVE1QX1JFRzEsIDAsIHNyYywgc3Jjdyk7CkBAIC0yMjQ5LDEzICsyMjUxLDEzIEBACiAJCXJldHVybiBlbWl0X29wKGNvbXBpbGVyLCBTTEpJVF9TVUIgfCBHRVRfQUxMX0ZMQUdTKG9wKSwgSU1NX09QLCBkc3QsIGRzdHcsIFNMSklUX0lNTSwgMCwgc3JjLCBzcmN3KTsKIAogCWNhc2UgU0xKSVRfQ0xaOgotCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgb3AsIChvcCAmIFNMSklUX0lOVF9PUCkgPyBJTlRfREFUQSA6IFdPUkRfREFUQSwgZHN0LCBkc3R3LCBUTVBfUkVHMSwgMCwgc3JjLCBzcmN3KTsKKwkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIG9wLCAob3AgJiBTTEpJVF9JMzJfT1ApID8gSU5UX0RBVEEgOiBXT1JEX0RBVEEsIGRzdCwgZHN0dywgVE1QX1JFRzEsIDAsIHNyYywgc3Jjdyk7CiAJfQogCiAJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CiB9CiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X29wMihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwgc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3LCBzbGppdF9zaSBzcmMxLCBzbGppdF9zdyBzcmMxdywgc2xqaXRfc2kgc3JjMiwgc2xqaXRfc3cgc3JjMncpCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfczMyIHNsaml0X2VtaXRfb3AyKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiBvcCwgc2xqaXRfczMyIGRzdCwgc2xqaXRfc3cgZHN0dywgc2xqaXRfczMyIHNyYzEsIHNsaml0X3N3IHNyYzF3LCBzbGppdF9zMzIgc3JjMiwgc2xqaXRfc3cgc3JjMncpCiB7CiAJQ0hFQ0tfRVJST1IoKTsKIAlDSEVDSyhjaGVja19zbGppdF9lbWl0X29wMihjb21waWxlciwgb3AsIGRzdCwgZHN0dywgc3JjMSwgc3JjMXcsIHNyYzIsIHNyYzJ3KSk7CkBAIC0yMjg1LDcgKzIyODcsNyBAQAogCWNhc2UgU0xKSVRfQVNIUjoKIAkJaWYgKHNyYzIgJiBTTEpJVF9JTU0pCiAJCQlzcmMydyAmPSAweDNmOwotCQlpZiAob3AgJiBTTEpJVF9JTlRfT1ApCisJCWlmIChvcCAmIFNMSklUX0kzMl9PUCkKIAkJCXNyYzJ3ICY9IDB4MWY7CiAKIAkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIG9wLCBJTU1fT1AsIGRzdCwgZHN0dywgc3JjMSwgc3JjMXcsIHNyYzIsIHNyYzJ3KTsKQEAgLTIzMTIsOSArMjMxNCw5IEBACiAJcmV0dXJuIGxhYmVsOwogfQogCi1TTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9panVtcChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSB0eXBlLCBzbGppdF9zaSBzcmMsIHNsaml0X3N3IHNyY3cpCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfczMyIHNsaml0X2VtaXRfaWp1bXAoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIHR5cGUsIHNsaml0X3MzMiBzcmMsIHNsaml0X3N3IHNyY3cpCiB7Ci0Jc2xqaXRfc2kgc3JjX3IgPSBUTVBfUkVHMjsKKwlzbGppdF9zMzIgc3JjX3IgPSBUTVBfUkVHMjsKIAlzdHJ1Y3Qgc2xqaXRfanVtcCAqanVtcCA9IE5VTEw7CiAKIAlmbHVzaF9idWZmZXIoY29tcGlsZXIpOwpAQCAtMjQwMSwxMSArMjQwMywxMSBAQAogCWluc3QgPSBCTkVaX1gxIHwgU1JDQV9YMShzcmMpOyBcCiAJZmxhZ3MgPSBJU19DT05EOwogCi1TTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc3RydWN0IHNsaml0X2p1bXAgKiBzbGppdF9lbWl0X2p1bXAoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgdHlwZSkKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzdHJ1Y3Qgc2xqaXRfanVtcCAqIHNsaml0X2VtaXRfanVtcChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgdHlwZSkKIHsKIAlzdHJ1Y3Qgc2xqaXRfanVtcCAqanVtcDsKIAlzbGppdF9pbnMgaW5zdDsKLQlzbGppdF9zaSBmbGFncyA9IDA7CisJc2xqaXRfczMyIGZsYWdzID0gMDsKIAogCWZsdXNoX2J1ZmZlcihjb21waWxlcik7CiAKQEAgLTI0ODUsMjUgKzI0ODcsMjUgQEAKIAlyZXR1cm4ganVtcDsKIH0KIAotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2lzX2ZwdV9hdmFpbGFibGUodm9pZCkKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zMzIgc2xqaXRfaXNfZnB1X2F2YWlsYWJsZSh2b2lkKQogewogCXJldHVybiAwOwogfQogCi1TTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9mb3AxKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIG9wLCBzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsIHNsaml0X3NpIHNyYywgc2xqaXRfc3cgc3JjdykKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zMzIgc2xqaXRfZW1pdF9mb3AxKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiBvcCwgc2xqaXRfczMyIGRzdCwgc2xqaXRfc3cgZHN0dywgc2xqaXRfczMyIHNyYywgc2xqaXRfc3cgc3JjdykKIHsKIAlTTEpJVF9BU1NFUlRfU1RPUCgpOwogfQogCi1TTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9mb3AyKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIG9wLCBzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsIHNsaml0X3NpIHNyYzEsIHNsaml0X3N3IHNyYzF3LCBzbGppdF9zaSBzcmMyLCBzbGppdF9zdyBzcmMydykKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zMzIgc2xqaXRfZW1pdF9mb3AyKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiBvcCwgc2xqaXRfczMyIGRzdCwgc2xqaXRfc3cgZHN0dywgc2xqaXRfczMyIHNyYzEsIHNsaml0X3N3IHNyYzF3LCBzbGppdF9zMzIgc3JjMiwgc2xqaXRfc3cgc3JjMncpCiB7CiAJU0xKSVRfQVNTRVJUX1NUT1AoKTsKIH0KIAotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHN0cnVjdCBzbGppdF9jb25zdCAqIHNsaml0X2VtaXRfY29uc3Qoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3LCBzbGppdF9zdyBpbml0X3ZhbHVlKQorU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHN0cnVjdCBzbGppdF9jb25zdCAqIHNsaml0X2VtaXRfY29uc3Qoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIGRzdCwgc2xqaXRfc3cgZHN0dywgc2xqaXRfc3cgaW5pdF92YWx1ZSkKIHsKIAlzdHJ1Y3Qgc2xqaXRfY29uc3QgKmNvbnN0XzsKLQlzbGppdF9zaSByZWc7CisJc2xqaXRfczMyIHJlZzsKIAogCWZsdXNoX2J1ZmZlcihjb21waWxlcik7CiAKQEAgLTI1NDUsMTQgKzI1NDcsMTQgQEAKIAlTTEpJVF9DQUNIRV9GTFVTSChpbnN0LCBpbnN0ICsgNCk7CiB9CiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9nZXRfcmVnaXN0ZXJfaW5kZXgoc2xqaXRfc2kgcmVnKQorU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3MzMiBzbGppdF9nZXRfcmVnaXN0ZXJfaW5kZXgoc2xqaXRfczMyIHJlZykKIHsKIAlDSEVDS19SRUdfSU5ERVgoY2hlY2tfc2xqaXRfZ2V0X3JlZ2lzdGVyX2luZGV4KHJlZykpOwogCXJldHVybiByZWdfbWFwW3JlZ107CiB9CiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X29wX2N1c3RvbShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLAotCXZvaWQgKmluc3RydWN0aW9uLCBzbGppdF9zaSBzaXplKQorU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3MzMiBzbGppdF9lbWl0X29wX2N1c3RvbShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLAorCXZvaWQgKmluc3RydWN0aW9uLCBzbGppdF9zMzIgc2l6ZSkKIHsKIAlDSEVDS19FUlJPUigpOwogCUNIRUNLKGNoZWNrX3Nsaml0X2VtaXRfb3BfY3VzdG9tKGNvbXBpbGVyLCBpbnN0cnVjdGlvbiwgc2l6ZSkpOwpkaWZmIC0tZ2l0IGEvZGlzdDIvc3JjL3Nsaml0L3Nsaml0TmF0aXZlWDg2XzMyLmMgYi9kaXN0Mi9zcmMvc2xqaXQvc2xqaXROYXRpdmVYODZfMzIuYwppbmRleCBkNzEyOWM4Li43OGYzZGNiIDEwMDY0NAotLS0gYS9kaXN0Mi9zcmMvc2xqaXQvc2xqaXROYXRpdmVYODZfMzIuYworKysgYi9kaXN0Mi9zcmMvc2xqaXQvc2xqaXROYXRpdmVYODZfMzIuYwpAQCAtMjYsMTkgKzI2LDE5IEBACiAKIC8qIHg4NiAzMi1iaXQgYXJjaCBkZXBlbmRlbnQgZnVuY3Rpb25zLiAqLwogCi1zdGF0aWMgc2xqaXRfc2kgZW1pdF9kb19pbW0oc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfdWIgb3Bjb2RlLCBzbGppdF9zdyBpbW0pCitzdGF0aWMgc2xqaXRfczMyIGVtaXRfZG9faW1tKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3U4IG9wY29kZSwgc2xqaXRfc3cgaW1tKQogewotCXNsaml0X3ViICppbnN0OworCXNsaml0X3U4ICppbnN0OwogCi0JaW5zdCA9IChzbGppdF91YiopZW5zdXJlX2J1Zihjb21waWxlciwgMSArIDEgKyBzaXplb2Yoc2xqaXRfc3cpKTsKKwlpbnN0ID0gKHNsaml0X3U4KillbnN1cmVfYnVmKGNvbXBpbGVyLCAxICsgMSArIHNpemVvZihzbGppdF9zdykpOwogCUZBSUxfSUYoIWluc3QpOwogCUlOQ19TSVpFKDEgKyBzaXplb2Yoc2xqaXRfc3cpKTsKIAkqaW5zdCsrID0gb3Bjb2RlOwotCSooc2xqaXRfc3cqKWluc3QgPSBpbW07CisJc2xqaXRfdW5hbGlnbmVkX3N0b3JlX3N3KGluc3QsIGltbSk7CiAJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBzbGppdF91YiogZ2VuZXJhdGVfZmFyX2p1bXBfY29kZShzdHJ1Y3Qgc2xqaXRfanVtcCAqanVtcCwgc2xqaXRfdWIgKmNvZGVfcHRyLCBzbGppdF9zaSB0eXBlKQorc3RhdGljIHNsaml0X3U4KiBnZW5lcmF0ZV9mYXJfanVtcF9jb2RlKHN0cnVjdCBzbGppdF9qdW1wICpqdW1wLCBzbGppdF91OCAqY29kZV9wdHIsIHNsaml0X3MzMiB0eXBlKQogewogCWlmICh0eXBlID09IFNMSklUX0pVTVApIHsKIAkJKmNvZGVfcHRyKysgPSBKTVBfaTMyOwpAQCAtNTcsMTggKzU3LDE4IEBACiAJaWYgKGp1bXAtPmZsYWdzICYgSlVNUF9MQUJFTCkKIAkJanVtcC0+ZmxhZ3MgfD0gUEFUQ0hfTVc7CiAJZWxzZQotCQkqKHNsaml0X3N3Kiljb2RlX3B0ciA9IGp1bXAtPnUudGFyZ2V0IC0gKGp1bXAtPmFkZHIgKyA0KTsKKwkJc2xqaXRfdW5hbGlnbmVkX3N0b3JlX3N3KGNvZGVfcHRyLCBqdW1wLT51LnRhcmdldCAtIChqdW1wLT5hZGRyICsgNCkpOwogCWNvZGVfcHRyICs9IDQ7CiAKIAlyZXR1cm4gY29kZV9wdHI7CiB9CiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X2VudGVyKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsCi0Jc2xqaXRfc2kgb3B0aW9ucywgc2xqaXRfc2kgYXJncywgc2xqaXRfc2kgc2NyYXRjaGVzLCBzbGppdF9zaSBzYXZlZHMsCi0Jc2xqaXRfc2kgZnNjcmF0Y2hlcywgc2xqaXRfc2kgZnNhdmVkcywgc2xqaXRfc2kgbG9jYWxfc2l6ZSkKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zMzIgc2xqaXRfZW1pdF9lbnRlcihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLAorCXNsaml0X3MzMiBvcHRpb25zLCBzbGppdF9zMzIgYXJncywgc2xqaXRfczMyIHNjcmF0Y2hlcywgc2xqaXRfczMyIHNhdmVkcywKKwlzbGppdF9zMzIgZnNjcmF0Y2hlcywgc2xqaXRfczMyIGZzYXZlZHMsIHNsaml0X3MzMiBsb2NhbF9zaXplKQogewotCXNsaml0X3NpIHNpemU7Ci0Jc2xqaXRfdWIgKmluc3Q7CisJc2xqaXRfczMyIHNpemU7CisJc2xqaXRfdTggKmluc3Q7CiAKIAlDSEVDS19FUlJPUigpOwogCUNIRUNLKGNoZWNrX3Nsaml0X2VtaXRfZW50ZXIoY29tcGlsZXIsIG9wdGlvbnMsIGFyZ3MsIHNjcmF0Y2hlcywgc2F2ZWRzLCBmc2NyYXRjaGVzLCBmc2F2ZWRzLCBsb2NhbF9zaXplKSk7CkBAIC04Myw3ICs4Myw3IEBACiAjZWxzZQogCXNpemUgKz0gKGFyZ3MgPiAwID8gKDIgKyBhcmdzICogMykgOiAwKTsKICNlbmRpZgotCWluc3QgPSAoc2xqaXRfdWIqKWVuc3VyZV9idWYoY29tcGlsZXIsIDEgKyBzaXplKTsKKwlpbnN0ID0gKHNsaml0X3U4KillbnN1cmVfYnVmKGNvbXBpbGVyLCAxICsgc2l6ZSk7CiAJRkFJTF9JRighaW5zdCk7CiAKIAlJTkNfU0laRShzaXplKTsKQEAgLTE0Myw3ICsxNDMsNyBAQAogCWlmIChvcHRpb25zICYgU0xKSVRfRE9VQkxFX0FMSUdOTUVOVCkgewogCQlsb2NhbF9zaXplID0gU0xKSVRfTE9DQUxTX09GRlNFVCArICgobG9jYWxfc2l6ZSArIDcpICYgfjcpOwogCi0JCWluc3QgPSAoc2xqaXRfdWIqKWVuc3VyZV9idWYoY29tcGlsZXIsIDEgKyAxNyk7CisJCWluc3QgPSAoc2xqaXRfdTgqKWVuc3VyZV9idWYoY29tcGlsZXIsIDEgKyAxNyk7CiAJCUZBSUxfSUYoIWluc3QpOwogCiAJCUlOQ19TSVpFKDE3KTsKQEAgLTE1MSwxMiArMTUxLDEyIEBACiAJCWluc3RbMV0gPSBNT0RfUkVHIHwgKHJlZ19tYXBbVE1QX1JFRzFdIDw8IDMpIHwgcmVnX21hcFtTTEpJVF9TUF07CiAJCWluc3RbMl0gPSBHUk9VUF9GNzsKIAkJaW5zdFszXSA9IE1PRF9SRUcgfCAoMCA8PCAzKSB8IHJlZ19tYXBbU0xKSVRfU1BdOwotCQkqKHNsaml0X3N3KikoaW5zdCArIDQpID0gMHg0OworCQlzbGppdF91bmFsaWduZWRfc3RvcmVfc3coaW5zdCArIDQsIDB4NCk7CiAJCWluc3RbOF0gPSBKTkVfaTg7CiAJCWluc3RbOV0gPSA2OwogCQlpbnN0WzEwXSA9IEdST1VQX0JJTkFSWV84MTsKIAkJaW5zdFsxMV0gPSBNT0RfUkVHIHwgKDUgPDwgMykgfCByZWdfbWFwW1NMSklUX1NQXTsKLQkJKihzbGppdF9zdyopKGluc3QgKyAxMikgPSAweDQ7CisJCXNsaml0X3VuYWxpZ25lZF9zdG9yZV9zdyhpbnN0ICsgMTIsIDB4NCk7CiAJCWluc3RbMTZdID0gUFVTSF9yICsgcmVnX21hcFtUTVBfUkVHMV07CiAJfQogCWVsc2UKQEAgLTE4Myw5ICsxODMsOSBAQAogCQlTTEpJVF9TUCwgMCwgU0xKSVRfU1AsIDAsIFNMSklUX0lNTSwgbG9jYWxfc2l6ZSk7CiB9CiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9zZXRfY29udGV4dChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLAotCXNsaml0X3NpIG9wdGlvbnMsIHNsaml0X3NpIGFyZ3MsIHNsaml0X3NpIHNjcmF0Y2hlcywgc2xqaXRfc2kgc2F2ZWRzLAotCXNsaml0X3NpIGZzY3JhdGNoZXMsIHNsaml0X3NpIGZzYXZlZHMsIHNsaml0X3NpIGxvY2FsX3NpemUpCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfczMyIHNsaml0X3NldF9jb250ZXh0KHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsCisJc2xqaXRfczMyIG9wdGlvbnMsIHNsaml0X3MzMiBhcmdzLCBzbGppdF9zMzIgc2NyYXRjaGVzLCBzbGppdF9zMzIgc2F2ZWRzLAorCXNsaml0X3MzMiBmc2NyYXRjaGVzLCBzbGppdF9zMzIgZnNhdmVkcywgc2xqaXRfczMyIGxvY2FsX3NpemUpCiB7CiAJQ0hFQ0tfRVJST1IoKTsKIAlDSEVDSyhjaGVja19zbGppdF9zZXRfY29udGV4dChjb21waWxlciwgb3B0aW9ucywgYXJncywgc2NyYXRjaGVzLCBzYXZlZHMsIGZzY3JhdGNoZXMsIGZzYXZlZHMsIGxvY2FsX3NpemUpKTsKQEAgLTIwNSwxMCArMjA1LDEwIEBACiAJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CiB9CiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X3JldHVybihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwgc2xqaXRfc2kgc3JjLCBzbGppdF9zdyBzcmN3KQorU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3MzMiBzbGppdF9lbWl0X3JldHVybihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgb3AsIHNsaml0X3MzMiBzcmMsIHNsaml0X3N3IHNyY3cpCiB7Ci0Jc2xqaXRfc2kgc2l6ZTsKLQlzbGppdF91YiAqaW5zdDsKKwlzbGppdF9zMzIgc2l6ZTsKKwlzbGppdF91OCAqaW5zdDsKIAogCUNIRUNLX0VSUk9SKCk7CiAJQ0hFQ0soY2hlY2tfc2xqaXRfZW1pdF9yZXR1cm4oY29tcGlsZXIsIG9wLCBzcmMsIHNyY3cpKTsKQEAgLTIyMyw3ICsyMjMsNyBAQAogCiAjaWYgIWRlZmluZWQoX19BUFBMRV9fKQogCWlmIChjb21waWxlci0+b3B0aW9ucyAmIFNMSklUX0RPVUJMRV9BTElHTk1FTlQpIHsKLQkJaW5zdCA9IChzbGppdF91YiopZW5zdXJlX2J1Zihjb21waWxlciwgMSArIDMpOworCQlpbnN0ID0gKHNsaml0X3U4KillbnN1cmVfYnVmKGNvbXBpbGVyLCAxICsgMyk7CiAJCUZBSUxfSUYoIWluc3QpOwogCiAJCUlOQ19TSVpFKDMpOwpAQCAtMjQyLDcgKzI0Miw3IEBACiAJaWYgKGNvbXBpbGVyLT5hcmdzID4gMCkKIAkJc2l6ZSArPSAyOwogI2VuZGlmCi0JaW5zdCA9IChzbGppdF91YiopZW5zdXJlX2J1Zihjb21waWxlciwgMSArIHNpemUpOworCWluc3QgPSAoc2xqaXRfdTgqKWVuc3VyZV9idWYoY29tcGlsZXIsIDEgKyBzaXplKTsKIAlGQUlMX0lGKCFpbnN0KTsKIAogCUlOQ19TSVpFKHNpemUpOwpAQCAtMjcxLDE2ICsyNzEsMTYgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiAvKiBTaXplIGNvbnRhaW5zIHRoZSBmbGFncyBhcyB3ZWxsLiAqLwotc3RhdGljIHNsaml0X3ViKiBlbWl0X3g4Nl9pbnN0cnVjdGlvbihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBzaXplLAorc3RhdGljIHNsaml0X3U4KiBlbWl0X3g4Nl9pbnN0cnVjdGlvbihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgc2l6ZSwKIAkvKiBUaGUgcmVnaXN0ZXIgb3IgaW1tZWRpYXRlIG9wZXJhbmQuICovCi0Jc2xqaXRfc2kgYSwgc2xqaXRfc3cgaW1tYSwKKwlzbGppdF9zMzIgYSwgc2xqaXRfc3cgaW1tYSwKIAkvKiBUaGUgZ2VuZXJhbCBvcGVyYW5kIChub3QgaW1tZWRpYXRlKS4gKi8KLQlzbGppdF9zaSBiLCBzbGppdF9zdyBpbW1iKQorCXNsaml0X3MzMiBiLCBzbGppdF9zdyBpbW1iKQogewotCXNsaml0X3ViICppbnN0OwotCXNsaml0X3ViICpidWZfcHRyOwotCXNsaml0X3NpIGZsYWdzID0gc2l6ZSAmIH4weGY7Ci0Jc2xqaXRfc2kgaW5zdF9zaXplOworCXNsaml0X3U4ICppbnN0OworCXNsaml0X3U4ICpidWZfcHRyOworCXNsaml0X3MzMiBmbGFncyA9IHNpemUgJiB+MHhmOworCXNsaml0X3MzMiBpbnN0X3NpemU7CiAKIAkvKiBCb3RoIGNhbm5vdCBiZSBzd2l0Y2hlZCBvbi4gKi8KIAlTTEpJVF9BU1NFUlQoKGZsYWdzICYgKEVYODZfQklOX0lOUyB8IEVYODZfU0hJRlRfSU5TKSkgIT0gKEVYODZfQklOX0lOUyB8IEVYODZfU0hJRlRfSU5TKSk7CkBAIC0zMTAsNyArMzEwLDcgQEAKIAkJZWxzZSBpZiAoaW1tYiAhPSAwICYmICEoYiAmIE9GRlNfUkVHX01BU0spKSB7CiAJCQkvKiBJbW1lZGlhdGUgb3BlcmFuZC4gKi8KIAkJCWlmIChpbW1iIDw9IDEyNyAmJiBpbW1iID49IC0xMjgpCi0JCQkJaW5zdF9zaXplICs9IHNpemVvZihzbGppdF9zYik7CisJCQkJaW5zdF9zaXplICs9IHNpemVvZihzbGppdF9zOCk7CiAJCQllbHNlCiAJCQkJaW5zdF9zaXplICs9IHNpemVvZihzbGppdF9zdyk7CiAJCX0KQEAgLTM0Nyw3ICszNDcsNyBAQAogCWVsc2UKIAkJU0xKSVRfQVNTRVJUKCEoZmxhZ3MgJiBFWDg2X1NISUZUX0lOUykgfHwgYSA9PSBTTEpJVF9QUkVGX1NISUZUX1JFRyk7CiAKLQlpbnN0ID0gKHNsaml0X3ViKillbnN1cmVfYnVmKGNvbXBpbGVyLCAxICsgaW5zdF9zaXplKTsKKwlpbnN0ID0gKHNsaml0X3U4KillbnN1cmVfYnVmKGNvbXBpbGVyLCAxICsgaW5zdF9zaXplKTsKIAlQVFJfRkFJTF9JRighaW5zdCk7CiAKIAkvKiBFbmNvZGluZyB0aGUgYnl0ZS4gKi8KQEAgLTQwNiw3ICs0MDYsNyBAQAogCQkJCWlmIChpbW1iIDw9IDEyNyAmJiBpbW1iID49IC0xMjgpCiAJCQkJCSpidWZfcHRyKysgPSBpbW1iOyAvKiA4IGJpdCBkaXNwbGFjZW1lbnQuICovCiAJCQkJZWxzZSB7Ci0JCQkJCSooc2xqaXRfc3cqKWJ1Zl9wdHIgPSBpbW1iOyAvKiAzMiBiaXQgZGlzcGxhY2VtZW50LiAqLworCQkJCQlzbGppdF91bmFsaWduZWRfc3RvcmVfc3coYnVmX3B0ciwgaW1tYik7IC8qIDMyIGJpdCBkaXNwbGFjZW1lbnQuICovCiAJCQkJCWJ1Zl9wdHIgKz0gc2l6ZW9mKHNsaml0X3N3KTsKIAkJCQl9CiAJCQl9CkBAIC00MTgsNyArNDE4LDcgQEAKIAl9CiAJZWxzZSB7CiAJCSpidWZfcHRyKysgfD0gMHgwNTsKLQkJKihzbGppdF9zdyopYnVmX3B0ciA9IGltbWI7IC8qIDMyIGJpdCBkaXNwbGFjZW1lbnQuICovCisJCXNsaml0X3VuYWxpZ25lZF9zdG9yZV9zdyhidWZfcHRyLCBpbW1iKTsgLyogMzIgYml0IGRpc3BsYWNlbWVudC4gKi8KIAkJYnVmX3B0ciArPSBzaXplb2Yoc2xqaXRfc3cpOwogCX0KIApAQCAtNDI2LDkgKzQyNiw5IEBACiAJCWlmIChmbGFncyAmIEVYODZfQllURV9BUkcpCiAJCQkqYnVmX3B0ciA9IGltbWE7CiAJCWVsc2UgaWYgKGZsYWdzICYgRVg4Nl9IQUxGX0FSRykKLQkJCSooc2hvcnQqKWJ1Zl9wdHIgPSBpbW1hOworCQkJc2xqaXRfdW5hbGlnbmVkX3N0b3JlX3MxNihidWZfcHRyLCBpbW1hKTsKIAkJZWxzZSBpZiAoIShmbGFncyAmIEVYODZfU0hJRlRfSU5TKSkKLQkJCSooc2xqaXRfc3cqKWJ1Zl9wdHIgPSBpbW1hOworCQkJc2xqaXRfdW5hbGlnbmVkX3N0b3JlX3N3KGJ1Zl9wdHIsIGltbWEpOwogCX0KIAogCXJldHVybiAhKGZsYWdzICYgRVg4Nl9TSElGVF9JTlMpID8gaW5zdCA6IChpbnN0ICsgMSk7CkBAIC00MzgsMTIgKzQzOCwxMiBAQAogLyogIENhbGwgLyByZXR1cm4gaW5zdHJ1Y3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9zaSBjYWxsX3dpdGhfYXJncyhzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSB0eXBlKQorc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9zMzIgY2FsbF93aXRoX2FyZ3Moc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIHR5cGUpCiB7Ci0Jc2xqaXRfdWIgKmluc3Q7CisJc2xqaXRfdTggKmluc3Q7CiAKICNpZiAoZGVmaW5lZCBTTEpJVF9YODZfMzJfRkFTVENBTEwgJiYgU0xKSVRfWDg2XzMyX0ZBU1RDQUxMKQotCWluc3QgPSAoc2xqaXRfdWIqKWVuc3VyZV9idWYoY29tcGlsZXIsIHR5cGUgPj0gU0xKSVRfQ0FMTDMgPyAxICsgMiArIDEgOiAxICsgMik7CisJaW5zdCA9IChzbGppdF91OCopZW5zdXJlX2J1Zihjb21waWxlciwgdHlwZSA+PSBTTEpJVF9DQUxMMyA/IDEgKyAyICsgMSA6IDEgKyAyKTsKIAlGQUlMX0lGKCFpbnN0KTsKIAlJTkNfU0laRSh0eXBlID49IFNMSklUX0NBTEwzID8gMiArIDEgOiAyKTsKIApAQCAtNDUyLDcgKzQ1Miw3IEBACiAJKmluc3QrKyA9IE1PVl9yX3JtOwogCSppbnN0KysgPSBNT0RfUkVHIHwgKHJlZ19tYXBbU0xKSVRfUjJdIDw8IDMpIHwgcmVnX21hcFtTTEpJVF9SMF07CiAjZWxzZQotCWluc3QgPSAoc2xqaXRfdWIqKWVuc3VyZV9idWYoY29tcGlsZXIsIDEgKyA0ICogKHR5cGUgLSBTTEpJVF9DQUxMMCkpOworCWluc3QgPSAoc2xqaXRfdTgqKWVuc3VyZV9idWYoY29tcGlsZXIsIDEgKyA0ICogKHR5cGUgLSBTTEpJVF9DQUxMMCkpOwogCUZBSUxfSUYoIWluc3QpOwogCUlOQ19TSVpFKDQgKiAodHlwZSAtIFNMSklUX0NBTEwwKSk7CiAKQEAgLTQ3Niw5ICs0NzYsOSBAQAogCXJldHVybiBTTEpJVF9TVUNDRVNTOwogfQogCi1TTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9mYXN0X2VudGVyKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dykKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zMzIgc2xqaXRfZW1pdF9mYXN0X2VudGVyKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiBkc3QsIHNsaml0X3N3IGRzdHcpCiB7Ci0Jc2xqaXRfdWIgKmluc3Q7CisJc2xqaXRfdTggKmluc3Q7CiAKIAlDSEVDS19FUlJPUigpOwogCUNIRUNLKGNoZWNrX3Nsaml0X2VtaXRfZmFzdF9lbnRlcihjb21waWxlciwgZHN0LCBkc3R3KSk7CkBAIC00OTIsNyArNDkyLDcgQEAKIAogCWlmIChGQVNUX0lTX1JFRyhkc3QpKSB7CiAJCS8qIFVudXNlZCBkZXN0IGlzIHBvc3NpYmxlIGhlcmUuICovCi0JCWluc3QgPSAoc2xqaXRfdWIqKWVuc3VyZV9idWYoY29tcGlsZXIsIDEgKyAxKTsKKwkJaW5zdCA9IChzbGppdF91OCopZW5zdXJlX2J1Zihjb21waWxlciwgMSArIDEpOwogCQlGQUlMX0lGKCFpbnN0KTsKIAogCQlJTkNfU0laRSgxKTsKQEAgLTUwNyw5ICs1MDcsOSBAQAogCXJldHVybiBTTEpJVF9TVUNDRVNTOwogfQogCi1TTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9mYXN0X3JldHVybihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBzcmMsIHNsaml0X3N3IHNyY3cpCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfczMyIHNsaml0X2VtaXRfZmFzdF9yZXR1cm4oc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIHNyYywgc2xqaXRfc3cgc3JjdykKIHsKLQlzbGppdF91YiAqaW5zdDsKKwlzbGppdF91OCAqaW5zdDsKIAogCUNIRUNLX0VSUk9SKCk7CiAJQ0hFQ0soY2hlY2tfc2xqaXRfZW1pdF9mYXN0X3JldHVybihjb21waWxlciwgc3JjLCBzcmN3KSk7CkBAIC01MTgsNyArNTE4LDcgQEAKIAlDSEVDS19FWFRSQV9SRUdTKHNyYywgc3JjdywgKHZvaWQpMCk7CiAKIAlpZiAoRkFTVF9JU19SRUcoc3JjKSkgewotCQlpbnN0ID0gKHNsaml0X3ViKillbnN1cmVfYnVmKGNvbXBpbGVyLCAxICsgMSArIDEpOworCQlpbnN0ID0gKHNsaml0X3U4KillbnN1cmVfYnVmKGNvbXBpbGVyLCAxICsgMSArIDEpOwogCQlGQUlMX0lGKCFpbnN0KTsKIAogCQlJTkNfU0laRSgxICsgMSk7CkBAIC01MzAsMTggKzUzMCwxOCBAQAogCQkqaW5zdCsrID0gR1JPVVBfRkY7CiAJCSppbnN0IHw9IFBVU0hfcm07CiAKLQkJaW5zdCA9IChzbGppdF91YiopZW5zdXJlX2J1Zihjb21waWxlciwgMSArIDEpOworCQlpbnN0ID0gKHNsaml0X3U4KillbnN1cmVfYnVmKGNvbXBpbGVyLCAxICsgMSk7CiAJCUZBSUxfSUYoIWluc3QpOwogCQlJTkNfU0laRSgxKTsKIAl9CiAJZWxzZSB7CiAJCS8qIFNMSklUX0lNTS4gKi8KLQkJaW5zdCA9IChzbGppdF91YiopZW5zdXJlX2J1Zihjb21waWxlciwgMSArIDUgKyAxKTsKKwkJaW5zdCA9IChzbGppdF91OCopZW5zdXJlX2J1Zihjb21waWxlciwgMSArIDUgKyAxKTsKIAkJRkFJTF9JRighaW5zdCk7CiAKIAkJSU5DX1NJWkUoNSArIDEpOwogCQkqaW5zdCsrID0gUFVTSF9pMzI7Ci0JCSooc2xqaXRfc3cqKWluc3QgPSBzcmN3OworCQlzbGppdF91bmFsaWduZWRfc3RvcmVfc3coaW5zdCwgc3Jjdyk7CiAJCWluc3QgKz0gc2l6ZW9mKHNsaml0X3N3KTsKIAl9CiAKZGlmZiAtLWdpdCBhL2Rpc3QyL3NyYy9zbGppdC9zbGppdE5hdGl2ZVg4Nl82NC5jIGIvZGlzdDIvc3JjL3Nsaml0L3Nsaml0TmF0aXZlWDg2XzY0LmMKaW5kZXggMTc5MGQ4YS4uZTg4ZGRlZCAxMDA2NDQKLS0tIGEvZGlzdDIvc3JjL3Nsaml0L3Nsaml0TmF0aXZlWDg2XzY0LmMKKysrIGIvZGlzdDIvc3JjL3Nsaml0L3Nsaml0TmF0aXZlWDg2XzY0LmMKQEAgLTI2LDIwICsyNiwyMCBAQAogCiAvKiB4ODYgNjQtYml0IGFyY2ggZGVwZW5kZW50IGZ1bmN0aW9ucy4gKi8KIAotc3RhdGljIHNsaml0X3NpIGVtaXRfbG9hZF9pbW02NChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSByZWcsIHNsaml0X3N3IGltbSkKK3N0YXRpYyBzbGppdF9zMzIgZW1pdF9sb2FkX2ltbTY0KHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiByZWcsIHNsaml0X3N3IGltbSkKIHsKLQlzbGppdF91YiAqaW5zdDsKKwlzbGppdF91OCAqaW5zdDsKIAotCWluc3QgPSAoc2xqaXRfdWIqKWVuc3VyZV9idWYoY29tcGlsZXIsIDEgKyAyICsgc2l6ZW9mKHNsaml0X3N3KSk7CisJaW5zdCA9IChzbGppdF91OCopZW5zdXJlX2J1Zihjb21waWxlciwgMSArIDIgKyBzaXplb2Yoc2xqaXRfc3cpKTsKIAlGQUlMX0lGKCFpbnN0KTsKIAlJTkNfU0laRSgyICsgc2l6ZW9mKHNsaml0X3N3KSk7CiAJKmluc3QrKyA9IFJFWF9XIHwgKChyZWdfbWFwW3JlZ10gPD0gNykgPyAwIDogUkVYX0IpOwogCSppbnN0KysgPSBNT1Zfcl9pMzIgKyAocmVnX21hcFtyZWddICYgMHg3KTsKLQkqKHNsaml0X3N3KilpbnN0ID0gaW1tOworCXNsaml0X3VuYWxpZ25lZF9zdG9yZV9zdyhpbnN0LCBpbW0pOwogCXJldHVybiBTTEpJVF9TVUNDRVNTOwogfQogCi1zdGF0aWMgc2xqaXRfdWIqIGdlbmVyYXRlX2Zhcl9qdW1wX2NvZGUoc3RydWN0IHNsaml0X2p1bXAgKmp1bXAsIHNsaml0X3ViICpjb2RlX3B0ciwgc2xqaXRfc2kgdHlwZSkKK3N0YXRpYyBzbGppdF91OCogZ2VuZXJhdGVfZmFyX2p1bXBfY29kZShzdHJ1Y3Qgc2xqaXRfanVtcCAqanVtcCwgc2xqaXRfdTggKmNvZGVfcHRyLCBzbGppdF9zMzIgdHlwZSkKIHsKIAlpZiAodHlwZSA8IFNMSklUX0pVTVApIHsKIAkJLyogSW52ZXJ0IHR5cGUuICovCkBAIC01NSw3ICs1NSw3IEBACiAJaWYgKGp1bXAtPmZsYWdzICYgSlVNUF9MQUJFTCkKIAkJanVtcC0+ZmxhZ3MgfD0gUEFUQ0hfTUQ7CiAJZWxzZQotCQkqKHNsaml0X3N3Kiljb2RlX3B0ciA9IGp1bXAtPnUudGFyZ2V0OworCQlzbGppdF91bmFsaWduZWRfc3RvcmVfc3coY29kZV9wdHIsIGp1bXAtPnUudGFyZ2V0KTsKIAogCWNvZGVfcHRyICs9IHNpemVvZihzbGppdF9zdyk7CiAJKmNvZGVfcHRyKysgPSBSRVhfQjsKQEAgLTY1LDE5ICs2NSwxOSBAQAogCXJldHVybiBjb2RlX3B0cjsKIH0KIAotc3RhdGljIHNsaml0X3ViKiBnZW5lcmF0ZV9maXhlZF9qdW1wKHNsaml0X3ViICpjb2RlX3B0ciwgc2xqaXRfc3cgYWRkciwgc2xqaXRfc2kgdHlwZSkKK3N0YXRpYyBzbGppdF91OCogZ2VuZXJhdGVfZml4ZWRfanVtcChzbGppdF91OCAqY29kZV9wdHIsIHNsaml0X3N3IGFkZHIsIHNsaml0X3MzMiB0eXBlKQogewotCXNsaml0X3N3IGRlbHRhID0gYWRkciAtICgoc2xqaXRfc3cpY29kZV9wdHIgKyAxICsgc2l6ZW9mKHNsaml0X3NpKSk7CisJc2xqaXRfc3cgZGVsdGEgPSBhZGRyIC0gKChzbGppdF9zdyljb2RlX3B0ciArIDEgKyBzaXplb2Yoc2xqaXRfczMyKSk7CiAKIAlpZiAoZGVsdGEgPD0gSEFMRldPUkRfTUFYICYmIGRlbHRhID49IEhBTEZXT1JEX01JTikgewogCQkqY29kZV9wdHIrKyA9ICh0eXBlID09IDIpID8gQ0FMTF9pMzIgOiBKTVBfaTMyOwotCQkqKHNsaml0X3N3Kiljb2RlX3B0ciA9IGRlbHRhOworCQlzbGppdF91bmFsaWduZWRfc3RvcmVfc3coY29kZV9wdHIsIGRlbHRhKTsKIAl9CiAJZWxzZSB7CiAJCVNMSklUX0NPTVBJTEVfQVNTRVJUKHJlZ19tYXBbVE1QX1JFRzNdID09IDksIHRtcDNfaXNfOV9zZWNvbmQpOwogCQkqY29kZV9wdHIrKyA9IFJFWF9XIHwgUkVYX0I7CiAJCSpjb2RlX3B0cisrID0gTU9WX3JfaTMyICsgMTsKLQkJKihzbGppdF9zdyopY29kZV9wdHIgPSBhZGRyOworCQlzbGppdF91bmFsaWduZWRfc3RvcmVfc3coY29kZV9wdHIsIGFkZHIpOwogCQljb2RlX3B0ciArPSBzaXplb2Yoc2xqaXRfc3cpOwogCQkqY29kZV9wdHIrKyA9IFJFWF9COwogCQkqY29kZV9wdHIrKyA9IEdST1VQX0ZGOwpAQCAtODcsMTIgKzg3LDEyIEBACiAJcmV0dXJuIGNvZGVfcHRyOwogfQogCi1TTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9lbnRlcihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLAotCXNsaml0X3NpIG9wdGlvbnMsIHNsaml0X3NpIGFyZ3MsIHNsaml0X3NpIHNjcmF0Y2hlcywgc2xqaXRfc2kgc2F2ZWRzLAotCXNsaml0X3NpIGZzY3JhdGNoZXMsIHNsaml0X3NpIGZzYXZlZHMsIHNsaml0X3NpIGxvY2FsX3NpemUpCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfczMyIHNsaml0X2VtaXRfZW50ZXIoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwKKwlzbGppdF9zMzIgb3B0aW9ucywgc2xqaXRfczMyIGFyZ3MsIHNsaml0X3MzMiBzY3JhdGNoZXMsIHNsaml0X3MzMiBzYXZlZHMsCisJc2xqaXRfczMyIGZzY3JhdGNoZXMsIHNsaml0X3MzMiBmc2F2ZWRzLCBzbGppdF9zMzIgbG9jYWxfc2l6ZSkKIHsKLQlzbGppdF9zaSBpLCB0bXAsIHNpemUsIHNhdmVkX3JlZ2lzdGVyX3NpemU7Ci0Jc2xqaXRfdWIgKmluc3Q7CisJc2xqaXRfczMyIGksIHRtcCwgc2l6ZSwgc2F2ZWRfcmVnaXN0ZXJfc2l6ZTsKKwlzbGppdF91OCAqaW5zdDsKIAogCUNIRUNLX0VSUk9SKCk7CiAJQ0hFQ0soY2hlY2tfc2xqaXRfZW1pdF9lbnRlcihjb21waWxlciwgb3B0aW9ucywgYXJncywgc2NyYXRjaGVzLCBzYXZlZHMsIGZzY3JhdGNoZXMsIGZzYXZlZHMsIGxvY2FsX3NpemUpKTsKQEAgLTEwNiw3ICsxMDYsNyBAQAogCXRtcCA9IHNhdmVkcyA8IFNMSklUX05VTUJFUl9PRl9TQVZFRF9SRUdJU1RFUlMgPyAoU0xKSVRfUzAgKyAxIC0gc2F2ZWRzKSA6IFNMSklUX0ZJUlNUX1NBVkVEX1JFRzsKIAlmb3IgKGkgPSBTTEpJVF9TMDsgaSA+PSB0bXA7IGktLSkgewogCQlzaXplID0gcmVnX21hcFtpXSA+PSA4ID8gMiA6IDE7Ci0JCWluc3QgPSAoc2xqaXRfdWIqKWVuc3VyZV9idWYoY29tcGlsZXIsIDEgKyBzaXplKTsKKwkJaW5zdCA9IChzbGppdF91OCopZW5zdXJlX2J1Zihjb21waWxlciwgMSArIHNpemUpOwogCQlGQUlMX0lGKCFpbnN0KTsKIAkJSU5DX1NJWkUoc2l6ZSk7CiAJCWlmIChyZWdfbWFwW2ldID49IDgpCkBAIC0xMTYsNyArMTE2LDcgQEAKIAogCWZvciAoaSA9IHNjcmF0Y2hlczsgaSA+PSBTTEpJVF9GSVJTVF9TQVZFRF9SRUc7IGktLSkgewogCQlzaXplID0gcmVnX21hcFtpXSA+PSA4ID8gMiA6IDE7Ci0JCWluc3QgPSAoc2xqaXRfdWIqKWVuc3VyZV9idWYoY29tcGlsZXIsIDEgKyBzaXplKTsKKwkJaW5zdCA9IChzbGppdF91OCopZW5zdXJlX2J1Zihjb21waWxlciwgMSArIHNpemUpOwogCQlGQUlMX0lGKCFpbnN0KTsKIAkJSU5DX1NJWkUoc2l6ZSk7CiAJCWlmIChyZWdfbWFwW2ldID49IDgpCkBAIC0xMjYsNyArMTI2LDcgQEAKIAogCWlmIChhcmdzID4gMCkgewogCQlzaXplID0gYXJncyAqIDM7Ci0JCWluc3QgPSAoc2xqaXRfdWIqKWVuc3VyZV9idWYoY29tcGlsZXIsIDEgKyBzaXplKTsKKwkJaW5zdCA9IChzbGppdF91OCopZW5zdXJlX2J1Zihjb21waWxlciwgMSArIHNpemUpOwogCQlGQUlMX0lGKCFpbnN0KTsKIAogCQlJTkNfU0laRShzaXplKTsKQEAgLTE3Miw5ICsxNzIsOSBAQAogI2lmZGVmIF9XSU42NAogCWlmIChsb2NhbF9zaXplID4gMTAyNCkgewogCQkvKiBBbGxvY2F0ZSBzdGFjayBmb3IgdGhlIGNhbGxiYWNrLCB3aGljaCBncm93cyB0aGUgc3RhY2suICovCi0JCWluc3QgPSAoc2xqaXRfdWIqKWVuc3VyZV9idWYoY29tcGlsZXIsIDEgKyA0ICsgKDMgKyBzaXplb2Yoc2xqaXRfc2kpKSk7CisJCWluc3QgPSAoc2xqaXRfdTgqKWVuc3VyZV9idWYoY29tcGlsZXIsIDEgKyA0ICsgKDMgKyBzaXplb2Yoc2xqaXRfczMyKSkpOwogCQlGQUlMX0lGKCFpbnN0KTsKLQkJSU5DX1NJWkUoNCArICgzICsgc2l6ZW9mKHNsaml0X3NpKSkpOworCQlJTkNfU0laRSg0ICsgKDMgKyBzaXplb2Yoc2xqaXRfczMyKSkpOwogCQkqaW5zdCsrID0gUkVYX1c7CiAJCSppbnN0KysgPSBHUk9VUF9CSU5BUllfODM7CiAJCSppbnN0KysgPSBNT0RfUkVHIHwgU1VCIHwgNDsKQEAgLTE5Myw3ICsxOTMsNyBAQAogCQkqaW5zdCsrID0gUkVYX1c7CiAJCSppbnN0KysgPSBNT1Zfcm1faTMyOwogCQkqaW5zdCsrID0gTU9EX1JFRyB8IHJlZ19sbWFwW1NMSklUX1IwXTsKLQkJKihzbGppdF9zaSopaW5zdCA9IGxvY2FsX3NpemU7CisJCXNsaml0X3VuYWxpZ25lZF9zdG9yZV9zMzIoaW5zdCwgbG9jYWxfc2l6ZSk7CiAjaWYgKGRlZmluZWQgU0xKSVRfVkVSQk9TRSAmJiBTTEpJVF9WRVJCT1NFKSBcCiAJCQl8fCAoZGVmaW5lZCBTTEpJVF9BUkdVTUVOVF9DSEVDS1MgJiYgU0xKSVRfQVJHVU1FTlRfQ0hFQ0tTKQogCQljb21waWxlci0+c2tpcF9jaGVja3MgPSAxOwpAQCAtMjA0LDcgKzIwNCw3IEBACiAKIAlTTEpJVF9BU1NFUlQobG9jYWxfc2l6ZSA+IDApOwogCWlmIChsb2NhbF9zaXplIDw9IDEyNykgewotCQlpbnN0ID0gKHNsaml0X3ViKillbnN1cmVfYnVmKGNvbXBpbGVyLCAxICsgNCk7CisJCWluc3QgPSAoc2xqaXRfdTgqKWVuc3VyZV9idWYoY29tcGlsZXIsIDEgKyA0KTsKIAkJRkFJTF9JRighaW5zdCk7CiAJCUlOQ19TSVpFKDQpOwogCQkqaW5zdCsrID0gUkVYX1c7CkBAIC0yMTMsMzUgKzIxMywzNSBAQAogCQkqaW5zdCsrID0gbG9jYWxfc2l6ZTsKIAl9CiAJZWxzZSB7Ci0JCWluc3QgPSAoc2xqaXRfdWIqKWVuc3VyZV9idWYoY29tcGlsZXIsIDEgKyA3KTsKKwkJaW5zdCA9IChzbGppdF91OCopZW5zdXJlX2J1Zihjb21waWxlciwgMSArIDcpOwogCQlGQUlMX0lGKCFpbnN0KTsKIAkJSU5DX1NJWkUoNyk7CiAJCSppbnN0KysgPSBSRVhfVzsKIAkJKmluc3QrKyA9IEdST1VQX0JJTkFSWV84MTsKIAkJKmluc3QrKyA9IE1PRF9SRUcgfCBTVUIgfCA0OwotCQkqKHNsaml0X3NpKilpbnN0ID0gbG9jYWxfc2l6ZTsKLQkJaW5zdCArPSBzaXplb2Yoc2xqaXRfc2kpOworCQlzbGppdF91bmFsaWduZWRfc3RvcmVfczMyKGluc3QsIGxvY2FsX3NpemUpOworCQlpbnN0ICs9IHNpemVvZihzbGppdF9zMzIpOwogCX0KIAogI2lmZGVmIF9XSU42NAogCS8qIFNhdmUgeG1tNiByZWdpc3RlcjogbW92YXBzIFtyc3AgKyAweDIwXSwgeG1tNiAqLwogCWlmIChmc2NyYXRjaGVzID49IDYgfHwgZnNhdmVkcyA+PSAxKSB7Ci0JCWluc3QgPSAoc2xqaXRfdWIqKWVuc3VyZV9idWYoY29tcGlsZXIsIDEgKyA1KTsKKwkJaW5zdCA9IChzbGppdF91OCopZW5zdXJlX2J1Zihjb21waWxlciwgMSArIDUpOwogCQlGQUlMX0lGKCFpbnN0KTsKIAkJSU5DX1NJWkUoNSk7CiAJCSppbnN0KysgPSBHUk9VUF8wRjsKLQkJKihzbGppdF9zaSopaW5zdCA9IDB4MjAyNDc0Mjk7CisJCXNsaml0X3VuYWxpZ25lZF9zdG9yZV9zMzIoaW5zdCwgMHgyMDI0NzQyOSk7CiAJfQogI2VuZGlmCiAKIAlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKIH0KIAotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X3NldF9jb250ZXh0KHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsCi0Jc2xqaXRfc2kgb3B0aW9ucywgc2xqaXRfc2kgYXJncywgc2xqaXRfc2kgc2NyYXRjaGVzLCBzbGppdF9zaSBzYXZlZHMsCi0Jc2xqaXRfc2kgZnNjcmF0Y2hlcywgc2xqaXRfc2kgZnNhdmVkcywgc2xqaXRfc2kgbG9jYWxfc2l6ZSkKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zMzIgc2xqaXRfc2V0X2NvbnRleHQoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwKKwlzbGppdF9zMzIgb3B0aW9ucywgc2xqaXRfczMyIGFyZ3MsIHNsaml0X3MzMiBzY3JhdGNoZXMsIHNsaml0X3MzMiBzYXZlZHMsCisJc2xqaXRfczMyIGZzY3JhdGNoZXMsIHNsaml0X3MzMiBmc2F2ZWRzLCBzbGppdF9zMzIgbG9jYWxfc2l6ZSkKIHsKLQlzbGppdF9zaSBzYXZlZF9yZWdpc3Rlcl9zaXplOworCXNsaml0X3MzMiBzYXZlZF9yZWdpc3Rlcl9zaXplOwogCiAJQ0hFQ0tfRVJST1IoKTsKIAlDSEVDSyhjaGVja19zbGppdF9zZXRfY29udGV4dChjb21waWxlciwgb3B0aW9ucywgYXJncywgc2NyYXRjaGVzLCBzYXZlZHMsIGZzY3JhdGNoZXMsIGZzYXZlZHMsIGxvY2FsX3NpemUpKTsKQEAgLTI1MywxMCArMjUzLDEwIEBACiAJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CiB9CiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X3JldHVybihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwgc2xqaXRfc2kgc3JjLCBzbGppdF9zdyBzcmN3KQorU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3MzMiBzbGppdF9lbWl0X3JldHVybihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgb3AsIHNsaml0X3MzMiBzcmMsIHNsaml0X3N3IHNyY3cpCiB7Ci0Jc2xqaXRfc2kgaSwgdG1wLCBzaXplOwotCXNsaml0X3ViICppbnN0OworCXNsaml0X3MzMiBpLCB0bXAsIHNpemU7CisJc2xqaXRfdTggKmluc3Q7CiAKIAlDSEVDS19FUlJPUigpOwogCUNIRUNLKGNoZWNrX3Nsaml0X2VtaXRfcmV0dXJuKGNvbXBpbGVyLCBvcCwgc3JjLCBzcmN3KSk7CkBAIC0yNjcsMTcgKzI2NywxNyBAQAogI2lmZGVmIF9XSU42NAogCS8qIFJlc3RvcmUgeG1tNiByZWdpc3RlcjogbW92YXBzIHhtbTYsIFtyc3AgKyAweDIwXSAqLwogCWlmIChjb21waWxlci0+ZnNjcmF0Y2hlcyA+PSA2IHx8IGNvbXBpbGVyLT5mc2F2ZWRzID49IDEpIHsKLQkJaW5zdCA9IChzbGppdF91YiopZW5zdXJlX2J1Zihjb21waWxlciwgMSArIDUpOworCQlpbnN0ID0gKHNsaml0X3U4KillbnN1cmVfYnVmKGNvbXBpbGVyLCAxICsgNSk7CiAJCUZBSUxfSUYoIWluc3QpOwogCQlJTkNfU0laRSg1KTsKIAkJKmluc3QrKyA9IEdST1VQXzBGOwotCQkqKHNsaml0X3NpKilpbnN0ID0gMHgyMDI0NzQyODsKKwkJc2xqaXRfdW5hbGlnbmVkX3N0b3JlX3MzMihpbnN0LCAweDIwMjQ3NDI4KTsKIAl9CiAjZW5kaWYKIAogCVNMSklUX0FTU0VSVChjb21waWxlci0+bG9jYWxfc2l6ZSA+IDApOwogCWlmIChjb21waWxlci0+bG9jYWxfc2l6ZSA8PSAxMjcpIHsKLQkJaW5zdCA9IChzbGppdF91YiopZW5zdXJlX2J1Zihjb21waWxlciwgMSArIDQpOworCQlpbnN0ID0gKHNsaml0X3U4KillbnN1cmVfYnVmKGNvbXBpbGVyLCAxICsgNCk7CiAJCUZBSUxfSUYoIWluc3QpOwogCQlJTkNfU0laRSg0KTsKIAkJKmluc3QrKyA9IFJFWF9XOwpAQCAtMjg2LDE5ICsyODYsMTkgQEAKIAkJKmluc3QgPSBjb21waWxlci0+bG9jYWxfc2l6ZTsKIAl9CiAJZWxzZSB7Ci0JCWluc3QgPSAoc2xqaXRfdWIqKWVuc3VyZV9idWYoY29tcGlsZXIsIDEgKyA3KTsKKwkJaW5zdCA9IChzbGppdF91OCopZW5zdXJlX2J1Zihjb21waWxlciwgMSArIDcpOwogCQlGQUlMX0lGKCFpbnN0KTsKIAkJSU5DX1NJWkUoNyk7CiAJCSppbnN0KysgPSBSRVhfVzsKIAkJKmluc3QrKyA9IEdST1VQX0JJTkFSWV84MTsKIAkJKmluc3QrKyA9IE1PRF9SRUcgfCBBREQgfCA0OwotCQkqKHNsaml0X3NpKilpbnN0ID0gY29tcGlsZXItPmxvY2FsX3NpemU7CisJCXNsaml0X3VuYWxpZ25lZF9zdG9yZV9zMzIoaW5zdCwgY29tcGlsZXItPmxvY2FsX3NpemUpOwogCX0KIAogCXRtcCA9IGNvbXBpbGVyLT5zY3JhdGNoZXM7CiAJZm9yIChpID0gU0xKSVRfRklSU1RfU0FWRURfUkVHOyBpIDw9IHRtcDsgaSsrKSB7CiAJCXNpemUgPSByZWdfbWFwW2ldID49IDggPyAyIDogMTsKLQkJaW5zdCA9IChzbGppdF91YiopZW5zdXJlX2J1Zihjb21waWxlciwgMSArIHNpemUpOworCQlpbnN0ID0gKHNsaml0X3U4KillbnN1cmVfYnVmKGNvbXBpbGVyLCAxICsgc2l6ZSk7CiAJCUZBSUxfSUYoIWluc3QpOwogCQlJTkNfU0laRShzaXplKTsKIAkJaWYgKHJlZ19tYXBbaV0gPj0gOCkKQEAgLTMwOSw3ICszMDksNyBAQAogCXRtcCA9IGNvbXBpbGVyLT5zYXZlZHMgPCBTTEpJVF9OVU1CRVJfT0ZfU0FWRURfUkVHSVNURVJTID8gKFNMSklUX1MwICsgMSAtIGNvbXBpbGVyLT5zYXZlZHMpIDogU0xKSVRfRklSU1RfU0FWRURfUkVHOwogCWZvciAoaSA9IHRtcDsgaSA8PSBTTEpJVF9TMDsgaSsrKSB7CiAJCXNpemUgPSByZWdfbWFwW2ldID49IDggPyAyIDogMTsKLQkJaW5zdCA9IChzbGppdF91YiopZW5zdXJlX2J1Zihjb21waWxlciwgMSArIHNpemUpOworCQlpbnN0ID0gKHNsaml0X3U4KillbnN1cmVfYnVmKGNvbXBpbGVyLCAxICsgc2l6ZSk7CiAJCUZBSUxfSUYoIWluc3QpOwogCQlJTkNfU0laRShzaXplKTsKIAkJaWYgKHJlZ19tYXBbaV0gPj0gOCkKQEAgLTMxNyw3ICszMTcsNyBAQAogCQlQT1BfUkVHKHJlZ19sbWFwW2ldKTsKIAl9CiAKLQlpbnN0ID0gKHNsaml0X3ViKillbnN1cmVfYnVmKGNvbXBpbGVyLCAxICsgMSk7CisJaW5zdCA9IChzbGppdF91OCopZW5zdXJlX2J1Zihjb21waWxlciwgMSArIDEpOwogCUZBSUxfSUYoIWluc3QpOwogCUlOQ19TSVpFKDEpOwogCVJFVCgpOwpAQCAtMzI4LDMyICszMjgsMzIgQEAKIC8qICBPcGVyYXRvcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBzbGppdF9zaSBlbWl0X2RvX2ltbTMyKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3ViIHJleCwgc2xqaXRfdWIgb3Bjb2RlLCBzbGppdF9zdyBpbW0pCitzdGF0aWMgc2xqaXRfczMyIGVtaXRfZG9faW1tMzIoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfdTggcmV4LCBzbGppdF91OCBvcGNvZGUsIHNsaml0X3N3IGltbSkKIHsKLQlzbGppdF91YiAqaW5zdDsKLQlzbGppdF9zaSBsZW5ndGggPSAxICsgKHJleCA/IDEgOiAwKSArIHNpemVvZihzbGppdF9zaSk7CisJc2xqaXRfdTggKmluc3Q7CisJc2xqaXRfczMyIGxlbmd0aCA9IDEgKyAocmV4ID8gMSA6IDApICsgc2l6ZW9mKHNsaml0X3MzMik7CiAKLQlpbnN0ID0gKHNsaml0X3ViKillbnN1cmVfYnVmKGNvbXBpbGVyLCAxICsgbGVuZ3RoKTsKKwlpbnN0ID0gKHNsaml0X3U4KillbnN1cmVfYnVmKGNvbXBpbGVyLCAxICsgbGVuZ3RoKTsKIAlGQUlMX0lGKCFpbnN0KTsKIAlJTkNfU0laRShsZW5ndGgpOwogCWlmIChyZXgpCiAJCSppbnN0KysgPSByZXg7CiAJKmluc3QrKyA9IG9wY29kZTsKLQkqKHNsaml0X3NpKilpbnN0ID0gaW1tOworCXNsaml0X3VuYWxpZ25lZF9zdG9yZV9zMzIoaW5zdCwgaW1tKTsKIAlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKIH0KIAotc3RhdGljIHNsaml0X3ViKiBlbWl0X3g4Nl9pbnN0cnVjdGlvbihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBzaXplLAorc3RhdGljIHNsaml0X3U4KiBlbWl0X3g4Nl9pbnN0cnVjdGlvbihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgc2l6ZSwKIAkvKiBUaGUgcmVnaXN0ZXIgb3IgaW1tZWRpYXRlIG9wZXJhbmQuICovCi0Jc2xqaXRfc2kgYSwgc2xqaXRfc3cgaW1tYSwKKwlzbGppdF9zMzIgYSwgc2xqaXRfc3cgaW1tYSwKIAkvKiBUaGUgZ2VuZXJhbCBvcGVyYW5kIChub3QgaW1tZWRpYXRlKS4gKi8KLQlzbGppdF9zaSBiLCBzbGppdF9zdyBpbW1iKQorCXNsaml0X3MzMiBiLCBzbGppdF9zdyBpbW1iKQogewotCXNsaml0X3ViICppbnN0OwotCXNsaml0X3ViICpidWZfcHRyOwotCXNsaml0X3ViIHJleCA9IDA7Ci0Jc2xqaXRfc2kgZmxhZ3MgPSBzaXplICYgfjB4ZjsKLQlzbGppdF9zaSBpbnN0X3NpemU7CisJc2xqaXRfdTggKmluc3Q7CisJc2xqaXRfdTggKmJ1Zl9wdHI7CisJc2xqaXRfdTggcmV4ID0gMDsKKwlzbGppdF9zMzIgZmxhZ3MgPSBzaXplICYgfjB4ZjsKKwlzbGppdF9zMzIgaW5zdF9zaXplOwogCiAJLyogVGhlIGltbWVkaWF0ZSBvcGVyYW5kIG11c3QgYmUgMzIgYml0LiAqLwogCVNMSklUX0FTU0VSVCghKGEgJiBTTEpJVF9JTU0pIHx8IGNvbXBpbGVyLT5tb2RlMzIgfHwgSVNfSEFMRldPUkQoaW1tYSkpOwpAQCAtNDAwLDcgKzQwMCw3IEBACiAJCX0KIAogCQlpZiAoKGIgJiBSRUdfTUFTSykgPT0gU0xKSVRfVU5VU0VEKQotCQkJaW5zdF9zaXplICs9IDEgKyBzaXplb2Yoc2xqaXRfc2kpOyAvKiBTSUIgYnl0ZSByZXF1aXJlZCB0byBhdm9pZCBSSVAgYmFzZWQgYWRkcmVzc2luZy4gKi8KKwkJCWluc3Rfc2l6ZSArPSAxICsgc2l6ZW9mKHNsaml0X3MzMik7IC8qIFNJQiBieXRlIHJlcXVpcmVkIHRvIGF2b2lkIFJJUCBiYXNlZCBhZGRyZXNzaW5nLiAqLwogCQllbHNlIHsKIAkJCWlmIChyZWdfbWFwW2IgJiBSRUdfTUFTS10gPj0gOCkKIAkJCQlyZXggfD0gUkVYX0I7CkBAIC00MDgsMTIgKzQwOCwxMiBAQAogCQkJaWYgKGltbWIgIT0gMCAmJiAoIShiICYgT0ZGU19SRUdfTUFTSykgfHwgKGIgJiBPRkZTX1JFR19NQVNLKSA9PSBUT19PRkZTX1JFRyhTTEpJVF9TUCkpKSB7CiAJCQkJLyogSW1tZWRpYXRlIG9wZXJhbmQuICovCiAJCQkJaWYgKGltbWIgPD0gMTI3ICYmIGltbWIgPj0gLTEyOCkKLQkJCQkJaW5zdF9zaXplICs9IHNpemVvZihzbGppdF9zYik7CisJCQkJCWluc3Rfc2l6ZSArPSBzaXplb2Yoc2xqaXRfczgpOwogCQkJCWVsc2UKLQkJCQkJaW5zdF9zaXplICs9IHNpemVvZihzbGppdF9zaSk7CisJCQkJCWluc3Rfc2l6ZSArPSBzaXplb2Yoc2xqaXRfczMyKTsKIAkJCX0KIAkJCWVsc2UgaWYgKHJlZ19sbWFwW2IgJiBSRUdfTUFTS10gPT0gNSkKLQkJCQlpbnN0X3NpemUgKz0gc2l6ZW9mKHNsaml0X3NiKTsKKwkJCQlpbnN0X3NpemUgKz0gc2l6ZW9mKHNsaml0X3M4KTsKIAogCQkJaWYgKChiICYgT0ZGU19SRUdfTUFTSykgIT0gU0xKSVRfVU5VU0VEKSB7CiAJCQkJaW5zdF9zaXplICs9IDE7IC8qIFNJQiBieXRlLiAqLwpAQCAtNDQ0LDcgKzQ0NCw3IEBACiAJCWVsc2UgaWYgKGZsYWdzICYgRVg4Nl9IQUxGX0FSRykKIAkJCWluc3Rfc2l6ZSArPSBzaXplb2Yoc2hvcnQpOwogCQllbHNlCi0JCQlpbnN0X3NpemUgKz0gc2l6ZW9mKHNsaml0X3NpKTsKKwkJCWluc3Rfc2l6ZSArPSBzaXplb2Yoc2xqaXRfczMyKTsKIAl9CiAJZWxzZSB7CiAJCVNMSklUX0FTU0VSVCghKGZsYWdzICYgRVg4Nl9TSElGVF9JTlMpIHx8IGEgPT0gU0xKSVRfUFJFRl9TSElGVF9SRUcpOwpAQCAtNDU2LDcgKzQ1Niw3IEBACiAJaWYgKHJleCkKIAkJaW5zdF9zaXplKys7CiAKLQlpbnN0ID0gKHNsaml0X3ViKillbnN1cmVfYnVmKGNvbXBpbGVyLCAxICsgaW5zdF9zaXplKTsKKwlpbnN0ID0gKHNsaml0X3U4KillbnN1cmVfYnVmKGNvbXBpbGVyLCAxICsgaW5zdF9zaXplKTsKIAlQVFJfRkFJTF9JRighaW5zdCk7CiAKIAkvKiBFbmNvZGluZyB0aGUgYnl0ZS4gKi8KQEAgLTUxNiw4ICs1MTYsOCBAQAogCQkJCWlmIChpbW1iIDw9IDEyNyAmJiBpbW1iID49IC0xMjgpCiAJCQkJCSpidWZfcHRyKysgPSBpbW1iOyAvKiA4IGJpdCBkaXNwbGFjZW1lbnQuICovCiAJCQkJZWxzZSB7Ci0JCQkJCSooc2xqaXRfc2kqKWJ1Zl9wdHIgPSBpbW1iOyAvKiAzMiBiaXQgZGlzcGxhY2VtZW50LiAqLwotCQkJCQlidWZfcHRyICs9IHNpemVvZihzbGppdF9zaSk7CisJCQkJCXNsaml0X3VuYWxpZ25lZF9zdG9yZV9zMzIoYnVmX3B0ciwgaW1tYik7IC8qIDMyIGJpdCBkaXNwbGFjZW1lbnQuICovCisJCQkJCWJ1Zl9wdHIgKz0gc2l6ZW9mKHNsaml0X3MzMik7CiAJCQkJfQogCQkJfQogCQl9CkBAIC01MzMsMTcgKzUzMywxNyBAQAogCWVsc2UgewogCQkqYnVmX3B0cisrIHw9IDB4MDQ7CiAJCSpidWZfcHRyKysgPSAweDI1OwotCQkqKHNsaml0X3NpKilidWZfcHRyID0gaW1tYjsgLyogMzIgYml0IGRpc3BsYWNlbWVudC4gKi8KLQkJYnVmX3B0ciArPSBzaXplb2Yoc2xqaXRfc2kpOworCQlzbGppdF91bmFsaWduZWRfc3RvcmVfczMyKGJ1Zl9wdHIsIGltbWIpOyAvKiAzMiBiaXQgZGlzcGxhY2VtZW50LiAqLworCQlidWZfcHRyICs9IHNpemVvZihzbGppdF9zMzIpOwogCX0KIAogCWlmIChhICYgU0xKSVRfSU1NKSB7CiAJCWlmIChmbGFncyAmIEVYODZfQllURV9BUkcpCiAJCQkqYnVmX3B0ciA9IGltbWE7CiAJCWVsc2UgaWYgKGZsYWdzICYgRVg4Nl9IQUxGX0FSRykKLQkJCSooc2hvcnQqKWJ1Zl9wdHIgPSBpbW1hOworCQkJc2xqaXRfdW5hbGlnbmVkX3N0b3JlX3MxNihidWZfcHRyLCBpbW1hKTsKIAkJZWxzZSBpZiAoIShmbGFncyAmIEVYODZfU0hJRlRfSU5TKSkKLQkJCSooc2xqaXRfc2kqKWJ1Zl9wdHIgPSBpbW1hOworCQkJc2xqaXRfdW5hbGlnbmVkX3N0b3JlX3MzMihidWZfcHRyLCBpbW1hKTsKIAl9CiAKIAlyZXR1cm4gIShmbGFncyAmIEVYODZfU0hJRlRfSU5TKSA/IGluc3QgOiAoaW5zdCArIDEpOwpAQCAtNTUzLDE0ICs1NTMsMTQgQEAKIC8qICBDYWxsIC8gcmV0dXJuIGluc3RydWN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBTTEpJVF9JTkxJTkUgc2xqaXRfc2kgY2FsbF93aXRoX2FyZ3Moc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgdHlwZSkKK3N0YXRpYyBTTEpJVF9JTkxJTkUgc2xqaXRfczMyIGNhbGxfd2l0aF9hcmdzKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiB0eXBlKQogewotCXNsaml0X3ViICppbnN0OworCXNsaml0X3U4ICppbnN0OwogCiAjaWZuZGVmIF9XSU42NAogCVNMSklUX0NPTVBJTEVfQVNTRVJUKHJlZ19tYXBbU0xKSVRfUjFdID09IDYgJiYgcmVnX21hcFtTTEpJVF9SMF0gPCA4ICYmIHJlZ19tYXBbU0xKSVRfUjJdIDwgOCwgYXJnc19yZWdpc3RlcnMpOwogCi0JaW5zdCA9IChzbGppdF91YiopZW5zdXJlX2J1Zihjb21waWxlciwgMSArICgodHlwZSA8IFNMSklUX0NBTEwzKSA/IDMgOiA2KSk7CisJaW5zdCA9IChzbGppdF91OCopZW5zdXJlX2J1Zihjb21waWxlciwgMSArICgodHlwZSA8IFNMSklUX0NBTEwzKSA/IDMgOiA2KSk7CiAJRkFJTF9JRighaW5zdCk7CiAJSU5DX1NJWkUoKHR5cGUgPCBTTEpJVF9DQUxMMykgPyAzIDogNik7CiAJaWYgKHR5cGUgPj0gU0xKSVRfQ0FMTDMpIHsKQEAgLTU3NCw3ICs1NzQsNyBAQAogI2Vsc2UKIAlTTEpJVF9DT01QSUxFX0FTU0VSVChyZWdfbWFwW1NMSklUX1IxXSA9PSAyICYmIHJlZ19tYXBbU0xKSVRfUjBdIDwgOCAmJiByZWdfbWFwW1NMSklUX1IyXSA8IDgsIGFyZ3NfcmVnaXN0ZXJzKTsKIAotCWluc3QgPSAoc2xqaXRfdWIqKWVuc3VyZV9idWYoY29tcGlsZXIsIDEgKyAoKHR5cGUgPCBTTEpJVF9DQUxMMykgPyAzIDogNikpOworCWluc3QgPSAoc2xqaXRfdTgqKWVuc3VyZV9idWYoY29tcGlsZXIsIDEgKyAoKHR5cGUgPCBTTEpJVF9DQUxMMykgPyAzIDogNikpOwogCUZBSUxfSUYoIWluc3QpOwogCUlOQ19TSVpFKCh0eXBlIDwgU0xKSVRfQ0FMTDMpID8gMyA6IDYpOwogCWlmICh0eXBlID49IFNMSklUX0NBTEwzKSB7CkBAIC01ODksOSArNTg5LDkgQEAKIAlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKIH0KIAotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfZmFzdF9lbnRlcihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcpCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfczMyIHNsaml0X2VtaXRfZmFzdF9lbnRlcihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgZHN0LCBzbGppdF9zdyBkc3R3KQogewotCXNsaml0X3ViICppbnN0OworCXNsaml0X3U4ICppbnN0OwogCiAJQ0hFQ0tfRVJST1IoKTsKIAlDSEVDSyhjaGVja19zbGppdF9lbWl0X2Zhc3RfZW50ZXIoY29tcGlsZXIsIGRzdCwgZHN0dykpOwpAQCAtNjAzLDE0ICs2MDMsMTQgQEAKIAogCWlmIChGQVNUX0lTX1JFRyhkc3QpKSB7CiAJCWlmIChyZWdfbWFwW2RzdF0gPCA4KSB7Ci0JCQlpbnN0ID0gKHNsaml0X3ViKillbnN1cmVfYnVmKGNvbXBpbGVyLCAxICsgMSk7CisJCQlpbnN0ID0gKHNsaml0X3U4KillbnN1cmVfYnVmKGNvbXBpbGVyLCAxICsgMSk7CiAJCQlGQUlMX0lGKCFpbnN0KTsKIAkJCUlOQ19TSVpFKDEpOwogCQkJUE9QX1JFRyhyZWdfbG1hcFtkc3RdKTsKIAkJCXJldHVybiBTTEpJVF9TVUNDRVNTOwogCQl9CiAKLQkJaW5zdCA9IChzbGppdF91YiopZW5zdXJlX2J1Zihjb21waWxlciwgMSArIDIpOworCQlpbnN0ID0gKHNsaml0X3U4KillbnN1cmVfYnVmKGNvbXBpbGVyLCAxICsgMik7CiAJCUZBSUxfSUYoIWluc3QpOwogCQlJTkNfU0laRSgyKTsKIAkJKmluc3QrKyA9IFJFWF9COwpAQCAtNjI2LDkgKzYyNiw5IEBACiAJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CiB9CiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X2Zhc3RfcmV0dXJuKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIHNyYywgc2xqaXRfc3cgc3JjdykKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zMzIgc2xqaXRfZW1pdF9mYXN0X3JldHVybihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgc3JjLCBzbGppdF9zdyBzcmN3KQogewotCXNsaml0X3ViICppbnN0OworCXNsaml0X3U4ICppbnN0OwogCiAJQ0hFQ0tfRVJST1IoKTsKIAlDSEVDSyhjaGVja19zbGppdF9lbWl0X2Zhc3RfcmV0dXJuKGNvbXBpbGVyLCBzcmMsIHNyY3cpKTsKQEAgLTY0MSwxNCArNjQxLDE0IEBACiAKIAlpZiAoRkFTVF9JU19SRUcoc3JjKSkgewogCQlpZiAocmVnX21hcFtzcmNdIDwgOCkgewotCQkJaW5zdCA9IChzbGppdF91YiopZW5zdXJlX2J1Zihjb21waWxlciwgMSArIDEgKyAxKTsKKwkJCWluc3QgPSAoc2xqaXRfdTgqKWVuc3VyZV9idWYoY29tcGlsZXIsIDEgKyAxICsgMSk7CiAJCQlGQUlMX0lGKCFpbnN0KTsKIAogCQkJSU5DX1NJWkUoMSArIDEpOwogCQkJUFVTSF9SRUcocmVnX2xtYXBbc3JjXSk7CiAJCX0KIAkJZWxzZSB7Ci0JCQlpbnN0ID0gKHNsaml0X3ViKillbnN1cmVfYnVmKGNvbXBpbGVyLCAxICsgMiArIDEpOworCQkJaW5zdCA9IChzbGppdF91OCopZW5zdXJlX2J1Zihjb21waWxlciwgMSArIDIgKyAxKTsKIAkJCUZBSUxfSUYoIWluc3QpOwogCiAJCQlJTkNfU0laRSgyICsgMSk7CkBAIC02NjQsMjAgKzY2NCwyMCBAQAogCQkqaW5zdCsrID0gR1JPVVBfRkY7CiAJCSppbnN0IHw9IFBVU0hfcm07CiAKLQkJaW5zdCA9IChzbGppdF91YiopZW5zdXJlX2J1Zihjb21waWxlciwgMSArIDEpOworCQlpbnN0ID0gKHNsaml0X3U4KillbnN1cmVfYnVmKGNvbXBpbGVyLCAxICsgMSk7CiAJCUZBSUxfSUYoIWluc3QpOwogCQlJTkNfU0laRSgxKTsKIAl9CiAJZWxzZSB7CiAJCVNMSklUX0FTU0VSVChJU19IQUxGV09SRChzcmN3KSk7CiAJCS8qIFNMSklUX0lNTS4gKi8KLQkJaW5zdCA9IChzbGppdF91YiopZW5zdXJlX2J1Zihjb21waWxlciwgMSArIDUgKyAxKTsKKwkJaW5zdCA9IChzbGppdF91OCopZW5zdXJlX2J1Zihjb21waWxlciwgMSArIDUgKyAxKTsKIAkJRkFJTF9JRighaW5zdCk7CiAKIAkJSU5DX1NJWkUoNSArIDEpOwogCQkqaW5zdCsrID0gUFVTSF9pMzI7Ci0JCSooc2xqaXRfc2kqKWluc3QgPSBzcmN3OwotCQlpbnN0ICs9IHNpemVvZihzbGppdF9zaSk7CisJCXNsaml0X3VuYWxpZ25lZF9zdG9yZV9zMzIoaW5zdCwgc3Jjdyk7CisJCWluc3QgKz0gc2l6ZW9mKHNsaml0X3MzMik7CiAJfQogCiAJUkVUKCk7CkBAIC02ODksMTIgKzY4OSwxMiBAQAogLyogIEV4dGVuZCBpbnB1dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIHNsaml0X3NpIGVtaXRfbW92X2ludChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBzaWduLAotCXNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dywKLQlzbGppdF9zaSBzcmMsIHNsaml0X3N3IHNyY3cpCitzdGF0aWMgc2xqaXRfczMyIGVtaXRfbW92X2ludChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgc2lnbiwKKwlzbGppdF9zMzIgZHN0LCBzbGppdF9zdyBkc3R3LAorCXNsaml0X3MzMiBzcmMsIHNsaml0X3N3IHNyY3cpCiB7Ci0Jc2xqaXRfdWIqIGluc3Q7Ci0Jc2xqaXRfc2kgZHN0X3I7CisJc2xqaXRfdTgqIGluc3Q7CisJc2xqaXRfczMyIGRzdF9yOwogCiAJY29tcGlsZXItPm1vZGUzMiA9IDA7CiAKQEAgLTcwNCw3ICs3MDQsNyBAQAogCWlmIChzcmMgJiBTTEpJVF9JTU0pIHsKIAkJaWYgKEZBU1RfSVNfUkVHKGRzdCkpIHsKIAkJCWlmIChzaWduIHx8ICgoc2xqaXRfdXcpc3JjdyA8PSAweDdmZmZmZmZmKSkgewotCQkJCWluc3QgPSBlbWl0X3g4Nl9pbnN0cnVjdGlvbihjb21waWxlciwgMSwgU0xKSVRfSU1NLCAoc2xqaXRfc3cpKHNsaml0X3NpKXNyY3csIGRzdCwgZHN0dyk7CisJCQkJaW5zdCA9IGVtaXRfeDg2X2luc3RydWN0aW9uKGNvbXBpbGVyLCAxLCBTTEpJVF9JTU0sIChzbGppdF9zdykoc2xqaXRfczMyKXNyY3csIGRzdCwgZHN0dyk7CiAJCQkJRkFJTF9JRighaW5zdCk7CiAJCQkJKmluc3QgPSBNT1Zfcm1faTMyOwogCQkJCXJldHVybiBTTEpJVF9TVUNDRVNTOwpAQCAtNzEyLDcgKzcxMiw3IEBACiAJCQlyZXR1cm4gZW1pdF9sb2FkX2ltbTY0KGNvbXBpbGVyLCBkc3QsIHNyY3cpOwogCQl9CiAJCWNvbXBpbGVyLT5tb2RlMzIgPSAxOwotCQlpbnN0ID0gZW1pdF94ODZfaW5zdHJ1Y3Rpb24oY29tcGlsZXIsIDEsIFNMSklUX0lNTSwgKHNsaml0X3N3KShzbGppdF9zaSlzcmN3LCBkc3QsIGRzdHcpOworCQlpbnN0ID0gZW1pdF94ODZfaW5zdHJ1Y3Rpb24oY29tcGlsZXIsIDEsIFNMSklUX0lNTSwgKHNsaml0X3N3KShzbGppdF9zMzIpc3JjdywgZHN0LCBkc3R3KTsKIAkJRkFJTF9JRighaW5zdCk7CiAJCSppbnN0ID0gTU9WX3JtX2kzMjsKIAkJY29tcGlsZXItPm1vZGUzMiA9IDA7CmRpZmYgLS1naXQgYS9kaXN0Mi9zcmMvc2xqaXQvc2xqaXROYXRpdmVYODZfY29tbW9uLmMgYi9kaXN0Mi9zcmMvc2xqaXQvc2xqaXROYXRpdmVYODZfY29tbW9uLmMKaW5kZXggNDE2YzE1YS4uYWE1YmEwOCAxMDA2NDQKLS0tIGEvZGlzdDIvc3JjL3Nsaml0L3Nsaml0TmF0aXZlWDg2X2NvbW1vbi5jCisrKyBiL2Rpc3QyL3NyYy9zbGppdC9zbGppdE5hdGl2ZVg4Nl9jb21tb24uYwpAQCAtMjQsNyArMjQsNyBAQAogICogQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBTTEpJVF9DT05TVCBjaGFyKiBzbGppdF9nZXRfcGxhdGZvcm1fbmFtZSh2b2lkKQorU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIGNvbnN0IGNoYXIqIHNsaml0X2dldF9wbGF0Zm9ybV9uYW1lKHZvaWQpCiB7CiAJcmV0dXJuICJ4ODYiIFNMSklUX0NQVUlORk87CiB9CkBAIC02Niw3ICs2Niw3IEBACiAvKiBMYXN0IHJlZ2lzdGVyICsgMS4gKi8KICNkZWZpbmUgVE1QX1JFRzEJKFNMSklUX05VTUJFUl9PRl9SRUdJU1RFUlMgKyAyKQogCi1zdGF0aWMgU0xKSVRfQ09OU1Qgc2xqaXRfdWIgcmVnX21hcFtTTEpJVF9OVU1CRVJfT0ZfUkVHSVNURVJTICsgM10gPSB7CitzdGF0aWMgY29uc3Qgc2xqaXRfdTggcmVnX21hcFtTTEpJVF9OVU1CRVJfT0ZfUkVHSVNURVJTICsgM10gPSB7CiAJMCwgMCwgMiwgMSwgMCwgMCwgMCwgMCwgNywgNiwgMywgNCwgNQogfTsKIApAQCAtODksMjAgKzg5LDIwIEBACiAgICB0aGVyZWZvcmUgcjEyIGlzIGJldHRlciBmb3IgU0FWRURfRVJFRyB0aGFuIFNBVkVEX1JFRy4gKi8KICNpZm5kZWYgX1dJTjY0CiAvKiAxc3QgcGFzc2VkIGluIHJkaSwgMm5kIGFyZ3VtZW50IHBhc3NlZCBpbiByc2ksIDNyZCBpbiByZHguICovCi1zdGF0aWMgU0xKSVRfQ09OU1Qgc2xqaXRfdWIgcmVnX21hcFtTTEpJVF9OVU1CRVJfT0ZfUkVHSVNURVJTICsgNV0gPSB7CitzdGF0aWMgY29uc3Qgc2xqaXRfdTggcmVnX21hcFtTTEpJVF9OVU1CRVJfT0ZfUkVHSVNURVJTICsgNV0gPSB7CiAJMCwgMCwgNiwgMSwgOCwgMTEsIDEwLCAxMiwgNSwgMTMsIDE0LCAxNSwgMywgNCwgMiwgNywgOQogfTsKIC8qIGxvdy1tYXAuIHJlZ19tYXAgJiAweDcuICovCi1zdGF0aWMgU0xKSVRfQ09OU1Qgc2xqaXRfdWIgcmVnX2xtYXBbU0xKSVRfTlVNQkVSX09GX1JFR0lTVEVSUyArIDVdID0geworc3RhdGljIGNvbnN0IHNsaml0X3U4IHJlZ19sbWFwW1NMSklUX05VTUJFUl9PRl9SRUdJU1RFUlMgKyA1XSA9IHsKIAkwLCAwLCA2LCAxLCAwLCAzLCAgMiwgIDQsICA1LCAgNSwgIDYsICA3LCAzLCA0LCAyLCA3LCAxCiB9OwogI2Vsc2UKIC8qIDFzdCBwYXNzZWQgaW4gcmN4LCAybmQgYXJndW1lbnQgcGFzc2VkIGluIHJkeCwgM3JkIGluIHI4LiAqLwotc3RhdGljIFNMSklUX0NPTlNUIHNsaml0X3ViIHJlZ19tYXBbU0xKSVRfTlVNQkVSX09GX1JFR0lTVEVSUyArIDVdID0geworc3RhdGljIGNvbnN0IHNsaml0X3U4IHJlZ19tYXBbU0xKSVRfTlVNQkVSX09GX1JFR0lTVEVSUyArIDVdID0gewogCTAsIDAsIDIsIDEsIDExLCAxMiwgNSwgMTMsIDE0LCAxNSwgNywgNiwgMywgNCwgMTAsIDgsIDkKIH07CiAvKiBsb3ctbWFwLiByZWdfbWFwICYgMHg3LiAqLwotc3RhdGljIFNMSklUX0NPTlNUIHNsaml0X3ViIHJlZ19sbWFwW1NMSklUX05VTUJFUl9PRl9SRUdJU1RFUlMgKyA1XSA9IHsKK3N0YXRpYyBjb25zdCBzbGppdF91OCByZWdfbG1hcFtTTEpJVF9OVU1CRVJfT0ZfUkVHSVNURVJTICsgNV0gPSB7CiAJMCwgMCwgMiwgMSwgMywgIDQsICA1LCAgNSwgNiwgIDcsICA3LCA2LCAzLCA0LCAyLCAgMCwgMQogfTsKICNlbmRpZgpAQCAtMjY5LDkgKzI2OSw5IEBACiAgICBidWlsdC1pbiBDUFUgZmVhdHVyZXMuIFRoZXJlZm9yZSB0aGV5IGNhbiBiZSBvdmVyd3JpdHRlbiBieSBkaWZmZXJlbnQgdGhyZWFkcwogICAgaWYgdGhleSBkZXRlY3QgdGhlIENQVSBmZWF0dXJlcyBpbiB0aGUgc2FtZSB0aW1lLiAqLwogI2lmIChkZWZpbmVkIFNMSklUX0RFVEVDVF9TU0UyICYmIFNMSklUX0RFVEVDVF9TU0UyKQotc3RhdGljIHNsaml0X3NpIGNwdV9oYXNfc3NlMiA9IC0xOworc3RhdGljIHNsaml0X3MzMiBjcHVfaGFzX3NzZTIgPSAtMTsKICNlbmRpZgotc3RhdGljIHNsaml0X3NpIGNwdV9oYXNfY21vdiA9IC0xOworc3RhdGljIHNsaml0X3MzMiBjcHVfaGFzX2Ntb3YgPSAtMTsKIAogI2lmZGVmIF9XSU4zMl9XQ0UKICNpbmNsdWRlIDxjbW5pbnRyaW4uaD4KQEAgLTI3OSwxNSArMjc5LDM4IEBACiAjaW5jbHVkZSA8aW50cmluLmg+CiAjZW5kaWYKIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgIFVuYWxpZ25lZC1zdG9yZSBmdW5jdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgU0xKSVRfSU5MSU5FIHZvaWQgc2xqaXRfdW5hbGlnbmVkX3N0b3JlX3MxNih2b2lkICphZGRyLCBzbGppdF9zMTYgdmFsdWUpCit7CisJU0xKSVRfTUVNQ1BZKGFkZHIsICZ2YWx1ZSwgc2l6ZW9mKHZhbHVlKSk7Cit9CisKK3N0YXRpYyBTTEpJVF9JTkxJTkUgdm9pZCBzbGppdF91bmFsaWduZWRfc3RvcmVfczMyKHZvaWQgKmFkZHIsIHNsaml0X3MzMiB2YWx1ZSkKK3sKKwlTTEpJVF9NRU1DUFkoYWRkciwgJnZhbHVlLCBzaXplb2YodmFsdWUpKTsKK30KKworc3RhdGljIFNMSklUX0lOTElORSB2b2lkIHNsaml0X3VuYWxpZ25lZF9zdG9yZV9zdyh2b2lkICphZGRyLCBzbGppdF9zdyB2YWx1ZSkKK3sKKwlTTEpJVF9NRU1DUFkoYWRkciwgJnZhbHVlLCBzaXplb2YodmFsdWUpKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgIFV0aWxpdHkgZnVuY3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCiBzdGF0aWMgdm9pZCBnZXRfY3B1X2ZlYXR1cmVzKHZvaWQpCiB7Ci0Jc2xqaXRfdWkgZmVhdHVyZXM7CisJc2xqaXRfdTMyIGZlYXR1cmVzOwogCiAjaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgX01TQ19WRVIgPj0gMTQwMAogCiAJaW50IENQVUluZm9bNF07CiAJX19jcHVpZChDUFVJbmZvLCAxKTsKLQlmZWF0dXJlcyA9IChzbGppdF91aSlDUFVJbmZvWzNdOworCWZlYXR1cmVzID0gKHNsaml0X3UzMilDUFVJbmZvWzNdOwogCiAjZWxpZiBkZWZpbmVkKF9fR05VQ19fKSB8fCBkZWZpbmVkKF9fSU5URUxfQ09NUElMRVIpIHx8IGRlZmluZWQoX19TVU5QUk9fQykKIApAQCAtMzMwLDMxICszNTMsMzEgQEAKIAljcHVfaGFzX2Ntb3YgPSAoZmVhdHVyZXMgPj4gMTUpICYgMHgxOwogfQogCi1zdGF0aWMgc2xqaXRfdWIgZ2V0X2p1bXBfY29kZShzbGppdF9zaSB0eXBlKQorc3RhdGljIHNsaml0X3U4IGdldF9qdW1wX2NvZGUoc2xqaXRfczMyIHR5cGUpCiB7CiAJc3dpdGNoICh0eXBlKSB7CiAJY2FzZSBTTEpJVF9FUVVBTDoKLQljYXNlIFNMSklUX0RfRVFVQUw6CisJY2FzZSBTTEpJVF9FUVVBTF9GNjQ6CiAJCXJldHVybiAweDg0IC8qIGplICovOwogCiAJY2FzZSBTTEpJVF9OT1RfRVFVQUw6Ci0JY2FzZSBTTEpJVF9EX05PVF9FUVVBTDoKKwljYXNlIFNMSklUX05PVF9FUVVBTF9GNjQ6CiAJCXJldHVybiAweDg1IC8qIGpuZSAqLzsKIAogCWNhc2UgU0xKSVRfTEVTUzoKLQljYXNlIFNMSklUX0RfTEVTUzoKKwljYXNlIFNMSklUX0xFU1NfRjY0OgogCQlyZXR1cm4gMHg4MiAvKiBqYyAqLzsKIAogCWNhc2UgU0xKSVRfR1JFQVRFUl9FUVVBTDoKLQljYXNlIFNMSklUX0RfR1JFQVRFUl9FUVVBTDoKKwljYXNlIFNMSklUX0dSRUFURVJfRVFVQUxfRjY0OgogCQlyZXR1cm4gMHg4MyAvKiBqYWUgKi87CiAKIAljYXNlIFNMSklUX0dSRUFURVI6Ci0JY2FzZSBTTEpJVF9EX0dSRUFURVI6CisJY2FzZSBTTEpJVF9HUkVBVEVSX0Y2NDoKIAkJcmV0dXJuIDB4ODcgLyogam5iZSAqLzsKIAogCWNhc2UgU0xKSVRfTEVTU19FUVVBTDoKLQljYXNlIFNMSklUX0RfTEVTU19FUVVBTDoKKwljYXNlIFNMSklUX0xFU1NfRVFVQUxfRjY0OgogCQlyZXR1cm4gMHg4NiAvKiBqYmUgKi87CiAKIAljYXNlIFNMSklUX1NJR19MRVNTOgpAQCAtMzc3LDI0ICs0MDAsMjQgQEAKIAljYXNlIFNMSklUX01VTF9OT1RfT1ZFUkZMT1c6CiAJCXJldHVybiAweDgxIC8qIGpubyAqLzsKIAotCWNhc2UgU0xKSVRfRF9VTk9SREVSRUQ6CisJY2FzZSBTTEpJVF9VTk9SREVSRURfRjY0OgogCQlyZXR1cm4gMHg4YSAvKiBqcCAqLzsKIAotCWNhc2UgU0xKSVRfRF9PUkRFUkVEOgorCWNhc2UgU0xKSVRfT1JERVJFRF9GNjQ6CiAJCXJldHVybiAweDhiIC8qIGpwbyAqLzsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzbGppdF91YiogZ2VuZXJhdGVfZmFyX2p1bXBfY29kZShzdHJ1Y3Qgc2xqaXRfanVtcCAqanVtcCwgc2xqaXRfdWIgKmNvZGVfcHRyLCBzbGppdF9zaSB0eXBlKTsKK3N0YXRpYyBzbGppdF91OCogZ2VuZXJhdGVfZmFyX2p1bXBfY29kZShzdHJ1Y3Qgc2xqaXRfanVtcCAqanVtcCwgc2xqaXRfdTggKmNvZGVfcHRyLCBzbGppdF9zMzIgdHlwZSk7CiAKICNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2XzY0ICYmIFNMSklUX0NPTkZJR19YODZfNjQpCi1zdGF0aWMgc2xqaXRfdWIqIGdlbmVyYXRlX2ZpeGVkX2p1bXAoc2xqaXRfdWIgKmNvZGVfcHRyLCBzbGppdF9zdyBhZGRyLCBzbGppdF9zaSB0eXBlKTsKK3N0YXRpYyBzbGppdF91OCogZ2VuZXJhdGVfZml4ZWRfanVtcChzbGppdF91OCAqY29kZV9wdHIsIHNsaml0X3N3IGFkZHIsIHNsaml0X3MzMiB0eXBlKTsKICNlbmRpZgogCi1zdGF0aWMgc2xqaXRfdWIqIGdlbmVyYXRlX25lYXJfanVtcF9jb2RlKHN0cnVjdCBzbGppdF9qdW1wICpqdW1wLCBzbGppdF91YiAqY29kZV9wdHIsIHNsaml0X3ViICpjb2RlLCBzbGppdF9zaSB0eXBlKQorc3RhdGljIHNsaml0X3U4KiBnZW5lcmF0ZV9uZWFyX2p1bXBfY29kZShzdHJ1Y3Qgc2xqaXRfanVtcCAqanVtcCwgc2xqaXRfdTggKmNvZGVfcHRyLCBzbGppdF91OCAqY29kZSwgc2xqaXRfczMyIHR5cGUpCiB7Ci0Jc2xqaXRfc2kgc2hvcnRfanVtcDsKKwlzbGppdF9zMzIgc2hvcnRfanVtcDsKIAlzbGppdF91dyBsYWJlbF9hZGRyOwogCiAJaWYgKGp1bXAtPmZsYWdzICYgSlVNUF9MQUJFTCkKQEAgLTQzMiwxMyArNDU1LDEzIEBACiAKIAlpZiAoc2hvcnRfanVtcCkgewogCQlqdW1wLT5mbGFncyB8PSBQQVRDSF9NQjsKLQkJY29kZV9wdHIgKz0gc2l6ZW9mKHNsaml0X3NiKTsKKwkJY29kZV9wdHIgKz0gc2l6ZW9mKHNsaml0X3M4KTsKIAl9IGVsc2UgewogCQlqdW1wLT5mbGFncyB8PSBQQVRDSF9NVzsKICNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2XzMyICYmIFNMSklUX0NPTkZJR19YODZfMzIpCiAJCWNvZGVfcHRyICs9IHNpemVvZihzbGppdF9zdyk7CiAjZWxzZQotCQljb2RlX3B0ciArPSBzaXplb2Yoc2xqaXRfc2kpOworCQljb2RlX3B0ciArPSBzaXplb2Yoc2xqaXRfczMyKTsKICNlbmRpZgogCX0KIApAQCAtNDQ4LDExICs0NzEsMTEgQEAKIFNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSB2b2lkKiBzbGppdF9nZW5lcmF0ZV9jb2RlKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIpCiB7CiAJc3RydWN0IHNsaml0X21lbW9yeV9mcmFnbWVudCAqYnVmOwotCXNsaml0X3ViICpjb2RlOwotCXNsaml0X3ViICpjb2RlX3B0cjsKLQlzbGppdF91YiAqYnVmX3B0cjsKLQlzbGppdF91YiAqYnVmX2VuZDsKLQlzbGppdF91YiBsZW47CisJc2xqaXRfdTggKmNvZGU7CisJc2xqaXRfdTggKmNvZGVfcHRyOworCXNsaml0X3U4ICpidWZfcHRyOworCXNsaml0X3U4ICpidWZfZW5kOworCXNsaml0X3U4IGxlbjsKIAogCXN0cnVjdCBzbGppdF9sYWJlbCAqbGFiZWw7CiAJc3RydWN0IHNsaml0X2p1bXAgKmp1bXA7CkBAIC00NjMsNyArNDg2LDcgQEAKIAlyZXZlcnNlX2J1Zihjb21waWxlcik7CiAKIAkvKiBTZWNvbmQgY29kZSBnZW5lcmF0aW9uIHBhc3MuICovCi0JY29kZSA9IChzbGppdF91YiopU0xKSVRfTUFMTE9DX0VYRUMoY29tcGlsZXItPnNpemUpOworCWNvZGUgPSAoc2xqaXRfdTgqKVNMSklUX01BTExPQ19FWEVDKGNvbXBpbGVyLT5zaXplKTsKIAlQVFJfRkFJTF9XSVRIX0VYRUNfSUYoY29kZSk7CiAJYnVmID0gY29tcGlsZXItPmJ1ZjsKIApAQCAtNDc4LDcgKzUwMSw3IEBACiAJCQlsZW4gPSAqYnVmX3B0cisrOwogCQkJaWYgKGxlbiA+IDApIHsKIAkJCQkvKiBUaGUgY29kZSBpcyBhbHJlYWR5IGdlbmVyYXRlZC4gKi8KLQkJCQlTTEpJVF9NRU1NT1ZFKGNvZGVfcHRyLCBidWZfcHRyLCBsZW4pOworCQkJCVNMSklUX01FTUNQWShjb2RlX3B0ciwgYnVmX3B0ciwgbGVuKTsKIAkJCQljb2RlX3B0ciArPSBsZW47CiAJCQkJYnVmX3B0ciArPSBsZW47CiAJCQl9CkBAIC01MDQsNyArNTI3LDcgQEAKICNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2XzMyICYmIFNMSklUX0NPTkZJR19YODZfMzIpCiAJCQkJCSpjb2RlX3B0cisrID0gKCpidWZfcHRyID09IDIpID8gQ0FMTF9pMzIgOiBKTVBfaTMyOwogCQkJCQlidWZfcHRyKys7Ci0JCQkJCSooc2xqaXRfc3cqKWNvZGVfcHRyID0gKihzbGppdF9zdyopYnVmX3B0ciAtICgoc2xqaXRfc3cpY29kZV9wdHIgKyBzaXplb2Yoc2xqaXRfc3cpKTsKKwkJCQkJc2xqaXRfdW5hbGlnbmVkX3N0b3JlX3N3KGNvZGVfcHRyLCAqKHNsaml0X3N3KilidWZfcHRyIC0gKChzbGppdF9zdyljb2RlX3B0ciArIHNpemVvZihzbGppdF9zdykpKTsKIAkJCQkJY29kZV9wdHIgKz0gc2l6ZW9mKHNsaml0X3N3KTsKIAkJCQkJYnVmX3B0ciArPSBzaXplb2Yoc2xqaXRfc3cpIC0gMTsKICNlbHNlCkBAIC01MjYsMjkgKzU0OSwyOSBAQAogCWp1bXAgPSBjb21waWxlci0+anVtcHM7CiAJd2hpbGUgKGp1bXApIHsKIAkJaWYgKGp1bXAtPmZsYWdzICYgUEFUQ0hfTUIpIHsKLQkJCVNMSklUX0FTU0VSVCgoc2xqaXRfc3cpKGp1bXAtPnUubGFiZWwtPmFkZHIgLSAoanVtcC0+YWRkciArIHNpemVvZihzbGppdF9zYikpKSA+PSAtMTI4ICYmIChzbGppdF9zdykoanVtcC0+dS5sYWJlbC0+YWRkciAtIChqdW1wLT5hZGRyICsgc2l6ZW9mKHNsaml0X3NiKSkpIDw9IDEyNyk7Ci0JCQkqKHNsaml0X3ViKilqdW1wLT5hZGRyID0gKHNsaml0X3ViKShqdW1wLT51LmxhYmVsLT5hZGRyIC0gKGp1bXAtPmFkZHIgKyBzaXplb2Yoc2xqaXRfc2IpKSk7CisJCQlTTEpJVF9BU1NFUlQoKHNsaml0X3N3KShqdW1wLT51LmxhYmVsLT5hZGRyIC0gKGp1bXAtPmFkZHIgKyBzaXplb2Yoc2xqaXRfczgpKSkgPj0gLTEyOCAmJiAoc2xqaXRfc3cpKGp1bXAtPnUubGFiZWwtPmFkZHIgLSAoanVtcC0+YWRkciArIHNpemVvZihzbGppdF9zOCkpKSA8PSAxMjcpOworCQkJKihzbGppdF91OCopanVtcC0+YWRkciA9IChzbGppdF91OCkoanVtcC0+dS5sYWJlbC0+YWRkciAtIChqdW1wLT5hZGRyICsgc2l6ZW9mKHNsaml0X3M4KSkpOwogCQl9IGVsc2UgaWYgKGp1bXAtPmZsYWdzICYgUEFUQ0hfTVcpIHsKIAkJCWlmIChqdW1wLT5mbGFncyAmIEpVTVBfTEFCRUwpIHsKICNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2XzMyICYmIFNMSklUX0NPTkZJR19YODZfMzIpCi0JCQkJKihzbGppdF9zdyopanVtcC0+YWRkciA9IChzbGppdF9zdykoanVtcC0+dS5sYWJlbC0+YWRkciAtIChqdW1wLT5hZGRyICsgc2l6ZW9mKHNsaml0X3N3KSkpOworCQkJCXNsaml0X3VuYWxpZ25lZF9zdG9yZV9zdygodm9pZCopanVtcC0+YWRkciwgKHNsaml0X3N3KShqdW1wLT51LmxhYmVsLT5hZGRyIC0gKGp1bXAtPmFkZHIgKyBzaXplb2Yoc2xqaXRfc3cpKSkpOwogI2Vsc2UKLQkJCQlTTEpJVF9BU1NFUlQoKHNsaml0X3N3KShqdW1wLT51LmxhYmVsLT5hZGRyIC0gKGp1bXAtPmFkZHIgKyBzaXplb2Yoc2xqaXRfc2kpKSkgPj0gSEFMRldPUkRfTUlOICYmIChzbGppdF9zdykoanVtcC0+dS5sYWJlbC0+YWRkciAtIChqdW1wLT5hZGRyICsgc2l6ZW9mKHNsaml0X3NpKSkpIDw9IEhBTEZXT1JEX01BWCk7Ci0JCQkJKihzbGppdF9zaSopanVtcC0+YWRkciA9IChzbGppdF9zaSkoanVtcC0+dS5sYWJlbC0+YWRkciAtIChqdW1wLT5hZGRyICsgc2l6ZW9mKHNsaml0X3NpKSkpOworCQkJCVNMSklUX0FTU0VSVCgoc2xqaXRfc3cpKGp1bXAtPnUubGFiZWwtPmFkZHIgLSAoanVtcC0+YWRkciArIHNpemVvZihzbGppdF9zMzIpKSkgPj0gSEFMRldPUkRfTUlOICYmIChzbGppdF9zdykoanVtcC0+dS5sYWJlbC0+YWRkciAtIChqdW1wLT5hZGRyICsgc2l6ZW9mKHNsaml0X3MzMikpKSA8PSBIQUxGV09SRF9NQVgpOworCQkJCXNsaml0X3VuYWxpZ25lZF9zdG9yZV9zMzIoKHZvaWQqKWp1bXAtPmFkZHIsIChzbGppdF9zMzIpKGp1bXAtPnUubGFiZWwtPmFkZHIgLSAoanVtcC0+YWRkciArIHNpemVvZihzbGppdF9zMzIpKSkpOwogI2VuZGlmCiAJCQl9CiAJCQllbHNlIHsKICNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2XzMyICYmIFNMSklUX0NPTkZJR19YODZfMzIpCi0JCQkJKihzbGppdF9zdyopanVtcC0+YWRkciA9IChzbGppdF9zdykoanVtcC0+dS50YXJnZXQgLSAoanVtcC0+YWRkciArIHNpemVvZihzbGppdF9zdykpKTsKKwkJCQlzbGppdF91bmFsaWduZWRfc3RvcmVfc3coKHZvaWQqKWp1bXAtPmFkZHIsIChzbGppdF9zdykoanVtcC0+dS50YXJnZXQgLSAoanVtcC0+YWRkciArIHNpemVvZihzbGppdF9zdykpKSk7CiAjZWxzZQotCQkJCVNMSklUX0FTU0VSVCgoc2xqaXRfc3cpKGp1bXAtPnUudGFyZ2V0IC0gKGp1bXAtPmFkZHIgKyBzaXplb2Yoc2xqaXRfc2kpKSkgPj0gSEFMRldPUkRfTUlOICYmIChzbGppdF9zdykoanVtcC0+dS50YXJnZXQgLSAoanVtcC0+YWRkciArIHNpemVvZihzbGppdF9zaSkpKSA8PSBIQUxGV09SRF9NQVgpOwotCQkJCSooc2xqaXRfc2kqKWp1bXAtPmFkZHIgPSAoc2xqaXRfc2kpKGp1bXAtPnUudGFyZ2V0IC0gKGp1bXAtPmFkZHIgKyBzaXplb2Yoc2xqaXRfc2kpKSk7CisJCQkJU0xKSVRfQVNTRVJUKChzbGppdF9zdykoanVtcC0+dS50YXJnZXQgLSAoanVtcC0+YWRkciArIHNpemVvZihzbGppdF9zMzIpKSkgPj0gSEFMRldPUkRfTUlOICYmIChzbGppdF9zdykoanVtcC0+dS50YXJnZXQgLSAoanVtcC0+YWRkciArIHNpemVvZihzbGppdF9zMzIpKSkgPD0gSEFMRldPUkRfTUFYKTsKKwkJCQlzbGppdF91bmFsaWduZWRfc3RvcmVfczMyKCh2b2lkKilqdW1wLT5hZGRyLCAoc2xqaXRfczMyKShqdW1wLT51LnRhcmdldCAtIChqdW1wLT5hZGRyICsgc2l6ZW9mKHNsaml0X3MzMikpKSk7CiAjZW5kaWYKIAkJCX0KIAkJfQogI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19YODZfNjQgJiYgU0xKSVRfQ09ORklHX1g4Nl82NCkKIAkJZWxzZSBpZiAoanVtcC0+ZmxhZ3MgJiBQQVRDSF9NRCkKLQkJCSooc2xqaXRfc3cqKWp1bXAtPmFkZHIgPSBqdW1wLT51LmxhYmVsLT5hZGRyOworCQkJc2xqaXRfdW5hbGlnbmVkX3N0b3JlX3N3KCh2b2lkKilqdW1wLT5hZGRyLCBqdW1wLT51LmxhYmVsLT5hZGRyKTsKICNlbmRpZgogCiAJCWp1bXAgPSBqdW1wLT5uZXh0OwpAQCAtNTY1LDMyICs1ODgsMzIgQEAKIC8qICBPcGVyYXRvcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBzbGppdF9zaSBlbWl0X2N1bV9iaW5hcnkoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwKLQlzbGppdF91YiBvcF9ybSwgc2xqaXRfdWIgb3BfbXIsIHNsaml0X3ViIG9wX2ltbSwgc2xqaXRfdWIgb3BfZWF4X2ltbSwKLQlzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsCi0Jc2xqaXRfc2kgc3JjMSwgc2xqaXRfc3cgc3JjMXcsCi0Jc2xqaXRfc2kgc3JjMiwgc2xqaXRfc3cgc3JjMncpOworc3RhdGljIHNsaml0X3MzMiBlbWl0X2N1bV9iaW5hcnkoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwKKwlzbGppdF91OCBvcF9ybSwgc2xqaXRfdTggb3BfbXIsIHNsaml0X3U4IG9wX2ltbSwgc2xqaXRfdTggb3BfZWF4X2ltbSwKKwlzbGppdF9zMzIgZHN0LCBzbGppdF9zdyBkc3R3LAorCXNsaml0X3MzMiBzcmMxLCBzbGppdF9zdyBzcmMxdywKKwlzbGppdF9zMzIgc3JjMiwgc2xqaXRfc3cgc3JjMncpOwogCi1zdGF0aWMgc2xqaXRfc2kgZW1pdF9ub25fY3VtX2JpbmFyeShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLAotCXNsaml0X3ViIG9wX3JtLCBzbGppdF91YiBvcF9tciwgc2xqaXRfdWIgb3BfaW1tLCBzbGppdF91YiBvcF9lYXhfaW1tLAotCXNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dywKLQlzbGppdF9zaSBzcmMxLCBzbGppdF9zdyBzcmMxdywKLQlzbGppdF9zaSBzcmMyLCBzbGppdF9zdyBzcmMydyk7CitzdGF0aWMgc2xqaXRfczMyIGVtaXRfbm9uX2N1bV9iaW5hcnkoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwKKwlzbGppdF91OCBvcF9ybSwgc2xqaXRfdTggb3BfbXIsIHNsaml0X3U4IG9wX2ltbSwgc2xqaXRfdTggb3BfZWF4X2ltbSwKKwlzbGppdF9zMzIgZHN0LCBzbGppdF9zdyBkc3R3LAorCXNsaml0X3MzMiBzcmMxLCBzbGppdF9zdyBzcmMxdywKKwlzbGppdF9zMzIgc3JjMiwgc2xqaXRfc3cgc3JjMncpOwogCi1zdGF0aWMgc2xqaXRfc2kgZW1pdF9tb3Yoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwKLQlzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsCi0Jc2xqaXRfc2kgc3JjLCBzbGppdF9zdyBzcmN3KTsKK3N0YXRpYyBzbGppdF9zMzIgZW1pdF9tb3Yoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwKKwlzbGppdF9zMzIgZHN0LCBzbGppdF9zdyBkc3R3LAorCXNsaml0X3MzMiBzcmMsIHNsaml0X3N3IHNyY3cpOwogCi1zdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X3NpIGVtaXRfc2F2ZV9mbGFncyhzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyKQorc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9zMzIgZW1pdF9zYXZlX2ZsYWdzKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIpCiB7Ci0Jc2xqaXRfdWIgKmluc3Q7CisJc2xqaXRfdTggKmluc3Q7CiAKICNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2XzMyICYmIFNMSklUX0NPTkZJR19YODZfMzIpCi0JaW5zdCA9IChzbGppdF91YiopZW5zdXJlX2J1Zihjb21waWxlciwgMSArIDUpOworCWluc3QgPSAoc2xqaXRfdTgqKWVuc3VyZV9idWYoY29tcGlsZXIsIDEgKyA1KTsKIAlGQUlMX0lGKCFpbnN0KTsKIAlJTkNfU0laRSg1KTsKICNlbHNlCi0JaW5zdCA9IChzbGppdF91YiopZW5zdXJlX2J1Zihjb21waWxlciwgMSArIDYpOworCWluc3QgPSAoc2xqaXRfdTgqKWVuc3VyZV9idWYoY29tcGlsZXIsIDEgKyA2KTsKIAlGQUlMX0lGKCFpbnN0KTsKIAlJTkNfU0laRSg2KTsKIAkqaW5zdCsrID0gUkVYX1c7CkBAIC01OTgsMjMgKzYyMSwyMyBAQAogCSppbnN0KysgPSBMRUFfcl9tOyAvKiBsZWEgZXNwL3JzcCwgW2VzcC9yc3AgKyBzaXplb2Yoc2xqaXRfc3cpXSAqLwogCSppbnN0KysgPSAweDY0OwogCSppbnN0KysgPSAweDI0OwotCSppbnN0KysgPSAoc2xqaXRfdWIpc2l6ZW9mKHNsaml0X3N3KTsKKwkqaW5zdCsrID0gKHNsaml0X3U4KXNpemVvZihzbGppdF9zdyk7CiAJKmluc3QrKyA9IFBVU0hGOwogCWNvbXBpbGVyLT5mbGFnc19zYXZlZCA9IDE7CiAJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBTTEpJVF9JTkxJTkUgc2xqaXRfc2kgZW1pdF9yZXN0b3JlX2ZsYWdzKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIGtlZXBfZmxhZ3MpCitzdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X3MzMiBlbWl0X3Jlc3RvcmVfZmxhZ3Moc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIGtlZXBfZmxhZ3MpCiB7Ci0Jc2xqaXRfdWIgKmluc3Q7CisJc2xqaXRfdTggKmluc3Q7CiAKICNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2XzMyICYmIFNMSklUX0NPTkZJR19YODZfMzIpCi0JaW5zdCA9IChzbGppdF91YiopZW5zdXJlX2J1Zihjb21waWxlciwgMSArIDUpOworCWluc3QgPSAoc2xqaXRfdTgqKWVuc3VyZV9idWYoY29tcGlsZXIsIDEgKyA1KTsKIAlGQUlMX0lGKCFpbnN0KTsKIAlJTkNfU0laRSg1KTsKIAkqaW5zdCsrID0gUE9QRjsKICNlbHNlCi0JaW5zdCA9IChzbGppdF91YiopZW5zdXJlX2J1Zihjb21waWxlciwgMSArIDYpOworCWluc3QgPSAoc2xqaXRfdTgqKWVuc3VyZV9idWYoY29tcGlsZXIsIDEgKyA2KTsKIAlGQUlMX0lGKCFpbnN0KTsKIAlJTkNfU0laRSg2KTsKIAkqaW5zdCsrID0gUE9QRjsKQEAgLTYyMyw3ICs2NDYsNyBAQAogCSppbnN0KysgPSBMRUFfcl9tOyAvKiBsZWEgZXNwL3JzcCwgW2VzcC9yc3AgLSBzaXplb2Yoc2xqaXRfc3cpXSAqLwogCSppbnN0KysgPSAweDY0OwogCSppbnN0KysgPSAweDI0OwotCSppbnN0KysgPSAoc2xqaXRfdWIpLShzbGppdF9zYilzaXplb2Yoc2xqaXRfc3cpOworCSppbnN0KysgPSAoc2xqaXRfdTgpKC0oc2xqaXRfczgpc2l6ZW9mKHNsaml0X3N3KSk7CiAJY29tcGlsZXItPmZsYWdzX3NhdmVkID0ga2VlcF9mbGFnczsKIAlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKIH0KQEAgLTY0MCw3ICs2NjMsNyBAQAogCUNQVSBjeWNsZXMgaWYgdGhlIHN0YWNrIGlzIGxhcmdlIGVub3VnaC4gSG93ZXZlciwgeW91IGRvbid0IGtub3cgaXQgaW4KIAlhZHZhbmNlLCBzbyBpdCBtdXN0IGFsd2F5cyBiZSBjYWxsZWQuIEkgdGhpbmsgdGhpcyBpcyBhIGJhZCBkZXNpZ24gaW4KIAlnZW5lcmFsIGV2ZW4gaWYgaXQgaGFzIHNvbWUgcmVhc29ucy4gKi8KLQkqKHZvbGF0aWxlIHNsaml0X3NpKilhbGxvY2EobG9jYWxfc2l6ZSkgPSAwOworCSoodm9sYXRpbGUgc2xqaXRfczMyKilhbGxvY2EobG9jYWxfc2l6ZSkgPSAwOwogfQogCiAjZW5kaWYKQEAgLTY1MSwxMSArNjc0LDExIEBACiAjaW5jbHVkZSAic2xqaXROYXRpdmVYODZfNjQuYyIKICNlbmRpZgogCi1zdGF0aWMgc2xqaXRfc2kgZW1pdF9tb3Yoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwKLQlzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsCi0Jc2xqaXRfc2kgc3JjLCBzbGppdF9zdyBzcmN3KQorc3RhdGljIHNsaml0X3MzMiBlbWl0X21vdihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLAorCXNsaml0X3MzMiBkc3QsIHNsaml0X3N3IGRzdHcsCisJc2xqaXRfczMyIHNyYywgc2xqaXRfc3cgc3JjdykKIHsKLQlzbGppdF91YiogaW5zdDsKKwlzbGppdF91OCogaW5zdDsKIAogCWlmIChkc3QgPT0gU0xKSVRfVU5VU0VEKSB7CiAJCS8qIE5vIGRlc3RpbmF0aW9uLCBkb2Vzbid0IG5lZWQgdG8gc2V0dXAgZmxhZ3MuICovCkBAIC03MTksMTEgKzc0MiwxMSBAQAogI2RlZmluZSBFTUlUX01PVihjb21waWxlciwgZHN0LCBkc3R3LCBzcmMsIHNyY3cpIFwKIAlGQUlMX0lGKGVtaXRfbW92KGNvbXBpbGVyLCBkc3QsIGRzdHcsIHNyYywgc3JjdykpOwogCi1TTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9vcDAoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3ApCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfczMyIHNsaml0X2VtaXRfb3AwKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiBvcCkKIHsKLQlzbGppdF91YiAqaW5zdDsKKwlzbGppdF91OCAqaW5zdDsKICNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2XzY0ICYmIFNMSklUX0NPTkZJR19YODZfNjQpCi0Jc2xqaXRfc2kgc2l6ZTsKKwlzbGppdF9zMzIgc2l6ZTsKICNlbmRpZgogCiAJQ0hFQ0tfRVJST1IoKTsKQEAgLTczMSwyMyArNzU0LDIzIEBACiAKIAlzd2l0Y2ggKEdFVF9PUENPREUob3ApKSB7CiAJY2FzZSBTTEpJVF9CUkVBS1BPSU5UOgotCQlpbnN0ID0gKHNsaml0X3ViKillbnN1cmVfYnVmKGNvbXBpbGVyLCAxICsgMSk7CisJCWluc3QgPSAoc2xqaXRfdTgqKWVuc3VyZV9idWYoY29tcGlsZXIsIDEgKyAxKTsKIAkJRkFJTF9JRighaW5zdCk7CiAJCUlOQ19TSVpFKDEpOwogCQkqaW5zdCA9IElOVDM7CiAJCWJyZWFrOwogCWNhc2UgU0xKSVRfTk9QOgotCQlpbnN0ID0gKHNsaml0X3ViKillbnN1cmVfYnVmKGNvbXBpbGVyLCAxICsgMSk7CisJCWluc3QgPSAoc2xqaXRfdTgqKWVuc3VyZV9idWYoY29tcGlsZXIsIDEgKyAxKTsKIAkJRkFJTF9JRighaW5zdCk7CiAJCUlOQ19TSVpFKDEpOwogCQkqaW5zdCA9IE5PUDsKIAkJYnJlYWs7Ci0JY2FzZSBTTEpJVF9MVU1VTDoKLQljYXNlIFNMSklUX0xTTVVMOgotCWNhc2UgU0xKSVRfVURJVk1PRDoKLQljYXNlIFNMSklUX1NESVZNT0Q6Ci0JY2FzZSBTTEpJVF9VRElWSToKLQljYXNlIFNMSklUX1NESVZJOgorCWNhc2UgU0xKSVRfTE1VTF9VVzoKKwljYXNlIFNMSklUX0xNVUxfU1c6CisJY2FzZSBTTEpJVF9ESVZNT0RfVVc6CisJY2FzZSBTTEpJVF9ESVZNT0RfU1c6CisJY2FzZSBTTEpJVF9ESVZfVVc6CisJY2FzZSBTTEpJVF9ESVZfU1c6CiAJCWNvbXBpbGVyLT5mbGFnc19zYXZlZCA9IDA7CiAjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1g4Nl82NCAmJiBTTEpJVF9DT05GSUdfWDg2XzY0KQogI2lmZGVmIF9XSU42NApAQCAtNzYzLDEyICs3ODYsMTIgQEAKIAkJCSYmIHJlZ19tYXBbVE1QX1JFRzFdID09IDIsCiAJCQlpbnZhbGlkX3JlZ2lzdGVyX2Fzc2lnbm1lbnRfZm9yX2Rpdl9tdWwpOwogI2VuZGlmCi0JCWNvbXBpbGVyLT5tb2RlMzIgPSBvcCAmIFNMSklUX0lOVF9PUDsKKwkJY29tcGlsZXItPm1vZGUzMiA9IG9wICYgU0xKSVRfSTMyX09QOwogI2VuZGlmCi0JCVNMSklUX0NPTVBJTEVfQVNTRVJUKChTTEpJVF9VRElWTU9EICYgMHgyKSA9PSAwICYmIFNMSklUX1VESVZJIC0gMHgyID09IFNMSklUX1VESVZNT0QsIGJhZF9kaXZfb3Bjb2RlX2Fzc2lnbm1lbnRzKTsKKwkJU0xKSVRfQ09NUElMRV9BU1NFUlQoKFNMSklUX0RJVk1PRF9VVyAmIDB4MikgPT0gMCAmJiBTTEpJVF9ESVZfVVcgLSAweDIgPT0gU0xKSVRfRElWTU9EX1VXLCBiYWRfZGl2X29wY29kZV9hc3NpZ25tZW50cyk7CiAKIAkJb3AgPSBHRVRfT1BDT0RFKG9wKTsKLQkJaWYgKChvcCB8IDB4MikgPT0gU0xKSVRfVURJVkkpIHsKKwkJaWYgKChvcCB8IDB4MikgPT0gU0xKSVRfRElWX1VXKSB7CiAjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1g4Nl8zMiAmJiBTTEpJVF9DT05GSUdfWDg2XzMyKSB8fCBkZWZpbmVkKF9XSU42NCkKIAkJCUVNSVRfTU9WKGNvbXBpbGVyLCBUTVBfUkVHMSwgMCwgU0xKSVRfUjEsIDApOwogCQkJaW5zdCA9IGVtaXRfeDg2X2luc3RydWN0aW9uKGNvbXBpbGVyLCAxLCBTTEpJVF9SMSwgMCwgU0xKSVRfUjEsIDApOwpAQCAtNzc5LDI0ICs4MDIsMjQgQEAKIAkJCSppbnN0ID0gWE9SX3Jfcm07CiAJCX0KIAotCQlpZiAoKG9wIHwgMHgyKSA9PSBTTEpJVF9TRElWSSkgeworCQlpZiAoKG9wIHwgMHgyKSA9PSBTTEpJVF9ESVZfU1cpIHsKICNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2XzMyICYmIFNMSklUX0NPTkZJR19YODZfMzIpIHx8IGRlZmluZWQoX1dJTjY0KQogCQkJRU1JVF9NT1YoY29tcGlsZXIsIFRNUF9SRUcxLCAwLCBTTEpJVF9SMSwgMCk7CiAjZW5kaWYKIAogI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19YODZfMzIgJiYgU0xKSVRfQ09ORklHX1g4Nl8zMikKLQkJCWluc3QgPSAoc2xqaXRfdWIqKWVuc3VyZV9idWYoY29tcGlsZXIsIDEgKyAxKTsKKwkJCWluc3QgPSAoc2xqaXRfdTgqKWVuc3VyZV9idWYoY29tcGlsZXIsIDEgKyAxKTsKIAkJCUZBSUxfSUYoIWluc3QpOwogCQkJSU5DX1NJWkUoMSk7CiAJCQkqaW5zdCA9IENEUTsKICNlbHNlCiAJCQlpZiAoY29tcGlsZXItPm1vZGUzMikgewotCQkJCWluc3QgPSAoc2xqaXRfdWIqKWVuc3VyZV9idWYoY29tcGlsZXIsIDEgKyAxKTsKKwkJCQlpbnN0ID0gKHNsaml0X3U4KillbnN1cmVfYnVmKGNvbXBpbGVyLCAxICsgMSk7CiAJCQkJRkFJTF9JRighaW5zdCk7CiAJCQkJSU5DX1NJWkUoMSk7CiAJCQkJKmluc3QgPSBDRFE7CiAJCQl9IGVsc2UgewotCQkJCWluc3QgPSAoc2xqaXRfdWIqKWVuc3VyZV9idWYoY29tcGlsZXIsIDEgKyAyKTsKKwkJCQlpbnN0ID0gKHNsaml0X3U4KillbnN1cmVfYnVmKGNvbXBpbGVyLCAxICsgMik7CiAJCQkJRkFJTF9JRighaW5zdCk7CiAJCQkJSU5DX1NJWkUoMik7CiAJCQkJKmluc3QrKyA9IFJFWF9XOwpAQCAtODA2LDI3ICs4MjksMjcgQEAKIAkJfQogCiAjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1g4Nl8zMiAmJiBTTEpJVF9DT05GSUdfWDg2XzMyKQotCQlpbnN0ID0gKHNsaml0X3ViKillbnN1cmVfYnVmKGNvbXBpbGVyLCAxICsgMik7CisJCWluc3QgPSAoc2xqaXRfdTgqKWVuc3VyZV9idWYoY29tcGlsZXIsIDEgKyAyKTsKIAkJRkFJTF9JRighaW5zdCk7CiAJCUlOQ19TSVpFKDIpOwogCQkqaW5zdCsrID0gR1JPVVBfRjc7Ci0JCSppbnN0ID0gTU9EX1JFRyB8ICgob3AgPj0gU0xKSVRfVURJVk1PRCkgPyByZWdfbWFwW1RNUF9SRUcxXSA6IHJlZ19tYXBbU0xKSVRfUjFdKTsKKwkJKmluc3QgPSBNT0RfUkVHIHwgKChvcCA+PSBTTEpJVF9ESVZNT0RfVVcpID8gcmVnX21hcFtUTVBfUkVHMV0gOiByZWdfbWFwW1NMSklUX1IxXSk7CiAjZWxzZQogI2lmZGVmIF9XSU42NAotCQlzaXplID0gKCFjb21waWxlci0+bW9kZTMyIHx8IG9wID49IFNMSklUX1VESVZNT0QpID8gMyA6IDI7CisJCXNpemUgPSAoIWNvbXBpbGVyLT5tb2RlMzIgfHwgb3AgPj0gU0xKSVRfRElWTU9EX1VXKSA/IDMgOiAyOwogI2Vsc2UKIAkJc2l6ZSA9ICghY29tcGlsZXItPm1vZGUzMikgPyAzIDogMjsKICNlbmRpZgotCQlpbnN0ID0gKHNsaml0X3ViKillbnN1cmVfYnVmKGNvbXBpbGVyLCAxICsgc2l6ZSk7CisJCWluc3QgPSAoc2xqaXRfdTgqKWVuc3VyZV9idWYoY29tcGlsZXIsIDEgKyBzaXplKTsKIAkJRkFJTF9JRighaW5zdCk7CiAJCUlOQ19TSVpFKHNpemUpOwogI2lmZGVmIF9XSU42NAogCQlpZiAoIWNvbXBpbGVyLT5tb2RlMzIpCi0JCQkqaW5zdCsrID0gUkVYX1cgfCAoKG9wID49IFNMSklUX1VESVZNT0QpID8gUkVYX0IgOiAwKTsKLQkJZWxzZSBpZiAob3AgPj0gU0xKSVRfVURJVk1PRCkKKwkJCSppbnN0KysgPSBSRVhfVyB8ICgob3AgPj0gU0xKSVRfRElWTU9EX1VXKSA/IFJFWF9CIDogMCk7CisJCWVsc2UgaWYgKG9wID49IFNMSklUX0RJVk1PRF9VVykKIAkJCSppbnN0KysgPSBSRVhfQjsKIAkJKmluc3QrKyA9IEdST1VQX0Y3OwotCQkqaW5zdCA9IE1PRF9SRUcgfCAoKG9wID49IFNMSklUX1VESVZNT0QpID8gcmVnX2xtYXBbVE1QX1JFRzFdIDogcmVnX2xtYXBbU0xKSVRfUjFdKTsKKwkJKmluc3QgPSBNT0RfUkVHIHwgKChvcCA+PSBTTEpJVF9ESVZNT0RfVVcpID8gcmVnX2xtYXBbVE1QX1JFRzFdIDogcmVnX2xtYXBbU0xKSVRfUjFdKTsKICNlbHNlCiAJCWlmICghY29tcGlsZXItPm1vZGUzMikKIAkJCSppbnN0KysgPSBSRVhfVzsKQEAgLTgzNSwyNiArODU4LDI2IEBACiAjZW5kaWYKICNlbmRpZgogCQlzd2l0Y2ggKG9wKSB7Ci0JCWNhc2UgU0xKSVRfTFVNVUw6CisJCWNhc2UgU0xKSVRfTE1VTF9VVzoKIAkJCSppbnN0IHw9IE1VTDsKIAkJCWJyZWFrOwotCQljYXNlIFNMSklUX0xTTVVMOgorCQljYXNlIFNMSklUX0xNVUxfU1c6CiAJCQkqaW5zdCB8PSBJTVVMOwogCQkJYnJlYWs7Ci0JCWNhc2UgU0xKSVRfVURJVk1PRDoKLQkJY2FzZSBTTEpJVF9VRElWSToKKwkJY2FzZSBTTEpJVF9ESVZNT0RfVVc6CisJCWNhc2UgU0xKSVRfRElWX1VXOgogCQkJKmluc3QgfD0gRElWOwogCQkJYnJlYWs7Ci0JCWNhc2UgU0xKSVRfU0RJVk1PRDoKLQkJY2FzZSBTTEpJVF9TRElWSToKKwkJY2FzZSBTTEpJVF9ESVZNT0RfU1c6CisJCWNhc2UgU0xKSVRfRElWX1NXOgogCQkJKmluc3QgfD0gSURJVjsKIAkJCWJyZWFrOwogCQl9CiAjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1g4Nl82NCAmJiBTTEpJVF9DT05GSUdfWDg2XzY0KSAmJiAhZGVmaW5lZChfV0lONjQpCi0JCWlmIChvcCA8PSBTTEpJVF9TRElWTU9EKQorCQlpZiAob3AgPD0gU0xKSVRfRElWTU9EX1NXKQogCQkJRU1JVF9NT1YoY29tcGlsZXIsIFNMSklUX1IxLCAwLCBUTVBfUkVHMSwgMCk7CiAjZWxzZQotCQlpZiAob3AgPj0gU0xKSVRfVURJVkkpCisJCWlmIChvcCA+PSBTTEpJVF9ESVZfVVcpCiAJCQlFTUlUX01PVihjb21waWxlciwgU0xKSVRfUjEsIDAsIFRNUF9SRUcxLCAwKTsKICNlbmRpZgogCQlicmVhazsKQEAgLTg2NSwyMCArODg4LDIwIEBACiAKICNkZWZpbmUgRU5DT0RFX1BSRUZJWChwcmVmaXgpIFwKIAlkbyB7IFwKLQkJaW5zdCA9IChzbGppdF91YiopZW5zdXJlX2J1Zihjb21waWxlciwgMSArIDEpOyBcCisJCWluc3QgPSAoc2xqaXRfdTgqKWVuc3VyZV9idWYoY29tcGlsZXIsIDEgKyAxKTsgXAogCQlGQUlMX0lGKCFpbnN0KTsgXAogCQlJTkNfU0laRSgxKTsgXAogCQkqaW5zdCA9IChwcmVmaXgpOyBcCiAJfSB3aGlsZSAoMCkKIAotc3RhdGljIHNsaml0X3NpIGVtaXRfbW92X2J5dGUoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgc2lnbiwKLQlzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsCi0Jc2xqaXRfc2kgc3JjLCBzbGppdF9zdyBzcmN3KQorc3RhdGljIHNsaml0X3MzMiBlbWl0X21vdl9ieXRlKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiBzaWduLAorCXNsaml0X3MzMiBkc3QsIHNsaml0X3N3IGRzdHcsCisJc2xqaXRfczMyIHNyYywgc2xqaXRfc3cgc3JjdykKIHsKLQlzbGppdF91YiogaW5zdDsKLQlzbGppdF9zaSBkc3RfcjsKKwlzbGppdF91OCogaW5zdDsKKwlzbGppdF9zMzIgZHN0X3I7CiAjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1g4Nl8zMiAmJiBTTEpJVF9DT05GSUdfWDg2XzMyKQotCXNsaml0X3NpIHdvcmtfcjsKKwlzbGppdF9zMzIgd29ya19yOwogI2VuZGlmCiAKICNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2XzY0ICYmIFNMSklUX0NPTkZJR19YODZfNjQpCkBAIC0xMDE2LDEyICsxMDM5LDEyIEBACiAJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBzbGppdF9zaSBlbWl0X21vdl9oYWxmKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIHNpZ24sCi0Jc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3LAotCXNsaml0X3NpIHNyYywgc2xqaXRfc3cgc3JjdykKK3N0YXRpYyBzbGppdF9zMzIgZW1pdF9tb3ZfaGFsZihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgc2lnbiwKKwlzbGppdF9zMzIgZHN0LCBzbGppdF9zdyBkc3R3LAorCXNsaml0X3MzMiBzcmMsIHNsaml0X3N3IHNyY3cpCiB7Ci0Jc2xqaXRfdWIqIGluc3Q7Ci0Jc2xqaXRfc2kgZHN0X3I7CisJc2xqaXRfdTgqIGluc3Q7CisJc2xqaXRfczMyIGRzdF9yOwogCiAjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1g4Nl82NCAmJiBTTEpJVF9DT05GSUdfWDg2XzY0KQogCWNvbXBpbGVyLT5tb2RlMzIgPSAwOwpAQCAtMTA2NywxMSArMTA5MCwxMSBAQAogCXJldHVybiBTTEpJVF9TVUNDRVNTOwogfQogCi1zdGF0aWMgc2xqaXRfc2kgZW1pdF91bmFyeShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF91YiBvcGNvZGUsCi0Jc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3LAotCXNsaml0X3NpIHNyYywgc2xqaXRfc3cgc3JjdykKK3N0YXRpYyBzbGppdF9zMzIgZW1pdF91bmFyeShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF91OCBvcGNvZGUsCisJc2xqaXRfczMyIGRzdCwgc2xqaXRfc3cgZHN0dywKKwlzbGppdF9zMzIgc3JjLCBzbGppdF9zdyBzcmN3KQogewotCXNsaml0X3ViKiBpbnN0OworCXNsaml0X3U4KiBpbnN0OwogCiAJaWYgKGRzdCA9PSBTTEpJVF9VTlVTRUQpIHsKIAkJRU1JVF9NT1YoY29tcGlsZXIsIFRNUF9SRUcxLCAwLCBzcmMsIHNyY3cpOwpAQCAtMTEwNiwxMSArMTEyOSwxMSBAQAogCXJldHVybiBTTEpJVF9TVUNDRVNTOwogfQogCi1zdGF0aWMgc2xqaXRfc2kgZW1pdF9ub3Rfd2l0aF9mbGFncyhzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLAotCXNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dywKLQlzbGppdF9zaSBzcmMsIHNsaml0X3N3IHNyY3cpCitzdGF0aWMgc2xqaXRfczMyIGVtaXRfbm90X3dpdGhfZmxhZ3Moc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwKKwlzbGppdF9zMzIgZHN0LCBzbGppdF9zdyBkc3R3LAorCXNsaml0X3MzMiBzcmMsIHNsaml0X3N3IHNyY3cpCiB7Ci0Jc2xqaXRfdWIqIGluc3Q7CisJc2xqaXRfdTgqIGluc3Q7CiAKIAlpZiAoZHN0ID09IFNMSklUX1VOVVNFRCkgewogCQlFTUlUX01PVihjb21waWxlciwgVE1QX1JFRzEsIDAsIHNyYywgc3Jjdyk7CkBAIC0xMTQ2LDEyICsxMTY5LDEyIEBACiAJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBzbGppdF9zaSBlbWl0X2NseihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcF9mbGFncywKLQlzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsCi0Jc2xqaXRfc2kgc3JjLCBzbGppdF9zdyBzcmN3KQorc3RhdGljIHNsaml0X3MzMiBlbWl0X2NseihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgb3BfZmxhZ3MsCisJc2xqaXRfczMyIGRzdCwgc2xqaXRfc3cgZHN0dywKKwlzbGppdF9zMzIgc3JjLCBzbGppdF9zdyBzcmN3KQogewotCXNsaml0X3ViKiBpbnN0OwotCXNsaml0X3NpIGRzdF9yOworCXNsaml0X3U4KiBpbnN0OworCXNsaml0X3MzMiBkc3RfcjsKIAogCVNMSklUX1VOVVNFRF9BUkcob3BfZmxhZ3MpOwogCWlmIChTTEpJVF9VTkxJS0VMWShkc3QgPT0gU0xKSVRfVU5VU0VEKSkgewpAQCAtMTE2NCw3ICsxMTg3LDcgQEAKICNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2XzMyICYmIFNMSklUX0NPTkZJR19YODZfMzIpCiAJCWluc3QgPSBlbWl0X3g4Nl9pbnN0cnVjdGlvbihjb21waWxlciwgMSB8IEVYODZfU0hJRlRfSU5TLCBTTEpJVF9JTU0sIDMxLCBUTVBfUkVHMSwgMCk7CiAjZWxzZQotCQlpbnN0ID0gZW1pdF94ODZfaW5zdHJ1Y3Rpb24oY29tcGlsZXIsIDEgfCBFWDg2X1NISUZUX0lOUywgU0xKSVRfSU1NLCAhKG9wX2ZsYWdzICYgU0xKSVRfSU5UX09QKSA/IDYzIDogMzEsIFRNUF9SRUcxLCAwKTsKKwkJaW5zdCA9IGVtaXRfeDg2X2luc3RydWN0aW9uKGNvbXBpbGVyLCAxIHwgRVg4Nl9TSElGVF9JTlMsIFNMSklUX0lNTSwgIShvcF9mbGFncyAmIFNMSklUX0kzMl9PUCkgPyA2MyA6IDMxLCBUTVBfUkVHMSwgMCk7CiAjZW5kaWYKIAkJRkFJTF9JRighaW5zdCk7CiAJCSppbnN0IHw9IFNIUjsKQEAgLTExOTksOCArMTIyMiw4IEBACiAjZWxzZQogCWRzdF9yID0gRkFTVF9JU19SRUcoZHN0KSA/IGRzdCA6IFRNUF9SRUcyOwogCWNvbXBpbGVyLT5tb2RlMzIgPSAwOwotCUVNSVRfTU9WKGNvbXBpbGVyLCBkc3RfciwgMCwgU0xKSVRfSU1NLCAhKG9wX2ZsYWdzICYgU0xKSVRfSU5UX09QKSA/IDY0ICsgNjMgOiAzMiArIDMxKTsKLQljb21waWxlci0+bW9kZTMyID0gb3BfZmxhZ3MgJiBTTEpJVF9JTlRfT1A7CisJRU1JVF9NT1YoY29tcGlsZXIsIGRzdF9yLCAwLCBTTEpJVF9JTU0sICEob3BfZmxhZ3MgJiBTTEpJVF9JMzJfT1ApID8gNjQgKyA2MyA6IDMyICsgMzEpOworCWNvbXBpbGVyLT5tb2RlMzIgPSBvcF9mbGFncyAmIFNMSklUX0kzMl9PUDsKICNlbmRpZgogCiAJaWYgKGNwdV9oYXNfY21vdiA9PSAtMSkKQEAgLTEyMTMsNyArMTIzNiw3IEBACiAJCSppbnN0ID0gQ01PVk5FX3Jfcm07CiAJfSBlbHNlIHsKICNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2XzMyICYmIFNMSklUX0NPTkZJR19YODZfMzIpCi0JCWluc3QgPSAoc2xqaXRfdWIqKWVuc3VyZV9idWYoY29tcGlsZXIsIDEgKyA0KTsKKwkJaW5zdCA9IChzbGppdF91OCopZW5zdXJlX2J1Zihjb21waWxlciwgMSArIDQpOwogCQlGQUlMX0lGKCFpbnN0KTsKIAkJSU5DX1NJWkUoNCk7CiAKQEAgLTEyMjIsNyArMTI0NSw3IEBACiAJCSppbnN0KysgPSBNT1Zfcl9ybTsKIAkJKmluc3QrKyA9IE1PRF9SRUcgfCAocmVnX21hcFtkc3Rfcl0gPDwgMykgfCByZWdfbWFwW1RNUF9SRUcxXTsKICNlbHNlCi0JCWluc3QgPSAoc2xqaXRfdWIqKWVuc3VyZV9idWYoY29tcGlsZXIsIDEgKyA1KTsKKwkJaW5zdCA9IChzbGppdF91OCopZW5zdXJlX2J1Zihjb21waWxlciwgMSArIDUpOwogCQlGQUlMX0lGKCFpbnN0KTsKIAkJSU5DX1NJWkUoNSk7CiAKQEAgLTEyMzcsNyArMTI2MCw3IEBACiAjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1g4Nl8zMiAmJiBTTEpJVF9DT05GSUdfWDg2XzMyKQogCWluc3QgPSBlbWl0X3g4Nl9pbnN0cnVjdGlvbihjb21waWxlciwgMSB8IEVYODZfQklOX0lOUywgU0xKSVRfSU1NLCAzMSwgZHN0X3IsIDApOwogI2Vsc2UKLQlpbnN0ID0gZW1pdF94ODZfaW5zdHJ1Y3Rpb24oY29tcGlsZXIsIDEgfCBFWDg2X0JJTl9JTlMsIFNMSklUX0lNTSwgIShvcF9mbGFncyAmIFNMSklUX0lOVF9PUCkgPyA2MyA6IDMxLCBkc3RfciwgMCk7CisJaW5zdCA9IGVtaXRfeDg2X2luc3RydWN0aW9uKGNvbXBpbGVyLCAxIHwgRVg4Nl9CSU5fSU5TLCBTTEpJVF9JTU0sICEob3BfZmxhZ3MgJiBTTEpJVF9JMzJfT1ApID8gNjMgOiAzMSwgZHN0X3IsIDApOwogI2VuZGlmCiAJRkFJTF9JRighaW5zdCk7CiAJKihpbnN0ICsgMSkgfD0gWE9SOwpAQCAtMTI1NSwxNiArMTI3OCwxNiBAQAogCXJldHVybiBTTEpJVF9TVUNDRVNTOwogfQogCi1TTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9vcDEoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsCi0Jc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3LAotCXNsaml0X3NpIHNyYywgc2xqaXRfc3cgc3JjdykKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zMzIgc2xqaXRfZW1pdF9vcDEoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIG9wLAorCXNsaml0X3MzMiBkc3QsIHNsaml0X3N3IGRzdHcsCisJc2xqaXRfczMyIHNyYywgc2xqaXRfc3cgc3JjdykKIHsKLQlzbGppdF91YiogaW5zdDsKLQlzbGppdF9zaSB1cGRhdGUgPSAwOwotCXNsaml0X3NpIG9wX2ZsYWdzID0gR0VUX0FMTF9GTEFHUyhvcCk7CisJc2xqaXRfdTgqIGluc3Q7CisJc2xqaXRfczMyIHVwZGF0ZSA9IDA7CisJc2xqaXRfczMyIG9wX2ZsYWdzID0gR0VUX0FMTF9GTEFHUyhvcCk7CiAjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1g4Nl8zMiAmJiBTTEpJVF9DT05GSUdfWDg2XzMyKQotCXNsaml0X3NpIGRzdF9pc19lcmVnID0gMDsKLQlzbGppdF9zaSBzcmNfaXNfZXJlZyA9IDA7CisJc2xqaXRfczMyIGRzdF9pc19lcmVnID0gMDsKKwlzbGppdF9zMzIgc3JjX2lzX2VyZWcgPSAwOwogI2Vsc2UKICMJZGVmaW5lIHNyY19pc19lcmVnIDAKICNlbmRpZgpAQCAtMTI3Nyw3ICsxMzAwLDcgQEAKIAlDSEVDS19FWFRSQV9SRUdTKGRzdCwgZHN0dywgZHN0X2lzX2VyZWcgPSAxKTsKIAlDSEVDS19FWFRSQV9SRUdTKHNyYywgc3Jjdywgc3JjX2lzX2VyZWcgPSAxKTsKICNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2XzY0ICYmIFNMSklUX0NPTkZJR19YODZfNjQpCi0JY29tcGlsZXItPm1vZGUzMiA9IG9wX2ZsYWdzICYgU0xKSVRfSU5UX09QOworCWNvbXBpbGVyLT5tb2RlMzIgPSBvcF9mbGFncyAmIFNMSklUX0kzMl9PUDsKICNlbmRpZgogCiAJb3AgPSBHRVRfT1BDT0RFKG9wKTsKQEAgLTEyODYsMjAgKzEzMDksMjAgQEAKIAkJY29tcGlsZXItPm1vZGUzMiA9IDA7CiAjZW5kaWYKIAotCQlpZiAob3BfZmxhZ3MgJiBTTEpJVF9JTlRfT1ApIHsKKwkJaWYgKG9wX2ZsYWdzICYgU0xKSVRfSTMyX09QKSB7CiAJCQlpZiAoRkFTVF9JU19SRUcoc3JjKSAmJiBzcmMgPT0gZHN0KSB7CiAJCQkJaWYgKCFUWVBFX0NBU1RfTkVFREVEKG9wKSkKIAkJCQkJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CiAJCQl9CiAjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1g4Nl82NCAmJiBTTEpJVF9DT05GSUdfWDg2XzY0KQotCQkJaWYgKG9wID09IFNMSklUX01PVl9TSSAmJiAoc3JjICYgU0xKSVRfTUVNKSkKLQkJCQlvcCA9IFNMSklUX01PVl9VSTsKLQkJCWlmIChvcCA9PSBTTEpJVF9NT1ZVX1NJICYmIChzcmMgJiBTTEpJVF9NRU0pKQotCQkJCW9wID0gU0xKSVRfTU9WVV9VSTsKLQkJCWlmIChvcCA9PSBTTEpJVF9NT1ZfVUkgJiYgKHNyYyAmIFNMSklUX0lNTSkpCi0JCQkJb3AgPSBTTEpJVF9NT1ZfU0k7Ci0JCQlpZiAob3AgPT0gU0xKSVRfTU9WVV9VSSAmJiAoc3JjICYgU0xKSVRfSU1NKSkKLQkJCQlvcCA9IFNMSklUX01PVlVfU0k7CisJCQlpZiAob3AgPT0gU0xKSVRfTU9WX1MzMiAmJiAoc3JjICYgU0xKSVRfTUVNKSkKKwkJCQlvcCA9IFNMSklUX01PVl9VMzI7CisJCQlpZiAob3AgPT0gU0xKSVRfTU9WVV9TMzIgJiYgKHNyYyAmIFNMSklUX01FTSkpCisJCQkJb3AgPSBTTEpJVF9NT1ZVX1UzMjsKKwkJCWlmIChvcCA9PSBTTEpJVF9NT1ZfVTMyICYmIChzcmMgJiBTTEpJVF9JTU0pKQorCQkJCW9wID0gU0xKSVRfTU9WX1MzMjsKKwkJCWlmIChvcCA9PSBTTEpJVF9NT1ZVX1UzMiAmJiAoc3JjICYgU0xKSVRfSU1NKSkKKwkJCQlvcCA9IFNMSklUX01PVlVfUzMyOwogI2VuZGlmCiAJCX0KIApAQCAtMTMxMSwyNCArMTMzNCwyNCBAQAogCiAJCWlmIChzcmMgJiBTTEpJVF9JTU0pIHsKIAkJCXN3aXRjaCAob3ApIHsKLQkJCWNhc2UgU0xKSVRfTU9WX1VCOgotCQkJCXNyY3cgPSAoc2xqaXRfdWIpc3JjdzsKKwkJCWNhc2UgU0xKSVRfTU9WX1U4OgorCQkJCXNyY3cgPSAoc2xqaXRfdTgpc3JjdzsKIAkJCQlicmVhazsKLQkJCWNhc2UgU0xKSVRfTU9WX1NCOgotCQkJCXNyY3cgPSAoc2xqaXRfc2Ipc3JjdzsKKwkJCWNhc2UgU0xKSVRfTU9WX1M4OgorCQkJCXNyY3cgPSAoc2xqaXRfczgpc3JjdzsKIAkJCQlicmVhazsKLQkJCWNhc2UgU0xKSVRfTU9WX1VIOgotCQkJCXNyY3cgPSAoc2xqaXRfdWgpc3JjdzsKKwkJCWNhc2UgU0xKSVRfTU9WX1UxNjoKKwkJCQlzcmN3ID0gKHNsaml0X3UxNilzcmN3OwogCQkJCWJyZWFrOwotCQkJY2FzZSBTTEpJVF9NT1ZfU0g6Ci0JCQkJc3JjdyA9IChzbGppdF9zaClzcmN3OworCQkJY2FzZSBTTEpJVF9NT1ZfUzE2OgorCQkJCXNyY3cgPSAoc2xqaXRfczE2KXNyY3c7CiAJCQkJYnJlYWs7CiAjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1g4Nl82NCAmJiBTTEpJVF9DT05GSUdfWDg2XzY0KQotCQkJY2FzZSBTTEpJVF9NT1ZfVUk6Ci0JCQkJc3JjdyA9IChzbGppdF91aSlzcmN3OworCQkJY2FzZSBTTEpJVF9NT1ZfVTMyOgorCQkJCXNyY3cgPSAoc2xqaXRfdTMyKXNyY3c7CiAJCQkJYnJlYWs7Ci0JCQljYXNlIFNMSklUX01PVl9TSToKLQkJCQlzcmN3ID0gKHNsaml0X3NpKXNyY3c7CisJCQljYXNlIFNMSklUX01PVl9TMzI6CisJCQkJc3JjdyA9IChzbGppdF9zMzIpc3JjdzsKIAkJCQlicmVhazsKICNlbmRpZgogCQkJfQpAQCAtMTM0Nyw3ICsxMzcwLDcgQEAKIAkJfQogCiAjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1g4Nl8zMiAmJiBTTEpJVF9DT05GSUdfWDg2XzMyKQotCQlpZiAoU0xKSVRfVU5MSUtFTFkoZHN0X2lzX2VyZWcpICYmICghKG9wID09IFNMSklUX01PViB8fCBvcCA9PSBTTEpJVF9NT1ZfVUkgfHwgb3AgPT0gU0xKSVRfTU9WX1NJIHx8IG9wID09IFNMSklUX01PVl9QKSB8fCAoc3JjICYgU0xKSVRfTUVNKSkpIHsKKwkJaWYgKFNMSklUX1VOTElLRUxZKGRzdF9pc19lcmVnKSAmJiAoIShvcCA9PSBTTEpJVF9NT1YgfHwgb3AgPT0gU0xKSVRfTU9WX1UzMiB8fCBvcCA9PSBTTEpJVF9NT1ZfUzMyIHx8IG9wID09IFNMSklUX01PVl9QKSB8fCAoc3JjICYgU0xKSVRfTUVNKSkpIHsKIAkJCVNMSklUX0FTU0VSVChkc3QgPT0gU0xKSVRfTUVNMShTTEpJVF9TUCkpOwogCQkJZHN0ID0gVE1QX1JFRzE7CiAJCX0KQEAgLTEzNTcsMjggKzEzODAsMjggQEAKIAkJY2FzZSBTTEpJVF9NT1Y6CiAJCWNhc2UgU0xKSVRfTU9WX1A6CiAjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1g4Nl8zMiAmJiBTTEpJVF9DT05GSUdfWDg2XzMyKQotCQljYXNlIFNMSklUX01PVl9VSToKLQkJY2FzZSBTTEpJVF9NT1ZfU0k6CisJCWNhc2UgU0xKSVRfTU9WX1UzMjoKKwkJY2FzZSBTTEpJVF9NT1ZfUzMyOgogI2VuZGlmCiAJCQlGQUlMX0lGKGVtaXRfbW92KGNvbXBpbGVyLCBkc3QsIGRzdHcsIHNyYywgc3JjdykpOwogCQkJYnJlYWs7Ci0JCWNhc2UgU0xKSVRfTU9WX1VCOgorCQljYXNlIFNMSklUX01PVl9VODoKIAkJCUZBSUxfSUYoZW1pdF9tb3ZfYnl0ZShjb21waWxlciwgMCwgZHN0LCBkc3R3LCBzcmMsIHNyY3cpKTsKIAkJCWJyZWFrOwotCQljYXNlIFNMSklUX01PVl9TQjoKKwkJY2FzZSBTTEpJVF9NT1ZfUzg6CiAJCQlGQUlMX0lGKGVtaXRfbW92X2J5dGUoY29tcGlsZXIsIDEsIGRzdCwgZHN0dywgc3JjLCBzcmN3KSk7CiAJCQlicmVhazsKLQkJY2FzZSBTTEpJVF9NT1ZfVUg6CisJCWNhc2UgU0xKSVRfTU9WX1UxNjoKIAkJCUZBSUxfSUYoZW1pdF9tb3ZfaGFsZihjb21waWxlciwgMCwgZHN0LCBkc3R3LCBzcmMsIHNyY3cpKTsKIAkJCWJyZWFrOwotCQljYXNlIFNMSklUX01PVl9TSDoKKwkJY2FzZSBTTEpJVF9NT1ZfUzE2OgogCQkJRkFJTF9JRihlbWl0X21vdl9oYWxmKGNvbXBpbGVyLCAxLCBkc3QsIGRzdHcsIHNyYywgc3JjdykpOwogCQkJYnJlYWs7CiAjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1g4Nl82NCAmJiBTTEpJVF9DT05GSUdfWDg2XzY0KQotCQljYXNlIFNMSklUX01PVl9VSToKKwkJY2FzZSBTTEpJVF9NT1ZfVTMyOgogCQkJRkFJTF9JRihlbWl0X21vdl9pbnQoY29tcGlsZXIsIDAsIGRzdCwgZHN0dywgc3JjLCBzcmN3KSk7CiAJCQlicmVhazsKLQkJY2FzZSBTTEpJVF9NT1ZfU0k6CisJCWNhc2UgU0xKSVRfTU9WX1MzMjoKIAkJCUZBSUxfSUYoZW1pdF9tb3ZfaW50KGNvbXBpbGVyLCAxLCBkc3QsIGRzdHcsIHNyYywgc3JjdykpOwogCQkJYnJlYWs7CiAjZW5kaWYKQEAgLTE0NTQsMTMgKzE0NzcsMTMgQEAKIAogI2VuZGlmCiAKLXN0YXRpYyBzbGppdF9zaSBlbWl0X2N1bV9iaW5hcnkoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwKLQlzbGppdF91YiBvcF9ybSwgc2xqaXRfdWIgb3BfbXIsIHNsaml0X3ViIG9wX2ltbSwgc2xqaXRfdWIgb3BfZWF4X2ltbSwKLQlzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsCi0Jc2xqaXRfc2kgc3JjMSwgc2xqaXRfc3cgc3JjMXcsCi0Jc2xqaXRfc2kgc3JjMiwgc2xqaXRfc3cgc3JjMncpCitzdGF0aWMgc2xqaXRfczMyIGVtaXRfY3VtX2JpbmFyeShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLAorCXNsaml0X3U4IG9wX3JtLCBzbGppdF91OCBvcF9tciwgc2xqaXRfdTggb3BfaW1tLCBzbGppdF91OCBvcF9lYXhfaW1tLAorCXNsaml0X3MzMiBkc3QsIHNsaml0X3N3IGRzdHcsCisJc2xqaXRfczMyIHNyYzEsIHNsaml0X3N3IHNyYzF3LAorCXNsaml0X3MzMiBzcmMyLCBzbGppdF9zdyBzcmMydykKIHsKLQlzbGppdF91YiogaW5zdDsKKwlzbGppdF91OCogaW5zdDsKIAogCWlmIChkc3QgPT0gU0xKSVRfVU5VU0VEKSB7CiAJCUVNSVRfTU9WKGNvbXBpbGVyLCBUTVBfUkVHMSwgMCwgc3JjMSwgc3JjMXcpOwpAQCAtMTU3MCwxMyArMTU5MywxMyBAQAogCXJldHVybiBTTEpJVF9TVUNDRVNTOwogfQogCi1zdGF0aWMgc2xqaXRfc2kgZW1pdF9ub25fY3VtX2JpbmFyeShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLAotCXNsaml0X3ViIG9wX3JtLCBzbGppdF91YiBvcF9tciwgc2xqaXRfdWIgb3BfaW1tLCBzbGppdF91YiBvcF9lYXhfaW1tLAotCXNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dywKLQlzbGppdF9zaSBzcmMxLCBzbGppdF9zdyBzcmMxdywKLQlzbGppdF9zaSBzcmMyLCBzbGppdF9zdyBzcmMydykKK3N0YXRpYyBzbGppdF9zMzIgZW1pdF9ub25fY3VtX2JpbmFyeShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLAorCXNsaml0X3U4IG9wX3JtLCBzbGppdF91OCBvcF9tciwgc2xqaXRfdTggb3BfaW1tLCBzbGppdF91OCBvcF9lYXhfaW1tLAorCXNsaml0X3MzMiBkc3QsIHNsaml0X3N3IGRzdHcsCisJc2xqaXRfczMyIHNyYzEsIHNsaml0X3N3IHNyYzF3LAorCXNsaml0X3MzMiBzcmMyLCBzbGppdF9zdyBzcmMydykKIHsKLQlzbGppdF91YiogaW5zdDsKKwlzbGppdF91OCogaW5zdDsKIAogCWlmIChkc3QgPT0gU0xKSVRfVU5VU0VEKSB7CiAJCUVNSVRfTU9WKGNvbXBpbGVyLCBUTVBfUkVHMSwgMCwgc3JjMSwgc3JjMXcpOwpAQCAtMTY1MiwxMyArMTY3NSwxMyBAQAogCXJldHVybiBTTEpJVF9TVUNDRVNTOwogfQogCi1zdGF0aWMgc2xqaXRfc2kgZW1pdF9tdWwoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwKLQlzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsCi0Jc2xqaXRfc2kgc3JjMSwgc2xqaXRfc3cgc3JjMXcsCi0Jc2xqaXRfc2kgc3JjMiwgc2xqaXRfc3cgc3JjMncpCitzdGF0aWMgc2xqaXRfczMyIGVtaXRfbXVsKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsCisJc2xqaXRfczMyIGRzdCwgc2xqaXRfc3cgZHN0dywKKwlzbGppdF9zMzIgc3JjMSwgc2xqaXRfc3cgc3JjMXcsCisJc2xqaXRfczMyIHNyYzIsIHNsaml0X3N3IHNyYzJ3KQogewotCXNsaml0X3ViKiBpbnN0OwotCXNsaml0X3NpIGRzdF9yOworCXNsaml0X3U4KiBpbnN0OworCXNsaml0X3MzMiBkc3RfcjsKIAogCWRzdF9yID0gRkFTVF9JU19SRUcoZHN0KSA/IGRzdCA6IFRNUF9SRUcxOwogCkBAIC0xNjg2LDMwICsxNzA5LDMwIEBACiAJCQlpbnN0ID0gZW1pdF94ODZfaW5zdHJ1Y3Rpb24oY29tcGlsZXIsIDEsIGRzdF9yLCAwLCBzcmMyLCBzcmMydyk7CiAJCQlGQUlMX0lGKCFpbnN0KTsKIAkJCSppbnN0ID0gSU1VTF9yX3JtX2k4OwotCQkJaW5zdCA9IChzbGppdF91YiopZW5zdXJlX2J1Zihjb21waWxlciwgMSArIDEpOworCQkJaW5zdCA9IChzbGppdF91OCopZW5zdXJlX2J1Zihjb21waWxlciwgMSArIDEpOwogCQkJRkFJTF9JRighaW5zdCk7CiAJCQlJTkNfU0laRSgxKTsKLQkJCSppbnN0ID0gKHNsaml0X3NiKXNyYzF3OworCQkJKmluc3QgPSAoc2xqaXRfczgpc3JjMXc7CiAJCX0KICNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2XzMyICYmIFNMSklUX0NPTkZJR19YODZfMzIpCiAJCWVsc2UgewogCQkJaW5zdCA9IGVtaXRfeDg2X2luc3RydWN0aW9uKGNvbXBpbGVyLCAxLCBkc3RfciwgMCwgc3JjMiwgc3JjMncpOwogCQkJRkFJTF9JRighaW5zdCk7CiAJCQkqaW5zdCA9IElNVUxfcl9ybV9pMzI7Ci0JCQlpbnN0ID0gKHNsaml0X3ViKillbnN1cmVfYnVmKGNvbXBpbGVyLCAxICsgNCk7CisJCQlpbnN0ID0gKHNsaml0X3U4KillbnN1cmVfYnVmKGNvbXBpbGVyLCAxICsgNCk7CiAJCQlGQUlMX0lGKCFpbnN0KTsKIAkJCUlOQ19TSVpFKDQpOwotCQkJKihzbGppdF9zdyopaW5zdCA9IHNyYzF3OworCQkJc2xqaXRfdW5hbGlnbmVkX3N0b3JlX3N3KGluc3QsIHNyYzF3KTsKIAkJfQogI2Vsc2UKIAkJZWxzZSBpZiAoSVNfSEFMRldPUkQoc3JjMXcpKSB7CiAJCQlpbnN0ID0gZW1pdF94ODZfaW5zdHJ1Y3Rpb24oY29tcGlsZXIsIDEsIGRzdF9yLCAwLCBzcmMyLCBzcmMydyk7CiAJCQlGQUlMX0lGKCFpbnN0KTsKIAkJCSppbnN0ID0gSU1VTF9yX3JtX2kzMjsKLQkJCWluc3QgPSAoc2xqaXRfdWIqKWVuc3VyZV9idWYoY29tcGlsZXIsIDEgKyA0KTsKKwkJCWluc3QgPSAoc2xqaXRfdTgqKWVuc3VyZV9idWYoY29tcGlsZXIsIDEgKyA0KTsKIAkJCUZBSUxfSUYoIWluc3QpOwogCQkJSU5DX1NJWkUoNCk7Ci0JCQkqKHNsaml0X3NpKilpbnN0ID0gKHNsaml0X3NpKXNyYzF3OworCQkJc2xqaXRfdW5hbGlnbmVkX3N0b3JlX3MzMihpbnN0LCAoc2xqaXRfczMyKXNyYzF3KTsKIAkJfQogCQllbHNlIHsKIAkJCUVNSVRfTU9WKGNvbXBpbGVyLCBUTVBfUkVHMiwgMCwgU0xKSVRfSU1NLCBzcmMxdyk7CkBAIC0xNzI5LDMwICsxNzUyLDMwIEBACiAJCQlpbnN0ID0gZW1pdF94ODZfaW5zdHJ1Y3Rpb24oY29tcGlsZXIsIDEsIGRzdF9yLCAwLCBzcmMxLCBzcmMxdyk7CiAJCQlGQUlMX0lGKCFpbnN0KTsKIAkJCSppbnN0ID0gSU1VTF9yX3JtX2k4OwotCQkJaW5zdCA9IChzbGppdF91YiopZW5zdXJlX2J1Zihjb21waWxlciwgMSArIDEpOworCQkJaW5zdCA9IChzbGppdF91OCopZW5zdXJlX2J1Zihjb21waWxlciwgMSArIDEpOwogCQkJRkFJTF9JRighaW5zdCk7CiAJCQlJTkNfU0laRSgxKTsKLQkJCSppbnN0ID0gKHNsaml0X3NiKXNyYzJ3OworCQkJKmluc3QgPSAoc2xqaXRfczgpc3JjMnc7CiAJCX0KICNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2XzMyICYmIFNMSklUX0NPTkZJR19YODZfMzIpCiAJCWVsc2UgewogCQkJaW5zdCA9IGVtaXRfeDg2X2luc3RydWN0aW9uKGNvbXBpbGVyLCAxLCBkc3RfciwgMCwgc3JjMSwgc3JjMXcpOwogCQkJRkFJTF9JRighaW5zdCk7CiAJCQkqaW5zdCA9IElNVUxfcl9ybV9pMzI7Ci0JCQlpbnN0ID0gKHNsaml0X3ViKillbnN1cmVfYnVmKGNvbXBpbGVyLCAxICsgNCk7CisJCQlpbnN0ID0gKHNsaml0X3U4KillbnN1cmVfYnVmKGNvbXBpbGVyLCAxICsgNCk7CiAJCQlGQUlMX0lGKCFpbnN0KTsKIAkJCUlOQ19TSVpFKDQpOwotCQkJKihzbGppdF9zdyopaW5zdCA9IHNyYzJ3OworCQkJc2xqaXRfdW5hbGlnbmVkX3N0b3JlX3N3KGluc3QsIHNyYzJ3KTsKIAkJfQogI2Vsc2UKIAkJZWxzZSBpZiAoSVNfSEFMRldPUkQoc3JjMncpKSB7CiAJCQlpbnN0ID0gZW1pdF94ODZfaW5zdHJ1Y3Rpb24oY29tcGlsZXIsIDEsIGRzdF9yLCAwLCBzcmMxLCBzcmMxdyk7CiAJCQlGQUlMX0lGKCFpbnN0KTsKIAkJCSppbnN0ID0gSU1VTF9yX3JtX2kzMjsKLQkJCWluc3QgPSAoc2xqaXRfdWIqKWVuc3VyZV9idWYoY29tcGlsZXIsIDEgKyA0KTsKKwkJCWluc3QgPSAoc2xqaXRfdTgqKWVuc3VyZV9idWYoY29tcGlsZXIsIDEgKyA0KTsKIAkJCUZBSUxfSUYoIWluc3QpOwogCQkJSU5DX1NJWkUoNCk7Ci0JCQkqKHNsaml0X3NpKilpbnN0ID0gKHNsaml0X3NpKXNyYzJ3OworCQkJc2xqaXRfdW5hbGlnbmVkX3N0b3JlX3MzMihpbnN0LCAoc2xqaXRfczMyKXNyYzJ3KTsKIAkJfQogCQllbHNlIHsKIAkJCUVNSVRfTU9WKGNvbXBpbGVyLCBUTVBfUkVHMiwgMCwgU0xKSVRfSU1NLCBzcmMydyk7CkBAIC0xNzgyLDEzICsxODA1LDEzIEBACiAJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBzbGppdF9zaSBlbWl0X2xlYV9iaW5hcnkoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kga2VlcF9mbGFncywKLQlzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsCi0Jc2xqaXRfc2kgc3JjMSwgc2xqaXRfc3cgc3JjMXcsCi0Jc2xqaXRfc2kgc3JjMiwgc2xqaXRfc3cgc3JjMncpCitzdGF0aWMgc2xqaXRfczMyIGVtaXRfbGVhX2JpbmFyeShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIga2VlcF9mbGFncywKKwlzbGppdF9zMzIgZHN0LCBzbGppdF9zdyBkc3R3LAorCXNsaml0X3MzMiBzcmMxLCBzbGppdF9zdyBzcmMxdywKKwlzbGppdF9zMzIgc3JjMiwgc2xqaXRfc3cgc3JjMncpCiB7Ci0Jc2xqaXRfdWIqIGluc3Q7Ci0Jc2xqaXRfc2kgZHN0X3IsIGRvbmUgPSAwOworCXNsaml0X3U4KiBpbnN0OworCXNsaml0X3MzMiBkc3RfciwgZG9uZSA9IDA7CiAKIAkvKiBUaGVzZSBjYXNlcyBiZXR0ZXIgYmUgbGVmdCB0byBoYW5kbGVkIGJ5IG5vcm1hbCB3YXkuICovCiAJaWYgKCFrZWVwX2ZsYWdzKSB7CkBAIC0xODA5LDcgKzE4MzIsNyBAQAogCQl9CiAjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1g4Nl82NCAmJiBTTEpJVF9DT05GSUdfWDg2XzY0KQogCQlpZiAoKHNyYzIgJiBTTEpJVF9JTU0pICYmIChjb21waWxlci0+bW9kZTMyIHx8IElTX0hBTEZXT1JEKHNyYzJ3KSkpIHsKLQkJCWluc3QgPSBlbWl0X3g4Nl9pbnN0cnVjdGlvbihjb21waWxlciwgMSwgZHN0X3IsIDAsIFNMSklUX01FTTEoc3JjMSksIChzbGppdF9zaSlzcmMydyk7CisJCQlpbnN0ID0gZW1pdF94ODZfaW5zdHJ1Y3Rpb24oY29tcGlsZXIsIDEsIGRzdF9yLCAwLCBTTEpJVF9NRU0xKHNyYzEpLCAoc2xqaXRfczMyKXNyYzJ3KTsKICNlbHNlCiAJCWlmIChzcmMyICYgU0xKSVRfSU1NKSB7CiAJCQlpbnN0ID0gZW1pdF94ODZfaW5zdHJ1Y3Rpb24oY29tcGlsZXIsIDEsIGRzdF9yLCAwLCBTTEpJVF9NRU0xKHNyYzEpLCBzcmMydyk7CkBAIC0xODIyLDcgKzE4NDUsNyBAQAogCWVsc2UgaWYgKEZBU1RfSVNfUkVHKHNyYzIpKSB7CiAjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1g4Nl82NCAmJiBTTEpJVF9DT05GSUdfWDg2XzY0KQogCQlpZiAoKHNyYzEgJiBTTEpJVF9JTU0pICYmIChjb21waWxlci0+bW9kZTMyIHx8IElTX0hBTEZXT1JEKHNyYzF3KSkpIHsKLQkJCWluc3QgPSBlbWl0X3g4Nl9pbnN0cnVjdGlvbihjb21waWxlciwgMSwgZHN0X3IsIDAsIFNMSklUX01FTTEoc3JjMiksIChzbGppdF9zaSlzcmMxdyk7CisJCQlpbnN0ID0gZW1pdF94ODZfaW5zdHJ1Y3Rpb24oY29tcGlsZXIsIDEsIGRzdF9yLCAwLCBTTEpJVF9NRU0xKHNyYzIpLCAoc2xqaXRfczMyKXNyYzF3KTsKICNlbHNlCiAJCWlmIChzcmMxICYgU0xKSVRfSU1NKSB7CiAJCQlpbnN0ID0gZW1pdF94ODZfaW5zdHJ1Y3Rpb24oY29tcGlsZXIsIDEsIGRzdF9yLCAwLCBTTEpJVF9NRU0xKHNyYzIpLCBzcmMxdyk7CkBAIC0xODQxLDExICsxODY0LDExIEBACiAJcmV0dXJuIFNMSklUX0VSUl9VTlNVUFBPUlRFRDsKIH0KIAotc3RhdGljIHNsaml0X3NpIGVtaXRfY21wX2JpbmFyeShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLAotCXNsaml0X3NpIHNyYzEsIHNsaml0X3N3IHNyYzF3LAotCXNsaml0X3NpIHNyYzIsIHNsaml0X3N3IHNyYzJ3KQorc3RhdGljIHNsaml0X3MzMiBlbWl0X2NtcF9iaW5hcnkoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwKKwlzbGppdF9zMzIgc3JjMSwgc2xqaXRfc3cgc3JjMXcsCisJc2xqaXRfczMyIHNyYzIsIHNsaml0X3N3IHNyYzJ3KQogewotCXNsaml0X3ViKiBpbnN0OworCXNsaml0X3U4KiBpbnN0OwogCiAjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1g4Nl82NCAmJiBTTEpJVF9DT05GSUdfWDg2XzY0KQogCWlmIChzcmMxID09IFNMSklUX1IwICYmIChzcmMyICYgU0xKSVRfSU1NKSAmJiAoc3JjMncgPiAxMjcgfHwgc3JjMncgPCAtMTI4KSAmJiAoY29tcGlsZXItPm1vZGUzMiB8fCBJU19IQUxGV09SRChzcmMydykpKSB7CkBAIC0xODkyLDExICsxOTE1LDExIEBACiAJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBzbGppdF9zaSBlbWl0X3Rlc3RfYmluYXJ5KHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsCi0Jc2xqaXRfc2kgc3JjMSwgc2xqaXRfc3cgc3JjMXcsCi0Jc2xqaXRfc2kgc3JjMiwgc2xqaXRfc3cgc3JjMncpCitzdGF0aWMgc2xqaXRfczMyIGVtaXRfdGVzdF9iaW5hcnkoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwKKwlzbGppdF9zMzIgc3JjMSwgc2xqaXRfc3cgc3JjMXcsCisJc2xqaXRfczMyIHNyYzIsIHNsaml0X3N3IHNyYzJ3KQogewotCXNsaml0X3ViKiBpbnN0OworCXNsaml0X3U4KiBpbnN0OwogCiAjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1g4Nl82NCAmJiBTTEpJVF9DT05GSUdfWDg2XzY0KQogCWlmIChzcmMxID09IFNMSklUX1IwICYmIChzcmMyICYgU0xKSVRfSU1NKSAmJiAoc3JjMncgPiAxMjcgfHwgc3JjMncgPCAtMTI4KSAmJiAoY29tcGlsZXItPm1vZGUzMiB8fCBJU19IQUxGV09SRChzcmMydykpKSB7CkBAIC0yMDAyLDEzICsyMDI1LDEzIEBACiAJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBzbGppdF9zaSBlbWl0X3NoaWZ0KHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsCi0Jc2xqaXRfdWIgbW9kZSwKLQlzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsCi0Jc2xqaXRfc2kgc3JjMSwgc2xqaXRfc3cgc3JjMXcsCi0Jc2xqaXRfc2kgc3JjMiwgc2xqaXRfc3cgc3JjMncpCitzdGF0aWMgc2xqaXRfczMyIGVtaXRfc2hpZnQoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwKKwlzbGppdF91OCBtb2RlLAorCXNsaml0X3MzMiBkc3QsIHNsaml0X3N3IGRzdHcsCisJc2xqaXRfczMyIHNyYzEsIHNsaml0X3N3IHNyYzF3LAorCXNsaml0X3MzMiBzcmMyLCBzbGppdF9zdyBzcmMydykKIHsKLQlzbGppdF91YiogaW5zdDsKKwlzbGppdF91OCogaW5zdDsKIAogCWlmICgoc3JjMiAmIFNMSklUX0lNTSkgfHwgKHNyYzIgPT0gU0xKSVRfUFJFRl9TSElGVF9SRUcpKSB7CiAJCWlmIChkc3QgPT0gc3JjMSAmJiBkc3R3ID09IHNyYzF3KSB7CkBAIC0yMDkxLDExICsyMTE0LDExIEBACiAJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBzbGppdF9zaSBlbWl0X3NoaWZ0X3dpdGhfZmxhZ3Moc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwKLQlzbGppdF91YiBtb2RlLCBzbGppdF9zaSBzZXRfZmxhZ3MsCi0Jc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3LAotCXNsaml0X3NpIHNyYzEsIHNsaml0X3N3IHNyYzF3LAotCXNsaml0X3NpIHNyYzIsIHNsaml0X3N3IHNyYzJ3KQorc3RhdGljIHNsaml0X3MzMiBlbWl0X3NoaWZ0X3dpdGhfZmxhZ3Moc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwKKwlzbGppdF91OCBtb2RlLCBzbGppdF9zMzIgc2V0X2ZsYWdzLAorCXNsaml0X3MzMiBkc3QsIHNsaml0X3N3IGRzdHcsCisJc2xqaXRfczMyIHNyYzEsIHNsaml0X3N3IHNyYzF3LAorCXNsaml0X3MzMiBzcmMyLCBzbGppdF9zdyBzcmMydykKIHsKIAkvKiBUaGUgQ1BVIGRvZXMgbm90IHNldCBmbGFncyBpZiB0aGUgc2hpZnQgY291bnQgaXMgMC4gKi8KIAlpZiAoc3JjMiAmIFNMSklUX0lNTSkgewpAQCAtMjEyNiwxMCArMjE0OSwxMCBAQAogCXJldHVybiBTTEpJVF9TVUNDRVNTOwogfQogCi1TTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9vcDIoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsCi0Jc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3LAotCXNsaml0X3NpIHNyYzEsIHNsaml0X3N3IHNyYzF3LAotCXNsaml0X3NpIHNyYzIsIHNsaml0X3N3IHNyYzJ3KQorU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3MzMiBzbGppdF9lbWl0X29wMihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgb3AsCisJc2xqaXRfczMyIGRzdCwgc2xqaXRfc3cgZHN0dywKKwlzbGppdF9zMzIgc3JjMSwgc2xqaXRfc3cgc3JjMXcsCisJc2xqaXRfczMyIHNyYzIsIHNsaml0X3N3IHNyYzJ3KQogewogCUNIRUNLX0VSUk9SKCk7CiAJQ0hFQ0soY2hlY2tfc2xqaXRfZW1pdF9vcDIoY29tcGlsZXIsIG9wLCBkc3QsIGRzdHcsIHNyYzEsIHNyYzF3LCBzcmMyLCBzcmMydykpOwpAQCAtMjE0MSw3ICsyMTY0LDcgQEAKIAlDSEVDS19FWFRSQV9SRUdTKHNyYzEsIHNyYzF3LCAodm9pZCkwKTsKIAlDSEVDS19FWFRSQV9SRUdTKHNyYzIsIHNyYzJ3LCAodm9pZCkwKTsKICNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2XzY0ICYmIFNMSklUX0NPTkZJR19YODZfNjQpCi0JY29tcGlsZXItPm1vZGUzMiA9IG9wICYgU0xKSVRfSU5UX09QOworCWNvbXBpbGVyLT5tb2RlMzIgPSBvcCAmIFNMSklUX0kzMl9PUDsKICNlbmRpZgogCiAJaWYgKEdFVF9PUENPREUob3ApID49IFNMSklUX01VTCkgewpAQCAtMjIyMSw3ICsyMjQ0LDcgQEAKIAlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKIH0KIAotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2dldF9yZWdpc3Rlcl9pbmRleChzbGppdF9zaSByZWcpCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfczMyIHNsaml0X2dldF9yZWdpc3Rlcl9pbmRleChzbGppdF9zMzIgcmVnKQogewogCUNIRUNLX1JFR19JTkRFWChjaGVja19zbGppdF9nZXRfcmVnaXN0ZXJfaW5kZXgocmVnKSk7CiAjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1g4Nl8zMiAmJiBTTEpJVF9DT05GSUdfWDg2XzMyKQpAQCAtMjIzMSwyNCArMjI1NCwyNCBAQAogCXJldHVybiByZWdfbWFwW3JlZ107CiB9CiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9nZXRfZmxvYXRfcmVnaXN0ZXJfaW5kZXgoc2xqaXRfc2kgcmVnKQorU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3MzMiBzbGppdF9nZXRfZmxvYXRfcmVnaXN0ZXJfaW5kZXgoc2xqaXRfczMyIHJlZykKIHsKIAlDSEVDS19SRUdfSU5ERVgoY2hlY2tfc2xqaXRfZ2V0X2Zsb2F0X3JlZ2lzdGVyX2luZGV4KHJlZykpOwogCXJldHVybiByZWc7CiB9CiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X29wX2N1c3RvbShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLAotCXZvaWQgKmluc3RydWN0aW9uLCBzbGppdF9zaSBzaXplKQorU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3MzMiBzbGppdF9lbWl0X29wX2N1c3RvbShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLAorCXZvaWQgKmluc3RydWN0aW9uLCBzbGppdF9zMzIgc2l6ZSkKIHsKLQlzbGppdF91YiAqaW5zdDsKKwlzbGppdF91OCAqaW5zdDsKIAogCUNIRUNLX0VSUk9SKCk7CiAJQ0hFQ0soY2hlY2tfc2xqaXRfZW1pdF9vcF9jdXN0b20oY29tcGlsZXIsIGluc3RydWN0aW9uLCBzaXplKSk7CiAKLQlpbnN0ID0gKHNsaml0X3ViKillbnN1cmVfYnVmKGNvbXBpbGVyLCAxICsgc2l6ZSk7CisJaW5zdCA9IChzbGppdF91OCopZW5zdXJlX2J1Zihjb21waWxlciwgMSArIHNpemUpOwogCUZBSUxfSUYoIWluc3QpOwogCUlOQ19TSVpFKHNpemUpOwotCVNMSklUX01FTU1PVkUoaW5zdCwgaW5zdHJ1Y3Rpb24sIHNpemUpOworCVNMSklUX01FTUNQWShpbnN0LCBpbnN0cnVjdGlvbiwgc2l6ZSk7CiAJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CiB9CiAKQEAgLTIyNTcsMTIgKzIyODAsMTIgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiAvKiBBbGlnbm1lbnQgKyAyICogMTYgYnl0ZXMuICovCi1zdGF0aWMgc2xqaXRfc2kgc3NlMl9kYXRhWzMgKyAoNCArIDQpICogMl07Ci1zdGF0aWMgc2xqaXRfc2kgKnNzZTJfYnVmZmVyOworc3RhdGljIHNsaml0X3MzMiBzc2UyX2RhdGFbMyArICg0ICsgNCkgKiAyXTsKK3N0YXRpYyBzbGppdF9zMzIgKnNzZTJfYnVmZmVyOwogCiBzdGF0aWMgdm9pZCBpbml0X2NvbXBpbGVyKHZvaWQpCiB7Ci0Jc3NlMl9idWZmZXIgPSAoc2xqaXRfc2kqKSgoKHNsaml0X3V3KXNzZTJfZGF0YSArIDE1KSAmIH4weGYpOworCXNzZTJfYnVmZmVyID0gKHNsaml0X3MzMiopKCgoc2xqaXRfdXcpc3NlMl9kYXRhICsgMTUpICYgfjB4Zik7CiAJLyogU2luZ2xlIHByZWNpc2lvbiBjb25zdGFudHMuICovCiAJc3NlMl9idWZmZXJbMF0gPSAweDgwMDAwMDAwOwogCXNzZTJfYnVmZmVyWzRdID0gMHg3ZmZmZmZmZjsKQEAgLTIyNzMsNyArMjI5Niw3IEBACiAJc3NlMl9idWZmZXJbMTNdID0gMHg3ZmZmZmZmZjsKIH0KIAotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2lzX2ZwdV9hdmFpbGFibGUodm9pZCkKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zMzIgc2xqaXRfaXNfZnB1X2F2YWlsYWJsZSh2b2lkKQogewogI2lmZGVmIFNMSklUX0lTX0ZQVV9BVkFJTEFCTEUKIAlyZXR1cm4gU0xKSVRfSVNfRlBVX0FWQUlMQUJMRTsKQEAgLTIyODYsMTAgKzIzMDksMTAgQEAKICNlbmRpZiAvKiBTTEpJVF9ERVRFQ1RfU1NFMiAqLwogfQogCi1zdGF0aWMgc2xqaXRfc2kgZW1pdF9zc2UyKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3ViIG9wY29kZSwKLQlzbGppdF9zaSBzaW5nbGUsIHNsaml0X3NpIHhtbTEsIHNsaml0X3NpIHhtbTIsIHNsaml0X3N3IHhtbTJ3KQorc3RhdGljIHNsaml0X3MzMiBlbWl0X3NzZTIoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfdTggb3Bjb2RlLAorCXNsaml0X3MzMiBzaW5nbGUsIHNsaml0X3MzMiB4bW0xLCBzbGppdF9zMzIgeG1tMiwgc2xqaXRfc3cgeG1tMncpCiB7Ci0Jc2xqaXRfdWIgKmluc3Q7CisJc2xqaXRfdTggKmluc3Q7CiAKIAlpbnN0ID0gZW1pdF94ODZfaW5zdHJ1Y3Rpb24oY29tcGlsZXIsIDIgfCAoc2luZ2xlID8gRVg4Nl9QUkVGX0YzIDogRVg4Nl9QUkVGX0YyKSB8IEVYODZfU1NFMiwgeG1tMSwgMCwgeG1tMiwgeG1tMncpOwogCUZBSUxfSUYoIWluc3QpOwpAQCAtMjI5OCwxMCArMjMyMSwxMCBAQAogCXJldHVybiBTTEpJVF9TVUNDRVNTOwogfQogCi1zdGF0aWMgc2xqaXRfc2kgZW1pdF9zc2UyX2xvZ2ljKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3ViIG9wY29kZSwKLQlzbGppdF9zaSBwcmVmNjYsIHNsaml0X3NpIHhtbTEsIHNsaml0X3NpIHhtbTIsIHNsaml0X3N3IHhtbTJ3KQorc3RhdGljIHNsaml0X3MzMiBlbWl0X3NzZTJfbG9naWMoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfdTggb3Bjb2RlLAorCXNsaml0X3MzMiBwcmVmNjYsIHNsaml0X3MzMiB4bW0xLCBzbGppdF9zMzIgeG1tMiwgc2xqaXRfc3cgeG1tMncpCiB7Ci0Jc2xqaXRfdWIgKmluc3Q7CisJc2xqaXRfdTggKmluc3Q7CiAKIAlpbnN0ID0gZW1pdF94ODZfaW5zdHJ1Y3Rpb24oY29tcGlsZXIsIDIgfCAocHJlZjY2ID8gRVg4Nl9QUkVGXzY2IDogMCkgfCBFWDg2X1NTRTIsIHhtbTEsIDAsIHhtbTIsIHhtbTJ3KTsKIAlGQUlMX0lGKCFpbnN0KTsKQEAgLTIzMTAsMzEgKzIzMzMsMzEgQEAKIAlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKIH0KIAotc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9zaSBlbWl0X3NzZTJfbG9hZChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLAotCXNsaml0X3NpIHNpbmdsZSwgc2xqaXRfc2kgZHN0LCBzbGppdF9zaSBzcmMsIHNsaml0X3N3IHNyY3cpCitzdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X3MzMiBlbWl0X3NzZTJfbG9hZChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLAorCXNsaml0X3MzMiBzaW5nbGUsIHNsaml0X3MzMiBkc3QsIHNsaml0X3MzMiBzcmMsIHNsaml0X3N3IHNyY3cpCiB7CiAJcmV0dXJuIGVtaXRfc3NlMihjb21waWxlciwgTU9WU0RfeF94bSwgc2luZ2xlLCBkc3QsIHNyYywgc3Jjdyk7CiB9CiAKLXN0YXRpYyBTTEpJVF9JTkxJTkUgc2xqaXRfc2kgZW1pdF9zc2UyX3N0b3JlKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsCi0Jc2xqaXRfc2kgc2luZ2xlLCBzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsIHNsaml0X3NpIHNyYykKK3N0YXRpYyBTTEpJVF9JTkxJTkUgc2xqaXRfczMyIGVtaXRfc3NlMl9zdG9yZShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLAorCXNsaml0X3MzMiBzaW5nbGUsIHNsaml0X3MzMiBkc3QsIHNsaml0X3N3IGRzdHcsIHNsaml0X3MzMiBzcmMpCiB7CiAJcmV0dXJuIGVtaXRfc3NlMihjb21waWxlciwgTU9WU0RfeG1feCwgc2luZ2xlLCBzcmMsIGRzdCwgZHN0dyk7CiB9CiAKLXN0YXRpYyBTTEpJVF9JTkxJTkUgc2xqaXRfc2kgc2xqaXRfZW1pdF9mb3AxX2NvbnZ3X2Zyb21kKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIG9wLAotCXNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dywKLQlzbGppdF9zaSBzcmMsIHNsaml0X3N3IHNyY3cpCitzdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X3MzMiBzbGppdF9lbWl0X2ZvcDFfY29udl9zd19mcm9tX2Y2NChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgb3AsCisJc2xqaXRfczMyIGRzdCwgc2xqaXRfc3cgZHN0dywKKwlzbGppdF9zMzIgc3JjLCBzbGppdF9zdyBzcmN3KQogewotCXNsaml0X3NpIGRzdF9yID0gU0xPV19JU19SRUcoZHN0KSA/IGRzdCA6IFRNUF9SRUcxOwotCXNsaml0X3ViICppbnN0OworCXNsaml0X3MzMiBkc3RfciA9IFNMT1dfSVNfUkVHKGRzdCkgPyBkc3QgOiBUTVBfUkVHMTsKKwlzbGppdF91OCAqaW5zdDsKIAogI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19YODZfNjQgJiYgU0xKSVRfQ09ORklHX1g4Nl82NCkKLQlpZiAoR0VUX09QQ09ERShvcCkgPT0gU0xKSVRfQ09OVldfRlJPTUQpCisJaWYgKEdFVF9PUENPREUob3ApID09IFNMSklUX0NPTlZfU1dfRlJPTV9GNjQpCiAJCWNvbXBpbGVyLT5tb2RlMzIgPSAwOwogI2VuZGlmCiAKLQlpbnN0ID0gZW1pdF94ODZfaW5zdHJ1Y3Rpb24oY29tcGlsZXIsIDIgfCAoKG9wICYgU0xKSVRfU0lOR0xFX09QKSA/IEVYODZfUFJFRl9GMyA6IEVYODZfUFJFRl9GMikgfCBFWDg2X1NTRTJfT1AyLCBkc3RfciwgMCwgc3JjLCBzcmN3KTsKKwlpbnN0ID0gZW1pdF94ODZfaW5zdHJ1Y3Rpb24oY29tcGlsZXIsIDIgfCAoKG9wICYgU0xKSVRfRjMyX09QKSA/IEVYODZfUFJFRl9GMyA6IEVYODZfUFJFRl9GMikgfCBFWDg2X1NTRTJfT1AyLCBkc3RfciwgMCwgc3JjLCBzcmN3KTsKIAlGQUlMX0lGKCFpbnN0KTsKIAkqaW5zdCsrID0gR1JPVVBfMEY7CiAJKmluc3QgPSBDVlRUU0QyU0lfcl94bTsKQEAgLTIzNDQsMjkgKzIzNjcsMjkgQEAKIAlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKIH0KIAotc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9zaSBzbGppdF9lbWl0X2ZvcDFfY29udmRfZnJvbXcoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsCi0Jc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3LAotCXNsaml0X3NpIHNyYywgc2xqaXRfc3cgc3JjdykKK3N0YXRpYyBTTEpJVF9JTkxJTkUgc2xqaXRfczMyIHNsaml0X2VtaXRfZm9wMV9jb252X2Y2NF9mcm9tX3N3KHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiBvcCwKKwlzbGppdF9zMzIgZHN0LCBzbGppdF9zdyBkc3R3LAorCXNsaml0X3MzMiBzcmMsIHNsaml0X3N3IHNyY3cpCiB7Ci0Jc2xqaXRfc2kgZHN0X3IgPSBGQVNUX0lTX1JFRyhkc3QpID8gZHN0IDogVE1QX0ZSRUc7Ci0Jc2xqaXRfdWIgKmluc3Q7CisJc2xqaXRfczMyIGRzdF9yID0gRkFTVF9JU19SRUcoZHN0KSA/IGRzdCA6IFRNUF9GUkVHOworCXNsaml0X3U4ICppbnN0OwogCiAjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1g4Nl82NCAmJiBTTEpJVF9DT05GSUdfWDg2XzY0KQotCWlmIChHRVRfT1BDT0RFKG9wKSA9PSBTTEpJVF9DT05WRF9GUk9NVykKKwlpZiAoR0VUX09QQ09ERShvcCkgPT0gU0xKSVRfQ09OVl9GNjRfRlJPTV9TVykKIAkJY29tcGlsZXItPm1vZGUzMiA9IDA7CiAjZW5kaWYKIAogCWlmIChzcmMgJiBTTEpJVF9JTU0pIHsKICNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2XzY0ICYmIFNMSklUX0NPTkZJR19YODZfNjQpCi0JCWlmIChHRVRfT1BDT0RFKG9wKSA9PSBTTEpJVF9DT05WRF9GUk9NSSkKLQkJCXNyY3cgPSAoc2xqaXRfc2kpc3JjdzsKKwkJaWYgKEdFVF9PUENPREUob3ApID09IFNMSklUX0NPTlZfRjY0X0ZST01fUzMyKQorCQkJc3JjdyA9IChzbGppdF9zMzIpc3JjdzsKICNlbmRpZgogCQlFTUlUX01PVihjb21waWxlciwgVE1QX1JFRzEsIDAsIHNyYywgc3Jjdyk7CiAJCXNyYyA9IFRNUF9SRUcxOwogCQlzcmN3ID0gMDsKIAl9CiAKLQlpbnN0ID0gZW1pdF94ODZfaW5zdHJ1Y3Rpb24oY29tcGlsZXIsIDIgfCAoKG9wICYgU0xKSVRfU0lOR0xFX09QKSA/IEVYODZfUFJFRl9GMyA6IEVYODZfUFJFRl9GMikgfCBFWDg2X1NTRTJfT1AxLCBkc3RfciwgMCwgc3JjLCBzcmN3KTsKKwlpbnN0ID0gZW1pdF94ODZfaW5zdHJ1Y3Rpb24oY29tcGlsZXIsIDIgfCAoKG9wICYgU0xKSVRfRjMyX09QKSA/IEVYODZfUFJFRl9GMyA6IEVYODZfUFJFRl9GMikgfCBFWDg2X1NTRTJfT1AxLCBkc3RfciwgMCwgc3JjLCBzcmN3KTsKIAlGQUlMX0lGKCFpbnN0KTsKIAkqaW5zdCsrID0gR1JPVVBfMEY7CiAJKmluc3QgPSBDVlRTSTJTRF94X3JtOwpAQCAtMjM3NSwyNyArMjM5OCwyNyBAQAogCWNvbXBpbGVyLT5tb2RlMzIgPSAxOwogI2VuZGlmCiAJaWYgKGRzdF9yID09IFRNUF9GUkVHKQotCQlyZXR1cm4gZW1pdF9zc2UyX3N0b3JlKGNvbXBpbGVyLCBvcCAmIFNMSklUX1NJTkdMRV9PUCwgZHN0LCBkc3R3LCBUTVBfRlJFRyk7CisJCXJldHVybiBlbWl0X3NzZTJfc3RvcmUoY29tcGlsZXIsIG9wICYgU0xKSVRfRjMyX09QLCBkc3QsIGRzdHcsIFRNUF9GUkVHKTsKIAlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKIH0KIAotc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9zaSBzbGppdF9lbWl0X2ZvcDFfY21wKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIG9wLAotCXNsaml0X3NpIHNyYzEsIHNsaml0X3N3IHNyYzF3LAotCXNsaml0X3NpIHNyYzIsIHNsaml0X3N3IHNyYzJ3KQorc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9zMzIgc2xqaXRfZW1pdF9mb3AxX2NtcChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgb3AsCisJc2xqaXRfczMyIHNyYzEsIHNsaml0X3N3IHNyYzF3LAorCXNsaml0X3MzMiBzcmMyLCBzbGppdF9zdyBzcmMydykKIHsKIAljb21waWxlci0+ZmxhZ3Nfc2F2ZWQgPSAwOwogCWlmICghRkFTVF9JU19SRUcoc3JjMSkpIHsKLQkJRkFJTF9JRihlbWl0X3NzZTJfbG9hZChjb21waWxlciwgb3AgJiBTTEpJVF9TSU5HTEVfT1AsIFRNUF9GUkVHLCBzcmMxLCBzcmMxdykpOworCQlGQUlMX0lGKGVtaXRfc3NlMl9sb2FkKGNvbXBpbGVyLCBvcCAmIFNMSklUX0YzMl9PUCwgVE1QX0ZSRUcsIHNyYzEsIHNyYzF3KSk7CiAJCXNyYzEgPSBUTVBfRlJFRzsKIAl9Ci0JcmV0dXJuIGVtaXRfc3NlMl9sb2dpYyhjb21waWxlciwgVUNPTUlTRF94X3htLCAhKG9wICYgU0xKSVRfU0lOR0xFX09QKSwgc3JjMSwgc3JjMiwgc3JjMncpOworCXJldHVybiBlbWl0X3NzZTJfbG9naWMoY29tcGlsZXIsIFVDT01JU0RfeF94bSwgIShvcCAmIFNMSklUX0YzMl9PUCksIHNyYzEsIHNyYzIsIHNyYzJ3KTsKIH0KIAotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfZm9wMShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwKLQlzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsCi0Jc2xqaXRfc2kgc3JjLCBzbGppdF9zdyBzcmN3KQorU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3MzMiBzbGppdF9lbWl0X2ZvcDEoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIG9wLAorCXNsaml0X3MzMiBkc3QsIHNsaml0X3N3IGRzdHcsCisJc2xqaXRfczMyIHNyYywgc2xqaXRfc3cgc3JjdykKIHsKLQlzbGppdF9zaSBkc3RfcjsKKwlzbGppdF9zMzIgZHN0X3I7CiAKICNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2XzY0ICYmIFNMSklUX0NPTkZJR19YODZfNjQpCiAJY29tcGlsZXItPm1vZGUzMiA9IDE7CkBAIC0yNDA0LDY1ICsyNDI3LDY1IEBACiAJQ0hFQ0tfRVJST1IoKTsKIAlTRUxFQ1RfRk9QMV9PUEVSQVRJT05fV0lUSF9DSEVDS1MoY29tcGlsZXIsIG9wLCBkc3QsIGRzdHcsIHNyYywgc3Jjdyk7CiAKLQlpZiAoR0VUX09QQ09ERShvcCkgPT0gU0xKSVRfRE1PVikgeworCWlmIChHRVRfT1BDT0RFKG9wKSA9PSBTTEpJVF9NT1ZfRjY0KSB7CiAJCWlmIChGQVNUX0lTX1JFRyhkc3QpKQotCQkJcmV0dXJuIGVtaXRfc3NlMl9sb2FkKGNvbXBpbGVyLCBvcCAmIFNMSklUX1NJTkdMRV9PUCwgZHN0LCBzcmMsIHNyY3cpOworCQkJcmV0dXJuIGVtaXRfc3NlMl9sb2FkKGNvbXBpbGVyLCBvcCAmIFNMSklUX0YzMl9PUCwgZHN0LCBzcmMsIHNyY3cpOwogCQlpZiAoRkFTVF9JU19SRUcoc3JjKSkKLQkJCXJldHVybiBlbWl0X3NzZTJfc3RvcmUoY29tcGlsZXIsIG9wICYgU0xKSVRfU0lOR0xFX09QLCBkc3QsIGRzdHcsIHNyYyk7Ci0JCUZBSUxfSUYoZW1pdF9zc2UyX2xvYWQoY29tcGlsZXIsIG9wICYgU0xKSVRfU0lOR0xFX09QLCBUTVBfRlJFRywgc3JjLCBzcmN3KSk7Ci0JCXJldHVybiBlbWl0X3NzZTJfc3RvcmUoY29tcGlsZXIsIG9wICYgU0xKSVRfU0lOR0xFX09QLCBkc3QsIGRzdHcsIFRNUF9GUkVHKTsKKwkJCXJldHVybiBlbWl0X3NzZTJfc3RvcmUoY29tcGlsZXIsIG9wICYgU0xKSVRfRjMyX09QLCBkc3QsIGRzdHcsIHNyYyk7CisJCUZBSUxfSUYoZW1pdF9zc2UyX2xvYWQoY29tcGlsZXIsIG9wICYgU0xKSVRfRjMyX09QLCBUTVBfRlJFRywgc3JjLCBzcmN3KSk7CisJCXJldHVybiBlbWl0X3NzZTJfc3RvcmUoY29tcGlsZXIsIG9wICYgU0xKSVRfRjMyX09QLCBkc3QsIGRzdHcsIFRNUF9GUkVHKTsKIAl9CiAKLQlpZiAoR0VUX09QQ09ERShvcCkgPT0gU0xKSVRfQ09OVkRfRlJPTVMpIHsKKwlpZiAoR0VUX09QQ09ERShvcCkgPT0gU0xKSVRfQ09OVl9GNjRfRlJPTV9GMzIpIHsKIAkJZHN0X3IgPSBGQVNUX0lTX1JFRyhkc3QpID8gZHN0IDogVE1QX0ZSRUc7CiAJCWlmIChGQVNUX0lTX1JFRyhzcmMpKSB7CiAJCQkvKiBXZSBvdmVyd3JpdGUgdGhlIGhpZ2ggYml0cyBvZiBzb3VyY2UuIEZyb20gU0xKSVQgcG9pbnQgb2YgdmlldywKIAkJCSAgIHRoaXMgaXMgbm90IGFuIGlzc3VlLgogCQkJICAgTm90ZTogSW4gU1NFMywgd2UgY291bGQgYWxzbyB1c2UgTU9WRERVUCBhbmQgTU9WU0xEVVAuICovCi0JCQlGQUlMX0lGKGVtaXRfc3NlMl9sb2dpYyhjb21waWxlciwgVU5QQ0tMUERfeF94bSwgb3AgJiBTTEpJVF9TSU5HTEVfT1AsIHNyYywgc3JjLCAwKSk7CisJCQlGQUlMX0lGKGVtaXRfc3NlMl9sb2dpYyhjb21waWxlciwgVU5QQ0tMUERfeF94bSwgb3AgJiBTTEpJVF9GMzJfT1AsIHNyYywgc3JjLCAwKSk7CiAJCX0KIAkJZWxzZSB7Ci0JCQlGQUlMX0lGKGVtaXRfc3NlMl9sb2FkKGNvbXBpbGVyLCAhKG9wICYgU0xKSVRfU0lOR0xFX09QKSwgVE1QX0ZSRUcsIHNyYywgc3JjdykpOworCQkJRkFJTF9JRihlbWl0X3NzZTJfbG9hZChjb21waWxlciwgIShvcCAmIFNMSklUX0YzMl9PUCksIFRNUF9GUkVHLCBzcmMsIHNyY3cpKTsKIAkJCXNyYyA9IFRNUF9GUkVHOwogCQl9CiAKLQkJRkFJTF9JRihlbWl0X3NzZTJfbG9naWMoY29tcGlsZXIsIENWVFBEMlBTX3hfeG0sIG9wICYgU0xKSVRfU0lOR0xFX09QLCBkc3Rfciwgc3JjLCAwKSk7CisJCUZBSUxfSUYoZW1pdF9zc2UyX2xvZ2ljKGNvbXBpbGVyLCBDVlRQRDJQU194X3htLCBvcCAmIFNMSklUX0YzMl9PUCwgZHN0X3IsIHNyYywgMCkpOwogCQlpZiAoZHN0X3IgPT0gVE1QX0ZSRUcpCi0JCQlyZXR1cm4gZW1pdF9zc2UyX3N0b3JlKGNvbXBpbGVyLCBvcCAmIFNMSklUX1NJTkdMRV9PUCwgZHN0LCBkc3R3LCBUTVBfRlJFRyk7CisJCQlyZXR1cm4gZW1pdF9zc2UyX3N0b3JlKGNvbXBpbGVyLCBvcCAmIFNMSklUX0YzMl9PUCwgZHN0LCBkc3R3LCBUTVBfRlJFRyk7CiAJCXJldHVybiBTTEpJVF9TVUNDRVNTOwogCX0KIAogCWlmIChTTE9XX0lTX1JFRyhkc3QpKSB7CiAJCWRzdF9yID0gZHN0OwogCQlpZiAoZHN0ICE9IHNyYykKLQkJCUZBSUxfSUYoZW1pdF9zc2UyX2xvYWQoY29tcGlsZXIsIG9wICYgU0xKSVRfU0lOR0xFX09QLCBkc3Rfciwgc3JjLCBzcmN3KSk7CisJCQlGQUlMX0lGKGVtaXRfc3NlMl9sb2FkKGNvbXBpbGVyLCBvcCAmIFNMSklUX0YzMl9PUCwgZHN0X3IsIHNyYywgc3JjdykpOwogCX0KIAllbHNlIHsKIAkJZHN0X3IgPSBUTVBfRlJFRzsKLQkJRkFJTF9JRihlbWl0X3NzZTJfbG9hZChjb21waWxlciwgb3AgJiBTTEpJVF9TSU5HTEVfT1AsIGRzdF9yLCBzcmMsIHNyY3cpKTsKKwkJRkFJTF9JRihlbWl0X3NzZTJfbG9hZChjb21waWxlciwgb3AgJiBTTEpJVF9GMzJfT1AsIGRzdF9yLCBzcmMsIHNyY3cpKTsKIAl9CiAKIAlzd2l0Y2ggKEdFVF9PUENPREUob3ApKSB7Ci0JY2FzZSBTTEpJVF9ETkVHOgotCQlGQUlMX0lGKGVtaXRfc3NlMl9sb2dpYyhjb21waWxlciwgWE9SUERfeF94bSwgMSwgZHN0X3IsIFNMSklUX01FTTAoKSwgKHNsaml0X3N3KShvcCAmIFNMSklUX1NJTkdMRV9PUCA/IHNzZTJfYnVmZmVyIDogc3NlMl9idWZmZXIgKyA4KSkpOworCWNhc2UgU0xKSVRfTkVHX0Y2NDoKKwkJRkFJTF9JRihlbWl0X3NzZTJfbG9naWMoY29tcGlsZXIsIFhPUlBEX3hfeG0sIDEsIGRzdF9yLCBTTEpJVF9NRU0wKCksIChzbGppdF9zdykob3AgJiBTTEpJVF9GMzJfT1AgPyBzc2UyX2J1ZmZlciA6IHNzZTJfYnVmZmVyICsgOCkpKTsKIAkJYnJlYWs7CiAKLQljYXNlIFNMSklUX0RBQlM6Ci0JCUZBSUxfSUYoZW1pdF9zc2UyX2xvZ2ljKGNvbXBpbGVyLCBBTkRQRF94X3htLCAxLCBkc3RfciwgU0xKSVRfTUVNMCgpLCAoc2xqaXRfc3cpKG9wICYgU0xKSVRfU0lOR0xFX09QID8gc3NlMl9idWZmZXIgKyA0IDogc3NlMl9idWZmZXIgKyAxMikpKTsKKwljYXNlIFNMSklUX0FCU19GNjQ6CisJCUZBSUxfSUYoZW1pdF9zc2UyX2xvZ2ljKGNvbXBpbGVyLCBBTkRQRF94X3htLCAxLCBkc3RfciwgU0xKSVRfTUVNMCgpLCAoc2xqaXRfc3cpKG9wICYgU0xKSVRfRjMyX09QID8gc3NlMl9idWZmZXIgKyA0IDogc3NlMl9idWZmZXIgKyAxMikpKTsKIAkJYnJlYWs7CiAJfQogCiAJaWYgKGRzdF9yID09IFRNUF9GUkVHKQotCQlyZXR1cm4gZW1pdF9zc2UyX3N0b3JlKGNvbXBpbGVyLCBvcCAmIFNMSklUX1NJTkdMRV9PUCwgZHN0LCBkc3R3LCBUTVBfRlJFRyk7CisJCXJldHVybiBlbWl0X3NzZTJfc3RvcmUoY29tcGlsZXIsIG9wICYgU0xKSVRfRjMyX09QLCBkc3QsIGRzdHcsIFRNUF9GUkVHKTsKIAlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKIH0KIAotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfZm9wMihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwKLQlzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsCi0Jc2xqaXRfc2kgc3JjMSwgc2xqaXRfc3cgc3JjMXcsCi0Jc2xqaXRfc2kgc3JjMiwgc2xqaXRfc3cgc3JjMncpCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfczMyIHNsaml0X2VtaXRfZm9wMihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgb3AsCisJc2xqaXRfczMyIGRzdCwgc2xqaXRfc3cgZHN0dywKKwlzbGppdF9zMzIgc3JjMSwgc2xqaXRfc3cgc3JjMXcsCisJc2xqaXRfczMyIHNyYzIsIHNsaml0X3N3IHNyYzJ3KQogewotCXNsaml0X3NpIGRzdF9yOworCXNsaml0X3MzMiBkc3RfcjsKIAogCUNIRUNLX0VSUk9SKCk7CiAJQ0hFQ0soY2hlY2tfc2xqaXRfZW1pdF9mb3AyKGNvbXBpbGVyLCBvcCwgZHN0LCBkc3R3LCBzcmMxLCBzcmMxdywgc3JjMiwgc3JjMncpKTsKQEAgLTI0NzgsNDMgKzI1MDEsNDMgQEAKIAkJZHN0X3IgPSBkc3Q7CiAJCWlmIChkc3QgPT0gc3JjMSkKIAkJCTsgLyogRG8gbm90aGluZyBoZXJlLiAqLwotCQllbHNlIGlmIChkc3QgPT0gc3JjMiAmJiAob3AgPT0gU0xKSVRfREFERCB8fCBvcCA9PSBTTEpJVF9ETVVMKSkgeworCQllbHNlIGlmIChkc3QgPT0gc3JjMiAmJiAob3AgPT0gU0xKSVRfQUREX0Y2NCB8fCBvcCA9PSBTTEpJVF9NVUxfRjY0KSkgewogCQkJLyogU3dhcCBhcmd1bWVudHMuICovCiAJCQlzcmMyID0gc3JjMTsKIAkJCXNyYzJ3ID0gc3JjMXc7CiAJCX0KIAkJZWxzZSBpZiAoZHN0ICE9IHNyYzIpCi0JCQlGQUlMX0lGKGVtaXRfc3NlMl9sb2FkKGNvbXBpbGVyLCBvcCAmIFNMSklUX1NJTkdMRV9PUCwgZHN0X3IsIHNyYzEsIHNyYzF3KSk7CisJCQlGQUlMX0lGKGVtaXRfc3NlMl9sb2FkKGNvbXBpbGVyLCBvcCAmIFNMSklUX0YzMl9PUCwgZHN0X3IsIHNyYzEsIHNyYzF3KSk7CiAJCWVsc2UgewogCQkJZHN0X3IgPSBUTVBfRlJFRzsKLQkJCUZBSUxfSUYoZW1pdF9zc2UyX2xvYWQoY29tcGlsZXIsIG9wICYgU0xKSVRfU0lOR0xFX09QLCBUTVBfRlJFRywgc3JjMSwgc3JjMXcpKTsKKwkJCUZBSUxfSUYoZW1pdF9zc2UyX2xvYWQoY29tcGlsZXIsIG9wICYgU0xKSVRfRjMyX09QLCBUTVBfRlJFRywgc3JjMSwgc3JjMXcpKTsKIAkJfQogCX0KIAllbHNlIHsKIAkJZHN0X3IgPSBUTVBfRlJFRzsKLQkJRkFJTF9JRihlbWl0X3NzZTJfbG9hZChjb21waWxlciwgb3AgJiBTTEpJVF9TSU5HTEVfT1AsIFRNUF9GUkVHLCBzcmMxLCBzcmMxdykpOworCQlGQUlMX0lGKGVtaXRfc3NlMl9sb2FkKGNvbXBpbGVyLCBvcCAmIFNMSklUX0YzMl9PUCwgVE1QX0ZSRUcsIHNyYzEsIHNyYzF3KSk7CiAJfQogCiAJc3dpdGNoIChHRVRfT1BDT0RFKG9wKSkgewotCWNhc2UgU0xKSVRfREFERDoKLQkJRkFJTF9JRihlbWl0X3NzZTIoY29tcGlsZXIsIEFERFNEX3hfeG0sIG9wICYgU0xKSVRfU0lOR0xFX09QLCBkc3Rfciwgc3JjMiwgc3JjMncpKTsKKwljYXNlIFNMSklUX0FERF9GNjQ6CisJCUZBSUxfSUYoZW1pdF9zc2UyKGNvbXBpbGVyLCBBRERTRF94X3htLCBvcCAmIFNMSklUX0YzMl9PUCwgZHN0X3IsIHNyYzIsIHNyYzJ3KSk7CiAJCWJyZWFrOwogCi0JY2FzZSBTTEpJVF9EU1VCOgotCQlGQUlMX0lGKGVtaXRfc3NlMihjb21waWxlciwgU1VCU0RfeF94bSwgb3AgJiBTTEpJVF9TSU5HTEVfT1AsIGRzdF9yLCBzcmMyLCBzcmMydykpOworCWNhc2UgU0xKSVRfU1VCX0Y2NDoKKwkJRkFJTF9JRihlbWl0X3NzZTIoY29tcGlsZXIsIFNVQlNEX3hfeG0sIG9wICYgU0xKSVRfRjMyX09QLCBkc3Rfciwgc3JjMiwgc3JjMncpKTsKIAkJYnJlYWs7CiAKLQljYXNlIFNMSklUX0RNVUw6Ci0JCUZBSUxfSUYoZW1pdF9zc2UyKGNvbXBpbGVyLCBNVUxTRF94X3htLCBvcCAmIFNMSklUX1NJTkdMRV9PUCwgZHN0X3IsIHNyYzIsIHNyYzJ3KSk7CisJY2FzZSBTTEpJVF9NVUxfRjY0OgorCQlGQUlMX0lGKGVtaXRfc3NlMihjb21waWxlciwgTVVMU0RfeF94bSwgb3AgJiBTTEpJVF9GMzJfT1AsIGRzdF9yLCBzcmMyLCBzcmMydykpOwogCQlicmVhazsKIAotCWNhc2UgU0xKSVRfRERJVjoKLQkJRkFJTF9JRihlbWl0X3NzZTIoY29tcGlsZXIsIERJVlNEX3hfeG0sIG9wICYgU0xKSVRfU0lOR0xFX09QLCBkc3Rfciwgc3JjMiwgc3JjMncpKTsKKwljYXNlIFNMSklUX0RJVl9GNjQ6CisJCUZBSUxfSUYoZW1pdF9zc2UyKGNvbXBpbGVyLCBESVZTRF94X3htLCBvcCAmIFNMSklUX0YzMl9PUCwgZHN0X3IsIHNyYzIsIHNyYzJ3KSk7CiAJCWJyZWFrOwogCX0KIAogCWlmIChkc3RfciA9PSBUTVBfRlJFRykKLQkJcmV0dXJuIGVtaXRfc3NlMl9zdG9yZShjb21waWxlciwgb3AgJiBTTEpJVF9TSU5HTEVfT1AsIGRzdCwgZHN0dywgVE1QX0ZSRUcpOworCQlyZXR1cm4gZW1pdF9zc2UyX3N0b3JlKGNvbXBpbGVyLCBvcCAmIFNMSklUX0YzMl9PUCwgZHN0LCBkc3R3LCBUTVBfRlJFRyk7CiAJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CiB9CiAKQEAgLTI1MjQsNyArMjU0Nyw3IEBACiAKIFNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzdHJ1Y3Qgc2xqaXRfbGFiZWwqIHNsaml0X2VtaXRfbGFiZWwoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlcikKIHsKLQlzbGppdF91YiAqaW5zdDsKKwlzbGppdF91OCAqaW5zdDsKIAlzdHJ1Y3Qgc2xqaXRfbGFiZWwgKmxhYmVsOwogCiAJQ0hFQ0tfRVJST1JfUFRSKCk7CkBAIC0yNTQyLDcgKzI1NjUsNyBAQAogCVBUUl9GQUlMX0lGKCFsYWJlbCk7CiAJc2V0X2xhYmVsKGxhYmVsLCBjb21waWxlcik7CiAKLQlpbnN0ID0gKHNsaml0X3ViKillbnN1cmVfYnVmKGNvbXBpbGVyLCAyKTsKKwlpbnN0ID0gKHNsaml0X3U4KillbnN1cmVfYnVmKGNvbXBpbGVyLCAyKTsKIAlQVFJfRkFJTF9JRighaW5zdCk7CiAKIAkqaW5zdCsrID0gMDsKQEAgLTI1NTEsOSArMjU3NCw5IEBACiAJcmV0dXJuIGxhYmVsOwogfQogCi1TTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc3RydWN0IHNsaml0X2p1bXAqIHNsaml0X2VtaXRfanVtcChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSB0eXBlKQorU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHN0cnVjdCBzbGppdF9qdW1wKiBzbGppdF9lbWl0X2p1bXAoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIHR5cGUpCiB7Ci0Jc2xqaXRfdWIgKmluc3Q7CisJc2xqaXRfdTggKmluc3Q7CiAJc3RydWN0IHNsaml0X2p1bXAgKmp1bXA7CiAKIAlDSEVDS19FUlJPUl9QVFIoKTsKQEAgLTI1ODAsNyArMjYwMyw3IEBACiAJY29tcGlsZXItPnNpemUgKz0gKHR5cGUgPj0gU0xKSVRfSlVNUCkgPyAoMTAgKyAzKSA6ICgyICsgMTAgKyAzKTsKICNlbmRpZgogCi0JaW5zdCA9IChzbGppdF91YiopZW5zdXJlX2J1Zihjb21waWxlciwgMik7CisJaW5zdCA9IChzbGppdF91OCopZW5zdXJlX2J1Zihjb21waWxlciwgMik7CiAJUFRSX0ZBSUxfSUZfTlVMTChpbnN0KTsKIAogCSppbnN0KysgPSAwOwpAQCAtMjU4OCw5ICsyNjExLDkgQEAKIAlyZXR1cm4ganVtcDsKIH0KIAotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfaWp1bXAoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgdHlwZSwgc2xqaXRfc2kgc3JjLCBzbGppdF9zdyBzcmN3KQorU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3MzMiBzbGppdF9lbWl0X2lqdW1wKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiB0eXBlLCBzbGppdF9zMzIgc3JjLCBzbGppdF9zdyBzcmN3KQogewotCXNsaml0X3ViICppbnN0OworCXNsaml0X3U4ICppbnN0OwogCXN0cnVjdCBzbGppdF9qdW1wICpqdW1wOwogCiAJQ0hFQ0tfRVJST1IoKTsKQEAgLTI2MzgsNyArMjY2MSw3IEBACiAJCWNvbXBpbGVyLT5zaXplICs9IDEwICsgMzsKICNlbmRpZgogCi0JCWluc3QgPSAoc2xqaXRfdWIqKWVuc3VyZV9idWYoY29tcGlsZXIsIDIpOworCQlpbnN0ID0gKHNsaml0X3U4KillbnN1cmVfYnVmKGNvbXBpbGVyLCAyKTsKIAkJRkFJTF9JRl9OVUxMKGluc3QpOwogCiAJCSppbnN0KysgPSAwOwpAQCAtMjY1NywxOCArMjY4MCwxOCBAQAogCXJldHVybiBTTEpJVF9TVUNDRVNTOwogfQogCi1TTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9vcF9mbGFncyhzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwKLQlzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsCi0Jc2xqaXRfc2kgc3JjLCBzbGppdF9zdyBzcmN3LAotCXNsaml0X3NpIHR5cGUpCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfczMyIHNsaml0X2VtaXRfb3BfZmxhZ3Moc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfczMyIG9wLAorCXNsaml0X3MzMiBkc3QsIHNsaml0X3N3IGRzdHcsCisJc2xqaXRfczMyIHNyYywgc2xqaXRfc3cgc3JjdywKKwlzbGppdF9zMzIgdHlwZSkKIHsKLQlzbGppdF91YiAqaW5zdDsKLQlzbGppdF91YiBjb25kX3NldCA9IDA7CisJc2xqaXRfdTggKmluc3Q7CisJc2xqaXRfdTggY29uZF9zZXQgPSAwOwogI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19YODZfNjQgJiYgU0xKSVRfQ09ORklHX1g4Nl82NCkKLQlzbGppdF9zaSByZWc7CisJc2xqaXRfczMyIHJlZzsKICNlbHNlCiAJLyogQ0hFQ0tfRVhUUkFfUkVHUyBtaWdoIG92ZXJ3cml0ZSB0aGVzZSB2YWx1ZXMuICovCi0Jc2xqaXRfc2kgZHN0X3NhdmUgPSBkc3Q7CisJc2xqaXRfczMyIGRzdF9zYXZlID0gZHN0OwogCXNsaml0X3N3IGRzdHdfc2F2ZSA9IGRzdHc7CiAjZW5kaWYKIApAQCAtMjY5MCw3ICsyNzEzLDcgQEAKIAogI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19YODZfNjQgJiYgU0xKSVRfQ09ORklHX1g4Nl82NCkKIAlpZiAoR0VUX09QQ09ERShvcCkgPT0gU0xKSVRfT1IgJiYgIUdFVF9BTExfRkxBR1Mob3ApICYmIEZBU1RfSVNfUkVHKGRzdCkgJiYgZHN0ID09IHNyYykgewotCQlpbnN0ID0gKHNsaml0X3ViKillbnN1cmVfYnVmKGNvbXBpbGVyLCAxICsgNCArIDMpOworCQlpbnN0ID0gKHNsaml0X3U4KillbnN1cmVfYnVmKGNvbXBpbGVyLCAxICsgNCArIDMpOwogCQlGQUlMX0lGKCFpbnN0KTsKIAkJSU5DX1NJWkUoNCArIDMpOwogCQkvKiBTZXQgbG93IHJlZ2lzdGVyIHRvIGNvbmRpdGlvbmFsIGZsYWcuICovCkBAIC0yNzA2LDcgKzI3MjksNyBAQAogCiAJcmVnID0gKG9wID09IFNMSklUX01PViAmJiBGQVNUX0lTX1JFRyhkc3QpKSA/IGRzdCA6IFRNUF9SRUcxOwogCi0JaW5zdCA9IChzbGppdF91YiopZW5zdXJlX2J1Zihjb21waWxlciwgMSArIDQgKyA0KTsKKwlpbnN0ID0gKHNsaml0X3U4KillbnN1cmVfYnVmKGNvbXBpbGVyLCAxICsgNCArIDQpOwogCUZBSUxfSUYoIWluc3QpOwogCUlOQ19TSVpFKDQgKyA0KTsKIAkvKiBTZXQgbG93IHJlZ2lzdGVyIHRvIGNvbmRpdGlvbmFsIGZsYWcuICovCkBAIC0yNzM1LDcgKzI3NTgsNyBAQAogCWlmIChHRVRfT1BDT0RFKG9wKSA8IFNMSklUX0FERCAmJiBGQVNUX0lTX1JFRyhkc3QpKSB7CiAJCWlmIChyZWdfbWFwW2RzdF0gPD0gNCkgewogCQkJLyogTG93IGJ5dGUgaXMgYWNjZXNzaWJsZS4gKi8KLQkJCWluc3QgPSAoc2xqaXRfdWIqKWVuc3VyZV9idWYoY29tcGlsZXIsIDEgKyAzICsgMyk7CisJCQlpbnN0ID0gKHNsaml0X3U4KillbnN1cmVfYnVmKGNvbXBpbGVyLCAxICsgMyArIDMpOwogCQkJRkFJTF9JRighaW5zdCk7CiAJCQlJTkNfU0laRSgzICsgMyk7CiAJCQkvKiBTZXQgbG93IGJ5dGUgdG8gY29uZGl0aW9uYWwgZmxhZy4gKi8KQEAgLTI3NTgsNyArMjc4MSw3IEBACiAJCQkvKiBhIHhvciByZWcsIHJlZyBvcGVyYXRpb24gd291bGQgb3ZlcndyaXRlIHRoZSBmbGFncy4gKi8KIAkJCUVNSVRfTU9WKGNvbXBpbGVyLCBkc3QsIDAsIFNMSklUX0lNTSwgMCk7CiAKLQkJCWluc3QgPSAoc2xqaXRfdWIqKWVuc3VyZV9idWYoY29tcGlsZXIsIDEgKyAzKTsKKwkJCWluc3QgPSAoc2xqaXRfdTgqKWVuc3VyZV9idWYoY29tcGlsZXIsIDEgKyAzKTsKIAkJCUZBSUxfSUYoIWluc3QpOwogCQkJSU5DX1NJWkUoMyk7CiAKQEAgLTI3NjksNyArMjc5Miw3IEBACiAJCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKIAkJfQogCi0JCWluc3QgPSAoc2xqaXRfdWIqKWVuc3VyZV9idWYoY29tcGlsZXIsIDEgKyAxICsgMyArIDMgKyAxKTsKKwkJaW5zdCA9IChzbGppdF91OCopZW5zdXJlX2J1Zihjb21waWxlciwgMSArIDEgKyAzICsgMyArIDEpOwogCQlGQUlMX0lGKCFpbnN0KTsKIAkJSU5DX1NJWkUoMSArIDMgKyAzICsgMSk7CiAJCSppbnN0KysgPSBYQ0hHX0VBWF9yICsgcmVnX21hcFtUTVBfUkVHMV07CkBAIC0yNzg4LDcgKzI4MTEsNyBAQAogCWlmIChHRVRfT1BDT0RFKG9wKSA9PSBTTEpJVF9PUiAmJiAhR0VUX0FMTF9GTEFHUyhvcCkgJiYgRkFTVF9JU19SRUcoZHN0KSAmJiBkc3QgPT0gc3JjICYmIHJlZ19tYXBbZHN0XSA8PSA0KSB7CiAJCVNMSklUX0NPTVBJTEVfQVNTRVJUKHJlZ19tYXBbU0xKSVRfUjBdID09IDAsIHNjcmF0Y2hfcmVnMV9tdXN0X2JlX2VheCk7CiAJCWlmIChkc3QgIT0gU0xKSVRfUjApIHsKLQkJCWluc3QgPSAoc2xqaXRfdWIqKWVuc3VyZV9idWYoY29tcGlsZXIsIDEgKyAxICsgMyArIDIgKyAxKTsKKwkJCWluc3QgPSAoc2xqaXRfdTgqKWVuc3VyZV9idWYoY29tcGlsZXIsIDEgKyAxICsgMyArIDIgKyAxKTsKIAkJCUZBSUxfSUYoIWluc3QpOwogCQkJSU5DX1NJWkUoMSArIDMgKyAyICsgMSk7CiAJCQkvKiBTZXQgbG93IHJlZ2lzdGVyIHRvIGNvbmRpdGlvbmFsIGZsYWcuICovCkBAIC0yODAxLDcgKzI4MjQsNyBAQAogCQkJKmluc3QrKyA9IFhDSEdfRUFYX3IgKyByZWdfbWFwW1RNUF9SRUcxXTsKIAkJfQogCQllbHNlIHsKLQkJCWluc3QgPSAoc2xqaXRfdWIqKWVuc3VyZV9idWYoY29tcGlsZXIsIDEgKyAyICsgMyArIDIgKyAyKTsKKwkJCWluc3QgPSAoc2xqaXRfdTgqKWVuc3VyZV9idWYoY29tcGlsZXIsIDEgKyAyICsgMyArIDIgKyAyKTsKIAkJCUZBSUxfSUYoIWluc3QpOwogCQkJSU5DX1NJWkUoMiArIDMgKyAyICsgMik7CiAJCQkvKiBTZXQgbG93IHJlZ2lzdGVyIHRvIGNvbmRpdGlvbmFsIGZsYWcuICovCkBAIC0yODE5LDcgKzI4NDIsNyBAQAogCX0KIAogCS8qIFNldCBUTVBfUkVHMSB0byB0aGUgYml0LiAqLwotCWluc3QgPSAoc2xqaXRfdWIqKWVuc3VyZV9idWYoY29tcGlsZXIsIDEgKyAxICsgMyArIDMgKyAxKTsKKwlpbnN0ID0gKHNsaml0X3U4KillbnN1cmVfYnVmKGNvbXBpbGVyLCAxICsgMSArIDMgKyAzICsgMSk7CiAJRkFJTF9JRighaW5zdCk7CiAJSU5DX1NJWkUoMSArIDMgKyAzICsgMSk7CiAJKmluc3QrKyA9IFhDSEdfRUFYX3IgKyByZWdfbWFwW1RNUF9SRUcxXTsKQEAgLTI4NDUsNyArMjg2OCw3IEBACiAjZW5kaWYgLyogU0xKSVRfQ09ORklHX1g4Nl82NCAqLwogfQogCi1TTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZ2V0X2xvY2FsX2Jhc2Uoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3LCBzbGppdF9zdyBvZmZzZXQpCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfczMyIHNsaml0X2dldF9sb2NhbF9iYXNlKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3MzMiBkc3QsIHNsaml0X3N3IGRzdHcsIHNsaml0X3N3IG9mZnNldCkKIHsKIAlDSEVDS19FUlJPUigpOwogCUNIRUNLKGNoZWNrX3Nsaml0X2dldF9sb2NhbF9iYXNlKGNvbXBpbGVyLCBkc3QsIGRzdHcsIG9mZnNldCkpOwpAQCAtMjg3NiwxMiArMjg5OSwxMiBAQAogCXJldHVybiBlbWl0X21vdihjb21waWxlciwgZHN0LCBkc3R3LCBTTEpJVF9TUCwgMCk7CiB9CiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzdHJ1Y3Qgc2xqaXRfY29uc3QqIHNsaml0X2VtaXRfY29uc3Qoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3LCBzbGppdF9zdyBpbml0X3ZhbHVlKQorU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHN0cnVjdCBzbGppdF9jb25zdCogc2xqaXRfZW1pdF9jb25zdChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zMzIgZHN0LCBzbGppdF9zdyBkc3R3LCBzbGppdF9zdyBpbml0X3ZhbHVlKQogewotCXNsaml0X3ViICppbnN0OworCXNsaml0X3U4ICppbnN0OwogCXN0cnVjdCBzbGppdF9jb25zdCAqY29uc3RfOwogI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19YODZfNjQgJiYgU0xKSVRfQ09ORklHX1g4Nl82NCkKLQlzbGppdF9zaSByZWc7CisJc2xqaXRfczMyIHJlZzsKICNlbmRpZgogCiAJQ0hFQ0tfRVJST1JfUFRSKCk7CkBAIC0yOTA4LDcgKzI5MzEsNyBAQAogCQlyZXR1cm4gTlVMTDsKICNlbmRpZgogCi0JaW5zdCA9IChzbGppdF91YiopZW5zdXJlX2J1Zihjb21waWxlciwgMik7CisJaW5zdCA9IChzbGppdF91OCopZW5zdXJlX2J1Zihjb21waWxlciwgMik7CiAJUFRSX0ZBSUxfSUYoIWluc3QpOwogCiAJKmluc3QrKyA9IDA7CkBAIC0yOTI2LDE4ICsyOTQ5LDE4IEBACiBTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgdm9pZCBzbGppdF9zZXRfanVtcF9hZGRyKHNsaml0X3V3IGFkZHIsIHNsaml0X3V3IG5ld19hZGRyKQogewogI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19YODZfMzIgJiYgU0xKSVRfQ09ORklHX1g4Nl8zMikKLQkqKHNsaml0X3N3KilhZGRyID0gbmV3X2FkZHIgLSAoYWRkciArIDQpOworCXNsaml0X3VuYWxpZ25lZF9zdG9yZV9zdygodm9pZCopYWRkciwgbmV3X2FkZHIgLSAoYWRkciArIDQpKTsKICNlbHNlCi0JKihzbGppdF91dyopYWRkciA9IG5ld19hZGRyOworCXNsaml0X3VuYWxpZ25lZF9zdG9yZV9zdygodm9pZCopYWRkciwgKHNsaml0X3N3KSBuZXdfYWRkcik7CiAjZW5kaWYKIH0KIAogU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHZvaWQgc2xqaXRfc2V0X2NvbnN0KHNsaml0X3V3IGFkZHIsIHNsaml0X3N3IG5ld19jb25zdGFudCkKIHsKLQkqKHNsaml0X3N3KilhZGRyID0gbmV3X2NvbnN0YW50OworCXNsaml0X3VuYWxpZ25lZF9zdG9yZV9zdygodm9pZCopYWRkciwgbmV3X2NvbnN0YW50KTsKIH0KIAotU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X3g4Nl9pc19zc2UyX2F2YWlsYWJsZSh2b2lkKQorU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3MzMiBzbGppdF94ODZfaXNfc3NlMl9hdmFpbGFibGUodm9pZCkKIHsKICNpZiAoZGVmaW5lZCBTTEpJVF9ERVRFQ1RfU1NFMiAmJiBTTEpJVF9ERVRFQ1RfU1NFMikKIAlpZiAoY3B1X2hhc19zc2UyID09IC0xKQpAQCAtMjk0OCwzNCArMjk3MSwzNCBAQAogI2VuZGlmCiB9CiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF94ODZfaXNfY21vdl9hdmFpbGFibGUodm9pZCkKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zMzIgc2xqaXRfeDg2X2lzX2Ntb3ZfYXZhaWxhYmxlKHZvaWQpCiB7CiAJaWYgKGNwdV9oYXNfY21vdiA9PSAtMSkKIAkJZ2V0X2NwdV9mZWF0dXJlcygpOwogCXJldHVybiBjcHVfaGFzX2Ntb3Y7CiB9CiAKLVNMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF94ODZfZW1pdF9jbW92KHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsCi0Jc2xqaXRfc2kgdHlwZSwKLQlzbGppdF9zaSBkc3RfcmVnLAotCXNsaml0X3NpIHNyYywgc2xqaXRfc3cgc3JjdykKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zMzIgc2xqaXRfeDg2X2VtaXRfY21vdihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLAorCXNsaml0X3MzMiB0eXBlLAorCXNsaml0X3MzMiBkc3RfcmVnLAorCXNsaml0X3MzMiBzcmMsIHNsaml0X3N3IHNyY3cpCiB7Ci0Jc2xqaXRfdWIqIGluc3Q7CisJc2xqaXRfdTgqIGluc3Q7CiAKIAlDSEVDS19FUlJPUigpOwogI2lmIChkZWZpbmVkIFNMSklUX0FSR1VNRU5UX0NIRUNLUyAmJiBTTEpJVF9BUkdVTUVOVF9DSEVDS1MpCiAJQ0hFQ0tfQVJHVU1FTlQoc2xqaXRfeDg2X2lzX2Ntb3ZfYXZhaWxhYmxlKCkpOwotCUNIRUNLX0FSR1VNRU5UKCEodHlwZSAmIH4oMHhmZiB8IFNMSklUX0lOVF9PUCkpKTsKLQlDSEVDS19BUkdVTUVOVCgodHlwZSAmIDB4ZmYpID49IFNMSklUX0VRVUFMICYmICh0eXBlICYgMHhmZikgPD0gU0xKSVRfRF9PUkRFUkVEKTsKLQlDSEVDS19BUkdVTUVOVChGVU5DVElPTl9DSEVDS19JU19SRUcoZHN0X3JlZyAmIH5TTEpJVF9JTlRfT1ApKTsKKwlDSEVDS19BUkdVTUVOVCghKHR5cGUgJiB+KDB4ZmYgfCBTTEpJVF9JMzJfT1ApKSk7CisJQ0hFQ0tfQVJHVU1FTlQoKHR5cGUgJiAweGZmKSA+PSBTTEpJVF9FUVVBTCAmJiAodHlwZSAmIDB4ZmYpIDw9IFNMSklUX09SREVSRURfRjY0KTsKKwlDSEVDS19BUkdVTUVOVChGVU5DVElPTl9DSEVDS19JU19SRUcoZHN0X3JlZyAmIH5TTEpJVF9JMzJfT1ApKTsKIAlGVU5DVElPTl9DSEVDS19TUkMoc3JjLCBzcmN3KTsKICNlbmRpZgogI2lmIChkZWZpbmVkIFNMSklUX1ZFUkJPU0UgJiYgU0xKSVRfVkVSQk9TRSkKIAlpZiAoU0xKSVRfVU5MSUtFTFkoISFjb21waWxlci0+dmVyYm9zZSkpIHsKIAkJZnByaW50Zihjb21waWxlci0+dmVyYm9zZSwgIiAgeDg2X2Ntb3YlcyAlcyVzLCAiLAotCQkJIShkc3RfcmVnICYgU0xKSVRfSU5UX09QKSA/ICIiIDogIi5pIiwKLQkJCUpVTVBfUFJFRklYKHR5cGUpLCBqdW1wX25hbWVzW3R5cGUgJiAweGZmXSk7Ci0JCXNsaml0X3ZlcmJvc2VfcmVnKGNvbXBpbGVyLCBkc3RfcmVnICYgflNMSklUX0lOVF9PUCk7CisJCQkhKGRzdF9yZWcgJiBTTEpJVF9JMzJfT1ApID8gIiIgOiAiLmkiLAorCQkJanVtcF9uYW1lc1t0eXBlICYgMHhmZl0sIEpVTVBfUE9TVEZJWCh0eXBlKSk7CisJCXNsaml0X3ZlcmJvc2VfcmVnKGNvbXBpbGVyLCBkc3RfcmVnICYgflNMSklUX0kzMl9PUCk7CiAJCWZwcmludGYoY29tcGlsZXItPnZlcmJvc2UsICIsICIpOwogCQlzbGppdF92ZXJib3NlX3BhcmFtKGNvbXBpbGVyLCBzcmMsIHNyY3cpOwogCQlmcHJpbnRmKGNvbXBpbGVyLT52ZXJib3NlLCAiXG4iKTsKQEAgLTI5ODYsOSArMzAwOSw5IEBACiAJQ0hFQ0tfRVhUUkFfUkVHUyhzcmMsIHNyY3csICh2b2lkKTApOwogCiAjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1g4Nl82NCAmJiBTTEpJVF9DT05GSUdfWDg2XzY0KQotCWNvbXBpbGVyLT5tb2RlMzIgPSBkc3RfcmVnICYgU0xKSVRfSU5UX09QOworCWNvbXBpbGVyLT5tb2RlMzIgPSBkc3RfcmVnICYgU0xKSVRfSTMyX09QOwogI2VuZGlmCi0JZHN0X3JlZyAmPSB+U0xKSVRfSU5UX09QOworCWRzdF9yZWcgJj0gflNMSklUX0kzMl9PUDsKIAogCWlmIChTTEpJVF9VTkxJS0VMWShzcmMgJiBTTEpJVF9JTU0pKSB7CiAJCUVNSVRfTU9WKGNvbXBpbGVyLCBUTVBfUkVHMSwgMCwgU0xKSVRfSU1NLCBzcmN3KTsKZGlmZiAtLWdpdCBhL2Rpc3QyL3NyYy9zbGppdC9zbGppdFV0aWxzLmMgYi9kaXN0Mi9zcmMvc2xqaXQvc2xqaXRVdGlscy5jCmluZGV4IDUyOTRiNWYuLmVjNWMzMjEgMTAwNjQ0Ci0tLSBhL2Rpc3QyL3NyYy9zbGppdC9zbGppdFV0aWxzLmMKKysrIGIvZGlzdDIvc3JjL3Nsaml0L3Nsaml0VXRpbHMuYwpAQCAtMTYzLDExICsxNjMsMTEgQEAKICNpbmNsdWRlIDxmY250bC5oPgogCiAvKiBTb21lIG9sZCBzeXN0ZW1zIGRvZXMgbm90IGhhdmUgTUFQX0FOT04uICovCi1zdGF0aWMgc2xqaXRfc2kgZGV2X3plcm8gPSAtMTsKK3N0YXRpYyBzbGppdF9zMzIgZGV2X3plcm8gPSAtMTsKIAogI2lmIChkZWZpbmVkIFNMSklUX1NJTkdMRV9USFJFQURFRCAmJiBTTEpJVF9TSU5HTEVfVEhSRUFERUQpCiAKLXN0YXRpYyBTTEpJVF9JTkxJTkUgc2xqaXRfc2kgb3Blbl9kZXZfemVybyh2b2lkKQorc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9zMzIgb3Blbl9kZXZfemVybyh2b2lkKQogewogCWRldl96ZXJvID0gb3BlbigiL2Rldi96ZXJvIiwgT19SRFdSKTsKIAlyZXR1cm4gZGV2X3plcm8gPCAwOwpAQCAtMTc5LDEwICsxNzksMTMgQEAKIAogc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBkZXZfemVyb19tdXRleCA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7CiAKLXN0YXRpYyBTTEpJVF9JTkxJTkUgc2xqaXRfc2kgb3Blbl9kZXZfemVybyh2b2lkKQorc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9zMzIgb3Blbl9kZXZfemVybyh2b2lkKQogewogCXB0aHJlYWRfbXV0ZXhfbG9jaygmZGV2X3plcm9fbXV0ZXgpOwotCWRldl96ZXJvID0gb3BlbigiL2Rldi96ZXJvIiwgT19SRFdSKTsKKwkvKiBUaGUgZGV2X3plcm8gbWlnaHQgYmUgaW5pdGlhbGl6ZWQgYnkgYW5vdGhlciB0aHJlYWQgZHVyaW5nIHRoZSB3YWl0aW5nLiAqLworCWlmIChkZXZfemVybyA8IDApIHsKKwkJZGV2X3plcm8gPSBvcGVuKCIvZGV2L3plcm8iLCBPX1JEV1IpOworCX0KIAlwdGhyZWFkX211dGV4X3VubG9jaygmZGV2X3plcm9fbXV0ZXgpOwogCXJldHVybiBkZXZfemVybyA8IDA7CiB9CmRpZmYgLS1naXQgYS9kaXN0Mi90ZXN0ZGF0YS9ncmVwaW5wdXQgYi9kaXN0Mi90ZXN0ZGF0YS9ncmVwaW5wdXQKaW5kZXggMGYwMGVkZC4uYjAxNjQzZCAxMDA2NDQKLS0tIGEvZGlzdDIvdGVzdGRhdGEvZ3JlcGlucHV0CisrKyBiL2Rpc3QyL3Rlc3RkYXRhL2dyZXBpbnB1dApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kaXN0Mi90ZXN0ZGF0YS9ncmVwb3V0cHV0IGIvZGlzdDIvdGVzdGRhdGEvZ3JlcG91dHB1dAppbmRleCAzZjY3MDRjLi45ZDQxODE3IDEwMDY0NAotLS0gYS9kaXN0Mi90ZXN0ZGF0YS9ncmVwb3V0cHV0CisrKyBiL2Rpc3QyL3Rlc3RkYXRhL2dyZXBvdXRwdXQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZGlzdDIvdGVzdGRhdGEvZ3JlcG91dHB1dEMgYi9kaXN0Mi90ZXN0ZGF0YS9ncmVwb3V0cHV0QwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTE2NjQ1Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvdGVzdGRhdGEvZ3JlcG91dHB1dEMKQEAgLTAsMCArMSw4IEBACitBcmcxOiBbVF0gW2hlIF0gWyBdIEFyZzI6IHxUfCAoKSAoKSAoMCkKK0FyZzE6IFtUXSBbaGlzXSBbc10gQXJnMjogfFR8ICgpICgpICgwKQorVGhlIHF1aWNrIGJyb3duCitUaGlzIHRpbWUgaXQganVtcHMgYW5kIGp1bXBzIGFuZCBqdW1wcy4KK0FyZzE6IFtxdV0gW3F1XQorQXJnMTogWyB0XSBbIHRdCitUaGUgcXVpY2sgYnJvd24KK1RoaXMgdGltZSBpdCBqdW1wcyBhbmQganVtcHMgYW5kIGp1bXBzLgpkaWZmIC0tZ2l0IGEvZGlzdDIvdGVzdGRhdGEvdGVzdGlucHV0MTcgYi9kaXN0Mi90ZXN0ZGF0YS90ZXN0aW5wdXQxNwppbmRleCAxNDc0ZWI5Li43NjkyNWZlIDEwMDY0NAotLS0gYS9kaXN0Mi90ZXN0ZGF0YS90ZXN0aW5wdXQxNworKysgYi9kaXN0Mi90ZXN0ZGF0YS90ZXN0aW5wdXQxNwpAQCAtMjEzLDYgKzIxMywxMiBAQAogI3BvcCBqaXQsaml0dmVyaWZ5CiAgICAgYWJjZGVmCiAgICAgCisvYWJjZC9wdXNoY29weSxqaXR2ZXJpZnkKKyAgICBhYmNkCisgICAgCisjcG9wIGppdHZlcmlmeQorICAgIGFiY2QKKyAgICAKICMgVGVzdCBwYXR0ZXJuIGNvbXBpbGF0aW9uCiAKIC8oPzphfGJ8Y3xkfGUpKD9SKS9qaXQ9MQpAQCAtMjcyLDUgKzI3OCwyMyBAQAogCiAvKC58LikqP2J4LwogICAgIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYmF4CisgICAgCisjIFRlc3QgSklUIGRpc2FibGUgCisKKy9hYmMvCisgICAgYWJjCisgICAgYWJjXD1ub19qaXQgCisgICAgCisvYWJjL2ppdGZhc3QKKyAgICBhYmMKKyAgICBhYmNcPW5vX2ppdCAKKyAgICAKKyMgLS0tLSAKKworL1thQ10vbWcsZmlyc3RsaW5lLG5ld2xpbmU9bGYKK21hdGNoXG5tYXRjaAorCisvW2FDel0vbWcsZmlyc3RsaW5lLG5ld2xpbmU9bGYKK21hdGNoXG5tYXRjaAogCiAjIEVuZCBvZiB0ZXN0aW5wdXQxNwpkaWZmIC0tZ2l0IGEvZGlzdDIvdGVzdGRhdGEvdGVzdGlucHV0MTggYi9kaXN0Mi90ZXN0ZGF0YS90ZXN0aW5wdXQxOAppbmRleCBjNzViODQyLi5lMzFiOTZlIDEwMDY0NAotLS0gYS9kaXN0Mi90ZXN0ZGF0YS90ZXN0aW5wdXQxOAorKysgYi9kaXN0Mi90ZXN0ZGF0YS90ZXN0aW5wdXQxOApAQCAtNjgsMTIgKzY4LDE1IEBACiAgICAgYWI9Y2QKICAgICBhYlxuY2QKIAotL2EoYiljL25vX2F1dG9fY2FwdHVyZQorL2EoYiljL3Bvc2l4X25vc3ViCiAgICAgYWJjCiAKLS9hKD9QPG5hbWU+YiljL25vX2F1dG9fY2FwdHVyZQorL2EoP1A8bmFtZT5iKWMvcG9zaXhfbm9zdWIKICAgICBhYmMKIAorLyhhKVwxL3Bvc2l4X25vc3ViCisgICAgemFheQorCiAvYT98Yj8vCiAgICAgYWJjCiBcPSBFeHBlY3Qgbm8gbWF0Y2gKQEAgLTkyLDYgKzk1LDggQEAKIAogIig/KD9DKSIKIAorIig/KD9DKSkiCisKIC9hYmNkL3N1YnN0aXR1dGVfZXh0ZW5kZWQKIAogL1xbQV17MTAwMDAwMH0qKi9leHBhbmQscmVnZXJyb3JfYnVmZnNpemU9MzEKZGlmZiAtLWdpdCBhL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RpbnB1dDIgYi9kaXN0Mi90ZXN0ZGF0YS90ZXN0aW5wdXQyCmluZGV4IDA3MWNjYTEuLjlkMDc1OWYgMTAwNjQ0Ci0tLSBhL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RpbnB1dDIKKysrIGIvZGlzdDIvdGVzdGRhdGEvdGVzdGlucHV0MgpAQCAtNDQyOCw2ICs0NDI4LDggQEAKIAogLyg/Ui06KD88LwogCisvKD9SLTooPzwpLworCiAvKD8oP0N7XFF9KSg/ISg/Jy8KIAogLyg/KD9De1xRfSkoPyEoPydhYmMnKSkpL0kKQEAgLTQ3OTIsMTIgKzQ3OTQsMjkgQEAKIC8oKk1BUks6QVx4MDBiKS9tYXJrLGFsdF92ZXJibmFtZXMKICAgICBhYmMKIAotIyAvKCpNQVJLOkFceDAwYikvCi0vMjggMmEgNGQgNDEgNTIgNGIgM2EgNDEgMDAgNjIgMjkvbWFyayxoZXgKKy8iKCpNQVJLOkEiIDAwICJiKSIvbWFyayxoZXgKICAgICBhYmMKIAotIyAvKCpNQVJLOkFceDAwYikvCi0vMjggMmEgNGQgNDEgNTIgNGIgM2EgNDEgMDAgNjIgMjkvbWFyayxoZXgsYWx0X3ZlcmJuYW1lcworLyIoKk1BUks6QSIgMDAgImIpIi9tYXJrLGhleCxhbHRfdmVyYm5hbWVzCiAgICAgYWJjCiAKKy9lZmcvaGV4CisKKy9lZmYvaGV4CisKKy9lZmZnL2hleAorCisvKD9KKSg/J2EnKSkoPydhJykvCisKKy8oPzw9KCg/QykwKSkvCisgICAgOTAxMAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJjCisKKy9hYWEvCitcW2FiY117MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDB9CitcW2FdezN9CisKKy9cW0FCXXs2MDAwMDAwMDAwMDAwMDAwMDAwMDAwfS9leHBhbmQKKwogIyBFbmQgb2YgdGVzdGlucHV0MiAKZGlmZiAtLWdpdCBhL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RpbnB1dDIwIGIvZGlzdDIvdGVzdGRhdGEvdGVzdGlucHV0MjAKaW5kZXggOWVjMzE3NC4uYzkyMGUyYSAxMDA2NDQKLS0tIGEvZGlzdDIvdGVzdGRhdGEvdGVzdGlucHV0MjAKKysrIGIvZGlzdDIvdGVzdGRhdGEvdGVzdGlucHV0MjAKQEAgLTEsNSArMSw1IEBACi0jIFRoaXMgc2V0IG9mIHRlc3RzIGV4ZXJjaXNlcyB0aGUgc2VyaWFsaXphdGlvbi9kZXNlcmlhbGl6YXRpb24gZnVuY3Rpb25zIGluCi0jIHRoZSBsaWJyYXJ5LiBJdCBkb2VzIG5vdCB1c2UgVVRGIG9yIEpJVC4KKyMgVGhpcyBzZXQgb2YgdGVzdHMgZXhlcmNpc2VzIHRoZSBzZXJpYWxpemF0aW9uL2Rlc2VyaWFsaXphdGlvbiBhbmQgY29kZSBjb3B5CisjIGZ1bmN0aW9ucyBpbiB0aGUgbGlicmFyeS4gSXQgZG9lcyBub3QgdXNlIFVURiBvciBKSVQuCiAKICNmb3JiaWRfdXRmCiAKQEAgLTU5LDUgKzU5LDMzIEBACiAKICNwb3Agc2hvdWxkIGdpdmUgYW4gZXJyb3IKICAgICBwcXIKKyAgICAKKy9hYmNkL3B1c2hjb3B5CisgICAgYWJjZAorICAgIAorI3BvcAorICAgIGFiY2QgCisKKyNwb3Agc2hvdWxkIGdpdmUgYW4gZXJyb3IKKworL2FiY2QvcHVzaAorI3BvcGNvcHkKKyAgICBhYmNkCisgICAgCisjcG9wCisgICAgYWJjZCAKKyAgICAKKy9hYmNkL3B1c2gKKyNzYXZlIHRlc3RzYXZlZDEKKyNwb3Agc2hvdWxkIGdpdmUgYW4gZXJyb3IKKworI2xvYWQgdGVzdHNhdmVkMQorI3BvcGNvcHkgCisgICAgYWJjZAorICAgIAorI3BvcAorICAgIGFiY2QKKworI3BvcCBzaG91bGQgZ2l2ZSBhbiBlcnJvcgogCiAjIEVuZCBvZiB0ZXN0aW5wdXQyMApkaWZmIC0tZ2l0IGEvZGlzdDIvdGVzdGRhdGEvdGVzdGlucHV0MjIgYi9kaXN0Mi90ZXN0ZGF0YS90ZXN0aW5wdXQyMgppbmRleCBmNjg0Y2Y0Li43YWRhOWFhIDEwMDY0NAotLS0gYS9kaXN0Mi90ZXN0ZGF0YS90ZXN0aW5wdXQyMgorKysgYi9kaXN0Mi90ZXN0ZGF0YS90ZXN0aW5wdXQyMgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kaXN0Mi90ZXN0ZGF0YS90ZXN0aW5wdXQ2IGIvZGlzdDIvdGVzdGRhdGEvdGVzdGlucHV0NgppbmRleCBjMjRiNDBmLi5kZTkyMjdlIDEwMDY0NAotLS0gYS9kaXN0Mi90ZXN0ZGF0YS90ZXN0aW5wdXQ2CisrKyBiL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RpbnB1dDYKQEAgLTQ4NDcsOCArNDg0Nyw3IEBACiAgICAgYWFhWFkKIAogIyBCaW5hcnkgemVybyBpbiBjYWxsb3V0IHN0cmluZwotIyAgYSAgKCAgPyAgQyAgJyAgeCAgICAgeiAgJyAgKSAgYgotLyA2MSAyOCAzZiA0MyAyNyA3OCAwMCA3YSAyNyAyOSA2Mi9oZXgKKy8iYSg/Qyd4IiAwMCAieicpYiIvaGV4CiAgICAgYWJjZGVmZ2gKIAogLyg/KD8hKWF8YikvCkBAIC00ODc5LDQgKzQ4NzgsOCBAQAogL2FiY2QvbnVsbF9jb250ZXh0CiAgICAgYWJjZFw9bnVsbF9jb250ZXh0CiAKKy8oKSgpYSsvbm9fYXV0b19wb3NzZXNzCisgICAgYWFhXD1kZmEsYWxsY2FwdHVyZXMKKyAgICBhXD1kZmEsYWxsY2FwdHVyZXMKKwogIyBFbmQgb2YgdGVzdGlucHV0NgpkaWZmIC0tZ2l0IGEvZGlzdDIvdGVzdGRhdGEvdGVzdGlucHV0OCBiL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RpbnB1dDgKaW5kZXggY2EzYjFiOS4uZjRiYjcwOSAxMDA2NDQKLS0tIGEvZGlzdDIvdGVzdGRhdGEvdGVzdGlucHV0OAorKysgYi9kaXN0Mi90ZXN0ZGF0YS90ZXN0aW5wdXQ4CkBAIC0xODIsNCArMTgyLDggQEAKIAogLygoPzEpKD8yKSg/MykoPzQpKD81KSg/NikoPzcpKD84KSg/OSkoPzkpKD84KSg/NykoPzYpKD81KSg/NCkoPzMpKD8yKSg/MSkoPzApKXsyLH0oKSgpKCkoKSgpKCkoKSgpKCkvZGVidWcKIAorLyhbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKCpBQ0NFUFQpLworCisvKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oKkFDQ0VQVCkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpLy1mdWxsYmluY29kZQorCiAjIEVuZCBvZiB0ZXN0aW5wdXQ4CmRpZmYgLS1naXQgYS9kaXN0Mi90ZXN0ZGF0YS90ZXN0b3V0cHV0MTcgYi9kaXN0Mi90ZXN0ZGF0YS90ZXN0b3V0cHV0MTcKaW5kZXggMGRlZjQzOC4uZjU2MGYxYiAxMDA2NDQKLS0tIGEvZGlzdDIvdGVzdGRhdGEvdGVzdG91dHB1dDE3CisrKyBiL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RvdXRwdXQxNwpAQCAtMzkyLDYgKzM5MiwxNSBAQAogICAgIGFiY2RlZgogIDA6IGRlZiAoSklUKQogICAgIAorL2FiY2QvcHVzaGNvcHksaml0dmVyaWZ5CisqKiBBcHBsaWVzIG9ubHkgdG8gY29tcGlsZSB3aGVuIHBhdHRlcm4gaXMgc3RhY2tlZCB3aXRoICdwdXNoJzogaml0dmVyaWZ5CisgICAgYWJjZAorIDA6IGFiY2QgKEpJVCkKKyAgICAKKyNwb3Agaml0dmVyaWZ5CisgICAgYWJjZAorIDA6IGFiY2QKKyAgICAKICMgVGVzdCBwYXR0ZXJuIGNvbXBpbGF0aW9uCiAKIC8oPzphfGJ8Y3xkfGUpKD9SKS9qaXQ9MQpAQCAtNTA3LDUgKzUxNiwyOSBAQAogLygufC4pKj9ieC8KICAgICBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWJheAogRmFpbGVkOiBlcnJvciAtNDc6IG1hdGNoIGxpbWl0IGV4Y2VlZGVkCisgICAgCisjIFRlc3QgSklUIGRpc2FibGUgCisKKy9hYmMvCisgICAgYWJjCisgMDogYWJjIChKSVQpCisgICAgYWJjXD1ub19qaXQgCisgMDogYWJjCisgICAgCisvYWJjL2ppdGZhc3QKKyAgICBhYmMKKyAwOiBhYmMgKEpJVCkKKyAgICBhYmNcPW5vX2ppdCAKKyAwOiBhYmMgKEpJVCkKKyAgICAKKyMgLS0tLSAKKworL1thQ10vbWcsZmlyc3RsaW5lLG5ld2xpbmU9bGYKK21hdGNoXG5tYXRjaAorIDA6IGEgKEpJVCkKKworL1thQ3pdL21nLGZpcnN0bGluZSxuZXdsaW5lPWxmCittYXRjaFxubWF0Y2gKKyAwOiBhIChKSVQpCiAKICMgRW5kIG9mIHRlc3RpbnB1dDE3CmRpZmYgLS1naXQgYS9kaXN0Mi90ZXN0ZGF0YS90ZXN0b3V0cHV0MTggYi9kaXN0Mi90ZXN0ZGF0YS90ZXN0b3V0cHV0MTgKaW5kZXggMGE1ZmZmZi4uMjk0YjEyMSAxMDA2NDQKLS0tIGEvZGlzdDIvdGVzdGRhdGEvdGVzdG91dHB1dDE4CisrKyBiL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RvdXRwdXQxOApAQCAtMTA1LDE0ICsxMDUsMTggQEAKICAgICBhYlxuY2QKICAwOiBhYlx4MGFjZAogCi0vYShiKWMvbm9fYXV0b19jYXB0dXJlCisvYShiKWMvcG9zaXhfbm9zdWIKICAgICBhYmMKIE1hdGNoZWQgd2l0aCBSRUdfTk9TVUIKIAotL2EoP1A8bmFtZT5iKWMvbm9fYXV0b19jYXB0dXJlCisvYSg/UDxuYW1lPmIpYy9wb3NpeF9ub3N1YgogICAgIGFiYwogTWF0Y2hlZCB3aXRoIFJFR19OT1NVQgogCisvKGEpXDEvcG9zaXhfbm9zdWIKKyAgICB6YWF5CitNYXRjaGVkIHdpdGggUkVHX05PU1VCCisKIC9hP3xiPy8KICAgICBhYmMKICAwOiBhCkBAIC0xMzgsNiArMTQyLDkgQEAKIEZhaWxlZDogUE9TSVggY29kZSA5OiBiYWQgZXNjYXBlIHNlcXVlbmNlIGF0IG9mZnNldCAzICAgICAKIAogIig/KD9DKSIKK0ZhaWxlZDogUE9TSVggY29kZSAxMTogdW5iYWxhbmNlZCAoKSBhdCBvZmZzZXQgNiAgICAgCisKKyIoPyg/QykpIgogRmFpbGVkOiBQT1NJWCBjb2RlIDM6IHBhdHRlcm4gZXJyb3IgYXQgb2Zmc2V0IDIgICAgIAogCiAvYWJjZC9zdWJzdGl0dXRlX2V4dGVuZGVkCmRpZmYgLS1naXQgYS9kaXN0Mi90ZXN0ZGF0YS90ZXN0b3V0cHV0MiBiL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RvdXRwdXQyCmluZGV4IDcxNzg0MTAuLjAxY2IxOTMgMTAwNjQ0Ci0tLSBhL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RvdXRwdXQyCisrKyBiL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RvdXRwdXQyCkBAIC01NDUsNyArNTQ1LDcgQEAKIEZhaWxlZDogZXJyb3IgMTI3IGF0IG9mZnNldCAxMjogY29uZGl0aW9uYWwgZ3JvdXAgY29udGFpbnMgbW9yZSB0aGFuIHR3byBicmFuY2hlcwogCiAvKD8oMWEpLwotRmFpbGVkOiBlcnJvciAxMjYgYXQgb2Zmc2V0IDQ6IG1hbGZvcm1lZCBudW1iZXIgb3IgbmFtZSBhZnRlciAoPygKK0ZhaWxlZDogZXJyb3IgMTE0IGF0IG9mZnNldCA2OiBtaXNzaW5nIGNsb3NpbmcgcGFyZW50aGVzaXMKIAogLyg/KDFhKSkvCiBGYWlsZWQ6IGVycm9yIDEyNiBhdCBvZmZzZXQgNDogbWFsZm9ybWVkIG51bWJlciBvciBuYW1lIGFmdGVyICg/KApAQCAtMTQ0MDEsNiArMTQ0MDEsOSBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIC8oP1ItOig/PC8KK0ZhaWxlZDogZXJyb3IgMTE0IGF0IG9mZnNldCA4OiBtaXNzaW5nIGNsb3NpbmcgcGFyZW50aGVzaXMKKworLyg/Ui06KD88KS8KIEZhaWxlZDogZXJyb3IgMTI5IGF0IG9mZnNldCAzOiAoP1Igb3IgKD9bKy1dZGlnaXRzIG11c3QgYmUgZm9sbG93ZWQgYnkgKQogCiAvKD8oP0N7XFF9KSg/ISg/Jy8KQEAgLTE0NTAyLDcgKzE0NTA1LDcgQEAKICAwOiBhYgogCiAvKD8oODAwMDAwMDAwMC8KLUZhaWxlZDogZXJyb3IgMTYxIGF0IG9mZnNldCAxMzogbnVtYmVyIGlzIHRvbyBiaWcKK0ZhaWxlZDogZXJyb3IgMTE0IGF0IG9mZnNldCAxMzogbWlzc2luZyBjbG9zaW5nIHBhcmVudGhlc2lzCiAKIC8oKD8oUjgwMDAwMDAwMDApKSkvCiBGYWlsZWQ6IGVycm9yIDE2MSBhdCBvZmZzZXQgMTY6IG51bWJlciBpcyB0b28gYmlnCkBAIC0xNTE0NiwxNiArMTUxNDksNTggQEAKICAwOiAKIE1LOiBBXHgwMGIKIAotIyAvKCpNQVJLOkFceDAwYikvCi0vMjggMmEgNGQgNDEgNTIgNGIgM2EgNDEgMDAgNjIgMjkvbWFyayxoZXgKKy8iKCpNQVJLOkEiIDAwICJiKSIvbWFyayxoZXgKICAgICBhYmMKICAwOiAKIE1LOiBBXHgwMGIKIAotIyAvKCpNQVJLOkFceDAwYikvCi0vMjggMmEgNGQgNDEgNTIgNGIgM2EgNDEgMDAgNjIgMjkvbWFyayxoZXgsYWx0X3ZlcmJuYW1lcworLyIoKk1BUks6QSIgMDAgImIpIi9tYXJrLGhleCxhbHRfdmVyYm5hbWVzCiAgICAgYWJjCiAgMDogCiBNSzogQVx4MDBiCiAKKy9lZmcvaGV4CisqKiBVbmV4cGVjdGVkIG5vbi1oZXgtZGlnaXQgJ2cnIGluIGhleCBwYXR0ZXJuOiBxdW90ZSBtaXNzaW5nPworCisvZWZmL2hleAorKiogT2RkIG51bWJlciBvZiBkaWdpdHMgaW4gaGV4IHBhdHRlcm4KKworL2VmZmcvaGV4CisqKiBVbmV4cGVjdGVkIG5vbi1oZXgtZGlnaXQgJ2cnIGluIGhleCBwYXR0ZXJuOiBxdW90ZSBtaXNzaW5nPworCisvKD9KKSg/J2EnKSkoPydhJykvCitGYWlsZWQ6IGVycm9yIDEyMiBhdCBvZmZzZXQgMTA6IHVubWF0Y2hlZCBjbG9zaW5nIHBhcmVudGhlc2lzCisKKy8oPzw9KCg/QykwKSkvCisgICAgOTAxMAorLS0tPjkwMTAKKyAgMCAgXiAgICAgICAwCisgIDAgICBeICAgICAgMAorIDA6IAorIDE6IDAKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiYworLS0tPmFiYworICAwICBeICAgICAgMAorICAwICAgXiAgICAgMAorICAwICAgIF4gICAgMAorTm8gbWF0Y2gKKworL2FhYS8KK1xbYWJjXXsxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMH0KKyoqIFJlcGVhdCBjb3VudCB0b28gbGFyZ2UKK1xbYV17M30KKyAwOiBhYWEKKworL1xbQUJdezYwMDAwMDAwMDAwMDAwMDAwMDAwMDB9L2V4cGFuZAorKiogUGF0dGVybiByZXBlYXQgY291bnQgdG9vIGxhcmdlCisKICMgRW5kIG9mIHRlc3RpbnB1dDIgCitFcnJvciAtNjM6IFBDUkUyX0VSUk9SX0JBRERBVEEgKHVua25vd24gZXJyb3IgbnVtYmVyKQorRXJyb3IgLTYyOiBiYWQgc2VyaWFsaXplZCBkYXRhCitFcnJvciAtMjogcGFydGlhbCBtYXRjaAorRXJyb3IgLTE6IG5vIG1hdGNoCitFcnJvciAwOiBQQ1JFMl9FUlJPUl9CQUREQVRBICh1bmtub3duIGVycm9yIG51bWJlcikKK0Vycm9yIDEwMDogbm8gZXJyb3IKK0Vycm9yIDE4ODogcGF0dGVybiBzdHJpbmcgaXMgbG9uZ2VyIHRoYW4gdGhlIGxpbWl0IHNldCBieSB0aGUgYXBwbGljYXRpb24KK0Vycm9yIDE4OTogUENSRTJfRVJST1JfQkFEREFUQSAodW5rbm93biBlcnJvciBudW1iZXIpCmRpZmYgLS1naXQgYS9kaXN0Mi90ZXN0ZGF0YS90ZXN0b3V0cHV0MjAgYi9kaXN0Mi90ZXN0ZGF0YS90ZXN0b3V0cHV0MjAKaW5kZXggZTkyMzA4MC4uOTUyYjBiYiAxMDA2NDQKLS0tIGEvZGlzdDIvdGVzdGRhdGEvdGVzdG91dHB1dDIwCisrKyBiL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RvdXRwdXQyMApAQCAtMSw1ICsxLDUgQEAKLSMgVGhpcyBzZXQgb2YgdGVzdHMgZXhlcmNpc2VzIHRoZSBzZXJpYWxpemF0aW9uL2Rlc2VyaWFsaXphdGlvbiBmdW5jdGlvbnMgaW4KLSMgdGhlIGxpYnJhcnkuIEl0IGRvZXMgbm90IHVzZSBVVEYgb3IgSklULgorIyBUaGlzIHNldCBvZiB0ZXN0cyBleGVyY2lzZXMgdGhlIHNlcmlhbGl6YXRpb24vZGVzZXJpYWxpemF0aW9uIGFuZCBjb2RlIGNvcHkKKyMgZnVuY3Rpb25zIGluIHRoZSBsaWJyYXJ5LiBJdCBkb2VzIG5vdCB1c2UgVVRGIG9yIEpJVC4KIAogI2ZvcmJpZF91dGYKIApAQCAtOTcsNSArOTcsNDIgQEAKICNwb3Agc2hvdWxkIGdpdmUgYW4gZXJyb3IKICoqIENhbid0IHBvcCBvZmYgYW4gZW1wdHkgc3RhY2sKICAgICBwcXIKKyAgICAKKy9hYmNkL3B1c2hjb3B5CisgICAgYWJjZAorIDA6IGFiY2QKKyAgICAKKyNwb3AKKyAgICBhYmNkIAorIDA6IGFiY2QKKworI3BvcCBzaG91bGQgZ2l2ZSBhbiBlcnJvcgorKiogQ2FuJ3QgcG9wIG9mZiBhbiBlbXB0eSBzdGFjaworCisvYWJjZC9wdXNoCisjcG9wY29weQorICAgIGFiY2QKKyAwOiBhYmNkCisgICAgCisjcG9wCisgICAgYWJjZCAKKyAwOiBhYmNkCisgICAgCisvYWJjZC9wdXNoCisjc2F2ZSB0ZXN0c2F2ZWQxCisjcG9wIHNob3VsZCBnaXZlIGFuIGVycm9yCisqKiBDYW4ndCBwb3Agb2ZmIGFuIGVtcHR5IHN0YWNrCisKKyNsb2FkIHRlc3RzYXZlZDEKKyNwb3Bjb3B5IAorICAgIGFiY2QKKyAwOiBhYmNkCisgICAgCisjcG9wCisgICAgYWJjZAorIDA6IGFiY2QKKworI3BvcCBzaG91bGQgZ2l2ZSBhbiBlcnJvcgorKiogQ2FuJ3QgcG9wIG9mZiBhbiBlbXB0eSBzdGFjawogCiAjIEVuZCBvZiB0ZXN0aW5wdXQyMApkaWZmIC0tZ2l0IGEvZGlzdDIvdGVzdGRhdGEvdGVzdG91dHB1dDIyLTE2IGIvZGlzdDIvdGVzdGRhdGEvdGVzdG91dHB1dDIyLTE2CmluZGV4IGNhMWZkNzYuLjAxYzkxNTMgMTAwNjQ0Ci0tLSBhL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RvdXRwdXQyMi0xNgorKysgYi9kaXN0Mi90ZXN0ZGF0YS90ZXN0b3V0cHV0MjItMTYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZGlzdDIvdGVzdGRhdGEvdGVzdG91dHB1dDIyLTMyIGIvZGlzdDIvdGVzdGRhdGEvdGVzdG91dHB1dDIyLTMyCmluZGV4IDkxZDBiMDUuLjEwMDMzM2YgMTAwNjQ0Ci0tLSBhL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RvdXRwdXQyMi0zMgorKysgYi9kaXN0Mi90ZXN0ZGF0YS90ZXN0b3V0cHV0MjItMzIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZGlzdDIvdGVzdGRhdGEvdGVzdG91dHB1dDIyLTggYi9kaXN0Mi90ZXN0ZGF0YS90ZXN0b3V0cHV0MjItOAppbmRleCBhY2IzMWQ2Li40ODE0MDM5IDEwMDY0NAotLS0gYS9kaXN0Mi90ZXN0ZGF0YS90ZXN0b3V0cHV0MjItOAorKysgYi9kaXN0Mi90ZXN0ZGF0YS90ZXN0b3V0cHV0MjItOApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kaXN0Mi90ZXN0ZGF0YS90ZXN0b3V0cHV0NiBiL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RvdXRwdXQ2CmluZGV4IDlhZTA5MmIuLjE3NjE2YzggMTAwNjQ0Ci0tLSBhL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RvdXRwdXQ2CisrKyBiL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RvdXRwdXQ2CkBAIC03NjE5LDggKzc2MTksNyBAQAogIDA6IGFhYVgKIAogIyBCaW5hcnkgemVybyBpbiBjYWxsb3V0IHN0cmluZwotIyAgYSAgKCAgPyAgQyAgJyAgeCAgICAgeiAgJyAgKSAgYgotLyA2MSAyOCAzZiA0MyAyNyA3OCAwMCA3YSAyNyAyOSA2Mi9oZXgKKy8iYSg/Qyd4IiAwMCAieicpYiIvaGV4CiAgICAgYWJjZGVmZ2gKIENhbGxvdXQgKDUpOiAneFx4MDB6JwogLS0tPmFiY2RlZmdoCkBAIC03NjczLDQgKzc2NzIsMTQgQEAKICAgICBhYmNkXD1udWxsX2NvbnRleHQKICAwOiBhYmNkCiAKKy8oKSgpYSsvbm9fYXV0b19wb3NzZXNzCisgICAgYWFhXD1kZmEsYWxsY2FwdHVyZXMKKyoqIElnbm9yZWQgYWZ0ZXIgREZBIG1hdGNoaW5nOiBhbGxjYXB0dXJlcworIDA6IGFhYQorIDE6IGFhCisgMjogYQorICAgIGFcPWRmYSxhbGxjYXB0dXJlcworKiogSWdub3JlZCBhZnRlciBERkEgbWF0Y2hpbmc6IGFsbGNhcHR1cmVzCisgMDogYQorCiAjIEVuZCBvZiB0ZXN0aW5wdXQ2CmRpZmYgLS1naXQgYS9kaXN0Mi90ZXN0ZGF0YS90ZXN0b3V0cHV0OC0xNi0yIGIvZGlzdDIvdGVzdGRhdGEvdGVzdG91dHB1dDgtMTYtMgppbmRleCAwNTY2OWJiLi4zOTQxNWI3IDEwMDY0NAotLS0gYS9kaXN0Mi90ZXN0ZGF0YS90ZXN0b3V0cHV0OC0xNi0yCisrKyBiL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RvdXRwdXQ4LTE2LTIKQEAgLTEwMjcsNCArMTAyNywxMCBAQAogTWF5IG1hdGNoIGVtcHR5IHN0cmluZwogU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAwCiAKKy8oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXSgqQUNDRVBUKS8KK0ZhaWxlZDogZXJyb3IgMTE0IGF0IG9mZnNldCA1MDk6IG1pc3NpbmcgY2xvc2luZyBwYXJlbnRoZXNpcworCisvKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oKkFDQ0VQVCkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpLy1mdWxsYmluY29kZQorRmFpbGVkOiBlcnJvciAxODYgYXQgb2Zmc2V0IDQ5MDogcmVndWxhciBleHByZXNzaW9uIGlzIHRvbyBjb21wbGljYXRlZAorCiAjIEVuZCBvZiB0ZXN0aW5wdXQ4CmRpZmYgLS1naXQgYS9kaXN0Mi90ZXN0ZGF0YS90ZXN0b3V0cHV0OC0xNi0zIGIvZGlzdDIvdGVzdGRhdGEvdGVzdG91dHB1dDgtMTYtMwppbmRleCAzMTg4NGUxLi42MWE5OGViIDEwMDY0NAotLS0gYS9kaXN0Mi90ZXN0ZGF0YS90ZXN0b3V0cHV0OC0xNi0zCisrKyBiL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RvdXRwdXQ4LTE2LTMKQEAgLTEwMjMsNCArMTAyMyw5IEBACiBNYXkgbWF0Y2ggZW1wdHkgc3RyaW5nCiBTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDAKIAorLyhbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKCpBQ0NFUFQpLworRmFpbGVkOiBlcnJvciAxMTQgYXQgb2Zmc2V0IDUwOTogbWlzc2luZyBjbG9zaW5nIHBhcmVudGhlc2lzCisKKy8oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXSgqQUNDRVBUKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkvLWZ1bGxiaW5jb2RlCisKICMgRW5kIG9mIHRlc3RpbnB1dDgKZGlmZiAtLWdpdCBhL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RvdXRwdXQ4LTMyLTIgYi9kaXN0Mi90ZXN0ZGF0YS90ZXN0b3V0cHV0OC0zMi0yCmluZGV4IGJhYmQwYzcuLjQ5ZWY1MDYgMTAwNjQ0Ci0tLSBhL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RvdXRwdXQ4LTMyLTIKKysrIGIvZGlzdDIvdGVzdGRhdGEvdGVzdG91dHB1dDgtMzItMgpAQCAtMTAyMyw0ICsxMDIzLDkgQEAKIE1heSBtYXRjaCBlbXB0eSBzdHJpbmcKIFN1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMAogCisvKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oKkFDQ0VQVCkvCitGYWlsZWQ6IGVycm9yIDExNCBhdCBvZmZzZXQgNTA5OiBtaXNzaW5nIGNsb3NpbmcgcGFyZW50aGVzaXMKKworLyhbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKCpBQ0NFUFQpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKS8tZnVsbGJpbmNvZGUKKwogIyBFbmQgb2YgdGVzdGlucHV0OApkaWZmIC0tZ2l0IGEvZGlzdDIvdGVzdGRhdGEvdGVzdG91dHB1dDgtMzItMyBiL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RvdXRwdXQ4LTMyLTMKaW5kZXggYmFiZDBjNy4uNDllZjUwNiAxMDA2NDQKLS0tIGEvZGlzdDIvdGVzdGRhdGEvdGVzdG91dHB1dDgtMzItMworKysgYi9kaXN0Mi90ZXN0ZGF0YS90ZXN0b3V0cHV0OC0zMi0zCkBAIC0xMDIzLDQgKzEwMjMsOSBAQAogTWF5IG1hdGNoIGVtcHR5IHN0cmluZwogU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAwCiAKKy8oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXSgqQUNDRVBUKS8KK0ZhaWxlZDogZXJyb3IgMTE0IGF0IG9mZnNldCA1MDk6IG1pc3NpbmcgY2xvc2luZyBwYXJlbnRoZXNpcworCisvKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oKkFDQ0VQVCkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpLy1mdWxsYmluY29kZQorCiAjIEVuZCBvZiB0ZXN0aW5wdXQ4CmRpZmYgLS1naXQgYS9kaXN0Mi90ZXN0ZGF0YS90ZXN0b3V0cHV0OC0zMi00IGIvZGlzdDIvdGVzdGRhdGEvdGVzdG91dHB1dDgtMzItNAppbmRleCBiYWJkMGM3Li40OWVmNTA2IDEwMDY0NAotLS0gYS9kaXN0Mi90ZXN0ZGF0YS90ZXN0b3V0cHV0OC0zMi00CisrKyBiL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RvdXRwdXQ4LTMyLTQKQEAgLTEwMjMsNCArMTAyMyw5IEBACiBNYXkgbWF0Y2ggZW1wdHkgc3RyaW5nCiBTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDAKIAorLyhbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKCpBQ0NFUFQpLworRmFpbGVkOiBlcnJvciAxMTQgYXQgb2Zmc2V0IDUwOTogbWlzc2luZyBjbG9zaW5nIHBhcmVudGhlc2lzCisKKy8oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXSgqQUNDRVBUKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkvLWZ1bGxiaW5jb2RlCisKICMgRW5kIG9mIHRlc3RpbnB1dDgKZGlmZiAtLWdpdCBhL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RvdXRwdXQ4LTgtMiBiL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RvdXRwdXQ4LTgtMgppbmRleCA2YTlhYTBhLi4wZDE1YTgyIDEwMDY0NAotLS0gYS9kaXN0Mi90ZXN0ZGF0YS90ZXN0b3V0cHV0OC04LTIKKysrIGIvZGlzdDIvdGVzdGRhdGEvdGVzdG91dHB1dDgtOC0yCkBAIC0xMDI2LDQgKzEwMjYsOSBAQAogTWF5IG1hdGNoIGVtcHR5IHN0cmluZwogU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAwCiAKKy8oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXSgqQUNDRVBUKS8KK0ZhaWxlZDogZXJyb3IgMTE0IGF0IG9mZnNldCA1MDk6IG1pc3NpbmcgY2xvc2luZyBwYXJlbnRoZXNpcworCisvKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oKkFDQ0VQVCkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpLy1mdWxsYmluY29kZQorCiAjIEVuZCBvZiB0ZXN0aW5wdXQ4CmRpZmYgLS1naXQgYS9kaXN0Mi90ZXN0ZGF0YS90ZXN0b3V0cHV0OC04LTMgYi9kaXN0Mi90ZXN0ZGF0YS90ZXN0b3V0cHV0OC04LTMKaW5kZXggMmZlMTE2OC4uNTBkNzE1ZCAxMDA2NDQKLS0tIGEvZGlzdDIvdGVzdGRhdGEvdGVzdG91dHB1dDgtOC0zCisrKyBiL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RvdXRwdXQ4LTgtMwpAQCAtMTAyNCw0ICsxMDI0LDkgQEAKIE1heSBtYXRjaCBlbXB0eSBzdHJpbmcKIFN1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMAogCisvKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oKkFDQ0VQVCkvCitGYWlsZWQ6IGVycm9yIDExNCBhdCBvZmZzZXQgNTA5OiBtaXNzaW5nIGNsb3NpbmcgcGFyZW50aGVzaXMKKworLyhbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKCpBQ0NFUFQpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKS8tZnVsbGJpbmNvZGUKKwogIyBFbmQgb2YgdGVzdGlucHV0OApkaWZmIC0tZ2l0IGEvZGlzdDIvdGVzdGRhdGEvdGVzdG91dHB1dDgtOC00IGIvZGlzdDIvdGVzdGRhdGEvdGVzdG91dHB1dDgtOC00CmluZGV4IDkxOTkzYjIuLjhlYmZhZDUgMTAwNjQ0Ci0tLSBhL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RvdXRwdXQ4LTgtNAorKysgYi9kaXN0Mi90ZXN0ZGF0YS90ZXN0b3V0cHV0OC04LTQKQEAgLTEwMjIsNCArMTAyMiw5IEBACiBNYXkgbWF0Y2ggZW1wdHkgc3RyaW5nCiBTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDAKIAorLyhbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKCpBQ0NFUFQpLworRmFpbGVkOiBlcnJvciAxMTQgYXQgb2Zmc2V0IDUwOTogbWlzc2luZyBjbG9zaW5nIHBhcmVudGhlc2lzCisKKy8oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXShbMDBdKFswMF0oWzAwXSgqQUNDRVBUKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkvLWZ1bGxiaW5jb2RlCisKICMgRW5kIG9mIHRlc3RpbnB1dDgKZGlmZiAtLWdpdCBhL2Rpc3QyL3Rlc3RkYXRhL3ZhbGdyaW5kLWppdC5zdXBwIGIvZGlzdDIvdGVzdGRhdGEvdmFsZ3JpbmQtaml0LnN1cHAKaW5kZXggNzNlODdkMi4uZjFkMjY3MSAxMDA2NDQKLS0tIGEvZGlzdDIvdGVzdGRhdGEvdmFsZ3JpbmQtaml0LnN1cHAKKysrIGIvZGlzdDIvdGVzdGRhdGEvdmFsZ3JpbmQtaml0LnN1cHAKQEAgLTEsNyArMSwxNSBAQAogewogICAgbmFtZQogICAgTWVtY2hlY2s6QWRkcjE2Ci0gICBvYmo6KgotICAgb2JqOioKLSAgIG9iajoqCisgICBvYmo6Pz8/CisgICBvYmo6Pz8/CisgICBvYmo6Pz8/Cit9CisKK3sKKyAgIG5hbWUKKyAgIE1lbWNoZWNrOkNvbmQKKyAgIG9iajo/Pz8KKyAgIG9iajo/Pz8KKyAgIG9iajo/Pz8KIH0KZGlmZiAtLWdpdCBhL2Rpc3QyL3Rlc3RkYXRhL3dpbnRlc3RvdXRwdXQzIGIvZGlzdDIvdGVzdGRhdGEvd2ludGVzdG91dHB1dDMKaW5kZXggMGQ4YTY5MC4uYmU4NTZiMSAxMDA2NDQKLS0tIGEvZGlzdDIvdGVzdGRhdGEvd2ludGVzdG91dHB1dDMKKysrIGIvZGlzdDIvdGVzdGRhdGEvd2ludGVzdG91dHB1dDMKQEAgLTE1OSw3ICsxNTksNyBAQAogL1tbOmFscGhhOl1dW1s6bG93ZXI6XV1bWzp1cHBlcjpdXS9JQgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIEJyYQotICAgICAgICBbQS1aYS16XHg4M1x4OGFceDhjXHg4ZVx4OWFceDljXHg5ZVx4OWZceGFhXHhiMlx4YjNceGI1XHhiOVx4YmFceGMwLVx4ZDZceGQ4LVx4ZjZceGY4LVx4ZmZdCisgICAgICAgIFtBLVphLXpceDgzXHg4YVx4OGNceDhlXHg5YVx4OWNceDllXHg5Zlx4YWFceGI1XHhiYVx4YzAtXHhkNlx4ZDgtXHhmNlx4ZjgtXHhmZl0KICAgICAgICAgW2Etelx4ODNceDlhXHg5Y1x4OWVceGFhXHhiNVx4YmFceGRmLVx4ZjZceGY4LVx4ZmZdCiAgICAgICAgIFtBLVpceDhhXHg4Y1x4OGVceDlmXHhjMC1ceGQ2XHhkOC1ceGRlXQogICAgICAgICBLZXQKQEAgLTE2Nyw5ICsxNjcsOSBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKIFN0YXJ0aW5nIGNvZGUgdW5pdHM6IEEgQiBDIEQgRSBGIEcgSCBJIEogSyBMIE0gTiBPIFAgUSBSIFMgVCBVIFYgVyBYIFkgWiAKLSAgYSBiIGMgZCBlIGYgZyBoIGkgaiBrIGwgbSBuIG8gcCBxIHIgcyB0IHUgdiB3IHggeSB6IIMgiiCMII4gmiCcIJ4gnyCqILIgsyAKLSAgtSC5ILogwCDBIMIgwyDEIMUgxiDHIMggySDKIMsgzCDNIM4gzyDQINEg0iDTINQg1SDWINgg2SDaINsg3CDdIN4g3yDgIOEg4iAKLSAg4yDkIOUg5iDnIOgg6SDqIOsg7CDtIO4g7yDwIPEg8iDzIPQg9SD2IPgg+SD6IPsg/CD9IP4g/yAKKyAgYSBiIGMgZCBlIGYgZyBoIGkgaiBrIGwgbSBuIG8gcCBxIHIgcyB0IHUgdiB3IHggeSB6IIMgiiCMII4gmiCcIJ4gnyCqILUguiAKKyAgwCDBIMIgwyDEIMUgxiDHIMggySDKIMsgzCDNIM4gzyDQINEg0iDTINQg1SDWINgg2SDaINsg3CDdIN4g3yDgIOEg4iDjIOQg5SAKKyAg5iDnIOgg6SDqIOsg7CDtIO4g7yDwIPEg8iDzIPQg9SD2IPgg+SD6IPsg/CD9IP4g/yAKIFN1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMwogCiAjIEVuZCBvZiB0ZXN0aW5wdXQzIAo=