From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 22960 invoked by alias); 28 Jun 2011 07:28:56 -0000 Received: (qmail 22949 invoked by uid 22791); 28 Jun 2011 07:28:54 -0000 X-SWARE-Spam-Status: No, hits=-0.6 required=5.0 tests=AWL,BAYES_00 X-Spam-Check-By: sourceware.org Received: from va3ehsobe006.messaging.microsoft.com (HELO VA3EHSOBE007.bigfish.com) (216.32.180.16) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 28 Jun 2011 07:28:39 +0000 Received: from mail140-va3-R.bigfish.com (10.7.14.250) by VA3EHSOBE007.bigfish.com (10.7.40.11) with Microsoft SMTP Server id 14.1.225.22; Tue, 28 Jun 2011 07:28:37 +0000 Received: from mail140-va3 (localhost.localdomain [127.0.0.1]) by mail140-va3-R.bigfish.com (Postfix) with ESMTP id B0E4D99825B; Tue, 28 Jun 2011 07:28:36 +0000 (UTC) X-SpamScore: -23 X-BigFish: VPS-23(zz936eK9371M1443N542M154dMzz1202hzz8275bh8275dhz32i2a8h668h839h34h) X-Forefront-Antispam-Report: CIP:203.197.93.240;KIP:(null);UIP:(null);IPVD:NLI;H:Kcinpunhjhc01.kpit.com;RD:Kcinpunhjhc01.Kpit.com;EFVD:NLI Received: from mail140-va3 (localhost.localdomain [127.0.0.1]) by mail140-va3 (MessageSwitch) id 1309245506459043_21272; Tue, 28 Jun 2011 07:18:26 +0000 (UTC) Received: from VA3EHSMHS030.bigfish.com (unknown [10.7.14.242]) by mail140-va3.bigfish.com (Postfix) with ESMTP id 73C84110093; Tue, 28 Jun 2011 07:18:09 +0000 (UTC) Received: from Kcinpunhjhc01.kpit.com (203.197.93.240) by VA3EHSMHS030.bigfish.com (10.7.99.40) with Microsoft SMTP Server (TLS) id 14.1.225.22; Tue, 28 Jun 2011 07:17:57 +0000 Received: from Kcinpunhjcms01.kpit.com ([169.254.2.157]) by Kcinpunhjhc01.kpit.com ([172.10.16.123]) with mapi; Tue, 28 Jun 2011 12:47:49 +0530 From: Sumanth Gundapaneni To: Joseph Myers CC: "gcc-patches@gcc.gnu.org" , "rth@redhat.com" , "Jayant R. Sonar" Date: Tue, 28 Jun 2011 08:32:00 -0000 Subject: RE: CR16 Port addition Message-ID: <371569CBCFB2E745B891DBB88B2DFDDD1A9EF750C1@KCINPUNHJCMS01.kpit.com> References: <371569CBCFB2E745B891DBB88B2DFDDD1A2343CD45@KCINPUNHJCMS01.kpit.com> <371569CBCFB2E745B891DBB88B2DFDDD1A246E7DDF@KCINPUNHJCMS01.kpit.com> x-cr-hashedpuzzle: D8Ki D9rH FAYC GTWk OF5c OrLm QEC/ Sy8f S/Cx VKww Ya9z cXYz cXn9 coRy fpID g4r8;3;ZwBjAGMALQBwAGEAdABjAGgAZQBzAEAAZwBjAGMALgBnAG4AdQAuAG8AcgBnADsAagBvAHMAZQBwAGgAQABjAG8AZABlAHMAbwB1AHIAYwBlAHIAeQAuAGMAbwBtADsAcgB0AGgAQAByAGUAZABoAGEAdAAuAGMAbwBtAA==;Sosha1_v1;7;{5F8B2E0E-A89F-490A-9FE4-0F7AC7EAA1E9};cwB1AG0AYQBuAHQAaAAuAGcAdQBuAGQAYQBwAGEAbgBlAG4AaQBAAGsAcABpAHQAYwB1AG0AbQBpAG4AcwAuAGMAbwBtAA==;Tue, 28 Jun 2011 07:17:33 GMT;UgBFADoAIABDAFIAMQA2ACAAUABvAHIAdAAgAGEAZABkAGkAdABpAG8AbgA= x-cr-puzzleid: {5F8B2E0E-A89F-490A-9FE4-0F7AC7EAA1E9} Content-Type: multipart/mixed; boundary="_002_371569CBCFB2E745B891DBB88B2DFDDD1A9EF750C1KCINPUNHJCMS0_" MIME-Version: 1.0 X-OriginatorOrg: kpitcummins.com X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org X-SW-Source: 2011-06/txt/msg02097.txt.bz2 --_002_371569CBCFB2E745B891DBB88B2DFDDD1A9EF750C1KCINPUNHJCMS0_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Content-length: 3819 PING 2: For review Hi, I have updated the patch to the latest snapshot .i.e. gcc-4.7-20110625. Please go through the attached patch and you can view the explanations for the earlier communication below. Thanks in advance, Sumanth G, PUNE (India). =20=20=20 =3D=3D=3D=3D=3D Begin Message =3D=3D=3D=3D=3D=3D -----Original Message----- From: Sumanth Gundapaneni=20 Sent: Monday, May 30, 2011 6:57 PM To: 'Joseph Myers' Cc: gcc-patches@gcc.gnu.org; rth@redhat.com; Jayant R. Sonar Subject: RE: CR16 Port addition Hi Joseph and Richard, Thanks for your time in reviewing the CR16 port and once again I am=20 grateful for your valuable suggestions. Please find attached the patch "cr16-gcc.patch" which contains modification= s=20 as suggested by Joseph in his previous mail. For your kind information, I am providing the recent posts regarding=20 CR16 patches. Initial post : http://gcc.gnu.org/ml/gcc-patches/2010-12/msg01676.html Second post : http://gcc.gnu.org/ml/gcc-patches/2011-01/msg00803.html=20=20 Third post : http://gcc.gnu.org/ml/gcc-patches/2011-04/msg00624.html Fourth post : http://gcc.gnu.org/ml/gcc-patches/2011-05/msg01441.html=20 Please review the patch and let me know if there should be any=20 modifications in it. Joseph, please go through my explanation for your comments. >Please remove the remaining top level configure changes from the patch. The top level configure changes have been removed as advised. >Now you seem to have a stray change to the generated file=20 >libstdc++-v3/configure. Again, you can probably just eliminate this=20 The configure changes in libtsdc++-v3 are removed too and you can find=20 the same in the updated patch. >and make the code in unwind-dw2-* use those macros,=20 >instead of having separate copies of the files. A new file unwind-helper.h file is created in libgcc/config/cr16 directory= =20 as per your suggestion and defined a few macros in this newly defined file= =20 which are getting called from gcc/unwind-dw2.c. Please review the same=20 and do let me know for further modifications, if any. We have identified=20 issues related to exception handling using prints in unwind code and=20 will debug the same to a greater extent in near future with further=20 development of GNU based tools. >Since you first submitted the port, a file contrib/config-list.mk "cr16-elf" is added to config-list.mk file. gcc/ChangeLog: -------------- 2011-05-28 Sumanth G Jayant R Sonar =09=09 * config.gcc: Add cr16-* support. * doc/extend.texi: Document cr16 extensions. * doc/install.texi: Document cr16 install. * doc/invoke.texi: Document cr16 options. * doc/md.texi: Document cr16 constraints. * config/cr16/cr16.c: New file. * config/cr16/cr16.h: New file. * config/cr16/cr16.md: New file. * config/cr16/cr16.opt: New file. * config/cr16/cr16-libgcc.s: New file. * config/cr16/cr16-protos.h: New file. =09 * config/cr16/divmodhi3.c: New file. * config/cr16/predicates.md: New file. * config/cr16/constraints.md: New file. * config/cr16/t-cr16: New file. libgcc/ChangeLog: ----------------- 2011-05-28 Sumanth G Jayant R Sonar * config.host: Add National Semiconductor CR16 target (cr16-*-*). * config/cr16/crti.S: New file. * config/cr16/crtlibid.S: New file. * config/cr16/crtn.S: New file. * config/cr16/t-cr16: New file. * config/cr16/unwind-helper.h: New file. =09 contrib/ChangeLog: ---------- 2011-05-28 Sumanth G Jayant R Sonar * config-list.mk: Add National Semiconductor CR16 target. =20=20=20 Thanks in advance, Sumanth G, PUNE (India). =3D=3D=3D=3D=3D End Message =3D=3D=3D=3D=3D=3D --_002_371569CBCFB2E745B891DBB88B2DFDDD1A9EF750C1KCINPUNHJCMS0_ Content-Type: application/octet-stream; name="cr16-gcc.patch" Content-Description: cr16-gcc.patch Content-Disposition: attachment; filename="cr16-gcc.patch"; size=173900; creation-date="Tue, 28 Jun 2011 12:20:52 GMT"; modification-date="Tue, 28 Jun 2011 13:03:43 GMT" Content-Transfer-Encoding: base64 Content-length: 235733 LS0tIG9yaWcvY29udHJpYi9jb25maWctbGlzdC5tawkyMDExLTA1LTA1IDA3 OjE3OjQ3LjAwMDAwMDAwMCArMDUzMAorKysgbW9kL2NvbnRyaWIvY29uZmln LWxpc3QubWsJMjAxMS0wNi0yOCAxMjozNToyNi4wMDAwMDAwMDAgKzA1MzAK QEAgLTE3LDcgKzE3LDcgQEAgTElTVCA9IGFscGhhLWxpbnV4LWdudSBhbHBo YS1mcmVlYnNkNiBhbAogICBhcm0tbGludXgtYW5kcm9pZGVhYmkgYXJtLXVj bGludXhfZWFiaSBhcm0tZWNvcy1lbGYgYXJtLWVhYmkgXAogICBhcm0tc3lt YmlhbmVsZiBhcm0tcnRlbXMgYXJtLWVsZiBhcm0td2luY2UtcGUgYXZyLXJ0 ZW1zIGF2ci1lbGYgXAogICBiZmluLWVsZiBiZmluLXVjbGludXggYmZpbi1s aW51eC11Y2xpYmMgYmZpbi1ydGVtcyBiZmluLW9wZW5ic2QgXAotICBjcmlz LWVsZiBjcmlzLWxpbnV4IGNyaXN2MzItZWxmIGNyaXN2MzItbGludXggZmlk by1lbGYgXAorICBjcjE2LWVsZiBjcmlzLWVsZiBjcmlzLWxpbnV4IGNyaXN2 MzItZWxmIGNyaXN2MzItbGludXggZmlkby1lbGYgXAogICBmcjMwLWVsZiBm cnYtZWxmIGZydi1saW51eCBoODMwMC1lbGYgaDgzMDAtcnRlbXMgaHBwYS1s aW51eC1nbnUgXAogICBocHBhLWxpbnV4LWdudU9QVC1lbmFibGUtc2psai1l eGNlcHRpb25zPXllcyBocHBhNjQtbGludXgtZ251IFwKICAgaHBwYTIuMC1o cHV4MTAuMSBocHBhNjQtaHB1eDExLjMgXAotLS0gb3JpZy9nY2MvY29uZmln L2NyMTYvY29uc3RyYWludHMubWQJMTk3MC0wMS0wMSAwNTozMDowMC4wMDAw MDAwMDAgKzA1MzAKKysrIG1vZC9nY2MvY29uZmlnL2NyMTYvY29uc3RyYWlu dHMubWQJMjAxMS0wNi0yOCAxMjozNDozNC4wMDAwMDAwMDAgKzA1MzAKQEAg LTAsMCArMSw4MSBAQAorOzsgUHJlZGljYXRlcyBvZiBtYWNoaW5lIGRlc2Ny aXB0aW9uIGZvciBDUjE2LgorOzsgQ29weXJpZ2h0IChDKSAyMDExIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorOzsgQ29udHJpYnV0ZWQgYnkg S1BJVCBDdW1taW5zIEluZm9zeXN0ZW1zIExpbWl0ZWQuCis7OworOzsgVGhp cyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorOzsKKzs7IEdDQyBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 IGl0Cis7OyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorOzsgYnkgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlv dXIKKzs7IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCis7OworOzsgR0ND IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsIGJ1dCBXSVRIT1VUCis7OyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkK Kzs7IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKzs7IExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KKzs7Cis7OyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj b3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorOzsgYWxv bmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBz ZWUKKzs7IDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gIAorCis7 OyBDb25zdHJhaW50cworOzsgUmVnaXN0ZXIgY29uc3RyYWludHMKKyhkZWZp bmVfcmVnaXN0ZXJfY29uc3RyYWludCAiYiIgIk5PU1BfUkVHUyIKKyAgIkBu byBzcCByZWdpc3RlcnMiKQorCisoZGVmaW5lX3JlZ2lzdGVyX2NvbnN0cmFp bnQgImMiICJTSE9SVF9SRUdTIgorICAiQHNob3J0IHJlZ2lzdGVycyIpCisK KyhkZWZpbmVfcmVnaXN0ZXJfY29uc3RyYWludCAiZCIgIkxPTkdfUkVHUyIK KyAgIkBsb25nIHJlZ2lzdGVycyIpCisKKzs7IEludGVnZXIgY29uc3RyYWlu dHMuCisoZGVmaW5lX2NvbnN0cmFpbnQgIkkiCisgICJBIHNpZ25lZCA0LWJp dCBpbW1lZGlhdGUuIgorICAoYW5kIChtYXRjaF9jb2RlICJjb25zdF9pbnQi KQorICAgICAgIChtYXRjaF90ZXN0ICJTSUdORURfSU5UX0ZJVFNfTl9CSVRT IChpdmFsLCA0KSIpKSkKKworKGRlZmluZV9jb25zdHJhaW50ICJKIgorICAi QSBzaWduZWQgNS1iaXQgaW1tZWRpYXRlLiIKKyAgKGFuZCAobWF0Y2hfY29k ZSAiY29uc3RfaW50IikKKyAgICAgICAobWF0Y2hfdGVzdCAiU0lHTkVEX0lO VF9GSVRTX05fQklUUyAoaXZhbCwgNSkiKSkpCisKKyhkZWZpbmVfY29uc3Ry YWludCAiSyIKKyAgIkEgc2lnbmVkIDYtYml0IGltbWVkaWF0ZS4iCisgIChh bmQgKG1hdGNoX2NvZGUgImNvbnN0X2ludCIpCisgICAgICAgKG1hdGNoX3Rl c3QgIlNJR05FRF9JTlRfRklUU19OX0JJVFMgKGl2YWwsIDYpIikpKQorCiso ZGVmaW5lX2NvbnN0cmFpbnQgIkwiCisgICJBIHVuc2lnbmVkIDQtYml0IGlt bWVkaWF0ZS4iCisgIChhbmQgKG1hdGNoX2NvZGUgImNvbnN0X2ludCIpCisg ICAgICAgKG1hdGNoX3Rlc3QgIlVOU0lHTkVEX0lOVF9GSVRTX05fQklUUyAo aXZhbCwgNCkiKSkpCisKKyhkZWZpbmVfY29uc3RyYWludCAiTSIKKyAgIkEg dW5zaWduZWQgYW5kIGN1c3RvbWl6ZWQgIDQtYml0IGltbWVkaWF0ZS4iCisg IChhbmQgKG1hdGNoX2NvZGUgImNvbnN0X2ludCIpCisgICAgICAgKG1hdGNo X3Rlc3QgIihJTl9SQU5HRV9QIChpdmFsLCAwLCAxNSkgJiYgKChpdmFsICE9 IDkpIHx8IChpdmFsICE9IDExKSkpICAiKSkpCisKKyhkZWZpbmVfY29uc3Ry YWludCAiTiIKKyAgIkEgc2lnbmVkIDE2LWJpdCBpbW1lZGlhdGUuIgorICAo YW5kIChtYXRjaF9jb2RlICJjb25zdF9pbnQiKQorICAgICAgIChtYXRjaF90 ZXN0ICJJTl9SQU5HRV9QIChpdmFsLCAtMzI3NjgsIDMyNzY3KSIpKSkKKwor KGRlZmluZV9jb25zdHJhaW50ICJPIgorICAiQSB1bnNpZ25lZCAyMC1iaXQg aW1tZWRpYXRlLiIKKyAgKGFuZCAobWF0Y2hfY29kZSAiY29uc3RfaW50IikK KyAgICAgICAobWF0Y2hfdGVzdCAiSU5fUkFOR0VfUCAoaXZhbCwgMCwgMTA0 ODU3NSkiKSkpCisKKyhkZWZpbmVfY29uc3RyYWludCAiUSIKKyAgIkEgc2hp ZnQgUUkgaW1tZWRpYXRlLiIKKyAgKGFuZCAobWF0Y2hfY29kZSAiY29uc3Rf aW50IikKKyAgICAgICAobWF0Y2hfdGVzdCAiSU5fUkFOR0VfUCAoaXZhbCwg MCwgNykiKSkpCisKKyhkZWZpbmVfY29uc3RyYWludCAiUiIKKyAgIkEgc2hp ZnQgSEkgaW1tZWRpYXRlLiIKKyAgKGFuZCAobWF0Y2hfY29kZSAiY29uc3Rf aW50IikKKyAgICAgICAobWF0Y2hfdGVzdCAiSU5fUkFOR0VfUCAoaXZhbCwg MCwgMTUpIikpKQorCisoZGVmaW5lX2NvbnN0cmFpbnQgIlMiCisgICJBIHNo aWZ0IFNJIGltbWVkaWF0ZS4iCisgIChhbmQgKG1hdGNoX2NvZGUgImNvbnN0 X2ludCIpCisgICAgICAgKG1hdGNoX3Rlc3QgIklOX1JBTkdFX1AgKGl2YWws IDAsIDMxKSIpKSkKLS0tIG9yaWcvZ2NjL2NvbmZpZy9jcjE2L2NyMTYuYwkx OTcwLTAxLTAxIDA1OjMwOjAwLjAwMDAwMDAwMCArMDUzMAorKysgbW9kL2dj Yy9jb25maWcvY3IxNi9jcjE2LmMJMjAxMS0wNi0yOCAxMjozNDozNC4wMDAw MDAwMDAgKzA1MzAKQEAgLTAsMCArMSwyMjE0IEBACisvKiBPdXRwdXQgcm91 dGluZXMgZm9yIENSMTYgcHJvY2Vzc29yLgorICAgQ29weXJpZ2h0IChDKSAy MDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29udHJp YnV0ZWQgYnkgS1BJVCBDdW1taW5zIEluZm9zeXN0ZW1zIExpbWl0ZWQuCisg IAorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCisgICBHQ0MgaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y IG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyAgIGJ5IHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9y IChhdCB5b3VyCisgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIAor ICAgR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgICBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFC SUxJVFkKKyAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgZm9y IG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk IGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAg IGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBu b3Qgc2VlCisgICA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAq LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAic3lzdGVtLmgi CisjaW5jbHVkZSAiY29yZXR5cGVzLmgiCisjaW5jbHVkZSAidG0uaCIKKyNp bmNsdWRlICJydGwuaCIKKyNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAi dG1fcC5oIgorI2luY2x1ZGUgInJlZ3MuaCIKKyNpbmNsdWRlICJoYXJkLXJl Zy1zZXQuaCIKKyNpbmNsdWRlICJpbnNuLWNvbmZpZy5oIgorI2luY2x1ZGUg ImNvbmRpdGlvbnMuaCIKKyNpbmNsdWRlICJvdXRwdXQuaCIKKyNpbmNsdWRl ICJpbnNuLWNvZGVzLmgiCisjaW5jbHVkZSAiaW5zbi1hdHRyLmgiCisjaW5j bHVkZSAiZmxhZ3MuaCIKKyNpbmNsdWRlICJleGNlcHQuaCIKKyNpbmNsdWRl ICJmdW5jdGlvbi5oIgorI2luY2x1ZGUgInJlY29nLmgiCisjaW5jbHVkZSAi ZXhwci5oIgorI2luY2x1ZGUgIm9wdGFicy5oIgorI2luY2x1ZGUgImRpYWdu b3N0aWMtY29yZS5oIgorI2luY2x1ZGUgImJhc2ljLWJsb2NrLmgiCisjaW5j bHVkZSAidGFyZ2V0LmgiCisjaW5jbHVkZSAidGFyZ2V0LWRlZi5oIgorI2lu Y2x1ZGUgImRmLmgiCisKKy8qIERlZmluaXRpb25zLiAgKi8KKworLyogTWF4 aW11bSBudW1iZXIgb2YgcmVnaXN0ZXIgdXNlZCBmb3IgcGFzc2luZyBwYXJh bWV0ZXJzLiAgKi8KKyNkZWZpbmUgTUFYX1JFR19GT1JfUEFTU0lOR19BUkdT ICA2CisKKy8qIE1pbmltdW0gbnVtYmVyIHJlZ2lzdGVyIHVzZWQgZm9yIHBh c3NpbmcgcGFyYW1ldGVycy4gICovCisjZGVmaW5lIE1JTl9SRUdfRk9SX1BB U1NJTkdfQVJHUyAgMgorCisvKiBUaGUgbWF4aW11bSBjb3VudCBvZiB3b3Jk cyBzdXBwb3J0ZWQgaW4gdGhlIGFzc2VtYmx5IG9mIHRoZSBhcmNoaXRlY3R1 cmUgaW4KKyAgIGEgcHVzaC9wb3AgaW5zdHJ1Y3Rpb24uICAqLworI2RlZmlu ZSBNQVhfQ09VTlQgIDgKKworLyogUHJlZGljYXRlIGlzIHRydWUgaWYgdGhl IGN1cnJlbnQgZnVuY3Rpb24gaXMgYSAnbm9yZXR1cm4nIGZ1bmN0aW9uLCAK KyAgIGkuZS4gaXQgaXMgcXVhbGlmaWVkIGFzIHZvbGF0aWxlLiAgKi8KKyNk ZWZpbmUgRlVOQ19JU19OT1JFVFVSTl9QKGRlY2wpIChUUkVFX1RISVNfVk9M QVRJTEUgKGRlY2wpKQorCisvKiBQcmVkaWNhdGUgdGhhdCBob2xkcyB3aGVu IHdlIG5lZWQgdG8gc2F2ZSByZWdpc3RlcnMgZXZlbiBmb3IgJ25vcmV0dXJu JworICAgZnVuY3Rpb25zLCB0byBhY2NvbW9kYXRlIGZvciB1bndpbmRpbmcu ICAqLworI2RlZmluZSBNVVNUX1NBVkVfUkVHU19QKCkgXAorICAoZmxhZ191 bndpbmRfdGFibGVzIHx8IChmbGFnX2V4Y2VwdGlvbnMgJiYgIVVJX1NKTEop KQorCisvKiBOb256ZXJvIGlmIHRoZSBydHggWCBpcyBhIHNpZ25lZCBjb25z dCBpbnQgb2YgbiBiaXRzLiAgKi8KKyNkZWZpbmUgUlRYX1NJR05FRF9JTlRf RklUU19OX0JJVFMoWCxuKSAgICAgICAgICAgICAgICBcCisgICgoR0VUX0NP REUgKFgpID09IENPTlNUX0lOVCAgICAgICAgICAgICAgICAgICAgICAgICAg XAorICAgJiYgU0lHTkVEX0lOVF9GSVRTX05fQklUUyAoSU5UVkFMIChYKSwg bikpID8gMSA6IDApCisKKy8qIE5vbnplcm8gaWYgdGhlIHJ0eCBYIGlzIGFu IHVuc2lnbmVkIGNvbnN0IGludCBvZiBuIGJpdHMuICAqLworI2RlZmluZSBS VFhfVU5TSUdORURfSU5UX0ZJVFNfTl9CSVRTKFgsIG4pICAgICAgICAgICAg ICAgXAorICAoKEdFVF9DT0RFIChYKSA9PSBDT05TVF9JTlQgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorICAgJiYgVU5TSUdORURfSU5UX0ZJVFNf Tl9CSVRTIChJTlRWQUwgKFgpLCBuKSkgPyAxIDogMCkKKworLyogU3RydWN0 dXJlIGZvciBzdGFjayBjb21wdXRhdGlvbnMuICAqLworCisvKiB2YXJpYWJs ZSBkZWZpbml0aW9ucyBpbiB0aGUgc3RydXR1cmUKKyAgIGFyZ3Nfc2l6ZSAg ICAgICAgICAgICBOdW1iZXIgb2YgYnl0ZXMgc2F2ZWQgb24gdGhlIHN0YWNr IGZvciBsb2NhbCAKKwkJCSB2YXJpYWJsZXMKKworICAgcmVnX3NpemUJCSBO dW1iZXIgb2YgYnl0ZXMgc2F2ZWQgb24gdGhlIHN0YWNrIGZvciAKKwkJCSBu b24tc2NyYXRjaCByZWdpc3RlcnMKKworICAgdG90YWxfc2l6ZSAJCSBUaGUg c3VtIG9mIDIgc2l6ZXM6IGxvY2FscyB2YXJzIGFuZCBwYWRkaW5nIGJ5dGUg CisJCQkgZm9yIHNhdmluZyB0aGUgcmVnaXN0ZXJzLiBVc2VkIGluIGV4cGFu ZF9wcm9sb2d1ZSgpIAorCQkJIGFuZCBleHBhbmRfZXBpbG9ndWUoKQorCisg ICBsYXN0X3JlZ190b19zYXZlICAgICAgV2lsbCBob2xkIHRoZSBudW1iZXIg b2YgdGhlIGxhc3QgcmVnaXN0ZXIgdGhlIAorCQkJIHByb2xvZ3VlIHNhdmVz LCAtMSBpZiBubyByZWdpc3RlciBpcyBzYXZlZAorCisgICBzYXZlX3JlZ3Nb MTZdCSBFYWNoIG9iamVjdCBpbiB0aGUgYXJyYXkgaXMgYSByZWdpc3RlciBu dW1iZXIuIAorCQkJIE1hcmsgMSBmb3IgcmVnaXN0ZXJzIHRoYXQgbmVlZCB0 byBiZSBzYXZlZAorCisgICBudW1fcmVncwkJIE51bWJlciBvZiByZWdpc3Rl cnMgc2F2ZWQKKworICAgaW5pdGlhbGl6ZWQJCSBOb24temVybyBpZiBmcmFt ZSBzaXplIGFscmVhZHkgY2FsY3VsYXRlZCwgbm90IAorCQkJIHVzZWQgeWV0 CisKKyAgIGZ1bmN0aW9uX21ha2VzX2NhbGxzICBEb2VzIHRoZSBmdW5jdGlv biBtYWtlIGNhbGxzID8gbm90IHVzZWQgeWV0LiAgKi8KKworc3RydWN0IGNy MTZfZnJhbWVfaW5mbworeworICB1bnNpZ25lZCBsb25nIHZhcl9zaXplOwor ICB1bnNpZ25lZCBsb25nIGFyZ3Nfc2l6ZTsKKyAgdW5zaWduZWQgaW50ICBy ZWdfc2l6ZTsKKyAgdW5zaWduZWQgbG9uZyB0b3RhbF9zaXplOworICBsb25n ICAgICAgICAgIGxhc3RfcmVnX3RvX3NhdmU7CisgIGxvbmcgICAgICAgICAg c2F2ZV9yZWdzW0ZJUlNUX1BTRVVET19SRUdJU1RFUl07CisgIGludCAgICAg ICAgICAgbnVtX3JlZ3M7CisgIGludCAgICAgICAgICAgaW5pdGlhbGl6ZWQ7 CisgIGludCAgICAgICAgICAgZnVuY3Rpb25fbWFrZXNfY2FsbHM7Cit9Owor CisvKiBDdXJyZW50IGZyYW1lIGluZm9ybWF0aW9uIGNhbGN1bGF0ZWQgYnkg Y3IxNl9jb21wdXRlX2ZyYW1lX3NpemUuICAqLworc3RhdGljIHN0cnVjdCBj cjE2X2ZyYW1lX2luZm8gY3VycmVudF9mcmFtZV9pbmZvOworCisvKiBTdGF0 aWMgVmFyaWFibGVzLiAgKi8KKworLyogRGF0YSBtb2RlbCB0aGF0IHdhcyBz dXBwbGllZCBieSB1c2VyIHZpYSBjb21tYW5kIGxpbmUgb3B0aW9uCisgICBU aGlzIHdpbGwgYmUgb3ZlcnJpZGRlbiBpbiBjYXNlIG9mIGludmFsaWQgY29t YmluYXRpb24KKyAgIG9mIGNvcmUgYW5kIGRhdGEgbW9kZWwgb3B0aW9ucyBh cmUgc3VwcGxpZWQuICAqLworc3RhdGljIGVudW0gZGF0YV9tb2RlbF90eXBl IGRhdGFfbW9kZWwgPSBETV9ERUZBVUxUOworCisvKiBUQVJHRVRNIEZ1bmN0 aW9uIFByb3RvdHlwZXMgYW5kIGZvcndhcmQgZGVjbGFyYXRpb25zICAqLwor c3RhdGljIHJ0eCBjcjE2X3N0cnVjdF92YWx1ZV9ydHggKHRyZWUgZm50eXBl IEFUVFJJQlVURV9VTlVTRUQsCisJCQkJICBpbnQgaW5jb21pbmcgQVRUUklC VVRFX1VOVVNFRCk7CitzdGF0aWMgYm9vbCBjcjE2X3JldHVybl9pbl9tZW1v cnkgKGNvbnN0X3RyZWUgdHlwZSwgY29uc3RfdHJlZSBmbnR5cGUgQVRUUklC VVRFX1VOVVNFRCk7CitzdGF0aWMgYm9vbCBjcjE2X2ZyYW1lX3BvaW50ZXJf cmVxdWlyZWQgKHZvaWQpOworc3RhdGljIGJvb2wgY3IxNl9jYW5fZWxpbWlu YXRlIChjb25zdCBpbnQsIGNvbnN0IGludCk7CitzdGF0aWMgcnR4IGNyMTZf bGVnaXRpbWl6ZV9hZGRyZXNzIChydHgsIHJ0eCwgZW51bSBtYWNoaW5lX21v ZGUpOworc3RhdGljIGVudW0gbWFjaGluZV9tb2RlIGNyMTZfdW53aW5kX3dv cmRfbW9kZSAodm9pZCk7CitzdGF0aWMgdm9pZCBjcjE2X2NvbmRpdGlvbmFs X3JlZ2lzdGVyX3VzYWdlICh2b2lkKTsKK3N0YXRpYyB2b2lkIGNyMTZfb3Zl cnJpZGVfb3B0aW9ucyAodm9pZCk7CitzdGF0aWMgYm9vbCBjcjE2X2NsYXNz X2xpa2VseV9zcGlsbGVkX3AgKHJlZ19jbGFzc190KTsKK3N0YXRpYyBpbnQg IGNyMTZfcmV0dXJuX3BvcHNfYXJncyAodHJlZSwgdHJlZSwgaW50KTsKK3N0 YXRpYyBydHggY3IxNl9mdW5jdGlvbl9hcmcgKGN1bXVsYXRpdmVfYXJnc190 LCBlbnVtIG1hY2hpbmVfbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3RfdHJlZSwgYm9vbCk7CitzdGF0aWMgdm9pZCBjcjE2X2Z1 bmN0aW9uX2FyZ19hZHZhbmNlIChjdW11bGF0aXZlX2FyZ3NfdCwgZW51bSBt YWNoaW5lX21vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0X3RyZWUsIGJvb2wpOworc3RhdGljIGJvb2wgY3IxNl9s ZWdpdGltYXRlX2NvbnN0YW50X3AgICAoZW51bSBtYWNoaW5lX21vZGUsIHJ0 eCk7CitzdGF0aWMgcnR4IGNyMTZfZnVuY3Rpb25fdmFsdWUgKGNvbnN0X3Ry ZWUsIGNvbnN0X3RyZWUsIGJvb2wpOworc3RhdGljIHJ0eCBjcjE2X2xpYmNh bGxfdmFsdWUgKGVudW0gbWFjaGluZV9tb2RlLCBjb25zdF9ydHgpOworc3Rh dGljIGJvb2wgY3IxNl9mdW5jdGlvbl92YWx1ZV9yZWdub19wIChjb25zdCB1 bnNpZ25lZCBpbnQpOworc3RhdGljIGJvb2wgY3IxNl9sZWdpdGltYXRlX2Fk ZHJlc3NfcCAoZW51bSBtYWNoaW5lX21vZGUsIHJ0eCwgYm9vbCk7CitzdGF0 aWMgdm9pZCBjcjE2X3ByaW50X29wZXJhbmQgKEZJTEUgKiwgcnR4LCBpbnQp Oworc3RhdGljIHZvaWQgY3IxNl9wcmludF9vcGVyYW5kX2FkZHJlc3MgKEZJ TEUgKiwgcnR4KTsKK3N0YXRpYyBpbnQgY3IxNl9hZGRyZXNzX2Nvc3QgKHJ0 eCwgYm9vbCk7CitzdGF0aWMgaW50IGNyMTZfcmVnaXN0ZXJfbW92ZV9jb3N0 IChlbnVtIG1hY2hpbmVfbW9kZSwgcmVnX2NsYXNzX3QsIHJlZ19jbGFzc190 KTsKK3N0YXRpYyBpbnQgY3IxNl9tZW1vcnlfbW92ZV9jb3N0IChlbnVtIG1h Y2hpbmVfbW9kZSwgcmVnX2NsYXNzX3QsIGJvb2wpOworCisvKiBTdGFjayBs YXlvdXQgYW5kIGNhbGxpbmcgY29udmVudGlvbnMuICAqLworI3VuZGVmICBU QVJHRVRfU1RSVUNUX1ZBTFVFX1JUWAorI2RlZmluZSBUQVJHRVRfU1RSVUNU X1ZBTFVFX1JUWCAgICAgCWNyMTZfc3RydWN0X3ZhbHVlX3J0eAorI3VuZGVm ICBUQVJHRVRfUkVUVVJOX0lOX01FTU9SWQorI2RlZmluZSBUQVJHRVRfUkVU VVJOX0lOX01FTU9SWSAgICAgCWNyMTZfcmV0dXJuX2luX21lbW9yeQorCisK Ky8qIFRhcmdldC1zcGVjaWZpYyB1c2VzIG9mICdfX2F0dHJpYnV0ZV9fJy4g ICovCisjdW5kZWYgIFRBUkdFVF9BVFRSSUJVVEVfVEFCTEUKKyNkZWZpbmUg VEFSR0VUX0FUVFJJQlVURV9UQUJMRSAJCWNyMTZfYXR0cmlidXRlX3RhYmxl CisjdW5kZWYgVEFSR0VUX05BUlJPV19WT0xBVElMRV9CSVRGSUVMRAorI2Rl ZmluZSBUQVJHRVRfTkFSUk9XX1ZPTEFUSUxFX0JJVEZJRUxEIGhvb2tfYm9v bF92b2lkX2ZhbHNlCisKKy8qIEVIIHJlbGF0ZWQuICAqLworI3VuZGVmIFRB UkdFVF9VTldJTkRfV09SRF9NT0RFCisjZGVmaW5lIFRBUkdFVF9VTldJTkRf V09SRF9NT0RFCQljcjE2X3Vud2luZF93b3JkX21vZGUKKworLyogT3ZlcnJp ZGUgT3B0aW9ucy4gICovCisjdW5kZWYgVEFSR0VUX09QVElPTl9PVkVSUklE RQorI2RlZmluZSBUQVJHRVRfT1BUSU9OX09WRVJSSURFICAJY3IxNl9vdmVy cmlkZV9vcHRpb25zIAorCisvKiBDb25kaXRpb25hbCByZWdpc3RlciB1c3Vh Z2UuICAqLworI3VuZGVmIFRBUkdFVF9DT05ESVRJT05BTF9SRUdJU1RFUl9V U0FHRSAKKyNkZWZpbmUgVEFSR0VUX0NPTkRJVElPTkFMX1JFR0lTVEVSX1VT QUdFIGNyMTZfY29uZGl0aW9uYWxfcmVnaXN0ZXJfdXNhZ2UKKworLyogQ29u dHJvbGxpbmcgcmVnaXN0ZXIgc3BpbGxzLiAgKi8KKyN1bmRlZiBUQVJHRVRf Q0xBU1NfTElLRUxZX1NQSUxMRURfUAorI2RlZmluZSBUQVJHRVRfQ0xBU1Nf TElLRUxZX1NQSUxMRURfUCBjcjE2X2NsYXNzX2xpa2VseV9zcGlsbGVkX3AK KworLyogUGFzc2luZyBmdW5jdGlvbiBhcmd1bWVudHMuICAqLworI3VuZGVm IFRBUkdFVF9GVU5DVElPTl9BUkcKKyNkZWZpbmUgVEFSR0VUX0ZVTkNUSU9O X0FSRyBjcjE2X2Z1bmN0aW9uX2FyZworI3VuZGVmIFRBUkdFVF9GVU5DVElP Tl9BUkdfQURWQU5DRQorI2RlZmluZSBUQVJHRVRfRlVOQ1RJT05fQVJHX0FE VkFOQ0UgY3IxNl9mdW5jdGlvbl9hcmdfYWR2YW5jZQorI3VuZGVmIFRBUkdF VF9SRVRVUk5fUE9QU19BUkdTCisjZGVmaW5lIFRBUkdFVF9SRVRVUk5fUE9Q U19BUkdTIGNyMTZfcmV0dXJuX3BvcHNfYXJncworCisvKiBJbml0aWFsaXpl IHRoZSBHQ0MgdGFyZ2V0IHN0cnVjdHVyZS4gICovCisjdW5kZWYgVEFSR0VU X0ZSQU1FX1BPSU5URVJfUkVRVUlSRUQKKyNkZWZpbmUgVEFSR0VUX0ZSQU1F X1BPSU5URVJfUkVRVUlSRUQJY3IxNl9mcmFtZV9wb2ludGVyX3JlcXVpcmVk CisjdW5kZWYgVEFSR0VUX0NBTl9FTElNSU5BVEUKKyNkZWZpbmUgVEFSR0VU X0NBTl9FTElNSU5BVEUgCQljcjE2X2Nhbl9lbGltaW5hdGUKKyN1bmRlZiBU QVJHRVRfTEVHSVRJTUlaRV9BRERSRVNTCisjZGVmaW5lIFRBUkdFVF9MRUdJ VElNSVpFX0FERFJFU1MgCWNyMTZfbGVnaXRpbWl6ZV9hZGRyZXNzCisjdW5k ZWYgVEFSR0VUX0xFR0lUSU1BVEVfQ09OU1RBTlRfUAorI2RlZmluZSBUQVJH RVRfTEVHSVRJTUFURV9DT05TVEFOVF9QICAgIGNyMTZfbGVnaXRpbWF0ZV9j b25zdGFudF9wCisjdW5kZWYgVEFSR0VUX0xFR0lUSU1BVEVfQUREUkVTU19Q CisjZGVmaW5lIFRBUkdFVF9MRUdJVElNQVRFX0FERFJFU1NfUCAgICAgY3Ix Nl9sZWdpdGltYXRlX2FkZHJlc3NfcAorCisvKiBSZXR1cm5pbmcgZnVuY3Rp b24gdmFsdWUuICAqLworI3VuZGVmIFRBUkdFVF9GVU5DVElPTl9WQUxVRQor I2RlZmluZSBUQVJHRVRfRlVOQ1RJT05fVkFMVUUgY3IxNl9mdW5jdGlvbl92 YWx1ZQorI3VuZGVmIFRBUkdFVF9MSUJDQUxMX1ZBTFVFCisjZGVmaW5lIFRB UkdFVF9MSUJDQUxMX1ZBTFVFIGNyMTZfbGliY2FsbF92YWx1ZQorI3VuZGVm IFRBUkdFVF9GVU5DVElPTl9WQUxVRV9SRUdOT19QCisjZGVmaW5lIFRBUkdF VF9GVU5DVElPTl9WQUxVRV9SRUdOT19QIGNyMTZfZnVuY3Rpb25fdmFsdWVf cmVnbm9fcAorCisvKiBwcmludGluZyB0aGUgdmFsdWVzLiAgKi8KKyN1bmRl ZiBUQVJHRVRfUFJJTlRfT1BFUkFORAorI2RlZmluZSBUQVJHRVRfUFJJTlRf T1BFUkFORCBjcjE2X3ByaW50X29wZXJhbmQKKyN1bmRlZiBUQVJHRVRfUFJJ TlRfT1BFUkFORF9BRERSRVNTCisjZGVmaW5lIFRBUkdFVF9QUklOVF9PUEVS QU5EX0FERFJFU1MgY3IxNl9wcmludF9vcGVyYW5kX2FkZHJlc3MKKworLyog UmVsYXRpdmUgY29zdHMgb2Ygb3BlcmF0aW9ucy4gICovCisjdW5kZWYgIFRB UkdFVF9BRERSRVNTX0NPU1QKKyNkZWZpbmUgVEFSR0VUX0FERFJFU1NfQ09T VCAJCWNyMTZfYWRkcmVzc19jb3N0CisjdW5kZWYgVEFSR0VUX1JFR0lTVEVS X01PVkVfQ09TVAorI2RlZmluZSBUQVJHRVRfUkVHSVNURVJfTU9WRV9DT1NU IGNyMTZfcmVnaXN0ZXJfbW92ZV9jb3N0CisjdW5kZWYgVEFSR0VUX01FTU9S WV9NT1ZFX0NPU1QKKyNkZWZpbmUgVEFSR0VUX01FTU9SWV9NT1ZFX0NPU1Qg Y3IxNl9tZW1vcnlfbW92ZV9jb3N0CisKKy8qIFRhYmxlIG9mIG1hY2hpbmUg YXR0cmlidXRlcy4gICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0 ZV9zcGVjIGNyMTZfYXR0cmlidXRlX3RhYmxlW10gPSB7CisgIC8qIElTUnMg aGF2ZSBzcGVjaWFsIHByb2xvZ3VlIGFuZCBlcGlsb2d1ZSByZXF1aXJlbWVu dHMuICAqLworICAvKiB7IG5hbWUsIG1pbl9sZW4sIG1heF9sZW4sIGRlY2xf cmVxLCB0eXBlX3JlcSwgZm5fdHlwZV9yZXEsIGhhbmRsZXIsCisgICAgICAg YWZmZWN0c190eXBlX2lkZW50aXR5IH0uICAqLworICB7ImludGVycnVwdCIs IDAsIDAsIGZhbHNlLCB0cnVlLCB0cnVlLCBOVUxMLCBmYWxzZX0sCisgIHtO VUxMLCAwLCAwLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBOVUxMLCBmYWxzZX0K K307CisKKy8qIFRBUkdFVF9BU01fVU5BTElHTkVEX3h4X09QIGdlbmVyYXRl cyAuP2J5dGUgZGlyZWN0aXZlCisgICAuP2J5dGUgZGlyZWN0aXZlIGFsb25n IHdpdGggQGMgaXMgbm90IHVuZGVyc3Rvb2QgYnkgYXNzZW1ibGVyLgorICAg VGhlcmVmb3JlLCBtYWtlIGFsbCBUQVJHRVRfQVNNX1VOQUxJR05FRF94eF9P UCBzYW1lCisgICBhcyBUQVJHRVRfQVNNX0FMSUdORURfeHhfT1AuICAqLwor I3VuZGVmIFRBUkdFVF9BU01fVU5BTElHTkVEX0hJX09QCisjZGVmaW5lIFRB UkdFVF9BU01fVU5BTElHTkVEX0hJX09QIAlUQVJHRVRfQVNNX0FMSUdORURf SElfT1AKKyN1bmRlZiBUQVJHRVRfQVNNX1VOQUxJR05FRF9TSV9PUAorI2Rl ZmluZSBUQVJHRVRfQVNNX1VOQUxJR05FRF9TSV9PUCAJVEFSR0VUX0FTTV9B TElHTkVEX1NJX09QCisjdW5kZWYgVEFSR0VUX0FTTV9VTkFMSUdORURfRElf T1AKKyNkZWZpbmUgVEFSR0VUX0FTTV9VTkFMSUdORURfRElfT1AgCVRBUkdF VF9BU01fQUxJR05FRF9ESV9PUAorCisvKiBUYXJnZXQgaG9vayBpbXBsZW1l bnRhdGlvbnMuICAqLworCisvKiBJbXBsZW1lbnRzIGhvb2sgVEFSR0VUX1JF VFVSTl9JTl9NRU1PUlkuICAqLworc3RhdGljIGJvb2wKK2NyMTZfcmV0dXJu X2luX21lbW9yeSAoY29uc3RfdHJlZSB0eXBlLCBjb25zdF90cmVlIGZudHlw ZSBBVFRSSUJVVEVfVU5VU0VEKQoreworICBpZiAoVFlQRV9NT0RFICh0eXBl KSA9PSBCTEttb2RlKQorICAgIHsKKyAgICAgIEhPU1RfV0lERV9JTlQgc2l6 ZSA9IGludF9zaXplX2luX2J5dGVzICh0eXBlKTsKKyAgICAgIHJldHVybiAo KHNpemUgPT0gLTEpIHx8IChzaXplID4gOCkpOworICAgIH0KKyAgZWxzZQor ICAgIHJldHVybiBmYWxzZTsKK30KKworLyogSW1wbGVtZW50IFRBUkdFVF9D TEFTU19MSUtFTFlfU1BJTExFRF9QLiAgKi8KK3N0YXRpYyBib29sCitjcjE2 X2NsYXNzX2xpa2VseV9zcGlsbGVkX3AgKHJlZ19jbGFzc190IHJjbGFzcykK K3sKKyAgaWYgKChyY2xhc3MpID09IFNIT1JUX1JFR1MgfHwgKHJjbGFzcykg PT0gRE9VQkxFX0JBU0VfUkVHUyAKKyAgICAgICB8fCAocmNsYXNzKSA9PSBM T05HX1JFR1MgfHwgKHJjbGFzcykgPT0gR0VORVJBTF9SRUdTKQorICAgIHJl dHVybiB0cnVlOworCisgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGlu dAorY3IxNl9yZXR1cm5fcG9wc19hcmdzICh0cmVlIGZ1bmRlY2wgQVRUUklC VVRFX1VOVVNFRCwKKyAgICAgICAgICAgICAgICAgICAgICB0cmVlIGZ1bnR5 cGUgQVRUUklCVVRFX1VOVVNFRCwgCisJCSAgICAgIGludCBzaXplIEFUVFJJ QlVURV9VTlVTRUQpCit7CisgIHJldHVybiAwOworfQorCisvKiBSZXR1cm5z IHRydWUgaWYgZGF0YSBtb2RlbCBzZWxlY3RlZCB2aWEgY29tbWFuZCBsaW5l IG9wdGlvbgorICAgaXMgc2FtZSBhcyBmdW5jdGlvbiBhcmd1bWVudC4gICov Citib29sCitjcjE2X2lzX2RhdGFfbW9kZWwgKGVudW0gZGF0YV9tb2RlbF90 eXBlIG1vZGVsKQoreworICByZXR1cm4gKG1vZGVsID09IGRhdGFfbW9kZWwp OworfQorCisvKiBQYXJzZSByZWxldmFudCBvcHRpb25zIGFuZCBvdmVycmlk ZS4gICovCitzdGF0aWMgdm9pZAorY3IxNl9vdmVycmlkZV9vcHRpb25zICh2 b2lkKQoreworICAvKiBEaXNhYmxlIC1mZGVsZXRlLW51bGwtcG9pbnRlci1j aGVja3Mgb3B0aW9uIGZvciBDUjE2IHRhcmdldC4KKyAgICAgUHJvZ3JhbXMg d2hpY2ggcmVseSBvbiBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIF9ub3Rf IGhhbHRpbmcgdGhlIAorICAgICBwcm9ncmFtIG1heSBub3Qgd29yayBwcm9w ZXJseSB3aXRoIHRoaXMgb3B0aW9uLiBTbyBkaXNhYmxlIHRoaXMgCisgICAg IG9wdGlvbi4gICovCisgIGZsYWdfZGVsZXRlX251bGxfcG9pbnRlcl9jaGVj a3MgPSAwOworCisgIC8qIElmIC1mcGljIG9wdGlvbiwgZGF0YV9tb2RlbCA9 PSBETV9GQVIuICAqLworICBpZiAoZmxhZ19waWMgPT0gTkVBUl9QSUMpCisg ICAgeworICAgICAgZGF0YV9tb2RlbCA9IERNX0ZBUjsKKyAgICB9CisKKyAg LyogVGhlIG9ubHkgb3B0aW9uIHdlIHdhbnQgdG8gZXhhbWluZSBpcyBkYXRh IG1vZGVsIG9wdGlvbi4gICovCisgIGlmIChjcjE2X2RhdGFfbW9kZWwpCisg ICAgeworICAgICAgaWYgKHN0cmNtcCAoY3IxNl9kYXRhX21vZGVsLCAibWVk aXVtIikgPT0gMCkKKwlkYXRhX21vZGVsID0gRE1fREVGQVVMVDsKKyAgICAg IGVsc2UgaWYgKHN0cmNtcCAoY3IxNl9kYXRhX21vZGVsLCAibmVhciIpID09 IDApCisJZGF0YV9tb2RlbCA9IERNX05FQVI7CisgICAgICBlbHNlIGlmIChz dHJjbXAgKGNyMTZfZGF0YV9tb2RlbCwgImZhciIpID09IDApCisJeworCSAg aWYgKFRBUkdFVF9DUjE2Q1ApCisJICAgIGRhdGFfbW9kZWwgPSBETV9GQVI7 CisJICBlbHNlCisJICAgIGVycm9yICgiZGF0YS1tb2RlbD1mYXIgbm90IHZh bGlkIGZvciBjcjE2YyBhcmNoaXRlY3R1cmUiKTsKKwl9CisgICAgICBlbHNl CisJZXJyb3IgKCJpbnZhbGlkIGRhdGEgbW9kZWwgb3B0aW9uIC1tZGF0YS1t b2RlbD0lcyIsIGNyMTZfZGF0YV9tb2RlbCk7CisgICAgfQorICBlbHNlCisg ICAgZGF0YV9tb2RlbCA9IERNX0RFRkFVTFQ7CisKKworfQorCisvKiBJbXBs ZW1lbnRzIHRoZSBtYWNybyAgVEFSR0VUX0NPTkRJVElPTkFMX1JFR0lTVEVS X1VTQUdFLiAgKi8KK3N0YXRpYyB2b2lkCitjcjE2X2NvbmRpdGlvbmFsX3Jl Z2lzdGVyX3VzYWdlICh2b2lkKQoreworICBpZiAoZmxhZ19waWMpCisgICAg eworICAgICAgZml4ZWRfcmVnc1sxMl0gPSBjYWxsX3VzZWRfcmVnc1sxMl0g PSAxOworICAgIH0KK30KKworLyogU3RhY2sgbGF5b3V0IGFuZCBjYWxsaW5n IGNvbnZlbnRpb25zIHJvdXRpbmVzLiAgKi8KKworLyogUmV0dXJuIG5vbnpl cm8gaWYgdGhlIGN1cnJlbnQgZnVuY3Rpb24gYmVpbmcgY29tcGlsZWQgaXMg YW4gaW50ZXJydXB0CisgICBmdW5jdGlvbiBhcyBzcGVjaWZpZWQgYnkgdGhl ICJpbnRlcnJ1cHQiIGF0dHJpYnV0ZS4gICovCitpbnQKK2NyMTZfaW50ZXJy dXB0X2Z1bmN0aW9uX3AgKHZvaWQpCit7CisgIHRyZWUgYXR0cmlidXRlczsK KworICBhdHRyaWJ1dGVzID0gVFlQRV9BVFRSSUJVVEVTIChUUkVFX1RZUEUg KGN1cnJlbnRfZnVuY3Rpb25fZGVjbCkpOworICByZXR1cm4gKGxvb2t1cF9h dHRyaWJ1dGUgKCJpbnRlcnJ1cHQiLCBhdHRyaWJ1dGVzKSAhPSBOVUxMX1RS RUUpOworfQorCisvKiBDb21wdXRlIHZhbHVlcyBmb3IgdGhlIGFycmF5IGN1 cnJlbnRfZnJhbWVfaW5mby5zYXZlX3JlZ3MgYW5kIHRoZSB2YXJpYWJsZSAK KyAgIGN1cnJlbnRfZnJhbWVfaW5mby5yZWdfc2l6ZS4gVGhlIGluZGV4IG9m IGN1cnJlbnRfZnJhbWVfaW5mby5zYXZlX3JlZ3MgCisgICBpcyBudW1iZXJz IG9mIHJlZ2lzdGVyLCBlYWNoIHdpbGwgZ2V0IDEgaWYgd2UgbmVlZCB0byBz YXZlIGl0IGluIHRoZSAKKyAgIGN1cnJlbnQgZnVuY3Rpb24sIDAgaWYgbm90 LiBjdXJyZW50X2ZyYW1lX2luZm8ucmVnX3NpemUgaXMgdGhlIHRvdGFsIHN1 bSAKKyAgIG9mIHRoZSByZWdpc3RlcnMgYmVpbmcgc2F2ZWQuICAqLworc3Rh dGljIHZvaWQKK2NyMTZfY29tcHV0ZV9zYXZlX3JlZ3MgKHZvaWQpCit7Cisg IHVuc2lnbmVkIGludCByZWdubzsKKworICAvKiBJbml0aWFsaXplIGhlcmUg c28gaW4gY2FzZSB0aGUgZnVuY3Rpb24gaXMgbm8tcmV0dXJuIGl0IHdpbGwg YmUgLTEuICAqLworICBjdXJyZW50X2ZyYW1lX2luZm8ubGFzdF9yZWdfdG9f c2F2ZSA9IC0xOworCisgIC8qIEluaXRpYWxpemUgdGhlIG51bWJlciBvZiBi eXRlcyB0byBiZSBzYXZlZC4gKi8KKyAgY3VycmVudF9mcmFtZV9pbmZvLnJl Z19zaXplID0gMDsKKworICAvKiBObyBuZWVkIHRvIHNhdmUgYW55IHJlZ2lz dGVycyBpZiB0aGUgZnVuY3Rpb24gbmV2ZXIgcmV0dXJucy4gICovCisgIGlm IChGVU5DX0lTX05PUkVUVVJOX1AgKGN1cnJlbnRfZnVuY3Rpb25fZGVjbCkg JiYgIU1VU1RfU0FWRV9SRUdTX1AgKCkpCisgICAgcmV0dXJuOworCisgIGZv ciAocmVnbm8gPSAwOyByZWdubyA8IEZJUlNUX1BTRVVET19SRUdJU1RFUjsg cmVnbm8rKykKKyAgICB7CisgICAgICBpZiAoZml4ZWRfcmVnc1tyZWdub10p CisJeworCSAgY3VycmVudF9mcmFtZV9pbmZvLnNhdmVfcmVnc1tyZWdub10g PSAwOworCSAgY29udGludWU7CisJfQorCisgICAgICAvKiBJZiB0aGlzIHJl ZyBpcyB1c2VkIGFuZCBub3QgY2FsbC11c2VkIChleGNlcHQgUkEpLCBzYXZl IGl0LiAgKi8KKyAgICAgIGlmIChjcjE2X2ludGVycnVwdF9mdW5jdGlvbl9w ICgpKQorCXsKKwkgIGlmICghY3VycmVudF9mdW5jdGlvbl9pc19sZWFmICYm IGNhbGxfdXNlZF9yZWdzW3JlZ25vXSkKKwkgICAgLyogVGhpcyBpcyBhIHZv bGF0aWxlIHJlZyBpbiBhIG5vbi1sZWFmIGludGVycnVwdCByb3V0aW5lIC0g c2F2ZSAKKwkgICAgICAgaXQgZm9yIHRoZSBzYWtlIG9mIGl0cyBzb25zLiAg Ki8KKwkgICAgY3VycmVudF9mcmFtZV9pbmZvLnNhdmVfcmVnc1tyZWdub10g PSAxOworCSAgZWxzZSBpZiAoZGZfcmVnc19ldmVyX2xpdmVfcCAocmVnbm8p KQorCSAgICAvKiBUaGlzIHJlZyBpcyB1c2VkIC0gc2F2ZSBpdC4gICovCisJ ICAgIGN1cnJlbnRfZnJhbWVfaW5mby5zYXZlX3JlZ3NbcmVnbm9dID0gMTsK KwkgIGVsc2UKKwkgICAgLyogVGhpcyByZWcgaXMgbm90IHVzZWQsIGFuZCBp cyBub3QgYSB2b2xhdGlsZSAtIGRvbid0IHNhdmUuICAqLworCSAgICBjdXJy ZW50X2ZyYW1lX2luZm8uc2F2ZV9yZWdzW3JlZ25vXSA9IDA7CisJfQorICAg ICAgZWxzZQorCXsKKwkgIC8qIElmIHRoaXMgcmVnIGlzIHVzZWQgYW5kIG5v dCBjYWxsLXVzZWQgKGV4Y2VwdCBSQSksIHNhdmUgaXQuICAqLworCSAgaWYg KGRmX3JlZ3NfZXZlcl9saXZlX3AgKHJlZ25vKQorCSAgICAgICYmICghY2Fs bF91c2VkX3JlZ3NbcmVnbm9dIHx8IHJlZ25vID09IFJFVFVSTl9BRERSRVNT X1JFR05VTSkpCisJICAgIGN1cnJlbnRfZnJhbWVfaW5mby5zYXZlX3JlZ3Nb cmVnbm9dID0gMTsKKwkgIGVsc2UKKwkgICAgY3VycmVudF9mcmFtZV9pbmZv LnNhdmVfcmVnc1tyZWdub10gPSAwOworCX0KKyAgICB9CisKKyAgLyogU2F2 ZSByZWdpc3RlcnMgc28gdGhlIGV4Y2VwdGlvbiBoYW5kbGVyIGNhbiBtb2Rp ZnkgdGhlbS4gICovCisgIGlmIChjcnRsLT5jYWxsc19laF9yZXR1cm4pCisg ICAgeworICAgICAgdW5zaWduZWQgaW50IGk7CisKKyAgICAgIGZvciAoaSA9 IDA7OyArK2kpCisJeworCSAgcmVnbm8gPSBFSF9SRVRVUk5fREFUQV9SRUdO TyAoaSk7CisJICBpZiAoSU5WQUxJRF9SRUdOVU0gPT0gcmVnbm8pCisJICAg IGJyZWFrOworCSAgY3VycmVudF9mcmFtZV9pbmZvLnNhdmVfcmVnc1tyZWdu b10gPSAxOworCX0KKyAgICB9CisKKyAgZm9yIChyZWdubyA9IDA7IHJlZ25v IDwgRklSU1RfUFNFVURPX1JFR0lTVEVSOyByZWdubysrKQorICAgIGlmIChj dXJyZW50X2ZyYW1lX2luZm8uc2F2ZV9yZWdzW3JlZ25vXSA9PSAxKQorICAg ICAgeworCWN1cnJlbnRfZnJhbWVfaW5mby5sYXN0X3JlZ190b19zYXZlID0g cmVnbm87CisJaWYgKHJlZ25vID49IENSMTZfRklSU1RfRFdPUkRfUkVHSVNU RVIpCisJICBjdXJyZW50X2ZyYW1lX2luZm8ucmVnX3NpemUgKz0gQ1IxNl9V TklUU19QRVJfRFdPUkQ7CisJZWxzZQorCSAgY3VycmVudF9mcmFtZV9pbmZv LnJlZ19zaXplICs9IFVOSVRTX1BFUl9XT1JEOworICAgICAgfQorfQorCisv KiBDb21wdXRlIHRoZSBzaXplIG9mIHRoZSBsb2NhbCBhcmVhIGFuZCB0aGUg c2l6ZSB0byBiZSBhZGp1c3RlZCBieSB0aGUKKyAgIHByb2xvZ3VlIGFuZCBl cGlsb2d1ZS4gICovCitzdGF0aWMgdm9pZAorY3IxNl9jb21wdXRlX2ZyYW1l ICh2b2lkKQoreworICAvKiBGb3IgYWxpZ25pbmcgdGhlIGxvY2FsIHZhcmlh Ymxlcy4gICovCisgIGludCBzdGFja19hbGlnbm1lbnQgPSBTVEFDS19CT1VO REFSWSAvIEJJVFNfUEVSX1VOSVQ7CisgIGludCBwYWRkaW5nX2xvY2FsczsK KworICAvKiBQYWRkaW5nIG5lZWRlZCBmb3IgZWFjaCBlbGVtZW50IG9mIHRo ZSBmcmFtZS4gICovCisgIGN1cnJlbnRfZnJhbWVfaW5mby52YXJfc2l6ZSA9 IGdldF9mcmFtZV9zaXplICgpOworCisgIC8qIEFsaWduIHRvIHRoZSBzdGFj ayBhbGlnbm1lbnQuICAqLworICBwYWRkaW5nX2xvY2FscyA9IGN1cnJlbnRf ZnJhbWVfaW5mby52YXJfc2l6ZSAlIHN0YWNrX2FsaWdubWVudDsKKyAgaWYg KHBhZGRpbmdfbG9jYWxzKQorICAgIHBhZGRpbmdfbG9jYWxzID0gc3RhY2tf YWxpZ25tZW50IC0gcGFkZGluZ19sb2NhbHM7CisKKyAgY3VycmVudF9mcmFt ZV9pbmZvLnZhcl9zaXplICs9IHBhZGRpbmdfbG9jYWxzOworICBjdXJyZW50 X2ZyYW1lX2luZm8udG90YWxfc2l6ZSA9IGN1cnJlbnRfZnJhbWVfaW5mby52 YXJfc2l6ZSAKKwkJCSAgICsgKEFDQ1VNVUxBVEVfT1VUR09JTkdfQVJHUwor CQkJICAgID8gY3J0bC0+b3V0Z29pbmdfYXJnc19zaXplIDogMCk7Cit9CisK Ky8qIEltcGxlbWVudHMgdGhlIG1hY3JvIElOSVRJQUxfRUxJTUlOQVRJT05f T0ZGU0VULCByZXR1cm4gdGhlIE9GRlNFVC4gICovCitpbnQKK2NyMTZfaW5p dGlhbF9lbGltaW5hdGlvbl9vZmZzZXQgKGludCBmcm9tLCBpbnQgdG8pCit7 CisgIC8qIENvbXB1dGUgdGhpcyBzaW5jZSB3ZSBuZWVkIHRvIHVzZSBjdXJy ZW50X2ZyYW1lX2luZm8ucmVnX3NpemUuICAqLworICBjcjE2X2NvbXB1dGVf c2F2ZV9yZWdzICgpOworCisgIC8qIENvbXB1dGUgdGhpcyBzaW5jZSB3ZSBu ZWVkIHRvIHVzZSBjdXJyZW50X2ZyYW1lX2luZm8udmFyX3NpemUuICAqLwor ICBjcjE2X2NvbXB1dGVfZnJhbWUgKCk7CisKKyAgaWYgKCgoZnJvbSkgPT0g RlJBTUVfUE9JTlRFUl9SRUdOVU0pICYmICgodG8pID09IFNUQUNLX1BPSU5U RVJfUkVHTlVNKSkKKyAgICByZXR1cm4gKEFDQ1VNVUxBVEVfT1VUR09JTkdf QVJHUyA/IGNydGwtPm91dGdvaW5nX2FyZ3Nfc2l6ZSA6IDApOworICBlbHNl IGlmICgoKGZyb20pID09IEFSR19QT0lOVEVSX1JFR05VTSkgJiYgKCh0bykg PT0gRlJBTUVfUE9JTlRFUl9SRUdOVU0pKQorICAgIHJldHVybiAoY3VycmVu dF9mcmFtZV9pbmZvLnJlZ19zaXplICsgY3VycmVudF9mcmFtZV9pbmZvLnZh cl9zaXplKTsKKyAgZWxzZSBpZiAoKChmcm9tKSA9PSBBUkdfUE9JTlRFUl9S RUdOVU0pICYmICgodG8pID09IFNUQUNLX1BPSU5URVJfUkVHTlVNKSkKKyAg ICByZXR1cm4gKGN1cnJlbnRfZnJhbWVfaW5mby5yZWdfc2l6ZSArIGN1cnJl bnRfZnJhbWVfaW5mby52YXJfc2l6ZSAKKwkgICAgKyAoQUNDVU1VTEFURV9P VVRHT0lOR19BUkdTID8gY3J0bC0+b3V0Z29pbmdfYXJnc19zaXplIDogMCkp OworICBlbHNlCisgICAgZ2NjX3VucmVhY2hhYmxlICgpOworfQorCisvKiBS ZWdpc3RlciBVc2FnZS4gICovCisKKy8qIFJldHVybiB0aGUgY2xhc3MgbnVt YmVyIG9mIHRoZSBzbWFsbGVzdCBjbGFzcyBjb250YWluaW5nIHJlZyBudW1i ZXIgUkVHTk8uCisgICBUaGlzIGNvdWxkIGJlIGEgY29uZGl0aW9uYWwgZXhw cmVzc2lvbiBvciBjb3VsZCBpbmRleCBhbiBhcnJheS4gICovCitlbnVtIHJl Z19jbGFzcworY3IxNl9yZWdub19yZWdfY2xhc3MgKGludCByZWdubykKK3sK KyAgaWYgKChyZWdubyA+PSAwKSAmJiAocmVnbm8gPCBDUjE2X0ZJUlNUX0RX T1JEX1JFR0lTVEVSKSkKKyAgICByZXR1cm4gU0hPUlRfUkVHUzsKKworICBp ZiAoKHJlZ25vID49IENSMTZfRklSU1RfRFdPUkRfUkVHSVNURVIpICYmIChy ZWdubyA8IEZJUlNUX1BTRVVET19SRUdJU1RFUikpCisgICAgcmV0dXJuIExP TkdfUkVHUzsKKworICByZXR1cm4gTk9fUkVHUzsKK30KKworLyogUmV0dXJu IDEgaWYgaGFyZCByZWdpc3RlciBSRUdOTyBjYW4gaG9sZCBhIHZhbHVlIG9m IG1hY2hpbmUtbW9kZSBNT0RFLiAgKi8KK2ludAorY3IxNl9oYXJkX3JlZ25v X21vZGVfb2sgKGludCByZWdubywgZW51bSBtYWNoaW5lX21vZGUgbW9kZSkK K3sKKyAgaWYgKChHRVRfTU9ERV9TSVpFIChtb2RlKSA+PSA0KSAmJiAocmVn bm8gPT0gMTEpKQorICAgICAgICByZXR1cm4gMDsKKyAKKyAgaWYgKG1vZGUg PT0gREltb2RlIHx8IG1vZGUgPT0gREZtb2RlKQorICAgIHsKKyAgICAgIGlm ICgocmVnbm8gPiA4KSB8fCAocmVnbm8gJiAxKSkKKwlyZXR1cm4gMDsKKyAg ICAgIHJldHVybiAxOworICAgIH0KKworICBpZiAoKFRBUkdFVF9JTlQzMikK KyAgICAgICYmICgocmVnbm8gPj0gMTIpICYmIChHRVRfTU9ERV9TSVpFICht b2RlKSA8IDQgKSkpCisgICAgIHJldHVybiAwOworCisgIC8qIENDIGNhbiBv bmx5IGhvbGQgQ0Ntb2RlIHZhbHVlcy4gICovCisgIGlmIChHRVRfTU9ERV9D TEFTUyAobW9kZSkgPT0gTU9ERV9DQykKKyAgICByZXR1cm4gMDsKKyAgcmV0 dXJuIDE7Cit9CisKKy8qIFJldHVybnMgcmVnaXN0ZXIgbnVtYmVyIGZvciBm dW5jdGlvbiByZXR1cm4gdmFsdWUuKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWdu ZWQgaW50CitjcjE2X3JldF9yZWdpc3RlciAodm9pZCkKK3sKKyAgcmV0dXJu IDA7Cit9CisKKy8qIEltcGxlbWVudHMgaG9vayBUQVJHRVRfU1RSVUNUX1ZB TFVFX1JUWC4gICovCitzdGF0aWMgcnR4CitjcjE2X3N0cnVjdF92YWx1ZV9y dHggKHRyZWUgZm50eXBlIEFUVFJJQlVURV9VTlVTRUQsCisgICAgICAgICAg ICAgICAgICAgICAgIGludCBpbmNvbWluZyBBVFRSSUJVVEVfVU5VU0VEKQor eworICByZXR1cm4gZ2VuX3J0eF9SRUcgKFBtb2RlLCBjcjE2X3JldF9yZWdp c3RlciAoKSk7Cit9CisKKy8qIFJldHVybmluZyBmdW5jdGlvbiB2YWx1ZS4g ICovCisKKy8qIFdvcmtlciBmdW5jdGlvbiBmb3IgVEFSR0VUX0ZVTkNUSU9O X1ZBTFVFX1JFR05PX1AuICAqLworc3RhdGljIGJvb2wKK2NyMTZfZnVuY3Rp b25fdmFsdWVfcmVnbm9fcCAoY29uc3QgdW5zaWduZWQgaW50IHJlZ25vKQor eworICByZXR1cm4gKHJlZ25vID09IGNyMTZfcmV0X3JlZ2lzdGVyICgpKTsK K30KKworLyogQ3JlYXRlIGFuIFJUWCByZXByZXNlbnRpbmcgdGhlIHBsYWNl IHdoZXJlIGEKKyAgIGxpYnJhcnkgZnVuY3Rpb24gcmV0dXJucyBhIHZhbHVl IG9mIG1vZGUgTU9ERS4gICovCitzdGF0aWMgcnR4CitjcjE2X2xpYmNhbGxf dmFsdWUgKGVudW0gbWFjaGluZV9tb2RlIG1vZGUsCisgICAgICAgICAgICAg ICAgICAgY29uc3RfcnR4IGZ1bmMgQVRUUklCVVRFX1VOVVNFRCkKK3sKKyAg cmV0dXJuIGdlbl9ydHhfUkVHIChtb2RlLCBjcjE2X3JldF9yZWdpc3RlciAo KSk7Cit9CisKKy8qIENyZWF0ZSBhbiBSVFggcmVwcmVzZW50aW5nIHRoZSBw bGFjZSB3aGVyZSBhCisgICBmdW5jdGlvbiByZXR1cm5zIGEgdmFsdWUgb2Yg ZGF0YSB0eXBlIFZBTFRZUEUuICAqLworc3RhdGljIHJ0eAorY3IxNl9mdW5j dGlvbl92YWx1ZSAoY29uc3RfdHJlZSB0eXBlLAorICAgICAgICAgICAgICAg ICAgICBjb25zdF90cmVlIGZuX2RlY2xfb3JfdHlwZSBBVFRSSUJVVEVfVU5V U0VELAorICAgICAgICAgICAgICAgICAgICBib29sIG91dGdvaW5nIEFUVFJJ QlVURV9VTlVTRUQpCit7CisgIHJldHVybiBnZW5fcnR4X1JFRyAoVFlQRV9N T0RFKHR5cGUpLCBjcjE2X3JldF9yZWdpc3RlciAoKSk7Cit9CisKKy8qIFBh c3NpbmcgZnVuY3Rpb24gYXJndW1lbnRzLiAgKi8KKworLyogSWYgZW5vdWdo IHBhcmFtIHJlZ3MgYXJlIGF2YWlsYWJsZSBmb3IgcGFzc2luZyB0aGUgcGFy YW0gb2YgdHlwZSBUWVBFIHJldHVybgorICAgdGhlIG51bWJlciBvZiByZWdp c3RlcnMgbmVlZGVkIGVsc2UgMC4gICovCitzdGF0aWMgaW50Citlbm91Z2hf cmVnc19mb3JfcGFyYW0gKENVTVVMQVRJVkVfQVJHUyAqY3VtLCBjb25zdF90 cmVlIHR5cGUsCisJCSAgICAgICBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlKQor eworICBpbnQgdHlwZV9zaXplOworICBpbnQgcmVtYWluaW5nX3NpemU7CisK KyAgaWYgKG1vZGUgIT0gQkxLbW9kZSkKKyAgICB0eXBlX3NpemUgPSBHRVRf TU9ERV9CSVRTSVpFIChtb2RlKTsKKyAgZWxzZQorICAgIHR5cGVfc2l6ZSA9 IGludF9zaXplX2luX2J5dGVzICh0eXBlKSAqIEJJVFNfUEVSX1VOSVQ7CisK KyAgcmVtYWluaW5nX3NpemUgPSBCSVRTX1BFUl9XT1JEICogKE1BWF9SRUdf Rk9SX1BBU1NJTkdfQVJHUworCQkJCSAgICAtIChNSU5fUkVHX0ZPUl9QQVNT SU5HX0FSR1MgKyBjdW0tPmludHMpICsKKwkJCQkgICAgMSk7CisKKyAgLyog QW55IHZhcmlhYmxlIHdoaWNoIGlzIHRvbyBiaWcgdG8gcGFzcyBpbiB0d28g cmVnaXN0ZXJzLCB3aWxsIHBhc3Mgb24KKyAgICAgc3RhY2suICAqLworICBp ZiAoKHJlbWFpbmluZ19zaXplID49IHR5cGVfc2l6ZSkgJiYgKHR5cGVfc2l6 ZSA8PSAyICogQklUU19QRVJfV09SRCkpCisgICAgcmV0dXJuICh0eXBlX3Np emUgKyBCSVRTX1BFUl9XT1JEIC0gMSkgLyBCSVRTX1BFUl9XT1JEOworCisg IHJldHVybiAwOworfQorCisvKiBJbXBsZW1lbnRzIHRoZSBtYWNybyBGVU5D VElPTl9BUkcgZGVmaW5lZCBpbiBjcjE2LmguICAqLworc3RhdGljIHJ0eAor Y3IxNl9mdW5jdGlvbl9hcmcgKGN1bXVsYXRpdmVfYXJnc190IGN1bV92LCBl bnVtIG1hY2hpbmVfbW9kZSBtb2RlLAorCQkgICBjb25zdF90cmVlIHR5cGUs IGJvb2wgbmFtZWQgQVRUUklCVVRFX1VOVVNFRCkKK3sKKyAgQ1VNVUxBVElW RV9BUkdTICpjdW0gPSBnZXRfY3VtdWxhdGl2ZV9hcmdzIChjdW1fdik7Cisg IGN1bS0+bGFzdF9wYXJtX2luX3JlZyA9IDA7CisKKyAgLyogZnVuY3Rpb25f YXJnICgpIGlzIGNhbGxlZCB3aXRoIHRoaXMgdHlwZSBqdXN0IGFmdGVyIGFs bCB0aGUgYXJncyBoYXZlIAorICAgICBoYWQgdGhlaXIgcmVnaXN0ZXJzIGFz c2lnbmVkLiBUaGUgcnR4IHRoYXQgZnVuY3Rpb25fYXJnIHJldHVybnMgZnJv bSAKKyAgICAgdGhpcyB0eXBlIGlzIHN1cHBvc2VkIHRvIHBhc3MgdG8gJ2dl bl9jYWxsJyBidXQgY3VycmVudGx5IGl0IGlzIG5vdCAKKyAgICAgaW1wbGVt ZW50ZWQgKHNlZSBtYWNybyBHRU5fQ0FMTCkuICAqLworICBpZiAodHlwZSA9 PSB2b2lkX3R5cGVfbm9kZSkKKyAgICByZXR1cm4gTlVMTF9SVFg7CisKKyAg aWYgKHRhcmdldG0uY2FsbHMubXVzdF9wYXNzX2luX3N0YWNrIChtb2RlLCB0 eXBlKSB8fCAoY3VtLT5pbnRzIDwgMCkpCisgICAgcmV0dXJuIE5VTExfUlRY OworCisgIGlmIChtb2RlID09IEJMS21vZGUpCisgICAgeworICAgICAgLyog RW5hYmxlIHN0cnVjdHVyZXMgdGhhdCBuZWVkIHBhZGRpbmcgYnl0ZXMgYXQg dGhlIGVuZCB0byBwYXNzIHRvIGEKKyAgICAgICAgIGZ1bmN0aW9uIGluIHJl Z2lzdGVycy4gICovCisgICAgICBpZiAoZW5vdWdoX3JlZ3NfZm9yX3BhcmFt IChjdW0sIHR5cGUsIG1vZGUpICE9IDApCisJeworCSAgY3VtLT5sYXN0X3Bh cm1faW5fcmVnID0gMTsKKwkgIHJldHVybiBnZW5fcnR4X1JFRyAobW9kZSwg TUlOX1JFR19GT1JfUEFTU0lOR19BUkdTICsgY3VtLT5pbnRzKTsKKwl9Cisg ICAgfQorCisgIGlmICgoTUlOX1JFR19GT1JfUEFTU0lOR19BUkdTICsgY3Vt LT5pbnRzKSA+IE1BWF9SRUdfRk9SX1BBU1NJTkdfQVJHUykKKyAgICByZXR1 cm4gTlVMTF9SVFg7CisgIGVsc2UKKyAgICB7CisgICAgICBpZiAoZW5vdWdo X3JlZ3NfZm9yX3BhcmFtIChjdW0sIHR5cGUsIG1vZGUpICE9IDApCisJewor CSAgY3VtLT5sYXN0X3Bhcm1faW5fcmVnID0gMTsKKwkgIHJldHVybiBnZW5f cnR4X1JFRyAobW9kZSwgTUlOX1JFR19GT1JfUEFTU0lOR19BUkdTICsgY3Vt LT5pbnRzKTsKKwl9CisgICAgfQorCisgIHJldHVybiBOVUxMX1JUWDsKK30K KworLyogSW1wbGVtZW50cyB0aGUgbWFjcm8gSU5JVF9DVU1VTEFUSVZFX0FS R1MgZGVmaW5lZCBpbiBjcjE2LmguICAqLwordm9pZAorY3IxNl9pbml0X2N1 bXVsYXRpdmVfYXJncyAoQ1VNVUxBVElWRV9BUkdTICpjdW0sIHRyZWUgZm50 eXBlLAorCQkJICAgcnR4IGxpYmZ1bmMgQVRUUklCVVRFX1VOVVNFRCkKK3sK KyAgdHJlZSBwYXJhbSwgbmV4dF9wYXJhbTsKKworICBjdW0tPmludHMgPSAw OworCisgIC8qIERldGVybWluZSBpZiB0aGlzIGZ1bmN0aW9uIGhhcyB2YXJp YWJsZSBhcmd1bWVudHMuICBUaGlzIGlzIGluZGljYXRlZCBieQorICAgICB0 aGUgbGFzdCBhcmd1bWVudCBiZWluZyAndm9pZF90eXBlX21vZGUnIGlmIHRo ZXJlIGFyZSBubyB2YXJpYWJsZQorICAgICBhcmd1bWVudHMuICBDaGFuZ2Ug aGVyZSBmb3IgYSBkaWZmZXJlbnQgdmFyYXJnLiAgKi8KKyAgZm9yIChwYXJh bSA9IChmbnR5cGUpID8gVFlQRV9BUkdfVFlQRVMgKGZudHlwZSkgOiAwOwor ICAgICAgIHBhcmFtICE9ICh0cmVlKSAwOyBwYXJhbSA9IG5leHRfcGFyYW0p CisgICAgeworICAgICAgbmV4dF9wYXJhbSA9IFRSRUVfQ0hBSU4gKHBhcmFt KTsKKyAgICAgIGlmICgobmV4dF9wYXJhbSA9PSAodHJlZSkgMCkgJiYgKFRS RUVfVkFMVUUgKHBhcmFtKSAhPSB2b2lkX3R5cGVfbm9kZSkpCisJeworCSAg Y3VtLT5pbnRzID0gLTE7CisJICByZXR1cm47CisJfQorICAgIH0KK30KKwor LyogSW1wbGVtZW50cyB0aGUgbWFjcm8gRlVOQ1RJT05fQVJHX0FEVkFOQ0Ug ZGVmaW5lZCBpbiBjcjE2LmguICAqLworc3RhdGljIHZvaWQKK2NyMTZfZnVu Y3Rpb25fYXJnX2FkdmFuY2UgKGN1bXVsYXRpdmVfYXJnc190IGN1bV92LCBl bnVtIG1hY2hpbmVfbW9kZSBtb2RlLAorCQkJICAgY29uc3RfdHJlZSB0eXBl LCBib29sIG5hbWVkIEFUVFJJQlVURV9VTlVTRUQpCit7CisgIENVTVVMQVRJ VkVfQVJHUyAqY3VtID0gZ2V0X2N1bXVsYXRpdmVfYXJncyAoY3VtX3YpOwor ICAvKiBsIGhvbGRzIHRoZSBudW1iZXIgb2YgcmVnaXN0ZXJzIHJlcXVpcmVk LiAgKi8KKyAgaW50IGwgPSBHRVRfTU9ERV9CSVRTSVpFIChtb2RlKSAvIEJJ VFNfUEVSX1dPUkQ7CisKKyAgLyogSWYgdGhlIHBhcmFtZXRlciBpc24ndCBw YXNzZWQgb24gYSByZWdpc3RlciBkb24ndCBhZHZhbmNlIGN1bS4gICovCisg IGlmICghY3VtLT5sYXN0X3Bhcm1faW5fcmVnKQorICAgIHJldHVybjsKKwor ICBpZiAodGFyZ2V0bS5jYWxscy5tdXN0X3Bhc3NfaW5fc3RhY2sgKG1vZGUs IHR5cGUpIHx8IChjdW0tPmludHMgPCAwKSkKKyAgICByZXR1cm47CisKKyAg aWYgKChtb2RlID09IFNJbW9kZSkgfHwgKG1vZGUgPT0gSEltb2RlKQorICAg ICAgfHwgKG1vZGUgPT0gUUltb2RlKSB8fCAobW9kZSA9PSBESW1vZGUpKQor ICAgIHsKKyAgICAgIGlmIChsIDw9IDEpCisJY3VtLT5pbnRzICs9IDE7Cisg ICAgICBlbHNlCisJY3VtLT5pbnRzICs9IGw7CisgICAgfQorICBlbHNlIGlm ICgobW9kZSA9PSBTRm1vZGUpIHx8IChtb2RlID09IERGbW9kZSkpCisgICAg Y3VtLT5pbnRzICs9IGw7CisgIGVsc2UgaWYgKChtb2RlKSA9PSBCTEttb2Rl KQorICAgIHsKKyAgICAgIGlmICgobCA9IGVub3VnaF9yZWdzX2Zvcl9wYXJh bSAoY3VtLCB0eXBlLCBtb2RlKSkgIT0gMCkKKwljdW0tPmludHMgKz0gbDsK KyAgICB9CisgIHJldHVybjsKK30KKworLyogSW1wbGVtZW50cyB0aGUgbWFj cm8gRlVOQ1RJT05fQVJHX1JFR05PX1AgZGVmaW5lZCBpbiBjcjE2LmguCisg ICBSZXR1cm4gbm9uemVybyBpZiBOIGlzIGEgcmVnaXN0ZXIgdXNlZCBmb3Ig cGFzc2luZyBwYXJhbWV0ZXJzLiAgKi8KK2ludAorY3IxNl9mdW5jdGlvbl9h cmdfcmVnbm9fcCAoaW50IG4pCit7CisgIHJldHVybiAoKG4gPD0gTUFYX1JF R19GT1JfUEFTU0lOR19BUkdTKSAmJiAobiA+PSBNSU5fUkVHX0ZPUl9QQVNT SU5HX0FSR1MpKTsKK30KKworLyogQWRkcmVzc2luZyBtb2Rlcy4gCisgICBG b2xsb3dpbmcgc2V0IG9mIGZ1bmN0aW9uIGltcGxlbWVudCB0aGUgbWFjcm8g R09fSUZfTEVHSVRJTUFURV9BRERSRVNTCisgICBkZWZpbmVkIGluIGNyMTYu aC4gICovCisKKy8qIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayBpZiBpcyBh IHZhbGlkIGJhc2UgcmVnaXN0ZXIgdGhhdCBjYW4KKyAgIGhvbGQgYWRkcmVz cy4gICovCitzdGF0aWMgaW50CitjcjE2X2FkZHJfcmVnX3AgKHJ0eCBhZGRy X3JlZykKK3sKKyAgcnR4IHJlZzsKKworICBpZiAoUkVHX1AgKGFkZHJfcmVn KSkKKyAgICByZWcgPSBhZGRyX3JlZzsKKyAgZWxzZSBpZiAoKEdFVF9DT0RF IChhZGRyX3JlZykgPT0gU1VCUkVHKQorCSAgICYmIFJFR19QIChTVUJSRUdf UkVHIChhZGRyX3JlZykpCisJICAgJiYgKEdFVF9NT0RFX1NJWkUgKEdFVF9N T0RFIChTVUJSRUdfUkVHIChhZGRyX3JlZykpKQorCSAgICAgICA8PSBVTklU U19QRVJfV09SRCkpCisgICAgcmVnID0gU1VCUkVHX1JFRyAoYWRkcl9yZWcp OworICBlbHNlCisgICAgcmV0dXJuIEZBTFNFOworCisgIGlmIChHRVRfTU9E RSAocmVnKSAhPSBQbW9kZSkKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgcmV0 dXJuIFRSVUU7Cit9CisKKy8qIEhlbHBlciBmdW5jdGlvbnM6IENyZWF0ZWQg c3BlY2lmaWNhbGx5IGZvciBkZWNvbXBvc2luZyBvcGVyYW5kIG9mIENPTlNU CisgICBSZWN1cnNpdmVseSBsb29rIGludG8gZXhwcmVzc2lvbiB4IGZvciBj b2RlIG9yIGRhdGEgc3ltYm9sLgorICAgVGhlIGZ1bmN0aW9uIGV4cGVjdHMg dGhlIGV4cHJlc3Npb24gdG8gY29udGFpbiBjb21iaW5hdGlvbiBvZiAKKyAg IFNZTUJPTF9SRUYsIENPTlNUX0lOVCwgKFBMVVMgb3IgTUlOVVMpCisgICBM QUJFTF9SRUYsIENPTlNUX0lOVCwgKFBMVVMgb3IgTUlOVVMpCisgICBTWU1C T0xfUkVGCisgICBMQUJFTF9SRUYKKyAgIEFsbCBvdGhlciBjb21iaW5hdGlv bnMgd2lsbCByZXN1bHQgaW4gY29kZSA9IC0xIGFuZCBkYXRhID0gSUxMRUdB TF9ETQorICAgY29kZSBkYXRhCisgICAtMSAgIElMTEVHQUxfRE0gICBUaGUg ZXhwcmVzc2lvbiBkaWQgbm90IGNvbnRhaW4gU1lNQk9MX1JFRiBvciBMQUJF TF9SRUYKKyAgICAwICAgRE1fRkFSICAgICAgIFNZTUJPTF9SRUYgd2FzIGZv dW5kIGFuZCBpdCB3YXMgZmFyIGRhdGEgcmVmZXJlbmNlLiAKKyAgICAwICAg RE1fREVGQVVMVCAgIFNZTUJPTF9SRUYgd2FzIGZvdW5kIGFuZCBpdCB3YXMg bWVkaXVtIGRhdGEgcmVmZXJlbmNlLiAKKyAgICAxICAgSUxMRUdBTF9ETSAg IExBQkVMX1JFRiB3YXMgZm91bmQuIAorICAgIDIgICBJTExFR0FMX0RNICAg U1lNQk9MX1JFRiB3YXMgZm91bmQgYW5kIGl0IHdhcyBmdW5jdGlvbiByZWZl cmVuY2UuICAqLwordm9pZAorY3IxNl9kZWNvbXBvc2VfY29uc3QgKHJ0eCB4 LCBpbnQgKmNvZGUsIGVudW0gZGF0YV9tb2RlbF90eXBlICpkYXRhLAorCQkg ICAgICBib29sIHRyZWF0X2FzX2NvbnN0KQoreworICAqY29kZSA9IC0xOwor ICAqZGF0YSA9IElMTEVHQUxfRE07CisgIHN3aXRjaCAoR0VUX0NPREUgKHgp KQorICAgIHsKKyAgICBjYXNlIFNZTUJPTF9SRUY6CisgICAgICAqY29kZSA9 IFNZTUJPTF9SRUZfRlVOQ1RJT05fUCAoeCkgPyAyIDogMDsKKyAgICAgIC8q IDIgaW5kaWNhdGVzIGZ1bmMgc3ltLiAgKi8KKyAgICAgIGlmICgqY29kZSA9 PSAwKQorCXsKKwkgIGlmIChDUjE2X1RBUkdFVF9EQVRBX05FQVIpCisJICAg ICpkYXRhID0gRE1fREVGQVVMVDsKKwkgIGVsc2UgaWYgKENSMTZfVEFSR0VU X0RBVEFfTUVESVVNKQorCSAgICAqZGF0YSA9IERNX0ZBUjsKKwkgIGVsc2Ug aWYgKENSMTZfVEFSR0VUX0RBVEFfRkFSKQorCSAgICB7CisJICAgICAgaWYg KHRyZWF0X2FzX2NvbnN0KQorCQkvKiBUaGlzIHdpbGwgYmUgdXNlZCBvbmx5 IGZvciBwcmludGluZyAKKwkJICAgdGhlIHF1YWxpZmllci4gVGhpcyBjYWxs IGlzIChtYXkgYmUpCisJCSAgIG1hZGUgYnkgY3IxNl9wcmludF9vcGVyYW5k X2FkZHJlc3MuICAqLworCQkqZGF0YSA9IERNX0ZBUjsKKwkgICAgICBlbHNl CisJCS8qIFRoaXMgY2FsbCBpcyAobWF5IGJlKSBtYWRlIGJ5IAorCQkgICBj cjE2X2xlZ2l0aW1hdGVfYWRkcmVzc19wLiAgKi8KKwkJKmRhdGEgPSBJTExF R0FMX0RNOworCSAgICB9CisJfQorICAgICAgcmV0dXJuOworCisgICAgY2Fz ZSBMQUJFTF9SRUY6CisgICAgICAvKiAxIC0gaW5kaWNhdGVzIG5vbi1mdW5j dGlvbiBzeW1ib2wuICAqLworICAgICAgKmNvZGUgPSAxOworICAgICAgcmV0 dXJuOworCisgICAgY2FzZSBQTFVTOgorICAgIGNhc2UgTUlOVVM6CisgICAg ICAvKiBMb29rIGludG8gdGhlIHRyZWUgbm9kZXMuICAqLworICAgICAgaWYg KEdFVF9DT0RFIChYRVhQICh4LCAwKSkgPT0gQ09OU1RfSU5UKQorCWNyMTZf ZGVjb21wb3NlX2NvbnN0IChYRVhQICh4LCAxKSwgY29kZSwgZGF0YSwgdHJl YXRfYXNfY29uc3QpOworICAgICAgZWxzZSBpZiAoR0VUX0NPREUgKFhFWFAg KHgsIDEpKSA9PSBDT05TVF9JTlQpCisJY3IxNl9kZWNvbXBvc2VfY29uc3Qg KFhFWFAgKHgsIDApLCBjb2RlLCBkYXRhLCB0cmVhdF9hc19jb25zdCk7Cisg ICAgICByZXR1cm47CisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybjsKKyAg ICB9Cit9CisKKy8qIERlY29tcG9zZSBBZGRyZXNzCisgICBUaGlzIGZ1bmN0 aW9uIGRlY29tcG9zZXMgdGhlIGFkZHJlc3MgcmV0dXJucyB0aGUgdHlwZSBv ZiBhZGRyZXNzCisgICBhcyBkZWZpbmVkIGluIGVudW0gY3IxNl9hZGRydHlw ZS4gIEl0IGFsc28gZmlsbHMgdGhlIHBhcmFtZXRlciAqb3V0LgorICAgVGhl IGRlY29tcG9zZWQgYWRkcmVzcyBjYW4gYmUgdXNlZCBmb3IgdHdvIHB1cnBv c2VzLiAgT25lIHRvIAorICAgY2hlY2sgaWYgdGhlIGFkZHJlc3MgaXMgdmFs aWQgYW5kIHNlY29uZCB0byBwcmludCB0aGUgYWRkcmVzcworICAgb3BlcmFu ZC4KKworICAgRm9sbG93aW5nIHRhYmxlcyBsaXN0IHZhbGlkIGFkZHJlc3Mg c3VwcG9ydGVkIGluIENSMTZDL0MrIGFyY2hpdGVjdHVyZXMuCisgICBMZWdl bmQ6IAorICAgYU4gOiBBYnNvdWx0ZSBhZGRyZXNzIE4tYml0IGFkZHJlc3MK KyAgIFIgIDogT25lIDE2LWJpdCByZWdpc3RlcgorICAgUlAgOiBDb25zZWN1 dGl2ZSB0d28gMTYtYml0IHJlZ2lzdGVycyBvciBvbmUgMzItYml0IHJlZ2lz dGVyCisgICBJICA6IE9uZSAzMi1iaXQgcmVnaXN0ZXIKKyAgIGRpc3BOIDog U2lnbmVkIGRpc3BsYWNlbWVudCBvZiBOLWJpdHMKKworICAgLS0tLUNvZGUg YWRkcmVzc2VzLS0tLQorICAgQnJhbmNoIG9wZXJhbmRzOgorICAgZGlzcDkg ICAgICAgIDogQ1IxNl9BQlNPTFVURSAgICAgICAoZGlzcCkKKyAgIGRpc3Ax NyAgICAgICA6IENSMTZfQUJTT0xVVEUgICAgICAgKGRpc3ApCisgICBkaXNw MjUgICAgICAgOiBDUjE2X0FCU09MVVRFICAgICAgIChkaXNwKQorICAgUlAg KyBkaXNwMjUgIDogQ1IxNl9SRUdQX1JFTCAgICAgICAoYmFzZSwgZGlzcCkK KworICAgSnVtcCBvcGVyYW5kczoKKyAgIFJQICAgICAgICAgICA6IENSMTZf UkVHUF9SRUwgICAgICAgKGJhc2UsIGRpc3A9MCkKKyAgIGEyNCAgICAgICAg ICA6IENSMTZfQUJTT0xVVEUgICAgICAgKGRpc3ApCisKKyAgIC0tLS1EYXRh IGFkZHJlc3Nlcy0tLS0KKyAgIGEyMCAgICAgICAgICA6IENSMTZfQUJTT0xV VEUgICAgICAgKGRpc3ApICAgICAgICAgICAgICAgIG5lYXIgKDFNKQorICAg YTI0ICAgICAgICAgIDogQ1IxNl9BQlNPTFVURSAgICAgICAoZGlzcCkgICAg ICAgICAgICAgICAgbWVkaXVtICAoMTZNKQorICAgUiAgKyBkMjAgICAgIDog Q1IxNl9SRUdfUkVMICAgICAgICAoYmFzZSwgIGRpc3ApICAgICAgICAgbmVh ciAoMU0rNjRLKQorICAgUlAgKyBkNCAgICAgIDogQ1IxNl9SRUdQX1JFTCAg ICAgICAoYmFzZSwgIGRpc3ApICAgICAgICAgZmFyICAoNEcpCisgICBSUCAr IGQxNiAgICAgOiBDUjE2X1JFR1BfUkVMICAgICAgIChiYXNlLCAgZGlzcCkg ICAgICAgICBmYXIgICg0RykKKyAgIFJQICsgZDIwICAgICA6IENSMTZfUkVH UF9SRUwgICAgICAgKGJhc2UsICBkaXNwKSAgICAgICAgIGZhciAgKDRHKQor ICAgSSAgICAgICAgICAgIDogKioqIFZhbGlkIGJ1dCBwb3J0IGRvZXMgbm90 IHN1cHBvcnQgdGhpcworICAgSSAgKyBhMjAgICAgIDogKioqIFZhbGlkIGJ1 dCBwb3J0IGRvZXMgbm90IHN1cHBvcnQgdGhpcworICAgSSAgKyBSUCArIGQx NDogQ1IxNl9JTkRFWF9SRUdQX1JFTCAoYmFzZSwgIGluZGV4LCBkaXNwKSAg ZmFyICAoNEcpCisgICBJICArIFJQICsgZDIwOiBDUjE2X0lOREVYX1JFR1Bf UkVMIChiYXNlLCAgaW5kZXgsIGRpc3ApICBmYXIgICg0RykKKworICAgRGVj b21wb3NpbmcgRGF0YSBtb2RlbCBpbiBjYXNlIG9mIGFic29sdXRlIGFkZHJl c3MuCisKKyAgIFRhcmdldCBPcHRpb24gICAgICAgICAgICAgQWRkcmVzcyB0 eXBlIFJlc3VsdGFudCBEYXRhIHJlZiB0eXBlCisgICAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tICAgIC0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICAgQ1IxNl9UQVJHRVRfTU9ERUxfTkVBUiAgICBBQlMyMCAgICAg ICAgRE1fREVGQVVMVAorICAgQ1IxNl9UQVJHRVRfTU9ERUxfTkVBUiAgICBJ TU0yMCAgICAgICAgRE1fREVGQVVMVAorICAgQ1IxNl9UQVJHRVRfTU9ERUxf TkVBUiAgICBBQlMyNCAgICAgICAgSW52YWxpZAorICAgQ1IxNl9UQVJHRVRf TU9ERUxfTkVBUiAgICBJTU0zMiAgICAgICAgSW52YWxpZAorCisgICBDUjE2 X1RBUkdFVF9NT0RFTF9NRURJVU0gIEFCUzIwICAgICAgICBETV9ERUZBVUxU CisgICBDUjE2X1RBUkdFVF9NT0RFTF9NRURJVU0gIElNTTIwICAgICAgICBE TV9ERUZBVUxUCisgICBDUjE2X1RBUkdFVF9NT0RFTF9NRURJVU0gIEFCUzI0 ICAgICAgICBETV9GQVIKKyAgIENSMTZfVEFSR0VUX01PREVMX01FRElVTSAg SU1NMzIgICAgICAgIEludmFsaWQKKworICAgQ1IxNl9UQVJHRVRfTU9ERUxf RkFSICAgICBBQlMyMCAgICAgICAgRE1fREVGQVVMVAorICAgQ1IxNl9UQVJH RVRfTU9ERUxfRkFSICAgICBJTU0yMCAgICAgICAgRE1fREVGQVVMVAorICAg Q1IxNl9UQVJHRVRfTU9ERUxfRkFSICAgICBBQlMyNCAgICAgICAgRE1fRkFS CisgICBDUjE2X1RBUkdFVF9NT0RFTF9GQVIgICAgIElNTTMyICAgICAgICBE TV9GQVIuICAqLworZW51bSBjcjE2X2FkZHJ0eXBlCitjcjE2X2RlY29tcG9z ZV9hZGRyZXNzIChydHggYWRkciwgc3RydWN0IGNyMTZfYWRkcmVzcyAqb3V0 LAorCQkJYm9vbCBkZWJ1Z19wcmludCwgYm9vbCB0cmVhdF9hc19jb25zdCkK K3sKKyAgcnR4IGJhc2UgPSBOVUxMX1JUWCwgZGlzcCA9IE5VTExfUlRYLCBp bmRleCA9IE5VTExfUlRYOworICBlbnVtIGRhdGFfbW9kZWxfdHlwZSBkYXRh ID0gSUxMRUdBTF9ETTsKKyAgaW50IGNvZGUgPSAtMTsKKyAgZW51bSBjcjE2 X2FkZHJ0eXBlIHJldHZhbCA9IENSMTZfSU5WQUxJRDsKKworICBzd2l0Y2gg KEdFVF9DT0RFIChhZGRyKSkKKyAgICB7CisgICAgY2FzZSBDT05TVF9JTlQ6 CisgICAgICAvKiBBYnNvbHV0ZSBhZGRyZXNzIChrbm93biBhdCBjb21waWxl IHRpbWUpLiAgKi8KKyAgICAgIGNvZGUgPSAwOworICAgICAgaWYgKGRlYnVn X3ByaW50KQorCWZwcmludGYgKHN0ZGVyciwgIlxuY29kZTolZCIsIGNvZGUp OworICAgICAgZGlzcCA9IGFkZHI7CisKKyAgICAgIGlmIChkZWJ1Z19wcmlu dCkKKwl7CisJICBmcHJpbnRmIChzdGRlcnIsICJcbmRpc3A6Iik7CisJICBk ZWJ1Z19ydHggKGRpc3ApOworCX0KKworICAgICAgaWYgKFVOU0lHTkVEX0lO VF9GSVRTX05fQklUUyAoSU5UVkFMIChkaXNwKSwgMjApKQorCXsKKwkgIGRh dGEgPSBETV9ERUZBVUxUOworCSAgaWYgKGRlYnVnX3ByaW50KQorCSAgICBm cHJpbnRmIChzdGRlcnIsICJcbmRhdGE6JWQiLCBkYXRhKTsKKwkgIHJldHZh bCA9IENSMTZfQUJTT0xVVEU7CisJfQorICAgICAgZWxzZSBpZiAoVU5TSUdO RURfSU5UX0ZJVFNfTl9CSVRTIChJTlRWQUwgKGRpc3ApLCAyNCkpCisJewor CSAgaWYgKCFDUjE2X1RBUkdFVF9EQVRBX05FQVIpCisJICAgIHsKKwkgICAg ICBkYXRhID0gRE1fRkFSOworCSAgICAgIGlmIChkZWJ1Z19wcmludCkKKwkJ ZnByaW50ZiAoc3RkZXJyLCAiXG5kYXRhOiVkIiwgZGF0YSk7CisJICAgICAg cmV0dmFsID0gQ1IxNl9BQlNPTFVURTsKKwkgICAgfQorCSAgZWxzZQorCSAg ICByZXR1cm4gQ1IxNl9JTlZBTElEOwkvKiBBQlMyNCBpcyBub3Qgc3VwcG9y dCBpbiBORUFSIG1vZGVsLiAgKi8KKwl9CisgICAgICBlbHNlCisJcmV0dXJu IENSMTZfSU5WQUxJRDsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBDT05T VDoKKyAgICAgIC8qIEEgQ09OU1QgaXMgYW4gZXhwcmVzc2lvbiBvZiBQTFVT IG9yIE1JTlVTIHdpdGggCisgICAgICAgICBDT05TVF9JTlQsIFNZTUJPTF9S RUYgb3IgTEFCRUxfUkVGLiBUaGlzIGlzIHRoZQorICAgICAgICAgcmVzdWx0 IG9mIGFzc2VtYmx5LXRpbWUgYXJpdGhtZXRpYyBjb21wdXRhdGlvbi4gICov CisgICAgICByZXR2YWwgPSBDUjE2X0FCU09MVVRFOworICAgICAgZGlzcCA9 IGFkZHI7CisgICAgICAvKiBDYWxsIHRoZSBoZWxwZXIgZnVuY3Rpb24gdG8g Y2hlY2sgdGhlIHZhbGlkaXR5LiAgKi8KKyAgICAgIGNyMTZfZGVjb21wb3Nl X2NvbnN0IChYRVhQIChhZGRyLCAwKSwgJmNvZGUsICZkYXRhLCB0cmVhdF9h c19jb25zdCk7CisgICAgICBpZiAoKGNvZGUgPT0gMCkgJiYgKGRhdGEgPT0g SUxMRUdBTF9ETSkpCisJLyogQ09OU1QgaXMgbm90IHZhbGlkIGNvZGUgb3Ig ZGF0YSBhZGRyZXNzLiAgKi8KKwlyZXR1cm4gQ1IxNl9JTlZBTElEOworICAg ICAgaWYgKGRlYnVnX3ByaW50KQorCXsKKwkgIGZwcmludGYgKHN0ZGVyciwg IlxuZGlzcDoiKTsKKwkgIGRlYnVnX3J0eCAoZGlzcCk7CisJICBmcHJpbnRm IChzdGRlcnIsICJcbmNvZGU6JWQiLCBjb2RlKTsKKwkgIGZwcmludGYgKHN0 ZGVyciwgIlxuZGF0YTolZCIsIGRhdGEpOworCX0KKyAgICAgIGJyZWFrOwor CisgICAgY2FzZSBMQUJFTF9SRUY6CisgICAgICByZXR2YWwgPSBDUjE2X0FC U09MVVRFOworICAgICAgZGlzcCA9IGFkZHI7CisgICAgICAvKiAxIC0gaW5k aWNhdGVzIG5vbi1mdW5jdGlvbiBzeW1ib2wuICAqLworICAgICAgY29kZSA9 IDE7CisgICAgICBpZiAoZGVidWdfcHJpbnQpCisJeworCSAgZnByaW50ZiAo c3RkZXJyLCAiXG5kaXNwOiIpOworCSAgZGVidWdfcnR4IChkaXNwKTsKKwkg IGZwcmludGYgKHN0ZGVyciwgIlxuY29kZTolZCIsIGNvZGUpOworCX0KKyAg ICAgIGJyZWFrOworCisgICAgY2FzZSBTWU1CT0xfUkVGOgorICAgICAgLyog QWJzb2x1dGUgYWRkcmVzcyAoa25vd24gYXQgbGluayB0aW1lKS4gICovCisg ICAgICByZXR2YWwgPSBDUjE2X0FCU09MVVRFOworICAgICAgZGlzcCA9IGFk ZHI7CisgICAgICAvKiBUaGlzIGlzIGEgY29kZSBhZGRyZXNzIGlmIHN5bWJv bF9yZWYgaXMgYSBmdW5jdGlvbi4gICovCisgICAgICAvKiAyIGluZGljYXRl cyBmdW5jIHN5bS4gICovCisgICAgICBjb2RlID0gU1lNQk9MX1JFRl9GVU5D VElPTl9QIChhZGRyKSA/IDIgOiAwOworICAgICAgaWYgKGRlYnVnX3ByaW50 KQorCXsKKwkgIGZwcmludGYgKHN0ZGVyciwgIlxuZGlzcDoiKTsKKwkgIGRl YnVnX3J0eCAoZGlzcCk7CisJICBmcHJpbnRmIChzdGRlcnIsICJcbmNvZGU6 JWQiLCBjb2RlKTsKKwl9CisgICAgICAvKiBJZiBub3QgZnVuY3Rpb24gcmVm IHRoZW4gY2hlY2sgaWYgdmFsaWQgZGF0YSByZWYuICAqLworICAgICAgaWYg KGNvZGUgPT0gMCkKKwl7CisJICBpZiAoQ1IxNl9UQVJHRVRfREFUQV9ORUFS KQorCSAgICBkYXRhID0gRE1fREVGQVVMVDsKKwkgIGVsc2UgaWYgKENSMTZf VEFSR0VUX0RBVEFfTUVESVVNKQorCSAgICBkYXRhID0gRE1fRkFSOworCSAg ZWxzZSBpZiAoQ1IxNl9UQVJHRVRfREFUQV9GQVIpCisJICAgIHsKKwkgICAg ICBpZiAodHJlYXRfYXNfY29uc3QpCisJCS8qIFRoaXMgd2lsbCBiZSB1c2Vk IG9ubHkgZm9yIHByaW50aW5nIHRoZSAKKwkJICAgcXVhbGlmaWVyLiBUaGlz IGNhbGwgaXMgKG1heSBiZSkgbWFkZQorCQkgICBieSBjcjE2X3ByaW50X29w ZXJhbmRfYWRkcmVzcy4gICovCisJCWRhdGEgPSBETV9GQVI7CisJICAgICAg ZWxzZQorCQkvKiBUaGlzIGNhbGwgaXMgKG1heSBiZSkgbWFkZSBieSAKKwkJ ICAgY3IxNl9sZWdpdGltYXRlX2FkZHJlc3NfcC4gICovCisJCXJldHVybiBD UjE2X0lOVkFMSUQ7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgZGF0YSA9IERN X0RFRkFVTFQ7CisJfQorICAgICAgaWYgKGRlYnVnX3ByaW50KQorCWZwcmlu dGYgKHN0ZGVyciwgIlxuZGF0YTolZCIsIGRhdGEpOworICAgICAgYnJlYWs7 CisKKyAgICBjYXNlIFJFRzoKKyAgICBjYXNlIFNVQlJFRzoKKyAgICAgIC8q IFJlZ2lzdGVyIHJlbGF0aXZlIGFkZHJlc3MuICAqLworICAgICAgLyogQXNz dW1lIFJFRyBmaXRzIGluIGEgc2luZ2xlIHJlZ2lzdGVyLiAgKi8KKyAgICAg IHJldHZhbCA9IENSMTZfUkVHX1JFTDsKKyAgICAgIGlmIChHRVRfTU9ERV9C SVRTSVpFIChHRVRfTU9ERSAoYWRkcikpID4gQklUU19QRVJfV09SRCkKKwlp ZiAoIUxPTkdfUkVHX1AgKFJFR05PIChhZGRyKSkpCisJICAvKiBSRUcgd2ls bCByZXN1bHQgaW4gcmVnIHBhaXIuICAqLworCSAgcmV0dmFsID0gQ1IxNl9S RUdQX1JFTDsKKyAgICAgIGJhc2UgPSBhZGRyOworICAgICAgaWYgKGRlYnVn X3ByaW50KQorCXsKKwkgIGZwcmludGYgKHN0ZGVyciwgIlxuYmFzZToiKTsK KwkgIGRlYnVnX3J0eCAoYmFzZSk7CisJfQorICAgICAgYnJlYWs7CisKKyAg ICBjYXNlIFBMVVM6CisgICAgICBzd2l0Y2ggKEdFVF9DT0RFIChYRVhQIChh ZGRyLCAwKSkpCisJeworCWNhc2UgUkVHOgorCWNhc2UgU1VCUkVHOgorCSAg LyogUkVHICsgRElTUDIwLiAgKi8KKwkgIC8qIEFsbCBSZWcgcmVsYXRpdmUg YWRkcmVzc2VzIGhhdmluZyBhIGRpc3BsYWNlbWVudCBuZWVkcyAKKwkgICAg IHRvIGZpdCBpbiAyMC1iaXRzLiAgKi8KKwkgIGRpc3AgPSBYRVhQIChhZGRy LCAxKTsKKwkgIGlmIChkZWJ1Z19wcmludCkKKwkgICAgeworCSAgICAgIGZw cmludGYgKHN0ZGVyciwgIlxuZGlzcDoiKTsKKwkgICAgICBkZWJ1Z19ydHgg KGRpc3ApOworCSAgICB9CisJICBzd2l0Y2ggKEdFVF9DT0RFIChYRVhQIChh ZGRyLCAxKSkpCisJICAgIHsKKwkgICAgY2FzZSBDT05TVF9JTlQ6CisJICAg ICAgLyogU2hhbGwgZml0IGluIDIwLWJpdHMuICAqLworCSAgICAgIGlmICgh VU5TSUdORURfSU5UX0ZJVFNfTl9CSVRTIChJTlRWQUwgKGRpc3ApLCAyMCkp CisJCXJldHVybiBDUjE2X0lOVkFMSUQ7CisJICAgICAgY29kZSA9IDA7CisJ ICAgICAgaWYgKGRlYnVnX3ByaW50KQorCQlmcHJpbnRmIChzdGRlcnIsICJc bmNvZGU6JWQiLCBjb2RlKTsKKwkgICAgICBicmVhazsKKworCSAgICBjYXNl IFVOU1BFQzoKKwkgICAgICBpbmZvcm0gKGlucHV0X2xvY2F0aW9uLCAiVU5T UEVDIDIhISIpOworCSAgICAgIHN3aXRjaCAoWElOVCAoWEVYUCAoYWRkciwg MSksIDEpKQorCQl7CisJCWNhc2UgVU5TUEVDX0xJQlJBUllfT0ZGU0VUOgor CQkgIGluZm9ybSAoaW5wdXRfbG9jYXRpb24sICJVTlNQRUNfTElCUkFSWV9P RkZTRVQgMiEhISIpOworCQkgIGJyZWFrOworCisJCWRlZmF1bHQ6CisJCSAg Z2NjX3VucmVhY2hhYmxlICgpOworCQl9CisJICAgICAgYnJlYWs7CisKKwkg ICAgY2FzZSBMQUJFTF9SRUY6CisJICAgIGNhc2UgU1lNQk9MX1JFRjoKKwkg ICAgY2FzZSBDT05TVDoKKwkgICAgICAvKiBUaGlzIGlzIGFsc28gYSB2YWxp ZCBleHByZXNzaW9uIGZvciBhZGRyZXNzLgorCSAgICAgICAgIEhvd2V2ZXIs IHdlIGNhbm5vdCBhc2NlcnRhaW4gaWYgdGhlIHJlc3VsdGFudAorCSAgICAg ICAgIGRpc3BsYWNlbWVudCB3aWxsIGJlIHZhbGlkIDIwLWJpdCB2YWx1ZS4g IFRoZXJlZm9yZSwgCisJICAgICAgICAgbGV0cyBub3QgYWxsb3cgc3VjaCBh biBleHByZXNzaW9uIGZvciBub3cuICBUaGlzIHdpbGwgCisJICAgICAgICAg YmUgdXBkYXRlZCB3aGVuICB3ZSBmaW5kIGEgd2F5IHRvIHZhbGlkYXRlIHRo aXMgCisJICAgICAgICAgZXhwcmVzc2lvbiBhcyBsZWdpdGltYXRlIGFkZHJl c3MuIAorCSAgICAgICAgIFRpbGwgdGhlbiBmYWxsIHRocm91Z2ggQ1IxNl9J TlZBTElELiAgKi8KKwkgICAgZGVmYXVsdDoKKwkgICAgICByZXR1cm4gQ1Ix Nl9JTlZBTElEOworCSAgICB9CisKKwkgIC8qIE5vdyBjaGVjayBpZiBSRUcg Y2FuIGZpdCBpbnRvIHNpbmdsZSBvciBwYWlyIHJlZ3MuICAqLworCSAgcmV0 dmFsID0gQ1IxNl9SRUdfUkVMOworCSAgYmFzZSA9IFhFWFAgKGFkZHIsIDAp OworCSAgaWYgKGRlYnVnX3ByaW50KQorCSAgICB7CisJICAgICAgZnByaW50 ZiAoc3RkZXJyLCAiXG5iYXNlOiIpOworCSAgICAgIGRlYnVnX3J0eCAoYmFz ZSk7CisJICAgIH0KKwkgIGlmIChHRVRfTU9ERV9CSVRTSVpFIChHRVRfTU9E RSAoKFhFWFAgKGFkZHIsIDApKSkpID4gQklUU19QRVJfV09SRCkKKwkgICAg eworCSAgICAgIGlmICghTE9OR19SRUdfUCAoUkVHTk8gKChYRVhQIChhZGRy LCAwKSkpKSkKKwkJLyogUkVHIHdpbGwgcmVzdWx0IGluIHJlZyBwYWlyLiAg Ki8KKwkJcmV0dmFsID0gQ1IxNl9SRUdQX1JFTDsKKwkgICAgfQorCSAgYnJl YWs7CisKKwljYXNlIFBMVVM6CisJICAvKiBWYWxpZCBleHByOiAKKwkgICAg IHBsdXMKKwkgICAgIC9cCisJICAgICAvICBcCisJICAgICBwbHVzIGlkeAor CSAgICAgL1wKKwkgICAgIC8gIFwKKwkgICAgIHJlZyAgY29uc3RfaW50CisK KwkgICAgIENoZWNrIGlmIHRoZSBvcGVyYW5kIDEgaXMgdmFsaWQgaW5kZXgg cmVnaXN0ZXIuICAqLworCSAgZGF0YSA9IElMTEVHQUxfRE07CisJICBpZiAo ZGVidWdfcHJpbnQpCisJICAgIGZwcmludGYgKHN0ZGVyciwgIlxuZGF0YTol ZCIsIGRhdGEpOworCSAgc3dpdGNoIChHRVRfQ09ERSAoWEVYUCAoYWRkciwg MSkpKQorCSAgICB7CisJICAgIGNhc2UgUkVHOgorCSAgICBjYXNlIFNVQlJF RzoKKwkgICAgICBpZiAoIVJFR19PS19GT1JfSU5ERVhfUCAoWEVYUCAoYWRk ciwgMSkpKQorCQlyZXR1cm4gQ1IxNl9JTlZBTElEOworCSAgICAgIC8qIE9L LiBSRUcgaXMgYSB2YWxpZCBpbmRleCByZWdpc3Rlci4gICovCisJICAgICAg aW5kZXggPSBYRVhQIChhZGRyLCAxKTsKKwkgICAgICBpZiAoZGVidWdfcHJp bnQpCisJCXsKKwkJICBmcHJpbnRmIChzdGRlcnIsICJcbmluZGV4OiIpOwor CQkgIGRlYnVnX3J0eCAoaW5kZXgpOworCQl9CisJICAgICAgYnJlYWs7CisJ ICAgIGRlZmF1bHQ6CisJICAgICAgcmV0dXJuIENSMTZfSU5WQUxJRDsKKwkg ICAgfQorCSAgLyogQ2hlY2sgaWYgb3BlcmFuZCAwIG9mIG9wZXJhbmQgMCBp cyBSRUdQLiAgKi8KKwkgIHN3aXRjaCAoR0VUX0NPREUgKFhFWFAgKFhFWFAg KGFkZHIsIDApLCAwKSkpCisJICAgIHsKKwkgICAgY2FzZSBSRUc6CisJICAg IGNhc2UgU1VCUkVHOgorCSAgICAgIC8qIE5vdyBjaGVjayBpZiBSRUcgaXMg YSBSRUdQIGFuZCBub3QgaW4gTE9ORyByZWdzLiAgKi8KKwkgICAgICBpZiAo R0VUX01PREVfQklUU0laRSAoR0VUX01PREUgKFhFWFAgKFhFWFAgKGFkZHIs IDApLCAwKSkpCisJCSAgPiBCSVRTX1BFUl9XT1JEKQorCQl7CisJCSAgaWYg KFJFR05PIChYRVhQIChYRVhQIChhZGRyLCAwKSwgMCkpCisJCSAgICAgID49 IENSMTZfRklSU1RfRFdPUkRfUkVHSVNURVIpCisJCSAgICByZXR1cm4gQ1Ix Nl9JTlZBTElEOworCQkgIGJhc2UgPSBYRVhQIChYRVhQIChhZGRyLCAwKSwg MCk7CisJCSAgaWYgKGRlYnVnX3ByaW50KQorCQkgICAgeworCQkgICAgICBm cHJpbnRmIChzdGRlcnIsICJcbmJhc2U6Iik7CisJCSAgICAgIGRlYnVnX3J0 eCAoYmFzZSk7CisJCSAgICB9CisJCX0KKwkgICAgICBlbHNlCisJCXJldHVy biBDUjE2X0lOVkFMSUQ7CisJICAgICAgYnJlYWs7CisJICAgIGRlZmF1bHQ6 CisJICAgICAgcmV0dXJuIENSMTZfSU5WQUxJRDsKKwkgICAgfQorCSAgLyog Tm93IGNoZWNrIGlmIHRoZSBvcGVyYW5kIDEgb2Ygb3BlcmFuZCAwIGlzIGNv bnN0X2ludC4gICovCisJICBpZiAoR0VUX0NPREUgKFhFWFAgKFhFWFAgKGFk ZHIsIDApLCAxKSkgPT0gQ09OU1RfSU5UKQorCSAgICB7CisJICAgICAgZGlz cCA9IFhFWFAgKFhFWFAgKGFkZHIsIDApLCAxKTsKKwkgICAgICBpZiAoZGVi dWdfcHJpbnQpCisJCXsKKwkJICBmcHJpbnRmIChzdGRlcnIsICJcbmRpc3A6 Iik7CisJCSAgZGVidWdfcnR4IChkaXNwKTsKKwkJfQorCSAgICAgIGlmICgh VU5TSUdORURfSU5UX0ZJVFNfTl9CSVRTIChJTlRWQUwgKGRpc3ApLCAyMCkp CisJCXJldHVybiBDUjE2X0lOVkFMSUQ7CisJICAgIH0KKwkgIGVsc2UKKwkg ICAgcmV0dXJuIENSMTZfSU5WQUxJRDsKKwkgIHJldHZhbCA9IENSMTZfSU5E RVhfUkVHUF9SRUw7CisJICBicmVhazsKKwlkZWZhdWx0OgorCSAgcmV0dXJu IENSMTZfSU5WQUxJRDsKKwl9CisgICAgICBicmVhazsKKworICAgIGRlZmF1 bHQ6CisgICAgICByZXR1cm4gQ1IxNl9JTlZBTElEOworICAgIH0KKworICAv KiBDaGVjayBpZiB0aGUgYmFzZSBhbmQgaW5kZXggcmVnaXN0ZXJzIGFyZSB2 YWxpZC4gICovCisgIGlmIChiYXNlICYmICEoY3IxNl9hZGRyX3JlZ19wIChi YXNlKSkpCisgICAgcmV0dXJuIENSMTZfSU5WQUxJRDsKKyAgaWYgKGJhc2Ug JiYgIShDUjE2X1JFR19PS19GT1JfQkFTRV9QIChiYXNlKSkpCisgICAgcmV0 dXJuIENSMTZfSU5WQUxJRDsKKyAgaWYgKGluZGV4ICYmICEoUkVHX09LX0ZP Ul9JTkRFWF9QIChpbmRleCkpKQorICAgIHJldHVybiBDUjE2X0lOVkFMSUQ7 CisKKyAgLyogV3JpdGUgdGhlIGRlY29tcG9zaXRpb24gdG8gb3V0IHBhcmFt ZXRlci4gICovCisgIG91dC0+YmFzZSA9IGJhc2U7CisgIG91dC0+ZGlzcCA9 IGRpc3A7CisgIG91dC0+aW5kZXggPSBpbmRleDsKKyAgb3V0LT5kYXRhID0g ZGF0YTsKKyAgb3V0LT5jb2RlID0gY29kZTsKKworICByZXR1cm4gcmV0dmFs OworfQorCisvKiBSZXR1cm4gbm9uLXplcm8gdmFsdWUgaWYgJ3gnIGlzIGxl Z2l0aW1hdGUgUElDIG9wZXJhbmQKKyAgIHdoZW4gZ2VuZXJhdGluZyBQSUMg Y29kZS4gICovCitpbnQKK2xlZ2l0aW1hdGVfcGljX29wZXJhbmRfcCAocnR4 IHgpCit7CisgIHN3aXRjaCAoR0VUX0NPREUgKHgpKQorICAgIHsKKyAgICBj YXNlIFNZTUJPTF9SRUY6CisgICAgICByZXR1cm4gMDsKKyAgICAgIGJyZWFr OworICAgIGNhc2UgTEFCRUxfUkVGOgorICAgICAgcmV0dXJuIDA7CisgICAg ICBicmVhazsKKyAgICBjYXNlIENPTlNUOgorICAgICAgLyogUkVWSVNJVDog VXNlIHNvbWV0aGluZyBsaWtlIHN5bWJvbF9yZWZlcmVuY2VkX3AuICAqLwor ICAgICAgaWYgKEdFVF9DT0RFIChYRVhQICh4LCAwKSkgPT0gUExVUworCSAg JiYgKEdFVF9DT0RFIChYRVhQIChYRVhQICh4LCAwKSwgMCkpID09IFNZTUJP TF9SRUYKKwkgICAgICB8fCBHRVRfQ09ERSAoWEVYUCAoWEVYUCAoeCwgMCks IDApKSA9PSBMQUJFTF9SRUYpCisJICAmJiAoR0VUX0NPREUgKFhFWFAgKFhF WFAgKHgsIDApLCAxKSkgPT0gQ09OU1RfSU5UKSkKKwlyZXR1cm4gMDsKKyAg ICAgIGJyZWFrOworICAgIGNhc2UgTUVNOgorICAgICAgcmV0dXJuIGxlZ2l0 aW1hdGVfcGljX29wZXJhbmRfcCAoWEVYUCAoeCwgMCkpOworICAgICAgYnJl YWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICAgIH0KKyAgcmV0 dXJuIDE7Cit9CisKKy8qIENvbnZlcnQgYSBub24tUElDIGFkZHJlc3MgaW4g YG9yaWcnIHRvIGEgUElDIGFkZHJlc3MgaW4gYHJlZycuCisKKyAgICAgSW5w dXQgICAgICAgICAgICBPdXRwdXQgKC1mIHBpYykgICAgICAgIE91dHB1dCAo LWYgUElDKQorICAgICBvcmlnICAgICAgICAgICAgIHJlZworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgQzEgICBzeW1ib2wg ICAgICAgICAgIHN5bWJvbEBCUk8gKHIxMikgICAgICAgIHN5bWJvbEBHT1Qg KHIxMikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisg ICAgIEMyICAgc3ltYm9sICsgb2Zmc2V0ICBzeW1ib2wrb2Zmc2V0QEJSTyAo cjEyKSBzeW1ib2wrb2Zmc2V0QEdPVCAocjEyKQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAKKyAgICAgTk9URTogQEJSTyBpcyBhZGRl ZCB1c2luZyB1bnNwZWM6QlJPCisgICAgIE5PVEU6IEBHT1QgaXMgYWRkZWQg dXNpbmcgdW5zcGVjOkdPVC4gICovCitydHgKK2xlZ2l0aW1pemVfcGljX2Fk ZHJlc3MgKHJ0eCBvcmlnLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlIEFUVFJJ QlVURV9VTlVTRUQsCisJCQlydHggcmVnKQoreworCisgIC8qIEZpcnN0IGhh bmRsZSBhIHNpbXBsZSBTWU1CT0xfUkVGIG9yIExBQkVMX1JFRi4gICovCisg IGlmIChHRVRfQ09ERSAob3JpZykgPT0gU1lNQk9MX1JFRiB8fCBHRVRfQ09E RSAob3JpZykgPT0gTEFCRUxfUkVGKQorICAgIHsKKyAgICAgIGlmIChyZWcg PT0gMCkKKwlyZWcgPSBnZW5fcmVnX3J0eCAoUG1vZGUpOworCisgICAgICBp ZiAoZmxhZ19waWMgPT0gTkVBUl9QSUMpCisJeworCSAgLyogVW5zcGVjIHRv IGhhbmRsZSAtZnBpYyBvcHRpb24uICAqLworCSAgZW1pdF9pbnNuIChnZW5f dW5zcGVjX2Jyb19hZGRyIChyZWcsIG9yaWcpKTsKKwkgIGVtaXRfaW5zbiAo Z2VuX2FkZHNpMyAocmVnLCByZWcsIHBpY19vZmZzZXRfdGFibGVfcnR4KSk7 CisJfQorICAgICAgZWxzZSBpZiAoZmxhZ19waWMgPT0gRkFSX1BJQykKKwl7 CisJICAvKiBVbnNwZWMgdG8gaGFuZGxlIC1mUElDIG9wdGlvbi4gICovCisJ ICBlbWl0X2luc24gKGdlbl91bnNwZWNfZ290X2FkZHIgKHJlZywgb3JpZykp OworCX0KKyAgICAgIHJldHVybiByZWc7CisgICAgfQorICBlbHNlIGlmIChH RVRfQ09ERSAob3JpZykgPT0gQ09OU1QpCisgICAgeworICAgICAgLyogVG8g aGFuZGxlIChzeW1ib2wgKyBvZmZzZXQpLiAgKi8KKyAgICAgIHJ0eCBiYXNl LCBvZmZzZXQ7CisKKyAgICAgIGlmIChHRVRfQ09ERSAoWEVYUCAob3JpZywg MCkpID09IFBMVVMKKwkgICYmIFhFWFAgKFhFWFAgKG9yaWcsIDApLCAwKSA9 PSBwaWNfb2Zmc2V0X3RhYmxlX3J0eCkKKwlyZXR1cm4gb3JpZzsKKworICAg ICAgaWYgKHJlZyA9PSAwKQorCXsKKwkgIGdjY19hc3NlcnQgKGNhbl9jcmVh dGVfcHNldWRvX3AgKCkpOworCSAgcmVnID0gZ2VuX3JlZ19ydHggKFBtb2Rl KTsKKwl9CisKKyAgICAgIGdjY19hc3NlcnQgKEdFVF9DT0RFIChYRVhQIChv cmlnLCAwKSkgPT0gUExVUyk7CisKKyAgICAgIGJhc2UgPSBsZWdpdGltaXpl X3BpY19hZGRyZXNzIChYRVhQIChYRVhQIChvcmlnLCAwKSwgMCksIFBtb2Rl LCByZWcpOworICAgICAgb2Zmc2V0ID0gbGVnaXRpbWl6ZV9waWNfYWRkcmVz cyAoWEVYUCAoWEVYUCAob3JpZywgMCksIDEpLCBQbW9kZSwKKwkJCQkgICAg ICAgYmFzZSA9PSByZWcgPyAwIDogcmVnKTsKKworICAgICAgLyogUkVWSVNJ VDogT3B0aW1pemUgZm9yIGNvbnN0LW9mZnNldHMuICAqLworICAgICAgZW1p dF9pbnNuIChnZW5fYWRkc2kzIChyZWcsIGJhc2UsIG9mZnNldCkpOworCisg ICAgICByZXR1cm4gcmVnOworICAgIH0KKyAgcmV0dXJuIG9yaWc7Cit9CisK Ky8qIEltcGxlbWVudGF0aW9uIG9mIFRBUkdFVF9MRUdJVElNQVRFX0FERFJF U1NfUC4gICovCitzdGF0aWMgYm9vbAorY3IxNl9sZWdpdGltYXRlX2FkZHJl c3NfcCAoZW51bSBtYWNoaW5lX21vZGUgbW9kZSBBVFRSSUJVVEVfVU5VU0VE LAorCQkJICAgcnR4IGFkZHIsIGJvb2wgc3RyaWN0KQoreworICBlbnVtIGNy MTZfYWRkcnR5cGUgYWRkcnR5cGU7CisgIHN0cnVjdCBjcjE2X2FkZHJlc3Mg YWRkcmVzczsKKworICBpZiAoVEFSR0VUX0RFQlVHX0FERFIpCisgICAgewor ICAgICAgZnByaW50ZiAoc3RkZXJyLAorCSAgICAgICAiXG49PT09PT1cblRB UkdFVF9MRUdJVElNQVRFX0FERFJFU1NfUCwgbW9kZSA9ICVzLCBzdHJpY3Qg PSAlZCIsCisJICAgICAgIEdFVF9NT0RFX05BTUUgKG1vZGUpLCBzdHJpY3Qp OworICAgICAgZGVidWdfcnR4IChhZGRyKTsKKyAgICB9CisgIGFkZHJ0eXBl ID0gY3IxNl9kZWNvbXBvc2VfYWRkcmVzcyAoYWRkciwgJmFkZHJlc3MsCisJ CQkJICAgICAoVEFSR0VUX0RFQlVHX0FERFIgPyAxIDogMCksIEZBTFNFKTsK KworICBpZiAoVEFSR0VUX0RFQlVHX0FERFIpCisgICAgeworICAgICAgY29u c3QgY2hhciAqdHlwZXN0cjsKKworICAgICAgc3dpdGNoIChhZGRydHlwZSkK Kwl7CisJY2FzZSBDUjE2X0lOVkFMSUQ6CisJICB0eXBlc3RyID0gImludmFs aWQiOworCSAgYnJlYWs7CisJY2FzZSBDUjE2X0FCU09MVVRFOgorCSAgdHlw ZXN0ciA9ICJhYnNvbHV0ZSI7CisJICBicmVhazsKKwljYXNlIENSMTZfUkVH X1JFTDoKKwkgIHR5cGVzdHIgPSAicmVnaXN0ZXIgcmVsYXRpdmUiOworCSAg YnJlYWs7CisJY2FzZSBDUjE2X1JFR1BfUkVMOgorCSAgdHlwZXN0ciA9ICJy ZWdpc3RlciBwYWlyIHJlbGF0aXZlIjsKKwkgIGJyZWFrOworCWNhc2UgQ1Ix Nl9JTkRFWF9SRUdQX1JFTDoKKwkgIHR5cGVzdHIgPSAiaW5kZXggKyByZWdp c3RlciBwYWlyIHJlbGF0aXZlIjsKKwkgIGJyZWFrOworCWRlZmF1bHQ6CisJ ICBnY2NfdW5yZWFjaGFibGUgKCk7CisJfQorICAgICAgZnByaW50ZiAoc3Rk ZXJyLCAiXG5jcjE2IGFkZHJlc3MgdHlwZTogJXNcbiIsIHR5cGVzdHIpOwor ICAgIH0KKworICBpZiAoYWRkcnR5cGUgPT0gQ1IxNl9JTlZBTElEKQorICAg IHJldHVybiBGQUxTRTsKKworICBpZiAoc3RyaWN0KQorICAgIHsKKyAgICAg IGlmIChhZGRyZXNzLmJhc2UKKwkgICYmICFSRUdOT19NT0RFX09LX0ZPUl9C QVNFX1AgKFJFR05PIChhZGRyZXNzLmJhc2UpLCBtb2RlKSkKKwl7CisJICBp ZiAoVEFSR0VUX0RFQlVHX0FERFIpCisJICAgIGZwcmludGYgKHN0ZGVyciwg ImJhc2UgcmVnaXN0ZXIgbm90IHN0cmljdFxuIik7CisJICByZXR1cm4gRkFM U0U7CisJfQorICAgICAgaWYgKGFkZHJlc3MuaW5kZXggJiYgIVJFR05PX09L X0ZPUl9JTkRFWF9QIChSRUdOTyAoYWRkcmVzcy5pbmRleCkpKQorCXsKKwkg IGlmIChUQVJHRVRfREVCVUdfQUREUikKKwkgICAgZnByaW50ZiAoc3RkZXJy LCAiaW5kZXggcmVnaXN0ZXIgbm90IHN0cmljdFxuIik7CisJICByZXR1cm4g RkFMU0U7CisJfQorICAgIH0KKworICAvKiBSZXR1cm4gdHJ1ZSBpZiBhZGRy ZXNzaW5nIG1vZGUgaXMgcmVnaXN0ZXIgcmVsYXRpdmUuICAqLworICBpZiAo ZmxhZ19waWMpCisgICAgeworICAgICAgaWYgKGFkZHJ0eXBlID09IENSMTZf UkVHX1JFTCB8fCBhZGRydHlwZSA9PSBDUjE2X1JFR1BfUkVMKQorCXJldHVy biBUUlVFOworICAgICAgZWxzZQorCXJldHVybiBGQUxTRTsKKyAgICB9CisK KyAgcmV0dXJuIFRSVUU7Cit9CisKKy8qIFJvdXRpbmVzIHRvIGNvbXB1dGUg Y29zdHMuICAqLworCisvKiBSZXR1cm4gY29zdCBvZiB0aGUgbWVtb3J5IGFk ZHJlc3MgeC4gICovCitzdGF0aWMgaW50CitjcjE2X2FkZHJlc3NfY29zdCAo cnR4IGFkZHIsIGJvb2wgc3BlZWQgQVRUUklCVVRFX1VOVVNFRCkKK3sKKyAg ZW51bSBjcjE2X2FkZHJ0eXBlIGFkZHJ0eXBlOworICBzdHJ1Y3QgY3IxNl9h ZGRyZXNzIGFkZHJlc3M7CisgIGludCBjb3N0ID0gMjsKKworICBhZGRydHlw ZSA9IGNyMTZfZGVjb21wb3NlX2FkZHJlc3MgKGFkZHIsICZhZGRyZXNzLCAw LCBGQUxTRSk7CisKKyAgZ2NjX2Fzc2VydCAoYWRkcnR5cGUgIT0gQ1IxNl9J TlZBTElEKTsKKworICAvKiBDUjE2X0FCU09MVVRFICAgICAgICAgICAgOiAz CisgICAgIENSMTZfUkVHX1JFTCAgKGRpc3AgIT0wKSA6IDQKKyAgICAgQ1Ix Nl9SRUdfUkVMICAoZGlzcCA9PTApIDogNQorICAgICBDUjE2X1JFR1BfUkVM IChkaXNwICE9MCkgOiA2CisgICAgIENSMTZfUkVHUF9SRUwgKGRpc3AgPT0w KSA6IDcKKyAgICAgQ1IxNl9JTkRFWF9SRUdQX1JFTCAoZGlzcCAhPTApIDog OAorICAgICBDUjE2X0lOREVYX1JFR1BfUkVMIChkaXNwID09MCkgOiA5LiAg Ki8KKyAgc3dpdGNoIChhZGRydHlwZSkKKyAgICB7CisgICAgY2FzZSBDUjE2 X0FCU09MVVRFOgorICAgICAgY29zdCArPSAxOworICAgICAgYnJlYWs7Cisg ICAgY2FzZSBDUjE2X1JFR1BfUkVMOgorICAgICAgY29zdCArPSAyOworICAg ICAgLyogRmFsbCB0aHJvdWdoLiAgKi8KKyAgICBjYXNlIENSMTZfUkVHX1JF TDoKKyAgICAgIGNvc3QgKz0gMzsKKyAgICAgIGlmIChhZGRyZXNzLmRpc3Ap CisJY29zdCAtPSAxOworICAgICAgYnJlYWs7CisgICAgY2FzZSBDUjE2X0lO REVYX1JFR1BfUkVMOgorICAgICAgY29zdCArPSA3OworICAgICAgaWYgKGFk ZHJlc3MuZGlzcCkKKwljb3N0IC09IDE7CisgICAgZGVmYXVsdDoKKyAgICAg IGJyZWFrOworICAgIH0KKworICBpZiAoVEFSR0VUX0RFQlVHX0FERFIpCisg ICAgeworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiXG49PT09PT1cbm1hY3Jv IFRBUkdFVF9BRERSRVNTX0NPU1QgPSAlZFxuIiwgY29zdCk7CisgICAgICBk ZWJ1Z19ydHggKGFkZHIpOworICAgIH0KKworICByZXR1cm4gY29zdDsKK30K KworCisvKiBJbXBsZW1lbnQgYFRBUkdFVF9SRUdJU1RFUl9NT1ZFX0NPU1Qn LiAgKi8KK3N0YXRpYyBpbnQKK2NyMTZfcmVnaXN0ZXJfbW92ZV9jb3N0IChl bnVtIG1hY2hpbmVfbW9kZSBtb2RlIEFUVFJJQlVURV9VTlVTRUQsCisgICAg ICAgICAgICAgICAgICAgICAgICByZWdfY2xhc3NfdCBmcm9tIEFUVFJJQlVU RV9VTlVTRUQsIHJlZ19jbGFzc190IHRvKQoreworICByZXR1cm4gKHRvICE9 IEdFTkVSQUxfUkVHUyA/IDgKKyAgICAgICAgICA6IDIpOworfQorCisvKiBJ bXBsZW1lbnQgYFRBUkdFVF9NRU1PUllfTU9WRV9DT1NUJy4gICovCisKKy8q IFJldHVybiB0aGUgY29zdCBvZiBtb3ZpbmcgZGF0YSBvZiBtb2RlIE1PREUg YmV0d2VlbiBhIHJlZ2lzdGVyIG9mIGNsYXNzCisgICBDTEFTUyBhbmQgbWVt b3J5OyBJTiBpcyB6ZXJvIGlmIHRoZSB2YWx1ZSBpcyB0byBiZSB3cml0dGVu IHRvIG1lbW9yeSwKKyAgIG5vbnplcm8gaWYgaXQgaXMgdG8gYmUgcmVhZCBp bi4gVGhpcyBjb3N0IGlzIHJlbGF0aXZlIHRvIHRob3NlIGluCisgICBSRUdJ U1RFUl9NT1ZFX0NPU1QuICAqLworc3RhdGljIGludAorY3IxNl9tZW1vcnlf bW92ZV9jb3N0IChlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLAorICAgICAgICAg ICAgICAgICAgICAgICByZWdfY2xhc3NfdCByY2xhc3MgQVRUUklCVVRFX1VO VVNFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpbiBBVFRSSUJV VEVfVU5VU0VEKQoreworICAvKiBPbmUgTEQgb3IgU1QgdGFrZXMgdHdpY2Ug dGhlIHRpbWUgb2YgYSBzaW1wbGUgcmVnLXJlZyBtb3ZlLiAgKi8KKyAgaWYg KHJlZ19jbGFzc2VzX2ludGVyc2VjdF9wIChyY2xhc3MsIEdFTkVSQUxfUkVH UykpCisgICAgcmV0dXJuICg0ICogSEFSRF9SRUdOT19OUkVHUyAoMCwgbW9k ZSkpOworICBlbHNlCisgICAgcmV0dXJuICgxMDApOworfQorCisvKiBJbnN0 cnVjdGlvbiBvdXRwdXQuICAqLworCisvKiBDaGVjayBpZiBhIGNvbnN0X2Rv dWJsZSBpcyBvayBmb3IgY3IxNiBzdG9yZS1pbW1lZGlhdGUgaW5zdHJ1Y3Rp b25zLiAgKi8KK2ludAorY3IxNl9jb25zdF9kb3VibGVfb2sgKHJ0eCBvcCkK K3sKKyAgaWYgKEdFVF9NT0RFIChvcCkgPT0gU0Ztb2RlKQorICAgIHsKKyAg ICAgIFJFQUxfVkFMVUVfVFlQRSByOworICAgICAgbG9uZyBsOworICAgICAg UkVBTF9WQUxVRV9GUk9NX0NPTlNUX0RPVUJMRSAociwgb3ApOworICAgICAg UkVBTF9WQUxVRV9UT19UQVJHRVRfU0lOR0xFIChyLCBsKTsKKyAgICAgIHJl dHVybiBVTlNJR05FRF9JTlRfRklUU19OX0JJVFMgKGwsIDQpID8gMSA6IDA7 CisgICAgfQorCisgIHJldHVybiAoKFVOU0lHTkVEX0lOVF9GSVRTX05fQklU UyAoQ09OU1RfRE9VQkxFX0xPVyAob3ApLCA0KSkgJiYKKwkgIChVTlNJR05F RF9JTlRfRklUU19OX0JJVFMgKENPTlNUX0RPVUJMRV9ISUdIIChvcCksIDQp KSkgPyAxIDogMDsKK30KKworLyogUmV0dXJucyBiaXQgcG9zaXRpb24gb2Yg Zmlyc3QgMCBvciAxIGJpdC4KKyAgIEl0IGlzIHNhZmUgdG8gYXNzdW1lIHZh bCBhcyAxNi1iaXQgd2lkZS4gICovCitpbnQKK2NyMTZfb3BlcmFuZF9iaXRf cG9zIChpbnQgdmFsLCBpbnQgYml0dmFsKQoreworICBpbnQgaTsKKyAgaWYg KGJpdHZhbCA9PSAwKQorICAgIHZhbCA9IH52YWw7CisKKyAgZm9yIChpID0g MDsgaSA8IDE2OyBpKyspCisgICAgaWYgKHZhbCAmICgxIDw8IGkpKQorICAg ICAgYnJlYWs7CisgIHJldHVybiBpOworfQorCisvKiBJbXBsZW1lbnRzIHRo ZSBtYWNybyBQUklOVF9PUEVSQU5EIGRlZmluZWQgaW4gY3IxNi5oLiAgKi8K K3N0YXRpYyB2b2lkCitjcjE2X3ByaW50X29wZXJhbmQgKEZJTEUgKiBmaWxl LCBydHggeCwgaW50IGNvZGUpCit7CisgIGludCBwdHJfZGVyZWZlcmVuY2Ug PSAwOworCisgIHN3aXRjaCAoY29kZSkKKyAgICB7CisgICAgY2FzZSAnZCc6 CisgICAgICB7CisJY29uc3QgY2hhciAqY3IxNl9jbXBfc3RyOworCXN3aXRj aCAoR0VUX0NPREUgKHgpKQorCSAgeworCSAgICAvKiBNRDogY29tcGFyZSAo cmVnLCByZWcgb3IgaW1tKSBidXQgQ1IxNjogY21wIChyZWcgb3IgaW1tLCBy ZWcpCisJICAgICAgIC0+IHN3YXAgYWxsIG5vbiBzeW1tZXRyaWMgb3BzLiAg Ki8KKwkgIGNhc2UgRVE6CisJICAgIGNyMTZfY21wX3N0ciA9ICJlcSI7CisJ ICAgIGJyZWFrOworCSAgY2FzZSBORToKKwkgICAgY3IxNl9jbXBfc3RyID0g Im5lIjsKKwkgICAgYnJlYWs7CisJICBjYXNlIEdUOgorCSAgICBjcjE2X2Nt cF9zdHIgPSAibHQiOworCSAgICBicmVhazsKKwkgIGNhc2UgR1RVOgorCSAg ICBjcjE2X2NtcF9zdHIgPSAibG8iOworCSAgICBicmVhazsKKwkgIGNhc2Ug TFQ6CisJICAgIGNyMTZfY21wX3N0ciA9ICJndCI7CisJICAgIGJyZWFrOwor CSAgY2FzZSBMVFU6CisJICAgIGNyMTZfY21wX3N0ciA9ICJoaSI7CisJICAg IGJyZWFrOworCSAgY2FzZSBHRToKKwkgICAgY3IxNl9jbXBfc3RyID0gImxl IjsKKwkgICAgYnJlYWs7CisJICBjYXNlIEdFVToKKwkgICAgY3IxNl9jbXBf c3RyID0gImxzIjsKKwkgICAgYnJlYWs7CisJICBjYXNlIExFOgorCSAgICBj cjE2X2NtcF9zdHIgPSAiZ2UiOworCSAgICBicmVhazsKKwkgIGNhc2UgTEVV OgorCSAgICBjcjE2X2NtcF9zdHIgPSAiaHMiOworCSAgICBicmVhazsKKwkg IGRlZmF1bHQ6CisJICAgIGdjY191bnJlYWNoYWJsZSAoKTsKKwkgIH0KKwlm cHJpbnRmIChmaWxlLCAiJXMiLCBjcjE2X2NtcF9zdHIpOworCXJldHVybjsK KyAgICAgIH0KKyAgICBjYXNlICckJzoKKyAgICAgIHB1dGMgKCckJywgZmls ZSk7CisgICAgICByZXR1cm47CisKKyAgICBjYXNlICdwJzoKKyAgICAgIGlm IChHRVRfQ09ERSAoeCkgPT0gUkVHKQorCXsKKwkgIC8qIEZvciBQdXNoIGlu c3RydWN0aW9ucywgd2Ugc2hvdWxkIG5vdCBwcmludCByZWdpc3RlciBwYWly cy4gICovCisJICBmcHJpbnRmIChmaWxlLCAiJXMiLCByZWdfbmFtZXNbUkVH Tk8gKHgpXSk7CisJICByZXR1cm47CisJfQorICAgICAgYnJlYWs7CisKKyAg ICBjYXNlICdiJzoKKyAgICAgIC8qIFByaW50IHRoZSBpbW1lZGlhdGUgYWRk cmVzcyBmb3IgYmFsIAorICAgICAgICAgJ2InIGlzIHVzZWQgaW5zdGVhZCBv ZiAnYScgdG8gYXZvaWQgY29tcGlsZXIgY2FsbGluZworICAgICAgICAgdGhl IEdPX0lGX0xFR0lUSU1BVEVfQUREUkVTUyB3aGljaCBjYW5ub3QKKyAgICAg ICAgIHBlcmZvcm0gY2hlY2tzIG9uIGNvbnN0X2ludCBjb2RlIGFkZHJlc3Nl cyBhcyBpdAorICAgICAgICAgYXNzdW1lcyBhbGwgY29uc3RfaW50IGFyZSBk YXRhIGFkZHJlc3Nlcy4gICovCisgICAgICBmcHJpbnRmIChmaWxlLCAiMHgl bHgiLCBJTlRWQUwgKHgpKTsKKyAgICAgIHJldHVybjsKKworICAgIGNhc2Ug J3InOgorICAgICAgLyogUHJpbnQgYml0IHBvc2l0aW9uIG9mIGZpcnN0IDAu ICAqLworICAgICAgZnByaW50ZiAoZmlsZSwgIiVkIiwgY3IxNl9vcGVyYW5k X2JpdF9wb3MgKElOVFZBTCAoeCksIDApKTsKKyAgICAgIHJldHVybjsKKwor ICAgIGNhc2UgJ3MnOgorICAgICAgLyogUHJpbnQgYml0IHBvc2l0aW9uIG9m IGZpcnN0IDEuICAqLworICAgICAgZnByaW50ZiAoZmlsZSwgIiVkIiwgY3Ix Nl9vcGVyYW5kX2JpdF9wb3MgKElOVFZBTCAoeCksIDEpKTsKKyAgICAgIHJl dHVybjsKKyAgICBjYXNlICdnJzoKKyAgICAgIC8qICdnJyBpcyB1c2VkIGZv ciBpbXBsaWNpdCBtZW06IGRlcmVmZXJlbmNlLiAgKi8KKyAgICAgIHB0cl9k ZXJlZmVyZW5jZSA9IDE7CisgICAgY2FzZSAnZic6CisgICAgY2FzZSAwOgor ICAgICAgLyogZGVmYXVsdC4gICovCisgICAgICBzd2l0Y2ggKEdFVF9DT0RF ICh4KSkKKwl7CisJY2FzZSBSRUc6CisJICBpZiAoR0VUX01PREVfQklUU0la RSAoR0VUX01PREUgKHgpKSA+IEJJVFNfUEVSX1dPUkQpCisJICAgIHsKKwkg ICAgICBpZiAoTE9OR19SRUdfUCAoUkVHTk8gKHgpKSkKKwkJZnByaW50ZiAo ZmlsZSwgIiglcykiLCByZWdfbmFtZXNbUkVHTk8gKHgpXSk7CisJICAgICAg ZWxzZQorCQlmcHJpbnRmIChmaWxlLCAiKCVzLCVzKSIsIHJlZ19uYW1lc1tS RUdOTyAoeCkgKyAxXSwKKwkJCSByZWdfbmFtZXNbUkVHTk8gKHgpXSk7CisJ ICAgIH0KKwkgIGVsc2UKKwkgICAgZnByaW50ZiAoZmlsZSwgIiVzIiwgcmVn X25hbWVzW1JFR05PICh4KV0pOworCSAgcmV0dXJuOworCisJY2FzZSBNRU06 CisJICBvdXRwdXRfYWRkcmVzcyAoWEVYUCAoeCwgMCkpOworCSAgcmV0dXJu OworCisJY2FzZSBDT05TVF9ET1VCTEU6CisJICB7CisJICAgIFJFQUxfVkFM VUVfVFlQRSByOworCSAgICBsb25nIGw7CisKKwkgICAgUkVBTF9WQUxVRV9G Uk9NX0NPTlNUX0RPVUJMRSAociwgeCk7CisJICAgIFJFQUxfVkFMVUVfVE9f VEFSR0VUX1NJTkdMRSAociwgbCk7CisKKwkgICAgZnByaW50ZiAoZmlsZSwg IiQweCVseCIsIGwpOworCSAgICByZXR1cm47CisJICB9CisJY2FzZSBDT05T VF9JTlQ6CisJICB7CisJICAgIGZwcmludGYgKGZpbGUsICIkJWxkIiwgSU5U VkFMICh4KSk7CisJICAgIHJldHVybjsKKwkgIH0KKwljYXNlIFVOU1BFQzoK KwkgIGluZm9ybSAoaW5wdXRfbG9jYXRpb24sICJ1bnNwZWMhISIpOworCSAg c3dpdGNoIChYSU5UICh4LCAxKSkKKwkgICAgeworCSAgICBkZWZhdWx0Ogor CSAgICAgIGdjY191bnJlYWNoYWJsZSAoKTsKKwkgICAgfQorCSAgYnJlYWs7 CisKKwlkZWZhdWx0OgorCSAgaWYgKCFwdHJfZGVyZWZlcmVuY2UpCisJICAg IHsKKwkgICAgICBwdXRjICgnJCcsIGZpbGUpOworCSAgICB9CisJICBjcjE2 X3ByaW50X29wZXJhbmRfYWRkcmVzcyAoZmlsZSwgeCk7CisJICByZXR1cm47 CisJfQorICAgIGRlZmF1bHQ6CisgICAgICBvdXRwdXRfb3BlcmFuZF9sb3Nz YWdlICgiaW52YWxpZCAlJXhuIGNvZGUiKTsKKyAgICB9CisKKyAgZ2NjX3Vu cmVhY2hhYmxlICgpOworfQorCisvKiBJbXBsZW1lbnRzIHRoZSBtYWNybyBQ UklOVF9PUEVSQU5EX0FERFJFU1MgZGVmaW5lZCBpbiBjcjE2LmguICAqLwor CitzdGF0aWMgdm9pZAorY3IxNl9wcmludF9vcGVyYW5kX2FkZHJlc3MgKEZJ TEUgKiBmaWxlLCBydHggYWRkcikKK3sKKyAgZW51bSBjcjE2X2FkZHJ0eXBl IGFkZHJ0eXBlOworICBzdHJ1Y3QgY3IxNl9hZGRyZXNzIGFkZHJlc3M7CisK KyAgLyogRGVjb21wb3NlIHRoZSBhZGRyZXNzLiBBbHNvIGFzayBpdCB0byB0 cmVhdCBhZGRyZXNzIGFzIGNvbnN0YW50LiAgKi8KKyAgYWRkcnR5cGUgPSBj cjE2X2RlY29tcG9zZV9hZGRyZXNzIChhZGRyLCAmYWRkcmVzcywgMCwgVFJV RSk7CisKKyAgaWYgKGFkZHJlc3MuZGlzcCAmJiBHRVRfQ09ERSAoYWRkcmVz cy5kaXNwKSA9PSBVTlNQRUMpCisgICAgeworICAgICAgaW5mb3JtIChpbnB1 dF9sb2NhdGlvbiwgInVuc3BlYyAzICglZCkhISEiLCBhZGRydHlwZSk7Cisg ICAgICBkZWJ1Z19ydHggKGFkZHIpOworICAgIH0KKworICBzd2l0Y2ggKGFk ZHJ0eXBlKQorICAgIHsKKyAgICBjYXNlIENSMTZfUkVHX1JFTDoKKyAgICAg IGlmIChhZGRyZXNzLmRpc3ApCisJeworCSAgaWYgKEdFVF9DT0RFIChhZGRy ZXNzLmRpc3ApID09IFVOU1BFQykKKwkgICAgY3IxNl9wcmludF9vcGVyYW5k IChmaWxlLCBhZGRyZXNzLmRpc3AsIDApOworCSAgZWxzZQorCSAgICBvdXRw dXRfYWRkcl9jb25zdCAoZmlsZSwgYWRkcmVzcy5kaXNwKTsKKwl9CisgICAg ICBlbHNlCisJZnByaW50ZiAoZmlsZSwgIjAiKTsKKyAgICAgIGZwcmludGYg KGZpbGUsICIoJXMpIiwgcmVnX25hbWVzW1JFR05PIChhZGRyZXNzLmJhc2Up XSk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgQ1IxNl9BQlNPTFVURToK KyAgICAgIGlmIChhZGRyZXNzLmRpc3ApCisJb3V0cHV0X2FkZHJfY29uc3Qg KGZpbGUsIGFkZHJlc3MuZGlzcCk7CisgICAgICBlbHNlCisJZnByaW50ZiAo ZmlsZSwgIjAiKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBDUjE2X0lO REVYX1JFR1BfUkVMOgorICAgICAgZnByaW50ZiAoZmlsZSwgIlslc10iLCBy ZWdfbmFtZXNbUkVHTk8gKGFkZHJlc3MuaW5kZXgpXSk7CisgICAgICAvKiBG YWxsIHRocm91Z2guICAqLworICAgIGNhc2UgQ1IxNl9SRUdQX1JFTDoKKyAg ICAgIGlmIChhZGRyZXNzLmRpc3ApCisJeworCSAgaWYgKEdFVF9DT0RFIChh ZGRyZXNzLmRpc3ApID09IFVOU1BFQykKKwkgICAgY3IxNl9wcmludF9vcGVy YW5kIChmaWxlLCBhZGRyZXNzLmRpc3AsIDApOworCSAgZWxzZQorCSAgICBv dXRwdXRfYWRkcl9jb25zdCAoZmlsZSwgYWRkcmVzcy5kaXNwKTsKKwl9Cisg ICAgICBlbHNlCisJZnByaW50ZiAoZmlsZSwgIjAiKTsKKyAgICAgIGZwcmlu dGYgKGZpbGUsICIoJXMsJXMpIiwgcmVnX25hbWVzW1JFR05PIChhZGRyZXNz LmJhc2UpICsgMV0sCisJICAgICAgIHJlZ19uYW1lc1tSRUdOTyAoYWRkcmVz cy5iYXNlKV0pOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAg IGRlYnVnX3J0eCAoYWRkcik7CisgICAgICBnY2NfdW5yZWFjaGFibGUgKCk7 CisgICAgfQorICAvKiBBZGQgcXVhbGlmaWVycyB0byB0aGUgYWRkcmVzcyBl eHByZXNzaW9uIHRoYXQgd2FzIGp1c3QgcHJpbnRlZC4gICovCisgIGlmIChm bGFnX3BpYyA8IE5FQVJfUElDICYmIGFkZHJlc3MuY29kZSA9PSAwKQorICAg IHsKKyAgICAgIGlmIChhZGRyZXNzLmRhdGEgPT0gRE1fRkFSKQorCS8qIEFk ZHIgY29udGFpbnMgU1lNQk9MX1JFRiAmIGZhciBkYXRhIHB0ci4gICovCisJ ZnByaW50ZiAoZmlsZSwgIkBsIik7CisgICAgICBlbHNlIGlmIChhZGRyZXNz LmRhdGEgPT0gRE1fREVGQVVMVCkKKwkvKiBBZGRyIGNvbnRhaW5zIFNZTUJP TF9SRUYgJiBtZWRpdW0gZGF0YSBwdHIuICAqLworCWZwcmludGYgKGZpbGUs ICJAbSIpOworICAgICAgLyogQWRkciBjb250YWlucyBTWU1CT0xfUkVGICYg bWVkaXVtIGRhdGEgcHRyLiAgKi8KKyAgICAgIGVsc2UgaWYgKGFkZHJlc3Mu ZGF0YSA9PSBETV9ORUFSKQorCS8qIEFkZHIgY29udGFpbnMgU1lNQk9MX1JF RiAmIG5lYXIgZGF0YSBwdHIuICAqLworCWZwcmludGYgKGZpbGUsICJAcyIp OworICAgIH0KKyAgZWxzZSBpZiAoZmxhZ19waWMgPT0gTkVBUl9QSUMKKwkg ICAmJiAoYWRkcmVzcy5jb2RlID09IDApICYmIChhZGRyZXNzLmRhdGEgPT0g RE1fRkFSCisJCQkJICAgICAgfHwgYWRkcmVzcy5kYXRhID09IERNX0RFRkFV TFQKKwkJCQkgICAgICB8fCBhZGRyZXNzLmRhdGEgPT0gRE1fTkVBUikpCisg ICAgeworICAgICAgZnByaW50ZiAoZmlsZSwgIkBsIik7CisgICAgfQorICBl bHNlIGlmIChmbGFnX3BpYyA9PSBORUFSX1BJQyAmJiBhZGRyZXNzLmNvZGUg PT0gMikKKyAgICB7CisgICAgICBmcHJpbnRmIChmaWxlLCAicGljIik7Cisg ICAgfQorICBlbHNlIGlmIChmbGFnX3BpYyA9PSBORUFSX1BJQyAmJiBhZGRy ZXNzLmNvZGUgPT0gMSkKKyAgICB7CisgICAgICBmcHJpbnRmIChmaWxlLCAi QGNwaWMiKTsKKyAgICB9CisKKyAgZWxzZSBpZiAoZmxhZ19waWMgPT0gRkFS X1BJQyAmJiBhZGRyZXNzLmNvZGUgPT0gMikKKyAgICB7CisgICAgICAvKiBS RVZJU0lUOiBjcjE2IHJlZ2lzdGVyIGluZGlyZWN0IGp1bXAgZXhwZWN0cyBh IDEtYml0IHJpZ2h0IHNoaWZ0ZWQKKyAgICAgICAgIGFkZHJlc3MgISBHT1Rj IHRlbGxzIGFzc2VtYmxlciB0aGlzIHN5bWJvbCBpcyBhIHRleHQtYWRkcmVz cyAKKyAgICAgICAgIFRoaXMgbmVlZHMgdG8gYmUgZml4ZWQgaW4gc3VjaCBh IHdheSB0aGF0IHRoaXMgb2Zmc2V0IGlzIGRvbmUgCisgICAgICAgICBvbmx5 IGluIHRoZSBjYXNlIHdoZXJlIGFuIGFkZHJlc3MgaXMgYmVpbmcgdXNlZCBm b3IgaW5kaXJlY3QganVtcAorICAgICAgICAgb3IgY2FsbC4gRGV0ZXJtaW5p bmcgdGhlIHBvdGVudGlhbCB1c2FnZSBvZiBsb2FkZCBpcyBvZiBjb3Vyc2Ug bm90CisgICAgICAgICBwb3NzaWJsZSBhbHdheXMuIEV2ZW50dWFsbHksIHRo aXMgaGFzIHRvIGJlIGZpeGVkIGluIHRoZSAKKyAgICAgICAgIHByb2Nlc3Nv ci4gICovCisgICAgICBmcHJpbnRmIChmaWxlLCAiR09UICglcykiLCByZWdf bmFtZXNbUElDX09GRlNFVF9UQUJMRV9SRUdOVU1dKTsKKyAgICB9CisgIGVs c2UgaWYgKGZsYWdfcGljID09IEZBUl9QSUMgJiYgYWRkcmVzcy5jb2RlID09 IDEpCisgICAgeworICAgICAgZnByaW50ZiAoZmlsZSwgIkBjR09UICglcyki LCByZWdfbmFtZXNbUElDX09GRlNFVF9UQUJMRV9SRUdOVU1dKTsKKyAgICB9 CisKKyAgZWxzZSBpZiAoZmxhZ19waWMgPT0gRkFSX1BJQyAmJgorCSAgIChh ZGRyZXNzLmRhdGEgPT0gRE1fRkFSIHx8IGFkZHJlc3MuZGF0YSA9PSBETV9E RUZBVUxUCisJICAgIHx8IGFkZHJlc3MuZGF0YSA9PSBETV9ORUFSKSkKKyAg ICB7CisgICAgICBmcHJpbnRmIChmaWxlLCAiQEdPVCAoJXMpIiwgcmVnX25h bWVzW1BJQ19PRkZTRVRfVEFCTEVfUkVHTlVNXSk7CisgICAgfQorfQorCisv KiBNYWNoaW5lIGRlc2NyaXB0aW9uIGhlbHBlciBmdW5jdGlvbnMuICAqLwor CisvKiBDYWxsZWQgZnJvbSBjcjE2Lm1kLiBUaGUgcmV0dXJuIHZhbHVlIGRl cGVuZHMgb24gdGhlIHBhcmFtZXRlciBwdXNoX29yX3BvcDoKKyAgIFdoZW4g cHVzaF9vcl9wb3AgaXMgemVybyAtPiBzdHJpbmcgZm9yIHB1c2ggaW5zdHJ1 Y3Rpb25zIG9mIHByb2xvZ3VlLgorICAgV2hlbiBwdXNoX29yX3BvcCBpcyBu b256ZXJvIC0+IHN0cmluZyBmb3IgcG9wL3BvcHJldC9yZXR4IGluIGVwaWxv Z3VlLgorICAgUmVsaWVzIG9uIHRoZSBhc3N1bXB0aW9uczoKKyAgIDEuIFJB IGlzIHRoZSBsYXN0IHJlZ2lzdGVyIHRvIGJlIHNhdmVkLgorICAgMi4gVGhl IG1heGltYWwgdmFsdWUgb2YgdGhlIGNvdW50ZXIgaXMgTUFYX0NPVU5ULiAg Ki8KK2NoYXIgKgorY3IxNl9wcmVwYXJlX3B1c2hfcG9wX3N0cmluZyAoaW50 IHB1c2hfb3JfcG9wKQoreworICAvKiBqIGlzIHRoZSBudW1iZXIgb2YgcmVn aXN0ZXJzIGJlaW5nIHNhdmVkLCB0YWtlcyBjYXJlIHRoYXQgdGhlcmUgd29u J3QgYmUKKyAgICAgbW9yZSB0aGFuIDggaW4gb25lIHB1c2gvcG9wIGluc3Ry dWN0aW9uLiAgKi8KKworICAvKiBGb3IgdGhlIHJlZ2lzdGVyIG1hc2sgc3Ry aW5nLiAgKi8KKyAgc3RhdGljIGNoYXIgb25lX2luc3Rfc3RyWzUwXTsKKwor ICAvKiBpIGlzIHRoZSBpbmRleCBvZiBjdXJyZW50X2ZyYW1lX2luZm8uc2F2 ZV9yZWdzW10sIGdvaW5nIGZyb20gMCB1bnRpbCAKKyAgICAgY3VycmVudF9m cmFtZV9pbmZvLmxhc3RfcmVnX3RvX3NhdmUuICAqLworICBpbnQgaSwgc3Rh cnRfcmVnOworICBpbnQgd29yZF9jbnQ7CisgIGludCBwcmludF9yYTsKKyAg Y2hhciAqcmV0dXJuX3N0cjsKKworICAvKiBGb3IgcmV2ZXJzaW5nIG9uIHRo ZSBwdXNoIGluc3RydWN0aW9ucyBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuIG9u ZS4gICovCisgIGNoYXIgKnRlbXBfc3RyOworCisgIHJldHVybl9zdHIgPSAo Y2hhciAqKSB4bWFsbG9jICgxNjApOworICB0ZW1wX3N0ciA9IChjaGFyICop IHhtYWxsb2MgKDE2MCk7CisKKyAgLyogSW5pdGlhbGl6ZS4gICovCisgIG1l bXNldCAocmV0dXJuX3N0ciwgMCwgMyk7CisKKyAgaSA9IDA7CisgIHdoaWxl IChpIDw9IGN1cnJlbnRfZnJhbWVfaW5mby5sYXN0X3JlZ190b19zYXZlKQor ICAgIHsKKyAgICAgIC8qIFByZXBhcmUgbWFzayBmb3Igb25lIGluc3RydWN0 aW9uLiAgKi8KKyAgICAgIG9uZV9pbnN0X3N0clswXSA9IDA7CisKKyAgICAg IC8qIFRvIGNvdW50IG51bWJlciBvZiB3b3JkcyBpbiBvbmUgaW5zdHJ1Y3Rp b24uICAqLworICAgICAgd29yZF9jbnQgPSAwOworICAgICAgc3RhcnRfcmVn ID0gaTsKKyAgICAgIHByaW50X3JhID0gMDsKKyAgICAgIHdoaWxlICgod29y ZF9jbnQgPCBNQVhfQ09VTlQpIAorCSAgICAgJiYgKGkgPD0gY3VycmVudF9m cmFtZV9pbmZvLmxhc3RfcmVnX3RvX3NhdmUpKQorCXsKKwkgIC8qIEZvciBl YWNoIG5vbiBjb25zZWN1dGl2ZSBzYXZlIHJlZ2lzdGVyLCAKKwkgICAgIGEg bmV3IGluc3RydWN0aW9uIHNoYWxsIGJlIGdlbmVyYXRlZC4gICovCisJICBp ZiAoIWN1cnJlbnRfZnJhbWVfaW5mby5zYXZlX3JlZ3NbaV0pCisJICAgIHsK KwkgICAgICAvKiBNb3ZlIHRvIG5leHQgcmVnIGFuZCBicmVhay4gICovCisJ ICAgICAgKytpOworCSAgICAgIGJyZWFrOworCSAgICB9CisKKwkgIGlmIChp ID09IFJFVFVSTl9BRERSRVNTX1JFR05VTSkKKwkgICAgcHJpbnRfcmEgPSAx OworCSAgZWxzZQorCSAgICB7CisJICAgICAgLyogQ2hlY2sgZXNwZWNpYWxs eSBpZiBhZGRpbmcgMiBkb2VzIG5vdCBjcm9zcyB0aGUgTUFYX0NPVU5ULiAg Ki8KKwkgICAgICBpZiAoKHdvcmRfY250ICsgKChpIDwgQ1IxNl9GSVJTVF9E V09SRF9SRUdJU1RFUikgPyAxIDogMikpCisJCSAgPj0gTUFYX0NPVU5UKQor CQlicmVhazsKKwkgICAgICAvKiBJbmNyZWFzZSB3b3JkIGNvdW50IGJ5IDIg Zm9yIGxvbmcgcmVnaXN0ZXJzIGV4Y2VwdCBSQS4gICAqLworCSAgICAgIHdv cmRfY250ICs9ICgoaSA8IENSMTZfRklSU1RfRFdPUkRfUkVHSVNURVIpID8g MSA6IDIpOworCSAgICB9CisJICArK2k7CisJfQorCisgICAgICAvKiBObyBu ZWVkIHRvIGdlbmVyYXRlIGFueSBpbnN0cnVjdGlvbiBhcworICAgICAgICAg bm8gcmVnaXN0ZXIgb3IgUkEgbmVlZHMgdG8gYmUgc2F2ZWQuICAqLworICAg ICAgaWYgKCh3b3JkX2NudCA9PSAwKSAmJiAocHJpbnRfcmEgPT0gMCkpCisJ Y29udGludWU7CisKKyAgICAgIC8qIE5vdyBwcmVwYXJlIHRoZSBpbnN0cnVj dGlvbiBvcGVyYW5kcy4gICovCisgICAgICBpZiAod29yZF9jbnQgPiAwKQor CXsKKwkgIHNwcmludGYgKG9uZV9pbnN0X3N0ciwgIiQlZCwgJXMiLCB3b3Jk X2NudCwgcmVnX25hbWVzW3N0YXJ0X3JlZ10pOworCSAgaWYgKHByaW50X3Jh KQorCSAgICBzdHJjYXQgKG9uZV9pbnN0X3N0ciwgIiwgcmEiKTsKKwl9Cisg ICAgICBlbHNlCisJc3RyY2F0IChvbmVfaW5zdF9zdHIsICJyYSIpOworCisg ICAgICBpZiAocHVzaF9vcl9wb3AgPT0gMSkKKwl7CisJICAvKiBQb3AgaW5z dHJ1Y3Rpb24uICAqLworCSAgaWYgKHByaW50X3JhICYmICFjcjE2X2ludGVy cnVwdF9mdW5jdGlvbl9wICgpCisJICAgICAgJiYgIWNydGwtPmNhbGxzX2Vo X3JldHVybikKKwkgICAgLyogUHJpbnQgcG9wcmV0IGlmIFJBIGlzIHNhdmVk IGFuZCBpdHMgbm90IGEgaW50ZXJydXB0IAorCSAgICAgICBmdW5jdGlvbi4g ICovCisJICAgIHN0cmNweSAodGVtcF9zdHIsICJcblx0cG9wcmV0XHQiKTsK KwkgIGVsc2UKKwkgICAgc3RyY3B5ICh0ZW1wX3N0ciwgIlxuXHRwb3BcdCIp OworCisJICBzdHJjYXQgKHRlbXBfc3RyLCBvbmVfaW5zdF9zdHIpOworCisJ ICAvKiBBZGQgdGhlIHBvcCBpbnN0cnVjdGlvbiBsaXN0LiAgKi8KKwkgIHN0 cmNhdCAocmV0dXJuX3N0ciwgdGVtcF9zdHIpOworCX0KKyAgICAgIGVsc2UK Kwl7CisJICAvKiBQdXNoIGluc3RydWN0aW9uLiAgKi8KKwkgIHN0cmNweSAo dGVtcF9zdHIsICJcblx0cHVzaFx0Iik7CisJICBzdHJjYXQgKHRlbXBfc3Ry LCBvbmVfaW5zdF9zdHIpOworCisJICAvKiBXZSBuZWVkIHRvIHJldmVyc2Ug dGhlIG9yZGVyIG9mIHRoZSBpbnN0cnVjdGlvbnMgaWYgdGhlcmUKKwkgICAg IGFyZSBtb3JlIHRoYW4gb25lLiAoc2luY2UgdGhlIHBvcCB3aWxsIG5vdCBi ZSByZXZlcnNlZCBpbiAKKwkgICAgIHRoZSBlcGlsb2d1ZS4gICovCisJICBz dHJjYXQgKHRlbXBfc3RyLCByZXR1cm5fc3RyKTsKKwkgIHN0cmNweSAocmV0 dXJuX3N0ciwgdGVtcF9zdHIpOworCX0KKworICAgIH0KKworICBpZiAocHVz aF9vcl9wb3AgPT0gMSkKKyAgICB7CisgICAgICAvKiBQT1AuICAqLworICAg ICAgaWYgKGNyMTZfaW50ZXJydXB0X2Z1bmN0aW9uX3AgKCkpCisJc3RyY2F0 IChyZXR1cm5fc3RyLCAiXG5cdHJldHhcbiIpOworICAgICAgZWxzZSBpZiAo Y3J0bC0+Y2FsbHNfZWhfcmV0dXJuKQorCXsKKwkgIC8qIEFkZCBzdGFjayBh ZGp1c3RtZW50IGJlZm9yZSByZXR1cm5pbmcgdG8gZXhjZXB0aW9uIGhhbmRs ZXIKKwkgICAgIE5PVEU6IEVIX1JFVFVSTl9TVEFDS0FESl9SVFggbXVzdCBy ZWZlciB0byAocjUscjQpLiAgKi8KKwkgIHN0cmNhdCAocmV0dXJuX3N0ciwg IlxuXHRhZGRkXHQgKHI1LHI0KSwgKHNwKVx0XG4iKTsKKwkgIHN0cmNhdCAo cmV0dXJuX3N0ciwgIlxuXHRqdW1wXHQgKHJhKVxuIik7CisKKwkgIC8qIEJ1 dCBiZWZvcmUgYW55dGhpbmcgZWxzZSwgdW5kbyB0aGUgYWRqdXN0bWVudCBh ZGRpdGlvbiBkb25lIGluCisJICAgICBjcjE2X2V4cGFuZF9lcGlsb2d1ZSAo KS4gICovCisJICBzdHJjcHkgKHRlbXBfc3RyLCAiXG5cdHN1YmRcdCAocjUs cjQpLCAoc3ApXHRcbiIpOworCSAgc3RyY2F0ICh0ZW1wX3N0ciwgcmV0dXJu X3N0cik7CisJICBzdHJjcHkgKHJldHVybl9zdHIsIHRlbXBfc3RyKTsKKwl9 CisgICAgICBlbHNlIGlmICghRlVOQ19JU19OT1JFVFVSTl9QIChjdXJyZW50 X2Z1bmN0aW9uX2RlY2wpCisJICAgICAgICYmICEoY3VycmVudF9mcmFtZV9p bmZvLnNhdmVfcmVnc1tSRVRVUk5fQUREUkVTU19SRUdOVU1dKSkKKwlzdHJj YXQgKHJldHVybl9zdHIsICJcblx0anVtcFx0IChyYSlcbiIpOworICAgIH0K KworICAvKiBTa2lwIHRoZSBuZXdsaW5lIGFuZCB0aGUgdGFiIGluIHRoZSBz dGFydCBvZiByZXR1cm5fc3RyLiAgKi8KKyAgcmV0dXJuX3N0ciArPSAyOwor ICByZXR1cm4gcmV0dXJuX3N0cjsKK30KKworCisvKiBHZW5lcmF0ZSBEV0FS RjIgYW5ub3RhdGlvbiBmb3IgbXVsdGktcHVzaCBpbnN0cnVjdGlvbi4gICov CitzdGF0aWMgdm9pZAorY3IxNl9jcmVhdGVfZHdhcmZfZm9yX211bHRpX3B1 c2ggKHJ0eCBpbnNuKQoreworICBydHggZHdhcmYsIHJlZywgdG1wOworICBp bnQgaSwgaiwgZnJvbSwgdG8sIHdvcmRfY250LCBkd2FyZl9wYXJfaW5kZXgs IGluYzsKKyAgZW51bSBtYWNoaW5lX21vZGUgbW9kZTsKKyAgaW50IG51bV9y ZWdzID0gMCwgb2Zmc2V0ID0gMCwgc3BsaXRfaGVyZSA9IDAsIHRvdGFsX3B1 c2hfYnl0ZXMgPSAwOworCisgIGZvciAoaSA9IDA7IGkgPD0gY3VycmVudF9m cmFtZV9pbmZvLmxhc3RfcmVnX3RvX3NhdmU7ICsraSkKKyAgICB7CisgICAg ICBpZiAoY3VycmVudF9mcmFtZV9pbmZvLnNhdmVfcmVnc1tpXSkKKwl7CisJ ICArK251bV9yZWdzOworCSAgaWYgKGkgPCBDUjE2X0ZJUlNUX0RXT1JEX1JF R0lTVEVSKQorCSAgICB0b3RhbF9wdXNoX2J5dGVzICs9IDI7CisJICBlbHNl CisJICAgIHRvdGFsX3B1c2hfYnl0ZXMgKz0gNDsKKwl9CisgICAgfQorCisg IGlmICghbnVtX3JlZ3MpCisgICAgcmV0dXJuOworCisgIGR3YXJmID0gZ2Vu X3J0eF9TRVFVRU5DRSAoVk9JRG1vZGUsIHJ0dmVjX2FsbG9jIChudW1fcmVn cyArIDEpKTsKKyAgZHdhcmZfcGFyX2luZGV4ID0gbnVtX3JlZ3M7CisKKyAg ZnJvbSA9IGN1cnJlbnRfZnJhbWVfaW5mby5sYXN0X3JlZ190b19zYXZlICsg MTsKKyAgdG8gPSBjdXJyZW50X2ZyYW1lX2luZm8ubGFzdF9yZWdfdG9fc2F2 ZTsKKyAgd29yZF9jbnQgPSAwOworCisgIGZvciAoaSA9IGN1cnJlbnRfZnJh bWVfaW5mby5sYXN0X3JlZ190b19zYXZlOyBpID49IDA7KQorICAgIHsKKyAg ICAgIGlmICghY3VycmVudF9mcmFtZV9pbmZvLnNhdmVfcmVnc1tpXSB8fCAw ID09IGkgfHwgc3BsaXRfaGVyZSkKKwl7CisJICAvKiBUaGlzIGJsb2NrIG9m IHJlZ3MgaXMgcHVzaGVkIGluIG9uZSBpbnN0cnVjdGlvbi4gICovCisJICBp ZiAoMCA9PSBpICYmIGN1cnJlbnRfZnJhbWVfaW5mby5zYXZlX3JlZ3NbaV0p CisJICAgIGZyb20gPSAwOworCisJICBmb3IgKGogPSB0bzsgaiA+PSBmcm9t OyAtLWopCisJICAgIHsKKwkgICAgICBpZiAoaiA8IENSMTZfRklSU1RfRFdP UkRfUkVHSVNURVIpCisJCXsKKwkJICBtb2RlID0gSEltb2RlOworCQkgIGlu YyA9IDE7CisJCX0KKwkgICAgICBlbHNlCisJCXsKKwkJICBtb2RlID0gU0lt b2RlOworCQkgIGluYyA9IDI7CisJCX0KKwkgICAgICByZWcgPSBnZW5fcnR4 X1JFRyAobW9kZSwgaik7CisJICAgICAgb2Zmc2V0ICs9IDIgKiBpbmM7CisJ ICAgICAgdG1wID0gZ2VuX3J0eF9TRVQgKFZPSURtb2RlLAorCQkJCSBnZW5f ZnJhbWVfbWVtIChtb2RlLAorCQkJCQkJcGx1c19jb25zdGFudAorCQkJCQkJ KHN0YWNrX3BvaW50ZXJfcnR4LAorCQkJCQkJIHRvdGFsX3B1c2hfYnl0ZXMg LSBvZmZzZXQpKSwKKwkJCQkgcmVnKTsKKwkgICAgICBSVFhfRlJBTUVfUkVM QVRFRF9QICh0bXApID0gMTsKKwkgICAgICBYVkVDRVhQIChkd2FyZiwgMCwg ZHdhcmZfcGFyX2luZGV4LS0pID0gdG1wOworCSAgICB9CisJICBmcm9tID0g aTsKKwkgIHRvID0gLS1pOworCSAgc3BsaXRfaGVyZSA9IDA7CisJICB3b3Jk X2NudCA9IDA7CisJICBjb250aW51ZTsKKwl9CisKKyAgICAgIGlmIChpICE9 IFJFVFVSTl9BRERSRVNTX1JFR05VTSkKKwl7CisJICBpbmMgPSAoaSA8IENS MTZfRklSU1RfRFdPUkRfUkVHSVNURVIpID8gMSA6IDI7CisJICBpZiAod29y ZF9jbnQgKyBpbmMgPj0gTUFYX0NPVU5UIHx8IEZSQU1FX1BPSU5URVJfUkVH TlVNID09IGkpCisJICAgIHsKKwkgICAgICBzcGxpdF9oZXJlID0gMTsKKwkg ICAgICBmcm9tID0gaTsKKwkgICAgICBjb250aW51ZTsKKwkgICAgfQorCSAg d29yZF9jbnQgKz0gaW5jOworCX0KKworICAgICAgZnJvbSA9IGktLTsKKyAg ICB9CisKKyAgdG1wID0gZ2VuX3J0eF9TRVQgKFNJbW9kZSwgc3RhY2tfcG9p bnRlcl9ydHgsCisJCSAgICAgZ2VuX3J0eF9QTFVTIChTSW1vZGUsIHN0YWNr X3BvaW50ZXJfcnR4LAorCQkJCSAgIEdFTl9JTlQgKC1vZmZzZXQpKSk7Cisg IFJUWF9GUkFNRV9SRUxBVEVEX1AgKHRtcCkgPSAxOworICBYVkVDRVhQIChk d2FyZiwgMCwgMCkgPSB0bXA7CisgIFJFR19OT1RFUyAoaW5zbikgPSBnZW5f cnR4X0VYUFJfTElTVCAoU0ltb2RlLCBkd2FyZiwKKwkJCQkJUkVHX05PVEVT IChpbnNuKSk7Cit9CisKKy8qCitDb21wYWN0UklTQyBDUjE2IEFyY2hpdGVj dHVyZSBzdGFjayBsYXlvdXQ6CisKKyAgICAgMCArLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgICAgfAorICAgIC4KKyAgICAuCisgICAgfAorICAgICs9PT09 PT09PT09PT09PT09PT09PSBTcCAoeCkgPSBBcCAoeCsxKQorICAgICAgQSB8 IEFyZ3MgZm9yIGZ1bmN0aW9ucworICAgICAgfCB8IGNhbGxlZCBieSBYIGFu ZCAgICAgIER5bmFtaWNhbGx5CisgICAgICB8IHwgRHluYW1pYyBhbGxvY2F0 aW9ucyAgYWxsb2NhdGVkIGFuZAorICAgICAgfCB8IChhbGxvY2EsIHZhcmlh YmxlICAgIGRlYWxsb2NhdGVkCisgIFN0YWNrIHwgbGVuZ3RoIGFycmF5cyku CisgIGdyb3dzICstLS0tLS0tLS0tLS0tLS0tLS0tLSBGcCAoeCkKKyAgZG93 bnwgfCBMb2NhbCB2YXJpYWJsZXMgb2YgWAorICB3YXJkfCArLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAgICAgIHwgfCBSZWdzIHNhdmVkIGZvciBYLTEKKyAg ICAgIHwgKz09PT09PT09PT09PT09PT09PT09IFNwICh4LTEpID0gQXAgKHgp CisgICAgfCBBcmdzIGZvciBmdW5jIFgKKyAgICB8IHB1c2hlZCBieSBYLTEK KyAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnAgKHgtMSkKKyAgICB8Cisg ICAgfAorICAgIFYKKyovCit2b2lkCitjcjE2X2V4cGFuZF9wcm9sb2d1ZSAo dm9pZCkKK3sKKyAgcnR4IGluc247CisKKyAgY3IxNl9jb21wdXRlX2ZyYW1l ICgpOworICBjcjE2X2NvbXB1dGVfc2F2ZV9yZWdzICgpOworCisgIC8qIElm IHRoZXJlIGlzIG5vIG5lZWQgaW4gcHVzaCBhbmQgYWRqdXN0bWVudCB0byBz cCwgcmV0dXJuLiAgKi8KKyAgaWYgKChjdXJyZW50X2ZyYW1lX2luZm8udG90 YWxfc2l6ZSArIGN1cnJlbnRfZnJhbWVfaW5mby5yZWdfc2l6ZSkgPT0gMCkK KyAgICByZXR1cm47CisKKyAgaWYgKGN1cnJlbnRfZnJhbWVfaW5mby5sYXN0 X3JlZ190b19zYXZlICE9IC0xKQorICAgIHsKKyAgICAgIC8qIElmIHRoZXJl IGFyZSByZWdpc3RlcnMgdG8gcHVzaC4gICovCisgICAgICBpbnNuID0gZW1p dF9pbnNuIChnZW5fcHVzaF9mb3JfcHJvbG9ndWUKKwkJCShHRU5fSU5UIChj dXJyZW50X2ZyYW1lX2luZm8ucmVnX3NpemUpKSk7CisgICAgICBjcjE2X2Ny ZWF0ZV9kd2FyZl9mb3JfbXVsdGlfcHVzaCAoaW5zbik7CisgICAgICBSVFhf RlJBTUVfUkVMQVRFRF9QIChpbnNuKSA9IDE7CisgICAgfQorCisKKyAgaWYg KGN1cnJlbnRfZnJhbWVfaW5mby50b3RhbF9zaXplID4gMCkKKyAgICB7Cisg ICAgICBpbnNuID0gZW1pdF9pbnNuIChnZW5fYWRkc2kzIChzdGFja19wb2lu dGVyX3J0eCwgc3RhY2tfcG9pbnRlcl9ydHgsCisJCQkJICAgIEdFTl9JTlQg KC1jdXJyZW50X2ZyYW1lX2luZm8udG90YWxfc2l6ZSkpKTsKKyAgICAgIFJU WF9GUkFNRV9SRUxBVEVEX1AgKGluc24pID0gMTsKKyAgICB9CisKKyAgaWYg KGZyYW1lX3BvaW50ZXJfbmVlZGVkKQorICAgIHsKKyAgICAgIC8qIEluaXRp YWxpemUgdGhlIGZyYW1lIHBvaW50ZXIgd2l0aCB0aGUgdmFsdWUgb2YgdGhl IHN0YWNrIHBvaW50ZXIKKyAgICAgICAgIHBvaW50aW5nIG5vdyB0byB0aGUg bG9jYWxzLiAgKi8KKyAgICAgIGluc24gPSBlbWl0X21vdmVfaW5zbiAoZnJh bWVfcG9pbnRlcl9ydHgsIHN0YWNrX3BvaW50ZXJfcnR4KTsKKyAgICB9Cit9 CisKKy8qIEdlbmVyYXRlIGluc24gdGhhdCB1cGRhdGVzIHRoZSBzdGFjayBm b3IgbG9jYWwgdmFyaWFibGVzIGFuZCBwYWRkaW5nIAorICAgZm9yIHJlZ2lz dGVycyB3ZSBzYXZlLiAgIC0gR2VuZXJhdGUgdGhlIGFwcHJvcHJpYXRlIHJl dHVybiBpbnNuLiAgKi8KK3ZvaWQKK2NyMTZfZXhwYW5kX2VwaWxvZ3VlICh2 b2lkKQoreworICBydHggaW5zbjsKKworICAvKiBOb256ZXJvIGlmIHdlIG5l ZWQgdG8gcmV0dXJuIGFuZCBwb3Agb25seSBSQS4gVGhpcyB3aWxsIGdlbmVy YXRlIGEKKyAgICAgZGlmZmVyZW50IGluc24uIFRoaXMgZGlmZmVyZW50aWF0 ZSBpcyBmb3IgdGhlIHBlZXBob2xlcyBmb3IgY2FsbCBhcyAKKyAgICAgbGFz dCBzdGF0ZW1lbnQgaW4gZnVuY3Rpb24uICAqLworICBpbnQgb25seV9wb3By ZXRfUkEgPSAoY3VycmVudF9mcmFtZV9pbmZvLnNhdmVfcmVnc1tSRVRVUk5f QUREUkVTU19SRUdOVU1dCisJCQkmJiAoY3VycmVudF9mcmFtZV9pbmZvLnJl Z19zaXplIAorCQkJID09IENSMTZfVU5JVFNfUEVSX0RXT1JEKSk7CisgIAor ICBpZiAoZnJhbWVfcG9pbnRlcl9uZWVkZWQpCisgICAgeworICAgICAgLyog UmVzdG9yZSB0aGUgc3RhY2sgcG9pbnRlciB3aXRoIHRoZSBmcmFtZSBwb2lu dGVycyB2YWx1ZS4gICovCisgICAgICBpbnNuID0gZW1pdF9tb3ZlX2luc24g KHN0YWNrX3BvaW50ZXJfcnR4LCBmcmFtZV9wb2ludGVyX3J0eCk7CisgICAg fQorCisgIGlmIChjdXJyZW50X2ZyYW1lX2luZm8udG90YWxfc2l6ZSA+IDAp CisgICAgeworICAgICAgaW5zbiA9IGVtaXRfaW5zbiAoZ2VuX2FkZHNpMyAo c3RhY2tfcG9pbnRlcl9ydHgsIHN0YWNrX3BvaW50ZXJfcnR4LAorCQkJCSAg ICBHRU5fSU5UIChjdXJyZW50X2ZyYW1lX2luZm8udG90YWxfc2l6ZSkpKTsK KyAgICAgIFJUWF9GUkFNRV9SRUxBVEVEX1AgKGluc24pID0gMTsKKyAgICB9 CisKKyAgaWYgKGNydGwtPmNhbGxzX2VoX3JldHVybikKKyAgICB7CisgICAg ICAvKiBBZGQgdGhpcyBoZXJlIHNvIHRoYXQgKHI1LHI0KSBpcyBhY3R1YWxs eSBsb2FkZWQgd2l0aCB0aGUgYWRqdXN0bWVudAorICAgICAgICAgdmFsdWU7 IG90aGVyd2lzZSwgdGhlIGxvYWQgbWlnaHQgYmUgb3B0aW1pemVkIGF3YXku Li4KKyAgICAgICAgIE5PVEU6IHJlbWVtYmVyIHRvIHN1YnRyYWN0IHRoZSBh ZGp1c3RtZW50IGJlZm9yZSBwb3BwaW5nIHRoZSByZWdzCisgICAgICAgICBh bmQgYWRkIGl0IGJhY2sgYmVmb3JlIHJldHVybmluZy4gICovCisgICAgICBp bnNuID0gZW1pdF9pbnNuIChnZW5fYWRkc2kzIChzdGFja19wb2ludGVyX3J0 eCwgc3RhY2tfcG9pbnRlcl9ydHgsCisJCQkJICAgIEVIX1JFVFVSTl9TVEFD S0FESl9SVFgpKTsKKyAgICB9CisKKyAgaWYgKGNyMTZfaW50ZXJydXB0X2Z1 bmN0aW9uX3AgKCkpCisgICAgeworICAgICAgaW5zbiA9IGVtaXRfanVtcF9p bnNuIChnZW5faW50ZXJydXB0X3JldHVybiAoKSk7CisgICAgICBSVFhfRlJB TUVfUkVMQVRFRF9QIChpbnNuKSA9IDE7CisgICAgfQorICBlbHNlIGlmIChj cnRsLT5jYWxsc19laF9yZXR1cm4pCisgICAgeworICAgICAgLyogU3BlY2lh bCBjYXNlLCBwb3Agd2hhdCdzIG5lY2Vzc2FyeSwgYWRqdXN0IFNQIGFuZCBq dW1wIHRvIChSQSkuICAqLworICAgICAgaW5zbiA9IGVtaXRfanVtcF9pbnNu IChnZW5fcG9wX2FuZF9wb3ByZXRfcmV0dXJuIAorCQkJICAgICAoR0VOX0lO VCAoY3VycmVudF9mcmFtZV9pbmZvLnJlZ19zaXplKSkpOworICAgICAgUlRY X0ZSQU1FX1JFTEFURURfUCAoaW5zbikgPSAxOworICAgIH0KKyAgZWxzZSBp ZiAoY3VycmVudF9mcmFtZV9pbmZvLmxhc3RfcmVnX3RvX3NhdmUgPT0gLTEp CisgICAgLyogTm90aGluZyB0byBwb3AuICAqLworICAgIC8qIERvbid0IG91 dHB1dCBqdW1wIGZvciBpbnRlcnJ1cHQgcm91dGluZSwgb25seSByZXR4LiAg Ki8KKyAgICBlbWl0X2p1bXBfaW5zbiAoZ2VuX2p1bXBfcmV0dXJuICgpKTsK KyAgZWxzZSBpZiAob25seV9wb3ByZXRfUkEpCisgICAgeworICAgICAgaW5z biA9IGVtaXRfanVtcF9pbnNuIChnZW5fcG9wcmV0X1JBX3JldHVybiAoKSk7 CisgICAgICBSVFhfRlJBTUVfUkVMQVRFRF9QIChpbnNuKSA9IDE7CisgICAg fQorICBlbHNlCisgICAgeworICAgICAgaW5zbiA9IGVtaXRfanVtcF9pbnNu IChnZW5fcG9wX2FuZF9wb3ByZXRfcmV0dXJuIAorCQkJICAgICAoR0VOX0lO VCAoY3VycmVudF9mcmFtZV9pbmZvLnJlZ19zaXplKSkpOworICAgICAgUlRY X0ZSQU1FX1JFTEFURURfUCAoaW5zbikgPSAxOworICAgIH0KK30KKworLyog SW1wbGVtZW50cyBGUkFNRV9QT0lOVEVSX1JFUVVJUkVELiAgKi8KK3N0YXRp YyBib29sCitjcjE2X2ZyYW1lX3BvaW50ZXJfcmVxdWlyZWQgKHZvaWQpCit7 CisgIHJldHVybiAoY2Z1bi0+Y2FsbHNfYWxsb2NhIHx8IGNydGwtPmNhbGxz X2VoX3JldHVybgorCSAgfHwgY2Z1bi0+aGFzX25vbmxvY2FsX2xhYmVsIHx8 IGNydGwtPmNhbGxzX2VoX3JldHVybik7Cit9CisKK3N0YXRpYyBib29sCitj cjE2X2Nhbl9lbGltaW5hdGUgKGNvbnN0IGludCBmcm9tIEFUVFJJQlVURV9V TlVTRUQsIGNvbnN0IGludCB0bykKK3sKKyAgcmV0dXJuICh0byA9PSBTVEFD S19QT0lOVEVSX1JFR05VTSA/ICFmcmFtZV9wb2ludGVyX25lZWRlZCA6IHRy dWUpOworfQorCisKKy8qIEEgQyBjb21wb3VuZCBzdGF0ZW1lbnQgdGhhdCBh dHRlbXB0cyB0byByZXBsYWNlIFggd2l0aAorICAgYSB2YWxpZCBtZW1vcnkg YWRkcmVzcyBmb3IgYW4gb3BlcmFuZCBvZiBtb2RlIE1PREUuIFdJTgorICAg d2lsbCBiZSBhIEMgc3RhdGVtZW50IGxhYmVsIGVsc2V3aGVyZSBpbiB0aGUg Y29kZS4KKyAgIFggd2lsbCBhbHdheXMgYmUgdGhlIHJlc3VsdCBvZiBhIGNh bGwgdG8gYnJlYWtfb3V0X21lbW9yeV9yZWZzICgpLAorICAgYW5kIE9MRFgg d2lsbCBiZSB0aGUgb3BlcmFuZCB0aGF0IHdhcyBnaXZlbiB0byB0aGF0IGZ1 bmN0aW9uIHRvCisgICBwcm9kdWNlIFguCisgICBUaGUgY29kZSBnZW5lcmF0 ZWQgYnkgdGhpcyBtYWNybyBzaG91bGQgbm90IGFsdGVyIHRoZQorICAgc3Vi c3RydWN0dXJlIG9mIFguICBJZiBpdCB0cmFuc2Zvcm1zIFggaW50byBhIG1v cmUgbGVnaXRpbWF0ZSBmb3JtLCAKKyAgIGl0IHNob3VsZCBhc3NpZ24gWCAo d2hpY2ggd2lsbCBhbHdheXMgYmUgYSBDIHZhcmlhYmxlKSBhIG5ldyB2YWx1 ZS4gICovCitzdGF0aWMgcnR4CitjcjE2X2xlZ2l0aW1pemVfYWRkcmVzcyAo cnR4IHgsIHJ0eCBvcmlnX3ggQVRUUklCVVRFX1VOVVNFRCwKKwkJCSBlbnVt IG1hY2hpbmVfbW9kZSBtb2RlIEFUVFJJQlVURV9VTlVTRUQpCit7CisgIGlm IChmbGFnX3BpYykKKyAgICByZXR1cm4gbGVnaXRpbWl6ZV9waWNfYWRkcmVz cyAob3JpZ194LCBtb2RlLCBOVUxMX1JUWCk7CisgIGVsc2UKKyAgICByZXR1 cm4geDsKK30KKworLyogSW1wbGVtZW50IFRBUkdFVF9MRUdJVElNQVRFX0NP TlNUQU5UX1AKKyAgIE5vbnplcm8gaWYgWCBpcyBhIGxlZ2l0aW1hdGUgY29u c3RhbnQgZm9yIGFuIGltbWVkaWF0ZQorICAgb3BlcmFuZCBvbiB0aGUgdGFy Z2V0IG1hY2hpbmUuICBZb3UgY2FuIGFzc3VtZSB0aGF0IFgKKyAgIHNhdGlz ZmllcyBDT05TVEFOVF9QLiBJbiBjcjE2YyB0cmVhdCBsZWdpdGltaXplIGZs b2F0IAorICAgY29uc3RhbnQgYXMgYW4gaW1tZWRpYXRlIG9wZXJhbmQuICAq Lworc3RhdGljIGJvb2wKK2NyMTZfbGVnaXRpbWF0ZV9jb25zdGFudF9wIChl bnVtIG1hY2hpbmVfbW9kZSBtb2RlIEFUVFJJQlVURV9VTlVTRUQsCisJCQkg ICAgcnR4IHggQVRUUklCVVRFX1VOVVNFRCkKK3sKKyAgcmV0dXJuIDE7Cit9 CisKK3ZvaWQKK25vdGljZV91cGRhdGVfY2MgKHJ0eCBleHApCit7CisgIGlm IChHRVRfQ09ERSAoZXhwKSA9PSBTRVQpCisgICAgeworICAgICAgLyogSnVt cHMgZG8gbm90IGFsdGVyIHRoZSBjYydzLiAgKi8KKyAgICAgIGlmIChTRVRf REVTVCAoZXhwKSA9PSBwY19ydHgpCisJcmV0dXJuOworCisgICAgICAvKiBN b3ZpbmcgcmVnaXN0ZXIgb3IgbWVtb3J5IGludG8gYSByZWdpc3RlcjoKKyAg ICAgICAgIGl0IGRvZXNuJ3QgYWx0ZXIgdGhlIGNjJ3MsIGJ1dCBpdCBtaWdo dCBpbnZhbGlkYXRlCisgICAgICAgICB0aGUgUlRYJ3Mgd2hpY2ggd2UgcmVt ZW1iZXIgdGhlIGNjJ3MgY2FtZSBmcm9tLgorICAgICAgICAgKE5vdGUgdGhh dCBtb3ZpbmcgYSBjb25zdGFudCAwIG9yIDEgTUFZIHNldCB0aGUgY2Mncyku ICAqLworICAgICAgaWYgKFJFR19QIChTRVRfREVTVCAoZXhwKSkKKwkgICYm IChSRUdfUCAoU0VUX1NSQyAoZXhwKSkgfHwgR0VUX0NPREUgKFNFVF9TUkMg KGV4cCkpID09IE1FTSkpCisJeworCSAgcmV0dXJuOworCX0KKworICAgICAg LyogTW92aW5nIHJlZ2lzdGVyIGludG8gbWVtb3J5IGRvZXNuJ3QgYWx0ZXIg dGhlIGNjJ3MuCisgICAgICAgICBJdCBtYXkgaW52YWxpZGF0ZSB0aGUgUlRY J3Mgd2hpY2ggd2UgcmVtZW1iZXIgdGhlIGNjJ3MgY2FtZSBmcm9tLiAgKi8K KyAgICAgIGlmIChHRVRfQ09ERSAoU0VUX0RFU1QgKGV4cCkpID09IE1FTSAm JiBSRUdfUCAoU0VUX1NSQyAoZXhwKSkpCisJeworCSAgcmV0dXJuOworCX0K KworICAgIH0KKworICBDQ19TVEFUVVNfSU5JVDsKKyAgcmV0dXJuOworfQor CitzdGF0aWMgZW51bSBtYWNoaW5lX21vZGUKK2NyMTZfdW53aW5kX3dvcmRf bW9kZSAodm9pZCkKK3sKKyAgcmV0dXJuIFNJbW9kZTsKK30KKworLyogSGVs cGVyIGZ1bmN0aW9uIGZvciBtZCBmaWxlLiBUaGlzIGZ1bmN0aW9uIGlzIHVz ZWQgdG8gZW1pdCBhcml0aG1ldGljIAorICAgREkgaW5zdHJ1Y3Rpb25zLiBU aGUgYXJndW1lbnQgIm51bSIgZGVjaWRlcyB3aGljaCBpbnN0cnVjdGlvbiB0 byBiZQorICAgcHJpbnRlZC4gICovCitjb25zdCBjaGFyICoKK2NyMTZfZW1p dF9hZGRfc3ViX2RpIChydHggKm9wZXJhbmRzLCBpbnQgbnVtKQoreworCisg IHJ0eCBsb19vcFsyXSA7CisgIHJ0eCBoaTBfb3BbMl0gOworICBydHggaGkx X29wWzJdIDsKKworICBsb19vcFswXSA9IGdlbl9sb3dwYXJ0IChTSW1vZGUs IG9wZXJhbmRzWzBdKTsKKyAgaGkwX29wWzBdID0gc2ltcGxpZnlfZ2VuX3N1 YnJlZyAoSEltb2RlLCBvcGVyYW5kc1swXSwgREltb2RlLCA0KTsKKyAgaGkx X29wWzBdID0gc2ltcGxpZnlfZ2VuX3N1YnJlZyAoSEltb2RlLCBvcGVyYW5k c1swXSwgREltb2RlLCA2KTsKKworICBsb19vcFsxXSA9IGdlbl9sb3dwYXJ0 IChTSW1vZGUsIG9wZXJhbmRzWzJdKTsKKyAgaGkwX29wWzFdID0gc2ltcGxp ZnlfZ2VuX3N1YnJlZyAoSEltb2RlLCBvcGVyYW5kc1syXSwgREltb2RlLCA0 KTsKKyAgaGkxX29wWzFdID0gc2ltcGxpZnlfZ2VuX3N1YnJlZyAoSEltb2Rl LCBvcGVyYW5kc1syXSwgREltb2RlLCA2KTsKKworICBpZiAobnVtID09IDAp CisgICAgeworICAgICAgICBvdXRwdXRfYXNtX2luc24gKCJhZGRkXHQlMSwg JTAiLCBsb19vcCkgOworICAgICAgICBvdXRwdXRfYXNtX2luc24gKCJhZGRj d1x0JTEsICUwIiwgaGkwX29wKSA7CisgICAgICAgIG91dHB1dF9hc21faW5z biAoImFkZGN3XHQlMSwgJTAiLCBoaTFfb3ApIDsKKyAgICAgICAgcmV0dXJu ICIiOworICAgIH0KKyAgZWxzZSBpZiAobnVtID09IDEpCisgICAgeworICAg ICAgICBvdXRwdXRfYXNtX2luc24gKCJzdWJkXHQlMSwgJTAiLCBsb19vcCkg OworICAgICAgICBvdXRwdXRfYXNtX2luc24gKCJzdWJjd1x0JTEsICUwIiwg aGkwX29wKSA7CisgICAgICAgIG91dHB1dF9hc21faW5zbiAoInN1YmN3XHQl MSwgJTAiLCBoaTFfb3ApIDsKKyAgICAgICAgcmV0dXJuICIiOworICAgIH0K KyAgZWxzZQorICAgIHJldHVybiAiIjsKKworfQorCisKKy8qIEhlbHBlciBm dW5jdGlvbiBmb3IgbWQgZmlsZS4gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRv IGVtaXQgbG9naWNhbCAKKyAgIERJIGluc3RydWN0aW9ucy4gVGhlIGFyZ3Vt ZW50ICJudW0iIGRlY2lkZXMgd2hpY2ggaW5zdHJ1Y3Rpb24gdG8gYmUKKyAg IHByaW50ZWQuICAqLworY29uc3QgY2hhciAqCitjcjE2X2VtaXRfbG9naWNh bF9kaSAocnR4ICpvcGVyYW5kcywgaW50IG51bSkKK3sKKworICBydHggbG9f b3BbMl0gOworICBydHggaGlfb3BbMl0gOworCisgIGxvX29wWzBdID0gZ2Vu X2xvd3BhcnQgKFNJbW9kZSwgb3BlcmFuZHNbMF0pOworICBoaV9vcFswXSA9 IHNpbXBsaWZ5X2dlbl9zdWJyZWcgKFNJbW9kZSwgb3BlcmFuZHNbMF0sIERJ bW9kZSwgNCk7CisKKyAgbG9fb3BbMV0gPSBnZW5fbG93cGFydCAoU0ltb2Rl LCBvcGVyYW5kc1syXSk7CisgIGhpX29wWzFdID0gc2ltcGxpZnlfZ2VuX3N1 YnJlZyAoU0ltb2RlLCBvcGVyYW5kc1syXSwgREltb2RlLCA0KTsKKyAgaWYg KG51bSA9PSAwKQorICAgIHsKKyAgICAgICAgb3V0cHV0X2FzbV9pbnNuICgi YW5kZFx0JTEsICUwIiwgbG9fb3ApIDsKKyAgICAgICAgb3V0cHV0X2FzbV9p bnNuICgiYW5kZFx0JTEsICUwIiwgaGlfb3ApIDsKKyAgICAgICAgcmV0dXJu ICIiOworICAgIH0KKyAgZWxzZSBpZiAobnVtID09IDEpCisgICAgeworICAg ICAgICBvdXRwdXRfYXNtX2luc24gKCJvcmRcdCUxLCAlMCIsIGxvX29wKSA7 CisgICAgICAgIG91dHB1dF9hc21faW5zbiAoIm9yZFx0JTEsICUwIiwgaGlf b3ApIDsKKyAgICAgICAgcmV0dXJuICIiOworICAgIH0KKyAgZWxzZSBpZiAo bnVtID09IDIpCisgICAgeworICAgICAgICBvdXRwdXRfYXNtX2luc24gKCJ4 b3JkXHQlMSwgJTAiLCBsb19vcCkgOworICAgICAgICBvdXRwdXRfYXNtX2lu c24gKCJ4b3JkXHQlMSwgJTAiLCBoaV9vcCkgOworICAgICAgICByZXR1cm4g IiI7CisgICAgfQorICBlbHNlCisgICAgcmV0dXJuICIiOworfQorCisvKiBJ bml0aWFsaXplICd0YXJnZXRtJyB2YXJpYWJsZSB3aGljaCBjb250YWlucyBw b2ludGVycyB0byBmdW5jdGlvbnMgCisgICBhbmQgZGF0YSByZWxhdGluZyB0 byB0aGUgdGFyZ2V0IG1hY2hpbmUuICAqLworCitzdHJ1Y3QgZ2NjX3Rhcmdl dCB0YXJnZXRtID0gVEFSR0VUX0lOSVRJQUxJWkVSOwotLS0gb3JpZy9nY2Mv Y29uZmlnL2NyMTYvY3IxNi5oCTE5NzAtMDEtMDEgMDU6MzA6MDAuMDAwMDAw MDAwICswNTMwCisrKyBtb2QvZ2NjL2NvbmZpZy9jcjE2L2NyMTYuaAkyMDEx LTA2LTI4IDEyOjM0OjM0LjAwMDAwMDAwMCArMDUzMApAQCAtMCwwICsxLDU5 MSBAQAorLyogRGVmaW5pdGlvbnMgb2YgdGFyZ2V0IG1hY2hpbmUgZm9yIEdO VSBjb21waWxlciwgZm9yIENSMTYuCisgICBDb3B5cmlnaHQgKEMpIDIwMTEg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBDb250cmlidXRl ZCBieSBLUElUIEN1bW1pbnMgSW5mb3N5c3RlbXMgTGltaXRlZC4KKworICAg VGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCisgICBHQ0MgaXMgZnJlZSBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlm eSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyAgIGJ5IHRoZSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5 b3VyCisgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBHQ0Mg aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz ZWZ1bCwgYnV0IFdJVEhPVVQKKyAgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQor ICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBmb3IgbW9yZSBk ZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5 IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcg d2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUK KyAgIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisgICAK KyNpZm5kZWYgR0NDX0NSMTZfSAorI2RlZmluZSBHQ0NfQ1IxNl9ICisKKyNk ZWZpbmUgT0JKRUNUX0ZPUk1BVF9FTEYKKworLyogQ29udHJvbGxpbmcgdGhl IGRyaXZlci4gICovCisKKy8qIFRoZSBHTlUgQysrIHN0YW5kYXJkIGxpYnJh cnkgcmVxdWlyZXMgdGhhdCB0aGVzZSBtYWNyb3MgYmUgZGVmaW5lZC4gICov CisjdW5kZWYgQ1BMVVNQTFVTX0NQUF9TUEVDCisjZGVmaW5lIENQTFVTUExV U19DUFBfU1BFQyAiLURfR05VX1NPVVJDRSAlKGNwcCkiCisKKyN1bmRlZiAg U1RBUlRGSUxFX1NQRUMKKyNkZWZpbmUgU1RBUlRGSUxFX1NQRUMgImNydDEu byVzIGNydGkubyVzIGNydGJlZ2luLm8lcyBjcnRsaWJpZC5vJXMiCisKKyN1 bmRlZiAgRU5ERklMRV9TUEVDCisjZGVmaW5lIEVOREZJTEVfU1BFQyAiY3J0 ZW5kLm8lcyBjcnRuLm8lcyIKKworI3VuZGVmICBNQVRIX0xJQlJBUlkKKyNk ZWZpbmUgTUFUSF9MSUJSQVJZICIiCisKKyN1bmRlZiAgTElCX1NQRUMKKyNk ZWZpbmUgTElCX1NQRUMgIi0oIC1sYyAle21zaW0qOi1sc2ltfSV7IW1zaW0q Oi1sbm9zeXN9IC0pIFwKKyV7bXNpbSo6JXshVCo6LVRzaW0ubGR9fSBcCisl eyFUKjoleyFtc2ltKjogJXstVGVsZjMyY3IxNi54fX19ICIKKworLyogUnVu LXRpbWUgdGFyZ2V0IHNwZWNpZmljYXRpb24uICAqLworI2lmbmRlZiBUQVJH RVRfQ1BVX0NQUF9CVUlMVElOUworI2RlZmluZSBUQVJHRVRfQ1BVX0NQUF9C VUlMVElOUygpICAgICAgICAgIFwKK2RvICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisgIHsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorICAgIGJ1aWx0aW5fZGVmaW5lICgi X19DUl9fIik7ICAgICAgICAgICAgIFwKKyAgICBidWlsdGluX2RlZmluZSAo Il9fQ1IxNl9fIik7ICAgICAgICAgICBcCisgICAgYnVpbHRpbl9kZWZpbmUg KCJfX0NSMTZDX18iKTsgICAgICAgICAgXAorICAgIGlmIChUQVJHRVRfQ1Ix NkNQKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGJ1aWx0aW5fZGVm aW5lICgiX19DUjE2Q1BfXyIpOyAgICAgICBcCisgICAgZWxzZSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgYnVpbHRpbl9k ZWZpbmUgKCJfX0NSMTZDU1REX18iKTsgICAgIFwKKyAgICBpZiAoQ1IxNl9U QVJHRVRfREFUQV9ORUFSKSAgICAgICAgICAgICBcCisgICAgICBidWlsdGlu X2RlZmluZSAoIl9fREFUQV9ORUFSX18iKTsgICAgXAorICAgIGlmIChDUjE2 X1RBUkdFVF9EQVRBX01FRElVTSkgICAgICAgICAgIFwKKyAgICAgIGJ1aWx0 aW5fZGVmaW5lICgiX19EQVRBX01FRElVTV9fIik7ICBcCisgICAgaWYgKENS MTZfVEFSR0VUX0RBVEFfRkFSKSAgICAgICAgICAgICAgXAorICAgICAgYnVp bHRpbl9kZWZpbmUgKCJfX0RBVEFfRkFSX18iKTsgICAgIFwKKyAgICBpZiAo VEFSR0VUX0lOVDMyKSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBi dWlsdGluX2RlZmluZSAoIl9fSU5UMzJfXyIpOyAgICAgICAgIFwKKyAgfSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit3aGls ZSAoMCkKKyNlbmRpZgorCisvKiBGb3JjZSB0aGUgZ2VuZXJhdGlvbiBvZiBk d2FyZiAuZGVidWdfZnJhbWUgc2VjdGlvbnMgZXZlbiBpZiBub3QKKyAgIGNv bXBpbGluZyAtZy4gIFRoaXMgZ3VhcmFudGVlcyB0aGF0IHdlIGNhbiB1bndp bmQgdGhlIHN0YWNrLiAgKi8KKyNkZWZpbmUgRFdBUkYyX0ZSQU1FX0lORk8g MQorCisjZGVmaW5lIFBSRUZFUlJFRF9ERUJVR0dJTkdfVFlQRSBEV0FSRjJf REVCVUcKKworLyogR2VuZXJhdGUgLmZpbGUvLmxvYyBkaXJlY3RpdmVzLCBz byB0aGF0IHRoZSBhc3NlbWJsZXIgZ2VuZXJhdGVzIHRoZQorICAgbGluZSB0 YWJsZS4gICovCisjZGVmaW5lIERXQVJGMl9BU01fTElORV9ERUJVR19JTkZP IDEKKworI2RlZmluZSBDUjE2X1RBUkdFVF9EQVRBX05FQVIgICBjcjE2X2lz X2RhdGFfbW9kZWwgKERNX05FQVIpCisjZGVmaW5lIENSMTZfVEFSR0VUX0RB VEFfTUVESVVNIGNyMTZfaXNfZGF0YV9tb2RlbCAoRE1fREVGQVVMVCkKKyNk ZWZpbmUgQ1IxNl9UQVJHRVRfREFUQV9GQVIgICAgY3IxNl9pc19kYXRhX21v ZGVsIChETV9GQVIpCisKKy8qIFN0b3JhZ2UgbGF5b3V0LiAgKi8KKyNkZWZp bmUgQklUU19CSUdfRU5ESUFOICAgICAwCisKKyNkZWZpbmUgQllURVNfQklH X0VORElBTiAgICAwCisKKyNkZWZpbmUgV09SRFNfQklHX0VORElBTiAgICAw CisKKyNkZWZpbmUgVU5JVFNfUEVSX1dPUkQgICAgICAyCisKKy8qIFVuaXRz IHBlciAzMi1iaXQgKERXT1JEKS4gICovCisjZGVmaW5lIENSMTZfVU5JVFNf UEVSX0RXT1JEIDQKKworI2RlZmluZSBQT0lOVEVSX1NJWkUgICAgICAgIDMy CisKKyNkZWZpbmUgUEFSTV9CT1VOREFSWSAgICAgICAxNgorCisjZGVmaW5l IFNUQUNLX0JPVU5EQVJZICAgICAgKE1BWCAoQklHR0VTVF9BTElHTk1FTlQs IFBBUk1fQk9VTkRBUlkpKQorCisjZGVmaW5lIEZVTkNUSU9OX0JPVU5EQVJZ ICAoIW9wdGltaXplX3NpemUgPyBCSUdHRVNUX0FMSUdOTUVOVCA6IEJJVFNf UEVSX1dPUkQpCisKKy8qIEJpZ2dlc3QgYWxpZ25tZW50IG9uIENSMTZDKyBp cyAzMi1iaXQgYXMgaW50ZXJuYWwgYnVzIGlzIEFNQkEgYmFzZWQgCisgICB3 aGVyZSBhcyBDUjE2QyBpcyBwcm9wcmlldGFyeSBpbnRlcm5hbCBidXMgYXJj aGl0ZWN0dXJlLiAgKi8KKyNkZWZpbmUgQklHR0VTVF9BTElHTk1FTlQgICAo KFRBUkdFVF9DUjE2Q1ApID8gMzIgOiAxNikKKworI2RlZmluZSBNQVhfRklY RURfTU9ERV9TSVpFIDY0CisKKy8qIEluIENSMTYgYXJyYXlzIG9mIGNoYXJz IGFyZSB3b3JkLWFsaWduZWQsIHNvIHN0cmNweSAoKSB3aWxsIGJlIGZhc3Rl ci4gICovCisjZGVmaW5lIERBVEFfQUxJR05NRU5UKFRZUEUsIEFMSUdOKSAg ICAgICAgICAgICBcCisgICgoKFRSRUVfQ09ERSAoVFlQRSkgPT0gQVJSQVlf VFlQRSkgICAgICAgICAgICBcCisgICAgICYmIChUWVBFX01PREUgKFRSRUVf VFlQRSAoVFlQRSkpID09IFFJbW9kZSkgXAorICAgICAmJiAoKEFMSUdOKSA8 IEJJVFNfUEVSX1dPUkQpKSAgICAgICAgICAgICAgIFwKKyAgICAgPyAoQklU U19QRVJfV09SRCkgOiAoQUxJR04pKQorCisvKiBJbiBDUjE2IHN0cmluZ3Mg YXJlIHdvcmQtYWxpZ25lOyBzdHJjcHkgZnJvbSBjb25zdGFudHMgd2lsbCBi ZSBmYXN0ZXIuICAqLworI2RlZmluZSBDT05TVEFOVF9BTElHTk1FTlQoQ09O U1RBTlQsIEFMSUdOKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg ICgoKFRSRUVfQ09ERSAoQ09OU1RBTlQpID09IFNUUklOR19DU1QpICYmICgo QUxJR04pIDwgQklUU19QRVJfV09SRCkpIFwKKyAgICAgPyAoQklUU19QRVJf V09SRCkgOiAoQUxJR04pKQorCisjZGVmaW5lIFNUUklDVF9BTElHTk1FTlQg MAorCisjZGVmaW5lIFBDQ19CSVRGSUVMRF9UWVBFX01BVFRFUlMgMQorCisv KiBMYXlvdXQgb2Ygc291cmNlIGxhbmd1YWdlIGRhdGEgdHlwZXMuICAqLwor I2RlZmluZSBJTlRfVFlQRV9TSVpFICAgICAgIChUQVJHRVRfSU5UMzIgPyAz MiA6IDE2KQorCisjZGVmaW5lIFNIT1JUX1RZUEVfU0laRSAgICAgMTYKKwor I2RlZmluZSBMT05HX1RZUEVfU0laRSAgICAgIDMyCisKKyNkZWZpbmUgTE9O R19MT05HX1RZUEVfU0laRSA2NAorCisjZGVmaW5lIEZMT0FUX1RZUEVfU0la RSAgICAgMzIKKworI2RlZmluZSBET1VCTEVfVFlQRV9TSVpFICAgIDY0CisK KyNkZWZpbmUgTE9OR19ET1VCTEVfVFlQRV9TSVpFIDY0CisKKyNkZWZpbmUg REVGQVVMVF9TSUdORURfQ0hBUiAxCisKKyNkZWZpbmUgU0laRV9UWVBFICAg ICAgICAgICAibG9uZyB1bnNpZ25lZCBpbnQiCisKKyNkZWZpbmUgUFRSRElG Rl9UWVBFICAgICAgICAibG9uZyBpbnQiCisKKyNkZWZpbmUgV0NIQVJfVFlQ RSAgICAgICAgICAic2hvcnQgdW5zaWduZWQgaW50IgorCisjZGVmaW5lIFdD SEFSX1RZUEVfU0laRSAgICAgMTYKKworLyogQnkgZGVmYXVsdCwgdGhlIEMr KyBjb21waWxlciB3aWxsIHVzZSB0aGUgbG93ZXN0IGJpdCBvZiB0aGUgcG9p bnRlcgorICAgdG8gZnVuY3Rpb24gdG8gaW5kaWNhdGUgYSBwb2ludGVyLXRv LW1lbWJlci1mdW5jdGlvbiBwb2ludHMgdG8gYQorICAgdmlydHVhbCBtZW1i ZXIgZnVuY3Rpb24uICBIb3dldmVyLCBpbiBDUiBhcmNoaXRlY3R1cmUgRlVO Q1RJT05fQk9VTkRBUlkKKyAgIGluZGljYXRlcyBmdW5jdGlvbiBhZGRyZXNz ZXMgYXJlIGFsd2F5cyBldmVuLCBidXQgZnVuY3Rpb24gcG9pbnRlcnMgY2Fu IGJlCisgICBvZGQgKGFmdGVyIHJpZ2h0LXNoaWZ0aW5nIHRoZW0gd2hlbiBs b2FkaW5nIHRoZW0gaW50byBhIHJlZ2lzdGVyKSwgYW5kIHRoZQorICAgZGVm YXVsdCBkb2Vzbid0IHdvcmsuICBJbiB0aGF0IGNhc2UsIHRoZSBsb3dlc3Qg Yml0IG9mIHRoZSBkZWx0YQorICAgZmllbGQgd2lsbCBiZSB1c2VkICh0aGUg cmVtYWluZGVyIG9mIHRoZSBmaWVsZCBpcyBzaGlmdGVkIHRvIHRoZSBsZWZ0 KS4gICovCisjZGVmaW5lIFRBUkdFVF9QVFJNRU1GVU5DX1ZCSVRfTE9DQVRJ T04gICAgIHB0cm1lbWZ1bmNfdmJpdF9pbl9kZWx0YQorCisvKiBEZWZpbmUg REVGQVVMVF9QQ0NfU1RSVUNUX1JFVFVSTiB0byAxIGlmIGFsbCBzdHJ1Y3R1 cmUgYW5kIHVuaW9uIHJldHVybgorICAgdmFsdWVzIG11c3QgYmUgaW4gbWVt b3J5LiAgKi8KKyNkZWZpbmUgREVGQVVMVF9QQ0NfU1RSVUNUX1JFVFVSTiAw CisKKy8qIFJlZ2lzdGVyIHVzYWdlLiAgKi8KKworLyogRmlyc3QgMzItYml0 IHJlZ2lzdGVyIGlzIFIxMi4gICovCisjZGVmaW5lIENSMTZfRklSU1RfRFdP UkRfUkVHSVNURVIgICAxMgorCisjZGVmaW5lIEZJUlNUX1BTRVVET19SRUdJ U1RFUiAgICAgICAxNgorCisvKiAxIGZvciByZWdpc3RlcnMgdGhhdCBoYXZl IHBlcnZhc2l2ZSBzdGFuZGFyZCB1c2VzCisgICBhbmQgYXJlIG5vdCBhdmFp bGFibGUgZm9yIHRoZSByZWdpc3RlciBhbGxvY2F0b3IuCisgICBPbiB0aGUg Q1IxNiwgb25seSB0aGUgc3RhY2sgcG9pbnRlciAocjE1KSBpcyBzdWNoLiAg Ki8KKyNkZWZpbmUgRklYRURfUkVHSVNURVJTICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKyAgeyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgLyogcjAgIHIxICByMiAg cjMgIHI0ICByNSAgcjYgIHI3ICByOCAgcjkgIHIxMC4gICovIFwKKyAgICAw LCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgICAg ICAgIFwKKyAgLyogcjExIHIxMiByMTMgcmEgIHNwLiAgKi8gICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKyAgICAwLCAgMCwgIDAsICAwLCAgMSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfSAgICAgIAorCisv KiAxIGZvciByZWdpc3RlcnMgbm90IGF2YWlsYWJsZSBhY3Jvc3MgZnVuY3Rp b24gY2FsbHMuCisgICBUaGVzZSBtdXN0IGluY2x1ZGUgdGhlIEZJWEVEX1JF R0lTVEVSUyBhbmQgYWxzbyBhbnkKKyAgIHJlZ2lzdGVycyB0aGF0IGNhbiBi ZSB1c2VkIHdpdGhvdXQgYmVpbmcgc2F2ZWQuCisgICBUaGUgbGF0dGVyIG11 c3QgaW5jbHVkZSB0aGUgcmVnaXN0ZXJzIHdoZXJlIHZhbHVlcyBhcmUgcmV0 dXJuZWQKKyAgIGFuZCB0aGUgcmVnaXN0ZXIgd2hlcmUgc3RydWN0dXJlLXZh bHVlIGFkZHJlc3NlcyBhcmUgcGFzc2VkLgorIAorICAgT24gdGhlIENSMTYs IGNhbGxzIGNsb2JiZXJzIHIwLXI2IChzY3JhdGNoIHJlZ2lzdGVycyksIAor ICAgcmEgKHRoZSByZXR1cm4gYWRkcmVzcykgYW5kIHNwICh0aGUgc3RhY2sg cG9pbnRlcikuICAqLworI2RlZmluZSBDQUxMX1VTRURfUkVHSVNURVJTICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAvKiBy MCAgcjEgIHIyICByMyAgcjQgIHI1ICByNiAgcjcgIHI4ICByOSAgcjEwLiAg Ki8gXAorICAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwg IDAsICAwLCAgICAgICAgXAorICAvKiByMTEgcjEyIHIxMyByYSAgc3AuICAq LyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIDAsICAwLCAgMCwg IDEsICAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9 CisKKy8qIFJldHVybnMgMSBpZiB0aGUgcmVnaXN0ZXIgaXMgbG9uZ2VyIHRo YW4gd29yZCBzaXplLCAwIG90aGVyd2lzZS4gICovCisjZGVmaW5lIExPTkdf UkVHX1AoUkVHTk8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKyAgKEhBUkRfUkVHTk9fTlJFR1MgKFJF R05PLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorICAJCSAgICAgR0VUX01PREVfV0lERVJfTU9ERSAoc21h bGxlc3RfbW9kZV9mb3Jfc2l6ZQkgICAgIFwKKyAgCQkJCQkgIChCSVRTX1BF Ul9XT1JELCBNT0RFX0lOVCkpKSAgICAgICAgXAorICAgCQkgICAgICA9PSAx KQorCisjZGVmaW5lIEhBUkRfUkVHTk9fTlJFR1MoUkVHTk8sIE1PREUpICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAoKFJF R05PID49IENSMTZfRklSU1RfRFdPUkRfUkVHSVNURVIpICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICA/ICgoR0VUX01PREVf U0laRSAoTU9ERSkgKyBDUjE2X1VOSVRTX1BFUl9EV09SRCAtIDEpIC8gQ1Ix Nl9VTklUU19QRVJfRFdPUkQpXAorICA6ICgoR0VUX01PREVfU0laRSAoTU9E RSkgKyBVTklUU19QRVJfV09SRCAgICAgICAtIDEpIC8gVU5JVFNfUEVSX1dP UkQpKQorCisvKiBOb256ZXJvIGlmIGl0IGlzIHBlcm1pc3NpYmxlIHRvIHN0 b3JlIGEgdmFsdWUgb2YgbW9kZSBAdmFye21vZGV9IGluIGhhcmQKKyAgIHJl Z2lzdGVyIG51bWJlciBAdmFye3JlZ25vfSAob3IgaW4gc2V2ZXJhbCByZWdp c3RlcnMgc3RhcnRpbmcgd2l0aCB0aGF0CisgICBvbmUpLiAgT24gdGhlIENS MTYgYXJjaGl0ZWN0dXJlLCBhbGwgcmVnaXN0ZXJzIGNhbiBob2xkIGFsbCBt b2RlcywKKyAgIGV4Y2VwdCB0aGF0IGRvdWJsZSBwcmVjaXNpb24gZmxvYXRz IChhbmQgZG91YmxlIGludHMpIG11c3QgZmFsbCBvbgorICAgZXZlbi1yZWdp c3RlciBib3VuZGFyaWVzLiAgKi8gCisjZGVmaW5lIEhBUkRfUkVHTk9fTU9E RV9PSyhSRUdOTywgTU9ERSkgY3IxNl9oYXJkX3JlZ25vX21vZGVfb2sgKFJF R05PLCBNT0RFKQorCisjZGVmaW5lIE5PVElDRV9VUERBVEVfQ0MoRVhQLCBJ TlNOKSBcCisgICBub3RpY2VfdXBkYXRlX2NjICgoRVhQKSkKKworLyogSW50 ZXJydXB0IGZ1bmN0aW9ucyBjYW4gb25seSB1c2UgcmVnaXN0ZXJzIHRoYXQg aGF2ZSBhbHJlYWR5IGJlZW4gCisgICBzYXZlZCBieSB0aGUgcHJvbG9ndWUs IGV2ZW4gaWYgdGhleSB3b3VsZCBub3JtYWxseSBiZSBjYWxsLWNsb2JiZXJl ZCAKKyAgIENoZWNrIGlmIHNpemVzIGFyZSBzYW1lIGFuZCB0aGVuIGNoZWNr IGlmIGl0IGlzIHBvc3NpYmxlIHRvIHJlbmFtZS4gICovCisjZGVmaW5lIEhB UkRfUkVHTk9fUkVOQU1FX09LKFNSQywgREVTVCkgICAgICAgICAgICAgICAg IFwKKyAgKCFjcjE2X2ludGVycnVwdF9mdW5jdGlvbl9wICgpIHx8IChkZl9y ZWdzX2V2ZXJfbGl2ZV9wIChERVNUKSkpCisKKy8qIEV4Y2VwdGlvbiBoYW5k bGluZyBzdHVmZi4gICovCisKKy8qVG8gZW5zdXJlIGNvcnJlY3QgZHdhcmYg dW53aW5kaW5nLiAgKi8KKyNkZWZpbmUgTElCR0NDMl9VTldJTkRfQVRUUklC VVRFIF9fYXR0cmlidXRlX18oKG9wdGltaXplICgibm8tZ2NzZSIsIm5vLWRz ZSIpKSkKKworI2RlZmluZSBnZW5fcnR4X1JBCWdlbl9ydHhfUkVHIChQbW9k ZSwgUkVUVVJOX0FERFJFU1NfUkVHTlVNKQorCisvKiBVc2UgKHI4LHI3KSBh bmQgKHIxMCxyOSkgdG8gcGFzcyBleGNlcHRpb24gaGFuZGxpbmcgaW5mb3Jt YXRpb24uICAqLworI2RlZmluZSBFSF9SRVRVUk5fREFUQV9SRUdOTyhOKSAo KChOKSA8IDIpID8gKE4qMiArIDcpIDogSU5WQUxJRF9SRUdOVU0pCisKKyNk ZWZpbmUgRFdBUkYyX1VOV0lORF9JTkZPIDEKKworLyogKHI1LHI0KSBob2xk cyBhIHN0YWNrIGFkanVzdG1lbnQgZm9yIHJldHVybmluZyB0byBhIGhhbmRs ZXIuICAqLworI2RlZmluZSBFSF9SRVRVUk5fU1RBQ0tBREpfUlRYIAkJZ2Vu X3J0eF9SRUcgKFBtb2RlLCA0KQorCisjZGVmaW5lIEVIX1JFVFVSTl9IQU5E TEVSX1JUWCBcCisgIGdlbl9ydHhfTUVNIChQbW9kZSwgcGx1c19jb25zdGFu dCAoYXJnX3BvaW50ZXJfcnR4LCAtNCkpCisKKyNkZWZpbmUgSU5DT01JTkdf UkVUVVJOX0FERFJfUlRYCWdlbl9ydHhfUkEKKworI2RlZmluZSBEV0FSRl9G UkFNRV9SRVRVUk5fQ09MVU1OCVwKKyAgRFdBUkZfRlJBTUVfUkVHTlVNIChS RVRVUk5fQUREUkVTU19SRUdOVU0pCisKKyNkZWZpbmUgSU5DT01JTkdfRlJB TUVfU1BfT0ZGU0VUCQkwCQorI2RlZmluZSBGUkFNRV9QT0lOVEVSX0NGQV9P RkZTRVQoRk5ERUNMKQkwCQorCisvKiBBIEMgZXhwcmVzc2lvbiB3aG9zZSB2 YWx1ZSBpcyBSVEwgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZSBvZiB0aGUgcmV0 dXJuCisgICBhZGRyZXNzIGZvciB0aGUgZnJhbWUgQ09VTlQgc3RlcHMgdXAg ZnJvbSB0aGUgY3VycmVudCBmcmFtZS4gICovCisjZGVmaW5lIFJFVFVSTl9B RERSX1JUWChDT1VOVCwgRlJBTUUpIAkJCSAgCQlcCisgICgwID09IENPVU5U KQk/ICBnZW5fcnR4X1BMVVMgKFBtb2RlLCBnZW5fcnR4X1JBLCBnZW5fcnR4 X1JBKQkJXAorCQk6ICBjb25zdDBfcnR4CisKKyNkZWZpbmUgTU9ERVNfVElF QUJMRV9QKE1PREUxLCBNT0RFMikgIFwKKyAgKEdFVF9NT0RFX0NMQVNTIChN T0RFMSkgPT0gR0VUX01PREVfQ0xBU1MgKE1PREUyKSkKKworZW51bSByZWdf Y2xhc3MKK3sKKyAgTk9fUkVHUywKKyAgU0hPUlRfUkVHUywKKyAgTE9OR19S RUdTLAorICBOT1NQX1JFR1MsCisgIERPVUJMRV9CQVNFX1JFR1MsCisgIEdF TkVSQUxfUkVHUywKKyAgQUxMX1JFR1MsCisgIExJTV9SRUdfQ0xBU1NFUwor fTsKKworI2RlZmluZSBOX1JFR19DTEFTU0VTIChpbnQpIExJTV9SRUdfQ0xB U1NFUworCisjZGVmaW5lIFJFR19DTEFTU19OQU1FUwlcCisgIHsJCQlcCisg ICAgIk5PX1JFR1MiLAkJXAorICAgICJTSE9SVF9SRUdTIiwJXAorICAgICJM T05HX1JFR1MiLAlcCisgICAgIk5PU1BfUkVHUyIsCVwKKyAgICAiRE9VQkxF X0JBU0VfUkVHUyIsCVwKKyAgICAiR0VORVJBTF9SRUdTIiwJXAorICAgICJB TExfUkVHUyIJCVwKKyAgfQorCisjZGVmaW5lIFJFR19DTEFTU19DT05URU5U UwkJCSAgICAgCQlcCisgIHsJCQkJCQkgICAgIAkJXAorICAgIHsweDAwMDAw MDAwfSwgLyogTk9fUkVHUwkJICAgICAgICAgICAgICovICAJXAorICAgIHsw eDAwMDAwRkZGfSwgLyogU0hPUlRfUkVHUyAJOiAwIC0gMTEgICAgICovICAg CVwKKyAgICB7MHgwMDAwRjAwMH0sIC8qIExPTkdfUkVHUyAJCTogMTIgLSAx NSAgICAqLyAgCVwKKyAgICB7MHgwMDAwN0ZGRn0sIC8qIE5PU1BfUkVHUyAJ CTogMCAtIDE0ICAgICAqLyAgIAlcCisgICAgezB4MDAwMEY1NTV9LCAvKiBE T1VCTEVfQkFTRV9SRUdTICAgOiAyLDQsNiw4LDEwICovICAJXAorICAgIHsw eDAwMDBGRkZGfSwgLyogR0VORVJBTF9SRUdTCTogMCAtIDE1ICAgICAqLyAg CVwKKyAgICB7MHgwMDAwRkZGRn0gIC8qIEFMTF9SRUdTIAkJOiAwIC0gMTUg ICAgICovICAJXAorICB9CisKKyNkZWZpbmUgVEFSR0VUX1NNQUxMX1JFR0lT VEVSX0NMQVNTRVNfRk9SX01PREVfUCAgaG9va19ib29sX21vZGVfdHJ1ZSAK KworI2RlZmluZSBSRUdOT19SRUdfQ0xBU1MoUkVHTk8pICBjcjE2X3JlZ25v X3JlZ19jbGFzcyAoUkVHTk8pCisKKyNkZWZpbmUgQkFTRV9SRUdfQ0xBU1Mg ICAgICBHRU5FUkFMX1JFR1MKKworI2RlZmluZSBNT0RFX0JBU0VfUkVHX0NM QVNTKE1PREUpIFwKKyAgKEdFVF9NT0RFX1NJWkUgKE1PREUpIDw9IDQgPyAg KEJBU0VfUkVHX0NMQVNTKSA6ICAoRE9VQkxFX0JBU0VfUkVHUykpCisKKyNk ZWZpbmUgSU5ERVhfUkVHX0NMQVNTICAgICAgTE9OR19SRUdTCisKKyNkZWZp bmUgQ1IxNl9SRUdOT19PS19GT1JfQkFTRV9QKFJFR05PKSAgICAgICAgICAg ICAgICBcCisgICgoKFJFR05PKSA8IEZJUlNUX1BTRVVET19SRUdJU1RFUikg ICAgICAgICAgICAgICAgICAgXAorICAgfHwgKHJlZ19yZW51bWJlciAmJiAo KHVuc2lnbmVkKSByZWdfcmVudW1iZXJbUkVHTk9dIFwKKyAgICAgICAgICAg ICAgICAgICAgICAgIDwgRklSU1RfUFNFVURPX1JFR0lTVEVSKSkpCisKKy8q IFVzZSBldmVuLW51bWJlcmVkIHJlZyBmb3IgNjQtYml0IGFjY2Vzc2VzLiAg Ki8KKyNkZWZpbmUgUkVHTk9fTU9ERV9PS19GT1JfQkFTRV9QKFJFR05PLCBN T0RFKQkgIFwKKwkoQ1IxNl9SRUdOT19PS19GT1JfQkFTRV9QKFJFR05PKSAg JiYJICBcCisJICAoKEdFVF9NT0RFX1NJWkUgKE1PREUpID4gNCAgJiYgIAkg IFwKKwkgICAgIChSRUdOTykgPCBDUjE2X0ZJUlNUX0RXT1JEX1JFR0lTVEVS KVwKKwkgICAgID8gKDAgPT0gKChSRUdOTykgJiAxKSkgXAorCSAgICAgOiAx KSkKKworLyogVE9ETzogRm9yIG5vdyBsZXRzIG5vdCBzdXBwb3J0IGluZGV4 IGFkZHJlc3NpbmcgbW9kZS4gICovCisjZGVmaW5lIFJFR05PX09LX0ZPUl9J TkRFWF9QKFJFR05PKSAgICAgICAgXAorICAoKChSRUdOTyA+PSBDUjE2X0ZJ UlNUX0RXT1JEX1JFR0lTVEVSKSAgXAorICAgICAmJiAoKFJFR05PKSA8IEZJ UlNUX1BTRVVET19SRUdJU1RFUikpIFwKKyAgIHx8IChyZWdfcmVudW1iZXIg ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgJiYgKCgodW5zaWdu ZWQpIHJlZ19yZW51bWJlcltSRUdOT10gPj0gQ1IxNl9GSVJTVF9EV09SRF9S RUdJU1RFUikgXAorICAgICAgICAgICAgJiYgKCh1bnNpZ25lZCkgcmVnX3Jl bnVtYmVyW1JFR05PXSA8IEZJUlNUX1BTRVVET19SRUdJU1RFUikpKVwKKyAg KQorCisjZGVmaW5lIFBSRUZFUlJFRF9SRUxPQURfQ0xBU1MoWCwgQ0xBU1Mp IENMQVNTCisKKy8qIFRoZSBtYXhpbXVtIG51bWJlciBvZiBjb25zZWN1dGl2 ZSByZWdpc3RlcnMgb2YgY2xhc3MgQ0xBU1MgbmVlZGVkIHRvCisgICBob2xk IGEgdmFsdWUgb2YgbW9kZSBNT0RFLgorICAgT24gdGhlIENvbXBhY3RSSVND IGFyY2hpdGVjdHVyZSwgdGhlIHNpemUgb2YgTU9ERSBpbiB3b3Jkcy4KKyAg IFRoZSBzaXplIG9mIE1PREUgaW4gZG91YmxlIHdvcmRzIGZvciB0aGUgY2xh c3MgTE9OR19SRUdTLgorCisgICBUaGUgZm9sbG93aW5nIGNoZWNrIGFzc3Vt ZXMgaWYgdGhlIGNsYXNzIGlzIG5vdCBMT05HX1JFR1MsIHRoZW4KKyAgIGFs bCAoTk9fUkVHUywgU0hPUlRfUkVHUywgTk9TUF9SRUdTIGFuZCBHRU5FUkFM X1JFR1MpIG90aGVyIGNsYXNzZXMgYXJlIAorICAgc2hvcnQuICBXZSBtYXkg aGF2ZSB0byBjaGVjayBpZiB0aGlzIGNhbiBjYXVzZSBhbnkgZGVncmFkYXRp b24gaW4gCisgICBwZXJmb3JtYW5jZS4gICovCisjZGVmaW5lIENMQVNTX01B WF9OUkVHUyhDTEFTUywgTU9ERSkgXAorICAoQ0xBU1MgPT0gTE9OR19SRUdT IFwKKyAgID8gKEdFVF9NT0RFX1NJWkUgKE1PREUpICsgQ1IxNl9VTklUU19Q RVJfRFdPUkQgLSAxKSAvIENSMTZfVU5JVFNfUEVSX0RXT1JEXAorICAgOiAo R0VUX01PREVfU0laRSAoTU9ERSkgKyBVTklUU19QRVJfV09SRCAtIDEpIC8g VU5JVFNfUEVSX1dPUkQpCisKKy8qIE1hY3JvcyB0byBjaGVjayB0aGUgcmFu Z2Ugb2YgaW50ZWdlcnMgLiBUaGVzZSBtYWNyb3Mgd2VyZSB1c2VkIGFjcm9z cworICAgdGhlIHBvcnQsIG1ham9ybHkgaW4gY29uc3RyYWludHMubWQsIHBy ZWRpY2F0ZXMubWQgZmlsZXMuICovCisjZGVmaW5lIFNJR05FRF9JTlRfRklU U19OX0JJVFMoaW1tLCBOKSAgICAgICAgICAgXAorICAoKCgoaW1tKSA8ICgo SE9TVF9XSURFX0lOVCkgMSA8PCAoKE4pIC0gMSkpKSAgICAgICBcCisgICAg ICAmJiAoKGltbSkgPj0gLSgoSE9TVF9XSURFX0lOVCkgMSA8PCAoKE4pIC0g MSkpKSkgPyAxIDogMCkKKworI2RlZmluZSBVTlNJR05FRF9JTlRfRklUU19O X0JJVFMoaW1tLCBOKSBcCisgICgoKGltbSkgPCAoKEhPU1RfV0lERV9JTlQp IDEgPDwgKE4pKSAmJiAoaW1tKSA+PSAoSE9TVF9XSURFX0lOVCkgMCkgPyAx IDogMCkKKworI2RlZmluZSBJTl9SQU5HRV9QKFZBTFVFLCBMT1csIEhJR0gp ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKCgoKEhPU1RfV0lE RV9JTlQpKFZBTFVFKSkgPj0gKEhPU1RfV0lERV9JTlQpKExPVykpICAgICAg ICAgICBcCisgICAmJiAoKChIT1NUX1dJREVfSU5UKShWQUxVRSkpIDw9ICgo SE9TVF9XSURFX0lOVCkoSElHSCkpKSkKKworI2RlZmluZSBJTl9SQU4oVkFM VUUsIExPVywgSElHSCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK KyAgKCgoKChIT1NUX1dJREVfSU5UKShWQUxVRSkpID49IChIT1NUX1dJREVf SU5UKShMT1cpKSAgICAgICBcCisgICAmJiAoKChIT1NUX1dJREVfSU5UKShW QUxVRSkpIDw9ICgoSE9TVF9XSURFX0lOVCkoSElHSCkpKSkgPyAxIDogMCkK KworLyogVGhpcyBjaGVjayBpcyBmb3Igc2JpdC9jYml0IGluc3RydWN0aW9u LiAgKi8KKyNkZWZpbmUgT0tfRk9SX1ooT1ApIFwKKyAgKChHRVRfQ09ERSAo T1ApID09IE1FTSAmJiBHRVRfQ09ERSAoWEVYUCAoT1AsIDApKSA9PSBDT05T VF9JTlQpIFwKKyAgIHx8IChHRVRfQ09ERSAoT1ApID09IE1FTSAmJiBHRVRf Q09ERSAoWEVYUCAoT1AsIDApKSA9PSBSRUcpIFwKKyAgIHx8IChHRVRfQ09E RSAoT1ApID09IE1FTSAmJiBHRVRfQ09ERSAoWEVYUCAoT1AsIDApKSA9PSBQ TFVTIFwKKyAgICAgICAmJiBHRVRfQ09ERSAoWEVYUCAoKFhFWFAgKE9QLCAw KSksIDApKSA9PSBSRUcgXAorICAgICAgICYmIEdFVF9DT0RFIChYRVhQICgo WEVYUCAoT1AsIDApKSwgMSkpID09IENPTlNUX0lOVCkpCisKKy8qIFN0YWNr IGxheW91dCBhbmQgY2FsbGluZyBjb252ZW50aW9ucy4gICovCisjZGVmaW5l IFNUQUNLX0dST1dTX0RPV05XQVJECisKKyNkZWZpbmUgU1RBUlRJTkdfRlJB TUVfT0ZGU0VUICAgMAorCisjZGVmaW5lIFNUQUNLX1BPSU5URVJfUkVHTlVN ICAgIDE1CisKKyNkZWZpbmUgRlJBTUVfUE9JTlRFUl9SRUdOVU0gICAgMTMK KworI2RlZmluZSBBUkdfUE9JTlRFUl9SRUdOVU0gICAgICAxMgorCisjZGVm aW5lIFNUQVRJQ19DSEFJTl9SRUdOVU0gICAgIDEKKworI2RlZmluZSBSRVRV Uk5fQUREUkVTU19SRUdOVU0gICAxNAorCisjZGVmaW5lIEZJUlNUX1BBUk1f T0ZGU0VUKEZOREVDTCkgMAorCisjZGVmaW5lIEVMSU1JTkFCTEVfUkVHUyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyBB UkdfUE9JTlRFUl9SRUdOVU0sICAgU1RBQ0tfUE9JTlRFUl9SRUdOVU19LCBc CisgICAgeyBBUkdfUE9JTlRFUl9SRUdOVU0sICAgRlJBTUVfUE9JTlRFUl9S RUdOVU19LCBcCisgICAgeyBGUkFNRV9QT0lOVEVSX1JFR05VTSwgU1RBQ0tf UE9JTlRFUl9SRUdOVU19ICBcCisgIH0KKworI2RlZmluZSBJTklUSUFMX0VM SU1JTkFUSU9OX09GRlNFVChGUk9NLCBUTywgT0ZGU0VUKSAgICAgICAgICAg ICAgXAorICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorICAgICAgKE9GRlNFVCkgPSBjcjE2X2luaXRpYWxfZWxpbWlu YXRpb25fb2Zmc2V0ICgoRlJPTSksIChUTykpOyAgXAorICAgIH0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorICB3aGlsZSAoMCkKKworLyogUGFzc2luZyBmdW5jdGlv biBhcmd1bWVudHMuICAqLworCisjZGVmaW5lIEFDQ1VNVUxBVEVfT1VUR09J TkdfQVJHUyAwCisKKyNkZWZpbmUgUFVTSF9BUkdTIDEKKworI2RlZmluZSBQ VVNIX1JPVU5ESU5HKEJZVEVTKSAoKChCWVRFUykgKyAxKSAmIH4xKQorCisj aWZuZGVmIENVTVVMQVRJVkVfQVJHUworc3RydWN0IGN1bXVsYXRpdmVfYXJn cworeworICBpbnQgaW50czsKKyAgaW50IGxhc3RfcGFybV9pbl9yZWc7Cit9 OworCisjZGVmaW5lIENVTVVMQVRJVkVfQVJHUyBzdHJ1Y3QgY3VtdWxhdGl2 ZV9hcmdzCisjZW5kaWYKKworLyogT24gdGhlIENSMTYgYXJjaGl0ZWN0dXJl LCBWYXJhcmdzIHJvdXRpbmVzIHNob3VsZCByZWNlaXZlIHRoZWlyIHBhcmFt ZXRlcnMgCisgICBvbiB0aGUgc3RhY2suICAqLworCisjZGVmaW5lIElOSVRf Q1VNVUxBVElWRV9BUkdTKENVTSwgRk5UWVBFLCBMSUJOQU1FLCBGTkRFQ0ws IE5fTkFNRURfQVJHUykgXAorICBjcjE2X2luaXRfY3VtdWxhdGl2ZV9hcmdz ICgmKENVTSksIChGTlRZUEUpLCAoTElCTkFNRSkpCisKKyNkZWZpbmUgRlVO Q1RJT05fQVJHX1JFR05PX1AoUkVHTk8pICBjcjE2X2Z1bmN0aW9uX2FyZ19y ZWdub19wIChSRUdOTykKKworLyogR2VuZXJhdGluZyBjb2RlIGZvciBwcm9m aWxpbmcgLSBOT1QgSU1QTEVNRU5URUQuICAqLworI3VuZGVmICBGVU5DVElP Tl9QUk9GSUxFUgorI2RlZmluZSBGVU5DVElPTl9QUk9GSUxFUihTVFJFQU0s IExBQkVMTk8pICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorICBzb3JyeSAoInByb2ZpbGVyIHN1 cHBvcnQgZm9yIENSMTYiKTsgICAgICAgIFwKK30KKworLyogVHJhbXBvbGlu ZXMgZm9yIG5lc3RlZCBmdW5jdGlvbnMgLSBOT1QgU1VQUE9SVEVELiAgKi8K KyNkZWZpbmUgVFJBTVBPTElORV9TSVpFICAgIDE2CisKKy8qIEFERFJFU1NJ TkcgTU9ERVMuICAqLworCisjZGVmaW5lIENPTlNUQU5UX0FERFJFU1NfUChY KSAgICAgICBcCisgIChHRVRfQ09ERSAoWCkgPT0gTEFCRUxfUkVGICAgICAg ICBcCisgICB8fCBHRVRfQ09ERSAoWCkgPT0gU1lNQk9MX1JFRiAgICBcCisg ICB8fCBHRVRfQ09ERSAoWCkgPT0gQ09OU1QgICAgICAgICBcCisgICB8fCBH RVRfQ09ERSAoWCkgPT0gQ09OU1RfSU5UKQorCisjZGVmaW5lIE1BWF9SRUdT X1BFUl9BRERSRVNTICAgIDIKKworI2RlZmluZSBIQVZFX1BPU1RfSU5DUkVN RU5UICAgICAwCisjZGVmaW5lIEhBVkVfUE9TVF9ERUNSRU1FTlQgICAgIDAK KyNkZWZpbmUgSEFWRV9QT1NUX01PRElGWV9ESVNQICAgMAorI2RlZmluZSBI QVZFX1BPU1RfTU9ESUZZX1JFRyAgICAwCisKKyNpZmRlZiBSRUdfT0tfU1RS SUNUCisjZGVmaW5lIENSMTZfUkVHX09LX0ZPUl9CQVNFX1AoWCkJQ1IxNl9S RUdOT19PS19GT1JfQkFTRV9QIChSRUdOTyAoWCkpCisjZGVmaW5lIFJFR19N T0RFX09LX0ZPUl9CQVNFX1AoWCwgTU9ERSkJXAorICBSRUdOT19NT0RFX09L X0ZPUl9CQVNFX1AgKFJFR05PKFgpLCBNT0RFKQorI2RlZmluZSBSRUdfT0tf Rk9SX0lOREVYX1AoWCkgICBSRUdOT19PS19GT1JfSU5ERVhfUCAoUkVHTk8g KFgpKQorI2Vsc2UgLyogbm90IFJFR19PS19TVFJJQ1QuICAqLworI2RlZmlu ZSBDUjE2X1JFR19PS19GT1JfQkFTRV9QKFgpCTEKKyNkZWZpbmUgUkVHX01P REVfT0tfRk9SX0JBU0VfUChYLCBNT0RFKQkxCisjZGVmaW5lIFJFR19PS19G T1JfSU5ERVhfUChYKSAgIDEKKyNlbmRpZiAvKiBub3QgUkVHX09LX1NUUklD VC4gICovCisKKy8qIEdvIHRvIExBQkVMIGlmIEFERFIgKGEgbGVnaXRpbWF0 ZSBhZGRyZXNzIGV4cHJlc3Npb24pIGhhcyAKKyAgIGFuIGVmZmVjdCB0aGF0 IGRlcGVuZHMgb24gdGhlIG1hY2hpbmUgbW9kZSBpdCBpcyB1c2VkIGZvci4g ICovCisjZGVmaW5lIEdPX0lGX01PREVfREVQRU5ERU5UX0FERFJFU1MoQURE UiwgTEFCRUwpCisKKy8qIEFzc3VtZSBiZXN0IGNhc2UgKGJyYW5jaCBwcmVk aWN0ZWQpLiAgKi8KKyNkZWZpbmUgQlJBTkNIX0NPU1Qoc3BlZWRfcCwgcHJl ZGljdGFibGVfcCkgICAgICAgMgorCisjZGVmaW5lIFNMT1dfQllURV9BQ0NF U1MgIDEKKworLyogSXQgaXMgYXMgZ29vZCBvciBiZXR0ZXIgdG8gY2FsbCBh IGNvbnN0YW50IGZ1bmN0aW9uIGFkZHJlc3MgdGhhbiB0bworICAgY2FsbCBh biBhZGRyZXNzIGtlcHQgaW4gYSByZWdpc3Rlci4gICovCisjZGVmaW5lIE5P X0ZVTkNUSU9OX0NTRQorCisvKiBEaXZpZGluZyB0aGUgb3V0cHV0IGludG8g c2VjdGlvbnMuICAqLworCisjZGVmaW5lIFRFWFRfU0VDVElPTl9BU01fT1Ag Ilx0LnNlY3Rpb25cdC50ZXh0IgorCisjZGVmaW5lIERBVEFfU0VDVElPTl9B U01fT1AgIlx0LnNlY3Rpb25cdC5kYXRhIgorCisjZGVmaW5lIEJTU19TRUNU SU9OX0FTTV9PUCAgIlx0LnNlY3Rpb25cdC5ic3MiCisKKy8qIFBvc2l0aW9u IGluZGVwZW5kZW50IGNvZGUgKFBJQykuICAqLworLyogTkVBUl9QSUMgZm9y IC1mcGljIG9wdGlvbi4gICovCisKKyNkZWZpbmUgTkVBUl9QSUMgMQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy8qIEZBUl9Q SUMgZm9yIC1mUElDIG9wdGlvbi4gICovICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgCisKKyNkZWZpbmUgRkFSX1BJQyAgMgor CisjZGVmaW5lIFBJQ19PRkZTRVRfVEFCTEVfUkVHTlVNICAxMgorCisjZGVm aW5lIExFR0lUSU1BVEVfUElDX09QRVJBTkRfUChYKSBsZWdpdGltYXRlX3Bp Y19vcGVyYW5kX3AgKFgpICAgICAgIAorCisvKiBBc3NlbWJsZXIgZm9ybWF0 LiAgKi8KKworLyogQ2hhcmFjdGVyIHRvIHN0YXJ0IGEgY29tbWVudC4gICov CisjZGVmaW5lIEFTTV9DT01NRU5UX1NUQVJUICIjIgorCisjZGVmaW5lIEdM T0JBTF9BU01fT1AgIlx0Lmdsb2JsXHQiCisKKyN1bmRlZiBVU0VSX0xBQkVM X1BSRUZJWAorI2RlZmluZSBVU0VSX0xBQkVMX1BSRUZJWCAiXyIKKworI3Vu ZGVmIEFTTV9PVVRQVVRfTEFCRUxSRUYKKyNkZWZpbmUgQVNNX09VVFBVVF9M QUJFTFJFRihTVFJFQU0sIE5BTUUpIFwKKyAgYXNtX2ZwcmludGYgKFNUUkVB TSwgIiVVJXMiLCAoKnRhcmdldG0uc3RyaXBfbmFtZV9lbmNvZGluZykgKE5B TUUpKTsKKworI2RlZmluZSBBU01fT1VUUFVUX1NZTUJPTF9SRUYoU1RSRUFN LCBTWU1CT0wpICAgXAorICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgY29uc3QgY2hhciAq cm4gPSBYU1RSIChTWU1CT0wsIDApOyAgICAgICAgXAorICAgICAgYXNzZW1i bGVfbmFtZSAoU1RSRUFNLCBybik7ICAgICAgICAgICAgICAgXAorICAgICAg aWYgKFNZTUJPTF9SRUZfRlVOQ1RJT05fUCAoU1lNQk9MKSkgICAgICAgXAor ICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorICAgICAgICBmcHJpbnRmICgoU1RSRUFNKSwgIkBjIik7ICAgICAg ICAgICAgICAgXAorICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorICB3aGlsZSAoMCkKKworI3VuZGVm IEFTTV9BUFBfT04KKyNkZWZpbmUgQVNNX0FQUF9PTiAgICIjQVBQXG4iCisK KyN1bmRlZiBBU01fQVBQX09GRgorI2RlZmluZSBBU01fQVBQX09GRiAgIiNO T19BUFBcbiIKKworLyogU3dpdGNoIGludG8gYSBnZW5lcmljIHNlY3Rpb24u ICAqLworI2RlZmluZSBUQVJHRVRfQVNNX05BTUVEX1NFQ1RJT04JZGVmYXVs dF9lbGZfYXNtX25hbWVkX3NlY3Rpb24KKworI3VuZGVmIElOSVRfU0VDVElP Tl9BU01fT1AKKyNkZWZpbmUgSU5JVF9TRUNUSU9OX0FTTV9PUAkJIlx0LnNl Y3Rpb25cdC5pbml0IgorCisjdW5kZWYgRklOSV9TRUNUSU9OX0FTTV9PUAor I2RlZmluZSBGSU5JX1NFQ1RJT05fQVNNX09QCQkiXHQuc2VjdGlvblx0LmZp bmkiCisKKy8qIEluc3RydWN0aW9uIG91dHB1dC4gICovCisKKyNkZWZpbmUg UkVHSVNURVJfTkFNRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgInIwIiwgICJyMSIsICAi cjIiLCAgInIzIiwgICJyNCIsICAicjUiLCAgInI2IiwgICJyNyIsIFwKKyAg ICAicjgiLCAgInI5IiwgICJyMTAiLCAicjExIiwgInIxMiIsICJyMTMiLCAi cmEiLCAgInNwIiAgXAorICB9CisKKy8qIE91dHB1dCBvZiBkaXNwYXRjaCB0 YWJsZXMuICAqLworCisvKiBSZXZpc2l0LiBObyBQQyByZWxhdGl2ZSBjYXNl IGFzIGxhYmVsIGV4cHJlc3Npb25zIGFyZSBub3QgCisgICBwcm9wZXJseSBz dXBwb3J0ZWQgaW4gYmludXRpbHMgZWxzZSB3ZSBjb3VsZCBoYXZlIGRvbmUg dGhpczoKKyAgICNkZWZpbmUgQ0FTRV9WRUNUT1JfUENfUkVMQVRJVkUgKG9w dGltaXplX3NpemUgPyAxIDogMCkuICAqLworI2RlZmluZSBDQVNFX1ZFQ1RP Ul9QQ19SRUxBVElWRSAwCisKKyNkZWZpbmUgQVNNX09VVFBVVF9BRERSX0RJ RkZfRUxUKEZJTEUsIEJPRFksIFZBTFVFLCBSRUwpICAgIFwKKyAgKChHRVRf TU9ERSAoQk9EWSkgPT0gUUltb2RlKSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKyAgID8gZnByaW50ZiAoKEZJTEUpLCAiXHQuYnl0ZSAoLkwl ZC0uTCVkKSA+PiAxXG4iLCAgICAgICAgIFwKKyAgICAgICAgICAgICAgVkFM VUUsIFJFTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK KyAgIDogZnByaW50ZiAoKEZJTEUpLCAiXHQud29yZCAoLkwlZC0uTCVkKSA+ PiAxXG4iLCAgICAgICAgIFwKKyAgICAgICAgICAgICAgVkFMVUUsIFJFTCkp CisKKyNkZWZpbmUgQVNNX09VVFBVVF9BRERSX1ZFQ19FTFQoU1RSRUFNLCBW QUxVRSkgXAorICBhc21fZnByaW50ZiAoKFNUUkVBTSksICJcdC5sb25nXHQu TCVkQGNcbiIsIChWQUxVRSkpCisKKy8qIEFsaWdubWVudCBpbiBhc3NlbWJs ZXIgZmlsZS4gICovCisKKyNkZWZpbmUgQVNNX09VVFBVVF9BTElHTihTVFJF QU0sIFBPV0VSKSBcCisgIGFzbV9mcHJpbnRmICgoU1RSRUFNKSwgIlx0LmFs aWduXHQlZFxuIiwgMSA8PCAoUE9XRVIpKQorCisvKiBNaXNjZWxsYW5lb3Vz IHBhcmFtZXRlcnMuICAqLworCisjZGVmaW5lIENBU0VfVkVDVE9SX01PREUg IFBtb2RlCisKKyNkZWZpbmUgTU9WRV9NQVggNAorCisjZGVmaW5lIFRSVUxZ X05PT1BfVFJVTkNBVElPTihPVVRQUkVDLCBJTlBSRUMpICAxCisKKyNkZWZp bmUgU1RPUkVfRkxBR19WQUxVRSAgMQorCisjZGVmaW5lIFBtb2RlIFNJbW9k ZQorCisjZGVmaW5lIEZVTkNUSU9OX01PREUgUUltb2RlCisKKy8qIERlZmlu ZSB0aGlzIGJvb2xlYW4gbWFjcm8ocykgdG8gaW5kaWNhdGUgd2hldGhlciBv ciBub3QgeW91ciBhcmNoaXRlY3R1cmUKKyAgIGhhcyAodW4pY29uZGl0aW9u YWwgYnJhbmNoZXMgdGhhdCBjYW4gc3BhbiBhbGwgb2YgbWVtb3J5LiAgSXQg aXMgdXNlZCBpbgorICAgY29uanVuY3Rpb24gd2l0aCBhbiBvcHRpbWl6YXRp b24gdGhhdCBwYXJ0aXRpb25zIGhvdCBhbmQgY29sZCBiYXNpYyBibG9ja3MK KyAgIGludG8gc2VwYXJhdGUgc2VjdGlvbnMgb2YgdGhlIGV4ZWN1dGFibGUu CisgICBDUjE2IGNvbnRhaW5zIGJyYW5jaCBpbnN0cnVjdGlvbnMgdGhhdCBz cGFuIHdob2xlIGFkZHJlc3Mgc3BhY2UuICAqLworI2RlZmluZSBIQVNfTE9O R19DT05EX0JSQU5DSCAgICAxCisjZGVmaW5lIEhBU19MT05HX1VOQ09ORF9C UkFOQ0ggIDEKKworI2VuZGlmIC8qIEVuZCBvZiBHQ0NfQ1IxNl9ILiAgKi8K LS0tIG9yaWcvZ2NjL2NvbmZpZy9jcjE2L2NyMTYtbGliZ2NjLnMJMTk3MC0w MS0wMSAwNTozMDowMC4wMDAwMDAwMDAgKzA1MzAKKysrIG1vZC9nY2MvY29u ZmlnL2NyMTYvY3IxNi1saWJnY2MucwkyMDExLTA2LTI4IDEyOjM0OjM0LjAw MDAwMDAwMCArMDUzMApAQCAtMCwwICsxLDU2OCBAQAorLyogTGliZ2NjIFRh cmdldCBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbi4KKyAgIENvcHlyaWdodCAo QykgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENv bnRyaWJ1dGVkIGJ5IEtQSVQgQ3VtbWlucyBJbmZvc3lzdGVtcyBMaW1pdGVk LgorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKKyAgIEdDQyBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IgbW9kaWZ5IGl0IHVuZGVyCisgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl ZQorICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywg b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKyAgIHZlcnNpb24uCisK KyAgIEdDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkKKyAgIFdBUlJBTlRZOyB3 aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRB QklMSVRZIG9yCisgICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGZv ciBtb3JlIGRldGFpbHMuCisKKyAgIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwg dmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorICAgcGVy bWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5 IEV4Y2VwdGlvbiwgdmVyc2lvbgorICAgMy4xLCBhcyBwdWJsaXNoZWQgYnkg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworICAgWW91IHNob3Vs ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgYW5kCisgICBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1l IExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOwor ICAgc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1F IHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisgICA8aHR0cDovL3d3dy5n bnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZkZWYgIExfbXVsc2kzCisJ LnRleHQKKwkuYWxpZ24gIDQKKwkuZ2xvYmwgIF9fX211bHNpMworX19fbXVs c2kzOgorCW1vdncgICAgcjQscjAKKwltb3Z3ICAgIHIyLHIxCisJLyogRXh0 ZW5kZWQgbXVsdGlwbGljYXRpb24gYmV0d2VlbiB0aGUgMiBsb3dlciB3b3Jk cyAqLworCW11bHV3ICAgcjEsKHIxLHIwKQorCisJLyogTXVsdGlwbHkgdGhl IGxvd2VyIHdvcmQgb2YgZWFjaCBwYXJhbWV0ZXIgICovICAKKwltdWx3ICAg IHIyLHI1ICAgCisgICAgCisJLyogV2l0aCB0aGUgaGlnaGVyIHdvcmQgb2Yg dGhlIG90aGVyICAqLworCW11bHcgICAgcjMscjQgICAgIAorICAKKwkvKiBB ZGQgcHJvZHVjdHMgdG8gdGhlIGhpZ2hlciBwYXJ0IG9mIHRoZSBmaW5hbCBy ZXN1bHQgICovCisJYWRkdyAgICByNCxyMSAgICAgICAKKwlhZGR3ICAgIHI1 LHIxCisJanVtcCAgICAocmEpCisjZW5kaWYKKworCisjaWZkZWYgTF9kaXZk aTMKKwkudGV4dAorCS5hbGlnbiA0CisJLmdsb2JsIF9fX2RpdmRpMworCitf X19kaXZkaTM6CisJcHVzaAkkNCwgcjcsIHJhCisKKworCS8qIFBhcmFtICMx IExvbmcgTG9uZyBsb3cgYml0IGZpcnN0ICovCisJbG9hZGQgICAxMihzcCks IChyMSwgcjApCisJbG9hZGQgICAxNihzcCksIChyMywgcjIpCisKKwkvKiBQ YXJhbSAjMiBMb25nIExvbmcgbG93IGJpdCBmaXJzdCAqLworCWxvYWRkICAg MjAoc3ApLCAocjUsIHI0KQorCWxvYWRkICAgMjQoc3ApLCAocjcsIHI2KQor CQorCS8qIFNldCBuZWcgdG8gMCAqLworCW1vdncgJDAsIHIxMAorCQorCXN1 YmQgJDE2LCAoc3ApCisKKwkvKiBDb21wYXJlIGlmIHBhcmFtMSBpcyBncmVh dGVyIHRoYW4gMCAqLwkKKwljbXB3ICQwLCByMworCWJsZSBMNAorCisJLyog SW52ZXJ0IHBhcmFtMSBhbmQgbmVnICovCisJbW92ZCAkLTEsIChyOSwgcjgp IAkvKiBUZW1wIHNldCB0byBGRkZGRkZGRiAqLworCXhvcmQgKHI5LCByOCks IChyMSwgcjApCS8qIFhvciBsb3cgYml0cyBvZiBwYXJhbSAxIHdpdGggdGVt cCAqLworCXhvcmQgKHI5LCByOCksIChyMywgcjIpCS8qIFhvciBoaWdoIGJp dHMgb2YgcGFyYW0gMSB3aXRoIHRlbXAgKi8KKwlhZGRkICQxLCAocjEsIHIw KQkvKiBBZGQgMSB0byBsb3cgYml0cyBvZiBwYXJhbSAxICovCisJeG9ydyAk MSwgcjEwCQkvKiBJbnZlcnQgbmVnICovCisJYmNjIEw0CQkJLyogSWYgbm8g Y2Fycnkgb2NjdXJyZWQgZ28gdG8gTDQgKi8KKwlhZGRkICQxLCAocjMsIHIy KQkvKiBBZGQgMSB0byBoaWdoIGJpdHMgb2YgcGFyYW0gMSAqLworCitMNDoJ c3RvcmQgKHIxLCByMCksIDAoc3ApCisJc3RvcmQgKHIzLCByMiksIDQoc3Ap CisJCisJLyogQ29tcGFyZSBpZiBwYXJhbTIgaXMgZ3JlYXRlciB0aGFuIDAg Ki8JCisJY21wdyAkMCwgcjcKKwlibGUgTDUKKworCS8qIEludmVydCBwYXJh bTIgYW5kIG5lZyAqLworCW1vdmQgJC0xLCAocjksIHI4KQkvKiBUZW1wIHNl dCB0byBGRkZGRkZGRiAqLworCXhvcmQgKHI5LCByOCksIChyNSwgcjQpCS8q IFhvciBsb3cgYml0cyBvZiBwYXJhbSAyIHdpdGggdGVtcCAqLworCXhvcmQg KHI5LCByOCksIChyNywgcjYpCS8qIFhvciBoaWdoIGJpdHMgb2YgcGFyYW0g MiB3aXRoIHRlbXAgKi8KKwlhZGRkICQxLCAocjUsIHI0KQkvKiBBZGQgMSB0 byBsb3cgYml0cyBvZiBwYXJhbSAyICovCisJeG9ydyAkMSwgcjEwCQkvKiBJ bnZlcnQgbmVnICovCisJYmNjIEw1CQkJLyogSWYgbm8gY2Fycnkgb2NjdXJy ZWQgZ28gdG8gTDUgKi8KKwlhZGRkICQxLCAocjcsIHI2KQkvKiBBZGQgMSB0 byBoaWdoIGJpdHMgb2YgcGFyYW0gMiAqLworCitMNToJc3RvcmQgKHI1LCBy NCksIDgoc3ApCisJc3RvcmQgKHI3LCByNiksIDEyKHNwKQorCW1vdncgJDAs IHIyCisKKwkvKiBDYWxsIHVkaXZtb2RkaTMgKi8KKyNpZmRlZiBfX1BJQ19f CisJbG9hZGQJX19fdWRpdm1vZGRpM0BjR09UKHIxMiksIChyMSxyMCkKKwlq YWwJKHIxLHIwKQorI2Vsc2UKKwliYWwgKHJhKSwgX19fdWRpdm1vZGRpMwor I2VuZGlmCisKKwkvKiBJZiAobmVnKSAqLworCWFkZGQJJDE2LCAoc3ApCisJ Y21wdyAkMCwgcjEwCQkvKiBDb21wYXJlIDAgd2l0aCBuZWcgKi8KKwliZXEg TGV4aXRfXworCQorCS8qIE5lZyA9IC1OZWcgKi8KKwl4b3JkIChyOSwgcjgp LCAocjEsIHIwKQkvKiBYb3IgbG93IGJpdHMgb2YgdXJlcyB3aXRoIHRlbXAg Ki8KKwl4b3JkIChyOSwgcjgpLCAocjMsIHIyKQkvKiBYb3IgaGlnaCBiaXRz IG9mIHVyZXMgd2l0aCB0ZW1wICovCisJYWRkZCAkMSwgKHIxLCByMCkJLyog QWRkIDEgdG8gbG93IGJpdHMgb2YgdXJlcyAqLworCWJjYyBMZXhpdF9fCisJ YWRkZCAkMSwgKHIzLCByMikJLyogQWRkIDEgdG8gaGlnaCBiaXQgb2YgdXJl cyAqLworCitMZXhpdF9fOgorIyAgaWZkZWYgX19JRF9TSEFSRURfTElCX18K Kwlwb3AJJDIsIHIxMgorIyAgZW5kaWYKKwlwb3ByZXQgJDQsIHI3LCByYQor I2VuZGlmCisKKyNpZmRlZiBMX2xzaHJkaTMKKwkudGV4dAorCS5hbGlnbiA0 CisJLmdsb2JsIF9fX2xzaHJkaTMKKworX19fbHNocmRpMzoKKwlwdXNoCSQz LCByNworCisJLyogTG9hZCBwYXJhbWV0ZXJzIGZyb20gc3RhY2sgaW4gdGhp cyBvcmRlciAqLworCW1vdncgcjIsIHI2CQkvKiBOdW1iZXIgb2Ygc2hpZnRz ICovCisJbG9hZGQJNihzcCksIChyMSwgcjApCS8qIExvdyBiaXRzICovCisJ bG9hZGQJMTAoc3ApLCAocjMsIHIyKS8qIEhpZ2ggYml0cyAqLworCisJeG9y dyAkLTEsIHI2CQkvKiBJbnZlcnQgbnVtYmVyIG9mIHNoaWZ0cyAqLworCWFk ZHcgJDEsIHI2CQkvKiBBZGQgMSBieSBudW1iZXIgb2Ygc2hpZnRzICovCisK Kwltb3Z3IHI2LCByNwkJLyogQ29weSBudW1iZXIgb2Ygc2hpZnRzICovCisK Kwl0Yml0ICQxNSwgcjYJCS8qIFRlc3QgaWYgbnVtYmVyIGlzIG5lZ2F0aXZl ICovCisJYmZzIEwyCQkJLyogSWYgbmVnYXRpdmUganVtcCB0byBMMiAqLwor CisJbW92ZCAocjEsIHIwKSwgKHI5LCByOCkJLyogQ29weSBsb3cgYml0cyAq LworCisJc3VidyAkMzIsIHI3CQkvKiBDYWxjIGhvdyBtYW55IGJpdHMgd2ls bCBvdmVyZmxvdyAqLworCS8qIFNoaWZ0IHRoZSB0ZW1wIGxvdyBiaXQgdG8g dGhlIHJpZ2h0IHRvIHNlZSB0aGUgb3ZlcmZsb3dpbmcgYml0cyAgKi8KKwls c2hkIHI3LCAocjksIHI4KQkKKworCWNtcHcgJDMyLCByNgkJLyogSWYgbnVt YmVyIG9mIHNoaWZ0cyBpcyBoaWdoZXIgdGhhbiAzMSAqLworCWJsdCBMMQkJ CS8qIFNoaWZ0IGJ5IG1vdmluZyAqLworCisJbHNoZCByNiwgKHIzLCByMikJ LyogU2hpZnQgaGlnaCBiaXRzICovCisJbHNoZCByNiwgKHIxLCByMCkJLyog U2hpZnQgbG93IGJpdHMgKi8KKwlhZGRkIChyOSwgcjgpLCAocjMsIHIyKQkv KiBBZGQgb3ZlcmZsb3cgdG8gdGhlIGhpZ2ggYml0cyAqLworCXBvcHJldAkk MywgcjcJCS8qIFJldHVybiAqLworCitMMToJbW92ZCAkMCwgKHIxLCByMCkJ LyogUmVzZXQgbG93IGJpdCAqLworCW1vdmQgKHI5LCByOCksIChyMywgcjIp CS8qIEFkZCB0aGUgb3ZlcmZsb3cgZnJvbSB0aGUgbG93IGJpdCAqLworCXBv cHJldAkkMywgcjcJCS8qIFJldHVybiAqLworCitMMjoJbW92ZCAocjMsIHIy KSwgKHI5LCByOCkJLyogQ29weSBoaWdoIGJpdHMgKi8KKworCWFkZHcgJDMy LCByNwkJLyogQ2FsYyBob3cgbWFueSBiaXRzIHdpbGwgb3ZlcmZsb3cgKi8K KwkvKiBTaGlmdCB0aGUgdGVtcCBsb3cgYml0IHRvIHRoZSBsZWZ0IHRvIHNl ZSB0aGUgb3ZlcmZsb3dpbmcgYml0cyAgKi8KKwlsc2hkIHI3LCAocjksIHI4 KQkKKworCWNtcHcgJC0zMiwgcjYJCS8qIElmIG51bWJlciBvZiBzaGlmdHMg aXMgbG93ZXIgdGhhbiAtMzEgKi8KKwliZ3QgTDMJCQkvKiBTaGlmdCBieSBt b3ZpbmcgKi8KKworCWxzaGQgcjYsIChyMSwgcjApCS8qIFNoaWZ0IGxvdyBi aXRzICovCisJbHNoZCByNiwgKHIzLCByMikJLyogU2hpZnQgaGlnaCBiaXRz ICovCisJYWRkZCAocjksIHI4KSwgKHIxLCByMCkJLyogQWRkIG92ZXJmbG93 IHRvIHRoZSBsb3cgYml0cyAqLworCXBvcHJldAkkMywgcjcJCS8qIFJldHVy biAqLworCQorTDM6CW1vdmQgJDAsIChyMywgcjIpCS8qIFJlc2V0IHRoZSBo aWdoIGJpdCAqLworCW1vdmQgKHI5LCByOCksIChyMSwgcjApCS8qIEFkZCB0 aGUgb3ZlcmZsb3cgZnJvbSB0aGUgaGlnaCBiaXQgKi8KKwlwb3ByZXQJJDMs IHI3CQkvKiBSZXR1cm4gKi8KKyNlbmRpZgorCisjaWZkZWYgTF9tb2RkaTMK KwkudGV4dAorCS5hbGlnbiA0CisJLmdsb2JsIF9fX21vZGRpMworCitfX19t b2RkaTM6CisJcHVzaAkkNCwgcjcsIHJhCisKKworCS8qIFBhcmFtICMxIExv bmcgTG9uZyBsb3cgYml0IGZpcnN0ICovCisJbG9hZGQJMTIoc3ApLCAocjEs IHIwKQorCWxvYWRkCTE2KHNwKSwgKHIzLCByMikKKworCS8qIFBhcmFtICMy IExvbmcgTG9uZyBsb3cgYml0IGZpcnN0ICovCisJbG9hZGQJMjAoc3ApLCAo cjUsIHI0KQorCWxvYWRkCTI0KHNwKSwgKHI3LCByNikKKwkKKwlzdWJkCSQx OCwgKHNwKQorCisJLyogU2V0IG5lZyB0byAwICovCisJc3RvcncgJDAsIDE2 KHNwKQorCQorCW1vdmQJJC0xLCAocjksIHI4KSAJLyogVGVtcCBzZXQgdG8g RkZGRkZGRkYgKi8KKworCS8qIENvbXBhcmUgaWYgcGFyYW0xIGlzIGdyZWF0 ZXIgdGhhbiAwICovCQorCWNtcHcgJDAsIHIzCisJYmxlIEw0CisKKwkvKiBJ bnZlcnQgcGFyYW0xIGFuZCBuZWcgKi8KKwl4b3JkIChyOSwgcjgpLCAocjEs IHIwKQkvKiBYb3IgbG93IGJpdHMgb2YgcGFyYW0gMSB3aXRoIHRlbXAgKi8K Kwl4b3JkIChyOSwgcjgpLCAocjMsIHIyKQkvKiBYb3IgaGlnaCBiaXRzIG9m IHBhcmFtIDEgd2l0aCB0ZW1wICovCisJYWRkZCAkMSwgKHIxLCByMCkJLyog QWRkIDEgdG8gbG93IGJpdHMgb2YgcGFyYW0gMSAqLworCXN0b3J3ICQxLCAx NihzcCkKKwliY2MgTDQJCQkvKiBJZiBubyBjYXJyeSBvY2N1cnJlZCBnbyB0 byBMNCAqLworCWFkZGQgJDEsIChyMywgcjIpCS8qIEFkZCAxIHRvIGhpZ2gg Yml0cyBvZiBwYXJhbSAxICovCisKK0w0OglzdG9yZCAocjEsIHIwKSwgMChz cCkKKwlzdG9yZCAocjMsIHIyKSwgNChzcCkKKwkKKwkvKiBDb21wYXJlIGlm IHBhcmFtMiBpcyBncmVhdGVyIHRoYW4gMCAqLwkKKwljbXB3ICQwLCByNwor CWJsZSBMNQorCisJLyogSW52ZXJ0IHBhcmFtMiBhbmQgbmVnICovCisJeG9y ZCAocjksIHI4KSwgKHI1LCByNCkJLyogWG9yIGxvdyBiaXRzIG9mIHBhcmFt IDIgd2l0aCB0ZW1wICovCisJeG9yZCAocjksIHI4KSwgKHI3LCByNikJLyog WG9yIGhpZ2ggYml0cyBvZiBwYXJhbSAyIHdpdGggdGVtcCAqLworCWFkZGQg JDEsIChyNSwgcjQpCS8qIEFkZCAxIHRvIGxvdyBiaXRzIG9mIHBhcmFtIDIg Ki8KKwliY2MgTDUJCQkvKiBJZiBubyBjYXJyeSBvY2N1cnJlZCBnbyB0byBM NSAqLworCWFkZGQgJDEsIChyNywgcjYpCS8qIEFkZCAxIHRvIGhpZ2ggYml0 cyBvZiBwYXJhbSAyICovCisKK0w1OglzdG9yZCAocjUsIHI0KSwgOChzcCkK KwlzdG9yZCAocjcsIHI2KSwgMTIoc3ApCisJbW92dyAkMSwgcjIKKworCS8q IENhbGwgdWRpdm1vZGRpMyAqLworI2lmZGVmIF9fUElDX18KKwlsb2FkZAlf X191ZGl2bW9kZGkzQGNHT1QocjEyKSwgKHIxLHIwKQorCWphbAkocjEscjAp CisjZWxzZQorCWJhbCAocmEpLCBfX191ZGl2bW9kZGkzCisjZW5kaWYKKwor CS8qIElmIChuZWcpICovCisJbG9hZHcgMTYoc3ApLCByMTAJLyogTG9hZCBu ZWcgZnJvbSBzdGFjayAqLworCWFkZGQJJDE4LCAoc3ApCisJY21wdyAkMCwg cjEwCQkvKiBDb21wYXJlIDAgd2l0aCBuZWcgKi8KKwliZXEJTGV4aXRfXwor CQorCS8qIE5lZyA9IC1OZWcgKi8KKwl4b3JkIChyOSwgcjgpLCAocjEsIHIw KQkvKiBYb3IgbG93IGJpdHMgb2YgdXJlcyB3aXRoIHRlbXAgKi8KKwl4b3Jk IChyOSwgcjgpLCAocjMsIHIyKQkvKiBYb3IgaGlnaCBiaXRzIG9mIHVyZXMg d2l0aCB0ZW1wICovCisJYWRkZCAkMSwgKHIxLCByMCkJLyogQWRkIDEgdG8g bG93IGJpdHMgb2YgdXJlcyAqLworCWJjYwlMZXhpdF9fCisJYWRkZCAkMSwg KHIzLCByMikJLyogQWRkIDEgdG8gaGlnaCBiaXQgb2YgdXJlcyAqLworTGV4 aXRfXzoKKyMgIGlmZGVmIF9fSURfU0hBUkVEX0xJQl9fCisJcG9wCSQyLCBy MTIKKyMgIGVuZGlmCisJcG9wcmV0CSQ0LCByNywgcmEKKyNlbmRpZgorCisj aWZkZWYgTF9tdWxkaTMKKwkudGV4dAorCS5hbGlnbiA0CisJLmdsb2JsIF9f X211bGRpMworCitfX19tdWxkaTM6CisJcHVzaAkkMiwgcjEzCisJcHVzaAkk NywgcjcKKwkvKiBQYXJhbSAjMSBMb25nIExvbmcgbG93IGJpdCBmaXJzdCAq LworCWxvYWRkICAgMTgoc3ApLCAocjEsIHIwKQorCWxvYWRkICAgMjIoc3Ap LCAocjMsIHIyKQorCisJLyogUGFyYW0gIzIgTG9uZyBMb25nIGxvdyBiaXQg Zmlyc3QgKi8KKwlsb2FkZCAgIDI2KHNwKSwgKHI1LCByNCkKKwlsb2FkZCAg IDMwKHNwKSwgKHI3LCByNikKKworCS8qIENsZWFyIHIxMywgcjEyICovCQor CW1vdmQgJDAsIChyMTIpCQorCW1vdmQgJDAsIChyMTMpCisKKwkvKiBTZXQg bmVnICovCisJbW92dyAkMCwgcjEwCisKKwkvKiBDb21wYXJlIGlmIHBhcmFt MSBpcyBncmVhdGVyIHRoYW4gMCAqLwkKKwljbXB3ICQwLCByMworCWJsZSBM MQorCisJLyogSW52ZXJ0IHBhcmFtMSBhbmQgbmVnICovCisJbW92ZCAkLTEs IChyOSwgcjgpIAkvKiBUZW1wIHNldCB0byBGRkZGRkZGRiAqLworCXhvcmQg KHI5LCByOCksIChyMSwgcjApCS8qIFhvciBsb3cgYml0cyBvZiBwYXJhbSAx IHdpdGggdGVtcCAqLworCXhvcmQgKHI5LCByOCksIChyMywgcjIpCS8qIFhv ciBoaWdoIGJpdHMgb2YgcGFyYW0gMSB3aXRoIHRlbXAgKi8KKwlhZGRkICQx LCAocjEsIHIwKQkvKiBBZGQgMSB0byBsb3cgYml0cyBvZiBwYXJhbSAxICov CisJeG9ydyAkMSwgcjEwCQkvKiBJbnZlcnQgbmVnICovCisJYmNjIEwxCQkJ LyogSWYgbm8gY2Fycnkgb2NjdXJyZWQgZ28gdG8gTDEgKi8KKwlhZGRkICQx LCAocjMsIHIyKQkvKiBBZGQgMSB0byBoaWdoIGJpdHMgb2YgcGFyYW0gMSAq LworCitMMToJLyogQ29tcGFyZSBpZiBwYXJhbTIgaXMgZ3JlYXRlciB0aGFu IDAgKi8JCisJY21wdyAkMCwgcjcKKwlibGUgTDIJCisJCisJLyogSW52ZXJ0 IHBhcmFtMiBhbmQgbmVnICovCisJbW92ZCAkLTEsIChyOSwgcjgpCS8qIFRl bXAgc2V0IHRvIEZGRkZGRkZGICovCisJeG9yZCAocjksIHI4KSwgKHI1LCBy NCkJLyogWG9yIGxvdyBiaXRzIG9mIHBhcmFtIDIgd2l0aCB0ZW1wICovCisJ eG9yZCAocjksIHI4KSwgKHI3LCByNikJLyogWG9yIGhpZ2ggYml0cyBvZiBw YXJhbSAyIHdpdGggdGVtcCAqLworCWFkZGQgJDEsIChyNSwgcjQpCS8qIEFk ZCAxIHRvIGxvdyBiaXRzIG9mIHBhcmFtIDIgKi8KKwl4b3J3ICQxLCByMTAJ CS8qIEludmVydCBuZWcgKi8KKwliY2MgTDIJCQkvKiBJZiBubyBjYXJyeSBv Y2N1cnJlZCBnbyB0byBMMiAqLworCWFkZGQgJDEsIChyNywgcjYpCS8qIEFk ZCAxIHRvIGhpZ2ggYml0cyBvZiBwYXJhbSAyICovCisJCitMMjoJc3Rvcncg cjEwLCAxOChzcCkJLyogU3RvcmUgbmVnIHRvIHN0YWNrIHNvIHdlIGNhbiB1 c2UgcjEwICovCisKKwkvKiBCKkQgKi8KKwkvKiBCbCpEbCAqLworCW1hY3V3 IHIwLCByNCwgKHIxMikJLyogTXVsdGlwbHkgcjAgYW5kIHI0IGFuZCBhZGQg dG8gcjEyICovCisJCQorCS8qIEJoKkRsICovCisJbW92ZCAkMCwgKHI5LCBy OCkJLyogQ2xlYXIgcjksIHI4ICovCisJbWFjdXcgcjEsIHI0LCAocjksIHI4 KQkvKiBNdWx0aXBseSBCaCpEbCBhbmQgYWRkIHJlc3VsdCB0byAocjksIHI4 KSAqLworCW1vdncgcjksICByMTAJCS8qIFNoaWZ0IGxlZnQ6IHI5IHRvIHIx MCAqLworCWxzaGQgJDE2LCAocjksIHI4KQkvKiBTaGlmdCBsZWZ0OiByOCB0 byByOSAqLworCW1vdncgJDAsIHIxMQkJLyogQ2xlYXIgcjExICovCisJYWRk ZCAocjksIHI4KSwgKHIxMikJLyogQWRkIChyOSwgcjgpIHRvIHIxMiAqLwor CWJjYyBMMwkJCS8qIElmIG5vIGNhcnJ5IG9jY3VycmVkIGdvIHRvIEwzICov CisJYWRkZCAkMSwgKHIxMykJCS8qIElmIGNhcnJ5IG9jY3VycmVkIGFkZCAx IHRvIHIxMyAqLworCitMMzoJYWRkZCAocjExLCByMTApLCAocjEzKQkvKiBB ZGQgKHIxMSwgcjEwKSB0byByMTMgKi8KKwkJCisJLyogQmwqRGggKi8KKwlt b3ZkICQwLCAocjksIHI4KQkvKiBDbGVhciAocjksIHI4KSAqLworCW1hY3V3 IHIwLCByNSwgKHI5LCByOCkJLyogTXVsdGlwbHkgcjAgYW5kIHI1IGFuZCBz dG9yIGluIChyOSwgcjgpICovCisJbW92dyByOSwgcjEwCQkvKiBTaGlmdCBs ZWZ0OiByOSB0byByMTAgKi8KKwlsc2hkICQxNiwgKHI5LCByOCkJLyogU2hp ZnQgbGVmdDogcjggdG8gcjkgKi8KKwlhZGRkIChyOSwgcjgpLCAocjEyKQkv KiBBZGQgKHI5LCByOCkgdG8gcjEyICovCisJYmNjIEw0CQkJLyogSWYgbm8g Y2Fycnkgb2NjdXJyZWQgZ28gdG8gTDQgKi8gCisJYWRkZCAkMSwgKHIxMykJ CS8qIElmIGNhcnJ5IG9jY3VycmVkIGFkZCAxIHRvIHIxMyAqLworCitMNDoJ YWRkZCAocjExLCByMTApLCAocjEzKQkvKiBBZGQgKHIxMSwgcjEwKSB0byBy MTMgKi8KKworCS8qIEJoKkRoICovCisJbW92ZCAkMCwgKHI5LCByOCkJLyog Q2xlYXIgKHI5LCByOCkgKi8KKwltYWN1dyByMSwgcjUsIChyOSwgcjgpCS8q IE11bHRpcGx5IHIxIGFuZCByNSBhbmQgYWRkIHRvIHIxMyAqLworCWFkZGQg KHI5LCByOCksIChyMTMpCS8qIEFkZCAocjksIHI4KSB0byByZXN1bHQgKi8K KworCS8qIEEqRCAqLworCS8qIEFsKkRsICovCisJbW92ZCAkMCwgKHIxMSwg cjEwKQkvKiBDbGVhciAocjExLCByMTApICovCisJbWFjdXcgcjIsIHI0LCAo cjExLCByMTApLyogTXVsdGlwbHkgcjIgYW5kIHI0IGFuZCBhZGQgdG8gKHIx MSwgcjEwKSAqLworCQorCWFkZGQgKHIxMyksIChyMTEsIHIxMCkJLyogQ29w eSByMTMgdG8gKHIxMSwgcjEwKSAqLworCisJLyogQWwqRGggKi8KKwltb3Zk ICQwLCAocjksIHI4KQkvKiBDbGVhciAocjksIHI4KSAqLworCW1hY3V3IHIy LCByNSwgKHI5LCByOCkJLyogTXVsdGlwbHkgcjIgYW5kIHI1IGFuZCBhZGQg dG8gKHI5LCByOCkgKi8KKwlhZGR3IHI4LCByMTEJCS8qIEFkZCByOCB0byBy MTEgKi8KKwkKKwkvKiBBaCpEbCAqLworCW11bHV3IHIzLCAocjUsIHI0KQkv KiBNdWx0aXBseSByMyBhbmQgcjQgYW5kIHN0b3IgaW4gKHI1LCByNCkgKi8K KwlhZGR3IHI0LCByMTEJCS8qIEFkZCByNCB0byByMTEgKi8KKworCS8qIEIq QyAqLworCS8qIEJsKkNsICovCisJbW92ZCAkMCwgKHI5LCByOCkJLyogQ2xl YXIgKHI5LCByOCkgKi8KKwltYWN1dyByMCwgcjYsIChyOSwgcjgpCS8qIE11 bHRpcGx5IHIwIGFuZCByNiBhbmQgYWRkIHRvIChyOSwgcjgpICovCisJYWRk ZCAocjksIHI4KSwgKHIxMSwgcjEwKS8qIEFkZCAocjksIHI4KSB0byByZXN1 bHQgKi8KKworCS8qIEJsKkNoICovCisJbW92ZCAkMCwgKHI5LCByOCkJLyog Q2xlYXIgKHI5LCByOCkgKi8KKwltYWN1dyByMCwgcjcsIChyOSwgcjgpCS8q IE11bHRpcGx5IHIwIGFuZCByNyBhbmQgYWRkIHRvIChyOSwgcjgpICovCisJ YWRkdyByOCwgcjExCQkvKiBBZGQgcjggdG8gcjExICovCisKKwlsb2FkdyAx OChzcCksIHI4CS8qIExvYWQgbmVnIGZyb20gc3RhY2sgKi8KKworCS8qIEJo KkNsICovCisJbXVsdXcgcjEsIChyNywgcjYpCS8qIE11bHRpcGx5IHIxIGFu ZCByNiBhbmQgc3RvciBpbiAocjcsIHI2KSAqLworCWFkZHcgcjYsIHIxMQkJ LyogQWRkIHI2IHRvIHIxMSAqLworCitFMToJbW92ZCAocjExLCByMTApLCAo cjMsIHIyKQorCW1vdmQgKHIxMiksIChyMSwgcjApCQorCisJLyogSWYgKG5l ZykgKi8KKwljbXB3ICQwLCByOAkJLyogQ29tcGFyZSAwIHdpdGggbmVnICov CisJYmVxCUxleGl0X18KKwkKKwkvKiBOZWcgPSAtTmVnICovCisJbW92ZCAk LTEsIChyOSwgcjgpIAkvKiBUZW1wIHNldCB0byBGRkZGRkZGRiAqLworCXhv cmQgKHI5LCByOCksIChyMSwgcjApCS8qIFhvciBsb3cgYml0cyBvZiByZXN1 bHQgd2l0aCB0ZW1wICovCisJeG9yZCAocjksIHI4KSwgKHIzLCByMikgLyog WG9yIGhpZ2ggYml0cyBvZiByZXN1bHQgd2l0aCB0ZW1wICovCisJYWRkZCAk MSwgKHIxLCByMCkJLyogQWRkIDEgdG8gbG93IGJpdHMgb2YgcmVzdWx0ICov CisJYmNjCUxleGl0X18KKwlhZGRkICQxLCAocjMsIHIyKQkvKiBBZGQgMSB0 byBoaWdoIGJpdCBvZiByZXN1bHQgKi8KK0xleGl0X186CisJcG9wCSQ3LCBy NworCXBvcHJldAkkMiwgcjEzCisjZW5kaWYKKworI2lmZGVmIExfbmVnZGky CisJLnRleHQKKwkuYWxpZ24gNAorCS5nbG9ibCBfX19uZWdkaTIKKworX19f bmVnZGkyOgorCS8qIExvYWQgcGFyYW1ldGVyIGZyb20gdGhlIHJlZ2lzdGVy cyBpbiB0aGlzIG9yZGVyICovCisJbG9hZGQgMChzcCksIChyMSwgcjApCisJ bG9hZGQgNChzcCksIChyMywgcjIpCisJCisJbW92ZCAkLTEsIChyNiwgcjUp CS8qIFNldCB0ZW1wIHRvIEZGRkZGRkZGICovCisJeG9yZCAocjYsIHI1KSwg KHIxLCByMCkJLyogWG9yIGxvdyBiaXRzIHdpdGggdGVtcCAqLworCXhvcmQg KHI2LCByNSksIChyMywgcjIpCS8qIFhvciBoaWdoIGJpdHMgd2l0aCB0ZW1w ICovCisJYWRkZCAkMSwgKHIxLCByMCkJLyogQWRkIG9uZSAqLworCWpjYyAo cmEpCisJYWRkZCAkMSwgKHIzLCByMikJLyogQWRkIHRoZSBjYXJyeSB0byB0 aGUgaGlnaCBiaXRzICovCisJanVtcCAocmEpCisjZW5kaWYKKworI2lmZGVm IExfdWRpdmRpMworCS50ZXh0CisJLmFsaWduIDQKKwkuZ2xvYmwgX19fdWRp dmRpMworCitfX191ZGl2ZGkzOgorCW1vdncgJDAsIHIyCisJYnIgX19fdWRp dm1vZGRpMworI2VuZGlmCisKKyNpZmRlZiBMX3VkaXZtb2RkaTMKKwkudGV4 dAorCS5hbGlnbiA0CisJLmdsb2JsIF9fX3VkaXZtb2RkaTMKKworX19fdWRp dm1vZGRpMzoKKwlwdXNoCSQyLCByMTMKKwlwdXNoCSQ3LCByNworCisJLyog UGFyYW0gIzEgTG9uZyBMb25nIGxvdyBiaXQgZmlyc3QgKi8KKwlsb2FkZAkx OChzcCksIChyMSwgcjApCisJc3RvcncJcjIsIDE4KHNwKQkvKiBTdG9yZSBt b2R1bG8gb24gc3RhY2sgKi8KKwlsb2FkZAkyMihzcCksIChyMywgcjIpCisK KwkvKiBQYXJhbSAjMiBMb25nIExvbmcgbG93IGJpdCBmaXJzdCAqLworCWxv YWRkCTI2KHNwKSwgKHI1LCByNCkKKwlsb2FkZAkzMChzcCksIChyNywgcjYp CisKKwkvKiBTZXQgdXJlcyB0byAwICovCisJbW92ZCAkMCwgKHIxMykKKwlt b3ZkICQwLCAocjEyKQorCQorCWNtcGQgKHIxMiksIChyNSwgcjQpCisJYmVx IExFCisKK0w1Ogltb3ZkICQxLCAocjksIHI4KQkvKiBTdG9yZSAxIGluIGxv dyBiaXRzIGZyb20gYml0ICovCisJbW92ZCAkMCwgKHIxMSwgcjEwKQkvKiBT dG9yZSAwIGluIGhpZ2ggYml0cyBmcm9tIGJpdCAqLworCQorTDY6CS8qIFdo aWxlIChkZW4gPCBudW0gJiYgKCFkZW4gJiAoMUxMPDw2MykpKSAqLworCS8q IENvbXBhcmUgaGlnaCBiaXRzIGZyb20gcGFyYW0gMSBhbmQgcGFyYW0gMiAq LworCWNtcGQgKHI3LCByNiksIChyMywgcjIpCQorCWJoaSBMMTAJCQkvKiBJ ZiBwYXJhbSAyIGlzIGdyZWF0ZXIgZ28gdG8gTDEwICovCisJYm5lIEw4CQkJ LyogSWYgcGFyYW0gMSBpcyBncmVhdGVyIGdvIHRvIEw4ICovCisJY21wZCAo cjUsIHI0KSwgKHIxLCByMCkJLyogQ29tcGFyZSBsb3cgYml0cyBmcm9tIHBh cmFtIDEgYW5kIHBhcmFtIDIgKi8KKwkvKiAgSWYgcGFyYW0gMiBpcyBncmVh dGVyIG9yIHRoZSBzYW1lIGdvIHRvIEwxICovCisJYmhzIEwxMAkJCSAKKwor TDg6CS8qIENoZWNrIGlmIG1vc3Qgc2lnbmlmaWNhbnQgYml0IG9mIHBhcmFt IDIgaXMgc2V0ICovCisJdGJpdCAkMTUsIHI3CQkKKwliZnMgTDEwCQkJLyog SWYgUFNSIGlzIHNldCBnbyB0byBMMTAgKi8KKworCS8qIFNoaWZ0IGJpdCAq LworCWxzaGQgJDEsIChyMTEsIHIxMCkJLyogU2hpZnQgbGVmdDogaGlnaCBi aXRzIG9mIGJpdCAqLyAKKwkvKiBDaGVjayBpZiBtb3N0IHNpZ25pZmljYW50 IGJpdCBvZiBiaXQgaXMgc2V0ICovCisJdGJpdCAkMTUsIHI5CQkKKwlsc2hk ICQxLCAocjksIHI4KQkvKiBTaGlmdCBsZWZ0OiBsb3cgYml0cyBvZiBiaXQg Ki8KKwliZnMgTDI4CQkJLyogSWYgUFNSIGlzIHNldCBnbyB0byBMMjggKi8K KworTDk6CS8qIFNoaWZ0IGIgKi8KKwlsc2hkICQxLCAocjcsIHI2KQkvKiBT aGlmdCBsZWZ0OiBoaWdoIGJpdHMgb2YgcGFyYW0gMiAqLworCS8qIENoZWNr IGlmIG1vc3Qgc2lnbmlmaWNhbnQgYml0IG9mIHBhcmFtIDIgaXMgc2V0ICov CisJdGJpdCAkMTUsIHI1CQkKKwlsc2hkICQxLCAocjUsIHI0KQkvKiBTaGlm dCBsZWZ0OiBsb3cgYml0cyBvZiBwYXJhbSAyICovCisJYmZjIEw2CQkJLyog SWYgUFNSIGlzIHNldCBnbyB0byBMNiAqLworCWFkZHcgJDEsIHI2CQkvKiBB ZGQgMSB0byB0aGUgaGlnaGVzdCBiaXRzIG9mIGIgKi8KKwliciBMNgkJCS8q IEdvIHRvIEw2ICovCisJCitMMTA6CS8qIFdoaWxlIChiaXQpICovCisJY21w ZCAkMCwgKHIxMSwgcjEwKQkKKwlibmUgTDExCisJY21wZCAkMCwgKHI5LCBy OCkKKwliZXEgRTEKKworTDExOgkvKiBJZiAobnVtID49IGRlbikgKi8KKwlj bXBkIChyMywgcjIpLCAocjcsIHI2KQkvKiBDb21wYXJlIGhpZ2ggYml0cyBv ZiBwYXJhbSAxIGFuZCBwYXJhbSAyICovCisJYmxvIEwxNQkJCS8qIElmIHBh cmFtIDEgbG93ZXIgdGhhbiBwYXJhbSAyIGdvIHRvIEwxNSAqLworCWJuZSBM MTIJCQkvKiBJZiBub3QgZXF1YWwgZ28gdG8gTDEyICovCQorCWNtcGQgKHIx LCByMCksIChyNSwgcjQpCS8qIENvbXBhcmUgbG93IGJpdHMgb2YgcGFyYW0g MSBhbmQgcGFyYW0gMiAqLworCWJsbyBMMTUJCQkvKiBJZiBwYXJhbSAxIGxv d2VyIHRoYW4gcGFyYW0gMiBnbyB0byBMMTUgKi8KKworTDEyOgkvKiBVcmVz IHw9IGJpdCAqLworCW9yZCAocjExLCByMTApLCAocjEzKQorCW9yZCAocjks IHI4KSwgKHIxMikJCisKKwkvKiBOdW0gLT0gZGVuICovCisJc3ViZCAocjcs IHI2KSwgKHIzLCByMikgLyogU3VidHJhY3QgaGlnaGVzdCAzMiBiaXRzIGZy b20gZWFjaCBvdGhlciAqLworCXN1YmQgKHI1LCByNCksIChyMSwgcjApCS8q IFN1YnRyYWN0IGxvd2VzdCAzMiBiaXRzIGZyb20gZWFjaCBvdGhlciAqLwor CWJjYyBMMTUJCQkvKiBJZiBubyBjYXJyeSBvY2N1cnJlZCBnbyB0byBMMTUg Ki8KKwlzdWJkICQxLCAocjMsIHIyKQkvKiBTdWJ0cmFjdCB0aGUgY2Fycnkg Ki8KKworCQorTDE1OgkvKiBTaGlmdCBiaXQgdG8gdGhlIHJpZ2h0ICovCisJ bHNoZCAkLTEsIChyOSwgcjgpCS8qIFNoaWZ0IHJpZ2h0OiBsb3cgYml0cyBv ZiBiaXQgKi8KKwkvKiBDaGVjayBpZiBsZWFzdCBzaWduaWZpY2FudCBiaXQg b2YgaGlnaCBiaXRzIGlzIHNldCAqLworCXRiaXQgJDAsIHIxMAkJCisJbHNo ZCAkLTEsIChyMTEsIHIxMCkJLyogU2hpZnQgcmlnaHQ6IGhpZ2ggYml0cyBv ZiBiaXQgKi8KKwliZnMgTDE4CQkJLyogSWYgUFNSIGlzIHNldCBnbyB0byBM MTggKi8KKworTDE3OgkvKiBTaGlmdCBwYXJhbSMyIHRvIHRoZSByaWdodCAq LworCWxzaGQgJC0xLCAocjUsIHI0KQkvKiBTaGlmdCByaWdodDogbG93IGJp dHMgb2YgcGFyYW0gMiAqLworCS8qIENoZWNrIGlmIGxlYXN0IHNpZ25pZmlj YW50IGJpdCBvZiBoaWdoIGJpdHMgaXMgc2V0ICovCisJdGJpdCAkMCwgcjYJ CQorCWxzaGQgJC0xLCAocjcsIHI2KQkvKiBTaGlmdCByaWdodDogaGlnaCBi aXRzIG9mIHBhcmFtIDIgKi8KKwliZmMgTDEwCQkJLyogSWYgUFNSIGlzIG5v dCBzZXQgZ28gdG8gTDEwICovCisJLyogT3Igd2l0aCAweDgwMDAgdG8gc2V0 IG1vc3Qgc2lnbmlmaWNhbnQgYml0ICovCisJb3J3ICQzMjc2OCwgcjUJCQor CWJyIEwxMAkJCS8qIEdvIHRvIEwxMCAqLworCisKK0wxODoJLyogT3Igd2l0 aCAweDgwMDAgdG8gc2V0IG1vc3Qgc2lnbmlmaWNhbnQgYml0ICovCisJb3J3 ICQzMjc2OCwgcjkJCQorCWJyIEwxNworCisKK0wyODogCS8qIExlZnQgc2hp ZnQgYml0ICovCisJYWRkdyAkMSwgcjEwCQkvKiBBZGQgMSB0byBoaWdoZXN0 IGJpdHMgb2YgYml0ICovCisJYnIgTDkJCQkvKiBHbyB0byBMOSAqLworCitM RToJY21wZCAocjEyKSwgKHI3LCByNikKKwlibmUgTDUKKwlleGNwIGR2egor CWJyCUxleGl0X18KKworRTE6CWxvYWR3CTE4KHNwKSwgcjQKKwljbXB3ICQw LCByNAorCWJuZQlMZXhpdF9fCisKKwkvKiBSZXR1cm4gcmVzdWx0ICovCisJ bW92ZCAocjEyKSwgKHIxLCByMCkKKwltb3ZkIChyMTMpLCAocjMsIHIyKQor TGV4aXRfXzoKKwlwb3AJJDcsIHI3CisJcG9wcmV0CSQyLCByMTMKKyNlbmRp ZgorCisjaWZkZWYgTF91bW9kZGkzCisJLnRleHQKKwkuYWxpZ24gNAorCS5n bG9ibCBfX191bW9kZGkzCisKK19fX3Vtb2RkaTM6CisJbW92dyAkMSwgcjIK KwliciBfX191ZGl2bW9kZGkzCisjZW5kaWYKKwotLS0gb3JpZy9nY2MvY29u ZmlnL2NyMTYvY3IxNi5tZAkxOTcwLTAxLTAxIDA1OjMwOjAwLjAwMDAwMDAw MCArMDUzMAorKysgbW9kL2djYy9jb25maWcvY3IxNi9jcjE2Lm1kCTIwMTEt MDYtMjggMTI6MzQ6MzQuMDAwMDAwMDAwICswNTMwCkBAIC0wLDAgKzEsMTI3 MSBAQAorOzsgR0NDIG1hY2hpbmUgZGVzY3JpcHRpb24gZm9yIENSMTYuCis7 OyBDb3B5cmlnaHQgKEMpIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u LCBJbmMuCis7OyBDb250cmlidXRlZCBieSBLUElUIEN1bW1pbnMgSW5mb3N5 c3RlbXMgTGltaXRlZC4KKworOzsgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0ND LgorCis7OyBHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorOzsgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNo ZWQgYnkKKzs7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl ciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKzs7IGFueSBsYXRl ciB2ZXJzaW9uLgorCis7OyBHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKzs7IEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5 IG9mIE1FUkNIQU5UQUJJTElUWQorOzsgb3IgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwor OzsgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCis7OyBZb3Ugc2hvdWxk IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZQorOzsgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBD T1BZSU5HMy4gIElmIG5vdCBzZWUKKzs7IDxodHRwOi8vd3d3LmdudS5vcmcv bGljZW5zZXMvPi4gCisKKzs7ICBSZWdpc3RlciBudW1iZXJzCisoZGVmaW5l X2NvbnN0YW50cworICBbKFNQX1JFR05VTSAxNSk7IFN0YWNrIHBvaW50ZXIK KyAgIChSQV9SRUdOVU0gMTQpOyBSZXR1cm4gYWRkcmVzcworICBdCispCisK Kzs7IFByZWRpY2F0ZXMgJiBDb25zdHJhaW50cworKGluY2x1ZGUgInByZWRp Y2F0ZXMubWQiKQorKGluY2x1ZGUgImNvbnN0cmFpbnRzLm1kIikKKworOzsg VU5TUEVDIHVzYWdlCisoZGVmaW5lX2NvbnN0YW50cworICBbKFVOU1BFQ19Q SUNfQUREUiAgICAgICAgICAgICAwKQorICAgKFVOU1BFQ19QSUNfTE9BRF9B RERSICAgICAgICAxKQorICAgKFVOU1BFQ19MSUJSQVJZX09GRlNFVCAgICAg ICAyKQorICAgKFVOU1BFQ19TSF9MSUJfUFVTSF9SMTIgICAgICAzKQorICAg KFVOU1BFQ19TSF9MSUJfUE9QX1IxMiAgICAgICA0KQorICAgKFVOU1BFQ19S RVRVUk5fQUREUiAgICAgICAgICA1KQorICBdCispCisKKzs7IEF0dHJpYnV0 ZXMKKyhkZWZpbmVfYXR0ciAibGVuZ3RoIiAiIiAoY29uc3RfaW50IDIpKQor CisoZGVmaW5lX2FzbV9hdHRyaWJ1dGVzCisgIFsoc2V0X2F0dHIgImxlbmd0 aCIgIjIiKV0KKykKKworOzsgIE1vZGUgTWFjcm8gRGVmaW5pdGlvbnMKKyhk ZWZpbmVfbW9kZV9pdGVyYXRvciBDUjE2SU0gW1FJIEhJIFNJXSkKKyhkZWZp bmVfbW9kZV9pdGVyYXRvciBMT05HICAgW1NJIFNGXSkKKyhkZWZpbmVfbW9k ZV9pdGVyYXRvciBBTExNVEQgW1FJIEhJIFNJIFNGIERJIERGXSkKKyhkZWZp bmVfbW9kZV9pdGVyYXRvciBET1VCTEUgW0RJIERGXSkKKyhkZWZpbmVfbW9k ZV9pdGVyYXRvciBTSE9SVCAgW1FJIEhJXSkKKyhkZWZpbmVfbW9kZV9hdHRy IHRJc2EgICAgICBbKFFJICJiIikgKEhJICJ3IikgKFNJICJkIikgKFNGICJk IildKQorKGRlZmluZV9tb2RlX2F0dHIgbEltbUFyaXRoICBbKFFJICI0Iikg KEhJICI0IikgKFNJICI2IikgKFNGICI2IildKQorKGRlZmluZV9tb2RlX2F0 dHIgbEltbUFyaXRoRCBbKFFJICI0IikgKEhJICI0IikgKFNJICI2IikgKFNG ICI2IikgKERJICIxMiIpIChERiAiMTIiKV0pCisoZGVmaW5lX21vZGVfYXR0 ciBpRiAgICAgICAgWyhRSSAiaSIpIChISSAiaSIpIChTSSAiaSIpIChTRiAi RiIpXSkKKyhkZWZpbmVfbW9kZV9hdHRyIGlGRCAgICAgICBbKERJICJpIikg KERGICJGIildKQorKGRlZmluZV9tb2RlX2F0dHIgTEwgICAgICAgIFsoUUkg IkwiKSAoSEkgIkwiKV0pCisoZGVmaW5lX21vZGVfYXR0ciBzaEltbUJpdHMJ WyhRSSAiMyIpIChISSAiNCIpIChTSSAiNSIpXSkKKworOyBJbiBRSSBtb2Rl IHdlIHB1c2ggMiBieXRlcyBpbnN0ZWFkIG9mIDEgYnl0ZS4KKyhkZWZpbmVf bW9kZV9hdHRyIHB1c2hDbnN0ciBbKFFJICJYIikgKEhJICI8IikgKFNJICI8 IikgKFNGICI8IikgKERJICI8IikgKERGICI8IildKQorOyB0cHVzaCB3aWxs IGJlIHVzZWQgdG8gZ2VuZXJhdGUgdGhlICdudW1iZXIgb2YgcmVnaXN0ZXJz IHRvIHB1c2gnIGluIHRoZSAKKzsgcHVzaCBpbnN0cnVjdGlvbi4KKyhkZWZp bmVfbW9kZV9hdHRyIHRwdXNoIFsoUUkgIjEiKSAoSEkgIjEiKSAoU0kgIjIi KSAoU0YgIjIiKSAoREkgIjQiKSAoREYgIjQiKV0pCisKKzs7ICBDb2RlIE1h Y3JvIERlZmluaXRpb25zCisoZGVmaW5lX2NvZGVfaXRlcmF0b3Igc3pfeHRu ZCBbIHNpZ25fZXh0ZW5kICAgICAgIHplcm9fZXh0ZW5kXSkKKyhkZWZpbmVf Y29kZV9hdHRyICBzSXNhICAgIFsoc2lnbl9leHRlbmQgIiIpICAoemVyb19l eHRlbmQgInUiKV0pCisoZGVmaW5lX2NvZGVfYXR0ciAgc1BhdCAgICBbKHNp Z25fZXh0ZW5kICJzIikgKHplcm9fZXh0ZW5kICJ1IildKQorKGRlZmluZV9j b2RlX2F0dHIgIHN6UGF0ICAgWyhzaWduX2V4dGVuZCAiIikgICh6ZXJvX2V4 dGVuZCAiemVyb18iKV0pCisoZGVmaW5lX2NvZGVfYXR0ciAgc3pJc2EgICBb KHNpZ25fZXh0ZW5kICJ4IikgKHplcm9fZXh0ZW5kICJ6IildKQorKGRlZmlu ZV9jb2RlX2l0ZXJhdG9yIGFueV9jb25kIFtlcSBuZSBndCBndHUgbHQgbHR1 IGdlIGdldSBsZSBsZXVdKQorCis7OyBBcml0aG1ldGljIEluc3R1Y3Rpb24g IFBhdHRlcm5zCis7OworOzsgQWRkaXRpb24gaW5zbnMuCisoZGVmaW5lX2V4 cGFuZCAiYWRkZGkzIgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpESSAwICJy ZWdpc3Rlcl9vcGVyYW5kIiAiIikKKwkocGx1czpESSAobWF0Y2hfb3BlcmFu ZDpESSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikKKwkJIChtYXRjaF9vcGVy YW5kOkRJIDIgIm5vbm1lbW9yeV9vcGVyYW5kIiAiIikpKV0KKyAgIiIKKyAg eworICAgIGlmICgoR0VUX0NPREUgKG9wZXJhbmRzWzJdKSAhPSBSRUcpKQor ICAgICAgeworCW9wZXJhbmRzWzJdID0gZm9yY2VfcmVnIChESW1vZGUsIG9w ZXJhbmRzWzJdKTsKKyAgICAgIH0KKyAgfQorKQorCisoZGVmaW5lX2luc24g ImFkZGRpM19pbnNuIgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpESSAwICJy ZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQorCShwbHVzOkRJIChtYXRjaF9vcGVy YW5kOkRJIDEgInJlZ2lzdGVyX29wZXJhbmQiICIlMCIpCisJCSAobWF0Y2hf b3BlcmFuZDpESSAyICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpKSldCisgICIi CisgICIqCisgICAgcmV0dXJuIGNyMTZfZW1pdF9hZGRfc3ViX2RpIChvcGVy YW5kcywgMCk7CisgICIKKykKKworKGRlZmluZV9pbnNuICJhZGRzaTMiCisg IFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQi ICI9cixyLHIscixyIikKKwkocGx1czpTSSAobWF0Y2hfb3BlcmFuZDpTSSAx ICJyZWdpc3Rlcl9vcGVyYW5kIiAiJTAsMCwwLDAsMCIpCisJCSAobWF0Y2hf b3BlcmFuZDpTSSAyICJyZWdfc2lfaW50X29wZXJhbmQiICJyLE0sTixPLGki KSkpXQorICAiIgorICAiYWRkZFx0JTIsICUwIgorICBbKHNldF9hdHRyICJs ZW5ndGgiICIyLDIsNCw0LDYiKV0KKykKKworKGRlZmluZV9pbnNuICJhZGRo aTMiCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOkhJIDAgInJlZ2lzdGVyX29w ZXJhbmQiICI9YyxjLGMiKQorCShwbHVzOkhJIChtYXRjaF9vcGVyYW5kOkhJ IDEgInJlZ2lzdGVyX29wZXJhbmQiICIlMCwwLDAiKQorCQkgKG1hdGNoX29w ZXJhbmQ6SEkgMiAicmVnX2hpX2ludF9vcGVyYW5kIiAiYyxNLE4iKSkpXQor ICAiIgorICAiYWRkd1x0JTIsICUwIgorICBbKHNldF9hdHRyICJsZW5ndGgi ICIyLDIsNCIpXQorKQorCisoZGVmaW5lX2luc24gImFkZHFpMyIKKyAgWyhz ZXQgKG1hdGNoX29wZXJhbmQ6UUkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1j LGMiKQorCShwbHVzOlFJIChtYXRjaF9vcGVyYW5kOlFJIDEgInJlZ2lzdGVy X29wZXJhbmQiICIlMCwwIikKKwkJIChtYXRjaF9vcGVyYW5kOlFJIDIgInJl Z19xaV9pbnRfb3BlcmFuZCIgImMsTSIpKSldCisgICIiCisgICJhZGRiXHQl MiwgJTAiCisgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjIsMiIpXQorKQorCis7 OworOzsgIFN1YnRyYWN0IEluc3RydWN0aW9ucworKGRlZmluZV9leHBhbmQg InN1YmRpMyIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6REkgMCAicmVnaXN0 ZXJfb3BlcmFuZCIgIiIpCisJKG1pbnVzOkRJIChtYXRjaF9vcGVyYW5kOkRJ IDEgInJlZ2lzdGVyX29wZXJhbmQiICIiKQorCQkgIChtYXRjaF9vcGVyYW5k OkRJIDIgIm5vbm1lbW9yeV9vcGVyYW5kIiAiIikpKV0KKyAgIiIKKyAgewor ICAgIGlmICgoR0VUX0NPREUgKG9wZXJhbmRzWzJdKSAhPSBSRUcpKQorICAg ICAgeworCW9wZXJhbmRzWzJdID0gZm9yY2VfcmVnIChESW1vZGUsIG9wZXJh bmRzWzJdKTsKKyAgICAgIH0KKyAgfQorKQorCisoZGVmaW5lX2luc24gInN1 YmRpM19pbnNuIgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpESSAwICJyZWdp c3Rlcl9vcGVyYW5kIiAiPXIiKQorCShtaW51czpESSAobWF0Y2hfb3BlcmFu ZDpESSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiMCIpCisJCSAgKG1hdGNoX29w ZXJhbmQ6REkgMiAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKSkpXQorICAiIgor ICAiKgorICAgIHJldHVybiBjcjE2X2VtaXRfYWRkX3N1Yl9kaSAob3BlcmFu ZHMsIDEpOworICAiCispCisKKyhkZWZpbmVfaW5zbiAic3Vic2kzIgorICBb KHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAi PXIsciIpCisJKG1pbnVzOlNJIChtYXRjaF9vcGVyYW5kOlNJIDEgInJlZ2lz dGVyX29wZXJhbmQiICIwLDAiKQorCQkgIChtYXRjaF9vcGVyYW5kOlNJIDIg InJlZ19zaV9pbnRfb3BlcmFuZCIgInIsaSIpKSldCisgICIiCisgICJzdWJk XHQlMiwgJTAiCisgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjQsNiIpXQorKQor CisoZGVmaW5lX2luc24gInN1YmhpMyIKKyAgWyhzZXQgKG1hdGNoX29wZXJh bmQ6SEkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1jLGMsYyIpCisJKG1pbnVz OkhJIChtYXRjaF9vcGVyYW5kOkhJIDEgInJlZ2lzdGVyX29wZXJhbmQiICIw LDAsMCIpCisJCSAgKG1hdGNoX29wZXJhbmQ6SEkgMiAicmVnX2hpX2ludF9v cGVyYW5kIiAiYyxNLE4iKSkpXQorICAiIgorICAic3Vid1x0JTIsICUwIgor ICBbKHNldF9hdHRyICJsZW5ndGgiICIyLDIsNCIpXQorKQorCisoZGVmaW5l X2luc24gInN1YnFpMyIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6UUkgMCAi cmVnaXN0ZXJfb3BlcmFuZCIgIj1jLGMiKQorCShtaW51czpRSSAobWF0Y2hf b3BlcmFuZDpRSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiMCwwIikKKwkJICAo bWF0Y2hfb3BlcmFuZDpRSSAyICJyZWdfcWlfaW50X29wZXJhbmQiICJjLE0i KSkpXQorICAiIgorICAic3ViYlx0JTIsICUwIgorICBbKHNldF9hdHRyICJs ZW5ndGgiICIyLDIiKV0KKykKKworOzsKKzs7ICBNdWx0aXBseSBhbmQgQWNj dW11bGF0ZSBJbnN0cnVjdGlvbnMKKyhkZWZpbmVfaW5zbiAic21hY2hpc2kz IgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVy YW5kIiAiPXIiKQorCShwbHVzOlNJCisJIChtdWx0OlNJIChzaWduX2V4dGVu ZDpTSSAobWF0Y2hfb3BlcmFuZDpISSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAi ciIpKQorCQkgIChzaWduX2V4dGVuZDpTSSAobWF0Y2hfb3BlcmFuZDpISSAy ICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpKSkKKwkgKG1hdGNoX29wZXJhbmQ6 U0kgMyAicmVnaXN0ZXJfb3BlcmFuZCIgIjAiKSkpXQorICAiVEFSR0VUX01B QyIKKyAgIm1hY3N3XHQlMSwgJTIsICUwIgorICBbKHNldF9hdHRyICJsZW5n dGgiICIyIildCispCisKKyhkZWZpbmVfaW5zbiAidW1hY2hpc2kzIgorICBb KHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAi PXIiKQorCShwbHVzOlNJCisJIChtdWx0OlNJICh6ZXJvX2V4dGVuZDpTSSAo bWF0Y2hfb3BlcmFuZDpISSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpKQor CQkgICh6ZXJvX2V4dGVuZDpTSSAobWF0Y2hfb3BlcmFuZDpISSAyICJyZWdp c3Rlcl9vcGVyYW5kIiAiciIpKSkKKwkgKG1hdGNoX29wZXJhbmQ6U0kgMyAi cmVnaXN0ZXJfb3BlcmFuZCIgIjAiKSkpXQorICAiVEFSR0VUX01BQyIKKyAg Im1hY3V3XHQlMSwgJTIsICUwIgorICBbKHNldF9hdHRyICJsZW5ndGgiICIy IildCispCisKKzs7Cis7OyAgTXVsdGlwbHkgSW5zdHJ1Y3Rpb25zCisoZGVm aW5lX2luc24gIm11bGhpMyIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6SEkg MCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1jLGMsYyIpCisJKG11bHQ6SEkgKG1h dGNoX29wZXJhbmQ6SEkgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIiUwLDAsMCIp CisJCSAobWF0Y2hfb3BlcmFuZDpISSAyICJyZWdfb3JfaW50X29wZXJhbmQi ICJjLE0sTiIpKSldCisgICIiCisgICJtdWx3XHQlMiwgJTAiCisgIFsoc2V0 X2F0dHIgImxlbmd0aCIgIjIsMiw0IildCispCisKKyhkZWZpbmVfaW5zbiAi bXVscWloaTMiCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOkhJIDAgInJlZ2lz dGVyX29wZXJhbmQiICI9YyIpCisJKG11bHQ6SEkgKHNpZ25fZXh0ZW5kOkhJ IChtYXRjaF9vcGVyYW5kOlFJIDEgInJlZ2lzdGVyX29wZXJhbmQiICIlMCIp KQorCQkgKHNpZ25fZXh0ZW5kOkhJIChtYXRjaF9vcGVyYW5kOlFJIDIgInJl Z2lzdGVyX29wZXJhbmQiICJjIikpKSldCisgICIiCisgICJtdWxzYlx0JTIs ICUwIgorICBbKHNldF9hdHRyICJsZW5ndGgiICIyIildCispCisKKzs7Cis7 OyAgQml0IFNldC9DbGVhciBJbnN0cnVjdGlvbnMKKyhkZWZpbmVfZXhwYW5k ICJpbnN2IgorICBbKHNldCAoemVyb19leHRyYWN0IChtYXRjaF9vcGVyYW5k IDAgIm1lbW9yeV9vcGVyYW5kIiAiIikKKwkJICAgICAgKG1hdGNoX29wZXJh bmQgMSAiaW1tZWRpYXRlX29wZXJhbmQiICIiKQorCQkgICAgICAobWF0Y2hf b3BlcmFuZCAyICJpbW1lZGlhdGVfb3BlcmFuZCIgIiIpKQorCShtYXRjaF9v cGVyYW5kIDMgImltbWVkaWF0ZV9vcGVyYW5kIiAiIikpXQorICAiVEFSR0VU X0JJVF9PUFMiCisgIHsKKyAgICBpZiAoSU5UVkFMIChvcGVyYW5kc1sxXSkg IT0gMSkKKyAgICAgIEZBSUw7CisgICAgaWYgKElOVFZBTCAob3BlcmFuZHNb Ml0pIDwgMCB8fCBJTlRWQUwgKG9wZXJhbmRzWzJdKSA+IDE1KQorICAgICAg RkFJTDsKKyAgICBpZiAoSU5UVkFMIChvcGVyYW5kc1szXSkgPT0gMSkKKyAg ICAgIHsKKwlpZiAoR0VUX01PREUgKG9wZXJhbmRzWzBdKSA9PSBRSW1vZGUp CisJICB7CisJICAgIGVtaXRfaW5zbiAoZ2VuX3NldF9iaXRxaSAob3BlcmFu ZHNbMF0sIG9wZXJhbmRzWzJdKSk7CisJICAgIERPTkU7CisJICB9CisJZWxz ZSBpZiAoR0VUX01PREUgKG9wZXJhbmRzWzBdKSA9PSBISW1vZGUpCisJICB7 CisJICAgIGVtaXRfaW5zbiAoZ2VuX3NldF9iaXRoaSAob3BlcmFuZHNbMF0s IG9wZXJhbmRzWzJdKSk7CisJICAgIERPTkU7CisJICB9CisgICAgICB9Cisg ICAgaWYgKElOVFZBTCAob3BlcmFuZHNbM10pID09IDApCisgICAgICB7CisJ aWYgKEdFVF9NT0RFIChvcGVyYW5kc1swXSkgPT0gUUltb2RlKQorCSAgewor CSAgICBlbWl0X2luc24gKGdlbl9jbHJfYml0cWkgKG9wZXJhbmRzWzBdLCBv cGVyYW5kc1syXSkpOworCSAgICBET05FOworCSAgfQorCWVsc2UgaWYgKEdF VF9NT0RFIChvcGVyYW5kc1swXSkgPT0gSEltb2RlKQorCSAgeworCSAgICBl bWl0X2luc24gKGdlbl9jbHJfYml0aGkgKG9wZXJhbmRzWzBdLCBvcGVyYW5k c1syXSkpOworCSAgICBET05FOworCSAgfQorICAgICAgfQorICB9CispCisK KyhkZWZpbmVfaW5zbiAic2V0X2JpdDxtb2RlPiIKKyAgWyhzZXQgKHplcm9f ZXh0cmFjdDpTSE9SVCAobWF0Y2hfb3BlcmFuZDpTSE9SVCAwICJtZW1vcnlf b3BlcmFuZCIgIittIikKKwkJCSAgICAoY29uc3RfaW50IDEpCisJCQkgICAg KG1hdGNoX29wZXJhbmQgMSAiaW1tZWRpYXRlX29wZXJhbmQiICJpIikpCisJ KGNvbnN0X2ludCAxKSldCisgICJUQVJHRVRfQklUX09QUyIKKyAgInNiaXQ8 dElzYT5cdCUxLCUwIgorICBbKHNldF9hdHRyICJsZW5ndGgiICIyIildCisp CisKKyhkZWZpbmVfaW5zbiAiY2xyX2JpdDxtb2RlPiIKKyAgWyhzZXQgKHpl cm9fZXh0cmFjdDpTSE9SVCAobWF0Y2hfb3BlcmFuZDpTSE9SVCAwICJtZW1v cnlfb3BlcmFuZCIgIittIikKKwkJCSAgICAoY29uc3RfaW50IDEpCisJCQkg ICAgKG1hdGNoX29wZXJhbmQgMSAiaW1tZWRpYXRlX29wZXJhbmQiICJpIikp CisJKGNvbnN0X2ludCAwKSldCisgICJUQVJHRVRfQklUX09QUyIKKyAgImNi aXQ8dElzYT5cdCUxLCUwIgorICBbKHNldF9hdHRyICJsZW5ndGgiICIyIild CispCisKKyhkZWZpbmVfaW5zbiAic2V0X2JpdDxtb2RlPl9tZW0iCisgIFso c2V0IChtYXRjaF9vcGVyYW5kOlNIT1JUIDAgImJpdF9vcGVyYW5kIiAiPW0i KQorCShpb3I6U0hPUlQgKG1hdGNoX2R1cCAwKQorCQkgICAobWF0Y2hfb3Bl cmFuZDpTSE9SVCAxICJvbmVfYml0X29wZXJhbmQiICJpIikpCisgICldCisg ICJUQVJHRVRfQklUX09QUyIKKyAgInNiaXQ8dElzYT5cdCQlczEsJTAiCisg IFsoc2V0X2F0dHIgImxlbmd0aCIgIjIiKV0KKykKKworKGRlZmluZV9pbnNu ICJjbGVhcl9iaXQ8bW9kZT5fbWVtIgorICBbKHNldCAobWF0Y2hfb3BlcmFu ZDpTSE9SVCAwICJiaXRfb3BlcmFuZCIgIj1tIikKKwkoYW5kOlNIT1JUICht YXRjaF9kdXAgMCkKKwkJICAgKG1hdGNoX29wZXJhbmQ6U0hPUlQgMSAicmV2 X29uZV9iaXRfb3BlcmFuZCIgImkiKSkKKyAgKV0KKyAgIlRBUkdFVF9CSVRf T1BTIgorICAiY2JpdDx0SXNhPlx0JCVyMSwlMCIKKyAgWyhzZXRfYXR0ciAi bGVuZ3RoIiAiMiIpXQorKQorCis7OworOzsgIExvZ2ljYWwgSW5zdHJ1Y3Rp b25zIC0gYW5kCisKKyhkZWZpbmVfZXhwYW5kICJhbmRkaTMiCisgIFsoc2V0 IChtYXRjaF9vcGVyYW5kOkRJIDAgInJlZ2lzdGVyX29wZXJhbmQiICIiKQor CShhbmQ6REkgKG1hdGNoX29wZXJhbmQ6REkgMSAicmVnaXN0ZXJfb3BlcmFu ZCIgIiIpCisJCShtYXRjaF9vcGVyYW5kOkRJIDIgIm5vbm1lbW9yeV9vcGVy YW5kIiAiIikpKV0KKyAgIiIKKyAgICB7CisgICAgICBpZiAoKEdFVF9DT0RF IChvcGVyYW5kc1syXSkgIT0gUkVHKSkKKwl7CisJICBvcGVyYW5kc1syXSA9 IGZvcmNlX3JlZyAoREltb2RlLCBvcGVyYW5kc1syXSk7CisJfQorICAgIH0K KykKKworKGRlZmluZV9pbnNuICJhbmRkaTNfaW5zbiIKKyAgWyhzZXQgKG1h dGNoX29wZXJhbmQ6REkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikKKwko YW5kOkRJIChtYXRjaF9vcGVyYW5kOkRJIDEgInJlZ2lzdGVyX29wZXJhbmQi ICIlMCIpCisJCShtYXRjaF9vcGVyYW5kOkRJIDIgInJlZ2lzdGVyX29wZXJh bmQiICJyIikpKV0KKyAgIiIKKyAgIioKKyAgICByZXR1cm4gY3IxNl9lbWl0 X2xvZ2ljYWxfZGkgKG9wZXJhbmRzLCAwKTsKKyAgIgorKQorCisoZGVmaW5l X2luc24gImFuZHNpMyIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAi cmVnaXN0ZXJfb3BlcmFuZCIgIj1yLHIscixyIikKKwkoYW5kOlNJIChtYXRj aF9vcGVyYW5kOlNJIDEgInJlZ2lzdGVyX29wZXJhbmQiICIlMCwwLDAsMCIp CisJCShtYXRjaF9vcGVyYW5kOlNJIDIgInJlZ19zaV9pbnRfb3BlcmFuZCIg InIsTSxOLGkiKSkpXQorICAiIgorICAiYW5kZFx0JTIsICUwIgorICBbKHNl dF9hdHRyICJsZW5ndGgiICIyLDIsNCw2IildCispCisKKyhkZWZpbmVfaW5z biAiYW5kaGkzIgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpISSAwICJyZWdp c3Rlcl9vcGVyYW5kIiAiPWMsYyxjIikKKwkoYW5kOkhJIChtYXRjaF9vcGVy YW5kOkhJIDEgInJlZ2lzdGVyX29wZXJhbmQiICIlMCwwLDAiKQorCQkobWF0 Y2hfb3BlcmFuZDpISSAyICJyZWdfaGlfaW50X29wZXJhbmQiICJjLE0sTiIp KSldCisgICIiCisgICJhbmR3XHQlMiwgJTAiCisgIFsoc2V0X2F0dHIgImxl bmd0aCIgIjIsMiw0IildCispCisKKyhkZWZpbmVfaW5zbiAiYW5kcWkzIgor ICBbKHNldCAobWF0Y2hfb3BlcmFuZDpRSSAwICJyZWdpc3Rlcl9vcGVyYW5k IiAiPWMsYyxjIikKKwkoYW5kOlFJIChtYXRjaF9vcGVyYW5kOlFJIDEgInJl Z2lzdGVyX29wZXJhbmQiICIlMCwwLDAiKQorCQkobWF0Y2hfb3BlcmFuZDpR SSAyICJyZWdfaGlfaW50X29wZXJhbmQiICJjLE0sTiIpKSldCisgICIiCisg ICJhbmRiXHQlMiwgJTAiCisgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjIsMiwy IildCispCisKKzs7ICBMb2dpY2FsIEluc3RydWN0aW9ucyAtIG9yIAorKGRl ZmluZV9leHBhbmQgImlvcmRpMyIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6 REkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIiIpCisJKGlvcjpESSAobWF0Y2hf b3BlcmFuZDpESSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikKKwkJKG1hdGNo X29wZXJhbmQ6REkgMiAibm9ubWVtb3J5X29wZXJhbmQiICIiKSkpXQorICAi IgorICAgIHsKKyAgICAgIGlmICgoR0VUX0NPREUgKG9wZXJhbmRzWzJdKSAh PSBSRUcpKQorCXsKKwkgIG9wZXJhbmRzWzJdID0gZm9yY2VfcmVnIChESW1v ZGUsIG9wZXJhbmRzWzJdKTsKKwl9CisgICAgfQorKQorCisoZGVmaW5lX2lu c24gImlvcmRpM19pbnNuIgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpESSAw ICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQorCShpb3I6REkgKG1hdGNoX29w ZXJhbmQ6REkgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIiUwIikKKwkJKG1hdGNo X29wZXJhbmQ6REkgMiAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKSkpXQorICAi IgorICAiKgorICAgIHJldHVybiBjcjE2X2VtaXRfbG9naWNhbF9kaSAob3Bl cmFuZHMsIDEpOworICAiCispCisKKyhkZWZpbmVfaW5zbiAiaW9yc2kzIgor ICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5k IiAiPXIscixyLHIiKQorCShpb3I6U0kgKG1hdGNoX29wZXJhbmQ6U0kgMSAi cmVnaXN0ZXJfb3BlcmFuZCIgIiUwLDAsMCwwIikKKwkJKG1hdGNoX29wZXJh bmQ6U0kgMiAicmVnX3NpX2ludF9vcGVyYW5kIiAicixNLE4saSIpKSldCisg ICIiCisgICJvcmRcdCUyLCAlMCIKKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAi MiwyLDQsNiIpXQorKQorCisoZGVmaW5lX2luc24gImlvcmhpMyIKKyAgWyhz ZXQgKG1hdGNoX29wZXJhbmQ6SEkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1j LGMsYyIpCisJKGlvcjpISSAobWF0Y2hfb3BlcmFuZDpISSAxICJyZWdpc3Rl cl9vcGVyYW5kIiAiJTAsMCwwIikKKwkJKG1hdGNoX29wZXJhbmQ6SEkgMiAi cmVnX2hpX2ludF9vcGVyYW5kIiAiYyxNLE4iKSkpXQorICAiIgorICAib3J3 XHQlMiwgJTAiCisgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjIsMiw0IildCisp CisKKyhkZWZpbmVfaW5zbiAiaW9ycWkzIgorICBbKHNldCAobWF0Y2hfb3Bl cmFuZDpRSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPWMsYyxjIikKKwkoaW9y OlFJIChtYXRjaF9vcGVyYW5kOlFJIDEgInJlZ2lzdGVyX29wZXJhbmQiICIl MCwwLDAiKQorCQkobWF0Y2hfb3BlcmFuZDpRSSAyICJyZWdfaGlfaW50X29w ZXJhbmQiICJjLE0sTiIpKSldCisgICIiCisgICJvcmJcdCUyLCAlMCIKKyAg WyhzZXRfYXR0ciAibGVuZ3RoIiAiMiwyLDIiKV0KKykKKworOzsgIExvZ2lj YWwgSW5zdHJ1Y3Rpb25zIC0geG9yIAorKGRlZmluZV9leHBhbmQgInhvcmRp MyIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6REkgMCAicmVnaXN0ZXJfb3Bl cmFuZCIgIiIpCisJKHhvcjpESSAobWF0Y2hfb3BlcmFuZDpESSAxICJyZWdp c3Rlcl9vcGVyYW5kIiAiIikKKwkJKG1hdGNoX29wZXJhbmQ6REkgMiAibm9u bWVtb3J5X29wZXJhbmQiICIiKSkpXQorICAiIgorICAgIHsKKyAgICAgIGlm ICgoR0VUX0NPREUgKG9wZXJhbmRzWzJdKSAhPSBSRUcpKQorCXsKKwkgIG9w ZXJhbmRzWzJdID0gZm9yY2VfcmVnIChESW1vZGUsIG9wZXJhbmRzWzJdKTsK Kwl9CisgICAgfQorKQorCisoZGVmaW5lX2luc24gInhvcmRpM19pbnNuIgor ICBbKHNldCAobWF0Y2hfb3BlcmFuZDpESSAwICJyZWdpc3Rlcl9vcGVyYW5k IiAiPXIiKQorCSh4b3I6REkgKG1hdGNoX29wZXJhbmQ6REkgMSAicmVnaXN0 ZXJfb3BlcmFuZCIgIiUwIikKKwkJKG1hdGNoX29wZXJhbmQ6REkgMiAicmVn aXN0ZXJfb3BlcmFuZCIgInIiKSkpXQorICAiIgorICAiKgorICAgIHJldHVy biBjcjE2X2VtaXRfbG9naWNhbF9kaSAob3BlcmFuZHMsIDIpOworICAiCisp CisKKyhkZWZpbmVfaW5zbiAieG9yc2kzIgorICBbKHNldCAobWF0Y2hfb3Bl cmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIscixyLHIiKQorCSh4 b3I6U0kgKG1hdGNoX29wZXJhbmQ6U0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIg IiUwLDAsMCwwIikKKwkJKG1hdGNoX29wZXJhbmQ6U0kgMiAicmVnX3NpX2lu dF9vcGVyYW5kIiAicixNLE4saSIpKSldCisgICIiCisgICJ4b3JkXHQlMiwg JTAiCisgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjIsMiw0LDYiKV0KKykKKwor KGRlZmluZV9pbnNuICJ4b3JoaTMiCisgIFsoc2V0IChtYXRjaF9vcGVyYW5k OkhJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9YyxjLGMiKQorCSh4b3I6SEkg KG1hdGNoX29wZXJhbmQ6SEkgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIiUwLDAs MCIpCisJCShtYXRjaF9vcGVyYW5kOkhJIDIgInJlZ19oaV9pbnRfb3BlcmFu ZCIgImMsTSxOIikpKV0KKyAgIiIKKyAgInhvcndcdCUyLCAlMCIKKyAgWyhz ZXRfYXR0ciAibGVuZ3RoIiAiMiwyLDQiKV0KKykKKworKGRlZmluZV9pbnNu ICJ4b3JxaTMiCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlFJIDAgInJlZ2lz dGVyX29wZXJhbmQiICI9YyxjLGMiKQorCSh4b3I6UUkgKG1hdGNoX29wZXJh bmQ6UUkgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIiUwLDAsMCIpCisJCShtYXRj aF9vcGVyYW5kOlFJIDIgInJlZ19oaV9pbnRfb3BlcmFuZCIgImMsTSxOIikp KV0KKyAgIiIKKyAgInhvcmJcdCUyLCAlMCIKKyAgWyhzZXRfYXR0ciAibGVu Z3RoIiAiMiwyLDIiKV0KKykKKworOzsKKzs7ICBTaWduIGFuZCBaZXJvIEV4 dGVuZCBJbnN0cnVjdGlvbnMKKyhkZWZpbmVfaW5zbiAiPHN6UGF0PmV4dGVu ZGhpc2kyIgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rl cl9vcGVyYW5kIiAiPXIiKQorCShzel94dG5kOlNJIChtYXRjaF9vcGVyYW5k OkhJIDEgInJlZ2lzdGVyX29wZXJhbmQiICJyIikpKV0KKyAgIiIKKyAgIm1v djxzeklzYT53XHQlMSwgJTAiCisgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjQi KV0KKykKKworKGRlZmluZV9pbnNuICI8c3pQYXQ+ZXh0ZW5kcWloaTIiCisg IFsoc2V0IChtYXRjaF9vcGVyYW5kOkhJIDAgInJlZ2lzdGVyX29wZXJhbmQi ICI9ciIpCisJKHN6X3h0bmQ6SEkgKG1hdGNoX29wZXJhbmQ6UUkgMSAicmVn aXN0ZXJfb3BlcmFuZCIgInIiKSkpXQorICAiIgorICAibW92PHN6SXNhPmJc dCUxLCAlMCIKKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiNCIpXQorKQorCis7 OworOzsgIE9uZSdzIENvbXBsZW1lbnQKKyhkZWZpbmVfaW5zbiAib25lX2Nt cGxkaTIiCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOkRJIDAgInJlZ2lzdGVy X29wZXJhbmQiICI9ciIpCisJKG5vdDpESSAobWF0Y2hfb3BlcmFuZDpESSAx ICJyZWdpc3Rlcl9vcGVyYW5kIiAiMCIpKSldCisgICIiCisgIHsKKyAgICAg cnR4IHhvcGVyYW5kIDsKKyAgICAgaW50IHJlZzAgPSBSRUdOTyAob3BlcmFu ZHNbMF0pOworCisgICAgIHhvcGVyYW5kID0gZ2VuX3J0eF9SRUcgKFNJbW9k ZSwgcmVnMCArIDIpOworICAgICBvdXRwdXRfYXNtX2luc24gKCJ4b3JkXHQk LTEsICUwIiwgb3BlcmFuZHMpOworICAgICBvdXRwdXRfYXNtX2luc24gKCJ4 b3JkXHQkLTEsICUwIiwgJnhvcGVyYW5kKTsKKyAgICAgcmV0dXJuICIiIDsK KyAgfQorICBbKHNldF9hdHRyICJsZW5ndGgiICIxMiIpXQorKQorCisoZGVm aW5lX2luc24gIm9uZV9jbXBsPG1vZGU+MiIKKyAgWyhzZXQgKG1hdGNoX29w ZXJhbmQ6Q1IxNklNIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9ciIpCisJKG5v dDpDUjE2SU0gKG1hdGNoX29wZXJhbmQ6Q1IxNklNIDEgInJlZ2lzdGVyX29w ZXJhbmQiICIwIikpKV0KKyAgIiIKKyAgInhvcjx0SXNhPlx0JC0xLCAlMCIK KyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiMiIpXQorKQorCis7OworOzsgIEFy aXRobWV0aWMgTGVmdCBhbmQgUmlnaHQgU2hpZnQgSW5zdHJ1Y3Rpb25zCiso ZGVmaW5lX2luc24gImFzaGxxaTMiCisgIFsoc2V0IChtYXRjaF9vcGVyYW5k OlFJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9YyxjIikKKwkoYXNoaWZ0OlFJ IChtYXRjaF9vcGVyYW5kOlFJIDEgInJlZ2lzdGVyX29wZXJhbmQiICIwLDAi KQorCQkgICAobWF0Y2hfb3BlcmFuZDpRSSAyICJub25tZW1vcnlfb3BlcmFu ZCIgImMsSSIpKSldCisgICIiCisgICJhc2h1Ylx0JTIsICUwIgorICBbKHNl dF9hdHRyICJsZW5ndGgiICIyLDIiKV0KKykKKworKGRlZmluZV9pbnNuICJh c2hsaGkzIgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpISSAwICJyZWdpc3Rl cl9vcGVyYW5kIiAiPWMsYyIpCisJKGFzaGlmdDpISSAobWF0Y2hfb3BlcmFu ZDpISSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiMCwwIikKKwkJICAgKG1hdGNo X29wZXJhbmQ6UUkgMiAibm9ubWVtb3J5X29wZXJhbmQiICJjLEoiKSkpXQor ICAiIgorICAiYXNodXdcdCUyLCAlMCIKKyAgWyhzZXRfYXR0ciAibGVuZ3Ro IiAiMiwyIildCispCisKKyhkZWZpbmVfaW5zbiAiYXNobHNpMyIKKyAgWyhz ZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1y LHIiKQorCShhc2hpZnQ6U0kgKG1hdGNoX29wZXJhbmQ6U0kgMSAicmVnaXN0 ZXJfb3BlcmFuZCIgIjAsMCIpCisJCSAgIChtYXRjaF9vcGVyYW5kOlFJIDIg Im5vbm1lbW9yeV9vcGVyYW5kIiAicixLIikpKV0KKyAgIiIKKyAgImFzaHVk XHQlMiwgJTAiCisgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjIsMiIpXQorKQor CisoZGVmaW5lX2V4cGFuZCAiYXNocjxtb2RlPjMiCisgIFsoc2V0IChtYXRj aF9vcGVyYW5kOkNSMTZJTSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikKKwko YXNoaWZ0cnQ6Q1IxNklNIChtYXRjaF9vcGVyYW5kOkNSMTZJTSAxICJyZWdp c3Rlcl9vcGVyYW5kIiAiIikKKwkJCSAobWF0Y2hfb3BlcmFuZDpRSSAyICJu b25tZW1vcnlfb3BlcmFuZCIgIiIpKSldCisgICIiCisgICAgeworICAgICAg aWYgKEdFVF9DT0RFIChvcGVyYW5kc1syXSkgPT0gQ09OU1RfSU5UKQorCXsK KwkgIC8qIElmIHRoZSBjb25zdGFudCBpcyBub3QgaW4gcmFuZ2UsIHRyeSBw bGFjaW5nIGl0IGluIGEgcmVnICovCisJICBpZiAoIVVOU0lHTkVEX0lOVF9G SVRTX05fQklUUyhJTlRWQUwgKG9wZXJhbmRzWzJdKSw8c2hJbW1CaXRzPikp CisJICBvcGVyYW5kc1syXSA9IGNvcHlfdG9fbW9kZV9yZWcoUUltb2RlLCBv cGVyYW5kc1syXSk7CisJfQorCisgICAgICBpZiAoR0VUX0NPREUgKG9wZXJh bmRzWzJdKSAhPSBDT05TVF9JTlQpCisJb3BlcmFuZHNbMl0gPSBnZW5fcnR4 X05FRyAoUUltb2RlLCBuZWdhdGVfcnR4IChRSW1vZGUsIG9wZXJhbmRzWzJd KSk7CisgICAgfQorKQorCisoZGVmaW5lX2luc24gImFzaHJxaTNfaW1tX2lu c24iCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlFJIDAgInJlZ2lzdGVyX29w ZXJhbmQiICI9YyIpCisJKGFzaGlmdHJ0OlFJIChtYXRjaF9vcGVyYW5kOlFJ IDEgInJlZ2lzdGVyX29wZXJhbmQiICIwIikKKwkJICAgICAobWF0Y2hfb3Bl cmFuZDpRSSAyICJzaGlmdF9xaV9pbW1fb3BlcmFuZCIgImkiKSkpXQorICAi IgorICAiYXNodWJcdCQlbjIsICUwIgorICBbKHNldF9hdHRyICJsZW5ndGgi ICIyIildCispCisKKyhkZWZpbmVfaW5zbiAiYXNocmhpM19pbW1faW5zbiIK KyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6SEkgMCAicmVnaXN0ZXJfb3BlcmFu ZCIgIj1jIikKKwkoYXNoaWZ0cnQ6SEkgKG1hdGNoX29wZXJhbmQ6SEkgMSAi cmVnaXN0ZXJfb3BlcmFuZCIgIjAiKQorCQkgICAgIChtYXRjaF9vcGVyYW5k OlFJIDIgInNoaWZ0X2hpX2ltbV9vcGVyYW5kIiAiaSIpKSldCisgICIiCisg ICJhc2h1d1x0JCVuMiwgJTAiCisgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjIi KV0KKykKKworKGRlZmluZV9pbnNuICJhc2hyc2kzX2ltbV9pbnNuIgorICBb KHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAi PXIiKQorCShhc2hpZnRydDpTSSAobWF0Y2hfb3BlcmFuZDpTSSAxICJyZWdp c3Rlcl9vcGVyYW5kIiAiMCIpCisJCSAgICAgKG1hdGNoX29wZXJhbmQ6UUkg MiAic2hpZnRfc2lfaW1tX29wZXJhbmQiICJpIikpKV0KKyAgIiIKKyAgImFz aHVkXHQkJW4yLCAlMCIKKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiMiIpXQor KQorCisoZGVmaW5lX2luc24gImFzaHJxaTNfbmVnX2luc24iCisgIFsoc2V0 IChtYXRjaF9vcGVyYW5kOlFJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9YyIp CisJKGFzaGlmdHJ0OlFJIChtYXRjaF9vcGVyYW5kOlFJIDEgInJlZ2lzdGVy X29wZXJhbmQiICIwIikKKwkJICAgICAobmVnOlFJIChtYXRjaF9vcGVyYW5k OlFJIDIgInJlZ2lzdGVyX29wZXJhbmQiICJjIikpKSldCisgICIiCisgICJh c2h1Ylx0JTIsJTAiCisgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjIiKV0KKykK KworKGRlZmluZV9pbnNuICJhc2hyaGkzX25lZ19pbnNuIgorICBbKHNldCAo bWF0Y2hfb3BlcmFuZDpISSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPWMiKQor CShhc2hpZnRydDpISSAobWF0Y2hfb3BlcmFuZDpISSAxICJyZWdpc3Rlcl9v cGVyYW5kIiAiMCIpCisJCSAgICAgKG5lZzpRSSAobWF0Y2hfb3BlcmFuZDpR SSAyICJyZWdpc3Rlcl9vcGVyYW5kIiAiYyIpKSkpXQorICAiIgorICAiYXNo dXdcdCUyLCUwIgorICBbKHNldF9hdHRyICJsZW5ndGgiICIyIildCispCisK KyhkZWZpbmVfaW5zbiAiYXNocmRpM19uZWdfaW5zbiIKKyAgWyhzZXQgKG1h dGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikKKwko YXNoaWZ0cnQ6U0kgKG1hdGNoX29wZXJhbmQ6U0kgMSAicmVnaXN0ZXJfb3Bl cmFuZCIgIjAiKQorCQkgICAgIChuZWc6UUkgKG1hdGNoX29wZXJhbmQ6UUkg MiAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKSkpKV0KKyAgIiIKKyAgImFzaHVk XHQlMiwlMCIKKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiMiIpXQorKQorCiso ZGVmaW5lX2V4cGFuZCAibHNocjxtb2RlPjMiCisgIFsoc2V0IChtYXRjaF9v cGVyYW5kOkNSMTZJTSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikKKwkobHNo aWZ0cnQ6Q1IxNklNIChtYXRjaF9vcGVyYW5kOkNSMTZJTSAxICJyZWdpc3Rl cl9vcGVyYW5kIiAiIikKKwkJCSAobWF0Y2hfb3BlcmFuZDpRSSAyICJyZWdf b3JfaW50X29wZXJhbmQiICIiKSkpXQorICAiIgorICAgIHsKKyAgICAgIGlm IChHRVRfQ09ERSAob3BlcmFuZHNbMl0pID09IENPTlNUX0lOVCkKKwl7CisJ ICAvKiBJZiB0aGUgY29uc3RhbnQgaXMgbm90IGluIHJhbmdlLCB0cnkgcGxh Y2luZyBpdCBpbiBhIHJlZyAqLworCSAgaWYgKCFVTlNJR05FRF9JTlRfRklU U19OX0JJVFMoSU5UVkFMIChvcGVyYW5kc1syXSksPHNoSW1tQml0cz4pKQor CSAgb3BlcmFuZHNbMl0gPSBjb3B5X3RvX21vZGVfcmVnKFFJbW9kZSwgb3Bl cmFuZHNbMl0pOworCX0KKworICAgICAgaWYgKEdFVF9DT0RFIChvcGVyYW5k c1syXSkgIT0gQ09OU1RfSU5UKQorCW9wZXJhbmRzWzJdID0gZ2VuX3J0eF9O RUcgKFFJbW9kZSwgbmVnYXRlX3J0eCAoUUltb2RlLCBvcGVyYW5kc1syXSkp OworICAgIH0KKykKKworKGRlZmluZV9pbnNuICJsc2hycWkzX2ltbV9pbnNu IgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpRSSAwICJyZWdpc3Rlcl9vcGVy YW5kIiAiPWMiKQorCShsc2hpZnRydDpRSSAobWF0Y2hfb3BlcmFuZDpRSSAx ICJyZWdpc3Rlcl9vcGVyYW5kIiAiMCIpCisJCSAgICAgKG1hdGNoX29wZXJh bmQ6UUkgMiAic2hpZnRfcWlfb3BlcmFuZCIgIlEiKSkpXQorICAiIgorICAi bHNoYlx0JCVuMiwgJTAiCisgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjIiKV0K KykKKworKGRlZmluZV9pbnNuICJsc2hyaGkzX2ltbV9pbnNuIgorICBbKHNl dCAobWF0Y2hfb3BlcmFuZDpISSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPWMi KQorCShsc2hpZnRydDpISSAobWF0Y2hfb3BlcmFuZDpISSAxICJyZWdpc3Rl cl9vcGVyYW5kIiAiMCIpCisJCSAgICAgKG1hdGNoX29wZXJhbmQ6UUkgMiAi c2hpZnRfaGlfb3BlcmFuZCIgIlIiKSkpXQorICAiIgorICAibHNod1x0JCVu MiwgJTAiCisgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjIiKV0KKykKKworKGRl ZmluZV9pbnNuICJsc2hyc2kzX2ltbV9pbnNuIgorICBbKHNldCAobWF0Y2hf b3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQorCShsc2hp ZnRydDpTSSAobWF0Y2hfb3BlcmFuZDpTSSAxICJyZWdpc3Rlcl9vcGVyYW5k IiAiMCIpCisJCSAgICAgKG1hdGNoX29wZXJhbmQ6UUkgMiAic2hpZnRfc2lf b3BlcmFuZCIgIlMiKSkpXQorICAiIgorICAibHNoZFx0JCVuMiwgJTAiCisg IFsoc2V0X2F0dHIgImxlbmd0aCIgIjIiKV0KKykKKworKGRlZmluZV9pbnNu ICJsc2hycWkzX25lZ19pbnNuIgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpR SSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPWMiKQorCShsc2hpZnRydDpRSSAo bWF0Y2hfb3BlcmFuZDpRSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiMCIpCisJ CSAgICAgKG5lZzpRSSAobWF0Y2hfb3BlcmFuZDpRSSAyICJyZWdpc3Rlcl9v cGVyYW5kIiAiYyIpKSkpXQorICAiIgorICAibHNoYlx0JTIsJTAiCisgIFso c2V0X2F0dHIgImxlbmd0aCIgIjIiKV0KKykKKworKGRlZmluZV9pbnNuICJs c2hyaGkzX25lZ19pbnNuIgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpISSAw ICJyZWdpc3Rlcl9vcGVyYW5kIiAiPWMiKQorCShsc2hpZnRydDpISSAobWF0 Y2hfb3BlcmFuZDpISSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiMCIpCisJCSAg ICAgKG5lZzpRSSAobWF0Y2hfb3BlcmFuZDpRSSAyICJyZWdpc3Rlcl9vcGVy YW5kIiAiYyIpKSkpXQorICAiIgorICAibHNod1x0JTIsJTAiCisgIFsoc2V0 X2F0dHIgImxlbmd0aCIgIjIiKV0KKykKKworKGRlZmluZV9pbnNuICJsc2hy c2kzX25lZ19pbnNuIgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJy ZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQorCShsc2hpZnRydDpTSSAobWF0Y2hf b3BlcmFuZDpTSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiMCIpCisJCSAgICAg KG5lZzpRSSAobWF0Y2hfb3BlcmFuZDpRSSAyICJyZWdpc3Rlcl9vcGVyYW5k IiAiciIpKSkpXQorICAiIgorICAibHNoZFx0JTIsJTAiCisgIFsoc2V0X2F0 dHIgImxlbmd0aCIgIjIiKV0KKykKKworOzsKKzs7ICBNb3ZlIEluc3RydWN0 aW9ucworCis7OyBNb3ZlIGFueSBub24taW1tZWRpYXRlIG9wZXJhbmQgMCB0 byBhIGdlbmVyYWwgb3BlcmFuZCAxLgorOzsgVGhpcyBhcHBsaWVzIG9ubHkg YmVmb3JlIHN0YXJ0aW5nIHRoZSByZWxvYWQgcHJvY2VzcworOzsgT3BlcmFu ZCAwIGlzIG5vdCBhIHJlZ2lzdGVyIG9wZXJhbmQgb2YgdHlwZSBtb2RlIE1P REUKKzs7IElmIE9wZXJhbmQgMCBpcyBhIHB1c2ggb3BlcmFuZCBvZiB0eXBl IG1vZGUgTU9ERQorOzsgdGhlbiwgaWYgT3BlcmFuZCAxIGlzIGEgbm9uLVNQ IHJlZ2lzdGVyCis7OyB0aGVuLCBPcGVyYW5kIDEgPSBjb3B5X3RvX21vZGVf cmVnICg8TU9ERT5tb2RlLCBPcGVyYW5kIDEpCis7OyBlbmRpZgorOzsgZWxz ZQorOzsgaWYgT3BlcmFuZCAxIGlzIGVpdGhlciByZWdpc3RlciBvciA0LWJp dCBpbW1lZGlhdGUgY29uc3RhbnQKKzs7IHRoZW4sIE9wZXJhbmQgMSA9IGNv cHlfdG9fbW9kZV9yZWcgKDxNT0RFPm1vZGUsIE9wZXJhbmQgMSkKKzs7IGVu ZGlmCis7OyBlbmRpZgorOzsKKzs7IFdoYXQgZG9lcyBjb3B5X3RvX21vZGVf cmVnIChtb2RlLCBydHggdmFsKSBkbz8KKzs7IENvcHkgdGhlIHZhbHVlIGlu dG8gbmV3IHRlbXAgcmVnIGFuZCByZXR1cm4gdGhlIHJlZyB3aGVyZSB0aGUK Kzs7IG1vZGUgb2YgdGhlIG5ldyByZWcgaXMgYWx3YXlzIG1vZGUgTU9ERSB3 aGVuIHZhbHVlIGlzIGNvbnN0YW50Cis7OworOzsgV2h5IHNob3VsZCBjb3B5 X3RvX21vZGVfcmVnIGJlIGNhbGxlZD8KKzs7IEFsbCBzb3J0cyBvZiBtb3Zl IGFyZSBub3Igc3VwcG9ydGVkIGJ5IENSMTYuIFRoZXJlZm9yZSwgCis7OyB3 aGVuIHVuc3VwcG9ydGVkIG1vdmUgaXMgZW5jb3VudGVyZWQsIHRoZSBhZGRp dGlvbmFsIGluc3RydWN0aW9ucyAKKzs7IHdpbGwgYmUgaW50cm9kdWNlZCBm b3IgdGhlIHB1cnBvc2UuCis7OworOzsgQSBuZXcgbW92ZSBpbnNuIGlzIGlu c2VydGVkIGZvciBPcCAxIHdoZW4gb25lIG9mIHRoZSBmb2xsb3dpbmcKKzs7 IGNvbmRpdGlvbnMgaXMgbWV0LgorOzsgQ2FzZSAxOiAgT3AgMCBpcyBwdXNo X29wZXJhbmQKKzs7ICAgICAgICAgIE9wIDEgaXMgU1AgcmVnaXN0ZXIKKzs7 Cis7OyBDYXNlIDI6ICBPcCAwIGlzIG5vdCBwdXNoX29wZXJhbmQKKzs7ICAg ICAgICAgIE9wIDEgaXMgbmVpdGhlciByZWdpc3RlciBub3IgdW5zaWduZWQg NC1iaXQgaW1tZWRpYXRlCisKKyhkZWZpbmVfZXhwYW5kICJtb3Y8bW9kZT4i CisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOkFMTE1URCAwICJub25pbW1lZGlh dGVfb3BlcmFuZCIgIiIpCisJKG1hdGNoX29wZXJhbmQ6QUxMTVREIDEgImdl bmVyYWxfb3BlcmFuZCIgIiIpKV0KKyAgIiIKKyAgeworICAgIGlmICghKHJl bG9hZF9pbl9wcm9ncmVzcyB8fCByZWxvYWRfY29tcGxldGVkKSkKKyAgICAg IHsKKwkvKiBPbmx5IGlmIE9wMCBpcyBhIHJlZ2lzdGVyIG9wZXJhbmQuICAq LworCWlmICghcmVnaXN0ZXJfb3BlcmFuZCAob3BlcmFuZHNbMF0sIDxNT0RF Pm1vZGUpKQorCSAgeworCSAgICBpZiAocHVzaF9vcGVyYW5kIChvcGVyYW5k c1swXSwgPE1PREU+bW9kZSkpIAorCSAgICAgIHsKKwkJLyogVXNlIGNvcHlf dG9fbW9kZV9yZWcgb25seSBpZiB0aGUgcmVnaXN0ZXIgbmVlZHMgCisJCXRv IGJlIHB1c2hlZCBpcyBTUCBhcyBDUjE2IGRvZXMgbm90IHN1cHBvcnQgcHVz aGluZyBTUC4gICovCisJCWlmICghbm9zcF9yZWdfb3BlcmFuZCAob3BlcmFu ZHNbMV0sIDxNT0RFPm1vZGUpKQorCQkgIG9wZXJhbmRzWzFdID0gY29weV90 b19tb2RlX3JlZyAoPE1PREU+bW9kZSwgb3BlcmFuZHNbMV0pOworCSAgICAg IH0KKwkgICAgZWxzZQorCSAgICAgIHsKKwkJLyogVXNlIGNvcHlfdG9fbW9k ZV9yZWcgaWYgb3AxIGlzIG5vdCByZWdpc3RlciBvcGVyYW5kCisJCSAgIHN1 YmplY3QgdG8gY29uZGl0aW9ucyBpbnNpZGUuICAqLworCQlpZiAoIXJlZ2lz dGVyX29wZXJhbmQgKG9wZXJhbmRzWzFdLCA8TU9ERT5tb2RlKSkKKwkJICB7 CisJCSAgICAvKiBDUjE2IGRvZXMgbm90IHN1cHBvcnQgbW92aW5nIGltbWVk aWF0ZSB0byBTSSBvciBTRiAKKwkJICAgICAgIHR5cGUgbWVtb3J5LiAgKi8K KwkJICAgIGlmICg8TU9ERT5tb2RlID09IFNJbW9kZSB8fCA8TU9ERT5tb2Rl ID09IFNGbW9kZSB8fAorCQkJPE1PREU+bW9kZSA9PSBESW1vZGUgfHwgPE1P REU+bW9kZSA9PSBERm1vZGUpCisJCSAgICAgIG9wZXJhbmRzWzFdID0gY29w eV90b19tb2RlX3JlZyAoPE1PREU+bW9kZSwgb3BlcmFuZHNbMV0pOworCQkg ICAgZWxzZQorCQkgICAgICAvKiBtb3ZpbmcgaW1tNCBpcyBzdXBwb3J0ZWQg YnkgQ1IxNiBpbnN0cnVjdGlvbi4gICovCisJCSAgICAgIGlmICghdTRiaXRz X29wZXJhbmQgKG9wZXJhbmRzWzFdLCA8TU9ERT5tb2RlKSkKKwkJCW9wZXJh bmRzWzFdID0gY29weV90b19tb2RlX3JlZyAoPE1PREU+bW9kZSwgb3BlcmFu ZHNbMV0pOworCQkgIH0KKwkgICAgICAgfQorCSAgfQorCisJICAvKiBJZiBv cGVyYW5kLTEgaXMgYSBzeW1ib2wsIGNvbnZlcnQgaXQgaW50byBhIEJSTyBv ciBHT1QgRm9ybWF0LiAgKi8KKwkgIGlmIChmbGFnX3BpYyAmJiAhIGxlZ2l0 aW1hdGVfcGljX29wZXJhbmRfcCAob3BlcmFuZHNbMV0pKQorCSAgICB7CisJ ICAgICAgb3BlcmFuZHNbMV0gPSBsZWdpdGltaXplX3BpY19hZGRyZXNzIChv cGVyYW5kc1sxXSwgPE1PREU+bW9kZSwgMCk7CisJICAgIH0KKyAgICAgIH0K KyAgfQorKQorCis7IEFMTE1UICAgICA6IFFJLEhJLFNJLFNGCis7IHB1c2hD bnN0ciA6IFB1c2ggY29uc3RyYWludHMgCis7ICAgICAgICAgICAgICAgIFFJ IDogWAorOyAgICAgICAgICAgICBISSxTSSxTRixESSxERiA6IDwKKzsgYiAg ICAgICAgIDogQWxsIG5vbi1zcCByZWdpc3RlcnMKKzsgdHB1c2ggICAgIDog UHVzaCBjb3VudAorOyAgICAgICAgICAgICAgICBRSSxISSA6IDEKKzsgICAg ICAgICAgICAgICAgU0ksU0YgOiAyCis7ICAgICAgICAgICAgICAgIERJLERG IDogNAorKGRlZmluZV9pbnNuICJwdXNoPG1vZGU+X2ludGVybmFsIgorICBb KHNldCAobWF0Y2hfb3BlcmFuZDpBTExNVEQgMCAicHVzaF9vcGVyYW5kIiAi PTxwdXNoQ25zdHI+IikKKwkobWF0Y2hfb3BlcmFuZDpBTExNVEQgMSAibm9z cF9yZWdfb3BlcmFuZCIgImIiKSldCisgICIiCisgICJwdXNoXHQkPHRwdXNo PiwlcDEiCisgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjIiKV0KKykKKworOyAo REksIERGKSBtb3ZlCisoZGVmaW5lX2luc24gIiptb3Y8bW9kZT5fZG91Ymxl IgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpET1VCTEUgMCAibm9uaW1tZWRp YXRlX29wZXJhbmQiICI9ciwgciwgciwgbSIpCisJKG1hdGNoX29wZXJhbmQ6 RE9VQkxFIDEgImdlbmVyYWxfb3BlcmFuZCIgInIsIDxpRkQ+LCBtLCByIikp XQorICAicmVnaXN0ZXJfb3BlcmFuZCAob3BlcmFuZHNbMF0sIERJbW9kZSkg CisgICB8fCByZWdpc3Rlcl9vcGVyYW5kIChvcGVyYW5kc1swXSwgREZtb2Rl KQorICAgfHwgcmVnaXN0ZXJfb3BlcmFuZCAob3BlcmFuZHNbMV0sIERJbW9k ZSkKKyAgIHx8IHJlZ2lzdGVyX29wZXJhbmQgKG9wZXJhbmRzWzFdLCBERm1v ZGUpIgorICB7CisgICAgaWYgKDAgPT0gd2hpY2hfYWx0ZXJuYXRpdmUpIHsK KyAgICAgIHJ0eCB4b3BlcmFuZHNbMl0gOworICAgICAgaW50IHJlZzAgPSBS RUdOTyAob3BlcmFuZHNbMF0pOworICAgICAgaW50IHJlZzEgPSBSRUdOTyAo b3BlcmFuZHNbMV0pOworCisgICAgICB4b3BlcmFuZHNbMF0gPSBnZW5fcnR4 X1JFRyAoU0ltb2RlLCByZWcwICsgMik7CisgICAgICB4b3BlcmFuZHNbMV0g PSBnZW5fcnR4X1JFRyAoU0ltb2RlLCByZWcxICsgMik7CisgICAgICBpZiAo KHJlZzEgKyAyKSAhPSByZWcwKQorCXsKKwkgIG91dHB1dF9hc21faW5zbiAo Im1vdmRcdCUxLCAlMCIsIG9wZXJhbmRzKTsKKwkgIG91dHB1dF9hc21faW5z biAoIm1vdmRcdCUxLCAlMCIsIHhvcGVyYW5kcyk7CisJfQorICAgICAgZWxz ZQorCXsKKwkgIG91dHB1dF9hc21faW5zbiAoIm1vdmRcdCUxLCAlMCIsIHhv cGVyYW5kcyk7CisJICBvdXRwdXRfYXNtX2luc24gKCJtb3ZkXHQlMSwgJTAi LCBvcGVyYW5kcyk7CisJfX0KKworICAgIGVsc2UgaWYgKDEgPT0gd2hpY2hf YWx0ZXJuYXRpdmUpIHsKKyAgICAgIHJ0eCBsb19vcGVyYW5kc1syXSA7Cisg ICAgICBydHggaGlfb3BlcmFuZHNbMl0gOworCisgICAgICBsb19vcGVyYW5k c1swXSA9IGdlbl9ydHhfUkVHIChTSW1vZGUsIFJFR05PIChvcGVyYW5kc1sw XSkpOworICAgICAgaGlfb3BlcmFuZHNbMF0gPSBnZW5fcnR4X1JFRyAoU0lt b2RlLCBSRUdOTyAob3BlcmFuZHNbMF0pICsgMik7CisgICAgICBsb19vcGVy YW5kc1sxXSA9IHNpbXBsaWZ5X2dlbl9zdWJyZWcgKFNJbW9kZSwgb3BlcmFu ZHNbMV0sCisJCSAgICAgICBWT0lEbW9kZSA9PSBHRVRfTU9ERSAob3BlcmFu ZHNbMV0pCisJCSAgICAgICA/IERJbW9kZSAgOiBHRVRfTU9ERSAob3BlcmFu ZHNbMV0pLCAwKTsKKyAgICAgIGhpX29wZXJhbmRzWzFdID0gc2ltcGxpZnlf Z2VuX3N1YnJlZyAoU0ltb2RlLCBvcGVyYW5kc1sxXSwKKwkJICAgICAgIFZP SURtb2RlID09IEdFVF9NT0RFIChvcGVyYW5kc1sxXSkKKwkJICAgICAgID8g REltb2RlICA6IEdFVF9NT0RFIChvcGVyYW5kc1sxXSksIDQpOworICAgICAg b3V0cHV0X2FzbV9pbnNuICgibW92ZFx0JTEsICUwIiwgbG9fb3BlcmFuZHMp OworICAgICAgb3V0cHV0X2FzbV9pbnNuICgibW92ZFx0JTEsICUwIiwgaGlf b3BlcmFuZHMpO30KKworICAgIGVsc2UgaWYgKDIgPT0gd2hpY2hfYWx0ZXJu YXRpdmUpIHsKKyAgICAgIHJ0eCB4b3BlcmFuZHNbMl0gOworICAgICAgaW50 IHJlZzAgPSBSRUdOTyAob3BlcmFuZHNbMF0pLCByZWcxID0gLTIgOworICAg ICAgcnR4IGFkZHIgOworCisJaWYgKE1FTV9QIChvcGVyYW5kc1sxXSkpCisJ ICBhZGRyID0gWEVYUCAob3BlcmFuZHNbMV0sIDApOworCWVsc2UKKwkgIGFk ZHIgPSBOVUxMX1JUWCA7CisJc3dpdGNoIChHRVRfQ09ERSAoYWRkcikpCisJ ICB7CisJICAgIGNhc2UgUkVHOgorCSAgICBjYXNlIFNVQlJFRzoKKwkgICAg ICByZWcxID0gUkVHTk8gKGFkZHIpOworCSAgICAgIGJyZWFrIDsKKwkgICAg Y2FzZSBQTFVTOgorCSAgICAgIHN3aXRjaCAoR0VUX0NPREUgKFhFWFAgKGFk ZHIsIDApKSkgeworCQljYXNlIFJFRzoKKwkJY2FzZSBTVUJSRUc6CisJCSAg cmVnMSA9IFJFR05PIChYRVhQIChhZGRyLCAwKSk7CisJCSAgYnJlYWsgOwor CQljYXNlIFBMVVM6CisJCSAgcmVnMSA9IFJFR05PIChYRVhQIChYRVhQIChh ZGRyLCAwKSwgMCkpOworCQkgIGJyZWFrIDsKKwkJZGVmYXVsdDoKKwkJICBp bmZvcm0gKERFQ0xfU09VUkNFX0xPQ0FUSU9OIChjZnVuLT5kZWNsKSwgInVu ZXhwZWN0ZWQgZXhwcmVzc2lvbjsgYWRkcjoiKTsKKwkJICBkZWJ1Z19ydHgg KGFkZHIpOworCQkgIGluZm9ybSAoREVDTF9TT1VSQ0VfTE9DQVRJT04gKGNm dW4tPmRlY2wpLCAib3BlcmFuZHNbMV06Iik7CisJCSAgZGVidWdfcnR4IChv cGVyYW5kc1sxXSk7CisJCSAgaW5mb3JtIChERUNMX1NPVVJDRV9MT0NBVElP TiAoY2Z1bi0+ZGVjbCksICJnZW5lcmF0ZWQgY29kZSBtaWdodCBub3cgd29y a1xuIik7CisJCSAgYnJlYWsgO30KKwkgICAgICBicmVhayA7CisJICAgIGRl ZmF1bHQ6CisJICAgICAgYnJlYWsgOworCSAgfQorCisJeG9wZXJhbmRzWzBd ID0gZ2VuX3J0eF9SRUcgKFNJbW9kZSwgcmVnMCArIDIpOworCXhvcGVyYW5k c1sxXSA9IG9mZnNldF9hZGRyZXNzIChvcGVyYW5kc1sxXSwgR0VOX0lOVCAo NCksIDIpOworCWdjY19hc3NlcnQgKChyZWcwICsgMSkgIT0gcmVnMSk7CisJ aWYgKHJlZzAgIT0gcmVnMSAgJiYgIChyZWcxICsgMSkgIT0gcmVnMCkKKwkg IHsKKwkgICAgb3V0cHV0X2FzbV9pbnNuICgibG9hZGRcdCUxLCAlMCIsIG9w ZXJhbmRzKTsKKwkgICAgb3V0cHV0X2FzbV9pbnNuICgibG9hZGRcdCUxLCAl MCIsIHhvcGVyYW5kcyk7CisJICB9CisJZWxzZQorCSAgeworCSAgICBvdXRw dXRfYXNtX2luc24gKCJsb2FkZFx0JTEsICUwIiwgeG9wZXJhbmRzKTsKKwkg ICAgb3V0cHV0X2FzbV9pbnNuICgibG9hZGRcdCUxLCAlMCIsIG9wZXJhbmRz KTsKKwkgIH19CisgICAgZWxzZQorICAgICAgeworCXJ0eCB4b3BlcmFuZHNb Ml0gOworCXhvcGVyYW5kc1swXSA9IG9mZnNldF9hZGRyZXNzIChvcGVyYW5k c1swXSwgR0VOX0lOVCAoNCksIDIpOworCXhvcGVyYW5kc1sxXSA9IGdlbl9y dHhfUkVHIChTSW1vZGUsIFJFR05PIChvcGVyYW5kc1sxXSkgKyAyKTsKKwlv dXRwdXRfYXNtX2luc24gKCJzdG9yZFx0JTEsICUwIiwgb3BlcmFuZHMpOwor ICAgCW91dHB1dF9hc21faW5zbiAoInN0b3JkXHQlMSwgJTAiLCB4b3BlcmFu ZHMpOworICAgICAgfQorICAgIHJldHVybiAiIiA7CisgIH0KKyAgWyhzZXRf YXR0ciAibGVuZ3RoIiAiNCwgPGxJbW1Bcml0aEQ+LCA8bEltbUFyaXRoRD4s IDxsSW1tQXJpdGhEPiIpXQorKQorCis7IEFsbCBsb25nIChTSSwgU0YpIHJl Z2lzdGVyIG1vdmUsIGxvYWQgYW5kIHN0b3JlIG9wZXJhdGlvbnMKKzsgVGhl IHByaW50X29wZXJhbmQgd2lsbCB0YWtlIGNhcmUgb2YgcHJpbnRpbmcgdGhl IHJlZ2lzdGVyIHBhaXIgCis7IHdoZW4gbW9kZSBpcyBTSS9TRiBhbmQgcmVn aXN0ZXIgaXMgaW4gU0hPUlRfUkVHUworKGRlZmluZV9pbnNuICIqbW92PG1v ZGU+X2xvbmciCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOkxPTkcgMCAibm9u aW1tZWRpYXRlX29wZXJhbmQiICI9ciwgciwgciwgbSIpCisJKG1hdGNoX29w ZXJhbmQ6TE9ORyAxICJnZW5lcmFsX29wZXJhbmQiICJyLCA8aUY+LCBtLCBy IikpXQorICAicmVnaXN0ZXJfb3BlcmFuZCAob3BlcmFuZHNbMF0sIDxNT0RF Pm1vZGUpCisgICB8fCByZWdpc3Rlcl9vcGVyYW5kIChvcGVyYW5kc1sxXSwg PE1PREU+bW9kZSkiCisgICJACisgIG1vdjx0SXNhPlx0JTEsICUwCisgIG1v djx0SXNhPlx0JTEsICUwCisgIGxvYWQ8dElzYT5cdCUxLCAlMAorICBzdG9y PHRJc2E+XHQlMSwgJTAiCisgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjIsPGxJ bW1Bcml0aD4sPGxJbW1Bcml0aD4sPGxJbW1Bcml0aD4iKV0KKykKKworOzsg QWxsIHNob3J0IChRSSwgSEkpIHJlZ2lzdGVyIG1vdmUsIGxvYWQgYW5kIHN0 b3JlIG9wZXJhdGlvbnMKKyhkZWZpbmVfaW5zbiAiKm1vdjxtb2RlPl9zaG9y dCIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0hPUlQgMCAibm9uaW1tZWRp YXRlX29wZXJhbmQiICI9ciwgciwgciwgbSwgbSIpCisJKG1hdGNoX29wZXJh bmQ6U0hPUlQgMSAiZ2VuZXJhbF9vcGVyYW5kIiAiciwgPGlGPiwgbSwgciwg PExMPiIpKV0KKyAgIihyZWdpc3Rlcl9vcGVyYW5kIChvcGVyYW5kc1swXSwg PE1PREU+bW9kZSkpCisgICAgfHwgKHN0b3JlX29wZXJhbmQgKG9wZXJhbmRz WzBdLCA8TU9ERT5tb2RlKQorCSYmIChyZWdpc3Rlcl9vcGVyYW5kIChvcGVy YW5kc1sxXSwgPE1PREU+bW9kZSkKKwkgICAgfHwgdTRiaXRzX29wZXJhbmQg KG9wZXJhbmRzWzFdLCA8TU9ERT5tb2RlKSkpIgorICAiQAorICBtb3Y8dElz YT5cdCUxLCAlMAorICBtb3Y8dElzYT5cdCUxLCAlMAorICBsb2FkPHRJc2E+ XHQlMSwgJTAKKyAgc3Rvcjx0SXNhPlx0JTEsICUwCisgIHN0b3I8dElzYT5c dCUxLCAlMCIKKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiMiw8bEltbUFyaXRo Piw8bEltbUFyaXRoPiw8bEltbUFyaXRoPiw8bEltbUFyaXRoPiIpXQorKQor Cis7OyAgQ29tcGFyZSBJbnN0cnVjdGlvbnMKKzsgSW5zdHJ1Y3Rpb24gZ2Vu ZXJhdGVkIGNvbXBhcmVzIHRoZSBvcGVyYW5kcyBpbiByZXZlcnNlIG9yZGVy Cis7IFRoZXJlZm9yZSwgd2hpbGUgcHJpbnRpbmcgdGhlIGFzbSwgdGhlIHJl dmVyc2Ugb2YgdGhlCis7IGNvbXBhcmUgY29uZGl0aW9uIHNoYWxsIGJlIHBy aW50ZWQuCisoZGVmaW5lX2luc24gImNicmFuY2g8bW9kZT40IgorICBbKHNl dCAocGMpCisJKGlmX3RoZW5fZWxzZSAobWF0Y2hfb3BlcmF0b3IgMCAib3Jk ZXJlZF9jb21wYXJpc29uX29wZXJhdG9yIgorCQkgICAgICBbKG1hdGNoX29w ZXJhbmQ6Q1IxNklNIDEgInJlZ2lzdGVyX29wZXJhbmQiICJyLHIiKQorCQkg ICAgICAgKG1hdGNoX29wZXJhbmQ6Q1IxNklNIDIgIm5vbm1lbW9yeV9vcGVy YW5kIiAicixuIildKQorCQkgICAgICAgKGxhYmVsX3JlZiAobWF0Y2hfb3Bl cmFuZCAzICIiICIiKSkKKyAgICAgICAgICAgICAgICAgICAgICAocGMpKSkK KyAgIChjbG9iYmVyIChjYzApKV0KKyAgIiIKKyAgImNtcDx0SXNhPlx0JTIs ICUxXDtiJWQwXHQlbDMiCisgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjYsNiIp XQorKQorCisoZGVmaW5lX2V4cGFuZCAiY21wPG1vZGU+IgorICBbKHBhcmFs bGVsIFsoc2V0IChjYzApCisgICAgKGNvbXBhcmUgKG1hdGNoX29wZXJhbmQ6 Q1IxNklNIDAgInJlZ2lzdGVyX29wZXJhbmQiICIiKQorCSAgICAgKG1hdGNo X29wZXJhbmQ6Q1IxNklNIDEgIm5vbm1lbW9yeV9vcGVyYW5kIiAiIikpKQor ICAgIChjbG9iYmVyIChtYXRjaF9zY3JhdGNoOkhJIDIgIj1yIikpXSApIF0K KyAgIiIKKyAgIiIpCisKKzs7ICBTY29uZCBJbnN0cnVjdGlvbnMKKyhkZWZp bmVfZXhwYW5kICJjc3RvcmU8bW9kZT40IgorICBbKHNldCAoY2MwKQorCShj b21wYXJlIChtYXRjaF9vcGVyYW5kOkNSMTZJTSAyICJyZWdpc3Rlcl9vcGVy YW5kIiAiIikKKwkJIChtYXRjaF9vcGVyYW5kOkNSMTZJTSAzICJub25tZW1v cnlfb3BlcmFuZCIgIiIpKSkKKyAgIChzZXQgKG1hdGNoX29wZXJhbmQ6SEkg MCAicmVnaXN0ZXJfb3BlcmFuZCIpCisJKG1hdGNoX29wZXJhdG9yOkhJIDEg Im9yZGVyZWRfY29tcGFyaXNvbl9vcGVyYXRvciIKKwlbKGNjMCkgKGNvbnN0 X2ludCAwKV0pKV0KKyAgIiIKKyAgIiIKKykKKworKGRlZmluZV9pbnNuICIq Y21wPG1vZGU+X2luc24iCisgIFsoc2V0IChjYzApCisJKGNvbXBhcmUgKG1h dGNoX29wZXJhbmQ6Q1IxNklNIDAgInJlZ2lzdGVyX29wZXJhbmQiICJyLHIi KQorCQkgKG1hdGNoX29wZXJhbmQ6Q1IxNklNIDEgIm5vbm1lbW9yeV9vcGVy YW5kIiAicixuIikpKV0KKyAgIiIKKyAgImNtcDx0SXNhPlx0JTEsICUwIgor ICBbKHNldF9hdHRyICJsZW5ndGgiICIyLDQiKV0KKykKKworKGRlZmluZV9p bnNuICJzQ09ORF9pbnRlcm5hbCIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6 SEkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikKKwkobWF0Y2hfb3BlcmF0 b3I6SEkgMSAib3JkZXJlZF9jb21wYXJpc29uX29wZXJhdG9yIgorCVsoY2Mw KSAoY29uc3RfaW50IDApXSkpXQorICAiIgorICAicyVkMVx0JTAiCisgIFso c2V0X2F0dHIgImxlbmd0aCIgIjIiKV0KKykKKworOzsgIEp1bXBzIGFuZCBC cmFuY2hlcworKGRlZmluZV9pbnNuICJpbmRpcmVjdF9qdW1wX3JldHVybiIK KyAgWyhwYXJhbGxlbAorICAgIFsoc2V0IChwYykKKwkgIChyZWc6U0kgUkFf UkVHTlVNKSkKKyAgIChyZXR1cm4pXSkKKyAgXQorICAicmVsb2FkX2NvbXBs ZXRlZCIKKyAgImp1bXBcdCAocmEpIgorICBbKHNldF9hdHRyICJsZW5ndGgi ICIyIildCispCisKKyhkZWZpbmVfaW5zbiAianVtcF9yZXR1cm4iCisgIFso cGFyYWxsZWwKKyAgICBbKHVuc3BlYzpTSSBbKGNvbnN0X2ludCAwKV0gVU5T UEVDX1JFVFVSTl9BRERSKQorICAgICAocmV0dXJuKV0pXQorICAicmVsb2Fk X2NvbXBsZXRlZCIKKyAgImp1bXBcdChyYSkiCisgIFsoc2V0X2F0dHIgImxl bmd0aCIgIjIiKV0KKykKKworKGRlZmluZV9pbnNuICJpbmRpcmVjdF9qdW1w IgorICBbKHNldCAocGMpCisJKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnX29y X3N5bV9vcGVyYW5kIiAicixpIikpXQorICAiIgorICAiQAorICBqdW1wXHQl MAorICBiclx0JWEwIgorICBbKHNldF9hdHRyICJsZW5ndGgiICIyLDYiKV0K KykKKworKGRlZmluZV9pbnNuICJpbnRlcnJ1cHRfcmV0dXJuIgorICBbKHBh cmFsbGVsCisgICAgWyh1bnNwZWNfdm9sYXRpbGUgWyhjb25zdF9pbnQgMCld IDApCisgICAocmV0dXJuKV0pXQorICAiIgorICB7CisgICAgcmV0dXJuIGNy MTZfcHJlcGFyZV9wdXNoX3BvcF9zdHJpbmcgKDEpOworICB9CisgIFsoc2V0 X2F0dHIgImxlbmd0aCIgIjE0IildCispCisKKyhkZWZpbmVfaW5zbiAianVt cF90b19pbW0iCisgIFsoc2V0IChwYykKKwkobWF0Y2hfb3BlcmFuZCAwICJq dW1wX2ltbV9vcGVyYW5kIiAiaSIpKV0KKyAgIiIKKyAgImJyXHQlYzAiCisg IFsoc2V0X2F0dHIgImxlbmd0aCIgIjYiKV0KKykKKworKGRlZmluZV9pbnNu ICJqdW1wIgorICBbKHNldCAocGMpCisJKGxhYmVsX3JlZiAobWF0Y2hfb3Bl cmFuZCAwICIiICIiKSkpXQorICAiIgorICAiYnJcdCVsMCIKKyAgWyhzZXRf YXR0ciAibGVuZ3RoIiAiNiIpXQorKQorCis7OyAgRnVuY3Rpb24gUHJvbG9n dWUgYW5kIEVwaWxvZ3VlCisoZGVmaW5lX2V4cGFuZCAicHJvbG9ndWUiCisg IFsoY29uc3RfaW50IDApXQorICAiIgorICB7CisgICAgY3IxNl9leHBhbmRf cHJvbG9ndWUgKCk7CisgICAgRE9ORTsKKyAgfQorKQorCisoZGVmaW5lX2lu c24gInB1c2hfZm9yX3Byb2xvZ3VlIgorICBbKHBhcmFsbGVsCisgICAgWyhz ZXQgKHJlZzpTSSBTUF9SRUdOVU0pCisJICAobWludXM6U0kgKHJlZzpTSSBT UF9SRUdOVU0pCisJCSAgICAobWF0Y2hfb3BlcmFuZDpTSSAwICJpbW1lZGlh dGVfb3BlcmFuZCIgImkiKSkpXSldCisgICJyZWxvYWRfY29tcGxldGVkIgor ICB7CisgICAgcmV0dXJuIGNyMTZfcHJlcGFyZV9wdXNoX3BvcF9zdHJpbmcg KDApOworICB9CisgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjQiKV0KKykKKwor KGRlZmluZV9leHBhbmQgImVwaWxvZ3VlIgorICBbKHJldHVybildCisgICIi CisgIHsKKyAgICBjcjE2X2V4cGFuZF9lcGlsb2d1ZSAoKTsKKyAgICBET05F OworICB9CispCisKKyhkZWZpbmVfaW5zbiAicG9wX2FuZF9wb3ByZXRfcmV0 dXJuIgorICBbKHBhcmFsbGVsCisgICAgWyhzZXQgKHJlZzpTSSBTUF9SRUdO VU0pCisJICAocGx1czpTSSAocmVnOlNJIFNQX1JFR05VTSkKKwkJICAgKG1h dGNoX29wZXJhbmQ6U0kgMCAiaW1tZWRpYXRlX29wZXJhbmQiICJpIikpKQor ICAgICAodXNlIChyZWc6U0kgUkFfUkVHTlVNKSkKKyAgICAgKHJldHVybild KQorICBdCisgICJyZWxvYWRfY29tcGxldGVkIgorICB7CisgICAgcmV0dXJu IGNyMTZfcHJlcGFyZV9wdXNoX3BvcF9zdHJpbmcgKDEpOworICB9CisgIFso c2V0X2F0dHIgImxlbmd0aCIgIjQiKV0KKykKKworKGRlZmluZV9pbnNuICJw b3ByZXRfUkFfcmV0dXJuIgorICBbKHBhcmFsbGVsCisgICAgWyh1c2UgKHJl ZzpTSSBSQV9SRUdOVU0pKQorICAgICAocmV0dXJuKV0pCisgIF0KKyAgInJl bG9hZF9jb21wbGV0ZWQiCisgICJwb3ByZXRcdHJhIgorICBbKHNldF9hdHRy ICJsZW5ndGgiICIyIildCispCisKKzs7ICBUYWJsZSBKdW1wCisoZGVmaW5l X2luc24gInRhYmxlanVtcCIKKyAgWyhzZXQgKHBjKQorCShtYXRjaF9vcGVy YW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICJyIikpCisgICAodXNlIChs YWJlbF9yZWY6U0kgKG1hdGNoX29wZXJhbmQgMSAiIiAiIikpKV0KKyAgIiFm bGFnX3BpYyIKKyAgImp1bXBcdCUwIgorICBbKHNldF9hdHRyICJsZW5ndGgi ICIyIildCispCisKKzs7ICBDYWxsIEluc3RydWN0aW9ucworKGRlZmluZV9l eHBhbmQgImNhbGwiCisgIFsoY2FsbCAobWF0Y2hfb3BlcmFuZDpRSSAwICJt ZW1vcnlfb3BlcmFuZCIgIiIpCisJIChtYXRjaF9vcGVyYW5kIDEgIiIgIiIp KV0KKyAgIiIKKyAgeworICAgIGlmIChmbGFnX3BpYyAmJiAhIGxlZ2l0aW1h dGVfcGljX29wZXJhbmRfcCAob3BlcmFuZHNbMF0pKQorICAgICAgeworCW9w ZXJhbmRzWzBdID0gZ2VuX2NvbnN0X21lbSAoUUltb2RlLAorCWxlZ2l0aW1p emVfcGljX2FkZHJlc3MgKFhFWFAgKG9wZXJhbmRzWzBdLCAwKSwgUG1vZGUs IDApKTsKKwllbWl0X2NhbGxfaW5zbiAoZ2VuX2NyMTZfY2FsbCAob3BlcmFu ZHNbMF0sIG9wZXJhbmRzWzFdKSk7CisgICAgICB9CisgICAgZWxzZQorICAg ICAgZW1pdF9jYWxsX2luc24gKGdlbl9jcjE2X2NhbGwgKG9wZXJhbmRzWzBd LCBvcGVyYW5kc1sxXSkpOworICAgICAgRE9ORTsKKyAgfQorKQorCisoZGVm aW5lX2V4cGFuZCAiY3IxNl9jYWxsIgorICBbKHBhcmFsbGVsCisgICAgWyhj YWxsIChtYXRjaF9vcGVyYW5kOlFJIDAgIm1lbW9yeV9vcGVyYW5kIiAiIikK KwkgICAobWF0Y2hfb3BlcmFuZCAxICIiICIiKSkKKyAgIChjbG9iYmVyIChy ZWc6U0kgUkFfUkVHTlVNKSldKV0KKyAgIiIKKyAgIiIKKykKKworKGRlZmlu ZV9pbnNuICJjcjE2X2NhbGxfaW5zbl9icmFuY2hfcGljIgorICBbKGNhbGwg KG1lbTpRSSAobWF0Y2hfb3BlcmFuZDpTSSAwICJjYWxsX2ltbV9vcGVyYW5k IiAiaSIpKQorCSAobWF0Y2hfb3BlcmFuZCAxICIiICIiKSkKKyAgIChjbG9i YmVyIChtYXRjaF9vcGVyYW5kOlNJIDIgInJlZ2lzdGVyX29wZXJhbmQiICIr ciIpKV0KKyAgImZsYWdfcGljID09IEZBUl9QSUMiCisgIHsKKyAgICBpZiAo R0VUX0NPREUgKG9wZXJhbmRzWzBdKSAhPSBDT05TVF9JTlQpCisgICAgICBy ZXR1cm4gImxvYWRkXHQlZzAsICUyIFxuXHRqYWwgJTIiOworICAgIGVsc2UK KyAgICAgIHJldHVybiAiamFsICUyIjsKKyAgfQorICBbKHNldF9hdHRyICJs ZW5ndGgiICI4IildCispCisKKyhkZWZpbmVfaW5zbiAiY3IxNl9jYWxsX2lu c25fYnJhbmNoIgorICBbKGNhbGwgKG1lbTpRSSAobWF0Y2hfb3BlcmFuZDpT SSAwICJjYWxsX2ltbV9vcGVyYW5kIiAiaSIpKQorCSAobWF0Y2hfb3BlcmFu ZCAxICIiICIiKSkKKyAgIChjbG9iYmVyIChtYXRjaF9vcGVyYW5kOlNJIDIg InJlZ2lzdGVyX29wZXJhbmQiICIrciIpKV0KKyAgImZsYWdfcGljID09IDAg fHwgZmxhZ19waWMgPT0gTkVBUl9QSUMiCisgIHsKKyAgICAvKiBQcmludCB0 aGUgaW1tZWRpYXRlIGFkZHJlc3MgZm9yIGJhbCAKKyAgICAgICAnYicgaXMg dXNlZCBpbnN0ZWFkIG9mICdhJyB0byBhdm9pZCBjb21waWxlciBjYWxsaW5n CisgICAgICAgdGhlIEdPX0lGX0xFR0lUSU1BVEVfQUREUkVTUyB3aGljaCBj YW5ub3QKKyAgICAgICBwZXJmb3JtIGNoZWNrcyBvbiBjb25zdF9pbnQgY29k ZSBhZGRyZXNzZXMgYXMgaXQKKyAgICAgICBhc3N1bWVzIGFsbCBjb25zdF9p bnQgYXJlIGRhdGEgYWRkcmVzc2VzLgorICAgICovCisgICAgaWYgKEdFVF9D T0RFIChvcGVyYW5kc1swXSkgIT0gQ09OU1RfSU5UKQorICAgICAgcmV0dXJu ICJiYWwgKHJhKSwgJWEwIjsKKyAgICBlbHNlCisgICAgICBvcGVyYW5kc1s0 XSA9IEdFTl9JTlQgKChJTlRWQUwgKG9wZXJhbmRzWzBdKSk+PjEpOworICAg ICAgcmV0dXJuICJtb3ZkXHQlZzQsXHQocjEscjApXG5cdGphbFx0KHIxLHIw KSI7CQorICB9CisgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjYiKV0KKykKKwor KGRlZmluZV9pbnNuICJjcjE2X2NhbGxfaW5zbl9qdW1wIgorICBbKGNhbGwg KG1lbTpRSSAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5k IiAiciIpKQorCSAobWF0Y2hfb3BlcmFuZCAxICIiICIiKSkKKyAgIChjbG9i YmVyIChtYXRjaF9vcGVyYW5kOlNJIDIgInJlZ2lzdGVyX29wZXJhbmQiICIr ciIpKV0KKyAgIiIKKyAgImphbFx0JTAiCisgIFsoc2V0X2F0dHIgImxlbmd0 aCIgIjIiKV0KKykKKworOzsgIENhbGwgVmFsdWUgSW5zdHJ1Y3Rpb25zCisK KyhkZWZpbmVfZXhwYW5kICJjYWxsX3ZhbHVlIgorICBbKHNldCAobWF0Y2hf b3BlcmFuZCAwICJnZW5lcmFsX29wZXJhbmQiICIiKQorCShjYWxsIChtYXRj aF9vcGVyYW5kOlFJIDEgIm1lbW9yeV9vcGVyYW5kIiAiIikKKwkgICAgICAo bWF0Y2hfb3BlcmFuZCAyICIiICIiKSkpXQorICAiIgorICB7CisgICAgaWYg KGZsYWdfcGljICYmICFsZWdpdGltYXRlX3BpY19vcGVyYW5kX3AgKG9wZXJh bmRzWzFdKSkKKyAgICAgIHsKKwlvcGVyYW5kc1sxXSA9IGdlbl9jb25zdF9t ZW0gKFFJbW9kZSwKKwlsZWdpdGltaXplX3BpY19hZGRyZXNzIChYRVhQIChv cGVyYW5kc1sxXSwgMCksIFBtb2RlLCAwKSk7CisJZW1pdF9jYWxsX2luc24g KGdlbl9jcjE2X2NhbGxfdmFsdWUgKG9wZXJhbmRzWzBdLCBvcGVyYW5kc1sx XSwgb3BlcmFuZHNbMl0pKTsKKyAgICAgIH0KKyAgICBlbHNlCisJZW1pdF9j YWxsX2luc24gKGdlbl9jcjE2X2NhbGxfdmFsdWUgKG9wZXJhbmRzWzBdLCBv cGVyYW5kc1sxXSwgb3BlcmFuZHNbMl0pKTsKKyAgICBET05FOworICB9Cisp CisKKyhkZWZpbmVfZXhwYW5kICJjcjE2X2NhbGxfdmFsdWUiCisgIFsocGFy YWxsZWwKKyAgICBbKHNldCAobWF0Y2hfb3BlcmFuZCAwICJnZW5lcmFsX29w ZXJhbmQiICIiKQorCSAgKGNhbGwgKG1hdGNoX29wZXJhbmQgMSAibWVtb3J5 X29wZXJhbmQiICIiKQorCQkobWF0Y2hfb3BlcmFuZCAyICIiICIiKSkpCisg ICAgIChjbG9iYmVyIChyZWc6U0kgUkFfUkVHTlVNKSldKV0KKyAgIiIKKyAg IiIKKykKKworKGRlZmluZV9pbnNuICJjcjE2X2NhbGxfdmFsdWVfaW5zbl9i cmFuY2hfcGljIgorICBbKHNldCAobWF0Y2hfb3BlcmFuZCAwICIiICI9ZyIp CisJKGNhbGwgKG1lbTpRSSAobWF0Y2hfb3BlcmFuZDpTSSAxICJjYWxsX2lt bV9vcGVyYW5kIiAiaSIpKQorCSAgICAgIChtYXRjaF9vcGVyYW5kIDIgIiIg IiIpKSkKKyAgIChjbG9iYmVyIChtYXRjaF9vcGVyYW5kOlNJIDMgInJlZ2lz dGVyX29wZXJhbmQiICIrciIpKV0KKyAgImZsYWdfcGljID09IEZBUl9QSUMi CisgIHsKKyAgICBpZiAoR0VUX0NPREUgKG9wZXJhbmRzWzFdKSAhPSBDT05T VF9JTlQpCisgICAgICByZXR1cm4gImxvYWRkXHQlZzEsICUzIFxuXHRqYWwg JTMiOworICAgIGVsc2UKKyAgICAgIHJldHVybiAiamFsICUzIjsKKyAgfQor ICBbKHNldF9hdHRyICJsZW5ndGgiICI4IildCispCisKKyhkZWZpbmVfaW5z biAiY3IxNl9jYWxsX3ZhbHVlX2luc25fYnJhbmNoIgorICBbKHNldCAobWF0 Y2hfb3BlcmFuZCAwICIiICI9ZyIpCisJKGNhbGwgKG1lbTpRSSAobWF0Y2hf b3BlcmFuZDpTSSAxICJjYWxsX2ltbV9vcGVyYW5kIiAiaSIpKQorCSAgICAg IChtYXRjaF9vcGVyYW5kIDIgIiIgIiIpKSkKKyAgIChjbG9iYmVyIChtYXRj aF9vcGVyYW5kOlNJIDMgInJlZ2lzdGVyX29wZXJhbmQiICIrciIpKV0KKyAg ImZsYWdfcGljID09IDAgfHwgZmxhZ19waWMgPT0gTkVBUl9QSUMiCisgIHsK KyAgICAvKiBQcmludCB0aGUgaW1tZWRpYXRlIGFkZHJlc3MgZm9yIGJhbCAK KyAgICAgICAnYicgaXMgdXNlZCBpbnN0ZWFkIG9mICdhJyB0byBhdm9pZCBj b21waWxlciBjYWxsaW5nCisgICAgICAgdGhlIEdPX0lGX0xFR0lUSU1BVEVf QUREUkVTUyB3aGljaCBjYW5ub3QKKyAgICAgICBwZXJmb3JtIGNoZWNrcyBv biBjb25zdF9pbnQgY29kZSBhZGRyZXNzZXMgYXMgaXQKKyAgICAgICBhc3N1 bWVzIGFsbCBjb25zdF9pbnQgYXJlIGRhdGEgYWRkcmVzc2VzLgorICAgICov CisgICAgaWYgKEdFVF9DT0RFIChvcGVyYW5kc1sxXSkgIT0gQ09OU1RfSU5U KSAKKyAgICAgIHJldHVybiAiYmFsIChyYSksICVhMSI7CisgICAgZWxzZQor ICAgICAgeworCW9wZXJhbmRzWzRdID0gR0VOX0lOVCAoKElOVFZBTCAob3Bl cmFuZHNbMV0pKT4+MSk7CisgICAgICAgIHJldHVybiAibW92ZFx0JWc0LFx0 KHIxLHIwKVxuXHRqYWxcdChyMSxyMCkiOwkKKyAgICAgIH0KKyAgfQorICBb KHNldF9hdHRyICJsZW5ndGgiICI2IildCispCisKKworKGRlZmluZV9pbnNu ICJjcjE2X2NhbGxfdmFsdWVfaW5zbl9qdW1wIgorICBbKHNldCAobWF0Y2hf b3BlcmFuZCAwICIiICI9ZyIpCisgICAgICAgIChjYWxsIChtZW06UUkgKG1h dGNoX29wZXJhbmQ6U0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKSkKKyAg ICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQgMiAiIiAiIikpKQorICAgKGNs b2JiZXIgKG1hdGNoX29wZXJhbmQ6U0kgMyAicmVnaXN0ZXJfb3BlcmFuZCIg IityIikpXQorICAiIgorICAiamFsXHQlMSIKKyAgWyhzZXRfYXR0ciAibGVu Z3RoIiAiMiIpXQorKQorCisKKzs7ICBOb3AKKyhkZWZpbmVfaW5zbiAibm9w IgorICBbKGNvbnN0X2ludCAwKV0KKyAgIiIKKyAgIm5vcFx0IgorKQorCis7 OyBQSUMKKy8qIFdoZW4gZ2VuZXJhdGluZyBwaWMsIHdlIG5lZWQgdG8gbG9h ZCB0aGUgc3ltYm9sIG9mZnNldCBpbnRvIGEgcmVnaXN0ZXIuCisgICBTbyB0 aGF0IHRoZSBvcHRpbWl6ZXIgZG9lcyBub3QgY29uZnVzZSB0aGlzIHdpdGgg YSBub3JtYWwgc3ltYm9sIGxvYWQKKyAgIHdlIHVzZSBhbiB1bnNwZWMuICBU aGUgb2Zmc2V0IHdpbGwgYmUgbG9hZGVkIGZyb20gYSBjb25zdGFudCBwb29s IGVudHJ5LAorICAgc2luY2UgdGhhdCBpcyB0aGUgb25seSB0eXBlIG9mIHJl bG9jYXRpb24gd2UgY2FuIHVzZS4gICovCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgCisoZGVmaW5lX2luc24gInVuc3BlY19icm9fYWRk ciIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3Bl cmFuZCIgIj1yIikKKwkodW5zcGVjOlNJIFsobWF0Y2hfb3BlcmFuZCAxICIi ICIiKV0gVU5TUEVDX1BJQ19BRERSKSldCisgICIiCisgICJtb3ZkIFx0JWYx LCAlMCIKKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiNCIpXQorKQorCisoZGVm aW5lX2luc24gInVuc3BlY19nb3RfYWRkciIKKyAgWyhzZXQgKG1hdGNoX29w ZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikKKwkodW5zcGVj OlNJIFsobWF0Y2hfb3BlcmFuZCAxICIiICIiKV0gVU5TUEVDX1BJQ19MT0FE X0FERFIpKV0KKyAgIiIKKyAgImxvYWRkIFx0JWcxLCAlMCIKKyAgWyhzZXRf YXR0ciAibGVuZ3RoIiAiNiIpXQorKQotLS0gb3JpZy9nY2MvY29uZmlnL2Ny MTYvY3IxNi5vcHQJMTk3MC0wMS0wMSAwNTozMDowMC4wMDAwMDAwMDAgKzA1 MzAKKysrIG1vZC9nY2MvY29uZmlnL2NyMTYvY3IxNi5vcHQJMjAxMS0wNi0y OCAxMjozNDozNC4wMDAwMDAwMDAgKzA1MzAKQEAgLTAsMCArMSw1MSBAQAor OyBPcHRpb25zIGZvciB0aGUgTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBDUjE2 IHBvcnQgb2YgdGhlIGNvbXBpbGVyLgorOyBDb3B5cmlnaHQgKEMpIDIwMTEg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCis7IENvbnRyaWJ1dGVk IGJ5IEtQSVQgQ3VtbWlucyBJbmZvc3lzdGVtcyBMaW1pdGVkLgorOworOyBU aGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCis7Cis7IEdDQyBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 IGl0Cis7IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCis7IGJ5IHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3Vy Cis7IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCis7Cis7IEdDQyBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LCBidXQgV0lUSE9VVAorOyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKzsgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYworOyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu Cis7Cis7IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCis7IGFsb25nIHdpdGggR0ND OyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCis7IDxodHRw Oi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworbXNpbQorVGFyZ2V0Cist bXNpbSAgIFVzZSBzaW11bGF0b3IgcnVudGltZQorCittYml0LW9wcworVGFy Z2V0IFJlcG9ydCBNYXNrKEJJVF9PUFMpCitHZW5lcmF0ZSBTQklULCBDQklU IGluc3RydWN0aW9ucworCittbWFjCitUYXJnZXQgUmVwb3J0IE1hc2soTUFD KQorU3VwcG9ydCBtdWx0aXBseSBhY2N1bXVsYXRlIGluc3RydWN0aW9ucwor CittZGVidWctYWRkcgorVGFyZ2V0IFJlamVjdE5lZ2F0aXZlIFZhcihUQVJH RVRfREVCVUdfQUREUikgVW5kb2N1bWVudGVkCisKK21kYXRhLW1vZGVsPQor VGFyZ2V0IFJlamVjdE5lZ2F0aXZlIEpvaW5lZE9yTWlzc2luZyBWYXIoY3Ix Nl9kYXRhX21vZGVsKQorVHJlYXQgZGF0YSByZWZlcmVuY2VzIGFzIG5lYXIs IGZhciBvciBtZWRpdW0uIG1lZGl1bSBpcyBkZWZhdWx0CisKK21jcjE2Ywor VGFyZ2V0IFJlamVjdE5lZ2F0aXZlIE1hc2soQ1IxNkMpCitHZW5lcmF0ZSBj b2RlIGZvciBDUjE2QyBhcmNoaXRlY3R1cmUKKworbWNyMTZjcGx1cworVGFy Z2V0IFJlamVjdE5lZ2F0aXZlIEludmVyc2VNYXNrKENSMTZDLENSMTZDUCkK K0dlbmVyYXRlIGNvZGUgZm9yIENSMTZDKyBhcmNoaXRlY3R1cmUgKERlZmF1 bHQpCisKK21pbnQzMgorVGFyZ2V0IFJlamVjdE5lZ2F0aXZlIE1hc2soSU5U MzIpCitUcmVhdCBpbnRlZ2VycyBhcyAzMi1iaXQuCisKLS0tIG9yaWcvZ2Nj L2NvbmZpZy9jcjE2L2NyMTYtcHJvdG9zLmgJMTk3MC0wMS0wMSAwNTozMDow MC4wMDAwMDAwMDAgKzA1MzAKKysrIG1vZC9nY2MvY29uZmlnL2NyMTYvY3Ix Ni1wcm90b3MuaAkyMDExLTA2LTI4IDEyOjM0OjM0LjAwMDAwMDAwMCArMDUz MApAQCAtMCwwICsxLDEwMCBAQAorLyogUHJvdG90eXBlcyBmb3IgZXhwb3J0 ZWQgZnVuY3Rpb25zIGRlZmluZWQgaW4gY3IxNi5jCisgICBDb3B5cmlnaHQg KEMpIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBD b250cmlidXRlZCBieSBLUElUIEN1bW1pbnMgSW5mb3N5c3RlbXMgTGltaXRl ZC4KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCisgICBHQ0Mg aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyAgIGJ5IHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMs IG9yIChhdCB5b3VyCisgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor CisgICBHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgIEFOWSBXQVJSQU5UWTsg d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5U QUJJTElUWQorICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBm b3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2 ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor ICAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElm IG5vdCBzZWUKKyAgIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4g ICovCisKKyNpZm5kZWYgR0NDX0NSMTZfUFJPVE9TX0gKKyNkZWZpbmUgR0ND X0NSMTZfUFJPVE9TX0gKKworLyogUmVnaXN0ZXIgdXNhZ2UuICAqLworZXh0 ZXJuIGVudW0gcmVnX2NsYXNzIGNyMTZfcmVnbm9fcmVnX2NsYXNzIChpbnQp OworZXh0ZXJuIGludCBjcjE2X2hhcmRfcmVnbm9fbW9kZV9vayAoaW50IHJl Z25vLCBlbnVtIG1hY2hpbmVfbW9kZSk7CisKKy8qIFBhc3NpbmcgZnVuY3Rp b24gYXJndW1lbnRzLiAgKi8KK2V4dGVybiBpbnQgY3IxNl9mdW5jdGlvbl9h cmdfcmVnbm9fcCAoaW50KTsKKyNpZmRlZiBUUkVFX0NPREUKKworI2lmZGVm IFJUWF9DT0RFCisKK2V4dGVybiB2b2lkIGNyMTZfaW5pdF9jdW11bGF0aXZl X2FyZ3MgKENVTVVMQVRJVkVfQVJHUyAqLCB0cmVlLCBydHgpOworCisjZW5k aWYgLyogUlRYX0NPREUuICAqLworCisjZW5kaWYgLyogVFJFRV9DT0RFLiAg Ki8KKworLyogRW51bWVyYXRpb24gZ2l2aW5nIHRoZSB2YXJpb3VzIGRhdGEg bW9kZWxzIHdlIHN1cHBvcnQuICAqLworZW51bSBkYXRhX21vZGVsX3R5cGUK K3sKKyAgRE1fREVGQVVMVCwJCS8qIERlZmF1bHQgZGF0YSBtb2RlbCAoaW4g Q1IxNkMvQysgLSB1cCB0byAxNk0pLiAgKi8KKyAgRE1fTkVBUiwJCS8qIE5l YXIgZGF0YSBtb2RlbCAgICAoaW4gQ1IxNkMvQysgLSB1cCB0byAxTSkuICAq LworICBETV9GQVIsCQkvKiBGYXIgZGF0YSBtb2RlbCAgICAgKGluIENSMTZD KyAgIC0gdXAgdG8gNEcpCisJCQkgICAoaW4gQ1IxNkMgICAgLSB1cCB0byAx Nk0pLiAgKi8KKyAgSUxMRUdBTF9ETQkJLyogSWxsZWdhbCBkYXRhIG1vZGVs LiAgKi8KK307CisKKyNpZmRlZiBSVFhfQ09ERQorCisvKiBBZGRyZXNzaW5n IE1vZGVzLiAgKi8KK3N0cnVjdCBjcjE2X2FkZHJlc3MKK3sKKyAgcnR4IGJh c2U7CSAJLyogQmFzZSByZWdpc3RlcjogQW55IHJlZ2lzdGVyIG9yIHJlZ2lz dGVyIHBhaXIuICAqLworICBydHggaW5kZXg7CQkvKiBJbmRleCByZWdpc3Rl cjogSWYgb25lIGlzIHByZXNlbnQuICAqLworICBydHggZGlzcDsJCS8qIERp c3BsYWNlbWVudCBvciBBYnNvbHV0ZSBhZGRyZXNzLiAgKi8KKyAgZW51bSBk YXRhX21vZGVsX3R5cGUgZGF0YTsJLyogZGF0YSByZWYgdHlwZS4gICovCisg IGludCBjb2RlOwkJLyogV2hldGhlciB0aGUgYWRkcmVzcyBpcyBjb2RlIGFk ZHJlc3MuIAorCQkJICAgMCAtIGRhdGEsIDEgLSBjb2RlIGxhYmVsLCAyIC0g ZnVuY3Rpb24gbGFiZWwuICAqLworfTsKKworZW51bSBjcjE2X2FkZHJ0eXBl Cit7CisgIENSMTZfSU5WQUxJRCwKKyAgQ1IxNl9SRUdfUkVMLAorICBDUjE2 X1JFR1BfUkVMLAorICBDUjE2X0lOREVYX1JFR1BfUkVMLAorICBDUjE2X0FC U09MVVRFCit9OworCitleHRlcm4gdm9pZCBub3RpY2VfdXBkYXRlX2NjIFBB UkFNUyAoKHJ0eCkpOworZXh0ZXJuIGludCBjcjE2X29wZXJhbmRfYml0X3Bv cyAoaW50IHZhbCwgaW50IGJpdHZhbCk7CitleHRlcm4gdm9pZCBjcjE2X2Rl Y29tcG9zZV9jb25zdCAocnR4IHgsIGludCAqY29kZSwKKwkJCQkgIGVudW0g ZGF0YV9tb2RlbF90eXBlICpkYXRhLAorCQkJCSAgYm9vbCB0cmVhdF9hc19j b25zdCk7CitleHRlcm4gZW51bSBjcjE2X2FkZHJ0eXBlIGNyMTZfZGVjb21w b3NlX2FkZHJlc3MgKHJ0eCBhZGRyLAorCQkJCQkJICBzdHJ1Y3QgY3IxNl9h ZGRyZXNzICpvdXQsCisJCQkJCQkgIGJvb2wgZGVidWdfcHJpbnQsCisJCQkJ CQkgIGJvb2wgdHJlYXRfYXNfY29uc3QpOworZXh0ZXJuIGludCBjcjE2X2Nv bnN0X2RvdWJsZV9vayAocnR4IG9wKTsKK2V4dGVybiBpbnQgbGVnaXRpbWF0 ZV9waWNfb3BlcmFuZF9wIChydHgpOworZXh0ZXJuIHJ0eCBsZWdpdGltaXpl X3BpY19hZGRyZXNzIChydHgsIGVudW0gbWFjaGluZV9tb2RlLCBydHgpOwor CisjZW5kaWYgLyogUlRYX0NPREUuICAqLworCisKKy8qIFByb2xvZ3VlL0Vw aWxvZ3VlIGZ1bmN0aW9ucy4gICovCitleHRlcm4gaW50IGNyMTZfaW5pdGlh bF9lbGltaW5hdGlvbl9vZmZzZXQgKGludCwgaW50KTsKK2V4dGVybiBjaGFy ICpjcjE2X3ByZXBhcmVfcHVzaF9wb3Bfc3RyaW5nIChpbnQpOworZXh0ZXJu IHZvaWQgY3IxNl9leHBhbmRfcHJvbG9ndWUgKHZvaWQpOworZXh0ZXJuIHZv aWQgY3IxNl9leHBhbmRfZXBpbG9ndWUgKHZvaWQpOworZXh0ZXJuIGNvbnN0 IGNoYXIgKmNyMTZfZW1pdF9hZGRfc3ViX2RpIChydHggKiwgaW50KTsKK2V4 dGVybiBjb25zdCBjaGFyICpjcjE2X2VtaXRfbG9naWNhbF9kaSAocnR4ICos IGludCk7CisKKy8qIEhhbmRsaW5nIHRoZSAiaW50ZXJydXB0IiBhdHRyaWJ1 dGUuICAqLworZXh0ZXJuIGludCBjcjE2X2ludGVycnVwdF9mdW5jdGlvbl9w ICh2b2lkKTsKK2V4dGVybiBib29sIGNyMTZfaXNfZGF0YV9tb2RlbCAoZW51 bSBkYXRhX21vZGVsX3R5cGUpOworCisjZW5kaWYgLyogTm90IEdDQ19DUjE2 X1BST1RPU19ILiAgKi8gCi0tLSBvcmlnL2djYy9jb25maWcvY3IxNi9kaXZt b2RoaTMuYwkxOTcwLTAxLTAxIDA1OjMwOjAwLjAwMDAwMDAwMCArMDUzMAor KysgbW9kL2djYy9jb25maWcvY3IxNi9kaXZtb2RoaTMuYwkyMDExLTA2LTI4 IDEyOjM0OjM0LjAwMDAwMDAwMCArMDUzMApAQCAtMCwwICsxLDExNSBAQAor LyogTGliZ2NjIFRhcmdldCBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiAtIEVt dWxhdGluZyBkaXYgYW5kIG1vZC4KKyAgIENvcHlyaWdodCAoQykgMjAxMSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENvbnRyaWJ1dGVk IGJ5IEtQSVQgQ3VtbWlucyBJbmZvc3lzdGVtcyBMaW1pdGVkLgorCisgICBU aGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKKyAgIEdDQyBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 IGl0CisgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlv dXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIEdDQyBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLCBidXQgV0lUSE9VVAorICAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisg ICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0 aGUgR05VIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCisKKyAgIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAz LCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorICAgcGVybWlzc2lvbnMg ZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlv biwgdmVyc2lvbgorICAgMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbi4KKworICAgWW91IHNob3VsZCBoYXZlIHJl Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgYW5kCisgICBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkg RXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworICAgc2VlIHRo ZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3Rp dmVseS4gIElmIG5vdCwgc2VlCisgICA8aHR0cDovL3d3dy5nbnUub3JnL2xp Y2Vuc2VzLz4uICAqLworCSAKKworLyogRW11bGF0ZSB0aGUgZGl2aXNpb24g YW5kIG1vZHVsdXMgb3BlcmF0aW9uLiAgKi8KKwordW5zaWduZWQgc2hvcnQK K3VkaXZtb2RoaTQgKHVuc2lnbmVkIHNob3J0IG51bSwgdW5zaWduZWQgc2hv cnQgZGVuLCBzaG9ydCBtb2R3YW50ZWQpCit7CisgIHVuc2lnbmVkIHNob3J0 IGJpdCA9IDE7CisgIHVuc2lnbmVkIHNob3J0IHJlcyA9IDA7CisKKyAgd2hp bGUgKGRlbiA8IG51bSAmJiBiaXQgJiYgIShkZW4gJiAoMSA8PCAxNSkpKQor ICAgIHsKKyAgICAgIGRlbiA8PD0gMTsKKyAgICAgIGJpdCA8PD0gMTsKKyAg ICB9CisgIHdoaWxlIChiaXQpCisgICAgeworICAgICAgaWYgKG51bSA+PSBk ZW4pCisJeworCSAgbnVtIC09IGRlbjsKKwkgIHJlcyB8PSBiaXQ7CisJfQor ICAgICAgYml0ID4+PSAxOworICAgICAgZGVuID4+PSAxOworICAgIH0KKwor ICBpZiAobW9kd2FudGVkKQorICAgIHJldHVybiBudW07CisgIHJldHVybiBy ZXM7Cit9CisKK3Nob3J0CitfX2RpdmhpMyAoc2hvcnQgYSwgc2hvcnQgYikK K3sKKyAgc2hvcnQgbmVnID0gMDsKKyAgc2hvcnQgcmVzOworCisgIGlmIChh IDwgMCkKKyAgICB7CisgICAgICBhID0gLWE7CisgICAgICBuZWcgPSAhbmVn OworICAgIH0KKworICBpZiAoYiA8IDApCisgICAgeworICAgICAgYiA9IC1i OworICAgICAgbmVnID0gIW5lZzsKKyAgICB9CisKKyAgcmVzID0gdWRpdm1v ZGhpNCAoYSwgYiwgMCk7CisKKyAgaWYgKG5lZykKKyAgICByZXMgPSAtcmVz OworCisgIHJldHVybiByZXM7Cit9CisKK3Nob3J0CitfX21vZGhpMyAoc2hv cnQgYSwgc2hvcnQgYikKK3sKKyAgc2hvcnQgbmVnID0gMDsKKyAgc2hvcnQg cmVzOworCisgIGlmIChhIDwgMCkKKyAgICB7CisgICAgICBhID0gLWE7Cisg ICAgICBuZWcgPSAxOworICAgIH0KKworICBpZiAoYiA8IDApCisgICAgYiA9 IC1iOworCisgIHJlcyA9IHVkaXZtb2RoaTQgKGEsIGIsIDEpOworCisgIGlm IChuZWcpCisgICAgcmVzID0gLXJlczsKKworICByZXR1cm4gcmVzOworfQor CitzaG9ydAorX191ZGl2aGkzIChzaG9ydCBhLCBzaG9ydCBiKQoreworICBy ZXR1cm4gdWRpdm1vZGhpNCAoYSwgYiwgMCk7Cit9CisKK3Nob3J0CitfX3Vt b2RoaTMgKHNob3J0IGEsIHNob3J0IGIpCit7CisgIHJldHVybiB1ZGl2bW9k aGk0IChhLCBiLCAxKTsKK30KLS0tIG9yaWcvZ2NjL2NvbmZpZy9jcjE2L3By ZWRpY2F0ZXMubWQJMTk3MC0wMS0wMSAwNTozMDowMC4wMDAwMDAwMDAgKzA1 MzAKKysrIG1vZC9nY2MvY29uZmlnL2NyMTYvcHJlZGljYXRlcy5tZAkyMDEx LTA2LTI4IDEyOjM0OjM0LjAwMDAwMDAwMCArMDUzMApAQCAtMCwwICsxLDIy NCBAQAorOzsgUHJlZGljYXRlcyBvZiBtYWNoaW5lIGRlc2NyaXB0aW9uIGZv ciBDUjE2LgorOzsgQ29weXJpZ2h0IChDKSAyMDExIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbiwgSW5jLgorOzsgQ29udHJpYnV0ZWQgYnkgS1BJVCBDdW1t aW5zIEluZm9zeXN0ZW1zIExpbWl0ZWQuCis7OworOzsgVGhpcyBmaWxlIGlz IHBhcnQgb2YgR0NDLgorOzsKKzs7IEdDQyBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Cis7OyB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGFzIHB1Ymxpc2hlZAorOzsgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIKKzs7IG9w dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCis7OworOzsgR0NDIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1 dCBXSVRIT1VUCis7OyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg aW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKzs7IG9yIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMKKzs7IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K Kzs7Cis7OyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorOzsgYWxvbmcgd2l0aCBH Q0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKzs7IDxo dHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gIAorCis7OyAgUHJlZGlj YXRlcworCis7OyBQcmVkaWNhdGVzIGZvciBzYml0L2NiaXQgaW5zdHJ1Y3Rp b25zCis7OyBiaXQgb3BlcmFuZCB1c2VkIGZvciB0aGUgZ2VuZXJhdGlvbiBv ZiBiaXQgaW5zbiBnZW5lcmF0aW9uCisoZGVmaW5lX3ByZWRpY2F0ZSAiYml0 X29wZXJhbmQiCisgIChtYXRjaF9jb2RlICJtZW0iKQoreworICByZXR1cm4g KChHRVRfQ09ERSAob3ApID09IE1FTSAmJiBPS19GT1JfWiAob3ApKSk7Cit9 KQorCis7OyBVbnNpZ25lZCA0LWJpdHMgY29uc3RhbnQgaW50IG9yIGRvdWJs ZSB2YWx1ZS4KKyhkZWZpbmVfcHJlZGljYXRlICJ1NGJpdHNfb3BlcmFuZCIK KyAgKG1hdGNoX2NvZGUgImNvbnN0X2ludCxjb25zdF9kb3VibGUiKQorewor ICBpZiAoR0VUX0NPREUgKG9wKSA9PSBDT05TVF9ET1VCTEUpCisgICAgcmV0 dXJuIGNyMTZfY29uc3RfZG91YmxlX29rIChvcCk7CisgICAgcmV0dXJuIChV TlNJR05FRF9JTlRfRklUU19OX0JJVFMoSU5UVkFMIChvcCksIDQpKSA/IDEg OiAwOworfSkKKworOzsgT3BlcmFuZCBpcyBhIGNvbnN0YW50IGludGVnZXIg d2hlcmUKKzs7IG9ubHkgb25lIGJpdCBpcyBzZXQgdG8gMS4KKyhkZWZpbmVf cHJlZGljYXRlICJvbmVfYml0X29wZXJhbmQiCisgIChtYXRjaF9jb2RlICJj b25zdF9pbnQiKQoreworICB1bnNpZ25lZCBpbnQgdmFsOworCisgIHZhbCA9 IElOVFZBTCAob3ApOworICBpZiAobW9kZSA9PSBRSW1vZGUpIAorICAgIHZh bCAmPSAweGZmOworICBlbHNlIGlmIChtb2RlID09IEhJbW9kZSkKKyAgICB2 YWwgJj0gMHhmZmZmOworICBlbHNlCisgICAgZ2NjX3VucmVhY2hhYmxlKCk7 CisKKyAgaWYgKHZhbCAhPSAwKQorICAgIHJldHVybiAodmFsICYgKHZhbCAt IDEpKSA9PSAwOyAvKiB0cnVlIGlmIG9ubHkgb25lIGJpdCBpcyBzZXQuICAq LworICBlbHNlCisgICAgcmV0dXJuIDA7Cit9KQorCis7OyBPcGVyYW5kIGlz IGEgY29uc3RhbnQgaW50ZWdlciB3aGVyZQorOzsgb25seSBvbmUgYml0IGlz IHNldCB0byAwLgorKGRlZmluZV9wcmVkaWNhdGUgInJldl9vbmVfYml0X29w ZXJhbmQiCisgIChtYXRjaF9jb2RlICJjb25zdF9pbnQiKQoreworICB1bnNp Z25lZCBpbnQgdmFsOworCisgIHZhbCA9IH5JTlRWQUwgKG9wKTsgLyogSW52 ZXJ0IGFuZCB1c2UuICAqLworICBpZiAobW9kZSA9PSBRSW1vZGUpIAorICAg IHZhbCAmPSAweGZmOworICBlbHNlIGlmIChtb2RlID09IEhJbW9kZSkKKyAg ICB2YWwgJj0gMHhmZmZmOworICBlbHNlCisgICAgZ2NjX3VucmVhY2hhYmxl KCk7CisKKyAgaWYgKHZhbCAhPSAwKQorICAgIHJldHVybiAodmFsICYgKHZh bCAtIDEpKSA9PSAwOyAvKiB0cnVlIGlmIG9ubHkgb25lIGJpdCBpcyBzZXQu ICAqLworICBlbHNlCisgICAgcmV0dXJuIDA7Cit9KQorCis7OyBQcmVkaWNh dGVzIGZvciBzaGlmdCBpbnN0cnVjdGlvbnMKKzs7IEltbWVkaWF0ZSBvcGVy YW5kIHByZWRpY2F0ZSBmb3IgY291bnQgaW4gc2hpZnQgb3BlcmF0aW9ucy4K Kzs7IEltbWVkaWF0ZSBzaGFsbCBiZSAzLWJpdHMgaW4gY2FzZSBvcGVyYW5k IHRvIGJlIG9wZXJhdGVkIG9uCis7OyBpcyBhIHFpIG1vZGUgb3BlcmFuZC4K KyhkZWZpbmVfcHJlZGljYXRlICJzaGlmdF9xaV9pbW1fb3BlcmFuZCIKKyAg KG1hdGNoX2NvZGUgImNvbnN0X2ludCIpCit7CisgIHJldHVybiAoVU5TSUdO RURfSU5UX0ZJVFNfTl9CSVRTKElOVFZBTCAob3ApLCAzKSkgPyAxIDogMDsK K30pCisKKzs7IEltbWVkaWF0ZSBzaGFsbCBiZSA0LWJpdHMgaW4gY2FzZSBv cGVyYW5kIHRvIGJlIG9wZXJhdGVkIG9uCis7OyBpcyBhIGhpIG1vZGUgb3Bl cmFuZC4KKyhkZWZpbmVfcHJlZGljYXRlICJzaGlmdF9oaV9pbW1fb3BlcmFu ZCIKKyAgKG1hdGNoX2NvZGUgImNvbnN0X2ludCIpCit7CisgIHJldHVybiAo VU5TSUdORURfSU5UX0ZJVFNfTl9CSVRTKElOVFZBTCAob3ApLCA0KSkgPyAx IDogMDsKK30pCisKKzs7IEltbWVkaWF0ZSBzaGFsbCBiZSAzLWJpdHMgaW4g Y2FzZSBvcGVyYW5kIHRvIGJlIG9wZXJhdGVkIG9uCis7OyBpcyBhIHNpIG1v ZGUgb3BlcmFuZC4KKyhkZWZpbmVfcHJlZGljYXRlICJzaGlmdF9zaV9pbW1f b3BlcmFuZCIKKyAgKG1hdGNoX2NvZGUgImNvbnN0X2ludCIpCit7CisgIHJl dHVybiAoVU5TSUdORURfSU5UX0ZJVFNfTl9CSVRTKElOVFZBTCAob3ApLCA1 KSkgPyAxIDogMDsKK30pCisKKzs7IFByZWRpY2F0ZXMgZm9yIGp1bXAvY2Fs bCBpbnN0cnVjdGlvbnMKKzs7IEp1bXAgaW1tZWRpYXRlIGNhbm5vdCBiZSBt b3JlIHRoYW4gMjQtYml0cworKGRlZmluZV9wcmVkaWNhdGUgImp1bXBfaW1t X29wZXJhbmQiCisgIChtYXRjaF9jb2RlICJjb25zdF9pbnQiKQoreworICBy ZXR1cm4gKFVOU0lHTkVEX0lOVF9GSVRTX05fQklUUyhJTlRWQUwgKG9wKSwg MjQpKSA/IDEgOiAwOworfSkKKworOzsgQ2FsbCBpbW1lZGlhdGUgY2Fubm90 IGJlIG1vcmUgdGhhbiAyNC1iaXRzCisoZGVmaW5lX3ByZWRpY2F0ZSAiY2Fs bF9pbW1fb3BlcmFuZCIKKyAgKG1hdGNoX29wZXJhbmQgMCAiaW1tZWRpYXRl X29wZXJhbmQiKQoreworICBpZiAoR0VUX0NPREUgKG9wKSAhPSBDT05TVF9J TlQpIHJldHVybiAxOworICAgIHJldHVybiAoVU5TSUdORURfSU5UX0ZJVFNf Tl9CSVRTKElOVFZBTCAob3ApLCAyNCkpID8gMSA6IDA7Cit9KQorCis7OyBP cGVyYW5kIGlzIHJlZ2lzdGVyIG9yIDQtYml0IGltbWVkaWF0ZSBvcGVyYW5k CisoZGVmaW5lX3ByZWRpY2F0ZSAicmVnX29yX3U0Yml0c19vcGVyYW5kIgor ICAoaW9yIChtYXRjaF9vcGVyYW5kIDAgInU0Yml0c19vcGVyYW5kIikKKyAg ICAgICAobWF0Y2hfb3BlcmFuZCAwICJyZWdpc3Rlcl9vcGVyYW5kIikpKQor Cis7OyBPcGVyYW5kIGlzIGEgcmVnaXN0ZXIgb3Igc3ltYm9sIHJlZmVyZW5j ZQorKGRlZmluZV9wcmVkaWNhdGUgInJlZ19vcl9zeW1fb3BlcmFuZCIKKyAg KGlvciAobWF0Y2hfY29kZSAic3ltYm9sX3JlZiIpCisgICAgICAgKG1hdGNo X29wZXJhbmQgMCAicmVnaXN0ZXJfb3BlcmFuZCIpKSkKKworOzsgT3BlcmFu ZCBpcyBhIG5vbiBzdGFjayBwb2ludGVyIHJlZ2lzdGVyCisoZGVmaW5lX3By ZWRpY2F0ZSAibm9zcF9yZWdfb3BlcmFuZCIKKyAgKGFuZCAobWF0Y2hfb3Bl cmFuZCAwICJyZWdpc3Rlcl9vcGVyYW5kIikKKyAgICAgICAobWF0Y2hfdGVz dCAiUkVHTk8gKG9wKSAhPSBTUF9SRUdOVU0iKSkpCisKKyhkZWZpbmVfcHJl ZGljYXRlICJoYXJkX3JlZ19vcGVyYW5kIgorICAoYW5kIChtYXRjaF9vcGVy YW5kIDAgInJlZ2lzdGVyX29wZXJhbmQiKQorICAgICAgIChtYXRjaF90ZXN0 ICJSRUdOTyAob3ApIDw9IDE1IikpKQorCis7OyBPcGVyYW5kIGlzIGEgbWVt b3J5IHJlZmVyZW5jZSBhbmQKKzs7IG5vdCBhIHB1c2ggb3BlcmFuZC4KKyhk ZWZpbmVfcHJlZGljYXRlICJzdG9yZV9vcGVyYW5kIgorICAoYW5kIChtYXRj aF9vcGVyYW5kIDAgIm1lbW9yeV9vcGVyYW5kIikKKyAgICAgICAobm90ICht YXRjaF9vcGVyYW5kIDAgInB1c2hfb3BlcmFuZCIpKSkpCisKKzs7IEhlbHBl ciBwcmVkaWNhdGUgCisoZGVmaW5lX3ByZWRpY2F0ZSAicmVnX29yX2ludF9v cGVyYW5kIgorICAoaW9yIChtYXRjaF9jb2RlICJjb25zdF9pbnQiKQorICAg ICAgIChtYXRjaF9vcGVyYW5kIDAgInJlZ2lzdGVyX29wZXJhbmQiKSkpCisK Kzs7Cis7OworOzsgQXRpdGhtZXRpYy9sb2dpY2FsIHByZWRpY2F0ZXMKKwor OzsgUUkgSGVscGVyCisoZGVmaW5lX3ByZWRpY2F0ZSAiYXJpdGhfcWlfb3Bl cmFuZCIKKyAgIChtYXRjaF9jb2RlICJjb25zdF9pbnQiKQoreworICAgICAg ICByZXR1cm4gKElOX1JBTihJTlRWQUwgKG9wKSwgMCwgMTUpICYmICgoSU5U VkFMIChvcCkgIT0gOSkgCisgICAgICAgICAgICAgICAgfHwgKElOVFZBTCAo b3ApICE9IDExKSkpID8gMSA6IDAgOyAKK30pCisKKzs7UUkgUmVnLCBzdWJy ZWcocmVnKSBvciBjb25zdF9pbnQuCisoZGVmaW5lX3ByZWRpY2F0ZSAicmVn X3FpX2ludF9vcGVyYW5kIgorICAoaW9yIChtYXRjaF9vcGVyYW5kIDAgImFy aXRoX3FpX29wZXJhbmQiKQorICAgICAgIChtYXRjaF9vcGVyYW5kIDAgInJl Z2lzdGVyX29wZXJhbmQiKSkpCisKKzs7IEhJIEhlbHBlcgorKGRlZmluZV9w cmVkaWNhdGUgImFyaXRoX2hpX29wZXJhbmQiCisgICAobWF0Y2hfY29kZSAi Y29uc3RfaW50IikKK3sKKyAgICAgICAgcmV0dXJuIChJTl9SQU4oSU5UVkFM IChvcCksIC0zMjc2OCwgMzI3NjgpICkgPyAxIDogMCA7IAorfSkKKworOztI SSBSZWcsIHN1YnJlZyhyZWcpIG9yIGNvbnN0X2ludC4KKyhkZWZpbmVfcHJl ZGljYXRlICJyZWdfaGlfaW50X29wZXJhbmQiCisgIChpb3IgKG1hdGNoX29w ZXJhbmQgMCAiYXJpdGhfaGlfb3BlcmFuZCIpCisgICAgICAgKG1hdGNoX29w ZXJhbmQgMCAicmVnaXN0ZXJfb3BlcmFuZCIpKSkKKworOztTSSBSZWcsIHN1 YnJlZyhyZWcpIG9yIGNvbnN0X2ludC4KKyhkZWZpbmVfcHJlZGljYXRlICJy ZWdfc2lfaW50X29wZXJhbmQiCisgIChpb3IgKG1hdGNoX29wZXJhbmQgMCAi Y29uc3RfaW50X29wZXJhbmQiKQorICAgICAgIChtYXRjaF9vcGVyYW5kIDAg InJlZ2lzdGVyX29wZXJhbmQiKSkpCisKKzs7Cis7OyBTaGlmdCBwcmVkaWNh dGVzCisKKzs7IFFJIEhlbHBlcgorKGRlZmluZV9wcmVkaWNhdGUgInNoaWZ0 X3FpX29wZXJhbmQiCisgICAobWF0Y2hfY29kZSAiY29uc3RfaW50IikKK3sK KyAgICAgICAgcmV0dXJuIChJTl9SQU4oSU5UVkFMIChvcCksIDAsIDcpICkg PyAxIDogMDsgCit9KQorCis7O1FJIFJlZywgc3VicmVnKHJlZykgb3IgY29u c3RfaW50LgorKGRlZmluZV9wcmVkaWNhdGUgInNoaWZ0X3JlZ19xaV9pbnRf b3BlcmFuZCIKKyAgKGlvciAobWF0Y2hfb3BlcmFuZCAwICJzaGlmdF9xaV9v cGVyYW5kIikKKyAgICAgICAobWF0Y2hfb3BlcmFuZCAwICJyZWdpc3Rlcl9v cGVyYW5kIikpKQorOzsgSEkgSGVscGVyCisoZGVmaW5lX3ByZWRpY2F0ZSAi c2hpZnRfaGlfb3BlcmFuZCIKKyAgIChtYXRjaF9jb2RlICJjb25zdF9pbnQi KQoreworICAgICAgICByZXR1cm4gKElOX1JBTihJTlRWQUwgKG9wKSwgMCwg MTUpICkgPyAxIDogMCA7IAorfSkKKworOztISSBSZWcsIHN1YnJlZyhyZWcp IG9yIGNvbnN0X2ludC4KKyhkZWZpbmVfcHJlZGljYXRlICJzaGlmdF9yZWdf aGlfaW50X29wZXJhbmQiCisgIChpb3IgKG1hdGNoX29wZXJhbmQgMCAic2hp ZnRfaGlfb3BlcmFuZCIpCisgICAgICAgKG1hdGNoX29wZXJhbmQgMCAicmVn aXN0ZXJfb3BlcmFuZCIpKSkKKworOzsgU0kgSGVscGVyCisoZGVmaW5lX3By ZWRpY2F0ZSAic2hpZnRfc2lfb3BlcmFuZCIKKyAgIChtYXRjaF9jb2RlICJj b25zdF9pbnQiKQoreworICAgICAgICByZXR1cm4gKElOX1JBTihJTlRWQUwg KG9wKSwgMCwgMzEpICkgPyAxIDogMDsgCit9KQorCis7O1NJIFJlZywgc3Vi cmVnKHJlZykgb3IgY29uc3RfaW50LgorKGRlZmluZV9wcmVkaWNhdGUgInNo aWZ0X3JlZ19zaV9pbnRfb3BlcmFuZCIKKyAgKGlvciAobWF0Y2hfb3BlcmFu ZCAwICJzaGlmdF9zaV9vcGVyYW5kIikKKyAgICAgICAobWF0Y2hfb3BlcmFu ZCAwICJyZWdpc3Rlcl9vcGVyYW5kIikpKQotLS0gb3JpZy9nY2MvY29uZmln L2NyMTYvdC1jcjE2CTE5NzAtMDEtMDEgMDU6MzA6MDAuMDAwMDAwMDAwICsw NTMwCisrKyBtb2QvZ2NjL2NvbmZpZy9jcjE2L3QtY3IxNgkyMDExLTA2LTI4 IDEyOjM0OjM0LjAwMDAwMDAwMCArMDUzMApAQCAtMCwwICsxLDU0IEBACisj IENSMTYgVGFyZ2V0IE1ha2VmaWxlCisjIENvcHlyaWdodCAoQykgMjAxMSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgQ29udHJpYnV0ZWQg YnkgS1BJVCBDdW1taW5zIEluZm9zeXN0ZW1zIExpbWl0ZWQuCisjCisjIFRo aXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKyMKKyMgR0NDIGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkg aXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyMgYnkgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIK KyMgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgR0NDIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws IGJ1dCBXSVRIT1VUCisjIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorIyBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V IEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K KyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCBHQ0M7 IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKyMgPGh0dHA6 Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgICAgCisKK0xJQjFBU01TUkMg PSBjcjE2L2NyMTYtbGliZ2NjLnMKK0xJQjFBU01GVU5DUyA9CV9tdWxzaTMg X2xzaHJkaTMgX211bGRpMyBfZGl2ZGkzIF91ZGl2ZGkzIF91ZGl2bW9kZGkz IFwKKwkJX3Vtb2RkaTMgX21vZGRpMworCitMSUIyRlVOQ1NfRVhUUkEgPSBc CisJJChzcmNkaXIpL2NvbmZpZy9jcjE2L2Rpdm1vZGhpMy5jICBcCisJJChz cmNkaXIpL2NvbmZpZy91ZGl2bW9kc2k0LmMgXAorCSQoc3JjZGlyKS9jb25m aWcvdWRpdm1vZC5jICAgXAorCSQoc3JjZGlyKS9jb25maWcvZGl2bW9kLmMg CisKK01VTFRJTElCX09QVElPTlMgICAgID0gZlBJQyBtaW50MzIgCitNVUxU SUxJQl9ESVJOQU1FUyAgICA9IGZhci1waWMgaW50MzIgCitNVUxUSUxJQl9N QVRDSEVTICAgICA9CitNVUxUSUxJQl9FWFRSQV9PUFRTICA9IG1jcjE2Y3Bs dXMgbWRhdGEtbW9kZWw9ZmFyCisKK0xJQkdDQyA9IHN0bXAtbXVsdGlsaWIK K0lOU1RBTExfTElCR0NDID0gaW5zdGFsbC1tdWx0aWxpYgorCisjIFdlIHdh bnQgZmluZSBncmFpbmVkIGxpYnJhcmllcywgc28gdXNlIHRoZSBuZXcgY29k ZS4KKyMgdG8gYnVpbGQgdGhlIGZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbiBs aWJyYXJpZXMuCitGUEJJVCA9IGZwLWJpdC5jCitEUEJJVCA9IGRwLWJpdC5j CisKK2ZwLWJpdC5jOiAkKHNyY2RpcikvY29uZmlnL2ZwLWJpdC5jCisJZWNo byAnI2RlZmluZSBGTE9BVCcgPiBmcC1iaXQuYworCWVjaG8gJyNkZWZpbmUg U01BTExfTUFDSElORScgPj4gZnAtYml0LmMKKwllY2hvICcjZGVmaW5lIENN UHR5cGUgSEl0eXBlJyA+PiBmcC1iaXQuYworCWNhdCAkKHNyY2RpcikvY29u ZmlnL2ZwLWJpdC5jID4+IGZwLWJpdC5jCisKK2RwLWJpdC5jOiAkKHNyY2Rp cikvY29uZmlnL2ZwLWJpdC5jCisJZWNobyAnI2RlZmluZSBTTUFMTF9NQUNI SU5FJyA+PiBkcC1iaXQuYworCWVjaG8gJyNkZWZpbmUgQ01QdHlwZSBISXR5 cGUnID4+IGRwLWJpdC5jCisJY2F0ICQoc3JjZGlyKS9jb25maWcvZnAtYml0 LmMgPj4gZHAtYml0LmMKKwotLS0gb3JpZy9nY2MvY29uZmlnLmdjYwkyMDEx LTA2LTIyIDIyOjMxOjE3LjAwMDAwMDAwMCArMDUzMAorKysgbW9kL2djYy9j b25maWcuZ2NjCTIwMTEtMDYtMjggMTI6MzM6NTguMDAwMDAwMDAwICswNTMw CkBAIC0zMzIsNiArMzMyLDkgQEAgZnJ2KikJY3B1X3R5cGU9ZnJ2CiBtb3hp ZSopCWNwdV90eXBlPW1veGllCiAJdGFyZ2V0X2hhc190YXJnZXRtX2NvbW1v bj1ubwogCTs7CitjcjE2LSotKikKKwl0YXJnZXRfaGFzX3RhcmdldG1fY29t bW9uPW5vCisJOzsKIGZpZG8tKi0qKQogCWNwdV90eXBlPW02OGsKIAlleHRy YV9oZWFkZXJzPW1hdGgtNjg4ODEuaApAQCAtOTcwLDYgKzk3MywxMyBAQCBi ZmluKi0qKQogCXVzZV9jb2xsZWN0Mj1ubwogCXVzZV9nY2Nfc3RkaW50PXdy YXAKIAk7OworY3IxNi0qLWVsZikKKyAgICAgICAgdG1fZmlsZT0iZWxmb3Mu aCAke3RtX2ZpbGV9IgorICAgICAgICB0bWFrZV9maWxlPSIke3RtYWtlX2Zp bGV9IGNyMTYvdC1jcjE2ICIKKyAgICAgICAgbGliZ2NjX3RtX2ZpbGU9IiR7 bGliZ2NjX3RtX2ZpbGV9IGNyMTYvdW53aW5kLWhlbHBlci5oIgorICAgICAg ICBleHRyYV9wYXJ0cz0iY3J0YmVnaW4ubyBjcnRlbmQubyBjcnRpLm8gY3J0 bi5vIGNydGxpYmlkLm8iCisgICAgICAgIHVzZV9jb2xsZWN0Mj1ubworICAg ICAgICA7OwogY3Jpc3YzMi0qLWVsZiB8IGNyaXN2MzItKi1ub25lKQogCXRt X2ZpbGU9ImRieGVsZi5oIGVsZm9zLmggbmV3bGliLXN0ZGludC5oICR7dG1f ZmlsZX0iCiAJdG1ha2VfZmlsZT0iY3Jpcy90LWNyaXMiCi0tLSBvcmlnL2dj Yy9kb2MvZXh0ZW5kLnRleGkJMjAxMS0wNi0yMSAxOTo0NjozOS4wMDAwMDAw MDAgKzA1MzAKKysrIG1vZC9nY2MvZG9jL2V4dGVuZC50ZXhpCTIwMTEtMDYt MjggMTI6MzQ6MDYuMDAwMDAwMDAwICswNTMwCkBAIC0yNTUxLDcgKzI1NTEs NyBAQCBUaGlzIGF0dHJpYnV0ZSBpcyBpZ25vcmVkIGZvciBSOEMgdGFyZ2V0 CiAKIEBpdGVtIGludGVycnVwdAogQGNpbmRleCBpbnRlcnJ1cHQgaGFuZGxl ciBmdW5jdGlvbnMKLVVzZSB0aGlzIGF0dHJpYnV0ZSBvbiB0aGUgQVJNLCBB VlIsIE0zMkMsIE0zMlIvRCwgbTY4aywgTWVQLCBNSVBTLAorVXNlIHRoaXMg YXR0cmlidXRlIG9uIHRoZSBBUk0sIEFWUiwgQ1IxNiwgTTMyQywgTTMyUi9E LCBtNjhrLCBNZVAsIE1JUFMsCiBSWCBhbmQgWHN0b3JteTE2IHBvcnRzIHRv IGluZGljYXRlIHRoYXQgdGhlIHNwZWNpZmllZCBmdW5jdGlvbiBpcyBhbgog aW50ZXJydXB0IGhhbmRsZXIuICBUaGUgY29tcGlsZXIgd2lsbCBnZW5lcmF0 ZSBmdW5jdGlvbiBlbnRyeSBhbmQgZXhpdAogc2VxdWVuY2VzIHN1aXRhYmxl IGZvciB1c2UgaW4gYW4gaW50ZXJydXB0IGhhbmRsZXIgd2hlbiB0aGlzIGF0 dHJpYnV0ZQotLS0gb3JpZy9nY2MvZG9jL2luc3RhbGwudGV4aQkyMDExLTA2 LTIyIDE1OjI3OjAyLjAwMDAwMDAwMCArMDUzMAorKysgbW9kL2djYy9kb2Mv aW5zdGFsbC50ZXhpCTIwMTEtMDYtMjggMTI6MzQ6MDYuMDAwMDAwMDAwICsw NTMwCkBAIC0zMjE4LDYgKzMyMTgsMjkgQEAgaXMgYXZhaWxhYmxlIGF0IEB1 cmVme2h0dHA6Ly9ibGFja2Zpbi51YwogQGh0bWwKIDxociAvPgogQGVuZCBo dG1sCitAaGVhZGluZyBAYW5jaG9ye2NyMTZ9Q1IxNgorCitUaGUgQ1IxNiBD b21wYWN0UklTQyBhcmNoaXRlY3R1cmUgaXMgYSAxNi1iaXQgYXJjaGl0ZWN0 dXJlLiBUaGlzIGFyY2hpdGVjdHVyZSBpcyAKK3VzZWQgaW4gZW1iZWRkZWQg YXBwbGljYXRpb25zLgorCitAaWZub3RodG1sCitAeHJlZntDUjE2IE9wdGlv bnMsLCBDUjE2IE9wdGlvbnMsIGdjYywgVXNpbmcgYW5kIFBvcnRpbmcgdGhl IEdOVSBDb21waWxlcgorQ29sbGVjdGlvbiAoR0NDKX0sCitAZW5kIGlmbm90 aHRtbAorCitAaWZodG1sCitTZWUgYGBDUjE2IE9wdGlvbnMnJyBpbiB0aGUg bWFpbiBtYW51YWwgZm9yIGEgbGlzdCBvZiBDUjE2LXNwZWNpZmljIG9wdGlv bnMuCitAZW5kIGlmaHRtbAorCitVc2UgQHNhbXB7Y29uZmlndXJlIC0tdGFy Z2V0PWNyMTYtZWxmIC0tZW5hYmxlLWxhbmd1YWdlcz1jLGMrK30gdG8gY29u ZmlndXJlCitHQ0NAIGZvciBidWlsZGluZyBhIENSMTYgZWxmIGNyb3NzLWNv bXBpbGVyLgorCitVc2UgQHNhbXB7Y29uZmlndXJlIC0tdGFyZ2V0PWNyMTYt dWNsaW51eCAtLWVuYWJsZS1sYW5ndWFnZXM9YyxjKyt9IHRvIGNvbmZpZ3Vy ZQorR0NDQCBmb3IgYnVpbGRpbmcgYSBDUjE2IHVjbGludXggY3Jvc3MtY29t cGlsZXIuCisKK0BodG1sCis8aHIgLz4KK0BlbmQgaHRtbAogQGhlYWRpbmcg QGFuY2hvcntjcmlzfUNSSVMKIAogQ1JJUyBpcyB0aGUgQ1BVIGFyY2hpdGVj dHVyZSBpbiBBeGlzIENvbW11bmljYXRpb25zIEVUUkFYIHN5c3RlbS1vbi1h LWNoaXAKLS0tIG9yaWcvZ2NjL2RvYy9pbnZva2UudGV4aQkyMDExLTA2LTIy IDE1OjI3OjAyLjAwMDAwMDAwMCArMDUzMAorKysgbW9kL2djYy9kb2MvaW52 b2tlLnRleGkJMjAxMS0wNi0yOCAxMjozNDowNi4wMDAwMDAwMDAgKzA1MzAK QEAgLTUwNSw2ICs1MDUsMTIgQEAgT2JqZWN0aXZlLUMgYW5kIE9iamVjdGl2 ZS1DKysgRGlhbGVjdHN9LgogLW1lbGYgIC1tYW91dCAgLW1lbGludXggIC1t bGludXggIC1zaW0gIC1zaW0yIEBnb2wKIC1tbXVsLWJ1Zy13b3JrYXJvdW5k ICAtbW5vLW11bC1idWctd29ya2Fyb3VuZH0KIAorQGVtcGh7Q1IxNiBPcHRp b25zfQorQGdjY29wdGxpc3R7LW1tYWMgQGdvbAorLW1jcjE2Y3BsdXMgLW1j cjE2YyBAZ29sCistbXNpbSAtbWludDMyIC1tYml0LW9wcworLW1kYXRhLW1v ZGVsPUB2YXJ7bW9kZWx9fQorCiBAZW1waHtEYXJ3aW4gT3B0aW9uc30KIEBn Y2NvcHRsaXN0ey1hbGxfbG9hZCAgLWFsbG93YWJsZV9jbGllbnQgIC1hcmNo ICAtYXJjaF9lcnJvcnNfZmF0YWwgQGdvbAogLWFyY2hfb25seSAgLWJpbmRf YXRfbG9hZCAgLWJ1bmRsZSAgLWJ1bmRsZV9sb2FkZXIgQGdvbApAQCAtMTAw ODcsNiArMTAwOTMsNyBAQCBwbGF0Zm9ybS4KICogQVZSIE9wdGlvbnM6Ogog KiBCbGFja2ZpbiBPcHRpb25zOjoKICogQ1JJUyBPcHRpb25zOjoKKyogQ1Ix NiBPcHRpb25zOjoKICogRGFyd2luIE9wdGlvbnM6OgogKiBERUMgQWxwaGEg T3B0aW9uczo6CiAqIERFQyBBbHBoYS9WTVMgT3B0aW9uczo6CkBAIC0xMDg3 OCw2ICsxMDg4NSw0NiBAQCBMaWtlIEBvcHRpb257LXNpbX0sIGJ1dCBwYXNz IGxpbmtlciBvcHRpCiAweDQwMDAwMDAwIGFuZCB6ZXJvLWluaXRpYWxpemVk IGRhdGEgYXQgMHg4MDAwMDAwMC4KIEBlbmQgdGFibGUKIAorQG5vZGUgQ1Ix NiBPcHRpb25zCitAc3Vic2VjdGlvbiBDUjE2IE9wdGlvbnMKK0BjaW5kZXgg Q1IxNiBPcHRpb25zCisKK1RoZXNlIG9wdGlvbnMgYXJlIGRlZmluZWQgc3Bl Y2lmaWNhbGx5IGZvciB0aGUgQ1IxNiBwb3J0cy4KKworQHRhYmxlIEBnY2N0 YWJvcHQKKworQGl0ZW0gLW1tYWMKK0BvcGluZGV4IG1tYWMKK0VuYWJsZSB0 aGUgdXNlIG9mIG11bHRpcGx5LWFjY3VtdWxhdGUgaW5zdHJ1Y3Rpb25zLiBE aXNhYmxlZCBieSBkZWZhdWx0LgorCitAaXRlbSAtbWNyMTZjcGx1cworQGl0 ZW14IC1tY3IxNmMKK0BvcGluZGV4IG1jcjE2Y3BsdXMKK0BvcGluZGV4IG1j cjE2YworR2VuZXJhdGUgY29kZSBmb3IgQ1IxNkMgb3IgQ1IxNkMrIGFyY2hp dGVjdHVyZS4gQ1IxNkMrIGFyY2hpdGVjdHVyZSAKK2lzIGRlZmF1bHQuCisK K0BpdGVtIC1tc2ltCitAb3BpbmRleCBtc2ltCitMaW5rcyB0aGUgbGlicmFy eSBsaWJzaW0uYSB3aGljaCBpcyBpbiBjb21wYXRpYmxlIHdpdGggc2ltdWxh dG9yLiBBcHBsaWNhYmxlCit0byBlbGYgY29tcGlsZXIgb25seS4KKworQGl0 ZW0gLW1pbnQzMgorQG9waW5kZXggbWludDMyCitDaG9vc2UgaW50ZWdlciB0 eXBlIGFzIDMyLWJpdCB3aWRlLgorCitAaXRlbSAtbWJpdC1vcHMKK0BvcGlu ZGV4IG1iaXQtb3BzCitHZW5lcmF0ZXMgc2JpdC9jYml0IGluc3RydWN0aW9u cyBmb3IgYml0IG1hbmlwdWxhdGlvbnMuCisKK0BpdGVtIC1tZGF0YS1tb2Rl bD1AdmFye21vZGVsfQorQG9waW5kZXggbWRhdGEtbW9kZWwKK0Nob29zZSBh IGRhdGEgbW9kZWwuIFRoZSBjaG9pY2VzIGZvciBAdmFye21vZGVsfSBhcmUg QHNhbXB7bmVhcn0sCitAc2FtcHtmYXJ9IG9yIEBzYW1we21lZGl1bX0uIEBz YW1we21lZGl1bX0gaXMgZGVmYXVsdC4KK0hvd2V2ZXIsIEBzYW1we2Zhcn0g aXMgbm90IHZhbGlkIHdoZW4gLW1jcjE2YyBvcHRpb24gaXMgY2hvc2VuIGFz CitDUjE2QyBhcmNoaXRlY3R1cmUgZG9lcyBub3Qgc3VwcG9ydCBmYXIgZGF0 YSBtb2RlbC4KK0BlbmQgdGFibGUKKwogQG5vZGUgRGFyd2luIE9wdGlvbnMK IEBzdWJzZWN0aW9uIERhcndpbiBPcHRpb25zCiBAY2luZGV4IERhcndpbiBv cHRpb25zCi0tLSBvcmlnL2djYy9kb2MvbWQudGV4aQkyMDExLTA2LTIxIDIz OjAwOjU0LjAwMDAwMDAwMCArMDUzMAorKysgbW9kL2djYy9kb2MvbWQudGV4 aQkyMDExLTA2LTI4IDEyOjM0OjA2LjAwMDAwMDAwMCArMDUzMApAQCAtMTc3 OCw2ICsxNzc4LDQxIEBAIEEgbWVtb3J5IGFkZHJlc3MgYmFzZWQgb24gWSBv ciBaIHBvaW50ZXIKIENvbnN0YW50IGludGVnZXIgNAogQGVuZCB0YWJsZQog CitAaXRlbSBDUjE2IEFyY2hpdGVjdHVyZS0tLUBmaWxle2NvbmZpZy9jcjE2 L2NyMTYuaH0KK0B0YWJsZSBAY29kZQorCitAaXRlbSBiCitSZWdpc3RlcnMg ZnJvbSByMCB0byByMTQgKHJlZ2lzdGVycyB3aXRob3V0IHN0YWNrIHBvaW50 ZXIpCisKK0BpdGVtIHQKK1JlZ2lzdGVyIGZyb20gcjAgdG8gcjExIChhbGwg MTYtYml0IHJlZ2lzdGVycykKKworQGl0ZW0gcAorUmVnaXN0ZXIgZnJvbSBy MTIgdG8gcjE1IChhbGwgMzItYml0IHJlZ2lzdGVycykKKworQGl0ZW0gSQor U2lnbmVkIGNvbnN0YW50IHRoYXQgZml0cyBpbiA0IGJpdHMKKworQGl0ZW0g SgorU2lnbmVkIGNvbnN0YW50IHRoYXQgZml0cyBpbiA1IGJpdHMKKworQGl0 ZW0gSworU2lnbmVkIGNvbnN0YW50IHRoYXQgZml0cyBpbiA2IGJpdHMKKwor QGl0ZW0gTAorVW5zaWduZWQgY29uc3RhbnQgdGhhdCBmaXRzIGluIDQgYml0 cworCitAaXRlbSBNCitTaWduZWQgY29uc3RhbnQgdGhhdCBmaXRzIGluIDMy IGJpdHMKKworCitAaXRlbSBOCitDaGVjayBmb3IgNjQgYml0cyB3aWRlIGNv bnN0YW50cyBmb3IgYWRkL3N1YiBpbnN0cnVjdGlvbnMKKworQGl0ZW0gRwor RmxvYXRpbmcgcG9pbnQgY29uc3RhbnQgdGhhdCBpcyBsZWdhbCBmb3Igc3Rv cmUgaW1tZWRpYXRlCitAZW5kIHRhYmxlCisKIEBpdGVtIEhld2xldHQtUGFj a2FyZCBQQS1SSVNDLS0tQGZpbGV7Y29uZmlnL3BhL3BhLmh9CiBAdGFibGUg QGNvZGUKIEBpdGVtIGEKLS0tIG9yaWcvZ2NjL3Vud2luZC1kdzIuYwkyMDEx LTA2LTA0IDAwOjAwOjM5LjAwMDAwMDAwMCArMDUzMAorKysgbW9kL2djYy91 bndpbmQtZHcyLmMJMjAxMS0wNi0yOCAxMjozNDowMC4wMDAwMDAwMDAgKzA1 MzAKQEAgLTIxOSw4ICsyMTksMTIgQEAgX1Vud2luZF9TZXRHUiAoc3RydWN0 IF9VbndpbmRfQ29udGV4dCAqYwogICAgICogKF9VbndpbmRfUHRyICopIHB0 ciA9IHZhbDsKICAgZWxzZQogICAgIHsKKyNpZiBkZWZpbmVkIChfX0NSMTZf XykKKyAgICAgIENSMTZfVVdfU0VUR1IocHRyLHZhbCxzaXplLGluZGV4LGNv bnRleHQpOworI2Vsc2UKICAgICAgIGdjY19hc3NlcnQgKHNpemUgPT0gc2l6 ZW9mKF9VbndpbmRfV29yZCkpOwogICAgICAgKiAoX1Vud2luZF9Xb3JkICop IHB0ciA9IHZhbDsKKyNlbmRpZgogICAgIH0KIH0KIApAQCAtMTQxNCw2ICsx NDE4LDkgQEAgdXdfdXBkYXRlX2NvbnRleHQgKHN0cnVjdCBfVW53aW5kX0Nv bnRleAogICAgICAgIGNhbiBjaGFuZ2UgZnJvbSBmcmFtZSB0byBmcmFtZS4g ICovCiAgICAgY29udGV4dC0+cmEgPSBfX2J1aWx0aW5fZXh0cmFjdF9yZXR1 cm5fYWRkcgogICAgICAgKF9VbndpbmRfR2V0UHRyIChjb250ZXh0LCBmcy0+ cmV0YWRkcl9jb2x1bW4pKTsKKyNpZiBkZWZpbmVkIChfX0NSMTZfXykKKyAg ICBjb250ZXh0LT5yYSA9IENSMTZfVVdfQ09OVEVYVChjb250ZXh0LT5yYSkg OworI2VuZGlmCiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0xNDc0LDcgKzE0ODEs MTEgQEAgdXdfaW5pdF9jb250ZXh0XzEgKHN0cnVjdCBfVW53aW5kX0NvbnRl eAogICBfVW53aW5kX1NldFNwQ29sdW1uIChjb250ZXh0LCBvdXRlcl9jZmEs ICZzcF9zbG90KTsKICAgZnMucmVncy5jZmFfaG93ID0gQ0ZBX1JFR19PRkZT RVQ7CiAgIGZzLnJlZ3MuY2ZhX3JlZyA9IF9fYnVpbHRpbl9kd2FyZl9zcF9j b2x1bW4gKCk7CisjaWYgZGVmaW5lZCAoX19DUjE2X18pCisgIGZzLnJlZ3Mu Y2ZhX29mZnNldCAtPSBDUjE2X0FSR1NfU0laRShjb250ZXh0KTsKKyNlbHNl CiAgIGZzLnJlZ3MuY2ZhX29mZnNldCA9IDA7CisjZW5kaWYKIAogICB1d191 cGRhdGVfY29udGV4dF8xIChjb250ZXh0LCAmZnMpOwogCkBAIC0xNTA4LDYg KzE1MTksMTggQEAgX1Vud2luZF9EZWJ1Z0hvb2sgKHZvaWQgKmNmYSBfX2F0 dHJpYnV0ZQogICAgbWFjcm8gYmVjYXVzZSBfX2J1aWx0aW5fZWhfcmV0dXJu IG11c3QgYmUgaW52b2tlZCBpbiB0aGUgY29udGV4dCBvZgogICAgb3VyIGNh bGxlci4gICovCiAKKyNpZiBkZWZpbmVkIChfX0NSMTZfXykKKyNkZWZpbmUg dXdfaW5zdGFsbF9jb250ZXh0KENVUlJFTlQsIFRBUkdFVCkgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKyAgZG8gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGxv bmcgb2Zmc2V0ID0gdXdfaW5zdGFsbF9jb250ZXh0XzEgKChDVVJSRU5UKSwg KFRBUkdFVCkpOyAgICAgICAgIFwKKyAgICAgIHZvaWQgKmhhbmRsZXIgPSBf X2J1aWx0aW5fZnJvYl9yZXR1cm5fYWRkciAoKFRBUkdFVCktPnJhKTsgICAg ICAgIFwKKyAgICAgIENSMTZfVVdfQ09OVEVYVChoYW5kbGVyKTsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIF9V bndpbmRfRGVidWdIb29rICgoVEFSR0VUKS0+Y2ZhLCBoYW5kbGVyKTsgICAg ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIF9fYnVpbHRpbl9laF9yZXR1 cm4gKG9mZnNldCwgaGFuZGxlcik7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgd2hpbGUg KDApCisjZWxzZQogI2RlZmluZSB1d19pbnN0YWxsX2NvbnRleHQoQ1VSUkVO VCwgVEFSR0VUKQkJCQlcCiAgIGRvCQkJCQkJCQkJXAogICAgIHsJCQkJCQkJ CQlcCkBAIC0xNTE3LDYgKzE1NDAsNyBAQCBfVW53aW5kX0RlYnVnSG9vayAo dm9pZCAqY2ZhIF9fYXR0cmlidXRlCiAgICAgICBfX2J1aWx0aW5fZWhfcmV0 dXJuIChvZmZzZXQsIGhhbmRsZXIpOwkJCQlcCiAgICAgfQkJCQkJCQkJCVwK ICAgd2hpbGUgKDApCisjZW5kaWYKIAogc3RhdGljIGxvbmcKIHV3X2luc3Rh bGxfY29udGV4dF8xIChzdHJ1Y3QgX1Vud2luZF9Db250ZXh0ICpjdXJyZW50 LAotLS0gb3JpZy9saWJnY2MvY29uZmlnL2NyMTYvY3J0aS5TCTE5NzAtMDEt MDEgMDU6MzA6MDAuMDAwMDAwMDAwICswNTMwCisrKyBtb2QvbGliZ2NjL2Nv bmZpZy9jcjE2L2NydGkuUwkyMDExLTA2LTI4IDEyOjMzOjQyLjAwMDAwMDAw MCArMDUzMApAQCAtMCwwICsxLDU0IEBACisjIFNwZWNpYWxpemVkIGNvZGUg bmVlZGVkIHRvIHN1cHBvcnQgY29uc3RydWN0aW9uIGFuZCBkZXN0cnVjdGlv biBvZgorIyBmaWxlLXNjb3BlIG9iamVjdHMgaW4gQysrIGFuZCBKYXZhIGNv ZGUsIGFuZCB0byBzdXBwb3J0IGV4Y2VwdGlvbiBoYW5kbGluZy4KKyMgQ29w eXJpZ2h0IChDKSAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j LgorIyBDb250cmlidXRlZCBieSBLUElUIEN1bW1pbnMgSW5mb3N5c3RlbXMg TGltaXRlZC4KKworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGFzIHB1Ymxpc2hlZCBieSB0aGUKKyMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFu eQorIyBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIGZpbGUgaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0 CisjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyMg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIwor IyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBn cmFudGVkIGFkZGl0aW9uYWwKKyMgcGVybWlzc2lvbnMgZGVzY3JpYmVkIGlu IHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgor IyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5 IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKyMgYSBj b3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9u ZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKyMgc2VlIHRoZSBmaWxlcyBDT1BZSU5H MyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwg c2VlCisjIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworCisv KiBUaGlzIGZpbGUganVzdCBzdXBwbGllcyBmdW5jdGlvbiBwcm9sb2d1ZXMg Zm9yIHRoZSAuaW5pdCBhbmQgLmZpbmkKKyAgIHNlY3Rpb25zLiAgSXQgaXMg bGlua2VkIGluIGJlZm9yZSBjcnRiZWdpbi5vLiAgKi8KKworCS5pZGVudCAg IkdOVSBDIGNydGkubyIKKworCS5zZWN0aW9uIC5pbml0CisJLmdsb2JsICBf X2luaXQKKwkudHlwZSAgIF9faW5pdCxAZnVuY3Rpb24KK19faW5pdDoKKyNp ZiBkZWZpbmVkIChfX0lEX1NIQVJFRF9MSUJfXykKKwlwdXNoCSQyLCByMTIs IHJhCisJbW92ZCAgICAkX19jdXJyZW50X3NoYXJlZF9saWJyYXJ5X3IxMl9v ZmZzZXRfLCAocjEscjApCisJbG9hZGQgICBbcjEyXTAocjEscjApLCAocjEy KQorI2Vsc2UKKyAgICAgICAgcHVzaAlyYQorI2VuZGlmCisKKwkuc2VjdGlv biAuZmluaQorCS5nbG9ibCAgX19maW5pCisJLnR5cGUgICBfX2ZpbmksQGZ1 bmN0aW9uCitfX2Zpbmk6CisjaWYgZGVmaW5lZCAoX19JRF9TSEFSRURfTElC X18pCisJcHVzaAkkMiwgcjEyLCByYQorCW1vdmQgICAgJF9fY3VycmVudF9z aGFyZWRfbGlicmFyeV9yMTJfb2Zmc2V0XywgKHIxLHIwKQorCWxvYWRkICAg W3IxMl0wKHIxLHIwKSwgKHIxMikKKyNlbHNlCisgICAgICAgIHB1c2gJcmEK KyNlbmRpZgorCQotLS0gb3JpZy9saWJnY2MvY29uZmlnL2NyMTYvY3J0bGli aWQuUwkxOTcwLTAxLTAxIDA1OjMwOjAwLjAwMDAwMDAwMCArMDUzMAorKysg bW9kL2xpYmdjYy9jb25maWcvY3IxNi9jcnRsaWJpZC5TCTIwMTEtMDYtMjgg MTI6MzM6NDIuMDAwMDAwMDAwICswNTMwCkBAIC0wLDAgKzEsMjggQEAKKyMg UHJvdmlkZSBhIHdlYWsgZGVmaW5pdGlvbiBvZiB0aGUgbGlicmFyeSBJRCwg Zm9yIHRoZSBiZW5lZml0IG9mIGNlcnRhaW4KKyMgY29uZmlndXJlIHNjcmlw dHMuCSAKKyMgQ29weXJpZ2h0IChDKSAyMDExIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbiwgSW5jLgorIyBDb250cmlidXRlZCBieSBLUElUIEN1bW1pbnMg SW5mb3N5c3RlbXMgTGltaXRlZC4KKworIyBUaGlzIGZpbGUgaXMgZnJlZSBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlm eSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyMgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91 ciBvcHRpb24pIGFueQorIyBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIGZp bGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl IHVzZWZ1bCwgYnV0CisjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZSBHTlUKKyMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk ZXRhaWxzLgorIworIyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24g MywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKyMgcGVybWlzc2lvbnMg ZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlv biwgdmVyc2lvbgorIyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVj ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBhbmQKKyMgYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4 Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKyMgc2VlIHRoZSBm aWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVs eS4gIElmIG5vdCwgc2VlCisjIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5z ZXMvPi4KKworCS5pZGVudCAgIkdOVSBDIGNydGxpYmlkLm8iCisKKy53ZWFr IF9fY3VycmVudF9zaGFyZWRfbGlicmFyeV9yMTJfb2Zmc2V0XworLnNldCBf X2N1cnJlbnRfc2hhcmVkX2xpYnJhcnlfcjEyX29mZnNldF8sIDAKLS0tIG9y aWcvbGliZ2NjL2NvbmZpZy9jcjE2L2NydG4uUwkxOTcwLTAxLTAxIDA1OjMw OjAwLjAwMDAwMDAwMCArMDUzMAorKysgbW9kL2xpYmdjYy9jb25maWcvY3Ix Ni9jcnRuLlMJMjAxMS0wNi0yOCAxMjozMzo0Mi4wMDAwMDAwMDAgKzA1MzAK QEAgLTAsMCArMSw0NCBAQAorIyBTcGVjaWFsaXplZCBjb2RlIG5lZWRlZCB0 byBzdXBwb3J0IGNvbnN0cnVjdGlvbiBhbmQgZGVzdHJ1Y3Rpb24gb2YKKyMg ZmlsZS1zY29wZSBvYmplY3RzIGluIEMrKyBhbmQgSmF2YSBjb2RlLCBhbmQg dG8gc3VwcG9ydCBleGNlcHRpb24gaGFuZGxpbmcuCisjIENvcHlyaWdodCAo QykgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgQ29u dHJpYnV0ZWQgYnkgS1BJVCBDdW1taW5zIEluZm9zeXN0ZW1zIExpbWl0ZWQu CisKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJs aXNoZWQgYnkgdGhlCisjIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0 aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyMgbGF0 ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIGlu IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorIyBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisjIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgVW5kZXIg U2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBh ZGRpdGlvbmFsCisjIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0ND IFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKyMgMy4xLCBh cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4K KyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisjIGEgY29weSBvZiB0 aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0 aGlzIHByb2dyYW07CisjIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENP UFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorIyA8 aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKworLyogVGhpcyBm aWxlIHN1cHBsaWVzIGZ1bmN0aW9uIGVwaWxvZ3VlcyBmb3IgdGhlIC5pbml0 IGFuZCAuZmluaSBzZWN0aW9ucy4KKyAgSXQgaXMgbGlua2VkIGluIGFmdGVy IGFsbCBvdGhlciBmaWxlcy4gICovCisKKwkuaWRlbnQgICJHTlUgQyBjcnRu Lm8iCisKKwkuc2VjdGlvbiAuaW5pdAorI2lmIGRlZmluZWQgKF9fSURfU0hB UkVEX0xJQl9fKQorCXBvcHJldAkkMiwgcjEyLCByYQorI2Vsc2UKKwlwb3By ZXQJcmEKKyNlbmRpZgorCisJLnNlY3Rpb24gLmZpbmkKKyNpZiBkZWZpbmVk IChfX0lEX1NIQVJFRF9MSUJfXykKKwlwb3ByZXQJJDIsIHIxMiwgcmEKKyNl bHNlCisJcG9wcmV0CXJhCisjZW5kaWYKKwotLS0gb3JpZy9saWJnY2MvY29u ZmlnL2NyMTYvdC1jcjE2CTE5NzAtMDEtMDEgMDU6MzA6MDAuMDAwMDAwMDAw ICswNTMwCisrKyBtb2QvbGliZ2NjL2NvbmZpZy9jcjE2L3QtY3IxNgkyMDEx LTA2LTI4IDEyOjMzOjQyLjAwMDAwMDAwMCArMDUzMApAQCAtMCwwICsxLDE0 IEBACisjIEFzc2VtYmxlIHN0YXJ0dXAgZmlsZXMuCitFWFRSQV9NVUxUSUxJ Ql9QQVJUUyA9IGNydGJlZ2luLm8gY3J0ZW5kLm8gY3J0aS5vIGNydG4ubyBj cnRsaWJpZC5vCisKKyQoVCljcnRpLm86ICQoc3JjZGlyKS9jb25maWcvY3Ix Ni9jcnRpLlMgJChHQ0NfUEFTU0VTKQorCSQoR0NDX0ZPUl9UQVJHRVQpICQo R0NDX0NGTEFHUykgJChNVUxUSUxJQl9DRkxBR1MpICQoSU5DTFVERVMpIFwK KwktYyAtbyAkKFQpY3J0aS5vIC14IGFzc2VtYmxlci13aXRoLWNwcCAkKHNy Y2RpcikvY29uZmlnL2NyMTYvY3J0aS5TCisKKyQoVCljcnRsaWJpZC5vOiAk KHNyY2RpcikvY29uZmlnL2NyMTYvY3J0bGliaWQuUyAkKEdDQ19QQVNTRVMp CisJJChHQ0NfRk9SX1RBUkdFVCkgJChHQ0NfQ0ZMQUdTKSAkKE1VTFRJTElC X0NGTEFHUykgJChJTkNMVURFUykgXAorCS1jIC1vICQoVCljcnRsaWJpZC5v IC14IGFzc2VtYmxlci13aXRoLWNwcCAkKHNyY2RpcikvY29uZmlnL2NyMTYv Y3J0bGliaWQuUworCiskKFQpY3J0bi5vOiAkKHNyY2RpcikvY29uZmlnL2Ny MTYvY3J0bi5TICQoR0NDX1BBU1NFUykKKwkkKEdDQ19GT1JfVEFSR0VUKSAk KEdDQ19DRkxBR1MpICQoTVVMVElMSUJfQ0ZMQUdTKSAkKElOQ0xVREVTKSBc CisJLWMgLW8gJChUKWNydG4ubyAteCBhc3NlbWJsZXItd2l0aC1jcHAgJChz cmNkaXIpL2NvbmZpZy9jcjE2L2NydG4uUwotLS0gb3JpZy9saWJnY2MvY29u ZmlnL2NyMTYvdW53aW5kLWhlbHBlci5oCTE5NzAtMDEtMDEgMDU6MzA6MDAu MDAwMDAwMDAwICswNTMwCisrKyBtb2QvbGliZ2NjL2NvbmZpZy9jcjE2L3Vu d2luZC1oZWxwZXIuaAkyMDExLTA2LTI4IDEyOjMzOjQyLjAwMDAwMDAwMCAr MDUzMApAQCAtMCwwICsxLDUxIEBACisvKiBIZWFkZXIgZmlsZSBmb3IgQ1Ix NiB1bndpbmQgc3VwcG9ydC4KKyAgIENvcHlyaWdodCAoQykgMjAxMSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENvbnRyaWJ1dGVkIGJ5 IEtQSVQgQ3VtbWlucyBJbmZvc3lzdGVtcyBMaW1pdGVkLgorCisgICBUaGlz IGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKKyAgIEdDQyBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0 CisgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICAgYnkgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIK KyAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIEdDQyBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LCBidXQgV0lUSE9VVAorICAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g dGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgICBv ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg R05VIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuCisKKyAgIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5 b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorICAgcGVybWlzc2lvbnMgZGVz Y3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwg dmVyc2lvbgorICAgMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbi4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2Vp dmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UK KyAgIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJ ZiBub3Qgc2VlCisgICA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4u ICAqLworCisvKiBIZWxwZXIgbWFjcm8gdG8gbG9hZCB0aGUgY29ycmVjdCBQ QyB2YWx1ZSBmcm9tIFJBIHJlZ2lzdGVyLiAgKi8KKyNpZiBkZWZpbmVkIChf X0NSMTZfXykKKyNkZWZpbmUgQ1IxNl9VV19DT05URVhUKEhBTkRMRVIpCVwK KyAgKHZvaWQqKSggKCAodW5zaWduZWQpSEFORExFUiApID4+IDEgKSA7CisK Ky8qIEhlbHBlciBtYWNybyBpbiB1d19pbml0X2NvbnRleHRfMSB0byBjYWxj dWxhdGUgY3VyZW50IAorICAgZnJhbWUgY2ZhIG9mZnNldC4gICovCisjZGVm aW5lIENSMTZfQVJHU19TSVpFKENPTlRFWFQpCVwKKyAgQ09OVEVYVC0+YXJn c19zaXplOworCisvKiBIZWxwZXIgcm91dGluZSBvZiBfVW53aW5kX1NldEdS IGZvciBDUjE2LiAgKi8KKyNkZWZpbmUgQ1IxNl9VV19TRVRHUihQVFIsVkFM LFNJWkUsSU5ERVgsQ09OVEVYVCkJXAorICBkbwkJCQkJCQlcCisgICAgewkJ CQkJCQlcCisgICAgICBpZiAoIFNJWkUgPT0gc2l6ZW9mKF9VbndpbmRfV29y ZCkgKQkJXAorCSogKF9VbndpbmRfV29yZCAqKSBQVFIgPSBWQUwgOwkJCVwK KyAgICAgIGVsc2UJCQkJCQlcCisJewkJCQkJCVwKKwkgIHR5cGVkZWYgdW5z aWduZWQgX0NSMTZfVW53aW5kX1dvcmQgCQlcCisJCQkgICAgIF9fYXR0cmli dXRlX18oKF9fbW9kZV9fKF9fd29yZF9fKSkpO1wKKwkgIGdjY19hc3NlcnQg KElOREVYICsgMSAgPCAgKGludCkgc2l6ZW9mKGR3YXJmX3JlZ19zaXplX3Rh YmxlKSk7ICBcCisJICAqIChfQ1IxNl9VbndpbmRfV29yZCAqKSBQVFIgPSBW QUwgJiAweGZmZmY7IAlcCisJICBQVFIgPSBDT05URVhULT5yZWdbSU5ERVgg KyAxXTsgICAgIAkJXAorCSAgKiAoX0NSMTZfVW53aW5kX1dvcmQgKikgUFRS ID0gVkFMID4+IDE2OyAgCVwKKwl9CQkJCQkJCVwKKyAgICB9IHdoaWxlKDAp ICAKKyNlbmRpZgotLS0gb3JpZy9saWJnY2MvY29uZmlnLmhvc3QJMjAxMS0w Ni0xNCAxNzo1MDowOC4wMDAwMDAwMDAgKzA1MzAKKysrIG1vZC9saWJnY2Mv Y29uZmlnLmhvc3QJMjAxMS0wNi0yOCAxMjozMzo0MS4wMDAwMDAwMDAgKzA1 MzAKQEAgLTg1LDYgKzg1LDggQEAgYXZyLSotKikKIGJmaW4qLSopCiAJY3B1 X3R5cGU9YmZpbgogCTs7CitjcjE2LSotKikKKyAgICAgICAgOzsKIGZpZG8t Ki0qKQogCWNwdV90eXBlPW02OGsKIAk7OwpAQCAtMjk0LDYgKzI5NiwxMCBA QCBiZmluKi1saW51eC11Y2xpYmMqKQogCTs7CiBiZmluKi0qKQogICAgICAg ICA7OworY3IxNi0qLSopCisgICAgICAgIGV4dHJhX3BhcnRzPSJjcnRiZWdp bi5vIGNydGVuZC5vIGNydGkubyBjcnRuLm8gY3J0bGliaWQubyIKKyAgICAg ICAgdG1ha2VfZmlsZT0iJHt0bWFrZV9maWxlfSBjcjE2L3QtY3IxNiIKKyAg ICAgICAgOzsKIGNyaXN2MzItKi1lbGYgfCBjcmlzdjMyLSotbm9uZSB8IGNy aXMtKi1lbGYgfCBjcmlzLSotbm9uZSkKIAlleHRyYV9wYXJ0cz0iY3J0YmVn aW4ubyBjcnRlbmQubyIKIAk7Owo= --_002_371569CBCFB2E745B891DBB88B2DFDDD1A9EF750C1KCINPUNHJCMS0_--