From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.org/gmane.linux.lib.musl.general/5800 Path: news.gmane.org!not-for-mail From: Jens Gustedt Newsgroups: gmane.linux.lib.musl.general Subject: bug in pthread_cond_broadcast Date: Tue, 12 Aug 2014 01:58:52 +0200 Message-ID: <1407801532.15134.96.camel@eris.loria.fr> Reply-To: musl@lists.openwall.com NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/signed; micalg="pgp-sha1"; protocol="application/pgp-signature"; boundary="=-kqsmMyz0XKutBlUiOSaw" X-Trace: ger.gmane.org 1407801551 32706 80.91.229.3 (11 Aug 2014 23:59:11 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Mon, 11 Aug 2014 23:59:11 +0000 (UTC) To: musl@lists.openwall.com Original-X-From: musl-return-5805-gllmg-musl=m.gmane.org@lists.openwall.com Tue Aug 12 01:59:06 2014 Return-path: Envelope-to: gllmg-musl@plane.gmane.org Original-Received: from mother.openwall.net ([195.42.179.200]) by plane.gmane.org with smtp (Exim 4.69) (envelope-from ) id 1XGzUY-0007Sd-3c for gllmg-musl@plane.gmane.org; Tue, 12 Aug 2014 01:59:06 +0200 Original-Received: (qmail 5268 invoked by uid 550); 11 Aug 2014 23:59:04 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: Original-Received: (qmail 5260 invoked from network); 11 Aug 2014 23:59:03 -0000 X-IronPort-AV: E=Sophos;i="5.01,845,1400018400"; d="scan'";a="89017668" Face: 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 X-Mailer: Evolution 3.4.4-3 Xref: news.gmane.org gmane.linux.lib.musl.general:5800 Archived-At: --=-kqsmMyz0XKutBlUiOSaw Content-Type: multipart/mixed; boundary="=-TZxH+yBG1kdsejHiMRpu" --=-TZxH+yBG1kdsejHiMRpu Content-Type: text/plain; charset="ISO-8859-1" Content-Transfer-Encoding: quoted-printable Hi, I was thinking about our recent discussion on the availability of a pthread_cont_t variable right after the broadcast (under certain circumstances). As byproduct I came up with a test as you may find attached to this post. The idea is that there is one main thread and 10 client threads that send signals and broadcasts back and forth through 10 phases. There is a sequence of events (mutex locks and unlocks) that is observable from all threads and thus all threads can deduce when a pthread_cond_t (called cond_main) has unblocked all waiters of phase i. The client threads then start a next phase use it with a different mutex than before. According to our recent discussion this should all be legal in POSIX. Now for me, this test crashes/deadlocks with musl pthread. It runs fine with glibc pthread, and with my latest version of C threads based on musl (also attached). I think, the problem for musl pthread is that while some clients start to mess around with the new cond/mutex combination others trapped inside a previous wait on the condition. The bookkeeping for the pthread_cond variable is then mixed up and the program fails. Jens --=20 :: INRIA Nancy Grand Est ::: AlGorille ::: ICube/ICPS ::: :: ::::::::::::::: office Strasbourg : +33 368854536 :: :: :::::::::::::::::::::: gsm France : +33 651400183 :: :: ::::::::::::::: gsm international : +49 15737185122 :: :: http://icube-icps.unistra.fr/index.php/Jens_Gustedt :: --=-TZxH+yBG1kdsejHiMRpu Content-Disposition: attachment; filename="pthread_cond_smasher.c" Content-Type: text/x-csrc; name="pthread_cond_smasher.c"; charset="ISO-8859-1" Content-Transfer-Encoding: base64 I2luY2x1ZGUgPHN0ZGlvLmg+DQojaW5jbHVkZSA8c3RyaW5nLmg+DQojaW5jbHVkZSA8dGltZS5o Pg0KDQojaWYgKF9fU1REQ19WRVJTSU9OX18gPiAyMDExMDBMKSAmJiAhZGVmaW5lZChfX1NURENf Tk9fVEhSRUFEU19fKQ0KIyBpbmNsdWRlIDx0aHJlYWRzLmg+DQoNCiMgZGVmaW5lIFZFUlNJT04g IkMgdGhyZWFkcyINCg0KdHlwZWRlZiBtdHhfdCBtdXRleDsNCnR5cGVkZWYgY25kX3QgY29uZGl0 aW9uOw0KdHlwZWRlZiB0aHJkX3QgdGhyZWFkOw0KdHlwZWRlZiBpbnQgdGhyZWFkX3JldDsNCg0K IyBkZWZpbmUgbXV0ZXhfaW5pdChNKSBtdHhfaW5pdCgoTSksIG10eF9wbGFpbikNCiMgZGVmaW5l IG11dGV4X2Rlc3Ryb3kgbXR4X2Rlc3Ryb3kNCiMgZGVmaW5lIG11dGV4X2xvY2sgbXR4X2xvY2sN CiMgZGVmaW5lIG11dGV4X3VubG9jayBtdHhfdW5sb2NrDQoNCiMgZGVmaW5lIGNvbmRpdGlvbl9p bml0KEMpIGNuZF9pbml0KChDKSkNCiMgZGVmaW5lIGNvbmRpdGlvbl9kZXN0cm95IGNuZF9kZXN0 cm95DQojIGRlZmluZSBjb25kaXRpb25fd2FpdCBjbmRfd2FpdA0KIyBkZWZpbmUgY29uZGl0aW9u X3RpbWVkd2FpdCBjbmRfdGltZWR3YWl0DQojIGRlZmluZSBjb25kaXRpb25fc2lnbmFsIGNuZF9z aWduYWwNCiMgZGVmaW5lIGNvbmRpdGlvbl9icm9hZGNhc3QgY25kX2Jyb2FkY2FzdA0KDQoNCiMg ZGVmaW5lIHRocmVhZF9jcmVhdGUoSUQsIFNUQVJULCBBUkcpIHRocmRfY3JlYXRlKElELCBTVEFS VCwgQVJHKQ0KIyBkZWZpbmUgdGhyZWFkX2pvaW4gdGhyZF9qb2luDQoNCiMgZGVmaW5lIGdldHRp bWUoVFMpIHRpbWVzcGVjX2dldCgoVFMpLCBUSU1FX1VUQykNCg0KY2hhciBjb25zdCogZXJyb3Jz dHJpbmcoaW50IGVycikgew0KICBzd2l0Y2ggKGVycikgew0KICBjYXNlIHRocmRfc3VjY2Vzczog cmV0dXJuICJzdWNjZXNzIjsNCiAgY2FzZSB0aHJkX2Vycm9yOiByZXR1cm4gImdlbmVyaWMgZXJy b3IiOw0KICBjYXNlIHRocmRfbm9tZW06IHJldHVybiAib3V0IG9mIG1lbW9yeSI7DQogIGNhc2Ug dGhyZF90aW1lZG91dDogcmV0dXJuICJ0aW1lZG91dCI7DQogIGRlZmF1bHQ6IHJldHVybiAidW5r bm93biBlcnJvciByZXR1cm4iOw0KICB9DQp9DQoNCiNlbHNlDQojIGluY2x1ZGUgPHB0aHJlYWQu aD4NCg0KIyBkZWZpbmUgVkVSU0lPTiAiUE9TSVggdGhyZWFkcyINCg0KdHlwZWRlZiBwdGhyZWFk X211dGV4X3QgbXV0ZXg7DQp0eXBlZGVmIHB0aHJlYWRfY29uZF90IGNvbmRpdGlvbjsNCnR5cGVk ZWYgcHRocmVhZF90IHRocmVhZDsNCnR5cGVkZWYgdm9pZCogdGhyZWFkX3JldDsNCg0KIyBkZWZp bmUgbXV0ZXhfaW5pdChNKSBwdGhyZWFkX211dGV4X2luaXQoKE0pLCAwKQ0KIyBkZWZpbmUgbXV0 ZXhfZGVzdHJveSBwdGhyZWFkX211dGV4X2Rlc3Ryb3kNCiMgZGVmaW5lIG11dGV4X2xvY2sgcHRo cmVhZF9tdXRleF9sb2NrDQojIGRlZmluZSBtdXRleF91bmxvY2sgcHRocmVhZF9tdXRleF91bmxv Y2sNCg0KIyBkZWZpbmUgY29uZGl0aW9uX2luaXQoQykgcHRocmVhZF9jb25kX2luaXQoKEMpLCAw KQ0KIyBkZWZpbmUgY29uZGl0aW9uX2Rlc3Ryb3kgcHRocmVhZF9jb25kX2Rlc3Ryb3kNCiMgZGVm aW5lIGNvbmRpdGlvbl93YWl0IHB0aHJlYWRfY29uZF93YWl0DQojIGRlZmluZSBjb25kaXRpb25f dGltZWR3YWl0IHB0aHJlYWRfY29uZF90aW1lZHdhaXQNCiMgZGVmaW5lIGNvbmRpdGlvbl9zaWdu YWwgcHRocmVhZF9jb25kX3NpZ25hbA0KIyBkZWZpbmUgY29uZGl0aW9uX2Jyb2FkY2FzdCBwdGhy ZWFkX2NvbmRfYnJvYWRjYXN0DQoNCg0KIyBkZWZpbmUgdGhyZWFkX2NyZWF0ZShJRCwgU1RBUlQs IEFSRykgcHRocmVhZF9jcmVhdGUoSUQsIDAsIFNUQVJULCBBUkcpDQojIGRlZmluZSB0aHJlYWRf am9pbiBwdGhyZWFkX2pvaW4NCg0KIyBkZWZpbmUgZ2V0dGltZShUUykgY2xvY2tfZ2V0dGltZShD TE9DS19SRUFMVElNRSwgKFRTKSkNCg0KIyBkZWZpbmUgZXJyb3JzdHJpbmcgc3RyZXJyb3INCiNl bmRpZg0KDQojaWZkZWYgX19HTElCQ19fDQojIGRlZmluZSBMSUJSQVJZICJnbGliYyINCiNlbHNl DQojIGRlZmluZSBMSUJSQVJZICJ1bmlkZW50aWZpZWQiDQojZW5kaWYNCg0KI2RlZmluZSB0cmFj ZTIoTCwgLi4uKSBmcHJpbnRmKHN0ZGVyciwgX19GSUxFX18gIjoiICNMICI6ICIgX19WQV9BUkdT X18pDQojZGVmaW5lIHRyYWNlMShMLCAuLi4pIHRyYWNlMihMLCBfX1ZBX0FSR1NfXykNCiNpZmRl ZiBERUJVRw0KIyBkZWZpbmUgdHJhY2UoLi4uKSB0cmFjZTEoX19MSU5FX18sIF9fVkFfQVJHU19f KQ0KI2Vsc2UNCiMgZGVmaW5lIHRyYWNlKC4uLikgZG8geyBpZiAoMCkgdHJhY2UxKF9fTElORV9f LCBfX1ZBX0FSR1NfXyk7IH0gd2hpbGUgKDApDQojZW5kaWYNCg0KI2RlZmluZSB0ZWxsKC4uLikg dHJhY2UxKF9fTElORV9fLCBfX1ZBX0FSR1NfXykNCg0KZW51bSB7DQogIHBoYXNlcyA9IDEwLA0K ICB0aHJlYWRzID0gMTAsDQp9Ow0KDQp0aHJlYWQgaWRbdGhyZWFkc107DQp1bnNpZ25lZCBhcmdz W3RocmVhZHNdOw0KDQptdXRleCBtdXRbcGhhc2VzXTsNCnVuc2lnbmVkIGluc2lkZVtwaGFzZXNd Ow0KDQpjb25kaXRpb24gY29uZF9jbGllbnQ7DQpjb25kaXRpb24gY29uZF9tYWluOw0KdW5zaWdu ZWQgdm9sYXRpbGUgcGhhc2U7DQoNCnRocmVhZF9yZXQgY2xpZW50KHZvaWQgKmFyZykgew0KICB1 bnNpZ25lZCAqIG51bWJlciA9IGFyZzsNCiAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBoYXNl czsgKytpKSB7DQogICAgdHJhY2UoInRocmVhZCAldSBpbiBwaGFzZSAldVxuIiwgKm51bWJlciwg aSk7DQogICAgbXV0ZXhfbG9jaygmbXV0W2ldKTsNCiAgICArK2luc2lkZVtpXTsNCiAgICBpZiAo aW5zaWRlW2ldID09IHRocmVhZHMpIHsNCiAgICAgIHRyYWNlKCJ0aHJlYWQgJXUgaXMgbGFzdCwg c2lnbmFsbGluZyBtYWluXG4iLCAqbnVtYmVyKTsNCiAgICAgIGludCByZXQgPSBjb25kaXRpb25f c2lnbmFsKCZjb25kX21haW4pOw0KICAgICAgdHJhY2UoInRocmVhZCAldSBpcyBsYXN0LCBzaWdu YWxsaW5nIG1haW4sICVzXG4iLCAqbnVtYmVyLCBlcnJvcnN0cmluZyhyZXQpKTsNCiAgICB9DQog ICAgd2hpbGUgKGkgPT0gcGhhc2UpIHsNCiAgICAgIHRlbGwoInRocmVhZCAldSBpbiBwaGFzZSAl dSAoJXUpLCB3YWl0aW5nXG4iLCAqbnVtYmVyLCBpLCBwaGFzZSk7DQogICAgICBpbnQgcmV0ID0g Y29uZGl0aW9uX3dhaXQoJmNvbmRfY2xpZW50LCAmbXV0W2ldKTsNCiAgICAgIHRyYWNlKCJ0aHJl YWQgJXUgaW4gcGhhc2UgJXUgKCV1KSwgZmluaXNoZWQsICVzXG4iLCAqbnVtYmVyLCBpLCBwaGFz ZSwgZXJyb3JzdHJpbmcocmV0KSk7DQogICAgfQ0KICAgIGludCByZXQgPSBtdXRleF91bmxvY2so Jm11dFtpXSk7DQogICAgdHJhY2UoInRocmVhZCAldSBpbiBwaGFzZSAldSAoJXUpLCBoYXMgdW5s b2NrZWQgbXV0ZXg6ICVzXG4iLCAqbnVtYmVyLCBpLCBwaGFzZSwgZXJyb3JzdHJpbmcocmV0KSk7 DQogIH0NCiAgcmV0dXJuIDA7DQp9DQoNCg0KaW50IG1haW4odm9pZCkgew0KICB0ZWxsKCJzdGFy dCB1cCBvZiBtYWluLCB1c2luZyAlcywgbGlicmFyeSAlc1xuIiwgVkVSU0lPTiwgTElCUkFSWSk7 DQogIGNvbmRpdGlvbl9pbml0KCZjb25kX2NsaWVudCk7DQogIGNvbmRpdGlvbl9pbml0KCZjb25k X21haW4pOw0KICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGhhc2VzOyArK2kpIHsNCiAgICBt dXRleF9pbml0KCZtdXRbaV0pOw0KICB9DQogIG11dGV4X2xvY2soJm11dFswXSk7DQoNCiAgZm9y ICh1bnNpZ25lZCBpID0gMDsgaSA8IHRocmVhZHM7ICsraSkgew0KICAgIGFyZ3NbaV0gPSBpOw0K ICAgIHRocmVhZF9jcmVhdGUoJmlkW2ldLCBjbGllbnQsICZhcmdzW2ldKTsNCiAgfQ0KDQogIHdo aWxlIChwaGFzZSA8IHBoYXNlcykgew0KICAgIHdoaWxlIChpbnNpZGVbcGhhc2VdIDwgdGhyZWFk cykgew0KICAgICAgdHJhY2UoIm1haW4gc2VlaW5nICV1IHRocmVhZHMgaW4gcGhhc2UgJXUsIHdh aXRpbmdcbiIsIGluc2lkZVtwaGFzZV0sIHBoYXNlKTsNCiAgICAgIGludCByZXQgPSBjb25kaXRp b25fd2FpdCgmY29uZF9tYWluLCAmbXV0W3BoYXNlXSk7DQogICAgICB0ZWxsKCJtYWluIHNlZWlu ZyAldSB0aHJlYWRzIGluIHBoYXNlICV1LCAlc1xuIiwgaW5zaWRlW3BoYXNlXSwgcGhhc2UsIGVy cm9yc3RyaW5nKHJldCkpOw0KICAgIH0NCiAgICAvKiBub3cgd2Uga25vdyB0aGF0IGV2ZXJ5Ym9k eSBpcyB3YWl0aW5nIGluc2lkZSwgbG9jayB0aGUgbmV4dA0KICAgICAgIG11dGV4LCBpZiBhbnks IHN1Y2ggdGhhdCBub2JvZHkgY2FuIGVudGVyIHRoZSBuZXh0IHBoYXNlDQogICAgICAgd2l0aG91 dCBvdXIgcGVybWlzc2lvbi4gKi8NCiAgICBpZiAocGhhc2UgPCBwaGFzZXMtMSkNCiAgICAgIG11 dGV4X2xvY2soJm11dFtwaGFzZSsxXSk7DQogICAgLyogTm93IHNpZ25hbCBhbGwgY2xpZW50cywg dXBkYXRlIHRoZSBwaGFzZSBjb3VudCBhbmQgcmVsZWFzZSB0aGUNCiAgICAgICBtdXRleCB0aGV5 IGFyZSB3YWl0aW5nIGZvci4gKi8NCiAgICBpbnQgcmV0ID0gY29uZGl0aW9uX2Jyb2FkY2FzdCgm Y29uZF9jbGllbnQpOw0KICAgIHRyYWNlKCJtYWluIGhhcyBicm9hZGNhc3QgdG8gJXU6ICVzXG4i LCBwaGFzZSwgZXJyb3JzdHJpbmcocmV0KSk7DQogICAgKytwaGFzZTsNCiAgICByZXQgPSBtdXRl eF91bmxvY2soJm11dFtwaGFzZS0xXSk7DQogICAgdHJhY2UoIm1haW4gaGFzIHVubG9ja2VkIG11 dGV4ICV1OiAlc1xuIiwgcGhhc2UtMSwgZXJyb3JzdHJpbmcocmV0KSk7DQogIH0NCg0KDQoNCiAg dHJhY2UoIm1haW4gZmluaXNoZWQgbG9vcFxuIik7DQoNCiAgZm9yICh1bnNpZ25lZCBpID0gMDsg aSA8IHRocmVhZHM7ICsraSkgew0KICAgIHRyYWNlKCJtYWluIGpvaW5pbmcgdGhyZWFkICV1XG4i LCBpKTsNCiAgICBpbnQgcmV0ID0gdGhyZWFkX2pvaW4oaWRbaV0sICYodGhyZWFkX3JldCl7MH0p Ow0KICAgIHRyYWNlKCJtYWluIGpvaW5pbmcgdGhyZWFkICV1OiAlc1xuIiwgaSwgZXJyb3JzdHJp bmcocmV0KSk7DQogIH0NCg0KICAvKiBDIGZ1bmN0aW9ucyB0byBkZXN0cm95IHRoZSBjb250cm9s IHN0cnVjdHVyZXMgZG9uJ3QgcmV0dXJuIGVycm9yDQogICAgIGluZm9ybWF0aW9uLCBzbyB3ZSBj YW4ndCBjaGVjayBmb3IgZXJyb3JzLCBoZXJlLiAqLw0KICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp IDwgcGhhc2VzOyArK2kpIHsNCiAgICBtdXRleF9kZXN0cm95KCZtdXRbaV0pOw0KICB9DQogIGNv bmRpdGlvbl9kZXN0cm95KCZjb25kX21haW4pOw0KICBjb25kaXRpb25fZGVzdHJveSgmY29uZF9j bGllbnQpOw0KDQogIHRlbGwoInNodXQgZG93biBvZiBtYWluLCB1c2luZyAlcywgbGlicmFyeSAl c1xuIiwgVkVSU0lPTiwgTElCUkFSWSk7DQp9DQo= --=-TZxH+yBG1kdsejHiMRpu Content-Disposition: attachment; filename="thrd11-v5.6.patch" Content-Type: text/x-patch; name="thrd11-v5.6.patch"; charset="ISO-8859-1" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWxsdHlwZXMuaC5pbiBiL2luY2x1ZGUvYWxsdHlwZXMuaC5p bg0KaW5kZXggODQ3OGZiNC4uNGNkMmNiMSAxMDA2NDQNCi0tLSBhL2luY2x1ZGUvYWxsdHlwZXMu aC5pbg0KKysrIGIvaW5jbHVkZS9hbGx0eXBlcy5oLmluDQpAQCAtNTgsNiArNTgsMTAgQEAgVFlQ RURFRiBzdHJ1Y3QgeyB1bnNpZ25lZCBfX2F0dHI7IH0gcHRocmVhZF9tdXRleGF0dHJfdDsNCiBU WVBFREVGIHN0cnVjdCB7IHVuc2lnbmVkIF9fYXR0cjsgfSBwdGhyZWFkX2NvbmRhdHRyX3Q7DQog VFlQRURFRiBzdHJ1Y3QgeyB1bnNpZ25lZCBfX2F0dHI7IH0gcHRocmVhZF9iYXJyaWVyYXR0cl90 Ow0KIFRZUEVERUYgc3RydWN0IHsgdW5zaWduZWQgX19hdHRyWzJdOyB9IHB0aHJlYWRfcndsb2Nr YXR0cl90Ow0KK1RZUEVERUYgcHRocmVhZF9jb25kX3QgY25kX3Q7DQorVFlQRURFRiBwdGhyZWFk X211dGV4X3QgbXR4X3Q7DQorDQorDQogDQogVFlQRURFRiBzdHJ1Y3QgX0lPX0ZJTEUgRklMRTsN CiANCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RocmVhZHMuaCBiL2luY2x1ZGUvdGhyZWFkcy5oDQpu ZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uMzEzZmRiNA0KLS0tIC9kZXYvbnVs bA0KKysrIGIvaW5jbHVkZS90aHJlYWRzLmgNCkBAIC0wLDAgKzEsMjAwIEBADQorI2lmbmRlZiBf VEhSRUFEU19IDQorI2RlZmluZSBfVEhSRUFEU19IDQorDQorLyogVGhpcyBvbmUgaXMgZXhwbGlj aXRseSBhbGxvd2VkIHRvIGJlIGluY2x1ZGVkLiAqLw0KKyNpbmNsdWRlIDx0aW1lLmg+DQorDQor DQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorI2RlZmlu ZSBfX05FRURfY25kX3QNCisjZGVmaW5lIF9fTkVFRF9tdHhfdA0KKy8qIFVudGlsIHdlIGNvbWUg dXAgd2l0aCBhIGJldHRlciBuYW1pbmcgc2NoZW1lLCB3ZSBuZWVkIHRvIGV4cG9zZQ0KKyAgIHNv bWUgcHRocmVhZCB0eXBlcy4gKi8NCisjZGVmaW5lIF9fTkVFRF9wdGhyZWFkX2NvbmRfdA0KKyNk ZWZpbmUgX19ORUVEX3B0aHJlYWRfbXV0ZXhfdA0KKyNkZWZpbmUgX19ORUVEX3B0aHJlYWRfb25j ZV90DQorI2RlZmluZSBfX05FRURfcHRocmVhZF90DQorI2RlZmluZSBfX05FRURfcHRocmVhZF9r ZXlfdA0KKw0KKyNpbmNsdWRlIDxiaXRzL2FsbHR5cGVzLmg+DQorI2luY2x1ZGUgPGJpdHMvZXJy bm8uaD4NCisNCit0eXBlZGVmIHN0cnVjdCBfX210eF9vbl9oZWFwIF9fbXR4X3Q7DQordm9pZCBf X210eF91bnJlZihfX210eF90ICopOw0KK19fbXR4X3QqIF9fbXR4X2dldHJlZihtdHhfdCAqKTsN CisNCitpbnQgX19tdHhfbG9jayhfX210eF90ICopOw0KK2ludCBfX210eF90cnlsb2NrKF9fbXR4 X3QgKik7DQoraW50IF9fbXR4X3VubG9jayhfX210eF90ICopOw0KK2ludCBfX210eF90aW1lZGxv Y2soX19tdHhfdCAqcmVzdHJpY3QsIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqcmVzdHJpY3QpOw0K Kw0KK3R5cGVkZWYgc3RydWN0IF9fY25kX29uX2hlYXAgX19jbmRfdDsNCit2b2lkIF9fY25kX3Vu cmVmKF9fY25kX3QgKik7DQorX19jbmRfdCogX19jbmRfZ2V0cmVmKGNuZF90ICosIF9fbXR4X3Qg Kik7DQorDQoraW50IF9fY25kX3NpZ25hbChfX2NuZF90ICopOw0KK2ludCBfX2NuZF9icm9hZGNh c3QoX19jbmRfdCAqKTsNCitpbnQgX19jbmRfd2FpdChfX2NuZF90ICpyZXN0cmljdCwgX19tdHhf dCAqcmVzdHJpY3QpOw0KKw0KK3R5cGVkZWYgcHRocmVhZF90IHRocmRfdDsNCit0eXBlZGVmIHB0 aHJlYWRfa2V5X3QgdHNzX3Q7DQordHlwZWRlZiBpbnQgKCp0aHJkX3N0YXJ0X3QpKHZvaWQqKTsN Cit0eXBlZGVmIHZvaWQgKCp0c3NfZHRvcl90KSh2b2lkKik7DQorDQordHlwZWRlZiBzdHJ1Y3Qg b25jZV9mbGFnIG9uY2VfZmxhZzsNCisNCisvKiBKdXN0IGhhdmUgYSBjb3B5IG9mIHRoZSBkZWZp bml0aW9uIGZvciB0aGUgbW9tZW50LiBUaGlzIGhhcyB0byBiZQ0KKyAgIHJlcGxhY2VkIGJ5IHNo YXJpbmcgdGhhdCBkZWNsYXJhdGlvbiBpbiBhbGx0eXBlcy5oICovDQorc3RydWN0IF9fb25jZV9j YiB7DQorCXZvaWQgKCpfX2YpKHZvaWQgKik7DQorCXZvaWQgKl9feDsNCisJc3RydWN0IF9fcHRj YiAqX19uZXh0Ow0KK307DQorDQorc3RydWN0IG9uY2VfZmxhZyB7DQorICBpbnQgX19jbnRybDsN CisgIGludCBfX3dhaXRlcnM7DQorICBzdHJ1Y3QgX19vbmNlX2NiIF9fY2I7DQorfTsNCisNCisj aWZuZGVmIF9fVEhSRF9FWFBFUklNRU5UQUwNCisjIGRlZmluZSBfX1RIUkRfRVhQRVJJTUVOVEFM IDENCisjZW5kaWYNCisNCisgIC8qIFRoZSBmb2xsb3dpbmcgbGlzdCBvZiA5IGludGVnZXIgY29u c3RhbnRzIG1ha2VzIHVwIGZvciB0aGUgYmluYXJ5DQorICAgICBjb21wYXRpYmlsaXR5IG9mIHRo aXMgQyB0aHJlYWQgaW1wbGVtZW50YXRpb24uIFlvdSBtdXN0IG5ldmVyDQorICAgICBsaW5rIGNv ZGUgYWdhaW5zdCB2ZXJzaW9ucyBvZiB0aGUgQyBsaWJyYXJ5IHRoYXQgZG8gbm90IGFncmVlDQor ICAgICB1cG9uIHRoZXNlIEFCSSBwYXJhbWV0ZXJzLg0KKw0KKyAgICAgQWRkaXRpb25hbGx5IHRo aXMgaW1wbGVtZW50YXRpb24gYXNzdW1lcyB0aGF0IHRoZSA1IHR5cGVzIGhhdmUNCisgICAgIHRo ZSBzYW1lIHNpemUgYWNyb3NzIEMgbGlicmFyaWVzIGFuZCB0aGF0IHRoZXNlIHR5cGVzIGNhbiBi ZQ0KKyAgICAgaW5pdGlhbGl6ZWQgYnkgdGhlIGRlZmF1bHQgaW5pdGlhbGl6ZXIuDQorDQorICAg ICBUaGUgdmFsdWVzIGZvciB0aGUgOSBwYXJhbWV0ZXJzIGFyZSBub3QgZml4ZWQgZm9yIG5vdy4g RGVwZW5kaW5nDQorICAgICBvbiB0aGUgY2hvaWNlcyBvZiBvdGhlciBpbXBsZW1lbnRhdGlvbnMg YW5kIHRoZSBldm9sdXRpb24gb2YgdGhlDQorICAgICBDIHN0YW5kYXJkIHRoZXkgbWF5IHN0aWxs IGNoYW5nZS4gVGhpcyBzaG91bGQgaGFwcGVuIHJhcmVseSwgYnV0DQorICAgICB5b3UgaGF2ZSB0 byBjb25zaWRlciB0aGUgQyB0aHJlYWQgZmVhdHVyZSB0byBiZSBleHBlcmltZW50YWwNCisgICAg IHVudGlsIHRoZW4sIGFuZCBiZSBwcmVwYXJlZCB0byByZWNvbXBpbGUgeW91ciBiaW5hcnkgd2hl biBsaW5raW5nDQorICAgICBhZ2FpbnN0IGEgZGlmZmVyZW50IGltcGxlbWVudGF0aW9uIG9yIGEg bmV3IHZlcnNpb24uDQorDQorICAgICBUaGUgbWFjcm8gX19USFJEX0VYUEVSSU1FTlRBTCB3aWxs IGJlIGRlZmluZWQgYXMgbG9uZyBhcyB3ZQ0KKyAgICAgY29uc2lkZXIgdGhpcyBBQkkgdG8gYmUg dW5zdGFibGUuIFRoaXMgY29tZXMgd2l0aCBzb21lIGxpbmsgdGltZQ0KKyAgICAgY2hlY2tzIGFu ZCBhbiBvdmVyaGVhZCBvZiBzb21lIGJ5dGVzLiBBdCB5b3VyIG93biByaXNrIHlvdSBtYXkNCisg ICAgIHN3aXRjaCB0aGlzIGNoZWNrIG9mZiBieSBkZWZpbmluZyBfX1RIUkRfRVhQRVJJTUVOVEFM IG1hY3JvIHRvDQorICAgICAwLiAqLw0KKw0KKyNkZWZpbmUgX19USFJEX1NVQ0NFU1MgICAgICAw DQorI2RlZmluZSBfX1RIUkRfQlVTWSAgICAgICAgIEVCVVNZDQorI2RlZmluZSBfX1RIUkRfRVJS T1IgICAgICAgIEVJTlZBTA0KKyNkZWZpbmUgX19USFJEX05PTUVNICAgICAgICBFTk9NRU0NCisj ZGVmaW5lIF9fVEhSRF9USU1FRE9VVCAgICAgRVRJTUVET1VUDQorI2RlZmluZSBfX01UWF9QTEFJ TiAgICAgICAgIDANCisjZGVmaW5lIF9fTVRYX1JFQ1VSU0lWRSAgICAgMQ0KKyNkZWZpbmUgX19N VFhfVElNRUQgICAgICAgICAyDQorI2RlZmluZSBUU1NfRFRPUl9JVEVSQVRJT05TIDQNCisNCisj ZGVmaW5lIF9fVEhSRF9DT05DQVQxMF8oXzAsIF8xLCBfMiwgXzMsIF80LCBfNSwgXzYsIF83LCBf OCwgXzkpICAgICAgICAgXA0KK18wICMjIF8gIyMgXzEgIyMgXyAjIyBfMiAjIyBfICMjIF8zICMj IF8gIyMgXzQgIyMgXyAjIyBfNSAjIyBfICMjIF82ICMjIF8gIyMgXzcgIyMgXyAjIyBfOCAjIyBf ICMjIF85DQorDQorI2RlZmluZSBfX1RIUkRfQ09OQ0FUMTAoXzAsIF8xLCBfMiwgXzMsIF80LCBf NSwgXzYsIF83LCBfOCwgXzkpIFwNCisgIF9fVEhSRF9DT05DQVQxMF8oXzAsIF8xLCBfMiwgXzMs IF80LCBfNSwgXzYsIF83LCBfOCwgXzkpDQorDQorDQorI2RlZmluZSBfX1RIUkRfQUJJICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXA0KK19fVEhSRF9DT05DQVQxMChfX3RocmRfYWJpLCAg ICAgICAgICAgICAgICAgICAgIFwNCisgICAgICAgICAgICAgICAgX19USFJEX1NVQ0NFU1MsICAg ICAgICAgICAgICAgICBcDQorICAgICAgICAgICAgICAgIF9fVEhSRF9CVVNZLCAgICAgICAgICAg ICAgICAgICAgXA0KKyAgICAgICAgICAgICAgICBfX1RIUkRfRVJST1IsICAgICAgICAgICAgICAg ICAgIFwNCisgICAgICAgICAgICAgICAgX19USFJEX05PTUVNLCAgICAgICAgICAgICAgICAgICBc DQorICAgICAgICAgICAgICAgIF9fVEhSRF9USU1FRE9VVCwgICAgICAgICAgICAgICAgXA0KKyAg ICAgICAgICAgICAgICBfX01UWF9QTEFJTiwgICAgICAgICAgICAgICAgICAgIFwNCisgICAgICAg ICAgICAgICAgX19NVFhfUkVDVVJTSVZFLCAgICAgICAgICAgICAgICBcDQorICAgICAgICAgICAg ICAgIF9fTVRYX1RJTUVELCAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgICAgICAgICAgICBU U1NfRFRPUl9JVEVSQVRJT05TICAgICAgICAgICAgIFwNCisgICAgICAgICAgICAgICAgKQ0KKw0K KyNkZWZpbmUgX19USFJEX1NIRlQoWCwgWSkgKCgoWCkgPDwgMykgXiAoWSkpDQorDQorZW51bSB7 DQorICBfX3RocmRfYWJpID0NCisgIF9fVEhSRF9TSEZUKHNpemVvZihjbmRfdCksDQorICAgICAg ICAgICAgICBfX1RIUkRfU0hGVChzaXplb2YobXR4X3QpLA0KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgX19USFJEX1NIRlQoc2l6ZW9mKG9uY2VfZmxhZyksDQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX1RIUkRfU0hGVChzaXplb2YodGhyZF90KSwNCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih0c3NfdCkp KSkpLA0KK307DQorDQorZXh0ZXJuIHVuc2lnbmVkIGNvbnN0IF9fVEhSRF9BQkk7DQorDQorI2Rl ZmluZSBfX1RIUkRfQUJJX0NIRUNLICgxLyhfX1RIUkRfQUJJID09IF9fdGhyZF9hYmkpKQ0KKw0K KyNpZiBfX1RIUkRfRVhQRVJJTUVOVEFMDQorIyBkZWZpbmUgX19USFJEX0FCSV9NQVJLIF9fYXR0 cmlidXRlX18oKHVzZWQpKSBzdGF0aWMgdW5zaWduZWQgY29uc3QqY29uc3QgX190aHJkX2FiaV9t YXJrID0gJl9fVEhSRF9BQkkNCisjZWxzZQ0KKyMgZGVmaW5lIF9fVEhSRF9BQklfTUFSSyB0eXBl ZGVmIHVuc2lnbmVkIF9fdGhyZF9hYmlfZHVtbXlfdHlwZQ0KKyNlbmRpZg0KKw0KK2VudW0gew0K KyAgdGhyZF9zdWNjZXNzID0gX19USFJEX1NVQ0NFU1MsDQorICB0aHJkX2J1c3kgPSBfX1RIUkRf QlVTWSwNCisgIHRocmRfZXJyb3IgPSBfX1RIUkRfRVJST1IsDQorICB0aHJkX25vbWVtID0gX19U SFJEX05PTUVNLA0KKyAgdGhyZF90aW1lZG91dCA9IF9fVEhSRF9USU1FRE9VVCwNCit9Ow0KKw0K K2VudW0gew0KKyAgbXR4X3BsYWluID0gX19NVFhfUExBSU4sDQorICBtdHhfcmVjdXJzaXZlID0g X19NVFhfUkVDVVJTSVZFLA0KKyAgLy8gYWxsIG11dGV4ZXMgYXJlIHRpbWVkLCBoZXJlLiBzbyB0 aGlzIGlzIGEgbm8tb3ANCisgIG10eF90aW1lZCA9IF9fTVRYX1RJTUVELA0KK307DQorDQorI2Rl ZmluZSBPTkNFX0ZMQUdfSU5JVCB7IC5fY250cmwgPSAwLCB9DQorI2RlZmluZSB0aHJlYWRfbG9j YWwgX1RocmVhZF9sb2NhbA0KKw0KK2ludCB0aHJkX2NyZWF0ZSh0aHJkX3QgKiwgdGhyZF9zdGFy dF90LCB2b2lkICopOw0KK19Ob3JldHVybiB2b2lkIHRocmRfZXhpdChpbnQpOw0KKw0KK2ludCB0 aHJkX2RldGFjaCh0aHJkX3QpOw0KK2ludCB0aHJkX2pvaW4odGhyZF90LCBpbnQgKik7DQorDQor aW50IHRocmRfc2xlZXAoY29uc3Qgc3RydWN0IHRpbWVzcGVjICosIHN0cnVjdCB0aW1lc3BlYyAq KTsNCit2b2lkIHRocmRfeWllbGQodm9pZCk7DQorDQordGhyZF90IHRocmRfY3VycmVudCh2b2lk KTsNCitpbnQgdGhyZF9lcXVhbCh0aHJkX3QsIHRocmRfdCk7DQorI2RlZmluZSB0aHJkX2VxdWFs KEEsIEIpICgoQSkgPT0gKEIpKQ0KKw0KK3ZvaWQgY2FsbF9vbmNlKG9uY2VfZmxhZyAqLCB2b2lk ICgqKSh2b2lkKSk7DQorDQoraW50IG10eF9pbml0KG10eF90ICosIGludCk7DQordm9pZCBtdHhf ZGVzdHJveShtdHhfdCAqKTsNCisNCitpbnQgbXR4X2xvY2sobXR4X3QgKik7DQoraW50IG10eF90 aW1lZGxvY2sobXR4X3QgKnJlc3RyaWN0LCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKnJlc3RyaWN0 KTsNCitpbnQgbXR4X3RyeWxvY2sobXR4X3QgKik7DQoraW50IG10eF91bmxvY2sobXR4X3QgKik7 DQorDQoraW50IGNuZF9pbml0KGNuZF90ICopOw0KK3ZvaWQgY25kX2Rlc3Ryb3koY25kX3QgKik7 DQorDQoraW50IGNuZF9icm9hZGNhc3QoY25kX3QgKik7DQoraW50IGNuZF9zaWduYWwoY25kX3Qg Kik7DQorDQoraW50IGNuZF90aW1lZHdhaXQoY25kX3QgKnJlc3RyaWN0LCBtdHhfdCAqcmVzdHJp Y3QsIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqcmVzdHJpY3QpOw0KK2ludCBjbmRfd2FpdChjbmRf dCAqLCBtdHhfdCAqKTsNCisNCitpbnQgdHNzX2NyZWF0ZSh0c3NfdCAqLCB0c3NfZHRvcl90KTsN Cit2b2lkIHRzc19kZWxldGUodHNzX3Qga2V5KTsNCisNCitpbnQgdHNzX3NldCh0c3NfdCwgdm9p ZCAqKTsNCit2b2lkICp0c3NfZ2V0KHRzc190KTsNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9 DQorI2VuZGlmDQorDQorI2VuZGlmDQpkaWZmIC0tZ2l0IGEvc3JjL2ludGVybmFsL3B0aHJlYWRf aW1wbC5oIGIvc3JjL2ludGVybmFsL3B0aHJlYWRfaW1wbC5oDQppbmRleCA2NTBlODExLi42ZjRi ZWFiIDEwMDY0NA0KLS0tIGEvc3JjL2ludGVybmFsL3B0aHJlYWRfaW1wbC5oDQorKysgYi9zcmMv aW50ZXJuYWwvcHRocmVhZF9pbXBsLmgNCkBAIC01MSw2ICs1MSw1MSBAQCBzdHJ1Y3QgX190aW1l ciB7DQogCXB0aHJlYWRfdCB0aHJlYWQ7DQogfTsNCiANCisvKiBGb3IgdGhlIG1vbWVudCB0aGlz IHR5cGUgaGFzIHRoZSBzYW1lIGxheW91dCBhcw0KKyAgIHB0aHJlYWRfbXV0ZXhfdC4gVGhpcyBp cyBzdWJqZWN0IHRvIGNoYW5nZSBpbiBsYXRlciB2ZXJzaW9ucyBvZiB0aGUNCisgICBDIHRocmVh ZCBpbXBsZW1lbnRhdGlvbiwgYmUgaXQgZm9yIHRoZSBzaW1wbGUgcmVhc29uIHRoYXQgdGhpcw0K KyAgIHdvdWxkIHJlZHVjZSB0aGUgc2l6ZSBvZiB0aGUgc3RydWN0dXJlIGJ5IGhhbGYuICovDQor c3RydWN0IF9fbXR4X29uX2hlYXAgew0KKwlpbnQgX210X3R5cDsNCisJaW50IF9tdF9sY2s7DQor CWludCBfbXRfd3RzOw0KKwlpbnQgX210X3BhZDM7DQorCWludCBfbXRfcGFkNDsNCisJaW50IF9t dF9jbnQ7DQorCWludCBfbXRfcmZzOw0KKwlpbnQgX210X3BhZDc7DQorCWludCBfbXRfcGFkODsN CisJaW50IF9tdF9wYWQ5Ow0KK307DQorDQorc3RhdGljIGlubGluZQ0KK3ZvaWQgX19tdHhfYWRk cmVmKHN0cnVjdCBfX210eF9vbl9oZWFwICptKSB7DQorCWlmIChtKSB7DQorCQlhX2luYygmbS0+ X210X3Jmcyk7DQorCX0NCit9DQorDQorc3RydWN0IF9fY25kX29uX2hlYXAgew0KKwlpbnQgcmZz Ow0KKwlpbnQgdG9rOw0KKwlzdHJ1Y3QgX19tdHhfb25faGVhcCogbXR4Ow0KK307DQorDQorc3Rh dGljIGlubGluZQ0KK3ZvaWQgX19jbmRfYWRkcmVmKHN0cnVjdCBfX2NuZF9vbl9oZWFwICpjKSB7 DQorCWlmIChjKSB7DQorCQlhX2luYygmYy0+cmZzKTsNCisJfQ0KK30NCisNCisvKiBVbmxlc3Mg dG9sZCBvdGhlcndpc2UgdGhpcyBDIHRocmVhZCBpbXBsZW1lbnRhdGlvbiB3aWxsIG9ubHkgdXNl DQorICAgcHJpdmF0ZSBmdXRleGVzLiAqLw0KKyNpZmRlZiBfX01UWF9TSEFSRUQNCisjZGVmaW5l IFRIUkRfUFJJVkFURSAwDQorI2Vsc2UNCisjZGVmaW5lIFRIUkRfUFJJVkFURSAxMjgNCisjZW5k aWYNCisNCiAjZGVmaW5lIF9fU1UgKHNpemVvZihzaXplX3QpL3NpemVvZihpbnQpKQ0KIA0KICNk ZWZpbmUgX2Ffc3RhY2tzaXplIF9fdS5fX3NbMF0NCkBAIC02Niw2ICsxMTEsMTIgQEAgc3RydWN0 IF9fdGltZXIgew0KICNkZWZpbmUgX21fcHJldiBfX3UuX19wWzNdDQogI2RlZmluZSBfbV9uZXh0 IF9fdS5fX3BbNF0NCiAjZGVmaW5lIF9tX2NvdW50IF9fdS5fX2lbNV0NCisjZGVmaW5lIF9teF90 eXBlIF9fdS5fX2lbMF0NCisjZGVmaW5lIF9teF9sb2NrIF9fdS5fX2lbMV0NCisjZGVmaW5lIF9t eF9tdHggX191Ll9fcFsyXQ0KKyNkZWZpbmUgX214X3ByZXYgX191Ll9fcFszXSAvKiB1bnVzZWQg Ki8NCisjZGVmaW5lIF9teF9uZXh0IF9fdS5fX3BbNF0gLyogdW51c2VkICovDQorI2RlZmluZSBf bXhfY291bnQgX191Ll9faVs1XSAvKiB1bnVzZWQgKi8NCiAjZGVmaW5lIF9jX211dGV4IF9fdS5f X3BbMF0NCiAjZGVmaW5lIF9jX3NlcSBfX3UuX19pWzJdDQogI2RlZmluZSBfY193YWl0ZXJzIF9f dS5fX2lbM10NCkBAIC03NCw2ICsxMjUsMTQgQEAgc3RydWN0IF9fdGltZXIgew0KICNkZWZpbmUg X2NfbG9ja3dhaXQgX191Ll9faVs2XQ0KICNkZWZpbmUgX2Nfd2FpdGVyczIgX191Ll9faVs3XQ0K ICNkZWZpbmUgX2NfZGVzdHJveSBfX3UuX19pWzhdDQorI2RlZmluZSBfY3hfY25kIF9fdS5fX3Bb MF0NCisjZGVmaW5lIF9jeF9zZXEgX191Ll9faVsyXSAgICAgLyogdW51c2VkICovDQorI2RlZmlu ZSBfY3hfd2FpdGVycyBfX3UuX19pWzNdIC8qIHVudXNlZCAqLw0KKyNkZWZpbmUgX2N4X2Nsb2Nr IF9fdS5fX2lbNF0gICAvKiB1bnVzZWQgKi8NCisjZGVmaW5lIF9jeF9sb2NrIF9fdS5fX2lbNV0N CisjZGVmaW5lIF9jeF9sb2Nrd2FpdCBfX3UuX19pWzZdLyogdW51c2VkICovDQorI2RlZmluZSBf Y3hfd2FpdGVyczIgX191Ll9faVs3XS8qIHVudXNlZCAqLw0KKyNkZWZpbmUgX2N4X2Rlc3Ryb3kg X191Ll9faVs4XSAvKiB1bnVzZWQgKi8NCiAjZGVmaW5lIF9yd19sb2NrIF9fdS5fX2lbMF0NCiAj ZGVmaW5lIF9yd193YWl0ZXJzIF9fdS5fX2lbMV0NCiAjZGVmaW5lIF9iX2xvY2sgX191Ll9faVsw XQ0KQEAgLTgzLDYgKzE0MiwyNCBAQCBzdHJ1Y3QgX190aW1lciB7DQogI2RlZmluZSBfYl93YWl0 ZXJzMiBfX3UuX19pWzRdDQogI2RlZmluZSBfYl9pbnN0IF9fdS5fX3BbM10NCiANCisjaWYgZGVm aW5lZChfX0FUT01JQ19BQ1FVSVJFKSAmJiBkZWZpbmVkKF9fQVRPTUlDX1JFTEVBU0UpDQorI2Rl ZmluZSBhX3NwbGNrKFgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXA0KKyh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgIGludCAqIF9sY2sgPSAoWCk7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICB3 aGlsZSAoX19hdG9taWNfdGVzdF9hbmRfc2V0KF9sY2ssIF9fQVRPTUlDX0FDUVVJUkUpKSAodm9p ZCkwOyAgICAgICAgXA0KKyAgX19hdG9taWNfdGhyZWFkX2ZlbmNlKF9fQVRPTUlDX0FDUVVJUkUp OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgfSkNCisjZGVmaW5lIGFfc3B1bmwo WCkgKHsgaW50ICogX2xjayA9IChYKTsgX19hdG9taWNfY2xlYXIoX2xjaywgX19BVE9NSUNfUkVM RUFTRSk7IH0pDQorI2Vsc2UNCisjZGVmaW5lIGFfc3BsY2soWCkgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwNCisoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwNCisgIGludCAqIF9sY2sgPSAoWCk7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgIHdoaWxlIChfX3N5bmNfbG9ja190ZXN0X2Fu ZF9zZXQoX2xjaywgMSkpICh2b2lkKTA7ICAgIFwNCisgIF9fc3luY19zeW5jaHJvbml6ZSgpOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgfSkNCisjZGVmaW5lIGFfc3B1bmwo WCkgKHsgaW50ICogX2xjayA9IChYKTsgX19zeW5jX2xvY2tfcmVsZWFzZShfbGNrKTsgfSkNCisj ZW5kaWYNCisNCiAjaW5jbHVkZSAicHRocmVhZF9hcmNoLmgiDQogDQogI2RlZmluZSBTSUdUSU1F UiAzMg0KQEAgLTExMSw2ICsxODgsMTAgQEAgdm9pZCBfX3dhaXQodm9sYXRpbGUgaW50ICosIHZv bGF0aWxlIGludCAqLCBpbnQsIGludCk7DQogI2RlZmluZSBfX3dha2UoYWRkciwgY250LCBwcml2 KSBcDQogCV9fc3lzY2FsbChTWVNfZnV0ZXgsIGFkZHIsIEZVVEVYX1dBS0UsIChjbnQpPDA/SU5U X01BWDooY250KSkNCiANCit2b2lkIF9fd2FpdF9wcml2KHZvbGF0aWxlIGludCAqLCB2b2xhdGls ZSBpbnQgKiwgaW50KTsNCisjZGVmaW5lIF9fd2FrZV9wcml2KGFkZHIsIGNudCkgXA0KKwlfX3N5 c2NhbGwoU1lTX2Z1dGV4LCBhZGRyLCBGVVRFWF9XQUtFfFRIUkRfUFJJVkFURSwgKGNudCk8MD9J TlRfTUFYOihjbnQpKQ0KKw0KIHZvaWQgX19hY3F1aXJlX3B0YygpOw0KIHZvaWQgX19yZWxlYXNl X3B0YygpOw0KIHZvaWQgX19pbmhpYml0X3B0YygpOw0KZGlmZiAtLWdpdCBhL3NyYy9tbWFuL21w cm90ZWN0LmMgYi9zcmMvbW1hbi9tcHJvdGVjdC5jDQppbmRleCBmNDg4NDg2Li41MzU3ODdiIDEw MDY0NA0KLS0tIGEvc3JjL21tYW4vbXByb3RlY3QuYw0KKysrIGIvc3JjL21tYW4vbXByb3RlY3Qu Yw0KQEAgLTIsMTAgKzIsMTIgQEANCiAjaW5jbHVkZSAibGliYy5oIg0KICNpbmNsdWRlICJzeXNj YWxsLmgiDQogDQotaW50IG1wcm90ZWN0KHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBwcm90 KQ0KK2ludCBfX21wcm90ZWN0KHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBwcm90KQ0KIHsN CiAJc2l6ZV90IHN0YXJ0LCBlbmQ7DQogCXN0YXJ0ID0gKHNpemVfdClhZGRyICYgLVBBR0VfU0la RTsNCiAJZW5kID0gKHNpemVfdCkoKGNoYXIgKilhZGRyICsgbGVuICsgUEFHRV9TSVpFLTEpICYg LVBBR0VfU0laRTsNCiAJcmV0dXJuIHN5c2NhbGwoU1lTX21wcm90ZWN0LCBzdGFydCwgZW5kLXN0 YXJ0LCBwcm90KTsNCiB9DQorDQord2Vha19hbGlhcyhfX21wcm90ZWN0LCBtcHJvdGVjdCk7DQpk aWZmIC0tZ2l0IGEvc3JjL3NjaGVkL3RocmRfeWllbGQuYyBiL3NyYy9zY2hlZC90aHJkX3lpZWxk LmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwLi4zMDFlOTUzDQotLS0gL2Rl di9udWxsDQorKysgYi9zcmMvc2NoZWQvdGhyZF95aWVsZC5jDQpAQCAtMCwwICsxLDcgQEANCisj aW5jbHVkZSA8c2NoZWQuaD4NCisjaW5jbHVkZSAic3lzY2FsbC5oIg0KKw0KK3ZvaWQgdGhyZF95 aWVsZCgpDQorew0KKyAgICAgICAgICh2b2lkKXN5c2NhbGwoU1lTX3NjaGVkX3lpZWxkKTsNCit9 DQpkaWZmIC0tZ2l0IGEvc3JjL3RocmVhZC9fX2NuZF9nZXRyZWYuYyBiL3NyYy90aHJlYWQvX19j bmRfZ2V0cmVmLmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwLi5lOTZkODE2 DQotLS0gL2Rldi9udWxsDQorKysgYi9zcmMvdGhyZWFkL19fY25kX2dldHJlZi5jDQpAQCAtMCww ICsxLDY0IEBADQorI2luY2x1ZGUgInB0aHJlYWRfaW1wbC5oIg0KKyNpbmNsdWRlIDx0aHJlYWRz Lmg+DQorDQorc3RhdGljIGlubGluZSBfX2NuZF90KiBfX2NuZF9pbml0KF9fY25kX3QgKmMsIF9f bXR4X3QgKm0pIHsNCisJaWYgKGMpIHsNCisJCSpjID0gKF9fY25kX3QpIHsNCisJCQkucmZzID0g MiwNCisJCQkgLm10eCA9IG0sDQorCQl9Ow0KKwl9DQorCWlmIChtKSBfX210eF9hZGRyZWYobSk7 DQorCXJldHVybiBjOw0KK30NCisNCitzdGF0aWMgaW5saW5lIHZvaWQgX19jbmRfZGVsZXRlKF9f Y25kX3QgKmMpIHsNCisJaWYgKGMpIHsNCisJCV9fbXR4X3VucmVmKGMtPm10eCk7DQorCQljLT5t dHggPSAwOw0KKwkJZnJlZShjKTsNCisJfQ0KK30NCisNCit2b2lkIF9fY25kX3VucmVmKF9fY25k X3QgKmMpIHsNCisJaWYgKGMpIHsNCisJCWlmIChhX2ZldGNoX2FkZCgmYy0+cmZzLCAtMSkgPT0g MSkgew0KKwkJCV9fY25kX2RlbGV0ZShjKTsNCisJCX0NCisJfQ0KK30NCisNCitzdGF0aWMgaW5s aW5lIF9fY25kX3QqIF9fY25kX2dldHJlZl9kZWYoY25kX3QgKmNvbmQsIF9fbXR4X3QqIG0sIF9f Y25kX3QqIGRlZikgew0KKwlfX2NuZF90ICogcmV0Ow0KKwlfX210eF90ICogcHJldiA9IDA7DQor CS8qIENyaXRpY2FsIHNlY3Rpb24gcHJvdGVjdGVkIGJ5IHNwaW4gbG9jayAuICovDQorCWFfc3Bs Y2soJmNvbmQtPl9jeF9sb2NrKTsNCisJcmV0ID0gY29uZC0+X2N4X2NuZDsNCisJaWYgKHJldCkg ew0KKwkJX19jbmRfYWRkcmVmKHJldCk7DQorCQlpZiAobSAmJiByZXQtPm10eCAhPSBtKSB7DQor CQkJcHJldiA9IHJldC0+bXR4Ow0KKwkJCV9fbXR4X2FkZHJlZihtKTsNCisJCQlyZXQtPm10eCA9 IG07DQorCQl9DQorCX0gZWxzZSBpZiAoZGVmKSB7DQorCQlyZXQgPSBkZWY7DQorCQljb25kLT5f Y3hfY25kID0gZGVmOw0KKwl9DQorCWFfc3B1bmwoJmNvbmQtPl9jeF9sb2NrKTsNCisJaWYgKHBy ZXYpIF9fbXR4X3VucmVmKHByZXYpOw0KKwlyZXR1cm4gcmV0Ow0KK30NCisNCitfX2NuZF90KiBf X2NuZF9nZXRyZWYoY25kX3QgKmNvbmQsIF9fbXR4X3QgKiBtKSB7DQorCV9fY25kX3QgKiByZXQg PSBfX2NuZF9nZXRyZWZfZGVmKGNvbmQsIG0sIDApOw0KKwlpZiAoIXJldCkgew0KKwkJX19jbmRf dCAqIG5ldyA9IF9fY25kX2luaXQobWFsbG9jKHNpemVvZiAqcmV0KSwgbSk7DQorCQlpZiAobmV3 KSB7DQorCQkJcmV0ID0gX19jbmRfZ2V0cmVmX2RlZihjb25kLCBtLCBuZXcpOw0KKwkJCS8qIHNv bWVib2R5IHNuZWFrZWQgaW4gYmV0d2VlbiB0aGUgZmlyc3QgYW5kIHNlY29uZCBjYWxsICovDQor CQkJaWYgKHJldCAhPSBuZXcpIF9fY25kX2RlbGV0ZShuZXcpOw0KKwkJfQ0KKwl9DQorCXJldHVy biByZXQ7DQorfQ0KZGlmZiAtLWdpdCBhL3NyYy90aHJlYWQvX19tdHhfZ2V0cmVmLmMgYi9zcmMv dGhyZWFkL19fbXR4X2dldHJlZi5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAw MC4uMjJiM2RiNA0KLS0tIC9kZXYvbnVsbA0KKysrIGIvc3JjL3RocmVhZC9fX210eF9nZXRyZWYu Yw0KQEAgLTAsMCArMSw0OSBAQA0KKyNpbmNsdWRlICJwdGhyZWFkX2ltcGwuaCINCisjaW5jbHVk ZSA8dGhyZWFkcy5oPg0KKw0KK3N0YXRpYyBpbmxpbmUgX19tdHhfdCogX19tdHhfaW5pdChfX210 eF90ICptLCBpbnQgdHlwZSkgew0KKwlpZiAobSkgew0KKwkJKm0gPSAoX19tdHhfdCkgew0KKwkJ CS5fbXRfcmZzID0gMiwNCisJCQkgLl9tdF90eXAgPSB0eXBlLA0KKwkJfTsNCisJfQ0KKwlyZXR1 cm4gbTsNCit9DQorDQorc3RhdGljIGlubGluZSB2b2lkIF9fbXR4X2RlbGV0ZShfX210eF90ICog bSkgew0KKwlmcmVlKG0pOw0KK30NCisNCit2b2lkIF9fbXR4X3VucmVmKF9fbXR4X3QgKm0pIHsN CisJaWYgKG0pIHsNCisJCWlmIChhX2ZldGNoX2FkZCgmbS0+X210X3JmcywgLTEpID09IDEpIHsN CisJCQlfX210eF9kZWxldGUobSk7DQorCQl9DQorCX0NCit9DQorDQorc3RhdGljIGlubGluZSBf X210eF90KiBfX210eF9nZXRyZWZfZGVmKG10eF90ICptdXQsIF9fbXR4X3QqIGRlZikgew0KKwkv KiBDcml0aWNhbCBzZWN0aW9uIHByb3RlY3RlZCBieSBzcGluIGxvY2sgLiAqLw0KKwlhX3NwbGNr KCZtdXQtPl9teF9sb2NrKTsNCisJX19tdHhfdCAqIHJldCA9IG11dC0+X214X210eDsNCisJaWYg KHJldCkgew0KKwkJX19tdHhfYWRkcmVmKHJldCk7DQorCX0gZWxzZSBpZiAoZGVmKSB7DQorCQly ZXQgPSBkZWY7DQorCQltdXQtPl9teF9tdHggPSBkZWY7DQorCX0NCisJYV9zcHVubCgmbXV0LT5f bXhfbG9jayk7DQorCXJldHVybiByZXQ7DQorfQ0KKw0KK19fbXR4X3QqIF9fbXR4X2dldHJlZiht dHhfdCAqbXV0KSB7DQorCV9fbXR4X3QgKiByZXQgPSBfX210eF9nZXRyZWZfZGVmKG11dCwgMCk7 DQorCWlmICghcmV0KSB7DQorCQlfX210eF90ICogbmV3ID0gX19tdHhfaW5pdChtYWxsb2Moc2l6 ZW9mICpyZXQpLCBtdXQtPl9teF90eXBlKTsNCisJCXJldCA9IF9fbXR4X2dldHJlZl9kZWYobXV0 LCBuZXcpOw0KKwkJLyogc29tZWJvZHkgc25lYWtlZCBpbiBiZXR3ZWVuIHRoZSBmaXJzdCBhbmQg c2Vjb25kIGNhbGwgKi8NCisJCWlmIChyZXQgIT0gbmV3KSBfX210eF9kZWxldGUobmV3KTsNCisJ fQ0KKwlyZXR1cm4gcmV0Ow0KK30NCmRpZmYgLS1naXQgYS9zcmMvdGhyZWFkL19fdGhyZF9hYmku YyBiL3NyYy90aHJlYWQvX190aHJkX2FiaS5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXgg MDAwMDAwMC4uZTU2NzRlNg0KLS0tIC9kZXYvbnVsbA0KKysrIGIvc3JjL3RocmVhZC9fX3RocmRf YWJpLmMNCkBAIC0wLDAgKzEsMyBAQA0KKyNpbmNsdWRlIDx0aHJlYWRzLmg+DQorDQordW5zaWdu ZWQgY29uc3QgX19USFJEX0FCSSA9ICBfX3RocmRfYWJpOw0KZGlmZiAtLWdpdCBhL3NyYy90aHJl YWQvX190aHJkX3dhaXQuYyBiL3NyYy90aHJlYWQvX190aHJkX3dhaXQuYw0KbmV3IGZpbGUgbW9k ZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAuLjYzNTFjYjYNCi0tLSAvZGV2L251bGwNCisrKyBiL3Ny Yy90aHJlYWQvX190aHJkX3dhaXQuYw0KQEAgLTAsMCArMSwyNiBAQA0KKyNpbmNsdWRlICJwdGhy ZWFkX2ltcGwuaCINCisjaW5jbHVkZSA8dGhyZWFkcy5oPg0KKw0KK2ludCBfX2Nsb2NrX2dldHRp bWUoY2xvY2tpZF90IGNsaywgc3RydWN0IHRpbWVzcGVjICp0cyk7DQorDQoraW50IF9fdGhyZF93 YWl0KHZvbGF0aWxlIGludCAqYWRkciwgaW50IHZhbCwgY29uc3Qgc3RydWN0IHRpbWVzcGVjICph dCkNCit7DQorCWludCByOw0KKwlzdHJ1Y3QgdGltZXNwZWMgdG8sICp0b3A9MDsNCisNCisJaWYg KGF0KSB7DQorCQlpZiAoYXQtPnR2X25zZWMgPj0gMTAwMDAwMDAwMFVMKSByZXR1cm4gRUlOVkFM Ow0KKwkJaWYgKF9fY2xvY2tfZ2V0dGltZShDTE9DS19SRUFMVElNRSwgJnRvKSkgcmV0dXJuIEVJ TlZBTDsNCisJCXRvLnR2X3NlYyA9IGF0LT50dl9zZWMgLSB0by50dl9zZWM7DQorCQlpZiAoKHRv LnR2X25zZWMgPSBhdC0+dHZfbnNlYyAtIHRvLnR2X25zZWMpIDwgMCkgew0KKwkJCXRvLnR2X3Nl Yy0tOw0KKwkJCXRvLnR2X25zZWMgKz0gMTAwMDAwMDAwMDsNCisJCX0NCisJCWlmICh0by50dl9z ZWMgPCAwKSByZXR1cm4gRVRJTUVET1VUOw0KKwkJdG9wID0gJnRvOw0KKwl9DQorDQorCXIgPSAt X19zeXNjYWxsX2NwKFNZU19mdXRleCwgYWRkciwgRlVURVhfV0FJVHxUSFJEX1BSSVZBVEUsIHZh bCwgdG9wKTsNCisJaWYgKHIgPT0gRUlOVFIgfHwgciA9PSBFSU5WQUwgfHwgciA9PSBFVElNRURP VVQgfHwgciA9PSBFV09VTERCTE9DSykgcmV0dXJuIHI7DQorCXJldHVybiAwOw0KK30NCmRpZmYg LS1naXQgYS9zcmMvdGhyZWFkL19fdGltZWR3YWl0LmMgYi9zcmMvdGhyZWFkL19fdGltZWR3YWl0 LmMNCmluZGV4IDMwMjI3M2EuLjNhZWQyYmQgMTAwNjQ0DQotLS0gYS9zcmMvdGhyZWFkL19fdGlt ZWR3YWl0LmMNCisrKyBiL3NyYy90aHJlYWQvX190aW1lZHdhaXQuYw0KQEAgLTQsNiArNCw5IEBA DQogI2luY2x1ZGUgImZ1dGV4LmgiDQogI2luY2x1ZGUgInN5c2NhbGwuaCINCiANCitpbnQgX19w dGhyZWFkX3NldGNhbmNlbHN0YXRlKGludCBuZXcsIGludCAqb2xkKTsNCitpbnQgX19jbG9ja19n ZXR0aW1lKGNsb2NraWRfdCBjbGssIHN0cnVjdCB0aW1lc3BlYyAqdHMpOw0KKw0KIHN0YXRpYyBp bnQgZG9fd2FpdCh2b2xhdGlsZSBpbnQgKmFkZHIsIGludCB2YWwsDQogCWNsb2NraWRfdCBjbGss IGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqYXQsIGludCBwcml2KQ0KIHsNCkBAIC0xMiw3ICsxNSw3 IEBAIHN0YXRpYyBpbnQgZG9fd2FpdCh2b2xhdGlsZSBpbnQgKmFkZHIsIGludCB2YWwsDQogDQog CWlmIChhdCkgew0KIAkJaWYgKGF0LT50dl9uc2VjID49IDEwMDAwMDAwMDBVTCkgcmV0dXJuIEVJ TlZBTDsNCi0JCWlmIChjbG9ja19nZXR0aW1lKGNsaywgJnRvKSkgcmV0dXJuIEVJTlZBTDsNCisJ CWlmIChfX2Nsb2NrX2dldHRpbWUoY2xrLCAmdG8pKSByZXR1cm4gRUlOVkFMOw0KIAkJdG8udHZf c2VjID0gYXQtPnR2X3NlYyAtIHRvLnR2X3NlYzsNCiAJCWlmICgodG8udHZfbnNlYyA9IGF0LT50 dl9uc2VjIC0gdG8udHZfbnNlYykgPCAwKSB7DQogCQkJdG8udHZfc2VjLS07DQpAQCAtMzMsMTMg KzM2LDEzIEBAIGludCBfX3RpbWVkd2FpdCh2b2xhdGlsZSBpbnQgKmFkZHIsIGludCB2YWwsDQog ew0KIAlpbnQgciwgY3M7DQogDQotCWlmICghY2xlYW51cCkgcHRocmVhZF9zZXRjYW5jZWxzdGF0 ZShQVEhSRUFEX0NBTkNFTF9ESVNBQkxFLCAmY3MpOw0KKwlpZiAoIWNsZWFudXApIF9fcHRocmVh ZF9zZXRjYW5jZWxzdGF0ZShQVEhSRUFEX0NBTkNFTF9ESVNBQkxFLCAmY3MpOw0KIAlwdGhyZWFk X2NsZWFudXBfcHVzaChjbGVhbnVwLCBhcmcpOw0KIA0KIAlyID0gZG9fd2FpdChhZGRyLCB2YWws IGNsaywgYXQsIHByaXYpOw0KIA0KIAlwdGhyZWFkX2NsZWFudXBfcG9wKDApOw0KLQlpZiAoIWNs ZWFudXApIHB0aHJlYWRfc2V0Y2FuY2Vsc3RhdGUoY3MsIDApOw0KKwlpZiAoIWNsZWFudXApIF9f cHRocmVhZF9zZXRjYW5jZWxzdGF0ZShjcywgMCk7DQogDQogCXJldHVybiByOw0KIH0NCmRpZmYg LS1naXQgYS9zcmMvdGhyZWFkL19fd2FpdF9wcml2LmMgYi9zcmMvdGhyZWFkL19fd2FpdF9wcml2 LmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwLi5mODM1OGNkDQotLS0gL2Rl di9udWxsDQorKysgYi9zcmMvdGhyZWFkL19fd2FpdF9wcml2LmMNCkBAIC0wLDAgKzEsMTQgQEAN CisjaW5jbHVkZSAicHRocmVhZF9pbXBsLmgiDQorDQordm9pZCBfX3dhaXRfcHJpdih2b2xhdGls ZSBpbnQgKmFkZHIsIHZvbGF0aWxlIGludCAqd2FpdGVycywgaW50IHZhbCkNCit7DQorCWludCBz cGlucz0xMDAwMDsNCisJd2hpbGUgKHNwaW5zLS0pIHsNCisJCWlmICgqYWRkcj09dmFsKSBhX3Nw aW4oKTsNCisJCWVsc2UgcmV0dXJuOw0KKwl9DQorCWlmICh3YWl0ZXJzKSBhX2luYyh3YWl0ZXJz KTsNCisJd2hpbGUgKCphZGRyPT12YWwpDQorCQlfX3N5c2NhbGwoU1lTX2Z1dGV4LCBhZGRyLCBG VVRFWF9XQUlUfFRIUkRfUFJJVkFURSwgdmFsLCAwKTsNCisJaWYgKHdhaXRlcnMpIGFfZGVjKHdh aXRlcnMpOw0KK30NCmRpZmYgLS1naXQgYS9zcmMvdGhyZWFkL2NhbGxfb25jZS5jIGIvc3JjL3Ro cmVhZC9jYWxsX29uY2UuYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAuLjFk MzU0MGUNCi0tLSAvZGV2L251bGwNCisrKyBiL3NyYy90aHJlYWQvY2FsbF9vbmNlLmMNCkBAIC0w LDAgKzEsNDAgQEANCisjaW5jbHVkZSAicHRocmVhZF9pbXBsLmgiDQorI2luY2x1ZGUgPHRocmVh ZHMuaD4NCisNCisjZGVmaW5lIHB0aHJlYWRfY2xlYW51cF9wdXNoX3N0YXRpYyhmLCB4KSBkbyB7 IHN0YXRpYyBzdHJ1Y3QgX19wdGNiIF9fY2I7IF9wdGhyZWFkX2NsZWFudXBfcHVzaCgmX19jYiwg ZiwgeCkNCisNCitzdGF0aWMgdm9pZCB1bmRvKHZvaWQgKmZsZykNCit7DQorCW9uY2VfZmxhZyAq IGZsYWcgPSBmbGc7DQorCWFfc3RvcmUoJmZsYWctPl9fY250cmwsIDApOw0KKwlfX3dha2VfcHJp digmZmxhZy0+X19jbnRybCwgMSk7DQorfQ0KKw0KK3ZvaWQgY2FsbF9vbmNlKG9uY2VfZmxhZyAq ZmxhZywgdm9pZCAoKmZ1bmMpKHZvaWQpKQ0KK3sNCisJX19USFJEX0FCSV9NQVJLOw0KKw0KKwkv KiBSZXR1cm4gaW1tZWRpYXRlbHkgaWYgaW5pdCBmaW5pc2hlZCBiZWZvcmUgKi8NCisJaWYgKGZs YWctPl9fY250cmwgPT0gMikgcmV0dXJuOw0KKw0KKwkvKiBUcnkgdG8gZW50ZXIgaW5pdGlhbGl6 aW5nIHN0YXRlLiBUaHJlZSBwb3NzaWJpbGl0aWVzOg0KKwkgKiAgMCAtIHdlJ3JlIHRoZSBmaXJz dCBvciB0aGUgb3RoZXIgY2FuY2VsbGVkOyBydW4gaW5pdA0KKwkgKiAgMSAtIGFub3RoZXIgdGhy ZWFkIGlzIHJ1bm5pbmcgaW5pdDsgd2FpdA0KKwkgKiAgMiAtIGFub3RoZXIgdGhyZWFkIGZpbmlz aGVkIHJ1bm5pbmcgaW5pdDsganVzdCByZXR1cm4gKi8NCisNCisJZm9yICg7Oykgc3dpdGNoIChh X2NhcygmZmxhZy0+X19jbnRybCwgMCwgMSkpIHsNCisJY2FzZSAwOg0KKwkJX3B0aHJlYWRfY2xl YW51cF9wdXNoKCh2b2lkKikmZmxhZy0+X19jYiwgdW5kbywgZmxhZyk7DQorCQlmdW5jKCk7DQor CQlfcHRocmVhZF9jbGVhbnVwX3BvcCgodm9pZCopJmZsYWctPl9fY2IsIDApOw0KKw0KKwkJYV9z dG9yZSgmZmxhZy0+X19jbnRybCwgMik7DQorCQlpZiAoZmxhZy0+X193YWl0ZXJzKSBfX3dha2Uo JmZsYWctPl9fY250cmwsIC0xLCAwKTsNCisJCXJldHVybjsNCisJY2FzZSAxOg0KKwkJX193YWl0 X3ByaXYoJmZsYWctPl9fY250cmwsICZmbGFnLT5fX3dhaXRlcnMsIDEpOw0KKwkJY29udGludWU7 DQorCWNhc2UgMjoNCisJCXJldHVybjsNCisJfQ0KK30NCmRpZmYgLS1naXQgYS9zcmMvdGhyZWFk L2NuZF9icm9hZGNhc3QuYyBiL3NyYy90aHJlYWQvY25kX2Jyb2FkY2FzdC5jDQpuZXcgZmlsZSBt b2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uOWU4MWI2NA0KLS0tIC9kZXYvbnVsbA0KKysrIGIv c3JjL3RocmVhZC9jbmRfYnJvYWRjYXN0LmMNCkBAIC0wLDAgKzEsNDggQEANCisjaW5jbHVkZSAi cHRocmVhZF9pbXBsLmgiDQorI2luY2x1ZGUgPHRocmVhZHMuaD4NCisNCitpbnQgX19jbmRfYnJv YWRjYXN0KF9fY25kX3QgKmMpDQorew0KKwlpbnQgcmV0ID0gMDsNCisJX19tdHhfdCAqIG10eCA9 IGMtPm10eDsNCisJLyogSWYgdGhlIG10eCBpc24ndCBzZXQsIHRoaXMgX19jbmQgaGFzIG5ldmVy IGJlZW4gdXNlZCBmb3IgYSB3YWl0LA0KKwkgICBub3RoaW5nIHRvIGRvLiAqLw0KKwlpZiAobXR4 KSB7DQorCQkvKiBXZSBjYW4gdXBsb2FkIGFzIG11Y2ggdG9rZW5zIGFzIHdlIHdpc2gsIGhlcmUg c2luY2UgdGhpcw0KKwkJICAgX19jbmRfdCBpcyBhbHJlYWR5IHVubGlua2VkIGZyb20gaXRzIGNu ZF90LiBJdCB3aWxsIG5ldmVyIGJlDQorCQkgICB1c2VkIGZvciBhbnkgbmV3IHdhaXRlci4gKi8N CisJCWFfc3RvcmUoJmMtPnRvaywgSU5UX01BWCk7DQorCQkvKiBQZXJmb3JtIHRoZSBmdXRleCBy ZXF1ZXVlLCB3YWtpbmcgb25lIHdhaXRlciB1bmxlc3Mgd2Uga25vdw0KKwkJICogdGhhdCB0aGUg Y2FsbGluZyB0aHJlYWQgaG9sZHMgdGhlIG11dGV4LiAqLw0KKyAgICAgICAgICAgICAgICBpbnQg d2FrZXVwID0gIW10eC0+X210X3R5cCB8fCAobXR4LT5fbXRfbGNrJklOVF9NQVgpIT1fX3B0aHJl YWRfc2VsZigpLT50aWQ7DQorCQlyZXQgPSBfX3N5c2NhbGwoU1lTX2Z1dGV4LCAmYy0+dG9rLCBG VVRFWF9SRVFVRVVFfFRIUkRfUFJJVkFURSwNCisJCSAgICAgICAgICAgICAgICAwLA0KKwkJICAg ICAgICAgICAgICAgIElOVF9NQVgsICZtdHgtPl9tdF9sY2ssIGMtPnRvayk7DQorICAgICAgICAg ICAgICAgIC8qIERvIHRoZSBib29ra2VlcGluZyBmb3IgdGhlIG11dGV4IGFuZCB3YWtlIHVwIG9u ZSB0aHJlYWQgZXZlbnR1YWxseS4gKi8NCisJCWlmIChyZXQgPiB3YWtldXApIGFfZmV0Y2hfYWRk KCZtdHgtPl9tdF93dHMsIHJldC13YWtldXApOw0KKwkJaWYgKHJldCA+IDAgJiYgd2FrZXVwKSBy ZXQgPSBfX3N5c2NhbGwoU1lTX2Z1dGV4LCAmbXR4LT5fbXRfbGNrLCBGVVRFWF9XQUtFfFRIUkRf UFJJVkFURSwgMSk7DQorCX0NCisJcmV0dXJuICByZXQgPCAwID8gdGhyZF9lcnJvciA6IHRocmRf c3VjY2VzczsNCit9DQorDQoraW50IGNuZF9icm9hZGNhc3QoY25kX3QgKiBjb25kKQ0KK3sNCisJ aW50IHJldCA9IHRocmRfc3VjY2VzczsNCisJLyogQ3JpdGljYWwgc2VjdGlvbiBwcm90ZWN0ZWQg Ynkgc3BpbiBsb2NrICovDQorCWFfc3BsY2soJmNvbmQtPl9jeF9sb2NrKTsNCisJX19jbmRfdCAq IGMgPSBjb25kLT5fY3hfY25kOw0KKwkvKiBJZiB0aGVyZSBhcmUgd2FpdGVycywgYWxsIHdpbGwg YmUgd2FpdGluZyBvbiBjLiBTaW5jZSB3ZSBob2xkIHRoZQ0KKwkgICBzcGlubG9jayBubyBvdGhl ciB3YWl0ZXJzIGNhbiBzbmVhayBpbi4gTG9jayB0aGVtIHBlcm1hbmVudGx5IG91dA0KKwkgICBv ZiB1c2luZyB0aGlzIG9uZSwgaGVyZS4gQXMgYSBjb25zZXF1ZW5jZSB3ZSBkb24ndCBoYXZlIGlu YyB0aGUNCisJICAgcmVmZXJlbmNlIGNvdW50OiB0aGVpciBpcyBubyBjaGFuZ2UgaW4gdGhlIHRv dGFsIG51bWJlciBvZg0KKwkgICByZWZlcmVuY2VzLiAqLw0KKwljb25kLT5fY3hfY25kID0gMDsN CisJYV9zcHVubCgmY29uZC0+X2N4X2xvY2spOw0KKw0KKwkvKiBJZiBjIGlzIDAsIHRoZXJlIGhh dmVuJ3QgYmVlbiBhbnkgd2FpdGVycywgeWV0LCBub3RoaW5nIHRvIGRvLiAqLw0KKwlpZiAoYykg ew0KKwkJcmV0ID0gX19jbmRfYnJvYWRjYXN0KGMpOw0KKwkJX19jbmRfdW5yZWYoYyk7DQorCX0N CisJcmV0dXJuIHJldDsNCit9DQpkaWZmIC0tZ2l0IGEvc3JjL3RocmVhZC9jbmRfZGVzdHJveS5j IGIvc3JjL3RocmVhZC9jbmRfZGVzdHJveS5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXgg MDAwMDAwMC4uNDYzYjEzNw0KLS0tIC9kZXYvbnVsbA0KKysrIGIvc3JjL3RocmVhZC9jbmRfZGVz dHJveS5jDQpAQCAtMCwwICsxLDEzIEBADQorI2luY2x1ZGUgInB0aHJlYWRfaW1wbC5oIg0KKyNp bmNsdWRlIDx0aHJlYWRzLmg+DQorDQordm9pZCBjbmRfZGVzdHJveShjbmRfdCAqY29uZCkNCit7 DQorCS8qIENyaXRpY2FsIHNlY3Rpb24gcHJvdGVjdGVkIGJ5IHNwaW4gbG9jayAqLw0KKwlhX3Nw bGNrKCZjb25kLT5fY3hfbG9jayk7DQorCV9fY25kX3QgKiByZXQgPSBjb25kLT5fY3hfY25kOw0K Kwljb25kLT5fY3hfY25kID0gMDsNCisJYV9zcHVubCgmY29uZC0+X2N4X2xvY2spOw0KKw0KKwlp ZiAocmV0KSBfX2NuZF91bnJlZihyZXQpOw0KK30NCmRpZmYgLS1naXQgYS9zcmMvdGhyZWFkL2Nu ZF9pbml0LmMgYi9zcmMvdGhyZWFkL2NuZF9pbml0LmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQpp bmRleCAwMDAwMDAwLi45YmNkMDUxDQotLS0gL2Rldi9udWxsDQorKysgYi9zcmMvdGhyZWFkL2Nu ZF9pbml0LmMNCkBAIC0wLDAgKzEsMTIgQEANCisjaW5jbHVkZSAicHRocmVhZF9pbXBsLmgiDQor I2luY2x1ZGUgPHRocmVhZHMuaD4NCisNCitpbnQgY25kX2luaXQoY25kX3QgKiBjKQ0KK3sNCisJ KmMgPSAoY25kX3QpIHsNCisJCTANCisJfTsNCisJX19jbmRfdCogcmV0ID0gX19jbmRfZ2V0cmVm KGMsIDApOw0KKwlfX2NuZF91bnJlZihyZXQpOw0KKwlyZXR1cm4gcmV0ID8gdGhyZF9zdWNjZXNz IDogdGhyZF9ub21lbTsNCit9DQpkaWZmIC0tZ2l0IGEvc3JjL3RocmVhZC9jbmRfc2lnbmFsLmMg Yi9zcmMvdGhyZWFkL2NuZF9zaWduYWwuYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAw MDAwMDAuLjllZDc2NWINCi0tLSAvZGV2L251bGwNCisrKyBiL3NyYy90aHJlYWQvY25kX3NpZ25h bC5jDQpAQCAtMCwwICsxLDI1IEBADQorI2luY2x1ZGUgInB0aHJlYWRfaW1wbC5oIg0KKyNpbmNs dWRlIDx0aHJlYWRzLmg+DQorDQoraW50IGNuZF9zaWduYWwoY25kX3QgKiBjb25kKSB7DQorCWlu dCByZXQgPSB0aHJkX3N1Y2Nlc3M7DQorCS8qIENyaXRpY2FsIHNlY3Rpb24gcHJvdGVjdGVkIGJ5 IHNwaW4gbG9jayAqLw0KKwlhX3NwbGNrKCZjb25kLT5fY3hfbG9jayk7DQorCV9fY25kX3QgKiBj ID0gY29uZC0+X2N4X2NuZDsNCisJaWYgKGMpIHsNCisJCS8qIElmIHRoZSBtdHggaXNuJ3Qgc2V0 LCB0aGlzIF9fY25kX3QgaGFzIG5ldmVyIGJlZW4gdXNlZCBmb3IgYQ0KKwkJICAgd2FpdCwgbm90 aGluZyB0byBkby4gKi8NCisJCWlmICghYy0+bXR4KSBjID0gMDsNCisJCWVsc2UgX19jbmRfYWRk cmVmKGMpOw0KKwl9DQorCWFfc3B1bmwoJmNvbmQtPl9jeF9sb2NrKTsNCisNCisJLyogSWYgYyBp cyAwLCB0aGVyZSBoYXZlbid0IGJlZW4gYW55IHdhaXRlcnMsIHlldCwgbm90aGluZyB0byBkby4g Ki8NCisJaWYgKGMpIHsNCisJCWFfaW5jKCZjLT50b2spOw0KKwkJcmV0ID0gX19zeXNjYWxsKFNZ U19mdXRleCwgJmMtPnRvaywgRlVURVhfV0FLRXxUSFJEX1BSSVZBVEUsIDEpOw0KKwkJcmV0ID0g KHJldCA8IDApID8gdGhyZF9lcnJvciA6IHRocmRfc3VjY2VzczsNCisJCV9fY25kX3VucmVmKGMp Ow0KKwl9DQorCXJldHVybiByZXQ7DQorfQ0KZGlmZiAtLWdpdCBhL3NyYy90aHJlYWQvY25kX3Rp bWVkd2FpdC5jIGIvc3JjL3RocmVhZC9jbmRfdGltZWR3YWl0LmMNCm5ldyBmaWxlIG1vZGUgMTAw NjQ0DQppbmRleCAwMDAwMDAwLi5iMzQ2MDRlDQotLS0gL2Rldi9udWxsDQorKysgYi9zcmMvdGhy ZWFkL2NuZF90aW1lZHdhaXQuYw0KQEAgLTAsMCArMSw1NiBAQA0KKyNpbmNsdWRlICJwdGhyZWFk X2ltcGwuaCINCisjaW5jbHVkZSA8dGhyZWFkcy5oPg0KKw0KK3ZvaWQgX19wdGhyZWFkX3Rlc3Rj YW5jZWwodm9pZCk7DQoraW50IF9fY2xvY2tfZ2V0dGltZShjbG9ja2lkX3QgY2xrLCBzdHJ1Y3Qg dGltZXNwZWMgKnRzKTsNCitpbnQgX190aHJkX3dhaXQodm9sYXRpbGUgaW50ICphZGRyLCBpbnQg dmFsLCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKmF0KTsNCisNCitzdGF0aWMgaW50IF9fY25kX3Rp bWVkd2FpdChfX2NuZF90ICpyZXN0cmljdCBjLCBfX210eF90ICpyZXN0cmljdCBtdXQsIGNvbnN0 IHN0cnVjdCB0aW1lc3BlYyAqcmVzdHJpY3QgdHMpDQorew0KKwlpbnQgZSwgcjsNCisJX19tdHhf dW5sb2NrKG11dCk7DQorDQorCWRvIHsNCisJCWUgPSAwOw0KKwkJLyogZ2V0IGEgdG9rZW4gaWYg c29tZSBpcyBhdmFpbGFibGUgKi8NCisJCWZvciAoaW50IHRva2VuID0gYy0+dG9rOyB0b2tlbiA+ IDA7KSB7DQorCQkJaW50IHByZXYgPSBhX2NhcygmYy0+dG9rLCB0b2tlbiwgdG9rZW4gLSAxKTsN CisJCQlpZiAocHJldiA9PSB0b2tlbikgew0KKwkJCQlnb3RvIFJFTE9DSzsNCisJCQl9DQorCQkJ dG9rZW4gPSBwcmV2Ow0KKwkJfQ0KKw0KKwkJZSA9IF9fdGhyZF93YWl0KCZjLT50b2ssIDAsIHRz KTsNCisNCisJfSB3aGlsZSAoIWUgfHwgZSA9PSBFSU5UUiB8fCBlID09IEVXT1VMREJMT0NLKTsN CisNCisJaWYgKGUgIT0gRVRJTUVET1VUKSByZXR1cm4gdGhyZF9lcnJvcjsNCisNCitSRUxPQ0s6 DQorCWlmICgocj1fX210eF9sb2NrKG11dCkpKSByZXR1cm4gcjsNCisNCisJc3dpdGNoIChlKSB7 DQorCWNhc2UgMDoNCisJCXJldHVybiB0aHJkX3N1Y2Nlc3M7DQorCWNhc2UgRVRJTUVET1VUOg0K KwkJcmV0dXJuIHRocmRfdGltZWRvdXQ7DQorCWRlZmF1bHQ6DQorCQlyZXR1cm4gdGhyZF9lcnJv cjsNCisJfQ0KK30NCisNCitpbnQgY25kX3RpbWVkd2FpdChjbmRfdCAqcmVzdHJpY3QgY29uZCwg bXR4X3QgKnJlc3RyaWN0IG11dCwgY29uc3Qgc3RydWN0IHRpbWVzcGVjICpyZXN0cmljdCB0cykN Cit7DQorCWludCByZXQgPSB0aHJkX2Vycm9yOw0KKwlfX210eF90ICogbSA9IF9fbXR4X2dldHJl ZihtdXQpOw0KKwlpZiAobSkgew0KKwkJX19jbmRfdCAqIGMgPSBfX2NuZF9nZXRyZWYoY29uZCwg bSk7DQorCQlpZiAoYykgew0KKwkJCXJldCA9IF9fY25kX3RpbWVkd2FpdChjLCBtLCB0cyk7DQor CQkJX19jbmRfdW5yZWYoYyk7DQorCQl9DQorCQlfX210eF91bnJlZihtKTsNCisJfQ0KKwlyZXR1 cm4gcmV0Ow0KK30NCmRpZmYgLS1naXQgYS9zcmMvdGhyZWFkL2NuZF93YWl0LmMgYi9zcmMvdGhy ZWFkL2NuZF93YWl0LmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwLi45MWU4 OWRiDQotLS0gL2Rldi9udWxsDQorKysgYi9zcmMvdGhyZWFkL2NuZF93YWl0LmMNCkBAIC0wLDAg KzEsMTAgQEANCisjaW5jbHVkZSA8dGhyZWFkcy5oPg0KKw0KK2ludCBjbmRfd2FpdChjbmRfdCAq Y29uZCwgbXR4X3QgKm11dGV4KQ0KK3sNCisJLyogQ2FsbGluZyBjbmRfdGltZWR3YWl0IHdpdGgg YSBudWxsIHBvaW50ZXIgaXMgYW4NCisJICAgZXh0ZW5zaW9uLiBTdWNoIGEgY2FsbCBpcyBjb252 ZW5pZW50LCBoZXJlIHNpbmNlIGl0IGF2b2lkcyB0bw0KKwkgICByZXBlYXQgdGhlIGNhc2UgYW5h bHlzaXMgdGhhdCBpcyBhbHJlYWR5IGRvbmUgZm9yDQorCSAgIGNuZF90aW1lZHdhaXQuICovDQor CXJldHVybiBjbmRfdGltZWR3YWl0KGNvbmQsIG11dGV4LCAwKTsNCit9DQpkaWZmIC0tZ2l0IGEv c3JjL3RocmVhZC9tdHhfZGVzdHJveS5jIGIvc3JjL3RocmVhZC9tdHhfZGVzdHJveS5jDQpuZXcg ZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uYzhlNGU2OA0KLS0tIC9kZXYvbnVsbA0K KysrIGIvc3JjL3RocmVhZC9tdHhfZGVzdHJveS5jDQpAQCAtMCwwICsxLDExIEBADQorI2luY2x1 ZGUgInB0aHJlYWRfaW1wbC5oIg0KKyNpbmNsdWRlIDx0aHJlYWRzLmg+DQorDQordm9pZCAobXR4 X2Rlc3Ryb3kpKG10eF90ICptdXQpIHsNCisJLyogQ3JpdGljYWwgc2VjdGlvbiBwcm90ZWN0ZWQg Ynkgc3BpbiBsb2NrICovDQorCWFfc3BsY2soJm11dC0+X214X2xvY2spOw0KKwlfX210eF90ICog cmV0ID0gbXV0LT5fbXhfbXR4Ow0KKwltdXQtPl9teF9tdHggPSAwOw0KKwlhX3NwdW5sKCZtdXQt Pl9teF9sb2NrKTsNCisJaWYgKHJldCkgX19tdHhfdW5yZWYocmV0KTsNCit9DQpkaWZmIC0tZ2l0 IGEvc3JjL3RocmVhZC9tdHhfaW5pdC5jIGIvc3JjL3RocmVhZC9tdHhfaW5pdC5jDQpuZXcgZmls ZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uNDBjYzZjMQ0KLS0tIC9kZXYvbnVsbA0KKysr IGIvc3JjL3RocmVhZC9tdHhfaW5pdC5jDQpAQCAtMCwwICsxLDEyIEBADQorI2luY2x1ZGUgInB0 aHJlYWRfaW1wbC5oIg0KKyNpbmNsdWRlIDx0aHJlYWRzLmg+DQorDQoraW50IG10eF9pbml0KG10 eF90ICogbSwgaW50IHR5cGUpDQorew0KKwkqbSA9IChtdHhfdCkgew0KKwkJLl9teF90eXBlID0g KCh0eXBlJm10eF9yZWN1cnNpdmUpID8gUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkUgOiAwKSwNCisJ fTsNCisJX19tdHhfdCogcmV0ID0gX19tdHhfZ2V0cmVmKG0pOw0KKwlfX210eF91bnJlZihyZXQp Ow0KKwlyZXR1cm4gcmV0ID8gdGhyZF9zdWNjZXNzIDogdGhyZF9lcnJvcjsNCit9DQpkaWZmIC0t Z2l0IGEvc3JjL3RocmVhZC9tdHhfbG9jay5jIGIvc3JjL3RocmVhZC9tdHhfbG9jay5jDQpuZXcg ZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uNTliYzFiMg0KLS0tIC9kZXYvbnVsbA0K KysrIGIvc3JjL3RocmVhZC9tdHhfbG9jay5jDQpAQCAtMCwwICsxLDEzIEBADQorI2luY2x1ZGUg InB0aHJlYWRfaW1wbC5oIg0KKyNpbmNsdWRlIDx0aHJlYWRzLmg+DQorDQoraW50IF9fbXR4X2xv Y2soX19tdHhfdCAqbXV0KQ0KK3sNCisJcmV0dXJuIF9fbXR4X3RpbWVkbG9jayhtdXQsIDApOw0K K30NCisNCitpbnQgbXR4X2xvY2sobXR4X3QgKm11dCkNCit7DQorCV9fVEhSRF9BQklfTUFSSzsN CisJcmV0dXJuIG10eF90aW1lZGxvY2sobXV0LCAwKTsNCit9DQpkaWZmIC0tZ2l0IGEvc3JjL3Ro cmVhZC9tdHhfdGltZWRsb2NrLmMgYi9zcmMvdGhyZWFkL210eF90aW1lZGxvY2suYw0KbmV3IGZp bGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAuLmNmNTI3NDkNCi0tLSAvZGV2L251bGwNCisr KyBiL3NyYy90aHJlYWQvbXR4X3RpbWVkbG9jay5jDQpAQCAtMCwwICsxLDQ2IEBADQorI2luY2x1 ZGUgInB0aHJlYWRfaW1wbC5oIg0KKyNpbmNsdWRlIDx0aHJlYWRzLmg+DQorDQoraW50IF9fdGhy ZF93YWl0KHZvbGF0aWxlIGludCAqYWRkciwgaW50IHZhbCwgY29uc3Qgc3RydWN0IHRpbWVzcGVj ICphdCk7DQorDQoraW50IF9fbXR4X3RpbWVkbG9jayhfX210eF90ICpyZXN0cmljdCBtdHgsIGNv bnN0IHN0cnVjdCB0aW1lc3BlYyAqcmVzdHJpY3QgYXQpDQorew0KKwlpbnQgciwgdDsNCisNCisJ aWYgKG10eC0+X210X3R5cCA9PSBQVEhSRUFEX01VVEVYX05PUk1BTCAmJiAhYV9jYXMoJm10eC0+ X210X2xjaywgMCwgdGhyZF9idXN5KSkNCisJCXJldHVybiB0aHJkX3N1Y2Nlc3M7DQorDQorCWZv ciAoOzspIHsNCisJCXI9X19tdHhfdHJ5bG9jayhtdHgpOw0KKwkJaWYgKHIgIT0gdGhyZF9idXN5 KSByZXR1cm4gcjsNCisJCWVsc2Ugew0KKwkJCWlmICghKHI9bXR4LT5fbXRfbGNrKSB8fCAociYw eDQwMDAwMDAwKSkgY29udGludWU7DQorCQkJYV9pbmMoJm10eC0+X210X3d0cyk7DQorCQkJdCA9 IHIgfCAweDgwMDAwMDAwOw0KKwkJCWFfY2FzKCZtdHgtPl9tdF9sY2ssIHIsIHQpOw0KKwkJCXIg PSBfX3RocmRfd2FpdCgmbXR4LT5fbXRfbGNrLCB0LCBhdCk7DQorCQkJYV9kZWMoJm10eC0+X210 X3d0cyk7DQorCQkJc3dpdGNoIChyKSB7DQorCQkJY2FzZSAwOg0KKwkJCQlicmVhazsNCisJCQlj YXNlIEVJTlRSOg0KKwkJCQlicmVhazsNCisJCQljYXNlIEVXT1VMREJMT0NLOg0KKwkJCQlicmVh azsNCisJCQljYXNlIEVUSU1FRE9VVDoNCisJCQkJcmV0dXJuIHRocmRfdGltZWRvdXQ7DQorCQkJ ZGVmYXVsdDoNCisJCQkJcmV0dXJuIHRocmRfZXJyb3I7DQorCQkJfQ0KKwkJfQ0KKwl9DQorfQ0K Kw0KK2ludCBtdHhfdGltZWRsb2NrKG10eF90ICpyZXN0cmljdCBtdXQsIGNvbnN0IHN0cnVjdCB0 aW1lc3BlYyAqcmVzdHJpY3QgYXQpDQorew0KKwlfX210eF90ICogbSA9IF9fbXR4X2dldHJlZiht dXQpOw0KKwlpZiAoIW0pIHJldHVybiB0aHJkX2Vycm9yOw0KKwlpbnQgcmV0ID0gX19tdHhfdGlt ZWRsb2NrKG0sIGF0KTsNCisJX19tdHhfdW5yZWYobSk7DQorCXJldHVybiByZXQ7DQorfQ0KZGlm ZiAtLWdpdCBhL3NyYy90aHJlYWQvbXR4X3RyeWxvY2suYyBiL3NyYy90aHJlYWQvbXR4X3RyeWxv Y2suYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAuLjg1MmZhMTUNCi0tLSAv ZGV2L251bGwNCisrKyBiL3NyYy90aHJlYWQvbXR4X3RyeWxvY2suYw0KQEAgLTAsMCArMSwzMyBA QA0KKyNpbmNsdWRlICJwdGhyZWFkX2ltcGwuaCINCisjaW5jbHVkZSA8dGhyZWFkcy5oPg0KKw0K K2ludCBfX210eF90cnlsb2NrKF9fbXR4X3QgKm10eCkNCit7DQorCWludCB0aWQsIG9sZCwgb3du LCByZXQgPSAwOw0KKwlwdGhyZWFkX3Qgc2VsZjsNCisJaWYgKG10eC0+X210X3R5cCA9PSBQVEhS RUFEX01VVEVYX05PUk1BTCkgew0KKwkJcmV0dXJuIGFfY2FzKCZtdHgtPl9tdF9sY2ssIDAsIHRo cmRfYnVzeSkgJiB0aHJkX2J1c3k7DQorCX0gZWxzZSB7DQorCQlzZWxmID0gX19wdGhyZWFkX3Nl bGYoKTsNCisJCXRpZCA9IHNlbGYtPnRpZDsNCisJCW9sZCA9IG10eC0+X210X2xjazsNCisJCW93 biA9IG9sZCAmIDB4N2ZmZmZmZmY7DQorCQlpZiAob3duID09IHRpZCkgew0KKwkJCWlmICgodW5z aWduZWQpbXR4LT5fbXRfY250ID49IElOVF9NQVgpIHJldHVybiB0aHJkX2Vycm9yOw0KKwkJCWVs c2UgbXR4LT5fbXRfY250Kys7DQorCQl9IGVsc2Ugew0KKwkJCWlmICgob3duICYmICEob3duICYg MHg0MDAwMDAwMCkpIHx8IGFfY2FzKCZtdHgtPl9tdF9sY2ssIG9sZCwgdGlkKSE9b2xkKQ0KKwkJ CQlyZXR1cm4gdGhyZF9idXN5Ow0KKwkJfQ0KKwl9DQorCXJldHVybiB0aHJkX3N1Y2Nlc3M7DQor fQ0KKw0KK2ludCBtdHhfdHJ5bG9jayhtdHhfdCAqbXV0KQ0KK3sNCisJX19tdHhfdCAqIG0gPSBf X210eF9nZXRyZWYobXV0KTsNCisJaWYgKCFtKSByZXR1cm4gdGhyZF9lcnJvcjsNCisJaW50IHJl dCA9IF9fbXR4X3RyeWxvY2sobSk7DQorCV9fbXR4X3VucmVmKG0pOw0KKwlyZXR1cm4gcmV0Ow0K K30NCmRpZmYgLS1naXQgYS9zcmMvdGhyZWFkL210eF91bmxvY2suYyBiL3NyYy90aHJlYWQvbXR4 X3VubG9jay5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uNWM5OGIwNw0K LS0tIC9kZXYvbnVsbA0KKysrIGIvc3JjL3RocmVhZC9tdHhfdW5sb2NrLmMNCkBAIC0wLDAgKzEs MjggQEANCisjaW5jbHVkZSAicHRocmVhZF9pbXBsLmgiDQorI2luY2x1ZGUgPHRocmVhZHMuaD4N CisNCitpbnQgX19tdHhfdW5sb2NrKF9fbXR4X3QgKm10eCkNCit7DQorCWludCByZXQgPSB0aHJk X3N1Y2Nlc3M7DQorCWlmICgobXR4LT5fbXRfdHlwJjMpID09IFBUSFJFQURfTVVURVhfUkVDVVJT SVZFICYmIG10eC0+X210X2NudCkgew0KKwkJaWYgKChtdHgtPl9tdF9sY2smMHgxZmZmZmZmZikg IT0gX19wdGhyZWFkX3NlbGYoKS0+dGlkKQ0KKwkJCXJldCA9IHRocmRfZXJyb3I7DQorCQkvKiBf bV9jb3VudCBpcyB0aGUgY291bnQgb2YgYWRkaXRpb25hbCBsb2Nrcywgbm8gbmVlZCB0byByZWFs IHVubG9jayAqLw0KKwkJZWxzZSAtLW10eC0+X210X2NudDsNCisJfSBlbHNlIHsNCisJCWlmIChh X3N3YXAoJm10eC0+X210X2xjaywgMCk8MCB8fCBtdHgtPl9tdF93dHMpDQorCQkJX19zeXNjYWxs KFNZU19mdXRleCwgJm10eC0+X210X2xjaywgRlVURVhfV0FLRXxUSFJEX1BSSVZBVEUsIDEpOw0K Kwl9DQorCXJldHVybiByZXQ7DQorfQ0KKw0KK2ludCBtdHhfdW5sb2NrKG10eF90ICptdXQpDQor ew0KKwlpbnQgcmV0ID0gdGhyZF9lcnJvcjsNCisJX19tdHhfdCAqIG0gPSBfX210eF9nZXRyZWYo bXV0KTsNCisJaWYgKG0pIHsNCisJCXJldCA9IF9fbXR4X3VubG9jayhtKTsNCisJCV9fbXR4X3Vu cmVmKG0pOw0KKwl9DQorCXJldHVybiByZXQ7DQorfQ0KZGlmZiAtLWdpdCBhL3NyYy90aHJlYWQv cHRocmVhZF9jb25kX3RpbWVkd2FpdC5jIGIvc3JjL3RocmVhZC9wdGhyZWFkX2NvbmRfdGltZWR3 YWl0LmMNCmluZGV4IDk5ZDYyY2MuLmY0M2NhOWUgMTAwNjQ0DQotLS0gYS9zcmMvdGhyZWFkL3B0 aHJlYWRfY29uZF90aW1lZHdhaXQuYw0KKysrIGIvc3JjL3RocmVhZC9wdGhyZWFkX2NvbmRfdGlt ZWR3YWl0LmMNCkBAIC0xLDUgKzEsNyBAQA0KICNpbmNsdWRlICJwdGhyZWFkX2ltcGwuaCINCiAN Cit2b2lkIF9fcHRocmVhZF90ZXN0Y2FuY2VsKHZvaWQpOw0KKw0KIHN0cnVjdCBjbSB7DQogCXB0 aHJlYWRfY29uZF90ICpjOw0KIAlwdGhyZWFkX211dGV4X3QgKm07DQpAQCAtNDcsNyArNDksNyBA QCBpbnQgcHRocmVhZF9jb25kX3RpbWVkd2FpdChwdGhyZWFkX2NvbmRfdCAqcmVzdHJpY3QgYywg cHRocmVhZF9tdXRleF90ICpyZXN0cmljdA0KIAlpZiAodHMgJiYgdHMtPnR2X25zZWMgPj0gMTAw MDAwMDAwMFVMKQ0KIAkJcmV0dXJuIEVJTlZBTDsNCiANCi0JcHRocmVhZF90ZXN0Y2FuY2VsKCk7 DQorCV9fcHRocmVhZF90ZXN0Y2FuY2VsKCk7DQogDQogCWFfaW5jKCZjLT5fY193YWl0ZXJzKTsN CiANCmRpZmYgLS1naXQgYS9zcmMvdGhyZWFkL3B0aHJlYWRfY3JlYXRlLmMgYi9zcmMvdGhyZWFk L3B0aHJlYWRfY3JlYXRlLmMNCmluZGV4IGU3N2U1NGEuLmQxOWQ3OGIgMTAwNjQ0DQotLS0gYS9z cmMvdGhyZWFkL3B0aHJlYWRfY3JlYXRlLmMNCisrKyBiL3NyYy90aHJlYWQvcHRocmVhZF9jcmVh dGUuYw0KQEAgLTMsOTcgKzMsMjEgQEANCiAjaW5jbHVkZSAic3RkaW9faW1wbC5oIg0KICNpbmNs dWRlICJsaWJjLmgiDQogI2luY2x1ZGUgPHN5cy9tbWFuLmg+DQorI2luY2x1ZGUgPHRocmVhZHMu aD4NCisNCit2b2lkICpfX21tYXAodm9pZCAqLCBzaXplX3QsIGludCwgaW50LCBpbnQsIG9mZl90 KTsNCitpbnQgX19tdW5tYXAodm9pZCAqLCBzaXplX3QpOw0KK2ludCBfX21wcm90ZWN0KHZvaWQg Kiwgc2l6ZV90LCBpbnQpOw0KK3ZvaWQgX190aHJlYWRfZW5hYmxlKHZvaWQpOw0KK19Ob3JldHVy biB2b2lkIF9fcHRocmVhZF9leGl0KHZvaWQgKik7DQordm9pZCAqX19jb3B5X3Rscyh1bnNpZ25l ZCBjaGFyICopOw0KK2V4dGVybiB2b2xhdGlsZSBzaXplX3QgX19wdGhyZWFkX3RzZF9zaXplOw0K IA0KIHN0YXRpYyB2b2lkIGR1bW15XzAoKQ0KIHsNCiB9DQogd2Vha19hbGlhcyhkdW1teV8wLCBf X2FjcXVpcmVfcHRjKTsNCiB3ZWFrX2FsaWFzKGR1bW15XzAsIF9fcmVsZWFzZV9wdGMpOw0KLXdl YWtfYWxpYXMoZHVtbXlfMCwgX19wdGhyZWFkX3RzZF9ydW5fZHRvcnMpOw0KLQ0KLV9Ob3JldHVy biB2b2lkIHB0aHJlYWRfZXhpdCh2b2lkICpyZXN1bHQpDQotew0KLQlwdGhyZWFkX3Qgc2VsZiA9 IF9fcHRocmVhZF9zZWxmKCk7DQotCXNpZ3NldF90IHNldDsNCi0NCi0Jc2VsZi0+cmVzdWx0ID0g cmVzdWx0Ow0KLQ0KLQl3aGlsZSAoc2VsZi0+Y2FuY2VsYnVmKSB7DQotCQl2b2lkICgqZikodm9p ZCAqKSA9IHNlbGYtPmNhbmNlbGJ1Zi0+X19mOw0KLQkJdm9pZCAqeCA9IHNlbGYtPmNhbmNlbGJ1 Zi0+X194Ow0KLQkJc2VsZi0+Y2FuY2VsYnVmID0gc2VsZi0+Y2FuY2VsYnVmLT5fX25leHQ7DQot CQlmKHgpOw0KLQl9DQotDQotCV9fcHRocmVhZF90c2RfcnVuX2R0b3JzKCk7DQotDQotCV9fbG9j ayhzZWxmLT5leGl0bG9jayk7DQotDQotCS8qIE1hcmsgdGhpcyB0aHJlYWQgZGVhZCBiZWZvcmUg ZGVjcmVtZW50aW5nIGNvdW50ICovDQotCV9fbG9jayhzZWxmLT5raWxsbG9jayk7DQotCXNlbGYt PmRlYWQgPSAxOw0KLQ0KLQkvKiBCbG9jayBhbGwgc2lnbmFscyBiZWZvcmUgZGVjcmVtZW50aW5n IHRoZSBsaXZlIHRocmVhZCBjb3VudC4NCi0JICogVGhpcyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJl IHRoYXQgZHluYW1pY2FsbHkgYWxsb2NhdGVkIFRMUw0KLQkgKiBpcyBub3QgdW5kZXItYWxsb2Nh dGVkL292ZXItY29tbWl0dGVkLCBhbmQgcG9zc2libHkgZm9yIG90aGVyDQotCSAqIHJlYXNvbnMg YXMgd2VsbC4gKi8NCi0JX19ibG9ja19hbGxfc2lncygmc2V0KTsNCi0NCi0JLyogV2FpdCB0byB1 bmxvY2sgdGhlIGtpbGwgbG9jaywgd2hpY2ggZ292ZXJucyBmdW5jdGlvbnMgbGlrZQ0KLQkgKiBw dGhyZWFkX2tpbGwgd2hpY2ggdGFyZ2V0IGEgdGhyZWFkIGlkLCB1bnRpbCBzaWduYWxzIGhhdmUN Ci0JICogYmVlbiBibG9ja2VkLiBUaGlzIHByZWNsdWRlcyBvYnNlcnZhdGlvbiBvZiB0aGUgdGhy ZWFkIGlkDQotCSAqIGFzIGEgbGl2ZSB0aHJlYWQgKHdpdGggYXBwbGljYXRpb24gY29kZSBydW5u aW5nIGluIGl0KSBhZnRlcg0KLQkgKiB0aGUgdGhyZWFkIHdhcyByZXBvcnRlZCBkZWFkIGJ5IEVT UkNIIGJlaW5nIHJldHVybmVkLiAqLw0KLQlfX3VubG9jayhzZWxmLT5raWxsbG9jayk7DQotDQot CS8qIEl0J3MgaW1wb3NzaWJsZSB0byBkZXRlcm1pbmUgd2hldGhlciB0aGlzIGlzICJ0aGUgbGFz dCB0aHJlYWQiDQotCSAqIHVudGlsIHBlcmZvcm1pbmcgdGhlIGF0b21pYyBkZWNyZW1lbnQsIHNp bmNlIG11bHRpcGxlIHRocmVhZHMNCi0JICogY291bGQgZXhpdCBhdCB0aGUgc2FtZSB0aW1lLiBG b3IgdGhlIGxhc3QgdGhyZWFkLCByZXZlcnQgdGhlDQotCSAqIGRlY3JlbWVudCBhbmQgdW5ibG9j ayBzaWduYWxzIHRvIGdpdmUgdGhlIGF0ZXhpdCBoYW5kbGVycyBhbmQNCi0JICogc3RkaW8gY2xl YW51cCBjb2RlIGEgY29uc2lzdGVudCBzdGF0ZS4gKi8NCi0JaWYgKGFfZmV0Y2hfYWRkKCZsaWJj LnRocmVhZHNfbWludXNfMSwgLTEpPT0wKSB7DQotCQlsaWJjLnRocmVhZHNfbWludXNfMSA9IDA7 DQotCQlfX3Jlc3RvcmVfc2lncygmc2V0KTsNCi0JCWV4aXQoMCk7DQotCX0NCi0NCi0JaWYgKHNl bGYtPmxvY2FsZSAhPSAmbGliYy5nbG9iYWxfbG9jYWxlKSB7DQotCQlhX2RlYygmbGliYy51c2Vs b2NhbGVfY250KTsNCi0JCWlmIChzZWxmLT5sb2NhbGUtPmN0eXBlX3V0ZjgpDQotCQkJYV9kZWMo JmxpYmMuYnl0ZWxvY2FsZV9jbnRfbWludXNfMSk7DQotCX0NCi0NCi0JaWYgKHNlbGYtPmRldGFj aGVkICYmIHNlbGYtPm1hcF9iYXNlKSB7DQotCQkvKiBEZXRhY2hlZCB0aHJlYWRzIG11c3QgYXZv aWQgdGhlIGtlcm5lbCBjbGVhcl9jaGlsZF90aWQNCi0JCSAqIGZlYXR1cmUsIHNpbmNlIHRoZSB2 aXJ0dWFsIGFkZHJlc3Mgd2lsbCBoYXZlIGJlZW4NCi0JCSAqIHVubWFwcGVkIGFuZCBwb3NzaWJs eSBhbHJlYWR5IHJldXNlZCBieSBhIG5ldyBtYXBwaW5nDQotCQkgKiBhdCB0aGUgdGltZSB0aGUg a2VybmVsIHdvdWxkIHBlcmZvcm0gdGhlIHdyaXRlLiBJbg0KLQkJICogdGhlIGNhc2Ugb2YgdGhy ZWFkcyB0aGF0IHN0YXJ0ZWQgb3V0IGRldGFjaGVkLCB0aGUNCi0JCSAqIGluaXRpYWwgY2xvbmUg ZmxhZ3MgYXJlIGNvcnJlY3QsIGJ1dCBpZiB0aGUgdGhyZWFkIHdhcw0KLQkJICogZGV0YWNoZWQg bGF0ZXIgKD09IDIpLCB3ZSBuZWVkIHRvIGNsZWFyIGl0IGhlcmUuICovDQotCQlpZiAoc2VsZi0+ ZGV0YWNoZWQgPT0gMikgX19zeXNjYWxsKFNZU19zZXRfdGlkX2FkZHJlc3MsIDApOw0KLQ0KLQkJ LyogVGhlIGZvbGxvd2luZyBjYWxsIHVubWFwcyB0aGUgdGhyZWFkJ3Mgc3RhY2sgbWFwcGluZw0K LQkJICogYW5kIHRoZW4gZXhpdHMgd2l0aG91dCB0b3VjaGluZyB0aGUgc3RhY2suICovDQotCQlf X3VubWFwc2VsZihzZWxmLT5tYXBfYmFzZSwgc2VsZi0+bWFwX3NpemUpOw0KLQl9DQotDQotCWZv ciAoOzspIF9fc3lzY2FsbChTWVNfZXhpdCwgMCk7DQotfQ0KLQ0KLXZvaWQgX19kb19jbGVhbnVw X3B1c2goc3RydWN0IF9fcHRjYiAqY2IpDQotew0KLQlpZiAoIWxpYmMuaGFzX3RocmVhZF9wb2lu dGVyKSByZXR1cm47DQotCXN0cnVjdCBwdGhyZWFkICpzZWxmID0gX19wdGhyZWFkX3NlbGYoKTsN Ci0JY2ItPl9fbmV4dCA9IHNlbGYtPmNhbmNlbGJ1ZjsNCi0Jc2VsZi0+Y2FuY2VsYnVmID0gY2I7 DQotfQ0KLQ0KLXZvaWQgX19kb19jbGVhbnVwX3BvcChzdHJ1Y3QgX19wdGNiICpjYikNCi17DQot CWlmICghbGliYy5oYXNfdGhyZWFkX3BvaW50ZXIpIHJldHVybjsNCi0JX19wdGhyZWFkX3NlbGYo KS0+Y2FuY2VsYnVmID0gY2ItPl9fbmV4dDsNCi19DQogDQogc3RhdGljIGludCBzdGFydCh2b2lk ICpwKQ0KIHsNCkBAIC0xMTUsMjggKzM5LDEwIEBAIHN0YXRpYyBpbnQgc3RhcnQodm9pZCAqcCkN CiANCiAjZGVmaW5lIFJPVU5EKHgpICgoKHgpK1BBR0VfU0laRS0xKSYtUEFHRV9TSVpFKQ0KIA0K LS8qIHB0aHJlYWRfa2V5X2NyZWF0ZS5jIG92ZXJyaWRlcyB0aGlzICovDQotc3RhdGljIHZvbGF0 aWxlIHNpemVfdCBkdW1teSA9IDA7DQotd2Vha19hbGlhcyhkdW1teSwgX19wdGhyZWFkX3RzZF9z aXplKTsNCi1zdGF0aWMgdm9pZCAqZHVtbXlfdHNkWzFdID0geyAwIH07DQotd2Vha19hbGlhcyhk dW1teV90c2QsIF9fcHRocmVhZF90c2RfbWFpbik7DQotDQotc3RhdGljIEZJTEUgKnZvbGF0aWxl IGR1bW15X2ZpbGUgPSAwOw0KLXdlYWtfYWxpYXMoZHVtbXlfZmlsZSwgX19zdGRpbl91c2VkKTsN Ci13ZWFrX2FsaWFzKGR1bW15X2ZpbGUsIF9fc3Rkb3V0X3VzZWQpOw0KLXdlYWtfYWxpYXMoZHVt bXlfZmlsZSwgX19zdGRlcnJfdXNlZCk7DQotDQotc3RhdGljIHZvaWQgaW5pdF9maWxlX2xvY2so RklMRSAqZikNCi17DQotCWlmIChmICYmIGYtPmxvY2s8MCkgZi0+bG9jayA9IDA7DQotfQ0KLQ0K LXZvaWQgKl9fY29weV90bHModW5zaWduZWQgY2hhciAqKTsNCi0NCiBpbnQgcHRocmVhZF9jcmVh dGUocHRocmVhZF90ICpyZXN0cmljdCByZXMsIGNvbnN0IHB0aHJlYWRfYXR0cl90ICpyZXN0cmlj dCBhdHRycCwgdm9pZCAqKCplbnRyeSkodm9pZCAqKSwgdm9pZCAqcmVzdHJpY3QgYXJnKQ0KIHsN CiAJaW50IHJldDsNCi0Jc2l6ZV90IHNpemUsIGd1YXJkOw0KKwlzaXplX3Qgc2l6ZSwgZ3VhcmQg PSAwOw0KIAlzdHJ1Y3QgcHRocmVhZCAqc2VsZiwgKm5ldzsNCiAJdW5zaWduZWQgY2hhciAqbWFw ID0gMCwgKnN0YWNrID0gMCwgKnRzZCA9IDAsICpzdGFja19saW1pdDsNCiAJdW5zaWduZWQgZmxh Z3MgPSBDTE9ORV9WTSB8IENMT05FX0ZTIHwgQ0xPTkVfRklMRVMgfCBDTE9ORV9TSUdIQU5EDQpA QCAtMTQ3LDE2ICs1Myw3IEBAIGludCBwdGhyZWFkX2NyZWF0ZShwdGhyZWFkX3QgKnJlc3RyaWN0 IHJlcywgY29uc3QgcHRocmVhZF9hdHRyX3QgKnJlc3RyaWN0IGF0dHJwDQogDQogCWlmICghbGli Yy5jYW5fZG9fdGhyZWFkcykgcmV0dXJuIEVOT1NZUzsNCiAJc2VsZiA9IF9fcHRocmVhZF9zZWxm KCk7DQotCWlmICghbGliYy50aHJlYWRlZCkgew0KLQkJZm9yIChGSUxFICpmPWxpYmMub2ZsX2hl YWQ7IGY7IGY9Zi0+bmV4dCkNCi0JCQlpbml0X2ZpbGVfbG9jayhmKTsNCi0JCWluaXRfZmlsZV9s b2NrKF9fc3RkaW5fdXNlZCk7DQotCQlpbml0X2ZpbGVfbG9jayhfX3N0ZG91dF91c2VkKTsNCi0J CWluaXRfZmlsZV9sb2NrKF9fc3RkZXJyX3VzZWQpOw0KLQkJX19zeXNjYWxsKFNZU19ydF9zaWdw cm9jbWFzaywgU0lHX1VOQkxPQ0ssIFNJR1BUX1NFVCwgMCwgX05TSUcvOCk7DQotCQlzZWxmLT50 c2QgPSAodm9pZCAqKilfX3B0aHJlYWRfdHNkX21haW47DQotCQlsaWJjLnRocmVhZGVkID0gMTsN Ci0JfQ0KKwlpZiAoIWxpYmMudGhyZWFkZWQpIF9fdGhyZWFkX2VuYWJsZSgpOw0KIAlpZiAoYXR0 cnApIGF0dHIgPSAqYXR0cnA7DQogDQogCV9fYWNxdWlyZV9wdGMoKTsNCkBAIC0xODQsMTQgKzgx LDE0IEBAIGludCBwdGhyZWFkX2NyZWF0ZShwdGhyZWFkX3QgKnJlc3RyaWN0IHJlcywgY29uc3Qg cHRocmVhZF9hdHRyX3QgKnJlc3RyaWN0IGF0dHJwDQogDQogCWlmICghdHNkKSB7DQogCQlpZiAo Z3VhcmQpIHsNCi0JCQltYXAgPSBtbWFwKDAsIHNpemUsIFBST1RfTk9ORSwgTUFQX1BSSVZBVEV8 TUFQX0FOT04sIC0xLCAwKTsNCisJCQltYXAgPSBfX21tYXAoMCwgc2l6ZSwgUFJPVF9OT05FLCBN QVBfUFJJVkFURXxNQVBfQU5PTiwgLTEsIDApOw0KIAkJCWlmIChtYXAgPT0gTUFQX0ZBSUxFRCkg Z290byBmYWlsOw0KLQkJCWlmIChtcHJvdGVjdChtYXArZ3VhcmQsIHNpemUtZ3VhcmQsIFBST1Rf UkVBRHxQUk9UX1dSSVRFKSkgew0KLQkJCQltdW5tYXAobWFwLCBzaXplKTsNCisJCQlpZiAoX19t cHJvdGVjdChtYXArZ3VhcmQsIHNpemUtZ3VhcmQsIFBST1RfUkVBRHxQUk9UX1dSSVRFKSkgew0K KwkJCQlfX211bm1hcChtYXAsIHNpemUpOw0KIAkJCQlnb3RvIGZhaWw7DQogCQkJfQ0KIAkJfSBl bHNlIHsNCi0JCQltYXAgPSBtbWFwKDAsIHNpemUsIFBST1RfUkVBRHxQUk9UX1dSSVRFLCBNQVBf UFJJVkFURXxNQVBfQU5PTiwgLTEsIDApOw0KKwkJCW1hcCA9IF9fbW1hcCgwLCBzaXplLCBQUk9U X1JFQUR8UFJPVF9XUklURSwgTUFQX1BSSVZBVEV8TUFQX0FOT04sIC0xLCAwKTsNCiAJCQlpZiAo bWFwID09IE1BUF9GQUlMRUQpIGdvdG8gZmFpbDsNCiAJCX0NCiAJCXRzZCA9IG1hcCArIHNpemUg LSBfX3B0aHJlYWRfdHNkX3NpemU7DQpAQCAtMjMzLDcgKzEzMCw3IEBAIGludCBwdGhyZWFkX2Ny ZWF0ZShwdGhyZWFkX3QgKnJlc3RyaWN0IHJlcywgY29uc3QgcHRocmVhZF9hdHRyX3QgKnJlc3Ry aWN0IGF0dHJwDQogDQogCWlmIChyZXQgPCAwKSB7DQogCQlhX2RlYygmbGliYy50aHJlYWRzX21p bnVzXzEpOw0KLQkJaWYgKG1hcCkgbXVubWFwKG1hcCwgc2l6ZSk7DQorCQlpZiAobWFwKSBfX211 bm1hcChtYXAsIHNpemUpOw0KIAkJcmV0dXJuIEVBR0FJTjsNCiAJfQ0KIA0KZGlmZiAtLWdpdCBh L3NyYy90aHJlYWQvcHRocmVhZF9leGl0LmMgYi9zcmMvdGhyZWFkL3B0aHJlYWRfZXhpdC5jDQpu ZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uYzZmNGU2MA0KLS0tIC9kZXYvbnVs bA0KKysrIGIvc3JjL3RocmVhZC9wdGhyZWFkX2V4aXQuYw0KQEAgLTAsMCArMSwxMjggQEANCisj ZGVmaW5lIF9HTlVfU09VUkNFDQorI2luY2x1ZGUgInB0aHJlYWRfaW1wbC5oIg0KKyNpbmNsdWRl ICJzdGRpb19pbXBsLmgiDQorI2luY2x1ZGUgImxpYmMuaCINCisjaW5jbHVkZSA8c3lzL21tYW4u aD4NCisjaW5jbHVkZSA8dGhyZWFkcy5oPg0KKw0KK3N0YXRpYyB2b2lkIGR1bW15XzAoKQ0KK3sN Cit9DQord2Vha19hbGlhcyhkdW1teV8wLCBfX3B0aHJlYWRfdHNkX3J1bl9kdG9ycyk7DQord2Vh a19hbGlhcyhkdW1teV8wLCBfX3Rzc19ydW5fZHRvcnMpOw0KKw0KK19Ob3JldHVybiB2b2lkIF9f cHRocmVhZF9leGl0KHZvaWQgKnJlc3VsdCkNCit7DQorCXB0aHJlYWRfdCBzZWxmID0gX19wdGhy ZWFkX3NlbGYoKTsNCisJc2lnc2V0X3Qgc2V0Ow0KKw0KKwlzZWxmLT5yZXN1bHQgPSByZXN1bHQ7 DQorDQorCXdoaWxlIChzZWxmLT5jYW5jZWxidWYpIHsNCisJCXZvaWQgKCpmKSh2b2lkICopID0g c2VsZi0+Y2FuY2VsYnVmLT5fX2Y7DQorCQl2b2lkICp4ID0gc2VsZi0+Y2FuY2VsYnVmLT5fX3g7 DQorCQlzZWxmLT5jYW5jZWxidWYgPSBzZWxmLT5jYW5jZWxidWYtPl9fbmV4dDsNCisJCWYoeCk7 DQorCX0NCisNCisJX19wdGhyZWFkX3RzZF9ydW5fZHRvcnMoKTsNCisNCisJX190c3NfcnVuX2R0 b3JzKCk7DQorDQorCV9fbG9jayhzZWxmLT5leGl0bG9jayk7DQorDQorCS8qIE1hcmsgdGhpcyB0 aHJlYWQgZGVhZCBiZWZvcmUgZGVjcmVtZW50aW5nIGNvdW50ICovDQorCV9fbG9jayhzZWxmLT5r aWxsbG9jayk7DQorCXNlbGYtPmRlYWQgPSAxOw0KKw0KKwkvKiBCbG9jayBhbGwgc2lnbmFscyBi ZWZvcmUgZGVjcmVtZW50aW5nIHRoZSBsaXZlIHRocmVhZCBjb3VudC4NCisJICogVGhpcyBpcyBp bXBvcnRhbnQgdG8gZW5zdXJlIHRoYXQgZHluYW1pY2FsbHkgYWxsb2NhdGVkIFRMUw0KKwkgKiBp cyBub3QgdW5kZXItYWxsb2NhdGVkL292ZXItY29tbWl0dGVkLCBhbmQgcG9zc2libHkgZm9yIG90 aGVyDQorCSAqIHJlYXNvbnMgYXMgd2VsbC4gKi8NCisJX19ibG9ja19hbGxfc2lncygmc2V0KTsN CisNCisJLyogV2FpdCB0byB1bmxvY2sgdGhlIGtpbGwgbG9jaywgd2hpY2ggZ292ZXJucyBmdW5j dGlvbnMgbGlrZQ0KKwkgKiBwdGhyZWFkX2tpbGwgd2hpY2ggdGFyZ2V0IGEgdGhyZWFkIGlkLCB1 bnRpbCBzaWduYWxzIGhhdmUNCisJICogYmVlbiBibG9ja2VkLiBUaGlzIHByZWNsdWRlcyBvYnNl cnZhdGlvbiBvZiB0aGUgdGhyZWFkIGlkDQorCSAqIGFzIGEgbGl2ZSB0aHJlYWQgKHdpdGggYXBw bGljYXRpb24gY29kZSBydW5uaW5nIGluIGl0KSBhZnRlcg0KKwkgKiB0aGUgdGhyZWFkIHdhcyBy ZXBvcnRlZCBkZWFkIGJ5IEVTUkNIIGJlaW5nIHJldHVybmVkLiAqLw0KKwlfX3VubG9jayhzZWxm LT5raWxsbG9jayk7DQorDQorCS8qIEl0J3MgaW1wb3NzaWJsZSB0byBkZXRlcm1pbmUgd2hldGhl ciB0aGlzIGlzICJ0aGUgbGFzdCB0aHJlYWQiDQorCSAqIHVudGlsIHBlcmZvcm1pbmcgdGhlIGF0 b21pYyBkZWNyZW1lbnQsIHNpbmNlIG11bHRpcGxlIHRocmVhZHMNCisJICogY291bGQgZXhpdCBh dCB0aGUgc2FtZSB0aW1lLiBGb3IgdGhlIGxhc3QgdGhyZWFkLCByZXZlcnQgdGhlDQorCSAqIGRl Y3JlbWVudCBhbmQgdW5ibG9jayBzaWduYWxzIHRvIGdpdmUgdGhlIGF0ZXhpdCBoYW5kbGVycyBh bmQNCisJICogc3RkaW8gY2xlYW51cCBjb2RlIGEgY29uc2lzdGVudCBzdGF0ZS4gKi8NCisJaWYg KGFfZmV0Y2hfYWRkKCZsaWJjLnRocmVhZHNfbWludXNfMSwgLTEpPT0wKSB7DQorCQlsaWJjLnRo cmVhZHNfbWludXNfMSA9IDA7DQorCQlfX3Jlc3RvcmVfc2lncygmc2V0KTsNCisJCWV4aXQoMCk7 DQorCX0NCisNCisJaWYgKHNlbGYtPmxvY2FsZSAhPSAmbGliYy5nbG9iYWxfbG9jYWxlKSB7DQor CQlhX2RlYygmbGliYy51c2Vsb2NhbGVfY250KTsNCisJCWlmIChzZWxmLT5sb2NhbGUtPmN0eXBl X3V0ZjgpDQorCQkJYV9kZWMoJmxpYmMuYnl0ZWxvY2FsZV9jbnRfbWludXNfMSk7DQorCX0NCisN CisJaWYgKHNlbGYtPmRldGFjaGVkICYmIHNlbGYtPm1hcF9iYXNlKSB7DQorCQkvKiBEZXRhY2hl ZCB0aHJlYWRzIG11c3QgYXZvaWQgdGhlIGtlcm5lbCBjbGVhcl9jaGlsZF90aWQNCisJCSAqIGZl YXR1cmUsIHNpbmNlIHRoZSB2aXJ0dWFsIGFkZHJlc3Mgd2lsbCBoYXZlIGJlZW4NCisJCSAqIHVu bWFwcGVkIGFuZCBwb3NzaWJseSBhbHJlYWR5IHJldXNlZCBieSBhIG5ldyBtYXBwaW5nDQorCQkg KiBhdCB0aGUgdGltZSB0aGUga2VybmVsIHdvdWxkIHBlcmZvcm0gdGhlIHdyaXRlLiBJbg0KKwkJ ICogdGhlIGNhc2Ugb2YgdGhyZWFkcyB0aGF0IHN0YXJ0ZWQgb3V0IGRldGFjaGVkLCB0aGUNCisJ CSAqIGluaXRpYWwgY2xvbmUgZmxhZ3MgYXJlIGNvcnJlY3QsIGJ1dCBpZiB0aGUgdGhyZWFkIHdh cw0KKwkJICogZGV0YWNoZWQgbGF0ZXIgKD09IDIpLCB3ZSBuZWVkIHRvIGNsZWFyIGl0IGhlcmUu ICovDQorCQlpZiAoc2VsZi0+ZGV0YWNoZWQgPT0gMikgX19zeXNjYWxsKFNZU19zZXRfdGlkX2Fk ZHJlc3MsIDApOw0KKw0KKwkJLyogVGhlIGZvbGxvd2luZyBjYWxsIHVubWFwcyB0aGUgdGhyZWFk J3Mgc3RhY2sgbWFwcGluZw0KKwkJICogYW5kIHRoZW4gZXhpdHMgd2l0aG91dCB0b3VjaGluZyB0 aGUgc3RhY2suICovDQorCQlfX3VubWFwc2VsZihzZWxmLT5tYXBfYmFzZSwgc2VsZi0+bWFwX3Np emUpOw0KKwl9DQorDQorCWZvciAoOzspIF9fc3lzY2FsbChTWVNfZXhpdCwgMCk7DQorfQ0KK3dl YWtfYWxpYXMoX19wdGhyZWFkX2V4aXQsIHB0aHJlYWRfZXhpdCk7DQorDQordm9pZCBfX2RvX2Ns ZWFudXBfcHVzaChzdHJ1Y3QgX19wdGNiICpjYikNCit7DQorCWlmICghbGliYy5oYXNfdGhyZWFk X3BvaW50ZXIpIHJldHVybjsNCisJc3RydWN0IHB0aHJlYWQgKnNlbGYgPSBfX3B0aHJlYWRfc2Vs ZigpOw0KKwljYi0+X19uZXh0ID0gc2VsZi0+Y2FuY2VsYnVmOw0KKwlzZWxmLT5jYW5jZWxidWYg PSBjYjsNCit9DQorDQordm9pZCBfX2RvX2NsZWFudXBfcG9wKHN0cnVjdCBfX3B0Y2IgKmNiKQ0K K3sNCisJaWYgKCFsaWJjLmhhc190aHJlYWRfcG9pbnRlcikgcmV0dXJuOw0KKwlfX3B0aHJlYWRf c2VsZigpLT5jYW5jZWxidWYgPSBjYi0+X19uZXh0Ow0KK30NCisNCisvKiBwdGhyZWFkX2tleV9j cmVhdGUuYyBvdmVycmlkZXMgdGhpcyAqLw0KK3N0YXRpYyB2b2xhdGlsZSBzaXplX3QgZHVtbXkg PSAwOw0KK3dlYWtfYWxpYXMoZHVtbXksIF9fcHRocmVhZF90c2Rfc2l6ZSk7DQorc3RhdGljIHZv aWQgKmR1bW15X3RzZFsxXSA9IHsgMCB9Ow0KK3dlYWtfYWxpYXMoZHVtbXlfdHNkLCBfX3B0aHJl YWRfdHNkX21haW4pOw0KKw0KK3N0YXRpYyBGSUxFICp2b2xhdGlsZSBkdW1teV9maWxlID0gMDsN Cit3ZWFrX2FsaWFzKGR1bW15X2ZpbGUsIF9fc3RkaW5fdXNlZCk7DQord2Vha19hbGlhcyhkdW1t eV9maWxlLCBfX3N0ZG91dF91c2VkKTsNCit3ZWFrX2FsaWFzKGR1bW15X2ZpbGUsIF9fc3RkZXJy X3VzZWQpOw0KKw0KK3N0YXRpYyB2b2lkIGluaXRfZmlsZV9sb2NrKEZJTEUgKmYpDQorew0KKwlp ZiAoZiAmJiBmLT5sb2NrPDApIGYtPmxvY2sgPSAwOw0KK30NCisNCit2b2lkIF9fdGhyZWFkX2Vu YWJsZSh2b2lkKQ0KK3sNCisJZm9yIChGSUxFICpmPWxpYmMub2ZsX2hlYWQ7IGY7IGY9Zi0+bmV4 dCkNCisJCWluaXRfZmlsZV9sb2NrKGYpOw0KKwlpbml0X2ZpbGVfbG9jayhfX3N0ZGluX3VzZWQp Ow0KKwlpbml0X2ZpbGVfbG9jayhfX3N0ZG91dF91c2VkKTsNCisJaW5pdF9maWxlX2xvY2soX19z dGRlcnJfdXNlZCk7DQorCV9fc3lzY2FsbChTWVNfcnRfc2lncHJvY21hc2ssIFNJR19VTkJMT0NL LCBTSUdQVF9TRVQsIDAsIF9OU0lHLzgpOw0KKwlfX3B0aHJlYWRfc2VsZigpLT50c2QgPSAodm9p ZCAqKilfX3B0aHJlYWRfdHNkX21haW47DQorCWxpYmMudGhyZWFkZWQgPSAxOw0KK30NCisNCmRp ZmYgLS1naXQgYS9zcmMvdGhyZWFkL3B0aHJlYWRfc2V0Y2FuY2Vsc3RhdGUuYyBiL3NyYy90aHJl YWQvcHRocmVhZF9zZXRjYW5jZWxzdGF0ZS5jDQppbmRleCAwNjBiY2RjLi4yMjY4MjE3IDEwMDY0 NA0KLS0tIGEvc3JjL3RocmVhZC9wdGhyZWFkX3NldGNhbmNlbHN0YXRlLmMNCisrKyBiL3NyYy90 aHJlYWQvcHRocmVhZF9zZXRjYW5jZWxzdGF0ZS5jDQpAQCAtMSw2ICsxLDYgQEANCiAjaW5jbHVk ZSAicHRocmVhZF9pbXBsLmgiDQogDQotaW50IHB0aHJlYWRfc2V0Y2FuY2Vsc3RhdGUoaW50IG5l dywgaW50ICpvbGQpDQoraW50IF9fcHRocmVhZF9zZXRjYW5jZWxzdGF0ZShpbnQgbmV3LCBpbnQg Km9sZCkNCiB7DQogCWlmIChuZXcgPiAxVSkgcmV0dXJuIEVJTlZBTDsNCiAJaWYgKCFsaWJjLmhh c190aHJlYWRfcG9pbnRlcikgcmV0dXJuIEVOT1NZUzsNCkBAIC05LDMgKzksNSBAQCBpbnQgcHRo cmVhZF9zZXRjYW5jZWxzdGF0ZShpbnQgbmV3LCBpbnQgKm9sZCkNCiAJc2VsZi0+Y2FuY2VsZGlz YWJsZSA9IG5ldzsNCiAJcmV0dXJuIDA7DQogfQ0KKw0KK3dlYWtfYWxpYXMoX19wdGhyZWFkX3Nl dGNhbmNlbHN0YXRlLCBwdGhyZWFkX3NldGNhbmNlbHN0YXRlKTsNCmRpZmYgLS1naXQgYS9zcmMv dGhyZWFkL3B0aHJlYWRfc2V0Y2FuY2VsdHlwZS5jIGIvc3JjL3RocmVhZC9wdGhyZWFkX3NldGNh bmNlbHR5cGUuYw0KaW5kZXggYmYwYTNmMy4uZDQ5M2MxYiAxMDA2NDQNCi0tLSBhL3NyYy90aHJl YWQvcHRocmVhZF9zZXRjYW5jZWx0eXBlLmMNCisrKyBiL3NyYy90aHJlYWQvcHRocmVhZF9zZXRj YW5jZWx0eXBlLmMNCkBAIC0xLDExICsxLDEzIEBADQogI2luY2x1ZGUgInB0aHJlYWRfaW1wbC5o Ig0KIA0KK3ZvaWQgX19wdGhyZWFkX3Rlc3RjYW5jZWwodm9pZCk7DQorDQogaW50IHB0aHJlYWRf c2V0Y2FuY2VsdHlwZShpbnQgbmV3LCBpbnQgKm9sZCkNCiB7DQogCXN0cnVjdCBwdGhyZWFkICpz ZWxmID0gX19wdGhyZWFkX3NlbGYoKTsNCiAJaWYgKG5ldyA+IDFVKSByZXR1cm4gRUlOVkFMOw0K IAlpZiAob2xkKSAqb2xkID0gc2VsZi0+Y2FuY2VsYXN5bmM7DQogCXNlbGYtPmNhbmNlbGFzeW5j ID0gbmV3Ow0KLQlpZiAobmV3KSBwdGhyZWFkX3Rlc3RjYW5jZWwoKTsNCisJaWYgKG5ldykgX19w dGhyZWFkX3Rlc3RjYW5jZWwoKTsNCiAJcmV0dXJuIDA7DQogfQ0KZGlmZiAtLWdpdCBhL3NyYy90 aHJlYWQvcHRocmVhZF90ZXN0Y2FuY2VsLmMgYi9zcmMvdGhyZWFkL3B0aHJlYWRfdGVzdGNhbmNl bC5jDQppbmRleCBiYTVmN2M2Li5lZTQ4ZTZkIDEwMDY0NA0KLS0tIGEvc3JjL3RocmVhZC9wdGhy ZWFkX3Rlc3RjYW5jZWwuYw0KKysrIGIvc3JjL3RocmVhZC9wdGhyZWFkX3Rlc3RjYW5jZWwuYw0K QEAgLTcsNyArNyw5IEBAIHN0YXRpYyB2b2lkIGR1bW15KCkNCiANCiB3ZWFrX2FsaWFzKGR1bW15 LCBfX3Rlc3RjYW5jZWwpOw0KIA0KLXZvaWQgcHRocmVhZF90ZXN0Y2FuY2VsKCkNCit2b2lkIF9f cHRocmVhZF90ZXN0Y2FuY2VsKCkNCiB7DQogCV9fdGVzdGNhbmNlbCgpOw0KIH0NCisNCit3ZWFr X2FsaWFzKF9fcHRocmVhZF90ZXN0Y2FuY2VsLCBwdGhyZWFkX3Rlc3RjYW5jZWwpOw0KZGlmZiAt LWdpdCBhL3NyYy90aHJlYWQvdGhyZF9jcmVhdGUuYyBiL3NyYy90aHJlYWQvdGhyZF9jcmVhdGUu Yw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAuLmY3MmY5OTINCi0tLSAvZGV2 L251bGwNCisrKyBiL3NyYy90aHJlYWQvdGhyZF9jcmVhdGUuYw0KQEAgLTAsMCArMSw5OCBAQA0K KyNkZWZpbmUgX0dOVV9TT1VSQ0UNCisjaW5jbHVkZSAicHRocmVhZF9pbXBsLmgiDQorI2luY2x1 ZGUgInN0ZGlvX2ltcGwuaCINCisjaW5jbHVkZSAibGliYy5oIg0KKyNpbmNsdWRlIDxzeXMvbW1h bi5oPg0KKyNpbmNsdWRlIDx0aHJlYWRzLmg+DQorDQordm9pZCAqX19tbWFwKHZvaWQgKiwgc2l6 ZV90LCBpbnQsIGludCwgaW50LCBvZmZfdCk7DQoraW50IF9fbXVubWFwKHZvaWQgKiwgc2l6ZV90 KTsNCitpbnQgX19tcHJvdGVjdCh2b2lkICosIHNpemVfdCwgaW50KTsNCit2b2lkIF9fdGhyZWFk X2VuYWJsZSh2b2lkKTsNCitfTm9yZXR1cm4gdm9pZCBfX3B0aHJlYWRfZXhpdCh2b2lkICopOw0K K3ZvaWQgKl9fY29weV90bHModW5zaWduZWQgY2hhciAqKTsNCitleHRlcm4gdm9sYXRpbGUgc2l6 ZV90IF9fcHRocmVhZF90c2Rfc2l6ZTsNCisNCitfTm9yZXR1cm4gdm9pZCB0aHJkX2V4aXQoaW50 IHJlc3VsdCkgew0KKwlfX3B0aHJlYWRfZXhpdCgodm9pZCopKGludHB0cl90KXJlc3VsdCk7DQor fQ0KKw0KK3N0YXRpYyB2b2lkIGR1bW15XzAoKQ0KK3sNCit9DQord2Vha19hbGlhcyhkdW1teV8w LCBfX2FjcXVpcmVfcHRjKTsNCit3ZWFrX2FsaWFzKGR1bW15XzAsIF9fcmVsZWFzZV9wdGMpOw0K Kw0KK3N0YXRpYyBpbnQgc3RhcnQodm9pZCAqcCkNCit7DQorCXRocmRfdCBzZWxmID0gcDsNCisJ aW50ICgqc3RhcnQpKHZvaWQqKSA9IChpbnQoKikodm9pZCopKSBzZWxmLT5zdGFydDsNCisJdGhy ZF9leGl0KHN0YXJ0KHNlbGYtPnN0YXJ0X2FyZykpOw0KKwlyZXR1cm4gMDsNCit9DQorDQorI2Rl ZmluZSBST1VORCh4KSAoKCh4KStQQUdFX1NJWkUtMSkmLVBBR0VfU0laRSkNCisNCitpbnQgdGhy ZF9jcmVhdGUodGhyZF90ICpyZXMsIHRocmRfc3RhcnRfdCBlbnRyeSwgdm9pZCAqYXJnKQ0KK3sN CisJaW50IHJldCA9IC1FTk9NRU07DQorCXNpemVfdCBndWFyZCA9IFJPVU5EKERFRkFVTFRfR1VB UkRfU0laRSk7DQorCXNpemVfdCBzaXplID0gZ3VhcmQgKyBST1VORChERUZBVUxUX1NUQUNLX1NJ WkUgKyBsaWJjLnRsc19zaXplICsgIF9fcHRocmVhZF90c2Rfc2l6ZSk7DQorCXN0cnVjdCBwdGhy ZWFkICpzZWxmLCAqbmV3Ow0KKwl1bnNpZ25lZCBjaGFyICptYXAsICpzdGFjaywgKnRzZCwgKnN0 YWNrX2xpbWl0Ow0KKwl1bnNpZ25lZCBmbGFncyA9IENMT05FX1ZNIHwgQ0xPTkVfRlMgfCBDTE9O RV9GSUxFUyB8IENMT05FX1NJR0hBTkQNCisJCXwgQ0xPTkVfVEhSRUFEIHwgQ0xPTkVfU1lTVlNF TSB8IENMT05FX1NFVFRMUw0KKwkJfCBDTE9ORV9QQVJFTlRfU0VUVElEIHwgQ0xPTkVfQ0hJTERf Q0xFQVJUSUQgfCBDTE9ORV9ERVRBQ0hFRDsNCisNCisJaWYgKCFsaWJjLmNhbl9kb190aHJlYWRz KSByZXR1cm4gdGhyZF9lcnJvcjsNCisJc2VsZiA9IF9fcHRocmVhZF9zZWxmKCk7DQorCWlmICgh bGliYy50aHJlYWRlZCkgX190aHJlYWRfZW5hYmxlKCk7DQorDQorCV9fYWNxdWlyZV9wdGMoKTsN CisNCisJaWYgKGd1YXJkKSB7DQorCQltYXAgPSBfX21tYXAoMCwgc2l6ZSwgUFJPVF9OT05FLCBN QVBfUFJJVkFURXxNQVBfQU5PTiwgLTEsIDApOw0KKwkJaWYgKG1hcCA9PSBNQVBfRkFJTEVEKSBn b3RvIENMRUFOVVA7DQorCQlpZiAoX19tcHJvdGVjdChtYXArZ3VhcmQsIHNpemUtZ3VhcmQsIFBS T1RfUkVBRHxQUk9UX1dSSVRFKSkgew0KKwkJCV9fbXVubWFwKG1hcCwgc2l6ZSk7DQorCQkJZ290 byBDTEVBTlVQOw0KKwkJfQ0KKwl9IGVsc2Ugew0KKwkJbWFwID0gX19tbWFwKDAsIHNpemUsIFBS T1RfUkVBRHxQUk9UX1dSSVRFLCBNQVBfUFJJVkFURXxNQVBfQU5PTiwgLTEsIDApOw0KKwkJaWYg KG1hcCA9PSBNQVBfRkFJTEVEKSBnb3RvIENMRUFOVVA7DQorCX0NCisJdHNkID0gbWFwICsgc2l6 ZSAtIF9fcHRocmVhZF90c2Rfc2l6ZTsNCisJc3RhY2sgPSB0c2QgLSBsaWJjLnRsc19zaXplOw0K KwlzdGFja19saW1pdCA9IG1hcCArIGd1YXJkOw0KKw0KKwluZXcgPSBfX2NvcHlfdGxzKHRzZCAt IGxpYmMudGxzX3NpemUpOw0KKwluZXctPm1hcF9iYXNlID0gbWFwOw0KKwluZXctPm1hcF9zaXpl ID0gc2l6ZTsNCisJbmV3LT5zdGFjayA9IHN0YWNrOw0KKwluZXctPnN0YWNrX3NpemUgPSBzdGFj ayAtIHN0YWNrX2xpbWl0Ow0KKwluZXctPnN0YXJ0ID0gKHZvaWQgKigqKSh2b2lkKikpZW50cnk7 DQorCW5ldy0+c3RhcnRfYXJnID0gYXJnOw0KKwluZXctPnNlbGYgPSBuZXc7DQorCW5ldy0+dHNk ID0gKHZvaWQgKil0c2Q7DQorCW5ldy0+bG9jYWxlID0gJmxpYmMuZ2xvYmFsX2xvY2FsZTsNCisJ bmV3LT51bmJsb2NrX2NhbmNlbCA9IHNlbGYtPmNhbmNlbDsNCisJbmV3LT5jYW5hcnkgPSBzZWxm LT5jYW5hcnk7DQorDQorCWFfaW5jKCZsaWJjLnRocmVhZHNfbWludXNfMSk7DQorCXJldCA9IF9f Y2xvbmUoc3RhcnQsIHN0YWNrLCBmbGFncywgbmV3LCAmbmV3LT50aWQsIFRQX0FESihuZXcpLCAm bmV3LT50aWQpOw0KKw0KKyBDTEVBTlVQOg0KKwlfX3JlbGVhc2VfcHRjKCk7DQorDQorCWlmIChy ZXQgPiAwKSB7DQorICAgICAgICAgICpyZXMgPSBuZXc7DQorICAgICAgICAgIHJldCA9IHRocmRf c3VjY2VzczsNCisgICAgICAgIH0gZWxzZSBpZiAocmV0ID09IC1FTk9NRU0pIHsNCisgICAgICAg ICAgcmV0ID0gdGhyZF9ub21lbTsNCisgICAgICAgIH0gZWxzZSB7DQorICAgICAgICAgIGFfZGVj KCZsaWJjLnRocmVhZHNfbWludXNfMSk7DQorICAgICAgICAgIGlmIChtYXApIF9fbXVubWFwKG1h cCwgc2l6ZSk7DQorICAgICAgICAgIHJldCA9IHRocmRfZXJyb3I7DQorCX0NCisgICAgICAgIHJl dHVybiByZXQ7DQorfQ0KZGlmZiAtLWdpdCBhL3NyYy90aHJlYWQvdGhyZF9jdXJyZW50LmMgYi9z cmMvdGhyZWFkL3RocmRfY3VycmVudC5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAw MDAwMC4uMTcyODUzNQ0KLS0tIC9kZXYvbnVsbA0KKysrIGIvc3JjL3RocmVhZC90aHJkX2N1cnJl bnQuYw0KQEAgLTAsMCArMSwxMSBAQA0KKyNpbmNsdWRlICJwdGhyZWFkX2ltcGwuaCINCisjaW5j bHVkZSA8dGhyZWFkcy5oPg0KKw0KKy8qIE5vdCBhbGwgYXJjaCBoYXZlIF9fcHRocmVhZF9zZWxm IGFzIGEgc3ltYm9sLiBPbiBzb21lIHRoaXMgcmVzdWx0cw0KKyAgIGluIHNvbWUgbWFnaWMuIFNv IHRoaXMgImNhbGwiIHRvIF9fcHRocmVhZF9zZWxmIGlzIG5vdCBuZWNlc3NhcnkgYQ0KKyAgIHRh aWwgY2FsbC4gSW4gcGFydGljdWxhciwgb3RoZXIgdGhhbiB0aGUgYXBwZWFyYW5jZSwgdGhyZF9j dXJyZW50DQorICAgY2FuIG5vdCBiZSBpbXBsZW1lbnRlZCBhcyBhIHdlYWsgc3ltYm9sLiAqLw0K K3B0aHJlYWRfdCB0aHJkX2N1cnJlbnQoKQ0KK3sNCisJcmV0dXJuIF9fcHRocmVhZF9zZWxmKCk7 DQorfQ0KZGlmZiAtLWdpdCBhL3NyYy90aHJlYWQvdGhyZF9kZXRhY2guYyBiL3NyYy90aHJlYWQv dGhyZF9kZXRhY2guYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAuLmRkMjkz MDgNCi0tLSAvZGV2L251bGwNCisrKyBiL3NyYy90aHJlYWQvdGhyZF9kZXRhY2guYw0KQEAgLTAs MCArMSwxNyBAQA0KKyNpbmNsdWRlICJwdGhyZWFkX2ltcGwuaCINCisjaW5jbHVkZSA8dGhyZWFk cy5oPg0KKyNpbmNsdWRlIDxzeXMvbW1hbi5oPg0KKw0KK2ludCB0aHJkX2RldGFjaCh0aHJkX3Qg dCkNCit7DQorCS8qIENhbm5vdCBkZXRhY2ggYSB0aHJlYWQgdGhhdCdzIGFscmVhZHkgZXhpdGlu ZyAqLw0KKwlpZiAoYV9zd2FwKHQtPmV4aXRsb2NrLCAxKSl7DQorCQlpbnQgdG1wOw0KKwkJd2hp bGUgKCh0bXAgPSB0LT50aWQpKSBfX3RpbWVkd2FpdCgmdC0+dGlkLCB0bXAsIDAsIDAsIDAsIDAs IDApOw0KKwkJaWYgKHQtPm1hcF9iYXNlKSBtdW5tYXAodC0+bWFwX2Jhc2UsIHQtPm1hcF9zaXpl KTsNCisJfSBlbHNlIHsNCisJCXQtPmRldGFjaGVkID0gMjsNCisJCV9fdW5sb2NrKHQtPmV4aXRs b2NrKTsNCisJfQ0KKwlyZXR1cm4gdGhyZF9zdWNjZXNzOw0KK30NCmRpZmYgLS1naXQgYS9zcmMv dGhyZWFkL3RocmRfZXF1YWwuYyBiL3NyYy90aHJlYWQvdGhyZF9lcXVhbC5jDQpuZXcgZmlsZSBt b2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uYWM0OWE0NA0KLS0tIC9kZXYvbnVsbA0KKysrIGIv c3JjL3RocmVhZC90aHJkX2VxdWFsLmMNCkBAIC0wLDAgKzEsNiBAQA0KKyNpbmNsdWRlIDx0aHJl YWRzLmg+DQorDQoraW50ICh0aHJkX2VxdWFsKSh0aHJkX3QgYSwgdGhyZF90IGIpDQorew0KKwly ZXR1cm4gYT09YjsNCit9DQpkaWZmIC0tZ2l0IGEvc3JjL3RocmVhZC90aHJkX2pvaW4uYyBiL3Ny Yy90aHJlYWQvdGhyZF9qb2luLmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAw Li4wNDQ2OTc1DQotLS0gL2Rldi9udWxsDQorKysgYi9zcmMvdGhyZWFkL3RocmRfam9pbi5jDQpA QCAtMCwwICsxLDE0IEBADQorI2luY2x1ZGUgInB0aHJlYWRfaW1wbC5oIg0KKyNpbmNsdWRlIDxz eXMvbW1hbi5oPg0KKyNpbmNsdWRlIDx0aHJlYWRzLmg+DQorDQorLyogQzExIHRocmVhZHMgY2Fu bm90IGJlIGNhbmNlbGVkLCBzbyB0aGVyZSBpcyBubyBuZWVkIGZvciBhDQorICAgY2FuY2VsYXRp b24gZnVuY3Rpb24gcG9pbnRlciwgaGVyZS4gKi8NCitpbnQgdGhyZF9qb2luKHRocmRfdCB0LCBp bnQgKnJlcykNCit7DQorCWludCB0bXA7DQorCXdoaWxlICgodG1wID0gdC0+dGlkKSkgX190aW1l ZHdhaXQoJnQtPnRpZCwgdG1wLCAwLCAwLCAwLCAwLCAwKTsNCisJaWYgKHJlcykgKnJlcyA9IChp bnQpKGludHB0cl90KXQtPnJlc3VsdDsNCisJaWYgKHQtPm1hcF9iYXNlKSBtdW5tYXAodC0+bWFw X2Jhc2UsIHQtPm1hcF9zaXplKTsNCisJcmV0dXJuIHRocmRfc3VjY2VzczsNCit9DQpkaWZmIC0t Z2l0IGEvc3JjL3RocmVhZC90c3NfY3JlYXRlLmMgYi9zcmMvdGhyZWFkL3Rzc19jcmVhdGUuYw0K bmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAuLjIzMzhkNTkNCi0tLSAvZGV2L251 bGwNCisrKyBiL3NyYy90aHJlYWQvdHNzX2NyZWF0ZS5jDQpAQCAtMCwwICsxLDk3IEBADQorI2lu Y2x1ZGUgInB0aHJlYWRfaW1wbC5oIg0KKyNpbmNsdWRlIDx0aHJlYWRzLmg+DQorDQorLyogZnV0 dXJlIHZlcnNpb24gb2YgQyBtaWdodCBwcmVzY3JpYmUgYSBtaW5pbXVtIG51bWJlciBvZiB0c3Mg Ki8NCisjZGVmaW5lIF9fVFNTX01BWF9NSU4gNjQNCisNCisjaWZuZGVmIFRTU19NQVgNCisjIGRl ZmluZSBUU1NfTUFYIF9fVFNTX01BWF9NSU4NCisjZW5kaWYNCisNCisjZGVmaW5lIF9fTE9XX0JJ VChYKSAoKFgrMFUpICYgLShYKzBVKSkNCisNCisjZGVmaW5lIFNUUklOR0lGWV8oWCkgI1gNCisj ZGVmaW5lIFNUUklOR0lGWShYKSBTVFJJTkdJRllfKFgpDQorI2RlZmluZSBXQVJOX18oWCkgX1By YWdtYSgjWCkNCisjZGVmaW5lIFdBUk5fKFgpIFdBUk5fXyhtZXNzYWdlIChYKSkNCisjZGVmaW5l IFdBUk4oWCkgV0FSTl8oWCkNCisNCisjaWYgKFRTU19NQVgpIDwgX19UU1NfTUFYX01JTg0KK1dB Uk4oIlRTU19NQVggIiBTVFJJTkdJRlkoVFNTX01BWCkgIiByZXBsYWNlZCBieSBtaW5pbWFsIHZh bHVlICIgU1RSSU5HSUZZKF9fVFNTX01BWF9NSU4pKQ0KKyMgdW5kZWYgVFNTX01BWA0KKyMgZGVm aW5lIFRTU19NQVggX19UU1NfTUFYX01JTg0KKyNlbmRpZg0KKw0KKyNpZiAoVFNTX01BWCkgIT0g X19MT1dfQklUKFRTU19NQVgpDQorIyBlcnJvciBUU1NfTUFYIG11c3QgYmUgYSBwb3dlciBvZiAy DQorI2VuZGlmDQorDQorZW51bSB7IHRzc19tYXggPSAoVFNTX01BWCksIH07DQorDQorc3RhdGlj IHRzc19kdG9yX3QgZHRvcnNbdHNzX21heF07DQorDQorc3RhdGljIHZvaWQgbm9kdG9yKHZvaWQg KmR1bW15KQ0KK3sNCit9DQorDQorLyogVGhpcyBzaG91bGQgdXNlIF9UaHJlYWRfbG9jYWwgd2hp Y2ggbXVzdCBleGlzdCBmb3IgQzExIHRocmVhZHMuDQorICAgU2luY2UgbXVzbCBtaWdodCBnZXQg Y29tcGlsZWQgd2l0aCBwcmUtQzExIG9wdGlvbnMgd2UgdXNlIGdjYydzDQorICAgX190aHJlYWQg ZXh0ZW5zaW9uLCBpbnN0ZWFkLiAqLw0KK3N0YXRpYyBfX3RocmVhZCB2b2lkICogZGF0YVt0c3Nf bWF4XTsNCisvKiBUaHJlYWQgbG9jYWwgZGF0YSBpcyBhY2NvdW50ZWQgZm9yIHdpdGggYSB1c2Fn ZSBjb3VudGVyICovDQorc3RhdGljIF9fdGhyZWFkIHRzc190IHVzZWQ7DQorDQoraW50IHRzc19j cmVhdGUodHNzX3QgKnRzcywgdHNzX2R0b3JfdCBkdG9yKQ0KK3sNCisJdW5zaWduZWQgc3RhcnQg PSAodWludHB0cl90KSZ0c3MgLyAxNiAlIHRzc19tYXg7DQorCWlmICghZHRvcikgZHRvciA9IG5v ZHRvcjsNCisNCisJZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRzc19tYXg7ICsraSkgew0KKwkJ dW5zaWduZWQgaiA9IChzdGFydCtpKSV0c3NfbWF4Ow0KKwkJaWYgKCFhX2Nhc19wKGR0b3JzK2os IDAsICh2b2lkICopZHRvcikpIHsNCisJCQkqdHNzID0gajsNCisJCQlyZXR1cm4gdGhyZF9zdWNj ZXNzOw0KKwkJfQ0KKwl9DQorCSp0c3MgPSAtMTsNCisJcmV0dXJuIHRocmRfZXJyb3I7DQorfQ0K Kw0KK3ZvaWQgdHNzX2RlbGV0ZSh0c3NfdCBrKQ0KK3sNCisJLyogdHNzX2RlbGV0ZSBoYXMgbm8g ZmFpbHVyZSBwYXRoLCBzbyBjaGVjayB0aGUgYXJndW1lbnQuICovDQorCWlmIChrIDwgdHNzX21h eCkgZHRvcnNba10gPSAwOw0KK30NCisNCitpbnQgdHNzX3NldCh0c3NfdCBrLCB2b2lkICp4KQ0K K3sNCisJaWYgKGsgPj0gdHNzX21heCB8fCAhZHRvcnNba10pIHJldHVybiB0aHJkX2Vycm9yOw0K KwlpZiAoZGF0YVtrXSAhPSB4KSB7DQorCQkvKiB0c3Nfc2V0IGNhbiBiZSB1c2VkIHRvIGFkZCBv ciByZW1vdmUgYSB0c3MuIGNvbXB1dGUNCisJCSAgIHRoZSBkaWZmZXJlbmNlIGluIHVzYWdlLiAq Lw0KKwkJdXNlZCArPSAoISF4IC0gISFkYXRhW2tdKTsNCisJCWRhdGFba10gPSB4Ow0KKwl9DQor CXJldHVybiB0aHJkX3N1Y2Nlc3M7DQorfQ0KKw0KK3ZvaWQgKiB0c3NfZ2V0KHRzc190IGspIHsN CisJcmV0dXJuIGR0b3JzW2tdID8gZGF0YVtrXSA6IDA7DQorfQ0KKw0KKw0KK3ZvaWQgX190c3Nf cnVuX2R0b3JzKHZvaWQpDQorew0KKwlmb3IgKHVuc2lnbmVkIGo9MDsgdXNlZCAmJiBqPFRTU19E VE9SX0lURVJBVElPTlM7IGorKykgew0KKwkJZm9yICh1bnNpZ25lZCBpPTA7IGk8dHNzX21heDsg aSsrKSB7DQorCQkJaWYgKGRhdGFbaV0pIHsNCisJCQkJdm9pZCAqdG1wID0gZGF0YVtpXTsNCisJ CQkJZGF0YVtpXSA9IDA7DQorCQkJCS0tdXNlZDsNCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8vIHNsb3QgaSBtaWdodCBoYXZlIGJlZW4gZGVsZXRlZCwgY2hlY2sNCisJCQkJaWYg KGR0b3JzW2ldKSBkdG9yc1tpXSh0bXApOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAJaWYgKCF1c2VkKSByZXR1cm47DQorCQkJfQ0KKwkJfQ0KKwl9DQorfQ0KZGlmZiAtLWdpdCBh L3NyYy90aW1lL3RocmRfc2xlZXAuYyBiL3NyYy90aW1lL3RocmRfc2xlZXAuYw0KbmV3IGZpbGUg bW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAuLjY1NzBiMGMNCi0tLSAvZGV2L251bGwNCisrKyBi L3NyYy90aW1lL3RocmRfc2xlZXAuYw0KQEAgLTAsMCArMSwzMSBAQA0KKyNpbmNsdWRlIDx0aW1l Lmg+DQorI2luY2x1ZGUgPGVycm5vLmg+DQorI2luY2x1ZGUgInN5c2NhbGwuaCINCisjaW5jbHVk ZSAibGliYy5oIg0KKyNpbmNsdWRlICJ0aHJlYWRzLmgiDQorDQorLyogUm91Z2hseSBfX3N5c2Nh bGwgYWxyZWFkeSByZXR1cm5zIHRoZSByaWdodCB0aGluZzogMCBpZiBhbGwgd2VudA0KKyAgIHdl bGwgb3IgYSBuZWdhdGl2ZSBlcnJvciBpbmRpY2F0aW9uLCBvdGhlcndpc2UuICovDQoraW50IHRo cmRfc2xlZXAoY29uc3Qgc3RydWN0IHRpbWVzcGVjICpyZXEsIHN0cnVjdCB0aW1lc3BlYyAqcmVt KQ0KK3sNCisgIGludCByZXQgPSBfX3N5c2NhbGwoU1lTX25hbm9zbGVlcCwgcmVxLCByZW0pOw0K KyAgLy8gY29tcGlsZSB0aW1lIGNvbXBhcmlzb24sIGNvbnN0YW50IHByb3BhZ2F0ZWQNCisgIGlm IChFSU5UUiAhPSAxKSB7DQorICAgIHN3aXRjaCAocmV0KSB7DQorICAgIGNhc2UgMDogcmV0dXJu IDA7DQorICAgICAgLyogZXJyb3IgZGVzY3JpYmVkIGJ5IFBPU0lYOiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICovDQorICAgICAgLyogRUlOVFIgIFRoZSBuYW5vc2xlZXAoKSBm dW5jdGlvbiB3YXMgaW50ZXJydXB0ZWQgYnkgYSBzaWduYWwuICovDQorICAgICAgLyogVGhlIEMx MSB3b3JkaW5nIGlzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICov DQorICAgICAgLyogLTEgaWYgaXQgaGFzIGJlZW4gaW50ZXJydXB0ZWQgYnkgYSBzaWduYWwgICAg ICAgICAgICAgICAgICAgICovDQorICAgIGNhc2UgLUVJTlRSOiAgcmV0dXJuIC0xOw0KKyAgICAg IC8qIGVycm9yIGRlc2NyaWJlZCBieSBQT1NJWCAqLw0KKyAgICBjYXNlIC1FSU5WQUw6IHJldHVy biAtMjsNCisgICAgICAvKiBkZXNjcmliZWQgZm9yIGxpbnV4ICovDQorICAgIGNhc2UgLUVGQVVM VDogcmV0dXJuIC0zOw0KKyAgICAgIC8qIE5vIG90aGVyIGVycm9yIHJldHVybnMgYXJlIHNwZWNp ZmllZC4gKi8NCisgICAgZGVmYXVsdDogcmV0dXJuIElOVF9NSU47DQorICAgIH0NCisgIH0NCisg IC8vIHBvdGVudGlhbGx5IGEgdGFpbCBjYWxsDQorICByZXR1cm4gcmV0Ow0KK30NCi== --=-TZxH+yBG1kdsejHiMRpu-- --=-kqsmMyz0XKutBlUiOSaw Content-Type: application/pgp-signature; name="signature.asc" Content-Description: This is a digitally signed message part Content-Transfer-Encoding: 7bit -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.12 (GNU/Linux) iEYEABECAAYFAlPpWLwACgkQD9PoadrVN+Ll/gCfZpLUOdWZ0EYx1DveEA3PZbPH 3P4AoIYnr5PwJ2oFFtfpLJV3xYOUT2r5 =vJoY -----END PGP SIGNATURE----- --=-kqsmMyz0XKutBlUiOSaw--