From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.ffmpeg.org (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id 4B78B4D089 for ; Sat, 17 May 2025 09:25:25 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id 758D268D2C8; Sat, 17 May 2025 12:25:20 +0300 (EEST) Received: from out162-62-57-64.mail.qq.com (out162-62-57-64.mail.qq.com [162.62.57.64]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTPS id A53CE68D0D5 for ; Sat, 17 May 2025 12:25:12 +0300 (EEST) Received: from localhost.localdomain ([111.30.83.130]) by newxmesmtplogicsvrszb21-0.qq.com (NewEsmtp) with SMTP id 636ACAA3; Sat, 17 May 2025 17:24:54 +0800 X-QQ-mid: xmsmtpt1747473894t0zw3c5ua Message-ID: X-QQ-XMAILINFO: NbgegmlEc3JuAw1Hgz4gcS/HMujId8L9M3zNFFHAhjetkqeGnGb6ybYP8IffSq k5YNMpCYtrwSfMwUqjJ2WJZnXXdNqOibAE7VprYQtUWvLs+6YOpbeVhgLv5UYZr0+AUaJvfXDzFf 7Q0+ln6lCSf9M//TCqiUbNy+zvfvk/ZzvHGax45hXvFTVs7m4HBT14Bv7jSekSL9XKekNdy0tbxR nBh3W3jfnWYB61VZuEWVDzvJedXfPiPeQUHXzDYfoeB12OBgnEJAx6gKij48/Xd+Jd2XL57Xv+Cu dmigvffYqs/kHlEdOmyoAWu2OM+IwzFr1Te3kjpfYMzrYIpjEmOrCDwV8ukywqT5X9L/idyna5h2 OTDTjFQ+jzxKTj9DT/Tn52FvjGRs3uCWMLcZizWmUCEaC3pT/UDoph4vniC8FS8Olh6ei2pHI4JO qlwDaCknP09ZClZvvhjY+7+53I80y4bVkfK/3vQD6Wsm5g9HmdWOIriMuToaeQDSCdG/pYpgdlG8 KB3dFUVKZESFeztIFKeTbvJ5lgYba5UeWOjHo2JOvJVzen2IL4QIxUnT8+osvDnVBB0Ye3/oOm4L PnwH9cu1/yT1FzpolHTQvu5aO2CAWfH4zUKfSqwBPXiqiUyR3x0LYsSHJyO21g5TpLckyL1rPP1X 8WaHeWzK+/bLGaLrqIKNS347iLS9XlTENgV5rtCdF1e9vIr8vSpLUuzbRLastkfPq8LAZVt40oWs 5lU042K/mzcIVOdDrPpr9RkXVpNouvQEBdd+5+R8FeTQfmHcjCyc/UoypxKDrcC2HWJ5yQ8Z1Nld M4fkCMt8ju9x8SCMTxurhS7tJlb+XcUvW+tKcI8/5S0NdDBwFPa0s1B4wGmluvgZpqCaftM7HqPx wtZDc5mfNfAXHKdwbWV7RzSVjMToLlv+K81P4z3ntzsrTYVbqi6TdYobxZBJDwTQrWgxafumhoAb kv0Ms0JayhHxP7DI6AqetAeiozuOEE4PQjLnYGTB5RDVAy19n2PGVppVtQPtDVezEuRC47IfA= X-QQ-XMRINFO: NyFYKkN4Ny6FSmKK/uo/jdU= To: ffmpeg-devel@ffmpeg.org Date: Sat, 17 May 2025 17:24:52 +0800 X-OQ-MSGID: <20250517092452.66555-1-jacklau1222@qq.com> X-Mailer: git-send-email 2.49.0 MIME-Version: 1.0 X-Unsent: 1 Subject: [FFmpeg-devel] [PATCH v3] avformat/whip: Add WHIP muxer support for subsecond latency streaming X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: Jack Lau via ffmpeg-devel Reply-To: FFmpeg development discussions and patches Cc: Jack Lau , Jun Zhao , yangrtc , Steven Liu , cloudwebrtc , winlin , Haibo Chen <495810242@qq.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: MC4gV0hJUCBWZXJzaW9uIDMuCjEuIFRoZSBXSElQIG11eGVyIGhhcyBiZWVuIHJlbmFtZWQgYW5k IHJlZmluZWQsIHdpdGggaW1wcm92ZWQgbG9nZ2luZyBjb250ZXh0IGFuZCBlcnJvciBtZXNzYWdl cyBmb3IgU1NMLCBEVExTLCBhbmQgUlRDLgoyLiBNYWdpYyBudW1iZXJzIGhhdmUgYmVlbiByZXBs YWNlZCB3aXRoIG1hY3JvcyBhbmQgZXh0cmFjdGVkIHRvIGZ1bmN0aW9ucywgYW5kIGxvZyBsZXZl bHMgaGF2ZSBiZWVuIGFsdGVyZWQgZm9yIGJldHRlciBjbGFyaXR5LgozLiBEVExTIGN1cnZlIGxp c3QgaGFzIGJlZW4gdXBkYXRlZCwgYW5kIFNSVFAgcHJvZmlsZSBuYW1lcyBoYXZlIGJlZW4gcmVm aW5lZCBmb3IgRkZtcGVnIGFuZCBPcGVuU1NMLgo0LiBJQ0UgU1RVTiBtYWdpYyBudW1iZXIgaGFz IGJlZW4gcmVmaW5lZCwgYW5kIFJUUCBwYXlsb2FkIHR5cGVzIGhhdmUgYmVlbiB1cGRhdGVkIGJh c2VkIG9uIENocm9tZSdzIGRlZmluaXRpb24uCjUuIEZpeGVkIGZyYW1lIHNpemUgaGFzIGJlZW4g cmVmaW5lZCB0byBydGMtPmF1ZGlvX3Bhci0+ZnJhbWVfc2l6ZSwgYW5kIGgyNjRfbXA0dG9hbm5l eGIgaXMgbm93IHVzZWQgdG8gY29udmVydCBNUDQvSVNPTSB0byBhbm5leGIuCjYuIE9QVVMgdGlt ZXN0YW1wIGlzc3VlIGhhcyBiZWVuIGFkZHJlc3NlZCwgYW5kIG1hcmtlciBzZXR0aW5nIGhhcyBi ZWVuIGNvcnJlY3RlZCBhZnRlciB1dGlsaXppbmcgQlNGLgo3LiBEVExTIGhhbmRzaGFrZSBhbmQg SUNFIGhhbmRsaW5nIGhhdmUgYmVlbiBvcHRpbWl6ZWQgZm9yIGltcHJvdmVkIHBlcmZvcm1hbmNl LCB3aXRoIGEgc2luZ2xlIGhhbmRzaGFrZSB0aW1lb3V0IGFuZCBzZXJ2ZXIgcm9sZSB0byBwcmV2 ZW50IEFSUS4KOC4gQ29uc29saWRhdGVkIElDRSByZXF1ZXN0L3Jlc3BvbnNlIGhhbmRsaW5nIGFu ZCBEVExTIGhhbmRzaGFrZSBpbnRvIGEgc2luZ2xlIGZ1bmN0aW9uLCBhbmQgZml4ZWQgT3BlblNT TCBidWlsZCBlcnJvcnMgdG8gd29yayB3aXRoIFBpb24uCjkuIE1lcmdlIFRMUyAmIERUTFMgaW1w bGVtZW50YXRpb24sIHNoYXJlZCBCSU8gY2FsbGJhY2tzLCByZWFkLCB3cml0ZSwgcHJpbnRfc3Ns X2Vycm9yLCBvcGVuc3NsX2luaXRfY2Ffa2V5X2NlcnQsIGluaXRfYmlvX21ldGhvZCBmdW5jdGlv biBhbmQgc2hhcmVkIHNhbWUgZGF0YSBzdHJ1Y3R1cmUKMTAuIE1vZGlmeSBjb25maWd1cmUgdGhh dCB3aGlwIGlzIGVuYWJsZWQgb25seSBkdGxzIGlzIGVuYWJsZWQoanVzdCBzdXBwb3J0IG9wZW5z c2wgZm9yIG5vdykgdG8gZml4IGJ1aWxkIGVycm9yCgpDby1hdXRob3JlZC1ieTogd2lubGluIDx3 aW5saW52aXBAZ21haWwuY29tPgpDby1hdXRob3JlZC1ieTogeWFuZ3J0YyA8eWFuZ3J0Y0BhbGl5 dW4uY29tPgpDby1hdXRob3JlZC1ieTogY2xvdWR3ZWJydGMgPGR1YW53ZWl3ZWkxOTgyQGdtYWls LmNvbT4KQ28tYXV0aG9yZWQtYnk6IEhhaWJvIENoZW4gPDQ5NTgxMDI0MkBxcS5jb20+CkNvLWF1 dGhvcmVkLWJ5OiBTdGV2ZW4gTGl1IDxscUBjaGluYWZmbXBlZy5vcmc+CkNvLWF1dGhvcmVkLWJ5 OiBKdW4gWmhhbyA8YmFycnlqemhhb0B0ZW5jZW50LmNvbT4KU2lnbmVkLW9mZi1ieTogSmFjayBM YXUgPGphY2tsYXUxMjIyQHFxLmNvbT4KLS0tCiBjb25maWd1cmUgICAgICAgICAgICAgICAgIHwg ICAxMiArCiBkb2MvbXV4ZXJzLnRleGkgICAgICAgICAgIHwgICA0NyArCiBsaWJhdmZvcm1hdC9N YWtlZmlsZSAgICAgIHwgICAgMSArCiBsaWJhdmZvcm1hdC9hbGxmb3JtYXRzLmMgIHwgICAgMSAr CiBsaWJhdmZvcm1hdC9hdmlvLmMgICAgICAgIHwgICAgNSArLQogbGliYXZmb3JtYXQvaHR0cC5j ICAgICAgICB8ICAgIDYgKwogbGliYXZmb3JtYXQvaHR0cC5oICAgICAgICB8ICAgIDIgKwogbGli YXZmb3JtYXQvcHJvdG9jb2xzLmMgICB8ICAgIDEgKwogbGliYXZmb3JtYXQvc3J0cC5oICAgICAg ICB8ICAgIDQgKy0KIGxpYmF2Zm9ybWF0L3Rscy5jICAgICAgICAgfCAgIDcwICstCiBsaWJhdmZv cm1hdC90bHMuaCAgICAgICAgIHwgICA1OCArLQogbGliYXZmb3JtYXQvdGxzX29wZW5zc2wuYyB8 ICA4NTcgKysrKysrKysrKysrKysrKy0KIGxpYmF2Zm9ybWF0L3doaXAuYyAgICAgICAgfCAxOTE3 ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDEzIGZpbGVzIGNoYW5nZWQs IDI5MjUgaW5zZXJ0aW9ucygrKSwgNTYgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQg bGliYXZmb3JtYXQvd2hpcC5jCgpkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCmlu ZGV4IDA2MDlkYWM0YWIuLjJhMzE2Njk2MmEgMTAwNzU1Ci0tLSBhL2NvbmZpZ3VyZQorKysgYi9j b25maWd1cmUKQEAgLTM3NDcsNiArMzc0Nyw3IEBAIHdhdl9kZW11eGVyX3NlbGVjdD0icmlmZmRl YyIKIHdhdl9tdXhlcl9zZWxlY3Q9InJpZmZlbmMiCiB3ZWJtX2NodW5rX211eGVyX3NlbGVjdD0i d2VibV9tdXhlciIKIHdlYm1fZGFzaF9tYW5pZmVzdF9kZW11eGVyX3NlbGVjdD0ibWF0cm9za2Ff ZGVtdXhlciIKK3doaXBfbXV4ZXJfZGVwc19hbnk9ImR0bHNfcHJvdG9jb2wiCiB3dHZfZGVtdXhl cl9zZWxlY3Q9Im1wZWd0c19kZW11eGVyIHJpZmZkZWMiCiB3dHZfbXV4ZXJfc2VsZWN0PSJtcGVn dHNfbXV4ZXIgcmlmZmVuYyIKIHhtdl9kZW11eGVyX3NlbGVjdD0icmlmZmRlYyIKQEAgLTM4NDUs NiArMzg0Niw5IEBAIHNydHBfcHJvdG9jb2xfc2VsZWN0PSJydHBfcHJvdG9jb2wgc3J0cCIKIHRj cF9wcm90b2NvbF9zZWxlY3Q9Im5ldHdvcmsiCiB0bHNfcHJvdG9jb2xfZGVwc19hbnk9ImdudXRs cyBvcGVuc3NsIHNjaGFubmVsIHNlY3VyZXRyYW5zcG9ydCBsaWJ0bHMgbWJlZHRscyIKIHRsc19w cm90b2NvbF9zZWxlY3Q9InRjcF9wcm90b2NvbCIKKyMgVE9ETzogU3VwcG9ydCBsaWJ0bHMsIG1i ZWR0bHMsIGFuZCBnbnV0bHMuCitkdGxzX3Byb3RvY29sX2RlcHNfYW55PSJvcGVuc3NsIgorZHRs c19wcm90b2NvbF9zZWxlY3Q9InVkcF9wcm90b2NvbCIKIHVkcF9wcm90b2NvbF9zZWxlY3Q9Im5l dHdvcmsiCiB1ZHBsaXRlX3Byb3RvY29sX3NlbGVjdD0ibmV0d29yayIKIHVuaXhfcHJvdG9jb2xf ZGVwcz0ic3lzX3VuX2giCkBAIC03MTkyLDYgKzcxOTYsMTQgQEAgZW5hYmxlZCBya21wcCAgICAg ICAgICAgICAmJiB7IHJlcXVpcmVfcGtnX2NvbmZpZyBya21wcCByb2NrY2hpcF9tcHAgIHJvY2tj aGlwL3IKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogZW5hYmxlZCB2YXBvdXJzeW50 aCAgICAgICAmJiByZXF1aXJlX2hlYWRlcnMgInZhcG91cnN5bnRoL1ZTU2NyaXB0NC5oIHZhcG91 cnN5bnRoL1ZhcG91clN5bnRoNC5oIgogCitlbmFibGVkIG9wZW5zc2wgICAgICAgICAgICAmJiB7 CisgICAgZW5hYmxlZCB3aGlwX211eGVyICYmIHsKKyAgICAgICAgJHBrZ19jb25maWcgLS1leGlz dHMgLS1wcmludC1lcnJvcnMgIm9wZW5zc2wgPj0gMS4wLjFrIiB8fAorICAgICAgICByZXF1aXJl X3BrZ19jb25maWcgb3BlbnNzbCAib3BlbnNzbCA+PSAxLjAuMWsiIG9wZW5zc2wvc3NsLmggU1NM X2xpYnJhcnlfaW5pdCB8fAorICAgICAgICByZXF1aXJlX3BrZ19jb25maWcgb3BlbnNzbCAib3Bl bnNzbCA+PSAxLjAuMWsiIG9wZW5zc2wvc3NsLmggT1BFTlNTTF9pbml0X3NzbAorICAgIH0KK30K KwogCiBpZiBlbmFibGVkIGdjcnlwdDsgdGhlbgogICAgIEdDUllQVF9DT05GSUc9IiR7Y3Jvc3Nf cHJlZml4fWxpYmdjcnlwdC1jb25maWciCmRpZmYgLS1naXQgYS9kb2MvbXV4ZXJzLnRleGkgYi9k b2MvbXV4ZXJzLnRleGkKaW5kZXggMDRiN2YyMGI3ZS4uMzBjOTVjM2QzNCAxMDA2NDQKLS0tIGEv ZG9jL211eGVycy50ZXhpCisrKyBiL2RvYy9tdXhlcnMudGV4aQpAQCAtMzg3OSw0ICszODc5LDUx IEBAIGZmbXBlZyAtZiB3ZWJtX2Rhc2hfbWFuaWZlc3QgLWkgdmlkZW8xLndlYm0gXAogICAgICAg IG1hbmlmZXN0LnhtbAogQGVuZCBleGFtcGxlCiAKK0BhbmNob3J7d2hpcH0KK0BzZWN0aW9uIHdo aXAKKworV2ViUlRDIChSZWFsLVRpbWUgQ29tbXVuaWNhdGlvbikgbXV4ZXIgdGhhdCBzdXBwb3J0 cyBzdWItc2Vjb25kIGxhdGVuY3kgc3RyZWFtaW5nIGFjY29yZGluZyB0bwordGhlIFdISVAgKFdl YlJUQy1IVFRQIGluZ2VzdGlvbiBwcm90b2NvbCkgc3BlY2lmaWNhdGlvbi4KKworSXQgdXNlcyBI VFRQIGFzIGEgc2lnbmFsaW5nIHByb3RvY29sIHRvIGV4Y2hhbmdlIFNEUCBjYXBhYmlsaXRpZXMg YW5kIElDRSBsaXRlIGNhbmRpZGF0ZXMuIFRoZW4sCitpdCB1c2VzIFNUVU4gYmluZGluZyByZXF1 ZXN0cyBhbmQgcmVzcG9uc2VzIHRvIGVzdGFibGlzaCBhIHNlc3Npb24gb3ZlciBVRFAuIFN1YnNl cXVlbnRseSwgaXQKK2luaXRpYXRlcyBhIERUTFMgaGFuZHNoYWtlIHRvIGV4Y2hhbmdlIHRoZSBT UlRQIGVuY3J5cHRpb24ga2V5cy4gTGFzdGx5LCBpdCBzcGxpdHMgdmlkZW8gYW5kCithdWRpbyBm cmFtZXMgaW50byBSVFAgcGFja2V0cyBhbmQgZW5jcnlwdHMgdGhlbSB1c2luZyBTUlRQLgorCitF bnN1cmUgdGhhdCB5b3UgdXNlIEguMjY0IHdpdGhvdXQgQiBmcmFtZXMgYW5kIE9wdXMgZm9yIHRo ZSBhdWRpbyBjb2RlYy4gRm9yIGV4YW1wbGUsIHRvIGNvbnZlcnQKK2FuIGlucHV0IGZpbGUgd2l0 aCBAY29tbWFuZHtmZm1wZWd9IHRvIFdlYlJUQzoKK0BleGFtcGxlCitmZm1wZWcgLXJlIC1pIGlu cHV0Lm1wNCAtYWNvZGVjIGxpYm9wdXMgLWFyIDQ4MDAwIC1hYyAyIFwKKyAgLXZjb2RlYyBsaWJ4 MjY0IC1wcm9maWxlOnYgYmFzZWxpbmUgLXR1bmUgemVyb2xhdGVuY3kgLXRocmVhZHMgMSAtYmYg MCBcCisgIC1mIHdoaXAgImh0dHA6Ly9sb2NhbGhvc3Q6MTk4NS9ydGMvdjEvd2hpcC8/YXBwPWxp dmUmc3RyZWFtPWxpdmVzdHJlYW0iCitAZW5kIGV4YW1wbGUKKworRm9yIHRoaXMgZXhhbXBsZSwg d2UgaGF2ZSBlbXBsb3llZCBsb3cgbGF0ZW5jeSBvcHRpb25zLCByZXN1bHRpbmcgaW4gYW4gZW5k LXRvLWVuZCBsYXRlbmN5IG9mCithcHByb3hpbWF0ZWx5IDE1MG1zLgorCitAc3Vic2VjdGlvbiBP cHRpb25zCisKK1RoaXMgbXV4ZXIgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBvcHRpb25zOgorCitA dGFibGUgQG9wdGlvbgorCitAaXRlbSBoYW5kc2hha2VfdGltZW91dCBAdmFye2ludGVnZXJ9CitT ZXQgdGhlIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIGZvciBJQ0UgYW5kIERUTFMgaGFuZHNoYWtl LgorRGVmYXVsdCB2YWx1ZSBpcyA1MDAwLgorCitAaXRlbSBwa3Rfc2l6ZSBAdmFye2ludGVnZXJ9 CitTZXQgdGhlIG1heGltdW0gc2l6ZSwgaW4gYnl0ZXMsIG9mIFJUUCBwYWNrZXRzIHRoYXQgc2Vu ZCBvdXQuCitEZWZhdWx0IHZhbHVlIGlzIDE1MDAuCisKK0BpdGVtIGF1dGhvcml6YXRpb24gQHZh cntzdHJpbmd9CitUaGUgb3B0aW9uYWwgQmVhcmVyIHRva2VuIGZvciBXSElQIEF1dGhvcml6YXRp b24uCisKK0BpdGVtIGNlcnRfZmlsZSBAdmFye3N0cmluZ30KK1RoZSBvcHRpb25hbCBjZXJ0aWZp Y2F0ZSBmaWxlIHBhdGggZm9yIERUTFMuCisKK0BpdGVtIGtleV9maWxlIEB2YXJ7c3RyaW5nfQor VGhlIG9wdGlvbmFsIHByaXZhdGUga2V5IGZpbGUgcGF0aCBmb3IgRFRMUy4KKworQGVuZCB0YWJs ZQorCiBAYyBtYW4gZW5kIE1VWEVSUwpkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvTWFrZWZpbGUg Yi9saWJhdmZvcm1hdC9NYWtlZmlsZQppbmRleCA2Yzk5OTJhZGFiLi45NmE2NDMwMTU4IDEwMDY0 NAotLS0gYS9saWJhdmZvcm1hdC9NYWtlZmlsZQorKysgYi9saWJhdmZvcm1hdC9NYWtlZmlsZQpA QCAtNjM3LDYgKzYzNyw3IEBAIE9CSlMtJChDT05GSUdfV0VCTV9DSFVOS19NVVhFUikgICAgICAg ICAgKz0gd2VibV9jaHVuay5vCiBPQkpTLSQoQ09ORklHX1dFQlBfTVVYRVIpICAgICAgICAgICAg ICAgICs9IHdlYnBlbmMubwogT0JKUy0kKENPTkZJR19XRUJWVFRfREVNVVhFUikgICAgICAgICAg ICArPSB3ZWJ2dHRkZWMubyBzdWJ0aXRsZXMubwogT0JKUy0kKENPTkZJR19XRUJWVFRfTVVYRVIp ICAgICAgICAgICAgICArPSB3ZWJ2dHRlbmMubworT0JKUy0kKENPTkZJR19XSElQX01VWEVSKSAg ICAgICAgICAgICAgICArPSB3aGlwLm8gYXZjLm8gaHR0cC5vIHNydHAubyB0bHNfb3BlbnNzbC5v CiBPQkpTLSQoQ09ORklHX1dTQVVEX0RFTVVYRVIpICAgICAgICAgICAgICs9IHdlc3R3b29kX2F1 ZC5vCiBPQkpTLSQoQ09ORklHX1dTQVVEX01VWEVSKSAgICAgICAgICAgICAgICs9IHdlc3R3b29k X2F1ZGVuYy5vCiBPQkpTLSQoQ09ORklHX1dTRF9ERU1VWEVSKSAgICAgICAgICAgICAgICs9IHdz ZGRlYy5vIHJhd2RlYy5vCmRpZmYgLS1naXQgYS9saWJhdmZvcm1hdC9hbGxmb3JtYXRzLmMgYi9s aWJhdmZvcm1hdC9hbGxmb3JtYXRzLmMKaW5kZXggYjVhMjNmOWMxNy4uM2U1ZjEyN2RjMSAxMDA2 NDQKLS0tIGEvbGliYXZmb3JtYXQvYWxsZm9ybWF0cy5jCisrKyBiL2xpYmF2Zm9ybWF0L2FsbGZv cm1hdHMuYwpAQCAtNTE3LDYgKzUxNyw3IEBAIGV4dGVybiBjb25zdCBGRk91dHB1dEZvcm1hdCBm Zl93ZWJwX211eGVyOwogZXh0ZXJuIGNvbnN0IEZGSW5wdXRGb3JtYXQgIGZmX3dlYnZ0dF9kZW11 eGVyOwogZXh0ZXJuIGNvbnN0IEZGT3V0cHV0Rm9ybWF0IGZmX3dlYnZ0dF9tdXhlcjsKIGV4dGVy biBjb25zdCBGRklucHV0Rm9ybWF0ICBmZl93c2F1ZF9kZW11eGVyOworZXh0ZXJuIGNvbnN0IEZG T3V0cHV0Rm9ybWF0IGZmX3doaXBfbXV4ZXI7CiBleHRlcm4gY29uc3QgRkZPdXRwdXRGb3JtYXQg ZmZfd3NhdWRfbXV4ZXI7CiBleHRlcm4gY29uc3QgRkZJbnB1dEZvcm1hdCAgZmZfd3NkX2RlbXV4 ZXI7CiBleHRlcm4gY29uc3QgRkZJbnB1dEZvcm1hdCAgZmZfd3N2cWFfZGVtdXhlcjsKZGlmZiAt LWdpdCBhL2xpYmF2Zm9ybWF0L2F2aW8uYyBiL2xpYmF2Zm9ybWF0L2F2aW8uYwppbmRleCBkMTA5 ZjNhZGZmLi5iMTQ2YWM5ZjE5IDEwMDY0NAotLS0gYS9saWJhdmZvcm1hdC9hdmlvLmMKKysrIGIv bGliYXZmb3JtYXQvYXZpby5jCkBAIC0zMzksOCArMzM5LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVj dCBVUkxQcm90b2NvbCAqdXJsX2ZpbmRfcHJvdG9jb2woY29uc3QgY2hhciAqZmlsZW5hbWUpCiAg ICAgICAgIH0KICAgICB9CiAgICAgYXZfZnJlZXAoJnByb3RvY29scyk7Ci0gICAgaWYgKGF2X3N0 cnN0YXJ0KGZpbGVuYW1lLCAiaHR0cHM6IiwgTlVMTCkgfHwgYXZfc3Ryc3RhcnQoZmlsZW5hbWUs ICJ0bHM6IiwgTlVMTCkpCi0gICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfV0FSTklORywgImh0 dHBzIHByb3RvY29sIG5vdCBmb3VuZCwgcmVjb21waWxlIEZGbXBlZyB3aXRoICIKKyAgICBpZiAo YXZfc3Ryc3RhcnQoZmlsZW5hbWUsICJodHRwczoiLCBOVUxMKSB8fCBhdl9zdHJzdGFydChmaWxl bmFtZSwgInRsczoiLCBOVUxMKSB8fAorICAgICAgICBhdl9zdHJzdGFydChmaWxlbmFtZSwgImR0 bHM6IiwgTlVMTCkpCisgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfV0FSTklORywgImh0dHBz IG9yIGR0bHMgcHJvdG9jb2wgbm90IGZvdW5kLCByZWNvbXBpbGUgRkZtcGVnIHdpdGggIgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVuc3NsLCBnbnV0bHMgb3Igc2Vj dXJldHJhbnNwb3J0IGVuYWJsZWQuXG4iKTsKIAogICAgIHJldHVybiBOVUxMOwpkaWZmIC0tZ2l0 IGEvbGliYXZmb3JtYXQvaHR0cC5jIGIvbGliYXZmb3JtYXQvaHR0cC5jCmluZGV4IGY3YjJhOGEw MjkuLmZmNjNjMjU5NjkgMTAwNjQ0Ci0tLSBhL2xpYmF2Zm9ybWF0L2h0dHAuYworKysgYi9saWJh dmZvcm1hdC9odHRwLmMKQEAgLTU2Miw2ICs1NjIsMTIgQEAgaW50IGZmX2h0dHBfYXZlcnJvcihp bnQgc3RhdHVzX2NvZGUsIGludCBkZWZhdWx0X2F2ZXJyb3IpCiAgICAgICAgIHJldHVybiBkZWZh dWx0X2F2ZXJyb3I7CiB9CiAKK2NvbnN0IGNoYXIqIGZmX2h0dHBfZ2V0X25ld19sb2NhdGlvbihV UkxDb250ZXh0ICpoKQoreworICAgIEhUVFBDb250ZXh0ICpzID0gaC0+cHJpdl9kYXRhOworICAg IHJldHVybiBzLT5uZXdfbG9jYXRpb247Cit9CisKIHN0YXRpYyBpbnQgaHR0cF93cml0ZV9yZXBs eShVUkxDb250ZXh0KiBoLCBpbnQgc3RhdHVzX2NvZGUpCiB7CiAgICAgaW50IHJldCwgYm9keSA9 IDAsIHJlcGx5X2NvZGUsIG1lc3NhZ2VfbGVuOwpkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvaHR0 cC5oIGIvbGliYXZmb3JtYXQvaHR0cC5oCmluZGV4IDVmNjUwZWYxNDMuLmQxYjY5MTgyNmIgMTAw NjQ0Ci0tLSBhL2xpYmF2Zm9ybWF0L2h0dHAuaAorKysgYi9saWJhdmZvcm1hdC9odHRwLmgKQEAg LTYyLDQgKzYyLDYgQEAgaW50IGZmX2h0dHBfZG9fbmV3X3JlcXVlc3QyKFVSTENvbnRleHQgKmgs IGNvbnN0IGNoYXIgKnVyaSwgQVZEaWN0aW9uYXJ5ICoqb3B0aW8KIAogaW50IGZmX2h0dHBfYXZl cnJvcihpbnQgc3RhdHVzX2NvZGUsIGludCBkZWZhdWx0X2F2ZXJyb3IpOwogCitjb25zdCBjaGFy KiBmZl9odHRwX2dldF9uZXdfbG9jYXRpb24oVVJMQ29udGV4dCAqaCk7CisKICNlbmRpZiAvKiBB VkZPUk1BVF9IVFRQX0ggKi8KZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L3Byb3RvY29scy5jIGIv bGliYXZmb3JtYXQvcHJvdG9jb2xzLmMKaW5kZXggOTNhNmQ2NzI2MS4uZDM5NDQ1NGQ0MSAxMDA2 NDQKLS0tIGEvbGliYXZmb3JtYXQvcHJvdG9jb2xzLmMKKysrIGIvbGliYXZmb3JtYXQvcHJvdG9j b2xzLmMKQEAgLTYyLDYgKzYyLDcgQEAgZXh0ZXJuIGNvbnN0IFVSTFByb3RvY29sIGZmX3N1YmZp bGVfcHJvdG9jb2w7CiBleHRlcm4gY29uc3QgVVJMUHJvdG9jb2wgZmZfdGVlX3Byb3RvY29sOwog ZXh0ZXJuIGNvbnN0IFVSTFByb3RvY29sIGZmX3RjcF9wcm90b2NvbDsKIGV4dGVybiBjb25zdCBV UkxQcm90b2NvbCBmZl90bHNfcHJvdG9jb2w7CitleHRlcm4gY29uc3QgVVJMUHJvdG9jb2wgZmZf ZHRsc19wcm90b2NvbDsKIGV4dGVybiBjb25zdCBVUkxQcm90b2NvbCBmZl91ZHBfcHJvdG9jb2w7 CiBleHRlcm4gY29uc3QgVVJMUHJvdG9jb2wgZmZfdWRwbGl0ZV9wcm90b2NvbDsKIGV4dGVybiBj b25zdCBVUkxQcm90b2NvbCBmZl91bml4X3Byb3RvY29sOwpkaWZmIC0tZ2l0IGEvbGliYXZmb3Jt YXQvc3J0cC5oIGIvbGliYXZmb3JtYXQvc3J0cC5oCmluZGV4IDMxODlmOGY1NGIuLjM1MjI0Y2M5 YmEgMTAwNjQ0Ci0tLSBhL2xpYmF2Zm9ybWF0L3NydHAuaAorKysgYi9saWJhdmZvcm1hdC9zcnRw LmgKQEAgLTI3LDcgKzI3LDcgQEAKIHN0cnVjdCBBVkFFUzsKIHN0cnVjdCBBVkhNQUM7CiAKLXN0 cnVjdCBTUlRQQ29udGV4dCB7Cit0eXBlZGVmIHN0cnVjdCBTUlRQQ29udGV4dCB7CiAgICAgc3Ry dWN0IEFWQUVTICphZXM7CiAgICAgc3RydWN0IEFWSE1BQyAqaG1hYzsKICAgICBpbnQgcnRwX2ht YWNfc2l6ZSwgcnRjcF9obWFjX3NpemU7CkBAIC00MCw3ICs0MCw3IEBAIHN0cnVjdCBTUlRQQ29u dGV4dCB7CiAgICAgdWludDMyX3Qgcm9jOwogCiAgICAgdWludDMyX3QgcnRjcF9pbmRleDsKLX07 Cit9IFNSVFBDb250ZXh0OwogCiBpbnQgZmZfc3J0cF9zZXRfY3J5cHRvKHN0cnVjdCBTUlRQQ29u dGV4dCAqcywgY29uc3QgY2hhciAqc3VpdGUsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IGNoYXIgKnBhcmFtcyk7CmRpZmYgLS1naXQgYS9saWJhdmZvcm1hdC90bHMuYyBiL2xpYmF2Zm9y bWF0L3Rscy5jCmluZGV4IGY5NmZmNjIxNWQuLmUwNmI3MDIyYmYgMTAwNjQ0Ci0tLSBhL2xpYmF2 Zm9ybWF0L3Rscy5jCisrKyBiL2xpYmF2Zm9ybWF0L3Rscy5jCkBAIC0xLDYgKzEsNyBAQAogLyoK LSAqIFRMUy9TU0wgUHJvdG9jb2wKKyAqIFRMUy9EVExTL1NTTCBQcm90b2NvbAogICogQ29weXJp Z2h0IChjKSAyMDExIE1hcnRpbiBTdG9yc2pvCisgKiBDb3B5cmlnaHQgKGMpIDIwMjUgSmFjayBM YXUKICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCiAgKgpAQCAtMjAsNiArMjEs NyBAQAogICovCiAKICNpbmNsdWRlICJhdmZvcm1hdC5oIgorI2luY2x1ZGUgImludGVybmFsLmgi CiAjaW5jbHVkZSAibmV0d29yay5oIgogI2luY2x1ZGUgIm9zX3N1cHBvcnQuaCIKICNpbmNsdWRl ICJ1cmwuaCIKQEAgLTkzLDcgKzk1LDcgQEAgaW50IGZmX3Rsc19vcGVuX3VuZGVybHlpbmcoVExT U2hhcmVkICpjLCBVUkxDb250ZXh0ICpwYXJlbnQsIGNvbnN0IGNoYXIgKnVyaSwgQVYKICAgICAg ICAgICAgIGMtPmxpc3RlbiA9IDE7CiAgICAgfQogCi0gICAgZmZfdXJsX2pvaW4oYnVmLCBzaXpl b2YoYnVmKSwgInRjcCIsIE5VTEwsIGMtPnVuZGVybHlpbmdfaG9zdCwgcG9ydCwgIiVzIiwgcCk7 CisgICAgZmZfdXJsX2pvaW4oYnVmLCBzaXplb2YoYnVmKSwgYy0+aXNfZHRscyA/ICJ1ZHAiIDog InRjcCIsIE5VTEwsIGMtPnVuZGVybHlpbmdfaG9zdCwgcG9ydCwgIiVzIiwgcCk7CiAKICAgICBo aW50cy5haV9mbGFncyA9IEFJX05VTUVSSUNIT1NUOwogICAgIGlmICghZ2V0YWRkcmluZm8oYy0+ dW5kZXJseWluZ19ob3N0LCBOVUxMLCAmaGludHMsICZhaSkpIHsKQEAgLTEyNCw3ICsxMjYsNjUg QEAgaW50IGZmX3Rsc19vcGVuX3VuZGVybHlpbmcoVExTU2hhcmVkICpjLCBVUkxDb250ZXh0ICpw YXJlbnQsIGNvbnN0IGNoYXIgKnVyaSwgQVYKICAgICB9CiAKICAgICBmcmVlZW52X3V0ZjgoZW52 X2h0dHBfcHJveHkpOwotICAgIHJldHVybiBmZnVybF9vcGVuX3doaXRlbGlzdCgmYy0+dGNwLCBi dWYsIEFWSU9fRkxBR19SRUFEX1dSSVRFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmcGFyZW50LT5pbnRlcnJ1cHRfY2FsbGJhY2ssIG9wdGlvbnMsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHBhcmVudC0+cHJvdG9jb2xfd2hpdGVsaXN0LCBwYXJlbnQtPnByb3Rv Y29sX2JsYWNrbGlzdCwgcGFyZW50KTsKKyAgICBpZiAoYy0+aXNfZHRscykgeworICAgICAgICBh dl9kaWN0X3NldF9pbnQob3B0aW9ucywgImNvbm5lY3QiLCAxLCAwKTsKKyAgICAgICAgYXZfZGlj dF9zZXRfaW50KG9wdGlvbnMsICJmaWZvX3NpemUiLCAwLCAwKTsKKyAgICAgICAgLyogU2V0IHRo ZSBtYXggcGFja2V0IHNpemUgdG8gdGhlIGJ1ZmZlciBzaXplLiAqLworICAgICAgICBhdl9kaWN0 X3NldF9pbnQob3B0aW9ucywgInBrdF9zaXplIiwgYy0+bXR1LCAwKTsKKyAgICB9CisgICAgcmV0 ID0gZmZ1cmxfb3Blbl93aGl0ZWxpc3QoYy0+aXNfZHRscyA/ICZjLT51ZHAgOiAmYy0+dGNwLCBi dWYsIEFWSU9fRkxBR19SRUFEX1dSSVRFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICZwYXJlbnQtPmludGVycnVwdF9jYWxsYmFjaywgb3B0aW9ucywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBwYXJlbnQtPnByb3RvY29sX3doaXRlbGlzdCwgcGFyZW50LT5wcm90b2Nv bF9ibGFja2xpc3QsIHBhcmVudCk7CisgICAgaWYgKGMtPmlzX2R0bHMpIHsKKyAgICAgICAgaWYg KHJldCA8IDApIHsKKyAgICAgICAgICAgIGF2X2xvZyhjLCBBVl9MT0dfRVJST1IsICJXSElQOiBG YWlsZWQgdG8gY29ubmVjdCB1ZHA6Ly8lczolZFxuIiwgYy0+dW5kZXJseWluZ19ob3N0LCBwb3J0 KTsKKyAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgIH0KKyAgICAgICAgLyogTWFrZSB0 aGUgc29ja2V0IG5vbi1ibG9ja2luZywgc2V0IHRvIFJFQUQgYW5kIFdSSVRFIG1vZGUgYWZ0ZXIg Y29ubmVjdGVkICovCisgICAgICAgIGZmX3NvY2tldF9ub25ibG9jayhmZnVybF9nZXRfZmlsZV9o YW5kbGUoYy0+dWRwKSwgMSk7CisgICAgICAgIGMtPnVkcC0+ZmxhZ3MgfD0gQVZJT19GTEFHX1JF QUQgfCBBVklPX0ZMQUdfTk9OQkxPQ0s7CisgICAgfQorICAgIHJldHVybiByZXQ7CiB9CisKKy8q KgorICogUmVhZCBhbGwgZGF0YSBmcm9tIHRoZSBnaXZlbiBVUkwgdXJsIGFuZCBzdG9yZSBpdCBp biB0aGUgZ2l2ZW4gYnVmZmVyIGJwLgorICovCitpbnQgZmZfdXJsX3JlYWRfYWxsKGNvbnN0IGNo YXIgKnVybCwgQVZCUHJpbnQgKmJwKQoreworICAgIGludCByZXQgPSAwOworICAgIEFWRGljdGlv bmFyeSAqb3B0cyA9IE5VTEw7CisgICAgVVJMQ29udGV4dCAqdWMgPSBOVUxMOworICAgIGNoYXIg YnVmW01BWF9VUkxfU0laRV07CisKKyAgICByZXQgPSBmZnVybF9vcGVuX3doaXRlbGlzdCgmdWMs IHVybCwgQVZJT19GTEFHX1JFQUQsIE5VTEwsICZvcHRzLCBOVUxMLCBOVUxMLCBOVUxMKTsKKyAg ICBpZiAocmV0IDwgMCkgeworICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiVExT OiBGYWlsZWQgdG8gb3BlbiB1cmwgJXNcbiIsIHVybCk7CisgICAgICAgIGdvdG8gZW5kOworICAg IH0KKworICAgIHdoaWxlICgxKSB7CisgICAgICAgIHJldCA9IGZmdXJsX3JlYWQodWMsIGJ1Ziwg c2l6ZW9mKGJ1ZikpOworICAgICAgICBpZiAocmV0ID09IEFWRVJST1JfRU9GKSB7CisgICAgICAg ICAgICAvKiBSZXNldCB0aGUgZXJyb3IgYmVjYXVzZSB3ZSByZWFkIGFsbCByZXNwb25zZSBhcyBh bnN3ZXIgdXRpbCBFT0YuICovCisgICAgICAgICAgICByZXQgPSAwOworICAgICAgICAgICAgYnJl YWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJldCA8PSAwKSB7CisgICAgICAgICAgICBhdl9s b2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiVExTOiBGYWlsZWQgdG8gcmVhZCBmcm9tIHVybD0lcywg a2V5IGlzICVzXG4iLCB1cmwsIGJwLT5zdHIpOworICAgICAgICAgICAgZ290byBlbmQ7CisgICAg ICAgIH0KKworICAgICAgICBhdl9icHJpbnRmKGJwLCAiJS4qcyIsIHJldCwgYnVmKTsKKyAgICAg ICAgaWYgKCFhdl9icHJpbnRfaXNfY29tcGxldGUoYnApKSB7CisgICAgICAgICAgICBhdl9sb2co TlVMTCwgQVZfTE9HX0VSUk9SLCAiVExTOiBFeGNlZWQgbWF4IHNpemUgJS4qcywgJXNcbiIsIHJl dCwgYnVmLCBicC0+c3RyKTsKKyAgICAgICAgICAgIHJldCA9IEFWRVJST1IoRUlPKTsKKyAgICAg ICAgICAgIGdvdG8gZW5kOworICAgICAgICB9CisgICAgfQorCitlbmQ6CisgICAgZmZ1cmxfY2xv c2VwKCZ1Yyk7CisgICAgYXZfZGljdF9mcmVlKCZvcHRzKTsKKyAgICByZXR1cm4gcmV0OworfQpc IE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L3Rscy5o IGIvbGliYXZmb3JtYXQvdGxzLmgKaW5kZXggNmM2YWEwMWE5YS4uY2I2MjZmMTk3NyAxMDA2NDQK LS0tIGEvbGliYXZmb3JtYXQvdGxzLmgKKysrIGIvbGliYXZmb3JtYXQvdGxzLmgKQEAgLTEsNiAr MSw3IEBACiAvKgotICogVExTL1NTTCBQcm90b2NvbAorICogVExTL0RUTFMvU1NMIFByb3RvY29s CiAgKiBDb3B5cmlnaHQgKGMpIDIwMTEgTWFydGluIFN0b3Jzam8KKyAqIENvcHlyaWdodCAoYykg MjAyNSBKYWNrIExhdQogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KICAqCkBA IC0yMiwxMCArMjMsMjcgQEAKICNpZm5kZWYgQVZGT1JNQVRfVExTX0gKICNkZWZpbmUgQVZGT1JN QVRfVExTX0gKIAorI2luY2x1ZGUgImxpYmF2dXRpbC9icHJpbnQuaCIKICNpbmNsdWRlICJsaWJh dnV0aWwvb3B0LmgiCiAKICNpbmNsdWRlICJ1cmwuaCIKIAorLyoqCisgKiBNYXhpbXVtIHNpemUg bGltaXQgb2YgYSBjZXJ0aWZpY2F0ZSBhbmQgcHJpdmF0ZSBrZXkgc2l6ZS4KKyAqLworI2RlZmlu ZSBNQVhfQ0VSVElGSUNBVEVfU0laRSA4MTkyCisKK2VudW0gRFRMU1N0YXRlIHsKKyAgICBEVExT X1NUQVRFX05PTkUsCisKKyAgICAvKiBXaGV0aGVyIERUTFMgaGFuZHNoYWtlIGlzIGZpbmlzaGVk LiAqLworICAgIERUTFNfU1RBVEVfRklOSVNIRUQsCisgICAgLyogV2hldGhlciBEVExTIHNlc3Np b24gaXMgY2xvc2VkLiAqLworICAgIERUTFNfU1RBVEVfQ0xPU0VELAorICAgIC8qIFdoZXRoZXIg RFRMUyBoYW5kc2hha2UgaXMgZmFpbGVkLiAqLworICAgIERUTFNfU1RBVEVfRkFJTEVELAorfTsK KwogdHlwZWRlZiBzdHJ1Y3QgVExTU2hhcmVkIHsKICAgICBjaGFyICpjYV9maWxlOwogICAgIGlu dCB2ZXJpZnk7CkBAIC00MCw2ICs1OCwyNSBAQCB0eXBlZGVmIHN0cnVjdCBUTFNTaGFyZWQgewog ICAgIGludCBudW1lcmljaG9zdDsKIAogICAgIFVSTENvbnRleHQgKnRjcDsKKworICAgIGludCBp c19kdGxzOworCisgICAgZW51bSBEVExTU3RhdGUgc3RhdGU7CisKKyAgICBpbnQgdXNlX2V4dGVy bmFsX3VkcDsKKyAgICBVUkxDb250ZXh0ICp1ZHA7CisKKyAgICAvKiBUaGUgZmluZ2VycHJpbnQg b2YgY2VydGlmaWNhdGUsIHVzZWQgaW4gU0RQIG9mZmVyLiAqLworICAgIGNoYXIgKmZpbmdlcnBy aW50OworCisgICAgLyogVGhlIGNlcnRpZmljYXRlIGFuZCBwcml2YXRlIGtleSBjb250ZW50IHVz ZWQgZm9yIERUTFMgaGFuZHNoYWtlICovCisgICAgY2hhciogY2VydF9idWY7CisgICAgY2hhciog a2V5X2J1ZjsKKyAgICAvKioKKyAgICAgKiBUaGUgc2l6ZSBvZiBSVFAgcGFja2V0LCBzaG91bGQg Z2VuZXJhbGx5IGJlIHNldCB0byBNVFUuCisgICAgICogTm90ZSB0aGF0IHBpb24gcmVxdWlyZXMg YSBzbWFsbGVyIHZhbHVlLCBmb3IgZXhhbXBsZSwgMTIwMC4KKyAgICAgKi8KKyAgICBpbnQgbXR1 OwogfSBUTFNTaGFyZWQ7CiAKICNkZWZpbmUgVExTX09QVEZMIChBVl9PUFRfRkxBR19ERUNPRElO R19QQVJBTSB8IEFWX09QVF9GTEFHX0VOQ09ESU5HX1BBUkFNKQpAQCAtNTEsMTAgKzg4LDI3IEBA IHR5cGVkZWYgc3RydWN0IFRMU1NoYXJlZCB7CiAgICAgeyJrZXlfZmlsZSIsICAgIlByaXZhdGUg a2V5IGZpbGUiLCAgICAgICAgICAgICAgICAgICAgb2Zmc2V0b2YocHN0cnVjdCwgb3B0aW9uc19m aWVsZCAuIGtleV9maWxlKSwgIEFWX09QVF9UWVBFX1NUUklORywgLmZsYWdzID0gVExTX09QVEZM IH0sIFwKICAgICB7Imxpc3RlbiIsICAgICAiTGlzdGVuIGZvciBpbmNvbWluZyBjb25uZWN0aW9u cyIsICAgICBvZmZzZXRvZihwc3RydWN0LCBvcHRpb25zX2ZpZWxkIC4gbGlzdGVuKSwgICAgQVZf T1BUX1RZUEVfSU5ULCB7IC5pNjQgPSAwIH0sIDAsIDEsIC5mbGFncyA9IFRMU19PUFRGTCB9LCBc CiAgICAgeyJ2ZXJpZnlob3N0IiwgIlZlcmlmeSBhZ2FpbnN0IGEgc3BlY2lmaWMgaG9zdG5hbWUi LCAgb2Zmc2V0b2YocHN0cnVjdCwgb3B0aW9uc19maWVsZCAuIGhvc3QpLCAgICAgIEFWX09QVF9U WVBFX1NUUklORywgLmZsYWdzID0gVExTX09QVEZMIH0sIFwKLSAgICB7Imh0dHBfcHJveHkiLCAi U2V0IHByb3h5IHRvIHR1bm5lbCB0aHJvdWdoIiwgICAgICAgICBvZmZzZXRvZihwc3RydWN0LCBv cHRpb25zX2ZpZWxkIC4gaHR0cF9wcm94eSksIEFWX09QVF9UWVBFX1NUUklORywgLmZsYWdzID0g VExTX09QVEZMIH0KKyAgICB7Imh0dHBfcHJveHkiLCAiU2V0IHByb3h5IHRvIHR1bm5lbCB0aHJv dWdoIiwgICAgICAgICBvZmZzZXRvZihwc3RydWN0LCBvcHRpb25zX2ZpZWxkIC4gaHR0cF9wcm94 eSksIEFWX09QVF9UWVBFX1NUUklORywgLmZsYWdzID0gVExTX09QVEZMIH0sIFwKKyAgICB7InVz ZV9leHRlcm5hbF91ZHAiLCAiVXNlIGV4dGVybmFsIFVEUCBmcm9tIG11eGVyIG9yIGRlbXV4ZXIi LCBvZmZzZXRvZihwc3RydWN0LCBvcHRpb25zX2ZpZWxkIC4gdXNlX2V4dGVybmFsX3VkcCksIEFW X09QVF9UWVBFX0lOVCwgeyAuaTY0ID0gMH0sIDAsIDEsIC5mbGFncyA9IFRMU19PUFRGTCB9LCBc CisgICAgeyJtdHUiLCAiTWF4aW11bSBUcmFuc21pc3Npb24gVW5pdCIsIG9mZnNldG9mKHBzdHJ1 Y3QsIG9wdGlvbnNfZmllbGQgLiBtdHUpLCBBVl9PUFRfVFlQRV9JTlQsICB7IC5pNjQgPSAwfSwg SU5UNjRfTUlOLCBJTlQ2NF9NQVgsIC5mbGFncyA9IFRMU19PUFRGTH0sIFwKKyAgICB7ImZpbmdl cnByaW50IiwgIlRoZSBvcHRpb25hbCBmaW5nZXJwcmludCBmb3IgRFRMUyIsIG9mZnNldG9mKHBz dHJ1Y3QsIG9wdGlvbnNfZmllbGQgLiBmaW5nZXJwcmludCksIEFWX09QVF9UWVBFX1NUUklORywg LmZsYWdzID0gVExTX09QVEZMfSwgXAorICAgIHsiY2VydF9idWYiLCAiVGhlIG9wdGlvbmFsIGNl cnRpZmljYXRlIGJ1ZmZlciBmb3IgRFRMUyIsIG9mZnNldG9mKHBzdHJ1Y3QsIG9wdGlvbnNfZmll bGQgLiBjZXJ0X2J1ZiksIEFWX09QVF9UWVBFX1NUUklORywgLmZsYWdzID0gVExTX09QVEZMfSwg XAorICAgIHsia2V5X2J1ZiIsICJUaGUgb3B0aW9uYWwgcHJpdmF0ZSBrZXkgYnVmZmVyIGZvciBE VExTIiwgb2Zmc2V0b2YocHN0cnVjdCwgb3B0aW9uc19maWVsZCAuIGtleV9idWYpLCBBVl9PUFRf VFlQRV9TVFJJTkcsIC5mbGFncyA9IFRMU19PUFRGTH0KIAogaW50IGZmX3Rsc19vcGVuX3VuZGVy bHlpbmcoVExTU2hhcmVkICpjLCBVUkxDb250ZXh0ICpwYXJlbnQsIGNvbnN0IGNoYXIgKnVyaSwg QVZEaWN0aW9uYXJ5ICoqb3B0aW9ucyk7CiAKK2ludCBmZl91cmxfcmVhZF9hbGwoY29uc3QgY2hh ciAqdXJsLCBBVkJQcmludCAqYnApOworCitpbnQgZmZfZHRsc19zZXRfdWRwKFVSTENvbnRleHQg KmgsIFVSTENvbnRleHQgKnVkcCk7CisKK2ludCBmZl9kdGxzX2V4cG9ydF9tYXRlcmlhbHMoVVJM Q29udGV4dCAqaCwgY2hhciAqZHRsc19zcnRwX21hdGVyaWFscywgc2l6ZV90IG1hdGVyaWFsc19z eik7CisKK2ludCBmZl9kdGxzX3N0YXRlKFVSTENvbnRleHQgKmgpOworCitpbnQgZmZfc3NsX3Jl YWRfa2V5X2NlcnQoY2hhciAqa2V5X3VybCwgY2hhciAqY2VydF91cmwsIGNoYXIgKmtleV9idWYs IHNpemVfdCBrZXlfc3osIGNoYXIgKmNlcnRfYnVmLCBzaXplX3QgY2VydF9zeiwgY2hhciAqKmZp bmdlcnByaW50KTsKKworaW50IGZmX3NzbF9nZW5fa2V5X2NlcnQoY2hhciAqa2V5X2J1Ziwgc2l6 ZV90IGtleV9zeiwgY2hhciAqY2VydF9idWYsIHNpemVfdCBjZXJ0X3N6LCBjaGFyICoqZmluZ2Vy cHJpbnQpOworCiB2b2lkIGZmX2dudXRsc19pbml0KHZvaWQpOwogdm9pZCBmZl9nbnV0bHNfZGVp bml0KHZvaWQpOwogCmRpZmYgLS1naXQgYS9saWJhdmZvcm1hdC90bHNfb3BlbnNzbC5jIGIvbGli YXZmb3JtYXQvdGxzX29wZW5zc2wuYwppbmRleCA4YjBjZjllZmIyLi5iNTg5ZDVkOTBhIDEwMDY0 NAotLS0gYS9saWJhdmZvcm1hdC90bHNfb3BlbnNzbC5jCisrKyBiL2xpYmF2Zm9ybWF0L3Rsc19v cGVuc3NsLmMKQEAgLTEsNiArMSw3IEBACiAvKgotICogVExTL1NTTCBQcm90b2NvbAorICogVExT L0RUTFMvU1NMIFByb3RvY29sCiAgKiBDb3B5cmlnaHQgKGMpIDIwMTEgTWFydGluIFN0b3Jzam8K KyAqIENvcHlyaWdodCAoYykgMjAyNSBKYWNrIExhdQogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0 IG9mIEZGbXBlZy4KICAqCkBAIC0xOSw4ICsyMCwxMCBAQAogICogRm91bmRhdGlvbiwgSW5jLiwg NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVT QQogICovCiAKKyNpbmNsdWRlICJsaWJhdnV0aWwvbWVtLmgiCiAjaW5jbHVkZSAibmV0d29yay5o IgogI2luY2x1ZGUgIm9zX3N1cHBvcnQuaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvcmFuZG9tX3Nl ZWQuaCIKICNpbmNsdWRlICJ1cmwuaCIKICNpbmNsdWRlICJ0bHMuaCIKICNpbmNsdWRlICJsaWJh dnV0aWwvb3B0LmgiCkBAIC0yOSw2ICszMiw0MzYgQEAKICNpbmNsdWRlIDxvcGVuc3NsL3NzbC5o PgogI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CiAKKy8qKgorICogUmV0dXJucyBhIGhlYXDigJBh bGxvY2F0ZWQgbnVsbOKAkHRlcm1pbmF0ZWQgc3RyaW5nIGNvbnRhaW5pbmcKKyAqIHRoZSBQRU3i gJBlbmNvZGVkIHB1YmxpYyBrZXkuICBDYWxsZXIgbXVzdCBmcmVlLgorICovCitzdGF0aWMgY2hh ciAqcGtleV90b19wZW1fc3RyaW5nKEVWUF9QS0VZICpwa2V5KSB7CisgICAgQklPICAgICAgICAq bWVtID0gTlVMTDsKKyAgICBCVUZfTUVNICAgICpicHRyID0gTlVMTDsKKyAgICBjaGFyICAgICAg ICpwZW1fc3RyID0gTlVMTDsKKworICAgIC8vIENyZWF0ZSBhIG1lbW9yeSBCSU8KKyAgICBpZiAo IShtZW0gPSBCSU9fbmV3KEJJT19zX21lbSgpKSkpCisgICAgICAgIGdvdG8gZXJyOworCisgICAg Ly8gV3JpdGUgcHVibGljIGtleSBpbiBQRU0gZm9ybQorICAgIGlmICghUEVNX3dyaXRlX2Jpb19Q cml2YXRlS2V5KG1lbSwgcGtleSwgTlVMTCwgTlVMTCwgMCwgTlVMTCwgTlVMTCkpCisgICAgICAg IGdvdG8gZXJyOworCisgICAgLy8gRXh0cmFjdCBwb2ludGVyL2xlbmd0aAorICAgIEJJT19nZXRf bWVtX3B0cihtZW0sICZicHRyKTsKKyAgICBpZiAoIWJwdHIgfHwgIWJwdHItPmxlbmd0aCkKKyAg ICAgICAgZ290byBlcnI7CisKKyAgICAvLyBBbGxvY2F0ZSBzdHJpbmcgKCsxIGZvciBOVUwpCisg ICAgcGVtX3N0ciA9IGF2X21hbGxvYyhicHRyLT5sZW5ndGggKyAxKTsKKyAgICBpZiAoIXBlbV9z dHIpCisgICAgICAgIGdvdG8gZXJyOworCisgICAgLy8gQ29weSBkYXRhICYgTlVM4oCQdGVybWlu YXRlCisgICAgbWVtY3B5KHBlbV9zdHIsIGJwdHItPmRhdGEsIGJwdHItPmxlbmd0aCk7CisgICAg cGVtX3N0clticHRyLT5sZW5ndGhdID0gJ1wwJzsKKworY2xlYW51cDoKKyAgICBCSU9fZnJlZSht ZW0pOworICAgIHJldHVybiBwZW1fc3RyOworCitlcnI6CisgICAgLy8gZXJyb3IgcGF0aDogZnJl ZSBhbmQgcmV0dXJuIE5VTEwKKyAgICBmcmVlKHBlbV9zdHIpOworICAgIHBlbV9zdHIgPSBOVUxM OworICAgIGdvdG8gY2xlYW51cDsKK30KKworLyoqCisgKiBTZXJpYWxpemUgYW4gWDUwOSBjZXJ0 aWZpY2F0ZSB0byBhIGF2X21hbGxvY+KAmWQgUEVNIHN0cmluZy4KKyAqIENhbGxlciBtdXN0IGZy ZWUgdGhlIHJldHVybmVkIHBvaW50ZXIuCisgKi8KK3N0YXRpYyBjaGFyICpjZXJ0X3RvX3BlbV9z dHJpbmcoWDUwOSAqY2VydCkKK3sKKyAgICBCSU8gICAgICptZW0gPSBCSU9fbmV3KEJJT19zX21l bSgpKTsKKyAgICBCVUZfTUVNICpicHRyID0gTlVMTDsKKyAgICBjaGFyICAgICpvdXQgPSBOVUxM OworCisgICAgaWYgKCFtZW0pIGdvdG8gZXJyOworCisgICAgLyogV3JpdGUgdGhlIFBFTSBjZXJ0 aWZpY2F0ZSAqLworICAgIGlmICghUEVNX3dyaXRlX2Jpb19YNTA5KG1lbSwgY2VydCkpCisgICAg ICAgIGdvdG8gZXJyOworCisgICAgQklPX2dldF9tZW1fcHRyKG1lbSwgJmJwdHIpOworICAgIGlm ICghYnB0ciB8fCAhYnB0ci0+bGVuZ3RoKSBnb3RvIGVycjsKKworICAgIG91dCA9IGF2X21hbGxv YyhicHRyLT5sZW5ndGggKyAxKTsKKyAgICBpZiAoIW91dCkgZ290byBlcnI7CisKKyAgICBtZW1j cHkob3V0LCBicHRyLT5kYXRhLCBicHRyLT5sZW5ndGgpOworICAgIG91dFticHRyLT5sZW5ndGhd ID0gJ1wwJzsKKworY2xlYW51cDoKKyAgICBCSU9fZnJlZShtZW0pOworICAgIHJldHVybiBvdXQ7 CisKK2VycjoKKyAgICBmcmVlKG91dCk7CisgICAgb3V0ID0gTlVMTDsKKyAgICBnb3RvIGNsZWFu dXA7Cit9CisKKworLyoqCisgKiBHZW5lcmF0ZSBhIFNIQS0yNTYgZmluZ2VycHJpbnQgb2YgYW4g WC41MDkgY2VydGlmaWNhdGUuCisgKgorICogQHBhcmFtIGN0eCAgICAgICBBVkZvcm1hdENvbnRl eHQgZm9yIGxvZ2dpbmcgKGNhbiBiZSBOVUxMKQorICogQHBhcmFtIGNlcnQgICAgICBYNTA5IGNl cnRpZmljYXRlIHRvIGZpbmdlcnByaW50CisgKiBAcmV0dXJuICAgICAgICAgIE5ld2x5IGFsbG9j YXRlZCBmaW5nZXJwcmludCBzdHJpbmcgaW4gIkFBOkJCOkNDOuKApiIgZm9ybWF0LAorICogICAg ICAgICAgICAgICAgICBvciBOVUxMIG9uIGVycm9yIChsb2dzIHZpYSBhdl9sb2cgaWYgY3R4IGlz IG5vdCBOVUxMKS4KKyAqICAgICAgICAgICAgICAgICAgQ2FsbGVyIG11c3QgZnJlZSgpIHRoZSBy ZXR1cm5lZCBzdHJpbmcuCisgKi8KK3N0YXRpYyBjaGFyICpnZW5lcmF0ZV9maW5nZXJwcmludChY NTA5ICpjZXJ0KQoreworICAgIHVuc2lnbmVkIGNoYXIgbWRbRVZQX01BWF9NRF9TSVpFXTsKKyAg ICBpbnQgbiA9IDA7CisgICAgQVZCUHJpbnQgZmluZ2VycHJpbnQ7CisgICAgY2hhciAqcmVzdWx0 ID0gTlVMTDsKKyAgICBpbnQgaTsKKworICAgIC8qIFRvIHByZXZlbnQgYSBjcmFzaCBkdXJpbmcg Y2xlYW51cCwgYWx3YXlzIGluaXRpYWxpemUgaXQuICovCisgICAgYXZfYnByaW50X2luaXQoJmZp bmdlcnByaW50LCAwLCBBVl9CUFJJTlRfU0laRV9VTkxJTUlURUQpOworCisgICAgaWYgKFg1MDlf ZGlnZXN0KGNlcnQsIEVWUF9zaGEyNTYoKSwgbWQsICZuKSAhPSAxKSB7CisgICAgICAgIGF2X2xv ZyhOVUxMLCBBVl9MT0dfRVJST1IsICJUTFM6IEZhaWxlZCB0byBnZW5lcmF0ZSBmaW5nZXJwcmlu dCwgJXNcbiIsIEVSUl9lcnJvcl9zdHJpbmcoRVJSX2dldF9lcnJvcigpLCBOVUxMKSk7CisgICAg ICAgIGdvdG8gZW5kOworICAgIH0KKworICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKyAg ICAgICAgYXZfYnByaW50ZigmZmluZ2VycHJpbnQsICIlMDJYIiwgbWRbaV0pOworICAgICAgICBp ZiAoaSArIDEgPCBuKQorICAgICAgICAgICAgYXZfYnByaW50ZigmZmluZ2VycHJpbnQsICI6Iik7 CisgICAgfQorCisgICAgaWYgKCFmaW5nZXJwcmludC5zdHIgfHwgIXN0cmxlbihmaW5nZXJwcmlu dC5zdHIpKSB7CisgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJUTFM6IEZpbmdl cnByaW50IGlzIGVtcHR5XG4iKTsKKyAgICAgICAgZ290byBlbmQ7CisgICAgfQorCisgICAgcmVz dWx0ID0gYXZfc3RyZHVwKGZpbmdlcnByaW50LnN0cik7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAg ICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIlRMUzogT3V0IG9mIG1lbW9yeSBnZW5l cmF0aW5nIGZpbmdlcnByaW50XG4iKTsKKyAgICB9CisKK2VuZDoKKyAgICBhdl9icHJpbnRfZmlu YWxpemUoJmZpbmdlcnByaW50LCBOVUxMKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbnQg ZmZfc3NsX3JlYWRfa2V5X2NlcnQoY2hhciAqa2V5X3VybCwgY2hhciAqY2VydF91cmwsIGNoYXIg KmtleV9idWYsIHNpemVfdCBrZXlfc3osIGNoYXIgKmNlcnRfYnVmLCBzaXplX3QgY2VydF9zeiwg Y2hhciAqKmZpbmdlcnByaW50KQoreworICAgIGludCByZXQgPSAwOworICAgIEJJTyAqa2V5X2Ig PSBOVUxMLCAqY2VydF9iID0gTlVMTDsKKyAgICBBVkJQcmludCBrZXlfYnAsIGNlcnRfYnA7Cisg ICAgRVZQX1BLRVkgKnBrZXk7CisgICAgWDUwOSAqY2VydDsKKyAgICBjaGFyICprZXlfdGVtID0g TlVMTCwgKmNlcnRfdGVtID0gTlVMTDsKKworICAgIC8qIFRvIHByZXZlbnQgYSBjcmFzaCBkdXJp bmcgY2xlYW51cCwgYWx3YXlzIGluaXRpYWxpemUgaXQuICovCisgICAgYXZfYnByaW50X2luaXQo JmtleV9icCwgMSwgTUFYX0NFUlRJRklDQVRFX1NJWkUpOworICAgIGF2X2JwcmludF9pbml0KCZj ZXJ0X2JwLCAxLCBNQVhfQ0VSVElGSUNBVEVfU0laRSk7CisKKyAgICAvKiBSZWFkIGtleSBmaWxl LiAqLworICAgIHJldCA9IGZmX3VybF9yZWFkX2FsbChrZXlfdXJsLCAma2V5X2JwKTsKKyAgICBp ZiAocmV0IDwgMCkgeworICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiVExTOiBG YWlsZWQgdG8gb3BlbiBrZXkgZmlsZSAlc1xuIiwga2V5X3VybCk7CisgICAgICAgIGdvdG8gZW5k OworICAgIH0KKworICAgIGlmICghKGtleV9iID0gQklPX25ldyhCSU9fc19tZW0oKSkpKSB7Cisg ICAgICAgIHJldCA9IEFWRVJST1IoRU5PTUVNKTsKKyAgICAgICAgZ290byBlbmQ7CisgICAgfQor CisgICAgQklPX3dyaXRlKGtleV9iLCBrZXlfYnAuc3RyLCBrZXlfYnAubGVuKTsKKyAgICBwa2V5 ID0gUEVNX3JlYWRfYmlvX1ByaXZhdGVLZXkoa2V5X2IsIE5VTEwsIE5VTEwsIE5VTEwpOworICAg IGlmICghcGtleSkgeworICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiVExTOiBG YWlsZWQgdG8gcmVhZCBwcml2YXRlIGtleSBmcm9tICVzXG4iLCBrZXlfdXJsKTsKKyAgICAgICAg cmV0ID0gQVZFUlJPUihFSU8pOworICAgICAgICBnb3RvIGVuZDsKKyAgICB9CisKKyAgICAvKiBS ZWFkIGNlcnRpZmljYXRlLiAqLworICAgIHJldCA9IGZmX3VybF9yZWFkX2FsbChjZXJ0X3VybCwg JmNlcnRfYnApOworICAgIGlmIChyZXQgPCAwKSB7CisgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9M T0dfRVJST1IsICJUTFM6IEZhaWxlZCB0byBvcGVuIGNlcnQgZmlsZSAlc1xuIiwgY2VydF91cmwp OworICAgICAgICBnb3RvIGVuZDsKKyAgICB9CisKKyAgICBpZiAoIShjZXJ0X2IgPSBCSU9fbmV3 KEJJT19zX21lbSgpKSkpIHsKKyAgICAgICAgcmV0ID0gQVZFUlJPUihFTk9NRU0pOworICAgICAg ICBnb3RvIGVuZDsKKyAgICB9CisKKyAgICBCSU9fd3JpdGUoY2VydF9iLCBjZXJ0X2JwLnN0ciwg Y2VydF9icC5sZW4pOworICAgIGNlcnQgPSBQRU1fcmVhZF9iaW9fWDUwOShjZXJ0X2IsIE5VTEws IE5VTEwsIE5VTEwpOworICAgIGlmICghY2VydCkgeworICAgICAgICBhdl9sb2coTlVMTCwgQVZf TE9HX0VSUk9SLCAiVExTOiBGYWlsZWQgdG8gcmVhZCBjZXJ0aWZpY2F0ZSBmcm9tICVzXG4iLCBj ZXJ0X3VybCk7CisgICAgICAgIHJldCA9IEFWRVJST1IoRUlPKTsKKyAgICAgICAgZ290byBlbmQ7 CisgICAgfQorCisgICAga2V5X3RlbSA9IHBrZXlfdG9fcGVtX3N0cmluZyhwa2V5KTsKKyAgICBj ZXJ0X3RlbSA9IGNlcnRfdG9fcGVtX3N0cmluZyhjZXJ0KTsKKworICAgIHNucHJpbnRmKGtleV9i dWYsICBrZXlfc3osICAiJXMiLCBrZXlfdGVtKTsKKyAgICBzbnByaW50ZihjZXJ0X2J1ZiwgY2Vy dF9zeiwgIiVzIiwgY2VydF90ZW0pOworCisgICAgLyogR2VuZXJhdGUgZmluZ2VycHJpbnQuICov CisgICAgKmZpbmdlcnByaW50ID0gZ2VuZXJhdGVfZmluZ2VycHJpbnQoY2VydCk7CisgICAgaWYg KCEqZmluZ2VycHJpbnQpIHsKKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIlRM UzogRmFpbGVkIHRvIGdlbmVyYXRlIGZpbmdlcnByaW50IGZyb20gJXNcbiIsIGNlcnRfdXJsKTsK KyAgICAgICAgcmV0ID0gQVZFUlJPUihFSU8pOworICAgICAgICBnb3RvIGVuZDsKKyAgICB9CisK K2VuZDoKKyAgICBCSU9fZnJlZShrZXlfYik7CisgICAgYXZfYnByaW50X2ZpbmFsaXplKCZrZXlf YnAsIE5VTEwpOworICAgIEJJT19mcmVlKGNlcnRfYik7CisgICAgYXZfYnByaW50X2ZpbmFsaXpl KCZjZXJ0X2JwLCBOVUxMKTsKKyAgICBpZiAoa2V5X3RlbSkgYXZfZnJlZShrZXlfdGVtKTsKKyAg ICBpZiAoY2VydF90ZW0pIGF2X2ZyZWUoY2VydF90ZW0pOworICAgIHJldHVybiByZXQ7Cit9CisK K3N0YXRpYyBpbnQgb3BlbnNzbF9nZW5fcHJpdmF0ZV9rZXkoRVZQX1BLRVkgKipwa2V5LCBFQ19L RVkgKiplY2tleSkKK3sKKyAgICBpbnQgcmV0ID0gMDsKKworICAgIC8qKgorICAgICAqIE5vdGUg dGhhdCBzZWNwMjU2cjEgaW4gb3BlbnNzbCBpcyBjYWxsZWQgTklEX1g5XzYyX3ByaW1lMjU2djEg b3IgcHJpbWUyNTZ2MSBpbiBzdHJpbmcsCisgICAgICogbm90IE5JRF9zZWNwMjU2azEgb3Igc2Vj cDI1NmsxIGluIHN0cmluZy4KKyAgICAgKgorICAgICAqIFRPRE86IFNob3VsZCBjaG9vc2UgdGhl IGN1cnZlcyBpbiBDbGllbnRIZWxsby5zdXBwb3J0ZWRfZ3JvdXBzLCBmb3IgZXhhbXBsZToKKyAg ICAgKiAgICAgIFN1cHBvcnRlZCBHcm91cDogeDI1NTE5ICgweDAwMWQpCisgICAgICogICAgICBT dXBwb3J0ZWQgR3JvdXA6IHNlY3AyNTZyMSAoMHgwMDE3KQorICAgICAqICAgICAgU3VwcG9ydGVk IEdyb3VwOiBzZWNwMzg0cjEgKDB4MDAxOCkKKyAgICAgKi8KKyNpZiBPUEVOU1NMX1ZFUlNJT05f TlVNQkVSIDwgMHgzMDAwMDAwMEwgLyogT3BlblNTTCAzLjAgKi8KKyAgICBFQ19HUk9VUCAqZWNn cm91cCA9IE5VTEw7CisgICAgaW50IGN1cnZlID0gTklEX1g5XzYyX3ByaW1lMjU2djE7CisjZWxz ZQorICAgIGNvbnN0IGNoYXIgKmN1cnZlID0gU05fWDlfNjJfcHJpbWUyNTZ2MTsKKyNlbmRpZgor CisjaWYgT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA8IDB4MzAwMDAwMDBMIC8qIE9wZW5TU0wgMy4w ICovCisgICAgKnBrZXkgPSBFVlBfUEtFWV9uZXcoKTsKKyAgICAqZWNrZXkgPSBFQ19LRVlfbmV3 KCk7CisgICAgZWNncm91cCA9IEVDX0dST1VQX25ld19ieV9jdXJ2ZV9uYW1lKGN1cnZlKTsKKyAg ICBpZiAoIWVjZ3JvdXApIHsKKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIlRM UzogQ3JlYXRlIEVDIGdyb3VwIGJ5IGN1cnZlPSVkIGZhaWxlZCwgJXMiLCBjdXJ2ZSwgRVJSX2Vy cm9yX3N0cmluZyhFUlJfZ2V0X2Vycm9yKCksIE5VTEwpKTsKKyAgICAgICAgZ290byBlaW52YWxf ZW5kOworICAgIH0KKworI2lmIE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIgPCAweDEwMTAwMDAwTCAv LyB2MS4xLngKKyAgICAvKiBGb3Igb3BlbnNzbCAxLjAsIHdlIG11c3Qgc2V0IHRoZSBncm91cCBw YXJhbWV0ZXJzLCBzbyB0aGF0IGNlcnQgaXMgb2suICovCisgICAgRUNfR1JPVVBfc2V0X2FzbjFf ZmxhZyhlY2dyb3VwLCBPUEVOU1NMX0VDX05BTUVEX0NVUlZFKTsKKyNlbmRpZgorCisgICAgaWYg KEVDX0tFWV9zZXRfZ3JvdXAoKmVja2V5LCBlY2dyb3VwKSAhPSAxKSB7CisgICAgICAgIGF2X2xv ZyhOVUxMLCBBVl9MT0dfRVJST1IsICJUTFM6IEdlbmVyYXRlIHByaXZhdGUga2V5LCBFQ19LRVlf c2V0X2dyb3VwIGZhaWxlZCwgJXNcbiIsIEVSUl9lcnJvcl9zdHJpbmcoRVJSX2dldF9lcnJvcigp LCBOVUxMKSk7CisgICAgICAgIGdvdG8gZWludmFsX2VuZDsKKyAgICB9CisKKyAgICBpZiAoRUNf S0VZX2dlbmVyYXRlX2tleSgqZWNrZXkpICE9IDEpIHsKKyAgICAgICAgYXZfbG9nKE5VTEwsIEFW X0xPR19FUlJPUiwgIlRMUzogR2VuZXJhdGUgcHJpdmF0ZSBrZXksIEVDX0tFWV9nZW5lcmF0ZV9r ZXkgZmFpbGVkLCAlc1xuIiwgRVJSX2Vycm9yX3N0cmluZyhFUlJfZ2V0X2Vycm9yKCksIE5VTEwp KTsKKyAgICAgICAgZ290byBlaW52YWxfZW5kOworICAgIH0KKworICAgIGlmIChFVlBfUEtFWV9z ZXQxX0VDX0tFWSgqcGtleSwgKmVja2V5KSAhPSAxKSB7CisgICAgICAgIGF2X2xvZyhOVUxMLCBB Vl9MT0dfRVJST1IsICJUTFM6IEdlbmVyYXRlIHByaXZhdGUga2V5LCBFVlBfUEtFWV9zZXQxX0VD X0tFWSBmYWlsZWQsICVzXG4iLCBFUlJfZXJyb3Jfc3RyaW5nKEVSUl9nZXRfZXJyb3IoKSwgTlVM TCkpOworICAgICAgICBnb3RvIGVpbnZhbF9lbmQ7CisgICAgfQorI2Vsc2UKKyAgICAqcGtleSA9 IEVWUF9FQ19nZW4oY3VydmUpOworICAgIGlmICghKnBrZXkpIHsKKyAgICAgICAgYXZfbG9nKE5V TEwsIEFWX0xPR19FUlJPUiwgIlRMUzogR2VuZXJhdGUgcHJpdmF0ZSBrZXksIEVWUF9FQ19nZW4g Y3VydmU9JXMgZmFpbGVkLCAlc1xuIiwgY3VydmUsIEVSUl9lcnJvcl9zdHJpbmcoRVJSX2dldF9l cnJvcigpLCBOVUxMKSk7CisgICAgICAgIGdvdG8gZWludmFsX2VuZDsKKyAgICB9CisjZW5kaWYK KyAgICBnb3RvIGVuZDsKKworZWludmFsX2VuZDoKKyAgICByZXQgPSBBVkVSUk9SKEVJTlZBTCk7 CitlbmQ6CisjaWYgT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA8IDB4MzAwMDAwMDBMIC8qIE9wZW5T U0wgMy4wICovCisgICAgRUNfR1JPVVBfZnJlZShlY2dyb3VwKTsKKyNlbmRpZgorICAgIHJldHVy biByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb3BlbnNzbF9nZW5fY2VydGlmaWNhdGUoRVZQX1BLRVkg KnBrZXksIFg1MDkgKipjZXJ0LCBjaGFyICoqZmluZ2VycHJpbnQpCit7CisgICAgaW50IHJldCA9 IDAsIHNlcmlhbCwgZXhwaXJlX2RheTsKKyAgICBjb25zdCBjaGFyICphb3IgPSAibGF2ZiI7Cisg ICAgWDUwOV9OQU1FKiBzdWJqZWN0ID0gTlVMTDsKKworICAgICpjZXJ0PSBYNTA5X25ldygpOwor ICAgIGlmICghKmNlcnQpIHsKKyAgICAgICAgZ290byBlbm9tZW1fZW5kOworICAgIH0KKworICAg IC8vIFRPRE86IFN1cHBvcnQgbm9uLXNlbGYtc2lnbmVkIGNlcnRpZmljYXRlLCBmb3IgZXhhbXBs ZSwgbG9hZCBmcm9tIGEgZmlsZS4KKyAgICBzdWJqZWN0ID0gWDUwOV9OQU1FX25ldygpOworICAg IGlmICghc3ViamVjdCkgeworICAgICAgICBnb3RvIGVub21lbV9lbmQ7CisgICAgfQorCisgICAg c2VyaWFsID0gKGludClhdl9nZXRfcmFuZG9tX3NlZWQoKTsKKyAgICBpZiAoQVNOMV9JTlRFR0VS X3NldChYNTA5X2dldF9zZXJpYWxOdW1iZXIoKmNlcnQpLCBzZXJpYWwpICE9IDEpIHsKKyAgICAg ICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIlRMUzogRmFpbGVkIHRvIHNldCBzZXJpYWws ICVzXG4iLCBFUlJfZXJyb3Jfc3RyaW5nKEVSUl9nZXRfZXJyb3IoKSwgTlVMTCkpOworICAgICAg ICBnb3RvIGVpbnZhbF9lbmQ7CisgICAgfQorCisgICAgaWYgKFg1MDlfTkFNRV9hZGRfZW50cnlf YnlfdHh0KHN1YmplY3QsICJDTiIsIE1CU1RSSU5HX0FTQywgYW9yLCBzdHJsZW4oYW9yKSwgLTEs IDApICE9IDEpIHsKKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIlRMUzogRmFp bGVkIHRvIHNldCBDTiwgJXNcbiIsIEVSUl9lcnJvcl9zdHJpbmcoRVJSX2dldF9lcnJvcigpLCBO VUxMKSk7CisgICAgICAgIGdvdG8gZWludmFsX2VuZDsKKyAgICB9CisKKyAgICBpZiAoWDUwOV9z ZXRfaXNzdWVyX25hbWUoKmNlcnQsIHN1YmplY3QpICE9IDEpIHsKKyAgICAgICAgYXZfbG9nKE5V TEwsIEFWX0xPR19FUlJPUiwgIlRMUzogRmFpbGVkIHRvIHNldCBpc3N1ZXIsICVzXG4iLCBFUlJf ZXJyb3Jfc3RyaW5nKEVSUl9nZXRfZXJyb3IoKSwgTlVMTCkpOworICAgICAgICBnb3RvIGVpbnZh bF9lbmQ7CisgICAgfQorICAgIGlmIChYNTA5X3NldF9zdWJqZWN0X25hbWUoKmNlcnQsIHN1Ympl Y3QpICE9IDEpIHsKKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIlRMUzogRmFp bGVkIHRvIHNldCBzdWJqZWN0IG5hbWUsICVzXG4iLCBFUlJfZXJyb3Jfc3RyaW5nKEVSUl9nZXRf ZXJyb3IoKSwgTlVMTCkpOworICAgICAgICBnb3RvIGVpbnZhbF9lbmQ7CisgICAgfQorCisgICAg ZXhwaXJlX2RheSA9IDM2NTsKKyAgICBpZiAoIVg1MDlfZ210aW1lX2FkaihYNTA5X2dldF9ub3RC ZWZvcmUoKmNlcnQpLCAwKSkgeworICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAi VExTOiBGYWlsZWQgdG8gc2V0IG5vdEJlZm9yZSwgJXNcbiIsIEVSUl9lcnJvcl9zdHJpbmcoRVJS X2dldF9lcnJvcigpLCBOVUxMKSk7CisgICAgICAgIGdvdG8gZWludmFsX2VuZDsKKyAgICB9Cisg ICAgaWYgKCFYNTA5X2dtdGltZV9hZGooWDUwOV9nZXRfbm90QWZ0ZXIoKmNlcnQpLCA2MCo2MCoy NCpleHBpcmVfZGF5KSkgeworICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiVExT OiBGYWlsZWQgdG8gc2V0IG5vdEFmdGVyLCAlc1xuIiwgRVJSX2Vycm9yX3N0cmluZyhFUlJfZ2V0 X2Vycm9yKCksIE5VTEwpKTsKKyAgICAgICAgZ290byBlaW52YWxfZW5kOworICAgIH0KKworICAg IGlmIChYNTA5X3NldF92ZXJzaW9uKCpjZXJ0LCAyKSAhPSAxKSB7CisgICAgICAgIGF2X2xvZyhO VUxMLCBBVl9MT0dfRVJST1IsICJUTFM6IEZhaWxlZCB0byBzZXQgdmVyc2lvbiwgJXNcbiIsIEVS Ul9lcnJvcl9zdHJpbmcoRVJSX2dldF9lcnJvcigpLCBOVUxMKSk7CisgICAgICAgIGdvdG8gZWlu dmFsX2VuZDsKKyAgICB9CisKKyAgICBpZiAoWDUwOV9zZXRfcHVia2V5KCpjZXJ0LCBwa2V5KSAh PSAxKSB7CisgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJUTFM6IEZhaWxlZCB0 byBzZXQgcHVibGljIGtleSwgJXNcbiIsIEVSUl9lcnJvcl9zdHJpbmcoRVJSX2dldF9lcnJvcigp LCBOVUxMKSk7CisgICAgICAgIGdvdG8gZWludmFsX2VuZDsKKyAgICB9CisKKyAgICBpZiAoIVg1 MDlfc2lnbigqY2VydCwgcGtleSwgRVZQX3NoYTEoKSkpIHsKKyAgICAgICAgYXZfbG9nKE5VTEws IEFWX0xPR19FUlJPUiwgIlRMUzogRmFpbGVkIHRvIHNpZ24gY2VydGlmaWNhdGUsICVzXG4iLCBF UlJfZXJyb3Jfc3RyaW5nKEVSUl9nZXRfZXJyb3IoKSwgTlVMTCkpOworICAgICAgICBnb3RvIGVp bnZhbF9lbmQ7CisgICAgfQorCisgICAgKmZpbmdlcnByaW50ID0gZ2VuZXJhdGVfZmluZ2VycHJp bnQoKmNlcnQpOworICAgIGlmICghKmZpbmdlcnByaW50KSB7CisgICAgICAgIGdvdG8gZW5vbWVt X2VuZDsKKyAgICB9CisKKyAgICBnb3RvIGVuZDsKK2Vub21lbV9lbmQ6CisgICAgcmV0ID0gQVZF UlJPUihFTk9NRU0pOworICAgIGdvdG8gZW5kOworZWludmFsX2VuZDoKKyAgICByZXQgPSBBVkVS Uk9SKEVJTlZBTCk7CitlbmQ6CisgICAgWDUwOV9OQU1FX2ZyZWUoc3ViamVjdCk7CisgICAgLy9h dl9icHJpbnRfZmluYWxpemUoJmZpbmdlcnByaW50LCBOVUxMKTsKKyAgICByZXR1cm4gcmV0Owor fQorCitpbnQgZmZfc3NsX2dlbl9rZXlfY2VydChjaGFyICprZXlfYnVmLCBzaXplX3Qga2V5X3N6 LCBjaGFyICpjZXJ0X2J1Ziwgc2l6ZV90IGNlcnRfc3osIGNoYXIgKipmaW5nZXJwcmludCkKK3sK KyAgICBpbnQgcmV0ID0gMDsKKyAgICBFVlBfUEtFWSAqcGtleSA9IE5VTEw7CisgICAgRUNfS0VZ ICplY19rZXkgPSBOVUxMOworICAgIFg1MDkgKmNlcnQgPSBOVUxMOworICAgIGNoYXIgKmtleV90 ZW0gPSBOVUxMLCAqY2VydF90ZW0gPSBOVUxMOworCisgICAgcmV0ID0gb3BlbnNzbF9nZW5fcHJp dmF0ZV9rZXkoJnBrZXksICZlY19rZXkpOworICAgIGlmIChyZXQgPCAwKSBnb3RvIGVycm9yOwor CisgICAgcmV0ID0gb3BlbnNzbF9nZW5fY2VydGlmaWNhdGUocGtleSwgJmNlcnQsIGZpbmdlcnBy aW50KTsKKyAgICBpZiAocmV0IDwgMCkgZ290byBlcnJvcjsKKworICAgIGtleV90ZW0gPSBwa2V5 X3RvX3BlbV9zdHJpbmcocGtleSk7CisgICAgY2VydF90ZW0gPSBjZXJ0X3RvX3BlbV9zdHJpbmco Y2VydCk7CisKKyAgICBzbnByaW50ZihrZXlfYnVmLCAga2V5X3N6LCAgIiVzIiwga2V5X3RlbSk7 CisgICAgc25wcmludGYoY2VydF9idWYsIGNlcnRfc3osICIlcyIsIGNlcnRfdGVtKTsKKworICAg IGlmIChrZXlfdGVtKSBhdl9mcmVlKGtleV90ZW0pOworICAgIGlmIChjZXJ0X3RlbSkgYXZfZnJl ZShjZXJ0X3RlbSk7CitlcnJvcjoKKyAgICByZXR1cm4gcmV0OworfQorCisKKy8qKgorICogRGVz ZXJpYWxpemUgYSBQRU3igJBlbmNvZGVkIHByaXZhdGUgb3IgcHVibGljIGtleSBmcm9tIGEgTlVM LXRlcm1pbmF0ZWQgQyBzdHJpbmcuCisgKgorICogQHBhcmFtIHBlbV9zdHIgICBUaGUgUEVNIHRl eHQsIGUuZy4KKyAqICAgICAgICAgICAgICAgICAgIi0tLS0tQkVHSU4gUFJJVkFURSBLRVktLS0t LVxu4oCmXG4tLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tXG4iCisgKiBAcGFyYW0gaXNfcHJpdiAg IElmIG5vbi16ZXJvLCBwYXJzZSBhcyBhIFBSSVZBVEUga2V5OyBvdGhlcndpc2UsIHBhcnNlIGFz IGEgUFVCTElDIGtleS4KKyAqIEByZXR1cm4gICAgICAgICAgRVZQX1BLRVkqIG9uIHN1Y2Nlc3Mg KG11c3QgRVZQX1BLRVlfZnJlZSgpKSwgb3IgTlVMTCBvbiBlcnJvci4KKyAqLworc3RhdGljIEVW UF9QS0VZICpwa2V5X2Zyb21fcGVtX3N0cmluZyhjb25zdCBjaGFyICpwZW1fc3RyLCBpbnQgaXNf cHJpdikKK3sKKyAgICBCSU8gKm1lbSA9IEJJT19uZXdfbWVtX2J1ZihwZW1fc3RyLCAtMSk7Cisg ICAgaWYgKCFtZW0pIHsKKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIkJJT19u ZXdfbWVtX2J1ZiBmYWlsZWRcbiIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAg ICBFVlBfUEtFWSAqcGtleSA9IE5VTEw7CisgICAgaWYgKGlzX3ByaXYpIHsKKyAgICAgICAgcGtl eSA9IFBFTV9yZWFkX2Jpb19Qcml2YXRlS2V5KG1lbSwgTlVMTCwgTlVMTCwgTlVMTCk7CisgICAg fSBlbHNlIHsKKyAgICAgICAgcGtleSA9IFBFTV9yZWFkX2Jpb19QVUJLRVkobWVtLCBOVUxMLCBO VUxMLCBOVUxMKTsKKyAgICB9CisKKyAgICBpZiAoIXBrZXkpCisgICAgICAgIGF2X2xvZyhOVUxM LCBBVl9MT0dfRVJST1IsICJGYWlsZWQgdG8gcGFyc2UgJXMga2V5IGZyb20gc3RyaW5nXG4iLAor ICAgICAgICAgICAgICBpc19wcml2ID8gInByaXZhdGUiIDogInB1YmxpYyIpOworCisgICAgQklP X2ZyZWUobWVtKTsKKyAgICByZXR1cm4gcGtleTsKK30KKworLyoqCisgKiBEZXNlcmlhbGl6ZSBh IFBFTeKAkGVuY29kZWQgY2VydGlmaWNhdGUgZnJvbSBhIE5VTC10ZXJtaW5hdGVkIEMgc3RyaW5n LgorICoKKyAqIEBwYXJhbSBwZW1fc3RyICAgVGhlIFBFTSB0ZXh0LCBlLmcuCisgKiAgICAgICAg ICAgICAgICAgICItLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS1cbuKAplxuLS0tLS1FTkQgQ0VS VElGSUNBVEUtLS0tLVxuIgorICogQHJldHVybiAgICAgICAgICBYNTA5KiBvbiBzdWNjZXNzICht dXN0IFg1MDlfZnJlZSgpKSwgb3IgTlVMTCBvbiBlcnJvci4KKyAqLworc3RhdGljIFg1MDkgKmNl cnRfZnJvbV9wZW1fc3RyaW5nKGNvbnN0IGNoYXIgKnBlbV9zdHIpCit7CisgICAgQklPICptZW0g PSBCSU9fbmV3X21lbV9idWYocGVtX3N0ciwgLTEpOworICAgIGlmICghbWVtKSB7CisgICAgICAg IGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJCSU9fbmV3X21lbV9idWYgZmFpbGVkXG4iKTsK KyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgWDUwOSAqY2VydCA9IFBFTV9yZWFk X2Jpb19YNTA5KG1lbSwgTlVMTCwgTlVMTCwgTlVMTCk7CisgICAgaWYgKCFjZXJ0KSB7CisgICAg ICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJGYWlsZWQgdG8gcGFyc2UgY2VydGlmaWNh dGUgZnJvbSBzdHJpbmdcbiIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBC SU9fZnJlZShtZW0pOworICAgIHJldHVybiBjZXJ0OworfQorCisKIHR5cGVkZWYgc3RydWN0IFRM U0NvbnRleHQgewogICAgIGNvbnN0IEFWQ2xhc3MgKmNsYXNzOwogICAgIFRMU1NoYXJlZCB0bHNf c2hhcmVkOwpAQCAtMzgsOCArNDcxLDU2IEBAIHR5cGVkZWYgc3RydWN0IFRMU0NvbnRleHQgewog ICAgIEJJT19NRVRIT0QqIHVybF9iaW9fbWV0aG9kOwogI2VuZGlmCiAgICAgaW50IGlvX2VycjsK KyAgICBjaGFyIGVycm9yX21lc3NhZ2VbMjU2XTsKIH0gVExTQ29udGV4dDsKIAorLyoqCisgKiBS ZXRyaWV2ZXMgdGhlIGVycm9yIG1lc3NhZ2UgZm9yIHRoZSBsYXRlc3QgT3BlblNTTCBlcnJvci4K KyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHJpZXZlcyB0aGUgZXJyb3IgY29kZSBmcm9tIHRoZSB0 aHJlYWQncyBlcnJvciBxdWV1ZSwgY29udmVydHMgaXQKKyAqIHRvIGEgaHVtYW4tcmVhZGFibGUg c3RyaW5nLCBhbmQgc3RvcmVzIGl0IGluIHRoZSBUTFNDb250ZXh0J3MgZXJyb3JfbWVzc2FnZSBm aWVsZC4KKyAqIFRoZSBlcnJvciBxdWV1ZSBpcyB0aGVuIGNsZWFyZWQgdXNpbmcgRVJSX2NsZWFy X2Vycm9yKCkuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyKiBvcGVuc3NsX2dldF9lcnJvcihUTFND b250ZXh0ICpjdHgpCit7CisgICAgaW50IHIyID0gRVJSX2dldF9lcnJvcigpOworICAgIGlmIChy MikgeworICAgICAgICBFUlJfZXJyb3Jfc3RyaW5nX24ocjIsIGN0eC0+ZXJyb3JfbWVzc2FnZSwg c2l6ZW9mKGN0eC0+ZXJyb3JfbWVzc2FnZSkpOworICAgIH0gZWxzZQorICAgICAgICBjdHgtPmVy cm9yX21lc3NhZ2VbMF0gPSAnXDAnOworCisgICAgRVJSX2NsZWFyX2Vycm9yKCk7CisgICAgcmV0 dXJuIGN0eC0+ZXJyb3JfbWVzc2FnZTsKK30KKworaW50IGZmX2R0bHNfc2V0X3VkcChVUkxDb250 ZXh0ICpoLCBVUkxDb250ZXh0ICp1ZHApCit7CisgICAgVExTQ29udGV4dCAqYyA9IGgtPnByaXZf ZGF0YTsKKyAgICBjLT50bHNfc2hhcmVkLnVkcCA9IHVkcDsKKyAgICByZXR1cm4gMDsKK30KKwor aW50IGZmX2R0bHNfZXhwb3J0X21hdGVyaWFscyhVUkxDb250ZXh0ICpoLCBjaGFyICpkdGxzX3Ny dHBfbWF0ZXJpYWxzLCBzaXplX3QgbWF0ZXJpYWxzX3N6KQoreworICAgIGludCByZXQgPSAwOwor ICAgIGNvbnN0IGNoYXIqIGRzdCA9ICJFWFRSQUNUT1ItZHRsc19zcnRwIjsKKyAgICBUTFNDb250 ZXh0ICpjID0gaC0+cHJpdl9kYXRhOworCisgICAgcmV0ID0gU1NMX2V4cG9ydF9rZXlpbmdfbWF0 ZXJpYWwoYy0+c3NsLCBkdGxzX3NydHBfbWF0ZXJpYWxzLCBtYXRlcmlhbHNfc3osCisgICAgICAg IGRzdCwgc3RybGVuKGRzdCksIE5VTEwsIDAsIDApOworICAgIGlmICghcmV0KSB7CisgICAgICAg IGF2X2xvZyhjLCBBVl9MT0dfRVJST1IsICJUTFM6IEZhaWxlZCB0byBleHBvcnQgU1JUUCBtYXRl cmlhbCwgJXNcbiIsIG9wZW5zc2xfZ2V0X2Vycm9yKGMpKTsKKyAgICAgICAgcmV0dXJuIC0xOwor ICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworaW50IGZmX2R0bHNfc3RhdGUoVVJMQ29udGV4dCAq aCkKK3sKKyAgICBUTFNDb250ZXh0ICpjID0gaC0+cHJpdl9kYXRhOworICAgIHJldHVybiBjLT50 bHNfc2hhcmVkLnN0YXRlOworfQorCiAvKiBPcGVuU1NMIDEuMC4yIG9yIGJlbG93LCB0aGVuIHlv dSB3b3VsZCB1c2UgU1NMX2xpYnJhcnlfaW5pdC4gSWYgeW91IGFyZQogICogdXNpbmcgT3BlblNT TCAxLjEuMCBvciBhYm92ZSwgdGhlbiB0aGUgbGlicmFyeSB3aWxsIGluaXRpYWxpemUKICAqIGl0 c2VsZiBhdXRvbWF0aWNhbGx5LgpAQCAtMTIxLDcgKzYwMiw3IEBAIHZvaWQgZmZfb3BlbnNzbF9k ZWluaXQodm9pZCkKIH0KICNlbmRpZgogCi1zdGF0aWMgaW50IHByaW50X3Rsc19lcnJvcihVUkxD b250ZXh0ICpoLCBpbnQgcmV0KQorc3RhdGljIGludCBwcmludF9zc2xfZXJyb3IoVVJMQ29udGV4 dCAqaCwgaW50IHJldCkKIHsKICAgICBUTFNDb250ZXh0ICpjID0gaC0+cHJpdl9kYXRhOwogICAg IGludCBwcmludGVkID0gMCwgZSwgYXZlcnIgPSBBVkVSUk9SKEVJTyk7CkBAIC0xOTMsNyArNjc0 LDcgQEAgc3RhdGljIGludCB1cmxfYmlvX2Rlc3Ryb3koQklPICpiKQogc3RhdGljIGludCB1cmxf YmlvX2JyZWFkKEJJTyAqYiwgY2hhciAqYnVmLCBpbnQgbGVuKQogewogICAgIFRMU0NvbnRleHQg KmMgPSBHRVRfQklPX0RBVEEoYik7Ci0gICAgaW50IHJldCA9IGZmdXJsX3JlYWQoYy0+dGxzX3No YXJlZC50Y3AsIGJ1ZiwgbGVuKTsKKyAgICBpbnQgcmV0ID0gZmZ1cmxfcmVhZChjLT50bHNfc2hh cmVkLmlzX2R0bHMgPyBjLT50bHNfc2hhcmVkLnVkcCA6IGMtPnRsc19zaGFyZWQudGNwLCBidWYs IGxlbik7CiAgICAgaWYgKHJldCA+PSAwKQogICAgICAgICByZXR1cm4gcmV0OwogICAgIEJJT19j bGVhcl9yZXRyeV9mbGFncyhiKTsKQEAgLTIwOSw3ICs2OTAsNyBAQCBzdGF0aWMgaW50IHVybF9i aW9fYnJlYWQoQklPICpiLCBjaGFyICpidWYsIGludCBsZW4pCiBzdGF0aWMgaW50IHVybF9iaW9f YndyaXRlKEJJTyAqYiwgY29uc3QgY2hhciAqYnVmLCBpbnQgbGVuKQogewogICAgIFRMU0NvbnRl eHQgKmMgPSBHRVRfQklPX0RBVEEoYik7Ci0gICAgaW50IHJldCA9IGZmdXJsX3dyaXRlKGMtPnRs c19zaGFyZWQudGNwLCBidWYsIGxlbik7CisgICAgaW50IHJldCA9IGZmdXJsX3dyaXRlKGMtPnRs c19zaGFyZWQuaXNfZHRscyA/IGMtPnRsc19zaGFyZWQudWRwIDogYy0+dGxzX3NoYXJlZC50Y3As IGJ1ZiwgbGVuKTsKICAgICBpZiAocmV0ID49IDApCiAgICAgICAgIHJldHVybiByZXQ7CiAgICAg QklPX2NsZWFyX3JldHJ5X2ZsYWdzKGIpOwpAQCAtMjUwLDExICs3MzEsMzAwIEBAIHN0YXRpYyBC SU9fTUVUSE9EIHVybF9iaW9fbWV0aG9kID0gewogfTsKICNlbmRpZgogCitzdGF0aWMgYXZfY29s ZCB2b2lkIGluaXRfYmlvX21ldGhvZChVUkxDb250ZXh0ICpoKQoreworICAgIFRMU0NvbnRleHQg KnAgPSBoLT5wcml2X2RhdGE7CisgICAgQklPICpiaW87CisjaWYgT1BFTlNTTF9WRVJTSU9OX05V TUJFUiA+PSAweDEwMTAwMDBmTAorICAgIHAtPnVybF9iaW9fbWV0aG9kID0gQklPX21ldGhfbmV3 KEJJT19UWVBFX1NPVVJDRV9TSU5LLCAidXJscHJvdG9jb2wgYmlvIik7CisgICAgQklPX21ldGhf c2V0X3dyaXRlKHAtPnVybF9iaW9fbWV0aG9kLCB1cmxfYmlvX2J3cml0ZSk7CisgICAgQklPX21l dGhfc2V0X3JlYWQocC0+dXJsX2Jpb19tZXRob2QsIHVybF9iaW9fYnJlYWQpOworICAgIEJJT19t ZXRoX3NldF9wdXRzKHAtPnVybF9iaW9fbWV0aG9kLCB1cmxfYmlvX2JwdXRzKTsKKyAgICBCSU9f bWV0aF9zZXRfY3RybChwLT51cmxfYmlvX21ldGhvZCwgdXJsX2Jpb19jdHJsKTsKKyAgICBCSU9f bWV0aF9zZXRfY3JlYXRlKHAtPnVybF9iaW9fbWV0aG9kLCB1cmxfYmlvX2NyZWF0ZSk7CisgICAg QklPX21ldGhfc2V0X2Rlc3Ryb3kocC0+dXJsX2Jpb19tZXRob2QsIHVybF9iaW9fZGVzdHJveSk7 CisgICAgYmlvID0gQklPX25ldyhwLT51cmxfYmlvX21ldGhvZCk7CisgICAgQklPX3NldF9kYXRh KGJpbywgcCk7CisjZWxzZQorICAgIGJpbyA9IEJJT19uZXcoJnVybF9iaW9fbWV0aG9kKTsKKyAg ICBiaW8tPnB0ciA9IHA7CisjZW5kaWYKKyAgICBTU0xfc2V0X2JpbyhwLT5zc2wsIGJpbywgYmlv KTsKK30KKworc3RhdGljIHZvaWQgb3BlbnNzbF9pbmZvX2NhbGxiYWNrKGNvbnN0IFNTTCAqc3Ns LCBpbnQgd2hlcmUsIGludCByZXQpIHsKKyAgICBjb25zdCBjaGFyICptZXRob2QgPSAidW5kZWZp bmVkIjsKKyAgICBUTFNDb250ZXh0ICpjdHggPSAoVExTQ29udGV4dCopU1NMX2dldF9leF9kYXRh KHNzbCwgMCk7CisKKyAgICBpZiAod2hlcmUgJiBTU0xfU1RfQ09OTkVDVCkgeworICAgICAgICBt ZXRob2QgPSAiU1NMX2Nvbm5lY3QiOworICAgIH0gZWxzZSBpZiAod2hlcmUgJiBTU0xfU1RfQUND RVBUKQorICAgICAgICBtZXRob2QgPSAiU1NMX2FjY2VwdCI7CisKKyAgICBpZiAod2hlcmUgJiBT U0xfQ0JfTE9PUCkgeworICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfREVCVUcsICJJbmZvIG1l dGhvZD0lcyBzdGF0ZT0lcyglcyksIHdoZXJlPSVkLCByZXQ9JWRcbiIsCisgICAgICAgICAgICAg ICBtZXRob2QsIFNTTF9zdGF0ZV9zdHJpbmcoc3NsKSwgU1NMX3N0YXRlX3N0cmluZ19sb25nKHNz bCksIHdoZXJlLCByZXQpOworICAgIH0gZWxzZSBpZiAod2hlcmUgJiBTU0xfQ0JfQUxFUlQpIHsK KyAgICAgICAgbWV0aG9kID0gKHdoZXJlICYgU1NMX0NCX1JFQUQpID8gInJlYWQiOiJ3cml0ZSI7 CisgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19ERUJVRywgIkFsZXJ0IG1ldGhvZD0lcyBzdGF0 ZT0lcyglcyksIHdoZXJlPSVkLCByZXQ9JWRcbiIsCisgICAgICAgICAgICAgICBtZXRob2QsIFNT TF9zdGF0ZV9zdHJpbmcoc3NsKSwgU1NMX3N0YXRlX3N0cmluZ19sb25nKHNzbCksIHdoZXJlLCBy ZXQpOworICAgIH0KK30KKworLyoqCisgKiBBbHdheXMgcmV0dXJuIDEgdG8gYWNjZXB0IGFueSBj ZXJ0aWZpY2F0ZS4gVGhpcyBpcyBiZWNhdXNlIHdlIGFsbG93IHRoZSBwZWVyIHRvCisgKiB1c2Ug YSB0ZW1wb3Jhcnkgc2VsZi1zaWduZWQgY2VydGlmaWNhdGUgZm9yIERUTFMuCisgKi8KK3N0YXRp YyBpbnQgb3BlbnNzbF9kdGxzX3ZlcmlmeV9jYWxsYmFjayhpbnQgcHJldmVyaWZ5X29rLCBYNTA5 X1NUT1JFX0NUWCAqY3R4KQoreworICAgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50IGR0bHNf aGFuZHNoYWtlKFVSTENvbnRleHQgKmgpCit7CisgICAgaW50IHJldCA9IDAsIHIwLCByMTsKKyAg ICBUTFNDb250ZXh0ICpwID0gaC0+cHJpdl9kYXRhOworCisgICAgcjAgPSBTU0xfZG9faGFuZHNo YWtlKHAtPnNzbCk7CisgICAgcjEgPSBTU0xfZ2V0X2Vycm9yKHAtPnNzbCwgcjApOworICAgIGlm IChyMCA8PSAwKSB7CisgICAgICAgIGlmIChyMSAhPSBTU0xfRVJST1JfV0FOVF9SRUFEICYmIHIx ICE9IFNTTF9FUlJPUl9XQU5UX1dSSVRFICYmIHIxICE9IFNTTF9FUlJPUl9aRVJPX1JFVFVSTikg eworICAgICAgICAgICAgYXZfbG9nKHAsIEFWX0xPR19FUlJPUiwgIlRMUzogUmVhZCBmYWlsZWQs IHIwPSVkLCByMT0lZCAlc1xuIiwgcjAsIHIxLCBvcGVuc3NsX2dldF9lcnJvcihwKSk7CisgICAg ICAgICAgICByZXQgPSBBVkVSUk9SKEVJTyk7CisgICAgICAgICAgICBnb3RvIGVuZDsKKyAgICAg ICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGF2X2xvZyhwLCBBVl9MT0dfVFJBQ0UsICJUTFM6 IFJlYWQgJWQgYnl0ZXMsIHIwPSVkLCByMT0lZFxuIiwgcjAsIHIwLCByMSk7CisgICAgfQorCisg ICAgLyogQ2hlY2sgd2hldGhlciB0aGUgRFRMUyBpcyBjb21wbGV0ZWQuICovCisgICAgaWYgKFNT TF9pc19pbml0X2ZpbmlzaGVkKHAtPnNzbCkgIT0gMSkKKyAgICAgICAgZ290byBlbmQ7CisKKyAg ICBwLT50bHNfc2hhcmVkLnN0YXRlID0gRFRMU19TVEFURV9GSU5JU0hFRDsKK2VuZDoKKyAgICBy ZXR1cm4gcmV0OworfQorCitzdGF0aWMgYXZfY29sZCBpbnQgb3BlbnNzbF9pbml0X2NhX2tleV9j ZXJ0KFVSTENvbnRleHQgKmgpCit7CisgICAgaW50IHJldDsKKyAgICBUTFNDb250ZXh0ICpwID0g aC0+cHJpdl9kYXRhOworICAgIFRMU1NoYXJlZCAqYyA9ICZwLT50bHNfc2hhcmVkOworICAgIEVW UF9QS0VZICpwa2V5ID0gTlVMTDsKKyAgICBYNTA5ICpjZXJ0ID0gTlVMTDsKKyAgICAvKiBzZXR1 cCBjYSwgcHJpdmF0ZSBrZXksIGNlcnRpZmljYXRlICovCisgICAgaWYgKGMtPmNhX2ZpbGUpIHsK KyAgICAgICAgaWYgKCFTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyhwLT5jdHgsIGMtPmNh X2ZpbGUsIE5VTEwpKQorICAgICAgICAgICAgYXZfbG9nKGgsIEFWX0xPR19FUlJPUiwgIlNTTF9D VFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zICVzXG4iLCBvcGVuc3NsX2dldF9lcnJvcihwKSk7Cisg ICAgfQorCisgICAgaWYgKGMtPmNlcnRfZmlsZSkgeworICAgICAgICByZXQgPSBTU0xfQ1RYX3Vz ZV9jZXJ0aWZpY2F0ZV9jaGFpbl9maWxlKHAtPmN0eCwgYy0+Y2VydF9maWxlKTsKKyAgICAgICAg aWYgKHJldCA8PSAwKSB7CisgICAgICAgICAgICBhdl9sb2coaCwgQVZfTE9HX0VSUk9SLCAiVW5h YmxlIHRvIGxvYWQgY2VydCBmaWxlICVzOiAlc1xuIiwKKyAgICAgICAgICAgICAgIGMtPmNlcnRf ZmlsZSwgb3BlbnNzbF9nZXRfZXJyb3IocCkpOworICAgICAgICAgICAgcmV0ID0gQVZFUlJPUihF SU8pOworICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChw LT50bHNfc2hhcmVkLmNlcnRfYnVmKSB7CisgICAgICAgIGNlcnQgPSBjZXJ0X2Zyb21fcGVtX3N0 cmluZyhwLT50bHNfc2hhcmVkLmNlcnRfYnVmKTsKKyAgICAgICAgaWYgKFNTTF9DVFhfdXNlX2Nl cnRpZmljYXRlKHAtPmN0eCwgY2VydCkgIT0gMSkgeworICAgICAgICAgICAgYXZfbG9nKHAsIEFW X0xPR19FUlJPUiwgIlNTTDogSW5pdCBTU0xfQ1RYX3VzZV9jZXJ0aWZpY2F0ZSBmYWlsZWQsICVz XG4iLCBvcGVuc3NsX2dldF9lcnJvcihwKSk7CisgICAgICAgICAgICByZXQgPSBBVkVSUk9SKEVJ TlZBTCk7CisgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICB9CisgICAgfSBlbHNlIGlm IChwLT50bHNfc2hhcmVkLmlzX2R0bHMpeworICAgICAgICBhdl9sb2cocCwgQVZfTE9HX0VSUk9S LCAiVExTOiBJbml0IGNlcnQgZmFpbGVkLCAlc1xuIiwgb3BlbnNzbF9nZXRfZXJyb3IocCkpOwor ICAgICAgICByZXQgPSBBVkVSUk9SKEVJTlZBTCk7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9 CisKKyAgICBpZiAoYy0+a2V5X2ZpbGUpIHsKKyAgICAgICAgcmV0ID0gU1NMX0NUWF91c2VfUHJp dmF0ZUtleV9maWxlKHAtPmN0eCwgYy0+a2V5X2ZpbGUsIFNTTF9GSUxFVFlQRV9QRU0pOworICAg ICAgICBpZiAocmV0IDw9IDApIHsKKyAgICAgICAgICAgIGF2X2xvZyhoLCBBVl9MT0dfRVJST1Is ICJVbmFibGUgdG8gbG9hZCBrZXkgZmlsZSAlczogJXNcbiIsCisgICAgICAgICAgICAgICAgYy0+ a2V5X2ZpbGUsIG9wZW5zc2xfZ2V0X2Vycm9yKHApKTsKKyAgICAgICAgICAgIHJldCA9IEFWRVJS T1IoRUlPKTsKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgfQorICAgIH0gZWxzZSBp ZiAocC0+dGxzX3NoYXJlZC5rZXlfYnVmKSB7CisgICAgICAgIHBrZXkgPSBwa2V5X2Zyb21fcGVt X3N0cmluZyhwLT50bHNfc2hhcmVkLmtleV9idWYsIDEpOworICAgICAgICBpZiAoU1NMX0NUWF91 c2VfUHJpdmF0ZUtleShwLT5jdHgsIHBrZXkpICE9IDEpIHsKKyAgICAgICAgICAgIGF2X2xvZyhw LCBBVl9MT0dfRVJST1IsICJUTFM6IEluaXQgU1NMX0NUWF91c2VfUHJpdmF0ZUtleSBmYWlsZWQs ICVzXG4iLCBvcGVuc3NsX2dldF9lcnJvcihwKSk7CisgICAgICAgICAgICByZXQgPSBBVkVSUk9S KEVJTlZBTCk7CisgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICB9CisgICAgfSBlbHNl IGlmIChwLT50bHNfc2hhcmVkLmlzX2R0bHMpeworICAgICAgICBhdl9sb2cocCwgQVZfTE9HX0VS Uk9SLCAiVExTOiBJbml0IHBrZXkgZmFpbGVkLCAlc1xuIiwgb3BlbnNzbF9nZXRfZXJyb3IocCkp OworICAgICAgICByZXQgPSBBVkVSUk9SKEVJTlZBTCk7CisgICAgICAgIGdvdG8gZmFpbDsKKyAg ICB9CisgICAgcmV0ID0gMDsKK2ZhaWw6CisgICAgcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBP bmNlIHRoZSBEVExTIHJvbGUgaGFzIGJlZW4gbmVnb3RpYXRlZCAtIGFjdGl2ZSBmb3IgdGhlIERU TFMgY2xpZW50IG9yIHBhc3NpdmUgZm9yIHRoZQorICogRFRMUyBzZXJ2ZXIgLSB3ZSBwcm9jZWVk IHRvIHNldCB1cCB0aGUgRFRMUyBzdGF0ZSBhbmQgaW5pdGlhdGUgdGhlIGhhbmRzaGFrZS4KKyAq Lworc3RhdGljIGludCBkdGxzX3N0YXJ0KFVSTENvbnRleHQgKmgsIGNvbnN0IGNoYXIgKnVybCwg aW50IGZsYWdzLCBBVkRpY3Rpb25hcnkgKipvcHRpb25zKQoreworICAgIFRMU0NvbnRleHQgKnAg PSBoLT5wcml2X2RhdGE7CisgICAgVExTU2hhcmVkICpjID0gJnAtPnRsc19zaGFyZWQ7CisgICAg aW50IHJldCA9IDA7CisgICAgYy0+aXNfZHRscyA9IDE7CisgICAgY29uc3QgY2hhciogY2lwaGVy cyA9ICJBTEwiOworICAgIC8qKgorICAgICAqIFRoZSBwcm9maWxlIGZvciBPcGVuU1NMJ3MgU1JU UCBpcyBTUlRQX0FFUzEyOF9DTV9TSEExXzgwLCBzZWUgc3NsL2QxX3NydHAuYy4KKyAgICAgKiBU aGUgcHJvZmlsZSBmb3IgRkZtcGVnJ3MgU1JUUCBpcyBTUlRQX0FFUzEyOF9DTV9ITUFDX1NIQTFf ODAsIHNlZSBsaWJhdmZvcm1hdC9zcnRwLmMuCisgICAgICovCisgICAgY29uc3QgY2hhciogcHJv ZmlsZXMgPSAiU1JUUF9BRVMxMjhfQ01fU0hBMV84MCI7CisgICAgLyogUmVmZXIgdG8gdGhlIHRl c3QgY2FzZXMgcmVnYXJkaW5nIHRoZXNlIGN1cnZlcyBpbiB0aGUgV2ViUlRDIGNvZGUuICovCisj aWYgT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA+PSAweDEwMTAwMDAwTCAvKiBPcGVuU1NMIDEuMS4w ICovCisgICAgY29uc3QgY2hhciogY3VydmVzID0gIlgyNTUxOTpQLTI1NjpQLTM4NDpQLTUyMSI7 CisjZWxpZiBPUEVOU1NMX1ZFUlNJT05fTlVNQkVSID49IDB4MTAwMDIwMDBMIC8qIE9wZW5TU0wg MS4wLjIgKi8KKyAgICBjb25zdCBjaGFyKiBjdXJ2ZXMgPSAiUC0yNTY6UC0zODQ6UC01MjEiOwor I2VuZGlmCisKKyNpZiBPUEVOU1NMX1ZFUlNJT05fTlVNQkVSIDwgMHgxMDAwMjAwMEwgLyogT3Bl blNTTCB2MS4wLjIgKi8KKyAgICBwLT5jdHggPSBTU0xfQ1RYX25ldyhEVExTdjFfbWV0aG9kKCkp OworI2Vsc2UKKyAgICBwLT5jdHggPSBTU0xfQ1RYX25ldyhEVExTX21ldGhvZCgpKTsKKyNlbmRp ZgorICAgIGlmICghcC0+Y3R4KSB7CisgICAgICAgIHJldCA9IEFWRVJST1IoRU5PTUVNKTsKKyAg ICAgICAgZ290byBmYWlsOworICAgIH0KKworI2lmIE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIgPj0g MHgxMDAwMjAwMEwgLyogT3BlblNTTCAxLjAuMiAqLworICAgIC8qIEZvciBFQ0RTQSwgd2UgY291 bGQgc2V0IHRoZSBjdXJ2ZXMgbGlzdC4gKi8KKyAgICBpZiAoU1NMX0NUWF9zZXQxX2N1cnZlc19s aXN0KHAtPmN0eCwgY3VydmVzKSAhPSAxKSB7CisgICAgICAgIGF2X2xvZyhwLCBBVl9MT0dfRVJS T1IsICJUTFM6IEluaXQgU1NMX0NUWF9zZXQxX2N1cnZlc19saXN0IGZhaWxlZCwgY3VydmVzPSVz LCAlc1xuIiwKKyAgICAgICAgICAgIGN1cnZlcywgb3BlbnNzbF9nZXRfZXJyb3IocCkpOworICAg ICAgICByZXQgPSBBVkVSUk9SKEVJTlZBTCk7CisgICAgICAgIHJldHVybiByZXQ7CisgICAgfQor I2VuZGlmCisKKyNpZiBPUEVOU1NMX1ZFUlNJT05fTlVNQkVSIDwgMHgxMDEwMDAwMEwgLy8gdjEu MS54CisjaWYgT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA8IDB4MTAwMDIwMDBMIC8vIHYxLjAuMgor ICAgIGlmIChjdHgtPmR0bHNfZWNrZXkpCisgICAgICAgIFNTTF9DVFhfc2V0X3RtcF9lY2RoKHAt PmN0eCwgcC0+ZHRsc19lY2tleSk7CisjZWxzZQorICAgIFNTTF9DVFhfc2V0X2VjZGhfYXV0byhw LT5jdHgsIDEpOworI2VuZGlmCisjZW5kaWYKKworICAgIC8qKgorICAgICAqIFdlIGFjdGl2YXRl ICJBTEwiIGNpcGhlciBzdWl0ZXMgdG8gYWxpZ24gd2l0aCB0aGUgcGVlcidzIGNhcGFiaWxpdGll cywKKyAgICAgKiBlbnN1cmluZyBtYXhpbXVtIGNvbXBhdGliaWxpdHkuCisgICAgICovCisgICAg aWYgKFNTTF9DVFhfc2V0X2NpcGhlcl9saXN0KHAtPmN0eCwgY2lwaGVycykgIT0gMSkgeworICAg ICAgICBhdl9sb2cocCwgQVZfTE9HX0VSUk9SLCAiVExTOiBJbml0IFNTTF9DVFhfc2V0X2NpcGhl cl9saXN0IGZhaWxlZCwgY2lwaGVycz0lcywgJXNcbiIsCisgICAgICAgICAgICBjaXBoZXJzLCBv cGVuc3NsX2dldF9lcnJvcihwKSk7CisgICAgICAgIHJldCA9IEFWRVJST1IoRUlOVkFMKTsKKyAg ICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisgICAgcmV0ID0gb3BlbnNzbF9pbml0X2NhX2tleV9j ZXJ0KGgpOworICAgIGlmIChyZXQgPCAwKSBnb3RvIGZhaWw7CisKKyAgICAvKiBTZXJ2ZXIgd2ls bCBzZW5kIENlcnRpZmljYXRlIFJlcXVlc3QuICovCisgICAgU1NMX0NUWF9zZXRfdmVyaWZ5KHAt PmN0eCwgU1NMX1ZFUklGWV9QRUVSIHwgU1NMX1ZFUklGWV9DTElFTlRfT05DRSwgb3BlbnNzbF9k dGxzX3ZlcmlmeV9jYWxsYmFjayk7CisgICAgLyogVGhlIGRlcHRoIGNvdW50IGlzICJsZXZlbCAw OnBlZXIgY2VydGlmaWNhdGUiLCAibGV2ZWwgMTogQ0EgY2VydGlmaWNhdGUiLAorICAgICAqICJs ZXZlbCAyOiBoaWdoZXIgbGV2ZWwgQ0EgY2VydGlmaWNhdGUiLCBhbmQgc28gb24uICovCisgICAg U1NMX0NUWF9zZXRfdmVyaWZ5X2RlcHRoKHAtPmN0eCwgNCk7CisgICAgLyogV2hldGhlciB3ZSBz aG91bGQgcmVhZCBhcyBtYW55IGlucHV0IGJ5dGVzIGFzIHBvc3NpYmxlIChmb3Igbm9uLWJsb2Nr aW5nIHJlYWRzKSBvciBub3QuICovCisgICAgU1NMX0NUWF9zZXRfcmVhZF9haGVhZChwLT5jdHgs IDEpOworICAgIC8qIFNldHVwIHRoZSBTUlRQIGNvbnRleHQgKi8KKyAgICBpZiAoU1NMX0NUWF9z ZXRfdGxzZXh0X3VzZV9zcnRwKHAtPmN0eCwgcHJvZmlsZXMpKSB7CisgICAgICAgIGF2X2xvZyhw LCBBVl9MT0dfRVJST1IsICJUTFM6IEluaXQgU1NMX0NUWF9zZXRfdGxzZXh0X3VzZV9zcnRwIGZh aWxlZCwgcHJvZmlsZXM9JXMsICVzXG4iLAorICAgICAgICAgICAgcHJvZmlsZXMsIG9wZW5zc2xf Z2V0X2Vycm9yKHApKTsKKyAgICAgICAgcmV0ID0gQVZFUlJPUihFSU5WQUwpOworICAgICAgICBy ZXR1cm4gcmV0OworICAgIH0KKworICAgIC8qIFRoZSBzc2wgc2hvdWxkIG5vdCBiZSBjcmVhdGVk IHVubGVzcyB0aGUgY3R4IGhhcyBiZWVuIGluaXRpYWxpemVkLiAqLworICAgIHAtPnNzbCA9IFNT TF9uZXcocC0+Y3R4KTsKKyAgICBpZiAoIXAtPnNzbCkgeworICAgICAgICByZXQgPSBBVkVSUk9S KEVOT01FTSk7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICAvKiBTZXR1cCB0aGUg Y2FsbGJhY2sgZm9yIGxvZ2dpbmcuICovCisgICAgU1NMX3NldF9leF9kYXRhKHAtPnNzbCwgMCwg cCk7CisgICAgU1NMX3NldF9pbmZvX2NhbGxiYWNrKHAtPnNzbCwgb3BlbnNzbF9pbmZvX2NhbGxi YWNrKTsKKyAgICAvKioKKyAgICAgKiBXZSBoYXZlIHNldCB0aGUgTVRVIHRvIGZyYWdtZW50IHRo ZSBEVExTIHBhY2tldC4gSXQgaXMgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCB0aGUKKyAgICAgKiBw YWNrZXQgaXMgc3BsaXQgdG8gZW5zdXJlIHRoYXQgZWFjaCBoYW5kc2hha2UgcGFja2V0IGlzIHNt YWxsZXIgdGhhbiB0aGUgTVRVLgorICAgICAqLworICAgIFNTTF9zZXRfb3B0aW9ucyhwLT5zc2ws IFNTTF9PUF9OT19RVUVSWV9NVFUpOworICAgIFNTTF9zZXRfbXR1KHAtPnNzbCwgcC0+dGxzX3No YXJlZC5tdHUpOworI2lmIE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIgPj0gMHgxMDAwMTBiMEwgLyog T3BlblNTTCAxLjAuMWsgKi8KKyAgICBEVExTX3NldF9saW5rX210dShwLT5zc2wsIHAtPnRsc19z aGFyZWQubXR1KTsKKyNlbmRpZgorICAgIGluaXRfYmlvX21ldGhvZChoKTsKKworICAgIGlmIChw LT50bHNfc2hhcmVkLnVzZV9leHRlcm5hbF91ZHAgIT0gMSkgeworICAgICAgICBpZiAoKHJldCA9 IGZmX3Rsc19vcGVuX3VuZGVybHlpbmcoJnAtPnRsc19zaGFyZWQsIGgsIHVybCwgb3B0aW9ucykp IDwgMCkgeworICAgICAgICAgICAgYXZfbG9nKHAsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byBj b25uZWN0ICVzXG4iLCB1cmwpOworICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgfQor ICAgIH0KKworICAgIC8qIFNldHVwIERUTFMgYXMgcGFzc2l2ZSwgd2hpY2ggaXMgc2VydmVyIHJv bGUuICovCisgICAgYy0+bGlzdGVuID8gU1NMX3NldF9hY2NlcHRfc3RhdGUocC0+c3NsKSA6IFNT TF9zZXRfY29ubmVjdF9zdGF0ZShwLT5zc2wpOworCisgICAgLyoqCisgICAgICogRHVyaW5nIGlu aXRpYWxpemF0aW9uLCB3ZSBvbmx5IG5lZWQgdG8gY2FsbCBTU0xfZG9faGFuZHNoYWtlIG9uY2Ug YmVjYXVzZSBTU0xfcmVhZCBjb25zdW1lcworICAgICAqIHRoZSBoYW5kc2hha2UgbWVzc2FnZSBp ZiB0aGUgaGFuZHNoYWtlIGlzIGluY29tcGxldGUuCisgICAgICogVG8gc2ltcGxpZnkgbWFpbnRl bmFuY2UsIHdlIGluaXRpYXRlIHRoZSBoYW5kc2hha2UgZm9yIGJvdGggdGhlIERUTFMgc2VydmVy IGFuZCBjbGllbnQgYWZ0ZXIKKyAgICAgKiBzZW5kaW5nIG91dCB0aGUgSUNFIHJlc3BvbnNlIGlu IHRoZSBzdGFydF9hY3RpdmVfaGFuZHNoYWtlIGZ1bmN0aW9uLiBJdCdzIHdvcnRoIG5vdGluZyB0 aGF0CisgICAgICogYWx0aG91Z2ggdGhlIERUTFMgc2VydmVyIG1heSByZWNlaXZlIHRoZSBDbGll bnRIZWxsbyBpbW1lZGlhdGVseSBhZnRlciBzZW5kaW5nIG91dCB0aGUgSUNFCisgICAgICogcmVz cG9uc2UsIHRoaXMgc2hvdWxkbid0IGJlIGFuIGlzc3VlIGFzIHRoZSBoYW5kc2hha2UgZnVuY3Rp b24gaXMgY2FsbGVkIGJlZm9yZSBhbnkgRFRMUworICAgICAqIHBhY2tldHMgYXJlIHJlY2VpdmVk LgorICAgICAqCisgICAgICogVGhlIFNTTF9kb19oYW5kc2hha2UgY2FuJ3QgYmUgY2FsbGVkIGlm IERUTFMgaGFzbid0IHByZXBhcmUgZm9yIHVkcC4KKyAgICAgKi8KKyAgICBpZiAocC0+dGxzX3No YXJlZC51c2VfZXh0ZXJuYWxfdWRwICE9IDEpIHsKKyAgICAgICAgcmV0ID0gZHRsc19oYW5kc2hh a2UoaCk7CisgICAgICAgIC8vIEZhdGFsIFNTTCBlcnJvciwgZm9yIGV4YW1wbGUsIG5vIGF2YWls YWJsZSBzdWl0ZSB3aGVuIHBlZXIgaXMgRFRMUyAxLjAgd2hpbGUgd2UgYXJlIERUTFMgMS4yLgor ICAgICAgICBpZiAocmV0IDwgMCkgeworICAgICAgICAgICAgYXZfbG9nKHAsIEFWX0xPR19FUlJP UiwgIlRMUzogRmFpbGVkIHRvIGRyaXZlIFNTTCBjb250ZXh0LCByZXQ9JWRcbiIsIHJldCk7Cisg ICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFSU8pOworICAgICAgICB9CisgICAgfQorCisgICAg YXZfbG9nKHAsIEFWX0xPR19WRVJCT1NFLCAiVExTOiBTZXR1cCBvaywgTVRVPSVkLCBmaW5nZXJw cmludCAlc1xuIiwKKyAgICAgICAgcC0+dGxzX3NoYXJlZC5tdHUsIHAtPnRsc19zaGFyZWQuZmlu Z2VycHJpbnQpOworCisgICAgcmV0ID0gMDsKK2ZhaWw6CisgICAgcmV0dXJuIHJldDsKK30KKwor LyoqCisgKiBDbGVhbnVwIHRoZSBEVExTIGNvbnRleHQuCisgKi8KK3N0YXRpYyBhdl9jb2xkIGlu dCBkdGxzX2Nsb3NlKFVSTENvbnRleHQgKmgpCit7CisgICAgVExTQ29udGV4dCAqY3R4ID0gaC0+ cHJpdl9kYXRhOworICAgIFNTTF9mcmVlKGN0eC0+c3NsKTsKKyAgICBTU0xfQ1RYX2ZyZWUoY3R4 LT5jdHgpOworICAgIGF2X2ZyZWVwKCZjdHgtPnRsc19zaGFyZWQuZmluZ2VycHJpbnQpOworICAg IGF2X2ZyZWVwKCZjdHgtPnRsc19zaGFyZWQuY2VydF9idWYpOworICAgIGF2X2ZyZWVwKCZjdHgt PnRsc19zaGFyZWQua2V5X2J1Zik7CisjaWYgT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA8IDB4MzAw MDAwMDBMIC8qIE9wZW5TU0wgMy4wICovCisgICAgRUNfS0VZX2ZyZWUoY3R4LT5kdGxzX2Vja2V5 KTsKKyNlbmRpZgorICAgIHJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHRsc19vcGVuKFVSTENv bnRleHQgKmgsIGNvbnN0IGNoYXIgKnVyaSwgaW50IGZsYWdzLCBBVkRpY3Rpb25hcnkgKipvcHRp b25zKQogewogICAgIFRMU0NvbnRleHQgKnAgPSBoLT5wcml2X2RhdGE7CiAgICAgVExTU2hhcmVk ICpjID0gJnAtPnRsc19zaGFyZWQ7Ci0gICAgQklPICpiaW87CiAgICAgaW50IHJldDsKIAogI2lm IE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIgPCAweDEwMTAwMDAwTApAQCAtMjcxLDUyICsxMDQxLDI2 IEBAIHN0YXRpYyBpbnQgdGxzX29wZW4oVVJMQ29udGV4dCAqaCwgY29uc3QgY2hhciAqdXJpLCBp bnQgZmxhZ3MsIEFWRGljdGlvbmFyeSAqKm9wCiAgICAgLy8gc3VwcG9ydCBmb3IgdGhlIG9sZCBw cm90b2NvbHMgaW1tZWRpYXRlbHkgYWZ0ZXIgY3JlYXRpbmcgdGhlIGNvbnRleHQuCiAgICAgcC0+ Y3R4ID0gU1NMX0NUWF9uZXcoYy0+bGlzdGVuID8gU1NMdjIzX3NlcnZlcl9tZXRob2QoKSA6IFNT THYyM19jbGllbnRfbWV0aG9kKCkpOwogICAgIGlmICghcC0+Y3R4KSB7Ci0gICAgICAgIGF2X2xv ZyhoLCBBVl9MT0dfRVJST1IsICIlc1xuIiwgRVJSX2Vycm9yX3N0cmluZyhFUlJfZ2V0X2Vycm9y KCksIE5VTEwpKTsKKyAgICAgICAgYXZfbG9nKGgsIEFWX0xPR19FUlJPUiwgIiVzXG4iLCBvcGVu c3NsX2dldF9lcnJvcihwKSk7CiAgICAgICAgIHJldCA9IEFWRVJST1IoRUlPKTsKICAgICAgICAg Z290byBmYWlsOwogICAgIH0KICAgICBTU0xfQ1RYX3NldF9vcHRpb25zKHAtPmN0eCwgU1NMX09Q X05PX1NTTHYyIHwgU1NMX09QX05PX1NTTHYzKTsKLSAgICBpZiAoYy0+Y2FfZmlsZSkgewotICAg ICAgICBpZiAoIVNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zKHAtPmN0eCwgYy0+Y2FfZmls ZSwgTlVMTCkpCi0gICAgICAgICAgICBhdl9sb2coaCwgQVZfTE9HX0VSUk9SLCAiU1NMX0NUWF9s b2FkX3ZlcmlmeV9sb2NhdGlvbnMgJXNcbiIsIEVSUl9lcnJvcl9zdHJpbmcoRVJSX2dldF9lcnJv cigpLCBOVUxMKSk7Ci0gICAgfQotICAgIGlmIChjLT5jZXJ0X2ZpbGUgJiYgIVNTTF9DVFhfdXNl X2NlcnRpZmljYXRlX2NoYWluX2ZpbGUocC0+Y3R4LCBjLT5jZXJ0X2ZpbGUpKSB7Ci0gICAgICAg IGF2X2xvZyhoLCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gbG9hZCBjZXJ0IGZpbGUgJXM6ICVz XG4iLAotICAgICAgICAgICAgICAgYy0+Y2VydF9maWxlLCBFUlJfZXJyb3Jfc3RyaW5nKEVSUl9n ZXRfZXJyb3IoKSwgTlVMTCkpOwotICAgICAgICByZXQgPSBBVkVSUk9SKEVJTyk7Ci0gICAgICAg IGdvdG8gZmFpbDsKLSAgICB9Ci0gICAgaWYgKGMtPmtleV9maWxlICYmICFTU0xfQ1RYX3VzZV9Q cml2YXRlS2V5X2ZpbGUocC0+Y3R4LCBjLT5rZXlfZmlsZSwgU1NMX0ZJTEVUWVBFX1BFTSkpIHsK LSAgICAgICAgYXZfbG9nKGgsIEFWX0xPR19FUlJPUiwgIlVuYWJsZSB0byBsb2FkIGtleSBmaWxl ICVzOiAlc1xuIiwKLSAgICAgICAgICAgICAgIGMtPmtleV9maWxlLCBFUlJfZXJyb3Jfc3RyaW5n KEVSUl9nZXRfZXJyb3IoKSwgTlVMTCkpOwotICAgICAgICByZXQgPSBBVkVSUk9SKEVJTyk7Ci0g ICAgICAgIGdvdG8gZmFpbDsKLSAgICB9CisgICAgcmV0ID0gb3BlbnNzbF9pbml0X2NhX2tleV9j ZXJ0KGgpOworICAgIGlmIChyZXQgPCAwKSBnb3RvIGZhaWw7CiAgICAgLy8gTm90ZSwgdGhpcyBk b2Vzbid0IGNoZWNrIHRoYXQgdGhlIHBlZXIgY2VydGlmaWNhdGUgYWN0dWFsbHkgbWF0Y2hlcwog ICAgIC8vIHRoZSByZXF1ZXN0ZWQgaG9zdG5hbWUuCiAgICAgaWYgKGMtPnZlcmlmeSkKICAgICAg ICAgU1NMX0NUWF9zZXRfdmVyaWZ5KHAtPmN0eCwgU1NMX1ZFUklGWV9QRUVSfFNTTF9WRVJJRllf RkFJTF9JRl9OT19QRUVSX0NFUlQsIE5VTEwpOwogICAgIHAtPnNzbCA9IFNTTF9uZXcocC0+Y3R4 KTsKICAgICBpZiAoIXAtPnNzbCkgewotICAgICAgICBhdl9sb2coaCwgQVZfTE9HX0VSUk9SLCAi JXNcbiIsIEVSUl9lcnJvcl9zdHJpbmcoRVJSX2dldF9lcnJvcigpLCBOVUxMKSk7CisgICAgICAg IGF2X2xvZyhoLCBBVl9MT0dfRVJST1IsICIlc1xuIiwgb3BlbnNzbF9nZXRfZXJyb3IocCkpOwog ICAgICAgICByZXQgPSBBVkVSUk9SKEVJTyk7CiAgICAgICAgIGdvdG8gZmFpbDsKICAgICB9Ci0j aWYgT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA+PSAweDEwMTAwMDBmTAotICAgIHAtPnVybF9iaW9f bWV0aG9kID0gQklPX21ldGhfbmV3KEJJT19UWVBFX1NPVVJDRV9TSU5LLCAidXJscHJvdG9jb2wg YmlvIik7Ci0gICAgQklPX21ldGhfc2V0X3dyaXRlKHAtPnVybF9iaW9fbWV0aG9kLCB1cmxfYmlv X2J3cml0ZSk7Ci0gICAgQklPX21ldGhfc2V0X3JlYWQocC0+dXJsX2Jpb19tZXRob2QsIHVybF9i aW9fYnJlYWQpOwotICAgIEJJT19tZXRoX3NldF9wdXRzKHAtPnVybF9iaW9fbWV0aG9kLCB1cmxf YmlvX2JwdXRzKTsKLSAgICBCSU9fbWV0aF9zZXRfY3RybChwLT51cmxfYmlvX21ldGhvZCwgdXJs X2Jpb19jdHJsKTsKLSAgICBCSU9fbWV0aF9zZXRfY3JlYXRlKHAtPnVybF9iaW9fbWV0aG9kLCB1 cmxfYmlvX2NyZWF0ZSk7Ci0gICAgQklPX21ldGhfc2V0X2Rlc3Ryb3kocC0+dXJsX2Jpb19tZXRo b2QsIHVybF9iaW9fZGVzdHJveSk7Ci0gICAgYmlvID0gQklPX25ldyhwLT51cmxfYmlvX21ldGhv ZCk7Ci0gICAgQklPX3NldF9kYXRhKGJpbywgcCk7Ci0jZWxzZQotICAgIGJpbyA9IEJJT19uZXco JnVybF9iaW9fbWV0aG9kKTsKLSAgICBiaW8tPnB0ciA9IHA7Ci0jZW5kaWYKLSAgICBTU0xfc2V0 X2JpbyhwLT5zc2wsIGJpbywgYmlvKTsKKyAgICBTU0xfc2V0X2V4X2RhdGEocC0+c3NsLCAwLCBw KTsKKyAgICBTU0xfQ1RYX3NldF9pbmZvX2NhbGxiYWNrKHAtPmN0eCwgb3BlbnNzbF9pbmZvX2Nh bGxiYWNrKTsKKyAgICBpbml0X2Jpb19tZXRob2QoaCk7CiAgICAgaWYgKCFjLT5saXN0ZW4gJiYg IWMtPm51bWVyaWNob3N0KQogICAgICAgICBTU0xfc2V0X3Rsc2V4dF9ob3N0X25hbWUocC0+c3Ns LCBjLT5ob3N0KTsKICAgICByZXQgPSBjLT5saXN0ZW4gPyBTU0xfYWNjZXB0KHAtPnNzbCkgOiBT U0xfY29ubmVjdChwLT5zc2wpOwpAQCAtMzI1LDcgKzEwNjksNyBAQCBzdGF0aWMgaW50IHRsc19v cGVuKFVSTENvbnRleHQgKmgsIGNvbnN0IGNoYXIgKnVyaSwgaW50IGZsYWdzLCBBVkRpY3Rpb25h cnkgKipvcAogICAgICAgICByZXQgPSBBVkVSUk9SKEVJTyk7CiAgICAgICAgIGdvdG8gZmFpbDsK ICAgICB9IGVsc2UgaWYgKHJldCA8IDApIHsKLSAgICAgICAgcmV0ID0gcHJpbnRfdGxzX2Vycm9y KGgsIHJldCk7CisgICAgICAgIHJldCA9IHByaW50X3NzbF9lcnJvcihoLCByZXQpOwogICAgICAg ICBnb3RvIGZhaWw7CiAgICAgfQogCkBAIC0zMzgsMzEgKzEwODIsMzUgQEAgZmFpbDoKIHN0YXRp YyBpbnQgdGxzX3JlYWQoVVJMQ29udGV4dCAqaCwgdWludDhfdCAqYnVmLCBpbnQgc2l6ZSkKIHsK ICAgICBUTFNDb250ZXh0ICpjID0gaC0+cHJpdl9kYXRhOworICAgIFVSTENvbnRleHQgKnVjID0g Yy0+dGxzX3NoYXJlZC5pc19kdGxzID8gYy0+dGxzX3NoYXJlZC51ZHAKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGMtPnRsc19zaGFyZWQudGNwOwogICAgIGlu dCByZXQ7CiAgICAgLy8gU2V0IG9yIGNsZWFyIHRoZSBBVklPX0ZMQUdfTk9OQkxPQ0sgb24gYy0+ dGxzX3NoYXJlZC50Y3AKLSAgICBjLT50bHNfc2hhcmVkLnRjcC0+ZmxhZ3MgJj0gfkFWSU9fRkxB R19OT05CTE9DSzsKLSAgICBjLT50bHNfc2hhcmVkLnRjcC0+ZmxhZ3MgfD0gaC0+ZmxhZ3MgJiBB VklPX0ZMQUdfTk9OQkxPQ0s7CisgICAgdWMtPmZsYWdzICY9IH5BVklPX0ZMQUdfTk9OQkxPQ0s7 CisgICAgdWMtPmZsYWdzIHw9IGgtPmZsYWdzICYgQVZJT19GTEFHX05PTkJMT0NLOwogICAgIHJl dCA9IFNTTF9yZWFkKGMtPnNzbCwgYnVmLCBzaXplKTsKICAgICBpZiAocmV0ID4gMCkKICAgICAg ICAgcmV0dXJuIHJldDsKICAgICBpZiAocmV0ID09IDApCiAgICAgICAgIHJldHVybiBBVkVSUk9S X0VPRjsKLSAgICByZXR1cm4gcHJpbnRfdGxzX2Vycm9yKGgsIHJldCk7CisgICAgcmV0dXJuIHBy aW50X3NzbF9lcnJvcihoLCByZXQpOwogfQogCiBzdGF0aWMgaW50IHRsc193cml0ZShVUkxDb250 ZXh0ICpoLCBjb25zdCB1aW50OF90ICpidWYsIGludCBzaXplKQogewogICAgIFRMU0NvbnRleHQg KmMgPSBoLT5wcml2X2RhdGE7CisgICAgVVJMQ29udGV4dCAqdWMgPSBjLT50bHNfc2hhcmVkLmlz X2R0bHMgPyBjLT50bHNfc2hhcmVkLnVkcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDogYy0+dGxzX3NoYXJlZC50Y3A7CiAgICAgaW50IHJldDsKICAgICAvLyBT ZXQgb3IgY2xlYXIgdGhlIEFWSU9fRkxBR19OT05CTE9DSyBvbiBjLT50bHNfc2hhcmVkLnRjcAot ICAgIGMtPnRsc19zaGFyZWQudGNwLT5mbGFncyAmPSB+QVZJT19GTEFHX05PTkJMT0NLOwotICAg IGMtPnRsc19zaGFyZWQudGNwLT5mbGFncyB8PSBoLT5mbGFncyAmIEFWSU9fRkxBR19OT05CTE9D SzsKKyAgICB1Yy0+ZmxhZ3MgJj0gfkFWSU9fRkxBR19OT05CTE9DSzsKKyAgICB1Yy0+ZmxhZ3Mg fD0gaC0+ZmxhZ3MgJiBBVklPX0ZMQUdfTk9OQkxPQ0s7CiAgICAgcmV0ID0gU1NMX3dyaXRlKGMt PnNzbCwgYnVmLCBzaXplKTsKICAgICBpZiAocmV0ID4gMCkKICAgICAgICAgcmV0dXJuIHJldDsK ICAgICBpZiAocmV0ID09IDApCiAgICAgICAgIHJldHVybiBBVkVSUk9SX0VPRjsKLSAgICByZXR1 cm4gcHJpbnRfdGxzX2Vycm9yKGgsIHJldCk7CisgICAgcmV0dXJuIHByaW50X3NzbF9lcnJvciho LCByZXQpOwogfQogCiBzdGF0aWMgaW50IHRsc19nZXRfZmlsZV9oYW5kbGUoVVJMQ29udGV4dCAq aCkKQEAgLTQwMSwzICsxMTQ5LDIyIEBAIGNvbnN0IFVSTFByb3RvY29sIGZmX3Rsc19wcm90b2Nv bCA9IHsKICAgICAuZmxhZ3MgICAgICAgICAgPSBVUkxfUFJPVE9DT0xfRkxBR19ORVRXT1JLLAog ICAgIC5wcml2X2RhdGFfY2xhc3MgPSAmdGxzX2NsYXNzLAogfTsKKworc3RhdGljIGNvbnN0IEFW Q2xhc3MgZHRsc19jbGFzcyA9IHsKKyAgICAuY2xhc3NfbmFtZSA9ICJkdGxzIiwKKyAgICAuaXRl bV9uYW1lICA9IGF2X2RlZmF1bHRfaXRlbV9uYW1lLAorICAgIC5vcHRpb24gICAgID0gb3B0aW9u cywKKyAgICAudmVyc2lvbiAgICA9IExJQkFWVVRJTF9WRVJTSU9OX0lOVCwKK307CisKK2NvbnN0 IFVSTFByb3RvY29sIGZmX2R0bHNfcHJvdG9jb2wgPSB7CisgICAgLm5hbWUgICAgICAgICAgID0g ImR0bHMiLAorICAgIC51cmxfb3BlbjIgICAgICA9IGR0bHNfc3RhcnQsCisgICAgLnVybF9oYW5k c2hha2UgID0gZHRsc19oYW5kc2hha2UsCisgICAgLnVybF9jbG9zZSAgICAgID0gZHRsc19jbG9z ZSwKKyAgICAudXJsX3JlYWQgICAgICAgPSB0bHNfcmVhZCwKKyAgICAudXJsX3dyaXRlICAgICAg PSB0bHNfd3JpdGUsCisgICAgLnByaXZfZGF0YV9zaXplID0gc2l6ZW9mKFRMU0NvbnRleHQpLAor ICAgIC5mbGFncyAgICAgICAgICA9IFVSTF9QUk9UT0NPTF9GTEFHX05FVFdPUkssCisgICAgLnBy aXZfZGF0YV9jbGFzcyA9ICZkdGxzX2NsYXNzLAorfTsKZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0 L3doaXAuYyBiL2xpYmF2Zm9ybWF0L3doaXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwLi4wNjcxZTIzNjM1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYXZmb3JtYXQvd2hp cC5jCkBAIC0wLDAgKzEsMTkxNyBAQAorLyoKKyAqIFdlYlJUQy1IVFRQIGluZ2VzdGlvbiBwcm90 b2NvbCAoV0hJUCkgbXV4ZXIKKyAqIENvcHlyaWdodCAoYykgMjAyMyBUaGUgRkZtcGVnIFByb2pl Y3QKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisgKgorICogRkZtcGVnIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5 IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0 aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVz c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi bGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBG cmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp ZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKworI2luY2x1ZGUgImxp YmF2Y29kZWMvYXZjb2RlYy5oIgorI2luY2x1ZGUgImxpYmF2Y29kZWMvY29kZWNfZGVzYy5oIgor I2luY2x1ZGUgImxpYmF2Y29kZWMvaDI2NC5oIgorI2luY2x1ZGUgImxpYmF2Y29kZWMvc3RhcnRj b2RlLmgiCisjaW5jbHVkZSAibGliYXZ1dGlsL2Jhc2U2NC5oIgorI2luY2x1ZGUgImxpYmF2dXRp bC9icHJpbnQuaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvY3JjLmgiCisjaW5jbHVkZSAibGliYXZ1 dGlsL2htYWMuaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvaW50cmVhZHdyaXRlLmgiCisjaW5jbHVk ZSAibGliYXZ1dGlsL2xmZy5oIgorI2luY2x1ZGUgImxpYmF2dXRpbC9vcHQuaCIKKyNpbmNsdWRl ICJsaWJhdnV0aWwvbWVtLmgiCisjaW5jbHVkZSAibGliYXZ1dGlsL3JhbmRvbV9zZWVkLmgiCisj aW5jbHVkZSAibGliYXZ1dGlsL3RpbWUuaCIKKyNpbmNsdWRlICJhdmMuaCIKKyNpbmNsdWRlICJu YWwuaCIKKyNpbmNsdWRlICJhdmlvX2ludGVybmFsLmgiCisjaW5jbHVkZSAiaHR0cC5oIgorI2lu Y2x1ZGUgImludGVybmFsLmgiCisjaW5jbHVkZSAibXV4LmgiCisjaW5jbHVkZSAibmV0d29yay5o IgorI2luY2x1ZGUgInNydHAuaCIKKyNpbmNsdWRlICJ0bHMuaCIKKworLyoqCisgKiBNYXhpbXVt IHNpemUgbGltaXQgb2YgYSBTZXNzaW9uIERlc2NyaXB0aW9uIFByb3RvY29sIChTRFApLAorICog YmUgaXQgYW4gb2ZmZXIgb3IgYW5zd2VyLgorICovCisjZGVmaW5lIE1BWF9TRFBfU0laRSA4MTky CisKKy8qKgorICogVGhlIHNpemUgb2YgdGhlIFNlY3VyZSBSZWFsLXRpbWUgVHJhbnNwb3J0IFBy b3RvY29sIChTUlRQKSBtYXN0ZXIga2V5IG1hdGVyaWFsCisgKiB0aGF0IGlzIGV4cG9ydGVkIGJ5 IFNlY3VyZSBTb2NrZXRzIExheWVyIChTU0wpIGFmdGVyIGEgc3VjY2Vzc2Z1bCBEYXRhZ3JhbQor ICogVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IChEVExTKSBoYW5kc2hha2UuIFRoaXMgbWF0ZXJp YWwgY29uc2lzdHMgb2YgYSBrZXkKKyAqIG9mIDE2IGJ5dGVzIGFuZCBhIHNhbHQgb2YgMTQgYnl0 ZXMuCisgKi8KKyNkZWZpbmUgRFRMU19TUlRQX0tFWV9MRU4gMTYKKyNkZWZpbmUgRFRMU19TUlRQ X1NBTFRfTEVOIDE0CisKKy8qKgorICogVGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgU2VjdXJlIFJl YWwtdGltZSBUcmFuc3BvcnQgUHJvdG9jb2wgKFNSVFApIEhNQUMgY2hlY2tzdW0KKyAqIGFuZCBw YWRkaW5nIHRoYXQgaXMgYXBwZW5kZWQgdG8gdGhlIGVuZCBvZiB0aGUgcGFja2V0LiBUbyBjYWxj dWxhdGUgdGhlIG1heGltdW0KKyAqIHNpemUgb2YgdGhlIFVzZXIgRGF0YWdyYW0gUHJvdG9jb2wg KFVEUCkgcGFja2V0IHRoYXQgY2FuIGJlIHNlbnQgb3V0LCBzdWJ0cmFjdAorICogdGhpcyBzaXpl IGZyb20gdGhlIGBwa3Rfc2l6ZWAuCisgKi8KKyNkZWZpbmUgRFRMU19TUlRQX0NIRUNLU1VNX0xF TiAxNgorCisvKioKKyAqIFdoZW4gc2VuZGluZyBJQ0Ugb3IgRFRMUyBtZXNzYWdlcywgcmVzcG9u c2VzIGFyZSByZWNlaXZlZCB2aWEgVURQLiBIb3dldmVyLCB0aGUgcGVlcgorICogbWF5IG5vdCBi ZSByZWFkeSBhbmQgcmV0dXJuIEVBR0FJTiwgaW4gd2hpY2ggY2FzZSB3ZSBzaG91bGQgd2FpdCBm b3IgYSBzaG9ydCBkdXJhdGlvbgorICogYW5kIHJldHJ5IHJlYWRpbmcuCisgKiBGb3IgaW5zdGFu Y2UsIGlmIHdlIHRyeSB0byByZWFkIGZyb20gVURQIGFuZCBnZXQgRUFHQUlOLCB3ZSBzbGVlcCBm b3IgNW1zIGFuZCByZXRyeS4KKyAqIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBsaW1pdCB0aGUgdG90 YWwgZHVyYXRpb24gaW4gbWlsbGlzZWNvbmRzIChlLmcuLCA1MG1zKSwgc28gd2UKKyAqIHdpbGwg dHJ5IGF0IG1vc3QgNSB0aW1lcy4KKyAqIEtlZXAgaW4gbWluZCB0aGF0IHRoaXMgbWFjcm8gc2hv dWxkIGhhdmUgYSBtaW5pbXVtIGR1cmF0aW9uIG9mIDUgbXMuCisgKi8KKyNkZWZpbmUgSUNFX0RU TFNfUkVBRF9JTlRFUlZBTCA1MAorCisvKiBUaGUgbWFnaWMgY29va2llIGZvciBTZXNzaW9uIFRy YXZlcnNhbCBVdGlsaXRpZXMgZm9yIE5BVCAoU1RVTikgbWVzc2FnZXMuICovCisjZGVmaW5lIFNU VU5fTUFHSUNfQ09PS0lFIDB4MjExMkE0NDIKKworLyoqCisgKiBUaGUgRFRMUyBjb250ZW50IHR5 cGUuCisgKiBTZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzIyNDYjc2VjdGlvbi02 LjIuMQorICogY2hhbmdlX2NpcGhlcl9zcGVjKDIwKSwgYWxlcnQoMjEpLCBoYW5kc2hha2UoMjIp LCBhcHBsaWNhdGlvbl9kYXRhKDIzKQorICovCisjZGVmaW5lIERUTFNfQ09OVEVOVF9UWVBFX0NI QU5HRV9DSVBIRVJfU1BFQyAyMAorCisvKioKKyAqIFRoZSBEVExTIHJlY29yZCBsYXllciBoZWFk ZXIgaGFzIGEgdG90YWwgc2l6ZSBvZiAxMyBieXRlcywgY29uc2lzdGluZyBvZgorICogQ29udGVu dFR5cGUgKDEgYnl0ZSksIFByb3RvY29sVmVyc2lvbiAoMiBieXRlcyksIEVwb2NoICgyIGJ5dGVz KSwKKyAqIFNlcXVlbmNlTnVtYmVyICg2IGJ5dGVzKSwgYW5kIExlbmd0aCAoMiBieXRlcykuCisg KiBTZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM5MTQ3I3NlY3Rp b24tNAorICovCisjZGVmaW5lIERUTFNfUkVDT1JEX0xBWUVSX0hFQURFUl9MRU4gMTMKKworLyoq CisgKiBUaGUgRFRMUyB2ZXJzaW9uIG51bWJlciwgd2hpY2ggaXMgMHhmZWZmIGZvciBEVExTIDEu MCwgb3IgMHhmZWZkIGZvciBEVExTIDEuMi4KKyAqIFNlZSBodHRwczovL2RhdGF0cmFja2VyLmll dGYub3JnL2RvYy9odG1sL3JmYzkxNDcjbmFtZS10aGUtZHRscy1yZWNvcmQtbGF5ZXIKKyAqLwor I2RlZmluZSBEVExTX1ZFUlNJT05fMTAgMHhmZWZmCisjZGVmaW5lIERUTFNfVkVSU0lPTl8xMiAw eGZlZmQKKworLyoqCisgKiBNYXhpbXVtIHNpemUgb2YgdGhlIGJ1ZmZlciBmb3Igc2VuZGluZyBh bmQgcmVjZWl2aW5nIFVEUCBwYWNrZXRzLgorICogUGxlYXNlIG5vdGUgdGhhdCB0aGlzIHNpemUg ZG9lcyBub3QgbGltaXQgdGhlIHNpemUgb2YgdGhlIFVEUCBwYWNrZXQgdGhhdCBjYW4gYmUgc2Vu dC4KKyAqIFRvIHNldCB0aGUgbGltaXQgZm9yIHBhY2tldCBzaXplLCBtb2RpZnkgdGhlIGBwa3Rf c2l6ZWAgcGFyYW1ldGVyLgorICogRm9yIGluc3RhbmNlLCBpdCBpcyBwb3NzaWJsZSB0byBzZXQg dGhlIFVEUCBidWZmZXIgdG8gNDA5NiB0byBzZW5kIG9yIHJlY2VpdmUgcGFja2V0cywKKyAqIGJ1 dCBwbGVhc2Uga2VlcCBpbiBtaW5kIHRoYXQgdGhlIGBwa3Rfc2l6ZWAgb3B0aW9uIGxpbWl0cyB0 aGUgcGFja2V0IHNpemUgdG8gMTQwMC4KKyAqLworI2RlZmluZSBNQVhfVURQX0JVRkZFUl9TSVpF IDQwOTYKKworLyogUmVmZXJyaW5nIHRvIENocm9tZSdzIGRlZmluaXRpb24gb2YgUlRQIHBheWxv YWQgdHlwZXMuICovCisjZGVmaW5lIFdISVBfUlRQX1BBWUxPQURfVFlQRV9IMjY0IDEwNgorI2Rl ZmluZSBXSElQX1JUUF9QQVlMT0FEX1RZUEVfT1BVUyAxMTEKKworLyoqCisgKiBUaGUgU1RVTiBt ZXNzYWdlIGhlYWRlciwgd2hpY2ggaXMgMjAgYnl0ZXMgbG9uZywgY29tcHJpc2VzIHRoZQorICog U1RVTk1lc3NhZ2VUeXBlICgxQiksIE1lc3NhZ2VMZW5ndGggKDJCKSwgTWFnaWNDb29raWUgKDRC KSwKKyAqIGFuZCBUcmFuc2FjdGlvbklEICgxMkIpLgorICogU2VlIGh0dHBzOi8vZGF0YXRyYWNr ZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNTM4OSNzZWN0aW9uLTYKKyAqLworI2RlZmluZSBJQ0Vf U1RVTl9IRUFERVJfU0laRSAyMAorCisvKioKKyAqIFRoZSBSVFAgaGVhZGVyIGlzIDEyIGJ5dGVz IGxvbmcsIGNvbXByaXNpbmcgdGhlIFZlcnNpb24oMUIpLCBQVCgxQiksCisgKiBTZXF1ZW5jZU51 bWJlcigyQiksIFRpbWVzdGFtcCg0QiksIGFuZCBTU1JDKDRCKS4KKyAqIFNlZSBodHRwczovL3d3 dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjMzU1MCNzZWN0aW9uLTUuMQorICovCisjZGVmaW5lIFdI SVBfUlRQX0hFQURFUl9TSVpFIDEyCisKKy8qKgorICogRm9yIFJUQ1AsIFBUIGlzIFsxMjgsIDIy M10gKG9yIHdpdGhvdXQgbWFya2VyIFswLCA5NV0pLiBMaXRlcmFsbHksIFJUQ1Agc3RhcnRzCisg KiBmcm9tIDY0IG5vdCAwLCBzbyBQVCBpcyBbMTkyLCAyMjNdIChvciB3aXRob3V0IG1hcmtlciBb NjQsIDk1XSksIHNlZSAiUlRDUCBDb250cm9sCisgKiBQYWNrZXQgVHlwZXMgKFBUKSIgYXQKKyAq IGh0dHBzOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL3J0cC1wYXJhbWV0ZXJzL3J0cC1wYXJh bWV0ZXJzLnhodG1sI3J0cC1wYXJhbWV0ZXJzLTQKKyAqCisgKiBGb3IgUlRQLCB0aGUgUFQgaXMg Wzk2LCAxMjddLCBvciBbMjI0LCAyNTVdIHdpdGggbWFya2VyLiBTZWUgIlJUUCBQYXlsb2FkIFR5 cGVzIChQVCkKKyAqIGZvciBzdGFuZGFyZCBhdWRpbyBhbmQgdmlkZW8gZW5jb2RpbmdzIiBhdAor ICogaHR0cHM6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvcnRwLXBhcmFtZXRlcnMvcnRwLXBh cmFtZXRlcnMueGh0bWwjcnRwLXBhcmFtZXRlcnMtMQorICovCisjZGVmaW5lIFdISVBfUlRDUF9Q VF9TVEFSVCAxOTIKKyNkZWZpbmUgV0hJUF9SVENQX1BUX0VORCAgIDIyMworCisvKioKKyAqIElu IHRoZSBjYXNlIG9mIElDRS1MSVRFLCB0aGVzZSBmaWVsZHMgYXJlIG5vdCB1c2VkOyBpbnN0ZWFk LCB0aGV5IGFyZSBkZWZpbmVkCisgKiBhcyBjb25zdGFudCB2YWx1ZXMuCisgKi8KKyNkZWZpbmUg V0hJUF9TRFBfU0VTU0lPTl9JRCAiNDQ4OTA0NTE0MTY5Mjc5OTM1OSIKKyNkZWZpbmUgV0hJUF9T RFBfQ1JFQVRPUl9JUCAiMTI3LjAuMC4xIgorCisvKiBDYWxjdWxhdGUgdGhlIGVsYXBzZWQgdGlt ZSBmcm9tIHN0YXJ0dGltZSB0byBlbmR0aW1lIGluIG1pbGxpc2Vjb25kcy4gKi8KKyNkZWZpbmUg RUxBUFNFRChzdGFydHRpbWUsIGVuZHRpbWUpICgoaW50KShlbmR0aW1lIC0gc3RhcnR0aW1lKSAv IDEwMDApCisKKy8qIFNUVU4gQXR0cmlidXRlLCBjb21wcmVoZW5zaW9uLXJlcXVpcmVkIHJhbmdl ICgweDAwMDAtMHg3RkZGKSAqLworZW51bSBTVFVOQXR0ciB7CisgICAgU1RVTl9BVFRSX1VTRVJO QU1FICAgICAgICAgICAgICAgICAgPSAweDAwMDYsIC8vLyBzaGFyZWQgc2VjcmV0IHJlc3BvbnNl L2JpbmQgcmVxdWVzdAorICAgIFNUVU5fQVRUUl9VU0VfQ0FORElEQVRFICAgICAgICAgICAgID0g MHgwMDI1LCAvLy8gYmluZCByZXF1ZXN0CisgICAgU1RVTl9BVFRSX01FU1NBR0VfSU5URUdSSVRZ ICAgICAgICAgPSAweDAwMDgsIC8vLyBiaW5kIHJlcXVlc3QvcmVzcG9uc2UKKyAgICBTVFVOX0FU VFJfRklOR0VSUFJJTlQgICAgICAgICAgICAgICA9IDB4ODAyOCwgLy8vIHJmYzUzODkKK307CisK K2VudW0gV0hJUFN0YXRlIHsKKyAgICBXSElQX1NUQVRFX05PTkUsCisKKyAgICAvKiBUaGUgaW5p dGlhbCBzdGF0ZS4gKi8KKyAgICBXSElQX1NUQVRFX0lOSVQsCisgICAgLyogVGhlIG11eGVyIGhh cyBzZW50IHRoZSBvZmZlciB0byB0aGUgcGVlci4gKi8KKyAgICBXSElQX1NUQVRFX09GRkVSLAor ICAgIC8qIFRoZSBtdXhlciBoYXMgcmVjZWl2ZWQgdGhlIGFuc3dlciBmcm9tIHRoZSBwZWVyLiAq LworICAgIFdISVBfU1RBVEVfQU5TV0VSLAorICAgIC8qKgorICAgICAqIEFmdGVyIHBhcnNpbmcg dGhlIGFuc3dlciByZWNlaXZlZCBmcm9tIHRoZSBwZWVyLCB0aGUgbXV4ZXIgbmVnb3RpYXRlcyB0 aGUgYWJpbGl0aWVzCisgICAgICogaW4gdGhlIG9mZmVyIHRoYXQgaXQgZ2VuZXJhdGVkLgorICAg ICAqLworICAgIFdISVBfU1RBVEVfTkVHT1RJQVRFRCwKKyAgICAvKiBUaGUgbXV4ZXIgaGFzIGNv bm5lY3RlZCB0byB0aGUgcGVlciB2aWEgVURQLiAqLworICAgIFdISVBfU1RBVEVfVURQX0NPTk5F Q1RFRCwKKyAgICAvKiBUaGUgbXV4ZXIgaGFzIHNlbnQgdGhlIElDRSByZXF1ZXN0IHRvIHRoZSBw ZWVyLiAqLworICAgIFdISVBfU1RBVEVfSUNFX0NPTk5FQ1RJTkcsCisgICAgLyogVGhlIG11eGVy IGhhcyByZWNlaXZlZCB0aGUgSUNFIHJlc3BvbnNlIGZyb20gdGhlIHBlZXIuICovCisgICAgV0hJ UF9TVEFURV9JQ0VfQ09OTkVDVEVELAorICAgIC8qIFRoZSBtdXhlciBzdGFydHMgYXR0ZW1wdGlu ZyB0aGUgRFRMUyBoYW5kc2hha2UuICovCisgICAgV0hJUF9TVEFURV9EVExTX0NPTk5FQ1RJTkcs CisgICAgLyogVGhlIG11eGVyIGhhcyBmaW5pc2hlZCB0aGUgRFRMUyBoYW5kc2hha2Ugd2l0aCB0 aGUgcGVlci4gKi8KKyAgICBXSElQX1NUQVRFX0RUTFNfRklOSVNIRUQsCisgICAgLyogVGhlIG11 eGVyIGhhcyBmaW5pc2hlZCB0aGUgU1JUUCBzZXR1cC4gKi8KKyAgICBXSElQX1NUQVRFX1NSVFBf RklOSVNIRUQsCisgICAgLyogVGhlIG11eGVyIGlzIHJlYWR5IHRvIHNlbmQvcmVjZWl2ZSBtZWRp YSBmcmFtZXMuICovCisgICAgV0hJUF9TVEFURV9SRUFEWSwKKyAgICAvKiBUaGUgbXV4ZXIgaXMg ZmFpbGVkLiAqLworICAgIFdISVBfU1RBVEVfRkFJTEVELAorfTsKKwordHlwZWRlZiBzdHJ1Y3Qg V0hJUENvbnRleHQgeworICAgIEFWQ2xhc3MgKmF2X2NsYXNzOworCisgICAgLyogVGhlIHN0YXRl IG9mIHRoZSBSVEMgY29ubmVjdGlvbi4gKi8KKyAgICBlbnVtIFdISVBTdGF0ZSBzdGF0ZTsKKyAg ICAvKiBUaGUgY2FsbGJhY2sgcmV0dXJuIHZhbHVlIGZvciBEVExTLiAqLworICAgIGludCBkdGxz X3JldDsKKyAgICBpbnQgZHRsc19jbG9zZWQ7CisKKyAgICAvKiBQYXJhbWV0ZXJzIGZvciB0aGUg aW5wdXQgYXVkaW8gYW5kIHZpZGVvIGNvZGVjcy4gKi8KKyAgICBBVkNvZGVjUGFyYW1ldGVycyAq YXVkaW9fcGFyOworICAgIEFWQ29kZWNQYXJhbWV0ZXJzICp2aWRlb19wYXI7CisKKyAgICAvKioK KyAgICAgKiBUaGUgaDI2NF9tcDR0b2FubmV4YiBCaXRzdHJlYW0gRmlsdGVyIChCU0YpIGJ5cGFz c2VzIHRoZSBBbm5leEIgcGFja2V0OworICAgICAqIHRoZXJlZm9yZSwgaXQgaXMgZXNzZW50aWFs IHRvIGluc2VydCB0aGUgU1BTIGFuZCBQUFMgYmVmb3JlIGVhY2ggSURSIGZyYW1lCisgICAgICog aW4gc3VjaCBjYXNlcy4KKyAgICAgKi8KKyAgICBpbnQgaDI2NF9hbm5leGJfaW5zZXJ0X3Nwc19w cHM7CisKKyAgICAvKiBUaGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuICovCisgICAgQVZMRkcg cm5kOworCisgICAgLyogVGhlIElDRSB1c2VybmFtZSBhbmQgcHdkIGZyYWdtZW50IGdlbmVyYXRl ZCBieSB0aGUgbXV4ZXIuICovCisgICAgY2hhciBpY2VfdWZyYWdfbG9jYWxbOV07CisgICAgY2hh ciBpY2VfcHdkX2xvY2FsWzMzXTsKKyAgICAvKiBUaGUgU1NSQyBvZiB0aGUgYXVkaW8gYW5kIHZp ZGVvIHN0cmVhbSwgZ2VuZXJhdGVkIGJ5IHRoZSBtdXhlci4gKi8KKyAgICB1aW50MzJfdCBhdWRp b19zc3JjOworICAgIHVpbnQzMl90IHZpZGVvX3NzcmM7CisgICAgLyogVGhlIFBUKFBheWxvYWQg VHlwZSkgb2Ygc3RyZWFtLCBnZW5lcmF0ZWQgYnkgdGhlIG11eGVyLiAqLworICAgIHVpbnQ4X3Qg YXVkaW9fcGF5bG9hZF90eXBlOworICAgIHVpbnQ4X3QgdmlkZW9fcGF5bG9hZF90eXBlOworICAg IC8qKgorICAgICAqIFRoaXMgaXMgdGhlIFNEUCBvZmZlciBnZW5lcmF0ZWQgYnkgdGhlIG11eGVy IGJhc2VkIG9uIHRoZSBjb2RlYyBwYXJhbWV0ZXJzLAorICAgICAqIERUTFMsIGFuZCBJQ0UgaW5m b3JtYXRpb24uCisgICAgICovCisgICAgY2hhciAqc2RwX29mZmVyOworCisgICAgLyogVGhlIElD RSB1c2VybmFtZSBhbmQgcHdkIGZyb20gcmVtb3RlIHNlcnZlci4gKi8KKyAgICBjaGFyICppY2Vf dWZyYWdfcmVtb3RlOworICAgIGNoYXIgKmljZV9wd2RfcmVtb3RlOworICAgIC8qKgorICAgICAq IFRoaXMgcmVwcmVzZW50cyB0aGUgSUNFIGNhbmRpZGF0ZSBwcm90b2NvbCwgcHJpb3JpdHksIGhv c3QgYW5kIHBvcnQuCisgICAgICogQ3VycmVudGx5LCB3ZSBvbmx5IHN1cHBvcnQgb25lIGNhbmRp ZGF0ZSBhbmQgY2hvb3NlIHRoZSBmaXJzdCBVRFAgY2FuZGlkYXRlLgorICAgICAqIEhvd2V2ZXIs IHdlIHBsYW4gdG8gc3VwcG9ydCBtdWx0aXBsZSBjYW5kaWRhdGVzIGluIHRoZSBmdXR1cmUuCisg ICAgICovCisgICAgY2hhciAqaWNlX3Byb3RvY29sOworICAgIGNoYXIgKmljZV9ob3N0OworICAg IGludCBpY2VfcG9ydDsKKworICAgIC8qIFRoZSBTRFAgYW5zd2VyIHJlY2VpdmVkIGZyb20gdGhl IFdlYlJUQyBzZXJ2ZXIuICovCisgICAgY2hhciAqc2RwX2Fuc3dlcjsKKyAgICAvKiBUaGUgcmVz b3VyY2UgVVJMIHJldHVybmVkIGluIHRoZSBMb2NhdGlvbiBoZWFkZXIgb2YgV0hJUCBIVFRQIHJl c3BvbnNlLiAqLworICAgIGNoYXIgKndoaXBfcmVzb3VyY2VfdXJsOworCisgICAgLyogVGhlc2Ug dmFyaWFibGVzIHJlcHJlc2VudCB0aW1lc3RhbXBzIHVzZWQgZm9yIGNhbGN1bGF0aW5nIGFuZCB0 cmFja2luZyB0aGUgY29zdC4gKi8KKyAgICBpbnQ2NF90IHdoaXBfc3RhcnR0aW1lOworICAgIGlu dDY0X3Qgd2hpcF9pbml0X3RpbWU7CisgICAgaW50NjRfdCB3aGlwX29mZmVyX3RpbWU7CisgICAg aW50NjRfdCB3aGlwX2Fuc3dlcl90aW1lOworICAgIGludDY0X3Qgd2hpcF91ZHBfdGltZTsKKyAg ICBpbnQ2NF90IHdoaXBfaWNlX3RpbWU7CisgICAgaW50NjRfdCB3aGlwX2R0bHNfdGltZTsKKyAg ICBpbnQ2NF90IHdoaXBfc3J0cF90aW1lOworCisgICAgLyogVGhlIGNlcnRpZmljYXRlIGFuZCBw cml2YXRlIGtleSBjb250ZW50IHVzZWQgZm9yIERUTFMgaGFuc2hha2UgKi8KKyAgICBjaGFyIGNl cnRfYnVmW01BWF9DRVJUSUZJQ0FURV9TSVpFXTsKKyAgICBjaGFyIGtleV9idWZbTUFYX0NFUlRJ RklDQVRFX1NJWkVdOworICAgIC8qIFRoZSBmaW5nZXJwcmludCBvZiBjZXJ0aWZpY2F0ZSwgdXNl ZCBpbiBTRFAgb2ZmZXIuICovCisgICAgY2hhciAqZHRsc19maW5nZXJwcmludDsKKyAgICAvKioK KyAgICAgKiBUaGlzIHJlcHJlc2VudHMgdGhlIG1hdGVyaWFsIHVzZWQgdG8gYnVpbGQgdGhlIFNS VFAgbWFzdGVyIGtleS4gSXQgaXMKKyAgICAgKiBnZW5lcmF0ZWQgYnkgRFRMUyBhbmQgaGFzIHRo ZSBmb2xsb3dpbmcgbGF5b3V0OgorICAgICAqICAgICAgICAgIDE2QiAgICAgICAgIDE2QiAgICAg ICAgIDE0QiAgICAgICAgICAgICAxNEIKKyAgICAgKiAgICAgIGNsaWVudF9rZXkgfCBzZXJ2ZXJf a2V5IHwgY2xpZW50X3NhbHQgfCBzZXJ2ZXJfc2FsdAorICAgICAqLworICAgIHVpbnQ4X3QgZHRs c19zcnRwX21hdGVyaWFsc1soRFRMU19TUlRQX0tFWV9MRU4gKyBEVExTX1NSVFBfU0FMVF9MRU4p ICogMl07CisKKyAgICBjaGFyIHNzbF9lcnJvcl9tZXNzYWdlWzI1Nl07CisKKyAgICAvKiBUT0RP OiBVc2UgQVZJT0NvbnRleHQgaW5zdGVhZCBvZiBVUkxDb250ZXh0ICovCisgICAgVVJMQ29udGV4 dCAqZHRsc191YzsKKworICAgIC8qIFRoZSBTUlRQIHNlbmQgY29udGV4dCwgdG8gZW5jcnlwdCBv dXRnb2luZyBwYWNrZXRzLiAqLworICAgIFNSVFBDb250ZXh0IHNydHBfYXVkaW9fc2VuZDsKKyAg ICBTUlRQQ29udGV4dCBzcnRwX3ZpZGVvX3NlbmQ7CisgICAgU1JUUENvbnRleHQgc3J0cF9ydGNw X3NlbmQ7CisgICAgLyogVGhlIFNSVFAgcmVjZWl2ZSBjb250ZXh0LCB0byBkZWNyeXB0IGluY29t aW5nIHBhY2tldHMuICovCisgICAgU1JUUENvbnRleHQgc3J0cF9yZWN2OworCisgICAgLyogVGhl IFVEUCB0cmFuc3BvcnQgaXMgdXNlZCBmb3IgZGVsaXZlcmluZyBJQ0UsIERUTFMgYW5kIFNSVFAg cGFja2V0cy4gKi8KKyAgICBVUkxDb250ZXh0ICp1ZHA7CisgICAgLyogVGhlIGJ1ZmZlciBmb3Ig VURQIHRyYW5zbWlzc2lvbi4gKi8KKyAgICBjaGFyIGJ1ZltNQVhfVURQX0JVRkZFUl9TSVpFXTsK KworICAgIC8qIFRoZSB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyBmb3IgSUNFIGFuZCBEVExTIGhh bmRzaGFrZS4gKi8KKyAgICBpbnQgaGFuZHNoYWtlX3RpbWVvdXQ7CisgICAgLyoqCisgICAgICog VGhlIHNpemUgb2YgUlRQIHBhY2tldCwgc2hvdWxkIGdlbmVyYWxseSBiZSBzZXQgdG8gTVRVLgor ICAgICAqIE5vdGUgdGhhdCBwaW9uIHJlcXVpcmVzIGEgc21hbGxlciB2YWx1ZSwgZm9yIGV4YW1w bGUsIDEyMDAuCisgICAgICovCisgICAgaW50IHBrdF9zaXplOworICAgIC8qKgorICAgICAqIFRo ZSBvcHRpb25hbCBCZWFyZXIgdG9rZW4gZm9yIFdISVAgQXV0aG9yaXphdGlvbi4KKyAgICAgKiBT ZWUgaHR0cHM6Ly93d3cuaWV0Zi5vcmcvYXJjaGl2ZS9pZC9kcmFmdC1pZXRmLXdpc2gtd2hpcC0w OC5odG1sI25hbWUtYXV0aGVudGljYXRpb24tYW5kLWF1dGhvcml6CisgICAgICovCisgICAgY2hh ciogYXV0aG9yaXphdGlvbjsKKyAgICAvKiBUaGUgY2VydGlmaWNhdGUgYW5kIHByaXZhdGUga2V5 IHVzZWQgZm9yIERUTFMgaGFuZHNoYWtlLiAqLworICAgIGNoYXIqIGNlcnRfZmlsZTsKKyAgICBj aGFyKiBrZXlfZmlsZTsKK30gV0hJUENvbnRleHQ7CisKKy8qKgorICogV2hldGhlciB0aGUgcGFj a2V0IGlzIGEgRFRMUyBwYWNrZXQuCisgKi8KK3N0YXRpYyBpbnQgaXNfZHRsc19wYWNrZXQodWlu dDhfdCAqYiwgaW50IHNpemUpIHsKKyAgICB1aW50MTZfdCB2ZXJzaW9uID0gQVZfUkIxNigmYlsx XSk7CisgICAgcmV0dXJuIHNpemUgPiBEVExTX1JFQ09SRF9MQVlFUl9IRUFERVJfTEVOICYmCisg ICAgICAgIGJbMF0gPj0gRFRMU19DT05URU5UX1RZUEVfQ0hBTkdFX0NJUEhFUl9TUEVDICYmCisg ICAgICAgICh2ZXJzaW9uID09IERUTFNfVkVSU0lPTl8xMCB8fCB2ZXJzaW9uID09IERUTFNfVkVS U0lPTl8xMik7Cit9CisKKworLyoqCisgKiBHZXQgb3IgR2VuZXJhdGUgYSBzZWxmLXNpZ25lZCBj ZXJ0aWZpY2F0ZSBhbmQgcHJpdmF0ZSBrZXkgZm9yIERUTFMsCisgKiBmaW5nZXJwcmludCBmb3Ig U0RQCisgKi8KK3N0YXRpYyBhdl9jb2xkIGludCBjZXJ0aWZpY2F0ZV9rZXlfaW5pdChBVkZvcm1h dENvbnRleHQgKnMpCit7CisgICAgaW50IHJldCA9IDA7CisgICAgV0hJUENvbnRleHQgKndoaXAg PSBzLT5wcml2X2RhdGE7CisKKyAgICBpZiAod2hpcC0+Y2VydF9maWxlICYmIHdoaXAtPmtleV9m aWxlKSB7CisgICAgICAgIC8qIFJlYWQgdGhlIHByaXZhdGUga2V5IGFuZCBjZXJ0aWZpY2F0ZSBm cm9tIHRoZSBmaWxlLiAqLworICAgICAgICBpZiAoKHJldCA9IGZmX3NzbF9yZWFkX2tleV9jZXJ0 KHdoaXAtPmtleV9maWxlLCB3aGlwLT5jZXJ0X2ZpbGUsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgd2hpcC0+a2V5X2J1Ziwgc2l6ZW9mKHdoaXAtPmtleV9idWYpLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaXAtPmNlcnRfYnVmLCBz aXplb2Yod2hpcC0+Y2VydF9idWYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICZ3aGlwLT5kdGxzX2ZpbmdlcnByaW50KSkgPCAwKSB7CisgICAgICAgICAgICBhdl9s b2cocywgQVZfTE9HX0VSUk9SLCAiRFRMUzogRmFpbGVkIHRvIHJlYWQgRFRMUyBjZXJ0aWZpY2F0 ZSBmcm9tIGNlcnQ9JXMsIGtleT0lc1xuIiwKKyAgICAgICAgICAgICAgICB3aGlwLT5jZXJ0X2Zp bGUsIHdoaXAtPmtleV9maWxlKTsKKyAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgIH0K KyAgICB9IGVsc2UgeworICAgICAgICAvKiBHZW5lcmF0ZSBhIHByaXZhdGUga2V5IHRvIGN0eC0+ ZHRsc19wa2V5IGFuZCBzZWxmLXNpZ25lZCBjZXJ0aWZpY2F0ZS4gKi8KKyAgICAgICAgaWYgKChy ZXQgPSBmZl9zc2xfZ2VuX2tleV9jZXJ0KHdoaXAtPmtleV9idWYsIHNpemVvZih3aGlwLT5rZXlf YnVmKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaXAtPmNlcnRf YnVmLCBzaXplb2Yod2hpcC0+Y2VydF9idWYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJndoaXAtPmR0bHNfZmluZ2VycHJpbnQpKSA8IDApIHsKKyAgICAgICAgICAg IGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJEVExTOiBGYWlsZWQgdG8gZ2VuZXJhdGUgRFRMUyBw cml2YXRlIGtleSBhbmQgY2VydGlmaWNhdGVcbiIpOworICAgICAgICAgICAgcmV0dXJuIHJldDsK KyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiByZXQ7Cit9CisKKy8qKgorICogV2hlbiBE VExTIHN0YXRlIGNoYW5nZS4KKyAqLworc3RhdGljIGludCBkdGxzX2NvbnRleHRfb25fc3RhdGUo QVZGb3JtYXRDb250ZXh0ICpzLCBjb25zdCBjaGFyKiB0eXBlLCBjb25zdCBjaGFyKiBkZXNjKQor eworICAgIGludCByZXQgPSAwOworICAgIFdISVBDb250ZXh0ICp3aGlwID0gcy0+cHJpdl9kYXRh OworICAgIGludCBzdGF0ZSA9IGZmX2R0bHNfc3RhdGUod2hpcC0+ZHRsc191Yyk7CisKKyAgICBp ZiAoc3RhdGUgPT0gRFRMU19TVEFURV9DTE9TRUQpIHsKKyAgICAgICAgd2hpcC0+ZHRsc19jbG9z ZWQgPSAxOworICAgICAgICBhdl9sb2cod2hpcCwgQVZfTE9HX1ZFUkJPU0UsICJXSElQOiBEVExT IHNlc3Npb24gY2xvc2VkLCB0eXBlPSVzLCBkZXNjPSVzLCBlbGFwc2VkPSVkbXNcbiIsCisgICAg ICAgICAgICB0eXBlID8gdHlwZSA6ICIiLCBkZXNjID8gZGVzYyA6ICIiLCBFTEFQU0VEKHdoaXAt PndoaXBfc3RhcnR0aW1lLCBhdl9nZXR0aW1lKCkpKTsKKyAgICAgICAgZ290byBlcnJvcjsKKyAg ICB9CisKKyAgICBpZiAoc3RhdGUgPT0gRFRMU19TVEFURV9GQUlMRUQpIHsKKyAgICAgICAgd2hp cC0+c3RhdGUgPSBXSElQX1NUQVRFX0ZBSUxFRDsKKyAgICAgICAgYXZfbG9nKHdoaXAsIEFWX0xP R19FUlJPUiwgIldISVA6IERUTFMgc2Vzc2lvbiBmYWlsZWQsIHR5cGU9JXMsIGRlc2M9JXNcbiIs CisgICAgICAgICAgICB0eXBlID8gdHlwZSA6ICIiLCBkZXNjID8gZGVzYyA6ICIiKTsKKyAgICAg ICAgd2hpcC0+ZHRsc19yZXQgPSBBVkVSUk9SKEVJTyk7CisgICAgICAgIGdvdG8gZXJyb3I7Cisg ICAgfQorCisgICAgaWYgKHN0YXRlID09IERUTFNfU1RBVEVfRklOSVNIRUQgJiYgd2hpcC0+c3Rh dGUgPCBXSElQX1NUQVRFX0RUTFNfRklOSVNIRUQpIHsKKyAgICAgICAgd2hpcC0+c3RhdGUgPSBX SElQX1NUQVRFX0RUTFNfRklOSVNIRUQ7CisgICAgICAgIHdoaXAtPndoaXBfZHRsc190aW1lID0g YXZfZ2V0dGltZSgpOworICAgICAgICBhdl9sb2cod2hpcCwgQVZfTE9HX1ZFUkJPU0UsICJXSElQ OiBEVExTIGhhbmRzaGFrZSBpcyBkb25lLCBlbGFwc2VkPSVkbXNcbiIsCisgICAgICAgICAgICBF TEFQU0VEKHdoaXAtPndoaXBfc3RhcnR0aW1lLCBhdl9nZXR0aW1lKCkpKTsKKyAgICAgICAgcmV0 dXJuIHJldDsKKyAgICB9CitlcnJvcjoKKyAgICByZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBhdl9j b2xkIGludCBkdGxzX2luaXRpYWxpemUoQVZGb3JtYXRDb250ZXh0ICpzKQoreworICAgIFdISVBD b250ZXh0ICp3aGlwID0gcy0+cHJpdl9kYXRhOworICAgIC8qIHJldXNlIHRoZSB1ZHAgY3JlYXRl ZCBieSB3aGlwICovCisgICAgZmZfZHRsc19zZXRfdWRwKHdoaXAtPmR0bHNfdWMsIHdoaXAtPnVk cCk7CisgICAgcmV0dXJuIDA7Cit9CisKKy8qKgorICogSW5pdGlhbGl6ZSBhbmQgY2hlY2sgdGhl IG9wdGlvbnMgZm9yIHRoZSBXZWJSVEMgbXV4ZXIuCisgKi8KK3N0YXRpYyBhdl9jb2xkIGludCBp bml0aWFsaXplKEFWRm9ybWF0Q29udGV4dCAqcykKK3sKKyAgICBpbnQgcmV0LCBpZGVhbF9wa3Rf c2l6ZSA9IDUzMjsKKyAgICBXSElQQ29udGV4dCAqd2hpcCA9IHMtPnByaXZfZGF0YTsKKyAgICB1 aW50MzJfdCBzZWVkOworCisgICAgd2hpcC0+d2hpcF9zdGFydHRpbWUgPSBhdl9nZXR0aW1lKCk7 CisKKyAgICByZXQgPSBjZXJ0aWZpY2F0ZV9rZXlfaW5pdChzKTsKKyAgICBpZiAocmV0IDwgMCkg eworICAgICAgICBhdl9sb2cod2hpcCwgQVZfTE9HX0VSUk9SLCAiV0hJUDogRmFpbGVkIHRvIGlu aXQgY2VydGlmaWNhdGUgYW5kIGtleVxuIik7CisgICAgICAgIHJldHVybiByZXQ7CisgICAgfQor CisgICAgLyogSW5pdGlhbGl6ZSB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuICovCisgICAg c2VlZCA9IGF2X2dldF9yYW5kb21fc2VlZCgpOworICAgIGF2X2xmZ19pbml0KCZ3aGlwLT5ybmQs IHNlZWQpOworCisgICAgaWYgKHdoaXAtPnBrdF9zaXplIDwgaWRlYWxfcGt0X3NpemUpCisgICAg ICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfV0FSTklORywgIldISVA6IHBrdF9zaXplPSVkKDwlZCkg aXMgdG9vIHNtYWxsLCBtYXkgY2F1c2UgcGFja2V0IGxvc3NcbiIsCisgICAgICAgICAgICAgICB3 aGlwLT5wa3Rfc2l6ZSwgaWRlYWxfcGt0X3NpemUpOworCisgICAgaWYgKHdoaXAtPnN0YXRlIDwg V0hJUF9TVEFURV9JTklUKQorICAgICAgICB3aGlwLT5zdGF0ZSA9IFdISVBfU1RBVEVfSU5JVDsK KyAgICB3aGlwLT53aGlwX2luaXRfdGltZSA9IGF2X2dldHRpbWUoKTsKKyAgICBhdl9sb2cod2hp cCwgQVZfTE9HX1ZFUkJPU0UsICJXSElQOiBJbml0IHN0YXRlPSVkLCBoYW5kc2hha2VfdGltZW91 dD0lZG1zLCBwa3Rfc2l6ZT0lZCwgc2VlZD0lZCwgZWxhcHNlZD0lZG1zXG4iLAorICAgICAgICB3 aGlwLT5zdGF0ZSwgd2hpcC0+aGFuZHNoYWtlX3RpbWVvdXQsIHdoaXAtPnBrdF9zaXplLCBzZWVk LCBFTEFQU0VEKHdoaXAtPndoaXBfc3RhcnR0aW1lLCBhdl9nZXR0aW1lKCkpKTsKKworICAgIHJl dHVybiAwOworfQorCisvKioKKyAqIFdoZW4gZHVwbGljYXRpbmcgYSBzdHJlYW0sIHRoZSBkZW11 eGVyIGhhcyBhbHJlYWR5IHNldCB0aGUgZXh0cmFkYXRhLCBwcm9maWxlLCBhbmQKKyAqIGxldmVs IG9mIHRoZSBwYXIuIEtlZXAgaW4gbWluZCB0aGF0IHRoaXMgZnVuY3Rpb24gd2lsbCBub3QgYmUg aW52b2tlZCBzaW5jZSB0aGUKKyAqIHByb2ZpbGUgYW5kIGxldmVsIGFyZSBzZXQuCisgKgorICog V2hlbiB1dGlsaXppbmcgYW4gZW5jb2Rlciwgc3VjaCBhcyBsaWJ4MjY0LCB0byBlbmNvZGUgYSBz dHJlYW0sIHRoZSBleHRyYWRhdGEgaW4KKyAqIHBhci0+ZXh0cmFkYXRhIGNvbnRhaW5zIHRoZSBT UFMsIHdoaWNoIGluY2x1ZGVzIHByb2ZpbGUgYW5kIGxldmVsIGluZm9ybWF0aW9uLgorICogSG93 ZXZlciwgdGhlIHByb2ZpbGUgYW5kIGxldmVsIG9mIHBhciByZW1haW4gdW5zcGVjaWZpZWQuIFRo ZXJlZm9yZSwgaXQgaXMgbmVjZXNzYXJ5CisgKiB0byBleHRyYWN0IHRoZSBwcm9maWxlIGFuZCBs ZXZlbCBkYXRhIGZyb20gdGhlIGV4dHJhZGF0YSBhbmQgYXNzaWduIGl0IHRvIHRoZSBwYXIncwor ICogcHJvZmlsZSBhbmQgbGV2ZWwuIEtlZXAgaW4gbWluZCB0aGF0IEFWRk1UX0dMT0JBTEhFQURF UiBtdXN0IGJlIGVuYWJsZWQ7IG90aGVyd2lzZSwKKyAqIHRoZSBleHRyYWRhdGEgd2lsbCByZW1h aW4gZW1wdHkuCisgKi8KK3N0YXRpYyBpbnQgcGFyc2VfcHJvZmlsZV9sZXZlbChBVkZvcm1hdENv bnRleHQgKnMsIEFWQ29kZWNQYXJhbWV0ZXJzICpwYXIpCit7CisgICAgaW50IHJldCA9IDA7Cisg ICAgY29uc3QgdWludDhfdCAqciA9IHBhci0+ZXh0cmFkYXRhLCAqcjEsICplbmQgPSBwYXItPmV4 dHJhZGF0YSArIHBhci0+ZXh0cmFkYXRhX3NpemU7CisgICAgSDI2NFNQUyBzZXEsICpjb25zdCBz cHMgPSAmc2VxOworICAgIHVpbnQzMl90IHN0YXRlOworICAgIFdISVBDb250ZXh0ICp3aGlwID0g cy0+cHJpdl9kYXRhOworCisgICAgaWYgKHBhci0+Y29kZWNfaWQgIT0gQVZfQ09ERUNfSURfSDI2 NCkKKyAgICAgICAgcmV0dXJuIHJldDsKKworICAgIGlmIChwYXItPnByb2ZpbGUgIT0gQVZfUFJP RklMRV9VTktOT1dOICYmIHBhci0+bGV2ZWwgIT0gQVZfTEVWRUxfVU5LTk9XTikKKyAgICAgICAg cmV0dXJuIHJldDsKKworICAgIGlmICghcGFyLT5leHRyYWRhdGEgfHwgcGFyLT5leHRyYWRhdGFf c2l6ZSA8PSAwKSB7CisgICAgICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfRVJST1IsICJXSElQOiBV bmFibGUgdG8gcGFyc2UgcHJvZmlsZSBmcm9tIGVtcHR5IGV4dHJhZGF0YT0lcCwgc2l6ZT0lZFxu IiwKKyAgICAgICAgICAgIHBhci0+ZXh0cmFkYXRhLCBwYXItPmV4dHJhZGF0YV9zaXplKTsKKyAg ICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKKyAgICB9CisKKyAgICB3aGlsZSAoMSkgewor ICAgICAgICByID0gYXZwcml2X2ZpbmRfc3RhcnRfY29kZShyLCBlbmQsICZzdGF0ZSk7CisgICAg ICAgIGlmIChyID49IGVuZCkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIHIxID0gZmZf bmFsX2ZpbmRfc3RhcnRjb2RlKHIsIGVuZCk7CisgICAgICAgIGlmICgoc3RhdGUgJiAweDFmKSA9 PSBIMjY0X05BTF9TUFMpIHsKKyAgICAgICAgICAgIHJldCA9IGZmX2F2Y19kZWNvZGVfc3BzKHNw cywgciwgcjEgLSByKTsKKyAgICAgICAgICAgIGlmIChyZXQgPCAwKSB7CisgICAgICAgICAgICAg ICAgYXZfbG9nKHdoaXAsIEFWX0xPR19FUlJPUiwgIldISVA6IEZhaWxlZCB0byBkZWNvZGUgU1BT LCBzdGF0ZT0leCwgc2l6ZT0lZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUsIChpbnQp KHIxIC0gcikpOworICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgICAgICB9CisK KyAgICAgICAgICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfVkVSQk9TRSwgIldISVA6IFBhcnNlIHBy b2ZpbGU9JWQsIGxldmVsPSVkIGZyb20gU1BTXG4iLAorICAgICAgICAgICAgICAgIHNwcy0+cHJv ZmlsZV9pZGMsIHNwcy0+bGV2ZWxfaWRjKTsKKyAgICAgICAgICAgIHBhci0+cHJvZmlsZSA9IHNw cy0+cHJvZmlsZV9pZGM7CisgICAgICAgICAgICBwYXItPmxldmVsID0gc3BzLT5sZXZlbF9pZGM7 CisgICAgICAgIH0KKworICAgICAgICByID0gcjE7CisgICAgfQorCisgICAgcmV0dXJuIHJldDsK K30KKworLyoqCisgKiBQYXJzZXMgdmlkZW8gU1BTL1BQUyBmcm9tIHRoZSBleHRyYWRhdGEgb2Yg Y29kZWNwYXIgYW5kIGNoZWNrcyB0aGUgY29kZWMuCisgKiBDdXJyZW50bHkgb25seSBzdXBwb3J0 cyB2aWRlbyhoMjY0KSBhbmQgYXVkaW8ob3B1cykuIE5vdGUgdGhhdCBvbmx5IGJhc2VsaW5lCisg KiBhbmQgY29uc3RyYWluZWQgYmFzZWxpbmUgcHJvZmlsZXMgb2YgaDI2NCBhcmUgc3VwcG9ydGVk LgorICoKKyAqIElmIHRoZSBwcm9maWxlIGlzIGxlc3MgdGhhbiAwLCB0aGUgZnVuY3Rpb24gY29u c2lkZXJzIHRoZSBwcm9maWxlIGFzIGJhc2VsaW5lLgorICogSXQgbWF5IG5lZWQgdG8gcGFyc2Ug dGhlIHByb2ZpbGUgZnJvbSBTUFMvUFBTLiBUaGlzIHNpdHVhdGlvbiBvY2N1cnMgd2hlbiBpbmdl c3RpbmcKKyAqIGRlc2t0b3AgYW5kIHRyYW5zY29kaW5nLgorICoKKyAqIEBwYXJhbSBzIFBvaW50 ZXIgdG8gdGhlIEFWRm9ybWF0Q29udGV4dAorICogQHJldHVybnMgUmV0dXJucyAwIGlmIHN1Y2Nl c3NmdWwgb3IgQVZFUlJPUl94eHggaW4gY2FzZSBvZiBhbiBlcnJvci4KKyAqCisgKiBUT0RPOiBG SVhNRTogVGhlcmUgaXMgYW4gaXNzdWUgd2l0aCB0aGUgdGltZXN0YW1wIG9mIE9QVVMgYXVkaW8s IGVzcGVjaWFsbHkgd2hlbgorICogIHRoZSBpbnB1dCBpcyBhbiBNUDQgZmlsZS4gVGhlIHRpbWVz dGFtcCBkZXZpYXRlcyBmcm9tIHRoZSBleHBlY3RlZCB2YWx1ZSBvZiA5NjAsCisgKiAgY2F1c2lu ZyBDaHJvbWUgdG8gcGxheSB0aGUgYXVkaW8gc3RyZWFtIHdpdGggbm9pc2UuIFRoaXMgcHJvYmxl bSBjYW4gYmUgcmVwbGljYXRlZAorICogIGJ5IHRyYW5zY29kaW5nIGEgc3BlY2lmaWMgZmlsZSBp bnRvIE1QNCBmb3JtYXQgYW5kIHB1Ymxpc2hpbmcgaXQgdXNpbmcgdGhlIFdISVAKKyAqICBtdXhl ci4gSG93ZXZlciwgd2hlbiBkaXJlY3RseSB0cmFuc2NvZGluZyBhbmQgcHVibGlzaGluZyB0aHJv dWdoIHRoZSBXSElQIG11eGVyLAorICogIHRoZSBpc3N1ZSBpcyBub3QgcHJlc2VudCwgYW5kIHRo ZSBhdWRpbyB0aW1lc3RhbXAgcmVtYWlucyBjb25zaXN0ZW50LiBUaGUgcm9vdAorICogIGNhdXNl IGlzIHN0aWxsIHVua25vd24sIGFuZCB0aGlzIGNvbW1lbnQgaGFzIGJlZW4gYWRkZWQgdG8gYWRk cmVzcyB0aGlzIGlzc3VlCisgKiAgaW4gdGhlIGZ1dHVyZS4gRnVydGhlciByZXNlYXJjaCBpcyBu ZWVkZWQgdG8gcmVzb2x2ZSB0aGUgcHJvYmxlbS4KKyAqLworc3RhdGljIGludCBwYXJzZV9jb2Rl YyhBVkZvcm1hdENvbnRleHQgKnMpCit7CisgICAgaW50IGksIHJldCA9IDA7CisgICAgV0hJUENv bnRleHQgKndoaXAgPSBzLT5wcml2X2RhdGE7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgcy0+bmJf c3RyZWFtczsgaSsrKSB7CisgICAgICAgIEFWQ29kZWNQYXJhbWV0ZXJzICpwYXIgPSBzLT5zdHJl YW1zW2ldLT5jb2RlY3BhcjsKKyAgICAgICAgY29uc3QgQVZDb2RlY0Rlc2NyaXB0b3IgKmRlc2Mg PSBhdmNvZGVjX2Rlc2NyaXB0b3JfZ2V0KHBhci0+Y29kZWNfaWQpOworICAgICAgICBzd2l0Y2gg KHBhci0+Y29kZWNfdHlwZSkgeworICAgICAgICBjYXNlIEFWTUVESUFfVFlQRV9WSURFTzoKKyAg ICAgICAgICAgIGlmICh3aGlwLT52aWRlb19wYXIpIHsKKyAgICAgICAgICAgICAgICBhdl9sb2co d2hpcCwgQVZfTE9HX0VSUk9SLCAiV0hJUDogT25seSBvbmUgdmlkZW8gc3RyZWFtIGlzIHN1cHBv cnRlZCBieSBSVENcbiIpOworICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7 CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3aGlwLT52aWRlb19wYXIgPSBwYXI7CisKKyAg ICAgICAgICAgIGlmIChwYXItPmNvZGVjX2lkICE9IEFWX0NPREVDX0lEX0gyNjQpIHsKKyAgICAg ICAgICAgICAgICBhdl9sb2cod2hpcCwgQVZfTE9HX0VSUk9SLCAiV0hJUDogVW5zdXBwb3J0ZWQg dmlkZW8gY29kZWMgJXMgYnkgUlRDLCBjaG9vc2UgaDI2NFxuIiwKKyAgICAgICAgICAgICAgICAg ICAgICAgZGVzYyA/IGRlc2MtPm5hbWUgOiAidW5rbm93biIpOworICAgICAgICAgICAgICAgIHJl dHVybiBBVkVSUk9SX1BBVENIV0VMQ09NRTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg aWYgKHBhci0+dmlkZW9fZGVsYXkgPiAwKSB7CisgICAgICAgICAgICAgICAgYXZfbG9nKHdoaXAs IEFWX0xPR19FUlJPUiwgIldISVA6IFVuc3VwcG9ydGVkIEIgZnJhbWVzIGJ5IFJUQ1xuIik7Cisg ICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfUEFUQ0hXRUxDT01FOworICAgICAgICAgICAg fQorCisgICAgICAgICAgICBpZiAoKHJldCA9IHBhcnNlX3Byb2ZpbGVfbGV2ZWwocywgcGFyKSkg PCAwKSB7CisgICAgICAgICAgICAgICAgYXZfbG9nKHdoaXAsIEFWX0xPR19FUlJPUiwgIldISVA6 IEZhaWxlZCB0byBwYXJzZSBTUFMvUFBTIGZyb20gZXh0cmFkYXRhXG4iKTsKKyAgICAgICAgICAg ICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg ICBpZiAocGFyLT5wcm9maWxlID09IEFWX1BST0ZJTEVfVU5LTk9XTikgeworICAgICAgICAgICAg ICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfV0FSTklORywgIldISVA6IE5vIHByb2ZpbGUgZm91bmQg aW4gZXh0cmFkYXRhLCBjb25zaWRlciBiYXNlbGluZVxuIik7CisgICAgICAgICAgICAgICAgcmV0 dXJuIEFWRVJST1IoRUlOVkFMKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChwYXIt PmxldmVsID09IEFWX0xFVkVMX1VOS05PV04pIHsKKyAgICAgICAgICAgICAgICBhdl9sb2cod2hp cCwgQVZfTE9HX1dBUk5JTkcsICJXSElQOiBObyBsZXZlbCBmb3VuZCBpbiBleHRyYWRhdGEsIGNv bnNpZGVyIDMuMVxuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsK KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFWTUVESUFf VFlQRV9BVURJTzoKKyAgICAgICAgICAgIGlmICh3aGlwLT5hdWRpb19wYXIpIHsKKyAgICAgICAg ICAgICAgICBhdl9sb2cod2hpcCwgQVZfTE9HX0VSUk9SLCAiV0hJUDogT25seSBvbmUgYXVkaW8g c3RyZWFtIGlzIHN1cHBvcnRlZCBieSBSVENcbiIpOworICAgICAgICAgICAgICAgIHJldHVybiBB VkVSUk9SKEVJTlZBTCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3aGlwLT5hdWRpb19w YXIgPSBwYXI7CisKKyAgICAgICAgICAgIGlmIChwYXItPmNvZGVjX2lkICE9IEFWX0NPREVDX0lE X09QVVMpIHsKKyAgICAgICAgICAgICAgICBhdl9sb2cod2hpcCwgQVZfTE9HX0VSUk9SLCAiV0hJ UDogVW5zdXBwb3J0ZWQgYXVkaW8gY29kZWMgJXMgYnkgUlRDLCBjaG9vc2Ugb3B1c1xuIiwKKyAg ICAgICAgICAgICAgICAgICAgZGVzYyA/IGRlc2MtPm5hbWUgOiAidW5rbm93biIpOworICAgICAg ICAgICAgICAgIHJldHVybiBBVkVSUk9SX1BBVENIV0VMQ09NRTsKKyAgICAgICAgICAgIH0KKwor ICAgICAgICAgICAgaWYgKHBhci0+Y2hfbGF5b3V0Lm5iX2NoYW5uZWxzICE9IDIpIHsKKyAgICAg ICAgICAgICAgICBhdl9sb2cod2hpcCwgQVZfTE9HX0VSUk9SLCAiV0hJUDogVW5zdXBwb3J0ZWQg YXVkaW8gY2hhbm5lbHMgJWQgYnkgUlRDLCBjaG9vc2Ugc3RlcmVvXG4iLAorICAgICAgICAgICAg ICAgICAgICBwYXItPmNoX2xheW91dC5uYl9jaGFubmVscyk7CisgICAgICAgICAgICAgICAgcmV0 dXJuIEFWRVJST1JfUEFUQ0hXRUxDT01FOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp ZiAocGFyLT5zYW1wbGVfcmF0ZSAhPSA0ODAwMCkgeworICAgICAgICAgICAgICAgIGF2X2xvZyh3 aGlwLCBBVl9MT0dfRVJST1IsICJXSElQOiBVbnN1cHBvcnRlZCBhdWRpbyBzYW1wbGUgcmF0ZSAl ZCBieSBSVEMsIGNob29zZSA0ODAwMFxuIiwgcGFyLT5zYW1wbGVfcmF0ZSk7CisgICAgICAgICAg ICAgICAgcmV0dXJuIEFWRVJST1JfUEFUQ0hXRUxDT01FOworICAgICAgICAgICAgfQorICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBhdl9sb2cod2hpcCwg QVZfTE9HX0VSUk9SLCAiV0hJUDogQ29kZWMgdHlwZSAnJXMnIGZvciBzdHJlYW0gJWQgaXMgbm90 IHN1cHBvcnRlZCBieSBSVENcbiIsCisgICAgICAgICAgICAgICAgICAgYXZfZ2V0X21lZGlhX3R5 cGVfc3RyaW5nKHBhci0+Y29kZWNfdHlwZSksIGkpOworICAgICAgICAgICAgcmV0dXJuIEFWRVJS T1JfUEFUQ0hXRUxDT01FOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJldDsKK30K KworLyoqCisgKiBHZW5lcmF0ZSBTRFAgb2ZmZXIgYWNjb3JkaW5nIHRvIHRoZSBjb2RlYyBwYXJh bWV0ZXJzLCBEVExTIGFuZCBJQ0UgaW5mb3JtYXRpb24uCisgKgorICogTm90ZSB0aGF0IHdlIGRv bid0IHVzZSBhdl9zZHBfY3JlYXRlIHRvIGdlbmVyYXRlIFNEUCBvZmZlciBiZWNhdXNlIGl0IGRv ZXNuJ3QKKyAqIHN1cHBvcnQgRFRMUyBhbmQgSUNFIGluZm9ybWF0aW9uLgorICoKKyAqIEByZXR1 cm4gMCBpZiBPSywgQVZFUlJPUl94eHggb24gZXJyb3IKKyAqLworc3RhdGljIGludCBnZW5lcmF0 ZV9zZHBfb2ZmZXIoQVZGb3JtYXRDb250ZXh0ICpzKQoreworICAgIGludCByZXQgPSAwLCBwcm9m aWxlLCBsZXZlbCwgcHJvZmlsZV9pb3A7CisgICAgY29uc3QgY2hhciAqYWNvZGVjX25hbWUgPSBO VUxMLCAqdmNvZGVjX25hbWUgPSBOVUxMOworICAgIEFWQlByaW50IGJwOworICAgIFdISVBDb250 ZXh0ICp3aGlwID0gcy0+cHJpdl9kYXRhOworCisgICAgLyogVG8gcHJldmVudCBhIGNyYXNoIGR1 cmluZyBjbGVhbnVwLCBhbHdheXMgaW5pdGlhbGl6ZSBpdC4gKi8KKyAgICBhdl9icHJpbnRfaW5p dCgmYnAsIDEsIE1BWF9TRFBfU0laRSk7CisKKyAgICBpZiAod2hpcC0+c2RwX29mZmVyKSB7Cisg ICAgICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfRVJST1IsICJXSElQOiBTRFAgb2ZmZXIgaXMgYWxy ZWFkeSBzZXRcbiIpOworICAgICAgICByZXQgPSBBVkVSUk9SKEVJTlZBTCk7CisgICAgICAgIGdv dG8gZW5kOworICAgIH0KKworICAgIHNucHJpbnRmKHdoaXAtPmljZV91ZnJhZ19sb2NhbCwgc2l6 ZW9mKHdoaXAtPmljZV91ZnJhZ19sb2NhbCksICIlMDh4IiwKKyAgICAgICAgYXZfbGZnX2dldCgm d2hpcC0+cm5kKSk7CisgICAgc25wcmludGYod2hpcC0+aWNlX3B3ZF9sb2NhbCwgc2l6ZW9mKHdo aXAtPmljZV9wd2RfbG9jYWwpLCAiJTA4eCUwOHglMDh4JTA4eCIsCisgICAgICAgIGF2X2xmZ19n ZXQoJndoaXAtPnJuZCksIGF2X2xmZ19nZXQoJndoaXAtPnJuZCksIGF2X2xmZ19nZXQoJndoaXAt PnJuZCksCisgICAgICAgIGF2X2xmZ19nZXQoJndoaXAtPnJuZCkpOworCisgICAgd2hpcC0+YXVk aW9fc3NyYyA9IGF2X2xmZ19nZXQoJndoaXAtPnJuZCk7CisgICAgd2hpcC0+dmlkZW9fc3NyYyA9 IGF2X2xmZ19nZXQoJndoaXAtPnJuZCk7CisKKyAgICB3aGlwLT5hdWRpb19wYXlsb2FkX3R5cGUg PSBXSElQX1JUUF9QQVlMT0FEX1RZUEVfT1BVUzsKKyAgICB3aGlwLT52aWRlb19wYXlsb2FkX3R5 cGUgPSBXSElQX1JUUF9QQVlMT0FEX1RZUEVfSDI2NDsKKworICAgIGF2X2JwcmludGYoJmJwLCAi IgorICAgICAgICAidj0wXHJcbiIKKyAgICAgICAgIm89RkZtcGVnICVzIDIgSU4gSVA0ICVzXHJc biIKKyAgICAgICAgInM9RkZtcGVnUHVibGlzaFNlc3Npb25cclxuIgorICAgICAgICAidD0wIDBc clxuIgorICAgICAgICAiYT1ncm91cDpCVU5ETEUgMCAxXHJcbiIKKyAgICAgICAgImE9ZXh0bWFw LWFsbG93LW1peGVkXHJcbiIKKyAgICAgICAgImE9bXNpZC1zZW1hbnRpYzogV01TXHJcbiIsCisg ICAgICAgIFdISVBfU0RQX1NFU1NJT05fSUQsCisgICAgICAgIFdISVBfU0RQX0NSRUFUT1JfSVAp OworCisgICAgaWYgKHdoaXAtPmF1ZGlvX3BhcikgeworICAgICAgICBpZiAod2hpcC0+YXVkaW9f cGFyLT5jb2RlY19pZCA9PSBBVl9DT0RFQ19JRF9PUFVTKQorICAgICAgICAgICAgYWNvZGVjX25h bWUgPSAib3B1cyI7CisKKyAgICAgICAgYXZfYnByaW50ZigmYnAsICIiCisgICAgICAgICAgICAi bT1hdWRpbyA5IFVEUC9UTFMvUlRQL1NBVlBGICV1XHJcbiIKKyAgICAgICAgICAgICJjPUlOIElQ NCAwLjAuMC4wXHJcbiIKKyAgICAgICAgICAgICJhPWljZS11ZnJhZzolc1xyXG4iCisgICAgICAg ICAgICAiYT1pY2UtcHdkOiVzXHJcbiIKKyAgICAgICAgICAgICJhPWZpbmdlcnByaW50OnNoYS0y NTYgJXNcclxuIgorICAgICAgICAgICAgImE9c2V0dXA6cGFzc2l2ZVxyXG4iCisgICAgICAgICAg ICAiYT1taWQ6MFxyXG4iCisgICAgICAgICAgICAiYT1zZW5kb25seVxyXG4iCisgICAgICAgICAg ICAiYT1tc2lkOkZGbXBlZyBhdWRpb1xyXG4iCisgICAgICAgICAgICAiYT1ydGNwLW11eFxyXG4i CisgICAgICAgICAgICAiYT1ydHBtYXA6JXUgJXMvJWQvJWRcclxuIgorICAgICAgICAgICAgImE9 c3NyYzoldSBjbmFtZTpGRm1wZWdcclxuIgorICAgICAgICAgICAgImE9c3NyYzoldSBtc2lkOkZG bXBlZyBhdWRpb1xyXG4iLAorICAgICAgICAgICAgd2hpcC0+YXVkaW9fcGF5bG9hZF90eXBlLAor ICAgICAgICAgICAgd2hpcC0+aWNlX3VmcmFnX2xvY2FsLAorICAgICAgICAgICAgd2hpcC0+aWNl X3B3ZF9sb2NhbCwKKyAgICAgICAgICAgIHdoaXAtPmR0bHNfZmluZ2VycHJpbnQsCisgICAgICAg ICAgICB3aGlwLT5hdWRpb19wYXlsb2FkX3R5cGUsCisgICAgICAgICAgICBhY29kZWNfbmFtZSwK KyAgICAgICAgICAgIHdoaXAtPmF1ZGlvX3Bhci0+c2FtcGxlX3JhdGUsCisgICAgICAgICAgICB3 aGlwLT5hdWRpb19wYXItPmNoX2xheW91dC5uYl9jaGFubmVscywKKyAgICAgICAgICAgIHdoaXAt PmF1ZGlvX3NzcmMsCisgICAgICAgICAgICB3aGlwLT5hdWRpb19zc3JjKTsKKyAgICB9CisKKyAg ICBpZiAod2hpcC0+dmlkZW9fcGFyKSB7CisgICAgICAgIHByb2ZpbGVfaW9wID0gcHJvZmlsZSA9 IHdoaXAtPnZpZGVvX3Bhci0+cHJvZmlsZTsKKyAgICAgICAgbGV2ZWwgPSB3aGlwLT52aWRlb19w YXItPmxldmVsOworICAgICAgICBpZiAod2hpcC0+dmlkZW9fcGFyLT5jb2RlY19pZCA9PSBBVl9D T0RFQ19JRF9IMjY0KSB7CisgICAgICAgICAgICB2Y29kZWNfbmFtZSA9ICJIMjY0IjsKKyAgICAg ICAgICAgIHByb2ZpbGVfaW9wICY9IEFWX1BST0ZJTEVfSDI2NF9DT05TVFJBSU5FRDsKKyAgICAg ICAgICAgIHByb2ZpbGUgJj0gKH5BVl9QUk9GSUxFX0gyNjRfQ09OU1RSQUlORUQpOworICAgICAg ICB9CisKKyAgICAgICAgYXZfYnByaW50ZigmYnAsICIiCisgICAgICAgICAgICAibT12aWRlbyA5 IFVEUC9UTFMvUlRQL1NBVlBGICV1XHJcbiIKKyAgICAgICAgICAgICJjPUlOIElQNCAwLjAuMC4w XHJcbiIKKyAgICAgICAgICAgICJhPWljZS11ZnJhZzolc1xyXG4iCisgICAgICAgICAgICAiYT1p Y2UtcHdkOiVzXHJcbiIKKyAgICAgICAgICAgICJhPWZpbmdlcnByaW50OnNoYS0yNTYgJXNcclxu IgorICAgICAgICAgICAgImE9c2V0dXA6cGFzc2l2ZVxyXG4iCisgICAgICAgICAgICAiYT1taWQ6 MVxyXG4iCisgICAgICAgICAgICAiYT1zZW5kb25seVxyXG4iCisgICAgICAgICAgICAiYT1tc2lk OkZGbXBlZyB2aWRlb1xyXG4iCisgICAgICAgICAgICAiYT1ydGNwLW11eFxyXG4iCisgICAgICAg ICAgICAiYT1ydGNwLXJzaXplXHJcbiIKKyAgICAgICAgICAgICJhPXJ0cG1hcDoldSAlcy85MDAw MFxyXG4iCisgICAgICAgICAgICAiYT1mbXRwOiV1IGxldmVsLWFzeW1tZXRyeS1hbGxvd2VkPTE7 cGFja2V0aXphdGlvbi1tb2RlPTE7cHJvZmlsZS1sZXZlbC1pZD0lMDJ4JTAyeCUwMnhcclxuIgor ICAgICAgICAgICAgImE9c3NyYzoldSBjbmFtZTpGRm1wZWdcclxuIgorICAgICAgICAgICAgImE9 c3NyYzoldSBtc2lkOkZGbXBlZyB2aWRlb1xyXG4iLAorICAgICAgICAgICAgd2hpcC0+dmlkZW9f cGF5bG9hZF90eXBlLAorICAgICAgICAgICAgd2hpcC0+aWNlX3VmcmFnX2xvY2FsLAorICAgICAg ICAgICAgd2hpcC0+aWNlX3B3ZF9sb2NhbCwKKyAgICAgICAgICAgIHdoaXAtPmR0bHNfZmluZ2Vy cHJpbnQsCisgICAgICAgICAgICB3aGlwLT52aWRlb19wYXlsb2FkX3R5cGUsCisgICAgICAgICAg ICB2Y29kZWNfbmFtZSwKKyAgICAgICAgICAgIHdoaXAtPnZpZGVvX3BheWxvYWRfdHlwZSwKKyAg ICAgICAgICAgIHByb2ZpbGUsCisgICAgICAgICAgICBwcm9maWxlX2lvcCwKKyAgICAgICAgICAg IGxldmVsLAorICAgICAgICAgICAgd2hpcC0+dmlkZW9fc3NyYywKKyAgICAgICAgICAgIHdoaXAt PnZpZGVvX3NzcmMpOworICAgIH0KKworICAgIGlmICghYXZfYnByaW50X2lzX2NvbXBsZXRlKCZi cCkpIHsKKyAgICAgICAgYXZfbG9nKHdoaXAsIEFWX0xPR19FUlJPUiwgIldISVA6IE9mZmVyIGV4 Y2VlZCBtYXggJWQsICVzXG4iLCBNQVhfU0RQX1NJWkUsIGJwLnN0cik7CisgICAgICAgIHJldCA9 IEFWRVJST1IoRUlPKTsKKyAgICAgICAgZ290byBlbmQ7CisgICAgfQorCisgICAgd2hpcC0+c2Rw X29mZmVyID0gYXZfc3RyZHVwKGJwLnN0cik7CisgICAgaWYgKCF3aGlwLT5zZHBfb2ZmZXIpIHsK KyAgICAgICAgcmV0ID0gQVZFUlJPUihFTk9NRU0pOworICAgICAgICBnb3RvIGVuZDsKKyAgICB9 CisKKyAgICBpZiAod2hpcC0+c3RhdGUgPCBXSElQX1NUQVRFX09GRkVSKQorICAgICAgICB3aGlw LT5zdGF0ZSA9IFdISVBfU1RBVEVfT0ZGRVI7CisgICAgd2hpcC0+d2hpcF9vZmZlcl90aW1lID0g YXZfZ2V0dGltZSgpOworICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfVkVSQk9TRSwgIldISVA6IEdl bmVyYXRlZCBzdGF0ZT0lZCwgb2ZmZXI6ICVzXG4iLCB3aGlwLT5zdGF0ZSwgd2hpcC0+c2RwX29m ZmVyKTsKKworZW5kOgorICAgIGF2X2JwcmludF9maW5hbGl6ZSgmYnAsIE5VTEwpOworICAgIHJl dHVybiByZXQ7Cit9CisKKy8qKgorICogRXhjaGFuZ2UgU0RQIG9mZmVyIHdpdGggV2ViUlRDIHBl ZXIgdG8gZ2V0IHRoZSBhbnN3ZXIuCisgKgorICogQHJldHVybiAwIGlmIE9LLCBBVkVSUk9SX3h4 eCBvbiBlcnJvcgorICovCitzdGF0aWMgaW50IGV4Y2hhbmdlX3NkcChBVkZvcm1hdENvbnRleHQg KnMpCit7CisgICAgaW50IHJldDsKKyAgICBjaGFyIGJ1ZltNQVhfVVJMX1NJWkVdOworICAgIEFW QlByaW50IGJwOworICAgIFdISVBDb250ZXh0ICp3aGlwID0gcy0+cHJpdl9kYXRhOworICAgIC8q IFRoZSBVUkwgY29udGV4dCBpcyBhbiBIVFRQIHRyYW5zcG9ydCBsYXllciBmb3IgdGhlIFdISVAg cHJvdG9jb2wuICovCisgICAgVVJMQ29udGV4dCAqd2hpcF91YyA9IE5VTEw7CisgICAgQVZEaWN0 aW9uYXJ5ICpvcHRzID0gTlVMTDsKKyAgICBjaGFyICpoZXhfZGF0YSA9IE5VTEw7CisKKyAgICAv KiBUbyBwcmV2ZW50IGEgY3Jhc2ggZHVyaW5nIGNsZWFudXAsIGFsd2F5cyBpbml0aWFsaXplIGl0 LiAqLworICAgIGF2X2JwcmludF9pbml0KCZicCwgMSwgTUFYX1NEUF9TSVpFKTsKKworICAgIGlm ICghd2hpcC0+c2RwX29mZmVyIHx8ICFzdHJsZW4od2hpcC0+c2RwX29mZmVyKSkgeworICAgICAg ICBhdl9sb2cod2hpcCwgQVZfTE9HX0VSUk9SLCAiV0hJUDogTm8gb2ZmZXIgdG8gZXhjaGFuZ2Vc biIpOworICAgICAgICByZXQgPSBBVkVSUk9SKEVJTlZBTCk7CisgICAgICAgIGdvdG8gZW5kOwor ICAgIH0KKworICAgIHJldCA9IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICJDYWNoZS1Db250 cm9sOiBuby1jYWNoZVxyXG5Db250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3NkcFxyXG4iKTsKKyAg ICBpZiAod2hpcC0+YXV0aG9yaXphdGlvbikKKyAgICAgICAgcmV0ICs9IHNucHJpbnRmKGJ1ZiAr IHJldCwgc2l6ZW9mKGJ1ZikgLSByZXQsICJBdXRob3JpemF0aW9uOiBCZWFyZXIgJXNcclxuIiwg d2hpcC0+YXV0aG9yaXphdGlvbik7CisgICAgaWYgKHJldCA8PSAwIHx8IHJldCA+PSBzaXplb2Yo YnVmKSkgeworICAgICAgICBhdl9sb2cod2hpcCwgQVZfTE9HX0VSUk9SLCAiV0hJUDogRmFpbGVk IHRvIGdlbmVyYXRlIGhlYWRlcnMsIHNpemU9JWQsICVzXG4iLCByZXQsIGJ1Zik7CisgICAgICAg IHJldCA9IEFWRVJST1IoRUlOVkFMKTsKKyAgICAgICAgZ290byBlbmQ7CisgICAgfQorCisgICAg YXZfZGljdF9zZXQoJm9wdHMsICJoZWFkZXJzIiwgYnVmLCAwKTsKKyAgICBhdl9kaWN0X3NldF9p bnQoJm9wdHMsICJjaHVua2VkX3Bvc3QiLCAwLCAwKTsKKworICAgIGhleF9kYXRhID0gYXZfbWFs bG9jeigyICogc3RybGVuKHdoaXAtPnNkcF9vZmZlcikgKyAxKTsKKyAgICBpZiAoIWhleF9kYXRh KSB7CisgICAgICAgIHJldCA9IEFWRVJST1IoRU5PTUVNKTsKKyAgICAgICAgZ290byBlbmQ7Cisg ICAgfQorICAgIGZmX2RhdGFfdG9faGV4KGhleF9kYXRhLCB3aGlwLT5zZHBfb2ZmZXIsIHN0cmxl bih3aGlwLT5zZHBfb2ZmZXIpLCAwKTsKKyAgICBhdl9kaWN0X3NldCgmb3B0cywgInBvc3RfZGF0 YSIsIGhleF9kYXRhLCAwKTsKKworICAgIHJldCA9IGZmdXJsX29wZW5fd2hpdGVsaXN0KCZ3aGlw X3VjLCBzLT51cmwsIEFWSU9fRkxBR19SRUFEX1dSSVRFLCAmcy0+aW50ZXJydXB0X2NhbGxiYWNr LAorICAgICAgICAmb3B0cywgcy0+cHJvdG9jb2xfd2hpdGVsaXN0LCBzLT5wcm90b2NvbF9ibGFj a2xpc3QsIE5VTEwpOworICAgIGlmIChyZXQgPCAwKSB7CisgICAgICAgIGF2X2xvZyh3aGlwLCBB Vl9MT0dfRVJST1IsICJXSElQOiBGYWlsZWQgdG8gcmVxdWVzdCB1cmw9JXMsIG9mZmVyOiAlc1xu Iiwgcy0+dXJsLCB3aGlwLT5zZHBfb2ZmZXIpOworICAgICAgICBnb3RvIGVuZDsKKyAgICB9CisK KyAgICBpZiAoZmZfaHR0cF9nZXRfbmV3X2xvY2F0aW9uKHdoaXBfdWMpKSB7CisgICAgICAgIHdo aXAtPndoaXBfcmVzb3VyY2VfdXJsID0gYXZfc3RyZHVwKGZmX2h0dHBfZ2V0X25ld19sb2NhdGlv bih3aGlwX3VjKSk7CisgICAgICAgIGlmICghd2hpcC0+d2hpcF9yZXNvdXJjZV91cmwpIHsKKyAg ICAgICAgICAgIHJldCA9IEFWRVJST1IoRU5PTUVNKTsKKyAgICAgICAgICAgIGdvdG8gZW5kOwor ICAgICAgICB9CisgICAgfQorCisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgcmV0ID0gZmZ1cmxf cmVhZCh3aGlwX3VjLCBidWYsIHNpemVvZihidWYpKTsKKyAgICAgICAgaWYgKHJldCA9PSBBVkVS Uk9SX0VPRikgeworICAgICAgICAgICAgLyogUmVzZXQgdGhlIGVycm9yIGJlY2F1c2Ugd2UgcmVh ZCBhbGwgcmVzcG9uc2UgYXMgYW5zd2VyIHV0aWwgRU9GLiAqLworICAgICAgICAgICAgcmV0ID0g MDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChyZXQgPD0gMCkg eworICAgICAgICAgICAgYXZfbG9nKHdoaXAsIEFWX0xPR19FUlJPUiwgIldISVA6IEZhaWxlZCB0 byByZWFkIHJlc3BvbnNlIGZyb20gdXJsPSVzLCBvZmZlciBpcyAlcywgYW5zd2VyIGlzICVzXG4i LAorICAgICAgICAgICAgICAgIHMtPnVybCwgd2hpcC0+c2RwX29mZmVyLCB3aGlwLT5zZHBfYW5z d2VyKTsKKyAgICAgICAgICAgIGdvdG8gZW5kOworICAgICAgICB9CisKKyAgICAgICAgYXZfYnBy aW50ZigmYnAsICIlLipzIiwgcmV0LCBidWYpOworICAgICAgICBpZiAoIWF2X2JwcmludF9pc19j b21wbGV0ZSgmYnApKSB7CisgICAgICAgICAgICBhdl9sb2cod2hpcCwgQVZfTE9HX0VSUk9SLCAi V0hJUDogQW5zd2VyIGV4Y2VlZCBtYXggc2l6ZSAlZCwgJS4qcywgJXNcbiIsIE1BWF9TRFBfU0la RSwgcmV0LCBidWYsIGJwLnN0cik7CisgICAgICAgICAgICByZXQgPSBBVkVSUk9SKEVJTyk7Cisg ICAgICAgICAgICBnb3RvIGVuZDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghYXZfc3Ry c3RhcnQoYnAuc3RyLCAidj0iLCBOVUxMKSkgeworICAgICAgICBhdl9sb2cod2hpcCwgQVZfTE9H X0VSUk9SLCAiV0hJUDogSW52YWxpZCBhbnN3ZXI6ICVzXG4iLCBicC5zdHIpOworICAgICAgICBy ZXQgPSBBVkVSUk9SKEVJTlZBTCk7CisgICAgICAgIGdvdG8gZW5kOworICAgIH0KKworICAgIHdo aXAtPnNkcF9hbnN3ZXIgPSBhdl9zdHJkdXAoYnAuc3RyKTsKKyAgICBpZiAoIXdoaXAtPnNkcF9h bnN3ZXIpIHsKKyAgICAgICAgcmV0ID0gQVZFUlJPUihFTk9NRU0pOworICAgICAgICBnb3RvIGVu ZDsKKyAgICB9CisKKyAgICBpZiAod2hpcC0+c3RhdGUgPCBXSElQX1NUQVRFX0FOU1dFUikKKyAg ICAgICAgd2hpcC0+c3RhdGUgPSBXSElQX1NUQVRFX0FOU1dFUjsKKyAgICBhdl9sb2cod2hpcCwg QVZfTE9HX1ZFUkJPU0UsICJXSElQOiBHb3Qgc3RhdGU9JWQsIGFuc3dlcjogJXNcbiIsIHdoaXAt PnN0YXRlLCB3aGlwLT5zZHBfYW5zd2VyKTsKKworZW5kOgorICAgIGZmdXJsX2Nsb3NlcCgmd2hp cF91Yyk7CisgICAgYXZfYnByaW50X2ZpbmFsaXplKCZicCwgTlVMTCk7CisgICAgYXZfZGljdF9m cmVlKCZvcHRzKTsKKyAgICBhdl9mcmVlcCgmaGV4X2RhdGEpOworICAgIHJldHVybiByZXQ7Cit9 CisKKy8qKgorICogUGFyc2VzIHRoZSBJQ0UgdWZyYWcsIHB3ZCwgYW5kIGNhbmRpZGF0ZXMgZnJv bSB0aGUgU0RQIGFuc3dlci4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZXh0cmFj dCB0aGUgSUNFIHVmcmFnLCBwd2QsIGFuZCBjYW5kaWRhdGVzIGZyb20gdGhlIFNEUCBhbnN3ZXIu CisgKiBJdCByZXR1cm5zIGFuIGVycm9yIGlmIGFueSBvZiB0aGVzZSBmaWVsZHMgaXMgTlVMTC4g VGhlIGZ1bmN0aW9uIG9ubHkgdXNlcyB0aGUgZmlyc3QKKyAqIGNhbmRpZGF0ZSBpZiB0aGVyZSBh cmUgbXVsdGlwbGUgY2FuZGlkYXRlcy4gSG93ZXZlciwgc3VwcG9ydCBmb3IgbXVsdGlwbGUgY2Fu ZGlkYXRlcworICogd2lsbCBiZSBhZGRlZCBpbiB0aGUgZnV0dXJlLgorICoKKyAqIEBwYXJhbSBz IFBvaW50ZXIgdG8gdGhlIEFWRm9ybWF0Q29udGV4dAorICogQHJldHVybnMgUmV0dXJucyAwIGlm IHN1Y2Nlc3NmdWwgb3IgQVZFUlJPUl94eHggaWYgYW4gZXJyb3Igb2NjdXJzLgorICovCitzdGF0 aWMgaW50IHBhcnNlX2Fuc3dlcihBVkZvcm1hdENvbnRleHQgKnMpCit7CisgICAgaW50IHJldCA9 IDA7CisgICAgQVZJT0NvbnRleHQgKnBiOworICAgIGNoYXIgbGluZVtNQVhfVVJMX1NJWkVdOwor ICAgIGNvbnN0IGNoYXIgKnB0cjsKKyAgICBpbnQgaTsKKyAgICBXSElQQ29udGV4dCAqd2hpcCA9 IHMtPnByaXZfZGF0YTsKKworICAgIGlmICghd2hpcC0+c2RwX2Fuc3dlciB8fCAhc3RybGVuKHdo aXAtPnNkcF9hbnN3ZXIpKSB7CisgICAgICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfRVJST1IsICJX SElQOiBObyBhbnN3ZXIgdG8gcGFyc2VcbiIpOworICAgICAgICByZXQgPSBBVkVSUk9SKEVJTlZB TCk7CisgICAgICAgIGdvdG8gZW5kOworICAgIH0KKworICAgIHBiID0gYXZpb19hbGxvY19jb250 ZXh0KHdoaXAtPnNkcF9hbnN3ZXIsIHN0cmxlbih3aGlwLT5zZHBfYW5zd2VyKSwgMCwgTlVMTCwg TlVMTCwgTlVMTCwgTlVMTCk7CisgICAgaWYgKCFwYikKKyAgICAgICAgcmV0dXJuIEFWRVJST1Io RU5PTUVNKTsKKworICAgIGZvciAoaSA9IDA7ICFhdmlvX2Zlb2YocGIpOyBpKyspIHsKKyAgICAg ICAgZmZfZ2V0X2Nob21wX2xpbmUocGIsIGxpbmUsIHNpemVvZihsaW5lKSk7CisgICAgICAgIGlm IChhdl9zdHJzdGFydChsaW5lLCAiYT1pY2UtdWZyYWc6IiwgJnB0cikgJiYgIXdoaXAtPmljZV91 ZnJhZ19yZW1vdGUpIHsKKyAgICAgICAgICAgIHdoaXAtPmljZV91ZnJhZ19yZW1vdGUgPSBhdl9z dHJkdXAocHRyKTsKKyAgICAgICAgICAgIGlmICghd2hpcC0+aWNlX3VmcmFnX3JlbW90ZSkgewor ICAgICAgICAgICAgICAgIHJldCA9IEFWRVJST1IoRU5PTUVNKTsKKyAgICAgICAgICAgICAgICBn b3RvIGVuZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChhdl9zdHJzdGFydChs aW5lLCAiYT1pY2UtcHdkOiIsICZwdHIpICYmICF3aGlwLT5pY2VfcHdkX3JlbW90ZSkgeworICAg ICAgICAgICAgd2hpcC0+aWNlX3B3ZF9yZW1vdGUgPSBhdl9zdHJkdXAocHRyKTsKKyAgICAgICAg ICAgIGlmICghd2hpcC0+aWNlX3B3ZF9yZW1vdGUpIHsKKyAgICAgICAgICAgICAgICByZXQgPSBB VkVSUk9SKEVOT01FTSk7CisgICAgICAgICAgICAgICAgZ290byBlbmQ7CisgICAgICAgICAgICB9 CisgICAgICAgIH0gZWxzZSBpZiAoYXZfc3Ryc3RhcnQobGluZSwgImE9Y2FuZGlkYXRlOiIsICZw dHIpICYmICF3aGlwLT5pY2VfcHJvdG9jb2wpIHsKKyAgICAgICAgICAgIHB0ciA9IGF2X3N0cmlz dHIocHRyLCAidWRwIik7CisgICAgICAgICAgICBpZiAocHRyICYmIGF2X3N0cmlzdHIocHRyLCAi aG9zdCIpKSB7CisgICAgICAgICAgICAgICAgY2hhciBwcm90b2NvbFsxN10sIGhvc3RbMTI5XTsK KyAgICAgICAgICAgICAgICBpbnQgcHJpb3JpdHksIHBvcnQ7CisgICAgICAgICAgICAgICAgcmV0 ID0gc3NjYW5mKHB0ciwgIiUxNnMgJWQgJTEyOHMgJWQgdHlwIGhvc3QiLCBwcm90b2NvbCwgJnBy aW9yaXR5LCBob3N0LCAmcG9ydCk7CisgICAgICAgICAgICAgICAgaWYgKHJldCAhPSA0KSB7Cisg ICAgICAgICAgICAgICAgICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfRVJST1IsICJXSElQOiBGYWls ZWQgJWQgdG8gcGFyc2UgbGluZSAlZCAlcyBmcm9tICVzXG4iLAorICAgICAgICAgICAgICAgICAg ICAgICAgcmV0LCBpLCBsaW5lLCB3aGlwLT5zZHBfYW5zd2VyKTsKKyAgICAgICAgICAgICAgICAg ICAgcmV0ID0gQVZFUlJPUihFSU8pOworICAgICAgICAgICAgICAgICAgICBnb3RvIGVuZDsKKyAg ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoYXZfc3RyY2FzZWNtcChwcm90 b2NvbCwgInVkcCIpKSB7CisgICAgICAgICAgICAgICAgICAgIGF2X2xvZyh3aGlwLCBBVl9MT0df RVJST1IsICJXSElQOiBQcm90b2NvbCAlcyBpcyBub3Qgc3VwcG9ydGVkIGJ5IFJUQywgY2hvb3Nl IHVkcCwgbGluZSAlZCAlcyBvZiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3Rv Y29sLCBpLCBsaW5lLCB3aGlwLT5zZHBfYW5zd2VyKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0 ID0gQVZFUlJPUihFSU8pOworICAgICAgICAgICAgICAgICAgICBnb3RvIGVuZDsKKyAgICAgICAg ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB3aGlwLT5pY2VfcHJvdG9jb2wgPSBhdl9zdHJk dXAocHJvdG9jb2wpOworICAgICAgICAgICAgICAgIHdoaXAtPmljZV9ob3N0ID0gYXZfc3RyZHVw KGhvc3QpOworICAgICAgICAgICAgICAgIHdoaXAtPmljZV9wb3J0ID0gcG9ydDsKKyAgICAgICAg ICAgICAgICBpZiAoIXdoaXAtPmljZV9wcm90b2NvbCB8fCAhd2hpcC0+aWNlX2hvc3QpIHsKKyAg ICAgICAgICAgICAgICAgICAgcmV0ID0gQVZFUlJPUihFTk9NRU0pOworICAgICAgICAgICAgICAg ICAgICBnb3RvIGVuZDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg IH0KKyAgICB9CisKKyAgICBpZiAoIXdoaXAtPmljZV9wd2RfcmVtb3RlIHx8ICFzdHJsZW4od2hp cC0+aWNlX3B3ZF9yZW1vdGUpKSB7CisgICAgICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfRVJST1Is ICJXSElQOiBObyByZW1vdGUgaWNlIHB3ZCBwYXJzZWQgZnJvbSAlc1xuIiwgd2hpcC0+c2RwX2Fu c3dlcik7CisgICAgICAgIHJldCA9IEFWRVJST1IoRUlOVkFMKTsKKyAgICAgICAgZ290byBlbmQ7 CisgICAgfQorCisgICAgaWYgKCF3aGlwLT5pY2VfdWZyYWdfcmVtb3RlIHx8ICFzdHJsZW4od2hp cC0+aWNlX3VmcmFnX3JlbW90ZSkpIHsKKyAgICAgICAgYXZfbG9nKHdoaXAsIEFWX0xPR19FUlJP UiwgIldISVA6IE5vIHJlbW90ZSBpY2UgdWZyYWcgcGFyc2VkIGZyb20gJXNcbiIsIHdoaXAtPnNk cF9hbnN3ZXIpOworICAgICAgICByZXQgPSBBVkVSUk9SKEVJTlZBTCk7CisgICAgICAgIGdvdG8g ZW5kOworICAgIH0KKworICAgIGlmICghd2hpcC0+aWNlX3Byb3RvY29sIHx8ICF3aGlwLT5pY2Vf aG9zdCB8fCAhd2hpcC0+aWNlX3BvcnQpIHsKKyAgICAgICAgYXZfbG9nKHdoaXAsIEFWX0xPR19F UlJPUiwgIldISVA6IE5vIGljZSBjYW5kaWRhdGUgcGFyc2VkIGZyb20gJXNcbiIsIHdoaXAtPnNk cF9hbnN3ZXIpOworICAgICAgICByZXQgPSBBVkVSUk9SKEVJTlZBTCk7CisgICAgICAgIGdvdG8g ZW5kOworICAgIH0KKworICAgIGlmICh3aGlwLT5zdGF0ZSA8IFdISVBfU1RBVEVfTkVHT1RJQVRF RCkKKyAgICAgICAgd2hpcC0+c3RhdGUgPSBXSElQX1NUQVRFX05FR09USUFURUQ7CisgICAgd2hp cC0+d2hpcF9hbnN3ZXJfdGltZSA9IGF2X2dldHRpbWUoKTsKKyAgICBhdl9sb2cod2hpcCwgQVZf TE9HX1ZFUkJPU0UsICJXSElQOiBTRFAgc3RhdGU9JWQsIG9mZmVyPSVsdUIsIGFuc3dlcj0lbHVC LCB1ZnJhZz0lcywgcHdkPSVsdUIsIHRyYW5zcG9ydD0lczovLyVzOiVkLCBlbGFwc2VkPSVkbXNc biIsCisgICAgICAgIHdoaXAtPnN0YXRlLCBzdHJsZW4od2hpcC0+c2RwX29mZmVyKSwgc3RybGVu KHdoaXAtPnNkcF9hbnN3ZXIpLCB3aGlwLT5pY2VfdWZyYWdfcmVtb3RlLCBzdHJsZW4od2hpcC0+ aWNlX3B3ZF9yZW1vdGUpLAorICAgICAgICB3aGlwLT5pY2VfcHJvdG9jb2wsIHdoaXAtPmljZV9o b3N0LCB3aGlwLT5pY2VfcG9ydCwgRUxBUFNFRCh3aGlwLT53aGlwX3N0YXJ0dGltZSwgYXZfZ2V0 dGltZSgpKSk7CisKK2VuZDoKKyAgICBhdmlvX2NvbnRleHRfZnJlZSgmcGIpOworICAgIHJldHVy biByZXQ7Cit9CisKKy8qKgorICogQ3JlYXRlcyBhbmQgbWFyc2hhbHMgYW4gSUNFIGJpbmRpbmcg cmVxdWVzdCBwYWNrZXQuCisgKgorICogVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGFuZCBtYXJzaGFs cyBhbiBJQ0UgYmluZGluZyByZXF1ZXN0IHBhY2tldC4gVGhlIGZ1bmN0aW9uIG9ubHkKKyAqIGdl bmVyYXRlcyB0aGUgdXNlcm5hbWUgYXR0cmlidXRlIGFuZCBkb2VzIG5vdCBpbmNsdWRlIGdvb2ct bmV0d29yay1pbmZvLCBpY2UtY29udHJvbGxpbmcsCisgKiB1c2UtY2FuZGlkYXRlLCBhbmQgcHJp b3JpdHkuIEhvd2V2ZXIsIHNvbWUgb2YgdGhlc2UgYXR0cmlidXRlcyBtYXkgYmUgYWRkZWQgaW4g dGhlIGZ1dHVyZS4KKyAqCisgKiBAcGFyYW0gcyBQb2ludGVyIHRvIHRoZSBBVkZvcm1hdENvbnRl eHQKKyAqIEBwYXJhbSBidWYgUG9pbnRlciB0byBtZW1vcnkgYnVmZmVyIHRvIHN0b3JlIHRoZSBy ZXF1ZXN0IHBhY2tldAorICogQHBhcmFtIGJ1Zl9zaXplIFNpemUgb2YgdGhlIG1lbW9yeSBidWZm ZXIKKyAqIEBwYXJhbSByZXF1ZXN0X3NpemUgUG9pbnRlciB0byBhbiBpbnRlZ2VyIHRoYXQgcmVj ZWl2ZXMgdGhlIHNpemUgb2YgdGhlIHJlcXVlc3QgcGFja2V0CisgKiBAcmV0dXJuIFJldHVybnMg MCBpZiBzdWNjZXNzZnVsIG9yIEFWRVJST1JfeHh4IGlmIGFuIGVycm9yIG9jY3Vycy4KKyAqLwor c3RhdGljIGludCBpY2VfY3JlYXRlX3JlcXVlc3QoQVZGb3JtYXRDb250ZXh0ICpzLCB1aW50OF90 ICpidWYsIGludCBidWZfc2l6ZSwgaW50ICpyZXF1ZXN0X3NpemUpCit7CisgICAgaW50IHJldCwg c2l6ZSwgY3JjMzI7CisgICAgY2hhciB1c2VybmFtZVsxMjhdOworICAgIEFWSU9Db250ZXh0ICpw YiA9IE5VTEw7CisgICAgQVZITUFDICpobWFjID0gTlVMTDsKKyAgICBXSElQQ29udGV4dCAqd2hp cCA9IHMtPnByaXZfZGF0YTsKKworICAgIHBiID0gYXZpb19hbGxvY19jb250ZXh0KGJ1ZiwgYnVm X3NpemUsIDEsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOworICAgIGlmICghcGIpCisgICAgICAg IHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisKKyAgICBobWFjID0gYXZfaG1hY19hbGxvYyhBVl9I TUFDX1NIQTEpOworICAgIGlmICghaG1hYykgeworICAgICAgICByZXQgPSBBVkVSUk9SKEVOT01F TSk7CisgICAgICAgIGdvdG8gZW5kOworICAgIH0KKworICAgIC8qIFdyaXRlIDIwIGJ5dGVzIGhl YWRlciAqLworICAgIGF2aW9fd2IxNihwYiwgMHgwMDAxKTsgLyogU1RVTiBiaW5kaW5nIHJlcXVl c3QgKi8KKyAgICBhdmlvX3diMTYocGIsIDApOyAgICAgIC8qIGxlbmd0aCAqLworICAgIGF2aW9f d2IzMihwYiwgU1RVTl9NQUdJQ19DT09LSUUpOyAvKiBtYWdpYyBjb29raWUgKi8KKyAgICBhdmlv X3diMzIocGIsIGF2X2xmZ19nZXQoJndoaXAtPnJuZCkpOyAvKiB0cmFuc2FjdGlvbiBJRCAqLwor ICAgIGF2aW9fd2IzMihwYiwgYXZfbGZnX2dldCgmd2hpcC0+cm5kKSk7IC8qIHRyYW5zYWN0aW9u IElEICovCisgICAgYXZpb193YjMyKHBiLCBhdl9sZmdfZ2V0KCZ3aGlwLT5ybmQpKTsgLyogdHJh bnNhY3Rpb24gSUQgKi8KKworICAgIC8qIFRoZSB1c2VybmFtZSBpcyB0aGUgY29uY2F0ZW5hdGlv biBvZiB0aGUgdHdvIElDRSB1ZnJhZyAqLworICAgIHJldCA9IHNucHJpbnRmKHVzZXJuYW1lLCBz aXplb2YodXNlcm5hbWUpLCAiJXM6JXMiLCB3aGlwLT5pY2VfdWZyYWdfcmVtb3RlLCB3aGlwLT5p Y2VfdWZyYWdfbG9jYWwpOworICAgIGlmIChyZXQgPD0gMCB8fCByZXQgPj0gc2l6ZW9mKHVzZXJu YW1lKSkgeworICAgICAgICBhdl9sb2cod2hpcCwgQVZfTE9HX0VSUk9SLCAiV0hJUDogRmFpbGVk IHRvIGJ1aWxkIHVzZXJuYW1lICVzOiVzLCBtYXg9JWx1LCByZXQ9JWRcbiIsCisgICAgICAgICAg ICB3aGlwLT5pY2VfdWZyYWdfcmVtb3RlLCB3aGlwLT5pY2VfdWZyYWdfbG9jYWwsIHNpemVvZih1 c2VybmFtZSksIHJldCk7CisgICAgICAgIHJldCA9IEFWRVJST1IoRUlPKTsKKyAgICAgICAgZ290 byBlbmQ7CisgICAgfQorCisgICAgLyogV3JpdGUgdGhlIHVzZXJuYW1lIGF0dHJpYnV0ZSAqLwor ICAgIGF2aW9fd2IxNihwYiwgU1RVTl9BVFRSX1VTRVJOQU1FKTsgLyogYXR0cmlidXRlIHR5cGUg dXNlcm5hbWUgKi8KKyAgICBhdmlvX3diMTYocGIsIHJldCk7IC8qIHNpemUgb2YgdXNlcm5hbWUg Ki8KKyAgICBhdmlvX3dyaXRlKHBiLCB1c2VybmFtZSwgcmV0KTsgLyogYnl0ZXMgb2YgdXNlcm5h bWUgKi8KKyAgICBmZmlvX2ZpbGwocGIsIDAsICg0IC0gKHJldCAlIDQpKSAlIDQpOyAvKiBwYWRk aW5nICovCisKKyAgICAvKiBXcml0ZSB0aGUgdXNlLWNhbmRpZGF0ZSBhdHRyaWJ1dGUgKi8KKyAg ICBhdmlvX3diMTYocGIsIFNUVU5fQVRUUl9VU0VfQ0FORElEQVRFKTsgLyogYXR0cmlidXRlIHR5 cGUgdXNlLWNhbmRpZGF0ZSAqLworICAgIGF2aW9fd2IxNihwYiwgMCk7IC8qIHNpemUgb2YgdXNl LWNhbmRpZGF0ZSAqLworCisgICAgLyogQnVpbGQgYW5kIHVwZGF0ZSBtZXNzYWdlIGludGVncml0 eSAqLworICAgIGF2aW9fd2IxNihwYiwgU1RVTl9BVFRSX01FU1NBR0VfSU5URUdSSVRZKTsgLyog YXR0cmlidXRlIHR5cGUgbWVzc2FnZSBpbnRlZ3JpdHkgKi8KKyAgICBhdmlvX3diMTYocGIsIDIw KTsgLyogc2l6ZSBvZiBtZXNzYWdlIGludGVncml0eSAqLworICAgIGZmaW9fZmlsbChwYiwgMCwg MjApOyAvKiBmaWxsIHdpdGggemVybyB0byBkaXJlY3RseSB3cml0ZSBhbmQgc2tpcCBpdCAqLwor ICAgIHNpemUgPSBhdmlvX3RlbGwocGIpOworICAgIGJ1ZlsyXSA9IChzaXplIC0gMjApID4+IDg7 CisgICAgYnVmWzNdID0gKHNpemUgLSAyMCkgJiAweEZGOworICAgIGF2X2htYWNfaW5pdChobWFj LCB3aGlwLT5pY2VfcHdkX3JlbW90ZSwgc3RybGVuKHdoaXAtPmljZV9wd2RfcmVtb3RlKSk7Cisg ICAgYXZfaG1hY191cGRhdGUoaG1hYywgYnVmLCBzaXplIC0gMjQpOworICAgIGF2X2htYWNfZmlu YWwoaG1hYywgYnVmICsgc2l6ZSAtIDIwLCAyMCk7CisKKyAgICAvKiBXcml0ZSB0aGUgZmluZ2Vy cHJpbnQgYXR0cmlidXRlICovCisgICAgYXZpb193YjE2KHBiLCBTVFVOX0FUVFJfRklOR0VSUFJJ TlQpOyAvKiBhdHRyaWJ1dGUgdHlwZSBmaW5nZXJwcmludCAqLworICAgIGF2aW9fd2IxNihwYiwg NCk7IC8qIHNpemUgb2YgZmluZ2VycHJpbnQgKi8KKyAgICBmZmlvX2ZpbGwocGIsIDAsIDQpOyAv KiBmaWxsIHdpdGggemVybyB0byBkaXJlY3RseSB3cml0ZSBhbmQgc2tpcCBpdCAqLworICAgIHNp emUgPSBhdmlvX3RlbGwocGIpOworICAgIGJ1ZlsyXSA9IChzaXplIC0gMjApID4+IDg7CisgICAg YnVmWzNdID0gKHNpemUgLSAyMCkgJiAweEZGOworICAgIC8qIFJlZmVyIHRvIHRoZSBhdl9oYXNo X2FsbG9jKCJDUkMzMiIpLCBhdl9oYXNoX2luaXQgYW5kIGF2X2hhc2hfZmluYWwgKi8KKyAgICBj cmMzMiA9IGF2X2NyYyhhdl9jcmNfZ2V0X3RhYmxlKEFWX0NSQ18zMl9JRUVFX0xFKSwgMHhGRkZG RkZGRiwgYnVmLCBzaXplIC0gOCkgXiAweEZGRkZGRkZGOworICAgIGF2aW9fc2tpcChwYiwgLTQp OworICAgIGF2aW9fd2IzMihwYiwgY3JjMzIgXiAweDUzNTQ1NTRFKTsgLyogeG9yIHdpdGggIlNU VU4iICovCisKKyAgICAqcmVxdWVzdF9zaXplID0gc2l6ZTsKKworZW5kOgorICAgIGF2aW9fY29u dGV4dF9mcmVlKCZwYik7CisgICAgYXZfaG1hY19mcmVlKGhtYWMpOworICAgIHJldHVybiByZXQ7 Cit9CisKKy8qKgorICogQ3JlYXRlIGFuIElDRSBiaW5kaW5nIHJlc3BvbnNlLgorICoKKyAqIFRo aXMgZnVuY3Rpb24gZ2VuZXJhdGVzIGFuIElDRSBiaW5kaW5nIHJlc3BvbnNlIGFuZCB3cml0ZXMg aXQgdG8gdGhlIHByb3ZpZGVkCisgKiBidWZmZXIuIFRoZSByZXNwb25zZSBpcyBzaWduZWQgdXNp bmcgdGhlIGxvY2FsIHBhc3N3b3JkIGZvciBtZXNzYWdlIGludGVncml0eS4KKyAqCisgKiBAcGFy YW0gcyBQb2ludGVyIHRvIHRoZSBBVkZvcm1hdENvbnRleHQgc3RydWN0dXJlLgorICogQHBhcmFt IHRpZCBQb2ludGVyIHRvIHRoZSB0cmFuc2FjdGlvbiBJRCBvZiB0aGUgYmluZGluZyByZXF1ZXN0 LiBUaGUgdGlkX3NpemUgc2hvdWxkIGJlIDEyLgorICogQHBhcmFtIHRpZF9zaXplIFRoZSBzaXpl IG9mIHRoZSB0cmFuc2FjdGlvbiBJRCwgc2hvdWxkIGJlIDEyLgorICogQHBhcmFtIGJ1ZiBQb2lu dGVyIHRvIHRoZSBidWZmZXIgd2hlcmUgdGhlIHJlc3BvbnNlIHdpbGwgYmUgd3JpdHRlbi4KKyAq IEBwYXJhbSBidWZfc2l6ZSBUaGUgc2l6ZSBvZiB0aGUgYnVmZmVyIHByb3ZpZGVkIGZvciB0aGUg cmVzcG9uc2UuCisgKiBAcGFyYW0gcmVzcG9uc2Vfc2l6ZSBQb2ludGVyIHRvIGFuIGludGVnZXIg dGhhdCB3aWxsIHN0b3JlIHRoZSBzaXplIG9mIHRoZSBnZW5lcmF0ZWQgcmVzcG9uc2UuCisgKiBA cmV0dXJuIFJldHVybnMgMCBpZiBzdWNjZXNzZnVsIG9yIEFWRVJST1JfeHh4IGlmIGFuIGVycm9y IG9jY3Vycy4KKyAqLworc3RhdGljIGludCBpY2VfY3JlYXRlX3Jlc3BvbnNlKEFWRm9ybWF0Q29u dGV4dCAqcywgY2hhciAqdGlkLCBpbnQgdGlkX3NpemUsIHVpbnQ4X3QgKmJ1ZiwgaW50IGJ1Zl9z aXplLCBpbnQgKnJlc3BvbnNlX3NpemUpCit7CisgICAgaW50IHJldCA9IDAsIHNpemUsIGNyYzMy OworICAgIEFWSU9Db250ZXh0ICpwYiA9IE5VTEw7CisgICAgQVZITUFDICpobWFjID0gTlVMTDsK KyAgICBXSElQQ29udGV4dCAqd2hpcCA9IHMtPnByaXZfZGF0YTsKKworICAgIGlmICh0aWRfc2l6 ZSAhPSAxMikgeworICAgICAgICBhdl9sb2cod2hpcCwgQVZfTE9HX0VSUk9SLCAiV0hJUDogSW52 YWxpZCB0cmFuc2FjdGlvbiBJRCBzaXplLiBFeHBlY3RlZCAxMiwgZ290ICVkXG4iLCB0aWRfc2l6 ZSk7CisgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7CisgICAgfQorCisgICAgcGIgPSBh dmlvX2FsbG9jX2NvbnRleHQoYnVmLCBidWZfc2l6ZSwgMSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVM TCk7CisgICAgaWYgKCFwYikKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKworICAg IGhtYWMgPSBhdl9obWFjX2FsbG9jKEFWX0hNQUNfU0hBMSk7CisgICAgaWYgKCFobWFjKSB7Cisg ICAgICAgIHJldCA9IEFWRVJST1IoRU5PTUVNKTsKKyAgICAgICAgZ290byBlbmQ7CisgICAgfQor CisgICAgLyogV3JpdGUgMjAgYnl0ZXMgaGVhZGVyICovCisgICAgYXZpb193YjE2KHBiLCAweDAx MDEpOyAvKiBTVFVOIGJpbmRpbmcgcmVzcG9uc2UgKi8KKyAgICBhdmlvX3diMTYocGIsIDApOyAg ICAgIC8qIGxlbmd0aCAqLworICAgIGF2aW9fd2IzMihwYiwgU1RVTl9NQUdJQ19DT09LSUUpOyAv KiBtYWdpYyBjb29raWUgKi8KKyAgICBhdmlvX3dyaXRlKHBiLCB0aWQsIHRpZF9zaXplKTsgLyog dHJhbnNhY3Rpb24gSUQgKi8KKworICAgIC8qIEJ1aWxkIGFuZCB1cGRhdGUgbWVzc2FnZSBpbnRl Z3JpdHkgKi8KKyAgICBhdmlvX3diMTYocGIsIFNUVU5fQVRUUl9NRVNTQUdFX0lOVEVHUklUWSk7 IC8qIGF0dHJpYnV0ZSB0eXBlIG1lc3NhZ2UgaW50ZWdyaXR5ICovCisgICAgYXZpb193YjE2KHBi LCAyMCk7IC8qIHNpemUgb2YgbWVzc2FnZSBpbnRlZ3JpdHkgKi8KKyAgICBmZmlvX2ZpbGwocGIs IDAsIDIwKTsgLyogZmlsbCB3aXRoIHplcm8gdG8gZGlyZWN0bHkgd3JpdGUgYW5kIHNraXAgaXQg Ki8KKyAgICBzaXplID0gYXZpb190ZWxsKHBiKTsKKyAgICBidWZbMl0gPSAoc2l6ZSAtIDIwKSA+ PiA4OworICAgIGJ1ZlszXSA9IChzaXplIC0gMjApICYgMHhGRjsKKyAgICBhdl9obWFjX2luaXQo aG1hYywgd2hpcC0+aWNlX3B3ZF9sb2NhbCwgc3RybGVuKHdoaXAtPmljZV9wd2RfbG9jYWwpKTsK KyAgICBhdl9obWFjX3VwZGF0ZShobWFjLCBidWYsIHNpemUgLSAyNCk7CisgICAgYXZfaG1hY19m aW5hbChobWFjLCBidWYgKyBzaXplIC0gMjAsIDIwKTsKKworICAgIC8qIFdyaXRlIHRoZSBmaW5n ZXJwcmludCBhdHRyaWJ1dGUgKi8KKyAgICBhdmlvX3diMTYocGIsIFNUVU5fQVRUUl9GSU5HRVJQ UklOVCk7IC8qIGF0dHJpYnV0ZSB0eXBlIGZpbmdlcnByaW50ICovCisgICAgYXZpb193YjE2KHBi LCA0KTsgLyogc2l6ZSBvZiBmaW5nZXJwcmludCAqLworICAgIGZmaW9fZmlsbChwYiwgMCwgNCk7 IC8qIGZpbGwgd2l0aCB6ZXJvIHRvIGRpcmVjdGx5IHdyaXRlIGFuZCBza2lwIGl0ICovCisgICAg c2l6ZSA9IGF2aW9fdGVsbChwYik7CisgICAgYnVmWzJdID0gKHNpemUgLSAyMCkgPj4gODsKKyAg ICBidWZbM10gPSAoc2l6ZSAtIDIwKSAmIDB4RkY7CisgICAgLyogUmVmZXIgdG8gdGhlIGF2X2hh c2hfYWxsb2MoIkNSQzMyIiksIGF2X2hhc2hfaW5pdCBhbmQgYXZfaGFzaF9maW5hbCAqLworICAg IGNyYzMyID0gYXZfY3JjKGF2X2NyY19nZXRfdGFibGUoQVZfQ1JDXzMyX0lFRUVfTEUpLCAweEZG RkZGRkZGLCBidWYsIHNpemUgLSA4KSBeIDB4RkZGRkZGRkY7CisgICAgYXZpb19za2lwKHBiLCAt NCk7CisgICAgYXZpb193YjMyKHBiLCBjcmMzMiBeIDB4NTM1NDU1NEUpOyAvKiB4b3Igd2l0aCAi U1RVTiIgKi8KKworICAgICpyZXNwb25zZV9zaXplID0gc2l6ZTsKKworZW5kOgorICAgIGF2aW9f Y29udGV4dF9mcmVlKCZwYik7CisgICAgYXZfaG1hY19mcmVlKGhtYWMpOworICAgIHJldHVybiBy ZXQ7Cit9CisKKy8qKgorICogQSBCaW5kaW5nIHJlcXVlc3QgaGFzIGNsYXNzPTBiMDAgKHJlcXVl c3QpIGFuZCBtZXRob2Q9MGIwMDAwMDAwMDAwMDEgKEJpbmRpbmcpCisgKiBhbmQgaXMgZW5jb2Rl ZCBpbnRvIHRoZSBmaXJzdCAxNiBiaXRzIGFzIDB4MDAwMS4KKyAqIFNlZSBodHRwczovL2RhdGF0 cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzUzODkjc2VjdGlvbi02CisgKi8KK3N0YXRpYyBp bnQgaWNlX2lzX2JpbmRpbmdfcmVxdWVzdCh1aW50OF90ICpiLCBpbnQgc2l6ZSkKK3sKKyAgICBy ZXR1cm4gc2l6ZSA+PSBJQ0VfU1RVTl9IRUFERVJfU0laRSAmJiBBVl9SQjE2KCZiWzBdKSA9PSAw eDAwMDE7Cit9CisKKy8qKgorICogQSBCaW5kaW5nIHJlc3BvbnNlIGhhcyBjbGFzcz0wYjEwIChz dWNjZXNzIHJlc3BvbnNlKSBhbmQgbWV0aG9kPTBiMDAwMDAwMDAwMDAxLAorICogYW5kIGlzIGVu Y29kZWQgaW50byB0aGUgZmlyc3QgMTYgYml0cyBhcyAweDAxMDEuCisgKi8KK3N0YXRpYyBpbnQg aWNlX2lzX2JpbmRpbmdfcmVzcG9uc2UodWludDhfdCAqYiwgaW50IHNpemUpCit7CisgICAgcmV0 dXJuIHNpemUgPj0gSUNFX1NUVU5fSEVBREVSX1NJWkUgJiYgQVZfUkIxNigmYlswXSkgPT0gMHgw MTAxOworfQorCisvKioKKyAqIEluIFJUUCBwYWNrZXRzLCB0aGUgZmlyc3QgYnl0ZSBpcyByZXBy ZXNlbnRlZCBhcyAwYjEweHh4eHh4LCB3aGVyZSB0aGUgaW5pdGlhbAorICogdHdvIGJpdHMgKDBi MTApIGluZGljYXRlIHRoZSBSVFAgdmVyc2lvbiwKKyAqIHNlZSBodHRwczovL3d3dy5yZmMtZWRp dG9yLm9yZy9yZmMvcmZjMzU1MCNzZWN0aW9uLTUuMQorICogVGhlIFJUQ1AgcGFja2V0IGhlYWRl ciBpcyBzaW1pbGFyIHRvIFJUUCwKKyAqIHNlZSBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9y ZmMvcmZjMzU1MCNzZWN0aW9uLTYuNC4xCisgKi8KK3N0YXRpYyBpbnQgbWVkaWFfaXNfcnRwX3J0 Y3AodWludDhfdCAqYiwgaW50IHNpemUpCit7CisgICAgcmV0dXJuIHNpemUgPj0gV0hJUF9SVFBf SEVBREVSX1NJWkUgJiYgKGJbMF0gJiAweEMwKSA9PSAweDgwOworfQorCisvKiBXaGV0aGVyIHRo ZSBwYWNrZXQgaXMgUlRDUC4gKi8KK3N0YXRpYyBpbnQgbWVkaWFfaXNfcnRjcCh1aW50OF90ICpi LCBpbnQgc2l6ZSkKK3sKKyAgICByZXR1cm4gc2l6ZSA+PSBXSElQX1JUUF9IRUFERVJfU0laRSAm JiBiWzFdID49IFdISVBfUlRDUF9QVF9TVEFSVCAmJiBiWzFdIDw9IFdISVBfUlRDUF9QVF9FTkQ7 Cit9CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIGluY29taW5nIGJpbmRpbmcgcmVx dWVzdCBtZXNzYWdlcyBieSByZXNwb25kaW5nIHRvIHRoZW0uCisgKiBJZiB0aGUgbWVzc2FnZSBp cyBub3QgYSBiaW5kaW5nIHJlcXVlc3QsIGl0IHdpbGwgYmUgaWdub3JlZC4KKyAqLworc3RhdGlj IGludCBpY2VfaGFuZGxlX2JpbmRpbmdfcmVxdWVzdChBVkZvcm1hdENvbnRleHQgKnMsIGNoYXIg KmJ1ZiwgaW50IGJ1Zl9zaXplKQoreworICAgIGludCByZXQgPSAwLCBzaXplOworICAgIGNoYXIg dGlkWzEyXTsKKyAgICBXSElQQ29udGV4dCAqd2hpcCA9IHMtPnByaXZfZGF0YTsKKworICAgIC8q IElnbm9yZSBpZiBub3QgYSBiaW5kaW5nIHJlcXVlc3QuICovCisgICAgaWYgKCFpY2VfaXNfYmlu ZGluZ19yZXF1ZXN0KGJ1ZiwgYnVmX3NpemUpKQorICAgICAgICByZXR1cm4gcmV0OworCisgICAg aWYgKGJ1Zl9zaXplIDwgSUNFX1NUVU5fSEVBREVSX1NJWkUpIHsKKyAgICAgICAgYXZfbG9nKHdo aXAsIEFWX0xPR19FUlJPUiwgIldISVA6IEludmFsaWQgU1RVTiBtZXNzYWdlLCBleHBlY3RlZCBh dCBsZWFzdCAlZCwgZ290ICVkXG4iLAorICAgICAgICAgICAgSUNFX1NUVU5fSEVBREVSX1NJWkUs IGJ1Zl9zaXplKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKKyAgICB9CisKKyAg ICAvKiBQYXJzZSB0cmFuc2FjdGlvbiBpZCBmcm9tIGJpbmRpbmcgcmVxdWVzdCBpbiBidWYuICov CisgICAgbWVtY3B5KHRpZCwgYnVmICsgOCwgMTIpOworCisgICAgLyogQnVpbGQgdGhlIFNUVU4g YmluZGluZyByZXNwb25zZS4gKi8KKyAgICByZXQgPSBpY2VfY3JlYXRlX3Jlc3BvbnNlKHMsIHRp ZCwgc2l6ZW9mKHRpZCksIHdoaXAtPmJ1Ziwgc2l6ZW9mKHdoaXAtPmJ1ZiksICZzaXplKTsKKyAg ICBpZiAocmV0IDwgMCkgeworICAgICAgICBhdl9sb2cod2hpcCwgQVZfTE9HX0VSUk9SLCAiV0hJ UDogRmFpbGVkIHRvIGNyZWF0ZSBTVFVOIGJpbmRpbmcgcmVzcG9uc2UsIHNpemU9JWRcbiIsIHNp emUpOworICAgICAgICByZXR1cm4gcmV0OworICAgIH0KKworICAgIHJldCA9IGZmdXJsX3dyaXRl KHdoaXAtPnVkcCwgd2hpcC0+YnVmLCBzaXplKTsKKyAgICBpZiAocmV0IDwgMCkgeworICAgICAg ICBhdl9sb2cod2hpcCwgQVZfTE9HX0VSUk9SLCAiV0hJUDogRmFpbGVkIHRvIHNlbmQgU1RVTiBi aW5kaW5nIHJlc3BvbnNlLCBzaXplPSVkXG4iLCBzaXplKTsKKyAgICAgICAgcmV0dXJuIHJldDsK KyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworLyoqCisgKiBUbyBlc3RhYmxpc2ggYSBjb25u ZWN0aW9uIHdpdGggdGhlIFVEUCBzZXJ2ZXIsIHdlIHV0aWxpemUgSUNFLUxJVEUgaW4gYSBDbGll bnQtU2VydmVyCisgKiBtb2RlLiBJbiB0aGlzIHNldHVwLCBGRm1wZWcgYWN0cyBhcyB0aGUgVURQ IGNsaWVudCwgd2hpbGUgdGhlIHBlZXIgZnVuY3Rpb25zIGFzIHRoZQorICogVURQIHNlcnZlci4K KyAqLworc3RhdGljIGludCB1ZHBfY29ubmVjdChBVkZvcm1hdENvbnRleHQgKnMpCit7CisgICAg aW50IHJldCA9IDA7CisgICAgY2hhciB1cmxbMjU2XTsKKyAgICBBVkRpY3Rpb25hcnkgKm9wdHMg PSBOVUxMOworICAgIFdISVBDb250ZXh0ICp3aGlwID0gcy0+cHJpdl9kYXRhOworCisgICAgLyog QnVpbGQgVURQIFVSTCBhbmQgY3JlYXRlIHRoZSBVRFAgY29udGV4dCBhcyB0cmFuc3BvcnQuICov CisgICAgZmZfdXJsX2pvaW4odXJsLCBzaXplb2YodXJsKSwgInVkcCIsIE5VTEwsIHdoaXAtPmlj ZV9ob3N0LCB3aGlwLT5pY2VfcG9ydCwgTlVMTCk7CisKKyAgICBhdl9kaWN0X3NldF9pbnQoJm9w dHMsICJjb25uZWN0IiwgMSwgMCk7CisgICAgYXZfZGljdF9zZXRfaW50KCZvcHRzLCAiZmlmb19z aXplIiwgMCwgMCk7CisgICAgLyogU2V0IHRoZSBtYXggcGFja2V0IHNpemUgdG8gdGhlIGJ1ZmZl ciBzaXplLiAqLworICAgIGF2X2RpY3Rfc2V0X2ludCgmb3B0cywgInBrdF9zaXplIiwgd2hpcC0+ cGt0X3NpemUsIDApOworCisgICAgcmV0ID0gZmZ1cmxfb3Blbl93aGl0ZWxpc3QoJndoaXAtPnVk cCwgdXJsLCBBVklPX0ZMQUdfV1JJVEUsICZzLT5pbnRlcnJ1cHRfY2FsbGJhY2ssCisgICAgICAg ICZvcHRzLCBzLT5wcm90b2NvbF93aGl0ZWxpc3QsIHMtPnByb3RvY29sX2JsYWNrbGlzdCwgTlVM TCk7CisgICAgaWYgKHJldCA8IDApIHsKKyAgICAgICAgYXZfbG9nKHdoaXAsIEFWX0xPR19FUlJP UiwgIldISVA6IEZhaWxlZCB0byBjb25uZWN0IHVkcDovLyVzOiVkXG4iLCB3aGlwLT5pY2VfaG9z dCwgd2hpcC0+aWNlX3BvcnQpOworICAgICAgICBnb3RvIGVuZDsKKyAgICB9CisKKyAgICAvKiBN YWtlIHRoZSBzb2NrZXQgbm9uLWJsb2NraW5nLCBzZXQgdG8gUkVBRCBhbmQgV1JJVEUgbW9kZSBh ZnRlciBjb25uZWN0ZWQgKi8KKyAgICBmZl9zb2NrZXRfbm9uYmxvY2soZmZ1cmxfZ2V0X2ZpbGVf aGFuZGxlKHdoaXAtPnVkcCksIDEpOworICAgIHdoaXAtPnVkcC0+ZmxhZ3MgfD0gQVZJT19GTEFH X1JFQUQgfCBBVklPX0ZMQUdfTk9OQkxPQ0s7CisKKyAgICBpZiAod2hpcC0+c3RhdGUgPCBXSElQ X1NUQVRFX1VEUF9DT05ORUNURUQpCisgICAgICAgIHdoaXAtPnN0YXRlID0gV0hJUF9TVEFURV9V RFBfQ09OTkVDVEVEOworICAgIHdoaXAtPndoaXBfdWRwX3RpbWUgPSBhdl9nZXR0aW1lKCk7Cisg ICAgYXZfbG9nKHdoaXAsIEFWX0xPR19WRVJCT1NFLCAiV0hJUDogVURQIHN0YXRlPSVkLCBlbGFw c2VkPSVkbXMsIGNvbm5lY3RlZCB0byB1ZHA6Ly8lczolZFxuIiwKKyAgICAgICAgd2hpcC0+c3Rh dGUsIEVMQVBTRUQod2hpcC0+d2hpcF9zdGFydHRpbWUsIGF2X2dldHRpbWUoKSksIHdoaXAtPmlj ZV9ob3N0LCB3aGlwLT5pY2VfcG9ydCk7CisKK2VuZDoKKyAgICBhdl9kaWN0X2ZyZWUoJm9wdHMp OworICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaWNlX2R0bHNfaGFuZHNoYWtlKEFW Rm9ybWF0Q29udGV4dCAqcykKK3sKKyAgICBpbnQgcmV0ID0gMCwgc2l6ZSwgaTsKKyAgICBpbnQ2 NF90IHN0YXJ0dGltZSA9IGF2X2dldHRpbWUoKSwgbm93OworICAgIFdISVBDb250ZXh0ICp3aGlw ID0gcy0+cHJpdl9kYXRhOworICAgIEFWRGljdGlvbmFyeSAqb3B0cyA9IE5VTEw7CisgICAgY2hh ciBzdHJbOF07CisgICAgY2hhciBidWZbMjU2XSwgKmNlcnRfYnVmID0gTlVMTCwgKmtleV9idWYg PSBOVUxMOworCisgICAgaWYgKHdoaXAtPnN0YXRlIDwgV0hJUF9TVEFURV9VRFBfQ09OTkVDVEVE IHx8ICF3aGlwLT51ZHApIHsKKyAgICAgICAgYXZfbG9nKHdoaXAsIEFWX0xPR19FUlJPUiwgIldI SVA6IFVEUCBub3QgY29ubmVjdGVkLCBzdGF0ZT0lZCwgdWRwPSVwXG4iLCB3aGlwLT5zdGF0ZSwg d2hpcC0+dWRwKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKKyAgICB9CisKKyAg ICB3aGlsZSAoMSkgeworICAgICAgICBpZiAod2hpcC0+c3RhdGUgPD0gV0hJUF9TVEFURV9JQ0Vf Q09OTkVDVElORykgeworICAgICAgICAgICAgLyogQnVpbGQgdGhlIFNUVU4gYmluZGluZyByZXF1 ZXN0LiAqLworICAgICAgICAgICAgcmV0ID0gaWNlX2NyZWF0ZV9yZXF1ZXN0KHMsIHdoaXAtPmJ1 Ziwgc2l6ZW9mKHdoaXAtPmJ1ZiksICZzaXplKTsKKyAgICAgICAgICAgIGlmIChyZXQgPCAwKSB7 CisgICAgICAgICAgICAgICAgYXZfbG9nKHdoaXAsIEFWX0xPR19FUlJPUiwgIldISVA6IEZhaWxl ZCB0byBjcmVhdGUgU1RVTiBiaW5kaW5nIHJlcXVlc3QsIHNpemU9JWRcbiIsIHNpemUpOworICAg ICAgICAgICAgICAgIGdvdG8gZW5kOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXQg PSBmZnVybF93cml0ZSh3aGlwLT51ZHAsIHdoaXAtPmJ1Ziwgc2l6ZSk7CisgICAgICAgICAgICBp ZiAocmV0IDwgMCkgeworICAgICAgICAgICAgICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfRVJST1Is ICJXSElQOiBGYWlsZWQgdG8gc2VuZCBTVFVOIGJpbmRpbmcgcmVxdWVzdCwgc2l6ZT0lZFxuIiwg c2l6ZSk7CisgICAgICAgICAgICAgICAgZ290byBlbmQ7CisgICAgICAgICAgICB9CisKKyAgICAg ICAgICAgIGlmICh3aGlwLT5zdGF0ZSA8IFdISVBfU1RBVEVfSUNFX0NPTk5FQ1RJTkcpCisgICAg ICAgICAgICAgICAgd2hpcC0+c3RhdGUgPSBXSElQX1NUQVRFX0lDRV9DT05ORUNUSU5HOworICAg ICAgICB9CisKK25leHRfcGFja2V0OgorICAgICAgICBpZiAod2hpcC0+c3RhdGUgPj0gV0hJUF9T VEFURV9EVExTX0ZJTklTSEVEKQorICAgICAgICAgICAgLyogRFRMUyBoYW5kc2hha2UgaXMgZG9u ZSwgZXhpdCB0aGUgbG9vcC4gKi8KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIG5vdyA9 IGF2X2dldHRpbWUoKTsKKyAgICAgICAgaWYgKG5vdyAtIHN0YXJ0dGltZSA+PSB3aGlwLT5oYW5k c2hha2VfdGltZW91dCAqIDEwMDApIHsKKyAgICAgICAgICAgIGF2X2xvZyh3aGlwLCBBVl9MT0df RVJST1IsICJXSElQOiBEVExTIGhhbmRzaGFrZSB0aW1lb3V0PSVkbXMsIGNvc3Q9JWRtcywgZWxh cHNlZD0lZG1zLCBzdGF0ZT0lZFxuIiwKKyAgICAgICAgICAgICAgICB3aGlwLT5oYW5kc2hha2Vf dGltZW91dCwgRUxBUFNFRChzdGFydHRpbWUsIG5vdyksIEVMQVBTRUQod2hpcC0+d2hpcF9zdGFy dHRpbWUsIG5vdyksIHdoaXAtPnN0YXRlKTsKKyAgICAgICAgICAgIHJldCA9IEFWRVJST1IoRVRJ TUVET1VUKTsKKyAgICAgICAgICAgIGdvdG8gZW5kOworICAgICAgICB9CisKKyAgICAgICAgLyog UmVhZCB0aGUgU1RVTiBvciBEVExTIG1lc3NhZ2VzIGZyb20gcGVlci4gKi8KKyAgICAgICAgZm9y IChpID0gMDsgaSA8IElDRV9EVExTX1JFQURfSU5URVJWQUwgLyA1ICYmIHdoaXAtPnN0YXRlIDwg V0hJUF9TVEFURV9EVExTX0NPTk5FQ1RJTkc7IGkrKykgeworICAgICAgICAgICAgcmV0ID0gZmZ1 cmxfcmVhZCh3aGlwLT51ZHAsIHdoaXAtPmJ1Ziwgc2l6ZW9mKHdoaXAtPmJ1ZikpOworICAgICAg ICAgICAgaWYgKHJldCA+IDApCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBp ZiAocmV0ID09IEFWRVJST1IoRUFHQUlOKSkgeworICAgICAgICAgICAgICAgIGF2X3VzbGVlcCg1 ICogMTAwMCk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAg ICAgICAgICBhdl9sb2cod2hpcCwgQVZfTE9HX0VSUk9SLCAiV0hJUDogRmFpbGVkIHRvIHJlYWQg bWVzc2FnZVxuIik7CisgICAgICAgICAgICBnb3RvIGVuZDsKKyAgICAgICAgfQorCisgICAgICAg IC8qIEdvdCBub3RoaW5nLCBjb250aW51ZSB0byBwcm9jZXNzIGhhbmRzaGFrZS4gKi8KKyAgICAg ICAgaWYgKHJldCA8PSAwICYmIHdoaXAtPnN0YXRlIDwgV0hJUF9TVEFURV9EVExTX0NPTk5FQ1RJ TkcpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvKiBIYW5kbGUgdGhlIElDRSBi aW5kaW5nIHJlc3BvbnNlLiAqLworICAgICAgICBpZiAoaWNlX2lzX2JpbmRpbmdfcmVzcG9uc2Uo d2hpcC0+YnVmLCByZXQpKSB7CisgICAgICAgICAgICBpZiAod2hpcC0+c3RhdGUgPCBXSElQX1NU QVRFX0lDRV9DT05ORUNURUQpIHsKKyAgICAgICAgICAgICAgICB3aGlwLT5zdGF0ZSA9IFdISVBf U1RBVEVfSUNFX0NPTk5FQ1RFRDsKKyAgICAgICAgICAgICAgICB3aGlwLT53aGlwX2ljZV90aW1l ID0gYXZfZ2V0dGltZSgpOworICAgICAgICAgICAgICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfVkVS Qk9TRSwgIldISVA6IElDRSBTVFVOIG9rLCBzdGF0ZT0lZCwgdXJsPXVkcDovLyVzOiVkLCBsb2Nh dGlvbj0lcywgdXNlcm5hbWU9JXM6JXMsIHJlcz0lZEIsIGVsYXBzZWQ9JWRtc1xuIiwKKyAgICAg ICAgICAgICAgICAgICAgd2hpcC0+c3RhdGUsIHdoaXAtPmljZV9ob3N0LCB3aGlwLT5pY2VfcG9y dCwgd2hpcC0+d2hpcF9yZXNvdXJjZV91cmwgPyB3aGlwLT53aGlwX3Jlc291cmNlX3VybCA6ICIi LAorICAgICAgICAgICAgICAgICAgICB3aGlwLT5pY2VfdWZyYWdfcmVtb3RlLCB3aGlwLT5pY2Vf dWZyYWdfbG9jYWwsIHJldCwgRUxBUFNFRCh3aGlwLT53aGlwX3N0YXJ0dGltZSwgYXZfZ2V0dGlt ZSgpKSk7CisKKyAgICAgICAgICAgICAgICBmZl91cmxfam9pbihidWYsIHNpemVvZihidWYpLCAi ZHRscyIsIE5VTEwsIHdoaXAtPmljZV9ob3N0LCB3aGlwLT5pY2VfcG9ydCwgTlVMTCk7CisgICAg ICAgICAgICAgICAgc25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwgIiVkIiwgd2hpcC0+cGt0X3Np emUpOworICAgICAgICAgICAgICAgIGF2X2RpY3Rfc2V0KCZvcHRzLCAibXR1Iiwgc3RyLCAwKTsK KyAgICAgICAgICAgICAgICBpZiAod2hpcC0+Y2VydF9maWxlKSB7CisgICAgICAgICAgICAgICAg ICAgIGF2X2RpY3Rfc2V0KCZvcHRzLCAiY2VydF9maWxlIiwgd2hpcC0+Y2VydF9maWxlLCAwKTsK KyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgYXZfZGljdF9zZXQo Jm9wdHMsICJjZXJ0X2J1ZiIsIHdoaXAtPmNlcnRfYnVmLCAwKTsKKworICAgICAgICAgICAgICAg IGlmICh3aGlwLT5rZXlfZmlsZSkgeworICAgICAgICAgICAgICAgICAgICBhdl9kaWN0X3NldCgm b3B0cywgImtleV9maWxlIiwgd2hpcC0+a2V5X2ZpbGUsIDApOworICAgICAgICAgICAgICAgIH0g ZWxzZQorICAgICAgICAgICAgICAgICAgICBhdl9kaWN0X3NldCgmb3B0cywgImtleV9idWYiLCB3 aGlwLT5rZXlfYnVmLCAwKTsKKworICAgICAgICAgICAgICAgIGF2X2RpY3Rfc2V0KCZvcHRzLCAi ZmluZ2VycHJpbnQiLCB3aGlwLT5kdGxzX2ZpbmdlcnByaW50LCAwKTsKKyAgICAgICAgICAgICAg ICBhdl9kaWN0X3NldCgmb3B0cywgInVzZV9leHRlcm5hbF91ZHAiLCAiMSIsIDApOworICAgICAg ICAgICAgICAgIGF2X2RpY3Rfc2V0KCZvcHRzLCAibGlzdGVuIiwgIjEiLCAwKTsKKyAgICAgICAg ICAgICAgICAvKiBJZiBnb3QgdGhlIGZpcnN0IGJpbmRpbmcgcmVzcG9uc2UsIHN0YXJ0IERUTFMg aGFuZHNoYWtlLiAqLworICAgICAgICAgICAgICAgIHJldCA9IGZmdXJsX29wZW5fd2hpdGVsaXN0 KCZ3aGlwLT5kdGxzX3VjLCBidWYsIEFWSU9fRkxBR19SRUFEX1dSSVRFLCAmcy0+aW50ZXJydXB0 X2NhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAmb3B0cywgcy0+cHJvdG9jb2xfd2hpdGVs aXN0LCBzLT5wcm90b2NvbF9ibGFja2xpc3QsIE5VTEwpOworICAgICAgICAgICAgICAgIGlmIChy ZXQgPCAwKQorICAgICAgICAgICAgICAgICAgICBnb3RvIGVuZDsKKyAgICAgICAgICAgICAgICBk dGxzX2luaXRpYWxpemUocyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBnb3RvIG5leHRf cGFja2V0OworICAgICAgICB9CisKKyAgICAgICAgLyogV2hlbiBhIGJpbmRpbmcgcmVxdWVzdCBp cyByZWNlaXZlZCwgaXQgaXMgbmVjZXNzYXJ5IHRvIHJlc3BvbmQgaW1tZWRpYXRlbHkuICovCisg ICAgICAgIGlmIChpY2VfaXNfYmluZGluZ19yZXF1ZXN0KHdoaXAtPmJ1ZiwgcmV0KSkgeworICAg ICAgICAgICAgaWYgKChyZXQgPSBpY2VfaGFuZGxlX2JpbmRpbmdfcmVxdWVzdChzLCB3aGlwLT5i dWYsIHJldCkpIDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVuZDsKKyAgICAgICAgICAgIGdv dG8gbmV4dF9wYWNrZXQ7CisgICAgICAgIH0KKworICAgICAgICAvKiBJZiBnb3QgYW55IERUTFMg bWVzc2FnZXMsIGhhbmRsZSBpdC4gKi8KKyAgICAgICAgaWYgKGlzX2R0bHNfcGFja2V0KHdoaXAt PmJ1ZiwgcmV0KSAmJiB3aGlwLT5zdGF0ZSA+PSBXSElQX1NUQVRFX0lDRV9DT05ORUNURUQgfHwg d2hpcC0+c3RhdGUgPT0gV0hJUF9TVEFURV9EVExTX0NPTk5FQ1RJTkcpIHsKKyAgICAgICAgICAg IHdoaXAtPnN0YXRlID0gV0hJUF9TVEFURV9EVExTX0NPTk5FQ1RJTkc7CisgICAgICAgICAgICBp ZiAoKHJldCA9IGZmdXJsX2hhbmRzaGFrZSh3aGlwLT5kdGxzX3VjKSkgPCAwKQorICAgICAgICAg ICAgICAgIGdvdG8gZW5kOworICAgICAgICAgICAgZHRsc19jb250ZXh0X29uX3N0YXRlKHMsIE5V TEwsIE5VTEwpOworICAgICAgICAgICAgZ290byBuZXh0X3BhY2tldDsKKyAgICAgICAgfQorICAg IH0KKworZW5kOgorICAgIGlmIChjZXJ0X2J1ZikKKyAgICAgICAgYXZfZnJlZShjZXJ0X2J1Zik7 CisgICAgaWYgKGtleV9idWYpCisgICAgICAgIGF2X2ZyZWUoa2V5X2J1Zik7CisgICAgcmV0dXJu IHJldDsKK30KKworLyoqCisgKiBFc3RhYmxpc2ggdGhlIFNSVFAgY29udGV4dCB1c2luZyB0aGUg a2V5aW5nIG1hdGVyaWFsIGV4cG9ydGVkIGZyb20gRFRMUy4KKyAqCisgKiBDcmVhdGUgc2VwYXJh dGUgU1JUUCBjb250ZXh0cyBmb3Igc2VuZGluZyB2aWRlbyBhbmQgYXVkaW8sIGFzIHRoZWlyIHNl cXVlbmNlcyBkaWZmZXIKKyAqIGFuZCBzaG91bGQgbm90IHNoYXJlIGEgc2luZ2xlIGNvbnRleHQu IEdlbmVyYXRlIGEgc2luZ2xlIFNSVFAgY29udGV4dCBmb3IgcmVjZWl2aW5nCisgKiBSVENQIG9u bHkuCisgKgorICogQHJldHVybiAwIGlmIE9LLCBBVkVSUk9SX3h4eCBvbiBlcnJvcgorICovCitz dGF0aWMgaW50IHNldHVwX3NydHAoQVZGb3JtYXRDb250ZXh0ICpzKQoreworICAgIGludCByZXQ7 CisgICAgY2hhciByZWN2X2tleVtEVExTX1NSVFBfS0VZX0xFTiArIERUTFNfU1JUUF9TQUxUX0xF Tl07CisgICAgY2hhciBzZW5kX2tleVtEVExTX1NSVFBfS0VZX0xFTiArIERUTFNfU1JUUF9TQUxU X0xFTl07CisgICAgY2hhciBidWZbQVZfQkFTRTY0X1NJWkUoRFRMU19TUlRQX0tFWV9MRU4gKyBE VExTX1NSVFBfU0FMVF9MRU4pXTsKKyAgICAvKioKKyAgICAgKiBUaGUgcHJvZmlsZSBmb3IgT3Bl blNTTCdzIFNSVFAgaXMgU1JUUF9BRVMxMjhfQ01fU0hBMV84MCwgc2VlIHNzbC9kMV9zcnRwLmMu CisgICAgICogVGhlIHByb2ZpbGUgZm9yIEZGbXBlZydzIFNSVFAgaXMgU1JUUF9BRVMxMjhfQ01f SE1BQ19TSEExXzgwLCBzZWUgbGliYXZmb3JtYXQvc3J0cC5jLgorICAgICAqLworICAgIGNvbnN0 IGNoYXIqIHN1aXRlID0gIlNSVFBfQUVTMTI4X0NNX0hNQUNfU0hBMV84MCI7CisgICAgV0hJUENv bnRleHQgKndoaXAgPSBzLT5wcml2X2RhdGE7CisgICAgcmV0ID0gZmZfZHRsc19leHBvcnRfbWF0 ZXJpYWxzKHdoaXAtPmR0bHNfdWMsIHdoaXAtPmR0bHNfc3J0cF9tYXRlcmlhbHMsIHNpemVvZih3 aGlwLT5kdGxzX3NydHBfbWF0ZXJpYWxzKSk7CisgICAgaWYgKHJldCA8IDApCisgICAgICAgIGdv dG8gZW5kOworICAgIC8qKgorICAgICAqIFRoaXMgcmVwcmVzZW50cyB0aGUgbWF0ZXJpYWwgdXNl ZCB0byBidWlsZCB0aGUgU1JUUCBtYXN0ZXIga2V5LiBJdCBpcworICAgICAqIGdlbmVyYXRlZCBi eSBEVExTIGFuZCBoYXMgdGhlIGZvbGxvd2luZyBsYXlvdXQ6CisgICAgICogICAgICAgICAgMTZC ICAgICAgICAgMTZCICAgICAgICAgMTRCICAgICAgICAgICAgIDE0QgorICAgICAqICAgICAgY2xp ZW50X2tleSB8IHNlcnZlcl9rZXkgfCBjbGllbnRfc2FsdCB8IHNlcnZlcl9zYWx0CisgICAgICov CisgICAgY2hhciAqY2xpZW50X2tleSA9IHdoaXAtPmR0bHNfc3J0cF9tYXRlcmlhbHM7CisgICAg Y2hhciAqc2VydmVyX2tleSA9IHdoaXAtPmR0bHNfc3J0cF9tYXRlcmlhbHMgKyBEVExTX1NSVFBf S0VZX0xFTjsKKyAgICBjaGFyICpjbGllbnRfc2FsdCA9IHNlcnZlcl9rZXkgKyBEVExTX1NSVFBf S0VZX0xFTjsKKyAgICBjaGFyICpzZXJ2ZXJfc2FsdCA9IGNsaWVudF9zYWx0ICsgRFRMU19TUlRQ X1NBTFRfTEVOOworCisgICAgLyogQXMgRFRMUyBzZXJ2ZXIsIHRoZSByZWN2IGtleSBpcyBjbGll bnQgbWFzdGVyIGtleSBwbHVzIHNhbHQuICovCisgICAgbWVtY3B5KHJlY3Zfa2V5LCBjbGllbnRf a2V5LCBEVExTX1NSVFBfS0VZX0xFTik7CisgICAgbWVtY3B5KHJlY3Zfa2V5ICsgRFRMU19TUlRQ X0tFWV9MRU4sIGNsaWVudF9zYWx0LCBEVExTX1NSVFBfU0FMVF9MRU4pOworCisgICAgLyogQXMg RFRMUyBzZXJ2ZXIsIHRoZSBzZW5kIGtleSBpcyBzZXJ2ZXIgbWFzdGVyIGtleSBwbHVzIHNhbHQu ICovCisgICAgbWVtY3B5KHNlbmRfa2V5LCBzZXJ2ZXJfa2V5LCBEVExTX1NSVFBfS0VZX0xFTik7 CisgICAgbWVtY3B5KHNlbmRfa2V5ICsgRFRMU19TUlRQX0tFWV9MRU4sIHNlcnZlcl9zYWx0LCBE VExTX1NSVFBfU0FMVF9MRU4pOworCisgICAgLyogU2V0dXAgU1JUUCBjb250ZXh0IGZvciBvdXRn b2luZyBwYWNrZXRzICovCisgICAgaWYgKCFhdl9iYXNlNjRfZW5jb2RlKGJ1Ziwgc2l6ZW9mKGJ1 ZiksIHNlbmRfa2V5LCBzaXplb2Yoc2VuZF9rZXkpKSkgeworICAgICAgICBhdl9sb2cod2hpcCwg QVZfTE9HX0VSUk9SLCAiV0hJUDogRmFpbGVkIHRvIGVuY29kZSBzZW5kIGtleVxuIik7CisgICAg ICAgIHJldCA9IEFWRVJST1IoRUlPKTsKKyAgICAgICAgZ290byBlbmQ7CisgICAgfQorCisgICAg cmV0ID0gZmZfc3J0cF9zZXRfY3J5cHRvKCZ3aGlwLT5zcnRwX2F1ZGlvX3NlbmQsIHN1aXRlLCBi dWYpOworICAgIGlmIChyZXQgPCAwKSB7CisgICAgICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfRVJS T1IsICJXSElQOiBGYWlsZWQgdG8gc2V0IGNyeXB0byBmb3IgYXVkaW8gc2VuZFxuIik7CisgICAg ICAgIGdvdG8gZW5kOworICAgIH0KKworICAgIHJldCA9IGZmX3NydHBfc2V0X2NyeXB0bygmd2hp cC0+c3J0cF92aWRlb19zZW5kLCBzdWl0ZSwgYnVmKTsKKyAgICBpZiAocmV0IDwgMCkgeworICAg ICAgICBhdl9sb2cod2hpcCwgQVZfTE9HX0VSUk9SLCAiV0hJUDogRmFpbGVkIHRvIHNldCBjcnlw dG8gZm9yIHZpZGVvIHNlbmRcbiIpOworICAgICAgICBnb3RvIGVuZDsKKyAgICB9CisKKyAgICBy ZXQgPSBmZl9zcnRwX3NldF9jcnlwdG8oJndoaXAtPnNydHBfcnRjcF9zZW5kLCBzdWl0ZSwgYnVm KTsKKyAgICBpZiAocmV0IDwgMCkgeworICAgICAgICBhdl9sb2cod2hpcCwgQVZfTE9HX0VSUk9S LCAiRmFpbGVkIHRvIHNldCBjcnlwdG8gZm9yIHJ0Y3Agc2VuZFxuIik7CisgICAgICAgIGdvdG8g ZW5kOworICAgIH0KKworICAgIC8qIFNldHVwIFNSVFAgY29udGV4dCBmb3IgaW5jb21pbmcgcGFj a2V0cyAqLworICAgIGlmICghYXZfYmFzZTY0X2VuY29kZShidWYsIHNpemVvZihidWYpLCByZWN2 X2tleSwgc2l6ZW9mKHJlY3Zfa2V5KSkpIHsKKyAgICAgICAgYXZfbG9nKHdoaXAsIEFWX0xPR19F UlJPUiwgIldISVA6IEZhaWxlZCB0byBlbmNvZGUgcmVjdiBrZXlcbiIpOworICAgICAgICByZXQg PSBBVkVSUk9SKEVJTyk7CisgICAgICAgIGdvdG8gZW5kOworICAgIH0KKworICAgIHJldCA9IGZm X3NydHBfc2V0X2NyeXB0bygmd2hpcC0+c3J0cF9yZWN2LCBzdWl0ZSwgYnVmKTsKKyAgICBpZiAo cmV0IDwgMCkgeworICAgICAgICBhdl9sb2cod2hpcCwgQVZfTE9HX0VSUk9SLCAiV0hJUDogRmFp bGVkIHRvIHNldCBjcnlwdG8gZm9yIHJlY3ZcbiIpOworICAgICAgICBnb3RvIGVuZDsKKyAgICB9 CisKKyAgICBpZiAod2hpcC0+c3RhdGUgPCBXSElQX1NUQVRFX1NSVFBfRklOSVNIRUQpCisgICAg ICAgIHdoaXAtPnN0YXRlID0gV0hJUF9TVEFURV9TUlRQX0ZJTklTSEVEOworICAgIHdoaXAtPndo aXBfc3J0cF90aW1lID0gYXZfZ2V0dGltZSgpOworICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfVkVS Qk9TRSwgIldISVA6IFNSVFAgc2V0dXAgZG9uZSwgc3RhdGU9JWQsIHN1aXRlPSVzLCBrZXk9JWx1 QiwgZWxhcHNlZD0lZG1zXG4iLAorICAgICAgICB3aGlwLT5zdGF0ZSwgc3VpdGUsIHNpemVvZihz ZW5kX2tleSksIEVMQVBTRUQod2hpcC0+d2hpcF9zdGFydHRpbWUsIGF2X2dldHRpbWUoKSkpOwor CitlbmQ6CisgICAgcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBDYWxsYmFjayB0cmlnZ2VyZWQg YnkgdGhlIFJUUCBtdXhlciB3aGVuIGl0IGNyZWF0ZXMgYW5kIHNlbmRzIG91dCBhbiBSVFAgcGFj a2V0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gbW9kaWZpZXMgdGhlIHZpZGVvIFNUQVAgcGFja2V0 LCByZW1vdmluZyB0aGUgbWFya2VycywgYW5kIHVwZGF0aW5nIHRoZQorICogTlJJIG9mIHRoZSBm aXJzdCBOQUxVLiBBZGRpdGlvbmFsbHksIGl0IHVzZXMgdGhlIGNvcnJlc3BvbmRpbmcgU1JUUCBj b250ZXh0IHRvIGVuY3J5cHQKKyAqIHRoZSBSVFAgcGFja2V0LCB3aGVyZSB0aGUgdmlkZW8gcGFj a2V0IGlzIGhhbmRsZWQgYnkgdGhlIHZpZGVvIFNSVFAgY29udGV4dC4KKyAqLworc3RhdGljIGlu dCBvbl9ydHBfd3JpdGVfcGFja2V0KHZvaWQgKm9wYXF1ZSwgY29uc3QgdWludDhfdCAqYnVmLCBp bnQgYnVmX3NpemUpCit7CisgICAgaW50IHJldCwgY2lwaGVyX3NpemUsIGlzX3J0Y3AsIGlzX3Zp ZGVvOworICAgIHVpbnQ4X3QgcGF5bG9hZF90eXBlOworICAgIEFWRm9ybWF0Q29udGV4dCAqcyA9 IG9wYXF1ZTsKKyAgICBXSElQQ29udGV4dCAqd2hpcCA9IHMtPnByaXZfZGF0YTsKKyAgICBTUlRQ Q29udGV4dCAqc3J0cDsKKworICAgIC8qIElnbm9yZSBpZiBub3QgUlRQIG9yIFJUQ1AgcGFja2V0 LiAqLworICAgIGlmICghbWVkaWFfaXNfcnRwX3J0Y3AoYnVmLCBidWZfc2l6ZSkpCisgICAgICAg IHJldHVybiAwOworCisgICAgLyogT25seSBzdXBwb3J0IGF1ZGlvLCB2aWRlbyBhbmQgcnRjcC4g Ki8KKyAgICBpc19ydGNwID0gbWVkaWFfaXNfcnRjcChidWYsIGJ1Zl9zaXplKTsKKyAgICBwYXls b2FkX3R5cGUgPSBidWZbMV0gJiAweDdmOworICAgIGlzX3ZpZGVvID0gcGF5bG9hZF90eXBlID09 IHdoaXAtPnZpZGVvX3BheWxvYWRfdHlwZTsKKyAgICBpZiAoIWlzX3J0Y3AgJiYgcGF5bG9hZF90 eXBlICE9IHdoaXAtPnZpZGVvX3BheWxvYWRfdHlwZSAmJiBwYXlsb2FkX3R5cGUgIT0gd2hpcC0+ YXVkaW9fcGF5bG9hZF90eXBlKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8qIEdldCB0aGUg Y29ycmVzcG9uZGluZyBTUlRQIGNvbnRleHQuICovCisgICAgc3J0cCA9IGlzX3J0Y3AgPyAmd2hp cC0+c3J0cF9ydGNwX3NlbmQgOiAoaXNfdmlkZW8/ICZ3aGlwLT5zcnRwX3ZpZGVvX3NlbmQgOiAm d2hpcC0+c3J0cF9hdWRpb19zZW5kKTsKKworICAgIC8qIEVuY3J5cHQgYnkgU1JUUCBhbmQgc2Vu ZCBvdXQuICovCisgICAgY2lwaGVyX3NpemUgPSBmZl9zcnRwX2VuY3J5cHQoc3J0cCwgYnVmLCBi dWZfc2l6ZSwgd2hpcC0+YnVmLCBzaXplb2Yod2hpcC0+YnVmKSk7CisgICAgaWYgKGNpcGhlcl9z aXplIDw9IDAgfHwgY2lwaGVyX3NpemUgPCBidWZfc2l6ZSkgeworICAgICAgICBhdl9sb2cod2hp cCwgQVZfTE9HX1dBUk5JTkcsICJXSElQOiBGYWlsZWQgdG8gZW5jcnlwdCBwYWNrZXQ9JWRCLCBj aXBoZXI9JWRCXG4iLCBidWZfc2l6ZSwgY2lwaGVyX3NpemUpOworICAgICAgICByZXR1cm4gMDsK KyAgICB9CisKKyAgICByZXQgPSBmZnVybF93cml0ZSh3aGlwLT51ZHAsIHdoaXAtPmJ1ZiwgY2lw aGVyX3NpemUpOworICAgIGlmIChyZXQgPCAwKSB7CisgICAgICAgIGF2X2xvZyh3aGlwLCBBVl9M T0dfRVJST1IsICJXSElQOiBGYWlsZWQgdG8gd3JpdGUgcGFja2V0PSVkQiwgcmV0PSVkXG4iLCBj aXBoZXJfc2l6ZSwgcmV0KTsKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisKKyAgICByZXR1 cm4gcmV0OworfQorCisvKioKKyAqIENyZWF0ZXMgZGVkaWNhdGVkIFJUUCBtdXhlcnMgZm9yIGVh Y2ggc3RyZWFtIGluIHRoZSBBVkZvcm1hdENvbnRleHQgdG8gYnVpbGQgUlRQCisgKiBwYWNrZXRz IGZyb20gdGhlIGVuY29kZWQgZnJhbWVzLgorICoKKyAqIFRoZSBjb3JyZXNwb25kaW5nIFNSVFAg Y29udGV4dCBpcyB1dGlsaXplZCB0byBlbmNyeXB0IGVhY2ggc3RyZWFtJ3MgUlRQIHBhY2tldHMu IEZvcgorICogZXhhbXBsZSwgYSB2aWRlbyBTUlRQIGNvbnRleHQgaXMgdXNlZCBmb3IgdGhlIHZp ZGVvIHN0cmVhbS4gQWRkaXRpb25hbGx5LCB0aGUKKyAqICJvbl9ydHBfd3JpdGVfcGFja2V0IiBj YWxsYmFjayBmdW5jdGlvbiBpcyBzZXQgYXMgdGhlIHdyaXRlIGZ1bmN0aW9uIGZvciBlYWNoIFJU UAorICogbXV4ZXIgdG8gc2VuZCBvdXQgZW5jcnlwdGVkIFJUUCBwYWNrZXRzLgorICoKKyAqIEBy ZXR1cm4gMCBpZiBPSywgQVZFUlJPUl94eHggb24gZXJyb3IKKyAqLworc3RhdGljIGludCBjcmVh dGVfcnRwX211eGVyKEFWRm9ybWF0Q29udGV4dCAqcykKK3sKKyAgICBpbnQgcmV0LCBpLCBpc192 aWRlbywgYnVmZmVyX3NpemUsIG1heF9wYWNrZXRfc2l6ZTsKKyAgICBBVkZvcm1hdENvbnRleHQg KnJ0cF9jdHggPSBOVUxMOworICAgIEFWRGljdGlvbmFyeSAqb3B0cyA9IE5VTEw7CisgICAgdWlu dDhfdCAqYnVmZmVyID0gTlVMTDsKKyAgICBjaGFyIGJ1Zls2NF07CisgICAgV0hJUENvbnRleHQg KndoaXAgPSBzLT5wcml2X2RhdGE7CisKKyAgICBjb25zdCBBVk91dHB1dEZvcm1hdCAqcnRwX2Zv cm1hdCA9IGF2X2d1ZXNzX2Zvcm1hdCgicnRwIiwgTlVMTCwgTlVMTCk7CisgICAgaWYgKCFydHBf Zm9ybWF0KSB7CisgICAgICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfRVJST1IsICJXSElQOiBGYWls ZWQgdG8gZ3Vlc3MgcnRwIG11eGVyXG4iKTsKKyAgICAgICAgcmV0ID0gQVZFUlJPUihFTk9TWVMp OworICAgICAgICBnb3RvIGVuZDsKKyAgICB9CisKKyAgICAvKiBUaGUgVURQIGJ1ZmZlciBzaXpl LCBtYXkgZ3JlYXRlciB0aGFuIE1UVS4gKi8KKyAgICBidWZmZXJfc2l6ZSA9IE1BWF9VRFBfQlVG RkVSX1NJWkU7CisgICAgLyogVGhlIFJUUCBwYXlsb2FkIG1heCBzaXplLiBSZXNlcnZlZCBzb21l IGJ5dGVzIGZvciBTUlRQIGNoZWNrc3VtIGFuZCBwYWRkaW5nLiAqLworICAgIG1heF9wYWNrZXRf c2l6ZSA9IHdoaXAtPnBrdF9zaXplIC0gRFRMU19TUlRQX0NIRUNLU1VNX0xFTjsKKworICAgIGZv ciAoaSA9IDA7IGkgPCBzLT5uYl9zdHJlYW1zOyBpKyspIHsKKyAgICAgICAgcnRwX2N0eCA9IGF2 Zm9ybWF0X2FsbG9jX2NvbnRleHQoKTsKKyAgICAgICAgaWYgKCFydHBfY3R4KSB7CisgICAgICAg ICAgICByZXQgPSBBVkVSUk9SKEVOT01FTSk7CisgICAgICAgICAgICBnb3RvIGVuZDsKKyAgICAg ICAgfQorCisgICAgICAgIHJ0cF9jdHgtPm9mb3JtYXQgPSBydHBfZm9ybWF0OworICAgICAgICBp ZiAoIWF2Zm9ybWF0X25ld19zdHJlYW0ocnRwX2N0eCwgTlVMTCkpIHsKKyAgICAgICAgICAgIHJl dCA9IEFWRVJST1IoRU5PTUVNKTsKKyAgICAgICAgICAgIGdvdG8gZW5kOworICAgICAgICB9Cisg ICAgICAgIC8qIFBhc3MgdGhlIGludGVycnVwdCBjYWxsYmFjayBvbiAqLworICAgICAgICBydHBf Y3R4LT5pbnRlcnJ1cHRfY2FsbGJhY2sgPSBzLT5pbnRlcnJ1cHRfY2FsbGJhY2s7CisgICAgICAg IC8qIENvcHkgdGhlIG1heCBkZWxheSBzZXR0aW5nOyB0aGUgcnRwIG11eGVyIHJlYWRzIHRoaXMu ICovCisgICAgICAgIHJ0cF9jdHgtPm1heF9kZWxheSA9IHMtPm1heF9kZWxheTsKKyAgICAgICAg LyogQ29weSBvdGhlciBzdHJlYW0gcGFyYW1ldGVycy4gKi8KKyAgICAgICAgcnRwX2N0eC0+c3Ry ZWFtc1swXS0+c2FtcGxlX2FzcGVjdF9yYXRpbyA9IHMtPnN0cmVhbXNbaV0tPnNhbXBsZV9hc3Bl Y3RfcmF0aW87CisgICAgICAgIHJ0cF9jdHgtPmZsYWdzIHw9IHMtPmZsYWdzICYgQVZGTVRfRkxB R19CSVRFWEFDVDsKKyAgICAgICAgcnRwX2N0eC0+c3RyaWN0X3N0ZF9jb21wbGlhbmNlID0gcy0+ c3RyaWN0X3N0ZF9jb21wbGlhbmNlOworCisgICAgICAgIC8qIFNldCB0aGUgc3luY2hyb25pemVk IHN0YXJ0IHRpbWUuICovCisgICAgICAgIHJ0cF9jdHgtPnN0YXJ0X3RpbWVfcmVhbHRpbWUgPSBz LT5zdGFydF90aW1lX3JlYWx0aW1lOworCisgICAgICAgIGF2Y29kZWNfcGFyYW1ldGVyc19jb3B5 KHJ0cF9jdHgtPnN0cmVhbXNbMF0tPmNvZGVjcGFyLCBzLT5zdHJlYW1zW2ldLT5jb2RlY3Bhcik7 CisgICAgICAgIHJ0cF9jdHgtPnN0cmVhbXNbMF0tPnRpbWVfYmFzZSA9IHMtPnN0cmVhbXNbaV0t PnRpbWVfYmFzZTsKKworICAgICAgICAvKioKKyAgICAgICAgICogRm9yIEguMjY0LCBjb25zaXN0 ZW50bHkgdXRpbGl6ZSB0aGUgYW5uZXhiIGZvcm1hdCB0aHJvdWdoIHRoZSBCaXRzdHJlYW0gRmls dGVyIChCU0YpOworICAgICAgICAgKiB0aGVyZWZvcmUsIHdlIGRlYWN0aXZhdGUgdGhlIGV4dHJh ZGF0YSBkZXRlY3Rpb24gZm9yIHRoZSBSVFAgbXV4ZXIuCisgICAgICAgICAqLworICAgICAgICBp ZiAocy0+c3RyZWFtc1tpXS0+Y29kZWNwYXItPmNvZGVjX2lkID09IEFWX0NPREVDX0lEX0gyNjQp IHsKKyAgICAgICAgICAgIGF2X2ZyZWVwKCZydHBfY3R4LT5zdHJlYW1zW2ldLT5jb2RlY3Bhci0+ ZXh0cmFkYXRhKTsKKyAgICAgICAgICAgIHJ0cF9jdHgtPnN0cmVhbXNbaV0tPmNvZGVjcGFyLT5l eHRyYWRhdGFfc2l6ZSA9IDA7CisgICAgICAgIH0KKworICAgICAgICBidWZmZXIgPSBhdl9tYWxs b2MoYnVmZmVyX3NpemUpOworICAgICAgICBpZiAoIWJ1ZmZlcikgeworICAgICAgICAgICAgcmV0 ID0gQVZFUlJPUihFTk9NRU0pOworICAgICAgICAgICAgZ290byBlbmQ7CisgICAgICAgIH0KKwor ICAgICAgICBydHBfY3R4LT5wYiA9IGF2aW9fYWxsb2NfY29udGV4dChidWZmZXIsIGJ1ZmZlcl9z aXplLCAxLCBzLCBOVUxMLCBvbl9ydHBfd3JpdGVfcGFja2V0LCBOVUxMKTsKKyAgICAgICAgaWYg KCFydHBfY3R4LT5wYikgeworICAgICAgICAgICAgcmV0ID0gQVZFUlJPUihFTk9NRU0pOworICAg ICAgICAgICAgZ290byBlbmQ7CisgICAgICAgIH0KKyAgICAgICAgcnRwX2N0eC0+cGItPm1heF9w YWNrZXRfc2l6ZSA9IG1heF9wYWNrZXRfc2l6ZTsKKyAgICAgICAgcnRwX2N0eC0+cGItPmF2X2Ns YXNzID0gJmZmX2F2aW9fY2xhc3M7CisKKyAgICAgICAgaXNfdmlkZW8gPSBzLT5zdHJlYW1zW2ld LT5jb2RlY3Bhci0+Y29kZWNfdHlwZSA9PSBBVk1FRElBX1RZUEVfVklERU87CisgICAgICAgIHNu cHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlZCIsIGlzX3ZpZGVvPyB3aGlwLT52aWRlb19wYXls b2FkX3R5cGUgOiB3aGlwLT5hdWRpb19wYXlsb2FkX3R5cGUpOworICAgICAgICBhdl9kaWN0X3Nl dCgmb3B0cywgInBheWxvYWRfdHlwZSIsIGJ1ZiwgMCk7CisgICAgICAgIHNucHJpbnRmKGJ1Ziwg c2l6ZW9mKGJ1ZiksICIlZCIsIGlzX3ZpZGVvPyB3aGlwLT52aWRlb19zc3JjIDogd2hpcC0+YXVk aW9fc3NyYyk7CisgICAgICAgIGF2X2RpY3Rfc2V0KCZvcHRzLCAic3NyYyIsIGJ1ZiwgMCk7CisK KyAgICAgICAgcmV0ID0gYXZmb3JtYXRfd3JpdGVfaGVhZGVyKHJ0cF9jdHgsICZvcHRzKTsKKyAg ICAgICAgaWYgKHJldCA8IDApIHsKKyAgICAgICAgICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfRVJS T1IsICJXSElQOiBGYWlsZWQgdG8gd3JpdGUgcnRwIGhlYWRlclxuIik7CisgICAgICAgICAgICBn b3RvIGVuZDsKKyAgICAgICAgfQorCisgICAgICAgIGZmX2Zvcm1hdF9zZXRfdXJsKHJ0cF9jdHgs IGF2X3N0cmR1cChzLT51cmwpKTsKKyAgICAgICAgcy0+c3RyZWFtc1tpXS0+dGltZV9iYXNlID0g cnRwX2N0eC0+c3RyZWFtc1swXS0+dGltZV9iYXNlOworICAgICAgICBzLT5zdHJlYW1zW2ldLT5w cml2X2RhdGEgPSBydHBfY3R4OworICAgICAgICBydHBfY3R4ID0gTlVMTDsKKyAgICB9CisKKyAg ICBpZiAod2hpcC0+c3RhdGUgPCBXSElQX1NUQVRFX1JFQURZKQorICAgICAgICB3aGlwLT5zdGF0 ZSA9IFdISVBfU1RBVEVfUkVBRFk7CisgICAgYXZfbG9nKHdoaXAsIEFWX0xPR19JTkZPLCAiV0hJ UDogTXV4ZXIgc3RhdGU9JWQsIGJ1ZmZlcl9zaXplPSVkLCBtYXhfcGFja2V0X3NpemU9JWQsICIK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICJlbGFwc2VkPSVkbXMoaW5pdDolZCxvZmZlcjol ZCxhbnN3ZXI6JWQsdWRwOiVkLGljZTolZCxkdGxzOiVkLHNydHA6JWQpXG4iLAorICAgICAgICB3 aGlwLT5zdGF0ZSwgYnVmZmVyX3NpemUsIG1heF9wYWNrZXRfc2l6ZSwgRUxBUFNFRCh3aGlwLT53 aGlwX3N0YXJ0dGltZSwgYXZfZ2V0dGltZSgpKSwKKyAgICAgICAgRUxBUFNFRCh3aGlwLT53aGlw X3N0YXJ0dGltZSwgICB3aGlwLT53aGlwX2luaXRfdGltZSksCisgICAgICAgIEVMQVBTRUQod2hp cC0+d2hpcF9pbml0X3RpbWUsICAgd2hpcC0+d2hpcF9vZmZlcl90aW1lKSwKKyAgICAgICAgRUxB UFNFRCh3aGlwLT53aGlwX29mZmVyX3RpbWUsICB3aGlwLT53aGlwX2Fuc3dlcl90aW1lKSwKKyAg ICAgICAgRUxBUFNFRCh3aGlwLT53aGlwX2Fuc3dlcl90aW1lLCB3aGlwLT53aGlwX3VkcF90aW1l KSwKKyAgICAgICAgRUxBUFNFRCh3aGlwLT53aGlwX3VkcF90aW1lLCAgICB3aGlwLT53aGlwX2lj ZV90aW1lKSwKKyAgICAgICAgRUxBUFNFRCh3aGlwLT53aGlwX2ljZV90aW1lLCAgICB3aGlwLT53 aGlwX2R0bHNfdGltZSksCisgICAgICAgIEVMQVBTRUQod2hpcC0+d2hpcF9kdGxzX3RpbWUsICAg d2hpcC0+d2hpcF9zcnRwX3RpbWUpKTsKKworZW5kOgorICAgIGlmIChydHBfY3R4KQorICAgICAg ICBhdmlvX2NvbnRleHRfZnJlZSgmcnRwX2N0eC0+cGIpOworICAgIGF2Zm9ybWF0X2ZyZWVfY29u dGV4dChydHBfY3R4KTsKKyAgICBhdl9kaWN0X2ZyZWUoJm9wdHMpOworICAgIHJldHVybiByZXQ7 Cit9CisKKy8qKgorICogUlRDIGlzIGNvbm5lY3Rpb25sZXNzLCBmb3IgaXQncyBiYXNlZCBvbiBV RFAsIHNvIGl0IGNoZWNrIHdoZXRoZXIgc2VzaXNvbiBpcworICogdGltZW91dC4gSW4gc3VjaCBj YXNlLCBwdWJsaXNoZXJzIGNhbid0IHJlcHVibGlzaCB0aGUgc3RyZWFtIHV0aWwgdGhlIHNlc3Np b24KKyAqIGlzIHRpbWVvdXQuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byBub3RpZnkg dGhlIHNlcnZlciB0aGF0IHRoZSBzdHJlYW0gaXMgZW5kZWQsIHNlcnZlcgorICogc2hvdWxkIGV4 cGlyZSBhbmQgY2xvc2UgdGhlIHNlc3Npb24gaW1tZWRpYXRlbHksIHNvIHRoYXQgcHVibGlzaGVy cyBjYW4gcmVwdWJsaXNoCisgKiB0aGUgc3RyZWFtIHF1aWNrbHkuCisgKi8KK3N0YXRpYyBpbnQg ZGlzcG9zZV9zZXNzaW9uKEFWRm9ybWF0Q29udGV4dCAqcykKK3sKKyAgICBpbnQgcmV0OworICAg IGNoYXIgYnVmW01BWF9VUkxfU0laRV07CisgICAgVVJMQ29udGV4dCAqd2hpcF91YyA9IE5VTEw7 CisgICAgQVZEaWN0aW9uYXJ5ICpvcHRzID0gTlVMTDsKKyAgICBXSElQQ29udGV4dCAqd2hpcCA9 IHMtPnByaXZfZGF0YTsKKworICAgIGlmICghd2hpcC0+d2hpcF9yZXNvdXJjZV91cmwpCisgICAg ICAgIHJldHVybiAwOworCisgICAgcmV0ID0gc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIkNh Y2hlLUNvbnRyb2w6IG5vLWNhY2hlXHJcbiIpOworICAgIGlmICh3aGlwLT5hdXRob3JpemF0aW9u KQorICAgICAgICByZXQgKz0gc25wcmludGYoYnVmICsgcmV0LCBzaXplb2YoYnVmKSAtIHJldCwg IkF1dGhvcml6YXRpb246IEJlYXJlciAlc1xyXG4iLCB3aGlwLT5hdXRob3JpemF0aW9uKTsKKyAg ICBpZiAocmV0IDw9IDAgfHwgcmV0ID49IHNpemVvZihidWYpKSB7CisgICAgICAgIGF2X2xvZyh3 aGlwLCBBVl9MT0dfRVJST1IsICJXSElQOiBGYWlsZWQgdG8gZ2VuZXJhdGUgaGVhZGVycywgc2l6 ZT0lZCwgJXNcbiIsIHJldCwgYnVmKTsKKyAgICAgICAgcmV0ID0gQVZFUlJPUihFSU5WQUwpOwor ICAgICAgICBnb3RvIGVuZDsKKyAgICB9CisKKyAgICBhdl9kaWN0X3NldCgmb3B0cywgImhlYWRl cnMiLCBidWYsIDApOworICAgIGF2X2RpY3Rfc2V0X2ludCgmb3B0cywgImNodW5rZWRfcG9zdCIs IDAsIDApOworICAgIGF2X2RpY3Rfc2V0KCZvcHRzLCAibWV0aG9kIiwgIkRFTEVURSIsIDApOwor ICAgIHJldCA9IGZmdXJsX29wZW5fd2hpdGVsaXN0KCZ3aGlwX3VjLCB3aGlwLT53aGlwX3Jlc291 cmNlX3VybCwgQVZJT19GTEFHX1JFQURfV1JJVEUsICZzLT5pbnRlcnJ1cHRfY2FsbGJhY2ssCisg ICAgICAgICZvcHRzLCBzLT5wcm90b2NvbF93aGl0ZWxpc3QsIHMtPnByb3RvY29sX2JsYWNrbGlz dCwgTlVMTCk7CisgICAgaWYgKHJldCA8IDApIHsKKyAgICAgICAgYXZfbG9nKHdoaXAsIEFWX0xP R19FUlJPUiwgIldISVA6IEZhaWxlZCB0byBERUxFVEUgdXJsPSVzXG4iLCB3aGlwLT53aGlwX3Jl c291cmNlX3VybCk7CisgICAgICAgIGdvdG8gZW5kOworICAgIH0KKworICAgIHdoaWxlICgxKSB7 CisgICAgICAgIHJldCA9IGZmdXJsX3JlYWQod2hpcF91YywgYnVmLCBzaXplb2YoYnVmKSk7Cisg ICAgICAgIGlmIChyZXQgPT0gQVZFUlJPUl9FT0YpIHsKKyAgICAgICAgICAgIHJldCA9IDA7Cisg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAocmV0IDwgMCkgeworICAg ICAgICAgICAgYXZfbG9nKHdoaXAsIEFWX0xPR19FUlJPUiwgIldISVA6IEZhaWxlZCB0byByZWFk IHJlc3BvbnNlIGZyb20gREVMRVRFIHVybD0lc1xuIiwgd2hpcC0+d2hpcF9yZXNvdXJjZV91cmwp OworICAgICAgICAgICAgZ290byBlbmQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhdl9sb2co d2hpcCwgQVZfTE9HX0lORk8sICJXSElQOiBEaXNwb3NlIHJlc291cmNlICVzIG9rXG4iLCB3aGlw LT53aGlwX3Jlc291cmNlX3VybCk7CisKK2VuZDoKKyAgICBmZnVybF9jbG9zZXAoJndoaXBfdWMp OworICAgIGF2X2RpY3RfZnJlZSgmb3B0cyk7CisgICAgcmV0dXJuIHJldDsKK30KKworLyoqCisg KiBTaW5jZSB0aGUgaDI2NF9tcDR0b2FubmV4YiBmaWx0ZXIgb25seSBwcm9jZXNzZXMgdGhlIE1Q NCBJU09NIGZvcm1hdCBhbmQgYnlwYXNzZXMKKyAqIHRoZSBhbm5leGIgZm9ybWF0LCBpdCBpcyBu ZWNlc3NhcnkgdG8gbWFudWFsbHkgaW5zZXJ0IGVuY29kZXIgbWV0YWRhdGEgYmVmb3JlIGVhY2gK KyAqIElEUiB3aGVuIGRlYWxpbmcgd2l0aCBhbm5leGIgZm9ybWF0IHBhY2tldHMuIEZvciBpbnN0 YW5jZSwgaW4gdGhlIGNhc2Ugb2YgSC4yNjQsCisgKiB3ZSBtdXN0IGluc2VydCBTUFMgYW5kIFBQ UyBiZWZvcmUgdGhlIElEUiBmcmFtZS4KKyAqLworc3RhdGljIGludCBoMjY0X2FubmV4Yl9pbnNl cnRfc3BzX3BwcyhBVkZvcm1hdENvbnRleHQgKnMsIEFWUGFja2V0ICpwa3QpCit7CisgICAgaW50 IHJldCA9IDA7CisgICAgQVZQYWNrZXQgKmluID0gTlVMTDsKKyAgICBBVkNvZGVjUGFyYW1ldGVy cyAqcGFyID0gcy0+c3RyZWFtc1twa3QtPnN0cmVhbV9pbmRleF0tPmNvZGVjcGFyOworICAgIHVp bnQzMl90IG5hbF9zaXplID0gMCwgb3V0X3NpemUgPSBwYXIgPyBwYXItPmV4dHJhZGF0YV9zaXpl IDogMDsKKyAgICB1aW50OF90IHVuaXRfdHlwZSwgc3BzX3NlZW4gPSAwLCBwcHNfc2VlbiA9IDAs IGlkcl9zZWVuID0gMCwgKm91dDsKKyAgICBjb25zdCB1aW50OF90ICpidWYsICpidWZfZW5kLCAq cjE7CisKKyAgICBpZiAoIXBrdCB8fCAhcGt0LT5kYXRhIHx8IHBrdC0+c2l6ZSA8PSAwKQorICAg ICAgICByZXR1cm4gcmV0OworICAgIGlmICghcGFyIHx8ICFwYXItPmV4dHJhZGF0YSB8fCBwYXIt PmV4dHJhZGF0YV9zaXplIDw9IDApCisgICAgICAgIHJldHVybiByZXQ7CisKKyAgICAvKiBEaXNj b3ZlciBOQUxVIHR5cGUgZnJvbSBwYWNrZXQuICovCisgICAgYnVmX2VuZCAgPSBwa3QtPmRhdGEg KyBwa3QtPnNpemU7CisgICAgZm9yIChidWYgPSBmZl9uYWxfZmluZF9zdGFydGNvZGUocGt0LT5k YXRhLCBidWZfZW5kKTsgYnVmIDwgYnVmX2VuZDsgYnVmICs9IG5hbF9zaXplKSB7CisgICAgICAg IHdoaWxlICghKihidWYrKykpOworICAgICAgICByMSA9IGZmX25hbF9maW5kX3N0YXJ0Y29kZShi dWYsIGJ1Zl9lbmQpOworICAgICAgICBpZiAoKG5hbF9zaXplID0gcjEgLSBidWYpID4gMCkgewor ICAgICAgICAgICAgdW5pdF90eXBlID0gKmJ1ZiAmIDB4MWY7CisgICAgICAgICAgICBpZiAodW5p dF90eXBlID09IEgyNjRfTkFMX1NQUykgeworICAgICAgICAgICAgICAgIHNwc19zZWVuID0gMTsK KyAgICAgICAgICAgIH0gZWxzZSBpZiAodW5pdF90eXBlID09IEgyNjRfTkFMX1BQUykgeworICAg ICAgICAgICAgICAgIHBwc19zZWVuID0gMTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAodW5pdF90 eXBlID09IEgyNjRfTkFMX0lEUl9TTElDRSkgeworICAgICAgICAgICAgICAgIGlkcl9zZWVuID0g MTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgb3V0X3NpemUgKz0gMyArIG5hbF9zaXpl OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFpZHJfc2VlbiB8fCAoc3BzX3NlZW4gJiYg cHBzX3NlZW4pKQorICAgICAgICByZXR1cm4gcmV0OworCisgICAgLyogU2VlIGF2X2JzZl9zZW5k X3BhY2tldCAqLworICAgIGluID0gYXZfcGFja2V0X2FsbG9jKCk7CisgICAgaWYgKCFpbikKKyAg ICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKworICAgIHJldCA9IGF2X3BhY2tldF9tYWtl X3JlZmNvdW50ZWQocGt0KTsKKyAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgZ290byBmYWlsOwor CisgICAgYXZfcGFja2V0X21vdmVfcmVmKGluLCBwa3QpOworCisgICAgLyogQ3JlYXRlIGEgbmV3 IHBhY2tldCB3aXRoIHNwcy9wcHMgaW5zZXJ0ZWQuICovCisgICAgcmV0ID0gYXZfbmV3X3BhY2tl dChwa3QsIG91dF9zaXplKTsKKyAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgZ290byBmYWlsOwor CisgICAgcmV0ID0gYXZfcGFja2V0X2NvcHlfcHJvcHMocGt0LCBpbik7CisgICAgaWYgKHJldCA8 IDApCisgICAgICAgIGdvdG8gZmFpbDsKKworICAgIG1lbWNweShwa3QtPmRhdGEsIHBhci0+ZXh0 cmFkYXRhLCBwYXItPmV4dHJhZGF0YV9zaXplKTsKKyAgICBvdXQgPSBwa3QtPmRhdGEgKyBwYXIt PmV4dHJhZGF0YV9zaXplOworICAgIGJ1Zl9lbmQgID0gaW4tPmRhdGEgKyBpbi0+c2l6ZTsKKyAg ICBmb3IgKGJ1ZiA9IGZmX25hbF9maW5kX3N0YXJ0Y29kZShpbi0+ZGF0YSwgYnVmX2VuZCk7IGJ1 ZiA8IGJ1Zl9lbmQ7IGJ1ZiArPSBuYWxfc2l6ZSkgeworICAgICAgICB3aGlsZSAoISooYnVmKysp KTsKKyAgICAgICAgcjEgPSBmZl9uYWxfZmluZF9zdGFydGNvZGUoYnVmLCBidWZfZW5kKTsKKyAg ICAgICAgaWYgKChuYWxfc2l6ZSA9IHIxIC0gYnVmKSA+IDApIHsKKyAgICAgICAgICAgIEFWX1dC MjQob3V0LCAweDAwMDAxKTsKKyAgICAgICAgICAgIG1lbWNweShvdXQgKyAzLCBidWYsIG5hbF9z aXplKTsKKyAgICAgICAgICAgIG91dCArPSAzICsgbmFsX3NpemU7CisgICAgICAgIH0KKyAgICB9 CisKK2ZhaWw6CisgICAgaWYgKHJldCA8IDApCisgICAgICAgIGF2X3BhY2tldF91bnJlZihwa3Qp OworICAgIGF2X3BhY2tldF9mcmVlKCZpbik7CisKKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0 aWMgYXZfY29sZCBpbnQgd2hpcF9pbml0KEFWRm9ybWF0Q29udGV4dCAqcykKK3sKKyAgICBpbnQg cmV0OworICAgIFdISVBDb250ZXh0ICp3aGlwID0gcy0+cHJpdl9kYXRhOworCisgICAgaWYgKChy ZXQgPSBpbml0aWFsaXplKHMpKSA8IDApCisgICAgICAgIGdvdG8gZW5kOworCisgICAgaWYgKChy ZXQgPSBwYXJzZV9jb2RlYyhzKSkgPCAwKQorICAgICAgICBnb3RvIGVuZDsKKworICAgIGlmICgo cmV0ID0gZ2VuZXJhdGVfc2RwX29mZmVyKHMpKSA8IDApCisgICAgICAgIGdvdG8gZW5kOworCisg ICAgaWYgKChyZXQgPSBleGNoYW5nZV9zZHAocykpIDwgMCkKKyAgICAgICAgZ290byBlbmQ7CisK KyAgICBpZiAoKHJldCA9IHBhcnNlX2Fuc3dlcihzKSkgPCAwKQorICAgICAgICBnb3RvIGVuZDsK KworICAgIGlmICgocmV0ID0gdWRwX2Nvbm5lY3QocykpIDwgMCkKKyAgICAgICAgZ290byBlbmQ7 CisKKyAgICBpZiAoKHJldCA9IGljZV9kdGxzX2hhbmRzaGFrZShzKSkgPCAwKQorICAgICAgICBn b3RvIGVuZDsKKworICAgIGlmICgocmV0ID0gc2V0dXBfc3J0cChzKSkgPCAwKQorICAgICAgICBn b3RvIGVuZDsKKworICAgIGlmICgocmV0ID0gY3JlYXRlX3J0cF9tdXhlcihzKSkgPCAwKQorICAg ICAgICBnb3RvIGVuZDsKKworZW5kOgorICAgIGlmIChyZXQgPCAwICYmIHdoaXAtPnN0YXRlIDwg V0hJUF9TVEFURV9GQUlMRUQpCisgICAgICAgIHdoaXAtPnN0YXRlID0gV0hJUF9TVEFURV9GQUlM RUQ7CisgICAgaWYgKHJldCA+PSAwICYmIHdoaXAtPnN0YXRlID49IFdISVBfU1RBVEVfRkFJTEVE ICYmIHdoaXAtPmR0bHNfcmV0IDwgMCkKKyAgICAgICAgcmV0ID0gd2hpcC0+ZHRsc19yZXQ7Cisg ICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB3aGlwX3dyaXRlX3BhY2tldChBVkZvcm1h dENvbnRleHQgKnMsIEFWUGFja2V0ICpwa3QpCit7CisgICAgaW50IHJldDsKKyAgICBXSElQQ29u dGV4dCAqd2hpcCA9IHMtPnByaXZfZGF0YTsKKyAgICBBVlN0cmVhbSAqc3QgPSBzLT5zdHJlYW1z W3BrdC0+c3RyZWFtX2luZGV4XTsKKyAgICBBVkZvcm1hdENvbnRleHQgKnJ0cF9jdHggPSBzdC0+ cHJpdl9kYXRhOworCisgICAgLyogVE9ETzogU2VuZCBiaW5kaW5nIHJlcXVlc3QgZXZlcnkgMXMg YXMgV2ViUlRDIGhlYXJ0YmVhdC4gKi8KKworICAgIC8qKgorICAgICAqIFJlY2VpdmUgcGFja2V0 cyBmcm9tIHRoZSBzZXJ2ZXIgc3VjaCBhcyBJQ0UgYmluZGluZyByZXF1ZXN0cywgRFRMUyBtZXNz YWdlcywKKyAgICAgKiBhbmQgUlRDUCBsaWtlIFBMSSByZXF1ZXN0cywgdGhlbiByZXNwb25kIHRv IHRoZW0uCisgICAgICovCisgICAgcmV0ID0gZmZ1cmxfcmVhZCh3aGlwLT51ZHAsIHdoaXAtPmJ1 Ziwgc2l6ZW9mKHdoaXAtPmJ1ZikpOworICAgIGlmIChyZXQgPiAwKSB7CisgICAgICAgIGlmIChp c19kdGxzX3BhY2tldCh3aGlwLT5idWYsIHJldCkpIHsKKyAgICAgICAgICAgIGlmICgocmV0ID0g ZmZ1cmxfd3JpdGUod2hpcC0+ZHRsc191Yywgd2hpcC0+YnVmLCByZXQpKSA8IDApIHsKKyAgICAg ICAgICAgICAgICBhdl9sb2cod2hpcCwgQVZfTE9HX0VSUk9SLCAiV0hJUDogRmFpbGVkIHRvIGhh bmRsZSBEVExTIG1lc3NhZ2VcbiIpOworICAgICAgICAgICAgICAgIGdvdG8gZW5kOworICAgICAg ICAgICAgfQorICAgICAgICB9CisgICAgfSBlbHNlIGlmIChyZXQgIT0gQVZFUlJPUihFQUdBSU4p KSB7CisgICAgICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfRVJST1IsICJXSElQOiBGYWlsZWQgdG8g cmVhZCBmcm9tIFVEUCBzb2NrZXRcbiIpOworICAgICAgICBnb3RvIGVuZDsKKyAgICB9CisKKyAg ICBpZiAod2hpcC0+aDI2NF9hbm5leGJfaW5zZXJ0X3Nwc19wcHMgJiYgc3QtPmNvZGVjcGFyLT5j b2RlY19pZCA9PSBBVl9DT0RFQ19JRF9IMjY0KSB7CisgICAgICAgIGlmICgocmV0ID0gaDI2NF9h bm5leGJfaW5zZXJ0X3Nwc19wcHMocywgcGt0KSkgPCAwKSB7CisgICAgICAgICAgICBhdl9sb2co d2hpcCwgQVZfTE9HX0VSUk9SLCAiV0hJUDogRmFpbGVkIHRvIGluc2VydCBTUFMvUFBTIGJlZm9y ZSBJRFJcbiIpOworICAgICAgICAgICAgZ290byBlbmQ7CisgICAgICAgIH0KKyAgICB9CisKKyAg ICByZXQgPSBmZl93cml0ZV9jaGFpbmVkKHJ0cF9jdHgsIDAsIHBrdCwgcywgMCk7CisgICAgaWYg KHJldCA8IDApIHsKKyAgICAgICAgaWYgKHJldCA9PSBBVkVSUk9SKEVJTlZBTCkpIHsKKyAgICAg ICAgICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfV0FSTklORywgIldISVA6IElnbm9yZSBmYWlsZWQg dG8gd3JpdGUgcGFja2V0PSVkQiwgcmV0PSVkXG4iLCBwa3QtPnNpemUsIHJldCk7CisgICAgICAg ICAgICByZXQgPSAwOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGF2X2xvZyh3aGlwLCBB Vl9MT0dfRVJST1IsICJXSElQOiBGYWlsZWQgdG8gd3JpdGUgcGFja2V0LCBzaXplPSVkXG4iLCBw a3QtPnNpemUpOworICAgICAgICBnb3RvIGVuZDsKKyAgICB9CisKK2VuZDoKKyAgICBpZiAocmV0 IDwgMCAmJiB3aGlwLT5zdGF0ZSA8IFdISVBfU1RBVEVfRkFJTEVEKQorICAgICAgICB3aGlwLT5z dGF0ZSA9IFdISVBfU1RBVEVfRkFJTEVEOworICAgIGlmIChyZXQgPj0gMCAmJiB3aGlwLT5zdGF0 ZSA+PSBXSElQX1NUQVRFX0ZBSUxFRCAmJiB3aGlwLT5kdGxzX3JldCA8IDApCisgICAgICAgIHJl dCA9IHdoaXAtPmR0bHNfcmV0OworICAgIGlmIChyZXQgPj0gMCAmJiB3aGlwLT5kdGxzX2Nsb3Nl ZCkKKyAgICAgICAgcmV0ID0gQVZFUlJPUihFSU8pOworICAgIHJldHVybiByZXQ7Cit9CisKK3N0 YXRpYyBhdl9jb2xkIHZvaWQgd2hpcF9kZWluaXQoQVZGb3JtYXRDb250ZXh0ICpzKQoreworICAg IGludCBpLCByZXQ7CisgICAgV0hJUENvbnRleHQgKndoaXAgPSBzLT5wcml2X2RhdGE7CisKKyAg ICByZXQgPSBkaXNwb3NlX3Nlc3Npb24ocyk7CisgICAgaWYgKHJldCA8IDApCisgICAgICAgIGF2 X2xvZyh3aGlwLCBBVl9MT0dfV0FSTklORywgIldISVA6IEZhaWxlZCB0byBkaXNwb3NlIHJlc291 cmNlLCByZXQ9JWRcbiIsIHJldCk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgcy0+bmJfc3RyZWFt czsgaSsrKSB7CisgICAgICAgIEFWRm9ybWF0Q29udGV4dCogcnRwX2N0eCA9IHMtPnN0cmVhbXNb aV0tPnByaXZfZGF0YTsKKyAgICAgICAgaWYgKCFydHBfY3R4KQorICAgICAgICAgICAgY29udGlu dWU7CisKKyAgICAgICAgYXZfd3JpdGVfdHJhaWxlcihydHBfY3R4KTsKKyAgICAgICAgLyoqCisg ICAgICAgICAqIEtlZXAgaW4gbWluZCB0aGF0IGl0IGlzIG5lY2Vzc2FyeSB0byBmcmVlIHRoZSBi dWZmZXIgb2YgcGIgc2luY2Ugd2UgYWxsb2NhdGUKKyAgICAgICAgICogaXQgYW5kIHBhc3MgaXQg dG8gcGIgdXNpbmcgYXZpb19hbGxvY19jb250ZXh0LCB3aGlsZSBhdmlvX2NvbnRleHRfZnJlZSBk b2VzCisgICAgICAgICAqIG5vdCBwZXJmb3JtIHRoaXMgYWN0aW9uLgorICAgICAgICAgKi8KKyAg ICAgICAgYXZfZnJlZXAoJnJ0cF9jdHgtPnBiLT5idWZmZXIpOworICAgICAgICBhdmlvX2NvbnRl eHRfZnJlZSgmcnRwX2N0eC0+cGIpOworICAgICAgICBhdmZvcm1hdF9mcmVlX2NvbnRleHQocnRw X2N0eCk7CisgICAgICAgIHMtPnN0cmVhbXNbaV0tPnByaXZfZGF0YSA9IE5VTEw7CisgICAgfQor CisgICAgYXZfZnJlZXAoJndoaXAtPnNkcF9vZmZlcik7CisgICAgYXZfZnJlZXAoJndoaXAtPnNk cF9hbnN3ZXIpOworICAgIGF2X2ZyZWVwKCZ3aGlwLT53aGlwX3Jlc291cmNlX3VybCk7CisgICAg YXZfZnJlZXAoJndoaXAtPmljZV91ZnJhZ19yZW1vdGUpOworICAgIGF2X2ZyZWVwKCZ3aGlwLT5p Y2VfcHdkX3JlbW90ZSk7CisgICAgYXZfZnJlZXAoJndoaXAtPmljZV9wcm90b2NvbCk7CisgICAg YXZfZnJlZXAoJndoaXAtPmljZV9ob3N0KTsKKyAgICBhdl9mcmVlcCgmd2hpcC0+YXV0aG9yaXph dGlvbik7CisgICAgYXZfZnJlZXAoJndoaXAtPmNlcnRfZmlsZSk7CisgICAgYXZfZnJlZXAoJndo aXAtPmtleV9maWxlKTsKKyAgICBmZnVybF9jbG9zZXAoJndoaXAtPnVkcCk7CisgICAgZmZfc3J0 cF9mcmVlKCZ3aGlwLT5zcnRwX2F1ZGlvX3NlbmQpOworICAgIGZmX3NydHBfZnJlZSgmd2hpcC0+ c3J0cF92aWRlb19zZW5kKTsKKyAgICBmZl9zcnRwX2ZyZWUoJndoaXAtPnNydHBfcnRjcF9zZW5k KTsKKyAgICBmZl9zcnRwX2ZyZWUoJndoaXAtPnNydHBfcmVjdik7CisgICAgZmZ1cmxfY2xvc2Uo d2hpcC0+ZHRsc191Yyk7Cit9CisKK3N0YXRpYyBpbnQgd2hpcF9jaGVja19iaXRzdHJlYW0oQVZG b3JtYXRDb250ZXh0ICpzLCBBVlN0cmVhbSAqc3QsIGNvbnN0IEFWUGFja2V0ICpwa3QpCit7Cisg ICAgaW50IHJldCA9IDEsIGV4dHJhZGF0YV9pc29tID0gMDsKKyAgICB1aW50OF90ICpiID0gcGt0 LT5kYXRhOworICAgIFdISVBDb250ZXh0ICp3aGlwID0gcy0+cHJpdl9kYXRhOworCisgICAgaWYg KHN0LT5jb2RlY3Bhci0+Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURfSDI2NCkgeworICAgICAgICBl eHRyYWRhdGFfaXNvbSA9IHN0LT5jb2RlY3Bhci0+ZXh0cmFkYXRhX3NpemUgPiAwICYmIHN0LT5j b2RlY3Bhci0+ZXh0cmFkYXRhWzBdID09IDE7CisgICAgICAgIGlmIChwa3QtPnNpemUgPj0gNSAm JiBBVl9SQjMyKGIpICE9IDB4MDAwMDAwMSAmJiAoQVZfUkIyNChiKSAhPSAweDAwMDAwMSB8fCBl eHRyYWRhdGFfaXNvbSkpIHsKKyAgICAgICAgICAgIHJldCA9IGZmX3N0cmVhbV9hZGRfYml0c3Ry ZWFtX2ZpbHRlcihzdCwgImgyNjRfbXA0dG9hbm5leGIiLCBOVUxMKTsKKyAgICAgICAgICAgIGF2 X2xvZyh3aGlwLCBBVl9MT0dfVkVSQk9TRSwgIldISVA6IEVuYWJsZSBCU0YgaDI2NF9tcDR0b2Fu bmV4YiwgcGFja2V0PVsleCAleCAleCAleCAleCAuLi5dLCBleHRyYWRhdGFfaXNvbT0lZFxuIiwK KyAgICAgICAgICAgICAgICBiWzBdLCBiWzFdLCBiWzJdLCBiWzNdLCBiWzRdLCBleHRyYWRhdGFf aXNvbSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgd2hpcC0+aDI2NF9hbm5leGJfaW5z ZXJ0X3Nwc19wcHMgPSAxOworICAgIH0KKworICAgIHJldHVybiByZXQ7Cit9CisKKyNkZWZpbmUg T0ZGU0VUKHgpIG9mZnNldG9mKFdISVBDb250ZXh0LCB4KQorI2RlZmluZSBERUMgQVZfT1BUX0ZM QUdfREVDT0RJTkdfUEFSQU0KK3N0YXRpYyBjb25zdCBBVk9wdGlvbiBvcHRpb25zW10gPSB7Cisg ICAgeyAiaGFuZHNoYWtlX3RpbWVvdXQiLCAgIlRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIGZvciBJ Q0UgYW5kIERUTFMgaGFuZHNoYWtlLiIsICAgICAgT0ZGU0VUKGhhbmRzaGFrZV90aW1lb3V0KSwg IEFWX09QVF9UWVBFX0lOVCwgICAgeyAuaTY0ID0gNTAwMCB9LCAgICAtMSwgSU5UX01BWCwgREVD IH0sCisgICAgeyAicGt0X3NpemUiLCAgICAgICAgICAgIlRoZSBtYXhpbXVtIHNpemUsIGluIGJ5 dGVzLCBvZiBSVFAgcGFja2V0cyB0aGF0IHNlbmQgb3V0IiwgT0ZGU0VUKHBrdF9zaXplKSwgICAg ICAgICAgIEFWX09QVF9UWVBFX0lOVCwgICAgeyAuaTY0ID0gMTIwMCB9LCAgICAtMSwgSU5UX01B WCwgREVDIH0sCisgICAgeyAiYXV0aG9yaXphdGlvbiIsICAgICAgIlRoZSBvcHRpb25hbCBCZWFy ZXIgdG9rZW4gZm9yIFdISVAgQXV0aG9yaXphdGlvbiIsICAgICAgICAgT0ZGU0VUKGF1dGhvcml6 YXRpb24pLCAgICAgIEFWX09QVF9UWVBFX1NUUklORywgeyAuc3RyID0gTlVMTCB9LCAgICAgMCwg ICAgICAgMCwgREVDIH0sCisgICAgeyAiY2VydF9maWxlIiwgICAgICAgICAgIlRoZSBvcHRpb25h bCBjZXJ0aWZpY2F0ZSBmaWxlIHBhdGggZm9yIERUTFMiLCAgICAgICAgICAgICAgT0ZGU0VUKGNl cnRfZmlsZSksICAgICAgICAgIEFWX09QVF9UWVBFX1NUUklORywgeyAuc3RyID0gTlVMTCB9LCAg ICAgMCwgICAgICAgMCwgREVDIH0sCisgICAgeyAia2V5X2ZpbGUiLCAgICAgICAgICAgIlRoZSBv cHRpb25hbCBwcml2YXRlIGtleSBmaWxlIHBhdGggZm9yIERUTFMiLCAgICAgICAgICAgICAgT0ZG U0VUKGtleV9maWxlKSwgICAgICBBVl9PUFRfVFlQRV9TVFJJTkcsIHsgLnN0ciA9IE5VTEwgfSwg ICAgIDAsICAgICAgIDAsIERFQyB9LAorICAgIHsgTlVMTCB9LAorfTsKKworc3RhdGljIGNvbnN0 IEFWQ2xhc3Mgd2hpcF9tdXhlcl9jbGFzcyA9IHsKKyAgICAuY2xhc3NfbmFtZSA9ICJXSElQIG11 eGVyIiwKKyAgICAuaXRlbV9uYW1lICA9IGF2X2RlZmF1bHRfaXRlbV9uYW1lLAorICAgIC5vcHRp b24gICAgID0gb3B0aW9ucywKKyAgICAudmVyc2lvbiAgICA9IExJQkFWVVRJTF9WRVJTSU9OX0lO VCwKK307CisKK2NvbnN0IEZGT3V0cHV0Rm9ybWF0IGZmX3doaXBfbXV4ZXIgPSB7CisgICAgLnAu bmFtZSAgICAgICAgICAgICA9ICJ3aGlwIiwKKyAgICAucC5sb25nX25hbWUgICAgICAgID0gTlVM TF9JRl9DT05GSUdfU01BTEwoIldISVAoV2ViUlRDLUhUVFAgaW5nZXN0aW9uIHByb3RvY29sKSBt dXhlciIpLAorICAgIC5wLmF1ZGlvX2NvZGVjICAgICAgPSBBVl9DT0RFQ19JRF9PUFVTLAorICAg IC5wLnZpZGVvX2NvZGVjICAgICAgPSBBVl9DT0RFQ19JRF9IMjY0LAorICAgIC5wLmZsYWdzICAg ICAgICAgICAgPSBBVkZNVF9HTE9CQUxIRUFERVIgfCBBVkZNVF9OT0ZJTEUsCisgICAgLnAucHJp dl9jbGFzcyAgICAgICA9ICZ3aGlwX211eGVyX2NsYXNzLAorICAgIC5wcml2X2RhdGFfc2l6ZSAg ICAgPSBzaXplb2YoV0hJUENvbnRleHQpLAorICAgIC5pbml0ICAgICAgICAgICAgICAgPSB3aGlw X2luaXQsCisgICAgLndyaXRlX3BhY2tldCAgICAgICA9IHdoaXBfd3JpdGVfcGFja2V0LAorICAg IC5kZWluaXQgICAgICAgICAgICAgPSB3aGlwX2RlaW5pdCwKKyAgICAuY2hlY2tfYml0c3RyZWFt ICAgID0gd2hpcF9jaGVja19iaXRzdHJlYW0sCit9OwotLSAKMi40OS4wCgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpmZm1wZWctZGV2ZWwgbWFpbGluZyBs aXN0CmZmbXBlZy1kZXZlbEBmZm1wZWcub3JnCmh0dHBzOi8vZmZtcGVnLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2ZmbXBlZy1kZXZlbAoKVG8gdW5zdWJzY3JpYmUsIHZpc2l0IGxpbmsgYWJvdmUsIG9y IGVtYWlsCmZmbXBlZy1kZXZlbC1yZXF1ZXN0QGZmbXBlZy5vcmcgd2l0aCBzdWJqZWN0ICJ1bnN1 YnNjcmliZSIuCg==