2006-06-29T14:29:46Z Improvements to Python bindings The attached patch fixes a bunch of issues with the Python bindings to Subversion. These changes are required for the Subversion integration into Bazaar (http://bazaar-vcs.org/BzrSvn). Tested with 1.3.1-3ubuntu1. The changes are all pulled from Subversion trunk (which will become 1.5). Also available as a Bazaar branch from http://people.samba.org/bzr/jelmer/svn-1.3.1-python. Jelmer Vernooij FIXCOMMITTED CRITICAL Jelmer Vernooij Adeodato Simó Jelmer Vernooij 2006-06-29T14:29:46Z The attached patch fixes a bunch of issues with the Python bindings to Subversion. These changes are required for the Subversion integration into Bazaar (http://bazaar-vcs.org/BzrSvn). Tested with 1.3.1-3ubuntu1. The changes are all pulled from Subversion trunk (which will become 1.5). Also available as a Bazaar branch from http://people.samba.org/bzr/jelmer/svn-1.3.1-python. Jelmer Vernooij 2006-06-29T14:30:27Z See bug report. Jelmer Vernooij 2006-06-29T15:02:01Z I missed a patch. Included now. Jelmer Vernooij 2006-07-04T16:17:30Z Here's a short summary of the changes: Fix svn_client_info() Add some tests for the python ra bindings. Make the SWIG bindings throw an exception whenever a svn_ra_callbacks2_t argument is NULL, and allow the user to pass in a Python object for the callbacks. Make svn_ra_get_dir2 work in the python bindings by adding some typemaps. Fix for partial logs requested from old servers. Create typemaps for the input arguments of svn.ra.get_commit_editor2(). Add tests for Python bindings to svn_ra_get_commit_editor2() and svn_ra_do_update(). Add testsuite for the Python bindings to svn.wc. Don't crash when NULL revisions are passed to the python bindings. More test coverage for the svn.wc Python bindings. Improve test coverage of the Python bindings for svn.client. Fix Python bindings for svn.ra.get_file_revs(). Fix Python bindings for svn.wc.crawl_revisions2(). Allow the text_checksum argument to svn.delta.editor_invoke_close_file() to be None (as the API allows). Fix Python bindings to svn.wc.get_ignores(). Add test for Python bindings to svn.ra.get_locations(). Fix tests, wrap svn_commit_info. Jelmer Vernooij 2006-07-04T16:19:28Z Updated version of the patch (passes the testsuite now) Jelmer Vernooij 2006-07-04T16:20:18Z Updated rpath patch to match changes by python-fixes patch. Jelmer Vernooij 2006-07-04T18:57:53Z Also includes fixes for missing python reference counter increment on svn_stream_t. With this patch, the bzr-svn testsuite now passes on ubuntu. Jelmer Vernooij 2006-07-05T01:29:33Z Another update of the patch, this time updated to allow callbacks for opening temporary files as used by Subversions webdav ra implementation. PATCH Fix bunch of Python binding bugs. text/plain VGhpcyBwYXRjaCBmaXhlcyBhIGJ1bmNoIG9mIGlzc3VlcyB3aXRoIHRoZSBQeXRob24gYmluZGlu Z3MuIFRoZXNlIGNoYW5nZXMgYXJlIApyZXF1aXJlZCBmb3IgdGhlIFN1YnZlcnNpb24gaW50ZWdy YXRpb24gaW50byBCYXphYXIsIHNlZSAKaHR0cDovL2JhemFhci12Y3Mub3JnL0J6clN2bi4gCgpU aGUgY2hhbmdlcyBhcmUgYWxsIHB1bGxlZCBmcm9tIFN1YnZlcnNpb24gdHJ1bmsgKHdoaWNoIHdp bGwgYmVjb21lIDEuNSkuCgo9PT0gYWRkZWQgZmlsZSAnc3VidmVyc2lvbi9iaW5kaW5ncy9zd2ln L3B5dGhvbi90ZXN0cy9jbGllbnQucHknCi0tLSAvZGV2L251bGwJCisrKyBzdWJ2ZXJzaW9uL2Jp bmRpbmdzL3N3aWcvcHl0aG9uL3Rlc3RzL2NsaWVudC5weQkKQEAgLTAsMCArMSwxMTEgQEAKK2lt cG9ydCB1bml0dGVzdCwgb3MsIHRlbXBmaWxlLCB0eXBlcworCitmcm9tIHN2biBpbXBvcnQgY29y ZSwgcmVwb3MsIGZzLCBkZWx0YSwgY2xpZW50LCB3YworCitmcm9tIHRyYWMudmVyc2lvbmNvbnRy b2wudGVzdHMuc3ZuX2ZzIGltcG9ydCBTdWJ2ZXJzaW9uUmVwb3NpdG9yeVRlc3RTZXR1cCwgXAor ICBSRVBPU19QQVRICitmcm9tIHVybGxpYiBpbXBvcnQgcGF0aG5hbWUydXJsCisKK2NsYXNzIFN1 YnZlcnNpb25SZXBvc2l0b3J5VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAiIiJUZXN0 IGNhc2VzIGZvciB0aGUgU3VidmVyc2lvbiByZXBvc2l0b3J5IGxheWVyIiIiCisKKyAgZGVmIHNl dFVwKHNlbGYpOgorICAgICIiIkxvYWQgYSBTdWJ2ZXJzaW9uIHJlcG9zaXRvcnkiIiIKKyAgICBz ZWxmLmNsaWVudF9jdHggPSBjbGllbnQuc3ZuX2NsaWVudF9jcmVhdGVfY29udGV4dCgpCisKKyAg ICBwcm92aWRlcnMgPSBbCisgICAgICAgY2xpZW50LnN2bl9jbGllbnRfZ2V0X3NpbXBsZV9wcm92 aWRlcigpLAorICAgICAgIGNsaWVudC5zdm5fY2xpZW50X2dldF91c2VybmFtZV9wcm92aWRlcigp LAorICAgIF0KKworICAgIHNlbGYuY2xpZW50X2N0eC5hdXRoX2JhdG9uID0gY29yZS5zdm5fYXV0 aF9vcGVuKHByb3ZpZGVycykKKyAgICBzZWxmLnJlcG9zX3VybCA9ICJmaWxlOi8vIiArIHBhdGhu YW1lMnVybChSRVBPU19QQVRIKQorCisgIGRlZiBpbmZvX3JlY2VpdmVyKHNlbGYsIHBhdGgsIGlu Zm8sIHBvb2wpOgorICAgICIiIlNxdWlycmVsIGF3YXkgdGhlIG91dHB1dCBmcm9tICdzdm4gaW5m bycgc28gdGhhdCB0aGUgdW5pdCB0ZXN0cworICAgICAgIGNhbiBnZXQgYXQgdGhlbS4iIiIKKyAg ICBzZWxmLnBhdGggPSBwYXRoCisgICAgc2VsZi5pbmZvID0gaW5mbworCisgIGRlZiB0ZXN0X2No ZWNrb3V0KHNlbGYpOgorICAgICIiIlRlc3Qgc3ZuX2NsaWVudF9jaGVja291dDIuIiIiCisKKyAg ICByZXYgPSBjb3JlLnN2bl9vcHRfcmV2aXNpb25fdCgpCisgICAgcmV2LmtpbmQgPSBjb3JlLnN2 bl9vcHRfcmV2aXNpb25faGVhZAorCisgICAgcGF0aCA9IG9zLnBhdGguam9pbih0ZW1wZmlsZS5n ZXR0ZW1wZGlyKCksICdjaGVja291dCcpCisKKyAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVy cm9yLCBjbGllbnQuY2hlY2tvdXQyLCAKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJlcG9z X3VybCwgcGF0aCwgTm9uZSwgTm9uZSwgVHJ1ZSwgVHJ1ZSwgCisgICAgICAgICAgICAgICAgICAg ICAgc2VsZi5jbGllbnRfY3R4KQorCisgICAgY2xpZW50LmNoZWNrb3V0MihzZWxmLnJlcG9zX3Vy bCwgcGF0aCwgcmV2LCByZXYsIFRydWUsIFRydWUsIAorICAgICAgICAgICAgc2VsZi5jbGllbnRf Y3R4KQorCisgIGRlZiB0ZXN0X2luZm8oc2VsZik6CisgICAgIiIiVGVzdCBzY29wZSBvZiBnZXRf bG9ncyBjYWxsYmFja3MiIiIKKworICAgICMgUnVuIGluZm8KKyAgICByZXZ0ID0gY29yZS5zdm5f b3B0X3JldmlzaW9uX3QoKQorICAgIHJldnQua2luZCA9IGNvcmUuc3ZuX29wdF9yZXZpc2lvbl9o ZWFkCisgICAgcmVwb3NfdXJsID0gImZpbGU6Ly8iICsgcGF0aG5hbWUydXJsKFJFUE9TX1BBVEgp CisgICAgY2xpZW50LmluZm8ocmVwb3NfdXJsLCByZXZ0LCByZXZ0LCBzZWxmLmluZm9fcmVjZWl2 ZXIsCisgICAgICAgICAgICAgICAgRmFsc2UsIHNlbGYuY2xpZW50X2N0eCkKKworICAgICMgQ2hl Y2sgb3V0cHV0IGZyb20gcnVubmluZyBpbmZvLiBUaGlzIGFsc28gc2VydmVzIHRvIHZlcmlmeSB0 aGF0CisgICAgIyB0aGUgaW50ZXJuYWwgJ2luZm8nIG9iamVjdCBpcyBzdGlsbCB2YWxpZAorICAg IHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5wYXRoLCBvcy5wYXRoLmJhc2VuYW1lKFJFUE9TX1BBVEgp KQorICAgIHNlbGYuaW5mby5hc3NlcnRfdmFsaWQoKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2Vs Zi5pbmZvLlVSTCwgcmVwb3NfdXJsKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5pbmZvLnJl cG9zX3Jvb3RfVVJMLCByZXBvc191cmwpCisKKworICBkZWYgdGVzdF91dWlkX2Zyb21fdXJsKHNl bGYpOgorICAgICIiIlRlc3Qgc3ZuX2NsaWVudF91dWlkX2Zyb21fdXJsIG9uIGEgZmlsZTovLyBV UkwiIiIKKyAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZSgKKyAgICAgICAgICAgICAgICAgY2xp ZW50LnV1aWRfZnJvbV91cmwoc2VsZi5yZXBvc191cmwsIHNlbGYuY2xpZW50X2N0eCksCisgICAg ICAgICAgICAgICAgIHR5cGVzLlN0cmluZ1R5cGVzKSkKKworICBkZWYgdGVzdF91cmxfZnJvbV9w YXRoKHNlbGYpOgorICAgICIiIlRlc3Qgc3ZuX2NsaWVudF91cmxfZnJvbV9wYXRoIGZvciBhIGZp bGU6Ly8gVVJMIiIiCisgICAgc2VsZi5hc3NlcnRFcXVhbHMoY2xpZW50LnVybF9mcm9tX3BhdGgo c2VsZi5yZXBvc191cmwpLCBzZWxmLnJlcG9zX3VybCkKKworICAgIHJldiA9IGNvcmUuc3ZuX29w dF9yZXZpc2lvbl90KCkKKyAgICByZXYua2luZCA9IGNvcmUuc3ZuX29wdF9yZXZpc2lvbl9oZWFk CisKKyAgICBwYXRoID0gb3MucGF0aC5qb2luKHRlbXBmaWxlLmdldHRlbXBkaXIoKSwgJ3VybF9m cm9tX3BhdGgnKQorCisgICAgY2xpZW50LmNoZWNrb3V0MihzZWxmLnJlcG9zX3VybCwgcGF0aCwg cmV2LCByZXYsIFRydWUsIFRydWUsIAorICAgICAgICAgICAgICAgICAgICAgc2VsZi5jbGllbnRf Y3R4KQorCisgICAgc2VsZi5hc3NlcnRFcXVhbHMoY2xpZW50LnVybF9mcm9tX3BhdGgocGF0aCks IHNlbGYucmVwb3NfdXJsKQorCisgIGRlZiB0ZXN0X3V1aWRfZnJvbV9wYXRoKHNlbGYpOgorICAg ICIiIlRlc3Qgc3ZuX2NsaWVudF91dWlkX2Zyb21fcGF0aC4iIiIKKyAgICByZXYgPSBjb3JlLnN2 bl9vcHRfcmV2aXNpb25fdCgpCisgICAgcmV2LmtpbmQgPSBjb3JlLnN2bl9vcHRfcmV2aXNpb25f aGVhZAorCisgICAgcGF0aCA9IG9zLnBhdGguam9pbih0ZW1wZmlsZS5nZXR0ZW1wZGlyKCksICd1 dWlkX2Zyb21fcGF0aCcpCisKKyAgICBjbGllbnQuY2hlY2tvdXQyKHNlbGYucmVwb3NfdXJsLCBw YXRoLCByZXYsIHJldiwgVHJ1ZSwgVHJ1ZSwgCisgICAgICAgICAgICAgICAgICAgICBzZWxmLmNs aWVudF9jdHgpCisKKyAgICB3Y19hZG0gPSB3Yy5hZG1fb3BlbjMoTm9uZSwgcGF0aCwgRmFsc2Us IDAsIE5vbmUpCisKKyAgICBzZWxmLmFzc2VydEVxdWFscyhjbGllbnQudXVpZF9mcm9tX3BhdGgo cGF0aCwgd2NfYWRtLCBzZWxmLmNsaWVudF9jdHgpLCAKKyAgICAgICAgICAgICAgICAgICAgICBj bGllbnQudXVpZF9mcm9tX3VybChzZWxmLnJlcG9zX3VybCwgc2VsZi5jbGllbnRfY3R4KSkKKwor ICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKGNsaWVudC51dWlkX2Zyb21fcGF0aChwYXRoLCB3 Y19hZG0sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2xpZW50X2N0eCksIHR5 cGVzLlN0cmluZ1R5cGVzKSkKKworICBkZWYgdGVzdF9vcGVuX3JhX3Nlc3Npb24oc2VsZik6Cisg ICAgICAiIiJUZXN0IHN2bl9jbGllbnRfb3Blbl9yYV9zZXNzaW9uKCkuIiIiCisgICAgICBjbGll bnQub3Blbl9yYV9zZXNzaW9uKHNlbGYucmVwb3NfdXJsLCBzZWxmLmNsaWVudF9jdHgpCisKK2Rl ZiBzdWl0ZSgpOgorICAgIHJldHVybiB1bml0dGVzdC5tYWtlU3VpdGUoU3VidmVyc2lvblJlcG9z aXRvcnlUZXN0Q2FzZSwgJ3Rlc3QnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vp dGVDbGFzcz1TdWJ2ZXJzaW9uUmVwb3NpdG9yeVRlc3RTZXR1cCkKKworaWYgX19uYW1lX18gPT0g J19fbWFpbl9fJzoKKyAgICBydW5uZXIgPSB1bml0dGVzdC5UZXh0VGVzdFJ1bm5lcigpCisgICAg cnVubmVyLnJ1bihzdWl0ZSgpKQoKPT09IGFkZGVkIGZpbGUgJ3N1YnZlcnNpb24vYmluZGluZ3Mv c3dpZy9weXRob24vdGVzdHMvcmEucHknCi0tLSAvZGV2L251bGwJCisrKyBzdWJ2ZXJzaW9uL2Jp bmRpbmdzL3N3aWcvcHl0aG9uL3Rlc3RzL3JhLnB5CQpAQCAtMCwwICsxLDEyNyBAQAoraW1wb3J0 IHVuaXR0ZXN0LCBvcworCitmcm9tIHN2biBpbXBvcnQgY29yZSwgcmVwb3MsIGZzLCBkZWx0YSwg Y2xpZW50LCByYQorCitmcm9tIHRyYWMudmVyc2lvbmNvbnRyb2wudGVzdHMuc3ZuX2ZzIGltcG9y dCBTdWJ2ZXJzaW9uUmVwb3NpdG9yeVRlc3RTZXR1cCwgXAorICBSRVBPU19QQVRICitmcm9tIHVy bGxpYiBpbXBvcnQgcGF0aG5hbWUydXJsCisKK2NsYXNzIFN1YnZlcnNpb25SZXBvc2l0b3J5VGVz dENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAiIiJUZXN0IGNhc2VzIGZvciB0aGUgU3VidmVy c2lvbiByZXBvc2l0b3J5IGxheWVyIiIiCisKKyAgZGVmIHNldFVwKHNlbGYpOgorICAgICIiIkxv YWQgYSBTdWJ2ZXJzaW9uIHJlcG9zaXRvcnkiIiIKKworICAgIHJhLmluaXRpYWxpemUoKQorCisg ICAgc2VsZi5yZXBvc191cmwgPSAiZmlsZTovLyIgKyBwYXRobmFtZTJ1cmwoUkVQT1NfUEFUSCkK KyAgICAKKyAgICAjIE9wZW4gcmVwb3NpdG9yeSBkaXJlY3RseSBmb3IgY3Jvc3MtY2hlY2tpbmcK KyAgICBzZWxmLnJlcG9zID0gcmVwb3Mub3BlbihSRVBPU19QQVRIKQorICAgIHNlbGYuZnMgPSBy ZXBvcy5mcyhzZWxmLnJlcG9zKQorCisgICAgY2FsbGJhY2tzID0gcmEuY2FsbGJhY2tzMl90KCkK KworICAgIHNlbGYucmFfY3R4ID0gcmEub3BlbjIoc2VsZi5yZXBvc191cmwsIGNhbGxiYWNrcywg Tm9uZSwgTm9uZSkKKworICBkZWYgdGVzdF9nZXRfcmVwb3Nfcm9vdChzZWxmKToKKyAgICByb290 ID0gcmEuZ2V0X3JlcG9zX3Jvb3Qoc2VsZi5yYV9jdHgpCisgICAgc2VsZi5hc3NlcnRFcXVhbChy b290LHNlbGYucmVwb3NfdXJsKQorCisgIGRlZiB0ZXN0X2dldF91dWlkKHNlbGYpOgorICAgIHJh X3V1aWQgPSByYS5nZXRfdXVpZChzZWxmLnJhX2N0eCkKKyAgICBmc191dWlkID0gZnMuZ2V0X3V1 aWQoc2VsZi5mcykKKyAgICBzZWxmLmFzc2VydEVxdWFsKHJhX3V1aWQsZnNfdXVpZCkKKworICBk ZWYgdGVzdF9nZXRfbGFzdGVzdF9yZXZudW0oc2VsZik6CisgICAgcmFfcmV2bnVtID0gcmEuZ2V0 X2xhdGVzdF9yZXZudW0oc2VsZi5yYV9jdHgpCisgICAgZnNfcmV2bnVtID0gZnMueW91bmdlc3Rf cmV2KHNlbGYuZnMpCisgICAgc2VsZi5hc3NlcnRFcXVhbChyYV9yZXZudW0sZnNfcmV2bnVtKQor CisgIGRlZiB0ZXN0X2dldF9kaXIoc2VsZik6CisgICAgKGRpcmVudHMsXyxwcm9wcykgPSByYS5n ZXRfZGlyKHNlbGYucmFfY3R4LCAnJywgMSkKKyAgICBzZWxmLmFzc2VydFRydWUoZGlyZW50cy5o YXNfa2V5KCd0cnVuaycpKQorICAgIHNlbGYuYXNzZXJ0VHJ1ZShkaXJlbnRzLmhhc19rZXkoJ2Jy YW5jaGVzJykpCisgICAgc2VsZi5hc3NlcnRUcnVlKGRpcmVudHMuaGFzX2tleSgndGFncycpKQor ICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlyZW50c1sndHJ1bmsnXS5raW5kLCBjb3JlLnN2bl9ub2Rl X2RpcikKKyAgICBzZWxmLmFzc2VydEVxdWFsKGRpcmVudHNbJ2JyYW5jaGVzJ10ua2luZCwgY29y ZS5zdm5fbm9kZV9kaXIpCisgICAgc2VsZi5hc3NlcnRFcXVhbChkaXJlbnRzWyd0YWdzJ10ua2lu ZCwgY29yZS5zdm5fbm9kZV9kaXIpCisgICAgc2VsZi5hc3NlcnRUcnVlKHByb3BzLmhhc19rZXko Y29yZS5TVk5fUFJPUF9FTlRSWV9VVUlEKSkKKyAgICBzZWxmLmFzc2VydFRydWUocHJvcHMuaGFz X2tleShjb3JlLlNWTl9QUk9QX0VOVFJZX0xBU1RfQVVUSE9SKSkKKworICAgIChkaXJlbnRzLF8s XykgPSByYS5nZXRfZGlyKHNlbGYucmFfY3R4LCAndHJ1bmsnLCAxKQorCisgICAgc2VsZi5hc3Nl cnRFcXVhbChkaXJlbnRzLCB7fSkKKworICAgIChkaXJlbnRzLF8sXykgPSByYS5nZXRfZGlyKHNl bGYucmFfY3R4LCAndHJ1bmsnLCAxMCkKKworICAgIHNlbGYuYXNzZXJ0VHJ1ZShkaXJlbnRzLmhh c19rZXkoJ1JFQURNRTIudHh0JykpCisgICAgc2VsZi5hc3NlcnRFcXVhbChkaXJlbnRzWydSRUFE TUUyLnR4dCddLmtpbmQsY29yZS5zdm5fbm9kZV9maWxlKQorCisgIGRlZiB0ZXN0X2NvbW1pdChz ZWxmKToKKyAgICBkZWYgbXlfY2FsbGJhY2socmV2aXNpb24sIGRhdGUsIGF1dGhvciwgYmF0b24p OgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm8ucmV2aXNpb24sIGZzLnlvdW5nZXN0X3Jl dihzZWxmLmZzKSkKKworICAgIGVkaXRvciwgZWRpdF9iYXRvbiA9IHJhLmdldF9jb21taXRfZWRp dG9yKHNlbGYucmFfY3R4LCAiZm9vYmFyIiwgbXlfY2FsbGJhY2ssIE5vbmUsIEZhbHNlKQorICAg IHJvb3QgPSBkZWx0YS5lZGl0b3JfaW52b2tlX29wZW5fcm9vdChlZGl0b3IsIGVkaXRfYmF0b24s IDQpCisgICAgY2hpbGQgPSBkZWx0YS5lZGl0b3JfaW52b2tlX2FkZF9kaXJlY3RvcnkoZWRpdG9y LCAiYmxhIiwgcm9vdCwgTm9uZSwgMCkKKyAgICBkZWx0YS5lZGl0b3JfaW52b2tlX2Nsb3NlX2Vk aXQoZWRpdG9yLCBlZGl0X2JhdG9uKQorCisgIGRlZiB0ZXN0X2NvbW1pdChzZWxmKToKKyAgICBk ZWYgbXlfY2FsbGJhY2socmV2aXNpb24sIGRhdGUsIGF1dGhvcik6CisgICAgICAgIHNlbGYuYXNz ZXJ0RXF1YWwocmV2aXNpb24sIGZzLnlvdW5nZXN0X3JldihzZWxmLmZzKSkKKworICAgIGVkaXRv ciwgZWRpdF9iYXRvbiA9IHJhLmdldF9jb21taXRfZWRpdG9yKHNlbGYucmFfY3R4LCAiZm9vYmFy IiwgbXlfY2FsbGJhY2ssIE5vbmUsIEZhbHNlKQorICAgIHJvb3QgPSBkZWx0YS5lZGl0b3JfaW52 b2tlX29wZW5fcm9vdChlZGl0b3IsIGVkaXRfYmF0b24sIDQpCisgICAgY2hpbGQgPSBkZWx0YS5l ZGl0b3JfaW52b2tlX2FkZF9kaXJlY3RvcnkoZWRpdG9yLCAiYmxhaCIsIHJvb3QsIE5vbmUsIDAp CisgICAgZGVsdGEuZWRpdG9yX2ludm9rZV9jbG9zZV9lZGl0KGVkaXRvciwgZWRpdF9iYXRvbikK KworICBkZWYgdGVzdF9nZXRfbG9jYXRpb25zKHNlbGYpOgorICAgIGxvY2F0aW9ucyA9IHJhLmdl dF9sb2NhdGlvbnMoc2VsZi5yYV9jdHgsICIvdHJ1bmsvUkVBRE1FLnR4dCIsIDIsIHJhbmdlKDEs NSkpCisgICAgc2VsZi5hc3NlcnRFcXVhbChsb2NhdGlvbnMsIHsKKyAgICAgICAgMjogJy90cnVu ay9SRUFETUUudHh0JywgCisgICAgICAgIDM6ICcvdHJ1bmsvUkVBRE1FLnR4dCcsIAorICAgICAg ICA0OiAnL3RydW5rL1JFQURNRS50eHQnfSkKKworICBkZWYgdGVzdF9nZXRfZmlsZV9yZXZzKHNl bGYpOgorICAgIGRlZiByZXZfaGFuZGxlcihwYXRoLCByZXYsIHJldl9wcm9wcywgcHJvcF9kaWZm cywgcG9vbCk6CisgICAgICAgIHNlbGYuYXNzZXJ0XyhyZXYgPT0gMiBvciByZXYgPT0gMykKKyAg ICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXRoLCAiL3RydW5rL1JFQURNRS50eHQiKQorICAgICAg ICBpZiByZXYgPT0gMjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV2X3Byb3BzLCB7 CisgICAgICAgICAgICAgICdzdm46bG9nJzogJ0FkZGVkIFJFQURNRS4nLAorICAgICAgICAgICAg ICAnc3ZuOmF1dGhvcic6ICdqb2huJywKKyAgICAgICAgICAgICAgJ3N2bjpkYXRlJzogJzIwMDUt MDQtMDFUMTM6MTI6MTguMjE2MjY3WicKKyAgICAgICAgICAgIH0pCisgICAgICAgICAgICBzZWxm LmFzc2VydEVxdWFsKHByb3BfZGlmZnMsIHt9KQorICAgICAgICBlbGlmIHJldiA9PSAzOgorICAg ICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXZfcHJvcHMsIHsKKyAgICAgICAgICAgICAgJ3N2 bjpsb2cnOiAnRml4ZWQgUkVBRE1FLlxuJywKKyAgICAgICAgICAgICAgJ3N2bjphdXRob3InOiAn a2F0ZScsCisgICAgICAgICAgICAgICdzdm46ZGF0ZSc6ICcyMDA1LTA0LTAxVDEzOjI0OjU4LjIz NDY0M1onCisgICAgICAgICAgICB9KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm9w X2RpZmZzLCB7J3N2bjptaW1lLXR5cGUnOiAndGV4dC9wbGFpbicsICdzdm46ZW9sLXN0eWxlJzog J25hdGl2ZSd9KQorCisgICAgcmEuZ2V0X2ZpbGVfcmV2cyhzZWxmLnJhX2N0eCwgInRydW5rL1JF QURNRS50eHQiLCAwLCAxMCwgcmV2X2hhbmRsZXIpCisKKyAgZGVmIHRlc3RfdXBkYXRlKHNlbGYp OgorICAgIGNsYXNzIFRlc3RFZGl0b3IoZGVsdGEuRWRpdG9yKToKKyAgICAgICAgcGFzcworCisg ICAgZWRpdG9yID0gVGVzdEVkaXRvcigpCisKKyAgICBlX3B0ciwgZV9iYXRvbiA9IGRlbHRhLm1h a2VfZWRpdG9yKGVkaXRvcikKKyAgICAKKyAgICByZXBvcnRlciwgcmVwb3J0ZXJfYmF0b24gPSBy YS5kb191cGRhdGUoc2VsZi5yYV9jdHgsIDEwLCAiIiwgVHJ1ZSwgZV9wdHIsIGVfYmF0b24pCisK KyAgICByYS5yZXBvcnRlcjJfaW52b2tlX3NldF9wYXRoKHJlcG9ydGVyLCByZXBvcnRlcl9iYXRv biwgIiIsIDAsIFRydWUsIE5vbmUpCisKKyAgICByYS5yZXBvcnRlcjJfaW52b2tlX2ZpbmlzaF9y ZXBvcnQocmVwb3J0ZXIsIHJlcG9ydGVyX2JhdG9uKQorCitkZWYgc3VpdGUoKToKKyAgICByZXR1 cm4gdW5pdHRlc3QubWFrZVN1aXRlKFN1YnZlcnNpb25SZXBvc2l0b3J5VGVzdENhc2UsICd0ZXN0 JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1aXRlQ2xhc3M9U3VidmVyc2lvblJl cG9zaXRvcnlUZXN0U2V0dXApCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgcnVu bmVyID0gdW5pdHRlc3QuVGV4dFRlc3RSdW5uZXIoKQorICAgIHJ1bm5lci5ydW4oc3VpdGUoKSkK Cj09PSBhZGRlZCBmaWxlICdzdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcHl0aG9uL3Rlc3RzL3dj LnB5JwotLS0gL2Rldi9udWxsCQorKysgc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3B5dGhvbi90 ZXN0cy93Yy5weQkKQEAgLTAsMCArMSwxNzUgQEAKK2ltcG9ydCB1bml0dGVzdCwgb3MsIHRlbXBm aWxlCitpbXBvcnQgc2h1dGlsCisKK2Zyb20gc3ZuIGltcG9ydCBjb3JlLCByZXBvcywgd2MsIGNs aWVudAorZnJvbSBsaWJzdm4uY29yZSBpbXBvcnQgU3VidmVyc2lvbkV4Y2VwdGlvbgorCitmcm9t IHRyYWMudmVyc2lvbmNvbnRyb2wudGVzdHMuc3ZuX2ZzIGltcG9ydCBTdWJ2ZXJzaW9uUmVwb3Np dG9yeVRlc3RTZXR1cCwgXAorICBSRVBPU19QQVRICitmcm9tIHVybGxpYiBpbXBvcnQgcGF0aG5h bWUydXJsCisKK2NsYXNzIFN1YnZlcnNpb25SZXBvc2l0b3J5VGVzdENhc2UodW5pdHRlc3QuVGVz dENhc2UpOgorICAiIiJUZXN0IGNhc2VzIGZvciB0aGUgU3VidmVyc2lvbiB3b3JraW5nIGNvcHkg bGF5ZXIiIiIKKworICBkZWYgc2V0VXAoc2VsZik6CisgICAgIiIiTG9hZCBhIFN1YnZlcnNpb24g cmVwb3NpdG9yeSIiIgorCisgICAgc2VsZi5yZXBvc191cmwgPSAiZmlsZTovLyIgKyBwYXRobmFt ZTJ1cmwoUkVQT1NfUEFUSCkKKyAgICAKKyAgICAjIE9wZW4gcmVwb3NpdG9yeSBkaXJlY3RseSBm b3IgY3Jvc3MtY2hlY2tpbmcKKyAgICBzZWxmLnJlcG9zID0gcmVwb3Mub3BlbihSRVBPU19QQVRI KQorICAgIHNlbGYuZnMgPSByZXBvcy5mcyhzZWxmLnJlcG9zKQorCisgICAgc2VsZi5wYXRoID0g dGVtcGZpbGUubWt0ZW1wKCkKKworICAgIGNsaWVudF9jdHggPSBjbGllbnQuY3JlYXRlX2NvbnRl eHQoKQorICAgIAorICAgIHJldiA9IGNvcmUuc3ZuX29wdF9yZXZpc2lvbl90KCkKKyAgICByZXYu a2luZCA9IGNvcmUuc3ZuX29wdF9yZXZpc2lvbl9oZWFkCisKKyAgICBjbGllbnQuY2hlY2tvdXQy KHNlbGYucmVwb3NfdXJsLCBzZWxmLnBhdGgsIHJldiwgcmV2LCBUcnVlLCBUcnVlLCAKKyAgICAg ICAgICAgIGNsaWVudF9jdHgpCisKKyAgICBzZWxmLndjID0gd2MuYWRtX29wZW4zKE5vbmUsIHNl bGYucGF0aCwgVHJ1ZSwgLTEsIE5vbmUpCisKKyAgZGVmIHRlc3RfZW50cnkoc2VsZik6CisgICAg ICB3Y19lbnRyeSA9IHdjLmVudHJ5KHNlbGYucGF0aCwgc2VsZi53YywgVHJ1ZSkKKworICBkZWYg dGVzdF9sb2NrKHNlbGYpOgorICAgICAgbG9jayA9IHdjLmFkZF9sb2NrKHNlbGYucGF0aCwgY29y ZS5zdm5fbG9ja19jcmVhdGUoY29yZS5Qb29sKCkpLCBzZWxmLndjKQorICAgICAgc2VsZi5hc3Nl cnRFcXVhbChUcnVlLCB3Yy5hZG1fbG9ja2VkKHNlbGYud2MpKQorICAgICAgc2VsZi5hc3NlcnRF cXVhbChUcnVlLCB3Yy5sb2NrZWQoc2VsZi5wYXRoKSkKKyAgICAgIHdjLnJlbW92ZV9sb2NrKHNl bGYucGF0aCwgc2VsZi53YykKKworICBkZWYgdGVzdF92ZXJzaW9uKHNlbGYpOgorICAgICAgd2Mu dmVyc2lvbigpCisKKyAgZGVmIHRlc3RfYWNjZXNzX3BhdGgoc2VsZik6CisgICAgICBzZWxmLmFz c2VydEVxdWFsKHNlbGYucGF0aCwgd2MuYWRtX2FjY2Vzc19wYXRoKHNlbGYud2MpKQorCisgIGRl ZiB0ZXN0X2lzX2FkbV9kaXIoc2VsZik6CisgICAgICBzZWxmLmFzc2VydFRydWUod2MuaXNfYWRt X2RpcigiLnN2biIpKQorICAgICAgc2VsZi5hc3NlcnRGYWxzZSh3Yy5pc19hZG1fZGlyKCIuZm9v c3ZuIikpCisKKyAgZGVmIHRlc3RfZ2V0X2FkbV9kaXIoc2VsZik6CisgICAgICBzZWxmLmFzc2Vy dFRydWUoaXNpbnN0YW5jZSh3Yy5nZXRfYWRtX2RpcigpLCBiYXNlc3RyaW5nKSkKKworICBkZWYg dGVzdF9zZXRfYWRtX2RpcihzZWxmKToKKyAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN1YnZlcnNp b25FeGNlcHRpb24sIHdjLnNldF9hZG1fZGlyLCAiLmZvb2JhciIpCisgICAgICBzZWxmLmFzc2Vy dFRydWUod2MuaXNfYWRtX2RpcigiLnN2biIpKQorICAgICAgc2VsZi5hc3NlcnRGYWxzZSh3Yy5p c19hZG1fZGlyKCJfc3ZuIikpCisgICAgICBzZWxmLmFzc2VydEZhbHNlKHdjLmlzX2FkbV9kaXIo Ii5mb29iYXIiKSkKKyAgICAgIHdjLnNldF9hZG1fZGlyKCJfc3ZuIikKKyAgICAgIHNlbGYuYXNz ZXJ0VHJ1ZSh3Yy5pc19hZG1fZGlyKCJfc3ZuIikpCisgICAgICBzZWxmLmFzc2VydEVxdWFsKCJf c3ZuIiwgd2MuZ2V0X2FkbV9kaXIoKSkKKyAgICAgIHdjLnNldF9hZG1fZGlyKCIuc3ZuIikKKyAg ICAgIHNlbGYuYXNzZXJ0RmFsc2Uod2MuaXNfYWRtX2RpcigiX3N2biIpKQorICAgICAgc2VsZi5h c3NlcnRFcXVhbCgiLnN2biIsIHdjLmdldF9hZG1fZGlyKCkpCisKKyAgZGVmIHRlc3RfaW5pdF90 cmF2ZXJzYWxfaW5mbyhzZWxmKToKKyAgICAgIHdjLmluaXRfdHJhdmVyc2FsX2luZm8oKQorCisg IGRlZiB0ZXN0X2NyYXdsX3JldmlzaW9uczIoc2VsZik6CisgICAgICBpbmZvcyA9IFtdCisgICAg ICBzZXRfcGF0aHMgPSBbXQorCisgICAgICBkZWYgbm90aWZ5KGluZm8sIHBvb2wpOgorICAgICAg ICAgIGluZm9zLmFwcGVuZChpbmZvKQorCisgICAgICBjbGFzcyBNeVJlcG9ydGVyOgorICAgICAg ICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgc2VsZi5fZmluaXNoZWRfcmVw b3J0ID0gRmFsc2UKKworICAgICAgICAgIGRlZiBhYm9ydF9yZXBvcnQoc2VsZiwgcG9vbCk6Cisg ICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgIGRlZiBmaW5pc2hfcmVwb3J0KHNlbGYsIHBv b2wpOgorICAgICAgICAgICAgICBzZWxmLl9maW5pc2hlZF9yZXBvcnQgPSBUcnVlCisKKyAgICAg ICAgICBkZWYgc2V0X3BhdGgoc2VsZiwgcGF0aCwgcmV2aXNpb24sIHN0YXJ0X2VtcHR5LCBsb2Nr X3Rva2VuLCBwb29sKToKKyAgICAgICAgICAgICAgc2V0X3BhdGhzLmFwcGVuZChwYXRoKQorCisg ICAgICAgICAgZGVmIGxpbmtfcGF0aChzZWxmLCBwYXRoLCB1cmwsIHJldmlzaW9uLCBzdGFydF9l bXB0eSwgbG9ja190b2tlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBvb2wpOgorICAgICAg ICAgICAgICBwYXNzCisKKyAgICAgICAgICBkZWYgZGVsZXRlX3BhdGgoc2VsZiwgcGF0aCwgcG9v bCk6CisgICAgICAgICAgICAgIHBhc3MKKworICAgICAgIyBSZW1vdmUgdHJ1bmsvUkVBRE1FLnR4 dAorICAgICAgcmVhZG1lX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5wYXRoLCAidHJ1bmsiLCAi UkVBRE1FLnR4dCIpCisgICAgICBzZWxmLmFzc2VydF8ob3MucGF0aC5leGlzdHMocmVhZG1lX3Bh dGgpKQorICAgICAgb3MucmVtb3ZlKHJlYWRtZV9wYXRoKQorCisgICAgICAjIFJlc3RvcmUgdHJ1 bmsvUkVBRE1FLnR4dCB1c2luZyBjcmF3bF9yZXZpc2lvbjIKKyAgICAgIGluZm8gPSB3Yy5pbml0 X3RyYXZlcnNhbF9pbmZvKCkKKyAgICAgIHJlcG9ydGVyID0gTXlSZXBvcnRlcigpCisgICAgICB3 Yy5jcmF3bF9yZXZpc2lvbnMyKHNlbGYucGF0aCwgc2VsZi53YywgcmVwb3J0ZXIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgIFRydWUsIFRydWUsIEZhbHNlLCBub3RpZnksIGluZm8pCisKKyAg ICAgICMgQ2hlY2sgdGhhdCB0aGUgcmVwb3J0IGZpbmlzaGVkCisgICAgICBzZWxmLmFzc2VydF8o cmVwb3J0ZXIuX2ZpbmlzaGVkX3JlcG9ydCkKKyAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWycnXSwg c2V0X3BhdGhzKQorICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oaW5mb3MpKQorCisgICAg ICAjIENoZWNrIGNvbnRlbnQgb2YgaW5mb3Mgb2JqZWN0CisgICAgICBbaW5mb10gPSBpbmZvcwor ICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkbWVfcGF0aCwgaW5mby5wYXRoKQorICAgICAgc2Vs Zi5hc3NlcnRFcXVhbChjb3JlLnN2bl9ub2RlX2ZpbGUsIGluZm8ua2luZCkKKyAgICAgIHNlbGYu YXNzZXJ0RXF1YWwoLTEsIGluZm8ucmV2aXNpb24pCisKKyAgZGVmIHRlc3RfY3JlYXRlX25vdGlm eShzZWxmKToKKyAgICAgIHdjLmNyZWF0ZV9ub3RpZnkoc2VsZi5wYXRoLCB3Yy5ub3RpZnlfYWRk KQorCisgIGRlZiB0ZXN0X2NoZWNrX3djKHNlbGYpOgorICAgICAgc2VsZi5hc3NlcnRUcnVlKHdj LmNoZWNrX3djKHNlbGYucGF0aCkgPiAwKQorCisgIGRlZiB0ZXN0X2dldF9hbmNlc3RyeShzZWxm KToKKyAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW3NlbGYucmVwb3NfdXJsLCAxMl0sIAorICAgICAg ICAgICAgICAgICAgICAgICB3Yy5nZXRfYW5jZXN0cnkoc2VsZi5wYXRoLCBzZWxmLndjKSkKKwor ICBkZWYgdGVzdF9zdGF0dXMoc2VsZik6CisgICAgICB3Yy5zdGF0dXMyKHNlbGYucGF0aCwgc2Vs Zi53YykKKworICBkZWYgdGVzdF9pc19ub3JtYWxfcHJvcChzZWxmKToKKyAgICAgIHNlbGYuZmFp bElmKHdjLmlzX25vcm1hbF9wcm9wKCdzdm46d2M6Zm9vOmJhcicpKQorICAgICAgc2VsZi5mYWls SWYod2MuaXNfbm9ybWFsX3Byb3AoJ3N2bjplbnRyeTpmb286YmFyJykpCisgICAgICBzZWxmLmFz c2VydF8od2MuaXNfbm9ybWFsX3Byb3AoJ3N2bjpmb286YmFyJykpCisgICAgICBzZWxmLmFzc2Vy dF8od2MuaXNfbm9ybWFsX3Byb3AoJ2ZvcmVpZ246Zm9vOmJhcicpKQorCisgIGRlZiB0ZXN0X2lz X3djX3Byb3Aoc2VsZik6CisgICAgICBzZWxmLmFzc2VydF8od2MuaXNfd2NfcHJvcCgnc3ZuOndj OmZvbzpiYXInKSkKKyAgICAgIHNlbGYuZmFpbElmKHdjLmlzX3djX3Byb3AoJ3N2bjplbnRyeTpm b286YmFyJykpCisgICAgICBzZWxmLmZhaWxJZih3Yy5pc193Y19wcm9wKCdzdm46Zm9vOmJhcicp KQorICAgICAgc2VsZi5mYWlsSWYod2MuaXNfd2NfcHJvcCgnZm9yZWlnbjpmb286YmFyJykpCisK KyAgZGVmIHRlc3RfaXNfZW50cnlfcHJvcChzZWxmKToKKyAgICAgIHNlbGYuYXNzZXJ0Xyh3Yy5p c19lbnRyeV9wcm9wKCdzdm46ZW50cnk6Zm9vOmJhcicpKQorICAgICAgc2VsZi5mYWlsSWYod2Mu aXNfZW50cnlfcHJvcCgnc3ZuOndjOmZvbzpiYXInKSkKKyAgICAgIHNlbGYuZmFpbElmKHdjLmlz X2VudHJ5X3Byb3AoJ3N2bjpmb286YmFyJykpCisgICAgICBzZWxmLmZhaWxJZih3Yy5pc19lbnRy eV9wcm9wKCdmb3JlaWduOmZvbzpiYXInKSkKKworICBkZWYgdGVzdF9nZXRfcHJpc3RpbmVfY29w eV9wYXRoKHNlbGYpOgorICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgd2MuZ2V0X3By aXN0aW5lX2NvcHlfcGF0aChvcy5wYXRoLmpvaW4oc2VsZi5wYXRoLCAnZm9vJykpLAorICAgICAg ICBvcy5wYXRoLmpvaW4oc2VsZi5wYXRoLCB3Yy5nZXRfYWRtX2RpcigpLCAndGV4dC1iYXNlJywg J2Zvby5zdm4tYmFzZScpKQorCisgIGRlZiB0ZXN0X2dldF9pZ25vcmVzKHNlbGYpOgorICAgICAg c2VsZi5hc3NlcnRfKGlzaW5zdGFuY2Uod2MuZ2V0X2lnbm9yZXMoTm9uZSwgc2VsZi53YyksIGxp c3QpKQorCisgIGRlZiB0ZXN0X2VudHJpZXNfcmVhZChzZWxmKToKKyAgICAgIGVudHJpZXMgPSB3 Yy5lbnRyaWVzX3JlYWQoc2VsZi53YywgVHJ1ZSkKKyAgICAgICAgCisgICAgICBzZWxmLmFzc2Vy dEVxdWFsKFsnJywgJ3RhZ3MnLCAnYnJhbmNoZXMnLCAndHJ1bmsnXSwgZW50cmllcy5rZXlzKCkp CisKKyAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgd2MuYWRtX2Nsb3NlKHNlbGYud2MpCisg ICAgICBzaHV0aWwucm10cmVlKHNlbGYucGF0aCkKKworZGVmIHN1aXRlKCk6CisgICAgcmV0dXJu IHVuaXR0ZXN0Lm1ha2VTdWl0ZShTdWJ2ZXJzaW9uUmVwb3NpdG9yeVRlc3RDYXNlLCAndGVzdCcs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWl0ZUNsYXNzPVN1YnZlcnNpb25SZXBv c2l0b3J5VGVzdFNldHVwKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHJ1bm5l ciA9IHVuaXR0ZXN0LlRleHRUZXN0UnVubmVyKCkKKyAgICBydW5uZXIucnVuKHN1aXRlKCkpCgo9 PT0gbW9kaWZpZWQgZmlsZSAnc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL2luY2x1ZGUvYXByLnN3 ZycKLS0tIHN1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9pbmNsdWRlL2Fwci5zd2cJCisrKyBzdWJ2 ZXJzaW9uL2JpbmRpbmdzL3N3aWcvaW5jbHVkZS9hcHIuc3dnCQpAQCAtMTQ2LDE0ICsxNDYsMjQg QEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGNyZWF0ZSBhbiBPVVRQVVQgYXJndW1lbnQgZGVm biBmb3IgYW4gYXByX2hhc2hfdCAqKiB3aGljaCBpcyBzdG9yaW5nCisgICBkaXJlbnQgdmFsdWVz CisqLworJXR5cGVtYXAocHl0aG9uLGluLG51bWlucHV0cz0wKSBhcHJfaGFzaF90ICoqRElSRU5U SEFTSCA9IGFwcl9oYXNoX3QgKipPVVRQVVQ7CisldHlwZW1hcChweXRob24sYXJnb3V0LGZyYWdt ZW50PSJ0X291dHB1dF9oZWxwZXIiKSBhcHJfaGFzaF90ICoqRElSRU5USEFTSCB7CisgICAgJHJl c3VsdCA9IHRfb3V0cHV0X2hlbHBlcigkcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3ZuX3N3aWdfcHlfY29udmVydF9oYXNoKCokMSwgCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1dJR1RZUEVfcF9zdm5fZGlyZW50 X3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgTlVMTCkpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgY3JlYXRlIGFuIE9VVFBVVCBh cmd1bWVudCBkZWZuIGZvciBhbiBhcHJfaGFzaF90ICoqIHdoaWNoIGlzIHN0b3JpbmcKICAgIHBy b3BlcnR5IHZhbHVlcwogKi8KIAogJXR5cGVtYXAocHl0aG9uLGluLG51bWlucHV0cz0wKSBhcHJf aGFzaF90ICoqUFJPUEhBU0ggPSBhcHJfaGFzaF90ICoqT1VUUFVUOwotJXR5cGVtYXAocHl0aG9u LGFyZ291dCkgYXByX2hhc2hfdCAqKlBST1BIQVNIIHsKLSAgICAvKiB0b3NzIHByaW9yIHJlc3Vs dCwgZ2V0IG5ldyByZXN1bHQgZnJvbSB0aGUgaGFzaCAqLwotICAgIFB5X0RFQ1JFRigkcmVzdWx0 KTsKLSAgICAkcmVzdWx0ID0gc3ZuX3N3aWdfcHlfcHJvcGhhc2hfdG9fZGljdCgqJDEpOworJXR5 cGVtYXAocHl0aG9uLGFyZ291dCxmcmFnbWVudD0idF9vdXRwdXRfaGVscGVyIikgYXByX2hhc2hf dCAqKlBST1BIQVNIIHsKKyAgICAkcmVzdWx0ID0gdF9vdXRwdXRfaGVscGVyKCRyZXN1bHQsIHN2 bl9zd2lnX3B5X3Byb3BoYXNoX3RvX2RpY3QoKiQxKSk7CiB9CiAKICV0eXBlbWFwKHBlcmw1LGlu LG51bWlucHV0cz0wKSBhcHJfaGFzaF90ICoqUFJPUEhBU0ggPSBhcHJfaGFzaF90ICoqT1VUUFVU OwoKPT09IG1vZGlmaWVkIGZpbGUgJ3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9pbmNsdWRlL3By b3h5X2Fwci5zd2cnCi0tLSBzdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvaW5jbHVkZS9wcm94eV9h cHIuc3dnCQorKysgc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL2luY2x1ZGUvcHJveHlfYXByLnN3 ZwkKQEAgLTExMiw2ICsxMTIsMjggQEAKICAgICAgICAgICBkZWwgc2VsZi5fcGFyZW50X3Bvb2wK ICAgICAgICAgaWYgaGFzYXR0cihzZWxmLCAiX2lzX3ZhbGlkIik6CiAgICAgICAgICAgZGVsIHNl bGYuX2lzX3ZhbGlkCisgICAgICAgIAorICAgICAgICAjIENsZWFyIG91dCBhbnkgcG9vbC1vd25l ZCByZWZlcmVuY2VzIGluc2VydGVkIGJ5IHR5cGVtYXBzCisgICAgICAgIGlmIGhhc2F0dHIoc2Vs ZiwgIl9vd25lZF9yZWZzIik6CisgICAgICAgICAgZGVsIHNlbGYuX293bmVkX3JlZnMKKworICAg ICAgZGVmIF9hZGRfb3duZWRfcmVmKHNlbGYsIHJlZik6CisgICAgICAgICIiIkFkZCBhIG5ldyAn b3duZWQnIHJlZmVyZW5jZSAtLSBpLmUuIGEgUHl0aG9uIG9iamVjdCBjb250YWluZWQgaW4gYSBD CisgICAgICAgICAgIHN0cnVjdHVyZSBhbGxvY2F0ZWQgaW4gdGhpcyBwb29sLiAgVXNlZCBieSB0 aGUgdHlwZW1hcHMgdG8gbWFuYWdlCisgICAgICAgICAgIHJlZmVyZW5jZSBjb3VudGluZyBzZW1h bnRpY3MuIiIiCisgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYsICJfb3duZWRfcmVmcyIpOgor ICAgICAgICAgIHNlbGYuX293bmVkX3JlZnMgPSB7fQorICAgICAgICBpZiBzZWxmLl9vd25lZF9y ZWZzLmhhc19rZXkocmVmKToKKyAgICAgICAgICBzZWxmLl9vd25lZF9yZWZzW3JlZl0gKz0gMQor ICAgICAgICBlbHNlOgorICAgICAgICAgIHNlbGYuX293bmVkX3JlZnNbcmVmXSA9IDEKKyAgICAg IAorICAgICAgZGVmIF9yZW1vdmVfb3duZWRfcmVmKHNlbGYsIHJlZik6CisgICAgICAgICIiIlJl bW92ZSBhbiBleGlzdGluZyAnb3duZWQnIHJlZmVyZW5jZS4gIEFsc28gdXNlZCBieSB0eXBlbWFw cy4iIiIKKyAgICAgICAgaWYgaGFzYXR0cihzZWxmLCAiX293bmVkX3JlZnMiKSBhbmQgc2VsZi5f b3duZWRfcmVmcy5oYXNfa2V5KHJlZik6CisgICAgICAgICAgc2VsZi5fb3duZWRfcmVmc1tyZWZd IC09IDEKKyAgICAgICAgICBpZiBzZWxmLl9vd25lZF9yZWZzW3JlZl0gPT0gMDoKKyAgICAgICAg ICAgIGRlbCBzZWxmLl9vd25lZF9yZWZzW3JlZl0KICAgCiAgICAgICBkZWYgX19kZWxfXyhzZWxm KToKICAgICAgICAgIiIiQXV0b21hdGljYWxseSBkZXN0cm95IG1lbW9yeSBwb29scywgaWYgbmVj ZXNzYXJ5IiIiCgo9PT0gbW9kaWZpZWQgZmlsZSAnc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL2lu Y2x1ZGUvc3ZuX3R5cGVzLnN3ZycKLS0tIHN1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9pbmNsdWRl L3N2bl90eXBlcy5zd2cJCisrKyBzdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvaW5jbHVkZS9zdm5f dHlwZXMuc3dnCQpAQCAtNDMwLDYgKzQzMCwxMiBAQAogICAkMiA9ICh2b2lkICopc3ZuX3N3aWdf cmJfbWFrZV9iYXRvbigkaW5wdXQsIF9nbG9iYWxfc3ZuX3N3aWdfcmJfcG9vbCk7CiB9OwogCisl dHlwZW1hcChweXRob24sIGluKSAoc3ZuX2NvbW1pdF9jYWxsYmFjazJfdCBjYWxsYmFjaywgdm9p ZCAqY2FsbGJhY2tfYmF0b24pCit7CisgICQxID0gc3ZuX3N3aWdfcHlfY29tbWl0X2NhbGxiYWNr MjsKKyAgJDIgPSAodm9pZCAqKSRpbnB1dDsKK30KKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIENh bGxiYWNrOiBzdm5fY2FuY2VsX2Z1bmNfdAogKi8KQEAgLTQ5Myw2ICs0OTksMzMgQEAKICAgJDEg PSBzdm5fc3dpZ19yYl9tYWtlX3N0cmVhbSgkaW5wdXQpOwogfQogCisjaWZkZWYgU1dJR1BZVEhP TgorJXR5cGVtYXAoaW4pIChzdm5fY29tbWl0X2NhbGxiYWNrX3QgY2FsbGJhY2ssIHZvaWQgKmNh bGxiYWNrX2JhdG9uKQoreworICAkMSA9IHN2bl9zd2lnX3B5X2NvbW1pdF9jYWxsYmFjazsKKyAg JDIgPSAodm9pZCAqKSRpbnB1dDsKK30KKyNlbmRpZgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAg TWFwcGVyIHRvIGF1dG9tYXRpY2FsbHkgdHVybiBQeXRob24gb2JqZWN0cyBpbnRvIHZvaWQqIGJh dG9ucyBvbiBhc3NpZ25tZW50CisqLworCisjaWZkZWYgU1dJR1BZVEhPTgorJXR5cGVtYXAoaW4p IHZvaWQgKlBZX0FTX1ZPSUQgKFB5T2JqZWN0ICpuZXdSZWYpIHsKKyAgbmV3UmVmID0gJGlucHV0 OworICBpZiAoJGlucHV0ID09IFB5X05vbmUpIHsKKyAgICAkMSA9IG5ld1JlZiA9IE5VTEw7Cisg IH0gZWxzZSB7CisgICAgbmV3UmVmID0gJGlucHV0OworICAgICQxID0gKHZvaWQgKikkaW5wdXQ7 CisgIH0KKyAgaWYgKHN2bl9zd2lnX3B5X3Bvb2xfc2V0X293bmVkX3JlZihvYmowLCAoUHlPYmpl Y3QgKilhcmcxLT4kMV9uYW1lLCBuZXdSZWYpKSB7CisgICAgU1dJR19mYWlsOworICB9Cit9Cisj ZW5kaWYKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIFdyYXAgdGhlIGRpZ2VzdCBvdXRwdXQgZm9y IGZ1bmN0aW9ucyBwb3B1bGF0aW5nIGRpZ2VzdHMuCiAqLwoKPT09IG1vZGlmaWVkIGZpbGUgJ3N1 YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vbGlic3ZuX3N3aWdfcHkvc3dpZ3V0aWxfcHku YycKLS0tIHN1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vbGlic3ZuX3N3aWdfcHkvc3dp Z3V0aWxfcHkuYwkKKysrIHN1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vbGlic3ZuX3N3 aWdfcHkvc3dpZ3V0aWxfcHkuYwkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxhcHJfcG9y dGFibGUuaD4KICNpbmNsdWRlIDxhcHJfdGhyZWFkX3Byb2MuaD4KIAorI2luY2x1ZGUgInN2bl9j bGllbnQuaCIKICNpbmNsdWRlICJzdm5fc3RyaW5nLmgiCiAjaW5jbHVkZSAic3ZuX29wdC5oIgog I2luY2x1ZGUgInN2bl9kZWx0YS5oIgpAQCAtNDg1LDYgKzQ4Niw1MSBAQAogICByZXR1cm4gY29u dmVydF9oYXNoKGhhc2gsIGNvbnZlcnRfc3ZuX3N0cmluZ190LCBOVUxMLCBOVUxMKTsKIH0KIAor c3RhdGljIFB5T2JqZWN0ICpwcm9wYXJyYXlfdG9fZGljdChjb25zdCBhcHJfYXJyYXlfaGVhZGVy X3QgKmFycmF5KQoreworICAgIFB5T2JqZWN0ICpkaWN0ID0gUHlEaWN0X05ldygpOworICAgIGlu dCBpOworCisgICAgaWYgKGRpY3QgPT0gTlVMTCkKKyAgICAgIHJldHVybiBOVUxMOworCisgICAg Zm9yIChpID0gMDsgaSA8IGFycmF5LT5uZWx0czsgKytpKQorICAgICAgeworICAgICAgICBzdm5f cHJvcF90IHByb3A7CisgICAgICAgIFB5T2JqZWN0ICpweV9rZXksICpweV92YWx1ZTsKKworICAg ICAgICBwcm9wID0gQVBSX0FSUkFZX0lEWChhcnJheSwgaSwgc3ZuX3Byb3BfdCk7CisKKyAgICAg ICAgcHlfa2V5ID0gUHlTdHJpbmdfRnJvbVN0cmluZyhwcm9wLm5hbWUpOworICAgICAgICBpZiAo cHlfa2V5ID09IE5VTEwpCisgICAgICAgICAgZ290byBlcnJvcjsKKworICAgICAgICBpZiAocHJv cC52YWx1ZSA9PSBOVUxMKQorICAgICAgICAgIHsKKyAgICAgICAgICAgICBweV92YWx1ZSA9IFB5 X05vbmU7CisgICAgICAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOworICAgICAgICAgIH0KKyAg ICAgICAgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICAgICBweV92YWx1ZSA9IFB5U3RyaW5n X0Zyb21TdHJpbmdBbmRTaXplKCh2b2lkICopcHJvcC52YWx1ZS0+ZGF0YSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3AudmFsdWUtPmxlbik7 CisgICAgICAgICAgICAgaWYgKHB5X3ZhbHVlID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQ eV9ERUNSRUYocHlfa2V5KTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAg ICAgIH0KKyAgICAgICAgICB9CisKKyAgICAgICAgUHlEaWN0X1NldEl0ZW0oZGljdCwgcHlfa2V5 LCBweV92YWx1ZSk7CisgICAgfQorCisgICAgcmV0dXJuIGRpY3Q7CisKKyAgZXJyb3I6CisgICAg UHlfREVDUkVGKGRpY3QpOworICAgIHJldHVybiBOVUxMOworCit9CisKIAogUHlPYmplY3QgKnN2 bl9zd2lnX3B5X2xvY2F0aW9uaGFzaF90b19kaWN0KGFwcl9oYXNoX3QgKmhhc2gpCiB7CkBAIC01 NTAsNiArNTk2LDkgQEAKIERFQ0xBUkVfU1dJR19DT05TVFJVQ1RPUihsb2NrLCBzdm5fbG9ja19k dXApCiBERUNMQVJFX1NXSUdfQ09OU1RSVUNUT1IoYXV0aF9zc2xfc2VydmVyX2NlcnRfaW5mbywK ICAgICBzdm5fYXV0aF9zc2xfc2VydmVyX2NlcnRfaW5mb19kdXApCitERUNMQVJFX1NXSUdfQ09O U1RSVUNUT1IoaW5mbywgc3ZuX2luZm9fZHVwKQorREVDTEFSRV9TV0lHX0NPTlNUUlVDVE9SKGNv bW1pdF9pbmZvLCBzdm5fY29tbWl0X2luZm9fZHVwKQorREVDTEFSRV9TV0lHX0NPTlNUUlVDVE9S KHdjX25vdGlmeSwgc3ZuX3djX2R1cF9ub3RpZnkpCiAKIHN0YXRpYyBQeU9iamVjdCAqY29udmVy dF9sb2dfY2hhbmdlZF9wYXRoKHZvaWQgKnZhbHVlLCB2b2lkICpjdHgsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqcHlfcG9vbCkKQEAgLTE1MDYs NiArMTU1NSw0MSBAQAogfQogCiAKK3ZvaWQgc3ZuX3N3aWdfcHlfbm90aWZ5X2Z1bmMyKHZvaWQg KmJhdG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3ZuX3djX25vdGlm eV90ICpub3RpZnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpw b29sKQoreworICBQeU9iamVjdCAqZnVuY3Rpb24gPSBiYXRvbjsKKyAgUHlPYmplY3QgKnJlc3Vs dDsKKyAgc3ZuX2Vycm9yX3QgKmVyciA9IFNWTl9OT19FUlJPUjsKKworICBpZiAoZnVuY3Rpb24g PT0gTlVMTCB8fCBmdW5jdGlvbiA9PSBQeV9Ob25lKQorICAgIHJldHVybjsKKworICBzdm5fc3dp Z19weV9hY3F1aXJlX3B5X2xvY2soKTsKKworICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxG dW5jdGlvbihmdW5jdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KGNoYXIgKikiKE8mTyYpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bWFrZV9vYl93Y19ub3RpZnksIG5vdGlmeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbWFrZV9vYl9wb29sLCBwb29sKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIg PSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAg ICAvKiBUaGUgY2FsbGJhY2sgc2hvdWxkbid0IGJlIHJldHVybmluZyBhbnl0aGluZy4gKi8KKyAg ICAgIGlmIChyZXN1bHQgIT0gUHlfTm9uZSkKKyAgICAgICAgZXJyID0gY2FsbGJhY2tfYmFkX3Jl dHVybl9lcnJvcigiTm90IE5vbmUiKTsKKyAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgIH0K KworICAvKiBPdXIgZXJyb3IgaGFzIG5vIHBsYWNlIHRvIGdvLiA6LSggKi8KKyAgaWYgKGVycikK KyAgICBzdm5fZXJyb3JfY2xlYXIoZXJyKTsKKworICBzdm5fc3dpZ19weV9yZWxlYXNlX3B5X2xv Y2soKTsKK30KKwogdm9pZCBzdm5fc3dpZ19weV9zdGF0dXNfZnVuYyh2b2lkICpiYXRvbiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGF0aCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3ZuX3djX3N0YXR1c190ICpzdGF0dXMpCkBAIC0xODE0LDYgKzE4 OTgsMzggQEAKICAgcmV0dXJuIGVycjsKIH0KIAorc3ZuX2Vycm9yX3QgKnN2bl9zd2lnX3B5X2lu Zm9fcmVjZWl2ZXJfZnVuYyh2b2lkICpiYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGF0aCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3ZuX2luZm9fdCAqaW5mbywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sK KyAgUHlPYmplY3QgKnJlY2VpdmVyID0gYmF0b247CisgIFB5T2JqZWN0ICpyZXN1bHQ7CisgIHN2 bl9lcnJvcl90ICplcnIgPSBTVk5fTk9fRVJST1I7CisgCisgIGlmICgocmVjZWl2ZXIgPT0gTlVM TCkgfHwgKHJlY2VpdmVyID09IFB5X05vbmUpKQorICAgIHJldHVybiBTVk5fTk9fRVJST1I7CisK KyAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7CisKKyAgaWYgKChyZXN1bHQgPSBQeU9i amVjdF9DYWxsRnVuY3Rpb24ocmVjZWl2ZXIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoY2hhciAqKSJzTyZPJiIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBwYXRoLCBtYWtlX29iX2luZm8sIGluZm8sCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG1ha2Vfb2JfcG9vbCwgcG9vbCkpID09IE5VTEwpCisgICAgewor ICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7CisgICAgfQorICBlbHNlCisg ICAgeworICAgICAgaWYgKHJlc3VsdCAhPSBQeV9Ob25lKQorICAgICAgICBlcnIgPSBjYWxsYmFj a19iYWRfcmV0dXJuX2Vycm9yKCJOb3QgTm9uZSIpOworICAgICAgUHlfREVDUkVGKHJlc3VsdCk7 CisgICAgfQorCisgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOworCisgIHJldHVybiBl cnI7Cit9CiAKIHN2bl9lcnJvcl90ICpzdm5fc3dpZ19weV9jbGllbnRfYmxhbWVfcmVjZWl2ZXJf ZnVuYyh2b2lkICpiYXRvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBhcHJfaW50NjRfdCBsaW5lX25vLApAQCAtMjEwOCwzICsyMjI0LDI5MSBA QAogICAqY3JlZCA9IGNyZWRzOwogICByZXR1cm4gZXJyOwogfQorCit2b2lkCitzdm5fc3dpZ19w eV9zZXR1cF9yYV9jYWxsYmFja3Moc3ZuX3JhX2NhbGxiYWNrczJfdCAqKmNhbGxiYWNrcywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoqYmF0b24sCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKnB5X2NhbGxiYWNrcywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKQoreworICBzdm5fZXJyb3JfdCAqZXJy ID0gc3ZuX3JhX2NyZWF0ZV9jYWxsYmFja3MoY2FsbGJhY2tzLCBwb29sKTsKKworICBpZiAoZXJy KQorICAgIHsKKyAgICAgIHN2bl9zd2lnX3B5X3N2bl9leGNlcHRpb24oZXJyKTsKKyAgICAgIHJl dHVybjsKKyAgICB9CisgIAorICAqYmF0b24gPSBweV9jYWxsYmFja3M7Cit9CisKK3N2bl9lcnJv cl90ICpzdm5fc3dpZ19weV9jb21taXRfY2FsbGJhY2syKGNvbnN0IHN2bl9jb21taXRfaW5mb190 ICpjb21taXRfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHZvaWQgKmJhdG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg YXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgUHlPYmplY3QgKnJlY2VpdmVyID0gYmF0b247CisgIFB5 T2JqZWN0ICpyZXN1bHQ7CisgIHN2bl9lcnJvcl90ICplcnIgPSBTVk5fTk9fRVJST1I7CisgCisg IGlmICgocmVjZWl2ZXIgPT0gTlVMTCkgfHwgKHJlY2VpdmVyID09IFB5X05vbmUpKQorICAgIHJl dHVybiBTVk5fTk9fRVJST1I7CisKKyAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7CisK KyAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24ocmVjZWl2ZXIsIAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJPJk8mIiwgCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vfb2JfY29tbWl0X2luZm8sIGNvbW1p dF9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX29iX3Bv b2wsIHBvb2wpKSA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlv bl9lcnJvcigpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGlmIChyZXN1bHQgIT0gUHlf Tm9uZSkKKyAgICAgICAgZXJyID0gY2FsbGJhY2tfYmFkX3JldHVybl9lcnJvcigiTm90IE5vbmUi KTsKKyAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgIH0KKworICBzdm5fc3dpZ19weV9yZWxl YXNlX3B5X2xvY2soKTsKKworICByZXR1cm4gZXJyOworfQorCitzdm5fZXJyb3JfdCAqc3ZuX3N3 aWdfcHlfcmFfZmlsZV9yZXZfaGFuZGxlcl9mdW5jKAorICAgICAgICAgICAgICAgICAgICB2b2lk ICpiYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGF0aCwKKyAgICAgICAg ICAgICAgICAgICAgc3ZuX3Jldm51bV90IHJldiwKKyAgICAgICAgICAgICAgICAgICAgYXByX2hh c2hfdCAqcmV2X3Byb3BzLAorICAgICAgICAgICAgICAgICAgICBzdm5fdHhkZWx0YV93aW5kb3df aGFuZGxlcl90ICpkZWx0YV9oYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICB2b2lkICoqZGVs dGFfYmF0b24sCisgICAgICAgICAgICAgICAgICAgIGFwcl9hcnJheV9oZWFkZXJfdCAqcHJvcF9k aWZmcywKKyAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgUHlPYmpl Y3QgKmhhbmRsZXIgPSBiYXRvbjsKKyAgUHlPYmplY3QgKnJlc3VsdCwgKnB5X3Jldl9wcm9wcyA9 IE5VTEwsICpweV9wcm9wX2RpZmZzID0gTlVMTDsKKyAgc3ZuX2Vycm9yX3QgKmVyciA9IFNWTl9O T19FUlJPUjsKKworICBpZiAoKGhhbmRsZXIgPT0gTlVMTCkgfHwgKGhhbmRsZXIgPT0gUHlfTm9u ZSkpCisgICAgcmV0dXJuIFNWTl9OT19FUlJPUjsKKworICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5 X2xvY2soKTsKKworICBweV9yZXZfcHJvcHMgPSBzdm5fc3dpZ19weV9wcm9waGFzaF90b19kaWN0 KHJldl9wcm9wcyk7CisgIGlmIChweV9yZXZfcHJvcHMgPT0gTlVMTCkKKyAgICB7CisgICAgICBl cnIgPSB0eXBlX2NvbnZlcnNpb25fZXJyb3IoImFwcl9oYXNoX3QgKiIpOworICAgICAgZ290byBl cnJvcjsKKyAgICB9CisKKyAgcHlfcHJvcF9kaWZmcyA9IHByb3BhcnJheV90b19kaWN0KHByb3Bf ZGlmZnMpOworCisgIGlmIChweV9wcm9wX2RpZmZzID09IE5VTEwpCisgICAgeworICAgICAgZXJy ID0gdHlwZV9jb252ZXJzaW9uX2Vycm9yKCJhcHJfYXJyYXlfaGVhZGVyX3QgKiIpOworICAgICAg Z290byBlcnJvcjsKKyAgICB9CisKKyAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rp b24oaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIg Kikic2xPT08mIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCwg cmV2LCBweV9yZXZfcHJvcHMsIHB5X3Byb3BfZGlmZnMsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG1ha2Vfb2JfcG9vbCwgcG9vbCkpID09IE5VTEwpCisgICAgeworICAg ICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7CisgICAgfQorICBlbHNlCisgICAg eworICAgICAgaWYgKHJlc3VsdCAhPSBQeV9Ob25lKQorICAgICAgICBlcnIgPSBjYWxsYmFja19i YWRfcmV0dXJuX2Vycm9yKCJOb3QgTm9uZSIpOworCisgICAgICAvKiBGSVhNRTogU3VwcG9ydCBy ZXR1cm5lZCBUeERlbHRhV2luZG93IG9iamVjdCBhbmQKKyAgICAgICAqIHNldCBkZWx0YV9oYW5k bGVyIGFuZCBkZWx0YV9iYXRvbiAqLworICAgICAgKmRlbHRhX2hhbmRsZXIgPSBOVUxMOworICAg ICAgKmRlbHRhX2JhdG9uID0gTlVMTDsKKworICAgICAgUHlfWERFQ1JFRihyZXN1bHQpOworICAg IH0KKworZXJyb3I6CisKKyAgUHlfWERFQ1JFRihweV9yZXZfcHJvcHMpOworICBQeV9YREVDUkVG KHB5X3Byb3BfZGlmZnMpOworCisgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOworCisg IHJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzdm5fZXJyb3JfdCAqcmVwb3J0ZXJfc2V0X3BhdGgo dm9pZCAqcmVwb3J0X2JhdG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh ciAqcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2bl9yZXZudW1fdCByZXZpc2lv biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2bl9ib29sZWFuX3Qgc3RhcnRfZW1wdHks CisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpsb2NrX3Rva2VuLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgc3ZuX2Vycm9y X3QgKmVyciA9IFNWTl9OT19FUlJPUjsKKyAgUHlPYmplY3QgKnB5X3JlcG9ydGVyID0gcmVwb3J0 X2JhdG9uLCAqcmVzdWx0OworCisgIGlmIChweV9yZXBvcnRlciA9PSBOVUxMIHx8IHB5X3JlcG9y dGVyID09IFB5X05vbmUpCisgICAgcmV0dXJuIFNWTl9OT19FUlJPUjsKKworICBzdm5fc3dpZ19w eV9hY3F1aXJlX3B5X2xvY2soKTsKKworICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxNZXRo b2QocHlfcmVwb3J0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hh ciAqKSJzZXRfcGF0aCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hh ciAqKSJzbGJzTyYiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCwg cmV2aXNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydF9lbXB0 eSwgbG9ja190b2tlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vf b2JfcG9vbCwgcG9vbCkpID09IE5VTEwpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfZXhj ZXB0aW9uX2Vycm9yKCk7CisgICAgfQorICBlbHNlIGlmIChyZXN1bHQgIT0gUHlfTm9uZSkKKyAg ICB7CisgICAgICBlcnIgPSBjYWxsYmFja19iYWRfcmV0dXJuX2Vycm9yKCJOb3QgTm9uZSIpOwor ICAgIH0KKworICBQeV9YREVDUkVGKHJlc3VsdCk7CisKKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9w eV9sb2NrKCk7CisKKyAgcmV0dXJuIGVycjsKK30KKworc3RhdGljIHN2bl9lcnJvcl90ICpyZXBv cnRlcl9kZWxldGVfcGF0aCh2b2lkICpyZXBvcnRfYmF0b24sCisgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgY2hhciAqcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29s X3QgKnBvb2wpCit7CisgIHN2bl9lcnJvcl90ICplcnIgPSBTVk5fTk9fRVJST1I7CisgIFB5T2Jq ZWN0ICpweV9yZXBvcnRlciA9IHJlcG9ydF9iYXRvbiwgKnJlc3VsdDsKKworICBpZiAocHlfcmVw b3J0ZXIgPT0gTlVMTCB8fCBweV9yZXBvcnRlciA9PSBQeV9Ob25lKQorICAgIHJldHVybiBTVk5f Tk9fRVJST1I7CisKKyAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7CisKKyAgaWYgKChy ZXN1bHQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKHB5X3JlcG9ydGVyLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikiZGVsZXRlX3BhdGgiLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikic08mIiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHBhdGgsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbWFrZV9vYl9wb29sLCBwb29sKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBj YWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICB9CisgIGVsc2UgaWYgKHJlc3VsdCAhPSBQ eV9Ob25lKQorICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2JhZF9yZXR1cm5fZXJyb3IoIk5v dCBOb25lIik7CisgICAgfQorCisgIFB5X1hERUNSRUYocmVzdWx0KTsKKworICBzdm5fc3dpZ19w eV9yZWxlYXNlX3B5X2xvY2soKTsKKworICByZXR1cm4gZXJyOworfQorICAgIAorc3RhdGljIHN2 bl9lcnJvcl90ICpyZXBvcnRlcl9saW5rX3BhdGgodm9pZCAqcmVwb3J0X2JhdG9uLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdGgsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgY2hhciAqdXJsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg IHN2bl9yZXZudW1fdCByZXZpc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdm5f Ym9vbGVhbl90IHN0YXJ0X2VtcHR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IGNoYXIgKmxvY2tfdG9rZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xf dCAqcG9vbCkKK3sKKyAgc3ZuX2Vycm9yX3QgKmVyciA9IFNWTl9OT19FUlJPUjsKKyAgUHlPYmpl Y3QgKnB5X3JlcG9ydGVyID0gcmVwb3J0X2JhdG9uLCAqcmVzdWx0OworCisgIGlmIChweV9yZXBv cnRlciA9PSBOVUxMIHx8IHB5X3JlcG9ydGVyID09IFB5X05vbmUpCisgICAgcmV0dXJuIFNWTl9O T19FUlJPUjsKKworICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xvY2soKTsKKworICBpZiAoKHJl c3VsdCA9IFB5T2JqZWN0X0NhbGxNZXRob2QocHlfcmVwb3J0ZXIsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJsaW5rX3BhdGgiLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikic3NsYnNPJiIsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBwYXRoLCB1cmwsIHJldmlzaW9uLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3RhcnRfZW1wdHksIGxvY2tfdG9rZW4sCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQor ICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgIH0KKyAg ZWxzZSBpZiAocmVzdWx0ICE9IFB5X05vbmUpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tf YmFkX3JldHVybl9lcnJvcigiTm90IE5vbmUiKTsKKyAgICB9CisKKyAgUHlfWERFQ1JFRihyZXN1 bHQpOworCisgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOworCisgIHJldHVybiBlcnI7 Cit9CisKK3N0YXRpYyBzdm5fZXJyb3JfdCAqcmVwb3J0ZXJfZmluaXNoX3JlcG9ydCh2b2lkICpy ZXBvcnRfYmF0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3Qg KnBvb2wpCit7CisgIHN2bl9lcnJvcl90ICplcnIgPSBTVk5fTk9fRVJST1I7CisKKyAgUHlPYmpl Y3QgKnB5X3JlcG9ydGVyID0gcmVwb3J0X2JhdG9uLCAqcmVzdWx0OworCisgIGlmIChweV9yZXBv cnRlciA9PSBOVUxMIHx8IHB5X3JlcG9ydGVyID09IFB5X05vbmUpCisgICAgcmV0dXJuIFNWTl9O T19FUlJPUjsKKworICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xvY2soKTsKKworICBpZiAoKHJl c3VsdCA9IFB5T2JqZWN0X0NhbGxNZXRob2QocHlfcmVwb3J0ZXIsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJmaW5pc2hfcmVwb3J0IiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopIk8mIiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG1ha2Vfb2JfcG9vbCwgcG9vbCkpID09IE5VTEwpCisgICAgewor ICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7CisgICAgfQorICBlbHNlIGlm IChyZXN1bHQgIT0gUHlfTm9uZSkKKyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFja19iYWRfcmV0 dXJuX2Vycm9yKCJOb3QgTm9uZSIpOworICAgIH0KKworICBQeV9YREVDUkVGKHJlc3VsdCk7CisK KyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7CisKKyAgcmV0dXJuIGVycjsKK30KKwor c3RhdGljIHN2bl9lcnJvcl90ICpyZXBvcnRlcl9hYm9ydF9yZXBvcnQodm9pZCAqcmVwb3J0X2Jh dG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpCit7 CisgIHN2bl9lcnJvcl90ICplcnIgPSBTVk5fTk9fRVJST1I7CisKKyAgUHlPYmplY3QgKnB5X3Jl cG9ydGVyID0gcmVwb3J0X2JhdG9uLCAqcmVzdWx0OworCisgIGlmIChweV9yZXBvcnRlciA9PSBO VUxMIHx8IHB5X3JlcG9ydGVyID09IFB5X05vbmUpCisgICAgcmV0dXJuIFNWTl9OT19FUlJPUjsK KworICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xvY2soKTsKKworICBpZiAoKHJlc3VsdCA9IFB5 T2JqZWN0X0NhbGxNZXRob2QocHlfcmVwb3J0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoY2hhciAqKSJhYm9ydF9yZXBvcnQiLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGNoYXIgKikiTyYiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbWFrZV9vYl9wb29sLCBwb29sKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIg PSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICB9CisgIGVsc2UgaWYgKHJlc3VsdCAh PSBQeV9Ob25lKQorICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2JhZF9yZXR1cm5fZXJyb3Io Ik5vdCBOb25lIik7CisgICAgfQorCisgIFB5X1hERUNSRUYocmVzdWx0KTsKKworICBzdm5fc3dp Z19weV9yZWxlYXNlX3B5X2xvY2soKTsKKworICByZXR1cm4gZXJyOworfQorCitjb25zdCBzdm5f cmFfcmVwb3J0ZXIyX3Qgc3dpZ19weV9yYV9yZXBvcnRlcjIgPSB7CisgICAgcmVwb3J0ZXJfc2V0 X3BhdGgsCisgICAgcmVwb3J0ZXJfZGVsZXRlX3BhdGgsCisgICAgcmVwb3J0ZXJfbGlua19wYXRo LAorICAgIHJlcG9ydGVyX2ZpbmlzaF9yZXBvcnQsCisgICAgcmVwb3J0ZXJfYWJvcnRfcmVwb3J0 Cit9OwoKPT09IG1vZGlmaWVkIGZpbGUgJ3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24v bGlic3ZuX3N3aWdfcHkvc3dpZ3V0aWxfcHkuaCcKLS0tIHN1YnZlcnNpb24vYmluZGluZ3Mvc3dp Zy9weXRob24vbGlic3ZuX3N3aWdfcHkvc3dpZ3V0aWxfcHkuaAkKKysrIHN1YnZlcnNpb24vYmlu ZGluZ3Mvc3dpZy9weXRob24vbGlic3ZuX3N3aWdfcHkvc3dpZ3V0aWxfcHkuaAkKQEAgLTE5OCw2 ICsxOTgsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX3djX25vdGlmeV9z dGF0ZV90IHByb3Bfc3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2bl9yZXZu dW1fdCByZXZpc2lvbik7CiAKK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAordm9pZCBzdm5fc3dp Z19weV9ub3RpZnlfZnVuYzIodm9pZCAqYmF0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBzdm5fd2Nfbm90aWZ5X3QgKm5vdGlmeSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpOworCiAvKiBhIHN0YXR1cyBmdW5jdGlvbiB0aGF0 IGV4ZWN1dGVzIGEgUHl0aG9uIGZ1bmN0aW9uIHRoYXQgaXMgcGFzc2VkIGluCiAgICB2aWEgdGhl IGJhdG9uIGFyZ3VtZW50ICovCiBTVk5fU1dJR19TV0lHVVRJTF9FWFBPUlQKQEAgLTI0OSw2ICsy NTQsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh ciAqbXNnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90 ICpwb29sKTsKIAorLyogdGh1bmtlZCBpbmZvIHJlY2VpdmVyIGZ1bmN0aW9uICovCitTVk5fU1dJ R19TV0lHVVRJTF9FWFBPUlQKK3N2bl9lcnJvcl90ICpzdm5fc3dpZ19weV9pbmZvX3JlY2VpdmVy X2Z1bmModm9pZCAqcHlfcmVjZWl2ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IHN2bl9pbmZvX3QgKmluZm8sCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpOworCiAvKiB0 aHVua2VkIGJsYW1lIHJlY2VpdmVyIGZ1bmN0aW9uICovCiBTVk5fU1dJR19TV0lHVVRJTF9FWFBP UlQKIHN2bl9lcnJvcl90ICpzdm5fc3dpZ19weV9jbGllbnRfYmxhbWVfcmVjZWl2ZXJfZnVuYyh2 b2lkICpiYXRvbiwKQEAgLTMwMyw2ICszMTUsMzEgQEAKICAgICBzdm5fYm9vbGVhbl90IG1heV9z YXZlLAogICAgIGFwcl9wb29sX3QgKnBvb2wpOwogCitTVk5fU1dJR19TV0lHVVRJTF9FWFBPUlQK K3ZvaWQKK3N2bl9zd2lnX3B5X3NldHVwX3JhX2NhbGxiYWNrcyhzdm5fcmFfY2FsbGJhY2tzMl90 ICoqY2FsbGJhY2tzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKipiYXRv biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqcHlfY2FsbGJhY2tz LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpOworU1ZO X1NXSUdfU1dJR1VUSUxfRVhQT1JUCitzdm5fZXJyb3JfdCAqc3ZuX3N3aWdfcHlfY29tbWl0X2Nh bGxiYWNrMihjb25zdCBzdm5fY29tbWl0X2luZm9fdCAqY29tbWl0X2luZm8sCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpiYXRvbiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpOworCitTVk5f U1dJR19TV0lHVVRJTF9FWFBPUlQKK3N2bl9lcnJvcl90ICpzdm5fc3dpZ19weV9yYV9maWxlX3Jl dl9oYW5kbGVyX2Z1bmMoCisgICAgICAgICAgICAgICAgICAgIHZvaWQgKmJhdG9uLAorICAgICAg ICAgICAgICAgICAgICBjb25zdCBjaGFyICpwYXRoLAorICAgICAgICAgICAgICAgICAgICBzdm5f cmV2bnVtX3QgcmV2LAorICAgICAgICAgICAgICAgICAgICBhcHJfaGFzaF90ICpyZXZfcHJvcHMs CisgICAgICAgICAgICAgICAgICAgIHN2bl90eGRlbHRhX3dpbmRvd19oYW5kbGVyX3QgKmRlbHRh X2hhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgIHZvaWQgKipkZWx0YV9iYXRvbiwKKyAgICAg ICAgICAgICAgICAgICAgYXByX2FycmF5X2hlYWRlcl90ICpwcm9wX2RpZmZzLAorICAgICAgICAg ICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKTsKKworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JU CitleHRlcm4gY29uc3Qgc3ZuX3JhX3JlcG9ydGVyMl90IHN3aWdfcHlfcmFfcmVwb3J0ZXIyOwor CiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLwoKPT09IG1v ZGlmaWVkIGZpbGUgJ3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vdGVzdHMvcnVuX2Fs bC5weScKLS0tIHN1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vdGVzdHMvcnVuX2FsbC5w eQkKKysrIHN1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vdGVzdHMvcnVuX2FsbC5weQkK QEAgLTEsNiArMSw2IEBACiBpbXBvcnQgc3lzLCBvcwogYmluZGlyID0gb3MucGF0aC5kaXJuYW1l KHN5cy5hcmd2WzBdKQotc3lzLnBhdGhbMDowXSA9IFsgb3MuZ2V0Y3dkKCksICIlcy8ubGlicyIg JSBvcy5nZXRjd2QoKSwgXAorc3lzLnBhdGhbMDowXSA9IFsgYmluZGlyLCBvcy5nZXRjd2QoKSwg IiVzLy5saWJzIiAlIG9zLmdldGN3ZCgpLCBcCiAgICAgICAgICAgICAgICAgICAiJXMvLi4iICUg YmluZGlyLCAiJXMvLi4vLmxpYnMiICUgYmluZGlyIF0KIAogIyBPU2VzIHdpdGhvdXQgUlBBVEgg c3VwcG9ydCBhcmUgZ29pbmcgdG8gaGF2ZSB0byBkbyB0aGluZ3MgaGVyZSB0byBtYWtlCkBAIC0x Nyw2ICsxNyw5IEBACiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCBwb29sCiBpbXBvcnQgcmVwb3Np dG9yeQoraW1wb3J0IGNsaWVudAoraW1wb3J0IHJhCitpbXBvcnQgd2MKIGltcG9ydCB0cmFjLnZl cnNpb25jb250cm9sLnRlc3RzCiAKICMgUnVuIGFsbCB0ZXN0cwpAQCAtMjQsNyArMjcsMTAgQEAK IGRlZiBzdWl0ZSgpOgogICAiIiJSdW4gYWxsIHRlc3RzIiIiCiAgIHN1aXRlID0gdW5pdHRlc3Qu VGVzdFN1aXRlKCkKKyAgc3VpdGUuYWRkVGVzdChjbGllbnQuc3VpdGUoKSkKICAgc3VpdGUuYWRk VGVzdChwb29sLnN1aXRlKCkpCisgIHN1aXRlLmFkZFRlc3QocmEuc3VpdGUoKSkKKyAgc3VpdGUu YWRkVGVzdCh3Yy5zdWl0ZSgpKQogICBzdWl0ZS5hZGRUZXN0KHJlcG9zaXRvcnkuc3VpdGUoKSkK ICAgc3VpdGUuYWRkVGVzdCh0cmFjLnZlcnNpb25jb250cm9sLnRlc3RzLnN1aXRlKCkpOwogICBy ZXR1cm4gc3VpdGUKCj09PSBtb2RpZmllZCBmaWxlICdzdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcv c3ZuX2NsaWVudC5pJwotLS0gc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3N2bl9jbGllbnQuaQkK KysrIHN1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9zdm5fY2xpZW50LmkJCkBAIC0yNSw2ICsyNSw3 IEBACiAjZW5kaWYKIAogJWluY2x1ZGUgdHlwZW1hcHMuaQorJWluY2x1ZGUgY29uc3RyYWludHMu aQogCiAlaW5jbHVkZSBzdm5fZ2xvYmFsLnN3ZwogJWltcG9ydCBjb3JlLmkKQEAgLTQ0LDYgKzQ1 LDExIEBACiAgIHN2bl9jbGllbnRfY3R4X3QgKioKIH07CiAKKyVhcHBseSBQb2ludGVyIE5PTk5V TEwgeyAKKyAgY29uc3Qgc3ZuX29wdF9yZXZpc2lvbl90ICpyZXZpc2lvbiwKKyAgY29uc3Qgc3Zu X29wdF9yZXZpc2lvbl90ICpwZWdfcmV2aXNpb24KK307CisKICVhcHBseSBjb25zdCBhcHJfYXJy YXlfaGVhZGVyX3QgKlNUUklOR0xJU1QgewogICAgIGNvbnN0IGFwcl9hcnJheV9oZWFkZXJfdCAq dGFyZ2V0cywKICAgICBjb25zdCBhcHJfYXJyYXlfaGVhZGVyX3QgKmRpZmZfb3B0aW9ucwpAQCAt NjYsNiArNzIsMTYgQEAKIAogI2lmZGVmIFNXSUdQWVRIT04KICVhcHBseSBzdm5fc3RyZWFtX3Qg KldSQVBQRURfU1RSRUFNIHsgc3ZuX3N0cmVhbV90ICogfTsKKworLyogbWVtYmVycyBvZiBzdm5f Y2xpZW50X2N0eF90ICovCislYXBwbHkgdm9pZCAqUFlfQVNfVk9JRCB7CisgICAgdm9pZCAqbm90 aWZ5X2JhdG9uLAorICAgIHZvaWQgKmxvZ19tc2dfYmF0b24sCisgICAgdm9pZCAqY2FuY2VsX2Jh dG9uLAorICAgIHZvaWQgKm5vdGlmeV9iYXRvbjIsCisgICAgdm9pZCAqbG9nX21zZ19iYXRvbjIs CisgICAgdm9pZCAqcHJvZ3Jlc3NfYmF0b24KK307CiAjZW5kaWYKIAogLyogLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KQEAgLTIwMCw2ICsyMTYsMTggQEAKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIENhbGxi YWNrOiBzdm5faW5mb19yZWNlaXZlcl90CisgICBzdm5fY2xpZW50X2luZm8oKQorKi8KKworJXR5 cGVtYXAocHl0aG9uLCBpbikgKHN2bl9pbmZvX3JlY2VpdmVyX3QgcmVjZWl2ZXIsIAorICAgICAg ICAgICAgICAgICAgICAgIHZvaWQgKnJlY2VpdmVyX2JhdG9uKSB7CisgICAgJDEgPSBzdm5fc3dp Z19weV9pbmZvX3JlY2VpdmVyX2Z1bmM7CisgICAgJDIgPSAodm9pZCAqKSRpbnB1dDsKK30KKwor CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQogICAgV2UgdXNlICdzdm5fd2Nfc3RhdHVzX3QgKicgaW4gc29t ZSBjdXN0b20gY29kZSwgYnV0IGl0IGlzbid0IGluIHRoZQogICAgQVBJIGFueXdoZXJlLiBUaHVz LCBTV0lHIGRvZXNuJ3QgZ2VuZXJhdGUgYSB0eXBlbWFwIGVudHJ5IGZvciBpdC4gYnkKICAgIGFk ZGluZyBhIHNpbXBsZSBkZWNsYXJhdGlvbiBoZXJlLCBTV0lHIHdpbGwgaW5zZXJ0IGEgbmFtZSBm b3IgaXQuCkBAIC00ODMsNiArNTExLDE1IEBACiAlaW5jbHVkZSBzdm5fdGltZV9oLnN3ZwogJWlu Y2x1ZGUgc3ZuX2NsaWVudF9oLnN3ZwogCisjaWZkZWYgU1dJR1BZVEhPTgorCisvKiBwcm92aWRl IFB5dGhvbiB3aXRoIGFjY2VzcyB0byBzb21lIHRodW5rcy4gKi8KKyVjb25zdGFudCBzdm5fY2Fu Y2VsX2Z1bmNfdCBzdm5fc3dpZ19weV9jYW5jZWxfZnVuYzsKKyVjb25zdGFudCBzdm5fY2xpZW50 X2dldF9jb21taXRfbG9nMl90IHN2bl9zd2lnX3B5X2dldF9jb21taXRfbG9nX2Z1bmM7CislY29u c3RhbnQgc3ZuX3djX25vdGlmeV9mdW5jMl90IHN2bl9zd2lnX3B5X25vdGlmeV9mdW5jOworCisj ZW5kaWYKKwogI2lmZGVmIFNXSUdSVUJZCiAlaW5saW5lICV7CiBzdGF0aWMgVkFMVUUKCj09PSBt b2RpZmllZCBmaWxlICdzdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvc3ZuX2RlbHRhLmknCi0tLSBz dWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvc3ZuX2RlbHRhLmkJCisrKyBzdWJ2ZXJzaW9uL2JpbmRp bmdzL3N3aWcvc3ZuX2RlbHRhLmkJCkBAIC00Nyw3ICs0Nyw4IEBACiAgICAgY29uc3QgY2hhciAq ZXJyb3JfaW5mbywKICAgICBjb25zdCBjaGFyICpjb3B5ZnJvbV9wYXRoLAogICAgIGNvbnN0IGNo YXIgKmNvcHlfcGF0aCwKLSAgICBjb25zdCBjaGFyICpiYXNlX2NoZWNrc3VtCisgICAgY29uc3Qg Y2hhciAqYmFzZV9jaGVja3N1bSwKKyAgICBjb25zdCBjaGFyICp0ZXh0X2NoZWNrc3VtCiB9Owog CiAjaWZkZWYgU1dJR1BZVEhPTgoKPT09IG1vZGlmaWVkIGZpbGUgJ3N1YnZlcnNpb24vYmluZGlu Z3Mvc3dpZy9zdm5fcmEuaScKLS0tIHN1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9zdm5fcmEuaQkK KysrIHN1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9zdm5fcmEuaQkKQEAgLTI1LDYgKzI1LDcgQEAK ICNlbmRpZgogCiAlaW5jbHVkZSB0eXBlbWFwcy5pCislaW5jbHVkZSBjb25zdHJhaW50cy5pCiAK ICVpbmNsdWRlIHN2bl9nbG9iYWwuc3dnCiAlaW1wb3J0IGFwci5zd2cKQEAgLTM5LDYgKzQwLDgg QEAKICVpZ25vcmUgc3ZuX3JhX2xvY2FsX2luaXQ7CiAlaWdub3JlIHN2bl9yYV9kYXZfaW5pdDsK IAorJWFwcGx5IFBvaW50ZXIgTk9OTlVMTCB7IHN2bl9yYV9jYWxsYmFja3MyX3QgKmNhbGxiYWNr cyB9OworCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgJWFwcGx5LWluZyBvZiB0eXBlbWFwcyBkZWZp bmVkIGVsc2V3aGVyZQogKi8KQEAgLTQ4LDEzICs1MSwxNiBAQAogICAgIGNvbnN0IHN2bl9yYV9y ZXBvcnRlcjJfdCAqKnJlcG9ydGVyLAogICAgIHZvaWQgKipyZXBvcnRfYmF0b24sCiAgICAgc3Zu X2RpcmVudF90ICoqZGlyZW50LAotICAgIHN2bl9sb2NrX3QgKipsb2NrCisgICAgc3ZuX2xvY2tf dCAqKmxvY2ssCisgICAgY29uc3Qgc3ZuX2RlbHRhX2VkaXRvcl90ICoqCiB9OwogCiAlYXBwbHkg YXByX2hhc2hfdCAqKlBST1BIQVNIIHsgYXByX2hhc2hfdCAqKnByb3BzIH07CislYXBwbHkgYXBy X2hhc2hfdCAqKkRJUkVOVEhBU0ggeyBhcHJfaGFzaF90ICoqZGlyZW50cyB9OwogCiAlYXBwbHkg Y29uc3QgY2hhciAqTUFZX0JFX05VTEwgewotICAgIGNvbnN0IGNoYXIgKmNvbW1lbnQKKyAgICBj b25zdCBjaGFyICpjb21tZW50LAorICAgIGNvbnN0IGNoYXIgKmxvY2tfdG9rZW4KIH07CiAKICVh cHBseSBhcHJfaGFzaF90ICpTVFJJTkdfVE9fU1RSSU5HIHsKQEAgLTExMiw2ICsxMTgsMTEgQEAK ICAgc3ZuX3N3aWdfcmJfc2V0dXBfcmFfY2FsbGJhY2tzKCYkMSwgJiQyLCAkaW5wdXQsIF9nbG9i YWxfcG9vbCk7CiB9CiAKKyV0eXBlbWFwKHB5dGhvbiwgaW4pIChzdm5fcmFfY2FsbGJhY2tzMl90 ICpjYWxsYmFja3MsIAorICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmNhbGxiYWNrX2JhdG9u KSB7CisgIHN2bl9zd2lnX3B5X3NldHVwX3JhX2NhbGxiYWNrcygmJDEsICYkMiwgJGlucHV0LCBf Z2xvYmFsX3Bvb2wpOworfQorCiAldHlwZW1hcChwZXJsNSwgaW4pIGFwcl9oYXNoX3QgKmNvbmZp ZyB7CiAgICAgJDEgPSBzdm5fc3dpZ19wbF9vYmpzX3RvX2hhc2hfYnlfbmFtZSAoJGlucHV0LCAi c3ZuX2NvbmZpZ190ICoiLAogCQkJCQkgICBfZ2xvYmFsX3Bvb2wpOwpAQCAtMTM0LDYgKzE0NSwy MiBAQAogICAkMSA9IHN2bl9zd2lnX3JiX2hhc2hfdG9fYXByX2hhc2hfcmV2bnVtKCRpbnB1dCwg X2dsb2JhbF9wb29sKTsKIH0KIAorI2lmZGVmIFNXSUdQWVRIT04KKyV0eXBlbWFwKGluKSAoc3Zu X3JhX2ZpbGVfcmV2X2hhbmRsZXJfdCBoYW5kbGVyLCB2b2lkICpoYW5kbGVyX2JhdG9uKQorewor ICAgJDEgPSBzdm5fc3dpZ19weV9yYV9maWxlX3Jldl9oYW5kbGVyX2Z1bmM7CisgICAkMiA9ICh2 b2lkICopJGlucHV0OworfQorI2VuZGlmCisKKyNpZmRlZiBTV0lHUFlUSE9OCisldHlwZW1hcChp bikgKGNvbnN0IHN2bl9yYV9yZXBvcnRlcjJfdCAqcmVwb3J0ZXIsIHZvaWQgKnJlcG9ydF9iYXRv bikKK3sKKyAgJDEgPSAoc3ZuX3JhX3JlcG9ydGVyMl90ICopJnN3aWdfcHlfcmFfcmVwb3J0ZXIy OworICAkMiA9ICh2b2lkICopJGlucHV0OworfQorI2VuZGlmCisKIC8qIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t ICovCiAKICV7Cgo9PT0gbW9kaWZpZWQgZmlsZSAnc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3N2 bl93Yy5pJwotLS0gc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3N2bl93Yy5pCQorKysgc3VidmVy c2lvbi9iaW5kaW5ncy9zd2lnL3N2bl93Yy5pCQpAQCAtMTkxLDYgKzE5MSwyMCBAQAogICAkMSA9 IHN2bl9zd2lnX3JiX2FycmF5X3RvX2Fwcl9hcnJheV9wcm9wKCRpbnB1dCwgcG9vbCk7CiB9CiAK KyNpZmRlZiBTV0lHUFlUSE9OCisldHlwZW1hcChpbiwgbnVtaW5wdXRzPTApCisgICAgIGFwcl9h cnJheV9oZWFkZXJfdCAqKnBhdHRlcm5zIChhcHJfYXJyYXlfaGVhZGVyX3QgKnRlbXApCit7Cisg ICQxID0gJnRlbXA7Cit9CisldHlwZW1hcChhcmdvdXQsIGZyYWdtZW50PSJ0X291dHB1dF9oZWxw ZXIiKQorICAgICBhcHJfYXJyYXlfaGVhZGVyX3QgKipwYXR0ZXJucworeworICAkcmVzdWx0ID0g dF9vdXRwdXRfaGVscGVyKCRyZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN2bl9z d2lnX3B5X2FycmF5X3RvX2xpc3QoKiQxKSk7Cit9CisjZW5kaWYKKwogLyogLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KICAgIENhbGxiYWNrOiBzdm5fd2Nfbm90aWZ5X2Z1bmNfdAogICAgc3ZuX2NsaWVudF9jdHhf dApAQCAtMjM3LDYgKzI1MSwxMSBAQAogICAkMiA9ICRpbnB1dDsgLyogb3VyIGZ1bmN0aW9uIGlz IHRoZSBiYXRvbi4gKi8KIH0KIAorJXR5cGVtYXAocHl0aG9uLGluKSAoc3ZuX3djX25vdGlmeV9m dW5jMl90IG5vdGlmeV9mdW5jLCB2b2lkICpub3RpZnlfYmF0b24pIHsKKyAgICQxID0gc3ZuX3N3 aWdfcHlfbm90aWZ5X2Z1bmMyOworICAgJDIgPSAkaW5wdXQ7IC8qIG91ciBmdW5jdGlvbiBpcyB0 aGUgYmF0b24uICovCit9CisKICV0eXBlbWFwKHBlcmw1LGluKSAoc3ZuX3djX3N0YXR1c19mdW5j X3Qgc3RhdHVzX2Z1bmMsIHZvaWQgKnN0YXR1c19iYXRvbikgewogICAkMSA9IHN2bl9zd2lnX3Bs X3N0YXR1c19mdW5jOwogICAkMiA9ICRpbnB1dDsgLyogb3VyIGZ1bmN0aW9uIGlzIHRoZSBiYXRv bi4gKi8KCj09PSBtb2RpZmllZCBmaWxlICdzdWJ2ZXJzaW9uL2xpYnN2bl9yYV9zdm4vY2xpZW50 LmMnCi0tLSBzdWJ2ZXJzaW9uL2xpYnN2bl9yYV9zdm4vY2xpZW50LmMJCisrKyBzdWJ2ZXJzaW9u L2xpYnN2bl9yYV9zdm4vY2xpZW50LmMJCkBAIC0xMTUxLDExICsxMTUxLDggQEAKICAgICB9CiAg IGFwcl9wb29sX2Rlc3Ryb3koc3VicG9vbCk7CiAKLSAgaWYgKG5yZWNlaXZlZCA8PSBsaW1pdCkK LSAgICB7Ci0gICAgICAvKiBSZWFkIHRoZSByZXNwb25zZS4gKi8KLSAgICAgIFNWTl9FUlIoc3Zu X3JhX3N2bl9yZWFkX2NtZF9yZXNwb25zZShjb25uLCBwb29sLCAiIikpOwotICAgIH0KKyAgLyog UmVhZCB0aGUgcmVzcG9uc2UuICovCisgIFNWTl9FUlIoc3ZuX3JhX3N2bl9yZWFkX2NtZF9yZXNw b25zZShjb25uLCBwb29sLCAiIikpOwogCiAgIHJldHVybiBTVk5fTk9fRVJST1I7CiB9Cgo= PATCH Python fixes (updated) text/plain VGhpcyBwYXRjaCBmaXhlcyBhIGJ1bmNoIG9mIGlzc3VlcyB3aXRoIHRoZSBQeXRob24gYmluZGlu Z3MuIFRoZXNlIGNoYW5nZXMgYXJlIApyZXF1aXJlZCBmb3IgdGhlIFN1YnZlcnNpb24gaW50ZWdy YXRpb24gaW50byBCYXphYXIsIHNlZSAKaHR0cDovL2JhemFhci12Y3Mub3JnL0J6clN2bi4gCgpU aGUgY2hhbmdlcyBhcmUgYWxsIHB1bGxlZCBmcm9tIFN1YnZlcnNpb24gdHJ1bmsgKHdoaWNoIHdp bGwgYmVjb21lIDEuNSkuCgo9PT0gYWRkZWQgZmlsZSAnc3VidmVyc2lvbi9iaW5kaW5ncy9zd2ln L3B5dGhvbi90ZXN0cy9jbGllbnQucHknCi0tLSAvZGV2L251bGwJCisrKyBzdWJ2ZXJzaW9uL2Jp bmRpbmdzL3N3aWcvcHl0aG9uL3Rlc3RzL2NsaWVudC5weQkKQEAgLTAsMCArMSwxMTEgQEAKK2lt cG9ydCB1bml0dGVzdCwgb3MsIHRlbXBmaWxlLCB0eXBlcworCitmcm9tIHN2biBpbXBvcnQgY29y ZSwgcmVwb3MsIGZzLCBkZWx0YSwgY2xpZW50LCB3YworCitmcm9tIHRyYWMudmVyc2lvbmNvbnRy b2wudGVzdHMuc3ZuX2ZzIGltcG9ydCBTdWJ2ZXJzaW9uUmVwb3NpdG9yeVRlc3RTZXR1cCwgXAor ICBSRVBPU19QQVRICitmcm9tIHVybGxpYiBpbXBvcnQgcGF0aG5hbWUydXJsCisKK2NsYXNzIFN1 YnZlcnNpb25SZXBvc2l0b3J5VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAiIiJUZXN0 IGNhc2VzIGZvciB0aGUgU3VidmVyc2lvbiByZXBvc2l0b3J5IGxheWVyIiIiCisKKyAgZGVmIHNl dFVwKHNlbGYpOgorICAgICIiIkxvYWQgYSBTdWJ2ZXJzaW9uIHJlcG9zaXRvcnkiIiIKKyAgICBz ZWxmLmNsaWVudF9jdHggPSBjbGllbnQuc3ZuX2NsaWVudF9jcmVhdGVfY29udGV4dCgpCisKKyAg ICBwcm92aWRlcnMgPSBbCisgICAgICAgY2xpZW50LnN2bl9jbGllbnRfZ2V0X3NpbXBsZV9wcm92 aWRlcigpLAorICAgICAgIGNsaWVudC5zdm5fY2xpZW50X2dldF91c2VybmFtZV9wcm92aWRlcigp LAorICAgIF0KKworICAgIHNlbGYuY2xpZW50X2N0eC5hdXRoX2JhdG9uID0gY29yZS5zdm5fYXV0 aF9vcGVuKHByb3ZpZGVycykKKyAgICBzZWxmLnJlcG9zX3VybCA9ICJmaWxlOi8vIiArIHBhdGhu YW1lMnVybChSRVBPU19QQVRIKQorCisgIGRlZiBpbmZvX3JlY2VpdmVyKHNlbGYsIHBhdGgsIGlu Zm8sIHBvb2wpOgorICAgICIiIlNxdWlycmVsIGF3YXkgdGhlIG91dHB1dCBmcm9tICdzdm4gaW5m bycgc28gdGhhdCB0aGUgdW5pdCB0ZXN0cworICAgICAgIGNhbiBnZXQgYXQgdGhlbS4iIiIKKyAg ICBzZWxmLnBhdGggPSBwYXRoCisgICAgc2VsZi5pbmZvID0gaW5mbworCisgIGRlZiB0ZXN0X2No ZWNrb3V0KHNlbGYpOgorICAgICIiIlRlc3Qgc3ZuX2NsaWVudF9jaGVja291dDIuIiIiCisKKyAg ICByZXYgPSBjb3JlLnN2bl9vcHRfcmV2aXNpb25fdCgpCisgICAgcmV2LmtpbmQgPSBjb3JlLnN2 bl9vcHRfcmV2aXNpb25faGVhZAorCisgICAgcGF0aCA9IG9zLnBhdGguam9pbih0ZW1wZmlsZS5n ZXR0ZW1wZGlyKCksICdjaGVja291dCcpCisKKyAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVy cm9yLCBjbGllbnQuY2hlY2tvdXQyLCAKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJlcG9z X3VybCwgcGF0aCwgTm9uZSwgTm9uZSwgVHJ1ZSwgVHJ1ZSwgCisgICAgICAgICAgICAgICAgICAg ICAgc2VsZi5jbGllbnRfY3R4KQorCisgICAgY2xpZW50LmNoZWNrb3V0MihzZWxmLnJlcG9zX3Vy bCwgcGF0aCwgcmV2LCByZXYsIFRydWUsIFRydWUsIAorICAgICAgICAgICAgc2VsZi5jbGllbnRf Y3R4KQorCisgIGRlZiB0ZXN0X2luZm8oc2VsZik6CisgICAgIiIiVGVzdCBzY29wZSBvZiBnZXRf bG9ncyBjYWxsYmFja3MiIiIKKworICAgICMgUnVuIGluZm8KKyAgICByZXZ0ID0gY29yZS5zdm5f b3B0X3JldmlzaW9uX3QoKQorICAgIHJldnQua2luZCA9IGNvcmUuc3ZuX29wdF9yZXZpc2lvbl9o ZWFkCisgICAgcmVwb3NfdXJsID0gImZpbGU6Ly8iICsgcGF0aG5hbWUydXJsKFJFUE9TX1BBVEgp CisgICAgY2xpZW50LmluZm8ocmVwb3NfdXJsLCByZXZ0LCByZXZ0LCBzZWxmLmluZm9fcmVjZWl2 ZXIsCisgICAgICAgICAgICAgICAgRmFsc2UsIHNlbGYuY2xpZW50X2N0eCkKKworICAgICMgQ2hl Y2sgb3V0cHV0IGZyb20gcnVubmluZyBpbmZvLiBUaGlzIGFsc28gc2VydmVzIHRvIHZlcmlmeSB0 aGF0CisgICAgIyB0aGUgaW50ZXJuYWwgJ2luZm8nIG9iamVjdCBpcyBzdGlsbCB2YWxpZAorICAg IHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5wYXRoLCBvcy5wYXRoLmJhc2VuYW1lKFJFUE9TX1BBVEgp KQorICAgIHNlbGYuaW5mby5hc3NlcnRfdmFsaWQoKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2Vs Zi5pbmZvLlVSTCwgcmVwb3NfdXJsKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5pbmZvLnJl cG9zX3Jvb3RfVVJMLCByZXBvc191cmwpCisKKworICBkZWYgdGVzdF91dWlkX2Zyb21fdXJsKHNl bGYpOgorICAgICIiIlRlc3Qgc3ZuX2NsaWVudF91dWlkX2Zyb21fdXJsIG9uIGEgZmlsZTovLyBV UkwiIiIKKyAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZSgKKyAgICAgICAgICAgICAgICAgY2xp ZW50LnV1aWRfZnJvbV91cmwoc2VsZi5yZXBvc191cmwsIHNlbGYuY2xpZW50X2N0eCksCisgICAg ICAgICAgICAgICAgIHR5cGVzLlN0cmluZ1R5cGVzKSkKKworICBkZWYgdGVzdF91cmxfZnJvbV9w YXRoKHNlbGYpOgorICAgICIiIlRlc3Qgc3ZuX2NsaWVudF91cmxfZnJvbV9wYXRoIGZvciBhIGZp bGU6Ly8gVVJMIiIiCisgICAgc2VsZi5hc3NlcnRFcXVhbHMoY2xpZW50LnVybF9mcm9tX3BhdGgo c2VsZi5yZXBvc191cmwpLCBzZWxmLnJlcG9zX3VybCkKKworICAgIHJldiA9IGNvcmUuc3ZuX29w dF9yZXZpc2lvbl90KCkKKyAgICByZXYua2luZCA9IGNvcmUuc3ZuX29wdF9yZXZpc2lvbl9oZWFk CisKKyAgICBwYXRoID0gb3MucGF0aC5qb2luKHRlbXBmaWxlLmdldHRlbXBkaXIoKSwgJ3VybF9m cm9tX3BhdGgnKQorCisgICAgY2xpZW50LmNoZWNrb3V0MihzZWxmLnJlcG9zX3VybCwgcGF0aCwg cmV2LCByZXYsIFRydWUsIFRydWUsIAorICAgICAgICAgICAgICAgICAgICAgc2VsZi5jbGllbnRf Y3R4KQorCisgICAgc2VsZi5hc3NlcnRFcXVhbHMoY2xpZW50LnVybF9mcm9tX3BhdGgocGF0aCks IHNlbGYucmVwb3NfdXJsKQorCisgIGRlZiB0ZXN0X3V1aWRfZnJvbV9wYXRoKHNlbGYpOgorICAg ICIiIlRlc3Qgc3ZuX2NsaWVudF91dWlkX2Zyb21fcGF0aC4iIiIKKyAgICByZXYgPSBjb3JlLnN2 bl9vcHRfcmV2aXNpb25fdCgpCisgICAgcmV2LmtpbmQgPSBjb3JlLnN2bl9vcHRfcmV2aXNpb25f aGVhZAorCisgICAgcGF0aCA9IG9zLnBhdGguam9pbih0ZW1wZmlsZS5nZXR0ZW1wZGlyKCksICd1 dWlkX2Zyb21fcGF0aCcpCisKKyAgICBjbGllbnQuY2hlY2tvdXQyKHNlbGYucmVwb3NfdXJsLCBw YXRoLCByZXYsIHJldiwgVHJ1ZSwgVHJ1ZSwgCisgICAgICAgICAgICAgICAgICAgICBzZWxmLmNs aWVudF9jdHgpCisKKyAgICB3Y19hZG0gPSB3Yy5hZG1fb3BlbjMoTm9uZSwgcGF0aCwgRmFsc2Us IDAsIE5vbmUpCisKKyAgICBzZWxmLmFzc2VydEVxdWFscyhjbGllbnQudXVpZF9mcm9tX3BhdGgo cGF0aCwgd2NfYWRtLCBzZWxmLmNsaWVudF9jdHgpLCAKKyAgICAgICAgICAgICAgICAgICAgICBj bGllbnQudXVpZF9mcm9tX3VybChzZWxmLnJlcG9zX3VybCwgc2VsZi5jbGllbnRfY3R4KSkKKwor ICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKGNsaWVudC51dWlkX2Zyb21fcGF0aChwYXRoLCB3 Y19hZG0sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2xpZW50X2N0eCksIHR5 cGVzLlN0cmluZ1R5cGVzKSkKKworICBkZWYgdGVzdF9vcGVuX3JhX3Nlc3Npb24oc2VsZik6Cisg ICAgICAiIiJUZXN0IHN2bl9jbGllbnRfb3Blbl9yYV9zZXNzaW9uKCkuIiIiCisgICAgICBjbGll bnQub3Blbl9yYV9zZXNzaW9uKHNlbGYucmVwb3NfdXJsLCBzZWxmLmNsaWVudF9jdHgpCisKK2Rl ZiBzdWl0ZSgpOgorICAgIHJldHVybiB1bml0dGVzdC5tYWtlU3VpdGUoU3VidmVyc2lvblJlcG9z aXRvcnlUZXN0Q2FzZSwgJ3Rlc3QnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vp dGVDbGFzcz1TdWJ2ZXJzaW9uUmVwb3NpdG9yeVRlc3RTZXR1cCkKKworaWYgX19uYW1lX18gPT0g J19fbWFpbl9fJzoKKyAgICBydW5uZXIgPSB1bml0dGVzdC5UZXh0VGVzdFJ1bm5lcigpCisgICAg cnVubmVyLnJ1bihzdWl0ZSgpKQoKPT09IGFkZGVkIGZpbGUgJ3N1YnZlcnNpb24vYmluZGluZ3Mv c3dpZy9weXRob24vdGVzdHMvcmEucHknCi0tLSAvZGV2L251bGwJCisrKyBzdWJ2ZXJzaW9uL2Jp bmRpbmdzL3N3aWcvcHl0aG9uL3Rlc3RzL3JhLnB5CQpAQCAtMCwwICsxLDEzNiBAQAoraW1wb3J0 IHVuaXR0ZXN0LCBvcworCitmcm9tIHN2biBpbXBvcnQgY29yZSwgcmVwb3MsIGZzLCBkZWx0YSwg Y2xpZW50LCByYQorCitmcm9tIHRyYWMudmVyc2lvbmNvbnRyb2wudGVzdHMuc3ZuX2ZzIGltcG9y dCBTdWJ2ZXJzaW9uUmVwb3NpdG9yeVRlc3RTZXR1cCwgXAorICBSRVBPU19QQVRICitmcm9tIHVy bGxpYiBpbXBvcnQgcGF0aG5hbWUydXJsCisKK2NsYXNzIFN1YnZlcnNpb25SZXBvc2l0b3J5VGVz dENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAiIiJUZXN0IGNhc2VzIGZvciB0aGUgU3VidmVy c2lvbiByZXBvc2l0b3J5IGxheWVyIiIiCisKKyAgZGVmIHNldFVwKHNlbGYpOgorICAgICIiIkxv YWQgYSBTdWJ2ZXJzaW9uIHJlcG9zaXRvcnkiIiIKKworICAgIHJhLmluaXRpYWxpemUoKQorCisg ICAgc2VsZi5yZXBvc191cmwgPSAiZmlsZTovLyIgKyBwYXRobmFtZTJ1cmwoUkVQT1NfUEFUSCkK KyAgICAKKyAgICAjIE9wZW4gcmVwb3NpdG9yeSBkaXJlY3RseSBmb3IgY3Jvc3MtY2hlY2tpbmcK KyAgICBzZWxmLnJlcG9zID0gcmVwb3Mub3BlbihSRVBPU19QQVRIKQorICAgIHNlbGYuZnMgPSBy ZXBvcy5mcyhzZWxmLnJlcG9zKQorCisgICAgY2FsbGJhY2tzID0gcmEuY2FsbGJhY2tzMl90KCkK KworICAgIHNlbGYucmFfY3R4ID0gcmEub3BlbjIoc2VsZi5yZXBvc191cmwsIGNhbGxiYWNrcywg Tm9uZSwgTm9uZSkKKworICBkZWYgdGVzdF9nZXRfcmVwb3Nfcm9vdChzZWxmKToKKyAgICByb290 ID0gcmEuZ2V0X3JlcG9zX3Jvb3Qoc2VsZi5yYV9jdHgpCisgICAgc2VsZi5hc3NlcnRFcXVhbChy b290LHNlbGYucmVwb3NfdXJsKQorCisgIGRlZiB0ZXN0X2dldF91dWlkKHNlbGYpOgorICAgIHJh X3V1aWQgPSByYS5nZXRfdXVpZChzZWxmLnJhX2N0eCkKKyAgICBmc191dWlkID0gZnMuZ2V0X3V1 aWQoc2VsZi5mcykKKyAgICBzZWxmLmFzc2VydEVxdWFsKHJhX3V1aWQsZnNfdXVpZCkKKworICBk ZWYgdGVzdF9nZXRfbGFzdGVzdF9yZXZudW0oc2VsZik6CisgICAgcmFfcmV2bnVtID0gcmEuZ2V0 X2xhdGVzdF9yZXZudW0oc2VsZi5yYV9jdHgpCisgICAgZnNfcmV2bnVtID0gZnMueW91bmdlc3Rf cmV2KHNlbGYuZnMpCisgICAgc2VsZi5hc3NlcnRFcXVhbChyYV9yZXZudW0sZnNfcmV2bnVtKQor CisgIGRlZiB0ZXN0X2dldF9kaXIoc2VsZik6CisgICAgKGRpcmVudHMsXyxwcm9wcykgPSByYS5n ZXRfZGlyKHNlbGYucmFfY3R4LCAnJywgMSkKKyAgICBzZWxmLmFzc2VydFRydWUoZGlyZW50cy5o YXNfa2V5KCd0cnVuaycpKQorICAgIHNlbGYuYXNzZXJ0VHJ1ZShkaXJlbnRzLmhhc19rZXkoJ2Jy YW5jaGVzJykpCisgICAgc2VsZi5hc3NlcnRUcnVlKGRpcmVudHMuaGFzX2tleSgndGFncycpKQor ICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlyZW50c1sndHJ1bmsnXS5raW5kLCBjb3JlLnN2bl9ub2Rl X2RpcikKKyAgICBzZWxmLmFzc2VydEVxdWFsKGRpcmVudHNbJ2JyYW5jaGVzJ10ua2luZCwgY29y ZS5zdm5fbm9kZV9kaXIpCisgICAgc2VsZi5hc3NlcnRFcXVhbChkaXJlbnRzWyd0YWdzJ10ua2lu ZCwgY29yZS5zdm5fbm9kZV9kaXIpCisgICAgc2VsZi5hc3NlcnRUcnVlKHByb3BzLmhhc19rZXko Y29yZS5TVk5fUFJPUF9FTlRSWV9VVUlEKSkKKyAgICBzZWxmLmFzc2VydFRydWUocHJvcHMuaGFz X2tleShjb3JlLlNWTl9QUk9QX0VOVFJZX0xBU1RfQVVUSE9SKSkKKworICAgIChkaXJlbnRzLF8s XykgPSByYS5nZXRfZGlyKHNlbGYucmFfY3R4LCAndHJ1bmsnLCAxKQorCisgICAgc2VsZi5hc3Nl cnRFcXVhbChkaXJlbnRzLCB7fSkKKworICAgIChkaXJlbnRzLF8sXykgPSByYS5nZXRfZGlyKHNl bGYucmFfY3R4LCAndHJ1bmsnLCAxMCkKKworICAgIHNlbGYuYXNzZXJ0VHJ1ZShkaXJlbnRzLmhh c19rZXkoJ1JFQURNRTIudHh0JykpCisgICAgc2VsZi5hc3NlcnRFcXVhbChkaXJlbnRzWydSRUFE TUUyLnR4dCddLmtpbmQsY29yZS5zdm5fbm9kZV9maWxlKQorCisgIGRlZiB0ZXN0X2NvbW1pdChz ZWxmKToKKyAgICBkZWYgbXlfY2FsbGJhY2socmV2aXNpb24sIGRhdGUsIGF1dGhvciwgYmF0b24p OgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm8ucmV2aXNpb24sIGZzLnlvdW5nZXN0X3Jl dihzZWxmLmZzKSkKKworICAgIGVkaXRvciwgZWRpdF9iYXRvbiA9IHJhLmdldF9jb21taXRfZWRp dG9yKHNlbGYucmFfY3R4LCAiZm9vYmFyIiwgbXlfY2FsbGJhY2ssIE5vbmUsIEZhbHNlKQorICAg IHJvb3QgPSBkZWx0YS5lZGl0b3JfaW52b2tlX29wZW5fcm9vdChlZGl0b3IsIGVkaXRfYmF0b24s IDQpCisgICAgY2hpbGQgPSBkZWx0YS5lZGl0b3JfaW52b2tlX2FkZF9kaXJlY3RvcnkoZWRpdG9y LCAiYmxhIiwgcm9vdCwgTm9uZSwgMCkKKyAgICBkZWx0YS5lZGl0b3JfaW52b2tlX2Nsb3NlX2Vk aXQoZWRpdG9yLCBlZGl0X2JhdG9uKQorCisgIGRlZiB0ZXN0X2NvbW1pdChzZWxmKToKKyAgICBk ZWYgbXlfY2FsbGJhY2socmV2aXNpb24sIGRhdGUsIGF1dGhvcik6CisgICAgICAgIHNlbGYuYXNz ZXJ0RXF1YWwocmV2aXNpb24sIGZzLnlvdW5nZXN0X3JldihzZWxmLmZzKSkKKworICAgIGVkaXRv ciwgZWRpdF9iYXRvbiA9IHJhLmdldF9jb21taXRfZWRpdG9yKHNlbGYucmFfY3R4LCAiZm9vYmFy IiwgbXlfY2FsbGJhY2ssIE5vbmUsIEZhbHNlKQorICAgIHJvb3QgPSBkZWx0YS5lZGl0b3JfaW52 b2tlX29wZW5fcm9vdChlZGl0b3IsIGVkaXRfYmF0b24sIDQpCisgICAgY2hpbGQgPSBkZWx0YS5l ZGl0b3JfaW52b2tlX2FkZF9kaXJlY3RvcnkoZWRpdG9yLCAiYmxhaCIsIHJvb3QsIE5vbmUsIDAp CisgICAgZGVsdGEuZWRpdG9yX2ludm9rZV9jbG9zZV9lZGl0KGVkaXRvciwgZWRpdF9iYXRvbikK KworICBkZWYgdGVzdF9jb21taXQoc2VsZik6CisgICAgZGVmIG15X2NhbGxiYWNrKHJldmlzaW9u LCBkYXRlLCBhdXRob3IpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldmlzaW9uLCBmcy55 b3VuZ2VzdF9yZXYoc2VsZi5mcykpCisKKyAgICBlZGl0b3IsIGVkaXRfYmF0b24gPSByYS5nZXRf Y29tbWl0X2VkaXRvcihzZWxmLnJhX2N0eCwgImZvb2JhciIsIG15X2NhbGxiYWNrLCBOb25lLCBG YWxzZSkKKyAgICByb290ID0gZGVsdGEuZWRpdG9yX2ludm9rZV9vcGVuX3Jvb3QoZWRpdG9yLCBl ZGl0X2JhdG9uLCA0KQorICAgIGNoaWxkID0gZGVsdGEuZWRpdG9yX2ludm9rZV9hZGRfZGlyZWN0 b3J5KGVkaXRvciwgImJsYWgiLCByb290LCBOb25lLCAwKQorICAgIGRlbHRhLmVkaXRvcl9pbnZv a2VfY2xvc2VfZWRpdChlZGl0b3IsIGVkaXRfYmF0b24pCisKKyAgZGVmIHRlc3RfZ2V0X2xvY2F0 aW9ucyhzZWxmKToKKyAgICBsb2NhdGlvbnMgPSByYS5nZXRfbG9jYXRpb25zKHNlbGYucmFfY3R4 LCAiL3RydW5rL1JFQURNRS50eHQiLCAyLCByYW5nZSgxLDUpKQorICAgIHNlbGYuYXNzZXJ0RXF1 YWwobG9jYXRpb25zLCB7CisgICAgICAgIDI6ICcvdHJ1bmsvUkVBRE1FLnR4dCcsIAorICAgICAg ICAzOiAnL3RydW5rL1JFQURNRS50eHQnLCAKKyAgICAgICAgNDogJy90cnVuay9SRUFETUUudHh0 J30pCisKKyAgZGVmIHRlc3RfZ2V0X2ZpbGVfcmV2cyhzZWxmKToKKyAgICBkZWYgcmV2X2hhbmRs ZXIocGF0aCwgcmV2LCByZXZfcHJvcHMsIHByb3BfZGlmZnMsIHBvb2wpOgorICAgICAgICBzZWxm LmFzc2VydF8ocmV2ID09IDIgb3IgcmV2ID09IDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo cGF0aCwgIi90cnVuay9SRUFETUUudHh0IikKKyAgICAgICAgaWYgcmV2ID09IDI6CisgICAgICAg ICAgICBzZWxmLmFzc2VydEVxdWFsKHJldl9wcm9wcywgeworICAgICAgICAgICAgICAnc3ZuOmxv Zyc6ICdBZGRlZCBSRUFETUUuJywKKyAgICAgICAgICAgICAgJ3N2bjphdXRob3InOiAnam9obics CisgICAgICAgICAgICAgICdzdm46ZGF0ZSc6ICcyMDA1LTA0LTAxVDEzOjEyOjE4LjIxNjI2N1on CisgICAgICAgICAgICB9KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm9wX2RpZmZz LCB7fSkKKyAgICAgICAgZWxpZiByZXYgPT0gMzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1 YWwocmV2X3Byb3BzLCB7CisgICAgICAgICAgICAgICdzdm46bG9nJzogJ0ZpeGVkIFJFQURNRS5c bicsCisgICAgICAgICAgICAgICdzdm46YXV0aG9yJzogJ2thdGUnLAorICAgICAgICAgICAgICAn c3ZuOmRhdGUnOiAnMjAwNS0wNC0wMVQxMzoyNDo1OC4yMzQ2NDNaJworICAgICAgICAgICAgfSkK KyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvcF9kaWZmcywgeydzdm46bWltZS10eXBl JzogJ3RleHQvcGxhaW4nLCAnc3ZuOmVvbC1zdHlsZSc6ICduYXRpdmUnfSkKKworICAgIHJhLmdl dF9maWxlX3JldnMoc2VsZi5yYV9jdHgsICJ0cnVuay9SRUFETUUudHh0IiwgMCwgMTAsIHJldl9o YW5kbGVyKQorCisgIGRlZiB0ZXN0X3VwZGF0ZShzZWxmKToKKyAgICBjbGFzcyBUZXN0RWRpdG9y KGRlbHRhLkVkaXRvcik6CisgICAgICAgIHBhc3MKKworICAgIGVkaXRvciA9IFRlc3RFZGl0b3Io KQorCisgICAgZV9wdHIsIGVfYmF0b24gPSBkZWx0YS5tYWtlX2VkaXRvcihlZGl0b3IpCisgICAg CisgICAgcmVwb3J0ZXIsIHJlcG9ydGVyX2JhdG9uID0gcmEuZG9fdXBkYXRlKHNlbGYucmFfY3R4 LCAxMCwgIiIsIFRydWUsIGVfcHRyLCBlX2JhdG9uKQorCisgICAgcmEucmVwb3J0ZXIyX2ludm9r ZV9zZXRfcGF0aChyZXBvcnRlciwgcmVwb3J0ZXJfYmF0b24sICIiLCAwLCBUcnVlLCBOb25lKQor CisgICAgcmEucmVwb3J0ZXIyX2ludm9rZV9maW5pc2hfcmVwb3J0KHJlcG9ydGVyLCByZXBvcnRl cl9iYXRvbikKKworZGVmIHN1aXRlKCk6CisgICAgcmV0dXJuIHVuaXR0ZXN0Lm1ha2VTdWl0ZShT dWJ2ZXJzaW9uUmVwb3NpdG9yeVRlc3RDYXNlLCAndGVzdCcsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzdWl0ZUNsYXNzPVN1YnZlcnNpb25SZXBvc2l0b3J5VGVzdFNldHVwKQorCitp ZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHJ1bm5lciA9IHVuaXR0ZXN0LlRleHRUZXN0 UnVubmVyKCkKKyAgICBydW5uZXIucnVuKHN1aXRlKCkpCgo9PT0gYWRkZWQgZmlsZSAnc3VidmVy c2lvbi9iaW5kaW5ncy9zd2lnL3B5dGhvbi90ZXN0cy93Yy5weScKLS0tIC9kZXYvbnVsbAkKKysr IHN1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vdGVzdHMvd2MucHkJCkBAIC0wLDAgKzEs MTc1IEBACitpbXBvcnQgdW5pdHRlc3QsIG9zLCB0ZW1wZmlsZQoraW1wb3J0IHNodXRpbAorCitm cm9tIHN2biBpbXBvcnQgY29yZSwgcmVwb3MsIHdjLCBjbGllbnQKK2Zyb20gbGlic3ZuLmNvcmUg aW1wb3J0IFN1YnZlcnNpb25FeGNlcHRpb24KKworZnJvbSB0cmFjLnZlcnNpb25jb250cm9sLnRl c3RzLnN2bl9mcyBpbXBvcnQgU3VidmVyc2lvblJlcG9zaXRvcnlUZXN0U2V0dXAsIFwKKyAgUkVQ T1NfUEFUSAorZnJvbSB1cmxsaWIgaW1wb3J0IHBhdGhuYW1lMnVybAorCitjbGFzcyBTdWJ2ZXJz aW9uUmVwb3NpdG9yeVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgIiIiVGVzdCBjYXNl cyBmb3IgdGhlIFN1YnZlcnNpb24gd29ya2luZyBjb3B5IGxheWVyIiIiCisKKyAgZGVmIHNldFVw KHNlbGYpOgorICAgICIiIkxvYWQgYSBTdWJ2ZXJzaW9uIHJlcG9zaXRvcnkiIiIKKworICAgIHNl bGYucmVwb3NfdXJsID0gImZpbGU6Ly8iICsgcGF0aG5hbWUydXJsKFJFUE9TX1BBVEgpCisgICAg CisgICAgIyBPcGVuIHJlcG9zaXRvcnkgZGlyZWN0bHkgZm9yIGNyb3NzLWNoZWNraW5nCisgICAg c2VsZi5yZXBvcyA9IHJlcG9zLm9wZW4oUkVQT1NfUEFUSCkKKyAgICBzZWxmLmZzID0gcmVwb3Mu ZnMoc2VsZi5yZXBvcykKKworICAgIHNlbGYucGF0aCA9IHRlbXBmaWxlLm1rdGVtcCgpCisKKyAg ICBjbGllbnRfY3R4ID0gY2xpZW50LmNyZWF0ZV9jb250ZXh0KCkKKyAgICAKKyAgICByZXYgPSBj b3JlLnN2bl9vcHRfcmV2aXNpb25fdCgpCisgICAgcmV2LmtpbmQgPSBjb3JlLnN2bl9vcHRfcmV2 aXNpb25faGVhZAorCisgICAgY2xpZW50LmNoZWNrb3V0MihzZWxmLnJlcG9zX3VybCwgc2VsZi5w YXRoLCByZXYsIHJldiwgVHJ1ZSwgVHJ1ZSwgCisgICAgICAgICAgICBjbGllbnRfY3R4KQorCisg ICAgc2VsZi53YyA9IHdjLmFkbV9vcGVuMyhOb25lLCBzZWxmLnBhdGgsIFRydWUsIC0xLCBOb25l KQorCisgIGRlZiB0ZXN0X2VudHJ5KHNlbGYpOgorICAgICAgd2NfZW50cnkgPSB3Yy5lbnRyeShz ZWxmLnBhdGgsIHNlbGYud2MsIFRydWUpCisKKyAgZGVmIHRlc3RfbG9jayhzZWxmKToKKyAgICAg IGxvY2sgPSB3Yy5hZGRfbG9jayhzZWxmLnBhdGgsIGNvcmUuc3ZuX2xvY2tfY3JlYXRlKGNvcmUu UG9vbCgpKSwgc2VsZi53YykKKyAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgd2MuYWRtX2xv Y2tlZChzZWxmLndjKSkKKyAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgd2MubG9ja2VkKHNl bGYucGF0aCkpCisgICAgICB3Yy5yZW1vdmVfbG9jayhzZWxmLnBhdGgsIHNlbGYud2MpCisKKyAg ZGVmIHRlc3RfdmVyc2lvbihzZWxmKToKKyAgICAgIHdjLnZlcnNpb24oKQorCisgIGRlZiB0ZXN0 X2FjY2Vzc19wYXRoKHNlbGYpOgorICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnBhdGgsIHdj LmFkbV9hY2Nlc3NfcGF0aChzZWxmLndjKSkKKworICBkZWYgdGVzdF9pc19hZG1fZGlyKHNlbGYp OgorICAgICAgc2VsZi5hc3NlcnRUcnVlKHdjLmlzX2FkbV9kaXIoIi5zdm4iKSkKKyAgICAgIHNl bGYuYXNzZXJ0RmFsc2Uod2MuaXNfYWRtX2RpcigiLmZvb3N2biIpKQorCisgIGRlZiB0ZXN0X2dl dF9hZG1fZGlyKHNlbGYpOgorICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uod2MuZ2V0 X2FkbV9kaXIoKSwgYmFzZXN0cmluZykpCisKKyAgZGVmIHRlc3Rfc2V0X2FkbV9kaXIoc2VsZik6 CisgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTdWJ2ZXJzaW9uRXhjZXB0aW9uLCB3Yy5zZXRfYWRt X2RpciwgIi5mb29iYXIiKQorICAgICAgc2VsZi5hc3NlcnRUcnVlKHdjLmlzX2FkbV9kaXIoIi5z dm4iKSkKKyAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uod2MuaXNfYWRtX2RpcigiX3N2biIpKQorICAg ICAgc2VsZi5hc3NlcnRGYWxzZSh3Yy5pc19hZG1fZGlyKCIuZm9vYmFyIikpCisgICAgICB3Yy5z ZXRfYWRtX2RpcigiX3N2biIpCisgICAgICBzZWxmLmFzc2VydFRydWUod2MuaXNfYWRtX2Rpcigi X3N2biIpKQorICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiX3N2biIsIHdjLmdldF9hZG1fZGlyKCkp CisgICAgICB3Yy5zZXRfYWRtX2RpcigiLnN2biIpCisgICAgICBzZWxmLmFzc2VydEZhbHNlKHdj LmlzX2FkbV9kaXIoIl9zdm4iKSkKKyAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIi5zdm4iLCB3Yy5n ZXRfYWRtX2RpcigpKQorCisgIGRlZiB0ZXN0X2luaXRfdHJhdmVyc2FsX2luZm8oc2VsZik6Cisg ICAgICB3Yy5pbml0X3RyYXZlcnNhbF9pbmZvKCkKKworICBkZWYgdGVzdF9jcmF3bF9yZXZpc2lv bnMyKHNlbGYpOgorICAgICAgaW5mb3MgPSBbXQorICAgICAgc2V0X3BhdGhzID0gW10KKworICAg ICAgZGVmIG5vdGlmeShpbmZvLCBwb29sKToKKyAgICAgICAgICBpbmZvcy5hcHBlbmQoaW5mbykK KworICAgICAgY2xhc3MgTXlSZXBvcnRlcjoKKyAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6 CisgICAgICAgICAgICAgIHNlbGYuX2ZpbmlzaGVkX3JlcG9ydCA9IEZhbHNlCisKKyAgICAgICAg ICBkZWYgYWJvcnRfcmVwb3J0KHNlbGYsIHBvb2wpOgorICAgICAgICAgICAgICBwYXNzCisKKyAg ICAgICAgICBkZWYgZmluaXNoX3JlcG9ydChzZWxmLCBwb29sKToKKyAgICAgICAgICAgICAgc2Vs Zi5fZmluaXNoZWRfcmVwb3J0ID0gVHJ1ZQorCisgICAgICAgICAgZGVmIHNldF9wYXRoKHNlbGYs IHBhdGgsIHJldmlzaW9uLCBzdGFydF9lbXB0eSwgbG9ja190b2tlbiwgcG9vbCk6CisgICAgICAg ICAgICAgIHNldF9wYXRocy5hcHBlbmQocGF0aCkKKworICAgICAgICAgIGRlZiBsaW5rX3BhdGgo c2VsZiwgcGF0aCwgdXJsLCByZXZpc2lvbiwgc3RhcnRfZW1wdHksIGxvY2tfdG9rZW4sCisgICAg ICAgICAgICAgICAgICAgICAgICBwb29sKToKKyAgICAgICAgICAgICAgcGFzcworCisgICAgICAg ICAgZGVmIGRlbGV0ZV9wYXRoKHNlbGYsIHBhdGgsIHBvb2wpOgorICAgICAgICAgICAgICBwYXNz CisKKyAgICAgICMgUmVtb3ZlIHRydW5rL1JFQURNRS50eHQKKyAgICAgIHJlYWRtZV9wYXRoID0g b3MucGF0aC5qb2luKHNlbGYucGF0aCwgInRydW5rIiwgIlJFQURNRS50eHQiKQorICAgICAgc2Vs Zi5hc3NlcnRfKG9zLnBhdGguZXhpc3RzKHJlYWRtZV9wYXRoKSkKKyAgICAgIG9zLnJlbW92ZShy ZWFkbWVfcGF0aCkKKworICAgICAgIyBSZXN0b3JlIHRydW5rL1JFQURNRS50eHQgdXNpbmcgY3Jh d2xfcmV2aXNpb24yCisgICAgICBpbmZvID0gd2MuaW5pdF90cmF2ZXJzYWxfaW5mbygpCisgICAg ICByZXBvcnRlciA9IE15UmVwb3J0ZXIoKQorICAgICAgd2MuY3Jhd2xfcmV2aXNpb25zMihzZWxm LnBhdGgsIHNlbGYud2MsIHJlcG9ydGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBUcnVl LCBUcnVlLCBGYWxzZSwgbm90aWZ5LCBpbmZvKQorCisgICAgICAjIENoZWNrIHRoYXQgdGhlIHJl cG9ydCBmaW5pc2hlZAorICAgICAgc2VsZi5hc3NlcnRfKHJlcG9ydGVyLl9maW5pc2hlZF9yZXBv cnQpCisgICAgICBzZWxmLmFzc2VydEVxdWFsKFsnJ10sIHNldF9wYXRocykKKyAgICAgIHNlbGYu YXNzZXJ0RXF1YWwoMSwgbGVuKGluZm9zKSkKKworICAgICAgIyBDaGVjayBjb250ZW50IG9mIGlu Zm9zIG9iamVjdAorICAgICAgW2luZm9dID0gaW5mb3MKKyAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo cmVhZG1lX3BhdGgsIGluZm8ucGF0aCkKKyAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29yZS5zdm5f bm9kZV9maWxlLCBpbmZvLmtpbmQpCisgICAgICBzZWxmLmFzc2VydEVxdWFsKC0xLCBpbmZvLnJl dmlzaW9uKQorCisgIGRlZiB0ZXN0X2NyZWF0ZV9ub3RpZnkoc2VsZik6CisgICAgICB3Yy5jcmVh dGVfbm90aWZ5KHNlbGYucGF0aCwgd2Mubm90aWZ5X2FkZCkKKworICBkZWYgdGVzdF9jaGVja193 YyhzZWxmKToKKyAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3Yy5jaGVja193YyhzZWxmLnBhdGgpID4g MCkKKworICBkZWYgdGVzdF9nZXRfYW5jZXN0cnkoc2VsZik6CisgICAgICBzZWxmLmFzc2VydEVx dWFsKFtzZWxmLnJlcG9zX3VybCwgMTJdLCAKKyAgICAgICAgICAgICAgICAgICAgICAgd2MuZ2V0 X2FuY2VzdHJ5KHNlbGYucGF0aCwgc2VsZi53YykpCisKKyAgZGVmIHRlc3Rfc3RhdHVzKHNlbGYp OgorICAgICAgd2Muc3RhdHVzMihzZWxmLnBhdGgsIHNlbGYud2MpCisKKyAgZGVmIHRlc3RfaXNf bm9ybWFsX3Byb3Aoc2VsZik6CisgICAgICBzZWxmLmZhaWxJZih3Yy5pc19ub3JtYWxfcHJvcCgn c3ZuOndjOmZvbzpiYXInKSkKKyAgICAgIHNlbGYuZmFpbElmKHdjLmlzX25vcm1hbF9wcm9wKCdz dm46ZW50cnk6Zm9vOmJhcicpKQorICAgICAgc2VsZi5hc3NlcnRfKHdjLmlzX25vcm1hbF9wcm9w KCdzdm46Zm9vOmJhcicpKQorICAgICAgc2VsZi5hc3NlcnRfKHdjLmlzX25vcm1hbF9wcm9wKCdm b3JlaWduOmZvbzpiYXInKSkKKworICBkZWYgdGVzdF9pc193Y19wcm9wKHNlbGYpOgorICAgICAg c2VsZi5hc3NlcnRfKHdjLmlzX3djX3Byb3AoJ3N2bjp3Yzpmb286YmFyJykpCisgICAgICBzZWxm LmZhaWxJZih3Yy5pc193Y19wcm9wKCdzdm46ZW50cnk6Zm9vOmJhcicpKQorICAgICAgc2VsZi5m YWlsSWYod2MuaXNfd2NfcHJvcCgnc3ZuOmZvbzpiYXInKSkKKyAgICAgIHNlbGYuZmFpbElmKHdj LmlzX3djX3Byb3AoJ2ZvcmVpZ246Zm9vOmJhcicpKQorCisgIGRlZiB0ZXN0X2lzX2VudHJ5X3By b3Aoc2VsZik6CisgICAgICBzZWxmLmFzc2VydF8od2MuaXNfZW50cnlfcHJvcCgnc3ZuOmVudHJ5 OmZvbzpiYXInKSkKKyAgICAgIHNlbGYuZmFpbElmKHdjLmlzX2VudHJ5X3Byb3AoJ3N2bjp3Yzpm b286YmFyJykpCisgICAgICBzZWxmLmZhaWxJZih3Yy5pc19lbnRyeV9wcm9wKCdzdm46Zm9vOmJh cicpKQorICAgICAgc2VsZi5mYWlsSWYod2MuaXNfZW50cnlfcHJvcCgnZm9yZWlnbjpmb286YmFy JykpCisKKyAgZGVmIHRlc3RfZ2V0X3ByaXN0aW5lX2NvcHlfcGF0aChzZWxmKToKKyAgICAgIHNl bGYuYXNzZXJ0RXF1YWwoCisgICAgICAgIHdjLmdldF9wcmlzdGluZV9jb3B5X3BhdGgob3MucGF0 aC5qb2luKHNlbGYucGF0aCwgJ2ZvbycpKSwKKyAgICAgICAgb3MucGF0aC5qb2luKHNlbGYucGF0 aCwgd2MuZ2V0X2FkbV9kaXIoKSwgJ3RleHQtYmFzZScsICdmb28uc3ZuLWJhc2UnKSkKKworICBk ZWYgdGVzdF9nZXRfaWdub3JlcyhzZWxmKToKKyAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNl KHdjLmdldF9pZ25vcmVzKE5vbmUsIHNlbGYud2MpLCBsaXN0KSkKKworICBkZWYgdGVzdF9lbnRy aWVzX3JlYWQoc2VsZik6CisgICAgICBlbnRyaWVzID0gd2MuZW50cmllc19yZWFkKHNlbGYud2Ms IFRydWUpCisgICAgICAgIAorICAgICAgc2VsZi5hc3NlcnRFcXVhbChbJycsICd0YWdzJywgJ2Jy YW5jaGVzJywgJ3RydW5rJ10sIGVudHJpZXMua2V5cygpKQorCisgIGRlZiB0ZWFyRG93bihzZWxm KToKKyAgICAgIHdjLmFkbV9jbG9zZShzZWxmLndjKQorICAgICAgc2h1dGlsLnJtdHJlZShzZWxm LnBhdGgpCisKK2RlZiBzdWl0ZSgpOgorICAgIHJldHVybiB1bml0dGVzdC5tYWtlU3VpdGUoU3Vi dmVyc2lvblJlcG9zaXRvcnlUZXN0Q2FzZSwgJ3Rlc3QnLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3VpdGVDbGFzcz1TdWJ2ZXJzaW9uUmVwb3NpdG9yeVRlc3RTZXR1cCkKKworaWYg X19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBydW5uZXIgPSB1bml0dGVzdC5UZXh0VGVzdFJ1 bm5lcigpCisgICAgcnVubmVyLnJ1bihzdWl0ZSgpKQoKPT09IG1vZGlmaWVkIGZpbGUgJ3N1YnZl cnNpb24vYmluZGluZ3Mvc3dpZy9pbmNsdWRlL2Fwci5zd2cnCi0tLSBzdWJ2ZXJzaW9uL2JpbmRp bmdzL3N3aWcvaW5jbHVkZS9hcHIuc3dnCQorKysgc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL2lu Y2x1ZGUvYXByLnN3ZwkKQEAgLTE0NiwxNCArMTQ2LDI0IEBACiAKIC8qIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CiAgICBjcmVhdGUgYW4gT1VUUFVUIGFyZ3VtZW50IGRlZm4gZm9yIGFuIGFwcl9oYXNoX3QgKiog d2hpY2ggaXMgc3RvcmluZworICAgZGlyZW50IHZhbHVlcworKi8KKyV0eXBlbWFwKHB5dGhvbixp bixudW1pbnB1dHM9MCkgYXByX2hhc2hfdCAqKkRJUkVOVEhBU0ggPSBhcHJfaGFzaF90ICoqT1VU UFVUOworJXR5cGVtYXAocHl0aG9uLGFyZ291dCxmcmFnbWVudD0idF9vdXRwdXRfaGVscGVyIikg YXByX2hhc2hfdCAqKkRJUkVOVEhBU0ggeworICAgICRyZXN1bHQgPSB0X291dHB1dF9oZWxwZXIo JHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2bl9zd2lnX3B5X2NvbnZl cnRfaGFzaCgqJDEsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFNXSUdUWVBFX3Bfc3ZuX2RpcmVudF90LAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpKTsKK30KKworLyogLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAgIGNyZWF0ZSBhbiBPVVRQVVQgYXJndW1lbnQgZGVmbiBmb3IgYW4gYXBy X2hhc2hfdCAqKiB3aGljaCBpcyBzdG9yaW5nCiAgICBwcm9wZXJ0eSB2YWx1ZXMKICovCiAKICV0 eXBlbWFwKHB5dGhvbixpbixudW1pbnB1dHM9MCkgYXByX2hhc2hfdCAqKlBST1BIQVNIID0gYXBy X2hhc2hfdCAqKk9VVFBVVDsKLSV0eXBlbWFwKHB5dGhvbixhcmdvdXQpIGFwcl9oYXNoX3QgKipQ Uk9QSEFTSCB7Ci0gICAgLyogdG9zcyBwcmlvciByZXN1bHQsIGdldCBuZXcgcmVzdWx0IGZyb20g dGhlIGhhc2ggKi8KLSAgICBQeV9ERUNSRUYoJHJlc3VsdCk7Ci0gICAgJHJlc3VsdCA9IHN2bl9z d2lnX3B5X3Byb3BoYXNoX3RvX2RpY3QoKiQxKTsKKyV0eXBlbWFwKHB5dGhvbixhcmdvdXQsZnJh Z21lbnQ9InRfb3V0cHV0X2hlbHBlciIpIGFwcl9oYXNoX3QgKipQUk9QSEFTSCB7CisgICAgJHJl c3VsdCA9IHRfb3V0cHV0X2hlbHBlcigkcmVzdWx0LCBzdm5fc3dpZ19weV9wcm9waGFzaF90b19k aWN0KCokMSkpOwogfQogCiAldHlwZW1hcChwZXJsNSxpbixudW1pbnB1dHM9MCkgYXByX2hhc2hf dCAqKlBST1BIQVNIID0gYXByX2hhc2hfdCAqKk9VVFBVVDsKCj09PSBtb2RpZmllZCBmaWxlICdz dWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvaW5jbHVkZS9wcm94eV9hcHIuc3dnJwotLS0gc3VidmVy c2lvbi9iaW5kaW5ncy9zd2lnL2luY2x1ZGUvcHJveHlfYXByLnN3ZwkKKysrIHN1YnZlcnNpb24v YmluZGluZ3Mvc3dpZy9pbmNsdWRlL3Byb3h5X2Fwci5zd2cJCkBAIC0xMTIsNiArMTEyLDI4IEBA CiAgICAgICAgICAgZGVsIHNlbGYuX3BhcmVudF9wb29sCiAgICAgICAgIGlmIGhhc2F0dHIoc2Vs ZiwgIl9pc192YWxpZCIpOgogICAgICAgICAgIGRlbCBzZWxmLl9pc192YWxpZAorICAgICAgICAK KyAgICAgICAgIyBDbGVhciBvdXQgYW55IHBvb2wtb3duZWQgcmVmZXJlbmNlcyBpbnNlcnRlZCBi eSB0eXBlbWFwcworICAgICAgICBpZiBoYXNhdHRyKHNlbGYsICJfb3duZWRfcmVmcyIpOgorICAg ICAgICAgIGRlbCBzZWxmLl9vd25lZF9yZWZzCisKKyAgICAgIGRlZiBfYWRkX293bmVkX3JlZihz ZWxmLCByZWYpOgorICAgICAgICAiIiJBZGQgYSBuZXcgJ293bmVkJyByZWZlcmVuY2UgLS0gaS5l LiBhIFB5dGhvbiBvYmplY3QgY29udGFpbmVkIGluIGEgQworICAgICAgICAgICBzdHJ1Y3R1cmUg YWxsb2NhdGVkIGluIHRoaXMgcG9vbC4gIFVzZWQgYnkgdGhlIHR5cGVtYXBzIHRvIG1hbmFnZQor ICAgICAgICAgICByZWZlcmVuY2UgY291bnRpbmcgc2VtYW50aWNzLiIiIgorICAgICAgICBpZiBu b3QgaGFzYXR0cihzZWxmLCAiX293bmVkX3JlZnMiKToKKyAgICAgICAgICBzZWxmLl9vd25lZF9y ZWZzID0ge30KKyAgICAgICAgaWYgc2VsZi5fb3duZWRfcmVmcy5oYXNfa2V5KHJlZik6CisgICAg ICAgICAgc2VsZi5fb3duZWRfcmVmc1tyZWZdICs9IDEKKyAgICAgICAgZWxzZToKKyAgICAgICAg ICBzZWxmLl9vd25lZF9yZWZzW3JlZl0gPSAxCisgICAgICAKKyAgICAgIGRlZiBfcmVtb3ZlX293 bmVkX3JlZihzZWxmLCByZWYpOgorICAgICAgICAiIiJSZW1vdmUgYW4gZXhpc3RpbmcgJ293bmVk JyByZWZlcmVuY2UuICBBbHNvIHVzZWQgYnkgdHlwZW1hcHMuIiIiCisgICAgICAgIGlmIGhhc2F0 dHIoc2VsZiwgIl9vd25lZF9yZWZzIikgYW5kIHNlbGYuX293bmVkX3JlZnMuaGFzX2tleShyZWYp OgorICAgICAgICAgIHNlbGYuX293bmVkX3JlZnNbcmVmXSAtPSAxCisgICAgICAgICAgaWYgc2Vs Zi5fb3duZWRfcmVmc1tyZWZdID09IDA6CisgICAgICAgICAgICBkZWwgc2VsZi5fb3duZWRfcmVm c1tyZWZdCiAgIAogICAgICAgZGVmIF9fZGVsX18oc2VsZik6CiAgICAgICAgICIiIkF1dG9tYXRp Y2FsbHkgZGVzdHJveSBtZW1vcnkgcG9vbHMsIGlmIG5lY2Vzc2FyeSIiIgoKPT09IG1vZGlmaWVk IGZpbGUgJ3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9pbmNsdWRlL3N2bl90eXBlcy5zd2cnCi0t LSBzdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvaW5jbHVkZS9zdm5fdHlwZXMuc3dnCQorKysgc3Vi dmVyc2lvbi9iaW5kaW5ncy9zd2lnL2luY2x1ZGUvc3ZuX3R5cGVzLnN3ZwkKQEAgLTQzMCw2ICs0 MzAsMTIgQEAKICAgJDIgPSAodm9pZCAqKXN2bl9zd2lnX3JiX21ha2VfYmF0b24oJGlucHV0LCBf Z2xvYmFsX3N2bl9zd2lnX3JiX3Bvb2wpOwogfTsKIAorJXR5cGVtYXAocHl0aG9uLCBpbikgKHN2 bl9jb21taXRfY2FsbGJhY2syX3QgY2FsbGJhY2ssIHZvaWQgKmNhbGxiYWNrX2JhdG9uKQorewor ICAkMSA9IHN2bl9zd2lnX3B5X2NvbW1pdF9jYWxsYmFjazI7CisgICQyID0gKHZvaWQgKikkaW5w dXQ7Cit9CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBDYWxsYmFjazogc3ZuX2NhbmNlbF9mdW5j X3QKICovCkBAIC00OTMsNiArNDk5LDQxIEBACiAgICQxID0gc3ZuX3N3aWdfcmJfbWFrZV9zdHJl YW0oJGlucHV0KTsKIH0KIAorI2lmZGVmIFNXSUdQWVRIT04KKyV0eXBlbWFwKGluKSAoc3ZuX2Nv bW1pdF9jYWxsYmFja190IGNhbGxiYWNrLCB2b2lkICpjYWxsYmFja19iYXRvbikKK3sKKyAgJDEg PSBzdm5fc3dpZ19weV9jb21taXRfY2FsbGJhY2s7CisgICQyID0gKHZvaWQgKikkaW5wdXQ7Cit9 CisjZW5kaWYKKworI2lmZGVmIFNXSUdQWVRIT04KKyV0eXBlbWFwKGluKSAoc3ZuX2NvbW1pdF9j YWxsYmFja190IGNhbGxiYWNrLCB2b2lkICpjYWxsYmFja19iYXRvbikKK3sKKyAgJDEgPSBzdm5f c3dpZ19weV9jb21taXRfY2FsbGJhY2s7CisgICQyID0gKHZvaWQgKikkaW5wdXQ7Cit9CisjZW5k aWYKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIE1hcHBlciB0byBhdXRvbWF0aWNhbGx5IHR1cm4g UHl0aG9uIG9iamVjdHMgaW50byB2b2lkKiBiYXRvbnMgb24gYXNzaWdubWVudAorKi8KKworI2lm ZGVmIFNXSUdQWVRIT04KKyV0eXBlbWFwKGluKSB2b2lkICpQWV9BU19WT0lEIChQeU9iamVjdCAq bmV3UmVmKSB7CisgIG5ld1JlZiA9ICRpbnB1dDsKKyAgaWYgKCRpbnB1dCA9PSBQeV9Ob25lKSB7 CisgICAgJDEgPSBuZXdSZWYgPSBOVUxMOworICB9IGVsc2UgeworICAgIG5ld1JlZiA9ICRpbnB1 dDsKKyAgICAkMSA9ICh2b2lkICopJGlucHV0OworICB9CisgIGlmIChzdm5fc3dpZ19weV9wb29s X3NldF9vd25lZF9yZWYob2JqMCwgKFB5T2JqZWN0ICopYXJnMS0+JDFfbmFtZSwgbmV3UmVmKSkg eworICAgIFNXSUdfZmFpbDsKKyAgfQorfQorI2VuZGlmCisKIC8qIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAg ICBXcmFwIHRoZSBkaWdlc3Qgb3V0cHV0IGZvciBmdW5jdGlvbnMgcG9wdWxhdGluZyBkaWdlc3Rz LgogKi8KCj09PSBtb2RpZmllZCBmaWxlICdzdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcHl0aG9u L2xpYnN2bl9zd2lnX3B5L3N3aWd1dGlsX3B5LmMnCi0tLSBzdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3 aWcvcHl0aG9uL2xpYnN2bl9zd2lnX3B5L3N3aWd1dGlsX3B5LmMJCisrKyBzdWJ2ZXJzaW9uL2Jp bmRpbmdzL3N3aWcvcHl0aG9uL2xpYnN2bl9zd2lnX3B5L3N3aWd1dGlsX3B5LmMJCkBAIC0zMCw2 ICszMCw3IEBACiAjaW5jbHVkZSA8YXByX3BvcnRhYmxlLmg+CiAjaW5jbHVkZSA8YXByX3RocmVh ZF9wcm9jLmg+CiAKKyNpbmNsdWRlICJzdm5fY2xpZW50LmgiCiAjaW5jbHVkZSAic3ZuX3N0cmlu Zy5oIgogI2luY2x1ZGUgInN2bl9vcHQuaCIKICNpbmNsdWRlICJzdm5fZGVsdGEuaCIKQEAgLTQ4 NSw2ICs0ODYsNTEgQEAKICAgcmV0dXJuIGNvbnZlcnRfaGFzaChoYXNoLCBjb252ZXJ0X3N2bl9z dHJpbmdfdCwgTlVMTCwgTlVMTCk7CiB9CiAKK3N0YXRpYyBQeU9iamVjdCAqcHJvcGFycmF5X3Rv X2RpY3QoY29uc3QgYXByX2FycmF5X2hlYWRlcl90ICphcnJheSkKK3sKKyAgICBQeU9iamVjdCAq ZGljdCA9IFB5RGljdF9OZXcoKTsKKyAgICBpbnQgaTsKKworICAgIGlmIChkaWN0ID09IE5VTEwp CisgICAgICByZXR1cm4gTlVMTDsKKworICAgIGZvciAoaSA9IDA7IGkgPCBhcnJheS0+bmVsdHM7 ICsraSkKKyAgICAgIHsKKyAgICAgICAgc3ZuX3Byb3BfdCBwcm9wOworICAgICAgICBQeU9iamVj dCAqcHlfa2V5LCAqcHlfdmFsdWU7CisKKyAgICAgICAgcHJvcCA9IEFQUl9BUlJBWV9JRFgoYXJy YXksIGksIHN2bl9wcm9wX3QpOworCisgICAgICAgIHB5X2tleSA9IFB5U3RyaW5nX0Zyb21TdHJp bmcocHJvcC5uYW1lKTsKKyAgICAgICAgaWYgKHB5X2tleSA9PSBOVUxMKQorICAgICAgICAgIGdv dG8gZXJyb3I7CisKKyAgICAgICAgaWYgKHByb3AudmFsdWUgPT0gTlVMTCkKKyAgICAgICAgICB7 CisgICAgICAgICAgICAgcHlfdmFsdWUgPSBQeV9Ob25lOworICAgICAgICAgICAgIFB5X0lOQ1JF RihQeV9Ob25lKTsKKyAgICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICB7CisgICAg ICAgICAgICAgcHlfdmFsdWUgPSBQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZSgodm9pZCAqKXBy b3AudmFsdWUtPmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBwcm9wLnZhbHVlLT5sZW4pOworICAgICAgICAgICAgIGlmIChweV92YWx1ZSA9 PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHB5X2tleSk7CisgICAgICAgICAg ICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgfQorCisgICAgICAg IFB5RGljdF9TZXRJdGVtKGRpY3QsIHB5X2tleSwgcHlfdmFsdWUpOworICAgIH0KKworICAgIHJl dHVybiBkaWN0OworCisgIGVycm9yOgorICAgIFB5X0RFQ1JFRihkaWN0KTsKKyAgICByZXR1cm4g TlVMTDsKKworfQorCiAKIFB5T2JqZWN0ICpzdm5fc3dpZ19weV9sb2NhdGlvbmhhc2hfdG9fZGlj dChhcHJfaGFzaF90ICpoYXNoKQogewpAQCAtNTUwLDYgKzU5Niw5IEBACiBERUNMQVJFX1NXSUdf Q09OU1RSVUNUT1IobG9jaywgc3ZuX2xvY2tfZHVwKQogREVDTEFSRV9TV0lHX0NPTlNUUlVDVE9S KGF1dGhfc3NsX3NlcnZlcl9jZXJ0X2luZm8sCiAgICAgc3ZuX2F1dGhfc3NsX3NlcnZlcl9jZXJ0 X2luZm9fZHVwKQorREVDTEFSRV9TV0lHX0NPTlNUUlVDVE9SKGluZm8sIHN2bl9pbmZvX2R1cCkK K0RFQ0xBUkVfU1dJR19DT05TVFJVQ1RPUihjb21taXRfaW5mbywgc3ZuX2NvbW1pdF9pbmZvX2R1 cCkKK0RFQ0xBUkVfU1dJR19DT05TVFJVQ1RPUih3Y19ub3RpZnksIHN2bl93Y19kdXBfbm90aWZ5 KQogCiBzdGF0aWMgUHlPYmplY3QgKmNvbnZlcnRfbG9nX2NoYW5nZWRfcGF0aCh2b2lkICp2YWx1 ZSwgdm9pZCAqY3R4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHlPYmplY3QgKnB5X3Bvb2wpCkBAIC0xNTA2LDYgKzE1NTUsNDEgQEAKIH0KIAogCit2b2lkIHN2 bl9zd2lnX3B5X25vdGlmeV9mdW5jMih2b2lkICpiYXRvbiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IHN2bl93Y19ub3RpZnlfdCAqbm90aWZ5LAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgUHlPYmplY3QgKmZ1bmN0aW9u ID0gYmF0b247CisgIFB5T2JqZWN0ICpyZXN1bHQ7CisgIHN2bl9lcnJvcl90ICplcnIgPSBTVk5f Tk9fRVJST1I7CisKKyAgaWYgKGZ1bmN0aW9uID09IE5VTEwgfHwgZnVuY3Rpb24gPT0gUHlfTm9u ZSkKKyAgICByZXR1cm47CisKKyAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7CisKKyAg aWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oZnVuY3Rpb24sCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopIihPJk8mKSIsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vfb2Jfd2Nfbm90aWZ5LCBub3RpZnksCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vfb2JfcG9vbCwgcG9vbCkp ID09IE5VTEwpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7 CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgLyogVGhlIGNhbGxiYWNrIHNob3VsZG4ndCBi ZSByZXR1cm5pbmcgYW55dGhpbmcuICovCisgICAgICBpZiAocmVzdWx0ICE9IFB5X05vbmUpCisg ICAgICAgIGVyciA9IGNhbGxiYWNrX2JhZF9yZXR1cm5fZXJyb3IoIk5vdCBOb25lIik7CisgICAg ICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICB9CisKKyAgLyogT3VyIGVycm9yIGhhcyBubyBwbGFj ZSB0byBnby4gOi0oICovCisgIGlmIChlcnIpCisgICAgc3ZuX2Vycm9yX2NsZWFyKGVycik7CisK KyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7Cit9CisKIHZvaWQgc3ZuX3N3aWdfcHlf c3RhdHVzX2Z1bmModm9pZCAqYmF0b24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IGNoYXIgKnBhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2bl93Y19zdGF0 dXNfdCAqc3RhdHVzKQpAQCAtMTgxNCw2ICsxODk4LDM4IEBACiAgIHJldHVybiBlcnI7CiB9CiAK K3N2bl9lcnJvcl90ICpzdm5fc3dpZ19weV9pbmZvX3JlY2VpdmVyX2Z1bmModm9pZCAqYmF0b24s CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg KnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IHN2bl9pbmZvX3QgKmluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGFwcl9wb29sX3QgKnBvb2wpCit7CisgIFB5T2JqZWN0ICpyZWNlaXZlciA9IGJhdG9u OworICBQeU9iamVjdCAqcmVzdWx0OworICBzdm5fZXJyb3JfdCAqZXJyID0gU1ZOX05PX0VSUk9S OworIAorICBpZiAoKHJlY2VpdmVyID09IE5VTEwpIHx8IChyZWNlaXZlciA9PSBQeV9Ob25lKSkK KyAgICByZXR1cm4gU1ZOX05PX0VSUk9SOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9j aygpOworCisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKHJlY2VpdmVyLCAK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikic08mTyYiLCAK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCwgbWFrZV9vYl9pbmZv LCBpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX29iX3Bv b2wsIHBvb2wpKSA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlv bl9lcnJvcigpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGlmIChyZXN1bHQgIT0gUHlf Tm9uZSkKKyAgICAgICAgZXJyID0gY2FsbGJhY2tfYmFkX3JldHVybl9lcnJvcigiTm90IE5vbmUi KTsKKyAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgIH0KKworICBzdm5fc3dpZ19weV9yZWxl YXNlX3B5X2xvY2soKTsKKworICByZXR1cm4gZXJyOworfQogCiBzdm5fZXJyb3JfdCAqc3ZuX3N3 aWdfcHlfY2xpZW50X2JsYW1lX3JlY2VpdmVyX2Z1bmModm9pZCAqYmF0b24sCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX2ludDY0X3QgbGlu ZV9ubywKQEAgLTIxMDgsMyArMjIyNCwzMjMgQEAKICAgKmNyZWQgPSBjcmVkczsKICAgcmV0dXJu IGVycjsKIH0KKwordm9pZAorc3ZuX3N3aWdfcHlfc2V0dXBfcmFfY2FsbGJhY2tzKHN2bl9yYV9j YWxsYmFja3MyX3QgKipjYWxsYmFja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dm9pZCAqKmJhdG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpw eV9jYWxsYmFja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAq cG9vbCkKK3sKKyAgc3ZuX2Vycm9yX3QgKmVyciA9IHN2bl9yYV9jcmVhdGVfY2FsbGJhY2tzKGNh bGxiYWNrcywgcG9vbCk7CisKKyAgaWYgKGVycikKKyAgICB7CisgICAgICBzdm5fc3dpZ19weV9z dm5fZXhjZXB0aW9uKGVycik7CisgICAgICByZXR1cm47CisgICAgfQorICAKKyAgKmJhdG9uID0g cHlfY2FsbGJhY2tzOworfQorCitzdm5fZXJyb3JfdCAqc3ZuX3N3aWdfcHlfY29tbWl0X2NhbGxi YWNrMihjb25zdCBzdm5fY29tbWl0X2luZm9fdCAqY29tbWl0X2luZm8sCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpiYXRvbiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpCit7CisgIFB5T2Jq ZWN0ICpyZWNlaXZlciA9IGJhdG9uOworICBQeU9iamVjdCAqcmVzdWx0OworICBzdm5fZXJyb3Jf dCAqZXJyID0gU1ZOX05PX0VSUk9SOworIAorICBpZiAoKHJlY2VpdmVyID09IE5VTEwpIHx8IChy ZWNlaXZlciA9PSBQeV9Ob25lKSkKKyAgICByZXR1cm4gU1ZOX05PX0VSUk9SOworCisgIHN2bl9z d2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2Fs bEZ1bmN0aW9uKHJlY2VpdmVyLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGNoYXIgKikiTyZPJiIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBtYWtlX29iX2NvbW1pdF9pbmZvLCBjb21taXRfaW5mbywKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbWFrZV9vYl9wb29sLCBwb29sKSkgPT0gTlVMTCkKKyAgICB7Cisg ICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICB9CisgIGVsc2UKKyAg ICB7CisgICAgICBpZiAocmVzdWx0ICE9IFB5X05vbmUpCisgICAgICAgIGVyciA9IGNhbGxiYWNr X2JhZF9yZXR1cm5fZXJyb3IoIk5vdCBOb25lIik7CisgICAgICBQeV9ERUNSRUYocmVzdWx0KTsK KyAgICB9CisKKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7CisKKyAgcmV0dXJuIGVy cjsKK30KKworc3ZuX2Vycm9yX3QgKnN2bl9zd2lnX3B5X2NvbW1pdF9jYWxsYmFjayhzdm5fcmV2 bnVtX3QgbmV3X3JldmlzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBjaGFyICpkYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBjaGFyICphdXRob3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHZvaWQgKmJhdG9uKQoreworICBQeU9iamVjdCAqcmVjZWl2ZXIgPSBiYXRv bjsKKyAgUHlPYmplY3QgKnJlc3VsdDsKKyAgc3ZuX2Vycm9yX3QgKmVyciA9IFNWTl9OT19FUlJP UjsKKworICBpZiAoKHJlY2VpdmVyID09IE5VTEwpIHx8IChyZWNlaXZlciA9PSBQeV9Ob25lKSkK KyAgICByZXR1cm4gU1ZOX05PX0VSUk9SOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9j aygpOworCisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKHJlY2VpdmVyLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJsc3MiLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfcmV2aXNpb24sIGRhdGUsIGF1 dGhvcikpID09IE5VTEwpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vy cm9yKCk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgaWYgKHJlc3VsdCAhPSBQeV9Ob25l KQorICAgICAgICBlcnIgPSBjYWxsYmFja19iYWRfcmV0dXJuX2Vycm9yKCJOb3QgTm9uZSIpOwor ICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgfQorCisgIHN2bl9zd2lnX3B5X3JlbGVhc2Vf cHlfbG9jaygpOworCisgIHJldHVybiBlcnI7Cit9CisKK3N2bl9lcnJvcl90ICpzdm5fc3dpZ19w eV9yYV9maWxlX3Jldl9oYW5kbGVyX2Z1bmMoCisgICAgICAgICAgICAgICAgICAgIHZvaWQgKmJh dG9uLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwYXRoLAorICAgICAgICAgICAg ICAgICAgICBzdm5fcmV2bnVtX3QgcmV2LAorICAgICAgICAgICAgICAgICAgICBhcHJfaGFzaF90 ICpyZXZfcHJvcHMsCisgICAgICAgICAgICAgICAgICAgIHN2bl90eGRlbHRhX3dpbmRvd19oYW5k bGVyX3QgKmRlbHRhX2hhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgIHZvaWQgKipkZWx0YV9i YXRvbiwKKyAgICAgICAgICAgICAgICAgICAgYXByX2FycmF5X2hlYWRlcl90ICpwcm9wX2RpZmZz LAorICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKQoreworICBQeU9iamVjdCAq aGFuZGxlciA9IGJhdG9uOworICBQeU9iamVjdCAqcmVzdWx0LCAqcHlfcmV2X3Byb3BzID0gTlVM TCwgKnB5X3Byb3BfZGlmZnMgPSBOVUxMOworICBzdm5fZXJyb3JfdCAqZXJyID0gU1ZOX05PX0VS Uk9SOworCisgIGlmICgoaGFuZGxlciA9PSBOVUxMKSB8fCAoaGFuZGxlciA9PSBQeV9Ob25lKSkK KyAgICByZXR1cm4gU1ZOX05PX0VSUk9SOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9j aygpOworCisgIHB5X3Jldl9wcm9wcyA9IHN2bl9zd2lnX3B5X3Byb3BoYXNoX3RvX2RpY3QocmV2 X3Byb3BzKTsKKyAgaWYgKHB5X3Jldl9wcm9wcyA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVyciA9 IHR5cGVfY29udmVyc2lvbl9lcnJvcigiYXByX2hhc2hfdCAqIik7CisgICAgICBnb3RvIGVycm9y OworICAgIH0KKworICBweV9wcm9wX2RpZmZzID0gcHJvcGFycmF5X3RvX2RpY3QocHJvcF9kaWZm cyk7CisKKyAgaWYgKHB5X3Byb3BfZGlmZnMgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSB0 eXBlX2NvbnZlcnNpb25fZXJyb3IoImFwcl9hcnJheV9oZWFkZXJfdCAqIik7CisgICAgICBnb3Rv IGVycm9yOworICAgIH0KKworICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbiho YW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJz bE9PTyYiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLCByZXYs IHB5X3Jldl9wcm9wcywgcHlfcHJvcF9kaWZmcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbWFrZV9vYl9wb29sLCBwb29sKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICBl cnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICB9CisgIGVsc2UKKyAgICB7Cisg ICAgICBpZiAocmVzdWx0ICE9IFB5X05vbmUpCisgICAgICAgIGVyciA9IGNhbGxiYWNrX2JhZF9y ZXR1cm5fZXJyb3IoIk5vdCBOb25lIik7CisKKyAgICAgIC8qIEZJWE1FOiBTdXBwb3J0IHJldHVy bmVkIFR4RGVsdGFXaW5kb3cgb2JqZWN0IGFuZAorICAgICAgICogc2V0IGRlbHRhX2hhbmRsZXIg YW5kIGRlbHRhX2JhdG9uICovCisgICAgICAqZGVsdGFfaGFuZGxlciA9IE5VTEw7CisgICAgICAq ZGVsdGFfYmF0b24gPSBOVUxMOworCisgICAgICBQeV9YREVDUkVGKHJlc3VsdCk7CisgICAgfQor CitlcnJvcjoKKworICBQeV9YREVDUkVGKHB5X3Jldl9wcm9wcyk7CisgIFB5X1hERUNSRUYocHlf cHJvcF9kaWZmcyk7CisKKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7CisKKyAgcmV0 dXJuIGVycjsKK30KKworc3RhdGljIHN2bl9lcnJvcl90ICpyZXBvcnRlcl9zZXRfcGF0aCh2b2lk ICpyZXBvcnRfYmF0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpw YXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX3Jldm51bV90IHJldmlzaW9uLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX2Jvb2xlYW5fdCBzdGFydF9lbXB0eSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmxvY2tfdG9rZW4sCisgICAgICAg ICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKQoreworICBzdm5fZXJyb3JfdCAq ZXJyID0gU1ZOX05PX0VSUk9SOworICBQeU9iamVjdCAqcHlfcmVwb3J0ZXIgPSByZXBvcnRfYmF0 b24sICpyZXN1bHQ7CisKKyAgaWYgKHB5X3JlcG9ydGVyID09IE5VTEwgfHwgcHlfcmVwb3J0ZXIg PT0gUHlfTm9uZSkKKyAgICByZXR1cm4gU1ZOX05PX0VSUk9SOworCisgIHN2bl9zd2lnX3B5X2Fj cXVpcmVfcHlfbG9jaygpOworCisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChw eV9yZXBvcnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICop InNldF9wYXRoIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICop InNsYnNPJiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLCByZXZp c2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2VtcHR5LCBs b2NrX3Rva2VuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9vYl9w b29sLCBwb29sKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRp b25fZXJyb3IoKTsKKyAgICB9CisgIGVsc2UgaWYgKHJlc3VsdCAhPSBQeV9Ob25lKQorICAgIHsK KyAgICAgIGVyciA9IGNhbGxiYWNrX2JhZF9yZXR1cm5fZXJyb3IoIk5vdCBOb25lIik7CisgICAg fQorCisgIFB5X1hERUNSRUYocmVzdWx0KTsKKworICBzdm5fc3dpZ19weV9yZWxlYXNlX3B5X2xv Y2soKTsKKworICByZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3ZuX2Vycm9yX3QgKnJlcG9ydGVy X2RlbGV0ZV9wYXRoKHZvaWQgKnJlcG9ydF9iYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBjaGFyICpwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAq cG9vbCkKK3sKKyAgc3ZuX2Vycm9yX3QgKmVyciA9IFNWTl9OT19FUlJPUjsKKyAgUHlPYmplY3Qg KnB5X3JlcG9ydGVyID0gcmVwb3J0X2JhdG9uLCAqcmVzdWx0OworCisgIGlmIChweV9yZXBvcnRl ciA9PSBOVUxMIHx8IHB5X3JlcG9ydGVyID09IFB5X05vbmUpCisgICAgcmV0dXJuIFNWTl9OT19F UlJPUjsKKworICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xvY2soKTsKKworICBpZiAoKHJlc3Vs dCA9IFB5T2JqZWN0X0NhbGxNZXRob2QocHlfcmVwb3J0ZXIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoY2hhciAqKSJkZWxldGVfcGF0aCIsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJzTyYiLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcGF0aCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBtYWtlX29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVyciA9IGNhbGxi YWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgIH0KKyAgZWxzZSBpZiAocmVzdWx0ICE9IFB5X05v bmUpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfYmFkX3JldHVybl9lcnJvcigiTm90IE5v bmUiKTsKKyAgICB9CisKKyAgUHlfWERFQ1JFRihyZXN1bHQpOworCisgIHN2bl9zd2lnX3B5X3Jl bGVhc2VfcHlfbG9jaygpOworCisgIHJldHVybiBlcnI7Cit9CisgICAgCitzdGF0aWMgc3ZuX2Vy cm9yX3QgKnJlcG9ydGVyX2xpbmtfcGF0aCh2b2lkICpyZXBvcnRfYmF0b24sCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGF0aCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBjaGFyICp1cmwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Zu X3Jldm51bV90IHJldmlzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2bl9ib29s ZWFuX3Qgc3RhcnRfZW1wdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh ciAqbG9ja190b2tlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpw b29sKQoreworICBzdm5fZXJyb3JfdCAqZXJyID0gU1ZOX05PX0VSUk9SOworICBQeU9iamVjdCAq cHlfcmVwb3J0ZXIgPSByZXBvcnRfYmF0b24sICpyZXN1bHQ7CisKKyAgaWYgKHB5X3JlcG9ydGVy ID09IE5VTEwgfHwgcHlfcmVwb3J0ZXIgPT0gUHlfTm9uZSkKKyAgICByZXR1cm4gU1ZOX05PX0VS Uk9SOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisgIGlmICgocmVzdWx0 ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChweV9yZXBvcnRlciwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChjaGFyICopImxpbmtfcGF0aCIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoY2hhciAqKSJzc2xic08mIiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHBhdGgsIHVybCwgcmV2aXNpb24sCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzdGFydF9lbXB0eSwgbG9ja190b2tlbiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG1ha2Vfb2JfcG9vbCwgcG9vbCkpID09IE5VTEwpCisgICAg eworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7CisgICAgfQorICBlbHNl IGlmIChyZXN1bHQgIT0gUHlfTm9uZSkKKyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFja19iYWRf cmV0dXJuX2Vycm9yKCJOb3QgTm9uZSIpOworICAgIH0KKworICBQeV9YREVDUkVGKHJlc3VsdCk7 CisKKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7CisKKyAgcmV0dXJuIGVycjsKK30K Kworc3RhdGljIHN2bl9lcnJvcl90ICpyZXBvcnRlcl9maW5pc2hfcmVwb3J0KHZvaWQgKnJlcG9y dF9iYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9v bCkKK3sKKyAgc3ZuX2Vycm9yX3QgKmVyciA9IFNWTl9OT19FUlJPUjsKKworICBQeU9iamVjdCAq cHlfcmVwb3J0ZXIgPSByZXBvcnRfYmF0b24sICpyZXN1bHQ7CisKKyAgaWYgKHB5X3JlcG9ydGVy ID09IE5VTEwgfHwgcHlfcmVwb3J0ZXIgPT0gUHlfTm9uZSkKKyAgICByZXR1cm4gU1ZOX05PX0VS Uk9SOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisgIGlmICgocmVzdWx0 ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChweV9yZXBvcnRlciwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChjaGFyICopImZpbmlzaF9yZXBvcnQiLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikiTyYiLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbWFrZV9vYl9wb29sLCBwb29sKSkgPT0gTlVMTCkKKyAgICB7CisgICAg ICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICB9CisgIGVsc2UgaWYgKHJl c3VsdCAhPSBQeV9Ob25lKQorICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2JhZF9yZXR1cm5f ZXJyb3IoIk5vdCBOb25lIik7CisgICAgfQorCisgIFB5X1hERUNSRUYocmVzdWx0KTsKKworICBz dm5fc3dpZ19weV9yZWxlYXNlX3B5X2xvY2soKTsKKworICByZXR1cm4gZXJyOworfQorCitzdGF0 aWMgc3ZuX2Vycm9yX3QgKnJlcG9ydGVyX2Fib3J0X3JlcG9ydCh2b2lkICpyZXBvcnRfYmF0b24s CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAg c3ZuX2Vycm9yX3QgKmVyciA9IFNWTl9OT19FUlJPUjsKKworICBQeU9iamVjdCAqcHlfcmVwb3J0 ZXIgPSByZXBvcnRfYmF0b24sICpyZXN1bHQ7CisKKyAgaWYgKHB5X3JlcG9ydGVyID09IE5VTEwg fHwgcHlfcmVwb3J0ZXIgPT0gUHlfTm9uZSkKKyAgICByZXR1cm4gU1ZOX05PX0VSUk9SOworCisg IHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisgIGlmICgocmVzdWx0ID0gUHlPYmpl Y3RfQ2FsbE1ldGhvZChweV9yZXBvcnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChjaGFyICopImFib3J0X3JlcG9ydCIsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoY2hhciAqKSJPJiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBtYWtlX29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVyciA9IGNh bGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgIH0KKyAgZWxzZSBpZiAocmVzdWx0ICE9IFB5 X05vbmUpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfYmFkX3JldHVybl9lcnJvcigiTm90 IE5vbmUiKTsKKyAgICB9CisKKyAgUHlfWERFQ1JFRihyZXN1bHQpOworCisgIHN2bl9zd2lnX3B5 X3JlbGVhc2VfcHlfbG9jaygpOworCisgIHJldHVybiBlcnI7Cit9CisKK2NvbnN0IHN2bl9yYV9y ZXBvcnRlcjJfdCBzd2lnX3B5X3JhX3JlcG9ydGVyMiA9IHsKKyAgICByZXBvcnRlcl9zZXRfcGF0 aCwKKyAgICByZXBvcnRlcl9kZWxldGVfcGF0aCwKKyAgICByZXBvcnRlcl9saW5rX3BhdGgsCisg ICAgcmVwb3J0ZXJfZmluaXNoX3JlcG9ydCwKKyAgICByZXBvcnRlcl9hYm9ydF9yZXBvcnQKK307 Cgo9PT0gbW9kaWZpZWQgZmlsZSAnc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3B5dGhvbi9saWJz dm5fc3dpZ19weS9zd2lndXRpbF9weS5oJwotLS0gc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3B5 dGhvbi9saWJzdm5fc3dpZ19weS9zd2lndXRpbF9weS5oCQorKysgc3VidmVyc2lvbi9iaW5kaW5n cy9zd2lnL3B5dGhvbi9saWJzdm5fc3dpZ19weS9zd2lndXRpbF9weS5oCQpAQCAtMTk4LDYgKzE5 OCwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdm5fd2Nfbm90aWZ5X3N0YXRl X3QgcHJvcF9zdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX3Jldm51bV90 IHJldmlzaW9uKTsKIAorU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JUCit2b2lkIHN2bl9zd2lnX3B5 X25vdGlmeV9mdW5jMih2b2lkICpiYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IHN2bl93Y19ub3RpZnlfdCAqbm90aWZ5LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgYXByX3Bvb2xfdCAqcG9vbCk7CisKIC8qIGEgc3RhdHVzIGZ1bmN0aW9uIHRoYXQgZXhl Y3V0ZXMgYSBQeXRob24gZnVuY3Rpb24gdGhhdCBpcyBwYXNzZWQgaW4KICAgIHZpYSB0aGUgYmF0 b24gYXJndW1lbnQgKi8KIFNWTl9TV0lHX1NXSUdVVElMX0VYUE9SVApAQCAtMjQ5LDYgKzI1NCwx MyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpt c2csCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBv b2wpOwogCisvKiB0aHVua2VkIGluZm8gcmVjZWl2ZXIgZnVuY3Rpb24gKi8KK1NWTl9TV0lHX1NX SUdVVElMX0VYUE9SVAorc3ZuX2Vycm9yX3QgKnN2bl9zd2lnX3B5X2luZm9fcmVjZWl2ZXJfZnVu Yyh2b2lkICpweV9yZWNlaXZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgY2hhciAqcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3Qgc3ZuX2luZm9fdCAqaW5mbywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCk7CisKIC8qIHRodW5r ZWQgYmxhbWUgcmVjZWl2ZXIgZnVuY3Rpb24gKi8KIFNWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAog c3ZuX2Vycm9yX3QgKnN2bl9zd2lnX3B5X2NsaWVudF9ibGFtZV9yZWNlaXZlcl9mdW5jKHZvaWQg KmJhdG9uLApAQCAtMzAzLDYgKzMxNSwzOCBAQAogICAgIHN2bl9ib29sZWFuX3QgbWF5X3NhdmUs CiAgICAgYXByX3Bvb2xfdCAqcG9vbCk7CiAKK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAordm9p ZAorc3ZuX3N3aWdfcHlfc2V0dXBfcmFfY2FsbGJhY2tzKHN2bl9yYV9jYWxsYmFja3MyX3QgKipj YWxsYmFja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKmJhdG9uLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpweV9jYWxsYmFja3MsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCk7CitTVk5fU1dJ R19TV0lHVVRJTF9FWFBPUlQKK3N2bl9lcnJvcl90ICpzdm5fc3dpZ19weV9jb21taXRfY2FsbGJh Y2syKGNvbnN0IHN2bl9jb21taXRfaW5mb190ICpjb21taXRfaW5mbywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmJhdG9uLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCk7CisKK1NWTl9TV0lH X1NXSUdVVElMX0VYUE9SVAorc3ZuX2Vycm9yX3QgKnN2bl9zd2lnX3B5X2NvbW1pdF9jYWxsYmFj ayhzdm5fcmV2bnVtX3QgbmV3X3JldmlzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBjaGFyICpkYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphdXRob3IsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmJhdG9uKTsKKworCitTVk5fU1dJR19TV0lHVVRJ TF9FWFBPUlQKK3N2bl9lcnJvcl90ICpzdm5fc3dpZ19weV9yYV9maWxlX3Jldl9oYW5kbGVyX2Z1 bmMoCisgICAgICAgICAgICAgICAgICAgIHZvaWQgKmJhdG9uLAorICAgICAgICAgICAgICAgICAg ICBjb25zdCBjaGFyICpwYXRoLAorICAgICAgICAgICAgICAgICAgICBzdm5fcmV2bnVtX3QgcmV2 LAorICAgICAgICAgICAgICAgICAgICBhcHJfaGFzaF90ICpyZXZfcHJvcHMsCisgICAgICAgICAg ICAgICAgICAgIHN2bl90eGRlbHRhX3dpbmRvd19oYW5kbGVyX3QgKmRlbHRhX2hhbmRsZXIsCisg ICAgICAgICAgICAgICAgICAgIHZvaWQgKipkZWx0YV9iYXRvbiwKKyAgICAgICAgICAgICAgICAg ICAgYXByX2FycmF5X2hlYWRlcl90ICpwcm9wX2RpZmZzLAorICAgICAgICAgICAgICAgICAgICBh cHJfcG9vbF90ICpwb29sKTsKKworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JUCitleHRlcm4gY29u c3Qgc3ZuX3JhX3JlcG9ydGVyMl90IHN3aWdfcHlfcmFfcmVwb3J0ZXIyOworCiAjaWZkZWYgX19j cGx1c3BsdXMKIH0KICNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLwoKPT09IG1vZGlmaWVkIGZpbGUg J3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vdGVzdHMvcnVuX2FsbC5weScKLS0tIHN1 YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vdGVzdHMvcnVuX2FsbC5weQkKKysrIHN1YnZl cnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vdGVzdHMvcnVuX2FsbC5weQkKQEAgLTEsNiArMSw2 IEBACiBpbXBvcnQgc3lzLCBvcwogYmluZGlyID0gb3MucGF0aC5kaXJuYW1lKHN5cy5hcmd2WzBd KQotc3lzLnBhdGhbMDowXSA9IFsgb3MuZ2V0Y3dkKCksICIlcy8ubGlicyIgJSBvcy5nZXRjd2Qo KSwgXAorc3lzLnBhdGhbMDowXSA9IFsgYmluZGlyLCBvcy5nZXRjd2QoKSwgIiVzLy5saWJzIiAl IG9zLmdldGN3ZCgpLCBcCiAgICAgICAgICAgICAgICAgICAiJXMvLi4iICUgYmluZGlyLCAiJXMv Li4vLmxpYnMiICUgYmluZGlyIF0KIAogIyBPU2VzIHdpdGhvdXQgUlBBVEggc3VwcG9ydCBhcmUg Z29pbmcgdG8gaGF2ZSB0byBkbyB0aGluZ3MgaGVyZSB0byBtYWtlCkBAIC0xNyw2ICsxNyw5IEBA CiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCBwb29sCiBpbXBvcnQgcmVwb3NpdG9yeQoraW1wb3J0 IGNsaWVudAoraW1wb3J0IHJhCitpbXBvcnQgd2MKIGltcG9ydCB0cmFjLnZlcnNpb25jb250cm9s LnRlc3RzCiAKICMgUnVuIGFsbCB0ZXN0cwpAQCAtMjQsNyArMjcsMTAgQEAKIGRlZiBzdWl0ZSgp OgogICAiIiJSdW4gYWxsIHRlc3RzIiIiCiAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkK KyAgc3VpdGUuYWRkVGVzdChjbGllbnQuc3VpdGUoKSkKICAgc3VpdGUuYWRkVGVzdChwb29sLnN1 aXRlKCkpCisgIHN1aXRlLmFkZFRlc3QocmEuc3VpdGUoKSkKKyAgc3VpdGUuYWRkVGVzdCh3Yy5z dWl0ZSgpKQogICBzdWl0ZS5hZGRUZXN0KHJlcG9zaXRvcnkuc3VpdGUoKSkKICAgc3VpdGUuYWRk VGVzdCh0cmFjLnZlcnNpb25jb250cm9sLnRlc3RzLnN1aXRlKCkpOwogICByZXR1cm4gc3VpdGUK Cj09PSBtb2RpZmllZCBmaWxlICdzdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvc3ZuX2NsaWVudC5p JwotLS0gc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3N2bl9jbGllbnQuaQkKKysrIHN1YnZlcnNp b24vYmluZGluZ3Mvc3dpZy9zdm5fY2xpZW50LmkJCkBAIC0yNSw2ICsyNSw3IEBACiAjZW5kaWYK IAogJWluY2x1ZGUgdHlwZW1hcHMuaQorJWluY2x1ZGUgY29uc3RyYWludHMuaQogCiAlaW5jbHVk ZSBzdm5fZ2xvYmFsLnN3ZwogJWltcG9ydCBjb3JlLmkKQEAgLTQ0LDYgKzQ1LDExIEBACiAgIHN2 bl9jbGllbnRfY3R4X3QgKioKIH07CiAKKyVhcHBseSBQb2ludGVyIE5PTk5VTEwgeyAKKyAgY29u c3Qgc3ZuX29wdF9yZXZpc2lvbl90ICpyZXZpc2lvbiwKKyAgY29uc3Qgc3ZuX29wdF9yZXZpc2lv bl90ICpwZWdfcmV2aXNpb24KK307CisKICVhcHBseSBjb25zdCBhcHJfYXJyYXlfaGVhZGVyX3Qg KlNUUklOR0xJU1QgewogICAgIGNvbnN0IGFwcl9hcnJheV9oZWFkZXJfdCAqdGFyZ2V0cywKICAg ICBjb25zdCBhcHJfYXJyYXlfaGVhZGVyX3QgKmRpZmZfb3B0aW9ucwpAQCAtNjYsNiArNzIsMTYg QEAKIAogI2lmZGVmIFNXSUdQWVRIT04KICVhcHBseSBzdm5fc3RyZWFtX3QgKldSQVBQRURfU1RS RUFNIHsgc3ZuX3N0cmVhbV90ICogfTsKKworLyogbWVtYmVycyBvZiBzdm5fY2xpZW50X2N0eF90 ICovCislYXBwbHkgdm9pZCAqUFlfQVNfVk9JRCB7CisgICAgdm9pZCAqbm90aWZ5X2JhdG9uLAor ICAgIHZvaWQgKmxvZ19tc2dfYmF0b24sCisgICAgdm9pZCAqY2FuY2VsX2JhdG9uLAorICAgIHZv aWQgKm5vdGlmeV9iYXRvbjIsCisgICAgdm9pZCAqbG9nX21zZ19iYXRvbjIsCisgICAgdm9pZCAq cHJvZ3Jlc3NfYmF0b24KK307CiAjZW5kaWYKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTIwMCw2 ICsyMTYsMTggQEAKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIENhbGxiYWNrOiBzdm5faW5m b19yZWNlaXZlcl90CisgICBzdm5fY2xpZW50X2luZm8oKQorKi8KKworJXR5cGVtYXAocHl0aG9u LCBpbikgKHN2bl9pbmZvX3JlY2VpdmVyX3QgcmVjZWl2ZXIsIAorICAgICAgICAgICAgICAgICAg ICAgIHZvaWQgKnJlY2VpdmVyX2JhdG9uKSB7CisgICAgJDEgPSBzdm5fc3dpZ19weV9pbmZvX3Jl Y2VpdmVyX2Z1bmM7CisgICAgJDIgPSAodm9pZCAqKSRpbnB1dDsKK30KKworCisvKiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQogICAgV2UgdXNlICdzdm5fd2Nfc3RhdHVzX3QgKicgaW4gc29tZSBjdXN0b20gY29k ZSwgYnV0IGl0IGlzbid0IGluIHRoZQogICAgQVBJIGFueXdoZXJlLiBUaHVzLCBTV0lHIGRvZXNu J3QgZ2VuZXJhdGUgYSB0eXBlbWFwIGVudHJ5IGZvciBpdC4gYnkKICAgIGFkZGluZyBhIHNpbXBs ZSBkZWNsYXJhdGlvbiBoZXJlLCBTV0lHIHdpbGwgaW5zZXJ0IGEgbmFtZSBmb3IgaXQuCkBAIC00 ODMsNiArNTExLDE1IEBACiAlaW5jbHVkZSBzdm5fdGltZV9oLnN3ZwogJWluY2x1ZGUgc3ZuX2Ns aWVudF9oLnN3ZwogCisjaWZkZWYgU1dJR1BZVEhPTgorCisvKiBwcm92aWRlIFB5dGhvbiB3aXRo IGFjY2VzcyB0byBzb21lIHRodW5rcy4gKi8KKyVjb25zdGFudCBzdm5fY2FuY2VsX2Z1bmNfdCBz dm5fc3dpZ19weV9jYW5jZWxfZnVuYzsKKyVjb25zdGFudCBzdm5fY2xpZW50X2dldF9jb21taXRf bG9nMl90IHN2bl9zd2lnX3B5X2dldF9jb21taXRfbG9nX2Z1bmM7CislY29uc3RhbnQgc3ZuX3dj X25vdGlmeV9mdW5jMl90IHN2bl9zd2lnX3B5X25vdGlmeV9mdW5jOworCisjZW5kaWYKKwogI2lm ZGVmIFNXSUdSVUJZCiAlaW5saW5lICV7CiBzdGF0aWMgVkFMVUUKCj09PSBtb2RpZmllZCBmaWxl ICdzdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvc3ZuX2RlbHRhLmknCi0tLSBzdWJ2ZXJzaW9uL2Jp bmRpbmdzL3N3aWcvc3ZuX2RlbHRhLmkJCisrKyBzdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvc3Zu X2RlbHRhLmkJCkBAIC00Nyw3ICs0Nyw4IEBACiAgICAgY29uc3QgY2hhciAqZXJyb3JfaW5mbywK ICAgICBjb25zdCBjaGFyICpjb3B5ZnJvbV9wYXRoLAogICAgIGNvbnN0IGNoYXIgKmNvcHlfcGF0 aCwKLSAgICBjb25zdCBjaGFyICpiYXNlX2NoZWNrc3VtCisgICAgY29uc3QgY2hhciAqYmFzZV9j aGVja3N1bSwKKyAgICBjb25zdCBjaGFyICp0ZXh0X2NoZWNrc3VtCiB9OwogCiAjaWZkZWYgU1dJ R1BZVEhPTgoKPT09IG1vZGlmaWVkIGZpbGUgJ3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9zdm5f cmEuaScKLS0tIHN1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9zdm5fcmEuaQkKKysrIHN1YnZlcnNp b24vYmluZGluZ3Mvc3dpZy9zdm5fcmEuaQkKQEAgLTI1LDYgKzI1LDcgQEAKICNlbmRpZgogCiAl aW5jbHVkZSB0eXBlbWFwcy5pCislaW5jbHVkZSBjb25zdHJhaW50cy5pCiAKICVpbmNsdWRlIHN2 bl9nbG9iYWwuc3dnCiAlaW1wb3J0IGFwci5zd2cKQEAgLTM5LDYgKzQwLDggQEAKICVpZ25vcmUg c3ZuX3JhX2xvY2FsX2luaXQ7CiAlaWdub3JlIHN2bl9yYV9kYXZfaW5pdDsKIAorJWFwcGx5IFBv aW50ZXIgTk9OTlVMTCB7IHN2bl9yYV9jYWxsYmFja3MyX3QgKmNhbGxiYWNrcyB9OworCiAvKiAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQogICAgJWFwcGx5LWluZyBvZiB0eXBlbWFwcyBkZWZpbmVkIGVsc2V3aGVy ZQogKi8KQEAgLTQ4LDEzICs1MSwxNiBAQAogICAgIGNvbnN0IHN2bl9yYV9yZXBvcnRlcjJfdCAq KnJlcG9ydGVyLAogICAgIHZvaWQgKipyZXBvcnRfYmF0b24sCiAgICAgc3ZuX2RpcmVudF90ICoq ZGlyZW50LAotICAgIHN2bl9sb2NrX3QgKipsb2NrCisgICAgc3ZuX2xvY2tfdCAqKmxvY2ssCisg ICAgY29uc3Qgc3ZuX2RlbHRhX2VkaXRvcl90ICoqCiB9OwogCiAlYXBwbHkgYXByX2hhc2hfdCAq KlBST1BIQVNIIHsgYXByX2hhc2hfdCAqKnByb3BzIH07CislYXBwbHkgYXByX2hhc2hfdCAqKkRJ UkVOVEhBU0ggeyBhcHJfaGFzaF90ICoqZGlyZW50cyB9OwogCiAlYXBwbHkgY29uc3QgY2hhciAq TUFZX0JFX05VTEwgewotICAgIGNvbnN0IGNoYXIgKmNvbW1lbnQKKyAgICBjb25zdCBjaGFyICpj b21tZW50LAorICAgIGNvbnN0IGNoYXIgKmxvY2tfdG9rZW4KIH07CiAKICVhcHBseSBhcHJfaGFz aF90ICpTVFJJTkdfVE9fU1RSSU5HIHsKQEAgLTExMiw2ICsxMTgsMTEgQEAKICAgc3ZuX3N3aWdf cmJfc2V0dXBfcmFfY2FsbGJhY2tzKCYkMSwgJiQyLCAkaW5wdXQsIF9nbG9iYWxfcG9vbCk7CiB9 CiAKKyV0eXBlbWFwKHB5dGhvbiwgaW4pIChzdm5fcmFfY2FsbGJhY2tzMl90ICpjYWxsYmFja3Ms IAorICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmNhbGxiYWNrX2JhdG9uKSB7CisgIHN2bl9z d2lnX3B5X3NldHVwX3JhX2NhbGxiYWNrcygmJDEsICYkMiwgJGlucHV0LCBfZ2xvYmFsX3Bvb2wp OworfQorCiAldHlwZW1hcChwZXJsNSwgaW4pIGFwcl9oYXNoX3QgKmNvbmZpZyB7CiAgICAgJDEg PSBzdm5fc3dpZ19wbF9vYmpzX3RvX2hhc2hfYnlfbmFtZSAoJGlucHV0LCAic3ZuX2NvbmZpZ190 ICoiLAogCQkJCQkgICBfZ2xvYmFsX3Bvb2wpOwpAQCAtMTM0LDYgKzE0NSwyMiBAQAogICAkMSA9 IHN2bl9zd2lnX3JiX2hhc2hfdG9fYXByX2hhc2hfcmV2bnVtKCRpbnB1dCwgX2dsb2JhbF9wb29s KTsKIH0KIAorI2lmZGVmIFNXSUdQWVRIT04KKyV0eXBlbWFwKGluKSAoc3ZuX3JhX2ZpbGVfcmV2 X2hhbmRsZXJfdCBoYW5kbGVyLCB2b2lkICpoYW5kbGVyX2JhdG9uKQoreworICAgJDEgPSBzdm5f c3dpZ19weV9yYV9maWxlX3Jldl9oYW5kbGVyX2Z1bmM7CisgICAkMiA9ICh2b2lkICopJGlucHV0 OworfQorI2VuZGlmCisKKyNpZmRlZiBTV0lHUFlUSE9OCisldHlwZW1hcChpbikgKGNvbnN0IHN2 bl9yYV9yZXBvcnRlcjJfdCAqcmVwb3J0ZXIsIHZvaWQgKnJlcG9ydF9iYXRvbikKK3sKKyAgJDEg PSAoc3ZuX3JhX3JlcG9ydGVyMl90ICopJnN3aWdfcHlfcmFfcmVwb3J0ZXIyOworICAkMiA9ICh2 b2lkICopJGlucHV0OworfQorI2VuZGlmCisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKICV7Cgo9 PT0gbW9kaWZpZWQgZmlsZSAnc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3N2bl93Yy5pJwotLS0g c3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3N2bl93Yy5pCQorKysgc3VidmVyc2lvbi9iaW5kaW5n cy9zd2lnL3N2bl93Yy5pCQpAQCAtMTkxLDYgKzE5MSwyMCBAQAogICAkMSA9IHN2bl9zd2lnX3Ji X2FycmF5X3RvX2Fwcl9hcnJheV9wcm9wKCRpbnB1dCwgcG9vbCk7CiB9CiAKKyNpZmRlZiBTV0lH UFlUSE9OCisldHlwZW1hcChpbiwgbnVtaW5wdXRzPTApCisgICAgIGFwcl9hcnJheV9oZWFkZXJf dCAqKnBhdHRlcm5zIChhcHJfYXJyYXlfaGVhZGVyX3QgKnRlbXApCit7CisgICQxID0gJnRlbXA7 Cit9CisldHlwZW1hcChhcmdvdXQsIGZyYWdtZW50PSJ0X291dHB1dF9oZWxwZXIiKQorICAgICBh cHJfYXJyYXlfaGVhZGVyX3QgKipwYXR0ZXJucworeworICAkcmVzdWx0ID0gdF9vdXRwdXRfaGVs cGVyKCRyZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN2bl9zd2lnX3B5X2FycmF5 X3RvX2xpc3QoKiQxKSk7Cit9CisjZW5kaWYKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIENhbGxi YWNrOiBzdm5fd2Nfbm90aWZ5X2Z1bmNfdAogICAgc3ZuX2NsaWVudF9jdHhfdApAQCAtMjM3LDYg KzI1MSwxMSBAQAogICAkMiA9ICRpbnB1dDsgLyogb3VyIGZ1bmN0aW9uIGlzIHRoZSBiYXRvbi4g Ki8KIH0KIAorJXR5cGVtYXAocHl0aG9uLGluKSAoc3ZuX3djX25vdGlmeV9mdW5jMl90IG5vdGlm eV9mdW5jLCB2b2lkICpub3RpZnlfYmF0b24pIHsKKyAgICQxID0gc3ZuX3N3aWdfcHlfbm90aWZ5 X2Z1bmMyOworICAgJDIgPSAkaW5wdXQ7IC8qIG91ciBmdW5jdGlvbiBpcyB0aGUgYmF0b24uICov Cit9CisKICV0eXBlbWFwKHBlcmw1LGluKSAoc3ZuX3djX3N0YXR1c19mdW5jX3Qgc3RhdHVzX2Z1 bmMsIHZvaWQgKnN0YXR1c19iYXRvbikgewogICAkMSA9IHN2bl9zd2lnX3BsX3N0YXR1c19mdW5j OwogICAkMiA9ICRpbnB1dDsgLyogb3VyIGZ1bmN0aW9uIGlzIHRoZSBiYXRvbi4gKi8KCj09PSBt b2RpZmllZCBmaWxlICdzdWJ2ZXJzaW9uL2xpYnN2bl9yYV9zdm4vY2xpZW50LmMnCi0tLSBzdWJ2 ZXJzaW9uL2xpYnN2bl9yYV9zdm4vY2xpZW50LmMJCisrKyBzdWJ2ZXJzaW9uL2xpYnN2bl9yYV9z dm4vY2xpZW50LmMJCkBAIC0xMTUxLDExICsxMTUxLDggQEAKICAgICB9CiAgIGFwcl9wb29sX2Rl c3Ryb3koc3VicG9vbCk7CiAKLSAgaWYgKG5yZWNlaXZlZCA8PSBsaW1pdCkKLSAgICB7Ci0gICAg ICAvKiBSZWFkIHRoZSByZXNwb25zZS4gKi8KLSAgICAgIFNWTl9FUlIoc3ZuX3JhX3N2bl9yZWFk X2NtZF9yZXNwb25zZShjb25uLCBwb29sLCAiIikpOwotICAgIH0KKyAgLyogUmVhZCB0aGUgcmVz cG9uc2UuICovCisgIFNWTl9FUlIoc3ZuX3JhX3N2bl9yZWFkX2NtZF9yZXNwb25zZShjb25uLCBw b29sLCAiIikpOwogCiAgIHJldHVybiBTVk5fTk9fRVJST1I7CiB9Cgo= PATCH Updated text/plain ZGlmZiAtTnVyIHN1YnZlcnNpb24tMS4zLjEvYnVpbGQuY29uZiBzdWJ2ZXJzaW9uLTEuMy4xLm5l dy9idWlsZC5jb25mCi0tLSBzdWJ2ZXJzaW9uLTEuMy4xL2J1aWxkLmNvbmYJMjAwNi0wNy0wNCAx MzoyNTo1OS4wMDAwMDAwMDAgKzAxMDAKKysrIHN1YnZlcnNpb24tMS4zLjEubmV3L2J1aWxkLmNv bmYJMjAwNi0wNy0wNCAxMzoyNjozNC4wMDAwMDAwMDAgKzAxMDAKQEAgLTM1MSw3ICszNTEsNyBA QAogdHlwZSA9IHN3aWdfbGliCiBsYW5nID0gcHl0aG9uCiBwYXRoID0gc3VidmVyc2lvbi9iaW5k aW5ncy9zd2lnL3B5dGhvbi9saWJzdm5fc3dpZ19weQotbGlicyA9IGxpYnN2bl9zdWJyIGxpYnN2 bl9kZWx0YSBsaWJzdm5fd2MgYXByCitsaWJzID0gbGlic3ZuX2NsaWVudCBsaWJzdm5fc3ViciBs aWJzdm5fZGVsdGEgbGlic3ZuX3djIGFwcgogbGluay1jbWQgPSAkKExJTkspICQoU1dJR19QWV9M SUJTKQogaW5zdGFsbCA9IHN3aWctcHktbGliCiAjIG5lZWQgc3BlY2lhbCBidWlsZCBydWxlIHRv IGluY2x1ZGUgLURTV0lHUFlUSE9OCmRpZmYgLU51ciBzdWJ2ZXJzaW9uLTEuMy4xL3N1YnZlcnNp b24vYmluZGluZ3Mvc3dpZy9pbmNsdWRlL2Fwci5zd2cgc3VidmVyc2lvbi0xLjMuMS5uZXcvc3Vi dmVyc2lvbi9iaW5kaW5ncy9zd2lnL2luY2x1ZGUvYXByLnN3ZwotLS0gc3VidmVyc2lvbi0xLjMu MS9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvaW5jbHVkZS9hcHIuc3dnCTIwMDUtMTAtMjUgMjA6 MTY6MzguMDAwMDAwMDAwICswMTAwCisrKyBzdWJ2ZXJzaW9uLTEuMy4xLm5ldy9zdWJ2ZXJzaW9u L2JpbmRpbmdzL3N3aWcvaW5jbHVkZS9hcHIuc3dnCTIwMDYtMDctMDQgMTM6MjY6MDQuMDAwMDAw MDAwICswMTAwCkBAIC0xNDYsMTQgKzE0NiwyNCBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAg Y3JlYXRlIGFuIE9VVFBVVCBhcmd1bWVudCBkZWZuIGZvciBhbiBhcHJfaGFzaF90ICoqIHdoaWNo IGlzIHN0b3JpbmcKKyAgIGRpcmVudCB2YWx1ZXMKKyovCisldHlwZW1hcChweXRob24saW4sbnVt aW5wdXRzPTApIGFwcl9oYXNoX3QgKipESVJFTlRIQVNIID0gYXByX2hhc2hfdCAqKk9VVFBVVDsK KyV0eXBlbWFwKHB5dGhvbixhcmdvdXQsZnJhZ21lbnQ9InRfb3V0cHV0X2hlbHBlciIpIGFwcl9o YXNoX3QgKipESVJFTlRIQVNIIHsKKyAgICAkcmVzdWx0ID0gdF9vdXRwdXRfaGVscGVyKCRyZXN1 bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdm5fc3dpZ19weV9jb252ZXJ0X2hh c2goKiQxLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBTV0lHVFlQRV9wX3N2bl9kaXJlbnRfdCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKSk7Cit9CisKKy8qIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgICBjcmVhdGUgYW4gT1VUUFVUIGFyZ3VtZW50IGRlZm4gZm9yIGFuIGFwcl9oYXNo X3QgKiogd2hpY2ggaXMgc3RvcmluZwogICAgcHJvcGVydHkgdmFsdWVzCiAqLwogCiAldHlwZW1h cChweXRob24saW4sbnVtaW5wdXRzPTApIGFwcl9oYXNoX3QgKipQUk9QSEFTSCA9IGFwcl9oYXNo X3QgKipPVVRQVVQ7Ci0ldHlwZW1hcChweXRob24sYXJnb3V0KSBhcHJfaGFzaF90ICoqUFJPUEhB U0ggewotICAgIC8qIHRvc3MgcHJpb3IgcmVzdWx0LCBnZXQgbmV3IHJlc3VsdCBmcm9tIHRoZSBo YXNoICovCi0gICAgUHlfREVDUkVGKCRyZXN1bHQpOwotICAgICRyZXN1bHQgPSBzdm5fc3dpZ19w eV9wcm9waGFzaF90b19kaWN0KCokMSk7CisldHlwZW1hcChweXRob24sYXJnb3V0LGZyYWdtZW50 PSJ0X291dHB1dF9oZWxwZXIiKSBhcHJfaGFzaF90ICoqUFJPUEhBU0ggeworICAgICRyZXN1bHQg PSB0X291dHB1dF9oZWxwZXIoJHJlc3VsdCwgc3ZuX3N3aWdfcHlfcHJvcGhhc2hfdG9fZGljdCgq JDEpKTsKIH0KIAogJXR5cGVtYXAocGVybDUsaW4sbnVtaW5wdXRzPTApIGFwcl9oYXNoX3QgKipQ Uk9QSEFTSCA9IGFwcl9oYXNoX3QgKipPVVRQVVQ7CmRpZmYgLU51ciBzdWJ2ZXJzaW9uLTEuMy4x L3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9pbmNsdWRlL3Byb3h5X2Fwci5zd2cgc3VidmVyc2lv bi0xLjMuMS5uZXcvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL2luY2x1ZGUvcHJveHlfYXByLnN3 ZwotLS0gc3VidmVyc2lvbi0xLjMuMS9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvaW5jbHVkZS9w cm94eV9hcHIuc3dnCTIwMDYtMDMtMTMgMDk6NTE6NDAuMDAwMDAwMDAwICswMDAwCisrKyBzdWJ2 ZXJzaW9uLTEuMy4xLm5ldy9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvaW5jbHVkZS9wcm94eV9h cHIuc3dnCTIwMDYtMDctMDQgMTM6MjY6MDUuMDAwMDAwMDAwICswMTAwCkBAIC0xMTIsNiArMTEy LDI4IEBACiAgICAgICAgICAgZGVsIHNlbGYuX3BhcmVudF9wb29sCiAgICAgICAgIGlmIGhhc2F0 dHIoc2VsZiwgIl9pc192YWxpZCIpOgogICAgICAgICAgIGRlbCBzZWxmLl9pc192YWxpZAorICAg ICAgICAKKyAgICAgICAgIyBDbGVhciBvdXQgYW55IHBvb2wtb3duZWQgcmVmZXJlbmNlcyBpbnNl cnRlZCBieSB0eXBlbWFwcworICAgICAgICBpZiBoYXNhdHRyKHNlbGYsICJfb3duZWRfcmVmcyIp OgorICAgICAgICAgIGRlbCBzZWxmLl9vd25lZF9yZWZzCisKKyAgICAgIGRlZiBfYWRkX293bmVk X3JlZihzZWxmLCByZWYpOgorICAgICAgICAiIiJBZGQgYSBuZXcgJ293bmVkJyByZWZlcmVuY2Ug LS0gaS5lLiBhIFB5dGhvbiBvYmplY3QgY29udGFpbmVkIGluIGEgQworICAgICAgICAgICBzdHJ1 Y3R1cmUgYWxsb2NhdGVkIGluIHRoaXMgcG9vbC4gIFVzZWQgYnkgdGhlIHR5cGVtYXBzIHRvIG1h bmFnZQorICAgICAgICAgICByZWZlcmVuY2UgY291bnRpbmcgc2VtYW50aWNzLiIiIgorICAgICAg ICBpZiBub3QgaGFzYXR0cihzZWxmLCAiX293bmVkX3JlZnMiKToKKyAgICAgICAgICBzZWxmLl9v d25lZF9yZWZzID0ge30KKyAgICAgICAgaWYgc2VsZi5fb3duZWRfcmVmcy5oYXNfa2V5KHJlZik6 CisgICAgICAgICAgc2VsZi5fb3duZWRfcmVmc1tyZWZdICs9IDEKKyAgICAgICAgZWxzZToKKyAg ICAgICAgICBzZWxmLl9vd25lZF9yZWZzW3JlZl0gPSAxCisgICAgICAKKyAgICAgIGRlZiBfcmVt b3ZlX293bmVkX3JlZihzZWxmLCByZWYpOgorICAgICAgICAiIiJSZW1vdmUgYW4gZXhpc3Rpbmcg J293bmVkJyByZWZlcmVuY2UuICBBbHNvIHVzZWQgYnkgdHlwZW1hcHMuIiIiCisgICAgICAgIGlm IGhhc2F0dHIoc2VsZiwgIl9vd25lZF9yZWZzIikgYW5kIHNlbGYuX293bmVkX3JlZnMuaGFzX2tl eShyZWYpOgorICAgICAgICAgIHNlbGYuX293bmVkX3JlZnNbcmVmXSAtPSAxCisgICAgICAgICAg aWYgc2VsZi5fb3duZWRfcmVmc1tyZWZdID09IDA6CisgICAgICAgICAgICBkZWwgc2VsZi5fb3du ZWRfcmVmc1tyZWZdCiAgIAogICAgICAgZGVmIF9fZGVsX18oc2VsZik6CiAgICAgICAgICIiIkF1 dG9tYXRpY2FsbHkgZGVzdHJveSBtZW1vcnkgcG9vbHMsIGlmIG5lY2Vzc2FyeSIiIgpkaWZmIC1O dXIgc3VidmVyc2lvbi0xLjMuMS9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvaW5jbHVkZS9wcm94 eV9hcHIuc3dnLm9yaWcgc3VidmVyc2lvbi0xLjMuMS5uZXcvc3VidmVyc2lvbi9iaW5kaW5ncy9z d2lnL2luY2x1ZGUvcHJveHlfYXByLnN3Zy5vcmlnCi0tLSBzdWJ2ZXJzaW9uLTEuMy4xL3N1YnZl cnNpb24vYmluZGluZ3Mvc3dpZy9pbmNsdWRlL3Byb3h5X2Fwci5zd2cub3JpZwkxOTcwLTAxLTAx IDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgc3VidmVyc2lvbi0xLjMuMS5uZXcvc3VidmVy c2lvbi9iaW5kaW5ncy9zd2lnL2luY2x1ZGUvcHJveHlfYXByLnN3Zy5vcmlnCTIwMDYtMDctMDQg MTM6MjY6MDUuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsMTg1IEBACisvKiBQcm94eSBjbGFz c2VzIGZvciBhcHJfKi4gR2VuZXJhdGVkIGJ5IGhhbmQuICovCisKKyNpZmRlZiBTV0lHUFlUSE9O CislaW5jbHVkZSBwcm94eS5zd2cKKworJW5vZGVmYXVsdCBhcHJfYXJyYXlfaGVhZGVyX3Q7Cisl bm9kZWZhdWx0IGFwcl9maWxlX3Q7Cislbm9kZWZhdWx0IGFwcl9oYXNoX3Q7Cislbm9kZWZhdWx0 IGFwcl9wb29sX3Q7CisKKyVvcGFxdWVfcHJveHkoYXByX2FycmF5X2hlYWRlcl90KTsKKyVvcGFx dWVfcHJveHkoYXByX2ZpbGVfdCk7Cislb3BhcXVlX3Byb3h5KGFwcl9oYXNoX3QpOworCislcHl0 aG9uY29kZSAleworaW1wb3J0IHRocmVhZGluZworCithcHBsaWNhdGlvbl9wb29sID0gTm9uZQor YXBwbGljYXRpb25fcG9vbF9sb2NrID0gdGhyZWFkaW5nLkxvY2soKQorY2xhc3MgR2VuZXJpY1NX SUdXcmFwcGVyOgorICBkZWYgX19pbml0X18oc2VsZiwgdGhpcywgcG9vbCk6CisgICAgIiIiQ3Jl YXRlIG5ldyBHZW5lcmljIFNXSUcgd3JhcHBlciBvYmplY3QiIiIKKyAgICBpbXBvcnQgd2Vha3Jl ZgorICAgIHNlbGYudGhpcyA9IHRoaXMKKyAgICBzZWxmLl9wYXJlbnRfcG9vbCA9IHBvb2wKKyAg ICBzZWxmLl9pc192YWxpZCA9IHdlYWtyZWYucmVmKHBvb2wuX2lzX3ZhbGlkKQorCisgIGRlZiBz ZXRfcGFyZW50X3Bvb2woc2VsZiwgcG9vbCk6CisgICAgIiIiU2V0IHRoZSBwYXJlbnQgcG9vbCBv ZiB0aGlzIG9iamVjdCIiIgorICAgIHNlbGYuX3BhcmVudF9wb29sID0gcG9vbAorCisgIGRlZiB2 YWxpZChzZWxmKToKKyAgICAiIiJJcyB0aGlzIG9iamVjdCB2YWxpZD8iIiIKKyAgICByZXR1cm4g c2VsZi5faXNfdmFsaWQoKQorCisgIGRlZiBhc3NlcnRfdmFsaWQoc2VsZik6CisgICAgIiIiQXNz ZXJ0IHRoYXQgdGhpcyBvYmplY3QgaXMgc3RpbGwgdmFsaWQiIiIKKyAgICBhc3NlcnQgc2VsZi52 YWxpZCgpLCAiVGhpcyBvYmplY3QgaGFzIGFscmVhZHkgYmVlbiBkZXN0cm95ZWQiCisKKyAgZGVm IF91bndyYXAoc2VsZik6CisgICAgIiIiUmV0dXJuIHVuZGVybHlpbmcgU1dJRyBvYmplY3QiIiIK KyAgICBzZWxmLmFzc2VydF92YWxpZCgpCisgICAgcmV0dXJuIHNlbGYudGhpcworIAorZGVmIF9t YXJrX3dlYWtwb29sX2ludmFsaWQod2Vha3Bvb2wpOgorICBpZiB3ZWFrcG9vbCBhbmQgd2Vha3Bv b2woKSBhbmQgaGFzYXR0cih3ZWFrcG9vbCgpLCAiX2lzX3ZhbGlkIik6CisgICAgZGVsIHdlYWtw b29sKCkuX2lzX3ZhbGlkCisKKyV9CisKK3N0cnVjdCBhcHJfcG9vbF90IHsKKyAgJWV4dGVuZCB7 CisgICAgJXB5dGhvbmNvZGUgJXsKKyAgICAgIGRlZiBzZXRfcGFyZW50X3Bvb2woc2VsZiwgcGFy ZW50X3Bvb2w9Tm9uZSk6CisgICAgICAgICIiIkNyZWF0ZSBhIG5ldyBtZW1vcnkgcG9vbCIiIgor ICAgICAgICBnbG9iYWwgYXBwbGljYXRpb25fcG9vbAorCisgICAgICAgIHRyeToKKyAgICAgICAg ICBhcHBsaWNhdGlvbl9wb29sX2xvY2suYWNxdWlyZSgpCisKKyAgICAgICAgICBzZWxmLl9wYXJl bnRfcG9vbCA9IHBhcmVudF9wb29sIG9yIGFwcGxpY2F0aW9uX3Bvb2wKKyAgICAgICAgICBzZWxm Ll9tYXJrX3ZhbGlkKCkKKyAgICAKKyAgICAgICAgICAjIFByb3RlY3QgaW1wb3J0YW50IGZ1bmN0 aW9ucyBmcm9tIEdDCisgICAgICAgICAgc2VsZi5fYXByX3Bvb2xfZGVzdHJveSA9IF9jb3JlLmFw cl9wb29sX2Rlc3Ryb3kKKyAgICAgICAgICBzZWxmLl9zdm5fc3dpZ19weV9jbGVhcl9hcHBsaWNh dGlvbl9wb29sID0gXAorICAgICAgICAgICAgX2NvcmUuc3ZuX3N3aWdfcHlfY2xlYXJfYXBwbGlj YXRpb25fcG9vbAorICAgIAorICAgICAgICAgICMgSWYgd2UgYXJlIGFuIGFwcGxpY2F0aW9uLWxl dmVsIHBvb2wsCisgICAgICAgICAgIyB0aGVuIHNldCB0aGlzIHBvb2wgdG8gYmUgdGhlIGFwcGxp Y2F0aW9uLWxldmVsIHBvb2wKKyAgICAgICAgICBpZiBub3Qgc2VsZi5fcGFyZW50X3Bvb2w6Cisg ICAgICAgICAgICBzdm5fc3dpZ19weV9zZXRfYXBwbGljYXRpb25fcG9vbChzZWxmLCBzZWxmKQor ICAgICAgICAgICAgYXBwbGljYXRpb25fcG9vbCA9IHNlbGYKKyAgICAgICAgZmluYWxseToKKyAg ICAgICAgICBhcHBsaWNhdGlvbl9wb29sX2xvY2sucmVsZWFzZSgpCisgIAorICAgICAgZGVmIHZh bGlkKHNlbGYpOgorICAgICAgICAiIiJDaGVjayB3aGV0aGVyIHRoaXMgbWVtb3J5IHBvb2wgYW5k IGl0cyBwYXJlbnRzCisgICAgICAgIGFyZSBzdGlsbCB2YWxpZCIiIgorICAgICAgICByZXR1cm4g aGFzYXR0cihzZWxmLCJfaXNfdmFsaWQiKQorICAKKyAgICAgIGRlZiBhc3NlcnRfdmFsaWQoc2Vs Zik6CisgICAgICAgICIiIkFzc2VydCB0aGF0IHRoaXMgbWVtb3J5X3Bvb2wgaXMgc3RpbGwgdmFs aWQuIiIiCisgICAgICAgIGFzc2VydCBzZWxmLnZhbGlkKCksICJUaGlzIHBvb2wgaGFzIGFscmVh ZHkgYmVlbiBkZXN0cm95ZWQiCisgIAorICAgICAgZGVmIGNsZWFyKHNlbGYpOgorICAgICAgICAi IiJDbGVhciBlbWJlZGRlZCBtZW1vcnkgcG9vbC4gSW52YWxpZGF0ZSBhbGwgc3VicG9vbHMuIiIi CisgICAgICAgIHBvb2wgPSBzZWxmLl9wYXJlbnRfcG9vbAorICAgICAgICBhcHJfcG9vbF9jbGVh cihzZWxmKQorICAgICAgICBzZWxmLnNldF9wYXJlbnRfcG9vbChwb29sKQorICAKKyAgICAgIGRl ZiBkZXN0cm95KHNlbGYpOgorICAgICAgICAiIiJEZXN0cm95IGVtYmVkZGVkIG1lbW9yeSBwb29s LiBJZiB5b3UgZG8gbm90IGRlc3Ryb3kKKyAgICAgICAgdGhlIG1lbW9yeSBwb29sIG1hbnVhbGx5 LCBQeXRob24gd2lsbCBkZXN0cm95IGl0CisgICAgICAgIGF1dG9tYXRpY2FsbHkuIiIiCisgICAg ICAgIGdsb2JhbCBhcHBsaWNhdGlvbl9wb29sCisgIAorICAgICAgICBzZWxmLmFzc2VydF92YWxp ZCgpCisgIAorICAgICAgICBpc19hcHBsaWNhdGlvbl9wb29sID0gbm90IHNlbGYuX3BhcmVudF9w b29sCisgIAorICAgICAgICAjIERlc3Ryb3kgcG9vbAorICAgICAgICBzZWxmLl9hcHJfcG9vbF9k ZXN0cm95KHNlbGYpCisgIAorICAgICAgICAjIENsZWFyIGFwcGxpY2F0aW9uIHBvb2wgaWYgbmVj ZXNzYXJ5CisgICAgICAgIGlmIGlzX2FwcGxpY2F0aW9uX3Bvb2w6CisgICAgICAgICAgYXBwbGlj YXRpb25fcG9vbCA9IE5vbmUKKyAgICAgICAgICBzZWxmLl9zdm5fc3dpZ19weV9jbGVhcl9hcHBs aWNhdGlvbl9wb29sKCkKKyAgCisgICAgICAgICMgTWFyayBzZWxmIGFzIGludmFsaWQKKyAgICAg ICAgaWYgaGFzYXR0cihzZWxmLCAiX3BhcmVudF9wb29sIik6CisgICAgICAgICAgZGVsIHNlbGYu X3BhcmVudF9wb29sCisgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgIl9pc192YWxpZCIpOgorICAg ICAgICAgIGRlbCBzZWxmLl9pc192YWxpZAorICAgICAgICAKKyAgICAgICAgIyBDbGVhciBvdXQg YW55IHBvb2wtb3duZWQgcmVmZXJlbmNlcyBpbnNlcnRlZCBieSB0eXBlbWFwcworICAgICAgICBp ZiBoYXNhdHRyKHNlbGYsICJfb3duZWRfcmVmcyIpOgorICAgICAgICAgIGRlbCBzZWxmLl9vd25l ZF9yZWZzCisKKyAgICAgIGRlZiBfYWRkX293bmVkX3JlZihzZWxmLCByZWYpOgorICAgICAgICAi IiJBZGQgYSBuZXcgJ293bmVkJyByZWZlcmVuY2UgLS0gaS5lLiBhIFB5dGhvbiBvYmplY3QgY29u dGFpbmVkIGluIGEgQworICAgICAgICAgICBzdHJ1Y3R1cmUgYWxsb2NhdGVkIGluIHRoaXMgcG9v bC4gIFVzZWQgYnkgdGhlIHR5cGVtYXBzIHRvIG1hbmFnZQorICAgICAgICAgICByZWZlcmVuY2Ug Y291bnRpbmcgc2VtYW50aWNzLiIiIgorICAgICAgICBpZiBub3QgaGFzYXR0cihzZWxmLCAiX293 bmVkX3JlZnMiKToKKyAgICAgICAgICBzZWxmLl9vd25lZF9yZWZzID0ge30KKyAgICAgICAgaWYg c2VsZi5fb3duZWRfcmVmcy5oYXNfa2V5KHJlZik6CisgICAgICAgICAgc2VsZi5fb3duZWRfcmVm c1tyZWZdICs9IDEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICBzZWxmLl9vd25lZF9yZWZzW3Jl Zl0gPSAxCisgICAgICAKKyAgICAgIGRlZiBfcmVtb3ZlX293bmVkX3JlZihzZWxmLCByZWYpOgor ICAgICAgICAiIiJSZW1vdmUgYW4gZXhpc3RpbmcgJ293bmVkJyByZWZlcmVuY2UuICBBbHNvIHVz ZWQgYnkgdHlwZW1hcHMuIiIiCisgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgIl9vd25lZF9yZWZz IikgYW5kIHNlbGYuX293bmVkX3JlZnMuaGFzX2tleShyZWYpOgorICAgICAgICAgIHNlbGYuX293 bmVkX3JlZnNbcmVmXSAtPSAxCisgICAgICAgICAgaWYgc2VsZi5fb3duZWRfcmVmc1tyZWZdID09 IDA6CisgICAgICAgICAgICBkZWwgc2VsZi5fb3duZWRfcmVmc1tyZWZdCisgIAorICAgICAgZGVm IF9fZGVsX18oc2VsZik6CisgICAgICAgICIiIkF1dG9tYXRpY2FsbHkgZGVzdHJveSBtZW1vcnkg cG9vbHMsIGlmIG5lY2Vzc2FyeSIiIgorICAgICAgICBpZiBzZWxmLnZhbGlkKCk6CisgICAgICAg ICAgc2VsZi5kZXN0cm95KCkKKyAgCisgICAgICBkZWYgX21hcmtfdmFsaWQoc2VsZik6CisgICAg ICAgICIiIk1hcmsgcG9vbCBhcyB2YWxpZCIiIgorCisgICAgICAgIHNlbGYuX3dlYWtwYXJlbnQg PSBOb25lCisKKyAgICAgICAgaWYgc2VsZi5fcGFyZW50X3Bvb2w6CisgICAgICAgICAgaW1wb3J0 IHdlYWtyZWYKKworICAgICAgICAgICMgTWFrZSBzdXJlIHRoYXQgdGhlIHBhcmVudCBvYmplY3Qg aXMgdmFsaWQKKyAgICAgICAgICBzZWxmLl9wYXJlbnRfcG9vbC5hc3NlcnRfdmFsaWQoKQorCisg ICAgICAgICAgIyBSZWZlciB0byBzZWxmIHVzaW5nIGEgd2Vha3JlZnJlbmNlIHNvIHRoYXQgd2Ug ZG9uJ3QKKyAgICAgICAgICAjIGNyZWF0ZSBhIHJlZmVyZW5jZSBjeWNsZQorICAgICAgICAgIHdl YWtzZWxmID0gd2Vha3JlZi5yZWYoc2VsZikKKworICAgICAgICAgICMgU2V0IHVwIGNhbGxiYWNr cyB0byBtYXJrIHBvb2wgYXMgaW52YWxpZCB3aGVuIHBhcmVudHMKKyAgICAgICAgICAjIGFyZSBk ZXN0cm95ZWQKKyAgICAgICAgICBzZWxmLl93ZWFrcGFyZW50ID0gd2Vha3JlZi5yZWYoc2VsZi5f cGFyZW50X3Bvb2wuX2lzX3ZhbGlkLAorICAgICAgICAgICAgbGFtYmRhIHg6IF9tYXJrX3dlYWtw b29sX2ludmFsaWQod2Vha3NlbGYpKQorICAKKyAgICAgICAgIyBNYXJrIHBvb2wgYXMgdmFsaWQK KyAgICAgICAgc2VsZi5faXNfdmFsaWQgPSBsYW1iZGE6IDEKKworICAgICAgZGVmIF93cmFwKHNl bGYsIG9iaik6CisgICAgICAgICIiIk1hcmsgYSBTV0lHIG9iamVjdCBhcyBvd25lZCBieSB0aGlz IHBvb2wiIiIKKyAgICAgICAgc2VsZi5hc3NlcnRfdmFsaWQoKQorICAgICAgICBpZiBoYXNhdHRy KG9iaiwgInNldF9wYXJlbnRfcG9vbCIpOgorICAgICAgICAgIG9iai5zZXRfcGFyZW50X3Bvb2wo c2VsZikKKyAgICAgICAgICByZXR1cm4gb2JqIAorICAgICAgICBlbGlmIG9iaiBpcyBOb25lOgor ICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgcmV0dXJuIEdl bmVyaWNTV0lHV3JhcHBlcihvYmosIHNlbGYpCisKKyAgICAlfQorICB9Cit9OworJXB5dGhvbmNv ZGUgJXsKKyMgSW5pdGlhbGl6ZSBhIGdsb2JhbCBwb29sCitzdm5fcG9vbF9jcmVhdGUoKQorJX0K KyNlbmRpZgorCmRpZmYgLU51ciBzdWJ2ZXJzaW9uLTEuMy4xL3N1YnZlcnNpb24vYmluZGluZ3Mv c3dpZy9pbmNsdWRlL3N2bl90eXBlcy5zd2cgc3VidmVyc2lvbi0xLjMuMS5uZXcvc3VidmVyc2lv bi9iaW5kaW5ncy9zd2lnL2luY2x1ZGUvc3ZuX3R5cGVzLnN3ZwotLS0gc3VidmVyc2lvbi0xLjMu MS9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvaW5jbHVkZS9zdm5fdHlwZXMuc3dnCTIwMDUtMTAt MjUgMjA6MDM6MjEuMDAwMDAwMDAwICswMTAwCisrKyBzdWJ2ZXJzaW9uLTEuMy4xLm5ldy9zdWJ2 ZXJzaW9uL2JpbmRpbmdzL3N3aWcvaW5jbHVkZS9zdm5fdHlwZXMuc3dnCTIwMDYtMDctMDQgMTM6 MjY6MDUuMDAwMDAwMDAwICswMTAwCkBAIC00MzAsNiArNDMwLDEyIEBACiAgICQyID0gKHZvaWQg Kilzdm5fc3dpZ19yYl9tYWtlX2JhdG9uKCRpbnB1dCwgX2dsb2JhbF9zdm5fc3dpZ19yYl9wb29s KTsKIH07CiAKKyV0eXBlbWFwKHB5dGhvbiwgaW4pIChzdm5fY29tbWl0X2NhbGxiYWNrMl90IGNh bGxiYWNrLCB2b2lkICpjYWxsYmFja19iYXRvbikKK3sKKyAgJDEgPSBzdm5fc3dpZ19weV9jb21t aXRfY2FsbGJhY2syOworICAkMiA9ICh2b2lkICopJGlucHV0OworfQorCiAvKiAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQogICAgQ2FsbGJhY2s6IHN2bl9jYW5jZWxfZnVuY190CiAqLwpAQCAtNDkzLDYgKzQ5OSw2 MCBAQAogICAkMSA9IHN2bl9zd2lnX3JiX21ha2Vfc3RyZWFtKCRpbnB1dCk7CiB9CiAKKyNpZmRl ZiBTV0lHUFlUSE9OCisldHlwZW1hcChpbikgKHN2bl9jb21taXRfY2FsbGJhY2tfdCBjYWxsYmFj aywgdm9pZCAqY2FsbGJhY2tfYmF0b24pCit7CisgICQxID0gc3ZuX3N3aWdfcHlfY29tbWl0X2Nh bGxiYWNrOworICAkMiA9ICh2b2lkICopJGlucHV0OworfQorI2VuZGlmCisKKyNpZmRlZiBTV0lH UFlUSE9OCisldHlwZW1hcChpbikgKHN2bl9jb21taXRfY2FsbGJhY2tfdCBjYWxsYmFjaywgdm9p ZCAqY2FsbGJhY2tfYmF0b24pCit7CisgICQxID0gc3ZuX3N3aWdfcHlfY29tbWl0X2NhbGxiYWNr OworICAkMiA9ICh2b2lkICopJGlucHV0OworfQorI2VuZGlmCisKKy8qIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgICBNYXBwZXIgdG8gYXV0b21hdGljYWxseSB0dXJuIFB5dGhvbiBvYmplY3RzIGludG8gdm9p ZCogYmF0b25zIG9uIGFzc2lnbm1lbnQKKyovCisKKyNpZmRlZiBTV0lHUFlUSE9OCisldHlwZW1h cChpbikgdm9pZCAqUFlfQVNfVk9JRCAoUHlPYmplY3QgKm5ld1JlZikgeworICBuZXdSZWYgPSAk aW5wdXQ7CisgIGlmICgkaW5wdXQgPT0gUHlfTm9uZSkgeworICAgICQxID0gbmV3UmVmID0gTlVM TDsKKyAgfSBlbHNlIHsKKyAgICBuZXdSZWYgPSAkaW5wdXQ7CisgICAgJDEgPSAodm9pZCAqKSRp bnB1dDsKKyAgfQorICBpZiAoc3ZuX3N3aWdfcHlfcG9vbF9zZXRfb3duZWRfcmVmKG9iajAsIChQ eU9iamVjdCAqKWFyZzEtPiQxX25hbWUsIG5ld1JlZikpIHsKKyAgICBTV0lHX2ZhaWw7CisgIH0K K30KKyNlbmRpZgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgTWFwcGVyIHRvIGF1dG9tYXRpY2Fs bHkgdHVybiBQeXRob24gb2JqZWN0cyBpbnRvIHZvaWQqIGJhdG9ucyBvbiBhc3NpZ25tZW50Cisq LworCisjaWZkZWYgU1dJR1BZVEhPTgorJXR5cGVtYXAoaW4pIHZvaWQgKlBZX0FTX1ZPSUQgKFB5 T2JqZWN0ICpuZXdSZWYpIHsKKyAgbmV3UmVmID0gJGlucHV0OworICBpZiAoJGlucHV0ID09IFB5 X05vbmUpIHsKKyAgICAkMSA9IG5ld1JlZiA9IE5VTEw7CisgIH0gZWxzZSB7CisgICAgbmV3UmVm ID0gJGlucHV0OworICAgICQxID0gKHZvaWQgKikkaW5wdXQ7CisgIH0KKyAgaWYgKHN2bl9zd2ln X3B5X3Bvb2xfc2V0X293bmVkX3JlZihvYmowLCAoUHlPYmplY3QgKilhcmcxLT4kMV9uYW1lLCBu ZXdSZWYpKSB7CisgICAgU1dJR19mYWlsOworICB9Cit9CisjZW5kaWYKKwogLyogLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KICAgIFdyYXAgdGhlIGRpZ2VzdCBvdXRwdXQgZm9yIGZ1bmN0aW9ucyBwb3B1bGF0aW5n IGRpZ2VzdHMuCiAqLwpkaWZmIC1OdXIgc3VidmVyc2lvbi0xLjMuMS9zdWJ2ZXJzaW9uL2JpbmRp bmdzL3N3aWcvaW5jbHVkZS9zdm5fdHlwZXMuc3dnLm9yaWcgc3VidmVyc2lvbi0xLjMuMS5uZXcv c3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL2luY2x1ZGUvc3ZuX3R5cGVzLnN3Zy5vcmlnCi0tLSBz dWJ2ZXJzaW9uLTEuMy4xL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9pbmNsdWRlL3N2bl90eXBl cy5zd2cub3JpZwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgc3VidmVy c2lvbi0xLjMuMS5uZXcvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL2luY2x1ZGUvc3ZuX3R5cGVz LnN3Zy5vcmlnCTIwMDYtMDctMDQgMTM6MjY6MDUuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEs Nzk1IEBACisvKgorICogc3ZuX3R5cGVzLnN3ZyA6ICBTV0lHIGluY2x1ZGUgZmlsZSBmb3Igc3Zu X3R5cGVzLmgKKyAqCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMDMg Q29sbGFiTmV0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlz IGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91 IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uICBUaGUg dGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vc3VidmVyc2lvbi50aWdyaXMu b3JnL2xpY2Vuc2UtMS5odG1sLgorICogSWYgbmV3ZXIgdmVyc2lvbnMgb2YgdGhpcyBsaWNlbnNl IGFyZSBwb3N0ZWQgdGhlcmUsIHlvdSBtYXkgdXNlIGEKKyAqIG5ld2VyIHZlcnNpb24gaW5zdGVh ZCwgYXQgeW91ciBvcHRpb24uCisgKgorICogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1 bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKKyAqIGluZGl2aWR1YWxzLiAgRm9yIGV4 YWN0IGNvbnRyaWJ1dGlvbiBoaXN0b3J5LCBzZWUgdGhlIHJldmlzaW9uCisgKiBoaXN0b3J5IGFu ZCBsb2dzLCBhdmFpbGFibGUgYXQgaHR0cDovL3N1YnZlcnNpb24udGlncmlzLm9yZy8uCisgKiA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQorICovCisKKy8qIFRoaXMgaW50ZXJmYWNlIGZpbGUgb25seSBkZWZpbmVzIHR5 cGVzIGFuZCB0aGVpciByZWxhdGVkIGluZm9ybWF0aW9uLgorICAgVGhlcmUgaXMgbm8gbW9kdWxl IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGludGVyZmFjZSBmaWxlLiAqLworCislaW5jbHVkZSBhcHIu c3dnCislaW5jbHVkZSBleGNlcHRpb24uaQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgQ3JlYXRl IGEgdHlwZW1hcCB0byBkZWZpbmUgInR5cGUgKioiIGFzIE9VVCBwYXJhbWV0ZXJzLgorCisgICBO b3RlOiBTV0lHVFlQRSBpcyBqdXN0IGEgcGxhY2Vob2xkZXIgZm9yICJzb21lIGFyYml0cmFyeSB0 eXBlIi4gVGhpcworICAgICAgICAgdHlwZW1hcCB3aWxsIGJlIGFwcGxpZWQgb250byBhICJyZWFs IiB0eXBlLgorKi8KKyV0eXBlbWFwKHB5dGhvbiwgaW4sIG51bWlucHV0cz0wKSBTV0lHVFlQRSAq Kk9VVFBBUkFNICgkKjFfdHlwZSB0ZW1wKSB7CisgICAgJDEgPSAoJDFfbHR5cGUpJnRlbXA7Cit9 CisldHlwZW1hcChwZXJsNSwgaW4sIG51bWlucHV0cz0wKSBTV0lHVFlQRSAqKk9VVFBBUkFNICgk KjFfdHlwZSB0ZW1wKSB7CisgICAgJDEgPSAoJDFfbHR5cGUpJnRlbXA7Cit9CisldHlwZW1hcChy dWJ5LCBpbiwgbnVtaW5wdXRzPTApIFNXSUdUWVBFICoqT1VUUEFSQU0gKCQqMV90eXBlIHRlbXAp IHsKKyAgdGVtcCA9IE5VTEw7CisgICQxID0gKCQxX2x0eXBlKSZ0ZW1wOworfQorCisldHlwZW1h cChweXRob24sIGFyZ291dCwgZnJhZ21lbnQ9InRfb3V0cHV0X2hlbHBlciIpIFNXSUdUWVBFICoq T1VUUEFSQU0geworICAgICRyZXN1bHQgPSB0X291dHB1dF9oZWxwZXIoJHJlc3VsdCwKKyAgICAg IHN2bl9zd2lnX05ld1BvaW50ZXJPYmooKiQxLCAkKjFfZGVzY3JpcHRvciwgX2dsb2JhbF9zdm5f c3dpZ19weV9wb29sKSk7Cit9CisldHlwZW1hcChwZXJsNSwgYXJnb3V0KSBTV0lHVFlQRSAqKk9V VFBBUkFNIHsKKyAgICBTVChhcmd2aSkgPSBzdl9uZXdtb3J0YWwoKTsKKyAgICBTV0lHX01ha2VQ dHIoU1QoYXJndmkrKyksICh2b2lkICopKiQxLCAkKjFfZGVzY3JpcHRvciwwKTsKK30KKyV0eXBl bWFwKHJ1YnksIGFyZ291dCwgZnJhZ21lbnQ9Im91dHB1dF9oZWxwZXIiKSBTV0lHVFlQRSAqKk9V VFBBUkFNIHsKKyAgJHJlc3VsdCA9IG91dHB1dF9oZWxwZXIoJHJlc3VsdCwgU1dJR19OZXdQb2lu dGVyT2JqKCokMSwgJCoxX2Rlc2NyaXB0b3IsIDApKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAgICVhcHBseS1pbmcgb2YgdHlwZW1hcHMKKyovCisKKyVhcHBseSBTV0lHVFlQRSAqKk9VVFBB UkFNIHsKKyAgc3ZuX3N0cmVhbV90ICoqLAorICBzdm5fY29tbWl0X2luZm9fdCAqKgorfTsKKwor JWFwcGx5IGxvbmcgKk9VVFBVVCB7IHN2bl9yZXZudW1fdCAqIH07CislYXBwbHkgaW50ICpPVVRQ VVQgeyBzdm5fYm9vbGVhbl90ICogfTsKKworLyogc3ZuX2ZzX2NoZWNrX3BhdGgoKSAqLworJWFw cGx5IGxvbmcgKk9VVFBVVCB7IHN2bl9ub2RlX2tpbmRfdCAqIH07CisKKy8qIHN2bl9jb25maWdf Z2V0X3NlcnZlcl9zZXR0aW5nX2ludCgpICovCislYXBwbHkgbG9uZyBsb25nICpPVVRQVVQgeyBh cHJfaW50NjRfdCAqIH07CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBDcmVhdGUgYSB0eXBlbWFw IGZvciBzcGVjaWZ5aW5nIHN0cmluZyBhcmdzIHRoYXQgbWF5IGJlIE5VTEwuCisqLworJXR5cGVt YXAocHl0aG9uLCBpbiwgcGFyc2U9InoiKSBjb25zdCBjaGFyICpNQVlfQkVfTlVMTCAiIjsKKwor I2lmZGVmIFNXSUdQRVJMCislYXBwbHkgY29uc3QgY2hhciAqIHsgY29uc3QgY2hhciAqTUFZX0JF X05VTEwgfTsKKyNlbmRpZgorCisldHlwZW1hcChydWJ5LCBpbikgY29uc3QgY2hhciogTUFZX0JF X05VTEwKK3sKKyAgaWYgKE5JTF9QKCRpbnB1dCkpIHsKKyAgICAkMSA9IE5VTEw7CisgIH0gZWxz ZSB7CisgICAgJDEgPSBTdHJpbmdWYWx1ZVB0cigkaW5wdXQpOworICB9Cit9CisKKyV0eXBlbWFw KHJ1YnksIG91dCkgY29uc3QgY2hhciAqCit7CisgIGlmICgkMSkgeworICAgICRyZXN1bHQgPSBy Yl9zdHJfbmV3MigkMSk7CisgIH0gZWxzZSB7CisgICAgJHJlc3VsdCA9IFFuaWw7CisgIH0KK30K KworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIGNvbnN0IGNoYXIgKmhlYWRlcl9lbmNvZGluZworICAg c3ZuX2RpZmZfZmlsZV9vdXRwdXRfdW5pZmllZDIKKyAgIHN2bl9jbGllbnRfZGlmZjMKKyovCisl dHlwZW1hcChydWJ5LCBpbikgY29uc3QgY2hhciAqaGVhZGVyX2VuY29kaW5nCit7CisgICQxID0g TlVMTDsKKyAgCisgIGlmIChOSUxfUCgkaW5wdXQpKSB7CisgIH0gZWxzZSBpZiAoVFlQRSgkaW5w dXQpID09IFRfRklYTlVNKSB7CisgICAgJDEgPSAoY2hhciAqKU5VTTJJTlQoJGlucHV0KTsKKyAg ICBpZiAoISgkMSA9PSBBUFJfTE9DQUxFX0NIQVJTRVQgfHwgJDEgPT0gQVBSX0RFRkFVTFRfQ0hB UlNFVCkpIHsKKyAgICAgICQxID0gTlVMTDsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgJDEgPSBT dHJpbmdWYWx1ZVB0cigkaW5wdXQpOworICB9CisgIAorICBpZiAoISQxKSB7CisgICAgJDEgPSAo Y2hhciAqKUFQUl9MT0NBTEVfQ0hBUlNFVDsKKyAgfQorfQorCisvKiAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICAgSW5wdXQgb2Ygc2NyaXB0aW5nIGhhc2gvZGljdGlvbmFyeSAoc3RyaW5nID0+IHN0cmluZykK KyAgIGNvbnZlcnRlZCB0byBhcHJfaGFzaF90IChjb25zdCBjaGFyICogPT4gY29uc3QgY2hhciAq KQorKi8KKyV0eXBlbWFwKHB5dGhvbiwgaW4pIGFwcl9oYXNoX3QgKlNUUklOR19UT19TVFJJTkcg eworICAgICQxID0gc3ZuX3N3aWdfcHlfc3RyaW5naGFzaF9mcm9tX2RpY3QgKCRpbnB1dCwgX2ds b2JhbF9wb29sKTsKK30KKyV0eXBlbWFwKHBlcmw1LCBpbikgYXByX2hhc2hfdCAqU1RSSU5HX1RP X1NUUklORyB7CisgICAgJDEgPSBzdm5fc3dpZ19wbF9zdHJpbmdzX3RvX2hhc2ggKCRpbnB1dCwg X2dsb2JhbF9wb29sKTsKK30KKyV0eXBlbWFwKHJ1YnksIGluKSBhcHJfaGFzaF90ICpTVFJJTkdf VE9fU1RSSU5HIHsKKyAgICAkMSA9IHN2bl9zd2lnX3JiX2hhc2hfdG9fYXByX2hhc2hfc3RyaW5n KCRpbnB1dCwgX2dsb2JhbF9wb29sKTsKK30KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgRGVm aW5lIGEgbW9yZSByZWZpbmVkICdtZW1iZXJpbicgdHlwZW1hcCBmb3IgJ2NvbnN0IGNoYXIgKicg bWVtYmVycy4gVGhpcworICAgaXMgdXNlZCBpbiBwbGFjZSBvZiB0aGUgJ2NoYXIgKicgaGFuZGxl ciBkZWZpbmVkIGF1dG9tYXRpY2FsbHkuCisKKyAgIFdlIG5lZWQgdG8gZG8gdGhlIGZyZWUvbWFs bG9jL3N0cmNweSBzcGVjaWFsIGJlY2F1c2Ugb2YgdGhlIGNvbnN0CisqLworJXR5cGVtYXAobWVt YmVyaW4pIGNvbnN0IGNoYXIgKiB7CisgICAgYXByX3NpemVfdCBsZW4gPSBzdHJsZW4oJGlucHV0 KSArIDE7CisgICAgY2hhciAqY29waWVkOworICAgIGlmICgkMSkgZnJlZSgoY2hhciAqKSQxKTsK KyAgICBjb3BpZWQgPSBtYWxsb2MobGVuKTsKKyAgICBtZW1jcHkoY29waWVkLCAkaW5wdXQsIGxl bik7CisgICAgJDEgPSBjb3BpZWQ7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBTcGVjaWZ5 IGhvdyBzdm5fZXJyb3JfdCByZXR1cm5zIGFyZSB0dXJuZWQgaW50byBleGNlcHRpb25zLgorKi8K KyV0eXBlbWFwKHB5dGhvbiwgb3V0KSBzdm5fZXJyb3JfdCAqIHsKKyAgICBpZiAoJDEgIT0gTlVM TCkgeworICAgICAgICBpZiAoJDEtPmFwcl9lcnIgIT0gU1ZOX0VSUl9TV0lHX1BZX0VYQ0VQVElP Tl9TRVQpCisgICAgICAgICAgICBzdm5fc3dpZ19weV9zdm5fZXhjZXB0aW9uKCQxKTsKKyAgICAg ICAgZWxzZQorICAgICAgICAgICAgc3ZuX2Vycm9yX2NsZWFyKCQxKTsKKyAgICAgICAgU1dJR19m YWlsOworICAgIH0KKyAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CisgICAgJHJlc3VsdCA9IFB5X05v bmU7Cit9CisKKyV0eXBlbWFwKHBlcmw1LG91dCkgc3ZuX2Vycm9yX3QgKiB7CisgICAgaWYgKCQx KSB7CisgICAgICAgIFNWICpleGNlcHRpb25faGFuZGxlciA9IHBlcmxfZ2V0X3N2ICgiU1ZOOjpF cnJvcjo6aGFuZGxlciIsIEZBTFNFKTsKKworICAgICAgICBpZiAoU3ZPSyhleGNlcHRpb25faGFu ZGxlcikpIHsKKyAgICAgICAgICAgIFNWICpjYWxsYmFja19yZXN1bHQ7CisKKyAgICAgICAgICAg IHN2bl9zd2lnX3BsX2NhbGxiYWNrX3RodW5rIChDQUxMX1NWLCBleGNlcHRpb25faGFuZGxlciwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY2FsbGJhY2tfcmVzdWx0 LCAiUyIsICQxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQxX2Rl c2NyaXB0b3IpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgJHJlc3VsdCA9IHN2X25l d21vcnRhbCgpOworICAgICAgICAgICAgU1dJR19NYWtlUHRyICgkcmVzdWx0LCAodm9pZCAqKSQx LCAkMV9kZXNjcmlwdG9yICwwKTsKKyAgICAgICAgICAgIGFyZ3ZpKys7CisgICAgICAgIH0KKyAg ICB9Cit9CisKKyV0eXBlbWFwKHJ1YnksIG91dCkgc3ZuX2Vycm9yX3QgKgoreworICBpZiAoJDEp IHsKKyAgICBzdm5fc3dpZ19yYl9wb3BfcG9vbChfZ2xvYmFsX3N2bl9zd2lnX3JiX3Bvb2wpOwor ICAgIHN2bl9zd2lnX3JiX2hhbmRsZV9zdm5fZXJyb3IoJDEpOworICB9CisgICRyZXN1bHQgPSBR bmlsOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgRGVmaW5lIGFuIE9VVFBVVCB0eXBlbWFw IGZvciAnc3ZuX2ZpbGVzaXplX3QgKicuICBGb3Igbm93LCB3ZSdsbAorICAgdHJlYXQgaXQgYXMg YSAnbG9uZycgZXZlbiBpZiB0aGF0IGlzbid0IGVudGlyZWx5IGNvcnJlY3QuLi4gIAorKi8KKyV0 eXBlbWFwKHB5dGhvbixpbixudW1pbnB1dHM9MCkgc3ZuX2ZpbGVzaXplX3QgKiAoc3ZuX2ZpbGVz aXplX3QgdGVtcCkKKyAgICAiJDEgPSAmdGVtcDsiOworCisldHlwZW1hcChwZXJsNSxpbixudW1p bnB1dHM9MCkgc3ZuX2ZpbGVzaXplX3QgKiAoc3ZuX2ZpbGVzaXplX3QgdGVtcCkKKyAgICAiJDEg PSAmdGVtcDsiOworCisldHlwZW1hcChydWJ5LGluLG51bWlucHV0cz0wKSBzdm5fZmlsZXNpemVf dCAqIChzdm5fZmlsZXNpemVfdCB0ZW1wKQorICAgICIkMSA9ICZ0ZW1wOyI7CisKKyV0eXBlbWFw KHB5dGhvbixhcmdvdXQsZnJhZ21lbnQ9InRfb3V0cHV0X2hlbHBlciIpIHN2bl9maWxlc2l6ZV90 ICoKKyAgICAiJHJlc3VsdCA9IHRfb3V0cHV0X2hlbHBlcigkcmVzdWx0LAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFB5TG9uZ19Gcm9tTG9uZ0xvbmcoKGFwcl9pbnQ2NF90KSAoKiQx KSkpOyI7CisKKy8qIFhYWDogYXBwbHkgbG9uZyBsb25nICpPVVRQVVQgZG9lc24ndCB0cmFjayAk MSBjb3JyZWN0bHkgKi8KKyV0eXBlbWFwKHBlcmw1LGFyZ291dCkgc3ZuX2ZpbGVzaXplX3QgKiB7 CisgICAgY2hhciB0ZW1wWzI1Nl07CisgICAgc3ByaW50Zih0ZW1wLCIlIiBBUFJfSU5UNjRfVF9G TVQsICokMSk7CisgICAgU1QoYXJndmkpID0gc3ZfbmV3bW9ydGFsKCk7CisgICAgc3Zfc2V0cHYo KFNWKilTVChhcmd2aSsrKSwgdGVtcCk7Cit9OworCisldHlwZW1hcChydWJ5LGFyZ291dCxmcmFn bWVudD0ib3V0cHV0X2hlbHBlciIpIHN2bl9maWxlc2l6ZV90ICoKKyAgICAiJHJlc3VsdCA9IG91 dHB1dF9oZWxwZXIoJHJlc3VsdCwgTEwyTlVNKChhcHJfaW50NjRfdCkgKCokMSkpKTsiOworCisv KiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorICAgRGVmaW5lIGEgZ2VuZXJhbCBwdHIvbGVuIHR5cGVtYXAuIFRo aXMgdGFrZXMgYSBzaW5nbGUgc2NyaXB0IGFyZ3VtZW50CisgICBhbmQgZXhwYW5kcyBpdCBpbnRv IGEgcHRyL2xlbiBwYWlyIGZvciB0aGUgbmF0aXZlIGNhbGwuCisqLworJXR5cGVtYXAocHl0aG9u LCBpbikgKGNvbnN0IGNoYXIgKlBUUiwgYXByX3NpemVfdCBMRU4pIHsKKyAgICBpZiAoIVB5U3Ry aW5nX0NoZWNrKCRpbnB1dCkpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVF cnJvciwgImV4cGVjdGluZyBhIHN0cmluZyIpOworICAgICAgICBTV0lHX2ZhaWw7CisgICAgfQor ICAgICQxID0gUHlTdHJpbmdfQVNfU1RSSU5HKCRpbnB1dCk7CisgICAgJDIgPSBQeVN0cmluZ19H RVRfU0laRSgkaW5wdXQpOworfQorCisldHlwZW1hcChwZXJsNSwgaW4pIChjb25zdCBjaGFyICpQ VFIsIGFwcl9zaXplX3QgTEVOKSB7CisgICAgaWYgKFN2UE9LKCRpbnB1dCkpIHsKKyAgICAgICAg JDEgPSBTdlBWKCRpbnB1dCwgJDIpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8qIHNldCB0byAw IHRvIGF2b2lkIHdhcm5pbmcgKi8KKyAgICAgICAgJDEgPSAwOworICAgICAgICAkMiA9IDA7Cisg ICAgICAgIFNXSUdfY3JvYWsoIkV4cGVjdGluZyBhIHN0cmluZyIpOworICAgIH0KK30KKworLyog LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAgIEhhbmRsZSByZXRyaWV2aW5nIHRoZSBlcnJvciBtZXNzYWdlIGZy b20gc3ZuX3N0cmVycm9yCisqLworCisldHlwZW1hcChwZXJsNSxpbixudW1pbnB1dHM9MCkgKGNo YXIgKmJ1ZiwgYXByX3NpemVfdCBidWZzaXplKSAoIGNoYXIgdGVtcFsxMjhdICkgeworICAgIG1l bXNldCAodGVtcCwwLDEyOCk7IC8qIHBhcmFub2lhICovCisgICAgJDEgPSB0ZW1wOworICAgICQy ID0gMTI4OworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgRGVmaW5lIGEgZ2VuZXJpYyBhcmdp bml0IG1hcHBpbmcgZm9yIHBvb2xzLgorKi8KKworI2lmZGVmIFNXSUdQWVRIT04KKyVkZWZpbmUg c3ZuX3N3aWdfcHlfcG9vbF9jaGVjayhwb29sKQorICBpZiAocG9vbCAhPSBOVUxMICYmICFQeU9i amVjdF9IYXNBdHRyU3RyaW5nKHBvb2wsIChjaGFyICopIl9tYXJrX3ZhbGlkIikpCisgIHsKKyAg ICBpbnQgYXJnbnVtID0gUHlUdXBsZV9HRVRfU0laRShhcmdzKTsKKyAgICBTV0lHX1B5dGhvbl9U eXBlRXJyb3IoU1dJR19UeXBlUHJldHR5TmFtZSgkZGVzY3JpcHRvciksIHBvb2wpOworICAgIFNX SUdfYXJnX2ZhaWwoYXJnbnVtKTsKKyAgICBTV0lHX2ZhaWw7CisgIH0KKyVlbmRkZWYKKyVkZWZp bmUgc3ZuX3N3aWdfcHlfcG9vbF9jcmVhdGVfc3VicG9vbChweV9wb29sLCBwb29sKQorICBpZiAo cHlfcG9vbCAhPSBOVUxMKSB7CisgICAgcG9vbCA9IHN2bl9wb29sX2NyZWF0ZShwb29sKTsKKyAg ICBweV9wb29sID0gc3ZuX3N3aWdfTmV3UG9pbnRlck9iaihwb29sLCAkZGVzY3JpcHRvciwgcHlf cG9vbCk7CisgIH0KKyVlbmRkZWYKKyNlbmRpZgorCisldHlwZW1hcChweXRob24sIGRlZmF1bHQp IGFwcl9wb29sX3QgKihhcHJfcG9vbF90ICpfZ2xvYmFsX3Bvb2wsCisgIFB5T2JqZWN0ICpfZ2xv YmFsX3N2bl9zd2lnX3B5X3Bvb2wsIGludCBfZ2xvYmFsX3Bvb2xfaXNfZGVmYXVsdF9wb29sKQor eworICBpbnQgYXJnbnVtID0gUHlUdXBsZV9HRVRfU0laRShhcmdzKSAtIDE7CisgIF9nbG9iYWxf cG9vbF9pc19hcHBsaWNhdGlvbl9wb29sID0gMDsKKyAgX2dsb2JhbF9wb29sX2lzX2RlZmF1bHRf cG9vbCA9IDE7CisgIGlmIChhcmdudW0gPj0gMCkgeworICAgIFB5T2JqZWN0ICppbnB1dCA9IFB5 VHVwbGVfR0VUX0lURU0oYXJncywgYXJnbnVtKTsKKyAgICBpZiAoaW5wdXQgIT0gUHlfTm9uZSAm JgorICAgICAgICBQeU9iamVjdF9IYXNBdHRyU3RyaW5nKGlucHV0LCAoY2hhciAqKSJfbWFya192 YWxpZCIpKSB7CisgICAgICBfZ2xvYmFsX3Bvb2wgPSBzdm5fc3dpZ19NdXN0R2V0UHRyKGlucHV0 LCAkMV9kZXNjcmlwdG9yLCBhcmdudW0rMSwgTlVMTCk7CisgICAgICBpZiAoUHlFcnJfT2NjdXJy ZWQoKSkgeworICAgICAgICBfZ2xvYmFsX3N2bl9zd2lnX3B5X3Bvb2wgPSBOVUxMOworICAgICAg ICBTV0lHX2ZhaWw7CisgICAgICB9CisgICAgICBfZ2xvYmFsX3N2bl9zd2lnX3B5X3Bvb2wgPSBp bnB1dDsKKyAgICAgIFB5X1hJTkNSRUYoX2dsb2JhbF9zdm5fc3dpZ19weV9wb29sKTsKKyAgICAg IF9nbG9iYWxfcG9vbF9pc19kZWZhdWx0X3Bvb2wgPSAwOworICAgIH0gZWxzZSB7CisgICAgICBp ZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgfQor ICAgICAgc3ZuX3N3aWdfZ2V0X2FwcGxpY2F0aW9uX3Bvb2woJl9nbG9iYWxfc3ZuX3N3aWdfcHlf cG9vbCwgJl9nbG9iYWxfcG9vbCk7IAorICAgICAgc3ZuX3N3aWdfcHlfcG9vbF9jcmVhdGVfc3Vi cG9vbChfZ2xvYmFsX3N2bl9zd2lnX3B5X3Bvb2wsIF9nbG9iYWxfcG9vbCk7CisgICAgfQorICB9 IGVsc2UgeworICAgIHN2bl9zd2lnX2dldF9hcHBsaWNhdGlvbl9wb29sKCZfZ2xvYmFsX3N2bl9z d2lnX3B5X3Bvb2wsICZfZ2xvYmFsX3Bvb2wpOyAKKyAgICBzdm5fc3dpZ19weV9wb29sX2NyZWF0 ZV9zdWJwb29sKF9nbG9iYWxfc3ZuX3N3aWdfcHlfcG9vbCwgX2dsb2JhbF9wb29sKTsKKyAgfQor ICAkMSA9IF9nbG9iYWxfcG9vbDsKKyAgc3ZuX3N3aWdfcHlfcG9vbF9jaGVjayhfZ2xvYmFsX3N2 bl9zd2lnX3B5X3Bvb2wpCit9CisKKyV0eXBlbWFwKHB5dGhvbiwgaW4pIGFwcl9wb29sX3QgKiB7 CisgIGlmICgkaW5wdXQgIT0gUHlfTm9uZSAmJiBfZ2xvYmFsX3Bvb2xfaXNfZGVmYXVsdF9wb29s ID09IDEpIHsKKyAgICBzdm5fc3dpZ19weV9wb29sX2NoZWNrKCRpbnB1dCkKKyAgICBfZ2xvYmFs X3Bvb2wgPSBzdm5fc3dpZ19NdXN0R2V0UHRyKCRpbnB1dCwgJDFfZGVzY3JpcHRvciwgJHN2bl9h cmdudW0sIAorICAgICAgTlVMTCk7CisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAg ICAgU1dJR19mYWlsOworICAgIH0KKyAgICBQeV9YREVDUkVGKF9nbG9iYWxfc3ZuX3N3aWdfcHlf cG9vbCk7CisgICAgX2dsb2JhbF9zdm5fc3dpZ19weV9wb29sID0gJGlucHV0OworICAgIFB5X1hJ TkNSRUYoX2dsb2JhbF9zdm5fc3dpZ19weV9wb29sKTsKKyAgICAkMSA9IF9nbG9iYWxfcG9vbDsK KyAgfQorfQorCisldHlwZW1hcChweXRob24sIGZyZWVhcmcpIGFwcl9wb29sX3QgKiB7CisgIFB5 X1hERUNSRUYoX2dsb2JhbF9zdm5fc3dpZ19weV9wb29sKTsKK30KKworJXR5cGVtYXAocGVybDUs IGluKSBhcHJfcG9vbF90ICpwb29sICIiOworJXR5cGVtYXAocGVybDUsIGRlZmF1bHQpIGFwcl9w b29sX3QgKnBvb2woYXByX3Bvb2xfdCAqX2dsb2JhbF9wb29sKSB7CisgICAgX2dsb2JhbF9wb29s ID0gJDEgPSBzdm5fc3dpZ19wbF9tYWtlX3Bvb2wgKFNUKGl0ZW1zLTEpKTsKK30KKyV0eXBlbWFw KHJ1YnksIGluKSBhcHJfcG9vbF90ICpwb29sICIiOworJXR5cGVtYXAocnVieSwgZGVmYXVsdCkg YXByX3Bvb2xfdCAqcG9vbAorICAgIChWQUxVRSBfZ2xvYmFsX3N2bl9zd2lnX3JiX3Bvb2wsIGFw cl9wb29sX3QgKl9nbG9iYWxfcG9vbCkKK3sKKyAgc3ZuX3N3aWdfcmJfZ2V0X3Bvb2woYXJnYywg YXJndiwgc2VsZiwgJl9nbG9iYWxfc3ZuX3N3aWdfcmJfcG9vbCwgJiQxKTsKKyAgX2dsb2JhbF9w b29sID0gJDE7CisgIHN2bl9zd2lnX3JiX3B1c2hfcG9vbChfZ2xvYmFsX3N2bl9zd2lnX3JiX3Bv b2wpOworfQorCisldHlwZW1hcChydWJ5LCBkZWZhdWx0KSAoc3ZuX2NsaWVudF9jdHhfdCAqY3R4 LCBhcHJfcG9vbF90ICpwb29sKQorICAgICAoVkFMVUUgX2dsb2JhbF9zdm5fc3dpZ19yYl9wb29s LCBhcHJfcG9vbF90ICpfZ2xvYmFsX3Bvb2wpCit7CisgIGludCBhZGp1c3RlZF9hcmdjID0gYXJn YzsKKyAgVkFMVUUgKmFkanVzdGVkX2FyZ3YgPSBhcmd2OworCisgIHN2bl9zd2lnX3JiX2FkanVz dF9hcmdfZm9yX2NsaWVudF9jdHhfYW5kX3Bvb2woJmFkanVzdGVkX2FyZ2MsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFkanVzdGVkX2FyZ3YpOwor ICBzdm5fc3dpZ19yYl9nZXRfcG9vbChhZGp1c3RlZF9hcmdjLCBhZGp1c3RlZF9hcmd2LCBzZWxm LAorICAgICAgICAgICAgICAgICAgICAgICAmX2dsb2JhbF9zdm5fc3dpZ19yYl9wb29sLCAmJDIp OworICBfZ2xvYmFsX3Bvb2wgPSAkMjsKKyAgc3ZuX3N3aWdfcmJfcHVzaF9wb29sKF9nbG9iYWxf c3ZuX3N3aWdfcmJfcG9vbCk7Cit9CisKKyV0eXBlbWFwKHJ1YnksIGFyZ291dCkgYXByX3Bvb2xf dCAqcG9vbAoreworICBzdm5fc3dpZ19yYl9zZXRfcG9vbCgkcmVzdWx0LCBfZ2xvYmFsX3N2bl9z d2lnX3JiX3Bvb2wpOworICBzdm5fc3dpZ19yYl9wb3BfcG9vbChfZ2xvYmFsX3N2bl9zd2lnX3Ji X3Bvb2wpOworfQorCisjaWZkZWYgU1dJR1BFUkwKKyVhcHBseSBhcHJfcG9vbF90ICpwb29sIHsK KyAgICBhcHJfcG9vbF90ICpkaXJfcG9vbCwKKyAgICBhcHJfcG9vbF90ICpmaWxlX3Bvb2wsCisg ICAgYXByX3Bvb2xfdCAqbm9kZV9wb29sCit9OworI2VuZGlmCisKKyNpZmRlZiBTV0lHUlVCWQor JWFwcGx5IGFwcl9wb29sX3QgKnBvb2wgeworICAgIGFwcl9wb29sX3QgKmRpcl9wb29sLAorICAg IGFwcl9wb29sX3QgKmZpbGVfcG9vbCwKKyAgICBhcHJfcG9vbF90ICpub2RlX3Bvb2wKK307Cisj ZW5kaWYKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgQ0FMTEJBQ0tfQkFUT046IERvIG5vdCBj b252ZXJ0IHRvIEMgb2JqZWN0IGZyb20gUnVieSBvYmplY3QuCisqLworCisldHlwZW1hcChydWJ5 LCBpbikgdm9pZCAqQ0FMTEJBQ0tfQkFUT04KK3sKKyAgJDEgPSAodm9pZCAqKSRpbnB1dDsKK30K KworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgQ2FsbGJhY2s6IHN2bl9sb2dfbWVzc2FnZV9yZWNl aXZlcl90CisgICBzdm5fY2xpZW50X2xvZygpCisgICBzdm5fcmEgZ2V0X2xvZygpCisgICBzdm5f cmVwb3NfZ2V0X2xvZ3MoKQorKi8KKworJXR5cGVtYXAocHl0aG9uLCBpbikgKHN2bl9sb2dfbWVz c2FnZV9yZWNlaXZlcl90IHJlY2VpdmVyLCAKKyAgICAgICAgICAgICAgICAgICAgICB2b2lkICpy ZWNlaXZlcl9iYXRvbikgeworICAgICQxID0gc3ZuX3N3aWdfcHlfbG9nX3JlY2VpdmVyOworICAg ICQyID0gKHZvaWQgKikkaW5wdXQ7Cit9CisldHlwZW1hcChwZXJsNSwgaW4pIChzdm5fbG9nX21l c3NhZ2VfcmVjZWl2ZXJfdCByZWNlaXZlciwgCisgICAgICAgICAgICAgICAgICAgICB2b2lkICpy ZWNlaXZlcl9iYXRvbikgeworICAgICQxID0gc3ZuX3N3aWdfcGxfdGh1bmtfbG9nX3JlY2VpdmVy OworICAgICQyID0gKHZvaWQgKikkaW5wdXQ7Cit9CisKKyV0eXBlbWFwKHJ1YnksIGluKSAoc3Zu X2xvZ19tZXNzYWdlX3JlY2VpdmVyX3QgcmVjZWl2ZXIsIAorICAgICAgICAgICAgICAgICAgICB2 b2lkICpyZWNlaXZlcl9iYXRvbikgeworICAgICQxID0gc3ZuX3N3aWdfcmJfbG9nX3JlY2VpdmVy OworICAgICQyID0gKHZvaWQgKilzdm5fc3dpZ19yYl9tYWtlX2JhdG9uKCRpbnB1dCwgX2dsb2Jh bF9zdm5fc3dpZ19yYl9wb29sKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIENhbGxiYWNr OiBzdm5fY29tbWl0X2NhbGxiYWNrX3QKKyAgIHN2bl9yYSBnZXRfY29tbWl0X2VkaXRvcigpCisg ICBzdm5fcmVwb3NfZ2V0X2NvbW1pdF9lZGl0b3IoKQorKi8KKworJXR5cGVtYXAocGVybDUsIGlu KSAoc3ZuX2NvbW1pdF9jYWxsYmFja190IGNhbGxiYWNrLCB2b2lkICpjYWxsYmFja19iYXRvbikg eworICAgICQxID0gc3ZuX3N3aWdfcGxfdGh1bmtfY29tbWl0X2NhbGxiYWNrOworICAgICQyID0g KHZvaWQgKikkaW5wdXQ7CisgICAgc3ZuX3N3aWdfcGxfaG9sZF9yZWZfaW5fcG9vbCAoX2dsb2Jh bF9wb29sLCAkaW5wdXQpOworfTsKKworJXR5cGVtYXAocnVieSwgaW4pIChzdm5fY29tbWl0X2Nh bGxiYWNrX3QgY2FsbGJhY2ssIHZvaWQgKmNhbGxiYWNrX2JhdG9uKQoreworICAkMSA9IHN2bl9z d2lnX3JiX2NvbW1pdF9jYWxsYmFjazsKKyAgJDIgPSAodm9pZCAqKXN2bl9zd2lnX3JiX21ha2Vf YmF0b24oJGlucHV0LCBfZ2xvYmFsX3N2bl9zd2lnX3JiX3Bvb2wpOworfTsKKworJXR5cGVtYXAo cHl0aG9uLCBpbikgKHN2bl9jb21taXRfY2FsbGJhY2syX3QgY2FsbGJhY2ssIHZvaWQgKmNhbGxi YWNrX2JhdG9uKQoreworICAkMSA9IHN2bl9zd2lnX3B5X2NvbW1pdF9jYWxsYmFjazI7CisgICQy ID0gKHZvaWQgKikkaW5wdXQ7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBDYWxsYmFjazog c3ZuX2NhbmNlbF9mdW5jX3QKKyovCisKKyV0eXBlbWFwKHB5dGhvbiwgaW4pIChzdm5fY2FuY2Vs X2Z1bmNfdCBjYW5jZWxfZnVuYywgdm9pZCAqY2FuY2VsX2JhdG9uKSB7CisgICQxID0gc3ZuX3N3 aWdfcHlfY2FuY2VsX2Z1bmM7CisgICQyID0gJGlucHV0OyAvKiBvdXIgZnVuY3Rpb24gaXMgdGhl IGJhdG9uLiAqLworfQorCisldHlwZW1hcChydWJ5LCBpbikgKHN2bl9jYW5jZWxfZnVuY190IGNh bmNlbF9mdW5jLCB2b2lkICpjYW5jZWxfYmF0b24pCit7CisgICQxID0gc3ZuX3N3aWdfcmJfY2Fu Y2VsX2Z1bmM7CisgICQyID0gKHZvaWQgKilzdm5fc3dpZ19yYl9tYWtlX2JhdG9uKCRpbnB1dCwg X2dsb2JhbF9zdm5fc3dpZ19yYl9wb29sKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIENh bGxiYWNrOiBzdm5faW5mb19yZWNlaXZlcl90CisqLworCisldHlwZW1hcChydWJ5LCBpbikgKHN2 bl9pbmZvX3JlY2VpdmVyX3QgcmVjZWl2ZXIsIHZvaWQgKnJlY2VpdmVyX2JhdG9uKQoreworICAk MSA9IHN2bl9zd2lnX3JiX2luZm9fcmVjZWl2ZXI7CisgICQyID0gKHZvaWQgKilzdm5fc3dpZ19y Yl9tYWtlX2JhdG9uKCRpbnB1dCwgX2dsb2JhbF9zdm5fc3dpZ19yYl9wb29sKTsKK30KKworLyog LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAgIENhbGxiYWNrOiBzdm5fZnNfd2FybmluZ19jYWxsYmFja190Cisq LworCisldHlwZW1hcChydWJ5LCBpbikgKHN2bl9mc193YXJuaW5nX2NhbGxiYWNrX3Qgd2Fybmlu Zywgdm9pZCAqd2FybmluZ19iYXRvbikKK3sKKyAgVkFMVUUgYmF0b24gPSBzdm5fc3dpZ19yYl9t YWtlX2JhdG9uKCRpbnB1dCwgX2dsb2JhbF9zdm5fc3dpZ19yYl9wb29sKTsKKyAgc3ZuX3N3aWdf cmJfZnNfd2FybmluZ19jYWxsYmFja19iYXRvbl9yZWdpc3RlcihiYXRvbiwgX2dsb2JhbF9wb29s KTsKKyAgJDEgPSBzdm5fc3dpZ19yYl9mc193YXJuaW5nX2NhbGxiYWNrOworICAkMiA9ICh2b2lk ICopYmF0b247Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBzdm5fc3RyZWFtX3QgaW50ZXJv cGVyYWJpbGl0eSB3aXRoIGxhbmd1YWdlIG5hdGl2ZSBpbyBoYW5kbGVzCisqLworCisldHlwZW1h cChweXRob24sIGluKSBzdm5fc3RyZWFtX3QgKldSQVBQRURfU1RSRUFNIHsKKyAgICAkMSA9IHN2 bl9zd2lnX3B5X21ha2Vfc3RyZWFtICgkaW5wdXQsIF9nbG9iYWxfcG9vbCk7Cit9CisKKyV0eXBl bWFwKHBlcmw1LCBpbikgc3ZuX3N0cmVhbV90ICogeworICAgIHN2bl9zd2lnX3BsX21ha2Vfc3Ry ZWFtICgmJDEsICRpbnB1dCk7Cit9CisKKyV0eXBlbWFwKHBlcmw1LCBvdXQpIHN2bl9zdHJlYW1f dCAqIHsKKyAgICAkcmVzdWx0ID0gc3ZuX3N3aWdfcGxfZnJvbV9zdHJlYW0gKCQxKTsKKyAgICBh cmd2aSsrOworfQorCisldHlwZW1hcChwZXJsNSwgYXJnb3V0KSBzdm5fc3RyZWFtX3QgKiogewor ICAgICRyZXN1bHQgPSBzdm5fc3dpZ19wbF9mcm9tX3N0cmVhbSAoKiQxKTsKKyAgICBhcmd2aSsr OworfQorCisldHlwZW1hcChydWJ5LCBpbikgc3ZuX3N0cmVhbV90ICogeworICAkMSA9IHN2bl9z d2lnX3JiX21ha2Vfc3RyZWFtKCRpbnB1dCk7Cit9CisKKyNpZmRlZiBTV0lHUFlUSE9OCisldHlw ZW1hcChpbikgKHN2bl9jb21taXRfY2FsbGJhY2tfdCBjYWxsYmFjaywgdm9pZCAqY2FsbGJhY2tf YmF0b24pCit7CisgICQxID0gc3ZuX3N3aWdfcHlfY29tbWl0X2NhbGxiYWNrOworICAkMiA9ICh2 b2lkICopJGlucHV0OworfQorI2VuZGlmCisKKyNpZmRlZiBTV0lHUFlUSE9OCisldHlwZW1hcChp bikgKHN2bl9jb21taXRfY2FsbGJhY2tfdCBjYWxsYmFjaywgdm9pZCAqY2FsbGJhY2tfYmF0b24p Cit7CisgICQxID0gc3ZuX3N3aWdfcHlfY29tbWl0X2NhbGxiYWNrOworICAkMiA9ICh2b2lkICop JGlucHV0OworfQorI2VuZGlmCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBNYXBwZXIgdG8gYXV0 b21hdGljYWxseSB0dXJuIFB5dGhvbiBvYmplY3RzIGludG8gdm9pZCogYmF0b25zIG9uIGFzc2ln bm1lbnQKKyovCisKKyNpZmRlZiBTV0lHUFlUSE9OCisldHlwZW1hcChpbikgdm9pZCAqUFlfQVNf Vk9JRCAoUHlPYmplY3QgKm5ld1JlZikgeworICBuZXdSZWYgPSAkaW5wdXQ7CisgIGlmICgkaW5w dXQgPT0gUHlfTm9uZSkgeworICAgICQxID0gbmV3UmVmID0gTlVMTDsKKyAgfSBlbHNlIHsKKyAg ICBuZXdSZWYgPSAkaW5wdXQ7CisgICAgJDEgPSAodm9pZCAqKSRpbnB1dDsKKyAgfQorICBpZiAo c3ZuX3N3aWdfcHlfcG9vbF9zZXRfb3duZWRfcmVmKG9iajAsIChQeU9iamVjdCAqKWFyZzEtPiQx X25hbWUsIG5ld1JlZikpIHsKKyAgICBTV0lHX2ZhaWw7CisgIH0KK30KKyNlbmRpZgorCisvKiAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICAgV3JhcCB0aGUgZGlnZXN0IG91dHB1dCBmb3IgZnVuY3Rpb25zIHBv cHVsYXRpbmcgZGlnZXN0cy4KKyovCisKKyV0eXBlbWFwKGluLCBudW1pbnB1dHM9MCkgdW5zaWdu ZWQgY2hhciBkaWdlc3RbQU5ZXQorICAgICgkKjFfdHlwZSB0ZW1wW0FQUl9NRDVfRElHRVNUU0la RV0pIHsKKyAgICAkMSA9ICgkMV9sdHlwZSl0ZW1wOworfQorCisldHlwZW1hcChweXRob24sIGFy Z291dCwgZnJhZ21lbnQ9InRfb3V0cHV0X2hlbHBlciIpIHVuc2lnbmVkIGNoYXIgZGlnZXN0W0FO WV0KK3sKKyAgICAkcmVzdWx0ID0gdF9vdXRwdXRfaGVscGVyKCRyZXN1bHQsCisgICAgICAgIFB5 U3RyaW5nX0Zyb21TdHJpbmcoc3ZuX21kNV9kaWdlc3RfdG9fY3N0cmluZyAoJDEsIF9nbG9iYWxf cG9vbCkpKTsKK30KKworJXR5cGVtYXAocGVybDUsIGFyZ291dCkgdW5zaWduZWQgY2hhciBkaWdl c3RbQU5ZXSB7CisgICAgU1QoYXJndmkpID0gc3ZfbmV3bW9ydGFsKCk7CisgICAgc3Zfc2V0cHYo KFNWKilTVChhcmd2aSsrKSwgc3ZuX21kNV9kaWdlc3RfdG9fY3N0cmluZyAoJDEsX2dsb2JhbF9w b29sKSk7Cit9CisKKyV0eXBlbWFwKHJ1YnksIGFyZ291dCwgZnJhZ21lbnQ9Im91dHB1dF9oZWxw ZXIiKSB1bnNpZ25lZCBjaGFyIGRpZ2VzdFtBTlldCit7CisgICRyZXN1bHQgPSBvdXRwdXRfaGVs cGVyKCRyZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHJiX3N0cl9uZXcyKHN2bl9t ZDVfZGlnZXN0X3RvX2NzdHJpbmcoJDEsIF9nbG9iYWxfcG9vbCkpKTsKK30KKworLyogc3ZuX21k NV8qIGZ1bmN0aW9ucyB0YWtlcyBjb25zdCBvbmVzIGFzIGlucHV0ICovCisldHlwZW1hcChwZXJs NSwgaW4pIGNvbnN0IHVuc2lnbmVkIGNoYXIgZGlnZXN0W10geworICAgIFNXSUdfQ29udmVydFB0 cigkaW5wdXQsICh2b2lkICoqKSYkMSwgJDFfZGVzY3JpcHRvciwgMCk7Cit9CisldHlwZW1hcChw ZXJsNSwgYXJnb3V0KSBjb25zdCB1bnNpZ25lZCBjaGFyIGRpZ2VzdFtdIHt9CisKKy8qCisgICBz dm5fdHhkZWx0YV9zZW5kX3N0cmVhbSgpIHVzZXMgKmRpZ2VzdCBub3QgZGlnZXN0W10gLgorICAg c3ZuX3R4ZGVsdGFfYXBwbHkoKSB1c2VzICpyZXN1bHRfZGlnZXN0IG5vdCBkaWdlc3RbXSAuCisq LworCisldHlwZW1hcChpbiwgbnVtaW5wdXRzPTApIHVuc2lnbmVkIGNoYXIgKnJlc3VsdF9kaWdl c3QgeworICAgICQxID0gKHVuc2lnbmVkIGNoYXIgKilhcHJfcGFsbG9jKF9nbG9iYWxfcG9vbCwg QVBSX01ENV9ESUdFU1RTSVpFKTsKK30KKworJXR5cGVtYXAocGVybDUsIGFyZ291dCkgdW5zaWdu ZWQgY2hhciAqcmVzdWx0X2RpZ2VzdCB7CisgICAgU1QoYXJndmkpID0gc3ZfbmV3bW9ydGFsKCk7 CisgICAgU1QoYXJndmkrKykgPSBzdm5fc3dpZ19wbF9mcm9tX21kNSgkMSk7Cit9CisKKyVhcHBs eSB1bnNpZ25lZCBjaGFyIGRpZ2VzdFtBTlldIHsKKyAgICB1bnNpZ25lZCBjaGFyICpkaWdlc3QK K307CisKKyNpZm5kZWYgU1dJR1BFUkwKKyVhcHBseSB1bnNpZ25lZCBjaGFyIGRpZ2VzdFtBTlld IHsKKyAgICB1bnNpZ25lZCBjaGFyICpyZXN1bHRfZGlnZXN0Cit9OworI2VuZGlmCisKKy8qIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgIHVzZWZ1bCBjb252ZXJ0b3JzIGZvciBzdm5fb3B0X3JldmlzaW9uX3QK KyovCisldHlwZW1hcChwZXJsNSwgaW4pIHN2bl9vcHRfcmV2aXNpb25fdCAqIChzdm5fb3B0X3Jl dmlzaW9uX3QgcmV2KSB7CisgICAgJDEgPSAmcmV2OworICAgIGlmICgkaW5wdXQgPT0gTlVMTCB8 fCAkaW5wdXQgPT0gJlBMX3N2X3VuZGVmIHx8ICFTdk9LKCRpbnB1dCkpIHsKKyAgICAgICAgcmV2 LmtpbmQgPSBzdm5fb3B0X3JldmlzaW9uX3Vuc3BlY2lmaWVkOworICAgIH0KKyAgICBlbHNlIGlm IChzdl9pc29iamVjdCgkaW5wdXQpICYmIHN2X2Rlcml2ZWRfZnJvbSgkaW5wdXQsICJfcF9zdm5f b3B0X3JldmlzaW9uX3QiKSkgeworICAgICAgICBTV0lHX0NvbnZlcnRQdHIoJGlucHV0LCAodm9p ZCAqKikmJDEsICQxX2Rlc2NyaXB0b3IsIDApOworICAgIH0KKyAgICBlbHNlIGlmIChsb29rc19s aWtlX251bWJlcigkaW5wdXQpKSB7CisgICAgICAgIHJldi5raW5kID0gc3ZuX29wdF9yZXZpc2lv bl9udW1iZXI7CisgICAgICAgIHJldi52YWx1ZS5udW1iZXIgPSBTdklWKCRpbnB1dCk7CisgICAg fQorICAgIGVsc2UgaWYgKFN2UE9LKCRpbnB1dCkpIHsKKyAgICAgICAgY2hhciAqaW5wdXQgPSBT dlBWX25vbGVuKCRpbnB1dCk7CisgICAgICAgIGlmIChzdHJjYXNlY21wKGlucHV0LCAiQkFTRSIp ID09IDApCisgICAgICAgICAgICByZXYua2luZCA9IHN2bl9vcHRfcmV2aXNpb25fYmFzZTsKKyAg ICAgICAgZWxzZSBpZiAoc3RyY2FzZWNtcChpbnB1dCwgIkhFQUQiKSA9PSAwKQorICAgICAgICAg ICAgcmV2LmtpbmQgPSBzdm5fb3B0X3JldmlzaW9uX2hlYWQ7CisgICAgICAgIGVsc2UgaWYgKHN0 cmNhc2VjbXAoaW5wdXQsICJXT1JLSU5HIikgPT0gMCkKKyAgICAgICAgICAgIHJldi5raW5kID0g c3ZuX29wdF9yZXZpc2lvbl93b3JraW5nOworICAgICAgICBlbHNlIGlmIChzdHJjYXNlY21wKGlu cHV0LCAiQ09NTUlUVEVEIikgPT0gMCkKKyAgICAgICAgICAgIHJldi5raW5kID0gc3ZuX29wdF9y ZXZpc2lvbl9jb21taXR0ZWQ7CisgICAgICAgIGVsc2UgaWYgKHN0cmNhc2VjbXAoaW5wdXQsICJQ UkVWIikgPT0gMCkKKyAgICAgICAgICAgIHJldi5raW5kID0gc3ZuX29wdF9yZXZpc2lvbl9wcmV2 aW91czsKKyAgICAgICAgZWxzZSBpZiAoKmlucHV0ID09ICd7JykgeworICAgICAgICAgICAgc3Zu X2Jvb2xlYW5fdCBtYXRjaGVkOworICAgICAgICAgICAgYXByX3RpbWVfdCB0bTsKKyAgICAgICAg ICAgIHN2bl9lcnJvcl90ICplcnI7CisKKyAgICAgICAgICAgIGNoYXIgKmVuZCA9IHN0cmNocihp bnB1dCwnfScpOworICAgICAgICAgICAgaWYgKCFlbmQpCisgICAgICAgICAgICAgICAgU1dJR19j cm9haygidW5rbm93biBvcHRfcmV2aXNpb25fdCB0eXBlIik7CisgICAgICAgICAgICAqZW5kID0g J1wwJzsKKyAgICAgICAgICAgIGVyciA9IHN2bl9wYXJzZV9kYXRlICgmbWF0Y2hlZCwgJnRtLCBp bnB1dCArIDEsIGFwcl90aW1lX25vdygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHN2bl9zd2lnX3BsX21ha2VfcG9vbCAoKFNWICopTlVMTCkpOworICAgICAgICAgICAgaWYg KGVycikgeworICAgICAgICAgICAgICAgIHN2bl9lcnJvcl9jbGVhciAoZXJyKTsKKyAgICAgICAg ICAgICAgICBTV0lHX2Nyb2FrKCJ1bmtub3duIG9wdF9yZXZpc2lvbl90IHR5cGUiKTsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIGlmICghbWF0Y2hlZCkKKyAgICAgICAgICAgICAgICBTV0lH X2Nyb2FrKCJ1bmtub3duIG9wdF9yZXZpc2lvbl90IHR5cGUiKTsKKworICAgICAgICAgICAgcmV2 LmtpbmQgPSBzdm5fb3B0X3JldmlzaW9uX2RhdGU7CisgICAgICAgICAgICByZXYudmFsdWUuZGF0 ZSA9IHRtOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIFNXSUdfY3JvYWsoInVua25vd24g b3B0X3JldmlzaW9uX3QgdHlwZSIpOworICAgIH0gZWxzZQorICAgICAgICBTV0lHX2Nyb2FrKCJ1 bmtub3duIG9wdF9yZXZpc2lvbl90IHR5cGUiKTsKK30KKworJXR5cGVtYXAocnVieSwgaW4pIHN2 bl9vcHRfcmV2aXNpb25fdCAqIChzdm5fb3B0X3JldmlzaW9uX3QgcmV2KSB7CisgICQxID0gJnJl djsKKyAgc3ZuX3N3aWdfcmJfc2V0X3JldmlzaW9uKCZyZXYsICRpbnB1dCk7Cit9CisKKy8qIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgICBhcHJfaGFzaF90ICoqZGlyZW50cworICAgc3ZuX2NsaWVudF9scygp CisgICBzdm5faW9fZ2V0X2RpcmVudHMoKQorICAgc3ZuX3JhIGdldF9kaXIoKQorKi8KKworJXR5 cGVtYXAocHl0aG9uLGluLG51bWlucHV0cz0wKSBhcHJfaGFzaF90ICoqZGlyZW50cyA9IGFwcl9o YXNoX3QgKipPVVRQVVQ7CisldHlwZW1hcChweXRob24sYXJnb3V0LGZyYWdtZW50PSJ0X291dHB1 dF9oZWxwZXIiKSBhcHJfaGFzaF90ICoqZGlyZW50cyB7CisgICRyZXN1bHQgPSB0X291dHB1dF9o ZWxwZXIoJHJlc3VsdCwgc3ZuX3N3aWdfcHlfY29udmVydF9oYXNoKCokMSwgCisgICAgJGRlc2Ny aXB0b3Ioc3ZuX2RpcmVudF90ICopLCBfZ2xvYmFsX3N2bl9zd2lnX3B5X3Bvb2wpKTsKK30KKwor JXR5cGVtYXAocGVybDUsaW4sbnVtaW5wdXRzPTApIGFwcl9oYXNoX3QgKipkaXJlbnRzID0gYXBy X2hhc2hfdCAqKk9VVFBVVDsKKyV0eXBlbWFwKHBlcmw1LGFyZ291dCkgYXByX2hhc2hfdCAqKmRp cmVudHMgeworICAgIFNUKGFyZ3ZpKyspID0gc3ZuX3N3aWdfcGxfY29udmVydF9oYXNoCisJKCok MSwgJGRlc2NyaXB0b3Ioc3ZuX2RpcmVudF90ICopKTsKK30KKworJXR5cGVtYXAocnVieSwgaW4s IG51bWlucHV0cz0wKSBhcHJfaGFzaF90ICoqZGlyZW50cyA9IGFwcl9oYXNoX3QgKipPVVRQVVQ7 CisldHlwZW1hcChydWJ5LCBhcmdvdXQsIGZyYWdtZW50PSJvdXRwdXRfaGVscGVyIikgYXByX2hh c2hfdCAqKmRpcmVudHMKK3sKKyAgJHJlc3VsdCA9IG91dHB1dF9oZWxwZXIoJHJlc3VsdCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX3N3aWdfcmJfYXByX2hhc2hfdG9faGFzaF9zd2ln X3R5cGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiQxLCAic3ZuX2RpcmVudF90ICoi KSk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBhcHJfaGFzaF90ICoqbG9ja3MKKyAgIHN2 bl9jbGllbnRfbHMzKCkKKyAgIHN2bl9yZXBvc19mc19nZXRfbG9ja3MoKQorICAgc3ZuX3JhX2dl dF9sb2NrcygpCisqLworCisldHlwZW1hcChydWJ5LCBpbiwgbnVtaW5wdXRzPTApIGFwcl9oYXNo X3QgKipsb2NrcyA9IGFwcl9oYXNoX3QgKipPVVRQVVQ7CisldHlwZW1hcChydWJ5LCBhcmdvdXQs IGZyYWdtZW50PSJvdXRwdXRfaGVscGVyIikgYXByX2hhc2hfdCAqKmxvY2tzCit7CisgICRyZXN1 bHQgPSBvdXRwdXRfaGVscGVyKCRyZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN2 bl9zd2lnX3JiX2Fwcl9oYXNoX3RvX2hhc2hfc3dpZ190eXBlCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKCokMSwgInN2bl9sb2NrX3QgKiIpKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAgIGFwcl9hcnJheV9oZWFkZXJfdCAqbG9jYXRpb25fcmV2aXNpb25zCisgICBzdm5fcmVwb3Nf dHJhY2Vfbm9kZV9sb2NhdGlvbnMoKQorICAgc3ZuX3JhX2dldF9sb2NhdGlvbnMoKQorKi8KKwor JXR5cGVtYXAocnVieSwgaW4pIGFwcl9hcnJheV9oZWFkZXJfdCAqbG9jYXRpb25fcmV2aXNpb25z Cit7CisgICQxID0gc3ZuX3N3aWdfcmJfYXJyYXlfdG9fYXByX2FycmF5X3Jldm51bSgkaW5wdXQs IF9nbG9iYWxfcG9vbCk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBhcHJfaGFzaF90ICoq bG9jYXRpb25zCisgICBzdm5fcmVwb3NfdHJhY2Vfbm9kZV9sb2NhdGlvbnMoKQorICAgc3ZuX3Jh X2dldF9sb2NhdGlvbnMoKQorKi8KKworJXR5cGVtYXAocnVieSwgaW4sIG51bWlucHV0cz0wKSBh cHJfaGFzaF90ICoqbG9jYXRpb25zID0gYXByX2hhc2hfdCAqKk9VVFBVVDsKKyV0eXBlbWFwKHJ1 YnksIGFyZ291dCkgYXByX2hhc2hfdCAqKmxvY2F0aW9ucworeworICAkcmVzdWx0ID0gc3ZuX3N3 aWdfcmJfYXByX3Jldm51bV9rZXlfaGFzaF90b19oYXNoX3N0cmluZygqJDEpOworfQorCisvKiAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICAgU3BlY2lhbCBib29sZWFuIG1hcHBpbmcgZm9yIHJ1YnkuCisqLwor CisldHlwZW1hcChydWJ5LCBpbikgc3ZuX2Jvb2xlYW5fdCAiJDEgPSBSVEVTVCgkaW5wdXQpOyI7 CisldHlwZW1hcChydWJ5LCBvdXQsIGZyYWdtZW50PSJvdXRwdXRfaGVscGVyIikgc3ZuX2Jvb2xl YW5fdAoreworICAkcmVzdWx0ID0gb3V0cHV0X2hlbHBlcigkcmVzdWx0LCAkMSA/IFF0cnVlIDog UWZhbHNlKTsKK30KKworJXR5cGVtYXAocnVieSwgaW4sIG51bWlucHV0cz0wKSBzdm5fYm9vbGVh bl90ICogKHN2bl9ib29sZWFuX3QgdGVtcCkKK3sKKyAgJDEgPSAmdGVtcDsKK30KKworJXR5cGVt YXAocnVieSwgYXJnb3V0LCBmcmFnbWVudD0ib3V0cHV0X2hlbHBlciIpIHN2bl9ib29sZWFuX3Qg KgoreworICAkcmVzdWx0ID0gb3V0cHV0X2hlbHBlcigkcmVzdWx0LCAqJDEgPyBRdHJ1ZSA6IFFm YWxzZSk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBIYW5kbGUgcHl0aG9uIHRocmVhZCBs b2NraW5nLgorCisgICBTd2lnIGRvZXNuJ3QgYWxsb3cgdXMgdG8gc3BlY2lmeSBhIGxhbmd1YWdl IGluIHRoZSAlZXhjZXB0aW9uIGNvbW1hbmQsCisgICBzbyB3ZSBoYXZlIHRvIHVzZSAjaWZkZWZz IGZvciB0aGUgcHl0aG9uLXNwZWNpZmljIHBhcnRzLgorKi8KKworJWV4Y2VwdGlvbiB7CisjaWZk ZWYgU1dJR1BZVEhPTgorICAgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOworI2VuZGlm CisgICAgJGFjdGlvbgorI2lmZGVmIFNXSUdQWVRIT04KKyAgICBzdm5fc3dpZ19weV9hY3F1aXJl X3B5X2xvY2soKTsKKyNlbmRpZgorfQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBoYW5kbGUg Y29uZmlnIGFuZCBmc19jb25maWcgaW4gc3ZuX3tmcyxyZXBvc31fY3JlYXRlCisqLworCisKKyV0 eXBlbWFwKHJ1YnksIGluKSBhcHJfaGFzaF90ICpjb25maWcgKGFwcl9oYXNoX3QgKnRlbXApCit7 CisgIGlmIChOSUxfUCgkaW5wdXQpKSB7CisgICAgJDEgPSBOVUxMOworICB9IGVsc2UgeworICAg ICQxID0gc3ZuX3N3aWdfcmJfaGFzaF90b19hcHJfaGFzaF9zd2lnX3R5cGUoJGlucHV0LCAic3Zu X2NvbmZpZ190ICoiLCBfZ2xvYmFsX3Bvb2wpOworICB9Cit9CisldHlwZW1hcChydWJ5LCBpbikg YXByX2hhc2hfdCAqZnNfY29uZmlnCit7CisgIGlmIChOSUxfUCgkaW5wdXQpKSB7CisgICAgJDEg PSBOVUxMOworICB9IGVsc2UgeworICAgICQxID0gc3ZuX3N3aWdfcmJfaGFzaF90b19hcHJfaGFz aF9zdHJpbmcoJGlucHV0LCBfZ2xvYmFsX3Bvb2wpOworICB9Cit9CisKKy8qIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tICovCisKKyV7CisjaWZkZWYgU1dJR1BZVEhPTgorI2luY2x1ZGUgInN3aWd1dGlsX3B5Lmgi CisjZW5kaWYKKworI2lmZGVmIFNXSUdQRVJMCisjaW5jbHVkZSAic3dpZ3V0aWxfcGwuaCIKKyNl bmRpZgorCisjaWZkZWYgU1dJR1JVQlkKKyNpbmNsdWRlIDxhcHUuaD4KKyNpbmNsdWRlIDxhcHJf eGxhdGUuaD4KKyNpbmNsdWRlICJzd2lndXRpbF9yYi5oIgorI2VuZGlmCislfQorCislaW5jbHVk ZSBzdm5fdGltZV9oLnN3ZworJWluY2x1ZGUgc3ZuX3R5cGVzX2guc3dnCmRpZmYgLU51ciBzdWJ2 ZXJzaW9uLTEuMy4xL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vbGlic3ZuX3N3aWdf cHkvc3dpZ3V0aWxfcHkuYyBzdWJ2ZXJzaW9uLTEuMy4xLm5ldy9zdWJ2ZXJzaW9uL2JpbmRpbmdz L3N3aWcvcHl0aG9uL2xpYnN2bl9zd2lnX3B5L3N3aWd1dGlsX3B5LmMKLS0tIHN1YnZlcnNpb24t MS4zLjEvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3B5dGhvbi9saWJzdm5fc3dpZ19weS9zd2ln dXRpbF9weS5jCTIwMDYtMDMtMDUgMjA6NTU6MTQuMDAwMDAwMDAwICswMDAwCisrKyBzdWJ2ZXJz aW9uLTEuMy4xLm5ldy9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcHl0aG9uL2xpYnN2bl9zd2ln X3B5L3N3aWd1dGlsX3B5LmMJMjAwNi0wNy0wNCAxMzoyNjo0OS4wMDAwMDAwMDAgKzAxMDAKQEAg LTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxhcHJfcG9ydGFibGUuaD4KICNpbmNsdWRlIDxhcHJf dGhyZWFkX3Byb2MuaD4KIAorI2luY2x1ZGUgInN2bl9jbGllbnQuaCIKICNpbmNsdWRlICJzdm5f c3RyaW5nLmgiCiAjaW5jbHVkZSAic3ZuX29wdC5oIgogI2luY2x1ZGUgInN2bl9kZWx0YS5oIgpA QCAtNzIsMTEgKzczLDEzIEBACiAjaWZkZWYgQUNRVUlSRV9QWVRIT05fTE9DSwogICBQeVRocmVh ZFN0YXRlICp0aHJlYWRfc3RhdGU7CiAKLSAgaWYgKF9zYXZlZF90aHJlYWRfa2V5ID09IE5VTEwp IHsKLSAgICAvKiBPYnZpb3VzbHksIGNyZWF0aW5nIGEgdG9wLWxldmVsIHBvb2wgZm9yIHRoaXMg aXMgcHJldHR5IHN0dXBpZC4gKi8KLSAgICBhcHJfcG9vbF9jcmVhdGUoJl9zYXZlZF90aHJlYWRf cG9vbCwgTlVMTCk7Ci0gICAgYXByX3RocmVhZGtleV9wcml2YXRlX2NyZWF0ZSgmX3NhdmVkX3Ro cmVhZF9rZXksIE5VTEwsIF9zYXZlZF90aHJlYWRfcG9vbCk7Ci0gIH0KKyAgaWYgKF9zYXZlZF90 aHJlYWRfa2V5ID09IE5VTEwpCisgICAgeworICAgICAgLyogT2J2aW91c2x5LCBjcmVhdGluZyBh IHRvcC1sZXZlbCBwb29sIGZvciB0aGlzIGlzIHByZXR0eSBzdHVwaWQuICovCisgICAgICBhcHJf cG9vbF9jcmVhdGUoJl9zYXZlZF90aHJlYWRfcG9vbCwgTlVMTCk7CisgICAgICBhcHJfdGhyZWFk a2V5X3ByaXZhdGVfY3JlYXRlKCZfc2F2ZWRfdGhyZWFkX2tleSwgTlVMTCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX3NhdmVkX3RocmVhZF9wb29sKTsKKyAgICB9CiAKICAg dGhyZWFkX3N0YXRlID0gUHlFdmFsX1NhdmVUaHJlYWQoKTsKICAgYXByX3RocmVhZGtleV9wcml2 YXRlX3NldCh0aHJlYWRfc3RhdGUsIF9zYXZlZF90aHJlYWRfa2V5KTsKQEAgLTEwMyw2ICsxMDYs OCBAQAogc3RhdGljIFB5T2JqZWN0ICpfZ2xvYmFsX3N2bl9zd2lnX3B5X3Bvb2wgPSBOVUxMOwog c3RhdGljIGNoYXIgYXNzZXJ0VmFsaWRbXSA9ICJhc3NlcnRfdmFsaWQiOwogc3RhdGljIGNoYXIg cGFyZW50UG9vbFtdID0gIl9wYXJlbnRfcG9vbCI7CitzdGF0aWMgY2hhciBhZGRPd25lZFJlZltd ID0gIl9hZGRfb3duZWRfcmVmIjsKK3N0YXRpYyBjaGFyIHJlbW92ZU93bmVkUmVmW10gPSAiX3Jl bW92ZV9vd25lZF9yZWYiOwogc3RhdGljIGNoYXIgd3JhcFtdID0gIl93cmFwIjsKIHN0YXRpYyBj aGFyIHVud3JhcFtdID0gIl91bndyYXAiOwogc3RhdGljIGNoYXIgc2V0UGFyZW50UG9vbFtdID0g InNldF9wYXJlbnRfcG9vbCI7CkBAIC0xMjIsNyArMTI3LDcgQEAKIH0KIAogLyogU2V0IHRoZSBh cHBsaWNhdGlvbiBwb29sICovCi12b2lkIHN2bl9zd2lnX3B5X3NldF9hcHBsaWNhdGlvbl9wb29s KFB5T2JqZWN0ICpweV9wb29sLCBhcHJfcG9vbF90ICpwb29sKSAKK3ZvaWQgc3ZuX3N3aWdfcHlf c2V0X2FwcGxpY2F0aW9uX3Bvb2woUHlPYmplY3QgKnB5X3Bvb2wsIGFwcl9wb29sX3QgKnBvb2wp CiB7CiAgIF9nbG9iYWxfcG9vbCA9IHBvb2w7CiAgIF9nbG9iYWxfc3ZuX3N3aWdfcHlfcG9vbCA9 IHB5X3Bvb2w7CkBAIC0xNDcsMjIgKzE1Miw3MSBAQAogewogICBQeU9iamVjdCAqcmVzdWx0Owog Ci0gIGlmICgqcHJveHkgIT0gTlVMTCkgewotICAgIGlmIChwb29sID09IE5VTEwpIHsKLSAgICAg IGlmIChQeU9iamVjdF9IYXNBdHRyU3RyaW5nKCpwcm94eSwgc2V0UGFyZW50UG9vbCkpIHsKLSAg ICAgICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZCgqcHJveHksIHNldFBhcmVudFBvb2ws IGVtcHR5VHVwbGUpOwotICAgICAgICBpZiAocmVzdWx0ID09IE5VTEwpIHsKLSAgICAgICAgICBy ZXR1cm4gMTsKKyAgaWYgKCpwcm94eSAhPSBOVUxMKQorICAgIHsKKyAgICAgIGlmIChwb29sID09 IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoUHlPYmplY3RfSGFzQXR0clN0cmluZygq cHJveHksIHNldFBhcmVudFBvb2wpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICByZXN1 bHQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKCpwcm94eSwgc2V0UGFyZW50UG9vbCwgZW1wdHlUdXBs ZSk7CisgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBy ZXR1cm4gMTsKKyAgICAgICAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgICAgICAgICB9 CiAgICAgICAgIH0KLSAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7Ci0gICAgICB9Ci0gICAgfSBl bHNlIHsKLSAgICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxNZXRob2QocG9vbCwgd3JhcCwgb2Jq ZWN0VHVwbGUsICpwcm94eSk7Ci0gICAgICBQeV9ERUNSRUYoKnByb3h5KTsKLSAgICAgICpwcm94 eSA9IHJlc3VsdDsKKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIHJlc3VsdCA9IFB5 T2JqZWN0X0NhbGxNZXRob2QocG9vbCwgd3JhcCwgb2JqZWN0VHVwbGUsICpwcm94eSk7CisgICAg ICAgICAgUHlfREVDUkVGKCpwcm94eSk7CisgICAgICAgICAgKnByb3h5ID0gcmVzdWx0OworICAg ICAgICB9CisgICAgfQorCisgIHJldHVybiAwOworfQorCisvKiBHZXQgdGhlIHBhcmVudCBwb29s IG9mIGEgcHJveHkgb2JqZWN0LCBvciByZXR1cm4gdGhlIGdsb2JhbCBhcHBsaWNhdGlvbgorICog cG9vbCBpZiBvbmUgaXMgbm90IHNldC4gIFJldHVybnMgYSBCT1JST1dFRCByZWZlcmVuY2UhICov CitzdGF0aWMgUHlPYmplY3QgKnByb3h5X2dldF9wb29sKFB5T2JqZWN0ICpwcm94eSkKK3sKKyAg UHlPYmplY3QgKnJlc3VsdDsKKyAgaWYgKFB5T2JqZWN0X0hhc0F0dHJTdHJpbmcocHJveHksIHBh cmVudFBvb2wpKQorICAgIHsKKyAgICAgIHJlc3VsdCA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmco cHJveHksIHBhcmVudFBvb2wpOworICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgfQorICBl bHNlCisgICAgeworICAgICAgcmVzdWx0ID0gX2dsb2JhbF9zdm5fc3dpZ19weV9wb29sOwogICAg IH0KLSAgfQorICByZXR1cm4gcmVzdWx0OworfQogCisvKiBDaGFuZ2UgYW4gJ293bmVkIHJlZmVy ZW5jZScgYWxsb2NhdGVkIGluIGEgcG9vbCBmcm9tIG9sZFJlZiB0byBuZXdSZWYuCisgKiBJZiBv bGRSZWYgaXMgbm9uLU5VTEwgYW5kIHByZXNlbnQgaW4gdGhlIHBhcmVudCBwb29sIG9mIHByb3h5 LCBpdCBpcyByZW1vdmVkLgorICovCitpbnQgc3ZuX3N3aWdfcHlfcG9vbF9zZXRfb3duZWRfcmVm KFB5T2JqZWN0ICpwcm94eSwgUHlPYmplY3QgKm9sZFJlZiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHlPYmplY3QgKm5ld1JlZikKK3sKKyAgUHlPYmplY3QgKnRlbXA7Cisg IFB5T2JqZWN0ICpweV9wb29sID0gcHJveHlfZ2V0X3Bvb2wocHJveHkpOworCisgIGlmIChvbGRS ZWYgIT0gTlVMTCkKKyAgICB7CisgICAgICB0ZW1wID0gUHlPYmplY3RfQ2FsbE1ldGhvZChweV9w b29sLCByZW1vdmVPd25lZFJlZiwgb2JqZWN0VHVwbGUsIG9sZFJlZik7CisgICAgICBpZiAodGVt cCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gMTsKKyAgICAgIGVsc2UKKyAgICAgICAgUHlfREVD UkVGKHRlbXApOworICAgIH0KKyAgaWYgKG5ld1JlZiAhPSBOVUxMKQorICAgIHsKKyAgICAgIHRl bXAgPSBQeU9iamVjdF9DYWxsTWV0aG9kKHB5X3Bvb2wsIGFkZE93bmVkUmVmLCBvYmplY3RUdXBs ZSwgbmV3UmVmKTsKKyAgICAgIGlmICh0ZW1wID09IE5VTEwpCisgICAgICAgIHJldHVybiAxOwor ICAgICAgZWxzZQorICAgICAgICBQeV9ERUNSRUYodGVtcCk7CisgICAgfQogICByZXR1cm4gMDsK IH0KIAwKQEAgLTE3MCwzMiArMjI0LDM0IEBACiAjZGVmaW5lIHN2bl9zd2lnX1R5cGVRdWVyeSh4 KSBTV0lHX1R5cGVRdWVyeSh4KQogCiAvKiogV3JhcHBlciBmb3IgU1dJR19OZXdQb2ludGVyT2Jq ICovCi1QeU9iamVjdCAqc3ZuX3N3aWdfTmV3UG9pbnRlck9iaih2b2lkICpvYmosIHN3aWdfdHlw ZV9pbmZvICp0eXBlLCAKK1B5T2JqZWN0ICpzdm5fc3dpZ19OZXdQb2ludGVyT2JqKHZvaWQgKm9i aiwgc3dpZ190eXBlX2luZm8gKnR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQeU9iamVjdCAqcG9vbCkKIHsKICAgUHlPYmplY3QgKnByb3h5ID0gU1dJR19OZXdQb2ludGVy T2JqKG9iaiwgdHlwZSwgMCk7CiAKLSAgaWYgKHByb3h5ID09IE5VTEwpIHsKKyAgaWYgKHByb3h5 ID09IE5VTEwpCiAgICAgcmV0dXJuIE5VTEw7Ci0gIH0KLSAgCi0gIGlmIChwcm94eV9zZXRfcG9v bCgmcHJveHksIHBvb2wpKSB7Ci0gICAgUHlfREVDUkVGKHByb3h5KTsKLSAgICByZXR1cm4gTlVM TDsKLSAgfQorCisgIGlmIChwcm94eV9zZXRfcG9vbCgmcHJveHksIHBvb2wpKQorICAgIHsKKyAg ICAgIFB5X0RFQ1JFRihwcm94eSk7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKICAgcmV0 dXJuIHByb3h5OwogfQogCiAvKiogc3ZuX3N3aWdfTmV3UG9pbnRlck9iaiwgZXhjZXB0IGEgc3Ry aW5nIGlzIHVzZWQgdG8gZGVzY3JpYmUgdGhlIHR5cGUgKi8KLXN0YXRpYyBQeU9iamVjdCAqc3Zu X3N3aWdfTmV3UG9pbnRlck9ialN0cmluZyh2b2lkICpwdHIsIGNvbnN0IGNoYXIgKnR5cGUsIAor c3RhdGljIFB5T2JqZWN0ICpzdm5fc3dpZ19OZXdQb2ludGVyT2JqU3RyaW5nKHZvaWQgKnB0ciwg Y29uc3QgY2hhciAqdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBQeU9iamVjdCAqcHlfcG9vbCkKIHsKICAgc3dpZ190eXBlX2luZm8gKnR5cGVpbmZv ID0gc3ZuX3N3aWdfVHlwZVF1ZXJ5KHR5cGUpOwotICBpZiAodHlwZWluZm8gPT0gTlVMTCkgewot ICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJDYW5ub3QgZmluZCByZXF1aXJl ZCB0eXBlb2JqZWN0Iik7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KKyAgaWYgKHR5cGVpbmZvID09 IE5VTEwpCisgICAgeworICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgIkNh bm5vdCBmaW5kIHJlcXVpcmVkIHR5cGVvYmplY3QiKTsKKyAgICAgIHJldHVybiBOVUxMOworICAg IH0KKwogICAvKiAjIyMgY2FjaGUgdGhlIHN3aWdfdHlwZV9pbmZvIGF0IHNvbWUgcG9pbnQ/ICov CiAgIHJldHVybiBzdm5fc3dpZ19OZXdQb2ludGVyT2JqKHB0ciwgdHlwZWluZm8sIHB5X3Bvb2wp OwogfQpAQCAtMjAzLDIwICsyNTksMjEgQEAKIC8qKiBXcmFwcGVyIGZvciBTV0lHX0NvbnZlcnRQ dHIgKi8KIGludCBzdm5fc3dpZ19Db252ZXJ0UHRyKFB5T2JqZWN0ICppbnB1dCwgdm9pZCAqKm9i aiwgc3dpZ190eXBlX2luZm8gKnR5cGUpCiB7Ci0gIGlmIChQeU9iamVjdF9IYXNBdHRyU3RyaW5n KGlucHV0LCBhc3NlcnRWYWxpZCkpIHsKLSAgICBQeU9iamVjdCAqcmVzdWx0ID0gUHlPYmplY3Rf Q2FsbE1ldGhvZChpbnB1dCwgYXNzZXJ0VmFsaWQsIGVtcHR5VHVwbGUpOwotICAgIGlmIChyZXN1 bHQgPT0gTlVMTCkgewotICAgICAgcmV0dXJuIDE7Ci0gICAgfQotICAgIFB5X0RFQ1JFRihyZXN1 bHQpOwotICB9Ci0gIGlmIChQeU9iamVjdF9IYXNBdHRyU3RyaW5nKGlucHV0LCB1bndyYXApKSB7 Ci0gICAgaW5wdXQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKGlucHV0LCB1bndyYXAsIGVtcHR5VHVw bGUpOwotICAgIGlmIChpbnB1dCA9PSBOVUxMKSB7Ci0gICAgICByZXR1cm4gMTsKKyAgaWYgKFB5 T2JqZWN0X0hhc0F0dHJTdHJpbmcoaW5wdXQsIGFzc2VydFZhbGlkKSkKKyAgICB7CisgICAgICBQ eU9iamVjdCAqcmVzdWx0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChpbnB1dCwgYXNzZXJ0VmFsaWQs IGVtcHR5VHVwbGUpOworICAgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQorICAgICAgICByZXR1cm4g MTsKKyAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOwogICAgIH0KLSAgICBQeV9ERUNSRUYoaW5wdXQp OwotICB9CisgIGlmIChQeU9iamVjdF9IYXNBdHRyU3RyaW5nKGlucHV0LCB1bndyYXApKQorICAg IHsKKyAgICAgIGlucHV0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChpbnB1dCwgdW53cmFwLCBlbXB0 eVR1cGxlKTsKKyAgICAgIGlmIChpbnB1dCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gMTsKKyAg ICAgIFB5X0RFQ1JFRihpbnB1dCk7CisgICAgfQorCiAgIHJldHVybiBTV0lHX0NvbnZlcnRQdHIo aW5wdXQsIG9iaiwgdHlwZSwgU1dJR19QT0lOVEVSX0VYQ0VQVElPTiB8IDApOwogfQogCkBAIC0y MzEsMzEgKzI4OCwyOCBAQAogdm9pZCAqc3ZuX3N3aWdfTXVzdEdldFB0cih2b2lkICppbnB1dCwg c3dpZ190eXBlX2luZm8gKnR5cGUsIGludCBhcmdudW0sCiAgICAgICAgICAgICAgICAgICAgICAg ICAgIFB5T2JqZWN0ICoqcHlfcG9vbCkKIHsKLSAgaWYgKFB5T2JqZWN0X0hhc0F0dHJTdHJpbmco aW5wdXQsIGFzc2VydFZhbGlkKSkgewotICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBQeU9iamVjdF9D YWxsTWV0aG9kKGlucHV0LCBhc3NlcnRWYWxpZCwgZW1wdHlUdXBsZSk7Ci0gICAgaWYgKHJlc3Vs dCA9PSBOVUxMKSB7Ci0gICAgICByZXR1cm4gTlVMTDsKKyAgaWYgKFB5T2JqZWN0X0hhc0F0dHJT dHJpbmcoaW5wdXQsIGFzc2VydFZhbGlkKSkKKyAgICB7CisgICAgICBQeU9iamVjdCAqcmVzdWx0 ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChpbnB1dCwgYXNzZXJ0VmFsaWQsIGVtcHR5VHVwbGUpOwor ICAgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgIFB5 X0RFQ1JFRihyZXN1bHQpOwogICAgIH0KLSAgICBQeV9ERUNSRUYocmVzdWx0KTsKLSAgfQotICBp ZiAocHlfcG9vbCAhPSBOVUxMKSB7Ci0gICAgaWYgKFB5T2JqZWN0X0hhc0F0dHJTdHJpbmcoaW5w dXQsIHBhcmVudFBvb2wpKSB7Ci0gICAgICAqcHlfcG9vbCA9IFB5T2JqZWN0X0dldEF0dHJTdHJp bmcoaW5wdXQsIHBhcmVudFBvb2wpOwotICAgICAgUHlfREVDUkVGKCpweV9wb29sKTsKLSAgICB9 IGVsc2UgewotICAgICAgKnB5X3Bvb2wgPSBfZ2xvYmFsX3N2bl9zd2lnX3B5X3Bvb2w7Ci0gICAg fQotICB9Ci0gIGlmIChQeU9iamVjdF9IYXNBdHRyU3RyaW5nKGlucHV0LCB1bndyYXApKSB7Ci0g ICAgaW5wdXQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKGlucHV0LCB1bndyYXAsIGVtcHR5VHVwbGUp OwotICAgIGlmIChpbnB1dCA9PSBOVUxMKSB7Ci0gICAgICByZXR1cm4gTlVMTDsKKworICBpZiAo cHlfcG9vbCAhPSBOVUxMKQorICAgICpweV9wb29sID0gcHJveHlfZ2V0X3Bvb2woKFB5T2JqZWN0 ICopIGlucHV0KTsKKworICBpZiAoUHlPYmplY3RfSGFzQXR0clN0cmluZyhpbnB1dCwgdW53cmFw KSkKKyAgICB7CisgICAgICBpbnB1dCA9IFB5T2JqZWN0X0NhbGxNZXRob2QoaW5wdXQsIHVud3Jh cCwgZW1wdHlUdXBsZSk7CisgICAgICBpZiAoaW5wdXQgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJu IE5VTEw7CisgICAgICBQeV9ERUNSRUYoKFB5T2JqZWN0ICopIGlucHV0KTsKICAgICB9Ci0gICAg UHlfREVDUkVGKChQeU9iamVjdCAqKSBpbnB1dCk7Ci0gIH0KKwogICByZXR1cm4gU1dJR19NdXN0 R2V0UHRyKGlucHV0LCB0eXBlLCBhcmdudW0sIFNXSUdfUE9JTlRFUl9FWENFUFRJT04gfCAwKTsK IH0KLSAgCisKIAwKIC8qKiogQ3VzdG9tIFN1YnZlcnNpb25FeGNlcHRpb24gc3R1ZmZzLiAqKiov CiAKQEAgLTI4Myw3ICszMzcsNyBAQAogfQogCiB2b2lkIHN2bl9zd2lnX3B5X3N2bl9leGNlcHRp b24oc3ZuX2Vycm9yX3QgKmVycikKLXsgCit7CiAgIFB5T2JqZWN0ICpleGNfb2IsICphcHJfZXJy X29iOwogCiAgIGlmIChlcnIgPT0gTlVMTCkKQEAgLTI5NSw3ICszNDksNyBAQAogICAgIHJldHVy bjsKIAogICAvKiBJbnN0YW50aWF0ZSBhIFN1YnZlcnNpb25FeGNlcHRpb24gb2JqZWN0LiAqLwot ICBleGNfb2IgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oU3VidmVyc2lvbkV4Y2VwdGlvbiwgKGNo YXIgKikic08iLCAKKyAgZXhjX29iID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKFN1YnZlcnNpb25F eGNlcHRpb24sIChjaGFyICopInNPIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGVyci0+bWVzc2FnZSwgYXByX2Vycl9vYik7CiAgIGlmIChleGNfb2IgPT0gTlVMTCkKICAgICB7 CkBAIC0zNDAsNyArMzk0LDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqbWFrZV9vYl9mc19yb290KHN2 bl9mc19yb290X3QgKnB0ciwgUHlPYmplY3QgKnB5X3Bvb2wpCiB7CiAgIHJldHVybiBzdm5fc3dp Z19OZXdQb2ludGVyT2JqU3RyaW5nKHB0ciwgInN2bl9mc19yb290X3QgKiIsIHB5X3Bvb2wpOwot fSAKK30KIC8qKiovCiAKIC8qIENvbnZlcnNpb24gZnJvbSBQeXRob24gc2luZ2xlIG9iamVjdHMg KG5vdCBoYXNoZXMvbGlzdHMvZXRjLikgdG8KQEAgLTM0OSwyMCArNDAzLDIyIEBACiB7CiAgIGlm IChvYiA9PSBQeV9Ob25lKQogICAgIHJldHVybiBOVUxMOwotICBpZiAoISBQeVN0cmluZ19DaGVj ayhvYikpIHsKLSAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAibm90IGEgc3Ry aW5nIik7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KKyAgaWYgKCEgUHlTdHJpbmdfQ2hlY2sob2Ip KQorICAgIHsKKyAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJub3QgYSBz dHJpbmciKTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgcmV0dXJuIGFwcl9wc3RyZHVw KHBvb2wsIFB5U3RyaW5nX0FTX1NUUklORyhvYikpOwogfQogc3RhdGljIHN2bl9zdHJpbmdfdCAq bWFrZV9zdm5fc3RyaW5nX2Zyb21fb2IoUHlPYmplY3QgKm9iLCBhcHJfcG9vbF90ICpwb29sKQog ewogICBpZiAob2IgPT0gUHlfTm9uZSkKICAgICByZXR1cm4gTlVMTDsKLSAgaWYgKCEgUHlTdHJp bmdfQ2hlY2sob2IpKSB7Ci0gICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgIm5v dCBhIHN0cmluZyIpOwotICAgIHJldHVybiBOVUxMOwotICB9CisgIGlmICghIFB5U3RyaW5nX0No ZWNrKG9iKSkKKyAgICB7CisgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAi bm90IGEgc3RyaW5nIik7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgIHJldHVybiBzdm5f c3RyaW5nX2NyZWF0ZShQeVN0cmluZ19BU19TVFJJTkcob2IpLCBwb29sKTsKIH0KIApAQCAtMzgx LDI1ICs0MzcsMjggQEAKICAgICBpZiAoZGljdCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVM TDsKIAotICAgIGZvciAoaGkgPSBhcHJfaGFzaF9maXJzdChOVUxMLCBoYXNoKTsgaGk7IGhpID0g YXByX2hhc2hfbmV4dChoaSkpIHsKKyAgICBmb3IgKGhpID0gYXByX2hhc2hfZmlyc3QoTlVMTCwg aGFzaCk7IGhpOyBoaSA9IGFwcl9oYXNoX25leHQoaGkpKQorICAgICAgewogICAgICAgICBjb25z dCB2b2lkICprZXk7CiAgICAgICAgIHZvaWQgKnZhbDsKICAgICAgICAgUHlPYmplY3QgKnZhbHVl OwogCiAgICAgICAgIGFwcl9oYXNoX3RoaXMoaGksICZrZXksIE5VTEwsICZ2YWwpOwogICAgICAg ICB2YWx1ZSA9ICgqY29udmVydGVyX2Z1bmMpKHZhbCwgY3R4LCBweV9wb29sKTsKLSAgICAgICAg aWYgKHZhbHVlID09IE5VTEwpIHsKKyAgICAgICAgaWYgKHZhbHVlID09IE5VTEwpCisgICAgICAg ICAgewogICAgICAgICAgICAgUHlfREVDUkVGKGRpY3QpOwogICAgICAgICAgICAgcmV0dXJuIE5V TEw7Ci0gICAgICAgIH0KKyAgICAgICAgICB9CiAgICAgICAgIC8qICMjIyBnb3R0YSBjYXN0IHRo aXMgdGhpbmcgY3V6IFB5dGhvbiBkb2Vzbid0IHVzZSAiY29uc3QiICovCi0gICAgICAgIGlmIChQ eURpY3RfU2V0SXRlbVN0cmluZyhkaWN0LCAoY2hhciAqKWtleSwgdmFsdWUpID09IC0xKSB7Cisg ICAgICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkaWN0LCAoY2hhciAqKWtleSwgdmFsdWUp ID09IC0xKQorICAgICAgICAgIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CiAgICAg ICAgICAgICBQeV9ERUNSRUYoZGljdCk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAg ICAgfQorICAgICAgICAgIH0KICAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKLSAgICB9CisgICAg ICB9CiAKICAgICByZXR1cm4gZGljdDsKIH0KQEAgLTQ0Niw3ICs1MDUsNyBAQAogICAgICAgdXJs ID0gUHlfTm9uZTsKICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICB9Ci0gICAgICAgIAor CiAgIGlmIChpdGVtLT5jb3B5ZnJvbV91cmwpCiAgICAgY2ZfdXJsID0gUHlTdHJpbmdfRnJvbVN0 cmluZyhpdGVtLT5jb3B5ZnJvbV91cmwpOwogICBlbHNlCkBAIC00NTQsNyArNTEzLDcgQEAKICAg ICAgIGNmX3VybCA9IFB5X05vbmU7CiAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgfQot ICAgICAgICAKKwogICBraW5kID0gUHlJbnRfRnJvbUxvbmcoaXRlbS0+a2luZCk7CiAgIHJldiA9 IFB5SW50X0Zyb21Mb25nKGl0ZW0tPnJldmlzaW9uKTsKICAgc3RhdGUgPSBQeUludF9Gcm9tTG9u ZyhpdGVtLT5zdGF0ZV9mbGFncyk7CkBAIC00ODUsNiArNTQ0LDUyIEBACiAgIHJldHVybiBjb252 ZXJ0X2hhc2goaGFzaCwgY29udmVydF9zdm5fc3RyaW5nX3QsIE5VTEwsIE5VTEwpOwogfQogCitz dGF0aWMgUHlPYmplY3QgKnByb3BhcnJheV90b19kaWN0KGNvbnN0IGFwcl9hcnJheV9oZWFkZXJf dCAqYXJyYXkpCit7CisgICAgUHlPYmplY3QgKmRpY3QgPSBQeURpY3RfTmV3KCk7CisgICAgaW50 IGk7CisKKyAgICBpZiAoZGljdCA9PSBOVUxMKQorICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBm b3IgKGkgPSAwOyBpIDwgYXJyYXktPm5lbHRzOyArK2kpCisgICAgICB7CisgICAgICAgIHN2bl9w cm9wX3QgcHJvcDsKKyAgICAgICAgUHlPYmplY3QgKnB5X2tleSwgKnB5X3ZhbHVlOworCisgICAg ICAgIHByb3AgPSBBUFJfQVJSQVlfSURYKGFycmF5LCBpLCBzdm5fcHJvcF90KTsKKworICAgICAg ICBweV9rZXkgPSBQeVN0cmluZ19Gcm9tU3RyaW5nKHByb3AubmFtZSk7CisgICAgICAgIGlmIChw eV9rZXkgPT0gTlVMTCkKKyAgICAgICAgICBnb3RvIGVycm9yOworCisgICAgICAgIGlmIChwcm9w LnZhbHVlID09IE5VTEwpCisgICAgICAgICAgeworICAgICAgICAgICAgIHB5X3ZhbHVlID0gUHlf Tm9uZTsKKyAgICAgICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CisgICAgICAgICAgfQorICAg ICAgICBlbHNlCisgICAgICAgICAgeworICAgICAgICAgICAgIHB5X3ZhbHVlID0gUHlTdHJpbmdf RnJvbVN0cmluZ0FuZFNpemUoKHZvaWQgKilwcm9wLnZhbHVlLT5kYXRhLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcC52YWx1ZS0+bGVuKTsK KyAgICAgICAgICAgICBpZiAocHlfdmFsdWUgPT0gTlVMTCkKKyAgICAgICAgICAgICAgIHsKKyAg ICAgICAgICAgICAgICAgUHlfREVDUkVGKHB5X2tleSk7CisgICAgICAgICAgICAgICAgICBnb3Rv IGVycm9yOworICAgICAgICAgICAgICAgfQorICAgICAgICAgIH0KKworICAgICAgICBQeURpY3Rf U2V0SXRlbShkaWN0LCBweV9rZXksIHB5X3ZhbHVlKTsKKyAgICB9CisKKyAgICByZXR1cm4gZGlj dDsKKworICBlcnJvcjoKKyAgICBQeV9ERUNSRUYoZGljdCk7CisgICAgcmV0dXJuIE5VTEw7CisK K30KKwogCiBQeU9iamVjdCAqc3ZuX3N3aWdfcHlfbG9jYXRpb25oYXNoX3RvX2RpY3QoYXByX2hh c2hfdCAqaGFzaCkKIHsKQEAgLTQ5Niw3ICs2MDEsNyBAQAogICAgIGlmIChkaWN0ID09IE5VTEwp CiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgZm9yIChoaSA9IGFwcl9oYXNoX2ZpcnN0KE5V TEwsIGhhc2gpOyBoaTsgaGkgPSBhcHJfaGFzaF9uZXh0KGhpKSkgCisgICAgZm9yIChoaSA9IGFw cl9oYXNoX2ZpcnN0KE5VTEwsIGhhc2gpOyBoaTsgaGkgPSBhcHJfaGFzaF9uZXh0KGhpKSkKICAg ICAgIHsKICAgICAgICAgY29uc3Qgdm9pZCAqazsKICAgICAgICAgdm9pZCAqdjsKQEAgLTUxMCwx MiArNjE1LDEzIEBACiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICB9CiAgICAg ICAgIHZhbHVlID0gUHlTdHJpbmdfRnJvbVN0cmluZygoY2hhciAqKXYpOwotICAgICAgICBpZiAo dmFsdWUgPT0gTlVMTCkgeworICAgICAgICBpZiAodmFsdWUgPT0gTlVMTCkKKyAgICAgICAgICB7 CiAgICAgICAgICAgICBQeV9ERUNSRUYoa2V5KTsKICAgICAgICAgICAgIFB5X0RFQ1JFRihkaWN0 KTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIGlmIChQeURp Y3RfU2V0SXRlbShkaWN0LCBrZXksIHZhbHVlKSA9PSAtMSkgCisgICAgICAgICAgfQorICAgICAg ICBpZiAoUHlEaWN0X1NldEl0ZW0oZGljdCwga2V5LCB2YWx1ZSkgPT0gLTEpCiAgICAgICAgICAg ewogICAgICAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKICAgICAgICAgICAgIFB5X0RFQ1JFRihk aWN0KTsKQEAgLTUyNywxMSArNjMzLDExIEBACiAgICAgcmV0dXJuIGRpY3Q7CiB9CiAKLVB5T2Jq ZWN0ICpzdm5fc3dpZ19weV9jb252ZXJ0X2hhc2goYXByX2hhc2hfdCAqaGFzaCwgc3dpZ190eXBl X2luZm8gKnR5cGUsIAorUHlPYmplY3QgKnN2bl9zd2lnX3B5X2NvbnZlcnRfaGFzaChhcHJfaGFz aF90ICpoYXNoLCBzd2lnX3R5cGVfaW5mbyAqdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUHlPYmplY3QgKnB5X3Bvb2wpCiB7CiAgIHJldHVybiBjb252ZXJ0X2hhc2go aGFzaCwgY29udmVydF90b19zd2lndHlwZSwgdHlwZSwgcHlfcG9vbCk7Ci19ICAKK30KIAogI2Rl ZmluZSBERUNMQVJFX1NXSUdfQ09OU1RSVUNUT1IodHlwZSwgZHVwKSBcCiBzdGF0aWMgUHlPYmpl Y3QgKm1ha2Vfb2JfIyN0eXBlKHZvaWQgKnZhbHVlKSBcCkBAIC01NDMsMTMgKzY0OSwxNiBAQAog ICByZXR1cm4gc3ZuX3N3aWdfTmV3UG9pbnRlck9ialN0cmluZyhuZXdfdmFsdWUsICJzdm5fIiAj dHlwZSAiX3QgKiIsIFwKICAgICAgIG5ld19weV9wb29sKTsgXAogfQotIAorCiBERUNMQVJFX1NX SUdfQ09OU1RSVUNUT1IodHhkZWx0YV93aW5kb3csIHN2bl90eGRlbHRhX3dpbmRvd19kdXApCiBE RUNMQVJFX1NXSUdfQ09OU1RSVUNUT1IobG9nX2NoYW5nZWRfcGF0aCwgc3ZuX2xvZ19jaGFuZ2Vk X3BhdGhfZHVwKQogREVDTEFSRV9TV0lHX0NPTlNUUlVDVE9SKHdjX3N0YXR1cywgc3ZuX3djX2R1 cF9zdGF0dXMpCiBERUNMQVJFX1NXSUdfQ09OU1RSVUNUT1IobG9jaywgc3ZuX2xvY2tfZHVwKQog REVDTEFSRV9TV0lHX0NPTlNUUlVDVE9SKGF1dGhfc3NsX3NlcnZlcl9jZXJ0X2luZm8sCiAgICAg c3ZuX2F1dGhfc3NsX3NlcnZlcl9jZXJ0X2luZm9fZHVwKQorREVDTEFSRV9TV0lHX0NPTlNUUlVD VE9SKGluZm8sIHN2bl9pbmZvX2R1cCkKK0RFQ0xBUkVfU1dJR19DT05TVFJVQ1RPUihjb21taXRf aW5mbywgc3ZuX2NvbW1pdF9pbmZvX2R1cCkKK0RFQ0xBUkVfU1dJR19DT05TVFJVQ1RPUih3Y19u b3RpZnksIHN2bl93Y19kdXBfbm90aWZ5KQogCiBzdGF0aWMgUHlPYmplY3QgKmNvbnZlcnRfbG9n X2NoYW5nZWRfcGF0aCh2b2lkICp2YWx1ZSwgdm9pZCAqY3R4LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKnB5X3Bvb2wpCkBAIC01NjIsMTQgKzY3 MSwxNSBAQAogICAgIFB5T2JqZWN0ICpsaXN0ID0gUHlMaXN0X05ldygwKTsKICAgICBjaGFyICpz OwogCi0gICAgd2hpbGUgKChzID0gKnN0cmluZ3MrKykgIT0gTlVMTCkgeworICAgIHdoaWxlICgo cyA9ICpzdHJpbmdzKyspICE9IE5VTEwpCisgICAgICB7CiAgICAgICAgIFB5T2JqZWN0ICpvYiA9 IFB5U3RyaW5nX0Zyb21TdHJpbmcocyk7CiAKICAgICAgICAgaWYgKG9iID09IE5VTEwpCiAgICAg ICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChsaXN0LCBvYikg PT0gLTEpCiAgICAgICAgICAgICBnb3RvIGVycm9yOwotICAgIH0KKyAgICAgIH0KIAogICAgIHJl dHVybiBsaXN0OwogCkBAIC01ODQsMTYgKzY5NCwxNyBAQAogICBhcHJfaGFzaF90ICpoYXNoOwog ICBQeU9iamVjdCAqa2V5czsKICAgaW50IGksIG51bV9rZXlzOwotICAKKwogICBpZiAoZGljdCA9 PSBQeV9Ob25lKQogICAgIHJldHVybiBOVUxMOwogCi0gIGlmICghUHlEaWN0X0NoZWNrKGRpY3Qp KSB7Ci0gICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgIm5vdCBhIGRpY3Rpb25h cnkiKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQorICBpZiAoIVB5RGljdF9DaGVjayhkaWN0KSkK KyAgICB7CisgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAibm90IGEgZGlj dGlvbmFyeSIpOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCi0gIGhhc2ggPSBhcHJfaGFz aF9tYWtlKHBvb2wpOyAgCisgIGhhc2ggPSBhcHJfaGFzaF9tYWtlKHBvb2wpOwogICBrZXlzID0g UHlEaWN0X0tleXMoZGljdCk7CiAgIG51bV9rZXlzID0gUHlMaXN0X1NpemUoa2V5cyk7CiAgIGZv ciAoaSA9IDA7IGkgPCBudW1fa2V5czsgaSsrKQpAQCAtNjA2LDcgKzcxNyw3IEBACiAgICAgICBQ eV9ERUNSRUYodmFsdWUpOwogICAgICAgaWYgKCEgKHByb3BuYW1lICYmIHByb3B2YWwpKQogICAg ICAgICB7Ci0gICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgCisgICAg ICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgImRpY3Rpb25hcnkga2V5cy92YWx1ZXMgYXJlbid0IHN0cmluZ3MiKTsKICAgICAg ICAgICBQeV9ERUNSRUYoa2V5cyk7CiAgICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC02MjgsMTIg KzczOSwxMyBAQAogICBpZiAoZGljdCA9PSBQeV9Ob25lKQogICAgIHJldHVybiBOVUxMOwogCi0g IGlmICghUHlEaWN0X0NoZWNrKGRpY3QpKSB7Ci0gICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5 cGVFcnJvciwgIm5vdCBhIGRpY3Rpb25hcnkiKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQorICBp ZiAoIVB5RGljdF9DaGVjayhkaWN0KSkKKyAgICB7CisgICAgICBQeUVycl9TZXRTdHJpbmcoUHlF eGNfVHlwZUVycm9yLCAibm90IGEgZGljdGlvbmFyeSIpOworICAgICAgcmV0dXJuIE5VTEw7Cisg ICAgfQogCi0gIGhhc2ggPSBhcHJfaGFzaF9tYWtlKHBvb2wpOyAgCisgIGhhc2ggPSBhcHJfaGFz aF9tYWtlKHBvb2wpOwogICBrZXlzID0gUHlEaWN0X0tleXMoZGljdCk7CiAgIG51bV9rZXlzID0g UHlMaXN0X1NpemUoa2V5cyk7CiAgIGZvciAoaSA9IDA7IGkgPCBudW1fa2V5czsgaSsrKQpAQCAt NjQ2LDcgKzc1OCw3IEBACiAgICAgICBQeV9ERUNSRUYodmFsdWUpOwogICAgICAgaWYgKCEgKHBy b3BuYW1lICYmIHByb3B2YWwpKQogICAgICAgICB7Ci0gICAgICAgICAgUHlFcnJfU2V0U3RyaW5n KFB5RXhjX1R5cGVFcnJvciwgCisgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVF cnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgImRpY3Rpb25hcnkga2V5cy92YWx1ZXMg YXJlbid0IHN0cmluZ3MiKTsKICAgICAgICAgICBQeV9ERUNSRUYoa2V5cyk7CiAgICAgICAgICAg cmV0dXJuIE5VTEw7CkBAIC02NjQsMjcgKzc3NiwzMCBAQAogICAgIGludCB0YXJnbGVuOwogICAg IGFwcl9hcnJheV9oZWFkZXJfdCAqdGVtcDsKIAotICAgIGlmICghUHlTZXF1ZW5jZV9DaGVjayhz b3VyY2UpKSB7CisgICAgaWYgKCFQeVNlcXVlbmNlX0NoZWNrKHNvdXJjZSkpCisgICAgICB7CiAg ICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJub3QgYSBzZXF1ZW5jZSIp OwogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CisgICAgICB9CiAgICAgdGFyZ2xlbiA9IFB5 U2VxdWVuY2VfTGVuZ3RoKHNvdXJjZSk7CiAgICAgdGVtcCA9IGFwcl9hcnJheV9tYWtlKHBvb2ws IHRhcmdsZW4sIHNpemVvZihjb25zdCBjaGFyICopKTsKICAgICAvKiBBUFJfQVJSQVlfSURYIGRv ZXNuJ3QgYWN0dWFsbHkgaW5jcmVtZW50IHRoZSBhcnJheSBpdGVtIGNvdW50CiAgICAgICAgKGxp a2UsIHNheSwgYXByX2FycmF5X3B1c2ggd291bGQpLiAqLwogICAgIHRlbXAtPm5lbHRzID0gdGFy Z2xlbjsKLSAgICB3aGlsZSAodGFyZ2xlbi0tKSB7CisgICAgd2hpbGUgKHRhcmdsZW4tLSkKKyAg ICAgIHsKICAgICAgICAgUHlPYmplY3QgKm8gPSBQeVNlcXVlbmNlX0dldEl0ZW0oc291cmNlLCB0 YXJnbGVuKTsKICAgICAgICAgaWYgKG8gPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiBOVUxM OwotICAgICAgICBpZiAoIVB5U3RyaW5nX0NoZWNrKG8pKSB7CisgICAgICAgIGlmICghUHlTdHJp bmdfQ2hlY2sobykpCisgICAgICAgICAgewogICAgICAgICAgICAgUHlfREVDUkVGKG8pOwogICAg ICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgIm5vdCBhIHN0cmluZyIp OwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KKyAgICAgICAgICB9CiAgICAg ICAgIEFQUl9BUlJBWV9JRFgodGVtcCwgdGFyZ2xlbiwgY29uc3QgY2hhciAqKSA9IFB5U3RyaW5n X0FTX1NUUklORyhvKTsKICAgICAgICAgUHlfREVDUkVGKG8pOwotICAgIH0KKyAgICAgIH0KICAg ICByZXR1cm4gdGVtcDsKIH0KIApAQCAtNjk1LDMyICs4MTAsMzcgQEAKICAgICBpbnQgdGFyZ2xl bjsKICAgICBhcHJfYXJyYXlfaGVhZGVyX3QgKnRlbXA7CiAKLSAgICBpZiAoIVB5U2VxdWVuY2Vf Q2hlY2soc291cmNlKSkgeworICAgIGlmICghUHlTZXF1ZW5jZV9DaGVjayhzb3VyY2UpKQorICAg ICAgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAibm90IGEgc2Vx dWVuY2UiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQorICAgICAgfQogICAgIHRhcmds ZW4gPSBQeVNlcXVlbmNlX0xlbmd0aChzb3VyY2UpOwogICAgIHRlbXAgPSBhcHJfYXJyYXlfbWFr ZShwb29sLCB0YXJnbGVuLCBzaXplb2Yoc3ZuX3Jldm51bV90KSk7CiAgICAgLyogQVBSX0FSUkFZ X0lEWCBkb2Vzbid0IGFjdHVhbGx5IGluY3JlbWVudCB0aGUgYXJyYXkgaXRlbSBjb3VudAogICAg ICAgIChsaWtlLCBzYXksIGFwcl9hcnJheV9wdXNoIHdvdWxkKS4gKi8KICAgICB0ZW1wLT5uZWx0 cyA9IHRhcmdsZW47Ci0gICAgd2hpbGUgKHRhcmdsZW4tLSkgeworICAgIHdoaWxlICh0YXJnbGVu LS0pCisgICAgICB7CiAgICAgICAgIFB5T2JqZWN0ICpvID0gUHlTZXF1ZW5jZV9HZXRJdGVtKHNv dXJjZSwgdGFyZ2xlbik7CiAgICAgICAgIGlmIChvID09IE5VTEwpCiAgICAgICAgICAgICByZXR1 cm4gTlVMTDsKLSAgICAgICAgaWYgKFB5TG9uZ19DaGVjayhvKSkgewotICAgICAgICAgICAgQVBS X0FSUkFZX0lEWCh0ZW1wLCB0YXJnbGVuLCBzdm5fcmV2bnVtX3QpID0gCisgICAgICAgIGlmIChQ eUxvbmdfQ2hlY2sobykpCisgICAgICAgICAgeworICAgICAgICAgICAgQVBSX0FSUkFZX0lEWCh0 ZW1wLCB0YXJnbGVuLCBzdm5fcmV2bnVtX3QpID0KICAgICAgICAgICAgICAgKHN2bl9yZXZudW1f dClQeUxvbmdfQXNMb25nKG8pOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKFB5SW50X0No ZWNrKG8pKSB7Ci0gICAgICAgICAgICBBUFJfQVJSQVlfSURYKHRlbXAsIHRhcmdsZW4sIHN2bl9y ZXZudW1fdCkgPSAKKyAgICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKFB5SW50X0NoZWNrKG8p KQorICAgICAgICAgIHsKKyAgICAgICAgICAgIEFQUl9BUlJBWV9JRFgodGVtcCwgdGFyZ2xlbiwg c3ZuX3Jldm51bV90KSA9CiAgICAgICAgICAgICAgIChzdm5fcmV2bnVtX3QpUHlJbnRfQXNMb25n KG8pOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgeworICAgICAgICAgIH0KKyAgICAgICAgZWxz ZQorICAgICAgICAgIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRihvKTsKICAgICAgICAgICAgIFB5 RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJub3QgYW4gaW50ZWdlciB0eXBlIik7CiAg ICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQorICAgICAgICAgIH0KICAgICAgICAg UHlfREVDUkVGKG8pOwogICAgIH0KICAgICByZXR1cm4gdGVtcDsKQEAgLTczNywxMyArODU3LDE0 IEBACiAgICAgUHlPYmplY3QgKmxpc3QgPSBQeUxpc3RfTmV3KGFycmF5LT5uZWx0cyk7CiAgICAg aW50IGk7CiAKLSAgICBmb3IgKGkgPSAwOyBpIDwgYXJyYXktPm5lbHRzOyArK2kpIHsKLSAgICAg ICAgUHlPYmplY3QgKm9iID0gCisgICAgZm9yIChpID0gMDsgaSA8IGFycmF5LT5uZWx0czsgKytp KQorICAgICAgeworICAgICAgICBQeU9iamVjdCAqb2IgPQogICAgICAgICAgIFB5U3RyaW5nX0Zy b21TdHJpbmcoQVBSX0FSUkFZX0lEWChhcnJheSwgaSwgY29uc3QgY2hhciAqKSk7CiAgICAgICAg IGlmIChvYiA9PSBOVUxMKQogICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIFB5TGlzdF9T RVRfSVRFTShsaXN0LCBpLCBvYik7Ci0gICAgfQorICAgICAgfQogICAgIHJldHVybiBsaXN0Owog CiAgIGVycm9yOgpAQCAtNzU3LDEzICs4NzgsMTQgQEAKICAgICBQeU9iamVjdCAqbGlzdCA9IFB5 TGlzdF9OZXcoYXJyYXktPm5lbHRzKTsKICAgICBpbnQgaTsKIAotICAgIGZvciAoaSA9IDA7IGkg PCBhcnJheS0+bmVsdHM7ICsraSkgewotICAgICAgICBQeU9iamVjdCAqb2IgCisgICAgZm9yIChp ID0gMDsgaSA8IGFycmF5LT5uZWx0czsgKytpKQorICAgICAgeworICAgICAgICBQeU9iamVjdCAq b2IKICAgICAgICAgICA9IFB5SW50X0Zyb21Mb25nKEFQUl9BUlJBWV9JRFgoYXJyYXksIGksIHN2 bl9yZXZudW1fdCkpOwogICAgICAgICBpZiAob2IgPT0gTlVMTCkKICAgICAgICAgICBnb3RvIGVy cm9yOwogICAgICAgICBQeUxpc3RfU0VUX0lURU0obGlzdCwgaSwgb2IpOwotICAgIH0KKyAgICAg IH0KICAgICByZXR1cm4gbGlzdDsKIAogICBlcnJvcjoKQEAgLTc3OCwxMyArOTAwLDE0IEBACiAg ICAgUHlPYmplY3QgKmxpc3QgPSBQeUxpc3RfTmV3KGFycmF5LT5uZWx0cyk7CiAgICAgaW50IGk7 CiAKLSAgICBmb3IgKGkgPSAwOyBpIDwgYXJyYXktPm5lbHRzOyArK2kpIHsKKyAgICBmb3IgKGkg PSAwOyBpIDwgYXJyYXktPm5lbHRzOyArK2kpCisgICAgICB7CiAgICAgICAgIFB5T2JqZWN0ICpv YiA9IGNvbnZlcnRfc3ZuX2NsaWVudF9jb21taXRfaXRlbV90CiAgICAgICAgICAgKEFQUl9BUlJB WV9JRFgoYXJyYXksIGksIHN2bl9jbGllbnRfY29tbWl0X2l0ZW1fdCAqKSwgTlVMTCk7CiAgICAg ICAgIGlmIChvYiA9PSBOVUxMKQogICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIFB5TGlz dF9TRVRfSVRFTShsaXN0LCBpLCBvYik7Ci0gICAgfQorICAgICAgfQogICAgIHJldHVybiBsaXN0 OwogCiAgIGVycm9yOgpAQCAtODI5LDggKzk1Miw4IEBACiAgIFB5T2JqZWN0ICpiYXRvbjsgICAg ICAvKiB0aGUgZGlyL2ZpbGUgYmF0b24gKG9yIE5VTEwgZm9yIGVkaXQgYmF0b24pICovCiB9IGl0 ZW1fYmF0b247CiAKLXN0YXRpYyBpdGVtX2JhdG9uICptYWtlX2JhdG9uKGFwcl9wb29sX3QgKnBv b2wsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmVkaXRvciwgCitz dGF0aWMgaXRlbV9iYXRvbiAqbWFrZV9iYXRvbihhcHJfcG9vbF90ICpwb29sLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmVkaXRvciwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFB5T2JqZWN0ICpiYXRvbikKIHsKICAgaXRlbV9iYXRvbiAqbmV3YiA9IGFw cl9wYWxsb2MocG9vbCwgc2l6ZW9mKCpuZXdiKSk7CkBAIC04NDYsNyArOTY5LDcgQEAKICAgcmV0 dXJuIG5ld2I7CiB9CiAKLXN0YXRpYyBzdm5fZXJyb3JfdCAqY2xvc2VfYmF0b24odm9pZCAqYmF0 b24sIAorc3RhdGljIHN2bl9lcnJvcl90ICpjbG9zZV9iYXRvbih2b2lkICpiYXRvbiwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbWV0aG9kKQogewogICBpdGVt X2JhdG9uICppYiA9IGJhdG9uOwpAQCAtOTA3LDcgKzEwMzAsNyBAQAogICAvKiB0aGVyZSBpcyBu byByZXR1cm4gdmFsdWUsIHNvIGp1c3QgdG9zcyB0aGlzIG9iamVjdCAocHJvYmFibHkgUHlfTm9u ZSkgKi8KICAgUHlfREVDUkVGKHJlc3VsdCk7CiAgIGVyciA9IFNWTl9OT19FUlJPUjsKLSAgCisK ICBmaW5pc2hlZDoKICAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7CiAgIHJldHVybiBl cnI7CkBAIC0xMDI4LDcgKzExNTEsNyBAQAogICAvKiBtYWtlX2JhdG9uIHRha2VzIG91ciAncmVz dWx0JyByZWZlcmVuY2UgKi8KICAgKmNoaWxkX2JhdG9uID0gbWFrZV9iYXRvbihkaXJfcG9vbCwg aWItPmVkaXRvciwgcmVzdWx0KTsKICAgZXJyID0gU1ZOX05PX0VSUk9SOwotICAKKwogIGZpbmlz aGVkOgogICBzdm5fc3dpZ19weV9yZWxlYXNlX3B5X2xvY2soKTsKICAgcmV0dXJuIGVycjsKQEAg LTEwNDgsNyArMTE3MSw3IEBACiAgIC8qICMjIyBweXRob24gZG9lc24ndCBoYXZlICdjb25zdCcg b24gdGhlIG1ldGhvZCBuYW1lIGFuZCBmb3JtYXQgKi8KICAgaWYgKChyZXN1bHQgPSBQeU9iamVj dF9DYWxsTWV0aG9kKGliLT5lZGl0b3IsIChjaGFyICopImNoYW5nZV9kaXJfcHJvcCIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJPc3MjTyYiLCBpYi0+YmF0 b24sIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA/IHZh bHVlLT5kYXRhIDogTlVMTCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2 YWx1ZSA/IHZhbHVlLT5kYXRhIDogTlVMTCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHZhbHVlID8gdmFsdWUtPmxlbiA6IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBtYWtlX29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQogICAgIHsKQEAgLTExMTMs NyArMTIzNiw3IEBACiAgIGl0ZW1fYmF0b24gKmliID0gcGFyZW50X2JhdG9uOwogICBQeU9iamVj dCAqcmVzdWx0OwogICBzdm5fZXJyb3JfdCAqZXJyOwotICAKKwogICBzdm5fc3dpZ19weV9hY3F1 aXJlX3B5X2xvY2soKTsKIAogICAvKiAjIyMgcHl0aG9uIGRvZXNuJ3QgaGF2ZSAnY29uc3QnIG9u IHRoZSBtZXRob2QgbmFtZSBhbmQgZm9ybWF0ICovCkBAIC0xMTU5LDcgKzEyODIsNyBAQAogICAg IHsKICAgICAgIC8qIGludm9rZSB0aGUgaGFuZGxlciB3aXRoIHRoZSB3aW5kb3cgKi8KICAgICAg IC8qICMjIyBweXRob24gZG9lc24ndCBoYXZlICdjb25zdCcgb24gdGhlIGZvcm1hdCAqLwotICAg ICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGhhbmRsZXIsIChjaGFyICopIk8mIiwg CisgICAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oaGFuZGxlciwgKGNoYXIgKiki TyYiLAogICAgICAgICBtYWtlX29iX3R4ZGVsdGFfd2luZG93LCB3aW5kb3cpOwogICAgIH0KIApA QCAtMTE3OCw3ICsxMzAxLDcgQEAKICAgcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHN2bl9lcnJv cl90ICphcHBseV90ZXh0ZGVsdGEodm9pZCAqZmlsZV9iYXRvbiwgCitzdGF0aWMgc3ZuX2Vycm9y X3QgKmFwcGx5X3RleHRkZWx0YSh2b2lkICpmaWxlX2JhdG9uLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYmFzZV9jaGVja3N1bSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzdm5fdHhkZWx0YV93aW5kb3dfaGFuZGxlcl90ICpoYW5k bGVyLApAQCAtMTIzOCw3ICsxMzYxLDcgQEAKICAgLyogIyMjIHB5dGhvbiBkb2Vzbid0IGhhdmUg J2NvbnN0JyBvbiB0aGUgbWV0aG9kIG5hbWUgYW5kIGZvcm1hdCAqLwogICBpZiAoKHJlc3VsdCA9 IFB5T2JqZWN0X0NhbGxNZXRob2QoaWItPmVkaXRvciwgKGNoYXIgKikiY2hhbmdlX2ZpbGVfcHJv cCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJPc3MjTyYi LCBpYi0+YmF0b24sIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2 YWx1ZSA/IHZhbHVlLT5kYXRhIDogTlVMTCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB2YWx1ZSA/IHZhbHVlLT5kYXRhIDogTlVMTCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHZhbHVlID8gdmFsdWUtPmxlbiA6IDAsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBtYWtlX29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQogICAgIHsK QEAgLTEyNDksNyArMTM3Miw3IEBACiAgIC8qIHRoZXJlIGlzIG5vIHJldHVybiB2YWx1ZSwgc28g anVzdCB0b3NzIHRoaXMgb2JqZWN0IChwcm9iYWJseSBQeV9Ob25lKSAqLwogICBQeV9ERUNSRUYo cmVzdWx0KTsKICAgZXJyID0gU1ZOX05PX0VSUk9SOwotICAKKwogIGZpbmlzaGVkOgogICBzdm5f c3dpZ19weV9yZWxlYXNlX3B5X2xvY2soKTsKICAgcmV0dXJuIGVycjsKQEAgLTE0NTIsNyArMTU3 NSw3IEBACiAgIHN2bl9zdHJlYW1fdCAqc3RyZWFtOwogCiAgIC8qIEJvcnJvdyB0aGUgY2FsbGVy J3MgcmVmZXJlbmNlIHRvIHB5X2lvIC0gdGhpcyBpcyBzYWZlIG9ubHkgYmVjYXVzZSB0aGUKLSAg ICogY2FsbGVyIG11c3QgaGF2ZSBhIHJlZmVyZW5jZSBpbiBvcmRlciB0byBwYXNzIHRoZSBvYmpl Y3QgaW50byB0aGUgCisgICAqIGNhbGxlciBtdXN0IGhhdmUgYSByZWZlcmVuY2UgaW4gb3JkZXIg dG8gcGFzcyB0aGUgb2JqZWN0IGludG8gdGhlCiAgICAqIGJpbmRpbmdzLCBhbmQgd2Ugd2lsbCBi ZSBmaW5pc2hlZCB3aXRoIHRoZSBweV9pbyBvYmplY3QgYmVmb3JlIHdlIHJldHVybgogICAgKiB0 byBweXRob24uIEkuZS4gRE8gTk9UIFNUT1JFIEFXQVkgVEhFIFJFU1VMVElORyBzdm5fc3RyZWFt X3QgKiBmb3IgdXNlCiAgICAqIG92ZXIgbXVsdGlwbGUgY2FsbHMgaW50byB0aGUgYmluZGluZ3Mu ICovCkBAIC0xNDgxLDExICsxNjA0LDExIEBACiAgICAgcmV0dXJuOwogCiAgIHN2bl9zd2lnX3B5 X2FjcXVpcmVfcHlfbG9jaygpOwotICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlv bihmdW5jdGlvbiwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFy ICopIihzaWlzaWlpKSIsIAorICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihm dW5jdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKiki KHNpaXNpaWkpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCwg YWN0aW9uLCBraW5kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW1l X3R5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRfc3Rh dGUsIHByb3Bfc3RhdGUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b250ZW50X3N0YXRlLCBwcm9wX3N0YXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICByZXZpc2lvbikpID09IE5VTEwpCiAgICAgewogICAgICAgZXJyID0gY2FsbGJhY2tf ZXhjZXB0aW9uX2Vycm9yKCk7CkBAIC0xNTA2LDYgKzE2MjksNDEgQEAKIH0KIAogCit2b2lkIHN2 bl9zd2lnX3B5X25vdGlmeV9mdW5jMih2b2lkICpiYXRvbiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IHN2bl93Y19ub3RpZnlfdCAqbm90aWZ5LAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgUHlPYmplY3QgKmZ1bmN0aW9u ID0gYmF0b247CisgIFB5T2JqZWN0ICpyZXN1bHQ7CisgIHN2bl9lcnJvcl90ICplcnIgPSBTVk5f Tk9fRVJST1I7CisKKyAgaWYgKGZ1bmN0aW9uID09IE5VTEwgfHwgZnVuY3Rpb24gPT0gUHlfTm9u ZSkKKyAgICByZXR1cm47CisKKyAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7CisKKyAg aWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oZnVuY3Rpb24sCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopIihPJk8mKSIsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vfb2Jfd2Nfbm90aWZ5LCBub3RpZnksCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vfb2JfcG9vbCwgcG9vbCkp ID09IE5VTEwpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7 CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgLyogVGhlIGNhbGxiYWNrIHNob3VsZG4ndCBi ZSByZXR1cm5pbmcgYW55dGhpbmcuICovCisgICAgICBpZiAocmVzdWx0ICE9IFB5X05vbmUpCisg ICAgICAgIGVyciA9IGNhbGxiYWNrX2JhZF9yZXR1cm5fZXJyb3IoIk5vdCBOb25lIik7CisgICAg ICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICB9CisKKyAgLyogT3VyIGVycm9yIGhhcyBubyBwbGFj ZSB0byBnby4gOi0oICovCisgIGlmIChlcnIpCisgICAgc3ZuX2Vycm9yX2NsZWFyKGVycik7CisK KyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7Cit9CisKIHZvaWQgc3ZuX3N3aWdfcHlf c3RhdHVzX2Z1bmModm9pZCAqYmF0b24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IGNoYXIgKnBhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2bl93Y19zdGF0 dXNfdCAqc3RhdHVzKQpAQCAtMTUzNCw3ICsxNjkyLDcgQEAKICAgLyogT3VyIGVycm9yIGhhcyBu byBwbGFjZSB0byBnby4gOi0oICovCiAgIGlmIChlcnIpCiAgICAgc3ZuX2Vycm9yX2NsZWFyKGVy cik7Ci0gICAgCisKICAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7CiB9CiAKQEAgLTE1 ODcsNyArMTc0NSw3IEBACiAgICAgcmV0dXJuIFNWTl9OT19FUlJPUjsKIAogICBzdm5fc3dpZ19w eV9hY3F1aXJlX3B5X2xvY2soKTsKLSAgCisKICAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxs RnVuY3Rpb24oZnVuY3Rpb24sIChjaGFyICopIk8mTyYiLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBtYWtlX29iX2xvY2ssIGxvY2ssCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG1ha2Vfb2JfcG9vbCwgcG9vbCkpID09IE5VTEwpCkBAIC0xNjM3 LDcgKzE3OTUsNyBAQAogICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgIH0KIAotICBpZiAo KHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihmdW5jdGlvbiwgCisgIGlmICgocmVzdWx0 ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGZ1bmN0aW9uLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoY2hhciAqKSJPTyYiLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjbXRfaXRlbXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG1ha2Vfb2JfcG9vbCwgcG9vbCkpID09IE5VTEwpCkBAIC0xNjU1LDcgKzE4MTMsNyBA QAogICAgICAgKmxvZ19tc2cgPSBOVUxMOwogICAgICAgZXJyID0gU1ZOX05PX0VSUk9SOwogICAg IH0KLSAgZWxzZSBpZiAoUHlTdHJpbmdfQ2hlY2socmVzdWx0KSkgCisgIGVsc2UgaWYgKFB5U3Ry aW5nX0NoZWNrKHJlc3VsdCkpCiAgICAgewogICAgICAgKmxvZ19tc2cgPSBhcHJfcHN0cmR1cChw b29sLCBQeVN0cmluZ19BU19TVFJJTkcocmVzdWx0KSk7CiAgICAgICBQeV9ERUNSRUYocmVzdWx0 KTsKQEAgLTE2OTAsMjEgKzE4NDgsMjMgQEAKICAgICByZXR1cm4gU1ZOX05PX0VSUk9SOwogCiAg IHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOwotICAKKwogICBweV9wb29sID0gbWFrZV9v Yl9wb29sKHBvb2wpOwotICBpZiAocHlfcG9vbCA9PSBOVUxMKSB7Ci0gICAgZXJyID0gY2FsbGJh Y2tfZXhjZXB0aW9uX2Vycm9yKCk7Ci0gICAgZ290byBmaW5pc2hlZDsKLSAgfQorICBpZiAocHlf cG9vbCA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJv cigpOworICAgICAgZ290byBmaW5pc2hlZDsKKyAgICB9CiAgIHB5X3Jvb3QgPSBtYWtlX29iX2Zz X3Jvb3Qocm9vdCwgcHlfcG9vbCk7Ci0gIGlmIChweV9yb290ID09IE5VTEwpIHsKLSAgICBQeV9E RUNSRUYocHlfcG9vbCk7Ci0gICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7Ci0g ICAgZ290byBmaW5pc2hlZDsgCi0gIH0KKyAgaWYgKHB5X3Jvb3QgPT0gTlVMTCkKKyAgICB7Cisg ICAgICBQeV9ERUNSRUYocHlfcG9vbCk7CisgICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25f ZXJyb3IoKTsKKyAgICAgIGdvdG8gZmluaXNoZWQ7CisgICAgfQogCi0gIGlmICgocmVzdWx0ID0g UHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGZ1bmN0aW9uLCAKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGNoYXIgKikiT3NPIiwgCisgIGlmICgocmVzdWx0ID0gUHlPYmplY3Rf Q2FsbEZ1bmN0aW9uKGZ1bmN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoY2hhciAqKSJPc08iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBweV9yb290LCBwYXRoLCBweV9wb29sKSkgPT0gTlVMTCkKICAgICB7CiAgICAgICBlcnIgPSBj YWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKQEAgLTE3NDAsOSArMTkwMCw5IEBACiAgICAgcmV0 dXJuIFNWTl9OT19FUlJPUjsKIAogICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xvY2soKTsKLSAg aWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oZnVuY3Rpb24sIAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJzbE8mIiwgCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGgsIHJldmlzaW9uLCAKKyAgaWYgKChyZXN1 bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oZnVuY3Rpb24sCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChjaGFyICopInNsTyYiLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBwYXRoLCByZXZpc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbWFrZV9vYl9wb29sLCBwb29sKSkgPT0gTlVMTCkKICAgICB7CiAgICAg ICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKQEAgLTE3NzAsMTcgKzE5MzAsMTgg QEAKICAgUHlPYmplY3QgKnJlc3VsdCwgKnB5X3Bvb2w7CiAgIFB5T2JqZWN0ICpjaHBhdGhzOwog ICBzdm5fZXJyb3JfdCAqZXJyID0gU1ZOX05PX0VSUk9SOwotIAorCiAgIGlmICgocmVjZWl2ZXIg PT0gTlVMTCkgfHwgKHJlY2VpdmVyID09IFB5X05vbmUpKQogICAgIHJldHVybiBTVk5fTk9fRVJS T1I7CiAKICAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7CiAKICAgcHlfcG9vbCA9IG1h a2Vfb2JfcG9vbChwb29sKTsKLSAgaWYgKHB5X3Bvb2wgPT0gTlVMTCkgewotICAgIGVyciA9IGNh bGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOwotICAgIGdvdG8gZmluaXNoZWQ7Ci0gIH0KKyAgaWYg KHB5X3Bvb2wgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25f ZXJyb3IoKTsKKyAgICAgIGdvdG8gZmluaXNoZWQ7CisgICAgfQogCiAgIGlmIChjaGFuZ2VkX3Bh dGhzKQogICAgIHsKQEAgLTE3OTMsOSArMTk1NCw5IEBACiAgICAgICBQeV9JTkNSRUYoUHlfTm9u ZSk7CiAgICAgfQogCi0gIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKHJlY2Vp dmVyLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikiT2xz c3NPIiwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNocGF0aHMsIHJl diwgYXV0aG9yLCBkYXRlLCBtc2csIAorICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5j dGlvbihyZWNlaXZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNo YXIgKikiT2xzc3NPIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hw YXRocywgcmV2LCBhdXRob3IsIGRhdGUsIG1zZywKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcHlfcG9vbCkpID09IE5VTEwpCiAgICAgewogICAgICAgZXJyID0gY2FsbGJh Y2tfZXhjZXB0aW9uX2Vycm9yKCk7CkBAIC0xODE0LDYgKzE5NzUsMzggQEAKICAgcmV0dXJuIGVy cjsKIH0KIAorc3ZuX2Vycm9yX3QgKnN2bl9zd2lnX3B5X2luZm9fcmVjZWl2ZXJfZnVuYyh2b2lk ICpiYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgY2hhciAqcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3Qgc3ZuX2luZm9fdCAqaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgUHlPYmplY3QgKnJlY2VpdmVy ID0gYmF0b247CisgIFB5T2JqZWN0ICpyZXN1bHQ7CisgIHN2bl9lcnJvcl90ICplcnIgPSBTVk5f Tk9fRVJST1I7CisKKyAgaWYgKChyZWNlaXZlciA9PSBOVUxMKSB8fCAocmVjZWl2ZXIgPT0gUHlf Tm9uZSkpCisgICAgcmV0dXJuIFNWTl9OT19FUlJPUjsKKworICBzdm5fc3dpZ19weV9hY3F1aXJl X3B5X2xvY2soKTsKKworICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihyZWNl aXZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikic08m TyYiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLCBtYWtlX29i X2luZm8sIGluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vf b2JfcG9vbCwgcG9vbCkpID09IE5VTEwpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfZXhj ZXB0aW9uX2Vycm9yKCk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgaWYgKHJlc3VsdCAh PSBQeV9Ob25lKQorICAgICAgICBlcnIgPSBjYWxsYmFja19iYWRfcmV0dXJuX2Vycm9yKCJOb3Qg Tm9uZSIpOworICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgfQorCisgIHN2bl9zd2lnX3B5 X3JlbGVhc2VfcHlfbG9jaygpOworCisgIHJldHVybiBlcnI7Cit9CiAKIHN2bl9lcnJvcl90ICpz dm5fc3dpZ19weV9jbGllbnRfYmxhbWVfcmVjZWl2ZXJfZnVuYyh2b2lkICpiYXRvbiwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfaW50NjRf dCBsaW5lX25vLApAQCAtMTgyNiwxNiArMjAxOSwxNiBAQAogICBQeU9iamVjdCAqcmVjZWl2ZXIg PSBiYXRvbjsKICAgUHlPYmplY3QgKnJlc3VsdDsKICAgc3ZuX2Vycm9yX3QgKmVyciA9IFNWTl9O T19FUlJPUjsKLSAKKwogICBpZiAoKHJlY2VpdmVyID09IE5VTEwpIHx8IChyZWNlaXZlciA9PSBQ eV9Ob25lKSkKICAgICByZXR1cm4gU1ZOX05PX0VSUk9SOwogCiAgIHN2bl9zd2lnX3B5X2FjcXVp cmVfcHlfbG9jaygpOwogCi0gIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKHJl Y2VpdmVyLCAKKyAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24ocmVjZWl2ZXIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTVk5fQVBSX0lOVDY0X1RfUFlDRk1UICJs c3NzTyYiKSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVfbm8s IHJldmlzaW9uLCBhdXRob3IsIGRhdGUsIGxpbmUsIAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoU1ZOX0FQUl9JTlQ2NF9UX1BZQ0ZNVCAibHNzc08mIiksCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVfbm8sIHJldmlzaW9uLCBhdXRob3Is IGRhdGUsIGxpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vf b2JfcG9vbCwgcG9vbCkpID09IE5VTEwpCiAgICAgewogICAgICAgZXJyID0gY2FsbGJhY2tfZXhj ZXB0aW9uX2Vycm9yKCk7CkBAIC0xODcwLDkgKzIwNjMsOSBAQAogCiAgIHN2bl9zd2lnX3B5X2Fj cXVpcmVfcHlfbG9jaygpOwogCi0gIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9u KGZ1bmN0aW9uLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIg Kikic3NsTyYiLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhbG0s IHVzZXJuYW1lLCBtYXlfc2F2ZSwgCisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0 aW9uKGZ1bmN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hh ciAqKSJzc2xPJiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWxt LCB1c2VybmFtZSwgbWF5X3NhdmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG1ha2Vfb2JfcG9vbCwgcG9vbCkpID09IE5VTEwpCiAgICAgewogICAgICAgZXJyID0gY2Fs bGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7CkBAIC0xODgyLDcgKzIwNzUsNyBAQAogICAgICAgaWYg KHJlc3VsdCAhPSBQeV9Ob25lKQogICAgICAgICB7CiAgICAgICAgICAgc3ZuX2F1dGhfY3JlZF9z aW1wbGVfdCAqdG1wX2NyZWRzID0gTlVMTDsKLSAgICAgICAgICBpZiAoc3ZuX3N3aWdfQ29udmVy dFB0clN0cmluZyhyZXN1bHQsICh2b2lkICoqKSZ0bXBfY3JlZHMsIAorICAgICAgICAgIGlmIChz dm5fc3dpZ19Db252ZXJ0UHRyU3RyaW5nKHJlc3VsdCwgKHZvaWQgKiopJnRtcF9jcmVkcywKICAg ICAgICAgICAgICAgICAic3ZuX2F1dGhfY3JlZF9zaW1wbGVfdCAqIikpCiAgICAgICAgICAgICB7 CiAgICAgICAgICAgICAgIGVyciA9IHR5cGVfY29udmVyc2lvbl9lcnJvcigic3ZuX2F1dGhfY3Jl ZF9zaW1wbGVfdCAqIik7CkBAIC0xOTIxLDkgKzIxMTQsOSBAQAogCiAgIHN2bl9zd2lnX3B5X2Fj cXVpcmVfcHlfbG9jaygpOwogCi0gIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9u KGZ1bmN0aW9uLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIg Kikic2xPJiIsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFsbSwg bWF5X3NhdmUsIAorICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihmdW5jdGlv biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikic2xPJiIs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWxtLCBtYXlfc2F2ZSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9vYl9wb29sLCBwb29s KSkgPT0gTlVMTCkKICAgICB7CiAgICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3Io KTsKQEAgLTE5MzMsNyArMjEyNiw3IEBACiAgICAgICBpZiAocmVzdWx0ICE9IFB5X05vbmUpCiAg ICAgICAgIHsKICAgICAgICAgICBzdm5fYXV0aF9jcmVkX3VzZXJuYW1lX3QgKnRtcF9jcmVkcyA9 IE5VTEw7Ci0gICAgICAgICAgaWYgKHN2bl9zd2lnX0NvbnZlcnRQdHJTdHJpbmcocmVzdWx0LCAo dm9pZCAqKikmdG1wX2NyZWRzLCAKKyAgICAgICAgICBpZiAoc3ZuX3N3aWdfQ29udmVydFB0clN0 cmluZyhyZXN1bHQsICh2b2lkICoqKSZ0bXBfY3JlZHMsCiAgICAgICAgICAgICAgICAgInN2bl9h dXRoX2NyZWRfdXNlcm5hbWVfdCAqIikpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgIGVy ciA9IHR5cGVfY29udmVyc2lvbl9lcnJvcigic3ZuX2F1dGhfY3JlZF91c2VybmFtZV90ICoiKTsK QEAgLTE5NzQsNyArMjE2Nyw3IEBACiAKICAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7 CiAKLSAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oZnVuY3Rpb24sIChjaGFy ICopInNsTyZsTyYiLCAKKyAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oZnVu Y3Rpb24sIChjaGFyICopInNsTyZsTyYiLAogICAgICAgICAgICAgICAgICAgcmVhbG0sIGZhaWx1 cmVzLCBtYWtlX29iX2F1dGhfc3NsX3NlcnZlcl9jZXJ0X2luZm8sCiAgICAgICAgICAgICAgICAg ICBjZXJ0X2luZm8sIG1heV9zYXZlLCBtYWtlX29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQogICAg IHsKQEAgLTE5ODYsNyArMjE3OSw3IEBACiAgICAgICAgIHsKICAgICAgICAgICBzdm5fYXV0aF9j cmVkX3NzbF9zZXJ2ZXJfdHJ1c3RfdCAqdG1wX2NyZWRzID0gTlVMTDsKICAgICAgICAgICBpZiAo c3ZuX3N3aWdfQ29udmVydFB0clN0cmluZwotICAgICAgICAgICAgICAocmVzdWx0LCAodm9pZCAq KikmdG1wX2NyZWRzLCAKKyAgICAgICAgICAgICAgKHJlc3VsdCwgKHZvaWQgKiopJnRtcF9jcmVk cywKICAgICAgICAgICAgICAgICJzdm5fYXV0aF9jcmVkX3NzbF9zZXJ2ZXJfdHJ1c3RfdCAqIikp CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgIGVyciA9IHR5cGVfY29udmVyc2lvbl9lcnJv cgpAQCAtMjAyNCw5ICsyMjE3LDkgQEAKIAogICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xvY2so KTsKIAotICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihmdW5jdGlvbiwgCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopInNsTyYiLCAKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhbG0sIG1heV9zYXZlLCAKKyAg aWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oZnVuY3Rpb24sCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopInNsTyYiLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICByZWFsbSwgbWF5X3NhdmUsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vfb2JfcG9vbCwgcG9vbCkpID09IE5VTEwpCiAg ICAgewogICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7CkBAIC0yMDM3LDcg KzIyMzAsNyBAQAogICAgICAgICB7CiAgICAgICAgICAgc3ZuX2F1dGhfY3JlZF9zc2xfY2xpZW50 X2NlcnRfdCAqdG1wX2NyZWRzID0gTlVMTDsKICAgICAgICAgICBpZiAoc3ZuX3N3aWdfQ29udmVy dFB0clN0cmluZwotICAgICAgICAgICAgICAocmVzdWx0LCAodm9pZCAqKikmdG1wX2NyZWRzLCAK KyAgICAgICAgICAgICAgKHJlc3VsdCwgKHZvaWQgKiopJnRtcF9jcmVkcywKICAgICAgICAgICAg ICAgICJzdm5fYXV0aF9jcmVkX3NzbF9jbGllbnRfY2VydF90ICoiKSkKICAgICAgICAgICAgIHsK ICAgICAgICAgICAgICAgZXJyID0gdHlwZV9jb252ZXJzaW9uX2Vycm9yKCJzdm5fYXV0aF9jcmVk X3NzbF9jbGllbnRfY2VydF90ICoiKTsKQEAgLTIwNzUsOSArMjI2OCw5IEBACiAKICAgc3ZuX3N3 aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7CiAKLSAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxs RnVuY3Rpb24oZnVuY3Rpb24sIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoY2hhciAqKSJzbE8mIiwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHJlYWxtLCBtYXlfc2F2ZSwgCisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9u KGZ1bmN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAq KSJzbE8mIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhbG0sIG1h eV9zYXZlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX29iX3Bv b2wsIHBvb2wpKSA9PSBOVUxMKQogICAgIHsKICAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlv bl9lcnJvcigpOwpAQCAtMjA4OCw3ICsyMjgxLDcgQEAKICAgICAgICAgewogICAgICAgICAgIHN2 bl9hdXRoX2NyZWRfc3NsX2NsaWVudF9jZXJ0X3B3X3QgKnRtcF9jcmVkcyA9IE5VTEw7CiAgICAg ICAgICAgaWYgKHN2bl9zd2lnX0NvbnZlcnRQdHJTdHJpbmcKLSAgICAgICAgICAgICAgKHJlc3Vs dCwgKHZvaWQgKiopJnRtcF9jcmVkcywgCisgICAgICAgICAgICAgIChyZXN1bHQsICh2b2lkICoq KSZ0bXBfY3JlZHMsCiAgICAgICAgICAgICAgICAic3ZuX2F1dGhfY3JlZF9zc2xfY2xpZW50X2Nl cnRfcHdfdCAqIikpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgIGVyciA9IHR5cGVfY29u dmVyc2lvbl9lcnJvcgpAQCAtMjEwOCwzICsyMzAxLDMyMyBAQAogICAqY3JlZCA9IGNyZWRzOwog ICByZXR1cm4gZXJyOwogfQorCit2b2lkCitzdm5fc3dpZ19weV9zZXR1cF9yYV9jYWxsYmFja3Mo c3ZuX3JhX2NhbGxiYWNrczJfdCAqKmNhbGxiYWNrcywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB2b2lkICoqYmF0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlP YmplY3QgKnB5X2NhbGxiYWNrcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJf cG9vbF90ICpwb29sKQoreworICBzdm5fZXJyb3JfdCAqZXJyID0gc3ZuX3JhX2NyZWF0ZV9jYWxs YmFja3MoY2FsbGJhY2tzLCBwb29sKTsKKworICBpZiAoZXJyKQorICAgIHsKKyAgICAgIHN2bl9z d2lnX3B5X3N2bl9leGNlcHRpb24oZXJyKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgKmJh dG9uID0gcHlfY2FsbGJhY2tzOworfQorCitzdm5fZXJyb3JfdCAqc3ZuX3N3aWdfcHlfY29tbWl0 X2NhbGxiYWNrMihjb25zdCBzdm5fY29tbWl0X2luZm9fdCAqY29tbWl0X2luZm8sCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpiYXRvbiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpCit7Cisg IFB5T2JqZWN0ICpyZWNlaXZlciA9IGJhdG9uOworICBQeU9iamVjdCAqcmVzdWx0OworICBzdm5f ZXJyb3JfdCAqZXJyID0gU1ZOX05PX0VSUk9SOworCisgIGlmICgocmVjZWl2ZXIgPT0gTlVMTCkg fHwgKHJlY2VpdmVyID09IFB5X05vbmUpKQorICAgIHJldHVybiBTVk5fTk9fRVJST1I7CisKKyAg c3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7CisKKyAgaWYgKChyZXN1bHQgPSBQeU9iamVj dF9DYWxsRnVuY3Rpb24ocmVjZWl2ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChjaGFyICopIk8mTyYiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBtYWtlX29iX2NvbW1pdF9pbmZvLCBjb21taXRfaW5mbywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbWFrZV9vYl9wb29sLCBwb29sKSkgPT0gTlVMTCkKKyAgICB7 CisgICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICB9CisgIGVsc2UK KyAgICB7CisgICAgICBpZiAocmVzdWx0ICE9IFB5X05vbmUpCisgICAgICAgIGVyciA9IGNhbGxi YWNrX2JhZF9yZXR1cm5fZXJyb3IoIk5vdCBOb25lIik7CisgICAgICBQeV9ERUNSRUYocmVzdWx0 KTsKKyAgICB9CisKKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7CisKKyAgcmV0dXJu IGVycjsKK30KKworc3ZuX2Vycm9yX3QgKnN2bl9zd2lnX3B5X2NvbW1pdF9jYWxsYmFjayhzdm5f cmV2bnVtX3QgbmV3X3JldmlzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBjaGFyICpkYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBjaGFyICphdXRob3IsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHZvaWQgKmJhdG9uKQoreworICBQeU9iamVjdCAqcmVjZWl2ZXIgPSBi YXRvbjsKKyAgUHlPYmplY3QgKnJlc3VsdDsKKyAgc3ZuX2Vycm9yX3QgKmVyciA9IFNWTl9OT19F UlJPUjsKKworICBpZiAoKHJlY2VpdmVyID09IE5VTEwpIHx8IChyZWNlaXZlciA9PSBQeV9Ob25l KSkKKyAgICByZXR1cm4gU1ZOX05PX0VSUk9SOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlf bG9jaygpOworCisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKHJlY2VpdmVy LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJsc3MiLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfcmV2aXNpb24sIGRhdGUs IGF1dGhvcikpID09IE5VTEwpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9u X2Vycm9yKCk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgaWYgKHJlc3VsdCAhPSBQeV9O b25lKQorICAgICAgICBlcnIgPSBjYWxsYmFja19iYWRfcmV0dXJuX2Vycm9yKCJOb3QgTm9uZSIp OworICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgfQorCisgIHN2bl9zd2lnX3B5X3JlbGVh c2VfcHlfbG9jaygpOworCisgIHJldHVybiBlcnI7Cit9CisKK3N2bl9lcnJvcl90ICpzdm5fc3dp Z19weV9yYV9maWxlX3Jldl9oYW5kbGVyX2Z1bmMoCisgICAgICAgICAgICAgICAgICAgIHZvaWQg KmJhdG9uLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwYXRoLAorICAgICAgICAg ICAgICAgICAgICBzdm5fcmV2bnVtX3QgcmV2LAorICAgICAgICAgICAgICAgICAgICBhcHJfaGFz aF90ICpyZXZfcHJvcHMsCisgICAgICAgICAgICAgICAgICAgIHN2bl90eGRlbHRhX3dpbmRvd19o YW5kbGVyX3QgKmRlbHRhX2hhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgIHZvaWQgKipkZWx0 YV9iYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgYXByX2FycmF5X2hlYWRlcl90ICpwcm9wX2Rp ZmZzLAorICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKQoreworICBQeU9iamVj dCAqaGFuZGxlciA9IGJhdG9uOworICBQeU9iamVjdCAqcmVzdWx0LCAqcHlfcmV2X3Byb3BzID0g TlVMTCwgKnB5X3Byb3BfZGlmZnMgPSBOVUxMOworICBzdm5fZXJyb3JfdCAqZXJyID0gU1ZOX05P X0VSUk9SOworCisgIGlmICgoaGFuZGxlciA9PSBOVUxMKSB8fCAoaGFuZGxlciA9PSBQeV9Ob25l KSkKKyAgICByZXR1cm4gU1ZOX05PX0VSUk9SOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlf bG9jaygpOworCisgIHB5X3Jldl9wcm9wcyA9IHN2bl9zd2lnX3B5X3Byb3BoYXNoX3RvX2RpY3Qo cmV2X3Byb3BzKTsKKyAgaWYgKHB5X3Jldl9wcm9wcyA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVy ciA9IHR5cGVfY29udmVyc2lvbl9lcnJvcigiYXByX2hhc2hfdCAqIik7CisgICAgICBnb3RvIGVy cm9yOworICAgIH0KKworICBweV9wcm9wX2RpZmZzID0gcHJvcGFycmF5X3RvX2RpY3QocHJvcF9k aWZmcyk7CisKKyAgaWYgKHB5X3Byb3BfZGlmZnMgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIg PSB0eXBlX2NvbnZlcnNpb25fZXJyb3IoImFwcl9hcnJheV9oZWFkZXJfdCAqIik7CisgICAgICBn b3RvIGVycm9yOworICAgIH0KKworICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlv bihoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAq KSJzbE9PTyYiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLCBy ZXYsIHB5X3Jldl9wcm9wcywgcHlfcHJvcF9kaWZmcywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbWFrZV9vYl9wb29sLCBwb29sKSkgPT0gTlVMTCkKKyAgICB7CisgICAg ICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICB9CisgIGVsc2UKKyAgICB7 CisgICAgICBpZiAocmVzdWx0ICE9IFB5X05vbmUpCisgICAgICAgIGVyciA9IGNhbGxiYWNrX2Jh ZF9yZXR1cm5fZXJyb3IoIk5vdCBOb25lIik7CisKKyAgICAgIC8qIEZJWE1FOiBTdXBwb3J0IHJl dHVybmVkIFR4RGVsdGFXaW5kb3cgb2JqZWN0IGFuZAorICAgICAgICogc2V0IGRlbHRhX2hhbmRs ZXIgYW5kIGRlbHRhX2JhdG9uICovCisgICAgICAqZGVsdGFfaGFuZGxlciA9IE5VTEw7CisgICAg ICAqZGVsdGFfYmF0b24gPSBOVUxMOworCisgICAgICBQeV9YREVDUkVGKHJlc3VsdCk7CisgICAg fQorCitlcnJvcjoKKworICBQeV9YREVDUkVGKHB5X3Jldl9wcm9wcyk7CisgIFB5X1hERUNSRUYo cHlfcHJvcF9kaWZmcyk7CisKKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7CisKKyAg cmV0dXJuIGVycjsKK30KKworc3RhdGljIHN2bl9lcnJvcl90ICpyZXBvcnRlcl9zZXRfcGF0aCh2 b2lkICpyZXBvcnRfYmF0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFy ICpwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX3Jldm51bV90IHJldmlzaW9u LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX2Jvb2xlYW5fdCBzdGFydF9lbXB0eSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmxvY2tfdG9rZW4sCisgICAg ICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKQoreworICBzdm5fZXJyb3Jf dCAqZXJyID0gU1ZOX05PX0VSUk9SOworICBQeU9iamVjdCAqcHlfcmVwb3J0ZXIgPSByZXBvcnRf YmF0b24sICpyZXN1bHQ7CisKKyAgaWYgKHB5X3JlcG9ydGVyID09IE5VTEwgfHwgcHlfcmVwb3J0 ZXIgPT0gUHlfTm9uZSkKKyAgICByZXR1cm4gU1ZOX05PX0VSUk9SOworCisgIHN2bl9zd2lnX3B5 X2FjcXVpcmVfcHlfbG9jaygpOworCisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbE1ldGhv ZChweV9yZXBvcnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFy ICopInNldF9wYXRoIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFy ICopInNsYnNPJiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLCBy ZXZpc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2VtcHR5 LCBsb2NrX3Rva2VuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9v Yl9wb29sLCBwb29sKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFja19leGNl cHRpb25fZXJyb3IoKTsKKyAgICB9CisgIGVsc2UgaWYgKHJlc3VsdCAhPSBQeV9Ob25lKQorICAg IHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2JhZF9yZXR1cm5fZXJyb3IoIk5vdCBOb25lIik7Cisg ICAgfQorCisgIFB5X1hERUNSRUYocmVzdWx0KTsKKworICBzdm5fc3dpZ19weV9yZWxlYXNlX3B5 X2xvY2soKTsKKworICByZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3ZuX2Vycm9yX3QgKnJlcG9y dGVyX2RlbGV0ZV9wYXRoKHZvaWQgKnJlcG9ydF9iYXRvbiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBjaGFyICpwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xf dCAqcG9vbCkKK3sKKyAgc3ZuX2Vycm9yX3QgKmVyciA9IFNWTl9OT19FUlJPUjsKKyAgUHlPYmpl Y3QgKnB5X3JlcG9ydGVyID0gcmVwb3J0X2JhdG9uLCAqcmVzdWx0OworCisgIGlmIChweV9yZXBv cnRlciA9PSBOVUxMIHx8IHB5X3JlcG9ydGVyID09IFB5X05vbmUpCisgICAgcmV0dXJuIFNWTl9O T19FUlJPUjsKKworICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xvY2soKTsKKworICBpZiAoKHJl c3VsdCA9IFB5T2JqZWN0X0NhbGxNZXRob2QocHlfcmVwb3J0ZXIsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJkZWxldGVfcGF0aCIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJzTyYiLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcGF0aCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBtYWtlX29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVyciA9IGNh bGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgIH0KKyAgZWxzZSBpZiAocmVzdWx0ICE9IFB5 X05vbmUpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfYmFkX3JldHVybl9lcnJvcigiTm90 IE5vbmUiKTsKKyAgICB9CisKKyAgUHlfWERFQ1JFRihyZXN1bHQpOworCisgIHN2bl9zd2lnX3B5 X3JlbGVhc2VfcHlfbG9jaygpOworCisgIHJldHVybiBlcnI7Cit9CisgICAgCitzdGF0aWMgc3Zu X2Vycm9yX3QgKnJlcG9ydGVyX2xpbmtfcGF0aCh2b2lkICpyZXBvcnRfYmF0b24sCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGF0aCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBjaGFyICp1cmwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg c3ZuX3Jldm51bV90IHJldmlzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2bl9i b29sZWFuX3Qgc3RhcnRfZW1wdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg Y2hhciAqbG9ja190b2tlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90 ICpwb29sKQoreworICBzdm5fZXJyb3JfdCAqZXJyID0gU1ZOX05PX0VSUk9SOworICBQeU9iamVj dCAqcHlfcmVwb3J0ZXIgPSByZXBvcnRfYmF0b24sICpyZXN1bHQ7CisKKyAgaWYgKHB5X3JlcG9y dGVyID09IE5VTEwgfHwgcHlfcmVwb3J0ZXIgPT0gUHlfTm9uZSkKKyAgICByZXR1cm4gU1ZOX05P X0VSUk9SOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisgIGlmICgocmVz dWx0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChweV9yZXBvcnRlciwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChjaGFyICopImxpbmtfcGF0aCIsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJzc2xic08mIiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHBhdGgsIHVybCwgcmV2aXNpb24sCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzdGFydF9lbXB0eSwgbG9ja190b2tlbiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vfb2JfcG9vbCwgcG9vbCkpID09IE5VTEwpCisg ICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7CisgICAgfQorICBl bHNlIGlmIChyZXN1bHQgIT0gUHlfTm9uZSkKKyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFja19i YWRfcmV0dXJuX2Vycm9yKCJOb3QgTm9uZSIpOworICAgIH0KKworICBQeV9YREVDUkVGKHJlc3Vs dCk7CisKKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7CisKKyAgcmV0dXJuIGVycjsK K30KKworc3RhdGljIHN2bl9lcnJvcl90ICpyZXBvcnRlcl9maW5pc2hfcmVwb3J0KHZvaWQgKnJl cG9ydF9iYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAq cG9vbCkKK3sKKyAgc3ZuX2Vycm9yX3QgKmVyciA9IFNWTl9OT19FUlJPUjsKKworICBQeU9iamVj dCAqcHlfcmVwb3J0ZXIgPSByZXBvcnRfYmF0b24sICpyZXN1bHQ7CisKKyAgaWYgKHB5X3JlcG9y dGVyID09IE5VTEwgfHwgcHlfcmVwb3J0ZXIgPT0gUHlfTm9uZSkKKyAgICByZXR1cm4gU1ZOX05P X0VSUk9SOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisgIGlmICgocmVz dWx0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChweV9yZXBvcnRlciwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChjaGFyICopImZpbmlzaF9yZXBvcnQiLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikiTyYiLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbWFrZV9vYl9wb29sLCBwb29sKSkgPT0gTlVMTCkKKyAgICB7Cisg ICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICB9CisgIGVsc2UgaWYg KHJlc3VsdCAhPSBQeV9Ob25lKQorICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2JhZF9yZXR1 cm5fZXJyb3IoIk5vdCBOb25lIik7CisgICAgfQorCisgIFB5X1hERUNSRUYocmVzdWx0KTsKKwor ICBzdm5fc3dpZ19weV9yZWxlYXNlX3B5X2xvY2soKTsKKworICByZXR1cm4gZXJyOworfQorCitz dGF0aWMgc3ZuX2Vycm9yX3QgKnJlcG9ydGVyX2Fib3J0X3JlcG9ydCh2b2lkICpyZXBvcnRfYmF0 b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sK KyAgc3ZuX2Vycm9yX3QgKmVyciA9IFNWTl9OT19FUlJPUjsKKworICBQeU9iamVjdCAqcHlfcmVw b3J0ZXIgPSByZXBvcnRfYmF0b24sICpyZXN1bHQ7CisKKyAgaWYgKHB5X3JlcG9ydGVyID09IE5V TEwgfHwgcHlfcmVwb3J0ZXIgPT0gUHlfTm9uZSkKKyAgICByZXR1cm4gU1ZOX05PX0VSUk9SOwor CisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisgIGlmICgocmVzdWx0ID0gUHlP YmplY3RfQ2FsbE1ldGhvZChweV9yZXBvcnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChjaGFyICopImFib3J0X3JlcG9ydCIsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoY2hhciAqKSJPJiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBtYWtlX29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVyciA9 IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgIH0KKyAgZWxzZSBpZiAocmVzdWx0ICE9 IFB5X05vbmUpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfYmFkX3JldHVybl9lcnJvcigi Tm90IE5vbmUiKTsKKyAgICB9CisKKyAgUHlfWERFQ1JFRihyZXN1bHQpOworCisgIHN2bl9zd2ln X3B5X3JlbGVhc2VfcHlfbG9jaygpOworCisgIHJldHVybiBlcnI7Cit9CisKK2NvbnN0IHN2bl9y YV9yZXBvcnRlcjJfdCBzd2lnX3B5X3JhX3JlcG9ydGVyMiA9IHsKKyAgICByZXBvcnRlcl9zZXRf cGF0aCwKKyAgICByZXBvcnRlcl9kZWxldGVfcGF0aCwKKyAgICByZXBvcnRlcl9saW5rX3BhdGgs CisgICAgcmVwb3J0ZXJfZmluaXNoX3JlcG9ydCwKKyAgICByZXBvcnRlcl9hYm9ydF9yZXBvcnQK K307CmRpZmYgLU51ciBzdWJ2ZXJzaW9uLTEuMy4xL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9w eXRob24vbGlic3ZuX3N3aWdfcHkvc3dpZ3V0aWxfcHkuYy5vcmlnIHN1YnZlcnNpb24tMS4zLjEu bmV3L3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vbGlic3ZuX3N3aWdfcHkvc3dpZ3V0 aWxfcHkuYy5vcmlnCi0tLSBzdWJ2ZXJzaW9uLTEuMy4xL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dp Zy9weXRob24vbGlic3ZuX3N3aWdfcHkvc3dpZ3V0aWxfcHkuYy5vcmlnCTE5NzAtMDEtMDEgMDE6 MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyBzdWJ2ZXJzaW9uLTEuMy4xLm5ldy9zdWJ2ZXJzaW9u L2JpbmRpbmdzL3N3aWcvcHl0aG9uL2xpYnN2bl9zd2lnX3B5L3N3aWd1dGlsX3B5LmMub3JpZwky MDA2LTA3LTA0IDEzOjI2OjA1LjAwMDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDI2MjMgQEAKKy8q CisgKiBzd2lndXRpbF9weS5jOiB1dGlsaXR5IGZ1bmN0aW9ucyBmb3IgdGhlIFNXSUcgUHl0aG9u IGJpbmRpbmdzCisgKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoYykgMjAwMC0yMDA0 IENvbGxhYk5ldC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBp cyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlv dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiAgVGhl IHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL3N1YnZlcnNpb24udGlncmlz Lm9yZy9saWNlbnNlLTEuaHRtbC4KKyAqIElmIG5ld2VyIHZlcnNpb25zIG9mIHRoaXMgbGljZW5z ZSBhcmUgcG9zdGVkIHRoZXJlLCB5b3UgbWF5IHVzZSBhCisgKiBuZXdlciB2ZXJzaW9uIGluc3Rl YWQsIGF0IHlvdXIgb3B0aW9uLgorICoKKyAqIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9s dW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55CisgKiBpbmRpdmlkdWFscy4gIEZvciBl eGFjdCBjb250cmlidXRpb24gaGlzdG9yeSwgc2VlIHRoZSByZXZpc2lvbgorICogaGlzdG9yeSBh bmQgbG9ncywgYXZhaWxhYmxlIGF0IGh0dHA6Ly9zdWJ2ZXJzaW9uLnRpZ3Jpcy5vcmcvLgorICog PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KKyAqLworCisvKiBUZWxsIHN3aWd1dGlsX3B5LmggdGhhdCB3ZSdyZSBpbnNp ZGUgdGhlIGltcGxlbWVudGF0aW9uICovCisjZGVmaW5lIFNWTl9TV0lHX1NXSUdVVElMX1BZX0MK KworI2luY2x1ZGUgPFB5dGhvbi5oPgorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVk ZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorCisjaW5jbHVkZSA8YXByX3Bvb2xz Lmg+CisjaW5jbHVkZSA8YXByX2hhc2guaD4KKyNpbmNsdWRlIDxhcHJfcG9ydGFibGUuaD4KKyNp bmNsdWRlIDxhcHJfdGhyZWFkX3Byb2MuaD4KKworI2luY2x1ZGUgInN2bl9jbGllbnQuaCIKKyNp bmNsdWRlICJzdm5fc3RyaW5nLmgiCisjaW5jbHVkZSAic3ZuX29wdC5oIgorI2luY2x1ZGUgInN2 bl9kZWx0YS5oIgorI2luY2x1ZGUgInN2bl9hdXRoLmgiCisjaW5jbHVkZSAic3ZuX3Bvb2xzLmgi CisKKyNpbmNsdWRlICJzdm5fcHJpdmF0ZV9jb25maWcuaCIgLyogZm9yIFNWTl9BUFJfSU5UNjRf VF9QWUNGTVQgKi8KKworI2luY2x1ZGUgInN3aWdfcHl0aG9uX2V4dGVybmFsX3J1bnRpbWUuc3dn IgorI2luY2x1ZGUgInN3aWd1dGlsX3B5LmgiCisKKwwKKworLyoqKiBNYW5hZ2UgdGhlIEdsb2Jh bCBJbnRlcnByZXRlciBMb2NrICoqKi8KKworLyogSWYgYm90aCBQeXRob24gYW5kIEFQUiBoYXZl IHRocmVhZHMgYXZhaWxhYmxlLCB3ZSBjYW4gb3B0aW1pemUgb3Vyc2VsdmVzCisgKiBieSByZWxl YXNpbmcgdGhlIGdsb2JhbCBpbnRlcnByZXRlciBsb2NrIHdoZW4gd2UgZHJvcCBpbnRvIG91ciBT Vk4gY2FsbHMuCisgKgorICogSW4gc3ZuX3R5cGVzLmksIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlf bG9jayBpcyBjYWxsZWQgYmVmb3JlIGV2ZXJ5CisgKiBmdW5jdGlvbiwgdGhlbiBzdm5fc3dpZ19w eV9hY3F1aXJlX3B5X2xvY2sgaXMgY2FsbGVkIGFmdGVyIGV2ZXJ5CisgKiBmdW5jdGlvbi4gIFNv LCBpZiB0aGVzZSBmdW5jdGlvbnMgYmVjb21lIG5vLW9wcywgdGhlbiBQeXRob24gd2lsbAorICog c3RhcnQgdG8gYmxvY2suLi4KKyAqCisgKiBUaGUgU3VidmVyc2lvbiBsaWJyYXJpZXMgY2FuIGJl IGFzc3VtZWQgdG8gYmUgdGhyZWFkLXNhZmUgKm9ubHkqIHdoZW4KKyAqIEFQUl9IQVNfVEhSRUFE IGlzIDEuICBUaGUgQVBSIHBvb2wgYWxsb2NhdGlvbnMgYXJlbid0IHRocmVhZC1zYWZlIHVubGVz cworICogQVBSX0hBU19USFJFQUQgaXMgMS4KKyAqLworCisjaWYgZGVmaW5lZChXSVRIX1RIUkVB RCkgJiYgQVBSX0hBU19USFJFQURTCisjZGVmaW5lIEFDUVVJUkVfUFlUSE9OX0xPQ0sKKyNlbmRp ZgorCisjaWZkZWYgQUNRVUlSRV9QWVRIT05fTE9DSworc3RhdGljIGFwcl90aHJlYWRrZXlfdCAq X3NhdmVkX3RocmVhZF9rZXkgPSBOVUxMOworc3RhdGljIGFwcl9wb29sX3QgKl9zYXZlZF90aHJl YWRfcG9vbCA9IE5VTEw7CisjZW5kaWYKKwordm9pZCBzdm5fc3dpZ19weV9yZWxlYXNlX3B5X2xv Y2sodm9pZCkKK3sKKyNpZmRlZiBBQ1FVSVJFX1BZVEhPTl9MT0NLCisgIFB5VGhyZWFkU3RhdGUg KnRocmVhZF9zdGF0ZTsKKworICBpZiAoX3NhdmVkX3RocmVhZF9rZXkgPT0gTlVMTCkKKyAgICB7 CisgICAgICAvKiBPYnZpb3VzbHksIGNyZWF0aW5nIGEgdG9wLWxldmVsIHBvb2wgZm9yIHRoaXMg aXMgcHJldHR5IHN0dXBpZC4gKi8KKyAgICAgIGFwcl9wb29sX2NyZWF0ZSgmX3NhdmVkX3RocmVh ZF9wb29sLCBOVUxMKTsKKyAgICAgIGFwcl90aHJlYWRrZXlfcHJpdmF0ZV9jcmVhdGUoJl9zYXZl ZF90aHJlYWRfa2V5LCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf c2F2ZWRfdGhyZWFkX3Bvb2wpOworICAgIH0KKworICB0aHJlYWRfc3RhdGUgPSBQeUV2YWxfU2F2 ZVRocmVhZCgpOworICBhcHJfdGhyZWFka2V5X3ByaXZhdGVfc2V0KHRocmVhZF9zdGF0ZSwgX3Nh dmVkX3RocmVhZF9rZXkpOworI2VuZGlmCit9CisKK3ZvaWQgc3ZuX3N3aWdfcHlfYWNxdWlyZV9w eV9sb2NrKHZvaWQpCit7CisjaWZkZWYgQUNRVUlSRV9QWVRIT05fTE9DSworICB2b2lkICp2YWw7 CisgIFB5VGhyZWFkU3RhdGUgKnRocmVhZF9zdGF0ZTsKKyAgYXByX3RocmVhZGtleV9wcml2YXRl X2dldCgmdmFsLCBfc2F2ZWRfdGhyZWFkX2tleSk7CisgIHRocmVhZF9zdGF0ZSA9IHZhbDsKKyAg UHlFdmFsX1Jlc3RvcmVUaHJlYWQodGhyZWFkX3N0YXRlKTsKKyNlbmRpZgorfQorCisKKwwKKy8q KiogQXV0b21hdGljIFBvb2wgTWFuYWdlbWVudCBGdW5jdGlvbnMgKioqLworCisvKiBUaGUgYXBw bGljYXRpb24gcG9vbCAqLworc3RhdGljIGFwcl9wb29sX3QgKl9nbG9iYWxfcG9vbCA9IE5VTEw7 CitzdGF0aWMgUHlPYmplY3QgKl9nbG9iYWxfc3ZuX3N3aWdfcHlfcG9vbCA9IE5VTEw7CitzdGF0 aWMgY2hhciBhc3NlcnRWYWxpZFtdID0gImFzc2VydF92YWxpZCI7CitzdGF0aWMgY2hhciBwYXJl bnRQb29sW10gPSAiX3BhcmVudF9wb29sIjsKK3N0YXRpYyBjaGFyIGFkZE93bmVkUmVmW10gPSAi X2FkZF9vd25lZF9yZWYiOworc3RhdGljIGNoYXIgcmVtb3ZlT3duZWRSZWZbXSA9ICJfcmVtb3Zl X293bmVkX3JlZiI7CitzdGF0aWMgY2hhciB3cmFwW10gPSAiX3dyYXAiOworc3RhdGljIGNoYXIg dW53cmFwW10gPSAiX3Vud3JhcCI7CitzdGF0aWMgY2hhciBzZXRQYXJlbnRQb29sW10gPSAic2V0 X3BhcmVudF9wb29sIjsKK3N0YXRpYyBjaGFyIGVtcHR5VHVwbGVbXSA9ICIoKSI7CitzdGF0aWMg Y2hhciBvYmplY3RUdXBsZVtdID0gIihPKSI7CisKKworYXByX3N0YXR1c190IHN2bl9zd2lnX3B5 X2luaXRpYWxpemUodm9pZCkKK3sKKyAgYXByX3N0YXR1c190IHN0YXR1czsKKworICBpZiAoKHN0 YXR1cyA9IGFwcl9pbml0aWFsaXplKCkpICE9IEFQUl9TVUNDRVNTKQorICAgIHJldHVybiBzdGF0 dXM7CisgIGlmIChhdGV4aXQoYXByX3Rlcm1pbmF0ZSkgIT0gMCkKKyAgICByZXR1cm4gQVBSX0VH RU5FUkFMOworICByZXR1cm4gQVBSX1NVQ0NFU1M7Cit9CisKKy8qIFNldCB0aGUgYXBwbGljYXRp b24gcG9vbCAqLwordm9pZCBzdm5fc3dpZ19weV9zZXRfYXBwbGljYXRpb25fcG9vbChQeU9iamVj dCAqcHlfcG9vbCwgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgX2dsb2JhbF9wb29sID0gcG9vbDsK KyAgX2dsb2JhbF9zdm5fc3dpZ19weV9wb29sID0gcHlfcG9vbDsKK30KKworLyogQ2xlYXIgdGhl IGFwcGxpY2F0aW9uIHBvb2wgKi8KK3ZvaWQgc3ZuX3N3aWdfcHlfY2xlYXJfYXBwbGljYXRpb25f cG9vbCgpCit7CisgIF9nbG9iYWxfcG9vbCA9IE5VTEw7CisgIF9nbG9iYWxfc3ZuX3N3aWdfcHlf cG9vbCA9IE5VTEw7Cit9CisKKy8qIEdldCB0aGUgYXBwbGljYXRpb24gcG9vbCAqLwordm9pZCBz dm5fc3dpZ19nZXRfYXBwbGljYXRpb25fcG9vbChQeU9iamVjdCAqKnB5X3Bvb2wsIGFwcl9wb29s X3QgKipwb29sKQoreworICAqcG9vbCA9IF9nbG9iYWxfcG9vbDsKKyAgKnB5X3Bvb2wgPSBfZ2xv YmFsX3N2bl9zd2lnX3B5X3Bvb2w7Cit9CisKKy8qIFNldCB0aGUgcGFyZW50IHBvb2wgb2YgYSBw cm94eSBvYmplY3QgKi8KK3N0YXRpYyBpbnQgcHJveHlfc2V0X3Bvb2woUHlPYmplY3QgKipwcm94 eSwgUHlPYmplY3QgKnBvb2wpCit7CisgIFB5T2JqZWN0ICpyZXN1bHQ7CisKKyAgaWYgKCpwcm94 eSAhPSBOVUxMKQorICAgIHsKKyAgICAgIGlmIChwb29sID09IE5VTEwpCisgICAgICAgIHsKKyAg ICAgICAgICBpZiAoUHlPYmplY3RfSGFzQXR0clN0cmluZygqcHJveHksIHNldFBhcmVudFBvb2wp KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsTWV0 aG9kKCpwcm94eSwgc2V0UGFyZW50UG9vbCwgZW1wdHlUdXBsZSk7CisgICAgICAgICAgICAgIGlm IChyZXN1bHQgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAg ICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIGVs c2UKKyAgICAgICAgeworICAgICAgICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxNZXRob2QocG9v bCwgd3JhcCwgb2JqZWN0VHVwbGUsICpwcm94eSk7CisgICAgICAgICAgUHlfREVDUkVGKCpwcm94 eSk7CisgICAgICAgICAgKnByb3h5ID0gcmVzdWx0OworICAgICAgICB9CisgICAgfQorCisgIHJl dHVybiAwOworfQorCisvKiBHZXQgdGhlIHBhcmVudCBwb29sIG9mIGEgcHJveHkgb2JqZWN0LCBv ciByZXR1cm4gdGhlIGdsb2JhbCBhcHBsaWNhdGlvbgorICogcG9vbCBpZiBvbmUgaXMgbm90IHNl dC4gIFJldHVybnMgYSBCT1JST1dFRCByZWZlcmVuY2UhICovCitzdGF0aWMgUHlPYmplY3QgKnBy b3h5X2dldF9wb29sKFB5T2JqZWN0ICpwcm94eSkKK3sKKyAgUHlPYmplY3QgKnJlc3VsdDsKKyAg aWYgKFB5T2JqZWN0X0hhc0F0dHJTdHJpbmcocHJveHksIHBhcmVudFBvb2wpKQorICAgIHsKKyAg ICAgIHJlc3VsdCA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcocHJveHksIHBhcmVudFBvb2wpOwor ICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgcmVz dWx0ID0gX2dsb2JhbF9zdm5fc3dpZ19weV9wb29sOworICAgIH0KKyAgcmV0dXJuIHJlc3VsdDsK K30KKworLyogQ2hhbmdlIGFuICdvd25lZCByZWZlcmVuY2UnIGFsbG9jYXRlZCBpbiBhIHBvb2wg ZnJvbSBvbGRSZWYgdG8gbmV3UmVmLgorICogSWYgb2xkUmVmIGlzIG5vbi1OVUxMIGFuZCBwcmVz ZW50IGluIHRoZSBwYXJlbnQgcG9vbCBvZiBwcm94eSwgaXQgaXMgcmVtb3ZlZC4KKyAqLworaW50 IHN2bl9zd2lnX3B5X3Bvb2xfc2V0X293bmVkX3JlZihQeU9iamVjdCAqcHJveHksIFB5T2JqZWN0 ICpvbGRSZWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpu ZXdSZWYpCit7CisgIFB5T2JqZWN0ICp0ZW1wOworICBQeU9iamVjdCAqcHlfcG9vbCA9IHByb3h5 X2dldF9wb29sKHByb3h5KTsKKworICBpZiAob2xkUmVmICE9IE5VTEwpCisgICAgeworICAgICAg dGVtcCA9IFB5T2JqZWN0X0NhbGxNZXRob2QocHlfcG9vbCwgcmVtb3ZlT3duZWRSZWYsIG9iamVj dFR1cGxlLCBvbGRSZWYpOworICAgICAgaWYgKHRlbXAgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJu IDE7CisgICAgICBlbHNlCisgICAgICAgIFB5X0RFQ1JFRih0ZW1wKTsKKyAgICB9CisgIGlmIChu ZXdSZWYgIT0gTlVMTCkKKyAgICB7CisgICAgICB0ZW1wID0gUHlPYmplY3RfQ2FsbE1ldGhvZChw eV9wb29sLCBhZGRPd25lZFJlZiwgb2JqZWN0VHVwbGUsIG5ld1JlZik7CisgICAgICBpZiAodGVt cCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gMTsKKyAgICAgIGVsc2UKKyAgICAgICAgUHlfREVD UkVGKHRlbXApOworICAgIH0KKyAgcmV0dXJuIDA7Cit9CisMCisvKiBXcmFwcGVyIGZvciBTV0lH X1R5cGVRdWVyeSAqLworI2RlZmluZSBzdm5fc3dpZ19UeXBlUXVlcnkoeCkgU1dJR19UeXBlUXVl cnkoeCkKKworLyoqIFdyYXBwZXIgZm9yIFNXSUdfTmV3UG9pbnRlck9iaiAqLworUHlPYmplY3Qg KnN2bl9zd2lnX05ld1BvaW50ZXJPYmoodm9pZCAqb2JqLCBzd2lnX3R5cGVfaW5mbyAqdHlwZSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpwb29sKQoreworICBQ eU9iamVjdCAqcHJveHkgPSBTV0lHX05ld1BvaW50ZXJPYmoob2JqLCB0eXBlLCAwKTsKKworICBp ZiAocHJveHkgPT0gTlVMTCkKKyAgICByZXR1cm4gTlVMTDsKKworICBpZiAocHJveHlfc2V0X3Bv b2woJnByb3h5LCBwb29sKSkKKyAgICB7CisgICAgICBQeV9ERUNSRUYocHJveHkpOworICAgICAg cmV0dXJuIE5VTEw7CisgICAgfQorCisgIHJldHVybiBwcm94eTsKK30KKworLyoqIHN2bl9zd2ln X05ld1BvaW50ZXJPYmosIGV4Y2VwdCBhIHN0cmluZyBpcyB1c2VkIHRvIGRlc2NyaWJlIHRoZSB0 eXBlICovCitzdGF0aWMgUHlPYmplY3QgKnN2bl9zd2lnX05ld1BvaW50ZXJPYmpTdHJpbmcodm9p ZCAqcHRyLCBjb25zdCBjaGFyICp0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpweV9wb29sKQoreworICBzd2lnX3R5cGVfaW5mbyAq dHlwZWluZm8gPSBzdm5fc3dpZ19UeXBlUXVlcnkodHlwZSk7CisgIGlmICh0eXBlaW5mbyA9PSBO VUxMKQorICAgIHsKKyAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJDYW5u b3QgZmluZCByZXF1aXJlZCB0eXBlb2JqZWN0Iik7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9 CisKKyAgLyogIyMjIGNhY2hlIHRoZSBzd2lnX3R5cGVfaW5mbyBhdCBzb21lIHBvaW50PyAqLwor ICByZXR1cm4gc3ZuX3N3aWdfTmV3UG9pbnRlck9iaihwdHIsIHR5cGVpbmZvLCBweV9wb29sKTsK K30KKworLyoqIFdyYXBwZXIgZm9yIFNXSUdfQ29udmVydFB0ciAqLworaW50IHN2bl9zd2lnX0Nv bnZlcnRQdHIoUHlPYmplY3QgKmlucHV0LCB2b2lkICoqb2JqLCBzd2lnX3R5cGVfaW5mbyAqdHlw ZSkKK3sKKyAgaWYgKFB5T2JqZWN0X0hhc0F0dHJTdHJpbmcoaW5wdXQsIGFzc2VydFZhbGlkKSkK KyAgICB7CisgICAgICBQeU9iamVjdCAqcmVzdWx0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChpbnB1 dCwgYXNzZXJ0VmFsaWQsIGVtcHR5VHVwbGUpOworICAgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQor ICAgICAgICByZXR1cm4gMTsKKyAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgIH0KKyAgaWYg KFB5T2JqZWN0X0hhc0F0dHJTdHJpbmcoaW5wdXQsIHVud3JhcCkpCisgICAgeworICAgICAgaW5w dXQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKGlucHV0LCB1bndyYXAsIGVtcHR5VHVwbGUpOworICAg ICAgaWYgKGlucHV0ID09IE5VTEwpCisgICAgICAgIHJldHVybiAxOworICAgICAgUHlfREVDUkVG KGlucHV0KTsKKyAgICB9CisKKyAgcmV0dXJuIFNXSUdfQ29udmVydFB0cihpbnB1dCwgb2JqLCB0 eXBlLCBTV0lHX1BPSU5URVJfRVhDRVBUSU9OIHwgMCk7Cit9CisKKy8qKiBzdm5fc3dpZ19Db252 ZXJ0UHRyLCBleGNlcHQgYSBzdHJpbmcgaXMgdXNlZCB0byBkZXNjcmliZSB0aGUgdHlwZSAqLwor c3RhdGljIGludCBzdm5fc3dpZ19Db252ZXJ0UHRyU3RyaW5nKFB5T2JqZWN0ICppbnB1dCwKKyAg ICB2b2lkICoqb2JqLCBjb25zdCBjaGFyICp0eXBlKQoreworICByZXR1cm4gc3ZuX3N3aWdfQ29u dmVydFB0cihpbnB1dCwgb2JqLCBzdm5fc3dpZ19UeXBlUXVlcnkodHlwZSkpOworfQorCisvKiog V3JhcHBlciBmb3IgU1dJR19NdXN0R2V0UHRyICovCit2b2lkICpzdm5fc3dpZ19NdXN0R2V0UHRy KHZvaWQgKmlucHV0LCBzd2lnX3R5cGVfaW5mbyAqdHlwZSwgaW50IGFyZ251bSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKipweV9wb29sKQoreworICBpZiAoUHlPYmplY3Rf SGFzQXR0clN0cmluZyhpbnB1dCwgYXNzZXJ0VmFsaWQpKQorICAgIHsKKyAgICAgIFB5T2JqZWN0 ICpyZXN1bHQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKGlucHV0LCBhc3NlcnRWYWxpZCwgZW1wdHlU dXBsZSk7CisgICAgICBpZiAocmVzdWx0ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOwor ICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgfQorCisgIGlmIChweV9wb29sICE9IE5VTEwp CisgICAgKnB5X3Bvb2wgPSBwcm94eV9nZXRfcG9vbCgoUHlPYmplY3QgKikgaW5wdXQpOworCisg IGlmIChQeU9iamVjdF9IYXNBdHRyU3RyaW5nKGlucHV0LCB1bndyYXApKQorICAgIHsKKyAgICAg IGlucHV0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChpbnB1dCwgdW53cmFwLCBlbXB0eVR1cGxlKTsK KyAgICAgIGlmIChpbnB1dCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgIFB5 X0RFQ1JFRigoUHlPYmplY3QgKikgaW5wdXQpOworICAgIH0KKworICByZXR1cm4gU1dJR19NdXN0 R2V0UHRyKGlucHV0LCB0eXBlLCBhcmdudW0sIFNXSUdfUE9JTlRFUl9FWENFUFRJT04gfCAwKTsK K30KKworDAorLyoqKiBDdXN0b20gU3VidmVyc2lvbkV4Y2VwdGlvbiBzdHVmZnMuICoqKi8KKwor LyogR2xvYmFsIFN1YnZlcnNpb25FeGNlcHRpb24gY2xhc3Mgb2JqZWN0LiAqLworc3RhdGljIFB5 T2JqZWN0ICpTdWJ2ZXJzaW9uRXhjZXB0aW9uID0gTlVMTDsKKworCitQeU9iamVjdCAqc3ZuX3N3 aWdfcHlfZXhjZXB0aW9uX3R5cGUodm9pZCkKK3sKKyAgUHlfSU5DUkVGKFN1YnZlcnNpb25FeGNl cHRpb24pOworICByZXR1cm4gU3VidmVyc2lvbkV4Y2VwdGlvbjsKK30KKworUHlPYmplY3QgKnN2 bl9zd2lnX3B5X3JlZ2lzdGVyX2V4Y2VwdGlvbih2b2lkKQoreworICAvKiBJZiB3ZSBoYXZlbid0 IGNyZWF0ZWQgb3VyIGV4Y2VwdGlvbiBjbGFzcywgZG8gc28uICovCisgIGlmIChTdWJ2ZXJzaW9u RXhjZXB0aW9uID09IE5VTEwpCisgICAgeworICAgICAgU3VidmVyc2lvbkV4Y2VwdGlvbiA9IFB5 RXJyX05ld0V4Y2VwdGlvbgorICAgICAgICAoKGNoYXIgKikibGlic3ZuLl9jb3JlLlN1YnZlcnNp b25FeGNlcHRpb24iLCBOVUxMLCBOVUxMKTsKKyAgICB9CisKKyAgLyogUmVnYXJkbGVzcywgcmV0 dXJuIHRoZSBleGNlcHRpb24gY2xhc3MuICovCisgIHJldHVybiBzdm5fc3dpZ19weV9leGNlcHRp b25fdHlwZSgpOworfQorCit2b2lkIHN2bl9zd2lnX3B5X3N2bl9leGNlcHRpb24oc3ZuX2Vycm9y X3QgKmVycikKK3sKKyAgUHlPYmplY3QgKmV4Y19vYiwgKmFwcl9lcnJfb2I7CisKKyAgaWYgKGVy ciA9PSBOVUxMKQorICAgIHJldHVybjsKKworICAvKiBNYWtlIGFuIGludGVnZXIgZm9yIHRoZSBl cnJvciBjb2RlLiAqLworICBhcHJfZXJyX29iID0gUHlJbnRfRnJvbUxvbmcoZXJyLT5hcHJfZXJy KTsKKyAgaWYgKGFwcl9lcnJfb2IgPT0gTlVMTCkKKyAgICByZXR1cm47CisKKyAgLyogSW5zdGFu dGlhdGUgYSBTdWJ2ZXJzaW9uRXhjZXB0aW9uIG9iamVjdC4gKi8KKyAgZXhjX29iID0gUHlPYmpl Y3RfQ2FsbEZ1bmN0aW9uKFN1YnZlcnNpb25FeGNlcHRpb24sIChjaGFyICopInNPIiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyci0+bWVzc2FnZSwgYXByX2Vycl9vYik7Cisg IGlmIChleGNfb2IgPT0gTlVMTCkKKyAgICB7CisgICAgICBQeV9ERUNSRUYoYXByX2Vycl9vYik7 CisgICAgICByZXR1cm47CisgICAgfQorCisgIC8qIFNldCB0aGUgImFwcl9lcnIiIGF0dHJpYnV0 ZSBvZiB0aGUgZXhjZXB0aW9uIHRvIG91ciBlcnJvciBjb2RlLiAqLworICBpZiAoUHlPYmplY3Rf U2V0QXR0clN0cmluZyhleGNfb2IsIChjaGFyICopImFwcl9lcnIiLCBhcHJfZXJyX29iKSA9PSAt MSkKKyAgICB7CisgICAgICBQeV9ERUNSRUYoYXByX2Vycl9vYik7CisgICAgICBQeV9ERUNSRUYo ZXhjX29iKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgLyogRmluaXNoZWQgd2l0aCB0aGUg YXByX2VyciBvYmplY3QuICovCisgIFB5X0RFQ1JFRihhcHJfZXJyX29iKTsKKworICAvKiBTZXQg dGhlIGVycm9yIHN0YXRlIHRvIG91ciBleGNlcHRpb24gb2JqZWN0LiAqLworICBQeUVycl9TZXRP YmplY3QoU3VidmVyc2lvbkV4Y2VwdGlvbiwgZXhjX29iKTsKKworICAvKiBGaW5pc2hlZCB3aXRo IHRoZSBleGNfb2Igb2JqZWN0LiAqLworICBQeV9ERUNSRUYoZXhjX29iKTsKK30KKworCisMCisv KioqIEhlbHBlci9Db252ZXJzaW9uIFJvdXRpbmVzICoqKi8KKworLyogRnVuY3Rpb25zIGZvciBt YWtpbmcgUHl0aG9uIHdyYXBwZXJzIGFyb3VuZCBTdWJ2ZXJzaW9uIHN0cnVjdHMgKi8KK3N0YXRp YyBQeU9iamVjdCAqbWFrZV9vYl9wb29sKHZvaWQgKnBvb2wpCit7CisgIC8qIFJldHVybiBhIGJy YW5kIG5ldyBkZWZhdWx0IHBvb2wgdG8gUHl0aG9uLiBUaGlzIHBvb2wgaXNuJ3QKKyAgICogbm9y bWFsbHkgdXNlZCBmb3IgYW55dGhpbmcuIEl0J3MganVzdCBoZXJlIGZvciBjb21wYXRpYmlsaXR5 CisgICAqIHdpdGggU3VidmVyc2lvbiAxLjIuICovCisgIGFwcl9wb29sX3QgKm5ld19wb29sID0g c3ZuX3Bvb2xfY3JlYXRlKF9nbG9iYWxfcG9vbCk7CisgIFB5T2JqZWN0ICpuZXdfcHlfcG9vbCA9 IHN2bl9zd2lnX05ld1BvaW50ZXJPYmoobmV3X3Bvb2wsCisgICAgc3ZuX3N3aWdfVHlwZVF1ZXJ5 KCJhcHJfcG9vbF90ICoiKSwgX2dsb2JhbF9zdm5fc3dpZ19weV9wb29sKTsKKyAgKHZvaWQpIHBv b2w7IC8qIFNpbGVuY2UgY29tcGlsZXIgd2FybmluZ3MgYWJvdXQgdW51c2VkIHBhcmFtZXRlci4g Ki8KKyAgcmV0dXJuIG5ld19weV9wb29sOworfQorc3RhdGljIFB5T2JqZWN0ICptYWtlX29iX2Zz X3Jvb3Qoc3ZuX2ZzX3Jvb3RfdCAqcHRyLCBQeU9iamVjdCAqcHlfcG9vbCkKK3sKKyAgcmV0dXJu IHN2bl9zd2lnX05ld1BvaW50ZXJPYmpTdHJpbmcocHRyLCAic3ZuX2ZzX3Jvb3RfdCAqIiwgcHlf cG9vbCk7Cit9CisvKioqLworCisvKiBDb252ZXJzaW9uIGZyb20gUHl0aG9uIHNpbmdsZSBvYmpl Y3RzIChub3QgaGFzaGVzL2xpc3RzL2V0Yy4pIHRvCisgICBTdWJ2ZXJzaW9uIHR5cGVzLiAqLwor c3RhdGljIGNvbnN0IGNoYXIgKm1ha2Vfc3RyaW5nX2Zyb21fb2IoUHlPYmplY3QgKm9iLCBhcHJf cG9vbF90ICpwb29sKQoreworICBpZiAob2IgPT0gUHlfTm9uZSkKKyAgICByZXR1cm4gTlVMTDsK KyAgaWYgKCEgUHlTdHJpbmdfQ2hlY2sob2IpKQorICAgIHsKKyAgICAgIFB5RXJyX1NldFN0cmlu ZyhQeUV4Y19UeXBlRXJyb3IsICJub3QgYSBzdHJpbmciKTsKKyAgICAgIHJldHVybiBOVUxMOwor ICAgIH0KKyAgcmV0dXJuIGFwcl9wc3RyZHVwKHBvb2wsIFB5U3RyaW5nX0FTX1NUUklORyhvYikp OworfQorc3RhdGljIHN2bl9zdHJpbmdfdCAqbWFrZV9zdm5fc3RyaW5nX2Zyb21fb2IoUHlPYmpl Y3QgKm9iLCBhcHJfcG9vbF90ICpwb29sKQoreworICBpZiAob2IgPT0gUHlfTm9uZSkKKyAgICBy ZXR1cm4gTlVMTDsKKyAgaWYgKCEgUHlTdHJpbmdfQ2hlY2sob2IpKQorICAgIHsKKyAgICAgIFB5 RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJub3QgYSBzdHJpbmciKTsKKyAgICAgIHJl dHVybiBOVUxMOworICAgIH0KKyAgcmV0dXJuIHN2bl9zdHJpbmdfY3JlYXRlKFB5U3RyaW5nX0FT X1NUUklORyhvYiksIHBvb2wpOworfQorCisKKy8qKiovCisKK3N0YXRpYyBQeU9iamVjdCAqY29u dmVydF9oYXNoKGFwcl9oYXNoX3QgKmhhc2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQeU9iamVjdCAqICgqY29udmVydGVyX2Z1bmMpKHZvaWQgKnZhbHVlLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjdHgs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFB5T2JqZWN0ICpweV9wb29sKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZv aWQgKmN0eCwgUHlPYmplY3QgKnB5X3Bvb2wpCit7CisgICAgYXByX2hhc2hfaW5kZXhfdCAqaGk7 CisgICAgUHlPYmplY3QgKmRpY3QgPSBQeURpY3RfTmV3KCk7CisKKyAgICBpZiAoZGljdCA9PSBO VUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGZvciAoaGkgPSBhcHJfaGFzaF9maXJz dChOVUxMLCBoYXNoKTsgaGk7IGhpID0gYXByX2hhc2hfbmV4dChoaSkpCisgICAgICB7CisgICAg ICAgIGNvbnN0IHZvaWQgKmtleTsKKyAgICAgICAgdm9pZCAqdmFsOworICAgICAgICBQeU9iamVj dCAqdmFsdWU7CisKKyAgICAgICAgYXByX2hhc2hfdGhpcyhoaSwgJmtleSwgTlVMTCwgJnZhbCk7 CisgICAgICAgIHZhbHVlID0gKCpjb252ZXJ0ZXJfZnVuYykodmFsLCBjdHgsIHB5X3Bvb2wpOwor ICAgICAgICBpZiAodmFsdWUgPT0gTlVMTCkKKyAgICAgICAgICB7CisgICAgICAgICAgICBQeV9E RUNSRUYoZGljdCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICB9CisgICAg ICAgIC8qICMjIyBnb3R0YSBjYXN0IHRoaXMgdGhpbmcgY3V6IFB5dGhvbiBkb2Vzbid0IHVzZSAi Y29uc3QiICovCisgICAgICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkaWN0LCAoY2hhciAq KWtleSwgdmFsdWUpID09IC0xKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRih2 YWx1ZSk7CisgICAgICAgICAgICBQeV9ERUNSRUYoZGljdCk7CisgICAgICAgICAgICByZXR1cm4g TlVMTDsKKyAgICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CisgICAgICB9CisK KyAgICByZXR1cm4gZGljdDsKK30KKworc3RhdGljIFB5T2JqZWN0ICpjb252ZXJ0X3RvX3N3aWd0 eXBlKHZvaWQgKnZhbHVlLCB2b2lkICpjdHgsIFB5T2JqZWN0ICpweV9wb29sKQoreworICAvKiBj dHggaXMgYSAnc3dpZ190eXBlX2luZm8gKicgKi8KKyAgcmV0dXJuIHN2bl9zd2lnX05ld1BvaW50 ZXJPYmoodmFsdWUsIGN0eCwgcHlfcG9vbCk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqY29udmVy dF9zdm5fc3RyaW5nX3Qodm9pZCAqdmFsdWUsIHZvaWQgKmN0eCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKnB5X3Bvb2wpCit7CisgIC8qIGN0eCBpcyB1 bnVzZWQgKi8KKworICBjb25zdCBzdm5fc3RyaW5nX3QgKnMgPSB2YWx1ZTsKKworICAvKiAjIyMg Z290dGEgY2FzdCB0aGlzIHRoaW5nIGN1eiBQeXRob24gZG9lc24ndCB1c2UgImNvbnN0IiAqLwor ICByZXR1cm4gUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUoKHZvaWQgKilzLT5kYXRhLCBzLT5s ZW4pOworfQorCitzdGF0aWMgUHlPYmplY3QgKmNvbnZlcnRfc3ZuX2NsaWVudF9jb21taXRfaXRl bV90KHZvaWQgKnZhbHVlLCB2b2lkICpjdHgpCit7CisgIFB5T2JqZWN0ICpsaXN0OworICBQeU9i amVjdCAqcGF0aCwgKmtpbmQsICp1cmwsICpyZXYsICpjZl91cmwsICpzdGF0ZTsKKyAgc3ZuX2Ns aWVudF9jb21taXRfaXRlbV90ICppdGVtID0gdmFsdWU7CisKKyAgLyogY3R4IGlzIHVudXNlZCAq LworCisgIGxpc3QgPSBQeUxpc3RfTmV3KDYpOworCisgIGlmIChpdGVtLT5wYXRoKQorICAgIHBh dGggPSBQeVN0cmluZ19Gcm9tU3RyaW5nKGl0ZW0tPnBhdGgpOworICBlbHNlCisgICAgeworICAg ICAgcGF0aCA9IFB5X05vbmU7CisgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CisgICAgfQorCisg IGlmIChpdGVtLT51cmwpCisgICAgdXJsID0gUHlTdHJpbmdfRnJvbVN0cmluZyhpdGVtLT51cmwp OworICBlbHNlCisgICAgeworICAgICAgdXJsID0gUHlfTm9uZTsKKyAgICAgIFB5X0lOQ1JFRihQ eV9Ob25lKTsKKyAgICB9CisKKyAgaWYgKGl0ZW0tPmNvcHlmcm9tX3VybCkKKyAgICBjZl91cmwg PSBQeVN0cmluZ19Gcm9tU3RyaW5nKGl0ZW0tPmNvcHlmcm9tX3VybCk7CisgIGVsc2UKKyAgICB7 CisgICAgICBjZl91cmwgPSBQeV9Ob25lOworICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOworICAg IH0KKworICBraW5kID0gUHlJbnRfRnJvbUxvbmcoaXRlbS0+a2luZCk7CisgIHJldiA9IFB5SW50 X0Zyb21Mb25nKGl0ZW0tPnJldmlzaW9uKTsKKyAgc3RhdGUgPSBQeUludF9Gcm9tTG9uZyhpdGVt LT5zdGF0ZV9mbGFncyk7CisKKyAgaWYgKCEgKGxpc3QgJiYgcGF0aCAmJiBraW5kICYmIHVybCAm JiByZXYgJiYgY2ZfdXJsICYmIHN0YXRlKSkKKyAgICB7CisgICAgICBQeV9YREVDUkVGKGxpc3Qp OworICAgICAgUHlfWERFQ1JFRihwYXRoKTsKKyAgICAgIFB5X1hERUNSRUYoa2luZCk7CisgICAg ICBQeV9YREVDUkVGKHVybCk7CisgICAgICBQeV9YREVDUkVGKHJldik7CisgICAgICBQeV9YREVD UkVGKGNmX3VybCk7CisgICAgICBQeV9YREVDUkVGKHN0YXRlKTsKKyAgICAgIHJldHVybiBOVUxM OworICAgIH0KKworICBQeUxpc3RfU0VUX0lURU0obGlzdCwgMCwgcGF0aCk7CisgIFB5TGlzdF9T RVRfSVRFTShsaXN0LCAxLCBraW5kKTsKKyAgUHlMaXN0X1NFVF9JVEVNKGxpc3QsIDIsIHVybCk7 CisgIFB5TGlzdF9TRVRfSVRFTShsaXN0LCAzLCByZXYpOworICBQeUxpc3RfU0VUX0lURU0obGlz dCwgNCwgY2ZfdXJsKTsKKyAgUHlMaXN0X1NFVF9JVEVNKGxpc3QsIDUsIHN0YXRlKTsKKyAgcmV0 dXJuIGxpc3Q7Cit9CisKK1B5T2JqZWN0ICpzdm5fc3dpZ19weV9wcm9waGFzaF90b19kaWN0KGFw cl9oYXNoX3QgKmhhc2gpCit7CisgIHJldHVybiBjb252ZXJ0X2hhc2goaGFzaCwgY29udmVydF9z dm5fc3RyaW5nX3QsIE5VTEwsIE5VTEwpOworfQorCitzdGF0aWMgUHlPYmplY3QgKnByb3BhcnJh eV90b19kaWN0KGNvbnN0IGFwcl9hcnJheV9oZWFkZXJfdCAqYXJyYXkpCit7CisgICAgUHlPYmpl Y3QgKmRpY3QgPSBQeURpY3RfTmV3KCk7CisgICAgaW50IGk7CisKKyAgICBpZiAoZGljdCA9PSBO VUxMKQorICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgYXJyYXktPm5l bHRzOyArK2kpCisgICAgICB7CisgICAgICAgIHN2bl9wcm9wX3QgcHJvcDsKKyAgICAgICAgUHlP YmplY3QgKnB5X2tleSwgKnB5X3ZhbHVlOworCisgICAgICAgIHByb3AgPSBBUFJfQVJSQVlfSURY KGFycmF5LCBpLCBzdm5fcHJvcF90KTsKKworICAgICAgICBweV9rZXkgPSBQeVN0cmluZ19Gcm9t U3RyaW5nKHByb3AubmFtZSk7CisgICAgICAgIGlmIChweV9rZXkgPT0gTlVMTCkKKyAgICAgICAg ICBnb3RvIGVycm9yOworCisgICAgICAgIGlmIChwcm9wLnZhbHVlID09IE5VTEwpCisgICAgICAg ICAgeworICAgICAgICAgICAgIHB5X3ZhbHVlID0gUHlfTm9uZTsKKyAgICAgICAgICAgICBQeV9J TkNSRUYoUHlfTm9uZSk7CisgICAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgewor ICAgICAgICAgICAgIHB5X3ZhbHVlID0gUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUoKHZvaWQg Kilwcm9wLnZhbHVlLT5kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcHJvcC52YWx1ZS0+bGVuKTsKKyAgICAgICAgICAgICBpZiAocHlfdmFs dWUgPT0gTlVMTCkKKyAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgUHlfREVDUkVG KHB5X2tleSk7CisgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAg fQorICAgICAgICAgIH0KKworICAgICAgICBQeURpY3RfU2V0SXRlbShkaWN0LCBweV9rZXksIHB5 X3ZhbHVlKTsKKyAgICB9CisKKyAgICByZXR1cm4gZGljdDsKKworICBlcnJvcjoKKyAgICBQeV9E RUNSRUYoZGljdCk7CisgICAgcmV0dXJuIE5VTEw7CisKK30KKworCitQeU9iamVjdCAqc3ZuX3N3 aWdfcHlfbG9jYXRpb25oYXNoX3RvX2RpY3QoYXByX2hhc2hfdCAqaGFzaCkKK3sKKyAgICAvKiBO ZWVkIHNwZWNpYWwgY29kZSBmb3IgdGhpcyBiZWNhdXNlIG9mIHRoZSBkYXJuZWQgc3ZuX3Jldm51 bV90CisgICAgICAga2V5cy4gKi8KKyAgICBhcHJfaGFzaF9pbmRleF90ICpoaTsKKyAgICBQeU9i amVjdCAqZGljdCA9IFB5RGljdF9OZXcoKTsKKworICAgIGlmIChkaWN0ID09IE5VTEwpCisgICAg ICAgIHJldHVybiBOVUxMOworCisgICAgZm9yIChoaSA9IGFwcl9oYXNoX2ZpcnN0KE5VTEwsIGhh c2gpOyBoaTsgaGkgPSBhcHJfaGFzaF9uZXh0KGhpKSkKKyAgICAgIHsKKyAgICAgICAgY29uc3Qg dm9pZCAqazsKKyAgICAgICAgdm9pZCAqdjsKKyAgICAgICAgUHlPYmplY3QgKmtleSwgKnZhbHVl OworCisgICAgICAgIGFwcl9oYXNoX3RoaXMoaGksICZrLCBOVUxMLCAmdik7CisgICAgICAgIGtl eSA9IFB5TG9uZ19Gcm9tTG9uZygqKHN2bl9yZXZudW1fdCAqKWspOworICAgICAgICBpZiAoa2V5 ID09IE5VTEwpCisgICAgICAgICAgeworICAgICAgICAgICAgUHlfREVDUkVGKGRpY3QpOworICAg ICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgfQorICAgICAgICB2YWx1ZSA9IFB5U3Ry aW5nX0Zyb21TdHJpbmcoKGNoYXIgKil2KTsKKyAgICAgICAgaWYgKHZhbHVlID09IE5VTEwpCisg ICAgICAgICAgeworICAgICAgICAgICAgUHlfREVDUkVGKGtleSk7CisgICAgICAgICAgICBQeV9E RUNSRUYoZGljdCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICB9CisgICAg ICAgIGlmIChQeURpY3RfU2V0SXRlbShkaWN0LCBrZXksIHZhbHVlKSA9PSAtMSkKKyAgICAgICAg ICB7CisgICAgICAgICAgICBQeV9ERUNSRUYodmFsdWUpOworICAgICAgICAgICAgUHlfREVDUkVG KGRpY3QpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgfQorICAgICAgICBQ eV9ERUNSRUYodmFsdWUpOworICAgICAgICBQeV9ERUNSRUYoa2V5KTsKKyAgICAgIH0KKyAgICBy ZXR1cm4gZGljdDsKK30KKworUHlPYmplY3QgKnN2bl9zd2lnX3B5X2NvbnZlcnRfaGFzaChhcHJf aGFzaF90ICpoYXNoLCBzd2lnX3R5cGVfaW5mbyAqdHlwZSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHlPYmplY3QgKnB5X3Bvb2wpCit7CisgIHJldHVybiBjb252ZXJ0X2hh c2goaGFzaCwgY29udmVydF90b19zd2lndHlwZSwgdHlwZSwgcHlfcG9vbCk7Cit9CisKKyNkZWZp bmUgREVDTEFSRV9TV0lHX0NPTlNUUlVDVE9SKHR5cGUsIGR1cCkgXAorc3RhdGljIFB5T2JqZWN0 ICptYWtlX29iXyMjdHlwZSh2b2lkICp2YWx1ZSkgXAoreyBcCisgIGFwcl9wb29sX3QgKm5ld19w b29sID0gc3ZuX3Bvb2xfY3JlYXRlKF9nbG9iYWxfcG9vbCk7IFwKKyAgUHlPYmplY3QgKm5ld19w eV9wb29sID0gc3ZuX3N3aWdfTmV3UG9pbnRlck9iaihuZXdfcG9vbCwgXAorICAgIHN2bl9zd2ln X1R5cGVRdWVyeSgiYXByX3Bvb2xfdCAqIiksIF9nbG9iYWxfc3ZuX3N3aWdfcHlfcG9vbCk7IFwK KyAgc3ZuXyMjdHlwZSMjX3QgKm5ld192YWx1ZSA9IGR1cCh2YWx1ZSwgbmV3X3Bvb2wpOyBcCisg IHJldHVybiBzdm5fc3dpZ19OZXdQb2ludGVyT2JqU3RyaW5nKG5ld192YWx1ZSwgInN2bl8iICN0 eXBlICJfdCAqIiwgXAorICAgICAgbmV3X3B5X3Bvb2wpOyBcCit9CisKK0RFQ0xBUkVfU1dJR19D T05TVFJVQ1RPUih0eGRlbHRhX3dpbmRvdywgc3ZuX3R4ZGVsdGFfd2luZG93X2R1cCkKK0RFQ0xB UkVfU1dJR19DT05TVFJVQ1RPUihsb2dfY2hhbmdlZF9wYXRoLCBzdm5fbG9nX2NoYW5nZWRfcGF0 aF9kdXApCitERUNMQVJFX1NXSUdfQ09OU1RSVUNUT1Iod2Nfc3RhdHVzLCBzdm5fd2NfZHVwX3N0 YXR1cykKK0RFQ0xBUkVfU1dJR19DT05TVFJVQ1RPUihsb2NrLCBzdm5fbG9ja19kdXApCitERUNM QVJFX1NXSUdfQ09OU1RSVUNUT1IoYXV0aF9zc2xfc2VydmVyX2NlcnRfaW5mbywKKyAgICBzdm5f YXV0aF9zc2xfc2VydmVyX2NlcnRfaW5mb19kdXApCitERUNMQVJFX1NXSUdfQ09OU1RSVUNUT1Io aW5mbywgc3ZuX2luZm9fZHVwKQorREVDTEFSRV9TV0lHX0NPTlNUUlVDVE9SKGNvbW1pdF9pbmZv LCBzdm5fY29tbWl0X2luZm9fZHVwKQorREVDTEFSRV9TV0lHX0NPTlNUUlVDVE9SKHdjX25vdGlm eSwgc3ZuX3djX2R1cF9ub3RpZnkpCisKK3N0YXRpYyBQeU9iamVjdCAqY29udmVydF9sb2dfY2hh bmdlZF9wYXRoKHZvaWQgKnZhbHVlLCB2b2lkICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqcHlfcG9vbCkKK3sKKyAgcmV0dXJuIG1ha2Vf b2JfbG9nX2NoYW5nZWRfcGF0aCh2YWx1ZSk7Cit9CisKK1B5T2JqZWN0ICpzdm5fc3dpZ19weV9j X3N0cmluZ3NfdG9fbGlzdChjaGFyICoqc3RyaW5ncykKK3sKKyAgICBQeU9iamVjdCAqbGlzdCA9 IFB5TGlzdF9OZXcoMCk7CisgICAgY2hhciAqczsKKworICAgIHdoaWxlICgocyA9ICpzdHJpbmdz KyspICE9IE5VTEwpCisgICAgICB7CisgICAgICAgIFB5T2JqZWN0ICpvYiA9IFB5U3RyaW5nX0Zy b21TdHJpbmcocyk7CisKKyAgICAgICAgaWYgKG9iID09IE5VTEwpCisgICAgICAgICAgICBnb3Rv IGVycm9yOworICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChsaXN0LCBvYikgPT0gLTEpCisgICAg ICAgICAgICBnb3RvIGVycm9yOworICAgICAgfQorCisgICAgcmV0dXJuIGxpc3Q7CisKKyAgZXJy b3I6CisgICAgUHlfREVDUkVGKGxpc3QpOworICAgIHJldHVybiBOVUxMOworfQorCithcHJfaGFz aF90ICpzdm5fc3dpZ19weV9zdHJpbmdoYXNoX2Zyb21fZGljdChQeU9iamVjdCAqZGljdCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBv b2wpCit7CisgIGFwcl9oYXNoX3QgKmhhc2g7CisgIFB5T2JqZWN0ICprZXlzOworICBpbnQgaSwg bnVtX2tleXM7CisKKyAgaWYgKGRpY3QgPT0gUHlfTm9uZSkKKyAgICByZXR1cm4gTlVMTDsKKwor ICBpZiAoIVB5RGljdF9DaGVjayhkaWN0KSkKKyAgICB7CisgICAgICBQeUVycl9TZXRTdHJpbmco UHlFeGNfVHlwZUVycm9yLCAibm90IGEgZGljdGlvbmFyeSIpOworICAgICAgcmV0dXJuIE5VTEw7 CisgICAgfQorCisgIGhhc2ggPSBhcHJfaGFzaF9tYWtlKHBvb2wpOworICBrZXlzID0gUHlEaWN0 X0tleXMoZGljdCk7CisgIG51bV9rZXlzID0gUHlMaXN0X1NpemUoa2V5cyk7CisgIGZvciAoaSA9 IDA7IGkgPCBudW1fa2V5czsgaSsrKQorICAgIHsKKyAgICAgIFB5T2JqZWN0ICprZXkgPSBQeUxp c3RfR2V0SXRlbShrZXlzLCBpKTsKKyAgICAgIFB5T2JqZWN0ICp2YWx1ZSA9IFB5RGljdF9HZXRJ dGVtKGRpY3QsIGtleSk7CisgICAgICBjb25zdCBjaGFyICpwcm9wbmFtZSA9IG1ha2Vfc3RyaW5n X2Zyb21fb2Ioa2V5LCBwb29sKTsKKyAgICAgIGNvbnN0IGNoYXIgKnByb3B2YWwgPSBtYWtlX3N0 cmluZ19mcm9tX29iKHZhbHVlLCBwb29sKTsKKyAgICAgIFB5X0RFQ1JFRihrZXkpOworICAgICAg UHlfREVDUkVGKHZhbHVlKTsKKyAgICAgIGlmICghIChwcm9wbmFtZSAmJiBwcm9wdmFsKSkKKyAg ICAgICAgeworICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICJkaWN0aW9uYXJ5IGtleXMvdmFsdWVzIGFyZW4ndCBzdHJp bmdzIik7CisgICAgICAgICAgUHlfREVDUkVGKGtleXMpOworICAgICAgICAgIHJldHVybiBOVUxM OworICAgICAgICB9CisgICAgICBhcHJfaGFzaF9zZXQoaGFzaCwgcHJvcG5hbWUsIEFQUl9IQVNI X0tFWV9TVFJJTkcsIHByb3B2YWwpOworICAgIH0KKyAgUHlfREVDUkVGKGtleXMpOworICByZXR1 cm4gaGFzaDsKK30KKworCithcHJfaGFzaF90ICpzdm5fc3dpZ19weV9wcm9waGFzaF9mcm9tX2Rp Y3QoUHlPYmplY3QgKmRpY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgYXByX2hhc2hfdCAqaGFzaDsKKyAgUHlPYmpl Y3QgKmtleXM7CisgIGludCBpLCBudW1fa2V5czsKKworICBpZiAoZGljdCA9PSBQeV9Ob25lKQor ICAgIHJldHVybiBOVUxMOworCisgIGlmICghUHlEaWN0X0NoZWNrKGRpY3QpKQorICAgIHsKKyAg ICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJub3QgYSBkaWN0aW9uYXJ5Iik7 CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgaGFzaCA9IGFwcl9oYXNoX21ha2UocG9v bCk7CisgIGtleXMgPSBQeURpY3RfS2V5cyhkaWN0KTsKKyAgbnVtX2tleXMgPSBQeUxpc3RfU2l6 ZShrZXlzKTsKKyAgZm9yIChpID0gMDsgaSA8IG51bV9rZXlzOyBpKyspCisgICAgeworICAgICAg UHlPYmplY3QgKmtleSA9IFB5TGlzdF9HZXRJdGVtKGtleXMsIGkpOworICAgICAgUHlPYmplY3Qg KnZhbHVlID0gUHlEaWN0X0dldEl0ZW0oZGljdCwga2V5KTsKKyAgICAgIGNvbnN0IGNoYXIgKnBy b3BuYW1lID0gbWFrZV9zdHJpbmdfZnJvbV9vYihrZXksIHBvb2wpOworICAgICAgc3ZuX3N0cmlu Z190ICpwcm9wdmFsID0gbWFrZV9zdm5fc3RyaW5nX2Zyb21fb2IodmFsdWUsIHBvb2wpOworICAg ICAgUHlfREVDUkVGKGtleSk7CisgICAgICBQeV9ERUNSRUYodmFsdWUpOworICAgICAgaWYgKCEg KHByb3BuYW1lICYmIHByb3B2YWwpKQorICAgICAgICB7CisgICAgICAgICAgUHlFcnJfU2V0U3Ry aW5nKFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImRpY3Rpb25h cnkga2V5cy92YWx1ZXMgYXJlbid0IHN0cmluZ3MiKTsKKyAgICAgICAgICBQeV9ERUNSRUYoa2V5 cyk7CisgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgIGFwcl9oYXNoX3Nl dChoYXNoLCBwcm9wbmFtZSwgQVBSX0hBU0hfS0VZX1NUUklORywgcHJvcHZhbCk7CisgICAgfQor ICBQeV9ERUNSRUYoa2V5cyk7CisgIHJldHVybiBoYXNoOworfQorCisKK2NvbnN0IGFwcl9hcnJh eV9oZWFkZXJfdCAqc3ZuX3N3aWdfcHlfc3RyaW5nc190b19hcnJheShQeU9iamVjdCAqc291cmNl LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGFwcl9wb29sX3QgKnBvb2wpCit7CisgICAgaW50IHRhcmdsZW47CisgICAgYXByX2FycmF5X2hl YWRlcl90ICp0ZW1wOworCisgICAgaWYgKCFQeVNlcXVlbmNlX0NoZWNrKHNvdXJjZSkpCisgICAg ICB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJub3QgYSBzZXF1 ZW5jZSIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgIH0KKyAgICB0YXJnbGVuID0gUHlT ZXF1ZW5jZV9MZW5ndGgoc291cmNlKTsKKyAgICB0ZW1wID0gYXByX2FycmF5X21ha2UocG9vbCwg dGFyZ2xlbiwgc2l6ZW9mKGNvbnN0IGNoYXIgKikpOworICAgIC8qIEFQUl9BUlJBWV9JRFggZG9l c24ndCBhY3R1YWxseSBpbmNyZW1lbnQgdGhlIGFycmF5IGl0ZW0gY291bnQKKyAgICAgICAobGlr ZSwgc2F5LCBhcHJfYXJyYXlfcHVzaCB3b3VsZCkuICovCisgICAgdGVtcC0+bmVsdHMgPSB0YXJn bGVuOworICAgIHdoaWxlICh0YXJnbGVuLS0pCisgICAgICB7CisgICAgICAgIFB5T2JqZWN0ICpv ID0gUHlTZXF1ZW5jZV9HZXRJdGVtKHNvdXJjZSwgdGFyZ2xlbik7CisgICAgICAgIGlmIChvID09 IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgaWYgKCFQeVN0cmluZ19D aGVjayhvKSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBQeV9ERUNSRUYobyk7CisgICAgICAg ICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAibm90IGEgc3RyaW5nIik7Cisg ICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICB9CisgICAgICAgIEFQUl9BUlJBWV9J RFgodGVtcCwgdGFyZ2xlbiwgY29uc3QgY2hhciAqKSA9IFB5U3RyaW5nX0FTX1NUUklORyhvKTsK KyAgICAgICAgUHlfREVDUkVGKG8pOworICAgICAgfQorICAgIHJldHVybiB0ZW1wOworfQorCisK K2NvbnN0IGFwcl9hcnJheV9oZWFkZXJfdCAqc3ZuX3N3aWdfcHlfcmV2bnVtc190b19hcnJheShQ eU9iamVjdCAqc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpCit7CisgICAgaW50IHRhcmdsZW47Cisg ICAgYXByX2FycmF5X2hlYWRlcl90ICp0ZW1wOworCisgICAgaWYgKCFQeVNlcXVlbmNlX0NoZWNr KHNvdXJjZSkpCisgICAgICB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJy b3IsICJub3QgYSBzZXF1ZW5jZSIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgIH0KKyAg ICB0YXJnbGVuID0gUHlTZXF1ZW5jZV9MZW5ndGgoc291cmNlKTsKKyAgICB0ZW1wID0gYXByX2Fy cmF5X21ha2UocG9vbCwgdGFyZ2xlbiwgc2l6ZW9mKHN2bl9yZXZudW1fdCkpOworICAgIC8qIEFQ Ul9BUlJBWV9JRFggZG9lc24ndCBhY3R1YWxseSBpbmNyZW1lbnQgdGhlIGFycmF5IGl0ZW0gY291 bnQKKyAgICAgICAobGlrZSwgc2F5LCBhcHJfYXJyYXlfcHVzaCB3b3VsZCkuICovCisgICAgdGVt cC0+bmVsdHMgPSB0YXJnbGVuOworICAgIHdoaWxlICh0YXJnbGVuLS0pCisgICAgICB7CisgICAg ICAgIFB5T2JqZWN0ICpvID0gUHlTZXF1ZW5jZV9HZXRJdGVtKHNvdXJjZSwgdGFyZ2xlbik7Cisg ICAgICAgIGlmIChvID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAg aWYgKFB5TG9uZ19DaGVjayhvKSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBBUFJfQVJSQVlf SURYKHRlbXAsIHRhcmdsZW4sIHN2bl9yZXZudW1fdCkgPQorICAgICAgICAgICAgICAoc3ZuX3Jl dm51bV90KVB5TG9uZ19Bc0xvbmcobyk7CisgICAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChQ eUludF9DaGVjayhvKSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBBUFJfQVJSQVlfSURYKHRl bXAsIHRhcmdsZW4sIHN2bl9yZXZudW1fdCkgPQorICAgICAgICAgICAgICAoc3ZuX3Jldm51bV90 KVB5SW50X0FzTG9uZyhvKTsKKyAgICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICB7 CisgICAgICAgICAgICBQeV9ERUNSRUYobyk7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmco UHlFeGNfVHlwZUVycm9yLCAibm90IGFuIGludGVnZXIgdHlwZSIpOworICAgICAgICAgICAgcmV0 dXJuIE5VTEw7CisgICAgICAgICAgfQorICAgICAgICBQeV9ERUNSRUYobyk7CisgICAgfQorICAg IHJldHVybiB0ZW1wOworfQorCisKKwwKKy8qKiogYXByX2FycmF5X2hlYWRlcl90IGNvbnZlcnNp b25zLiAgVG8gY3JlYXRlIGEgbmV3IHR5cGUgb2YKKyAgICAgY29udmVydGVyLCBzaW1wbHkgY29w eS1uLXBhc3RlIG9uZSBvZiB0aGVzZSBmdW5jdGlvbiBhbmQgdHdlYWsKKyAgICAgdGhlIGNyZWF0 aW9uIG9mIHRoZSBQeU9iamVjdCAqb2IuICAqKiovCisKK1B5T2JqZWN0ICpzdm5fc3dpZ19weV9h cnJheV90b19saXN0KGNvbnN0IGFwcl9hcnJheV9oZWFkZXJfdCAqYXJyYXkpCit7CisgICAgUHlP YmplY3QgKmxpc3QgPSBQeUxpc3RfTmV3KGFycmF5LT5uZWx0cyk7CisgICAgaW50IGk7CisKKyAg ICBmb3IgKGkgPSAwOyBpIDwgYXJyYXktPm5lbHRzOyArK2kpCisgICAgICB7CisgICAgICAgIFB5 T2JqZWN0ICpvYiA9CisgICAgICAgICAgUHlTdHJpbmdfRnJvbVN0cmluZyhBUFJfQVJSQVlfSURY KGFycmF5LCBpLCBjb25zdCBjaGFyICopKTsKKyAgICAgICAgaWYgKG9iID09IE5VTEwpCisgICAg ICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgUHlMaXN0X1NFVF9JVEVNKGxpc3QsIGksIG9iKTsK KyAgICAgIH0KKyAgICByZXR1cm4gbGlzdDsKKworICBlcnJvcjoKKyAgICBQeV9ERUNSRUYobGlz dCk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIEZvcm1lcmx5IHVzZWQgYnkgcHJlLTEuMCBB UElzLiBOb3cgdW51c2VkCitQeU9iamVjdCAqc3ZuX3N3aWdfcHlfcmV2YXJyYXlfdG9fbGlzdChj b25zdCBhcHJfYXJyYXlfaGVhZGVyX3QgKmFycmF5KQoreworICAgIFB5T2JqZWN0ICpsaXN0ID0g UHlMaXN0X05ldyhhcnJheS0+bmVsdHMpOworICAgIGludCBpOworCisgICAgZm9yIChpID0gMDsg aSA8IGFycmF5LT5uZWx0czsgKytpKQorICAgICAgeworICAgICAgICBQeU9iamVjdCAqb2IKKyAg ICAgICAgICA9IFB5SW50X0Zyb21Mb25nKEFQUl9BUlJBWV9JRFgoYXJyYXksIGksIHN2bl9yZXZu dW1fdCkpOworICAgICAgICBpZiAob2IgPT0gTlVMTCkKKyAgICAgICAgICBnb3RvIGVycm9yOwor ICAgICAgICBQeUxpc3RfU0VUX0lURU0obGlzdCwgaSwgb2IpOworICAgICAgfQorICAgIHJldHVy biBsaXN0OworCisgIGVycm9yOgorICAgIFB5X0RFQ1JFRihsaXN0KTsKKyAgICByZXR1cm4gTlVM TDsKK30KKyovCisKK3N0YXRpYyBQeU9iamVjdCAqCitjb21taXRfaXRlbV9hcnJheV90b19saXN0 KGNvbnN0IGFwcl9hcnJheV9oZWFkZXJfdCAqYXJyYXkpCit7CisgICAgUHlPYmplY3QgKmxpc3Qg PSBQeUxpc3RfTmV3KGFycmF5LT5uZWx0cyk7CisgICAgaW50IGk7CisKKyAgICBmb3IgKGkgPSAw OyBpIDwgYXJyYXktPm5lbHRzOyArK2kpCisgICAgICB7CisgICAgICAgIFB5T2JqZWN0ICpvYiA9 IGNvbnZlcnRfc3ZuX2NsaWVudF9jb21taXRfaXRlbV90CisgICAgICAgICAgKEFQUl9BUlJBWV9J RFgoYXJyYXksIGksIHN2bl9jbGllbnRfY29tbWl0X2l0ZW1fdCAqKSwgTlVMTCk7CisgICAgICAg IGlmIChvYiA9PSBOVUxMKQorICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIFB5TGlzdF9T RVRfSVRFTShsaXN0LCBpLCBvYik7CisgICAgICB9CisgICAgcmV0dXJuIGxpc3Q7CisKKyAgZXJy b3I6CisgICAgUHlfREVDUkVGKGxpc3QpOworICAgIHJldHVybiBOVUxMOworfQorCisKKwwKKy8q KiogRXJyb3JzICoqKi8KKworLyogUmV0dXJuIGEgU3VidmVyc2lvbiBlcnJvciBhYm91dCBhIGZh aWxlZCBjYWxsYmFjay4gKi8KK3N0YXRpYyBzdm5fZXJyb3JfdCAqY2FsbGJhY2tfZXhjZXB0aW9u X2Vycm9yKHZvaWQpCit7CisgIHJldHVybiBzdm5fZXJyb3JfY3JlYXRlKFNWTl9FUlJfU1dJR19Q WV9FWENFUFRJT05fU0VULCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiUHl0aG9u IGNhbGxiYWNrIHJhaXNlZCBhbiBleGNlcHRpb24iKTsKK30KKworLyogUmFpc2UgYSBUeXBlRXJy b3IgZXhjZXB0aW9uIHdpdGggTUVTU0FHRSwgYW5kIHJldHVybiBhIFN1YnZlcnNpb24KKyAgIGVy cm9yIGFib3V0IGFuIGludmFsaWQgcmV0dXJuIGZyb20gYSBjYWxsYmFjay4gKi8KK3N0YXRpYyBz dm5fZXJyb3JfdCAqY2FsbGJhY2tfYmFkX3JldHVybl9lcnJvcihjb25zdCBjaGFyICptZXNzYWdl KQoreworICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCBtZXNzYWdlKTsKKyAgcmV0 dXJuIHN2bl9lcnJvcl9jcmVhdGUoQVBSX0VHRU5FUkFMLCBOVUxMLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAiUHl0aG9uIGNhbGxiYWNrIHJldHVybmVkIGFuIGludmFsaWQgb2JqZWN0Iik7 Cit9CisKKy8qIFJldHVybiBhIGdlbmVyaWMgZXJyb3IgYWJvdXQgbm90IGJlaW5nIGFibGUgdG8g bWFwIHR5cGVzLiAqLworc3RhdGljIHN2bl9lcnJvcl90ICp0eXBlX2NvbnZlcnNpb25fZXJyb3Io Y29uc3QgY2hhciAqZGF0YXR5cGUpCit7CisgIHJldHVybiBzdm5fZXJyb3JfY3JlYXRlZihBUFJf RUdFTkVSQUwsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiRXJyb3IgY29udmVy dGluZyBvYmplY3Qgb2YgdHlwZSAnJXMnIiwgZGF0YXR5cGUpOworfQorCisKKwwKKy8qKiogRWRp dG9yIFdyYXBwaW5nICoqKi8KKworLyogdGhpcyBiYXRvbiBpcyB1c2VkIGZvciB0aGUgZWRpdG9y LCBkaXJlY3RvcnksIGFuZCBmaWxlIGJhdG9ucy4gKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgUHlP YmplY3QgKmVkaXRvcjsgICAgIC8qIHRoZSBlZGl0b3IgaGFuZGxpbmcgdGhlIGNhbGxiYWNrcyAq LworICBQeU9iamVjdCAqYmF0b247ICAgICAgLyogdGhlIGRpci9maWxlIGJhdG9uIChvciBOVUxM IGZvciBlZGl0IGJhdG9uKSAqLworfSBpdGVtX2JhdG9uOworCitzdGF0aWMgaXRlbV9iYXRvbiAq bWFrZV9iYXRvbihhcHJfcG9vbF90ICpwb29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUHlPYmplY3QgKmVkaXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2Jq ZWN0ICpiYXRvbikKK3sKKyAgaXRlbV9iYXRvbiAqbmV3YiA9IGFwcl9wYWxsb2MocG9vbCwgc2l6 ZW9mKCpuZXdiKSk7CisKKyAgLyogTm90ZTogV2Ugc3RlYWwgdGhlIGNhbGxlcidzIHJlZmVyZW5j ZSB0byAnYmF0b24nLiBBbHNvLCB0byBhdm9pZAorICAgICBtZW1vcnkgbGVha3MsIHdlIGJvcnJv dyB0aGUgY2FsbGVyJ3MgcmVmZXJlbmNlIHRvICdlZGl0b3InLiBJbiB0aGlzCisgICAgIGNhc2Us IGJvcnJvd2luZyB0aGUgcmVmZXJlbmNlIHRvICdlZGl0b3InIGlzIHNhZmUgYmVjYXVzZSB0aGUg Y29udGVudHMKKyAgICAgb2YgYW4gaXRlbV9iYXRvbiBzdHJ1Y3QgYXJlIG9ubHkgdXNlZCBieSBm dW5jdGlubyBjYWxscyB3aGljaCBvcGVyYXRlIG9uCisgICAgIHRoZSBlZGl0b3IgaXRzZWxmLiAq LworICBuZXdiLT5lZGl0b3IgPSBlZGl0b3I7CisgIG5ld2ItPmJhdG9uID0gYmF0b247CisKKyAg cmV0dXJuIG5ld2I7Cit9CisKK3N0YXRpYyBzdm5fZXJyb3JfdCAqY2xvc2VfYmF0b24odm9pZCAq YmF0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm1ldGhv ZCkKK3sKKyAgaXRlbV9iYXRvbiAqaWIgPSBiYXRvbjsKKyAgUHlPYmplY3QgKnJlc3VsdDsKKyAg c3ZuX2Vycm9yX3QgKmVycjsKKworICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xvY2soKTsKKwor ICAvKiBJZiB0aGVyZSBpcyBubyBiYXRvbiBvYmplY3QsIHRoZW4gaXQgaXMgYW4gZWRpdF9iYXRv biwgYW5kIHdlIHNob3VsZAorICAgICBub3QgYm90aGVyIHRvIHBhc3MgYW4gb2JqZWN0LiBOb3Rl IHRoYXQgd2Ugc3RpbGwgc2hvdmUgYSBOVUxMIG9udG8KKyAgICAgdGhlIHN0YWNrLCBidXQgdGhl IGZvcm1hdCBzcGVjaWZpZWQganVzdCB3b24ndCByZWZlcmVuY2UgaXQuICAqLworICAvKiAjIyMg cHl0aG9uIGRvZXNuJ3QgaGF2ZSAnY29uc3QnIG9uIHRoZSBtZXRob2QgbmFtZSBhbmQgZm9ybWF0 ICovCisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChpYi0+ZWRpdG9yLCAoY2hh ciAqKW1ldGhvZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGliLT5iYXRv biA/IChjaGFyICopIihPKSIgOiBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaWItPmJhdG9uKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFja19l eGNlcHRpb25fZXJyb3IoKTsKKyAgICAgIGdvdG8gZmluaXNoZWQ7CisgICAgfQorCisgIC8qIHRo ZXJlIGlzIG5vIHJldHVybiB2YWx1ZSwgc28ganVzdCB0b3NzIHRoaXMgb2JqZWN0IChwcm9iYWJs eSBQeV9Ob25lKSAqLworICBQeV9ERUNSRUYocmVzdWx0KTsKKworICAvKiBXZSdyZSBub3cgZG9u ZSB3aXRoIHRoZSBiYXRvbi4gU2luY2UgdGhlcmUgaXNuJ3QgcmVhbGx5IGEgZnJlZSwgYWxsCisg ICAgIHdlIG5lZWQgdG8gZG8gaXMgbm90ZSB0aGF0IGl0cyBvYmplY3RzIGFyZSBubyBsb25nZXIg cmVmZXJlbmNlZCBieQorICAgICB0aGUgYmF0b24uICAqLworICBQeV9YREVDUkVGKGliLT5iYXRv bik7CisKKyNpZmRlZiBTVk5fREVCVUcKKyAgaWItPmVkaXRvciA9IGliLT5iYXRvbiA9IE5VTEw7 CisjZW5kaWYKKworICBlcnIgPSBTVk5fTk9fRVJST1I7CisKKyBmaW5pc2hlZDoKKyAgc3ZuX3N3 aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7CisgIHJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzdm5f ZXJyb3JfdCAqc2V0X3RhcmdldF9yZXZpc2lvbih2b2lkICplZGl0X2JhdG9uLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2bl9yZXZudW1fdCB0YXJnZXRfcmV2aXNp b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAq cG9vbCkKK3sKKyAgaXRlbV9iYXRvbiAqaWIgPSBlZGl0X2JhdG9uOworICBQeU9iamVjdCAqcmVz dWx0OworICBzdm5fZXJyb3JfdCAqZXJyOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9j aygpOworCisgIC8qICMjIyBweXRob24gZG9lc24ndCBoYXZlICdjb25zdCcgb24gdGhlIG1ldGhv ZCBuYW1lIGFuZCBmb3JtYXQgKi8KKyAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsTWV0aG9k KGliLT5lZGl0b3IsIChjaGFyICopInNldF90YXJnZXRfcmV2aXNpb24iLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikibCIsIHRhcmdldF9yZXZpc2lvbikpID09 IE5VTEwpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7Cisg ICAgICBnb3RvIGZpbmlzaGVkOworICAgIH0KKworICAvKiB0aGVyZSBpcyBubyByZXR1cm4gdmFs dWUsIHNvIGp1c3QgdG9zcyB0aGlzIG9iamVjdCAocHJvYmFibHkgUHlfTm9uZSkgKi8KKyAgUHlf REVDUkVGKHJlc3VsdCk7CisgIGVyciA9IFNWTl9OT19FUlJPUjsKKworIGZpbmlzaGVkOgorICBz dm5fc3dpZ19weV9yZWxlYXNlX3B5X2xvY2soKTsKKyAgcmV0dXJuIGVycjsKK30KKworc3RhdGlj IHN2bl9lcnJvcl90ICpvcGVuX3Jvb3Qodm9pZCAqZWRpdF9iYXRvbiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHN2bl9yZXZudW1fdCBiYXNlX3JldmlzaW9uLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqZGlyX3Bvb2wsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB2b2lkICoqcm9vdF9iYXRvbikKK3sKKyAgaXRlbV9iYXRvbiAqaWIgPSBl ZGl0X2JhdG9uOworICBQeU9iamVjdCAqcmVzdWx0OworICBzdm5fZXJyb3JfdCAqZXJyOworCisg IHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisgIC8qICMjIyBweXRob24gZG9lc24n dCBoYXZlICdjb25zdCcgb24gdGhlIG1ldGhvZCBuYW1lIGFuZCBmb3JtYXQgKi8KKyAgaWYgKChy ZXN1bHQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKGliLT5lZGl0b3IsIChjaGFyICopIm9wZW5fcm9v dCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJsTyYiLCBi YXNlX3JldmlzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9v Yl9wb29sLCBkaXJfcG9vbCkpID09IE5VTEwpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tf ZXhjZXB0aW9uX2Vycm9yKCk7CisgICAgICBnb3RvIGZpbmlzaGVkOworICAgIH0KKworICAvKiBt YWtlX2JhdG9uIHRha2VzIG91ciAncmVzdWx0JyByZWZlcmVuY2UgKi8KKyAgKnJvb3RfYmF0b24g PSBtYWtlX2JhdG9uKGRpcl9wb29sLCBpYi0+ZWRpdG9yLCByZXN1bHQpOworICBlcnIgPSBTVk5f Tk9fRVJST1I7CisKKyBmaW5pc2hlZDoKKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7 CisgIHJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzdm5fZXJyb3JfdCAqZGVsZXRlX2VudHJ5KGNv bnN0IGNoYXIgKnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdm5fcmV2 bnVtX3QgcmV2aXNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpw YXJlbnRfYmF0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90 ICpwb29sKQoreworICBpdGVtX2JhdG9uICppYiA9IHBhcmVudF9iYXRvbjsKKyAgUHlPYmplY3Qg KnJlc3VsdDsKKyAgc3ZuX2Vycm9yX3QgKmVycjsKKworICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5 X2xvY2soKTsKKworICAvKiAjIyMgcHl0aG9uIGRvZXNuJ3QgaGF2ZSAnY29uc3QnIG9uIHRoZSBt ZXRob2QgbmFtZSBhbmQgZm9ybWF0ICovCisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbE1l dGhvZChpYi0+ZWRpdG9yLCAoY2hhciAqKSJkZWxldGVfZW50cnkiLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikic2xPTyYiLCBwYXRoLCByZXZpc2lvbiwgaWIt PmJhdG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9vYl9wb29s LCBwb29sKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25f ZXJyb3IoKTsKKyAgICAgIGdvdG8gZmluaXNoZWQ7CisgICAgfQorCisgIC8qIHRoZXJlIGlzIG5v IHJldHVybiB2YWx1ZSwgc28ganVzdCB0b3NzIHRoaXMgb2JqZWN0IChwcm9iYWJseSBQeV9Ob25l KSAqLworICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgZXJyID0gU1ZOX05PX0VSUk9SOworCisgZmlu aXNoZWQ6CisgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOworICByZXR1cm4gZXJyOwor fQorCitzdGF0aWMgc3ZuX2Vycm9yX3QgKmFkZF9kaXJlY3RvcnkoY29uc3QgY2hhciAqcGF0aCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwYXJlbnRfYmF0b24sCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY29weWZyb21fcGF0 aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdm5fcmV2bnVtX3QgY29weWZy b21fcmV2aXNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xf dCAqZGlyX3Bvb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKmNo aWxkX2JhdG9uKQoreworICBpdGVtX2JhdG9uICppYiA9IHBhcmVudF9iYXRvbjsKKyAgUHlPYmpl Y3QgKnJlc3VsdDsKKyAgc3ZuX2Vycm9yX3QgKmVycjsKKworICBzdm5fc3dpZ19weV9hY3F1aXJl X3B5X2xvY2soKTsKKworICAvKiAjIyMgcHl0aG9uIGRvZXNuJ3QgaGF2ZSAnY29uc3QnIG9uIHRo ZSBtZXRob2QgbmFtZSBhbmQgZm9ybWF0ICovCisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2Fs bE1ldGhvZChpYi0+ZWRpdG9yLCAoY2hhciAqKSJhZGRfZGlyZWN0b3J5IiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopInNPc2xPJiIsIHBhdGgsIGliLT5iYXRv biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlmcm9tX3BhdGgsIGNv cHlmcm9tX3JldmlzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFr ZV9vYl9wb29sLCBkaXJfcG9vbCkpID09IE5VTEwpCisgICAgeworICAgICAgZXJyID0gY2FsbGJh Y2tfZXhjZXB0aW9uX2Vycm9yKCk7CisgICAgICBnb3RvIGZpbmlzaGVkOworICAgIH0KKworICAv KiBtYWtlX2JhdG9uIHRha2VzIG91ciAncmVzdWx0JyByZWZlcmVuY2UgKi8KKyAgKmNoaWxkX2Jh dG9uID0gbWFrZV9iYXRvbihkaXJfcG9vbCwgaWItPmVkaXRvciwgcmVzdWx0KTsKKyAgZXJyID0g U1ZOX05PX0VSUk9SOworCisgZmluaXNoZWQ6CisgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9j aygpOworICByZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3ZuX2Vycm9yX3QgKm9wZW5fZGlyZWN0 b3J5KGNvbnN0IGNoYXIgKnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHZvaWQgKnBhcmVudF9iYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c3ZuX3Jldm51bV90IGJhc2VfcmV2aXNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGFwcl9wb29sX3QgKmRpcl9wb29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB2b2lkICoqY2hpbGRfYmF0b24pCit7CisgIGl0ZW1fYmF0b24gKmliID0gcGFyZW50 X2JhdG9uOworICBQeU9iamVjdCAqcmVzdWx0OworICBzdm5fZXJyb3JfdCAqZXJyOworCisgIHN2 bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisgIC8qICMjIyBweXRob24gZG9lc24ndCBo YXZlICdjb25zdCcgb24gdGhlIG1ldGhvZCBuYW1lIGFuZCBmb3JtYXQgKi8KKyAgaWYgKChyZXN1 bHQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKGliLT5lZGl0b3IsIChjaGFyICopIm9wZW5fZGlyZWN0 b3J5IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopInNPbE8m IiwgcGF0aCwgaWItPmJhdG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg YmFzZV9yZXZpc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vf b2JfcG9vbCwgZGlyX3Bvb2wpKSA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNr X2V4Y2VwdGlvbl9lcnJvcigpOworICAgICAgZ290byBmaW5pc2hlZDsKKyAgICB9CisKKyAgLyog bWFrZV9iYXRvbiB0YWtlcyBvdXIgJ3Jlc3VsdCcgcmVmZXJlbmNlICovCisgICpjaGlsZF9iYXRv biA9IG1ha2VfYmF0b24oZGlyX3Bvb2wsIGliLT5lZGl0b3IsIHJlc3VsdCk7CisgIGVyciA9IFNW Tl9OT19FUlJPUjsKKworIGZpbmlzaGVkOgorICBzdm5fc3dpZ19weV9yZWxlYXNlX3B5X2xvY2so KTsKKyAgcmV0dXJuIGVycjsKK30KKworc3RhdGljIHN2bl9lcnJvcl90ICpjaGFuZ2VfZGlyX3By b3Aodm9pZCAqZGlyX2JhdG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgY2hhciAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IHN2bl9zdHJpbmdfdCAqdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBhcHJfcG9vbF90ICpwb29sKQoreworICBpdGVtX2JhdG9uICppYiA9IGRpcl9iYXRvbjsK KyAgUHlPYmplY3QgKnJlc3VsdDsKKyAgc3ZuX2Vycm9yX3QgKmVycjsKKworICBzdm5fc3dpZ19w eV9hY3F1aXJlX3B5X2xvY2soKTsKKworICAvKiAjIyMgcHl0aG9uIGRvZXNuJ3QgaGF2ZSAnY29u c3QnIG9uIHRoZSBtZXRob2QgbmFtZSBhbmQgZm9ybWF0ICovCisgIGlmICgocmVzdWx0ID0gUHlP YmplY3RfQ2FsbE1ldGhvZChpYi0+ZWRpdG9yLCAoY2hhciAqKSJjaGFuZ2VfZGlyX3Byb3AiLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikiT3NzI08mIiwgaWIt PmJhdG9uLCBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUg PyB2YWx1ZS0+ZGF0YSA6IE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB2YWx1ZSA/IHZhbHVlLT5sZW4gOiAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbWFrZV9vYl9wb29sLCBwb29sKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBj YWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICAgIGdvdG8gZmluaXNoZWQ7CisgICAgfQor CisgIC8qIHRoZXJlIGlzIG5vIHJldHVybiB2YWx1ZSwgc28ganVzdCB0b3NzIHRoaXMgb2JqZWN0 IChwcm9iYWJseSBQeV9Ob25lKSAqLworICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgZXJyID0gU1ZO X05PX0VSUk9SOworCisgZmluaXNoZWQ6CisgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygp OworICByZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3ZuX2Vycm9yX3QgKmNsb3NlX2RpcmVjdG9y eSh2b2lkICpkaXJfYmF0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBh cHJfcG9vbF90ICpwb29sKQoreworICByZXR1cm4gY2xvc2VfYmF0b24oZGlyX2JhdG9uLCAiY2xv c2VfZGlyZWN0b3J5Iik7Cit9CisKK3N0YXRpYyBzdm5fZXJyb3JfdCAqYWRkX2ZpbGUoY29uc3Qg Y2hhciAqcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcGFyZW50X2Jh dG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjb3B5ZnJvbV9w YXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdm5fcmV2bnVtX3QgY29weWZyb21f cmV2aXNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKmZpbGVf cG9vbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKmZpbGVfYmF0b24pCit7 CisgIGl0ZW1fYmF0b24gKmliID0gcGFyZW50X2JhdG9uOworICBQeU9iamVjdCAqcmVzdWx0Owor ICBzdm5fZXJyb3JfdCAqZXJyOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOwor CisgIC8qICMjIyBweXRob24gZG9lc24ndCBoYXZlICdjb25zdCcgb24gdGhlIG1ldGhvZCBuYW1l IGFuZCBmb3JtYXQgKi8KKyAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKGliLT5l ZGl0b3IsIChjaGFyICopImFkZF9maWxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChjaGFyICopInNPc2xPJiIsIHBhdGgsIGliLT5iYXRvbiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvcHlmcm9tX3BhdGgsIGNvcHlmcm9tX3JldmlzaW9uLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9vYl9wb29sLCBmaWxlX3Bv b2wpKSA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJv cigpOworICAgICAgZ290byBmaW5pc2hlZDsKKyAgICB9CisKKyAgLyogbWFrZV9iYXRvbiB0YWtl cyBvdXIgJ3Jlc3VsdCcgcmVmZXJlbmNlICovCisgICpmaWxlX2JhdG9uID0gbWFrZV9iYXRvbihm aWxlX3Bvb2wsIGliLT5lZGl0b3IsIHJlc3VsdCk7CisKKyAgZXJyID0gU1ZOX05PX0VSUk9SOwor CisgZmluaXNoZWQ6CisgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOworICByZXR1cm4g ZXJyOworfQorCitzdGF0aWMgc3ZuX2Vycm9yX3QgKm9wZW5fZmlsZShjb25zdCBjaGFyICpwYXRo LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcGFyZW50X2JhdG9uLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX3Jldm51bV90IGJhc2VfcmV2aXNpb24sCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpmaWxlX3Bvb2wsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoqZmlsZV9iYXRvbikKK3sKKyAgaXRlbV9i YXRvbiAqaWIgPSBwYXJlbnRfYmF0b247CisgIFB5T2JqZWN0ICpyZXN1bHQ7CisgIHN2bl9lcnJv cl90ICplcnI7CisKKyAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7CisKKyAgLyogIyMj IHB5dGhvbiBkb2Vzbid0IGhhdmUgJ2NvbnN0JyBvbiB0aGUgbWV0aG9kIG5hbWUgYW5kIGZvcm1h dCAqLworICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxNZXRob2QoaWItPmVkaXRvciwgKGNo YXIgKikib3Blbl9maWxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChj aGFyICopInNPbE8mIiwgcGF0aCwgaWItPmJhdG9uLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgYmFzZV9yZXZpc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG1ha2Vfb2JfcG9vbCwgZmlsZV9wb29sKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICBl cnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICAgIGdvdG8gZmluaXNoZWQ7Cisg ICAgfQorCisgIC8qIG1ha2VfYmF0b24gdGFrZXMgb3VyICdyZXN1bHQnIHJlZmVyZW5jZSAqLwor ICAqZmlsZV9iYXRvbiA9IG1ha2VfYmF0b24oZmlsZV9wb29sLCBpYi0+ZWRpdG9yLCByZXN1bHQp OworICBlcnIgPSBTVk5fTk9fRVJST1I7CisKKyBmaW5pc2hlZDoKKyAgc3ZuX3N3aWdfcHlfcmVs ZWFzZV9weV9sb2NrKCk7CisgIHJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzdm5fZXJyb3JfdCAq d2luZG93X2hhbmRsZXIoc3ZuX3R4ZGVsdGFfd2luZG93X3QgKndpbmRvdywKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYmF0b24pCit7CisgIFB5T2JqZWN0ICpoYW5k bGVyID0gYmF0b247CisgIFB5T2JqZWN0ICpyZXN1bHQ7CisgIHN2bl9lcnJvcl90ICplcnI7CisK KyAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7CisKKyAgaWYgKHdpbmRvdyA9PSBOVUxM KQorICAgIHsKKyAgICAgIC8qIHRoZSBsYXN0IGNhbGw7IGl0IGNsb3NlcyB0aGUgaGFuZGxlciAq LworCisgICAgICAvKiBpbnZva2UgdGhlIGhhbmRsZXIgd2l0aCBOb25lIGZvciB0aGUgd2luZG93 ICovCisgICAgICAvKiAjIyMgcHl0aG9uIGRvZXNuJ3QgaGF2ZSAnY29uc3QnIG9uIHRoZSBmb3Jt YXQgKi8KKyAgICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihoYW5kbGVyLCAoY2hh ciAqKSJPIiwgUHlfTm9uZSk7CisKKyAgICAgIC8qIHdlIG5vIGxvbmdlciBuZWVkIHRvIHJlZmVy IHRvIHRoZSBoYW5kbGVyIG9iamVjdCAqLworICAgICAgUHlfREVDUkVGKGhhbmRsZXIpOworICAg IH0KKyAgZWxzZQorICAgIHsKKyAgICAgIC8qIGludm9rZSB0aGUgaGFuZGxlciB3aXRoIHRoZSB3 aW5kb3cgKi8KKyAgICAgIC8qICMjIyBweXRob24gZG9lc24ndCBoYXZlICdjb25zdCcgb24gdGhl IGZvcm1hdCAqLworICAgICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGhhbmRsZXIs IChjaGFyICopIk8mIiwKKyAgICAgICAgbWFrZV9vYl90eGRlbHRhX3dpbmRvdywgd2luZG93KTsK KyAgICB9CisKKyAgaWYgKHJlc3VsdCA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVyciA9IGNhbGxi YWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgICAgZ290byBmaW5pc2hlZDsKKyAgICB9CisKKyAg LyogdGhlcmUgaXMgbm8gcmV0dXJuIHZhbHVlLCBzbyBqdXN0IHRvc3MgdGhpcyBvYmplY3QgKHBy b2JhYmx5IFB5X05vbmUpICovCisgIFB5X0RFQ1JFRihyZXN1bHQpOworICBlcnIgPSBTVk5fTk9f RVJST1I7CisKKyBmaW5pc2hlZDoKKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7Cisg IHJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzdm5fZXJyb3JfdCAqYXBwbHlfdGV4dGRlbHRhKHZv aWQgKmZpbGVfYmF0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBjaGFyICpiYXNlX2NoZWNrc3VtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgYXByX3Bvb2xfdCAqcG9vbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHN2bl90eGRlbHRhX3dpbmRvd19oYW5kbGVyX3QgKmhhbmRsZXIsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB2b2lkICoqaF9iYXRvbikKK3sKKyAgaXRlbV9iYXRvbiAqaWIg PSBmaWxlX2JhdG9uOworICBQeU9iamVjdCAqcmVzdWx0OworICBzdm5fZXJyb3JfdCAqZXJyOwor CisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisgIC8qICMjIyBweXRob24gZG9l c24ndCBoYXZlICdjb25zdCcgb24gdGhlIG1ldGhvZCBuYW1lIGFuZCBmb3JtYXQgKi8KKyAgaWYg KChyZXN1bHQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKGliLT5lZGl0b3IsIChjaGFyICopImFwcGx5 X3RleHRkZWx0YSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAq KSIoT3MpIiwgaWItPmJhdG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg YmFzZV9jaGVja3N1bSkpID09IE5VTEwpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfZXhj ZXB0aW9uX2Vycm9yKCk7CisgICAgICBnb3RvIGZpbmlzaGVkOworICAgIH0KKworICAvKiBJbnRl cnByZXQgTm9uZSB0byBtZWFuIHN2bl9kZWx0YV9ub29wX3dpbmRvd19oYW5kbGVyLiBUaGlzIGlz IG11Y2gKKyAgICAgZWFzaWVyL2Zhc3RlciB0aGFuIG1ha2luZyBjb2RlIGFsd2F5cyBoYXZlIHRv IHdyaXRlIGEgTk9PUCBoYW5kbGVyCisgICAgIGluIFB5dGhvbi4gICovCisgIGlmIChyZXN1bHQg PT0gUHlfTm9uZSkKKyAgICB7CisgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKworICAgICAgKmhh bmRsZXIgPSBzdm5fZGVsdGFfbm9vcF93aW5kb3dfaGFuZGxlcjsKKyAgICAgICpoX2JhdG9uID0g TlVMTDsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICAvKiByZXR1cm4gdGhlIHRodW5rIGZv ciBpbnZva2luZyB0aGUgaGFuZGxlci4gdGhlIGJhdG9uIHRha2VzIG91cgorICAgICAgICAgJ3Jl c3VsdCcgcmVmZXJlbmNlLCB3aGljaCBpcyB0aGUgaGFuZGxlci4gKi8KKyAgICAgICpoYW5kbGVy ID0gd2luZG93X2hhbmRsZXI7CisgICAgICAqaF9iYXRvbiA9IHJlc3VsdDsKKyAgICB9CisKKyAg ZXJyID0gU1ZOX05PX0VSUk9SOworCisgZmluaXNoZWQ6CisgIHN2bl9zd2lnX3B5X3JlbGVhc2Vf cHlfbG9jaygpOworICByZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3ZuX2Vycm9yX3QgKmNoYW5n ZV9maWxlX3Byb3Aodm9pZCAqZmlsZV9iYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IHN2bl9zdHJpbmdfdCAqdmFsdWUsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgaXRlbV9iYXRvbiAqaWIg PSBmaWxlX2JhdG9uOworICBQeU9iamVjdCAqcmVzdWx0OworICBzdm5fZXJyb3JfdCAqZXJyOwor CisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisgIC8qICMjIyBweXRob24gZG9l c24ndCBoYXZlICdjb25zdCcgb24gdGhlIG1ldGhvZCBuYW1lIGFuZCBmb3JtYXQgKi8KKyAgaWYg KChyZXN1bHQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKGliLT5lZGl0b3IsIChjaGFyICopImNoYW5n ZV9maWxlX3Byb3AiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIg KikiT3NzI08mIiwgaWItPmJhdG9uLCBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdmFsdWUgPyB2YWx1ZS0+ZGF0YSA6IE5VTEwsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB2YWx1ZSA/IHZhbHVlLT5sZW4gOiAwLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbWFrZV9vYl9wb29sLCBwb29sKSkgPT0gTlVMTCkKKyAgICB7 CisgICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICAgIGdvdG8gZmlu aXNoZWQ7CisgICAgfQorCisgIC8qIHRoZXJlIGlzIG5vIHJldHVybiB2YWx1ZSwgc28ganVzdCB0 b3NzIHRoaXMgb2JqZWN0IChwcm9iYWJseSBQeV9Ob25lKSAqLworICBQeV9ERUNSRUYocmVzdWx0 KTsKKyAgZXJyID0gU1ZOX05PX0VSUk9SOworCisgZmluaXNoZWQ6CisgIHN2bl9zd2lnX3B5X3Jl bGVhc2VfcHlfbG9jaygpOworICByZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3ZuX2Vycm9yX3Qg KmNsb3NlX2ZpbGUodm9pZCAqZmlsZV9iYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBjaGFyICp0ZXh0X2NoZWNrc3VtLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGFwcl9wb29sX3QgKnBvb2wpCit7CisgIGl0ZW1fYmF0b24gKmliID0gZmlsZV9iYXRv bjsKKyAgUHlPYmplY3QgKnJlc3VsdDsKKyAgc3ZuX2Vycm9yX3QgKmVycjsKKworICBzdm5fc3dp Z19weV9hY3F1aXJlX3B5X2xvY2soKTsKKworICAvKiAjIyMgcHl0aG9uIGRvZXNuJ3QgaGF2ZSAn Y29uc3QnIG9uIHRoZSBtZXRob2QgbmFtZSBhbmQgZm9ybWF0ICovCisgIGlmICgocmVzdWx0ID0g UHlPYmplY3RfQ2FsbE1ldGhvZChpYi0+ZWRpdG9yLCAoY2hhciAqKSJjbG9zZV9maWxlIiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopIihPcykiLCBpYi0+YmF0 b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0X2NoZWNrc3VtKSkg PT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsK KyAgICAgIGdvdG8gZmluaXNoZWQ7CisgICAgfQorCisgIC8qIHRoZXJlIGlzIG5vIHJldHVybiB2 YWx1ZSwgc28ganVzdCB0b3NzIHRoaXMgb2JqZWN0IChwcm9iYWJseSBQeV9Ob25lKSAqLworICBQ eV9ERUNSRUYocmVzdWx0KTsKKworICAvKiBXZSdyZSBub3cgZG9uZSB3aXRoIHRoZSBiYXRvbi4g U2luY2UgdGhlcmUgaXNuJ3QgcmVhbGx5IGEgZnJlZSwgYWxsCisgICAgIHdlIG5lZWQgdG8gZG8g aXMgbm90ZSB0aGF0IGl0cyBvYmplY3RzIGFyZSBubyBsb25nZXIgcmVmZXJlbmNlZCBieQorICAg ICB0aGUgYmF0b24uICAqLworICBQeV9YREVDUkVGKGliLT5iYXRvbik7CisKKyNpZmRlZiBTVk5f REVCVUcKKyAgaWItPmVkaXRvciA9IGliLT5iYXRvbiA9IE5VTEw7CisjZW5kaWYKKworICBlcnIg PSBTVk5fTk9fRVJST1I7CisKKyBmaW5pc2hlZDoKKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9s b2NrKCk7CisgIHJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzdm5fZXJyb3JfdCAqY2xvc2VfZWRp dCh2b2lkICplZGl0X2JhdG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9w b29sX3QgKnBvb2wpCit7CisgIHJldHVybiBjbG9zZV9iYXRvbihlZGl0X2JhdG9uLCAiY2xvc2Vf ZWRpdCIpOworfQorCitzdGF0aWMgc3ZuX2Vycm9yX3QgKmFib3J0X2VkaXQodm9pZCAqZWRpdF9i YXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKQor eworICByZXR1cm4gY2xvc2VfYmF0b24oZWRpdF9iYXRvbiwgImFib3J0X2VkaXQiKTsKK30KKwor dm9pZCBzdm5fc3dpZ19weV9tYWtlX2VkaXRvcihjb25zdCBzdm5fZGVsdGFfZWRpdG9yX3QgKipl ZGl0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiplZGl0X2JhdG9uLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqcHlfZWRpdG9yLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKQoreworICBzdm5fZGVsdGFf ZWRpdG9yX3QgKnRodW5rX2VkaXRvciA9IHN2bl9kZWx0YV9kZWZhdWx0X2VkaXRvciAocG9vbCk7 CisgIAorICB0aHVua19lZGl0b3ItPnNldF90YXJnZXRfcmV2aXNpb24gPSBzZXRfdGFyZ2V0X3Jl dmlzaW9uOworICB0aHVua19lZGl0b3ItPm9wZW5fcm9vdCA9IG9wZW5fcm9vdDsKKyAgdGh1bmtf ZWRpdG9yLT5kZWxldGVfZW50cnkgPSBkZWxldGVfZW50cnk7CisgIHRodW5rX2VkaXRvci0+YWRk X2RpcmVjdG9yeSA9IGFkZF9kaXJlY3Rvcnk7CisgIHRodW5rX2VkaXRvci0+b3Blbl9kaXJlY3Rv cnkgPSBvcGVuX2RpcmVjdG9yeTsKKyAgdGh1bmtfZWRpdG9yLT5jaGFuZ2VfZGlyX3Byb3AgPSBj aGFuZ2VfZGlyX3Byb3A7CisgIHRodW5rX2VkaXRvci0+Y2xvc2VfZGlyZWN0b3J5ID0gY2xvc2Vf ZGlyZWN0b3J5OworICB0aHVua19lZGl0b3ItPmFkZF9maWxlID0gYWRkX2ZpbGU7CisgIHRodW5r X2VkaXRvci0+b3Blbl9maWxlID0gb3Blbl9maWxlOworICB0aHVua19lZGl0b3ItPmFwcGx5X3Rl eHRkZWx0YSA9IGFwcGx5X3RleHRkZWx0YTsKKyAgdGh1bmtfZWRpdG9yLT5jaGFuZ2VfZmlsZV9w cm9wID0gY2hhbmdlX2ZpbGVfcHJvcDsKKyAgdGh1bmtfZWRpdG9yLT5jbG9zZV9maWxlID0gY2xv c2VfZmlsZTsKKyAgdGh1bmtfZWRpdG9yLT5jbG9zZV9lZGl0ID0gY2xvc2VfZWRpdDsKKyAgdGh1 bmtfZWRpdG9yLT5hYm9ydF9lZGl0ID0gYWJvcnRfZWRpdDsKKworICAqZWRpdG9yID0gdGh1bmtf ZWRpdG9yOworICAqZWRpdF9iYXRvbiA9IG1ha2VfYmF0b24ocG9vbCwgcHlfZWRpdG9yLCBOVUxM KTsKK30KKworCisMCisvKioqIE90aGVyIFdyYXBwZXJzIGZvciBTVk4gRnVuY3Rpb25zICoqKi8K KworCithcHJfZmlsZV90ICpzdm5fc3dpZ19weV9tYWtlX2ZpbGUgKFB5T2JqZWN0ICpweV9maWxl LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKQor eworICBhcHJfZmlsZV90ICphcHJfZmlsZSA9IE5VTEw7CisgIGFwcl9zdGF0dXNfdCBhcHJfZXJy OworCisgIGlmIChweV9maWxlID09IE5VTEwgfHwgcHlfZmlsZSA9PSBQeV9Ob25lKQorICAgIHJl dHVybiBOVUxMOworCisgIGlmIChQeVN0cmluZ19DaGVjayAocHlfZmlsZSkpCisgICAgeworICAg ICAgLyogaW5wdXQgaXMgYSBwYXRoIC0tIGp1c3Qgb3BlbiBhbiBhcHJfZmlsZV90ICovCisgICAg ICBjaGFyKiBmbmFtZSA9IFB5U3RyaW5nX0FTX1NUUklORyAocHlfZmlsZSk7CisgICAgICBhcHJf ZXJyID0gYXByX2ZpbGVfb3BlbiAoJmFwcl9maWxlLCBmbmFtZSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEFQUl9DUkVBVEUgfCBBUFJfUkVBRCB8IEFQUl9XUklURSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEFQUl9PU19ERUZBVUxULCBwb29sKTsKKyAgICAgIGlmIChh cHJfZXJyKQorICAgICAgICB7CisgICAgICAgICAgY2hhciBidWZbMjU2XTsKKyAgICAgICAgICBh cHJfc3RyZXJyb3IgKGFwcl9lcnIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworICAgICAgICAgIFB5RXJy X0Zvcm1hdCAoUHlFeGNfSU9FcnJvciwgImFwcl9maWxlX29wZW4gZmFpbGVkOiAlczogJyVzJyIs CisgICAgICAgICAgICAgICAgICAgICAgICBidWYsIGZuYW1lKTsKKyAgICAgICAgICByZXR1cm4g TlVMTDsKKyAgICAgICAgfQorICAgIH0KKyAgZWxzZSBpZiAoUHlGaWxlX0NoZWNrIChweV9maWxl KSkKKyAgICB7CisgICAgICBGSUxFICpmaWxlOworICAgICAgYXByX29zX2ZpbGVfdCBvc2ZpbGU7 CisKKyAgICAgIC8qIGlucHV0IGlzIGEgZmlsZSBvYmplY3QgLS0gY29udmVydCB0byBhcHJfZmls ZV90ICovCisgICAgICBmaWxlID0gUHlGaWxlX0FzRmlsZShweV9maWxlKTsKKyNpZmRlZiBXSU4z MgorICAgICAgb3NmaWxlID0gKGFwcl9vc19maWxlX3QpX2dldF9vc2ZoYW5kbGUoX2ZpbGVubyhm aWxlKSk7CisjZWxzZQorICAgICAgb3NmaWxlID0gKGFwcl9vc19maWxlX3QpZmlsZW5vKGZpbGUp OworI2VuZGlmCisgICAgICBhcHJfZXJyID0gYXByX29zX2ZpbGVfcHV0ICgmYXByX2ZpbGUsICZv c2ZpbGUsIE9fQ1JFQVQgfCBPX1dST05MWSwgcG9vbCk7CisgICAgICBpZiAoYXByX2VycikKKyAg ICAgICAgeworICAgICAgICAgIGNoYXIgYnVmWzI1Nl07CisgICAgICAgICAgYXByX3N0cmVycm9y IChhcHJfZXJyLCBidWYsIHNpemVvZihidWYpKTsKKyAgICAgICAgICBQeUVycl9Gb3JtYXQgKFB5 RXhjX0lPRXJyb3IsICJhcHJfb3NfZmlsZV9wdXQgZmFpbGVkOiAlcyIsIGJ1Zik7CisgICAgICAg ICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9CisgIHJldHVybiBhcHJfZmlsZTsKK30K KworCitzdGF0aWMgc3ZuX2Vycm9yX3QgKgorcmVhZF9oYW5kbGVyX3B5aW8gKHZvaWQgKmJhdG9u LCBjaGFyICpidWZmZXIsIGFwcl9zaXplX3QgKmxlbikKK3sKKyAgUHlPYmplY3QgKnJlc3VsdDsK KyAgUHlPYmplY3QgKnB5X2lvID0gYmF0b247CisgIGFwcl9zaXplX3QgYnl0ZXM7CisgIHN2bl9l cnJvcl90ICplcnIgPSBTVk5fTk9fRVJST1I7CisKKyAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9s b2NrKCk7CisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChweV9pbywgKGNoYXIg KikicmVhZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJp IiwgKmxlbikpID09IE5VTEwpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9u X2Vycm9yKCk7CisgICAgfQorICBlbHNlIGlmIChQeVN0cmluZ19DaGVjayhyZXN1bHQpKQorICAg IHsKKyAgICAgIGJ5dGVzID0gUHlTdHJpbmdfR0VUX1NJWkUocmVzdWx0KTsKKyAgICAgIGlmIChi eXRlcyA+ICpsZW4pCisgICAgICAgIHsKKyAgICAgICAgICBlcnIgPSBjYWxsYmFja19iYWRfcmV0 dXJuX2Vycm9yKCJUb28gbWFueSBieXRlcyIpOworICAgICAgICB9CisgICAgICBlbHNlCisgICAg ICAgIHsKKyAgICAgICAgICAvKiBXcml0ZWJhY2ssIGluIGNhc2UgdGhpcyB3YXMgYSBzaG9ydCBy ZWFkLCBpbmRpY2F0aW5nIEVPRiAqLworICAgICAgICAgICpsZW4gPSBieXRlczsKKyAgICAgICAg ICBtZW1jcHkoYnVmZmVyLCBQeVN0cmluZ19BU19TVFJJTkcocmVzdWx0KSwgKmxlbik7CisgICAg ICAgIH0KKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFja19iYWRfcmV0 dXJuX2Vycm9yKCJOb3QgYSBzdHJpbmciKTsKKyAgICB9CisgIFB5X1hERUNSRUYocmVzdWx0KTsK KyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7CisKKyAgcmV0dXJuIGVycjsKK30KKwor c3RhdGljIHN2bl9lcnJvcl90ICoKK3dyaXRlX2hhbmRsZXJfcHlpbyAodm9pZCAqYmF0b24sIGNv bnN0IGNoYXIgKmRhdGEsIGFwcl9zaXplX3QgKmxlbikKK3sKKyAgUHlPYmplY3QgKnJlc3VsdDsK KyAgUHlPYmplY3QgKnB5X2lvID0gYmF0b247CisgIHN2bl9lcnJvcl90ICplcnIgPSBTVk5fTk9f RVJST1I7CisKKyAgaWYgKGRhdGEgIT0gTlVMTCkKKyAgICB7CisgICAgICBzdm5fc3dpZ19weV9h Y3F1aXJlX3B5X2xvY2soKTsKKyAgICAgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbE1ldGhv ZChweV9pbywgKGNoYXIgKikid3JpdGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChjaGFyICopInMjIiwgZGF0YSwgKmxlbikpID09IE5VTEwpCisgICAgICAgIHsK KyAgICAgICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICAgICAgfQor ICAgICAgUHlfWERFQ1JFRihyZXN1bHQpOworICAgICAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9s b2NrKCk7CisgICAgfQorCisgIHJldHVybiBlcnI7Cit9CisKK3N2bl9zdHJlYW1fdCAqCitzdm5f c3dpZ19weV9tYWtlX3N0cmVhbSAoUHlPYmplY3QgKnB5X2lvLCBhcHJfcG9vbF90ICpwb29sKQor eworICBzdm5fc3RyZWFtX3QgKnN0cmVhbTsKKworICAvKiBCb3Jyb3cgdGhlIGNhbGxlcidzIHJl ZmVyZW5jZSB0byBweV9pbyAtIHRoaXMgaXMgc2FmZSBvbmx5IGJlY2F1c2UgdGhlCisgICAqIGNh bGxlciBtdXN0IGhhdmUgYSByZWZlcmVuY2UgaW4gb3JkZXIgdG8gcGFzcyB0aGUgb2JqZWN0IGlu dG8gdGhlCisgICAqIGJpbmRpbmdzLCBhbmQgd2Ugd2lsbCBiZSBmaW5pc2hlZCB3aXRoIHRoZSBw eV9pbyBvYmplY3QgYmVmb3JlIHdlIHJldHVybgorICAgKiB0byBweXRob24uIEkuZS4gRE8gTk9U IFNUT1JFIEFXQVkgVEhFIFJFU1VMVElORyBzdm5fc3RyZWFtX3QgKiBmb3IgdXNlCisgICAqIG92 ZXIgbXVsdGlwbGUgY2FsbHMgaW50byB0aGUgYmluZGluZ3MuICovCisgIHN0cmVhbSA9IHN2bl9z dHJlYW1fY3JlYXRlIChweV9pbywgcG9vbCk7CisgIHN2bl9zdHJlYW1fc2V0X3JlYWQgKHN0cmVh bSwgcmVhZF9oYW5kbGVyX3B5aW8pOworICBzdm5fc3RyZWFtX3NldF93cml0ZSAoc3RyZWFtLCB3 cml0ZV9oYW5kbGVyX3B5aW8pOworCisgIHJldHVybiBzdHJlYW07Cit9CisKKwordm9pZCBzdm5f c3dpZ19weV9ub3RpZnlfZnVuYyh2b2lkICpiYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgY2hhciAqcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Zu X3djX25vdGlmeV9hY3Rpb25fdCBhY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHN2bl9ub2RlX2tpbmRfdCBraW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBjaGFyICptaW1lX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2bl93Y19u b3RpZnlfc3RhdGVfdCBjb250ZW50X3N0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzdm5fd2Nfbm90aWZ5X3N0YXRlX3QgcHJvcF9zdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3ZuX3Jldm51bV90IHJldmlzaW9uKQoreworICBQeU9iamVjdCAqZnVuY3Rpb24g PSBiYXRvbjsKKyAgUHlPYmplY3QgKnJlc3VsdDsKKyAgc3ZuX2Vycm9yX3QgKmVyciA9IFNWTl9O T19FUlJPUjsKKworICBpZiAoZnVuY3Rpb24gPT0gTlVMTCB8fCBmdW5jdGlvbiA9PSBQeV9Ob25l KQorICAgIHJldHVybjsKKworICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xvY2soKTsKKyAgaWYg KChyZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oZnVuY3Rpb24sCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopIihzaWlzaWlpKSIsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGgsIGFjdGlvbiwga2luZCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWltZV90eXBlLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50X3N0YXRlLCBwcm9wX3N0YXRlLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXZpc2lvbikpID09IE5VTEwpCisgICAg eworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7CisgICAgfQorICBlbHNl CisgICAgeworICAgICAgLyogVGhlIGNhbGxiYWNrIHNob3VsZG4ndCBiZSByZXR1cm5pbmcgYW55 dGhpbmcuICovCisgICAgICBpZiAocmVzdWx0ICE9IFB5X05vbmUpCisgICAgICAgIGVyciA9IGNh bGxiYWNrX2JhZF9yZXR1cm5fZXJyb3IoIk5vdCBOb25lIik7CisgICAgICBQeV9ERUNSRUYocmVz dWx0KTsKKyAgICB9CisKKyAgLyogT3VyIGVycm9yIGhhcyBubyBwbGFjZSB0byBnby4gOi0oICov CisgIGlmIChlcnIpCisgICAgc3ZuX2Vycm9yX2NsZWFyKGVycik7CisKKyAgc3ZuX3N3aWdfcHlf cmVsZWFzZV9weV9sb2NrKCk7Cit9CisKKwordm9pZCBzdm5fc3dpZ19weV9ub3RpZnlfZnVuYzIo dm9pZCAqYmF0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdm5fd2Nf bm90aWZ5X3QgKm5vdGlmeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29s X3QgKnBvb2wpCit7CisgIFB5T2JqZWN0ICpmdW5jdGlvbiA9IGJhdG9uOworICBQeU9iamVjdCAq cmVzdWx0OworICBzdm5fZXJyb3JfdCAqZXJyID0gU1ZOX05PX0VSUk9SOworCisgIGlmIChmdW5j dGlvbiA9PSBOVUxMIHx8IGZ1bmN0aW9uID09IFB5X05vbmUpCisgICAgcmV0dXJuOworCisgIHN2 bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisgIGlmICgocmVzdWx0ID0gUHlPYmplY3Rf Q2FsbEZ1bmN0aW9uKGZ1bmN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoY2hhciAqKSIoTyZPJikiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBtYWtlX29iX3djX25vdGlmeSwgbm90aWZ5LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBtYWtlX29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQorICAgIHsKKyAgICAg IGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgIH0KKyAgZWxzZQorICAgIHsK KyAgICAgIC8qIFRoZSBjYWxsYmFjayBzaG91bGRuJ3QgYmUgcmV0dXJuaW5nIGFueXRoaW5nLiAq LworICAgICAgaWYgKHJlc3VsdCAhPSBQeV9Ob25lKQorICAgICAgICBlcnIgPSBjYWxsYmFja19i YWRfcmV0dXJuX2Vycm9yKCJOb3QgTm9uZSIpOworICAgICAgUHlfREVDUkVGKHJlc3VsdCk7Cisg ICAgfQorCisgIC8qIE91ciBlcnJvciBoYXMgbm8gcGxhY2UgdG8gZ28uIDotKCAqLworICBpZiAo ZXJyKQorICAgIHN2bl9lcnJvcl9jbGVhcihlcnIpOworCisgIHN2bl9zd2lnX3B5X3JlbGVhc2Vf cHlfbG9jaygpOworfQorCit2b2lkIHN2bl9zd2lnX3B5X3N0YXR1c19mdW5jKHZvaWQgKmJhdG9u LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwYXRoLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzdm5fd2Nfc3RhdHVzX3QgKnN0YXR1cykKK3sKKyAgUHlP YmplY3QgKmZ1bmN0aW9uID0gYmF0b247CisgIFB5T2JqZWN0ICpyZXN1bHQ7CisgIHN2bl9lcnJv cl90ICplcnIgPSBTVk5fTk9fRVJST1I7CisKKyAgaWYgKGZ1bmN0aW9uID09IE5VTEwgfHwgZnVu Y3Rpb24gPT0gUHlfTm9uZSkKKyAgICByZXR1cm47CisKKyAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9w eV9sb2NrKCk7CisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGZ1bmN0aW9u LCAoY2hhciAqKSJzTyYiLCBwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBtYWtlX29iX3djX3N0YXR1cywgc3RhdHVzKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICBl cnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICB9CisgIGVsc2UKKyAgICB7Cisg ICAgICAvKiBUaGUgY2FsbGJhY2sgc2hvdWxkbid0IGJlIHJldHVybmluZyBhbnl0aGluZy4gKi8K KyAgICAgIGlmIChyZXN1bHQgIT0gUHlfTm9uZSkKKyAgICAgICAgZXJyID0gY2FsbGJhY2tfYmFk X3JldHVybl9lcnJvcigiTm90IE5vbmUiKTsKKyAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAg IH0KKworICAvKiBPdXIgZXJyb3IgaGFzIG5vIHBsYWNlIHRvIGdvLiA6LSggKi8KKyAgaWYgKGVy cikKKyAgICBzdm5fZXJyb3JfY2xlYXIoZXJyKTsKKworICBzdm5fc3dpZ19weV9yZWxlYXNlX3B5 X2xvY2soKTsKK30KKworCitzdm5fZXJyb3JfdCAqc3ZuX3N3aWdfcHlfY2FuY2VsX2Z1bmModm9p ZCAqY2FuY2VsX2JhdG9uKQoreworICBQeU9iamVjdCAqZnVuY3Rpb24gPSBjYW5jZWxfYmF0b247 CisgIFB5T2JqZWN0ICpyZXN1bHQ7CisgIHN2bl9lcnJvcl90ICplcnIgPSBTVk5fTk9fRVJST1I7 CisKKyAgaWYgKGZ1bmN0aW9uID09IE5VTEwgfHwgZnVuY3Rpb24gPT0gUHlfTm9uZSkKKyAgICBy ZXR1cm4gU1ZOX05PX0VSUk9SOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOwor ICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihmdW5jdGlvbiwgTlVMTCkpID09 IE5VTEwpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7Cisg ICAgfQorICBlbHNlCisgICAgeworICAgICAgaWYgKFB5SW50X0NoZWNrKHJlc3VsdCkpCisgICAg ICAgIHsKKyAgICAgICAgICBpZiAoUHlJbnRfQXNMb25nKHJlc3VsdCkpCisgICAgICAgICAgICBl cnIgPSBzdm5fZXJyb3JfY3JlYXRlKFNWTl9FUlJfQ0FOQ0VMTEVELCAwLCBOVUxMKTsKKyAgICAg ICAgfQorICAgICAgZWxzZSBpZiAoUHlMb25nX0NoZWNrKHJlc3VsdCkpCisgICAgICAgIHsKKyAg ICAgICAgICBpZiAoUHlMb25nX0FzTG9uZyhyZXN1bHQpKQorICAgICAgICAgICAgZXJyID0gc3Zu X2Vycm9yX2NyZWF0ZShTVk5fRVJSX0NBTkNFTExFRCwgMCwgTlVMTCk7CisgICAgICAgIH0KKyAg ICAgIGVsc2UgaWYgKHJlc3VsdCAhPSBQeV9Ob25lKQorICAgICAgICB7CisgICAgICAgICAgZXJy ID0gY2FsbGJhY2tfYmFkX3JldHVybl9lcnJvcigiTm90IGFuIGludGVnZXIgb3IgTm9uZSIpOwor ICAgICAgICB9CisgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICB9CisgIHN2bl9zd2lnX3B5 X3JlbGVhc2VfcHlfbG9jaygpOworICByZXR1cm4gZXJyOworfQorCitzdm5fZXJyb3JfdCAqc3Zu X3N3aWdfcHlfZnNfZ2V0X2xvY2tzX2Z1bmMgKHZvaWQgKmJhdG9uLCAKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX2xvY2tfdCAqbG9jaywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sK KyAgUHlPYmplY3QgKmZ1bmN0aW9uID0gYmF0b247CisgIFB5T2JqZWN0ICpyZXN1bHQ7CisgIHN2 bl9lcnJvcl90ICplcnIgPSBTVk5fTk9fRVJST1I7CisKKyAgaWYgKGZ1bmN0aW9uID09IE5VTEwg fHwgZnVuY3Rpb24gPT0gUHlfTm9uZSkKKyAgICByZXR1cm4gU1ZOX05PX0VSUk9SOworCisgIHN2 bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisgIGlmICgocmVzdWx0ID0gUHlPYmplY3Rf Q2FsbEZ1bmN0aW9uKGZ1bmN0aW9uLCAoY2hhciAqKSJPJk8mIiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbWFrZV9vYl9sb2NrLCBsb2NrLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBtYWtlX29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQorICAg IHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgIH0KKyAgZWxz ZQorICAgIHsKKyAgICAgIC8qIFRoZSBjYWxsYmFjayBzaG91bGRuJ3QgYmUgcmV0dXJuaW5nIGFu eXRoaW5nLiAqLworICAgICAgaWYgKHJlc3VsdCAhPSBQeV9Ob25lKQorICAgICAgICBlcnIgPSBj YWxsYmFja19iYWRfcmV0dXJuX2Vycm9yKCJOb3QgTm9uZSIpOworICAgICAgUHlfREVDUkVGKHJl c3VsdCk7CisgICAgfQorCisgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOworICByZXR1 cm4gZXJyOworfQorCitzdm5fZXJyb3JfdCAqc3ZuX3N3aWdfcHlfZ2V0X2NvbW1pdF9sb2dfZnVu Yyhjb25zdCBjaGFyICoqbG9nX21zZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IGNoYXIgKip0bXBfZmlsZSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9hcnJheV9oZWFkZXJfdCAqY29tbWl0X2l0ZW1z LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYmF0 b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9v bF90ICpwb29sKQoreworICBQeU9iamVjdCAqZnVuY3Rpb24gPSBiYXRvbjsKKyAgUHlPYmplY3Qg KnJlc3VsdDsKKyAgUHlPYmplY3QgKmNtdF9pdGVtczsKKyAgc3ZuX2Vycm9yX3QgKmVycjsKKwor ICAqbG9nX21zZyA9IE5VTEw7CisgICp0bXBfZmlsZSA9IE5VTEw7CisKKyAgLyogIyMjIHRvZG86 IGZvciBub3csIGp1c3QgaWdub3JlIHRoZSB3aG9sZSB0bXBfZmlsZSB0aGluZy4gICovCisKKyAg aWYgKChmdW5jdGlvbiA9PSBOVUxMKSB8fCAoZnVuY3Rpb24gPT0gUHlfTm9uZSkpCisgICAgcmV0 dXJuIFNWTl9OT19FUlJPUjsKKworICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xvY2soKTsKKwor ICBpZiAoY29tbWl0X2l0ZW1zKQorICAgIHsKKyAgICAgIGNtdF9pdGVtcyA9IGNvbW1pdF9pdGVt X2FycmF5X3RvX2xpc3QoY29tbWl0X2l0ZW1zKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAg ICBjbXRfaXRlbXMgPSBQeV9Ob25lOworICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOworICAgIH0K KworICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihmdW5jdGlvbiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikiT08mIiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY210X2l0ZW1zLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBtYWtlX29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQorICAg IHsKKyAgICAgIFB5X0RFQ1JFRihjbXRfaXRlbXMpOworICAgICAgZXJyID0gY2FsbGJhY2tfZXhj ZXB0aW9uX2Vycm9yKCk7CisgICAgICBnb3RvIGZpbmlzaGVkOworICAgIH0KKworICBQeV9ERUNS RUYoY210X2l0ZW1zKTsKKworICBpZiAocmVzdWx0ID09IFB5X05vbmUpCisgICAgeworICAgICAg UHlfREVDUkVGKHJlc3VsdCk7CisgICAgICAqbG9nX21zZyA9IE5VTEw7CisgICAgICBlcnIgPSBT Vk5fTk9fRVJST1I7CisgICAgfQorICBlbHNlIGlmIChQeVN0cmluZ19DaGVjayhyZXN1bHQpKQor ICAgIHsKKyAgICAgICpsb2dfbXNnID0gYXByX3BzdHJkdXAocG9vbCwgUHlTdHJpbmdfQVNfU1RS SU5HKHJlc3VsdCkpOworICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgICBlcnIgPSBTVk5f Tk9fRVJST1I7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgUHlfREVDUkVGKHJlc3VsdCk7 CisgICAgICBlcnIgPSBjYWxsYmFja19iYWRfcmV0dXJuX2Vycm9yKCJOb3QgYSBzdHJpbmciKTsK KyAgICB9CisKKyBmaW5pc2hlZDoKKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7Cisg IHJldHVybiBlcnI7Cit9CisKKworc3ZuX2Vycm9yX3QgKnN2bl9zd2lnX3B5X3JlcG9zX2F1dGh6 X2Z1bmMoc3ZuX2Jvb2xlYW5fdCAqYWxsb3dlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHN2bl9mc19yb290X3QgKnJvb3QsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwYXRoLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYmF0b24sCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKQoreworICBQeU9iamVj dCAqZnVuY3Rpb24gPSBiYXRvbjsKKyAgUHlPYmplY3QgKnJlc3VsdDsKKyAgUHlPYmplY3QgKnB5 X3Bvb2wsICpweV9yb290OworICBzdm5fZXJyb3JfdCAqZXJyID0gU1ZOX05PX0VSUk9SOworCisg ICphbGxvd2VkID0gVFJVRTsKKworICBpZiAoZnVuY3Rpb24gPT0gTlVMTCB8fCBmdW5jdGlvbiA9 PSBQeV9Ob25lKQorICAgIHJldHVybiBTVk5fTk9fRVJST1I7CisKKyAgc3ZuX3N3aWdfcHlfYWNx dWlyZV9weV9sb2NrKCk7CisKKyAgcHlfcG9vbCA9IG1ha2Vfb2JfcG9vbChwb29sKTsKKyAgaWYg KHB5X3Bvb2wgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25f ZXJyb3IoKTsKKyAgICAgIGdvdG8gZmluaXNoZWQ7CisgICAgfQorICBweV9yb290ID0gbWFrZV9v Yl9mc19yb290KHJvb3QsIHB5X3Bvb2wpOworICBpZiAocHlfcm9vdCA9PSBOVUxMKQorICAgIHsK KyAgICAgIFB5X0RFQ1JFRihweV9wb29sKTsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlv bl9lcnJvcigpOworICAgICAgZ290byBmaW5pc2hlZDsKKyAgICB9CisKKyAgaWYgKChyZXN1bHQg PSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oZnVuY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChjaGFyICopIk9zTyIsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHB5X3Jvb3QsIHBhdGgsIHB5X3Bvb2wpKSA9PSBOVUxMKQorICAgIHsKKyAg ICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgIH0KKyAgZWxzZQorICAg IHsKKyAgICAgIGlmIChQeUludF9DaGVjayhyZXN1bHQpKQorICAgICAgICAqYWxsb3dlZCA9IFB5 SW50X0FzTG9uZyhyZXN1bHQpOworICAgICAgZWxzZSBpZiAoUHlMb25nX0NoZWNrKHJlc3VsdCkp CisgICAgICAgICphbGxvd2VkID0gUHlMb25nX0FzTG9uZyhyZXN1bHQpOworICAgICAgZWxzZQor ICAgICAgICBlcnIgPSBjYWxsYmFja19iYWRfcmV0dXJuX2Vycm9yKCJOb3QgYW4gaW50ZWdlciIp OworICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgfQorICBQeV9ERUNSRUYocHlfcm9vdCk7 CisgIFB5X0RFQ1JFRihweV9wb29sKTsKK2ZpbmlzaGVkOgorICBzdm5fc3dpZ19weV9yZWxlYXNl X3B5X2xvY2soKTsKKyAgcmV0dXJuIGVycjsKK30KKworCitzdm5fZXJyb3JfdCAqc3ZuX3N3aWdf cHlfcmVwb3NfaGlzdG9yeV9mdW5jKHZvaWQgKmJhdG9uLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwYXRoLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdm5fcmV2bnVtX3QgcmV2aXNpb24sCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wp Cit7CisgIFB5T2JqZWN0ICpmdW5jdGlvbiA9IGJhdG9uOworICBQeU9iamVjdCAqcmVzdWx0Owor ICBzdm5fZXJyb3JfdCAqZXJyID0gU1ZOX05PX0VSUk9SOworCisgIGlmIChmdW5jdGlvbiA9PSBO VUxMIHx8IGZ1bmN0aW9uID09IFB5X05vbmUpCisgICAgcmV0dXJuIFNWTl9OT19FUlJPUjsKKwor ICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xvY2soKTsKKyAgaWYgKChyZXN1bHQgPSBQeU9iamVj dF9DYWxsRnVuY3Rpb24oZnVuY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChjaGFyICopInNsTyYiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBwYXRoLCByZXZpc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbWFrZV9vYl9wb29sLCBwb29sKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBjYWxs YmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBpZiAo cmVzdWx0ICE9IFB5X05vbmUpCisgICAgICAgIGVyciA9IGNhbGxiYWNrX2JhZF9yZXR1cm5fZXJy b3IoIk5vdCBOb25lIik7CisgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICB9CisgIHN2bl9z d2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOworICByZXR1cm4gZXJyOworfQorCisKK3N2bl9lcnJv cl90ICpzdm5fc3dpZ19weV9sb2dfcmVjZWl2ZXIodm9pZCAqYmF0b24sCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9oYXNoX3QgKmNoYW5nZWRfcGF0aHMsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2bl9yZXZudW1fdCByZXYsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmF1dGhvciwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZGF0ZSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbXNnLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKQorewor ICBQeU9iamVjdCAqcmVjZWl2ZXIgPSBiYXRvbjsKKyAgUHlPYmplY3QgKnJlc3VsdCwgKnB5X3Bv b2w7CisgIFB5T2JqZWN0ICpjaHBhdGhzOworICBzdm5fZXJyb3JfdCAqZXJyID0gU1ZOX05PX0VS Uk9SOworCisgIGlmICgocmVjZWl2ZXIgPT0gTlVMTCkgfHwgKHJlY2VpdmVyID09IFB5X05vbmUp KQorICAgIHJldHVybiBTVk5fTk9fRVJST1I7CisKKyAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9s b2NrKCk7CisKKyAgcHlfcG9vbCA9IG1ha2Vfb2JfcG9vbChwb29sKTsKKyAgaWYgKHB5X3Bvb2wg PT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsK KyAgICAgIGdvdG8gZmluaXNoZWQ7CisgICAgfQorCisgIGlmIChjaGFuZ2VkX3BhdGhzKQorICAg IHsKKyAgICAgIGNocGF0aHMgPSBjb252ZXJ0X2hhc2goY2hhbmdlZF9wYXRocywgY29udmVydF9s b2dfY2hhbmdlZF9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxM KTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBjaHBhdGhzID0gUHlfTm9uZTsKKyAgICAg IFB5X0lOQ1JFRihQeV9Ob25lKTsKKyAgICB9CisKKyAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9D YWxsRnVuY3Rpb24ocmVjZWl2ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChjaGFyICopIk9sc3NzTyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNocGF0aHMsIHJldiwgYXV0aG9yLCBkYXRlLCBtc2csCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHB5X3Bvb2wpKSA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVyciA9 IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAg IGlmIChyZXN1bHQgIT0gUHlfTm9uZSkKKyAgICAgICAgZXJyID0gY2FsbGJhY2tfYmFkX3JldHVy bl9lcnJvcigiTm90IE5vbmUiKTsKKyAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgIH0KKwor ICBQeV9ERUNSRUYoY2hwYXRocyk7CisgIFB5X0RFQ1JFRihweV9wb29sKTsKK2ZpbmlzaGVkOgor ICBzdm5fc3dpZ19weV9yZWxlYXNlX3B5X2xvY2soKTsKKyAgcmV0dXJuIGVycjsKK30KKworc3Zu X2Vycm9yX3QgKnN2bl9zd2lnX3B5X2luZm9fcmVjZWl2ZXJfZnVuYyh2b2lkICpiYXRvbiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGF0 aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3Zu X2luZm9fdCAqaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgUHlPYmplY3QgKnJlY2VpdmVyID0gYmF0b247Cisg IFB5T2JqZWN0ICpyZXN1bHQ7CisgIHN2bl9lcnJvcl90ICplcnIgPSBTVk5fTk9fRVJST1I7CisK KyAgaWYgKChyZWNlaXZlciA9PSBOVUxMKSB8fCAocmVjZWl2ZXIgPT0gUHlfTm9uZSkpCisgICAg cmV0dXJuIFNWTl9OT19FUlJPUjsKKworICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xvY2soKTsK KworICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihyZWNlaXZlciwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikic08mTyYiLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLCBtYWtlX29iX2luZm8sIGluZm8s CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vfb2JfcG9vbCwgcG9v bCkpID09IE5VTEwpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9y KCk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgaWYgKHJlc3VsdCAhPSBQeV9Ob25lKQor ICAgICAgICBlcnIgPSBjYWxsYmFja19iYWRfcmV0dXJuX2Vycm9yKCJOb3QgTm9uZSIpOworICAg ICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgfQorCisgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlf bG9jaygpOworCisgIHJldHVybiBlcnI7Cit9CisKK3N2bl9lcnJvcl90ICpzdm5fc3dpZ19weV9j bGllbnRfYmxhbWVfcmVjZWl2ZXJfZnVuYyh2b2lkICpiYXRvbiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfaW50NjRfdCBsaW5lX25vLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2bl9y ZXZudW1fdCByZXZpc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBjaGFyICphdXRob3IsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZGF0ZSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICps aW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGFwcl9wb29sX3QgKnBvb2wpCit7CisgIFB5T2JqZWN0ICpyZWNlaXZlciA9IGJhdG9uOworICBQ eU9iamVjdCAqcmVzdWx0OworICBzdm5fZXJyb3JfdCAqZXJyID0gU1ZOX05PX0VSUk9SOworCisg IGlmICgocmVjZWl2ZXIgPT0gTlVMTCkgfHwgKHJlY2VpdmVyID09IFB5X05vbmUpKQorICAgIHJl dHVybiBTVk5fTk9fRVJST1I7CisKKyAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7CisK KyAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24ocmVjZWl2ZXIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChTVk5fQVBSX0lOVDY0X1RfUFlDRk1UICJsc3NzTyYiKSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZV9ubywgcmV2aXNpb24s IGF1dGhvciwgZGF0ZSwgbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbWFrZV9vYl9wb29sLCBwb29sKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBjYWxs YmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBpZiAo cmVzdWx0ICE9IFB5X05vbmUpCisgICAgICAgIGVyciA9IGNhbGxiYWNrX2JhZF9yZXR1cm5fZXJy b3IoIk5vdCBOb25lIik7CisgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICB9CisKKyAgc3Zu X3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7CisgIHJldHVybiBlcnI7Cit9CisKKworc3ZuX2Vy cm9yX3QgKgorc3ZuX3N3aWdfcHlfYXV0aF9zaW1wbGVfcHJvbXB0X2Z1bmMgKHN2bl9hdXRoX2Ny ZWRfc2ltcGxlX3QgKipjcmVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHZvaWQgKmJhdG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IGNoYXIgKnJlYWxtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IGNoYXIgKnVzZXJuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2 bl9ib29sZWFuX3QgbWF5X3NhdmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgUHlPYmplY3QgKmZ1bmN0aW9uID0gYmF0b247Cisg IFB5T2JqZWN0ICpyZXN1bHQ7CisgIHN2bl9hdXRoX2NyZWRfc2ltcGxlX3QgKmNyZWRzID0gTlVM TDsKKyAgc3ZuX2Vycm9yX3QgKmVyciA9IFNWTl9OT19FUlJPUjsKKworICBpZiAoKGZ1bmN0aW9u ID09IE5VTEwpIHx8IChmdW5jdGlvbiA9PSBQeV9Ob25lKSkKKyAgICByZXR1cm4gU1ZOX05PX0VS Uk9SOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisgIGlmICgocmVzdWx0 ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGZ1bmN0aW9uLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoY2hhciAqKSJzc2xPJiIsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHJlYWxtLCB1c2VybmFtZSwgbWF5X3NhdmUsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vfb2JfcG9vbCwgcG9vbCkpID09IE5VTEwpCisg ICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7CisgICAgfQorICBl bHNlCisgICAgeworICAgICAgaWYgKHJlc3VsdCAhPSBQeV9Ob25lKQorICAgICAgICB7CisgICAg ICAgICAgc3ZuX2F1dGhfY3JlZF9zaW1wbGVfdCAqdG1wX2NyZWRzID0gTlVMTDsKKyAgICAgICAg ICBpZiAoc3ZuX3N3aWdfQ29udmVydFB0clN0cmluZyhyZXN1bHQsICh2b2lkICoqKSZ0bXBfY3Jl ZHMsCisgICAgICAgICAgICAgICAgInN2bl9hdXRoX2NyZWRfc2ltcGxlX3QgKiIpKQorICAgICAg ICAgICAgeworICAgICAgICAgICAgICBlcnIgPSB0eXBlX2NvbnZlcnNpb25fZXJyb3IoInN2bl9h dXRoX2NyZWRfc2ltcGxlX3QgKiIpOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAg ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY3JlZHMgPSBhcHJfcGNhbGxvYyhwb29sLCBzaXpl b2YgKCpjcmVkcykpOworICAgICAgICAgICAgICBjcmVkcy0+dXNlcm5hbWUgPSB0bXBfY3JlZHMt PnVzZXJuYW1lID8gXAorICAgICAgICAgICAgICAgIGFwcl9wc3RyZHVwKHBvb2wsIHRtcF9jcmVk cy0+dXNlcm5hbWUpIDogTlVMTDsKKyAgICAgICAgICAgICAgY3JlZHMtPnBhc3N3b3JkID0gdG1w X2NyZWRzLT5wYXNzd29yZCA/IFwKKyAgICAgICAgICAgICAgICBhcHJfcHN0cmR1cChwb29sLCB0 bXBfY3JlZHMtPnBhc3N3b3JkKSA6IE5VTEw7CisgICAgICAgICAgICAgIGNyZWRzLT5tYXlfc2F2 ZSA9IHRtcF9jcmVkcy0+bWF5X3NhdmU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg IFB5X0RFQ1JFRihyZXN1bHQpOworICAgIH0KKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2Nr KCk7CisgICpjcmVkID0gY3JlZHM7CisgIHJldHVybiBlcnI7Cit9CisKK3N2bl9lcnJvcl90ICoK K3N2bl9zd2lnX3B5X2F1dGhfdXNlcm5hbWVfcHJvbXB0X2Z1bmMgKHN2bl9hdXRoX2NyZWRfdXNl cm5hbWVfdCAqKmNyZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2 b2lkICpiYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IGNoYXIgKnJlYWxtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Zu X2Jvb2xlYW5fdCBtYXlfc2F2ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGFwcl9wb29sX3QgKnBvb2wpCit7CisgIFB5T2JqZWN0ICpmdW5jdGlvbiA9IGJhdG9uOwor ICBQeU9iamVjdCAqcmVzdWx0OworICBzdm5fYXV0aF9jcmVkX3VzZXJuYW1lX3QgKmNyZWRzID0g TlVMTDsKKyAgc3ZuX2Vycm9yX3QgKmVyciA9IFNWTl9OT19FUlJPUjsKKworICBpZiAoKGZ1bmN0 aW9uID09IE5VTEwpIHx8IChmdW5jdGlvbiA9PSBQeV9Ob25lKSkKKyAgICByZXR1cm4gU1ZOX05P X0VSUk9SOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisgIGlmICgocmVz dWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGZ1bmN0aW9uLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJzbE8mIiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcmVhbG0sIG1heV9zYXZlLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBtYWtlX29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQorICAgIHsKKyAg ICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgIH0KKyAgZWxzZQorICAg IHsKKyAgICAgIGlmIChyZXN1bHQgIT0gUHlfTm9uZSkKKyAgICAgICAgeworICAgICAgICAgIHN2 bl9hdXRoX2NyZWRfdXNlcm5hbWVfdCAqdG1wX2NyZWRzID0gTlVMTDsKKyAgICAgICAgICBpZiAo c3ZuX3N3aWdfQ29udmVydFB0clN0cmluZyhyZXN1bHQsICh2b2lkICoqKSZ0bXBfY3JlZHMsCisg ICAgICAgICAgICAgICAgInN2bl9hdXRoX2NyZWRfdXNlcm5hbWVfdCAqIikpCisgICAgICAgICAg ICB7CisgICAgICAgICAgICAgIGVyciA9IHR5cGVfY29udmVyc2lvbl9lcnJvcigic3ZuX2F1dGhf Y3JlZF91c2VybmFtZV90ICoiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAg ICAgICAgICB7CisgICAgICAgICAgICAgIGNyZWRzID0gYXByX3BjYWxsb2MocG9vbCwgc2l6ZW9m ICgqY3JlZHMpKTsKKyAgICAgICAgICAgICAgY3JlZHMtPnVzZXJuYW1lID0gdG1wX2NyZWRzLT51 c2VybmFtZSA/IFwKKyAgICAgICAgICAgICAgICBhcHJfcHN0cmR1cChwb29sLCB0bXBfY3JlZHMt PnVzZXJuYW1lKSA6IE5VTEw7CisgICAgICAgICAgICAgIGNyZWRzLT5tYXlfc2F2ZSA9IHRtcF9j cmVkcy0+bWF5X3NhdmU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIFB5X0RFQ1JF RihyZXN1bHQpOworICAgIH0KKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7CisgICpj cmVkID0gY3JlZHM7CisgIHJldHVybiBlcnI7Cit9CisKKworc3ZuX2Vycm9yX3QgKgorc3ZuX3N3 aWdfcHlfYXV0aF9zc2xfc2VydmVyX3RydXN0X3Byb21wdF9mdW5jKAorICAgIHN2bl9hdXRoX2Ny ZWRfc3NsX3NlcnZlcl90cnVzdF90ICoqY3JlZCwKKyAgICB2b2lkICpiYXRvbiwKKyAgICBjb25z dCBjaGFyICpyZWFsbSwKKyAgICBhcHJfdWludDMyX3QgZmFpbHVyZXMsCisgICAgY29uc3Qgc3Zu X2F1dGhfc3NsX3NlcnZlcl9jZXJ0X2luZm9fdCAqY2VydF9pbmZvLAorICAgIHN2bl9ib29sZWFu X3QgbWF5X3NhdmUsCisgICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgUHlPYmplY3QgKmZ1bmN0 aW9uID0gYmF0b247CisgIFB5T2JqZWN0ICpyZXN1bHQ7CisgIHN2bl9hdXRoX2NyZWRfc3NsX3Nl cnZlcl90cnVzdF90ICpjcmVkcyA9IE5VTEw7CisgIHN2bl9lcnJvcl90ICplcnIgPSBTVk5fTk9f RVJST1I7CisKKyAgaWYgKChmdW5jdGlvbiA9PSBOVUxMKSB8fCAoZnVuY3Rpb24gPT0gUHlfTm9u ZSkpCisgICAgcmV0dXJuIFNWTl9OT19FUlJPUjsKKworICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5 X2xvY2soKTsKKworICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihmdW5jdGlv biwgKGNoYXIgKikic2xPJmxPJiIsCisgICAgICAgICAgICAgICAgICByZWFsbSwgZmFpbHVyZXMs IG1ha2Vfb2JfYXV0aF9zc2xfc2VydmVyX2NlcnRfaW5mbywKKyAgICAgICAgICAgICAgICAgIGNl cnRfaW5mbywgbWF5X3NhdmUsIG1ha2Vfb2JfcG9vbCwgcG9vbCkpID09IE5VTEwpCisgICAgewor ICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7CisgICAgfQorICBlbHNlCisg ICAgeworICAgICAgaWYgKHJlc3VsdCAhPSBQeV9Ob25lKQorICAgICAgICB7CisgICAgICAgICAg c3ZuX2F1dGhfY3JlZF9zc2xfc2VydmVyX3RydXN0X3QgKnRtcF9jcmVkcyA9IE5VTEw7CisgICAg ICAgICAgaWYgKHN2bl9zd2lnX0NvbnZlcnRQdHJTdHJpbmcKKyAgICAgICAgICAgICAgKHJlc3Vs dCwgKHZvaWQgKiopJnRtcF9jcmVkcywKKyAgICAgICAgICAgICAgICJzdm5fYXV0aF9jcmVkX3Nz bF9zZXJ2ZXJfdHJ1c3RfdCAqIikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGVyciA9 IHR5cGVfY29udmVyc2lvbl9lcnJvcgorICAgICAgICAgICAgICAgICgic3ZuX2F1dGhfY3JlZF9z c2xfc2VydmVyX3RydXN0X3QgKiIpOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAg ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY3JlZHMgPSBhcHJfcGNhbGxvYyhwb29sLCBzaXpl b2YgKCpjcmVkcykpOworICAgICAgICAgICAgICAqY3JlZHMgPSAqdG1wX2NyZWRzOworICAgICAg ICAgICAgfQorICAgICAgICB9CisgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICB9CisKKyAg c3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7CisgICpjcmVkID0gY3JlZHM7CisgIHJldHVy biBlcnI7Cit9CisKK3N2bl9lcnJvcl90ICoKK3N2bl9zd2lnX3B5X2F1dGhfc3NsX2NsaWVudF9j ZXJ0X3Byb21wdF9mdW5jKAorICAgIHN2bl9hdXRoX2NyZWRfc3NsX2NsaWVudF9jZXJ0X3QgKipj cmVkLAorICAgIHZvaWQgKmJhdG9uLAorICAgIGNvbnN0IGNoYXIgKnJlYWxtLAorICAgIHN2bl9i b29sZWFuX3QgbWF5X3NhdmUsCisgICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgUHlPYmplY3Qg KmZ1bmN0aW9uID0gYmF0b247CisgIFB5T2JqZWN0ICpyZXN1bHQ7CisgIHN2bl9hdXRoX2NyZWRf c3NsX2NsaWVudF9jZXJ0X3QgKmNyZWRzID0gTlVMTDsKKyAgc3ZuX2Vycm9yX3QgKmVyciA9IFNW Tl9OT19FUlJPUjsKKworICBpZiAoKGZ1bmN0aW9uID09IE5VTEwpIHx8IChmdW5jdGlvbiA9PSBQ eV9Ob25lKSkKKyAgICByZXR1cm4gU1ZOX05PX0VSUk9SOworCisgIHN2bl9zd2lnX3B5X2FjcXVp cmVfcHlfbG9jaygpOworCisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGZ1 bmN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJz bE8mIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhbG0sIG1heV9z YXZlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX29iX3Bvb2ws IHBvb2wpKSA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9l cnJvcigpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGlmIChyZXN1bHQgIT0gUHlfTm9u ZSkKKyAgICAgICAgeworICAgICAgICAgIHN2bl9hdXRoX2NyZWRfc3NsX2NsaWVudF9jZXJ0X3Qg KnRtcF9jcmVkcyA9IE5VTEw7CisgICAgICAgICAgaWYgKHN2bl9zd2lnX0NvbnZlcnRQdHJTdHJp bmcKKyAgICAgICAgICAgICAgKHJlc3VsdCwgKHZvaWQgKiopJnRtcF9jcmVkcywKKyAgICAgICAg ICAgICAgICJzdm5fYXV0aF9jcmVkX3NzbF9jbGllbnRfY2VydF90ICoiKSkKKyAgICAgICAgICAg IHsKKyAgICAgICAgICAgICAgZXJyID0gdHlwZV9jb252ZXJzaW9uX2Vycm9yKCJzdm5fYXV0aF9j cmVkX3NzbF9jbGllbnRfY2VydF90ICoiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNl CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNyZWRzID0gYXByX3BjYWxsb2MocG9vbCwg c2l6ZW9mICgqY3JlZHMpKTsKKyAgICAgICAgICAgICAgY3JlZHMtPmNlcnRfZmlsZSA9IHRtcF9j cmVkcy0+Y2VydF9maWxlID8gXAorICAgICAgICAgICAgICAgIGFwcl9wc3RyZHVwKHBvb2wsIHRt cF9jcmVkcy0+Y2VydF9maWxlKSA6IE5VTEw7CisgICAgICAgICAgICAgIGNyZWRzLT5tYXlfc2F2 ZSA9IHRtcF9jcmVkcy0+bWF5X3NhdmU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg IFB5X0RFQ1JFRihyZXN1bHQpOworICAgIH0KKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2Nr KCk7CisgICpjcmVkID0gY3JlZHM7CisgIHJldHVybiBlcnI7Cit9CisKK3N2bl9lcnJvcl90ICoK K3N2bl9zd2lnX3B5X2F1dGhfc3NsX2NsaWVudF9jZXJ0X3B3X3Byb21wdF9mdW5jKAorICAgIHN2 bl9hdXRoX2NyZWRfc3NsX2NsaWVudF9jZXJ0X3B3X3QgKipjcmVkLAorICAgIHZvaWQgKmJhdG9u LAorICAgIGNvbnN0IGNoYXIgKnJlYWxtLAorICAgIHN2bl9ib29sZWFuX3QgbWF5X3NhdmUsCisg ICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgUHlPYmplY3QgKmZ1bmN0aW9uID0gYmF0b247Cisg IFB5T2JqZWN0ICpyZXN1bHQ7CisgIHN2bl9hdXRoX2NyZWRfc3NsX2NsaWVudF9jZXJ0X3B3X3Qg KmNyZWRzID0gTlVMTDsKKyAgc3ZuX2Vycm9yX3QgKmVyciA9IFNWTl9OT19FUlJPUjsKKworICBp ZiAoKGZ1bmN0aW9uID09IE5VTEwpIHx8IChmdW5jdGlvbiA9PSBQeV9Ob25lKSkKKyAgICByZXR1 cm4gU1ZOX05PX0VSUk9SOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisg IGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGZ1bmN0aW9uLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJzbE8mIiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhbG0sIG1heV9zYXZlLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQor ICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgIH0KKyAg ZWxzZQorICAgIHsKKyAgICAgIGlmIChyZXN1bHQgIT0gUHlfTm9uZSkKKyAgICAgICAgeworICAg ICAgICAgIHN2bl9hdXRoX2NyZWRfc3NsX2NsaWVudF9jZXJ0X3B3X3QgKnRtcF9jcmVkcyA9IE5V TEw7CisgICAgICAgICAgaWYgKHN2bl9zd2lnX0NvbnZlcnRQdHJTdHJpbmcKKyAgICAgICAgICAg ICAgKHJlc3VsdCwgKHZvaWQgKiopJnRtcF9jcmVkcywKKyAgICAgICAgICAgICAgICJzdm5fYXV0 aF9jcmVkX3NzbF9jbGllbnRfY2VydF9wd190ICoiKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg ICAgICAgZXJyID0gdHlwZV9jb252ZXJzaW9uX2Vycm9yCisgICAgICAgICAgICAgICAgKCJzdm5f YXV0aF9jcmVkX3NzbF9jbGllbnRfY2VydF9wd190ICoiKTsKKyAgICAgICAgICAgIH0KKyAgICAg ICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNyZWRzID0gYXByX3BjYWxs b2MocG9vbCwgc2l6ZW9mICgqY3JlZHMpKTsKKyAgICAgICAgICAgICAgY3JlZHMtPnBhc3N3b3Jk ID0gdG1wX2NyZWRzLT5wYXNzd29yZCA/IFwKKyAgICAgICAgICAgICAgICBhcHJfcHN0cmR1cChw b29sLCB0bXBfY3JlZHMtPnBhc3N3b3JkKSA6IE5VTEw7CisgICAgICAgICAgICAgIGNyZWRzLT5t YXlfc2F2ZSA9IHRtcF9jcmVkcy0+bWF5X3NhdmU7CisgICAgICAgICAgICB9CisgICAgICAgIH0K KyAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgIH0KKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9w eV9sb2NrKCk7CisgICpjcmVkID0gY3JlZHM7CisgIHJldHVybiBlcnI7Cit9CisKK3ZvaWQKK3N2 bl9zd2lnX3B5X3NldHVwX3JhX2NhbGxiYWNrcyhzdm5fcmFfY2FsbGJhY2tzMl90ICoqY2FsbGJh Y2tzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKipiYXRvbiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqcHlfY2FsbGJhY2tzLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpCit7CisgIHN2bl9lcnJv cl90ICplcnIgPSBzdm5fcmFfY3JlYXRlX2NhbGxiYWNrcyhjYWxsYmFja3MsIHBvb2wpOworCisg IGlmIChlcnIpCisgICAgeworICAgICAgc3ZuX3N3aWdfcHlfc3ZuX2V4Y2VwdGlvbihlcnIpOwor ICAgICAgcmV0dXJuOworICAgIH0KKworICAqYmF0b24gPSBweV9jYWxsYmFja3M7Cit9CisKK3N2 bl9lcnJvcl90ICpzdm5fc3dpZ19weV9jb21taXRfY2FsbGJhY2syKGNvbnN0IHN2bl9jb21taXRf aW5mb190ICpjb21taXRfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHZvaWQgKmJhdG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgUHlPYmplY3QgKnJlY2VpdmVyID0gYmF0b247 CisgIFB5T2JqZWN0ICpyZXN1bHQ7CisgIHN2bl9lcnJvcl90ICplcnIgPSBTVk5fTk9fRVJST1I7 CisKKyAgaWYgKChyZWNlaXZlciA9PSBOVUxMKSB8fCAocmVjZWl2ZXIgPT0gUHlfTm9uZSkpCisg ICAgcmV0dXJuIFNWTl9OT19FUlJPUjsKKworICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xvY2so KTsKKworICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihyZWNlaXZlciwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikiTyZPJiIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vfb2JfY29tbWl0X2luZm8sIGNv bW1pdF9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX29i X3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2Vw dGlvbl9lcnJvcigpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGlmIChyZXN1bHQgIT0g UHlfTm9uZSkKKyAgICAgICAgZXJyID0gY2FsbGJhY2tfYmFkX3JldHVybl9lcnJvcigiTm90IE5v bmUiKTsKKyAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgIH0KKworICBzdm5fc3dpZ19weV9y ZWxlYXNlX3B5X2xvY2soKTsKKworICByZXR1cm4gZXJyOworfQorCitzdm5fZXJyb3JfdCAqc3Zu X3N3aWdfcHlfY29tbWl0X2NhbGxiYWNrKHN2bl9yZXZudW1fdCBuZXdfcmV2aXNpb24sCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRhdGUsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmF1dGhv ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYmF0b24p Cit7CisgIFB5T2JqZWN0ICpyZWNlaXZlciA9IGJhdG9uOworICBQeU9iamVjdCAqcmVzdWx0Owor ICBzdm5fZXJyb3JfdCAqZXJyID0gU1ZOX05PX0VSUk9SOworCisgIGlmICgocmVjZWl2ZXIgPT0g TlVMTCkgfHwgKHJlY2VpdmVyID09IFB5X05vbmUpKQorICAgIHJldHVybiBTVk5fTk9fRVJST1I7 CisKKyAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7CisKKyAgaWYgKChyZXN1bHQgPSBQ eU9iamVjdF9DYWxsRnVuY3Rpb24ocmVjZWl2ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChjaGFyICopImxzcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIG5ld19yZXZpc2lvbiwgZGF0ZSwgYXV0aG9yKSkgPT0gTlVMTCkKKyAgICB7Cisg ICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICB9CisgIGVsc2UKKyAg ICB7CisgICAgICBpZiAocmVzdWx0ICE9IFB5X05vbmUpCisgICAgICAgIGVyciA9IGNhbGxiYWNr X2JhZF9yZXR1cm5fZXJyb3IoIk5vdCBOb25lIik7CisgICAgICBQeV9ERUNSRUYocmVzdWx0KTsK KyAgICB9CisKKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7CisKKyAgcmV0dXJuIGVy cjsKK30KKworc3ZuX2Vycm9yX3QgKnN2bl9zd2lnX3B5X3JhX2ZpbGVfcmV2X2hhbmRsZXJfZnVu YygKKyAgICAgICAgICAgICAgICAgICAgdm9pZCAqYmF0b24sCisgICAgICAgICAgICAgICAgICAg IGNvbnN0IGNoYXIgKnBhdGgsCisgICAgICAgICAgICAgICAgICAgIHN2bl9yZXZudW1fdCByZXYs CisgICAgICAgICAgICAgICAgICAgIGFwcl9oYXNoX3QgKnJldl9wcm9wcywKKyAgICAgICAgICAg ICAgICAgICAgc3ZuX3R4ZGVsdGFfd2luZG93X2hhbmRsZXJfdCAqZGVsdGFfaGFuZGxlciwKKyAg ICAgICAgICAgICAgICAgICAgdm9pZCAqKmRlbHRhX2JhdG9uLAorICAgICAgICAgICAgICAgICAg ICBhcHJfYXJyYXlfaGVhZGVyX3QgKnByb3BfZGlmZnMsCisgICAgICAgICAgICAgICAgICAgIGFw cl9wb29sX3QgKnBvb2wpCit7CisgIFB5T2JqZWN0ICpoYW5kbGVyID0gYmF0b247CisgIFB5T2Jq ZWN0ICpyZXN1bHQsICpweV9yZXZfcHJvcHMgPSBOVUxMLCAqcHlfcHJvcF9kaWZmcyA9IE5VTEw7 CisgIHN2bl9lcnJvcl90ICplcnIgPSBTVk5fTk9fRVJST1I7CisKKyAgaWYgKChoYW5kbGVyID09 IE5VTEwpIHx8IChoYW5kbGVyID09IFB5X05vbmUpKQorICAgIHJldHVybiBTVk5fTk9fRVJST1I7 CisKKyAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7CisKKyAgcHlfcmV2X3Byb3BzID0g c3ZuX3N3aWdfcHlfcHJvcGhhc2hfdG9fZGljdChyZXZfcHJvcHMpOworICBpZiAocHlfcmV2X3By b3BzID09IE5VTEwpCisgICAgeworICAgICAgZXJyID0gdHlwZV9jb252ZXJzaW9uX2Vycm9yKCJh cHJfaGFzaF90ICoiKTsKKyAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgIHB5X3Byb3BfZGlm ZnMgPSBwcm9wYXJyYXlfdG9fZGljdChwcm9wX2RpZmZzKTsKKworICBpZiAocHlfcHJvcF9kaWZm cyA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVyciA9IHR5cGVfY29udmVyc2lvbl9lcnJvcigiYXBy X2FycmF5X2hlYWRlcl90ICoiKTsKKyAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgIGlmICgo cmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGhhbmRsZXIsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopInNsT09PJiIsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHBhdGgsIHJldiwgcHlfcmV2X3Byb3BzLCBweV9wcm9wX2Rp ZmZzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX29iX3Bvb2ws IHBvb2wpKSA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9l cnJvcigpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGlmIChyZXN1bHQgIT0gUHlfTm9u ZSkKKyAgICAgICAgZXJyID0gY2FsbGJhY2tfYmFkX3JldHVybl9lcnJvcigiTm90IE5vbmUiKTsK KworICAgICAgLyogRklYTUU6IFN1cHBvcnQgcmV0dXJuZWQgVHhEZWx0YVdpbmRvdyBvYmplY3Qg YW5kCisgICAgICAgKiBzZXQgZGVsdGFfaGFuZGxlciBhbmQgZGVsdGFfYmF0b24gKi8KKyAgICAg ICpkZWx0YV9oYW5kbGVyID0gTlVMTDsKKyAgICAgICpkZWx0YV9iYXRvbiA9IE5VTEw7CisKKyAg ICAgIFB5X1hERUNSRUYocmVzdWx0KTsKKyAgICB9CisKK2Vycm9yOgorCisgIFB5X1hERUNSRUYo cHlfcmV2X3Byb3BzKTsKKyAgUHlfWERFQ1JFRihweV9wcm9wX2RpZmZzKTsKKworICBzdm5fc3dp Z19weV9yZWxlYXNlX3B5X2xvY2soKTsKKworICByZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3Zu X2Vycm9yX3QgKnJlcG9ydGVyX3NldF9wYXRoKHZvaWQgKnJlcG9ydF9iYXRvbiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdGgsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICBzdm5fcmV2bnVtX3QgcmV2aXNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAg ICBzdm5fYm9vbGVhbl90IHN0YXJ0X2VtcHR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgY2hhciAqbG9ja190b2tlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9w b29sX3QgKnBvb2wpCit7CisgIHN2bl9lcnJvcl90ICplcnIgPSBTVk5fTk9fRVJST1I7CisgIFB5 T2JqZWN0ICpweV9yZXBvcnRlciA9IHJlcG9ydF9iYXRvbiwgKnJlc3VsdDsKKworICBpZiAocHlf cmVwb3J0ZXIgPT0gTlVMTCB8fCBweV9yZXBvcnRlciA9PSBQeV9Ob25lKQorICAgIHJldHVybiBT Vk5fTk9fRVJST1I7CisKKyAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7CisKKyAgaWYg KChyZXN1bHQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKHB5X3JlcG9ydGVyLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikic2V0X3BhdGgiLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikic2xic08mIiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHBhdGgsIHJldmlzaW9uLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3RhcnRfZW1wdHksIGxvY2tfdG9rZW4sCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBtYWtlX29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQorICAg IHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgIH0KKyAgZWxz ZSBpZiAocmVzdWx0ICE9IFB5X05vbmUpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfYmFk X3JldHVybl9lcnJvcigiTm90IE5vbmUiKTsKKyAgICB9CisKKyAgUHlfWERFQ1JFRihyZXN1bHQp OworCisgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOworCisgIHJldHVybiBlcnI7Cit9 CisKK3N0YXRpYyBzdm5fZXJyb3JfdCAqcmVwb3J0ZXJfZGVsZXRlX3BhdGgodm9pZCAqcmVwb3J0 X2JhdG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdGgsCisgICAg ICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKQoreworICBzdm5fZXJyb3JfdCAq ZXJyID0gU1ZOX05PX0VSUk9SOworICBQeU9iamVjdCAqcHlfcmVwb3J0ZXIgPSByZXBvcnRfYmF0 b24sICpyZXN1bHQ7CisKKyAgaWYgKHB5X3JlcG9ydGVyID09IE5VTEwgfHwgcHlfcmVwb3J0ZXIg PT0gUHlfTm9uZSkKKyAgICByZXR1cm4gU1ZOX05PX0VSUk9SOworCisgIHN2bl9zd2lnX3B5X2Fj cXVpcmVfcHlfbG9jaygpOworCisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChw eV9yZXBvcnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICop ImRlbGV0ZV9wYXRoIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFy ICopInNPJiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLCAKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vfb2JfcG9vbCwgcG9vbCkpID09 IE5VTEwpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7Cisg ICAgfQorICBlbHNlIGlmIChyZXN1bHQgIT0gUHlfTm9uZSkKKyAgICB7CisgICAgICBlcnIgPSBj YWxsYmFja19iYWRfcmV0dXJuX2Vycm9yKCJOb3QgTm9uZSIpOworICAgIH0KKworICBQeV9YREVD UkVGKHJlc3VsdCk7CisKKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7CisKKyAgcmV0 dXJuIGVycjsKK30KKyAgICAKK3N0YXRpYyBzdm5fZXJyb3JfdCAqcmVwb3J0ZXJfbGlua19wYXRo KHZvaWQgKnJlcG9ydF9iYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj aGFyICpwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnVybCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdm5fcmV2bnVtX3QgcmV2aXNpb24sCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX2Jvb2xlYW5fdCBzdGFydF9lbXB0eSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpsb2NrX3Rva2VuLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpCit7CisgIHN2bl9lcnJvcl90ICpl cnIgPSBTVk5fTk9fRVJST1I7CisgIFB5T2JqZWN0ICpweV9yZXBvcnRlciA9IHJlcG9ydF9iYXRv biwgKnJlc3VsdDsKKworICBpZiAocHlfcmVwb3J0ZXIgPT0gTlVMTCB8fCBweV9yZXBvcnRlciA9 PSBQeV9Ob25lKQorICAgIHJldHVybiBTVk5fTk9fRVJST1I7CisKKyAgc3ZuX3N3aWdfcHlfYWNx dWlyZV9weV9sb2NrKCk7CisKKyAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKHB5 X3JlcG9ydGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKiki bGlua19wYXRoIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICop InNzbGJzTyYiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCwgdXJs LCByZXZpc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2Vt cHR5LCBsb2NrX3Rva2VuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFr ZV9vYl9wb29sLCBwb29sKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFja19l eGNlcHRpb25fZXJyb3IoKTsKKyAgICB9CisgIGVsc2UgaWYgKHJlc3VsdCAhPSBQeV9Ob25lKQor ICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2JhZF9yZXR1cm5fZXJyb3IoIk5vdCBOb25lIik7 CisgICAgfQorCisgIFB5X1hERUNSRUYocmVzdWx0KTsKKworICBzdm5fc3dpZ19weV9yZWxlYXNl X3B5X2xvY2soKTsKKworICByZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3ZuX2Vycm9yX3QgKnJl cG9ydGVyX2ZpbmlzaF9yZXBvcnQodm9pZCAqcmVwb3J0X2JhdG9uLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKQoreworICBzdm5fZXJyb3JfdCAqZXJy ID0gU1ZOX05PX0VSUk9SOworCisgIFB5T2JqZWN0ICpweV9yZXBvcnRlciA9IHJlcG9ydF9iYXRv biwgKnJlc3VsdDsKKworICBpZiAocHlfcmVwb3J0ZXIgPT0gTlVMTCB8fCBweV9yZXBvcnRlciA9 PSBQeV9Ob25lKQorICAgIHJldHVybiBTVk5fTk9fRVJST1I7CisKKyAgc3ZuX3N3aWdfcHlfYWNx dWlyZV9weV9sb2NrKCk7CisKKyAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKHB5 X3JlcG9ydGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKiki ZmluaXNoX3JlcG9ydCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hh ciAqKSJPJiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX29iX3Bv b2wsIHBvb2wpKSA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlv bl9lcnJvcigpOworICAgIH0KKyAgZWxzZSBpZiAocmVzdWx0ICE9IFB5X05vbmUpCisgICAgewor ICAgICAgZXJyID0gY2FsbGJhY2tfYmFkX3JldHVybl9lcnJvcigiTm90IE5vbmUiKTsKKyAgICB9 CisKKyAgUHlfWERFQ1JFRihyZXN1bHQpOworCisgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9j aygpOworCisgIHJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzdm5fZXJyb3JfdCAqcmVwb3J0ZXJf YWJvcnRfcmVwb3J0KHZvaWQgKnJlcG9ydF9iYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBhcHJfcG9vbF90ICpwb29sKQoreworICBzdm5fZXJyb3JfdCAqZXJyID0gU1ZOX05P X0VSUk9SOworCisgIFB5T2JqZWN0ICpweV9yZXBvcnRlciA9IHJlcG9ydF9iYXRvbiwgKnJlc3Vs dDsKKworICBpZiAocHlfcmVwb3J0ZXIgPT0gTlVMTCB8fCBweV9yZXBvcnRlciA9PSBQeV9Ob25l KQorICAgIHJldHVybiBTVk5fTk9fRVJST1I7CisKKyAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9s b2NrKCk7CisKKyAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKHB5X3JlcG9ydGVy LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikiYWJvcnRfcmVw b3J0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopIk8mIiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vfb2JfcG9vbCwgcG9vbCkp ID09IE5VTEwpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7 CisgICAgfQorICBlbHNlIGlmIChyZXN1bHQgIT0gUHlfTm9uZSkKKyAgICB7CisgICAgICBlcnIg PSBjYWxsYmFja19iYWRfcmV0dXJuX2Vycm9yKCJOb3QgTm9uZSIpOworICAgIH0KKworICBQeV9Y REVDUkVGKHJlc3VsdCk7CisKKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7CisKKyAg cmV0dXJuIGVycjsKK30KKworY29uc3Qgc3ZuX3JhX3JlcG9ydGVyMl90IHN3aWdfcHlfcmFfcmVw b3J0ZXIyID0geworICAgIHJlcG9ydGVyX3NldF9wYXRoLAorICAgIHJlcG9ydGVyX2RlbGV0ZV9w YXRoLAorICAgIHJlcG9ydGVyX2xpbmtfcGF0aCwKKyAgICByZXBvcnRlcl9maW5pc2hfcmVwb3J0 LAorICAgIHJlcG9ydGVyX2Fib3J0X3JlcG9ydAorfTsKZGlmZiAtTnVyIHN1YnZlcnNpb24tMS4z LjEvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3B5dGhvbi9saWJzdm5fc3dpZ19weS9zd2lndXRp bF9weS5oIHN1YnZlcnNpb24tMS4zLjEubmV3L3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRo b24vbGlic3ZuX3N3aWdfcHkvc3dpZ3V0aWxfcHkuaAotLS0gc3VidmVyc2lvbi0xLjMuMS9zdWJ2 ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcHl0aG9uL2xpYnN2bl9zd2lnX3B5L3N3aWd1dGlsX3B5LmgJ MjAwNS0xMC0yMCAyMzoxNzoxOS4wMDAwMDAwMDAgKzAxMDAKKysrIHN1YnZlcnNpb24tMS4zLjEu bmV3L3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vbGlic3ZuX3N3aWdfcHkvc3dpZ3V0 aWxfcHkuaAkyMDA2LTA3LTA0IDEzOjI2OjQ5LjAwMDAwMDAwMCArMDEwMApAQCAtNzksNiArNzks OSBAQAogU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JUCiB2b2lkIHN2bl9zd2lnX2dldF9hcHBsaWNh dGlvbl9wb29sKFB5T2JqZWN0ICoqcHlfcG9vbCwgYXByX3Bvb2xfdCAqKnBvb2wpOwogCisvKiBT ZXQgYSBQeXRob24gJ293bmVkJyByZWZlcmVuY2Ugb24gdGhlIHBvb2wgb2YgdGhlIGdpdmVuIHBy b3h5IG9iamVjdCAqLworaW50IHN2bl9zd2lnX3B5X3Bvb2xfc2V0X293bmVkX3JlZihQeU9iamVj dCAqcHJveHksIFB5T2JqZWN0ICpvbGRSZWYsIFB5T2JqZWN0ICpuZXdSZWYpOworCiAMCiAvKioq IFNXSUcgV3JhcHBlcnMgKioqLwogCkBAIC0xOTgsNiArMjAxLDExIEBACiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHN2bl93Y19ub3RpZnlfc3RhdGVfdCBwcm9wX3N0YXRlLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzdm5fcmV2bnVtX3QgcmV2aXNpb24pOwogCitTVk5fU1dJ R19TV0lHVVRJTF9FWFBPUlQKK3ZvaWQgc3ZuX3N3aWdfcHlfbm90aWZ5X2Z1bmMyKHZvaWQgKmJh dG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3ZuX3djX25vdGlmeV90 ICpub3RpZnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29s KTsKKwogLyogYSBzdGF0dXMgZnVuY3Rpb24gdGhhdCBleGVjdXRlcyBhIFB5dGhvbiBmdW5jdGlv biB0aGF0IGlzIHBhc3NlZCBpbgogICAgdmlhIHRoZSBiYXRvbiBhcmd1bWVudCAqLwogU1ZOX1NX SUdfU1dJR1VUSUxfRVhQT1JUCkBAIC0yNDksNiArMjU3LDEzIEBACiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm1zZywKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCk7CiAKKy8qIHRodW5rZWQgaW5m byByZWNlaXZlciBmdW5jdGlvbiAqLworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JUCitzdm5fZXJy b3JfdCAqc3ZuX3N3aWdfcHlfaW5mb19yZWNlaXZlcl9mdW5jKHZvaWQgKnB5X3JlY2VpdmVyLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpw YXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBz dm5faW5mb190ICppbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBhcHJfcG9vbF90ICpwb29sKTsKKwogLyogdGh1bmtlZCBibGFtZSByZWNlaXZlciBmdW5j dGlvbiAqLwogU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JUCiBzdm5fZXJyb3JfdCAqc3ZuX3N3aWdf cHlfY2xpZW50X2JsYW1lX3JlY2VpdmVyX2Z1bmModm9pZCAqYmF0b24sCkBAIC0zMDMsNiArMzE4 LDQ1IEBACiAgICAgc3ZuX2Jvb2xlYW5fdCBtYXlfc2F2ZSwKICAgICBhcHJfcG9vbF90ICpwb29s KTsKIAorU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JUCit2b2lkCitzdm5fc3dpZ19weV9zZXR1cF9y YV9jYWxsYmFja3Moc3ZuX3JhX2NhbGxiYWNrczJfdCAqKmNhbGxiYWNrcywKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB2b2lkICoqYmF0b24sCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUHlPYmplY3QgKnB5X2NhbGxiYWNrcywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBhcHJfcG9vbF90ICpwb29sKTsKK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAorc3Zu X2Vycm9yX3QgKnN2bl9zd2lnX3B5X2NvbW1pdF9jYWxsYmFjazIoY29uc3Qgc3ZuX2NvbW1pdF9p bmZvX3QgKmNvbW1pdF9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdm9pZCAqYmF0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBhcHJfcG9vbF90ICpwb29sKTsKKworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JUCitzdm5f ZXJyb3JfdCAqc3ZuX3N3aWdfcHlfY29tbWl0X2NhbGxiYWNrKHN2bl9yZXZudW1fdCBuZXdfcmV2 aXNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo YXIgKmRhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IGNoYXIgKmF1dGhvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dm9pZCAqYmF0b24pOworCisKK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAorc3ZuX2Vycm9yX3Qg KnN2bl9zd2lnX3B5X3JhX2ZpbGVfcmV2X2hhbmRsZXJfZnVuYygKKyAgICAgICAgICAgICAgICAg ICAgdm9pZCAqYmF0b24sCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdGgsCisg ICAgICAgICAgICAgICAgICAgIHN2bl9yZXZudW1fdCByZXYsCisgICAgICAgICAgICAgICAgICAg IGFwcl9oYXNoX3QgKnJldl9wcm9wcywKKyAgICAgICAgICAgICAgICAgICAgc3ZuX3R4ZGVsdGFf d2luZG93X2hhbmRsZXJfdCAqZGVsdGFfaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgdm9p ZCAqKmRlbHRhX2JhdG9uLAorICAgICAgICAgICAgICAgICAgICBhcHJfYXJyYXlfaGVhZGVyX3Qg KnByb3BfZGlmZnMsCisgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpOworCitT Vk5fU1dJR19TV0lHVVRJTF9FWFBPUlQKK2V4dGVybiBjb25zdCBzdm5fcmFfcmVwb3J0ZXIyX3Qg c3dpZ19weV9yYV9yZXBvcnRlcjI7CisKK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAordm9pZAor c3ZuX3N3aWdfcHlfc2V0dXBfcmFfY2FsbGJhY2tzKHN2bl9yYV9jYWxsYmFja3MyX3QgKipjYWxs YmFja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKmJhdG9uLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpweV9jYWxsYmFja3MsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCk7CisKICNpZmRlZiBf X2NwbHVzcGx1cwogfQogI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCmRpZmYgLU51ciBzdWJ2ZXJz aW9uLTEuMy4xL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vbGlic3ZuX3N3aWdfcHkv c3dpZ3V0aWxfcHkuaC5vcmlnIHN1YnZlcnNpb24tMS4zLjEubmV3L3N1YnZlcnNpb24vYmluZGlu Z3Mvc3dpZy9weXRob24vbGlic3ZuX3N3aWdfcHkvc3dpZ3V0aWxfcHkuaC5vcmlnCi0tLSBzdWJ2 ZXJzaW9uLTEuMy4xL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vbGlic3ZuX3N3aWdf cHkvc3dpZ3V0aWxfcHkuaC5vcmlnCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAw CisrKyBzdWJ2ZXJzaW9uLTEuMy4xLm5ldy9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcHl0aG9u L2xpYnN2bl9zd2lnX3B5L3N3aWd1dGlsX3B5Lmgub3JpZwkyMDA2LTA3LTA0IDEzOjI2OjA1LjAw MDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDM1NyBAQAorLyoKKyAqIHN3aWd1dGlsX3B5LmggOiAg dXRpbGl0eSBmdW5jdGlvbnMgYW5kIHN0dWZmIGZvciB0aGUgU1dJRyBQeXRob24gYmluZGluZ3MK KyAqCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMDQgQ29sbGFiTmV0 LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2Vk IGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBo YXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uICBUaGUgdGVybXMKKyAq IGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vc3VidmVyc2lvbi50aWdyaXMub3JnL2xpY2Vu c2UtMS5odG1sLgorICogSWYgbmV3ZXIgdmVyc2lvbnMgb2YgdGhpcyBsaWNlbnNlIGFyZSBwb3N0 ZWQgdGhlcmUsIHlvdSBtYXkgdXNlIGEKKyAqIG5ld2VyIHZlcnNpb24gaW5zdGVhZCwgYXQgeW91 ciBvcHRpb24uCisgKgorICogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29u dHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKKyAqIGluZGl2aWR1YWxzLiAgRm9yIGV4YWN0IGNvbnRy aWJ1dGlvbiBoaXN0b3J5LCBzZWUgdGhlIHJldmlzaW9uCisgKiBoaXN0b3J5IGFuZCBsb2dzLCBh dmFpbGFibGUgYXQgaHR0cDovL3N1YnZlcnNpb24udGlncmlzLm9yZy8uCisgKiA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQorICovCisKKworI2lmbmRlZiBTVk5fU1dJR19TV0lHVVRJTF9QWV9ICisjZGVmaW5lIFNWTl9T V0lHX1NXSUdVVElMX1BZX0gKKworI2luY2x1ZGUgPFB5dGhvbi5oPgorCisjaW5jbHVkZSA8YXBy Lmg+CisjaW5jbHVkZSA8YXByX3Bvb2xzLmg+CisjaW5jbHVkZSA8YXByX3N0cmluZ3MuaD4KKyNp bmNsdWRlIDxhcHJfaGFzaC5oPgorI2luY2x1ZGUgPGFwcl90YWJsZXMuaD4KKworI2luY2x1ZGUg InN2bl90eXBlcy5oIgorI2luY2x1ZGUgInN2bl9zdHJpbmcuaCIKKyNpbmNsdWRlICJzdm5fZGVs dGEuaCIKKyNpbmNsdWRlICJzdm5fY2xpZW50LmgiCisjaW5jbHVkZSAic3ZuX3JlcG9zLmgiCisK Ky8qIERlZmluZSBETEwgZXhwb3J0IG1hZ2ljIG9uIFdpbmRvd3MuICovCisjaWZkZWYgV0lOMzIK KyMgIGlmZGVmIFNWTl9TV0lHX1NXSUdVVElMX1BZX0MKKyMgICAgZGVmaW5lIFNWTl9TV0lHX1NX SUdVVElMX0VYUE9SVCBfX2RlY2xzcGVjKGRsbGV4cG9ydCkKKyMgIGVsc2UKKyMgICAgZGVmaW5l IFNWTl9TV0lHX1NXSUdVVElMX0VYUE9SVCBfX2RlY2xzcGVjKGRsbGltcG9ydCkKKyMgIGVuZGlm CisjZWxzZQorIyAgZGVmaW5lIFNWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAorI2VuZGlmCisKKyNp ZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8K KworDAorCisvKiBJbml0aWFsaXplIHRoZSBsaWJzdm5fc3dpZ19weSBsaWJyYXJ5LiAqLworU1ZO X1NXSUdfU1dJR1VUSUxfRVhQT1JUCithcHJfc3RhdHVzX3Qgc3ZuX3N3aWdfcHlfaW5pdGlhbGl6 ZSh2b2lkKTsKKworDAorCisvKiBGdW5jdGlvbnMgdG8gbWFuYWdlIHB5dGhvbidzIGdsb2JhbCBp bnRlcnByZXRlciBsb2NrICovCitTVk5fU1dJR19TV0lHVVRJTF9FWFBPUlQKK3ZvaWQgc3ZuX3N3 aWdfcHlfcmVsZWFzZV9weV9sb2NrKHZvaWQpOworCitTVk5fU1dJR19TV0lHVVRJTF9FWFBPUlQK K3ZvaWQgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKHZvaWQpOworCisMCisvKioqIEF1dG9t YXRpYyBQb29sIE1hbmFnZW1lbnQgRnVuY3Rpb25zICoqKi8KKworLyogU2V0IHRoZSBhcHBsaWNh dGlvbiBwb29sICovCitTVk5fU1dJR19TV0lHVVRJTF9FWFBPUlQKK3ZvaWQgc3ZuX3N3aWdfcHlf c2V0X2FwcGxpY2F0aW9uX3Bvb2woUHlPYmplY3QgKnB5X3Bvb2wsIGFwcl9wb29sX3QgKnBvb2wp OworCisvKiBDbGVhciB0aGUgYXBwbGljYXRpb24gcG9vbCAqLworU1ZOX1NXSUdfU1dJR1VUSUxf RVhQT1JUCit2b2lkIHN2bl9zd2lnX3B5X2NsZWFyX2FwcGxpY2F0aW9uX3Bvb2wodm9pZCk7CisK Ky8qIEdldCB0aGUgYXBwbGljYXRpb24gcG9vbCAqLworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JU Cit2b2lkIHN2bl9zd2lnX2dldF9hcHBsaWNhdGlvbl9wb29sKFB5T2JqZWN0ICoqcHlfcG9vbCwg YXByX3Bvb2xfdCAqKnBvb2wpOworCisvKiBTZXQgYSBQeXRob24gJ293bmVkJyByZWZlcmVuY2Ug b24gdGhlIHBvb2wgb2YgdGhlIGdpdmVuIHByb3h5IG9iamVjdCAqLworaW50IHN2bl9zd2lnX3B5 X3Bvb2xfc2V0X293bmVkX3JlZihQeU9iamVjdCAqcHJveHksIFB5T2JqZWN0ICpvbGRSZWYsIFB5 T2JqZWN0ICpuZXdSZWYpOworCisMCisvKioqIFNXSUcgV3JhcHBlcnMgKioqLworCisvKiBXcmFw cGVyIGZvciBTV0lHX05ld1BvaW50ZXJPYmogKi8KK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAor UHlPYmplY3QgKnN2bl9zd2lnX05ld1BvaW50ZXJPYmoodm9pZCAqb2JqLCBzd2lnX3R5cGVfaW5m byAqdHlwZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqcG9v bCk7CisKKy8qIFdyYXBwZXIgZm9yIFNXSUdfQ29udmVydFB0ciAqLworU1ZOX1NXSUdfU1dJR1VU SUxfRVhQT1JUCitpbnQgc3ZuX3N3aWdfQ29udmVydFB0cihQeU9iamVjdCAqaW5wdXQsIHZvaWQg KipvYmosIHN3aWdfdHlwZV9pbmZvICp0eXBlKTsKKworLyogV3JhcHBlciBmb3IgU1dJR19NdXN0 R2V0UHRyICovCitTVk5fU1dJR19TV0lHVVRJTF9FWFBPUlQKK3ZvaWQgKnN2bl9zd2lnX011c3RH ZXRQdHIodm9pZCAqaW5wdXQsIHN3aWdfdHlwZV9pbmZvICp0eXBlLCBpbnQgYXJnbnVtLAorICAg ICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqKnB5X3Bvb2wpOworDAorLyoqKiBGdW5j dGlvbnMgdG8gZXhwb3NlIGEgY3VzdG9tIFN1YnZlcnNpb25FeGNlcHRpb24gKioqLworCisvKiBy ZWdpc3RlciBhIG5ldyBzdWJ2ZXJzaW9uIGV4Y2VwdGlvbiBjbGFzcyAqLworU1ZOX1NXSUdfU1dJ R1VUSUxfRVhQT1JUCitQeU9iamVjdCAqc3ZuX3N3aWdfcHlfcmVnaXN0ZXJfZXhjZXB0aW9uKHZv aWQpOworCisvKiBnZXQgdGhlIG9iamVjdCB3aGljaCByZXByZXNlbnRzIHRoZSBzdWJ2ZXJzaW9u IGV4Y2VwdGlvbiBjbGFzcyAqLworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JUCitQeU9iamVjdCAq c3ZuX3N3aWdfcHlfZXhjZXB0aW9uX3R5cGUodm9pZCk7CisKKy8qIHJhaXNlIGEgc3VidmVyc2lv biBleGNlcHRpb24sIGNyZWF0ZWQgZnJvbSBhIG5vcm1hbCBzdWJ2ZXJzaW9uIGVycm9yICovCitT Vk5fU1dJR19TV0lHVVRJTF9FWFBPUlQKK3ZvaWQgc3ZuX3N3aWdfcHlfc3ZuX2V4Y2VwdGlvbihz dm5fZXJyb3JfdCAqZXJyKTsKKworCisMCisvKiBoZWxwZXIgZnVuY3Rpb24gdG8gY29udmVydCBh biBhcHJfaGFzaF90KiAoY2hhciogLT4gc3Zuc3RyaW5nX3QqKSB0bworICAgYSBQeXRob24gZGlj dCAqLworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JUCitQeU9iamVjdCAqc3ZuX3N3aWdfcHlfcHJv cGhhc2hfdG9fZGljdChhcHJfaGFzaF90ICpoYXNoKTsKKworLyogaGVscGVyIGZ1bmN0aW9uIHRv IGNvbnZlcnQgYW4gYXByX2hhc2hfdCogKHN2bl9yZXZudW1fdCogLT4gY29uc3QKKyAgIGNoYXIg KikgdG8gYSBQeXRob24gZGljdCAqLworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JUCitQeU9iamVj dCAqc3ZuX3N3aWdfcHlfbG9jYXRpb25oYXNoX3RvX2RpY3QoYXByX2hhc2hfdCAqaGFzaCk7CisK Ky8qIGNvbnZlcnQgYSBoYXNoIG9mICdjb25zdCBjaGFyIConIC0+IFRZUEUgaW50byBhIFB5dGhv biBkaWN0ICovCitTVk5fU1dJR19TV0lHVVRJTF9FWFBPUlQKK1B5T2JqZWN0ICpzdm5fc3dpZ19w eV9jb252ZXJ0X2hhc2goYXByX2hhc2hfdCAqaGFzaCwgc3dpZ190eXBlX2luZm8gKnR5cGUsIAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqcHlfcG9vbCk7CisK Ky8qIGhlbHBlciBmdW5jdGlvbiB0byBjb252ZXJ0IGEgJ2NoYXIgKionIGludG8gYSBQeXRob24g bGlzdCBvZiBzdHJpbmcKKyAgIG9iamVjdHMgKi8KK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAor UHlPYmplY3QgKnN2bl9zd2lnX3B5X2Nfc3RyaW5nc190b19saXN0KGNoYXIgKipzdHJpbmdzKTsK KworLyogaGVscGVyIGZ1bmN0aW9uIHRvIGNvbnZlcnQgYW4gYXJyYXkgb2YgJ2NvbnN0IGNoYXIg KicgdG8gYSBQeXRob24gbGlzdAorICAgb2Ygc3RyaW5nIG9iamVjdHMgKi8KK1NWTl9TV0lHX1NX SUdVVElMX0VYUE9SVAorUHlPYmplY3QgKnN2bl9zd2lnX3B5X2FycmF5X3RvX2xpc3QoY29uc3Qg YXByX2FycmF5X2hlYWRlcl90ICpzdHJpbmdzKTsKKworLyogaGVscGVyIGZ1bmN0aW9uIHRvIGNv bnZlcnQgYW4gYXJyYXkgb2YgJ3N2bl9yZXZudW1fdCcgdG8gYSBQeXRob24gbGlzdAorICAgb2Yg aW50IG9iamVjdHMgKi8KKy8qIEZvcm1lcmx5IHVzZWQgYnkgcHJlLTEuMCBBUElzLiBOb3cgdW51 c2VkCitQeU9iamVjdCAqc3ZuX3N3aWdfcHlfcmV2YXJyYXlfdG9fbGlzdChjb25zdCBhcHJfYXJy YXlfaGVhZGVyX3QgKnJldnMpOworKi8KKworLyogaGVscGVyIGZ1bmN0aW9uIHRvIGNvbnZlcnQg YSBQeXRob24gZGljdGlvbmFyeSBtYXBwaW5nIHN0cmluZ3MgdG8KKyAgIHN0cmluZ3MgaW50byBh biBhcHJfaGFzaF90IG1hcHBpbmcgY29uc3QgY2hhciAqJ3MgdG8gY29uc3QgY2hhciAqJ3MsCisg ICBhbGxvY2F0ZWQgaW4gUE9PTC4gKi8KK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAorYXByX2hh c2hfdCAqc3ZuX3N3aWdfcHlfc3RyaW5naGFzaF9mcm9tX2RpY3QoUHlPYmplY3QgKmRpY3QsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpw b29sKTsKKworLyogaGVscGVyIGZ1bmN0aW9uIHRvIGNvbnZlcnQgYSBQeXRob24gZGljdGlvbmFy eSBtYXBwaW5nIHN0cmluZ3MgdG8KKyAgIHN0cmluZ3MgaW50byBhbiBhcHJfaGFzaF90IG1hcHBp bmcgY29uc3QgY2hhciAqJ3MgdG8gc3ZuX3N0cmluZ190J3MsCisgICBhbGxvY2F0ZWQgaW4gUE9P TC4gKi8KK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAorYXByX2hhc2hfdCAqc3ZuX3N3aWdfcHlf cHJvcGhhc2hfZnJvbV9kaWN0KFB5T2JqZWN0ICpkaWN0LAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpOworCisvKiBoZWxwZXIgZnVu Y3Rpb24gdG8gY29udmVydCBhIFB5dGhvbiBzZXF1ZW5jZSBvZiBzdHJpbmdzIGludG8gYW4KKyAg ICdhcHJfYXJyYXlfaGVhZGVyX3QgKicgb2YgJ2NvbnN0IGNoYXIgKicgb2JqZWN0cy4gIE5vdGUg dGhhdCB0aGUKKyAgIG9iamVjdHMgbXVzdCByZW1haW4gYWxpdmUgLS0gdGhlIHZhbHVlcyBhcmUg bm90IGNvcGllZC4gVGhpcyBpcworICAgYXBwcm9wcmlhdGUgZm9yIGluY29taW5nIGFyZ3VtZW50 cyB3aGljaCBhcmUgZGVmaW5lZCB0byBsYXN0IHRoZQorICAgZHVyYXRpb24gb2YgdGhlIGZ1bmN0 aW9uJ3MgZXhlY3V0aW9uLiAgKi8KK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAorY29uc3QgYXBy X2FycmF5X2hlYWRlcl90ICpzdm5fc3dpZ19weV9zdHJpbmdzX3RvX2FycmF5KFB5T2JqZWN0ICpz b3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgYXByX3Bvb2xfdCAqcG9vbCk7CisKKy8qIGxpa2Ugc3ZuX3N3aWdfcHlfc3RyaW5nc190 b19hcnJheSgpLCBidXQgZm9yIGFycmF5J3Mgb2YgJ3N2bl9yZXZudW1fdCdzLiAqLworU1ZOX1NX SUdfU1dJR1VUSUxfRVhQT1JUCitjb25zdCBhcHJfYXJyYXlfaGVhZGVyX3QgKnN2bl9zd2lnX3B5 X3Jldm51bXNfdG9fYXJyYXkoUHlPYmplY3QgKnNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKTsKKwor LyogbWFrZSBhbiBlZGl0b3IgdGhhdCAidGh1bmtzIiBmcm9tIEMgY2FsbGJhY2tzIHVwIHRvIFB5 dGhvbiAqLworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JUCit2b2lkIHN2bl9zd2lnX3B5X21ha2Vf ZWRpdG9yKGNvbnN0IHN2bl9kZWx0YV9lZGl0b3JfdCAqKmVkaXRvciwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdm9pZCAqKmVkaXRfYmF0b24sCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFB5T2JqZWN0ICpweV9lZGl0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGFwcl9wb29sX3QgKnBvb2wpOworCitTVk5fU1dJR19TV0lHVVRJTF9FWFBPUlQKK2Fwcl9maWxl X3QgKnN2bl9zd2lnX3B5X21ha2VfZmlsZShQeU9iamVjdCAqcHlfZmlsZSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKTsKKworU1ZOX1NXSUdfU1dJ R1VUSUxfRVhQT1JUCitzdm5fc3RyZWFtX3QgKnN2bl9zd2lnX3B5X21ha2Vfc3RyZWFtKFB5T2Jq ZWN0ICpweV9pbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bv b2xfdCAqcG9vbCk7CisKKy8qIGEgbm90aWZ5IGZ1bmN0aW9uIHRoYXQgZXhlY3V0ZXMgYSBQeXRo b24gZnVuY3Rpb24gdGhhdCBpcyBwYXNzZWQgaW4KKyAgIHZpYSB0aGUgYmF0b24gYXJndW1lbnQg Ki8KK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAordm9pZCBzdm5fc3dpZ19weV9ub3RpZnlfZnVu Yyh2b2lkICpiYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAq cGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX3djX25vdGlmeV9hY3Rpb25f dCBhY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2bl9ub2RlX2tpbmRfdCBr aW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICptaW1lX3R5cGUs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2bl93Y19ub3RpZnlfc3RhdGVfdCBjb250 ZW50X3N0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdm5fd2Nfbm90aWZ5X3N0 YXRlX3QgcHJvcF9zdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX3Jldm51 bV90IHJldmlzaW9uKTsKKworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JUCit2b2lkIHN2bl9zd2ln X3B5X25vdGlmeV9mdW5jMih2b2lkICpiYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IHN2bl93Y19ub3RpZnlfdCAqbm90aWZ5LAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCk7CisKKy8qIGEgc3RhdHVzIGZ1bmN0aW9uIHRoYXQg ZXhlY3V0ZXMgYSBQeXRob24gZnVuY3Rpb24gdGhhdCBpcyBwYXNzZWQgaW4KKyAgIHZpYSB0aGUg YmF0b24gYXJndW1lbnQgKi8KK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAordm9pZCBzdm5fc3dp Z19weV9zdGF0dXNfZnVuYyh2b2lkICpiYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgY2hhciAqcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX3dj X3N0YXR1c190ICpzdGF0dXMpOworCisvKiBhIGNhbmNlbCBmdW5jdGlvbiB0aGF0IGV4ZWN1dGVz IGEgUHl0aG9uIGZ1bmN0aW9uIHBhc3NlZCBpbiB2aWEgdGhlCisgICBjYW5jZWxfYmF0b24gYXJn dW1lbnQuICovCitTVk5fU1dJR19TV0lHVVRJTF9FWFBPUlQKK3N2bl9lcnJvcl90ICpzdm5fc3dp Z19weV9jYW5jZWxfZnVuYyh2b2lkICpjYW5jZWxfYmF0b24pOworCisvKiB0aHVua2VkIGZzIGdl dF9sb2NrcyBmdW5jdGlvbiAqLworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JUCitzdm5fZXJyb3Jf dCAqc3ZuX3N3aWdfcHlfZnNfZ2V0X2xvY2tzX2Z1bmMgKHZvaWQgKmJhdG9uLCAKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX2xvY2tfdCAqbG9jaywgCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBv b2wpOworCisvKiB0aHVua2VkIGNvbW1pdCBsb2cgZmV0Y2hlciAqLworU1ZOX1NXSUdfU1dJR1VU SUxfRVhQT1JUCitzdm5fZXJyb3JfdCAqc3ZuX3N3aWdfcHlfZ2V0X2NvbW1pdF9sb2dfZnVuYyhj b25zdCBjaGFyICoqbG9nX21zZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IGNoYXIgKip0bXBfZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGFwcl9hcnJheV9oZWFkZXJfdCAqY29tbWl0X2l0ZW1zLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYmF0b24s CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90 ICpwb29sKTsKKworLyogdGh1bmtlZCByZXBvcyBhdXRoeiBjYWxsYmFjayBmdW5jdGlvbiAqLwor U1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JUCitzdm5fZXJyb3JfdCAqc3ZuX3N3aWdfcHlfcmVwb3Nf YXV0aHpfZnVuYyhzdm5fYm9vbGVhbl90ICphbGxvd2VkLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3ZuX2ZzX3Jvb3RfdCAqcm9vdCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdGgsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpiYXRvbiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpOworCisvKiB0 aHVua2VkIGhpc3RvcnkgY2FsbGJhY2sgZnVuY3Rpb24gKi8KK1NWTl9TV0lHX1NXSUdVVElMX0VY UE9SVAorc3ZuX2Vycm9yX3QgKnN2bl9zd2lnX3B5X3JlcG9zX2hpc3RvcnlfZnVuYyh2b2lkICpi YXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg Y2hhciAqcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c3ZuX3Jldm51bV90IHJldmlzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKTsKKworLyogdGh1bmtlZCBsb2cgcmVjZWl2ZXIg ZnVuY3Rpb24gKi8KK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAorc3ZuX2Vycm9yX3QgKnN2bl9z d2lnX3B5X2xvZ19yZWNlaXZlcih2b2lkICpweV9yZWNlaXZlciwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYXByX2hhc2hfdCAqY2hhbmdlZF9wYXRocywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX3Jldm51bV90IHJldiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYXV0aG9yLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpkYXRlLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICptc2csCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpOworCisvKiB0 aHVua2VkIGluZm8gcmVjZWl2ZXIgZnVuY3Rpb24gKi8KK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9S VAorc3ZuX2Vycm9yX3QgKnN2bl9zd2lnX3B5X2luZm9fcmVjZWl2ZXJfZnVuYyh2b2lkICpweV9y ZWNlaXZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgY2hhciAqcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3Qgc3ZuX2luZm9fdCAqaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCk7CisKKy8qIHRodW5rZWQgYmxhbWUgcmVj ZWl2ZXIgZnVuY3Rpb24gKi8KK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAorc3ZuX2Vycm9yX3Qg KnN2bl9zd2lnX3B5X2NsaWVudF9ibGFtZV9yZWNlaXZlcl9mdW5jKHZvaWQgKmJhdG9uLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9pbnQ2 NF90IGxpbmVfbm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3ZuX3Jldm51bV90IHJldmlzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmF1dGhvciwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpk YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IGNoYXIgKmxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCk7CisKKy8qIGF1dGggcHJvdmlkZXIgY2Fs bGJhY2tzICovCitTVk5fU1dJR19TV0lHVVRJTF9FWFBPUlQKK3N2bl9lcnJvcl90ICpzdm5fc3dp Z19weV9hdXRoX3NpbXBsZV9wcm9tcHRfZnVuYygKKyAgICBzdm5fYXV0aF9jcmVkX3NpbXBsZV90 ICoqY3JlZCwKKyAgICB2b2lkICpiYXRvbiwKKyAgICBjb25zdCBjaGFyICpyZWFsbSwKKyAgICBj b25zdCBjaGFyICp1c2VybmFtZSwKKyAgICBzdm5fYm9vbGVhbl90IG1heV9zYXZlLAorICAgIGFw cl9wb29sX3QgKnBvb2wpOworCitTVk5fU1dJR19TV0lHVVRJTF9FWFBPUlQKK3N2bl9lcnJvcl90 ICpzdm5fc3dpZ19weV9hdXRoX3VzZXJuYW1lX3Byb21wdF9mdW5jKAorICAgIHN2bl9hdXRoX2Ny ZWRfdXNlcm5hbWVfdCAqKmNyZWQsCisgICAgdm9pZCAqYmF0b24sCisgICAgY29uc3QgY2hhciAq cmVhbG0sCisgICAgc3ZuX2Jvb2xlYW5fdCBtYXlfc2F2ZSwKKyAgICBhcHJfcG9vbF90ICpwb29s KTsKKworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JUCitzdm5fZXJyb3JfdCAqc3ZuX3N3aWdfcHlf YXV0aF9zc2xfc2VydmVyX3RydXN0X3Byb21wdF9mdW5jKAorICAgIHN2bl9hdXRoX2NyZWRfc3Ns X3NlcnZlcl90cnVzdF90ICoqY3JlZCwKKyAgICB2b2lkICpiYXRvbiwKKyAgICBjb25zdCBjaGFy ICpyZWFsbSwKKyAgICBhcHJfdWludDMyX3QgZmFpbHVyZXMsCisgICAgY29uc3Qgc3ZuX2F1dGhf c3NsX3NlcnZlcl9jZXJ0X2luZm9fdCAqY2VydF9pbmZvLAorICAgIHN2bl9ib29sZWFuX3QgbWF5 X3NhdmUsCisgICAgYXByX3Bvb2xfdCAqcG9vbCk7CisKK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9S VAorc3ZuX2Vycm9yX3QgKnN2bl9zd2lnX3B5X2F1dGhfc3NsX2NsaWVudF9jZXJ0X3Byb21wdF9m dW5jKAorICAgIHN2bl9hdXRoX2NyZWRfc3NsX2NsaWVudF9jZXJ0X3QgKipjcmVkLAorICAgIHZv aWQgKmJhdG9uLAorICAgIGNvbnN0IGNoYXIgKnJlYWxtLAorICAgIHN2bl9ib29sZWFuX3QgbWF5 X3NhdmUsCisgICAgYXByX3Bvb2xfdCAqcG9vbCk7CisKK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9S VAorc3ZuX2Vycm9yX3QgKnN2bl9zd2lnX3B5X2F1dGhfc3NsX2NsaWVudF9jZXJ0X3B3X3Byb21w dF9mdW5jKAorICAgIHN2bl9hdXRoX2NyZWRfc3NsX2NsaWVudF9jZXJ0X3B3X3QgKipjcmVkLAor ICAgIHZvaWQgKmJhdG9uLAorICAgIGNvbnN0IGNoYXIgKnJlYWxtLAorICAgIHN2bl9ib29sZWFu X3QgbWF5X3NhdmUsCisgICAgYXByX3Bvb2xfdCAqcG9vbCk7CisKK1NWTl9TV0lHX1NXSUdVVElM X0VYUE9SVAordm9pZAorc3ZuX3N3aWdfcHlfc2V0dXBfcmFfY2FsbGJhY2tzKHN2bl9yYV9jYWxs YmFja3MyX3QgKipjYWxsYmFja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9p ZCAqKmJhdG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpweV9j YWxsYmFja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9v bCk7CitTVk5fU1dJR19TV0lHVVRJTF9FWFBPUlQKK3N2bl9lcnJvcl90ICpzdm5fc3dpZ19weV9j b21taXRfY2FsbGJhY2syKGNvbnN0IHN2bl9jb21taXRfaW5mb190ICpjb21taXRfaW5mbywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmJhdG9uLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCk7 CisKK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAorc3ZuX2Vycm9yX3QgKnN2bl9zd2lnX3B5X2Nv bW1pdF9jYWxsYmFjayhzdm5fcmV2bnVtX3QgbmV3X3JldmlzaW9uLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpkYXRlLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphdXRob3IsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmJhdG9uKTsKKworCitTVk5f U1dJR19TV0lHVVRJTF9FWFBPUlQKK3N2bl9lcnJvcl90ICpzdm5fc3dpZ19weV9yYV9maWxlX3Jl dl9oYW5kbGVyX2Z1bmMoCisgICAgICAgICAgICAgICAgICAgIHZvaWQgKmJhdG9uLAorICAgICAg ICAgICAgICAgICAgICBjb25zdCBjaGFyICpwYXRoLAorICAgICAgICAgICAgICAgICAgICBzdm5f cmV2bnVtX3QgcmV2LAorICAgICAgICAgICAgICAgICAgICBhcHJfaGFzaF90ICpyZXZfcHJvcHMs CisgICAgICAgICAgICAgICAgICAgIHN2bl90eGRlbHRhX3dpbmRvd19oYW5kbGVyX3QgKmRlbHRh X2hhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgIHZvaWQgKipkZWx0YV9iYXRvbiwKKyAgICAg ICAgICAgICAgICAgICAgYXByX2FycmF5X2hlYWRlcl90ICpwcm9wX2RpZmZzLAorICAgICAgICAg ICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKTsKKworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JU CitleHRlcm4gY29uc3Qgc3ZuX3JhX3JlcG9ydGVyMl90IHN3aWdfcHlfcmFfcmVwb3J0ZXIyOwor CisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5k aWYgIC8qIFNWTl9TV0lHX1NXSUdVVElMX1BZX0ggKi8KZGlmZiAtTnVyIHN1YnZlcnNpb24tMS4z LjEvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3B5dGhvbi90ZXN0cy9jbGllbnQucHkgc3VidmVy c2lvbi0xLjMuMS5uZXcvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3B5dGhvbi90ZXN0cy9jbGll bnQucHkKLS0tIHN1YnZlcnNpb24tMS4zLjEvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3B5dGhv bi90ZXN0cy9jbGllbnQucHkJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysr IHN1YnZlcnNpb24tMS4zLjEubmV3L3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vdGVz dHMvY2xpZW50LnB5CTIwMDYtMDctMDQgMTM6MjY6MDUuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAg KzEsMTExIEBACitpbXBvcnQgdW5pdHRlc3QsIG9zLCB0ZW1wZmlsZSwgdHlwZXMKKworZnJvbSBz dm4gaW1wb3J0IGNvcmUsIHJlcG9zLCBmcywgZGVsdGEsIGNsaWVudCwgd2MKKworZnJvbSB0cmFj LnZlcnNpb25jb250cm9sLnRlc3RzLnN2bl9mcyBpbXBvcnQgU3VidmVyc2lvblJlcG9zaXRvcnlU ZXN0U2V0dXAsIFwKKyAgUkVQT1NfUEFUSAorZnJvbSB1cmxsaWIgaW1wb3J0IHBhdGhuYW1lMnVy bAorCitjbGFzcyBTdWJ2ZXJzaW9uUmVwb3NpdG9yeVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNl KToKKyAgIiIiVGVzdCBjYXNlcyBmb3IgdGhlIFN1YnZlcnNpb24gcmVwb3NpdG9yeSBsYXllciIi IgorCisgIGRlZiBzZXRVcChzZWxmKToKKyAgICAiIiJMb2FkIGEgU3VidmVyc2lvbiByZXBvc2l0 b3J5IiIiCisgICAgc2VsZi5jbGllbnRfY3R4ID0gY2xpZW50LnN2bl9jbGllbnRfY3JlYXRlX2Nv bnRleHQoKQorCisgICAgcHJvdmlkZXJzID0gWworICAgICAgIGNsaWVudC5zdm5fY2xpZW50X2dl dF9zaW1wbGVfcHJvdmlkZXIoKSwKKyAgICAgICBjbGllbnQuc3ZuX2NsaWVudF9nZXRfdXNlcm5h bWVfcHJvdmlkZXIoKSwKKyAgICBdCisKKyAgICBzZWxmLmNsaWVudF9jdHguYXV0aF9iYXRvbiA9 IGNvcmUuc3ZuX2F1dGhfb3Blbihwcm92aWRlcnMpCisgICAgc2VsZi5yZXBvc191cmwgPSAiZmls ZTovLyIgKyBwYXRobmFtZTJ1cmwoUkVQT1NfUEFUSCkKKworICBkZWYgaW5mb19yZWNlaXZlcihz ZWxmLCBwYXRoLCBpbmZvLCBwb29sKToKKyAgICAiIiJTcXVpcnJlbCBhd2F5IHRoZSBvdXRwdXQg ZnJvbSAnc3ZuIGluZm8nIHNvIHRoYXQgdGhlIHVuaXQgdGVzdHMKKyAgICAgICBjYW4gZ2V0IGF0 IHRoZW0uIiIiCisgICAgc2VsZi5wYXRoID0gcGF0aAorICAgIHNlbGYuaW5mbyA9IGluZm8KKwor ICBkZWYgdGVzdF9jaGVja291dChzZWxmKToKKyAgICAiIiJUZXN0IHN2bl9jbGllbnRfY2hlY2tv dXQyLiIiIgorCisgICAgcmV2ID0gY29yZS5zdm5fb3B0X3JldmlzaW9uX3QoKQorICAgIHJldi5r aW5kID0gY29yZS5zdm5fb3B0X3JldmlzaW9uX2hlYWQKKworICAgIHBhdGggPSBvcy5wYXRoLmpv aW4odGVtcGZpbGUuZ2V0dGVtcGRpcigpLCAnY2hlY2tvdXQnKQorCisgICAgc2VsZi5hc3NlcnRS YWlzZXMoVmFsdWVFcnJvciwgY2xpZW50LmNoZWNrb3V0MiwgCisgICAgICAgICAgICAgICAgICAg ICAgc2VsZi5yZXBvc191cmwsIHBhdGgsIE5vbmUsIE5vbmUsIFRydWUsIFRydWUsIAorICAgICAg ICAgICAgICAgICAgICAgIHNlbGYuY2xpZW50X2N0eCkKKworICAgIGNsaWVudC5jaGVja291dDIo c2VsZi5yZXBvc191cmwsIHBhdGgsIHJldiwgcmV2LCBUcnVlLCBUcnVlLCAKKyAgICAgICAgICAg IHNlbGYuY2xpZW50X2N0eCkKKworICBkZWYgdGVzdF9pbmZvKHNlbGYpOgorICAgICIiIlRlc3Qg c2NvcGUgb2YgZ2V0X2xvZ3MgY2FsbGJhY2tzIiIiCisKKyAgICAjIFJ1biBpbmZvCisgICAgcmV2 dCA9IGNvcmUuc3ZuX29wdF9yZXZpc2lvbl90KCkKKyAgICByZXZ0LmtpbmQgPSBjb3JlLnN2bl9v cHRfcmV2aXNpb25faGVhZAorICAgIHJlcG9zX3VybCA9ICJmaWxlOi8vIiArIHBhdGhuYW1lMnVy bChSRVBPU19QQVRIKQorICAgIGNsaWVudC5pbmZvKHJlcG9zX3VybCwgcmV2dCwgcmV2dCwgc2Vs Zi5pbmZvX3JlY2VpdmVyLAorICAgICAgICAgICAgICAgIEZhbHNlLCBzZWxmLmNsaWVudF9jdHgp CisKKyAgICAjIENoZWNrIG91dHB1dCBmcm9tIHJ1bm5pbmcgaW5mby4gVGhpcyBhbHNvIHNlcnZl cyB0byB2ZXJpZnkgdGhhdAorICAgICMgdGhlIGludGVybmFsICdpbmZvJyBvYmplY3QgaXMgc3Rp bGwgdmFsaWQKKyAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucGF0aCwgb3MucGF0aC5iYXNlbmFt ZShSRVBPU19QQVRIKSkKKyAgICBzZWxmLmluZm8uYXNzZXJ0X3ZhbGlkKCkKKyAgICBzZWxmLmFz c2VydEVxdWFsKHNlbGYuaW5mby5VUkwsIHJlcG9zX3VybCkKKyAgICBzZWxmLmFzc2VydEVxdWFs KHNlbGYuaW5mby5yZXBvc19yb290X1VSTCwgcmVwb3NfdXJsKQorCisKKyAgZGVmIHRlc3RfdXVp ZF9mcm9tX3VybChzZWxmKToKKyAgICAiIiJUZXN0IHN2bl9jbGllbnRfdXVpZF9mcm9tX3VybCBv biBhIGZpbGU6Ly8gVVJMIiIiCisgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UoCisgICAgICAg ICAgICAgICAgIGNsaWVudC51dWlkX2Zyb21fdXJsKHNlbGYucmVwb3NfdXJsLCBzZWxmLmNsaWVu dF9jdHgpLAorICAgICAgICAgICAgICAgICB0eXBlcy5TdHJpbmdUeXBlcykpCisKKyAgZGVmIHRl c3RfdXJsX2Zyb21fcGF0aChzZWxmKToKKyAgICAiIiJUZXN0IHN2bl9jbGllbnRfdXJsX2Zyb21f cGF0aCBmb3IgYSBmaWxlOi8vIFVSTCIiIgorICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNsaWVudC51 cmxfZnJvbV9wYXRoKHNlbGYucmVwb3NfdXJsKSwgc2VsZi5yZXBvc191cmwpCisKKyAgICByZXYg PSBjb3JlLnN2bl9vcHRfcmV2aXNpb25fdCgpCisgICAgcmV2LmtpbmQgPSBjb3JlLnN2bl9vcHRf cmV2aXNpb25faGVhZAorCisgICAgcGF0aCA9IG9zLnBhdGguam9pbih0ZW1wZmlsZS5nZXR0ZW1w ZGlyKCksICd1cmxfZnJvbV9wYXRoJykKKworICAgIGNsaWVudC5jaGVja291dDIoc2VsZi5yZXBv c191cmwsIHBhdGgsIHJldiwgcmV2LCBUcnVlLCBUcnVlLCAKKyAgICAgICAgICAgICAgICAgICAg IHNlbGYuY2xpZW50X2N0eCkKKworICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNsaWVudC51cmxfZnJv bV9wYXRoKHBhdGgpLCBzZWxmLnJlcG9zX3VybCkKKworICBkZWYgdGVzdF91dWlkX2Zyb21fcGF0 aChzZWxmKToKKyAgICAiIiJUZXN0IHN2bl9jbGllbnRfdXVpZF9mcm9tX3BhdGguIiIiCisgICAg cmV2ID0gY29yZS5zdm5fb3B0X3JldmlzaW9uX3QoKQorICAgIHJldi5raW5kID0gY29yZS5zdm5f b3B0X3JldmlzaW9uX2hlYWQKKworICAgIHBhdGggPSBvcy5wYXRoLmpvaW4odGVtcGZpbGUuZ2V0 dGVtcGRpcigpLCAndXVpZF9mcm9tX3BhdGgnKQorCisgICAgY2xpZW50LmNoZWNrb3V0MihzZWxm LnJlcG9zX3VybCwgcGF0aCwgcmV2LCByZXYsIFRydWUsIFRydWUsIAorICAgICAgICAgICAgICAg ICAgICAgc2VsZi5jbGllbnRfY3R4KQorCisgICAgd2NfYWRtID0gd2MuYWRtX29wZW4zKE5vbmUs IHBhdGgsIEZhbHNlLCAwLCBOb25lKQorCisgICAgc2VsZi5hc3NlcnRFcXVhbHMoY2xpZW50LnV1 aWRfZnJvbV9wYXRoKHBhdGgsIHdjX2FkbSwgc2VsZi5jbGllbnRfY3R4KSwgCisgICAgICAgICAg ICAgICAgICAgICAgY2xpZW50LnV1aWRfZnJvbV91cmwoc2VsZi5yZXBvc191cmwsIHNlbGYuY2xp ZW50X2N0eCkpCisKKyAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShjbGllbnQudXVpZF9mcm9t X3BhdGgocGF0aCwgd2NfYWRtLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNs aWVudF9jdHgpLCB0eXBlcy5TdHJpbmdUeXBlcykpCisKKyAgZGVmIHRlc3Rfb3Blbl9yYV9zZXNz aW9uKHNlbGYpOgorICAgICAgIiIiVGVzdCBzdm5fY2xpZW50X29wZW5fcmFfc2Vzc2lvbigpLiIi IgorICAgICAgY2xpZW50Lm9wZW5fcmFfc2Vzc2lvbihzZWxmLnJlcG9zX3VybCwgc2VsZi5jbGll bnRfY3R4KQorCitkZWYgc3VpdGUoKToKKyAgICByZXR1cm4gdW5pdHRlc3QubWFrZVN1aXRlKFN1 YnZlcnNpb25SZXBvc2l0b3J5VGVzdENhc2UsICd0ZXN0JywKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHN1aXRlQ2xhc3M9U3VidmVyc2lvblJlcG9zaXRvcnlUZXN0U2V0dXApCisKK2lm IF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgcnVubmVyID0gdW5pdHRlc3QuVGV4dFRlc3RS dW5uZXIoKQorICAgIHJ1bm5lci5ydW4oc3VpdGUoKSkKZGlmZiAtTnVyIHN1YnZlcnNpb24tMS4z LjEvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3B5dGhvbi90ZXN0cy9jbGllbnQucHkub3JpZyBz dWJ2ZXJzaW9uLTEuMy4xLm5ldy9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcHl0aG9uL3Rlc3Rz L2NsaWVudC5weS5vcmlnCi0tLSBzdWJ2ZXJzaW9uLTEuMy4xL3N1YnZlcnNpb24vYmluZGluZ3Mv c3dpZy9weXRob24vdGVzdHMvY2xpZW50LnB5Lm9yaWcJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAw MDAwMDAgKzAxMDAKKysrIHN1YnZlcnNpb24tMS4zLjEubmV3L3N1YnZlcnNpb24vYmluZGluZ3Mv c3dpZy9weXRob24vdGVzdHMvY2xpZW50LnB5Lm9yaWcJMjAwNi0wNy0wNCAxMzoyNjowNS4wMDAw MDAwMDAgKzAxMDAKQEAgLTAsMCArMSwxMTEgQEAKK2ltcG9ydCB1bml0dGVzdCwgb3MsIHRlbXBm aWxlLCB0eXBlcworCitmcm9tIHN2biBpbXBvcnQgY29yZSwgcmVwb3MsIGZzLCBkZWx0YSwgY2xp ZW50LCB3YworCitmcm9tIHRyYWMudmVyc2lvbmNvbnRyb2wudGVzdHMuc3ZuX2ZzIGltcG9ydCBT dWJ2ZXJzaW9uUmVwb3NpdG9yeVRlc3RTZXR1cCwgXAorICBSRVBPU19QQVRICitmcm9tIHVybGxp YiBpbXBvcnQgcGF0aG5hbWUydXJsCisKK2NsYXNzIFN1YnZlcnNpb25SZXBvc2l0b3J5VGVzdENh c2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAiIiJUZXN0IGNhc2VzIGZvciB0aGUgU3VidmVyc2lv biByZXBvc2l0b3J5IGxheWVyIiIiCisKKyAgZGVmIHNldFVwKHNlbGYpOgorICAgICIiIkxvYWQg YSBTdWJ2ZXJzaW9uIHJlcG9zaXRvcnkiIiIKKyAgICBzZWxmLmNsaWVudF9jdHggPSBjbGllbnQu c3ZuX2NsaWVudF9jcmVhdGVfY29udGV4dCgpCisKKyAgICBwcm92aWRlcnMgPSBbCisgICAgICAg Y2xpZW50LnN2bl9jbGllbnRfZ2V0X3NpbXBsZV9wcm92aWRlcigpLAorICAgICAgIGNsaWVudC5z dm5fY2xpZW50X2dldF91c2VybmFtZV9wcm92aWRlcigpLAorICAgIF0KKworICAgIHNlbGYuY2xp ZW50X2N0eC5hdXRoX2JhdG9uID0gY29yZS5zdm5fYXV0aF9vcGVuKHByb3ZpZGVycykKKyAgICBz ZWxmLnJlcG9zX3VybCA9ICJmaWxlOi8vIiArIHBhdGhuYW1lMnVybChSRVBPU19QQVRIKQorCisg IGRlZiBpbmZvX3JlY2VpdmVyKHNlbGYsIHBhdGgsIGluZm8sIHBvb2wpOgorICAgICIiIlNxdWly cmVsIGF3YXkgdGhlIG91dHB1dCBmcm9tICdzdm4gaW5mbycgc28gdGhhdCB0aGUgdW5pdCB0ZXN0 cworICAgICAgIGNhbiBnZXQgYXQgdGhlbS4iIiIKKyAgICBzZWxmLnBhdGggPSBwYXRoCisgICAg c2VsZi5pbmZvID0gaW5mbworCisgIGRlZiB0ZXN0X2NoZWNrb3V0KHNlbGYpOgorICAgICIiIlRl c3Qgc3ZuX2NsaWVudF9jaGVja291dDIuIiIiCisKKyAgICByZXYgPSBjb3JlLnN2bl9vcHRfcmV2 aXNpb25fdCgpCisgICAgcmV2LmtpbmQgPSBjb3JlLnN2bl9vcHRfcmV2aXNpb25faGVhZAorCisg ICAgcGF0aCA9IG9zLnBhdGguam9pbih0ZW1wZmlsZS5nZXR0ZW1wZGlyKCksICdjaGVja291dCcp CisKKyAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjbGllbnQuY2hlY2tvdXQyLCAK KyAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJlcG9zX3VybCwgcGF0aCwgTm9uZSwgTm9uZSwg VHJ1ZSwgVHJ1ZSwgCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jbGllbnRfY3R4KQorCisg ICAgY2xpZW50LmNoZWNrb3V0MihzZWxmLnJlcG9zX3VybCwgcGF0aCwgcmV2LCByZXYsIFRydWUs IFRydWUsIAorICAgICAgICAgICAgc2VsZi5jbGllbnRfY3R4KQorCisgIGRlZiB0ZXN0X2luZm8o c2VsZik6CisgICAgIiIiVGVzdCBzY29wZSBvZiBnZXRfbG9ncyBjYWxsYmFja3MiIiIKKworICAg ICMgUnVuIGluZm8KKyAgICByZXZ0ID0gY29yZS5zdm5fb3B0X3JldmlzaW9uX3QoKQorICAgIHJl dnQua2luZCA9IGNvcmUuc3ZuX29wdF9yZXZpc2lvbl9oZWFkCisgICAgcmVwb3NfdXJsID0gImZp bGU6Ly8iICsgcGF0aG5hbWUydXJsKFJFUE9TX1BBVEgpCisgICAgY2xpZW50LmluZm8ocmVwb3Nf dXJsLCByZXZ0LCByZXZ0LCBzZWxmLmluZm9fcmVjZWl2ZXIsCisgICAgICAgICAgICAgICAgRmFs c2UsIHNlbGYuY2xpZW50X2N0eCkKKworICAgICMgQ2hlY2sgb3V0cHV0IGZyb20gcnVubmluZyBp bmZvLiBUaGlzIGFsc28gc2VydmVzIHRvIHZlcmlmeSB0aGF0CisgICAgIyB0aGUgaW50ZXJuYWwg J2luZm8nIG9iamVjdCBpcyBzdGlsbCB2YWxpZAorICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5w YXRoLCBvcy5wYXRoLmJhc2VuYW1lKFJFUE9TX1BBVEgpKQorICAgIHNlbGYuaW5mby5hc3NlcnRf dmFsaWQoKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5pbmZvLlVSTCwgcmVwb3NfdXJsKQor ICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5pbmZvLnJlcG9zX3Jvb3RfVVJMLCByZXBvc191cmwp CisKKworICBkZWYgdGVzdF91dWlkX2Zyb21fdXJsKHNlbGYpOgorICAgICIiIlRlc3Qgc3ZuX2Ns aWVudF91dWlkX2Zyb21fdXJsIG9uIGEgZmlsZTovLyBVUkwiIiIKKyAgICBzZWxmLmFzc2VydF8o aXNpbnN0YW5jZSgKKyAgICAgICAgICAgICAgICAgY2xpZW50LnV1aWRfZnJvbV91cmwoc2VsZi5y ZXBvc191cmwsIHNlbGYuY2xpZW50X2N0eCksCisgICAgICAgICAgICAgICAgIHR5cGVzLlN0cmlu Z1R5cGVzKSkKKworICBkZWYgdGVzdF91cmxfZnJvbV9wYXRoKHNlbGYpOgorICAgICIiIlRlc3Qg c3ZuX2NsaWVudF91cmxfZnJvbV9wYXRoIGZvciBhIGZpbGU6Ly8gVVJMIiIiCisgICAgc2VsZi5h c3NlcnRFcXVhbHMoY2xpZW50LnVybF9mcm9tX3BhdGgoc2VsZi5yZXBvc191cmwpLCBzZWxmLnJl cG9zX3VybCkKKworICAgIHJldiA9IGNvcmUuc3ZuX29wdF9yZXZpc2lvbl90KCkKKyAgICByZXYu a2luZCA9IGNvcmUuc3ZuX29wdF9yZXZpc2lvbl9oZWFkCisKKyAgICBwYXRoID0gb3MucGF0aC5q b2luKHRlbXBmaWxlLmdldHRlbXBkaXIoKSwgJ3VybF9mcm9tX3BhdGgnKQorCisgICAgY2xpZW50 LmNoZWNrb3V0MihzZWxmLnJlcG9zX3VybCwgcGF0aCwgcmV2LCByZXYsIFRydWUsIFRydWUsIAor ICAgICAgICAgICAgICAgICAgICAgc2VsZi5jbGllbnRfY3R4KQorCisgICAgc2VsZi5hc3NlcnRF cXVhbHMoY2xpZW50LnVybF9mcm9tX3BhdGgocGF0aCksIHNlbGYucmVwb3NfdXJsKQorCisgIGRl ZiB0ZXN0X3V1aWRfZnJvbV9wYXRoKHNlbGYpOgorICAgICIiIlRlc3Qgc3ZuX2NsaWVudF91dWlk X2Zyb21fcGF0aC4iIiIKKyAgICByZXYgPSBjb3JlLnN2bl9vcHRfcmV2aXNpb25fdCgpCisgICAg cmV2LmtpbmQgPSBjb3JlLnN2bl9vcHRfcmV2aXNpb25faGVhZAorCisgICAgcGF0aCA9IG9zLnBh dGguam9pbih0ZW1wZmlsZS5nZXR0ZW1wZGlyKCksICd1dWlkX2Zyb21fcGF0aCcpCisKKyAgICBj bGllbnQuY2hlY2tvdXQyKHNlbGYucmVwb3NfdXJsLCBwYXRoLCByZXYsIHJldiwgVHJ1ZSwgVHJ1 ZSwgCisgICAgICAgICAgICAgICAgICAgICBzZWxmLmNsaWVudF9jdHgpCisKKyAgICB3Y19hZG0g PSB3Yy5hZG1fb3BlbjMoTm9uZSwgcGF0aCwgRmFsc2UsIDAsIE5vbmUpCisKKyAgICBzZWxmLmFz c2VydEVxdWFscyhjbGllbnQudXVpZF9mcm9tX3BhdGgocGF0aCwgd2NfYWRtLCBzZWxmLmNsaWVu dF9jdHgpLCAKKyAgICAgICAgICAgICAgICAgICAgICBjbGllbnQudXVpZF9mcm9tX3VybChzZWxm LnJlcG9zX3VybCwgc2VsZi5jbGllbnRfY3R4KSkKKworICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3Rh bmNlKGNsaWVudC51dWlkX2Zyb21fcGF0aChwYXRoLCB3Y19hZG0sIAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNlbGYuY2xpZW50X2N0eCksIHR5cGVzLlN0cmluZ1R5cGVzKSkKKworICBk ZWYgdGVzdF9vcGVuX3JhX3Nlc3Npb24oc2VsZik6CisgICAgICAiIiJUZXN0IHN2bl9jbGllbnRf b3Blbl9yYV9zZXNzaW9uKCkuIiIiCisgICAgICBjbGllbnQub3Blbl9yYV9zZXNzaW9uKHNlbGYu cmVwb3NfdXJsLCBzZWxmLmNsaWVudF9jdHgpCisKK2RlZiBzdWl0ZSgpOgorICAgIHJldHVybiB1 bml0dGVzdC5tYWtlU3VpdGUoU3VidmVyc2lvblJlcG9zaXRvcnlUZXN0Q2FzZSwgJ3Rlc3QnLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VpdGVDbGFzcz1TdWJ2ZXJzaW9uUmVwb3Np dG9yeVRlc3RTZXR1cCkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBydW5uZXIg PSB1bml0dGVzdC5UZXh0VGVzdFJ1bm5lcigpCisgICAgcnVubmVyLnJ1bihzdWl0ZSgpKQpkaWZm IC1OdXIgc3VidmVyc2lvbi0xLjMuMS9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcHl0aG9uL3Rl c3RzL3JhLnB5IHN1YnZlcnNpb24tMS4zLjEubmV3L3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9w eXRob24vdGVzdHMvcmEucHkKLS0tIHN1YnZlcnNpb24tMS4zLjEvc3VidmVyc2lvbi9iaW5kaW5n cy9zd2lnL3B5dGhvbi90ZXN0cy9yYS5weQkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCAr MDEwMAorKysgc3VidmVyc2lvbi0xLjMuMS5uZXcvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3B5 dGhvbi90ZXN0cy9yYS5weQkyMDA2LTA3LTA0IDEzOjI2OjQ5LjAwMDAwMDAwMCArMDEwMApAQCAt MCwwICsxLDEzNiBAQAoraW1wb3J0IHVuaXR0ZXN0LCBvcworCitmcm9tIHN2biBpbXBvcnQgY29y ZSwgcmVwb3MsIGZzLCBkZWx0YSwgY2xpZW50LCByYQorCitmcm9tIHRyYWMudmVyc2lvbmNvbnRy b2wudGVzdHMuc3ZuX2ZzIGltcG9ydCBTdWJ2ZXJzaW9uUmVwb3NpdG9yeVRlc3RTZXR1cCwgXAor ICBSRVBPU19QQVRICitmcm9tIHVybGxpYiBpbXBvcnQgcGF0aG5hbWUydXJsCisKK2NsYXNzIFN1 YnZlcnNpb25SZXBvc2l0b3J5VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAiIiJUZXN0 IGNhc2VzIGZvciB0aGUgU3VidmVyc2lvbiByZXBvc2l0b3J5IGxheWVyIiIiCisKKyAgZGVmIHNl dFVwKHNlbGYpOgorICAgICIiIkxvYWQgYSBTdWJ2ZXJzaW9uIHJlcG9zaXRvcnkiIiIKKworICAg IHJhLmluaXRpYWxpemUoKQorCisgICAgc2VsZi5yZXBvc191cmwgPSAiZmlsZTovLyIgKyBwYXRo bmFtZTJ1cmwoUkVQT1NfUEFUSCkKKyAgICAKKyAgICAjIE9wZW4gcmVwb3NpdG9yeSBkaXJlY3Rs eSBmb3IgY3Jvc3MtY2hlY2tpbmcKKyAgICBzZWxmLnJlcG9zID0gcmVwb3Mub3BlbihSRVBPU19Q QVRIKQorICAgIHNlbGYuZnMgPSByZXBvcy5mcyhzZWxmLnJlcG9zKQorCisgICAgY2FsbGJhY2tz ID0gcmEuY2FsbGJhY2tzMl90KCkKKworICAgIHNlbGYucmFfY3R4ID0gcmEub3BlbjIoc2VsZi5y ZXBvc191cmwsIGNhbGxiYWNrcywgTm9uZSwgTm9uZSkKKworICBkZWYgdGVzdF9nZXRfcmVwb3Nf cm9vdChzZWxmKToKKyAgICByb290ID0gcmEuZ2V0X3JlcG9zX3Jvb3Qoc2VsZi5yYV9jdHgpCisg ICAgc2VsZi5hc3NlcnRFcXVhbChyb290LHNlbGYucmVwb3NfdXJsKQorCisgIGRlZiB0ZXN0X2dl dF91dWlkKHNlbGYpOgorICAgIHJhX3V1aWQgPSByYS5nZXRfdXVpZChzZWxmLnJhX2N0eCkKKyAg ICBmc191dWlkID0gZnMuZ2V0X3V1aWQoc2VsZi5mcykKKyAgICBzZWxmLmFzc2VydEVxdWFsKHJh X3V1aWQsZnNfdXVpZCkKKworICBkZWYgdGVzdF9nZXRfbGFzdGVzdF9yZXZudW0oc2VsZik6Cisg ICAgcmFfcmV2bnVtID0gcmEuZ2V0X2xhdGVzdF9yZXZudW0oc2VsZi5yYV9jdHgpCisgICAgZnNf cmV2bnVtID0gZnMueW91bmdlc3RfcmV2KHNlbGYuZnMpCisgICAgc2VsZi5hc3NlcnRFcXVhbChy YV9yZXZudW0sZnNfcmV2bnVtKQorCisgIGRlZiB0ZXN0X2dldF9kaXIoc2VsZik6CisgICAgKGRp cmVudHMsXyxwcm9wcykgPSByYS5nZXRfZGlyKHNlbGYucmFfY3R4LCAnJywgMSkKKyAgICBzZWxm LmFzc2VydFRydWUoZGlyZW50cy5oYXNfa2V5KCd0cnVuaycpKQorICAgIHNlbGYuYXNzZXJ0VHJ1 ZShkaXJlbnRzLmhhc19rZXkoJ2JyYW5jaGVzJykpCisgICAgc2VsZi5hc3NlcnRUcnVlKGRpcmVu dHMuaGFzX2tleSgndGFncycpKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlyZW50c1sndHJ1bmsn XS5raW5kLCBjb3JlLnN2bl9ub2RlX2RpcikKKyAgICBzZWxmLmFzc2VydEVxdWFsKGRpcmVudHNb J2JyYW5jaGVzJ10ua2luZCwgY29yZS5zdm5fbm9kZV9kaXIpCisgICAgc2VsZi5hc3NlcnRFcXVh bChkaXJlbnRzWyd0YWdzJ10ua2luZCwgY29yZS5zdm5fbm9kZV9kaXIpCisgICAgc2VsZi5hc3Nl cnRUcnVlKHByb3BzLmhhc19rZXkoY29yZS5TVk5fUFJPUF9FTlRSWV9VVUlEKSkKKyAgICBzZWxm LmFzc2VydFRydWUocHJvcHMuaGFzX2tleShjb3JlLlNWTl9QUk9QX0VOVFJZX0xBU1RfQVVUSE9S KSkKKworICAgIChkaXJlbnRzLF8sXykgPSByYS5nZXRfZGlyKHNlbGYucmFfY3R4LCAndHJ1bmsn LCAxKQorCisgICAgc2VsZi5hc3NlcnRFcXVhbChkaXJlbnRzLCB7fSkKKworICAgIChkaXJlbnRz LF8sXykgPSByYS5nZXRfZGlyKHNlbGYucmFfY3R4LCAndHJ1bmsnLCAxMCkKKworICAgIHNlbGYu YXNzZXJ0VHJ1ZShkaXJlbnRzLmhhc19rZXkoJ1JFQURNRTIudHh0JykpCisgICAgc2VsZi5hc3Nl cnRFcXVhbChkaXJlbnRzWydSRUFETUUyLnR4dCddLmtpbmQsY29yZS5zdm5fbm9kZV9maWxlKQor CisgIGRlZiB0ZXN0X2NvbW1pdChzZWxmKToKKyAgICBkZWYgbXlfY2FsbGJhY2socmV2aXNpb24s IGRhdGUsIGF1dGhvciwgYmF0b24pOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm8ucmV2 aXNpb24sIGZzLnlvdW5nZXN0X3JldihzZWxmLmZzKSkKKworICAgIGVkaXRvciwgZWRpdF9iYXRv biA9IHJhLmdldF9jb21taXRfZWRpdG9yKHNlbGYucmFfY3R4LCAiZm9vYmFyIiwgbXlfY2FsbGJh Y2ssIE5vbmUsIEZhbHNlKQorICAgIHJvb3QgPSBkZWx0YS5lZGl0b3JfaW52b2tlX29wZW5fcm9v dChlZGl0b3IsIGVkaXRfYmF0b24sIDQpCisgICAgY2hpbGQgPSBkZWx0YS5lZGl0b3JfaW52b2tl X2FkZF9kaXJlY3RvcnkoZWRpdG9yLCAiYmxhIiwgcm9vdCwgTm9uZSwgMCkKKyAgICBkZWx0YS5l ZGl0b3JfaW52b2tlX2Nsb3NlX2VkaXQoZWRpdG9yLCBlZGl0X2JhdG9uKQorCisgIGRlZiB0ZXN0 X2NvbW1pdChzZWxmKToKKyAgICBkZWYgbXlfY2FsbGJhY2socmV2aXNpb24sIGRhdGUsIGF1dGhv cik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV2aXNpb24sIGZzLnlvdW5nZXN0X3Jldihz ZWxmLmZzKSkKKworICAgIGVkaXRvciwgZWRpdF9iYXRvbiA9IHJhLmdldF9jb21taXRfZWRpdG9y KHNlbGYucmFfY3R4LCAiZm9vYmFyIiwgbXlfY2FsbGJhY2ssIE5vbmUsIEZhbHNlKQorICAgIHJv b3QgPSBkZWx0YS5lZGl0b3JfaW52b2tlX29wZW5fcm9vdChlZGl0b3IsIGVkaXRfYmF0b24sIDQp CisgICAgY2hpbGQgPSBkZWx0YS5lZGl0b3JfaW52b2tlX2FkZF9kaXJlY3RvcnkoZWRpdG9yLCAi YmxhaCIsIHJvb3QsIE5vbmUsIDApCisgICAgZGVsdGEuZWRpdG9yX2ludm9rZV9jbG9zZV9lZGl0 KGVkaXRvciwgZWRpdF9iYXRvbikKKworICBkZWYgdGVzdF9jb21taXQoc2VsZik6CisgICAgZGVm IG15X2NhbGxiYWNrKHJldmlzaW9uLCBkYXRlLCBhdXRob3IpOgorICAgICAgICBzZWxmLmFzc2Vy dEVxdWFsKHJldmlzaW9uLCBmcy55b3VuZ2VzdF9yZXYoc2VsZi5mcykpCisKKyAgICBlZGl0b3Is IGVkaXRfYmF0b24gPSByYS5nZXRfY29tbWl0X2VkaXRvcihzZWxmLnJhX2N0eCwgImZvb2JhciIs IG15X2NhbGxiYWNrLCBOb25lLCBGYWxzZSkKKyAgICByb290ID0gZGVsdGEuZWRpdG9yX2ludm9r ZV9vcGVuX3Jvb3QoZWRpdG9yLCBlZGl0X2JhdG9uLCA0KQorICAgIGNoaWxkID0gZGVsdGEuZWRp dG9yX2ludm9rZV9hZGRfZGlyZWN0b3J5KGVkaXRvciwgImJsYWgiLCByb290LCBOb25lLCAwKQor ICAgIGRlbHRhLmVkaXRvcl9pbnZva2VfY2xvc2VfZWRpdChlZGl0b3IsIGVkaXRfYmF0b24pCisK KyAgZGVmIHRlc3RfZ2V0X2xvY2F0aW9ucyhzZWxmKToKKyAgICBsb2NhdGlvbnMgPSByYS5nZXRf bG9jYXRpb25zKHNlbGYucmFfY3R4LCAiL3RydW5rL1JFQURNRS50eHQiLCAyLCByYW5nZSgxLDUp KQorICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9jYXRpb25zLCB7CisgICAgICAgIDI6ICcvdHJ1bmsv UkVBRE1FLnR4dCcsIAorICAgICAgICAzOiAnL3RydW5rL1JFQURNRS50eHQnLCAKKyAgICAgICAg NDogJy90cnVuay9SRUFETUUudHh0J30pCisKKyAgZGVmIHRlc3RfZ2V0X2ZpbGVfcmV2cyhzZWxm KToKKyAgICBkZWYgcmV2X2hhbmRsZXIocGF0aCwgcmV2LCByZXZfcHJvcHMsIHByb3BfZGlmZnMs IHBvb2wpOgorICAgICAgICBzZWxmLmFzc2VydF8ocmV2ID09IDIgb3IgcmV2ID09IDMpCisgICAg ICAgIHNlbGYuYXNzZXJ0RXF1YWwocGF0aCwgIi90cnVuay9SRUFETUUudHh0IikKKyAgICAgICAg aWYgcmV2ID09IDI6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldl9wcm9wcywgewor ICAgICAgICAgICAgICAnc3ZuOmxvZyc6ICdBZGRlZCBSRUFETUUuJywKKyAgICAgICAgICAgICAg J3N2bjphdXRob3InOiAnam9obicsCisgICAgICAgICAgICAgICdzdm46ZGF0ZSc6ICcyMDA1LTA0 LTAxVDEzOjEyOjE4LjIxNjI2N1onCisgICAgICAgICAgICB9KQorICAgICAgICAgICAgc2VsZi5h c3NlcnRFcXVhbChwcm9wX2RpZmZzLCB7fSkKKyAgICAgICAgZWxpZiByZXYgPT0gMzoKKyAgICAg ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV2X3Byb3BzLCB7CisgICAgICAgICAgICAgICdzdm46 bG9nJzogJ0ZpeGVkIFJFQURNRS5cbicsCisgICAgICAgICAgICAgICdzdm46YXV0aG9yJzogJ2th dGUnLAorICAgICAgICAgICAgICAnc3ZuOmRhdGUnOiAnMjAwNS0wNC0wMVQxMzoyNDo1OC4yMzQ2 NDNaJworICAgICAgICAgICAgfSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvcF9k aWZmcywgeydzdm46bWltZS10eXBlJzogJ3RleHQvcGxhaW4nLCAnc3ZuOmVvbC1zdHlsZSc6ICdu YXRpdmUnfSkKKworICAgIHJhLmdldF9maWxlX3JldnMoc2VsZi5yYV9jdHgsICJ0cnVuay9SRUFE TUUudHh0IiwgMCwgMTAsIHJldl9oYW5kbGVyKQorCisgIGRlZiB0ZXN0X3VwZGF0ZShzZWxmKToK KyAgICBjbGFzcyBUZXN0RWRpdG9yKGRlbHRhLkVkaXRvcik6CisgICAgICAgIHBhc3MKKworICAg IGVkaXRvciA9IFRlc3RFZGl0b3IoKQorCisgICAgZV9wdHIsIGVfYmF0b24gPSBkZWx0YS5tYWtl X2VkaXRvcihlZGl0b3IpCisgICAgCisgICAgcmVwb3J0ZXIsIHJlcG9ydGVyX2JhdG9uID0gcmEu ZG9fdXBkYXRlKHNlbGYucmFfY3R4LCAxMCwgIiIsIFRydWUsIGVfcHRyLCBlX2JhdG9uKQorCisg ICAgcmEucmVwb3J0ZXIyX2ludm9rZV9zZXRfcGF0aChyZXBvcnRlciwgcmVwb3J0ZXJfYmF0b24s ICIiLCAwLCBUcnVlLCBOb25lKQorCisgICAgcmEucmVwb3J0ZXIyX2ludm9rZV9maW5pc2hfcmVw b3J0KHJlcG9ydGVyLCByZXBvcnRlcl9iYXRvbikKKworZGVmIHN1aXRlKCk6CisgICAgcmV0dXJu IHVuaXR0ZXN0Lm1ha2VTdWl0ZShTdWJ2ZXJzaW9uUmVwb3NpdG9yeVRlc3RDYXNlLCAndGVzdCcs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWl0ZUNsYXNzPVN1YnZlcnNpb25SZXBv c2l0b3J5VGVzdFNldHVwKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHJ1bm5l ciA9IHVuaXR0ZXN0LlRleHRUZXN0UnVubmVyKCkKKyAgICBydW5uZXIucnVuKHN1aXRlKCkpCmRp ZmYgLU51ciBzdWJ2ZXJzaW9uLTEuMy4xL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24v dGVzdHMvcmEucHkub3JpZyBzdWJ2ZXJzaW9uLTEuMy4xLm5ldy9zdWJ2ZXJzaW9uL2JpbmRpbmdz L3N3aWcvcHl0aG9uL3Rlc3RzL3JhLnB5Lm9yaWcKLS0tIHN1YnZlcnNpb24tMS4zLjEvc3VidmVy c2lvbi9iaW5kaW5ncy9zd2lnL3B5dGhvbi90ZXN0cy9yYS5weS5vcmlnCTE5NzAtMDEtMDEgMDE6 MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyBzdWJ2ZXJzaW9uLTEuMy4xLm5ldy9zdWJ2ZXJzaW9u L2JpbmRpbmdzL3N3aWcvcHl0aG9uL3Rlc3RzL3JhLnB5Lm9yaWcJMjAwNi0wNy0wNCAxMzoyNjow NS4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSwxMzYgQEAKK2ltcG9ydCB1bml0dGVzdCwgb3MK KworZnJvbSBzdm4gaW1wb3J0IGNvcmUsIHJlcG9zLCBmcywgZGVsdGEsIGNsaWVudCwgcmEKKwor ZnJvbSB0cmFjLnZlcnNpb25jb250cm9sLnRlc3RzLnN2bl9mcyBpbXBvcnQgU3VidmVyc2lvblJl cG9zaXRvcnlUZXN0U2V0dXAsIFwKKyAgUkVQT1NfUEFUSAorZnJvbSB1cmxsaWIgaW1wb3J0IHBh dGhuYW1lMnVybAorCitjbGFzcyBTdWJ2ZXJzaW9uUmVwb3NpdG9yeVRlc3RDYXNlKHVuaXR0ZXN0 LlRlc3RDYXNlKToKKyAgIiIiVGVzdCBjYXNlcyBmb3IgdGhlIFN1YnZlcnNpb24gcmVwb3NpdG9y eSBsYXllciIiIgorCisgIGRlZiBzZXRVcChzZWxmKToKKyAgICAiIiJMb2FkIGEgU3VidmVyc2lv biByZXBvc2l0b3J5IiIiCisKKyAgICByYS5pbml0aWFsaXplKCkKKworICAgIHNlbGYucmVwb3Nf dXJsID0gImZpbGU6Ly8iICsgcGF0aG5hbWUydXJsKFJFUE9TX1BBVEgpCisgICAgCisgICAgIyBP cGVuIHJlcG9zaXRvcnkgZGlyZWN0bHkgZm9yIGNyb3NzLWNoZWNraW5nCisgICAgc2VsZi5yZXBv cyA9IHJlcG9zLm9wZW4oUkVQT1NfUEFUSCkKKyAgICBzZWxmLmZzID0gcmVwb3MuZnMoc2VsZi5y ZXBvcykKKworICAgIGNhbGxiYWNrcyA9IHJhLmNhbGxiYWNrczJfdCgpCisKKyAgICBzZWxmLnJh X2N0eCA9IHJhLm9wZW4yKHNlbGYucmVwb3NfdXJsLCBjYWxsYmFja3MsIE5vbmUsIE5vbmUpCisK KyAgZGVmIHRlc3RfZ2V0X3JlcG9zX3Jvb3Qoc2VsZik6CisgICAgcm9vdCA9IHJhLmdldF9yZXBv c19yb290KHNlbGYucmFfY3R4KQorICAgIHNlbGYuYXNzZXJ0RXF1YWwocm9vdCxzZWxmLnJlcG9z X3VybCkKKworICBkZWYgdGVzdF9nZXRfdXVpZChzZWxmKToKKyAgICByYV91dWlkID0gcmEuZ2V0 X3V1aWQoc2VsZi5yYV9jdHgpCisgICAgZnNfdXVpZCA9IGZzLmdldF91dWlkKHNlbGYuZnMpCisg ICAgc2VsZi5hc3NlcnRFcXVhbChyYV91dWlkLGZzX3V1aWQpCisKKyAgZGVmIHRlc3RfZ2V0X2xh c3Rlc3RfcmV2bnVtKHNlbGYpOgorICAgIHJhX3Jldm51bSA9IHJhLmdldF9sYXRlc3RfcmV2bnVt KHNlbGYucmFfY3R4KQorICAgIGZzX3Jldm51bSA9IGZzLnlvdW5nZXN0X3JldihzZWxmLmZzKQor ICAgIHNlbGYuYXNzZXJ0RXF1YWwocmFfcmV2bnVtLGZzX3Jldm51bSkKKworICBkZWYgdGVzdF9n ZXRfZGlyKHNlbGYpOgorICAgIChkaXJlbnRzLF8scHJvcHMpID0gcmEuZ2V0X2RpcihzZWxmLnJh X2N0eCwgJycsIDEpCisgICAgc2VsZi5hc3NlcnRUcnVlKGRpcmVudHMuaGFzX2tleSgndHJ1bmsn KSkKKyAgICBzZWxmLmFzc2VydFRydWUoZGlyZW50cy5oYXNfa2V5KCdicmFuY2hlcycpKQorICAg IHNlbGYuYXNzZXJ0VHJ1ZShkaXJlbnRzLmhhc19rZXkoJ3RhZ3MnKSkKKyAgICBzZWxmLmFzc2Vy dEVxdWFsKGRpcmVudHNbJ3RydW5rJ10ua2luZCwgY29yZS5zdm5fbm9kZV9kaXIpCisgICAgc2Vs Zi5hc3NlcnRFcXVhbChkaXJlbnRzWydicmFuY2hlcyddLmtpbmQsIGNvcmUuc3ZuX25vZGVfZGly KQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlyZW50c1sndGFncyddLmtpbmQsIGNvcmUuc3ZuX25v ZGVfZGlyKQorICAgIHNlbGYuYXNzZXJ0VHJ1ZShwcm9wcy5oYXNfa2V5KGNvcmUuU1ZOX1BST1Bf RU5UUllfVVVJRCkpCisgICAgc2VsZi5hc3NlcnRUcnVlKHByb3BzLmhhc19rZXkoY29yZS5TVk5f UFJPUF9FTlRSWV9MQVNUX0FVVEhPUikpCisKKyAgICAoZGlyZW50cyxfLF8pID0gcmEuZ2V0X2Rp cihzZWxmLnJhX2N0eCwgJ3RydW5rJywgMSkKKworICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlyZW50 cywge30pCisKKyAgICAoZGlyZW50cyxfLF8pID0gcmEuZ2V0X2RpcihzZWxmLnJhX2N0eCwgJ3Ry dW5rJywgMTApCisKKyAgICBzZWxmLmFzc2VydFRydWUoZGlyZW50cy5oYXNfa2V5KCdSRUFETUUy LnR4dCcpKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlyZW50c1snUkVBRE1FMi50eHQnXS5raW5k LGNvcmUuc3ZuX25vZGVfZmlsZSkKKworICBkZWYgdGVzdF9jb21taXQoc2VsZik6CisgICAgZGVm IG15X2NhbGxiYWNrKHJldmlzaW9uLCBkYXRlLCBhdXRob3IsIGJhdG9uKToKKyAgICAgICAgc2Vs Zi5hc3NlcnRFcXVhbChpbmZvLnJldmlzaW9uLCBmcy55b3VuZ2VzdF9yZXYoc2VsZi5mcykpCisK KyAgICBlZGl0b3IsIGVkaXRfYmF0b24gPSByYS5nZXRfY29tbWl0X2VkaXRvcihzZWxmLnJhX2N0 eCwgImZvb2JhciIsIG15X2NhbGxiYWNrLCBOb25lLCBGYWxzZSkKKyAgICByb290ID0gZGVsdGEu ZWRpdG9yX2ludm9rZV9vcGVuX3Jvb3QoZWRpdG9yLCBlZGl0X2JhdG9uLCA0KQorICAgIGNoaWxk ID0gZGVsdGEuZWRpdG9yX2ludm9rZV9hZGRfZGlyZWN0b3J5KGVkaXRvciwgImJsYSIsIHJvb3Qs IE5vbmUsIDApCisgICAgZGVsdGEuZWRpdG9yX2ludm9rZV9jbG9zZV9lZGl0KGVkaXRvciwgZWRp dF9iYXRvbikKKworICBkZWYgdGVzdF9jb21taXQoc2VsZik6CisgICAgZGVmIG15X2NhbGxiYWNr KHJldmlzaW9uLCBkYXRlLCBhdXRob3IpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldmlz aW9uLCBmcy55b3VuZ2VzdF9yZXYoc2VsZi5mcykpCisKKyAgICBlZGl0b3IsIGVkaXRfYmF0b24g PSByYS5nZXRfY29tbWl0X2VkaXRvcihzZWxmLnJhX2N0eCwgImZvb2JhciIsIG15X2NhbGxiYWNr LCBOb25lLCBGYWxzZSkKKyAgICByb290ID0gZGVsdGEuZWRpdG9yX2ludm9rZV9vcGVuX3Jvb3Qo ZWRpdG9yLCBlZGl0X2JhdG9uLCA0KQorICAgIGNoaWxkID0gZGVsdGEuZWRpdG9yX2ludm9rZV9h ZGRfZGlyZWN0b3J5KGVkaXRvciwgImJsYWgiLCByb290LCBOb25lLCAwKQorICAgIGRlbHRhLmVk aXRvcl9pbnZva2VfY2xvc2VfZWRpdChlZGl0b3IsIGVkaXRfYmF0b24pCisKKyAgZGVmIHRlc3Rf Y29tbWl0KHNlbGYpOgorICAgIGRlZiBteV9jYWxsYmFjayhyZXZpc2lvbiwgZGF0ZSwgYXV0aG9y KToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXZpc2lvbiwgZnMueW91bmdlc3RfcmV2KHNl bGYuZnMpKQorCisgICAgZWRpdG9yLCBlZGl0X2JhdG9uID0gcmEuZ2V0X2NvbW1pdF9lZGl0b3Io c2VsZi5yYV9jdHgsICJmb29iYXIiLCBteV9jYWxsYmFjaywgTm9uZSwgRmFsc2UpCisgICAgcm9v dCA9IGRlbHRhLmVkaXRvcl9pbnZva2Vfb3Blbl9yb290KGVkaXRvciwgZWRpdF9iYXRvbiwgNCkK KyAgICBjaGlsZCA9IGRlbHRhLmVkaXRvcl9pbnZva2VfYWRkX2RpcmVjdG9yeShlZGl0b3IsICJi bGFoIiwgcm9vdCwgTm9uZSwgMCkKKyAgICBkZWx0YS5lZGl0b3JfaW52b2tlX2Nsb3NlX2VkaXQo ZWRpdG9yLCBlZGl0X2JhdG9uKQorCisgIGRlZiB0ZXN0X2dldF9sb2NhdGlvbnMoc2VsZik6Cisg ICAgbG9jYXRpb25zID0gcmEuZ2V0X2xvY2F0aW9ucyhzZWxmLnJhX2N0eCwgIi90cnVuay9SRUFE TUUudHh0IiwgMiwgcmFuZ2UoMSw1KSkKKyAgICBzZWxmLmFzc2VydEVxdWFsKGxvY2F0aW9ucywg eworICAgICAgICAyOiAnL3RydW5rL1JFQURNRS50eHQnLCAKKyAgICAgICAgMzogJy90cnVuay9S RUFETUUudHh0JywgCisgICAgICAgIDQ6ICcvdHJ1bmsvUkVBRE1FLnR4dCd9KQorCisgIGRlZiB0 ZXN0X2dldF9maWxlX3JldnMoc2VsZik6CisgICAgZGVmIHJldl9oYW5kbGVyKHBhdGgsIHJldiwg cmV2X3Byb3BzLCBwcm9wX2RpZmZzLCBwb29sKToKKyAgICAgICAgc2VsZi5hc3NlcnRfKHJldiA9 PSAyIG9yIHJldiA9PSAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhdGgsICIvdHJ1bmsv UkVBRE1FLnR4dCIpCisgICAgICAgIGlmIHJldiA9PSAyOgorICAgICAgICAgICAgc2VsZi5hc3Nl cnRFcXVhbChyZXZfcHJvcHMsIHsKKyAgICAgICAgICAgICAgJ3N2bjpsb2cnOiAnQWRkZWQgUkVB RE1FLicsCisgICAgICAgICAgICAgICdzdm46YXV0aG9yJzogJ2pvaG4nLAorICAgICAgICAgICAg ICAnc3ZuOmRhdGUnOiAnMjAwNS0wNC0wMVQxMzoxMjoxOC4yMTYyNjdaJworICAgICAgICAgICAg fSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvcF9kaWZmcywge30pCisgICAgICAg IGVsaWYgcmV2ID09IDM6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldl9wcm9wcywg eworICAgICAgICAgICAgICAnc3ZuOmxvZyc6ICdGaXhlZCBSRUFETUUuXG4nLAorICAgICAgICAg ICAgICAnc3ZuOmF1dGhvcic6ICdrYXRlJywKKyAgICAgICAgICAgICAgJ3N2bjpkYXRlJzogJzIw MDUtMDQtMDFUMTM6MjQ6NTguMjM0NjQzWicKKyAgICAgICAgICAgIH0pCisgICAgICAgICAgICBz ZWxmLmFzc2VydEVxdWFsKHByb3BfZGlmZnMsIHsnc3ZuOm1pbWUtdHlwZSc6ICd0ZXh0L3BsYWlu JywgJ3N2bjplb2wtc3R5bGUnOiAnbmF0aXZlJ30pCisKKyAgICByYS5nZXRfZmlsZV9yZXZzKHNl bGYucmFfY3R4LCAidHJ1bmsvUkVBRE1FLnR4dCIsIDAsIDEwLCByZXZfaGFuZGxlcikKKworICBk ZWYgdGVzdF91cGRhdGUoc2VsZik6CisgICAgY2xhc3MgVGVzdEVkaXRvcihkZWx0YS5FZGl0b3Ip OgorICAgICAgICBwYXNzCisKKyAgICBlZGl0b3IgPSBUZXN0RWRpdG9yKCkKKworICAgIGVfcHRy LCBlX2JhdG9uID0gZGVsdGEubWFrZV9lZGl0b3IoZWRpdG9yKQorICAgIAorICAgIHJlcG9ydGVy LCByZXBvcnRlcl9iYXRvbiA9IHJhLmRvX3VwZGF0ZShzZWxmLnJhX2N0eCwgMTAsICIiLCBUcnVl LCBlX3B0ciwgZV9iYXRvbikKKworICAgIHJhLnJlcG9ydGVyMl9pbnZva2Vfc2V0X3BhdGgocmVw b3J0ZXIsIHJlcG9ydGVyX2JhdG9uLCAiIiwgMCwgVHJ1ZSwgTm9uZSkKKworICAgIHJhLnJlcG9y dGVyMl9pbnZva2VfZmluaXNoX3JlcG9ydChyZXBvcnRlciwgcmVwb3J0ZXJfYmF0b24pCisKK2Rl ZiBzdWl0ZSgpOgorICAgIHJldHVybiB1bml0dGVzdC5tYWtlU3VpdGUoU3VidmVyc2lvblJlcG9z aXRvcnlUZXN0Q2FzZSwgJ3Rlc3QnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vp dGVDbGFzcz1TdWJ2ZXJzaW9uUmVwb3NpdG9yeVRlc3RTZXR1cCkKKworaWYgX19uYW1lX18gPT0g J19fbWFpbl9fJzoKKyAgICBydW5uZXIgPSB1bml0dGVzdC5UZXh0VGVzdFJ1bm5lcigpCisgICAg cnVubmVyLnJ1bihzdWl0ZSgpKQpkaWZmIC1OdXIgc3VidmVyc2lvbi0xLjMuMS9zdWJ2ZXJzaW9u L2JpbmRpbmdzL3N3aWcvcHl0aG9uL3Rlc3RzL3J1bl9hbGwucHkgc3VidmVyc2lvbi0xLjMuMS5u ZXcvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3B5dGhvbi90ZXN0cy9ydW5fYWxsLnB5Ci0tLSBz dWJ2ZXJzaW9uLTEuMy4xL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vdGVzdHMvcnVu X2FsbC5weQkyMDA1LTEwLTAyIDA1OjE4OjI1LjAwMDAwMDAwMCArMDEwMAorKysgc3VidmVyc2lv bi0xLjMuMS5uZXcvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3B5dGhvbi90ZXN0cy9ydW5fYWxs LnB5CTIwMDYtMDctMDQgMTM6MjY6MDUuMDAwMDAwMDAwICswMTAwCkBAIC0xLDYgKzEsNiBAQAog aW1wb3J0IHN5cywgb3MKIGJpbmRpciA9IG9zLnBhdGguZGlybmFtZShzeXMuYXJndlswXSkKLXN5 cy5wYXRoWzA6MF0gPSBbIG9zLmdldGN3ZCgpLCAiJXMvLmxpYnMiICUgb3MuZ2V0Y3dkKCksIFwK K3N5cy5wYXRoWzA6MF0gPSBbIGJpbmRpciwgb3MuZ2V0Y3dkKCksICIlcy8ubGlicyIgJSBvcy5n ZXRjd2QoKSwgXAogICAgICAgICAgICAgICAgICAgIiVzLy4uIiAlIGJpbmRpciwgIiVzLy4uLy5s aWJzIiAlIGJpbmRpciBdCiAKICMgT1NlcyB3aXRob3V0IFJQQVRIIHN1cHBvcnQgYXJlIGdvaW5n IHRvIGhhdmUgdG8gZG8gdGhpbmdzIGhlcmUgdG8gbWFrZQpAQCAtMTcsNiArMTcsOSBAQAogaW1w b3J0IHVuaXR0ZXN0CiBpbXBvcnQgcG9vbAogaW1wb3J0IHJlcG9zaXRvcnkKK2ltcG9ydCBjbGll bnQKK2ltcG9ydCByYQoraW1wb3J0IHdjCiBpbXBvcnQgdHJhYy52ZXJzaW9uY29udHJvbC50ZXN0 cwogCiAjIFJ1biBhbGwgdGVzdHMKQEAgLTI0LDcgKzI3LDEwIEBACiBkZWYgc3VpdGUoKToKICAg IiIiUnVuIGFsbCB0ZXN0cyIiIgogICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCisgIHN1 aXRlLmFkZFRlc3QoY2xpZW50LnN1aXRlKCkpCiAgIHN1aXRlLmFkZFRlc3QocG9vbC5zdWl0ZSgp KQorICBzdWl0ZS5hZGRUZXN0KHJhLnN1aXRlKCkpCisgIHN1aXRlLmFkZFRlc3Qod2Muc3VpdGUo KSkKICAgc3VpdGUuYWRkVGVzdChyZXBvc2l0b3J5LnN1aXRlKCkpCiAgIHN1aXRlLmFkZFRlc3Qo dHJhYy52ZXJzaW9uY29udHJvbC50ZXN0cy5zdWl0ZSgpKTsKICAgcmV0dXJuIHN1aXRlCmRpZmYg LU51ciBzdWJ2ZXJzaW9uLTEuMy4xL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vdGVz dHMvd2MucHkgc3VidmVyc2lvbi0xLjMuMS5uZXcvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3B5 dGhvbi90ZXN0cy93Yy5weQotLS0gc3VidmVyc2lvbi0xLjMuMS9zdWJ2ZXJzaW9uL2JpbmRpbmdz L3N3aWcvcHl0aG9uL3Rlc3RzL3djLnB5CTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICsw MTAwCisrKyBzdWJ2ZXJzaW9uLTEuMy4xLm5ldy9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcHl0 aG9uL3Rlc3RzL3djLnB5CTIwMDYtMDctMDQgMTM6MjY6MDUuMDAwMDAwMDAwICswMTAwCkBAIC0w LDAgKzEsMTc1IEBACitpbXBvcnQgdW5pdHRlc3QsIG9zLCB0ZW1wZmlsZQoraW1wb3J0IHNodXRp bAorCitmcm9tIHN2biBpbXBvcnQgY29yZSwgcmVwb3MsIHdjLCBjbGllbnQKK2Zyb20gbGlic3Zu LmNvcmUgaW1wb3J0IFN1YnZlcnNpb25FeGNlcHRpb24KKworZnJvbSB0cmFjLnZlcnNpb25jb250 cm9sLnRlc3RzLnN2bl9mcyBpbXBvcnQgU3VidmVyc2lvblJlcG9zaXRvcnlUZXN0U2V0dXAsIFwK KyAgUkVQT1NfUEFUSAorZnJvbSB1cmxsaWIgaW1wb3J0IHBhdGhuYW1lMnVybAorCitjbGFzcyBT dWJ2ZXJzaW9uUmVwb3NpdG9yeVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgIiIiVGVz dCBjYXNlcyBmb3IgdGhlIFN1YnZlcnNpb24gd29ya2luZyBjb3B5IGxheWVyIiIiCisKKyAgZGVm IHNldFVwKHNlbGYpOgorICAgICIiIkxvYWQgYSBTdWJ2ZXJzaW9uIHJlcG9zaXRvcnkiIiIKKwor ICAgIHNlbGYucmVwb3NfdXJsID0gImZpbGU6Ly8iICsgcGF0aG5hbWUydXJsKFJFUE9TX1BBVEgp CisgICAgCisgICAgIyBPcGVuIHJlcG9zaXRvcnkgZGlyZWN0bHkgZm9yIGNyb3NzLWNoZWNraW5n CisgICAgc2VsZi5yZXBvcyA9IHJlcG9zLm9wZW4oUkVQT1NfUEFUSCkKKyAgICBzZWxmLmZzID0g cmVwb3MuZnMoc2VsZi5yZXBvcykKKworICAgIHNlbGYucGF0aCA9IHRlbXBmaWxlLm1rdGVtcCgp CisKKyAgICBjbGllbnRfY3R4ID0gY2xpZW50LmNyZWF0ZV9jb250ZXh0KCkKKyAgICAKKyAgICBy ZXYgPSBjb3JlLnN2bl9vcHRfcmV2aXNpb25fdCgpCisgICAgcmV2LmtpbmQgPSBjb3JlLnN2bl9v cHRfcmV2aXNpb25faGVhZAorCisgICAgY2xpZW50LmNoZWNrb3V0MihzZWxmLnJlcG9zX3VybCwg c2VsZi5wYXRoLCByZXYsIHJldiwgVHJ1ZSwgVHJ1ZSwgCisgICAgICAgICAgICBjbGllbnRfY3R4 KQorCisgICAgc2VsZi53YyA9IHdjLmFkbV9vcGVuMyhOb25lLCBzZWxmLnBhdGgsIFRydWUsIC0x LCBOb25lKQorCisgIGRlZiB0ZXN0X2VudHJ5KHNlbGYpOgorICAgICAgd2NfZW50cnkgPSB3Yy5l bnRyeShzZWxmLnBhdGgsIHNlbGYud2MsIFRydWUpCisKKyAgZGVmIHRlc3RfbG9jayhzZWxmKToK KyAgICAgIGxvY2sgPSB3Yy5hZGRfbG9jayhzZWxmLnBhdGgsIGNvcmUuc3ZuX2xvY2tfY3JlYXRl KGNvcmUuUG9vbCgpKSwgc2VsZi53YykKKyAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgd2Mu YWRtX2xvY2tlZChzZWxmLndjKSkKKyAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgd2MubG9j a2VkKHNlbGYucGF0aCkpCisgICAgICB3Yy5yZW1vdmVfbG9jayhzZWxmLnBhdGgsIHNlbGYud2Mp CisKKyAgZGVmIHRlc3RfdmVyc2lvbihzZWxmKToKKyAgICAgIHdjLnZlcnNpb24oKQorCisgIGRl ZiB0ZXN0X2FjY2Vzc19wYXRoKHNlbGYpOgorICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnBh dGgsIHdjLmFkbV9hY2Nlc3NfcGF0aChzZWxmLndjKSkKKworICBkZWYgdGVzdF9pc19hZG1fZGly KHNlbGYpOgorICAgICAgc2VsZi5hc3NlcnRUcnVlKHdjLmlzX2FkbV9kaXIoIi5zdm4iKSkKKyAg ICAgIHNlbGYuYXNzZXJ0RmFsc2Uod2MuaXNfYWRtX2RpcigiLmZvb3N2biIpKQorCisgIGRlZiB0 ZXN0X2dldF9hZG1fZGlyKHNlbGYpOgorICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uo d2MuZ2V0X2FkbV9kaXIoKSwgYmFzZXN0cmluZykpCisKKyAgZGVmIHRlc3Rfc2V0X2FkbV9kaXIo c2VsZik6CisgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTdWJ2ZXJzaW9uRXhjZXB0aW9uLCB3Yy5z ZXRfYWRtX2RpciwgIi5mb29iYXIiKQorICAgICAgc2VsZi5hc3NlcnRUcnVlKHdjLmlzX2FkbV9k aXIoIi5zdm4iKSkKKyAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uod2MuaXNfYWRtX2RpcigiX3N2biIp KQorICAgICAgc2VsZi5hc3NlcnRGYWxzZSh3Yy5pc19hZG1fZGlyKCIuZm9vYmFyIikpCisgICAg ICB3Yy5zZXRfYWRtX2RpcigiX3N2biIpCisgICAgICBzZWxmLmFzc2VydFRydWUod2MuaXNfYWRt X2RpcigiX3N2biIpKQorICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiX3N2biIsIHdjLmdldF9hZG1f ZGlyKCkpCisgICAgICB3Yy5zZXRfYWRtX2RpcigiLnN2biIpCisgICAgICBzZWxmLmFzc2VydEZh bHNlKHdjLmlzX2FkbV9kaXIoIl9zdm4iKSkKKyAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIi5zdm4i LCB3Yy5nZXRfYWRtX2RpcigpKQorCisgIGRlZiB0ZXN0X2luaXRfdHJhdmVyc2FsX2luZm8oc2Vs Zik6CisgICAgICB3Yy5pbml0X3RyYXZlcnNhbF9pbmZvKCkKKworICBkZWYgdGVzdF9jcmF3bF9y ZXZpc2lvbnMyKHNlbGYpOgorICAgICAgaW5mb3MgPSBbXQorICAgICAgc2V0X3BhdGhzID0gW10K KworICAgICAgZGVmIG5vdGlmeShpbmZvLCBwb29sKToKKyAgICAgICAgICBpbmZvcy5hcHBlbmQo aW5mbykKKworICAgICAgY2xhc3MgTXlSZXBvcnRlcjoKKyAgICAgICAgICBkZWYgX19pbml0X18o c2VsZik6CisgICAgICAgICAgICAgIHNlbGYuX2ZpbmlzaGVkX3JlcG9ydCA9IEZhbHNlCisKKyAg ICAgICAgICBkZWYgYWJvcnRfcmVwb3J0KHNlbGYsIHBvb2wpOgorICAgICAgICAgICAgICBwYXNz CisKKyAgICAgICAgICBkZWYgZmluaXNoX3JlcG9ydChzZWxmLCBwb29sKToKKyAgICAgICAgICAg ICAgc2VsZi5fZmluaXNoZWRfcmVwb3J0ID0gVHJ1ZQorCisgICAgICAgICAgZGVmIHNldF9wYXRo KHNlbGYsIHBhdGgsIHJldmlzaW9uLCBzdGFydF9lbXB0eSwgbG9ja190b2tlbiwgcG9vbCk6Cisg ICAgICAgICAgICAgIHNldF9wYXRocy5hcHBlbmQocGF0aCkKKworICAgICAgICAgIGRlZiBsaW5r X3BhdGgoc2VsZiwgcGF0aCwgdXJsLCByZXZpc2lvbiwgc3RhcnRfZW1wdHksIGxvY2tfdG9rZW4s CisgICAgICAgICAgICAgICAgICAgICAgICBwb29sKToKKyAgICAgICAgICAgICAgcGFzcworCisg ICAgICAgICAgZGVmIGRlbGV0ZV9wYXRoKHNlbGYsIHBhdGgsIHBvb2wpOgorICAgICAgICAgICAg ICBwYXNzCisKKyAgICAgICMgUmVtb3ZlIHRydW5rL1JFQURNRS50eHQKKyAgICAgIHJlYWRtZV9w YXRoID0gb3MucGF0aC5qb2luKHNlbGYucGF0aCwgInRydW5rIiwgIlJFQURNRS50eHQiKQorICAg ICAgc2VsZi5hc3NlcnRfKG9zLnBhdGguZXhpc3RzKHJlYWRtZV9wYXRoKSkKKyAgICAgIG9zLnJl bW92ZShyZWFkbWVfcGF0aCkKKworICAgICAgIyBSZXN0b3JlIHRydW5rL1JFQURNRS50eHQgdXNp bmcgY3Jhd2xfcmV2aXNpb24yCisgICAgICBpbmZvID0gd2MuaW5pdF90cmF2ZXJzYWxfaW5mbygp CisgICAgICByZXBvcnRlciA9IE15UmVwb3J0ZXIoKQorICAgICAgd2MuY3Jhd2xfcmV2aXNpb25z MihzZWxmLnBhdGgsIHNlbGYud2MsIHJlcG9ydGVyLAorICAgICAgICAgICAgICAgICAgICAgICAg ICBUcnVlLCBUcnVlLCBGYWxzZSwgbm90aWZ5LCBpbmZvKQorCisgICAgICAjIENoZWNrIHRoYXQg dGhlIHJlcG9ydCBmaW5pc2hlZAorICAgICAgc2VsZi5hc3NlcnRfKHJlcG9ydGVyLl9maW5pc2hl ZF9yZXBvcnQpCisgICAgICBzZWxmLmFzc2VydEVxdWFsKFsnJ10sIHNldF9wYXRocykKKyAgICAg IHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGluZm9zKSkKKworICAgICAgIyBDaGVjayBjb250ZW50 IG9mIGluZm9zIG9iamVjdAorICAgICAgW2luZm9dID0gaW5mb3MKKyAgICAgIHNlbGYuYXNzZXJ0 RXF1YWwocmVhZG1lX3BhdGgsIGluZm8ucGF0aCkKKyAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29y ZS5zdm5fbm9kZV9maWxlLCBpbmZvLmtpbmQpCisgICAgICBzZWxmLmFzc2VydEVxdWFsKC0xLCBp bmZvLnJldmlzaW9uKQorCisgIGRlZiB0ZXN0X2NyZWF0ZV9ub3RpZnkoc2VsZik6CisgICAgICB3 Yy5jcmVhdGVfbm90aWZ5KHNlbGYucGF0aCwgd2Mubm90aWZ5X2FkZCkKKworICBkZWYgdGVzdF9j aGVja193YyhzZWxmKToKKyAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3Yy5jaGVja193YyhzZWxmLnBh dGgpID4gMCkKKworICBkZWYgdGVzdF9nZXRfYW5jZXN0cnkoc2VsZik6CisgICAgICBzZWxmLmFz c2VydEVxdWFsKFtzZWxmLnJlcG9zX3VybCwgMTJdLCAKKyAgICAgICAgICAgICAgICAgICAgICAg d2MuZ2V0X2FuY2VzdHJ5KHNlbGYucGF0aCwgc2VsZi53YykpCisKKyAgZGVmIHRlc3Rfc3RhdHVz KHNlbGYpOgorICAgICAgd2Muc3RhdHVzMihzZWxmLnBhdGgsIHNlbGYud2MpCisKKyAgZGVmIHRl c3RfaXNfbm9ybWFsX3Byb3Aoc2VsZik6CisgICAgICBzZWxmLmZhaWxJZih3Yy5pc19ub3JtYWxf cHJvcCgnc3ZuOndjOmZvbzpiYXInKSkKKyAgICAgIHNlbGYuZmFpbElmKHdjLmlzX25vcm1hbF9w cm9wKCdzdm46ZW50cnk6Zm9vOmJhcicpKQorICAgICAgc2VsZi5hc3NlcnRfKHdjLmlzX25vcm1h bF9wcm9wKCdzdm46Zm9vOmJhcicpKQorICAgICAgc2VsZi5hc3NlcnRfKHdjLmlzX25vcm1hbF9w cm9wKCdmb3JlaWduOmZvbzpiYXInKSkKKworICBkZWYgdGVzdF9pc193Y19wcm9wKHNlbGYpOgor ICAgICAgc2VsZi5hc3NlcnRfKHdjLmlzX3djX3Byb3AoJ3N2bjp3Yzpmb286YmFyJykpCisgICAg ICBzZWxmLmZhaWxJZih3Yy5pc193Y19wcm9wKCdzdm46ZW50cnk6Zm9vOmJhcicpKQorICAgICAg c2VsZi5mYWlsSWYod2MuaXNfd2NfcHJvcCgnc3ZuOmZvbzpiYXInKSkKKyAgICAgIHNlbGYuZmFp bElmKHdjLmlzX3djX3Byb3AoJ2ZvcmVpZ246Zm9vOmJhcicpKQorCisgIGRlZiB0ZXN0X2lzX2Vu dHJ5X3Byb3Aoc2VsZik6CisgICAgICBzZWxmLmFzc2VydF8od2MuaXNfZW50cnlfcHJvcCgnc3Zu OmVudHJ5OmZvbzpiYXInKSkKKyAgICAgIHNlbGYuZmFpbElmKHdjLmlzX2VudHJ5X3Byb3AoJ3N2 bjp3Yzpmb286YmFyJykpCisgICAgICBzZWxmLmZhaWxJZih3Yy5pc19lbnRyeV9wcm9wKCdzdm46 Zm9vOmJhcicpKQorICAgICAgc2VsZi5mYWlsSWYod2MuaXNfZW50cnlfcHJvcCgnZm9yZWlnbjpm b286YmFyJykpCisKKyAgZGVmIHRlc3RfZ2V0X3ByaXN0aW5lX2NvcHlfcGF0aChzZWxmKToKKyAg ICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgIHdjLmdldF9wcmlzdGluZV9jb3B5X3BhdGgo b3MucGF0aC5qb2luKHNlbGYucGF0aCwgJ2ZvbycpKSwKKyAgICAgICAgb3MucGF0aC5qb2luKHNl bGYucGF0aCwgd2MuZ2V0X2FkbV9kaXIoKSwgJ3RleHQtYmFzZScsICdmb28uc3ZuLWJhc2UnKSkK KworICBkZWYgdGVzdF9nZXRfaWdub3JlcyhzZWxmKToKKyAgICAgIHNlbGYuYXNzZXJ0Xyhpc2lu c3RhbmNlKHdjLmdldF9pZ25vcmVzKE5vbmUsIHNlbGYud2MpLCBsaXN0KSkKKworICBkZWYgdGVz dF9lbnRyaWVzX3JlYWQoc2VsZik6CisgICAgICBlbnRyaWVzID0gd2MuZW50cmllc19yZWFkKHNl bGYud2MsIFRydWUpCisgICAgICAgIAorICAgICAgc2VsZi5hc3NlcnRFcXVhbChbJycsICd0YWdz JywgJ2JyYW5jaGVzJywgJ3RydW5rJ10sIGVudHJpZXMua2V5cygpKQorCisgIGRlZiB0ZWFyRG93 bihzZWxmKToKKyAgICAgIHdjLmFkbV9jbG9zZShzZWxmLndjKQorICAgICAgc2h1dGlsLnJtdHJl ZShzZWxmLnBhdGgpCisKK2RlZiBzdWl0ZSgpOgorICAgIHJldHVybiB1bml0dGVzdC5tYWtlU3Vp dGUoU3VidmVyc2lvblJlcG9zaXRvcnlUZXN0Q2FzZSwgJ3Rlc3QnLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc3VpdGVDbGFzcz1TdWJ2ZXJzaW9uUmVwb3NpdG9yeVRlc3RTZXR1cCkK KworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBydW5uZXIgPSB1bml0dGVzdC5UZXh0 VGVzdFJ1bm5lcigpCisgICAgcnVubmVyLnJ1bihzdWl0ZSgpKQpkaWZmIC1OdXIgc3VidmVyc2lv bi0xLjMuMS9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvc3ZuX2NsaWVudC5pIHN1YnZlcnNpb24t MS4zLjEubmV3L3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9zdm5fY2xpZW50LmkKLS0tIHN1YnZl cnNpb24tMS4zLjEvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3N2bl9jbGllbnQuaQkyMDA2LTAx LTA0IDE3OjIwOjA4LjAwMDAwMDAwMCArMDAwMAorKysgc3VidmVyc2lvbi0xLjMuMS5uZXcvc3Vi dmVyc2lvbi9iaW5kaW5ncy9zd2lnL3N2bl9jbGllbnQuaQkyMDA2LTA3LTA0IDEzOjI2OjA1LjAw MDAwMDAwMCArMDEwMApAQCAtMjUsNiArMjUsNyBAQAogI2VuZGlmCiAKICVpbmNsdWRlIHR5cGVt YXBzLmkKKyVpbmNsdWRlIGNvbnN0cmFpbnRzLmkKIAogJWluY2x1ZGUgc3ZuX2dsb2JhbC5zd2cK ICVpbXBvcnQgY29yZS5pCkBAIC00NCw2ICs0NSwxMSBAQAogICBzdm5fY2xpZW50X2N0eF90ICoq CiB9OwogCislYXBwbHkgUG9pbnRlciBOT05OVUxMIHsgCisgIGNvbnN0IHN2bl9vcHRfcmV2aXNp b25fdCAqcmV2aXNpb24sCisgIGNvbnN0IHN2bl9vcHRfcmV2aXNpb25fdCAqcGVnX3JldmlzaW9u Cit9OworCiAlYXBwbHkgY29uc3QgYXByX2FycmF5X2hlYWRlcl90ICpTVFJJTkdMSVNUIHsKICAg ICBjb25zdCBhcHJfYXJyYXlfaGVhZGVyX3QgKnRhcmdldHMsCiAgICAgY29uc3QgYXByX2FycmF5 X2hlYWRlcl90ICpkaWZmX29wdGlvbnMKQEAgLTY2LDYgKzcyLDE2IEBACiAKICNpZmRlZiBTV0lH UFlUSE9OCiAlYXBwbHkgc3ZuX3N0cmVhbV90ICpXUkFQUEVEX1NUUkVBTSB7IHN2bl9zdHJlYW1f dCAqIH07CisKKy8qIG1lbWJlcnMgb2Ygc3ZuX2NsaWVudF9jdHhfdCAqLworJWFwcGx5IHZvaWQg KlBZX0FTX1ZPSUQgeworICAgIHZvaWQgKm5vdGlmeV9iYXRvbiwKKyAgICB2b2lkICpsb2dfbXNn X2JhdG9uLAorICAgIHZvaWQgKmNhbmNlbF9iYXRvbiwKKyAgICB2b2lkICpub3RpZnlfYmF0b24y LAorICAgIHZvaWQgKmxvZ19tc2dfYmF0b24yLAorICAgIHZvaWQgKnByb2dyZXNzX2JhdG9uCit9 OwogI2VuZGlmCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yMDAsNiArMjE2LDE4IEBACiB9CiAK IC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgICBDYWxsYmFjazogc3ZuX2luZm9fcmVjZWl2ZXJfdAorICAg c3ZuX2NsaWVudF9pbmZvKCkKKyovCisKKyV0eXBlbWFwKHB5dGhvbiwgaW4pIChzdm5faW5mb19y ZWNlaXZlcl90IHJlY2VpdmVyLCAKKyAgICAgICAgICAgICAgICAgICAgICB2b2lkICpyZWNlaXZl cl9iYXRvbikgeworICAgICQxID0gc3ZuX3N3aWdfcHlfaW5mb19yZWNlaXZlcl9mdW5jOworICAg ICQyID0gKHZvaWQgKikkaW5wdXQ7Cit9CisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIFdlIHVz ZSAnc3ZuX3djX3N0YXR1c190IConIGluIHNvbWUgY3VzdG9tIGNvZGUsIGJ1dCBpdCBpc24ndCBp biB0aGUKICAgIEFQSSBhbnl3aGVyZS4gVGh1cywgU1dJRyBkb2Vzbid0IGdlbmVyYXRlIGEgdHlw ZW1hcCBlbnRyeSBmb3IgaXQuIGJ5CiAgICBhZGRpbmcgYSBzaW1wbGUgZGVjbGFyYXRpb24gaGVy ZSwgU1dJRyB3aWxsIGluc2VydCBhIG5hbWUgZm9yIGl0LgpAQCAtNDgzLDYgKzUxMSwyNCBAQAog JWluY2x1ZGUgc3ZuX3RpbWVfaC5zd2cKICVpbmNsdWRlIHN2bl9jbGllbnRfaC5zd2cKIAorI2lm ZGVmIFNXSUdQWVRIT04KKworLyogcHJvdmlkZSBQeXRob24gd2l0aCBhY2Nlc3MgdG8gc29tZSB0 aHVua3MuICovCislY29uc3RhbnQgc3ZuX2NhbmNlbF9mdW5jX3Qgc3ZuX3N3aWdfcHlfY2FuY2Vs X2Z1bmM7CislY29uc3RhbnQgc3ZuX2NsaWVudF9nZXRfY29tbWl0X2xvZzJfdCBzdm5fc3dpZ19w eV9nZXRfY29tbWl0X2xvZ19mdW5jOworJWNvbnN0YW50IHN2bl93Y19ub3RpZnlfZnVuYzJfdCBz dm5fc3dpZ19weV9ub3RpZnlfZnVuYzsKKworI2VuZGlmCisKKyNpZmRlZiBTV0lHUFlUSE9OCisK Ky8qIHByb3ZpZGUgUHl0aG9uIHdpdGggYWNjZXNzIHRvIHNvbWUgdGh1bmtzLiAqLworJWNvbnN0 YW50IHN2bl9jYW5jZWxfZnVuY190IHN2bl9zd2lnX3B5X2NhbmNlbF9mdW5jOworJWNvbnN0YW50 IHN2bl9jbGllbnRfZ2V0X2NvbW1pdF9sb2cyX3Qgc3ZuX3N3aWdfcHlfZ2V0X2NvbW1pdF9sb2df ZnVuYzsKKyVjb25zdGFudCBzdm5fd2Nfbm90aWZ5X2Z1bmMyX3Qgc3ZuX3N3aWdfcHlfbm90aWZ5 X2Z1bmM7CisKKyNlbmRpZgorCiAjaWZkZWYgU1dJR1JVQlkKICVpbmxpbmUgJXsKIHN0YXRpYyBW QUxVRQpkaWZmIC1OdXIgc3VidmVyc2lvbi0xLjMuMS9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcv c3ZuX2NsaWVudC5pLm9yaWcgc3VidmVyc2lvbi0xLjMuMS5uZXcvc3VidmVyc2lvbi9iaW5kaW5n cy9zd2lnL3N2bl9jbGllbnQuaS5vcmlnCi0tLSBzdWJ2ZXJzaW9uLTEuMy4xL3N1YnZlcnNpb24v YmluZGluZ3Mvc3dpZy9zdm5fY2xpZW50Lmkub3JpZwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAw MDAwMCArMDEwMAorKysgc3VidmVyc2lvbi0xLjMuMS5uZXcvc3VidmVyc2lvbi9iaW5kaW5ncy9z d2lnL3N2bl9jbGllbnQuaS5vcmlnCTIwMDYtMDctMDQgMTM6MjY6MDUuMDAwMDAwMDAwICswMTAw CkBAIC0wLDAgKzEsNTU4IEBACisvKgorICogc3ZuX2NsaWVudC5pIDogIFNXSUcgaW50ZXJmYWNl IGZpbGUgZm9yIHN2bl9jbGllbnQuaAorICoKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQg KGMpIDIwMDAtMjAwMyBDb2xsYWJOZXQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRo aXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcs IHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3Ry aWJ1dGlvbi4gIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9zdWJ2 ZXJzaW9uLnRpZ3Jpcy5vcmcvbGljZW5zZS0xLmh0bWwuCisgKiBJZiBuZXdlciB2ZXJzaW9ucyBv ZiB0aGlzIGxpY2Vuc2UgYXJlIHBvc3RlZCB0aGVyZSwgeW91IG1heSB1c2UgYQorICogbmV3ZXIg dmVyc2lvbiBpbnN0ZWFkLCBhdCB5b3VyIG9wdGlvbi4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGNv bnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQorICogaW5kaXZp ZHVhbHMuICBGb3IgZXhhY3QgY29udHJpYnV0aW9uIGhpc3RvcnksIHNlZSB0aGUgcmV2aXNpb24K KyAqIGhpc3RvcnkgYW5kIGxvZ3MsIGF2YWlsYWJsZSBhdCBodHRwOi8vc3VidmVyc2lvbi50aWdy aXMub3JnLy4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworI2lmIGRlZmluZWQoU1dJR1BFUkwpCisl bW9kdWxlICJTVk46Ol9DbGllbnQiCisjZWxpZiBkZWZpbmVkKFNXSUdSVUJZKQorJW1vZHVsZSAi c3ZuOjpleHQ6OmNsaWVudCIKKyNlbHNlCislbW9kdWxlIGNsaWVudAorI2VuZGlmCisKKyVpbmNs dWRlIHR5cGVtYXBzLmkKKyVpbmNsdWRlIGNvbnN0cmFpbnRzLmkKKworJWluY2x1ZGUgc3ZuX2ds b2JhbC5zd2cKKyVpbXBvcnQgY29yZS5pCislaW1wb3J0IGFwci5zd2cKKyVpbXBvcnQgc3ZuX3R5 cGVzLnN3ZworJWltcG9ydCBzdm5fc3RyaW5nLnN3ZworJWltcG9ydCBzdm5fZGVsdGEuaQorJWlt cG9ydCBzdm5fd2MuaQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgJWFwcGx5LWluZyBvZiB0eXBl bWFwcyBkZWZpbmVkIGVsc2V3aGVyZQorKi8KKworJWFwcGx5IFNXSUdUWVBFICoqT1VUUEFSQU0g eworICBzdm5fY2xpZW50X2NvbW1pdF9pbmZvX3QgKiosCisgIHN2bl9hdXRoX3Byb3ZpZGVyX29i amVjdF90ICoqLAorICBzdm5fY2xpZW50X2N0eF90ICoqCit9OworCislYXBwbHkgUG9pbnRlciBO T05OVUxMIHsgCisgIGNvbnN0IHN2bl9vcHRfcmV2aXNpb25fdCAqcmV2aXNpb24sCisgIGNvbnN0 IHN2bl9vcHRfcmV2aXNpb25fdCAqcGVnX3JldmlzaW9uCit9OworCislYXBwbHkgY29uc3QgYXBy X2FycmF5X2hlYWRlcl90ICpTVFJJTkdMSVNUIHsKKyAgICBjb25zdCBhcHJfYXJyYXlfaGVhZGVy X3QgKnRhcmdldHMsCisgICAgY29uc3QgYXByX2FycmF5X2hlYWRlcl90ICpkaWZmX29wdGlvbnMK K307CisKKyVhcHBseSBjb25zdCBjaGFyICpNQVlfQkVfTlVMTCB7CisgICAgY29uc3QgY2hhciAq bmF0aXZlX2VvbCwKKyAgICBjb25zdCBjaGFyICpjb21tZW50Cit9OworCisvKiBzdm5fY2xpZW50 X3Byb3BnZXQoKSwgc3ZuX2NsaWVudF9wcm9wbGlzdCgpLCBzdm5fY2xpZW50X3JldnByb3BfbGlz dCgpICovCislYXBwbHkgYXByX2hhc2hfdCAqKlBST1BIQVNIIHsgYXByX2hhc2hfdCAqKnByb3Bz IH07CisKKy8qIHN2bl9jbGllbnRfdXJsX2Zyb21fcGF0aCgpLCBzdm5fY2xpZW50X3V1aWRfZnJv bV91cmwoKQorICogc3ZuX2NsaWVudF91dWlkX2Zyb21fcGF0aCAqLworJWFwcGx5IGNvbnN0IGNo YXIgKipPVVRQVVQgeworICAgIGNvbnN0IGNoYXIgKip1cmwsCisgICAgY29uc3QgY2hhciAqKnV1 aWQKK307CisKKyNpZmRlZiBTV0lHUFlUSE9OCislYXBwbHkgc3ZuX3N0cmVhbV90ICpXUkFQUEVE X1NUUkVBTSB7IHN2bl9zdHJlYW1fdCAqIH07CisKKy8qIG1lbWJlcnMgb2Ygc3ZuX2NsaWVudF9j dHhfdCAqLworJWFwcGx5IHZvaWQgKlBZX0FTX1ZPSUQgeworICAgIHZvaWQgKm5vdGlmeV9iYXRv biwKKyAgICB2b2lkICpsb2dfbXNnX2JhdG9uLAorICAgIHZvaWQgKmNhbmNlbF9iYXRvbiwKKyAg ICB2b2lkICpub3RpZnlfYmF0b24yLAorICAgIHZvaWQgKmxvZ19tc2dfYmF0b24yLAorICAgIHZv aWQgKnByb2dyZXNzX2JhdG9uCit9OworI2VuZGlmCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBz dm5fY2xpZW50X3Byb3BsaXN0KCkKKyAgIHJldHVybnMgYXByX2FycmF5X2hlYWRlcl90ICogPHN2 bl9jbGllbnRfcHJvcGxpc3RfaXRlbV90ICo+CisqLworCisldHlwZW1hcChpbiwgbnVtaW5wdXRz PTApIGFwcl9hcnJheV9oZWFkZXJfdCAqKnByb3BzIChhcHJfYXJyYXlfaGVhZGVyX3QgKnRlbXAp IHsKKyAgICAkMSA9ICZ0ZW1wOworfQorCisvKiBzdm5fY2xpZW50X3Byb3BsaXN0X2l0ZW1fdCBp cyB1c2VkIGV4Y2x1c2l2ZWx5IGZvciBzdm5fY2xpZW50X3Byb3BsaXN0KCkuCisgICBUaGUgcHl0 aG9uIGJpbmRpbmdzIGNvbnZlcnQgaXQgdG8gYSBuYXRpdmUgcHl0aG9uIHR1cGxlLiAqLworI2lm ZGVmIFNXSUdQWVRIT04KKyAgICAlaWdub3JlIHN2bl9jbGllbnRfcHJvcGxpc3RfaXRlbV90Owor I2VuZGlmCisldHlwZW1hcChweXRob24sIGFyZ291dCwgZnJhZ21lbnQ9InRfb3V0cHV0X2hlbHBl ciIpIGFwcl9hcnJheV9oZWFkZXJfdCAqKnByb3BzCit7CisgICAgc3ZuX2NsaWVudF9wcm9wbGlz dF9pdGVtX3QgKipwcGl0ZW07CisgICAgaW50IGk7CisgICAgaW50IG5lbHRzID0gKCokMSktPm5l bHRzOworICAgIFB5T2JqZWN0ICpsaXN0ID0gUHlMaXN0X05ldyhuZWx0cyk7CisgICAgaWYgKGxp c3QgPT0gTlVMTCkKKyAgICAgICAgU1dJR19mYWlsOworICAgIHBwaXRlbSA9IChzdm5fY2xpZW50 X3Byb3BsaXN0X2l0ZW1fdCAqKikoKiQxKS0+ZWx0czsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbmVs dHM7ICsraSwgKytwcGl0ZW0pIHsKKyAgICAgICAgUHlPYmplY3QgKml0ZW0gPSBQeVR1cGxlX05l dygyKTsKKyAgICAgICAgUHlPYmplY3QgKm5hbWUgPSBQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6 ZSgoKnBwaXRlbSktPm5vZGVfbmFtZS0+ZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoKnBwaXRlbSktPm5vZGVfbmFtZS0+bGVuKTsKKyAg ICAgICAgUHlPYmplY3QgKmhhc2ggPSBzdm5fc3dpZ19weV9wcm9waGFzaF90b19kaWN0KCgqcHBp dGVtKS0+cHJvcF9oYXNoKTsKKworICAgICAgICBpZiAoaXRlbSA9PSBOVUxMIHx8IG5hbWUgPT0g TlVMTCB8fCBoYXNoID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X1hERUNSRUYoaXRlbSk7Cisg ICAgICAgICAgICBQeV9YREVDUkVGKG5hbWUpOworICAgICAgICAgICAgUHlfWERFQ1JFRihoYXNo KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihsaXN0KTsKKyAgICAgICAgICAgIFNXSUdfZmFpbDsK KyAgICAgICAgfQorICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKGl0ZW0sIDAsIG5hbWUpOworICAg ICAgICBQeVR1cGxlX1NFVF9JVEVNKGl0ZW0sIDEsIGhhc2gpOworCisgICAgICAgIFB5TGlzdF9T RVRfSVRFTShsaXN0LCBpLCBpdGVtKTsKKyAgICB9CisgICAgJHJlc3VsdCA9IHRfb3V0cHV0X2hl bHBlcigkcmVzdWx0LCBsaXN0KTsKK30KKworJXR5cGVtYXAocnVieSwgYXJnb3V0KSBhcHJfYXJy YXlfaGVhZGVyX3QgKipwcm9wcworeworICAkcmVzdWx0ID0gc3ZuX3N3aWdfcmJfYXByX2FycmF5 X3RvX2FycmF5X3Byb3BsaXN0X2l0ZW0oKiQxKTsKK30KKworJXR5cGVtYXAocnVieSwgb3V0KSBh cHJfaGFzaF90ICpwcm9wX2hhc2gKK3sKKyAgJHJlc3VsdCA9IHN2bl9zd2lnX3JiX3Byb3BfaGFz aF90b19oYXNoKCQxKTsKK30KKworJXR5cGVtYXAocGVybDUsYXJnb3V0KSBhcHJfYXJyYXlfaGVh ZGVyX3QgKipwcm9wcyB7CisgICAgJHJlc3VsdCA9IHN2bl9zd2lnX3BsX2NvbnZlcnRfYXJyYXko KiQxLAorICAgICAgJGRlc2NyaXB0b3Ioc3ZuX2NsaWVudF9wcm9wbGlzdF9pdGVtX3QgKikpOwor ICAgIGFyZ3ZpKys7Cit9CisKKyV0eXBlbWFwKHBlcmw1LG91dCkgYXByX2hhc2hfdCAqcHJvcF9o YXNoIHsKKyAgICAkcmVzdWx0ID0gc3ZuX3N3aWdfcGxfcHJvcGhhc2hfdG9faGFzaCgkMSk7Cisg ICAgYXJndmkrKzsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIENhbGxiYWNrOiBzdm5fY2xp ZW50X2dldF9jb21taXRfbG9nX3QKKyAgIHN2bl9jbGllbnRfY3R4X3QKKyovCisKKyV0eXBlbWFw KHB5dGhvbixpbikgKHN2bl9jbGllbnRfZ2V0X2NvbW1pdF9sb2dfdCBsb2dfbXNnX2Z1bmMsIAor ICAgICAgICAgICAgICAgICAgICAgdm9pZCAqbG9nX21zZ19iYXRvbikgeworCisgICQxID0gc3Zu X3N3aWdfcHlfZ2V0X2NvbW1pdF9sb2dfZnVuYzsKKyAgJDIgPSAkaW5wdXQ7IC8qIG91ciBmdW5j dGlvbiBpcyB0aGUgYmF0b24uICovCit9CisKKyV0eXBlbWFwKHJ1YnksIGluKSAoc3ZuX2NsaWVu dF9nZXRfY29tbWl0X2xvZzJfdCBsb2dfbXNnX2Z1bmMyLAorICAgICAgICAgICAgICAgICAgICB2 b2lkICpsb2dfbXNnX2JhdG9uMikKK3sKKyAgJDEgPSBzdm5fc3dpZ19yYl9nZXRfY29tbWl0X2xv Z19mdW5jMjsKKyAgJDIgPSAodm9pZCAqKXN2bl9zd2lnX3JiX21ha2VfYmF0b24oJGlucHV0LCBf Z2xvYmFsX3N2bl9zd2lnX3JiX3Bvb2wpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgQ2Fs bGJhY2s6IHN2bl9jYW5jZWxfZnVuY190CisgICBzdm5fY2xpZW50X2N0eF90CisqLworCisldHlw ZW1hcChydWJ5LCBpbikgKHN2bl9jYW5jZWxfZnVuY190IGNhbmNlbF9mdW5jLCB2b2lkICpjYW5j ZWxfYmF0b24pCit7CisgICQxID0gc3ZuX3N3aWdfcmJfY2FuY2VsX2Z1bmM7CisgICQyID0gKHZv aWQgKilzdm5fc3dpZ19yYl9tYWtlX2JhdG9uKCRpbnB1dCwgX2dsb2JhbF9zdm5fc3dpZ19yYl9w b29sKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIENhbGxiYWNrOiBzdm5fd2Nfbm90aWZ5 X2Z1bmMyX3QKKyAgIHN2bl9jbGllbnRfY3R4X3QKKyovCisKKyV0eXBlbWFwKHJ1YnksIGluKSAo c3ZuX3djX25vdGlmeV9mdW5jMl90IG5vdGlmeV9mdW5jMiwgdm9pZCAqbm90aWZ5X2JhdG9uMikK K3sKKyAgJDEgPSBzdm5fc3dpZ19yYl9ub3RpZnlfZnVuYzI7CisgICQyID0gKHZvaWQgKilzdm5f c3dpZ19yYl9tYWtlX2JhdG9uKCRpbnB1dCwgX2dsb2JhbF9zdm5fc3dpZ19yYl9wb29sKTsKK30K KworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgQ2FsbGJhY2s6IHN2bl9jbGllbnRfYmxhbWVfcmVj ZWl2ZXJfdAorICAgc3ZuX2NsaWVudF9ibGFtZSgpCisqLworCisldHlwZW1hcChweXRob24sIGlu KSAoc3ZuX2NsaWVudF9ibGFtZV9yZWNlaXZlcl90IHJlY2VpdmVyLCAKKyAgICAgICAgICAgICAg ICAgICAgICB2b2lkICpyZWNlaXZlcl9iYXRvbikgeworICAgICQxID0gc3ZuX3N3aWdfcHlfY2xp ZW50X2JsYW1lX3JlY2VpdmVyX2Z1bmM7CisgICAgJDIgPSAodm9pZCAqKSRpbnB1dDsKK30KKwor JXR5cGVtYXAocGVybDUsIGluKSAoc3ZuX2NsaWVudF9ibGFtZV9yZWNlaXZlcl90IHJlY2VpdmVy LAorICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcmVjZWl2ZXJfYmF0b24pIHsKKyAgJDEgPSBz dm5fc3dpZ19wbF9ibGFtZV9mdW5jOworICAkMiA9ICRpbnB1dDsgLyogb3VyIGZ1bmN0aW9uIGlz IHRoZSBiYXRvbi4gKi8KK30KKworJXR5cGVtYXAocnVieSwgaW4pIChzdm5fY2xpZW50X2JsYW1l X3JlY2VpdmVyX3QgcmVjZWl2ZXIsCisgICAgICAgICAgICAgICAgICAgIHZvaWQgKnJlY2VpdmVy X2JhdG9uKQoreworICAkMSA9IHN2bl9zd2lnX3JiX2NsaWVudF9ibGFtZV9yZWNlaXZlcl9mdW5j OworICAkMiA9ICh2b2lkICopc3ZuX3N3aWdfcmJfbWFrZV9iYXRvbigkaW5wdXQsIF9nbG9iYWxf c3ZuX3N3aWdfcmJfcG9vbCk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBDYWxsYmFjazog c3ZuX2luZm9fcmVjZWl2ZXJfdAorICAgc3ZuX2NsaWVudF9pbmZvKCkKKyovCisKKyV0eXBlbWFw KHB5dGhvbiwgaW4pIChzdm5faW5mb19yZWNlaXZlcl90IHJlY2VpdmVyLCAKKyAgICAgICAgICAg ICAgICAgICAgICB2b2lkICpyZWNlaXZlcl9iYXRvbikgeworICAgICQxID0gc3ZuX3N3aWdfcHlf aW5mb19yZWNlaXZlcl9mdW5jOworICAgICQyID0gKHZvaWQgKikkaW5wdXQ7Cit9CisKKworLyog LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAgIFdlIHVzZSAnc3ZuX3djX3N0YXR1c190IConIGluIHNvbWUgY3Vz dG9tIGNvZGUsIGJ1dCBpdCBpc24ndCBpbiB0aGUKKyAgIEFQSSBhbnl3aGVyZS4gVGh1cywgU1dJ RyBkb2Vzbid0IGdlbmVyYXRlIGEgdHlwZW1hcCBlbnRyeSBmb3IgaXQuIGJ5CisgICBhZGRpbmcg YSBzaW1wbGUgZGVjbGFyYXRpb24gaGVyZSwgU1dJRyB3aWxsIGluc2VydCBhIG5hbWUgZm9yIGl0 LgorICAgRklYTUU6IFRoaXMgbWF5IGJlIHVudHJ1ZS4gU2VlIHN2bl93Y19zdGF0dXMsIGV0Yy4K KyovCisldHlwZXMoc3ZuX3djX3N0YXR1c190ICopOworCisvKiBXZSBhbHNvIG5lZWQgU1dJRyB0 byB3cmFwIHN2bl9kaXJlbnRfdCBhbmQgc3ZuX2xvY2tfdCBmb3IgdXMuICBUaGV5CisgICBkb24n dCBhcHBlYXIgaW4gYW55IEFQSSwgYnV0IHN2bl9jbGllbnRfbHMgcmV0dXJucyBhIGhhc2ggb2Yg cG9pbnRlcnMKKyAgIHRvIGRpcmVudHMgYW5kIGxvY2tzLiAqLworJXR5cGVzKHN2bl9kaXJlbnRf dCAqKTsKKyV0eXBlcyhzdm5fbG9ja190ICopOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICB0aHVu ayB0aGUgdmFyaW91cyBhdXRoZW50aWNhdGlvbiBwcm9tcHQgZnVuY3Rpb25zLgorICBQRVJMIE5P VEU6IHN0b3JlIHRoZSBpbnB1dGVkIFNWIGluIF9nbG9iYWxfY2FsbGJhY2sgZm9yIHVzZSBpbiB0 aGUKKyAgICAgICAgICAgICBsYXRlciBhcmdvdXQgdHlwZW1hcAorKi8KKyV0eXBlbWFwKHBlcmw1 LCBpbikgKHN2bl9hdXRoX3NpbXBsZV9wcm9tcHRfZnVuY190IHByb21wdF9mdW5jLAorICAgICAg ICAgICAgICAgICAgICAgdm9pZCAqcHJvbXB0X2JhdG9uKSB7CisgICAgJDEgPSBzdm5fc3dpZ19w bF90aHVua19zaW1wbGVfcHJvbXB0OworICAgIF9nbG9iYWxfY2FsbGJhY2sgPSAkaW5wdXQ7Cisg ICAgJDIgPSAodm9pZCAqKSBfZ2xvYmFsX2NhbGxiYWNrOworfQorJXR5cGVtYXAocHl0aG9uLCBp bikgKHN2bl9hdXRoX3NpbXBsZV9wcm9tcHRfZnVuY190IHByb21wdF9mdW5jLAorICAgICAgICAg ICAgICAgICAgICAgIHZvaWQgKnByb21wdF9iYXRvbikgeworICAgICQxID0gc3ZuX3N3aWdfcHlf YXV0aF9zaW1wbGVfcHJvbXB0X2Z1bmM7CisgICAgJDIgPSAkaW5wdXQ7Cit9CisldHlwZW1hcChy dWJ5LCBpbikgKHN2bl9hdXRoX3NpbXBsZV9wcm9tcHRfZnVuY190IHByb21wdF9mdW5jLAorICAg ICAgICAgICAgICAgICAgICB2b2lkICpwcm9tcHRfYmF0b24pIHsKKyAgICAkMSA9IHN2bl9zd2ln X3JiX2F1dGhfc2ltcGxlX3Byb21wdF9mdW5jOworICAgICQyID0gKHZvaWQgKilzdm5fc3dpZ19y Yl9tYWtlX2JhdG9uKCRpbnB1dCwgX2dsb2JhbF9zdm5fc3dpZ19yYl9wb29sKTsKK30KKworJXR5 cGVtYXAocGVybDUsIGluKSAoc3ZuX2F1dGhfdXNlcm5hbWVfcHJvbXB0X2Z1bmNfdCBwcm9tcHRf ZnVuYywKKyAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnByb21wdF9iYXRvbikgeworICAgICQx ID0gc3ZuX3N3aWdfcGxfdGh1bmtfdXNlcm5hbWVfcHJvbXB0OworICAgIF9nbG9iYWxfY2FsbGJh Y2sgPSAkaW5wdXQ7CisgICAgJDIgPSAodm9pZCAqKSBfZ2xvYmFsX2NhbGxiYWNrOworfQorJXR5 cGVtYXAocHl0aG9uLCBpbikgKHN2bl9hdXRoX3VzZXJuYW1lX3Byb21wdF9mdW5jX3QgcHJvbXB0 X2Z1bmMsCisgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcHJvbXB0X2JhdG9uKSB7CisgICAg JDEgPSBzdm5fc3dpZ19weV9hdXRoX3VzZXJuYW1lX3Byb21wdF9mdW5jOworICAgICQyID0gJGlu cHV0OworfQorJXR5cGVtYXAocnVieSwgaW4pIChzdm5fYXV0aF91c2VybmFtZV9wcm9tcHRfZnVu Y190IHByb21wdF9mdW5jLAorICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnByb21wdF9iYXRv bikgeworICAgICQxID0gc3ZuX3N3aWdfcmJfYXV0aF91c2VybmFtZV9wcm9tcHRfZnVuYzsKKyAg ICAkMiA9ICh2b2lkICopc3ZuX3N3aWdfcmJfbWFrZV9iYXRvbigkaW5wdXQsIF9nbG9iYWxfc3Zu X3N3aWdfcmJfcG9vbCk7Cit9CisKKyV0eXBlbWFwKHBlcmw1LCBpbikgKHN2bl9hdXRoX3NzbF9z ZXJ2ZXJfdHJ1c3RfcHJvbXB0X2Z1bmNfdCBwcm9tcHRfZnVuYywKKyAgICAgICAgICAgICAgICAg ICAgIHZvaWQgKnByb21wdF9iYXRvbikgeworICAgICQxID0gc3ZuX3N3aWdfcGxfdGh1bmtfc3Ns X3NlcnZlcl90cnVzdF9wcm9tcHQ7CisgICAgX2dsb2JhbF9jYWxsYmFjayA9ICRpbnB1dDsKKyAg ICAkMiA9ICh2b2lkICopIF9nbG9iYWxfY2FsbGJhY2s7Cit9CisldHlwZW1hcChweXRob24sIGlu KSAoc3ZuX2F1dGhfc3NsX3NlcnZlcl90cnVzdF9wcm9tcHRfZnVuY190IHByb21wdF9mdW5jLAor ICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcHJvbXB0X2JhdG9uKSB7CisgICAgJDEgPSBzdm5f c3dpZ19weV9hdXRoX3NzbF9zZXJ2ZXJfdHJ1c3RfcHJvbXB0X2Z1bmM7CisgICAgJDIgPSAkaW5w dXQ7Cit9CisldHlwZW1hcChydWJ5LCBpbikgKHN2bl9hdXRoX3NzbF9zZXJ2ZXJfdHJ1c3RfcHJv bXB0X2Z1bmNfdCBwcm9tcHRfZnVuYywKKyAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnByb21w dF9iYXRvbikgeworICAgICQxID0gc3ZuX3N3aWdfcmJfYXV0aF9zc2xfc2VydmVyX3RydXN0X3By b21wdF9mdW5jOworICAgICQyID0gKHZvaWQgKilzdm5fc3dpZ19yYl9tYWtlX2JhdG9uKCRpbnB1 dCwgX2dsb2JhbF9zdm5fc3dpZ19yYl9wb29sKTsKK30KKworJXR5cGVtYXAocGVybDUsIGluKSAo c3ZuX2F1dGhfc3NsX2NsaWVudF9jZXJ0X3Byb21wdF9mdW5jX3QgcHJvbXB0X2Z1bmMsCisgICAg ICAgICAgICAgICAgICAgICAgdm9pZCAqcHJvbXB0X2JhdG9uKSB7CisgICAgJDEgPSBzdm5fc3dp Z19wbF90aHVua19zc2xfY2xpZW50X2NlcnRfcHJvbXB0OworICAgIF9nbG9iYWxfY2FsbGJhY2sg PSAkaW5wdXQ7CisgICAgJDIgPSAodm9pZCAqKSBfZ2xvYmFsX2NhbGxiYWNrOworfQorJXR5cGVt YXAocHl0aG9uLCBpbikgKHN2bl9hdXRoX3NzbF9jbGllbnRfY2VydF9wcm9tcHRfZnVuY190IHBy b21wdF9mdW5jLAorICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnByb21wdF9iYXRvbikgewor ICAgICQxID0gc3ZuX3N3aWdfcHlfYXV0aF9zc2xfY2xpZW50X2NlcnRfcHJvbXB0X2Z1bmM7Cisg ICAgJDIgPSAkaW5wdXQ7Cit9CisldHlwZW1hcChydWJ5LCBpbikgKHN2bl9hdXRoX3NzbF9jbGll bnRfY2VydF9wcm9tcHRfZnVuY190IHByb21wdF9mdW5jLAorICAgICAgICAgICAgICAgICAgICAg IHZvaWQgKnByb21wdF9iYXRvbikgeworICAgICQxID0gc3ZuX3N3aWdfcmJfYXV0aF9zc2xfY2xp ZW50X2NlcnRfcHJvbXB0X2Z1bmM7CisgICAgJDIgPSAodm9pZCAqKXN2bl9zd2lnX3JiX21ha2Vf YmF0b24oJGlucHV0LCBfZ2xvYmFsX3N2bl9zd2lnX3JiX3Bvb2wpOworfQorCisldHlwZW1hcChw ZXJsNSwgaW4pIChzdm5fYXV0aF9zc2xfY2xpZW50X2NlcnRfcHdfcHJvbXB0X2Z1bmNfdCBwcm9t cHRfZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwcm9tcHRfYmF0b24pIHsKKyAg ICAkMSA9IHN2bl9zd2lnX3BsX3RodW5rX3NzbF9jbGllbnRfY2VydF9wd19wcm9tcHQ7CisgICAg X2dsb2JhbF9jYWxsYmFjayA9ICRpbnB1dDsKKyAgICAkMiA9ICh2b2lkICopIF9nbG9iYWxfY2Fs bGJhY2s7Cit9CisldHlwZW1hcChweXRob24sIGluKSAoc3ZuX2F1dGhfc3NsX2NsaWVudF9jZXJ0 X3B3X3Byb21wdF9mdW5jX3QgcHJvbXB0X2Z1bmMsCisgICAgICAgICAgICAgICAgICAgICAgdm9p ZCAqcHJvbXB0X2JhdG9uKSB7CisgICAgJDEgPSBzdm5fc3dpZ19weV9hdXRoX3NzbF9jbGllbnRf Y2VydF9wd19wcm9tcHRfZnVuYzsKKyAgICAkMiA9ICRpbnB1dDsKK30KKyV0eXBlbWFwKHJ1Ynks IGluKSAoc3ZuX2F1dGhfc3NsX2NsaWVudF9jZXJ0X3B3X3Byb21wdF9mdW5jX3QgcHJvbXB0X2Z1 bmMsCisgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcHJvbXB0X2JhdG9uKSB7CisgICAgJDEg PSBzdm5fc3dpZ19yYl9hdXRoX3NzbF9jbGllbnRfY2VydF9wd19wcm9tcHRfZnVuYzsKKyAgICAk MiA9ICh2b2lkICopc3ZuX3N3aWdfcmJfbWFrZV9iYXRvbigkaW5wdXQsIF9nbG9iYWxfc3ZuX3N3 aWdfcmJfcG9vbCk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBGb3IgYWxsIHRoZSB2YXJp b3VzIGZ1bmN0aW9ucyB0aGF0IHNldCBhIGNhbGxiYWNrIGJhdG9uIGNyZWF0ZSBhIHJlZmVyZW5j ZQorICogZm9yIHRoZSBiYXRvbiAod2hpY2ggaW4gdGhpcyBjYXNlIGlzIGFuIFNWIHBvaW50aW5n IHRvIHRoZSBjYWxsYmFjaykKKyAqIGFuZCBtYWtlIHRoYXQgYSByZXR1cm4gZnJvbSB0aGUgZnVu Y3Rpb24uICBUaGUgcGVybCBzaWRlIHNob3VsZAorICogdGhlbiBzdG9yZSB0aGUgcmV0dXJuIGlu IHRoZSBvYmplY3QgdGhlIGJhdG9uIGlzIGF0dGFjaGVkIHRvLgorICogSWYgdGhlIGZ1bmN0aW9u IGFscmVhZHkgcmV0dXJucyBhIHZhbHVlIHRoZW4gdGhpcyB2YWx1ZSBpcyBmb2xsb3dzIHRoYXQK KyAqIGZ1bmN0aW9uLiAgSW4gdGhlIGNhc2Ugb2YgdGhlIHByb21wdCBmdW5jdGlvbnMgYXV0aF9v cGVuX2hlbHBlciBpbiBDb3JlLnBtCisgKiBpcyB1c2VkIHRvIHNwbGl0IHVwIHRoZXNlIHZhbHVl cy4KKyovCisldHlwZW1hcChwZXJsNSwgYXJnb3V0KSB2b2lkICpDQUxMQkFDS19CQVRPTiAoU1Yg KiBfZ2xvYmFsX2NhbGxiYWNrKSB7CisgIC8qIGNhbGxiYWNrIGJhdG9uICovCisgICRyZXN1bHQg PSBzdl8ybW9ydGFsIChuZXdSVl9pbmMgKF9nbG9iYWxfY2FsbGJhY2spKTsgYXJndmkrKzsgfQor CisldHlwZW1hcChwZXJsNSwgaW4pIHZvaWQgKkNBTExCQUNLX0JBVE9OIChTViAqIF9nbG9iYWxf Y2FsbGJhY2spIHsKKyAgX2dsb2JhbF9jYWxsYmFjayA9ICRpbnB1dDsKKyAgJDEgPSAodm9pZCAq KSBfZ2xvYmFsX2NhbGxiYWNrOworfQorCisjaWZkZWYgU1dJR1BFUkwKKyVhcHBseSB2b2lkICpD QUxMQkFDS19CQVRPTiB7CisgIHZvaWQgKnByb21wdF9iYXRvbiwKKyAgdm9pZCAqbm90aWZ5X2Jh dG9uLAorICB2b2lkICpsb2dfbXNnX2JhdG9uLAorICB2b2lkICpjYW5jZWxfYmF0b24KK30KKyNl bmRpZgorCisjaWZkZWYgU1dJR1JVQlkKKyVhcHBseSB2b2lkICpDQUxMQkFDS19CQVRPTgorewor ICB2b2lkICpub3RpZnlfYmF0b24yLAorICB2b2lkICpsb2dfbXNnX2JhdG9uMiwKKyAgdm9pZCAq Y2FuY2VsX2JhdG9uCit9CisjZW5kaWYKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCisgKiBDb252ZXJ0 IHBlcmwgaGFzaGVzIGJhY2sgaW50byBhcHJfaGFzaF90ICogZm9yIHNldHRpbmcgdGhlIGNvbmZp ZworICogbWVtYmVyIG9mIHRoZSBzdm5fY2xpZW50X2N0eF90LiAgIFRoaXMgaXMgYW4gdWdseSBo YWNrLCBpdCB3aWxsCisgKiBhbHdheXMgYWxsb2NhdGUgdGhlIG5ldyBhcHJfaGFzaF90IG91dCBv ZiB0aGUgZ2xvYmFsIGN1cnJlbnRfcG9vbAorICogSXQgd291bGQgYmUgYmV0dGVyIHRvIG1ha2Ug YXByX2hhc2hfdCdzIGludG8gbWFnaWMgdmFyaWFibGVzIGluCisgKiBwZXJsIHRoYXQgYXJlIHRp ZWQgdG8gdGhlIGFwcl9oYXNoX3QgaW50ZXJmYWNlLiAgVGhpcyB3b3VsZAorICogcmVtb3ZlIHRo ZSBuZWVkIHRvIGNvbnZlcnQgdG8gYW5kIGZyb20gcGVybCBoYXNocyBhbGwgdGhlIHRpbWUuCisg Ki8KKyV0eXBlbWFwKHBlcmw1LCBpbikgYXByX2hhc2hfdCAqY29uZmlnIHsKKyAgJDEgPSBzdm5f c3dpZ19wbF9vYmpzX3RvX2hhc2hfYnlfbmFtZSAoJGlucHV0LCAic3ZuX2NvbmZpZ190ICoiLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdm5fc3dpZ19wbF9tYWtl X3Bvb2wgKChTViAqKU5VTEwpKTsKK30KKworJXR5cGVtYXAocGVybDUsIG91dCkgYXByX2hhc2hf dCAqY29uZmlnIHsKKyAgJHJlc3VsdCA9IHN2bl9zd2lnX3BsX2NvbnZlcnRfaGFzaCgkMSwgCisg ICAgJGRlc2NyaXB0b3Ioc3ZuX2NvbmZpZ190ICopKTsKKyAgYXJndmkrKzsKK30KKworI2lmZGVm IFNXSUdSVUJZCislcnVudGltZSAleworICAjaW5jbHVkZSA8YXByLmg+CisgICNpbmNsdWRlIDxh cHJfcG9vbHMuaD4KKworICBzdGF0aWMgYXByX3Bvb2xfdCAqCisgIF9zdm5fY2xpZW50X3Bvb2wo dm9pZCkgCisgIHsKKyAgICBzdGF0aWMgYXByX3Bvb2xfdCAqX19zdm5fY2xpZW50X3Bvb2wgPSBO VUxMOworICAgIGlmICghX19zdm5fY2xpZW50X3Bvb2wpIHsKKyAgICAgIGFwcl9wb29sX2NyZWF0 ZSgmX19zdm5fY2xpZW50X3Bvb2wsIE5VTEwpOworICAgIH0KKyAgICByZXR1cm4gX19zdm5fY2xp ZW50X3Bvb2w7CisgIH0KKworICBzdGF0aWMgYXByX3Bvb2xfdCAqCisgIF9zdm5fY2xpZW50X2Nv bmZpZ19wb29sKHZvaWQpIAorICB7CisgICAgc3RhdGljIGFwcl9wb29sX3QgKl9fc3ZuX2NsaWVu dF9jb25maWdfcG9vbCA9IE5VTEw7CisgICAgaWYgKCFfX3N2bl9jbGllbnRfY29uZmlnX3Bvb2wp IHsKKyAgICAgIGFwcl9wb29sX2NyZWF0ZSgmX19zdm5fY2xpZW50X2NvbmZpZ19wb29sLCBfc3Zu X2NsaWVudF9wb29sKCkpOworICAgIH0KKyAgICByZXR1cm4gX19zdm5fY2xpZW50X2NvbmZpZ19w b29sOworICB9CislfQorI2VuZGlmCisKKyV0eXBlbWFwKHJ1YnksIGFyZ291dCkgYXByX2hhc2hf dCAqY29uZmlnIHsKKyAgaWYgKCQxKQorICAgIGFwcl9wb29sX2NsZWFyKF9zdm5fY2xpZW50X2Nv bmZpZ19wb29sKCkpOworfQorCisldHlwZW1hcChydWJ5LCBpbikgYXByX2hhc2hfdCAqY29uZmln IHsKKyAgJDEgPSBzdm5fc3dpZ19yYl9oYXNoX3RvX2Fwcl9oYXNoX3N3aWdfdHlwZSgkaW5wdXQs ICJzdm5fY29uZmlnX3QgKiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX3N2bl9jbGllbnRfY29uZmlnX3Bvb2woKSk7Cit9CisKKyV0eXBlbWFwKHJ1Ynks IG91dCkgYXByX2hhc2hfdCAqY29uZmlnIHsKKyAgJHJlc3VsdCA9IHN2bl9zd2lnX3JiX2Fwcl9o YXNoX3RvX2hhc2hfc3dpZ190eXBlKCQxLCAic3ZuX2NvbmZpZ190ICoiKTsKK30KKworLyogLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqIG92ZXJyaWRlIGRlZmF1bHQgdHlwZW1hcCBmb3Igc3ZuX2NsaWVudF9j b21taXRfaW5mb190IGZvciBwZXJsLiAgU29tZSBjYWxscworICogbmV2ZXIgYWxsb2NhdGUgYW5k IGZpbGwgdGhlIGNvbW1pdF9pbmZvIHN0cnVjdC4gIFRoaXMgbGV0cyB1cyByZXR1cm4KKyAqIHVu ZGVmIGZvciB0aGVtLiAgT3RoZXJ3aXNlIHRoZSBvYmplY3Qgd2UgcGFzcyBiYWNrIGNhbiBjYXVz ZSBjcmFzaGVzICovCisldHlwZW1hcChwZXJsNSwgaW4sIG51bWlucHV0cz0wKSBzdm5fY2xpZW50 X2NvbW1pdF9pbmZvX3QgKiogCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIHN2 bl9jbGllbnRfY29tbWl0X2luZm9fdCAqIHRlbXAgKSB7CisgICAgdGVtcCA9IE5VTEw7CisgICAg JDEgPSAmdGVtcDsKK30KKworJXR5cGVtYXAocGVybDUsIGFyZ291dCkgc3ZuX2NsaWVudF9jb21t aXRfaW5mb190ICoqIHsKKyAgICBpZiAoJDEgPT0gTlVMTCkgeworICAgICAgICAkcmVzdWx0ID0g JlBMX3N2X3VuZGVmOworICAgICAgICBhcmd2aSsrOworICAgIH0gIGVsc2UgeworICAgICAgICAk cmVzdWx0ID0gc3ZfbmV3bW9ydGFsKCk7CisgICAgICAgIFNXSUdfTWFrZVB0cigkcmVzdWx0LCAo dm9pZCAqKSokMSwKKyAgICAgICAgICAgICAgICAgICAgICQqMV9kZXNjcmlwdG9yLCAwKTsKKyAg ICAgICAgYXJndmkrKzsKKyAgICB9Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiB3Y3Byb3Bf Y2hhbmdlcyBtZW1iZXIgb2Ygc3ZuX2NsaWVudF9jb21taXRfaW5mbyBuZWVkcyB0byBiZQorICog Y29udmVydGVkIGJhY2sgYW5kIGZvcnRoIGZyb20gYW4gYXJyYXkgKi8KKworJXR5cGVtYXAocGVy bDUsIG91dCkgYXByX2FycmF5X2hlYWRlcl90ICp3Y3Byb3BfY2hhbmdlcyB7CisgICAgJHJlc3Vs dCA9IHN2bl9zd2lnX3BsX2NvbnZlcnRfYXJyYXkoJDEsCisgICAgICAkZGVzY3JpcHRvcihzdm5f cHJvcF90ICopKTsKKyAgICBhcmd2aSsrOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogd3Jh cCBzdm5fY2xpZW50X2NyZWF0ZV9jb250ZXh0ICovCisKKyV0eXBlbWFwKHBlcmw1LGluLG51bWlu cHV0cz0wKSBzdm5fY2xpZW50X2N0eF90ICoqIChzdm5fY2xpZW50X2N0eF90ICp0ZW1wKSB7Cisg ICAgJDEgPSAmdGVtcDsKK30KKworJXR5cGVtYXAocGVybDUsYXJnb3V0KSBzdm5fY2xpZW50X2N0 eF90ICoqIHsKKyAgKCokMSktPm5vdGlmeV9mdW5jID0gc3ZuX3N3aWdfcGxfbm90aWZ5X2Z1bmM7 CisgICgqJDEpLT5ub3RpZnlfYmF0b24gPSAodm9pZCAqKSAmUExfc3ZfdW5kZWY7CisgICgqJDEp LT5sb2dfbXNnX2Z1bmMgPSBzdm5fc3dpZ19wbF9nZXRfY29tbWl0X2xvZ19mdW5jOworICAoKiQx KS0+bG9nX21zZ19iYXRvbiA9ICh2b2lkICopICZQTF9zdl91bmRlZjsKKyAgKCokMSktPmNhbmNl bF9mdW5jID0gc3ZuX3N3aWdfcGxfY2FuY2VsX2Z1bmM7CisgICgqJDEpLT5jYW5jZWxfYmF0b24g PSAodm9pZCAqKSAmUExfc3ZfdW5kZWY7CisgICRyZXN1bHQgPSBzdl9uZXdtb3J0YWwoKTsKKyAg U1dJR19NYWtlUHRyKCRyZXN1bHQsICh2b2lkICopKiQxLAorICAgICAgICAgICAgICAgJCoxX2Rl c2NyaXB0b3IsIDApOworICBhcmd2aSsrOworfSAgCisKKy8qIHN2bl9jbGllbnRfdXBkYXRlMiAq LworJXR5cGVtYXAocnVieSwgaW4sIG51bWlucHV0cz0wKSBhcHJfYXJyYXlfaGVhZGVyX3QgKipy ZXN1bHRfcmV2cyAoYXByX2FycmF5X2hlYWRlcl90ICp0ZW1wKQoreworICAkMSA9ICZ0ZW1wOwor fQorCisldHlwZW1hcChydWJ5LCBhcmdvdXQsIGZyYWdtZW50PSJvdXRwdXRfaGVscGVyIikgYXBy X2FycmF5X2hlYWRlcl90ICoqcmVzdWx0X3JldnMKK3sKKyAgJHJlc3VsdCA9IG91dHB1dF9oZWxw ZXIoJHJlc3VsdCwgc3ZuX3N3aWdfcmJfYXByX2FycmF5X3RvX2FycmF5X3N2bl9yZXYoKiQxKSk7 Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyV7CisjaWZkZWYgU1dJR1BZVEhPTgorI2lu Y2x1ZGUgInN3aWd1dGlsX3B5LmgiCisjZW5kaWYKKworI2lmZGVmIFNXSUdQRVJMCisjaW5jbHVk ZSAic3dpZ3V0aWxfcGwuaCIKKyNlbmRpZgorCisjaWZkZWYgU1dJR1JVQlkKKyNpbmNsdWRlIDxh cHUuaD4KKyNpbmNsdWRlIDxhcHJfeGxhdGUuaD4KKyNpbmNsdWRlICJzd2lndXRpbF9yYi5oIgor I2VuZGlmCislfQorCislaW5jbHVkZSBzdm5fdGltZV9oLnN3ZworJWluY2x1ZGUgc3ZuX2NsaWVu dF9oLnN3ZworCisjaWZkZWYgU1dJR1BZVEhPTgorCisvKiBwcm92aWRlIFB5dGhvbiB3aXRoIGFj Y2VzcyB0byBzb21lIHRodW5rcy4gKi8KKyVjb25zdGFudCBzdm5fY2FuY2VsX2Z1bmNfdCBzdm5f c3dpZ19weV9jYW5jZWxfZnVuYzsKKyVjb25zdGFudCBzdm5fY2xpZW50X2dldF9jb21taXRfbG9n Ml90IHN2bl9zd2lnX3B5X2dldF9jb21taXRfbG9nX2Z1bmM7CislY29uc3RhbnQgc3ZuX3djX25v dGlmeV9mdW5jMl90IHN2bl9zd2lnX3B5X25vdGlmeV9mdW5jOworCisjZW5kaWYKKworI2lmZGVm IFNXSUdSVUJZCislaW5saW5lICV7CitzdGF0aWMgVkFMVUUKK3N2bl9jbGllbnRfc2V0X2xvZ19t c2dfZnVuYzIoc3ZuX2NsaWVudF9jdHhfdCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzdm5fY2xpZW50X2dldF9jb21taXRfbG9nMl90IGxvZ19tc2dfZnVuYzIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmxvZ19tc2dfYmF0b24yLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKQoreworICBjdHgtPmxvZ19tc2dfZnVu YzIgPSBsb2dfbXNnX2Z1bmMyOworICBjdHgtPmxvZ19tc2dfYmF0b24yID0gbG9nX21zZ19iYXRv bjI7CisgIHJldHVybiAoVkFMVUUpbG9nX21zZ19iYXRvbjI7Cit9CisgCitzdGF0aWMgVkFMVUUK K3N2bl9jbGllbnRfc2V0X25vdGlmeV9mdW5jMihzdm5fY2xpZW50X2N0eF90ICpjdHgsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX3djX25vdGlmeV9mdW5jMl90IG5vdGlmeV9mdW5j MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpub3RpZnlfYmF0b24yLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpCit7CisgIGN0eC0+bm90 aWZ5X2Z1bmMyID0gbm90aWZ5X2Z1bmMyOworICBjdHgtPm5vdGlmeV9iYXRvbjIgPSBub3RpZnlf YmF0b24yOworICByZXR1cm4gKFZBTFVFKW5vdGlmeV9iYXRvbjI7Cit9CisKK3N0YXRpYyBWQUxV RQorc3ZuX2NsaWVudF9zZXRfY2FuY2VsX2Z1bmMoc3ZuX2NsaWVudF9jdHhfdCAqY3R4LAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX2NhbmNlbF9mdW5jX3QgY2FuY2VsX2Z1bmMsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjYW5jZWxfYmF0b24sCisgICAgICAgICAg ICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKQoreworICBjdHgtPmNhbmNlbF9mdW5j ID0gY2FuY2VsX2Z1bmM7CisgIGN0eC0+Y2FuY2VsX2JhdG9uID0gY2FuY2VsX2JhdG9uOworICBy ZXR1cm4gKFZBTFVFKWNhbmNlbF9iYXRvbjsKK30KKyV9CisjZW5kaWYKZGlmZiAtTnVyIHN1YnZl cnNpb24tMS4zLjEvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3N2bl9kZWx0YS5pIHN1YnZlcnNp b24tMS4zLjEubmV3L3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9zdm5fZGVsdGEuaQotLS0gc3Vi dmVyc2lvbi0xLjMuMS9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvc3ZuX2RlbHRhLmkJMjAwNS0w OS0yOSAwMDo1Njo1Mi4wMDAwMDAwMDAgKzAxMDAKKysrIHN1YnZlcnNpb24tMS4zLjEubmV3L3N1 YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9zdm5fZGVsdGEuaQkyMDA2LTA3LTA0IDEzOjI2OjA1LjAw MDAwMDAwMCArMDEwMApAQCAtNDcsNyArNDcsOCBAQAogICAgIGNvbnN0IGNoYXIgKmVycm9yX2lu Zm8sCiAgICAgY29uc3QgY2hhciAqY29weWZyb21fcGF0aCwKICAgICBjb25zdCBjaGFyICpjb3B5 X3BhdGgsCi0gICAgY29uc3QgY2hhciAqYmFzZV9jaGVja3N1bQorICAgIGNvbnN0IGNoYXIgKmJh c2VfY2hlY2tzdW0sCisgICAgY29uc3QgY2hhciAqdGV4dF9jaGVja3N1bQogfTsKIAogI2lmZGVm IFNXSUdQWVRIT04KQEAgLTE0NSw2ICsxNDYsMTcgQEAKIAogJWluY2x1ZGUgc3ZuX2RlbHRhX2gu c3dnCiAKKyNpZmRlZiBTV0lHUFlUSE9OCislaW5saW5lICV7Citzdm5fZXJyb3JfdCAqc3ZuX2Rl bHRhX2ludm9rZV90eGRlbHRhX3dpbmRvd19oYW5kbGVyICgKKyAgc3ZuX3R4ZGVsdGFfd2luZG93 X2hhbmRsZXJfdCBoYW5kbGVyLAorICBzdm5fdHhkZWx0YV93aW5kb3dfdCAqd2luZG93LCB2b2lk ICpiYXRvbikgeworICByZXR1cm4gaGFuZGxlcih3aW5kb3csIGJhdG9uKTsKK30KKyV9CisjZW5k aWYKKworCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgaGFuZGxlIHN2bl90eGRlbHRhX3RvX3N2bmRp ZmYoKS4KICovCmRpZmYgLU51ciBzdWJ2ZXJzaW9uLTEuMy4xL3N1YnZlcnNpb24vYmluZGluZ3Mv c3dpZy9zdm5fcmEuaSBzdWJ2ZXJzaW9uLTEuMy4xLm5ldy9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3 aWcvc3ZuX3JhLmkKLS0tIHN1YnZlcnNpb24tMS4zLjEvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2ln L3N2bl9yYS5pCTIwMDUtMTAtMDQgMTY6NDM6NDAuMDAwMDAwMDAwICswMTAwCisrKyBzdWJ2ZXJz aW9uLTEuMy4xLm5ldy9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvc3ZuX3JhLmkJMjAwNi0wNy0w NCAxMzoyNjo0NC4wMDAwMDAwMDAgKzAxMDAKQEAgLTI1LDYgKzI1LDcgQEAKICNlbmRpZgogCiAl aW5jbHVkZSB0eXBlbWFwcy5pCislaW5jbHVkZSBjb25zdHJhaW50cy5pCiAKICVpbmNsdWRlIHN2 bl9nbG9iYWwuc3dnCiAlaW1wb3J0IGFwci5zd2cKQEAgLTQ4LDEzICs1MywxNiBAQAogICAgIGNv bnN0IHN2bl9yYV9yZXBvcnRlcjJfdCAqKnJlcG9ydGVyLAogICAgIHZvaWQgKipyZXBvcnRfYmF0 b24sCiAgICAgc3ZuX2RpcmVudF90ICoqZGlyZW50LAotICAgIHN2bl9sb2NrX3QgKipsb2NrCisg ICAgc3ZuX2xvY2tfdCAqKmxvY2ssCisgICAgY29uc3Qgc3ZuX2RlbHRhX2VkaXRvcl90ICoqCiB9 OwogCiAlYXBwbHkgYXByX2hhc2hfdCAqKlBST1BIQVNIIHsgYXByX2hhc2hfdCAqKnByb3BzIH07 CislYXBwbHkgYXByX2hhc2hfdCAqKkRJUkVOVEhBU0ggeyBhcHJfaGFzaF90ICoqZGlyZW50cyB9 OwogCiAlYXBwbHkgY29uc3QgY2hhciAqTUFZX0JFX05VTEwgewotICAgIGNvbnN0IGNoYXIgKmNv bW1lbnQKKyAgICBjb25zdCBjaGFyICpjb21tZW50LAorICAgIGNvbnN0IGNoYXIgKmxvY2tfdG9r ZW4KIH07CiAKICVhcHBseSBhcHJfaGFzaF90ICpTVFJJTkdfVE9fU1RSSU5HIHsKQEAgLTExMiw2 ICsxMjAsMTYgQEAKICAgc3ZuX3N3aWdfcmJfc2V0dXBfcmFfY2FsbGJhY2tzKCYkMSwgJiQyLCAk aW5wdXQsIF9nbG9iYWxfcG9vbCk7CiB9CiAKKyV0eXBlbWFwKHB5dGhvbiwgaW4pIChjb25zdCBz dm5fcmFfY2FsbGJhY2tzMl90ICpjYWxsYmFja3MsIAorICAgICAgICAgICAgICAgICAgICAgIHZv aWQgKmNhbGxiYWNrX2JhdG9uKSB7CisgIHN2bl9zd2lnX3B5X3NldHVwX3JhX2NhbGxiYWNrcygm JDEsICYkMiwgJGlucHV0LCBfZ2xvYmFsX3Bvb2wpOworfQorCisldHlwZW1hcChweXRob24sIGlu KSAoY29uc3Qgc3ZuX3JhX2NhbGxiYWNrczJfdCAqY2FsbGJhY2tzLCAKKyAgICAgICAgICAgICAg ICAgICAgICB2b2lkICpjYWxsYmFja19iYXRvbikgeworICBzdm5fc3dpZ19weV9zZXR1cF9yYV9j YWxsYmFja3MoJiQxLCAmJDIsICRpbnB1dCwgX2dsb2JhbF9wb29sKTsKK30KKwogJXR5cGVtYXAo cGVybDUsIGluKSBhcHJfaGFzaF90ICpjb25maWcgewogICAgICQxID0gc3ZuX3N3aWdfcGxfb2Jq c190b19oYXNoX2J5X25hbWUgKCRpbnB1dCwgInN2bl9jb25maWdfdCAqIiwKIAkJCQkJICAgX2ds b2JhbF9wb29sKTsKQEAgLTEzNCw2ICsxNTIsMjIgQEAKICAgJDEgPSBzdm5fc3dpZ19yYl9oYXNo X3RvX2Fwcl9oYXNoX3Jldm51bSgkaW5wdXQsIF9nbG9iYWxfcG9vbCk7CiB9CiAKKyNpZmRlZiBT V0lHUFlUSE9OCisldHlwZW1hcChpbikgKHN2bl9yYV9maWxlX3Jldl9oYW5kbGVyX3QgaGFuZGxl ciwgdm9pZCAqaGFuZGxlcl9iYXRvbikKK3sKKyAgICQxID0gc3ZuX3N3aWdfcHlfcmFfZmlsZV9y ZXZfaGFuZGxlcl9mdW5jOworICAgJDIgPSAodm9pZCAqKSRpbnB1dDsKK30KKyNlbmRpZgorCisj aWZkZWYgU1dJR1BZVEhPTgorJXR5cGVtYXAoaW4pIChjb25zdCBzdm5fcmFfcmVwb3J0ZXIyX3Qg KnJlcG9ydGVyLCB2b2lkICpyZXBvcnRfYmF0b24pCit7CisgICQxID0gKHN2bl9yYV9yZXBvcnRl cjJfdCAqKSZzd2lnX3B5X3JhX3JlcG9ydGVyMjsKKyAgJDIgPSAodm9pZCAqKSRpbnB1dDsKK30K KyNlbmRpZgorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiAlewpkaWZmIC1OdXIgc3VidmVyc2lv bi0xLjMuMS9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvc3ZuX3JhLmkub3JpZyBzdWJ2ZXJzaW9u LTEuMy4xLm5ldy9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvc3ZuX3JhLmkub3JpZwotLS0gc3Vi dmVyc2lvbi0xLjMuMS9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvc3ZuX3JhLmkub3JpZwkxOTcw LTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgc3VidmVyc2lvbi0xLjMuMS5uZXcv c3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3N2bl9yYS5pLm9yaWcJMjAwNi0wNy0wNCAxMzoyNjow NS4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSwxODEgQEAKKy8qCisgKiBzdm5fcmEuaSA6ICBT V0lHIGludGVyZmFjZSBmaWxlIGZvciBzdm5fcmEuaAorICoKKyAqID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBD b3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBDb2xsYWJOZXQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor ICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxl IENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0 aGlzIGRpc3RyaWJ1dGlvbi4gIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0 dHA6Ly9zdWJ2ZXJzaW9uLnRpZ3Jpcy5vcmcvbGljZW5zZS0xLmh0bWwuCisgKiBJZiBuZXdlciB2 ZXJzaW9ucyBvZiB0aGlzIGxpY2Vuc2UgYXJlIHBvc3RlZCB0aGVyZSwgeW91IG1heSB1c2UgYQor ICogbmV3ZXIgdmVyc2lvbiBpbnN0ZWFkLCBhdCB5b3VyIG9wdGlvbi4KKyAqCisgKiBUaGlzIHNv ZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQor ICogaW5kaXZpZHVhbHMuICBGb3IgZXhhY3QgY29udHJpYnV0aW9uIGhpc3RvcnksIHNlZSB0aGUg cmV2aXNpb24KKyAqIGhpc3RvcnkgYW5kIGxvZ3MsIGF2YWlsYWJsZSBhdCBodHRwOi8vc3VidmVy c2lvbi50aWdyaXMub3JnLy4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworI2lmIGRlZmluZWQoU1dJ R1BFUkwpCislbW9kdWxlICJTVk46Ol9SYSIKKyNlbGlmIGRlZmluZWQoU1dJR1JVQlkpCislbW9k dWxlICJzdm46OmV4dDo6cmEiCisjZWxzZQorJW1vZHVsZSByYQorI2VuZGlmCisKKyVpbmNsdWRl IHR5cGVtYXBzLmkKKyVpbmNsdWRlIGNvbnN0cmFpbnRzLmkKKworJWluY2x1ZGUgc3ZuX2dsb2Jh bC5zd2cKKyVpbXBvcnQgYXByLnN3ZworJWltcG9ydCBjb3JlLmkKKyVpbXBvcnQgc3ZuX3R5cGVz LnN3ZworJWltcG9ydCBzdm5fc3RyaW5nLnN3ZworJWltcG9ydCBzdm5fZGVsdGEuaQorCisvKiBi YWQgcG9vbCBjb252ZW50aW9uLCBhbHNvIHRoZXNlIHNob3VsZCBub3QgYmUgcHVibGljIGludGVy ZmFjZSBhdCBhbGwKKyAgIGFzIGNvbW1lbnRlZCBieSBzdXNzbWFuLiAqLworJWlnbm9yZSBzdm5f cmFfc3ZuX2luaXQ7CislaWdub3JlIHN2bl9yYV9sb2NhbF9pbml0OworJWlnbm9yZSBzdm5fcmFf ZGF2X2luaXQ7CisKKyVhcHBseSBQb2ludGVyIE5PTk5VTEwgeyBzdm5fcmFfY2FsbGJhY2tzMl90 ICpjYWxsYmFja3MgfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICVhcHBseS1pbmcgb2YgdHlw ZW1hcHMgZGVmaW5lZCBlbHNld2hlcmUKKyovCislYXBwbHkgU1dJR1RZUEUgKipPVVRQQVJBTSB7 CisgICAgc3ZuX3JhX3BsdWdpbl90ICoqLAorICAgIHN2bl9yYV9zZXNzaW9uX3QgKiosCisgICAg Y29uc3Qgc3ZuX3JhX3JlcG9ydGVyMl90ICoqcmVwb3J0ZXIsCisgICAgdm9pZCAqKnJlcG9ydF9i YXRvbiwKKyAgICBzdm5fZGlyZW50X3QgKipkaXJlbnQsCisgICAgc3ZuX2xvY2tfdCAqKmxvY2ss CisgICAgY29uc3Qgc3ZuX2RlbHRhX2VkaXRvcl90ICoqCit9OworCislYXBwbHkgYXByX2hhc2hf dCAqKlBST1BIQVNIIHsgYXByX2hhc2hfdCAqKnByb3BzIH07CislYXBwbHkgYXByX2hhc2hfdCAq KkRJUkVOVEhBU0ggeyBhcHJfaGFzaF90ICoqZGlyZW50cyB9OworCislYXBwbHkgY29uc3QgY2hh ciAqTUFZX0JFX05VTEwgeworICAgIGNvbnN0IGNoYXIgKmNvbW1lbnQsCisgICAgY29uc3QgY2hh ciAqbG9ja190b2tlbgorfTsKKworJWFwcGx5IGFwcl9oYXNoX3QgKlNUUklOR19UT19TVFJJTkcg eworICBhcHJfaGFzaF90ICpsb2NrX3Rva2VucywKKyAgYXByX2hhc2hfdCAqcGF0aF90b2tlbnMK K307CisKKyNpZmRlZiBTV0lHUFlUSE9OCislYXBwbHkgc3ZuX3N0cmVhbV90ICpXUkFQUEVEX1NU UkVBTSB7IHN2bl9zdHJlYW1fdCAqIH07CisjZW5kaWYKKworLyogLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAg IGhhbmRsZSBzdm5fcmFfZ2V0X2xvY2F0aW9ucygpCisqLworJXR5cGVtYXAocHl0aG9uLGluKSBh cHJfYXJyYXlfaGVhZGVyX3QgKmxvY2F0aW9uX3JldmlzaW9ucyB7CisgICAgJDEgPSAoYXByX2Fy cmF5X2hlYWRlcl90ICopIHN2bl9zd2lnX3B5X3Jldm51bXNfdG9fYXJyYXkoJGlucHV0LCAKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfZ2xvYmFsX3Bvb2wpOworICAgIGlmICgkMSA9PSBOVUxMKQorICAgICAgICBTV0lHX2ZhaWw7 Cit9CisldHlwZW1hcChweXRob24saW4sbnVtaW5wdXRzPTApIGFwcl9oYXNoX3QgKipsb2NhdGlv bnMgPSBhcHJfaGFzaF90ICoqT1VUUFVUOworJXR5cGVtYXAocHl0aG9uLGFyZ291dCxmcmFnbWVu dD0idF9vdXRwdXRfaGVscGVyIikgYXByX2hhc2hfdCAqKmxvY2F0aW9ucyB7CisgICAgJHJlc3Vs dCA9IHRfb3V0cHV0X2hlbHBlcigkcmVzdWx0LCBzdm5fc3dpZ19weV9sb2NhdGlvbmhhc2hfdG9f ZGljdCgqJDEpKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIHRodW5rIHJhX2NhbGxiYWNr CisqLworJWFwcGx5IGNvbnN0IGNoYXIgKipPVVRQVVQgeworICAgIGNvbnN0IGNoYXIgKip1cmws CisgICAgY29uc3QgY2hhciAqKnV1aWQKK307CisKKyVhcHBseSBjb25zdCBhcHJfYXJyYXlfaGVh ZGVyX3QgKlNUUklOR0xJU1QgeworICAgIGNvbnN0IGFwcl9hcnJheV9oZWFkZXJfdCAqcGF0aHMK K307CisKKyV0eXBlbWFwKHBlcmw1LCBpbikgKGNvbnN0IHN2bl9kZWx0YV9lZGl0b3JfdCAqdXBk YXRlX2VkaXRvciwKKwkJICAgICB2b2lkICp1cGRhdGVfYmF0b24pIHsKKyAgICBzdm5fZGVsdGFf bWFrZV9lZGl0b3IoJiQxLCAmJDIsICRpbnB1dCwgX2dsb2JhbF9wb29sKTsKK30KKyV0eXBlbWFw KHBlcmw1LCBpbikgKGNvbnN0IHN2bl9kZWx0YV9lZGl0b3JfdCAqZGlmZl9lZGl0b3IsCisJCSAg ICAgdm9pZCAqZGlmZl9iYXRvbikgeworICAgIHN2bl9kZWx0YV9tYWtlX2VkaXRvcigmJDEsICYk MiwgJGlucHV0LCBfZ2xvYmFsX3Bvb2wpOworfQorCisldHlwZW1hcChwZXJsNSwgaW4pIChjb25z dCBzdm5fcmFfY2FsbGJhY2tzX3QgKmNhbGxiYWNrcywKKwkJICAgICB2b2lkICpjYWxsYmFja19i YXRvbikgeworICAgIHN2bl9yYV9tYWtlX2NhbGxiYWNrcygmJDEsICYkMiwgJGlucHV0LCBfZ2xv YmFsX3Bvb2wpOworfQorCisldHlwZW1hcChydWJ5LCBpbikgKGNvbnN0IHN2bl9yYV9jYWxsYmFj a3MyX3QgKmNhbGxiYWNrcywKKyAgICAgICAgICAgICAgICAgICAgdm9pZCAqY2FsbGJhY2tfYmF0 b24pCit7CisgIHN2bl9zd2lnX3JiX3NldHVwX3JhX2NhbGxiYWNrcygmJDEsICYkMiwgJGlucHV0 LCBfZ2xvYmFsX3Bvb2wpOworfQorCisldHlwZW1hcChweXRob24sIGluKSAoc3ZuX3JhX2NhbGxi YWNrczJfdCAqY2FsbGJhY2tzLCAKKyAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjYWxsYmFj a19iYXRvbikgeworICBzdm5fc3dpZ19weV9zZXR1cF9yYV9jYWxsYmFja3MoJiQxLCAmJDIsICRp bnB1dCwgX2dsb2JhbF9wb29sKTsKK30KKworJXR5cGVtYXAocGVybDUsIGluKSBhcHJfaGFzaF90 ICpjb25maWcgeworICAgICQxID0gc3ZuX3N3aWdfcGxfb2Jqc190b19oYXNoX2J5X25hbWUgKCRp bnB1dCwgInN2bl9jb25maWdfdCAqIiwKKwkJCQkJICAgX2dsb2JhbF9wb29sKTsKK30KKworJXR5 cGVtYXAocnVieSwgaW4pIChzdm5fcmFfbG9ja19jYWxsYmFja190IGxvY2tfZnVuYywgdm9pZCAq bG9ja19iYXRvbikKK3sKKyAgJDEgPSBzdm5fc3dpZ19yYl9yYV9sb2NrX2NhbGxiYWNrOworICAk MiA9ICh2b2lkICopc3ZuX3N3aWdfcmJfbWFrZV9iYXRvbigkaW5wdXQsIF9nbG9iYWxfc3ZuX3N3 aWdfcmJfcG9vbCk7Cit9CisKKyV0eXBlbWFwKHJ1YnksIGluKSAoc3ZuX3JhX2ZpbGVfcmV2X2hh bmRsZXJfdCBoYW5kbGVyLCB2b2lkICpoYW5kbGVyX2JhdG9uKQoreworICAkMSA9IHN2bl9zd2ln X3JiX3JhX2ZpbGVfcmV2X2hhbmRsZXI7CisgICQyID0gKHZvaWQgKilzdm5fc3dpZ19yYl9tYWtl X2JhdG9uKCRpbnB1dCwgX2dsb2JhbF9zdm5fc3dpZ19yYl9wb29sKTsKK30KKworJXR5cGVtYXAo cnVieSwgaW4pIGFwcl9oYXNoX3QgKnBhdGhfcmV2cworeworICAkMSA9IHN2bl9zd2lnX3JiX2hh c2hfdG9fYXByX2hhc2hfcmV2bnVtKCRpbnB1dCwgX2dsb2JhbF9wb29sKTsKK30KKworI2lmZGVm IFNXSUdQWVRIT04KKyV0eXBlbWFwKGluKSAoc3ZuX3JhX2ZpbGVfcmV2X2hhbmRsZXJfdCBoYW5k bGVyLCB2b2lkICpoYW5kbGVyX2JhdG9uKQoreworICAgJDEgPSBzdm5fc3dpZ19weV9yYV9maWxl X3Jldl9oYW5kbGVyX2Z1bmM7CisgICAkMiA9ICh2b2lkICopJGlucHV0OworfQorI2VuZGlmCisK KyNpZmRlZiBTV0lHUFlUSE9OCisldHlwZW1hcChpbikgKGNvbnN0IHN2bl9yYV9yZXBvcnRlcjJf dCAqcmVwb3J0ZXIsIHZvaWQgKnJlcG9ydF9iYXRvbikKK3sKKyAgJDEgPSAoc3ZuX3JhX3JlcG9y dGVyMl90ICopJnN3aWdfcHlfcmFfcmVwb3J0ZXIyOworICAkMiA9ICh2b2lkICopJGlucHV0Owor fQorI2VuZGlmCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyV7CisjaWZkZWYgU1dJR1BZVEhP TgorI2luY2x1ZGUgInN3aWd1dGlsX3B5LmgiCisjZW5kaWYKKworI2lmZGVmIFNXSUdQRVJMCisj aW5jbHVkZSAic3dpZ3V0aWxfcGwuaCIKKyNlbmRpZgorCisjaWZkZWYgU1dJR1JVQlkKKyNpbmNs dWRlICJzd2lndXRpbF9yYi5oIgorI2VuZGlmCislfQorCislaW5jbHVkZSBzdm5fcmFfaC5zd2cK KwpkaWZmIC1OdXIgc3VidmVyc2lvbi0xLjMuMS9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvc3Zu X3djLmkgc3VidmVyc2lvbi0xLjMuMS5uZXcvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3N2bl93 Yy5pCi0tLSBzdWJ2ZXJzaW9uLTEuMy4xL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9zdm5fd2Mu aQkyMDA1LTEwLTIwIDIzOjEwOjU2LjAwMDAwMDAwMCArMDEwMAorKysgc3VidmVyc2lvbi0xLjMu MS5uZXcvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3N2bl93Yy5pCTIwMDYtMDctMDQgMTM6MjY6 MDUuMDAwMDAwMDAwICswMTAwCkBAIC0xOTEsNiArMTkxLDIwIEBACiAgICQxID0gc3ZuX3N3aWdf cmJfYXJyYXlfdG9fYXByX2FycmF5X3Byb3AoJGlucHV0LCBwb29sKTsKIH0KIAorI2lmZGVmIFNX SUdQWVRIT04KKyV0eXBlbWFwKGluLCBudW1pbnB1dHM9MCkKKyAgICAgYXByX2FycmF5X2hlYWRl cl90ICoqcGF0dGVybnMgKGFwcl9hcnJheV9oZWFkZXJfdCAqdGVtcCkKK3sKKyAgJDEgPSAmdGVt cDsKK30KKyV0eXBlbWFwKGFyZ291dCwgZnJhZ21lbnQ9InRfb3V0cHV0X2hlbHBlciIpCisgICAg IGFwcl9hcnJheV9oZWFkZXJfdCAqKnBhdHRlcm5zCit7CisgICRyZXN1bHQgPSB0X291dHB1dF9o ZWxwZXIoJHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX3N3aWdfcHlfYXJy YXlfdG9fbGlzdCgqJDEpKTsKK30KKyNlbmRpZgorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgQ2Fs bGJhY2s6IHN2bl93Y19ub3RpZnlfZnVuY190CiAgICBzdm5fY2xpZW50X2N0eF90CkBAIC0yMzcs NiArMjUxLDExIEBACiAgICQyID0gJGlucHV0OyAvKiBvdXIgZnVuY3Rpb24gaXMgdGhlIGJhdG9u LiAqLwogfQogCisldHlwZW1hcChweXRob24saW4pIChzdm5fd2Nfbm90aWZ5X2Z1bmMyX3Qgbm90 aWZ5X2Z1bmMsIHZvaWQgKm5vdGlmeV9iYXRvbikgeworICAgJDEgPSBzdm5fc3dpZ19weV9ub3Rp ZnlfZnVuYzI7CisgICAkMiA9ICRpbnB1dDsgLyogb3VyIGZ1bmN0aW9uIGlzIHRoZSBiYXRvbi4g Ki8KK30KKwogJXR5cGVtYXAocGVybDUsaW4pIChzdm5fd2Nfc3RhdHVzX2Z1bmNfdCBzdGF0dXNf ZnVuYywgdm9pZCAqc3RhdHVzX2JhdG9uKSB7CiAgICQxID0gc3ZuX3N3aWdfcGxfc3RhdHVzX2Z1 bmM7CiAgICQyID0gJGlucHV0OyAvKiBvdXIgZnVuY3Rpb24gaXMgdGhlIGJhdG9uLiAqLwpkaWZm IC1OdXIgc3VidmVyc2lvbi0xLjMuMS9zdWJ2ZXJzaW9uL2xpYnN2bl9yYV9zdm4vY2xpZW50LmMg c3VidmVyc2lvbi0xLjMuMS5uZXcvc3VidmVyc2lvbi9saWJzdm5fcmFfc3ZuL2NsaWVudC5jCi0t LSBzdWJ2ZXJzaW9uLTEuMy4xL3N1YnZlcnNpb24vbGlic3ZuX3JhX3N2bi9jbGllbnQuYwkyMDA1 LTEyLTA5IDAxOjU1OjA5LjAwMDAwMDAwMCArMDAwMAorKysgc3VidmVyc2lvbi0xLjMuMS5uZXcv c3VidmVyc2lvbi9saWJzdm5fcmFfc3ZuL2NsaWVudC5jCTIwMDYtMDctMDQgMTM6MjY6MDUuMDAw MDAwMDAwICswMTAwCkBAIC0xMTUxLDExICsxMTUxLDggQEAKICAgICB9CiAgIGFwcl9wb29sX2Rl c3Ryb3koc3VicG9vbCk7CiAKLSAgaWYgKG5yZWNlaXZlZCA8PSBsaW1pdCkKLSAgICB7Ci0gICAg ICAvKiBSZWFkIHRoZSByZXNwb25zZS4gKi8KLSAgICAgIFNWTl9FUlIoc3ZuX3JhX3N2bl9yZWFk X2NtZF9yZXNwb25zZShjb25uLCBwb29sLCAiIikpOwotICAgIH0KKyAgLyogUmVhZCB0aGUgcmVz cG9uc2UuICovCisgIFNWTl9FUlIoc3ZuX3JhX3N2bl9yZWFkX2NtZF9yZXNwb25zZShjb25uLCBw b29sLCAiIikpOwogCiAgIHJldHVybiBTVk5fTk9fRVJST1I7CiB9CmRpZmYgLU51ciBzdWJ2ZXJz aW9uLTEuMy4xL3N1YnZlcnNpb24vbGlic3ZuX3N1YnIvY29uc3RydWN0b3JzLmMgc3VidmVyc2lv bi0xLjMuMS5uZXcvc3VidmVyc2lvbi9saWJzdm5fc3Vici9jb25zdHJ1Y3RvcnMuYwotLS0gc3Vi dmVyc2lvbi0xLjMuMS9zdWJ2ZXJzaW9uL2xpYnN2bl9zdWJyL2NvbnN0cnVjdG9ycy5jCTIwMDUt MTAtMTggMTk6NDA6MDIuMDAwMDAwMDAwICswMTAwCisrKyBzdWJ2ZXJzaW9uLTEuMy4xLm5ldy9z dWJ2ZXJzaW9uL2xpYnN2bl9zdWJyL2NvbnN0cnVjdG9ycy5jCTIwMDYtMDctMDQgMTM6MjY6MDUu MDAwMDAwMDAwICswMTAwCkBAIC0zNiw2ICszNiwyMyBAQAogICByZXR1cm4gY29tbWl0X2luZm87 CiB9CiAKK3N2bl9jb21taXRfaW5mb190ICoKK3N2bl9jb21taXRfaW5mb19kdXAoY29uc3Qgc3Zu X2NvbW1pdF9pbmZvX3QgKnNyY19jb21taXRfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgYXBy X3Bvb2xfdCAqcG9vbCkKK3sKKyAgc3ZuX2NvbW1pdF9pbmZvX3QgKmRzdF9jb21taXRfaW5mbyA9 IHN2bl9jcmVhdGVfY29tbWl0X2luZm8ocG9vbCk7CisKKyAgZHN0X2NvbW1pdF9pbmZvLT5kYXRl ID0gc3JjX2NvbW1pdF9pbmZvLT5kYXRlCisgICAgPyBhcHJfcHN0cmR1cChwb29sLCBzcmNfY29t bWl0X2luZm8tPmRhdGUpIDogTlVMTDsKKyAgZHN0X2NvbW1pdF9pbmZvLT5hdXRob3IgPSBzcmNf Y29tbWl0X2luZm8tPmF1dGhvcgorICAgID8gYXByX3BzdHJkdXAocG9vbCwgc3JjX2NvbW1pdF9p bmZvLT5hdXRob3IpIDogTlVMTDsKKyAgZHN0X2NvbW1pdF9pbmZvLT5yZXZpc2lvbiA9IHNyY19j b21taXRfaW5mby0+cmV2aXNpb247CisgIGRzdF9jb21taXRfaW5mby0+cG9zdF9jb21taXRfZXJy ID0gc3JjX2NvbW1pdF9pbmZvLT5wb3N0X2NvbW1pdF9lcnIKKyAgICA/IGFwcl9wc3RyZHVwKHBv b2wsIHNyY19jb21taXRfaW5mby0+cG9zdF9jb21taXRfZXJyKSA6IE5VTEw7CisKKyAgcmV0dXJu IGRzdF9jb21taXRfaW5mbzsKK30KKwogc3ZuX2xvZ19jaGFuZ2VkX3BhdGhfdCAqCiBzdm5fbG9n X2NoYW5nZWRfcGF0aF9kdXAgKGNvbnN0IHN2bl9sb2dfY2hhbmdlZF9wYXRoX3QgKmNoYW5nZWRf cGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCkK UNSPECIFIED Updated rpath patch text/plain ZGlmZiAtdXJOIE1ha2VmaWxlLmluIE1ha2VmaWxlLmluCi0tLSBNYWtlZmlsZS5pbgorKysgTWFr ZWZpbGUuaW4KQEAgLTE2MCw3ICsxNjAsOCBAQAogQ09NUElMRV9KQVZBSExfSkFWQUMgPSAkKEpB VkFDKSAkKEpBVkFDX0ZMQUdTKQogQ09NUElMRV9KQVZBSExfSkFWQUggPSAkKEpBVkFIKQogCi1M SU5LID0gJChMSUJUT09MKSAkKExURkxBR1MpIC0tbW9kZT1saW5rICQoQ0MpICQoTFRfTERGTEFH UykgJChDRkxBR1MpICQoTERGTEFHUykgLXJwYXRoICQobGliZGlyKQorTElOSyA9ICQoTElCVE9P TCkgJChMVEZMQUdTKSAtLW1vZGU9bGluayAkKENDKSAkKExUX0xERkxBR1MpICQoQ0ZMQUdTKSAk KExERkxBR1MpCitMSU5LX0xJQiA9ICQoTElOSykgLXJwYXRoICQobGliZGlyKQogCiAjIHNwZWNp YWwgbGluayBydWxlIGZvciBtb2RfZGF2X3N2bgogTElOS19BUEFDSEVfTU9EID0gJChMSUJUT09M KSAkKExURkxBR1MpIC0tbW9kZT1saW5rICQoQ0MpICQoTFRfTERGTEFHUykgJChDRkxBR1MpICQo TERGTEFHUykgLXJwYXRoICQoQVBBQ0hFX0xJQkVYRUNESVIpIC1hdm9pZC12ZXJzaW9uIC1tb2R1 bGUKQEAgLTYxOCw3ICs2MTksOSBAQAogCS4vY29uZmlnLnN0YXR1cyBzdWJ2ZXJzaW9uL2JpbmRp bmdzL3N3aWcvcGVybC9uYXRpdmUvTWFrZWZpbGUuUEwKIAogJChTV0lHX1BMX0RJUikvbmF0aXZl L01ha2VmaWxlOiAkKFNXSUdfUExfRElSKS9uYXRpdmUvTWFrZWZpbGUuUEwKLQljZCAkKFNXSUdf UExfRElSKS9uYXRpdmU7ICQoUEVSTCkgTWFrZWZpbGUuUEwKKwljZCAkKFNXSUdfUExfRElSKS9u YXRpdmU7IFwKKwkJJChQRVJMKSBNYWtlZmlsZS5QTCBJTlNUQUxMRElSUz12ZW5kb3I7IFwKKwkJ c2VkIC1pIC1lICdzL15MRF9SVU5fUEFUSC8jJi8nIE1ha2VmaWxlIE1ha2VmaWxlLlthLXpdKgog CiBzd2lnLXBsX0RFUFMgPSBhdXRvZ2VuLXN3aWctcGwgbGlic3ZuX2NsaWVudCBsaWJzdm5fZGVs dGEgbGlic3ZuX2RpZmYgXAogICBsaWJzdm5fZnMgbGlic3ZuX3JhIGxpYnN2bl9yZXBvcyBsaWJz dm5fc3ViciBsaWJzdm5fd2MgbGlic3ZuX3N3aWdfcGVybCBcCmRpZmYgLXVyTiBidWlsZC9nZW5l cmF0b3IvZ2VuX2Jhc2UucHkgYnVpbGQvZ2VuZXJhdG9yL2dlbl9iYXNlLnB5Ci0tLSBidWlsZC9n ZW5lcmF0b3IvZ2VuX2Jhc2UucHkKKysrIGJ1aWxkL2dlbmVyYXRvci9nZW5fYmFzZS5weQpAQCAt MzQ0LDcgKzM0NCw3IEBACiAgICAgc2VsZi5pbnN0YWxsID0gb3B0aW9ucy5nZXQoJ2luc3RhbGwn KQogICAgIHNlbGYuY29tcGlsZV9jbWQgPSBvcHRpb25zLmdldCgnY29tcGlsZS1jbWQnKQogICAg IHNlbGYuc291cmNlcyA9IG9wdGlvbnMuZ2V0KCdzb3VyY2VzJywgJyouYycpCi0gICAgc2VsZi5s aW5rX2NtZCA9IG9wdGlvbnMuZ2V0KCdsaW5rLWNtZCcsICckKExJTkspJykKKyAgICBzZWxmLmxp bmtfY21kID0gb3B0aW9ucy5nZXQoJ2xpbmstY21kJywgJyQoTElOS19MSUIpJykKIAogICAgIHNl bGYuZXh0ZXJuYWxfbGliID0gb3B0aW9ucy5nZXQoJ2V4dGVybmFsLWxpYicpCiAgICAgc2VsZi5l eHRlcm5hbF9wcm9qZWN0ID0gb3B0aW9ucy5nZXQoJ2V4dGVybmFsLXByb2plY3QnKQpAQCAtMzk1 LDYgKzM5NSw3IEBACiAgICAgICBleHRtYXAgPSBzZWxmLmdlbl9vYmouX2V4dGVuc2lvbl9tYXAK ICAgICAgIHNlbGYub2JqZXh0ID0gZXh0bWFwWydleGUnLCAnb2JqZWN0J10KICAgICAgIHNlbGYu ZmlsZW5hbWUgPSBidWlsZF9wYXRoX2pvaW4oc2VsZi5wYXRoLCBuYW1lICsgZXh0bWFwWydleGUn LCAndGFyZ2V0J10pCisgICAgICBzZWxmLmxpbmtfY21kID0gJyQoTElOSyknCiAKICAgICBzZWxm Lm1hbnBhZ2VzID0gb3B0aW9ucy5nZXQoJ21hbnBhZ2VzJywgJycpCiAgICAgc2VsZi50ZXN0aW5n ID0gb3B0aW9ucy5nZXQoJ3Rlc3RpbmcnKQpkaWZmIC11ck4gYnVpbGQuY29uZiBidWlsZC5jb25m Ci0tLSBidWlsZC5jb25mCisrKyBidWlsZC5jb25mCkBAIC0zNTYsNyArMzU2LDcgQEAKIGxhbmcg PSBweXRob24KIHBhdGggPSBzdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcHl0aG9uL2xpYnN2bl9z d2lnX3B5CiBsaWJzID0gbGlic3ZuX2NsaWVudCBsaWJzdm5fc3ViciBsaWJzdm5fZGVsdGEgbGli c3ZuX3djIGFwcgotbGluay1jbWQgPSAkKExJTkspICQoU1dJR19QWV9MSUJTKQorbGluay1jbWQg PSAkKExJTktfTElCKSAkKFNXSUdfUFlfTElCUykKIGluc3RhbGwgPSBzd2lnLXB5LWxpYgogIyBu ZWVkIHNwZWNpYWwgYnVpbGQgcnVsZSB0byBpbmNsdWRlIC1EU1dJR1BZVEhPTgogY29tcGlsZS1j bWQgPSAkKENPTVBJTEVfU1dJR19QWSkKLS0tIGJ1aWxkL2dlbmVyYXRvci9nZW5fbWFrZS5weQor KysgYnVpbGQvZ2VuZXJhdG9yL2dlbl9tYWtlLnB5CkBAIC00MDgsOCArNDA4LDggQEAKICAgICAg ICAgICBuYW1lID0gc3RyaW5nLnJlcGxhY2UoYmFzZSwgJ21vZF8nLCAnJykKICAgICAgICAgICBz ZWxmLm9maWxlLndyaXRlKCdcdGNkICVzIDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAg JyQoTUtESVIpICIkKEFQQUNIRV9MSUJFWEVDRElSKSIgOyAnCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAnJChJTlNUQUxMX01PRF9TSEFSRUQpIC1uICVzICVzXG4nCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAlIChkaXJuYW1lLCBuYW1lLCBmbmFtZSkpCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAnJChJTlNUQUxMX0xJQikgJXMgJChBUEFDSEVfTElCRVhFQ0RJUilcbicKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICUgKGRpcm5hbWUsIGZuYW1lKSkKICAgICAgICAgICBp ZiBleHQgPT0gJy5sYSc6CiAgICAgICAgICAgICBsYV90d2Vha2VkW2ZpbGUgKyAnLWEnXSA9IE5v bmUKIAo= UNSPECIFIED Final version of python-fixes.patch text/plain ZGlmZiAtTnVyIHN1YnZlcnNpb24tMS4zLjEvYnVpbGQuY29uZiBzdWJ2ZXJzaW9uLTEuMy4xLm5l dy9idWlsZC5jb25mCi0tLSBzdWJ2ZXJzaW9uLTEuMy4xL2J1aWxkLmNvbmYJMjAwNi0wNy0wNCAx OTowMDo1Ni4wMDAwMDAwMDAgKzAxMDAKKysrIHN1YnZlcnNpb24tMS4zLjEubmV3L2J1aWxkLmNv bmYJMjAwNi0wNy0wNCAxOTowMTowNS4wMDAwMDAwMDAgKzAxMDAKQEAgLTM1MSw3ICszNTEsNyBA QAogdHlwZSA9IHN3aWdfbGliCiBsYW5nID0gcHl0aG9uCiBwYXRoID0gc3VidmVyc2lvbi9iaW5k aW5ncy9zd2lnL3B5dGhvbi9saWJzdm5fc3dpZ19weQotbGlicyA9IGxpYnN2bl9zdWJyIGxpYnN2 bl9kZWx0YSBsaWJzdm5fd2MgYXByCitsaWJzID0gbGlic3ZuX2NsaWVudCBsaWJzdm5fc3ViciBs aWJzdm5fZGVsdGEgbGlic3ZuX3djIGFwcgogbGluay1jbWQgPSAkKExJTkspICQoU1dJR19QWV9M SUJTKQogaW5zdGFsbCA9IHN3aWctcHktbGliCiAjIG5lZWQgc3BlY2lhbCBidWlsZCBydWxlIHRv IGluY2x1ZGUgLURTV0lHUFlUSE9OCmRpZmYgLU51ciBzdWJ2ZXJzaW9uLTEuMy4xL3N1YnZlcnNp b24vYmluZGluZ3Mvc3dpZy9pbmNsdWRlL2Fwci5zd2cgc3VidmVyc2lvbi0xLjMuMS5uZXcvc3Vi dmVyc2lvbi9iaW5kaW5ncy9zd2lnL2luY2x1ZGUvYXByLnN3ZwotLS0gc3VidmVyc2lvbi0xLjMu MS9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvaW5jbHVkZS9hcHIuc3dnCTIwMDUtMTAtMjUgMjA6 MTY6MzguMDAwMDAwMDAwICswMTAwCisrKyBzdWJ2ZXJzaW9uLTEuMy4xLm5ldy9zdWJ2ZXJzaW9u L2JpbmRpbmdzL3N3aWcvaW5jbHVkZS9hcHIuc3dnCTIwMDYtMDctMDQgMTk6MDE6MDUuMDAwMDAw MDAwICswMTAwCkBAIC0xNDYsMTQgKzE0NiwyNCBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAg Y3JlYXRlIGFuIE9VVFBVVCBhcmd1bWVudCBkZWZuIGZvciBhbiBhcHJfaGFzaF90ICoqIHdoaWNo IGlzIHN0b3JpbmcKKyAgIGRpcmVudCB2YWx1ZXMKKyovCisldHlwZW1hcChweXRob24saW4sbnVt aW5wdXRzPTApIGFwcl9oYXNoX3QgKipESVJFTlRIQVNIID0gYXByX2hhc2hfdCAqKk9VVFBVVDsK KyV0eXBlbWFwKHB5dGhvbixhcmdvdXQsZnJhZ21lbnQ9InRfb3V0cHV0X2hlbHBlciIpIGFwcl9o YXNoX3QgKipESVJFTlRIQVNIIHsKKyAgICAkcmVzdWx0ID0gdF9vdXRwdXRfaGVscGVyKCRyZXN1 bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdm5fc3dpZ19weV9jb252ZXJ0X2hh c2goKiQxLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBTV0lHVFlQRV9wX3N2bl9kaXJlbnRfdCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKSk7Cit9CisKKy8qIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgICBjcmVhdGUgYW4gT1VUUFVUIGFyZ3VtZW50IGRlZm4gZm9yIGFuIGFwcl9oYXNo X3QgKiogd2hpY2ggaXMgc3RvcmluZwogICAgcHJvcGVydHkgdmFsdWVzCiAqLwogCiAldHlwZW1h cChweXRob24saW4sbnVtaW5wdXRzPTApIGFwcl9oYXNoX3QgKipQUk9QSEFTSCA9IGFwcl9oYXNo X3QgKipPVVRQVVQ7Ci0ldHlwZW1hcChweXRob24sYXJnb3V0KSBhcHJfaGFzaF90ICoqUFJPUEhB U0ggewotICAgIC8qIHRvc3MgcHJpb3IgcmVzdWx0LCBnZXQgbmV3IHJlc3VsdCBmcm9tIHRoZSBo YXNoICovCi0gICAgUHlfREVDUkVGKCRyZXN1bHQpOwotICAgICRyZXN1bHQgPSBzdm5fc3dpZ19w eV9wcm9waGFzaF90b19kaWN0KCokMSk7CisldHlwZW1hcChweXRob24sYXJnb3V0LGZyYWdtZW50 PSJ0X291dHB1dF9oZWxwZXIiKSBhcHJfaGFzaF90ICoqUFJPUEhBU0ggeworICAgICRyZXN1bHQg PSB0X291dHB1dF9oZWxwZXIoJHJlc3VsdCwgc3ZuX3N3aWdfcHlfcHJvcGhhc2hfdG9fZGljdCgq JDEpKTsKIH0KIAogJXR5cGVtYXAocGVybDUsaW4sbnVtaW5wdXRzPTApIGFwcl9oYXNoX3QgKipQ Uk9QSEFTSCA9IGFwcl9oYXNoX3QgKipPVVRQVVQ7CmRpZmYgLU51ciBzdWJ2ZXJzaW9uLTEuMy4x L3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9pbmNsdWRlL3Byb3h5X2Fwci5zd2cgc3VidmVyc2lv bi0xLjMuMS5uZXcvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL2luY2x1ZGUvcHJveHlfYXByLnN3 ZwotLS0gc3VidmVyc2lvbi0xLjMuMS9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvaW5jbHVkZS9w cm94eV9hcHIuc3dnCTIwMDYtMDMtMTMgMDk6NTE6NDAuMDAwMDAwMDAwICswMDAwCisrKyBzdWJ2 ZXJzaW9uLTEuMy4xLm5ldy9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvaW5jbHVkZS9wcm94eV9h cHIuc3dnCTIwMDYtMDctMDQgMTk6MDE6MDUuMDAwMDAwMDAwICswMTAwCkBAIC0xMTIsNiArMTEy LDI4IEBACiAgICAgICAgICAgZGVsIHNlbGYuX3BhcmVudF9wb29sCiAgICAgICAgIGlmIGhhc2F0 dHIoc2VsZiwgIl9pc192YWxpZCIpOgogICAgICAgICAgIGRlbCBzZWxmLl9pc192YWxpZAorICAg ICAgICAKKyAgICAgICAgIyBDbGVhciBvdXQgYW55IHBvb2wtb3duZWQgcmVmZXJlbmNlcyBpbnNl cnRlZCBieSB0eXBlbWFwcworICAgICAgICBpZiBoYXNhdHRyKHNlbGYsICJfb3duZWRfcmVmcyIp OgorICAgICAgICAgIGRlbCBzZWxmLl9vd25lZF9yZWZzCisKKyAgICAgIGRlZiBfYWRkX293bmVk X3JlZihzZWxmLCByZWYpOgorICAgICAgICAiIiJBZGQgYSBuZXcgJ293bmVkJyByZWZlcmVuY2Ug LS0gaS5lLiBhIFB5dGhvbiBvYmplY3QgY29udGFpbmVkIGluIGEgQworICAgICAgICAgICBzdHJ1 Y3R1cmUgYWxsb2NhdGVkIGluIHRoaXMgcG9vbC4gIFVzZWQgYnkgdGhlIHR5cGVtYXBzIHRvIG1h bmFnZQorICAgICAgICAgICByZWZlcmVuY2UgY291bnRpbmcgc2VtYW50aWNzLiIiIgorICAgICAg ICBpZiBub3QgaGFzYXR0cihzZWxmLCAiX293bmVkX3JlZnMiKToKKyAgICAgICAgICBzZWxmLl9v d25lZF9yZWZzID0ge30KKyAgICAgICAgaWYgc2VsZi5fb3duZWRfcmVmcy5oYXNfa2V5KHJlZik6 CisgICAgICAgICAgc2VsZi5fb3duZWRfcmVmc1tyZWZdICs9IDEKKyAgICAgICAgZWxzZToKKyAg ICAgICAgICBzZWxmLl9vd25lZF9yZWZzW3JlZl0gPSAxCisgICAgICAKKyAgICAgIGRlZiBfcmVt b3ZlX293bmVkX3JlZihzZWxmLCByZWYpOgorICAgICAgICAiIiJSZW1vdmUgYW4gZXhpc3Rpbmcg J293bmVkJyByZWZlcmVuY2UuICBBbHNvIHVzZWQgYnkgdHlwZW1hcHMuIiIiCisgICAgICAgIGlm IGhhc2F0dHIoc2VsZiwgIl9vd25lZF9yZWZzIikgYW5kIHNlbGYuX293bmVkX3JlZnMuaGFzX2tl eShyZWYpOgorICAgICAgICAgIHNlbGYuX293bmVkX3JlZnNbcmVmXSAtPSAxCisgICAgICAgICAg aWYgc2VsZi5fb3duZWRfcmVmc1tyZWZdID09IDA6CisgICAgICAgICAgICBkZWwgc2VsZi5fb3du ZWRfcmVmc1tyZWZdCiAgIAogICAgICAgZGVmIF9fZGVsX18oc2VsZik6CiAgICAgICAgICIiIkF1 dG9tYXRpY2FsbHkgZGVzdHJveSBtZW1vcnkgcG9vbHMsIGlmIG5lY2Vzc2FyeSIiIgpkaWZmIC1O dXIgc3VidmVyc2lvbi0xLjMuMS9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvaW5jbHVkZS9wcm94 eV9hcHIuc3dnLm9yaWcgc3VidmVyc2lvbi0xLjMuMS5uZXcvc3VidmVyc2lvbi9iaW5kaW5ncy9z d2lnL2luY2x1ZGUvcHJveHlfYXByLnN3Zy5vcmlnCi0tLSBzdWJ2ZXJzaW9uLTEuMy4xL3N1YnZl cnNpb24vYmluZGluZ3Mvc3dpZy9pbmNsdWRlL3Byb3h5X2Fwci5zd2cub3JpZwkxOTcwLTAxLTAx IDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgc3VidmVyc2lvbi0xLjMuMS5uZXcvc3VidmVy c2lvbi9iaW5kaW5ncy9zd2lnL2luY2x1ZGUvcHJveHlfYXByLnN3Zy5vcmlnCTIwMDYtMDctMDQg MTk6MDE6MDUuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsMTg1IEBACisvKiBQcm94eSBjbGFz c2VzIGZvciBhcHJfKi4gR2VuZXJhdGVkIGJ5IGhhbmQuICovCisKKyNpZmRlZiBTV0lHUFlUSE9O CislaW5jbHVkZSBwcm94eS5zd2cKKworJW5vZGVmYXVsdCBhcHJfYXJyYXlfaGVhZGVyX3Q7Cisl bm9kZWZhdWx0IGFwcl9maWxlX3Q7Cislbm9kZWZhdWx0IGFwcl9oYXNoX3Q7Cislbm9kZWZhdWx0 IGFwcl9wb29sX3Q7CisKKyVvcGFxdWVfcHJveHkoYXByX2FycmF5X2hlYWRlcl90KTsKKyVvcGFx dWVfcHJveHkoYXByX2ZpbGVfdCk7Cislb3BhcXVlX3Byb3h5KGFwcl9oYXNoX3QpOworCislcHl0 aG9uY29kZSAleworaW1wb3J0IHRocmVhZGluZworCithcHBsaWNhdGlvbl9wb29sID0gTm9uZQor YXBwbGljYXRpb25fcG9vbF9sb2NrID0gdGhyZWFkaW5nLkxvY2soKQorY2xhc3MgR2VuZXJpY1NX SUdXcmFwcGVyOgorICBkZWYgX19pbml0X18oc2VsZiwgdGhpcywgcG9vbCk6CisgICAgIiIiQ3Jl YXRlIG5ldyBHZW5lcmljIFNXSUcgd3JhcHBlciBvYmplY3QiIiIKKyAgICBpbXBvcnQgd2Vha3Jl ZgorICAgIHNlbGYudGhpcyA9IHRoaXMKKyAgICBzZWxmLl9wYXJlbnRfcG9vbCA9IHBvb2wKKyAg ICBzZWxmLl9pc192YWxpZCA9IHdlYWtyZWYucmVmKHBvb2wuX2lzX3ZhbGlkKQorCisgIGRlZiBz ZXRfcGFyZW50X3Bvb2woc2VsZiwgcG9vbCk6CisgICAgIiIiU2V0IHRoZSBwYXJlbnQgcG9vbCBv ZiB0aGlzIG9iamVjdCIiIgorICAgIHNlbGYuX3BhcmVudF9wb29sID0gcG9vbAorCisgIGRlZiB2 YWxpZChzZWxmKToKKyAgICAiIiJJcyB0aGlzIG9iamVjdCB2YWxpZD8iIiIKKyAgICByZXR1cm4g c2VsZi5faXNfdmFsaWQoKQorCisgIGRlZiBhc3NlcnRfdmFsaWQoc2VsZik6CisgICAgIiIiQXNz ZXJ0IHRoYXQgdGhpcyBvYmplY3QgaXMgc3RpbGwgdmFsaWQiIiIKKyAgICBhc3NlcnQgc2VsZi52 YWxpZCgpLCAiVGhpcyBvYmplY3QgaGFzIGFscmVhZHkgYmVlbiBkZXN0cm95ZWQiCisKKyAgZGVm IF91bndyYXAoc2VsZik6CisgICAgIiIiUmV0dXJuIHVuZGVybHlpbmcgU1dJRyBvYmplY3QiIiIK KyAgICBzZWxmLmFzc2VydF92YWxpZCgpCisgICAgcmV0dXJuIHNlbGYudGhpcworIAorZGVmIF9t YXJrX3dlYWtwb29sX2ludmFsaWQod2Vha3Bvb2wpOgorICBpZiB3ZWFrcG9vbCBhbmQgd2Vha3Bv b2woKSBhbmQgaGFzYXR0cih3ZWFrcG9vbCgpLCAiX2lzX3ZhbGlkIik6CisgICAgZGVsIHdlYWtw b29sKCkuX2lzX3ZhbGlkCisKKyV9CisKK3N0cnVjdCBhcHJfcG9vbF90IHsKKyAgJWV4dGVuZCB7 CisgICAgJXB5dGhvbmNvZGUgJXsKKyAgICAgIGRlZiBzZXRfcGFyZW50X3Bvb2woc2VsZiwgcGFy ZW50X3Bvb2w9Tm9uZSk6CisgICAgICAgICIiIkNyZWF0ZSBhIG5ldyBtZW1vcnkgcG9vbCIiIgor ICAgICAgICBnbG9iYWwgYXBwbGljYXRpb25fcG9vbAorCisgICAgICAgIHRyeToKKyAgICAgICAg ICBhcHBsaWNhdGlvbl9wb29sX2xvY2suYWNxdWlyZSgpCisKKyAgICAgICAgICBzZWxmLl9wYXJl bnRfcG9vbCA9IHBhcmVudF9wb29sIG9yIGFwcGxpY2F0aW9uX3Bvb2wKKyAgICAgICAgICBzZWxm Ll9tYXJrX3ZhbGlkKCkKKyAgICAKKyAgICAgICAgICAjIFByb3RlY3QgaW1wb3J0YW50IGZ1bmN0 aW9ucyBmcm9tIEdDCisgICAgICAgICAgc2VsZi5fYXByX3Bvb2xfZGVzdHJveSA9IF9jb3JlLmFw cl9wb29sX2Rlc3Ryb3kKKyAgICAgICAgICBzZWxmLl9zdm5fc3dpZ19weV9jbGVhcl9hcHBsaWNh dGlvbl9wb29sID0gXAorICAgICAgICAgICAgX2NvcmUuc3ZuX3N3aWdfcHlfY2xlYXJfYXBwbGlj YXRpb25fcG9vbAorICAgIAorICAgICAgICAgICMgSWYgd2UgYXJlIGFuIGFwcGxpY2F0aW9uLWxl dmVsIHBvb2wsCisgICAgICAgICAgIyB0aGVuIHNldCB0aGlzIHBvb2wgdG8gYmUgdGhlIGFwcGxp Y2F0aW9uLWxldmVsIHBvb2wKKyAgICAgICAgICBpZiBub3Qgc2VsZi5fcGFyZW50X3Bvb2w6Cisg ICAgICAgICAgICBzdm5fc3dpZ19weV9zZXRfYXBwbGljYXRpb25fcG9vbChzZWxmLCBzZWxmKQor ICAgICAgICAgICAgYXBwbGljYXRpb25fcG9vbCA9IHNlbGYKKyAgICAgICAgZmluYWxseToKKyAg ICAgICAgICBhcHBsaWNhdGlvbl9wb29sX2xvY2sucmVsZWFzZSgpCisgIAorICAgICAgZGVmIHZh bGlkKHNlbGYpOgorICAgICAgICAiIiJDaGVjayB3aGV0aGVyIHRoaXMgbWVtb3J5IHBvb2wgYW5k IGl0cyBwYXJlbnRzCisgICAgICAgIGFyZSBzdGlsbCB2YWxpZCIiIgorICAgICAgICByZXR1cm4g aGFzYXR0cihzZWxmLCJfaXNfdmFsaWQiKQorICAKKyAgICAgIGRlZiBhc3NlcnRfdmFsaWQoc2Vs Zik6CisgICAgICAgICIiIkFzc2VydCB0aGF0IHRoaXMgbWVtb3J5X3Bvb2wgaXMgc3RpbGwgdmFs aWQuIiIiCisgICAgICAgIGFzc2VydCBzZWxmLnZhbGlkKCksICJUaGlzIHBvb2wgaGFzIGFscmVh ZHkgYmVlbiBkZXN0cm95ZWQiCisgIAorICAgICAgZGVmIGNsZWFyKHNlbGYpOgorICAgICAgICAi IiJDbGVhciBlbWJlZGRlZCBtZW1vcnkgcG9vbC4gSW52YWxpZGF0ZSBhbGwgc3VicG9vbHMuIiIi CisgICAgICAgIHBvb2wgPSBzZWxmLl9wYXJlbnRfcG9vbAorICAgICAgICBhcHJfcG9vbF9jbGVh cihzZWxmKQorICAgICAgICBzZWxmLnNldF9wYXJlbnRfcG9vbChwb29sKQorICAKKyAgICAgIGRl ZiBkZXN0cm95KHNlbGYpOgorICAgICAgICAiIiJEZXN0cm95IGVtYmVkZGVkIG1lbW9yeSBwb29s LiBJZiB5b3UgZG8gbm90IGRlc3Ryb3kKKyAgICAgICAgdGhlIG1lbW9yeSBwb29sIG1hbnVhbGx5 LCBQeXRob24gd2lsbCBkZXN0cm95IGl0CisgICAgICAgIGF1dG9tYXRpY2FsbHkuIiIiCisgICAg ICAgIGdsb2JhbCBhcHBsaWNhdGlvbl9wb29sCisgIAorICAgICAgICBzZWxmLmFzc2VydF92YWxp ZCgpCisgIAorICAgICAgICBpc19hcHBsaWNhdGlvbl9wb29sID0gbm90IHNlbGYuX3BhcmVudF9w b29sCisgIAorICAgICAgICAjIERlc3Ryb3kgcG9vbAorICAgICAgICBzZWxmLl9hcHJfcG9vbF9k ZXN0cm95KHNlbGYpCisgIAorICAgICAgICAjIENsZWFyIGFwcGxpY2F0aW9uIHBvb2wgaWYgbmVj ZXNzYXJ5CisgICAgICAgIGlmIGlzX2FwcGxpY2F0aW9uX3Bvb2w6CisgICAgICAgICAgYXBwbGlj YXRpb25fcG9vbCA9IE5vbmUKKyAgICAgICAgICBzZWxmLl9zdm5fc3dpZ19weV9jbGVhcl9hcHBs aWNhdGlvbl9wb29sKCkKKyAgCisgICAgICAgICMgTWFyayBzZWxmIGFzIGludmFsaWQKKyAgICAg ICAgaWYgaGFzYXR0cihzZWxmLCAiX3BhcmVudF9wb29sIik6CisgICAgICAgICAgZGVsIHNlbGYu X3BhcmVudF9wb29sCisgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgIl9pc192YWxpZCIpOgorICAg ICAgICAgIGRlbCBzZWxmLl9pc192YWxpZAorICAgICAgICAKKyAgICAgICAgIyBDbGVhciBvdXQg YW55IHBvb2wtb3duZWQgcmVmZXJlbmNlcyBpbnNlcnRlZCBieSB0eXBlbWFwcworICAgICAgICBp ZiBoYXNhdHRyKHNlbGYsICJfb3duZWRfcmVmcyIpOgorICAgICAgICAgIGRlbCBzZWxmLl9vd25l ZF9yZWZzCisKKyAgICAgIGRlZiBfYWRkX293bmVkX3JlZihzZWxmLCByZWYpOgorICAgICAgICAi IiJBZGQgYSBuZXcgJ293bmVkJyByZWZlcmVuY2UgLS0gaS5lLiBhIFB5dGhvbiBvYmplY3QgY29u dGFpbmVkIGluIGEgQworICAgICAgICAgICBzdHJ1Y3R1cmUgYWxsb2NhdGVkIGluIHRoaXMgcG9v bC4gIFVzZWQgYnkgdGhlIHR5cGVtYXBzIHRvIG1hbmFnZQorICAgICAgICAgICByZWZlcmVuY2Ug Y291bnRpbmcgc2VtYW50aWNzLiIiIgorICAgICAgICBpZiBub3QgaGFzYXR0cihzZWxmLCAiX293 bmVkX3JlZnMiKToKKyAgICAgICAgICBzZWxmLl9vd25lZF9yZWZzID0ge30KKyAgICAgICAgaWYg c2VsZi5fb3duZWRfcmVmcy5oYXNfa2V5KHJlZik6CisgICAgICAgICAgc2VsZi5fb3duZWRfcmVm c1tyZWZdICs9IDEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICBzZWxmLl9vd25lZF9yZWZzW3Jl Zl0gPSAxCisgICAgICAKKyAgICAgIGRlZiBfcmVtb3ZlX293bmVkX3JlZihzZWxmLCByZWYpOgor ICAgICAgICAiIiJSZW1vdmUgYW4gZXhpc3RpbmcgJ293bmVkJyByZWZlcmVuY2UuICBBbHNvIHVz ZWQgYnkgdHlwZW1hcHMuIiIiCisgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgIl9vd25lZF9yZWZz IikgYW5kIHNlbGYuX293bmVkX3JlZnMuaGFzX2tleShyZWYpOgorICAgICAgICAgIHNlbGYuX293 bmVkX3JlZnNbcmVmXSAtPSAxCisgICAgICAgICAgaWYgc2VsZi5fb3duZWRfcmVmc1tyZWZdID09 IDA6CisgICAgICAgICAgICBkZWwgc2VsZi5fb3duZWRfcmVmc1tyZWZdCisgIAorICAgICAgZGVm IF9fZGVsX18oc2VsZik6CisgICAgICAgICIiIkF1dG9tYXRpY2FsbHkgZGVzdHJveSBtZW1vcnkg cG9vbHMsIGlmIG5lY2Vzc2FyeSIiIgorICAgICAgICBpZiBzZWxmLnZhbGlkKCk6CisgICAgICAg ICAgc2VsZi5kZXN0cm95KCkKKyAgCisgICAgICBkZWYgX21hcmtfdmFsaWQoc2VsZik6CisgICAg ICAgICIiIk1hcmsgcG9vbCBhcyB2YWxpZCIiIgorCisgICAgICAgIHNlbGYuX3dlYWtwYXJlbnQg PSBOb25lCisKKyAgICAgICAgaWYgc2VsZi5fcGFyZW50X3Bvb2w6CisgICAgICAgICAgaW1wb3J0 IHdlYWtyZWYKKworICAgICAgICAgICMgTWFrZSBzdXJlIHRoYXQgdGhlIHBhcmVudCBvYmplY3Qg aXMgdmFsaWQKKyAgICAgICAgICBzZWxmLl9wYXJlbnRfcG9vbC5hc3NlcnRfdmFsaWQoKQorCisg ICAgICAgICAgIyBSZWZlciB0byBzZWxmIHVzaW5nIGEgd2Vha3JlZnJlbmNlIHNvIHRoYXQgd2Ug ZG9uJ3QKKyAgICAgICAgICAjIGNyZWF0ZSBhIHJlZmVyZW5jZSBjeWNsZQorICAgICAgICAgIHdl YWtzZWxmID0gd2Vha3JlZi5yZWYoc2VsZikKKworICAgICAgICAgICMgU2V0IHVwIGNhbGxiYWNr cyB0byBtYXJrIHBvb2wgYXMgaW52YWxpZCB3aGVuIHBhcmVudHMKKyAgICAgICAgICAjIGFyZSBk ZXN0cm95ZWQKKyAgICAgICAgICBzZWxmLl93ZWFrcGFyZW50ID0gd2Vha3JlZi5yZWYoc2VsZi5f cGFyZW50X3Bvb2wuX2lzX3ZhbGlkLAorICAgICAgICAgICAgbGFtYmRhIHg6IF9tYXJrX3dlYWtw b29sX2ludmFsaWQod2Vha3NlbGYpKQorICAKKyAgICAgICAgIyBNYXJrIHBvb2wgYXMgdmFsaWQK KyAgICAgICAgc2VsZi5faXNfdmFsaWQgPSBsYW1iZGE6IDEKKworICAgICAgZGVmIF93cmFwKHNl bGYsIG9iaik6CisgICAgICAgICIiIk1hcmsgYSBTV0lHIG9iamVjdCBhcyBvd25lZCBieSB0aGlz IHBvb2wiIiIKKyAgICAgICAgc2VsZi5hc3NlcnRfdmFsaWQoKQorICAgICAgICBpZiBoYXNhdHRy KG9iaiwgInNldF9wYXJlbnRfcG9vbCIpOgorICAgICAgICAgIG9iai5zZXRfcGFyZW50X3Bvb2wo c2VsZikKKyAgICAgICAgICByZXR1cm4gb2JqIAorICAgICAgICBlbGlmIG9iaiBpcyBOb25lOgor ICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgcmV0dXJuIEdl bmVyaWNTV0lHV3JhcHBlcihvYmosIHNlbGYpCisKKyAgICAlfQorICB9Cit9OworJXB5dGhvbmNv ZGUgJXsKKyMgSW5pdGlhbGl6ZSBhIGdsb2JhbCBwb29sCitzdm5fcG9vbF9jcmVhdGUoKQorJX0K KyNlbmRpZgorCmRpZmYgLU51ciBzdWJ2ZXJzaW9uLTEuMy4xL3N1YnZlcnNpb24vYmluZGluZ3Mv c3dpZy9pbmNsdWRlL3N2bl90eXBlcy5zd2cgc3VidmVyc2lvbi0xLjMuMS5uZXcvc3VidmVyc2lv bi9iaW5kaW5ncy9zd2lnL2luY2x1ZGUvc3ZuX3R5cGVzLnN3ZwotLS0gc3VidmVyc2lvbi0xLjMu MS9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvaW5jbHVkZS9zdm5fdHlwZXMuc3dnCTIwMDUtMTAt MjUgMjA6MDM6MjEuMDAwMDAwMDAwICswMTAwCisrKyBzdWJ2ZXJzaW9uLTEuMy4xLm5ldy9zdWJ2 ZXJzaW9uL2JpbmRpbmdzL3N3aWcvaW5jbHVkZS9zdm5fdHlwZXMuc3dnCTIwMDYtMDctMDQgMTk6 MDE6MDUuMDAwMDAwMDAwICswMTAwCkBAIC00MzAsNiArNDMwLDEyIEBACiAgICQyID0gKHZvaWQg Kilzdm5fc3dpZ19yYl9tYWtlX2JhdG9uKCRpbnB1dCwgX2dsb2JhbF9zdm5fc3dpZ19yYl9wb29s KTsKIH07CiAKKyV0eXBlbWFwKHB5dGhvbiwgaW4pIChzdm5fY29tbWl0X2NhbGxiYWNrMl90IGNh bGxiYWNrLCB2b2lkICpjYWxsYmFja19iYXRvbikKK3sKKyAgJDEgPSBzdm5fc3dpZ19weV9jb21t aXRfY2FsbGJhY2syOworICAkMiA9ICh2b2lkICopJGlucHV0OworfQorCiAvKiAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQogICAgQ2FsbGJhY2s6IHN2bl9jYW5jZWxfZnVuY190CiAqLwpAQCAtNDkzLDYgKzQ5OSw2 MCBAQAogICAkMSA9IHN2bl9zd2lnX3JiX21ha2Vfc3RyZWFtKCRpbnB1dCk7CiB9CiAKKyNpZmRl ZiBTV0lHUFlUSE9OCisldHlwZW1hcChpbikgKHN2bl9jb21taXRfY2FsbGJhY2tfdCBjYWxsYmFj aywgdm9pZCAqY2FsbGJhY2tfYmF0b24pCit7CisgICQxID0gc3ZuX3N3aWdfcHlfY29tbWl0X2Nh bGxiYWNrOworICAkMiA9ICh2b2lkICopJGlucHV0OworfQorI2VuZGlmCisKKyNpZmRlZiBTV0lH UFlUSE9OCisldHlwZW1hcChpbikgKHN2bl9jb21taXRfY2FsbGJhY2tfdCBjYWxsYmFjaywgdm9p ZCAqY2FsbGJhY2tfYmF0b24pCit7CisgICQxID0gc3ZuX3N3aWdfcHlfY29tbWl0X2NhbGxiYWNr OworICAkMiA9ICh2b2lkICopJGlucHV0OworfQorI2VuZGlmCisKKy8qIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgICBNYXBwZXIgdG8gYXV0b21hdGljYWxseSB0dXJuIFB5dGhvbiBvYmplY3RzIGludG8gdm9p ZCogYmF0b25zIG9uIGFzc2lnbm1lbnQKKyovCisKKyNpZmRlZiBTV0lHUFlUSE9OCisldHlwZW1h cChpbikgdm9pZCAqUFlfQVNfVk9JRCAoUHlPYmplY3QgKm5ld1JlZikgeworICBuZXdSZWYgPSAk aW5wdXQ7CisgIGlmICgkaW5wdXQgPT0gUHlfTm9uZSkgeworICAgICQxID0gbmV3UmVmID0gTlVM TDsKKyAgfSBlbHNlIHsKKyAgICBuZXdSZWYgPSAkaW5wdXQ7CisgICAgJDEgPSAodm9pZCAqKSRp bnB1dDsKKyAgfQorICBpZiAoc3ZuX3N3aWdfcHlfcG9vbF9zZXRfb3duZWRfcmVmKG9iajAsIChQ eU9iamVjdCAqKWFyZzEtPiQxX25hbWUsIG5ld1JlZikpIHsKKyAgICBTV0lHX2ZhaWw7CisgIH0K K30KKyNlbmRpZgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgTWFwcGVyIHRvIGF1dG9tYXRpY2Fs bHkgdHVybiBQeXRob24gb2JqZWN0cyBpbnRvIHZvaWQqIGJhdG9ucyBvbiBhc3NpZ25tZW50Cisq LworCisjaWZkZWYgU1dJR1BZVEhPTgorJXR5cGVtYXAoaW4pIHZvaWQgKlBZX0FTX1ZPSUQgKFB5 T2JqZWN0ICpuZXdSZWYpIHsKKyAgbmV3UmVmID0gJGlucHV0OworICBpZiAoJGlucHV0ID09IFB5 X05vbmUpIHsKKyAgICAkMSA9IG5ld1JlZiA9IE5VTEw7CisgIH0gZWxzZSB7CisgICAgbmV3UmVm ID0gJGlucHV0OworICAgICQxID0gKHZvaWQgKikkaW5wdXQ7CisgIH0KKyAgaWYgKHN2bl9zd2ln X3B5X3Bvb2xfc2V0X293bmVkX3JlZihvYmowLCAoUHlPYmplY3QgKilhcmcxLT4kMV9uYW1lLCBu ZXdSZWYpKSB7CisgICAgU1dJR19mYWlsOworICB9Cit9CisjZW5kaWYKKwogLyogLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KICAgIFdyYXAgdGhlIGRpZ2VzdCBvdXRwdXQgZm9yIGZ1bmN0aW9ucyBwb3B1bGF0aW5n IGRpZ2VzdHMuCiAqLwpkaWZmIC1OdXIgc3VidmVyc2lvbi0xLjMuMS9zdWJ2ZXJzaW9uL2JpbmRp bmdzL3N3aWcvaW5jbHVkZS9zdm5fdHlwZXMuc3dnLm9yaWcgc3VidmVyc2lvbi0xLjMuMS5uZXcv c3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL2luY2x1ZGUvc3ZuX3R5cGVzLnN3Zy5vcmlnCi0tLSBz dWJ2ZXJzaW9uLTEuMy4xL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9pbmNsdWRlL3N2bl90eXBl cy5zd2cub3JpZwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgc3VidmVy c2lvbi0xLjMuMS5uZXcvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL2luY2x1ZGUvc3ZuX3R5cGVz LnN3Zy5vcmlnCTIwMDYtMDctMDQgMTk6MDE6MDUuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEs Nzk1IEBACisvKgorICogc3ZuX3R5cGVzLnN3ZyA6ICBTV0lHIGluY2x1ZGUgZmlsZSBmb3Igc3Zu X3R5cGVzLmgKKyAqCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMDMg Q29sbGFiTmV0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlz IGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91 IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uICBUaGUg dGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vc3VidmVyc2lvbi50aWdyaXMu b3JnL2xpY2Vuc2UtMS5odG1sLgorICogSWYgbmV3ZXIgdmVyc2lvbnMgb2YgdGhpcyBsaWNlbnNl IGFyZSBwb3N0ZWQgdGhlcmUsIHlvdSBtYXkgdXNlIGEKKyAqIG5ld2VyIHZlcnNpb24gaW5zdGVh ZCwgYXQgeW91ciBvcHRpb24uCisgKgorICogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1 bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKKyAqIGluZGl2aWR1YWxzLiAgRm9yIGV4 YWN0IGNvbnRyaWJ1dGlvbiBoaXN0b3J5LCBzZWUgdGhlIHJldmlzaW9uCisgKiBoaXN0b3J5IGFu ZCBsb2dzLCBhdmFpbGFibGUgYXQgaHR0cDovL3N1YnZlcnNpb24udGlncmlzLm9yZy8uCisgKiA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQorICovCisKKy8qIFRoaXMgaW50ZXJmYWNlIGZpbGUgb25seSBkZWZpbmVzIHR5 cGVzIGFuZCB0aGVpciByZWxhdGVkIGluZm9ybWF0aW9uLgorICAgVGhlcmUgaXMgbm8gbW9kdWxl IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGludGVyZmFjZSBmaWxlLiAqLworCislaW5jbHVkZSBhcHIu c3dnCislaW5jbHVkZSBleGNlcHRpb24uaQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgQ3JlYXRl IGEgdHlwZW1hcCB0byBkZWZpbmUgInR5cGUgKioiIGFzIE9VVCBwYXJhbWV0ZXJzLgorCisgICBO b3RlOiBTV0lHVFlQRSBpcyBqdXN0IGEgcGxhY2Vob2xkZXIgZm9yICJzb21lIGFyYml0cmFyeSB0 eXBlIi4gVGhpcworICAgICAgICAgdHlwZW1hcCB3aWxsIGJlIGFwcGxpZWQgb250byBhICJyZWFs IiB0eXBlLgorKi8KKyV0eXBlbWFwKHB5dGhvbiwgaW4sIG51bWlucHV0cz0wKSBTV0lHVFlQRSAq Kk9VVFBBUkFNICgkKjFfdHlwZSB0ZW1wKSB7CisgICAgJDEgPSAoJDFfbHR5cGUpJnRlbXA7Cit9 CisldHlwZW1hcChwZXJsNSwgaW4sIG51bWlucHV0cz0wKSBTV0lHVFlQRSAqKk9VVFBBUkFNICgk KjFfdHlwZSB0ZW1wKSB7CisgICAgJDEgPSAoJDFfbHR5cGUpJnRlbXA7Cit9CisldHlwZW1hcChy dWJ5LCBpbiwgbnVtaW5wdXRzPTApIFNXSUdUWVBFICoqT1VUUEFSQU0gKCQqMV90eXBlIHRlbXAp IHsKKyAgdGVtcCA9IE5VTEw7CisgICQxID0gKCQxX2x0eXBlKSZ0ZW1wOworfQorCisldHlwZW1h cChweXRob24sIGFyZ291dCwgZnJhZ21lbnQ9InRfb3V0cHV0X2hlbHBlciIpIFNXSUdUWVBFICoq T1VUUEFSQU0geworICAgICRyZXN1bHQgPSB0X291dHB1dF9oZWxwZXIoJHJlc3VsdCwKKyAgICAg IHN2bl9zd2lnX05ld1BvaW50ZXJPYmooKiQxLCAkKjFfZGVzY3JpcHRvciwgX2dsb2JhbF9zdm5f c3dpZ19weV9wb29sKSk7Cit9CisldHlwZW1hcChwZXJsNSwgYXJnb3V0KSBTV0lHVFlQRSAqKk9V VFBBUkFNIHsKKyAgICBTVChhcmd2aSkgPSBzdl9uZXdtb3J0YWwoKTsKKyAgICBTV0lHX01ha2VQ dHIoU1QoYXJndmkrKyksICh2b2lkICopKiQxLCAkKjFfZGVzY3JpcHRvciwwKTsKK30KKyV0eXBl bWFwKHJ1YnksIGFyZ291dCwgZnJhZ21lbnQ9Im91dHB1dF9oZWxwZXIiKSBTV0lHVFlQRSAqKk9V VFBBUkFNIHsKKyAgJHJlc3VsdCA9IG91dHB1dF9oZWxwZXIoJHJlc3VsdCwgU1dJR19OZXdQb2lu dGVyT2JqKCokMSwgJCoxX2Rlc2NyaXB0b3IsIDApKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAgICVhcHBseS1pbmcgb2YgdHlwZW1hcHMKKyovCisKKyVhcHBseSBTV0lHVFlQRSAqKk9VVFBB UkFNIHsKKyAgc3ZuX3N0cmVhbV90ICoqLAorICBzdm5fY29tbWl0X2luZm9fdCAqKgorfTsKKwor JWFwcGx5IGxvbmcgKk9VVFBVVCB7IHN2bl9yZXZudW1fdCAqIH07CislYXBwbHkgaW50ICpPVVRQ VVQgeyBzdm5fYm9vbGVhbl90ICogfTsKKworLyogc3ZuX2ZzX2NoZWNrX3BhdGgoKSAqLworJWFw cGx5IGxvbmcgKk9VVFBVVCB7IHN2bl9ub2RlX2tpbmRfdCAqIH07CisKKy8qIHN2bl9jb25maWdf Z2V0X3NlcnZlcl9zZXR0aW5nX2ludCgpICovCislYXBwbHkgbG9uZyBsb25nICpPVVRQVVQgeyBh cHJfaW50NjRfdCAqIH07CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBDcmVhdGUgYSB0eXBlbWFw IGZvciBzcGVjaWZ5aW5nIHN0cmluZyBhcmdzIHRoYXQgbWF5IGJlIE5VTEwuCisqLworJXR5cGVt YXAocHl0aG9uLCBpbiwgcGFyc2U9InoiKSBjb25zdCBjaGFyICpNQVlfQkVfTlVMTCAiIjsKKwor I2lmZGVmIFNXSUdQRVJMCislYXBwbHkgY29uc3QgY2hhciAqIHsgY29uc3QgY2hhciAqTUFZX0JF X05VTEwgfTsKKyNlbmRpZgorCisldHlwZW1hcChydWJ5LCBpbikgY29uc3QgY2hhciogTUFZX0JF X05VTEwKK3sKKyAgaWYgKE5JTF9QKCRpbnB1dCkpIHsKKyAgICAkMSA9IE5VTEw7CisgIH0gZWxz ZSB7CisgICAgJDEgPSBTdHJpbmdWYWx1ZVB0cigkaW5wdXQpOworICB9Cit9CisKKyV0eXBlbWFw KHJ1YnksIG91dCkgY29uc3QgY2hhciAqCit7CisgIGlmICgkMSkgeworICAgICRyZXN1bHQgPSBy Yl9zdHJfbmV3MigkMSk7CisgIH0gZWxzZSB7CisgICAgJHJlc3VsdCA9IFFuaWw7CisgIH0KK30K KworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIGNvbnN0IGNoYXIgKmhlYWRlcl9lbmNvZGluZworICAg c3ZuX2RpZmZfZmlsZV9vdXRwdXRfdW5pZmllZDIKKyAgIHN2bl9jbGllbnRfZGlmZjMKKyovCisl dHlwZW1hcChydWJ5LCBpbikgY29uc3QgY2hhciAqaGVhZGVyX2VuY29kaW5nCit7CisgICQxID0g TlVMTDsKKyAgCisgIGlmIChOSUxfUCgkaW5wdXQpKSB7CisgIH0gZWxzZSBpZiAoVFlQRSgkaW5w dXQpID09IFRfRklYTlVNKSB7CisgICAgJDEgPSAoY2hhciAqKU5VTTJJTlQoJGlucHV0KTsKKyAg ICBpZiAoISgkMSA9PSBBUFJfTE9DQUxFX0NIQVJTRVQgfHwgJDEgPT0gQVBSX0RFRkFVTFRfQ0hB UlNFVCkpIHsKKyAgICAgICQxID0gTlVMTDsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgJDEgPSBT dHJpbmdWYWx1ZVB0cigkaW5wdXQpOworICB9CisgIAorICBpZiAoISQxKSB7CisgICAgJDEgPSAo Y2hhciAqKUFQUl9MT0NBTEVfQ0hBUlNFVDsKKyAgfQorfQorCisvKiAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICAgSW5wdXQgb2Ygc2NyaXB0aW5nIGhhc2gvZGljdGlvbmFyeSAoc3RyaW5nID0+IHN0cmluZykK KyAgIGNvbnZlcnRlZCB0byBhcHJfaGFzaF90IChjb25zdCBjaGFyICogPT4gY29uc3QgY2hhciAq KQorKi8KKyV0eXBlbWFwKHB5dGhvbiwgaW4pIGFwcl9oYXNoX3QgKlNUUklOR19UT19TVFJJTkcg eworICAgICQxID0gc3ZuX3N3aWdfcHlfc3RyaW5naGFzaF9mcm9tX2RpY3QgKCRpbnB1dCwgX2ds b2JhbF9wb29sKTsKK30KKyV0eXBlbWFwKHBlcmw1LCBpbikgYXByX2hhc2hfdCAqU1RSSU5HX1RP X1NUUklORyB7CisgICAgJDEgPSBzdm5fc3dpZ19wbF9zdHJpbmdzX3RvX2hhc2ggKCRpbnB1dCwg X2dsb2JhbF9wb29sKTsKK30KKyV0eXBlbWFwKHJ1YnksIGluKSBhcHJfaGFzaF90ICpTVFJJTkdf VE9fU1RSSU5HIHsKKyAgICAkMSA9IHN2bl9zd2lnX3JiX2hhc2hfdG9fYXByX2hhc2hfc3RyaW5n KCRpbnB1dCwgX2dsb2JhbF9wb29sKTsKK30KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgRGVm aW5lIGEgbW9yZSByZWZpbmVkICdtZW1iZXJpbicgdHlwZW1hcCBmb3IgJ2NvbnN0IGNoYXIgKicg bWVtYmVycy4gVGhpcworICAgaXMgdXNlZCBpbiBwbGFjZSBvZiB0aGUgJ2NoYXIgKicgaGFuZGxl ciBkZWZpbmVkIGF1dG9tYXRpY2FsbHkuCisKKyAgIFdlIG5lZWQgdG8gZG8gdGhlIGZyZWUvbWFs bG9jL3N0cmNweSBzcGVjaWFsIGJlY2F1c2Ugb2YgdGhlIGNvbnN0CisqLworJXR5cGVtYXAobWVt YmVyaW4pIGNvbnN0IGNoYXIgKiB7CisgICAgYXByX3NpemVfdCBsZW4gPSBzdHJsZW4oJGlucHV0 KSArIDE7CisgICAgY2hhciAqY29waWVkOworICAgIGlmICgkMSkgZnJlZSgoY2hhciAqKSQxKTsK KyAgICBjb3BpZWQgPSBtYWxsb2MobGVuKTsKKyAgICBtZW1jcHkoY29waWVkLCAkaW5wdXQsIGxl bik7CisgICAgJDEgPSBjb3BpZWQ7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBTcGVjaWZ5 IGhvdyBzdm5fZXJyb3JfdCByZXR1cm5zIGFyZSB0dXJuZWQgaW50byBleGNlcHRpb25zLgorKi8K KyV0eXBlbWFwKHB5dGhvbiwgb3V0KSBzdm5fZXJyb3JfdCAqIHsKKyAgICBpZiAoJDEgIT0gTlVM TCkgeworICAgICAgICBpZiAoJDEtPmFwcl9lcnIgIT0gU1ZOX0VSUl9TV0lHX1BZX0VYQ0VQVElP Tl9TRVQpCisgICAgICAgICAgICBzdm5fc3dpZ19weV9zdm5fZXhjZXB0aW9uKCQxKTsKKyAgICAg ICAgZWxzZQorICAgICAgICAgICAgc3ZuX2Vycm9yX2NsZWFyKCQxKTsKKyAgICAgICAgU1dJR19m YWlsOworICAgIH0KKyAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CisgICAgJHJlc3VsdCA9IFB5X05v bmU7Cit9CisKKyV0eXBlbWFwKHBlcmw1LG91dCkgc3ZuX2Vycm9yX3QgKiB7CisgICAgaWYgKCQx KSB7CisgICAgICAgIFNWICpleGNlcHRpb25faGFuZGxlciA9IHBlcmxfZ2V0X3N2ICgiU1ZOOjpF cnJvcjo6aGFuZGxlciIsIEZBTFNFKTsKKworICAgICAgICBpZiAoU3ZPSyhleGNlcHRpb25faGFu ZGxlcikpIHsKKyAgICAgICAgICAgIFNWICpjYWxsYmFja19yZXN1bHQ7CisKKyAgICAgICAgICAg IHN2bl9zd2lnX3BsX2NhbGxiYWNrX3RodW5rIChDQUxMX1NWLCBleGNlcHRpb25faGFuZGxlciwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY2FsbGJhY2tfcmVzdWx0 LCAiUyIsICQxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQxX2Rl c2NyaXB0b3IpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgJHJlc3VsdCA9IHN2X25l d21vcnRhbCgpOworICAgICAgICAgICAgU1dJR19NYWtlUHRyICgkcmVzdWx0LCAodm9pZCAqKSQx LCAkMV9kZXNjcmlwdG9yICwwKTsKKyAgICAgICAgICAgIGFyZ3ZpKys7CisgICAgICAgIH0KKyAg ICB9Cit9CisKKyV0eXBlbWFwKHJ1YnksIG91dCkgc3ZuX2Vycm9yX3QgKgoreworICBpZiAoJDEp IHsKKyAgICBzdm5fc3dpZ19yYl9wb3BfcG9vbChfZ2xvYmFsX3N2bl9zd2lnX3JiX3Bvb2wpOwor ICAgIHN2bl9zd2lnX3JiX2hhbmRsZV9zdm5fZXJyb3IoJDEpOworICB9CisgICRyZXN1bHQgPSBR bmlsOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgRGVmaW5lIGFuIE9VVFBVVCB0eXBlbWFw IGZvciAnc3ZuX2ZpbGVzaXplX3QgKicuICBGb3Igbm93LCB3ZSdsbAorICAgdHJlYXQgaXQgYXMg YSAnbG9uZycgZXZlbiBpZiB0aGF0IGlzbid0IGVudGlyZWx5IGNvcnJlY3QuLi4gIAorKi8KKyV0 eXBlbWFwKHB5dGhvbixpbixudW1pbnB1dHM9MCkgc3ZuX2ZpbGVzaXplX3QgKiAoc3ZuX2ZpbGVz aXplX3QgdGVtcCkKKyAgICAiJDEgPSAmdGVtcDsiOworCisldHlwZW1hcChwZXJsNSxpbixudW1p bnB1dHM9MCkgc3ZuX2ZpbGVzaXplX3QgKiAoc3ZuX2ZpbGVzaXplX3QgdGVtcCkKKyAgICAiJDEg PSAmdGVtcDsiOworCisldHlwZW1hcChydWJ5LGluLG51bWlucHV0cz0wKSBzdm5fZmlsZXNpemVf dCAqIChzdm5fZmlsZXNpemVfdCB0ZW1wKQorICAgICIkMSA9ICZ0ZW1wOyI7CisKKyV0eXBlbWFw KHB5dGhvbixhcmdvdXQsZnJhZ21lbnQ9InRfb3V0cHV0X2hlbHBlciIpIHN2bl9maWxlc2l6ZV90 ICoKKyAgICAiJHJlc3VsdCA9IHRfb3V0cHV0X2hlbHBlcigkcmVzdWx0LAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFB5TG9uZ19Gcm9tTG9uZ0xvbmcoKGFwcl9pbnQ2NF90KSAoKiQx KSkpOyI7CisKKy8qIFhYWDogYXBwbHkgbG9uZyBsb25nICpPVVRQVVQgZG9lc24ndCB0cmFjayAk MSBjb3JyZWN0bHkgKi8KKyV0eXBlbWFwKHBlcmw1LGFyZ291dCkgc3ZuX2ZpbGVzaXplX3QgKiB7 CisgICAgY2hhciB0ZW1wWzI1Nl07CisgICAgc3ByaW50Zih0ZW1wLCIlIiBBUFJfSU5UNjRfVF9G TVQsICokMSk7CisgICAgU1QoYXJndmkpID0gc3ZfbmV3bW9ydGFsKCk7CisgICAgc3Zfc2V0cHYo KFNWKilTVChhcmd2aSsrKSwgdGVtcCk7Cit9OworCisldHlwZW1hcChydWJ5LGFyZ291dCxmcmFn bWVudD0ib3V0cHV0X2hlbHBlciIpIHN2bl9maWxlc2l6ZV90ICoKKyAgICAiJHJlc3VsdCA9IG91 dHB1dF9oZWxwZXIoJHJlc3VsdCwgTEwyTlVNKChhcHJfaW50NjRfdCkgKCokMSkpKTsiOworCisv KiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorICAgRGVmaW5lIGEgZ2VuZXJhbCBwdHIvbGVuIHR5cGVtYXAuIFRo aXMgdGFrZXMgYSBzaW5nbGUgc2NyaXB0IGFyZ3VtZW50CisgICBhbmQgZXhwYW5kcyBpdCBpbnRv IGEgcHRyL2xlbiBwYWlyIGZvciB0aGUgbmF0aXZlIGNhbGwuCisqLworJXR5cGVtYXAocHl0aG9u LCBpbikgKGNvbnN0IGNoYXIgKlBUUiwgYXByX3NpemVfdCBMRU4pIHsKKyAgICBpZiAoIVB5U3Ry aW5nX0NoZWNrKCRpbnB1dCkpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVF cnJvciwgImV4cGVjdGluZyBhIHN0cmluZyIpOworICAgICAgICBTV0lHX2ZhaWw7CisgICAgfQor ICAgICQxID0gUHlTdHJpbmdfQVNfU1RSSU5HKCRpbnB1dCk7CisgICAgJDIgPSBQeVN0cmluZ19H RVRfU0laRSgkaW5wdXQpOworfQorCisldHlwZW1hcChwZXJsNSwgaW4pIChjb25zdCBjaGFyICpQ VFIsIGFwcl9zaXplX3QgTEVOKSB7CisgICAgaWYgKFN2UE9LKCRpbnB1dCkpIHsKKyAgICAgICAg JDEgPSBTdlBWKCRpbnB1dCwgJDIpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8qIHNldCB0byAw IHRvIGF2b2lkIHdhcm5pbmcgKi8KKyAgICAgICAgJDEgPSAwOworICAgICAgICAkMiA9IDA7Cisg ICAgICAgIFNXSUdfY3JvYWsoIkV4cGVjdGluZyBhIHN0cmluZyIpOworICAgIH0KK30KKworLyog LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAgIEhhbmRsZSByZXRyaWV2aW5nIHRoZSBlcnJvciBtZXNzYWdlIGZy b20gc3ZuX3N0cmVycm9yCisqLworCisldHlwZW1hcChwZXJsNSxpbixudW1pbnB1dHM9MCkgKGNo YXIgKmJ1ZiwgYXByX3NpemVfdCBidWZzaXplKSAoIGNoYXIgdGVtcFsxMjhdICkgeworICAgIG1l bXNldCAodGVtcCwwLDEyOCk7IC8qIHBhcmFub2lhICovCisgICAgJDEgPSB0ZW1wOworICAgICQy ID0gMTI4OworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgRGVmaW5lIGEgZ2VuZXJpYyBhcmdp bml0IG1hcHBpbmcgZm9yIHBvb2xzLgorKi8KKworI2lmZGVmIFNXSUdQWVRIT04KKyVkZWZpbmUg c3ZuX3N3aWdfcHlfcG9vbF9jaGVjayhwb29sKQorICBpZiAocG9vbCAhPSBOVUxMICYmICFQeU9i amVjdF9IYXNBdHRyU3RyaW5nKHBvb2wsIChjaGFyICopIl9tYXJrX3ZhbGlkIikpCisgIHsKKyAg ICBpbnQgYXJnbnVtID0gUHlUdXBsZV9HRVRfU0laRShhcmdzKTsKKyAgICBTV0lHX1B5dGhvbl9U eXBlRXJyb3IoU1dJR19UeXBlUHJldHR5TmFtZSgkZGVzY3JpcHRvciksIHBvb2wpOworICAgIFNX SUdfYXJnX2ZhaWwoYXJnbnVtKTsKKyAgICBTV0lHX2ZhaWw7CisgIH0KKyVlbmRkZWYKKyVkZWZp bmUgc3ZuX3N3aWdfcHlfcG9vbF9jcmVhdGVfc3VicG9vbChweV9wb29sLCBwb29sKQorICBpZiAo cHlfcG9vbCAhPSBOVUxMKSB7CisgICAgcG9vbCA9IHN2bl9wb29sX2NyZWF0ZShwb29sKTsKKyAg ICBweV9wb29sID0gc3ZuX3N3aWdfTmV3UG9pbnRlck9iaihwb29sLCAkZGVzY3JpcHRvciwgcHlf cG9vbCk7CisgIH0KKyVlbmRkZWYKKyNlbmRpZgorCisldHlwZW1hcChweXRob24sIGRlZmF1bHQp IGFwcl9wb29sX3QgKihhcHJfcG9vbF90ICpfZ2xvYmFsX3Bvb2wsCisgIFB5T2JqZWN0ICpfZ2xv YmFsX3N2bl9zd2lnX3B5X3Bvb2wsIGludCBfZ2xvYmFsX3Bvb2xfaXNfZGVmYXVsdF9wb29sKQor eworICBpbnQgYXJnbnVtID0gUHlUdXBsZV9HRVRfU0laRShhcmdzKSAtIDE7CisgIF9nbG9iYWxf cG9vbF9pc19hcHBsaWNhdGlvbl9wb29sID0gMDsKKyAgX2dsb2JhbF9wb29sX2lzX2RlZmF1bHRf cG9vbCA9IDE7CisgIGlmIChhcmdudW0gPj0gMCkgeworICAgIFB5T2JqZWN0ICppbnB1dCA9IFB5 VHVwbGVfR0VUX0lURU0oYXJncywgYXJnbnVtKTsKKyAgICBpZiAoaW5wdXQgIT0gUHlfTm9uZSAm JgorICAgICAgICBQeU9iamVjdF9IYXNBdHRyU3RyaW5nKGlucHV0LCAoY2hhciAqKSJfbWFya192 YWxpZCIpKSB7CisgICAgICBfZ2xvYmFsX3Bvb2wgPSBzdm5fc3dpZ19NdXN0R2V0UHRyKGlucHV0 LCAkMV9kZXNjcmlwdG9yLCBhcmdudW0rMSwgTlVMTCk7CisgICAgICBpZiAoUHlFcnJfT2NjdXJy ZWQoKSkgeworICAgICAgICBfZ2xvYmFsX3N2bl9zd2lnX3B5X3Bvb2wgPSBOVUxMOworICAgICAg ICBTV0lHX2ZhaWw7CisgICAgICB9CisgICAgICBfZ2xvYmFsX3N2bl9zd2lnX3B5X3Bvb2wgPSBp bnB1dDsKKyAgICAgIFB5X1hJTkNSRUYoX2dsb2JhbF9zdm5fc3dpZ19weV9wb29sKTsKKyAgICAg IF9nbG9iYWxfcG9vbF9pc19kZWZhdWx0X3Bvb2wgPSAwOworICAgIH0gZWxzZSB7CisgICAgICBp ZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgfQor ICAgICAgc3ZuX3N3aWdfZ2V0X2FwcGxpY2F0aW9uX3Bvb2woJl9nbG9iYWxfc3ZuX3N3aWdfcHlf cG9vbCwgJl9nbG9iYWxfcG9vbCk7IAorICAgICAgc3ZuX3N3aWdfcHlfcG9vbF9jcmVhdGVfc3Vi cG9vbChfZ2xvYmFsX3N2bl9zd2lnX3B5X3Bvb2wsIF9nbG9iYWxfcG9vbCk7CisgICAgfQorICB9 IGVsc2UgeworICAgIHN2bl9zd2lnX2dldF9hcHBsaWNhdGlvbl9wb29sKCZfZ2xvYmFsX3N2bl9z d2lnX3B5X3Bvb2wsICZfZ2xvYmFsX3Bvb2wpOyAKKyAgICBzdm5fc3dpZ19weV9wb29sX2NyZWF0 ZV9zdWJwb29sKF9nbG9iYWxfc3ZuX3N3aWdfcHlfcG9vbCwgX2dsb2JhbF9wb29sKTsKKyAgfQor ICAkMSA9IF9nbG9iYWxfcG9vbDsKKyAgc3ZuX3N3aWdfcHlfcG9vbF9jaGVjayhfZ2xvYmFsX3N2 bl9zd2lnX3B5X3Bvb2wpCit9CisKKyV0eXBlbWFwKHB5dGhvbiwgaW4pIGFwcl9wb29sX3QgKiB7 CisgIGlmICgkaW5wdXQgIT0gUHlfTm9uZSAmJiBfZ2xvYmFsX3Bvb2xfaXNfZGVmYXVsdF9wb29s ID09IDEpIHsKKyAgICBzdm5fc3dpZ19weV9wb29sX2NoZWNrKCRpbnB1dCkKKyAgICBfZ2xvYmFs X3Bvb2wgPSBzdm5fc3dpZ19NdXN0R2V0UHRyKCRpbnB1dCwgJDFfZGVzY3JpcHRvciwgJHN2bl9h cmdudW0sIAorICAgICAgTlVMTCk7CisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAg ICAgU1dJR19mYWlsOworICAgIH0KKyAgICBQeV9YREVDUkVGKF9nbG9iYWxfc3ZuX3N3aWdfcHlf cG9vbCk7CisgICAgX2dsb2JhbF9zdm5fc3dpZ19weV9wb29sID0gJGlucHV0OworICAgIFB5X1hJ TkNSRUYoX2dsb2JhbF9zdm5fc3dpZ19weV9wb29sKTsKKyAgICAkMSA9IF9nbG9iYWxfcG9vbDsK KyAgfQorfQorCisldHlwZW1hcChweXRob24sIGZyZWVhcmcpIGFwcl9wb29sX3QgKiB7CisgIFB5 X1hERUNSRUYoX2dsb2JhbF9zdm5fc3dpZ19weV9wb29sKTsKK30KKworJXR5cGVtYXAocGVybDUs IGluKSBhcHJfcG9vbF90ICpwb29sICIiOworJXR5cGVtYXAocGVybDUsIGRlZmF1bHQpIGFwcl9w b29sX3QgKnBvb2woYXByX3Bvb2xfdCAqX2dsb2JhbF9wb29sKSB7CisgICAgX2dsb2JhbF9wb29s ID0gJDEgPSBzdm5fc3dpZ19wbF9tYWtlX3Bvb2wgKFNUKGl0ZW1zLTEpKTsKK30KKyV0eXBlbWFw KHJ1YnksIGluKSBhcHJfcG9vbF90ICpwb29sICIiOworJXR5cGVtYXAocnVieSwgZGVmYXVsdCkg YXByX3Bvb2xfdCAqcG9vbAorICAgIChWQUxVRSBfZ2xvYmFsX3N2bl9zd2lnX3JiX3Bvb2wsIGFw cl9wb29sX3QgKl9nbG9iYWxfcG9vbCkKK3sKKyAgc3ZuX3N3aWdfcmJfZ2V0X3Bvb2woYXJnYywg YXJndiwgc2VsZiwgJl9nbG9iYWxfc3ZuX3N3aWdfcmJfcG9vbCwgJiQxKTsKKyAgX2dsb2JhbF9w b29sID0gJDE7CisgIHN2bl9zd2lnX3JiX3B1c2hfcG9vbChfZ2xvYmFsX3N2bl9zd2lnX3JiX3Bv b2wpOworfQorCisldHlwZW1hcChydWJ5LCBkZWZhdWx0KSAoc3ZuX2NsaWVudF9jdHhfdCAqY3R4 LCBhcHJfcG9vbF90ICpwb29sKQorICAgICAoVkFMVUUgX2dsb2JhbF9zdm5fc3dpZ19yYl9wb29s LCBhcHJfcG9vbF90ICpfZ2xvYmFsX3Bvb2wpCit7CisgIGludCBhZGp1c3RlZF9hcmdjID0gYXJn YzsKKyAgVkFMVUUgKmFkanVzdGVkX2FyZ3YgPSBhcmd2OworCisgIHN2bl9zd2lnX3JiX2FkanVz dF9hcmdfZm9yX2NsaWVudF9jdHhfYW5kX3Bvb2woJmFkanVzdGVkX2FyZ2MsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFkanVzdGVkX2FyZ3YpOwor ICBzdm5fc3dpZ19yYl9nZXRfcG9vbChhZGp1c3RlZF9hcmdjLCBhZGp1c3RlZF9hcmd2LCBzZWxm LAorICAgICAgICAgICAgICAgICAgICAgICAmX2dsb2JhbF9zdm5fc3dpZ19yYl9wb29sLCAmJDIp OworICBfZ2xvYmFsX3Bvb2wgPSAkMjsKKyAgc3ZuX3N3aWdfcmJfcHVzaF9wb29sKF9nbG9iYWxf c3ZuX3N3aWdfcmJfcG9vbCk7Cit9CisKKyV0eXBlbWFwKHJ1YnksIGFyZ291dCkgYXByX3Bvb2xf dCAqcG9vbAoreworICBzdm5fc3dpZ19yYl9zZXRfcG9vbCgkcmVzdWx0LCBfZ2xvYmFsX3N2bl9z d2lnX3JiX3Bvb2wpOworICBzdm5fc3dpZ19yYl9wb3BfcG9vbChfZ2xvYmFsX3N2bl9zd2lnX3Ji X3Bvb2wpOworfQorCisjaWZkZWYgU1dJR1BFUkwKKyVhcHBseSBhcHJfcG9vbF90ICpwb29sIHsK KyAgICBhcHJfcG9vbF90ICpkaXJfcG9vbCwKKyAgICBhcHJfcG9vbF90ICpmaWxlX3Bvb2wsCisg ICAgYXByX3Bvb2xfdCAqbm9kZV9wb29sCit9OworI2VuZGlmCisKKyNpZmRlZiBTV0lHUlVCWQor JWFwcGx5IGFwcl9wb29sX3QgKnBvb2wgeworICAgIGFwcl9wb29sX3QgKmRpcl9wb29sLAorICAg IGFwcl9wb29sX3QgKmZpbGVfcG9vbCwKKyAgICBhcHJfcG9vbF90ICpub2RlX3Bvb2wKK307Cisj ZW5kaWYKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgQ0FMTEJBQ0tfQkFUT046IERvIG5vdCBj b252ZXJ0IHRvIEMgb2JqZWN0IGZyb20gUnVieSBvYmplY3QuCisqLworCisldHlwZW1hcChydWJ5 LCBpbikgdm9pZCAqQ0FMTEJBQ0tfQkFUT04KK3sKKyAgJDEgPSAodm9pZCAqKSRpbnB1dDsKK30K KworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgQ2FsbGJhY2s6IHN2bl9sb2dfbWVzc2FnZV9yZWNl aXZlcl90CisgICBzdm5fY2xpZW50X2xvZygpCisgICBzdm5fcmEgZ2V0X2xvZygpCisgICBzdm5f cmVwb3NfZ2V0X2xvZ3MoKQorKi8KKworJXR5cGVtYXAocHl0aG9uLCBpbikgKHN2bl9sb2dfbWVz c2FnZV9yZWNlaXZlcl90IHJlY2VpdmVyLCAKKyAgICAgICAgICAgICAgICAgICAgICB2b2lkICpy ZWNlaXZlcl9iYXRvbikgeworICAgICQxID0gc3ZuX3N3aWdfcHlfbG9nX3JlY2VpdmVyOworICAg ICQyID0gKHZvaWQgKikkaW5wdXQ7Cit9CisldHlwZW1hcChwZXJsNSwgaW4pIChzdm5fbG9nX21l c3NhZ2VfcmVjZWl2ZXJfdCByZWNlaXZlciwgCisgICAgICAgICAgICAgICAgICAgICB2b2lkICpy ZWNlaXZlcl9iYXRvbikgeworICAgICQxID0gc3ZuX3N3aWdfcGxfdGh1bmtfbG9nX3JlY2VpdmVy OworICAgICQyID0gKHZvaWQgKikkaW5wdXQ7Cit9CisKKyV0eXBlbWFwKHJ1YnksIGluKSAoc3Zu X2xvZ19tZXNzYWdlX3JlY2VpdmVyX3QgcmVjZWl2ZXIsIAorICAgICAgICAgICAgICAgICAgICB2 b2lkICpyZWNlaXZlcl9iYXRvbikgeworICAgICQxID0gc3ZuX3N3aWdfcmJfbG9nX3JlY2VpdmVy OworICAgICQyID0gKHZvaWQgKilzdm5fc3dpZ19yYl9tYWtlX2JhdG9uKCRpbnB1dCwgX2dsb2Jh bF9zdm5fc3dpZ19yYl9wb29sKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIENhbGxiYWNr OiBzdm5fY29tbWl0X2NhbGxiYWNrX3QKKyAgIHN2bl9yYSBnZXRfY29tbWl0X2VkaXRvcigpCisg ICBzdm5fcmVwb3NfZ2V0X2NvbW1pdF9lZGl0b3IoKQorKi8KKworJXR5cGVtYXAocGVybDUsIGlu KSAoc3ZuX2NvbW1pdF9jYWxsYmFja190IGNhbGxiYWNrLCB2b2lkICpjYWxsYmFja19iYXRvbikg eworICAgICQxID0gc3ZuX3N3aWdfcGxfdGh1bmtfY29tbWl0X2NhbGxiYWNrOworICAgICQyID0g KHZvaWQgKikkaW5wdXQ7CisgICAgc3ZuX3N3aWdfcGxfaG9sZF9yZWZfaW5fcG9vbCAoX2dsb2Jh bF9wb29sLCAkaW5wdXQpOworfTsKKworJXR5cGVtYXAocnVieSwgaW4pIChzdm5fY29tbWl0X2Nh bGxiYWNrX3QgY2FsbGJhY2ssIHZvaWQgKmNhbGxiYWNrX2JhdG9uKQoreworICAkMSA9IHN2bl9z d2lnX3JiX2NvbW1pdF9jYWxsYmFjazsKKyAgJDIgPSAodm9pZCAqKXN2bl9zd2lnX3JiX21ha2Vf YmF0b24oJGlucHV0LCBfZ2xvYmFsX3N2bl9zd2lnX3JiX3Bvb2wpOworfTsKKworJXR5cGVtYXAo cHl0aG9uLCBpbikgKHN2bl9jb21taXRfY2FsbGJhY2syX3QgY2FsbGJhY2ssIHZvaWQgKmNhbGxi YWNrX2JhdG9uKQoreworICAkMSA9IHN2bl9zd2lnX3B5X2NvbW1pdF9jYWxsYmFjazI7CisgICQy ID0gKHZvaWQgKikkaW5wdXQ7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBDYWxsYmFjazog c3ZuX2NhbmNlbF9mdW5jX3QKKyovCisKKyV0eXBlbWFwKHB5dGhvbiwgaW4pIChzdm5fY2FuY2Vs X2Z1bmNfdCBjYW5jZWxfZnVuYywgdm9pZCAqY2FuY2VsX2JhdG9uKSB7CisgICQxID0gc3ZuX3N3 aWdfcHlfY2FuY2VsX2Z1bmM7CisgICQyID0gJGlucHV0OyAvKiBvdXIgZnVuY3Rpb24gaXMgdGhl IGJhdG9uLiAqLworfQorCisldHlwZW1hcChydWJ5LCBpbikgKHN2bl9jYW5jZWxfZnVuY190IGNh bmNlbF9mdW5jLCB2b2lkICpjYW5jZWxfYmF0b24pCit7CisgICQxID0gc3ZuX3N3aWdfcmJfY2Fu Y2VsX2Z1bmM7CisgICQyID0gKHZvaWQgKilzdm5fc3dpZ19yYl9tYWtlX2JhdG9uKCRpbnB1dCwg X2dsb2JhbF9zdm5fc3dpZ19yYl9wb29sKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIENh bGxiYWNrOiBzdm5faW5mb19yZWNlaXZlcl90CisqLworCisldHlwZW1hcChydWJ5LCBpbikgKHN2 bl9pbmZvX3JlY2VpdmVyX3QgcmVjZWl2ZXIsIHZvaWQgKnJlY2VpdmVyX2JhdG9uKQoreworICAk MSA9IHN2bl9zd2lnX3JiX2luZm9fcmVjZWl2ZXI7CisgICQyID0gKHZvaWQgKilzdm5fc3dpZ19y Yl9tYWtlX2JhdG9uKCRpbnB1dCwgX2dsb2JhbF9zdm5fc3dpZ19yYl9wb29sKTsKK30KKworLyog LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAgIENhbGxiYWNrOiBzdm5fZnNfd2FybmluZ19jYWxsYmFja190Cisq LworCisldHlwZW1hcChydWJ5LCBpbikgKHN2bl9mc193YXJuaW5nX2NhbGxiYWNrX3Qgd2Fybmlu Zywgdm9pZCAqd2FybmluZ19iYXRvbikKK3sKKyAgVkFMVUUgYmF0b24gPSBzdm5fc3dpZ19yYl9t YWtlX2JhdG9uKCRpbnB1dCwgX2dsb2JhbF9zdm5fc3dpZ19yYl9wb29sKTsKKyAgc3ZuX3N3aWdf cmJfZnNfd2FybmluZ19jYWxsYmFja19iYXRvbl9yZWdpc3RlcihiYXRvbiwgX2dsb2JhbF9wb29s KTsKKyAgJDEgPSBzdm5fc3dpZ19yYl9mc193YXJuaW5nX2NhbGxiYWNrOworICAkMiA9ICh2b2lk ICopYmF0b247Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBzdm5fc3RyZWFtX3QgaW50ZXJv cGVyYWJpbGl0eSB3aXRoIGxhbmd1YWdlIG5hdGl2ZSBpbyBoYW5kbGVzCisqLworCisldHlwZW1h cChweXRob24sIGluKSBzdm5fc3RyZWFtX3QgKldSQVBQRURfU1RSRUFNIHsKKyAgICAkMSA9IHN2 bl9zd2lnX3B5X21ha2Vfc3RyZWFtICgkaW5wdXQsIF9nbG9iYWxfcG9vbCk7Cit9CisKKyV0eXBl bWFwKHBlcmw1LCBpbikgc3ZuX3N0cmVhbV90ICogeworICAgIHN2bl9zd2lnX3BsX21ha2Vfc3Ry ZWFtICgmJDEsICRpbnB1dCk7Cit9CisKKyV0eXBlbWFwKHBlcmw1LCBvdXQpIHN2bl9zdHJlYW1f dCAqIHsKKyAgICAkcmVzdWx0ID0gc3ZuX3N3aWdfcGxfZnJvbV9zdHJlYW0gKCQxKTsKKyAgICBh cmd2aSsrOworfQorCisldHlwZW1hcChwZXJsNSwgYXJnb3V0KSBzdm5fc3RyZWFtX3QgKiogewor ICAgICRyZXN1bHQgPSBzdm5fc3dpZ19wbF9mcm9tX3N0cmVhbSAoKiQxKTsKKyAgICBhcmd2aSsr OworfQorCisldHlwZW1hcChydWJ5LCBpbikgc3ZuX3N0cmVhbV90ICogeworICAkMSA9IHN2bl9z d2lnX3JiX21ha2Vfc3RyZWFtKCRpbnB1dCk7Cit9CisKKyNpZmRlZiBTV0lHUFlUSE9OCisldHlw ZW1hcChpbikgKHN2bl9jb21taXRfY2FsbGJhY2tfdCBjYWxsYmFjaywgdm9pZCAqY2FsbGJhY2tf YmF0b24pCit7CisgICQxID0gc3ZuX3N3aWdfcHlfY29tbWl0X2NhbGxiYWNrOworICAkMiA9ICh2 b2lkICopJGlucHV0OworfQorI2VuZGlmCisKKyNpZmRlZiBTV0lHUFlUSE9OCisldHlwZW1hcChp bikgKHN2bl9jb21taXRfY2FsbGJhY2tfdCBjYWxsYmFjaywgdm9pZCAqY2FsbGJhY2tfYmF0b24p Cit7CisgICQxID0gc3ZuX3N3aWdfcHlfY29tbWl0X2NhbGxiYWNrOworICAkMiA9ICh2b2lkICop JGlucHV0OworfQorI2VuZGlmCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBNYXBwZXIgdG8gYXV0 b21hdGljYWxseSB0dXJuIFB5dGhvbiBvYmplY3RzIGludG8gdm9pZCogYmF0b25zIG9uIGFzc2ln bm1lbnQKKyovCisKKyNpZmRlZiBTV0lHUFlUSE9OCisldHlwZW1hcChpbikgdm9pZCAqUFlfQVNf Vk9JRCAoUHlPYmplY3QgKm5ld1JlZikgeworICBuZXdSZWYgPSAkaW5wdXQ7CisgIGlmICgkaW5w dXQgPT0gUHlfTm9uZSkgeworICAgICQxID0gbmV3UmVmID0gTlVMTDsKKyAgfSBlbHNlIHsKKyAg ICBuZXdSZWYgPSAkaW5wdXQ7CisgICAgJDEgPSAodm9pZCAqKSRpbnB1dDsKKyAgfQorICBpZiAo c3ZuX3N3aWdfcHlfcG9vbF9zZXRfb3duZWRfcmVmKG9iajAsIChQeU9iamVjdCAqKWFyZzEtPiQx X25hbWUsIG5ld1JlZikpIHsKKyAgICBTV0lHX2ZhaWw7CisgIH0KK30KKyNlbmRpZgorCisvKiAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICAgV3JhcCB0aGUgZGlnZXN0IG91dHB1dCBmb3IgZnVuY3Rpb25zIHBv cHVsYXRpbmcgZGlnZXN0cy4KKyovCisKKyV0eXBlbWFwKGluLCBudW1pbnB1dHM9MCkgdW5zaWdu ZWQgY2hhciBkaWdlc3RbQU5ZXQorICAgICgkKjFfdHlwZSB0ZW1wW0FQUl9NRDVfRElHRVNUU0la RV0pIHsKKyAgICAkMSA9ICgkMV9sdHlwZSl0ZW1wOworfQorCisldHlwZW1hcChweXRob24sIGFy Z291dCwgZnJhZ21lbnQ9InRfb3V0cHV0X2hlbHBlciIpIHVuc2lnbmVkIGNoYXIgZGlnZXN0W0FO WV0KK3sKKyAgICAkcmVzdWx0ID0gdF9vdXRwdXRfaGVscGVyKCRyZXN1bHQsCisgICAgICAgIFB5 U3RyaW5nX0Zyb21TdHJpbmcoc3ZuX21kNV9kaWdlc3RfdG9fY3N0cmluZyAoJDEsIF9nbG9iYWxf cG9vbCkpKTsKK30KKworJXR5cGVtYXAocGVybDUsIGFyZ291dCkgdW5zaWduZWQgY2hhciBkaWdl c3RbQU5ZXSB7CisgICAgU1QoYXJndmkpID0gc3ZfbmV3bW9ydGFsKCk7CisgICAgc3Zfc2V0cHYo KFNWKilTVChhcmd2aSsrKSwgc3ZuX21kNV9kaWdlc3RfdG9fY3N0cmluZyAoJDEsX2dsb2JhbF9w b29sKSk7Cit9CisKKyV0eXBlbWFwKHJ1YnksIGFyZ291dCwgZnJhZ21lbnQ9Im91dHB1dF9oZWxw ZXIiKSB1bnNpZ25lZCBjaGFyIGRpZ2VzdFtBTlldCit7CisgICRyZXN1bHQgPSBvdXRwdXRfaGVs cGVyKCRyZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHJiX3N0cl9uZXcyKHN2bl9t ZDVfZGlnZXN0X3RvX2NzdHJpbmcoJDEsIF9nbG9iYWxfcG9vbCkpKTsKK30KKworLyogc3ZuX21k NV8qIGZ1bmN0aW9ucyB0YWtlcyBjb25zdCBvbmVzIGFzIGlucHV0ICovCisldHlwZW1hcChwZXJs NSwgaW4pIGNvbnN0IHVuc2lnbmVkIGNoYXIgZGlnZXN0W10geworICAgIFNXSUdfQ29udmVydFB0 cigkaW5wdXQsICh2b2lkICoqKSYkMSwgJDFfZGVzY3JpcHRvciwgMCk7Cit9CisldHlwZW1hcChw ZXJsNSwgYXJnb3V0KSBjb25zdCB1bnNpZ25lZCBjaGFyIGRpZ2VzdFtdIHt9CisKKy8qCisgICBz dm5fdHhkZWx0YV9zZW5kX3N0cmVhbSgpIHVzZXMgKmRpZ2VzdCBub3QgZGlnZXN0W10gLgorICAg c3ZuX3R4ZGVsdGFfYXBwbHkoKSB1c2VzICpyZXN1bHRfZGlnZXN0IG5vdCBkaWdlc3RbXSAuCisq LworCisldHlwZW1hcChpbiwgbnVtaW5wdXRzPTApIHVuc2lnbmVkIGNoYXIgKnJlc3VsdF9kaWdl c3QgeworICAgICQxID0gKHVuc2lnbmVkIGNoYXIgKilhcHJfcGFsbG9jKF9nbG9iYWxfcG9vbCwg QVBSX01ENV9ESUdFU1RTSVpFKTsKK30KKworJXR5cGVtYXAocGVybDUsIGFyZ291dCkgdW5zaWdu ZWQgY2hhciAqcmVzdWx0X2RpZ2VzdCB7CisgICAgU1QoYXJndmkpID0gc3ZfbmV3bW9ydGFsKCk7 CisgICAgU1QoYXJndmkrKykgPSBzdm5fc3dpZ19wbF9mcm9tX21kNSgkMSk7Cit9CisKKyVhcHBs eSB1bnNpZ25lZCBjaGFyIGRpZ2VzdFtBTlldIHsKKyAgICB1bnNpZ25lZCBjaGFyICpkaWdlc3QK K307CisKKyNpZm5kZWYgU1dJR1BFUkwKKyVhcHBseSB1bnNpZ25lZCBjaGFyIGRpZ2VzdFtBTlld IHsKKyAgICB1bnNpZ25lZCBjaGFyICpyZXN1bHRfZGlnZXN0Cit9OworI2VuZGlmCisKKy8qIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgIHVzZWZ1bCBjb252ZXJ0b3JzIGZvciBzdm5fb3B0X3JldmlzaW9uX3QK KyovCisldHlwZW1hcChwZXJsNSwgaW4pIHN2bl9vcHRfcmV2aXNpb25fdCAqIChzdm5fb3B0X3Jl dmlzaW9uX3QgcmV2KSB7CisgICAgJDEgPSAmcmV2OworICAgIGlmICgkaW5wdXQgPT0gTlVMTCB8 fCAkaW5wdXQgPT0gJlBMX3N2X3VuZGVmIHx8ICFTdk9LKCRpbnB1dCkpIHsKKyAgICAgICAgcmV2 LmtpbmQgPSBzdm5fb3B0X3JldmlzaW9uX3Vuc3BlY2lmaWVkOworICAgIH0KKyAgICBlbHNlIGlm IChzdl9pc29iamVjdCgkaW5wdXQpICYmIHN2X2Rlcml2ZWRfZnJvbSgkaW5wdXQsICJfcF9zdm5f b3B0X3JldmlzaW9uX3QiKSkgeworICAgICAgICBTV0lHX0NvbnZlcnRQdHIoJGlucHV0LCAodm9p ZCAqKikmJDEsICQxX2Rlc2NyaXB0b3IsIDApOworICAgIH0KKyAgICBlbHNlIGlmIChsb29rc19s aWtlX251bWJlcigkaW5wdXQpKSB7CisgICAgICAgIHJldi5raW5kID0gc3ZuX29wdF9yZXZpc2lv bl9udW1iZXI7CisgICAgICAgIHJldi52YWx1ZS5udW1iZXIgPSBTdklWKCRpbnB1dCk7CisgICAg fQorICAgIGVsc2UgaWYgKFN2UE9LKCRpbnB1dCkpIHsKKyAgICAgICAgY2hhciAqaW5wdXQgPSBT dlBWX25vbGVuKCRpbnB1dCk7CisgICAgICAgIGlmIChzdHJjYXNlY21wKGlucHV0LCAiQkFTRSIp ID09IDApCisgICAgICAgICAgICByZXYua2luZCA9IHN2bl9vcHRfcmV2aXNpb25fYmFzZTsKKyAg ICAgICAgZWxzZSBpZiAoc3RyY2FzZWNtcChpbnB1dCwgIkhFQUQiKSA9PSAwKQorICAgICAgICAg ICAgcmV2LmtpbmQgPSBzdm5fb3B0X3JldmlzaW9uX2hlYWQ7CisgICAgICAgIGVsc2UgaWYgKHN0 cmNhc2VjbXAoaW5wdXQsICJXT1JLSU5HIikgPT0gMCkKKyAgICAgICAgICAgIHJldi5raW5kID0g c3ZuX29wdF9yZXZpc2lvbl93b3JraW5nOworICAgICAgICBlbHNlIGlmIChzdHJjYXNlY21wKGlu cHV0LCAiQ09NTUlUVEVEIikgPT0gMCkKKyAgICAgICAgICAgIHJldi5raW5kID0gc3ZuX29wdF9y ZXZpc2lvbl9jb21taXR0ZWQ7CisgICAgICAgIGVsc2UgaWYgKHN0cmNhc2VjbXAoaW5wdXQsICJQ UkVWIikgPT0gMCkKKyAgICAgICAgICAgIHJldi5raW5kID0gc3ZuX29wdF9yZXZpc2lvbl9wcmV2 aW91czsKKyAgICAgICAgZWxzZSBpZiAoKmlucHV0ID09ICd7JykgeworICAgICAgICAgICAgc3Zu X2Jvb2xlYW5fdCBtYXRjaGVkOworICAgICAgICAgICAgYXByX3RpbWVfdCB0bTsKKyAgICAgICAg ICAgIHN2bl9lcnJvcl90ICplcnI7CisKKyAgICAgICAgICAgIGNoYXIgKmVuZCA9IHN0cmNocihp bnB1dCwnfScpOworICAgICAgICAgICAgaWYgKCFlbmQpCisgICAgICAgICAgICAgICAgU1dJR19j cm9haygidW5rbm93biBvcHRfcmV2aXNpb25fdCB0eXBlIik7CisgICAgICAgICAgICAqZW5kID0g J1wwJzsKKyAgICAgICAgICAgIGVyciA9IHN2bl9wYXJzZV9kYXRlICgmbWF0Y2hlZCwgJnRtLCBp bnB1dCArIDEsIGFwcl90aW1lX25vdygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHN2bl9zd2lnX3BsX21ha2VfcG9vbCAoKFNWICopTlVMTCkpOworICAgICAgICAgICAgaWYg KGVycikgeworICAgICAgICAgICAgICAgIHN2bl9lcnJvcl9jbGVhciAoZXJyKTsKKyAgICAgICAg ICAgICAgICBTV0lHX2Nyb2FrKCJ1bmtub3duIG9wdF9yZXZpc2lvbl90IHR5cGUiKTsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIGlmICghbWF0Y2hlZCkKKyAgICAgICAgICAgICAgICBTV0lH X2Nyb2FrKCJ1bmtub3duIG9wdF9yZXZpc2lvbl90IHR5cGUiKTsKKworICAgICAgICAgICAgcmV2 LmtpbmQgPSBzdm5fb3B0X3JldmlzaW9uX2RhdGU7CisgICAgICAgICAgICByZXYudmFsdWUuZGF0 ZSA9IHRtOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIFNXSUdfY3JvYWsoInVua25vd24g b3B0X3JldmlzaW9uX3QgdHlwZSIpOworICAgIH0gZWxzZQorICAgICAgICBTV0lHX2Nyb2FrKCJ1 bmtub3duIG9wdF9yZXZpc2lvbl90IHR5cGUiKTsKK30KKworJXR5cGVtYXAocnVieSwgaW4pIHN2 bl9vcHRfcmV2aXNpb25fdCAqIChzdm5fb3B0X3JldmlzaW9uX3QgcmV2KSB7CisgICQxID0gJnJl djsKKyAgc3ZuX3N3aWdfcmJfc2V0X3JldmlzaW9uKCZyZXYsICRpbnB1dCk7Cit9CisKKy8qIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgICBhcHJfaGFzaF90ICoqZGlyZW50cworICAgc3ZuX2NsaWVudF9scygp CisgICBzdm5faW9fZ2V0X2RpcmVudHMoKQorICAgc3ZuX3JhIGdldF9kaXIoKQorKi8KKworJXR5 cGVtYXAocHl0aG9uLGluLG51bWlucHV0cz0wKSBhcHJfaGFzaF90ICoqZGlyZW50cyA9IGFwcl9o YXNoX3QgKipPVVRQVVQ7CisldHlwZW1hcChweXRob24sYXJnb3V0LGZyYWdtZW50PSJ0X291dHB1 dF9oZWxwZXIiKSBhcHJfaGFzaF90ICoqZGlyZW50cyB7CisgICRyZXN1bHQgPSB0X291dHB1dF9o ZWxwZXIoJHJlc3VsdCwgc3ZuX3N3aWdfcHlfY29udmVydF9oYXNoKCokMSwgCisgICAgJGRlc2Ny aXB0b3Ioc3ZuX2RpcmVudF90ICopLCBfZ2xvYmFsX3N2bl9zd2lnX3B5X3Bvb2wpKTsKK30KKwor JXR5cGVtYXAocGVybDUsaW4sbnVtaW5wdXRzPTApIGFwcl9oYXNoX3QgKipkaXJlbnRzID0gYXBy X2hhc2hfdCAqKk9VVFBVVDsKKyV0eXBlbWFwKHBlcmw1LGFyZ291dCkgYXByX2hhc2hfdCAqKmRp cmVudHMgeworICAgIFNUKGFyZ3ZpKyspID0gc3ZuX3N3aWdfcGxfY29udmVydF9oYXNoCisJKCok MSwgJGRlc2NyaXB0b3Ioc3ZuX2RpcmVudF90ICopKTsKK30KKworJXR5cGVtYXAocnVieSwgaW4s IG51bWlucHV0cz0wKSBhcHJfaGFzaF90ICoqZGlyZW50cyA9IGFwcl9oYXNoX3QgKipPVVRQVVQ7 CisldHlwZW1hcChydWJ5LCBhcmdvdXQsIGZyYWdtZW50PSJvdXRwdXRfaGVscGVyIikgYXByX2hh c2hfdCAqKmRpcmVudHMKK3sKKyAgJHJlc3VsdCA9IG91dHB1dF9oZWxwZXIoJHJlc3VsdCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX3N3aWdfcmJfYXByX2hhc2hfdG9faGFzaF9zd2ln X3R5cGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiQxLCAic3ZuX2RpcmVudF90ICoi KSk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBhcHJfaGFzaF90ICoqbG9ja3MKKyAgIHN2 bl9jbGllbnRfbHMzKCkKKyAgIHN2bl9yZXBvc19mc19nZXRfbG9ja3MoKQorICAgc3ZuX3JhX2dl dF9sb2NrcygpCisqLworCisldHlwZW1hcChydWJ5LCBpbiwgbnVtaW5wdXRzPTApIGFwcl9oYXNo X3QgKipsb2NrcyA9IGFwcl9oYXNoX3QgKipPVVRQVVQ7CisldHlwZW1hcChydWJ5LCBhcmdvdXQs IGZyYWdtZW50PSJvdXRwdXRfaGVscGVyIikgYXByX2hhc2hfdCAqKmxvY2tzCit7CisgICRyZXN1 bHQgPSBvdXRwdXRfaGVscGVyKCRyZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN2 bl9zd2lnX3JiX2Fwcl9oYXNoX3RvX2hhc2hfc3dpZ190eXBlCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKCokMSwgInN2bl9sb2NrX3QgKiIpKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAgIGFwcl9hcnJheV9oZWFkZXJfdCAqbG9jYXRpb25fcmV2aXNpb25zCisgICBzdm5fcmVwb3Nf dHJhY2Vfbm9kZV9sb2NhdGlvbnMoKQorICAgc3ZuX3JhX2dldF9sb2NhdGlvbnMoKQorKi8KKwor JXR5cGVtYXAocnVieSwgaW4pIGFwcl9hcnJheV9oZWFkZXJfdCAqbG9jYXRpb25fcmV2aXNpb25z Cit7CisgICQxID0gc3ZuX3N3aWdfcmJfYXJyYXlfdG9fYXByX2FycmF5X3Jldm51bSgkaW5wdXQs IF9nbG9iYWxfcG9vbCk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBhcHJfaGFzaF90ICoq bG9jYXRpb25zCisgICBzdm5fcmVwb3NfdHJhY2Vfbm9kZV9sb2NhdGlvbnMoKQorICAgc3ZuX3Jh X2dldF9sb2NhdGlvbnMoKQorKi8KKworJXR5cGVtYXAocnVieSwgaW4sIG51bWlucHV0cz0wKSBh cHJfaGFzaF90ICoqbG9jYXRpb25zID0gYXByX2hhc2hfdCAqKk9VVFBVVDsKKyV0eXBlbWFwKHJ1 YnksIGFyZ291dCkgYXByX2hhc2hfdCAqKmxvY2F0aW9ucworeworICAkcmVzdWx0ID0gc3ZuX3N3 aWdfcmJfYXByX3Jldm51bV9rZXlfaGFzaF90b19oYXNoX3N0cmluZygqJDEpOworfQorCisvKiAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICAgU3BlY2lhbCBib29sZWFuIG1hcHBpbmcgZm9yIHJ1YnkuCisqLwor CisldHlwZW1hcChydWJ5LCBpbikgc3ZuX2Jvb2xlYW5fdCAiJDEgPSBSVEVTVCgkaW5wdXQpOyI7 CisldHlwZW1hcChydWJ5LCBvdXQsIGZyYWdtZW50PSJvdXRwdXRfaGVscGVyIikgc3ZuX2Jvb2xl YW5fdAoreworICAkcmVzdWx0ID0gb3V0cHV0X2hlbHBlcigkcmVzdWx0LCAkMSA/IFF0cnVlIDog UWZhbHNlKTsKK30KKworJXR5cGVtYXAocnVieSwgaW4sIG51bWlucHV0cz0wKSBzdm5fYm9vbGVh bl90ICogKHN2bl9ib29sZWFuX3QgdGVtcCkKK3sKKyAgJDEgPSAmdGVtcDsKK30KKworJXR5cGVt YXAocnVieSwgYXJnb3V0LCBmcmFnbWVudD0ib3V0cHV0X2hlbHBlciIpIHN2bl9ib29sZWFuX3Qg KgoreworICAkcmVzdWx0ID0gb3V0cHV0X2hlbHBlcigkcmVzdWx0LCAqJDEgPyBRdHJ1ZSA6IFFm YWxzZSk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBIYW5kbGUgcHl0aG9uIHRocmVhZCBs b2NraW5nLgorCisgICBTd2lnIGRvZXNuJ3QgYWxsb3cgdXMgdG8gc3BlY2lmeSBhIGxhbmd1YWdl IGluIHRoZSAlZXhjZXB0aW9uIGNvbW1hbmQsCisgICBzbyB3ZSBoYXZlIHRvIHVzZSAjaWZkZWZz IGZvciB0aGUgcHl0aG9uLXNwZWNpZmljIHBhcnRzLgorKi8KKworJWV4Y2VwdGlvbiB7CisjaWZk ZWYgU1dJR1BZVEhPTgorICAgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOworI2VuZGlm CisgICAgJGFjdGlvbgorI2lmZGVmIFNXSUdQWVRIT04KKyAgICBzdm5fc3dpZ19weV9hY3F1aXJl X3B5X2xvY2soKTsKKyNlbmRpZgorfQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBoYW5kbGUg Y29uZmlnIGFuZCBmc19jb25maWcgaW4gc3ZuX3tmcyxyZXBvc31fY3JlYXRlCisqLworCisKKyV0 eXBlbWFwKHJ1YnksIGluKSBhcHJfaGFzaF90ICpjb25maWcgKGFwcl9oYXNoX3QgKnRlbXApCit7 CisgIGlmIChOSUxfUCgkaW5wdXQpKSB7CisgICAgJDEgPSBOVUxMOworICB9IGVsc2UgeworICAg ICQxID0gc3ZuX3N3aWdfcmJfaGFzaF90b19hcHJfaGFzaF9zd2lnX3R5cGUoJGlucHV0LCAic3Zu X2NvbmZpZ190ICoiLCBfZ2xvYmFsX3Bvb2wpOworICB9Cit9CisldHlwZW1hcChydWJ5LCBpbikg YXByX2hhc2hfdCAqZnNfY29uZmlnCit7CisgIGlmIChOSUxfUCgkaW5wdXQpKSB7CisgICAgJDEg PSBOVUxMOworICB9IGVsc2UgeworICAgICQxID0gc3ZuX3N3aWdfcmJfaGFzaF90b19hcHJfaGFz aF9zdHJpbmcoJGlucHV0LCBfZ2xvYmFsX3Bvb2wpOworICB9Cit9CisKKy8qIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tICovCisKKyV7CisjaWZkZWYgU1dJR1BZVEhPTgorI2luY2x1ZGUgInN3aWd1dGlsX3B5Lmgi CisjZW5kaWYKKworI2lmZGVmIFNXSUdQRVJMCisjaW5jbHVkZSAic3dpZ3V0aWxfcGwuaCIKKyNl bmRpZgorCisjaWZkZWYgU1dJR1JVQlkKKyNpbmNsdWRlIDxhcHUuaD4KKyNpbmNsdWRlIDxhcHJf eGxhdGUuaD4KKyNpbmNsdWRlICJzd2lndXRpbF9yYi5oIgorI2VuZGlmCislfQorCislaW5jbHVk ZSBzdm5fdGltZV9oLnN3ZworJWluY2x1ZGUgc3ZuX3R5cGVzX2guc3dnCmRpZmYgLU51ciBzdWJ2 ZXJzaW9uLTEuMy4xL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vbGlic3ZuX3N3aWdf cHkvc3dpZ3V0aWxfcHkuYyBzdWJ2ZXJzaW9uLTEuMy4xLm5ldy9zdWJ2ZXJzaW9uL2JpbmRpbmdz L3N3aWcvcHl0aG9uL2xpYnN2bl9zd2lnX3B5L3N3aWd1dGlsX3B5LmMKLS0tIHN1YnZlcnNpb24t MS4zLjEvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3B5dGhvbi9saWJzdm5fc3dpZ19weS9zd2ln dXRpbF9weS5jCTIwMDYtMDMtMDUgMjA6NTU6MTQuMDAwMDAwMDAwICswMDAwCisrKyBzdWJ2ZXJz aW9uLTEuMy4xLm5ldy9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcHl0aG9uL2xpYnN2bl9zd2ln X3B5L3N3aWd1dGlsX3B5LmMJMjAwNi0wNy0wNCAxOTowMjozNS4wMDAwMDAwMDAgKzAxMDAKQEAg LTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxhcHJfcG9ydGFibGUuaD4KICNpbmNsdWRlIDxhcHJf dGhyZWFkX3Byb2MuaD4KIAorI2luY2x1ZGUgInN2bl9jbGllbnQuaCIKICNpbmNsdWRlICJzdm5f c3RyaW5nLmgiCiAjaW5jbHVkZSAic3ZuX29wdC5oIgogI2luY2x1ZGUgInN2bl9kZWx0YS5oIgpA QCAtNzIsMTEgKzczLDEzIEBACiAjaWZkZWYgQUNRVUlSRV9QWVRIT05fTE9DSwogICBQeVRocmVh ZFN0YXRlICp0aHJlYWRfc3RhdGU7CiAKLSAgaWYgKF9zYXZlZF90aHJlYWRfa2V5ID09IE5VTEwp IHsKLSAgICAvKiBPYnZpb3VzbHksIGNyZWF0aW5nIGEgdG9wLWxldmVsIHBvb2wgZm9yIHRoaXMg aXMgcHJldHR5IHN0dXBpZC4gKi8KLSAgICBhcHJfcG9vbF9jcmVhdGUoJl9zYXZlZF90aHJlYWRf cG9vbCwgTlVMTCk7Ci0gICAgYXByX3RocmVhZGtleV9wcml2YXRlX2NyZWF0ZSgmX3NhdmVkX3Ro cmVhZF9rZXksIE5VTEwsIF9zYXZlZF90aHJlYWRfcG9vbCk7Ci0gIH0KKyAgaWYgKF9zYXZlZF90 aHJlYWRfa2V5ID09IE5VTEwpCisgICAgeworICAgICAgLyogT2J2aW91c2x5LCBjcmVhdGluZyBh IHRvcC1sZXZlbCBwb29sIGZvciB0aGlzIGlzIHByZXR0eSBzdHVwaWQuICovCisgICAgICBhcHJf cG9vbF9jcmVhdGUoJl9zYXZlZF90aHJlYWRfcG9vbCwgTlVMTCk7CisgICAgICBhcHJfdGhyZWFk a2V5X3ByaXZhdGVfY3JlYXRlKCZfc2F2ZWRfdGhyZWFkX2tleSwgTlVMTCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX3NhdmVkX3RocmVhZF9wb29sKTsKKyAgICB9CiAKICAg dGhyZWFkX3N0YXRlID0gUHlFdmFsX1NhdmVUaHJlYWQoKTsKICAgYXByX3RocmVhZGtleV9wcml2 YXRlX3NldCh0aHJlYWRfc3RhdGUsIF9zYXZlZF90aHJlYWRfa2V5KTsKQEAgLTEwMyw2ICsxMDYs OCBAQAogc3RhdGljIFB5T2JqZWN0ICpfZ2xvYmFsX3N2bl9zd2lnX3B5X3Bvb2wgPSBOVUxMOwog c3RhdGljIGNoYXIgYXNzZXJ0VmFsaWRbXSA9ICJhc3NlcnRfdmFsaWQiOwogc3RhdGljIGNoYXIg cGFyZW50UG9vbFtdID0gIl9wYXJlbnRfcG9vbCI7CitzdGF0aWMgY2hhciBhZGRPd25lZFJlZltd ID0gIl9hZGRfb3duZWRfcmVmIjsKK3N0YXRpYyBjaGFyIHJlbW92ZU93bmVkUmVmW10gPSAiX3Jl bW92ZV9vd25lZF9yZWYiOwogc3RhdGljIGNoYXIgd3JhcFtdID0gIl93cmFwIjsKIHN0YXRpYyBj aGFyIHVud3JhcFtdID0gIl91bndyYXAiOwogc3RhdGljIGNoYXIgc2V0UGFyZW50UG9vbFtdID0g InNldF9wYXJlbnRfcG9vbCI7CkBAIC0xMjIsNyArMTI3LDcgQEAKIH0KIAogLyogU2V0IHRoZSBh cHBsaWNhdGlvbiBwb29sICovCi12b2lkIHN2bl9zd2lnX3B5X3NldF9hcHBsaWNhdGlvbl9wb29s KFB5T2JqZWN0ICpweV9wb29sLCBhcHJfcG9vbF90ICpwb29sKSAKK3ZvaWQgc3ZuX3N3aWdfcHlf c2V0X2FwcGxpY2F0aW9uX3Bvb2woUHlPYmplY3QgKnB5X3Bvb2wsIGFwcl9wb29sX3QgKnBvb2wp CiB7CiAgIF9nbG9iYWxfcG9vbCA9IHBvb2w7CiAgIF9nbG9iYWxfc3ZuX3N3aWdfcHlfcG9vbCA9 IHB5X3Bvb2w7CkBAIC0xNDcsNTUgKzE1MiwxMDYgQEAKIHsKICAgUHlPYmplY3QgKnJlc3VsdDsK IAotICBpZiAoKnByb3h5ICE9IE5VTEwpIHsKLSAgICBpZiAocG9vbCA9PSBOVUxMKSB7Ci0gICAg ICBpZiAoUHlPYmplY3RfSGFzQXR0clN0cmluZygqcHJveHksIHNldFBhcmVudFBvb2wpKSB7Ci0g ICAgICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxNZXRob2QoKnByb3h5LCBzZXRQYXJlbnRQb29s LCBlbXB0eVR1cGxlKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBOVUxMKSB7Ci0gICAgICAgICAg cmV0dXJuIDE7CisgIGlmICgqcHJveHkgIT0gTlVMTCkKKyAgICB7CisgICAgICBpZiAocG9vbCA9 PSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgaWYgKFB5T2JqZWN0X0hhc0F0dHJTdHJpbmco KnByb3h5LCBzZXRQYXJlbnRQb29sKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgcmVz dWx0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZCgqcHJveHksIHNldFBhcmVudFBvb2wsIGVtcHR5VHVw bGUpOworICAgICAgICAgICAgICBpZiAocmVzdWx0ID09IE5VTEwpCisgICAgICAgICAgICAgICAg cmV0dXJuIDE7CisgICAgICAgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgICAgICAgICAg fQorICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICByZXN1bHQgPSBQ eU9iamVjdF9DYWxsTWV0aG9kKHBvb2wsIHdyYXAsIG9iamVjdFR1cGxlLCAqcHJveHkpOworICAg ICAgICAgIFB5X0RFQ1JFRigqcHJveHkpOworICAgICAgICAgICpwcm94eSA9IHJlc3VsdDsKICAg ICAgICAgfQotICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKLSAgICAgIH0KLSAgICB9IGVsc2Ug ewotICAgICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChwb29sLCB3cmFwLCBvYmplY3RU dXBsZSwgKnByb3h5KTsKLSAgICAgIFB5X0RFQ1JFRigqcHJveHkpOwotICAgICAgKnByb3h5ID0g cmVzdWx0OwogICAgIH0KLSAgfQogCiAgIHJldHVybiAwOwogfQorCisvKiBHZXQgdGhlIHBhcmVu dCBwb29sIG9mIGEgcHJveHkgb2JqZWN0LCBvciByZXR1cm4gdGhlIGdsb2JhbCBhcHBsaWNhdGlv bgorICogcG9vbCBpZiBvbmUgaXMgbm90IHNldC4gIFJldHVybnMgYSBCT1JST1dFRCByZWZlcmVu Y2UhICovCitzdGF0aWMgUHlPYmplY3QgKnByb3h5X2dldF9wb29sKFB5T2JqZWN0ICpwcm94eSkK K3sKKyAgUHlPYmplY3QgKnJlc3VsdDsKKyAgaWYgKFB5T2JqZWN0X0hhc0F0dHJTdHJpbmcocHJv eHksIHBhcmVudFBvb2wpKQorICAgIHsKKyAgICAgIHJlc3VsdCA9IFB5T2JqZWN0X0dldEF0dHJT dHJpbmcocHJveHksIHBhcmVudFBvb2wpOworICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAg fQorICBlbHNlCisgICAgeworICAgICAgcmVzdWx0ID0gX2dsb2JhbF9zdm5fc3dpZ19weV9wb29s OworICAgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyogQ2hhbmdlIGFuICdvd25lZCByZWZl cmVuY2UnIGFsbG9jYXRlZCBpbiBhIHBvb2wgZnJvbSBvbGRSZWYgdG8gbmV3UmVmLgorICogSWYg b2xkUmVmIGlzIG5vbi1OVUxMIGFuZCBwcmVzZW50IGluIHRoZSBwYXJlbnQgcG9vbCBvZiBwcm94 eSwgaXQgaXMgcmVtb3ZlZC4KKyAqLworaW50IHN2bl9zd2lnX3B5X3Bvb2xfc2V0X293bmVkX3Jl ZihQeU9iamVjdCAqcHJveHksIFB5T2JqZWN0ICpvbGRSZWYsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpuZXdSZWYpCit7CisgIFB5T2JqZWN0ICp0ZW1wOwor ICBQeU9iamVjdCAqcHlfcG9vbCA9IHByb3h5X2dldF9wb29sKHByb3h5KTsKKworICBpZiAob2xk UmVmICE9IE5VTEwpCisgICAgeworICAgICAgdGVtcCA9IFB5T2JqZWN0X0NhbGxNZXRob2QocHlf cG9vbCwgcmVtb3ZlT3duZWRSZWYsIG9iamVjdFR1cGxlLCBvbGRSZWYpOworICAgICAgaWYgKHRl bXAgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICBlbHNlCisgICAgICAgIFB5X0RF Q1JFRih0ZW1wKTsKKyAgICB9CisgIGlmIChuZXdSZWYgIT0gTlVMTCkKKyAgICB7CisgICAgICB0 ZW1wID0gUHlPYmplY3RfQ2FsbE1ldGhvZChweV9wb29sLCBhZGRPd25lZFJlZiwgb2JqZWN0VHVw bGUsIG5ld1JlZik7CisgICAgICBpZiAodGVtcCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gMTsK KyAgICAgIGVsc2UKKyAgICAgICAgUHlfREVDUkVGKHRlbXApOworICAgIH0KKyAgcmV0dXJuIDA7 Cit9CiAMCiAvKiBXcmFwcGVyIGZvciBTV0lHX1R5cGVRdWVyeSAqLwogI2RlZmluZSBzdm5fc3dp Z19UeXBlUXVlcnkoeCkgU1dJR19UeXBlUXVlcnkoeCkKIAogLyoqIFdyYXBwZXIgZm9yIFNXSUdf TmV3UG9pbnRlck9iaiAqLwotUHlPYmplY3QgKnN2bl9zd2lnX05ld1BvaW50ZXJPYmoodm9pZCAq b2JqLCBzd2lnX3R5cGVfaW5mbyAqdHlwZSwgCitQeU9iamVjdCAqc3ZuX3N3aWdfTmV3UG9pbnRl ck9iaih2b2lkICpvYmosIHN3aWdfdHlwZV9pbmZvICp0eXBlLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHlPYmplY3QgKnBvb2wpCiB7CiAgIFB5T2JqZWN0ICpwcm94eSA9IFNX SUdfTmV3UG9pbnRlck9iaihvYmosIHR5cGUsIDApOwogCi0gIGlmIChwcm94eSA9PSBOVUxMKSB7 CisgIGlmIChwcm94eSA9PSBOVUxMKQogICAgIHJldHVybiBOVUxMOwotICB9Ci0gIAotICBpZiAo cHJveHlfc2V0X3Bvb2woJnByb3h5LCBwb29sKSkgewotICAgIFB5X0RFQ1JFRihwcm94eSk7Ci0g ICAgcmV0dXJuIE5VTEw7Ci0gIH0KKworICBpZiAocHJveHlfc2V0X3Bvb2woJnByb3h5LCBwb29s KSkKKyAgICB7CisgICAgICBQeV9ERUNSRUYocHJveHkpOworICAgICAgcmV0dXJuIE5VTEw7Cisg ICAgfQogCiAgIHJldHVybiBwcm94eTsKIH0KIAogLyoqIHN2bl9zd2lnX05ld1BvaW50ZXJPYmos IGV4Y2VwdCBhIHN0cmluZyBpcyB1c2VkIHRvIGRlc2NyaWJlIHRoZSB0eXBlICovCi1zdGF0aWMg UHlPYmplY3QgKnN2bl9zd2lnX05ld1BvaW50ZXJPYmpTdHJpbmcodm9pZCAqcHRyLCBjb25zdCBj aGFyICp0eXBlLCAKK3N0YXRpYyBQeU9iamVjdCAqc3ZuX3N3aWdfTmV3UG9pbnRlck9ialN0cmlu Zyh2b2lkICpwdHIsIGNvbnN0IGNoYXIgKnR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKnB5X3Bvb2wpCiB7CiAgIHN3aWdfdHlwZV9p bmZvICp0eXBlaW5mbyA9IHN2bl9zd2lnX1R5cGVRdWVyeSh0eXBlKTsKLSAgaWYgKHR5cGVpbmZv ID09IE5VTEwpIHsKLSAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiQ2Fubm90 IGZpbmQgcmVxdWlyZWQgdHlwZW9iamVjdCIpOwotICAgIHJldHVybiBOVUxMOwotICB9CisgIGlm ICh0eXBlaW5mbyA9PSBOVUxMKQorICAgIHsKKyAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19U eXBlRXJyb3IsICJDYW5ub3QgZmluZCByZXF1aXJlZCB0eXBlb2JqZWN0Iik7CisgICAgICByZXR1 cm4gTlVMTDsKKyAgICB9CisKICAgLyogIyMjIGNhY2hlIHRoZSBzd2lnX3R5cGVfaW5mbyBhdCBz b21lIHBvaW50PyAqLwogICByZXR1cm4gc3ZuX3N3aWdfTmV3UG9pbnRlck9iaihwdHIsIHR5cGVp bmZvLCBweV9wb29sKTsKIH0KQEAgLTIwMywyMCArMjU5LDIxIEBACiAvKiogV3JhcHBlciBmb3Ig U1dJR19Db252ZXJ0UHRyICovCiBpbnQgc3ZuX3N3aWdfQ29udmVydFB0cihQeU9iamVjdCAqaW5w dXQsIHZvaWQgKipvYmosIHN3aWdfdHlwZV9pbmZvICp0eXBlKQogewotICBpZiAoUHlPYmplY3Rf SGFzQXR0clN0cmluZyhpbnB1dCwgYXNzZXJ0VmFsaWQpKSB7Ci0gICAgUHlPYmplY3QgKnJlc3Vs dCA9IFB5T2JqZWN0X0NhbGxNZXRob2QoaW5wdXQsIGFzc2VydFZhbGlkLCBlbXB0eVR1cGxlKTsK LSAgICBpZiAocmVzdWx0ID09IE5VTEwpIHsKLSAgICAgIHJldHVybiAxOwotICAgIH0KLSAgICBQ eV9ERUNSRUYocmVzdWx0KTsKLSAgfQotICBpZiAoUHlPYmplY3RfSGFzQXR0clN0cmluZyhpbnB1 dCwgdW53cmFwKSkgewotICAgIGlucHV0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChpbnB1dCwgdW53 cmFwLCBlbXB0eVR1cGxlKTsKLSAgICBpZiAoaW5wdXQgPT0gTlVMTCkgewotICAgICAgcmV0dXJu IDE7CisgIGlmIChQeU9iamVjdF9IYXNBdHRyU3RyaW5nKGlucHV0LCBhc3NlcnRWYWxpZCkpCisg ICAgeworICAgICAgUHlPYmplY3QgKnJlc3VsdCA9IFB5T2JqZWN0X0NhbGxNZXRob2QoaW5wdXQs IGFzc2VydFZhbGlkLCBlbXB0eVR1cGxlKTsKKyAgICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKKyAg ICAgICAgcmV0dXJuIDE7CisgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICB9CisgIGlmIChQ eU9iamVjdF9IYXNBdHRyU3RyaW5nKGlucHV0LCB1bndyYXApKQorICAgIHsKKyAgICAgIGlucHV0 ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChpbnB1dCwgdW53cmFwLCBlbXB0eVR1cGxlKTsKKyAgICAg IGlmIChpbnB1dCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gMTsKKyAgICAgIFB5X0RFQ1JFRihp bnB1dCk7CiAgICAgfQotICAgIFB5X0RFQ1JFRihpbnB1dCk7Ci0gIH0KKwogICByZXR1cm4gU1dJ R19Db252ZXJ0UHRyKGlucHV0LCBvYmosIHR5cGUsIFNXSUdfUE9JTlRFUl9FWENFUFRJT04gfCAw KTsKIH0KIApAQCAtMjMxLDMxICsyODgsMjggQEAKIHZvaWQgKnN2bl9zd2lnX011c3RHZXRQdHIo dm9pZCAqaW5wdXQsIHN3aWdfdHlwZV9pbmZvICp0eXBlLCBpbnQgYXJnbnVtLAogICAgICAgICAg ICAgICAgICAgICAgICAgICBQeU9iamVjdCAqKnB5X3Bvb2wpCiB7Ci0gIGlmIChQeU9iamVjdF9I YXNBdHRyU3RyaW5nKGlucHV0LCBhc3NlcnRWYWxpZCkpIHsKLSAgICBQeU9iamVjdCAqcmVzdWx0 ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChpbnB1dCwgYXNzZXJ0VmFsaWQsIGVtcHR5VHVwbGUpOwot ICAgIGlmIChyZXN1bHQgPT0gTlVMTCkgewotICAgICAgcmV0dXJuIE5VTEw7CisgIGlmIChQeU9i amVjdF9IYXNBdHRyU3RyaW5nKGlucHV0LCBhc3NlcnRWYWxpZCkpCisgICAgeworICAgICAgUHlP YmplY3QgKnJlc3VsdCA9IFB5T2JqZWN0X0NhbGxNZXRob2QoaW5wdXQsIGFzc2VydFZhbGlkLCBl bXB0eVR1cGxlKTsKKyAgICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5V TEw7CisgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKICAgICB9Ci0gICAgUHlfREVDUkVGKHJlc3Vs dCk7Ci0gIH0KLSAgaWYgKHB5X3Bvb2wgIT0gTlVMTCkgewotICAgIGlmIChQeU9iamVjdF9IYXNB dHRyU3RyaW5nKGlucHV0LCBwYXJlbnRQb29sKSkgewotICAgICAgKnB5X3Bvb2wgPSBQeU9iamVj dF9HZXRBdHRyU3RyaW5nKGlucHV0LCBwYXJlbnRQb29sKTsKLSAgICAgIFB5X0RFQ1JFRigqcHlf cG9vbCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICpweV9wb29sID0gX2dsb2JhbF9zdm5fc3dpZ19w eV9wb29sOwotICAgIH0KLSAgfQotICBpZiAoUHlPYmplY3RfSGFzQXR0clN0cmluZyhpbnB1dCwg dW53cmFwKSkgewotICAgIGlucHV0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChpbnB1dCwgdW53cmFw LCBlbXB0eVR1cGxlKTsKLSAgICBpZiAoaW5wdXQgPT0gTlVMTCkgewotICAgICAgcmV0dXJuIE5V TEw7CisKKyAgaWYgKHB5X3Bvb2wgIT0gTlVMTCkKKyAgICAqcHlfcG9vbCA9IHByb3h5X2dldF9w b29sKChQeU9iamVjdCAqKSBpbnB1dCk7CisKKyAgaWYgKFB5T2JqZWN0X0hhc0F0dHJTdHJpbmco aW5wdXQsIHVud3JhcCkpCisgICAgeworICAgICAgaW5wdXQgPSBQeU9iamVjdF9DYWxsTWV0aG9k KGlucHV0LCB1bndyYXAsIGVtcHR5VHVwbGUpOworICAgICAgaWYgKGlucHV0ID09IE5VTEwpCisg ICAgICAgIHJldHVybiBOVUxMOworICAgICAgUHlfREVDUkVGKChQeU9iamVjdCAqKSBpbnB1dCk7 CiAgICAgfQotICAgIFB5X0RFQ1JFRigoUHlPYmplY3QgKikgaW5wdXQpOwotICB9CisKICAgcmV0 dXJuIFNXSUdfTXVzdEdldFB0cihpbnB1dCwgdHlwZSwgYXJnbnVtLCBTV0lHX1BPSU5URVJfRVhD RVBUSU9OIHwgMCk7CiB9Ci0gIAorCiAMCiAvKioqIEN1c3RvbSBTdWJ2ZXJzaW9uRXhjZXB0aW9u IHN0dWZmcy4gKioqLwogCkBAIC0yODMsNyArMzM3LDcgQEAKIH0KIAogdm9pZCBzdm5fc3dpZ19w eV9zdm5fZXhjZXB0aW9uKHN2bl9lcnJvcl90ICplcnIpCi17IAorewogICBQeU9iamVjdCAqZXhj X29iLCAqYXByX2Vycl9vYjsKIAogICBpZiAoZXJyID09IE5VTEwpCkBAIC0yOTUsNyArMzQ5LDcg QEAKICAgICByZXR1cm47CiAKICAgLyogSW5zdGFudGlhdGUgYSBTdWJ2ZXJzaW9uRXhjZXB0aW9u IG9iamVjdC4gKi8KLSAgZXhjX29iID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKFN1YnZlcnNpb25F eGNlcHRpb24sIChjaGFyICopInNPIiwgCisgIGV4Y19vYiA9IFB5T2JqZWN0X0NhbGxGdW5jdGlv bihTdWJ2ZXJzaW9uRXhjZXB0aW9uLCAoY2hhciAqKSJzTyIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBlcnItPm1lc3NhZ2UsIGFwcl9lcnJfb2IpOwogICBpZiAoZXhjX29iID09 IE5VTEwpCiAgICAgewpAQCAtMzQwLDcgKzM5NCw3IEBACiBzdGF0aWMgUHlPYmplY3QgKm1ha2Vf b2JfZnNfcm9vdChzdm5fZnNfcm9vdF90ICpwdHIsIFB5T2JqZWN0ICpweV9wb29sKQogewogICBy ZXR1cm4gc3ZuX3N3aWdfTmV3UG9pbnRlck9ialN0cmluZyhwdHIsICJzdm5fZnNfcm9vdF90ICoi LCBweV9wb29sKTsKLX0gCit9CiAvKioqLwogCiAvKiBDb252ZXJzaW9uIGZyb20gUHl0aG9uIHNp bmdsZSBvYmplY3RzIChub3QgaGFzaGVzL2xpc3RzL2V0Yy4pIHRvCkBAIC0zNDksMjAgKzQwMywy MiBAQAogewogICBpZiAob2IgPT0gUHlfTm9uZSkKICAgICByZXR1cm4gTlVMTDsKLSAgaWYgKCEg UHlTdHJpbmdfQ2hlY2sob2IpKSB7Ci0gICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJv ciwgIm5vdCBhIHN0cmluZyIpOwotICAgIHJldHVybiBOVUxMOwotICB9CisgIGlmICghIFB5U3Ry aW5nX0NoZWNrKG9iKSkKKyAgICB7CisgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVy cm9yLCAibm90IGEgc3RyaW5nIik7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgIHJldHVy biBhcHJfcHN0cmR1cChwb29sLCBQeVN0cmluZ19BU19TVFJJTkcob2IpKTsKIH0KIHN0YXRpYyBz dm5fc3RyaW5nX3QgKm1ha2Vfc3ZuX3N0cmluZ19mcm9tX29iKFB5T2JqZWN0ICpvYiwgYXByX3Bv b2xfdCAqcG9vbCkKIHsKICAgaWYgKG9iID09IFB5X05vbmUpCiAgICAgcmV0dXJuIE5VTEw7Ci0g IGlmICghIFB5U3RyaW5nX0NoZWNrKG9iKSkgewotICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19U eXBlRXJyb3IsICJub3QgYSBzdHJpbmciKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQorICBpZiAo ISBQeVN0cmluZ19DaGVjayhvYikpCisgICAgeworICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhj X1R5cGVFcnJvciwgIm5vdCBhIHN0cmluZyIpOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQog ICByZXR1cm4gc3ZuX3N0cmluZ19jcmVhdGUoUHlTdHJpbmdfQVNfU1RSSU5HKG9iKSwgcG9vbCk7 CiB9CiAKQEAgLTM4MSwyNSArNDM3LDI4IEBACiAgICAgaWYgKGRpY3QgPT0gTlVMTCkKICAgICAg ICAgcmV0dXJuIE5VTEw7CiAKLSAgICBmb3IgKGhpID0gYXByX2hhc2hfZmlyc3QoTlVMTCwgaGFz aCk7IGhpOyBoaSA9IGFwcl9oYXNoX25leHQoaGkpKSB7CisgICAgZm9yIChoaSA9IGFwcl9oYXNo X2ZpcnN0KE5VTEwsIGhhc2gpOyBoaTsgaGkgPSBhcHJfaGFzaF9uZXh0KGhpKSkKKyAgICAgIHsK ICAgICAgICAgY29uc3Qgdm9pZCAqa2V5OwogICAgICAgICB2b2lkICp2YWw7CiAgICAgICAgIFB5 T2JqZWN0ICp2YWx1ZTsKIAogICAgICAgICBhcHJfaGFzaF90aGlzKGhpLCAma2V5LCBOVUxMLCAm dmFsKTsKICAgICAgICAgdmFsdWUgPSAoKmNvbnZlcnRlcl9mdW5jKSh2YWwsIGN0eCwgcHlfcG9v bCk7Ci0gICAgICAgIGlmICh2YWx1ZSA9PSBOVUxMKSB7CisgICAgICAgIGlmICh2YWx1ZSA9PSBO VUxMKQorICAgICAgICAgIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRihkaWN0KTsKICAgICAgICAg ICAgIHJldHVybiBOVUxMOwotICAgICAgICB9CisgICAgICAgICAgfQogICAgICAgICAvKiAjIyMg Z290dGEgY2FzdCB0aGlzIHRoaW5nIGN1eiBQeXRob24gZG9lc24ndCB1c2UgImNvbnN0IiAqLwot ICAgICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZGljdCwgKGNoYXIgKilrZXksIHZhbHVl KSA9PSAtMSkgeworICAgICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZGljdCwgKGNoYXIg KilrZXksIHZhbHVlKSA9PSAtMSkKKyAgICAgICAgICB7CiAgICAgICAgICAgICBQeV9ERUNSRUYo dmFsdWUpOwogICAgICAgICAgICAgUHlfREVDUkVGKGRpY3QpOwogICAgICAgICAgICAgcmV0dXJu IE5VTEw7Ci0gICAgICAgIH0KKyAgICAgICAgICB9CiAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7 Ci0gICAgfQorICAgICAgfQogCiAgICAgcmV0dXJuIGRpY3Q7CiB9CkBAIC00NDYsNyArNTA1LDcg QEAKICAgICAgIHVybCA9IFB5X05vbmU7CiAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAg fQotICAgICAgICAKKwogICBpZiAoaXRlbS0+Y29weWZyb21fdXJsKQogICAgIGNmX3VybCA9IFB5 U3RyaW5nX0Zyb21TdHJpbmcoaXRlbS0+Y29weWZyb21fdXJsKTsKICAgZWxzZQpAQCAtNDU0LDcg KzUxMyw3IEBACiAgICAgICBjZl91cmwgPSBQeV9Ob25lOwogICAgICAgUHlfSU5DUkVGKFB5X05v bmUpOwogICAgIH0KLSAgICAgICAgCisKICAga2luZCA9IFB5SW50X0Zyb21Mb25nKGl0ZW0tPmtp bmQpOwogICByZXYgPSBQeUludF9Gcm9tTG9uZyhpdGVtLT5yZXZpc2lvbik7CiAgIHN0YXRlID0g UHlJbnRfRnJvbUxvbmcoaXRlbS0+c3RhdGVfZmxhZ3MpOwpAQCAtNDg1LDYgKzU0NCw1MiBAQAog ICByZXR1cm4gY29udmVydF9oYXNoKGhhc2gsIGNvbnZlcnRfc3ZuX3N0cmluZ190LCBOVUxMLCBO VUxMKTsKIH0KIAorc3RhdGljIFB5T2JqZWN0ICpwcm9wYXJyYXlfdG9fZGljdChjb25zdCBhcHJf YXJyYXlfaGVhZGVyX3QgKmFycmF5KQoreworICAgIFB5T2JqZWN0ICpkaWN0ID0gUHlEaWN0X05l dygpOworICAgIGludCBpOworCisgICAgaWYgKGRpY3QgPT0gTlVMTCkKKyAgICAgIHJldHVybiBO VUxMOworCisgICAgZm9yIChpID0gMDsgaSA8IGFycmF5LT5uZWx0czsgKytpKQorICAgICAgewor ICAgICAgICBzdm5fcHJvcF90IHByb3A7CisgICAgICAgIFB5T2JqZWN0ICpweV9rZXksICpweV92 YWx1ZTsKKworICAgICAgICBwcm9wID0gQVBSX0FSUkFZX0lEWChhcnJheSwgaSwgc3ZuX3Byb3Bf dCk7CisKKyAgICAgICAgcHlfa2V5ID0gUHlTdHJpbmdfRnJvbVN0cmluZyhwcm9wLm5hbWUpOwor ICAgICAgICBpZiAocHlfa2V5ID09IE5VTEwpCisgICAgICAgICAgZ290byBlcnJvcjsKKworICAg ICAgICBpZiAocHJvcC52YWx1ZSA9PSBOVUxMKQorICAgICAgICAgIHsKKyAgICAgICAgICAgICBw eV92YWx1ZSA9IFB5X05vbmU7CisgICAgICAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOworICAg ICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICAgICBweV92YWx1 ZSA9IFB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKCh2b2lkICopcHJvcC52YWx1ZS0+ZGF0YSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3Au dmFsdWUtPmxlbik7CisgICAgICAgICAgICAgaWYgKHB5X3ZhbHVlID09IE5VTEwpCisgICAgICAg ICAgICAgICB7CisgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihweV9rZXkpOworICAgICAgICAg ICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisKKyAg ICAgICAgUHlEaWN0X1NldEl0ZW0oZGljdCwgcHlfa2V5LCBweV92YWx1ZSk7CisgICAgfQorCisg ICAgcmV0dXJuIGRpY3Q7CisKKyAgZXJyb3I6CisgICAgUHlfREVDUkVGKGRpY3QpOworICAgIHJl dHVybiBOVUxMOworCit9CisKIAogUHlPYmplY3QgKnN2bl9zd2lnX3B5X2xvY2F0aW9uaGFzaF90 b19kaWN0KGFwcl9oYXNoX3QgKmhhc2gpCiB7CkBAIC00OTYsNyArNjAxLDcgQEAKICAgICBpZiAo ZGljdCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGZvciAoaGkgPSBhcHJf aGFzaF9maXJzdChOVUxMLCBoYXNoKTsgaGk7IGhpID0gYXByX2hhc2hfbmV4dChoaSkpIAorICAg IGZvciAoaGkgPSBhcHJfaGFzaF9maXJzdChOVUxMLCBoYXNoKTsgaGk7IGhpID0gYXByX2hhc2hf bmV4dChoaSkpCiAgICAgICB7CiAgICAgICAgIGNvbnN0IHZvaWQgKms7CiAgICAgICAgIHZvaWQg KnY7CkBAIC01MTAsMTIgKzYxNSwxMyBAQAogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAg ICAgICAgfQogICAgICAgICB2YWx1ZSA9IFB5U3RyaW5nX0Zyb21TdHJpbmcoKGNoYXIgKil2KTsK LSAgICAgICAgaWYgKHZhbHVlID09IE5VTEwpIHsKKyAgICAgICAgaWYgKHZhbHVlID09IE5VTEwp CisgICAgICAgICAgewogICAgICAgICAgICAgUHlfREVDUkVGKGtleSk7CiAgICAgICAgICAgICBQ eV9ERUNSRUYoZGljdCk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAg ICAgICBpZiAoUHlEaWN0X1NldEl0ZW0oZGljdCwga2V5LCB2YWx1ZSkgPT0gLTEpIAorICAgICAg ICAgIH0KKyAgICAgICAgaWYgKFB5RGljdF9TZXRJdGVtKGRpY3QsIGtleSwgdmFsdWUpID09IC0x KQogICAgICAgICAgIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CiAgICAgICAgICAg ICBQeV9ERUNSRUYoZGljdCk7CkBAIC01MjcsMTEgKzYzMywxMSBAQAogICAgIHJldHVybiBkaWN0 OwogfQogCi1QeU9iamVjdCAqc3ZuX3N3aWdfcHlfY29udmVydF9oYXNoKGFwcl9oYXNoX3QgKmhh c2gsIHN3aWdfdHlwZV9pbmZvICp0eXBlLCAKK1B5T2JqZWN0ICpzdm5fc3dpZ19weV9jb252ZXJ0 X2hhc2goYXByX2hhc2hfdCAqaGFzaCwgc3dpZ190eXBlX2luZm8gKnR5cGUsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpweV9wb29sKQogewogICByZXR1cm4g Y29udmVydF9oYXNoKGhhc2gsIGNvbnZlcnRfdG9fc3dpZ3R5cGUsIHR5cGUsIHB5X3Bvb2wpOwot fSAgCit9CiAKICNkZWZpbmUgREVDTEFSRV9TV0lHX0NPTlNUUlVDVE9SKHR5cGUsIGR1cCkgXAog c3RhdGljIFB5T2JqZWN0ICptYWtlX29iXyMjdHlwZSh2b2lkICp2YWx1ZSkgXApAQCAtNTQzLDEz ICs2NDksMTYgQEAKICAgcmV0dXJuIHN2bl9zd2lnX05ld1BvaW50ZXJPYmpTdHJpbmcobmV3X3Zh bHVlLCAic3ZuXyIgI3R5cGUgIl90ICoiLCBcCiAgICAgICBuZXdfcHlfcG9vbCk7IFwKIH0KLSAK KwogREVDTEFSRV9TV0lHX0NPTlNUUlVDVE9SKHR4ZGVsdGFfd2luZG93LCBzdm5fdHhkZWx0YV93 aW5kb3dfZHVwKQogREVDTEFSRV9TV0lHX0NPTlNUUlVDVE9SKGxvZ19jaGFuZ2VkX3BhdGgsIHN2 bl9sb2dfY2hhbmdlZF9wYXRoX2R1cCkKIERFQ0xBUkVfU1dJR19DT05TVFJVQ1RPUih3Y19zdGF0 dXMsIHN2bl93Y19kdXBfc3RhdHVzKQogREVDTEFSRV9TV0lHX0NPTlNUUlVDVE9SKGxvY2ssIHN2 bl9sb2NrX2R1cCkKIERFQ0xBUkVfU1dJR19DT05TVFJVQ1RPUihhdXRoX3NzbF9zZXJ2ZXJfY2Vy dF9pbmZvLAogICAgIHN2bl9hdXRoX3NzbF9zZXJ2ZXJfY2VydF9pbmZvX2R1cCkKK0RFQ0xBUkVf U1dJR19DT05TVFJVQ1RPUihpbmZvLCBzdm5faW5mb19kdXApCitERUNMQVJFX1NXSUdfQ09OU1RS VUNUT1IoY29tbWl0X2luZm8sIHN2bl9jb21taXRfaW5mb19kdXApCitERUNMQVJFX1NXSUdfQ09O U1RSVUNUT1Iod2Nfbm90aWZ5LCBzdm5fd2NfZHVwX25vdGlmeSkKIAogc3RhdGljIFB5T2JqZWN0 ICpjb252ZXJ0X2xvZ19jaGFuZ2VkX3BhdGgodm9pZCAqdmFsdWUsIHZvaWQgKmN0eCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpweV9wb29sKQpA QCAtNTYyLDE0ICs2NzEsMTUgQEAKICAgICBQeU9iamVjdCAqbGlzdCA9IFB5TGlzdF9OZXcoMCk7 CiAgICAgY2hhciAqczsKIAotICAgIHdoaWxlICgocyA9ICpzdHJpbmdzKyspICE9IE5VTEwpIHsK KyAgICB3aGlsZSAoKHMgPSAqc3RyaW5ncysrKSAhPSBOVUxMKQorICAgICAgewogICAgICAgICBQ eU9iamVjdCAqb2IgPSBQeVN0cmluZ19Gcm9tU3RyaW5nKHMpOwogCiAgICAgICAgIGlmIChvYiA9 PSBOVUxMKQogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgaWYgKFB5TGlzdF9BcHBl bmQobGlzdCwgb2IpID09IC0xKQogICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICB9CisgICAg ICB9CiAKICAgICByZXR1cm4gbGlzdDsKIApAQCAtNTg0LDE2ICs2OTQsMTcgQEAKICAgYXByX2hh c2hfdCAqaGFzaDsKICAgUHlPYmplY3QgKmtleXM7CiAgIGludCBpLCBudW1fa2V5czsKLSAgCisK ICAgaWYgKGRpY3QgPT0gUHlfTm9uZSkKICAgICByZXR1cm4gTlVMTDsKIAotICBpZiAoIVB5RGlj dF9DaGVjayhkaWN0KSkgewotICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJu b3QgYSBkaWN0aW9uYXJ5Iik7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KKyAgaWYgKCFQeURpY3Rf Q2hlY2soZGljdCkpCisgICAgeworICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJv ciwgIm5vdCBhIGRpY3Rpb25hcnkiKTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAotICBo YXNoID0gYXByX2hhc2hfbWFrZShwb29sKTsgIAorICBoYXNoID0gYXByX2hhc2hfbWFrZShwb29s KTsKICAga2V5cyA9IFB5RGljdF9LZXlzKGRpY3QpOwogICBudW1fa2V5cyA9IFB5TGlzdF9TaXpl KGtleXMpOwogICBmb3IgKGkgPSAwOyBpIDwgbnVtX2tleXM7IGkrKykKQEAgLTYwNiw3ICs3MTcs NyBAQAogICAgICAgUHlfREVDUkVGKHZhbHVlKTsKICAgICAgIGlmICghIChwcm9wbmFtZSAmJiBw cm9wdmFsKSkKICAgICAgICAgewotICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBl RXJyb3IsIAorICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICJkaWN0aW9uYXJ5IGtleXMvdmFsdWVzIGFyZW4ndCBzdHJp bmdzIik7CiAgICAgICAgICAgUHlfREVDUkVGKGtleXMpOwogICAgICAgICAgIHJldHVybiBOVUxM OwpAQCAtNjI4LDEyICs3MzksMTMgQEAKICAgaWYgKGRpY3QgPT0gUHlfTm9uZSkKICAgICByZXR1 cm4gTlVMTDsKIAotICBpZiAoIVB5RGljdF9DaGVjayhkaWN0KSkgewotICAgIFB5RXJyX1NldFN0 cmluZyhQeUV4Y19UeXBlRXJyb3IsICJub3QgYSBkaWN0aW9uYXJ5Iik7Ci0gICAgcmV0dXJuIE5V TEw7Ci0gIH0KKyAgaWYgKCFQeURpY3RfQ2hlY2soZGljdCkpCisgICAgeworICAgICAgUHlFcnJf U2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgIm5vdCBhIGRpY3Rpb25hcnkiKTsKKyAgICAgIHJl dHVybiBOVUxMOworICAgIH0KIAotICBoYXNoID0gYXByX2hhc2hfbWFrZShwb29sKTsgIAorICBo YXNoID0gYXByX2hhc2hfbWFrZShwb29sKTsKICAga2V5cyA9IFB5RGljdF9LZXlzKGRpY3QpOwog ICBudW1fa2V5cyA9IFB5TGlzdF9TaXplKGtleXMpOwogICBmb3IgKGkgPSAwOyBpIDwgbnVtX2tl eXM7IGkrKykKQEAgLTY0Niw3ICs3NTgsNyBAQAogICAgICAgUHlfREVDUkVGKHZhbHVlKTsKICAg ICAgIGlmICghIChwcm9wbmFtZSAmJiBwcm9wdmFsKSkKICAgICAgICAgewotICAgICAgICAgIFB5 RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsIAorICAgICAgICAgIFB5RXJyX1NldFN0cmlu ZyhQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJkaWN0aW9uYXJ5 IGtleXMvdmFsdWVzIGFyZW4ndCBzdHJpbmdzIik7CiAgICAgICAgICAgUHlfREVDUkVGKGtleXMp OwogICAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtNjY0LDI3ICs3NzYsMzAgQEAKICAgICBpbnQg dGFyZ2xlbjsKICAgICBhcHJfYXJyYXlfaGVhZGVyX3QgKnRlbXA7CiAKLSAgICBpZiAoIVB5U2Vx dWVuY2VfQ2hlY2soc291cmNlKSkgeworICAgIGlmICghUHlTZXF1ZW5jZV9DaGVjayhzb3VyY2Up KQorICAgICAgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAibm90 IGEgc2VxdWVuY2UiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQorICAgICAgfQogICAg IHRhcmdsZW4gPSBQeVNlcXVlbmNlX0xlbmd0aChzb3VyY2UpOwogICAgIHRlbXAgPSBhcHJfYXJy YXlfbWFrZShwb29sLCB0YXJnbGVuLCBzaXplb2YoY29uc3QgY2hhciAqKSk7CiAgICAgLyogQVBS X0FSUkFZX0lEWCBkb2Vzbid0IGFjdHVhbGx5IGluY3JlbWVudCB0aGUgYXJyYXkgaXRlbSBjb3Vu dAogICAgICAgIChsaWtlLCBzYXksIGFwcl9hcnJheV9wdXNoIHdvdWxkKS4gKi8KICAgICB0ZW1w LT5uZWx0cyA9IHRhcmdsZW47Ci0gICAgd2hpbGUgKHRhcmdsZW4tLSkgeworICAgIHdoaWxlICh0 YXJnbGVuLS0pCisgICAgICB7CiAgICAgICAgIFB5T2JqZWN0ICpvID0gUHlTZXF1ZW5jZV9HZXRJ dGVtKHNvdXJjZSwgdGFyZ2xlbik7CiAgICAgICAgIGlmIChvID09IE5VTEwpCiAgICAgICAgICAg ICByZXR1cm4gTlVMTDsKLSAgICAgICAgaWYgKCFQeVN0cmluZ19DaGVjayhvKSkgeworICAgICAg ICBpZiAoIVB5U3RyaW5nX0NoZWNrKG8pKQorICAgICAgICAgIHsKICAgICAgICAgICAgIFB5X0RF Q1JFRihvKTsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJu b3QgYSBzdHJpbmciKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9CisgICAg ICAgICAgfQogICAgICAgICBBUFJfQVJSQVlfSURYKHRlbXAsIHRhcmdsZW4sIGNvbnN0IGNoYXIg KikgPSBQeVN0cmluZ19BU19TVFJJTkcobyk7CiAgICAgICAgIFB5X0RFQ1JFRihvKTsKLSAgICB9 CisgICAgICB9CiAgICAgcmV0dXJuIHRlbXA7CiB9CiAKQEAgLTY5NSwzMiArODEwLDM3IEBACiAg ICAgaW50IHRhcmdsZW47CiAgICAgYXByX2FycmF5X2hlYWRlcl90ICp0ZW1wOwogCi0gICAgaWYg KCFQeVNlcXVlbmNlX0NoZWNrKHNvdXJjZSkpIHsKKyAgICBpZiAoIVB5U2VxdWVuY2VfQ2hlY2so c291cmNlKSkKKyAgICAgIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJv ciwgIm5vdCBhIHNlcXVlbmNlIik7CiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KKyAgICAg IH0KICAgICB0YXJnbGVuID0gUHlTZXF1ZW5jZV9MZW5ndGgoc291cmNlKTsKICAgICB0ZW1wID0g YXByX2FycmF5X21ha2UocG9vbCwgdGFyZ2xlbiwgc2l6ZW9mKHN2bl9yZXZudW1fdCkpOwogICAg IC8qIEFQUl9BUlJBWV9JRFggZG9lc24ndCBhY3R1YWxseSBpbmNyZW1lbnQgdGhlIGFycmF5IGl0 ZW0gY291bnQKICAgICAgICAobGlrZSwgc2F5LCBhcHJfYXJyYXlfcHVzaCB3b3VsZCkuICovCiAg ICAgdGVtcC0+bmVsdHMgPSB0YXJnbGVuOwotICAgIHdoaWxlICh0YXJnbGVuLS0pIHsKKyAgICB3 aGlsZSAodGFyZ2xlbi0tKQorICAgICAgewogICAgICAgICBQeU9iamVjdCAqbyA9IFB5U2VxdWVu Y2VfR2V0SXRlbShzb3VyY2UsIHRhcmdsZW4pOwogICAgICAgICBpZiAobyA9PSBOVUxMKQogICAg ICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIGlmIChQeUxvbmdfQ2hlY2sobykpIHsKLSAg ICAgICAgICAgIEFQUl9BUlJBWV9JRFgodGVtcCwgdGFyZ2xlbiwgc3ZuX3Jldm51bV90KSA9IAor ICAgICAgICBpZiAoUHlMb25nX0NoZWNrKG8pKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIEFQ Ul9BUlJBWV9JRFgodGVtcCwgdGFyZ2xlbiwgc3ZuX3Jldm51bV90KSA9CiAgICAgICAgICAgICAg IChzdm5fcmV2bnVtX3QpUHlMb25nX0FzTG9uZyhvKTsKLSAgICAgICAgfQotICAgICAgICBlbHNl IGlmIChQeUludF9DaGVjayhvKSkgewotICAgICAgICAgICAgQVBSX0FSUkFZX0lEWCh0ZW1wLCB0 YXJnbGVuLCBzdm5fcmV2bnVtX3QpID0gCisgICAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChQ eUludF9DaGVjayhvKSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBBUFJfQVJSQVlfSURYKHRl bXAsIHRhcmdsZW4sIHN2bl9yZXZudW1fdCkgPQogICAgICAgICAgICAgICAoc3ZuX3Jldm51bV90 KVB5SW50X0FzTG9uZyhvKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKKyAgICAgICAgICB9 CisgICAgICAgIGVsc2UKKyAgICAgICAgICB7CiAgICAgICAgICAgICBQeV9ERUNSRUYobyk7CiAg ICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAibm90IGFuIGludGVn ZXIgdHlwZSIpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KKyAgICAgICAg ICB9CiAgICAgICAgIFB5X0RFQ1JFRihvKTsKICAgICB9CiAgICAgcmV0dXJuIHRlbXA7CkBAIC03 MzcsMTMgKzg1NywxNCBAQAogICAgIFB5T2JqZWN0ICpsaXN0ID0gUHlMaXN0X05ldyhhcnJheS0+ bmVsdHMpOwogICAgIGludCBpOwogCi0gICAgZm9yIChpID0gMDsgaSA8IGFycmF5LT5uZWx0czsg KytpKSB7Ci0gICAgICAgIFB5T2JqZWN0ICpvYiA9IAorICAgIGZvciAoaSA9IDA7IGkgPCBhcnJh eS0+bmVsdHM7ICsraSkKKyAgICAgIHsKKyAgICAgICAgUHlPYmplY3QgKm9iID0KICAgICAgICAg ICBQeVN0cmluZ19Gcm9tU3RyaW5nKEFQUl9BUlJBWV9JRFgoYXJyYXksIGksIGNvbnN0IGNoYXIg KikpOwogICAgICAgICBpZiAob2IgPT0gTlVMTCkKICAgICAgICAgICBnb3RvIGVycm9yOwogICAg ICAgICBQeUxpc3RfU0VUX0lURU0obGlzdCwgaSwgb2IpOwotICAgIH0KKyAgICAgIH0KICAgICBy ZXR1cm4gbGlzdDsKIAogICBlcnJvcjoKQEAgLTc1NywxMyArODc4LDE0IEBACiAgICAgUHlPYmpl Y3QgKmxpc3QgPSBQeUxpc3RfTmV3KGFycmF5LT5uZWx0cyk7CiAgICAgaW50IGk7CiAKLSAgICBm b3IgKGkgPSAwOyBpIDwgYXJyYXktPm5lbHRzOyArK2kpIHsKLSAgICAgICAgUHlPYmplY3QgKm9i IAorICAgIGZvciAoaSA9IDA7IGkgPCBhcnJheS0+bmVsdHM7ICsraSkKKyAgICAgIHsKKyAgICAg ICAgUHlPYmplY3QgKm9iCiAgICAgICAgICAgPSBQeUludF9Gcm9tTG9uZyhBUFJfQVJSQVlfSURY KGFycmF5LCBpLCBzdm5fcmV2bnVtX3QpKTsKICAgICAgICAgaWYgKG9iID09IE5VTEwpCiAgICAg ICAgICAgZ290byBlcnJvcjsKICAgICAgICAgUHlMaXN0X1NFVF9JVEVNKGxpc3QsIGksIG9iKTsK LSAgICB9CisgICAgICB9CiAgICAgcmV0dXJuIGxpc3Q7CiAKICAgZXJyb3I6CkBAIC03NzgsMTMg KzkwMCwxNCBAQAogICAgIFB5T2JqZWN0ICpsaXN0ID0gUHlMaXN0X05ldyhhcnJheS0+bmVsdHMp OwogICAgIGludCBpOwogCi0gICAgZm9yIChpID0gMDsgaSA8IGFycmF5LT5uZWx0czsgKytpKSB7 CisgICAgZm9yIChpID0gMDsgaSA8IGFycmF5LT5uZWx0czsgKytpKQorICAgICAgewogICAgICAg ICBQeU9iamVjdCAqb2IgPSBjb252ZXJ0X3N2bl9jbGllbnRfY29tbWl0X2l0ZW1fdAogICAgICAg ICAgIChBUFJfQVJSQVlfSURYKGFycmF5LCBpLCBzdm5fY2xpZW50X2NvbW1pdF9pdGVtX3QgKiks IE5VTEwpOwogICAgICAgICBpZiAob2IgPT0gTlVMTCkKICAgICAgICAgICBnb3RvIGVycm9yOwog ICAgICAgICBQeUxpc3RfU0VUX0lURU0obGlzdCwgaSwgb2IpOwotICAgIH0KKyAgICAgIH0KICAg ICByZXR1cm4gbGlzdDsKIAogICBlcnJvcjoKQEAgLTgyOSw4ICs5NTIsOCBAQAogICBQeU9iamVj dCAqYmF0b247ICAgICAgLyogdGhlIGRpci9maWxlIGJhdG9uIChvciBOVUxMIGZvciBlZGl0IGJh dG9uKSAqLwogfSBpdGVtX2JhdG9uOwogCi1zdGF0aWMgaXRlbV9iYXRvbiAqbWFrZV9iYXRvbihh cHJfcG9vbF90ICpwb29sLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0 ICplZGl0b3IsIAorc3RhdGljIGl0ZW1fYmF0b24gKm1ha2VfYmF0b24oYXByX3Bvb2xfdCAqcG9v bCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICplZGl0b3IsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqYmF0b24pCiB7CiAgIGl0ZW1fYmF0 b24gKm5ld2IgPSBhcHJfcGFsbG9jKHBvb2wsIHNpemVvZigqbmV3YikpOwpAQCAtODQ2LDcgKzk2 OSw3IEBACiAgIHJldHVybiBuZXdiOwogfQogCi1zdGF0aWMgc3ZuX2Vycm9yX3QgKmNsb3NlX2Jh dG9uKHZvaWQgKmJhdG9uLCAKK3N0YXRpYyBzdm5fZXJyb3JfdCAqY2xvc2VfYmF0b24odm9pZCAq YmF0b24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm1ldGhv ZCkKIHsKICAgaXRlbV9iYXRvbiAqaWIgPSBiYXRvbjsKQEAgLTkwNyw3ICsxMDMwLDcgQEAKICAg LyogdGhlcmUgaXMgbm8gcmV0dXJuIHZhbHVlLCBzbyBqdXN0IHRvc3MgdGhpcyBvYmplY3QgKHBy b2JhYmx5IFB5X05vbmUpICovCiAgIFB5X0RFQ1JFRihyZXN1bHQpOwogICBlcnIgPSBTVk5fTk9f RVJST1I7Ci0gIAorCiAgZmluaXNoZWQ6CiAgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygp OwogICByZXR1cm4gZXJyOwpAQCAtMTAyOCw3ICsxMTUxLDcgQEAKICAgLyogbWFrZV9iYXRvbiB0 YWtlcyBvdXIgJ3Jlc3VsdCcgcmVmZXJlbmNlICovCiAgICpjaGlsZF9iYXRvbiA9IG1ha2VfYmF0 b24oZGlyX3Bvb2wsIGliLT5lZGl0b3IsIHJlc3VsdCk7CiAgIGVyciA9IFNWTl9OT19FUlJPUjsK LSAgCisKICBmaW5pc2hlZDoKICAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7CiAgIHJl dHVybiBlcnI7CkBAIC0xMDQ4LDcgKzExNzEsNyBAQAogICAvKiAjIyMgcHl0aG9uIGRvZXNuJ3Qg aGF2ZSAnY29uc3QnIG9uIHRoZSBtZXRob2QgbmFtZSBhbmQgZm9ybWF0ICovCiAgIGlmICgocmVz dWx0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChpYi0+ZWRpdG9yLCAoY2hhciAqKSJjaGFuZ2VfZGly X3Byb3AiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikiT3Nz I08mIiwgaWItPmJhdG9uLCBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdmFsdWUgPyB2YWx1ZS0+ZGF0YSA6IE5VTEwsIAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdmFsdWUgPyB2YWx1ZS0+ZGF0YSA6IE5VTEwsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB2YWx1ZSA/IHZhbHVlLT5sZW4gOiAwLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9vYl9wb29sLCBwb29sKSkgPT0gTlVMTCkKICAg ICB7CkBAIC0xMTEzLDcgKzEyMzYsNyBAQAogICBpdGVtX2JhdG9uICppYiA9IHBhcmVudF9iYXRv bjsKICAgUHlPYmplY3QgKnJlc3VsdDsKICAgc3ZuX2Vycm9yX3QgKmVycjsKLSAgCisKICAgc3Zu X3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7CiAKICAgLyogIyMjIHB5dGhvbiBkb2Vzbid0IGhh dmUgJ2NvbnN0JyBvbiB0aGUgbWV0aG9kIG5hbWUgYW5kIGZvcm1hdCAqLwpAQCAtMTE1OSw3ICsx MjgyLDcgQEAKICAgICB7CiAgICAgICAvKiBpbnZva2UgdGhlIGhhbmRsZXIgd2l0aCB0aGUgd2lu ZG93ICovCiAgICAgICAvKiAjIyMgcHl0aG9uIGRvZXNuJ3QgaGF2ZSAnY29uc3QnIG9uIHRoZSBm b3JtYXQgKi8KLSAgICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihoYW5kbGVyLCAo Y2hhciAqKSJPJiIsIAorICAgICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGhhbmRs ZXIsIChjaGFyICopIk8mIiwKICAgICAgICAgbWFrZV9vYl90eGRlbHRhX3dpbmRvdywgd2luZG93 KTsKICAgICB9CiAKQEAgLTExNzgsNyArMTMwMSw3IEBACiAgIHJldHVybiBlcnI7CiB9CiAKLXN0 YXRpYyBzdm5fZXJyb3JfdCAqYXBwbHlfdGV4dGRlbHRhKHZvaWQgKmZpbGVfYmF0b24sIAorc3Rh dGljIHN2bl9lcnJvcl90ICphcHBseV90ZXh0ZGVsdGEodm9pZCAqZmlsZV9iYXRvbiwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJhc2VfY2hlY2tzdW0s CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX3R4ZGVsdGFfd2luZG93X2hh bmRsZXJfdCAqaGFuZGxlciwKQEAgLTEyMzgsNyArMTM2MSw3IEBACiAgIC8qICMjIyBweXRob24g ZG9lc24ndCBoYXZlICdjb25zdCcgb24gdGhlIG1ldGhvZCBuYW1lIGFuZCBmb3JtYXQgKi8KICAg aWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKGliLT5lZGl0b3IsIChjaGFyICopImNo YW5nZV9maWxlX3Byb3AiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNo YXIgKikiT3NzI08mIiwgaWItPmJhdG9uLCBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdmFsdWUgPyB2YWx1ZS0+ZGF0YSA6IE5VTEwsIAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPyB2YWx1ZS0+ZGF0YSA6IE5VTEwsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA/IHZhbHVlLT5sZW4gOiAwLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9vYl9wb29sLCBwb29sKSkgPT0g TlVMTCkKICAgICB7CkBAIC0xMjQ5LDcgKzEzNzIsNyBAQAogICAvKiB0aGVyZSBpcyBubyByZXR1 cm4gdmFsdWUsIHNvIGp1c3QgdG9zcyB0aGlzIG9iamVjdCAocHJvYmFibHkgUHlfTm9uZSkgKi8K ICAgUHlfREVDUkVGKHJlc3VsdCk7CiAgIGVyciA9IFNWTl9OT19FUlJPUjsKLSAgCisKICBmaW5p c2hlZDoKICAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7CiAgIHJldHVybiBlcnI7CkBA IC0xNDQ2LDE5ICsxNTY5LDMwIEBACiAgIHJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyBzdm5fZXJy b3JfdCAqCitjbG9zZV9oYW5kbGVyX3B5aW8odm9pZCAqYmF0b24pCit7CisgIFB5T2JqZWN0ICpw eV9pbyA9IGJhdG9uOworICBQeV9ERUNSRUYocHlfaW8pOworICByZXR1cm4gU1ZOX05PX0VSUk9S OworfQorCisKIHN2bl9zdHJlYW1fdCAqCiBzdm5fc3dpZ19weV9tYWtlX3N0cmVhbSAoUHlPYmpl Y3QgKnB5X2lvLCBhcHJfcG9vbF90ICpwb29sKQogewogICBzdm5fc3RyZWFtX3QgKnN0cmVhbTsK IAogICAvKiBCb3Jyb3cgdGhlIGNhbGxlcidzIHJlZmVyZW5jZSB0byBweV9pbyAtIHRoaXMgaXMg c2FmZSBvbmx5IGJlY2F1c2UgdGhlCi0gICAqIGNhbGxlciBtdXN0IGhhdmUgYSByZWZlcmVuY2Ug aW4gb3JkZXIgdG8gcGFzcyB0aGUgb2JqZWN0IGludG8gdGhlIAorICAgKiBjYWxsZXIgbXVzdCBo YXZlIGEgcmVmZXJlbmNlIGluIG9yZGVyIHRvIHBhc3MgdGhlIG9iamVjdCBpbnRvIHRoZQogICAg KiBiaW5kaW5ncywgYW5kIHdlIHdpbGwgYmUgZmluaXNoZWQgd2l0aCB0aGUgcHlfaW8gb2JqZWN0 IGJlZm9yZSB3ZSByZXR1cm4KICAgICogdG8gcHl0aG9uLiBJLmUuIERPIE5PVCBTVE9SRSBBV0FZ IFRIRSBSRVNVTFRJTkcgc3ZuX3N0cmVhbV90ICogZm9yIHVzZQogICAgKiBvdmVyIG11bHRpcGxl IGNhbGxzIGludG8gdGhlIGJpbmRpbmdzLiAqLworICBQeV9JTkNSRUYocHlfaW8pOwogICBzdHJl YW0gPSBzdm5fc3RyZWFtX2NyZWF0ZSAocHlfaW8sIHBvb2wpOwogICBzdm5fc3RyZWFtX3NldF9y ZWFkIChzdHJlYW0sIHJlYWRfaGFuZGxlcl9weWlvKTsKICAgc3ZuX3N0cmVhbV9zZXRfd3JpdGUg KHN0cmVhbSwgd3JpdGVfaGFuZGxlcl9weWlvKTsKKyAgc3ZuX3N0cmVhbV9zZXRfY2xvc2UgKHN0 cmVhbSwgY2xvc2VfaGFuZGxlcl9weWlvKTsKIAogICByZXR1cm4gc3RyZWFtOwogfQpAQCAtMTQ4 MSwxMSArMTYxNSwxMSBAQAogICAgIHJldHVybjsKIAogICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5 X2xvY2soKTsKLSAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oZnVuY3Rpb24s IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSIoc2lpc2lp aSkiLCAKKyAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oZnVuY3Rpb24sCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopIihzaWlzaWlpKSIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGgsIGFjdGlvbiwga2lu ZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWltZV90eXBlLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50X3N0YXRlLCBwcm9wX3N0 YXRlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudF9zdGF0 ZSwgcHJvcF9zdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV2 aXNpb24pKSA9PSBOVUxMKQogICAgIHsKICAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9l cnJvcigpOwpAQCAtMTUwNiw2ICsxNjQwLDQxIEBACiB9CiAKIAordm9pZCBzdm5fc3dpZ19weV9u b3RpZnlfZnVuYzIodm9pZCAqYmF0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBzdm5fd2Nfbm90aWZ5X3QgKm5vdGlmeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGFwcl9wb29sX3QgKnBvb2wpCit7CisgIFB5T2JqZWN0ICpmdW5jdGlvbiA9IGJhdG9uOwor ICBQeU9iamVjdCAqcmVzdWx0OworICBzdm5fZXJyb3JfdCAqZXJyID0gU1ZOX05PX0VSUk9SOwor CisgIGlmIChmdW5jdGlvbiA9PSBOVUxMIHx8IGZ1bmN0aW9uID09IFB5X05vbmUpCisgICAgcmV0 dXJuOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisgIGlmICgocmVzdWx0 ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGZ1bmN0aW9uLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoY2hhciAqKSIoTyZPJikiLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBtYWtlX29iX3djX25vdGlmeSwgbm90aWZ5LAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQor ICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgIH0KKyAg ZWxzZQorICAgIHsKKyAgICAgIC8qIFRoZSBjYWxsYmFjayBzaG91bGRuJ3QgYmUgcmV0dXJuaW5n IGFueXRoaW5nLiAqLworICAgICAgaWYgKHJlc3VsdCAhPSBQeV9Ob25lKQorICAgICAgICBlcnIg PSBjYWxsYmFja19iYWRfcmV0dXJuX2Vycm9yKCJOb3QgTm9uZSIpOworICAgICAgUHlfREVDUkVG KHJlc3VsdCk7CisgICAgfQorCisgIC8qIE91ciBlcnJvciBoYXMgbm8gcGxhY2UgdG8gZ28uIDot KCAqLworICBpZiAoZXJyKQorICAgIHN2bl9lcnJvcl9jbGVhcihlcnIpOworCisgIHN2bl9zd2ln X3B5X3JlbGVhc2VfcHlfbG9jaygpOworfQorCiB2b2lkIHN2bl9zd2lnX3B5X3N0YXR1c19mdW5j KHZvaWQgKmJhdG9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpw YXRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdm5fd2Nfc3RhdHVzX3QgKnN0YXR1 cykKQEAgLTE1MzQsNyArMTcwMyw3IEBACiAgIC8qIE91ciBlcnJvciBoYXMgbm8gcGxhY2UgdG8g Z28uIDotKCAqLwogICBpZiAoZXJyKQogICAgIHN2bl9lcnJvcl9jbGVhcihlcnIpOwotICAgIAor CiAgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOwogfQogCkBAIC0xNTg3LDcgKzE3NTYs NyBAQAogICAgIHJldHVybiBTVk5fTk9fRVJST1I7CiAKICAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9w eV9sb2NrKCk7Ci0gIAorCiAgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGZ1 bmN0aW9uLCAoY2hhciAqKSJPJk8mIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbWFrZV9vYl9sb2NrLCBsb2NrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBtYWtlX29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQpAQCAtMTYzNyw3ICsxODA2LDcg QEAKICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICB9CiAKLSAgaWYgKChyZXN1bHQgPSBQ eU9iamVjdF9DYWxsRnVuY3Rpb24oZnVuY3Rpb24sIAorICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0 X0NhbGxGdW5jdGlvbihmdW5jdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGNoYXIgKikiT08mIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY210X2l0ZW1zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtl X29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQpAQCAtMTY1NSw3ICsxODI0LDcgQEAKICAgICAgICps b2dfbXNnID0gTlVMTDsKICAgICAgIGVyciA9IFNWTl9OT19FUlJPUjsKICAgICB9Ci0gIGVsc2Ug aWYgKFB5U3RyaW5nX0NoZWNrKHJlc3VsdCkpIAorICBlbHNlIGlmIChQeVN0cmluZ19DaGVjayhy ZXN1bHQpKQogICAgIHsKICAgICAgICpsb2dfbXNnID0gYXByX3BzdHJkdXAocG9vbCwgUHlTdHJp bmdfQVNfU1RSSU5HKHJlc3VsdCkpOwogICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CkBAIC0xNjkw LDIxICsxODU5LDIzIEBACiAgICAgcmV0dXJuIFNWTl9OT19FUlJPUjsKIAogICBzdm5fc3dpZ19w eV9hY3F1aXJlX3B5X2xvY2soKTsKLSAgCisKICAgcHlfcG9vbCA9IG1ha2Vfb2JfcG9vbChwb29s KTsKLSAgaWYgKHB5X3Bvb2wgPT0gTlVMTCkgewotICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlv bl9lcnJvcigpOwotICAgIGdvdG8gZmluaXNoZWQ7Ci0gIH0KKyAgaWYgKHB5X3Bvb2wgPT0gTlVM TCkKKyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICAg IGdvdG8gZmluaXNoZWQ7CisgICAgfQogICBweV9yb290ID0gbWFrZV9vYl9mc19yb290KHJvb3Qs IHB5X3Bvb2wpOwotICBpZiAocHlfcm9vdCA9PSBOVUxMKSB7Ci0gICAgUHlfREVDUkVGKHB5X3Bv b2wpOwotICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOwotICAgIGdvdG8gZmlu aXNoZWQ7IAotICB9CisgIGlmIChweV9yb290ID09IE5VTEwpCisgICAgeworICAgICAgUHlfREVD UkVGKHB5X3Bvb2wpOworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7Cisg ICAgICBnb3RvIGZpbmlzaGVkOworICAgIH0KIAotICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0Nh bGxGdW5jdGlvbihmdW5jdGlvbiwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChjaGFyICopIk9zTyIsIAorICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlv bihmdW5jdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIg KikiT3NPIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHlfcm9vdCwg cGF0aCwgcHlfcG9vbCkpID09IE5VTEwpCiAgICAgewogICAgICAgZXJyID0gY2FsbGJhY2tfZXhj ZXB0aW9uX2Vycm9yKCk7CkBAIC0xNzQwLDkgKzE5MTEsOSBAQAogICAgIHJldHVybiBTVk5fTk9f RVJST1I7CiAKICAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7Ci0gIGlmICgocmVzdWx0 ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGZ1bmN0aW9uLCAKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGNoYXIgKikic2xPJiIsIAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBwYXRoLCByZXZpc2lvbiwgCisgIGlmICgocmVzdWx0ID0gUHlPYmpl Y3RfQ2FsbEZ1bmN0aW9uKGZ1bmN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoY2hhciAqKSJzbE8mIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcGF0aCwgcmV2aXNpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG1ha2Vfb2JfcG9vbCwgcG9vbCkpID09IE5VTEwpCiAgICAgewogICAgICAgZXJyID0gY2Fs bGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7CkBAIC0xNzcwLDE3ICsxOTQxLDE4IEBACiAgIFB5T2Jq ZWN0ICpyZXN1bHQsICpweV9wb29sOwogICBQeU9iamVjdCAqY2hwYXRoczsKICAgc3ZuX2Vycm9y X3QgKmVyciA9IFNWTl9OT19FUlJPUjsKLSAKKwogICBpZiAoKHJlY2VpdmVyID09IE5VTEwpIHx8 IChyZWNlaXZlciA9PSBQeV9Ob25lKSkKICAgICByZXR1cm4gU1ZOX05PX0VSUk9SOwogCiAgIHN2 bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOwogCiAgIHB5X3Bvb2wgPSBtYWtlX29iX3Bvb2wo cG9vbCk7Ci0gIGlmIChweV9wb29sID09IE5VTEwpIHsKLSAgICBlcnIgPSBjYWxsYmFja19leGNl cHRpb25fZXJyb3IoKTsKLSAgICBnb3RvIGZpbmlzaGVkOwotICB9CisgIGlmIChweV9wb29sID09 IE5VTEwpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7Cisg ICAgICBnb3RvIGZpbmlzaGVkOworICAgIH0KIAogICBpZiAoY2hhbmdlZF9wYXRocykKICAgICB7 CkBAIC0xNzkzLDkgKzE5NjUsOSBAQAogICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgIH0K IAotICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihyZWNlaXZlciwgCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopIk9sc3NzTyIsIAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHBhdGhzLCByZXYsIGF1dGhvciwg ZGF0ZSwgbXNnLCAKKyAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24ocmVjZWl2 ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopIk9sc3Nz TyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNocGF0aHMsIHJldiwg YXV0aG9yLCBkYXRlLCBtc2csCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHB5X3Bvb2wpKSA9PSBOVUxMKQogICAgIHsKICAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlv bl9lcnJvcigpOwpAQCAtMTgxNCw2ICsxOTg2LDM4IEBACiAgIHJldHVybiBlcnI7CiB9CiAKK3N2 bl9lcnJvcl90ICpzdm5fc3dpZ19weV9pbmZvX3JlY2VpdmVyX2Z1bmModm9pZCAqYmF0b24sCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBh dGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN2 bl9pbmZvX3QgKmluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGFwcl9wb29sX3QgKnBvb2wpCit7CisgIFB5T2JqZWN0ICpyZWNlaXZlciA9IGJhdG9uOwor ICBQeU9iamVjdCAqcmVzdWx0OworICBzdm5fZXJyb3JfdCAqZXJyID0gU1ZOX05PX0VSUk9SOwor CisgIGlmICgocmVjZWl2ZXIgPT0gTlVMTCkgfHwgKHJlY2VpdmVyID09IFB5X05vbmUpKQorICAg IHJldHVybiBTVk5fTk9fRVJST1I7CisKKyAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7 CisKKyAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24ocmVjZWl2ZXIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopInNPJk8mIiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCwgbWFrZV9vYl9pbmZvLCBpbmZv LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX29iX3Bvb2wsIHBv b2wpKSA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJv cigpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGlmIChyZXN1bHQgIT0gUHlfTm9uZSkK KyAgICAgICAgZXJyID0gY2FsbGJhY2tfYmFkX3JldHVybl9lcnJvcigiTm90IE5vbmUiKTsKKyAg ICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgIH0KKworICBzdm5fc3dpZ19weV9yZWxlYXNlX3B5 X2xvY2soKTsKKworICByZXR1cm4gZXJyOworfQogCiBzdm5fZXJyb3JfdCAqc3ZuX3N3aWdfcHlf Y2xpZW50X2JsYW1lX3JlY2VpdmVyX2Z1bmModm9pZCAqYmF0b24sCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX2ludDY0X3QgbGluZV9ubywK QEAgLTE4MjYsMTYgKzIwMzAsMTYgQEAKICAgUHlPYmplY3QgKnJlY2VpdmVyID0gYmF0b247CiAg IFB5T2JqZWN0ICpyZXN1bHQ7CiAgIHN2bl9lcnJvcl90ICplcnIgPSBTVk5fTk9fRVJST1I7Ci0g CisKICAgaWYgKChyZWNlaXZlciA9PSBOVUxMKSB8fCAocmVjZWl2ZXIgPT0gUHlfTm9uZSkpCiAg ICAgcmV0dXJuIFNWTl9OT19FUlJPUjsKIAogICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xvY2so KTsKIAotICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihyZWNlaXZlciwgCisg IGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKHJlY2VpdmVyLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKQotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoU1ZOX0FQUl9JTlQ2NF9UX1BZQ0ZNVCAibHNzc08mIiksIAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lX25vLCByZXZpc2lvbiwg YXV0aG9yLCBkYXRlLCBsaW5lLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKFNWTl9BUFJfSU5UNjRfVF9QWUNGTVQgImxzc3NPJiIpLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBsaW5lX25vLCByZXZpc2lvbiwgYXV0aG9yLCBkYXRlLCBsaW5l LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX29iX3Bvb2wsIHBv b2wpKSA9PSBOVUxMKQogICAgIHsKICAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJv cigpOwpAQCAtMTg3MCw5ICsyMDc0LDkgQEAKIAogICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xv Y2soKTsKIAotICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihmdW5jdGlvbiwg Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopInNzbE8mIiwg Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWxtLCB1c2VybmFtZSwg bWF5X3NhdmUsIAorICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihmdW5jdGlv biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikic3NsTyYi LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFsbSwgdXNlcm5hbWUs IG1heV9zYXZlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX29i X3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQogICAgIHsKICAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2Vw dGlvbl9lcnJvcigpOwpAQCAtMTg4Miw3ICsyMDg2LDcgQEAKICAgICAgIGlmIChyZXN1bHQgIT0g UHlfTm9uZSkKICAgICAgICAgewogICAgICAgICAgIHN2bl9hdXRoX2NyZWRfc2ltcGxlX3QgKnRt cF9jcmVkcyA9IE5VTEw7Ci0gICAgICAgICAgaWYgKHN2bl9zd2lnX0NvbnZlcnRQdHJTdHJpbmco cmVzdWx0LCAodm9pZCAqKikmdG1wX2NyZWRzLCAKKyAgICAgICAgICBpZiAoc3ZuX3N3aWdfQ29u dmVydFB0clN0cmluZyhyZXN1bHQsICh2b2lkICoqKSZ0bXBfY3JlZHMsCiAgICAgICAgICAgICAg ICAgInN2bl9hdXRoX2NyZWRfc2ltcGxlX3QgKiIpKQogICAgICAgICAgICAgewogICAgICAgICAg ICAgICBlcnIgPSB0eXBlX2NvbnZlcnNpb25fZXJyb3IoInN2bl9hdXRoX2NyZWRfc2ltcGxlX3Qg KiIpOwpAQCAtMTkyMSw5ICsyMTI1LDkgQEAKIAogICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xv Y2soKTsKIAotICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihmdW5jdGlvbiwg Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopInNsTyYiLCAK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhbG0sIG1heV9zYXZlLCAK KyAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oZnVuY3Rpb24sCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopInNsTyYiLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFsbSwgbWF5X3NhdmUsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vfb2JfcG9vbCwgcG9vbCkpID09IE5VTEwp CiAgICAgewogICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7CkBAIC0xOTMz LDcgKzIxMzcsNyBAQAogICAgICAgaWYgKHJlc3VsdCAhPSBQeV9Ob25lKQogICAgICAgICB7CiAg ICAgICAgICAgc3ZuX2F1dGhfY3JlZF91c2VybmFtZV90ICp0bXBfY3JlZHMgPSBOVUxMOwotICAg ICAgICAgIGlmIChzdm5fc3dpZ19Db252ZXJ0UHRyU3RyaW5nKHJlc3VsdCwgKHZvaWQgKiopJnRt cF9jcmVkcywgCisgICAgICAgICAgaWYgKHN2bl9zd2lnX0NvbnZlcnRQdHJTdHJpbmcocmVzdWx0 LCAodm9pZCAqKikmdG1wX2NyZWRzLAogICAgICAgICAgICAgICAgICJzdm5fYXV0aF9jcmVkX3Vz ZXJuYW1lX3QgKiIpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICBlcnIgPSB0eXBlX2Nv bnZlcnNpb25fZXJyb3IoInN2bl9hdXRoX2NyZWRfdXNlcm5hbWVfdCAqIik7CkBAIC0xOTc0LDcg KzIxNzgsNyBAQAogCiAgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOwogCi0gIGlmICgo cmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGZ1bmN0aW9uLCAoY2hhciAqKSJzbE8mbE8m IiwgCisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGZ1bmN0aW9uLCAoY2hh ciAqKSJzbE8mbE8mIiwKICAgICAgICAgICAgICAgICAgIHJlYWxtLCBmYWlsdXJlcywgbWFrZV9v Yl9hdXRoX3NzbF9zZXJ2ZXJfY2VydF9pbmZvLAogICAgICAgICAgICAgICAgICAgY2VydF9pbmZv LCBtYXlfc2F2ZSwgbWFrZV9vYl9wb29sLCBwb29sKSkgPT0gTlVMTCkKICAgICB7CkBAIC0xOTg2 LDcgKzIxOTAsNyBAQAogICAgICAgICB7CiAgICAgICAgICAgc3ZuX2F1dGhfY3JlZF9zc2xfc2Vy dmVyX3RydXN0X3QgKnRtcF9jcmVkcyA9IE5VTEw7CiAgICAgICAgICAgaWYgKHN2bl9zd2lnX0Nv bnZlcnRQdHJTdHJpbmcKLSAgICAgICAgICAgICAgKHJlc3VsdCwgKHZvaWQgKiopJnRtcF9jcmVk cywgCisgICAgICAgICAgICAgIChyZXN1bHQsICh2b2lkICoqKSZ0bXBfY3JlZHMsCiAgICAgICAg ICAgICAgICAic3ZuX2F1dGhfY3JlZF9zc2xfc2VydmVyX3RydXN0X3QgKiIpKQogICAgICAgICAg ICAgewogICAgICAgICAgICAgICBlcnIgPSB0eXBlX2NvbnZlcnNpb25fZXJyb3IKQEAgLTIwMjQs OSArMjIyOCw5IEBACiAKICAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7CiAKLSAgaWYg KChyZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oZnVuY3Rpb24sIAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJzbE8mIiwgCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWxtLCBtYXlfc2F2ZSwgCisgIGlmICgocmVzdWx0 ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGZ1bmN0aW9uLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoY2hhciAqKSJzbE8mIiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcmVhbG0sIG1heV9zYXZlLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBtYWtlX29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQogICAgIHsKICAgICAg IGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOwpAQCAtMjAzNyw3ICsyMjQxLDcgQEAK ICAgICAgICAgewogICAgICAgICAgIHN2bl9hdXRoX2NyZWRfc3NsX2NsaWVudF9jZXJ0X3QgKnRt cF9jcmVkcyA9IE5VTEw7CiAgICAgICAgICAgaWYgKHN2bl9zd2lnX0NvbnZlcnRQdHJTdHJpbmcK LSAgICAgICAgICAgICAgKHJlc3VsdCwgKHZvaWQgKiopJnRtcF9jcmVkcywgCisgICAgICAgICAg ICAgIChyZXN1bHQsICh2b2lkICoqKSZ0bXBfY3JlZHMsCiAgICAgICAgICAgICAgICAic3ZuX2F1 dGhfY3JlZF9zc2xfY2xpZW50X2NlcnRfdCAqIikpCiAgICAgICAgICAgICB7CiAgICAgICAgICAg ICAgIGVyciA9IHR5cGVfY29udmVyc2lvbl9lcnJvcigic3ZuX2F1dGhfY3JlZF9zc2xfY2xpZW50 X2NlcnRfdCAqIik7CkBAIC0yMDc1LDkgKzIyNzksOSBAQAogCiAgIHN2bl9zd2lnX3B5X2FjcXVp cmVfcHlfbG9jaygpOwogCi0gIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGZ1 bmN0aW9uLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKiki c2xPJiIsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFsbSwgbWF5 X3NhdmUsIAorICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihmdW5jdGlvbiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikic2xPJiIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWxtLCBtYXlfc2F2ZSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9vYl9wb29sLCBwb29sKSkg PT0gTlVMTCkKICAgICB7CiAgICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsK QEAgLTIwODgsNyArMjI5Miw3IEBACiAgICAgICAgIHsKICAgICAgICAgICBzdm5fYXV0aF9jcmVk X3NzbF9jbGllbnRfY2VydF9wd190ICp0bXBfY3JlZHMgPSBOVUxMOwogICAgICAgICAgIGlmIChz dm5fc3dpZ19Db252ZXJ0UHRyU3RyaW5nCi0gICAgICAgICAgICAgIChyZXN1bHQsICh2b2lkICoq KSZ0bXBfY3JlZHMsIAorICAgICAgICAgICAgICAocmVzdWx0LCAodm9pZCAqKikmdG1wX2NyZWRz LAogICAgICAgICAgICAgICAgInN2bl9hdXRoX2NyZWRfc3NsX2NsaWVudF9jZXJ0X3B3X3QgKiIp KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICBlcnIgPSB0eXBlX2NvbnZlcnNpb25fZXJy b3IKQEAgLTIxMDgsMyArMjMxMiwzMjMgQEAKICAgKmNyZWQgPSBjcmVkczsKICAgcmV0dXJuIGVy cjsKIH0KKwordm9pZAorc3ZuX3N3aWdfcHlfc2V0dXBfcmFfY2FsbGJhY2tzKHN2bl9yYV9jYWxs YmFja3MyX3QgKipjYWxsYmFja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9p ZCAqKmJhdG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpweV9j YWxsYmFja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9v bCkKK3sKKyAgc3ZuX2Vycm9yX3QgKmVyciA9IHN2bl9yYV9jcmVhdGVfY2FsbGJhY2tzKGNhbGxi YWNrcywgcG9vbCk7CisKKyAgaWYgKGVycikKKyAgICB7CisgICAgICBzdm5fc3dpZ19weV9zdm5f ZXhjZXB0aW9uKGVycik7CisgICAgICByZXR1cm47CisgICAgfQorCisgICpiYXRvbiA9IHB5X2Nh bGxiYWNrczsKK30KKworc3ZuX2Vycm9yX3QgKnN2bl9zd2lnX3B5X2NvbW1pdF9jYWxsYmFjazIo Y29uc3Qgc3ZuX2NvbW1pdF9pbmZvX3QgKmNvbW1pdF9pbmZvLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYmF0b24sCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKQoreworICBQeU9iamVjdCAq cmVjZWl2ZXIgPSBiYXRvbjsKKyAgUHlPYmplY3QgKnJlc3VsdDsKKyAgc3ZuX2Vycm9yX3QgKmVy ciA9IFNWTl9OT19FUlJPUjsKKworICBpZiAoKHJlY2VpdmVyID09IE5VTEwpIHx8IChyZWNlaXZl ciA9PSBQeV9Ob25lKSkKKyAgICByZXR1cm4gU1ZOX05PX0VSUk9SOworCisgIHN2bl9zd2lnX3B5 X2FjcXVpcmVfcHlfbG9jaygpOworCisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0 aW9uKHJlY2VpdmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hh ciAqKSJPJk8mIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9v Yl9jb21taXRfaW5mbywgY29tbWl0X2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIG1ha2Vfb2JfcG9vbCwgcG9vbCkpID09IE5VTEwpCisgICAgeworICAgICAgZXJy ID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7CisgICAgfQorICBlbHNlCisgICAgeworICAg ICAgaWYgKHJlc3VsdCAhPSBQeV9Ob25lKQorICAgICAgICBlcnIgPSBjYWxsYmFja19iYWRfcmV0 dXJuX2Vycm9yKCJOb3QgTm9uZSIpOworICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgfQor CisgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOworCisgIHJldHVybiBlcnI7Cit9CisK K3N2bl9lcnJvcl90ICpzdm5fc3dpZ19weV9jb21taXRfY2FsbGJhY2soc3ZuX3Jldm51bV90IG5l d19yZXZpc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgY2hhciAqZGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgY2hhciAqYXV0aG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB2b2lkICpiYXRvbikKK3sKKyAgUHlPYmplY3QgKnJlY2VpdmVyID0gYmF0b247CisgIFB5 T2JqZWN0ICpyZXN1bHQ7CisgIHN2bl9lcnJvcl90ICplcnIgPSBTVk5fTk9fRVJST1I7CisKKyAg aWYgKChyZWNlaXZlciA9PSBOVUxMKSB8fCAocmVjZWl2ZXIgPT0gUHlfTm9uZSkpCisgICAgcmV0 dXJuIFNWTl9OT19FUlJPUjsKKworICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xvY2soKTsKKwor ICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihyZWNlaXZlciwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikibHNzIiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X3JldmlzaW9uLCBkYXRlLCBhdXRob3IpKSA9 PSBOVUxMKQorICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOwor ICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGlmIChyZXN1bHQgIT0gUHlfTm9uZSkKKyAgICAg ICAgZXJyID0gY2FsbGJhY2tfYmFkX3JldHVybl9lcnJvcigiTm90IE5vbmUiKTsKKyAgICAgIFB5 X0RFQ1JFRihyZXN1bHQpOworICAgIH0KKworICBzdm5fc3dpZ19weV9yZWxlYXNlX3B5X2xvY2so KTsKKworICByZXR1cm4gZXJyOworfQorCitzdm5fZXJyb3JfdCAqc3ZuX3N3aWdfcHlfcmFfZmls ZV9yZXZfaGFuZGxlcl9mdW5jKAorICAgICAgICAgICAgICAgICAgICB2b2lkICpiYXRvbiwKKyAg ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGF0aCwKKyAgICAgICAgICAgICAgICAgICAg c3ZuX3Jldm51bV90IHJldiwKKyAgICAgICAgICAgICAgICAgICAgYXByX2hhc2hfdCAqcmV2X3By b3BzLAorICAgICAgICAgICAgICAgICAgICBzdm5fdHhkZWx0YV93aW5kb3dfaGFuZGxlcl90ICpk ZWx0YV9oYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICB2b2lkICoqZGVsdGFfYmF0b24sCisg ICAgICAgICAgICAgICAgICAgIGFwcl9hcnJheV9oZWFkZXJfdCAqcHJvcF9kaWZmcywKKyAgICAg ICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgUHlPYmplY3QgKmhhbmRsZXIg PSBiYXRvbjsKKyAgUHlPYmplY3QgKnJlc3VsdCwgKnB5X3Jldl9wcm9wcyA9IE5VTEwsICpweV9w cm9wX2RpZmZzID0gTlVMTDsKKyAgc3ZuX2Vycm9yX3QgKmVyciA9IFNWTl9OT19FUlJPUjsKKwor ICBpZiAoKGhhbmRsZXIgPT0gTlVMTCkgfHwgKGhhbmRsZXIgPT0gUHlfTm9uZSkpCisgICAgcmV0 dXJuIFNWTl9OT19FUlJPUjsKKworICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xvY2soKTsKKwor ICBweV9yZXZfcHJvcHMgPSBzdm5fc3dpZ19weV9wcm9waGFzaF90b19kaWN0KHJldl9wcm9wcyk7 CisgIGlmIChweV9yZXZfcHJvcHMgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSB0eXBlX2Nv bnZlcnNpb25fZXJyb3IoImFwcl9oYXNoX3QgKiIpOworICAgICAgZ290byBlcnJvcjsKKyAgICB9 CisKKyAgcHlfcHJvcF9kaWZmcyA9IHByb3BhcnJheV90b19kaWN0KHByb3BfZGlmZnMpOworCisg IGlmIChweV9wcm9wX2RpZmZzID09IE5VTEwpCisgICAgeworICAgICAgZXJyID0gdHlwZV9jb252 ZXJzaW9uX2Vycm9yKCJhcHJfYXJyYXlfaGVhZGVyX3QgKiIpOworICAgICAgZ290byBlcnJvcjsK KyAgICB9CisKKyAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oaGFuZGxlciwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikic2xPT08mIiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCwgcmV2LCBweV9yZXZf cHJvcHMsIHB5X3Byb3BfZGlmZnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG1ha2Vfb2JfcG9vbCwgcG9vbCkpID09IE5VTEwpCisgICAgeworICAgICAgZXJyID0gY2Fs bGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgaWYg KHJlc3VsdCAhPSBQeV9Ob25lKQorICAgICAgICBlcnIgPSBjYWxsYmFja19iYWRfcmV0dXJuX2Vy cm9yKCJOb3QgTm9uZSIpOworCisgICAgICAvKiBGSVhNRTogU3VwcG9ydCByZXR1cm5lZCBUeERl bHRhV2luZG93IG9iamVjdCBhbmQKKyAgICAgICAqIHNldCBkZWx0YV9oYW5kbGVyIGFuZCBkZWx0 YV9iYXRvbiAqLworICAgICAgKmRlbHRhX2hhbmRsZXIgPSBOVUxMOworICAgICAgKmRlbHRhX2Jh dG9uID0gTlVMTDsKKworICAgICAgUHlfWERFQ1JFRihyZXN1bHQpOworICAgIH0KKworZXJyb3I6 CisKKyAgUHlfWERFQ1JFRihweV9yZXZfcHJvcHMpOworICBQeV9YREVDUkVGKHB5X3Byb3BfZGlm ZnMpOworCisgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOworCisgIHJldHVybiBlcnI7 Cit9CisKK3N0YXRpYyBzdm5fZXJyb3JfdCAqcmVwb3J0ZXJfc2V0X3BhdGgodm9pZCAqcmVwb3J0 X2JhdG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGF0aCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN2bl9yZXZudW1fdCByZXZpc2lvbiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIHN2bl9ib29sZWFuX3Qgc3RhcnRfZW1wdHksCisgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpsb2NrX3Rva2VuLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgc3ZuX2Vycm9yX3QgKmVyciA9IFNW Tl9OT19FUlJPUjsKKyAgUHlPYmplY3QgKnB5X3JlcG9ydGVyID0gcmVwb3J0X2JhdG9uLCAqcmVz dWx0OworCisgIGlmIChweV9yZXBvcnRlciA9PSBOVUxMIHx8IHB5X3JlcG9ydGVyID09IFB5X05v bmUpCisgICAgcmV0dXJuIFNWTl9OT19FUlJPUjsKKworICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5 X2xvY2soKTsKKworICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxNZXRob2QocHlfcmVwb3J0 ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJzZXRfcGF0 aCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJzbGJzTyYi LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCwgcmV2aXNpb24sCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydF9lbXB0eSwgbG9ja190b2tl biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vfb2JfcG9vbCwgcG9v bCkpID09IE5VTEwpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9y KCk7CisgICAgfQorICBlbHNlIGlmIChyZXN1bHQgIT0gUHlfTm9uZSkKKyAgICB7CisgICAgICBl cnIgPSBjYWxsYmFja19iYWRfcmV0dXJuX2Vycm9yKCJOb3QgTm9uZSIpOworICAgIH0KKworICBQ eV9YREVDUkVGKHJlc3VsdCk7CisKKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7CisK KyAgcmV0dXJuIGVycjsKK30KKworc3RhdGljIHN2bl9lcnJvcl90ICpyZXBvcnRlcl9kZWxldGVf cGF0aCh2b2lkICpyZXBvcnRfYmF0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg Y2hhciAqcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpCit7 CisgIHN2bl9lcnJvcl90ICplcnIgPSBTVk5fTk9fRVJST1I7CisgIFB5T2JqZWN0ICpweV9yZXBv cnRlciA9IHJlcG9ydF9iYXRvbiwgKnJlc3VsdDsKKworICBpZiAocHlfcmVwb3J0ZXIgPT0gTlVM TCB8fCBweV9yZXBvcnRlciA9PSBQeV9Ob25lKQorICAgIHJldHVybiBTVk5fTk9fRVJST1I7CisK KyAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7CisKKyAgaWYgKChyZXN1bHQgPSBQeU9i amVjdF9DYWxsTWV0aG9kKHB5X3JlcG9ydGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKGNoYXIgKikiZGVsZXRlX3BhdGgiLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGNoYXIgKikic08mIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHBhdGgsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9v Yl9wb29sLCBwb29sKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFja19leGNl cHRpb25fZXJyb3IoKTsKKyAgICB9CisgIGVsc2UgaWYgKHJlc3VsdCAhPSBQeV9Ob25lKQorICAg IHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2JhZF9yZXR1cm5fZXJyb3IoIk5vdCBOb25lIik7Cisg ICAgfQorCisgIFB5X1hERUNSRUYocmVzdWx0KTsKKworICBzdm5fc3dpZ19weV9yZWxlYXNlX3B5 X2xvY2soKTsKKworICByZXR1cm4gZXJyOworfQorICAgIAorc3RhdGljIHN2bl9lcnJvcl90ICpy ZXBvcnRlcl9saW5rX3BhdGgodm9pZCAqcmVwb3J0X2JhdG9uLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgY2hhciAqdXJsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2bl9yZXZudW1f dCByZXZpc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdm5fYm9vbGVhbl90IHN0 YXJ0X2VtcHR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmxvY2tf dG9rZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sK KyAgc3ZuX2Vycm9yX3QgKmVyciA9IFNWTl9OT19FUlJPUjsKKyAgUHlPYmplY3QgKnB5X3JlcG9y dGVyID0gcmVwb3J0X2JhdG9uLCAqcmVzdWx0OworCisgIGlmIChweV9yZXBvcnRlciA9PSBOVUxM IHx8IHB5X3JlcG9ydGVyID09IFB5X05vbmUpCisgICAgcmV0dXJuIFNWTl9OT19FUlJPUjsKKwor ICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xvY2soKTsKKworICBpZiAoKHJlc3VsdCA9IFB5T2Jq ZWN0X0NhbGxNZXRob2QocHlfcmVwb3J0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoY2hhciAqKSJsaW5rX3BhdGgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKGNoYXIgKikic3NsYnNPJiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBwYXRoLCB1cmwsIHJldmlzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3RhcnRfZW1wdHksIGxvY2tfdG9rZW4sCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBtYWtlX29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQorICAgIHsKKyAgICAg IGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgIH0KKyAgZWxzZSBpZiAocmVz dWx0ICE9IFB5X05vbmUpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfYmFkX3JldHVybl9l cnJvcigiTm90IE5vbmUiKTsKKyAgICB9CisKKyAgUHlfWERFQ1JFRihyZXN1bHQpOworCisgIHN2 bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOworCisgIHJldHVybiBlcnI7Cit9CisKK3N0YXRp YyBzdm5fZXJyb3JfdCAqcmVwb3J0ZXJfZmluaXNoX3JlcG9ydCh2b2lkICpyZXBvcnRfYmF0b24s CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpCit7Cisg IHN2bl9lcnJvcl90ICplcnIgPSBTVk5fTk9fRVJST1I7CisKKyAgUHlPYmplY3QgKnB5X3JlcG9y dGVyID0gcmVwb3J0X2JhdG9uLCAqcmVzdWx0OworCisgIGlmIChweV9yZXBvcnRlciA9PSBOVUxM IHx8IHB5X3JlcG9ydGVyID09IFB5X05vbmUpCisgICAgcmV0dXJuIFNWTl9OT19FUlJPUjsKKwor ICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xvY2soKTsKKworICBpZiAoKHJlc3VsdCA9IFB5T2Jq ZWN0X0NhbGxNZXRob2QocHlfcmVwb3J0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoY2hhciAqKSJmaW5pc2hfcmVwb3J0IiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChjaGFyICopIk8mIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG1ha2Vfb2JfcG9vbCwgcG9vbCkpID09IE5VTEwpCisgICAgeworICAgICAgZXJyID0g Y2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7CisgICAgfQorICBlbHNlIGlmIChyZXN1bHQgIT0g UHlfTm9uZSkKKyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFja19iYWRfcmV0dXJuX2Vycm9yKCJO b3QgTm9uZSIpOworICAgIH0KKworICBQeV9YREVDUkVGKHJlc3VsdCk7CisKKyAgc3ZuX3N3aWdf cHlfcmVsZWFzZV9weV9sb2NrKCk7CisKKyAgcmV0dXJuIGVycjsKK30KKworc3RhdGljIHN2bl9l cnJvcl90ICpyZXBvcnRlcl9hYm9ydF9yZXBvcnQodm9pZCAqcmVwb3J0X2JhdG9uLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpCit7CisgIHN2bl9lcnJv cl90ICplcnIgPSBTVk5fTk9fRVJST1I7CisKKyAgUHlPYmplY3QgKnB5X3JlcG9ydGVyID0gcmVw b3J0X2JhdG9uLCAqcmVzdWx0OworCisgIGlmIChweV9yZXBvcnRlciA9PSBOVUxMIHx8IHB5X3Jl cG9ydGVyID09IFB5X05vbmUpCisgICAgcmV0dXJuIFNWTl9OT19FUlJPUjsKKworICBzdm5fc3dp Z19weV9hY3F1aXJlX3B5X2xvY2soKTsKKworICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxN ZXRob2QocHlfcmVwb3J0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo Y2hhciAqKSJhYm9ydF9yZXBvcnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGNoYXIgKikiTyYiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFr ZV9vYl9wb29sLCBwb29sKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFja19l eGNlcHRpb25fZXJyb3IoKTsKKyAgICB9CisgIGVsc2UgaWYgKHJlc3VsdCAhPSBQeV9Ob25lKQor ICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2JhZF9yZXR1cm5fZXJyb3IoIk5vdCBOb25lIik7 CisgICAgfQorCisgIFB5X1hERUNSRUYocmVzdWx0KTsKKworICBzdm5fc3dpZ19weV9yZWxlYXNl X3B5X2xvY2soKTsKKworICByZXR1cm4gZXJyOworfQorCitjb25zdCBzdm5fcmFfcmVwb3J0ZXIy X3Qgc3dpZ19weV9yYV9yZXBvcnRlcjIgPSB7CisgICAgcmVwb3J0ZXJfc2V0X3BhdGgsCisgICAg cmVwb3J0ZXJfZGVsZXRlX3BhdGgsCisgICAgcmVwb3J0ZXJfbGlua19wYXRoLAorICAgIHJlcG9y dGVyX2ZpbmlzaF9yZXBvcnQsCisgICAgcmVwb3J0ZXJfYWJvcnRfcmVwb3J0Cit9OwpkaWZmIC1O dXIgc3VidmVyc2lvbi0xLjMuMS9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcHl0aG9uL2xpYnN2 bl9zd2lnX3B5L3N3aWd1dGlsX3B5LmMub3JpZyBzdWJ2ZXJzaW9uLTEuMy4xLm5ldy9zdWJ2ZXJz aW9uL2JpbmRpbmdzL3N3aWcvcHl0aG9uL2xpYnN2bl9zd2lnX3B5L3N3aWd1dGlsX3B5LmMub3Jp ZwotLS0gc3VidmVyc2lvbi0xLjMuMS9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcHl0aG9uL2xp YnN2bl9zd2lnX3B5L3N3aWd1dGlsX3B5LmMub3JpZwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAw MDAwMCArMDEwMAorKysgc3VidmVyc2lvbi0xLjMuMS5uZXcvc3VidmVyc2lvbi9iaW5kaW5ncy9z d2lnL3B5dGhvbi9saWJzdm5fc3dpZ19weS9zd2lndXRpbF9weS5jLm9yaWcJMjAwNi0wNy0wNCAx OTowMTowNS4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSwyNjIzIEBACisvKgorICogc3dpZ3V0 aWxfcHkuYzogdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHRoZSBTV0lHIFB5dGhvbiBiaW5kaW5ncwor ICoKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNCBDb2xsYWJOZXQu ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQg YXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhh dmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gIFRoZSB0ZXJtcworICog YXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9zdWJ2ZXJzaW9uLnRpZ3Jpcy5vcmcvbGljZW5z ZS0xLmh0bWwuCisgKiBJZiBuZXdlciB2ZXJzaW9ucyBvZiB0aGlzIGxpY2Vuc2UgYXJlIHBvc3Rl ZCB0aGVyZSwgeW91IG1heSB1c2UgYQorICogbmV3ZXIgdmVyc2lvbiBpbnN0ZWFkLCBhdCB5b3Vy IG9wdGlvbi4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250 cmlidXRpb25zIG1hZGUgYnkgbWFueQorICogaW5kaXZpZHVhbHMuICBGb3IgZXhhY3QgY29udHJp YnV0aW9uIGhpc3RvcnksIHNlZSB0aGUgcmV2aXNpb24KKyAqIGhpc3RvcnkgYW5kIGxvZ3MsIGF2 YWlsYWJsZSBhdCBodHRwOi8vc3VidmVyc2lvbi50aWdyaXMub3JnLy4KKyAqID09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 CisgKi8KKworLyogVGVsbCBzd2lndXRpbF9weS5oIHRoYXQgd2UncmUgaW5zaWRlIHRoZSBpbXBs ZW1lbnRhdGlvbiAqLworI2RlZmluZSBTVk5fU1dJR19TV0lHVVRJTF9QWV9DCisKKyNpbmNsdWRl IDxQeXRob24uaD4KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0 Lmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKworI2luY2x1ZGUgPGFwcl9wb29scy5oPgorI2luY2x1 ZGUgPGFwcl9oYXNoLmg+CisjaW5jbHVkZSA8YXByX3BvcnRhYmxlLmg+CisjaW5jbHVkZSA8YXBy X3RocmVhZF9wcm9jLmg+CisKKyNpbmNsdWRlICJzdm5fY2xpZW50LmgiCisjaW5jbHVkZSAic3Zu X3N0cmluZy5oIgorI2luY2x1ZGUgInN2bl9vcHQuaCIKKyNpbmNsdWRlICJzdm5fZGVsdGEuaCIK KyNpbmNsdWRlICJzdm5fYXV0aC5oIgorI2luY2x1ZGUgInN2bl9wb29scy5oIgorCisjaW5jbHVk ZSAic3ZuX3ByaXZhdGVfY29uZmlnLmgiIC8qIGZvciBTVk5fQVBSX0lOVDY0X1RfUFlDRk1UICov CisKKyNpbmNsdWRlICJzd2lnX3B5dGhvbl9leHRlcm5hbF9ydW50aW1lLnN3ZyIKKyNpbmNsdWRl ICJzd2lndXRpbF9weS5oIgorCisMCisKKy8qKiogTWFuYWdlIHRoZSBHbG9iYWwgSW50ZXJwcmV0 ZXIgTG9jayAqKiovCisKKy8qIElmIGJvdGggUHl0aG9uIGFuZCBBUFIgaGF2ZSB0aHJlYWRzIGF2 YWlsYWJsZSwgd2UgY2FuIG9wdGltaXplIG91cnNlbHZlcworICogYnkgcmVsZWFzaW5nIHRoZSBn bG9iYWwgaW50ZXJwcmV0ZXIgbG9jayB3aGVuIHdlIGRyb3AgaW50byBvdXIgU1ZOIGNhbGxzLgor ICoKKyAqIEluIHN2bl90eXBlcy5pLCBzdm5fc3dpZ19weV9yZWxlYXNlX3B5X2xvY2sgaXMgY2Fs bGVkIGJlZm9yZSBldmVyeQorICogZnVuY3Rpb24sIHRoZW4gc3ZuX3N3aWdfcHlfYWNxdWlyZV9w eV9sb2NrIGlzIGNhbGxlZCBhZnRlciBldmVyeQorICogZnVuY3Rpb24uICBTbywgaWYgdGhlc2Ug ZnVuY3Rpb25zIGJlY29tZSBuby1vcHMsIHRoZW4gUHl0aG9uIHdpbGwKKyAqIHN0YXJ0IHRvIGJs b2NrLi4uCisgKgorICogVGhlIFN1YnZlcnNpb24gbGlicmFyaWVzIGNhbiBiZSBhc3N1bWVkIHRv IGJlIHRocmVhZC1zYWZlICpvbmx5KiB3aGVuCisgKiBBUFJfSEFTX1RIUkVBRCBpcyAxLiAgVGhl IEFQUiBwb29sIGFsbG9jYXRpb25zIGFyZW4ndCB0aHJlYWQtc2FmZSB1bmxlc3MKKyAqIEFQUl9I QVNfVEhSRUFEIGlzIDEuCisgKi8KKworI2lmIGRlZmluZWQoV0lUSF9USFJFQUQpICYmIEFQUl9I QVNfVEhSRUFEUworI2RlZmluZSBBQ1FVSVJFX1BZVEhPTl9MT0NLCisjZW5kaWYKKworI2lmZGVm IEFDUVVJUkVfUFlUSE9OX0xPQ0sKK3N0YXRpYyBhcHJfdGhyZWFka2V5X3QgKl9zYXZlZF90aHJl YWRfa2V5ID0gTlVMTDsKK3N0YXRpYyBhcHJfcG9vbF90ICpfc2F2ZWRfdGhyZWFkX3Bvb2wgPSBO VUxMOworI2VuZGlmCisKK3ZvaWQgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKHZvaWQpCit7 CisjaWZkZWYgQUNRVUlSRV9QWVRIT05fTE9DSworICBQeVRocmVhZFN0YXRlICp0aHJlYWRfc3Rh dGU7CisKKyAgaWYgKF9zYXZlZF90aHJlYWRfa2V5ID09IE5VTEwpCisgICAgeworICAgICAgLyog T2J2aW91c2x5LCBjcmVhdGluZyBhIHRvcC1sZXZlbCBwb29sIGZvciB0aGlzIGlzIHByZXR0eSBz dHVwaWQuICovCisgICAgICBhcHJfcG9vbF9jcmVhdGUoJl9zYXZlZF90aHJlYWRfcG9vbCwgTlVM TCk7CisgICAgICBhcHJfdGhyZWFka2V5X3ByaXZhdGVfY3JlYXRlKCZfc2F2ZWRfdGhyZWFkX2tl eSwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3NhdmVkX3RocmVh ZF9wb29sKTsKKyAgICB9CisKKyAgdGhyZWFkX3N0YXRlID0gUHlFdmFsX1NhdmVUaHJlYWQoKTsK KyAgYXByX3RocmVhZGtleV9wcml2YXRlX3NldCh0aHJlYWRfc3RhdGUsIF9zYXZlZF90aHJlYWRf a2V5KTsKKyNlbmRpZgorfQorCit2b2lkIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jayh2b2lk KQoreworI2lmZGVmIEFDUVVJUkVfUFlUSE9OX0xPQ0sKKyAgdm9pZCAqdmFsOworICBQeVRocmVh ZFN0YXRlICp0aHJlYWRfc3RhdGU7CisgIGFwcl90aHJlYWRrZXlfcHJpdmF0ZV9nZXQoJnZhbCwg X3NhdmVkX3RocmVhZF9rZXkpOworICB0aHJlYWRfc3RhdGUgPSB2YWw7CisgIFB5RXZhbF9SZXN0 b3JlVGhyZWFkKHRocmVhZF9zdGF0ZSk7CisjZW5kaWYKK30KKworCisMCisvKioqIEF1dG9tYXRp YyBQb29sIE1hbmFnZW1lbnQgRnVuY3Rpb25zICoqKi8KKworLyogVGhlIGFwcGxpY2F0aW9uIHBv b2wgKi8KK3N0YXRpYyBhcHJfcG9vbF90ICpfZ2xvYmFsX3Bvb2wgPSBOVUxMOworc3RhdGljIFB5 T2JqZWN0ICpfZ2xvYmFsX3N2bl9zd2lnX3B5X3Bvb2wgPSBOVUxMOworc3RhdGljIGNoYXIgYXNz ZXJ0VmFsaWRbXSA9ICJhc3NlcnRfdmFsaWQiOworc3RhdGljIGNoYXIgcGFyZW50UG9vbFtdID0g Il9wYXJlbnRfcG9vbCI7CitzdGF0aWMgY2hhciBhZGRPd25lZFJlZltdID0gIl9hZGRfb3duZWRf cmVmIjsKK3N0YXRpYyBjaGFyIHJlbW92ZU93bmVkUmVmW10gPSAiX3JlbW92ZV9vd25lZF9yZWYi Oworc3RhdGljIGNoYXIgd3JhcFtdID0gIl93cmFwIjsKK3N0YXRpYyBjaGFyIHVud3JhcFtdID0g Il91bndyYXAiOworc3RhdGljIGNoYXIgc2V0UGFyZW50UG9vbFtdID0gInNldF9wYXJlbnRfcG9v bCI7CitzdGF0aWMgY2hhciBlbXB0eVR1cGxlW10gPSAiKCkiOworc3RhdGljIGNoYXIgb2JqZWN0 VHVwbGVbXSA9ICIoTykiOworCisKK2Fwcl9zdGF0dXNfdCBzdm5fc3dpZ19weV9pbml0aWFsaXpl KHZvaWQpCit7CisgIGFwcl9zdGF0dXNfdCBzdGF0dXM7CisKKyAgaWYgKChzdGF0dXMgPSBhcHJf aW5pdGlhbGl6ZSgpKSAhPSBBUFJfU1VDQ0VTUykKKyAgICByZXR1cm4gc3RhdHVzOworICBpZiAo YXRleGl0KGFwcl90ZXJtaW5hdGUpICE9IDApCisgICAgcmV0dXJuIEFQUl9FR0VORVJBTDsKKyAg cmV0dXJuIEFQUl9TVUNDRVNTOworfQorCisvKiBTZXQgdGhlIGFwcGxpY2F0aW9uIHBvb2wgKi8K K3ZvaWQgc3ZuX3N3aWdfcHlfc2V0X2FwcGxpY2F0aW9uX3Bvb2woUHlPYmplY3QgKnB5X3Bvb2ws IGFwcl9wb29sX3QgKnBvb2wpCit7CisgIF9nbG9iYWxfcG9vbCA9IHBvb2w7CisgIF9nbG9iYWxf c3ZuX3N3aWdfcHlfcG9vbCA9IHB5X3Bvb2w7Cit9CisKKy8qIENsZWFyIHRoZSBhcHBsaWNhdGlv biBwb29sICovCit2b2lkIHN2bl9zd2lnX3B5X2NsZWFyX2FwcGxpY2F0aW9uX3Bvb2woKQorewor ICBfZ2xvYmFsX3Bvb2wgPSBOVUxMOworICBfZ2xvYmFsX3N2bl9zd2lnX3B5X3Bvb2wgPSBOVUxM OworfQorCisvKiBHZXQgdGhlIGFwcGxpY2F0aW9uIHBvb2wgKi8KK3ZvaWQgc3ZuX3N3aWdfZ2V0 X2FwcGxpY2F0aW9uX3Bvb2woUHlPYmplY3QgKipweV9wb29sLCBhcHJfcG9vbF90ICoqcG9vbCkK K3sKKyAgKnBvb2wgPSBfZ2xvYmFsX3Bvb2w7CisgICpweV9wb29sID0gX2dsb2JhbF9zdm5fc3dp Z19weV9wb29sOworfQorCisvKiBTZXQgdGhlIHBhcmVudCBwb29sIG9mIGEgcHJveHkgb2JqZWN0 ICovCitzdGF0aWMgaW50IHByb3h5X3NldF9wb29sKFB5T2JqZWN0ICoqcHJveHksIFB5T2JqZWN0 ICpwb29sKQoreworICBQeU9iamVjdCAqcmVzdWx0OworCisgIGlmICgqcHJveHkgIT0gTlVMTCkK KyAgICB7CisgICAgICBpZiAocG9vbCA9PSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgaWYg KFB5T2JqZWN0X0hhc0F0dHJTdHJpbmcoKnByb3h5LCBzZXRQYXJlbnRQb29sKSkKKyAgICAgICAg ICAgIHsKKyAgICAgICAgICAgICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZCgqcHJveHks IHNldFBhcmVudFBvb2wsIGVtcHR5VHVwbGUpOworICAgICAgICAgICAgICBpZiAocmVzdWx0ID09 IE5VTEwpCisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICAgIFB5X0RFQ1JF RihyZXN1bHQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAg IHsKKyAgICAgICAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKHBvb2wsIHdyYXAsIG9i amVjdFR1cGxlLCAqcHJveHkpOworICAgICAgICAgIFB5X0RFQ1JFRigqcHJveHkpOworICAgICAg ICAgICpwcm94eSA9IHJlc3VsdDsKKyAgICAgICAgfQorICAgIH0KKworICByZXR1cm4gMDsKK30K KworLyogR2V0IHRoZSBwYXJlbnQgcG9vbCBvZiBhIHByb3h5IG9iamVjdCwgb3IgcmV0dXJuIHRo ZSBnbG9iYWwgYXBwbGljYXRpb24KKyAqIHBvb2wgaWYgb25lIGlzIG5vdCBzZXQuICBSZXR1cm5z IGEgQk9SUk9XRUQgcmVmZXJlbmNlISAqLworc3RhdGljIFB5T2JqZWN0ICpwcm94eV9nZXRfcG9v bChQeU9iamVjdCAqcHJveHkpCit7CisgIFB5T2JqZWN0ICpyZXN1bHQ7CisgIGlmIChQeU9iamVj dF9IYXNBdHRyU3RyaW5nKHByb3h5LCBwYXJlbnRQb29sKSkKKyAgICB7CisgICAgICByZXN1bHQg PSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKHByb3h5LCBwYXJlbnRQb29sKTsKKyAgICAgIFB5X0RF Q1JFRihyZXN1bHQpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHJlc3VsdCA9IF9nbG9i YWxfc3ZuX3N3aWdfcHlfcG9vbDsKKyAgICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qIENo YW5nZSBhbiAnb3duZWQgcmVmZXJlbmNlJyBhbGxvY2F0ZWQgaW4gYSBwb29sIGZyb20gb2xkUmVm IHRvIG5ld1JlZi4KKyAqIElmIG9sZFJlZiBpcyBub24tTlVMTCBhbmQgcHJlc2VudCBpbiB0aGUg cGFyZW50IHBvb2wgb2YgcHJveHksIGl0IGlzIHJlbW92ZWQuCisgKi8KK2ludCBzdm5fc3dpZ19w eV9wb29sX3NldF9vd25lZF9yZWYoUHlPYmplY3QgKnByb3h5LCBQeU9iamVjdCAqb2xkUmVmLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqbmV3UmVmKQorewor ICBQeU9iamVjdCAqdGVtcDsKKyAgUHlPYmplY3QgKnB5X3Bvb2wgPSBwcm94eV9nZXRfcG9vbChw cm94eSk7CisKKyAgaWYgKG9sZFJlZiAhPSBOVUxMKQorICAgIHsKKyAgICAgIHRlbXAgPSBQeU9i amVjdF9DYWxsTWV0aG9kKHB5X3Bvb2wsIHJlbW92ZU93bmVkUmVmLCBvYmplY3RUdXBsZSwgb2xk UmVmKTsKKyAgICAgIGlmICh0ZW1wID09IE5VTEwpCisgICAgICAgIHJldHVybiAxOworICAgICAg ZWxzZQorICAgICAgICBQeV9ERUNSRUYodGVtcCk7CisgICAgfQorICBpZiAobmV3UmVmICE9IE5V TEwpCisgICAgeworICAgICAgdGVtcCA9IFB5T2JqZWN0X0NhbGxNZXRob2QocHlfcG9vbCwgYWRk T3duZWRSZWYsIG9iamVjdFR1cGxlLCBuZXdSZWYpOworICAgICAgaWYgKHRlbXAgPT0gTlVMTCkK KyAgICAgICAgcmV0dXJuIDE7CisgICAgICBlbHNlCisgICAgICAgIFB5X0RFQ1JFRih0ZW1wKTsK KyAgICB9CisgIHJldHVybiAwOworfQorDAorLyogV3JhcHBlciBmb3IgU1dJR19UeXBlUXVlcnkg Ki8KKyNkZWZpbmUgc3ZuX3N3aWdfVHlwZVF1ZXJ5KHgpIFNXSUdfVHlwZVF1ZXJ5KHgpCisKKy8q KiBXcmFwcGVyIGZvciBTV0lHX05ld1BvaW50ZXJPYmogKi8KK1B5T2JqZWN0ICpzdm5fc3dpZ19O ZXdQb2ludGVyT2JqKHZvaWQgKm9iaiwgc3dpZ190eXBlX2luZm8gKnR5cGUsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqcG9vbCkKK3sKKyAgUHlPYmplY3QgKnBy b3h5ID0gU1dJR19OZXdQb2ludGVyT2JqKG9iaiwgdHlwZSwgMCk7CisKKyAgaWYgKHByb3h5ID09 IE5VTEwpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgaWYgKHByb3h5X3NldF9wb29sKCZwcm94eSwg cG9vbCkpCisgICAgeworICAgICAgUHlfREVDUkVGKHByb3h5KTsKKyAgICAgIHJldHVybiBOVUxM OworICAgIH0KKworICByZXR1cm4gcHJveHk7Cit9CisKKy8qKiBzdm5fc3dpZ19OZXdQb2ludGVy T2JqLCBleGNlcHQgYSBzdHJpbmcgaXMgdXNlZCB0byBkZXNjcmliZSB0aGUgdHlwZSAqLworc3Rh dGljIFB5T2JqZWN0ICpzdm5fc3dpZ19OZXdQb2ludGVyT2JqU3RyaW5nKHZvaWQgKnB0ciwgY29u c3QgY2hhciAqdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQeU9iamVjdCAqcHlfcG9vbCkKK3sKKyAgc3dpZ190eXBlX2luZm8gKnR5cGVpbmZvID0g c3ZuX3N3aWdfVHlwZVF1ZXJ5KHR5cGUpOworICBpZiAodHlwZWluZm8gPT0gTlVMTCkKKyAgICB7 CisgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiQ2Fubm90IGZpbmQgcmVx dWlyZWQgdHlwZW9iamVjdCIpOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgIC8qICMj IyBjYWNoZSB0aGUgc3dpZ190eXBlX2luZm8gYXQgc29tZSBwb2ludD8gKi8KKyAgcmV0dXJuIHN2 bl9zd2lnX05ld1BvaW50ZXJPYmoocHRyLCB0eXBlaW5mbywgcHlfcG9vbCk7Cit9CisKKy8qKiBX cmFwcGVyIGZvciBTV0lHX0NvbnZlcnRQdHIgKi8KK2ludCBzdm5fc3dpZ19Db252ZXJ0UHRyKFB5 T2JqZWN0ICppbnB1dCwgdm9pZCAqKm9iaiwgc3dpZ190eXBlX2luZm8gKnR5cGUpCit7CisgIGlm IChQeU9iamVjdF9IYXNBdHRyU3RyaW5nKGlucHV0LCBhc3NlcnRWYWxpZCkpCisgICAgeworICAg ICAgUHlPYmplY3QgKnJlc3VsdCA9IFB5T2JqZWN0X0NhbGxNZXRob2QoaW5wdXQsIGFzc2VydFZh bGlkLCBlbXB0eVR1cGxlKTsKKyAgICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKKyAgICAgICAgcmV0 dXJuIDE7CisgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICB9CisgIGlmIChQeU9iamVjdF9I YXNBdHRyU3RyaW5nKGlucHV0LCB1bndyYXApKQorICAgIHsKKyAgICAgIGlucHV0ID0gUHlPYmpl Y3RfQ2FsbE1ldGhvZChpbnB1dCwgdW53cmFwLCBlbXB0eVR1cGxlKTsKKyAgICAgIGlmIChpbnB1 dCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gMTsKKyAgICAgIFB5X0RFQ1JFRihpbnB1dCk7Cisg ICAgfQorCisgIHJldHVybiBTV0lHX0NvbnZlcnRQdHIoaW5wdXQsIG9iaiwgdHlwZSwgU1dJR19Q T0lOVEVSX0VYQ0VQVElPTiB8IDApOworfQorCisvKiogc3ZuX3N3aWdfQ29udmVydFB0ciwgZXhj ZXB0IGEgc3RyaW5nIGlzIHVzZWQgdG8gZGVzY3JpYmUgdGhlIHR5cGUgKi8KK3N0YXRpYyBpbnQg c3ZuX3N3aWdfQ29udmVydFB0clN0cmluZyhQeU9iamVjdCAqaW5wdXQsCisgICAgdm9pZCAqKm9i aiwgY29uc3QgY2hhciAqdHlwZSkKK3sKKyAgcmV0dXJuIHN2bl9zd2lnX0NvbnZlcnRQdHIoaW5w dXQsIG9iaiwgc3ZuX3N3aWdfVHlwZVF1ZXJ5KHR5cGUpKTsKK30KKworLyoqIFdyYXBwZXIgZm9y IFNXSUdfTXVzdEdldFB0ciAqLwordm9pZCAqc3ZuX3N3aWdfTXVzdEdldFB0cih2b2lkICppbnB1 dCwgc3dpZ190eXBlX2luZm8gKnR5cGUsIGludCBhcmdudW0sCisgICAgICAgICAgICAgICAgICAg ICAgICAgIFB5T2JqZWN0ICoqcHlfcG9vbCkKK3sKKyAgaWYgKFB5T2JqZWN0X0hhc0F0dHJTdHJp bmcoaW5wdXQsIGFzc2VydFZhbGlkKSkKKyAgICB7CisgICAgICBQeU9iamVjdCAqcmVzdWx0ID0g UHlPYmplY3RfQ2FsbE1ldGhvZChpbnB1dCwgYXNzZXJ0VmFsaWQsIGVtcHR5VHVwbGUpOworICAg ICAgaWYgKHJlc3VsdCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgIFB5X0RF Q1JFRihyZXN1bHQpOworICAgIH0KKworICBpZiAocHlfcG9vbCAhPSBOVUxMKQorICAgICpweV9w b29sID0gcHJveHlfZ2V0X3Bvb2woKFB5T2JqZWN0ICopIGlucHV0KTsKKworICBpZiAoUHlPYmpl Y3RfSGFzQXR0clN0cmluZyhpbnB1dCwgdW53cmFwKSkKKyAgICB7CisgICAgICBpbnB1dCA9IFB5 T2JqZWN0X0NhbGxNZXRob2QoaW5wdXQsIHVud3JhcCwgZW1wdHlUdXBsZSk7CisgICAgICBpZiAo aW5wdXQgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICBQeV9ERUNSRUYoKFB5 T2JqZWN0ICopIGlucHV0KTsKKyAgICB9CisKKyAgcmV0dXJuIFNXSUdfTXVzdEdldFB0cihpbnB1 dCwgdHlwZSwgYXJnbnVtLCBTV0lHX1BPSU5URVJfRVhDRVBUSU9OIHwgMCk7Cit9CisKKwwKKy8q KiogQ3VzdG9tIFN1YnZlcnNpb25FeGNlcHRpb24gc3R1ZmZzLiAqKiovCisKKy8qIEdsb2JhbCBT dWJ2ZXJzaW9uRXhjZXB0aW9uIGNsYXNzIG9iamVjdC4gKi8KK3N0YXRpYyBQeU9iamVjdCAqU3Vi dmVyc2lvbkV4Y2VwdGlvbiA9IE5VTEw7CisKKworUHlPYmplY3QgKnN2bl9zd2lnX3B5X2V4Y2Vw dGlvbl90eXBlKHZvaWQpCit7CisgIFB5X0lOQ1JFRihTdWJ2ZXJzaW9uRXhjZXB0aW9uKTsKKyAg cmV0dXJuIFN1YnZlcnNpb25FeGNlcHRpb247Cit9CisKK1B5T2JqZWN0ICpzdm5fc3dpZ19weV9y ZWdpc3Rlcl9leGNlcHRpb24odm9pZCkKK3sKKyAgLyogSWYgd2UgaGF2ZW4ndCBjcmVhdGVkIG91 ciBleGNlcHRpb24gY2xhc3MsIGRvIHNvLiAqLworICBpZiAoU3VidmVyc2lvbkV4Y2VwdGlvbiA9 PSBOVUxMKQorICAgIHsKKyAgICAgIFN1YnZlcnNpb25FeGNlcHRpb24gPSBQeUVycl9OZXdFeGNl cHRpb24KKyAgICAgICAgKChjaGFyICopImxpYnN2bi5fY29yZS5TdWJ2ZXJzaW9uRXhjZXB0aW9u IiwgTlVMTCwgTlVMTCk7CisgICAgfQorCisgIC8qIFJlZ2FyZGxlc3MsIHJldHVybiB0aGUgZXhj ZXB0aW9uIGNsYXNzLiAqLworICByZXR1cm4gc3ZuX3N3aWdfcHlfZXhjZXB0aW9uX3R5cGUoKTsK K30KKwordm9pZCBzdm5fc3dpZ19weV9zdm5fZXhjZXB0aW9uKHN2bl9lcnJvcl90ICplcnIpCit7 CisgIFB5T2JqZWN0ICpleGNfb2IsICphcHJfZXJyX29iOworCisgIGlmIChlcnIgPT0gTlVMTCkK KyAgICByZXR1cm47CisKKyAgLyogTWFrZSBhbiBpbnRlZ2VyIGZvciB0aGUgZXJyb3IgY29kZS4g Ki8KKyAgYXByX2Vycl9vYiA9IFB5SW50X0Zyb21Mb25nKGVyci0+YXByX2Vycik7CisgIGlmIChh cHJfZXJyX29iID09IE5VTEwpCisgICAgcmV0dXJuOworCisgIC8qIEluc3RhbnRpYXRlIGEgU3Vi dmVyc2lvbkV4Y2VwdGlvbiBvYmplY3QuICovCisgIGV4Y19vYiA9IFB5T2JqZWN0X0NhbGxGdW5j dGlvbihTdWJ2ZXJzaW9uRXhjZXB0aW9uLCAoY2hhciAqKSJzTyIsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBlcnItPm1lc3NhZ2UsIGFwcl9lcnJfb2IpOworICBpZiAoZXhjX29i ID09IE5VTEwpCisgICAgeworICAgICAgUHlfREVDUkVGKGFwcl9lcnJfb2IpOworICAgICAgcmV0 dXJuOworICAgIH0KKworICAvKiBTZXQgdGhlICJhcHJfZXJyIiBhdHRyaWJ1dGUgb2YgdGhlIGV4 Y2VwdGlvbiB0byBvdXIgZXJyb3IgY29kZS4gKi8KKyAgaWYgKFB5T2JqZWN0X1NldEF0dHJTdHJp bmcoZXhjX29iLCAoY2hhciAqKSJhcHJfZXJyIiwgYXByX2Vycl9vYikgPT0gLTEpCisgICAgewor ICAgICAgUHlfREVDUkVGKGFwcl9lcnJfb2IpOworICAgICAgUHlfREVDUkVGKGV4Y19vYik7Cisg ICAgICByZXR1cm47CisgICAgfQorCisgIC8qIEZpbmlzaGVkIHdpdGggdGhlIGFwcl9lcnIgb2Jq ZWN0LiAqLworICBQeV9ERUNSRUYoYXByX2Vycl9vYik7CisKKyAgLyogU2V0IHRoZSBlcnJvciBz dGF0ZSB0byBvdXIgZXhjZXB0aW9uIG9iamVjdC4gKi8KKyAgUHlFcnJfU2V0T2JqZWN0KFN1YnZl cnNpb25FeGNlcHRpb24sIGV4Y19vYik7CisKKyAgLyogRmluaXNoZWQgd2l0aCB0aGUgZXhjX29i IG9iamVjdC4gKi8KKyAgUHlfREVDUkVGKGV4Y19vYik7Cit9CisKKworDAorLyoqKiBIZWxwZXIv Q29udmVyc2lvbiBSb3V0aW5lcyAqKiovCisKKy8qIEZ1bmN0aW9ucyBmb3IgbWFraW5nIFB5dGhv biB3cmFwcGVycyBhcm91bmQgU3VidmVyc2lvbiBzdHJ1Y3RzICovCitzdGF0aWMgUHlPYmplY3Qg Km1ha2Vfb2JfcG9vbCh2b2lkICpwb29sKQoreworICAvKiBSZXR1cm4gYSBicmFuZCBuZXcgZGVm YXVsdCBwb29sIHRvIFB5dGhvbi4gVGhpcyBwb29sIGlzbid0CisgICAqIG5vcm1hbGx5IHVzZWQg Zm9yIGFueXRoaW5nLiBJdCdzIGp1c3QgaGVyZSBmb3IgY29tcGF0aWJpbGl0eQorICAgKiB3aXRo IFN1YnZlcnNpb24gMS4yLiAqLworICBhcHJfcG9vbF90ICpuZXdfcG9vbCA9IHN2bl9wb29sX2Ny ZWF0ZShfZ2xvYmFsX3Bvb2wpOworICBQeU9iamVjdCAqbmV3X3B5X3Bvb2wgPSBzdm5fc3dpZ19O ZXdQb2ludGVyT2JqKG5ld19wb29sLAorICAgIHN2bl9zd2lnX1R5cGVRdWVyeSgiYXByX3Bvb2xf dCAqIiksIF9nbG9iYWxfc3ZuX3N3aWdfcHlfcG9vbCk7CisgICh2b2lkKSBwb29sOyAvKiBTaWxl bmNlIGNvbXBpbGVyIHdhcm5pbmdzIGFib3V0IHVudXNlZCBwYXJhbWV0ZXIuICovCisgIHJldHVy biBuZXdfcHlfcG9vbDsKK30KK3N0YXRpYyBQeU9iamVjdCAqbWFrZV9vYl9mc19yb290KHN2bl9m c19yb290X3QgKnB0ciwgUHlPYmplY3QgKnB5X3Bvb2wpCit7CisgIHJldHVybiBzdm5fc3dpZ19O ZXdQb2ludGVyT2JqU3RyaW5nKHB0ciwgInN2bl9mc19yb290X3QgKiIsIHB5X3Bvb2wpOworfQor LyoqKi8KKworLyogQ29udmVyc2lvbiBmcm9tIFB5dGhvbiBzaW5nbGUgb2JqZWN0cyAobm90IGhh c2hlcy9saXN0cy9ldGMuKSB0bworICAgU3VidmVyc2lvbiB0eXBlcy4gKi8KK3N0YXRpYyBjb25z dCBjaGFyICptYWtlX3N0cmluZ19mcm9tX29iKFB5T2JqZWN0ICpvYiwgYXByX3Bvb2xfdCAqcG9v bCkKK3sKKyAgaWYgKG9iID09IFB5X05vbmUpCisgICAgcmV0dXJuIE5VTEw7CisgIGlmICghIFB5 U3RyaW5nX0NoZWNrKG9iKSkKKyAgICB7CisgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlw ZUVycm9yLCAibm90IGEgc3RyaW5nIik7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgIHJl dHVybiBhcHJfcHN0cmR1cChwb29sLCBQeVN0cmluZ19BU19TVFJJTkcob2IpKTsKK30KK3N0YXRp YyBzdm5fc3RyaW5nX3QgKm1ha2Vfc3ZuX3N0cmluZ19mcm9tX29iKFB5T2JqZWN0ICpvYiwgYXBy X3Bvb2xfdCAqcG9vbCkKK3sKKyAgaWYgKG9iID09IFB5X05vbmUpCisgICAgcmV0dXJuIE5VTEw7 CisgIGlmICghIFB5U3RyaW5nX0NoZWNrKG9iKSkKKyAgICB7CisgICAgICBQeUVycl9TZXRTdHJp bmcoUHlFeGNfVHlwZUVycm9yLCAibm90IGEgc3RyaW5nIik7CisgICAgICByZXR1cm4gTlVMTDsK KyAgICB9CisgIHJldHVybiBzdm5fc3RyaW5nX2NyZWF0ZShQeVN0cmluZ19BU19TVFJJTkcob2Ip LCBwb29sKTsKK30KKworCisvKioqLworCitzdGF0aWMgUHlPYmplY3QgKmNvbnZlcnRfaGFzaChh cHJfaGFzaF90ICpoYXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3Qg KiAoKmNvbnZlcnRlcl9mdW5jKSh2b2lkICp2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY3R4LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVj dCAqcHlfcG9vbCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjdHgsIFB5 T2JqZWN0ICpweV9wb29sKQoreworICAgIGFwcl9oYXNoX2luZGV4X3QgKmhpOworICAgIFB5T2Jq ZWN0ICpkaWN0ID0gUHlEaWN0X05ldygpOworCisgICAgaWYgKGRpY3QgPT0gTlVMTCkKKyAgICAg ICAgcmV0dXJuIE5VTEw7CisKKyAgICBmb3IgKGhpID0gYXByX2hhc2hfZmlyc3QoTlVMTCwgaGFz aCk7IGhpOyBoaSA9IGFwcl9oYXNoX25leHQoaGkpKQorICAgICAgeworICAgICAgICBjb25zdCB2 b2lkICprZXk7CisgICAgICAgIHZvaWQgKnZhbDsKKyAgICAgICAgUHlPYmplY3QgKnZhbHVlOwor CisgICAgICAgIGFwcl9oYXNoX3RoaXMoaGksICZrZXksIE5VTEwsICZ2YWwpOworICAgICAgICB2 YWx1ZSA9ICgqY29udmVydGVyX2Z1bmMpKHZhbCwgY3R4LCBweV9wb29sKTsKKyAgICAgICAgaWYg KHZhbHVlID09IE5VTEwpCisgICAgICAgICAgeworICAgICAgICAgICAgUHlfREVDUkVGKGRpY3Qp OworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgfQorICAgICAgICAvKiAjIyMg Z290dGEgY2FzdCB0aGlzIHRoaW5nIGN1eiBQeXRob24gZG9lc24ndCB1c2UgImNvbnN0IiAqLwor ICAgICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZGljdCwgKGNoYXIgKilrZXksIHZhbHVl KSA9PSAtMSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBQeV9ERUNSRUYodmFsdWUpOworICAg ICAgICAgICAgUHlfREVDUkVGKGRpY3QpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAg ICAgICAgfQorICAgICAgICBQeV9ERUNSRUYodmFsdWUpOworICAgICAgfQorCisgICAgcmV0dXJu IGRpY3Q7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqY29udmVydF90b19zd2lndHlwZSh2b2lkICp2 YWx1ZSwgdm9pZCAqY3R4LCBQeU9iamVjdCAqcHlfcG9vbCkKK3sKKyAgLyogY3R4IGlzIGEgJ3N3 aWdfdHlwZV9pbmZvIConICovCisgIHJldHVybiBzdm5fc3dpZ19OZXdQb2ludGVyT2JqKHZhbHVl LCBjdHgsIHB5X3Bvb2wpOworfQorCitzdGF0aWMgUHlPYmplY3QgKmNvbnZlcnRfc3ZuX3N0cmlu Z190KHZvaWQgKnZhbHVlLCB2b2lkICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFB5T2JqZWN0ICpweV9wb29sKQoreworICAvKiBjdHggaXMgdW51c2VkICovCisK KyAgY29uc3Qgc3ZuX3N0cmluZ190ICpzID0gdmFsdWU7CisKKyAgLyogIyMjIGdvdHRhIGNhc3Qg dGhpcyB0aGluZyBjdXogUHl0aG9uIGRvZXNuJ3QgdXNlICJjb25zdCIgKi8KKyAgcmV0dXJuIFB5 U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKCh2b2lkICopcy0+ZGF0YSwgcy0+bGVuKTsKK30KKwor c3RhdGljIFB5T2JqZWN0ICpjb252ZXJ0X3N2bl9jbGllbnRfY29tbWl0X2l0ZW1fdCh2b2lkICp2 YWx1ZSwgdm9pZCAqY3R4KQoreworICBQeU9iamVjdCAqbGlzdDsKKyAgUHlPYmplY3QgKnBhdGgs ICpraW5kLCAqdXJsLCAqcmV2LCAqY2ZfdXJsLCAqc3RhdGU7CisgIHN2bl9jbGllbnRfY29tbWl0 X2l0ZW1fdCAqaXRlbSA9IHZhbHVlOworCisgIC8qIGN0eCBpcyB1bnVzZWQgKi8KKworICBsaXN0 ID0gUHlMaXN0X05ldyg2KTsKKworICBpZiAoaXRlbS0+cGF0aCkKKyAgICBwYXRoID0gUHlTdHJp bmdfRnJvbVN0cmluZyhpdGVtLT5wYXRoKTsKKyAgZWxzZQorICAgIHsKKyAgICAgIHBhdGggPSBQ eV9Ob25lOworICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOworICAgIH0KKworICBpZiAoaXRlbS0+ dXJsKQorICAgIHVybCA9IFB5U3RyaW5nX0Zyb21TdHJpbmcoaXRlbS0+dXJsKTsKKyAgZWxzZQor ICAgIHsKKyAgICAgIHVybCA9IFB5X05vbmU7CisgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Cisg ICAgfQorCisgIGlmIChpdGVtLT5jb3B5ZnJvbV91cmwpCisgICAgY2ZfdXJsID0gUHlTdHJpbmdf RnJvbVN0cmluZyhpdGVtLT5jb3B5ZnJvbV91cmwpOworICBlbHNlCisgICAgeworICAgICAgY2Zf dXJsID0gUHlfTm9uZTsKKyAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKKyAgICB9CisKKyAga2lu ZCA9IFB5SW50X0Zyb21Mb25nKGl0ZW0tPmtpbmQpOworICByZXYgPSBQeUludF9Gcm9tTG9uZyhp dGVtLT5yZXZpc2lvbik7CisgIHN0YXRlID0gUHlJbnRfRnJvbUxvbmcoaXRlbS0+c3RhdGVfZmxh Z3MpOworCisgIGlmICghIChsaXN0ICYmIHBhdGggJiYga2luZCAmJiB1cmwgJiYgcmV2ICYmIGNm X3VybCAmJiBzdGF0ZSkpCisgICAgeworICAgICAgUHlfWERFQ1JFRihsaXN0KTsKKyAgICAgIFB5 X1hERUNSRUYocGF0aCk7CisgICAgICBQeV9YREVDUkVGKGtpbmQpOworICAgICAgUHlfWERFQ1JF Rih1cmwpOworICAgICAgUHlfWERFQ1JFRihyZXYpOworICAgICAgUHlfWERFQ1JFRihjZl91cmwp OworICAgICAgUHlfWERFQ1JFRihzdGF0ZSk7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisK KyAgUHlMaXN0X1NFVF9JVEVNKGxpc3QsIDAsIHBhdGgpOworICBQeUxpc3RfU0VUX0lURU0obGlz dCwgMSwga2luZCk7CisgIFB5TGlzdF9TRVRfSVRFTShsaXN0LCAyLCB1cmwpOworICBQeUxpc3Rf U0VUX0lURU0obGlzdCwgMywgcmV2KTsKKyAgUHlMaXN0X1NFVF9JVEVNKGxpc3QsIDQsIGNmX3Vy bCk7CisgIFB5TGlzdF9TRVRfSVRFTShsaXN0LCA1LCBzdGF0ZSk7CisgIHJldHVybiBsaXN0Owor fQorCitQeU9iamVjdCAqc3ZuX3N3aWdfcHlfcHJvcGhhc2hfdG9fZGljdChhcHJfaGFzaF90ICpo YXNoKQoreworICByZXR1cm4gY29udmVydF9oYXNoKGhhc2gsIGNvbnZlcnRfc3ZuX3N0cmluZ190 LCBOVUxMLCBOVUxMKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICpwcm9wYXJyYXlfdG9fZGljdChj b25zdCBhcHJfYXJyYXlfaGVhZGVyX3QgKmFycmF5KQoreworICAgIFB5T2JqZWN0ICpkaWN0ID0g UHlEaWN0X05ldygpOworICAgIGludCBpOworCisgICAgaWYgKGRpY3QgPT0gTlVMTCkKKyAgICAg IHJldHVybiBOVUxMOworCisgICAgZm9yIChpID0gMDsgaSA8IGFycmF5LT5uZWx0czsgKytpKQor ICAgICAgeworICAgICAgICBzdm5fcHJvcF90IHByb3A7CisgICAgICAgIFB5T2JqZWN0ICpweV9r ZXksICpweV92YWx1ZTsKKworICAgICAgICBwcm9wID0gQVBSX0FSUkFZX0lEWChhcnJheSwgaSwg c3ZuX3Byb3BfdCk7CisKKyAgICAgICAgcHlfa2V5ID0gUHlTdHJpbmdfRnJvbVN0cmluZyhwcm9w Lm5hbWUpOworICAgICAgICBpZiAocHlfa2V5ID09IE5VTEwpCisgICAgICAgICAgZ290byBlcnJv cjsKKworICAgICAgICBpZiAocHJvcC52YWx1ZSA9PSBOVUxMKQorICAgICAgICAgIHsKKyAgICAg ICAgICAgICBweV92YWx1ZSA9IFB5X05vbmU7CisgICAgICAgICAgICAgUHlfSU5DUkVGKFB5X05v bmUpOworICAgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICAg ICBweV92YWx1ZSA9IFB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKCh2b2lkICopcHJvcC52YWx1 ZS0+ZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHByb3AudmFsdWUtPmxlbik7CisgICAgICAgICAgICAgaWYgKHB5X3ZhbHVlID09IE5VTEwp CisgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihweV9rZXkpOwor ICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICB9CisKKyAgICAgICAgUHlEaWN0X1NldEl0ZW0oZGljdCwgcHlfa2V5LCBweV92YWx1ZSk7Cisg ICAgfQorCisgICAgcmV0dXJuIGRpY3Q7CisKKyAgZXJyb3I6CisgICAgUHlfREVDUkVGKGRpY3Qp OworICAgIHJldHVybiBOVUxMOworCit9CisKKworUHlPYmplY3QgKnN2bl9zd2lnX3B5X2xvY2F0 aW9uaGFzaF90b19kaWN0KGFwcl9oYXNoX3QgKmhhc2gpCit7CisgICAgLyogTmVlZCBzcGVjaWFs IGNvZGUgZm9yIHRoaXMgYmVjYXVzZSBvZiB0aGUgZGFybmVkIHN2bl9yZXZudW1fdAorICAgICAg IGtleXMuICovCisgICAgYXByX2hhc2hfaW5kZXhfdCAqaGk7CisgICAgUHlPYmplY3QgKmRpY3Qg PSBQeURpY3RfTmV3KCk7CisKKyAgICBpZiAoZGljdCA9PSBOVUxMKQorICAgICAgICByZXR1cm4g TlVMTDsKKworICAgIGZvciAoaGkgPSBhcHJfaGFzaF9maXJzdChOVUxMLCBoYXNoKTsgaGk7IGhp ID0gYXByX2hhc2hfbmV4dChoaSkpCisgICAgICB7CisgICAgICAgIGNvbnN0IHZvaWQgKms7Cisg ICAgICAgIHZvaWQgKnY7CisgICAgICAgIFB5T2JqZWN0ICprZXksICp2YWx1ZTsKKworICAgICAg ICBhcHJfaGFzaF90aGlzKGhpLCAmaywgTlVMTCwgJnYpOworICAgICAgICBrZXkgPSBQeUxvbmdf RnJvbUxvbmcoKihzdm5fcmV2bnVtX3QgKilrKTsKKyAgICAgICAgaWYgKGtleSA9PSBOVUxMKQor ICAgICAgICAgIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihkaWN0KTsKKyAgICAgICAgICAgIHJl dHVybiBOVUxMOworICAgICAgICAgIH0KKyAgICAgICAgdmFsdWUgPSBQeVN0cmluZ19Gcm9tU3Ry aW5nKChjaGFyICopdik7CisgICAgICAgIGlmICh2YWx1ZSA9PSBOVUxMKQorICAgICAgICAgIHsK KyAgICAgICAgICAgIFB5X0RFQ1JFRihrZXkpOworICAgICAgICAgICAgUHlfREVDUkVGKGRpY3Qp OworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgfQorICAgICAgICBpZiAoUHlE aWN0X1NldEl0ZW0oZGljdCwga2V5LCB2YWx1ZSkgPT0gLTEpCisgICAgICAgICAgeworICAgICAg ICAgICAgUHlfREVDUkVGKHZhbHVlKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihkaWN0KTsKKyAg ICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgIH0KKyAgICAgICAgUHlfREVDUkVGKHZh bHVlKTsKKyAgICAgICAgUHlfREVDUkVGKGtleSk7CisgICAgICB9CisgICAgcmV0dXJuIGRpY3Q7 Cit9CisKK1B5T2JqZWN0ICpzdm5fc3dpZ19weV9jb252ZXJ0X2hhc2goYXByX2hhc2hfdCAqaGFz aCwgc3dpZ190eXBlX2luZm8gKnR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFB5T2JqZWN0ICpweV9wb29sKQoreworICByZXR1cm4gY29udmVydF9oYXNoKGhhc2gsIGNv bnZlcnRfdG9fc3dpZ3R5cGUsIHR5cGUsIHB5X3Bvb2wpOworfQorCisjZGVmaW5lIERFQ0xBUkVf U1dJR19DT05TVFJVQ1RPUih0eXBlLCBkdXApIFwKK3N0YXRpYyBQeU9iamVjdCAqbWFrZV9vYl8j I3R5cGUodm9pZCAqdmFsdWUpIFwKK3sgXAorICBhcHJfcG9vbF90ICpuZXdfcG9vbCA9IHN2bl9w b29sX2NyZWF0ZShfZ2xvYmFsX3Bvb2wpOyBcCisgIFB5T2JqZWN0ICpuZXdfcHlfcG9vbCA9IHN2 bl9zd2lnX05ld1BvaW50ZXJPYmoobmV3X3Bvb2wsIFwKKyAgICBzdm5fc3dpZ19UeXBlUXVlcnko ImFwcl9wb29sX3QgKiIpLCBfZ2xvYmFsX3N2bl9zd2lnX3B5X3Bvb2wpOyBcCisgIHN2bl8jI3R5 cGUjI190ICpuZXdfdmFsdWUgPSBkdXAodmFsdWUsIG5ld19wb29sKTsgXAorICByZXR1cm4gc3Zu X3N3aWdfTmV3UG9pbnRlck9ialN0cmluZyhuZXdfdmFsdWUsICJzdm5fIiAjdHlwZSAiX3QgKiIs IFwKKyAgICAgIG5ld19weV9wb29sKTsgXAorfQorCitERUNMQVJFX1NXSUdfQ09OU1RSVUNUT1Io dHhkZWx0YV93aW5kb3csIHN2bl90eGRlbHRhX3dpbmRvd19kdXApCitERUNMQVJFX1NXSUdfQ09O U1RSVUNUT1IobG9nX2NoYW5nZWRfcGF0aCwgc3ZuX2xvZ19jaGFuZ2VkX3BhdGhfZHVwKQorREVD TEFSRV9TV0lHX0NPTlNUUlVDVE9SKHdjX3N0YXR1cywgc3ZuX3djX2R1cF9zdGF0dXMpCitERUNM QVJFX1NXSUdfQ09OU1RSVUNUT1IobG9jaywgc3ZuX2xvY2tfZHVwKQorREVDTEFSRV9TV0lHX0NP TlNUUlVDVE9SKGF1dGhfc3NsX3NlcnZlcl9jZXJ0X2luZm8sCisgICAgc3ZuX2F1dGhfc3NsX3Nl cnZlcl9jZXJ0X2luZm9fZHVwKQorREVDTEFSRV9TV0lHX0NPTlNUUlVDVE9SKGluZm8sIHN2bl9p bmZvX2R1cCkKK0RFQ0xBUkVfU1dJR19DT05TVFJVQ1RPUihjb21taXRfaW5mbywgc3ZuX2NvbW1p dF9pbmZvX2R1cCkKK0RFQ0xBUkVfU1dJR19DT05TVFJVQ1RPUih3Y19ub3RpZnksIHN2bl93Y19k dXBfbm90aWZ5KQorCitzdGF0aWMgUHlPYmplY3QgKmNvbnZlcnRfbG9nX2NoYW5nZWRfcGF0aCh2 b2lkICp2YWx1ZSwgdm9pZCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUHlPYmplY3QgKnB5X3Bvb2wpCit7CisgIHJldHVybiBtYWtlX29iX2xvZ19jaGFu Z2VkX3BhdGgodmFsdWUpOworfQorCitQeU9iamVjdCAqc3ZuX3N3aWdfcHlfY19zdHJpbmdzX3Rv X2xpc3QoY2hhciAqKnN0cmluZ3MpCit7CisgICAgUHlPYmplY3QgKmxpc3QgPSBQeUxpc3RfTmV3 KDApOworICAgIGNoYXIgKnM7CisKKyAgICB3aGlsZSAoKHMgPSAqc3RyaW5ncysrKSAhPSBOVUxM KQorICAgICAgeworICAgICAgICBQeU9iamVjdCAqb2IgPSBQeVN0cmluZ19Gcm9tU3RyaW5nKHMp OworCisgICAgICAgIGlmIChvYiA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKyAg ICAgICAgaWYgKFB5TGlzdF9BcHBlbmQobGlzdCwgb2IpID09IC0xKQorICAgICAgICAgICAgZ290 byBlcnJvcjsKKyAgICAgIH0KKworICAgIHJldHVybiBsaXN0OworCisgIGVycm9yOgorICAgIFB5 X0RFQ1JFRihsaXN0KTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworYXByX2hhc2hfdCAqc3ZuX3N3 aWdfcHlfc3RyaW5naGFzaF9mcm9tX2RpY3QoUHlPYmplY3QgKmRpY3QsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKQoreworICBh cHJfaGFzaF90ICpoYXNoOworICBQeU9iamVjdCAqa2V5czsKKyAgaW50IGksIG51bV9rZXlzOwor CisgIGlmIChkaWN0ID09IFB5X05vbmUpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgaWYgKCFQeURp Y3RfQ2hlY2soZGljdCkpCisgICAgeworICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVF cnJvciwgIm5vdCBhIGRpY3Rpb25hcnkiKTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKwor ICBoYXNoID0gYXByX2hhc2hfbWFrZShwb29sKTsKKyAga2V5cyA9IFB5RGljdF9LZXlzKGRpY3Qp OworICBudW1fa2V5cyA9IFB5TGlzdF9TaXplKGtleXMpOworICBmb3IgKGkgPSAwOyBpIDwgbnVt X2tleXM7IGkrKykKKyAgICB7CisgICAgICBQeU9iamVjdCAqa2V5ID0gUHlMaXN0X0dldEl0ZW0o a2V5cywgaSk7CisgICAgICBQeU9iamVjdCAqdmFsdWUgPSBQeURpY3RfR2V0SXRlbShkaWN0LCBr ZXkpOworICAgICAgY29uc3QgY2hhciAqcHJvcG5hbWUgPSBtYWtlX3N0cmluZ19mcm9tX29iKGtl eSwgcG9vbCk7CisgICAgICBjb25zdCBjaGFyICpwcm9wdmFsID0gbWFrZV9zdHJpbmdfZnJvbV9v Yih2YWx1ZSwgcG9vbCk7CisgICAgICBQeV9ERUNSRUYoa2V5KTsKKyAgICAgIFB5X0RFQ1JFRih2 YWx1ZSk7CisgICAgICBpZiAoISAocHJvcG5hbWUgJiYgcHJvcHZhbCkpCisgICAgICAgIHsKKyAg ICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAiZGljdGlvbmFyeSBrZXlzL3ZhbHVlcyBhcmVuJ3Qgc3RyaW5ncyIpOworICAg ICAgICAgIFB5X0RFQ1JFRihrZXlzKTsKKyAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAg fQorICAgICAgYXByX2hhc2hfc2V0KGhhc2gsIHByb3BuYW1lLCBBUFJfSEFTSF9LRVlfU1RSSU5H LCBwcm9wdmFsKTsKKyAgICB9CisgIFB5X0RFQ1JFRihrZXlzKTsKKyAgcmV0dXJuIGhhc2g7Cit9 CisKKworYXByX2hhc2hfdCAqc3ZuX3N3aWdfcHlfcHJvcGhhc2hfZnJvbV9kaWN0KFB5T2JqZWN0 ICpkaWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9w b29sX3QgKnBvb2wpCit7CisgIGFwcl9oYXNoX3QgKmhhc2g7CisgIFB5T2JqZWN0ICprZXlzOwor ICBpbnQgaSwgbnVtX2tleXM7CisKKyAgaWYgKGRpY3QgPT0gUHlfTm9uZSkKKyAgICByZXR1cm4g TlVMTDsKKworICBpZiAoIVB5RGljdF9DaGVjayhkaWN0KSkKKyAgICB7CisgICAgICBQeUVycl9T ZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAibm90IGEgZGljdGlvbmFyeSIpOworICAgICAgcmV0 dXJuIE5VTEw7CisgICAgfQorCisgIGhhc2ggPSBhcHJfaGFzaF9tYWtlKHBvb2wpOworICBrZXlz ID0gUHlEaWN0X0tleXMoZGljdCk7CisgIG51bV9rZXlzID0gUHlMaXN0X1NpemUoa2V5cyk7Cisg IGZvciAoaSA9IDA7IGkgPCBudW1fa2V5czsgaSsrKQorICAgIHsKKyAgICAgIFB5T2JqZWN0ICpr ZXkgPSBQeUxpc3RfR2V0SXRlbShrZXlzLCBpKTsKKyAgICAgIFB5T2JqZWN0ICp2YWx1ZSA9IFB5 RGljdF9HZXRJdGVtKGRpY3QsIGtleSk7CisgICAgICBjb25zdCBjaGFyICpwcm9wbmFtZSA9IG1h a2Vfc3RyaW5nX2Zyb21fb2Ioa2V5LCBwb29sKTsKKyAgICAgIHN2bl9zdHJpbmdfdCAqcHJvcHZh bCA9IG1ha2Vfc3ZuX3N0cmluZ19mcm9tX29iKHZhbHVlLCBwb29sKTsKKyAgICAgIFB5X0RFQ1JF RihrZXkpOworICAgICAgUHlfREVDUkVGKHZhbHVlKTsKKyAgICAgIGlmICghIChwcm9wbmFtZSAm JiBwcm9wdmFsKSkKKyAgICAgICAgeworICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19U eXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJkaWN0aW9uYXJ5IGtleXMvdmFs dWVzIGFyZW4ndCBzdHJpbmdzIik7CisgICAgICAgICAgUHlfREVDUkVGKGtleXMpOworICAgICAg ICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICBhcHJfaGFzaF9zZXQoaGFzaCwgcHJv cG5hbWUsIEFQUl9IQVNIX0tFWV9TVFJJTkcsIHByb3B2YWwpOworICAgIH0KKyAgUHlfREVDUkVG KGtleXMpOworICByZXR1cm4gaGFzaDsKK30KKworCitjb25zdCBhcHJfYXJyYXlfaGVhZGVyX3Qg KnN2bl9zd2lnX3B5X3N0cmluZ3NfdG9fYXJyYXkoUHlPYmplY3QgKnNvdXJjZSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90 ICpwb29sKQoreworICAgIGludCB0YXJnbGVuOworICAgIGFwcl9hcnJheV9oZWFkZXJfdCAqdGVt cDsKKworICAgIGlmICghUHlTZXF1ZW5jZV9DaGVjayhzb3VyY2UpKQorICAgICAgeworICAgICAg ICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAibm90IGEgc2VxdWVuY2UiKTsKKyAg ICAgICAgcmV0dXJuIE5VTEw7CisgICAgICB9CisgICAgdGFyZ2xlbiA9IFB5U2VxdWVuY2VfTGVu Z3RoKHNvdXJjZSk7CisgICAgdGVtcCA9IGFwcl9hcnJheV9tYWtlKHBvb2wsIHRhcmdsZW4sIHNp emVvZihjb25zdCBjaGFyICopKTsKKyAgICAvKiBBUFJfQVJSQVlfSURYIGRvZXNuJ3QgYWN0dWFs bHkgaW5jcmVtZW50IHRoZSBhcnJheSBpdGVtIGNvdW50CisgICAgICAgKGxpa2UsIHNheSwgYXBy X2FycmF5X3B1c2ggd291bGQpLiAqLworICAgIHRlbXAtPm5lbHRzID0gdGFyZ2xlbjsKKyAgICB3 aGlsZSAodGFyZ2xlbi0tKQorICAgICAgeworICAgICAgICBQeU9iamVjdCAqbyA9IFB5U2VxdWVu Y2VfR2V0SXRlbShzb3VyY2UsIHRhcmdsZW4pOworICAgICAgICBpZiAobyA9PSBOVUxMKQorICAg ICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGlmICghUHlTdHJpbmdfQ2hlY2sobykpCisg ICAgICAgICAgeworICAgICAgICAgICAgUHlfREVDUkVGKG8pOworICAgICAgICAgICAgUHlFcnJf U2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgIm5vdCBhIHN0cmluZyIpOworICAgICAgICAgICAg cmV0dXJuIE5VTEw7CisgICAgICAgICAgfQorICAgICAgICBBUFJfQVJSQVlfSURYKHRlbXAsIHRh cmdsZW4sIGNvbnN0IGNoYXIgKikgPSBQeVN0cmluZ19BU19TVFJJTkcobyk7CisgICAgICAgIFB5 X0RFQ1JFRihvKTsKKyAgICAgIH0KKyAgICByZXR1cm4gdGVtcDsKK30KKworCitjb25zdCBhcHJf YXJyYXlfaGVhZGVyX3QgKnN2bl9zd2lnX3B5X3Jldm51bXNfdG9fYXJyYXkoUHlPYmplY3QgKnNv dXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBhcHJfcG9vbF90ICpwb29sKQoreworICAgIGludCB0YXJnbGVuOworICAgIGFwcl9hcnJh eV9oZWFkZXJfdCAqdGVtcDsKKworICAgIGlmICghUHlTZXF1ZW5jZV9DaGVjayhzb3VyY2UpKQor ICAgICAgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAibm90IGEg c2VxdWVuY2UiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICB9CisgICAgdGFyZ2xlbiA9 IFB5U2VxdWVuY2VfTGVuZ3RoKHNvdXJjZSk7CisgICAgdGVtcCA9IGFwcl9hcnJheV9tYWtlKHBv b2wsIHRhcmdsZW4sIHNpemVvZihzdm5fcmV2bnVtX3QpKTsKKyAgICAvKiBBUFJfQVJSQVlfSURY IGRvZXNuJ3QgYWN0dWFsbHkgaW5jcmVtZW50IHRoZSBhcnJheSBpdGVtIGNvdW50CisgICAgICAg KGxpa2UsIHNheSwgYXByX2FycmF5X3B1c2ggd291bGQpLiAqLworICAgIHRlbXAtPm5lbHRzID0g dGFyZ2xlbjsKKyAgICB3aGlsZSAodGFyZ2xlbi0tKQorICAgICAgeworICAgICAgICBQeU9iamVj dCAqbyA9IFB5U2VxdWVuY2VfR2V0SXRlbShzb3VyY2UsIHRhcmdsZW4pOworICAgICAgICBpZiAo byA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGlmIChQeUxvbmdf Q2hlY2sobykpCisgICAgICAgICAgeworICAgICAgICAgICAgQVBSX0FSUkFZX0lEWCh0ZW1wLCB0 YXJnbGVuLCBzdm5fcmV2bnVtX3QpID0KKyAgICAgICAgICAgICAgKHN2bl9yZXZudW1fdClQeUxv bmdfQXNMb25nKG8pOworICAgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoUHlJbnRfQ2hlY2so bykpCisgICAgICAgICAgeworICAgICAgICAgICAgQVBSX0FSUkFZX0lEWCh0ZW1wLCB0YXJnbGVu LCBzdm5fcmV2bnVtX3QpID0KKyAgICAgICAgICAgICAgKHN2bl9yZXZudW1fdClQeUludF9Bc0xv bmcobyk7CisgICAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgeworICAgICAgICAg ICAgUHlfREVDUkVGKG8pOworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVF cnJvciwgIm5vdCBhbiBpbnRlZ2VyIHR5cGUiKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwor ICAgICAgICAgIH0KKyAgICAgICAgUHlfREVDUkVGKG8pOworICAgIH0KKyAgICByZXR1cm4gdGVt cDsKK30KKworCisMCisvKioqIGFwcl9hcnJheV9oZWFkZXJfdCBjb252ZXJzaW9ucy4gIFRvIGNy ZWF0ZSBhIG5ldyB0eXBlIG9mCisgICAgIGNvbnZlcnRlciwgc2ltcGx5IGNvcHktbi1wYXN0ZSBv bmUgb2YgdGhlc2UgZnVuY3Rpb24gYW5kIHR3ZWFrCisgICAgIHRoZSBjcmVhdGlvbiBvZiB0aGUg UHlPYmplY3QgKm9iLiAgKioqLworCitQeU9iamVjdCAqc3ZuX3N3aWdfcHlfYXJyYXlfdG9fbGlz dChjb25zdCBhcHJfYXJyYXlfaGVhZGVyX3QgKmFycmF5KQoreworICAgIFB5T2JqZWN0ICpsaXN0 ID0gUHlMaXN0X05ldyhhcnJheS0+bmVsdHMpOworICAgIGludCBpOworCisgICAgZm9yIChpID0g MDsgaSA8IGFycmF5LT5uZWx0czsgKytpKQorICAgICAgeworICAgICAgICBQeU9iamVjdCAqb2Ig PQorICAgICAgICAgIFB5U3RyaW5nX0Zyb21TdHJpbmcoQVBSX0FSUkFZX0lEWChhcnJheSwgaSwg Y29uc3QgY2hhciAqKSk7CisgICAgICAgIGlmIChvYiA9PSBOVUxMKQorICAgICAgICAgIGdvdG8g ZXJyb3I7CisgICAgICAgIFB5TGlzdF9TRVRfSVRFTShsaXN0LCBpLCBvYik7CisgICAgICB9Cisg ICAgcmV0dXJuIGxpc3Q7CisKKyAgZXJyb3I6CisgICAgUHlfREVDUkVGKGxpc3QpOworICAgIHJl dHVybiBOVUxMOworfQorCisvKiBGb3JtZXJseSB1c2VkIGJ5IHByZS0xLjAgQVBJcy4gTm93IHVu dXNlZAorUHlPYmplY3QgKnN2bl9zd2lnX3B5X3JldmFycmF5X3RvX2xpc3QoY29uc3QgYXByX2Fy cmF5X2hlYWRlcl90ICphcnJheSkKK3sKKyAgICBQeU9iamVjdCAqbGlzdCA9IFB5TGlzdF9OZXco YXJyYXktPm5lbHRzKTsKKyAgICBpbnQgaTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBhcnJheS0+ bmVsdHM7ICsraSkKKyAgICAgIHsKKyAgICAgICAgUHlPYmplY3QgKm9iCisgICAgICAgICAgPSBQ eUludF9Gcm9tTG9uZyhBUFJfQVJSQVlfSURYKGFycmF5LCBpLCBzdm5fcmV2bnVtX3QpKTsKKyAg ICAgICAgaWYgKG9iID09IE5VTEwpCisgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgUHlM aXN0X1NFVF9JVEVNKGxpc3QsIGksIG9iKTsKKyAgICAgIH0KKyAgICByZXR1cm4gbGlzdDsKKwor ICBlcnJvcjoKKyAgICBQeV9ERUNSRUYobGlzdCk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisqLwor CitzdGF0aWMgUHlPYmplY3QgKgorY29tbWl0X2l0ZW1fYXJyYXlfdG9fbGlzdChjb25zdCBhcHJf YXJyYXlfaGVhZGVyX3QgKmFycmF5KQoreworICAgIFB5T2JqZWN0ICpsaXN0ID0gUHlMaXN0X05l dyhhcnJheS0+bmVsdHMpOworICAgIGludCBpOworCisgICAgZm9yIChpID0gMDsgaSA8IGFycmF5 LT5uZWx0czsgKytpKQorICAgICAgeworICAgICAgICBQeU9iamVjdCAqb2IgPSBjb252ZXJ0X3N2 bl9jbGllbnRfY29tbWl0X2l0ZW1fdAorICAgICAgICAgIChBUFJfQVJSQVlfSURYKGFycmF5LCBp LCBzdm5fY2xpZW50X2NvbW1pdF9pdGVtX3QgKiksIE5VTEwpOworICAgICAgICBpZiAob2IgPT0g TlVMTCkKKyAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICBQeUxpc3RfU0VUX0lURU0obGlz dCwgaSwgb2IpOworICAgICAgfQorICAgIHJldHVybiBsaXN0OworCisgIGVycm9yOgorICAgIFB5 X0RFQ1JFRihsaXN0KTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworCisMCisvKioqIEVycm9ycyAq KiovCisKKy8qIFJldHVybiBhIFN1YnZlcnNpb24gZXJyb3IgYWJvdXQgYSBmYWlsZWQgY2FsbGJh Y2suICovCitzdGF0aWMgc3ZuX2Vycm9yX3QgKmNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcih2b2lk KQoreworICByZXR1cm4gc3ZuX2Vycm9yX2NyZWF0ZShTVk5fRVJSX1NXSUdfUFlfRVhDRVBUSU9O X1NFVCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlB5dGhvbiBjYWxsYmFjayBy YWlzZWQgYW4gZXhjZXB0aW9uIik7Cit9CisKKy8qIFJhaXNlIGEgVHlwZUVycm9yIGV4Y2VwdGlv biB3aXRoIE1FU1NBR0UsIGFuZCByZXR1cm4gYSBTdWJ2ZXJzaW9uCisgICBlcnJvciBhYm91dCBh biBpbnZhbGlkIHJldHVybiBmcm9tIGEgY2FsbGJhY2suICovCitzdGF0aWMgc3ZuX2Vycm9yX3Qg KmNhbGxiYWNrX2JhZF9yZXR1cm5fZXJyb3IoY29uc3QgY2hhciAqbWVzc2FnZSkKK3sKKyAgUHlF cnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgbWVzc2FnZSk7CisgIHJldHVybiBzdm5fZXJy b3JfY3JlYXRlKEFQUl9FR0VORVJBTCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg IlB5dGhvbiBjYWxsYmFjayByZXR1cm5lZCBhbiBpbnZhbGlkIG9iamVjdCIpOworfQorCisvKiBS ZXR1cm4gYSBnZW5lcmljIGVycm9yIGFib3V0IG5vdCBiZWluZyBhYmxlIHRvIG1hcCB0eXBlcy4g Ki8KK3N0YXRpYyBzdm5fZXJyb3JfdCAqdHlwZV9jb252ZXJzaW9uX2Vycm9yKGNvbnN0IGNoYXIg KmRhdGF0eXBlKQoreworICByZXR1cm4gc3ZuX2Vycm9yX2NyZWF0ZWYoQVBSX0VHRU5FUkFMLCBO VUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVycm9yIGNvbnZlcnRpbmcgb2JqZWN0 IG9mIHR5cGUgJyVzJyIsIGRhdGF0eXBlKTsKK30KKworCisMCisvKioqIEVkaXRvciBXcmFwcGlu ZyAqKiovCisKKy8qIHRoaXMgYmF0b24gaXMgdXNlZCBmb3IgdGhlIGVkaXRvciwgZGlyZWN0b3J5 LCBhbmQgZmlsZSBiYXRvbnMuICovCit0eXBlZGVmIHN0cnVjdCB7CisgIFB5T2JqZWN0ICplZGl0 b3I7ICAgICAvKiB0aGUgZWRpdG9yIGhhbmRsaW5nIHRoZSBjYWxsYmFja3MgKi8KKyAgUHlPYmpl Y3QgKmJhdG9uOyAgICAgIC8qIHRoZSBkaXIvZmlsZSBiYXRvbiAob3IgTlVMTCBmb3IgZWRpdCBi YXRvbikgKi8KK30gaXRlbV9iYXRvbjsKKworc3RhdGljIGl0ZW1fYmF0b24gKm1ha2VfYmF0b24o YXByX3Bvb2xfdCAqcG9vbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0 ICplZGl0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqYmF0b24p Cit7CisgIGl0ZW1fYmF0b24gKm5ld2IgPSBhcHJfcGFsbG9jKHBvb2wsIHNpemVvZigqbmV3Yikp OworCisgIC8qIE5vdGU6IFdlIHN0ZWFsIHRoZSBjYWxsZXIncyByZWZlcmVuY2UgdG8gJ2JhdG9u Jy4gQWxzbywgdG8gYXZvaWQKKyAgICAgbWVtb3J5IGxlYWtzLCB3ZSBib3Jyb3cgdGhlIGNhbGxl cidzIHJlZmVyZW5jZSB0byAnZWRpdG9yJy4gSW4gdGhpcworICAgICBjYXNlLCBib3Jyb3dpbmcg dGhlIHJlZmVyZW5jZSB0byAnZWRpdG9yJyBpcyBzYWZlIGJlY2F1c2UgdGhlIGNvbnRlbnRzCisg ICAgIG9mIGFuIGl0ZW1fYmF0b24gc3RydWN0IGFyZSBvbmx5IHVzZWQgYnkgZnVuY3Rpbm8gY2Fs bHMgd2hpY2ggb3BlcmF0ZSBvbgorICAgICB0aGUgZWRpdG9yIGl0c2VsZi4gKi8KKyAgbmV3Yi0+ ZWRpdG9yID0gZWRpdG9yOworICBuZXdiLT5iYXRvbiA9IGJhdG9uOworCisgIHJldHVybiBuZXdi OworfQorCitzdGF0aWMgc3ZuX2Vycm9yX3QgKmNsb3NlX2JhdG9uKHZvaWQgKmJhdG9uLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICptZXRob2QpCit7CisgIGl0 ZW1fYmF0b24gKmliID0gYmF0b247CisgIFB5T2JqZWN0ICpyZXN1bHQ7CisgIHN2bl9lcnJvcl90 ICplcnI7CisKKyAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7CisKKyAgLyogSWYgdGhl cmUgaXMgbm8gYmF0b24gb2JqZWN0LCB0aGVuIGl0IGlzIGFuIGVkaXRfYmF0b24sIGFuZCB3ZSBz aG91bGQKKyAgICAgbm90IGJvdGhlciB0byBwYXNzIGFuIG9iamVjdC4gTm90ZSB0aGF0IHdlIHN0 aWxsIHNob3ZlIGEgTlVMTCBvbnRvCisgICAgIHRoZSBzdGFjaywgYnV0IHRoZSBmb3JtYXQgc3Bl Y2lmaWVkIGp1c3Qgd29uJ3QgcmVmZXJlbmNlIGl0LiAgKi8KKyAgLyogIyMjIHB5dGhvbiBkb2Vz bid0IGhhdmUgJ2NvbnN0JyBvbiB0aGUgbWV0aG9kIG5hbWUgYW5kIGZvcm1hdCAqLworICBpZiAo KHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxNZXRob2QoaWItPmVkaXRvciwgKGNoYXIgKiltZXRob2Qs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpYi0+YmF0b24gPyAoY2hhciAq KSIoTykiIDogTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGliLT5i YXRvbikpID09IE5VTEwpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vy cm9yKCk7CisgICAgICBnb3RvIGZpbmlzaGVkOworICAgIH0KKworICAvKiB0aGVyZSBpcyBubyBy ZXR1cm4gdmFsdWUsIHNvIGp1c3QgdG9zcyB0aGlzIG9iamVjdCAocHJvYmFibHkgUHlfTm9uZSkg Ki8KKyAgUHlfREVDUkVGKHJlc3VsdCk7CisKKyAgLyogV2UncmUgbm93IGRvbmUgd2l0aCB0aGUg YmF0b24uIFNpbmNlIHRoZXJlIGlzbid0IHJlYWxseSBhIGZyZWUsIGFsbAorICAgICB3ZSBuZWVk IHRvIGRvIGlzIG5vdGUgdGhhdCBpdHMgb2JqZWN0cyBhcmUgbm8gbG9uZ2VyIHJlZmVyZW5jZWQg YnkKKyAgICAgdGhlIGJhdG9uLiAgKi8KKyAgUHlfWERFQ1JFRihpYi0+YmF0b24pOworCisjaWZk ZWYgU1ZOX0RFQlVHCisgIGliLT5lZGl0b3IgPSBpYi0+YmF0b24gPSBOVUxMOworI2VuZGlmCisK KyAgZXJyID0gU1ZOX05PX0VSUk9SOworCisgZmluaXNoZWQ6CisgIHN2bl9zd2lnX3B5X3JlbGVh c2VfcHlfbG9jaygpOworICByZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3ZuX2Vycm9yX3QgKnNl dF90YXJnZXRfcmV2aXNpb24odm9pZCAqZWRpdF9iYXRvbiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzdm5fcmV2bnVtX3QgdGFyZ2V0X3JldmlzaW9uLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpCit7Cisg IGl0ZW1fYmF0b24gKmliID0gZWRpdF9iYXRvbjsKKyAgUHlPYmplY3QgKnJlc3VsdDsKKyAgc3Zu X2Vycm9yX3QgKmVycjsKKworICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xvY2soKTsKKworICAv KiAjIyMgcHl0aG9uIGRvZXNuJ3QgaGF2ZSAnY29uc3QnIG9uIHRoZSBtZXRob2QgbmFtZSBhbmQg Zm9ybWF0ICovCisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChpYi0+ZWRpdG9y LCAoY2hhciAqKSJzZXRfdGFyZ2V0X3JldmlzaW9uIiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChjaGFyICopImwiLCB0YXJnZXRfcmV2aXNpb24pKSA9PSBOVUxMKQorICAg IHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgICAgZ290byBm aW5pc2hlZDsKKyAgICB9CisKKyAgLyogdGhlcmUgaXMgbm8gcmV0dXJuIHZhbHVlLCBzbyBqdXN0 IHRvc3MgdGhpcyBvYmplY3QgKHByb2JhYmx5IFB5X05vbmUpICovCisgIFB5X0RFQ1JFRihyZXN1 bHQpOworICBlcnIgPSBTVk5fTk9fRVJST1I7CisKKyBmaW5pc2hlZDoKKyAgc3ZuX3N3aWdfcHlf cmVsZWFzZV9weV9sb2NrKCk7CisgIHJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzdm5fZXJyb3Jf dCAqb3Blbl9yb290KHZvaWQgKmVkaXRfYmF0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzdm5fcmV2bnVtX3QgYmFzZV9yZXZpc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGFwcl9wb29sX3QgKmRpcl9wb29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdm9pZCAqKnJvb3RfYmF0b24pCit7CisgIGl0ZW1fYmF0b24gKmliID0gZWRpdF9iYXRvbjsK KyAgUHlPYmplY3QgKnJlc3VsdDsKKyAgc3ZuX2Vycm9yX3QgKmVycjsKKworICBzdm5fc3dpZ19w eV9hY3F1aXJlX3B5X2xvY2soKTsKKworICAvKiAjIyMgcHl0aG9uIGRvZXNuJ3QgaGF2ZSAnY29u c3QnIG9uIHRoZSBtZXRob2QgbmFtZSBhbmQgZm9ybWF0ICovCisgIGlmICgocmVzdWx0ID0gUHlP YmplY3RfQ2FsbE1ldGhvZChpYi0+ZWRpdG9yLCAoY2hhciAqKSJvcGVuX3Jvb3QiLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikibE8mIiwgYmFzZV9yZXZpc2lv biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vfb2JfcG9vbCwgZGly X3Bvb2wpKSA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9l cnJvcigpOworICAgICAgZ290byBmaW5pc2hlZDsKKyAgICB9CisKKyAgLyogbWFrZV9iYXRvbiB0 YWtlcyBvdXIgJ3Jlc3VsdCcgcmVmZXJlbmNlICovCisgICpyb290X2JhdG9uID0gbWFrZV9iYXRv bihkaXJfcG9vbCwgaWItPmVkaXRvciwgcmVzdWx0KTsKKyAgZXJyID0gU1ZOX05PX0VSUk9SOwor CisgZmluaXNoZWQ6CisgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOworICByZXR1cm4g ZXJyOworfQorCitzdGF0aWMgc3ZuX2Vycm9yX3QgKmRlbGV0ZV9lbnRyeShjb25zdCBjaGFyICpw YXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX3Jldm51bV90IHJldmlz aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcGFyZW50X2JhdG9u LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sK KyAgaXRlbV9iYXRvbiAqaWIgPSBwYXJlbnRfYmF0b247CisgIFB5T2JqZWN0ICpyZXN1bHQ7Cisg IHN2bl9lcnJvcl90ICplcnI7CisKKyAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7CisK KyAgLyogIyMjIHB5dGhvbiBkb2Vzbid0IGhhdmUgJ2NvbnN0JyBvbiB0aGUgbWV0aG9kIG5hbWUg YW5kIGZvcm1hdCAqLworICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxNZXRob2QoaWItPmVk aXRvciwgKGNoYXIgKikiZGVsZXRlX2VudHJ5IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChjaGFyICopInNsT08mIiwgcGF0aCwgcmV2aXNpb24sIGliLT5iYXRvbiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vfb2JfcG9vbCwgcG9vbCkpID09 IE5VTEwpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7Cisg ICAgICBnb3RvIGZpbmlzaGVkOworICAgIH0KKworICAvKiB0aGVyZSBpcyBubyByZXR1cm4gdmFs dWUsIHNvIGp1c3QgdG9zcyB0aGlzIG9iamVjdCAocHJvYmFibHkgUHlfTm9uZSkgKi8KKyAgUHlf REVDUkVGKHJlc3VsdCk7CisgIGVyciA9IFNWTl9OT19FUlJPUjsKKworIGZpbmlzaGVkOgorICBz dm5fc3dpZ19weV9yZWxlYXNlX3B5X2xvY2soKTsKKyAgcmV0dXJuIGVycjsKK30KKworc3RhdGlj IHN2bl9lcnJvcl90ICphZGRfZGlyZWN0b3J5KGNvbnN0IGNoYXIgKnBhdGgsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcGFyZW50X2JhdG9uLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNvcHlmcm9tX3BhdGgsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX3Jldm51bV90IGNvcHlmcm9tX3JldmlzaW9u LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKmRpcl9wb29s LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKipjaGlsZF9iYXRvbikK K3sKKyAgaXRlbV9iYXRvbiAqaWIgPSBwYXJlbnRfYmF0b247CisgIFB5T2JqZWN0ICpyZXN1bHQ7 CisgIHN2bl9lcnJvcl90ICplcnI7CisKKyAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7 CisKKyAgLyogIyMjIHB5dGhvbiBkb2Vzbid0IGhhdmUgJ2NvbnN0JyBvbiB0aGUgbWV0aG9kIG5h bWUgYW5kIGZvcm1hdCAqLworICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxNZXRob2QoaWIt PmVkaXRvciwgKGNoYXIgKikiYWRkX2RpcmVjdG9yeSIsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoY2hhciAqKSJzT3NsTyYiLCBwYXRoLCBpYi0+YmF0b24sCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3B5ZnJvbV9wYXRoLCBjb3B5ZnJvbV9yZXZp c2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vfb2JfcG9vbCwg ZGlyX3Bvb2wpKSA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlv bl9lcnJvcigpOworICAgICAgZ290byBmaW5pc2hlZDsKKyAgICB9CisKKyAgLyogbWFrZV9iYXRv biB0YWtlcyBvdXIgJ3Jlc3VsdCcgcmVmZXJlbmNlICovCisgICpjaGlsZF9iYXRvbiA9IG1ha2Vf YmF0b24oZGlyX3Bvb2wsIGliLT5lZGl0b3IsIHJlc3VsdCk7CisgIGVyciA9IFNWTl9OT19FUlJP UjsKKworIGZpbmlzaGVkOgorICBzdm5fc3dpZ19weV9yZWxlYXNlX3B5X2xvY2soKTsKKyAgcmV0 dXJuIGVycjsKK30KKworc3RhdGljIHN2bl9lcnJvcl90ICpvcGVuX2RpcmVjdG9yeShjb25zdCBj aGFyICpwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwYXJl bnRfYmF0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2bl9yZXZudW1f dCBiYXNlX3JldmlzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJf cG9vbF90ICpkaXJfcG9vbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9p ZCAqKmNoaWxkX2JhdG9uKQoreworICBpdGVtX2JhdG9uICppYiA9IHBhcmVudF9iYXRvbjsKKyAg UHlPYmplY3QgKnJlc3VsdDsKKyAgc3ZuX2Vycm9yX3QgKmVycjsKKworICBzdm5fc3dpZ19weV9h Y3F1aXJlX3B5X2xvY2soKTsKKworICAvKiAjIyMgcHl0aG9uIGRvZXNuJ3QgaGF2ZSAnY29uc3Qn IG9uIHRoZSBtZXRob2QgbmFtZSBhbmQgZm9ybWF0ICovCisgIGlmICgocmVzdWx0ID0gUHlPYmpl Y3RfQ2FsbE1ldGhvZChpYi0+ZWRpdG9yLCAoY2hhciAqKSJvcGVuX2RpcmVjdG9yeSIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJzT2xPJiIsIHBhdGgsIGli LT5iYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VfcmV2aXNp b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX29iX3Bvb2wsIGRp cl9wb29sKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25f ZXJyb3IoKTsKKyAgICAgIGdvdG8gZmluaXNoZWQ7CisgICAgfQorCisgIC8qIG1ha2VfYmF0b24g dGFrZXMgb3VyICdyZXN1bHQnIHJlZmVyZW5jZSAqLworICAqY2hpbGRfYmF0b24gPSBtYWtlX2Jh dG9uKGRpcl9wb29sLCBpYi0+ZWRpdG9yLCByZXN1bHQpOworICBlcnIgPSBTVk5fTk9fRVJST1I7 CisKKyBmaW5pc2hlZDoKKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7CisgIHJldHVy biBlcnI7Cit9CisKK3N0YXRpYyBzdm5fZXJyb3JfdCAqY2hhbmdlX2Rpcl9wcm9wKHZvaWQgKmRp cl9iYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg Km5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdm5fc3Ry aW5nX3QgKnZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bv b2xfdCAqcG9vbCkKK3sKKyAgaXRlbV9iYXRvbiAqaWIgPSBkaXJfYmF0b247CisgIFB5T2JqZWN0 ICpyZXN1bHQ7CisgIHN2bl9lcnJvcl90ICplcnI7CisKKyAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9w eV9sb2NrKCk7CisKKyAgLyogIyMjIHB5dGhvbiBkb2Vzbid0IGhhdmUgJ2NvbnN0JyBvbiB0aGUg bWV0aG9kIG5hbWUgYW5kIGZvcm1hdCAqLworICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxN ZXRob2QoaWItPmVkaXRvciwgKGNoYXIgKikiY2hhbmdlX2Rpcl9wcm9wIiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopIk9zcyNPJiIsIGliLT5iYXRvbiwgbmFt ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID8gdmFsdWUtPmRh dGEgOiBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPyB2 YWx1ZS0+bGVuIDogMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vf b2JfcG9vbCwgcG9vbCkpID09IE5VTEwpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfZXhj ZXB0aW9uX2Vycm9yKCk7CisgICAgICBnb3RvIGZpbmlzaGVkOworICAgIH0KKworICAvKiB0aGVy ZSBpcyBubyByZXR1cm4gdmFsdWUsIHNvIGp1c3QgdG9zcyB0aGlzIG9iamVjdCAocHJvYmFibHkg UHlfTm9uZSkgKi8KKyAgUHlfREVDUkVGKHJlc3VsdCk7CisgIGVyciA9IFNWTl9OT19FUlJPUjsK KworIGZpbmlzaGVkOgorICBzdm5fc3dpZ19weV9yZWxlYXNlX3B5X2xvY2soKTsKKyAgcmV0dXJu IGVycjsKK30KKworc3RhdGljIHN2bl9lcnJvcl90ICpjbG9zZV9kaXJlY3Rvcnkodm9pZCAqZGly X2JhdG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAq cG9vbCkKK3sKKyAgcmV0dXJuIGNsb3NlX2JhdG9uKGRpcl9iYXRvbiwgImNsb3NlX2RpcmVjdG9y eSIpOworfQorCitzdGF0aWMgc3ZuX2Vycm9yX3QgKmFkZF9maWxlKGNvbnN0IGNoYXIgKnBhdGgs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBhcmVudF9iYXRvbiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY29weWZyb21fcGF0aCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX3Jldm51bV90IGNvcHlmcm9tX3JldmlzaW9uLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpmaWxlX3Bvb2wsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKipmaWxlX2JhdG9uKQoreworICBpdGVtX2Jh dG9uICppYiA9IHBhcmVudF9iYXRvbjsKKyAgUHlPYmplY3QgKnJlc3VsdDsKKyAgc3ZuX2Vycm9y X3QgKmVycjsKKworICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xvY2soKTsKKworICAvKiAjIyMg cHl0aG9uIGRvZXNuJ3QgaGF2ZSAnY29uc3QnIG9uIHRoZSBtZXRob2QgbmFtZSBhbmQgZm9ybWF0 ICovCisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChpYi0+ZWRpdG9yLCAoY2hh ciAqKSJhZGRfZmlsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hh ciAqKSJzT3NsTyYiLCBwYXRoLCBpYi0+YmF0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb3B5ZnJvbV9wYXRoLCBjb3B5ZnJvbV9yZXZpc2lvbiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vfb2JfcG9vbCwgZmlsZV9wb29sKSkgPT0gTlVM TCkKKyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICAg IGdvdG8gZmluaXNoZWQ7CisgICAgfQorCisgIC8qIG1ha2VfYmF0b24gdGFrZXMgb3VyICdyZXN1 bHQnIHJlZmVyZW5jZSAqLworICAqZmlsZV9iYXRvbiA9IG1ha2VfYmF0b24oZmlsZV9wb29sLCBp Yi0+ZWRpdG9yLCByZXN1bHQpOworCisgIGVyciA9IFNWTl9OT19FUlJPUjsKKworIGZpbmlzaGVk OgorICBzdm5fc3dpZ19weV9yZWxlYXNlX3B5X2xvY2soKTsKKyAgcmV0dXJuIGVycjsKK30KKwor c3RhdGljIHN2bl9lcnJvcl90ICpvcGVuX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBhcmVudF9iYXRvbiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHN2bl9yZXZudW1fdCBiYXNlX3JldmlzaW9uLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqZmlsZV9wb29sLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdm9pZCAqKmZpbGVfYmF0b24pCit7CisgIGl0ZW1fYmF0b24gKmliID0g cGFyZW50X2JhdG9uOworICBQeU9iamVjdCAqcmVzdWx0OworICBzdm5fZXJyb3JfdCAqZXJyOwor CisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisgIC8qICMjIyBweXRob24gZG9l c24ndCBoYXZlICdjb25zdCcgb24gdGhlIG1ldGhvZCBuYW1lIGFuZCBmb3JtYXQgKi8KKyAgaWYg KChyZXN1bHQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKGliLT5lZGl0b3IsIChjaGFyICopIm9wZW5f ZmlsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJzT2xP JiIsIHBhdGgsIGliLT5iYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGJhc2VfcmV2aXNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtl X29iX3Bvb2wsIGZpbGVfcG9vbCkpID09IE5VTEwpCisgICAgeworICAgICAgZXJyID0gY2FsbGJh Y2tfZXhjZXB0aW9uX2Vycm9yKCk7CisgICAgICBnb3RvIGZpbmlzaGVkOworICAgIH0KKworICAv KiBtYWtlX2JhdG9uIHRha2VzIG91ciAncmVzdWx0JyByZWZlcmVuY2UgKi8KKyAgKmZpbGVfYmF0 b24gPSBtYWtlX2JhdG9uKGZpbGVfcG9vbCwgaWItPmVkaXRvciwgcmVzdWx0KTsKKyAgZXJyID0g U1ZOX05PX0VSUk9SOworCisgZmluaXNoZWQ6CisgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9j aygpOworICByZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3ZuX2Vycm9yX3QgKndpbmRvd19oYW5k bGVyKHN2bl90eGRlbHRhX3dpbmRvd190ICp3aW5kb3csCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHZvaWQgKmJhdG9uKQoreworICBQeU9iamVjdCAqaGFuZGxlciA9IGJhdG9u OworICBQeU9iamVjdCAqcmVzdWx0OworICBzdm5fZXJyb3JfdCAqZXJyOworCisgIHN2bl9zd2ln X3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisgIGlmICh3aW5kb3cgPT0gTlVMTCkKKyAgICB7Cisg ICAgICAvKiB0aGUgbGFzdCBjYWxsOyBpdCBjbG9zZXMgdGhlIGhhbmRsZXIgKi8KKworICAgICAg LyogaW52b2tlIHRoZSBoYW5kbGVyIHdpdGggTm9uZSBmb3IgdGhlIHdpbmRvdyAqLworICAgICAg LyogIyMjIHB5dGhvbiBkb2Vzbid0IGhhdmUgJ2NvbnN0JyBvbiB0aGUgZm9ybWF0ICovCisgICAg ICByZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oaGFuZGxlciwgKGNoYXIgKikiTyIsIFB5 X05vbmUpOworCisgICAgICAvKiB3ZSBubyBsb25nZXIgbmVlZCB0byByZWZlciB0byB0aGUgaGFu ZGxlciBvYmplY3QgKi8KKyAgICAgIFB5X0RFQ1JFRihoYW5kbGVyKTsKKyAgICB9CisgIGVsc2UK KyAgICB7CisgICAgICAvKiBpbnZva2UgdGhlIGhhbmRsZXIgd2l0aCB0aGUgd2luZG93ICovCisg ICAgICAvKiAjIyMgcHl0aG9uIGRvZXNuJ3QgaGF2ZSAnY29uc3QnIG9uIHRoZSBmb3JtYXQgKi8K KyAgICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihoYW5kbGVyLCAoY2hhciAqKSJP JiIsCisgICAgICAgIG1ha2Vfb2JfdHhkZWx0YV93aW5kb3csIHdpbmRvdyk7CisgICAgfQorCisg IGlmIChyZXN1bHQgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRp b25fZXJyb3IoKTsKKyAgICAgIGdvdG8gZmluaXNoZWQ7CisgICAgfQorCisgIC8qIHRoZXJlIGlz IG5vIHJldHVybiB2YWx1ZSwgc28ganVzdCB0b3NzIHRoaXMgb2JqZWN0IChwcm9iYWJseSBQeV9O b25lKSAqLworICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgZXJyID0gU1ZOX05PX0VSUk9SOworCisg ZmluaXNoZWQ6CisgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOworICByZXR1cm4gZXJy OworfQorCitzdGF0aWMgc3ZuX2Vycm9yX3QgKmFwcGx5X3RleHRkZWx0YSh2b2lkICpmaWxlX2Jh dG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYmFz ZV9jaGVja3N1bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29s X3QgKnBvb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdm5fdHhkZWx0 YV93aW5kb3dfaGFuZGxlcl90ICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdm9pZCAqKmhfYmF0b24pCit7CisgIGl0ZW1fYmF0b24gKmliID0gZmlsZV9iYXRv bjsKKyAgUHlPYmplY3QgKnJlc3VsdDsKKyAgc3ZuX2Vycm9yX3QgKmVycjsKKworICBzdm5fc3dp Z19weV9hY3F1aXJlX3B5X2xvY2soKTsKKworICAvKiAjIyMgcHl0aG9uIGRvZXNuJ3QgaGF2ZSAn Y29uc3QnIG9uIHRoZSBtZXRob2QgbmFtZSBhbmQgZm9ybWF0ICovCisgIGlmICgocmVzdWx0ID0g UHlPYmplY3RfQ2FsbE1ldGhvZChpYi0+ZWRpdG9yLCAoY2hhciAqKSJhcHBseV90ZXh0ZGVsdGEi LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikiKE9zKSIsIGli LT5iYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VfY2hlY2tz dW0pKSA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJv cigpOworICAgICAgZ290byBmaW5pc2hlZDsKKyAgICB9CisKKyAgLyogSW50ZXJwcmV0IE5vbmUg dG8gbWVhbiBzdm5fZGVsdGFfbm9vcF93aW5kb3dfaGFuZGxlci4gVGhpcyBpcyBtdWNoCisgICAg IGVhc2llci9mYXN0ZXIgdGhhbiBtYWtpbmcgY29kZSBhbHdheXMgaGF2ZSB0byB3cml0ZSBhIE5P T1AgaGFuZGxlcgorICAgICBpbiBQeXRob24uICAqLworICBpZiAocmVzdWx0ID09IFB5X05vbmUp CisgICAgeworICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisKKyAgICAgICpoYW5kbGVyID0gc3Zu X2RlbHRhX25vb3Bfd2luZG93X2hhbmRsZXI7CisgICAgICAqaF9iYXRvbiA9IE5VTEw7CisgICAg fQorICBlbHNlCisgICAgeworICAgICAgLyogcmV0dXJuIHRoZSB0aHVuayBmb3IgaW52b2tpbmcg dGhlIGhhbmRsZXIuIHRoZSBiYXRvbiB0YWtlcyBvdXIKKyAgICAgICAgICdyZXN1bHQnIHJlZmVy ZW5jZSwgd2hpY2ggaXMgdGhlIGhhbmRsZXIuICovCisgICAgICAqaGFuZGxlciA9IHdpbmRvd19o YW5kbGVyOworICAgICAgKmhfYmF0b24gPSByZXN1bHQ7CisgICAgfQorCisgIGVyciA9IFNWTl9O T19FUlJPUjsKKworIGZpbmlzaGVkOgorICBzdm5fc3dpZ19weV9yZWxlYXNlX3B5X2xvY2soKTsK KyAgcmV0dXJuIGVycjsKK30KKworc3RhdGljIHN2bl9lcnJvcl90ICpjaGFuZ2VfZmlsZV9wcm9w KHZvaWQgKmZpbGVfYmF0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgY2hhciAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBzdm5fc3RyaW5nX3QgKnZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGFwcl9wb29sX3QgKnBvb2wpCit7CisgIGl0ZW1fYmF0b24gKmliID0gZmlsZV9iYXRv bjsKKyAgUHlPYmplY3QgKnJlc3VsdDsKKyAgc3ZuX2Vycm9yX3QgKmVycjsKKworICBzdm5fc3dp Z19weV9hY3F1aXJlX3B5X2xvY2soKTsKKworICAvKiAjIyMgcHl0aG9uIGRvZXNuJ3QgaGF2ZSAn Y29uc3QnIG9uIHRoZSBtZXRob2QgbmFtZSBhbmQgZm9ybWF0ICovCisgIGlmICgocmVzdWx0ID0g UHlPYmplY3RfQ2FsbE1ldGhvZChpYi0+ZWRpdG9yLCAoY2hhciAqKSJjaGFuZ2VfZmlsZV9wcm9w IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopIk9zcyNPJiIs IGliLT5iYXRvbiwgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh bHVlID8gdmFsdWUtPmRhdGEgOiBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdmFsdWUgPyB2YWx1ZS0+bGVuIDogMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIG1ha2Vfb2JfcG9vbCwgcG9vbCkpID09IE5VTEwpCisgICAgeworICAgICAgZXJy ID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7CisgICAgICBnb3RvIGZpbmlzaGVkOworICAg IH0KKworICAvKiB0aGVyZSBpcyBubyByZXR1cm4gdmFsdWUsIHNvIGp1c3QgdG9zcyB0aGlzIG9i amVjdCAocHJvYmFibHkgUHlfTm9uZSkgKi8KKyAgUHlfREVDUkVGKHJlc3VsdCk7CisgIGVyciA9 IFNWTl9OT19FUlJPUjsKKworIGZpbmlzaGVkOgorICBzdm5fc3dpZ19weV9yZWxlYXNlX3B5X2xv Y2soKTsKKyAgcmV0dXJuIGVycjsKK30KKworc3RhdGljIHN2bl9lcnJvcl90ICpjbG9zZV9maWxl KHZvaWQgKmZpbGVfYmF0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg Y2hhciAqdGV4dF9jaGVja3N1bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJf cG9vbF90ICpwb29sKQoreworICBpdGVtX2JhdG9uICppYiA9IGZpbGVfYmF0b247CisgIFB5T2Jq ZWN0ICpyZXN1bHQ7CisgIHN2bl9lcnJvcl90ICplcnI7CisKKyAgc3ZuX3N3aWdfcHlfYWNxdWly ZV9weV9sb2NrKCk7CisKKyAgLyogIyMjIHB5dGhvbiBkb2Vzbid0IGhhdmUgJ2NvbnN0JyBvbiB0 aGUgbWV0aG9kIG5hbWUgYW5kIGZvcm1hdCAqLworICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0Nh bGxNZXRob2QoaWItPmVkaXRvciwgKGNoYXIgKikiY2xvc2VfZmlsZSIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSIoT3MpIiwgaWItPmJhdG9uLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dF9jaGVja3N1bSkpID09IE5VTEwpCisg ICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7CisgICAgICBnb3Rv IGZpbmlzaGVkOworICAgIH0KKworICAvKiB0aGVyZSBpcyBubyByZXR1cm4gdmFsdWUsIHNvIGp1 c3QgdG9zcyB0aGlzIG9iamVjdCAocHJvYmFibHkgUHlfTm9uZSkgKi8KKyAgUHlfREVDUkVGKHJl c3VsdCk7CisKKyAgLyogV2UncmUgbm93IGRvbmUgd2l0aCB0aGUgYmF0b24uIFNpbmNlIHRoZXJl IGlzbid0IHJlYWxseSBhIGZyZWUsIGFsbAorICAgICB3ZSBuZWVkIHRvIGRvIGlzIG5vdGUgdGhh dCBpdHMgb2JqZWN0cyBhcmUgbm8gbG9uZ2VyIHJlZmVyZW5jZWQgYnkKKyAgICAgdGhlIGJhdG9u LiAgKi8KKyAgUHlfWERFQ1JFRihpYi0+YmF0b24pOworCisjaWZkZWYgU1ZOX0RFQlVHCisgIGli LT5lZGl0b3IgPSBpYi0+YmF0b24gPSBOVUxMOworI2VuZGlmCisKKyAgZXJyID0gU1ZOX05PX0VS Uk9SOworCisgZmluaXNoZWQ6CisgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOworICBy ZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3ZuX2Vycm9yX3QgKmNsb3NlX2VkaXQodm9pZCAqZWRp dF9iYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29s KQoreworICByZXR1cm4gY2xvc2VfYmF0b24oZWRpdF9iYXRvbiwgImNsb3NlX2VkaXQiKTsKK30K Kworc3RhdGljIHN2bl9lcnJvcl90ICphYm9ydF9lZGl0KHZvaWQgKmVkaXRfYmF0b24sCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgcmV0dXJu IGNsb3NlX2JhdG9uKGVkaXRfYmF0b24sICJhYm9ydF9lZGl0Iik7Cit9CisKK3ZvaWQgc3ZuX3N3 aWdfcHlfbWFrZV9lZGl0b3IoY29uc3Qgc3ZuX2RlbHRhX2VkaXRvcl90ICoqZWRpdG9yLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoqZWRpdF9iYXRvbiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKnB5X2VkaXRvciwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgc3ZuX2RlbHRhX2VkaXRvcl90ICp0 aHVua19lZGl0b3IgPSBzdm5fZGVsdGFfZGVmYXVsdF9lZGl0b3IgKHBvb2wpOworICAKKyAgdGh1 bmtfZWRpdG9yLT5zZXRfdGFyZ2V0X3JldmlzaW9uID0gc2V0X3RhcmdldF9yZXZpc2lvbjsKKyAg dGh1bmtfZWRpdG9yLT5vcGVuX3Jvb3QgPSBvcGVuX3Jvb3Q7CisgIHRodW5rX2VkaXRvci0+ZGVs ZXRlX2VudHJ5ID0gZGVsZXRlX2VudHJ5OworICB0aHVua19lZGl0b3ItPmFkZF9kaXJlY3Rvcnkg PSBhZGRfZGlyZWN0b3J5OworICB0aHVua19lZGl0b3ItPm9wZW5fZGlyZWN0b3J5ID0gb3Blbl9k aXJlY3Rvcnk7CisgIHRodW5rX2VkaXRvci0+Y2hhbmdlX2Rpcl9wcm9wID0gY2hhbmdlX2Rpcl9w cm9wOworICB0aHVua19lZGl0b3ItPmNsb3NlX2RpcmVjdG9yeSA9IGNsb3NlX2RpcmVjdG9yeTsK KyAgdGh1bmtfZWRpdG9yLT5hZGRfZmlsZSA9IGFkZF9maWxlOworICB0aHVua19lZGl0b3ItPm9w ZW5fZmlsZSA9IG9wZW5fZmlsZTsKKyAgdGh1bmtfZWRpdG9yLT5hcHBseV90ZXh0ZGVsdGEgPSBh cHBseV90ZXh0ZGVsdGE7CisgIHRodW5rX2VkaXRvci0+Y2hhbmdlX2ZpbGVfcHJvcCA9IGNoYW5n ZV9maWxlX3Byb3A7CisgIHRodW5rX2VkaXRvci0+Y2xvc2VfZmlsZSA9IGNsb3NlX2ZpbGU7Cisg IHRodW5rX2VkaXRvci0+Y2xvc2VfZWRpdCA9IGNsb3NlX2VkaXQ7CisgIHRodW5rX2VkaXRvci0+ YWJvcnRfZWRpdCA9IGFib3J0X2VkaXQ7CisKKyAgKmVkaXRvciA9IHRodW5rX2VkaXRvcjsKKyAg KmVkaXRfYmF0b24gPSBtYWtlX2JhdG9uKHBvb2wsIHB5X2VkaXRvciwgTlVMTCk7Cit9CisKKwor DAorLyoqKiBPdGhlciBXcmFwcGVycyBmb3IgU1ZOIEZ1bmN0aW9ucyAqKiovCisKKworYXByX2Zp bGVfdCAqc3ZuX3N3aWdfcHlfbWFrZV9maWxlIChQeU9iamVjdCAqcHlfZmlsZSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgYXByX2Zp bGVfdCAqYXByX2ZpbGUgPSBOVUxMOworICBhcHJfc3RhdHVzX3QgYXByX2VycjsKKworICBpZiAo cHlfZmlsZSA9PSBOVUxMIHx8IHB5X2ZpbGUgPT0gUHlfTm9uZSkKKyAgICByZXR1cm4gTlVMTDsK KworICBpZiAoUHlTdHJpbmdfQ2hlY2sgKHB5X2ZpbGUpKQorICAgIHsKKyAgICAgIC8qIGlucHV0 IGlzIGEgcGF0aCAtLSBqdXN0IG9wZW4gYW4gYXByX2ZpbGVfdCAqLworICAgICAgY2hhciogZm5h bWUgPSBQeVN0cmluZ19BU19TVFJJTkcgKHB5X2ZpbGUpOworICAgICAgYXByX2VyciA9IGFwcl9m aWxlX29wZW4gKCZhcHJfZmlsZSwgZm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBBUFJfQ1JFQVRFIHwgQVBSX1JFQUQgfCBBUFJfV1JJVEUsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBBUFJfT1NfREVGQVVMVCwgcG9vbCk7CisgICAgICBpZiAoYXByX2VycikKKyAg ICAgICAgeworICAgICAgICAgIGNoYXIgYnVmWzI1Nl07CisgICAgICAgICAgYXByX3N0cmVycm9y IChhcHJfZXJyLCBidWYsIHNpemVvZihidWYpKTsKKyAgICAgICAgICBQeUVycl9Gb3JtYXQgKFB5 RXhjX0lPRXJyb3IsICJhcHJfZmlsZV9vcGVuIGZhaWxlZDogJXM6ICclcyciLAorICAgICAgICAg ICAgICAgICAgICAgICAgYnVmLCBmbmFtZSk7CisgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAg ICAgIH0KKyAgICB9CisgIGVsc2UgaWYgKFB5RmlsZV9DaGVjayAocHlfZmlsZSkpCisgICAgewor ICAgICAgRklMRSAqZmlsZTsKKyAgICAgIGFwcl9vc19maWxlX3Qgb3NmaWxlOworCisgICAgICAv KiBpbnB1dCBpcyBhIGZpbGUgb2JqZWN0IC0tIGNvbnZlcnQgdG8gYXByX2ZpbGVfdCAqLworICAg ICAgZmlsZSA9IFB5RmlsZV9Bc0ZpbGUocHlfZmlsZSk7CisjaWZkZWYgV0lOMzIKKyAgICAgIG9z ZmlsZSA9IChhcHJfb3NfZmlsZV90KV9nZXRfb3NmaGFuZGxlKF9maWxlbm8oZmlsZSkpOworI2Vs c2UKKyAgICAgIG9zZmlsZSA9IChhcHJfb3NfZmlsZV90KWZpbGVubyhmaWxlKTsKKyNlbmRpZgor ICAgICAgYXByX2VyciA9IGFwcl9vc19maWxlX3B1dCAoJmFwcl9maWxlLCAmb3NmaWxlLCBPX0NS RUFUIHwgT19XUk9OTFksIHBvb2wpOworICAgICAgaWYgKGFwcl9lcnIpCisgICAgICAgIHsKKyAg ICAgICAgICBjaGFyIGJ1ZlsyNTZdOworICAgICAgICAgIGFwcl9zdHJlcnJvciAoYXByX2Vyciwg YnVmLCBzaXplb2YoYnVmKSk7CisgICAgICAgICAgUHlFcnJfRm9ybWF0IChQeUV4Y19JT0Vycm9y LCAiYXByX29zX2ZpbGVfcHV0IGZhaWxlZDogJXMiLCBidWYpOworICAgICAgICAgIHJldHVybiBO VUxMOworICAgICAgICB9CisgICAgfQorICByZXR1cm4gYXByX2ZpbGU7Cit9CisKKworc3RhdGlj IHN2bl9lcnJvcl90ICoKK3JlYWRfaGFuZGxlcl9weWlvICh2b2lkICpiYXRvbiwgY2hhciAqYnVm ZmVyLCBhcHJfc2l6ZV90ICpsZW4pCit7CisgIFB5T2JqZWN0ICpyZXN1bHQ7CisgIFB5T2JqZWN0 ICpweV9pbyA9IGJhdG9uOworICBhcHJfc2l6ZV90IGJ5dGVzOworICBzdm5fZXJyb3JfdCAqZXJy ID0gU1ZOX05PX0VSUk9SOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworICBp ZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxNZXRob2QocHlfaW8sIChjaGFyICopInJlYWQiLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikiaSIsICpsZW4pKSA9 PSBOVUxMKQorICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOwor ICAgIH0KKyAgZWxzZSBpZiAoUHlTdHJpbmdfQ2hlY2socmVzdWx0KSkKKyAgICB7CisgICAgICBi eXRlcyA9IFB5U3RyaW5nX0dFVF9TSVpFKHJlc3VsdCk7CisgICAgICBpZiAoYnl0ZXMgPiAqbGVu KQorICAgICAgICB7CisgICAgICAgICAgZXJyID0gY2FsbGJhY2tfYmFkX3JldHVybl9lcnJvcigi VG9vIG1hbnkgYnl0ZXMiKTsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICB7CisgICAg ICAgICAgLyogV3JpdGViYWNrLCBpbiBjYXNlIHRoaXMgd2FzIGEgc2hvcnQgcmVhZCwgaW5kaWNh dGluZyBFT0YgKi8KKyAgICAgICAgICAqbGVuID0gYnl0ZXM7CisgICAgICAgICAgbWVtY3B5KGJ1 ZmZlciwgUHlTdHJpbmdfQVNfU1RSSU5HKHJlc3VsdCksICpsZW4pOworICAgICAgICB9CisgICAg fQorICBlbHNlCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfYmFkX3JldHVybl9lcnJvcigi Tm90IGEgc3RyaW5nIik7CisgICAgfQorICBQeV9YREVDUkVGKHJlc3VsdCk7CisgIHN2bl9zd2ln X3B5X3JlbGVhc2VfcHlfbG9jaygpOworCisgIHJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzdm5f ZXJyb3JfdCAqCit3cml0ZV9oYW5kbGVyX3B5aW8gKHZvaWQgKmJhdG9uLCBjb25zdCBjaGFyICpk YXRhLCBhcHJfc2l6ZV90ICpsZW4pCit7CisgIFB5T2JqZWN0ICpyZXN1bHQ7CisgIFB5T2JqZWN0 ICpweV9pbyA9IGJhdG9uOworICBzdm5fZXJyb3JfdCAqZXJyID0gU1ZOX05PX0VSUk9SOworCisg IGlmIChkYXRhICE9IE5VTEwpCisgICAgeworICAgICAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9s b2NrKCk7CisgICAgICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxNZXRob2QocHlfaW8sIChj aGFyICopIndyaXRlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo Y2hhciAqKSJzIyIsIGRhdGEsICpsZW4pKSA9PSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAg ZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7CisgICAgICAgIH0KKyAgICAgIFB5X1hE RUNSRUYocmVzdWx0KTsKKyAgICAgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOworICAg IH0KKworICByZXR1cm4gZXJyOworfQorCitzdm5fc3RyZWFtX3QgKgorc3ZuX3N3aWdfcHlfbWFr ZV9zdHJlYW0gKFB5T2JqZWN0ICpweV9pbywgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgc3ZuX3N0 cmVhbV90ICpzdHJlYW07CisKKyAgLyogQm9ycm93IHRoZSBjYWxsZXIncyByZWZlcmVuY2UgdG8g cHlfaW8gLSB0aGlzIGlzIHNhZmUgb25seSBiZWNhdXNlIHRoZQorICAgKiBjYWxsZXIgbXVzdCBo YXZlIGEgcmVmZXJlbmNlIGluIG9yZGVyIHRvIHBhc3MgdGhlIG9iamVjdCBpbnRvIHRoZQorICAg KiBiaW5kaW5ncywgYW5kIHdlIHdpbGwgYmUgZmluaXNoZWQgd2l0aCB0aGUgcHlfaW8gb2JqZWN0 IGJlZm9yZSB3ZSByZXR1cm4KKyAgICogdG8gcHl0aG9uLiBJLmUuIERPIE5PVCBTVE9SRSBBV0FZ IFRIRSBSRVNVTFRJTkcgc3ZuX3N0cmVhbV90ICogZm9yIHVzZQorICAgKiBvdmVyIG11bHRpcGxl IGNhbGxzIGludG8gdGhlIGJpbmRpbmdzLiAqLworICBzdHJlYW0gPSBzdm5fc3RyZWFtX2NyZWF0 ZSAocHlfaW8sIHBvb2wpOworICBzdm5fc3RyZWFtX3NldF9yZWFkIChzdHJlYW0sIHJlYWRfaGFu ZGxlcl9weWlvKTsKKyAgc3ZuX3N0cmVhbV9zZXRfd3JpdGUgKHN0cmVhbSwgd3JpdGVfaGFuZGxl cl9weWlvKTsKKworICByZXR1cm4gc3RyZWFtOworfQorCisKK3ZvaWQgc3ZuX3N3aWdfcHlfbm90 aWZ5X2Z1bmModm9pZCAqYmF0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IGNoYXIgKnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2bl93Y19ub3RpZnlf YWN0aW9uX3QgYWN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdm5fbm9kZV9r aW5kX3Qga2luZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbWlt ZV90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdm5fd2Nfbm90aWZ5X3N0YXRl X3QgY29udGVudF9zdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX3djX25v dGlmeV9zdGF0ZV90IHByb3Bfc3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2 bl9yZXZudW1fdCByZXZpc2lvbikKK3sKKyAgUHlPYmplY3QgKmZ1bmN0aW9uID0gYmF0b247Cisg IFB5T2JqZWN0ICpyZXN1bHQ7CisgIHN2bl9lcnJvcl90ICplcnIgPSBTVk5fTk9fRVJST1I7CisK KyAgaWYgKGZ1bmN0aW9uID09IE5VTEwgfHwgZnVuY3Rpb24gPT0gUHlfTm9uZSkKKyAgICByZXR1 cm47CisKKyAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7CisgIGlmICgocmVzdWx0ID0g UHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGZ1bmN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoY2hhciAqKSIoc2lpc2lpaSkiLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBwYXRoLCBhY3Rpb24sIGtpbmQsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG1pbWVfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29udGVudF9zdGF0ZSwgcHJvcF9zdGF0ZSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcmV2aXNpb24pKSA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVy ciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAg ICAgIC8qIFRoZSBjYWxsYmFjayBzaG91bGRuJ3QgYmUgcmV0dXJuaW5nIGFueXRoaW5nLiAqLwor ICAgICAgaWYgKHJlc3VsdCAhPSBQeV9Ob25lKQorICAgICAgICBlcnIgPSBjYWxsYmFja19iYWRf cmV0dXJuX2Vycm9yKCJOb3QgTm9uZSIpOworICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAg fQorCisgIC8qIE91ciBlcnJvciBoYXMgbm8gcGxhY2UgdG8gZ28uIDotKCAqLworICBpZiAoZXJy KQorICAgIHN2bl9lcnJvcl9jbGVhcihlcnIpOworCisgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlf bG9jaygpOworfQorCisKK3ZvaWQgc3ZuX3N3aWdfcHlfbm90aWZ5X2Z1bmMyKHZvaWQgKmJhdG9u LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3ZuX3djX25vdGlmeV90ICpu b3RpZnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKQor eworICBQeU9iamVjdCAqZnVuY3Rpb24gPSBiYXRvbjsKKyAgUHlPYmplY3QgKnJlc3VsdDsKKyAg c3ZuX2Vycm9yX3QgKmVyciA9IFNWTl9OT19FUlJPUjsKKworICBpZiAoZnVuY3Rpb24gPT0gTlVM TCB8fCBmdW5jdGlvbiA9PSBQeV9Ob25lKQorICAgIHJldHVybjsKKworICBzdm5fc3dpZ19weV9h Y3F1aXJlX3B5X2xvY2soKTsKKworICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlv bihmdW5jdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIg KikiKE8mTyYpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9v Yl93Y19ub3RpZnksIG5vdGlmeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbWFrZV9vYl9wb29sLCBwb29sKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBjYWxs YmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICAvKiBU aGUgY2FsbGJhY2sgc2hvdWxkbid0IGJlIHJldHVybmluZyBhbnl0aGluZy4gKi8KKyAgICAgIGlm IChyZXN1bHQgIT0gUHlfTm9uZSkKKyAgICAgICAgZXJyID0gY2FsbGJhY2tfYmFkX3JldHVybl9l cnJvcigiTm90IE5vbmUiKTsKKyAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgIH0KKworICAv KiBPdXIgZXJyb3IgaGFzIG5vIHBsYWNlIHRvIGdvLiA6LSggKi8KKyAgaWYgKGVycikKKyAgICBz dm5fZXJyb3JfY2xlYXIoZXJyKTsKKworICBzdm5fc3dpZ19weV9yZWxlYXNlX3B5X2xvY2soKTsK K30KKwordm9pZCBzdm5fc3dpZ19weV9zdGF0dXNfZnVuYyh2b2lkICpiYXRvbiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGF0aCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3ZuX3djX3N0YXR1c190ICpzdGF0dXMpCit7CisgIFB5T2JqZWN0ICpmdW5j dGlvbiA9IGJhdG9uOworICBQeU9iamVjdCAqcmVzdWx0OworICBzdm5fZXJyb3JfdCAqZXJyID0g U1ZOX05PX0VSUk9SOworCisgIGlmIChmdW5jdGlvbiA9PSBOVUxMIHx8IGZ1bmN0aW9uID09IFB5 X05vbmUpCisgICAgcmV0dXJuOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOwor ICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihmdW5jdGlvbiwgKGNoYXIgKiki c08mIiwgcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9v Yl93Y19zdGF0dXMsIHN0YXR1cykpID09IE5VTEwpCisgICAgeworICAgICAgZXJyID0gY2FsbGJh Y2tfZXhjZXB0aW9uX2Vycm9yKCk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgLyogVGhl IGNhbGxiYWNrIHNob3VsZG4ndCBiZSByZXR1cm5pbmcgYW55dGhpbmcuICovCisgICAgICBpZiAo cmVzdWx0ICE9IFB5X05vbmUpCisgICAgICAgIGVyciA9IGNhbGxiYWNrX2JhZF9yZXR1cm5fZXJy b3IoIk5vdCBOb25lIik7CisgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICB9CisKKyAgLyog T3VyIGVycm9yIGhhcyBubyBwbGFjZSB0byBnby4gOi0oICovCisgIGlmIChlcnIpCisgICAgc3Zu X2Vycm9yX2NsZWFyKGVycik7CisKKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7Cit9 CisKKworc3ZuX2Vycm9yX3QgKnN2bl9zd2lnX3B5X2NhbmNlbF9mdW5jKHZvaWQgKmNhbmNlbF9i YXRvbikKK3sKKyAgUHlPYmplY3QgKmZ1bmN0aW9uID0gY2FuY2VsX2JhdG9uOworICBQeU9iamVj dCAqcmVzdWx0OworICBzdm5fZXJyb3JfdCAqZXJyID0gU1ZOX05PX0VSUk9SOworCisgIGlmIChm dW5jdGlvbiA9PSBOVUxMIHx8IGZ1bmN0aW9uID09IFB5X05vbmUpCisgICAgcmV0dXJuIFNWTl9O T19FUlJPUjsKKworICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xvY2soKTsKKyAgaWYgKChyZXN1 bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oZnVuY3Rpb24sIE5VTEwpKSA9PSBOVUxMKQorICAg IHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgIH0KKyAgZWxz ZQorICAgIHsKKyAgICAgIGlmIChQeUludF9DaGVjayhyZXN1bHQpKQorICAgICAgICB7CisgICAg ICAgICAgaWYgKFB5SW50X0FzTG9uZyhyZXN1bHQpKQorICAgICAgICAgICAgZXJyID0gc3ZuX2Vy cm9yX2NyZWF0ZShTVk5fRVJSX0NBTkNFTExFRCwgMCwgTlVMTCk7CisgICAgICAgIH0KKyAgICAg IGVsc2UgaWYgKFB5TG9uZ19DaGVjayhyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgaWYg KFB5TG9uZ19Bc0xvbmcocmVzdWx0KSkKKyAgICAgICAgICAgIGVyciA9IHN2bl9lcnJvcl9jcmVh dGUoU1ZOX0VSUl9DQU5DRUxMRUQsIDAsIE5VTEwpOworICAgICAgICB9CisgICAgICBlbHNlIGlm IChyZXN1bHQgIT0gUHlfTm9uZSkKKyAgICAgICAgeworICAgICAgICAgIGVyciA9IGNhbGxiYWNr X2JhZF9yZXR1cm5fZXJyb3IoIk5vdCBhbiBpbnRlZ2VyIG9yIE5vbmUiKTsKKyAgICAgICAgfQor ICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgfQorICBzdm5fc3dpZ19weV9yZWxlYXNlX3B5 X2xvY2soKTsKKyAgcmV0dXJuIGVycjsKK30KKworc3ZuX2Vycm9yX3QgKnN2bl9zd2lnX3B5X2Zz X2dldF9sb2Nrc19mdW5jICh2b2lkICpiYXRvbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHN2bl9sb2NrX3QgKmxvY2ssCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpCit7CisgIFB5T2JqZWN0 ICpmdW5jdGlvbiA9IGJhdG9uOworICBQeU9iamVjdCAqcmVzdWx0OworICBzdm5fZXJyb3JfdCAq ZXJyID0gU1ZOX05PX0VSUk9SOworCisgIGlmIChmdW5jdGlvbiA9PSBOVUxMIHx8IGZ1bmN0aW9u ID09IFB5X05vbmUpCisgICAgcmV0dXJuIFNWTl9OT19FUlJPUjsKKworICBzdm5fc3dpZ19weV9h Y3F1aXJlX3B5X2xvY2soKTsKKworICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlv bihmdW5jdGlvbiwgKGNoYXIgKikiTyZPJiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIG1ha2Vfb2JfbG9jaywgbG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbWFrZV9vYl9wb29sLCBwb29sKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICBl cnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICB9CisgIGVsc2UKKyAgICB7Cisg ICAgICAvKiBUaGUgY2FsbGJhY2sgc2hvdWxkbid0IGJlIHJldHVybmluZyBhbnl0aGluZy4gKi8K KyAgICAgIGlmIChyZXN1bHQgIT0gUHlfTm9uZSkKKyAgICAgICAgZXJyID0gY2FsbGJhY2tfYmFk X3JldHVybl9lcnJvcigiTm90IE5vbmUiKTsKKyAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAg IH0KKworICBzdm5fc3dpZ19weV9yZWxlYXNlX3B5X2xvY2soKTsKKyAgcmV0dXJuIGVycjsKK30K Kworc3ZuX2Vycm9yX3QgKnN2bl9zd2lnX3B5X2dldF9jb21taXRfbG9nX2Z1bmMoY29uc3QgY2hh ciAqKmxvZ19tc2csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBjaGFyICoqdG1wX2ZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBhcHJfYXJyYXlfaGVhZGVyX3QgKmNvbW1pdF9pdGVtcywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmJhdG9uLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCkK K3sKKyAgUHlPYmplY3QgKmZ1bmN0aW9uID0gYmF0b247CisgIFB5T2JqZWN0ICpyZXN1bHQ7Cisg IFB5T2JqZWN0ICpjbXRfaXRlbXM7CisgIHN2bl9lcnJvcl90ICplcnI7CisKKyAgKmxvZ19tc2cg PSBOVUxMOworICAqdG1wX2ZpbGUgPSBOVUxMOworCisgIC8qICMjIyB0b2RvOiBmb3Igbm93LCBq dXN0IGlnbm9yZSB0aGUgd2hvbGUgdG1wX2ZpbGUgdGhpbmcuICAqLworCisgIGlmICgoZnVuY3Rp b24gPT0gTlVMTCkgfHwgKGZ1bmN0aW9uID09IFB5X05vbmUpKQorICAgIHJldHVybiBTVk5fTk9f RVJST1I7CisKKyAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7CisKKyAgaWYgKGNvbW1p dF9pdGVtcykKKyAgICB7CisgICAgICBjbXRfaXRlbXMgPSBjb21taXRfaXRlbV9hcnJheV90b19s aXN0KGNvbW1pdF9pdGVtcyk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgY210X2l0ZW1z ID0gUHlfTm9uZTsKKyAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKKyAgICB9CisKKyAgaWYgKChy ZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oZnVuY3Rpb24sCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopIk9PJiIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNtdF9pdGVtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbWFrZV9vYl9wb29sLCBwb29sKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICBQ eV9ERUNSRUYoY210X2l0ZW1zKTsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJv cigpOworICAgICAgZ290byBmaW5pc2hlZDsKKyAgICB9CisKKyAgUHlfREVDUkVGKGNtdF9pdGVt cyk7CisKKyAgaWYgKHJlc3VsdCA9PSBQeV9Ob25lKQorICAgIHsKKyAgICAgIFB5X0RFQ1JFRihy ZXN1bHQpOworICAgICAgKmxvZ19tc2cgPSBOVUxMOworICAgICAgZXJyID0gU1ZOX05PX0VSUk9S OworICAgIH0KKyAgZWxzZSBpZiAoUHlTdHJpbmdfQ2hlY2socmVzdWx0KSkKKyAgICB7CisgICAg ICAqbG9nX21zZyA9IGFwcl9wc3RyZHVwKHBvb2wsIFB5U3RyaW5nX0FTX1NUUklORyhyZXN1bHQp KTsKKyAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgICAgZXJyID0gU1ZOX05PX0VSUk9SOwor ICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgICAgZXJy ID0gY2FsbGJhY2tfYmFkX3JldHVybl9lcnJvcigiTm90IGEgc3RyaW5nIik7CisgICAgfQorCisg ZmluaXNoZWQ6CisgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOworICByZXR1cm4gZXJy OworfQorCisKK3N2bl9lcnJvcl90ICpzdm5fc3dpZ19weV9yZXBvc19hdXRoel9mdW5jKHN2bl9i b29sZWFuX3QgKmFsbG93ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzdm5fZnNfcm9vdF90ICpyb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgY2hhciAqcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHZvaWQgKmJhdG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgUHlPYmplY3QgKmZ1bmN0aW9u ID0gYmF0b247CisgIFB5T2JqZWN0ICpyZXN1bHQ7CisgIFB5T2JqZWN0ICpweV9wb29sLCAqcHlf cm9vdDsKKyAgc3ZuX2Vycm9yX3QgKmVyciA9IFNWTl9OT19FUlJPUjsKKworICAqYWxsb3dlZCA9 IFRSVUU7CisKKyAgaWYgKGZ1bmN0aW9uID09IE5VTEwgfHwgZnVuY3Rpb24gPT0gUHlfTm9uZSkK KyAgICByZXR1cm4gU1ZOX05PX0VSUk9SOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9j aygpOworCisgIHB5X3Bvb2wgPSBtYWtlX29iX3Bvb2wocG9vbCk7CisgIGlmIChweV9wb29sID09 IE5VTEwpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7Cisg ICAgICBnb3RvIGZpbmlzaGVkOworICAgIH0KKyAgcHlfcm9vdCA9IG1ha2Vfb2JfZnNfcm9vdChy b290LCBweV9wb29sKTsKKyAgaWYgKHB5X3Jvb3QgPT0gTlVMTCkKKyAgICB7CisgICAgICBQeV9E RUNSRUYocHlfcG9vbCk7CisgICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsK KyAgICAgIGdvdG8gZmluaXNoZWQ7CisgICAgfQorCisgIGlmICgocmVzdWx0ID0gUHlPYmplY3Rf Q2FsbEZ1bmN0aW9uKGZ1bmN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoY2hhciAqKSJPc08iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBweV9yb290LCBwYXRoLCBweV9wb29sKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBj YWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBp ZiAoUHlJbnRfQ2hlY2socmVzdWx0KSkKKyAgICAgICAgKmFsbG93ZWQgPSBQeUludF9Bc0xvbmco cmVzdWx0KTsKKyAgICAgIGVsc2UgaWYgKFB5TG9uZ19DaGVjayhyZXN1bHQpKQorICAgICAgICAq YWxsb3dlZCA9IFB5TG9uZ19Bc0xvbmcocmVzdWx0KTsKKyAgICAgIGVsc2UKKyAgICAgICAgZXJy ID0gY2FsbGJhY2tfYmFkX3JldHVybl9lcnJvcigiTm90IGFuIGludGVnZXIiKTsKKyAgICAgIFB5 X0RFQ1JFRihyZXN1bHQpOworICAgIH0KKyAgUHlfREVDUkVGKHB5X3Jvb3QpOworICBQeV9ERUNS RUYocHlfcG9vbCk7CitmaW5pc2hlZDoKKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7 CisgIHJldHVybiBlcnI7Cit9CisKKworc3ZuX2Vycm9yX3QgKnN2bl9zd2lnX3B5X3JlcG9zX2hp c3RvcnlfZnVuYyh2b2lkICpiYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgY2hhciAqcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3ZuX3Jldm51bV90IHJldmlzaW9uLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKQoreworICBQeU9i amVjdCAqZnVuY3Rpb24gPSBiYXRvbjsKKyAgUHlPYmplY3QgKnJlc3VsdDsKKyAgc3ZuX2Vycm9y X3QgKmVyciA9IFNWTl9OT19FUlJPUjsKKworICBpZiAoZnVuY3Rpb24gPT0gTlVMTCB8fCBmdW5j dGlvbiA9PSBQeV9Ob25lKQorICAgIHJldHVybiBTVk5fTk9fRVJST1I7CisKKyAgc3ZuX3N3aWdf cHlfYWNxdWlyZV9weV9sb2NrKCk7CisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0 aW9uKGZ1bmN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hh ciAqKSJzbE8mIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCwg cmV2aXNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vfb2Jf cG9vbCwgcG9vbCkpID09IE5VTEwpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0 aW9uX2Vycm9yKCk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgaWYgKHJlc3VsdCAhPSBQ eV9Ob25lKQorICAgICAgICBlcnIgPSBjYWxsYmFja19iYWRfcmV0dXJuX2Vycm9yKCJOb3QgTm9u ZSIpOworICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgfQorICBzdm5fc3dpZ19weV9yZWxl YXNlX3B5X2xvY2soKTsKKyAgcmV0dXJuIGVycjsKK30KKworCitzdm5fZXJyb3JfdCAqc3ZuX3N3 aWdfcHlfbG9nX3JlY2VpdmVyKHZvaWQgKmJhdG9uLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBhcHJfaGFzaF90ICpjaGFuZ2VkX3BhdGhzLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzdm5fcmV2bnVtX3QgcmV2LAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphdXRob3IsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRhdGUsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm1zZywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgUHlPYmplY3Qg KnJlY2VpdmVyID0gYmF0b247CisgIFB5T2JqZWN0ICpyZXN1bHQsICpweV9wb29sOworICBQeU9i amVjdCAqY2hwYXRoczsKKyAgc3ZuX2Vycm9yX3QgKmVyciA9IFNWTl9OT19FUlJPUjsKKworICBp ZiAoKHJlY2VpdmVyID09IE5VTEwpIHx8IChyZWNlaXZlciA9PSBQeV9Ob25lKSkKKyAgICByZXR1 cm4gU1ZOX05PX0VSUk9SOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisg IHB5X3Bvb2wgPSBtYWtlX29iX3Bvb2wocG9vbCk7CisgIGlmIChweV9wb29sID09IE5VTEwpCisg ICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7CisgICAgICBnb3Rv IGZpbmlzaGVkOworICAgIH0KKworICBpZiAoY2hhbmdlZF9wYXRocykKKyAgICB7CisgICAgICBj aHBhdGhzID0gY29udmVydF9oYXNoKGNoYW5nZWRfcGF0aHMsIGNvbnZlcnRfbG9nX2NoYW5nZWRf cGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCk7CisgICAgfQor ICBlbHNlCisgICAgeworICAgICAgY2hwYXRocyA9IFB5X05vbmU7CisgICAgICBQeV9JTkNSRUYo UHlfTm9uZSk7CisgICAgfQorCisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9u KHJlY2VpdmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAq KSJPbHNzc08iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHBhdGhz LCByZXYsIGF1dGhvciwgZGF0ZSwgbXNnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBweV9wb29sKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFja19l eGNlcHRpb25fZXJyb3IoKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBpZiAocmVzdWx0 ICE9IFB5X05vbmUpCisgICAgICAgIGVyciA9IGNhbGxiYWNrX2JhZF9yZXR1cm5fZXJyb3IoIk5v dCBOb25lIik7CisgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICB9CisKKyAgUHlfREVDUkVG KGNocGF0aHMpOworICBQeV9ERUNSRUYocHlfcG9vbCk7CitmaW5pc2hlZDoKKyAgc3ZuX3N3aWdf cHlfcmVsZWFzZV9weV9sb2NrKCk7CisgIHJldHVybiBlcnI7Cit9CisKK3N2bl9lcnJvcl90ICpz dm5fc3dpZ19weV9pbmZvX3JlY2VpdmVyX2Z1bmModm9pZCAqYmF0b24sCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdGgsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN2bl9pbmZvX3QgKmlu Zm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29s X3QgKnBvb2wpCit7CisgIFB5T2JqZWN0ICpyZWNlaXZlciA9IGJhdG9uOworICBQeU9iamVjdCAq cmVzdWx0OworICBzdm5fZXJyb3JfdCAqZXJyID0gU1ZOX05PX0VSUk9SOworCisgIGlmICgocmVj ZWl2ZXIgPT0gTlVMTCkgfHwgKHJlY2VpdmVyID09IFB5X05vbmUpKQorICAgIHJldHVybiBTVk5f Tk9fRVJST1I7CisKKyAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7CisKKyAgaWYgKChy ZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24ocmVjZWl2ZXIsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopInNPJk8mIiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcGF0aCwgbWFrZV9vYl9pbmZvLCBpbmZvLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxM KQorICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgIH0K KyAgZWxzZQorICAgIHsKKyAgICAgIGlmIChyZXN1bHQgIT0gUHlfTm9uZSkKKyAgICAgICAgZXJy ID0gY2FsbGJhY2tfYmFkX3JldHVybl9lcnJvcigiTm90IE5vbmUiKTsKKyAgICAgIFB5X0RFQ1JF RihyZXN1bHQpOworICAgIH0KKworICBzdm5fc3dpZ19weV9yZWxlYXNlX3B5X2xvY2soKTsKKwor ICByZXR1cm4gZXJyOworfQorCitzdm5fZXJyb3JfdCAqc3ZuX3N3aWdfcHlfY2xpZW50X2JsYW1l X3JlY2VpdmVyX2Z1bmModm9pZCAqYmF0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgYXByX2ludDY0X3QgbGluZV9ubywKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdm5fcmV2bnVtX3QgcmV2 aXNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgY2hhciAqYXV0aG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRhdGUsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbGluZSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90 ICpwb29sKQoreworICBQeU9iamVjdCAqcmVjZWl2ZXIgPSBiYXRvbjsKKyAgUHlPYmplY3QgKnJl c3VsdDsKKyAgc3ZuX2Vycm9yX3QgKmVyciA9IFNWTl9OT19FUlJPUjsKKworICBpZiAoKHJlY2Vp dmVyID09IE5VTEwpIHx8IChyZWNlaXZlciA9PSBQeV9Ob25lKSkKKyAgICByZXR1cm4gU1ZOX05P X0VSUk9SOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisgIGlmICgocmVz dWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKHJlY2VpdmVyLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoY2hhciAqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoU1ZOX0FQUl9JTlQ2NF9UX1BZQ0ZNVCAibHNzc08mIiksCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVfbm8sIHJldmlzaW9uLCBhdXRob3IsIGRh dGUsIGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vfb2Jf cG9vbCwgcG9vbCkpID09IE5VTEwpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0 aW9uX2Vycm9yKCk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgaWYgKHJlc3VsdCAhPSBQ eV9Ob25lKQorICAgICAgICBlcnIgPSBjYWxsYmFja19iYWRfcmV0dXJuX2Vycm9yKCJOb3QgTm9u ZSIpOworICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgfQorCisgIHN2bl9zd2lnX3B5X3Jl bGVhc2VfcHlfbG9jaygpOworICByZXR1cm4gZXJyOworfQorCisKK3N2bl9lcnJvcl90ICoKK3N2 bl9zd2lnX3B5X2F1dGhfc2ltcGxlX3Byb21wdF9mdW5jIChzdm5fYXV0aF9jcmVkX3NpbXBsZV90 ICoqY3JlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpiYXRv biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpyZWFs bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp1c2Vy bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdm5fYm9vbGVhbl90 IG1heV9zYXZlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29s X3QgKnBvb2wpCit7CisgIFB5T2JqZWN0ICpmdW5jdGlvbiA9IGJhdG9uOworICBQeU9iamVjdCAq cmVzdWx0OworICBzdm5fYXV0aF9jcmVkX3NpbXBsZV90ICpjcmVkcyA9IE5VTEw7CisgIHN2bl9l cnJvcl90ICplcnIgPSBTVk5fTk9fRVJST1I7CisKKyAgaWYgKChmdW5jdGlvbiA9PSBOVUxMKSB8 fCAoZnVuY3Rpb24gPT0gUHlfTm9uZSkpCisgICAgcmV0dXJuIFNWTl9OT19FUlJPUjsKKworICBz dm5fc3dpZ19weV9hY3F1aXJlX3B5X2xvY2soKTsKKworICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0 X0NhbGxGdW5jdGlvbihmdW5jdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGNoYXIgKikic3NsTyYiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICByZWFsbSwgdXNlcm5hbWUsIG1heV9zYXZlLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBtYWtlX29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQorICAgIHsKKyAgICAg IGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgIH0KKyAgZWxzZQorICAgIHsK KyAgICAgIGlmIChyZXN1bHQgIT0gUHlfTm9uZSkKKyAgICAgICAgeworICAgICAgICAgIHN2bl9h dXRoX2NyZWRfc2ltcGxlX3QgKnRtcF9jcmVkcyA9IE5VTEw7CisgICAgICAgICAgaWYgKHN2bl9z d2lnX0NvbnZlcnRQdHJTdHJpbmcocmVzdWx0LCAodm9pZCAqKikmdG1wX2NyZWRzLAorICAgICAg ICAgICAgICAgICJzdm5fYXV0aF9jcmVkX3NpbXBsZV90ICoiKSkKKyAgICAgICAgICAgIHsKKyAg ICAgICAgICAgICAgZXJyID0gdHlwZV9jb252ZXJzaW9uX2Vycm9yKCJzdm5fYXV0aF9jcmVkX3Np bXBsZV90ICoiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7 CisgICAgICAgICAgICAgIGNyZWRzID0gYXByX3BjYWxsb2MocG9vbCwgc2l6ZW9mICgqY3JlZHMp KTsKKyAgICAgICAgICAgICAgY3JlZHMtPnVzZXJuYW1lID0gdG1wX2NyZWRzLT51c2VybmFtZSA/ IFwKKyAgICAgICAgICAgICAgICBhcHJfcHN0cmR1cChwb29sLCB0bXBfY3JlZHMtPnVzZXJuYW1l KSA6IE5VTEw7CisgICAgICAgICAgICAgIGNyZWRzLT5wYXNzd29yZCA9IHRtcF9jcmVkcy0+cGFz c3dvcmQgPyBcCisgICAgICAgICAgICAgICAgYXByX3BzdHJkdXAocG9vbCwgdG1wX2NyZWRzLT5w YXNzd29yZCkgOiBOVUxMOworICAgICAgICAgICAgICBjcmVkcy0+bWF5X3NhdmUgPSB0bXBfY3Jl ZHMtPm1heV9zYXZlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBQeV9ERUNSRUYo cmVzdWx0KTsKKyAgICB9CisgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOworICAqY3Jl ZCA9IGNyZWRzOworICByZXR1cm4gZXJyOworfQorCitzdm5fZXJyb3JfdCAqCitzdm5fc3dpZ19w eV9hdXRoX3VzZXJuYW1lX3Byb21wdF9mdW5jIChzdm5fYXV0aF9jcmVkX3VzZXJuYW1lX3QgKipj cmVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYmF0b24s CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpyZWFs bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2bl9ib29sZWFuX3Qg bWF5X3NhdmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9v bF90ICpwb29sKQoreworICBQeU9iamVjdCAqZnVuY3Rpb24gPSBiYXRvbjsKKyAgUHlPYmplY3Qg KnJlc3VsdDsKKyAgc3ZuX2F1dGhfY3JlZF91c2VybmFtZV90ICpjcmVkcyA9IE5VTEw7CisgIHN2 bl9lcnJvcl90ICplcnIgPSBTVk5fTk9fRVJST1I7CisKKyAgaWYgKChmdW5jdGlvbiA9PSBOVUxM KSB8fCAoZnVuY3Rpb24gPT0gUHlfTm9uZSkpCisgICAgcmV0dXJuIFNWTl9OT19FUlJPUjsKKwor ICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xvY2soKTsKKworICBpZiAoKHJlc3VsdCA9IFB5T2Jq ZWN0X0NhbGxGdW5jdGlvbihmdW5jdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKGNoYXIgKikic2xPJiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHJlYWxtLCBtYXlfc2F2ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbWFrZV9vYl9wb29sLCBwb29sKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBj YWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBp ZiAocmVzdWx0ICE9IFB5X05vbmUpCisgICAgICAgIHsKKyAgICAgICAgICBzdm5fYXV0aF9jcmVk X3VzZXJuYW1lX3QgKnRtcF9jcmVkcyA9IE5VTEw7CisgICAgICAgICAgaWYgKHN2bl9zd2lnX0Nv bnZlcnRQdHJTdHJpbmcocmVzdWx0LCAodm9pZCAqKikmdG1wX2NyZWRzLAorICAgICAgICAgICAg ICAgICJzdm5fYXV0aF9jcmVkX3VzZXJuYW1lX3QgKiIpKQorICAgICAgICAgICAgeworICAgICAg ICAgICAgICBlcnIgPSB0eXBlX2NvbnZlcnNpb25fZXJyb3IoInN2bl9hdXRoX2NyZWRfdXNlcm5h bWVfdCAqIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgewor ICAgICAgICAgICAgICBjcmVkcyA9IGFwcl9wY2FsbG9jKHBvb2wsIHNpemVvZiAoKmNyZWRzKSk7 CisgICAgICAgICAgICAgIGNyZWRzLT51c2VybmFtZSA9IHRtcF9jcmVkcy0+dXNlcm5hbWUgPyBc CisgICAgICAgICAgICAgICAgYXByX3BzdHJkdXAocG9vbCwgdG1wX2NyZWRzLT51c2VybmFtZSkg OiBOVUxMOworICAgICAgICAgICAgICBjcmVkcy0+bWF5X3NhdmUgPSB0bXBfY3JlZHMtPm1heV9z YXZlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBQeV9ERUNSRUYocmVzdWx0KTsK KyAgICB9CisgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOworICAqY3JlZCA9IGNyZWRz OworICByZXR1cm4gZXJyOworfQorCisKK3N2bl9lcnJvcl90ICoKK3N2bl9zd2lnX3B5X2F1dGhf c3NsX3NlcnZlcl90cnVzdF9wcm9tcHRfZnVuYygKKyAgICBzdm5fYXV0aF9jcmVkX3NzbF9zZXJ2 ZXJfdHJ1c3RfdCAqKmNyZWQsCisgICAgdm9pZCAqYmF0b24sCisgICAgY29uc3QgY2hhciAqcmVh bG0sCisgICAgYXByX3VpbnQzMl90IGZhaWx1cmVzLAorICAgIGNvbnN0IHN2bl9hdXRoX3NzbF9z ZXJ2ZXJfY2VydF9pbmZvX3QgKmNlcnRfaW5mbywKKyAgICBzdm5fYm9vbGVhbl90IG1heV9zYXZl LAorICAgIGFwcl9wb29sX3QgKnBvb2wpCit7CisgIFB5T2JqZWN0ICpmdW5jdGlvbiA9IGJhdG9u OworICBQeU9iamVjdCAqcmVzdWx0OworICBzdm5fYXV0aF9jcmVkX3NzbF9zZXJ2ZXJfdHJ1c3Rf dCAqY3JlZHMgPSBOVUxMOworICBzdm5fZXJyb3JfdCAqZXJyID0gU1ZOX05PX0VSUk9SOworCisg IGlmICgoZnVuY3Rpb24gPT0gTlVMTCkgfHwgKGZ1bmN0aW9uID09IFB5X05vbmUpKQorICAgIHJl dHVybiBTVk5fTk9fRVJST1I7CisKKyAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7CisK KyAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oZnVuY3Rpb24sIChjaGFyICop InNsTyZsTyYiLAorICAgICAgICAgICAgICAgICAgcmVhbG0sIGZhaWx1cmVzLCBtYWtlX29iX2F1 dGhfc3NsX3NlcnZlcl9jZXJ0X2luZm8sCisgICAgICAgICAgICAgICAgICBjZXJ0X2luZm8sIG1h eV9zYXZlLCBtYWtlX29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVyciA9 IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAg IGlmIChyZXN1bHQgIT0gUHlfTm9uZSkKKyAgICAgICAgeworICAgICAgICAgIHN2bl9hdXRoX2Ny ZWRfc3NsX3NlcnZlcl90cnVzdF90ICp0bXBfY3JlZHMgPSBOVUxMOworICAgICAgICAgIGlmIChz dm5fc3dpZ19Db252ZXJ0UHRyU3RyaW5nCisgICAgICAgICAgICAgIChyZXN1bHQsICh2b2lkICoq KSZ0bXBfY3JlZHMsCisgICAgICAgICAgICAgICAic3ZuX2F1dGhfY3JlZF9zc2xfc2VydmVyX3Ry dXN0X3QgKiIpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBlcnIgPSB0eXBlX2NvbnZl cnNpb25fZXJyb3IKKyAgICAgICAgICAgICAgICAoInN2bl9hdXRoX2NyZWRfc3NsX3NlcnZlcl90 cnVzdF90ICoiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7 CisgICAgICAgICAgICAgIGNyZWRzID0gYXByX3BjYWxsb2MocG9vbCwgc2l6ZW9mICgqY3JlZHMp KTsKKyAgICAgICAgICAgICAgKmNyZWRzID0gKnRtcF9jcmVkczsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgfQorICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgfQorCisgIHN2bl9zd2lnX3B5 X3JlbGVhc2VfcHlfbG9jaygpOworICAqY3JlZCA9IGNyZWRzOworICByZXR1cm4gZXJyOworfQor Citzdm5fZXJyb3JfdCAqCitzdm5fc3dpZ19weV9hdXRoX3NzbF9jbGllbnRfY2VydF9wcm9tcHRf ZnVuYygKKyAgICBzdm5fYXV0aF9jcmVkX3NzbF9jbGllbnRfY2VydF90ICoqY3JlZCwKKyAgICB2 b2lkICpiYXRvbiwKKyAgICBjb25zdCBjaGFyICpyZWFsbSwKKyAgICBzdm5fYm9vbGVhbl90IG1h eV9zYXZlLAorICAgIGFwcl9wb29sX3QgKnBvb2wpCit7CisgIFB5T2JqZWN0ICpmdW5jdGlvbiA9 IGJhdG9uOworICBQeU9iamVjdCAqcmVzdWx0OworICBzdm5fYXV0aF9jcmVkX3NzbF9jbGllbnRf Y2VydF90ICpjcmVkcyA9IE5VTEw7CisgIHN2bl9lcnJvcl90ICplcnIgPSBTVk5fTk9fRVJST1I7 CisKKyAgaWYgKChmdW5jdGlvbiA9PSBOVUxMKSB8fCAoZnVuY3Rpb24gPT0gUHlfTm9uZSkpCisg ICAgcmV0dXJuIFNWTl9OT19FUlJPUjsKKworICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xvY2so KTsKKworICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihmdW5jdGlvbiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikic2xPJiIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWxtLCBtYXlfc2F2ZSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9vYl9wb29sLCBwb29sKSkgPT0g TlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAg ICB9CisgIGVsc2UKKyAgICB7CisgICAgICBpZiAocmVzdWx0ICE9IFB5X05vbmUpCisgICAgICAg IHsKKyAgICAgICAgICBzdm5fYXV0aF9jcmVkX3NzbF9jbGllbnRfY2VydF90ICp0bXBfY3JlZHMg PSBOVUxMOworICAgICAgICAgIGlmIChzdm5fc3dpZ19Db252ZXJ0UHRyU3RyaW5nCisgICAgICAg ICAgICAgIChyZXN1bHQsICh2b2lkICoqKSZ0bXBfY3JlZHMsCisgICAgICAgICAgICAgICAic3Zu X2F1dGhfY3JlZF9zc2xfY2xpZW50X2NlcnRfdCAqIikpCisgICAgICAgICAgICB7CisgICAgICAg ICAgICAgIGVyciA9IHR5cGVfY29udmVyc2lvbl9lcnJvcigic3ZuX2F1dGhfY3JlZF9zc2xfY2xp ZW50X2NlcnRfdCAqIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAg ICAgeworICAgICAgICAgICAgICBjcmVkcyA9IGFwcl9wY2FsbG9jKHBvb2wsIHNpemVvZiAoKmNy ZWRzKSk7CisgICAgICAgICAgICAgIGNyZWRzLT5jZXJ0X2ZpbGUgPSB0bXBfY3JlZHMtPmNlcnRf ZmlsZSA/IFwKKyAgICAgICAgICAgICAgICBhcHJfcHN0cmR1cChwb29sLCB0bXBfY3JlZHMtPmNl cnRfZmlsZSkgOiBOVUxMOworICAgICAgICAgICAgICBjcmVkcy0+bWF5X3NhdmUgPSB0bXBfY3Jl ZHMtPm1heV9zYXZlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBQeV9ERUNSRUYo cmVzdWx0KTsKKyAgICB9CisgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOworICAqY3Jl ZCA9IGNyZWRzOworICByZXR1cm4gZXJyOworfQorCitzdm5fZXJyb3JfdCAqCitzdm5fc3dpZ19w eV9hdXRoX3NzbF9jbGllbnRfY2VydF9wd19wcm9tcHRfZnVuYygKKyAgICBzdm5fYXV0aF9jcmVk X3NzbF9jbGllbnRfY2VydF9wd190ICoqY3JlZCwKKyAgICB2b2lkICpiYXRvbiwKKyAgICBjb25z dCBjaGFyICpyZWFsbSwKKyAgICBzdm5fYm9vbGVhbl90IG1heV9zYXZlLAorICAgIGFwcl9wb29s X3QgKnBvb2wpCit7CisgIFB5T2JqZWN0ICpmdW5jdGlvbiA9IGJhdG9uOworICBQeU9iamVjdCAq cmVzdWx0OworICBzdm5fYXV0aF9jcmVkX3NzbF9jbGllbnRfY2VydF9wd190ICpjcmVkcyA9IE5V TEw7CisgIHN2bl9lcnJvcl90ICplcnIgPSBTVk5fTk9fRVJST1I7CisKKyAgaWYgKChmdW5jdGlv biA9PSBOVUxMKSB8fCAoZnVuY3Rpb24gPT0gUHlfTm9uZSkpCisgICAgcmV0dXJuIFNWTl9OT19F UlJPUjsKKworICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xvY2soKTsKKworICBpZiAoKHJlc3Vs dCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihmdW5jdGlvbiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGNoYXIgKikic2xPJiIsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHJlYWxtLCBtYXlfc2F2ZSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbWFrZV9vYl9wb29sLCBwb29sKSkgPT0gTlVMTCkKKyAgICB7CisgICAg ICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICB9CisgIGVsc2UKKyAgICB7 CisgICAgICBpZiAocmVzdWx0ICE9IFB5X05vbmUpCisgICAgICAgIHsKKyAgICAgICAgICBzdm5f YXV0aF9jcmVkX3NzbF9jbGllbnRfY2VydF9wd190ICp0bXBfY3JlZHMgPSBOVUxMOworICAgICAg ICAgIGlmIChzdm5fc3dpZ19Db252ZXJ0UHRyU3RyaW5nCisgICAgICAgICAgICAgIChyZXN1bHQs ICh2b2lkICoqKSZ0bXBfY3JlZHMsCisgICAgICAgICAgICAgICAic3ZuX2F1dGhfY3JlZF9zc2xf Y2xpZW50X2NlcnRfcHdfdCAqIikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGVyciA9 IHR5cGVfY29udmVyc2lvbl9lcnJvcgorICAgICAgICAgICAgICAgICgic3ZuX2F1dGhfY3JlZF9z c2xfY2xpZW50X2NlcnRfcHdfdCAqIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQor ICAgICAgICAgICAgeworICAgICAgICAgICAgICBjcmVkcyA9IGFwcl9wY2FsbG9jKHBvb2wsIHNp emVvZiAoKmNyZWRzKSk7CisgICAgICAgICAgICAgIGNyZWRzLT5wYXNzd29yZCA9IHRtcF9jcmVk cy0+cGFzc3dvcmQgPyBcCisgICAgICAgICAgICAgICAgYXByX3BzdHJkdXAocG9vbCwgdG1wX2Ny ZWRzLT5wYXNzd29yZCkgOiBOVUxMOworICAgICAgICAgICAgICBjcmVkcy0+bWF5X3NhdmUgPSB0 bXBfY3JlZHMtPm1heV9zYXZlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBQeV9E RUNSRUYocmVzdWx0KTsKKyAgICB9CisgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOwor ICAqY3JlZCA9IGNyZWRzOworICByZXR1cm4gZXJyOworfQorCit2b2lkCitzdm5fc3dpZ19weV9z ZXR1cF9yYV9jYWxsYmFja3Moc3ZuX3JhX2NhbGxiYWNrczJfdCAqKmNhbGxiYWNrcywKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoqYmF0b24sCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHlPYmplY3QgKnB5X2NhbGxiYWNrcywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKQoreworICBzdm5fZXJyb3JfdCAqZXJyID0g c3ZuX3JhX2NyZWF0ZV9jYWxsYmFja3MoY2FsbGJhY2tzLCBwb29sKTsKKworICBpZiAoZXJyKQor ICAgIHsKKyAgICAgIHN2bl9zd2lnX3B5X3N2bl9leGNlcHRpb24oZXJyKTsKKyAgICAgIHJldHVy bjsKKyAgICB9CisKKyAgKmJhdG9uID0gcHlfY2FsbGJhY2tzOworfQorCitzdm5fZXJyb3JfdCAq c3ZuX3N3aWdfcHlfY29tbWl0X2NhbGxiYWNrMihjb25zdCBzdm5fY29tbWl0X2luZm9fdCAqY29t bWl0X2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lk ICpiYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9w b29sX3QgKnBvb2wpCit7CisgIFB5T2JqZWN0ICpyZWNlaXZlciA9IGJhdG9uOworICBQeU9iamVj dCAqcmVzdWx0OworICBzdm5fZXJyb3JfdCAqZXJyID0gU1ZOX05PX0VSUk9SOworCisgIGlmICgo cmVjZWl2ZXIgPT0gTlVMTCkgfHwgKHJlY2VpdmVyID09IFB5X05vbmUpKQorICAgIHJldHVybiBT Vk5fTk9fRVJST1I7CisKKyAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7CisKKyAgaWYg KChyZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24ocmVjZWl2ZXIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopIk8mTyYiLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBtYWtlX29iX2NvbW1pdF9pbmZvLCBjb21taXRfaW5mbywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9vYl9wb29sLCBwb29s KSkgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3Io KTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBpZiAocmVzdWx0ICE9IFB5X05vbmUpCisg ICAgICAgIGVyciA9IGNhbGxiYWNrX2JhZF9yZXR1cm5fZXJyb3IoIk5vdCBOb25lIik7CisgICAg ICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICB9CisKKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9s b2NrKCk7CisKKyAgcmV0dXJuIGVycjsKK30KKworc3ZuX2Vycm9yX3QgKnN2bl9zd2lnX3B5X2Nv bW1pdF9jYWxsYmFjayhzdm5fcmV2bnVtX3QgbmV3X3JldmlzaW9uLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpkYXRlLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphdXRob3IsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmJhdG9uKQoreworICBQeU9i amVjdCAqcmVjZWl2ZXIgPSBiYXRvbjsKKyAgUHlPYmplY3QgKnJlc3VsdDsKKyAgc3ZuX2Vycm9y X3QgKmVyciA9IFNWTl9OT19FUlJPUjsKKworICBpZiAoKHJlY2VpdmVyID09IE5VTEwpIHx8IChy ZWNlaXZlciA9PSBQeV9Ob25lKSkKKyAgICByZXR1cm4gU1ZOX05PX0VSUk9SOworCisgIHN2bl9z d2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2Fs bEZ1bmN0aW9uKHJlY2VpdmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoY2hhciAqKSJsc3MiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu ZXdfcmV2aXNpb24sIGRhdGUsIGF1dGhvcikpID09IE5VTEwpCisgICAgeworICAgICAgZXJyID0g Y2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAg aWYgKHJlc3VsdCAhPSBQeV9Ob25lKQorICAgICAgICBlcnIgPSBjYWxsYmFja19iYWRfcmV0dXJu X2Vycm9yKCJOb3QgTm9uZSIpOworICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgfQorCisg IHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOworCisgIHJldHVybiBlcnI7Cit9CisKK3N2 bl9lcnJvcl90ICpzdm5fc3dpZ19weV9yYV9maWxlX3Jldl9oYW5kbGVyX2Z1bmMoCisgICAgICAg ICAgICAgICAgICAgIHZvaWQgKmJhdG9uLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFy ICpwYXRoLAorICAgICAgICAgICAgICAgICAgICBzdm5fcmV2bnVtX3QgcmV2LAorICAgICAgICAg ICAgICAgICAgICBhcHJfaGFzaF90ICpyZXZfcHJvcHMsCisgICAgICAgICAgICAgICAgICAgIHN2 bl90eGRlbHRhX3dpbmRvd19oYW5kbGVyX3QgKmRlbHRhX2hhbmRsZXIsCisgICAgICAgICAgICAg ICAgICAgIHZvaWQgKipkZWx0YV9iYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgYXByX2FycmF5 X2hlYWRlcl90ICpwcm9wX2RpZmZzLAorICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpw b29sKQoreworICBQeU9iamVjdCAqaGFuZGxlciA9IGJhdG9uOworICBQeU9iamVjdCAqcmVzdWx0 LCAqcHlfcmV2X3Byb3BzID0gTlVMTCwgKnB5X3Byb3BfZGlmZnMgPSBOVUxMOworICBzdm5fZXJy b3JfdCAqZXJyID0gU1ZOX05PX0VSUk9SOworCisgIGlmICgoaGFuZGxlciA9PSBOVUxMKSB8fCAo aGFuZGxlciA9PSBQeV9Ob25lKSkKKyAgICByZXR1cm4gU1ZOX05PX0VSUk9SOworCisgIHN2bl9z d2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisgIHB5X3Jldl9wcm9wcyA9IHN2bl9zd2lnX3B5 X3Byb3BoYXNoX3RvX2RpY3QocmV2X3Byb3BzKTsKKyAgaWYgKHB5X3Jldl9wcm9wcyA9PSBOVUxM KQorICAgIHsKKyAgICAgIGVyciA9IHR5cGVfY29udmVyc2lvbl9lcnJvcigiYXByX2hhc2hfdCAq Iik7CisgICAgICBnb3RvIGVycm9yOworICAgIH0KKworICBweV9wcm9wX2RpZmZzID0gcHJvcGFy cmF5X3RvX2RpY3QocHJvcF9kaWZmcyk7CisKKyAgaWYgKHB5X3Byb3BfZGlmZnMgPT0gTlVMTCkK KyAgICB7CisgICAgICBlcnIgPSB0eXBlX2NvbnZlcnNpb25fZXJyb3IoImFwcl9hcnJheV9oZWFk ZXJfdCAqIik7CisgICAgICBnb3RvIGVycm9yOworICAgIH0KKworICBpZiAoKHJlc3VsdCA9IFB5 T2JqZWN0X0NhbGxGdW5jdGlvbihoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoY2hhciAqKSJzbE9PTyYiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBwYXRoLCByZXYsIHB5X3Jldl9wcm9wcywgcHlfcHJvcF9kaWZmcywKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9vYl9wb29sLCBwb29sKSkgPT0g TlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAg ICB9CisgIGVsc2UKKyAgICB7CisgICAgICBpZiAocmVzdWx0ICE9IFB5X05vbmUpCisgICAgICAg IGVyciA9IGNhbGxiYWNrX2JhZF9yZXR1cm5fZXJyb3IoIk5vdCBOb25lIik7CisKKyAgICAgIC8q IEZJWE1FOiBTdXBwb3J0IHJldHVybmVkIFR4RGVsdGFXaW5kb3cgb2JqZWN0IGFuZAorICAgICAg ICogc2V0IGRlbHRhX2hhbmRsZXIgYW5kIGRlbHRhX2JhdG9uICovCisgICAgICAqZGVsdGFfaGFu ZGxlciA9IE5VTEw7CisgICAgICAqZGVsdGFfYmF0b24gPSBOVUxMOworCisgICAgICBQeV9YREVD UkVGKHJlc3VsdCk7CisgICAgfQorCitlcnJvcjoKKworICBQeV9YREVDUkVGKHB5X3Jldl9wcm9w cyk7CisgIFB5X1hERUNSRUYocHlfcHJvcF9kaWZmcyk7CisKKyAgc3ZuX3N3aWdfcHlfcmVsZWFz ZV9weV9sb2NrKCk7CisKKyAgcmV0dXJuIGVycjsKK30KKworc3RhdGljIHN2bl9lcnJvcl90ICpy ZXBvcnRlcl9zZXRfcGF0aCh2b2lkICpyZXBvcnRfYmF0b24sCisgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBjaGFyICpwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Zu X3Jldm51bV90IHJldmlzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX2Jvb2xl YW5fdCBzdGFydF9lbXB0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg KmxvY2tfdG9rZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29s KQoreworICBzdm5fZXJyb3JfdCAqZXJyID0gU1ZOX05PX0VSUk9SOworICBQeU9iamVjdCAqcHlf cmVwb3J0ZXIgPSByZXBvcnRfYmF0b24sICpyZXN1bHQ7CisKKyAgaWYgKHB5X3JlcG9ydGVyID09 IE5VTEwgfHwgcHlfcmVwb3J0ZXIgPT0gUHlfTm9uZSkKKyAgICByZXR1cm4gU1ZOX05PX0VSUk9S OworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisgIGlmICgocmVzdWx0ID0g UHlPYmplY3RfQ2FsbE1ldGhvZChweV9yZXBvcnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChjaGFyICopInNldF9wYXRoIiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChjaGFyICopInNsYnNPJiIsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBwYXRoLCByZXZpc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHN0YXJ0X2VtcHR5LCBsb2NrX3Rva2VuLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbWFrZV9vYl9wb29sLCBwb29sKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICBl cnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICB9CisgIGVsc2UgaWYgKHJlc3Vs dCAhPSBQeV9Ob25lKQorICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2JhZF9yZXR1cm5fZXJy b3IoIk5vdCBOb25lIik7CisgICAgfQorCisgIFB5X1hERUNSRUYocmVzdWx0KTsKKworICBzdm5f c3dpZ19weV9yZWxlYXNlX3B5X2xvY2soKTsKKworICByZXR1cm4gZXJyOworfQorCitzdGF0aWMg c3ZuX2Vycm9yX3QgKnJlcG9ydGVyX2RlbGV0ZV9wYXRoKHZvaWQgKnJlcG9ydF9iYXRvbiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwYXRoLAorICAgICAgICAgICAgICAg ICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgc3ZuX2Vycm9yX3QgKmVyciA9IFNWTl9O T19FUlJPUjsKKyAgUHlPYmplY3QgKnB5X3JlcG9ydGVyID0gcmVwb3J0X2JhdG9uLCAqcmVzdWx0 OworCisgIGlmIChweV9yZXBvcnRlciA9PSBOVUxMIHx8IHB5X3JlcG9ydGVyID09IFB5X05vbmUp CisgICAgcmV0dXJuIFNWTl9OT19FUlJPUjsKKworICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xv Y2soKTsKKworICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxNZXRob2QocHlfcmVwb3J0ZXIs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJkZWxldGVfcGF0 aCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJzTyYiLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCwgCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBtYWtlX29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQorICAg IHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgIH0KKyAgZWxz ZSBpZiAocmVzdWx0ICE9IFB5X05vbmUpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfYmFk X3JldHVybl9lcnJvcigiTm90IE5vbmUiKTsKKyAgICB9CisKKyAgUHlfWERFQ1JFRihyZXN1bHQp OworCisgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOworCisgIHJldHVybiBlcnI7Cit9 CisgICAgCitzdGF0aWMgc3ZuX2Vycm9yX3QgKnJlcG9ydGVyX2xpbmtfcGF0aCh2b2lkICpyZXBv cnRfYmF0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGF0aCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp1cmwsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3ZuX3Jldm51bV90IHJldmlzaW9uLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHN2bl9ib29sZWFuX3Qgc3RhcnRfZW1wdHksCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgY2hhciAqbG9ja190b2tlbiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBhcHJfcG9vbF90ICpwb29sKQoreworICBzdm5fZXJyb3JfdCAqZXJyID0gU1ZOX05P X0VSUk9SOworICBQeU9iamVjdCAqcHlfcmVwb3J0ZXIgPSByZXBvcnRfYmF0b24sICpyZXN1bHQ7 CisKKyAgaWYgKHB5X3JlcG9ydGVyID09IE5VTEwgfHwgcHlfcmVwb3J0ZXIgPT0gUHlfTm9uZSkK KyAgICByZXR1cm4gU1ZOX05PX0VSUk9SOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9j aygpOworCisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChweV9yZXBvcnRlciwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopImxpbmtfcGF0aCIs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJzc2xic08mIiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGgsIHVybCwgcmV2aXNpb24s CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydF9lbXB0eSwgbG9ja190 b2tlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vfb2JfcG9vbCwg cG9vbCkpID09IE5VTEwpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vy cm9yKCk7CisgICAgfQorICBlbHNlIGlmIChyZXN1bHQgIT0gUHlfTm9uZSkKKyAgICB7CisgICAg ICBlcnIgPSBjYWxsYmFja19iYWRfcmV0dXJuX2Vycm9yKCJOb3QgTm9uZSIpOworICAgIH0KKwor ICBQeV9YREVDUkVGKHJlc3VsdCk7CisKKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7 CisKKyAgcmV0dXJuIGVycjsKK30KKworc3RhdGljIHN2bl9lcnJvcl90ICpyZXBvcnRlcl9maW5p c2hfcmVwb3J0KHZvaWQgKnJlcG9ydF9iYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgc3ZuX2Vycm9yX3QgKmVyciA9IFNWTl9OT19F UlJPUjsKKworICBQeU9iamVjdCAqcHlfcmVwb3J0ZXIgPSByZXBvcnRfYmF0b24sICpyZXN1bHQ7 CisKKyAgaWYgKHB5X3JlcG9ydGVyID09IE5VTEwgfHwgcHlfcmVwb3J0ZXIgPT0gUHlfTm9uZSkK KyAgICByZXR1cm4gU1ZOX05PX0VSUk9SOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9j aygpOworCisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChweV9yZXBvcnRlciwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopImZpbmlzaF9yZXBv cnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikiTyYiLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9vYl9wb29sLCBwb29sKSkg PT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsK KyAgICB9CisgIGVsc2UgaWYgKHJlc3VsdCAhPSBQeV9Ob25lKQorICAgIHsKKyAgICAgIGVyciA9 IGNhbGxiYWNrX2JhZF9yZXR1cm5fZXJyb3IoIk5vdCBOb25lIik7CisgICAgfQorCisgIFB5X1hE RUNSRUYocmVzdWx0KTsKKworICBzdm5fc3dpZ19weV9yZWxlYXNlX3B5X2xvY2soKTsKKworICBy ZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3ZuX2Vycm9yX3QgKnJlcG9ydGVyX2Fib3J0X3JlcG9y dCh2b2lkICpyZXBvcnRfYmF0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBy X3Bvb2xfdCAqcG9vbCkKK3sKKyAgc3ZuX2Vycm9yX3QgKmVyciA9IFNWTl9OT19FUlJPUjsKKwor ICBQeU9iamVjdCAqcHlfcmVwb3J0ZXIgPSByZXBvcnRfYmF0b24sICpyZXN1bHQ7CisKKyAgaWYg KHB5X3JlcG9ydGVyID09IE5VTEwgfHwgcHlfcmVwb3J0ZXIgPT0gUHlfTm9uZSkKKyAgICByZXR1 cm4gU1ZOX05PX0VSUk9SOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisg IGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChweV9yZXBvcnRlciwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopImFib3J0X3JlcG9ydCIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJPJiIsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQor ICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgIH0KKyAg ZWxzZSBpZiAocmVzdWx0ICE9IFB5X05vbmUpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tf YmFkX3JldHVybl9lcnJvcigiTm90IE5vbmUiKTsKKyAgICB9CisKKyAgUHlfWERFQ1JFRihyZXN1 bHQpOworCisgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOworCisgIHJldHVybiBlcnI7 Cit9CisKK2NvbnN0IHN2bl9yYV9yZXBvcnRlcjJfdCBzd2lnX3B5X3JhX3JlcG9ydGVyMiA9IHsK KyAgICByZXBvcnRlcl9zZXRfcGF0aCwKKyAgICByZXBvcnRlcl9kZWxldGVfcGF0aCwKKyAgICBy ZXBvcnRlcl9saW5rX3BhdGgsCisgICAgcmVwb3J0ZXJfZmluaXNoX3JlcG9ydCwKKyAgICByZXBv cnRlcl9hYm9ydF9yZXBvcnQKK307CmRpZmYgLU51ciBzdWJ2ZXJzaW9uLTEuMy4xL3N1YnZlcnNp b24vYmluZGluZ3Mvc3dpZy9weXRob24vbGlic3ZuX3N3aWdfcHkvc3dpZ3V0aWxfcHkuYy5yZWog c3VidmVyc2lvbi0xLjMuMS5uZXcvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3B5dGhvbi9saWJz dm5fc3dpZ19weS9zd2lndXRpbF9weS5jLnJlagotLS0gc3VidmVyc2lvbi0xLjMuMS9zdWJ2ZXJz aW9uL2JpbmRpbmdzL3N3aWcvcHl0aG9uL2xpYnN2bl9zd2lnX3B5L3N3aWd1dGlsX3B5LmMucmVq CTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyBzdWJ2ZXJzaW9uLTEuMy4x Lm5ldy9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcHl0aG9uL2xpYnN2bl9zd2lnX3B5L3N3aWd1 dGlsX3B5LmMucmVqCTIwMDYtMDctMDQgMTk6MDE6MjcuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAg KzEsNDYgQEAKKyoqKioqKioqKioqKioqKgorKioqIDE1NjksMTU4NyAqKioqCisgICAgcmV0dXJu IGVycjsKKyAgfQorICAKKyAgc3ZuX3N0cmVhbV90ICoKKyAgc3ZuX3N3aWdfcHlfbWFrZV9zdHJl YW0oUHlPYmplY3QgKnB5X2lvLCBhcHJfcG9vbF90ICpwb29sKQorICB7CisgICAgc3ZuX3N0cmVh bV90ICpzdHJlYW07CisgIAorLSAgIC8qIEJvcnJvdyB0aGUgY2FsbGVyJ3MgcmVmZXJlbmNlIHRv IHB5X2lvIC0gdGhpcyBpcyBzYWZlIG9ubHkgYmVjYXVzZSB0aGUKKy0gICAgKiBjYWxsZXIgbXVz dCBoYXZlIGEgcmVmZXJlbmNlIGluIG9yZGVyIHRvIHBhc3MgdGhlIG9iamVjdCBpbnRvIHRoZQor LSAgICAqIGJpbmRpbmdzLCBhbmQgd2Ugd2lsbCBiZSBmaW5pc2hlZCB3aXRoIHRoZSBweV9pbyBv YmplY3QgYmVmb3JlIHdlIHJldHVybgorLSAgICAqIHRvIHB5dGhvbi4gSS5lLiBETyBOT1QgU1RP UkUgQVdBWSBUSEUgUkVTVUxUSU5HIHN2bl9zdHJlYW1fdCAqIGZvciB1c2UKKy0gICAgKiBvdmVy IG11bHRpcGxlIGNhbGxzIGludG8gdGhlIGJpbmRpbmdzLiAqLworICAgIHN0cmVhbSA9IHN2bl9z dHJlYW1fY3JlYXRlKHB5X2lvLCBwb29sKTsKKyAgICBzdm5fc3RyZWFtX3NldF9yZWFkKHN0cmVh bSwgcmVhZF9oYW5kbGVyX3B5aW8pOworICAgIHN2bl9zdHJlYW1fc2V0X3dyaXRlKHN0cmVhbSwg d3JpdGVfaGFuZGxlcl9weWlvKTsKKyAgCisgICAgcmV0dXJuIHN0cmVhbTsKKyAgfQorLS0tIDE1 NjksMTU5MiAtLS0tCisgICAgcmV0dXJuIGVycjsKKyAgfQorICAKKysgc3RhdGljIHN2bl9lcnJv cl90ICoKKysgY2xvc2VfaGFuZGxlcl9weWlvKHZvaWQgKmJhdG9uKQorKyB7CisrICAgUHlPYmpl Y3QgKnB5X2lvID0gYmF0b247CisrICAgUHlfREVDUkVGKHB5X2lvKTsKKysgICByZXR1cm4gU1ZO X05PX0VSUk9SOworKyB9CisrIAorICBzdm5fc3RyZWFtX3QgKgorICBzdm5fc3dpZ19weV9tYWtl X3N0cmVhbShQeU9iamVjdCAqcHlfaW8sIGFwcl9wb29sX3QgKnBvb2wpCisgIHsKKyAgICBzdm5f c3RyZWFtX3QgKnN0cmVhbTsKKyAgCisrICAgUHlfSU5DUkVGKHB5X2lvKTsKKyAgICBzdHJlYW0g PSBzdm5fc3RyZWFtX2NyZWF0ZShweV9pbywgcG9vbCk7CisgICAgc3ZuX3N0cmVhbV9zZXRfcmVh ZChzdHJlYW0sIHJlYWRfaGFuZGxlcl9weWlvKTsKKyAgICBzdm5fc3RyZWFtX3NldF93cml0ZShz dHJlYW0sIHdyaXRlX2hhbmRsZXJfcHlpbyk7CisrICAgc3ZuX3N0cmVhbV9zZXRfY2xvc2Uoc3Ry ZWFtLCBjbG9zZV9oYW5kbGVyX3B5aW8pOworICAKKyAgICByZXR1cm4gc3RyZWFtOworICB9CmRp ZmYgLU51ciBzdWJ2ZXJzaW9uLTEuMy4xL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24v bGlic3ZuX3N3aWdfcHkvc3dpZ3V0aWxfcHkuaCBzdWJ2ZXJzaW9uLTEuMy4xLm5ldy9zdWJ2ZXJz aW9uL2JpbmRpbmdzL3N3aWcvcHl0aG9uL2xpYnN2bl9zd2lnX3B5L3N3aWd1dGlsX3B5LmgKLS0t IHN1YnZlcnNpb24tMS4zLjEvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3B5dGhvbi9saWJzdm5f c3dpZ19weS9zd2lndXRpbF9weS5oCTIwMDUtMTAtMjAgMjM6MTc6MTkuMDAwMDAwMDAwICswMTAw CisrKyBzdWJ2ZXJzaW9uLTEuMy4xLm5ldy9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcHl0aG9u L2xpYnN2bl9zd2lnX3B5L3N3aWd1dGlsX3B5LmgJMjAwNi0wNy0wNCAxOTowMTowNS4wMDAwMDAw MDAgKzAxMDAKQEAgLTc5LDYgKzc5LDkgQEAKIFNWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAogdm9p ZCBzdm5fc3dpZ19nZXRfYXBwbGljYXRpb25fcG9vbChQeU9iamVjdCAqKnB5X3Bvb2wsIGFwcl9w b29sX3QgKipwb29sKTsKIAorLyogU2V0IGEgUHl0aG9uICdvd25lZCcgcmVmZXJlbmNlIG9uIHRo ZSBwb29sIG9mIHRoZSBnaXZlbiBwcm94eSBvYmplY3QgKi8KK2ludCBzdm5fc3dpZ19weV9wb29s X3NldF9vd25lZF9yZWYoUHlPYmplY3QgKnByb3h5LCBQeU9iamVjdCAqb2xkUmVmLCBQeU9iamVj dCAqbmV3UmVmKTsKKwogDAogLyoqKiBTV0lHIFdyYXBwZXJzICoqKi8KIApAQCAtMTk4LDYgKzIw MSwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdm5fd2Nfbm90aWZ5X3N0YXRl X3QgcHJvcF9zdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX3Jldm51bV90 IHJldmlzaW9uKTsKIAorU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JUCit2b2lkIHN2bl9zd2lnX3B5 X25vdGlmeV9mdW5jMih2b2lkICpiYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IHN2bl93Y19ub3RpZnlfdCAqbm90aWZ5LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgYXByX3Bvb2xfdCAqcG9vbCk7CisKIC8qIGEgc3RhdHVzIGZ1bmN0aW9uIHRoYXQgZXhl Y3V0ZXMgYSBQeXRob24gZnVuY3Rpb24gdGhhdCBpcyBwYXNzZWQgaW4KICAgIHZpYSB0aGUgYmF0 b24gYXJndW1lbnQgKi8KIFNWTl9TV0lHX1NXSUdVVElMX0VYUE9SVApAQCAtMjQ5LDYgKzI1Nywx MyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpt c2csCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBv b2wpOwogCisvKiB0aHVua2VkIGluZm8gcmVjZWl2ZXIgZnVuY3Rpb24gKi8KK1NWTl9TV0lHX1NX SUdVVElMX0VYUE9SVAorc3ZuX2Vycm9yX3QgKnN2bl9zd2lnX3B5X2luZm9fcmVjZWl2ZXJfZnVu Yyh2b2lkICpweV9yZWNlaXZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgY2hhciAqcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3Qgc3ZuX2luZm9fdCAqaW5mbywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCk7CisKIC8qIHRodW5r ZWQgYmxhbWUgcmVjZWl2ZXIgZnVuY3Rpb24gKi8KIFNWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAog c3ZuX2Vycm9yX3QgKnN2bl9zd2lnX3B5X2NsaWVudF9ibGFtZV9yZWNlaXZlcl9mdW5jKHZvaWQg KmJhdG9uLApAQCAtMzAzLDYgKzMxOCw0NSBAQAogICAgIHN2bl9ib29sZWFuX3QgbWF5X3NhdmUs CiAgICAgYXByX3Bvb2xfdCAqcG9vbCk7CiAKK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAordm9p ZAorc3ZuX3N3aWdfcHlfc2V0dXBfcmFfY2FsbGJhY2tzKHN2bl9yYV9jYWxsYmFja3MyX3QgKipj YWxsYmFja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKmJhdG9uLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpweV9jYWxsYmFja3MsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCk7CitTVk5fU1dJ R19TV0lHVVRJTF9FWFBPUlQKK3N2bl9lcnJvcl90ICpzdm5fc3dpZ19weV9jb21taXRfY2FsbGJh Y2syKGNvbnN0IHN2bl9jb21taXRfaW5mb190ICpjb21taXRfaW5mbywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmJhdG9uLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCk7CisKK1NWTl9TV0lH X1NXSUdVVElMX0VYUE9SVAorc3ZuX2Vycm9yX3QgKnN2bl9zd2lnX3B5X2NvbW1pdF9jYWxsYmFj ayhzdm5fcmV2bnVtX3QgbmV3X3JldmlzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBjaGFyICpkYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphdXRob3IsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmJhdG9uKTsKKworCitTVk5fU1dJR19TV0lHVVRJ TF9FWFBPUlQKK3N2bl9lcnJvcl90ICpzdm5fc3dpZ19weV9yYV9maWxlX3Jldl9oYW5kbGVyX2Z1 bmMoCisgICAgICAgICAgICAgICAgICAgIHZvaWQgKmJhdG9uLAorICAgICAgICAgICAgICAgICAg ICBjb25zdCBjaGFyICpwYXRoLAorICAgICAgICAgICAgICAgICAgICBzdm5fcmV2bnVtX3QgcmV2 LAorICAgICAgICAgICAgICAgICAgICBhcHJfaGFzaF90ICpyZXZfcHJvcHMsCisgICAgICAgICAg ICAgICAgICAgIHN2bl90eGRlbHRhX3dpbmRvd19oYW5kbGVyX3QgKmRlbHRhX2hhbmRsZXIsCisg ICAgICAgICAgICAgICAgICAgIHZvaWQgKipkZWx0YV9iYXRvbiwKKyAgICAgICAgICAgICAgICAg ICAgYXByX2FycmF5X2hlYWRlcl90ICpwcm9wX2RpZmZzLAorICAgICAgICAgICAgICAgICAgICBh cHJfcG9vbF90ICpwb29sKTsKKworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JUCitleHRlcm4gY29u c3Qgc3ZuX3JhX3JlcG9ydGVyMl90IHN3aWdfcHlfcmFfcmVwb3J0ZXIyOworCitTVk5fU1dJR19T V0lHVVRJTF9FWFBPUlQKK3ZvaWQKK3N2bl9zd2lnX3B5X3NldHVwX3JhX2NhbGxiYWNrcyhzdm5f cmFfY2FsbGJhY2tzMl90ICoqY2FsbGJhY2tzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHZvaWQgKipiYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVj dCAqcHlfY2FsbGJhY2tzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29s X3QgKnBvb2wpOworCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZiAvKiBfX2NwbHVzcGx1 cyAqLwpkaWZmIC1OdXIgc3VidmVyc2lvbi0xLjMuMS9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcv cHl0aG9uL2xpYnN2bl9zd2lnX3B5L3N3aWd1dGlsX3B5Lmgub3JpZyBzdWJ2ZXJzaW9uLTEuMy4x Lm5ldy9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcHl0aG9uL2xpYnN2bl9zd2lnX3B5L3N3aWd1 dGlsX3B5Lmgub3JpZwotLS0gc3VidmVyc2lvbi0xLjMuMS9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3 aWcvcHl0aG9uL2xpYnN2bl9zd2lnX3B5L3N3aWd1dGlsX3B5Lmgub3JpZwkxOTcwLTAxLTAxIDAx OjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgc3VidmVyc2lvbi0xLjMuMS5uZXcvc3VidmVyc2lv bi9iaW5kaW5ncy9zd2lnL3B5dGhvbi9saWJzdm5fc3dpZ19weS9zd2lndXRpbF9weS5oLm9yaWcJ MjAwNi0wNy0wNCAxOTowMTowNS4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSwzNTcgQEAKKy8q CisgKiBzd2lndXRpbF9weS5oIDogIHV0aWxpdHkgZnVuY3Rpb25zIGFuZCBzdHVmZiBmb3IgdGhl IFNXSUcgUHl0aG9uIGJpbmRpbmdzCisgKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAo YykgMjAwMC0yMDA0IENvbGxhYk5ldC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhp cyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywg d2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJp YnV0aW9uLiAgVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL3N1YnZl cnNpb24udGlncmlzLm9yZy9saWNlbnNlLTEuaHRtbC4KKyAqIElmIG5ld2VyIHZlcnNpb25zIG9m IHRoaXMgbGljZW5zZSBhcmUgcG9zdGVkIHRoZXJlLCB5b3UgbWF5IHVzZSBhCisgKiBuZXdlciB2 ZXJzaW9uIGluc3RlYWQsIGF0IHlvdXIgb3B0aW9uLgorICoKKyAqIFRoaXMgc29mdHdhcmUgY29u c2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55CisgKiBpbmRpdmlk dWFscy4gIEZvciBleGFjdCBjb250cmlidXRpb24gaGlzdG9yeSwgc2VlIHRoZSByZXZpc2lvbgor ICogaGlzdG9yeSBhbmQgbG9ncywgYXZhaWxhYmxlIGF0IGh0dHA6Ly9zdWJ2ZXJzaW9uLnRpZ3Jp cy5vcmcvLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworCisKKyNpZm5kZWYgU1ZOX1NXSUdfU1dJR1VU SUxfUFlfSAorI2RlZmluZSBTVk5fU1dJR19TV0lHVVRJTF9QWV9ICisKKyNpbmNsdWRlIDxQeXRo b24uaD4KKworI2luY2x1ZGUgPGFwci5oPgorI2luY2x1ZGUgPGFwcl9wb29scy5oPgorI2luY2x1 ZGUgPGFwcl9zdHJpbmdzLmg+CisjaW5jbHVkZSA8YXByX2hhc2guaD4KKyNpbmNsdWRlIDxhcHJf dGFibGVzLmg+CisKKyNpbmNsdWRlICJzdm5fdHlwZXMuaCIKKyNpbmNsdWRlICJzdm5fc3RyaW5n LmgiCisjaW5jbHVkZSAic3ZuX2RlbHRhLmgiCisjaW5jbHVkZSAic3ZuX2NsaWVudC5oIgorI2lu Y2x1ZGUgInN2bl9yZXBvcy5oIgorCisvKiBEZWZpbmUgRExMIGV4cG9ydCBtYWdpYyBvbiBXaW5k b3dzLiAqLworI2lmZGVmIFdJTjMyCisjICBpZmRlZiBTVk5fU1dJR19TV0lHVVRJTF9QWV9DCisj ICAgIGRlZmluZSBTVk5fU1dJR19TV0lHVVRJTF9FWFBPUlQgX19kZWNsc3BlYyhkbGxleHBvcnQp CisjICBlbHNlCisjICAgIGRlZmluZSBTVk5fU1dJR19TV0lHVVRJTF9FWFBPUlQgX19kZWNsc3Bl YyhkbGxpbXBvcnQpCisjICBlbmRpZgorI2Vsc2UKKyMgIGRlZmluZSBTVk5fU1dJR19TV0lHVVRJ TF9FWFBPUlQKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2Vu ZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKwwKKworLyogSW5pdGlhbGl6ZSB0aGUgbGlic3ZuX3N3 aWdfcHkgbGlicmFyeS4gKi8KK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAorYXByX3N0YXR1c190 IHN2bl9zd2lnX3B5X2luaXRpYWxpemUodm9pZCk7CisKKwwKKworLyogRnVuY3Rpb25zIHRvIG1h bmFnZSBweXRob24ncyBnbG9iYWwgaW50ZXJwcmV0ZXIgbG9jayAqLworU1ZOX1NXSUdfU1dJR1VU SUxfRVhQT1JUCit2b2lkIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jayh2b2lkKTsKKworU1ZO X1NXSUdfU1dJR1VUSUxfRVhQT1JUCit2b2lkIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jayh2 b2lkKTsKKworDAorLyoqKiBBdXRvbWF0aWMgUG9vbCBNYW5hZ2VtZW50IEZ1bmN0aW9ucyAqKiov CisKKy8qIFNldCB0aGUgYXBwbGljYXRpb24gcG9vbCAqLworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQ T1JUCit2b2lkIHN2bl9zd2lnX3B5X3NldF9hcHBsaWNhdGlvbl9wb29sKFB5T2JqZWN0ICpweV9w b29sLCBhcHJfcG9vbF90ICpwb29sKTsKKworLyogQ2xlYXIgdGhlIGFwcGxpY2F0aW9uIHBvb2wg Ki8KK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAordm9pZCBzdm5fc3dpZ19weV9jbGVhcl9hcHBs aWNhdGlvbl9wb29sKHZvaWQpOworCisvKiBHZXQgdGhlIGFwcGxpY2F0aW9uIHBvb2wgKi8KK1NW Tl9TV0lHX1NXSUdVVElMX0VYUE9SVAordm9pZCBzdm5fc3dpZ19nZXRfYXBwbGljYXRpb25fcG9v bChQeU9iamVjdCAqKnB5X3Bvb2wsIGFwcl9wb29sX3QgKipwb29sKTsKKworLyogU2V0IGEgUHl0 aG9uICdvd25lZCcgcmVmZXJlbmNlIG9uIHRoZSBwb29sIG9mIHRoZSBnaXZlbiBwcm94eSBvYmpl Y3QgKi8KK2ludCBzdm5fc3dpZ19weV9wb29sX3NldF9vd25lZF9yZWYoUHlPYmplY3QgKnByb3h5 LCBQeU9iamVjdCAqb2xkUmVmLCBQeU9iamVjdCAqbmV3UmVmKTsKKworDAorLyoqKiBTV0lHIFdy YXBwZXJzICoqKi8KKworLyogV3JhcHBlciBmb3IgU1dJR19OZXdQb2ludGVyT2JqICovCitTVk5f U1dJR19TV0lHVVRJTF9FWFBPUlQKK1B5T2JqZWN0ICpzdm5fc3dpZ19OZXdQb2ludGVyT2JqKHZv aWQgKm9iaiwgc3dpZ190eXBlX2luZm8gKnR5cGUsIAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUHlPYmplY3QgKnBvb2wpOworCisvKiBXcmFwcGVyIGZvciBTV0lHX0NvbnZlcnRQ dHIgKi8KK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAoraW50IHN2bl9zd2lnX0NvbnZlcnRQdHIo UHlPYmplY3QgKmlucHV0LCB2b2lkICoqb2JqLCBzd2lnX3R5cGVfaW5mbyAqdHlwZSk7CisKKy8q IFdyYXBwZXIgZm9yIFNXSUdfTXVzdEdldFB0ciAqLworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JU Cit2b2lkICpzdm5fc3dpZ19NdXN0R2V0UHRyKHZvaWQgKmlucHV0LCBzd2lnX3R5cGVfaW5mbyAq dHlwZSwgaW50IGFyZ251bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKipw eV9wb29sKTsKKwwKKy8qKiogRnVuY3Rpb25zIHRvIGV4cG9zZSBhIGN1c3RvbSBTdWJ2ZXJzaW9u RXhjZXB0aW9uICoqKi8KKworLyogcmVnaXN0ZXIgYSBuZXcgc3VidmVyc2lvbiBleGNlcHRpb24g Y2xhc3MgKi8KK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAorUHlPYmplY3QgKnN2bl9zd2lnX3B5 X3JlZ2lzdGVyX2V4Y2VwdGlvbih2b2lkKTsKKworLyogZ2V0IHRoZSBvYmplY3Qgd2hpY2ggcmVw cmVzZW50cyB0aGUgc3VidmVyc2lvbiBleGNlcHRpb24gY2xhc3MgKi8KK1NWTl9TV0lHX1NXSUdV VElMX0VYUE9SVAorUHlPYmplY3QgKnN2bl9zd2lnX3B5X2V4Y2VwdGlvbl90eXBlKHZvaWQpOwor CisvKiByYWlzZSBhIHN1YnZlcnNpb24gZXhjZXB0aW9uLCBjcmVhdGVkIGZyb20gYSBub3JtYWwg c3VidmVyc2lvbiBlcnJvciAqLworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JUCit2b2lkIHN2bl9z d2lnX3B5X3N2bl9leGNlcHRpb24oc3ZuX2Vycm9yX3QgKmVycik7CisKKworDAorLyogaGVscGVy IGZ1bmN0aW9uIHRvIGNvbnZlcnQgYW4gYXByX2hhc2hfdCogKGNoYXIqIC0+IHN2bnN0cmluZ190 KikgdG8KKyAgIGEgUHl0aG9uIGRpY3QgKi8KK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAorUHlP YmplY3QgKnN2bl9zd2lnX3B5X3Byb3BoYXNoX3RvX2RpY3QoYXByX2hhc2hfdCAqaGFzaCk7CisK Ky8qIGhlbHBlciBmdW5jdGlvbiB0byBjb252ZXJ0IGFuIGFwcl9oYXNoX3QqIChzdm5fcmV2bnVt X3QqIC0+IGNvbnN0CisgICBjaGFyICopIHRvIGEgUHl0aG9uIGRpY3QgKi8KK1NWTl9TV0lHX1NX SUdVVElMX0VYUE9SVAorUHlPYmplY3QgKnN2bl9zd2lnX3B5X2xvY2F0aW9uaGFzaF90b19kaWN0 KGFwcl9oYXNoX3QgKmhhc2gpOworCisvKiBjb252ZXJ0IGEgaGFzaCBvZiAnY29uc3QgY2hhciAq JyAtPiBUWVBFIGludG8gYSBQeXRob24gZGljdCAqLworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JU CitQeU9iamVjdCAqc3ZuX3N3aWdfcHlfY29udmVydF9oYXNoKGFwcl9oYXNoX3QgKmhhc2gsIHN3 aWdfdHlwZV9pbmZvICp0eXBlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHlPYmplY3QgKnB5X3Bvb2wpOworCisvKiBoZWxwZXIgZnVuY3Rpb24gdG8gY29udmVydCBhICdj aGFyICoqJyBpbnRvIGEgUHl0aG9uIGxpc3Qgb2Ygc3RyaW5nCisgICBvYmplY3RzICovCitTVk5f U1dJR19TV0lHVVRJTF9FWFBPUlQKK1B5T2JqZWN0ICpzdm5fc3dpZ19weV9jX3N0cmluZ3NfdG9f bGlzdChjaGFyICoqc3RyaW5ncyk7CisKKy8qIGhlbHBlciBmdW5jdGlvbiB0byBjb252ZXJ0IGFu IGFycmF5IG9mICdjb25zdCBjaGFyIConIHRvIGEgUHl0aG9uIGxpc3QKKyAgIG9mIHN0cmluZyBv YmplY3RzICovCitTVk5fU1dJR19TV0lHVVRJTF9FWFBPUlQKK1B5T2JqZWN0ICpzdm5fc3dpZ19w eV9hcnJheV90b19saXN0KGNvbnN0IGFwcl9hcnJheV9oZWFkZXJfdCAqc3RyaW5ncyk7CisKKy8q IGhlbHBlciBmdW5jdGlvbiB0byBjb252ZXJ0IGFuIGFycmF5IG9mICdzdm5fcmV2bnVtX3QnIHRv IGEgUHl0aG9uIGxpc3QKKyAgIG9mIGludCBvYmplY3RzICovCisvKiBGb3JtZXJseSB1c2VkIGJ5 IHByZS0xLjAgQVBJcy4gTm93IHVudXNlZAorUHlPYmplY3QgKnN2bl9zd2lnX3B5X3JldmFycmF5 X3RvX2xpc3QoY29uc3QgYXByX2FycmF5X2hlYWRlcl90ICpyZXZzKTsKKyovCisKKy8qIGhlbHBl ciBmdW5jdGlvbiB0byBjb252ZXJ0IGEgUHl0aG9uIGRpY3Rpb25hcnkgbWFwcGluZyBzdHJpbmdz IHRvCisgICBzdHJpbmdzIGludG8gYW4gYXByX2hhc2hfdCBtYXBwaW5nIGNvbnN0IGNoYXIgKidz IHRvIGNvbnN0IGNoYXIgKidzLAorICAgYWxsb2NhdGVkIGluIFBPT0wuICovCitTVk5fU1dJR19T V0lHVVRJTF9FWFBPUlQKK2Fwcl9oYXNoX3QgKnN2bl9zd2lnX3B5X3N0cmluZ2hhc2hfZnJvbV9k aWN0KFB5T2JqZWN0ICpkaWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCk7CisKKy8qIGhlbHBlciBmdW5jdGlvbiB0byBjb252 ZXJ0IGEgUHl0aG9uIGRpY3Rpb25hcnkgbWFwcGluZyBzdHJpbmdzIHRvCisgICBzdHJpbmdzIGlu dG8gYW4gYXByX2hhc2hfdCBtYXBwaW5nIGNvbnN0IGNoYXIgKidzIHRvIHN2bl9zdHJpbmdfdCdz LAorICAgYWxsb2NhdGVkIGluIFBPT0wuICovCitTVk5fU1dJR19TV0lHVVRJTF9FWFBPUlQKK2Fw cl9oYXNoX3QgKnN2bl9zd2lnX3B5X3Byb3BoYXNoX2Zyb21fZGljdChQeU9iamVjdCAqZGljdCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpw b29sKTsKKworLyogaGVscGVyIGZ1bmN0aW9uIHRvIGNvbnZlcnQgYSBQeXRob24gc2VxdWVuY2Ug b2Ygc3RyaW5ncyBpbnRvIGFuCisgICAnYXByX2FycmF5X2hlYWRlcl90IConIG9mICdjb25zdCBj aGFyIConIG9iamVjdHMuICBOb3RlIHRoYXQgdGhlCisgICBvYmplY3RzIG11c3QgcmVtYWluIGFs aXZlIC0tIHRoZSB2YWx1ZXMgYXJlIG5vdCBjb3BpZWQuIFRoaXMgaXMKKyAgIGFwcHJvcHJpYXRl IGZvciBpbmNvbWluZyBhcmd1bWVudHMgd2hpY2ggYXJlIGRlZmluZWQgdG8gbGFzdCB0aGUKKyAg IGR1cmF0aW9uIG9mIHRoZSBmdW5jdGlvbidzIGV4ZWN1dGlvbi4gICovCitTVk5fU1dJR19TV0lH VVRJTF9FWFBPUlQKK2NvbnN0IGFwcl9hcnJheV9oZWFkZXJfdCAqc3ZuX3N3aWdfcHlfc3RyaW5n c190b19hcnJheShQeU9iamVjdCAqc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpOworCisvKiBsaWtl IHN2bl9zd2lnX3B5X3N0cmluZ3NfdG9fYXJyYXkoKSwgYnV0IGZvciBhcnJheSdzIG9mICdzdm5f cmV2bnVtX3Qncy4gKi8KK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAorY29uc3QgYXByX2FycmF5 X2hlYWRlcl90ICpzdm5fc3dpZ19weV9yZXZudW1zX3RvX2FycmF5KFB5T2JqZWN0ICpzb3VyY2Us CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg YXByX3Bvb2xfdCAqcG9vbCk7CisKKy8qIG1ha2UgYW4gZWRpdG9yIHRoYXQgInRodW5rcyIgZnJv bSBDIGNhbGxiYWNrcyB1cCB0byBQeXRob24gKi8KK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAor dm9pZCBzdm5fc3dpZ19weV9tYWtlX2VkaXRvcihjb25zdCBzdm5fZGVsdGFfZWRpdG9yX3QgKipl ZGl0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiplZGl0X2JhdG9uLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqcHlfZWRpdG9yLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKTsKKworU1ZOX1NXSUdfU1dJ R1VUSUxfRVhQT1JUCithcHJfZmlsZV90ICpzdm5fc3dpZ19weV9tYWtlX2ZpbGUoUHlPYmplY3Qg KnB5X2ZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAq cG9vbCk7CisKK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAorc3ZuX3N0cmVhbV90ICpzdm5fc3dp Z19weV9tYWtlX3N0cmVhbShQeU9iamVjdCAqcHlfaW8sCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpOworCisvKiBhIG5vdGlmeSBmdW5jdGlv biB0aGF0IGV4ZWN1dGVzIGEgUHl0aG9uIGZ1bmN0aW9uIHRoYXQgaXMgcGFzc2VkIGluCisgICB2 aWEgdGhlIGJhdG9uIGFyZ3VtZW50ICovCitTVk5fU1dJR19TV0lHVVRJTF9FWFBPUlQKK3ZvaWQg c3ZuX3N3aWdfcHlfbm90aWZ5X2Z1bmModm9pZCAqYmF0b24sCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHN2bl93Y19ub3RpZnlfYWN0aW9uX3QgYWN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzdm5fbm9kZV9raW5kX3Qga2luZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgY2hhciAqbWltZV90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdm5f d2Nfbm90aWZ5X3N0YXRlX3QgY29udGVudF9zdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3ZuX3djX25vdGlmeV9zdGF0ZV90IHByb3Bfc3RhdGUsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHN2bl9yZXZudW1fdCByZXZpc2lvbik7CisKK1NWTl9TV0lHX1NXSUdVVElM X0VYUE9SVAordm9pZCBzdm5fc3dpZ19weV9ub3RpZnlfZnVuYzIodm9pZCAqYmF0b24sCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdm5fd2Nfbm90aWZ5X3QgKm5vdGlmeSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpOworCisvKiBh IHN0YXR1cyBmdW5jdGlvbiB0aGF0IGV4ZWN1dGVzIGEgUHl0aG9uIGZ1bmN0aW9uIHRoYXQgaXMg cGFzc2VkIGluCisgICB2aWEgdGhlIGJhdG9uIGFyZ3VtZW50ICovCitTVk5fU1dJR19TV0lHVVRJ TF9FWFBPUlQKK3ZvaWQgc3ZuX3N3aWdfcHlfc3RhdHVzX2Z1bmModm9pZCAqYmF0b24sCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdGgsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHN2bl93Y19zdGF0dXNfdCAqc3RhdHVzKTsKKworLyogYSBjYW5jZWwg ZnVuY3Rpb24gdGhhdCBleGVjdXRlcyBhIFB5dGhvbiBmdW5jdGlvbiBwYXNzZWQgaW4gdmlhIHRo ZQorICAgY2FuY2VsX2JhdG9uIGFyZ3VtZW50LiAqLworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JU Citzdm5fZXJyb3JfdCAqc3ZuX3N3aWdfcHlfY2FuY2VsX2Z1bmModm9pZCAqY2FuY2VsX2JhdG9u KTsKKworLyogdGh1bmtlZCBmcyBnZXRfbG9ja3MgZnVuY3Rpb24gKi8KK1NWTl9TV0lHX1NXSUdV VElMX0VYUE9SVAorc3ZuX2Vycm9yX3QgKnN2bl9zd2lnX3B5X2ZzX2dldF9sb2Nrc19mdW5jICh2 b2lkICpiYXRvbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHN2bl9sb2NrX3QgKmxvY2ssIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBhcHJfcG9vbF90ICpwb29sKTsKKworLyogdGh1bmtlZCBjb21taXQgbG9nIGZldGNo ZXIgKi8KK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAorc3ZuX2Vycm9yX3QgKnN2bl9zd2lnX3B5 X2dldF9jb21taXRfbG9nX2Z1bmMoY29uc3QgY2hhciAqKmxvZ19tc2csCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoqdG1wX2ZpbGUsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfYXJyYXlfaGVh ZGVyX3QgKmNvbW1pdF9pdGVtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHZvaWQgKmJhdG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCk7CisKKy8qIHRodW5rZWQgcmVwb3MgYXV0aHog Y2FsbGJhY2sgZnVuY3Rpb24gKi8KK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAorc3ZuX2Vycm9y X3QgKnN2bl9zd2lnX3B5X3JlcG9zX2F1dGh6X2Z1bmMoc3ZuX2Jvb2xlYW5fdCAqYWxsb3dlZCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2bl9mc19yb290X3Qg KnJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj aGFyICpwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9p ZCAqYmF0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJf cG9vbF90ICpwb29sKTsKKworLyogdGh1bmtlZCBoaXN0b3J5IGNhbGxiYWNrIGZ1bmN0aW9uICov CitTVk5fU1dJR19TV0lHVVRJTF9FWFBPUlQKK3N2bl9lcnJvcl90ICpzdm5fc3dpZ19weV9yZXBv c19oaXN0b3J5X2Z1bmModm9pZCAqYmF0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHN2bl9yZXZudW1fdCByZXZpc2lvbiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCk7CisKKy8q IHRodW5rZWQgbG9nIHJlY2VpdmVyIGZ1bmN0aW9uICovCitTVk5fU1dJR19TV0lHVVRJTF9FWFBP UlQKK3N2bl9lcnJvcl90ICpzdm5fc3dpZ19weV9sb2dfcmVjZWl2ZXIodm9pZCAqcHlfcmVjZWl2 ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9oYXNoX3QgKmNo YW5nZWRfcGF0aHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2bl9y ZXZudW1fdCByZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IGNoYXIgKmF1dGhvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgY2hhciAqZGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgY2hhciAqbXNnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJf cG9vbF90ICpwb29sKTsKKworLyogdGh1bmtlZCBpbmZvIHJlY2VpdmVyIGZ1bmN0aW9uICovCitT Vk5fU1dJR19TV0lHVVRJTF9FWFBPUlQKK3N2bl9lcnJvcl90ICpzdm5fc3dpZ19weV9pbmZvX3Jl Y2VpdmVyX2Z1bmModm9pZCAqcHlfcmVjZWl2ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdGgsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN2bl9pbmZvX3QgKmluZm8sCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpOwor CisvKiB0aHVua2VkIGJsYW1lIHJlY2VpdmVyIGZ1bmN0aW9uICovCitTVk5fU1dJR19TV0lHVVRJ TF9FWFBPUlQKK3N2bl9lcnJvcl90ICpzdm5fc3dpZ19weV9jbGllbnRfYmxhbWVfcmVjZWl2ZXJf ZnVuYyh2b2lkICpiYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBhcHJfaW50NjRfdCBsaW5lX25vLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2bl9yZXZudW1fdCByZXZpc2lvbiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj aGFyICphdXRob3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgY2hhciAqZGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpsaW5lLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpOwor CisvKiBhdXRoIHByb3ZpZGVyIGNhbGxiYWNrcyAqLworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JU Citzdm5fZXJyb3JfdCAqc3ZuX3N3aWdfcHlfYXV0aF9zaW1wbGVfcHJvbXB0X2Z1bmMoCisgICAg c3ZuX2F1dGhfY3JlZF9zaW1wbGVfdCAqKmNyZWQsCisgICAgdm9pZCAqYmF0b24sCisgICAgY29u c3QgY2hhciAqcmVhbG0sCisgICAgY29uc3QgY2hhciAqdXNlcm5hbWUsCisgICAgc3ZuX2Jvb2xl YW5fdCBtYXlfc2F2ZSwKKyAgICBhcHJfcG9vbF90ICpwb29sKTsKKworU1ZOX1NXSUdfU1dJR1VU SUxfRVhQT1JUCitzdm5fZXJyb3JfdCAqc3ZuX3N3aWdfcHlfYXV0aF91c2VybmFtZV9wcm9tcHRf ZnVuYygKKyAgICBzdm5fYXV0aF9jcmVkX3VzZXJuYW1lX3QgKipjcmVkLAorICAgIHZvaWQgKmJh dG9uLAorICAgIGNvbnN0IGNoYXIgKnJlYWxtLAorICAgIHN2bl9ib29sZWFuX3QgbWF5X3NhdmUs CisgICAgYXByX3Bvb2xfdCAqcG9vbCk7CisKK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAorc3Zu X2Vycm9yX3QgKnN2bl9zd2lnX3B5X2F1dGhfc3NsX3NlcnZlcl90cnVzdF9wcm9tcHRfZnVuYygK KyAgICBzdm5fYXV0aF9jcmVkX3NzbF9zZXJ2ZXJfdHJ1c3RfdCAqKmNyZWQsCisgICAgdm9pZCAq YmF0b24sCisgICAgY29uc3QgY2hhciAqcmVhbG0sCisgICAgYXByX3VpbnQzMl90IGZhaWx1cmVz LAorICAgIGNvbnN0IHN2bl9hdXRoX3NzbF9zZXJ2ZXJfY2VydF9pbmZvX3QgKmNlcnRfaW5mbywK KyAgICBzdm5fYm9vbGVhbl90IG1heV9zYXZlLAorICAgIGFwcl9wb29sX3QgKnBvb2wpOworCitT Vk5fU1dJR19TV0lHVVRJTF9FWFBPUlQKK3N2bl9lcnJvcl90ICpzdm5fc3dpZ19weV9hdXRoX3Nz bF9jbGllbnRfY2VydF9wcm9tcHRfZnVuYygKKyAgICBzdm5fYXV0aF9jcmVkX3NzbF9jbGllbnRf Y2VydF90ICoqY3JlZCwKKyAgICB2b2lkICpiYXRvbiwKKyAgICBjb25zdCBjaGFyICpyZWFsbSwK KyAgICBzdm5fYm9vbGVhbl90IG1heV9zYXZlLAorICAgIGFwcl9wb29sX3QgKnBvb2wpOworCitT Vk5fU1dJR19TV0lHVVRJTF9FWFBPUlQKK3N2bl9lcnJvcl90ICpzdm5fc3dpZ19weV9hdXRoX3Nz bF9jbGllbnRfY2VydF9wd19wcm9tcHRfZnVuYygKKyAgICBzdm5fYXV0aF9jcmVkX3NzbF9jbGll bnRfY2VydF9wd190ICoqY3JlZCwKKyAgICB2b2lkICpiYXRvbiwKKyAgICBjb25zdCBjaGFyICpy ZWFsbSwKKyAgICBzdm5fYm9vbGVhbl90IG1heV9zYXZlLAorICAgIGFwcl9wb29sX3QgKnBvb2wp OworCitTVk5fU1dJR19TV0lHVVRJTF9FWFBPUlQKK3ZvaWQKK3N2bl9zd2lnX3B5X3NldHVwX3Jh X2NhbGxiYWNrcyhzdm5fcmFfY2FsbGJhY2tzMl90ICoqY2FsbGJhY2tzLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHZvaWQgKipiYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBQeU9iamVjdCAqcHlfY2FsbGJhY2tzLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGFwcl9wb29sX3QgKnBvb2wpOworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JUCitzdm5f ZXJyb3JfdCAqc3ZuX3N3aWdfcHlfY29tbWl0X2NhbGxiYWNrMihjb25zdCBzdm5fY29tbWl0X2lu Zm9fdCAqY29tbWl0X2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB2b2lkICpiYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGFwcl9wb29sX3QgKnBvb2wpOworCitTVk5fU1dJR19TV0lHVVRJTF9FWFBPUlQKK3N2bl9l cnJvcl90ICpzdm5fc3dpZ19weV9jb21taXRfY2FsbGJhY2soc3ZuX3Jldm51bV90IG5ld19yZXZp c2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh ciAqZGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg Y2hhciAqYXV0aG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2 b2lkICpiYXRvbik7CisKKworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JUCitzdm5fZXJyb3JfdCAq c3ZuX3N3aWdfcHlfcmFfZmlsZV9yZXZfaGFuZGxlcl9mdW5jKAorICAgICAgICAgICAgICAgICAg ICB2b2lkICpiYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGF0aCwKKyAg ICAgICAgICAgICAgICAgICAgc3ZuX3Jldm51bV90IHJldiwKKyAgICAgICAgICAgICAgICAgICAg YXByX2hhc2hfdCAqcmV2X3Byb3BzLAorICAgICAgICAgICAgICAgICAgICBzdm5fdHhkZWx0YV93 aW5kb3dfaGFuZGxlcl90ICpkZWx0YV9oYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICB2b2lk ICoqZGVsdGFfYmF0b24sCisgICAgICAgICAgICAgICAgICAgIGFwcl9hcnJheV9oZWFkZXJfdCAq cHJvcF9kaWZmcywKKyAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCk7CisKK1NW Tl9TV0lHX1NXSUdVVElMX0VYUE9SVAorZXh0ZXJuIGNvbnN0IHN2bl9yYV9yZXBvcnRlcjJfdCBz d2lnX3B5X3JhX3JlcG9ydGVyMjsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyog X19jcGx1c3BsdXMgKi8KKworI2VuZGlmICAvKiBTVk5fU1dJR19TV0lHVVRJTF9QWV9IICovCmRp ZmYgLU51ciBzdWJ2ZXJzaW9uLTEuMy4xL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24v dGVzdHMvY2xpZW50LnB5IHN1YnZlcnNpb24tMS4zLjEubmV3L3N1YnZlcnNpb24vYmluZGluZ3Mv c3dpZy9weXRob24vdGVzdHMvY2xpZW50LnB5Ci0tLSBzdWJ2ZXJzaW9uLTEuMy4xL3N1YnZlcnNp b24vYmluZGluZ3Mvc3dpZy9weXRob24vdGVzdHMvY2xpZW50LnB5CTE5NzAtMDEtMDEgMDE6MDA6 MDAuMDAwMDAwMDAwICswMTAwCisrKyBzdWJ2ZXJzaW9uLTEuMy4xLm5ldy9zdWJ2ZXJzaW9uL2Jp bmRpbmdzL3N3aWcvcHl0aG9uL3Rlc3RzL2NsaWVudC5weQkyMDA2LTA3LTA0IDE5OjAxOjA1LjAw MDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDExMSBAQAoraW1wb3J0IHVuaXR0ZXN0LCBvcywgdGVt cGZpbGUsIHR5cGVzCisKK2Zyb20gc3ZuIGltcG9ydCBjb3JlLCByZXBvcywgZnMsIGRlbHRhLCBj bGllbnQsIHdjCisKK2Zyb20gdHJhYy52ZXJzaW9uY29udHJvbC50ZXN0cy5zdm5fZnMgaW1wb3J0 IFN1YnZlcnNpb25SZXBvc2l0b3J5VGVzdFNldHVwLCBcCisgIFJFUE9TX1BBVEgKK2Zyb20gdXJs bGliIGltcG9ydCBwYXRobmFtZTJ1cmwKKworY2xhc3MgU3VidmVyc2lvblJlcG9zaXRvcnlUZXN0 Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICIiIlRlc3QgY2FzZXMgZm9yIHRoZSBTdWJ2ZXJz aW9uIHJlcG9zaXRvcnkgbGF5ZXIiIiIKKworICBkZWYgc2V0VXAoc2VsZik6CisgICAgIiIiTG9h ZCBhIFN1YnZlcnNpb24gcmVwb3NpdG9yeSIiIgorICAgIHNlbGYuY2xpZW50X2N0eCA9IGNsaWVu dC5zdm5fY2xpZW50X2NyZWF0ZV9jb250ZXh0KCkKKworICAgIHByb3ZpZGVycyA9IFsKKyAgICAg ICBjbGllbnQuc3ZuX2NsaWVudF9nZXRfc2ltcGxlX3Byb3ZpZGVyKCksCisgICAgICAgY2xpZW50 LnN2bl9jbGllbnRfZ2V0X3VzZXJuYW1lX3Byb3ZpZGVyKCksCisgICAgXQorCisgICAgc2VsZi5j bGllbnRfY3R4LmF1dGhfYmF0b24gPSBjb3JlLnN2bl9hdXRoX29wZW4ocHJvdmlkZXJzKQorICAg IHNlbGYucmVwb3NfdXJsID0gImZpbGU6Ly8iICsgcGF0aG5hbWUydXJsKFJFUE9TX1BBVEgpCisK KyAgZGVmIGluZm9fcmVjZWl2ZXIoc2VsZiwgcGF0aCwgaW5mbywgcG9vbCk6CisgICAgIiIiU3F1 aXJyZWwgYXdheSB0aGUgb3V0cHV0IGZyb20gJ3N2biBpbmZvJyBzbyB0aGF0IHRoZSB1bml0IHRl c3RzCisgICAgICAgY2FuIGdldCBhdCB0aGVtLiIiIgorICAgIHNlbGYucGF0aCA9IHBhdGgKKyAg ICBzZWxmLmluZm8gPSBpbmZvCisKKyAgZGVmIHRlc3RfY2hlY2tvdXQoc2VsZik6CisgICAgIiIi VGVzdCBzdm5fY2xpZW50X2NoZWNrb3V0Mi4iIiIKKworICAgIHJldiA9IGNvcmUuc3ZuX29wdF9y ZXZpc2lvbl90KCkKKyAgICByZXYua2luZCA9IGNvcmUuc3ZuX29wdF9yZXZpc2lvbl9oZWFkCisK KyAgICBwYXRoID0gb3MucGF0aC5qb2luKHRlbXBmaWxlLmdldHRlbXBkaXIoKSwgJ2NoZWNrb3V0 JykKKworICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNsaWVudC5jaGVja291dDIs IAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmVwb3NfdXJsLCBwYXRoLCBOb25lLCBOb25l LCBUcnVlLCBUcnVlLCAKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNsaWVudF9jdHgpCisK KyAgICBjbGllbnQuY2hlY2tvdXQyKHNlbGYucmVwb3NfdXJsLCBwYXRoLCByZXYsIHJldiwgVHJ1 ZSwgVHJ1ZSwgCisgICAgICAgICAgICBzZWxmLmNsaWVudF9jdHgpCisKKyAgZGVmIHRlc3RfaW5m byhzZWxmKToKKyAgICAiIiJUZXN0IHNjb3BlIG9mIGdldF9sb2dzIGNhbGxiYWNrcyIiIgorCisg ICAgIyBSdW4gaW5mbworICAgIHJldnQgPSBjb3JlLnN2bl9vcHRfcmV2aXNpb25fdCgpCisgICAg cmV2dC5raW5kID0gY29yZS5zdm5fb3B0X3JldmlzaW9uX2hlYWQKKyAgICByZXBvc191cmwgPSAi ZmlsZTovLyIgKyBwYXRobmFtZTJ1cmwoUkVQT1NfUEFUSCkKKyAgICBjbGllbnQuaW5mbyhyZXBv c191cmwsIHJldnQsIHJldnQsIHNlbGYuaW5mb19yZWNlaXZlciwKKyAgICAgICAgICAgICAgICBG YWxzZSwgc2VsZi5jbGllbnRfY3R4KQorCisgICAgIyBDaGVjayBvdXRwdXQgZnJvbSBydW5uaW5n IGluZm8uIFRoaXMgYWxzbyBzZXJ2ZXMgdG8gdmVyaWZ5IHRoYXQKKyAgICAjIHRoZSBpbnRlcm5h bCAnaW5mbycgb2JqZWN0IGlzIHN0aWxsIHZhbGlkCisgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxm LnBhdGgsIG9zLnBhdGguYmFzZW5hbWUoUkVQT1NfUEFUSCkpCisgICAgc2VsZi5pbmZvLmFzc2Vy dF92YWxpZCgpCisgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmluZm8uVVJMLCByZXBvc191cmwp CisgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmluZm8ucmVwb3Nfcm9vdF9VUkwsIHJlcG9zX3Vy bCkKKworCisgIGRlZiB0ZXN0X3V1aWRfZnJvbV91cmwoc2VsZik6CisgICAgIiIiVGVzdCBzdm5f Y2xpZW50X3V1aWRfZnJvbV91cmwgb24gYSBmaWxlOi8vIFVSTCIiIgorICAgIHNlbGYuYXNzZXJ0 Xyhpc2luc3RhbmNlKAorICAgICAgICAgICAgICAgICBjbGllbnQudXVpZF9mcm9tX3VybChzZWxm LnJlcG9zX3VybCwgc2VsZi5jbGllbnRfY3R4KSwKKyAgICAgICAgICAgICAgICAgdHlwZXMuU3Ry aW5nVHlwZXMpKQorCisgIGRlZiB0ZXN0X3VybF9mcm9tX3BhdGgoc2VsZik6CisgICAgIiIiVGVz dCBzdm5fY2xpZW50X3VybF9mcm9tX3BhdGggZm9yIGEgZmlsZTovLyBVUkwiIiIKKyAgICBzZWxm LmFzc2VydEVxdWFscyhjbGllbnQudXJsX2Zyb21fcGF0aChzZWxmLnJlcG9zX3VybCksIHNlbGYu cmVwb3NfdXJsKQorCisgICAgcmV2ID0gY29yZS5zdm5fb3B0X3JldmlzaW9uX3QoKQorICAgIHJl di5raW5kID0gY29yZS5zdm5fb3B0X3JldmlzaW9uX2hlYWQKKworICAgIHBhdGggPSBvcy5wYXRo LmpvaW4odGVtcGZpbGUuZ2V0dGVtcGRpcigpLCAndXJsX2Zyb21fcGF0aCcpCisKKyAgICBjbGll bnQuY2hlY2tvdXQyKHNlbGYucmVwb3NfdXJsLCBwYXRoLCByZXYsIHJldiwgVHJ1ZSwgVHJ1ZSwg CisgICAgICAgICAgICAgICAgICAgICBzZWxmLmNsaWVudF9jdHgpCisKKyAgICBzZWxmLmFzc2Vy dEVxdWFscyhjbGllbnQudXJsX2Zyb21fcGF0aChwYXRoKSwgc2VsZi5yZXBvc191cmwpCisKKyAg ZGVmIHRlc3RfdXVpZF9mcm9tX3BhdGgoc2VsZik6CisgICAgIiIiVGVzdCBzdm5fY2xpZW50X3V1 aWRfZnJvbV9wYXRoLiIiIgorICAgIHJldiA9IGNvcmUuc3ZuX29wdF9yZXZpc2lvbl90KCkKKyAg ICByZXYua2luZCA9IGNvcmUuc3ZuX29wdF9yZXZpc2lvbl9oZWFkCisKKyAgICBwYXRoID0gb3Mu cGF0aC5qb2luKHRlbXBmaWxlLmdldHRlbXBkaXIoKSwgJ3V1aWRfZnJvbV9wYXRoJykKKworICAg IGNsaWVudC5jaGVja291dDIoc2VsZi5yZXBvc191cmwsIHBhdGgsIHJldiwgcmV2LCBUcnVlLCBU cnVlLCAKKyAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2xpZW50X2N0eCkKKworICAgIHdjX2Fk bSA9IHdjLmFkbV9vcGVuMyhOb25lLCBwYXRoLCBGYWxzZSwgMCwgTm9uZSkKKworICAgIHNlbGYu YXNzZXJ0RXF1YWxzKGNsaWVudC51dWlkX2Zyb21fcGF0aChwYXRoLCB3Y19hZG0sIHNlbGYuY2xp ZW50X2N0eCksIAorICAgICAgICAgICAgICAgICAgICAgIGNsaWVudC51dWlkX2Zyb21fdXJsKHNl bGYucmVwb3NfdXJsLCBzZWxmLmNsaWVudF9jdHgpKQorCisgICAgc2VsZi5hc3NlcnRfKGlzaW5z dGFuY2UoY2xpZW50LnV1aWRfZnJvbV9wYXRoKHBhdGgsIHdjX2FkbSwgCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc2VsZi5jbGllbnRfY3R4KSwgdHlwZXMuU3RyaW5nVHlwZXMpKQorCisg IGRlZiB0ZXN0X29wZW5fcmFfc2Vzc2lvbihzZWxmKToKKyAgICAgICIiIlRlc3Qgc3ZuX2NsaWVu dF9vcGVuX3JhX3Nlc3Npb24oKS4iIiIKKyAgICAgIGNsaWVudC5vcGVuX3JhX3Nlc3Npb24oc2Vs Zi5yZXBvc191cmwsIHNlbGYuY2xpZW50X2N0eCkKKworZGVmIHN1aXRlKCk6CisgICAgcmV0dXJu IHVuaXR0ZXN0Lm1ha2VTdWl0ZShTdWJ2ZXJzaW9uUmVwb3NpdG9yeVRlc3RDYXNlLCAndGVzdCcs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWl0ZUNsYXNzPVN1YnZlcnNpb25SZXBv c2l0b3J5VGVzdFNldHVwKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHJ1bm5l ciA9IHVuaXR0ZXN0LlRleHRUZXN0UnVubmVyKCkKKyAgICBydW5uZXIucnVuKHN1aXRlKCkpCmRp ZmYgLU51ciBzdWJ2ZXJzaW9uLTEuMy4xL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24v dGVzdHMvY2xpZW50LnB5Lm9yaWcgc3VidmVyc2lvbi0xLjMuMS5uZXcvc3VidmVyc2lvbi9iaW5k aW5ncy9zd2lnL3B5dGhvbi90ZXN0cy9jbGllbnQucHkub3JpZwotLS0gc3VidmVyc2lvbi0xLjMu MS9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcHl0aG9uL3Rlc3RzL2NsaWVudC5weS5vcmlnCTE5 NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyBzdWJ2ZXJzaW9uLTEuMy4xLm5l dy9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcHl0aG9uL3Rlc3RzL2NsaWVudC5weS5vcmlnCTIw MDYtMDctMDQgMTk6MDE6MDUuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsMTExIEBACitpbXBv cnQgdW5pdHRlc3QsIG9zLCB0ZW1wZmlsZSwgdHlwZXMKKworZnJvbSBzdm4gaW1wb3J0IGNvcmUs IHJlcG9zLCBmcywgZGVsdGEsIGNsaWVudCwgd2MKKworZnJvbSB0cmFjLnZlcnNpb25jb250cm9s LnRlc3RzLnN2bl9mcyBpbXBvcnQgU3VidmVyc2lvblJlcG9zaXRvcnlUZXN0U2V0dXAsIFwKKyAg UkVQT1NfUEFUSAorZnJvbSB1cmxsaWIgaW1wb3J0IHBhdGhuYW1lMnVybAorCitjbGFzcyBTdWJ2 ZXJzaW9uUmVwb3NpdG9yeVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgIiIiVGVzdCBj YXNlcyBmb3IgdGhlIFN1YnZlcnNpb24gcmVwb3NpdG9yeSBsYXllciIiIgorCisgIGRlZiBzZXRV cChzZWxmKToKKyAgICAiIiJMb2FkIGEgU3VidmVyc2lvbiByZXBvc2l0b3J5IiIiCisgICAgc2Vs Zi5jbGllbnRfY3R4ID0gY2xpZW50LnN2bl9jbGllbnRfY3JlYXRlX2NvbnRleHQoKQorCisgICAg cHJvdmlkZXJzID0gWworICAgICAgIGNsaWVudC5zdm5fY2xpZW50X2dldF9zaW1wbGVfcHJvdmlk ZXIoKSwKKyAgICAgICBjbGllbnQuc3ZuX2NsaWVudF9nZXRfdXNlcm5hbWVfcHJvdmlkZXIoKSwK KyAgICBdCisKKyAgICBzZWxmLmNsaWVudF9jdHguYXV0aF9iYXRvbiA9IGNvcmUuc3ZuX2F1dGhf b3Blbihwcm92aWRlcnMpCisgICAgc2VsZi5yZXBvc191cmwgPSAiZmlsZTovLyIgKyBwYXRobmFt ZTJ1cmwoUkVQT1NfUEFUSCkKKworICBkZWYgaW5mb19yZWNlaXZlcihzZWxmLCBwYXRoLCBpbmZv LCBwb29sKToKKyAgICAiIiJTcXVpcnJlbCBhd2F5IHRoZSBvdXRwdXQgZnJvbSAnc3ZuIGluZm8n IHNvIHRoYXQgdGhlIHVuaXQgdGVzdHMKKyAgICAgICBjYW4gZ2V0IGF0IHRoZW0uIiIiCisgICAg c2VsZi5wYXRoID0gcGF0aAorICAgIHNlbGYuaW5mbyA9IGluZm8KKworICBkZWYgdGVzdF9jaGVj a291dChzZWxmKToKKyAgICAiIiJUZXN0IHN2bl9jbGllbnRfY2hlY2tvdXQyLiIiIgorCisgICAg cmV2ID0gY29yZS5zdm5fb3B0X3JldmlzaW9uX3QoKQorICAgIHJldi5raW5kID0gY29yZS5zdm5f b3B0X3JldmlzaW9uX2hlYWQKKworICAgIHBhdGggPSBvcy5wYXRoLmpvaW4odGVtcGZpbGUuZ2V0 dGVtcGRpcigpLCAnY2hlY2tvdXQnKQorCisgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJv ciwgY2xpZW50LmNoZWNrb3V0MiwgCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXBvc191 cmwsIHBhdGgsIE5vbmUsIE5vbmUsIFRydWUsIFRydWUsIAorICAgICAgICAgICAgICAgICAgICAg IHNlbGYuY2xpZW50X2N0eCkKKworICAgIGNsaWVudC5jaGVja291dDIoc2VsZi5yZXBvc191cmws IHBhdGgsIHJldiwgcmV2LCBUcnVlLCBUcnVlLCAKKyAgICAgICAgICAgIHNlbGYuY2xpZW50X2N0 eCkKKworICBkZWYgdGVzdF9pbmZvKHNlbGYpOgorICAgICIiIlRlc3Qgc2NvcGUgb2YgZ2V0X2xv Z3MgY2FsbGJhY2tzIiIiCisKKyAgICAjIFJ1biBpbmZvCisgICAgcmV2dCA9IGNvcmUuc3ZuX29w dF9yZXZpc2lvbl90KCkKKyAgICByZXZ0LmtpbmQgPSBjb3JlLnN2bl9vcHRfcmV2aXNpb25faGVh ZAorICAgIHJlcG9zX3VybCA9ICJmaWxlOi8vIiArIHBhdGhuYW1lMnVybChSRVBPU19QQVRIKQor ICAgIGNsaWVudC5pbmZvKHJlcG9zX3VybCwgcmV2dCwgcmV2dCwgc2VsZi5pbmZvX3JlY2VpdmVy LAorICAgICAgICAgICAgICAgIEZhbHNlLCBzZWxmLmNsaWVudF9jdHgpCisKKyAgICAjIENoZWNr IG91dHB1dCBmcm9tIHJ1bm5pbmcgaW5mby4gVGhpcyBhbHNvIHNlcnZlcyB0byB2ZXJpZnkgdGhh dAorICAgICMgdGhlIGludGVybmFsICdpbmZvJyBvYmplY3QgaXMgc3RpbGwgdmFsaWQKKyAgICBz ZWxmLmFzc2VydEVxdWFsKHNlbGYucGF0aCwgb3MucGF0aC5iYXNlbmFtZShSRVBPU19QQVRIKSkK KyAgICBzZWxmLmluZm8uYXNzZXJ0X3ZhbGlkKCkKKyAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYu aW5mby5VUkwsIHJlcG9zX3VybCkKKyAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuaW5mby5yZXBv c19yb290X1VSTCwgcmVwb3NfdXJsKQorCisKKyAgZGVmIHRlc3RfdXVpZF9mcm9tX3VybChzZWxm KToKKyAgICAiIiJUZXN0IHN2bl9jbGllbnRfdXVpZF9mcm9tX3VybCBvbiBhIGZpbGU6Ly8gVVJM IiIiCisgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UoCisgICAgICAgICAgICAgICAgIGNsaWVu dC51dWlkX2Zyb21fdXJsKHNlbGYucmVwb3NfdXJsLCBzZWxmLmNsaWVudF9jdHgpLAorICAgICAg ICAgICAgICAgICB0eXBlcy5TdHJpbmdUeXBlcykpCisKKyAgZGVmIHRlc3RfdXJsX2Zyb21fcGF0 aChzZWxmKToKKyAgICAiIiJUZXN0IHN2bl9jbGllbnRfdXJsX2Zyb21fcGF0aCBmb3IgYSBmaWxl Oi8vIFVSTCIiIgorICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNsaWVudC51cmxfZnJvbV9wYXRoKHNl bGYucmVwb3NfdXJsKSwgc2VsZi5yZXBvc191cmwpCisKKyAgICByZXYgPSBjb3JlLnN2bl9vcHRf cmV2aXNpb25fdCgpCisgICAgcmV2LmtpbmQgPSBjb3JlLnN2bl9vcHRfcmV2aXNpb25faGVhZAor CisgICAgcGF0aCA9IG9zLnBhdGguam9pbih0ZW1wZmlsZS5nZXR0ZW1wZGlyKCksICd1cmxfZnJv bV9wYXRoJykKKworICAgIGNsaWVudC5jaGVja291dDIoc2VsZi5yZXBvc191cmwsIHBhdGgsIHJl diwgcmV2LCBUcnVlLCBUcnVlLCAKKyAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2xpZW50X2N0 eCkKKworICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNsaWVudC51cmxfZnJvbV9wYXRoKHBhdGgpLCBz ZWxmLnJlcG9zX3VybCkKKworICBkZWYgdGVzdF91dWlkX2Zyb21fcGF0aChzZWxmKToKKyAgICAi IiJUZXN0IHN2bl9jbGllbnRfdXVpZF9mcm9tX3BhdGguIiIiCisgICAgcmV2ID0gY29yZS5zdm5f b3B0X3JldmlzaW9uX3QoKQorICAgIHJldi5raW5kID0gY29yZS5zdm5fb3B0X3JldmlzaW9uX2hl YWQKKworICAgIHBhdGggPSBvcy5wYXRoLmpvaW4odGVtcGZpbGUuZ2V0dGVtcGRpcigpLCAndXVp ZF9mcm9tX3BhdGgnKQorCisgICAgY2xpZW50LmNoZWNrb3V0MihzZWxmLnJlcG9zX3VybCwgcGF0 aCwgcmV2LCByZXYsIFRydWUsIFRydWUsIAorICAgICAgICAgICAgICAgICAgICAgc2VsZi5jbGll bnRfY3R4KQorCisgICAgd2NfYWRtID0gd2MuYWRtX29wZW4zKE5vbmUsIHBhdGgsIEZhbHNlLCAw LCBOb25lKQorCisgICAgc2VsZi5hc3NlcnRFcXVhbHMoY2xpZW50LnV1aWRfZnJvbV9wYXRoKHBh dGgsIHdjX2FkbSwgc2VsZi5jbGllbnRfY3R4KSwgCisgICAgICAgICAgICAgICAgICAgICAgY2xp ZW50LnV1aWRfZnJvbV91cmwoc2VsZi5yZXBvc191cmwsIHNlbGYuY2xpZW50X2N0eCkpCisKKyAg ICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShjbGllbnQudXVpZF9mcm9tX3BhdGgocGF0aCwgd2Nf YWRtLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNsaWVudF9jdHgpLCB0eXBl cy5TdHJpbmdUeXBlcykpCisKKyAgZGVmIHRlc3Rfb3Blbl9yYV9zZXNzaW9uKHNlbGYpOgorICAg ICAgIiIiVGVzdCBzdm5fY2xpZW50X29wZW5fcmFfc2Vzc2lvbigpLiIiIgorICAgICAgY2xpZW50 Lm9wZW5fcmFfc2Vzc2lvbihzZWxmLnJlcG9zX3VybCwgc2VsZi5jbGllbnRfY3R4KQorCitkZWYg c3VpdGUoKToKKyAgICByZXR1cm4gdW5pdHRlc3QubWFrZVN1aXRlKFN1YnZlcnNpb25SZXBvc2l0 b3J5VGVzdENhc2UsICd0ZXN0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1aXRl Q2xhc3M9U3VidmVyc2lvblJlcG9zaXRvcnlUZXN0U2V0dXApCisKK2lmIF9fbmFtZV9fID09ICdf X21haW5fXyc6CisgICAgcnVubmVyID0gdW5pdHRlc3QuVGV4dFRlc3RSdW5uZXIoKQorICAgIHJ1 bm5lci5ydW4oc3VpdGUoKSkKZGlmZiAtTnVyIHN1YnZlcnNpb24tMS4zLjEvc3VidmVyc2lvbi9i aW5kaW5ncy9zd2lnL3B5dGhvbi90ZXN0cy9yYS5weSBzdWJ2ZXJzaW9uLTEuMy4xLm5ldy9zdWJ2 ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcHl0aG9uL3Rlc3RzL3JhLnB5Ci0tLSBzdWJ2ZXJzaW9uLTEu My4xL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vdGVzdHMvcmEucHkJMTk3MC0wMS0w MSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIHN1YnZlcnNpb24tMS4zLjEubmV3L3N1YnZl cnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vdGVzdHMvcmEucHkJMjAwNi0wNy0wNCAxOTowMTow NS4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSwxMzYgQEAKK2ltcG9ydCB1bml0dGVzdCwgb3MK KworZnJvbSBzdm4gaW1wb3J0IGNvcmUsIHJlcG9zLCBmcywgZGVsdGEsIGNsaWVudCwgcmEKKwor ZnJvbSB0cmFjLnZlcnNpb25jb250cm9sLnRlc3RzLnN2bl9mcyBpbXBvcnQgU3VidmVyc2lvblJl cG9zaXRvcnlUZXN0U2V0dXAsIFwKKyAgUkVQT1NfUEFUSAorZnJvbSB1cmxsaWIgaW1wb3J0IHBh dGhuYW1lMnVybAorCitjbGFzcyBTdWJ2ZXJzaW9uUmVwb3NpdG9yeVRlc3RDYXNlKHVuaXR0ZXN0 LlRlc3RDYXNlKToKKyAgIiIiVGVzdCBjYXNlcyBmb3IgdGhlIFN1YnZlcnNpb24gcmVwb3NpdG9y eSBsYXllciIiIgorCisgIGRlZiBzZXRVcChzZWxmKToKKyAgICAiIiJMb2FkIGEgU3VidmVyc2lv biByZXBvc2l0b3J5IiIiCisKKyAgICByYS5pbml0aWFsaXplKCkKKworICAgIHNlbGYucmVwb3Nf dXJsID0gImZpbGU6Ly8iICsgcGF0aG5hbWUydXJsKFJFUE9TX1BBVEgpCisgICAgCisgICAgIyBP cGVuIHJlcG9zaXRvcnkgZGlyZWN0bHkgZm9yIGNyb3NzLWNoZWNraW5nCisgICAgc2VsZi5yZXBv cyA9IHJlcG9zLm9wZW4oUkVQT1NfUEFUSCkKKyAgICBzZWxmLmZzID0gcmVwb3MuZnMoc2VsZi5y ZXBvcykKKworICAgIGNhbGxiYWNrcyA9IHJhLmNhbGxiYWNrczJfdCgpCisKKyAgICBzZWxmLnJh X2N0eCA9IHJhLm9wZW4yKHNlbGYucmVwb3NfdXJsLCBjYWxsYmFja3MsIE5vbmUsIE5vbmUpCisK KyAgZGVmIHRlc3RfZ2V0X3JlcG9zX3Jvb3Qoc2VsZik6CisgICAgcm9vdCA9IHJhLmdldF9yZXBv c19yb290KHNlbGYucmFfY3R4KQorICAgIHNlbGYuYXNzZXJ0RXF1YWwocm9vdCxzZWxmLnJlcG9z X3VybCkKKworICBkZWYgdGVzdF9nZXRfdXVpZChzZWxmKToKKyAgICByYV91dWlkID0gcmEuZ2V0 X3V1aWQoc2VsZi5yYV9jdHgpCisgICAgZnNfdXVpZCA9IGZzLmdldF91dWlkKHNlbGYuZnMpCisg ICAgc2VsZi5hc3NlcnRFcXVhbChyYV91dWlkLGZzX3V1aWQpCisKKyAgZGVmIHRlc3RfZ2V0X2xh c3Rlc3RfcmV2bnVtKHNlbGYpOgorICAgIHJhX3Jldm51bSA9IHJhLmdldF9sYXRlc3RfcmV2bnVt KHNlbGYucmFfY3R4KQorICAgIGZzX3Jldm51bSA9IGZzLnlvdW5nZXN0X3JldihzZWxmLmZzKQor ICAgIHNlbGYuYXNzZXJ0RXF1YWwocmFfcmV2bnVtLGZzX3Jldm51bSkKKworICBkZWYgdGVzdF9n ZXRfZGlyKHNlbGYpOgorICAgIChkaXJlbnRzLF8scHJvcHMpID0gcmEuZ2V0X2RpcihzZWxmLnJh X2N0eCwgJycsIDEpCisgICAgc2VsZi5hc3NlcnRUcnVlKGRpcmVudHMuaGFzX2tleSgndHJ1bmsn KSkKKyAgICBzZWxmLmFzc2VydFRydWUoZGlyZW50cy5oYXNfa2V5KCdicmFuY2hlcycpKQorICAg IHNlbGYuYXNzZXJ0VHJ1ZShkaXJlbnRzLmhhc19rZXkoJ3RhZ3MnKSkKKyAgICBzZWxmLmFzc2Vy dEVxdWFsKGRpcmVudHNbJ3RydW5rJ10ua2luZCwgY29yZS5zdm5fbm9kZV9kaXIpCisgICAgc2Vs Zi5hc3NlcnRFcXVhbChkaXJlbnRzWydicmFuY2hlcyddLmtpbmQsIGNvcmUuc3ZuX25vZGVfZGly KQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlyZW50c1sndGFncyddLmtpbmQsIGNvcmUuc3ZuX25v ZGVfZGlyKQorICAgIHNlbGYuYXNzZXJ0VHJ1ZShwcm9wcy5oYXNfa2V5KGNvcmUuU1ZOX1BST1Bf RU5UUllfVVVJRCkpCisgICAgc2VsZi5hc3NlcnRUcnVlKHByb3BzLmhhc19rZXkoY29yZS5TVk5f UFJPUF9FTlRSWV9MQVNUX0FVVEhPUikpCisKKyAgICAoZGlyZW50cyxfLF8pID0gcmEuZ2V0X2Rp cihzZWxmLnJhX2N0eCwgJ3RydW5rJywgMSkKKworICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlyZW50 cywge30pCisKKyAgICAoZGlyZW50cyxfLF8pID0gcmEuZ2V0X2RpcihzZWxmLnJhX2N0eCwgJ3Ry dW5rJywgMTApCisKKyAgICBzZWxmLmFzc2VydFRydWUoZGlyZW50cy5oYXNfa2V5KCdSRUFETUUy LnR4dCcpKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlyZW50c1snUkVBRE1FMi50eHQnXS5raW5k LGNvcmUuc3ZuX25vZGVfZmlsZSkKKworICBkZWYgdGVzdF9jb21taXQoc2VsZik6CisgICAgZGVm IG15X2NhbGxiYWNrKHJldmlzaW9uLCBkYXRlLCBhdXRob3IsIGJhdG9uKToKKyAgICAgICAgc2Vs Zi5hc3NlcnRFcXVhbChpbmZvLnJldmlzaW9uLCBmcy55b3VuZ2VzdF9yZXYoc2VsZi5mcykpCisK KyAgICBlZGl0b3IsIGVkaXRfYmF0b24gPSByYS5nZXRfY29tbWl0X2VkaXRvcihzZWxmLnJhX2N0 eCwgImZvb2JhciIsIG15X2NhbGxiYWNrLCBOb25lLCBGYWxzZSkKKyAgICByb290ID0gZGVsdGEu ZWRpdG9yX2ludm9rZV9vcGVuX3Jvb3QoZWRpdG9yLCBlZGl0X2JhdG9uLCA0KQorICAgIGNoaWxk ID0gZGVsdGEuZWRpdG9yX2ludm9rZV9hZGRfZGlyZWN0b3J5KGVkaXRvciwgImJsYSIsIHJvb3Qs IE5vbmUsIDApCisgICAgZGVsdGEuZWRpdG9yX2ludm9rZV9jbG9zZV9lZGl0KGVkaXRvciwgZWRp dF9iYXRvbikKKworICBkZWYgdGVzdF9jb21taXQoc2VsZik6CisgICAgZGVmIG15X2NhbGxiYWNr KHJldmlzaW9uLCBkYXRlLCBhdXRob3IpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldmlz aW9uLCBmcy55b3VuZ2VzdF9yZXYoc2VsZi5mcykpCisKKyAgICBlZGl0b3IsIGVkaXRfYmF0b24g PSByYS5nZXRfY29tbWl0X2VkaXRvcihzZWxmLnJhX2N0eCwgImZvb2JhciIsIG15X2NhbGxiYWNr LCBOb25lLCBGYWxzZSkKKyAgICByb290ID0gZGVsdGEuZWRpdG9yX2ludm9rZV9vcGVuX3Jvb3Qo ZWRpdG9yLCBlZGl0X2JhdG9uLCA0KQorICAgIGNoaWxkID0gZGVsdGEuZWRpdG9yX2ludm9rZV9h ZGRfZGlyZWN0b3J5KGVkaXRvciwgImJsYWgiLCByb290LCBOb25lLCAwKQorICAgIGRlbHRhLmVk aXRvcl9pbnZva2VfY2xvc2VfZWRpdChlZGl0b3IsIGVkaXRfYmF0b24pCisKKyAgZGVmIHRlc3Rf Y29tbWl0KHNlbGYpOgorICAgIGRlZiBteV9jYWxsYmFjayhyZXZpc2lvbiwgZGF0ZSwgYXV0aG9y KToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXZpc2lvbiwgZnMueW91bmdlc3RfcmV2KHNl bGYuZnMpKQorCisgICAgZWRpdG9yLCBlZGl0X2JhdG9uID0gcmEuZ2V0X2NvbW1pdF9lZGl0b3Io c2VsZi5yYV9jdHgsICJmb29iYXIiLCBteV9jYWxsYmFjaywgTm9uZSwgRmFsc2UpCisgICAgcm9v dCA9IGRlbHRhLmVkaXRvcl9pbnZva2Vfb3Blbl9yb290KGVkaXRvciwgZWRpdF9iYXRvbiwgNCkK KyAgICBjaGlsZCA9IGRlbHRhLmVkaXRvcl9pbnZva2VfYWRkX2RpcmVjdG9yeShlZGl0b3IsICJi bGFoIiwgcm9vdCwgTm9uZSwgMCkKKyAgICBkZWx0YS5lZGl0b3JfaW52b2tlX2Nsb3NlX2VkaXQo ZWRpdG9yLCBlZGl0X2JhdG9uKQorCisgIGRlZiB0ZXN0X2dldF9sb2NhdGlvbnMoc2VsZik6Cisg ICAgbG9jYXRpb25zID0gcmEuZ2V0X2xvY2F0aW9ucyhzZWxmLnJhX2N0eCwgIi90cnVuay9SRUFE TUUudHh0IiwgMiwgcmFuZ2UoMSw1KSkKKyAgICBzZWxmLmFzc2VydEVxdWFsKGxvY2F0aW9ucywg eworICAgICAgICAyOiAnL3RydW5rL1JFQURNRS50eHQnLCAKKyAgICAgICAgMzogJy90cnVuay9S RUFETUUudHh0JywgCisgICAgICAgIDQ6ICcvdHJ1bmsvUkVBRE1FLnR4dCd9KQorCisgIGRlZiB0 ZXN0X2dldF9maWxlX3JldnMoc2VsZik6CisgICAgZGVmIHJldl9oYW5kbGVyKHBhdGgsIHJldiwg cmV2X3Byb3BzLCBwcm9wX2RpZmZzLCBwb29sKToKKyAgICAgICAgc2VsZi5hc3NlcnRfKHJldiA9 PSAyIG9yIHJldiA9PSAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhdGgsICIvdHJ1bmsv UkVBRE1FLnR4dCIpCisgICAgICAgIGlmIHJldiA9PSAyOgorICAgICAgICAgICAgc2VsZi5hc3Nl cnRFcXVhbChyZXZfcHJvcHMsIHsKKyAgICAgICAgICAgICAgJ3N2bjpsb2cnOiAnQWRkZWQgUkVB RE1FLicsCisgICAgICAgICAgICAgICdzdm46YXV0aG9yJzogJ2pvaG4nLAorICAgICAgICAgICAg ICAnc3ZuOmRhdGUnOiAnMjAwNS0wNC0wMVQxMzoxMjoxOC4yMTYyNjdaJworICAgICAgICAgICAg fSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvcF9kaWZmcywge30pCisgICAgICAg IGVsaWYgcmV2ID09IDM6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldl9wcm9wcywg eworICAgICAgICAgICAgICAnc3ZuOmxvZyc6ICdGaXhlZCBSRUFETUUuXG4nLAorICAgICAgICAg ICAgICAnc3ZuOmF1dGhvcic6ICdrYXRlJywKKyAgICAgICAgICAgICAgJ3N2bjpkYXRlJzogJzIw MDUtMDQtMDFUMTM6MjQ6NTguMjM0NjQzWicKKyAgICAgICAgICAgIH0pCisgICAgICAgICAgICBz ZWxmLmFzc2VydEVxdWFsKHByb3BfZGlmZnMsIHsnc3ZuOm1pbWUtdHlwZSc6ICd0ZXh0L3BsYWlu JywgJ3N2bjplb2wtc3R5bGUnOiAnbmF0aXZlJ30pCisKKyAgICByYS5nZXRfZmlsZV9yZXZzKHNl bGYucmFfY3R4LCAidHJ1bmsvUkVBRE1FLnR4dCIsIDAsIDEwLCByZXZfaGFuZGxlcikKKworICBk ZWYgdGVzdF91cGRhdGUoc2VsZik6CisgICAgY2xhc3MgVGVzdEVkaXRvcihkZWx0YS5FZGl0b3Ip OgorICAgICAgICBwYXNzCisKKyAgICBlZGl0b3IgPSBUZXN0RWRpdG9yKCkKKworICAgIGVfcHRy LCBlX2JhdG9uID0gZGVsdGEubWFrZV9lZGl0b3IoZWRpdG9yKQorICAgIAorICAgIHJlcG9ydGVy LCByZXBvcnRlcl9iYXRvbiA9IHJhLmRvX3VwZGF0ZShzZWxmLnJhX2N0eCwgMTAsICIiLCBUcnVl LCBlX3B0ciwgZV9iYXRvbikKKworICAgIHJhLnJlcG9ydGVyMl9pbnZva2Vfc2V0X3BhdGgocmVw b3J0ZXIsIHJlcG9ydGVyX2JhdG9uLCAiIiwgMCwgVHJ1ZSwgTm9uZSkKKworICAgIHJhLnJlcG9y dGVyMl9pbnZva2VfZmluaXNoX3JlcG9ydChyZXBvcnRlciwgcmVwb3J0ZXJfYmF0b24pCisKK2Rl ZiBzdWl0ZSgpOgorICAgIHJldHVybiB1bml0dGVzdC5tYWtlU3VpdGUoU3VidmVyc2lvblJlcG9z aXRvcnlUZXN0Q2FzZSwgJ3Rlc3QnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vp dGVDbGFzcz1TdWJ2ZXJzaW9uUmVwb3NpdG9yeVRlc3RTZXR1cCkKKworaWYgX19uYW1lX18gPT0g J19fbWFpbl9fJzoKKyAgICBydW5uZXIgPSB1bml0dGVzdC5UZXh0VGVzdFJ1bm5lcigpCisgICAg cnVubmVyLnJ1bihzdWl0ZSgpKQpkaWZmIC1OdXIgc3VidmVyc2lvbi0xLjMuMS9zdWJ2ZXJzaW9u L2JpbmRpbmdzL3N3aWcvcHl0aG9uL3Rlc3RzL3JhLnB5Lm9yaWcgc3VidmVyc2lvbi0xLjMuMS5u ZXcvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3B5dGhvbi90ZXN0cy9yYS5weS5vcmlnCi0tLSBz dWJ2ZXJzaW9uLTEuMy4xL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vdGVzdHMvcmEu cHkub3JpZwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgc3VidmVyc2lv bi0xLjMuMS5uZXcvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3B5dGhvbi90ZXN0cy9yYS5weS5v cmlnCTIwMDYtMDctMDQgMTk6MDE6MDUuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsMTM2IEBA CitpbXBvcnQgdW5pdHRlc3QsIG9zCisKK2Zyb20gc3ZuIGltcG9ydCBjb3JlLCByZXBvcywgZnMs IGRlbHRhLCBjbGllbnQsIHJhCisKK2Zyb20gdHJhYy52ZXJzaW9uY29udHJvbC50ZXN0cy5zdm5f ZnMgaW1wb3J0IFN1YnZlcnNpb25SZXBvc2l0b3J5VGVzdFNldHVwLCBcCisgIFJFUE9TX1BBVEgK K2Zyb20gdXJsbGliIGltcG9ydCBwYXRobmFtZTJ1cmwKKworY2xhc3MgU3VidmVyc2lvblJlcG9z aXRvcnlUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICIiIlRlc3QgY2FzZXMgZm9yIHRo ZSBTdWJ2ZXJzaW9uIHJlcG9zaXRvcnkgbGF5ZXIiIiIKKworICBkZWYgc2V0VXAoc2VsZik6Cisg ICAgIiIiTG9hZCBhIFN1YnZlcnNpb24gcmVwb3NpdG9yeSIiIgorCisgICAgcmEuaW5pdGlhbGl6 ZSgpCisKKyAgICBzZWxmLnJlcG9zX3VybCA9ICJmaWxlOi8vIiArIHBhdGhuYW1lMnVybChSRVBP U19QQVRIKQorICAgIAorICAgICMgT3BlbiByZXBvc2l0b3J5IGRpcmVjdGx5IGZvciBjcm9zcy1j aGVja2luZworICAgIHNlbGYucmVwb3MgPSByZXBvcy5vcGVuKFJFUE9TX1BBVEgpCisgICAgc2Vs Zi5mcyA9IHJlcG9zLmZzKHNlbGYucmVwb3MpCisKKyAgICBjYWxsYmFja3MgPSByYS5jYWxsYmFj a3MyX3QoKQorCisgICAgc2VsZi5yYV9jdHggPSByYS5vcGVuMihzZWxmLnJlcG9zX3VybCwgY2Fs bGJhY2tzLCBOb25lLCBOb25lKQorCisgIGRlZiB0ZXN0X2dldF9yZXBvc19yb290KHNlbGYpOgor ICAgIHJvb3QgPSByYS5nZXRfcmVwb3Nfcm9vdChzZWxmLnJhX2N0eCkKKyAgICBzZWxmLmFzc2Vy dEVxdWFsKHJvb3Qsc2VsZi5yZXBvc191cmwpCisKKyAgZGVmIHRlc3RfZ2V0X3V1aWQoc2VsZik6 CisgICAgcmFfdXVpZCA9IHJhLmdldF91dWlkKHNlbGYucmFfY3R4KQorICAgIGZzX3V1aWQgPSBm cy5nZXRfdXVpZChzZWxmLmZzKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwocmFfdXVpZCxmc191dWlk KQorCisgIGRlZiB0ZXN0X2dldF9sYXN0ZXN0X3Jldm51bShzZWxmKToKKyAgICByYV9yZXZudW0g PSByYS5nZXRfbGF0ZXN0X3Jldm51bShzZWxmLnJhX2N0eCkKKyAgICBmc19yZXZudW0gPSBmcy55 b3VuZ2VzdF9yZXYoc2VsZi5mcykKKyAgICBzZWxmLmFzc2VydEVxdWFsKHJhX3Jldm51bSxmc19y ZXZudW0pCisKKyAgZGVmIHRlc3RfZ2V0X2RpcihzZWxmKToKKyAgICAoZGlyZW50cyxfLHByb3Bz KSA9IHJhLmdldF9kaXIoc2VsZi5yYV9jdHgsICcnLCAxKQorICAgIHNlbGYuYXNzZXJ0VHJ1ZShk aXJlbnRzLmhhc19rZXkoJ3RydW5rJykpCisgICAgc2VsZi5hc3NlcnRUcnVlKGRpcmVudHMuaGFz X2tleSgnYnJhbmNoZXMnKSkKKyAgICBzZWxmLmFzc2VydFRydWUoZGlyZW50cy5oYXNfa2V5KCd0 YWdzJykpCisgICAgc2VsZi5hc3NlcnRFcXVhbChkaXJlbnRzWyd0cnVuayddLmtpbmQsIGNvcmUu c3ZuX25vZGVfZGlyKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlyZW50c1snYnJhbmNoZXMnXS5r aW5kLCBjb3JlLnN2bl9ub2RlX2RpcikKKyAgICBzZWxmLmFzc2VydEVxdWFsKGRpcmVudHNbJ3Rh Z3MnXS5raW5kLCBjb3JlLnN2bl9ub2RlX2RpcikKKyAgICBzZWxmLmFzc2VydFRydWUocHJvcHMu aGFzX2tleShjb3JlLlNWTl9QUk9QX0VOVFJZX1VVSUQpKQorICAgIHNlbGYuYXNzZXJ0VHJ1ZShw cm9wcy5oYXNfa2V5KGNvcmUuU1ZOX1BST1BfRU5UUllfTEFTVF9BVVRIT1IpKQorCisgICAgKGRp cmVudHMsXyxfKSA9IHJhLmdldF9kaXIoc2VsZi5yYV9jdHgsICd0cnVuaycsIDEpCisKKyAgICBz ZWxmLmFzc2VydEVxdWFsKGRpcmVudHMsIHt9KQorCisgICAgKGRpcmVudHMsXyxfKSA9IHJhLmdl dF9kaXIoc2VsZi5yYV9jdHgsICd0cnVuaycsIDEwKQorCisgICAgc2VsZi5hc3NlcnRUcnVlKGRp cmVudHMuaGFzX2tleSgnUkVBRE1FMi50eHQnKSkKKyAgICBzZWxmLmFzc2VydEVxdWFsKGRpcmVu dHNbJ1JFQURNRTIudHh0J10ua2luZCxjb3JlLnN2bl9ub2RlX2ZpbGUpCisKKyAgZGVmIHRlc3Rf Y29tbWl0KHNlbGYpOgorICAgIGRlZiBteV9jYWxsYmFjayhyZXZpc2lvbiwgZGF0ZSwgYXV0aG9y LCBiYXRvbik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mby5yZXZpc2lvbiwgZnMueW91 bmdlc3RfcmV2KHNlbGYuZnMpKQorCisgICAgZWRpdG9yLCBlZGl0X2JhdG9uID0gcmEuZ2V0X2Nv bW1pdF9lZGl0b3Ioc2VsZi5yYV9jdHgsICJmb29iYXIiLCBteV9jYWxsYmFjaywgTm9uZSwgRmFs c2UpCisgICAgcm9vdCA9IGRlbHRhLmVkaXRvcl9pbnZva2Vfb3Blbl9yb290KGVkaXRvciwgZWRp dF9iYXRvbiwgNCkKKyAgICBjaGlsZCA9IGRlbHRhLmVkaXRvcl9pbnZva2VfYWRkX2RpcmVjdG9y eShlZGl0b3IsICJibGEiLCByb290LCBOb25lLCAwKQorICAgIGRlbHRhLmVkaXRvcl9pbnZva2Vf Y2xvc2VfZWRpdChlZGl0b3IsIGVkaXRfYmF0b24pCisKKyAgZGVmIHRlc3RfY29tbWl0KHNlbGYp OgorICAgIGRlZiBteV9jYWxsYmFjayhyZXZpc2lvbiwgZGF0ZSwgYXV0aG9yKToKKyAgICAgICAg c2VsZi5hc3NlcnRFcXVhbChyZXZpc2lvbiwgZnMueW91bmdlc3RfcmV2KHNlbGYuZnMpKQorCisg ICAgZWRpdG9yLCBlZGl0X2JhdG9uID0gcmEuZ2V0X2NvbW1pdF9lZGl0b3Ioc2VsZi5yYV9jdHgs ICJmb29iYXIiLCBteV9jYWxsYmFjaywgTm9uZSwgRmFsc2UpCisgICAgcm9vdCA9IGRlbHRhLmVk aXRvcl9pbnZva2Vfb3Blbl9yb290KGVkaXRvciwgZWRpdF9iYXRvbiwgNCkKKyAgICBjaGlsZCA9 IGRlbHRhLmVkaXRvcl9pbnZva2VfYWRkX2RpcmVjdG9yeShlZGl0b3IsICJibGFoIiwgcm9vdCwg Tm9uZSwgMCkKKyAgICBkZWx0YS5lZGl0b3JfaW52b2tlX2Nsb3NlX2VkaXQoZWRpdG9yLCBlZGl0 X2JhdG9uKQorCisgIGRlZiB0ZXN0X2NvbW1pdChzZWxmKToKKyAgICBkZWYgbXlfY2FsbGJhY2so cmV2aXNpb24sIGRhdGUsIGF1dGhvcik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV2aXNp b24sIGZzLnlvdW5nZXN0X3JldihzZWxmLmZzKSkKKworICAgIGVkaXRvciwgZWRpdF9iYXRvbiA9 IHJhLmdldF9jb21taXRfZWRpdG9yKHNlbGYucmFfY3R4LCAiZm9vYmFyIiwgbXlfY2FsbGJhY2ss IE5vbmUsIEZhbHNlKQorICAgIHJvb3QgPSBkZWx0YS5lZGl0b3JfaW52b2tlX29wZW5fcm9vdChl ZGl0b3IsIGVkaXRfYmF0b24sIDQpCisgICAgY2hpbGQgPSBkZWx0YS5lZGl0b3JfaW52b2tlX2Fk ZF9kaXJlY3RvcnkoZWRpdG9yLCAiYmxhaCIsIHJvb3QsIE5vbmUsIDApCisgICAgZGVsdGEuZWRp dG9yX2ludm9rZV9jbG9zZV9lZGl0KGVkaXRvciwgZWRpdF9iYXRvbikKKworICBkZWYgdGVzdF9n ZXRfbG9jYXRpb25zKHNlbGYpOgorICAgIGxvY2F0aW9ucyA9IHJhLmdldF9sb2NhdGlvbnMoc2Vs Zi5yYV9jdHgsICIvdHJ1bmsvUkVBRE1FLnR4dCIsIDIsIHJhbmdlKDEsNSkpCisgICAgc2VsZi5h c3NlcnRFcXVhbChsb2NhdGlvbnMsIHsKKyAgICAgICAgMjogJy90cnVuay9SRUFETUUudHh0Jywg CisgICAgICAgIDM6ICcvdHJ1bmsvUkVBRE1FLnR4dCcsIAorICAgICAgICA0OiAnL3RydW5rL1JF QURNRS50eHQnfSkKKworICBkZWYgdGVzdF9nZXRfZmlsZV9yZXZzKHNlbGYpOgorICAgIGRlZiBy ZXZfaGFuZGxlcihwYXRoLCByZXYsIHJldl9wcm9wcywgcHJvcF9kaWZmcywgcG9vbCk6CisgICAg ICAgIHNlbGYuYXNzZXJ0XyhyZXYgPT0gMiBvciByZXYgPT0gMykKKyAgICAgICAgc2VsZi5hc3Nl cnRFcXVhbChwYXRoLCAiL3RydW5rL1JFQURNRS50eHQiKQorICAgICAgICBpZiByZXYgPT0gMjoK KyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV2X3Byb3BzLCB7CisgICAgICAgICAgICAg ICdzdm46bG9nJzogJ0FkZGVkIFJFQURNRS4nLAorICAgICAgICAgICAgICAnc3ZuOmF1dGhvcic6 ICdqb2huJywKKyAgICAgICAgICAgICAgJ3N2bjpkYXRlJzogJzIwMDUtMDQtMDFUMTM6MTI6MTgu MjE2MjY3WicKKyAgICAgICAgICAgIH0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBy b3BfZGlmZnMsIHt9KQorICAgICAgICBlbGlmIHJldiA9PSAzOgorICAgICAgICAgICAgc2VsZi5h c3NlcnRFcXVhbChyZXZfcHJvcHMsIHsKKyAgICAgICAgICAgICAgJ3N2bjpsb2cnOiAnRml4ZWQg UkVBRE1FLlxuJywKKyAgICAgICAgICAgICAgJ3N2bjphdXRob3InOiAna2F0ZScsCisgICAgICAg ICAgICAgICdzdm46ZGF0ZSc6ICcyMDA1LTA0LTAxVDEzOjI0OjU4LjIzNDY0M1onCisgICAgICAg ICAgICB9KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm9wX2RpZmZzLCB7J3N2bjpt aW1lLXR5cGUnOiAndGV4dC9wbGFpbicsICdzdm46ZW9sLXN0eWxlJzogJ25hdGl2ZSd9KQorCisg ICAgcmEuZ2V0X2ZpbGVfcmV2cyhzZWxmLnJhX2N0eCwgInRydW5rL1JFQURNRS50eHQiLCAwLCAx MCwgcmV2X2hhbmRsZXIpCisKKyAgZGVmIHRlc3RfdXBkYXRlKHNlbGYpOgorICAgIGNsYXNzIFRl c3RFZGl0b3IoZGVsdGEuRWRpdG9yKToKKyAgICAgICAgcGFzcworCisgICAgZWRpdG9yID0gVGVz dEVkaXRvcigpCisKKyAgICBlX3B0ciwgZV9iYXRvbiA9IGRlbHRhLm1ha2VfZWRpdG9yKGVkaXRv cikKKyAgICAKKyAgICByZXBvcnRlciwgcmVwb3J0ZXJfYmF0b24gPSByYS5kb191cGRhdGUoc2Vs Zi5yYV9jdHgsIDEwLCAiIiwgVHJ1ZSwgZV9wdHIsIGVfYmF0b24pCisKKyAgICByYS5yZXBvcnRl cjJfaW52b2tlX3NldF9wYXRoKHJlcG9ydGVyLCByZXBvcnRlcl9iYXRvbiwgIiIsIDAsIFRydWUs IE5vbmUpCisKKyAgICByYS5yZXBvcnRlcjJfaW52b2tlX2ZpbmlzaF9yZXBvcnQocmVwb3J0ZXIs IHJlcG9ydGVyX2JhdG9uKQorCitkZWYgc3VpdGUoKToKKyAgICByZXR1cm4gdW5pdHRlc3QubWFr ZVN1aXRlKFN1YnZlcnNpb25SZXBvc2l0b3J5VGVzdENhc2UsICd0ZXN0JywKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHN1aXRlQ2xhc3M9U3VidmVyc2lvblJlcG9zaXRvcnlUZXN0U2V0 dXApCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgcnVubmVyID0gdW5pdHRlc3Qu VGV4dFRlc3RSdW5uZXIoKQorICAgIHJ1bm5lci5ydW4oc3VpdGUoKSkKZGlmZiAtTnVyIHN1YnZl cnNpb24tMS4zLjEvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3B5dGhvbi90ZXN0cy9ydW5fYWxs LnB5IHN1YnZlcnNpb24tMS4zLjEubmV3L3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24v dGVzdHMvcnVuX2FsbC5weQotLS0gc3VidmVyc2lvbi0xLjMuMS9zdWJ2ZXJzaW9uL2JpbmRpbmdz L3N3aWcvcHl0aG9uL3Rlc3RzL3J1bl9hbGwucHkJMjAwNS0xMC0wMiAwNToxODoyNS4wMDAwMDAw MDAgKzAxMDAKKysrIHN1YnZlcnNpb24tMS4zLjEubmV3L3N1YnZlcnNpb24vYmluZGluZ3Mvc3dp Zy9weXRob24vdGVzdHMvcnVuX2FsbC5weQkyMDA2LTA3LTA0IDE5OjAxOjA1LjAwMDAwMDAwMCAr MDEwMApAQCAtMSw2ICsxLDYgQEAKIGltcG9ydCBzeXMsIG9zCiBiaW5kaXIgPSBvcy5wYXRoLmRp cm5hbWUoc3lzLmFyZ3ZbMF0pCi1zeXMucGF0aFswOjBdID0gWyBvcy5nZXRjd2QoKSwgIiVzLy5s aWJzIiAlIG9zLmdldGN3ZCgpLCBcCitzeXMucGF0aFswOjBdID0gWyBiaW5kaXIsIG9zLmdldGN3 ZCgpLCAiJXMvLmxpYnMiICUgb3MuZ2V0Y3dkKCksIFwKICAgICAgICAgICAgICAgICAgICIlcy8u LiIgJSBiaW5kaXIsICIlcy8uLi8ubGlicyIgJSBiaW5kaXIgXQogCiAjIE9TZXMgd2l0aG91dCBS UEFUSCBzdXBwb3J0IGFyZSBnb2luZyB0byBoYXZlIHRvIGRvIHRoaW5ncyBoZXJlIHRvIG1ha2UK QEAgLTE3LDYgKzE3LDkgQEAKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IHBvb2wKIGltcG9ydCBy ZXBvc2l0b3J5CitpbXBvcnQgY2xpZW50CitpbXBvcnQgcmEKK2ltcG9ydCB3YwogaW1wb3J0IHRy YWMudmVyc2lvbmNvbnRyb2wudGVzdHMKIAogIyBSdW4gYWxsIHRlc3RzCkBAIC0yNCw3ICsyNywx MCBAQAogZGVmIHN1aXRlKCk6CiAgICIiIlJ1biBhbGwgdGVzdHMiIiIKICAgc3VpdGUgPSB1bml0 dGVzdC5UZXN0U3VpdGUoKQorICBzdWl0ZS5hZGRUZXN0KGNsaWVudC5zdWl0ZSgpKQogICBzdWl0 ZS5hZGRUZXN0KHBvb2wuc3VpdGUoKSkKKyAgc3VpdGUuYWRkVGVzdChyYS5zdWl0ZSgpKQorICBz dWl0ZS5hZGRUZXN0KHdjLnN1aXRlKCkpCiAgIHN1aXRlLmFkZFRlc3QocmVwb3NpdG9yeS5zdWl0 ZSgpKQogICBzdWl0ZS5hZGRUZXN0KHRyYWMudmVyc2lvbmNvbnRyb2wudGVzdHMuc3VpdGUoKSk7 CiAgIHJldHVybiBzdWl0ZQpkaWZmIC1OdXIgc3VidmVyc2lvbi0xLjMuMS9zdWJ2ZXJzaW9uL2Jp bmRpbmdzL3N3aWcvcHl0aG9uL3Rlc3RzL3djLnB5IHN1YnZlcnNpb24tMS4zLjEubmV3L3N1YnZl cnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vdGVzdHMvd2MucHkKLS0tIHN1YnZlcnNpb24tMS4z LjEvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3B5dGhvbi90ZXN0cy93Yy5weQkxOTcwLTAxLTAx IDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgc3VidmVyc2lvbi0xLjMuMS5uZXcvc3VidmVy c2lvbi9iaW5kaW5ncy9zd2lnL3B5dGhvbi90ZXN0cy93Yy5weQkyMDA2LTA3LTA0IDE5OjAxOjA1 LjAwMDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDE3NSBAQAoraW1wb3J0IHVuaXR0ZXN0LCBvcywg dGVtcGZpbGUKK2ltcG9ydCBzaHV0aWwKKworZnJvbSBzdm4gaW1wb3J0IGNvcmUsIHJlcG9zLCB3 YywgY2xpZW50Citmcm9tIGxpYnN2bi5jb3JlIGltcG9ydCBTdWJ2ZXJzaW9uRXhjZXB0aW9uCisK K2Zyb20gdHJhYy52ZXJzaW9uY29udHJvbC50ZXN0cy5zdm5fZnMgaW1wb3J0IFN1YnZlcnNpb25S ZXBvc2l0b3J5VGVzdFNldHVwLCBcCisgIFJFUE9TX1BBVEgKK2Zyb20gdXJsbGliIGltcG9ydCBw YXRobmFtZTJ1cmwKKworY2xhc3MgU3VidmVyc2lvblJlcG9zaXRvcnlUZXN0Q2FzZSh1bml0dGVz dC5UZXN0Q2FzZSk6CisgICIiIlRlc3QgY2FzZXMgZm9yIHRoZSBTdWJ2ZXJzaW9uIHdvcmtpbmcg Y29weSBsYXllciIiIgorCisgIGRlZiBzZXRVcChzZWxmKToKKyAgICAiIiJMb2FkIGEgU3VidmVy c2lvbiByZXBvc2l0b3J5IiIiCisKKyAgICBzZWxmLnJlcG9zX3VybCA9ICJmaWxlOi8vIiArIHBh dGhuYW1lMnVybChSRVBPU19QQVRIKQorICAgIAorICAgICMgT3BlbiByZXBvc2l0b3J5IGRpcmVj dGx5IGZvciBjcm9zcy1jaGVja2luZworICAgIHNlbGYucmVwb3MgPSByZXBvcy5vcGVuKFJFUE9T X1BBVEgpCisgICAgc2VsZi5mcyA9IHJlcG9zLmZzKHNlbGYucmVwb3MpCisKKyAgICBzZWxmLnBh dGggPSB0ZW1wZmlsZS5ta3RlbXAoKQorCisgICAgY2xpZW50X2N0eCA9IGNsaWVudC5jcmVhdGVf Y29udGV4dCgpCisgICAgCisgICAgcmV2ID0gY29yZS5zdm5fb3B0X3JldmlzaW9uX3QoKQorICAg IHJldi5raW5kID0gY29yZS5zdm5fb3B0X3JldmlzaW9uX2hlYWQKKworICAgIGNsaWVudC5jaGVj a291dDIoc2VsZi5yZXBvc191cmwsIHNlbGYucGF0aCwgcmV2LCByZXYsIFRydWUsIFRydWUsIAor ICAgICAgICAgICAgY2xpZW50X2N0eCkKKworICAgIHNlbGYud2MgPSB3Yy5hZG1fb3BlbjMoTm9u ZSwgc2VsZi5wYXRoLCBUcnVlLCAtMSwgTm9uZSkKKworICBkZWYgdGVzdF9lbnRyeShzZWxmKToK KyAgICAgIHdjX2VudHJ5ID0gd2MuZW50cnkoc2VsZi5wYXRoLCBzZWxmLndjLCBUcnVlKQorCisg IGRlZiB0ZXN0X2xvY2soc2VsZik6CisgICAgICBsb2NrID0gd2MuYWRkX2xvY2soc2VsZi5wYXRo LCBjb3JlLnN2bl9sb2NrX2NyZWF0ZShjb3JlLlBvb2woKSksIHNlbGYud2MpCisgICAgICBzZWxm LmFzc2VydEVxdWFsKFRydWUsIHdjLmFkbV9sb2NrZWQoc2VsZi53YykpCisgICAgICBzZWxmLmFz c2VydEVxdWFsKFRydWUsIHdjLmxvY2tlZChzZWxmLnBhdGgpKQorICAgICAgd2MucmVtb3ZlX2xv Y2soc2VsZi5wYXRoLCBzZWxmLndjKQorCisgIGRlZiB0ZXN0X3ZlcnNpb24oc2VsZik6CisgICAg ICB3Yy52ZXJzaW9uKCkKKworICBkZWYgdGVzdF9hY2Nlc3NfcGF0aChzZWxmKToKKyAgICAgIHNl bGYuYXNzZXJ0RXF1YWwoc2VsZi5wYXRoLCB3Yy5hZG1fYWNjZXNzX3BhdGgoc2VsZi53YykpCisK KyAgZGVmIHRlc3RfaXNfYWRtX2RpcihzZWxmKToKKyAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3Yy5p c19hZG1fZGlyKCIuc3ZuIikpCisgICAgICBzZWxmLmFzc2VydEZhbHNlKHdjLmlzX2FkbV9kaXIo Ii5mb29zdm4iKSkKKworICBkZWYgdGVzdF9nZXRfYWRtX2RpcihzZWxmKToKKyAgICAgIHNlbGYu YXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHdjLmdldF9hZG1fZGlyKCksIGJhc2VzdHJpbmcpKQorCisg IGRlZiB0ZXN0X3NldF9hZG1fZGlyKHNlbGYpOgorICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3Vi dmVyc2lvbkV4Y2VwdGlvbiwgd2Muc2V0X2FkbV9kaXIsICIuZm9vYmFyIikKKyAgICAgIHNlbGYu YXNzZXJ0VHJ1ZSh3Yy5pc19hZG1fZGlyKCIuc3ZuIikpCisgICAgICBzZWxmLmFzc2VydEZhbHNl KHdjLmlzX2FkbV9kaXIoIl9zdm4iKSkKKyAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uod2MuaXNfYWRt X2RpcigiLmZvb2JhciIpKQorICAgICAgd2Muc2V0X2FkbV9kaXIoIl9zdm4iKQorICAgICAgc2Vs Zi5hc3NlcnRUcnVlKHdjLmlzX2FkbV9kaXIoIl9zdm4iKSkKKyAgICAgIHNlbGYuYXNzZXJ0RXF1 YWwoIl9zdm4iLCB3Yy5nZXRfYWRtX2RpcigpKQorICAgICAgd2Muc2V0X2FkbV9kaXIoIi5zdm4i KQorICAgICAgc2VsZi5hc3NlcnRGYWxzZSh3Yy5pc19hZG1fZGlyKCJfc3ZuIikpCisgICAgICBz ZWxmLmFzc2VydEVxdWFsKCIuc3ZuIiwgd2MuZ2V0X2FkbV9kaXIoKSkKKworICBkZWYgdGVzdF9p bml0X3RyYXZlcnNhbF9pbmZvKHNlbGYpOgorICAgICAgd2MuaW5pdF90cmF2ZXJzYWxfaW5mbygp CisKKyAgZGVmIHRlc3RfY3Jhd2xfcmV2aXNpb25zMihzZWxmKToKKyAgICAgIGluZm9zID0gW10K KyAgICAgIHNldF9wYXRocyA9IFtdCisKKyAgICAgIGRlZiBub3RpZnkoaW5mbywgcG9vbCk6Cisg ICAgICAgICAgaW5mb3MuYXBwZW5kKGluZm8pCisKKyAgICAgIGNsYXNzIE15UmVwb3J0ZXI6Cisg ICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgICBzZWxmLl9maW5pc2hl ZF9yZXBvcnQgPSBGYWxzZQorCisgICAgICAgICAgZGVmIGFib3J0X3JlcG9ydChzZWxmLCBwb29s KToKKyAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgZGVmIGZpbmlzaF9yZXBvcnQoc2Vs ZiwgcG9vbCk6CisgICAgICAgICAgICAgIHNlbGYuX2ZpbmlzaGVkX3JlcG9ydCA9IFRydWUKKwor ICAgICAgICAgIGRlZiBzZXRfcGF0aChzZWxmLCBwYXRoLCByZXZpc2lvbiwgc3RhcnRfZW1wdHks IGxvY2tfdG9rZW4sIHBvb2wpOgorICAgICAgICAgICAgICBzZXRfcGF0aHMuYXBwZW5kKHBhdGgp CisKKyAgICAgICAgICBkZWYgbGlua19wYXRoKHNlbGYsIHBhdGgsIHVybCwgcmV2aXNpb24sIHN0 YXJ0X2VtcHR5LCBsb2NrX3Rva2VuLAorICAgICAgICAgICAgICAgICAgICAgICAgcG9vbCk6Cisg ICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgIGRlZiBkZWxldGVfcGF0aChzZWxmLCBwYXRo LCBwb29sKToKKyAgICAgICAgICAgICAgcGFzcworCisgICAgICAjIFJlbW92ZSB0cnVuay9SRUFE TUUudHh0CisgICAgICByZWFkbWVfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLnBhdGgsICJ0cnVu ayIsICJSRUFETUUudHh0IikKKyAgICAgIHNlbGYuYXNzZXJ0Xyhvcy5wYXRoLmV4aXN0cyhyZWFk bWVfcGF0aCkpCisgICAgICBvcy5yZW1vdmUocmVhZG1lX3BhdGgpCisKKyAgICAgICMgUmVzdG9y ZSB0cnVuay9SRUFETUUudHh0IHVzaW5nIGNyYXdsX3JldmlzaW9uMgorICAgICAgaW5mbyA9IHdj LmluaXRfdHJhdmVyc2FsX2luZm8oKQorICAgICAgcmVwb3J0ZXIgPSBNeVJlcG9ydGVyKCkKKyAg ICAgIHdjLmNyYXdsX3JldmlzaW9uczIoc2VsZi5wYXRoLCBzZWxmLndjLCByZXBvcnRlciwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZSwgVHJ1ZSwgRmFsc2UsIG5vdGlmeSwgaW5mbykK KworICAgICAgIyBDaGVjayB0aGF0IHRoZSByZXBvcnQgZmluaXNoZWQKKyAgICAgIHNlbGYuYXNz ZXJ0XyhyZXBvcnRlci5fZmluaXNoZWRfcmVwb3J0KQorICAgICAgc2VsZi5hc3NlcnRFcXVhbChb JyddLCBzZXRfcGF0aHMpCisgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihpbmZvcykpCisK KyAgICAgICMgQ2hlY2sgY29udGVudCBvZiBpbmZvcyBvYmplY3QKKyAgICAgIFtpbmZvXSA9IGlu Zm9zCisgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRtZV9wYXRoLCBpbmZvLnBhdGgpCisgICAg ICBzZWxmLmFzc2VydEVxdWFsKGNvcmUuc3ZuX25vZGVfZmlsZSwgaW5mby5raW5kKQorICAgICAg c2VsZi5hc3NlcnRFcXVhbCgtMSwgaW5mby5yZXZpc2lvbikKKworICBkZWYgdGVzdF9jcmVhdGVf bm90aWZ5KHNlbGYpOgorICAgICAgd2MuY3JlYXRlX25vdGlmeShzZWxmLnBhdGgsIHdjLm5vdGlm eV9hZGQpCisKKyAgZGVmIHRlc3RfY2hlY2tfd2Moc2VsZik6CisgICAgICBzZWxmLmFzc2VydFRy dWUod2MuY2hlY2tfd2Moc2VsZi5wYXRoKSA+IDApCisKKyAgZGVmIHRlc3RfZ2V0X2FuY2VzdHJ5 KHNlbGYpOgorICAgICAgc2VsZi5hc3NlcnRFcXVhbChbc2VsZi5yZXBvc191cmwsIDEyXSwgCisg ICAgICAgICAgICAgICAgICAgICAgIHdjLmdldF9hbmNlc3RyeShzZWxmLnBhdGgsIHNlbGYud2Mp KQorCisgIGRlZiB0ZXN0X3N0YXR1cyhzZWxmKToKKyAgICAgIHdjLnN0YXR1czIoc2VsZi5wYXRo LCBzZWxmLndjKQorCisgIGRlZiB0ZXN0X2lzX25vcm1hbF9wcm9wKHNlbGYpOgorICAgICAgc2Vs Zi5mYWlsSWYod2MuaXNfbm9ybWFsX3Byb3AoJ3N2bjp3Yzpmb286YmFyJykpCisgICAgICBzZWxm LmZhaWxJZih3Yy5pc19ub3JtYWxfcHJvcCgnc3ZuOmVudHJ5OmZvbzpiYXInKSkKKyAgICAgIHNl bGYuYXNzZXJ0Xyh3Yy5pc19ub3JtYWxfcHJvcCgnc3ZuOmZvbzpiYXInKSkKKyAgICAgIHNlbGYu YXNzZXJ0Xyh3Yy5pc19ub3JtYWxfcHJvcCgnZm9yZWlnbjpmb286YmFyJykpCisKKyAgZGVmIHRl c3RfaXNfd2NfcHJvcChzZWxmKToKKyAgICAgIHNlbGYuYXNzZXJ0Xyh3Yy5pc193Y19wcm9wKCdz dm46d2M6Zm9vOmJhcicpKQorICAgICAgc2VsZi5mYWlsSWYod2MuaXNfd2NfcHJvcCgnc3ZuOmVu dHJ5OmZvbzpiYXInKSkKKyAgICAgIHNlbGYuZmFpbElmKHdjLmlzX3djX3Byb3AoJ3N2bjpmb286 YmFyJykpCisgICAgICBzZWxmLmZhaWxJZih3Yy5pc193Y19wcm9wKCdmb3JlaWduOmZvbzpiYXIn KSkKKworICBkZWYgdGVzdF9pc19lbnRyeV9wcm9wKHNlbGYpOgorICAgICAgc2VsZi5hc3NlcnRf KHdjLmlzX2VudHJ5X3Byb3AoJ3N2bjplbnRyeTpmb286YmFyJykpCisgICAgICBzZWxmLmZhaWxJ Zih3Yy5pc19lbnRyeV9wcm9wKCdzdm46d2M6Zm9vOmJhcicpKQorICAgICAgc2VsZi5mYWlsSWYo d2MuaXNfZW50cnlfcHJvcCgnc3ZuOmZvbzpiYXInKSkKKyAgICAgIHNlbGYuZmFpbElmKHdjLmlz X2VudHJ5X3Byb3AoJ2ZvcmVpZ246Zm9vOmJhcicpKQorCisgIGRlZiB0ZXN0X2dldF9wcmlzdGlu ZV9jb3B5X3BhdGgoc2VsZik6CisgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICB3Yy5n ZXRfcHJpc3RpbmVfY29weV9wYXRoKG9zLnBhdGguam9pbihzZWxmLnBhdGgsICdmb28nKSksCisg ICAgICAgIG9zLnBhdGguam9pbihzZWxmLnBhdGgsIHdjLmdldF9hZG1fZGlyKCksICd0ZXh0LWJh c2UnLCAnZm9vLnN2bi1iYXNlJykpCisKKyAgZGVmIHRlc3RfZ2V0X2lnbm9yZXMoc2VsZik6Cisg ICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZSh3Yy5nZXRfaWdub3JlcyhOb25lLCBzZWxmLndj KSwgbGlzdCkpCisKKyAgZGVmIHRlc3RfZW50cmllc19yZWFkKHNlbGYpOgorICAgICAgZW50cmll cyA9IHdjLmVudHJpZXNfcmVhZChzZWxmLndjLCBUcnVlKQorICAgICAgICAKKyAgICAgIHNlbGYu YXNzZXJ0RXF1YWwoWycnLCAndGFncycsICdicmFuY2hlcycsICd0cnVuayddLCBlbnRyaWVzLmtl eXMoKSkKKworICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICB3Yy5hZG1fY2xvc2Uoc2VsZi53 YykKKyAgICAgIHNodXRpbC5ybXRyZWUoc2VsZi5wYXRoKQorCitkZWYgc3VpdGUoKToKKyAgICBy ZXR1cm4gdW5pdHRlc3QubWFrZVN1aXRlKFN1YnZlcnNpb25SZXBvc2l0b3J5VGVzdENhc2UsICd0 ZXN0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1aXRlQ2xhc3M9U3VidmVyc2lv blJlcG9zaXRvcnlUZXN0U2V0dXApCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAg cnVubmVyID0gdW5pdHRlc3QuVGV4dFRlc3RSdW5uZXIoKQorICAgIHJ1bm5lci5ydW4oc3VpdGUo KSkKZGlmZiAtTnVyIHN1YnZlcnNpb24tMS4zLjEvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3N2 bl9jbGllbnQuaSBzdWJ2ZXJzaW9uLTEuMy4xLm5ldy9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcv c3ZuX2NsaWVudC5pCi0tLSBzdWJ2ZXJzaW9uLTEuMy4xL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dp Zy9zdm5fY2xpZW50LmkJMjAwNi0wMS0wNCAxNzoyMDowOC4wMDAwMDAwMDAgKzAwMDAKKysrIHN1 YnZlcnNpb24tMS4zLjEubmV3L3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9zdm5fY2xpZW50LmkJ MjAwNi0wNy0wNCAxOTowMTowNS4wMDAwMDAwMDAgKzAxMDAKQEAgLTI1LDYgKzI1LDcgQEAKICNl bmRpZgogCiAlaW5jbHVkZSB0eXBlbWFwcy5pCislaW5jbHVkZSBjb25zdHJhaW50cy5pCiAKICVp bmNsdWRlIHN2bl9nbG9iYWwuc3dnCiAlaW1wb3J0IGNvcmUuaQpAQCAtNDQsNiArNDUsMTEgQEAK ICAgc3ZuX2NsaWVudF9jdHhfdCAqKgogfTsKIAorJWFwcGx5IFBvaW50ZXIgTk9OTlVMTCB7IAor ICBjb25zdCBzdm5fb3B0X3JldmlzaW9uX3QgKnJldmlzaW9uLAorICBjb25zdCBzdm5fb3B0X3Jl dmlzaW9uX3QgKnBlZ19yZXZpc2lvbgorfTsKKwogJWFwcGx5IGNvbnN0IGFwcl9hcnJheV9oZWFk ZXJfdCAqU1RSSU5HTElTVCB7CiAgICAgY29uc3QgYXByX2FycmF5X2hlYWRlcl90ICp0YXJnZXRz LAogICAgIGNvbnN0IGFwcl9hcnJheV9oZWFkZXJfdCAqZGlmZl9vcHRpb25zCkBAIC02Niw2ICs3 MiwxNiBAQAogCiAjaWZkZWYgU1dJR1BZVEhPTgogJWFwcGx5IHN2bl9zdHJlYW1fdCAqV1JBUFBF RF9TVFJFQU0geyBzdm5fc3RyZWFtX3QgKiB9OworCisvKiBtZW1iZXJzIG9mIHN2bl9jbGllbnRf Y3R4X3QgKi8KKyVhcHBseSB2b2lkICpQWV9BU19WT0lEIHsKKyAgICB2b2lkICpub3RpZnlfYmF0 b24sCisgICAgdm9pZCAqbG9nX21zZ19iYXRvbiwKKyAgICB2b2lkICpjYW5jZWxfYmF0b24sCisg ICAgdm9pZCAqbm90aWZ5X2JhdG9uMiwKKyAgICB2b2lkICpsb2dfbXNnX2JhdG9uMiwKKyAgICB2 b2lkICpwcm9ncmVzc19iYXRvbgorfTsKICNlbmRpZgogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAt MjAwLDYgKzIxNiwxOCBAQAogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgQ2FsbGJhY2s6IHN2 bl9pbmZvX3JlY2VpdmVyX3QKKyAgIHN2bl9jbGllbnRfaW5mbygpCisqLworCisldHlwZW1hcChw eXRob24sIGluKSAoc3ZuX2luZm9fcmVjZWl2ZXJfdCByZWNlaXZlciwgCisgICAgICAgICAgICAg ICAgICAgICAgdm9pZCAqcmVjZWl2ZXJfYmF0b24pIHsKKyAgICAkMSA9IHN2bl9zd2lnX3B5X2lu Zm9fcmVjZWl2ZXJfZnVuYzsKKyAgICAkMiA9ICh2b2lkICopJGlucHV0OworfQorCisKKy8qIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCiAgICBXZSB1c2UgJ3N2bl93Y19zdGF0dXNfdCAqJyBpbiBzb21lIGN1c3Rv bSBjb2RlLCBidXQgaXQgaXNuJ3QgaW4gdGhlCiAgICBBUEkgYW55d2hlcmUuIFRodXMsIFNXSUcg ZG9lc24ndCBnZW5lcmF0ZSBhIHR5cGVtYXAgZW50cnkgZm9yIGl0LiBieQogICAgYWRkaW5nIGEg c2ltcGxlIGRlY2xhcmF0aW9uIGhlcmUsIFNXSUcgd2lsbCBpbnNlcnQgYSBuYW1lIGZvciBpdC4K QEAgLTQ4Myw2ICs1MTEsMjQgQEAKICVpbmNsdWRlIHN2bl90aW1lX2guc3dnCiAlaW5jbHVkZSBz dm5fY2xpZW50X2guc3dnCiAKKyNpZmRlZiBTV0lHUFlUSE9OCisKKy8qIHByb3ZpZGUgUHl0aG9u IHdpdGggYWNjZXNzIHRvIHNvbWUgdGh1bmtzLiAqLworJWNvbnN0YW50IHN2bl9jYW5jZWxfZnVu Y190IHN2bl9zd2lnX3B5X2NhbmNlbF9mdW5jOworJWNvbnN0YW50IHN2bl9jbGllbnRfZ2V0X2Nv bW1pdF9sb2cyX3Qgc3ZuX3N3aWdfcHlfZ2V0X2NvbW1pdF9sb2dfZnVuYzsKKyVjb25zdGFudCBz dm5fd2Nfbm90aWZ5X2Z1bmMyX3Qgc3ZuX3N3aWdfcHlfbm90aWZ5X2Z1bmM7CisKKyNlbmRpZgor CisjaWZkZWYgU1dJR1BZVEhPTgorCisvKiBwcm92aWRlIFB5dGhvbiB3aXRoIGFjY2VzcyB0byBz b21lIHRodW5rcy4gKi8KKyVjb25zdGFudCBzdm5fY2FuY2VsX2Z1bmNfdCBzdm5fc3dpZ19weV9j YW5jZWxfZnVuYzsKKyVjb25zdGFudCBzdm5fY2xpZW50X2dldF9jb21taXRfbG9nMl90IHN2bl9z d2lnX3B5X2dldF9jb21taXRfbG9nX2Z1bmM7CislY29uc3RhbnQgc3ZuX3djX25vdGlmeV9mdW5j Ml90IHN2bl9zd2lnX3B5X25vdGlmeV9mdW5jOworCisjZW5kaWYKKwogI2lmZGVmIFNXSUdSVUJZ CiAlaW5saW5lICV7CiBzdGF0aWMgVkFMVUUKZGlmZiAtTnVyIHN1YnZlcnNpb24tMS4zLjEvc3Vi dmVyc2lvbi9iaW5kaW5ncy9zd2lnL3N2bl9jbGllbnQuaS5vcmlnIHN1YnZlcnNpb24tMS4zLjEu bmV3L3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9zdm5fY2xpZW50Lmkub3JpZwotLS0gc3VidmVy c2lvbi0xLjMuMS9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvc3ZuX2NsaWVudC5pLm9yaWcJMTk3 MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIHN1YnZlcnNpb24tMS4zLjEubmV3 L3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9zdm5fY2xpZW50Lmkub3JpZwkyMDA2LTA3LTA0IDE5 OjAxOjA2LjAwMDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDU1OCBAQAorLyoKKyAqIHN2bl9jbGll bnQuaSA6ICBTV0lHIGludGVyZmFjZSBmaWxlIGZvciBzdm5fY2xpZW50LmgKKyAqCisgKiA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQorICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQ29sbGFiTmV0LiAgQWxsIHJpZ2h0 cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJl ZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVk IGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uICBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2 YWlsYWJsZSBhdCBodHRwOi8vc3VidmVyc2lvbi50aWdyaXMub3JnL2xpY2Vuc2UtMS5odG1sLgor ICogSWYgbmV3ZXIgdmVyc2lvbnMgb2YgdGhpcyBsaWNlbnNlIGFyZSBwb3N0ZWQgdGhlcmUsIHlv dSBtYXkgdXNlIGEKKyAqIG5ld2VyIHZlcnNpb24gaW5zdGVhZCwgYXQgeW91ciBvcHRpb24uCisg KgorICogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBt YWRlIGJ5IG1hbnkKKyAqIGluZGl2aWR1YWxzLiAgRm9yIGV4YWN0IGNvbnRyaWJ1dGlvbiBoaXN0 b3J5LCBzZWUgdGhlIHJldmlzaW9uCisgKiBoaXN0b3J5IGFuZCBsb2dzLCBhdmFpbGFibGUgYXQg aHR0cDovL3N1YnZlcnNpb24udGlncmlzLm9yZy8uCisgKiA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKKyNp ZiBkZWZpbmVkKFNXSUdQRVJMKQorJW1vZHVsZSAiU1ZOOjpfQ2xpZW50IgorI2VsaWYgZGVmaW5l ZChTV0lHUlVCWSkKKyVtb2R1bGUgInN2bjo6ZXh0OjpjbGllbnQiCisjZWxzZQorJW1vZHVsZSBj bGllbnQKKyNlbmRpZgorCislaW5jbHVkZSB0eXBlbWFwcy5pCislaW5jbHVkZSBjb25zdHJhaW50 cy5pCisKKyVpbmNsdWRlIHN2bl9nbG9iYWwuc3dnCislaW1wb3J0IGNvcmUuaQorJWltcG9ydCBh cHIuc3dnCislaW1wb3J0IHN2bl90eXBlcy5zd2cKKyVpbXBvcnQgc3ZuX3N0cmluZy5zd2cKKyVp bXBvcnQgc3ZuX2RlbHRhLmkKKyVpbXBvcnQgc3ZuX3djLmkKKworLyogLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAgICVhcHBseS1pbmcgb2YgdHlwZW1hcHMgZGVmaW5lZCBlbHNld2hlcmUKKyovCisKKyVhcHBs eSBTV0lHVFlQRSAqKk9VVFBBUkFNIHsKKyAgc3ZuX2NsaWVudF9jb21taXRfaW5mb190ICoqLAor ICBzdm5fYXV0aF9wcm92aWRlcl9vYmplY3RfdCAqKiwKKyAgc3ZuX2NsaWVudF9jdHhfdCAqKgor fTsKKworJWFwcGx5IFBvaW50ZXIgTk9OTlVMTCB7IAorICBjb25zdCBzdm5fb3B0X3JldmlzaW9u X3QgKnJldmlzaW9uLAorICBjb25zdCBzdm5fb3B0X3JldmlzaW9uX3QgKnBlZ19yZXZpc2lvbgor fTsKKworJWFwcGx5IGNvbnN0IGFwcl9hcnJheV9oZWFkZXJfdCAqU1RSSU5HTElTVCB7CisgICAg Y29uc3QgYXByX2FycmF5X2hlYWRlcl90ICp0YXJnZXRzLAorICAgIGNvbnN0IGFwcl9hcnJheV9o ZWFkZXJfdCAqZGlmZl9vcHRpb25zCit9OworCislYXBwbHkgY29uc3QgY2hhciAqTUFZX0JFX05V TEwgeworICAgIGNvbnN0IGNoYXIgKm5hdGl2ZV9lb2wsCisgICAgY29uc3QgY2hhciAqY29tbWVu dAorfTsKKworLyogc3ZuX2NsaWVudF9wcm9wZ2V0KCksIHN2bl9jbGllbnRfcHJvcGxpc3QoKSwg c3ZuX2NsaWVudF9yZXZwcm9wX2xpc3QoKSAqLworJWFwcGx5IGFwcl9oYXNoX3QgKipQUk9QSEFT SCB7IGFwcl9oYXNoX3QgKipwcm9wcyB9OworCisvKiBzdm5fY2xpZW50X3VybF9mcm9tX3BhdGgo KSwgc3ZuX2NsaWVudF91dWlkX2Zyb21fdXJsKCkKKyAqIHN2bl9jbGllbnRfdXVpZF9mcm9tX3Bh dGggKi8KKyVhcHBseSBjb25zdCBjaGFyICoqT1VUUFVUIHsKKyAgICBjb25zdCBjaGFyICoqdXJs LAorICAgIGNvbnN0IGNoYXIgKip1dWlkCit9OworCisjaWZkZWYgU1dJR1BZVEhPTgorJWFwcGx5 IHN2bl9zdHJlYW1fdCAqV1JBUFBFRF9TVFJFQU0geyBzdm5fc3RyZWFtX3QgKiB9OworCisvKiBt ZW1iZXJzIG9mIHN2bl9jbGllbnRfY3R4X3QgKi8KKyVhcHBseSB2b2lkICpQWV9BU19WT0lEIHsK KyAgICB2b2lkICpub3RpZnlfYmF0b24sCisgICAgdm9pZCAqbG9nX21zZ19iYXRvbiwKKyAgICB2 b2lkICpjYW5jZWxfYmF0b24sCisgICAgdm9pZCAqbm90aWZ5X2JhdG9uMiwKKyAgICB2b2lkICps b2dfbXNnX2JhdG9uMiwKKyAgICB2b2lkICpwcm9ncmVzc19iYXRvbgorfTsKKyNlbmRpZgorCisv KiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorICAgc3ZuX2NsaWVudF9wcm9wbGlzdCgpCisgICByZXR1cm5zIGFw cl9hcnJheV9oZWFkZXJfdCAqIDxzdm5fY2xpZW50X3Byb3BsaXN0X2l0ZW1fdCAqPgorKi8KKwor JXR5cGVtYXAoaW4sIG51bWlucHV0cz0wKSBhcHJfYXJyYXlfaGVhZGVyX3QgKipwcm9wcyAoYXBy X2FycmF5X2hlYWRlcl90ICp0ZW1wKSB7CisgICAgJDEgPSAmdGVtcDsKK30KKworLyogc3ZuX2Ns aWVudF9wcm9wbGlzdF9pdGVtX3QgaXMgdXNlZCBleGNsdXNpdmVseSBmb3Igc3ZuX2NsaWVudF9w cm9wbGlzdCgpLgorICAgVGhlIHB5dGhvbiBiaW5kaW5ncyBjb252ZXJ0IGl0IHRvIGEgbmF0aXZl IHB5dGhvbiB0dXBsZS4gKi8KKyNpZmRlZiBTV0lHUFlUSE9OCisgICAgJWlnbm9yZSBzdm5fY2xp ZW50X3Byb3BsaXN0X2l0ZW1fdDsKKyNlbmRpZgorJXR5cGVtYXAocHl0aG9uLCBhcmdvdXQsIGZy YWdtZW50PSJ0X291dHB1dF9oZWxwZXIiKSBhcHJfYXJyYXlfaGVhZGVyX3QgKipwcm9wcworewor ICAgIHN2bl9jbGllbnRfcHJvcGxpc3RfaXRlbV90ICoqcHBpdGVtOworICAgIGludCBpOworICAg IGludCBuZWx0cyA9ICgqJDEpLT5uZWx0czsKKyAgICBQeU9iamVjdCAqbGlzdCA9IFB5TGlzdF9O ZXcobmVsdHMpOworICAgIGlmIChsaXN0ID09IE5VTEwpCisgICAgICAgIFNXSUdfZmFpbDsKKyAg ICBwcGl0ZW0gPSAoc3ZuX2NsaWVudF9wcm9wbGlzdF9pdGVtX3QgKiopKCokMSktPmVsdHM7Cisg ICAgZm9yIChpID0gMDsgaSA8IG5lbHRzOyArK2ksICsrcHBpdGVtKSB7CisgICAgICAgIFB5T2Jq ZWN0ICppdGVtID0gUHlUdXBsZV9OZXcoMik7CisgICAgICAgIFB5T2JqZWN0ICpuYW1lID0gUHlT dHJpbmdfRnJvbVN0cmluZ0FuZFNpemUoKCpwcGl0ZW0pLT5ub2RlX25hbWUtPmRhdGEsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCpwcGl0ZW0p LT5ub2RlX25hbWUtPmxlbik7CisgICAgICAgIFB5T2JqZWN0ICpoYXNoID0gc3ZuX3N3aWdfcHlf cHJvcGhhc2hfdG9fZGljdCgoKnBwaXRlbSktPnByb3BfaGFzaCk7CisKKyAgICAgICAgaWYgKGl0 ZW0gPT0gTlVMTCB8fCBuYW1lID09IE5VTEwgfHwgaGFzaCA9PSBOVUxMKSB7CisgICAgICAgICAg ICBQeV9YREVDUkVGKGl0ZW0pOworICAgICAgICAgICAgUHlfWERFQ1JFRihuYW1lKTsKKyAgICAg ICAgICAgIFB5X1hERUNSRUYoaGFzaCk7CisgICAgICAgICAgICBQeV9ERUNSRUYobGlzdCk7Cisg ICAgICAgICAgICBTV0lHX2ZhaWw7CisgICAgICAgIH0KKyAgICAgICAgUHlUdXBsZV9TRVRfSVRF TShpdGVtLCAwLCBuYW1lKTsKKyAgICAgICAgUHlUdXBsZV9TRVRfSVRFTShpdGVtLCAxLCBoYXNo KTsKKworICAgICAgICBQeUxpc3RfU0VUX0lURU0obGlzdCwgaSwgaXRlbSk7CisgICAgfQorICAg ICRyZXN1bHQgPSB0X291dHB1dF9oZWxwZXIoJHJlc3VsdCwgbGlzdCk7Cit9CisKKyV0eXBlbWFw KHJ1YnksIGFyZ291dCkgYXByX2FycmF5X2hlYWRlcl90ICoqcHJvcHMKK3sKKyAgJHJlc3VsdCA9 IHN2bl9zd2lnX3JiX2Fwcl9hcnJheV90b19hcnJheV9wcm9wbGlzdF9pdGVtKCokMSk7Cit9CisK KyV0eXBlbWFwKHJ1YnksIG91dCkgYXByX2hhc2hfdCAqcHJvcF9oYXNoCit7CisgICRyZXN1bHQg PSBzdm5fc3dpZ19yYl9wcm9wX2hhc2hfdG9faGFzaCgkMSk7Cit9CisKKyV0eXBlbWFwKHBlcmw1 LGFyZ291dCkgYXByX2FycmF5X2hlYWRlcl90ICoqcHJvcHMgeworICAgICRyZXN1bHQgPSBzdm5f c3dpZ19wbF9jb252ZXJ0X2FycmF5KCokMSwKKyAgICAgICRkZXNjcmlwdG9yKHN2bl9jbGllbnRf cHJvcGxpc3RfaXRlbV90ICopKTsKKyAgICBhcmd2aSsrOworfQorCisldHlwZW1hcChwZXJsNSxv dXQpIGFwcl9oYXNoX3QgKnByb3BfaGFzaCB7CisgICAgJHJlc3VsdCA9IHN2bl9zd2lnX3BsX3By b3BoYXNoX3RvX2hhc2goJDEpOworICAgIGFyZ3ZpKys7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgICBDYWxsYmFjazogc3ZuX2NsaWVudF9nZXRfY29tbWl0X2xvZ190CisgICBzdm5fY2xpZW50 X2N0eF90CisqLworCisldHlwZW1hcChweXRob24saW4pIChzdm5fY2xpZW50X2dldF9jb21taXRf bG9nX3QgbG9nX21zZ19mdW5jLCAKKyAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmxvZ19tc2df YmF0b24pIHsKKworICAkMSA9IHN2bl9zd2lnX3B5X2dldF9jb21taXRfbG9nX2Z1bmM7CisgICQy ID0gJGlucHV0OyAvKiBvdXIgZnVuY3Rpb24gaXMgdGhlIGJhdG9uLiAqLworfQorCisldHlwZW1h cChydWJ5LCBpbikgKHN2bl9jbGllbnRfZ2V0X2NvbW1pdF9sb2cyX3QgbG9nX21zZ19mdW5jMiwK KyAgICAgICAgICAgICAgICAgICAgdm9pZCAqbG9nX21zZ19iYXRvbjIpCit7CisgICQxID0gc3Zu X3N3aWdfcmJfZ2V0X2NvbW1pdF9sb2dfZnVuYzI7CisgICQyID0gKHZvaWQgKilzdm5fc3dpZ19y Yl9tYWtlX2JhdG9uKCRpbnB1dCwgX2dsb2JhbF9zdm5fc3dpZ19yYl9wb29sKTsKK30KKworLyog LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAgIENhbGxiYWNrOiBzdm5fY2FuY2VsX2Z1bmNfdAorICAgc3ZuX2Ns aWVudF9jdHhfdAorKi8KKworJXR5cGVtYXAocnVieSwgaW4pIChzdm5fY2FuY2VsX2Z1bmNfdCBj YW5jZWxfZnVuYywgdm9pZCAqY2FuY2VsX2JhdG9uKQoreworICAkMSA9IHN2bl9zd2lnX3JiX2Nh bmNlbF9mdW5jOworICAkMiA9ICh2b2lkICopc3ZuX3N3aWdfcmJfbWFrZV9iYXRvbigkaW5wdXQs IF9nbG9iYWxfc3ZuX3N3aWdfcmJfcG9vbCk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBD YWxsYmFjazogc3ZuX3djX25vdGlmeV9mdW5jMl90CisgICBzdm5fY2xpZW50X2N0eF90CisqLwor CisldHlwZW1hcChydWJ5LCBpbikgKHN2bl93Y19ub3RpZnlfZnVuYzJfdCBub3RpZnlfZnVuYzIs IHZvaWQgKm5vdGlmeV9iYXRvbjIpCit7CisgICQxID0gc3ZuX3N3aWdfcmJfbm90aWZ5X2Z1bmMy OworICAkMiA9ICh2b2lkICopc3ZuX3N3aWdfcmJfbWFrZV9iYXRvbigkaW5wdXQsIF9nbG9iYWxf c3ZuX3N3aWdfcmJfcG9vbCk7Cit9CisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIENhbGxiYWNr OiBzdm5fY2xpZW50X2JsYW1lX3JlY2VpdmVyX3QKKyAgIHN2bl9jbGllbnRfYmxhbWUoKQorKi8K KworJXR5cGVtYXAocHl0aG9uLCBpbikgKHN2bl9jbGllbnRfYmxhbWVfcmVjZWl2ZXJfdCByZWNl aXZlciwgCisgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcmVjZWl2ZXJfYmF0b24pIHsKKyAg ICAkMSA9IHN2bl9zd2lnX3B5X2NsaWVudF9ibGFtZV9yZWNlaXZlcl9mdW5jOworICAgICQyID0g KHZvaWQgKikkaW5wdXQ7Cit9CisKKyV0eXBlbWFwKHBlcmw1LCBpbikgKHN2bl9jbGllbnRfYmxh bWVfcmVjZWl2ZXJfdCByZWNlaXZlciwKKyAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnJlY2Vp dmVyX2JhdG9uKSB7CisgICQxID0gc3ZuX3N3aWdfcGxfYmxhbWVfZnVuYzsKKyAgJDIgPSAkaW5w dXQ7IC8qIG91ciBmdW5jdGlvbiBpcyB0aGUgYmF0b24uICovCit9CisKKyV0eXBlbWFwKHJ1Ynks IGluKSAoc3ZuX2NsaWVudF9ibGFtZV9yZWNlaXZlcl90IHJlY2VpdmVyLAorICAgICAgICAgICAg ICAgICAgICB2b2lkICpyZWNlaXZlcl9iYXRvbikKK3sKKyAgJDEgPSBzdm5fc3dpZ19yYl9jbGll bnRfYmxhbWVfcmVjZWl2ZXJfZnVuYzsKKyAgJDIgPSAodm9pZCAqKXN2bl9zd2lnX3JiX21ha2Vf YmF0b24oJGlucHV0LCBfZ2xvYmFsX3N2bl9zd2lnX3JiX3Bvb2wpOworfQorCisvKiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICAgQ2FsbGJhY2s6IHN2bl9pbmZvX3JlY2VpdmVyX3QKKyAgIHN2bl9jbGllbnRf aW5mbygpCisqLworCisldHlwZW1hcChweXRob24sIGluKSAoc3ZuX2luZm9fcmVjZWl2ZXJfdCBy ZWNlaXZlciwgCisgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcmVjZWl2ZXJfYmF0b24pIHsK KyAgICAkMSA9IHN2bl9zd2lnX3B5X2luZm9fcmVjZWl2ZXJfZnVuYzsKKyAgICAkMiA9ICh2b2lk ICopJGlucHV0OworfQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBXZSB1c2UgJ3N2bl93Y19z dGF0dXNfdCAqJyBpbiBzb21lIGN1c3RvbSBjb2RlLCBidXQgaXQgaXNuJ3QgaW4gdGhlCisgICBB UEkgYW55d2hlcmUuIFRodXMsIFNXSUcgZG9lc24ndCBnZW5lcmF0ZSBhIHR5cGVtYXAgZW50cnkg Zm9yIGl0LiBieQorICAgYWRkaW5nIGEgc2ltcGxlIGRlY2xhcmF0aW9uIGhlcmUsIFNXSUcgd2ls bCBpbnNlcnQgYSBuYW1lIGZvciBpdC4KKyAgIEZJWE1FOiBUaGlzIG1heSBiZSB1bnRydWUuIFNl ZSBzdm5fd2Nfc3RhdHVzLCBldGMuCisqLworJXR5cGVzKHN2bl93Y19zdGF0dXNfdCAqKTsKKwor LyogV2UgYWxzbyBuZWVkIFNXSUcgdG8gd3JhcCBzdm5fZGlyZW50X3QgYW5kIHN2bl9sb2NrX3Qg Zm9yIHVzLiAgVGhleQorICAgZG9uJ3QgYXBwZWFyIGluIGFueSBBUEksIGJ1dCBzdm5fY2xpZW50 X2xzIHJldHVybnMgYSBoYXNoIG9mIHBvaW50ZXJzCisgICB0byBkaXJlbnRzIGFuZCBsb2Nrcy4g Ki8KKyV0eXBlcyhzdm5fZGlyZW50X3QgKik7CisldHlwZXMoc3ZuX2xvY2tfdCAqKTsKKworLyog LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAgdGh1bmsgdGhlIHZhcmlvdXMgYXV0aGVudGljYXRpb24gcHJvbXB0 IGZ1bmN0aW9ucy4KKyAgUEVSTCBOT1RFOiBzdG9yZSB0aGUgaW5wdXRlZCBTViBpbiBfZ2xvYmFs X2NhbGxiYWNrIGZvciB1c2UgaW4gdGhlCisgICAgICAgICAgICAgbGF0ZXIgYXJnb3V0IHR5cGVt YXAKKyovCisldHlwZW1hcChwZXJsNSwgaW4pIChzdm5fYXV0aF9zaW1wbGVfcHJvbXB0X2Z1bmNf dCBwcm9tcHRfZnVuYywKKyAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnByb21wdF9iYXRvbikg eworICAgICQxID0gc3ZuX3N3aWdfcGxfdGh1bmtfc2ltcGxlX3Byb21wdDsKKyAgICBfZ2xvYmFs X2NhbGxiYWNrID0gJGlucHV0OworICAgICQyID0gKHZvaWQgKikgX2dsb2JhbF9jYWxsYmFjazsK K30KKyV0eXBlbWFwKHB5dGhvbiwgaW4pIChzdm5fYXV0aF9zaW1wbGVfcHJvbXB0X2Z1bmNfdCBw cm9tcHRfZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwcm9tcHRfYmF0b24pIHsK KyAgICAkMSA9IHN2bl9zd2lnX3B5X2F1dGhfc2ltcGxlX3Byb21wdF9mdW5jOworICAgICQyID0g JGlucHV0OworfQorJXR5cGVtYXAocnVieSwgaW4pIChzdm5fYXV0aF9zaW1wbGVfcHJvbXB0X2Z1 bmNfdCBwcm9tcHRfZnVuYywKKyAgICAgICAgICAgICAgICAgICAgdm9pZCAqcHJvbXB0X2JhdG9u KSB7CisgICAgJDEgPSBzdm5fc3dpZ19yYl9hdXRoX3NpbXBsZV9wcm9tcHRfZnVuYzsKKyAgICAk MiA9ICh2b2lkICopc3ZuX3N3aWdfcmJfbWFrZV9iYXRvbigkaW5wdXQsIF9nbG9iYWxfc3ZuX3N3 aWdfcmJfcG9vbCk7Cit9CisKKyV0eXBlbWFwKHBlcmw1LCBpbikgKHN2bl9hdXRoX3VzZXJuYW1l X3Byb21wdF9mdW5jX3QgcHJvbXB0X2Z1bmMsCisgICAgICAgICAgICAgICAgICAgICB2b2lkICpw cm9tcHRfYmF0b24pIHsKKyAgICAkMSA9IHN2bl9zd2lnX3BsX3RodW5rX3VzZXJuYW1lX3Byb21w dDsKKyAgICBfZ2xvYmFsX2NhbGxiYWNrID0gJGlucHV0OworICAgICQyID0gKHZvaWQgKikgX2ds b2JhbF9jYWxsYmFjazsKK30KKyV0eXBlbWFwKHB5dGhvbiwgaW4pIChzdm5fYXV0aF91c2VybmFt ZV9wcm9tcHRfZnVuY190IHByb21wdF9mdW5jLAorICAgICAgICAgICAgICAgICAgICAgIHZvaWQg KnByb21wdF9iYXRvbikgeworICAgICQxID0gc3ZuX3N3aWdfcHlfYXV0aF91c2VybmFtZV9wcm9t cHRfZnVuYzsKKyAgICAkMiA9ICRpbnB1dDsKK30KKyV0eXBlbWFwKHJ1YnksIGluKSAoc3ZuX2F1 dGhfdXNlcm5hbWVfcHJvbXB0X2Z1bmNfdCBwcm9tcHRfZnVuYywKKyAgICAgICAgICAgICAgICAg ICAgICB2b2lkICpwcm9tcHRfYmF0b24pIHsKKyAgICAkMSA9IHN2bl9zd2lnX3JiX2F1dGhfdXNl cm5hbWVfcHJvbXB0X2Z1bmM7CisgICAgJDIgPSAodm9pZCAqKXN2bl9zd2lnX3JiX21ha2VfYmF0 b24oJGlucHV0LCBfZ2xvYmFsX3N2bl9zd2lnX3JiX3Bvb2wpOworfQorCisldHlwZW1hcChwZXJs NSwgaW4pIChzdm5fYXV0aF9zc2xfc2VydmVyX3RydXN0X3Byb21wdF9mdW5jX3QgcHJvbXB0X2Z1 bmMsCisgICAgICAgICAgICAgICAgICAgICB2b2lkICpwcm9tcHRfYmF0b24pIHsKKyAgICAkMSA9 IHN2bl9zd2lnX3BsX3RodW5rX3NzbF9zZXJ2ZXJfdHJ1c3RfcHJvbXB0OworICAgIF9nbG9iYWxf Y2FsbGJhY2sgPSAkaW5wdXQ7CisgICAgJDIgPSAodm9pZCAqKSBfZ2xvYmFsX2NhbGxiYWNrOwor fQorJXR5cGVtYXAocHl0aG9uLCBpbikgKHN2bl9hdXRoX3NzbF9zZXJ2ZXJfdHJ1c3RfcHJvbXB0 X2Z1bmNfdCBwcm9tcHRfZnVuYywKKyAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnByb21wdF9i YXRvbikgeworICAgICQxID0gc3ZuX3N3aWdfcHlfYXV0aF9zc2xfc2VydmVyX3RydXN0X3Byb21w dF9mdW5jOworICAgICQyID0gJGlucHV0OworfQorJXR5cGVtYXAocnVieSwgaW4pIChzdm5fYXV0 aF9zc2xfc2VydmVyX3RydXN0X3Byb21wdF9mdW5jX3QgcHJvbXB0X2Z1bmMsCisgICAgICAgICAg ICAgICAgICAgICB2b2lkICpwcm9tcHRfYmF0b24pIHsKKyAgICAkMSA9IHN2bl9zd2lnX3JiX2F1 dGhfc3NsX3NlcnZlcl90cnVzdF9wcm9tcHRfZnVuYzsKKyAgICAkMiA9ICh2b2lkICopc3ZuX3N3 aWdfcmJfbWFrZV9iYXRvbigkaW5wdXQsIF9nbG9iYWxfc3ZuX3N3aWdfcmJfcG9vbCk7Cit9CisK KyV0eXBlbWFwKHBlcmw1LCBpbikgKHN2bl9hdXRoX3NzbF9jbGllbnRfY2VydF9wcm9tcHRfZnVu Y190IHByb21wdF9mdW5jLAorICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnByb21wdF9iYXRv bikgeworICAgICQxID0gc3ZuX3N3aWdfcGxfdGh1bmtfc3NsX2NsaWVudF9jZXJ0X3Byb21wdDsK KyAgICBfZ2xvYmFsX2NhbGxiYWNrID0gJGlucHV0OworICAgICQyID0gKHZvaWQgKikgX2dsb2Jh bF9jYWxsYmFjazsKK30KKyV0eXBlbWFwKHB5dGhvbiwgaW4pIChzdm5fYXV0aF9zc2xfY2xpZW50 X2NlcnRfcHJvbXB0X2Z1bmNfdCBwcm9tcHRfZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICB2 b2lkICpwcm9tcHRfYmF0b24pIHsKKyAgICAkMSA9IHN2bl9zd2lnX3B5X2F1dGhfc3NsX2NsaWVu dF9jZXJ0X3Byb21wdF9mdW5jOworICAgICQyID0gJGlucHV0OworfQorJXR5cGVtYXAocnVieSwg aW4pIChzdm5fYXV0aF9zc2xfY2xpZW50X2NlcnRfcHJvbXB0X2Z1bmNfdCBwcm9tcHRfZnVuYywK KyAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwcm9tcHRfYmF0b24pIHsKKyAgICAkMSA9IHN2 bl9zd2lnX3JiX2F1dGhfc3NsX2NsaWVudF9jZXJ0X3Byb21wdF9mdW5jOworICAgICQyID0gKHZv aWQgKilzdm5fc3dpZ19yYl9tYWtlX2JhdG9uKCRpbnB1dCwgX2dsb2JhbF9zdm5fc3dpZ19yYl9w b29sKTsKK30KKworJXR5cGVtYXAocGVybDUsIGluKSAoc3ZuX2F1dGhfc3NsX2NsaWVudF9jZXJ0 X3B3X3Byb21wdF9mdW5jX3QgcHJvbXB0X2Z1bmMsCisgICAgICAgICAgICAgICAgICAgICAgdm9p ZCAqcHJvbXB0X2JhdG9uKSB7CisgICAgJDEgPSBzdm5fc3dpZ19wbF90aHVua19zc2xfY2xpZW50 X2NlcnRfcHdfcHJvbXB0OworICAgIF9nbG9iYWxfY2FsbGJhY2sgPSAkaW5wdXQ7CisgICAgJDIg PSAodm9pZCAqKSBfZ2xvYmFsX2NhbGxiYWNrOworfQorJXR5cGVtYXAocHl0aG9uLCBpbikgKHN2 bl9hdXRoX3NzbF9jbGllbnRfY2VydF9wd19wcm9tcHRfZnVuY190IHByb21wdF9mdW5jLAorICAg ICAgICAgICAgICAgICAgICAgIHZvaWQgKnByb21wdF9iYXRvbikgeworICAgICQxID0gc3ZuX3N3 aWdfcHlfYXV0aF9zc2xfY2xpZW50X2NlcnRfcHdfcHJvbXB0X2Z1bmM7CisgICAgJDIgPSAkaW5w dXQ7Cit9CisldHlwZW1hcChydWJ5LCBpbikgKHN2bl9hdXRoX3NzbF9jbGllbnRfY2VydF9wd19w cm9tcHRfZnVuY190IHByb21wdF9mdW5jLAorICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBy b21wdF9iYXRvbikgeworICAgICQxID0gc3ZuX3N3aWdfcmJfYXV0aF9zc2xfY2xpZW50X2NlcnRf cHdfcHJvbXB0X2Z1bmM7CisgICAgJDIgPSAodm9pZCAqKXN2bl9zd2lnX3JiX21ha2VfYmF0b24o JGlucHV0LCBfZ2xvYmFsX3N2bl9zd2lnX3JiX3Bvb2wpOworfQorCisvKiAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICogRm9yIGFsbCB0aGUgdmFyaW91cyBmdW5jdGlvbnMgdGhhdCBzZXQgYSBjYWxsYmFjayBi YXRvbiBjcmVhdGUgYSByZWZlcmVuY2UKKyAqIGZvciB0aGUgYmF0b24gKHdoaWNoIGluIHRoaXMg Y2FzZSBpcyBhbiBTViBwb2ludGluZyB0byB0aGUgY2FsbGJhY2spCisgKiBhbmQgbWFrZSB0aGF0 IGEgcmV0dXJuIGZyb20gdGhlIGZ1bmN0aW9uLiAgVGhlIHBlcmwgc2lkZSBzaG91bGQKKyAqIHRo ZW4gc3RvcmUgdGhlIHJldHVybiBpbiB0aGUgb2JqZWN0IHRoZSBiYXRvbiBpcyBhdHRhY2hlZCB0 by4KKyAqIElmIHRoZSBmdW5jdGlvbiBhbHJlYWR5IHJldHVybnMgYSB2YWx1ZSB0aGVuIHRoaXMg dmFsdWUgaXMgZm9sbG93cyB0aGF0CisgKiBmdW5jdGlvbi4gIEluIHRoZSBjYXNlIG9mIHRoZSBw cm9tcHQgZnVuY3Rpb25zIGF1dGhfb3Blbl9oZWxwZXIgaW4gQ29yZS5wbQorICogaXMgdXNlZCB0 byBzcGxpdCB1cCB0aGVzZSB2YWx1ZXMuCisqLworJXR5cGVtYXAocGVybDUsIGFyZ291dCkgdm9p ZCAqQ0FMTEJBQ0tfQkFUT04gKFNWICogX2dsb2JhbF9jYWxsYmFjaykgeworICAvKiBjYWxsYmFj ayBiYXRvbiAqLworICAkcmVzdWx0ID0gc3ZfMm1vcnRhbCAobmV3UlZfaW5jIChfZ2xvYmFsX2Nh bGxiYWNrKSk7IGFyZ3ZpKys7IH0KKworJXR5cGVtYXAocGVybDUsIGluKSB2b2lkICpDQUxMQkFD S19CQVRPTiAoU1YgKiBfZ2xvYmFsX2NhbGxiYWNrKSB7CisgIF9nbG9iYWxfY2FsbGJhY2sgPSAk aW5wdXQ7CisgICQxID0gKHZvaWQgKikgX2dsb2JhbF9jYWxsYmFjazsKK30KKworI2lmZGVmIFNX SUdQRVJMCislYXBwbHkgdm9pZCAqQ0FMTEJBQ0tfQkFUT04geworICB2b2lkICpwcm9tcHRfYmF0 b24sCisgIHZvaWQgKm5vdGlmeV9iYXRvbiwKKyAgdm9pZCAqbG9nX21zZ19iYXRvbiwKKyAgdm9p ZCAqY2FuY2VsX2JhdG9uCit9CisjZW5kaWYKKworI2lmZGVmIFNXSUdSVUJZCislYXBwbHkgdm9p ZCAqQ0FMTEJBQ0tfQkFUT04KK3sKKyAgdm9pZCAqbm90aWZ5X2JhdG9uMiwKKyAgdm9pZCAqbG9n X21zZ19iYXRvbjIsCisgIHZvaWQgKmNhbmNlbF9iYXRvbgorfQorI2VuZGlmCisKKy8qIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tIAorICogQ29udmVydCBwZXJsIGhhc2hlcyBiYWNrIGludG8gYXByX2hhc2hfdCAq IGZvciBzZXR0aW5nIHRoZSBjb25maWcKKyAqIG1lbWJlciBvZiB0aGUgc3ZuX2NsaWVudF9jdHhf dC4gICBUaGlzIGlzIGFuIHVnbHkgaGFjaywgaXQgd2lsbAorICogYWx3YXlzIGFsbG9jYXRlIHRo ZSBuZXcgYXByX2hhc2hfdCBvdXQgb2YgdGhlIGdsb2JhbCBjdXJyZW50X3Bvb2wKKyAqIEl0IHdv dWxkIGJlIGJldHRlciB0byBtYWtlIGFwcl9oYXNoX3QncyBpbnRvIG1hZ2ljIHZhcmlhYmxlcyBp bgorICogcGVybCB0aGF0IGFyZSB0aWVkIHRvIHRoZSBhcHJfaGFzaF90IGludGVyZmFjZS4gIFRo aXMgd291bGQKKyAqIHJlbW92ZSB0aGUgbmVlZCB0byBjb252ZXJ0IHRvIGFuZCBmcm9tIHBlcmwg aGFzaHMgYWxsIHRoZSB0aW1lLgorICovCisldHlwZW1hcChwZXJsNSwgaW4pIGFwcl9oYXNoX3Qg KmNvbmZpZyB7CisgICQxID0gc3ZuX3N3aWdfcGxfb2Jqc190b19oYXNoX2J5X25hbWUgKCRpbnB1 dCwgInN2bl9jb25maWdfdCAqIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3ZuX3N3aWdfcGxfbWFrZV9wb29sICgoU1YgKilOVUxMKSk7Cit9CisKKyV0eXBlbWFw KHBlcmw1LCBvdXQpIGFwcl9oYXNoX3QgKmNvbmZpZyB7CisgICRyZXN1bHQgPSBzdm5fc3dpZ19w bF9jb252ZXJ0X2hhc2goJDEsIAorICAgICRkZXNjcmlwdG9yKHN2bl9jb25maWdfdCAqKSk7Cisg IGFyZ3ZpKys7Cit9CisKKyNpZmRlZiBTV0lHUlVCWQorJXJ1bnRpbWUgJXsKKyAgI2luY2x1ZGUg PGFwci5oPgorICAjaW5jbHVkZSA8YXByX3Bvb2xzLmg+CisKKyAgc3RhdGljIGFwcl9wb29sX3Qg KgorICBfc3ZuX2NsaWVudF9wb29sKHZvaWQpIAorICB7CisgICAgc3RhdGljIGFwcl9wb29sX3Qg Kl9fc3ZuX2NsaWVudF9wb29sID0gTlVMTDsKKyAgICBpZiAoIV9fc3ZuX2NsaWVudF9wb29sKSB7 CisgICAgICBhcHJfcG9vbF9jcmVhdGUoJl9fc3ZuX2NsaWVudF9wb29sLCBOVUxMKTsKKyAgICB9 CisgICAgcmV0dXJuIF9fc3ZuX2NsaWVudF9wb29sOworICB9CisKKyAgc3RhdGljIGFwcl9wb29s X3QgKgorICBfc3ZuX2NsaWVudF9jb25maWdfcG9vbCh2b2lkKSAKKyAgeworICAgIHN0YXRpYyBh cHJfcG9vbF90ICpfX3N2bl9jbGllbnRfY29uZmlnX3Bvb2wgPSBOVUxMOworICAgIGlmICghX19z dm5fY2xpZW50X2NvbmZpZ19wb29sKSB7CisgICAgICBhcHJfcG9vbF9jcmVhdGUoJl9fc3ZuX2Ns aWVudF9jb25maWdfcG9vbCwgX3N2bl9jbGllbnRfcG9vbCgpKTsKKyAgICB9CisgICAgcmV0dXJu IF9fc3ZuX2NsaWVudF9jb25maWdfcG9vbDsKKyAgfQorJX0KKyNlbmRpZgorCisldHlwZW1hcChy dWJ5LCBhcmdvdXQpIGFwcl9oYXNoX3QgKmNvbmZpZyB7CisgIGlmICgkMSkKKyAgICBhcHJfcG9v bF9jbGVhcihfc3ZuX2NsaWVudF9jb25maWdfcG9vbCgpKTsKK30KKworJXR5cGVtYXAocnVieSwg aW4pIGFwcl9oYXNoX3QgKmNvbmZpZyB7CisgICQxID0gc3ZuX3N3aWdfcmJfaGFzaF90b19hcHJf aGFzaF9zd2lnX3R5cGUoJGlucHV0LCAic3ZuX2NvbmZpZ190ICoiLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9zdm5fY2xpZW50X2NvbmZpZ19wb29sKCkp OworfQorCisldHlwZW1hcChydWJ5LCBvdXQpIGFwcl9oYXNoX3QgKmNvbmZpZyB7CisgICRyZXN1 bHQgPSBzdm5fc3dpZ19yYl9hcHJfaGFzaF90b19oYXNoX3N3aWdfdHlwZSgkMSwgInN2bl9jb25m aWdfdCAqIik7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBvdmVycmlkZSBkZWZhdWx0IHR5 cGVtYXAgZm9yIHN2bl9jbGllbnRfY29tbWl0X2luZm9fdCBmb3IgcGVybC4gIFNvbWUgY2FsbHMK KyAqIG5ldmVyIGFsbG9jYXRlIGFuZCBmaWxsIHRoZSBjb21taXRfaW5mbyBzdHJ1Y3QuICBUaGlz IGxldHMgdXMgcmV0dXJuCisgKiB1bmRlZiBmb3IgdGhlbS4gIE90aGVyd2lzZSB0aGUgb2JqZWN0 IHdlIHBhc3MgYmFjayBjYW4gY2F1c2UgY3Jhc2hlcyAqLworJXR5cGVtYXAocGVybDUsIGluLCBu dW1pbnB1dHM9MCkgc3ZuX2NsaWVudF9jb21taXRfaW5mb190ICoqIAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKCBzdm5fY2xpZW50X2NvbW1pdF9pbmZvX3QgKiB0ZW1wICkgewor ICAgIHRlbXAgPSBOVUxMOworICAgICQxID0gJnRlbXA7Cit9CisKKyV0eXBlbWFwKHBlcmw1LCBh cmdvdXQpIHN2bl9jbGllbnRfY29tbWl0X2luZm9fdCAqKiB7CisgICAgaWYgKCQxID09IE5VTEwp IHsKKyAgICAgICAgJHJlc3VsdCA9ICZQTF9zdl91bmRlZjsKKyAgICAgICAgYXJndmkrKzsKKyAg ICB9ICBlbHNlIHsKKyAgICAgICAgJHJlc3VsdCA9IHN2X25ld21vcnRhbCgpOworICAgICAgICBT V0lHX01ha2VQdHIoJHJlc3VsdCwgKHZvaWQgKikqJDEsCisgICAgICAgICAgICAgICAgICAgICAk KjFfZGVzY3JpcHRvciwgMCk7CisgICAgICAgIGFyZ3ZpKys7CisgICAgfQorfQorCisvKiAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorICogd2Nwcm9wX2NoYW5nZXMgbWVtYmVyIG9mIHN2bl9jbGllbnRfY29tbWl0 X2luZm8gbmVlZHMgdG8gYmUKKyAqIGNvbnZlcnRlZCBiYWNrIGFuZCBmb3J0aCBmcm9tIGFuIGFy cmF5ICovCisKKyV0eXBlbWFwKHBlcmw1LCBvdXQpIGFwcl9hcnJheV9oZWFkZXJfdCAqd2Nwcm9w X2NoYW5nZXMgeworICAgICRyZXN1bHQgPSBzdm5fc3dpZ19wbF9jb252ZXJ0X2FycmF5KCQxLAor ICAgICAgJGRlc2NyaXB0b3Ioc3ZuX3Byb3BfdCAqKSk7CisgICAgYXJndmkrKzsKK30KKworLyog LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAqIHdyYXAgc3ZuX2NsaWVudF9jcmVhdGVfY29udGV4dCAqLworCisl dHlwZW1hcChwZXJsNSxpbixudW1pbnB1dHM9MCkgc3ZuX2NsaWVudF9jdHhfdCAqKiAoc3ZuX2Ns aWVudF9jdHhfdCAqdGVtcCkgeworICAgICQxID0gJnRlbXA7Cit9CisKKyV0eXBlbWFwKHBlcmw1 LGFyZ291dCkgc3ZuX2NsaWVudF9jdHhfdCAqKiB7CisgICgqJDEpLT5ub3RpZnlfZnVuYyA9IHN2 bl9zd2lnX3BsX25vdGlmeV9mdW5jOworICAoKiQxKS0+bm90aWZ5X2JhdG9uID0gKHZvaWQgKikg JlBMX3N2X3VuZGVmOworICAoKiQxKS0+bG9nX21zZ19mdW5jID0gc3ZuX3N3aWdfcGxfZ2V0X2Nv bW1pdF9sb2dfZnVuYzsKKyAgKCokMSktPmxvZ19tc2dfYmF0b24gPSAodm9pZCAqKSAmUExfc3Zf dW5kZWY7CisgICgqJDEpLT5jYW5jZWxfZnVuYyA9IHN2bl9zd2lnX3BsX2NhbmNlbF9mdW5jOwor ICAoKiQxKS0+Y2FuY2VsX2JhdG9uID0gKHZvaWQgKikgJlBMX3N2X3VuZGVmOworICAkcmVzdWx0 ID0gc3ZfbmV3bW9ydGFsKCk7CisgIFNXSUdfTWFrZVB0cigkcmVzdWx0LCAodm9pZCAqKSokMSwK KyAgICAgICAgICAgICAgICQqMV9kZXNjcmlwdG9yLCAwKTsKKyAgYXJndmkrKzsKK30gIAorCisv KiBzdm5fY2xpZW50X3VwZGF0ZTIgKi8KKyV0eXBlbWFwKHJ1YnksIGluLCBudW1pbnB1dHM9MCkg YXByX2FycmF5X2hlYWRlcl90ICoqcmVzdWx0X3JldnMgKGFwcl9hcnJheV9oZWFkZXJfdCAqdGVt cCkKK3sKKyAgJDEgPSAmdGVtcDsKK30KKworJXR5cGVtYXAocnVieSwgYXJnb3V0LCBmcmFnbWVu dD0ib3V0cHV0X2hlbHBlciIpIGFwcl9hcnJheV9oZWFkZXJfdCAqKnJlc3VsdF9yZXZzCit7Cisg ICRyZXN1bHQgPSBvdXRwdXRfaGVscGVyKCRyZXN1bHQsIHN2bl9zd2lnX3JiX2Fwcl9hcnJheV90 b19hcnJheV9zdm5fcmV2KCokMSkpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCislewor I2lmZGVmIFNXSUdQWVRIT04KKyNpbmNsdWRlICJzd2lndXRpbF9weS5oIgorI2VuZGlmCisKKyNp ZmRlZiBTV0lHUEVSTAorI2luY2x1ZGUgInN3aWd1dGlsX3BsLmgiCisjZW5kaWYKKworI2lmZGVm IFNXSUdSVUJZCisjaW5jbHVkZSA8YXB1Lmg+CisjaW5jbHVkZSA8YXByX3hsYXRlLmg+CisjaW5j bHVkZSAic3dpZ3V0aWxfcmIuaCIKKyNlbmRpZgorJX0KKworJWluY2x1ZGUgc3ZuX3RpbWVfaC5z d2cKKyVpbmNsdWRlIHN2bl9jbGllbnRfaC5zd2cKKworI2lmZGVmIFNXSUdQWVRIT04KKworLyog cHJvdmlkZSBQeXRob24gd2l0aCBhY2Nlc3MgdG8gc29tZSB0aHVua3MuICovCislY29uc3RhbnQg c3ZuX2NhbmNlbF9mdW5jX3Qgc3ZuX3N3aWdfcHlfY2FuY2VsX2Z1bmM7CislY29uc3RhbnQgc3Zu X2NsaWVudF9nZXRfY29tbWl0X2xvZzJfdCBzdm5fc3dpZ19weV9nZXRfY29tbWl0X2xvZ19mdW5j OworJWNvbnN0YW50IHN2bl93Y19ub3RpZnlfZnVuYzJfdCBzdm5fc3dpZ19weV9ub3RpZnlfZnVu YzsKKworI2VuZGlmCisKKyNpZmRlZiBTV0lHUlVCWQorJWlubGluZSAleworc3RhdGljIFZBTFVF Citzdm5fY2xpZW50X3NldF9sb2dfbXNnX2Z1bmMyKHN2bl9jbGllbnRfY3R4X3QgKmN0eCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX2NsaWVudF9nZXRfY29tbWl0X2xvZzJfdCBs b2dfbXNnX2Z1bmMyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpsb2dfbXNn X2JhdG9uMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCkK K3sKKyAgY3R4LT5sb2dfbXNnX2Z1bmMyID0gbG9nX21zZ19mdW5jMjsKKyAgY3R4LT5sb2dfbXNn X2JhdG9uMiA9IGxvZ19tc2dfYmF0b24yOworICByZXR1cm4gKFZBTFVFKWxvZ19tc2dfYmF0b24y OworfQorIAorc3RhdGljIFZBTFVFCitzdm5fY2xpZW50X3NldF9ub3RpZnlfZnVuYzIoc3ZuX2Ns aWVudF9jdHhfdCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2bl93Y19ub3Rp ZnlfZnVuYzJfdCBub3RpZnlfZnVuYzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9p ZCAqbm90aWZ5X2JhdG9uMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90 ICpwb29sKQoreworICBjdHgtPm5vdGlmeV9mdW5jMiA9IG5vdGlmeV9mdW5jMjsKKyAgY3R4LT5u b3RpZnlfYmF0b24yID0gbm90aWZ5X2JhdG9uMjsKKyAgcmV0dXJuIChWQUxVRSlub3RpZnlfYmF0 b24yOworfQorCitzdGF0aWMgVkFMVUUKK3N2bl9jbGllbnRfc2V0X2NhbmNlbF9mdW5jKHN2bl9j bGllbnRfY3R4X3QgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2bl9jYW5jZWxf ZnVuY190IGNhbmNlbF9mdW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY2Fu Y2VsX2JhdG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCkK K3sKKyAgY3R4LT5jYW5jZWxfZnVuYyA9IGNhbmNlbF9mdW5jOworICBjdHgtPmNhbmNlbF9iYXRv biA9IGNhbmNlbF9iYXRvbjsKKyAgcmV0dXJuIChWQUxVRSljYW5jZWxfYmF0b247Cit9CislfQor I2VuZGlmCmRpZmYgLU51ciBzdWJ2ZXJzaW9uLTEuMy4xL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dp Zy9zdm5fZGVsdGEuaSBzdWJ2ZXJzaW9uLTEuMy4xLm5ldy9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3 aWcvc3ZuX2RlbHRhLmkKLS0tIHN1YnZlcnNpb24tMS4zLjEvc3VidmVyc2lvbi9iaW5kaW5ncy9z d2lnL3N2bl9kZWx0YS5pCTIwMDUtMDktMjkgMDA6NTY6NTIuMDAwMDAwMDAwICswMTAwCisrKyBz dWJ2ZXJzaW9uLTEuMy4xLm5ldy9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvc3ZuX2RlbHRhLmkJ MjAwNi0wNy0wNCAxOTowMTowNi4wMDAwMDAwMDAgKzAxMDAKQEAgLTQ3LDcgKzQ3LDggQEAKICAg ICBjb25zdCBjaGFyICplcnJvcl9pbmZvLAogICAgIGNvbnN0IGNoYXIgKmNvcHlmcm9tX3BhdGgs CiAgICAgY29uc3QgY2hhciAqY29weV9wYXRoLAotICAgIGNvbnN0IGNoYXIgKmJhc2VfY2hlY2tz dW0KKyAgICBjb25zdCBjaGFyICpiYXNlX2NoZWNrc3VtLAorICAgIGNvbnN0IGNoYXIgKnRleHRf Y2hlY2tzdW0KIH07CiAKICNpZmRlZiBTV0lHUFlUSE9OCkBAIC0xNDUsNiArMTQ2LDE3IEBACiAK ICVpbmNsdWRlIHN2bl9kZWx0YV9oLnN3ZwogCisjaWZkZWYgU1dJR1BZVEhPTgorJWlubGluZSAl eworc3ZuX2Vycm9yX3QgKnN2bl9kZWx0YV9pbnZva2VfdHhkZWx0YV93aW5kb3dfaGFuZGxlciAo CisgIHN2bl90eGRlbHRhX3dpbmRvd19oYW5kbGVyX3QgaGFuZGxlciwKKyAgc3ZuX3R4ZGVsdGFf d2luZG93X3QgKndpbmRvdywgdm9pZCAqYmF0b24pIHsKKyAgcmV0dXJuIGhhbmRsZXIod2luZG93 LCBiYXRvbik7Cit9CislfQorI2VuZGlmCisKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGhhbmRs ZSBzdm5fdHhkZWx0YV90b19zdm5kaWZmKCkuCiAqLwpkaWZmIC1OdXIgc3VidmVyc2lvbi0xLjMu MS9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvc3ZuX3JhLmkgc3VidmVyc2lvbi0xLjMuMS5uZXcv c3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3N2bl9yYS5pCi0tLSBzdWJ2ZXJzaW9uLTEuMy4xL3N1 YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9zdm5fcmEuaQkyMDA1LTEwLTA0IDE2OjQzOjQwLjAwMDAw MDAwMCArMDEwMAorKysgc3VidmVyc2lvbi0xLjMuMS5uZXcvc3VidmVyc2lvbi9iaW5kaW5ncy9z d2lnL3N2bl9yYS5pCTIwMDYtMDctMDQgMTk6MDE6MDYuMDAwMDAwMDAwICswMTAwCkBAIC0yNSw2 ICsyNSw3IEBACiAjZW5kaWYKIAogJWluY2x1ZGUgdHlwZW1hcHMuaQorJWluY2x1ZGUgY29uc3Ry YWludHMuaQogCiAlaW5jbHVkZSBzdm5fZ2xvYmFsLnN3ZwogJWltcG9ydCBhcHIuc3dnCkBAIC00 OCwxMyArNDksMTYgQEAKICAgICBjb25zdCBzdm5fcmFfcmVwb3J0ZXIyX3QgKipyZXBvcnRlciwK ICAgICB2b2lkICoqcmVwb3J0X2JhdG9uLAogICAgIHN2bl9kaXJlbnRfdCAqKmRpcmVudCwKLSAg ICBzdm5fbG9ja190ICoqbG9jaworICAgIHN2bl9sb2NrX3QgKipsb2NrLAorICAgIGNvbnN0IHN2 bl9kZWx0YV9lZGl0b3JfdCAqKgogfTsKIAogJWFwcGx5IGFwcl9oYXNoX3QgKipQUk9QSEFTSCB7 IGFwcl9oYXNoX3QgKipwcm9wcyB9OworJWFwcGx5IGFwcl9oYXNoX3QgKipESVJFTlRIQVNIIHsg YXByX2hhc2hfdCAqKmRpcmVudHMgfTsKIAogJWFwcGx5IGNvbnN0IGNoYXIgKk1BWV9CRV9OVUxM IHsKLSAgICBjb25zdCBjaGFyICpjb21tZW50CisgICAgY29uc3QgY2hhciAqY29tbWVudCwKKyAg ICBjb25zdCBjaGFyICpsb2NrX3Rva2VuCiB9OwogCiAlYXBwbHkgYXByX2hhc2hfdCAqU1RSSU5H X1RPX1NUUklORyB7CkBAIC0xMTIsNiArMTE2LDE2IEBACiAgIHN2bl9zd2lnX3JiX3NldHVwX3Jh X2NhbGxiYWNrcygmJDEsICYkMiwgJGlucHV0LCBfZ2xvYmFsX3Bvb2wpOwogfQogCisldHlwZW1h cChweXRob24sIGluKSAoY29uc3Qgc3ZuX3JhX2NhbGxiYWNrczJfdCAqY2FsbGJhY2tzLCAKKyAg ICAgICAgICAgICAgICAgICAgICB2b2lkICpjYWxsYmFja19iYXRvbikgeworICBzdm5fc3dpZ19w eV9zZXR1cF9yYV9jYWxsYmFja3MoJiQxLCAmJDIsICRpbnB1dCwgX2dsb2JhbF9wb29sKTsKK30K KworJXR5cGVtYXAocHl0aG9uLCBpbikgKGNvbnN0IHN2bl9yYV9jYWxsYmFja3MyX3QgKmNhbGxi YWNrcywgCisgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY2FsbGJhY2tfYmF0b24pIHsKKyAg c3ZuX3N3aWdfcHlfc2V0dXBfcmFfY2FsbGJhY2tzKCYkMSwgJiQyLCAkaW5wdXQsIF9nbG9iYWxf cG9vbCk7Cit9CisKICV0eXBlbWFwKHBlcmw1LCBpbikgYXByX2hhc2hfdCAqY29uZmlnIHsKICAg ICAkMSA9IHN2bl9zd2lnX3BsX29ianNfdG9faGFzaF9ieV9uYW1lICgkaW5wdXQsICJzdm5fY29u ZmlnX3QgKiIsCiAJCQkJCSAgIF9nbG9iYWxfcG9vbCk7CkBAIC0xMzQsNiArMTQ4LDIyIEBACiAg ICQxID0gc3ZuX3N3aWdfcmJfaGFzaF90b19hcHJfaGFzaF9yZXZudW0oJGlucHV0LCBfZ2xvYmFs X3Bvb2wpOwogfQogCisjaWZkZWYgU1dJR1BZVEhPTgorJXR5cGVtYXAoaW4pIChzdm5fcmFfZmls ZV9yZXZfaGFuZGxlcl90IGhhbmRsZXIsIHZvaWQgKmhhbmRsZXJfYmF0b24pCit7CisgICAkMSA9 IHN2bl9zd2lnX3B5X3JhX2ZpbGVfcmV2X2hhbmRsZXJfZnVuYzsKKyAgICQyID0gKHZvaWQgKikk aW5wdXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIFNXSUdQWVRIT04KKyV0eXBlbWFwKGluKSAoY29u c3Qgc3ZuX3JhX3JlcG9ydGVyMl90ICpyZXBvcnRlciwgdm9pZCAqcmVwb3J0X2JhdG9uKQorewor ICAkMSA9IChzdm5fcmFfcmVwb3J0ZXIyX3QgKikmc3dpZ19weV9yYV9yZXBvcnRlcjI7CisgICQy ID0gKHZvaWQgKikkaW5wdXQ7Cit9CisjZW5kaWYKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAog JXsKZGlmZiAtTnVyIHN1YnZlcnNpb24tMS4zLjEvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3N2 bl9yYS5pLm9yaWcgc3VidmVyc2lvbi0xLjMuMS5uZXcvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2ln L3N2bl9yYS5pLm9yaWcKLS0tIHN1YnZlcnNpb24tMS4zLjEvc3VidmVyc2lvbi9iaW5kaW5ncy9z d2lnL3N2bl9yYS5pLm9yaWcJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysr IHN1YnZlcnNpb24tMS4zLjEubmV3L3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9zdm5fcmEuaS5v cmlnCTIwMDYtMDctMDQgMTk6MDE6MDYuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsMTgxIEBA CisvKgorICogc3ZuX3JhLmkgOiAgU1dJRyBpbnRlcmZhY2UgZmlsZSBmb3Igc3ZuX3JhLmgKKyAq CisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQ29sbGFiTmV0LiAg QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFz IGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZl IHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uICBUaGUgdGVybXMKKyAqIGFy ZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vc3VidmVyc2lvbi50aWdyaXMub3JnL2xpY2Vuc2Ut MS5odG1sLgorICogSWYgbmV3ZXIgdmVyc2lvbnMgb2YgdGhpcyBsaWNlbnNlIGFyZSBwb3N0ZWQg dGhlcmUsIHlvdSBtYXkgdXNlIGEKKyAqIG5ld2VyIHZlcnNpb24gaW5zdGVhZCwgYXQgeW91ciBv cHRpb24uCisgKgorICogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJp YnV0aW9ucyBtYWRlIGJ5IG1hbnkKKyAqIGluZGl2aWR1YWxzLiAgRm9yIGV4YWN0IGNvbnRyaWJ1 dGlvbiBoaXN0b3J5LCBzZWUgdGhlIHJldmlzaW9uCisgKiBoaXN0b3J5IGFuZCBsb2dzLCBhdmFp bGFibGUgYXQgaHR0cDovL3N1YnZlcnNpb24udGlncmlzLm9yZy8uCisgKiA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQor ICovCisKKyNpZiBkZWZpbmVkKFNXSUdQRVJMKQorJW1vZHVsZSAiU1ZOOjpfUmEiCisjZWxpZiBk ZWZpbmVkKFNXSUdSVUJZKQorJW1vZHVsZSAic3ZuOjpleHQ6OnJhIgorI2Vsc2UKKyVtb2R1bGUg cmEKKyNlbmRpZgorCislaW5jbHVkZSB0eXBlbWFwcy5pCislaW5jbHVkZSBjb25zdHJhaW50cy5p CisKKyVpbmNsdWRlIHN2bl9nbG9iYWwuc3dnCislaW1wb3J0IGFwci5zd2cKKyVpbXBvcnQgY29y ZS5pCislaW1wb3J0IHN2bl90eXBlcy5zd2cKKyVpbXBvcnQgc3ZuX3N0cmluZy5zd2cKKyVpbXBv cnQgc3ZuX2RlbHRhLmkKKworLyogYmFkIHBvb2wgY29udmVudGlvbiwgYWxzbyB0aGVzZSBzaG91 bGQgbm90IGJlIHB1YmxpYyBpbnRlcmZhY2UgYXQgYWxsCisgICBhcyBjb21tZW50ZWQgYnkgc3Vz c21hbi4gKi8KKyVpZ25vcmUgc3ZuX3JhX3N2bl9pbml0OworJWlnbm9yZSBzdm5fcmFfbG9jYWxf aW5pdDsKKyVpZ25vcmUgc3ZuX3JhX2Rhdl9pbml0OworCislYXBwbHkgUG9pbnRlciBOT05OVUxM IHsgc3ZuX3JhX2NhbGxiYWNrczJfdCAqY2FsbGJhY2tzIH07CisKKy8qIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgICAlYXBwbHktaW5nIG9mIHR5cGVtYXBzIGRlZmluZWQgZWxzZXdoZXJlCisqLworJWFwcGx5 IFNXSUdUWVBFICoqT1VUUEFSQU0geworICAgIHN2bl9yYV9wbHVnaW5fdCAqKiwKKyAgICBzdm5f cmFfc2Vzc2lvbl90ICoqLAorICAgIGNvbnN0IHN2bl9yYV9yZXBvcnRlcjJfdCAqKnJlcG9ydGVy LAorICAgIHZvaWQgKipyZXBvcnRfYmF0b24sCisgICAgc3ZuX2RpcmVudF90ICoqZGlyZW50LAor ICAgIHN2bl9sb2NrX3QgKipsb2NrLAorICAgIGNvbnN0IHN2bl9kZWx0YV9lZGl0b3JfdCAqKgor fTsKKworJWFwcGx5IGFwcl9oYXNoX3QgKipQUk9QSEFTSCB7IGFwcl9oYXNoX3QgKipwcm9wcyB9 OworJWFwcGx5IGFwcl9oYXNoX3QgKipESVJFTlRIQVNIIHsgYXByX2hhc2hfdCAqKmRpcmVudHMg fTsKKworJWFwcGx5IGNvbnN0IGNoYXIgKk1BWV9CRV9OVUxMIHsKKyAgICBjb25zdCBjaGFyICpj b21tZW50LAorICAgIGNvbnN0IGNoYXIgKmxvY2tfdG9rZW4KK307CisKKyVhcHBseSBhcHJfaGFz aF90ICpTVFJJTkdfVE9fU1RSSU5HIHsKKyAgYXByX2hhc2hfdCAqbG9ja190b2tlbnMsCisgIGFw cl9oYXNoX3QgKnBhdGhfdG9rZW5zCit9OworCisjaWZkZWYgU1dJR1BZVEhPTgorJWFwcGx5IHN2 bl9zdHJlYW1fdCAqV1JBUFBFRF9TVFJFQU0geyBzdm5fc3RyZWFtX3QgKiB9OworI2VuZGlmCisK Ky8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgICBoYW5kbGUgc3ZuX3JhX2dldF9sb2NhdGlvbnMoKQorKi8K KyV0eXBlbWFwKHB5dGhvbixpbikgYXByX2FycmF5X2hlYWRlcl90ICpsb2NhdGlvbl9yZXZpc2lv bnMgeworICAgICQxID0gKGFwcl9hcnJheV9oZWFkZXJfdCAqKSBzdm5fc3dpZ19weV9yZXZudW1z X3RvX2FycmF5KCRpbnB1dCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX2dsb2JhbF9wb29sKTsKKyAgICBpZiAoJDEgPT0gTlVM TCkKKyAgICAgICAgU1dJR19mYWlsOworfQorJXR5cGVtYXAocHl0aG9uLGluLG51bWlucHV0cz0w KSBhcHJfaGFzaF90ICoqbG9jYXRpb25zID0gYXByX2hhc2hfdCAqKk9VVFBVVDsKKyV0eXBlbWFw KHB5dGhvbixhcmdvdXQsZnJhZ21lbnQ9InRfb3V0cHV0X2hlbHBlciIpIGFwcl9oYXNoX3QgKips b2NhdGlvbnMgeworICAgICRyZXN1bHQgPSB0X291dHB1dF9oZWxwZXIoJHJlc3VsdCwgc3ZuX3N3 aWdfcHlfbG9jYXRpb25oYXNoX3RvX2RpY3QoKiQxKSk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgICB0aHVuayByYV9jYWxsYmFjaworKi8KKyVhcHBseSBjb25zdCBjaGFyICoqT1VUUFVUIHsK KyAgICBjb25zdCBjaGFyICoqdXJsLAorICAgIGNvbnN0IGNoYXIgKip1dWlkCit9OworCislYXBw bHkgY29uc3QgYXByX2FycmF5X2hlYWRlcl90ICpTVFJJTkdMSVNUIHsKKyAgICBjb25zdCBhcHJf YXJyYXlfaGVhZGVyX3QgKnBhdGhzCit9OworCisldHlwZW1hcChwZXJsNSwgaW4pIChjb25zdCBz dm5fZGVsdGFfZWRpdG9yX3QgKnVwZGF0ZV9lZGl0b3IsCisJCSAgICAgdm9pZCAqdXBkYXRlX2Jh dG9uKSB7CisgICAgc3ZuX2RlbHRhX21ha2VfZWRpdG9yKCYkMSwgJiQyLCAkaW5wdXQsIF9nbG9i YWxfcG9vbCk7Cit9CisldHlwZW1hcChwZXJsNSwgaW4pIChjb25zdCBzdm5fZGVsdGFfZWRpdG9y X3QgKmRpZmZfZWRpdG9yLAorCQkgICAgIHZvaWQgKmRpZmZfYmF0b24pIHsKKyAgICBzdm5fZGVs dGFfbWFrZV9lZGl0b3IoJiQxLCAmJDIsICRpbnB1dCwgX2dsb2JhbF9wb29sKTsKK30KKworJXR5 cGVtYXAocGVybDUsIGluKSAoY29uc3Qgc3ZuX3JhX2NhbGxiYWNrc190ICpjYWxsYmFja3MsCisJ CSAgICAgdm9pZCAqY2FsbGJhY2tfYmF0b24pIHsKKyAgICBzdm5fcmFfbWFrZV9jYWxsYmFja3Mo JiQxLCAmJDIsICRpbnB1dCwgX2dsb2JhbF9wb29sKTsKK30KKworJXR5cGVtYXAocnVieSwgaW4p IChjb25zdCBzdm5fcmFfY2FsbGJhY2tzMl90ICpjYWxsYmFja3MsCisgICAgICAgICAgICAgICAg ICAgIHZvaWQgKmNhbGxiYWNrX2JhdG9uKQoreworICBzdm5fc3dpZ19yYl9zZXR1cF9yYV9jYWxs YmFja3MoJiQxLCAmJDIsICRpbnB1dCwgX2dsb2JhbF9wb29sKTsKK30KKworJXR5cGVtYXAocHl0 aG9uLCBpbikgKHN2bl9yYV9jYWxsYmFja3MyX3QgKmNhbGxiYWNrcywgCisgICAgICAgICAgICAg ICAgICAgICAgdm9pZCAqY2FsbGJhY2tfYmF0b24pIHsKKyAgc3ZuX3N3aWdfcHlfc2V0dXBfcmFf Y2FsbGJhY2tzKCYkMSwgJiQyLCAkaW5wdXQsIF9nbG9iYWxfcG9vbCk7Cit9CisKKyV0eXBlbWFw KHBlcmw1LCBpbikgYXByX2hhc2hfdCAqY29uZmlnIHsKKyAgICAkMSA9IHN2bl9zd2lnX3BsX29i anNfdG9faGFzaF9ieV9uYW1lICgkaW5wdXQsICJzdm5fY29uZmlnX3QgKiIsCisJCQkJCSAgIF9n bG9iYWxfcG9vbCk7Cit9CisKKyV0eXBlbWFwKHJ1YnksIGluKSAoc3ZuX3JhX2xvY2tfY2FsbGJh Y2tfdCBsb2NrX2Z1bmMsIHZvaWQgKmxvY2tfYmF0b24pCit7CisgICQxID0gc3ZuX3N3aWdfcmJf cmFfbG9ja19jYWxsYmFjazsKKyAgJDIgPSAodm9pZCAqKXN2bl9zd2lnX3JiX21ha2VfYmF0b24o JGlucHV0LCBfZ2xvYmFsX3N2bl9zd2lnX3JiX3Bvb2wpOworfQorCisldHlwZW1hcChydWJ5LCBp bikgKHN2bl9yYV9maWxlX3Jldl9oYW5kbGVyX3QgaGFuZGxlciwgdm9pZCAqaGFuZGxlcl9iYXRv bikKK3sKKyAgJDEgPSBzdm5fc3dpZ19yYl9yYV9maWxlX3Jldl9oYW5kbGVyOworICAkMiA9ICh2 b2lkICopc3ZuX3N3aWdfcmJfbWFrZV9iYXRvbigkaW5wdXQsIF9nbG9iYWxfc3ZuX3N3aWdfcmJf cG9vbCk7Cit9CisKKyV0eXBlbWFwKHJ1YnksIGluKSBhcHJfaGFzaF90ICpwYXRoX3JldnMKK3sK KyAgJDEgPSBzdm5fc3dpZ19yYl9oYXNoX3RvX2Fwcl9oYXNoX3Jldm51bSgkaW5wdXQsIF9nbG9i YWxfcG9vbCk7Cit9CisKKyNpZmRlZiBTV0lHUFlUSE9OCisldHlwZW1hcChpbikgKHN2bl9yYV9m aWxlX3Jldl9oYW5kbGVyX3QgaGFuZGxlciwgdm9pZCAqaGFuZGxlcl9iYXRvbikKK3sKKyAgICQx ID0gc3ZuX3N3aWdfcHlfcmFfZmlsZV9yZXZfaGFuZGxlcl9mdW5jOworICAgJDIgPSAodm9pZCAq KSRpbnB1dDsKK30KKyNlbmRpZgorCisjaWZkZWYgU1dJR1BZVEhPTgorJXR5cGVtYXAoaW4pIChj b25zdCBzdm5fcmFfcmVwb3J0ZXIyX3QgKnJlcG9ydGVyLCB2b2lkICpyZXBvcnRfYmF0b24pCit7 CisgICQxID0gKHN2bl9yYV9yZXBvcnRlcjJfdCAqKSZzd2lnX3B5X3JhX3JlcG9ydGVyMjsKKyAg JDIgPSAodm9pZCAqKSRpbnB1dDsKK30KKyNlbmRpZgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwor CisleworI2lmZGVmIFNXSUdQWVRIT04KKyNpbmNsdWRlICJzd2lndXRpbF9weS5oIgorI2VuZGlm CisKKyNpZmRlZiBTV0lHUEVSTAorI2luY2x1ZGUgInN3aWd1dGlsX3BsLmgiCisjZW5kaWYKKwor I2lmZGVmIFNXSUdSVUJZCisjaW5jbHVkZSAic3dpZ3V0aWxfcmIuaCIKKyNlbmRpZgorJX0KKwor JWluY2x1ZGUgc3ZuX3JhX2guc3dnCisKZGlmZiAtTnVyIHN1YnZlcnNpb24tMS4zLjEvc3VidmVy c2lvbi9iaW5kaW5ncy9zd2lnL3N2bl93Yy5pIHN1YnZlcnNpb24tMS4zLjEubmV3L3N1YnZlcnNp b24vYmluZGluZ3Mvc3dpZy9zdm5fd2MuaQotLS0gc3VidmVyc2lvbi0xLjMuMS9zdWJ2ZXJzaW9u L2JpbmRpbmdzL3N3aWcvc3ZuX3djLmkJMjAwNS0xMC0yMCAyMzoxMDo1Ni4wMDAwMDAwMDAgKzAx MDAKKysrIHN1YnZlcnNpb24tMS4zLjEubmV3L3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9zdm5f d2MuaQkyMDA2LTA3LTA0IDE5OjAxOjA2LjAwMDAwMDAwMCArMDEwMApAQCAtMTkxLDYgKzE5MSwy MCBAQAogICAkMSA9IHN2bl9zd2lnX3JiX2FycmF5X3RvX2Fwcl9hcnJheV9wcm9wKCRpbnB1dCwg cG9vbCk7CiB9CiAKKyNpZmRlZiBTV0lHUFlUSE9OCisldHlwZW1hcChpbiwgbnVtaW5wdXRzPTAp CisgICAgIGFwcl9hcnJheV9oZWFkZXJfdCAqKnBhdHRlcm5zIChhcHJfYXJyYXlfaGVhZGVyX3Qg KnRlbXApCit7CisgICQxID0gJnRlbXA7Cit9CisldHlwZW1hcChhcmdvdXQsIGZyYWdtZW50PSJ0 X291dHB1dF9oZWxwZXIiKQorICAgICBhcHJfYXJyYXlfaGVhZGVyX3QgKipwYXR0ZXJucworewor ICAkcmVzdWx0ID0gdF9vdXRwdXRfaGVscGVyKCRyZXN1bHQsCisgICAgICAgICAgICAgICAgICAg ICAgICAgIHN2bl9zd2lnX3B5X2FycmF5X3RvX2xpc3QoKiQxKSk7Cit9CisjZW5kaWYKKwogLyog LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KICAgIENhbGxiYWNrOiBzdm5fd2Nfbm90aWZ5X2Z1bmNfdAogICAgc3Zu X2NsaWVudF9jdHhfdApAQCAtMjM3LDYgKzI1MSwxMSBAQAogICAkMiA9ICRpbnB1dDsgLyogb3Vy IGZ1bmN0aW9uIGlzIHRoZSBiYXRvbi4gKi8KIH0KIAorJXR5cGVtYXAocHl0aG9uLGluKSAoc3Zu X3djX25vdGlmeV9mdW5jMl90IG5vdGlmeV9mdW5jLCB2b2lkICpub3RpZnlfYmF0b24pIHsKKyAg ICQxID0gc3ZuX3N3aWdfcHlfbm90aWZ5X2Z1bmMyOworICAgJDIgPSAkaW5wdXQ7IC8qIG91ciBm dW5jdGlvbiBpcyB0aGUgYmF0b24uICovCit9CisKICV0eXBlbWFwKHBlcmw1LGluKSAoc3ZuX3dj X3N0YXR1c19mdW5jX3Qgc3RhdHVzX2Z1bmMsIHZvaWQgKnN0YXR1c19iYXRvbikgewogICAkMSA9 IHN2bl9zd2lnX3BsX3N0YXR1c19mdW5jOwogICAkMiA9ICRpbnB1dDsgLyogb3VyIGZ1bmN0aW9u IGlzIHRoZSBiYXRvbi4gKi8KZGlmZiAtTnVyIHN1YnZlcnNpb24tMS4zLjEvc3VidmVyc2lvbi9s aWJzdm5fcmFfc3ZuL2NsaWVudC5jIHN1YnZlcnNpb24tMS4zLjEubmV3L3N1YnZlcnNpb24vbGli c3ZuX3JhX3N2bi9jbGllbnQuYwotLS0gc3VidmVyc2lvbi0xLjMuMS9zdWJ2ZXJzaW9uL2xpYnN2 bl9yYV9zdm4vY2xpZW50LmMJMjAwNS0xMi0wOSAwMTo1NTowOS4wMDAwMDAwMDAgKzAwMDAKKysr IHN1YnZlcnNpb24tMS4zLjEubmV3L3N1YnZlcnNpb24vbGlic3ZuX3JhX3N2bi9jbGllbnQuYwky MDA2LTA3LTA0IDE5OjAxOjA2LjAwMDAwMDAwMCArMDEwMApAQCAtMTE1MSwxMSArMTE1MSw4IEBA CiAgICAgfQogICBhcHJfcG9vbF9kZXN0cm95KHN1YnBvb2wpOwogCi0gIGlmIChucmVjZWl2ZWQg PD0gbGltaXQpCi0gICAgewotICAgICAgLyogUmVhZCB0aGUgcmVzcG9uc2UuICovCi0gICAgICBT Vk5fRVJSKHN2bl9yYV9zdm5fcmVhZF9jbWRfcmVzcG9uc2UoY29ubiwgcG9vbCwgIiIpKTsKLSAg ICB9CisgIC8qIFJlYWQgdGhlIHJlc3BvbnNlLiAqLworICBTVk5fRVJSKHN2bl9yYV9zdm5fcmVh ZF9jbWRfcmVzcG9uc2UoY29ubiwgcG9vbCwgIiIpKTsKIAogICByZXR1cm4gU1ZOX05PX0VSUk9S OwogfQpkaWZmIC1OdXIgc3VidmVyc2lvbi0xLjMuMS9zdWJ2ZXJzaW9uL2xpYnN2bl9zdWJyL2Nv bnN0cnVjdG9ycy5jIHN1YnZlcnNpb24tMS4zLjEubmV3L3N1YnZlcnNpb24vbGlic3ZuX3N1YnIv Y29uc3RydWN0b3JzLmMKLS0tIHN1YnZlcnNpb24tMS4zLjEvc3VidmVyc2lvbi9saWJzdm5fc3Vi ci9jb25zdHJ1Y3RvcnMuYwkyMDA1LTEwLTE4IDE5OjQwOjAyLjAwMDAwMDAwMCArMDEwMAorKysg c3VidmVyc2lvbi0xLjMuMS5uZXcvc3VidmVyc2lvbi9saWJzdm5fc3Vici9jb25zdHJ1Y3RvcnMu YwkyMDA2LTA3LTA0IDE5OjAxOjA2LjAwMDAwMDAwMCArMDEwMApAQCAtMzYsNiArMzYsMjMgQEAK ICAgcmV0dXJuIGNvbW1pdF9pbmZvOwogfQogCitzdm5fY29tbWl0X2luZm9fdCAqCitzdm5fY29t bWl0X2luZm9fZHVwKGNvbnN0IHN2bl9jb21taXRfaW5mb190ICpzcmNfY29tbWl0X2luZm8sCisg ICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpCit7CisgIHN2bl9jb21taXRfaW5m b190ICpkc3RfY29tbWl0X2luZm8gPSBzdm5fY3JlYXRlX2NvbW1pdF9pbmZvKHBvb2wpOworCisg IGRzdF9jb21taXRfaW5mby0+ZGF0ZSA9IHNyY19jb21taXRfaW5mby0+ZGF0ZQorICAgID8gYXBy X3BzdHJkdXAocG9vbCwgc3JjX2NvbW1pdF9pbmZvLT5kYXRlKSA6IE5VTEw7CisgIGRzdF9jb21t aXRfaW5mby0+YXV0aG9yID0gc3JjX2NvbW1pdF9pbmZvLT5hdXRob3IKKyAgICA/IGFwcl9wc3Ry ZHVwKHBvb2wsIHNyY19jb21taXRfaW5mby0+YXV0aG9yKSA6IE5VTEw7CisgIGRzdF9jb21taXRf aW5mby0+cmV2aXNpb24gPSBzcmNfY29tbWl0X2luZm8tPnJldmlzaW9uOworICBkc3RfY29tbWl0 X2luZm8tPnBvc3RfY29tbWl0X2VyciA9IHNyY19jb21taXRfaW5mby0+cG9zdF9jb21taXRfZXJy CisgICAgPyBhcHJfcHN0cmR1cChwb29sLCBzcmNfY29tbWl0X2luZm8tPnBvc3RfY29tbWl0X2Vy cikgOiBOVUxMOworCisgIHJldHVybiBkc3RfY29tbWl0X2luZm87Cit9CisKIHN2bl9sb2dfY2hh bmdlZF9wYXRoX3QgKgogc3ZuX2xvZ19jaGFuZ2VkX3BhdGhfZHVwIChjb25zdCBzdm5fbG9nX2No YW5nZWRfcGF0aF90ICpjaGFuZ2VkX3BhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGFw cl9wb29sX3QgKnBvb2wpCg== UNSPECIFIED Updated for http support text/plain ZGlmZiAtTnVyIHN1YnZlcnNpb24tMS4zLjEvYnVpbGQuY29uZiBzdWJ2ZXJzaW9uLTEuMy4xLm5l dy9idWlsZC5jb25mCi0tLSBzdWJ2ZXJzaW9uLTEuMy4xL2J1aWxkLmNvbmYJMjAwNi0wNy0wNSAw MTowMzo1OC4wMDAwMDAwMDAgKzAxMDAKKysrIHN1YnZlcnNpb24tMS4zLjEubmV3L2J1aWxkLmNv bmYJMjAwNi0wNy0wNSAwMTowNDowNi4wMDAwMDAwMDAgKzAxMDAKQEAgLTM1MSw3ICszNTEsNyBA QAogdHlwZSA9IHN3aWdfbGliCiBsYW5nID0gcHl0aG9uCiBwYXRoID0gc3VidmVyc2lvbi9iaW5k aW5ncy9zd2lnL3B5dGhvbi9saWJzdm5fc3dpZ19weQotbGlicyA9IGxpYnN2bl9zdWJyIGxpYnN2 bl9kZWx0YSBsaWJzdm5fd2MgYXByCitsaWJzID0gbGlic3ZuX2NsaWVudCBsaWJzdm5fc3ViciBs aWJzdm5fZGVsdGEgbGlic3ZuX3djIGFwcgogbGluay1jbWQgPSAkKExJTkspICQoU1dJR19QWV9M SUJTKQogaW5zdGFsbCA9IHN3aWctcHktbGliCiAjIG5lZWQgc3BlY2lhbCBidWlsZCBydWxlIHRv IGluY2x1ZGUgLURTV0lHUFlUSE9OCmRpZmYgLU51ciBzdWJ2ZXJzaW9uLTEuMy4xL3N1YnZlcnNp b24vYmluZGluZ3Mvc3dpZy9pbmNsdWRlL2Fwci5zd2cgc3VidmVyc2lvbi0xLjMuMS5uZXcvc3Vi dmVyc2lvbi9iaW5kaW5ncy9zd2lnL2luY2x1ZGUvYXByLnN3ZwotLS0gc3VidmVyc2lvbi0xLjMu MS9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvaW5jbHVkZS9hcHIuc3dnCTIwMDUtMTAtMjUgMjA6 MTY6MzguMDAwMDAwMDAwICswMTAwCisrKyBzdWJ2ZXJzaW9uLTEuMy4xLm5ldy9zdWJ2ZXJzaW9u L2JpbmRpbmdzL3N3aWcvaW5jbHVkZS9hcHIuc3dnCTIwMDYtMDctMDUgMDE6MDQ6MDYuMDAwMDAw MDAwICswMTAwCkBAIC0xNDYsMTQgKzE0NiwyNCBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAg Y3JlYXRlIGFuIE9VVFBVVCBhcmd1bWVudCBkZWZuIGZvciBhbiBhcHJfaGFzaF90ICoqIHdoaWNo IGlzIHN0b3JpbmcKKyAgIGRpcmVudCB2YWx1ZXMKKyovCisldHlwZW1hcChweXRob24saW4sbnVt aW5wdXRzPTApIGFwcl9oYXNoX3QgKipESVJFTlRIQVNIID0gYXByX2hhc2hfdCAqKk9VVFBVVDsK KyV0eXBlbWFwKHB5dGhvbixhcmdvdXQsZnJhZ21lbnQ9InRfb3V0cHV0X2hlbHBlciIpIGFwcl9o YXNoX3QgKipESVJFTlRIQVNIIHsKKyAgICAkcmVzdWx0ID0gdF9vdXRwdXRfaGVscGVyKCRyZXN1 bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdm5fc3dpZ19weV9jb252ZXJ0X2hh c2goKiQxLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBTV0lHVFlQRV9wX3N2bl9kaXJlbnRfdCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKSk7Cit9CisKKy8qIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgICBjcmVhdGUgYW4gT1VUUFVUIGFyZ3VtZW50IGRlZm4gZm9yIGFuIGFwcl9oYXNo X3QgKiogd2hpY2ggaXMgc3RvcmluZwogICAgcHJvcGVydHkgdmFsdWVzCiAqLwogCiAldHlwZW1h cChweXRob24saW4sbnVtaW5wdXRzPTApIGFwcl9oYXNoX3QgKipQUk9QSEFTSCA9IGFwcl9oYXNo X3QgKipPVVRQVVQ7Ci0ldHlwZW1hcChweXRob24sYXJnb3V0KSBhcHJfaGFzaF90ICoqUFJPUEhB U0ggewotICAgIC8qIHRvc3MgcHJpb3IgcmVzdWx0LCBnZXQgbmV3IHJlc3VsdCBmcm9tIHRoZSBo YXNoICovCi0gICAgUHlfREVDUkVGKCRyZXN1bHQpOwotICAgICRyZXN1bHQgPSBzdm5fc3dpZ19w eV9wcm9waGFzaF90b19kaWN0KCokMSk7CisldHlwZW1hcChweXRob24sYXJnb3V0LGZyYWdtZW50 PSJ0X291dHB1dF9oZWxwZXIiKSBhcHJfaGFzaF90ICoqUFJPUEhBU0ggeworICAgICRyZXN1bHQg PSB0X291dHB1dF9oZWxwZXIoJHJlc3VsdCwgc3ZuX3N3aWdfcHlfcHJvcGhhc2hfdG9fZGljdCgq JDEpKTsKIH0KIAogJXR5cGVtYXAocGVybDUsaW4sbnVtaW5wdXRzPTApIGFwcl9oYXNoX3QgKipQ Uk9QSEFTSCA9IGFwcl9oYXNoX3QgKipPVVRQVVQ7CmRpZmYgLU51ciBzdWJ2ZXJzaW9uLTEuMy4x L3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9pbmNsdWRlL3Byb3h5X2Fwci5zd2cgc3VidmVyc2lv bi0xLjMuMS5uZXcvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL2luY2x1ZGUvcHJveHlfYXByLnN3 ZwotLS0gc3VidmVyc2lvbi0xLjMuMS9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvaW5jbHVkZS9w cm94eV9hcHIuc3dnCTIwMDYtMDMtMTMgMDk6NTE6NDAuMDAwMDAwMDAwICswMDAwCisrKyBzdWJ2 ZXJzaW9uLTEuMy4xLm5ldy9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvaW5jbHVkZS9wcm94eV9h cHIuc3dnCTIwMDYtMDctMDUgMDE6MDQ6MDYuMDAwMDAwMDAwICswMTAwCkBAIC0xMTIsNiArMTEy LDI4IEBACiAgICAgICAgICAgZGVsIHNlbGYuX3BhcmVudF9wb29sCiAgICAgICAgIGlmIGhhc2F0 dHIoc2VsZiwgIl9pc192YWxpZCIpOgogICAgICAgICAgIGRlbCBzZWxmLl9pc192YWxpZAorICAg ICAgICAKKyAgICAgICAgIyBDbGVhciBvdXQgYW55IHBvb2wtb3duZWQgcmVmZXJlbmNlcyBpbnNl cnRlZCBieSB0eXBlbWFwcworICAgICAgICBpZiBoYXNhdHRyKHNlbGYsICJfb3duZWRfcmVmcyIp OgorICAgICAgICAgIGRlbCBzZWxmLl9vd25lZF9yZWZzCisKKyAgICAgIGRlZiBfYWRkX293bmVk X3JlZihzZWxmLCByZWYpOgorICAgICAgICAiIiJBZGQgYSBuZXcgJ293bmVkJyByZWZlcmVuY2Ug LS0gaS5lLiBhIFB5dGhvbiBvYmplY3QgY29udGFpbmVkIGluIGEgQworICAgICAgICAgICBzdHJ1 Y3R1cmUgYWxsb2NhdGVkIGluIHRoaXMgcG9vbC4gIFVzZWQgYnkgdGhlIHR5cGVtYXBzIHRvIG1h bmFnZQorICAgICAgICAgICByZWZlcmVuY2UgY291bnRpbmcgc2VtYW50aWNzLiIiIgorICAgICAg ICBpZiBub3QgaGFzYXR0cihzZWxmLCAiX293bmVkX3JlZnMiKToKKyAgICAgICAgICBzZWxmLl9v d25lZF9yZWZzID0ge30KKyAgICAgICAgaWYgc2VsZi5fb3duZWRfcmVmcy5oYXNfa2V5KHJlZik6 CisgICAgICAgICAgc2VsZi5fb3duZWRfcmVmc1tyZWZdICs9IDEKKyAgICAgICAgZWxzZToKKyAg ICAgICAgICBzZWxmLl9vd25lZF9yZWZzW3JlZl0gPSAxCisgICAgICAKKyAgICAgIGRlZiBfcmVt b3ZlX293bmVkX3JlZihzZWxmLCByZWYpOgorICAgICAgICAiIiJSZW1vdmUgYW4gZXhpc3Rpbmcg J293bmVkJyByZWZlcmVuY2UuICBBbHNvIHVzZWQgYnkgdHlwZW1hcHMuIiIiCisgICAgICAgIGlm IGhhc2F0dHIoc2VsZiwgIl9vd25lZF9yZWZzIikgYW5kIHNlbGYuX293bmVkX3JlZnMuaGFzX2tl eShyZWYpOgorICAgICAgICAgIHNlbGYuX293bmVkX3JlZnNbcmVmXSAtPSAxCisgICAgICAgICAg aWYgc2VsZi5fb3duZWRfcmVmc1tyZWZdID09IDA6CisgICAgICAgICAgICBkZWwgc2VsZi5fb3du ZWRfcmVmc1tyZWZdCiAgIAogICAgICAgZGVmIF9fZGVsX18oc2VsZik6CiAgICAgICAgICIiIkF1 dG9tYXRpY2FsbHkgZGVzdHJveSBtZW1vcnkgcG9vbHMsIGlmIG5lY2Vzc2FyeSIiIgpkaWZmIC1O dXIgc3VidmVyc2lvbi0xLjMuMS9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvaW5jbHVkZS9wcm94 eV9hcHIuc3dnLm9yaWcgc3VidmVyc2lvbi0xLjMuMS5uZXcvc3VidmVyc2lvbi9iaW5kaW5ncy9z d2lnL2luY2x1ZGUvcHJveHlfYXByLnN3Zy5vcmlnCi0tLSBzdWJ2ZXJzaW9uLTEuMy4xL3N1YnZl cnNpb24vYmluZGluZ3Mvc3dpZy9pbmNsdWRlL3Byb3h5X2Fwci5zd2cub3JpZwkxOTcwLTAxLTAx IDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgc3VidmVyc2lvbi0xLjMuMS5uZXcvc3VidmVy c2lvbi9iaW5kaW5ncy9zd2lnL2luY2x1ZGUvcHJveHlfYXByLnN3Zy5vcmlnCTIwMDYtMDctMDUg MDE6MDQ6MDYuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsMTg1IEBACisvKiBQcm94eSBjbGFz c2VzIGZvciBhcHJfKi4gR2VuZXJhdGVkIGJ5IGhhbmQuICovCisKKyNpZmRlZiBTV0lHUFlUSE9O CislaW5jbHVkZSBwcm94eS5zd2cKKworJW5vZGVmYXVsdCBhcHJfYXJyYXlfaGVhZGVyX3Q7Cisl bm9kZWZhdWx0IGFwcl9maWxlX3Q7Cislbm9kZWZhdWx0IGFwcl9oYXNoX3Q7Cislbm9kZWZhdWx0 IGFwcl9wb29sX3Q7CisKKyVvcGFxdWVfcHJveHkoYXByX2FycmF5X2hlYWRlcl90KTsKKyVvcGFx dWVfcHJveHkoYXByX2ZpbGVfdCk7Cislb3BhcXVlX3Byb3h5KGFwcl9oYXNoX3QpOworCislcHl0 aG9uY29kZSAleworaW1wb3J0IHRocmVhZGluZworCithcHBsaWNhdGlvbl9wb29sID0gTm9uZQor YXBwbGljYXRpb25fcG9vbF9sb2NrID0gdGhyZWFkaW5nLkxvY2soKQorY2xhc3MgR2VuZXJpY1NX SUdXcmFwcGVyOgorICBkZWYgX19pbml0X18oc2VsZiwgdGhpcywgcG9vbCk6CisgICAgIiIiQ3Jl YXRlIG5ldyBHZW5lcmljIFNXSUcgd3JhcHBlciBvYmplY3QiIiIKKyAgICBpbXBvcnQgd2Vha3Jl ZgorICAgIHNlbGYudGhpcyA9IHRoaXMKKyAgICBzZWxmLl9wYXJlbnRfcG9vbCA9IHBvb2wKKyAg ICBzZWxmLl9pc192YWxpZCA9IHdlYWtyZWYucmVmKHBvb2wuX2lzX3ZhbGlkKQorCisgIGRlZiBz ZXRfcGFyZW50X3Bvb2woc2VsZiwgcG9vbCk6CisgICAgIiIiU2V0IHRoZSBwYXJlbnQgcG9vbCBv ZiB0aGlzIG9iamVjdCIiIgorICAgIHNlbGYuX3BhcmVudF9wb29sID0gcG9vbAorCisgIGRlZiB2 YWxpZChzZWxmKToKKyAgICAiIiJJcyB0aGlzIG9iamVjdCB2YWxpZD8iIiIKKyAgICByZXR1cm4g c2VsZi5faXNfdmFsaWQoKQorCisgIGRlZiBhc3NlcnRfdmFsaWQoc2VsZik6CisgICAgIiIiQXNz ZXJ0IHRoYXQgdGhpcyBvYmplY3QgaXMgc3RpbGwgdmFsaWQiIiIKKyAgICBhc3NlcnQgc2VsZi52 YWxpZCgpLCAiVGhpcyBvYmplY3QgaGFzIGFscmVhZHkgYmVlbiBkZXN0cm95ZWQiCisKKyAgZGVm IF91bndyYXAoc2VsZik6CisgICAgIiIiUmV0dXJuIHVuZGVybHlpbmcgU1dJRyBvYmplY3QiIiIK KyAgICBzZWxmLmFzc2VydF92YWxpZCgpCisgICAgcmV0dXJuIHNlbGYudGhpcworIAorZGVmIF9t YXJrX3dlYWtwb29sX2ludmFsaWQod2Vha3Bvb2wpOgorICBpZiB3ZWFrcG9vbCBhbmQgd2Vha3Bv b2woKSBhbmQgaGFzYXR0cih3ZWFrcG9vbCgpLCAiX2lzX3ZhbGlkIik6CisgICAgZGVsIHdlYWtw b29sKCkuX2lzX3ZhbGlkCisKKyV9CisKK3N0cnVjdCBhcHJfcG9vbF90IHsKKyAgJWV4dGVuZCB7 CisgICAgJXB5dGhvbmNvZGUgJXsKKyAgICAgIGRlZiBzZXRfcGFyZW50X3Bvb2woc2VsZiwgcGFy ZW50X3Bvb2w9Tm9uZSk6CisgICAgICAgICIiIkNyZWF0ZSBhIG5ldyBtZW1vcnkgcG9vbCIiIgor ICAgICAgICBnbG9iYWwgYXBwbGljYXRpb25fcG9vbAorCisgICAgICAgIHRyeToKKyAgICAgICAg ICBhcHBsaWNhdGlvbl9wb29sX2xvY2suYWNxdWlyZSgpCisKKyAgICAgICAgICBzZWxmLl9wYXJl bnRfcG9vbCA9IHBhcmVudF9wb29sIG9yIGFwcGxpY2F0aW9uX3Bvb2wKKyAgICAgICAgICBzZWxm Ll9tYXJrX3ZhbGlkKCkKKyAgICAKKyAgICAgICAgICAjIFByb3RlY3QgaW1wb3J0YW50IGZ1bmN0 aW9ucyBmcm9tIEdDCisgICAgICAgICAgc2VsZi5fYXByX3Bvb2xfZGVzdHJveSA9IF9jb3JlLmFw cl9wb29sX2Rlc3Ryb3kKKyAgICAgICAgICBzZWxmLl9zdm5fc3dpZ19weV9jbGVhcl9hcHBsaWNh dGlvbl9wb29sID0gXAorICAgICAgICAgICAgX2NvcmUuc3ZuX3N3aWdfcHlfY2xlYXJfYXBwbGlj YXRpb25fcG9vbAorICAgIAorICAgICAgICAgICMgSWYgd2UgYXJlIGFuIGFwcGxpY2F0aW9uLWxl dmVsIHBvb2wsCisgICAgICAgICAgIyB0aGVuIHNldCB0aGlzIHBvb2wgdG8gYmUgdGhlIGFwcGxp Y2F0aW9uLWxldmVsIHBvb2wKKyAgICAgICAgICBpZiBub3Qgc2VsZi5fcGFyZW50X3Bvb2w6Cisg ICAgICAgICAgICBzdm5fc3dpZ19weV9zZXRfYXBwbGljYXRpb25fcG9vbChzZWxmLCBzZWxmKQor ICAgICAgICAgICAgYXBwbGljYXRpb25fcG9vbCA9IHNlbGYKKyAgICAgICAgZmluYWxseToKKyAg ICAgICAgICBhcHBsaWNhdGlvbl9wb29sX2xvY2sucmVsZWFzZSgpCisgIAorICAgICAgZGVmIHZh bGlkKHNlbGYpOgorICAgICAgICAiIiJDaGVjayB3aGV0aGVyIHRoaXMgbWVtb3J5IHBvb2wgYW5k IGl0cyBwYXJlbnRzCisgICAgICAgIGFyZSBzdGlsbCB2YWxpZCIiIgorICAgICAgICByZXR1cm4g aGFzYXR0cihzZWxmLCJfaXNfdmFsaWQiKQorICAKKyAgICAgIGRlZiBhc3NlcnRfdmFsaWQoc2Vs Zik6CisgICAgICAgICIiIkFzc2VydCB0aGF0IHRoaXMgbWVtb3J5X3Bvb2wgaXMgc3RpbGwgdmFs aWQuIiIiCisgICAgICAgIGFzc2VydCBzZWxmLnZhbGlkKCksICJUaGlzIHBvb2wgaGFzIGFscmVh ZHkgYmVlbiBkZXN0cm95ZWQiCisgIAorICAgICAgZGVmIGNsZWFyKHNlbGYpOgorICAgICAgICAi IiJDbGVhciBlbWJlZGRlZCBtZW1vcnkgcG9vbC4gSW52YWxpZGF0ZSBhbGwgc3VicG9vbHMuIiIi CisgICAgICAgIHBvb2wgPSBzZWxmLl9wYXJlbnRfcG9vbAorICAgICAgICBhcHJfcG9vbF9jbGVh cihzZWxmKQorICAgICAgICBzZWxmLnNldF9wYXJlbnRfcG9vbChwb29sKQorICAKKyAgICAgIGRl ZiBkZXN0cm95KHNlbGYpOgorICAgICAgICAiIiJEZXN0cm95IGVtYmVkZGVkIG1lbW9yeSBwb29s LiBJZiB5b3UgZG8gbm90IGRlc3Ryb3kKKyAgICAgICAgdGhlIG1lbW9yeSBwb29sIG1hbnVhbGx5 LCBQeXRob24gd2lsbCBkZXN0cm95IGl0CisgICAgICAgIGF1dG9tYXRpY2FsbHkuIiIiCisgICAg ICAgIGdsb2JhbCBhcHBsaWNhdGlvbl9wb29sCisgIAorICAgICAgICBzZWxmLmFzc2VydF92YWxp ZCgpCisgIAorICAgICAgICBpc19hcHBsaWNhdGlvbl9wb29sID0gbm90IHNlbGYuX3BhcmVudF9w b29sCisgIAorICAgICAgICAjIERlc3Ryb3kgcG9vbAorICAgICAgICBzZWxmLl9hcHJfcG9vbF9k ZXN0cm95KHNlbGYpCisgIAorICAgICAgICAjIENsZWFyIGFwcGxpY2F0aW9uIHBvb2wgaWYgbmVj ZXNzYXJ5CisgICAgICAgIGlmIGlzX2FwcGxpY2F0aW9uX3Bvb2w6CisgICAgICAgICAgYXBwbGlj YXRpb25fcG9vbCA9IE5vbmUKKyAgICAgICAgICBzZWxmLl9zdm5fc3dpZ19weV9jbGVhcl9hcHBs aWNhdGlvbl9wb29sKCkKKyAgCisgICAgICAgICMgTWFyayBzZWxmIGFzIGludmFsaWQKKyAgICAg ICAgaWYgaGFzYXR0cihzZWxmLCAiX3BhcmVudF9wb29sIik6CisgICAgICAgICAgZGVsIHNlbGYu X3BhcmVudF9wb29sCisgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgIl9pc192YWxpZCIpOgorICAg ICAgICAgIGRlbCBzZWxmLl9pc192YWxpZAorICAgICAgICAKKyAgICAgICAgIyBDbGVhciBvdXQg YW55IHBvb2wtb3duZWQgcmVmZXJlbmNlcyBpbnNlcnRlZCBieSB0eXBlbWFwcworICAgICAgICBp ZiBoYXNhdHRyKHNlbGYsICJfb3duZWRfcmVmcyIpOgorICAgICAgICAgIGRlbCBzZWxmLl9vd25l ZF9yZWZzCisKKyAgICAgIGRlZiBfYWRkX293bmVkX3JlZihzZWxmLCByZWYpOgorICAgICAgICAi IiJBZGQgYSBuZXcgJ293bmVkJyByZWZlcmVuY2UgLS0gaS5lLiBhIFB5dGhvbiBvYmplY3QgY29u dGFpbmVkIGluIGEgQworICAgICAgICAgICBzdHJ1Y3R1cmUgYWxsb2NhdGVkIGluIHRoaXMgcG9v bC4gIFVzZWQgYnkgdGhlIHR5cGVtYXBzIHRvIG1hbmFnZQorICAgICAgICAgICByZWZlcmVuY2Ug Y291bnRpbmcgc2VtYW50aWNzLiIiIgorICAgICAgICBpZiBub3QgaGFzYXR0cihzZWxmLCAiX293 bmVkX3JlZnMiKToKKyAgICAgICAgICBzZWxmLl9vd25lZF9yZWZzID0ge30KKyAgICAgICAgaWYg c2VsZi5fb3duZWRfcmVmcy5oYXNfa2V5KHJlZik6CisgICAgICAgICAgc2VsZi5fb3duZWRfcmVm c1tyZWZdICs9IDEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICBzZWxmLl9vd25lZF9yZWZzW3Jl Zl0gPSAxCisgICAgICAKKyAgICAgIGRlZiBfcmVtb3ZlX293bmVkX3JlZihzZWxmLCByZWYpOgor ICAgICAgICAiIiJSZW1vdmUgYW4gZXhpc3RpbmcgJ293bmVkJyByZWZlcmVuY2UuICBBbHNvIHVz ZWQgYnkgdHlwZW1hcHMuIiIiCisgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgIl9vd25lZF9yZWZz IikgYW5kIHNlbGYuX293bmVkX3JlZnMuaGFzX2tleShyZWYpOgorICAgICAgICAgIHNlbGYuX293 bmVkX3JlZnNbcmVmXSAtPSAxCisgICAgICAgICAgaWYgc2VsZi5fb3duZWRfcmVmc1tyZWZdID09 IDA6CisgICAgICAgICAgICBkZWwgc2VsZi5fb3duZWRfcmVmc1tyZWZdCisgIAorICAgICAgZGVm IF9fZGVsX18oc2VsZik6CisgICAgICAgICIiIkF1dG9tYXRpY2FsbHkgZGVzdHJveSBtZW1vcnkg cG9vbHMsIGlmIG5lY2Vzc2FyeSIiIgorICAgICAgICBpZiBzZWxmLnZhbGlkKCk6CisgICAgICAg ICAgc2VsZi5kZXN0cm95KCkKKyAgCisgICAgICBkZWYgX21hcmtfdmFsaWQoc2VsZik6CisgICAg ICAgICIiIk1hcmsgcG9vbCBhcyB2YWxpZCIiIgorCisgICAgICAgIHNlbGYuX3dlYWtwYXJlbnQg PSBOb25lCisKKyAgICAgICAgaWYgc2VsZi5fcGFyZW50X3Bvb2w6CisgICAgICAgICAgaW1wb3J0 IHdlYWtyZWYKKworICAgICAgICAgICMgTWFrZSBzdXJlIHRoYXQgdGhlIHBhcmVudCBvYmplY3Qg aXMgdmFsaWQKKyAgICAgICAgICBzZWxmLl9wYXJlbnRfcG9vbC5hc3NlcnRfdmFsaWQoKQorCisg ICAgICAgICAgIyBSZWZlciB0byBzZWxmIHVzaW5nIGEgd2Vha3JlZnJlbmNlIHNvIHRoYXQgd2Ug ZG9uJ3QKKyAgICAgICAgICAjIGNyZWF0ZSBhIHJlZmVyZW5jZSBjeWNsZQorICAgICAgICAgIHdl YWtzZWxmID0gd2Vha3JlZi5yZWYoc2VsZikKKworICAgICAgICAgICMgU2V0IHVwIGNhbGxiYWNr cyB0byBtYXJrIHBvb2wgYXMgaW52YWxpZCB3aGVuIHBhcmVudHMKKyAgICAgICAgICAjIGFyZSBk ZXN0cm95ZWQKKyAgICAgICAgICBzZWxmLl93ZWFrcGFyZW50ID0gd2Vha3JlZi5yZWYoc2VsZi5f cGFyZW50X3Bvb2wuX2lzX3ZhbGlkLAorICAgICAgICAgICAgbGFtYmRhIHg6IF9tYXJrX3dlYWtw b29sX2ludmFsaWQod2Vha3NlbGYpKQorICAKKyAgICAgICAgIyBNYXJrIHBvb2wgYXMgdmFsaWQK KyAgICAgICAgc2VsZi5faXNfdmFsaWQgPSBsYW1iZGE6IDEKKworICAgICAgZGVmIF93cmFwKHNl bGYsIG9iaik6CisgICAgICAgICIiIk1hcmsgYSBTV0lHIG9iamVjdCBhcyBvd25lZCBieSB0aGlz IHBvb2wiIiIKKyAgICAgICAgc2VsZi5hc3NlcnRfdmFsaWQoKQorICAgICAgICBpZiBoYXNhdHRy KG9iaiwgInNldF9wYXJlbnRfcG9vbCIpOgorICAgICAgICAgIG9iai5zZXRfcGFyZW50X3Bvb2wo c2VsZikKKyAgICAgICAgICByZXR1cm4gb2JqIAorICAgICAgICBlbGlmIG9iaiBpcyBOb25lOgor ICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgcmV0dXJuIEdl bmVyaWNTV0lHV3JhcHBlcihvYmosIHNlbGYpCisKKyAgICAlfQorICB9Cit9OworJXB5dGhvbmNv ZGUgJXsKKyMgSW5pdGlhbGl6ZSBhIGdsb2JhbCBwb29sCitzdm5fcG9vbF9jcmVhdGUoKQorJX0K KyNlbmRpZgorCmRpZmYgLU51ciBzdWJ2ZXJzaW9uLTEuMy4xL3N1YnZlcnNpb24vYmluZGluZ3Mv c3dpZy9pbmNsdWRlL3N2bl90eXBlcy5zd2cgc3VidmVyc2lvbi0xLjMuMS5uZXcvc3VidmVyc2lv bi9iaW5kaW5ncy9zd2lnL2luY2x1ZGUvc3ZuX3R5cGVzLnN3ZwotLS0gc3VidmVyc2lvbi0xLjMu MS9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvaW5jbHVkZS9zdm5fdHlwZXMuc3dnCTIwMDUtMTAt MjUgMjA6MDM6MjEuMDAwMDAwMDAwICswMTAwCisrKyBzdWJ2ZXJzaW9uLTEuMy4xLm5ldy9zdWJ2 ZXJzaW9uL2JpbmRpbmdzL3N3aWcvaW5jbHVkZS9zdm5fdHlwZXMuc3dnCTIwMDYtMDctMDUgMDE6 MDQ6MDYuMDAwMDAwMDAwICswMTAwCkBAIC00MzAsNiArNDMwLDEyIEBACiAgICQyID0gKHZvaWQg Kilzdm5fc3dpZ19yYl9tYWtlX2JhdG9uKCRpbnB1dCwgX2dsb2JhbF9zdm5fc3dpZ19yYl9wb29s KTsKIH07CiAKKyV0eXBlbWFwKHB5dGhvbiwgaW4pIChzdm5fY29tbWl0X2NhbGxiYWNrMl90IGNh bGxiYWNrLCB2b2lkICpjYWxsYmFja19iYXRvbikKK3sKKyAgJDEgPSBzdm5fc3dpZ19weV9jb21t aXRfY2FsbGJhY2syOworICAkMiA9ICh2b2lkICopJGlucHV0OworfQorCiAvKiAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQogICAgQ2FsbGJhY2s6IHN2bl9jYW5jZWxfZnVuY190CiAqLwpAQCAtNDkzLDYgKzQ5OSw2 MCBAQAogICAkMSA9IHN2bl9zd2lnX3JiX21ha2Vfc3RyZWFtKCRpbnB1dCk7CiB9CiAKKyNpZmRl ZiBTV0lHUFlUSE9OCisldHlwZW1hcChpbikgKHN2bl9jb21taXRfY2FsbGJhY2tfdCBjYWxsYmFj aywgdm9pZCAqY2FsbGJhY2tfYmF0b24pCit7CisgICQxID0gc3ZuX3N3aWdfcHlfY29tbWl0X2Nh bGxiYWNrOworICAkMiA9ICh2b2lkICopJGlucHV0OworfQorI2VuZGlmCisKKyNpZmRlZiBTV0lH UFlUSE9OCisldHlwZW1hcChpbikgKHN2bl9jb21taXRfY2FsbGJhY2tfdCBjYWxsYmFjaywgdm9p ZCAqY2FsbGJhY2tfYmF0b24pCit7CisgICQxID0gc3ZuX3N3aWdfcHlfY29tbWl0X2NhbGxiYWNr OworICAkMiA9ICh2b2lkICopJGlucHV0OworfQorI2VuZGlmCisKKy8qIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgICBNYXBwZXIgdG8gYXV0b21hdGljYWxseSB0dXJuIFB5dGhvbiBvYmplY3RzIGludG8gdm9p ZCogYmF0b25zIG9uIGFzc2lnbm1lbnQKKyovCisKKyNpZmRlZiBTV0lHUFlUSE9OCisldHlwZW1h cChpbikgdm9pZCAqUFlfQVNfVk9JRCAoUHlPYmplY3QgKm5ld1JlZikgeworICBuZXdSZWYgPSAk aW5wdXQ7CisgIGlmICgkaW5wdXQgPT0gUHlfTm9uZSkgeworICAgICQxID0gbmV3UmVmID0gTlVM TDsKKyAgfSBlbHNlIHsKKyAgICBuZXdSZWYgPSAkaW5wdXQ7CisgICAgJDEgPSAodm9pZCAqKSRp bnB1dDsKKyAgfQorICBpZiAoc3ZuX3N3aWdfcHlfcG9vbF9zZXRfb3duZWRfcmVmKG9iajAsIChQ eU9iamVjdCAqKWFyZzEtPiQxX25hbWUsIG5ld1JlZikpIHsKKyAgICBTV0lHX2ZhaWw7CisgIH0K K30KKyNlbmRpZgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgTWFwcGVyIHRvIGF1dG9tYXRpY2Fs bHkgdHVybiBQeXRob24gb2JqZWN0cyBpbnRvIHZvaWQqIGJhdG9ucyBvbiBhc3NpZ25tZW50Cisq LworCisjaWZkZWYgU1dJR1BZVEhPTgorJXR5cGVtYXAoaW4pIHZvaWQgKlBZX0FTX1ZPSUQgKFB5 T2JqZWN0ICpuZXdSZWYpIHsKKyAgbmV3UmVmID0gJGlucHV0OworICBpZiAoJGlucHV0ID09IFB5 X05vbmUpIHsKKyAgICAkMSA9IG5ld1JlZiA9IE5VTEw7CisgIH0gZWxzZSB7CisgICAgbmV3UmVm ID0gJGlucHV0OworICAgICQxID0gKHZvaWQgKikkaW5wdXQ7CisgIH0KKyAgaWYgKHN2bl9zd2ln X3B5X3Bvb2xfc2V0X293bmVkX3JlZihvYmowLCAoUHlPYmplY3QgKilhcmcxLT4kMV9uYW1lLCBu ZXdSZWYpKSB7CisgICAgU1dJR19mYWlsOworICB9Cit9CisjZW5kaWYKKwogLyogLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KICAgIFdyYXAgdGhlIGRpZ2VzdCBvdXRwdXQgZm9yIGZ1bmN0aW9ucyBwb3B1bGF0aW5n IGRpZ2VzdHMuCiAqLwpkaWZmIC1OdXIgc3VidmVyc2lvbi0xLjMuMS9zdWJ2ZXJzaW9uL2JpbmRp bmdzL3N3aWcvaW5jbHVkZS9zdm5fdHlwZXMuc3dnLm9yaWcgc3VidmVyc2lvbi0xLjMuMS5uZXcv c3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL2luY2x1ZGUvc3ZuX3R5cGVzLnN3Zy5vcmlnCi0tLSBz dWJ2ZXJzaW9uLTEuMy4xL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9pbmNsdWRlL3N2bl90eXBl cy5zd2cub3JpZwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgc3VidmVy c2lvbi0xLjMuMS5uZXcvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL2luY2x1ZGUvc3ZuX3R5cGVz LnN3Zy5vcmlnCTIwMDYtMDctMDUgMDE6MDQ6MDYuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEs Nzk1IEBACisvKgorICogc3ZuX3R5cGVzLnN3ZyA6ICBTV0lHIGluY2x1ZGUgZmlsZSBmb3Igc3Zu X3R5cGVzLmgKKyAqCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMDMg Q29sbGFiTmV0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlz IGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91 IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uICBUaGUg dGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vc3VidmVyc2lvbi50aWdyaXMu b3JnL2xpY2Vuc2UtMS5odG1sLgorICogSWYgbmV3ZXIgdmVyc2lvbnMgb2YgdGhpcyBsaWNlbnNl IGFyZSBwb3N0ZWQgdGhlcmUsIHlvdSBtYXkgdXNlIGEKKyAqIG5ld2VyIHZlcnNpb24gaW5zdGVh ZCwgYXQgeW91ciBvcHRpb24uCisgKgorICogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1 bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKKyAqIGluZGl2aWR1YWxzLiAgRm9yIGV4 YWN0IGNvbnRyaWJ1dGlvbiBoaXN0b3J5LCBzZWUgdGhlIHJldmlzaW9uCisgKiBoaXN0b3J5IGFu ZCBsb2dzLCBhdmFpbGFibGUgYXQgaHR0cDovL3N1YnZlcnNpb24udGlncmlzLm9yZy8uCisgKiA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQorICovCisKKy8qIFRoaXMgaW50ZXJmYWNlIGZpbGUgb25seSBkZWZpbmVzIHR5 cGVzIGFuZCB0aGVpciByZWxhdGVkIGluZm9ybWF0aW9uLgorICAgVGhlcmUgaXMgbm8gbW9kdWxl IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGludGVyZmFjZSBmaWxlLiAqLworCislaW5jbHVkZSBhcHIu c3dnCislaW5jbHVkZSBleGNlcHRpb24uaQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgQ3JlYXRl IGEgdHlwZW1hcCB0byBkZWZpbmUgInR5cGUgKioiIGFzIE9VVCBwYXJhbWV0ZXJzLgorCisgICBO b3RlOiBTV0lHVFlQRSBpcyBqdXN0IGEgcGxhY2Vob2xkZXIgZm9yICJzb21lIGFyYml0cmFyeSB0 eXBlIi4gVGhpcworICAgICAgICAgdHlwZW1hcCB3aWxsIGJlIGFwcGxpZWQgb250byBhICJyZWFs IiB0eXBlLgorKi8KKyV0eXBlbWFwKHB5dGhvbiwgaW4sIG51bWlucHV0cz0wKSBTV0lHVFlQRSAq Kk9VVFBBUkFNICgkKjFfdHlwZSB0ZW1wKSB7CisgICAgJDEgPSAoJDFfbHR5cGUpJnRlbXA7Cit9 CisldHlwZW1hcChwZXJsNSwgaW4sIG51bWlucHV0cz0wKSBTV0lHVFlQRSAqKk9VVFBBUkFNICgk KjFfdHlwZSB0ZW1wKSB7CisgICAgJDEgPSAoJDFfbHR5cGUpJnRlbXA7Cit9CisldHlwZW1hcChy dWJ5LCBpbiwgbnVtaW5wdXRzPTApIFNXSUdUWVBFICoqT1VUUEFSQU0gKCQqMV90eXBlIHRlbXAp IHsKKyAgdGVtcCA9IE5VTEw7CisgICQxID0gKCQxX2x0eXBlKSZ0ZW1wOworfQorCisldHlwZW1h cChweXRob24sIGFyZ291dCwgZnJhZ21lbnQ9InRfb3V0cHV0X2hlbHBlciIpIFNXSUdUWVBFICoq T1VUUEFSQU0geworICAgICRyZXN1bHQgPSB0X291dHB1dF9oZWxwZXIoJHJlc3VsdCwKKyAgICAg IHN2bl9zd2lnX05ld1BvaW50ZXJPYmooKiQxLCAkKjFfZGVzY3JpcHRvciwgX2dsb2JhbF9zdm5f c3dpZ19weV9wb29sKSk7Cit9CisldHlwZW1hcChwZXJsNSwgYXJnb3V0KSBTV0lHVFlQRSAqKk9V VFBBUkFNIHsKKyAgICBTVChhcmd2aSkgPSBzdl9uZXdtb3J0YWwoKTsKKyAgICBTV0lHX01ha2VQ dHIoU1QoYXJndmkrKyksICh2b2lkICopKiQxLCAkKjFfZGVzY3JpcHRvciwwKTsKK30KKyV0eXBl bWFwKHJ1YnksIGFyZ291dCwgZnJhZ21lbnQ9Im91dHB1dF9oZWxwZXIiKSBTV0lHVFlQRSAqKk9V VFBBUkFNIHsKKyAgJHJlc3VsdCA9IG91dHB1dF9oZWxwZXIoJHJlc3VsdCwgU1dJR19OZXdQb2lu dGVyT2JqKCokMSwgJCoxX2Rlc2NyaXB0b3IsIDApKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAgICVhcHBseS1pbmcgb2YgdHlwZW1hcHMKKyovCisKKyVhcHBseSBTV0lHVFlQRSAqKk9VVFBB UkFNIHsKKyAgc3ZuX3N0cmVhbV90ICoqLAorICBzdm5fY29tbWl0X2luZm9fdCAqKgorfTsKKwor JWFwcGx5IGxvbmcgKk9VVFBVVCB7IHN2bl9yZXZudW1fdCAqIH07CislYXBwbHkgaW50ICpPVVRQ VVQgeyBzdm5fYm9vbGVhbl90ICogfTsKKworLyogc3ZuX2ZzX2NoZWNrX3BhdGgoKSAqLworJWFw cGx5IGxvbmcgKk9VVFBVVCB7IHN2bl9ub2RlX2tpbmRfdCAqIH07CisKKy8qIHN2bl9jb25maWdf Z2V0X3NlcnZlcl9zZXR0aW5nX2ludCgpICovCislYXBwbHkgbG9uZyBsb25nICpPVVRQVVQgeyBh cHJfaW50NjRfdCAqIH07CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBDcmVhdGUgYSB0eXBlbWFw IGZvciBzcGVjaWZ5aW5nIHN0cmluZyBhcmdzIHRoYXQgbWF5IGJlIE5VTEwuCisqLworJXR5cGVt YXAocHl0aG9uLCBpbiwgcGFyc2U9InoiKSBjb25zdCBjaGFyICpNQVlfQkVfTlVMTCAiIjsKKwor I2lmZGVmIFNXSUdQRVJMCislYXBwbHkgY29uc3QgY2hhciAqIHsgY29uc3QgY2hhciAqTUFZX0JF X05VTEwgfTsKKyNlbmRpZgorCisldHlwZW1hcChydWJ5LCBpbikgY29uc3QgY2hhciogTUFZX0JF X05VTEwKK3sKKyAgaWYgKE5JTF9QKCRpbnB1dCkpIHsKKyAgICAkMSA9IE5VTEw7CisgIH0gZWxz ZSB7CisgICAgJDEgPSBTdHJpbmdWYWx1ZVB0cigkaW5wdXQpOworICB9Cit9CisKKyV0eXBlbWFw KHJ1YnksIG91dCkgY29uc3QgY2hhciAqCit7CisgIGlmICgkMSkgeworICAgICRyZXN1bHQgPSBy Yl9zdHJfbmV3MigkMSk7CisgIH0gZWxzZSB7CisgICAgJHJlc3VsdCA9IFFuaWw7CisgIH0KK30K KworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIGNvbnN0IGNoYXIgKmhlYWRlcl9lbmNvZGluZworICAg c3ZuX2RpZmZfZmlsZV9vdXRwdXRfdW5pZmllZDIKKyAgIHN2bl9jbGllbnRfZGlmZjMKKyovCisl dHlwZW1hcChydWJ5LCBpbikgY29uc3QgY2hhciAqaGVhZGVyX2VuY29kaW5nCit7CisgICQxID0g TlVMTDsKKyAgCisgIGlmIChOSUxfUCgkaW5wdXQpKSB7CisgIH0gZWxzZSBpZiAoVFlQRSgkaW5w dXQpID09IFRfRklYTlVNKSB7CisgICAgJDEgPSAoY2hhciAqKU5VTTJJTlQoJGlucHV0KTsKKyAg ICBpZiAoISgkMSA9PSBBUFJfTE9DQUxFX0NIQVJTRVQgfHwgJDEgPT0gQVBSX0RFRkFVTFRfQ0hB UlNFVCkpIHsKKyAgICAgICQxID0gTlVMTDsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgJDEgPSBT dHJpbmdWYWx1ZVB0cigkaW5wdXQpOworICB9CisgIAorICBpZiAoISQxKSB7CisgICAgJDEgPSAo Y2hhciAqKUFQUl9MT0NBTEVfQ0hBUlNFVDsKKyAgfQorfQorCisvKiAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICAgSW5wdXQgb2Ygc2NyaXB0aW5nIGhhc2gvZGljdGlvbmFyeSAoc3RyaW5nID0+IHN0cmluZykK KyAgIGNvbnZlcnRlZCB0byBhcHJfaGFzaF90IChjb25zdCBjaGFyICogPT4gY29uc3QgY2hhciAq KQorKi8KKyV0eXBlbWFwKHB5dGhvbiwgaW4pIGFwcl9oYXNoX3QgKlNUUklOR19UT19TVFJJTkcg eworICAgICQxID0gc3ZuX3N3aWdfcHlfc3RyaW5naGFzaF9mcm9tX2RpY3QgKCRpbnB1dCwgX2ds b2JhbF9wb29sKTsKK30KKyV0eXBlbWFwKHBlcmw1LCBpbikgYXByX2hhc2hfdCAqU1RSSU5HX1RP X1NUUklORyB7CisgICAgJDEgPSBzdm5fc3dpZ19wbF9zdHJpbmdzX3RvX2hhc2ggKCRpbnB1dCwg X2dsb2JhbF9wb29sKTsKK30KKyV0eXBlbWFwKHJ1YnksIGluKSBhcHJfaGFzaF90ICpTVFJJTkdf VE9fU1RSSU5HIHsKKyAgICAkMSA9IHN2bl9zd2lnX3JiX2hhc2hfdG9fYXByX2hhc2hfc3RyaW5n KCRpbnB1dCwgX2dsb2JhbF9wb29sKTsKK30KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgRGVm aW5lIGEgbW9yZSByZWZpbmVkICdtZW1iZXJpbicgdHlwZW1hcCBmb3IgJ2NvbnN0IGNoYXIgKicg bWVtYmVycy4gVGhpcworICAgaXMgdXNlZCBpbiBwbGFjZSBvZiB0aGUgJ2NoYXIgKicgaGFuZGxl ciBkZWZpbmVkIGF1dG9tYXRpY2FsbHkuCisKKyAgIFdlIG5lZWQgdG8gZG8gdGhlIGZyZWUvbWFs bG9jL3N0cmNweSBzcGVjaWFsIGJlY2F1c2Ugb2YgdGhlIGNvbnN0CisqLworJXR5cGVtYXAobWVt YmVyaW4pIGNvbnN0IGNoYXIgKiB7CisgICAgYXByX3NpemVfdCBsZW4gPSBzdHJsZW4oJGlucHV0 KSArIDE7CisgICAgY2hhciAqY29waWVkOworICAgIGlmICgkMSkgZnJlZSgoY2hhciAqKSQxKTsK KyAgICBjb3BpZWQgPSBtYWxsb2MobGVuKTsKKyAgICBtZW1jcHkoY29waWVkLCAkaW5wdXQsIGxl bik7CisgICAgJDEgPSBjb3BpZWQ7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBTcGVjaWZ5 IGhvdyBzdm5fZXJyb3JfdCByZXR1cm5zIGFyZSB0dXJuZWQgaW50byBleGNlcHRpb25zLgorKi8K KyV0eXBlbWFwKHB5dGhvbiwgb3V0KSBzdm5fZXJyb3JfdCAqIHsKKyAgICBpZiAoJDEgIT0gTlVM TCkgeworICAgICAgICBpZiAoJDEtPmFwcl9lcnIgIT0gU1ZOX0VSUl9TV0lHX1BZX0VYQ0VQVElP Tl9TRVQpCisgICAgICAgICAgICBzdm5fc3dpZ19weV9zdm5fZXhjZXB0aW9uKCQxKTsKKyAgICAg ICAgZWxzZQorICAgICAgICAgICAgc3ZuX2Vycm9yX2NsZWFyKCQxKTsKKyAgICAgICAgU1dJR19m YWlsOworICAgIH0KKyAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CisgICAgJHJlc3VsdCA9IFB5X05v bmU7Cit9CisKKyV0eXBlbWFwKHBlcmw1LG91dCkgc3ZuX2Vycm9yX3QgKiB7CisgICAgaWYgKCQx KSB7CisgICAgICAgIFNWICpleGNlcHRpb25faGFuZGxlciA9IHBlcmxfZ2V0X3N2ICgiU1ZOOjpF cnJvcjo6aGFuZGxlciIsIEZBTFNFKTsKKworICAgICAgICBpZiAoU3ZPSyhleGNlcHRpb25faGFu ZGxlcikpIHsKKyAgICAgICAgICAgIFNWICpjYWxsYmFja19yZXN1bHQ7CisKKyAgICAgICAgICAg IHN2bl9zd2lnX3BsX2NhbGxiYWNrX3RodW5rIChDQUxMX1NWLCBleGNlcHRpb25faGFuZGxlciwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY2FsbGJhY2tfcmVzdWx0 LCAiUyIsICQxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQxX2Rl c2NyaXB0b3IpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgJHJlc3VsdCA9IHN2X25l d21vcnRhbCgpOworICAgICAgICAgICAgU1dJR19NYWtlUHRyICgkcmVzdWx0LCAodm9pZCAqKSQx LCAkMV9kZXNjcmlwdG9yICwwKTsKKyAgICAgICAgICAgIGFyZ3ZpKys7CisgICAgICAgIH0KKyAg ICB9Cit9CisKKyV0eXBlbWFwKHJ1YnksIG91dCkgc3ZuX2Vycm9yX3QgKgoreworICBpZiAoJDEp IHsKKyAgICBzdm5fc3dpZ19yYl9wb3BfcG9vbChfZ2xvYmFsX3N2bl9zd2lnX3JiX3Bvb2wpOwor ICAgIHN2bl9zd2lnX3JiX2hhbmRsZV9zdm5fZXJyb3IoJDEpOworICB9CisgICRyZXN1bHQgPSBR bmlsOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgRGVmaW5lIGFuIE9VVFBVVCB0eXBlbWFw IGZvciAnc3ZuX2ZpbGVzaXplX3QgKicuICBGb3Igbm93LCB3ZSdsbAorICAgdHJlYXQgaXQgYXMg YSAnbG9uZycgZXZlbiBpZiB0aGF0IGlzbid0IGVudGlyZWx5IGNvcnJlY3QuLi4gIAorKi8KKyV0 eXBlbWFwKHB5dGhvbixpbixudW1pbnB1dHM9MCkgc3ZuX2ZpbGVzaXplX3QgKiAoc3ZuX2ZpbGVz aXplX3QgdGVtcCkKKyAgICAiJDEgPSAmdGVtcDsiOworCisldHlwZW1hcChwZXJsNSxpbixudW1p bnB1dHM9MCkgc3ZuX2ZpbGVzaXplX3QgKiAoc3ZuX2ZpbGVzaXplX3QgdGVtcCkKKyAgICAiJDEg PSAmdGVtcDsiOworCisldHlwZW1hcChydWJ5LGluLG51bWlucHV0cz0wKSBzdm5fZmlsZXNpemVf dCAqIChzdm5fZmlsZXNpemVfdCB0ZW1wKQorICAgICIkMSA9ICZ0ZW1wOyI7CisKKyV0eXBlbWFw KHB5dGhvbixhcmdvdXQsZnJhZ21lbnQ9InRfb3V0cHV0X2hlbHBlciIpIHN2bl9maWxlc2l6ZV90 ICoKKyAgICAiJHJlc3VsdCA9IHRfb3V0cHV0X2hlbHBlcigkcmVzdWx0LAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFB5TG9uZ19Gcm9tTG9uZ0xvbmcoKGFwcl9pbnQ2NF90KSAoKiQx KSkpOyI7CisKKy8qIFhYWDogYXBwbHkgbG9uZyBsb25nICpPVVRQVVQgZG9lc24ndCB0cmFjayAk MSBjb3JyZWN0bHkgKi8KKyV0eXBlbWFwKHBlcmw1LGFyZ291dCkgc3ZuX2ZpbGVzaXplX3QgKiB7 CisgICAgY2hhciB0ZW1wWzI1Nl07CisgICAgc3ByaW50Zih0ZW1wLCIlIiBBUFJfSU5UNjRfVF9G TVQsICokMSk7CisgICAgU1QoYXJndmkpID0gc3ZfbmV3bW9ydGFsKCk7CisgICAgc3Zfc2V0cHYo KFNWKilTVChhcmd2aSsrKSwgdGVtcCk7Cit9OworCisldHlwZW1hcChydWJ5LGFyZ291dCxmcmFn bWVudD0ib3V0cHV0X2hlbHBlciIpIHN2bl9maWxlc2l6ZV90ICoKKyAgICAiJHJlc3VsdCA9IG91 dHB1dF9oZWxwZXIoJHJlc3VsdCwgTEwyTlVNKChhcHJfaW50NjRfdCkgKCokMSkpKTsiOworCisv KiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorICAgRGVmaW5lIGEgZ2VuZXJhbCBwdHIvbGVuIHR5cGVtYXAuIFRo aXMgdGFrZXMgYSBzaW5nbGUgc2NyaXB0IGFyZ3VtZW50CisgICBhbmQgZXhwYW5kcyBpdCBpbnRv IGEgcHRyL2xlbiBwYWlyIGZvciB0aGUgbmF0aXZlIGNhbGwuCisqLworJXR5cGVtYXAocHl0aG9u LCBpbikgKGNvbnN0IGNoYXIgKlBUUiwgYXByX3NpemVfdCBMRU4pIHsKKyAgICBpZiAoIVB5U3Ry aW5nX0NoZWNrKCRpbnB1dCkpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVF cnJvciwgImV4cGVjdGluZyBhIHN0cmluZyIpOworICAgICAgICBTV0lHX2ZhaWw7CisgICAgfQor ICAgICQxID0gUHlTdHJpbmdfQVNfU1RSSU5HKCRpbnB1dCk7CisgICAgJDIgPSBQeVN0cmluZ19H RVRfU0laRSgkaW5wdXQpOworfQorCisldHlwZW1hcChwZXJsNSwgaW4pIChjb25zdCBjaGFyICpQ VFIsIGFwcl9zaXplX3QgTEVOKSB7CisgICAgaWYgKFN2UE9LKCRpbnB1dCkpIHsKKyAgICAgICAg JDEgPSBTdlBWKCRpbnB1dCwgJDIpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8qIHNldCB0byAw IHRvIGF2b2lkIHdhcm5pbmcgKi8KKyAgICAgICAgJDEgPSAwOworICAgICAgICAkMiA9IDA7Cisg ICAgICAgIFNXSUdfY3JvYWsoIkV4cGVjdGluZyBhIHN0cmluZyIpOworICAgIH0KK30KKworLyog LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAgIEhhbmRsZSByZXRyaWV2aW5nIHRoZSBlcnJvciBtZXNzYWdlIGZy b20gc3ZuX3N0cmVycm9yCisqLworCisldHlwZW1hcChwZXJsNSxpbixudW1pbnB1dHM9MCkgKGNo YXIgKmJ1ZiwgYXByX3NpemVfdCBidWZzaXplKSAoIGNoYXIgdGVtcFsxMjhdICkgeworICAgIG1l bXNldCAodGVtcCwwLDEyOCk7IC8qIHBhcmFub2lhICovCisgICAgJDEgPSB0ZW1wOworICAgICQy ID0gMTI4OworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgRGVmaW5lIGEgZ2VuZXJpYyBhcmdp bml0IG1hcHBpbmcgZm9yIHBvb2xzLgorKi8KKworI2lmZGVmIFNXSUdQWVRIT04KKyVkZWZpbmUg c3ZuX3N3aWdfcHlfcG9vbF9jaGVjayhwb29sKQorICBpZiAocG9vbCAhPSBOVUxMICYmICFQeU9i amVjdF9IYXNBdHRyU3RyaW5nKHBvb2wsIChjaGFyICopIl9tYXJrX3ZhbGlkIikpCisgIHsKKyAg ICBpbnQgYXJnbnVtID0gUHlUdXBsZV9HRVRfU0laRShhcmdzKTsKKyAgICBTV0lHX1B5dGhvbl9U eXBlRXJyb3IoU1dJR19UeXBlUHJldHR5TmFtZSgkZGVzY3JpcHRvciksIHBvb2wpOworICAgIFNX SUdfYXJnX2ZhaWwoYXJnbnVtKTsKKyAgICBTV0lHX2ZhaWw7CisgIH0KKyVlbmRkZWYKKyVkZWZp bmUgc3ZuX3N3aWdfcHlfcG9vbF9jcmVhdGVfc3VicG9vbChweV9wb29sLCBwb29sKQorICBpZiAo cHlfcG9vbCAhPSBOVUxMKSB7CisgICAgcG9vbCA9IHN2bl9wb29sX2NyZWF0ZShwb29sKTsKKyAg ICBweV9wb29sID0gc3ZuX3N3aWdfTmV3UG9pbnRlck9iaihwb29sLCAkZGVzY3JpcHRvciwgcHlf cG9vbCk7CisgIH0KKyVlbmRkZWYKKyNlbmRpZgorCisldHlwZW1hcChweXRob24sIGRlZmF1bHQp IGFwcl9wb29sX3QgKihhcHJfcG9vbF90ICpfZ2xvYmFsX3Bvb2wsCisgIFB5T2JqZWN0ICpfZ2xv YmFsX3N2bl9zd2lnX3B5X3Bvb2wsIGludCBfZ2xvYmFsX3Bvb2xfaXNfZGVmYXVsdF9wb29sKQor eworICBpbnQgYXJnbnVtID0gUHlUdXBsZV9HRVRfU0laRShhcmdzKSAtIDE7CisgIF9nbG9iYWxf cG9vbF9pc19hcHBsaWNhdGlvbl9wb29sID0gMDsKKyAgX2dsb2JhbF9wb29sX2lzX2RlZmF1bHRf cG9vbCA9IDE7CisgIGlmIChhcmdudW0gPj0gMCkgeworICAgIFB5T2JqZWN0ICppbnB1dCA9IFB5 VHVwbGVfR0VUX0lURU0oYXJncywgYXJnbnVtKTsKKyAgICBpZiAoaW5wdXQgIT0gUHlfTm9uZSAm JgorICAgICAgICBQeU9iamVjdF9IYXNBdHRyU3RyaW5nKGlucHV0LCAoY2hhciAqKSJfbWFya192 YWxpZCIpKSB7CisgICAgICBfZ2xvYmFsX3Bvb2wgPSBzdm5fc3dpZ19NdXN0R2V0UHRyKGlucHV0 LCAkMV9kZXNjcmlwdG9yLCBhcmdudW0rMSwgTlVMTCk7CisgICAgICBpZiAoUHlFcnJfT2NjdXJy ZWQoKSkgeworICAgICAgICBfZ2xvYmFsX3N2bl9zd2lnX3B5X3Bvb2wgPSBOVUxMOworICAgICAg ICBTV0lHX2ZhaWw7CisgICAgICB9CisgICAgICBfZ2xvYmFsX3N2bl9zd2lnX3B5X3Bvb2wgPSBp bnB1dDsKKyAgICAgIFB5X1hJTkNSRUYoX2dsb2JhbF9zdm5fc3dpZ19weV9wb29sKTsKKyAgICAg IF9nbG9iYWxfcG9vbF9pc19kZWZhdWx0X3Bvb2wgPSAwOworICAgIH0gZWxzZSB7CisgICAgICBp ZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgfQor ICAgICAgc3ZuX3N3aWdfZ2V0X2FwcGxpY2F0aW9uX3Bvb2woJl9nbG9iYWxfc3ZuX3N3aWdfcHlf cG9vbCwgJl9nbG9iYWxfcG9vbCk7IAorICAgICAgc3ZuX3N3aWdfcHlfcG9vbF9jcmVhdGVfc3Vi cG9vbChfZ2xvYmFsX3N2bl9zd2lnX3B5X3Bvb2wsIF9nbG9iYWxfcG9vbCk7CisgICAgfQorICB9 IGVsc2UgeworICAgIHN2bl9zd2lnX2dldF9hcHBsaWNhdGlvbl9wb29sKCZfZ2xvYmFsX3N2bl9z d2lnX3B5X3Bvb2wsICZfZ2xvYmFsX3Bvb2wpOyAKKyAgICBzdm5fc3dpZ19weV9wb29sX2NyZWF0 ZV9zdWJwb29sKF9nbG9iYWxfc3ZuX3N3aWdfcHlfcG9vbCwgX2dsb2JhbF9wb29sKTsKKyAgfQor ICAkMSA9IF9nbG9iYWxfcG9vbDsKKyAgc3ZuX3N3aWdfcHlfcG9vbF9jaGVjayhfZ2xvYmFsX3N2 bl9zd2lnX3B5X3Bvb2wpCit9CisKKyV0eXBlbWFwKHB5dGhvbiwgaW4pIGFwcl9wb29sX3QgKiB7 CisgIGlmICgkaW5wdXQgIT0gUHlfTm9uZSAmJiBfZ2xvYmFsX3Bvb2xfaXNfZGVmYXVsdF9wb29s ID09IDEpIHsKKyAgICBzdm5fc3dpZ19weV9wb29sX2NoZWNrKCRpbnB1dCkKKyAgICBfZ2xvYmFs X3Bvb2wgPSBzdm5fc3dpZ19NdXN0R2V0UHRyKCRpbnB1dCwgJDFfZGVzY3JpcHRvciwgJHN2bl9h cmdudW0sIAorICAgICAgTlVMTCk7CisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAg ICAgU1dJR19mYWlsOworICAgIH0KKyAgICBQeV9YREVDUkVGKF9nbG9iYWxfc3ZuX3N3aWdfcHlf cG9vbCk7CisgICAgX2dsb2JhbF9zdm5fc3dpZ19weV9wb29sID0gJGlucHV0OworICAgIFB5X1hJ TkNSRUYoX2dsb2JhbF9zdm5fc3dpZ19weV9wb29sKTsKKyAgICAkMSA9IF9nbG9iYWxfcG9vbDsK KyAgfQorfQorCisldHlwZW1hcChweXRob24sIGZyZWVhcmcpIGFwcl9wb29sX3QgKiB7CisgIFB5 X1hERUNSRUYoX2dsb2JhbF9zdm5fc3dpZ19weV9wb29sKTsKK30KKworJXR5cGVtYXAocGVybDUs IGluKSBhcHJfcG9vbF90ICpwb29sICIiOworJXR5cGVtYXAocGVybDUsIGRlZmF1bHQpIGFwcl9w b29sX3QgKnBvb2woYXByX3Bvb2xfdCAqX2dsb2JhbF9wb29sKSB7CisgICAgX2dsb2JhbF9wb29s ID0gJDEgPSBzdm5fc3dpZ19wbF9tYWtlX3Bvb2wgKFNUKGl0ZW1zLTEpKTsKK30KKyV0eXBlbWFw KHJ1YnksIGluKSBhcHJfcG9vbF90ICpwb29sICIiOworJXR5cGVtYXAocnVieSwgZGVmYXVsdCkg YXByX3Bvb2xfdCAqcG9vbAorICAgIChWQUxVRSBfZ2xvYmFsX3N2bl9zd2lnX3JiX3Bvb2wsIGFw cl9wb29sX3QgKl9nbG9iYWxfcG9vbCkKK3sKKyAgc3ZuX3N3aWdfcmJfZ2V0X3Bvb2woYXJnYywg YXJndiwgc2VsZiwgJl9nbG9iYWxfc3ZuX3N3aWdfcmJfcG9vbCwgJiQxKTsKKyAgX2dsb2JhbF9w b29sID0gJDE7CisgIHN2bl9zd2lnX3JiX3B1c2hfcG9vbChfZ2xvYmFsX3N2bl9zd2lnX3JiX3Bv b2wpOworfQorCisldHlwZW1hcChydWJ5LCBkZWZhdWx0KSAoc3ZuX2NsaWVudF9jdHhfdCAqY3R4 LCBhcHJfcG9vbF90ICpwb29sKQorICAgICAoVkFMVUUgX2dsb2JhbF9zdm5fc3dpZ19yYl9wb29s LCBhcHJfcG9vbF90ICpfZ2xvYmFsX3Bvb2wpCit7CisgIGludCBhZGp1c3RlZF9hcmdjID0gYXJn YzsKKyAgVkFMVUUgKmFkanVzdGVkX2FyZ3YgPSBhcmd2OworCisgIHN2bl9zd2lnX3JiX2FkanVz dF9hcmdfZm9yX2NsaWVudF9jdHhfYW5kX3Bvb2woJmFkanVzdGVkX2FyZ2MsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFkanVzdGVkX2FyZ3YpOwor ICBzdm5fc3dpZ19yYl9nZXRfcG9vbChhZGp1c3RlZF9hcmdjLCBhZGp1c3RlZF9hcmd2LCBzZWxm LAorICAgICAgICAgICAgICAgICAgICAgICAmX2dsb2JhbF9zdm5fc3dpZ19yYl9wb29sLCAmJDIp OworICBfZ2xvYmFsX3Bvb2wgPSAkMjsKKyAgc3ZuX3N3aWdfcmJfcHVzaF9wb29sKF9nbG9iYWxf c3ZuX3N3aWdfcmJfcG9vbCk7Cit9CisKKyV0eXBlbWFwKHJ1YnksIGFyZ291dCkgYXByX3Bvb2xf dCAqcG9vbAoreworICBzdm5fc3dpZ19yYl9zZXRfcG9vbCgkcmVzdWx0LCBfZ2xvYmFsX3N2bl9z d2lnX3JiX3Bvb2wpOworICBzdm5fc3dpZ19yYl9wb3BfcG9vbChfZ2xvYmFsX3N2bl9zd2lnX3Ji X3Bvb2wpOworfQorCisjaWZkZWYgU1dJR1BFUkwKKyVhcHBseSBhcHJfcG9vbF90ICpwb29sIHsK KyAgICBhcHJfcG9vbF90ICpkaXJfcG9vbCwKKyAgICBhcHJfcG9vbF90ICpmaWxlX3Bvb2wsCisg ICAgYXByX3Bvb2xfdCAqbm9kZV9wb29sCit9OworI2VuZGlmCisKKyNpZmRlZiBTV0lHUlVCWQor JWFwcGx5IGFwcl9wb29sX3QgKnBvb2wgeworICAgIGFwcl9wb29sX3QgKmRpcl9wb29sLAorICAg IGFwcl9wb29sX3QgKmZpbGVfcG9vbCwKKyAgICBhcHJfcG9vbF90ICpub2RlX3Bvb2wKK307Cisj ZW5kaWYKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgQ0FMTEJBQ0tfQkFUT046IERvIG5vdCBj b252ZXJ0IHRvIEMgb2JqZWN0IGZyb20gUnVieSBvYmplY3QuCisqLworCisldHlwZW1hcChydWJ5 LCBpbikgdm9pZCAqQ0FMTEJBQ0tfQkFUT04KK3sKKyAgJDEgPSAodm9pZCAqKSRpbnB1dDsKK30K KworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgQ2FsbGJhY2s6IHN2bl9sb2dfbWVzc2FnZV9yZWNl aXZlcl90CisgICBzdm5fY2xpZW50X2xvZygpCisgICBzdm5fcmEgZ2V0X2xvZygpCisgICBzdm5f cmVwb3NfZ2V0X2xvZ3MoKQorKi8KKworJXR5cGVtYXAocHl0aG9uLCBpbikgKHN2bl9sb2dfbWVz c2FnZV9yZWNlaXZlcl90IHJlY2VpdmVyLCAKKyAgICAgICAgICAgICAgICAgICAgICB2b2lkICpy ZWNlaXZlcl9iYXRvbikgeworICAgICQxID0gc3ZuX3N3aWdfcHlfbG9nX3JlY2VpdmVyOworICAg ICQyID0gKHZvaWQgKikkaW5wdXQ7Cit9CisldHlwZW1hcChwZXJsNSwgaW4pIChzdm5fbG9nX21l c3NhZ2VfcmVjZWl2ZXJfdCByZWNlaXZlciwgCisgICAgICAgICAgICAgICAgICAgICB2b2lkICpy ZWNlaXZlcl9iYXRvbikgeworICAgICQxID0gc3ZuX3N3aWdfcGxfdGh1bmtfbG9nX3JlY2VpdmVy OworICAgICQyID0gKHZvaWQgKikkaW5wdXQ7Cit9CisKKyV0eXBlbWFwKHJ1YnksIGluKSAoc3Zu X2xvZ19tZXNzYWdlX3JlY2VpdmVyX3QgcmVjZWl2ZXIsIAorICAgICAgICAgICAgICAgICAgICB2 b2lkICpyZWNlaXZlcl9iYXRvbikgeworICAgICQxID0gc3ZuX3N3aWdfcmJfbG9nX3JlY2VpdmVy OworICAgICQyID0gKHZvaWQgKilzdm5fc3dpZ19yYl9tYWtlX2JhdG9uKCRpbnB1dCwgX2dsb2Jh bF9zdm5fc3dpZ19yYl9wb29sKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIENhbGxiYWNr OiBzdm5fY29tbWl0X2NhbGxiYWNrX3QKKyAgIHN2bl9yYSBnZXRfY29tbWl0X2VkaXRvcigpCisg ICBzdm5fcmVwb3NfZ2V0X2NvbW1pdF9lZGl0b3IoKQorKi8KKworJXR5cGVtYXAocGVybDUsIGlu KSAoc3ZuX2NvbW1pdF9jYWxsYmFja190IGNhbGxiYWNrLCB2b2lkICpjYWxsYmFja19iYXRvbikg eworICAgICQxID0gc3ZuX3N3aWdfcGxfdGh1bmtfY29tbWl0X2NhbGxiYWNrOworICAgICQyID0g KHZvaWQgKikkaW5wdXQ7CisgICAgc3ZuX3N3aWdfcGxfaG9sZF9yZWZfaW5fcG9vbCAoX2dsb2Jh bF9wb29sLCAkaW5wdXQpOworfTsKKworJXR5cGVtYXAocnVieSwgaW4pIChzdm5fY29tbWl0X2Nh bGxiYWNrX3QgY2FsbGJhY2ssIHZvaWQgKmNhbGxiYWNrX2JhdG9uKQoreworICAkMSA9IHN2bl9z d2lnX3JiX2NvbW1pdF9jYWxsYmFjazsKKyAgJDIgPSAodm9pZCAqKXN2bl9zd2lnX3JiX21ha2Vf YmF0b24oJGlucHV0LCBfZ2xvYmFsX3N2bl9zd2lnX3JiX3Bvb2wpOworfTsKKworJXR5cGVtYXAo cHl0aG9uLCBpbikgKHN2bl9jb21taXRfY2FsbGJhY2syX3QgY2FsbGJhY2ssIHZvaWQgKmNhbGxi YWNrX2JhdG9uKQoreworICAkMSA9IHN2bl9zd2lnX3B5X2NvbW1pdF9jYWxsYmFjazI7CisgICQy ID0gKHZvaWQgKikkaW5wdXQ7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBDYWxsYmFjazog c3ZuX2NhbmNlbF9mdW5jX3QKKyovCisKKyV0eXBlbWFwKHB5dGhvbiwgaW4pIChzdm5fY2FuY2Vs X2Z1bmNfdCBjYW5jZWxfZnVuYywgdm9pZCAqY2FuY2VsX2JhdG9uKSB7CisgICQxID0gc3ZuX3N3 aWdfcHlfY2FuY2VsX2Z1bmM7CisgICQyID0gJGlucHV0OyAvKiBvdXIgZnVuY3Rpb24gaXMgdGhl IGJhdG9uLiAqLworfQorCisldHlwZW1hcChydWJ5LCBpbikgKHN2bl9jYW5jZWxfZnVuY190IGNh bmNlbF9mdW5jLCB2b2lkICpjYW5jZWxfYmF0b24pCit7CisgICQxID0gc3ZuX3N3aWdfcmJfY2Fu Y2VsX2Z1bmM7CisgICQyID0gKHZvaWQgKilzdm5fc3dpZ19yYl9tYWtlX2JhdG9uKCRpbnB1dCwg X2dsb2JhbF9zdm5fc3dpZ19yYl9wb29sKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIENh bGxiYWNrOiBzdm5faW5mb19yZWNlaXZlcl90CisqLworCisldHlwZW1hcChydWJ5LCBpbikgKHN2 bl9pbmZvX3JlY2VpdmVyX3QgcmVjZWl2ZXIsIHZvaWQgKnJlY2VpdmVyX2JhdG9uKQoreworICAk MSA9IHN2bl9zd2lnX3JiX2luZm9fcmVjZWl2ZXI7CisgICQyID0gKHZvaWQgKilzdm5fc3dpZ19y Yl9tYWtlX2JhdG9uKCRpbnB1dCwgX2dsb2JhbF9zdm5fc3dpZ19yYl9wb29sKTsKK30KKworLyog LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAgIENhbGxiYWNrOiBzdm5fZnNfd2FybmluZ19jYWxsYmFja190Cisq LworCisldHlwZW1hcChydWJ5LCBpbikgKHN2bl9mc193YXJuaW5nX2NhbGxiYWNrX3Qgd2Fybmlu Zywgdm9pZCAqd2FybmluZ19iYXRvbikKK3sKKyAgVkFMVUUgYmF0b24gPSBzdm5fc3dpZ19yYl9t YWtlX2JhdG9uKCRpbnB1dCwgX2dsb2JhbF9zdm5fc3dpZ19yYl9wb29sKTsKKyAgc3ZuX3N3aWdf cmJfZnNfd2FybmluZ19jYWxsYmFja19iYXRvbl9yZWdpc3RlcihiYXRvbiwgX2dsb2JhbF9wb29s KTsKKyAgJDEgPSBzdm5fc3dpZ19yYl9mc193YXJuaW5nX2NhbGxiYWNrOworICAkMiA9ICh2b2lk ICopYmF0b247Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBzdm5fc3RyZWFtX3QgaW50ZXJv cGVyYWJpbGl0eSB3aXRoIGxhbmd1YWdlIG5hdGl2ZSBpbyBoYW5kbGVzCisqLworCisldHlwZW1h cChweXRob24sIGluKSBzdm5fc3RyZWFtX3QgKldSQVBQRURfU1RSRUFNIHsKKyAgICAkMSA9IHN2 bl9zd2lnX3B5X21ha2Vfc3RyZWFtICgkaW5wdXQsIF9nbG9iYWxfcG9vbCk7Cit9CisKKyV0eXBl bWFwKHBlcmw1LCBpbikgc3ZuX3N0cmVhbV90ICogeworICAgIHN2bl9zd2lnX3BsX21ha2Vfc3Ry ZWFtICgmJDEsICRpbnB1dCk7Cit9CisKKyV0eXBlbWFwKHBlcmw1LCBvdXQpIHN2bl9zdHJlYW1f dCAqIHsKKyAgICAkcmVzdWx0ID0gc3ZuX3N3aWdfcGxfZnJvbV9zdHJlYW0gKCQxKTsKKyAgICBh cmd2aSsrOworfQorCisldHlwZW1hcChwZXJsNSwgYXJnb3V0KSBzdm5fc3RyZWFtX3QgKiogewor ICAgICRyZXN1bHQgPSBzdm5fc3dpZ19wbF9mcm9tX3N0cmVhbSAoKiQxKTsKKyAgICBhcmd2aSsr OworfQorCisldHlwZW1hcChydWJ5LCBpbikgc3ZuX3N0cmVhbV90ICogeworICAkMSA9IHN2bl9z d2lnX3JiX21ha2Vfc3RyZWFtKCRpbnB1dCk7Cit9CisKKyNpZmRlZiBTV0lHUFlUSE9OCisldHlw ZW1hcChpbikgKHN2bl9jb21taXRfY2FsbGJhY2tfdCBjYWxsYmFjaywgdm9pZCAqY2FsbGJhY2tf YmF0b24pCit7CisgICQxID0gc3ZuX3N3aWdfcHlfY29tbWl0X2NhbGxiYWNrOworICAkMiA9ICh2 b2lkICopJGlucHV0OworfQorI2VuZGlmCisKKyNpZmRlZiBTV0lHUFlUSE9OCisldHlwZW1hcChp bikgKHN2bl9jb21taXRfY2FsbGJhY2tfdCBjYWxsYmFjaywgdm9pZCAqY2FsbGJhY2tfYmF0b24p Cit7CisgICQxID0gc3ZuX3N3aWdfcHlfY29tbWl0X2NhbGxiYWNrOworICAkMiA9ICh2b2lkICop JGlucHV0OworfQorI2VuZGlmCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBNYXBwZXIgdG8gYXV0 b21hdGljYWxseSB0dXJuIFB5dGhvbiBvYmplY3RzIGludG8gdm9pZCogYmF0b25zIG9uIGFzc2ln bm1lbnQKKyovCisKKyNpZmRlZiBTV0lHUFlUSE9OCisldHlwZW1hcChpbikgdm9pZCAqUFlfQVNf Vk9JRCAoUHlPYmplY3QgKm5ld1JlZikgeworICBuZXdSZWYgPSAkaW5wdXQ7CisgIGlmICgkaW5w dXQgPT0gUHlfTm9uZSkgeworICAgICQxID0gbmV3UmVmID0gTlVMTDsKKyAgfSBlbHNlIHsKKyAg ICBuZXdSZWYgPSAkaW5wdXQ7CisgICAgJDEgPSAodm9pZCAqKSRpbnB1dDsKKyAgfQorICBpZiAo c3ZuX3N3aWdfcHlfcG9vbF9zZXRfb3duZWRfcmVmKG9iajAsIChQeU9iamVjdCAqKWFyZzEtPiQx X25hbWUsIG5ld1JlZikpIHsKKyAgICBTV0lHX2ZhaWw7CisgIH0KK30KKyNlbmRpZgorCisvKiAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICAgV3JhcCB0aGUgZGlnZXN0IG91dHB1dCBmb3IgZnVuY3Rpb25zIHBv cHVsYXRpbmcgZGlnZXN0cy4KKyovCisKKyV0eXBlbWFwKGluLCBudW1pbnB1dHM9MCkgdW5zaWdu ZWQgY2hhciBkaWdlc3RbQU5ZXQorICAgICgkKjFfdHlwZSB0ZW1wW0FQUl9NRDVfRElHRVNUU0la RV0pIHsKKyAgICAkMSA9ICgkMV9sdHlwZSl0ZW1wOworfQorCisldHlwZW1hcChweXRob24sIGFy Z291dCwgZnJhZ21lbnQ9InRfb3V0cHV0X2hlbHBlciIpIHVuc2lnbmVkIGNoYXIgZGlnZXN0W0FO WV0KK3sKKyAgICAkcmVzdWx0ID0gdF9vdXRwdXRfaGVscGVyKCRyZXN1bHQsCisgICAgICAgIFB5 U3RyaW5nX0Zyb21TdHJpbmcoc3ZuX21kNV9kaWdlc3RfdG9fY3N0cmluZyAoJDEsIF9nbG9iYWxf cG9vbCkpKTsKK30KKworJXR5cGVtYXAocGVybDUsIGFyZ291dCkgdW5zaWduZWQgY2hhciBkaWdl c3RbQU5ZXSB7CisgICAgU1QoYXJndmkpID0gc3ZfbmV3bW9ydGFsKCk7CisgICAgc3Zfc2V0cHYo KFNWKilTVChhcmd2aSsrKSwgc3ZuX21kNV9kaWdlc3RfdG9fY3N0cmluZyAoJDEsX2dsb2JhbF9w b29sKSk7Cit9CisKKyV0eXBlbWFwKHJ1YnksIGFyZ291dCwgZnJhZ21lbnQ9Im91dHB1dF9oZWxw ZXIiKSB1bnNpZ25lZCBjaGFyIGRpZ2VzdFtBTlldCit7CisgICRyZXN1bHQgPSBvdXRwdXRfaGVs cGVyKCRyZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHJiX3N0cl9uZXcyKHN2bl9t ZDVfZGlnZXN0X3RvX2NzdHJpbmcoJDEsIF9nbG9iYWxfcG9vbCkpKTsKK30KKworLyogc3ZuX21k NV8qIGZ1bmN0aW9ucyB0YWtlcyBjb25zdCBvbmVzIGFzIGlucHV0ICovCisldHlwZW1hcChwZXJs NSwgaW4pIGNvbnN0IHVuc2lnbmVkIGNoYXIgZGlnZXN0W10geworICAgIFNXSUdfQ29udmVydFB0 cigkaW5wdXQsICh2b2lkICoqKSYkMSwgJDFfZGVzY3JpcHRvciwgMCk7Cit9CisldHlwZW1hcChw ZXJsNSwgYXJnb3V0KSBjb25zdCB1bnNpZ25lZCBjaGFyIGRpZ2VzdFtdIHt9CisKKy8qCisgICBz dm5fdHhkZWx0YV9zZW5kX3N0cmVhbSgpIHVzZXMgKmRpZ2VzdCBub3QgZGlnZXN0W10gLgorICAg c3ZuX3R4ZGVsdGFfYXBwbHkoKSB1c2VzICpyZXN1bHRfZGlnZXN0IG5vdCBkaWdlc3RbXSAuCisq LworCisldHlwZW1hcChpbiwgbnVtaW5wdXRzPTApIHVuc2lnbmVkIGNoYXIgKnJlc3VsdF9kaWdl c3QgeworICAgICQxID0gKHVuc2lnbmVkIGNoYXIgKilhcHJfcGFsbG9jKF9nbG9iYWxfcG9vbCwg QVBSX01ENV9ESUdFU1RTSVpFKTsKK30KKworJXR5cGVtYXAocGVybDUsIGFyZ291dCkgdW5zaWdu ZWQgY2hhciAqcmVzdWx0X2RpZ2VzdCB7CisgICAgU1QoYXJndmkpID0gc3ZfbmV3bW9ydGFsKCk7 CisgICAgU1QoYXJndmkrKykgPSBzdm5fc3dpZ19wbF9mcm9tX21kNSgkMSk7Cit9CisKKyVhcHBs eSB1bnNpZ25lZCBjaGFyIGRpZ2VzdFtBTlldIHsKKyAgICB1bnNpZ25lZCBjaGFyICpkaWdlc3QK K307CisKKyNpZm5kZWYgU1dJR1BFUkwKKyVhcHBseSB1bnNpZ25lZCBjaGFyIGRpZ2VzdFtBTlld IHsKKyAgICB1bnNpZ25lZCBjaGFyICpyZXN1bHRfZGlnZXN0Cit9OworI2VuZGlmCisKKy8qIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgIHVzZWZ1bCBjb252ZXJ0b3JzIGZvciBzdm5fb3B0X3JldmlzaW9uX3QK KyovCisldHlwZW1hcChwZXJsNSwgaW4pIHN2bl9vcHRfcmV2aXNpb25fdCAqIChzdm5fb3B0X3Jl dmlzaW9uX3QgcmV2KSB7CisgICAgJDEgPSAmcmV2OworICAgIGlmICgkaW5wdXQgPT0gTlVMTCB8 fCAkaW5wdXQgPT0gJlBMX3N2X3VuZGVmIHx8ICFTdk9LKCRpbnB1dCkpIHsKKyAgICAgICAgcmV2 LmtpbmQgPSBzdm5fb3B0X3JldmlzaW9uX3Vuc3BlY2lmaWVkOworICAgIH0KKyAgICBlbHNlIGlm IChzdl9pc29iamVjdCgkaW5wdXQpICYmIHN2X2Rlcml2ZWRfZnJvbSgkaW5wdXQsICJfcF9zdm5f b3B0X3JldmlzaW9uX3QiKSkgeworICAgICAgICBTV0lHX0NvbnZlcnRQdHIoJGlucHV0LCAodm9p ZCAqKikmJDEsICQxX2Rlc2NyaXB0b3IsIDApOworICAgIH0KKyAgICBlbHNlIGlmIChsb29rc19s aWtlX251bWJlcigkaW5wdXQpKSB7CisgICAgICAgIHJldi5raW5kID0gc3ZuX29wdF9yZXZpc2lv bl9udW1iZXI7CisgICAgICAgIHJldi52YWx1ZS5udW1iZXIgPSBTdklWKCRpbnB1dCk7CisgICAg fQorICAgIGVsc2UgaWYgKFN2UE9LKCRpbnB1dCkpIHsKKyAgICAgICAgY2hhciAqaW5wdXQgPSBT dlBWX25vbGVuKCRpbnB1dCk7CisgICAgICAgIGlmIChzdHJjYXNlY21wKGlucHV0LCAiQkFTRSIp ID09IDApCisgICAgICAgICAgICByZXYua2luZCA9IHN2bl9vcHRfcmV2aXNpb25fYmFzZTsKKyAg ICAgICAgZWxzZSBpZiAoc3RyY2FzZWNtcChpbnB1dCwgIkhFQUQiKSA9PSAwKQorICAgICAgICAg ICAgcmV2LmtpbmQgPSBzdm5fb3B0X3JldmlzaW9uX2hlYWQ7CisgICAgICAgIGVsc2UgaWYgKHN0 cmNhc2VjbXAoaW5wdXQsICJXT1JLSU5HIikgPT0gMCkKKyAgICAgICAgICAgIHJldi5raW5kID0g c3ZuX29wdF9yZXZpc2lvbl93b3JraW5nOworICAgICAgICBlbHNlIGlmIChzdHJjYXNlY21wKGlu cHV0LCAiQ09NTUlUVEVEIikgPT0gMCkKKyAgICAgICAgICAgIHJldi5raW5kID0gc3ZuX29wdF9y ZXZpc2lvbl9jb21taXR0ZWQ7CisgICAgICAgIGVsc2UgaWYgKHN0cmNhc2VjbXAoaW5wdXQsICJQ UkVWIikgPT0gMCkKKyAgICAgICAgICAgIHJldi5raW5kID0gc3ZuX29wdF9yZXZpc2lvbl9wcmV2 aW91czsKKyAgICAgICAgZWxzZSBpZiAoKmlucHV0ID09ICd7JykgeworICAgICAgICAgICAgc3Zu X2Jvb2xlYW5fdCBtYXRjaGVkOworICAgICAgICAgICAgYXByX3RpbWVfdCB0bTsKKyAgICAgICAg ICAgIHN2bl9lcnJvcl90ICplcnI7CisKKyAgICAgICAgICAgIGNoYXIgKmVuZCA9IHN0cmNocihp bnB1dCwnfScpOworICAgICAgICAgICAgaWYgKCFlbmQpCisgICAgICAgICAgICAgICAgU1dJR19j cm9haygidW5rbm93biBvcHRfcmV2aXNpb25fdCB0eXBlIik7CisgICAgICAgICAgICAqZW5kID0g J1wwJzsKKyAgICAgICAgICAgIGVyciA9IHN2bl9wYXJzZV9kYXRlICgmbWF0Y2hlZCwgJnRtLCBp bnB1dCArIDEsIGFwcl90aW1lX25vdygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHN2bl9zd2lnX3BsX21ha2VfcG9vbCAoKFNWICopTlVMTCkpOworICAgICAgICAgICAgaWYg KGVycikgeworICAgICAgICAgICAgICAgIHN2bl9lcnJvcl9jbGVhciAoZXJyKTsKKyAgICAgICAg ICAgICAgICBTV0lHX2Nyb2FrKCJ1bmtub3duIG9wdF9yZXZpc2lvbl90IHR5cGUiKTsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIGlmICghbWF0Y2hlZCkKKyAgICAgICAgICAgICAgICBTV0lH X2Nyb2FrKCJ1bmtub3duIG9wdF9yZXZpc2lvbl90IHR5cGUiKTsKKworICAgICAgICAgICAgcmV2 LmtpbmQgPSBzdm5fb3B0X3JldmlzaW9uX2RhdGU7CisgICAgICAgICAgICByZXYudmFsdWUuZGF0 ZSA9IHRtOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIFNXSUdfY3JvYWsoInVua25vd24g b3B0X3JldmlzaW9uX3QgdHlwZSIpOworICAgIH0gZWxzZQorICAgICAgICBTV0lHX2Nyb2FrKCJ1 bmtub3duIG9wdF9yZXZpc2lvbl90IHR5cGUiKTsKK30KKworJXR5cGVtYXAocnVieSwgaW4pIHN2 bl9vcHRfcmV2aXNpb25fdCAqIChzdm5fb3B0X3JldmlzaW9uX3QgcmV2KSB7CisgICQxID0gJnJl djsKKyAgc3ZuX3N3aWdfcmJfc2V0X3JldmlzaW9uKCZyZXYsICRpbnB1dCk7Cit9CisKKy8qIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgICBhcHJfaGFzaF90ICoqZGlyZW50cworICAgc3ZuX2NsaWVudF9scygp CisgICBzdm5faW9fZ2V0X2RpcmVudHMoKQorICAgc3ZuX3JhIGdldF9kaXIoKQorKi8KKworJXR5 cGVtYXAocHl0aG9uLGluLG51bWlucHV0cz0wKSBhcHJfaGFzaF90ICoqZGlyZW50cyA9IGFwcl9o YXNoX3QgKipPVVRQVVQ7CisldHlwZW1hcChweXRob24sYXJnb3V0LGZyYWdtZW50PSJ0X291dHB1 dF9oZWxwZXIiKSBhcHJfaGFzaF90ICoqZGlyZW50cyB7CisgICRyZXN1bHQgPSB0X291dHB1dF9o ZWxwZXIoJHJlc3VsdCwgc3ZuX3N3aWdfcHlfY29udmVydF9oYXNoKCokMSwgCisgICAgJGRlc2Ny aXB0b3Ioc3ZuX2RpcmVudF90ICopLCBfZ2xvYmFsX3N2bl9zd2lnX3B5X3Bvb2wpKTsKK30KKwor JXR5cGVtYXAocGVybDUsaW4sbnVtaW5wdXRzPTApIGFwcl9oYXNoX3QgKipkaXJlbnRzID0gYXBy X2hhc2hfdCAqKk9VVFBVVDsKKyV0eXBlbWFwKHBlcmw1LGFyZ291dCkgYXByX2hhc2hfdCAqKmRp cmVudHMgeworICAgIFNUKGFyZ3ZpKyspID0gc3ZuX3N3aWdfcGxfY29udmVydF9oYXNoCisJKCok MSwgJGRlc2NyaXB0b3Ioc3ZuX2RpcmVudF90ICopKTsKK30KKworJXR5cGVtYXAocnVieSwgaW4s IG51bWlucHV0cz0wKSBhcHJfaGFzaF90ICoqZGlyZW50cyA9IGFwcl9oYXNoX3QgKipPVVRQVVQ7 CisldHlwZW1hcChydWJ5LCBhcmdvdXQsIGZyYWdtZW50PSJvdXRwdXRfaGVscGVyIikgYXByX2hh c2hfdCAqKmRpcmVudHMKK3sKKyAgJHJlc3VsdCA9IG91dHB1dF9oZWxwZXIoJHJlc3VsdCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX3N3aWdfcmJfYXByX2hhc2hfdG9faGFzaF9zd2ln X3R5cGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiQxLCAic3ZuX2RpcmVudF90ICoi KSk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBhcHJfaGFzaF90ICoqbG9ja3MKKyAgIHN2 bl9jbGllbnRfbHMzKCkKKyAgIHN2bl9yZXBvc19mc19nZXRfbG9ja3MoKQorICAgc3ZuX3JhX2dl dF9sb2NrcygpCisqLworCisldHlwZW1hcChydWJ5LCBpbiwgbnVtaW5wdXRzPTApIGFwcl9oYXNo X3QgKipsb2NrcyA9IGFwcl9oYXNoX3QgKipPVVRQVVQ7CisldHlwZW1hcChydWJ5LCBhcmdvdXQs IGZyYWdtZW50PSJvdXRwdXRfaGVscGVyIikgYXByX2hhc2hfdCAqKmxvY2tzCit7CisgICRyZXN1 bHQgPSBvdXRwdXRfaGVscGVyKCRyZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN2 bl9zd2lnX3JiX2Fwcl9oYXNoX3RvX2hhc2hfc3dpZ190eXBlCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKCokMSwgInN2bl9sb2NrX3QgKiIpKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAgIGFwcl9hcnJheV9oZWFkZXJfdCAqbG9jYXRpb25fcmV2aXNpb25zCisgICBzdm5fcmVwb3Nf dHJhY2Vfbm9kZV9sb2NhdGlvbnMoKQorICAgc3ZuX3JhX2dldF9sb2NhdGlvbnMoKQorKi8KKwor JXR5cGVtYXAocnVieSwgaW4pIGFwcl9hcnJheV9oZWFkZXJfdCAqbG9jYXRpb25fcmV2aXNpb25z Cit7CisgICQxID0gc3ZuX3N3aWdfcmJfYXJyYXlfdG9fYXByX2FycmF5X3Jldm51bSgkaW5wdXQs IF9nbG9iYWxfcG9vbCk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBhcHJfaGFzaF90ICoq bG9jYXRpb25zCisgICBzdm5fcmVwb3NfdHJhY2Vfbm9kZV9sb2NhdGlvbnMoKQorICAgc3ZuX3Jh X2dldF9sb2NhdGlvbnMoKQorKi8KKworJXR5cGVtYXAocnVieSwgaW4sIG51bWlucHV0cz0wKSBh cHJfaGFzaF90ICoqbG9jYXRpb25zID0gYXByX2hhc2hfdCAqKk9VVFBVVDsKKyV0eXBlbWFwKHJ1 YnksIGFyZ291dCkgYXByX2hhc2hfdCAqKmxvY2F0aW9ucworeworICAkcmVzdWx0ID0gc3ZuX3N3 aWdfcmJfYXByX3Jldm51bV9rZXlfaGFzaF90b19oYXNoX3N0cmluZygqJDEpOworfQorCisvKiAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICAgU3BlY2lhbCBib29sZWFuIG1hcHBpbmcgZm9yIHJ1YnkuCisqLwor CisldHlwZW1hcChydWJ5LCBpbikgc3ZuX2Jvb2xlYW5fdCAiJDEgPSBSVEVTVCgkaW5wdXQpOyI7 CisldHlwZW1hcChydWJ5LCBvdXQsIGZyYWdtZW50PSJvdXRwdXRfaGVscGVyIikgc3ZuX2Jvb2xl YW5fdAoreworICAkcmVzdWx0ID0gb3V0cHV0X2hlbHBlcigkcmVzdWx0LCAkMSA/IFF0cnVlIDog UWZhbHNlKTsKK30KKworJXR5cGVtYXAocnVieSwgaW4sIG51bWlucHV0cz0wKSBzdm5fYm9vbGVh bl90ICogKHN2bl9ib29sZWFuX3QgdGVtcCkKK3sKKyAgJDEgPSAmdGVtcDsKK30KKworJXR5cGVt YXAocnVieSwgYXJnb3V0LCBmcmFnbWVudD0ib3V0cHV0X2hlbHBlciIpIHN2bl9ib29sZWFuX3Qg KgoreworICAkcmVzdWx0ID0gb3V0cHV0X2hlbHBlcigkcmVzdWx0LCAqJDEgPyBRdHJ1ZSA6IFFm YWxzZSk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBIYW5kbGUgcHl0aG9uIHRocmVhZCBs b2NraW5nLgorCisgICBTd2lnIGRvZXNuJ3QgYWxsb3cgdXMgdG8gc3BlY2lmeSBhIGxhbmd1YWdl IGluIHRoZSAlZXhjZXB0aW9uIGNvbW1hbmQsCisgICBzbyB3ZSBoYXZlIHRvIHVzZSAjaWZkZWZz IGZvciB0aGUgcHl0aG9uLXNwZWNpZmljIHBhcnRzLgorKi8KKworJWV4Y2VwdGlvbiB7CisjaWZk ZWYgU1dJR1BZVEhPTgorICAgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOworI2VuZGlm CisgICAgJGFjdGlvbgorI2lmZGVmIFNXSUdQWVRIT04KKyAgICBzdm5fc3dpZ19weV9hY3F1aXJl X3B5X2xvY2soKTsKKyNlbmRpZgorfQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBoYW5kbGUg Y29uZmlnIGFuZCBmc19jb25maWcgaW4gc3ZuX3tmcyxyZXBvc31fY3JlYXRlCisqLworCisKKyV0 eXBlbWFwKHJ1YnksIGluKSBhcHJfaGFzaF90ICpjb25maWcgKGFwcl9oYXNoX3QgKnRlbXApCit7 CisgIGlmIChOSUxfUCgkaW5wdXQpKSB7CisgICAgJDEgPSBOVUxMOworICB9IGVsc2UgeworICAg ICQxID0gc3ZuX3N3aWdfcmJfaGFzaF90b19hcHJfaGFzaF9zd2lnX3R5cGUoJGlucHV0LCAic3Zu X2NvbmZpZ190ICoiLCBfZ2xvYmFsX3Bvb2wpOworICB9Cit9CisldHlwZW1hcChydWJ5LCBpbikg YXByX2hhc2hfdCAqZnNfY29uZmlnCit7CisgIGlmIChOSUxfUCgkaW5wdXQpKSB7CisgICAgJDEg PSBOVUxMOworICB9IGVsc2UgeworICAgICQxID0gc3ZuX3N3aWdfcmJfaGFzaF90b19hcHJfaGFz aF9zdHJpbmcoJGlucHV0LCBfZ2xvYmFsX3Bvb2wpOworICB9Cit9CisKKy8qIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tICovCisKKyV7CisjaWZkZWYgU1dJR1BZVEhPTgorI2luY2x1ZGUgInN3aWd1dGlsX3B5Lmgi CisjZW5kaWYKKworI2lmZGVmIFNXSUdQRVJMCisjaW5jbHVkZSAic3dpZ3V0aWxfcGwuaCIKKyNl bmRpZgorCisjaWZkZWYgU1dJR1JVQlkKKyNpbmNsdWRlIDxhcHUuaD4KKyNpbmNsdWRlIDxhcHJf eGxhdGUuaD4KKyNpbmNsdWRlICJzd2lndXRpbF9yYi5oIgorI2VuZGlmCislfQorCislaW5jbHVk ZSBzdm5fdGltZV9oLnN3ZworJWluY2x1ZGUgc3ZuX3R5cGVzX2guc3dnCmRpZmYgLU51ciBzdWJ2 ZXJzaW9uLTEuMy4xL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vbGlic3ZuX3N3aWdf cHkvc3dpZ3V0aWxfcHkuYyBzdWJ2ZXJzaW9uLTEuMy4xLm5ldy9zdWJ2ZXJzaW9uL2JpbmRpbmdz L3N3aWcvcHl0aG9uL2xpYnN2bl9zd2lnX3B5L3N3aWd1dGlsX3B5LmMKLS0tIHN1YnZlcnNpb24t MS4zLjEvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3B5dGhvbi9saWJzdm5fc3dpZ19weS9zd2ln dXRpbF9weS5jCTIwMDYtMDMtMDUgMjA6NTU6MTQuMDAwMDAwMDAwICswMDAwCisrKyBzdWJ2ZXJz aW9uLTEuMy4xLm5ldy9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcHl0aG9uL2xpYnN2bl9zd2ln X3B5L3N3aWd1dGlsX3B5LmMJMjAwNi0wNy0wNSAwMTowNTo0My4wMDAwMDAwMDAgKzAxMDAKQEAg LTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxhcHJfcG9ydGFibGUuaD4KICNpbmNsdWRlIDxhcHJf dGhyZWFkX3Byb2MuaD4KIAorI2luY2x1ZGUgInN2bl9jbGllbnQuaCIKICNpbmNsdWRlICJzdm5f c3RyaW5nLmgiCiAjaW5jbHVkZSAic3ZuX29wdC5oIgogI2luY2x1ZGUgInN2bl9kZWx0YS5oIgpA QCAtNzIsMTEgKzczLDEzIEBACiAjaWZkZWYgQUNRVUlSRV9QWVRIT05fTE9DSwogICBQeVRocmVh ZFN0YXRlICp0aHJlYWRfc3RhdGU7CiAKLSAgaWYgKF9zYXZlZF90aHJlYWRfa2V5ID09IE5VTEwp IHsKLSAgICAvKiBPYnZpb3VzbHksIGNyZWF0aW5nIGEgdG9wLWxldmVsIHBvb2wgZm9yIHRoaXMg aXMgcHJldHR5IHN0dXBpZC4gKi8KLSAgICBhcHJfcG9vbF9jcmVhdGUoJl9zYXZlZF90aHJlYWRf cG9vbCwgTlVMTCk7Ci0gICAgYXByX3RocmVhZGtleV9wcml2YXRlX2NyZWF0ZSgmX3NhdmVkX3Ro cmVhZF9rZXksIE5VTEwsIF9zYXZlZF90aHJlYWRfcG9vbCk7Ci0gIH0KKyAgaWYgKF9zYXZlZF90 aHJlYWRfa2V5ID09IE5VTEwpCisgICAgeworICAgICAgLyogT2J2aW91c2x5LCBjcmVhdGluZyBh IHRvcC1sZXZlbCBwb29sIGZvciB0aGlzIGlzIHByZXR0eSBzdHVwaWQuICovCisgICAgICBhcHJf cG9vbF9jcmVhdGUoJl9zYXZlZF90aHJlYWRfcG9vbCwgTlVMTCk7CisgICAgICBhcHJfdGhyZWFk a2V5X3ByaXZhdGVfY3JlYXRlKCZfc2F2ZWRfdGhyZWFkX2tleSwgTlVMTCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX3NhdmVkX3RocmVhZF9wb29sKTsKKyAgICB9CiAKICAg dGhyZWFkX3N0YXRlID0gUHlFdmFsX1NhdmVUaHJlYWQoKTsKICAgYXByX3RocmVhZGtleV9wcml2 YXRlX3NldCh0aHJlYWRfc3RhdGUsIF9zYXZlZF90aHJlYWRfa2V5KTsKQEAgLTEwMyw2ICsxMDYs OCBAQAogc3RhdGljIFB5T2JqZWN0ICpfZ2xvYmFsX3N2bl9zd2lnX3B5X3Bvb2wgPSBOVUxMOwog c3RhdGljIGNoYXIgYXNzZXJ0VmFsaWRbXSA9ICJhc3NlcnRfdmFsaWQiOwogc3RhdGljIGNoYXIg cGFyZW50UG9vbFtdID0gIl9wYXJlbnRfcG9vbCI7CitzdGF0aWMgY2hhciBhZGRPd25lZFJlZltd ID0gIl9hZGRfb3duZWRfcmVmIjsKK3N0YXRpYyBjaGFyIHJlbW92ZU93bmVkUmVmW10gPSAiX3Jl bW92ZV9vd25lZF9yZWYiOwogc3RhdGljIGNoYXIgd3JhcFtdID0gIl93cmFwIjsKIHN0YXRpYyBj aGFyIHVud3JhcFtdID0gIl91bndyYXAiOwogc3RhdGljIGNoYXIgc2V0UGFyZW50UG9vbFtdID0g InNldF9wYXJlbnRfcG9vbCI7CkBAIC0xMjIsNyArMTI3LDcgQEAKIH0KIAogLyogU2V0IHRoZSBh cHBsaWNhdGlvbiBwb29sICovCi12b2lkIHN2bl9zd2lnX3B5X3NldF9hcHBsaWNhdGlvbl9wb29s KFB5T2JqZWN0ICpweV9wb29sLCBhcHJfcG9vbF90ICpwb29sKSAKK3ZvaWQgc3ZuX3N3aWdfcHlf c2V0X2FwcGxpY2F0aW9uX3Bvb2woUHlPYmplY3QgKnB5X3Bvb2wsIGFwcl9wb29sX3QgKnBvb2wp CiB7CiAgIF9nbG9iYWxfcG9vbCA9IHBvb2w7CiAgIF9nbG9iYWxfc3ZuX3N3aWdfcHlfcG9vbCA9 IHB5X3Bvb2w7CkBAIC0xNDcsNTUgKzE1MiwxMDYgQEAKIHsKICAgUHlPYmplY3QgKnJlc3VsdDsK IAotICBpZiAoKnByb3h5ICE9IE5VTEwpIHsKLSAgICBpZiAocG9vbCA9PSBOVUxMKSB7Ci0gICAg ICBpZiAoUHlPYmplY3RfSGFzQXR0clN0cmluZygqcHJveHksIHNldFBhcmVudFBvb2wpKSB7Ci0g ICAgICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxNZXRob2QoKnByb3h5LCBzZXRQYXJlbnRQb29s LCBlbXB0eVR1cGxlKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBOVUxMKSB7Ci0gICAgICAgICAg cmV0dXJuIDE7CisgIGlmICgqcHJveHkgIT0gTlVMTCkKKyAgICB7CisgICAgICBpZiAocG9vbCA9 PSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgaWYgKFB5T2JqZWN0X0hhc0F0dHJTdHJpbmco KnByb3h5LCBzZXRQYXJlbnRQb29sKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgcmVz dWx0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZCgqcHJveHksIHNldFBhcmVudFBvb2wsIGVtcHR5VHVw bGUpOworICAgICAgICAgICAgICBpZiAocmVzdWx0ID09IE5VTEwpCisgICAgICAgICAgICAgICAg cmV0dXJuIDE7CisgICAgICAgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgICAgICAgICAg fQorICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICByZXN1bHQgPSBQ eU9iamVjdF9DYWxsTWV0aG9kKHBvb2wsIHdyYXAsIG9iamVjdFR1cGxlLCAqcHJveHkpOworICAg ICAgICAgIFB5X0RFQ1JFRigqcHJveHkpOworICAgICAgICAgICpwcm94eSA9IHJlc3VsdDsKICAg ICAgICAgfQotICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKLSAgICAgIH0KLSAgICB9IGVsc2Ug ewotICAgICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChwb29sLCB3cmFwLCBvYmplY3RU dXBsZSwgKnByb3h5KTsKLSAgICAgIFB5X0RFQ1JFRigqcHJveHkpOwotICAgICAgKnByb3h5ID0g cmVzdWx0OwogICAgIH0KLSAgfQogCiAgIHJldHVybiAwOwogfQorCisvKiBHZXQgdGhlIHBhcmVu dCBwb29sIG9mIGEgcHJveHkgb2JqZWN0LCBvciByZXR1cm4gdGhlIGdsb2JhbCBhcHBsaWNhdGlv bgorICogcG9vbCBpZiBvbmUgaXMgbm90IHNldC4gIFJldHVybnMgYSBCT1JST1dFRCByZWZlcmVu Y2UhICovCitzdGF0aWMgUHlPYmplY3QgKnByb3h5X2dldF9wb29sKFB5T2JqZWN0ICpwcm94eSkK K3sKKyAgUHlPYmplY3QgKnJlc3VsdDsKKyAgaWYgKFB5T2JqZWN0X0hhc0F0dHJTdHJpbmcocHJv eHksIHBhcmVudFBvb2wpKQorICAgIHsKKyAgICAgIHJlc3VsdCA9IFB5T2JqZWN0X0dldEF0dHJT dHJpbmcocHJveHksIHBhcmVudFBvb2wpOworICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAg fQorICBlbHNlCisgICAgeworICAgICAgcmVzdWx0ID0gX2dsb2JhbF9zdm5fc3dpZ19weV9wb29s OworICAgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyogQ2hhbmdlIGFuICdvd25lZCByZWZl cmVuY2UnIGFsbG9jYXRlZCBpbiBhIHBvb2wgZnJvbSBvbGRSZWYgdG8gbmV3UmVmLgorICogSWYg b2xkUmVmIGlzIG5vbi1OVUxMIGFuZCBwcmVzZW50IGluIHRoZSBwYXJlbnQgcG9vbCBvZiBwcm94 eSwgaXQgaXMgcmVtb3ZlZC4KKyAqLworaW50IHN2bl9zd2lnX3B5X3Bvb2xfc2V0X293bmVkX3Jl ZihQeU9iamVjdCAqcHJveHksIFB5T2JqZWN0ICpvbGRSZWYsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpuZXdSZWYpCit7CisgIFB5T2JqZWN0ICp0ZW1wOwor ICBQeU9iamVjdCAqcHlfcG9vbCA9IHByb3h5X2dldF9wb29sKHByb3h5KTsKKworICBpZiAob2xk UmVmICE9IE5VTEwpCisgICAgeworICAgICAgdGVtcCA9IFB5T2JqZWN0X0NhbGxNZXRob2QocHlf cG9vbCwgcmVtb3ZlT3duZWRSZWYsIG9iamVjdFR1cGxlLCBvbGRSZWYpOworICAgICAgaWYgKHRl bXAgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICBlbHNlCisgICAgICAgIFB5X0RF Q1JFRih0ZW1wKTsKKyAgICB9CisgIGlmIChuZXdSZWYgIT0gTlVMTCkKKyAgICB7CisgICAgICB0 ZW1wID0gUHlPYmplY3RfQ2FsbE1ldGhvZChweV9wb29sLCBhZGRPd25lZFJlZiwgb2JqZWN0VHVw bGUsIG5ld1JlZik7CisgICAgICBpZiAodGVtcCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gMTsK KyAgICAgIGVsc2UKKyAgICAgICAgUHlfREVDUkVGKHRlbXApOworICAgIH0KKyAgcmV0dXJuIDA7 Cit9CiAMCiAvKiBXcmFwcGVyIGZvciBTV0lHX1R5cGVRdWVyeSAqLwogI2RlZmluZSBzdm5fc3dp Z19UeXBlUXVlcnkoeCkgU1dJR19UeXBlUXVlcnkoeCkKIAogLyoqIFdyYXBwZXIgZm9yIFNXSUdf TmV3UG9pbnRlck9iaiAqLwotUHlPYmplY3QgKnN2bl9zd2lnX05ld1BvaW50ZXJPYmoodm9pZCAq b2JqLCBzd2lnX3R5cGVfaW5mbyAqdHlwZSwgCitQeU9iamVjdCAqc3ZuX3N3aWdfTmV3UG9pbnRl ck9iaih2b2lkICpvYmosIHN3aWdfdHlwZV9pbmZvICp0eXBlLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHlPYmplY3QgKnBvb2wpCiB7CiAgIFB5T2JqZWN0ICpwcm94eSA9IFNX SUdfTmV3UG9pbnRlck9iaihvYmosIHR5cGUsIDApOwogCi0gIGlmIChwcm94eSA9PSBOVUxMKSB7 Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLSAgCi0gIGlmIChwcm94eV9zZXRfcG9vbCgmcHJveHks IHBvb2wpKSB7Ci0gICAgUHlfREVDUkVGKHByb3h5KTsKKyAgaWYgKHByb3h5ID09IE5VTEwpCiAg ICAgcmV0dXJuIE5VTEw7Ci0gIH0KKworICBpZiAocHJveHlfc2V0X3Bvb2woJnByb3h5LCBwb29s KSkKKyAgICB7CisgICAgICBQeV9ERUNSRUYocHJveHkpOworICAgICAgcmV0dXJuIE5VTEw7Cisg ICAgfQogCiAgIHJldHVybiBwcm94eTsKIH0KIAogLyoqIHN2bl9zd2lnX05ld1BvaW50ZXJPYmos IGV4Y2VwdCBhIHN0cmluZyBpcyB1c2VkIHRvIGRlc2NyaWJlIHRoZSB0eXBlICovCi1zdGF0aWMg UHlPYmplY3QgKnN2bl9zd2lnX05ld1BvaW50ZXJPYmpTdHJpbmcodm9pZCAqcHRyLCBjb25zdCBj aGFyICp0eXBlLCAKK3N0YXRpYyBQeU9iamVjdCAqc3ZuX3N3aWdfTmV3UG9pbnRlck9ialN0cmlu Zyh2b2lkICpwdHIsIGNvbnN0IGNoYXIgKnR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKnB5X3Bvb2wpCiB7CiAgIHN3aWdfdHlwZV9p bmZvICp0eXBlaW5mbyA9IHN2bl9zd2lnX1R5cGVRdWVyeSh0eXBlKTsKLSAgaWYgKHR5cGVpbmZv ID09IE5VTEwpIHsKLSAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiQ2Fubm90 IGZpbmQgcmVxdWlyZWQgdHlwZW9iamVjdCIpOwotICAgIHJldHVybiBOVUxMOwotICB9CisgIGlm ICh0eXBlaW5mbyA9PSBOVUxMKQorICAgIHsKKyAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19U eXBlRXJyb3IsICJDYW5ub3QgZmluZCByZXF1aXJlZCB0eXBlb2JqZWN0Iik7CisgICAgICByZXR1 cm4gTlVMTDsKKyAgICB9CisKICAgLyogIyMjIGNhY2hlIHRoZSBzd2lnX3R5cGVfaW5mbyBhdCBz b21lIHBvaW50PyAqLwogICByZXR1cm4gc3ZuX3N3aWdfTmV3UG9pbnRlck9iaihwdHIsIHR5cGVp bmZvLCBweV9wb29sKTsKIH0KQEAgLTIwMywyMCArMjU5LDIxIEBACiAvKiogV3JhcHBlciBmb3Ig U1dJR19Db252ZXJ0UHRyICovCiBpbnQgc3ZuX3N3aWdfQ29udmVydFB0cihQeU9iamVjdCAqaW5w dXQsIHZvaWQgKipvYmosIHN3aWdfdHlwZV9pbmZvICp0eXBlKQogewotICBpZiAoUHlPYmplY3Rf SGFzQXR0clN0cmluZyhpbnB1dCwgYXNzZXJ0VmFsaWQpKSB7Ci0gICAgUHlPYmplY3QgKnJlc3Vs dCA9IFB5T2JqZWN0X0NhbGxNZXRob2QoaW5wdXQsIGFzc2VydFZhbGlkLCBlbXB0eVR1cGxlKTsK LSAgICBpZiAocmVzdWx0ID09IE5VTEwpIHsKLSAgICAgIHJldHVybiAxOwotICAgIH0KLSAgICBQ eV9ERUNSRUYocmVzdWx0KTsKLSAgfQotICBpZiAoUHlPYmplY3RfSGFzQXR0clN0cmluZyhpbnB1 dCwgdW53cmFwKSkgewotICAgIGlucHV0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChpbnB1dCwgdW53 cmFwLCBlbXB0eVR1cGxlKTsKLSAgICBpZiAoaW5wdXQgPT0gTlVMTCkgewotICAgICAgcmV0dXJu IDE7CisgIGlmIChQeU9iamVjdF9IYXNBdHRyU3RyaW5nKGlucHV0LCBhc3NlcnRWYWxpZCkpCisg ICAgeworICAgICAgUHlPYmplY3QgKnJlc3VsdCA9IFB5T2JqZWN0X0NhbGxNZXRob2QoaW5wdXQs IGFzc2VydFZhbGlkLCBlbXB0eVR1cGxlKTsKKyAgICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKKyAg ICAgICAgcmV0dXJuIDE7CisgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICB9CisgIGlmIChQ eU9iamVjdF9IYXNBdHRyU3RyaW5nKGlucHV0LCB1bndyYXApKQorICAgIHsKKyAgICAgIGlucHV0 ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChpbnB1dCwgdW53cmFwLCBlbXB0eVR1cGxlKTsKKyAgICAg IGlmIChpbnB1dCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gMTsKKyAgICAgIFB5X0RFQ1JFRihp bnB1dCk7CiAgICAgfQotICAgIFB5X0RFQ1JFRihpbnB1dCk7Ci0gIH0KKwogICByZXR1cm4gU1dJ R19Db252ZXJ0UHRyKGlucHV0LCBvYmosIHR5cGUsIFNXSUdfUE9JTlRFUl9FWENFUFRJT04gfCAw KTsKIH0KIApAQCAtMjMxLDMxICsyODgsMjggQEAKIHZvaWQgKnN2bl9zd2lnX011c3RHZXRQdHIo dm9pZCAqaW5wdXQsIHN3aWdfdHlwZV9pbmZvICp0eXBlLCBpbnQgYXJnbnVtLAogICAgICAgICAg ICAgICAgICAgICAgICAgICBQeU9iamVjdCAqKnB5X3Bvb2wpCiB7Ci0gIGlmIChQeU9iamVjdF9I YXNBdHRyU3RyaW5nKGlucHV0LCBhc3NlcnRWYWxpZCkpIHsKLSAgICBQeU9iamVjdCAqcmVzdWx0 ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChpbnB1dCwgYXNzZXJ0VmFsaWQsIGVtcHR5VHVwbGUpOwot ICAgIGlmIChyZXN1bHQgPT0gTlVMTCkgewotICAgICAgcmV0dXJuIE5VTEw7CisgIGlmIChQeU9i amVjdF9IYXNBdHRyU3RyaW5nKGlucHV0LCBhc3NlcnRWYWxpZCkpCisgICAgeworICAgICAgUHlP YmplY3QgKnJlc3VsdCA9IFB5T2JqZWN0X0NhbGxNZXRob2QoaW5wdXQsIGFzc2VydFZhbGlkLCBl bXB0eVR1cGxlKTsKKyAgICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5V TEw7CisgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKICAgICB9Ci0gICAgUHlfREVDUkVGKHJlc3Vs dCk7Ci0gIH0KLSAgaWYgKHB5X3Bvb2wgIT0gTlVMTCkgewotICAgIGlmIChQeU9iamVjdF9IYXNB dHRyU3RyaW5nKGlucHV0LCBwYXJlbnRQb29sKSkgewotICAgICAgKnB5X3Bvb2wgPSBQeU9iamVj dF9HZXRBdHRyU3RyaW5nKGlucHV0LCBwYXJlbnRQb29sKTsKLSAgICAgIFB5X0RFQ1JFRigqcHlf cG9vbCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICpweV9wb29sID0gX2dsb2JhbF9zdm5fc3dpZ19w eV9wb29sOwotICAgIH0KLSAgfQotICBpZiAoUHlPYmplY3RfSGFzQXR0clN0cmluZyhpbnB1dCwg dW53cmFwKSkgewotICAgIGlucHV0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChpbnB1dCwgdW53cmFw LCBlbXB0eVR1cGxlKTsKLSAgICBpZiAoaW5wdXQgPT0gTlVMTCkgewotICAgICAgcmV0dXJuIE5V TEw7CisKKyAgaWYgKHB5X3Bvb2wgIT0gTlVMTCkKKyAgICAqcHlfcG9vbCA9IHByb3h5X2dldF9w b29sKChQeU9iamVjdCAqKSBpbnB1dCk7CisKKyAgaWYgKFB5T2JqZWN0X0hhc0F0dHJTdHJpbmco aW5wdXQsIHVud3JhcCkpCisgICAgeworICAgICAgaW5wdXQgPSBQeU9iamVjdF9DYWxsTWV0aG9k KGlucHV0LCB1bndyYXAsIGVtcHR5VHVwbGUpOworICAgICAgaWYgKGlucHV0ID09IE5VTEwpCisg ICAgICAgIHJldHVybiBOVUxMOworICAgICAgUHlfREVDUkVGKChQeU9iamVjdCAqKSBpbnB1dCk7 CiAgICAgfQotICAgIFB5X0RFQ1JFRigoUHlPYmplY3QgKikgaW5wdXQpOwotICB9CisKICAgcmV0 dXJuIFNXSUdfTXVzdEdldFB0cihpbnB1dCwgdHlwZSwgYXJnbnVtLCBTV0lHX1BPSU5URVJfRVhD RVBUSU9OIHwgMCk7CiB9Ci0gIAorCiAMCiAvKioqIEN1c3RvbSBTdWJ2ZXJzaW9uRXhjZXB0aW9u IHN0dWZmcy4gKioqLwogCkBAIC0yODMsNyArMzM3LDcgQEAKIH0KIAogdm9pZCBzdm5fc3dpZ19w eV9zdm5fZXhjZXB0aW9uKHN2bl9lcnJvcl90ICplcnIpCi17IAorewogICBQeU9iamVjdCAqZXhj X29iLCAqYXByX2Vycl9vYjsKIAogICBpZiAoZXJyID09IE5VTEwpCkBAIC0yOTUsNyArMzQ5LDcg QEAKICAgICByZXR1cm47CiAKICAgLyogSW5zdGFudGlhdGUgYSBTdWJ2ZXJzaW9uRXhjZXB0aW9u IG9iamVjdC4gKi8KLSAgZXhjX29iID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKFN1YnZlcnNpb25F eGNlcHRpb24sIChjaGFyICopInNPIiwgCisgIGV4Y19vYiA9IFB5T2JqZWN0X0NhbGxGdW5jdGlv bihTdWJ2ZXJzaW9uRXhjZXB0aW9uLCAoY2hhciAqKSJzTyIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBlcnItPm1lc3NhZ2UsIGFwcl9lcnJfb2IpOwogICBpZiAoZXhjX29iID09 IE5VTEwpCiAgICAgewpAQCAtMzQwLDcgKzM5NCw3IEBACiBzdGF0aWMgUHlPYmplY3QgKm1ha2Vf b2JfZnNfcm9vdChzdm5fZnNfcm9vdF90ICpwdHIsIFB5T2JqZWN0ICpweV9wb29sKQogewogICBy ZXR1cm4gc3ZuX3N3aWdfTmV3UG9pbnRlck9ialN0cmluZyhwdHIsICJzdm5fZnNfcm9vdF90ICoi LCBweV9wb29sKTsKLX0gCit9CiAvKioqLwogCiAvKiBDb252ZXJzaW9uIGZyb20gUHl0aG9uIHNp bmdsZSBvYmplY3RzIChub3QgaGFzaGVzL2xpc3RzL2V0Yy4pIHRvCkBAIC0zNDksMjAgKzQwMywy MiBAQAogewogICBpZiAob2IgPT0gUHlfTm9uZSkKICAgICByZXR1cm4gTlVMTDsKLSAgaWYgKCEg UHlTdHJpbmdfQ2hlY2sob2IpKSB7Ci0gICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJv ciwgIm5vdCBhIHN0cmluZyIpOwotICAgIHJldHVybiBOVUxMOwotICB9CisgIGlmICghIFB5U3Ry aW5nX0NoZWNrKG9iKSkKKyAgICB7CisgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVy cm9yLCAibm90IGEgc3RyaW5nIik7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgIHJldHVy biBhcHJfcHN0cmR1cChwb29sLCBQeVN0cmluZ19BU19TVFJJTkcob2IpKTsKIH0KIHN0YXRpYyBz dm5fc3RyaW5nX3QgKm1ha2Vfc3ZuX3N0cmluZ19mcm9tX29iKFB5T2JqZWN0ICpvYiwgYXByX3Bv b2xfdCAqcG9vbCkKIHsKICAgaWYgKG9iID09IFB5X05vbmUpCiAgICAgcmV0dXJuIE5VTEw7Ci0g IGlmICghIFB5U3RyaW5nX0NoZWNrKG9iKSkgewotICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19U eXBlRXJyb3IsICJub3QgYSBzdHJpbmciKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQorICBpZiAo ISBQeVN0cmluZ19DaGVjayhvYikpCisgICAgeworICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhj X1R5cGVFcnJvciwgIm5vdCBhIHN0cmluZyIpOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQog ICByZXR1cm4gc3ZuX3N0cmluZ19jcmVhdGUoUHlTdHJpbmdfQVNfU1RSSU5HKG9iKSwgcG9vbCk7 CiB9CiAKQEAgLTM4MSwyNSArNDM3LDI4IEBACiAgICAgaWYgKGRpY3QgPT0gTlVMTCkKICAgICAg ICAgcmV0dXJuIE5VTEw7CiAKLSAgICBmb3IgKGhpID0gYXByX2hhc2hfZmlyc3QoTlVMTCwgaGFz aCk7IGhpOyBoaSA9IGFwcl9oYXNoX25leHQoaGkpKSB7CisgICAgZm9yIChoaSA9IGFwcl9oYXNo X2ZpcnN0KE5VTEwsIGhhc2gpOyBoaTsgaGkgPSBhcHJfaGFzaF9uZXh0KGhpKSkKKyAgICAgIHsK ICAgICAgICAgY29uc3Qgdm9pZCAqa2V5OwogICAgICAgICB2b2lkICp2YWw7CiAgICAgICAgIFB5 T2JqZWN0ICp2YWx1ZTsKIAogICAgICAgICBhcHJfaGFzaF90aGlzKGhpLCAma2V5LCBOVUxMLCAm dmFsKTsKICAgICAgICAgdmFsdWUgPSAoKmNvbnZlcnRlcl9mdW5jKSh2YWwsIGN0eCwgcHlfcG9v bCk7Ci0gICAgICAgIGlmICh2YWx1ZSA9PSBOVUxMKSB7CisgICAgICAgIGlmICh2YWx1ZSA9PSBO VUxMKQorICAgICAgICAgIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRihkaWN0KTsKICAgICAgICAg ICAgIHJldHVybiBOVUxMOwotICAgICAgICB9CisgICAgICAgICAgfQogICAgICAgICAvKiAjIyMg Z290dGEgY2FzdCB0aGlzIHRoaW5nIGN1eiBQeXRob24gZG9lc24ndCB1c2UgImNvbnN0IiAqLwot ICAgICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZGljdCwgKGNoYXIgKilrZXksIHZhbHVl KSA9PSAtMSkgeworICAgICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZGljdCwgKGNoYXIg KilrZXksIHZhbHVlKSA9PSAtMSkKKyAgICAgICAgICB7CiAgICAgICAgICAgICBQeV9ERUNSRUYo dmFsdWUpOwogICAgICAgICAgICAgUHlfREVDUkVGKGRpY3QpOwogICAgICAgICAgICAgcmV0dXJu IE5VTEw7Ci0gICAgICAgIH0KKyAgICAgICAgICB9CiAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7 Ci0gICAgfQorICAgICAgfQogCiAgICAgcmV0dXJuIGRpY3Q7CiB9CkBAIC00NDYsNyArNTA1LDcg QEAKICAgICAgIHVybCA9IFB5X05vbmU7CiAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAg fQotICAgICAgICAKKwogICBpZiAoaXRlbS0+Y29weWZyb21fdXJsKQogICAgIGNmX3VybCA9IFB5 U3RyaW5nX0Zyb21TdHJpbmcoaXRlbS0+Y29weWZyb21fdXJsKTsKICAgZWxzZQpAQCAtNDU0LDcg KzUxMyw3IEBACiAgICAgICBjZl91cmwgPSBQeV9Ob25lOwogICAgICAgUHlfSU5DUkVGKFB5X05v bmUpOwogICAgIH0KLSAgICAgICAgCisKICAga2luZCA9IFB5SW50X0Zyb21Mb25nKGl0ZW0tPmtp bmQpOwogICByZXYgPSBQeUludF9Gcm9tTG9uZyhpdGVtLT5yZXZpc2lvbik7CiAgIHN0YXRlID0g UHlJbnRfRnJvbUxvbmcoaXRlbS0+c3RhdGVfZmxhZ3MpOwpAQCAtNDg1LDYgKzU0NCw1MiBAQAog ICByZXR1cm4gY29udmVydF9oYXNoKGhhc2gsIGNvbnZlcnRfc3ZuX3N0cmluZ190LCBOVUxMLCBO VUxMKTsKIH0KIAorc3RhdGljIFB5T2JqZWN0ICpwcm9wYXJyYXlfdG9fZGljdChjb25zdCBhcHJf YXJyYXlfaGVhZGVyX3QgKmFycmF5KQoreworICAgIFB5T2JqZWN0ICpkaWN0ID0gUHlEaWN0X05l dygpOworICAgIGludCBpOworCisgICAgaWYgKGRpY3QgPT0gTlVMTCkKKyAgICAgIHJldHVybiBO VUxMOworCisgICAgZm9yIChpID0gMDsgaSA8IGFycmF5LT5uZWx0czsgKytpKQorICAgICAgewor ICAgICAgICBzdm5fcHJvcF90IHByb3A7CisgICAgICAgIFB5T2JqZWN0ICpweV9rZXksICpweV92 YWx1ZTsKKworICAgICAgICBwcm9wID0gQVBSX0FSUkFZX0lEWChhcnJheSwgaSwgc3ZuX3Byb3Bf dCk7CisKKyAgICAgICAgcHlfa2V5ID0gUHlTdHJpbmdfRnJvbVN0cmluZyhwcm9wLm5hbWUpOwor ICAgICAgICBpZiAocHlfa2V5ID09IE5VTEwpCisgICAgICAgICAgZ290byBlcnJvcjsKKworICAg ICAgICBpZiAocHJvcC52YWx1ZSA9PSBOVUxMKQorICAgICAgICAgIHsKKyAgICAgICAgICAgICBw eV92YWx1ZSA9IFB5X05vbmU7CisgICAgICAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOworICAg ICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICAgICBweV92YWx1 ZSA9IFB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKCh2b2lkICopcHJvcC52YWx1ZS0+ZGF0YSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3Au dmFsdWUtPmxlbik7CisgICAgICAgICAgICAgaWYgKHB5X3ZhbHVlID09IE5VTEwpCisgICAgICAg ICAgICAgICB7CisgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihweV9rZXkpOworICAgICAgICAg ICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisKKyAg ICAgICAgUHlEaWN0X1NldEl0ZW0oZGljdCwgcHlfa2V5LCBweV92YWx1ZSk7CisgICAgfQorCisg ICAgcmV0dXJuIGRpY3Q7CisKKyAgZXJyb3I6CisgICAgUHlfREVDUkVGKGRpY3QpOworICAgIHJl dHVybiBOVUxMOworCit9CisKIAogUHlPYmplY3QgKnN2bl9zd2lnX3B5X2xvY2F0aW9uaGFzaF90 b19kaWN0KGFwcl9oYXNoX3QgKmhhc2gpCiB7CkBAIC00OTYsNyArNjAxLDcgQEAKICAgICBpZiAo ZGljdCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGZvciAoaGkgPSBhcHJf aGFzaF9maXJzdChOVUxMLCBoYXNoKTsgaGk7IGhpID0gYXByX2hhc2hfbmV4dChoaSkpIAorICAg IGZvciAoaGkgPSBhcHJfaGFzaF9maXJzdChOVUxMLCBoYXNoKTsgaGk7IGhpID0gYXByX2hhc2hf bmV4dChoaSkpCiAgICAgICB7CiAgICAgICAgIGNvbnN0IHZvaWQgKms7CiAgICAgICAgIHZvaWQg KnY7CkBAIC01MTAsMTIgKzYxNSwxMyBAQAogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAg ICAgICAgfQogICAgICAgICB2YWx1ZSA9IFB5U3RyaW5nX0Zyb21TdHJpbmcoKGNoYXIgKil2KTsK LSAgICAgICAgaWYgKHZhbHVlID09IE5VTEwpIHsKKyAgICAgICAgaWYgKHZhbHVlID09IE5VTEwp CisgICAgICAgICAgewogICAgICAgICAgICAgUHlfREVDUkVGKGtleSk7CiAgICAgICAgICAgICBQ eV9ERUNSRUYoZGljdCk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAg ICAgICBpZiAoUHlEaWN0X1NldEl0ZW0oZGljdCwga2V5LCB2YWx1ZSkgPT0gLTEpIAorICAgICAg ICAgIH0KKyAgICAgICAgaWYgKFB5RGljdF9TZXRJdGVtKGRpY3QsIGtleSwgdmFsdWUpID09IC0x KQogICAgICAgICAgIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CiAgICAgICAgICAg ICBQeV9ERUNSRUYoZGljdCk7CkBAIC01MjcsMTEgKzYzMywxMSBAQAogICAgIHJldHVybiBkaWN0 OwogfQogCi1QeU9iamVjdCAqc3ZuX3N3aWdfcHlfY29udmVydF9oYXNoKGFwcl9oYXNoX3QgKmhh c2gsIHN3aWdfdHlwZV9pbmZvICp0eXBlLCAKK1B5T2JqZWN0ICpzdm5fc3dpZ19weV9jb252ZXJ0 X2hhc2goYXByX2hhc2hfdCAqaGFzaCwgc3dpZ190eXBlX2luZm8gKnR5cGUsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpweV9wb29sKQogewogICByZXR1cm4g Y29udmVydF9oYXNoKGhhc2gsIGNvbnZlcnRfdG9fc3dpZ3R5cGUsIHR5cGUsIHB5X3Bvb2wpOwot fSAgCit9CiAKICNkZWZpbmUgREVDTEFSRV9TV0lHX0NPTlNUUlVDVE9SKHR5cGUsIGR1cCkgXAog c3RhdGljIFB5T2JqZWN0ICptYWtlX29iXyMjdHlwZSh2b2lkICp2YWx1ZSkgXApAQCAtNTQzLDEz ICs2NDksMTYgQEAKICAgcmV0dXJuIHN2bl9zd2lnX05ld1BvaW50ZXJPYmpTdHJpbmcobmV3X3Zh bHVlLCAic3ZuXyIgI3R5cGUgIl90ICoiLCBcCiAgICAgICBuZXdfcHlfcG9vbCk7IFwKIH0KLSAK KwogREVDTEFSRV9TV0lHX0NPTlNUUlVDVE9SKHR4ZGVsdGFfd2luZG93LCBzdm5fdHhkZWx0YV93 aW5kb3dfZHVwKQogREVDTEFSRV9TV0lHX0NPTlNUUlVDVE9SKGxvZ19jaGFuZ2VkX3BhdGgsIHN2 bl9sb2dfY2hhbmdlZF9wYXRoX2R1cCkKIERFQ0xBUkVfU1dJR19DT05TVFJVQ1RPUih3Y19zdGF0 dXMsIHN2bl93Y19kdXBfc3RhdHVzKQogREVDTEFSRV9TV0lHX0NPTlNUUlVDVE9SKGxvY2ssIHN2 bl9sb2NrX2R1cCkKIERFQ0xBUkVfU1dJR19DT05TVFJVQ1RPUihhdXRoX3NzbF9zZXJ2ZXJfY2Vy dF9pbmZvLAogICAgIHN2bl9hdXRoX3NzbF9zZXJ2ZXJfY2VydF9pbmZvX2R1cCkKK0RFQ0xBUkVf U1dJR19DT05TVFJVQ1RPUihpbmZvLCBzdm5faW5mb19kdXApCitERUNMQVJFX1NXSUdfQ09OU1RS VUNUT1IoY29tbWl0X2luZm8sIHN2bl9jb21taXRfaW5mb19kdXApCitERUNMQVJFX1NXSUdfQ09O U1RSVUNUT1Iod2Nfbm90aWZ5LCBzdm5fd2NfZHVwX25vdGlmeSkKIAogc3RhdGljIFB5T2JqZWN0 ICpjb252ZXJ0X2xvZ19jaGFuZ2VkX3BhdGgodm9pZCAqdmFsdWUsIHZvaWQgKmN0eCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpweV9wb29sKQpA QCAtNTYyLDE0ICs2NzEsMTUgQEAKICAgICBQeU9iamVjdCAqbGlzdCA9IFB5TGlzdF9OZXcoMCk7 CiAgICAgY2hhciAqczsKIAotICAgIHdoaWxlICgocyA9ICpzdHJpbmdzKyspICE9IE5VTEwpIHsK KyAgICB3aGlsZSAoKHMgPSAqc3RyaW5ncysrKSAhPSBOVUxMKQorICAgICAgewogICAgICAgICBQ eU9iamVjdCAqb2IgPSBQeVN0cmluZ19Gcm9tU3RyaW5nKHMpOwogCiAgICAgICAgIGlmIChvYiA9 PSBOVUxMKQogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgaWYgKFB5TGlzdF9BcHBl bmQobGlzdCwgb2IpID09IC0xKQogICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICB9CisgICAg ICB9CiAKICAgICByZXR1cm4gbGlzdDsKIApAQCAtNTg0LDE2ICs2OTQsMTcgQEAKICAgYXByX2hh c2hfdCAqaGFzaDsKICAgUHlPYmplY3QgKmtleXM7CiAgIGludCBpLCBudW1fa2V5czsKLSAgCisK ICAgaWYgKGRpY3QgPT0gUHlfTm9uZSkKICAgICByZXR1cm4gTlVMTDsKIAotICBpZiAoIVB5RGlj dF9DaGVjayhkaWN0KSkgewotICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJu b3QgYSBkaWN0aW9uYXJ5Iik7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KKyAgaWYgKCFQeURpY3Rf Q2hlY2soZGljdCkpCisgICAgeworICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJv ciwgIm5vdCBhIGRpY3Rpb25hcnkiKTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAotICBo YXNoID0gYXByX2hhc2hfbWFrZShwb29sKTsgIAorICBoYXNoID0gYXByX2hhc2hfbWFrZShwb29s KTsKICAga2V5cyA9IFB5RGljdF9LZXlzKGRpY3QpOwogICBudW1fa2V5cyA9IFB5TGlzdF9TaXpl KGtleXMpOwogICBmb3IgKGkgPSAwOyBpIDwgbnVtX2tleXM7IGkrKykKQEAgLTYwNiw3ICs3MTcs NyBAQAogICAgICAgUHlfREVDUkVGKHZhbHVlKTsKICAgICAgIGlmICghIChwcm9wbmFtZSAmJiBw cm9wdmFsKSkKICAgICAgICAgewotICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBl RXJyb3IsIAorICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICJkaWN0aW9uYXJ5IGtleXMvdmFsdWVzIGFyZW4ndCBzdHJp bmdzIik7CiAgICAgICAgICAgUHlfREVDUkVGKGtleXMpOwogICAgICAgICAgIHJldHVybiBOVUxM OwpAQCAtNjI4LDEyICs3MzksMTMgQEAKICAgaWYgKGRpY3QgPT0gUHlfTm9uZSkKICAgICByZXR1 cm4gTlVMTDsKIAotICBpZiAoIVB5RGljdF9DaGVjayhkaWN0KSkgewotICAgIFB5RXJyX1NldFN0 cmluZyhQeUV4Y19UeXBlRXJyb3IsICJub3QgYSBkaWN0aW9uYXJ5Iik7Ci0gICAgcmV0dXJuIE5V TEw7Ci0gIH0KKyAgaWYgKCFQeURpY3RfQ2hlY2soZGljdCkpCisgICAgeworICAgICAgUHlFcnJf U2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgIm5vdCBhIGRpY3Rpb25hcnkiKTsKKyAgICAgIHJl dHVybiBOVUxMOworICAgIH0KIAotICBoYXNoID0gYXByX2hhc2hfbWFrZShwb29sKTsgIAorICBo YXNoID0gYXByX2hhc2hfbWFrZShwb29sKTsKICAga2V5cyA9IFB5RGljdF9LZXlzKGRpY3QpOwog ICBudW1fa2V5cyA9IFB5TGlzdF9TaXplKGtleXMpOwogICBmb3IgKGkgPSAwOyBpIDwgbnVtX2tl eXM7IGkrKykKQEAgLTY0Niw3ICs3NTgsNyBAQAogICAgICAgUHlfREVDUkVGKHZhbHVlKTsKICAg ICAgIGlmICghIChwcm9wbmFtZSAmJiBwcm9wdmFsKSkKICAgICAgICAgewotICAgICAgICAgIFB5 RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsIAorICAgICAgICAgIFB5RXJyX1NldFN0cmlu ZyhQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJkaWN0aW9uYXJ5 IGtleXMvdmFsdWVzIGFyZW4ndCBzdHJpbmdzIik7CiAgICAgICAgICAgUHlfREVDUkVGKGtleXMp OwogICAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtNjY0LDI3ICs3NzYsMzAgQEAKICAgICBpbnQg dGFyZ2xlbjsKICAgICBhcHJfYXJyYXlfaGVhZGVyX3QgKnRlbXA7CiAKLSAgICBpZiAoIVB5U2Vx dWVuY2VfQ2hlY2soc291cmNlKSkgeworICAgIGlmICghUHlTZXF1ZW5jZV9DaGVjayhzb3VyY2Up KQorICAgICAgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAibm90 IGEgc2VxdWVuY2UiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQorICAgICAgfQogICAg IHRhcmdsZW4gPSBQeVNlcXVlbmNlX0xlbmd0aChzb3VyY2UpOwogICAgIHRlbXAgPSBhcHJfYXJy YXlfbWFrZShwb29sLCB0YXJnbGVuLCBzaXplb2YoY29uc3QgY2hhciAqKSk7CiAgICAgLyogQVBS X0FSUkFZX0lEWCBkb2Vzbid0IGFjdHVhbGx5IGluY3JlbWVudCB0aGUgYXJyYXkgaXRlbSBjb3Vu dAogICAgICAgIChsaWtlLCBzYXksIGFwcl9hcnJheV9wdXNoIHdvdWxkKS4gKi8KICAgICB0ZW1w LT5uZWx0cyA9IHRhcmdsZW47Ci0gICAgd2hpbGUgKHRhcmdsZW4tLSkgeworICAgIHdoaWxlICh0 YXJnbGVuLS0pCisgICAgICB7CiAgICAgICAgIFB5T2JqZWN0ICpvID0gUHlTZXF1ZW5jZV9HZXRJ dGVtKHNvdXJjZSwgdGFyZ2xlbik7CiAgICAgICAgIGlmIChvID09IE5VTEwpCiAgICAgICAgICAg ICByZXR1cm4gTlVMTDsKLSAgICAgICAgaWYgKCFQeVN0cmluZ19DaGVjayhvKSkgeworICAgICAg ICBpZiAoIVB5U3RyaW5nX0NoZWNrKG8pKQorICAgICAgICAgIHsKICAgICAgICAgICAgIFB5X0RF Q1JFRihvKTsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJu b3QgYSBzdHJpbmciKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9CisgICAg ICAgICAgfQogICAgICAgICBBUFJfQVJSQVlfSURYKHRlbXAsIHRhcmdsZW4sIGNvbnN0IGNoYXIg KikgPSBQeVN0cmluZ19BU19TVFJJTkcobyk7CiAgICAgICAgIFB5X0RFQ1JFRihvKTsKLSAgICB9 CisgICAgICB9CiAgICAgcmV0dXJuIHRlbXA7CiB9CiAKQEAgLTY5NSwzMiArODEwLDM3IEBACiAg ICAgaW50IHRhcmdsZW47CiAgICAgYXByX2FycmF5X2hlYWRlcl90ICp0ZW1wOwogCi0gICAgaWYg KCFQeVNlcXVlbmNlX0NoZWNrKHNvdXJjZSkpIHsKKyAgICBpZiAoIVB5U2VxdWVuY2VfQ2hlY2so c291cmNlKSkKKyAgICAgIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJv ciwgIm5vdCBhIHNlcXVlbmNlIik7CiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KKyAgICAg IH0KICAgICB0YXJnbGVuID0gUHlTZXF1ZW5jZV9MZW5ndGgoc291cmNlKTsKICAgICB0ZW1wID0g YXByX2FycmF5X21ha2UocG9vbCwgdGFyZ2xlbiwgc2l6ZW9mKHN2bl9yZXZudW1fdCkpOwogICAg IC8qIEFQUl9BUlJBWV9JRFggZG9lc24ndCBhY3R1YWxseSBpbmNyZW1lbnQgdGhlIGFycmF5IGl0 ZW0gY291bnQKICAgICAgICAobGlrZSwgc2F5LCBhcHJfYXJyYXlfcHVzaCB3b3VsZCkuICovCiAg ICAgdGVtcC0+bmVsdHMgPSB0YXJnbGVuOwotICAgIHdoaWxlICh0YXJnbGVuLS0pIHsKKyAgICB3 aGlsZSAodGFyZ2xlbi0tKQorICAgICAgewogICAgICAgICBQeU9iamVjdCAqbyA9IFB5U2VxdWVu Y2VfR2V0SXRlbShzb3VyY2UsIHRhcmdsZW4pOwogICAgICAgICBpZiAobyA9PSBOVUxMKQogICAg ICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIGlmIChQeUxvbmdfQ2hlY2sobykpIHsKLSAg ICAgICAgICAgIEFQUl9BUlJBWV9JRFgodGVtcCwgdGFyZ2xlbiwgc3ZuX3Jldm51bV90KSA9IAor ICAgICAgICBpZiAoUHlMb25nX0NoZWNrKG8pKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIEFQ Ul9BUlJBWV9JRFgodGVtcCwgdGFyZ2xlbiwgc3ZuX3Jldm51bV90KSA9CiAgICAgICAgICAgICAg IChzdm5fcmV2bnVtX3QpUHlMb25nX0FzTG9uZyhvKTsKLSAgICAgICAgfQotICAgICAgICBlbHNl IGlmIChQeUludF9DaGVjayhvKSkgewotICAgICAgICAgICAgQVBSX0FSUkFZX0lEWCh0ZW1wLCB0 YXJnbGVuLCBzdm5fcmV2bnVtX3QpID0gCisgICAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChQ eUludF9DaGVjayhvKSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBBUFJfQVJSQVlfSURYKHRl bXAsIHRhcmdsZW4sIHN2bl9yZXZudW1fdCkgPQogICAgICAgICAgICAgICAoc3ZuX3Jldm51bV90 KVB5SW50X0FzTG9uZyhvKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKKyAgICAgICAgICB9 CisgICAgICAgIGVsc2UKKyAgICAgICAgICB7CiAgICAgICAgICAgICBQeV9ERUNSRUYobyk7CiAg ICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAibm90IGFuIGludGVn ZXIgdHlwZSIpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KKyAgICAgICAg ICB9CiAgICAgICAgIFB5X0RFQ1JFRihvKTsKICAgICB9CiAgICAgcmV0dXJuIHRlbXA7CkBAIC03 MzcsMTMgKzg1NywxNCBAQAogICAgIFB5T2JqZWN0ICpsaXN0ID0gUHlMaXN0X05ldyhhcnJheS0+ bmVsdHMpOwogICAgIGludCBpOwogCi0gICAgZm9yIChpID0gMDsgaSA8IGFycmF5LT5uZWx0czsg KytpKSB7Ci0gICAgICAgIFB5T2JqZWN0ICpvYiA9IAorICAgIGZvciAoaSA9IDA7IGkgPCBhcnJh eS0+bmVsdHM7ICsraSkKKyAgICAgIHsKKyAgICAgICAgUHlPYmplY3QgKm9iID0KICAgICAgICAg ICBQeVN0cmluZ19Gcm9tU3RyaW5nKEFQUl9BUlJBWV9JRFgoYXJyYXksIGksIGNvbnN0IGNoYXIg KikpOwogICAgICAgICBpZiAob2IgPT0gTlVMTCkKICAgICAgICAgICBnb3RvIGVycm9yOwogICAg ICAgICBQeUxpc3RfU0VUX0lURU0obGlzdCwgaSwgb2IpOwotICAgIH0KKyAgICAgIH0KICAgICBy ZXR1cm4gbGlzdDsKIAogICBlcnJvcjoKQEAgLTc1NywxMyArODc4LDE0IEBACiAgICAgUHlPYmpl Y3QgKmxpc3QgPSBQeUxpc3RfTmV3KGFycmF5LT5uZWx0cyk7CiAgICAgaW50IGk7CiAKLSAgICBm b3IgKGkgPSAwOyBpIDwgYXJyYXktPm5lbHRzOyArK2kpIHsKLSAgICAgICAgUHlPYmplY3QgKm9i IAorICAgIGZvciAoaSA9IDA7IGkgPCBhcnJheS0+bmVsdHM7ICsraSkKKyAgICAgIHsKKyAgICAg ICAgUHlPYmplY3QgKm9iCiAgICAgICAgICAgPSBQeUludF9Gcm9tTG9uZyhBUFJfQVJSQVlfSURY KGFycmF5LCBpLCBzdm5fcmV2bnVtX3QpKTsKICAgICAgICAgaWYgKG9iID09IE5VTEwpCiAgICAg ICAgICAgZ290byBlcnJvcjsKICAgICAgICAgUHlMaXN0X1NFVF9JVEVNKGxpc3QsIGksIG9iKTsK LSAgICB9CisgICAgICB9CiAgICAgcmV0dXJuIGxpc3Q7CiAKICAgZXJyb3I6CkBAIC03NzgsMTMg KzkwMCwxNCBAQAogICAgIFB5T2JqZWN0ICpsaXN0ID0gUHlMaXN0X05ldyhhcnJheS0+bmVsdHMp OwogICAgIGludCBpOwogCi0gICAgZm9yIChpID0gMDsgaSA8IGFycmF5LT5uZWx0czsgKytpKSB7 CisgICAgZm9yIChpID0gMDsgaSA8IGFycmF5LT5uZWx0czsgKytpKQorICAgICAgewogICAgICAg ICBQeU9iamVjdCAqb2IgPSBjb252ZXJ0X3N2bl9jbGllbnRfY29tbWl0X2l0ZW1fdAogICAgICAg ICAgIChBUFJfQVJSQVlfSURYKGFycmF5LCBpLCBzdm5fY2xpZW50X2NvbW1pdF9pdGVtX3QgKiks IE5VTEwpOwogICAgICAgICBpZiAob2IgPT0gTlVMTCkKICAgICAgICAgICBnb3RvIGVycm9yOwog ICAgICAgICBQeUxpc3RfU0VUX0lURU0obGlzdCwgaSwgb2IpOwotICAgIH0KKyAgICAgIH0KICAg ICByZXR1cm4gbGlzdDsKIAogICBlcnJvcjoKQEAgLTgyOSw4ICs5NTIsOCBAQAogICBQeU9iamVj dCAqYmF0b247ICAgICAgLyogdGhlIGRpci9maWxlIGJhdG9uIChvciBOVUxMIGZvciBlZGl0IGJh dG9uKSAqLwogfSBpdGVtX2JhdG9uOwogCi1zdGF0aWMgaXRlbV9iYXRvbiAqbWFrZV9iYXRvbihh cHJfcG9vbF90ICpwb29sLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0 ICplZGl0b3IsIAorc3RhdGljIGl0ZW1fYmF0b24gKm1ha2VfYmF0b24oYXByX3Bvb2xfdCAqcG9v bCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICplZGl0b3IsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqYmF0b24pCiB7CiAgIGl0ZW1fYmF0 b24gKm5ld2IgPSBhcHJfcGFsbG9jKHBvb2wsIHNpemVvZigqbmV3YikpOwpAQCAtODQ2LDcgKzk2 OSw3IEBACiAgIHJldHVybiBuZXdiOwogfQogCi1zdGF0aWMgc3ZuX2Vycm9yX3QgKmNsb3NlX2Jh dG9uKHZvaWQgKmJhdG9uLCAKK3N0YXRpYyBzdm5fZXJyb3JfdCAqY2xvc2VfYmF0b24odm9pZCAq YmF0b24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm1ldGhv ZCkKIHsKICAgaXRlbV9iYXRvbiAqaWIgPSBiYXRvbjsKQEAgLTkwNyw3ICsxMDMwLDcgQEAKICAg LyogdGhlcmUgaXMgbm8gcmV0dXJuIHZhbHVlLCBzbyBqdXN0IHRvc3MgdGhpcyBvYmplY3QgKHBy b2JhYmx5IFB5X05vbmUpICovCiAgIFB5X0RFQ1JFRihyZXN1bHQpOwogICBlcnIgPSBTVk5fTk9f RVJST1I7Ci0gIAorCiAgZmluaXNoZWQ6CiAgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygp OwogICByZXR1cm4gZXJyOwpAQCAtMTAyOCw3ICsxMTUxLDcgQEAKICAgLyogbWFrZV9iYXRvbiB0 YWtlcyBvdXIgJ3Jlc3VsdCcgcmVmZXJlbmNlICovCiAgICpjaGlsZF9iYXRvbiA9IG1ha2VfYmF0 b24oZGlyX3Bvb2wsIGliLT5lZGl0b3IsIHJlc3VsdCk7CiAgIGVyciA9IFNWTl9OT19FUlJPUjsK LSAgCisKICBmaW5pc2hlZDoKICAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7CiAgIHJl dHVybiBlcnI7CkBAIC0xMDQ4LDcgKzExNzEsNyBAQAogICAvKiAjIyMgcHl0aG9uIGRvZXNuJ3Qg aGF2ZSAnY29uc3QnIG9uIHRoZSBtZXRob2QgbmFtZSBhbmQgZm9ybWF0ICovCiAgIGlmICgocmVz dWx0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChpYi0+ZWRpdG9yLCAoY2hhciAqKSJjaGFuZ2VfZGly X3Byb3AiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikiT3Nz I08mIiwgaWItPmJhdG9uLCBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdmFsdWUgPyB2YWx1ZS0+ZGF0YSA6IE5VTEwsIAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdmFsdWUgPyB2YWx1ZS0+ZGF0YSA6IE5VTEwsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB2YWx1ZSA/IHZhbHVlLT5sZW4gOiAwLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9vYl9wb29sLCBwb29sKSkgPT0gTlVMTCkKICAg ICB7CkBAIC0xMTEzLDcgKzEyMzYsNyBAQAogICBpdGVtX2JhdG9uICppYiA9IHBhcmVudF9iYXRv bjsKICAgUHlPYmplY3QgKnJlc3VsdDsKICAgc3ZuX2Vycm9yX3QgKmVycjsKLSAgCisKICAgc3Zu X3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7CiAKICAgLyogIyMjIHB5dGhvbiBkb2Vzbid0IGhh dmUgJ2NvbnN0JyBvbiB0aGUgbWV0aG9kIG5hbWUgYW5kIGZvcm1hdCAqLwpAQCAtMTE1OSw3ICsx MjgyLDcgQEAKICAgICB7CiAgICAgICAvKiBpbnZva2UgdGhlIGhhbmRsZXIgd2l0aCB0aGUgd2lu ZG93ICovCiAgICAgICAvKiAjIyMgcHl0aG9uIGRvZXNuJ3QgaGF2ZSAnY29uc3QnIG9uIHRoZSBm b3JtYXQgKi8KLSAgICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihoYW5kbGVyLCAo Y2hhciAqKSJPJiIsIAorICAgICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGhhbmRs ZXIsIChjaGFyICopIk8mIiwKICAgICAgICAgbWFrZV9vYl90eGRlbHRhX3dpbmRvdywgd2luZG93 KTsKICAgICB9CiAKQEAgLTExNzgsNyArMTMwMSw3IEBACiAgIHJldHVybiBlcnI7CiB9CiAKLXN0 YXRpYyBzdm5fZXJyb3JfdCAqYXBwbHlfdGV4dGRlbHRhKHZvaWQgKmZpbGVfYmF0b24sIAorc3Rh dGljIHN2bl9lcnJvcl90ICphcHBseV90ZXh0ZGVsdGEodm9pZCAqZmlsZV9iYXRvbiwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJhc2VfY2hlY2tzdW0s CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX3R4ZGVsdGFfd2luZG93X2hh bmRsZXJfdCAqaGFuZGxlciwKQEAgLTEyMzgsNyArMTM2MSw3IEBACiAgIC8qICMjIyBweXRob24g ZG9lc24ndCBoYXZlICdjb25zdCcgb24gdGhlIG1ldGhvZCBuYW1lIGFuZCBmb3JtYXQgKi8KICAg aWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKGliLT5lZGl0b3IsIChjaGFyICopImNo YW5nZV9maWxlX3Byb3AiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNo YXIgKikiT3NzI08mIiwgaWItPmJhdG9uLCBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdmFsdWUgPyB2YWx1ZS0+ZGF0YSA6IE5VTEwsIAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPyB2YWx1ZS0+ZGF0YSA6IE5VTEwsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA/IHZhbHVlLT5sZW4gOiAwLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9vYl9wb29sLCBwb29sKSkgPT0g TlVMTCkKICAgICB7CkBAIC0xMjQ5LDcgKzEzNzIsNyBAQAogICAvKiB0aGVyZSBpcyBubyByZXR1 cm4gdmFsdWUsIHNvIGp1c3QgdG9zcyB0aGlzIG9iamVjdCAocHJvYmFibHkgUHlfTm9uZSkgKi8K ICAgUHlfREVDUkVGKHJlc3VsdCk7CiAgIGVyciA9IFNWTl9OT19FUlJPUjsKLSAgCisKICBmaW5p c2hlZDoKICAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7CiAgIHJldHVybiBlcnI7CkBA IC0xNDQ2LDE5ICsxNTY5LDMwIEBACiAgIHJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyBzdm5fZXJy b3JfdCAqCitjbG9zZV9oYW5kbGVyX3B5aW8odm9pZCAqYmF0b24pCit7CisgIFB5T2JqZWN0ICpw eV9pbyA9IGJhdG9uOworICBQeV9ERUNSRUYocHlfaW8pOworICByZXR1cm4gU1ZOX05PX0VSUk9S OworfQorCisKIHN2bl9zdHJlYW1fdCAqCiBzdm5fc3dpZ19weV9tYWtlX3N0cmVhbSAoUHlPYmpl Y3QgKnB5X2lvLCBhcHJfcG9vbF90ICpwb29sKQogewogICBzdm5fc3RyZWFtX3QgKnN0cmVhbTsK IAogICAvKiBCb3Jyb3cgdGhlIGNhbGxlcidzIHJlZmVyZW5jZSB0byBweV9pbyAtIHRoaXMgaXMg c2FmZSBvbmx5IGJlY2F1c2UgdGhlCi0gICAqIGNhbGxlciBtdXN0IGhhdmUgYSByZWZlcmVuY2Ug aW4gb3JkZXIgdG8gcGFzcyB0aGUgb2JqZWN0IGludG8gdGhlIAorICAgKiBjYWxsZXIgbXVzdCBo YXZlIGEgcmVmZXJlbmNlIGluIG9yZGVyIHRvIHBhc3MgdGhlIG9iamVjdCBpbnRvIHRoZQogICAg KiBiaW5kaW5ncywgYW5kIHdlIHdpbGwgYmUgZmluaXNoZWQgd2l0aCB0aGUgcHlfaW8gb2JqZWN0 IGJlZm9yZSB3ZSByZXR1cm4KICAgICogdG8gcHl0aG9uLiBJLmUuIERPIE5PVCBTVE9SRSBBV0FZ IFRIRSBSRVNVTFRJTkcgc3ZuX3N0cmVhbV90ICogZm9yIHVzZQogICAgKiBvdmVyIG11bHRpcGxl IGNhbGxzIGludG8gdGhlIGJpbmRpbmdzLiAqLworICBQeV9JTkNSRUYocHlfaW8pOwogICBzdHJl YW0gPSBzdm5fc3RyZWFtX2NyZWF0ZSAocHlfaW8sIHBvb2wpOwogICBzdm5fc3RyZWFtX3NldF9y ZWFkIChzdHJlYW0sIHJlYWRfaGFuZGxlcl9weWlvKTsKICAgc3ZuX3N0cmVhbV9zZXRfd3JpdGUg KHN0cmVhbSwgd3JpdGVfaGFuZGxlcl9weWlvKTsKKyAgc3ZuX3N0cmVhbV9zZXRfY2xvc2UgKHN0 cmVhbSwgY2xvc2VfaGFuZGxlcl9weWlvKTsKIAogICByZXR1cm4gc3RyZWFtOwogfQpAQCAtMTQ4 MSwxMSArMTYxNSwxMSBAQAogICAgIHJldHVybjsKIAogICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5 X2xvY2soKTsKLSAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oZnVuY3Rpb24s IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSIoc2lpc2lp aSkiLCAKKyAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oZnVuY3Rpb24sCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopIihzaWlzaWlpKSIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGgsIGFjdGlvbiwga2lu ZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWltZV90eXBlLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50X3N0YXRlLCBwcm9wX3N0 YXRlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudF9zdGF0 ZSwgcHJvcF9zdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV2 aXNpb24pKSA9PSBOVUxMKQogICAgIHsKICAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9l cnJvcigpOwpAQCAtMTUwNiw2ICsxNjQwLDQxIEBACiB9CiAKIAordm9pZCBzdm5fc3dpZ19weV9u b3RpZnlfZnVuYzIodm9pZCAqYmF0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBzdm5fd2Nfbm90aWZ5X3QgKm5vdGlmeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGFwcl9wb29sX3QgKnBvb2wpCit7CisgIFB5T2JqZWN0ICpmdW5jdGlvbiA9IGJhdG9uOwor ICBQeU9iamVjdCAqcmVzdWx0OworICBzdm5fZXJyb3JfdCAqZXJyID0gU1ZOX05PX0VSUk9SOwor CisgIGlmIChmdW5jdGlvbiA9PSBOVUxMIHx8IGZ1bmN0aW9uID09IFB5X05vbmUpCisgICAgcmV0 dXJuOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisgIGlmICgocmVzdWx0 ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGZ1bmN0aW9uLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoY2hhciAqKSIoTyZPJikiLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBtYWtlX29iX3djX25vdGlmeSwgbm90aWZ5LAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQor ICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgIH0KKyAg ZWxzZQorICAgIHsKKyAgICAgIC8qIFRoZSBjYWxsYmFjayBzaG91bGRuJ3QgYmUgcmV0dXJuaW5n IGFueXRoaW5nLiAqLworICAgICAgaWYgKHJlc3VsdCAhPSBQeV9Ob25lKQorICAgICAgICBlcnIg PSBjYWxsYmFja19iYWRfcmV0dXJuX2Vycm9yKCJOb3QgTm9uZSIpOworICAgICAgUHlfREVDUkVG KHJlc3VsdCk7CisgICAgfQorCisgIC8qIE91ciBlcnJvciBoYXMgbm8gcGxhY2UgdG8gZ28uIDot KCAqLworICBpZiAoZXJyKQorICAgIHN2bl9lcnJvcl9jbGVhcihlcnIpOworCisgIHN2bl9zd2ln X3B5X3JlbGVhc2VfcHlfbG9jaygpOworfQorCiB2b2lkIHN2bl9zd2lnX3B5X3N0YXR1c19mdW5j KHZvaWQgKmJhdG9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpw YXRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdm5fd2Nfc3RhdHVzX3QgKnN0YXR1 cykKQEAgLTE1MzQsNyArMTcwMyw3IEBACiAgIC8qIE91ciBlcnJvciBoYXMgbm8gcGxhY2UgdG8g Z28uIDotKCAqLwogICBpZiAoZXJyKQogICAgIHN2bl9lcnJvcl9jbGVhcihlcnIpOwotICAgIAor CiAgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOwogfQogCkBAIC0xNTg3LDcgKzE3NTYs NyBAQAogICAgIHJldHVybiBTVk5fTk9fRVJST1I7CiAKICAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9w eV9sb2NrKCk7Ci0gIAorCiAgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGZ1 bmN0aW9uLCAoY2hhciAqKSJPJk8mIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbWFrZV9vYl9sb2NrLCBsb2NrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBtYWtlX29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQpAQCAtMTYzNyw3ICsxODA2LDcg QEAKICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICB9CiAKLSAgaWYgKChyZXN1bHQgPSBQ eU9iamVjdF9DYWxsRnVuY3Rpb24oZnVuY3Rpb24sIAorICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0 X0NhbGxGdW5jdGlvbihmdW5jdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGNoYXIgKikiT08mIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY210X2l0ZW1zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtl X29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQpAQCAtMTY1NSw3ICsxODI0LDcgQEAKICAgICAgICps b2dfbXNnID0gTlVMTDsKICAgICAgIGVyciA9IFNWTl9OT19FUlJPUjsKICAgICB9Ci0gIGVsc2Ug aWYgKFB5U3RyaW5nX0NoZWNrKHJlc3VsdCkpIAorICBlbHNlIGlmIChQeVN0cmluZ19DaGVjayhy ZXN1bHQpKQogICAgIHsKICAgICAgICpsb2dfbXNnID0gYXByX3BzdHJkdXAocG9vbCwgUHlTdHJp bmdfQVNfU1RSSU5HKHJlc3VsdCkpOwogICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CkBAIC0xNjkw LDIxICsxODU5LDIzIEBACiAgICAgcmV0dXJuIFNWTl9OT19FUlJPUjsKIAogICBzdm5fc3dpZ19w eV9hY3F1aXJlX3B5X2xvY2soKTsKLSAgCisKICAgcHlfcG9vbCA9IG1ha2Vfb2JfcG9vbChwb29s KTsKLSAgaWYgKHB5X3Bvb2wgPT0gTlVMTCkgewotICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlv bl9lcnJvcigpOwotICAgIGdvdG8gZmluaXNoZWQ7Ci0gIH0KKyAgaWYgKHB5X3Bvb2wgPT0gTlVM TCkKKyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICAg IGdvdG8gZmluaXNoZWQ7CisgICAgfQogICBweV9yb290ID0gbWFrZV9vYl9mc19yb290KHJvb3Qs IHB5X3Bvb2wpOwotICBpZiAocHlfcm9vdCA9PSBOVUxMKSB7Ci0gICAgUHlfREVDUkVGKHB5X3Bv b2wpOwotICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOwotICAgIGdvdG8gZmlu aXNoZWQ7IAotICB9CisgIGlmIChweV9yb290ID09IE5VTEwpCisgICAgeworICAgICAgUHlfREVD UkVGKHB5X3Bvb2wpOworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7Cisg ICAgICBnb3RvIGZpbmlzaGVkOworICAgIH0KIAotICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0Nh bGxGdW5jdGlvbihmdW5jdGlvbiwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChjaGFyICopIk9zTyIsIAorICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlv bihmdW5jdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIg KikiT3NPIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHlfcm9vdCwg cGF0aCwgcHlfcG9vbCkpID09IE5VTEwpCiAgICAgewogICAgICAgZXJyID0gY2FsbGJhY2tfZXhj ZXB0aW9uX2Vycm9yKCk7CkBAIC0xNzQwLDkgKzE5MTEsOSBAQAogICAgIHJldHVybiBTVk5fTk9f RVJST1I7CiAKICAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7Ci0gIGlmICgocmVzdWx0 ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGZ1bmN0aW9uLCAKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGNoYXIgKikic2xPJiIsIAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBwYXRoLCByZXZpc2lvbiwgCisgIGlmICgocmVzdWx0ID0gUHlPYmpl Y3RfQ2FsbEZ1bmN0aW9uKGZ1bmN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoY2hhciAqKSJzbE8mIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcGF0aCwgcmV2aXNpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG1ha2Vfb2JfcG9vbCwgcG9vbCkpID09IE5VTEwpCiAgICAgewogICAgICAgZXJyID0gY2Fs bGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7CkBAIC0xNzcwLDE3ICsxOTQxLDE4IEBACiAgIFB5T2Jq ZWN0ICpyZXN1bHQsICpweV9wb29sOwogICBQeU9iamVjdCAqY2hwYXRoczsKICAgc3ZuX2Vycm9y X3QgKmVyciA9IFNWTl9OT19FUlJPUjsKLSAKKwogICBpZiAoKHJlY2VpdmVyID09IE5VTEwpIHx8 IChyZWNlaXZlciA9PSBQeV9Ob25lKSkKICAgICByZXR1cm4gU1ZOX05PX0VSUk9SOwogCiAgIHN2 bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOwogCiAgIHB5X3Bvb2wgPSBtYWtlX29iX3Bvb2wo cG9vbCk7Ci0gIGlmIChweV9wb29sID09IE5VTEwpIHsKLSAgICBlcnIgPSBjYWxsYmFja19leGNl cHRpb25fZXJyb3IoKTsKLSAgICBnb3RvIGZpbmlzaGVkOwotICB9CisgIGlmIChweV9wb29sID09 IE5VTEwpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7Cisg ICAgICBnb3RvIGZpbmlzaGVkOworICAgIH0KIAogICBpZiAoY2hhbmdlZF9wYXRocykKICAgICB7 CkBAIC0xNzkzLDkgKzE5NjUsOSBAQAogICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgIH0K IAotICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihyZWNlaXZlciwgCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopIk9sc3NzTyIsIAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHBhdGhzLCByZXYsIGF1dGhvciwg ZGF0ZSwgbXNnLCAKKyAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24ocmVjZWl2 ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopIk9sc3Nz TyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNocGF0aHMsIHJldiwg YXV0aG9yLCBkYXRlLCBtc2csCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHB5X3Bvb2wpKSA9PSBOVUxMKQogICAgIHsKICAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlv bl9lcnJvcigpOwpAQCAtMTgxNCw2ICsxOTg2LDM4IEBACiAgIHJldHVybiBlcnI7CiB9CiAKK3N2 bl9lcnJvcl90ICpzdm5fc3dpZ19weV9pbmZvX3JlY2VpdmVyX2Z1bmModm9pZCAqYmF0b24sCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBh dGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN2 bl9pbmZvX3QgKmluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGFwcl9wb29sX3QgKnBvb2wpCit7CisgIFB5T2JqZWN0ICpyZWNlaXZlciA9IGJhdG9uOwor ICBQeU9iamVjdCAqcmVzdWx0OworICBzdm5fZXJyb3JfdCAqZXJyID0gU1ZOX05PX0VSUk9SOwor CisgIGlmICgocmVjZWl2ZXIgPT0gTlVMTCkgfHwgKHJlY2VpdmVyID09IFB5X05vbmUpKQorICAg IHJldHVybiBTVk5fTk9fRVJST1I7CisKKyAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7 CisKKyAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24ocmVjZWl2ZXIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopInNPJk8mIiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCwgbWFrZV9vYl9pbmZvLCBpbmZv LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX29iX3Bvb2wsIHBv b2wpKSA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJv cigpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGlmIChyZXN1bHQgIT0gUHlfTm9uZSkK KyAgICAgICAgZXJyID0gY2FsbGJhY2tfYmFkX3JldHVybl9lcnJvcigiTm90IE5vbmUiKTsKKyAg ICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgIH0KKworICBzdm5fc3dpZ19weV9yZWxlYXNlX3B5 X2xvY2soKTsKKworICByZXR1cm4gZXJyOworfQogCiBzdm5fZXJyb3JfdCAqc3ZuX3N3aWdfcHlf Y2xpZW50X2JsYW1lX3JlY2VpdmVyX2Z1bmModm9pZCAqYmF0b24sCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX2ludDY0X3QgbGluZV9ubywK QEAgLTE4MjYsMTYgKzIwMzAsMTYgQEAKICAgUHlPYmplY3QgKnJlY2VpdmVyID0gYmF0b247CiAg IFB5T2JqZWN0ICpyZXN1bHQ7CiAgIHN2bl9lcnJvcl90ICplcnIgPSBTVk5fTk9fRVJST1I7Ci0g CisKICAgaWYgKChyZWNlaXZlciA9PSBOVUxMKSB8fCAocmVjZWl2ZXIgPT0gUHlfTm9uZSkpCiAg ICAgcmV0dXJuIFNWTl9OT19FUlJPUjsKIAogICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xvY2so KTsKIAotICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihyZWNlaXZlciwgCisg IGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKHJlY2VpdmVyLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKQotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoU1ZOX0FQUl9JTlQ2NF9UX1BZQ0ZNVCAibHNzc08mIiksIAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lX25vLCByZXZpc2lvbiwg YXV0aG9yLCBkYXRlLCBsaW5lLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKFNWTl9BUFJfSU5UNjRfVF9QWUNGTVQgImxzc3NPJiIpLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBsaW5lX25vLCByZXZpc2lvbiwgYXV0aG9yLCBkYXRlLCBsaW5l LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX29iX3Bvb2wsIHBv b2wpKSA9PSBOVUxMKQogICAgIHsKICAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJv cigpOwpAQCAtMTg3MCw5ICsyMDc0LDkgQEAKIAogICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xv Y2soKTsKIAotICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihmdW5jdGlvbiwg Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopInNzbE8mIiwg Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWxtLCB1c2VybmFtZSwg bWF5X3NhdmUsIAorICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihmdW5jdGlv biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikic3NsTyYi LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFsbSwgdXNlcm5hbWUs IG1heV9zYXZlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX29i X3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQogICAgIHsKICAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2Vw dGlvbl9lcnJvcigpOwpAQCAtMTg4Miw3ICsyMDg2LDcgQEAKICAgICAgIGlmIChyZXN1bHQgIT0g UHlfTm9uZSkKICAgICAgICAgewogICAgICAgICAgIHN2bl9hdXRoX2NyZWRfc2ltcGxlX3QgKnRt cF9jcmVkcyA9IE5VTEw7Ci0gICAgICAgICAgaWYgKHN2bl9zd2lnX0NvbnZlcnRQdHJTdHJpbmco cmVzdWx0LCAodm9pZCAqKikmdG1wX2NyZWRzLCAKKyAgICAgICAgICBpZiAoc3ZuX3N3aWdfQ29u dmVydFB0clN0cmluZyhyZXN1bHQsICh2b2lkICoqKSZ0bXBfY3JlZHMsCiAgICAgICAgICAgICAg ICAgInN2bl9hdXRoX2NyZWRfc2ltcGxlX3QgKiIpKQogICAgICAgICAgICAgewogICAgICAgICAg ICAgICBlcnIgPSB0eXBlX2NvbnZlcnNpb25fZXJyb3IoInN2bl9hdXRoX2NyZWRfc2ltcGxlX3Qg KiIpOwpAQCAtMTkyMSw5ICsyMTI1LDkgQEAKIAogICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xv Y2soKTsKIAotICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihmdW5jdGlvbiwg Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopInNsTyYiLCAK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhbG0sIG1heV9zYXZlLCAK KyAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oZnVuY3Rpb24sCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopInNsTyYiLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFsbSwgbWF5X3NhdmUsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vfb2JfcG9vbCwgcG9vbCkpID09IE5VTEwp CiAgICAgewogICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7CkBAIC0xOTMz LDcgKzIxMzcsNyBAQAogICAgICAgaWYgKHJlc3VsdCAhPSBQeV9Ob25lKQogICAgICAgICB7CiAg ICAgICAgICAgc3ZuX2F1dGhfY3JlZF91c2VybmFtZV90ICp0bXBfY3JlZHMgPSBOVUxMOwotICAg ICAgICAgIGlmIChzdm5fc3dpZ19Db252ZXJ0UHRyU3RyaW5nKHJlc3VsdCwgKHZvaWQgKiopJnRt cF9jcmVkcywgCisgICAgICAgICAgaWYgKHN2bl9zd2lnX0NvbnZlcnRQdHJTdHJpbmcocmVzdWx0 LCAodm9pZCAqKikmdG1wX2NyZWRzLAogICAgICAgICAgICAgICAgICJzdm5fYXV0aF9jcmVkX3Vz ZXJuYW1lX3QgKiIpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICBlcnIgPSB0eXBlX2Nv bnZlcnNpb25fZXJyb3IoInN2bl9hdXRoX2NyZWRfdXNlcm5hbWVfdCAqIik7CkBAIC0xOTc0LDcg KzIxNzgsNyBAQAogCiAgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOwogCi0gIGlmICgo cmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGZ1bmN0aW9uLCAoY2hhciAqKSJzbE8mbE8m IiwgCisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGZ1bmN0aW9uLCAoY2hh ciAqKSJzbE8mbE8mIiwKICAgICAgICAgICAgICAgICAgIHJlYWxtLCBmYWlsdXJlcywgbWFrZV9v Yl9hdXRoX3NzbF9zZXJ2ZXJfY2VydF9pbmZvLAogICAgICAgICAgICAgICAgICAgY2VydF9pbmZv LCBtYXlfc2F2ZSwgbWFrZV9vYl9wb29sLCBwb29sKSkgPT0gTlVMTCkKICAgICB7CkBAIC0xOTg2 LDcgKzIxOTAsNyBAQAogICAgICAgICB7CiAgICAgICAgICAgc3ZuX2F1dGhfY3JlZF9zc2xfc2Vy dmVyX3RydXN0X3QgKnRtcF9jcmVkcyA9IE5VTEw7CiAgICAgICAgICAgaWYgKHN2bl9zd2lnX0Nv bnZlcnRQdHJTdHJpbmcKLSAgICAgICAgICAgICAgKHJlc3VsdCwgKHZvaWQgKiopJnRtcF9jcmVk cywgCisgICAgICAgICAgICAgIChyZXN1bHQsICh2b2lkICoqKSZ0bXBfY3JlZHMsCiAgICAgICAg ICAgICAgICAic3ZuX2F1dGhfY3JlZF9zc2xfc2VydmVyX3RydXN0X3QgKiIpKQogICAgICAgICAg ICAgewogICAgICAgICAgICAgICBlcnIgPSB0eXBlX2NvbnZlcnNpb25fZXJyb3IKQEAgLTIwMjQs OSArMjIyOCw5IEBACiAKICAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7CiAKLSAgaWYg KChyZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oZnVuY3Rpb24sIAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJzbE8mIiwgCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWxtLCBtYXlfc2F2ZSwgCisgIGlmICgocmVzdWx0 ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGZ1bmN0aW9uLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoY2hhciAqKSJzbE8mIiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcmVhbG0sIG1heV9zYXZlLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBtYWtlX29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQogICAgIHsKICAgICAg IGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOwpAQCAtMjAzNyw3ICsyMjQxLDcgQEAK ICAgICAgICAgewogICAgICAgICAgIHN2bl9hdXRoX2NyZWRfc3NsX2NsaWVudF9jZXJ0X3QgKnRt cF9jcmVkcyA9IE5VTEw7CiAgICAgICAgICAgaWYgKHN2bl9zd2lnX0NvbnZlcnRQdHJTdHJpbmcK LSAgICAgICAgICAgICAgKHJlc3VsdCwgKHZvaWQgKiopJnRtcF9jcmVkcywgCisgICAgICAgICAg ICAgIChyZXN1bHQsICh2b2lkICoqKSZ0bXBfY3JlZHMsCiAgICAgICAgICAgICAgICAic3ZuX2F1 dGhfY3JlZF9zc2xfY2xpZW50X2NlcnRfdCAqIikpCiAgICAgICAgICAgICB7CiAgICAgICAgICAg ICAgIGVyciA9IHR5cGVfY29udmVyc2lvbl9lcnJvcigic3ZuX2F1dGhfY3JlZF9zc2xfY2xpZW50 X2NlcnRfdCAqIik7CkBAIC0yMDc1LDkgKzIyNzksOSBAQAogCiAgIHN2bl9zd2lnX3B5X2FjcXVp cmVfcHlfbG9jaygpOwogCi0gIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGZ1 bmN0aW9uLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKiki c2xPJiIsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFsbSwgbWF5 X3NhdmUsIAorICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihmdW5jdGlvbiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikic2xPJiIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWxtLCBtYXlfc2F2ZSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9vYl9wb29sLCBwb29sKSkg PT0gTlVMTCkKICAgICB7CiAgICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsK QEAgLTIwODgsNyArMjI5Miw3IEBACiAgICAgICAgIHsKICAgICAgICAgICBzdm5fYXV0aF9jcmVk X3NzbF9jbGllbnRfY2VydF9wd190ICp0bXBfY3JlZHMgPSBOVUxMOwogICAgICAgICAgIGlmIChz dm5fc3dpZ19Db252ZXJ0UHRyU3RyaW5nCi0gICAgICAgICAgICAgIChyZXN1bHQsICh2b2lkICoq KSZ0bXBfY3JlZHMsIAorICAgICAgICAgICAgICAocmVzdWx0LCAodm9pZCAqKikmdG1wX2NyZWRz LAogICAgICAgICAgICAgICAgInN2bl9hdXRoX2NyZWRfc3NsX2NsaWVudF9jZXJ0X3B3X3QgKiIp KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICBlcnIgPSB0eXBlX2NvbnZlcnNpb25fZXJy b3IKQEAgLTIxMDgsMyArMjMxMiwzNzcgQEAKICAgKmNyZWQgPSBjcmVkczsKICAgcmV0dXJuIGVy cjsKIH0KKworLyogc3ZuX3JhX2NhbGxiYWNrc190ICovCitzdGF0aWMgc3ZuX2Vycm9yX3QgKgor cmFfY2FsbGJhY2tzX29wZW5fdG1wX2ZpbGUoYXByX2ZpbGVfdCAqKmZwLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgdm9pZCAqY2FsbGJhY2tfYmF0b24sCisgICAgICAgICAgICAgICAgICAg ICAgICAgICBhcHJfcG9vbF90ICpwb29sKQoreworICBQeU9iamVjdCAqY2FsbGJhY2tzID0gKFB5 T2JqZWN0ICopY2FsbGJhY2tfYmF0b247CisgIFB5T2JqZWN0ICpyZXN1bHQ7CisgIHN2bl9lcnJv cl90ICplcnIgPSBTVk5fTk9fRVJST1I7CisKKyAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2Nr KCk7CisKKyAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKGNhbGxiYWNrcywgCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3Blbl90bXBfZmlsZSIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJPJiIsIAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9vYl9wb29sLCBwb29sKSkgPT0gTlVMTCkK KyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICB9Cisg IGVsc2UgaWYgKHJlc3VsdCA9PSBQeV9Ob25lKQorICAgIHsKKyAgICAgICpmcCA9IE5VTEw7Cisg ICAgfQorICBlbHNlIAorICAgIHsKKyAgICAgICpmcCA9IHN2bl9zd2lnX3B5X21ha2VfZmlsZShy ZXN1bHQsIHBvb2wpOworICAgICAgaWYgKCpmcCA9PSBOVUxMKQorICAgICAgIHsKKyAgICAgIAkg IGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgICAgIH0KKyAgICB9CisKKyAg UHlfWERFQ1JFRihyZXN1bHQpOworICBzdm5fc3dpZ19weV9yZWxlYXNlX3B5X2xvY2soKTsKKyAg cmV0dXJuIGVycjsKK30KKwordm9pZAorc3ZuX3N3aWdfcHlfc2V0dXBfcmFfY2FsbGJhY2tzKHN2 bl9yYV9jYWxsYmFja3MyX3QgKipjYWxsYmFja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdm9pZCAqKmJhdG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2Jq ZWN0ICpweV9jYWxsYmFja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bv b2xfdCAqcG9vbCkKK3sKKyAgc3ZuX2Vycm9yX3QgKmVyciA9IHN2bl9yYV9jcmVhdGVfY2FsbGJh Y2tzKGNhbGxiYWNrcywgcG9vbCk7CisgIFB5T2JqZWN0ICpweV9hdXRoX2JhdG9uOworCisgIGlm IChlcnIpCisgICAgeworICAgICAgc3ZuX3N3aWdfcHlfc3ZuX2V4Y2VwdGlvbihlcnIpOworICAg ICAgcmV0dXJuOworICAgIH0KKworICAoKmNhbGxiYWNrcyktPm9wZW5fdG1wX2ZpbGUgPSByYV9j YWxsYmFja3Nfb3Blbl90bXBfZmlsZTsKKworICBweV9hdXRoX2JhdG9uID0gUHlPYmplY3RfR2V0 QXR0clN0cmluZyhweV9jYWxsYmFja3MsICJhdXRoX2JhdG9uIik7CisKKyAgaWYgKHN2bl9zd2ln X0NvbnZlcnRQdHJTdHJpbmcocHlfYXV0aF9iYXRvbiwgCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICh2b2lkICoqKSYoKCpjYWxsYmFja3MpLT5hdXRoX2JhdG9uKSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgInN2bl9hdXRoX2JhdG9uX3QgKiIpKSAKKyAgICB7Cisg ICAgICBlcnIgPSB0eXBlX2NvbnZlcnNpb25fZXJyb3IoInN2bl9hdXRoX2JhdG9uX3QgKiIpOwor ICAgICAgc3ZuX3N3aWdfcHlfc3ZuX2V4Y2VwdGlvbihlcnIpOworICAgICAgUHlfREVDUkVGKHB5 X2F1dGhfYmF0b24pOworICAgICAgcmV0dXJuOworICAgIH0KKyAgCisgIFB5X1hERUNSRUYocHlf YXV0aF9iYXRvbik7CisKKyAgKmJhdG9uID0gcHlfY2FsbGJhY2tzOworfQorCitzdm5fZXJyb3Jf dCAqc3ZuX3N3aWdfcHlfY29tbWl0X2NhbGxiYWNrMihjb25zdCBzdm5fY29tbWl0X2luZm9fdCAq Y29tbWl0X2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2 b2lkICpiYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFw cl9wb29sX3QgKnBvb2wpCit7CisgIFB5T2JqZWN0ICpyZWNlaXZlciA9IGJhdG9uOworICBQeU9i amVjdCAqcmVzdWx0OworICBzdm5fZXJyb3JfdCAqZXJyID0gU1ZOX05PX0VSUk9SOworCisgIGlm ICgocmVjZWl2ZXIgPT0gTlVMTCkgfHwgKHJlY2VpdmVyID09IFB5X05vbmUpKQorICAgIHJldHVy biBTVk5fTk9fRVJST1I7CisKKyAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7CisKKyAg aWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24ocmVjZWl2ZXIsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopIk8mTyYiLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX29iX2NvbW1pdF9pbmZvLCBjb21taXRfaW5m bywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9vYl9wb29sLCBw b29sKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJy b3IoKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBpZiAocmVzdWx0ICE9IFB5X05vbmUp CisgICAgICAgIGVyciA9IGNhbGxiYWNrX2JhZF9yZXR1cm5fZXJyb3IoIk5vdCBOb25lIik7Cisg ICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICB9CisKKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9w eV9sb2NrKCk7CisKKyAgcmV0dXJuIGVycjsKK30KKworc3ZuX2Vycm9yX3QgKnN2bl9zd2lnX3B5 X2NvbW1pdF9jYWxsYmFjayhzdm5fcmV2bnVtX3QgbmV3X3JldmlzaW9uLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpkYXRlLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphdXRob3IsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmJhdG9uKQoreworICBQ eU9iamVjdCAqcmVjZWl2ZXIgPSBiYXRvbjsKKyAgUHlPYmplY3QgKnJlc3VsdDsKKyAgc3ZuX2Vy cm9yX3QgKmVyciA9IFNWTl9OT19FUlJPUjsKKworICBpZiAoKHJlY2VpdmVyID09IE5VTEwpIHx8 IChyZWNlaXZlciA9PSBQeV9Ob25lKSkKKyAgICByZXR1cm4gU1ZOX05PX0VSUk9SOworCisgIHN2 bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisgIGlmICgocmVzdWx0ID0gUHlPYmplY3Rf Q2FsbEZ1bmN0aW9uKHJlY2VpdmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoY2hhciAqKSJsc3MiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBuZXdfcmV2aXNpb24sIGRhdGUsIGF1dGhvcikpID09IE5VTEwpCisgICAgeworICAgICAgZXJy ID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7CisgICAgfQorICBlbHNlCisgICAgeworICAg ICAgaWYgKHJlc3VsdCAhPSBQeV9Ob25lKQorICAgICAgICBlcnIgPSBjYWxsYmFja19iYWRfcmV0 dXJuX2Vycm9yKCJOb3QgTm9uZSIpOworICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgfQor CisgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOworCisgIHJldHVybiBlcnI7Cit9CisK K3N2bl9lcnJvcl90ICpzdm5fc3dpZ19weV9yYV9maWxlX3Jldl9oYW5kbGVyX2Z1bmMoCisgICAg ICAgICAgICAgICAgICAgIHZvaWQgKmJhdG9uLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBj aGFyICpwYXRoLAorICAgICAgICAgICAgICAgICAgICBzdm5fcmV2bnVtX3QgcmV2LAorICAgICAg ICAgICAgICAgICAgICBhcHJfaGFzaF90ICpyZXZfcHJvcHMsCisgICAgICAgICAgICAgICAgICAg IHN2bl90eGRlbHRhX3dpbmRvd19oYW5kbGVyX3QgKmRlbHRhX2hhbmRsZXIsCisgICAgICAgICAg ICAgICAgICAgIHZvaWQgKipkZWx0YV9iYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgYXByX2Fy cmF5X2hlYWRlcl90ICpwcm9wX2RpZmZzLAorICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90 ICpwb29sKQoreworICBQeU9iamVjdCAqaGFuZGxlciA9IGJhdG9uOworICBQeU9iamVjdCAqcmVz dWx0LCAqcHlfcmV2X3Byb3BzID0gTlVMTCwgKnB5X3Byb3BfZGlmZnMgPSBOVUxMOworICBzdm5f ZXJyb3JfdCAqZXJyID0gU1ZOX05PX0VSUk9SOworCisgIGlmICgoaGFuZGxlciA9PSBOVUxMKSB8 fCAoaGFuZGxlciA9PSBQeV9Ob25lKSkKKyAgICByZXR1cm4gU1ZOX05PX0VSUk9SOworCisgIHN2 bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisgIHB5X3Jldl9wcm9wcyA9IHN2bl9zd2ln X3B5X3Byb3BoYXNoX3RvX2RpY3QocmV2X3Byb3BzKTsKKyAgaWYgKHB5X3Jldl9wcm9wcyA9PSBO VUxMKQorICAgIHsKKyAgICAgIGVyciA9IHR5cGVfY29udmVyc2lvbl9lcnJvcigiYXByX2hhc2hf dCAqIik7CisgICAgICBnb3RvIGVycm9yOworICAgIH0KKworICBweV9wcm9wX2RpZmZzID0gcHJv cGFycmF5X3RvX2RpY3QocHJvcF9kaWZmcyk7CisKKyAgaWYgKHB5X3Byb3BfZGlmZnMgPT0gTlVM TCkKKyAgICB7CisgICAgICBlcnIgPSB0eXBlX2NvbnZlcnNpb25fZXJyb3IoImFwcl9hcnJheV9o ZWFkZXJfdCAqIik7CisgICAgICBnb3RvIGVycm9yOworICAgIH0KKworICBpZiAoKHJlc3VsdCA9 IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoY2hhciAqKSJzbE9PTyYiLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBwYXRoLCByZXYsIHB5X3Jldl9wcm9wcywgcHlfcHJvcF9kaWZmcywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9vYl9wb29sLCBwb29sKSkg PT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsK KyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBpZiAocmVzdWx0ICE9IFB5X05vbmUpCisgICAg ICAgIGVyciA9IGNhbGxiYWNrX2JhZF9yZXR1cm5fZXJyb3IoIk5vdCBOb25lIik7CisKKyAgICAg IC8qIEZJWE1FOiBTdXBwb3J0IHJldHVybmVkIFR4RGVsdGFXaW5kb3cgb2JqZWN0IGFuZAorICAg ICAgICogc2V0IGRlbHRhX2hhbmRsZXIgYW5kIGRlbHRhX2JhdG9uICovCisgICAgICAqZGVsdGFf aGFuZGxlciA9IE5VTEw7CisgICAgICAqZGVsdGFfYmF0b24gPSBOVUxMOworCisgICAgICBQeV9Y REVDUkVGKHJlc3VsdCk7CisgICAgfQorCitlcnJvcjoKKworICBQeV9YREVDUkVGKHB5X3Jldl9w cm9wcyk7CisgIFB5X1hERUNSRUYocHlfcHJvcF9kaWZmcyk7CisKKyAgc3ZuX3N3aWdfcHlfcmVs ZWFzZV9weV9sb2NrKCk7CisKKyAgcmV0dXJuIGVycjsKK30KKworc3RhdGljIHN2bl9lcnJvcl90 ICpyZXBvcnRlcl9zZXRfcGF0aCh2b2lkICpyZXBvcnRfYmF0b24sCisgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBjaGFyICpwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg c3ZuX3Jldm51bV90IHJldmlzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX2Jv b2xlYW5fdCBzdGFydF9lbXB0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo YXIgKmxvY2tfdG9rZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpw b29sKQoreworICBzdm5fZXJyb3JfdCAqZXJyID0gU1ZOX05PX0VSUk9SOworICBQeU9iamVjdCAq cHlfcmVwb3J0ZXIgPSByZXBvcnRfYmF0b24sICpyZXN1bHQ7CisKKyAgaWYgKHB5X3JlcG9ydGVy ID09IE5VTEwgfHwgcHlfcmVwb3J0ZXIgPT0gUHlfTm9uZSkKKyAgICByZXR1cm4gU1ZOX05PX0VS Uk9SOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisgIGlmICgocmVzdWx0 ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChweV9yZXBvcnRlciwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChjaGFyICopInNldF9wYXRoIiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChjaGFyICopInNsYnNPJiIsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBwYXRoLCByZXZpc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHN0YXJ0X2VtcHR5LCBsb2NrX3Rva2VuLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbWFrZV9vYl9wb29sLCBwb29sKSkgPT0gTlVMTCkKKyAgICB7CisgICAg ICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICB9CisgIGVsc2UgaWYgKHJl c3VsdCAhPSBQeV9Ob25lKQorICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2JhZF9yZXR1cm5f ZXJyb3IoIk5vdCBOb25lIik7CisgICAgfQorCisgIFB5X1hERUNSRUYocmVzdWx0KTsKKworICBz dm5fc3dpZ19weV9yZWxlYXNlX3B5X2xvY2soKTsKKworICByZXR1cm4gZXJyOworfQorCitzdGF0 aWMgc3ZuX2Vycm9yX3QgKnJlcG9ydGVyX2RlbGV0ZV9wYXRoKHZvaWQgKnJlcG9ydF9iYXRvbiwK KyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwYXRoLAorICAgICAgICAgICAg ICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgc3ZuX2Vycm9yX3QgKmVyciA9IFNW Tl9OT19FUlJPUjsKKyAgUHlPYmplY3QgKnB5X3JlcG9ydGVyID0gcmVwb3J0X2JhdG9uLCAqcmVz dWx0OworCisgIGlmIChweV9yZXBvcnRlciA9PSBOVUxMIHx8IHB5X3JlcG9ydGVyID09IFB5X05v bmUpCisgICAgcmV0dXJuIFNWTl9OT19FUlJPUjsKKworICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5 X2xvY2soKTsKKworICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxNZXRob2QocHlfcmVwb3J0 ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJkZWxldGVf cGF0aCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJzTyYi LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCwgCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQor ICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgIH0KKyAg ZWxzZSBpZiAocmVzdWx0ICE9IFB5X05vbmUpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tf YmFkX3JldHVybl9lcnJvcigiTm90IE5vbmUiKTsKKyAgICB9CisKKyAgUHlfWERFQ1JFRihyZXN1 bHQpOworCisgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOworCisgIHJldHVybiBlcnI7 Cit9CisgICAgCitzdGF0aWMgc3ZuX2Vycm9yX3QgKnJlcG9ydGVyX2xpbmtfcGF0aCh2b2lkICpy ZXBvcnRfYmF0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGF0 aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp1cmwsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3ZuX3Jldm51bV90IHJldmlzaW9uLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHN2bl9ib29sZWFuX3Qgc3RhcnRfZW1wdHksCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbG9ja190b2tlbiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKQoreworICBzdm5fZXJyb3JfdCAqZXJyID0gU1ZO X05PX0VSUk9SOworICBQeU9iamVjdCAqcHlfcmVwb3J0ZXIgPSByZXBvcnRfYmF0b24sICpyZXN1 bHQ7CisKKyAgaWYgKHB5X3JlcG9ydGVyID09IE5VTEwgfHwgcHlfcmVwb3J0ZXIgPT0gUHlfTm9u ZSkKKyAgICByZXR1cm4gU1ZOX05PX0VSUk9SOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlf bG9jaygpOworCisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChweV9yZXBvcnRl ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopImxpbmtfcGF0 aCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJzc2xic08m IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGgsIHVybCwgcmV2aXNp b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydF9lbXB0eSwgbG9j a190b2tlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vfb2JfcG9v bCwgcG9vbCkpID09IE5VTEwpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9u X2Vycm9yKCk7CisgICAgfQorICBlbHNlIGlmIChyZXN1bHQgIT0gUHlfTm9uZSkKKyAgICB7Cisg ICAgICBlcnIgPSBjYWxsYmFja19iYWRfcmV0dXJuX2Vycm9yKCJOb3QgTm9uZSIpOworICAgIH0K KworICBQeV9YREVDUkVGKHJlc3VsdCk7CisKKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2Nr KCk7CisKKyAgcmV0dXJuIGVycjsKK30KKworc3RhdGljIHN2bl9lcnJvcl90ICpyZXBvcnRlcl9m aW5pc2hfcmVwb3J0KHZvaWQgKnJlcG9ydF9iYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgc3ZuX2Vycm9yX3QgKmVyciA9IFNWTl9O T19FUlJPUjsKKworICBQeU9iamVjdCAqcHlfcmVwb3J0ZXIgPSByZXBvcnRfYmF0b24sICpyZXN1 bHQ7CisKKyAgaWYgKHB5X3JlcG9ydGVyID09IE5VTEwgfHwgcHlfcmVwb3J0ZXIgPT0gUHlfTm9u ZSkKKyAgICByZXR1cm4gU1ZOX05PX0VSUk9SOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlf bG9jaygpOworCisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChweV9yZXBvcnRl ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopImZpbmlzaF9y ZXBvcnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikiTyYi LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9vYl9wb29sLCBwb29s KSkgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3Io KTsKKyAgICB9CisgIGVsc2UgaWYgKHJlc3VsdCAhPSBQeV9Ob25lKQorICAgIHsKKyAgICAgIGVy ciA9IGNhbGxiYWNrX2JhZF9yZXR1cm5fZXJyb3IoIk5vdCBOb25lIik7CisgICAgfQorCisgIFB5 X1hERUNSRUYocmVzdWx0KTsKKworICBzdm5fc3dpZ19weV9yZWxlYXNlX3B5X2xvY2soKTsKKwor ICByZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3ZuX2Vycm9yX3QgKnJlcG9ydGVyX2Fib3J0X3Jl cG9ydCh2b2lkICpyZXBvcnRfYmF0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg YXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgc3ZuX2Vycm9yX3QgKmVyciA9IFNWTl9OT19FUlJPUjsK KworICBQeU9iamVjdCAqcHlfcmVwb3J0ZXIgPSByZXBvcnRfYmF0b24sICpyZXN1bHQ7CisKKyAg aWYgKHB5X3JlcG9ydGVyID09IE5VTEwgfHwgcHlfcmVwb3J0ZXIgPT0gUHlfTm9uZSkKKyAgICBy ZXR1cm4gU1ZOX05PX0VSUk9SOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOwor CisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChweV9yZXBvcnRlciwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopImFib3J0X3JlcG9ydCIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJPJiIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxM KQorICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgIH0K KyAgZWxzZSBpZiAocmVzdWx0ICE9IFB5X05vbmUpCisgICAgeworICAgICAgZXJyID0gY2FsbGJh Y2tfYmFkX3JldHVybl9lcnJvcigiTm90IE5vbmUiKTsKKyAgICB9CisKKyAgUHlfWERFQ1JFRihy ZXN1bHQpOworCisgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOworCisgIHJldHVybiBl cnI7Cit9CisKK2NvbnN0IHN2bl9yYV9yZXBvcnRlcjJfdCBzd2lnX3B5X3JhX3JlcG9ydGVyMiA9 IHsKKyAgICByZXBvcnRlcl9zZXRfcGF0aCwKKyAgICByZXBvcnRlcl9kZWxldGVfcGF0aCwKKyAg ICByZXBvcnRlcl9saW5rX3BhdGgsCisgICAgcmVwb3J0ZXJfZmluaXNoX3JlcG9ydCwKKyAgICBy ZXBvcnRlcl9hYm9ydF9yZXBvcnQKK307CmRpZmYgLU51ciBzdWJ2ZXJzaW9uLTEuMy4xL3N1YnZl cnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vbGlic3ZuX3N3aWdfcHkvc3dpZ3V0aWxfcHkuYy5v cmlnIHN1YnZlcnNpb24tMS4zLjEubmV3L3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24v bGlic3ZuX3N3aWdfcHkvc3dpZ3V0aWxfcHkuYy5vcmlnCi0tLSBzdWJ2ZXJzaW9uLTEuMy4xL3N1 YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vbGlic3ZuX3N3aWdfcHkvc3dpZ3V0aWxfcHku Yy5vcmlnCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyBzdWJ2ZXJzaW9u LTEuMy4xLm5ldy9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcHl0aG9uL2xpYnN2bl9zd2lnX3B5 L3N3aWd1dGlsX3B5LmMub3JpZwkyMDA2LTA3LTA1IDAxOjA0OjA2LjAwMDAwMDAwMCArMDEwMApA QCAtMCwwICsxLDI2MzQgQEAKKy8qCisgKiBzd2lndXRpbF9weS5jOiB1dGlsaXR5IGZ1bmN0aW9u cyBmb3IgdGhlIFNXSUcgUHl0aG9uIGJpbmRpbmdzCisgKgorICogPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENv cHlyaWdodCAoYykgMjAwMC0yMDA0IENvbGxhYk5ldC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg KgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUg Q09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRo aXMgZGlzdHJpYnV0aW9uLiAgVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0 cDovL3N1YnZlcnNpb24udGlncmlzLm9yZy9saWNlbnNlLTEuaHRtbC4KKyAqIElmIG5ld2VyIHZl cnNpb25zIG9mIHRoaXMgbGljZW5zZSBhcmUgcG9zdGVkIHRoZXJlLCB5b3UgbWF5IHVzZSBhCisg KiBuZXdlciB2ZXJzaW9uIGluc3RlYWQsIGF0IHlvdXIgb3B0aW9uLgorICoKKyAqIFRoaXMgc29m dHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Cisg KiBpbmRpdmlkdWFscy4gIEZvciBleGFjdCBjb250cmlidXRpb24gaGlzdG9yeSwgc2VlIHRoZSBy ZXZpc2lvbgorICogaGlzdG9yeSBhbmQgbG9ncywgYXZhaWxhYmxlIGF0IGh0dHA6Ly9zdWJ2ZXJz aW9uLnRpZ3Jpcy5vcmcvLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworCisvKiBUZWxsIHN3aWd1dGls X3B5LmggdGhhdCB3ZSdyZSBpbnNpZGUgdGhlIGltcGxlbWVudGF0aW9uICovCisjZGVmaW5lIFNW Tl9TV0lHX1NXSUdVVElMX1BZX0MKKworI2luY2x1ZGUgPFB5dGhvbi5oPgorCisjaW5jbHVkZSA8 c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgor CisjaW5jbHVkZSA8YXByX3Bvb2xzLmg+CisjaW5jbHVkZSA8YXByX2hhc2guaD4KKyNpbmNsdWRl IDxhcHJfcG9ydGFibGUuaD4KKyNpbmNsdWRlIDxhcHJfdGhyZWFkX3Byb2MuaD4KKworI2luY2x1 ZGUgInN2bl9jbGllbnQuaCIKKyNpbmNsdWRlICJzdm5fc3RyaW5nLmgiCisjaW5jbHVkZSAic3Zu X29wdC5oIgorI2luY2x1ZGUgInN2bl9kZWx0YS5oIgorI2luY2x1ZGUgInN2bl9hdXRoLmgiCisj aW5jbHVkZSAic3ZuX3Bvb2xzLmgiCisKKyNpbmNsdWRlICJzdm5fcHJpdmF0ZV9jb25maWcuaCIg LyogZm9yIFNWTl9BUFJfSU5UNjRfVF9QWUNGTVQgKi8KKworI2luY2x1ZGUgInN3aWdfcHl0aG9u X2V4dGVybmFsX3J1bnRpbWUuc3dnIgorI2luY2x1ZGUgInN3aWd1dGlsX3B5LmgiCisKKwwKKwor LyoqKiBNYW5hZ2UgdGhlIEdsb2JhbCBJbnRlcnByZXRlciBMb2NrICoqKi8KKworLyogSWYgYm90 aCBQeXRob24gYW5kIEFQUiBoYXZlIHRocmVhZHMgYXZhaWxhYmxlLCB3ZSBjYW4gb3B0aW1pemUg b3Vyc2VsdmVzCisgKiBieSByZWxlYXNpbmcgdGhlIGdsb2JhbCBpbnRlcnByZXRlciBsb2NrIHdo ZW4gd2UgZHJvcCBpbnRvIG91ciBTVk4gY2FsbHMuCisgKgorICogSW4gc3ZuX3R5cGVzLmksIHN2 bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jayBpcyBjYWxsZWQgYmVmb3JlIGV2ZXJ5CisgKiBmdW5j dGlvbiwgdGhlbiBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xvY2sgaXMgY2FsbGVkIGFmdGVyIGV2 ZXJ5CisgKiBmdW5jdGlvbi4gIFNvLCBpZiB0aGVzZSBmdW5jdGlvbnMgYmVjb21lIG5vLW9wcywg dGhlbiBQeXRob24gd2lsbAorICogc3RhcnQgdG8gYmxvY2suLi4KKyAqCisgKiBUaGUgU3VidmVy c2lvbiBsaWJyYXJpZXMgY2FuIGJlIGFzc3VtZWQgdG8gYmUgdGhyZWFkLXNhZmUgKm9ubHkqIHdo ZW4KKyAqIEFQUl9IQVNfVEhSRUFEIGlzIDEuICBUaGUgQVBSIHBvb2wgYWxsb2NhdGlvbnMgYXJl bid0IHRocmVhZC1zYWZlIHVubGVzcworICogQVBSX0hBU19USFJFQUQgaXMgMS4KKyAqLworCisj aWYgZGVmaW5lZChXSVRIX1RIUkVBRCkgJiYgQVBSX0hBU19USFJFQURTCisjZGVmaW5lIEFDUVVJ UkVfUFlUSE9OX0xPQ0sKKyNlbmRpZgorCisjaWZkZWYgQUNRVUlSRV9QWVRIT05fTE9DSworc3Rh dGljIGFwcl90aHJlYWRrZXlfdCAqX3NhdmVkX3RocmVhZF9rZXkgPSBOVUxMOworc3RhdGljIGFw cl9wb29sX3QgKl9zYXZlZF90aHJlYWRfcG9vbCA9IE5VTEw7CisjZW5kaWYKKwordm9pZCBzdm5f c3dpZ19weV9yZWxlYXNlX3B5X2xvY2sodm9pZCkKK3sKKyNpZmRlZiBBQ1FVSVJFX1BZVEhPTl9M T0NLCisgIFB5VGhyZWFkU3RhdGUgKnRocmVhZF9zdGF0ZTsKKworICBpZiAoX3NhdmVkX3RocmVh ZF9rZXkgPT0gTlVMTCkKKyAgICB7CisgICAgICAvKiBPYnZpb3VzbHksIGNyZWF0aW5nIGEgdG9w LWxldmVsIHBvb2wgZm9yIHRoaXMgaXMgcHJldHR5IHN0dXBpZC4gKi8KKyAgICAgIGFwcl9wb29s X2NyZWF0ZSgmX3NhdmVkX3RocmVhZF9wb29sLCBOVUxMKTsKKyAgICAgIGFwcl90aHJlYWRrZXlf cHJpdmF0ZV9jcmVhdGUoJl9zYXZlZF90aHJlYWRfa2V5LCBOVUxMLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfc2F2ZWRfdGhyZWFkX3Bvb2wpOworICAgIH0KKworICB0aHJl YWRfc3RhdGUgPSBQeUV2YWxfU2F2ZVRocmVhZCgpOworICBhcHJfdGhyZWFka2V5X3ByaXZhdGVf c2V0KHRocmVhZF9zdGF0ZSwgX3NhdmVkX3RocmVhZF9rZXkpOworI2VuZGlmCit9CisKK3ZvaWQg c3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKHZvaWQpCit7CisjaWZkZWYgQUNRVUlSRV9QWVRI T05fTE9DSworICB2b2lkICp2YWw7CisgIFB5VGhyZWFkU3RhdGUgKnRocmVhZF9zdGF0ZTsKKyAg YXByX3RocmVhZGtleV9wcml2YXRlX2dldCgmdmFsLCBfc2F2ZWRfdGhyZWFkX2tleSk7CisgIHRo cmVhZF9zdGF0ZSA9IHZhbDsKKyAgUHlFdmFsX1Jlc3RvcmVUaHJlYWQodGhyZWFkX3N0YXRlKTsK KyNlbmRpZgorfQorCisKKwwKKy8qKiogQXV0b21hdGljIFBvb2wgTWFuYWdlbWVudCBGdW5jdGlv bnMgKioqLworCisvKiBUaGUgYXBwbGljYXRpb24gcG9vbCAqLworc3RhdGljIGFwcl9wb29sX3Qg Kl9nbG9iYWxfcG9vbCA9IE5VTEw7CitzdGF0aWMgUHlPYmplY3QgKl9nbG9iYWxfc3ZuX3N3aWdf cHlfcG9vbCA9IE5VTEw7CitzdGF0aWMgY2hhciBhc3NlcnRWYWxpZFtdID0gImFzc2VydF92YWxp ZCI7CitzdGF0aWMgY2hhciBwYXJlbnRQb29sW10gPSAiX3BhcmVudF9wb29sIjsKK3N0YXRpYyBj aGFyIGFkZE93bmVkUmVmW10gPSAiX2FkZF9vd25lZF9yZWYiOworc3RhdGljIGNoYXIgcmVtb3Zl T3duZWRSZWZbXSA9ICJfcmVtb3ZlX293bmVkX3JlZiI7CitzdGF0aWMgY2hhciB3cmFwW10gPSAi X3dyYXAiOworc3RhdGljIGNoYXIgdW53cmFwW10gPSAiX3Vud3JhcCI7CitzdGF0aWMgY2hhciBz ZXRQYXJlbnRQb29sW10gPSAic2V0X3BhcmVudF9wb29sIjsKK3N0YXRpYyBjaGFyIGVtcHR5VHVw bGVbXSA9ICIoKSI7CitzdGF0aWMgY2hhciBvYmplY3RUdXBsZVtdID0gIihPKSI7CisKKworYXBy X3N0YXR1c190IHN2bl9zd2lnX3B5X2luaXRpYWxpemUodm9pZCkKK3sKKyAgYXByX3N0YXR1c190 IHN0YXR1czsKKworICBpZiAoKHN0YXR1cyA9IGFwcl9pbml0aWFsaXplKCkpICE9IEFQUl9TVUND RVNTKQorICAgIHJldHVybiBzdGF0dXM7CisgIGlmIChhdGV4aXQoYXByX3Rlcm1pbmF0ZSkgIT0g MCkKKyAgICByZXR1cm4gQVBSX0VHRU5FUkFMOworICByZXR1cm4gQVBSX1NVQ0NFU1M7Cit9CisK Ky8qIFNldCB0aGUgYXBwbGljYXRpb24gcG9vbCAqLwordm9pZCBzdm5fc3dpZ19weV9zZXRfYXBw bGljYXRpb25fcG9vbChQeU9iamVjdCAqcHlfcG9vbCwgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAg X2dsb2JhbF9wb29sID0gcG9vbDsKKyAgX2dsb2JhbF9zdm5fc3dpZ19weV9wb29sID0gcHlfcG9v bDsKK30KKworLyogQ2xlYXIgdGhlIGFwcGxpY2F0aW9uIHBvb2wgKi8KK3ZvaWQgc3ZuX3N3aWdf cHlfY2xlYXJfYXBwbGljYXRpb25fcG9vbCgpCit7CisgIF9nbG9iYWxfcG9vbCA9IE5VTEw7Cisg IF9nbG9iYWxfc3ZuX3N3aWdfcHlfcG9vbCA9IE5VTEw7Cit9CisKKy8qIEdldCB0aGUgYXBwbGlj YXRpb24gcG9vbCAqLwordm9pZCBzdm5fc3dpZ19nZXRfYXBwbGljYXRpb25fcG9vbChQeU9iamVj dCAqKnB5X3Bvb2wsIGFwcl9wb29sX3QgKipwb29sKQoreworICAqcG9vbCA9IF9nbG9iYWxfcG9v bDsKKyAgKnB5X3Bvb2wgPSBfZ2xvYmFsX3N2bl9zd2lnX3B5X3Bvb2w7Cit9CisKKy8qIFNldCB0 aGUgcGFyZW50IHBvb2wgb2YgYSBwcm94eSBvYmplY3QgKi8KK3N0YXRpYyBpbnQgcHJveHlfc2V0 X3Bvb2woUHlPYmplY3QgKipwcm94eSwgUHlPYmplY3QgKnBvb2wpCit7CisgIFB5T2JqZWN0ICpy ZXN1bHQ7CisKKyAgaWYgKCpwcm94eSAhPSBOVUxMKQorICAgIHsKKyAgICAgIGlmIChwb29sID09 IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoUHlPYmplY3RfSGFzQXR0clN0cmluZygq cHJveHksIHNldFBhcmVudFBvb2wpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICByZXN1 bHQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKCpwcm94eSwgc2V0UGFyZW50UG9vbCwgZW1wdHlUdXBs ZSk7CisgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBy ZXR1cm4gMTsKKyAgICAgICAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgICAgICAgICB9 CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIHJlc3VsdCA9IFB5 T2JqZWN0X0NhbGxNZXRob2QocG9vbCwgd3JhcCwgb2JqZWN0VHVwbGUsICpwcm94eSk7CisgICAg ICAgICAgUHlfREVDUkVGKCpwcm94eSk7CisgICAgICAgICAgKnByb3h5ID0gcmVzdWx0OworICAg ICAgICB9CisgICAgfQorCisgIHJldHVybiAwOworfQorCisvKiBHZXQgdGhlIHBhcmVudCBwb29s IG9mIGEgcHJveHkgb2JqZWN0LCBvciByZXR1cm4gdGhlIGdsb2JhbCBhcHBsaWNhdGlvbgorICog cG9vbCBpZiBvbmUgaXMgbm90IHNldC4gIFJldHVybnMgYSBCT1JST1dFRCByZWZlcmVuY2UhICov CitzdGF0aWMgUHlPYmplY3QgKnByb3h5X2dldF9wb29sKFB5T2JqZWN0ICpwcm94eSkKK3sKKyAg UHlPYmplY3QgKnJlc3VsdDsKKyAgaWYgKFB5T2JqZWN0X0hhc0F0dHJTdHJpbmcocHJveHksIHBh cmVudFBvb2wpKQorICAgIHsKKyAgICAgIHJlc3VsdCA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmco cHJveHksIHBhcmVudFBvb2wpOworICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgfQorICBl bHNlCisgICAgeworICAgICAgcmVzdWx0ID0gX2dsb2JhbF9zdm5fc3dpZ19weV9wb29sOworICAg IH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyogQ2hhbmdlIGFuICdvd25lZCByZWZlcmVuY2Un IGFsbG9jYXRlZCBpbiBhIHBvb2wgZnJvbSBvbGRSZWYgdG8gbmV3UmVmLgorICogSWYgb2xkUmVm IGlzIG5vbi1OVUxMIGFuZCBwcmVzZW50IGluIHRoZSBwYXJlbnQgcG9vbCBvZiBwcm94eSwgaXQg aXMgcmVtb3ZlZC4KKyAqLworaW50IHN2bl9zd2lnX3B5X3Bvb2xfc2V0X293bmVkX3JlZihQeU9i amVjdCAqcHJveHksIFB5T2JqZWN0ICpvbGRSZWYsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFB5T2JqZWN0ICpuZXdSZWYpCit7CisgIFB5T2JqZWN0ICp0ZW1wOworICBQeU9i amVjdCAqcHlfcG9vbCA9IHByb3h5X2dldF9wb29sKHByb3h5KTsKKworICBpZiAob2xkUmVmICE9 IE5VTEwpCisgICAgeworICAgICAgdGVtcCA9IFB5T2JqZWN0X0NhbGxNZXRob2QocHlfcG9vbCwg cmVtb3ZlT3duZWRSZWYsIG9iamVjdFR1cGxlLCBvbGRSZWYpOworICAgICAgaWYgKHRlbXAgPT0g TlVMTCkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICBlbHNlCisgICAgICAgIFB5X0RFQ1JFRih0 ZW1wKTsKKyAgICB9CisgIGlmIChuZXdSZWYgIT0gTlVMTCkKKyAgICB7CisgICAgICB0ZW1wID0g UHlPYmplY3RfQ2FsbE1ldGhvZChweV9wb29sLCBhZGRPd25lZFJlZiwgb2JqZWN0VHVwbGUsIG5l d1JlZik7CisgICAgICBpZiAodGVtcCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gMTsKKyAgICAg IGVsc2UKKyAgICAgICAgUHlfREVDUkVGKHRlbXApOworICAgIH0KKyAgcmV0dXJuIDA7Cit9CisM CisvKiBXcmFwcGVyIGZvciBTV0lHX1R5cGVRdWVyeSAqLworI2RlZmluZSBzdm5fc3dpZ19UeXBl UXVlcnkoeCkgU1dJR19UeXBlUXVlcnkoeCkKKworLyoqIFdyYXBwZXIgZm9yIFNXSUdfTmV3UG9p bnRlck9iaiAqLworUHlPYmplY3QgKnN2bl9zd2lnX05ld1BvaW50ZXJPYmoodm9pZCAqb2JqLCBz d2lnX3R5cGVfaW5mbyAqdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5 T2JqZWN0ICpwb29sKQoreworICBQeU9iamVjdCAqcHJveHkgPSBTV0lHX05ld1BvaW50ZXJPYmoo b2JqLCB0eXBlLCAwKTsKKworICBpZiAocHJveHkgPT0gTlVMTCkKKyAgICByZXR1cm4gTlVMTDsK KworICBpZiAocHJveHlfc2V0X3Bvb2woJnByb3h5LCBwb29sKSkKKyAgICB7CisgICAgICBQeV9E RUNSRUYocHJveHkpOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgIHJldHVybiBwcm94 eTsKK30KKworLyoqIHN2bl9zd2lnX05ld1BvaW50ZXJPYmosIGV4Y2VwdCBhIHN0cmluZyBpcyB1 c2VkIHRvIGRlc2NyaWJlIHRoZSB0eXBlICovCitzdGF0aWMgUHlPYmplY3QgKnN2bl9zd2lnX05l d1BvaW50ZXJPYmpTdHJpbmcodm9pZCAqcHRyLCBjb25zdCBjaGFyICp0eXBlLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpweV9wb29sKQor eworICBzd2lnX3R5cGVfaW5mbyAqdHlwZWluZm8gPSBzdm5fc3dpZ19UeXBlUXVlcnkodHlwZSk7 CisgIGlmICh0eXBlaW5mbyA9PSBOVUxMKQorICAgIHsKKyAgICAgIFB5RXJyX1NldFN0cmluZyhQ eUV4Y19UeXBlRXJyb3IsICJDYW5ub3QgZmluZCByZXF1aXJlZCB0eXBlb2JqZWN0Iik7CisgICAg ICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgLyogIyMjIGNhY2hlIHRoZSBzd2lnX3R5cGVfaW5m byBhdCBzb21lIHBvaW50PyAqLworICByZXR1cm4gc3ZuX3N3aWdfTmV3UG9pbnRlck9iaihwdHIs IHR5cGVpbmZvLCBweV9wb29sKTsKK30KKworLyoqIFdyYXBwZXIgZm9yIFNXSUdfQ29udmVydFB0 ciAqLworaW50IHN2bl9zd2lnX0NvbnZlcnRQdHIoUHlPYmplY3QgKmlucHV0LCB2b2lkICoqb2Jq LCBzd2lnX3R5cGVfaW5mbyAqdHlwZSkKK3sKKyAgaWYgKFB5T2JqZWN0X0hhc0F0dHJTdHJpbmco aW5wdXQsIGFzc2VydFZhbGlkKSkKKyAgICB7CisgICAgICBQeU9iamVjdCAqcmVzdWx0ID0gUHlP YmplY3RfQ2FsbE1ldGhvZChpbnB1dCwgYXNzZXJ0VmFsaWQsIGVtcHR5VHVwbGUpOworICAgICAg aWYgKHJlc3VsdCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gMTsKKyAgICAgIFB5X0RFQ1JFRihy ZXN1bHQpOworICAgIH0KKyAgaWYgKFB5T2JqZWN0X0hhc0F0dHJTdHJpbmcoaW5wdXQsIHVud3Jh cCkpCisgICAgeworICAgICAgaW5wdXQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKGlucHV0LCB1bndy YXAsIGVtcHR5VHVwbGUpOworICAgICAgaWYgKGlucHV0ID09IE5VTEwpCisgICAgICAgIHJldHVy biAxOworICAgICAgUHlfREVDUkVGKGlucHV0KTsKKyAgICB9CisKKyAgcmV0dXJuIFNXSUdfQ29u dmVydFB0cihpbnB1dCwgb2JqLCB0eXBlLCBTV0lHX1BPSU5URVJfRVhDRVBUSU9OIHwgMCk7Cit9 CisKKy8qKiBzdm5fc3dpZ19Db252ZXJ0UHRyLCBleGNlcHQgYSBzdHJpbmcgaXMgdXNlZCB0byBk ZXNjcmliZSB0aGUgdHlwZSAqLworc3RhdGljIGludCBzdm5fc3dpZ19Db252ZXJ0UHRyU3RyaW5n KFB5T2JqZWN0ICppbnB1dCwKKyAgICB2b2lkICoqb2JqLCBjb25zdCBjaGFyICp0eXBlKQorewor ICByZXR1cm4gc3ZuX3N3aWdfQ29udmVydFB0cihpbnB1dCwgb2JqLCBzdm5fc3dpZ19UeXBlUXVl cnkodHlwZSkpOworfQorCisvKiogV3JhcHBlciBmb3IgU1dJR19NdXN0R2V0UHRyICovCit2b2lk ICpzdm5fc3dpZ19NdXN0R2V0UHRyKHZvaWQgKmlucHV0LCBzd2lnX3R5cGVfaW5mbyAqdHlwZSwg aW50IGFyZ251bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKipweV9wb29s KQoreworICBpZiAoUHlPYmplY3RfSGFzQXR0clN0cmluZyhpbnB1dCwgYXNzZXJ0VmFsaWQpKQor ICAgIHsKKyAgICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKGlucHV0 LCBhc3NlcnRWYWxpZCwgZW1wdHlUdXBsZSk7CisgICAgICBpZiAocmVzdWx0ID09IE5VTEwpCisg ICAgICAgIHJldHVybiBOVUxMOworICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgfQorCisg IGlmIChweV9wb29sICE9IE5VTEwpCisgICAgKnB5X3Bvb2wgPSBwcm94eV9nZXRfcG9vbCgoUHlP YmplY3QgKikgaW5wdXQpOworCisgIGlmIChQeU9iamVjdF9IYXNBdHRyU3RyaW5nKGlucHV0LCB1 bndyYXApKQorICAgIHsKKyAgICAgIGlucHV0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChpbnB1dCwg dW53cmFwLCBlbXB0eVR1cGxlKTsKKyAgICAgIGlmIChpbnB1dCA9PSBOVUxMKQorICAgICAgICBy ZXR1cm4gTlVMTDsKKyAgICAgIFB5X0RFQ1JFRigoUHlPYmplY3QgKikgaW5wdXQpOworICAgIH0K KworICByZXR1cm4gU1dJR19NdXN0R2V0UHRyKGlucHV0LCB0eXBlLCBhcmdudW0sIFNXSUdfUE9J TlRFUl9FWENFUFRJT04gfCAwKTsKK30KKworDAorLyoqKiBDdXN0b20gU3VidmVyc2lvbkV4Y2Vw dGlvbiBzdHVmZnMuICoqKi8KKworLyogR2xvYmFsIFN1YnZlcnNpb25FeGNlcHRpb24gY2xhc3Mg b2JqZWN0LiAqLworc3RhdGljIFB5T2JqZWN0ICpTdWJ2ZXJzaW9uRXhjZXB0aW9uID0gTlVMTDsK KworCitQeU9iamVjdCAqc3ZuX3N3aWdfcHlfZXhjZXB0aW9uX3R5cGUodm9pZCkKK3sKKyAgUHlf SU5DUkVGKFN1YnZlcnNpb25FeGNlcHRpb24pOworICByZXR1cm4gU3VidmVyc2lvbkV4Y2VwdGlv bjsKK30KKworUHlPYmplY3QgKnN2bl9zd2lnX3B5X3JlZ2lzdGVyX2V4Y2VwdGlvbih2b2lkKQor eworICAvKiBJZiB3ZSBoYXZlbid0IGNyZWF0ZWQgb3VyIGV4Y2VwdGlvbiBjbGFzcywgZG8gc28u ICovCisgIGlmIChTdWJ2ZXJzaW9uRXhjZXB0aW9uID09IE5VTEwpCisgICAgeworICAgICAgU3Vi dmVyc2lvbkV4Y2VwdGlvbiA9IFB5RXJyX05ld0V4Y2VwdGlvbgorICAgICAgICAoKGNoYXIgKiki bGlic3ZuLl9jb3JlLlN1YnZlcnNpb25FeGNlcHRpb24iLCBOVUxMLCBOVUxMKTsKKyAgICB9CisK KyAgLyogUmVnYXJkbGVzcywgcmV0dXJuIHRoZSBleGNlcHRpb24gY2xhc3MuICovCisgIHJldHVy biBzdm5fc3dpZ19weV9leGNlcHRpb25fdHlwZSgpOworfQorCit2b2lkIHN2bl9zd2lnX3B5X3N2 bl9leGNlcHRpb24oc3ZuX2Vycm9yX3QgKmVycikKK3sKKyAgUHlPYmplY3QgKmV4Y19vYiwgKmFw cl9lcnJfb2I7CisKKyAgaWYgKGVyciA9PSBOVUxMKQorICAgIHJldHVybjsKKworICAvKiBNYWtl IGFuIGludGVnZXIgZm9yIHRoZSBlcnJvciBjb2RlLiAqLworICBhcHJfZXJyX29iID0gUHlJbnRf RnJvbUxvbmcoZXJyLT5hcHJfZXJyKTsKKyAgaWYgKGFwcl9lcnJfb2IgPT0gTlVMTCkKKyAgICBy ZXR1cm47CisKKyAgLyogSW5zdGFudGlhdGUgYSBTdWJ2ZXJzaW9uRXhjZXB0aW9uIG9iamVjdC4g Ki8KKyAgZXhjX29iID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKFN1YnZlcnNpb25FeGNlcHRpb24s IChjaGFyICopInNPIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyci0+bWVz c2FnZSwgYXByX2Vycl9vYik7CisgIGlmIChleGNfb2IgPT0gTlVMTCkKKyAgICB7CisgICAgICBQ eV9ERUNSRUYoYXByX2Vycl9vYik7CisgICAgICByZXR1cm47CisgICAgfQorCisgIC8qIFNldCB0 aGUgImFwcl9lcnIiIGF0dHJpYnV0ZSBvZiB0aGUgZXhjZXB0aW9uIHRvIG91ciBlcnJvciBjb2Rl LiAqLworICBpZiAoUHlPYmplY3RfU2V0QXR0clN0cmluZyhleGNfb2IsIChjaGFyICopImFwcl9l cnIiLCBhcHJfZXJyX29iKSA9PSAtMSkKKyAgICB7CisgICAgICBQeV9ERUNSRUYoYXByX2Vycl9v Yik7CisgICAgICBQeV9ERUNSRUYoZXhjX29iKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAg LyogRmluaXNoZWQgd2l0aCB0aGUgYXByX2VyciBvYmplY3QuICovCisgIFB5X0RFQ1JFRihhcHJf ZXJyX29iKTsKKworICAvKiBTZXQgdGhlIGVycm9yIHN0YXRlIHRvIG91ciBleGNlcHRpb24gb2Jq ZWN0LiAqLworICBQeUVycl9TZXRPYmplY3QoU3VidmVyc2lvbkV4Y2VwdGlvbiwgZXhjX29iKTsK KworICAvKiBGaW5pc2hlZCB3aXRoIHRoZSBleGNfb2Igb2JqZWN0LiAqLworICBQeV9ERUNSRUYo ZXhjX29iKTsKK30KKworCisMCisvKioqIEhlbHBlci9Db252ZXJzaW9uIFJvdXRpbmVzICoqKi8K KworLyogRnVuY3Rpb25zIGZvciBtYWtpbmcgUHl0aG9uIHdyYXBwZXJzIGFyb3VuZCBTdWJ2ZXJz aW9uIHN0cnVjdHMgKi8KK3N0YXRpYyBQeU9iamVjdCAqbWFrZV9vYl9wb29sKHZvaWQgKnBvb2wp Cit7CisgIC8qIFJldHVybiBhIGJyYW5kIG5ldyBkZWZhdWx0IHBvb2wgdG8gUHl0aG9uLiBUaGlz IHBvb2wgaXNuJ3QKKyAgICogbm9ybWFsbHkgdXNlZCBmb3IgYW55dGhpbmcuIEl0J3MganVzdCBo ZXJlIGZvciBjb21wYXRpYmlsaXR5CisgICAqIHdpdGggU3VidmVyc2lvbiAxLjIuICovCisgIGFw cl9wb29sX3QgKm5ld19wb29sID0gc3ZuX3Bvb2xfY3JlYXRlKF9nbG9iYWxfcG9vbCk7CisgIFB5 T2JqZWN0ICpuZXdfcHlfcG9vbCA9IHN2bl9zd2lnX05ld1BvaW50ZXJPYmoobmV3X3Bvb2wsCisg ICAgc3ZuX3N3aWdfVHlwZVF1ZXJ5KCJhcHJfcG9vbF90ICoiKSwgX2dsb2JhbF9zdm5fc3dpZ19w eV9wb29sKTsKKyAgKHZvaWQpIHBvb2w7IC8qIFNpbGVuY2UgY29tcGlsZXIgd2FybmluZ3MgYWJv dXQgdW51c2VkIHBhcmFtZXRlci4gKi8KKyAgcmV0dXJuIG5ld19weV9wb29sOworfQorc3RhdGlj IFB5T2JqZWN0ICptYWtlX29iX2ZzX3Jvb3Qoc3ZuX2ZzX3Jvb3RfdCAqcHRyLCBQeU9iamVjdCAq cHlfcG9vbCkKK3sKKyAgcmV0dXJuIHN2bl9zd2lnX05ld1BvaW50ZXJPYmpTdHJpbmcocHRyLCAi c3ZuX2ZzX3Jvb3RfdCAqIiwgcHlfcG9vbCk7Cit9CisvKioqLworCisvKiBDb252ZXJzaW9uIGZy b20gUHl0aG9uIHNpbmdsZSBvYmplY3RzIChub3QgaGFzaGVzL2xpc3RzL2V0Yy4pIHRvCisgICBT dWJ2ZXJzaW9uIHR5cGVzLiAqLworc3RhdGljIGNvbnN0IGNoYXIgKm1ha2Vfc3RyaW5nX2Zyb21f b2IoUHlPYmplY3QgKm9iLCBhcHJfcG9vbF90ICpwb29sKQoreworICBpZiAob2IgPT0gUHlfTm9u ZSkKKyAgICByZXR1cm4gTlVMTDsKKyAgaWYgKCEgUHlTdHJpbmdfQ2hlY2sob2IpKQorICAgIHsK KyAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJub3QgYSBzdHJpbmciKTsK KyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgcmV0dXJuIGFwcl9wc3RyZHVwKHBvb2wsIFB5 U3RyaW5nX0FTX1NUUklORyhvYikpOworfQorc3RhdGljIHN2bl9zdHJpbmdfdCAqbWFrZV9zdm5f c3RyaW5nX2Zyb21fb2IoUHlPYmplY3QgKm9iLCBhcHJfcG9vbF90ICpwb29sKQoreworICBpZiAo b2IgPT0gUHlfTm9uZSkKKyAgICByZXR1cm4gTlVMTDsKKyAgaWYgKCEgUHlTdHJpbmdfQ2hlY2so b2IpKQorICAgIHsKKyAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJub3Qg YSBzdHJpbmciKTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgcmV0dXJuIHN2bl9zdHJp bmdfY3JlYXRlKFB5U3RyaW5nX0FTX1NUUklORyhvYiksIHBvb2wpOworfQorCisKKy8qKiovCisK K3N0YXRpYyBQeU9iamVjdCAqY29udmVydF9oYXNoKGFwcl9oYXNoX3QgKmhhc2gsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqICgqY29udmVydGVyX2Z1bmMpKHZvaWQg KnZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB2b2lkICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpweV9wb29sKSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHZvaWQgKmN0eCwgUHlPYmplY3QgKnB5X3Bvb2wpCit7CisgICAg YXByX2hhc2hfaW5kZXhfdCAqaGk7CisgICAgUHlPYmplY3QgKmRpY3QgPSBQeURpY3RfTmV3KCk7 CisKKyAgICBpZiAoZGljdCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGZv ciAoaGkgPSBhcHJfaGFzaF9maXJzdChOVUxMLCBoYXNoKTsgaGk7IGhpID0gYXByX2hhc2hfbmV4 dChoaSkpCisgICAgICB7CisgICAgICAgIGNvbnN0IHZvaWQgKmtleTsKKyAgICAgICAgdm9pZCAq dmFsOworICAgICAgICBQeU9iamVjdCAqdmFsdWU7CisKKyAgICAgICAgYXByX2hhc2hfdGhpcyho aSwgJmtleSwgTlVMTCwgJnZhbCk7CisgICAgICAgIHZhbHVlID0gKCpjb252ZXJ0ZXJfZnVuYyko dmFsLCBjdHgsIHB5X3Bvb2wpOworICAgICAgICBpZiAodmFsdWUgPT0gTlVMTCkKKyAgICAgICAg ICB7CisgICAgICAgICAgICBQeV9ERUNSRUYoZGljdCk7CisgICAgICAgICAgICByZXR1cm4gTlVM TDsKKyAgICAgICAgICB9CisgICAgICAgIC8qICMjIyBnb3R0YSBjYXN0IHRoaXMgdGhpbmcgY3V6 IFB5dGhvbiBkb2Vzbid0IHVzZSAiY29uc3QiICovCisgICAgICAgIGlmIChQeURpY3RfU2V0SXRl bVN0cmluZyhkaWN0LCAoY2hhciAqKWtleSwgdmFsdWUpID09IC0xKQorICAgICAgICAgIHsKKyAg ICAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CisgICAgICAgICAgICBQeV9ERUNSRUYoZGljdCk7 CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JF Rih2YWx1ZSk7CisgICAgICB9CisKKyAgICByZXR1cm4gZGljdDsKK30KKworc3RhdGljIFB5T2Jq ZWN0ICpjb252ZXJ0X3RvX3N3aWd0eXBlKHZvaWQgKnZhbHVlLCB2b2lkICpjdHgsIFB5T2JqZWN0 ICpweV9wb29sKQoreworICAvKiBjdHggaXMgYSAnc3dpZ190eXBlX2luZm8gKicgKi8KKyAgcmV0 dXJuIHN2bl9zd2lnX05ld1BvaW50ZXJPYmoodmFsdWUsIGN0eCwgcHlfcG9vbCk7Cit9CisKK3N0 YXRpYyBQeU9iamVjdCAqY29udmVydF9zdm5fc3RyaW5nX3Qodm9pZCAqdmFsdWUsIHZvaWQgKmN0 eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKnB5X3Bv b2wpCit7CisgIC8qIGN0eCBpcyB1bnVzZWQgKi8KKworICBjb25zdCBzdm5fc3RyaW5nX3QgKnMg PSB2YWx1ZTsKKworICAvKiAjIyMgZ290dGEgY2FzdCB0aGlzIHRoaW5nIGN1eiBQeXRob24gZG9l c24ndCB1c2UgImNvbnN0IiAqLworICByZXR1cm4gUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUo KHZvaWQgKilzLT5kYXRhLCBzLT5sZW4pOworfQorCitzdGF0aWMgUHlPYmplY3QgKmNvbnZlcnRf c3ZuX2NsaWVudF9jb21taXRfaXRlbV90KHZvaWQgKnZhbHVlLCB2b2lkICpjdHgpCit7CisgIFB5 T2JqZWN0ICpsaXN0OworICBQeU9iamVjdCAqcGF0aCwgKmtpbmQsICp1cmwsICpyZXYsICpjZl91 cmwsICpzdGF0ZTsKKyAgc3ZuX2NsaWVudF9jb21taXRfaXRlbV90ICppdGVtID0gdmFsdWU7CisK KyAgLyogY3R4IGlzIHVudXNlZCAqLworCisgIGxpc3QgPSBQeUxpc3RfTmV3KDYpOworCisgIGlm IChpdGVtLT5wYXRoKQorICAgIHBhdGggPSBQeVN0cmluZ19Gcm9tU3RyaW5nKGl0ZW0tPnBhdGgp OworICBlbHNlCisgICAgeworICAgICAgcGF0aCA9IFB5X05vbmU7CisgICAgICBQeV9JTkNSRUYo UHlfTm9uZSk7CisgICAgfQorCisgIGlmIChpdGVtLT51cmwpCisgICAgdXJsID0gUHlTdHJpbmdf RnJvbVN0cmluZyhpdGVtLT51cmwpOworICBlbHNlCisgICAgeworICAgICAgdXJsID0gUHlfTm9u ZTsKKyAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKKyAgICB9CisKKyAgaWYgKGl0ZW0tPmNvcHlm cm9tX3VybCkKKyAgICBjZl91cmwgPSBQeVN0cmluZ19Gcm9tU3RyaW5nKGl0ZW0tPmNvcHlmcm9t X3VybCk7CisgIGVsc2UKKyAgICB7CisgICAgICBjZl91cmwgPSBQeV9Ob25lOworICAgICAgUHlf SU5DUkVGKFB5X05vbmUpOworICAgIH0KKworICBraW5kID0gUHlJbnRfRnJvbUxvbmcoaXRlbS0+ a2luZCk7CisgIHJldiA9IFB5SW50X0Zyb21Mb25nKGl0ZW0tPnJldmlzaW9uKTsKKyAgc3RhdGUg PSBQeUludF9Gcm9tTG9uZyhpdGVtLT5zdGF0ZV9mbGFncyk7CisKKyAgaWYgKCEgKGxpc3QgJiYg cGF0aCAmJiBraW5kICYmIHVybCAmJiByZXYgJiYgY2ZfdXJsICYmIHN0YXRlKSkKKyAgICB7Cisg ICAgICBQeV9YREVDUkVGKGxpc3QpOworICAgICAgUHlfWERFQ1JFRihwYXRoKTsKKyAgICAgIFB5 X1hERUNSRUYoa2luZCk7CisgICAgICBQeV9YREVDUkVGKHVybCk7CisgICAgICBQeV9YREVDUkVG KHJldik7CisgICAgICBQeV9YREVDUkVGKGNmX3VybCk7CisgICAgICBQeV9YREVDUkVGKHN0YXRl KTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICBQeUxpc3RfU0VUX0lURU0obGlzdCwg MCwgcGF0aCk7CisgIFB5TGlzdF9TRVRfSVRFTShsaXN0LCAxLCBraW5kKTsKKyAgUHlMaXN0X1NF VF9JVEVNKGxpc3QsIDIsIHVybCk7CisgIFB5TGlzdF9TRVRfSVRFTShsaXN0LCAzLCByZXYpOwor ICBQeUxpc3RfU0VUX0lURU0obGlzdCwgNCwgY2ZfdXJsKTsKKyAgUHlMaXN0X1NFVF9JVEVNKGxp c3QsIDUsIHN0YXRlKTsKKyAgcmV0dXJuIGxpc3Q7Cit9CisKK1B5T2JqZWN0ICpzdm5fc3dpZ19w eV9wcm9waGFzaF90b19kaWN0KGFwcl9oYXNoX3QgKmhhc2gpCit7CisgIHJldHVybiBjb252ZXJ0 X2hhc2goaGFzaCwgY29udmVydF9zdm5fc3RyaW5nX3QsIE5VTEwsIE5VTEwpOworfQorCitzdGF0 aWMgUHlPYmplY3QgKnByb3BhcnJheV90b19kaWN0KGNvbnN0IGFwcl9hcnJheV9oZWFkZXJfdCAq YXJyYXkpCit7CisgICAgUHlPYmplY3QgKmRpY3QgPSBQeURpY3RfTmV3KCk7CisgICAgaW50IGk7 CisKKyAgICBpZiAoZGljdCA9PSBOVUxMKQorICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBmb3Ig KGkgPSAwOyBpIDwgYXJyYXktPm5lbHRzOyArK2kpCisgICAgICB7CisgICAgICAgIHN2bl9wcm9w X3QgcHJvcDsKKyAgICAgICAgUHlPYmplY3QgKnB5X2tleSwgKnB5X3ZhbHVlOworCisgICAgICAg IHByb3AgPSBBUFJfQVJSQVlfSURYKGFycmF5LCBpLCBzdm5fcHJvcF90KTsKKworICAgICAgICBw eV9rZXkgPSBQeVN0cmluZ19Gcm9tU3RyaW5nKHByb3AubmFtZSk7CisgICAgICAgIGlmIChweV9r ZXkgPT0gTlVMTCkKKyAgICAgICAgICBnb3RvIGVycm9yOworCisgICAgICAgIGlmIChwcm9wLnZh bHVlID09IE5VTEwpCisgICAgICAgICAgeworICAgICAgICAgICAgIHB5X3ZhbHVlID0gUHlfTm9u ZTsKKyAgICAgICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CisgICAgICAgICAgfQorICAgICAg ICBlbHNlCisgICAgICAgICAgeworICAgICAgICAgICAgIHB5X3ZhbHVlID0gUHlTdHJpbmdfRnJv bVN0cmluZ0FuZFNpemUoKHZvaWQgKilwcm9wLnZhbHVlLT5kYXRhLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcC52YWx1ZS0+bGVuKTsKKyAg ICAgICAgICAgICBpZiAocHlfdmFsdWUgPT0gTlVMTCkKKyAgICAgICAgICAgICAgIHsKKyAgICAg ICAgICAgICAgICAgUHlfREVDUkVGKHB5X2tleSk7CisgICAgICAgICAgICAgICAgICBnb3RvIGVy cm9yOworICAgICAgICAgICAgICAgfQorICAgICAgICAgIH0KKworICAgICAgICBQeURpY3RfU2V0 SXRlbShkaWN0LCBweV9rZXksIHB5X3ZhbHVlKTsKKyAgICB9CisKKyAgICByZXR1cm4gZGljdDsK KworICBlcnJvcjoKKyAgICBQeV9ERUNSRUYoZGljdCk7CisgICAgcmV0dXJuIE5VTEw7CisKK30K KworCitQeU9iamVjdCAqc3ZuX3N3aWdfcHlfbG9jYXRpb25oYXNoX3RvX2RpY3QoYXByX2hhc2hf dCAqaGFzaCkKK3sKKyAgICAvKiBOZWVkIHNwZWNpYWwgY29kZSBmb3IgdGhpcyBiZWNhdXNlIG9m IHRoZSBkYXJuZWQgc3ZuX3Jldm51bV90CisgICAgICAga2V5cy4gKi8KKyAgICBhcHJfaGFzaF9p bmRleF90ICpoaTsKKyAgICBQeU9iamVjdCAqZGljdCA9IFB5RGljdF9OZXcoKTsKKworICAgIGlm IChkaWN0ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgZm9yIChoaSA9IGFw cl9oYXNoX2ZpcnN0KE5VTEwsIGhhc2gpOyBoaTsgaGkgPSBhcHJfaGFzaF9uZXh0KGhpKSkKKyAg ICAgIHsKKyAgICAgICAgY29uc3Qgdm9pZCAqazsKKyAgICAgICAgdm9pZCAqdjsKKyAgICAgICAg UHlPYmplY3QgKmtleSwgKnZhbHVlOworCisgICAgICAgIGFwcl9oYXNoX3RoaXMoaGksICZrLCBO VUxMLCAmdik7CisgICAgICAgIGtleSA9IFB5TG9uZ19Gcm9tTG9uZygqKHN2bl9yZXZudW1fdCAq KWspOworICAgICAgICBpZiAoa2V5ID09IE5VTEwpCisgICAgICAgICAgeworICAgICAgICAgICAg UHlfREVDUkVGKGRpY3QpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgfQor ICAgICAgICB2YWx1ZSA9IFB5U3RyaW5nX0Zyb21TdHJpbmcoKGNoYXIgKil2KTsKKyAgICAgICAg aWYgKHZhbHVlID09IE5VTEwpCisgICAgICAgICAgeworICAgICAgICAgICAgUHlfREVDUkVGKGtl eSk7CisgICAgICAgICAgICBQeV9ERUNSRUYoZGljdCk7CisgICAgICAgICAgICByZXR1cm4gTlVM TDsKKyAgICAgICAgICB9CisgICAgICAgIGlmIChQeURpY3RfU2V0SXRlbShkaWN0LCBrZXksIHZh bHVlKSA9PSAtMSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBQeV9ERUNSRUYodmFsdWUpOwor ICAgICAgICAgICAgUHlfREVDUkVGKGRpY3QpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7Cisg ICAgICAgICAgfQorICAgICAgICBQeV9ERUNSRUYodmFsdWUpOworICAgICAgICBQeV9ERUNSRUYo a2V5KTsKKyAgICAgIH0KKyAgICByZXR1cm4gZGljdDsKK30KKworUHlPYmplY3QgKnN2bl9zd2ln X3B5X2NvbnZlcnRfaGFzaChhcHJfaGFzaF90ICpoYXNoLCBzd2lnX3R5cGVfaW5mbyAqdHlwZSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKnB5X3Bvb2wpCit7 CisgIHJldHVybiBjb252ZXJ0X2hhc2goaGFzaCwgY29udmVydF90b19zd2lndHlwZSwgdHlwZSwg cHlfcG9vbCk7Cit9CisKKyNkZWZpbmUgREVDTEFSRV9TV0lHX0NPTlNUUlVDVE9SKHR5cGUsIGR1 cCkgXAorc3RhdGljIFB5T2JqZWN0ICptYWtlX29iXyMjdHlwZSh2b2lkICp2YWx1ZSkgXAoreyBc CisgIGFwcl9wb29sX3QgKm5ld19wb29sID0gc3ZuX3Bvb2xfY3JlYXRlKF9nbG9iYWxfcG9vbCk7 IFwKKyAgUHlPYmplY3QgKm5ld19weV9wb29sID0gc3ZuX3N3aWdfTmV3UG9pbnRlck9iaihuZXdf cG9vbCwgXAorICAgIHN2bl9zd2lnX1R5cGVRdWVyeSgiYXByX3Bvb2xfdCAqIiksIF9nbG9iYWxf c3ZuX3N3aWdfcHlfcG9vbCk7IFwKKyAgc3ZuXyMjdHlwZSMjX3QgKm5ld192YWx1ZSA9IGR1cCh2 YWx1ZSwgbmV3X3Bvb2wpOyBcCisgIHJldHVybiBzdm5fc3dpZ19OZXdQb2ludGVyT2JqU3RyaW5n KG5ld192YWx1ZSwgInN2bl8iICN0eXBlICJfdCAqIiwgXAorICAgICAgbmV3X3B5X3Bvb2wpOyBc Cit9CisKK0RFQ0xBUkVfU1dJR19DT05TVFJVQ1RPUih0eGRlbHRhX3dpbmRvdywgc3ZuX3R4ZGVs dGFfd2luZG93X2R1cCkKK0RFQ0xBUkVfU1dJR19DT05TVFJVQ1RPUihsb2dfY2hhbmdlZF9wYXRo LCBzdm5fbG9nX2NoYW5nZWRfcGF0aF9kdXApCitERUNMQVJFX1NXSUdfQ09OU1RSVUNUT1Iod2Nf c3RhdHVzLCBzdm5fd2NfZHVwX3N0YXR1cykKK0RFQ0xBUkVfU1dJR19DT05TVFJVQ1RPUihsb2Nr LCBzdm5fbG9ja19kdXApCitERUNMQVJFX1NXSUdfQ09OU1RSVUNUT1IoYXV0aF9zc2xfc2VydmVy X2NlcnRfaW5mbywKKyAgICBzdm5fYXV0aF9zc2xfc2VydmVyX2NlcnRfaW5mb19kdXApCitERUNM QVJFX1NXSUdfQ09OU1RSVUNUT1IoaW5mbywgc3ZuX2luZm9fZHVwKQorREVDTEFSRV9TV0lHX0NP TlNUUlVDVE9SKGNvbW1pdF9pbmZvLCBzdm5fY29tbWl0X2luZm9fZHVwKQorREVDTEFSRV9TV0lH X0NPTlNUUlVDVE9SKHdjX25vdGlmeSwgc3ZuX3djX2R1cF9ub3RpZnkpCisKK3N0YXRpYyBQeU9i amVjdCAqY29udmVydF9sb2dfY2hhbmdlZF9wYXRoKHZvaWQgKnZhbHVlLCB2b2lkICpjdHgsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqcHlfcG9v bCkKK3sKKyAgcmV0dXJuIG1ha2Vfb2JfbG9nX2NoYW5nZWRfcGF0aCh2YWx1ZSk7Cit9CisKK1B5 T2JqZWN0ICpzdm5fc3dpZ19weV9jX3N0cmluZ3NfdG9fbGlzdChjaGFyICoqc3RyaW5ncykKK3sK KyAgICBQeU9iamVjdCAqbGlzdCA9IFB5TGlzdF9OZXcoMCk7CisgICAgY2hhciAqczsKKworICAg IHdoaWxlICgocyA9ICpzdHJpbmdzKyspICE9IE5VTEwpCisgICAgICB7CisgICAgICAgIFB5T2Jq ZWN0ICpvYiA9IFB5U3RyaW5nX0Zyb21TdHJpbmcocyk7CisKKyAgICAgICAgaWYgKG9iID09IE5V TEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChs aXN0LCBvYikgPT0gLTEpCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgfQorCisgICAg cmV0dXJuIGxpc3Q7CisKKyAgZXJyb3I6CisgICAgUHlfREVDUkVGKGxpc3QpOworICAgIHJldHVy biBOVUxMOworfQorCithcHJfaGFzaF90ICpzdm5fc3dpZ19weV9zdHJpbmdoYXNoX2Zyb21fZGlj dChQeU9iamVjdCAqZGljdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGFwcl9wb29sX3QgKnBvb2wpCit7CisgIGFwcl9oYXNoX3QgKmhhc2g7CisgIFB5T2Jq ZWN0ICprZXlzOworICBpbnQgaSwgbnVtX2tleXM7CisKKyAgaWYgKGRpY3QgPT0gUHlfTm9uZSkK KyAgICByZXR1cm4gTlVMTDsKKworICBpZiAoIVB5RGljdF9DaGVjayhkaWN0KSkKKyAgICB7Cisg ICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAibm90IGEgZGljdGlvbmFyeSIp OworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgIGhhc2ggPSBhcHJfaGFzaF9tYWtlKHBv b2wpOworICBrZXlzID0gUHlEaWN0X0tleXMoZGljdCk7CisgIG51bV9rZXlzID0gUHlMaXN0X1Np emUoa2V5cyk7CisgIGZvciAoaSA9IDA7IGkgPCBudW1fa2V5czsgaSsrKQorICAgIHsKKyAgICAg IFB5T2JqZWN0ICprZXkgPSBQeUxpc3RfR2V0SXRlbShrZXlzLCBpKTsKKyAgICAgIFB5T2JqZWN0 ICp2YWx1ZSA9IFB5RGljdF9HZXRJdGVtKGRpY3QsIGtleSk7CisgICAgICBjb25zdCBjaGFyICpw cm9wbmFtZSA9IG1ha2Vfc3RyaW5nX2Zyb21fb2Ioa2V5LCBwb29sKTsKKyAgICAgIGNvbnN0IGNo YXIgKnByb3B2YWwgPSBtYWtlX3N0cmluZ19mcm9tX29iKHZhbHVlLCBwb29sKTsKKyAgICAgIFB5 X0RFQ1JFRihrZXkpOworICAgICAgUHlfREVDUkVGKHZhbHVlKTsKKyAgICAgIGlmICghIChwcm9w bmFtZSAmJiBwcm9wdmFsKSkKKyAgICAgICAgeworICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQ eUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJkaWN0aW9uYXJ5IGtl eXMvdmFsdWVzIGFyZW4ndCBzdHJpbmdzIik7CisgICAgICAgICAgUHlfREVDUkVGKGtleXMpOwor ICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICBhcHJfaGFzaF9zZXQoaGFz aCwgcHJvcG5hbWUsIEFQUl9IQVNIX0tFWV9TVFJJTkcsIHByb3B2YWwpOworICAgIH0KKyAgUHlf REVDUkVGKGtleXMpOworICByZXR1cm4gaGFzaDsKK30KKworCithcHJfaGFzaF90ICpzdm5fc3dp Z19weV9wcm9waGFzaF9mcm9tX2RpY3QoUHlPYmplY3QgKmRpY3QsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgYXByX2hh c2hfdCAqaGFzaDsKKyAgUHlPYmplY3QgKmtleXM7CisgIGludCBpLCBudW1fa2V5czsKKworICBp ZiAoZGljdCA9PSBQeV9Ob25lKQorICAgIHJldHVybiBOVUxMOworCisgIGlmICghUHlEaWN0X0No ZWNrKGRpY3QpKQorICAgIHsKKyAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3Is ICJub3QgYSBkaWN0aW9uYXJ5Iik7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgaGFz aCA9IGFwcl9oYXNoX21ha2UocG9vbCk7CisgIGtleXMgPSBQeURpY3RfS2V5cyhkaWN0KTsKKyAg bnVtX2tleXMgPSBQeUxpc3RfU2l6ZShrZXlzKTsKKyAgZm9yIChpID0gMDsgaSA8IG51bV9rZXlz OyBpKyspCisgICAgeworICAgICAgUHlPYmplY3QgKmtleSA9IFB5TGlzdF9HZXRJdGVtKGtleXMs IGkpOworICAgICAgUHlPYmplY3QgKnZhbHVlID0gUHlEaWN0X0dldEl0ZW0oZGljdCwga2V5KTsK KyAgICAgIGNvbnN0IGNoYXIgKnByb3BuYW1lID0gbWFrZV9zdHJpbmdfZnJvbV9vYihrZXksIHBv b2wpOworICAgICAgc3ZuX3N0cmluZ190ICpwcm9wdmFsID0gbWFrZV9zdm5fc3RyaW5nX2Zyb21f b2IodmFsdWUsIHBvb2wpOworICAgICAgUHlfREVDUkVGKGtleSk7CisgICAgICBQeV9ERUNSRUYo dmFsdWUpOworICAgICAgaWYgKCEgKHByb3BuYW1lICYmIHByb3B2YWwpKQorICAgICAgICB7Cisg ICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgImRpY3Rpb25hcnkga2V5cy92YWx1ZXMgYXJlbid0IHN0cmluZ3MiKTsKKyAg ICAgICAgICBQeV9ERUNSRUYoa2V5cyk7CisgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAg IH0KKyAgICAgIGFwcl9oYXNoX3NldChoYXNoLCBwcm9wbmFtZSwgQVBSX0hBU0hfS0VZX1NUUklO RywgcHJvcHZhbCk7CisgICAgfQorICBQeV9ERUNSRUYoa2V5cyk7CisgIHJldHVybiBoYXNoOwor fQorCisKK2NvbnN0IGFwcl9hcnJheV9oZWFkZXJfdCAqc3ZuX3N3aWdfcHlfc3RyaW5nc190b19h cnJheShQeU9iamVjdCAqc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpCit7CisgICAgaW50IHRhcmds ZW47CisgICAgYXByX2FycmF5X2hlYWRlcl90ICp0ZW1wOworCisgICAgaWYgKCFQeVNlcXVlbmNl X0NoZWNrKHNvdXJjZSkpCisgICAgICB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19U eXBlRXJyb3IsICJub3QgYSBzZXF1ZW5jZSIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAg IH0KKyAgICB0YXJnbGVuID0gUHlTZXF1ZW5jZV9MZW5ndGgoc291cmNlKTsKKyAgICB0ZW1wID0g YXByX2FycmF5X21ha2UocG9vbCwgdGFyZ2xlbiwgc2l6ZW9mKGNvbnN0IGNoYXIgKikpOworICAg IC8qIEFQUl9BUlJBWV9JRFggZG9lc24ndCBhY3R1YWxseSBpbmNyZW1lbnQgdGhlIGFycmF5IGl0 ZW0gY291bnQKKyAgICAgICAobGlrZSwgc2F5LCBhcHJfYXJyYXlfcHVzaCB3b3VsZCkuICovCisg ICAgdGVtcC0+bmVsdHMgPSB0YXJnbGVuOworICAgIHdoaWxlICh0YXJnbGVuLS0pCisgICAgICB7 CisgICAgICAgIFB5T2JqZWN0ICpvID0gUHlTZXF1ZW5jZV9HZXRJdGVtKHNvdXJjZSwgdGFyZ2xl bik7CisgICAgICAgIGlmIChvID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAg ICAgICAgaWYgKCFQeVN0cmluZ19DaGVjayhvKSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBQ eV9ERUNSRUYobyk7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9y LCAibm90IGEgc3RyaW5nIik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICB9 CisgICAgICAgIEFQUl9BUlJBWV9JRFgodGVtcCwgdGFyZ2xlbiwgY29uc3QgY2hhciAqKSA9IFB5 U3RyaW5nX0FTX1NUUklORyhvKTsKKyAgICAgICAgUHlfREVDUkVGKG8pOworICAgICAgfQorICAg IHJldHVybiB0ZW1wOworfQorCisKK2NvbnN0IGFwcl9hcnJheV9oZWFkZXJfdCAqc3ZuX3N3aWdf cHlfcmV2bnVtc190b19hcnJheShQeU9iamVjdCAqc291cmNlLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpCit7 CisgICAgaW50IHRhcmdsZW47CisgICAgYXByX2FycmF5X2hlYWRlcl90ICp0ZW1wOworCisgICAg aWYgKCFQeVNlcXVlbmNlX0NoZWNrKHNvdXJjZSkpCisgICAgICB7CisgICAgICAgIFB5RXJyX1Nl dFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJub3QgYSBzZXF1ZW5jZSIpOworICAgICAgICByZXR1 cm4gTlVMTDsKKyAgICAgIH0KKyAgICB0YXJnbGVuID0gUHlTZXF1ZW5jZV9MZW5ndGgoc291cmNl KTsKKyAgICB0ZW1wID0gYXByX2FycmF5X21ha2UocG9vbCwgdGFyZ2xlbiwgc2l6ZW9mKHN2bl9y ZXZudW1fdCkpOworICAgIC8qIEFQUl9BUlJBWV9JRFggZG9lc24ndCBhY3R1YWxseSBpbmNyZW1l bnQgdGhlIGFycmF5IGl0ZW0gY291bnQKKyAgICAgICAobGlrZSwgc2F5LCBhcHJfYXJyYXlfcHVz aCB3b3VsZCkuICovCisgICAgdGVtcC0+bmVsdHMgPSB0YXJnbGVuOworICAgIHdoaWxlICh0YXJn bGVuLS0pCisgICAgICB7CisgICAgICAgIFB5T2JqZWN0ICpvID0gUHlTZXF1ZW5jZV9HZXRJdGVt KHNvdXJjZSwgdGFyZ2xlbik7CisgICAgICAgIGlmIChvID09IE5VTEwpCisgICAgICAgICAgICBy ZXR1cm4gTlVMTDsKKyAgICAgICAgaWYgKFB5TG9uZ19DaGVjayhvKSkKKyAgICAgICAgICB7Cisg ICAgICAgICAgICBBUFJfQVJSQVlfSURYKHRlbXAsIHRhcmdsZW4sIHN2bl9yZXZudW1fdCkgPQor ICAgICAgICAgICAgICAoc3ZuX3Jldm51bV90KVB5TG9uZ19Bc0xvbmcobyk7CisgICAgICAgICAg fQorICAgICAgICBlbHNlIGlmIChQeUludF9DaGVjayhvKSkKKyAgICAgICAgICB7CisgICAgICAg ICAgICBBUFJfQVJSQVlfSURYKHRlbXAsIHRhcmdsZW4sIHN2bl9yZXZudW1fdCkgPQorICAgICAg ICAgICAgICAoc3ZuX3Jldm51bV90KVB5SW50X0FzTG9uZyhvKTsKKyAgICAgICAgICB9CisgICAg ICAgIGVsc2UKKyAgICAgICAgICB7CisgICAgICAgICAgICBQeV9ERUNSRUYobyk7CisgICAgICAg ICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAibm90IGFuIGludGVnZXIgdHlw ZSIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgfQorICAgICAgICBQeV9E RUNSRUYobyk7CisgICAgfQorICAgIHJldHVybiB0ZW1wOworfQorCisKKwwKKy8qKiogYXByX2Fy cmF5X2hlYWRlcl90IGNvbnZlcnNpb25zLiAgVG8gY3JlYXRlIGEgbmV3IHR5cGUgb2YKKyAgICAg Y29udmVydGVyLCBzaW1wbHkgY29weS1uLXBhc3RlIG9uZSBvZiB0aGVzZSBmdW5jdGlvbiBhbmQg dHdlYWsKKyAgICAgdGhlIGNyZWF0aW9uIG9mIHRoZSBQeU9iamVjdCAqb2IuICAqKiovCisKK1B5 T2JqZWN0ICpzdm5fc3dpZ19weV9hcnJheV90b19saXN0KGNvbnN0IGFwcl9hcnJheV9oZWFkZXJf dCAqYXJyYXkpCit7CisgICAgUHlPYmplY3QgKmxpc3QgPSBQeUxpc3RfTmV3KGFycmF5LT5uZWx0 cyk7CisgICAgaW50IGk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgYXJyYXktPm5lbHRzOyArK2kp CisgICAgICB7CisgICAgICAgIFB5T2JqZWN0ICpvYiA9CisgICAgICAgICAgUHlTdHJpbmdfRnJv bVN0cmluZyhBUFJfQVJSQVlfSURYKGFycmF5LCBpLCBjb25zdCBjaGFyICopKTsKKyAgICAgICAg aWYgKG9iID09IE5VTEwpCisgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgUHlMaXN0X1NF VF9JVEVNKGxpc3QsIGksIG9iKTsKKyAgICAgIH0KKyAgICByZXR1cm4gbGlzdDsKKworICBlcnJv cjoKKyAgICBQeV9ERUNSRUYobGlzdCk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIEZvcm1l cmx5IHVzZWQgYnkgcHJlLTEuMCBBUElzLiBOb3cgdW51c2VkCitQeU9iamVjdCAqc3ZuX3N3aWdf cHlfcmV2YXJyYXlfdG9fbGlzdChjb25zdCBhcHJfYXJyYXlfaGVhZGVyX3QgKmFycmF5KQorewor ICAgIFB5T2JqZWN0ICpsaXN0ID0gUHlMaXN0X05ldyhhcnJheS0+bmVsdHMpOworICAgIGludCBp OworCisgICAgZm9yIChpID0gMDsgaSA8IGFycmF5LT5uZWx0czsgKytpKQorICAgICAgeworICAg ICAgICBQeU9iamVjdCAqb2IKKyAgICAgICAgICA9IFB5SW50X0Zyb21Mb25nKEFQUl9BUlJBWV9J RFgoYXJyYXksIGksIHN2bl9yZXZudW1fdCkpOworICAgICAgICBpZiAob2IgPT0gTlVMTCkKKyAg ICAgICAgICBnb3RvIGVycm9yOworICAgICAgICBQeUxpc3RfU0VUX0lURU0obGlzdCwgaSwgb2Ip OworICAgICAgfQorICAgIHJldHVybiBsaXN0OworCisgIGVycm9yOgorICAgIFB5X0RFQ1JFRihs aXN0KTsKKyAgICByZXR1cm4gTlVMTDsKK30KKyovCisKK3N0YXRpYyBQeU9iamVjdCAqCitjb21t aXRfaXRlbV9hcnJheV90b19saXN0KGNvbnN0IGFwcl9hcnJheV9oZWFkZXJfdCAqYXJyYXkpCit7 CisgICAgUHlPYmplY3QgKmxpc3QgPSBQeUxpc3RfTmV3KGFycmF5LT5uZWx0cyk7CisgICAgaW50 IGk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgYXJyYXktPm5lbHRzOyArK2kpCisgICAgICB7Cisg ICAgICAgIFB5T2JqZWN0ICpvYiA9IGNvbnZlcnRfc3ZuX2NsaWVudF9jb21taXRfaXRlbV90Cisg ICAgICAgICAgKEFQUl9BUlJBWV9JRFgoYXJyYXksIGksIHN2bl9jbGllbnRfY29tbWl0X2l0ZW1f dCAqKSwgTlVMTCk7CisgICAgICAgIGlmIChvYiA9PSBOVUxMKQorICAgICAgICAgIGdvdG8gZXJy b3I7CisgICAgICAgIFB5TGlzdF9TRVRfSVRFTShsaXN0LCBpLCBvYik7CisgICAgICB9CisgICAg cmV0dXJuIGxpc3Q7CisKKyAgZXJyb3I6CisgICAgUHlfREVDUkVGKGxpc3QpOworICAgIHJldHVy biBOVUxMOworfQorCisKKwwKKy8qKiogRXJyb3JzICoqKi8KKworLyogUmV0dXJuIGEgU3VidmVy c2lvbiBlcnJvciBhYm91dCBhIGZhaWxlZCBjYWxsYmFjay4gKi8KK3N0YXRpYyBzdm5fZXJyb3Jf dCAqY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKHZvaWQpCit7CisgIHJldHVybiBzdm5fZXJyb3Jf Y3JlYXRlKFNWTl9FUlJfU1dJR19QWV9FWENFUFRJT05fU0VULCBOVUxMLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAiUHl0aG9uIGNhbGxiYWNrIHJhaXNlZCBhbiBleGNlcHRpb24iKTsKK30K KworLyogUmFpc2UgYSBUeXBlRXJyb3IgZXhjZXB0aW9uIHdpdGggTUVTU0FHRSwgYW5kIHJldHVy biBhIFN1YnZlcnNpb24KKyAgIGVycm9yIGFib3V0IGFuIGludmFsaWQgcmV0dXJuIGZyb20gYSBj YWxsYmFjay4gKi8KK3N0YXRpYyBzdm5fZXJyb3JfdCAqY2FsbGJhY2tfYmFkX3JldHVybl9lcnJv cihjb25zdCBjaGFyICptZXNzYWdlKQoreworICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVy cm9yLCBtZXNzYWdlKTsKKyAgcmV0dXJuIHN2bl9lcnJvcl9jcmVhdGUoQVBSX0VHRU5FUkFMLCBO VUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiUHl0aG9uIGNhbGxiYWNrIHJldHVybmVk IGFuIGludmFsaWQgb2JqZWN0Iik7Cit9CisKKy8qIFJldHVybiBhIGdlbmVyaWMgZXJyb3IgYWJv dXQgbm90IGJlaW5nIGFibGUgdG8gbWFwIHR5cGVzLiAqLworc3RhdGljIHN2bl9lcnJvcl90ICp0 eXBlX2NvbnZlcnNpb25fZXJyb3IoY29uc3QgY2hhciAqZGF0YXR5cGUpCit7CisgIHJldHVybiBz dm5fZXJyb3JfY3JlYXRlZihBUFJfRUdFTkVSQUwsIE5VTEwsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAiRXJyb3IgY29udmVydGluZyBvYmplY3Qgb2YgdHlwZSAnJXMnIiwgZGF0YXR5cGUp OworfQorCisKKwwKKy8qKiogRWRpdG9yIFdyYXBwaW5nICoqKi8KKworLyogdGhpcyBiYXRvbiBp cyB1c2VkIGZvciB0aGUgZWRpdG9yLCBkaXJlY3RvcnksIGFuZCBmaWxlIGJhdG9ucy4gKi8KK3R5 cGVkZWYgc3RydWN0IHsKKyAgUHlPYmplY3QgKmVkaXRvcjsgICAgIC8qIHRoZSBlZGl0b3IgaGFu ZGxpbmcgdGhlIGNhbGxiYWNrcyAqLworICBQeU9iamVjdCAqYmF0b247ICAgICAgLyogdGhlIGRp ci9maWxlIGJhdG9uIChvciBOVUxMIGZvciBlZGl0IGJhdG9uKSAqLworfSBpdGVtX2JhdG9uOwor CitzdGF0aWMgaXRlbV9iYXRvbiAqbWFrZV9iYXRvbihhcHJfcG9vbF90ICpwb29sLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmVkaXRvciwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpiYXRvbikKK3sKKyAgaXRlbV9iYXRvbiAqbmV3YiA9 IGFwcl9wYWxsb2MocG9vbCwgc2l6ZW9mKCpuZXdiKSk7CisKKyAgLyogTm90ZTogV2Ugc3RlYWwg dGhlIGNhbGxlcidzIHJlZmVyZW5jZSB0byAnYmF0b24nLiBBbHNvLCB0byBhdm9pZAorICAgICBt ZW1vcnkgbGVha3MsIHdlIGJvcnJvdyB0aGUgY2FsbGVyJ3MgcmVmZXJlbmNlIHRvICdlZGl0b3In LiBJbiB0aGlzCisgICAgIGNhc2UsIGJvcnJvd2luZyB0aGUgcmVmZXJlbmNlIHRvICdlZGl0b3In IGlzIHNhZmUgYmVjYXVzZSB0aGUgY29udGVudHMKKyAgICAgb2YgYW4gaXRlbV9iYXRvbiBzdHJ1 Y3QgYXJlIG9ubHkgdXNlZCBieSBmdW5jdGlubyBjYWxscyB3aGljaCBvcGVyYXRlIG9uCisgICAg IHRoZSBlZGl0b3IgaXRzZWxmLiAqLworICBuZXdiLT5lZGl0b3IgPSBlZGl0b3I7CisgIG5ld2It PmJhdG9uID0gYmF0b247CisKKyAgcmV0dXJuIG5ld2I7Cit9CisKK3N0YXRpYyBzdm5fZXJyb3Jf dCAqY2xvc2VfYmF0b24odm9pZCAqYmF0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IGNoYXIgKm1ldGhvZCkKK3sKKyAgaXRlbV9iYXRvbiAqaWIgPSBiYXRvbjsKKyAg UHlPYmplY3QgKnJlc3VsdDsKKyAgc3ZuX2Vycm9yX3QgKmVycjsKKworICBzdm5fc3dpZ19weV9h Y3F1aXJlX3B5X2xvY2soKTsKKworICAvKiBJZiB0aGVyZSBpcyBubyBiYXRvbiBvYmplY3QsIHRo ZW4gaXQgaXMgYW4gZWRpdF9iYXRvbiwgYW5kIHdlIHNob3VsZAorICAgICBub3QgYm90aGVyIHRv IHBhc3MgYW4gb2JqZWN0LiBOb3RlIHRoYXQgd2Ugc3RpbGwgc2hvdmUgYSBOVUxMIG9udG8KKyAg ICAgdGhlIHN0YWNrLCBidXQgdGhlIGZvcm1hdCBzcGVjaWZpZWQganVzdCB3b24ndCByZWZlcmVu Y2UgaXQuICAqLworICAvKiAjIyMgcHl0aG9uIGRvZXNuJ3QgaGF2ZSAnY29uc3QnIG9uIHRoZSBt ZXRob2QgbmFtZSBhbmQgZm9ybWF0ICovCisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbE1l dGhvZChpYi0+ZWRpdG9yLCAoY2hhciAqKW1ldGhvZCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGliLT5iYXRvbiA/IChjaGFyICopIihPKSIgOiBOVUxMLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWItPmJhdG9uKSkgPT0gTlVMTCkKKyAgICB7Cisg ICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICAgIGdvdG8gZmluaXNo ZWQ7CisgICAgfQorCisgIC8qIHRoZXJlIGlzIG5vIHJldHVybiB2YWx1ZSwgc28ganVzdCB0b3Nz IHRoaXMgb2JqZWN0IChwcm9iYWJseSBQeV9Ob25lKSAqLworICBQeV9ERUNSRUYocmVzdWx0KTsK KworICAvKiBXZSdyZSBub3cgZG9uZSB3aXRoIHRoZSBiYXRvbi4gU2luY2UgdGhlcmUgaXNuJ3Qg cmVhbGx5IGEgZnJlZSwgYWxsCisgICAgIHdlIG5lZWQgdG8gZG8gaXMgbm90ZSB0aGF0IGl0cyBv YmplY3RzIGFyZSBubyBsb25nZXIgcmVmZXJlbmNlZCBieQorICAgICB0aGUgYmF0b24uICAqLwor ICBQeV9YREVDUkVGKGliLT5iYXRvbik7CisKKyNpZmRlZiBTVk5fREVCVUcKKyAgaWItPmVkaXRv ciA9IGliLT5iYXRvbiA9IE5VTEw7CisjZW5kaWYKKworICBlcnIgPSBTVk5fTk9fRVJST1I7CisK KyBmaW5pc2hlZDoKKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7CisgIHJldHVybiBl cnI7Cit9CisKK3N0YXRpYyBzdm5fZXJyb3JfdCAqc2V0X3RhcmdldF9yZXZpc2lvbih2b2lkICpl ZGl0X2JhdG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2bl9y ZXZudW1fdCB0YXJnZXRfcmV2aXNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgaXRlbV9iYXRvbiAqaWIgPSBlZGl0X2Jh dG9uOworICBQeU9iamVjdCAqcmVzdWx0OworICBzdm5fZXJyb3JfdCAqZXJyOworCisgIHN2bl9z d2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisgIC8qICMjIyBweXRob24gZG9lc24ndCBoYXZl ICdjb25zdCcgb24gdGhlIG1ldGhvZCBuYW1lIGFuZCBmb3JtYXQgKi8KKyAgaWYgKChyZXN1bHQg PSBQeU9iamVjdF9DYWxsTWV0aG9kKGliLT5lZGl0b3IsIChjaGFyICopInNldF90YXJnZXRfcmV2 aXNpb24iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikibCIs IHRhcmdldF9yZXZpc2lvbikpID09IE5VTEwpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tf ZXhjZXB0aW9uX2Vycm9yKCk7CisgICAgICBnb3RvIGZpbmlzaGVkOworICAgIH0KKworICAvKiB0 aGVyZSBpcyBubyByZXR1cm4gdmFsdWUsIHNvIGp1c3QgdG9zcyB0aGlzIG9iamVjdCAocHJvYmFi bHkgUHlfTm9uZSkgKi8KKyAgUHlfREVDUkVGKHJlc3VsdCk7CisgIGVyciA9IFNWTl9OT19FUlJP UjsKKworIGZpbmlzaGVkOgorICBzdm5fc3dpZ19weV9yZWxlYXNlX3B5X2xvY2soKTsKKyAgcmV0 dXJuIGVycjsKK30KKworc3RhdGljIHN2bl9lcnJvcl90ICpvcGVuX3Jvb3Qodm9pZCAqZWRpdF9i YXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2bl9yZXZudW1fdCBiYXNlX3Jl dmlzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqZGlyX3Bv b2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoqcm9vdF9iYXRvbikKK3sK KyAgaXRlbV9iYXRvbiAqaWIgPSBlZGl0X2JhdG9uOworICBQeU9iamVjdCAqcmVzdWx0OworICBz dm5fZXJyb3JfdCAqZXJyOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisg IC8qICMjIyBweXRob24gZG9lc24ndCBoYXZlICdjb25zdCcgb24gdGhlIG1ldGhvZCBuYW1lIGFu ZCBmb3JtYXQgKi8KKyAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKGliLT5lZGl0 b3IsIChjaGFyICopIm9wZW5fcm9vdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoY2hhciAqKSJsTyYiLCBiYXNlX3JldmlzaW9uLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbWFrZV9vYl9wb29sLCBkaXJfcG9vbCkpID09IE5VTEwpCisgICAgewor ICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7CisgICAgICBnb3RvIGZpbmlz aGVkOworICAgIH0KKworICAvKiBtYWtlX2JhdG9uIHRha2VzIG91ciAncmVzdWx0JyByZWZlcmVu Y2UgKi8KKyAgKnJvb3RfYmF0b24gPSBtYWtlX2JhdG9uKGRpcl9wb29sLCBpYi0+ZWRpdG9yLCBy ZXN1bHQpOworICBlcnIgPSBTVk5fTk9fRVJST1I7CisKKyBmaW5pc2hlZDoKKyAgc3ZuX3N3aWdf cHlfcmVsZWFzZV9weV9sb2NrKCk7CisgIHJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzdm5fZXJy b3JfdCAqZGVsZXRlX2VudHJ5KGNvbnN0IGNoYXIgKnBhdGgsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzdm5fcmV2bnVtX3QgcmV2aXNpb24sCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB2b2lkICpwYXJlbnRfYmF0b24sCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKQoreworICBpdGVtX2JhdG9uICppYiA9IHBhcmVu dF9iYXRvbjsKKyAgUHlPYmplY3QgKnJlc3VsdDsKKyAgc3ZuX2Vycm9yX3QgKmVycjsKKworICBz dm5fc3dpZ19weV9hY3F1aXJlX3B5X2xvY2soKTsKKworICAvKiAjIyMgcHl0aG9uIGRvZXNuJ3Qg aGF2ZSAnY29uc3QnIG9uIHRoZSBtZXRob2QgbmFtZSBhbmQgZm9ybWF0ICovCisgIGlmICgocmVz dWx0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChpYi0+ZWRpdG9yLCAoY2hhciAqKSJkZWxldGVfZW50 cnkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikic2xPTyYi LCBwYXRoLCByZXZpc2lvbiwgaWItPmJhdG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbWFrZV9vYl9wb29sLCBwb29sKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIg PSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICAgIGdvdG8gZmluaXNoZWQ7CisgICAg fQorCisgIC8qIHRoZXJlIGlzIG5vIHJldHVybiB2YWx1ZSwgc28ganVzdCB0b3NzIHRoaXMgb2Jq ZWN0IChwcm9iYWJseSBQeV9Ob25lKSAqLworICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgZXJyID0g U1ZOX05PX0VSUk9SOworCisgZmluaXNoZWQ6CisgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9j aygpOworICByZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3ZuX2Vycm9yX3QgKmFkZF9kaXJlY3Rv cnkoY29uc3QgY2hhciAqcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2 b2lkICpwYXJlbnRfYmF0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgY2hhciAqY29weWZyb21fcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzdm5fcmV2bnVtX3QgY29weWZyb21fcmV2aXNpb24sCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgYXByX3Bvb2xfdCAqZGlyX3Bvb2wsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdm9pZCAqKmNoaWxkX2JhdG9uKQoreworICBpdGVtX2JhdG9uICppYiA9IHBh cmVudF9iYXRvbjsKKyAgUHlPYmplY3QgKnJlc3VsdDsKKyAgc3ZuX2Vycm9yX3QgKmVycjsKKwor ICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xvY2soKTsKKworICAvKiAjIyMgcHl0aG9uIGRvZXNu J3QgaGF2ZSAnY29uc3QnIG9uIHRoZSBtZXRob2QgbmFtZSBhbmQgZm9ybWF0ICovCisgIGlmICgo cmVzdWx0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChpYi0+ZWRpdG9yLCAoY2hhciAqKSJhZGRfZGly ZWN0b3J5IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopInNP c2xPJiIsIHBhdGgsIGliLT5iYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvcHlmcm9tX3BhdGgsIGNvcHlmcm9tX3JldmlzaW9uLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbWFrZV9vYl9wb29sLCBkaXJfcG9vbCkpID09IE5VTEwpCisgICAg eworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7CisgICAgICBnb3RvIGZp bmlzaGVkOworICAgIH0KKworICAvKiBtYWtlX2JhdG9uIHRha2VzIG91ciAncmVzdWx0JyByZWZl cmVuY2UgKi8KKyAgKmNoaWxkX2JhdG9uID0gbWFrZV9iYXRvbihkaXJfcG9vbCwgaWItPmVkaXRv ciwgcmVzdWx0KTsKKyAgZXJyID0gU1ZOX05PX0VSUk9SOworCisgZmluaXNoZWQ6CisgIHN2bl9z d2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOworICByZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3Zu X2Vycm9yX3QgKm9wZW5fZGlyZWN0b3J5KGNvbnN0IGNoYXIgKnBhdGgsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBhcmVudF9iYXRvbiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3ZuX3Jldm51bV90IGJhc2VfcmV2aXNpb24sCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKmRpcl9wb29sLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoqY2hpbGRfYmF0b24pCit7CisgIGl0 ZW1fYmF0b24gKmliID0gcGFyZW50X2JhdG9uOworICBQeU9iamVjdCAqcmVzdWx0OworICBzdm5f ZXJyb3JfdCAqZXJyOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisgIC8q ICMjIyBweXRob24gZG9lc24ndCBoYXZlICdjb25zdCcgb24gdGhlIG1ldGhvZCBuYW1lIGFuZCBm b3JtYXQgKi8KKyAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKGliLT5lZGl0b3Is IChjaGFyICopIm9wZW5fZGlyZWN0b3J5IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChjaGFyICopInNPbE8mIiwgcGF0aCwgaWItPmJhdG9uLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYmFzZV9yZXZpc2lvbiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG1ha2Vfb2JfcG9vbCwgZGlyX3Bvb2wpKSA9PSBOVUxMKQorICAgIHsK KyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgICAgZ290byBmaW5p c2hlZDsKKyAgICB9CisKKyAgLyogbWFrZV9iYXRvbiB0YWtlcyBvdXIgJ3Jlc3VsdCcgcmVmZXJl bmNlICovCisgICpjaGlsZF9iYXRvbiA9IG1ha2VfYmF0b24oZGlyX3Bvb2wsIGliLT5lZGl0b3Is IHJlc3VsdCk7CisgIGVyciA9IFNWTl9OT19FUlJPUjsKKworIGZpbmlzaGVkOgorICBzdm5fc3dp Z19weV9yZWxlYXNlX3B5X2xvY2soKTsKKyAgcmV0dXJuIGVycjsKK30KKworc3RhdGljIHN2bl9l cnJvcl90ICpjaGFuZ2VfZGlyX3Byb3Aodm9pZCAqZGlyX2JhdG9uLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IHN2bl9zdHJpbmdfdCAqdmFsdWUsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKQoreworICBpdGVtX2Jh dG9uICppYiA9IGRpcl9iYXRvbjsKKyAgUHlPYmplY3QgKnJlc3VsdDsKKyAgc3ZuX2Vycm9yX3Qg KmVycjsKKworICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xvY2soKTsKKworICAvKiAjIyMgcHl0 aG9uIGRvZXNuJ3QgaGF2ZSAnY29uc3QnIG9uIHRoZSBtZXRob2QgbmFtZSBhbmQgZm9ybWF0ICov CisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChpYi0+ZWRpdG9yLCAoY2hhciAq KSJjaGFuZ2VfZGlyX3Byb3AiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KGNoYXIgKikiT3NzI08mIiwgaWItPmJhdG9uLCBuYW1lLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdmFsdWUgPyB2YWx1ZS0+ZGF0YSA6IE5VTEwsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA/IHZhbHVlLT5sZW4gOiAwLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9vYl9wb29sLCBwb29sKSkgPT0gTlVMTCkK KyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICAgIGdv dG8gZmluaXNoZWQ7CisgICAgfQorCisgIC8qIHRoZXJlIGlzIG5vIHJldHVybiB2YWx1ZSwgc28g anVzdCB0b3NzIHRoaXMgb2JqZWN0IChwcm9iYWJseSBQeV9Ob25lKSAqLworICBQeV9ERUNSRUYo cmVzdWx0KTsKKyAgZXJyID0gU1ZOX05PX0VSUk9SOworCisgZmluaXNoZWQ6CisgIHN2bl9zd2ln X3B5X3JlbGVhc2VfcHlfbG9jaygpOworICByZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3ZuX2Vy cm9yX3QgKmNsb3NlX2RpcmVjdG9yeSh2b2lkICpkaXJfYmF0b24sCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKQoreworICByZXR1cm4gY2xvc2Vf YmF0b24oZGlyX2JhdG9uLCAiY2xvc2VfZGlyZWN0b3J5Iik7Cit9CisKK3N0YXRpYyBzdm5fZXJy b3JfdCAqYWRkX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdm9pZCAqcGFyZW50X2JhdG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBjaGFyICpjb3B5ZnJvbV9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz dm5fcmV2bnVtX3QgY29weWZyb21fcmV2aXNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGFwcl9wb29sX3QgKmZpbGVfcG9vbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dm9pZCAqKmZpbGVfYmF0b24pCit7CisgIGl0ZW1fYmF0b24gKmliID0gcGFyZW50X2JhdG9uOwor ICBQeU9iamVjdCAqcmVzdWx0OworICBzdm5fZXJyb3JfdCAqZXJyOworCisgIHN2bl9zd2lnX3B5 X2FjcXVpcmVfcHlfbG9jaygpOworCisgIC8qICMjIyBweXRob24gZG9lc24ndCBoYXZlICdjb25z dCcgb24gdGhlIG1ldGhvZCBuYW1lIGFuZCBmb3JtYXQgKi8KKyAgaWYgKChyZXN1bHQgPSBQeU9i amVjdF9DYWxsTWV0aG9kKGliLT5lZGl0b3IsIChjaGFyICopImFkZF9maWxlIiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopInNPc2xPJiIsIHBhdGgsIGliLT5i YXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlmcm9tX3BhdGgs IGNvcHlmcm9tX3JldmlzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bWFrZV9vYl9wb29sLCBmaWxlX3Bvb2wpKSA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVyciA9IGNh bGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgICAgZ290byBmaW5pc2hlZDsKKyAgICB9CisK KyAgLyogbWFrZV9iYXRvbiB0YWtlcyBvdXIgJ3Jlc3VsdCcgcmVmZXJlbmNlICovCisgICpmaWxl X2JhdG9uID0gbWFrZV9iYXRvbihmaWxlX3Bvb2wsIGliLT5lZGl0b3IsIHJlc3VsdCk7CisKKyAg ZXJyID0gU1ZOX05PX0VSUk9SOworCisgZmluaXNoZWQ6CisgIHN2bl9zd2lnX3B5X3JlbGVhc2Vf cHlfbG9jaygpOworICByZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3ZuX2Vycm9yX3QgKm9wZW5f ZmlsZShjb25zdCBjaGFyICpwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9p ZCAqcGFyZW50X2JhdG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX3Jldm51 bV90IGJhc2VfcmV2aXNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9v bF90ICpmaWxlX3Bvb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoqZmls ZV9iYXRvbikKK3sKKyAgaXRlbV9iYXRvbiAqaWIgPSBwYXJlbnRfYmF0b247CisgIFB5T2JqZWN0 ICpyZXN1bHQ7CisgIHN2bl9lcnJvcl90ICplcnI7CisKKyAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9w eV9sb2NrKCk7CisKKyAgLyogIyMjIHB5dGhvbiBkb2Vzbid0IGhhdmUgJ2NvbnN0JyBvbiB0aGUg bWV0aG9kIG5hbWUgYW5kIGZvcm1hdCAqLworICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxN ZXRob2QoaWItPmVkaXRvciwgKGNoYXIgKikib3Blbl9maWxlIiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChjaGFyICopInNPbE8mIiwgcGF0aCwgaWItPmJhdG9uLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZV9yZXZpc2lvbiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vfb2JfcG9vbCwgZmlsZV9wb29sKSkgPT0g TlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAg ICAgIGdvdG8gZmluaXNoZWQ7CisgICAgfQorCisgIC8qIG1ha2VfYmF0b24gdGFrZXMgb3VyICdy ZXN1bHQnIHJlZmVyZW5jZSAqLworICAqZmlsZV9iYXRvbiA9IG1ha2VfYmF0b24oZmlsZV9wb29s LCBpYi0+ZWRpdG9yLCByZXN1bHQpOworICBlcnIgPSBTVk5fTk9fRVJST1I7CisKKyBmaW5pc2hl ZDoKKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7CisgIHJldHVybiBlcnI7Cit9CisK K3N0YXRpYyBzdm5fZXJyb3JfdCAqd2luZG93X2hhbmRsZXIoc3ZuX3R4ZGVsdGFfd2luZG93X3Qg KndpbmRvdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYmF0b24p Cit7CisgIFB5T2JqZWN0ICpoYW5kbGVyID0gYmF0b247CisgIFB5T2JqZWN0ICpyZXN1bHQ7Cisg IHN2bl9lcnJvcl90ICplcnI7CisKKyAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7CisK KyAgaWYgKHdpbmRvdyA9PSBOVUxMKQorICAgIHsKKyAgICAgIC8qIHRoZSBsYXN0IGNhbGw7IGl0 IGNsb3NlcyB0aGUgaGFuZGxlciAqLworCisgICAgICAvKiBpbnZva2UgdGhlIGhhbmRsZXIgd2l0 aCBOb25lIGZvciB0aGUgd2luZG93ICovCisgICAgICAvKiAjIyMgcHl0aG9uIGRvZXNuJ3QgaGF2 ZSAnY29uc3QnIG9uIHRoZSBmb3JtYXQgKi8KKyAgICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxG dW5jdGlvbihoYW5kbGVyLCAoY2hhciAqKSJPIiwgUHlfTm9uZSk7CisKKyAgICAgIC8qIHdlIG5v IGxvbmdlciBuZWVkIHRvIHJlZmVyIHRvIHRoZSBoYW5kbGVyIG9iamVjdCAqLworICAgICAgUHlf REVDUkVGKGhhbmRsZXIpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIC8qIGludm9rZSB0 aGUgaGFuZGxlciB3aXRoIHRoZSB3aW5kb3cgKi8KKyAgICAgIC8qICMjIyBweXRob24gZG9lc24n dCBoYXZlICdjb25zdCcgb24gdGhlIGZvcm1hdCAqLworICAgICAgcmVzdWx0ID0gUHlPYmplY3Rf Q2FsbEZ1bmN0aW9uKGhhbmRsZXIsIChjaGFyICopIk8mIiwKKyAgICAgICAgbWFrZV9vYl90eGRl bHRhX3dpbmRvdywgd2luZG93KTsKKyAgICB9CisKKyAgaWYgKHJlc3VsdCA9PSBOVUxMKQorICAg IHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgICAgZ290byBm aW5pc2hlZDsKKyAgICB9CisKKyAgLyogdGhlcmUgaXMgbm8gcmV0dXJuIHZhbHVlLCBzbyBqdXN0 IHRvc3MgdGhpcyBvYmplY3QgKHByb2JhYmx5IFB5X05vbmUpICovCisgIFB5X0RFQ1JFRihyZXN1 bHQpOworICBlcnIgPSBTVk5fTk9fRVJST1I7CisKKyBmaW5pc2hlZDoKKyAgc3ZuX3N3aWdfcHlf cmVsZWFzZV9weV9sb2NrKCk7CisgIHJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzdm5fZXJyb3Jf dCAqYXBwbHlfdGV4dGRlbHRhKHZvaWQgKmZpbGVfYmF0b24sCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpiYXNlX2NoZWNrc3VtLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHN2bl90eGRlbHRhX3dpbmRvd19oYW5kbGVyX3QgKmhhbmRs ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoqaF9iYXRvbikK K3sKKyAgaXRlbV9iYXRvbiAqaWIgPSBmaWxlX2JhdG9uOworICBQeU9iamVjdCAqcmVzdWx0Owor ICBzdm5fZXJyb3JfdCAqZXJyOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOwor CisgIC8qICMjIyBweXRob24gZG9lc24ndCBoYXZlICdjb25zdCcgb24gdGhlIG1ldGhvZCBuYW1l IGFuZCBmb3JtYXQgKi8KKyAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKGliLT5l ZGl0b3IsIChjaGFyICopImFwcGx5X3RleHRkZWx0YSIsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoY2hhciAqKSIoT3MpIiwgaWItPmJhdG9uLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYmFzZV9jaGVja3N1bSkpID09IE5VTEwpCisgICAgeworICAg ICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7CisgICAgICBnb3RvIGZpbmlzaGVk OworICAgIH0KKworICAvKiBJbnRlcnByZXQgTm9uZSB0byBtZWFuIHN2bl9kZWx0YV9ub29wX3dp bmRvd19oYW5kbGVyLiBUaGlzIGlzIG11Y2gKKyAgICAgZWFzaWVyL2Zhc3RlciB0aGFuIG1ha2lu ZyBjb2RlIGFsd2F5cyBoYXZlIHRvIHdyaXRlIGEgTk9PUCBoYW5kbGVyCisgICAgIGluIFB5dGhv bi4gICovCisgIGlmIChyZXN1bHQgPT0gUHlfTm9uZSkKKyAgICB7CisgICAgICBQeV9ERUNSRUYo cmVzdWx0KTsKKworICAgICAgKmhhbmRsZXIgPSBzdm5fZGVsdGFfbm9vcF93aW5kb3dfaGFuZGxl cjsKKyAgICAgICpoX2JhdG9uID0gTlVMTDsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICAv KiByZXR1cm4gdGhlIHRodW5rIGZvciBpbnZva2luZyB0aGUgaGFuZGxlci4gdGhlIGJhdG9uIHRh a2VzIG91cgorICAgICAgICAgJ3Jlc3VsdCcgcmVmZXJlbmNlLCB3aGljaCBpcyB0aGUgaGFuZGxl ci4gKi8KKyAgICAgICpoYW5kbGVyID0gd2luZG93X2hhbmRsZXI7CisgICAgICAqaF9iYXRvbiA9 IHJlc3VsdDsKKyAgICB9CisKKyAgZXJyID0gU1ZOX05PX0VSUk9SOworCisgZmluaXNoZWQ6Cisg IHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOworICByZXR1cm4gZXJyOworfQorCitzdGF0 aWMgc3ZuX2Vycm9yX3QgKmNoYW5nZV9maWxlX3Byb3Aodm9pZCAqZmlsZV9iYXRvbiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN2bl9zdHJpbmdfdCAqdmFsdWUs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCkK K3sKKyAgaXRlbV9iYXRvbiAqaWIgPSBmaWxlX2JhdG9uOworICBQeU9iamVjdCAqcmVzdWx0Owor ICBzdm5fZXJyb3JfdCAqZXJyOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOwor CisgIC8qICMjIyBweXRob24gZG9lc24ndCBoYXZlICdjb25zdCcgb24gdGhlIG1ldGhvZCBuYW1l IGFuZCBmb3JtYXQgKi8KKyAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKGliLT5l ZGl0b3IsIChjaGFyICopImNoYW5nZV9maWxlX3Byb3AiLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGNoYXIgKikiT3NzI08mIiwgaWItPmJhdG9uLCBuYW1lLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPyB2YWx1ZS0+ZGF0YSA6IE5VTEws CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA/IHZhbHVlLT5sZW4g OiAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9vYl9wb29sLCBw b29sKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJy b3IoKTsKKyAgICAgIGdvdG8gZmluaXNoZWQ7CisgICAgfQorCisgIC8qIHRoZXJlIGlzIG5vIHJl dHVybiB2YWx1ZSwgc28ganVzdCB0b3NzIHRoaXMgb2JqZWN0IChwcm9iYWJseSBQeV9Ob25lKSAq LworICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgZXJyID0gU1ZOX05PX0VSUk9SOworCisgZmluaXNo ZWQ6CisgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOworICByZXR1cm4gZXJyOworfQor CitzdGF0aWMgc3ZuX2Vycm9yX3QgKmNsb3NlX2ZpbGUodm9pZCAqZmlsZV9iYXRvbiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp0ZXh0X2NoZWNrc3VtLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpCit7CisgIGl0ZW1f YmF0b24gKmliID0gZmlsZV9iYXRvbjsKKyAgUHlPYmplY3QgKnJlc3VsdDsKKyAgc3ZuX2Vycm9y X3QgKmVycjsKKworICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xvY2soKTsKKworICAvKiAjIyMg cHl0aG9uIGRvZXNuJ3QgaGF2ZSAnY29uc3QnIG9uIHRoZSBtZXRob2QgbmFtZSBhbmQgZm9ybWF0 ICovCisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChpYi0+ZWRpdG9yLCAoY2hh ciAqKSJjbG9zZV9maWxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChj aGFyICopIihPcykiLCBpYi0+YmF0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB0ZXh0X2NoZWNrc3VtKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFj a19leGNlcHRpb25fZXJyb3IoKTsKKyAgICAgIGdvdG8gZmluaXNoZWQ7CisgICAgfQorCisgIC8q IHRoZXJlIGlzIG5vIHJldHVybiB2YWx1ZSwgc28ganVzdCB0b3NzIHRoaXMgb2JqZWN0IChwcm9i YWJseSBQeV9Ob25lKSAqLworICBQeV9ERUNSRUYocmVzdWx0KTsKKworICAvKiBXZSdyZSBub3cg ZG9uZSB3aXRoIHRoZSBiYXRvbi4gU2luY2UgdGhlcmUgaXNuJ3QgcmVhbGx5IGEgZnJlZSwgYWxs CisgICAgIHdlIG5lZWQgdG8gZG8gaXMgbm90ZSB0aGF0IGl0cyBvYmplY3RzIGFyZSBubyBsb25n ZXIgcmVmZXJlbmNlZCBieQorICAgICB0aGUgYmF0b24uICAqLworICBQeV9YREVDUkVGKGliLT5i YXRvbik7CisKKyNpZmRlZiBTVk5fREVCVUcKKyAgaWItPmVkaXRvciA9IGliLT5iYXRvbiA9IE5V TEw7CisjZW5kaWYKKworICBlcnIgPSBTVk5fTk9fRVJST1I7CisKKyBmaW5pc2hlZDoKKyAgc3Zu X3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7CisgIHJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBz dm5fZXJyb3JfdCAqY2xvc2VfZWRpdCh2b2lkICplZGl0X2JhdG9uLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpCit7CisgIHJldHVybiBjbG9zZV9iYXRv bihlZGl0X2JhdG9uLCAiY2xvc2VfZWRpdCIpOworfQorCitzdGF0aWMgc3ZuX2Vycm9yX3QgKmFi b3J0X2VkaXQodm9pZCAqZWRpdF9iYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBhcHJfcG9vbF90ICpwb29sKQoreworICByZXR1cm4gY2xvc2VfYmF0b24oZWRpdF9iYXRvbiwg ImFib3J0X2VkaXQiKTsKK30KKwordm9pZCBzdm5fc3dpZ19weV9tYWtlX2VkaXRvcihjb25zdCBz dm5fZGVsdGFfZWRpdG9yX3QgKiplZGl0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHZvaWQgKiplZGl0X2JhdG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVj dCAqcHlfZWRpdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpw b29sKQoreworICBzdm5fZGVsdGFfZWRpdG9yX3QgKnRodW5rX2VkaXRvciA9IHN2bl9kZWx0YV9k ZWZhdWx0X2VkaXRvciAocG9vbCk7CisgIAorICB0aHVua19lZGl0b3ItPnNldF90YXJnZXRfcmV2 aXNpb24gPSBzZXRfdGFyZ2V0X3JldmlzaW9uOworICB0aHVua19lZGl0b3ItPm9wZW5fcm9vdCA9 IG9wZW5fcm9vdDsKKyAgdGh1bmtfZWRpdG9yLT5kZWxldGVfZW50cnkgPSBkZWxldGVfZW50cnk7 CisgIHRodW5rX2VkaXRvci0+YWRkX2RpcmVjdG9yeSA9IGFkZF9kaXJlY3Rvcnk7CisgIHRodW5r X2VkaXRvci0+b3Blbl9kaXJlY3RvcnkgPSBvcGVuX2RpcmVjdG9yeTsKKyAgdGh1bmtfZWRpdG9y LT5jaGFuZ2VfZGlyX3Byb3AgPSBjaGFuZ2VfZGlyX3Byb3A7CisgIHRodW5rX2VkaXRvci0+Y2xv c2VfZGlyZWN0b3J5ID0gY2xvc2VfZGlyZWN0b3J5OworICB0aHVua19lZGl0b3ItPmFkZF9maWxl ID0gYWRkX2ZpbGU7CisgIHRodW5rX2VkaXRvci0+b3Blbl9maWxlID0gb3Blbl9maWxlOworICB0 aHVua19lZGl0b3ItPmFwcGx5X3RleHRkZWx0YSA9IGFwcGx5X3RleHRkZWx0YTsKKyAgdGh1bmtf ZWRpdG9yLT5jaGFuZ2VfZmlsZV9wcm9wID0gY2hhbmdlX2ZpbGVfcHJvcDsKKyAgdGh1bmtfZWRp dG9yLT5jbG9zZV9maWxlID0gY2xvc2VfZmlsZTsKKyAgdGh1bmtfZWRpdG9yLT5jbG9zZV9lZGl0 ID0gY2xvc2VfZWRpdDsKKyAgdGh1bmtfZWRpdG9yLT5hYm9ydF9lZGl0ID0gYWJvcnRfZWRpdDsK KworICAqZWRpdG9yID0gdGh1bmtfZWRpdG9yOworICAqZWRpdF9iYXRvbiA9IG1ha2VfYmF0b24o cG9vbCwgcHlfZWRpdG9yLCBOVUxMKTsKK30KKworCisMCisvKioqIE90aGVyIFdyYXBwZXJzIGZv ciBTVk4gRnVuY3Rpb25zICoqKi8KKworCithcHJfZmlsZV90ICpzdm5fc3dpZ19weV9tYWtlX2Zp bGUgKFB5T2JqZWN0ICpweV9maWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBhcHJfcG9vbF90ICpwb29sKQoreworICBhcHJfZmlsZV90ICphcHJfZmlsZSA9IE5VTEw7Cisg IGFwcl9zdGF0dXNfdCBhcHJfZXJyOworCisgIGlmIChweV9maWxlID09IE5VTEwgfHwgcHlfZmls ZSA9PSBQeV9Ob25lKQorICAgIHJldHVybiBOVUxMOworCisgIGlmIChQeVN0cmluZ19DaGVjayAo cHlfZmlsZSkpCisgICAgeworICAgICAgLyogaW5wdXQgaXMgYSBwYXRoIC0tIGp1c3Qgb3BlbiBh biBhcHJfZmlsZV90ICovCisgICAgICBjaGFyKiBmbmFtZSA9IFB5U3RyaW5nX0FTX1NUUklORyAo cHlfZmlsZSk7CisgICAgICBhcHJfZXJyID0gYXByX2ZpbGVfb3BlbiAoJmFwcl9maWxlLCBmbmFt ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFQUl9DUkVBVEUgfCBBUFJfUkVBRCB8 IEFQUl9XUklURSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFQUl9PU19ERUZBVUxU LCBwb29sKTsKKyAgICAgIGlmIChhcHJfZXJyKQorICAgICAgICB7CisgICAgICAgICAgY2hhciBi dWZbMjU2XTsKKyAgICAgICAgICBhcHJfc3RyZXJyb3IgKGFwcl9lcnIsIGJ1Ziwgc2l6ZW9mKGJ1 ZikpOworICAgICAgICAgIFB5RXJyX0Zvcm1hdCAoUHlFeGNfSU9FcnJvciwgImFwcl9maWxlX29w ZW4gZmFpbGVkOiAlczogJyVzJyIsCisgICAgICAgICAgICAgICAgICAgICAgICBidWYsIGZuYW1l KTsKKyAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKyAgZWxzZSBpZiAo UHlGaWxlX0NoZWNrIChweV9maWxlKSkKKyAgICB7CisgICAgICBGSUxFICpmaWxlOworICAgICAg YXByX29zX2ZpbGVfdCBvc2ZpbGU7CisKKyAgICAgIC8qIGlucHV0IGlzIGEgZmlsZSBvYmplY3Qg LS0gY29udmVydCB0byBhcHJfZmlsZV90ICovCisgICAgICBmaWxlID0gUHlGaWxlX0FzRmlsZShw eV9maWxlKTsKKyNpZmRlZiBXSU4zMgorICAgICAgb3NmaWxlID0gKGFwcl9vc19maWxlX3QpX2dl dF9vc2ZoYW5kbGUoX2ZpbGVubyhmaWxlKSk7CisjZWxzZQorICAgICAgb3NmaWxlID0gKGFwcl9v c19maWxlX3QpZmlsZW5vKGZpbGUpOworI2VuZGlmCisgICAgICBhcHJfZXJyID0gYXByX29zX2Zp bGVfcHV0ICgmYXByX2ZpbGUsICZvc2ZpbGUsIE9fQ1JFQVQgfCBPX1dST05MWSwgcG9vbCk7Cisg ICAgICBpZiAoYXByX2VycikKKyAgICAgICAgeworICAgICAgICAgIGNoYXIgYnVmWzI1Nl07Cisg ICAgICAgICAgYXByX3N0cmVycm9yIChhcHJfZXJyLCBidWYsIHNpemVvZihidWYpKTsKKyAgICAg ICAgICBQeUVycl9Gb3JtYXQgKFB5RXhjX0lPRXJyb3IsICJhcHJfb3NfZmlsZV9wdXQgZmFpbGVk OiAlcyIsIGJ1Zik7CisgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9Cisg IHJldHVybiBhcHJfZmlsZTsKK30KKworCitzdGF0aWMgc3ZuX2Vycm9yX3QgKgorcmVhZF9oYW5k bGVyX3B5aW8gKHZvaWQgKmJhdG9uLCBjaGFyICpidWZmZXIsIGFwcl9zaXplX3QgKmxlbikKK3sK KyAgUHlPYmplY3QgKnJlc3VsdDsKKyAgUHlPYmplY3QgKnB5X2lvID0gYmF0b247CisgIGFwcl9z aXplX3QgYnl0ZXM7CisgIHN2bl9lcnJvcl90ICplcnIgPSBTVk5fTk9fRVJST1I7CisKKyAgc3Zu X3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7CisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2Fs bE1ldGhvZChweV9pbywgKGNoYXIgKikicmVhZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoY2hhciAqKSJpIiwgKmxlbikpID09IE5VTEwpCisgICAgeworICAgICAgZXJy ID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7CisgICAgfQorICBlbHNlIGlmIChQeVN0cmlu Z19DaGVjayhyZXN1bHQpKQorICAgIHsKKyAgICAgIGJ5dGVzID0gUHlTdHJpbmdfR0VUX1NJWkUo cmVzdWx0KTsKKyAgICAgIGlmIChieXRlcyA+ICpsZW4pCisgICAgICAgIHsKKyAgICAgICAgICBl cnIgPSBjYWxsYmFja19iYWRfcmV0dXJuX2Vycm9yKCJUb28gbWFueSBieXRlcyIpOworICAgICAg ICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAvKiBXcml0ZWJhY2ssIGluIGNh c2UgdGhpcyB3YXMgYSBzaG9ydCByZWFkLCBpbmRpY2F0aW5nIEVPRiAqLworICAgICAgICAgICps ZW4gPSBieXRlczsKKyAgICAgICAgICBtZW1jcHkoYnVmZmVyLCBQeVN0cmluZ19BU19TVFJJTkco cmVzdWx0KSwgKmxlbik7CisgICAgICAgIH0KKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBl cnIgPSBjYWxsYmFja19iYWRfcmV0dXJuX2Vycm9yKCJOb3QgYSBzdHJpbmciKTsKKyAgICB9Cisg IFB5X1hERUNSRUYocmVzdWx0KTsKKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7CisK KyAgcmV0dXJuIGVycjsKK30KKworc3RhdGljIHN2bl9lcnJvcl90ICoKK3dyaXRlX2hhbmRsZXJf cHlpbyAodm9pZCAqYmF0b24sIGNvbnN0IGNoYXIgKmRhdGEsIGFwcl9zaXplX3QgKmxlbikKK3sK KyAgUHlPYmplY3QgKnJlc3VsdDsKKyAgUHlPYmplY3QgKnB5X2lvID0gYmF0b247CisgIHN2bl9l cnJvcl90ICplcnIgPSBTVk5fTk9fRVJST1I7CisKKyAgaWYgKGRhdGEgIT0gTlVMTCkKKyAgICB7 CisgICAgICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xvY2soKTsKKyAgICAgIGlmICgocmVzdWx0 ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChweV9pbywgKGNoYXIgKikid3JpdGUiLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopInMjIiwgZGF0YSwgKmxlbikp ID09IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25f ZXJyb3IoKTsKKyAgICAgICAgfQorICAgICAgUHlfWERFQ1JFRihyZXN1bHQpOworICAgICAgc3Zu X3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7CisgICAgfQorCisgIHJldHVybiBlcnI7Cit9CisK K3N0YXRpYyBzdm5fZXJyb3JfdCAqCitjbG9zZV9oYW5kbGVyX3B5aW8odm9pZCAqYmF0b24pCit7 CisgIFB5T2JqZWN0ICpweV9pbyA9IGJhdG9uOworICBQeV9ERUNSRUYocHlfaW8pOworICByZXR1 cm4gU1ZOX05PX0VSUk9SOworfQorCisKK3N2bl9zdHJlYW1fdCAqCitzdm5fc3dpZ19weV9tYWtl X3N0cmVhbSAoUHlPYmplY3QgKnB5X2lvLCBhcHJfcG9vbF90ICpwb29sKQoreworICBzdm5fc3Ry ZWFtX3QgKnN0cmVhbTsKKworICAvKiBCb3Jyb3cgdGhlIGNhbGxlcidzIHJlZmVyZW5jZSB0byBw eV9pbyAtIHRoaXMgaXMgc2FmZSBvbmx5IGJlY2F1c2UgdGhlCisgICAqIGNhbGxlciBtdXN0IGhh dmUgYSByZWZlcmVuY2UgaW4gb3JkZXIgdG8gcGFzcyB0aGUgb2JqZWN0IGludG8gdGhlCisgICAq IGJpbmRpbmdzLCBhbmQgd2Ugd2lsbCBiZSBmaW5pc2hlZCB3aXRoIHRoZSBweV9pbyBvYmplY3Qg YmVmb3JlIHdlIHJldHVybgorICAgKiB0byBweXRob24uIEkuZS4gRE8gTk9UIFNUT1JFIEFXQVkg VEhFIFJFU1VMVElORyBzdm5fc3RyZWFtX3QgKiBmb3IgdXNlCisgICAqIG92ZXIgbXVsdGlwbGUg Y2FsbHMgaW50byB0aGUgYmluZGluZ3MuICovCisgIFB5X0lOQ1JFRihweV9pbyk7CisgIHN0cmVh bSA9IHN2bl9zdHJlYW1fY3JlYXRlIChweV9pbywgcG9vbCk7CisgIHN2bl9zdHJlYW1fc2V0X3Jl YWQgKHN0cmVhbSwgcmVhZF9oYW5kbGVyX3B5aW8pOworICBzdm5fc3RyZWFtX3NldF93cml0ZSAo c3RyZWFtLCB3cml0ZV9oYW5kbGVyX3B5aW8pOworICBzdm5fc3RyZWFtX3NldF9jbG9zZSAoc3Ry ZWFtLCBjbG9zZV9oYW5kbGVyX3B5aW8pOworCisgIHJldHVybiBzdHJlYW07Cit9CisKKwordm9p ZCBzdm5fc3dpZ19weV9ub3RpZnlfZnVuYyh2b2lkICpiYXRvbiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgY2hhciAqcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc3ZuX3djX25vdGlmeV9hY3Rpb25fdCBhY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHN2bl9ub2RlX2tpbmRfdCBraW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBjaGFyICptaW1lX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2 bl93Y19ub3RpZnlfc3RhdGVfdCBjb250ZW50X3N0YXRlLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzdm5fd2Nfbm90aWZ5X3N0YXRlX3QgcHJvcF9zdGF0ZSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc3ZuX3Jldm51bV90IHJldmlzaW9uKQoreworICBQeU9iamVjdCAqZnVu Y3Rpb24gPSBiYXRvbjsKKyAgUHlPYmplY3QgKnJlc3VsdDsKKyAgc3ZuX2Vycm9yX3QgKmVyciA9 IFNWTl9OT19FUlJPUjsKKworICBpZiAoZnVuY3Rpb24gPT0gTlVMTCB8fCBmdW5jdGlvbiA9PSBQ eV9Ob25lKQorICAgIHJldHVybjsKKworICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xvY2soKTsK KyAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oZnVuY3Rpb24sCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopIihzaWlzaWlpKSIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGgsIGFjdGlvbiwga2luZCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWltZV90eXBlLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50X3N0YXRlLCBwcm9wX3N0YXRlLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXZpc2lvbikpID09IE5VTEwp CisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7CisgICAgfQor ICBlbHNlCisgICAgeworICAgICAgLyogVGhlIGNhbGxiYWNrIHNob3VsZG4ndCBiZSByZXR1cm5p bmcgYW55dGhpbmcuICovCisgICAgICBpZiAocmVzdWx0ICE9IFB5X05vbmUpCisgICAgICAgIGVy ciA9IGNhbGxiYWNrX2JhZF9yZXR1cm5fZXJyb3IoIk5vdCBOb25lIik7CisgICAgICBQeV9ERUNS RUYocmVzdWx0KTsKKyAgICB9CisKKyAgLyogT3VyIGVycm9yIGhhcyBubyBwbGFjZSB0byBnby4g Oi0oICovCisgIGlmIChlcnIpCisgICAgc3ZuX2Vycm9yX2NsZWFyKGVycik7CisKKyAgc3ZuX3N3 aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7Cit9CisKKwordm9pZCBzdm5fc3dpZ19weV9ub3RpZnlf ZnVuYzIodm9pZCAqYmF0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBz dm5fd2Nfbm90aWZ5X3QgKm5vdGlmeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFw cl9wb29sX3QgKnBvb2wpCit7CisgIFB5T2JqZWN0ICpmdW5jdGlvbiA9IGJhdG9uOworICBQeU9i amVjdCAqcmVzdWx0OworICBzdm5fZXJyb3JfdCAqZXJyID0gU1ZOX05PX0VSUk9SOworCisgIGlm IChmdW5jdGlvbiA9PSBOVUxMIHx8IGZ1bmN0aW9uID09IFB5X05vbmUpCisgICAgcmV0dXJuOwor CisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisgIGlmICgocmVzdWx0ID0gUHlP YmplY3RfQ2FsbEZ1bmN0aW9uKGZ1bmN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoY2hhciAqKSIoTyZPJikiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBtYWtlX29iX3djX25vdGlmeSwgbm90aWZ5LAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBtYWtlX29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQorICAgIHsK KyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgIH0KKyAgZWxzZQor ICAgIHsKKyAgICAgIC8qIFRoZSBjYWxsYmFjayBzaG91bGRuJ3QgYmUgcmV0dXJuaW5nIGFueXRo aW5nLiAqLworICAgICAgaWYgKHJlc3VsdCAhPSBQeV9Ob25lKQorICAgICAgICBlcnIgPSBjYWxs YmFja19iYWRfcmV0dXJuX2Vycm9yKCJOb3QgTm9uZSIpOworICAgICAgUHlfREVDUkVGKHJlc3Vs dCk7CisgICAgfQorCisgIC8qIE91ciBlcnJvciBoYXMgbm8gcGxhY2UgdG8gZ28uIDotKCAqLwor ICBpZiAoZXJyKQorICAgIHN2bl9lcnJvcl9jbGVhcihlcnIpOworCisgIHN2bl9zd2lnX3B5X3Jl bGVhc2VfcHlfbG9jaygpOworfQorCit2b2lkIHN2bl9zd2lnX3B5X3N0YXR1c19mdW5jKHZvaWQg KmJhdG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwYXRoLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdm5fd2Nfc3RhdHVzX3QgKnN0YXR1cykKK3sK KyAgUHlPYmplY3QgKmZ1bmN0aW9uID0gYmF0b247CisgIFB5T2JqZWN0ICpyZXN1bHQ7CisgIHN2 bl9lcnJvcl90ICplcnIgPSBTVk5fTk9fRVJST1I7CisKKyAgaWYgKGZ1bmN0aW9uID09IE5VTEwg fHwgZnVuY3Rpb24gPT0gUHlfTm9uZSkKKyAgICByZXR1cm47CisKKyAgc3ZuX3N3aWdfcHlfYWNx dWlyZV9weV9sb2NrKCk7CisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGZ1 bmN0aW9uLCAoY2hhciAqKSJzTyYiLCBwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBtYWtlX29iX3djX3N0YXR1cywgc3RhdHVzKSkgPT0gTlVMTCkKKyAgICB7Cisg ICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICB9CisgIGVsc2UKKyAg ICB7CisgICAgICAvKiBUaGUgY2FsbGJhY2sgc2hvdWxkbid0IGJlIHJldHVybmluZyBhbnl0aGlu Zy4gKi8KKyAgICAgIGlmIChyZXN1bHQgIT0gUHlfTm9uZSkKKyAgICAgICAgZXJyID0gY2FsbGJh Y2tfYmFkX3JldHVybl9lcnJvcigiTm90IE5vbmUiKTsKKyAgICAgIFB5X0RFQ1JFRihyZXN1bHQp OworICAgIH0KKworICAvKiBPdXIgZXJyb3IgaGFzIG5vIHBsYWNlIHRvIGdvLiA6LSggKi8KKyAg aWYgKGVycikKKyAgICBzdm5fZXJyb3JfY2xlYXIoZXJyKTsKKworICBzdm5fc3dpZ19weV9yZWxl YXNlX3B5X2xvY2soKTsKK30KKworCitzdm5fZXJyb3JfdCAqc3ZuX3N3aWdfcHlfY2FuY2VsX2Z1 bmModm9pZCAqY2FuY2VsX2JhdG9uKQoreworICBQeU9iamVjdCAqZnVuY3Rpb24gPSBjYW5jZWxf YmF0b247CisgIFB5T2JqZWN0ICpyZXN1bHQ7CisgIHN2bl9lcnJvcl90ICplcnIgPSBTVk5fTk9f RVJST1I7CisKKyAgaWYgKGZ1bmN0aW9uID09IE5VTEwgfHwgZnVuY3Rpb24gPT0gUHlfTm9uZSkK KyAgICByZXR1cm4gU1ZOX05PX0VSUk9SOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9j aygpOworICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihmdW5jdGlvbiwgTlVM TCkpID09IE5VTEwpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9y KCk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgaWYgKFB5SW50X0NoZWNrKHJlc3VsdCkp CisgICAgICAgIHsKKyAgICAgICAgICBpZiAoUHlJbnRfQXNMb25nKHJlc3VsdCkpCisgICAgICAg ICAgICBlcnIgPSBzdm5fZXJyb3JfY3JlYXRlKFNWTl9FUlJfQ0FOQ0VMTEVELCAwLCBOVUxMKTsK KyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoUHlMb25nX0NoZWNrKHJlc3VsdCkpCisgICAgICAg IHsKKyAgICAgICAgICBpZiAoUHlMb25nX0FzTG9uZyhyZXN1bHQpKQorICAgICAgICAgICAgZXJy ID0gc3ZuX2Vycm9yX2NyZWF0ZShTVk5fRVJSX0NBTkNFTExFRCwgMCwgTlVMTCk7CisgICAgICAg IH0KKyAgICAgIGVsc2UgaWYgKHJlc3VsdCAhPSBQeV9Ob25lKQorICAgICAgICB7CisgICAgICAg ICAgZXJyID0gY2FsbGJhY2tfYmFkX3JldHVybl9lcnJvcigiTm90IGFuIGludGVnZXIgb3IgTm9u ZSIpOworICAgICAgICB9CisgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICB9CisgIHN2bl9z d2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOworICByZXR1cm4gZXJyOworfQorCitzdm5fZXJyb3Jf dCAqc3ZuX3N3aWdfcHlfZnNfZ2V0X2xvY2tzX2Z1bmMgKHZvaWQgKmJhdG9uLCAKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX2xvY2tfdCAqbG9jaywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9v bCkKK3sKKyAgUHlPYmplY3QgKmZ1bmN0aW9uID0gYmF0b247CisgIFB5T2JqZWN0ICpyZXN1bHQ7 CisgIHN2bl9lcnJvcl90ICplcnIgPSBTVk5fTk9fRVJST1I7CisKKyAgaWYgKGZ1bmN0aW9uID09 IE5VTEwgfHwgZnVuY3Rpb24gPT0gUHlfTm9uZSkKKyAgICByZXR1cm4gU1ZOX05PX0VSUk9SOwor CisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisgIGlmICgocmVzdWx0ID0gUHlP YmplY3RfQ2FsbEZ1bmN0aW9uKGZ1bmN0aW9uLCAoY2hhciAqKSJPJk8mIiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9vYl9sb2NrLCBsb2NrLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxM KQorICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgIH0K KyAgZWxzZQorICAgIHsKKyAgICAgIC8qIFRoZSBjYWxsYmFjayBzaG91bGRuJ3QgYmUgcmV0dXJu aW5nIGFueXRoaW5nLiAqLworICAgICAgaWYgKHJlc3VsdCAhPSBQeV9Ob25lKQorICAgICAgICBl cnIgPSBjYWxsYmFja19iYWRfcmV0dXJuX2Vycm9yKCJOb3QgTm9uZSIpOworICAgICAgUHlfREVD UkVGKHJlc3VsdCk7CisgICAgfQorCisgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOwor ICByZXR1cm4gZXJyOworfQorCitzdm5fZXJyb3JfdCAqc3ZuX3N3aWdfcHlfZ2V0X2NvbW1pdF9s b2dfZnVuYyhjb25zdCBjaGFyICoqbG9nX21zZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKip0bXBfZmlsZSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9hcnJheV9oZWFkZXJfdCAqY29tbWl0 X2l0ZW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9p ZCAqYmF0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBh cHJfcG9vbF90ICpwb29sKQoreworICBQeU9iamVjdCAqZnVuY3Rpb24gPSBiYXRvbjsKKyAgUHlP YmplY3QgKnJlc3VsdDsKKyAgUHlPYmplY3QgKmNtdF9pdGVtczsKKyAgc3ZuX2Vycm9yX3QgKmVy cjsKKworICAqbG9nX21zZyA9IE5VTEw7CisgICp0bXBfZmlsZSA9IE5VTEw7CisKKyAgLyogIyMj IHRvZG86IGZvciBub3csIGp1c3QgaWdub3JlIHRoZSB3aG9sZSB0bXBfZmlsZSB0aGluZy4gICov CisKKyAgaWYgKChmdW5jdGlvbiA9PSBOVUxMKSB8fCAoZnVuY3Rpb24gPT0gUHlfTm9uZSkpCisg ICAgcmV0dXJuIFNWTl9OT19FUlJPUjsKKworICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xvY2so KTsKKworICBpZiAoY29tbWl0X2l0ZW1zKQorICAgIHsKKyAgICAgIGNtdF9pdGVtcyA9IGNvbW1p dF9pdGVtX2FycmF5X3RvX2xpc3QoY29tbWl0X2l0ZW1zKTsKKyAgICB9CisgIGVsc2UKKyAgICB7 CisgICAgICBjbXRfaXRlbXMgPSBQeV9Ob25lOworICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwor ICAgIH0KKworICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihmdW5jdGlvbiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikiT08mIiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY210X2l0ZW1zLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxM KQorICAgIHsKKyAgICAgIFB5X0RFQ1JFRihjbXRfaXRlbXMpOworICAgICAgZXJyID0gY2FsbGJh Y2tfZXhjZXB0aW9uX2Vycm9yKCk7CisgICAgICBnb3RvIGZpbmlzaGVkOworICAgIH0KKworICBQ eV9ERUNSRUYoY210X2l0ZW1zKTsKKworICBpZiAocmVzdWx0ID09IFB5X05vbmUpCisgICAgewor ICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgICAqbG9nX21zZyA9IE5VTEw7CisgICAgICBl cnIgPSBTVk5fTk9fRVJST1I7CisgICAgfQorICBlbHNlIGlmIChQeVN0cmluZ19DaGVjayhyZXN1 bHQpKQorICAgIHsKKyAgICAgICpsb2dfbXNnID0gYXByX3BzdHJkdXAocG9vbCwgUHlTdHJpbmdf QVNfU1RSSU5HKHJlc3VsdCkpOworICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgICBlcnIg PSBTVk5fTk9fRVJST1I7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgUHlfREVDUkVGKHJl c3VsdCk7CisgICAgICBlcnIgPSBjYWxsYmFja19iYWRfcmV0dXJuX2Vycm9yKCJOb3QgYSBzdHJp bmciKTsKKyAgICB9CisKKyBmaW5pc2hlZDoKKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2Nr KCk7CisgIHJldHVybiBlcnI7Cit9CisKKworc3ZuX2Vycm9yX3QgKnN2bl9zd2lnX3B5X3JlcG9z X2F1dGh6X2Z1bmMoc3ZuX2Jvb2xlYW5fdCAqYWxsb3dlZCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHN2bl9mc19yb290X3QgKnJvb3QsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwYXRoLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYmF0b24sCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKQoreworICBQ eU9iamVjdCAqZnVuY3Rpb24gPSBiYXRvbjsKKyAgUHlPYmplY3QgKnJlc3VsdDsKKyAgUHlPYmpl Y3QgKnB5X3Bvb2wsICpweV9yb290OworICBzdm5fZXJyb3JfdCAqZXJyID0gU1ZOX05PX0VSUk9S OworCisgICphbGxvd2VkID0gVFJVRTsKKworICBpZiAoZnVuY3Rpb24gPT0gTlVMTCB8fCBmdW5j dGlvbiA9PSBQeV9Ob25lKQorICAgIHJldHVybiBTVk5fTk9fRVJST1I7CisKKyAgc3ZuX3N3aWdf cHlfYWNxdWlyZV9weV9sb2NrKCk7CisKKyAgcHlfcG9vbCA9IG1ha2Vfb2JfcG9vbChwb29sKTsK KyAgaWYgKHB5X3Bvb2wgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFja19leGNl cHRpb25fZXJyb3IoKTsKKyAgICAgIGdvdG8gZmluaXNoZWQ7CisgICAgfQorICBweV9yb290ID0g bWFrZV9vYl9mc19yb290KHJvb3QsIHB5X3Bvb2wpOworICBpZiAocHlfcm9vdCA9PSBOVUxMKQor ICAgIHsKKyAgICAgIFB5X0RFQ1JFRihweV9wb29sKTsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4 Y2VwdGlvbl9lcnJvcigpOworICAgICAgZ290byBmaW5pc2hlZDsKKyAgICB9CisKKyAgaWYgKChy ZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oZnVuY3Rpb24sCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopIk9zTyIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHB5X3Jvb3QsIHBhdGgsIHB5X3Bvb2wpKSA9PSBOVUxMKQorICAg IHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgIH0KKyAgZWxz ZQorICAgIHsKKyAgICAgIGlmIChQeUludF9DaGVjayhyZXN1bHQpKQorICAgICAgICAqYWxsb3dl ZCA9IFB5SW50X0FzTG9uZyhyZXN1bHQpOworICAgICAgZWxzZSBpZiAoUHlMb25nX0NoZWNrKHJl c3VsdCkpCisgICAgICAgICphbGxvd2VkID0gUHlMb25nX0FzTG9uZyhyZXN1bHQpOworICAgICAg ZWxzZQorICAgICAgICBlcnIgPSBjYWxsYmFja19iYWRfcmV0dXJuX2Vycm9yKCJOb3QgYW4gaW50 ZWdlciIpOworICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgfQorICBQeV9ERUNSRUYocHlf cm9vdCk7CisgIFB5X0RFQ1JFRihweV9wb29sKTsKK2ZpbmlzaGVkOgorICBzdm5fc3dpZ19weV9y ZWxlYXNlX3B5X2xvY2soKTsKKyAgcmV0dXJuIGVycjsKK30KKworCitzdm5fZXJyb3JfdCAqc3Zu X3N3aWdfcHlfcmVwb3NfaGlzdG9yeV9mdW5jKHZvaWQgKmJhdG9uLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwYXRoLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdm5fcmV2bnVtX3QgcmV2aXNpb24s CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3Qg KnBvb2wpCit7CisgIFB5T2JqZWN0ICpmdW5jdGlvbiA9IGJhdG9uOworICBQeU9iamVjdCAqcmVz dWx0OworICBzdm5fZXJyb3JfdCAqZXJyID0gU1ZOX05PX0VSUk9SOworCisgIGlmIChmdW5jdGlv biA9PSBOVUxMIHx8IGZ1bmN0aW9uID09IFB5X05vbmUpCisgICAgcmV0dXJuIFNWTl9OT19FUlJP UjsKKworICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xvY2soKTsKKyAgaWYgKChyZXN1bHQgPSBQ eU9iamVjdF9DYWxsRnVuY3Rpb24oZnVuY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChjaGFyICopInNsTyYiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBwYXRoLCByZXZpc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbWFrZV9vYl9wb29sLCBwb29sKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIg PSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAg ICBpZiAocmVzdWx0ICE9IFB5X05vbmUpCisgICAgICAgIGVyciA9IGNhbGxiYWNrX2JhZF9yZXR1 cm5fZXJyb3IoIk5vdCBOb25lIik7CisgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICB9Cisg IHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOworICByZXR1cm4gZXJyOworfQorCisKK3N2 bl9lcnJvcl90ICpzdm5fc3dpZ19weV9sb2dfcmVjZWl2ZXIodm9pZCAqYmF0b24sCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9oYXNoX3QgKmNoYW5nZWRfcGF0aHMs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2bl9yZXZudW1fdCByZXYs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmF1dGhv ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZGF0 ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbXNn LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29s KQoreworICBQeU9iamVjdCAqcmVjZWl2ZXIgPSBiYXRvbjsKKyAgUHlPYmplY3QgKnJlc3VsdCwg KnB5X3Bvb2w7CisgIFB5T2JqZWN0ICpjaHBhdGhzOworICBzdm5fZXJyb3JfdCAqZXJyID0gU1ZO X05PX0VSUk9SOworCisgIGlmICgocmVjZWl2ZXIgPT0gTlVMTCkgfHwgKHJlY2VpdmVyID09IFB5 X05vbmUpKQorICAgIHJldHVybiBTVk5fTk9fRVJST1I7CisKKyAgc3ZuX3N3aWdfcHlfYWNxdWly ZV9weV9sb2NrKCk7CisKKyAgcHlfcG9vbCA9IG1ha2Vfb2JfcG9vbChwb29sKTsKKyAgaWYgKHB5 X3Bvb2wgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJy b3IoKTsKKyAgICAgIGdvdG8gZmluaXNoZWQ7CisgICAgfQorCisgIGlmIChjaGFuZ2VkX3BhdGhz KQorICAgIHsKKyAgICAgIGNocGF0aHMgPSBjb252ZXJ0X2hhc2goY2hhbmdlZF9wYXRocywgY29u dmVydF9sb2dfY2hhbmdlZF9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxM LCBOVUxMKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBjaHBhdGhzID0gUHlfTm9uZTsK KyAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKKyAgICB9CisKKyAgaWYgKChyZXN1bHQgPSBQeU9i amVjdF9DYWxsRnVuY3Rpb24ocmVjZWl2ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChjaGFyICopIk9sc3NzTyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNocGF0aHMsIHJldiwgYXV0aG9yLCBkYXRlLCBtc2csCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHB5X3Bvb2wpKSA9PSBOVUxMKQorICAgIHsKKyAgICAg IGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgIH0KKyAgZWxzZQorICAgIHsK KyAgICAgIGlmIChyZXN1bHQgIT0gUHlfTm9uZSkKKyAgICAgICAgZXJyID0gY2FsbGJhY2tfYmFk X3JldHVybl9lcnJvcigiTm90IE5vbmUiKTsKKyAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAg IH0KKworICBQeV9ERUNSRUYoY2hwYXRocyk7CisgIFB5X0RFQ1JFRihweV9wb29sKTsKK2Zpbmlz aGVkOgorICBzdm5fc3dpZ19weV9yZWxlYXNlX3B5X2xvY2soKTsKKyAgcmV0dXJuIGVycjsKK30K Kworc3ZuX2Vycm9yX3QgKnN2bl9zd2lnX3B5X2luZm9fcmVjZWl2ZXJfZnVuYyh2b2lkICpiYXRv biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh ciAqcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3Qgc3ZuX2luZm9fdCAqaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgUHlPYmplY3QgKnJlY2VpdmVyID0gYmF0 b247CisgIFB5T2JqZWN0ICpyZXN1bHQ7CisgIHN2bl9lcnJvcl90ICplcnIgPSBTVk5fTk9fRVJS T1I7CisKKyAgaWYgKChyZWNlaXZlciA9PSBOVUxMKSB8fCAocmVjZWl2ZXIgPT0gUHlfTm9uZSkp CisgICAgcmV0dXJuIFNWTl9OT19FUlJPUjsKKworICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xv Y2soKTsKKworICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihyZWNlaXZlciwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikic08mTyYiLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLCBtYWtlX29iX2luZm8s IGluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vfb2JfcG9v bCwgcG9vbCkpID09IE5VTEwpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9u X2Vycm9yKCk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgaWYgKHJlc3VsdCAhPSBQeV9O b25lKQorICAgICAgICBlcnIgPSBjYWxsYmFja19iYWRfcmV0dXJuX2Vycm9yKCJOb3QgTm9uZSIp OworICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgfQorCisgIHN2bl9zd2lnX3B5X3JlbGVh c2VfcHlfbG9jaygpOworCisgIHJldHVybiBlcnI7Cit9CisKK3N2bl9lcnJvcl90ICpzdm5fc3dp Z19weV9jbGllbnRfYmxhbWVfcmVjZWl2ZXJfZnVuYyh2b2lkICpiYXRvbiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfaW50NjRfdCBsaW5l X25vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHN2bl9yZXZudW1fdCByZXZpc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphdXRob3IsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZGF0ZSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj aGFyICpsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGFwcl9wb29sX3QgKnBvb2wpCit7CisgIFB5T2JqZWN0ICpyZWNlaXZlciA9IGJhdG9u OworICBQeU9iamVjdCAqcmVzdWx0OworICBzdm5fZXJyb3JfdCAqZXJyID0gU1ZOX05PX0VSUk9S OworCisgIGlmICgocmVjZWl2ZXIgPT0gTlVMTCkgfHwgKHJlY2VpdmVyID09IFB5X05vbmUpKQor ICAgIHJldHVybiBTVk5fTk9fRVJST1I7CisKKyAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2Nr KCk7CisKKyAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24ocmVjZWl2ZXIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTVk5fQVBSX0lOVDY0X1RfUFlDRk1UICJsc3Nz TyYiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZV9ubywgcmV2 aXNpb24sIGF1dGhvciwgZGF0ZSwgbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbWFrZV9vYl9wb29sLCBwb29sKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIg PSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAg ICBpZiAocmVzdWx0ICE9IFB5X05vbmUpCisgICAgICAgIGVyciA9IGNhbGxiYWNrX2JhZF9yZXR1 cm5fZXJyb3IoIk5vdCBOb25lIik7CisgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICB9CisK KyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7CisgIHJldHVybiBlcnI7Cit9CisKKwor c3ZuX2Vycm9yX3QgKgorc3ZuX3N3aWdfcHlfYXV0aF9zaW1wbGVfcHJvbXB0X2Z1bmMgKHN2bl9h dXRoX2NyZWRfc2ltcGxlX3QgKipjcmVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHZvaWQgKmJhdG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IGNoYXIgKnJlYWxtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IGNoYXIgKnVzZXJuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHN2bl9ib29sZWFuX3QgbWF5X3NhdmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgUHlPYmplY3QgKmZ1bmN0aW9uID0gYmF0 b247CisgIFB5T2JqZWN0ICpyZXN1bHQ7CisgIHN2bl9hdXRoX2NyZWRfc2ltcGxlX3QgKmNyZWRz ID0gTlVMTDsKKyAgc3ZuX2Vycm9yX3QgKmVyciA9IFNWTl9OT19FUlJPUjsKKworICBpZiAoKGZ1 bmN0aW9uID09IE5VTEwpIHx8IChmdW5jdGlvbiA9PSBQeV9Ob25lKSkKKyAgICByZXR1cm4gU1ZO X05PX0VSUk9SOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisgIGlmICgo cmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGZ1bmN0aW9uLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJzc2xPJiIsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHJlYWxtLCB1c2VybmFtZSwgbWF5X3NhdmUsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vfb2JfcG9vbCwgcG9vbCkpID09IE5V TEwpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7CisgICAg fQorICBlbHNlCisgICAgeworICAgICAgaWYgKHJlc3VsdCAhPSBQeV9Ob25lKQorICAgICAgICB7 CisgICAgICAgICAgc3ZuX2F1dGhfY3JlZF9zaW1wbGVfdCAqdG1wX2NyZWRzID0gTlVMTDsKKyAg ICAgICAgICBpZiAoc3ZuX3N3aWdfQ29udmVydFB0clN0cmluZyhyZXN1bHQsICh2b2lkICoqKSZ0 bXBfY3JlZHMsCisgICAgICAgICAgICAgICAgInN2bl9hdXRoX2NyZWRfc2ltcGxlX3QgKiIpKQor ICAgICAgICAgICAgeworICAgICAgICAgICAgICBlcnIgPSB0eXBlX2NvbnZlcnNpb25fZXJyb3Io InN2bl9hdXRoX2NyZWRfc2ltcGxlX3QgKiIpOworICAgICAgICAgICAgfQorICAgICAgICAgIGVs c2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY3JlZHMgPSBhcHJfcGNhbGxvYyhwb29s LCBzaXplb2YgKCpjcmVkcykpOworICAgICAgICAgICAgICBjcmVkcy0+dXNlcm5hbWUgPSB0bXBf Y3JlZHMtPnVzZXJuYW1lID8gXAorICAgICAgICAgICAgICAgIGFwcl9wc3RyZHVwKHBvb2wsIHRt cF9jcmVkcy0+dXNlcm5hbWUpIDogTlVMTDsKKyAgICAgICAgICAgICAgY3JlZHMtPnBhc3N3b3Jk ID0gdG1wX2NyZWRzLT5wYXNzd29yZCA/IFwKKyAgICAgICAgICAgICAgICBhcHJfcHN0cmR1cChw b29sLCB0bXBfY3JlZHMtPnBhc3N3b3JkKSA6IE5VTEw7CisgICAgICAgICAgICAgIGNyZWRzLT5t YXlfc2F2ZSA9IHRtcF9jcmVkcy0+bWF5X3NhdmU7CisgICAgICAgICAgICB9CisgICAgICAgIH0K KyAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgIH0KKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9w eV9sb2NrKCk7CisgICpjcmVkID0gY3JlZHM7CisgIHJldHVybiBlcnI7Cit9CisKK3N2bl9lcnJv cl90ICoKK3N2bl9zd2lnX3B5X2F1dGhfdXNlcm5hbWVfcHJvbXB0X2Z1bmMgKHN2bl9hdXRoX2Ny ZWRfdXNlcm5hbWVfdCAqKmNyZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB2b2lkICpiYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IGNoYXIgKnJlYWxtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc3ZuX2Jvb2xlYW5fdCBtYXlfc2F2ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpCit7CisgIFB5T2JqZWN0ICpmdW5jdGlvbiA9IGJh dG9uOworICBQeU9iamVjdCAqcmVzdWx0OworICBzdm5fYXV0aF9jcmVkX3VzZXJuYW1lX3QgKmNy ZWRzID0gTlVMTDsKKyAgc3ZuX2Vycm9yX3QgKmVyciA9IFNWTl9OT19FUlJPUjsKKworICBpZiAo KGZ1bmN0aW9uID09IE5VTEwpIHx8IChmdW5jdGlvbiA9PSBQeV9Ob25lKSkKKyAgICByZXR1cm4g U1ZOX05PX0VSUk9SOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisgIGlm ICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGZ1bmN0aW9uLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJzbE8mIiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcmVhbG0sIG1heV9zYXZlLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBtYWtlX29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQorICAg IHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgIH0KKyAgZWxz ZQorICAgIHsKKyAgICAgIGlmIChyZXN1bHQgIT0gUHlfTm9uZSkKKyAgICAgICAgeworICAgICAg ICAgIHN2bl9hdXRoX2NyZWRfdXNlcm5hbWVfdCAqdG1wX2NyZWRzID0gTlVMTDsKKyAgICAgICAg ICBpZiAoc3ZuX3N3aWdfQ29udmVydFB0clN0cmluZyhyZXN1bHQsICh2b2lkICoqKSZ0bXBfY3Jl ZHMsCisgICAgICAgICAgICAgICAgInN2bl9hdXRoX2NyZWRfdXNlcm5hbWVfdCAqIikpCisgICAg ICAgICAgICB7CisgICAgICAgICAgICAgIGVyciA9IHR5cGVfY29udmVyc2lvbl9lcnJvcigic3Zu X2F1dGhfY3JlZF91c2VybmFtZV90ICoiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNl CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNyZWRzID0gYXByX3BjYWxsb2MocG9vbCwg c2l6ZW9mICgqY3JlZHMpKTsKKyAgICAgICAgICAgICAgY3JlZHMtPnVzZXJuYW1lID0gdG1wX2Ny ZWRzLT51c2VybmFtZSA/IFwKKyAgICAgICAgICAgICAgICBhcHJfcHN0cmR1cChwb29sLCB0bXBf Y3JlZHMtPnVzZXJuYW1lKSA6IE5VTEw7CisgICAgICAgICAgICAgIGNyZWRzLT5tYXlfc2F2ZSA9 IHRtcF9jcmVkcy0+bWF5X3NhdmU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIFB5 X0RFQ1JFRihyZXN1bHQpOworICAgIH0KKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7 CisgICpjcmVkID0gY3JlZHM7CisgIHJldHVybiBlcnI7Cit9CisKKworc3ZuX2Vycm9yX3QgKgor c3ZuX3N3aWdfcHlfYXV0aF9zc2xfc2VydmVyX3RydXN0X3Byb21wdF9mdW5jKAorICAgIHN2bl9h dXRoX2NyZWRfc3NsX3NlcnZlcl90cnVzdF90ICoqY3JlZCwKKyAgICB2b2lkICpiYXRvbiwKKyAg ICBjb25zdCBjaGFyICpyZWFsbSwKKyAgICBhcHJfdWludDMyX3QgZmFpbHVyZXMsCisgICAgY29u c3Qgc3ZuX2F1dGhfc3NsX3NlcnZlcl9jZXJ0X2luZm9fdCAqY2VydF9pbmZvLAorICAgIHN2bl9i b29sZWFuX3QgbWF5X3NhdmUsCisgICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgUHlPYmplY3Qg KmZ1bmN0aW9uID0gYmF0b247CisgIFB5T2JqZWN0ICpyZXN1bHQ7CisgIHN2bl9hdXRoX2NyZWRf c3NsX3NlcnZlcl90cnVzdF90ICpjcmVkcyA9IE5VTEw7CisgIHN2bl9lcnJvcl90ICplcnIgPSBT Vk5fTk9fRVJST1I7CisKKyAgaWYgKChmdW5jdGlvbiA9PSBOVUxMKSB8fCAoZnVuY3Rpb24gPT0g UHlfTm9uZSkpCisgICAgcmV0dXJuIFNWTl9OT19FUlJPUjsKKworICBzdm5fc3dpZ19weV9hY3F1 aXJlX3B5X2xvY2soKTsKKworICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihm dW5jdGlvbiwgKGNoYXIgKikic2xPJmxPJiIsCisgICAgICAgICAgICAgICAgICByZWFsbSwgZmFp bHVyZXMsIG1ha2Vfb2JfYXV0aF9zc2xfc2VydmVyX2NlcnRfaW5mbywKKyAgICAgICAgICAgICAg ICAgIGNlcnRfaW5mbywgbWF5X3NhdmUsIG1ha2Vfb2JfcG9vbCwgcG9vbCkpID09IE5VTEwpCisg ICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7CisgICAgfQorICBl bHNlCisgICAgeworICAgICAgaWYgKHJlc3VsdCAhPSBQeV9Ob25lKQorICAgICAgICB7CisgICAg ICAgICAgc3ZuX2F1dGhfY3JlZF9zc2xfc2VydmVyX3RydXN0X3QgKnRtcF9jcmVkcyA9IE5VTEw7 CisgICAgICAgICAgaWYgKHN2bl9zd2lnX0NvbnZlcnRQdHJTdHJpbmcKKyAgICAgICAgICAgICAg KHJlc3VsdCwgKHZvaWQgKiopJnRtcF9jcmVkcywKKyAgICAgICAgICAgICAgICJzdm5fYXV0aF9j cmVkX3NzbF9zZXJ2ZXJfdHJ1c3RfdCAqIikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg IGVyciA9IHR5cGVfY29udmVyc2lvbl9lcnJvcgorICAgICAgICAgICAgICAgICgic3ZuX2F1dGhf Y3JlZF9zc2xfc2VydmVyX3RydXN0X3QgKiIpOworICAgICAgICAgICAgfQorICAgICAgICAgIGVs c2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY3JlZHMgPSBhcHJfcGNhbGxvYyhwb29s LCBzaXplb2YgKCpjcmVkcykpOworICAgICAgICAgICAgICAqY3JlZHMgPSAqdG1wX2NyZWRzOwor ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICB9 CisKKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7CisgICpjcmVkID0gY3JlZHM7Cisg IHJldHVybiBlcnI7Cit9CisKK3N2bl9lcnJvcl90ICoKK3N2bl9zd2lnX3B5X2F1dGhfc3NsX2Ns aWVudF9jZXJ0X3Byb21wdF9mdW5jKAorICAgIHN2bl9hdXRoX2NyZWRfc3NsX2NsaWVudF9jZXJ0 X3QgKipjcmVkLAorICAgIHZvaWQgKmJhdG9uLAorICAgIGNvbnN0IGNoYXIgKnJlYWxtLAorICAg IHN2bl9ib29sZWFuX3QgbWF5X3NhdmUsCisgICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgUHlP YmplY3QgKmZ1bmN0aW9uID0gYmF0b247CisgIFB5T2JqZWN0ICpyZXN1bHQ7CisgIHN2bl9hdXRo X2NyZWRfc3NsX2NsaWVudF9jZXJ0X3QgKmNyZWRzID0gTlVMTDsKKyAgc3ZuX2Vycm9yX3QgKmVy ciA9IFNWTl9OT19FUlJPUjsKKworICBpZiAoKGZ1bmN0aW9uID09IE5VTEwpIHx8IChmdW5jdGlv biA9PSBQeV9Ob25lKSkKKyAgICByZXR1cm4gU1ZOX05PX0VSUk9SOworCisgIHN2bl9zd2lnX3B5 X2FjcXVpcmVfcHlfbG9jaygpOworCisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0 aW9uKGZ1bmN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hh ciAqKSJzbE8mIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhbG0s IG1heV9zYXZlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX29i X3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2Vw dGlvbl9lcnJvcigpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGlmIChyZXN1bHQgIT0g UHlfTm9uZSkKKyAgICAgICAgeworICAgICAgICAgIHN2bl9hdXRoX2NyZWRfc3NsX2NsaWVudF9j ZXJ0X3QgKnRtcF9jcmVkcyA9IE5VTEw7CisgICAgICAgICAgaWYgKHN2bl9zd2lnX0NvbnZlcnRQ dHJTdHJpbmcKKyAgICAgICAgICAgICAgKHJlc3VsdCwgKHZvaWQgKiopJnRtcF9jcmVkcywKKyAg ICAgICAgICAgICAgICJzdm5fYXV0aF9jcmVkX3NzbF9jbGllbnRfY2VydF90ICoiKSkKKyAgICAg ICAgICAgIHsKKyAgICAgICAgICAgICAgZXJyID0gdHlwZV9jb252ZXJzaW9uX2Vycm9yKCJzdm5f YXV0aF9jcmVkX3NzbF9jbGllbnRfY2VydF90ICoiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg ICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNyZWRzID0gYXByX3BjYWxsb2Mo cG9vbCwgc2l6ZW9mICgqY3JlZHMpKTsKKyAgICAgICAgICAgICAgY3JlZHMtPmNlcnRfZmlsZSA9 IHRtcF9jcmVkcy0+Y2VydF9maWxlID8gXAorICAgICAgICAgICAgICAgIGFwcl9wc3RyZHVwKHBv b2wsIHRtcF9jcmVkcy0+Y2VydF9maWxlKSA6IE5VTEw7CisgICAgICAgICAgICAgIGNyZWRzLT5t YXlfc2F2ZSA9IHRtcF9jcmVkcy0+bWF5X3NhdmU7CisgICAgICAgICAgICB9CisgICAgICAgIH0K KyAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgIH0KKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9w eV9sb2NrKCk7CisgICpjcmVkID0gY3JlZHM7CisgIHJldHVybiBlcnI7Cit9CisKK3N2bl9lcnJv cl90ICoKK3N2bl9zd2lnX3B5X2F1dGhfc3NsX2NsaWVudF9jZXJ0X3B3X3Byb21wdF9mdW5jKAor ICAgIHN2bl9hdXRoX2NyZWRfc3NsX2NsaWVudF9jZXJ0X3B3X3QgKipjcmVkLAorICAgIHZvaWQg KmJhdG9uLAorICAgIGNvbnN0IGNoYXIgKnJlYWxtLAorICAgIHN2bl9ib29sZWFuX3QgbWF5X3Nh dmUsCisgICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgUHlPYmplY3QgKmZ1bmN0aW9uID0gYmF0 b247CisgIFB5T2JqZWN0ICpyZXN1bHQ7CisgIHN2bl9hdXRoX2NyZWRfc3NsX2NsaWVudF9jZXJ0 X3B3X3QgKmNyZWRzID0gTlVMTDsKKyAgc3ZuX2Vycm9yX3QgKmVyciA9IFNWTl9OT19FUlJPUjsK KworICBpZiAoKGZ1bmN0aW9uID09IE5VTEwpIHx8IChmdW5jdGlvbiA9PSBQeV9Ob25lKSkKKyAg ICByZXR1cm4gU1ZOX05PX0VSUk9SOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygp OworCisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGZ1bmN0aW9uLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJzbE8mIiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhbG0sIG1heV9zYXZlLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX29iX3Bvb2wsIHBvb2wpKSA9PSBO VUxMKQorICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAg IH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGlmIChyZXN1bHQgIT0gUHlfTm9uZSkKKyAgICAgICAg eworICAgICAgICAgIHN2bl9hdXRoX2NyZWRfc3NsX2NsaWVudF9jZXJ0X3B3X3QgKnRtcF9jcmVk cyA9IE5VTEw7CisgICAgICAgICAgaWYgKHN2bl9zd2lnX0NvbnZlcnRQdHJTdHJpbmcKKyAgICAg ICAgICAgICAgKHJlc3VsdCwgKHZvaWQgKiopJnRtcF9jcmVkcywKKyAgICAgICAgICAgICAgICJz dm5fYXV0aF9jcmVkX3NzbF9jbGllbnRfY2VydF9wd190ICoiKSkKKyAgICAgICAgICAgIHsKKyAg ICAgICAgICAgICAgZXJyID0gdHlwZV9jb252ZXJzaW9uX2Vycm9yCisgICAgICAgICAgICAgICAg KCJzdm5fYXV0aF9jcmVkX3NzbF9jbGllbnRfY2VydF9wd190ICoiKTsKKyAgICAgICAgICAgIH0K KyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNyZWRzID0gYXBy X3BjYWxsb2MocG9vbCwgc2l6ZW9mICgqY3JlZHMpKTsKKyAgICAgICAgICAgICAgY3JlZHMtPnBh c3N3b3JkID0gdG1wX2NyZWRzLT5wYXNzd29yZCA/IFwKKyAgICAgICAgICAgICAgICBhcHJfcHN0 cmR1cChwb29sLCB0bXBfY3JlZHMtPnBhc3N3b3JkKSA6IE5VTEw7CisgICAgICAgICAgICAgIGNy ZWRzLT5tYXlfc2F2ZSA9IHRtcF9jcmVkcy0+bWF5X3NhdmU7CisgICAgICAgICAgICB9CisgICAg ICAgIH0KKyAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgIH0KKyAgc3ZuX3N3aWdfcHlfcmVs ZWFzZV9weV9sb2NrKCk7CisgICpjcmVkID0gY3JlZHM7CisgIHJldHVybiBlcnI7Cit9CisKK3Zv aWQKK3N2bl9zd2lnX3B5X3NldHVwX3JhX2NhbGxiYWNrcyhzdm5fcmFfY2FsbGJhY2tzMl90ICoq Y2FsbGJhY2tzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKipiYXRvbiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqcHlfY2FsbGJhY2tzLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpCit7CisgIHN2 bl9lcnJvcl90ICplcnIgPSBzdm5fcmFfY3JlYXRlX2NhbGxiYWNrcyhjYWxsYmFja3MsIHBvb2wp OworCisgIGlmIChlcnIpCisgICAgeworICAgICAgc3ZuX3N3aWdfcHlfc3ZuX2V4Y2VwdGlvbihl cnIpOworICAgICAgcmV0dXJuOworICAgIH0KKworICAqYmF0b24gPSBweV9jYWxsYmFja3M7Cit9 CisKK3N2bl9lcnJvcl90ICpzdm5fc3dpZ19weV9jb21taXRfY2FsbGJhY2syKGNvbnN0IHN2bl9j b21taXRfaW5mb190ICpjb21taXRfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHZvaWQgKmJhdG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgUHlPYmplY3QgKnJlY2VpdmVyID0g YmF0b247CisgIFB5T2JqZWN0ICpyZXN1bHQ7CisgIHN2bl9lcnJvcl90ICplcnIgPSBTVk5fTk9f RVJST1I7CisKKyAgaWYgKChyZWNlaXZlciA9PSBOVUxMKSB8fCAocmVjZWl2ZXIgPT0gUHlfTm9u ZSkpCisgICAgcmV0dXJuIFNWTl9OT19FUlJPUjsKKworICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5 X2xvY2soKTsKKworICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihyZWNlaXZl ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikiTyZPJiIs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vfb2JfY29tbWl0X2lu Zm8sIGNvbW1pdF9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt YWtlX29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNr X2V4Y2VwdGlvbl9lcnJvcigpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGlmIChyZXN1 bHQgIT0gUHlfTm9uZSkKKyAgICAgICAgZXJyID0gY2FsbGJhY2tfYmFkX3JldHVybl9lcnJvcigi Tm90IE5vbmUiKTsKKyAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgIH0KKworICBzdm5fc3dp Z19weV9yZWxlYXNlX3B5X2xvY2soKTsKKworICByZXR1cm4gZXJyOworfQorCitzdm5fZXJyb3Jf dCAqc3ZuX3N3aWdfcHlfY29tbWl0X2NhbGxiYWNrKHN2bl9yZXZudW1fdCBuZXdfcmV2aXNpb24s CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRh dGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg KmF1dGhvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAq YmF0b24pCit7CisgIFB5T2JqZWN0ICpyZWNlaXZlciA9IGJhdG9uOworICBQeU9iamVjdCAqcmVz dWx0OworICBzdm5fZXJyb3JfdCAqZXJyID0gU1ZOX05PX0VSUk9SOworCisgIGlmICgocmVjZWl2 ZXIgPT0gTlVMTCkgfHwgKHJlY2VpdmVyID09IFB5X05vbmUpKQorICAgIHJldHVybiBTVk5fTk9f RVJST1I7CisKKyAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7CisKKyAgaWYgKChyZXN1 bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24ocmVjZWl2ZXIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChjaGFyICopImxzcyIsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG5ld19yZXZpc2lvbiwgZGF0ZSwgYXV0aG9yKSkgPT0gTlVMTCkKKyAg ICB7CisgICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICB9CisgIGVs c2UKKyAgICB7CisgICAgICBpZiAocmVzdWx0ICE9IFB5X05vbmUpCisgICAgICAgIGVyciA9IGNh bGxiYWNrX2JhZF9yZXR1cm5fZXJyb3IoIk5vdCBOb25lIik7CisgICAgICBQeV9ERUNSRUYocmVz dWx0KTsKKyAgICB9CisKKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7CisKKyAgcmV0 dXJuIGVycjsKK30KKworc3ZuX2Vycm9yX3QgKnN2bl9zd2lnX3B5X3JhX2ZpbGVfcmV2X2hhbmRs ZXJfZnVuYygKKyAgICAgICAgICAgICAgICAgICAgdm9pZCAqYmF0b24sCisgICAgICAgICAgICAg ICAgICAgIGNvbnN0IGNoYXIgKnBhdGgsCisgICAgICAgICAgICAgICAgICAgIHN2bl9yZXZudW1f dCByZXYsCisgICAgICAgICAgICAgICAgICAgIGFwcl9oYXNoX3QgKnJldl9wcm9wcywKKyAgICAg ICAgICAgICAgICAgICAgc3ZuX3R4ZGVsdGFfd2luZG93X2hhbmRsZXJfdCAqZGVsdGFfaGFuZGxl ciwKKyAgICAgICAgICAgICAgICAgICAgdm9pZCAqKmRlbHRhX2JhdG9uLAorICAgICAgICAgICAg ICAgICAgICBhcHJfYXJyYXlfaGVhZGVyX3QgKnByb3BfZGlmZnMsCisgICAgICAgICAgICAgICAg ICAgIGFwcl9wb29sX3QgKnBvb2wpCit7CisgIFB5T2JqZWN0ICpoYW5kbGVyID0gYmF0b247Cisg IFB5T2JqZWN0ICpyZXN1bHQsICpweV9yZXZfcHJvcHMgPSBOVUxMLCAqcHlfcHJvcF9kaWZmcyA9 IE5VTEw7CisgIHN2bl9lcnJvcl90ICplcnIgPSBTVk5fTk9fRVJST1I7CisKKyAgaWYgKChoYW5k bGVyID09IE5VTEwpIHx8IChoYW5kbGVyID09IFB5X05vbmUpKQorICAgIHJldHVybiBTVk5fTk9f RVJST1I7CisKKyAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7CisKKyAgcHlfcmV2X3By b3BzID0gc3ZuX3N3aWdfcHlfcHJvcGhhc2hfdG9fZGljdChyZXZfcHJvcHMpOworICBpZiAocHlf cmV2X3Byb3BzID09IE5VTEwpCisgICAgeworICAgICAgZXJyID0gdHlwZV9jb252ZXJzaW9uX2Vy cm9yKCJhcHJfaGFzaF90ICoiKTsKKyAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgIHB5X3By b3BfZGlmZnMgPSBwcm9wYXJyYXlfdG9fZGljdChwcm9wX2RpZmZzKTsKKworICBpZiAocHlfcHJv cF9kaWZmcyA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVyciA9IHR5cGVfY29udmVyc2lvbl9lcnJv cigiYXByX2FycmF5X2hlYWRlcl90ICoiKTsKKyAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisg IGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGhhbmRsZXIsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopInNsT09PJiIsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGgsIHJldiwgcHlfcmV2X3Byb3BzLCBweV9w cm9wX2RpZmZzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX29i X3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2Vw dGlvbl9lcnJvcigpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGlmIChyZXN1bHQgIT0g UHlfTm9uZSkKKyAgICAgICAgZXJyID0gY2FsbGJhY2tfYmFkX3JldHVybl9lcnJvcigiTm90IE5v bmUiKTsKKworICAgICAgLyogRklYTUU6IFN1cHBvcnQgcmV0dXJuZWQgVHhEZWx0YVdpbmRvdyBv YmplY3QgYW5kCisgICAgICAgKiBzZXQgZGVsdGFfaGFuZGxlciBhbmQgZGVsdGFfYmF0b24gKi8K KyAgICAgICpkZWx0YV9oYW5kbGVyID0gTlVMTDsKKyAgICAgICpkZWx0YV9iYXRvbiA9IE5VTEw7 CisKKyAgICAgIFB5X1hERUNSRUYocmVzdWx0KTsKKyAgICB9CisKK2Vycm9yOgorCisgIFB5X1hE RUNSRUYocHlfcmV2X3Byb3BzKTsKKyAgUHlfWERFQ1JFRihweV9wcm9wX2RpZmZzKTsKKworICBz dm5fc3dpZ19weV9yZWxlYXNlX3B5X2xvY2soKTsKKworICByZXR1cm4gZXJyOworfQorCitzdGF0 aWMgc3ZuX2Vycm9yX3QgKnJlcG9ydGVyX3NldF9wYXRoKHZvaWQgKnJlcG9ydF9iYXRvbiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdGgsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICBzdm5fcmV2bnVtX3QgcmV2aXNpb24sCisgICAgICAgICAgICAgICAgICAg ICAgICAgICBzdm5fYm9vbGVhbl90IHN0YXJ0X2VtcHR5LAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgY2hhciAqbG9ja190b2tlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg IGFwcl9wb29sX3QgKnBvb2wpCit7CisgIHN2bl9lcnJvcl90ICplcnIgPSBTVk5fTk9fRVJST1I7 CisgIFB5T2JqZWN0ICpweV9yZXBvcnRlciA9IHJlcG9ydF9iYXRvbiwgKnJlc3VsdDsKKworICBp ZiAocHlfcmVwb3J0ZXIgPT0gTlVMTCB8fCBweV9yZXBvcnRlciA9PSBQeV9Ob25lKQorICAgIHJl dHVybiBTVk5fTk9fRVJST1I7CisKKyAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7CisK KyAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKHB5X3JlcG9ydGVyLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikic2V0X3BhdGgiLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikic2xic08mIiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGgsIHJldmlzaW9uLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRfZW1wdHksIGxvY2tfdG9rZW4sCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxM KQorICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgIH0K KyAgZWxzZSBpZiAocmVzdWx0ICE9IFB5X05vbmUpCisgICAgeworICAgICAgZXJyID0gY2FsbGJh Y2tfYmFkX3JldHVybl9lcnJvcigiTm90IE5vbmUiKTsKKyAgICB9CisKKyAgUHlfWERFQ1JFRihy ZXN1bHQpOworCisgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOworCisgIHJldHVybiBl cnI7Cit9CisKK3N0YXRpYyBzdm5fZXJyb3JfdCAqcmVwb3J0ZXJfZGVsZXRlX3BhdGgodm9pZCAq cmVwb3J0X2JhdG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdGgs CisgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKQoreworICBzdm5fZXJy b3JfdCAqZXJyID0gU1ZOX05PX0VSUk9SOworICBQeU9iamVjdCAqcHlfcmVwb3J0ZXIgPSByZXBv cnRfYmF0b24sICpyZXN1bHQ7CisKKyAgaWYgKHB5X3JlcG9ydGVyID09IE5VTEwgfHwgcHlfcmVw b3J0ZXIgPT0gUHlfTm9uZSkKKyAgICByZXR1cm4gU1ZOX05PX0VSUk9SOworCisgIHN2bl9zd2ln X3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbE1l dGhvZChweV9yZXBvcnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChj aGFyICopImRlbGV0ZV9wYXRoIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChjaGFyICopInNPJiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRo LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vfb2JfcG9vbCwgcG9v bCkpID09IE5VTEwpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9y KCk7CisgICAgfQorICBlbHNlIGlmIChyZXN1bHQgIT0gUHlfTm9uZSkKKyAgICB7CisgICAgICBl cnIgPSBjYWxsYmFja19iYWRfcmV0dXJuX2Vycm9yKCJOb3QgTm9uZSIpOworICAgIH0KKworICBQ eV9YREVDUkVGKHJlc3VsdCk7CisKKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7CisK KyAgcmV0dXJuIGVycjsKK30KKyAgICAKK3N0YXRpYyBzdm5fZXJyb3JfdCAqcmVwb3J0ZXJfbGlu a19wYXRoKHZvaWQgKnJlcG9ydF9iYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBjaGFyICpwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg KnVybCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdm5fcmV2bnVtX3QgcmV2aXNpb24s CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX2Jvb2xlYW5fdCBzdGFydF9lbXB0eSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpsb2NrX3Rva2VuLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpCit7CisgIHN2bl9lcnJv cl90ICplcnIgPSBTVk5fTk9fRVJST1I7CisgIFB5T2JqZWN0ICpweV9yZXBvcnRlciA9IHJlcG9y dF9iYXRvbiwgKnJlc3VsdDsKKworICBpZiAocHlfcmVwb3J0ZXIgPT0gTlVMTCB8fCBweV9yZXBv cnRlciA9PSBQeV9Ob25lKQorICAgIHJldHVybiBTVk5fTk9fRVJST1I7CisKKyAgc3ZuX3N3aWdf cHlfYWNxdWlyZV9weV9sb2NrKCk7CisKKyAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsTWV0 aG9kKHB5X3JlcG9ydGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNo YXIgKikibGlua19wYXRoIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChj aGFyICopInNzbGJzTyYiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0 aCwgdXJsLCByZXZpc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0 YXJ0X2VtcHR5LCBsb2NrX3Rva2VuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbWFrZV9vYl9wb29sLCBwb29sKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBjYWxs YmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICB9CisgIGVsc2UgaWYgKHJlc3VsdCAhPSBQeV9O b25lKQorICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2JhZF9yZXR1cm5fZXJyb3IoIk5vdCBO b25lIik7CisgICAgfQorCisgIFB5X1hERUNSRUYocmVzdWx0KTsKKworICBzdm5fc3dpZ19weV9y ZWxlYXNlX3B5X2xvY2soKTsKKworICByZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3ZuX2Vycm9y X3QgKnJlcG9ydGVyX2ZpbmlzaF9yZXBvcnQodm9pZCAqcmVwb3J0X2JhdG9uLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKQoreworICBzdm5fZXJyb3Jf dCAqZXJyID0gU1ZOX05PX0VSUk9SOworCisgIFB5T2JqZWN0ICpweV9yZXBvcnRlciA9IHJlcG9y dF9iYXRvbiwgKnJlc3VsdDsKKworICBpZiAocHlfcmVwb3J0ZXIgPT0gTlVMTCB8fCBweV9yZXBv cnRlciA9PSBQeV9Ob25lKQorICAgIHJldHVybiBTVk5fTk9fRVJST1I7CisKKyAgc3ZuX3N3aWdf cHlfYWNxdWlyZV9weV9sb2NrKCk7CisKKyAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsTWV0 aG9kKHB5X3JlcG9ydGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNo YXIgKikiZmluaXNoX3JlcG9ydCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoY2hhciAqKSJPJiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtl X29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4 Y2VwdGlvbl9lcnJvcigpOworICAgIH0KKyAgZWxzZSBpZiAocmVzdWx0ICE9IFB5X05vbmUpCisg ICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfYmFkX3JldHVybl9lcnJvcigiTm90IE5vbmUiKTsK KyAgICB9CisKKyAgUHlfWERFQ1JFRihyZXN1bHQpOworCisgIHN2bl9zd2lnX3B5X3JlbGVhc2Vf cHlfbG9jaygpOworCisgIHJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzdm5fZXJyb3JfdCAqcmVw b3J0ZXJfYWJvcnRfcmVwb3J0KHZvaWQgKnJlcG9ydF9iYXRvbiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKQoreworICBzdm5fZXJyb3JfdCAqZXJyID0g U1ZOX05PX0VSUk9SOworCisgIFB5T2JqZWN0ICpweV9yZXBvcnRlciA9IHJlcG9ydF9iYXRvbiwg KnJlc3VsdDsKKworICBpZiAocHlfcmVwb3J0ZXIgPT0gTlVMTCB8fCBweV9yZXBvcnRlciA9PSBQ eV9Ob25lKQorICAgIHJldHVybiBTVk5fTk9fRVJST1I7CisKKyAgc3ZuX3N3aWdfcHlfYWNxdWly ZV9weV9sb2NrKCk7CisKKyAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKHB5X3Jl cG9ydGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikiYWJv cnRfcmVwb3J0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICop Ik8mIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vfb2JfcG9vbCwg cG9vbCkpID09IE5VTEwpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vy cm9yKCk7CisgICAgfQorICBlbHNlIGlmIChyZXN1bHQgIT0gUHlfTm9uZSkKKyAgICB7CisgICAg ICBlcnIgPSBjYWxsYmFja19iYWRfcmV0dXJuX2Vycm9yKCJOb3QgTm9uZSIpOworICAgIH0KKwor ICBQeV9YREVDUkVGKHJlc3VsdCk7CisKKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7 CisKKyAgcmV0dXJuIGVycjsKK30KKworY29uc3Qgc3ZuX3JhX3JlcG9ydGVyMl90IHN3aWdfcHlf cmFfcmVwb3J0ZXIyID0geworICAgIHJlcG9ydGVyX3NldF9wYXRoLAorICAgIHJlcG9ydGVyX2Rl bGV0ZV9wYXRoLAorICAgIHJlcG9ydGVyX2xpbmtfcGF0aCwKKyAgICByZXBvcnRlcl9maW5pc2hf cmVwb3J0LAorICAgIHJlcG9ydGVyX2Fib3J0X3JlcG9ydAorfTsKZGlmZiAtTnVyIHN1YnZlcnNp b24tMS4zLjEvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3B5dGhvbi9saWJzdm5fc3dpZ19weS9z d2lndXRpbF9weS5jLnJlaiBzdWJ2ZXJzaW9uLTEuMy4xLm5ldy9zdWJ2ZXJzaW9uL2JpbmRpbmdz L3N3aWcvcHl0aG9uL2xpYnN2bl9zd2lnX3B5L3N3aWd1dGlsX3B5LmMucmVqCi0tLSBzdWJ2ZXJz aW9uLTEuMy4xL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vbGlic3ZuX3N3aWdfcHkv c3dpZ3V0aWxfcHkuYy5yZWoJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysr IHN1YnZlcnNpb24tMS4zLjEubmV3L3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vbGli c3ZuX3N3aWdfcHkvc3dpZ3V0aWxfcHkuYy5yZWoJMjAwNi0wNy0wNSAwMTowNDowNi4wMDAwMDAw MDAgKzAxMDAKQEAgLTAsMCArMSw0NiBAQAorKioqKioqKioqKioqKioqCisqKiogMTU2OSwxNTg3 ICoqKioKKyAgICByZXR1cm4gZXJyOworICB9CisgIAorICBzdm5fc3RyZWFtX3QgKgorICBzdm5f c3dpZ19weV9tYWtlX3N0cmVhbShQeU9iamVjdCAqcHlfaW8sIGFwcl9wb29sX3QgKnBvb2wpCisg IHsKKyAgICBzdm5fc3RyZWFtX3QgKnN0cmVhbTsKKyAgCistICAgLyogQm9ycm93IHRoZSBjYWxs ZXIncyByZWZlcmVuY2UgdG8gcHlfaW8gLSB0aGlzIGlzIHNhZmUgb25seSBiZWNhdXNlIHRoZQor LSAgICAqIGNhbGxlciBtdXN0IGhhdmUgYSByZWZlcmVuY2UgaW4gb3JkZXIgdG8gcGFzcyB0aGUg b2JqZWN0IGludG8gdGhlCistICAgICogYmluZGluZ3MsIGFuZCB3ZSB3aWxsIGJlIGZpbmlzaGVk IHdpdGggdGhlIHB5X2lvIG9iamVjdCBiZWZvcmUgd2UgcmV0dXJuCistICAgICogdG8gcHl0aG9u LiBJLmUuIERPIE5PVCBTVE9SRSBBV0FZIFRIRSBSRVNVTFRJTkcgc3ZuX3N0cmVhbV90ICogZm9y IHVzZQorLSAgICAqIG92ZXIgbXVsdGlwbGUgY2FsbHMgaW50byB0aGUgYmluZGluZ3MuICovCisg ICAgc3RyZWFtID0gc3ZuX3N0cmVhbV9jcmVhdGUocHlfaW8sIHBvb2wpOworICAgIHN2bl9zdHJl YW1fc2V0X3JlYWQoc3RyZWFtLCByZWFkX2hhbmRsZXJfcHlpbyk7CisgICAgc3ZuX3N0cmVhbV9z ZXRfd3JpdGUoc3RyZWFtLCB3cml0ZV9oYW5kbGVyX3B5aW8pOworICAKKyAgICByZXR1cm4gc3Ry ZWFtOworICB9CistLS0gMTU2OSwxNTkyIC0tLS0KKyAgICByZXR1cm4gZXJyOworICB9CisgIAor KyBzdGF0aWMgc3ZuX2Vycm9yX3QgKgorKyBjbG9zZV9oYW5kbGVyX3B5aW8odm9pZCAqYmF0b24p CisrIHsKKysgICBQeU9iamVjdCAqcHlfaW8gPSBiYXRvbjsKKysgICBQeV9ERUNSRUYocHlfaW8p OworKyAgIHJldHVybiBTVk5fTk9fRVJST1I7CisrIH0KKysgCisgIHN2bl9zdHJlYW1fdCAqCisg IHN2bl9zd2lnX3B5X21ha2Vfc3RyZWFtKFB5T2JqZWN0ICpweV9pbywgYXByX3Bvb2xfdCAqcG9v bCkKKyAgeworICAgIHN2bl9zdHJlYW1fdCAqc3RyZWFtOworICAKKysgICBQeV9JTkNSRUYocHlf aW8pOworICAgIHN0cmVhbSA9IHN2bl9zdHJlYW1fY3JlYXRlKHB5X2lvLCBwb29sKTsKKyAgICBz dm5fc3RyZWFtX3NldF9yZWFkKHN0cmVhbSwgcmVhZF9oYW5kbGVyX3B5aW8pOworICAgIHN2bl9z dHJlYW1fc2V0X3dyaXRlKHN0cmVhbSwgd3JpdGVfaGFuZGxlcl9weWlvKTsKKysgICBzdm5fc3Ry ZWFtX3NldF9jbG9zZShzdHJlYW0sIGNsb3NlX2hhbmRsZXJfcHlpbyk7CisgIAorICAgIHJldHVy biBzdHJlYW07CisgIH0KZGlmZiAtTnVyIHN1YnZlcnNpb24tMS4zLjEvc3VidmVyc2lvbi9iaW5k aW5ncy9zd2lnL3B5dGhvbi9saWJzdm5fc3dpZ19weS9zd2lndXRpbF9weS5oIHN1YnZlcnNpb24t MS4zLjEubmV3L3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vbGlic3ZuX3N3aWdfcHkv c3dpZ3V0aWxfcHkuaAotLS0gc3VidmVyc2lvbi0xLjMuMS9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3 aWcvcHl0aG9uL2xpYnN2bl9zd2lnX3B5L3N3aWd1dGlsX3B5LmgJMjAwNS0xMC0yMCAyMzoxNzox OS4wMDAwMDAwMDAgKzAxMDAKKysrIHN1YnZlcnNpb24tMS4zLjEubmV3L3N1YnZlcnNpb24vYmlu ZGluZ3Mvc3dpZy9weXRob24vbGlic3ZuX3N3aWdfcHkvc3dpZ3V0aWxfcHkuaAkyMDA2LTA3LTA1 IDAxOjA0OjA2LjAwMDAwMDAwMCArMDEwMApAQCAtNzksNiArNzksOSBAQAogU1ZOX1NXSUdfU1dJ R1VUSUxfRVhQT1JUCiB2b2lkIHN2bl9zd2lnX2dldF9hcHBsaWNhdGlvbl9wb29sKFB5T2JqZWN0 ICoqcHlfcG9vbCwgYXByX3Bvb2xfdCAqKnBvb2wpOwogCisvKiBTZXQgYSBQeXRob24gJ293bmVk JyByZWZlcmVuY2Ugb24gdGhlIHBvb2wgb2YgdGhlIGdpdmVuIHByb3h5IG9iamVjdCAqLworaW50 IHN2bl9zd2lnX3B5X3Bvb2xfc2V0X293bmVkX3JlZihQeU9iamVjdCAqcHJveHksIFB5T2JqZWN0 ICpvbGRSZWYsIFB5T2JqZWN0ICpuZXdSZWYpOworCiAMCiAvKioqIFNXSUcgV3JhcHBlcnMgKioq LwogCkBAIC0xOTgsNiArMjAxLDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2 bl93Y19ub3RpZnlfc3RhdGVfdCBwcm9wX3N0YXRlLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzdm5fcmV2bnVtX3QgcmV2aXNpb24pOwogCitTVk5fU1dJR19TV0lHVVRJTF9FWFBPUlQK K3ZvaWQgc3ZuX3N3aWdfcHlfbm90aWZ5X2Z1bmMyKHZvaWQgKmJhdG9uLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3Qgc3ZuX3djX25vdGlmeV90ICpub3RpZnksCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKTsKKwogLyogYSBzdGF0dXMg ZnVuY3Rpb24gdGhhdCBleGVjdXRlcyBhIFB5dGhvbiBmdW5jdGlvbiB0aGF0IGlzIHBhc3NlZCBp bgogICAgdmlhIHRoZSBiYXRvbiBhcmd1bWVudCAqLwogU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JU CkBAIC0yNDksNiArMjU3LDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IGNoYXIgKm1zZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgYXByX3Bvb2xfdCAqcG9vbCk7CiAKKy8qIHRodW5rZWQgaW5mbyByZWNlaXZlciBmdW5jdGlv biAqLworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JUCitzdm5fZXJyb3JfdCAqc3ZuX3N3aWdfcHlf aW5mb19yZWNlaXZlcl9mdW5jKHZvaWQgKnB5X3JlY2VpdmVyLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwYXRoLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdm5faW5mb190ICppbmZvLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpw b29sKTsKKwogLyogdGh1bmtlZCBibGFtZSByZWNlaXZlciBmdW5jdGlvbiAqLwogU1ZOX1NXSUdf U1dJR1VUSUxfRVhQT1JUCiBzdm5fZXJyb3JfdCAqc3ZuX3N3aWdfcHlfY2xpZW50X2JsYW1lX3Jl Y2VpdmVyX2Z1bmModm9pZCAqYmF0b24sCkBAIC0zMDMsNiArMzE4LDQ1IEBACiAgICAgc3ZuX2Jv b2xlYW5fdCBtYXlfc2F2ZSwKICAgICBhcHJfcG9vbF90ICpwb29sKTsKIAorU1ZOX1NXSUdfU1dJ R1VUSUxfRVhQT1JUCit2b2lkCitzdm5fc3dpZ19weV9zZXR1cF9yYV9jYWxsYmFja3Moc3ZuX3Jh X2NhbGxiYWNrczJfdCAqKmNhbGxiYWNrcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB2b2lkICoqYmF0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3Qg KnB5X2NhbGxiYWNrcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90 ICpwb29sKTsKK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAorc3ZuX2Vycm9yX3QgKnN2bl9zd2ln X3B5X2NvbW1pdF9jYWxsYmFjazIoY29uc3Qgc3ZuX2NvbW1pdF9pbmZvX3QgKmNvbW1pdF9pbmZv LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYmF0b24s CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpw b29sKTsKKworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JUCitzdm5fZXJyb3JfdCAqc3ZuX3N3aWdf cHlfY29tbWl0X2NhbGxiYWNrKHN2bl9yZXZudW1fdCBuZXdfcmV2aXNpb24sCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRhdGUsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmF1dGhvciwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYmF0b24pOworCisK K1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAorc3ZuX2Vycm9yX3QgKnN2bl9zd2lnX3B5X3JhX2Zp bGVfcmV2X2hhbmRsZXJfZnVuYygKKyAgICAgICAgICAgICAgICAgICAgdm9pZCAqYmF0b24sCisg ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdGgsCisgICAgICAgICAgICAgICAgICAg IHN2bl9yZXZudW1fdCByZXYsCisgICAgICAgICAgICAgICAgICAgIGFwcl9oYXNoX3QgKnJldl9w cm9wcywKKyAgICAgICAgICAgICAgICAgICAgc3ZuX3R4ZGVsdGFfd2luZG93X2hhbmRsZXJfdCAq ZGVsdGFfaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgdm9pZCAqKmRlbHRhX2JhdG9uLAor ICAgICAgICAgICAgICAgICAgICBhcHJfYXJyYXlfaGVhZGVyX3QgKnByb3BfZGlmZnMsCisgICAg ICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpOworCitTVk5fU1dJR19TV0lHVVRJTF9F WFBPUlQKK2V4dGVybiBjb25zdCBzdm5fcmFfcmVwb3J0ZXIyX3Qgc3dpZ19weV9yYV9yZXBvcnRl cjI7CisKK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAordm9pZAorc3ZuX3N3aWdfcHlfc2V0dXBf cmFfY2FsbGJhY2tzKHN2bl9yYV9jYWxsYmFja3MyX3QgKipjYWxsYmFja3MsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKmJhdG9uLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFB5T2JqZWN0ICpweV9jYWxsYmFja3MsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCk7CisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2Vu ZGlmIC8qIF9fY3BsdXNwbHVzICovCmRpZmYgLU51ciBzdWJ2ZXJzaW9uLTEuMy4xL3N1YnZlcnNp b24vYmluZGluZ3Mvc3dpZy9weXRob24vbGlic3ZuX3N3aWdfcHkvc3dpZ3V0aWxfcHkuaC5vcmln IHN1YnZlcnNpb24tMS4zLjEubmV3L3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vbGli c3ZuX3N3aWdfcHkvc3dpZ3V0aWxfcHkuaC5vcmlnCi0tLSBzdWJ2ZXJzaW9uLTEuMy4xL3N1YnZl cnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vbGlic3ZuX3N3aWdfcHkvc3dpZ3V0aWxfcHkuaC5v cmlnCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyBzdWJ2ZXJzaW9uLTEu My4xLm5ldy9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcHl0aG9uL2xpYnN2bl9zd2lnX3B5L3N3 aWd1dGlsX3B5Lmgub3JpZwkyMDA2LTA3LTA1IDAxOjA0OjA2LjAwMDAwMDAwMCArMDEwMApAQCAt MCwwICsxLDM1NyBAQAorLyoKKyAqIHN3aWd1dGlsX3B5LmggOiAgdXRpbGl0eSBmdW5jdGlvbnMg YW5kIHN0dWZmIGZvciB0aGUgU1dJRyBQeXRob24gYmluZGluZ3MKKyAqCisgKiA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQorICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMDQgQ29sbGFiTmV0LiAgQWxsIHJpZ2h0cyByZXNl cnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0 aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBh cnQgb2YgdGhpcyBkaXN0cmlidXRpb24uICBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJs ZSBhdCBodHRwOi8vc3VidmVyc2lvbi50aWdyaXMub3JnL2xpY2Vuc2UtMS5odG1sLgorICogSWYg bmV3ZXIgdmVyc2lvbnMgb2YgdGhpcyBsaWNlbnNlIGFyZSBwb3N0ZWQgdGhlcmUsIHlvdSBtYXkg dXNlIGEKKyAqIG5ld2VyIHZlcnNpb24gaW5zdGVhZCwgYXQgeW91ciBvcHRpb24uCisgKgorICog VGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5 IG1hbnkKKyAqIGluZGl2aWR1YWxzLiAgRm9yIGV4YWN0IGNvbnRyaWJ1dGlvbiBoaXN0b3J5LCBz ZWUgdGhlIHJldmlzaW9uCisgKiBoaXN0b3J5IGFuZCBsb2dzLCBhdmFpbGFibGUgYXQgaHR0cDov L3N1YnZlcnNpb24udGlncmlzLm9yZy8uCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKKworI2lmbmRl ZiBTVk5fU1dJR19TV0lHVVRJTF9QWV9ICisjZGVmaW5lIFNWTl9TV0lHX1NXSUdVVElMX1BZX0gK KworI2luY2x1ZGUgPFB5dGhvbi5oPgorCisjaW5jbHVkZSA8YXByLmg+CisjaW5jbHVkZSA8YXBy X3Bvb2xzLmg+CisjaW5jbHVkZSA8YXByX3N0cmluZ3MuaD4KKyNpbmNsdWRlIDxhcHJfaGFzaC5o PgorI2luY2x1ZGUgPGFwcl90YWJsZXMuaD4KKworI2luY2x1ZGUgInN2bl90eXBlcy5oIgorI2lu Y2x1ZGUgInN2bl9zdHJpbmcuaCIKKyNpbmNsdWRlICJzdm5fZGVsdGEuaCIKKyNpbmNsdWRlICJz dm5fY2xpZW50LmgiCisjaW5jbHVkZSAic3ZuX3JlcG9zLmgiCisKKy8qIERlZmluZSBETEwgZXhw b3J0IG1hZ2ljIG9uIFdpbmRvd3MuICovCisjaWZkZWYgV0lOMzIKKyMgIGlmZGVmIFNWTl9TV0lH X1NXSUdVVElMX1BZX0MKKyMgICAgZGVmaW5lIFNWTl9TV0lHX1NXSUdVVElMX0VYUE9SVCBfX2Rl Y2xzcGVjKGRsbGV4cG9ydCkKKyMgIGVsc2UKKyMgICAgZGVmaW5lIFNWTl9TV0lHX1NXSUdVVElM X0VYUE9SVCBfX2RlY2xzcGVjKGRsbGltcG9ydCkKKyMgIGVuZGlmCisjZWxzZQorIyAgZGVmaW5l IFNWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cwor ZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworDAorCisvKiBJbml0aWFs aXplIHRoZSBsaWJzdm5fc3dpZ19weSBsaWJyYXJ5LiAqLworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQ T1JUCithcHJfc3RhdHVzX3Qgc3ZuX3N3aWdfcHlfaW5pdGlhbGl6ZSh2b2lkKTsKKworDAorCisv KiBGdW5jdGlvbnMgdG8gbWFuYWdlIHB5dGhvbidzIGdsb2JhbCBpbnRlcnByZXRlciBsb2NrICov CitTVk5fU1dJR19TV0lHVVRJTF9FWFBPUlQKK3ZvaWQgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9s b2NrKHZvaWQpOworCitTVk5fU1dJR19TV0lHVVRJTF9FWFBPUlQKK3ZvaWQgc3ZuX3N3aWdfcHlf YWNxdWlyZV9weV9sb2NrKHZvaWQpOworCisMCisvKioqIEF1dG9tYXRpYyBQb29sIE1hbmFnZW1l bnQgRnVuY3Rpb25zICoqKi8KKworLyogU2V0IHRoZSBhcHBsaWNhdGlvbiBwb29sICovCitTVk5f U1dJR19TV0lHVVRJTF9FWFBPUlQKK3ZvaWQgc3ZuX3N3aWdfcHlfc2V0X2FwcGxpY2F0aW9uX3Bv b2woUHlPYmplY3QgKnB5X3Bvb2wsIGFwcl9wb29sX3QgKnBvb2wpOworCisvKiBDbGVhciB0aGUg YXBwbGljYXRpb24gcG9vbCAqLworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JUCit2b2lkIHN2bl9z d2lnX3B5X2NsZWFyX2FwcGxpY2F0aW9uX3Bvb2wodm9pZCk7CisKKy8qIEdldCB0aGUgYXBwbGlj YXRpb24gcG9vbCAqLworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JUCit2b2lkIHN2bl9zd2lnX2dl dF9hcHBsaWNhdGlvbl9wb29sKFB5T2JqZWN0ICoqcHlfcG9vbCwgYXByX3Bvb2xfdCAqKnBvb2wp OworCisvKiBTZXQgYSBQeXRob24gJ293bmVkJyByZWZlcmVuY2Ugb24gdGhlIHBvb2wgb2YgdGhl IGdpdmVuIHByb3h5IG9iamVjdCAqLworaW50IHN2bl9zd2lnX3B5X3Bvb2xfc2V0X293bmVkX3Jl ZihQeU9iamVjdCAqcHJveHksIFB5T2JqZWN0ICpvbGRSZWYsIFB5T2JqZWN0ICpuZXdSZWYpOwor CisMCisvKioqIFNXSUcgV3JhcHBlcnMgKioqLworCisvKiBXcmFwcGVyIGZvciBTV0lHX05ld1Bv aW50ZXJPYmogKi8KK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAorUHlPYmplY3QgKnN2bl9zd2ln X05ld1BvaW50ZXJPYmoodm9pZCAqb2JqLCBzd2lnX3R5cGVfaW5mbyAqdHlwZSwgCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqcG9vbCk7CisKKy8qIFdyYXBwZXIg Zm9yIFNXSUdfQ29udmVydFB0ciAqLworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JUCitpbnQgc3Zu X3N3aWdfQ29udmVydFB0cihQeU9iamVjdCAqaW5wdXQsIHZvaWQgKipvYmosIHN3aWdfdHlwZV9p bmZvICp0eXBlKTsKKworLyogV3JhcHBlciBmb3IgU1dJR19NdXN0R2V0UHRyICovCitTVk5fU1dJ R19TV0lHVVRJTF9FWFBPUlQKK3ZvaWQgKnN2bl9zd2lnX011c3RHZXRQdHIodm9pZCAqaW5wdXQs IHN3aWdfdHlwZV9pbmZvICp0eXBlLCBpbnQgYXJnbnVtLAorICAgICAgICAgICAgICAgICAgICAg ICAgICBQeU9iamVjdCAqKnB5X3Bvb2wpOworDAorLyoqKiBGdW5jdGlvbnMgdG8gZXhwb3NlIGEg Y3VzdG9tIFN1YnZlcnNpb25FeGNlcHRpb24gKioqLworCisvKiByZWdpc3RlciBhIG5ldyBzdWJ2 ZXJzaW9uIGV4Y2VwdGlvbiBjbGFzcyAqLworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JUCitQeU9i amVjdCAqc3ZuX3N3aWdfcHlfcmVnaXN0ZXJfZXhjZXB0aW9uKHZvaWQpOworCisvKiBnZXQgdGhl IG9iamVjdCB3aGljaCByZXByZXNlbnRzIHRoZSBzdWJ2ZXJzaW9uIGV4Y2VwdGlvbiBjbGFzcyAq LworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JUCitQeU9iamVjdCAqc3ZuX3N3aWdfcHlfZXhjZXB0 aW9uX3R5cGUodm9pZCk7CisKKy8qIHJhaXNlIGEgc3VidmVyc2lvbiBleGNlcHRpb24sIGNyZWF0 ZWQgZnJvbSBhIG5vcm1hbCBzdWJ2ZXJzaW9uIGVycm9yICovCitTVk5fU1dJR19TV0lHVVRJTF9F WFBPUlQKK3ZvaWQgc3ZuX3N3aWdfcHlfc3ZuX2V4Y2VwdGlvbihzdm5fZXJyb3JfdCAqZXJyKTsK KworCisMCisvKiBoZWxwZXIgZnVuY3Rpb24gdG8gY29udmVydCBhbiBhcHJfaGFzaF90KiAoY2hh ciogLT4gc3Zuc3RyaW5nX3QqKSB0bworICAgYSBQeXRob24gZGljdCAqLworU1ZOX1NXSUdfU1dJ R1VUSUxfRVhQT1JUCitQeU9iamVjdCAqc3ZuX3N3aWdfcHlfcHJvcGhhc2hfdG9fZGljdChhcHJf aGFzaF90ICpoYXNoKTsKKworLyogaGVscGVyIGZ1bmN0aW9uIHRvIGNvbnZlcnQgYW4gYXByX2hh c2hfdCogKHN2bl9yZXZudW1fdCogLT4gY29uc3QKKyAgIGNoYXIgKikgdG8gYSBQeXRob24gZGlj dCAqLworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JUCitQeU9iamVjdCAqc3ZuX3N3aWdfcHlfbG9j YXRpb25oYXNoX3RvX2RpY3QoYXByX2hhc2hfdCAqaGFzaCk7CisKKy8qIGNvbnZlcnQgYSBoYXNo IG9mICdjb25zdCBjaGFyIConIC0+IFRZUEUgaW50byBhIFB5dGhvbiBkaWN0ICovCitTVk5fU1dJ R19TV0lHVVRJTF9FWFBPUlQKK1B5T2JqZWN0ICpzdm5fc3dpZ19weV9jb252ZXJ0X2hhc2goYXBy X2hhc2hfdCAqaGFzaCwgc3dpZ190eXBlX2luZm8gKnR5cGUsIAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQeU9iamVjdCAqcHlfcG9vbCk7CisKKy8qIGhlbHBlciBmdW5jdGlv biB0byBjb252ZXJ0IGEgJ2NoYXIgKionIGludG8gYSBQeXRob24gbGlzdCBvZiBzdHJpbmcKKyAg IG9iamVjdHMgKi8KK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAorUHlPYmplY3QgKnN2bl9zd2ln X3B5X2Nfc3RyaW5nc190b19saXN0KGNoYXIgKipzdHJpbmdzKTsKKworLyogaGVscGVyIGZ1bmN0 aW9uIHRvIGNvbnZlcnQgYW4gYXJyYXkgb2YgJ2NvbnN0IGNoYXIgKicgdG8gYSBQeXRob24gbGlz dAorICAgb2Ygc3RyaW5nIG9iamVjdHMgKi8KK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAorUHlP YmplY3QgKnN2bl9zd2lnX3B5X2FycmF5X3RvX2xpc3QoY29uc3QgYXByX2FycmF5X2hlYWRlcl90 ICpzdHJpbmdzKTsKKworLyogaGVscGVyIGZ1bmN0aW9uIHRvIGNvbnZlcnQgYW4gYXJyYXkgb2Yg J3N2bl9yZXZudW1fdCcgdG8gYSBQeXRob24gbGlzdAorICAgb2YgaW50IG9iamVjdHMgKi8KKy8q IEZvcm1lcmx5IHVzZWQgYnkgcHJlLTEuMCBBUElzLiBOb3cgdW51c2VkCitQeU9iamVjdCAqc3Zu X3N3aWdfcHlfcmV2YXJyYXlfdG9fbGlzdChjb25zdCBhcHJfYXJyYXlfaGVhZGVyX3QgKnJldnMp OworKi8KKworLyogaGVscGVyIGZ1bmN0aW9uIHRvIGNvbnZlcnQgYSBQeXRob24gZGljdGlvbmFy eSBtYXBwaW5nIHN0cmluZ3MgdG8KKyAgIHN0cmluZ3MgaW50byBhbiBhcHJfaGFzaF90IG1hcHBp bmcgY29uc3QgY2hhciAqJ3MgdG8gY29uc3QgY2hhciAqJ3MsCisgICBhbGxvY2F0ZWQgaW4gUE9P TC4gKi8KK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAorYXByX2hhc2hfdCAqc3ZuX3N3aWdfcHlf c3RyaW5naGFzaF9mcm9tX2RpY3QoUHlPYmplY3QgKmRpY3QsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKTsKKworLyogaGVscGVy IGZ1bmN0aW9uIHRvIGNvbnZlcnQgYSBQeXRob24gZGljdGlvbmFyeSBtYXBwaW5nIHN0cmluZ3Mg dG8KKyAgIHN0cmluZ3MgaW50byBhbiBhcHJfaGFzaF90IG1hcHBpbmcgY29uc3QgY2hhciAqJ3Mg dG8gc3ZuX3N0cmluZ190J3MsCisgICBhbGxvY2F0ZWQgaW4gUE9PTC4gKi8KK1NWTl9TV0lHX1NX SUdVVElMX0VYUE9SVAorYXByX2hhc2hfdCAqc3ZuX3N3aWdfcHlfcHJvcGhhc2hfZnJvbV9kaWN0 KFB5T2JqZWN0ICpkaWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGFwcl9wb29sX3QgKnBvb2wpOworCisvKiBoZWxwZXIgZnVuY3Rpb24gdG8gY29udmVydCBh IFB5dGhvbiBzZXF1ZW5jZSBvZiBzdHJpbmdzIGludG8gYW4KKyAgICdhcHJfYXJyYXlfaGVhZGVy X3QgKicgb2YgJ2NvbnN0IGNoYXIgKicgb2JqZWN0cy4gIE5vdGUgdGhhdCB0aGUKKyAgIG9iamVj dHMgbXVzdCByZW1haW4gYWxpdmUgLS0gdGhlIHZhbHVlcyBhcmUgbm90IGNvcGllZC4gVGhpcyBp cworICAgYXBwcm9wcmlhdGUgZm9yIGluY29taW5nIGFyZ3VtZW50cyB3aGljaCBhcmUgZGVmaW5l ZCB0byBsYXN0IHRoZQorICAgZHVyYXRpb24gb2YgdGhlIGZ1bmN0aW9uJ3MgZXhlY3V0aW9uLiAg Ki8KK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAorY29uc3QgYXByX2FycmF5X2hlYWRlcl90ICpz dm5fc3dpZ19weV9zdHJpbmdzX3RvX2FycmF5KFB5T2JqZWN0ICpzb3VyY2UsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAq cG9vbCk7CisKKy8qIGxpa2Ugc3ZuX3N3aWdfcHlfc3RyaW5nc190b19hcnJheSgpLCBidXQgZm9y IGFycmF5J3Mgb2YgJ3N2bl9yZXZudW1fdCdzLiAqLworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JU Citjb25zdCBhcHJfYXJyYXlfaGVhZGVyX3QgKnN2bl9zd2lnX3B5X3Jldm51bXNfdG9fYXJyYXko UHlPYmplY3QgKnNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKTsKKworLyogbWFrZSBhbiBlZGl0b3Ig dGhhdCAidGh1bmtzIiBmcm9tIEMgY2FsbGJhY2tzIHVwIHRvIFB5dGhvbiAqLworU1ZOX1NXSUdf U1dJR1VUSUxfRVhQT1JUCit2b2lkIHN2bl9zd2lnX3B5X21ha2VfZWRpdG9yKGNvbnN0IHN2bl9k ZWx0YV9lZGl0b3JfdCAqKmVkaXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9p ZCAqKmVkaXRfYmF0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpw eV9lZGl0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wp OworCitTVk5fU1dJR19TV0lHVVRJTF9FWFBPUlQKK2Fwcl9maWxlX3QgKnN2bl9zd2lnX3B5X21h a2VfZmlsZShQeU9iamVjdCAqcHlfZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBhcHJfcG9vbF90ICpwb29sKTsKKworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JUCitzdm5f c3RyZWFtX3QgKnN2bl9zd2lnX3B5X21ha2Vfc3RyZWFtKFB5T2JqZWN0ICpweV9pbywKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCk7CisKKy8q IGEgbm90aWZ5IGZ1bmN0aW9uIHRoYXQgZXhlY3V0ZXMgYSBQeXRob24gZnVuY3Rpb24gdGhhdCBp cyBwYXNzZWQgaW4KKyAgIHZpYSB0aGUgYmF0b24gYXJndW1lbnQgKi8KK1NWTl9TV0lHX1NXSUdV VElMX0VYUE9SVAordm9pZCBzdm5fc3dpZ19weV9ub3RpZnlfZnVuYyh2b2lkICpiYXRvbiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGF0aCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3ZuX3djX25vdGlmeV9hY3Rpb25fdCBhY3Rpb24sCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHN2bl9ub2RlX2tpbmRfdCBraW5kLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICptaW1lX3R5cGUsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHN2bl93Y19ub3RpZnlfc3RhdGVfdCBjb250ZW50X3N0YXRlLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzdm5fd2Nfbm90aWZ5X3N0YXRlX3QgcHJvcF9zdGF0ZSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX3Jldm51bV90IHJldmlzaW9uKTsKKwor U1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JUCit2b2lkIHN2bl9zd2lnX3B5X25vdGlmeV9mdW5jMih2 b2lkICpiYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN2bl93Y19u b3RpZnlfdCAqbm90aWZ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xf dCAqcG9vbCk7CisKKy8qIGEgc3RhdHVzIGZ1bmN0aW9uIHRoYXQgZXhlY3V0ZXMgYSBQeXRob24g ZnVuY3Rpb24gdGhhdCBpcyBwYXNzZWQgaW4KKyAgIHZpYSB0aGUgYmF0b24gYXJndW1lbnQgKi8K K1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAordm9pZCBzdm5fc3dpZ19weV9zdGF0dXNfZnVuYyh2 b2lkICpiYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGF0 aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX3djX3N0YXR1c190ICpzdGF0dXMp OworCisvKiBhIGNhbmNlbCBmdW5jdGlvbiB0aGF0IGV4ZWN1dGVzIGEgUHl0aG9uIGZ1bmN0aW9u IHBhc3NlZCBpbiB2aWEgdGhlCisgICBjYW5jZWxfYmF0b24gYXJndW1lbnQuICovCitTVk5fU1dJ R19TV0lHVVRJTF9FWFBPUlQKK3N2bl9lcnJvcl90ICpzdm5fc3dpZ19weV9jYW5jZWxfZnVuYyh2 b2lkICpjYW5jZWxfYmF0b24pOworCisvKiB0aHVua2VkIGZzIGdldF9sb2NrcyBmdW5jdGlvbiAq LworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JUCitzdm5fZXJyb3JfdCAqc3ZuX3N3aWdfcHlfZnNf Z2V0X2xvY2tzX2Z1bmMgKHZvaWQgKmJhdG9uLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3ZuX2xvY2tfdCAqbG9jaywgCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpOworCisvKiB0aHVua2Vk IGNvbW1pdCBsb2cgZmV0Y2hlciAqLworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JUCitzdm5fZXJy b3JfdCAqc3ZuX3N3aWdfcHlfZ2V0X2NvbW1pdF9sb2dfZnVuYyhjb25zdCBjaGFyICoqbG9nX21z ZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo YXIgKip0bXBfZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGFwcl9hcnJheV9oZWFkZXJfdCAqY29tbWl0X2l0ZW1zLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYmF0b24sCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKTsKKworLyogdGh1 bmtlZCByZXBvcyBhdXRoeiBjYWxsYmFjayBmdW5jdGlvbiAqLworU1ZOX1NXSUdfU1dJR1VUSUxf RVhQT1JUCitzdm5fZXJyb3JfdCAqc3ZuX3N3aWdfcHlfcmVwb3NfYXV0aHpfZnVuYyhzdm5fYm9v bGVhbl90ICphbGxvd2VkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc3ZuX2ZzX3Jvb3RfdCAqcm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB2b2lkICpiYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpOworCisvKiB0aHVua2VkIGhpc3RvcnkgY2Fs bGJhY2sgZnVuY3Rpb24gKi8KK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAorc3ZuX2Vycm9yX3Qg KnN2bl9zd2lnX3B5X3JlcG9zX2hpc3RvcnlfZnVuYyh2b2lkICpiYXRvbiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGF0aCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX3Jldm51bV90IHJldmlz aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9v bF90ICpwb29sKTsKKworLyogdGh1bmtlZCBsb2cgcmVjZWl2ZXIgZnVuY3Rpb24gKi8KK1NWTl9T V0lHX1NXSUdVVElMX0VYUE9SVAorc3ZuX2Vycm9yX3QgKnN2bl9zd2lnX3B5X2xvZ19yZWNlaXZl cih2b2lkICpweV9yZWNlaXZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgYXByX2hhc2hfdCAqY2hhbmdlZF9wYXRocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3ZuX3Jldm51bV90IHJldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgY2hhciAqYXV0aG9yLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBjaGFyICpkYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBjaGFyICptc2csCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpOworCisvKiB0aHVua2VkIGluZm8gcmVjZWl2 ZXIgZnVuY3Rpb24gKi8KK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAorc3ZuX2Vycm9yX3QgKnN2 bl9zd2lnX3B5X2luZm9fcmVjZWl2ZXJfZnVuYyh2b2lkICpweV9yZWNlaXZlciwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGF0aCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3ZuX2luZm9f dCAqaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBy X3Bvb2xfdCAqcG9vbCk7CisKKy8qIHRodW5rZWQgYmxhbWUgcmVjZWl2ZXIgZnVuY3Rpb24gKi8K K1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAorc3ZuX2Vycm9yX3QgKnN2bl9zd2lnX3B5X2NsaWVu dF9ibGFtZV9yZWNlaXZlcl9mdW5jKHZvaWQgKmJhdG9uLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9pbnQ2NF90IGxpbmVfbm8sCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX3Jldm51 bV90IHJldmlzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IGNoYXIgKmF1dGhvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpkYXRlLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmxpbmUs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBy X3Bvb2xfdCAqcG9vbCk7CisKKy8qIGF1dGggcHJvdmlkZXIgY2FsbGJhY2tzICovCitTVk5fU1dJ R19TV0lHVVRJTF9FWFBPUlQKK3N2bl9lcnJvcl90ICpzdm5fc3dpZ19weV9hdXRoX3NpbXBsZV9w cm9tcHRfZnVuYygKKyAgICBzdm5fYXV0aF9jcmVkX3NpbXBsZV90ICoqY3JlZCwKKyAgICB2b2lk ICpiYXRvbiwKKyAgICBjb25zdCBjaGFyICpyZWFsbSwKKyAgICBjb25zdCBjaGFyICp1c2VybmFt ZSwKKyAgICBzdm5fYm9vbGVhbl90IG1heV9zYXZlLAorICAgIGFwcl9wb29sX3QgKnBvb2wpOwor CitTVk5fU1dJR19TV0lHVVRJTF9FWFBPUlQKK3N2bl9lcnJvcl90ICpzdm5fc3dpZ19weV9hdXRo X3VzZXJuYW1lX3Byb21wdF9mdW5jKAorICAgIHN2bl9hdXRoX2NyZWRfdXNlcm5hbWVfdCAqKmNy ZWQsCisgICAgdm9pZCAqYmF0b24sCisgICAgY29uc3QgY2hhciAqcmVhbG0sCisgICAgc3ZuX2Jv b2xlYW5fdCBtYXlfc2F2ZSwKKyAgICBhcHJfcG9vbF90ICpwb29sKTsKKworU1ZOX1NXSUdfU1dJ R1VUSUxfRVhQT1JUCitzdm5fZXJyb3JfdCAqc3ZuX3N3aWdfcHlfYXV0aF9zc2xfc2VydmVyX3Ry dXN0X3Byb21wdF9mdW5jKAorICAgIHN2bl9hdXRoX2NyZWRfc3NsX3NlcnZlcl90cnVzdF90ICoq Y3JlZCwKKyAgICB2b2lkICpiYXRvbiwKKyAgICBjb25zdCBjaGFyICpyZWFsbSwKKyAgICBhcHJf dWludDMyX3QgZmFpbHVyZXMsCisgICAgY29uc3Qgc3ZuX2F1dGhfc3NsX3NlcnZlcl9jZXJ0X2lu Zm9fdCAqY2VydF9pbmZvLAorICAgIHN2bl9ib29sZWFuX3QgbWF5X3NhdmUsCisgICAgYXByX3Bv b2xfdCAqcG9vbCk7CisKK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAorc3ZuX2Vycm9yX3QgKnN2 bl9zd2lnX3B5X2F1dGhfc3NsX2NsaWVudF9jZXJ0X3Byb21wdF9mdW5jKAorICAgIHN2bl9hdXRo X2NyZWRfc3NsX2NsaWVudF9jZXJ0X3QgKipjcmVkLAorICAgIHZvaWQgKmJhdG9uLAorICAgIGNv bnN0IGNoYXIgKnJlYWxtLAorICAgIHN2bl9ib29sZWFuX3QgbWF5X3NhdmUsCisgICAgYXByX3Bv b2xfdCAqcG9vbCk7CisKK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAorc3ZuX2Vycm9yX3QgKnN2 bl9zd2lnX3B5X2F1dGhfc3NsX2NsaWVudF9jZXJ0X3B3X3Byb21wdF9mdW5jKAorICAgIHN2bl9h dXRoX2NyZWRfc3NsX2NsaWVudF9jZXJ0X3B3X3QgKipjcmVkLAorICAgIHZvaWQgKmJhdG9uLAor ICAgIGNvbnN0IGNoYXIgKnJlYWxtLAorICAgIHN2bl9ib29sZWFuX3QgbWF5X3NhdmUsCisgICAg YXByX3Bvb2xfdCAqcG9vbCk7CisKK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAordm9pZAorc3Zu X3N3aWdfcHlfc2V0dXBfcmFfY2FsbGJhY2tzKHN2bl9yYV9jYWxsYmFja3MyX3QgKipjYWxsYmFj a3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKmJhdG9uLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpweV9jYWxsYmFja3MsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCk7CitTVk5fU1dJR19TV0lH VVRJTF9FWFBPUlQKK3N2bl9lcnJvcl90ICpzdm5fc3dpZ19weV9jb21taXRfY2FsbGJhY2syKGNv bnN0IHN2bl9jb21taXRfaW5mb190ICpjb21taXRfaW5mbywKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmJhdG9uLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCk7CisKK1NWTl9TV0lHX1NXSUdV VElMX0VYUE9SVAorc3ZuX2Vycm9yX3QgKnN2bl9zd2lnX3B5X2NvbW1pdF9jYWxsYmFjayhzdm5f cmV2bnVtX3QgbmV3X3JldmlzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBjaGFyICpkYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBjaGFyICphdXRob3IsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHZvaWQgKmJhdG9uKTsKKworCitTVk5fU1dJR19TV0lHVVRJTF9FWFBP UlQKK3N2bl9lcnJvcl90ICpzdm5fc3dpZ19weV9yYV9maWxlX3Jldl9oYW5kbGVyX2Z1bmMoCisg ICAgICAgICAgICAgICAgICAgIHZvaWQgKmJhdG9uLAorICAgICAgICAgICAgICAgICAgICBjb25z dCBjaGFyICpwYXRoLAorICAgICAgICAgICAgICAgICAgICBzdm5fcmV2bnVtX3QgcmV2LAorICAg ICAgICAgICAgICAgICAgICBhcHJfaGFzaF90ICpyZXZfcHJvcHMsCisgICAgICAgICAgICAgICAg ICAgIHN2bl90eGRlbHRhX3dpbmRvd19oYW5kbGVyX3QgKmRlbHRhX2hhbmRsZXIsCisgICAgICAg ICAgICAgICAgICAgIHZvaWQgKipkZWx0YV9iYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgYXBy X2FycmF5X2hlYWRlcl90ICpwcm9wX2RpZmZzLAorICAgICAgICAgICAgICAgICAgICBhcHJfcG9v bF90ICpwb29sKTsKKworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JUCitleHRlcm4gY29uc3Qgc3Zu X3JhX3JlcG9ydGVyMl90IHN3aWdfcHlfcmFfcmVwb3J0ZXIyOworCisjaWZkZWYgX19jcGx1c3Bs dXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgIC8qIFNWTl9TV0lHX1NX SUdVVElMX1BZX0ggKi8KZGlmZiAtTnVyIHN1YnZlcnNpb24tMS4zLjEvc3VidmVyc2lvbi9iaW5k aW5ncy9zd2lnL3B5dGhvbi90ZXN0cy9jbGllbnQucHkgc3VidmVyc2lvbi0xLjMuMS5uZXcvc3Vi dmVyc2lvbi9iaW5kaW5ncy9zd2lnL3B5dGhvbi90ZXN0cy9jbGllbnQucHkKLS0tIHN1YnZlcnNp b24tMS4zLjEvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3B5dGhvbi90ZXN0cy9jbGllbnQucHkJ MTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIHN1YnZlcnNpb24tMS4zLjEu bmV3L3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vdGVzdHMvY2xpZW50LnB5CTIwMDYt MDctMDUgMDE6MDQ6MDYuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsMTExIEBACitpbXBvcnQg dW5pdHRlc3QsIG9zLCB0ZW1wZmlsZSwgdHlwZXMKKworZnJvbSBzdm4gaW1wb3J0IGNvcmUsIHJl cG9zLCBmcywgZGVsdGEsIGNsaWVudCwgd2MKKworZnJvbSB0cmFjLnZlcnNpb25jb250cm9sLnRl c3RzLnN2bl9mcyBpbXBvcnQgU3VidmVyc2lvblJlcG9zaXRvcnlUZXN0U2V0dXAsIFwKKyAgUkVQ T1NfUEFUSAorZnJvbSB1cmxsaWIgaW1wb3J0IHBhdGhuYW1lMnVybAorCitjbGFzcyBTdWJ2ZXJz aW9uUmVwb3NpdG9yeVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgIiIiVGVzdCBjYXNl cyBmb3IgdGhlIFN1YnZlcnNpb24gcmVwb3NpdG9yeSBsYXllciIiIgorCisgIGRlZiBzZXRVcChz ZWxmKToKKyAgICAiIiJMb2FkIGEgU3VidmVyc2lvbiByZXBvc2l0b3J5IiIiCisgICAgc2VsZi5j bGllbnRfY3R4ID0gY2xpZW50LnN2bl9jbGllbnRfY3JlYXRlX2NvbnRleHQoKQorCisgICAgcHJv dmlkZXJzID0gWworICAgICAgIGNsaWVudC5zdm5fY2xpZW50X2dldF9zaW1wbGVfcHJvdmlkZXIo KSwKKyAgICAgICBjbGllbnQuc3ZuX2NsaWVudF9nZXRfdXNlcm5hbWVfcHJvdmlkZXIoKSwKKyAg ICBdCisKKyAgICBzZWxmLmNsaWVudF9jdHguYXV0aF9iYXRvbiA9IGNvcmUuc3ZuX2F1dGhfb3Bl bihwcm92aWRlcnMpCisgICAgc2VsZi5yZXBvc191cmwgPSAiZmlsZTovLyIgKyBwYXRobmFtZTJ1 cmwoUkVQT1NfUEFUSCkKKworICBkZWYgaW5mb19yZWNlaXZlcihzZWxmLCBwYXRoLCBpbmZvLCBw b29sKToKKyAgICAiIiJTcXVpcnJlbCBhd2F5IHRoZSBvdXRwdXQgZnJvbSAnc3ZuIGluZm8nIHNv IHRoYXQgdGhlIHVuaXQgdGVzdHMKKyAgICAgICBjYW4gZ2V0IGF0IHRoZW0uIiIiCisgICAgc2Vs Zi5wYXRoID0gcGF0aAorICAgIHNlbGYuaW5mbyA9IGluZm8KKworICBkZWYgdGVzdF9jaGVja291 dChzZWxmKToKKyAgICAiIiJUZXN0IHN2bl9jbGllbnRfY2hlY2tvdXQyLiIiIgorCisgICAgcmV2 ID0gY29yZS5zdm5fb3B0X3JldmlzaW9uX3QoKQorICAgIHJldi5raW5kID0gY29yZS5zdm5fb3B0 X3JldmlzaW9uX2hlYWQKKworICAgIHBhdGggPSBvcy5wYXRoLmpvaW4odGVtcGZpbGUuZ2V0dGVt cGRpcigpLCAnY2hlY2tvdXQnKQorCisgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwg Y2xpZW50LmNoZWNrb3V0MiwgCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXBvc191cmws IHBhdGgsIE5vbmUsIE5vbmUsIFRydWUsIFRydWUsIAorICAgICAgICAgICAgICAgICAgICAgIHNl bGYuY2xpZW50X2N0eCkKKworICAgIGNsaWVudC5jaGVja291dDIoc2VsZi5yZXBvc191cmwsIHBh dGgsIHJldiwgcmV2LCBUcnVlLCBUcnVlLCAKKyAgICAgICAgICAgIHNlbGYuY2xpZW50X2N0eCkK KworICBkZWYgdGVzdF9pbmZvKHNlbGYpOgorICAgICIiIlRlc3Qgc2NvcGUgb2YgZ2V0X2xvZ3Mg Y2FsbGJhY2tzIiIiCisKKyAgICAjIFJ1biBpbmZvCisgICAgcmV2dCA9IGNvcmUuc3ZuX29wdF9y ZXZpc2lvbl90KCkKKyAgICByZXZ0LmtpbmQgPSBjb3JlLnN2bl9vcHRfcmV2aXNpb25faGVhZAor ICAgIHJlcG9zX3VybCA9ICJmaWxlOi8vIiArIHBhdGhuYW1lMnVybChSRVBPU19QQVRIKQorICAg IGNsaWVudC5pbmZvKHJlcG9zX3VybCwgcmV2dCwgcmV2dCwgc2VsZi5pbmZvX3JlY2VpdmVyLAor ICAgICAgICAgICAgICAgIEZhbHNlLCBzZWxmLmNsaWVudF9jdHgpCisKKyAgICAjIENoZWNrIG91 dHB1dCBmcm9tIHJ1bm5pbmcgaW5mby4gVGhpcyBhbHNvIHNlcnZlcyB0byB2ZXJpZnkgdGhhdAor ICAgICMgdGhlIGludGVybmFsICdpbmZvJyBvYmplY3QgaXMgc3RpbGwgdmFsaWQKKyAgICBzZWxm LmFzc2VydEVxdWFsKHNlbGYucGF0aCwgb3MucGF0aC5iYXNlbmFtZShSRVBPU19QQVRIKSkKKyAg ICBzZWxmLmluZm8uYXNzZXJ0X3ZhbGlkKCkKKyAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuaW5m by5VUkwsIHJlcG9zX3VybCkKKyAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuaW5mby5yZXBvc19y b290X1VSTCwgcmVwb3NfdXJsKQorCisKKyAgZGVmIHRlc3RfdXVpZF9mcm9tX3VybChzZWxmKToK KyAgICAiIiJUZXN0IHN2bl9jbGllbnRfdXVpZF9mcm9tX3VybCBvbiBhIGZpbGU6Ly8gVVJMIiIi CisgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UoCisgICAgICAgICAgICAgICAgIGNsaWVudC51 dWlkX2Zyb21fdXJsKHNlbGYucmVwb3NfdXJsLCBzZWxmLmNsaWVudF9jdHgpLAorICAgICAgICAg ICAgICAgICB0eXBlcy5TdHJpbmdUeXBlcykpCisKKyAgZGVmIHRlc3RfdXJsX2Zyb21fcGF0aChz ZWxmKToKKyAgICAiIiJUZXN0IHN2bl9jbGllbnRfdXJsX2Zyb21fcGF0aCBmb3IgYSBmaWxlOi8v IFVSTCIiIgorICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNsaWVudC51cmxfZnJvbV9wYXRoKHNlbGYu cmVwb3NfdXJsKSwgc2VsZi5yZXBvc191cmwpCisKKyAgICByZXYgPSBjb3JlLnN2bl9vcHRfcmV2 aXNpb25fdCgpCisgICAgcmV2LmtpbmQgPSBjb3JlLnN2bl9vcHRfcmV2aXNpb25faGVhZAorCisg ICAgcGF0aCA9IG9zLnBhdGguam9pbih0ZW1wZmlsZS5nZXR0ZW1wZGlyKCksICd1cmxfZnJvbV9w YXRoJykKKworICAgIGNsaWVudC5jaGVja291dDIoc2VsZi5yZXBvc191cmwsIHBhdGgsIHJldiwg cmV2LCBUcnVlLCBUcnVlLCAKKyAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2xpZW50X2N0eCkK KworICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNsaWVudC51cmxfZnJvbV9wYXRoKHBhdGgpLCBzZWxm LnJlcG9zX3VybCkKKworICBkZWYgdGVzdF91dWlkX2Zyb21fcGF0aChzZWxmKToKKyAgICAiIiJU ZXN0IHN2bl9jbGllbnRfdXVpZF9mcm9tX3BhdGguIiIiCisgICAgcmV2ID0gY29yZS5zdm5fb3B0 X3JldmlzaW9uX3QoKQorICAgIHJldi5raW5kID0gY29yZS5zdm5fb3B0X3JldmlzaW9uX2hlYWQK KworICAgIHBhdGggPSBvcy5wYXRoLmpvaW4odGVtcGZpbGUuZ2V0dGVtcGRpcigpLCAndXVpZF9m cm9tX3BhdGgnKQorCisgICAgY2xpZW50LmNoZWNrb3V0MihzZWxmLnJlcG9zX3VybCwgcGF0aCwg cmV2LCByZXYsIFRydWUsIFRydWUsIAorICAgICAgICAgICAgICAgICAgICAgc2VsZi5jbGllbnRf Y3R4KQorCisgICAgd2NfYWRtID0gd2MuYWRtX29wZW4zKE5vbmUsIHBhdGgsIEZhbHNlLCAwLCBO b25lKQorCisgICAgc2VsZi5hc3NlcnRFcXVhbHMoY2xpZW50LnV1aWRfZnJvbV9wYXRoKHBhdGgs IHdjX2FkbSwgc2VsZi5jbGllbnRfY3R4KSwgCisgICAgICAgICAgICAgICAgICAgICAgY2xpZW50 LnV1aWRfZnJvbV91cmwoc2VsZi5yZXBvc191cmwsIHNlbGYuY2xpZW50X2N0eCkpCisKKyAgICBz ZWxmLmFzc2VydF8oaXNpbnN0YW5jZShjbGllbnQudXVpZF9mcm9tX3BhdGgocGF0aCwgd2NfYWRt LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNsaWVudF9jdHgpLCB0eXBlcy5T dHJpbmdUeXBlcykpCisKKyAgZGVmIHRlc3Rfb3Blbl9yYV9zZXNzaW9uKHNlbGYpOgorICAgICAg IiIiVGVzdCBzdm5fY2xpZW50X29wZW5fcmFfc2Vzc2lvbigpLiIiIgorICAgICAgY2xpZW50Lm9w ZW5fcmFfc2Vzc2lvbihzZWxmLnJlcG9zX3VybCwgc2VsZi5jbGllbnRfY3R4KQorCitkZWYgc3Vp dGUoKToKKyAgICByZXR1cm4gdW5pdHRlc3QubWFrZVN1aXRlKFN1YnZlcnNpb25SZXBvc2l0b3J5 VGVzdENhc2UsICd0ZXN0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1aXRlQ2xh c3M9U3VidmVyc2lvblJlcG9zaXRvcnlUZXN0U2V0dXApCisKK2lmIF9fbmFtZV9fID09ICdfX21h aW5fXyc6CisgICAgcnVubmVyID0gdW5pdHRlc3QuVGV4dFRlc3RSdW5uZXIoKQorICAgIHJ1bm5l ci5ydW4oc3VpdGUoKSkKZGlmZiAtTnVyIHN1YnZlcnNpb24tMS4zLjEvc3VidmVyc2lvbi9iaW5k aW5ncy9zd2lnL3B5dGhvbi90ZXN0cy9jbGllbnQucHkub3JpZyBzdWJ2ZXJzaW9uLTEuMy4xLm5l dy9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcHl0aG9uL3Rlc3RzL2NsaWVudC5weS5vcmlnCi0t LSBzdWJ2ZXJzaW9uLTEuMy4xL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vdGVzdHMv Y2xpZW50LnB5Lm9yaWcJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIHN1 YnZlcnNpb24tMS4zLjEubmV3L3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vdGVzdHMv Y2xpZW50LnB5Lm9yaWcJMjAwNi0wNy0wNSAwMTowNDowNi4wMDAwMDAwMDAgKzAxMDAKQEAgLTAs MCArMSwxMTEgQEAKK2ltcG9ydCB1bml0dGVzdCwgb3MsIHRlbXBmaWxlLCB0eXBlcworCitmcm9t IHN2biBpbXBvcnQgY29yZSwgcmVwb3MsIGZzLCBkZWx0YSwgY2xpZW50LCB3YworCitmcm9tIHRy YWMudmVyc2lvbmNvbnRyb2wudGVzdHMuc3ZuX2ZzIGltcG9ydCBTdWJ2ZXJzaW9uUmVwb3NpdG9y eVRlc3RTZXR1cCwgXAorICBSRVBPU19QQVRICitmcm9tIHVybGxpYiBpbXBvcnQgcGF0aG5hbWUy dXJsCisKK2NsYXNzIFN1YnZlcnNpb25SZXBvc2l0b3J5VGVzdENhc2UodW5pdHRlc3QuVGVzdENh c2UpOgorICAiIiJUZXN0IGNhc2VzIGZvciB0aGUgU3VidmVyc2lvbiByZXBvc2l0b3J5IGxheWVy IiIiCisKKyAgZGVmIHNldFVwKHNlbGYpOgorICAgICIiIkxvYWQgYSBTdWJ2ZXJzaW9uIHJlcG9z aXRvcnkiIiIKKyAgICBzZWxmLmNsaWVudF9jdHggPSBjbGllbnQuc3ZuX2NsaWVudF9jcmVhdGVf Y29udGV4dCgpCisKKyAgICBwcm92aWRlcnMgPSBbCisgICAgICAgY2xpZW50LnN2bl9jbGllbnRf Z2V0X3NpbXBsZV9wcm92aWRlcigpLAorICAgICAgIGNsaWVudC5zdm5fY2xpZW50X2dldF91c2Vy bmFtZV9wcm92aWRlcigpLAorICAgIF0KKworICAgIHNlbGYuY2xpZW50X2N0eC5hdXRoX2JhdG9u ID0gY29yZS5zdm5fYXV0aF9vcGVuKHByb3ZpZGVycykKKyAgICBzZWxmLnJlcG9zX3VybCA9ICJm aWxlOi8vIiArIHBhdGhuYW1lMnVybChSRVBPU19QQVRIKQorCisgIGRlZiBpbmZvX3JlY2VpdmVy KHNlbGYsIHBhdGgsIGluZm8sIHBvb2wpOgorICAgICIiIlNxdWlycmVsIGF3YXkgdGhlIG91dHB1 dCBmcm9tICdzdm4gaW5mbycgc28gdGhhdCB0aGUgdW5pdCB0ZXN0cworICAgICAgIGNhbiBnZXQg YXQgdGhlbS4iIiIKKyAgICBzZWxmLnBhdGggPSBwYXRoCisgICAgc2VsZi5pbmZvID0gaW5mbwor CisgIGRlZiB0ZXN0X2NoZWNrb3V0KHNlbGYpOgorICAgICIiIlRlc3Qgc3ZuX2NsaWVudF9jaGVj a291dDIuIiIiCisKKyAgICByZXYgPSBjb3JlLnN2bl9vcHRfcmV2aXNpb25fdCgpCisgICAgcmV2 LmtpbmQgPSBjb3JlLnN2bl9vcHRfcmV2aXNpb25faGVhZAorCisgICAgcGF0aCA9IG9zLnBhdGgu am9pbih0ZW1wZmlsZS5nZXR0ZW1wZGlyKCksICdjaGVja291dCcpCisKKyAgICBzZWxmLmFzc2Vy dFJhaXNlcyhWYWx1ZUVycm9yLCBjbGllbnQuY2hlY2tvdXQyLCAKKyAgICAgICAgICAgICAgICAg ICAgICBzZWxmLnJlcG9zX3VybCwgcGF0aCwgTm9uZSwgTm9uZSwgVHJ1ZSwgVHJ1ZSwgCisgICAg ICAgICAgICAgICAgICAgICAgc2VsZi5jbGllbnRfY3R4KQorCisgICAgY2xpZW50LmNoZWNrb3V0 MihzZWxmLnJlcG9zX3VybCwgcGF0aCwgcmV2LCByZXYsIFRydWUsIFRydWUsIAorICAgICAgICAg ICAgc2VsZi5jbGllbnRfY3R4KQorCisgIGRlZiB0ZXN0X2luZm8oc2VsZik6CisgICAgIiIiVGVz dCBzY29wZSBvZiBnZXRfbG9ncyBjYWxsYmFja3MiIiIKKworICAgICMgUnVuIGluZm8KKyAgICBy ZXZ0ID0gY29yZS5zdm5fb3B0X3JldmlzaW9uX3QoKQorICAgIHJldnQua2luZCA9IGNvcmUuc3Zu X29wdF9yZXZpc2lvbl9oZWFkCisgICAgcmVwb3NfdXJsID0gImZpbGU6Ly8iICsgcGF0aG5hbWUy dXJsKFJFUE9TX1BBVEgpCisgICAgY2xpZW50LmluZm8ocmVwb3NfdXJsLCByZXZ0LCByZXZ0LCBz ZWxmLmluZm9fcmVjZWl2ZXIsCisgICAgICAgICAgICAgICAgRmFsc2UsIHNlbGYuY2xpZW50X2N0 eCkKKworICAgICMgQ2hlY2sgb3V0cHV0IGZyb20gcnVubmluZyBpbmZvLiBUaGlzIGFsc28gc2Vy dmVzIHRvIHZlcmlmeSB0aGF0CisgICAgIyB0aGUgaW50ZXJuYWwgJ2luZm8nIG9iamVjdCBpcyBz dGlsbCB2YWxpZAorICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5wYXRoLCBvcy5wYXRoLmJhc2Vu YW1lKFJFUE9TX1BBVEgpKQorICAgIHNlbGYuaW5mby5hc3NlcnRfdmFsaWQoKQorICAgIHNlbGYu YXNzZXJ0RXF1YWwoc2VsZi5pbmZvLlVSTCwgcmVwb3NfdXJsKQorICAgIHNlbGYuYXNzZXJ0RXF1 YWwoc2VsZi5pbmZvLnJlcG9zX3Jvb3RfVVJMLCByZXBvc191cmwpCisKKworICBkZWYgdGVzdF91 dWlkX2Zyb21fdXJsKHNlbGYpOgorICAgICIiIlRlc3Qgc3ZuX2NsaWVudF91dWlkX2Zyb21fdXJs IG9uIGEgZmlsZTovLyBVUkwiIiIKKyAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZSgKKyAgICAg ICAgICAgICAgICAgY2xpZW50LnV1aWRfZnJvbV91cmwoc2VsZi5yZXBvc191cmwsIHNlbGYuY2xp ZW50X2N0eCksCisgICAgICAgICAgICAgICAgIHR5cGVzLlN0cmluZ1R5cGVzKSkKKworICBkZWYg dGVzdF91cmxfZnJvbV9wYXRoKHNlbGYpOgorICAgICIiIlRlc3Qgc3ZuX2NsaWVudF91cmxfZnJv bV9wYXRoIGZvciBhIGZpbGU6Ly8gVVJMIiIiCisgICAgc2VsZi5hc3NlcnRFcXVhbHMoY2xpZW50 LnVybF9mcm9tX3BhdGgoc2VsZi5yZXBvc191cmwpLCBzZWxmLnJlcG9zX3VybCkKKworICAgIHJl diA9IGNvcmUuc3ZuX29wdF9yZXZpc2lvbl90KCkKKyAgICByZXYua2luZCA9IGNvcmUuc3ZuX29w dF9yZXZpc2lvbl9oZWFkCisKKyAgICBwYXRoID0gb3MucGF0aC5qb2luKHRlbXBmaWxlLmdldHRl bXBkaXIoKSwgJ3VybF9mcm9tX3BhdGgnKQorCisgICAgY2xpZW50LmNoZWNrb3V0MihzZWxmLnJl cG9zX3VybCwgcGF0aCwgcmV2LCByZXYsIFRydWUsIFRydWUsIAorICAgICAgICAgICAgICAgICAg ICAgc2VsZi5jbGllbnRfY3R4KQorCisgICAgc2VsZi5hc3NlcnRFcXVhbHMoY2xpZW50LnVybF9m cm9tX3BhdGgocGF0aCksIHNlbGYucmVwb3NfdXJsKQorCisgIGRlZiB0ZXN0X3V1aWRfZnJvbV9w YXRoKHNlbGYpOgorICAgICIiIlRlc3Qgc3ZuX2NsaWVudF91dWlkX2Zyb21fcGF0aC4iIiIKKyAg ICByZXYgPSBjb3JlLnN2bl9vcHRfcmV2aXNpb25fdCgpCisgICAgcmV2LmtpbmQgPSBjb3JlLnN2 bl9vcHRfcmV2aXNpb25faGVhZAorCisgICAgcGF0aCA9IG9zLnBhdGguam9pbih0ZW1wZmlsZS5n ZXR0ZW1wZGlyKCksICd1dWlkX2Zyb21fcGF0aCcpCisKKyAgICBjbGllbnQuY2hlY2tvdXQyKHNl bGYucmVwb3NfdXJsLCBwYXRoLCByZXYsIHJldiwgVHJ1ZSwgVHJ1ZSwgCisgICAgICAgICAgICAg ICAgICAgICBzZWxmLmNsaWVudF9jdHgpCisKKyAgICB3Y19hZG0gPSB3Yy5hZG1fb3BlbjMoTm9u ZSwgcGF0aCwgRmFsc2UsIDAsIE5vbmUpCisKKyAgICBzZWxmLmFzc2VydEVxdWFscyhjbGllbnQu dXVpZF9mcm9tX3BhdGgocGF0aCwgd2NfYWRtLCBzZWxmLmNsaWVudF9jdHgpLCAKKyAgICAgICAg ICAgICAgICAgICAgICBjbGllbnQudXVpZF9mcm9tX3VybChzZWxmLnJlcG9zX3VybCwgc2VsZi5j bGllbnRfY3R4KSkKKworICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKGNsaWVudC51dWlkX2Zy b21fcGF0aChwYXRoLCB3Y19hZG0sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYu Y2xpZW50X2N0eCksIHR5cGVzLlN0cmluZ1R5cGVzKSkKKworICBkZWYgdGVzdF9vcGVuX3JhX3Nl c3Npb24oc2VsZik6CisgICAgICAiIiJUZXN0IHN2bl9jbGllbnRfb3Blbl9yYV9zZXNzaW9uKCku IiIiCisgICAgICBjbGllbnQub3Blbl9yYV9zZXNzaW9uKHNlbGYucmVwb3NfdXJsLCBzZWxmLmNs aWVudF9jdHgpCisKK2RlZiBzdWl0ZSgpOgorICAgIHJldHVybiB1bml0dGVzdC5tYWtlU3VpdGUo U3VidmVyc2lvblJlcG9zaXRvcnlUZXN0Q2FzZSwgJ3Rlc3QnLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3VpdGVDbGFzcz1TdWJ2ZXJzaW9uUmVwb3NpdG9yeVRlc3RTZXR1cCkKKwor aWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBydW5uZXIgPSB1bml0dGVzdC5UZXh0VGVz dFJ1bm5lcigpCisgICAgcnVubmVyLnJ1bihzdWl0ZSgpKQpkaWZmIC1OdXIgc3VidmVyc2lvbi0x LjMuMS9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcHl0aG9uL3Rlc3RzL3JhLnB5IHN1YnZlcnNp b24tMS4zLjEubmV3L3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vdGVzdHMvcmEucHkK LS0tIHN1YnZlcnNpb24tMS4zLjEvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3B5dGhvbi90ZXN0 cy9yYS5weQkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgc3VidmVyc2lv bi0xLjMuMS5uZXcvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3B5dGhvbi90ZXN0cy9yYS5weQky MDA2LTA3LTA1IDAxOjA0OjA2LjAwMDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDEzNiBAQAoraW1w b3J0IHVuaXR0ZXN0LCBvcworCitmcm9tIHN2biBpbXBvcnQgY29yZSwgcmVwb3MsIGZzLCBkZWx0 YSwgY2xpZW50LCByYQorCitmcm9tIHRyYWMudmVyc2lvbmNvbnRyb2wudGVzdHMuc3ZuX2ZzIGlt cG9ydCBTdWJ2ZXJzaW9uUmVwb3NpdG9yeVRlc3RTZXR1cCwgXAorICBSRVBPU19QQVRICitmcm9t IHVybGxpYiBpbXBvcnQgcGF0aG5hbWUydXJsCisKK2NsYXNzIFN1YnZlcnNpb25SZXBvc2l0b3J5 VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAiIiJUZXN0IGNhc2VzIGZvciB0aGUgU3Vi dmVyc2lvbiByZXBvc2l0b3J5IGxheWVyIiIiCisKKyAgZGVmIHNldFVwKHNlbGYpOgorICAgICIi IkxvYWQgYSBTdWJ2ZXJzaW9uIHJlcG9zaXRvcnkiIiIKKworICAgIHJhLmluaXRpYWxpemUoKQor CisgICAgc2VsZi5yZXBvc191cmwgPSAiZmlsZTovLyIgKyBwYXRobmFtZTJ1cmwoUkVQT1NfUEFU SCkKKyAgICAKKyAgICAjIE9wZW4gcmVwb3NpdG9yeSBkaXJlY3RseSBmb3IgY3Jvc3MtY2hlY2tp bmcKKyAgICBzZWxmLnJlcG9zID0gcmVwb3Mub3BlbihSRVBPU19QQVRIKQorICAgIHNlbGYuZnMg PSByZXBvcy5mcyhzZWxmLnJlcG9zKQorCisgICAgY2FsbGJhY2tzID0gcmEuY2FsbGJhY2tzMl90 KCkKKworICAgIHNlbGYucmFfY3R4ID0gcmEub3BlbjIoc2VsZi5yZXBvc191cmwsIGNhbGxiYWNr cywgTm9uZSwgTm9uZSkKKworICBkZWYgdGVzdF9nZXRfcmVwb3Nfcm9vdChzZWxmKToKKyAgICBy b290ID0gcmEuZ2V0X3JlcG9zX3Jvb3Qoc2VsZi5yYV9jdHgpCisgICAgc2VsZi5hc3NlcnRFcXVh bChyb290LHNlbGYucmVwb3NfdXJsKQorCisgIGRlZiB0ZXN0X2dldF91dWlkKHNlbGYpOgorICAg IHJhX3V1aWQgPSByYS5nZXRfdXVpZChzZWxmLnJhX2N0eCkKKyAgICBmc191dWlkID0gZnMuZ2V0 X3V1aWQoc2VsZi5mcykKKyAgICBzZWxmLmFzc2VydEVxdWFsKHJhX3V1aWQsZnNfdXVpZCkKKwor ICBkZWYgdGVzdF9nZXRfbGFzdGVzdF9yZXZudW0oc2VsZik6CisgICAgcmFfcmV2bnVtID0gcmEu Z2V0X2xhdGVzdF9yZXZudW0oc2VsZi5yYV9jdHgpCisgICAgZnNfcmV2bnVtID0gZnMueW91bmdl c3RfcmV2KHNlbGYuZnMpCisgICAgc2VsZi5hc3NlcnRFcXVhbChyYV9yZXZudW0sZnNfcmV2bnVt KQorCisgIGRlZiB0ZXN0X2dldF9kaXIoc2VsZik6CisgICAgKGRpcmVudHMsXyxwcm9wcykgPSBy YS5nZXRfZGlyKHNlbGYucmFfY3R4LCAnJywgMSkKKyAgICBzZWxmLmFzc2VydFRydWUoZGlyZW50 cy5oYXNfa2V5KCd0cnVuaycpKQorICAgIHNlbGYuYXNzZXJ0VHJ1ZShkaXJlbnRzLmhhc19rZXko J2JyYW5jaGVzJykpCisgICAgc2VsZi5hc3NlcnRUcnVlKGRpcmVudHMuaGFzX2tleSgndGFncycp KQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlyZW50c1sndHJ1bmsnXS5raW5kLCBjb3JlLnN2bl9u b2RlX2RpcikKKyAgICBzZWxmLmFzc2VydEVxdWFsKGRpcmVudHNbJ2JyYW5jaGVzJ10ua2luZCwg Y29yZS5zdm5fbm9kZV9kaXIpCisgICAgc2VsZi5hc3NlcnRFcXVhbChkaXJlbnRzWyd0YWdzJ10u a2luZCwgY29yZS5zdm5fbm9kZV9kaXIpCisgICAgc2VsZi5hc3NlcnRUcnVlKHByb3BzLmhhc19r ZXkoY29yZS5TVk5fUFJPUF9FTlRSWV9VVUlEKSkKKyAgICBzZWxmLmFzc2VydFRydWUocHJvcHMu aGFzX2tleShjb3JlLlNWTl9QUk9QX0VOVFJZX0xBU1RfQVVUSE9SKSkKKworICAgIChkaXJlbnRz LF8sXykgPSByYS5nZXRfZGlyKHNlbGYucmFfY3R4LCAndHJ1bmsnLCAxKQorCisgICAgc2VsZi5h c3NlcnRFcXVhbChkaXJlbnRzLCB7fSkKKworICAgIChkaXJlbnRzLF8sXykgPSByYS5nZXRfZGly KHNlbGYucmFfY3R4LCAndHJ1bmsnLCAxMCkKKworICAgIHNlbGYuYXNzZXJ0VHJ1ZShkaXJlbnRz Lmhhc19rZXkoJ1JFQURNRTIudHh0JykpCisgICAgc2VsZi5hc3NlcnRFcXVhbChkaXJlbnRzWydS RUFETUUyLnR4dCddLmtpbmQsY29yZS5zdm5fbm9kZV9maWxlKQorCisgIGRlZiB0ZXN0X2NvbW1p dChzZWxmKToKKyAgICBkZWYgbXlfY2FsbGJhY2socmV2aXNpb24sIGRhdGUsIGF1dGhvciwgYmF0 b24pOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm8ucmV2aXNpb24sIGZzLnlvdW5nZXN0 X3JldihzZWxmLmZzKSkKKworICAgIGVkaXRvciwgZWRpdF9iYXRvbiA9IHJhLmdldF9jb21taXRf ZWRpdG9yKHNlbGYucmFfY3R4LCAiZm9vYmFyIiwgbXlfY2FsbGJhY2ssIE5vbmUsIEZhbHNlKQor ICAgIHJvb3QgPSBkZWx0YS5lZGl0b3JfaW52b2tlX29wZW5fcm9vdChlZGl0b3IsIGVkaXRfYmF0 b24sIDQpCisgICAgY2hpbGQgPSBkZWx0YS5lZGl0b3JfaW52b2tlX2FkZF9kaXJlY3RvcnkoZWRp dG9yLCAiYmxhIiwgcm9vdCwgTm9uZSwgMCkKKyAgICBkZWx0YS5lZGl0b3JfaW52b2tlX2Nsb3Nl X2VkaXQoZWRpdG9yLCBlZGl0X2JhdG9uKQorCisgIGRlZiB0ZXN0X2NvbW1pdChzZWxmKToKKyAg ICBkZWYgbXlfY2FsbGJhY2socmV2aXNpb24sIGRhdGUsIGF1dGhvcik6CisgICAgICAgIHNlbGYu YXNzZXJ0RXF1YWwocmV2aXNpb24sIGZzLnlvdW5nZXN0X3JldihzZWxmLmZzKSkKKworICAgIGVk aXRvciwgZWRpdF9iYXRvbiA9IHJhLmdldF9jb21taXRfZWRpdG9yKHNlbGYucmFfY3R4LCAiZm9v YmFyIiwgbXlfY2FsbGJhY2ssIE5vbmUsIEZhbHNlKQorICAgIHJvb3QgPSBkZWx0YS5lZGl0b3Jf aW52b2tlX29wZW5fcm9vdChlZGl0b3IsIGVkaXRfYmF0b24sIDQpCisgICAgY2hpbGQgPSBkZWx0 YS5lZGl0b3JfaW52b2tlX2FkZF9kaXJlY3RvcnkoZWRpdG9yLCAiYmxhaCIsIHJvb3QsIE5vbmUs IDApCisgICAgZGVsdGEuZWRpdG9yX2ludm9rZV9jbG9zZV9lZGl0KGVkaXRvciwgZWRpdF9iYXRv bikKKworICBkZWYgdGVzdF9jb21taXQoc2VsZik6CisgICAgZGVmIG15X2NhbGxiYWNrKHJldmlz aW9uLCBkYXRlLCBhdXRob3IpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldmlzaW9uLCBm cy55b3VuZ2VzdF9yZXYoc2VsZi5mcykpCisKKyAgICBlZGl0b3IsIGVkaXRfYmF0b24gPSByYS5n ZXRfY29tbWl0X2VkaXRvcihzZWxmLnJhX2N0eCwgImZvb2JhciIsIG15X2NhbGxiYWNrLCBOb25l LCBGYWxzZSkKKyAgICByb290ID0gZGVsdGEuZWRpdG9yX2ludm9rZV9vcGVuX3Jvb3QoZWRpdG9y LCBlZGl0X2JhdG9uLCA0KQorICAgIGNoaWxkID0gZGVsdGEuZWRpdG9yX2ludm9rZV9hZGRfZGly ZWN0b3J5KGVkaXRvciwgImJsYWgiLCByb290LCBOb25lLCAwKQorICAgIGRlbHRhLmVkaXRvcl9p bnZva2VfY2xvc2VfZWRpdChlZGl0b3IsIGVkaXRfYmF0b24pCisKKyAgZGVmIHRlc3RfZ2V0X2xv Y2F0aW9ucyhzZWxmKToKKyAgICBsb2NhdGlvbnMgPSByYS5nZXRfbG9jYXRpb25zKHNlbGYucmFf Y3R4LCAiL3RydW5rL1JFQURNRS50eHQiLCAyLCByYW5nZSgxLDUpKQorICAgIHNlbGYuYXNzZXJ0 RXF1YWwobG9jYXRpb25zLCB7CisgICAgICAgIDI6ICcvdHJ1bmsvUkVBRE1FLnR4dCcsIAorICAg ICAgICAzOiAnL3RydW5rL1JFQURNRS50eHQnLCAKKyAgICAgICAgNDogJy90cnVuay9SRUFETUUu dHh0J30pCisKKyAgZGVmIHRlc3RfZ2V0X2ZpbGVfcmV2cyhzZWxmKToKKyAgICBkZWYgcmV2X2hh bmRsZXIocGF0aCwgcmV2LCByZXZfcHJvcHMsIHByb3BfZGlmZnMsIHBvb2wpOgorICAgICAgICBz ZWxmLmFzc2VydF8ocmV2ID09IDIgb3IgcmV2ID09IDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1 YWwocGF0aCwgIi90cnVuay9SRUFETUUudHh0IikKKyAgICAgICAgaWYgcmV2ID09IDI6CisgICAg ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldl9wcm9wcywgeworICAgICAgICAgICAgICAnc3Zu OmxvZyc6ICdBZGRlZCBSRUFETUUuJywKKyAgICAgICAgICAgICAgJ3N2bjphdXRob3InOiAnam9o bicsCisgICAgICAgICAgICAgICdzdm46ZGF0ZSc6ICcyMDA1LTA0LTAxVDEzOjEyOjE4LjIxNjI2 N1onCisgICAgICAgICAgICB9KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm9wX2Rp ZmZzLCB7fSkKKyAgICAgICAgZWxpZiByZXYgPT0gMzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0 RXF1YWwocmV2X3Byb3BzLCB7CisgICAgICAgICAgICAgICdzdm46bG9nJzogJ0ZpeGVkIFJFQURN RS5cbicsCisgICAgICAgICAgICAgICdzdm46YXV0aG9yJzogJ2thdGUnLAorICAgICAgICAgICAg ICAnc3ZuOmRhdGUnOiAnMjAwNS0wNC0wMVQxMzoyNDo1OC4yMzQ2NDNaJworICAgICAgICAgICAg fSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvcF9kaWZmcywgeydzdm46bWltZS10 eXBlJzogJ3RleHQvcGxhaW4nLCAnc3ZuOmVvbC1zdHlsZSc6ICduYXRpdmUnfSkKKworICAgIHJh LmdldF9maWxlX3JldnMoc2VsZi5yYV9jdHgsICJ0cnVuay9SRUFETUUudHh0IiwgMCwgMTAsIHJl dl9oYW5kbGVyKQorCisgIGRlZiB0ZXN0X3VwZGF0ZShzZWxmKToKKyAgICBjbGFzcyBUZXN0RWRp dG9yKGRlbHRhLkVkaXRvcik6CisgICAgICAgIHBhc3MKKworICAgIGVkaXRvciA9IFRlc3RFZGl0 b3IoKQorCisgICAgZV9wdHIsIGVfYmF0b24gPSBkZWx0YS5tYWtlX2VkaXRvcihlZGl0b3IpCisg ICAgCisgICAgcmVwb3J0ZXIsIHJlcG9ydGVyX2JhdG9uID0gcmEuZG9fdXBkYXRlKHNlbGYucmFf Y3R4LCAxMCwgIiIsIFRydWUsIGVfcHRyLCBlX2JhdG9uKQorCisgICAgcmEucmVwb3J0ZXIyX2lu dm9rZV9zZXRfcGF0aChyZXBvcnRlciwgcmVwb3J0ZXJfYmF0b24sICIiLCAwLCBUcnVlLCBOb25l KQorCisgICAgcmEucmVwb3J0ZXIyX2ludm9rZV9maW5pc2hfcmVwb3J0KHJlcG9ydGVyLCByZXBv cnRlcl9iYXRvbikKKworZGVmIHN1aXRlKCk6CisgICAgcmV0dXJuIHVuaXR0ZXN0Lm1ha2VTdWl0 ZShTdWJ2ZXJzaW9uUmVwb3NpdG9yeVRlc3RDYXNlLCAndGVzdCcsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzdWl0ZUNsYXNzPVN1YnZlcnNpb25SZXBvc2l0b3J5VGVzdFNldHVwKQor CitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHJ1bm5lciA9IHVuaXR0ZXN0LlRleHRU ZXN0UnVubmVyKCkKKyAgICBydW5uZXIucnVuKHN1aXRlKCkpCmRpZmYgLU51ciBzdWJ2ZXJzaW9u LTEuMy4xL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vdGVzdHMvcmEucHkub3JpZyBz dWJ2ZXJzaW9uLTEuMy4xLm5ldy9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcHl0aG9uL3Rlc3Rz L3JhLnB5Lm9yaWcKLS0tIHN1YnZlcnNpb24tMS4zLjEvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2ln L3B5dGhvbi90ZXN0cy9yYS5weS5vcmlnCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICsw MTAwCisrKyBzdWJ2ZXJzaW9uLTEuMy4xLm5ldy9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcHl0 aG9uL3Rlc3RzL3JhLnB5Lm9yaWcJMjAwNi0wNy0wNSAwMTowNDowNi4wMDAwMDAwMDAgKzAxMDAK QEAgLTAsMCArMSwxMzYgQEAKK2ltcG9ydCB1bml0dGVzdCwgb3MKKworZnJvbSBzdm4gaW1wb3J0 IGNvcmUsIHJlcG9zLCBmcywgZGVsdGEsIGNsaWVudCwgcmEKKworZnJvbSB0cmFjLnZlcnNpb25j b250cm9sLnRlc3RzLnN2bl9mcyBpbXBvcnQgU3VidmVyc2lvblJlcG9zaXRvcnlUZXN0U2V0dXAs IFwKKyAgUkVQT1NfUEFUSAorZnJvbSB1cmxsaWIgaW1wb3J0IHBhdGhuYW1lMnVybAorCitjbGFz cyBTdWJ2ZXJzaW9uUmVwb3NpdG9yeVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgIiIi VGVzdCBjYXNlcyBmb3IgdGhlIFN1YnZlcnNpb24gcmVwb3NpdG9yeSBsYXllciIiIgorCisgIGRl ZiBzZXRVcChzZWxmKToKKyAgICAiIiJMb2FkIGEgU3VidmVyc2lvbiByZXBvc2l0b3J5IiIiCisK KyAgICByYS5pbml0aWFsaXplKCkKKworICAgIHNlbGYucmVwb3NfdXJsID0gImZpbGU6Ly8iICsg cGF0aG5hbWUydXJsKFJFUE9TX1BBVEgpCisgICAgCisgICAgIyBPcGVuIHJlcG9zaXRvcnkgZGly ZWN0bHkgZm9yIGNyb3NzLWNoZWNraW5nCisgICAgc2VsZi5yZXBvcyA9IHJlcG9zLm9wZW4oUkVQ T1NfUEFUSCkKKyAgICBzZWxmLmZzID0gcmVwb3MuZnMoc2VsZi5yZXBvcykKKworICAgIGNhbGxi YWNrcyA9IHJhLmNhbGxiYWNrczJfdCgpCisKKyAgICBzZWxmLnJhX2N0eCA9IHJhLm9wZW4yKHNl bGYucmVwb3NfdXJsLCBjYWxsYmFja3MsIE5vbmUsIE5vbmUpCisKKyAgZGVmIHRlc3RfZ2V0X3Jl cG9zX3Jvb3Qoc2VsZik6CisgICAgcm9vdCA9IHJhLmdldF9yZXBvc19yb290KHNlbGYucmFfY3R4 KQorICAgIHNlbGYuYXNzZXJ0RXF1YWwocm9vdCxzZWxmLnJlcG9zX3VybCkKKworICBkZWYgdGVz dF9nZXRfdXVpZChzZWxmKToKKyAgICByYV91dWlkID0gcmEuZ2V0X3V1aWQoc2VsZi5yYV9jdHgp CisgICAgZnNfdXVpZCA9IGZzLmdldF91dWlkKHNlbGYuZnMpCisgICAgc2VsZi5hc3NlcnRFcXVh bChyYV91dWlkLGZzX3V1aWQpCisKKyAgZGVmIHRlc3RfZ2V0X2xhc3Rlc3RfcmV2bnVtKHNlbGYp OgorICAgIHJhX3Jldm51bSA9IHJhLmdldF9sYXRlc3RfcmV2bnVtKHNlbGYucmFfY3R4KQorICAg IGZzX3Jldm51bSA9IGZzLnlvdW5nZXN0X3JldihzZWxmLmZzKQorICAgIHNlbGYuYXNzZXJ0RXF1 YWwocmFfcmV2bnVtLGZzX3Jldm51bSkKKworICBkZWYgdGVzdF9nZXRfZGlyKHNlbGYpOgorICAg IChkaXJlbnRzLF8scHJvcHMpID0gcmEuZ2V0X2RpcihzZWxmLnJhX2N0eCwgJycsIDEpCisgICAg c2VsZi5hc3NlcnRUcnVlKGRpcmVudHMuaGFzX2tleSgndHJ1bmsnKSkKKyAgICBzZWxmLmFzc2Vy dFRydWUoZGlyZW50cy5oYXNfa2V5KCdicmFuY2hlcycpKQorICAgIHNlbGYuYXNzZXJ0VHJ1ZShk aXJlbnRzLmhhc19rZXkoJ3RhZ3MnKSkKKyAgICBzZWxmLmFzc2VydEVxdWFsKGRpcmVudHNbJ3Ry dW5rJ10ua2luZCwgY29yZS5zdm5fbm9kZV9kaXIpCisgICAgc2VsZi5hc3NlcnRFcXVhbChkaXJl bnRzWydicmFuY2hlcyddLmtpbmQsIGNvcmUuc3ZuX25vZGVfZGlyKQorICAgIHNlbGYuYXNzZXJ0 RXF1YWwoZGlyZW50c1sndGFncyddLmtpbmQsIGNvcmUuc3ZuX25vZGVfZGlyKQorICAgIHNlbGYu YXNzZXJ0VHJ1ZShwcm9wcy5oYXNfa2V5KGNvcmUuU1ZOX1BST1BfRU5UUllfVVVJRCkpCisgICAg c2VsZi5hc3NlcnRUcnVlKHByb3BzLmhhc19rZXkoY29yZS5TVk5fUFJPUF9FTlRSWV9MQVNUX0FV VEhPUikpCisKKyAgICAoZGlyZW50cyxfLF8pID0gcmEuZ2V0X2RpcihzZWxmLnJhX2N0eCwgJ3Ry dW5rJywgMSkKKworICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlyZW50cywge30pCisKKyAgICAoZGly ZW50cyxfLF8pID0gcmEuZ2V0X2RpcihzZWxmLnJhX2N0eCwgJ3RydW5rJywgMTApCisKKyAgICBz ZWxmLmFzc2VydFRydWUoZGlyZW50cy5oYXNfa2V5KCdSRUFETUUyLnR4dCcpKQorICAgIHNlbGYu YXNzZXJ0RXF1YWwoZGlyZW50c1snUkVBRE1FMi50eHQnXS5raW5kLGNvcmUuc3ZuX25vZGVfZmls ZSkKKworICBkZWYgdGVzdF9jb21taXQoc2VsZik6CisgICAgZGVmIG15X2NhbGxiYWNrKHJldmlz aW9uLCBkYXRlLCBhdXRob3IsIGJhdG9uKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZv LnJldmlzaW9uLCBmcy55b3VuZ2VzdF9yZXYoc2VsZi5mcykpCisKKyAgICBlZGl0b3IsIGVkaXRf YmF0b24gPSByYS5nZXRfY29tbWl0X2VkaXRvcihzZWxmLnJhX2N0eCwgImZvb2JhciIsIG15X2Nh bGxiYWNrLCBOb25lLCBGYWxzZSkKKyAgICByb290ID0gZGVsdGEuZWRpdG9yX2ludm9rZV9vcGVu X3Jvb3QoZWRpdG9yLCBlZGl0X2JhdG9uLCA0KQorICAgIGNoaWxkID0gZGVsdGEuZWRpdG9yX2lu dm9rZV9hZGRfZGlyZWN0b3J5KGVkaXRvciwgImJsYSIsIHJvb3QsIE5vbmUsIDApCisgICAgZGVs dGEuZWRpdG9yX2ludm9rZV9jbG9zZV9lZGl0KGVkaXRvciwgZWRpdF9iYXRvbikKKworICBkZWYg dGVzdF9jb21taXQoc2VsZik6CisgICAgZGVmIG15X2NhbGxiYWNrKHJldmlzaW9uLCBkYXRlLCBh dXRob3IpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldmlzaW9uLCBmcy55b3VuZ2VzdF9y ZXYoc2VsZi5mcykpCisKKyAgICBlZGl0b3IsIGVkaXRfYmF0b24gPSByYS5nZXRfY29tbWl0X2Vk aXRvcihzZWxmLnJhX2N0eCwgImZvb2JhciIsIG15X2NhbGxiYWNrLCBOb25lLCBGYWxzZSkKKyAg ICByb290ID0gZGVsdGEuZWRpdG9yX2ludm9rZV9vcGVuX3Jvb3QoZWRpdG9yLCBlZGl0X2JhdG9u LCA0KQorICAgIGNoaWxkID0gZGVsdGEuZWRpdG9yX2ludm9rZV9hZGRfZGlyZWN0b3J5KGVkaXRv ciwgImJsYWgiLCByb290LCBOb25lLCAwKQorICAgIGRlbHRhLmVkaXRvcl9pbnZva2VfY2xvc2Vf ZWRpdChlZGl0b3IsIGVkaXRfYmF0b24pCisKKyAgZGVmIHRlc3RfY29tbWl0KHNlbGYpOgorICAg IGRlZiBteV9jYWxsYmFjayhyZXZpc2lvbiwgZGF0ZSwgYXV0aG9yKToKKyAgICAgICAgc2VsZi5h c3NlcnRFcXVhbChyZXZpc2lvbiwgZnMueW91bmdlc3RfcmV2KHNlbGYuZnMpKQorCisgICAgZWRp dG9yLCBlZGl0X2JhdG9uID0gcmEuZ2V0X2NvbW1pdF9lZGl0b3Ioc2VsZi5yYV9jdHgsICJmb29i YXIiLCBteV9jYWxsYmFjaywgTm9uZSwgRmFsc2UpCisgICAgcm9vdCA9IGRlbHRhLmVkaXRvcl9p bnZva2Vfb3Blbl9yb290KGVkaXRvciwgZWRpdF9iYXRvbiwgNCkKKyAgICBjaGlsZCA9IGRlbHRh LmVkaXRvcl9pbnZva2VfYWRkX2RpcmVjdG9yeShlZGl0b3IsICJibGFoIiwgcm9vdCwgTm9uZSwg MCkKKyAgICBkZWx0YS5lZGl0b3JfaW52b2tlX2Nsb3NlX2VkaXQoZWRpdG9yLCBlZGl0X2JhdG9u KQorCisgIGRlZiB0ZXN0X2dldF9sb2NhdGlvbnMoc2VsZik6CisgICAgbG9jYXRpb25zID0gcmEu Z2V0X2xvY2F0aW9ucyhzZWxmLnJhX2N0eCwgIi90cnVuay9SRUFETUUudHh0IiwgMiwgcmFuZ2Uo MSw1KSkKKyAgICBzZWxmLmFzc2VydEVxdWFsKGxvY2F0aW9ucywgeworICAgICAgICAyOiAnL3Ry dW5rL1JFQURNRS50eHQnLCAKKyAgICAgICAgMzogJy90cnVuay9SRUFETUUudHh0JywgCisgICAg ICAgIDQ6ICcvdHJ1bmsvUkVBRE1FLnR4dCd9KQorCisgIGRlZiB0ZXN0X2dldF9maWxlX3JldnMo c2VsZik6CisgICAgZGVmIHJldl9oYW5kbGVyKHBhdGgsIHJldiwgcmV2X3Byb3BzLCBwcm9wX2Rp ZmZzLCBwb29sKToKKyAgICAgICAgc2VsZi5hc3NlcnRfKHJldiA9PSAyIG9yIHJldiA9PSAzKQor ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhdGgsICIvdHJ1bmsvUkVBRE1FLnR4dCIpCisgICAg ICAgIGlmIHJldiA9PSAyOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXZfcHJvcHMs IHsKKyAgICAgICAgICAgICAgJ3N2bjpsb2cnOiAnQWRkZWQgUkVBRE1FLicsCisgICAgICAgICAg ICAgICdzdm46YXV0aG9yJzogJ2pvaG4nLAorICAgICAgICAgICAgICAnc3ZuOmRhdGUnOiAnMjAw NS0wNC0wMVQxMzoxMjoxOC4yMTYyNjdaJworICAgICAgICAgICAgfSkKKyAgICAgICAgICAgIHNl bGYuYXNzZXJ0RXF1YWwocHJvcF9kaWZmcywge30pCisgICAgICAgIGVsaWYgcmV2ID09IDM6Cisg ICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldl9wcm9wcywgeworICAgICAgICAgICAgICAn c3ZuOmxvZyc6ICdGaXhlZCBSRUFETUUuXG4nLAorICAgICAgICAgICAgICAnc3ZuOmF1dGhvcic6 ICdrYXRlJywKKyAgICAgICAgICAgICAgJ3N2bjpkYXRlJzogJzIwMDUtMDQtMDFUMTM6MjQ6NTgu MjM0NjQzWicKKyAgICAgICAgICAgIH0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBy b3BfZGlmZnMsIHsnc3ZuOm1pbWUtdHlwZSc6ICd0ZXh0L3BsYWluJywgJ3N2bjplb2wtc3R5bGUn OiAnbmF0aXZlJ30pCisKKyAgICByYS5nZXRfZmlsZV9yZXZzKHNlbGYucmFfY3R4LCAidHJ1bmsv UkVBRE1FLnR4dCIsIDAsIDEwLCByZXZfaGFuZGxlcikKKworICBkZWYgdGVzdF91cGRhdGUoc2Vs Zik6CisgICAgY2xhc3MgVGVzdEVkaXRvcihkZWx0YS5FZGl0b3IpOgorICAgICAgICBwYXNzCisK KyAgICBlZGl0b3IgPSBUZXN0RWRpdG9yKCkKKworICAgIGVfcHRyLCBlX2JhdG9uID0gZGVsdGEu bWFrZV9lZGl0b3IoZWRpdG9yKQorICAgIAorICAgIHJlcG9ydGVyLCByZXBvcnRlcl9iYXRvbiA9 IHJhLmRvX3VwZGF0ZShzZWxmLnJhX2N0eCwgMTAsICIiLCBUcnVlLCBlX3B0ciwgZV9iYXRvbikK KworICAgIHJhLnJlcG9ydGVyMl9pbnZva2Vfc2V0X3BhdGgocmVwb3J0ZXIsIHJlcG9ydGVyX2Jh dG9uLCAiIiwgMCwgVHJ1ZSwgTm9uZSkKKworICAgIHJhLnJlcG9ydGVyMl9pbnZva2VfZmluaXNo X3JlcG9ydChyZXBvcnRlciwgcmVwb3J0ZXJfYmF0b24pCisKK2RlZiBzdWl0ZSgpOgorICAgIHJl dHVybiB1bml0dGVzdC5tYWtlU3VpdGUoU3VidmVyc2lvblJlcG9zaXRvcnlUZXN0Q2FzZSwgJ3Rl c3QnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VpdGVDbGFzcz1TdWJ2ZXJzaW9u UmVwb3NpdG9yeVRlc3RTZXR1cCkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBy dW5uZXIgPSB1bml0dGVzdC5UZXh0VGVzdFJ1bm5lcigpCisgICAgcnVubmVyLnJ1bihzdWl0ZSgp KQpkaWZmIC1OdXIgc3VidmVyc2lvbi0xLjMuMS9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcHl0 aG9uL3Rlc3RzL3J1bl9hbGwucHkgc3VidmVyc2lvbi0xLjMuMS5uZXcvc3VidmVyc2lvbi9iaW5k aW5ncy9zd2lnL3B5dGhvbi90ZXN0cy9ydW5fYWxsLnB5Ci0tLSBzdWJ2ZXJzaW9uLTEuMy4xL3N1 YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vdGVzdHMvcnVuX2FsbC5weQkyMDA1LTEwLTAy IDA1OjE4OjI1LjAwMDAwMDAwMCArMDEwMAorKysgc3VidmVyc2lvbi0xLjMuMS5uZXcvc3VidmVy c2lvbi9iaW5kaW5ncy9zd2lnL3B5dGhvbi90ZXN0cy9ydW5fYWxsLnB5CTIwMDYtMDctMDUgMDE6 MDQ6MDYuMDAwMDAwMDAwICswMTAwCkBAIC0xLDYgKzEsNiBAQAogaW1wb3J0IHN5cywgb3MKIGJp bmRpciA9IG9zLnBhdGguZGlybmFtZShzeXMuYXJndlswXSkKLXN5cy5wYXRoWzA6MF0gPSBbIG9z LmdldGN3ZCgpLCAiJXMvLmxpYnMiICUgb3MuZ2V0Y3dkKCksIFwKK3N5cy5wYXRoWzA6MF0gPSBb IGJpbmRpciwgb3MuZ2V0Y3dkKCksICIlcy8ubGlicyIgJSBvcy5nZXRjd2QoKSwgXAogICAgICAg ICAgICAgICAgICAgIiVzLy4uIiAlIGJpbmRpciwgIiVzLy4uLy5saWJzIiAlIGJpbmRpciBdCiAK ICMgT1NlcyB3aXRob3V0IFJQQVRIIHN1cHBvcnQgYXJlIGdvaW5nIHRvIGhhdmUgdG8gZG8gdGhp bmdzIGhlcmUgdG8gbWFrZQpAQCAtMTcsNiArMTcsOSBAQAogaW1wb3J0IHVuaXR0ZXN0CiBpbXBv cnQgcG9vbAogaW1wb3J0IHJlcG9zaXRvcnkKK2ltcG9ydCBjbGllbnQKK2ltcG9ydCByYQoraW1w b3J0IHdjCiBpbXBvcnQgdHJhYy52ZXJzaW9uY29udHJvbC50ZXN0cwogCiAjIFJ1biBhbGwgdGVz dHMKQEAgLTI0LDcgKzI3LDEwIEBACiBkZWYgc3VpdGUoKToKICAgIiIiUnVuIGFsbCB0ZXN0cyIi IgogICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCisgIHN1aXRlLmFkZFRlc3QoY2xpZW50 LnN1aXRlKCkpCiAgIHN1aXRlLmFkZFRlc3QocG9vbC5zdWl0ZSgpKQorICBzdWl0ZS5hZGRUZXN0 KHJhLnN1aXRlKCkpCisgIHN1aXRlLmFkZFRlc3Qod2Muc3VpdGUoKSkKICAgc3VpdGUuYWRkVGVz dChyZXBvc2l0b3J5LnN1aXRlKCkpCiAgIHN1aXRlLmFkZFRlc3QodHJhYy52ZXJzaW9uY29udHJv bC50ZXN0cy5zdWl0ZSgpKTsKICAgcmV0dXJuIHN1aXRlCmRpZmYgLU51ciBzdWJ2ZXJzaW9uLTEu My4xL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vdGVzdHMvd2MucHkgc3VidmVyc2lv bi0xLjMuMS5uZXcvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3B5dGhvbi90ZXN0cy93Yy5weQot LS0gc3VidmVyc2lvbi0xLjMuMS9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcHl0aG9uL3Rlc3Rz L3djLnB5CTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyBzdWJ2ZXJzaW9u LTEuMy4xLm5ldy9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcHl0aG9uL3Rlc3RzL3djLnB5CTIw MDYtMDctMDUgMDE6MDQ6MDYuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsMTc1IEBACitpbXBv cnQgdW5pdHRlc3QsIG9zLCB0ZW1wZmlsZQoraW1wb3J0IHNodXRpbAorCitmcm9tIHN2biBpbXBv cnQgY29yZSwgcmVwb3MsIHdjLCBjbGllbnQKK2Zyb20gbGlic3ZuLmNvcmUgaW1wb3J0IFN1YnZl cnNpb25FeGNlcHRpb24KKworZnJvbSB0cmFjLnZlcnNpb25jb250cm9sLnRlc3RzLnN2bl9mcyBp bXBvcnQgU3VidmVyc2lvblJlcG9zaXRvcnlUZXN0U2V0dXAsIFwKKyAgUkVQT1NfUEFUSAorZnJv bSB1cmxsaWIgaW1wb3J0IHBhdGhuYW1lMnVybAorCitjbGFzcyBTdWJ2ZXJzaW9uUmVwb3NpdG9y eVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgIiIiVGVzdCBjYXNlcyBmb3IgdGhlIFN1 YnZlcnNpb24gd29ya2luZyBjb3B5IGxheWVyIiIiCisKKyAgZGVmIHNldFVwKHNlbGYpOgorICAg ICIiIkxvYWQgYSBTdWJ2ZXJzaW9uIHJlcG9zaXRvcnkiIiIKKworICAgIHNlbGYucmVwb3NfdXJs ID0gImZpbGU6Ly8iICsgcGF0aG5hbWUydXJsKFJFUE9TX1BBVEgpCisgICAgCisgICAgIyBPcGVu IHJlcG9zaXRvcnkgZGlyZWN0bHkgZm9yIGNyb3NzLWNoZWNraW5nCisgICAgc2VsZi5yZXBvcyA9 IHJlcG9zLm9wZW4oUkVQT1NfUEFUSCkKKyAgICBzZWxmLmZzID0gcmVwb3MuZnMoc2VsZi5yZXBv cykKKworICAgIHNlbGYucGF0aCA9IHRlbXBmaWxlLm1rdGVtcCgpCisKKyAgICBjbGllbnRfY3R4 ID0gY2xpZW50LmNyZWF0ZV9jb250ZXh0KCkKKyAgICAKKyAgICByZXYgPSBjb3JlLnN2bl9vcHRf cmV2aXNpb25fdCgpCisgICAgcmV2LmtpbmQgPSBjb3JlLnN2bl9vcHRfcmV2aXNpb25faGVhZAor CisgICAgY2xpZW50LmNoZWNrb3V0MihzZWxmLnJlcG9zX3VybCwgc2VsZi5wYXRoLCByZXYsIHJl diwgVHJ1ZSwgVHJ1ZSwgCisgICAgICAgICAgICBjbGllbnRfY3R4KQorCisgICAgc2VsZi53YyA9 IHdjLmFkbV9vcGVuMyhOb25lLCBzZWxmLnBhdGgsIFRydWUsIC0xLCBOb25lKQorCisgIGRlZiB0 ZXN0X2VudHJ5KHNlbGYpOgorICAgICAgd2NfZW50cnkgPSB3Yy5lbnRyeShzZWxmLnBhdGgsIHNl bGYud2MsIFRydWUpCisKKyAgZGVmIHRlc3RfbG9jayhzZWxmKToKKyAgICAgIGxvY2sgPSB3Yy5h ZGRfbG9jayhzZWxmLnBhdGgsIGNvcmUuc3ZuX2xvY2tfY3JlYXRlKGNvcmUuUG9vbCgpKSwgc2Vs Zi53YykKKyAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgd2MuYWRtX2xvY2tlZChzZWxmLndj KSkKKyAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgd2MubG9ja2VkKHNlbGYucGF0aCkpCisg ICAgICB3Yy5yZW1vdmVfbG9jayhzZWxmLnBhdGgsIHNlbGYud2MpCisKKyAgZGVmIHRlc3RfdmVy c2lvbihzZWxmKToKKyAgICAgIHdjLnZlcnNpb24oKQorCisgIGRlZiB0ZXN0X2FjY2Vzc19wYXRo KHNlbGYpOgorICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnBhdGgsIHdjLmFkbV9hY2Nlc3Nf cGF0aChzZWxmLndjKSkKKworICBkZWYgdGVzdF9pc19hZG1fZGlyKHNlbGYpOgorICAgICAgc2Vs Zi5hc3NlcnRUcnVlKHdjLmlzX2FkbV9kaXIoIi5zdm4iKSkKKyAgICAgIHNlbGYuYXNzZXJ0RmFs c2Uod2MuaXNfYWRtX2RpcigiLmZvb3N2biIpKQorCisgIGRlZiB0ZXN0X2dldF9hZG1fZGlyKHNl bGYpOgorICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uod2MuZ2V0X2FkbV9kaXIoKSwg YmFzZXN0cmluZykpCisKKyAgZGVmIHRlc3Rfc2V0X2FkbV9kaXIoc2VsZik6CisgICAgICBzZWxm LmFzc2VydFJhaXNlcyhTdWJ2ZXJzaW9uRXhjZXB0aW9uLCB3Yy5zZXRfYWRtX2RpciwgIi5mb29i YXIiKQorICAgICAgc2VsZi5hc3NlcnRUcnVlKHdjLmlzX2FkbV9kaXIoIi5zdm4iKSkKKyAgICAg IHNlbGYuYXNzZXJ0RmFsc2Uod2MuaXNfYWRtX2RpcigiX3N2biIpKQorICAgICAgc2VsZi5hc3Nl cnRGYWxzZSh3Yy5pc19hZG1fZGlyKCIuZm9vYmFyIikpCisgICAgICB3Yy5zZXRfYWRtX2Rpcigi X3N2biIpCisgICAgICBzZWxmLmFzc2VydFRydWUod2MuaXNfYWRtX2RpcigiX3N2biIpKQorICAg ICAgc2VsZi5hc3NlcnRFcXVhbCgiX3N2biIsIHdjLmdldF9hZG1fZGlyKCkpCisgICAgICB3Yy5z ZXRfYWRtX2RpcigiLnN2biIpCisgICAgICBzZWxmLmFzc2VydEZhbHNlKHdjLmlzX2FkbV9kaXIo Il9zdm4iKSkKKyAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIi5zdm4iLCB3Yy5nZXRfYWRtX2Rpcigp KQorCisgIGRlZiB0ZXN0X2luaXRfdHJhdmVyc2FsX2luZm8oc2VsZik6CisgICAgICB3Yy5pbml0 X3RyYXZlcnNhbF9pbmZvKCkKKworICBkZWYgdGVzdF9jcmF3bF9yZXZpc2lvbnMyKHNlbGYpOgor ICAgICAgaW5mb3MgPSBbXQorICAgICAgc2V0X3BhdGhzID0gW10KKworICAgICAgZGVmIG5vdGlm eShpbmZvLCBwb29sKToKKyAgICAgICAgICBpbmZvcy5hcHBlbmQoaW5mbykKKworICAgICAgY2xh c3MgTXlSZXBvcnRlcjoKKyAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAg ICAgIHNlbGYuX2ZpbmlzaGVkX3JlcG9ydCA9IEZhbHNlCisKKyAgICAgICAgICBkZWYgYWJvcnRf cmVwb3J0KHNlbGYsIHBvb2wpOgorICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICBkZWYg ZmluaXNoX3JlcG9ydChzZWxmLCBwb29sKToKKyAgICAgICAgICAgICAgc2VsZi5fZmluaXNoZWRf cmVwb3J0ID0gVHJ1ZQorCisgICAgICAgICAgZGVmIHNldF9wYXRoKHNlbGYsIHBhdGgsIHJldmlz aW9uLCBzdGFydF9lbXB0eSwgbG9ja190b2tlbiwgcG9vbCk6CisgICAgICAgICAgICAgIHNldF9w YXRocy5hcHBlbmQocGF0aCkKKworICAgICAgICAgIGRlZiBsaW5rX3BhdGgoc2VsZiwgcGF0aCwg dXJsLCByZXZpc2lvbiwgc3RhcnRfZW1wdHksIGxvY2tfdG9rZW4sCisgICAgICAgICAgICAgICAg ICAgICAgICBwb29sKToKKyAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgZGVmIGRlbGV0 ZV9wYXRoKHNlbGYsIHBhdGgsIHBvb2wpOgorICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICMg UmVtb3ZlIHRydW5rL1JFQURNRS50eHQKKyAgICAgIHJlYWRtZV9wYXRoID0gb3MucGF0aC5qb2lu KHNlbGYucGF0aCwgInRydW5rIiwgIlJFQURNRS50eHQiKQorICAgICAgc2VsZi5hc3NlcnRfKG9z LnBhdGguZXhpc3RzKHJlYWRtZV9wYXRoKSkKKyAgICAgIG9zLnJlbW92ZShyZWFkbWVfcGF0aCkK KworICAgICAgIyBSZXN0b3JlIHRydW5rL1JFQURNRS50eHQgdXNpbmcgY3Jhd2xfcmV2aXNpb24y CisgICAgICBpbmZvID0gd2MuaW5pdF90cmF2ZXJzYWxfaW5mbygpCisgICAgICByZXBvcnRlciA9 IE15UmVwb3J0ZXIoKQorICAgICAgd2MuY3Jhd2xfcmV2aXNpb25zMihzZWxmLnBhdGgsIHNlbGYu d2MsIHJlcG9ydGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBUcnVlLCBUcnVlLCBGYWxz ZSwgbm90aWZ5LCBpbmZvKQorCisgICAgICAjIENoZWNrIHRoYXQgdGhlIHJlcG9ydCBmaW5pc2hl ZAorICAgICAgc2VsZi5hc3NlcnRfKHJlcG9ydGVyLl9maW5pc2hlZF9yZXBvcnQpCisgICAgICBz ZWxmLmFzc2VydEVxdWFsKFsnJ10sIHNldF9wYXRocykKKyAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo MSwgbGVuKGluZm9zKSkKKworICAgICAgIyBDaGVjayBjb250ZW50IG9mIGluZm9zIG9iamVjdAor ICAgICAgW2luZm9dID0gaW5mb3MKKyAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZG1lX3BhdGgs IGluZm8ucGF0aCkKKyAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29yZS5zdm5fbm9kZV9maWxlLCBp bmZvLmtpbmQpCisgICAgICBzZWxmLmFzc2VydEVxdWFsKC0xLCBpbmZvLnJldmlzaW9uKQorCisg IGRlZiB0ZXN0X2NyZWF0ZV9ub3RpZnkoc2VsZik6CisgICAgICB3Yy5jcmVhdGVfbm90aWZ5KHNl bGYucGF0aCwgd2Mubm90aWZ5X2FkZCkKKworICBkZWYgdGVzdF9jaGVja193YyhzZWxmKToKKyAg ICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3Yy5jaGVja193YyhzZWxmLnBhdGgpID4gMCkKKworICBkZWYg dGVzdF9nZXRfYW5jZXN0cnkoc2VsZik6CisgICAgICBzZWxmLmFzc2VydEVxdWFsKFtzZWxmLnJl cG9zX3VybCwgMTJdLCAKKyAgICAgICAgICAgICAgICAgICAgICAgd2MuZ2V0X2FuY2VzdHJ5KHNl bGYucGF0aCwgc2VsZi53YykpCisKKyAgZGVmIHRlc3Rfc3RhdHVzKHNlbGYpOgorICAgICAgd2Mu c3RhdHVzMihzZWxmLnBhdGgsIHNlbGYud2MpCisKKyAgZGVmIHRlc3RfaXNfbm9ybWFsX3Byb3Ao c2VsZik6CisgICAgICBzZWxmLmZhaWxJZih3Yy5pc19ub3JtYWxfcHJvcCgnc3ZuOndjOmZvbzpi YXInKSkKKyAgICAgIHNlbGYuZmFpbElmKHdjLmlzX25vcm1hbF9wcm9wKCdzdm46ZW50cnk6Zm9v OmJhcicpKQorICAgICAgc2VsZi5hc3NlcnRfKHdjLmlzX25vcm1hbF9wcm9wKCdzdm46Zm9vOmJh cicpKQorICAgICAgc2VsZi5hc3NlcnRfKHdjLmlzX25vcm1hbF9wcm9wKCdmb3JlaWduOmZvbzpi YXInKSkKKworICBkZWYgdGVzdF9pc193Y19wcm9wKHNlbGYpOgorICAgICAgc2VsZi5hc3NlcnRf KHdjLmlzX3djX3Byb3AoJ3N2bjp3Yzpmb286YmFyJykpCisgICAgICBzZWxmLmZhaWxJZih3Yy5p c193Y19wcm9wKCdzdm46ZW50cnk6Zm9vOmJhcicpKQorICAgICAgc2VsZi5mYWlsSWYod2MuaXNf d2NfcHJvcCgnc3ZuOmZvbzpiYXInKSkKKyAgICAgIHNlbGYuZmFpbElmKHdjLmlzX3djX3Byb3Ao J2ZvcmVpZ246Zm9vOmJhcicpKQorCisgIGRlZiB0ZXN0X2lzX2VudHJ5X3Byb3Aoc2VsZik6Cisg ICAgICBzZWxmLmFzc2VydF8od2MuaXNfZW50cnlfcHJvcCgnc3ZuOmVudHJ5OmZvbzpiYXInKSkK KyAgICAgIHNlbGYuZmFpbElmKHdjLmlzX2VudHJ5X3Byb3AoJ3N2bjp3Yzpmb286YmFyJykpCisg ICAgICBzZWxmLmZhaWxJZih3Yy5pc19lbnRyeV9wcm9wKCdzdm46Zm9vOmJhcicpKQorICAgICAg c2VsZi5mYWlsSWYod2MuaXNfZW50cnlfcHJvcCgnZm9yZWlnbjpmb286YmFyJykpCisKKyAgZGVm IHRlc3RfZ2V0X3ByaXN0aW5lX2NvcHlfcGF0aChzZWxmKToKKyAgICAgIHNlbGYuYXNzZXJ0RXF1 YWwoCisgICAgICAgIHdjLmdldF9wcmlzdGluZV9jb3B5X3BhdGgob3MucGF0aC5qb2luKHNlbGYu cGF0aCwgJ2ZvbycpKSwKKyAgICAgICAgb3MucGF0aC5qb2luKHNlbGYucGF0aCwgd2MuZ2V0X2Fk bV9kaXIoKSwgJ3RleHQtYmFzZScsICdmb28uc3ZuLWJhc2UnKSkKKworICBkZWYgdGVzdF9nZXRf aWdub3JlcyhzZWxmKToKKyAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKHdjLmdldF9pZ25v cmVzKE5vbmUsIHNlbGYud2MpLCBsaXN0KSkKKworICBkZWYgdGVzdF9lbnRyaWVzX3JlYWQoc2Vs Zik6CisgICAgICBlbnRyaWVzID0gd2MuZW50cmllc19yZWFkKHNlbGYud2MsIFRydWUpCisgICAg ICAgIAorICAgICAgc2VsZi5hc3NlcnRFcXVhbChbJycsICd0YWdzJywgJ2JyYW5jaGVzJywgJ3Ry dW5rJ10sIGVudHJpZXMua2V5cygpKQorCisgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgIHdj LmFkbV9jbG9zZShzZWxmLndjKQorICAgICAgc2h1dGlsLnJtdHJlZShzZWxmLnBhdGgpCisKK2Rl ZiBzdWl0ZSgpOgorICAgIHJldHVybiB1bml0dGVzdC5tYWtlU3VpdGUoU3VidmVyc2lvblJlcG9z aXRvcnlUZXN0Q2FzZSwgJ3Rlc3QnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vp dGVDbGFzcz1TdWJ2ZXJzaW9uUmVwb3NpdG9yeVRlc3RTZXR1cCkKKworaWYgX19uYW1lX18gPT0g J19fbWFpbl9fJzoKKyAgICBydW5uZXIgPSB1bml0dGVzdC5UZXh0VGVzdFJ1bm5lcigpCisgICAg cnVubmVyLnJ1bihzdWl0ZSgpKQpkaWZmIC1OdXIgc3VidmVyc2lvbi0xLjMuMS9zdWJ2ZXJzaW9u L2JpbmRpbmdzL3N3aWcvc3ZuX2NsaWVudC5pIHN1YnZlcnNpb24tMS4zLjEubmV3L3N1YnZlcnNp b24vYmluZGluZ3Mvc3dpZy9zdm5fY2xpZW50LmkKLS0tIHN1YnZlcnNpb24tMS4zLjEvc3VidmVy c2lvbi9iaW5kaW5ncy9zd2lnL3N2bl9jbGllbnQuaQkyMDA2LTAxLTA0IDE3OjIwOjA4LjAwMDAw MDAwMCArMDAwMAorKysgc3VidmVyc2lvbi0xLjMuMS5uZXcvc3VidmVyc2lvbi9iaW5kaW5ncy9z d2lnL3N2bl9jbGllbnQuaQkyMDA2LTA3LTA1IDAxOjA0OjA2LjAwMDAwMDAwMCArMDEwMApAQCAt MjUsNiArMjUsNyBAQAogI2VuZGlmCiAKICVpbmNsdWRlIHR5cGVtYXBzLmkKKyVpbmNsdWRlIGNv bnN0cmFpbnRzLmkKIAogJWluY2x1ZGUgc3ZuX2dsb2JhbC5zd2cKICVpbXBvcnQgY29yZS5pCkBA IC00NCw2ICs0NSwxMSBAQAogICBzdm5fY2xpZW50X2N0eF90ICoqCiB9OwogCislYXBwbHkgUG9p bnRlciBOT05OVUxMIHsgCisgIGNvbnN0IHN2bl9vcHRfcmV2aXNpb25fdCAqcmV2aXNpb24sCisg IGNvbnN0IHN2bl9vcHRfcmV2aXNpb25fdCAqcGVnX3JldmlzaW9uCit9OworCiAlYXBwbHkgY29u c3QgYXByX2FycmF5X2hlYWRlcl90ICpTVFJJTkdMSVNUIHsKICAgICBjb25zdCBhcHJfYXJyYXlf aGVhZGVyX3QgKnRhcmdldHMsCiAgICAgY29uc3QgYXByX2FycmF5X2hlYWRlcl90ICpkaWZmX29w dGlvbnMKQEAgLTY2LDYgKzcyLDE2IEBACiAKICNpZmRlZiBTV0lHUFlUSE9OCiAlYXBwbHkgc3Zu X3N0cmVhbV90ICpXUkFQUEVEX1NUUkVBTSB7IHN2bl9zdHJlYW1fdCAqIH07CisKKy8qIG1lbWJl cnMgb2Ygc3ZuX2NsaWVudF9jdHhfdCAqLworJWFwcGx5IHZvaWQgKlBZX0FTX1ZPSUQgeworICAg IHZvaWQgKm5vdGlmeV9iYXRvbiwKKyAgICB2b2lkICpsb2dfbXNnX2JhdG9uLAorICAgIHZvaWQg KmNhbmNlbF9iYXRvbiwKKyAgICB2b2lkICpub3RpZnlfYmF0b24yLAorICAgIHZvaWQgKmxvZ19t c2dfYmF0b24yLAorICAgIHZvaWQgKnByb2dyZXNzX2JhdG9uCit9OwogI2VuZGlmCiAKIC8qIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCkBAIC0yMDAsNiArMjE2LDE4IEBACiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgICBDYWxsYmFjazogc3ZuX2luZm9fcmVjZWl2ZXJfdAorICAgc3ZuX2NsaWVudF9pbmZvKCkK KyovCisKKyV0eXBlbWFwKHB5dGhvbiwgaW4pIChzdm5faW5mb19yZWNlaXZlcl90IHJlY2VpdmVy LCAKKyAgICAgICAgICAgICAgICAgICAgICB2b2lkICpyZWNlaXZlcl9iYXRvbikgeworICAgICQx ID0gc3ZuX3N3aWdfcHlfaW5mb19yZWNlaXZlcl9mdW5jOworICAgICQyID0gKHZvaWQgKikkaW5w dXQ7Cit9CisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIFdlIHVzZSAnc3ZuX3djX3N0YXR1c190 IConIGluIHNvbWUgY3VzdG9tIGNvZGUsIGJ1dCBpdCBpc24ndCBpbiB0aGUKICAgIEFQSSBhbnl3 aGVyZS4gVGh1cywgU1dJRyBkb2Vzbid0IGdlbmVyYXRlIGEgdHlwZW1hcCBlbnRyeSBmb3IgaXQu IGJ5CiAgICBhZGRpbmcgYSBzaW1wbGUgZGVjbGFyYXRpb24gaGVyZSwgU1dJRyB3aWxsIGluc2Vy dCBhIG5hbWUgZm9yIGl0LgpAQCAtNDgzLDYgKzUxMSwyNCBAQAogJWluY2x1ZGUgc3ZuX3RpbWVf aC5zd2cKICVpbmNsdWRlIHN2bl9jbGllbnRfaC5zd2cKIAorI2lmZGVmIFNXSUdQWVRIT04KKwor LyogcHJvdmlkZSBQeXRob24gd2l0aCBhY2Nlc3MgdG8gc29tZSB0aHVua3MuICovCislY29uc3Rh bnQgc3ZuX2NhbmNlbF9mdW5jX3Qgc3ZuX3N3aWdfcHlfY2FuY2VsX2Z1bmM7CislY29uc3RhbnQg c3ZuX2NsaWVudF9nZXRfY29tbWl0X2xvZzJfdCBzdm5fc3dpZ19weV9nZXRfY29tbWl0X2xvZ19m dW5jOworJWNvbnN0YW50IHN2bl93Y19ub3RpZnlfZnVuYzJfdCBzdm5fc3dpZ19weV9ub3RpZnlf ZnVuYzsKKworI2VuZGlmCisKKyNpZmRlZiBTV0lHUFlUSE9OCisKKy8qIHByb3ZpZGUgUHl0aG9u IHdpdGggYWNjZXNzIHRvIHNvbWUgdGh1bmtzLiAqLworJWNvbnN0YW50IHN2bl9jYW5jZWxfZnVu Y190IHN2bl9zd2lnX3B5X2NhbmNlbF9mdW5jOworJWNvbnN0YW50IHN2bl9jbGllbnRfZ2V0X2Nv bW1pdF9sb2cyX3Qgc3ZuX3N3aWdfcHlfZ2V0X2NvbW1pdF9sb2dfZnVuYzsKKyVjb25zdGFudCBz dm5fd2Nfbm90aWZ5X2Z1bmMyX3Qgc3ZuX3N3aWdfcHlfbm90aWZ5X2Z1bmM7CisKKyNlbmRpZgor CiAjaWZkZWYgU1dJR1JVQlkKICVpbmxpbmUgJXsKIHN0YXRpYyBWQUxVRQpkaWZmIC1OdXIgc3Vi dmVyc2lvbi0xLjMuMS9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvc3ZuX2NsaWVudC5pLm9yaWcg c3VidmVyc2lvbi0xLjMuMS5uZXcvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3N2bl9jbGllbnQu aS5vcmlnCi0tLSBzdWJ2ZXJzaW9uLTEuMy4xL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9zdm5f Y2xpZW50Lmkub3JpZwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgc3Vi dmVyc2lvbi0xLjMuMS5uZXcvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3N2bl9jbGllbnQuaS5v cmlnCTIwMDYtMDctMDUgMDE6MDQ6MDYuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNTU4IEBA CisvKgorICogc3ZuX2NsaWVudC5pIDogIFNXSUcgaW50ZXJmYWNlIGZpbGUgZm9yIHN2bl9jbGll bnQuaAorICoKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBDb2xs YWJOZXQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGlj ZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hv dWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gIFRoZSB0ZXJt cworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9zdWJ2ZXJzaW9uLnRpZ3Jpcy5vcmcv bGljZW5zZS0xLmh0bWwuCisgKiBJZiBuZXdlciB2ZXJzaW9ucyBvZiB0aGlzIGxpY2Vuc2UgYXJl IHBvc3RlZCB0aGVyZSwgeW91IG1heSB1c2UgYQorICogbmV3ZXIgdmVyc2lvbiBpbnN0ZWFkLCBh dCB5b3VyIG9wdGlvbi4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFy eSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQorICogaW5kaXZpZHVhbHMuICBGb3IgZXhhY3Qg Y29udHJpYnV0aW9uIGhpc3RvcnksIHNlZSB0aGUgcmV2aXNpb24KKyAqIGhpc3RvcnkgYW5kIGxv Z3MsIGF2YWlsYWJsZSBhdCBodHRwOi8vc3VidmVyc2lvbi50aWdyaXMub3JnLy4KKyAqID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09CisgKi8KKworI2lmIGRlZmluZWQoU1dJR1BFUkwpCislbW9kdWxlICJTVk46Ol9DbGll bnQiCisjZWxpZiBkZWZpbmVkKFNXSUdSVUJZKQorJW1vZHVsZSAic3ZuOjpleHQ6OmNsaWVudCIK KyNlbHNlCislbW9kdWxlIGNsaWVudAorI2VuZGlmCisKKyVpbmNsdWRlIHR5cGVtYXBzLmkKKyVp bmNsdWRlIGNvbnN0cmFpbnRzLmkKKworJWluY2x1ZGUgc3ZuX2dsb2JhbC5zd2cKKyVpbXBvcnQg Y29yZS5pCislaW1wb3J0IGFwci5zd2cKKyVpbXBvcnQgc3ZuX3R5cGVzLnN3ZworJWltcG9ydCBz dm5fc3RyaW5nLnN3ZworJWltcG9ydCBzdm5fZGVsdGEuaQorJWltcG9ydCBzdm5fd2MuaQorCisv KiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorICAgJWFwcGx5LWluZyBvZiB0eXBlbWFwcyBkZWZpbmVkIGVsc2V3 aGVyZQorKi8KKworJWFwcGx5IFNXSUdUWVBFICoqT1VUUEFSQU0geworICBzdm5fY2xpZW50X2Nv bW1pdF9pbmZvX3QgKiosCisgIHN2bl9hdXRoX3Byb3ZpZGVyX29iamVjdF90ICoqLAorICBzdm5f Y2xpZW50X2N0eF90ICoqCit9OworCislYXBwbHkgUG9pbnRlciBOT05OVUxMIHsgCisgIGNvbnN0 IHN2bl9vcHRfcmV2aXNpb25fdCAqcmV2aXNpb24sCisgIGNvbnN0IHN2bl9vcHRfcmV2aXNpb25f dCAqcGVnX3JldmlzaW9uCit9OworCislYXBwbHkgY29uc3QgYXByX2FycmF5X2hlYWRlcl90ICpT VFJJTkdMSVNUIHsKKyAgICBjb25zdCBhcHJfYXJyYXlfaGVhZGVyX3QgKnRhcmdldHMsCisgICAg Y29uc3QgYXByX2FycmF5X2hlYWRlcl90ICpkaWZmX29wdGlvbnMKK307CisKKyVhcHBseSBjb25z dCBjaGFyICpNQVlfQkVfTlVMTCB7CisgICAgY29uc3QgY2hhciAqbmF0aXZlX2VvbCwKKyAgICBj b25zdCBjaGFyICpjb21tZW50Cit9OworCisvKiBzdm5fY2xpZW50X3Byb3BnZXQoKSwgc3ZuX2Ns aWVudF9wcm9wbGlzdCgpLCBzdm5fY2xpZW50X3JldnByb3BfbGlzdCgpICovCislYXBwbHkgYXBy X2hhc2hfdCAqKlBST1BIQVNIIHsgYXByX2hhc2hfdCAqKnByb3BzIH07CisKKy8qIHN2bl9jbGll bnRfdXJsX2Zyb21fcGF0aCgpLCBzdm5fY2xpZW50X3V1aWRfZnJvbV91cmwoKQorICogc3ZuX2Ns aWVudF91dWlkX2Zyb21fcGF0aCAqLworJWFwcGx5IGNvbnN0IGNoYXIgKipPVVRQVVQgeworICAg IGNvbnN0IGNoYXIgKip1cmwsCisgICAgY29uc3QgY2hhciAqKnV1aWQKK307CisKKyNpZmRlZiBT V0lHUFlUSE9OCislYXBwbHkgc3ZuX3N0cmVhbV90ICpXUkFQUEVEX1NUUkVBTSB7IHN2bl9zdHJl YW1fdCAqIH07CisKKy8qIG1lbWJlcnMgb2Ygc3ZuX2NsaWVudF9jdHhfdCAqLworJWFwcGx5IHZv aWQgKlBZX0FTX1ZPSUQgeworICAgIHZvaWQgKm5vdGlmeV9iYXRvbiwKKyAgICB2b2lkICpsb2df bXNnX2JhdG9uLAorICAgIHZvaWQgKmNhbmNlbF9iYXRvbiwKKyAgICB2b2lkICpub3RpZnlfYmF0 b24yLAorICAgIHZvaWQgKmxvZ19tc2dfYmF0b24yLAorICAgIHZvaWQgKnByb2dyZXNzX2JhdG9u Cit9OworI2VuZGlmCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBzdm5fY2xpZW50X3Byb3BsaXN0 KCkKKyAgIHJldHVybnMgYXByX2FycmF5X2hlYWRlcl90ICogPHN2bl9jbGllbnRfcHJvcGxpc3Rf aXRlbV90ICo+CisqLworCisldHlwZW1hcChpbiwgbnVtaW5wdXRzPTApIGFwcl9hcnJheV9oZWFk ZXJfdCAqKnByb3BzIChhcHJfYXJyYXlfaGVhZGVyX3QgKnRlbXApIHsKKyAgICAkMSA9ICZ0ZW1w OworfQorCisvKiBzdm5fY2xpZW50X3Byb3BsaXN0X2l0ZW1fdCBpcyB1c2VkIGV4Y2x1c2l2ZWx5 IGZvciBzdm5fY2xpZW50X3Byb3BsaXN0KCkuCisgICBUaGUgcHl0aG9uIGJpbmRpbmdzIGNvbnZl cnQgaXQgdG8gYSBuYXRpdmUgcHl0aG9uIHR1cGxlLiAqLworI2lmZGVmIFNXSUdQWVRIT04KKyAg ICAlaWdub3JlIHN2bl9jbGllbnRfcHJvcGxpc3RfaXRlbV90OworI2VuZGlmCisldHlwZW1hcChw eXRob24sIGFyZ291dCwgZnJhZ21lbnQ9InRfb3V0cHV0X2hlbHBlciIpIGFwcl9hcnJheV9oZWFk ZXJfdCAqKnByb3BzCit7CisgICAgc3ZuX2NsaWVudF9wcm9wbGlzdF9pdGVtX3QgKipwcGl0ZW07 CisgICAgaW50IGk7CisgICAgaW50IG5lbHRzID0gKCokMSktPm5lbHRzOworICAgIFB5T2JqZWN0 ICpsaXN0ID0gUHlMaXN0X05ldyhuZWx0cyk7CisgICAgaWYgKGxpc3QgPT0gTlVMTCkKKyAgICAg ICAgU1dJR19mYWlsOworICAgIHBwaXRlbSA9IChzdm5fY2xpZW50X3Byb3BsaXN0X2l0ZW1fdCAq KikoKiQxKS0+ZWx0czsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbmVsdHM7ICsraSwgKytwcGl0ZW0p IHsKKyAgICAgICAgUHlPYmplY3QgKml0ZW0gPSBQeVR1cGxlX05ldygyKTsKKyAgICAgICAgUHlP YmplY3QgKm5hbWUgPSBQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZSgoKnBwaXRlbSktPm5vZGVf bmFtZS0+ZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoKnBwaXRlbSktPm5vZGVfbmFtZS0+bGVuKTsKKyAgICAgICAgUHlPYmplY3QgKmhh c2ggPSBzdm5fc3dpZ19weV9wcm9waGFzaF90b19kaWN0KCgqcHBpdGVtKS0+cHJvcF9oYXNoKTsK KworICAgICAgICBpZiAoaXRlbSA9PSBOVUxMIHx8IG5hbWUgPT0gTlVMTCB8fCBoYXNoID09IE5V TEwpIHsKKyAgICAgICAgICAgIFB5X1hERUNSRUYoaXRlbSk7CisgICAgICAgICAgICBQeV9YREVD UkVGKG5hbWUpOworICAgICAgICAgICAgUHlfWERFQ1JFRihoYXNoKTsKKyAgICAgICAgICAgIFB5 X0RFQ1JFRihsaXN0KTsKKyAgICAgICAgICAgIFNXSUdfZmFpbDsKKyAgICAgICAgfQorICAgICAg ICBQeVR1cGxlX1NFVF9JVEVNKGl0ZW0sIDAsIG5hbWUpOworICAgICAgICBQeVR1cGxlX1NFVF9J VEVNKGl0ZW0sIDEsIGhhc2gpOworCisgICAgICAgIFB5TGlzdF9TRVRfSVRFTShsaXN0LCBpLCBp dGVtKTsKKyAgICB9CisgICAgJHJlc3VsdCA9IHRfb3V0cHV0X2hlbHBlcigkcmVzdWx0LCBsaXN0 KTsKK30KKworJXR5cGVtYXAocnVieSwgYXJnb3V0KSBhcHJfYXJyYXlfaGVhZGVyX3QgKipwcm9w cworeworICAkcmVzdWx0ID0gc3ZuX3N3aWdfcmJfYXByX2FycmF5X3RvX2FycmF5X3Byb3BsaXN0 X2l0ZW0oKiQxKTsKK30KKworJXR5cGVtYXAocnVieSwgb3V0KSBhcHJfaGFzaF90ICpwcm9wX2hh c2gKK3sKKyAgJHJlc3VsdCA9IHN2bl9zd2lnX3JiX3Byb3BfaGFzaF90b19oYXNoKCQxKTsKK30K KworJXR5cGVtYXAocGVybDUsYXJnb3V0KSBhcHJfYXJyYXlfaGVhZGVyX3QgKipwcm9wcyB7Cisg ICAgJHJlc3VsdCA9IHN2bl9zd2lnX3BsX2NvbnZlcnRfYXJyYXkoKiQxLAorICAgICAgJGRlc2Ny aXB0b3Ioc3ZuX2NsaWVudF9wcm9wbGlzdF9pdGVtX3QgKikpOworICAgIGFyZ3ZpKys7Cit9CisK KyV0eXBlbWFwKHBlcmw1LG91dCkgYXByX2hhc2hfdCAqcHJvcF9oYXNoIHsKKyAgICAkcmVzdWx0 ID0gc3ZuX3N3aWdfcGxfcHJvcGhhc2hfdG9faGFzaCgkMSk7CisgICAgYXJndmkrKzsKK30KKwor LyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAgIENhbGxiYWNrOiBzdm5fY2xpZW50X2dldF9jb21taXRfbG9n X3QKKyAgIHN2bl9jbGllbnRfY3R4X3QKKyovCisKKyV0eXBlbWFwKHB5dGhvbixpbikgKHN2bl9j bGllbnRfZ2V0X2NvbW1pdF9sb2dfdCBsb2dfbXNnX2Z1bmMsIAorICAgICAgICAgICAgICAgICAg ICAgdm9pZCAqbG9nX21zZ19iYXRvbikgeworCisgICQxID0gc3ZuX3N3aWdfcHlfZ2V0X2NvbW1p dF9sb2dfZnVuYzsKKyAgJDIgPSAkaW5wdXQ7IC8qIG91ciBmdW5jdGlvbiBpcyB0aGUgYmF0b24u ICovCit9CisKKyV0eXBlbWFwKHJ1YnksIGluKSAoc3ZuX2NsaWVudF9nZXRfY29tbWl0X2xvZzJf dCBsb2dfbXNnX2Z1bmMyLAorICAgICAgICAgICAgICAgICAgICB2b2lkICpsb2dfbXNnX2JhdG9u MikKK3sKKyAgJDEgPSBzdm5fc3dpZ19yYl9nZXRfY29tbWl0X2xvZ19mdW5jMjsKKyAgJDIgPSAo dm9pZCAqKXN2bl9zd2lnX3JiX21ha2VfYmF0b24oJGlucHV0LCBfZ2xvYmFsX3N2bl9zd2lnX3Ji X3Bvb2wpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgQ2FsbGJhY2s6IHN2bl9jYW5jZWxf ZnVuY190CisgICBzdm5fY2xpZW50X2N0eF90CisqLworCisldHlwZW1hcChydWJ5LCBpbikgKHN2 bl9jYW5jZWxfZnVuY190IGNhbmNlbF9mdW5jLCB2b2lkICpjYW5jZWxfYmF0b24pCit7CisgICQx ID0gc3ZuX3N3aWdfcmJfY2FuY2VsX2Z1bmM7CisgICQyID0gKHZvaWQgKilzdm5fc3dpZ19yYl9t YWtlX2JhdG9uKCRpbnB1dCwgX2dsb2JhbF9zdm5fc3dpZ19yYl9wb29sKTsKK30KKworLyogLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAgIENhbGxiYWNrOiBzdm5fd2Nfbm90aWZ5X2Z1bmMyX3QKKyAgIHN2bl9j bGllbnRfY3R4X3QKKyovCisKKyV0eXBlbWFwKHJ1YnksIGluKSAoc3ZuX3djX25vdGlmeV9mdW5j Ml90IG5vdGlmeV9mdW5jMiwgdm9pZCAqbm90aWZ5X2JhdG9uMikKK3sKKyAgJDEgPSBzdm5fc3dp Z19yYl9ub3RpZnlfZnVuYzI7CisgICQyID0gKHZvaWQgKilzdm5fc3dpZ19yYl9tYWtlX2JhdG9u KCRpbnB1dCwgX2dsb2JhbF9zdm5fc3dpZ19yYl9wb29sKTsKK30KKworCisvKiAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICAgQ2FsbGJhY2s6IHN2bl9jbGllbnRfYmxhbWVfcmVjZWl2ZXJfdAorICAgc3ZuX2Ns aWVudF9ibGFtZSgpCisqLworCisldHlwZW1hcChweXRob24sIGluKSAoc3ZuX2NsaWVudF9ibGFt ZV9yZWNlaXZlcl90IHJlY2VpdmVyLCAKKyAgICAgICAgICAgICAgICAgICAgICB2b2lkICpyZWNl aXZlcl9iYXRvbikgeworICAgICQxID0gc3ZuX3N3aWdfcHlfY2xpZW50X2JsYW1lX3JlY2VpdmVy X2Z1bmM7CisgICAgJDIgPSAodm9pZCAqKSRpbnB1dDsKK30KKworJXR5cGVtYXAocGVybDUsIGlu KSAoc3ZuX2NsaWVudF9ibGFtZV9yZWNlaXZlcl90IHJlY2VpdmVyLAorICAgICAgICAgICAgICAg ICAgICAgdm9pZCAqcmVjZWl2ZXJfYmF0b24pIHsKKyAgJDEgPSBzdm5fc3dpZ19wbF9ibGFtZV9m dW5jOworICAkMiA9ICRpbnB1dDsgLyogb3VyIGZ1bmN0aW9uIGlzIHRoZSBiYXRvbi4gKi8KK30K KworJXR5cGVtYXAocnVieSwgaW4pIChzdm5fY2xpZW50X2JsYW1lX3JlY2VpdmVyX3QgcmVjZWl2 ZXIsCisgICAgICAgICAgICAgICAgICAgIHZvaWQgKnJlY2VpdmVyX2JhdG9uKQoreworICAkMSA9 IHN2bl9zd2lnX3JiX2NsaWVudF9ibGFtZV9yZWNlaXZlcl9mdW5jOworICAkMiA9ICh2b2lkICop c3ZuX3N3aWdfcmJfbWFrZV9iYXRvbigkaW5wdXQsIF9nbG9iYWxfc3ZuX3N3aWdfcmJfcG9vbCk7 Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBDYWxsYmFjazogc3ZuX2luZm9fcmVjZWl2ZXJf dAorICAgc3ZuX2NsaWVudF9pbmZvKCkKKyovCisKKyV0eXBlbWFwKHB5dGhvbiwgaW4pIChzdm5f aW5mb19yZWNlaXZlcl90IHJlY2VpdmVyLCAKKyAgICAgICAgICAgICAgICAgICAgICB2b2lkICpy ZWNlaXZlcl9iYXRvbikgeworICAgICQxID0gc3ZuX3N3aWdfcHlfaW5mb19yZWNlaXZlcl9mdW5j OworICAgICQyID0gKHZvaWQgKikkaW5wdXQ7Cit9CisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAg IFdlIHVzZSAnc3ZuX3djX3N0YXR1c190IConIGluIHNvbWUgY3VzdG9tIGNvZGUsIGJ1dCBpdCBp c24ndCBpbiB0aGUKKyAgIEFQSSBhbnl3aGVyZS4gVGh1cywgU1dJRyBkb2Vzbid0IGdlbmVyYXRl IGEgdHlwZW1hcCBlbnRyeSBmb3IgaXQuIGJ5CisgICBhZGRpbmcgYSBzaW1wbGUgZGVjbGFyYXRp b24gaGVyZSwgU1dJRyB3aWxsIGluc2VydCBhIG5hbWUgZm9yIGl0LgorICAgRklYTUU6IFRoaXMg bWF5IGJlIHVudHJ1ZS4gU2VlIHN2bl93Y19zdGF0dXMsIGV0Yy4KKyovCisldHlwZXMoc3ZuX3dj X3N0YXR1c190ICopOworCisvKiBXZSBhbHNvIG5lZWQgU1dJRyB0byB3cmFwIHN2bl9kaXJlbnRf dCBhbmQgc3ZuX2xvY2tfdCBmb3IgdXMuICBUaGV5CisgICBkb24ndCBhcHBlYXIgaW4gYW55IEFQ SSwgYnV0IHN2bl9jbGllbnRfbHMgcmV0dXJucyBhIGhhc2ggb2YgcG9pbnRlcnMKKyAgIHRvIGRp cmVudHMgYW5kIGxvY2tzLiAqLworJXR5cGVzKHN2bl9kaXJlbnRfdCAqKTsKKyV0eXBlcyhzdm5f bG9ja190ICopOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICB0aHVuayB0aGUgdmFyaW91cyBhdXRo ZW50aWNhdGlvbiBwcm9tcHQgZnVuY3Rpb25zLgorICBQRVJMIE5PVEU6IHN0b3JlIHRoZSBpbnB1 dGVkIFNWIGluIF9nbG9iYWxfY2FsbGJhY2sgZm9yIHVzZSBpbiB0aGUKKyAgICAgICAgICAgICBs YXRlciBhcmdvdXQgdHlwZW1hcAorKi8KKyV0eXBlbWFwKHBlcmw1LCBpbikgKHN2bl9hdXRoX3Np bXBsZV9wcm9tcHRfZnVuY190IHByb21wdF9mdW5jLAorICAgICAgICAgICAgICAgICAgICAgdm9p ZCAqcHJvbXB0X2JhdG9uKSB7CisgICAgJDEgPSBzdm5fc3dpZ19wbF90aHVua19zaW1wbGVfcHJv bXB0OworICAgIF9nbG9iYWxfY2FsbGJhY2sgPSAkaW5wdXQ7CisgICAgJDIgPSAodm9pZCAqKSBf Z2xvYmFsX2NhbGxiYWNrOworfQorJXR5cGVtYXAocHl0aG9uLCBpbikgKHN2bl9hdXRoX3NpbXBs ZV9wcm9tcHRfZnVuY190IHByb21wdF9mdW5jLAorICAgICAgICAgICAgICAgICAgICAgIHZvaWQg KnByb21wdF9iYXRvbikgeworICAgICQxID0gc3ZuX3N3aWdfcHlfYXV0aF9zaW1wbGVfcHJvbXB0 X2Z1bmM7CisgICAgJDIgPSAkaW5wdXQ7Cit9CisldHlwZW1hcChydWJ5LCBpbikgKHN2bl9hdXRo X3NpbXBsZV9wcm9tcHRfZnVuY190IHByb21wdF9mdW5jLAorICAgICAgICAgICAgICAgICAgICB2 b2lkICpwcm9tcHRfYmF0b24pIHsKKyAgICAkMSA9IHN2bl9zd2lnX3JiX2F1dGhfc2ltcGxlX3By b21wdF9mdW5jOworICAgICQyID0gKHZvaWQgKilzdm5fc3dpZ19yYl9tYWtlX2JhdG9uKCRpbnB1 dCwgX2dsb2JhbF9zdm5fc3dpZ19yYl9wb29sKTsKK30KKworJXR5cGVtYXAocGVybDUsIGluKSAo c3ZuX2F1dGhfdXNlcm5hbWVfcHJvbXB0X2Z1bmNfdCBwcm9tcHRfZnVuYywKKyAgICAgICAgICAg ICAgICAgICAgIHZvaWQgKnByb21wdF9iYXRvbikgeworICAgICQxID0gc3ZuX3N3aWdfcGxfdGh1 bmtfdXNlcm5hbWVfcHJvbXB0OworICAgIF9nbG9iYWxfY2FsbGJhY2sgPSAkaW5wdXQ7CisgICAg JDIgPSAodm9pZCAqKSBfZ2xvYmFsX2NhbGxiYWNrOworfQorJXR5cGVtYXAocHl0aG9uLCBpbikg KHN2bl9hdXRoX3VzZXJuYW1lX3Byb21wdF9mdW5jX3QgcHJvbXB0X2Z1bmMsCisgICAgICAgICAg ICAgICAgICAgICAgdm9pZCAqcHJvbXB0X2JhdG9uKSB7CisgICAgJDEgPSBzdm5fc3dpZ19weV9h dXRoX3VzZXJuYW1lX3Byb21wdF9mdW5jOworICAgICQyID0gJGlucHV0OworfQorJXR5cGVtYXAo cnVieSwgaW4pIChzdm5fYXV0aF91c2VybmFtZV9wcm9tcHRfZnVuY190IHByb21wdF9mdW5jLAor ICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnByb21wdF9iYXRvbikgeworICAgICQxID0gc3Zu X3N3aWdfcmJfYXV0aF91c2VybmFtZV9wcm9tcHRfZnVuYzsKKyAgICAkMiA9ICh2b2lkICopc3Zu X3N3aWdfcmJfbWFrZV9iYXRvbigkaW5wdXQsIF9nbG9iYWxfc3ZuX3N3aWdfcmJfcG9vbCk7Cit9 CisKKyV0eXBlbWFwKHBlcmw1LCBpbikgKHN2bl9hdXRoX3NzbF9zZXJ2ZXJfdHJ1c3RfcHJvbXB0 X2Z1bmNfdCBwcm9tcHRfZnVuYywKKyAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnByb21wdF9i YXRvbikgeworICAgICQxID0gc3ZuX3N3aWdfcGxfdGh1bmtfc3NsX3NlcnZlcl90cnVzdF9wcm9t cHQ7CisgICAgX2dsb2JhbF9jYWxsYmFjayA9ICRpbnB1dDsKKyAgICAkMiA9ICh2b2lkICopIF9n bG9iYWxfY2FsbGJhY2s7Cit9CisldHlwZW1hcChweXRob24sIGluKSAoc3ZuX2F1dGhfc3NsX3Nl cnZlcl90cnVzdF9wcm9tcHRfZnVuY190IHByb21wdF9mdW5jLAorICAgICAgICAgICAgICAgICAg ICAgdm9pZCAqcHJvbXB0X2JhdG9uKSB7CisgICAgJDEgPSBzdm5fc3dpZ19weV9hdXRoX3NzbF9z ZXJ2ZXJfdHJ1c3RfcHJvbXB0X2Z1bmM7CisgICAgJDIgPSAkaW5wdXQ7Cit9CisldHlwZW1hcChy dWJ5LCBpbikgKHN2bl9hdXRoX3NzbF9zZXJ2ZXJfdHJ1c3RfcHJvbXB0X2Z1bmNfdCBwcm9tcHRf ZnVuYywKKyAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnByb21wdF9iYXRvbikgeworICAgICQx ID0gc3ZuX3N3aWdfcmJfYXV0aF9zc2xfc2VydmVyX3RydXN0X3Byb21wdF9mdW5jOworICAgICQy ID0gKHZvaWQgKilzdm5fc3dpZ19yYl9tYWtlX2JhdG9uKCRpbnB1dCwgX2dsb2JhbF9zdm5fc3dp Z19yYl9wb29sKTsKK30KKworJXR5cGVtYXAocGVybDUsIGluKSAoc3ZuX2F1dGhfc3NsX2NsaWVu dF9jZXJ0X3Byb21wdF9mdW5jX3QgcHJvbXB0X2Z1bmMsCisgICAgICAgICAgICAgICAgICAgICAg dm9pZCAqcHJvbXB0X2JhdG9uKSB7CisgICAgJDEgPSBzdm5fc3dpZ19wbF90aHVua19zc2xfY2xp ZW50X2NlcnRfcHJvbXB0OworICAgIF9nbG9iYWxfY2FsbGJhY2sgPSAkaW5wdXQ7CisgICAgJDIg PSAodm9pZCAqKSBfZ2xvYmFsX2NhbGxiYWNrOworfQorJXR5cGVtYXAocHl0aG9uLCBpbikgKHN2 bl9hdXRoX3NzbF9jbGllbnRfY2VydF9wcm9tcHRfZnVuY190IHByb21wdF9mdW5jLAorICAgICAg ICAgICAgICAgICAgICAgIHZvaWQgKnByb21wdF9iYXRvbikgeworICAgICQxID0gc3ZuX3N3aWdf cHlfYXV0aF9zc2xfY2xpZW50X2NlcnRfcHJvbXB0X2Z1bmM7CisgICAgJDIgPSAkaW5wdXQ7Cit9 CisldHlwZW1hcChydWJ5LCBpbikgKHN2bl9hdXRoX3NzbF9jbGllbnRfY2VydF9wcm9tcHRfZnVu Y190IHByb21wdF9mdW5jLAorICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnByb21wdF9iYXRv bikgeworICAgICQxID0gc3ZuX3N3aWdfcmJfYXV0aF9zc2xfY2xpZW50X2NlcnRfcHJvbXB0X2Z1 bmM7CisgICAgJDIgPSAodm9pZCAqKXN2bl9zd2lnX3JiX21ha2VfYmF0b24oJGlucHV0LCBfZ2xv YmFsX3N2bl9zd2lnX3JiX3Bvb2wpOworfQorCisldHlwZW1hcChwZXJsNSwgaW4pIChzdm5fYXV0 aF9zc2xfY2xpZW50X2NlcnRfcHdfcHJvbXB0X2Z1bmNfdCBwcm9tcHRfZnVuYywKKyAgICAgICAg ICAgICAgICAgICAgICB2b2lkICpwcm9tcHRfYmF0b24pIHsKKyAgICAkMSA9IHN2bl9zd2lnX3Bs X3RodW5rX3NzbF9jbGllbnRfY2VydF9wd19wcm9tcHQ7CisgICAgX2dsb2JhbF9jYWxsYmFjayA9 ICRpbnB1dDsKKyAgICAkMiA9ICh2b2lkICopIF9nbG9iYWxfY2FsbGJhY2s7Cit9CisldHlwZW1h cChweXRob24sIGluKSAoc3ZuX2F1dGhfc3NsX2NsaWVudF9jZXJ0X3B3X3Byb21wdF9mdW5jX3Qg cHJvbXB0X2Z1bmMsCisgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcHJvbXB0X2JhdG9uKSB7 CisgICAgJDEgPSBzdm5fc3dpZ19weV9hdXRoX3NzbF9jbGllbnRfY2VydF9wd19wcm9tcHRfZnVu YzsKKyAgICAkMiA9ICRpbnB1dDsKK30KKyV0eXBlbWFwKHJ1YnksIGluKSAoc3ZuX2F1dGhfc3Ns X2NsaWVudF9jZXJ0X3B3X3Byb21wdF9mdW5jX3QgcHJvbXB0X2Z1bmMsCisgICAgICAgICAgICAg ICAgICAgICAgdm9pZCAqcHJvbXB0X2JhdG9uKSB7CisgICAgJDEgPSBzdm5fc3dpZ19yYl9hdXRo X3NzbF9jbGllbnRfY2VydF9wd19wcm9tcHRfZnVuYzsKKyAgICAkMiA9ICh2b2lkICopc3ZuX3N3 aWdfcmJfbWFrZV9iYXRvbigkaW5wdXQsIF9nbG9iYWxfc3ZuX3N3aWdfcmJfcG9vbCk7Cit9CisK Ky8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgKiBGb3IgYWxsIHRoZSB2YXJpb3VzIGZ1bmN0aW9ucyB0aGF0 IHNldCBhIGNhbGxiYWNrIGJhdG9uIGNyZWF0ZSBhIHJlZmVyZW5jZQorICogZm9yIHRoZSBiYXRv biAod2hpY2ggaW4gdGhpcyBjYXNlIGlzIGFuIFNWIHBvaW50aW5nIHRvIHRoZSBjYWxsYmFjaykK KyAqIGFuZCBtYWtlIHRoYXQgYSByZXR1cm4gZnJvbSB0aGUgZnVuY3Rpb24uICBUaGUgcGVybCBz aWRlIHNob3VsZAorICogdGhlbiBzdG9yZSB0aGUgcmV0dXJuIGluIHRoZSBvYmplY3QgdGhlIGJh dG9uIGlzIGF0dGFjaGVkIHRvLgorICogSWYgdGhlIGZ1bmN0aW9uIGFscmVhZHkgcmV0dXJucyBh IHZhbHVlIHRoZW4gdGhpcyB2YWx1ZSBpcyBmb2xsb3dzIHRoYXQKKyAqIGZ1bmN0aW9uLiAgSW4g dGhlIGNhc2Ugb2YgdGhlIHByb21wdCBmdW5jdGlvbnMgYXV0aF9vcGVuX2hlbHBlciBpbiBDb3Jl LnBtCisgKiBpcyB1c2VkIHRvIHNwbGl0IHVwIHRoZXNlIHZhbHVlcy4KKyovCisldHlwZW1hcChw ZXJsNSwgYXJnb3V0KSB2b2lkICpDQUxMQkFDS19CQVRPTiAoU1YgKiBfZ2xvYmFsX2NhbGxiYWNr KSB7CisgIC8qIGNhbGxiYWNrIGJhdG9uICovCisgICRyZXN1bHQgPSBzdl8ybW9ydGFsIChuZXdS Vl9pbmMgKF9nbG9iYWxfY2FsbGJhY2spKTsgYXJndmkrKzsgfQorCisldHlwZW1hcChwZXJsNSwg aW4pIHZvaWQgKkNBTExCQUNLX0JBVE9OIChTViAqIF9nbG9iYWxfY2FsbGJhY2spIHsKKyAgX2ds b2JhbF9jYWxsYmFjayA9ICRpbnB1dDsKKyAgJDEgPSAodm9pZCAqKSBfZ2xvYmFsX2NhbGxiYWNr OworfQorCisjaWZkZWYgU1dJR1BFUkwKKyVhcHBseSB2b2lkICpDQUxMQkFDS19CQVRPTiB7Cisg IHZvaWQgKnByb21wdF9iYXRvbiwKKyAgdm9pZCAqbm90aWZ5X2JhdG9uLAorICB2b2lkICpsb2df bXNnX2JhdG9uLAorICB2b2lkICpjYW5jZWxfYmF0b24KK30KKyNlbmRpZgorCisjaWZkZWYgU1dJ R1JVQlkKKyVhcHBseSB2b2lkICpDQUxMQkFDS19CQVRPTgoreworICB2b2lkICpub3RpZnlfYmF0 b24yLAorICB2b2lkICpsb2dfbXNnX2JhdG9uMiwKKyAgdm9pZCAqY2FuY2VsX2JhdG9uCit9Cisj ZW5kaWYKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCisgKiBDb252ZXJ0IHBlcmwgaGFzaGVzIGJhY2sg aW50byBhcHJfaGFzaF90ICogZm9yIHNldHRpbmcgdGhlIGNvbmZpZworICogbWVtYmVyIG9mIHRo ZSBzdm5fY2xpZW50X2N0eF90LiAgIFRoaXMgaXMgYW4gdWdseSBoYWNrLCBpdCB3aWxsCisgKiBh bHdheXMgYWxsb2NhdGUgdGhlIG5ldyBhcHJfaGFzaF90IG91dCBvZiB0aGUgZ2xvYmFsIGN1cnJl bnRfcG9vbAorICogSXQgd291bGQgYmUgYmV0dGVyIHRvIG1ha2UgYXByX2hhc2hfdCdzIGludG8g bWFnaWMgdmFyaWFibGVzIGluCisgKiBwZXJsIHRoYXQgYXJlIHRpZWQgdG8gdGhlIGFwcl9oYXNo X3QgaW50ZXJmYWNlLiAgVGhpcyB3b3VsZAorICogcmVtb3ZlIHRoZSBuZWVkIHRvIGNvbnZlcnQg dG8gYW5kIGZyb20gcGVybCBoYXNocyBhbGwgdGhlIHRpbWUuCisgKi8KKyV0eXBlbWFwKHBlcmw1 LCBpbikgYXByX2hhc2hfdCAqY29uZmlnIHsKKyAgJDEgPSBzdm5fc3dpZ19wbF9vYmpzX3RvX2hh c2hfYnlfbmFtZSAoJGlucHV0LCAic3ZuX2NvbmZpZ190ICoiLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzdm5fc3dpZ19wbF9tYWtlX3Bvb2wgKChTViAqKU5VTEwp KTsKK30KKworJXR5cGVtYXAocGVybDUsIG91dCkgYXByX2hhc2hfdCAqY29uZmlnIHsKKyAgJHJl c3VsdCA9IHN2bl9zd2lnX3BsX2NvbnZlcnRfaGFzaCgkMSwgCisgICAgJGRlc2NyaXB0b3Ioc3Zu X2NvbmZpZ190ICopKTsKKyAgYXJndmkrKzsKK30KKworI2lmZGVmIFNXSUdSVUJZCislcnVudGlt ZSAleworICAjaW5jbHVkZSA8YXByLmg+CisgICNpbmNsdWRlIDxhcHJfcG9vbHMuaD4KKworICBz dGF0aWMgYXByX3Bvb2xfdCAqCisgIF9zdm5fY2xpZW50X3Bvb2wodm9pZCkgCisgIHsKKyAgICBz dGF0aWMgYXByX3Bvb2xfdCAqX19zdm5fY2xpZW50X3Bvb2wgPSBOVUxMOworICAgIGlmICghX19z dm5fY2xpZW50X3Bvb2wpIHsKKyAgICAgIGFwcl9wb29sX2NyZWF0ZSgmX19zdm5fY2xpZW50X3Bv b2wsIE5VTEwpOworICAgIH0KKyAgICByZXR1cm4gX19zdm5fY2xpZW50X3Bvb2w7CisgIH0KKwor ICBzdGF0aWMgYXByX3Bvb2xfdCAqCisgIF9zdm5fY2xpZW50X2NvbmZpZ19wb29sKHZvaWQpIAor ICB7CisgICAgc3RhdGljIGFwcl9wb29sX3QgKl9fc3ZuX2NsaWVudF9jb25maWdfcG9vbCA9IE5V TEw7CisgICAgaWYgKCFfX3N2bl9jbGllbnRfY29uZmlnX3Bvb2wpIHsKKyAgICAgIGFwcl9wb29s X2NyZWF0ZSgmX19zdm5fY2xpZW50X2NvbmZpZ19wb29sLCBfc3ZuX2NsaWVudF9wb29sKCkpOwor ICAgIH0KKyAgICByZXR1cm4gX19zdm5fY2xpZW50X2NvbmZpZ19wb29sOworICB9CislfQorI2Vu ZGlmCisKKyV0eXBlbWFwKHJ1YnksIGFyZ291dCkgYXByX2hhc2hfdCAqY29uZmlnIHsKKyAgaWYg KCQxKQorICAgIGFwcl9wb29sX2NsZWFyKF9zdm5fY2xpZW50X2NvbmZpZ19wb29sKCkpOworfQor CisldHlwZW1hcChydWJ5LCBpbikgYXByX2hhc2hfdCAqY29uZmlnIHsKKyAgJDEgPSBzdm5fc3dp Z19yYl9oYXNoX3RvX2Fwcl9oYXNoX3N3aWdfdHlwZSgkaW5wdXQsICJzdm5fY29uZmlnX3QgKiIs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3N2bl9jbGll bnRfY29uZmlnX3Bvb2woKSk7Cit9CisKKyV0eXBlbWFwKHJ1YnksIG91dCkgYXByX2hhc2hfdCAq Y29uZmlnIHsKKyAgJHJlc3VsdCA9IHN2bl9zd2lnX3JiX2Fwcl9oYXNoX3RvX2hhc2hfc3dpZ190 eXBlKCQxLCAic3ZuX2NvbmZpZ190ICoiKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIG92 ZXJyaWRlIGRlZmF1bHQgdHlwZW1hcCBmb3Igc3ZuX2NsaWVudF9jb21taXRfaW5mb190IGZvciBw ZXJsLiAgU29tZSBjYWxscworICogbmV2ZXIgYWxsb2NhdGUgYW5kIGZpbGwgdGhlIGNvbW1pdF9p bmZvIHN0cnVjdC4gIFRoaXMgbGV0cyB1cyByZXR1cm4KKyAqIHVuZGVmIGZvciB0aGVtLiAgT3Ro ZXJ3aXNlIHRoZSBvYmplY3Qgd2UgcGFzcyBiYWNrIGNhbiBjYXVzZSBjcmFzaGVzICovCisldHlw ZW1hcChwZXJsNSwgaW4sIG51bWlucHV0cz0wKSBzdm5fY2xpZW50X2NvbW1pdF9pbmZvX3QgKiog CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIHN2bl9jbGllbnRfY29tbWl0X2lu Zm9fdCAqIHRlbXAgKSB7CisgICAgdGVtcCA9IE5VTEw7CisgICAgJDEgPSAmdGVtcDsKK30KKwor JXR5cGVtYXAocGVybDUsIGFyZ291dCkgc3ZuX2NsaWVudF9jb21taXRfaW5mb190ICoqIHsKKyAg ICBpZiAoJDEgPT0gTlVMTCkgeworICAgICAgICAkcmVzdWx0ID0gJlBMX3N2X3VuZGVmOworICAg ICAgICBhcmd2aSsrOworICAgIH0gIGVsc2UgeworICAgICAgICAkcmVzdWx0ID0gc3ZfbmV3bW9y dGFsKCk7CisgICAgICAgIFNXSUdfTWFrZVB0cigkcmVzdWx0LCAodm9pZCAqKSokMSwKKyAgICAg ICAgICAgICAgICAgICAgICQqMV9kZXNjcmlwdG9yLCAwKTsKKyAgICAgICAgYXJndmkrKzsKKyAg ICB9Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiB3Y3Byb3BfY2hhbmdlcyBtZW1iZXIgb2Yg c3ZuX2NsaWVudF9jb21taXRfaW5mbyBuZWVkcyB0byBiZQorICogY29udmVydGVkIGJhY2sgYW5k IGZvcnRoIGZyb20gYW4gYXJyYXkgKi8KKworJXR5cGVtYXAocGVybDUsIG91dCkgYXByX2FycmF5 X2hlYWRlcl90ICp3Y3Byb3BfY2hhbmdlcyB7CisgICAgJHJlc3VsdCA9IHN2bl9zd2lnX3BsX2Nv bnZlcnRfYXJyYXkoJDEsCisgICAgICAkZGVzY3JpcHRvcihzdm5fcHJvcF90ICopKTsKKyAgICBh cmd2aSsrOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogd3JhcCBzdm5fY2xpZW50X2NyZWF0 ZV9jb250ZXh0ICovCisKKyV0eXBlbWFwKHBlcmw1LGluLG51bWlucHV0cz0wKSBzdm5fY2xpZW50 X2N0eF90ICoqIChzdm5fY2xpZW50X2N0eF90ICp0ZW1wKSB7CisgICAgJDEgPSAmdGVtcDsKK30K KworJXR5cGVtYXAocGVybDUsYXJnb3V0KSBzdm5fY2xpZW50X2N0eF90ICoqIHsKKyAgKCokMSkt Pm5vdGlmeV9mdW5jID0gc3ZuX3N3aWdfcGxfbm90aWZ5X2Z1bmM7CisgICgqJDEpLT5ub3RpZnlf YmF0b24gPSAodm9pZCAqKSAmUExfc3ZfdW5kZWY7CisgICgqJDEpLT5sb2dfbXNnX2Z1bmMgPSBz dm5fc3dpZ19wbF9nZXRfY29tbWl0X2xvZ19mdW5jOworICAoKiQxKS0+bG9nX21zZ19iYXRvbiA9 ICh2b2lkICopICZQTF9zdl91bmRlZjsKKyAgKCokMSktPmNhbmNlbF9mdW5jID0gc3ZuX3N3aWdf cGxfY2FuY2VsX2Z1bmM7CisgICgqJDEpLT5jYW5jZWxfYmF0b24gPSAodm9pZCAqKSAmUExfc3Zf dW5kZWY7CisgICRyZXN1bHQgPSBzdl9uZXdtb3J0YWwoKTsKKyAgU1dJR19NYWtlUHRyKCRyZXN1 bHQsICh2b2lkICopKiQxLAorICAgICAgICAgICAgICAgJCoxX2Rlc2NyaXB0b3IsIDApOworICBh cmd2aSsrOworfSAgCisKKy8qIHN2bl9jbGllbnRfdXBkYXRlMiAqLworJXR5cGVtYXAocnVieSwg aW4sIG51bWlucHV0cz0wKSBhcHJfYXJyYXlfaGVhZGVyX3QgKipyZXN1bHRfcmV2cyAoYXByX2Fy cmF5X2hlYWRlcl90ICp0ZW1wKQoreworICAkMSA9ICZ0ZW1wOworfQorCisldHlwZW1hcChydWJ5 LCBhcmdvdXQsIGZyYWdtZW50PSJvdXRwdXRfaGVscGVyIikgYXByX2FycmF5X2hlYWRlcl90ICoq cmVzdWx0X3JldnMKK3sKKyAgJHJlc3VsdCA9IG91dHB1dF9oZWxwZXIoJHJlc3VsdCwgc3ZuX3N3 aWdfcmJfYXByX2FycmF5X3RvX2FycmF5X3N2bl9yZXYoKiQxKSk7Cit9CisKKy8qIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tICovCisKKyV7CisjaWZkZWYgU1dJR1BZVEhPTgorI2luY2x1ZGUgInN3aWd1dGlsX3B5 LmgiCisjZW5kaWYKKworI2lmZGVmIFNXSUdQRVJMCisjaW5jbHVkZSAic3dpZ3V0aWxfcGwuaCIK KyNlbmRpZgorCisjaWZkZWYgU1dJR1JVQlkKKyNpbmNsdWRlIDxhcHUuaD4KKyNpbmNsdWRlIDxh cHJfeGxhdGUuaD4KKyNpbmNsdWRlICJzd2lndXRpbF9yYi5oIgorI2VuZGlmCislfQorCislaW5j bHVkZSBzdm5fdGltZV9oLnN3ZworJWluY2x1ZGUgc3ZuX2NsaWVudF9oLnN3ZworCisjaWZkZWYg U1dJR1BZVEhPTgorCisvKiBwcm92aWRlIFB5dGhvbiB3aXRoIGFjY2VzcyB0byBzb21lIHRodW5r cy4gKi8KKyVjb25zdGFudCBzdm5fY2FuY2VsX2Z1bmNfdCBzdm5fc3dpZ19weV9jYW5jZWxfZnVu YzsKKyVjb25zdGFudCBzdm5fY2xpZW50X2dldF9jb21taXRfbG9nMl90IHN2bl9zd2lnX3B5X2dl dF9jb21taXRfbG9nX2Z1bmM7CislY29uc3RhbnQgc3ZuX3djX25vdGlmeV9mdW5jMl90IHN2bl9z d2lnX3B5X25vdGlmeV9mdW5jOworCisjZW5kaWYKKworI2lmZGVmIFNXSUdSVUJZCislaW5saW5l ICV7CitzdGF0aWMgVkFMVUUKK3N2bl9jbGllbnRfc2V0X2xvZ19tc2dfZnVuYzIoc3ZuX2NsaWVu dF9jdHhfdCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdm5fY2xpZW50X2dl dF9jb21taXRfbG9nMl90IGxvZ19tc2dfZnVuYzIsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHZvaWQgKmxvZ19tc2dfYmF0b24yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBh cHJfcG9vbF90ICpwb29sKQoreworICBjdHgtPmxvZ19tc2dfZnVuYzIgPSBsb2dfbXNnX2Z1bmMy OworICBjdHgtPmxvZ19tc2dfYmF0b24yID0gbG9nX21zZ19iYXRvbjI7CisgIHJldHVybiAoVkFM VUUpbG9nX21zZ19iYXRvbjI7Cit9CisgCitzdGF0aWMgVkFMVUUKK3N2bl9jbGllbnRfc2V0X25v dGlmeV9mdW5jMihzdm5fY2xpZW50X2N0eF90ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3ZuX3djX25vdGlmeV9mdW5jMl90IG5vdGlmeV9mdW5jMiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICB2b2lkICpub3RpZnlfYmF0b24yLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGFwcl9wb29sX3QgKnBvb2wpCit7CisgIGN0eC0+bm90aWZ5X2Z1bmMyID0gbm90aWZ5 X2Z1bmMyOworICBjdHgtPm5vdGlmeV9iYXRvbjIgPSBub3RpZnlfYmF0b24yOworICByZXR1cm4g KFZBTFVFKW5vdGlmeV9iYXRvbjI7Cit9CisKK3N0YXRpYyBWQUxVRQorc3ZuX2NsaWVudF9zZXRf Y2FuY2VsX2Z1bmMoc3ZuX2NsaWVudF9jdHhfdCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3ZuX2NhbmNlbF9mdW5jX3QgY2FuY2VsX2Z1bmMsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICB2b2lkICpjYW5jZWxfYmF0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBh cHJfcG9vbF90ICpwb29sKQoreworICBjdHgtPmNhbmNlbF9mdW5jID0gY2FuY2VsX2Z1bmM7Cisg IGN0eC0+Y2FuY2VsX2JhdG9uID0gY2FuY2VsX2JhdG9uOworICByZXR1cm4gKFZBTFVFKWNhbmNl bF9iYXRvbjsKK30KKyV9CisjZW5kaWYKZGlmZiAtTnVyIHN1YnZlcnNpb24tMS4zLjEvc3VidmVy c2lvbi9iaW5kaW5ncy9zd2lnL3N2bl9kZWx0YS5pIHN1YnZlcnNpb24tMS4zLjEubmV3L3N1YnZl cnNpb24vYmluZGluZ3Mvc3dpZy9zdm5fZGVsdGEuaQotLS0gc3VidmVyc2lvbi0xLjMuMS9zdWJ2 ZXJzaW9uL2JpbmRpbmdzL3N3aWcvc3ZuX2RlbHRhLmkJMjAwNS0wOS0yOSAwMDo1Njo1Mi4wMDAw MDAwMDAgKzAxMDAKKysrIHN1YnZlcnNpb24tMS4zLjEubmV3L3N1YnZlcnNpb24vYmluZGluZ3Mv c3dpZy9zdm5fZGVsdGEuaQkyMDA2LTA3LTA1IDAxOjA0OjA2LjAwMDAwMDAwMCArMDEwMApAQCAt NDcsNyArNDcsOCBAQAogICAgIGNvbnN0IGNoYXIgKmVycm9yX2luZm8sCiAgICAgY29uc3QgY2hh ciAqY29weWZyb21fcGF0aCwKICAgICBjb25zdCBjaGFyICpjb3B5X3BhdGgsCi0gICAgY29uc3Qg Y2hhciAqYmFzZV9jaGVja3N1bQorICAgIGNvbnN0IGNoYXIgKmJhc2VfY2hlY2tzdW0sCisgICAg Y29uc3QgY2hhciAqdGV4dF9jaGVja3N1bQogfTsKIAogI2lmZGVmIFNXSUdQWVRIT04KQEAgLTE0 NSw2ICsxNDYsMTcgQEAKIAogJWluY2x1ZGUgc3ZuX2RlbHRhX2guc3dnCiAKKyNpZmRlZiBTV0lH UFlUSE9OCislaW5saW5lICV7Citzdm5fZXJyb3JfdCAqc3ZuX2RlbHRhX2ludm9rZV90eGRlbHRh X3dpbmRvd19oYW5kbGVyICgKKyAgc3ZuX3R4ZGVsdGFfd2luZG93X2hhbmRsZXJfdCBoYW5kbGVy LAorICBzdm5fdHhkZWx0YV93aW5kb3dfdCAqd2luZG93LCB2b2lkICpiYXRvbikgeworICByZXR1 cm4gaGFuZGxlcih3aW5kb3csIGJhdG9uKTsKK30KKyV9CisjZW5kaWYKKworCiAvKiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQogICAgaGFuZGxlIHN2bl90eGRlbHRhX3RvX3N2bmRpZmYoKS4KICovCmRpZmYgLU51 ciBzdWJ2ZXJzaW9uLTEuMy4xL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9zdm5fcmEuaSBzdWJ2 ZXJzaW9uLTEuMy4xLm5ldy9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvc3ZuX3JhLmkKLS0tIHN1 YnZlcnNpb24tMS4zLjEvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3N2bl9yYS5pCTIwMDUtMTAt MDQgMTY6NDM6NDAuMDAwMDAwMDAwICswMTAwCisrKyBzdWJ2ZXJzaW9uLTEuMy4xLm5ldy9zdWJ2 ZXJzaW9uL2JpbmRpbmdzL3N3aWcvc3ZuX3JhLmkJMjAwNi0wNy0wNSAwMTowNjoxMy4wMDAwMDAw MDAgKzAxMDAKQEAgLTI1LDYgKzI1LDcgQEAKICNlbmRpZgogCiAlaW5jbHVkZSB0eXBlbWFwcy5p CislaW5jbHVkZSBjb25zdHJhaW50cy5pCiAKICVpbmNsdWRlIHN2bl9nbG9iYWwuc3dnCiAlaW1w b3J0IGFwci5zd2cKQEAgLTQ4LDEzICs0OSwxNiBAQAogICAgIGNvbnN0IHN2bl9yYV9yZXBvcnRl cjJfdCAqKnJlcG9ydGVyLAogICAgIHZvaWQgKipyZXBvcnRfYmF0b24sCiAgICAgc3ZuX2RpcmVu dF90ICoqZGlyZW50LAotICAgIHN2bl9sb2NrX3QgKipsb2NrCisgICAgc3ZuX2xvY2tfdCAqKmxv Y2ssCisgICAgY29uc3Qgc3ZuX2RlbHRhX2VkaXRvcl90ICoqCiB9OwogCiAlYXBwbHkgYXByX2hh c2hfdCAqKlBST1BIQVNIIHsgYXByX2hhc2hfdCAqKnByb3BzIH07CislYXBwbHkgYXByX2hhc2hf dCAqKkRJUkVOVEhBU0ggeyBhcHJfaGFzaF90ICoqZGlyZW50cyB9OwogCiAlYXBwbHkgY29uc3Qg Y2hhciAqTUFZX0JFX05VTEwgewotICAgIGNvbnN0IGNoYXIgKmNvbW1lbnQKKyAgICBjb25zdCBj aGFyICpjb21tZW50LAorICAgIGNvbnN0IGNoYXIgKmxvY2tfdG9rZW4KIH07CiAKICVhcHBseSBh cHJfaGFzaF90ICpTVFJJTkdfVE9fU1RSSU5HIHsKQEAgLTExMiw2ICsxMTYsMTEgQEAKICAgc3Zu X3N3aWdfcmJfc2V0dXBfcmFfY2FsbGJhY2tzKCYkMSwgJiQyLCAkaW5wdXQsIF9nbG9iYWxfcG9v bCk7CiB9CiAKKyV0eXBlbWFwKHB5dGhvbiwgaW4pIChjb25zdCBzdm5fcmFfY2FsbGJhY2tzMl90 ICpjYWxsYmFja3MsIAorICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmNhbGxiYWNrX2JhdG9u KSB7CisgIHN2bl9zd2lnX3B5X3NldHVwX3JhX2NhbGxiYWNrcygmJDEsICYkMiwgJGlucHV0LCBf Z2xvYmFsX3Bvb2wpOworfQorCiAldHlwZW1hcChwZXJsNSwgaW4pIGFwcl9oYXNoX3QgKmNvbmZp ZyB7CiAgICAgJDEgPSBzdm5fc3dpZ19wbF9vYmpzX3RvX2hhc2hfYnlfbmFtZSAoJGlucHV0LCAi c3ZuX2NvbmZpZ190ICoiLAogCQkJCQkgICBfZ2xvYmFsX3Bvb2wpOwpAQCAtMTM0LDYgKzE0Mywy MiBAQAogICAkMSA9IHN2bl9zd2lnX3JiX2hhc2hfdG9fYXByX2hhc2hfcmV2bnVtKCRpbnB1dCwg X2dsb2JhbF9wb29sKTsKIH0KIAorI2lmZGVmIFNXSUdQWVRIT04KKyV0eXBlbWFwKGluKSAoc3Zu X3JhX2ZpbGVfcmV2X2hhbmRsZXJfdCBoYW5kbGVyLCB2b2lkICpoYW5kbGVyX2JhdG9uKQorewor ICAgJDEgPSBzdm5fc3dpZ19weV9yYV9maWxlX3Jldl9oYW5kbGVyX2Z1bmM7CisgICAkMiA9ICh2 b2lkICopJGlucHV0OworfQorI2VuZGlmCisKKyNpZmRlZiBTV0lHUFlUSE9OCisldHlwZW1hcChp bikgKGNvbnN0IHN2bl9yYV9yZXBvcnRlcjJfdCAqcmVwb3J0ZXIsIHZvaWQgKnJlcG9ydF9iYXRv bikKK3sKKyAgJDEgPSAoc3ZuX3JhX3JlcG9ydGVyMl90ICopJnN3aWdfcHlfcmFfcmVwb3J0ZXIy OworICAkMiA9ICh2b2lkICopJGlucHV0OworfQorI2VuZGlmCisKIC8qIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t ICovCiAKICV7CmRpZmYgLU51ciBzdWJ2ZXJzaW9uLTEuMy4xL3N1YnZlcnNpb24vYmluZGluZ3Mv c3dpZy9zdm5fcmEuaS5vcmlnIHN1YnZlcnNpb24tMS4zLjEubmV3L3N1YnZlcnNpb24vYmluZGlu Z3Mvc3dpZy9zdm5fcmEuaS5vcmlnCi0tLSBzdWJ2ZXJzaW9uLTEuMy4xL3N1YnZlcnNpb24vYmlu ZGluZ3Mvc3dpZy9zdm5fcmEuaS5vcmlnCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICsw MTAwCisrKyBzdWJ2ZXJzaW9uLTEuMy4xLm5ldy9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvc3Zu X3JhLmkub3JpZwkyMDA2LTA3LTA1IDAxOjA0OjA2LjAwMDAwMDAwMCArMDEwMApAQCAtMCwwICsx LDE4NCBAQAorLyoKKyAqIHN2bl9yYS5pIDogIFNXSUcgaW50ZXJmYWNlIGZpbGUgZm9yIHN2bl9y YS5oCisgKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoYykgMjAwMC0yMDAzIENvbGxh Yk5ldC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNl bnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91 bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiAgVGhlIHRlcm1z CisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL3N1YnZlcnNpb24udGlncmlzLm9yZy9s aWNlbnNlLTEuaHRtbC4KKyAqIElmIG5ld2VyIHZlcnNpb25zIG9mIHRoaXMgbGljZW5zZSBhcmUg cG9zdGVkIHRoZXJlLCB5b3UgbWF5IHVzZSBhCisgKiBuZXdlciB2ZXJzaW9uIGluc3RlYWQsIGF0 IHlvdXIgb3B0aW9uLgorICoKKyAqIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5 IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55CisgKiBpbmRpdmlkdWFscy4gIEZvciBleGFjdCBj b250cmlidXRpb24gaGlzdG9yeSwgc2VlIHRoZSByZXZpc2lvbgorICogaGlzdG9yeSBhbmQgbG9n cywgYXZhaWxhYmxlIGF0IGh0dHA6Ly9zdWJ2ZXJzaW9uLnRpZ3Jpcy5vcmcvLgorICogPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KKyAqLworCisjaWYgZGVmaW5lZChTV0lHUEVSTCkKKyVtb2R1bGUgIlNWTjo6X1JhIgor I2VsaWYgZGVmaW5lZChTV0lHUlVCWSkKKyVtb2R1bGUgInN2bjo6ZXh0OjpyYSIKKyNlbHNlCisl bW9kdWxlIHJhCisjZW5kaWYKKworJWluY2x1ZGUgdHlwZW1hcHMuaQorJWluY2x1ZGUgY29uc3Ry YWludHMuaQorCislaW5jbHVkZSBzdm5fZ2xvYmFsLnN3ZworJWltcG9ydCBhcHIuc3dnCislaW1w b3J0IGNvcmUuaQorJWltcG9ydCBzdm5fdHlwZXMuc3dnCislaW1wb3J0IHN2bl9zdHJpbmcuc3dn CislaW1wb3J0IHN2bl9kZWx0YS5pCisKKy8qIGJhZCBwb29sIGNvbnZlbnRpb24sIGFsc28gdGhl c2Ugc2hvdWxkIG5vdCBiZSBwdWJsaWMgaW50ZXJmYWNlIGF0IGFsbAorICAgYXMgY29tbWVudGVk IGJ5IHN1c3NtYW4uICovCislaWdub3JlIHN2bl9yYV9zdm5faW5pdDsKKyVpZ25vcmUgc3ZuX3Jh X2xvY2FsX2luaXQ7CislaWdub3JlIHN2bl9yYV9kYXZfaW5pdDsKKworLyogLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAgICVhcHBseS1pbmcgb2YgdHlwZW1hcHMgZGVmaW5lZCBlbHNld2hlcmUKKyovCislYXBw bHkgU1dJR1RZUEUgKipPVVRQQVJBTSB7CisgICAgc3ZuX3JhX3BsdWdpbl90ICoqLAorICAgIHN2 bl9yYV9zZXNzaW9uX3QgKiosCisgICAgY29uc3Qgc3ZuX3JhX3JlcG9ydGVyMl90ICoqcmVwb3J0 ZXIsCisgICAgdm9pZCAqKnJlcG9ydF9iYXRvbiwKKyAgICBzdm5fZGlyZW50X3QgKipkaXJlbnQs CisgICAgc3ZuX2xvY2tfdCAqKmxvY2ssCisgICAgY29uc3Qgc3ZuX2RlbHRhX2VkaXRvcl90ICoq Cit9OworCislYXBwbHkgYXByX2hhc2hfdCAqKlBST1BIQVNIIHsgYXByX2hhc2hfdCAqKnByb3Bz IH07CislYXBwbHkgYXByX2hhc2hfdCAqKkRJUkVOVEhBU0ggeyBhcHJfaGFzaF90ICoqZGlyZW50 cyB9OworCislYXBwbHkgY29uc3QgY2hhciAqTUFZX0JFX05VTEwgeworICAgIGNvbnN0IGNoYXIg KmNvbW1lbnQsCisgICAgY29uc3QgY2hhciAqbG9ja190b2tlbgorfTsKKworJWFwcGx5IGFwcl9o YXNoX3QgKlNUUklOR19UT19TVFJJTkcgeworICBhcHJfaGFzaF90ICpsb2NrX3Rva2VucywKKyAg YXByX2hhc2hfdCAqcGF0aF90b2tlbnMKK307CisKKyNpZmRlZiBTV0lHUFlUSE9OCislYXBwbHkg c3ZuX3N0cmVhbV90ICpXUkFQUEVEX1NUUkVBTSB7IHN2bl9zdHJlYW1fdCAqIH07CisjZW5kaWYK KworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIGhhbmRsZSBzdm5fcmFfZ2V0X2xvY2F0aW9ucygpCisq LworJXR5cGVtYXAocHl0aG9uLGluKSBhcHJfYXJyYXlfaGVhZGVyX3QgKmxvY2F0aW9uX3Jldmlz aW9ucyB7CisgICAgJDEgPSAoYXByX2FycmF5X2hlYWRlcl90ICopIHN2bl9zd2lnX3B5X3Jldm51 bXNfdG9fYXJyYXkoJGlucHV0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfZ2xvYmFsX3Bvb2wpOworICAgIGlmICgkMSA9PSBO VUxMKQorICAgICAgICBTV0lHX2ZhaWw7Cit9CisldHlwZW1hcChweXRob24saW4sbnVtaW5wdXRz PTApIGFwcl9oYXNoX3QgKipsb2NhdGlvbnMgPSBhcHJfaGFzaF90ICoqT1VUUFVUOworJXR5cGVt YXAocHl0aG9uLGFyZ291dCxmcmFnbWVudD0idF9vdXRwdXRfaGVscGVyIikgYXByX2hhc2hfdCAq KmxvY2F0aW9ucyB7CisgICAgJHJlc3VsdCA9IHRfb3V0cHV0X2hlbHBlcigkcmVzdWx0LCBzdm5f c3dpZ19weV9sb2NhdGlvbmhhc2hfdG9fZGljdCgqJDEpKTsKK30KKworLyogLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAgIHRodW5rIHJhX2NhbGxiYWNrCisqLworJWFwcGx5IGNvbnN0IGNoYXIgKipPVVRQVVQg eworICAgIGNvbnN0IGNoYXIgKip1cmwsCisgICAgY29uc3QgY2hhciAqKnV1aWQKK307CisKKyVh cHBseSBjb25zdCBhcHJfYXJyYXlfaGVhZGVyX3QgKlNUUklOR0xJU1QgeworICAgIGNvbnN0IGFw cl9hcnJheV9oZWFkZXJfdCAqcGF0aHMKK307CisKKyV0eXBlbWFwKHBlcmw1LCBpbikgKGNvbnN0 IHN2bl9kZWx0YV9lZGl0b3JfdCAqdXBkYXRlX2VkaXRvciwKKwkJICAgICB2b2lkICp1cGRhdGVf YmF0b24pIHsKKyAgICBzdm5fZGVsdGFfbWFrZV9lZGl0b3IoJiQxLCAmJDIsICRpbnB1dCwgX2ds b2JhbF9wb29sKTsKK30KKyV0eXBlbWFwKHBlcmw1LCBpbikgKGNvbnN0IHN2bl9kZWx0YV9lZGl0 b3JfdCAqZGlmZl9lZGl0b3IsCisJCSAgICAgdm9pZCAqZGlmZl9iYXRvbikgeworICAgIHN2bl9k ZWx0YV9tYWtlX2VkaXRvcigmJDEsICYkMiwgJGlucHV0LCBfZ2xvYmFsX3Bvb2wpOworfQorCisl dHlwZW1hcChwZXJsNSwgaW4pIChjb25zdCBzdm5fcmFfY2FsbGJhY2tzX3QgKmNhbGxiYWNrcywK KwkJICAgICB2b2lkICpjYWxsYmFja19iYXRvbikgeworICAgIHN2bl9yYV9tYWtlX2NhbGxiYWNr cygmJDEsICYkMiwgJGlucHV0LCBfZ2xvYmFsX3Bvb2wpOworfQorCisldHlwZW1hcChydWJ5LCBp bikgKGNvbnN0IHN2bl9yYV9jYWxsYmFja3MyX3QgKmNhbGxiYWNrcywKKyAgICAgICAgICAgICAg ICAgICAgdm9pZCAqY2FsbGJhY2tfYmF0b24pCit7CisgIHN2bl9zd2lnX3JiX3NldHVwX3JhX2Nh bGxiYWNrcygmJDEsICYkMiwgJGlucHV0LCBfZ2xvYmFsX3Bvb2wpOworfQorCisldHlwZW1hcChw eXRob24sIGluKSAoY29uc3Qgc3ZuX3JhX2NhbGxiYWNrczJfdCAqY2FsbGJhY2tzLCAKKyAgICAg ICAgICAgICAgICAgICAgICB2b2lkICpjYWxsYmFja19iYXRvbikgeworICBzdm5fc3dpZ19weV9z ZXR1cF9yYV9jYWxsYmFja3MoJiQxLCAmJDIsICRpbnB1dCwgX2dsb2JhbF9wb29sKTsKK30KKwor JXR5cGVtYXAocHl0aG9uLCBpbikgKGNvbnN0IHN2bl9yYV9jYWxsYmFja3MyX3QgKmNhbGxiYWNr cywgCisgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY2FsbGJhY2tfYmF0b24pIHsKKyAgc3Zu X3N3aWdfcHlfc2V0dXBfcmFfY2FsbGJhY2tzKCYkMSwgJiQyLCAkaW5wdXQsIF9nbG9iYWxfcG9v bCk7Cit9CisKKyV0eXBlbWFwKHBlcmw1LCBpbikgYXByX2hhc2hfdCAqY29uZmlnIHsKKyAgICAk MSA9IHN2bl9zd2lnX3BsX29ianNfdG9faGFzaF9ieV9uYW1lICgkaW5wdXQsICJzdm5fY29uZmln X3QgKiIsCisJCQkJCSAgIF9nbG9iYWxfcG9vbCk7Cit9CisKKyV0eXBlbWFwKHJ1YnksIGluKSAo c3ZuX3JhX2xvY2tfY2FsbGJhY2tfdCBsb2NrX2Z1bmMsIHZvaWQgKmxvY2tfYmF0b24pCit7Cisg ICQxID0gc3ZuX3N3aWdfcmJfcmFfbG9ja19jYWxsYmFjazsKKyAgJDIgPSAodm9pZCAqKXN2bl9z d2lnX3JiX21ha2VfYmF0b24oJGlucHV0LCBfZ2xvYmFsX3N2bl9zd2lnX3JiX3Bvb2wpOworfQor CisldHlwZW1hcChydWJ5LCBpbikgKHN2bl9yYV9maWxlX3Jldl9oYW5kbGVyX3QgaGFuZGxlciwg dm9pZCAqaGFuZGxlcl9iYXRvbikKK3sKKyAgJDEgPSBzdm5fc3dpZ19yYl9yYV9maWxlX3Jldl9o YW5kbGVyOworICAkMiA9ICh2b2lkICopc3ZuX3N3aWdfcmJfbWFrZV9iYXRvbigkaW5wdXQsIF9n bG9iYWxfc3ZuX3N3aWdfcmJfcG9vbCk7Cit9CisKKyV0eXBlbWFwKHJ1YnksIGluKSBhcHJfaGFz aF90ICpwYXRoX3JldnMKK3sKKyAgJDEgPSBzdm5fc3dpZ19yYl9oYXNoX3RvX2Fwcl9oYXNoX3Jl dm51bSgkaW5wdXQsIF9nbG9iYWxfcG9vbCk7Cit9CisKKyNpZmRlZiBTV0lHUFlUSE9OCisldHlw ZW1hcChpbikgKHN2bl9yYV9maWxlX3Jldl9oYW5kbGVyX3QgaGFuZGxlciwgdm9pZCAqaGFuZGxl cl9iYXRvbikKK3sKKyAgICQxID0gc3ZuX3N3aWdfcHlfcmFfZmlsZV9yZXZfaGFuZGxlcl9mdW5j OworICAgJDIgPSAodm9pZCAqKSRpbnB1dDsKK30KKyNlbmRpZgorCisjaWZkZWYgU1dJR1BZVEhP TgorJXR5cGVtYXAoaW4pIChjb25zdCBzdm5fcmFfcmVwb3J0ZXIyX3QgKnJlcG9ydGVyLCB2b2lk ICpyZXBvcnRfYmF0b24pCit7CisgICQxID0gKHN2bl9yYV9yZXBvcnRlcjJfdCAqKSZzd2lnX3B5 X3JhX3JlcG9ydGVyMjsKKyAgJDIgPSAodm9pZCAqKSRpbnB1dDsKK30KKyNlbmRpZgorCisvKiAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSAqLworCisleworI2lmZGVmIFNXSUdQWVRIT04KKyNpbmNsdWRlICJzd2ln dXRpbF9weS5oIgorI2VuZGlmCisKKyNpZmRlZiBTV0lHUEVSTAorI2luY2x1ZGUgInN3aWd1dGls X3BsLmgiCisjZW5kaWYKKworI2lmZGVmIFNXSUdSVUJZCisjaW5jbHVkZSAic3dpZ3V0aWxfcmIu aCIKKyNlbmRpZgorJX0KKworJWluY2x1ZGUgc3ZuX3JhX2guc3dnCisKZGlmZiAtTnVyIHN1YnZl cnNpb24tMS4zLjEvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3N2bl9yYS5pLnJlaiBzdWJ2ZXJz aW9uLTEuMy4xLm5ldy9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvc3ZuX3JhLmkucmVqCi0tLSBz dWJ2ZXJzaW9uLTEuMy4xL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9zdm5fcmEuaS5yZWoJMTk3 MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIHN1YnZlcnNpb24tMS4zLjEubmV3 L3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9zdm5fcmEuaS5yZWoJMjAwNi0wNy0wNSAwMTowNTo0 My4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSwxNyBAQAorKioqKioqKioqKioqKioqCisqKiog MTExLDExNyAqKioqCisgICNlbmRpZgorICAKKyAgI2lmZGVmIFNXSUdQWVRIT04KKy0gJXR5cGVt YXAoaW4pIChzdm5fcmFfY2FsbGJhY2tzMl90ICpjYWxsYmFja3MsCisgICAgICAgICAgICAgICAg ICAgICAgICB2b2lkICpjYWxsYmFja19iYXRvbikgeworICAgIHN2bl9zd2lnX3B5X3NldHVwX3Jh X2NhbGxiYWNrcygmJDEsICYkMiwgJGlucHV0LCBfZ2xvYmFsX3Bvb2wpOworICB9CistLS0gMTEx LDExNyAtLS0tCisgICNlbmRpZgorICAKKyAgI2lmZGVmIFNXSUdQWVRIT04KKysgJXR5cGVtYXAo aW4pIChjb25zdCBzdm5fcmFfY2FsbGJhY2tzMl90ICpjYWxsYmFja3MsCisgICAgICAgICAgICAg ICAgICAgICAgICB2b2lkICpjYWxsYmFja19iYXRvbikgeworICAgIHN2bl9zd2lnX3B5X3NldHVw X3JhX2NhbGxiYWNrcygmJDEsICYkMiwgJGlucHV0LCBfZ2xvYmFsX3Bvb2wpOworICB9CmRpZmYg LU51ciBzdWJ2ZXJzaW9uLTEuMy4xL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9zdm5fd2MuaSBz dWJ2ZXJzaW9uLTEuMy4xLm5ldy9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvc3ZuX3djLmkKLS0t IHN1YnZlcnNpb24tMS4zLjEvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3N2bl93Yy5pCTIwMDUt MTAtMjAgMjM6MTA6NTYuMDAwMDAwMDAwICswMTAwCisrKyBzdWJ2ZXJzaW9uLTEuMy4xLm5ldy9z dWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvc3ZuX3djLmkJMjAwNi0wNy0wNSAwMTowNDowNi4wMDAw MDAwMDAgKzAxMDAKQEAgLTE5MSw2ICsxOTEsMjAgQEAKICAgJDEgPSBzdm5fc3dpZ19yYl9hcnJh eV90b19hcHJfYXJyYXlfcHJvcCgkaW5wdXQsIHBvb2wpOwogfQogCisjaWZkZWYgU1dJR1BZVEhP TgorJXR5cGVtYXAoaW4sIG51bWlucHV0cz0wKQorICAgICBhcHJfYXJyYXlfaGVhZGVyX3QgKipw YXR0ZXJucyAoYXByX2FycmF5X2hlYWRlcl90ICp0ZW1wKQoreworICAkMSA9ICZ0ZW1wOworfQor JXR5cGVtYXAoYXJnb3V0LCBmcmFnbWVudD0idF9vdXRwdXRfaGVscGVyIikKKyAgICAgYXByX2Fy cmF5X2hlYWRlcl90ICoqcGF0dGVybnMKK3sKKyAgJHJlc3VsdCA9IHRfb3V0cHV0X2hlbHBlcigk cmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdm5fc3dpZ19weV9hcnJheV90b19s aXN0KCokMSkpOworfQorI2VuZGlmCisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBDYWxsYmFjazog c3ZuX3djX25vdGlmeV9mdW5jX3QKICAgIHN2bl9jbGllbnRfY3R4X3QKQEAgLTIzNyw2ICsyNTEs MTEgQEAKICAgJDIgPSAkaW5wdXQ7IC8qIG91ciBmdW5jdGlvbiBpcyB0aGUgYmF0b24uICovCiB9 CiAKKyV0eXBlbWFwKHB5dGhvbixpbikgKHN2bl93Y19ub3RpZnlfZnVuYzJfdCBub3RpZnlfZnVu Yywgdm9pZCAqbm90aWZ5X2JhdG9uKSB7CisgICAkMSA9IHN2bl9zd2lnX3B5X25vdGlmeV9mdW5j MjsKKyAgICQyID0gJGlucHV0OyAvKiBvdXIgZnVuY3Rpb24gaXMgdGhlIGJhdG9uLiAqLworfQor CiAldHlwZW1hcChwZXJsNSxpbikgKHN2bl93Y19zdGF0dXNfZnVuY190IHN0YXR1c19mdW5jLCB2 b2lkICpzdGF0dXNfYmF0b24pIHsKICAgJDEgPSBzdm5fc3dpZ19wbF9zdGF0dXNfZnVuYzsKICAg JDIgPSAkaW5wdXQ7IC8qIG91ciBmdW5jdGlvbiBpcyB0aGUgYmF0b24uICovCmRpZmYgLU51ciBz dWJ2ZXJzaW9uLTEuMy4xL3N1YnZlcnNpb24vbGlic3ZuX3JhX3N2bi9jbGllbnQuYyBzdWJ2ZXJz aW9uLTEuMy4xLm5ldy9zdWJ2ZXJzaW9uL2xpYnN2bl9yYV9zdm4vY2xpZW50LmMKLS0tIHN1YnZl cnNpb24tMS4zLjEvc3VidmVyc2lvbi9saWJzdm5fcmFfc3ZuL2NsaWVudC5jCTIwMDUtMTItMDkg MDE6NTU6MDkuMDAwMDAwMDAwICswMDAwCisrKyBzdWJ2ZXJzaW9uLTEuMy4xLm5ldy9zdWJ2ZXJz aW9uL2xpYnN2bl9yYV9zdm4vY2xpZW50LmMJMjAwNi0wNy0wNSAwMTowNDowNi4wMDAwMDAwMDAg KzAxMDAKQEAgLTExNTEsMTEgKzExNTEsOCBAQAogICAgIH0KICAgYXByX3Bvb2xfZGVzdHJveShz dWJwb29sKTsKIAotICBpZiAobnJlY2VpdmVkIDw9IGxpbWl0KQotICAgIHsKLSAgICAgIC8qIFJl YWQgdGhlIHJlc3BvbnNlLiAqLwotICAgICAgU1ZOX0VSUihzdm5fcmFfc3ZuX3JlYWRfY21kX3Jl c3BvbnNlKGNvbm4sIHBvb2wsICIiKSk7Ci0gICAgfQorICAvKiBSZWFkIHRoZSByZXNwb25zZS4g Ki8KKyAgU1ZOX0VSUihzdm5fcmFfc3ZuX3JlYWRfY21kX3Jlc3BvbnNlKGNvbm4sIHBvb2wsICIi KSk7CiAKICAgcmV0dXJuIFNWTl9OT19FUlJPUjsKIH0KZGlmZiAtTnVyIHN1YnZlcnNpb24tMS4z LjEvc3VidmVyc2lvbi9saWJzdm5fc3Vici9jb25zdHJ1Y3RvcnMuYyBzdWJ2ZXJzaW9uLTEuMy4x Lm5ldy9zdWJ2ZXJzaW9uL2xpYnN2bl9zdWJyL2NvbnN0cnVjdG9ycy5jCi0tLSBzdWJ2ZXJzaW9u LTEuMy4xL3N1YnZlcnNpb24vbGlic3ZuX3N1YnIvY29uc3RydWN0b3JzLmMJMjAwNS0xMC0xOCAx OTo0MDowMi4wMDAwMDAwMDAgKzAxMDAKKysrIHN1YnZlcnNpb24tMS4zLjEubmV3L3N1YnZlcnNp b24vbGlic3ZuX3N1YnIvY29uc3RydWN0b3JzLmMJMjAwNi0wNy0wNSAwMTowNDowNi4wMDAwMDAw MDAgKzAxMDAKQEAgLTM2LDYgKzM2LDIzIEBACiAgIHJldHVybiBjb21taXRfaW5mbzsKIH0KIAor c3ZuX2NvbW1pdF9pbmZvX3QgKgorc3ZuX2NvbW1pdF9pbmZvX2R1cChjb25zdCBzdm5fY29tbWl0 X2luZm9fdCAqc3JjX2NvbW1pdF9pbmZvLAorICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90 ICpwb29sKQoreworICBzdm5fY29tbWl0X2luZm9fdCAqZHN0X2NvbW1pdF9pbmZvID0gc3ZuX2Ny ZWF0ZV9jb21taXRfaW5mbyhwb29sKTsKKworICBkc3RfY29tbWl0X2luZm8tPmRhdGUgPSBzcmNf Y29tbWl0X2luZm8tPmRhdGUKKyAgICA/IGFwcl9wc3RyZHVwKHBvb2wsIHNyY19jb21taXRfaW5m by0+ZGF0ZSkgOiBOVUxMOworICBkc3RfY29tbWl0X2luZm8tPmF1dGhvciA9IHNyY19jb21taXRf aW5mby0+YXV0aG9yCisgICAgPyBhcHJfcHN0cmR1cChwb29sLCBzcmNfY29tbWl0X2luZm8tPmF1 dGhvcikgOiBOVUxMOworICBkc3RfY29tbWl0X2luZm8tPnJldmlzaW9uID0gc3JjX2NvbW1pdF9p bmZvLT5yZXZpc2lvbjsKKyAgZHN0X2NvbW1pdF9pbmZvLT5wb3N0X2NvbW1pdF9lcnIgPSBzcmNf Y29tbWl0X2luZm8tPnBvc3RfY29tbWl0X2VycgorICAgID8gYXByX3BzdHJkdXAocG9vbCwgc3Jj X2NvbW1pdF9pbmZvLT5wb3N0X2NvbW1pdF9lcnIpIDogTlVMTDsKKworICByZXR1cm4gZHN0X2Nv bW1pdF9pbmZvOworfQorCiBzdm5fbG9nX2NoYW5nZWRfcGF0aF90ICoKIHN2bl9sb2dfY2hhbmdl ZF9wYXRoX2R1cCAoY29uc3Qgc3ZuX2xvZ19jaGFuZ2VkX3BhdGhfdCAqY2hhbmdlZF9wYXRoLAog ICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKQo=