From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 26301 invoked by alias); 20 May 2011 12:29:44 -0000 Received: (qmail 26291 invoked by uid 22791); 20 May 2011 12:29:42 -0000 X-SWARE-Spam-Status: No, hits=-0.5 required=5.0 tests=AWL,BAYES_50,RCVD_IN_DNSWL_LOW X-Spam-Check-By: sourceware.org Received: from ch1ehsobe004.messaging.microsoft.com (HELO ch1outboundpool.messaging.microsoft.com) (216.32.181.184) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 20 May 2011 12:29:26 +0000 Received: from mail182-ch1-R.bigfish.com (216.32.181.173) by CH1EHSOBE013.bigfish.com (10.43.70.63) with Microsoft SMTP Server id 14.1.225.8; Fri, 20 May 2011 12:29:23 +0000 Received: from mail182-ch1 (localhost.localdomain [127.0.0.1]) by mail182-ch1-R.bigfish.com (Postfix) with ESMTP id AEB0580867D; Fri, 20 May 2011 12:29:23 +0000 (UTC) X-SpamScore: -13 X-BigFish: VPS-13(zz936eK1443N154dMzz1202hzz8275bh8275dhz32i2a8h668h839h34h61h) X-Spam-TCS-SCL: 0:0 X-Forefront-Antispam-Report: KIP:(null);UIP:(null);IPVD:NLI;H:Kcinpunhjhc01.kpit.com;RD:Kcinpunhjhc01.kpit.com;EFVD:NLI Received: from mail182-ch1 (localhost.localdomain [127.0.0.1]) by mail182-ch1 (MessageSwitch) id 130589456361195_25892; Fri, 20 May 2011 12:29:23 +0000 (UTC) Received: from CH1EHSMHS023.bigfish.com (snatpool1.int.messaging.microsoft.com [10.43.68.251]) by mail182-ch1.bigfish.com (Postfix) with ESMTP id 09206140046; Fri, 20 May 2011 12:29:23 +0000 (UTC) Received: from Kcinpunhjhc01.kpit.com (203.197.93.240) by CH1EHSMHS023.bigfish.com (10.43.70.23) with Microsoft SMTP Server (TLS) id 14.1.225.8; Fri, 20 May 2011 12:29:14 +0000 Received: from Kcinpunhjcms01.kpit.com ([172.10.16.121]) by Kcinpunhjhc01.kpit.com ([172.10.16.123]) with mapi; Fri, 20 May 2011 17:57:37 +0530 From: Sumanth Gundapaneni To: Joseph Myers , "gcc-patches@gcc.gnu.org" , "rth@redhat.com" CC: "Jayant R. Sonar" Date: Fri, 20 May 2011 13:59:00 -0000 Subject: RE: CR16 Port addition Message-ID: <371569CBCFB2E745B891DBB88B2DFDDD1A246E7DDF@KCINPUNHJCMS01.kpit.com> References: <371569CBCFB2E745B891DBB88B2DFDDD1A2343CD45@KCINPUNHJCMS01.kpit.com> In-Reply-To: x-cr-hashedpuzzle: BQp8 Bzan Dkri Eaaq Ejr5 FWmz IWZE PQ51 RORE TNvs YVG9 YfVx d6+U eIZF fNy5 ggge;3;ZwBjAGMALQBwAGEAdABjAGgAZQBzAEAAZwBjAGMALgBnAG4AdQAuAG8AcgBnADsAagBvAHMAZQBwAGgAQABjAG8AZABlAHMAbwB1AHIAYwBlAHIAeQAuAGMAbwBtADsAcgB0AGgAQAByAGUAZABoAGEAdAAuAGMAbwBtAA==;Sosha1_v1;7;{BE562766-6D32-4D7E-B635-DC7B0B9CAC13};cwB1AG0AYQBuAHQAaAAuAGcAdQBuAGQAYQBwAGEAbgBlAG4AaQBAAGsAcABpAHQAYwB1AG0AbQBpAG4AcwAuAGMAbwBtAA==;Fri, 20 May 2011 12:27:18 GMT;UgBFADoAIABDAFIAMQA2ACAAUABvAHIAdAAgAGEAZABkAGkAdABpAG8AbgA= x-cr-puzzleid: {BE562766-6D32-4D7E-B635-DC7B0B9CAC13} Content-Type: multipart/mixed; boundary="_003_371569CBCFB2E745B891DBB88B2DFDDD1A246E7DDFKCINPUNHJCMS0_" 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-05/txt/msg01451.txt.bz2 --_003_371569CBCFB2E745B891DBB88B2DFDDD1A246E7DDFKCINPUNHJCMS0_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Content-length: 4675 Hi Joseph and Richard, Thanks for your patience in reviewing the CR16 port and I am 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 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. >This is not a patch against GCC trunk. The patch has been updated for the latest sources. >that builds cleanly (including building with --enable-werror-always The patched source is built with --enable-werror-always and it builds cleanly. As suggested, the cross compiler is built with the native=20 bootstrapped build of current trunk to avoid warning turned errors=20 related to gcc diagnostic functions. > obsolete poisoned target macros TARGET_VERSION and IRA_COVER_CLASSES=20 These macros are removed. > the code has at least one old-style function=20 This has been rectified. =20 >please convert the target to define the hooks directly and not the=20 >FUNCTION_VALUE is one example of an obsolescent macro=20 >GO_IF_LEGITIMATE_ADDRESS is another. The hooks have been defined as per gcc internals. Most of the obsolete macros have been eliminated.=20 > proper formatting of diagnostic messages=20 This has been modified. > There is no such target as target-mudflap, The configure file is altered as per your suggestion. > then you'll need to adjust config.sub in config.git first. I will do the necessary modification and update the same in config.git. >Remove .file directives from your .S files. All the .file directives in .S files are removed >The libstdc++-v3 changes also seem suspicious.=20=20 The configure files of libstdc++-v3 are changed as advised.=20=20 >I'm still not satisfied with the forked version of the unwind code.=20=20 >Please show a diff of what the minimum changes would be to the=20 I have attached diff file (unwind.diff) for your reference. Please go through it. As explicated before the CR16's programming memory=20 is 2-byte aligned and the least significant bit of PC is always zero.=20 The Return Address (RA) register always saves the value of PC right=20 shifted by 1(PC >> 1). This conversion seems broken at some places=20 during unwinding which results in terminate() function being called. Being said that all the required changes (macros) were implemented to=20 Handle exceptions in C++. These files were added to help fix this problem. However, we have not yet completely solved this problem. If we are able to fix this without major=20 modifications, we will move these files back in which case customized unwind files would not be needed. gcc/ChangeLog: -------------- 2011-05-20 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. * config/cr16/unwind-dw2-cr16.c: New file. * config/cr16/unwind-dw2.h: New file.=20 libgcc/ChangeLog: ----------------- 2011-05-20 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. =09=09 libstdc++-v3/ChangeLog: ----------------------- 2011-05-20 Sumanth G Jayant R Sonar *configure: Add National Semiconductor CR16 target (cr16-*-*).=09=09 =09 ChangeLog: ---------- 2011-05-20 Sumanth G Jayant R Sonar * configure.ac: Add National Semiconductor CR16 target. * configure: Regenerate =20=20=20 Thanks in advance, Sumanth G, PUNE (India). --_003_371569CBCFB2E745B891DBB88B2DFDDD1A246E7DDFKCINPUNHJCMS0_ Content-Type: application/octet-stream; name="cr16-gcc.patch" Content-Description: cr16-gcc.patch Content-Disposition: attachment; filename="cr16-gcc.patch"; size=219765; creation-date="Fri, 20 May 2011 16:39:44 GMT"; modification-date="Fri, 20 May 2011 17:21:02 GMT" Content-Transfer-Encoding: base64 Content-length: 297904 ZGlmZiAtdXByTiBvcmlnL2NvbmZpZ3VyZSBtb2QvY29uZmlndXJlCi0tLSBv cmlnL2NvbmZpZ3VyZQkyMDExLTA1LTA5IDEzOjA5OjQ1LjAwMDAwMDAwMCAr MDUzMAorKysgbW9kL2NvbmZpZ3VyZQkyMDExLTA1LTIwIDE1OjE2OjQwLjAw MDAwMDAwMCArMDUzMApAQCAtMzQ0Myw3ICszNDQzLDEyIEBAIGNhc2UgIiR7 dGFyZ2V0fSIgaW4KICAgICBub2NvbmZpZ2RpcnM9IiRub2NvbmZpZ2RpcnMg dGFyZ2V0LWxpYmdsb3NzIGdkYiIKICAgICA7OwogICBjcjE2LSotKikKLSAg ICBub2NvbmZpZ2RpcnM9IiRub2NvbmZpZ2RpcnMgZ2RiIgorICAgIGNhc2Ug IiR7dGFyZ2V0X2FsaWFzfSIgaW4KKyAgICAgIGNyMTYtdWNsaW51eCkKKyAg ICAgICAgbm9jb25maWdkaXJzPSIkbm9jb25maWdkaXJzICR7bGliZ2NqfSI7 OworICAgICAgKikKKyAgICAgICAgbm9jb25maWdkaXJzPSIkbm9jb25maWdk aXJzICR7bGliZ2NqfSBnZGIiOzsKKyAgICBlc2FjCiAgICAgOzsKICAgZDEw di0qLSopCiAgICAgbm9jb25maWdkaXJzPSIkbm9jb25maWdkaXJzIHRhcmdl dC1saWJnbG9zcyIKZGlmZiAtdXByTiBvcmlnL2NvbmZpZ3VyZS5hYyBtb2Qv Y29uZmlndXJlLmFjCi0tLSBvcmlnL2NvbmZpZ3VyZS5hYwkyMDExLTA1LTA5 IDEzOjA5OjQ1LjAwMDAwMDAwMCArMDUzMAorKysgbW9kL2NvbmZpZ3VyZS5h YwkyMDExLTA1LTIwIDE1OjE2OjM4LjAwMDAwMDAwMCArMDUzMApAQCAtODg5 LDcgKzg4OSwxMiBAQCBjYXNlICIke3RhcmdldH0iIGluCiAgICAgbm9jb25m aWdkaXJzPSIkbm9jb25maWdkaXJzIHRhcmdldC1saWJnbG9zcyBnZGIiCiAg ICAgOzsKICAgY3IxNi0qLSopCi0gICAgbm9jb25maWdkaXJzPSIkbm9jb25m aWdkaXJzIGdkYiIKKyAgICBjYXNlICIke3RhcmdldF9hbGlhc30iIGluCisg ICAgICBjcjE2LXVjbGludXgpCisgICAgICAgIG5vY29uZmlnZGlycz0iJG5v Y29uZmlnZGlycyAke2xpYmdjan0iOzsKKyAgICAgICopCisgICAgICAgIG5v Y29uZmlnZGlycz0iJG5vY29uZmlnZGlycyAke2xpYmdjan0gZ2RiIjs7Cisg ICAgZXNhYwogICAgIDs7CiAgIGQxMHYtKi0qKQogICAgIG5vY29uZmlnZGly cz0iJG5vY29uZmlnZGlycyB0YXJnZXQtbGliZ2xvc3MiCmRpZmYgLXVwck4g b3JpZy9nY2MvY29uZmlnL2NyMTYvY29uc3RyYWludHMubWQgbW9kL2djYy9j b25maWcvY3IxNi9jb25zdHJhaW50cy5tZAotLS0gb3JpZy9nY2MvY29uZmln L2NyMTYvY29uc3RyYWludHMubWQJMTk3MC0wMS0wMSAwNTozMDowMC4wMDAw MDAwMDAgKzA1MzAKKysrIG1vZC9nY2MvY29uZmlnL2NyMTYvY29uc3RyYWlu dHMubWQJMjAxMS0wNS0yMCAxNjoyNzoxOS4wMDAwMDAwMDAgKzA1MzAKQEAg LTAsMCArMSw4MSBAQAorOzsgUHJlZGljYXRlcyBvZiBtYWNoaW5lIGRlc2Ny aXB0aW9uIGZvciBDUjE2LgorOzsgQ29weXJpZ2h0IChDKSAyMDEwIEZyZWUg 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 IDAsIDMxKSIpKSkKZGlmZiAtdXByTiBvcmlnL2djYy9jb25maWcvY3IxNi9j cjE2LmMgbW9kL2djYy9jb25maWcvY3IxNi9jcjE2LmMKLS0tIG9yaWcvZ2Nj L2NvbmZpZy9jcjE2L2NyMTYuYwkxOTcwLTAxLTAxIDA1OjMwOjAwLjAwMDAw MDAwMCArMDUzMAorKysgbW9kL2djYy9jb25maWcvY3IxNi9jcjE2LmMJMjAx MS0wNS0yMCAxNjoyNjoyNi4wMDAwMDAwMDAgKzA1MzAKQEAgLTAsMCArMSwy MjEyIEBACisvKiBPdXRwdXQgcm91dGluZXMgZm9yIENSMTYgcHJvY2Vzc29y LgorICAgQ29weXJpZ2h0IChDKSAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbiwgSW5jLgorICAgQ29udHJpYnV0ZWQgYnkgS1BJVCBDdW1taW5zIElu Zm9zeXN0ZW1zIExpbWl0ZWQuCisgIAorICAgVGhpcyBmaWxlIGlzIHBhcnQg b2YgR0NDLgorCisgICBHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBw dWJsaXNoZWQKKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247 IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyCisgICBvcHRpb24pIGFu eSBsYXRlciB2ZXJzaW9uLgorIAorICAgR0NDIGlzIGRpc3RyaWJ1dGVkIGlu IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VU CisgICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgIG9yIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMKKyAgIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91 IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggR0NDOyBzZWUgdGhl IGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisgICA8aHR0cDovL3d3dy5n bnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi CisjaW5jbHVkZSAic3lzdGVtLmgiCisjaW5jbHVkZSAiY29yZXR5cGVzLmgi CisjaW5jbHVkZSAidG0uaCIKKyNpbmNsdWRlICJydGwuaCIKKyNpbmNsdWRl ICJ0cmVlLmgiCisjaW5jbHVkZSAidG1fcC5oIgorI2luY2x1ZGUgInJlZ3Mu aCIKKyNpbmNsdWRlICJoYXJkLXJlZy1zZXQuaCIKKyNpbmNsdWRlICJpbnNu LWNvbmZpZy5oIgorI2luY2x1ZGUgImNvbmRpdGlvbnMuaCIKKyNpbmNsdWRl ICJvdXRwdXQuaCIKKyNpbmNsdWRlICJpbnNuLWNvZGVzLmgiCisjaW5jbHVk ZSAiaW5zbi1hdHRyLmgiCisjaW5jbHVkZSAiZmxhZ3MuaCIKKyNpbmNsdWRl ICJleGNlcHQuaCIKKyNpbmNsdWRlICJmdW5jdGlvbi5oIgorI2luY2x1ZGUg InJlY29nLmgiCisjaW5jbHVkZSAiZXhwci5oIgorI2luY2x1ZGUgIm9wdGFi cy5oIgorI2luY2x1ZGUgImRpYWdub3N0aWMtY29yZS5oIgorI2luY2x1ZGUg ImJhc2ljLWJsb2NrLmgiCisjaW5jbHVkZSAidGFyZ2V0LmgiCisjaW5jbHVk ZSAidGFyZ2V0LWRlZi5oIgorI2luY2x1ZGUgImRmLmgiCisKKy8qIERlZmlu aXRpb25zLiAgKi8KKworLyogTWF4aW11bSBudW1iZXIgb2YgcmVnaXN0ZXIg dXNlZCBmb3IgcGFzc2luZyBwYXJhbWV0ZXJzLiAgKi8KKyNkZWZpbmUgTUFY X1JFR19GT1JfUEFTU0lOR19BUkdTICA2CisKKy8qIE1pbmltdW0gbnVtYmVy IHJlZ2lzdGVyIHVzZWQgZm9yIHBhc3NpbmcgcGFyYW1ldGVycy4gICovCisj ZGVmaW5lIE1JTl9SRUdfRk9SX1BBU1NJTkdfQVJHUyAgMgorCisvKiBUaGUg bWF4aW11bSBjb3VudCBvZiB3b3JkcyBzdXBwb3J0ZWQgaW4gdGhlIGFzc2Vt Ymx5IG9mIHRoZSBhcmNoaXRlY3R1cmUgaW4KKyAgIGEgcHVzaC9wb3AgaW5z dHJ1Y3Rpb24uICAqLworI2RlZmluZSBNQVhfQ09VTlQgIDgKKworLyogUHJl ZGljYXRlIGlzIHRydWUgaWYgdGhlIGN1cnJlbnQgZnVuY3Rpb24gaXMgYSAn bm9yZXR1cm4nIGZ1bmN0aW9uLCAKKyAgIGkuZS4gaXQgaXMgcXVhbGlmaWVk IGFzIHZvbGF0aWxlLiAgKi8KKyNkZWZpbmUgRlVOQ19JU19OT1JFVFVSTl9Q KGRlY2wpIChUUkVFX1RISVNfVk9MQVRJTEUgKGRlY2wpKQorCisvKiBQcmVk aWNhdGUgdGhhdCBob2xkcyB3aGVuIHdlIG5lZWQgdG8gc2F2ZSByZWdpc3Rl cnMgZXZlbiBmb3IgJ25vcmV0dXJuJworICAgZnVuY3Rpb25zLCB0byBhY2Nv bW9kYXRlIGZvciB1bndpbmRpbmcuICAqLworI2RlZmluZSBNVVNUX1NBVkVf UkVHU19QKCkgXAorICAoZmxhZ191bndpbmRfdGFibGVzIHx8IChmbGFnX2V4 Y2VwdGlvbnMgJiYgIVVJX1NKTEopKQorCisvKiBOb256ZXJvIGlmIHRoZSBy dHggWCBpcyBhIHNpZ25lZCBjb25zdCBpbnQgb2YgbiBiaXRzLiAgKi8KKyNk ZWZpbmUgUlRYX1NJR05FRF9JTlRfRklUU19OX0JJVFMoWCxuKSAgICAgICAg ICAgICAgICBcCisgICgoR0VUX0NPREUgKFgpID09IENPTlNUX0lOVCAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorICAgJiYgU0lHTkVEX0lOVF9GSVRT X05fQklUUyAoSU5UVkFMIChYKSwgbikpID8gMSA6IDApCisKKy8qIE5vbnpl cm8gaWYgdGhlIHJ0eCBYIGlzIGFuIHVuc2lnbmVkIGNvbnN0IGludCBvZiBu IGJpdHMuICAqLworI2RlZmluZSBSVFhfVU5TSUdORURfSU5UX0ZJVFNfTl9C SVRTKFgsIG4pICAgICAgICAgICAgICAgXAorICAoKEdFVF9DT0RFIChYKSA9 PSBDT05TVF9JTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg JiYgVU5TSUdORURfSU5UX0ZJVFNfTl9CSVRTIChJTlRWQUwgKFgpLCBuKSkg PyAxIDogMCkKKworLyogU3RydWN0dXJlIGZvciBzdGFjayBjb21wdXRhdGlv bnMuICAqLworCisvKiB2YXJpYWJsZSBkZWZpbml0aW9ucyBpbiB0aGUgc3Ry dXR1cmUKKyAgIGFyZ3Nfc2l6ZSAgICAgICAgICAgICBOdW1iZXIgb2YgYnl0 ZXMgc2F2ZWQgb24gdGhlIHN0YWNrIGZvciBsb2NhbCAKKwkJCSB2YXJpYWJs ZXMKKworICAgcmVnX3NpemUJCSBOdW1iZXIgb2YgYnl0ZXMgc2F2ZWQgb24g dGhlIHN0YWNrIGZvciAKKwkJCSBub24tc2NyYXRjaCByZWdpc3RlcnMKKwor ICAgdG90YWxfc2l6ZSAJCSBUaGUgc3VtIG9mIDIgc2l6ZXM6IGxvY2FscyB2 YXJzIGFuZCBwYWRkaW5nIGJ5dGUgCisJCQkgZm9yIHNhdmluZyB0aGUgcmVn aXN0ZXJzLiBVc2VkIGluIGV4cGFuZF9wcm9sb2d1ZSgpIAorCQkJIGFuZCBl eHBhbmRfZXBpbG9ndWUoKQorCisgICBsYXN0X3JlZ190b19zYXZlICAgICAg V2lsbCBob2xkIHRoZSBudW1iZXIgb2YgdGhlIGxhc3QgcmVnaXN0ZXIgdGhl IAorCQkJIHByb2xvZ3VlIHNhdmVzLCAtMSBpZiBubyByZWdpc3RlciBpcyBz YXZlZAorCisgICBzYXZlX3JlZ3NbMTZdCSBFYWNoIG9iamVjdCBpbiB0aGUg YXJyYXkgaXMgYSByZWdpc3RlciBudW1iZXIuIAorCQkJIE1hcmsgMSBmb3Ig cmVnaXN0ZXJzIHRoYXQgbmVlZCB0byBiZSBzYXZlZAorCisgICBudW1fcmVn cwkJIE51bWJlciBvZiByZWdpc3RlcnMgc2F2ZWQKKworICAgaW5pdGlhbGl6 ZWQJCSBOb24temVybyBpZiBmcmFtZSBzaXplIGFscmVhZHkgY2FsY3VsYXRl ZCwgbm90IAorCQkJIHVzZWQgeWV0CisKKyAgIGZ1bmN0aW9uX21ha2VzX2Nh bGxzICBEb2VzIHRoZSBmdW5jdGlvbiBtYWtlIGNhbGxzID8gbm90IHVzZWQg eWV0LiAgKi8KKworc3RydWN0IGNyMTZfZnJhbWVfaW5mbworeworICB1bnNp Z25lZCBsb25nIHZhcl9zaXplOworICB1bnNpZ25lZCBsb25nIGFyZ3Nfc2l6 ZTsKKyAgdW5zaWduZWQgaW50ICByZWdfc2l6ZTsKKyAgdW5zaWduZWQgbG9u ZyB0b3RhbF9zaXplOworICBsb25nICAgICAgICAgIGxhc3RfcmVnX3RvX3Nh dmU7CisgIGxvbmcgICAgICAgICAgc2F2ZV9yZWdzW0ZJUlNUX1BTRVVET19S RUdJU1RFUl07CisgIGludCAgICAgICAgICAgbnVtX3JlZ3M7CisgIGludCAg ICAgICAgICAgaW5pdGlhbGl6ZWQ7CisgIGludCAgICAgICAgICAgZnVuY3Rp b25fbWFrZXNfY2FsbHM7Cit9OworCisvKiBDdXJyZW50IGZyYW1lIGluZm9y bWF0aW9uIGNhbGN1bGF0ZWQgYnkgY3IxNl9jb21wdXRlX2ZyYW1lX3NpemUu ICAqLworc3RhdGljIHN0cnVjdCBjcjE2X2ZyYW1lX2luZm8gY3VycmVudF9m cmFtZV9pbmZvOworCisvKiBTdGF0aWMgVmFyaWFibGVzLiAgKi8KKworLyog RGF0YSBtb2RlbCB0aGF0IHdhcyBzdXBwbGllZCBieSB1c2VyIHZpYSBjb21t YW5kIGxpbmUgb3B0aW9uCisgICBUaGlzIHdpbGwgYmUgb3ZlcnJpZGRlbiBp biBjYXNlIG9mIGludmFsaWQgY29tYmluYXRpb24KKyAgIG9mIGNvcmUgYW5k IGRhdGEgbW9kZWwgb3B0aW9ucyBhcmUgc3VwcGxpZWQuICAqLworc3RhdGlj IGVudW0gZGF0YV9tb2RlbF90eXBlIGRhdGFfbW9kZWwgPSBETV9ERUZBVUxU OworCisvKiBUQVJHRVRNIEZ1bmN0aW9uIFByb3RvdHlwZXMgYW5kIGZvcndh cmQgZGVjbGFyYXRpb25zICAqLworc3RhdGljIHJ0eCBjcjE2X3N0cnVjdF92 YWx1ZV9ydHggKHRyZWUgZm50eXBlIEFUVFJJQlVURV9VTlVTRUQsCisJCQkJ ICBpbnQgaW5jb21pbmcgQVRUUklCVVRFX1VOVVNFRCk7CitzdGF0aWMgYm9v bCBjcjE2X3JldHVybl9pbl9tZW1vcnkgKGNvbnN0X3RyZWUgdHlwZSwgY29u c3RfdHJlZSBmbnR5cGUgQVRUUklCVVRFX1VOVVNFRCk7CitzdGF0aWMgYm9v bCBjcjE2X2ZyYW1lX3BvaW50ZXJfcmVxdWlyZWQgKHZvaWQpOworc3RhdGlj IGJvb2wgY3IxNl9jYW5fZWxpbWluYXRlIChjb25zdCBpbnQsIGNvbnN0IGlu dCk7CitzdGF0aWMgcnR4IGNyMTZfbGVnaXRpbWl6ZV9hZGRyZXNzIChydHgs IHJ0eCwgZW51bSBtYWNoaW5lX21vZGUpOworc3RhdGljIGVudW0gbWFjaGlu ZV9tb2RlIGNyMTZfdW53aW5kX3dvcmRfbW9kZSAodm9pZCk7CitzdGF0aWMg dm9pZCBjcjE2X2NvbmRpdGlvbmFsX3JlZ2lzdGVyX3VzYWdlICh2b2lkKTsK K3N0YXRpYyB2b2lkIGNyMTZfb3ZlcnJpZGVfb3B0aW9ucyAodm9pZCk7Citz dGF0aWMgYm9vbCBjcjE2X2NsYXNzX2xpa2VseV9zcGlsbGVkX3AgKHJlZ19j bGFzc190KTsKK3N0YXRpYyBpbnQgIGNyMTZfcmV0dXJuX3BvcHNfYXJncyAo dHJlZSwgdHJlZSwgaW50KTsKK3N0YXRpYyBydHggY3IxNl9mdW5jdGlvbl9h cmcgKENVTVVMQVRJVkVfQVJHUyAqLCBlbnVtIG1hY2hpbmVfbW9kZSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RfdHJlZSwgYm9vbCk7 CitzdGF0aWMgdm9pZCBjcjE2X2Z1bmN0aW9uX2FyZ19hZHZhbmNlIChDVU1V TEFUSVZFX0FSR1MgKiwgZW51bSBtYWNoaW5lX21vZGUsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0X3RyZWUsIGJvb2wp Oworc3RhdGljIGJvb2wgY3IxNl9sZWdpdGltYXRlX2NvbnN0YW50X3AgICAo ZW51bSBtYWNoaW5lX21vZGUsIHJ0eCk7CitzdGF0aWMgcnR4IGNyMTZfZnVu Y3Rpb25fdmFsdWUgKGNvbnN0X3RyZWUsIGNvbnN0X3RyZWUsIGJvb2wpOwor c3RhdGljIHJ0eCBjcjE2X2xpYmNhbGxfdmFsdWUgKGVudW0gbWFjaGluZV9t b2RlLCBjb25zdF9ydHgpOworc3RhdGljIGJvb2wgY3IxNl9mdW5jdGlvbl92 YWx1ZV9yZWdub19wIChjb25zdCB1bnNpZ25lZCBpbnQpOworc3RhdGljIGJv b2wgY3IxNl9sZWdpdGltYXRlX2FkZHJlc3NfcCAoZW51bSBtYWNoaW5lX21v ZGUsIHJ0eCwgYm9vbCk7CitzdGF0aWMgdm9pZCBjcjE2X3ByaW50X29wZXJh bmQgKEZJTEUgKiwgcnR4LCBpbnQpOworc3RhdGljIHZvaWQgY3IxNl9wcmlu dF9vcGVyYW5kX2FkZHJlc3MgKEZJTEUgKiwgcnR4KTsKK3N0YXRpYyBpbnQg Y3IxNl9hZGRyZXNzX2Nvc3QgKHJ0eCwgYm9vbCk7CitzdGF0aWMgaW50IGNy MTZfcmVnaXN0ZXJfbW92ZV9jb3N0IChlbnVtIG1hY2hpbmVfbW9kZSwgcmVn X2NsYXNzX3QsIHJlZ19jbGFzc190KTsKK3N0YXRpYyBpbnQgY3IxNl9tZW1v cnlfbW92ZV9jb3N0IChlbnVtIG1hY2hpbmVfbW9kZSwgcmVnX2NsYXNzX3Qs IGJvb2wpOworCisvKiBTdGFjayBsYXlvdXQgYW5kIGNhbGxpbmcgY29udmVu dGlvbnMuICAqLworI3VuZGVmICBUQVJHRVRfU1RSVUNUX1ZBTFVFX1JUWAor I2RlZmluZSBUQVJHRVRfU1RSVUNUX1ZBTFVFX1JUWCAgICAgCWNyMTZfc3Ry dWN0X3ZhbHVlX3J0eAorI3VuZGVmICBUQVJHRVRfUkVUVVJOX0lOX01FTU9S WQorI2RlZmluZSBUQVJHRVRfUkVUVVJOX0lOX01FTU9SWSAgICAgCWNyMTZf cmV0dXJuX2luX21lbW9yeQorCisKKy8qIFRhcmdldC1zcGVjaWZpYyB1c2Vz IG9mICdfX2F0dHJpYnV0ZV9fJy4gICovCisjdW5kZWYgIFRBUkdFVF9BVFRS SUJVVEVfVEFCTEUKKyNkZWZpbmUgVEFSR0VUX0FUVFJJQlVURV9UQUJMRSAJ CWNyMTZfYXR0cmlidXRlX3RhYmxlCisjdW5kZWYgVEFSR0VUX05BUlJPV19W T0xBVElMRV9CSVRGSUVMRAorI2RlZmluZSBUQVJHRVRfTkFSUk9XX1ZPTEFU SUxFX0JJVEZJRUxEIGhvb2tfYm9vbF92b2lkX2ZhbHNlCisKKy8qIEVIIHJl bGF0ZWQuICAqLworI3VuZGVmIFRBUkdFVF9VTldJTkRfV09SRF9NT0RFCisj ZGVmaW5lIFRBUkdFVF9VTldJTkRfV09SRF9NT0RFCQljcjE2X3Vud2luZF93 b3JkX21vZGUKKworLyogT3ZlcnJpZGUgT3B0aW9ucy4gICovCisjdW5kZWYg VEFSR0VUX09QVElPTl9PVkVSUklERQorI2RlZmluZSBUQVJHRVRfT1BUSU9O X09WRVJSSURFICAJY3IxNl9vdmVycmlkZV9vcHRpb25zIAorCisvKiBDb25k aXRpb25hbCByZWdpc3RlciB1c3VhZ2UuICAqLworI3VuZGVmIFRBUkdFVF9D T05ESVRJT05BTF9SRUdJU1RFUl9VU0FHRSAKKyNkZWZpbmUgVEFSR0VUX0NP TkRJVElPTkFMX1JFR0lTVEVSX1VTQUdFIGNyMTZfY29uZGl0aW9uYWxfcmVn aXN0ZXJfdXNhZ2UKKworLyogQ29udHJvbGxpbmcgcmVnaXN0ZXIgc3BpbGxz LiAgKi8KKyN1bmRlZiBUQVJHRVRfQ0xBU1NfTElLRUxZX1NQSUxMRURfUAor I2RlZmluZSBUQVJHRVRfQ0xBU1NfTElLRUxZX1NQSUxMRURfUCBjcjE2X2Ns YXNzX2xpa2VseV9zcGlsbGVkX3AKKworLyogUGFzc2luZyBmdW5jdGlvbiBh cmd1bWVudHMuICAqLworI3VuZGVmIFRBUkdFVF9GVU5DVElPTl9BUkcKKyNk ZWZpbmUgVEFSR0VUX0ZVTkNUSU9OX0FSRyBjcjE2X2Z1bmN0aW9uX2FyZwor I3VuZGVmIFRBUkdFVF9GVU5DVElPTl9BUkdfQURWQU5DRQorI2RlZmluZSBU QVJHRVRfRlVOQ1RJT05fQVJHX0FEVkFOQ0UgY3IxNl9mdW5jdGlvbl9hcmdf YWR2YW5jZQorI3VuZGVmIFRBUkdFVF9SRVRVUk5fUE9QU19BUkdTCisjZGVm aW5lIFRBUkdFVF9SRVRVUk5fUE9QU19BUkdTIGNyMTZfcmV0dXJuX3BvcHNf YXJncworCisvKiBJbml0aWFsaXplIHRoZSBHQ0MgdGFyZ2V0IHN0cnVjdHVy ZS4gICovCisjdW5kZWYgVEFSR0VUX0ZSQU1FX1BPSU5URVJfUkVRVUlSRUQK KyNkZWZpbmUgVEFSR0VUX0ZSQU1FX1BPSU5URVJfUkVRVUlSRUQJY3IxNl9m cmFtZV9wb2ludGVyX3JlcXVpcmVkCisjdW5kZWYgVEFSR0VUX0NBTl9FTElN SU5BVEUKKyNkZWZpbmUgVEFSR0VUX0NBTl9FTElNSU5BVEUgCQljcjE2X2Nh bl9lbGltaW5hdGUKKyN1bmRlZiBUQVJHRVRfTEVHSVRJTUlaRV9BRERSRVNT CisjZGVmaW5lIFRBUkdFVF9MRUdJVElNSVpFX0FERFJFU1MgCWNyMTZfbGVn aXRpbWl6ZV9hZGRyZXNzCisjdW5kZWYgVEFSR0VUX0xFR0lUSU1BVEVfQ09O U1RBTlRfUAorI2RlZmluZSBUQVJHRVRfTEVHSVRJTUFURV9DT05TVEFOVF9Q ICAgIGNyMTZfbGVnaXRpbWF0ZV9jb25zdGFudF9wCisjdW5kZWYgVEFSR0VU X0xFR0lUSU1BVEVfQUREUkVTU19QCisjZGVmaW5lIFRBUkdFVF9MRUdJVElN QVRFX0FERFJFU1NfUCAgICAgY3IxNl9sZWdpdGltYXRlX2FkZHJlc3NfcAor CisvKiBSZXR1cm5pbmcgZnVuY3Rpb24gdmFsdWUuICAqLworI3VuZGVmIFRB UkdFVF9GVU5DVElPTl9WQUxVRQorI2RlZmluZSBUQVJHRVRfRlVOQ1RJT05f VkFMVUUgY3IxNl9mdW5jdGlvbl92YWx1ZQorI3VuZGVmIFRBUkdFVF9MSUJD QUxMX1ZBTFVFCisjZGVmaW5lIFRBUkdFVF9MSUJDQUxMX1ZBTFVFIGNyMTZf bGliY2FsbF92YWx1ZQorI3VuZGVmIFRBUkdFVF9GVU5DVElPTl9WQUxVRV9S RUdOT19QCisjZGVmaW5lIFRBUkdFVF9GVU5DVElPTl9WQUxVRV9SRUdOT19Q IGNyMTZfZnVuY3Rpb25fdmFsdWVfcmVnbm9fcAorCisvKiBwcmludGluZyB0 aGUgdmFsdWVzLiAgKi8KKyN1bmRlZiBUQVJHRVRfUFJJTlRfT1BFUkFORAor I2RlZmluZSBUQVJHRVRfUFJJTlRfT1BFUkFORCBjcjE2X3ByaW50X29wZXJh bmQKKyN1bmRlZiBUQVJHRVRfUFJJTlRfT1BFUkFORF9BRERSRVNTCisjZGVm aW5lIFRBUkdFVF9QUklOVF9PUEVSQU5EX0FERFJFU1MgY3IxNl9wcmludF9v cGVyYW5kX2FkZHJlc3MKKworLyogUmVsYXRpdmUgY29zdHMgb2Ygb3BlcmF0 aW9ucy4gICovCisjdW5kZWYgIFRBUkdFVF9BRERSRVNTX0NPU1QKKyNkZWZp bmUgVEFSR0VUX0FERFJFU1NfQ09TVCAJCWNyMTZfYWRkcmVzc19jb3N0Cisj dW5kZWYgVEFSR0VUX1JFR0lTVEVSX01PVkVfQ09TVAorI2RlZmluZSBUQVJH RVRfUkVHSVNURVJfTU9WRV9DT1NUIGNyMTZfcmVnaXN0ZXJfbW92ZV9jb3N0 CisjdW5kZWYgVEFSR0VUX01FTU9SWV9NT1ZFX0NPU1QKKyNkZWZpbmUgVEFS R0VUX01FTU9SWV9NT1ZFX0NPU1QgY3IxNl9tZW1vcnlfbW92ZV9jb3N0CisK Ky8qIFRhYmxlIG9mIG1hY2hpbmUgYXR0cmlidXRlcy4gICovCitzdGF0aWMg Y29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9zcGVjIGNyMTZfYXR0cmlidXRlX3Rh YmxlW10gPSB7CisgIC8qIElTUnMgaGF2ZSBzcGVjaWFsIHByb2xvZ3VlIGFu ZCBlcGlsb2d1ZSByZXF1aXJlbWVudHMuICAqLworICAvKiB7IG5hbWUsIG1p bl9sZW4sIG1heF9sZW4sIGRlY2xfcmVxLCB0eXBlX3JlcSwgZm5fdHlwZV9y ZXEsIGhhbmRsZXIsCisgICAgICAgYWZmZWN0c190eXBlX2lkZW50aXR5IH0u ICAqLworICB7ImludGVycnVwdCIsIDAsIDAsIGZhbHNlLCB0cnVlLCB0cnVl LCBOVUxMLCBmYWxzZX0sCisgIHtOVUxMLCAwLCAwLCBmYWxzZSwgZmFsc2Us IGZhbHNlLCBOVUxMLCBmYWxzZX0KK307CisKKy8qIFRBUkdFVF9BU01fVU5B TElHTkVEX3h4X09QIGdlbmVyYXRlcyAuP2J5dGUgZGlyZWN0aXZlCisgICAu P2J5dGUgZGlyZWN0aXZlIGFsb25nIHdpdGggQGMgaXMgbm90IHVuZGVyc3Rv b2QgYnkgYXNzZW1ibGVyLgorICAgVGhlcmVmb3JlLCBtYWtlIGFsbCBUQVJH RVRfQVNNX1VOQUxJR05FRF94eF9PUCBzYW1lCisgICBhcyBUQVJHRVRfQVNN X0FMSUdORURfeHhfT1AuICAqLworI3VuZGVmIFRBUkdFVF9BU01fVU5BTElH TkVEX0hJX09QCisjZGVmaW5lIFRBUkdFVF9BU01fVU5BTElHTkVEX0hJX09Q IAlUQVJHRVRfQVNNX0FMSUdORURfSElfT1AKKyN1bmRlZiBUQVJHRVRfQVNN X1VOQUxJR05FRF9TSV9PUAorI2RlZmluZSBUQVJHRVRfQVNNX1VOQUxJR05F RF9TSV9PUCAJVEFSR0VUX0FTTV9BTElHTkVEX1NJX09QCisjdW5kZWYgVEFS R0VUX0FTTV9VTkFMSUdORURfRElfT1AKKyNkZWZpbmUgVEFSR0VUX0FTTV9V TkFMSUdORURfRElfT1AgCVRBUkdFVF9BU01fQUxJR05FRF9ESV9PUAorCisv KiBUYXJnZXQgaG9vayBpbXBsZW1lbnRhdGlvbnMuICAqLworCisvKiBJbXBs ZW1lbnRzIGhvb2sgVEFSR0VUX1JFVFVSTl9JTl9NRU1PUlkuICAqLworc3Rh dGljIGJvb2wKK2NyMTZfcmV0dXJuX2luX21lbW9yeSAoY29uc3RfdHJlZSB0 eXBlLCBjb25zdF90cmVlIGZudHlwZSBBVFRSSUJVVEVfVU5VU0VEKQorewor ICBpZiAoVFlQRV9NT0RFICh0eXBlKSA9PSBCTEttb2RlKQorICAgIHsKKyAg ICAgIEhPU1RfV0lERV9JTlQgc2l6ZSA9IGludF9zaXplX2luX2J5dGVzICh0 eXBlKTsKKyAgICAgIHJldHVybiAoKHNpemUgPT0gLTEpIHx8IChzaXplID4g OCkpOworICAgIH0KKyAgZWxzZQorICAgIHJldHVybiBmYWxzZTsKK30KKwor LyogSW1wbGVtZW50IFRBUkdFVF9DTEFTU19MSUtFTFlfU1BJTExFRF9QLiAg Ki8KK3N0YXRpYyBib29sCitjcjE2X2NsYXNzX2xpa2VseV9zcGlsbGVkX3Ag KHJlZ19jbGFzc190IHJjbGFzcykKK3sKKyAgaWYgKChyY2xhc3MpID09IFNI T1JUX1JFR1MgfHwgKHJjbGFzcykgPT0gRE9VQkxFX0JBU0VfUkVHUyAKKyAg ICAgICB8fCAocmNsYXNzKSA9PSBMT05HX1JFR1MgfHwgKHJjbGFzcykgPT0g R0VORVJBTF9SRUdTKQorICAgIHJldHVybiB0cnVlOworCisgIHJldHVybiBm YWxzZTsKK30KKworc3RhdGljIGludAorY3IxNl9yZXR1cm5fcG9wc19hcmdz ICh0cmVlIGZ1bmRlY2wgQVRUUklCVVRFX1VOVVNFRCwKKyAgICAgICAgICAg ICAgICAgICAgICB0cmVlIGZ1bnR5cGUgQVRUUklCVVRFX1VOVVNFRCwgCisJ CSAgICAgIGludCBzaXplIEFUVFJJQlVURV9VTlVTRUQpCit7CisgIHJldHVy biAwOworfQorCisvKiBSZXR1cm5zIHRydWUgaWYgZGF0YSBtb2RlbCBzZWxl Y3RlZCB2aWEgY29tbWFuZCBsaW5lIG9wdGlvbgorICAgaXMgc2FtZSBhcyBm dW5jdGlvbiBhcmd1bWVudC4gICovCitib29sCitjcjE2X2lzX2RhdGFfbW9k ZWwgKGVudW0gZGF0YV9tb2RlbF90eXBlIG1vZGVsKQoreworICByZXR1cm4g KG1vZGVsID09IGRhdGFfbW9kZWwpOworfQorCisvKiBQYXJzZSByZWxldmFu dCBvcHRpb25zIGFuZCBvdmVycmlkZS4gICovCitzdGF0aWMgdm9pZAorY3Ix Nl9vdmVycmlkZV9vcHRpb25zICh2b2lkKQoreworICAvKiBEaXNhYmxlIC1m ZGVsZXRlLW51bGwtcG9pbnRlci1jaGVja3Mgb3B0aW9uIGZvciBDUjE2IHRh cmdldC4KKyAgICAgUHJvZ3JhbXMgd2hpY2ggcmVseSBvbiBOVUxMIHBvaW50 ZXIgZGVyZWZlcmVuY2VzIF9ub3RfIGhhbHRpbmcgdGhlIAorICAgICBwcm9n cmFtIG1heSBub3Qgd29yayBwcm9wZXJseSB3aXRoIHRoaXMgb3B0aW9uLiBT byBkaXNhYmxlIHRoaXMgCisgICAgIG9wdGlvbi4gICovCisgIGZsYWdfZGVs ZXRlX251bGxfcG9pbnRlcl9jaGVja3MgPSAwOworCisgIC8qIElmIC1mcGlj IG9wdGlvbiwgZGF0YV9tb2RlbCA9PSBETV9GQVIuICAqLworICBpZiAoZmxh Z19waWMgPT0gTkVBUl9QSUMpCisgICAgeworICAgICAgZGF0YV9tb2RlbCA9 IERNX0ZBUjsKKyAgICB9CisKKyAgLyogVGhlIG9ubHkgb3B0aW9uIHdlIHdh bnQgdG8gZXhhbWluZSBpcyBkYXRhIG1vZGVsIG9wdGlvbi4gICovCisgIGlm IChjcjE2X2RhdGFfbW9kZWwpCisgICAgeworICAgICAgaWYgKHN0cmNtcCAo Y3IxNl9kYXRhX21vZGVsLCAibWVkaXVtIikgPT0gMCkKKwlkYXRhX21vZGVs ID0gRE1fREVGQVVMVDsKKyAgICAgIGVsc2UgaWYgKHN0cmNtcCAoY3IxNl9k YXRhX21vZGVsLCAibmVhciIpID09IDApCisJZGF0YV9tb2RlbCA9IERNX05F QVI7CisgICAgICBlbHNlIGlmIChzdHJjbXAgKGNyMTZfZGF0YV9tb2RlbCwg ImZhciIpID09IDApCisJeworCSAgaWYgKFRBUkdFVF9DUjE2Q1ApCisJICAg IGRhdGFfbW9kZWwgPSBETV9GQVI7CisJICBlbHNlCisJICAgIGVycm9yICgi ZGF0YS1tb2RlbD1mYXIgbm90IHZhbGlkIGZvciBjcjE2YyBhcmNoaXRlY3R1 cmUiKTsKKwl9CisgICAgICBlbHNlCisJZXJyb3IgKCJpbnZhbGlkIGRhdGEg bW9kZWwgb3B0aW9uIC1tZGF0YS1tb2RlbD0lcyIsIGNyMTZfZGF0YV9tb2Rl bCk7CisgICAgfQorICBlbHNlCisgICAgZGF0YV9tb2RlbCA9IERNX0RFRkFV TFQ7CisKKworfQorCisvKiBJbXBsZW1lbnRzIHRoZSBtYWNybyAgVEFSR0VU X0NPTkRJVElPTkFMX1JFR0lTVEVSX1VTQUdFLiAgKi8KK3N0YXRpYyB2b2lk CitjcjE2X2NvbmRpdGlvbmFsX3JlZ2lzdGVyX3VzYWdlICh2b2lkKQorewor ICBpZiAoZmxhZ19waWMpCisgICAgeworICAgICAgZml4ZWRfcmVnc1sxMl0g PSBjYWxsX3VzZWRfcmVnc1sxMl0gPSAxOworICAgIH0KK30KKworLyogU3Rh Y2sgbGF5b3V0IGFuZCBjYWxsaW5nIGNvbnZlbnRpb25zIHJvdXRpbmVzLiAg Ki8KKworLyogUmV0dXJuIG5vbnplcm8gaWYgdGhlIGN1cnJlbnQgZnVuY3Rp b24gYmVpbmcgY29tcGlsZWQgaXMgYW4gaW50ZXJydXB0CisgICBmdW5jdGlv biBhcyBzcGVjaWZpZWQgYnkgdGhlICJpbnRlcnJ1cHQiIGF0dHJpYnV0ZS4g ICovCitpbnQKK2NyMTZfaW50ZXJydXB0X2Z1bmN0aW9uX3AgKHZvaWQpCit7 CisgIHRyZWUgYXR0cmlidXRlczsKKworICBhdHRyaWJ1dGVzID0gVFlQRV9B VFRSSUJVVEVTIChUUkVFX1RZUEUgKGN1cnJlbnRfZnVuY3Rpb25fZGVjbCkp OworICByZXR1cm4gKGxvb2t1cF9hdHRyaWJ1dGUgKCJpbnRlcnJ1cHQiLCBh dHRyaWJ1dGVzKSAhPSBOVUxMX1RSRUUpOworfQorCisvKiBDb21wdXRlIHZh bHVlcyBmb3IgdGhlIGFycmF5IGN1cnJlbnRfZnJhbWVfaW5mby5zYXZlX3Jl Z3MgYW5kIHRoZSB2YXJpYWJsZSAKKyAgIGN1cnJlbnRfZnJhbWVfaW5mby5y ZWdfc2l6ZS4gVGhlIGluZGV4IG9mIGN1cnJlbnRfZnJhbWVfaW5mby5zYXZl X3JlZ3MgCisgICBpcyBudW1iZXJzIG9mIHJlZ2lzdGVyLCBlYWNoIHdpbGwg Z2V0IDEgaWYgd2UgbmVlZCB0byBzYXZlIGl0IGluIHRoZSAKKyAgIGN1cnJl bnQgZnVuY3Rpb24sIDAgaWYgbm90LiBjdXJyZW50X2ZyYW1lX2luZm8ucmVn X3NpemUgaXMgdGhlIHRvdGFsIHN1bSAKKyAgIG9mIHRoZSByZWdpc3RlcnMg YmVpbmcgc2F2ZWQuICAqLworc3RhdGljIHZvaWQKK2NyMTZfY29tcHV0ZV9z YXZlX3JlZ3MgKHZvaWQpCit7CisgIHVuc2lnbmVkIGludCByZWdubzsKKwor ICAvKiBJbml0aWFsaXplIGhlcmUgc28gaW4gY2FzZSB0aGUgZnVuY3Rpb24g aXMgbm8tcmV0dXJuIGl0IHdpbGwgYmUgLTEuICAqLworICBjdXJyZW50X2Zy YW1lX2luZm8ubGFzdF9yZWdfdG9fc2F2ZSA9IC0xOworCisgIC8qIEluaXRp YWxpemUgdGhlIG51bWJlciBvZiBieXRlcyB0byBiZSBzYXZlZC4gKi8KKyAg Y3VycmVudF9mcmFtZV9pbmZvLnJlZ19zaXplID0gMDsKKworICAvKiBObyBu ZWVkIHRvIHNhdmUgYW55IHJlZ2lzdGVycyBpZiB0aGUgZnVuY3Rpb24gbmV2 ZXIgcmV0dXJucy4gICovCisgIGlmIChGVU5DX0lTX05PUkVUVVJOX1AgKGN1 cnJlbnRfZnVuY3Rpb25fZGVjbCkgJiYgIU1VU1RfU0FWRV9SRUdTX1AgKCkp CisgICAgcmV0dXJuOworCisgIGZvciAocmVnbm8gPSAwOyByZWdubyA8IEZJ UlNUX1BTRVVET19SRUdJU1RFUjsgcmVnbm8rKykKKyAgICB7CisgICAgICBp ZiAoZml4ZWRfcmVnc1tyZWdub10pCisJeworCSAgY3VycmVudF9mcmFtZV9p bmZvLnNhdmVfcmVnc1tyZWdub10gPSAwOworCSAgY29udGludWU7CisJfQor CisgICAgICAvKiBJZiB0aGlzIHJlZyBpcyB1c2VkIGFuZCBub3QgY2FsbC11 c2VkIChleGNlcHQgUkEpLCBzYXZlIGl0LiAgKi8KKyAgICAgIGlmIChjcjE2 X2ludGVycnVwdF9mdW5jdGlvbl9wICgpKQorCXsKKwkgIGlmICghY3VycmVu dF9mdW5jdGlvbl9pc19sZWFmICYmIGNhbGxfdXNlZF9yZWdzW3JlZ25vXSkK KwkgICAgLyogVGhpcyBpcyBhIHZvbGF0aWxlIHJlZyBpbiBhIG5vbi1sZWFm IGludGVycnVwdCByb3V0aW5lIC0gc2F2ZSAKKwkgICAgICAgaXQgZm9yIHRo ZSBzYWtlIG9mIGl0cyBzb25zLiAgKi8KKwkgICAgY3VycmVudF9mcmFtZV9p bmZvLnNhdmVfcmVnc1tyZWdub10gPSAxOworCSAgZWxzZSBpZiAoZGZfcmVn c19ldmVyX2xpdmVfcCAocmVnbm8pKQorCSAgICAvKiBUaGlzIHJlZyBpcyB1 c2VkIC0gc2F2ZSBpdC4gICovCisJICAgIGN1cnJlbnRfZnJhbWVfaW5mby5z YXZlX3JlZ3NbcmVnbm9dID0gMTsKKwkgIGVsc2UKKwkgICAgLyogVGhpcyBy ZWcgaXMgbm90IHVzZWQsIGFuZCBpcyBub3QgYSB2b2xhdGlsZSAtIGRvbid0 IHNhdmUuICAqLworCSAgICBjdXJyZW50X2ZyYW1lX2luZm8uc2F2ZV9yZWdz W3JlZ25vXSA9IDA7CisJfQorICAgICAgZWxzZQorCXsKKwkgIC8qIElmIHRo aXMgcmVnIGlzIHVzZWQgYW5kIG5vdCBjYWxsLXVzZWQgKGV4Y2VwdCBSQSks IHNhdmUgaXQuICAqLworCSAgaWYgKGRmX3JlZ3NfZXZlcl9saXZlX3AgKHJl Z25vKQorCSAgICAgICYmICghY2FsbF91c2VkX3JlZ3NbcmVnbm9dIHx8IHJl Z25vID09IFJFVFVSTl9BRERSRVNTX1JFR05VTSkpCisJICAgIGN1cnJlbnRf ZnJhbWVfaW5mby5zYXZlX3JlZ3NbcmVnbm9dID0gMTsKKwkgIGVsc2UKKwkg ICAgY3VycmVudF9mcmFtZV9pbmZvLnNhdmVfcmVnc1tyZWdub10gPSAwOwor CX0KKyAgICB9CisKKyAgLyogU2F2ZSByZWdpc3RlcnMgc28gdGhlIGV4Y2Vw dGlvbiBoYW5kbGVyIGNhbiBtb2RpZnkgdGhlbS4gICovCisgIGlmIChjcnRs LT5jYWxsc19laF9yZXR1cm4pCisgICAgeworICAgICAgdW5zaWduZWQgaW50 IGk7CisKKyAgICAgIGZvciAoaSA9IDA7OyArK2kpCisJeworCSAgcmVnbm8g PSBFSF9SRVRVUk5fREFUQV9SRUdOTyAoaSk7CisJICBpZiAoSU5WQUxJRF9S RUdOVU0gPT0gcmVnbm8pCisJICAgIGJyZWFrOworCSAgY3VycmVudF9mcmFt ZV9pbmZvLnNhdmVfcmVnc1tyZWdub10gPSAxOworCX0KKyAgICB9CisKKyAg Zm9yIChyZWdubyA9IDA7IHJlZ25vIDwgRklSU1RfUFNFVURPX1JFR0lTVEVS OyByZWdubysrKQorICAgIGlmIChjdXJyZW50X2ZyYW1lX2luZm8uc2F2ZV9y ZWdzW3JlZ25vXSA9PSAxKQorICAgICAgeworCWN1cnJlbnRfZnJhbWVfaW5m by5sYXN0X3JlZ190b19zYXZlID0gcmVnbm87CisJaWYgKHJlZ25vID49IENS MTZfRklSU1RfRFdPUkRfUkVHSVNURVIpCisJICBjdXJyZW50X2ZyYW1lX2lu Zm8ucmVnX3NpemUgKz0gQ1IxNl9VTklUU19QRVJfRFdPUkQ7CisJZWxzZQor CSAgY3VycmVudF9mcmFtZV9pbmZvLnJlZ19zaXplICs9IFVOSVRTX1BFUl9X T1JEOworICAgICAgfQorfQorCisvKiBDb21wdXRlIHRoZSBzaXplIG9mIHRo ZSBsb2NhbCBhcmVhIGFuZCB0aGUgc2l6ZSB0byBiZSBhZGp1c3RlZCBieSB0 aGUKKyAgIHByb2xvZ3VlIGFuZCBlcGlsb2d1ZS4gICovCitzdGF0aWMgdm9p ZAorY3IxNl9jb21wdXRlX2ZyYW1lICh2b2lkKQoreworICAvKiBGb3IgYWxp Z25pbmcgdGhlIGxvY2FsIHZhcmlhYmxlcy4gICovCisgIGludCBzdGFja19h bGlnbm1lbnQgPSBTVEFDS19CT1VOREFSWSAvIEJJVFNfUEVSX1VOSVQ7Cisg IGludCBwYWRkaW5nX2xvY2FsczsKKworICAvKiBQYWRkaW5nIG5lZWRlZCBm b3IgZWFjaCBlbGVtZW50IG9mIHRoZSBmcmFtZS4gICovCisgIGN1cnJlbnRf ZnJhbWVfaW5mby52YXJfc2l6ZSA9IGdldF9mcmFtZV9zaXplICgpOworCisg IC8qIEFsaWduIHRvIHRoZSBzdGFjayBhbGlnbm1lbnQuICAqLworICBwYWRk aW5nX2xvY2FscyA9IGN1cnJlbnRfZnJhbWVfaW5mby52YXJfc2l6ZSAlIHN0 YWNrX2FsaWdubWVudDsKKyAgaWYgKHBhZGRpbmdfbG9jYWxzKQorICAgIHBh ZGRpbmdfbG9jYWxzID0gc3RhY2tfYWxpZ25tZW50IC0gcGFkZGluZ19sb2Nh bHM7CisKKyAgY3VycmVudF9mcmFtZV9pbmZvLnZhcl9zaXplICs9IHBhZGRp bmdfbG9jYWxzOworICBjdXJyZW50X2ZyYW1lX2luZm8udG90YWxfc2l6ZSA9 IGN1cnJlbnRfZnJhbWVfaW5mby52YXJfc2l6ZSAKKwkJCSAgICsgKEFDQ1VN VUxBVEVfT1VUR09JTkdfQVJHUworCQkJICAgID8gY3J0bC0+b3V0Z29pbmdf YXJnc19zaXplIDogMCk7Cit9CisKKy8qIEltcGxlbWVudHMgdGhlIG1hY3Jv IElOSVRJQUxfRUxJTUlOQVRJT05fT0ZGU0VULCByZXR1cm4gdGhlIE9GRlNF VC4gICovCitpbnQKK2NyMTZfaW5pdGlhbF9lbGltaW5hdGlvbl9vZmZzZXQg KGludCBmcm9tLCBpbnQgdG8pCit7CisgIC8qIENvbXB1dGUgdGhpcyBzaW5j ZSB3ZSBuZWVkIHRvIHVzZSBjdXJyZW50X2ZyYW1lX2luZm8ucmVnX3NpemUu ICAqLworICBjcjE2X2NvbXB1dGVfc2F2ZV9yZWdzICgpOworCisgIC8qIENv bXB1dGUgdGhpcyBzaW5jZSB3ZSBuZWVkIHRvIHVzZSBjdXJyZW50X2ZyYW1l X2luZm8udmFyX3NpemUuICAqLworICBjcjE2X2NvbXB1dGVfZnJhbWUgKCk7 CisKKyAgaWYgKCgoZnJvbSkgPT0gRlJBTUVfUE9JTlRFUl9SRUdOVU0pICYm ICgodG8pID09IFNUQUNLX1BPSU5URVJfUkVHTlVNKSkKKyAgICByZXR1cm4g KEFDQ1VNVUxBVEVfT1VUR09JTkdfQVJHUyA/IGNydGwtPm91dGdvaW5nX2Fy Z3Nfc2l6ZSA6IDApOworICBlbHNlIGlmICgoKGZyb20pID09IEFSR19QT0lO VEVSX1JFR05VTSkgJiYgKCh0bykgPT0gRlJBTUVfUE9JTlRFUl9SRUdOVU0p KQorICAgIHJldHVybiAoY3VycmVudF9mcmFtZV9pbmZvLnJlZ19zaXplICsg Y3VycmVudF9mcmFtZV9pbmZvLnZhcl9zaXplKTsKKyAgZWxzZSBpZiAoKChm cm9tKSA9PSBBUkdfUE9JTlRFUl9SRUdOVU0pICYmICgodG8pID09IFNUQUNL X1BPSU5URVJfUkVHTlVNKSkKKyAgICByZXR1cm4gKGN1cnJlbnRfZnJhbWVf aW5mby5yZWdfc2l6ZSArIGN1cnJlbnRfZnJhbWVfaW5mby52YXJfc2l6ZSAK KwkgICAgKyAoQUNDVU1VTEFURV9PVVRHT0lOR19BUkdTID8gY3J0bC0+b3V0 Z29pbmdfYXJnc19zaXplIDogMCkpOworICBlbHNlCisgICAgZ2NjX3VucmVh Y2hhYmxlICgpOworfQorCisvKiBSZWdpc3RlciBVc2FnZS4gICovCisKKy8q IFJldHVybiB0aGUgY2xhc3MgbnVtYmVyIG9mIHRoZSBzbWFsbGVzdCBjbGFz cyBjb250YWluaW5nIHJlZyBudW1iZXIgUkVHTk8uCisgICBUaGlzIGNvdWxk IGJlIGEgY29uZGl0aW9uYWwgZXhwcmVzc2lvbiBvciBjb3VsZCBpbmRleCBh biBhcnJheS4gICovCitlbnVtIHJlZ19jbGFzcworY3IxNl9yZWdub19yZWdf Y2xhc3MgKGludCByZWdubykKK3sKKyAgaWYgKChyZWdubyA+PSAwKSAmJiAo cmVnbm8gPCBDUjE2X0ZJUlNUX0RXT1JEX1JFR0lTVEVSKSkKKyAgICByZXR1 cm4gU0hPUlRfUkVHUzsKKworICBpZiAoKHJlZ25vID49IENSMTZfRklSU1Rf RFdPUkRfUkVHSVNURVIpICYmIChyZWdubyA8IEZJUlNUX1BTRVVET19SRUdJ U1RFUikpCisgICAgcmV0dXJuIExPTkdfUkVHUzsKKworICByZXR1cm4gTk9f UkVHUzsKK30KKworLyogUmV0dXJuIDEgaWYgaGFyZCByZWdpc3RlciBSRUdO TyBjYW4gaG9sZCBhIHZhbHVlIG9mIG1hY2hpbmUtbW9kZSBNT0RFLiAgKi8K K2ludAorY3IxNl9oYXJkX3JlZ25vX21vZGVfb2sgKGludCByZWdubywgZW51 bSBtYWNoaW5lX21vZGUgbW9kZSkKK3sKKyAgaWYgKChHRVRfTU9ERV9TSVpF IChtb2RlKSA+PSA0KSAmJiAocmVnbm8gPT0gMTEpKQorICAgICAgICByZXR1 cm4gMDsKKyAKKyAgaWYgKG1vZGUgPT0gREltb2RlIHx8IG1vZGUgPT0gREZt b2RlKQorICAgIHsKKyAgICAgIGlmICgocmVnbm8gPiA4KSB8fCAocmVnbm8g JiAxKSkKKwlyZXR1cm4gMDsKKyAgICAgIHJldHVybiAxOworICAgIH0KKwor ICBpZiAoKFRBUkdFVF9JTlQzMikKKyAgICAgICYmICgocmVnbm8gPj0gMTIp ICYmIChHRVRfTU9ERV9TSVpFIChtb2RlKSA8IDQgKSkpCisgICAgIHJldHVy biAwOworCisgIC8qIENDIGNhbiBvbmx5IGhvbGQgQ0Ntb2RlIHZhbHVlcy4g ICovCisgIGlmIChHRVRfTU9ERV9DTEFTUyAobW9kZSkgPT0gTU9ERV9DQykK KyAgICByZXR1cm4gMDsKKyAgcmV0dXJuIDE7Cit9CisKKy8qIFJldHVybnMg cmVnaXN0ZXIgbnVtYmVyIGZvciBmdW5jdGlvbiByZXR1cm4gdmFsdWUuKi8K K3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50CitjcjE2X3JldF9yZWdpc3Rl ciAodm9pZCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKKy8qIEltcGxlbWVudHMg aG9vayBUQVJHRVRfU1RSVUNUX1ZBTFVFX1JUWC4gICovCitzdGF0aWMgcnR4 CitjcjE2X3N0cnVjdF92YWx1ZV9ydHggKHRyZWUgZm50eXBlIEFUVFJJQlVU RV9VTlVTRUQsCisgICAgICAgICAgICAgICAgICAgICAgIGludCBpbmNvbWlu ZyBBVFRSSUJVVEVfVU5VU0VEKQoreworICByZXR1cm4gZ2VuX3J0eF9SRUcg KFBtb2RlLCBjcjE2X3JldF9yZWdpc3RlciAoKSk7Cit9CisKKy8qIFJldHVy bmluZyBmdW5jdGlvbiB2YWx1ZS4gICovCisKKy8qIFdvcmtlciBmdW5jdGlv biBmb3IgVEFSR0VUX0ZVTkNUSU9OX1ZBTFVFX1JFR05PX1AuICAqLworc3Rh dGljIGJvb2wKK2NyMTZfZnVuY3Rpb25fdmFsdWVfcmVnbm9fcCAoY29uc3Qg dW5zaWduZWQgaW50IHJlZ25vKQoreworICByZXR1cm4gKHJlZ25vID09IGNy MTZfcmV0X3JlZ2lzdGVyICgpKTsKK30KKworLyogQ3JlYXRlIGFuIFJUWCBy ZXByZXNlbnRpbmcgdGhlIHBsYWNlIHdoZXJlIGEKKyAgIGxpYnJhcnkgZnVu Y3Rpb24gcmV0dXJucyBhIHZhbHVlIG9mIG1vZGUgTU9ERS4gICovCitzdGF0 aWMgcnR4CitjcjE2X2xpYmNhbGxfdmFsdWUgKGVudW0gbWFjaGluZV9tb2Rl IG1vZGUsCisgICAgICAgICAgICAgICAgICAgY29uc3RfcnR4IGZ1bmMgQVRU UklCVVRFX1VOVVNFRCkKK3sKKyAgcmV0dXJuIGdlbl9ydHhfUkVHIChtb2Rl LCBjcjE2X3JldF9yZWdpc3RlciAoKSk7Cit9CisKKy8qIENyZWF0ZSBhbiBS VFggcmVwcmVzZW50aW5nIHRoZSBwbGFjZSB3aGVyZSBhCisgICBmdW5jdGlv biByZXR1cm5zIGEgdmFsdWUgb2YgZGF0YSB0eXBlIFZBTFRZUEUuICAqLwor c3RhdGljIHJ0eAorY3IxNl9mdW5jdGlvbl92YWx1ZSAoY29uc3RfdHJlZSB0 eXBlLAorICAgICAgICAgICAgICAgICAgICBjb25zdF90cmVlIGZuX2RlY2xf b3JfdHlwZSBBVFRSSUJVVEVfVU5VU0VELAorICAgICAgICAgICAgICAgICAg ICBib29sIG91dGdvaW5nIEFUVFJJQlVURV9VTlVTRUQpCit7CisgIHJldHVy biBnZW5fcnR4X1JFRyAoVFlQRV9NT0RFKHR5cGUpLCBjcjE2X3JldF9yZWdp c3RlciAoKSk7Cit9CisKKy8qIFBhc3NpbmcgZnVuY3Rpb24gYXJndW1lbnRz LiAgKi8KKworLyogSWYgZW5vdWdoIHBhcmFtIHJlZ3MgYXJlIGF2YWlsYWJs ZSBmb3IgcGFzc2luZyB0aGUgcGFyYW0gb2YgdHlwZSBUWVBFIHJldHVybgor ICAgdGhlIG51bWJlciBvZiByZWdpc3RlcnMgbmVlZGVkIGVsc2UgMC4gICov CitzdGF0aWMgaW50Citlbm91Z2hfcmVnc19mb3JfcGFyYW0gKENVTVVMQVRJ VkVfQVJHUyAqIGN1bSwgY29uc3RfdHJlZSB0eXBlLAorCQkgICAgICAgZW51 bSBtYWNoaW5lX21vZGUgbW9kZSkKK3sKKyAgaW50IHR5cGVfc2l6ZTsKKyAg aW50IHJlbWFpbmluZ19zaXplOworCisgIGlmIChtb2RlICE9IEJMS21vZGUp CisgICAgdHlwZV9zaXplID0gR0VUX01PREVfQklUU0laRSAobW9kZSk7Cisg IGVsc2UKKyAgICB0eXBlX3NpemUgPSBpbnRfc2l6ZV9pbl9ieXRlcyAodHlw ZSkgKiBCSVRTX1BFUl9VTklUOworCisgIHJlbWFpbmluZ19zaXplID0gQklU U19QRVJfV09SRCAqIChNQVhfUkVHX0ZPUl9QQVNTSU5HX0FSR1MKKwkJCQkg ICAgLSAoTUlOX1JFR19GT1JfUEFTU0lOR19BUkdTICsgY3VtLT5pbnRzKSAr CisJCQkJICAgIDEpOworCisgIC8qIEFueSB2YXJpYWJsZSB3aGljaCBpcyB0 b28gYmlnIHRvIHBhc3MgaW4gdHdvIHJlZ2lzdGVycywgd2lsbCBwYXNzIG9u CisgICAgIHN0YWNrLiAgKi8KKyAgaWYgKChyZW1haW5pbmdfc2l6ZSA+PSB0 eXBlX3NpemUpICYmICh0eXBlX3NpemUgPD0gMiAqIEJJVFNfUEVSX1dPUkQp KQorICAgIHJldHVybiAodHlwZV9zaXplICsgQklUU19QRVJfV09SRCAtIDEp IC8gQklUU19QRVJfV09SRDsKKworICByZXR1cm4gMDsKK30KKworLyogSW1w bGVtZW50cyB0aGUgbWFjcm8gRlVOQ1RJT05fQVJHIGRlZmluZWQgaW4gY3Ix Ni5oLiAgKi8KK3N0YXRpYyBydHgKK2NyMTZfZnVuY3Rpb25fYXJnIChDVU1V TEFUSVZFX0FSR1MgKiBjdW0sIGVudW0gbWFjaGluZV9tb2RlIG1vZGUsCisJ CSAgIGNvbnN0X3RyZWUgdHlwZSwgYm9vbCBuYW1lZCBBVFRSSUJVVEVfVU5V U0VEKQoreworICBjdW0tPmxhc3RfcGFybV9pbl9yZWcgPSAwOworCisgIC8q IGZ1bmN0aW9uX2FyZyAoKSBpcyBjYWxsZWQgd2l0aCB0aGlzIHR5cGUganVz dCBhZnRlciBhbGwgdGhlIGFyZ3MgaGF2ZSAKKyAgICAgaGFkIHRoZWlyIHJl Z2lzdGVycyBhc3NpZ25lZC4gVGhlIHJ0eCB0aGF0IGZ1bmN0aW9uX2FyZyBy ZXR1cm5zIGZyb20gCisgICAgIHRoaXMgdHlwZSBpcyBzdXBwb3NlZCB0byBw YXNzIHRvICdnZW5fY2FsbCcgYnV0IGN1cnJlbnRseSBpdCBpcyBub3QgCisg ICAgIGltcGxlbWVudGVkIChzZWUgbWFjcm8gR0VOX0NBTEwpLiAgKi8KKyAg aWYgKHR5cGUgPT0gdm9pZF90eXBlX25vZGUpCisgICAgcmV0dXJuIE5VTExf UlRYOworCisgIGlmICh0YXJnZXRtLmNhbGxzLm11c3RfcGFzc19pbl9zdGFj ayAobW9kZSwgdHlwZSkgfHwgKGN1bS0+aW50cyA8IDApKQorICAgIHJldHVy biBOVUxMX1JUWDsKKworICBpZiAobW9kZSA9PSBCTEttb2RlKQorICAgIHsK KyAgICAgIC8qIEVuYWJsZSBzdHJ1Y3R1cmVzIHRoYXQgbmVlZCBwYWRkaW5n IGJ5dGVzIGF0IHRoZSBlbmQgdG8gcGFzcyB0byBhCisgICAgICAgICBmdW5j dGlvbiBpbiByZWdpc3RlcnMuICAqLworICAgICAgaWYgKGVub3VnaF9yZWdz X2Zvcl9wYXJhbSAoY3VtLCB0eXBlLCBtb2RlKSAhPSAwKQorCXsKKwkgIGN1 bS0+bGFzdF9wYXJtX2luX3JlZyA9IDE7CisJICByZXR1cm4gZ2VuX3J0eF9S RUcgKG1vZGUsIE1JTl9SRUdfRk9SX1BBU1NJTkdfQVJHUyArIGN1bS0+aW50 cyk7CisJfQorICAgIH0KKworICBpZiAoKE1JTl9SRUdfRk9SX1BBU1NJTkdf QVJHUyArIGN1bS0+aW50cykgPiBNQVhfUkVHX0ZPUl9QQVNTSU5HX0FSR1Mp CisgICAgcmV0dXJuIE5VTExfUlRYOworICBlbHNlCisgICAgeworICAgICAg aWYgKGVub3VnaF9yZWdzX2Zvcl9wYXJhbSAoY3VtLCB0eXBlLCBtb2RlKSAh PSAwKQorCXsKKwkgIGN1bS0+bGFzdF9wYXJtX2luX3JlZyA9IDE7CisJICBy ZXR1cm4gZ2VuX3J0eF9SRUcgKG1vZGUsIE1JTl9SRUdfRk9SX1BBU1NJTkdf QVJHUyArIGN1bS0+aW50cyk7CisJfQorICAgIH0KKworICByZXR1cm4gTlVM TF9SVFg7Cit9CisKKy8qIEltcGxlbWVudHMgdGhlIG1hY3JvIElOSVRfQ1VN VUxBVElWRV9BUkdTIGRlZmluZWQgaW4gY3IxNi5oLiAgKi8KK3ZvaWQKK2Ny MTZfaW5pdF9jdW11bGF0aXZlX2FyZ3MgKENVTVVMQVRJVkVfQVJHUyAqIGN1 bSwgdHJlZSBmbnR5cGUsCisJCQkgICBydHggbGliZnVuYyBBVFRSSUJVVEVf VU5VU0VEKQoreworICB0cmVlIHBhcmFtLCBuZXh0X3BhcmFtOworCisgIGN1 bS0+aW50cyA9IDA7CisKKyAgLyogRGV0ZXJtaW5lIGlmIHRoaXMgZnVuY3Rp b24gaGFzIHZhcmlhYmxlIGFyZ3VtZW50cy4gIFRoaXMgaXMgaW5kaWNhdGVk IGJ5CisgICAgIHRoZSBsYXN0IGFyZ3VtZW50IGJlaW5nICd2b2lkX3R5cGVf bW9kZScgaWYgdGhlcmUgYXJlIG5vIHZhcmlhYmxlCisgICAgIGFyZ3VtZW50 cy4gIENoYW5nZSBoZXJlIGZvciBhIGRpZmZlcmVudCB2YXJhcmcuICAqLwor ICBmb3IgKHBhcmFtID0gKGZudHlwZSkgPyBUWVBFX0FSR19UWVBFUyAoZm50 eXBlKSA6IDA7CisgICAgICAgcGFyYW0gIT0gKHRyZWUpIDA7IHBhcmFtID0g bmV4dF9wYXJhbSkKKyAgICB7CisgICAgICBuZXh0X3BhcmFtID0gVFJFRV9D SEFJTiAocGFyYW0pOworICAgICAgaWYgKChuZXh0X3BhcmFtID09ICh0cmVl KSAwKSAmJiAoVFJFRV9WQUxVRSAocGFyYW0pICE9IHZvaWRfdHlwZV9ub2Rl KSkKKwl7CisJICBjdW0tPmludHMgPSAtMTsKKwkgIHJldHVybjsKKwl9Cisg ICAgfQorfQorCisvKiBJbXBsZW1lbnRzIHRoZSBtYWNybyBGVU5DVElPTl9B UkdfQURWQU5DRSBkZWZpbmVkIGluIGNyMTYuaC4gICovCitzdGF0aWMgdm9p ZAorY3IxNl9mdW5jdGlvbl9hcmdfYWR2YW5jZSAoQ1VNVUxBVElWRV9BUkdT ICogY3VtLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLAorCQkJICAgY29uc3Rf dHJlZSB0eXBlLCBib29sIG5hbWVkIEFUVFJJQlVURV9VTlVTRUQpCit7Cisg IC8qIGwgaG9sZHMgdGhlIG51bWJlciBvZiByZWdpc3RlcnMgcmVxdWlyZWQu ICAqLworICBpbnQgbCA9IEdFVF9NT0RFX0JJVFNJWkUgKG1vZGUpIC8gQklU U19QRVJfV09SRDsKKworICAvKiBJZiB0aGUgcGFyYW1ldGVyIGlzbid0IHBh c3NlZCBvbiBhIHJlZ2lzdGVyIGRvbid0IGFkdmFuY2UgY3VtLiAgKi8KKyAg aWYgKCFjdW0tPmxhc3RfcGFybV9pbl9yZWcpCisgICAgcmV0dXJuOworCisg IGlmICh0YXJnZXRtLmNhbGxzLm11c3RfcGFzc19pbl9zdGFjayAobW9kZSwg dHlwZSkgfHwgKGN1bS0+aW50cyA8IDApKQorICAgIHJldHVybjsKKworICBp ZiAoKG1vZGUgPT0gU0ltb2RlKSB8fCAobW9kZSA9PSBISW1vZGUpCisgICAg ICB8fCAobW9kZSA9PSBRSW1vZGUpIHx8IChtb2RlID09IERJbW9kZSkpCisg ICAgeworICAgICAgaWYgKGwgPD0gMSkKKwljdW0tPmludHMgKz0gMTsKKyAg ICAgIGVsc2UKKwljdW0tPmludHMgKz0gbDsKKyAgICB9CisgIGVsc2UgaWYg KChtb2RlID09IFNGbW9kZSkgfHwgKG1vZGUgPT0gREZtb2RlKSkKKyAgICBj dW0tPmludHMgKz0gbDsKKyAgZWxzZSBpZiAoKG1vZGUpID09IEJMS21vZGUp CisgICAgeworICAgICAgaWYgKChsID0gZW5vdWdoX3JlZ3NfZm9yX3BhcmFt IChjdW0sIHR5cGUsIG1vZGUpKSAhPSAwKQorCWN1bS0+aW50cyArPSBsOwor ICAgIH0KKyAgcmV0dXJuOworfQorCisvKiBJbXBsZW1lbnRzIHRoZSBtYWNy byBGVU5DVElPTl9BUkdfUkVHTk9fUCBkZWZpbmVkIGluIGNyMTYuaC4KKyAg IFJldHVybiBub256ZXJvIGlmIE4gaXMgYSByZWdpc3RlciB1c2VkIGZvciBw YXNzaW5nIHBhcmFtZXRlcnMuICAqLworaW50CitjcjE2X2Z1bmN0aW9uX2Fy Z19yZWdub19wIChpbnQgbikKK3sKKyAgcmV0dXJuICgobiA8PSBNQVhfUkVH X0ZPUl9QQVNTSU5HX0FSR1MpICYmIChuID49IE1JTl9SRUdfRk9SX1BBU1NJ TkdfQVJHUykpOworfQorCisvKiBBZGRyZXNzaW5nIG1vZGVzLiAKKyAgIEZv bGxvd2luZyBzZXQgb2YgZnVuY3Rpb24gaW1wbGVtZW50IHRoZSBtYWNybyBH T19JRl9MRUdJVElNQVRFX0FERFJFU1MKKyAgIGRlZmluZWQgaW4gY3IxNi5o LiAgKi8KKworLyogSGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIGlmIGlzIGEg dmFsaWQgYmFzZSByZWdpc3RlciB0aGF0IGNhbgorICAgaG9sZCBhZGRyZXNz LiAgKi8KK3N0YXRpYyBpbnQKK2NyMTZfYWRkcl9yZWdfcCAocnR4IGFkZHJf cmVnKQoreworICBydHggcmVnOworCisgIGlmIChSRUdfUCAoYWRkcl9yZWcp KQorICAgIHJlZyA9IGFkZHJfcmVnOworICBlbHNlIGlmICgoR0VUX0NPREUg KGFkZHJfcmVnKSA9PSBTVUJSRUcpCisJICAgJiYgUkVHX1AgKFNVQlJFR19S RUcgKGFkZHJfcmVnKSkKKwkgICAmJiAoR0VUX01PREVfU0laRSAoR0VUX01P REUgKFNVQlJFR19SRUcgKGFkZHJfcmVnKSkpCisJICAgICAgIDw9IFVOSVRT X1BFUl9XT1JEKSkKKyAgICByZWcgPSBTVUJSRUdfUkVHIChhZGRyX3JlZyk7 CisgIGVsc2UKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgaWYgKEdFVF9NT0RF IChyZWcpICE9IFBtb2RlKQorICAgIHJldHVybiBGQUxTRTsKKworICByZXR1 cm4gVFJVRTsKK30KKworLyogSGVscGVyIGZ1bmN0aW9uczogQ3JlYXRlZCBz cGVjaWZpY2FsbHkgZm9yIGRlY29tcG9zaW5nIG9wZXJhbmQgb2YgQ09OU1QK KyAgIFJlY3Vyc2l2ZWx5IGxvb2sgaW50byBleHByZXNzaW9uIHggZm9yIGNv ZGUgb3IgZGF0YSBzeW1ib2wuCisgICBUaGUgZnVuY3Rpb24gZXhwZWN0cyB0 aGUgZXhwcmVzc2lvbiB0byBjb250YWluIGNvbWJpbmF0aW9uIG9mIAorICAg U1lNQk9MX1JFRiwgQ09OU1RfSU5ULCAoUExVUyBvciBNSU5VUykKKyAgIExB QkVMX1JFRiwgQ09OU1RfSU5ULCAoUExVUyBvciBNSU5VUykKKyAgIFNZTUJP TF9SRUYKKyAgIExBQkVMX1JFRgorICAgQWxsIG90aGVyIGNvbWJpbmF0aW9u cyB3aWxsIHJlc3VsdCBpbiBjb2RlID0gLTEgYW5kIGRhdGEgPSBJTExFR0FM X0RNCisgICBjb2RlIGRhdGEKKyAgIC0xICAgSUxMRUdBTF9ETSAgIFRoZSBl eHByZXNzaW9uIGRpZCBub3QgY29udGFpbiBTWU1CT0xfUkVGIG9yIExBQkVM X1JFRgorICAgIDAgICBETV9GQVIgICAgICAgU1lNQk9MX1JFRiB3YXMgZm91 bmQgYW5kIGl0IHdhcyBmYXIgZGF0YSByZWZlcmVuY2UuIAorICAgIDAgICBE TV9ERUZBVUxUICAgU1lNQk9MX1JFRiB3YXMgZm91bmQgYW5kIGl0IHdhcyBt ZWRpdW0gZGF0YSByZWZlcmVuY2UuIAorICAgIDEgICBJTExFR0FMX0RNICAg TEFCRUxfUkVGIHdhcyBmb3VuZC4gCisgICAgMiAgIElMTEVHQUxfRE0gICBT WU1CT0xfUkVGIHdhcyBmb3VuZCBhbmQgaXQgd2FzIGZ1bmN0aW9uIHJlZmVy ZW5jZS4gICovCit2b2lkCitjcjE2X2RlY29tcG9zZV9jb25zdCAocnR4IHgs IGludCAqY29kZSwgZW51bSBkYXRhX21vZGVsX3R5cGUgKmRhdGEsCisJCSAg ICAgIGJvb2wgdHJlYXRfYXNfY29uc3QpCit7CisgICpjb2RlID0gLTE7Cisg ICpkYXRhID0gSUxMRUdBTF9ETTsKKyAgc3dpdGNoIChHRVRfQ09ERSAoeCkp CisgICAgeworICAgIGNhc2UgU1lNQk9MX1JFRjoKKyAgICAgICpjb2RlID0g U1lNQk9MX1JFRl9GVU5DVElPTl9QICh4KSA/IDIgOiAwOworICAgICAgLyog MiBpbmRpY2F0ZXMgZnVuYyBzeW0uICAqLworICAgICAgaWYgKCpjb2RlID09 IDApCisJeworCSAgaWYgKENSMTZfVEFSR0VUX0RBVEFfTkVBUikKKwkgICAg KmRhdGEgPSBETV9ERUZBVUxUOworCSAgZWxzZSBpZiAoQ1IxNl9UQVJHRVRf REFUQV9NRURJVU0pCisJICAgICpkYXRhID0gRE1fRkFSOworCSAgZWxzZSBp ZiAoQ1IxNl9UQVJHRVRfREFUQV9GQVIpCisJICAgIHsKKwkgICAgICBpZiAo dHJlYXRfYXNfY29uc3QpCisJCS8qIFRoaXMgd2lsbCBiZSB1c2VkIG9ubHkg Zm9yIHByaW50aW5nIAorCQkgICB0aGUgcXVhbGlmaWVyLiBUaGlzIGNhbGwg aXMgKG1heSBiZSkKKwkJICAgbWFkZSBieSBjcjE2X3ByaW50X29wZXJhbmRf YWRkcmVzcy4gICovCisJCSpkYXRhID0gRE1fRkFSOworCSAgICAgIGVsc2UK KwkJLyogVGhpcyBjYWxsIGlzIChtYXkgYmUpIG1hZGUgYnkgCisJCSAgIGNy MTZfbGVnaXRpbWF0ZV9hZGRyZXNzX3AuICAqLworCQkqZGF0YSA9IElMTEVH QUxfRE07CisJICAgIH0KKwl9CisgICAgICByZXR1cm47CisKKyAgICBjYXNl IExBQkVMX1JFRjoKKyAgICAgIC8qIDEgLSBpbmRpY2F0ZXMgbm9uLWZ1bmN0 aW9uIHN5bWJvbC4gICovCisgICAgICAqY29kZSA9IDE7CisgICAgICByZXR1 cm47CisKKyAgICBjYXNlIFBMVVM6CisgICAgY2FzZSBNSU5VUzoKKyAgICAg IC8qIExvb2sgaW50byB0aGUgdHJlZSBub2Rlcy4gICovCisgICAgICBpZiAo R0VUX0NPREUgKFhFWFAgKHgsIDApKSA9PSBDT05TVF9JTlQpCisJY3IxNl9k ZWNvbXBvc2VfY29uc3QgKFhFWFAgKHgsIDEpLCBjb2RlLCBkYXRhLCB0cmVh dF9hc19jb25zdCk7CisgICAgICBlbHNlIGlmIChHRVRfQ09ERSAoWEVYUCAo eCwgMSkpID09IENPTlNUX0lOVCkKKwljcjE2X2RlY29tcG9zZV9jb25zdCAo WEVYUCAoeCwgMCksIGNvZGUsIGRhdGEsIHRyZWF0X2FzX2NvbnN0KTsKKyAg ICAgIHJldHVybjsKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuOworICAg IH0KK30KKworLyogRGVjb21wb3NlIEFkZHJlc3MKKyAgIFRoaXMgZnVuY3Rp b24gZGVjb21wb3NlcyB0aGUgYWRkcmVzcyByZXR1cm5zIHRoZSB0eXBlIG9m IGFkZHJlc3MKKyAgIGFzIGRlZmluZWQgaW4gZW51bSBjcjE2X2FkZHJ0eXBl LiAgSXQgYWxzbyBmaWxscyB0aGUgcGFyYW1ldGVyICpvdXQuCisgICBUaGUg ZGVjb21wb3NlZCBhZGRyZXNzIGNhbiBiZSB1c2VkIGZvciB0d28gcHVycG9z ZXMuICBPbmUgdG8gCisgICBjaGVjayBpZiB0aGUgYWRkcmVzcyBpcyB2YWxp ZCBhbmQgc2Vjb25kIHRvIHByaW50IHRoZSBhZGRyZXNzCisgICBvcGVyYW5k LgorCisgICBGb2xsb3dpbmcgdGFibGVzIGxpc3QgdmFsaWQgYWRkcmVzcyBz dXBwb3J0ZWQgaW4gQ1IxNkMvQysgYXJjaGl0ZWN0dXJlcy4KKyAgIExlZ2Vu ZDogCisgICBhTiA6IEFic291bHRlIGFkZHJlc3MgTi1iaXQgYWRkcmVzcwor ICAgUiAgOiBPbmUgMTYtYml0IHJlZ2lzdGVyCisgICBSUCA6IENvbnNlY3V0 aXZlIHR3byAxNi1iaXQgcmVnaXN0ZXJzIG9yIG9uZSAzMi1iaXQgcmVnaXN0 ZXIKKyAgIEkgIDogT25lIDMyLWJpdCByZWdpc3RlcgorICAgZGlzcE4gOiBT aWduZWQgZGlzcGxhY2VtZW50IG9mIE4tYml0cworCisgICAtLS0tQ29kZSBh ZGRyZXNzZXMtLS0tCisgICBCcmFuY2ggb3BlcmFuZHM6CisgICBkaXNwOSAg ICAgICAgOiBDUjE2X0FCU09MVVRFICAgICAgIChkaXNwKQorICAgZGlzcDE3 ICAgICAgIDogQ1IxNl9BQlNPTFVURSAgICAgICAoZGlzcCkKKyAgIGRpc3Ay NSAgICAgICA6IENSMTZfQUJTT0xVVEUgICAgICAgKGRpc3ApCisgICBSUCAr IGRpc3AyNSAgOiBDUjE2X1JFR1BfUkVMICAgICAgIChiYXNlLCBkaXNwKQor CisgICBKdW1wIG9wZXJhbmRzOgorICAgUlAgICAgICAgICAgIDogQ1IxNl9S RUdQX1JFTCAgICAgICAoYmFzZSwgZGlzcD0wKQorICAgYTI0ICAgICAgICAg IDogQ1IxNl9BQlNPTFVURSAgICAgICAoZGlzcCkKKworICAgLS0tLURhdGEg YWRkcmVzc2VzLS0tLQorICAgYTIwICAgICAgICAgIDogQ1IxNl9BQlNPTFVU RSAgICAgICAoZGlzcCkgICAgICAgICAgICAgICAgbmVhciAoMU0pCisgICBh MjQgICAgICAgICAgOiBDUjE2X0FCU09MVVRFICAgICAgIChkaXNwKSAgICAg ICAgICAgICAgICBtZWRpdW0gICgxNk0pCisgICBSICArIGQyMCAgICAgOiBD UjE2X1JFR19SRUwgICAgICAgIChiYXNlLCAgZGlzcCkgICAgICAgICBuZWFy ICgxTSs2NEspCisgICBSUCArIGQ0ICAgICAgOiBDUjE2X1JFR1BfUkVMICAg ICAgIChiYXNlLCAgZGlzcCkgICAgICAgICBmYXIgICg0RykKKyAgIFJQICsg ZDE2ICAgICA6IENSMTZfUkVHUF9SRUwgICAgICAgKGJhc2UsICBkaXNwKSAg ICAgICAgIGZhciAgKDRHKQorICAgUlAgKyBkMjAgICAgIDogQ1IxNl9SRUdQ X1JFTCAgICAgICAoYmFzZSwgIGRpc3ApICAgICAgICAgZmFyICAoNEcpCisg ICBJICAgICAgICAgICAgOiAqKiogVmFsaWQgYnV0IHBvcnQgZG9lcyBub3Qg c3VwcG9ydCB0aGlzCisgICBJICArIGEyMCAgICAgOiAqKiogVmFsaWQgYnV0 IHBvcnQgZG9lcyBub3Qgc3VwcG9ydCB0aGlzCisgICBJICArIFJQICsgZDE0 OiBDUjE2X0lOREVYX1JFR1BfUkVMIChiYXNlLCAgaW5kZXgsIGRpc3ApICBm YXIgICg0RykKKyAgIEkgICsgUlAgKyBkMjA6IENSMTZfSU5ERVhfUkVHUF9S RUwgKGJhc2UsICBpbmRleCwgZGlzcCkgIGZhciAgKDRHKQorCisgICBEZWNv bXBvc2luZyBEYXRhIG1vZGVsIGluIGNhc2Ugb2YgYWJzb2x1dGUgYWRkcmVz cy4KKworICAgVGFyZ2V0IE9wdGlvbiAgICAgICAgICAgICBBZGRyZXNzIHR5 cGUgUmVzdWx0YW50IERhdGEgcmVmIHR5cGUKKyAgIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0gICAgLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgICBDUjE2X1RBUkdFVF9NT0RFTF9ORUFSICAgIEFCUzIwICAgICAg ICBETV9ERUZBVUxUCisgICBDUjE2X1RBUkdFVF9NT0RFTF9ORUFSICAgIElN TTIwICAgICAgICBETV9ERUZBVUxUCisgICBDUjE2X1RBUkdFVF9NT0RFTF9O RUFSICAgIEFCUzI0ICAgICAgICBJbnZhbGlkCisgICBDUjE2X1RBUkdFVF9N T0RFTF9ORUFSICAgIElNTTMyICAgICAgICBJbnZhbGlkCisKKyAgIENSMTZf VEFSR0VUX01PREVMX01FRElVTSAgQUJTMjAgICAgICAgIERNX0RFRkFVTFQK KyAgIENSMTZfVEFSR0VUX01PREVMX01FRElVTSAgSU1NMjAgICAgICAgIERN X0RFRkFVTFQKKyAgIENSMTZfVEFSR0VUX01PREVMX01FRElVTSAgQUJTMjQg ICAgICAgIERNX0ZBUgorICAgQ1IxNl9UQVJHRVRfTU9ERUxfTUVESVVNICBJ TU0zMiAgICAgICAgSW52YWxpZAorCisgICBDUjE2X1RBUkdFVF9NT0RFTF9G QVIgICAgIEFCUzIwICAgICAgICBETV9ERUZBVUxUCisgICBDUjE2X1RBUkdF VF9NT0RFTF9GQVIgICAgIElNTTIwICAgICAgICBETV9ERUZBVUxUCisgICBD UjE2X1RBUkdFVF9NT0RFTF9GQVIgICAgIEFCUzI0ICAgICAgICBETV9GQVIK KyAgIENSMTZfVEFSR0VUX01PREVMX0ZBUiAgICAgSU1NMzIgICAgICAgIERN X0ZBUi4gICovCitlbnVtIGNyMTZfYWRkcnR5cGUKK2NyMTZfZGVjb21wb3Nl X2FkZHJlc3MgKHJ0eCBhZGRyLCBzdHJ1Y3QgY3IxNl9hZGRyZXNzICpvdXQs CisJCQlib29sIGRlYnVnX3ByaW50LCBib29sIHRyZWF0X2FzX2NvbnN0KQor eworICBydHggYmFzZSA9IE5VTExfUlRYLCBkaXNwID0gTlVMTF9SVFgsIGlu ZGV4ID0gTlVMTF9SVFg7CisgIGVudW0gZGF0YV9tb2RlbF90eXBlIGRhdGEg PSBJTExFR0FMX0RNOworICBpbnQgY29kZSA9IC0xOworICBlbnVtIGNyMTZf YWRkcnR5cGUgcmV0dmFsID0gQ1IxNl9JTlZBTElEOworCisgIHN3aXRjaCAo R0VUX0NPREUgKGFkZHIpKQorICAgIHsKKyAgICBjYXNlIENPTlNUX0lOVDoK KyAgICAgIC8qIEFic29sdXRlIGFkZHJlc3MgKGtub3duIGF0IGNvbXBpbGUg dGltZSkuICAqLworICAgICAgY29kZSA9IDA7CisgICAgICBpZiAoZGVidWdf cHJpbnQpCisJZnByaW50ZiAoc3RkZXJyLCAiXG5jb2RlOiVkIiwgY29kZSk7 CisgICAgICBkaXNwID0gYWRkcjsKKworICAgICAgaWYgKGRlYnVnX3ByaW50 KQorCXsKKwkgIGZwcmludGYgKHN0ZGVyciwgIlxuZGlzcDoiKTsKKwkgIGRl YnVnX3J0eCAoZGlzcCk7CisJfQorCisgICAgICBpZiAoVU5TSUdORURfSU5U X0ZJVFNfTl9CSVRTIChJTlRWQUwgKGRpc3ApLCAyMCkpCisJeworCSAgZGF0 YSA9IERNX0RFRkFVTFQ7CisJICBpZiAoZGVidWdfcHJpbnQpCisJICAgIGZw cmludGYgKHN0ZGVyciwgIlxuZGF0YTolZCIsIGRhdGEpOworCSAgcmV0dmFs ID0gQ1IxNl9BQlNPTFVURTsKKwl9CisgICAgICBlbHNlIGlmIChVTlNJR05F RF9JTlRfRklUU19OX0JJVFMgKElOVFZBTCAoZGlzcCksIDI0KSkKKwl7CisJ ICBpZiAoIUNSMTZfVEFSR0VUX0RBVEFfTkVBUikKKwkgICAgeworCSAgICAg IGRhdGEgPSBETV9GQVI7CisJICAgICAgaWYgKGRlYnVnX3ByaW50KQorCQlm cHJpbnRmIChzdGRlcnIsICJcbmRhdGE6JWQiLCBkYXRhKTsKKwkgICAgICBy ZXR2YWwgPSBDUjE2X0FCU09MVVRFOworCSAgICB9CisJICBlbHNlCisJICAg IHJldHVybiBDUjE2X0lOVkFMSUQ7CS8qIEFCUzI0IGlzIG5vdCBzdXBwb3J0 IGluIE5FQVIgbW9kZWwuICAqLworCX0KKyAgICAgIGVsc2UKKwlyZXR1cm4g Q1IxNl9JTlZBTElEOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIENPTlNU OgorICAgICAgLyogQSBDT05TVCBpcyBhbiBleHByZXNzaW9uIG9mIFBMVVMg b3IgTUlOVVMgd2l0aCAKKyAgICAgICAgIENPTlNUX0lOVCwgU1lNQk9MX1JF RiBvciBMQUJFTF9SRUYuIFRoaXMgaXMgdGhlCisgICAgICAgICByZXN1bHQg b2YgYXNzZW1ibHktdGltZSBhcml0aG1ldGljIGNvbXB1dGF0aW9uLiAgKi8K KyAgICAgIHJldHZhbCA9IENSMTZfQUJTT0xVVEU7CisgICAgICBkaXNwID0g YWRkcjsKKyAgICAgIC8qIENhbGwgdGhlIGhlbHBlciBmdW5jdGlvbiB0byBj aGVjayB0aGUgdmFsaWRpdHkuICAqLworICAgICAgY3IxNl9kZWNvbXBvc2Vf Y29uc3QgKFhFWFAgKGFkZHIsIDApLCAmY29kZSwgJmRhdGEsIHRyZWF0X2Fz X2NvbnN0KTsKKyAgICAgIGlmICgoY29kZSA9PSAwKSAmJiAoZGF0YSA9PSBJ TExFR0FMX0RNKSkKKwkvKiBDT05TVCBpcyBub3QgdmFsaWQgY29kZSBvciBk YXRhIGFkZHJlc3MuICAqLworCXJldHVybiBDUjE2X0lOVkFMSUQ7CisgICAg ICBpZiAoZGVidWdfcHJpbnQpCisJeworCSAgZnByaW50ZiAoc3RkZXJyLCAi XG5kaXNwOiIpOworCSAgZGVidWdfcnR4IChkaXNwKTsKKwkgIGZwcmludGYg KHN0ZGVyciwgIlxuY29kZTolZCIsIGNvZGUpOworCSAgZnByaW50ZiAoc3Rk ZXJyLCAiXG5kYXRhOiVkIiwgZGF0YSk7CisJfQorICAgICAgYnJlYWs7CisK KyAgICBjYXNlIExBQkVMX1JFRjoKKyAgICAgIHJldHZhbCA9IENSMTZfQUJT T0xVVEU7CisgICAgICBkaXNwID0gYWRkcjsKKyAgICAgIC8qIDEgLSBpbmRp Y2F0ZXMgbm9uLWZ1bmN0aW9uIHN5bWJvbC4gICovCisgICAgICBjb2RlID0g MTsKKyAgICAgIGlmIChkZWJ1Z19wcmludCkKKwl7CisJICBmcHJpbnRmIChz dGRlcnIsICJcbmRpc3A6Iik7CisJICBkZWJ1Z19ydHggKGRpc3ApOworCSAg ZnByaW50ZiAoc3RkZXJyLCAiXG5jb2RlOiVkIiwgY29kZSk7CisJfQorICAg ICAgYnJlYWs7CisKKyAgICBjYXNlIFNZTUJPTF9SRUY6CisgICAgICAvKiBB YnNvbHV0ZSBhZGRyZXNzIChrbm93biBhdCBsaW5rIHRpbWUpLiAgKi8KKyAg ICAgIHJldHZhbCA9IENSMTZfQUJTT0xVVEU7CisgICAgICBkaXNwID0gYWRk cjsKKyAgICAgIC8qIFRoaXMgaXMgYSBjb2RlIGFkZHJlc3MgaWYgc3ltYm9s X3JlZiBpcyBhIGZ1bmN0aW9uLiAgKi8KKyAgICAgIC8qIDIgaW5kaWNhdGVz IGZ1bmMgc3ltLiAgKi8KKyAgICAgIGNvZGUgPSBTWU1CT0xfUkVGX0ZVTkNU SU9OX1AgKGFkZHIpID8gMiA6IDA7CisgICAgICBpZiAoZGVidWdfcHJpbnQp CisJeworCSAgZnByaW50ZiAoc3RkZXJyLCAiXG5kaXNwOiIpOworCSAgZGVi dWdfcnR4IChkaXNwKTsKKwkgIGZwcmludGYgKHN0ZGVyciwgIlxuY29kZTol ZCIsIGNvZGUpOworCX0KKyAgICAgIC8qIElmIG5vdCBmdW5jdGlvbiByZWYg dGhlbiBjaGVjayBpZiB2YWxpZCBkYXRhIHJlZi4gICovCisgICAgICBpZiAo Y29kZSA9PSAwKQorCXsKKwkgIGlmIChDUjE2X1RBUkdFVF9EQVRBX05FQVIp CisJICAgIGRhdGEgPSBETV9ERUZBVUxUOworCSAgZWxzZSBpZiAoQ1IxNl9U QVJHRVRfREFUQV9NRURJVU0pCisJICAgIGRhdGEgPSBETV9GQVI7CisJICBl bHNlIGlmIChDUjE2X1RBUkdFVF9EQVRBX0ZBUikKKwkgICAgeworCSAgICAg IGlmICh0cmVhdF9hc19jb25zdCkKKwkJLyogVGhpcyB3aWxsIGJlIHVzZWQg b25seSBmb3IgcHJpbnRpbmcgdGhlIAorCQkgICBxdWFsaWZpZXIuIFRoaXMg Y2FsbCBpcyAobWF5IGJlKSBtYWRlCisJCSAgIGJ5IGNyMTZfcHJpbnRfb3Bl cmFuZF9hZGRyZXNzLiAgKi8KKwkJZGF0YSA9IERNX0ZBUjsKKwkgICAgICBl bHNlCisJCS8qIFRoaXMgY2FsbCBpcyAobWF5IGJlKSBtYWRlIGJ5IAorCQkg ICBjcjE2X2xlZ2l0aW1hdGVfYWRkcmVzc19wLiAgKi8KKwkJcmV0dXJuIENS MTZfSU5WQUxJRDsKKwkgICAgfQorCSAgZWxzZQorCSAgICBkYXRhID0gRE1f REVGQVVMVDsKKwl9CisgICAgICBpZiAoZGVidWdfcHJpbnQpCisJZnByaW50 ZiAoc3RkZXJyLCAiXG5kYXRhOiVkIiwgZGF0YSk7CisgICAgICBicmVhazsK KworICAgIGNhc2UgUkVHOgorICAgIGNhc2UgU1VCUkVHOgorICAgICAgLyog UmVnaXN0ZXIgcmVsYXRpdmUgYWRkcmVzcy4gICovCisgICAgICAvKiBBc3N1 bWUgUkVHIGZpdHMgaW4gYSBzaW5nbGUgcmVnaXN0ZXIuICAqLworICAgICAg cmV0dmFsID0gQ1IxNl9SRUdfUkVMOworICAgICAgaWYgKEdFVF9NT0RFX0JJ VFNJWkUgKEdFVF9NT0RFIChhZGRyKSkgPiBCSVRTX1BFUl9XT1JEKQorCWlm ICghTE9OR19SRUdfUCAoUkVHTk8gKGFkZHIpKSkKKwkgIC8qIFJFRyB3aWxs IHJlc3VsdCBpbiByZWcgcGFpci4gICovCisJICByZXR2YWwgPSBDUjE2X1JF R1BfUkVMOworICAgICAgYmFzZSA9IGFkZHI7CisgICAgICBpZiAoZGVidWdf cHJpbnQpCisJeworCSAgZnByaW50ZiAoc3RkZXJyLCAiXG5iYXNlOiIpOwor CSAgZGVidWdfcnR4IChiYXNlKTsKKwl9CisgICAgICBicmVhazsKKworICAg IGNhc2UgUExVUzoKKyAgICAgIHN3aXRjaCAoR0VUX0NPREUgKFhFWFAgKGFk ZHIsIDApKSkKKwl7CisJY2FzZSBSRUc6CisJY2FzZSBTVUJSRUc6CisJICAv KiBSRUcgKyBESVNQMjAuICAqLworCSAgLyogQWxsIFJlZyByZWxhdGl2ZSBh ZGRyZXNzZXMgaGF2aW5nIGEgZGlzcGxhY2VtZW50IG5lZWRzIAorCSAgICAg dG8gZml0IGluIDIwLWJpdHMuICAqLworCSAgZGlzcCA9IFhFWFAgKGFkZHIs IDEpOworCSAgaWYgKGRlYnVnX3ByaW50KQorCSAgICB7CisJICAgICAgZnBy aW50ZiAoc3RkZXJyLCAiXG5kaXNwOiIpOworCSAgICAgIGRlYnVnX3J0eCAo ZGlzcCk7CisJICAgIH0KKwkgIHN3aXRjaCAoR0VUX0NPREUgKFhFWFAgKGFk ZHIsIDEpKSkKKwkgICAgeworCSAgICBjYXNlIENPTlNUX0lOVDoKKwkgICAg ICAvKiBTaGFsbCBmaXQgaW4gMjAtYml0cy4gICovCisJICAgICAgaWYgKCFV TlNJR05FRF9JTlRfRklUU19OX0JJVFMgKElOVFZBTCAoZGlzcCksIDIwKSkK KwkJcmV0dXJuIENSMTZfSU5WQUxJRDsKKwkgICAgICBjb2RlID0gMDsKKwkg ICAgICBpZiAoZGVidWdfcHJpbnQpCisJCWZwcmludGYgKHN0ZGVyciwgIlxu Y29kZTolZCIsIGNvZGUpOworCSAgICAgIGJyZWFrOworCisJICAgIGNhc2Ug VU5TUEVDOgorCSAgICAgIGluZm9ybSAoaW5wdXRfbG9jYXRpb24sICJVTlNQ RUMgMiEhIik7CisJICAgICAgc3dpdGNoIChYSU5UIChYRVhQIChhZGRyLCAx KSwgMSkpCisJCXsKKwkJY2FzZSBVTlNQRUNfTElCUkFSWV9PRkZTRVQ6CisJ CSAgaW5mb3JtIChpbnB1dF9sb2NhdGlvbiwgIlVOU1BFQ19MSUJSQVJZX09G RlNFVCAyISEhIik7CisJCSAgYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJICBn Y2NfdW5yZWFjaGFibGUgKCk7CisJCX0KKwkgICAgICBicmVhazsKKworCSAg ICBjYXNlIExBQkVMX1JFRjoKKwkgICAgY2FzZSBTWU1CT0xfUkVGOgorCSAg ICBjYXNlIENPTlNUOgorCSAgICAgIC8qIFRoaXMgaXMgYWxzbyBhIHZhbGlk IGV4cHJlc3Npb24gZm9yIGFkZHJlc3MuCisJICAgICAgICAgSG93ZXZlciwg d2UgY2Fubm90IGFzY2VydGFpbiBpZiB0aGUgcmVzdWx0YW50CisJICAgICAg ICAgZGlzcGxhY2VtZW50IHdpbGwgYmUgdmFsaWQgMjAtYml0IHZhbHVlLiAg VGhlcmVmb3JlLCAKKwkgICAgICAgICBsZXRzIG5vdCBhbGxvdyBzdWNoIGFu IGV4cHJlc3Npb24gZm9yIG5vdy4gIFRoaXMgd2lsbCAKKwkgICAgICAgICBi ZSB1cGRhdGVkIHdoZW4gIHdlIGZpbmQgYSB3YXkgdG8gdmFsaWRhdGUgdGhp cyAKKwkgICAgICAgICBleHByZXNzaW9uIGFzIGxlZ2l0aW1hdGUgYWRkcmVz cy4gCisJICAgICAgICAgVGlsbCB0aGVuIGZhbGwgdGhyb3VnaCBDUjE2X0lO VkFMSUQuICAqLworCSAgICBkZWZhdWx0OgorCSAgICAgIHJldHVybiBDUjE2 X0lOVkFMSUQ7CisJICAgIH0KKworCSAgLyogTm93IGNoZWNrIGlmIFJFRyBj YW4gZml0IGludG8gc2luZ2xlIG9yIHBhaXIgcmVncy4gICovCisJICByZXR2 YWwgPSBDUjE2X1JFR19SRUw7CisJICBiYXNlID0gWEVYUCAoYWRkciwgMCk7 CisJICBpZiAoZGVidWdfcHJpbnQpCisJICAgIHsKKwkgICAgICBmcHJpbnRm IChzdGRlcnIsICJcbmJhc2U6Iik7CisJICAgICAgZGVidWdfcnR4IChiYXNl KTsKKwkgICAgfQorCSAgaWYgKEdFVF9NT0RFX0JJVFNJWkUgKEdFVF9NT0RF ICgoWEVYUCAoYWRkciwgMCkpKSkgPiBCSVRTX1BFUl9XT1JEKQorCSAgICB7 CisJICAgICAgaWYgKCFMT05HX1JFR19QIChSRUdOTyAoKFhFWFAgKGFkZHIs IDApKSkpKQorCQkvKiBSRUcgd2lsbCByZXN1bHQgaW4gcmVnIHBhaXIuICAq LworCQlyZXR2YWwgPSBDUjE2X1JFR1BfUkVMOworCSAgICB9CisJICBicmVh azsKKworCWNhc2UgUExVUzoKKwkgIC8qIFZhbGlkIGV4cHI6IAorCSAgICAg cGx1cworCSAgICAgL1wKKwkgICAgIC8gIFwKKwkgICAgIHBsdXMgaWR4CisJ ICAgICAvXAorCSAgICAgLyAgXAorCSAgICAgcmVnICBjb25zdF9pbnQKKwor CSAgICAgQ2hlY2sgaWYgdGhlIG9wZXJhbmQgMSBpcyB2YWxpZCBpbmRleCBy ZWdpc3Rlci4gICovCisJICBkYXRhID0gSUxMRUdBTF9ETTsKKwkgIGlmIChk ZWJ1Z19wcmludCkKKwkgICAgZnByaW50ZiAoc3RkZXJyLCAiXG5kYXRhOiVk IiwgZGF0YSk7CisJICBzd2l0Y2ggKEdFVF9DT0RFIChYRVhQIChhZGRyLCAx KSkpCisJICAgIHsKKwkgICAgY2FzZSBSRUc6CisJICAgIGNhc2UgU1VCUkVH OgorCSAgICAgIGlmICghUkVHX09LX0ZPUl9JTkRFWF9QIChYRVhQIChhZGRy LCAxKSkpCisJCXJldHVybiBDUjE2X0lOVkFMSUQ7CisJICAgICAgLyogT0su IFJFRyBpcyBhIHZhbGlkIGluZGV4IHJlZ2lzdGVyLiAgKi8KKwkgICAgICBp bmRleCA9IFhFWFAgKGFkZHIsIDEpOworCSAgICAgIGlmIChkZWJ1Z19wcmlu dCkKKwkJeworCQkgIGZwcmludGYgKHN0ZGVyciwgIlxuaW5kZXg6Iik7CisJ CSAgZGVidWdfcnR4IChpbmRleCk7CisJCX0KKwkgICAgICBicmVhazsKKwkg ICAgZGVmYXVsdDoKKwkgICAgICByZXR1cm4gQ1IxNl9JTlZBTElEOworCSAg ICB9CisJICAvKiBDaGVjayBpZiBvcGVyYW5kIDAgb2Ygb3BlcmFuZCAwIGlz IFJFR1AuICAqLworCSAgc3dpdGNoIChHRVRfQ09ERSAoWEVYUCAoWEVYUCAo YWRkciwgMCksIDApKSkKKwkgICAgeworCSAgICBjYXNlIFJFRzoKKwkgICAg Y2FzZSBTVUJSRUc6CisJICAgICAgLyogTm93IGNoZWNrIGlmIFJFRyBpcyBh IFJFR1AgYW5kIG5vdCBpbiBMT05HIHJlZ3MuICAqLworCSAgICAgIGlmIChH RVRfTU9ERV9CSVRTSVpFIChHRVRfTU9ERSAoWEVYUCAoWEVYUCAoYWRkciwg MCksIDApKSkKKwkJICA+IEJJVFNfUEVSX1dPUkQpCisJCXsKKwkJICBpZiAo UkVHTk8gKFhFWFAgKFhFWFAgKGFkZHIsIDApLCAwKSkKKwkJICAgICAgPj0g Q1IxNl9GSVJTVF9EV09SRF9SRUdJU1RFUikKKwkJICAgIHJldHVybiBDUjE2 X0lOVkFMSUQ7CisJCSAgYmFzZSA9IFhFWFAgKFhFWFAgKGFkZHIsIDApLCAw KTsKKwkJICBpZiAoZGVidWdfcHJpbnQpCisJCSAgICB7CisJCSAgICAgIGZw cmludGYgKHN0ZGVyciwgIlxuYmFzZToiKTsKKwkJICAgICAgZGVidWdfcnR4 IChiYXNlKTsKKwkJICAgIH0KKwkJfQorCSAgICAgIGVsc2UKKwkJcmV0dXJu IENSMTZfSU5WQUxJRDsKKwkgICAgICBicmVhazsKKwkgICAgZGVmYXVsdDoK KwkgICAgICByZXR1cm4gQ1IxNl9JTlZBTElEOworCSAgICB9CisJICAvKiBO b3cgY2hlY2sgaWYgdGhlIG9wZXJhbmQgMSBvZiBvcGVyYW5kIDAgaXMgY29u c3RfaW50LiAgKi8KKwkgIGlmIChHRVRfQ09ERSAoWEVYUCAoWEVYUCAoYWRk ciwgMCksIDEpKSA9PSBDT05TVF9JTlQpCisJICAgIHsKKwkgICAgICBkaXNw ID0gWEVYUCAoWEVYUCAoYWRkciwgMCksIDEpOworCSAgICAgIGlmIChkZWJ1 Z19wcmludCkKKwkJeworCQkgIGZwcmludGYgKHN0ZGVyciwgIlxuZGlzcDoi KTsKKwkJICBkZWJ1Z19ydHggKGRpc3ApOworCQl9CisJICAgICAgaWYgKCFV TlNJR05FRF9JTlRfRklUU19OX0JJVFMgKElOVFZBTCAoZGlzcCksIDIwKSkK KwkJcmV0dXJuIENSMTZfSU5WQUxJRDsKKwkgICAgfQorCSAgZWxzZQorCSAg ICByZXR1cm4gQ1IxNl9JTlZBTElEOworCSAgcmV0dmFsID0gQ1IxNl9JTkRF WF9SRUdQX1JFTDsKKwkgIGJyZWFrOworCWRlZmF1bHQ6CisJICByZXR1cm4g Q1IxNl9JTlZBTElEOworCX0KKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVs dDoKKyAgICAgIHJldHVybiBDUjE2X0lOVkFMSUQ7CisgICAgfQorCisgIC8q IENoZWNrIGlmIHRoZSBiYXNlIGFuZCBpbmRleCByZWdpc3RlcnMgYXJlIHZh bGlkLiAgKi8KKyAgaWYgKGJhc2UgJiYgIShjcjE2X2FkZHJfcmVnX3AgKGJh c2UpKSkKKyAgICByZXR1cm4gQ1IxNl9JTlZBTElEOworICBpZiAoYmFzZSAm JiAhKENSMTZfUkVHX09LX0ZPUl9CQVNFX1AgKGJhc2UpKSkKKyAgICByZXR1 cm4gQ1IxNl9JTlZBTElEOworICBpZiAoaW5kZXggJiYgIShSRUdfT0tfRk9S X0lOREVYX1AgKGluZGV4KSkpCisgICAgcmV0dXJuIENSMTZfSU5WQUxJRDsK KworICAvKiBXcml0ZSB0aGUgZGVjb21wb3NpdGlvbiB0byBvdXQgcGFyYW1l dGVyLiAgKi8KKyAgb3V0LT5iYXNlID0gYmFzZTsKKyAgb3V0LT5kaXNwID0g ZGlzcDsKKyAgb3V0LT5pbmRleCA9IGluZGV4OworICBvdXQtPmRhdGEgPSBk YXRhOworICBvdXQtPmNvZGUgPSBjb2RlOworCisgIHJldHVybiByZXR2YWw7 Cit9CisKKy8qIFJldHVybiBub24temVybyB2YWx1ZSBpZiAneCcgaXMgbGVn aXRpbWF0ZSBQSUMgb3BlcmFuZAorICAgd2hlbiBnZW5lcmF0aW5nIFBJQyBj b2RlLiAgKi8KK2ludAorbGVnaXRpbWF0ZV9waWNfb3BlcmFuZF9wIChydHgg eCkKK3sKKyAgc3dpdGNoIChHRVRfQ09ERSAoeCkpCisgICAgeworICAgIGNh c2UgU1lNQk9MX1JFRjoKKyAgICAgIHJldHVybiAwOworICAgICAgYnJlYWs7 CisgICAgY2FzZSBMQUJFTF9SRUY6CisgICAgICByZXR1cm4gMDsKKyAgICAg IGJyZWFrOworICAgIGNhc2UgQ09OU1Q6CisgICAgICAvKiBSRVZJU0lUOiBV c2Ugc29tZXRoaW5nIGxpa2Ugc3ltYm9sX3JlZmVyZW5jZWRfcC4gICovCisg ICAgICBpZiAoR0VUX0NPREUgKFhFWFAgKHgsIDApKSA9PSBQTFVTCisJICAm JiAoR0VUX0NPREUgKFhFWFAgKFhFWFAgKHgsIDApLCAwKSkgPT0gU1lNQk9M X1JFRgorCSAgICAgIHx8IEdFVF9DT0RFIChYRVhQIChYRVhQICh4LCAwKSwg MCkpID09IExBQkVMX1JFRikKKwkgICYmIChHRVRfQ09ERSAoWEVYUCAoWEVY UCAoeCwgMCksIDEpKSA9PSBDT05TVF9JTlQpKQorCXJldHVybiAwOworICAg ICAgYnJlYWs7CisgICAgY2FzZSBNRU06CisgICAgICByZXR1cm4gbGVnaXRp bWF0ZV9waWNfb3BlcmFuZF9wIChYRVhQICh4LCAwKSk7CisgICAgICBicmVh azsKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgICAgfQorICByZXR1 cm4gMTsKK30KKworLyogQ29udmVydCBhIG5vbi1QSUMgYWRkcmVzcyBpbiBg b3JpZycgdG8gYSBQSUMgYWRkcmVzcyBpbiBgcmVnJy4KKworICAgICBJbnB1 dCAgICAgICAgICAgIE91dHB1dCAoLWYgcGljKSAgICAgICAgT3V0cHV0ICgt ZiBQSUMpCisgICAgIG9yaWcgICAgICAgICAgICAgcmVnCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICBDMSAgIHN5bWJvbCAg ICAgICAgICAgc3ltYm9sQEJSTyAocjEyKSAgICAgICAgc3ltYm9sQEdPVCAo cjEyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAg ICAgQzIgICBzeW1ib2wgKyBvZmZzZXQgIHN5bWJvbCtvZmZzZXRAQlJPIChy MTIpIHN5bWJvbCtvZmZzZXRAR09UIChyMTIpCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIAorICAgICBOT1RFOiBAQlJPIGlzIGFkZGVk IHVzaW5nIHVuc3BlYzpCUk8KKyAgICAgTk9URTogQEdPVCBpcyBhZGRlZCB1 c2luZyB1bnNwZWM6R09ULiAgKi8KK3J0eAorbGVnaXRpbWl6ZV9waWNfYWRk cmVzcyAocnR4IG9yaWcsIGVudW0gbWFjaGluZV9tb2RlIG1vZGUgQVRUUklC VVRFX1VOVVNFRCwKKwkJCXJ0eCByZWcpCit7CisKKyAgLyogRmlyc3QgaGFu ZGxlIGEgc2ltcGxlIFNZTUJPTF9SRUYgb3IgTEFCRUxfUkVGLiAgKi8KKyAg aWYgKEdFVF9DT0RFIChvcmlnKSA9PSBTWU1CT0xfUkVGIHx8IEdFVF9DT0RF IChvcmlnKSA9PSBMQUJFTF9SRUYpCisgICAgeworICAgICAgaWYgKHJlZyA9 PSAwKQorCXJlZyA9IGdlbl9yZWdfcnR4IChQbW9kZSk7CisKKyAgICAgIGlm IChmbGFnX3BpYyA9PSBORUFSX1BJQykKKwl7CisJICAvKiBVbnNwZWMgdG8g aGFuZGxlIC1mcGljIG9wdGlvbi4gICovCisJICBlbWl0X2luc24gKGdlbl91 bnNwZWNfYnJvX2FkZHIgKHJlZywgb3JpZykpOworCSAgZW1pdF9pbnNuIChn ZW5fYWRkc2kzIChyZWcsIHJlZywgcGljX29mZnNldF90YWJsZV9ydHgpKTsK Kwl9CisgICAgICBlbHNlIGlmIChmbGFnX3BpYyA9PSBGQVJfUElDKQorCXsK KwkgIC8qIFVuc3BlYyB0byBoYW5kbGUgLWZQSUMgb3B0aW9uLiAgKi8KKwkg IGVtaXRfaW5zbiAoZ2VuX3Vuc3BlY19nb3RfYWRkciAocmVnLCBvcmlnKSk7 CisJfQorICAgICAgcmV0dXJuIHJlZzsKKyAgICB9CisgIGVsc2UgaWYgKEdF VF9DT0RFIChvcmlnKSA9PSBDT05TVCkKKyAgICB7CisgICAgICAvKiBUbyBo YW5kbGUgKHN5bWJvbCArIG9mZnNldCkuICAqLworICAgICAgcnR4IGJhc2Us IG9mZnNldDsKKworICAgICAgaWYgKEdFVF9DT0RFIChYRVhQIChvcmlnLCAw KSkgPT0gUExVUworCSAgJiYgWEVYUCAoWEVYUCAob3JpZywgMCksIDApID09 IHBpY19vZmZzZXRfdGFibGVfcnR4KQorCXJldHVybiBvcmlnOworCisgICAg ICBpZiAocmVnID09IDApCisJeworCSAgZ2NjX2Fzc2VydCAoY2FuX2NyZWF0 ZV9wc2V1ZG9fcCAoKSk7CisJICByZWcgPSBnZW5fcmVnX3J0eCAoUG1vZGUp OworCX0KKworICAgICAgZ2NjX2Fzc2VydCAoR0VUX0NPREUgKFhFWFAgKG9y aWcsIDApKSA9PSBQTFVTKTsKKworICAgICAgYmFzZSA9IGxlZ2l0aW1pemVf cGljX2FkZHJlc3MgKFhFWFAgKFhFWFAgKG9yaWcsIDApLCAwKSwgUG1vZGUs IHJlZyk7CisgICAgICBvZmZzZXQgPSBsZWdpdGltaXplX3BpY19hZGRyZXNz IChYRVhQIChYRVhQIChvcmlnLCAwKSwgMSksIFBtb2RlLAorCQkJCSAgICAg ICBiYXNlID09IHJlZyA/IDAgOiByZWcpOworCisgICAgICAvKiBSRVZJU0lU OiBPcHRpbWl6ZSBmb3IgY29uc3Qtb2Zmc2V0cy4gICovCisgICAgICBlbWl0 X2luc24gKGdlbl9hZGRzaTMgKHJlZywgYmFzZSwgb2Zmc2V0KSk7CisKKyAg ICAgIHJldHVybiByZWc7CisgICAgfQorICByZXR1cm4gb3JpZzsKK30KKwor LyogSW1wbGVtZW50YXRpb24gb2YgVEFSR0VUX0xFR0lUSU1BVEVfQUREUkVT U19QLiAgKi8KK3N0YXRpYyBib29sCitjcjE2X2xlZ2l0aW1hdGVfYWRkcmVz c19wIChlbnVtIG1hY2hpbmVfbW9kZSBtb2RlIEFUVFJJQlVURV9VTlVTRUQs CisJCQkgICBydHggYWRkciwgYm9vbCBzdHJpY3QpCit7CisgIGVudW0gY3Ix Nl9hZGRydHlwZSBhZGRydHlwZTsKKyAgc3RydWN0IGNyMTZfYWRkcmVzcyBh ZGRyZXNzOworCisgIGlmIChUQVJHRVRfREVCVUdfQUREUikKKyAgICB7Cisg ICAgICBmcHJpbnRmIChzdGRlcnIsCisJICAgICAgICJcbj09PT09PVxuVEFS R0VUX0xFR0lUSU1BVEVfQUREUkVTU19QLCBtb2RlID0gJXMsIHN0cmljdCA9 ICVkIiwKKwkgICAgICAgR0VUX01PREVfTkFNRSAobW9kZSksIHN0cmljdCk7 CisgICAgICBkZWJ1Z19ydHggKGFkZHIpOworICAgIH0KKyAgYWRkcnR5cGUg PSBjcjE2X2RlY29tcG9zZV9hZGRyZXNzIChhZGRyLCAmYWRkcmVzcywKKwkJ CQkgICAgIChUQVJHRVRfREVCVUdfQUREUiA/IDEgOiAwKSwgRkFMU0UpOwor CisgIGlmIChUQVJHRVRfREVCVUdfQUREUikKKyAgICB7CisgICAgICBjb25z dCBjaGFyICp0eXBlc3RyOworCisgICAgICBzd2l0Y2ggKGFkZHJ0eXBlKQor CXsKKwljYXNlIENSMTZfSU5WQUxJRDoKKwkgIHR5cGVzdHIgPSAiaW52YWxp ZCI7CisJICBicmVhazsKKwljYXNlIENSMTZfQUJTT0xVVEU6CisJICB0eXBl c3RyID0gImFic29sdXRlIjsKKwkgIGJyZWFrOworCWNhc2UgQ1IxNl9SRUdf UkVMOgorCSAgdHlwZXN0ciA9ICJyZWdpc3RlciByZWxhdGl2ZSI7CisJICBi cmVhazsKKwljYXNlIENSMTZfUkVHUF9SRUw6CisJICB0eXBlc3RyID0gInJl Z2lzdGVyIHBhaXIgcmVsYXRpdmUiOworCSAgYnJlYWs7CisJY2FzZSBDUjE2 X0lOREVYX1JFR1BfUkVMOgorCSAgdHlwZXN0ciA9ICJpbmRleCArIHJlZ2lz dGVyIHBhaXIgcmVsYXRpdmUiOworCSAgYnJlYWs7CisJZGVmYXVsdDoKKwkg IGdjY191bnJlYWNoYWJsZSAoKTsKKwl9CisgICAgICBmcHJpbnRmIChzdGRl cnIsICJcbmNyMTYgYWRkcmVzcyB0eXBlOiAlc1xuIiwgdHlwZXN0cik7Cisg ICAgfQorCisgIGlmIChhZGRydHlwZSA9PSBDUjE2X0lOVkFMSUQpCisgICAg cmV0dXJuIEZBTFNFOworCisgIGlmIChzdHJpY3QpCisgICAgeworICAgICAg aWYgKGFkZHJlc3MuYmFzZQorCSAgJiYgIVJFR05PX01PREVfT0tfRk9SX0JB U0VfUCAoUkVHTk8gKGFkZHJlc3MuYmFzZSksIG1vZGUpKQorCXsKKwkgIGlm IChUQVJHRVRfREVCVUdfQUREUikKKwkgICAgZnByaW50ZiAoc3RkZXJyLCAi YmFzZSByZWdpc3RlciBub3Qgc3RyaWN0XG4iKTsKKwkgIHJldHVybiBGQUxT RTsKKwl9CisgICAgICBpZiAoYWRkcmVzcy5pbmRleCAmJiAhUkVHTk9fT0tf Rk9SX0lOREVYX1AgKFJFR05PIChhZGRyZXNzLmluZGV4KSkpCisJeworCSAg aWYgKFRBUkdFVF9ERUJVR19BRERSKQorCSAgICBmcHJpbnRmIChzdGRlcnIs ICJpbmRleCByZWdpc3RlciBub3Qgc3RyaWN0XG4iKTsKKwkgIHJldHVybiBG QUxTRTsKKwl9CisgICAgfQorCisgIC8qIFJldHVybiB0cnVlIGlmIGFkZHJl c3NpbmcgbW9kZSBpcyByZWdpc3RlciByZWxhdGl2ZS4gICovCisgIGlmIChm bGFnX3BpYykKKyAgICB7CisgICAgICBpZiAoYWRkcnR5cGUgPT0gQ1IxNl9S RUdfUkVMIHx8IGFkZHJ0eXBlID09IENSMTZfUkVHUF9SRUwpCisJcmV0dXJu IFRSVUU7CisgICAgICBlbHNlCisJcmV0dXJuIEZBTFNFOworICAgIH0KKwor ICByZXR1cm4gVFJVRTsKK30KKworLyogUm91dGluZXMgdG8gY29tcHV0ZSBj b3N0cy4gICovCisKKy8qIFJldHVybiBjb3N0IG9mIHRoZSBtZW1vcnkgYWRk cmVzcyB4LiAgKi8KK3N0YXRpYyBpbnQKK2NyMTZfYWRkcmVzc19jb3N0IChy dHggYWRkciwgYm9vbCBzcGVlZCBBVFRSSUJVVEVfVU5VU0VEKQoreworICBl bnVtIGNyMTZfYWRkcnR5cGUgYWRkcnR5cGU7CisgIHN0cnVjdCBjcjE2X2Fk ZHJlc3MgYWRkcmVzczsKKyAgaW50IGNvc3QgPSAyOworCisgIGFkZHJ0eXBl ID0gY3IxNl9kZWNvbXBvc2VfYWRkcmVzcyAoYWRkciwgJmFkZHJlc3MsIDAs IEZBTFNFKTsKKworICBnY2NfYXNzZXJ0IChhZGRydHlwZSAhPSBDUjE2X0lO VkFMSUQpOworCisgIC8qIENSMTZfQUJTT0xVVEUgICAgICAgICAgICA6IDMK KyAgICAgQ1IxNl9SRUdfUkVMICAoZGlzcCAhPTApIDogNAorICAgICBDUjE2 X1JFR19SRUwgIChkaXNwID09MCkgOiA1CisgICAgIENSMTZfUkVHUF9SRUwg KGRpc3AgIT0wKSA6IDYKKyAgICAgQ1IxNl9SRUdQX1JFTCAoZGlzcCA9PTAp IDogNworICAgICBDUjE2X0lOREVYX1JFR1BfUkVMIChkaXNwICE9MCkgOiA4 CisgICAgIENSMTZfSU5ERVhfUkVHUF9SRUwgKGRpc3AgPT0wKSA6IDkuICAq LworICBzd2l0Y2ggKGFkZHJ0eXBlKQorICAgIHsKKyAgICBjYXNlIENSMTZf QUJTT0xVVEU6CisgICAgICBjb3N0ICs9IDE7CisgICAgICBicmVhazsKKyAg ICBjYXNlIENSMTZfUkVHUF9SRUw6CisgICAgICBjb3N0ICs9IDI7CisgICAg ICAvKiBGYWxsIHRocm91Z2guICAqLworICAgIGNhc2UgQ1IxNl9SRUdfUkVM OgorICAgICAgY29zdCArPSAzOworICAgICAgaWYgKGFkZHJlc3MuZGlzcCkK Kwljb3N0IC09IDE7CisgICAgICBicmVhazsKKyAgICBjYXNlIENSMTZfSU5E RVhfUkVHUF9SRUw6CisgICAgICBjb3N0ICs9IDc7CisgICAgICBpZiAoYWRk cmVzcy5kaXNwKQorCWNvc3QgLT0gMTsKKyAgICBkZWZhdWx0OgorICAgICAg YnJlYWs7CisgICAgfQorCisgIGlmIChUQVJHRVRfREVCVUdfQUREUikKKyAg ICB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJcbj09PT09PVxubWFjcm8g VEFSR0VUX0FERFJFU1NfQ09TVCA9ICVkXG4iLCBjb3N0KTsKKyAgICAgIGRl YnVnX3J0eCAoYWRkcik7CisgICAgfQorCisgIHJldHVybiBjb3N0OworfQor CisKKy8qIEltcGxlbWVudCBgVEFSR0VUX1JFR0lTVEVSX01PVkVfQ09TVCcu ICAqLworc3RhdGljIGludAorY3IxNl9yZWdpc3Rlcl9tb3ZlX2Nvc3QgKGVu dW0gbWFjaGluZV9tb2RlIG1vZGUgQVRUUklCVVRFX1VOVVNFRCwKKyAgICAg ICAgICAgICAgICAgICAgICAgIHJlZ19jbGFzc190IGZyb20gQVRUUklCVVRF X1VOVVNFRCwgcmVnX2NsYXNzX3QgdG8pCit7CisgIHJldHVybiAodG8gIT0g R0VORVJBTF9SRUdTID8gOAorICAgICAgICAgIDogMik7Cit9CisKKy8qIElt cGxlbWVudCBgVEFSR0VUX01FTU9SWV9NT1ZFX0NPU1QnLiAgKi8KKworLyog UmV0dXJuIHRoZSBjb3N0IG9mIG1vdmluZyBkYXRhIG9mIG1vZGUgTU9ERSBi ZXR3ZWVuIGEgcmVnaXN0ZXIgb2YgY2xhc3MKKyAgIENMQVNTIGFuZCBtZW1v cnk7IElOIGlzIHplcm8gaWYgdGhlIHZhbHVlIGlzIHRvIGJlIHdyaXR0ZW4g dG8gbWVtb3J5LAorICAgbm9uemVybyBpZiBpdCBpcyB0byBiZSByZWFkIGlu LiBUaGlzIGNvc3QgaXMgcmVsYXRpdmUgdG8gdGhvc2UgaW4KKyAgIFJFR0lT VEVSX01PVkVfQ09TVC4gICovCitzdGF0aWMgaW50CitjcjE2X21lbW9yeV9t b3ZlX2Nvc3QgKGVudW0gbWFjaGluZV9tb2RlIG1vZGUsCisgICAgICAgICAg ICAgICAgICAgICAgIHJlZ19jbGFzc190IHJjbGFzcyBBVFRSSUJVVEVfVU5V U0VELAorICAgICAgICAgICAgICAgICAgICAgICBib29sIGluIEFUVFJJQlVU RV9VTlVTRUQpCit7CisgIC8qIE9uZSBMRCBvciBTVCB0YWtlcyB0d2ljZSB0 aGUgdGltZSBvZiBhIHNpbXBsZSByZWctcmVnIG1vdmUuICAqLworICBpZiAo cmVnX2NsYXNzZXNfaW50ZXJzZWN0X3AgKHJjbGFzcywgR0VORVJBTF9SRUdT KSkKKyAgICByZXR1cm4gKDQgKiBIQVJEX1JFR05PX05SRUdTICgwLCBtb2Rl KSk7CisgIGVsc2UKKyAgICByZXR1cm4gKDEwMCk7Cit9CisKKy8qIEluc3Ry dWN0aW9uIG91dHB1dC4gICovCisKKy8qIENoZWNrIGlmIGEgY29uc3RfZG91 YmxlIGlzIG9rIGZvciBjcjE2IHN0b3JlLWltbWVkaWF0ZSBpbnN0cnVjdGlv bnMuICAqLworaW50CitjcjE2X2NvbnN0X2RvdWJsZV9vayAocnR4IG9wKQor eworICBpZiAoR0VUX01PREUgKG9wKSA9PSBTRm1vZGUpCisgICAgeworICAg ICAgUkVBTF9WQUxVRV9UWVBFIHI7CisgICAgICBsb25nIGw7CisgICAgICBS RUFMX1ZBTFVFX0ZST01fQ09OU1RfRE9VQkxFIChyLCBvcCk7CisgICAgICBS RUFMX1ZBTFVFX1RPX1RBUkdFVF9TSU5HTEUgKHIsIGwpOworICAgICAgcmV0 dXJuIFVOU0lHTkVEX0lOVF9GSVRTX05fQklUUyAobCwgNCkgPyAxIDogMDsK KyAgICB9CisKKyAgcmV0dXJuICgoVU5TSUdORURfSU5UX0ZJVFNfTl9CSVRT IChDT05TVF9ET1VCTEVfTE9XIChvcCksIDQpKSAmJgorCSAgKFVOU0lHTkVE X0lOVF9GSVRTX05fQklUUyAoQ09OU1RfRE9VQkxFX0hJR0ggKG9wKSwgNCkp KSA/IDEgOiAwOworfQorCisvKiBSZXR1cm5zIGJpdCBwb3NpdGlvbiBvZiBm aXJzdCAwIG9yIDEgYml0LgorICAgSXQgaXMgc2FmZSB0byBhc3N1bWUgdmFs IGFzIDE2LWJpdCB3aWRlLiAgKi8KK2ludAorY3IxNl9vcGVyYW5kX2JpdF9w b3MgKGludCB2YWwsIGludCBiaXR2YWwpCit7CisgIGludCBpOworICBpZiAo Yml0dmFsID09IDApCisgICAgdmFsID0gfnZhbDsKKworICBmb3IgKGkgPSAw OyBpIDwgMTY7IGkrKykKKyAgICBpZiAodmFsICYgKDEgPDwgaSkpCisgICAg ICBicmVhazsKKyAgcmV0dXJuIGk7Cit9CisKKy8qIEltcGxlbWVudHMgdGhl IG1hY3JvIFBSSU5UX09QRVJBTkQgZGVmaW5lZCBpbiBjcjE2LmguICAqLwor c3RhdGljIHZvaWQKK2NyMTZfcHJpbnRfb3BlcmFuZCAoRklMRSAqIGZpbGUs IHJ0eCB4LCBpbnQgY29kZSkKK3sKKyAgaW50IHB0cl9kZXJlZmVyZW5jZSA9 IDA7CisKKyAgc3dpdGNoIChjb2RlKQorICAgIHsKKyAgICBjYXNlICdkJzoK KyAgICAgIHsKKwljb25zdCBjaGFyICpjcjE2X2NtcF9zdHI7CisJc3dpdGNo IChHRVRfQ09ERSAoeCkpCisJICB7CisJICAgIC8qIE1EOiBjb21wYXJlIChy ZWcsIHJlZyBvciBpbW0pIGJ1dCBDUjE2OiBjbXAgKHJlZyBvciBpbW0sIHJl ZykKKwkgICAgICAgLT4gc3dhcCBhbGwgbm9uIHN5bW1ldHJpYyBvcHMuICAq LworCSAgY2FzZSBFUToKKwkgICAgY3IxNl9jbXBfc3RyID0gImVxIjsKKwkg ICAgYnJlYWs7CisJICBjYXNlIE5FOgorCSAgICBjcjE2X2NtcF9zdHIgPSAi bmUiOworCSAgICBicmVhazsKKwkgIGNhc2UgR1Q6CisJICAgIGNyMTZfY21w X3N0ciA9ICJsdCI7CisJICAgIGJyZWFrOworCSAgY2FzZSBHVFU6CisJICAg IGNyMTZfY21wX3N0ciA9ICJsbyI7CisJICAgIGJyZWFrOworCSAgY2FzZSBM VDoKKwkgICAgY3IxNl9jbXBfc3RyID0gImd0IjsKKwkgICAgYnJlYWs7CisJ ICBjYXNlIExUVToKKwkgICAgY3IxNl9jbXBfc3RyID0gImhpIjsKKwkgICAg YnJlYWs7CisJICBjYXNlIEdFOgorCSAgICBjcjE2X2NtcF9zdHIgPSAibGUi OworCSAgICBicmVhazsKKwkgIGNhc2UgR0VVOgorCSAgICBjcjE2X2NtcF9z dHIgPSAibHMiOworCSAgICBicmVhazsKKwkgIGNhc2UgTEU6CisJICAgIGNy MTZfY21wX3N0ciA9ICJnZSI7CisJICAgIGJyZWFrOworCSAgY2FzZSBMRVU6 CisJICAgIGNyMTZfY21wX3N0ciA9ICJocyI7CisJICAgIGJyZWFrOworCSAg ZGVmYXVsdDoKKwkgICAgZ2NjX3VucmVhY2hhYmxlICgpOworCSAgfQorCWZw cmludGYgKGZpbGUsICIlcyIsIGNyMTZfY21wX3N0cik7CisJcmV0dXJuOwor ICAgICAgfQorICAgIGNhc2UgJyQnOgorICAgICAgcHV0YyAoJyQnLCBmaWxl KTsKKyAgICAgIHJldHVybjsKKworICAgIGNhc2UgJ3AnOgorICAgICAgaWYg KEdFVF9DT0RFICh4KSA9PSBSRUcpCisJeworCSAgLyogRm9yIFB1c2ggaW5z dHJ1Y3Rpb25zLCB3ZSBzaG91bGQgbm90IHByaW50IHJlZ2lzdGVyIHBhaXJz LiAgKi8KKwkgIGZwcmludGYgKGZpbGUsICIlcyIsIHJlZ19uYW1lc1tSRUdO TyAoeCldKTsKKwkgIHJldHVybjsKKwl9CisgICAgICBicmVhazsKKworICAg IGNhc2UgJ2InOgorICAgICAgLyogUHJpbnQgdGhlIGltbWVkaWF0ZSBhZGRy ZXNzIGZvciBiYWwgCisgICAgICAgICAnYicgaXMgdXNlZCBpbnN0ZWFkIG9m ICdhJyB0byBhdm9pZCBjb21waWxlciBjYWxsaW5nCisgICAgICAgICB0aGUg R09fSUZfTEVHSVRJTUFURV9BRERSRVNTIHdoaWNoIGNhbm5vdAorICAgICAg ICAgcGVyZm9ybSBjaGVja3Mgb24gY29uc3RfaW50IGNvZGUgYWRkcmVzc2Vz IGFzIGl0CisgICAgICAgICBhc3N1bWVzIGFsbCBjb25zdF9pbnQgYXJlIGRh dGEgYWRkcmVzc2VzLiAgKi8KKyAgICAgIGZwcmludGYgKGZpbGUsICIweCVs eCIsIElOVFZBTCAoeCkpOworICAgICAgcmV0dXJuOworCisgICAgY2FzZSAn cic6CisgICAgICAvKiBQcmludCBiaXQgcG9zaXRpb24gb2YgZmlyc3QgMC4g ICovCisgICAgICBmcHJpbnRmIChmaWxlLCAiJWQiLCBjcjE2X29wZXJhbmRf Yml0X3BvcyAoSU5UVkFMICh4KSwgMCkpOworICAgICAgcmV0dXJuOworCisg ICAgY2FzZSAncyc6CisgICAgICAvKiBQcmludCBiaXQgcG9zaXRpb24gb2Yg Zmlyc3QgMS4gICovCisgICAgICBmcHJpbnRmIChmaWxlLCAiJWQiLCBjcjE2 X29wZXJhbmRfYml0X3BvcyAoSU5UVkFMICh4KSwgMSkpOworICAgICAgcmV0 dXJuOworICAgIGNhc2UgJ2cnOgorICAgICAgLyogJ2cnIGlzIHVzZWQgZm9y IGltcGxpY2l0IG1lbTogZGVyZWZlcmVuY2UuICAqLworICAgICAgcHRyX2Rl cmVmZXJlbmNlID0gMTsKKyAgICBjYXNlICdmJzoKKyAgICBjYXNlIDA6Cisg ICAgICAvKiBkZWZhdWx0LiAgKi8KKyAgICAgIHN3aXRjaCAoR0VUX0NPREUg KHgpKQorCXsKKwljYXNlIFJFRzoKKwkgIGlmIChHRVRfTU9ERV9CSVRTSVpF IChHRVRfTU9ERSAoeCkpID4gQklUU19QRVJfV09SRCkKKwkgICAgeworCSAg ICAgIGlmIChMT05HX1JFR19QIChSRUdOTyAoeCkpKQorCQlmcHJpbnRmIChm aWxlLCAiKCVzKSIsIHJlZ19uYW1lc1tSRUdOTyAoeCldKTsKKwkgICAgICBl bHNlCisJCWZwcmludGYgKGZpbGUsICIoJXMsJXMpIiwgcmVnX25hbWVzW1JF R05PICh4KSArIDFdLAorCQkJIHJlZ19uYW1lc1tSRUdOTyAoeCldKTsKKwkg ICAgfQorCSAgZWxzZQorCSAgICBmcHJpbnRmIChmaWxlLCAiJXMiLCByZWdf bmFtZXNbUkVHTk8gKHgpXSk7CisJICByZXR1cm47CisKKwljYXNlIE1FTToK KwkgIG91dHB1dF9hZGRyZXNzIChYRVhQICh4LCAwKSk7CisJICByZXR1cm47 CisKKwljYXNlIENPTlNUX0RPVUJMRToKKwkgIHsKKwkgICAgUkVBTF9WQUxV RV9UWVBFIHI7CisJICAgIGxvbmcgbDsKKworCSAgICBSRUFMX1ZBTFVFX0ZS T01fQ09OU1RfRE9VQkxFIChyLCB4KTsKKwkgICAgUkVBTF9WQUxVRV9UT19U QVJHRVRfU0lOR0xFIChyLCBsKTsKKworCSAgICBmcHJpbnRmIChmaWxlLCAi JDB4JWx4IiwgbCk7CisJICAgIHJldHVybjsKKwkgIH0KKwljYXNlIENPTlNU X0lOVDoKKwkgIHsKKwkgICAgZnByaW50ZiAoZmlsZSwgIiQlbGQiLCBJTlRW QUwgKHgpKTsKKwkgICAgcmV0dXJuOworCSAgfQorCWNhc2UgVU5TUEVDOgor CSAgaW5mb3JtIChpbnB1dF9sb2NhdGlvbiwgInVuc3BlYyEhIik7CisJICBz d2l0Y2ggKFhJTlQgKHgsIDEpKQorCSAgICB7CisJICAgIGRlZmF1bHQ6CisJ ICAgICAgZ2NjX3VucmVhY2hhYmxlICgpOworCSAgICB9CisJICBicmVhazsK KworCWRlZmF1bHQ6CisJICBpZiAoIXB0cl9kZXJlZmVyZW5jZSkKKwkgICAg eworCSAgICAgIHB1dGMgKCckJywgZmlsZSk7CisJICAgIH0KKwkgIGNyMTZf cHJpbnRfb3BlcmFuZF9hZGRyZXNzIChmaWxlLCB4KTsKKwkgIHJldHVybjsK Kwl9CisgICAgZGVmYXVsdDoKKyAgICAgIG91dHB1dF9vcGVyYW5kX2xvc3Nh Z2UgKCJpbnZhbGlkICUleG4gY29kZSIpOworICAgIH0KKworICBnY2NfdW5y ZWFjaGFibGUgKCk7Cit9CisKKy8qIEltcGxlbWVudHMgdGhlIG1hY3JvIFBS SU5UX09QRVJBTkRfQUREUkVTUyBkZWZpbmVkIGluIGNyMTYuaC4gICovCisK K3N0YXRpYyB2b2lkCitjcjE2X3ByaW50X29wZXJhbmRfYWRkcmVzcyAoRklM RSAqIGZpbGUsIHJ0eCBhZGRyKQoreworICBlbnVtIGNyMTZfYWRkcnR5cGUg YWRkcnR5cGU7CisgIHN0cnVjdCBjcjE2X2FkZHJlc3MgYWRkcmVzczsKKwor ICAvKiBEZWNvbXBvc2UgdGhlIGFkZHJlc3MuIEFsc28gYXNrIGl0IHRvIHRy ZWF0IGFkZHJlc3MgYXMgY29uc3RhbnQuICAqLworICBhZGRydHlwZSA9IGNy MTZfZGVjb21wb3NlX2FkZHJlc3MgKGFkZHIsICZhZGRyZXNzLCAwLCBUUlVF KTsKKworICBpZiAoYWRkcmVzcy5kaXNwICYmIEdFVF9DT0RFIChhZGRyZXNz LmRpc3ApID09IFVOU1BFQykKKyAgICB7CisgICAgICBpbmZvcm0gKGlucHV0 X2xvY2F0aW9uLCAidW5zcGVjIDMgKCVkKSEhISIsIGFkZHJ0eXBlKTsKKyAg ICAgIGRlYnVnX3J0eCAoYWRkcik7CisgICAgfQorCisgIHN3aXRjaCAoYWRk cnR5cGUpCisgICAgeworICAgIGNhc2UgQ1IxNl9SRUdfUkVMOgorICAgICAg aWYgKGFkZHJlc3MuZGlzcCkKKwl7CisJICBpZiAoR0VUX0NPREUgKGFkZHJl c3MuZGlzcCkgPT0gVU5TUEVDKQorCSAgICBjcjE2X3ByaW50X29wZXJhbmQg KGZpbGUsIGFkZHJlc3MuZGlzcCwgMCk7CisJICBlbHNlCisJICAgIG91dHB1 dF9hZGRyX2NvbnN0IChmaWxlLCBhZGRyZXNzLmRpc3ApOworCX0KKyAgICAg IGVsc2UKKwlmcHJpbnRmIChmaWxlLCAiMCIpOworICAgICAgZnByaW50ZiAo ZmlsZSwgIiglcykiLCByZWdfbmFtZXNbUkVHTk8gKGFkZHJlc3MuYmFzZSld KTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBDUjE2X0FCU09MVVRFOgor ICAgICAgaWYgKGFkZHJlc3MuZGlzcCkKKwlvdXRwdXRfYWRkcl9jb25zdCAo ZmlsZSwgYWRkcmVzcy5kaXNwKTsKKyAgICAgIGVsc2UKKwlmcHJpbnRmIChm aWxlLCAiMCIpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIENSMTZfSU5E RVhfUkVHUF9SRUw6CisgICAgICBmcHJpbnRmIChmaWxlLCAiWyVzXSIsIHJl Z19uYW1lc1tSRUdOTyAoYWRkcmVzcy5pbmRleCldKTsKKyAgICAgIC8qIEZh bGwgdGhyb3VnaC4gICovCisgICAgY2FzZSBDUjE2X1JFR1BfUkVMOgorICAg ICAgaWYgKGFkZHJlc3MuZGlzcCkKKwl7CisJICBpZiAoR0VUX0NPREUgKGFk ZHJlc3MuZGlzcCkgPT0gVU5TUEVDKQorCSAgICBjcjE2X3ByaW50X29wZXJh bmQgKGZpbGUsIGFkZHJlc3MuZGlzcCwgMCk7CisJICBlbHNlCisJICAgIG91 dHB1dF9hZGRyX2NvbnN0IChmaWxlLCBhZGRyZXNzLmRpc3ApOworCX0KKyAg ICAgIGVsc2UKKwlmcHJpbnRmIChmaWxlLCAiMCIpOworICAgICAgZnByaW50 ZiAoZmlsZSwgIiglcywlcykiLCByZWdfbmFtZXNbUkVHTk8gKGFkZHJlc3Mu YmFzZSkgKyAxXSwKKwkgICAgICAgcmVnX25hbWVzW1JFR05PIChhZGRyZXNz LmJhc2UpXSk7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAg ZGVidWdfcnR4IChhZGRyKTsKKyAgICAgIGdjY191bnJlYWNoYWJsZSAoKTsK KyAgICB9CisgIC8qIEFkZCBxdWFsaWZpZXJzIHRvIHRoZSBhZGRyZXNzIGV4 cHJlc3Npb24gdGhhdCB3YXMganVzdCBwcmludGVkLiAgKi8KKyAgaWYgKGZs YWdfcGljIDwgTkVBUl9QSUMgJiYgYWRkcmVzcy5jb2RlID09IDApCisgICAg eworICAgICAgaWYgKGFkZHJlc3MuZGF0YSA9PSBETV9GQVIpCisJLyogQWRk ciBjb250YWlucyBTWU1CT0xfUkVGICYgZmFyIGRhdGEgcHRyLiAgKi8KKwlm cHJpbnRmIChmaWxlLCAiQGwiKTsKKyAgICAgIGVsc2UgaWYgKGFkZHJlc3Mu ZGF0YSA9PSBETV9ERUZBVUxUKQorCS8qIEFkZHIgY29udGFpbnMgU1lNQk9M X1JFRiAmIG1lZGl1bSBkYXRhIHB0ci4gICovCisJZnByaW50ZiAoZmlsZSwg IkBtIik7CisgICAgICAvKiBBZGRyIGNvbnRhaW5zIFNZTUJPTF9SRUYgJiBt ZWRpdW0gZGF0YSBwdHIuICAqLworICAgICAgZWxzZSBpZiAoYWRkcmVzcy5k YXRhID09IERNX05FQVIpCisJLyogQWRkciBjb250YWlucyBTWU1CT0xfUkVG ICYgbmVhciBkYXRhIHB0ci4gICovCisJZnByaW50ZiAoZmlsZSwgIkBzIik7 CisgICAgfQorICBlbHNlIGlmIChmbGFnX3BpYyA9PSBORUFSX1BJQworCSAg ICYmIChhZGRyZXNzLmNvZGUgPT0gMCkgJiYgKGFkZHJlc3MuZGF0YSA9PSBE TV9GQVIKKwkJCQkgICAgICB8fCBhZGRyZXNzLmRhdGEgPT0gRE1fREVGQVVM VAorCQkJCSAgICAgIHx8IGFkZHJlc3MuZGF0YSA9PSBETV9ORUFSKSkKKyAg ICB7CisgICAgICBmcHJpbnRmIChmaWxlLCAiQGwiKTsKKyAgICB9CisgIGVs c2UgaWYgKGZsYWdfcGljID09IE5FQVJfUElDICYmIGFkZHJlc3MuY29kZSA9 PSAyKQorICAgIHsKKyAgICAgIGZwcmludGYgKGZpbGUsICJwaWMiKTsKKyAg ICB9CisgIGVsc2UgaWYgKGZsYWdfcGljID09IE5FQVJfUElDICYmIGFkZHJl c3MuY29kZSA9PSAxKQorICAgIHsKKyAgICAgIGZwcmludGYgKGZpbGUsICJA Y3BpYyIpOworICAgIH0KKworICBlbHNlIGlmIChmbGFnX3BpYyA9PSBGQVJf UElDICYmIGFkZHJlc3MuY29kZSA9PSAyKQorICAgIHsKKyAgICAgIC8qIFJF VklTSVQ6IGNyMTYgcmVnaXN0ZXIgaW5kaXJlY3QganVtcCBleHBlY3RzIGEg MS1iaXQgcmlnaHQgc2hpZnRlZAorICAgICAgICAgYWRkcmVzcyAhIEdPVGMg dGVsbHMgYXNzZW1ibGVyIHRoaXMgc3ltYm9sIGlzIGEgdGV4dC1hZGRyZXNz IAorICAgICAgICAgVGhpcyBuZWVkcyB0byBiZSBmaXhlZCBpbiBzdWNoIGEg d2F5IHRoYXQgdGhpcyBvZmZzZXQgaXMgZG9uZSAKKyAgICAgICAgIG9ubHkg aW4gdGhlIGNhc2Ugd2hlcmUgYW4gYWRkcmVzcyBpcyBiZWluZyB1c2VkIGZv ciBpbmRpcmVjdCBqdW1wCisgICAgICAgICBvciBjYWxsLiBEZXRlcm1pbmlu ZyB0aGUgcG90ZW50aWFsIHVzYWdlIG9mIGxvYWRkIGlzIG9mIGNvdXJzZSBu b3QKKyAgICAgICAgIHBvc3NpYmxlIGFsd2F5cy4gRXZlbnR1YWxseSwgdGhp cyBoYXMgdG8gYmUgZml4ZWQgaW4gdGhlIAorICAgICAgICAgcHJvY2Vzc29y LiAgKi8KKyAgICAgIGZwcmludGYgKGZpbGUsICJHT1QgKCVzKSIsIHJlZ19u YW1lc1tQSUNfT0ZGU0VUX1RBQkxFX1JFR05VTV0pOworICAgIH0KKyAgZWxz ZSBpZiAoZmxhZ19waWMgPT0gRkFSX1BJQyAmJiBhZGRyZXNzLmNvZGUgPT0g MSkKKyAgICB7CisgICAgICBmcHJpbnRmIChmaWxlLCAiQGNHT1QgKCVzKSIs IHJlZ19uYW1lc1tQSUNfT0ZGU0VUX1RBQkxFX1JFR05VTV0pOworICAgIH0K KworICBlbHNlIGlmIChmbGFnX3BpYyA9PSBGQVJfUElDICYmCisJICAgKGFk ZHJlc3MuZGF0YSA9PSBETV9GQVIgfHwgYWRkcmVzcy5kYXRhID09IERNX0RF RkFVTFQKKwkgICAgfHwgYWRkcmVzcy5kYXRhID09IERNX05FQVIpKQorICAg IHsKKyAgICAgIGZwcmludGYgKGZpbGUsICJAR09UICglcykiLCByZWdfbmFt ZXNbUElDX09GRlNFVF9UQUJMRV9SRUdOVU1dKTsKKyAgICB9Cit9CisKKy8q IE1hY2hpbmUgZGVzY3JpcHRpb24gaGVscGVyIGZ1bmN0aW9ucy4gICovCisK Ky8qIENhbGxlZCBmcm9tIGNyMTYubWQuIFRoZSByZXR1cm4gdmFsdWUgZGVw ZW5kcyBvbiB0aGUgcGFyYW1ldGVyIHB1c2hfb3JfcG9wOgorICAgV2hlbiBw dXNoX29yX3BvcCBpcyB6ZXJvIC0+IHN0cmluZyBmb3IgcHVzaCBpbnN0cnVj dGlvbnMgb2YgcHJvbG9ndWUuCisgICBXaGVuIHB1c2hfb3JfcG9wIGlzIG5v bnplcm8gLT4gc3RyaW5nIGZvciBwb3AvcG9wcmV0L3JldHggaW4gZXBpbG9n dWUuCisgICBSZWxpZXMgb24gdGhlIGFzc3VtcHRpb25zOgorICAgMS4gUkEg aXMgdGhlIGxhc3QgcmVnaXN0ZXIgdG8gYmUgc2F2ZWQuCisgICAyLiBUaGUg bWF4aW1hbCB2YWx1ZSBvZiB0aGUgY291bnRlciBpcyBNQVhfQ09VTlQuICAq LworY2hhciAqCitjcjE2X3ByZXBhcmVfcHVzaF9wb3Bfc3RyaW5nIChpbnQg cHVzaF9vcl9wb3ApCit7CisgIC8qIGogaXMgdGhlIG51bWJlciBvZiByZWdp c3RlcnMgYmVpbmcgc2F2ZWQsIHRha2VzIGNhcmUgdGhhdCB0aGVyZSB3b24n dCBiZQorICAgICBtb3JlIHRoYW4gOCBpbiBvbmUgcHVzaC9wb3AgaW5zdHJ1 Y3Rpb24uICAqLworCisgIC8qIEZvciB0aGUgcmVnaXN0ZXIgbWFzayBzdHJp bmcuICAqLworICBzdGF0aWMgY2hhciBvbmVfaW5zdF9zdHJbNTBdOworCisg IC8qIGkgaXMgdGhlIGluZGV4IG9mIGN1cnJlbnRfZnJhbWVfaW5mby5zYXZl X3JlZ3NbXSwgZ29pbmcgZnJvbSAwIHVudGlsIAorICAgICBjdXJyZW50X2Zy YW1lX2luZm8ubGFzdF9yZWdfdG9fc2F2ZS4gICovCisgIGludCBpLCBzdGFy dF9yZWc7CisgIGludCB3b3JkX2NudDsKKyAgaW50IHByaW50X3JhOworICBj aGFyICpyZXR1cm5fc3RyOworCisgIC8qIEZvciByZXZlcnNpbmcgb24gdGhl IHB1c2ggaW5zdHJ1Y3Rpb25zIGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25l LiAgKi8KKyAgY2hhciAqdGVtcF9zdHI7CisKKyAgcmV0dXJuX3N0ciA9IChj aGFyICopIHhtYWxsb2MgKDE2MCk7CisgIHRlbXBfc3RyID0gKGNoYXIgKikg eG1hbGxvYyAoMTYwKTsKKworICAvKiBJbml0aWFsaXplLiAgKi8KKyAgbWVt c2V0IChyZXR1cm5fc3RyLCAwLCAzKTsKKworICBpID0gMDsKKyAgd2hpbGUg KGkgPD0gY3VycmVudF9mcmFtZV9pbmZvLmxhc3RfcmVnX3RvX3NhdmUpCisg ICAgeworICAgICAgLyogUHJlcGFyZSBtYXNrIGZvciBvbmUgaW5zdHJ1Y3Rp b24uICAqLworICAgICAgb25lX2luc3Rfc3RyWzBdID0gMDsKKworICAgICAg LyogVG8gY291bnQgbnVtYmVyIG9mIHdvcmRzIGluIG9uZSBpbnN0cnVjdGlv bi4gICovCisgICAgICB3b3JkX2NudCA9IDA7CisgICAgICBzdGFydF9yZWcg PSBpOworICAgICAgcHJpbnRfcmEgPSAwOworICAgICAgd2hpbGUgKCh3b3Jk X2NudCA8IE1BWF9DT1VOVCkgCisJICAgICAmJiAoaSA8PSBjdXJyZW50X2Zy YW1lX2luZm8ubGFzdF9yZWdfdG9fc2F2ZSkpCisJeworCSAgLyogRm9yIGVh Y2ggbm9uIGNvbnNlY3V0aXZlIHNhdmUgcmVnaXN0ZXIsIAorCSAgICAgYSBu ZXcgaW5zdHJ1Y3Rpb24gc2hhbGwgYmUgZ2VuZXJhdGVkLiAgKi8KKwkgIGlm ICghY3VycmVudF9mcmFtZV9pbmZvLnNhdmVfcmVnc1tpXSkKKwkgICAgewor CSAgICAgIC8qIE1vdmUgdG8gbmV4dCByZWcgYW5kIGJyZWFrLiAgKi8KKwkg ICAgICArK2k7CisJICAgICAgYnJlYWs7CisJICAgIH0KKworCSAgaWYgKGkg PT0gUkVUVVJOX0FERFJFU1NfUkVHTlVNKQorCSAgICBwcmludF9yYSA9IDE7 CisJICBlbHNlCisJICAgIHsKKwkgICAgICAvKiBDaGVjayBlc3BlY2lhbGx5 IGlmIGFkZGluZyAyIGRvZXMgbm90IGNyb3NzIHRoZSBNQVhfQ09VTlQuICAq LworCSAgICAgIGlmICgod29yZF9jbnQgKyAoKGkgPCBDUjE2X0ZJUlNUX0RX T1JEX1JFR0lTVEVSKSA/IDEgOiAyKSkKKwkJICA+PSBNQVhfQ09VTlQpCisJ CWJyZWFrOworCSAgICAgIC8qIEluY3JlYXNlIHdvcmQgY291bnQgYnkgMiBm b3IgbG9uZyByZWdpc3RlcnMgZXhjZXB0IFJBLiAgICovCisJICAgICAgd29y ZF9jbnQgKz0gKChpIDwgQ1IxNl9GSVJTVF9EV09SRF9SRUdJU1RFUikgPyAx IDogMik7CisJICAgIH0KKwkgICsraTsKKwl9CisKKyAgICAgIC8qIE5vIG5l ZWQgdG8gZ2VuZXJhdGUgYW55IGluc3RydWN0aW9uIGFzCisgICAgICAgICBu byByZWdpc3RlciBvciBSQSBuZWVkcyB0byBiZSBzYXZlZC4gICovCisgICAg ICBpZiAoKHdvcmRfY250ID09IDApICYmIChwcmludF9yYSA9PSAwKSkKKwlj b250aW51ZTsKKworICAgICAgLyogTm93IHByZXBhcmUgdGhlIGluc3RydWN0 aW9uIG9wZXJhbmRzLiAgKi8KKyAgICAgIGlmICh3b3JkX2NudCA+IDApCisJ eworCSAgc3ByaW50ZiAob25lX2luc3Rfc3RyLCAiJCVkLCAlcyIsIHdvcmRf Y250LCByZWdfbmFtZXNbc3RhcnRfcmVnXSk7CisJICBpZiAocHJpbnRfcmEp CisJICAgIHN0cmNhdCAob25lX2luc3Rfc3RyLCAiLCByYSIpOworCX0KKyAg ICAgIGVsc2UKKwlzdHJjYXQgKG9uZV9pbnN0X3N0ciwgInJhIik7CisKKyAg ICAgIGlmIChwdXNoX29yX3BvcCA9PSAxKQorCXsKKwkgIC8qIFBvcCBpbnN0 cnVjdGlvbi4gICovCisJICBpZiAocHJpbnRfcmEgJiYgIWNyMTZfaW50ZXJy dXB0X2Z1bmN0aW9uX3AgKCkKKwkgICAgICAmJiAhY3J0bC0+Y2FsbHNfZWhf cmV0dXJuKQorCSAgICAvKiBQcmludCBwb3ByZXQgaWYgUkEgaXMgc2F2ZWQg YW5kIGl0cyBub3QgYSBpbnRlcnJ1cHQgCisJICAgICAgIGZ1bmN0aW9uLiAg Ki8KKwkgICAgc3RyY3B5ICh0ZW1wX3N0ciwgIlxuXHRwb3ByZXRcdCIpOwor CSAgZWxzZQorCSAgICBzdHJjcHkgKHRlbXBfc3RyLCAiXG5cdHBvcFx0Iik7 CisKKwkgIHN0cmNhdCAodGVtcF9zdHIsIG9uZV9pbnN0X3N0cik7CisKKwkg IC8qIEFkZCB0aGUgcG9wIGluc3RydWN0aW9uIGxpc3QuICAqLworCSAgc3Ry Y2F0IChyZXR1cm5fc3RyLCB0ZW1wX3N0cik7CisJfQorICAgICAgZWxzZQor CXsKKwkgIC8qIFB1c2ggaW5zdHJ1Y3Rpb24uICAqLworCSAgc3RyY3B5ICh0 ZW1wX3N0ciwgIlxuXHRwdXNoXHQiKTsKKwkgIHN0cmNhdCAodGVtcF9zdHIs IG9uZV9pbnN0X3N0cik7CisKKwkgIC8qIFdlIG5lZWQgdG8gcmV2ZXJzZSB0 aGUgb3JkZXIgb2YgdGhlIGluc3RydWN0aW9ucyBpZiB0aGVyZQorCSAgICAg YXJlIG1vcmUgdGhhbiBvbmUuIChzaW5jZSB0aGUgcG9wIHdpbGwgbm90IGJl IHJldmVyc2VkIGluIAorCSAgICAgdGhlIGVwaWxvZ3VlLiAgKi8KKwkgIHN0 cmNhdCAodGVtcF9zdHIsIHJldHVybl9zdHIpOworCSAgc3RyY3B5IChyZXR1 cm5fc3RyLCB0ZW1wX3N0cik7CisJfQorCisgICAgfQorCisgIGlmIChwdXNo X29yX3BvcCA9PSAxKQorICAgIHsKKyAgICAgIC8qIFBPUC4gICovCisgICAg ICBpZiAoY3IxNl9pbnRlcnJ1cHRfZnVuY3Rpb25fcCAoKSkKKwlzdHJjYXQg KHJldHVybl9zdHIsICJcblx0cmV0eFxuIik7CisgICAgICBlbHNlIGlmIChj cnRsLT5jYWxsc19laF9yZXR1cm4pCisJeworCSAgLyogQWRkIHN0YWNrIGFk anVzdG1lbnQgYmVmb3JlIHJldHVybmluZyB0byBleGNlcHRpb24gaGFuZGxl cgorCSAgICAgTk9URTogRUhfUkVUVVJOX1NUQUNLQURKX1JUWCBtdXN0IHJl ZmVyIHRvIChyNSxyNCkuICAqLworCSAgc3RyY2F0IChyZXR1cm5fc3RyLCAi XG5cdGFkZGRcdCAocjUscjQpLCAoc3ApXHRcbiIpOworCSAgc3RyY2F0IChy ZXR1cm5fc3RyLCAiXG5cdGp1bXBcdCAocmEpXG4iKTsKKworCSAgLyogQnV0 IGJlZm9yZSBhbnl0aGluZyBlbHNlLCB1bmRvIHRoZSBhZGp1c3RtZW50IGFk ZGl0aW9uIGRvbmUgaW4KKwkgICAgIGNyMTZfZXhwYW5kX2VwaWxvZ3VlICgp LiAgKi8KKwkgIHN0cmNweSAodGVtcF9zdHIsICJcblx0c3ViZFx0IChyNSxy NCksIChzcClcdFxuIik7CisJICBzdHJjYXQgKHRlbXBfc3RyLCByZXR1cm5f c3RyKTsKKwkgIHN0cmNweSAocmV0dXJuX3N0ciwgdGVtcF9zdHIpOworCX0K KyAgICAgIGVsc2UgaWYgKCFGVU5DX0lTX05PUkVUVVJOX1AgKGN1cnJlbnRf ZnVuY3Rpb25fZGVjbCkKKwkgICAgICAgJiYgIShjdXJyZW50X2ZyYW1lX2lu Zm8uc2F2ZV9yZWdzW1JFVFVSTl9BRERSRVNTX1JFR05VTV0pKQorCXN0cmNh dCAocmV0dXJuX3N0ciwgIlxuXHRqdW1wXHQgKHJhKVxuIik7CisgICAgfQor CisgIC8qIFNraXAgdGhlIG5ld2xpbmUgYW5kIHRoZSB0YWIgaW4gdGhlIHN0 YXJ0IG9mIHJldHVybl9zdHIuICAqLworICByZXR1cm5fc3RyICs9IDI7Cisg IHJldHVybiByZXR1cm5fc3RyOworfQorCisKKy8qIEdlbmVyYXRlIERXQVJG MiBhbm5vdGF0aW9uIGZvciBtdWx0aS1wdXNoIGluc3RydWN0aW9uLiAgKi8K K3N0YXRpYyB2b2lkCitjcjE2X2NyZWF0ZV9kd2FyZl9mb3JfbXVsdGlfcHVz aCAocnR4IGluc24pCit7CisgIHJ0eCBkd2FyZiwgcmVnLCB0bXA7CisgIGlu dCBpLCBqLCBmcm9tLCB0bywgd29yZF9jbnQsIGR3YXJmX3Bhcl9pbmRleCwg aW5jOworICBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlOworICBpbnQgbnVtX3Jl Z3MgPSAwLCBvZmZzZXQgPSAwLCBzcGxpdF9oZXJlID0gMCwgdG90YWxfcHVz aF9ieXRlcyA9IDA7CisKKyAgZm9yIChpID0gMDsgaSA8PSBjdXJyZW50X2Zy YW1lX2luZm8ubGFzdF9yZWdfdG9fc2F2ZTsgKytpKQorICAgIHsKKyAgICAg IGlmIChjdXJyZW50X2ZyYW1lX2luZm8uc2F2ZV9yZWdzW2ldKQorCXsKKwkg ICsrbnVtX3JlZ3M7CisJICBpZiAoaSA8IENSMTZfRklSU1RfRFdPUkRfUkVH SVNURVIpCisJICAgIHRvdGFsX3B1c2hfYnl0ZXMgKz0gMjsKKwkgIGVsc2UK KwkgICAgdG90YWxfcHVzaF9ieXRlcyArPSA0OworCX0KKyAgICB9CisKKyAg aWYgKCFudW1fcmVncykKKyAgICByZXR1cm47CisKKyAgZHdhcmYgPSBnZW5f cnR4X1NFUVVFTkNFIChWT0lEbW9kZSwgcnR2ZWNfYWxsb2MgKG51bV9yZWdz ICsgMSkpOworICBkd2FyZl9wYXJfaW5kZXggPSBudW1fcmVnczsKKworICBm cm9tID0gY3VycmVudF9mcmFtZV9pbmZvLmxhc3RfcmVnX3RvX3NhdmUgKyAx OworICB0byA9IGN1cnJlbnRfZnJhbWVfaW5mby5sYXN0X3JlZ190b19zYXZl OworICB3b3JkX2NudCA9IDA7CisKKyAgZm9yIChpID0gY3VycmVudF9mcmFt ZV9pbmZvLmxhc3RfcmVnX3RvX3NhdmU7IGkgPj0gMDspCisgICAgeworICAg ICAgaWYgKCFjdXJyZW50X2ZyYW1lX2luZm8uc2F2ZV9yZWdzW2ldIHx8IDAg PT0gaSB8fCBzcGxpdF9oZXJlKQorCXsKKwkgIC8qIFRoaXMgYmxvY2sgb2Yg cmVncyBpcyBwdXNoZWQgaW4gb25lIGluc3RydWN0aW9uLiAgKi8KKwkgIGlm ICgwID09IGkgJiYgY3VycmVudF9mcmFtZV9pbmZvLnNhdmVfcmVnc1tpXSkK KwkgICAgZnJvbSA9IDA7CisKKwkgIGZvciAoaiA9IHRvOyBqID49IGZyb207 IC0taikKKwkgICAgeworCSAgICAgIGlmIChqIDwgQ1IxNl9GSVJTVF9EV09S RF9SRUdJU1RFUikKKwkJeworCQkgIG1vZGUgPSBISW1vZGU7CisJCSAgaW5j ID0gMTsKKwkJfQorCSAgICAgIGVsc2UKKwkJeworCQkgIG1vZGUgPSBTSW1v ZGU7CisJCSAgaW5jID0gMjsKKwkJfQorCSAgICAgIHJlZyA9IGdlbl9ydHhf UkVHIChtb2RlLCBqKTsKKwkgICAgICBvZmZzZXQgKz0gMiAqIGluYzsKKwkg ICAgICB0bXAgPSBnZW5fcnR4X1NFVCAoVk9JRG1vZGUsCisJCQkJIGdlbl9m cmFtZV9tZW0gKG1vZGUsCisJCQkJCQlwbHVzX2NvbnN0YW50CisJCQkJCQko c3RhY2tfcG9pbnRlcl9ydHgsCisJCQkJCQkgdG90YWxfcHVzaF9ieXRlcyAt IG9mZnNldCkpLAorCQkJCSByZWcpOworCSAgICAgIFJUWF9GUkFNRV9SRUxB VEVEX1AgKHRtcCkgPSAxOworCSAgICAgIFhWRUNFWFAgKGR3YXJmLCAwLCBk d2FyZl9wYXJfaW5kZXgtLSkgPSB0bXA7CisJICAgIH0KKwkgIGZyb20gPSBp OworCSAgdG8gPSAtLWk7CisJICBzcGxpdF9oZXJlID0gMDsKKwkgIHdvcmRf Y250ID0gMDsKKwkgIGNvbnRpbnVlOworCX0KKworICAgICAgaWYgKGkgIT0g UkVUVVJOX0FERFJFU1NfUkVHTlVNKQorCXsKKwkgIGluYyA9IChpIDwgQ1Ix Nl9GSVJTVF9EV09SRF9SRUdJU1RFUikgPyAxIDogMjsKKwkgIGlmICh3b3Jk X2NudCArIGluYyA+PSBNQVhfQ09VTlQgfHwgRlJBTUVfUE9JTlRFUl9SRUdO VU0gPT0gaSkKKwkgICAgeworCSAgICAgIHNwbGl0X2hlcmUgPSAxOworCSAg ICAgIGZyb20gPSBpOworCSAgICAgIGNvbnRpbnVlOworCSAgICB9CisJICB3 b3JkX2NudCArPSBpbmM7CisJfQorCisgICAgICBmcm9tID0gaS0tOworICAg IH0KKworICB0bXAgPSBnZW5fcnR4X1NFVCAoU0ltb2RlLCBzdGFja19wb2lu dGVyX3J0eCwKKwkJICAgICBnZW5fcnR4X1BMVVMgKFNJbW9kZSwgc3RhY2tf cG9pbnRlcl9ydHgsCisJCQkJICAgR0VOX0lOVCAoLW9mZnNldCkpKTsKKyAg UlRYX0ZSQU1FX1JFTEFURURfUCAodG1wKSA9IDE7CisgIFhWRUNFWFAgKGR3 YXJmLCAwLCAwKSA9IHRtcDsKKyAgUkVHX05PVEVTIChpbnNuKSA9IGdlbl9y dHhfRVhQUl9MSVNUIChTSW1vZGUsIGR3YXJmLAorCQkJCQlSRUdfTk9URVMg KGluc24pKTsKK30KKworLyoKK0NvbXBhY3RSSVNDIENSMTYgQXJjaGl0ZWN0 dXJlIHN0YWNrIGxheW91dDoKKworICAgICAwICstLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAgICB8CisgICAgLgorICAgIC4KKyAgICB8CisgICAgKz09PT09 PT09PT09PT09PT09PT09IFNwICh4KSA9IEFwICh4KzEpCisgICAgICBBIHwg QXJncyBmb3IgZnVuY3Rpb25zCisgICAgICB8IHwgY2FsbGVkIGJ5IFggYW5k ICAgICAgRHluYW1pY2FsbHkKKyAgICAgIHwgfCBEeW5hbWljIGFsbG9jYXRp b25zICBhbGxvY2F0ZWQgYW5kCisgICAgICB8IHwgKGFsbG9jYSwgdmFyaWFi bGUgICAgZGVhbGxvY2F0ZWQKKyAgU3RhY2sgfCBsZW5ndGggYXJyYXlzKS4K KyAgZ3Jvd3MgKy0tLS0tLS0tLS0tLS0tLS0tLS0tIEZwICh4KQorICBkb3du fCB8IExvY2FsIHZhcmlhYmxlcyBvZiBYCisgIHdhcmR8ICstLS0tLS0tLS0t LS0tLS0tLS0tLQorICAgICAgfCB8IFJlZ3Mgc2F2ZWQgZm9yIFgtMQorICAg ICAgfCArPT09PT09PT09PT09PT09PT09PT0gU3AgKHgtMSkgPSBBcCAoeCkK KyAgICB8IEFyZ3MgZm9yIGZ1bmMgWAorICAgIHwgcHVzaGVkIGJ5IFgtMQor ICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLSBGcCAoeC0xKQorICAgIHwKKyAg ICB8CisgICAgVgorKi8KK3ZvaWQKK2NyMTZfZXhwYW5kX3Byb2xvZ3VlICh2 b2lkKQoreworICBydHggaW5zbjsKKworICBjcjE2X2NvbXB1dGVfZnJhbWUg KCk7CisgIGNyMTZfY29tcHV0ZV9zYXZlX3JlZ3MgKCk7CisKKyAgLyogSWYg dGhlcmUgaXMgbm8gbmVlZCBpbiBwdXNoIGFuZCBhZGp1c3RtZW50IHRvIHNw LCByZXR1cm4uICAqLworICBpZiAoKGN1cnJlbnRfZnJhbWVfaW5mby50b3Rh bF9zaXplICsgY3VycmVudF9mcmFtZV9pbmZvLnJlZ19zaXplKSA9PSAwKQor ICAgIHJldHVybjsKKworICBpZiAoY3VycmVudF9mcmFtZV9pbmZvLmxhc3Rf cmVnX3RvX3NhdmUgIT0gLTEpCisgICAgeworICAgICAgLyogSWYgdGhlcmUg YXJlIHJlZ2lzdGVycyB0byBwdXNoLiAgKi8KKyAgICAgIGluc24gPSBlbWl0 X2luc24gKGdlbl9wdXNoX2Zvcl9wcm9sb2d1ZQorCQkJKEdFTl9JTlQgKGN1 cnJlbnRfZnJhbWVfaW5mby5yZWdfc2l6ZSkpKTsKKyAgICAgIGNyMTZfY3Jl YXRlX2R3YXJmX2Zvcl9tdWx0aV9wdXNoIChpbnNuKTsKKyAgICAgIFJUWF9G UkFNRV9SRUxBVEVEX1AgKGluc24pID0gMTsKKyAgICB9CisKKworICBpZiAo Y3VycmVudF9mcmFtZV9pbmZvLnRvdGFsX3NpemUgPiAwKQorICAgIHsKKyAg ICAgIGluc24gPSBlbWl0X2luc24gKGdlbl9hZGRzaTMgKHN0YWNrX3BvaW50 ZXJfcnR4LCBzdGFja19wb2ludGVyX3J0eCwKKwkJCQkgICAgR0VOX0lOVCAo LWN1cnJlbnRfZnJhbWVfaW5mby50b3RhbF9zaXplKSkpOworICAgICAgUlRY X0ZSQU1FX1JFTEFURURfUCAoaW5zbikgPSAxOworICAgIH0KKworICBpZiAo ZnJhbWVfcG9pbnRlcl9uZWVkZWQpCisgICAgeworICAgICAgLyogSW5pdGlh bGl6ZSB0aGUgZnJhbWUgcG9pbnRlciB3aXRoIHRoZSB2YWx1ZSBvZiB0aGUg c3RhY2sgcG9pbnRlcgorICAgICAgICAgcG9pbnRpbmcgbm93IHRvIHRoZSBs b2NhbHMuICAqLworICAgICAgaW5zbiA9IGVtaXRfbW92ZV9pbnNuIChmcmFt ZV9wb2ludGVyX3J0eCwgc3RhY2tfcG9pbnRlcl9ydHgpOworICAgIH0KK30K KworLyogR2VuZXJhdGUgaW5zbiB0aGF0IHVwZGF0ZXMgdGhlIHN0YWNrIGZv ciBsb2NhbCB2YXJpYWJsZXMgYW5kIHBhZGRpbmcgCisgICBmb3IgcmVnaXN0 ZXJzIHdlIHNhdmUuICAgLSBHZW5lcmF0ZSB0aGUgYXBwcm9wcmlhdGUgcmV0 dXJuIGluc24uICAqLwordm9pZAorY3IxNl9leHBhbmRfZXBpbG9ndWUgKHZv aWQpCit7CisgIHJ0eCBpbnNuOworCisgIC8qIE5vbnplcm8gaWYgd2UgbmVl ZCB0byByZXR1cm4gYW5kIHBvcCBvbmx5IFJBLiBUaGlzIHdpbGwgZ2VuZXJh dGUgYQorICAgICBkaWZmZXJlbnQgaW5zbi4gVGhpcyBkaWZmZXJlbnRpYXRl IGlzIGZvciB0aGUgcGVlcGhvbGVzIGZvciBjYWxsIGFzIAorICAgICBsYXN0 IHN0YXRlbWVudCBpbiBmdW5jdGlvbi4gICovCisgIGludCBvbmx5X3BvcHJl dF9SQSA9IChjdXJyZW50X2ZyYW1lX2luZm8uc2F2ZV9yZWdzW1JFVFVSTl9B RERSRVNTX1JFR05VTV0KKwkJCSYmIChjdXJyZW50X2ZyYW1lX2luZm8ucmVn X3NpemUgCisJCQkgPT0gQ1IxNl9VTklUU19QRVJfRFdPUkQpKTsKKyAgCisg IGlmIChmcmFtZV9wb2ludGVyX25lZWRlZCkKKyAgICB7CisgICAgICAvKiBS ZXN0b3JlIHRoZSBzdGFjayBwb2ludGVyIHdpdGggdGhlIGZyYW1lIHBvaW50 ZXJzIHZhbHVlLiAgKi8KKyAgICAgIGluc24gPSBlbWl0X21vdmVfaW5zbiAo c3RhY2tfcG9pbnRlcl9ydHgsIGZyYW1lX3BvaW50ZXJfcnR4KTsKKyAgICB9 CisKKyAgaWYgKGN1cnJlbnRfZnJhbWVfaW5mby50b3RhbF9zaXplID4gMCkK KyAgICB7CisgICAgICBpbnNuID0gZW1pdF9pbnNuIChnZW5fYWRkc2kzIChz dGFja19wb2ludGVyX3J0eCwgc3RhY2tfcG9pbnRlcl9ydHgsCisJCQkJICAg IEdFTl9JTlQgKGN1cnJlbnRfZnJhbWVfaW5mby50b3RhbF9zaXplKSkpOwor ICAgICAgUlRYX0ZSQU1FX1JFTEFURURfUCAoaW5zbikgPSAxOworICAgIH0K KworICBpZiAoY3J0bC0+Y2FsbHNfZWhfcmV0dXJuKQorICAgIHsKKyAgICAg IC8qIEFkZCB0aGlzIGhlcmUgc28gdGhhdCAocjUscjQpIGlzIGFjdHVhbGx5 IGxvYWRlZCB3aXRoIHRoZSBhZGp1c3RtZW50CisgICAgICAgICB2YWx1ZTsg b3RoZXJ3aXNlLCB0aGUgbG9hZCBtaWdodCBiZSBvcHRpbWl6ZWQgYXdheS4u LgorICAgICAgICAgTk9URTogcmVtZW1iZXIgdG8gc3VidHJhY3QgdGhlIGFk anVzdG1lbnQgYmVmb3JlIHBvcHBpbmcgdGhlIHJlZ3MKKyAgICAgICAgIGFu ZCBhZGQgaXQgYmFjayBiZWZvcmUgcmV0dXJuaW5nLiAgKi8KKyAgICAgIGlu c24gPSBlbWl0X2luc24gKGdlbl9hZGRzaTMgKHN0YWNrX3BvaW50ZXJfcnR4 LCBzdGFja19wb2ludGVyX3J0eCwKKwkJCQkgICAgRUhfUkVUVVJOX1NUQUNL QURKX1JUWCkpOworICAgIH0KKworICBpZiAoY3IxNl9pbnRlcnJ1cHRfZnVu Y3Rpb25fcCAoKSkKKyAgICB7CisgICAgICBpbnNuID0gZW1pdF9qdW1wX2lu c24gKGdlbl9pbnRlcnJ1cHRfcmV0dXJuICgpKTsKKyAgICAgIFJUWF9GUkFN RV9SRUxBVEVEX1AgKGluc24pID0gMTsKKyAgICB9CisgIGVsc2UgaWYgKGNy dGwtPmNhbGxzX2VoX3JldHVybikKKyAgICB7CisgICAgICAvKiBTcGVjaWFs IGNhc2UsIHBvcCB3aGF0J3MgbmVjZXNzYXJ5LCBhZGp1c3QgU1AgYW5kIGp1 bXAgdG8gKFJBKS4gICovCisgICAgICBpbnNuID0gZW1pdF9qdW1wX2luc24g KGdlbl9wb3BfYW5kX3BvcHJldF9yZXR1cm4gCisJCQkgICAgIChHRU5fSU5U IChjdXJyZW50X2ZyYW1lX2luZm8ucmVnX3NpemUpKSk7CisgICAgICBSVFhf RlJBTUVfUkVMQVRFRF9QIChpbnNuKSA9IDE7CisgICAgfQorICBlbHNlIGlm IChjdXJyZW50X2ZyYW1lX2luZm8ubGFzdF9yZWdfdG9fc2F2ZSA9PSAtMSkK KyAgICAvKiBOb3RoaW5nIHRvIHBvcC4gICovCisgICAgLyogRG9uJ3Qgb3V0 cHV0IGp1bXAgZm9yIGludGVycnVwdCByb3V0aW5lLCBvbmx5IHJldHguICAq LworICAgIGVtaXRfanVtcF9pbnNuIChnZW5fanVtcF9yZXR1cm4gKCkpOwor ICBlbHNlIGlmIChvbmx5X3BvcHJldF9SQSkKKyAgICB7CisgICAgICBpbnNu ID0gZW1pdF9qdW1wX2luc24gKGdlbl9wb3ByZXRfUkFfcmV0dXJuICgpKTsK KyAgICAgIFJUWF9GUkFNRV9SRUxBVEVEX1AgKGluc24pID0gMTsKKyAgICB9 CisgIGVsc2UKKyAgICB7CisgICAgICBpbnNuID0gZW1pdF9qdW1wX2luc24g KGdlbl9wb3BfYW5kX3BvcHJldF9yZXR1cm4gCisJCQkgICAgIChHRU5fSU5U IChjdXJyZW50X2ZyYW1lX2luZm8ucmVnX3NpemUpKSk7CisgICAgICBSVFhf RlJBTUVfUkVMQVRFRF9QIChpbnNuKSA9IDE7CisgICAgfQorfQorCisvKiBJ bXBsZW1lbnRzIEZSQU1FX1BPSU5URVJfUkVRVUlSRUQuICAqLworc3RhdGlj IGJvb2wKK2NyMTZfZnJhbWVfcG9pbnRlcl9yZXF1aXJlZCAodm9pZCkKK3sK KyAgcmV0dXJuIChjZnVuLT5jYWxsc19hbGxvY2EgfHwgY3J0bC0+Y2FsbHNf ZWhfcmV0dXJuCisJICB8fCBjZnVuLT5oYXNfbm9ubG9jYWxfbGFiZWwgfHwg Y3J0bC0+Y2FsbHNfZWhfcmV0dXJuKTsKK30KKworc3RhdGljIGJvb2wKK2Ny MTZfY2FuX2VsaW1pbmF0ZSAoY29uc3QgaW50IGZyb20gQVRUUklCVVRFX1VO VVNFRCwgY29uc3QgaW50IHRvKQoreworICByZXR1cm4gKHRvID09IFNUQUNL X1BPSU5URVJfUkVHTlVNID8gIWZyYW1lX3BvaW50ZXJfbmVlZGVkIDogdHJ1 ZSk7Cit9CisKKworLyogQSBDIGNvbXBvdW5kIHN0YXRlbWVudCB0aGF0IGF0 dGVtcHRzIHRvIHJlcGxhY2UgWCB3aXRoCisgICBhIHZhbGlkIG1lbW9yeSBh ZGRyZXNzIGZvciBhbiBvcGVyYW5kIG9mIG1vZGUgTU9ERS4gV0lOCisgICB3 aWxsIGJlIGEgQyBzdGF0ZW1lbnQgbGFiZWwgZWxzZXdoZXJlIGluIHRoZSBj b2RlLgorICAgWCB3aWxsIGFsd2F5cyBiZSB0aGUgcmVzdWx0IG9mIGEgY2Fs bCB0byBicmVha19vdXRfbWVtb3J5X3JlZnMgKCksCisgICBhbmQgT0xEWCB3 aWxsIGJlIHRoZSBvcGVyYW5kIHRoYXQgd2FzIGdpdmVuIHRvIHRoYXQgZnVu Y3Rpb24gdG8KKyAgIHByb2R1Y2UgWC4KKyAgIFRoZSBjb2RlIGdlbmVyYXRl ZCBieSB0aGlzIG1hY3JvIHNob3VsZCBub3QgYWx0ZXIgdGhlCisgICBzdWJz dHJ1Y3R1cmUgb2YgWC4gIElmIGl0IHRyYW5zZm9ybXMgWCBpbnRvIGEgbW9y ZSBsZWdpdGltYXRlIGZvcm0sIAorICAgaXQgc2hvdWxkIGFzc2lnbiBYICh3 aGljaCB3aWxsIGFsd2F5cyBiZSBhIEMgdmFyaWFibGUpIGEgbmV3IHZhbHVl LiAgKi8KK3N0YXRpYyBydHgKK2NyMTZfbGVnaXRpbWl6ZV9hZGRyZXNzIChy dHggeCwgcnR4IG9yaWdfeCBBVFRSSUJVVEVfVU5VU0VELAorCQkJIGVudW0g bWFjaGluZV9tb2RlIG1vZGUgQVRUUklCVVRFX1VOVVNFRCkKK3sKKyAgaWYg KGZsYWdfcGljKQorICAgIHJldHVybiBsZWdpdGltaXplX3BpY19hZGRyZXNz IChvcmlnX3gsIG1vZGUsIE5VTExfUlRYKTsKKyAgZWxzZQorICAgIHJldHVy biB4OworfQorCisvKiBJbXBsZW1lbnQgVEFSR0VUX0xFR0lUSU1BVEVfQ09O U1RBTlRfUAorICAgTm9uemVybyBpZiBYIGlzIGEgbGVnaXRpbWF0ZSBjb25z dGFudCBmb3IgYW4gaW1tZWRpYXRlCisgICBvcGVyYW5kIG9uIHRoZSB0YXJn ZXQgbWFjaGluZS4gIFlvdSBjYW4gYXNzdW1lIHRoYXQgWAorICAgc2F0aXNm aWVzIENPTlNUQU5UX1AuIEluIGNyMTZjIHRyZWF0IGxlZ2l0aW1pemUgZmxv YXQgCisgICBjb25zdGFudCBhcyBhbiBpbW1lZGlhdGUgb3BlcmFuZC4gICov CitzdGF0aWMgYm9vbAorY3IxNl9sZWdpdGltYXRlX2NvbnN0YW50X3AgKGVu dW0gbWFjaGluZV9tb2RlIG1vZGUgQVRUUklCVVRFX1VOVVNFRCwKKwkJCSAg ICBydHggeCBBVFRSSUJVVEVfVU5VU0VEKQoreworICByZXR1cm4gMTsKK30K Kwordm9pZAorbm90aWNlX3VwZGF0ZV9jYyAocnR4IGV4cCkKK3sKKyAgaWYg KEdFVF9DT0RFIChleHApID09IFNFVCkKKyAgICB7CisgICAgICAvKiBKdW1w cyBkbyBub3QgYWx0ZXIgdGhlIGNjJ3MuICAqLworICAgICAgaWYgKFNFVF9E RVNUIChleHApID09IHBjX3J0eCkKKwlyZXR1cm47CisKKyAgICAgIC8qIE1v dmluZyByZWdpc3RlciBvciBtZW1vcnkgaW50byBhIHJlZ2lzdGVyOgorICAg ICAgICAgaXQgZG9lc24ndCBhbHRlciB0aGUgY2MncywgYnV0IGl0IG1pZ2h0 IGludmFsaWRhdGUKKyAgICAgICAgIHRoZSBSVFgncyB3aGljaCB3ZSByZW1l bWJlciB0aGUgY2MncyBjYW1lIGZyb20uCisgICAgICAgICAoTm90ZSB0aGF0 IG1vdmluZyBhIGNvbnN0YW50IDAgb3IgMSBNQVkgc2V0IHRoZSBjYydzKS4g ICovCisgICAgICBpZiAoUkVHX1AgKFNFVF9ERVNUIChleHApKQorCSAgJiYg KFJFR19QIChTRVRfU1JDIChleHApKSB8fCBHRVRfQ09ERSAoU0VUX1NSQyAo ZXhwKSkgPT0gTUVNKSkKKwl7CisJICByZXR1cm47CisJfQorCisgICAgICAv KiBNb3ZpbmcgcmVnaXN0ZXIgaW50byBtZW1vcnkgZG9lc24ndCBhbHRlciB0 aGUgY2Mncy4KKyAgICAgICAgIEl0IG1heSBpbnZhbGlkYXRlIHRoZSBSVFgn cyB3aGljaCB3ZSByZW1lbWJlciB0aGUgY2MncyBjYW1lIGZyb20uICAqLwor ICAgICAgaWYgKEdFVF9DT0RFIChTRVRfREVTVCAoZXhwKSkgPT0gTUVNICYm IFJFR19QIChTRVRfU1JDIChleHApKSkKKwl7CisJICByZXR1cm47CisJfQor CisgICAgfQorCisgIENDX1NUQVRVU19JTklUOworICByZXR1cm47Cit9CisK K3N0YXRpYyBlbnVtIG1hY2hpbmVfbW9kZQorY3IxNl91bndpbmRfd29yZF9t b2RlICh2b2lkKQoreworICByZXR1cm4gU0ltb2RlOworfQorCisvKiBIZWxw ZXIgZnVuY3Rpb24gZm9yIG1kIGZpbGUuIFRoaXMgZnVuY3Rpb24gaXMgdXNl ZCB0byBlbWl0IGFyaXRobWV0aWMgCisgICBESSBpbnN0cnVjdGlvbnMuIFRo ZSBhcmd1bWVudCAibnVtIiBkZWNpZGVzIHdoaWNoIGluc3RydWN0aW9uIHRv IGJlCisgICBwcmludGVkLiAgKi8KK2NvbnN0IGNoYXIgKgorY3IxNl9lbWl0 X2FkZF9zdWJfZGkgKHJ0eCAqb3BlcmFuZHMsIGludCBudW0pCit7CisKKyAg cnR4IGxvX29wWzJdIDsKKyAgcnR4IGhpMF9vcFsyXSA7CisgIHJ0eCBoaTFf b3BbMl0gOworCisgIGxvX29wWzBdID0gZ2VuX2xvd3BhcnQgKFNJbW9kZSwg b3BlcmFuZHNbMF0pOworICBoaTBfb3BbMF0gPSBzaW1wbGlmeV9nZW5fc3Vi cmVnIChISW1vZGUsIG9wZXJhbmRzWzBdLCBESW1vZGUsIDQpOworICBoaTFf b3BbMF0gPSBzaW1wbGlmeV9nZW5fc3VicmVnIChISW1vZGUsIG9wZXJhbmRz WzBdLCBESW1vZGUsIDYpOworCisgIGxvX29wWzFdID0gZ2VuX2xvd3BhcnQg KFNJbW9kZSwgb3BlcmFuZHNbMl0pOworICBoaTBfb3BbMV0gPSBzaW1wbGlm eV9nZW5fc3VicmVnIChISW1vZGUsIG9wZXJhbmRzWzJdLCBESW1vZGUsIDQp OworICBoaTFfb3BbMV0gPSBzaW1wbGlmeV9nZW5fc3VicmVnIChISW1vZGUs IG9wZXJhbmRzWzJdLCBESW1vZGUsIDYpOworCisgIGlmIChudW0gPT0gMCkK KyAgICB7CisgICAgICAgIG91dHB1dF9hc21faW5zbiAoImFkZGRcdCUxLCAl MCIsIGxvX29wKSA7CisgICAgICAgIG91dHB1dF9hc21faW5zbiAoImFkZGN3 XHQlMSwgJTAiLCBoaTBfb3ApIDsKKyAgICAgICAgb3V0cHV0X2FzbV9pbnNu ICgiYWRkY3dcdCUxLCAlMCIsIGhpMV9vcCkgOworICAgICAgICByZXR1cm4g IiI7CisgICAgfQorICBlbHNlIGlmIChudW0gPT0gMSkKKyAgICB7CisgICAg ICAgIG91dHB1dF9hc21faW5zbiAoInN1YmRcdCUxLCAlMCIsIGxvX29wKSA7 CisgICAgICAgIG91dHB1dF9hc21faW5zbiAoInN1YmN3XHQlMSwgJTAiLCBo aTBfb3ApIDsKKyAgICAgICAgb3V0cHV0X2FzbV9pbnNuICgic3ViY3dcdCUx LCAlMCIsIGhpMV9vcCkgOworICAgICAgICByZXR1cm4gIiI7CisgICAgfQor ICBlbHNlCisgICAgcmV0dXJuICIiOworCit9CisKKworLyogSGVscGVyIGZ1 bmN0aW9uIGZvciBtZCBmaWxlLiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8g ZW1pdCBsb2dpY2FsIAorICAgREkgaW5zdHJ1Y3Rpb25zLiBUaGUgYXJndW1l bnQgIm51bSIgZGVjaWRlcyB3aGljaCBpbnN0cnVjdGlvbiB0byBiZQorICAg cHJpbnRlZC4gICovCitjb25zdCBjaGFyICoKK2NyMTZfZW1pdF9sb2dpY2Fs X2RpIChydHggKm9wZXJhbmRzLCBpbnQgbnVtKQoreworCisgIHJ0eCBsb19v cFsyXSA7CisgIHJ0eCBoaV9vcFsyXSA7CisKKyAgbG9fb3BbMF0gPSBnZW5f bG93cGFydCAoU0ltb2RlLCBvcGVyYW5kc1swXSk7CisgIGhpX29wWzBdID0g c2ltcGxpZnlfZ2VuX3N1YnJlZyAoU0ltb2RlLCBvcGVyYW5kc1swXSwgRElt b2RlLCA0KTsKKworICBsb19vcFsxXSA9IGdlbl9sb3dwYXJ0IChTSW1vZGUs IG9wZXJhbmRzWzJdKTsKKyAgaGlfb3BbMV0gPSBzaW1wbGlmeV9nZW5fc3Vi cmVnIChTSW1vZGUsIG9wZXJhbmRzWzJdLCBESW1vZGUsIDQpOworICBpZiAo bnVtID09IDApCisgICAgeworICAgICAgICBvdXRwdXRfYXNtX2luc24gKCJh bmRkXHQlMSwgJTAiLCBsb19vcCkgOworICAgICAgICBvdXRwdXRfYXNtX2lu c24gKCJhbmRkXHQlMSwgJTAiLCBoaV9vcCkgOworICAgICAgICByZXR1cm4g IiI7CisgICAgfQorICBlbHNlIGlmIChudW0gPT0gMSkKKyAgICB7CisgICAg ICAgIG91dHB1dF9hc21faW5zbiAoIm9yZFx0JTEsICUwIiwgbG9fb3ApIDsK KyAgICAgICAgb3V0cHV0X2FzbV9pbnNuICgib3JkXHQlMSwgJTAiLCBoaV9v cCkgOworICAgICAgICByZXR1cm4gIiI7CisgICAgfQorICBlbHNlIGlmIChu dW0gPT0gMikKKyAgICB7CisgICAgICAgIG91dHB1dF9hc21faW5zbiAoInhv cmRcdCUxLCAlMCIsIGxvX29wKSA7CisgICAgICAgIG91dHB1dF9hc21faW5z biAoInhvcmRcdCUxLCAlMCIsIGhpX29wKSA7CisgICAgICAgIHJldHVybiAi IjsKKyAgICB9CisgIGVsc2UKKyAgICByZXR1cm4gIiI7Cit9CisKKy8qIElu aXRpYWxpemUgJ3RhcmdldG0nIHZhcmlhYmxlIHdoaWNoIGNvbnRhaW5zIHBv aW50ZXJzIHRvIGZ1bmN0aW9ucyAKKyAgIGFuZCBkYXRhIHJlbGF0aW5nIHRv IHRoZSB0YXJnZXQgbWFjaGluZS4gICovCisKK3N0cnVjdCBnY2NfdGFyZ2V0 IHRhcmdldG0gPSBUQVJHRVRfSU5JVElBTElaRVI7CmRpZmYgLXVwck4gb3Jp Zy9nY2MvY29uZmlnL2NyMTYvY3IxNi5oIG1vZC9nY2MvY29uZmlnL2NyMTYv Y3IxNi5oCi0tLSBvcmlnL2djYy9jb25maWcvY3IxNi9jcjE2LmgJMTk3MC0w MS0wMSAwNTozMDowMC4wMDAwMDAwMDAgKzA1MzAKKysrIG1vZC9nY2MvY29u ZmlnL2NyMTYvY3IxNi5oCTIwMTEtMDUtMjAgMTY6MTY6MTYuMDAwMDAwMDAw ICswNTMwCkBAIC0wLDAgKzEsNTkxIEBACisvKiBEZWZpbml0aW9ucyBvZiB0 YXJnZXQgbWFjaGluZSBmb3IgR05VIGNvbXBpbGVyLCBmb3IgQ1IxNi4KKyAg IENvcHlyaWdodCAoQykgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s IEluYy4KKyAgIENvbnRyaWJ1dGVkIGJ5IEtQSVQgQ3VtbWlucyBJbmZvc3lz dGVtcyBMaW1pdGVkLgorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0Mu CisKKyAgIEdDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgICB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hl ZAorICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy IHZlcnNpb24gMywgb3IgKGF0IHlvdXIKKyAgIG9wdGlvbikgYW55IGxhdGVy IHZlcnNpb24uCisKKyAgIEdDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICAgQU5Z IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YgTUVSQ0hBTlRBQklMSVRZCisgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljCisg ICBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQg aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENP UFlJTkczLiAgSWYgbm90IHNlZQorICAgPGh0dHA6Ly93d3cuZ251Lm9yZy9s aWNlbnNlcy8+LiAgKi8KKyAgIAorI2lmbmRlZiBHQ0NfQ1IxNl9ICisjZGVm aW5lIEdDQ19DUjE2X0gKKworI2RlZmluZSBPQkpFQ1RfRk9STUFUX0VMRgor CisvKiBDb250cm9sbGluZyB0aGUgZHJpdmVyLiAgKi8KKworLyogVGhlIEdO VSBDKysgc3RhbmRhcmQgbGlicmFyeSByZXF1aXJlcyB0aGF0IHRoZXNlIG1h Y3JvcyBiZSBkZWZpbmVkLiAgKi8KKyN1bmRlZiBDUExVU1BMVVNfQ1BQX1NQ RUMKKyNkZWZpbmUgQ1BMVVNQTFVTX0NQUF9TUEVDICItRF9HTlVfU09VUkNF ICUoY3BwKSIKKworI3VuZGVmICBTVEFSVEZJTEVfU1BFQworI2RlZmluZSBT VEFSVEZJTEVfU1BFQyAiY3J0MS5vJXMgY3J0aS5vJXMgY3J0YmVnaW4ubyVz IGNydGxpYmlkLm8lcyIKKworI3VuZGVmICBFTkRGSUxFX1NQRUMKKyNkZWZp bmUgRU5ERklMRV9TUEVDICJjcnRlbmQubyVzIGNydG4ubyVzIgorCisjdW5k ZWYgIE1BVEhfTElCUkFSWQorI2RlZmluZSBNQVRIX0xJQlJBUlkgIiIKKwor I3VuZGVmICBMSUJfU1BFQworI2RlZmluZSBMSUJfU1BFQyAiLSggLWxjICV7 bXNpbSo6LWxzaW19JXshbXNpbSo6LWxub3N5c30gLSkgXAorJXttc2ltKjol eyFUKjotVHNpbS5sZH19IFwKKyV7IVQqOiV7IW1zaW0qOiAley1UZWxmMzJj cjE2Lnh9fX0gIgorCisvKiBSdW4tdGltZSB0YXJnZXQgc3BlY2lmaWNhdGlv bi4gICovCisjaWZuZGVmIFRBUkdFVF9DUFVfQ1BQX0JVSUxUSU5TCisjZGVm aW5lIFRBUkdFVF9DUFVfQ1BQX0JVSUxUSU5TKCkgICAgICAgICAgXAorZG8g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg ICAgYnVpbHRpbl9kZWZpbmUgKCJfX0NSX18iKTsgICAgICAgICAgICAgXAor ICAgIGJ1aWx0aW5fZGVmaW5lICgiX19DUjE2X18iKTsgICAgICAgICAgIFwK KyAgICBidWlsdGluX2RlZmluZSAoIl9fQ1IxNkNfXyIpOyAgICAgICAgICBc CisgICAgaWYgKFRBUkdFVF9DUjE2Q1ApICAgICAgICAgICAgICAgICAgICAg XAorICAgICAgYnVpbHRpbl9kZWZpbmUgKCJfX0NSMTZDUF9fIik7ICAgICAg IFwKKyAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisgICAgICBidWlsdGluX2RlZmluZSAoIl9fQ1IxNkNTVERfXyIpOyAg ICAgXAorICAgIGlmIChDUjE2X1RBUkdFVF9EQVRBX05FQVIpICAgICAgICAg ICAgIFwKKyAgICAgIGJ1aWx0aW5fZGVmaW5lICgiX19EQVRBX05FQVJfXyIp OyAgICBcCisgICAgaWYgKENSMTZfVEFSR0VUX0RBVEFfTUVESVVNKSAgICAg ICAgICAgXAorICAgICAgYnVpbHRpbl9kZWZpbmUgKCJfX0RBVEFfTUVESVVN X18iKTsgIFwKKyAgICBpZiAoQ1IxNl9UQVJHRVRfREFUQV9GQVIpICAgICAg ICAgICAgICBcCisgICAgICBidWlsdGluX2RlZmluZSAoIl9fREFUQV9GQVJf XyIpOyAgICAgXAorICAgIGlmIChUQVJHRVRfSU5UMzIpICAgICAgICAgICAg ICAgICAgICAgIFwKKyAgICAgIGJ1aWx0aW5fZGVmaW5lICgiX19JTlQzMl9f Iik7ICAgICAgICAgXAorICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKK3doaWxlICgwKQorI2VuZGlmCisKKy8qIEZvcmNl IHRoZSBnZW5lcmF0aW9uIG9mIGR3YXJmIC5kZWJ1Z19mcmFtZSBzZWN0aW9u cyBldmVuIGlmIG5vdAorICAgY29tcGlsaW5nIC1nLiAgVGhpcyBndWFyYW50 ZWVzIHRoYXQgd2UgY2FuIHVud2luZCB0aGUgc3RhY2suICAqLworI2RlZmlu ZSBEV0FSRjJfRlJBTUVfSU5GTyAxCisKKyNkZWZpbmUgUFJFRkVSUkVEX0RF QlVHR0lOR19UWVBFIERXQVJGMl9ERUJVRworCisvKiBHZW5lcmF0ZSAuZmls ZS8ubG9jIGRpcmVjdGl2ZXMsIHNvIHRoYXQgdGhlIGFzc2VtYmxlciBnZW5l cmF0ZXMgdGhlCisgICBsaW5lIHRhYmxlLiAgKi8KKyNkZWZpbmUgRFdBUkYy X0FTTV9MSU5FX0RFQlVHX0lORk8gMQorCisjZGVmaW5lIENSMTZfVEFSR0VU X0RBVEFfTkVBUiAgIGNyMTZfaXNfZGF0YV9tb2RlbCAoRE1fTkVBUikKKyNk ZWZpbmUgQ1IxNl9UQVJHRVRfREFUQV9NRURJVU0gY3IxNl9pc19kYXRhX21v ZGVsIChETV9ERUZBVUxUKQorI2RlZmluZSBDUjE2X1RBUkdFVF9EQVRBX0ZB UiAgICBjcjE2X2lzX2RhdGFfbW9kZWwgKERNX0ZBUikKKworLyogU3RvcmFn ZSBsYXlvdXQuICAqLworI2RlZmluZSBCSVRTX0JJR19FTkRJQU4gICAgIDAK KworI2RlZmluZSBCWVRFU19CSUdfRU5ESUFOICAgIDAKKworI2RlZmluZSBX T1JEU19CSUdfRU5ESUFOICAgIDAKKworI2RlZmluZSBVTklUU19QRVJfV09S RCAgICAgIDIKKworLyogVW5pdHMgcGVyIDMyLWJpdCAoRFdPUkQpLiAgKi8K KyNkZWZpbmUgQ1IxNl9VTklUU19QRVJfRFdPUkQgNAorCisjZGVmaW5lIFBP SU5URVJfU0laRSAgICAgICAgMzIKKworI2RlZmluZSBQQVJNX0JPVU5EQVJZ ICAgICAgIDE2CisKKyNkZWZpbmUgU1RBQ0tfQk9VTkRBUlkgICAgICAoTUFY IChCSUdHRVNUX0FMSUdOTUVOVCwgUEFSTV9CT1VOREFSWSkpCisKKyNkZWZp bmUgRlVOQ1RJT05fQk9VTkRBUlkgICghb3B0aW1pemVfc2l6ZSA/IEJJR0dF U1RfQUxJR05NRU5UIDogQklUU19QRVJfV09SRCkKKworLyogQmlnZ2VzdCBh bGlnbm1lbnQgb24gQ1IxNkMrIGlzIDMyLWJpdCBhcyBpbnRlcm5hbCBidXMg aXMgQU1CQSBiYXNlZCAKKyAgIHdoZXJlIGFzIENSMTZDIGlzIHByb3ByaWV0 YXJ5IGludGVybmFsIGJ1cyBhcmNoaXRlY3R1cmUuICAqLworI2RlZmluZSBC SUdHRVNUX0FMSUdOTUVOVCAgICgoVEFSR0VUX0NSMTZDUCkgPyAzMiA6IDE2 KQorCisjZGVmaW5lIE1BWF9GSVhFRF9NT0RFX1NJWkUgNjQKKworLyogSW4g Q1IxNiBhcnJheXMgb2YgY2hhcnMgYXJlIHdvcmQtYWxpZ25lZCwgc28gc3Ry Y3B5ICgpIHdpbGwgYmUgZmFzdGVyLiAgKi8KKyNkZWZpbmUgREFUQV9BTElH Tk1FTlQoVFlQRSwgQUxJR04pICAgICAgICAgICAgIFwKKyAgKCgoVFJFRV9D T0RFIChUWVBFKSA9PSBBUlJBWV9UWVBFKSAgICAgICAgICAgIFwKKyAgICAg JiYgKFRZUEVfTU9ERSAoVFJFRV9UWVBFIChUWVBFKSkgPT0gUUltb2RlKSBc CisgICAgICYmICgoQUxJR04pIDwgQklUU19QRVJfV09SRCkpICAgICAgICAg ICAgICAgXAorICAgICA/IChCSVRTX1BFUl9XT1JEKSA6IChBTElHTikpCisK Ky8qIEluIENSMTYgc3RyaW5ncyBhcmUgd29yZC1hbGlnbmU7IHN0cmNweSBm cm9tIGNvbnN0YW50cyB3aWxsIGJlIGZhc3Rlci4gICovCisjZGVmaW5lIENP TlNUQU5UX0FMSUdOTUVOVChDT05TVEFOVCwgQUxJR04pICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKyAgKCgoVFJFRV9DT0RFIChDT05TVEFOVCkg PT0gU1RSSU5HX0NTVCkgJiYgKChBTElHTikgPCBCSVRTX1BFUl9XT1JEKSkg XAorICAgICA/IChCSVRTX1BFUl9XT1JEKSA6IChBTElHTikpCisKKyNkZWZp bmUgU1RSSUNUX0FMSUdOTUVOVCAwCisKKyNkZWZpbmUgUENDX0JJVEZJRUxE X1RZUEVfTUFUVEVSUyAxCisKKy8qIExheW91dCBvZiBzb3VyY2UgbGFuZ3Vh Z2UgZGF0YSB0eXBlcy4gICovCisjZGVmaW5lIElOVF9UWVBFX1NJWkUgICAg ICAgKFRBUkdFVF9JTlQzMiA/IDMyIDogMTYpCisKKyNkZWZpbmUgU0hPUlRf VFlQRV9TSVpFICAgICAxNgorCisjZGVmaW5lIExPTkdfVFlQRV9TSVpFICAg ICAgMzIKKworI2RlZmluZSBMT05HX0xPTkdfVFlQRV9TSVpFIDY0CisKKyNk ZWZpbmUgRkxPQVRfVFlQRV9TSVpFICAgICAzMgorCisjZGVmaW5lIERPVUJM RV9UWVBFX1NJWkUgICAgNjQKKworI2RlZmluZSBMT05HX0RPVUJMRV9UWVBF X1NJWkUgNjQKKworI2RlZmluZSBERUZBVUxUX1NJR05FRF9DSEFSIDEKKwor I2RlZmluZSBTSVpFX1RZUEUgICAgICAgICAgICJsb25nIHVuc2lnbmVkIGlu dCIKKworI2RlZmluZSBQVFJESUZGX1RZUEUgICAgICAgICJsb25nIGludCIK KworI2RlZmluZSBXQ0hBUl9UWVBFICAgICAgICAgICJzaG9ydCB1bnNpZ25l ZCBpbnQiCisKKyNkZWZpbmUgV0NIQVJfVFlQRV9TSVpFICAgICAxNgorCisv KiBCeSBkZWZhdWx0LCB0aGUgQysrIGNvbXBpbGVyIHdpbGwgdXNlIHRoZSBs b3dlc3QgYml0IG9mIHRoZSBwb2ludGVyCisgICB0byBmdW5jdGlvbiB0byBp bmRpY2F0ZSBhIHBvaW50ZXItdG8tbWVtYmVyLWZ1bmN0aW9uIHBvaW50cyB0 byBhCisgICB2aXJ0dWFsIG1lbWJlciBmdW5jdGlvbi4gIEhvd2V2ZXIsIGlu IENSIGFyY2hpdGVjdHVyZSBGVU5DVElPTl9CT1VOREFSWQorICAgaW5kaWNh dGVzIGZ1bmN0aW9uIGFkZHJlc3NlcyBhcmUgYWx3YXlzIGV2ZW4sIGJ1dCBm dW5jdGlvbiBwb2ludGVycyBjYW4gYmUKKyAgIG9kZCAoYWZ0ZXIgcmlnaHQt c2hpZnRpbmcgdGhlbSB3aGVuIGxvYWRpbmcgdGhlbSBpbnRvIGEgcmVnaXN0 ZXIpLCBhbmQgdGhlCisgICBkZWZhdWx0IGRvZXNuJ3Qgd29yay4gIEluIHRo YXQgY2FzZSwgdGhlIGxvd2VzdCBiaXQgb2YgdGhlIGRlbHRhCisgICBmaWVs ZCB3aWxsIGJlIHVzZWQgKHRoZSByZW1haW5kZXIgb2YgdGhlIGZpZWxkIGlz IHNoaWZ0ZWQgdG8gdGhlIGxlZnQpLiAgKi8KKyNkZWZpbmUgVEFSR0VUX1BU Uk1FTUZVTkNfVkJJVF9MT0NBVElPTiAgICAgcHRybWVtZnVuY192Yml0X2lu X2RlbHRhCisKKy8qIERlZmluZSBERUZBVUxUX1BDQ19TVFJVQ1RfUkVUVVJO IHRvIDEgaWYgYWxsIHN0cnVjdHVyZSBhbmQgdW5pb24gcmV0dXJuCisgICB2 YWx1ZXMgbXVzdCBiZSBpbiBtZW1vcnkuICAqLworI2RlZmluZSBERUZBVUxU X1BDQ19TVFJVQ1RfUkVUVVJOIDAKKworLyogUmVnaXN0ZXIgdXNhZ2UuICAq LworCisvKiBGaXJzdCAzMi1iaXQgcmVnaXN0ZXIgaXMgUjEyLiAgKi8KKyNk ZWZpbmUgQ1IxNl9GSVJTVF9EV09SRF9SRUdJU1RFUiAgIDEyCisKKyNkZWZp bmUgRklSU1RfUFNFVURPX1JFR0lTVEVSICAgICAgIDE2CisKKy8qIDEgZm9y IHJlZ2lzdGVycyB0aGF0IGhhdmUgcGVydmFzaXZlIHN0YW5kYXJkIHVzZXMK KyAgIGFuZCBhcmUgbm90IGF2YWlsYWJsZSBmb3IgdGhlIHJlZ2lzdGVyIGFs bG9jYXRvci4KKyAgIE9uIHRoZSBDUjE2LCBvbmx5IHRoZSBzdGFjayBwb2lu dGVyIChyMTUpIGlzIHN1Y2guICAqLworI2RlZmluZSBGSVhFRF9SRUdJU1RF UlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorICAvKiByMCAgcjEgIHIyICByMyAgcjQgIHI1ICByNiAgcjcgIHI4ICBy OSAgcjEwLiAgKi8gXAorICAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAs ICAwLCAgMCwgIDAsICAwLCAgICAgICAgXAorICAvKiByMTEgcjEyIHIxMyBy YSAgc3AuICAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIDAs ICAwLCAgMCwgIDAsICAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorICB9ICAgICAgCisKKy8qIDEgZm9yIHJlZ2lzdGVycyBub3QgYXZh aWxhYmxlIGFjcm9zcyBmdW5jdGlvbiBjYWxscy4KKyAgIFRoZXNlIG11c3Qg aW5jbHVkZSB0aGUgRklYRURfUkVHSVNURVJTIGFuZCBhbHNvIGFueQorICAg cmVnaXN0ZXJzIHRoYXQgY2FuIGJlIHVzZWQgd2l0aG91dCBiZWluZyBzYXZl ZC4KKyAgIFRoZSBsYXR0ZXIgbXVzdCBpbmNsdWRlIHRoZSByZWdpc3RlcnMg d2hlcmUgdmFsdWVzIGFyZSByZXR1cm5lZAorICAgYW5kIHRoZSByZWdpc3Rl ciB3aGVyZSBzdHJ1Y3R1cmUtdmFsdWUgYWRkcmVzc2VzIGFyZSBwYXNzZWQu CisgCisgICBPbiB0aGUgQ1IxNiwgY2FsbHMgY2xvYmJlcnMgcjAtcjYgKHNj cmF0Y2ggcmVnaXN0ZXJzKSwgCisgICByYSAodGhlIHJldHVybiBhZGRyZXNz KSBhbmQgc3AgKHRoZSBzdGFjayBwb2ludGVyKS4gICovCisjZGVmaW5lIENB TExfVVNFRF9SRUdJU1RFUlMgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisgIC8qIHIwICByMSAgcjIgIHIzICByNCAgcjUgIHI2 ICByNyAgcjggIHI5ICByMTAuICAqLyBcCisgICAgMSwgIDEsICAxLCAgMSwg IDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAgICAgICBcCisgIC8qIHIx MSByMTIgcjEzIHJhICBzcC4gICovICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisgICAgMCwgIDAsICAwLCAgMSwgIDEgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCisgIH0KKworLyogUmV0dXJucyAxIGlmIHRoZSBy ZWdpc3RlciBpcyBsb25nZXIgdGhhbiB3b3JkIHNpemUsIDAgb3RoZXJ3aXNl LiAgKi8KKyNkZWZpbmUgTE9OR19SRUdfUChSRUdOTykgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAo SEFSRF9SRUdOT19OUkVHUyAoUkVHTk8sICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIAkJICAgICBHRVRf TU9ERV9XSURFUl9NT0RFIChzbWFsbGVzdF9tb2RlX2Zvcl9zaXplCSAgICAg XAorICAJCQkJCSAgKEJJVFNfUEVSX1dPUkQsIE1PREVfSU5UKSkpICAgICAg ICBcCisgICAJCSAgICAgID09IDEpCisKKyNkZWZpbmUgSEFSRF9SRUdOT19O UkVHUyhSRUdOTywgTU9ERSkgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorICgoUkVHTk8gPj0gQ1IxNl9GSVJTVF9EV09SRF9S RUdJU1RFUikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisgID8gKChHRVRfTU9ERV9TSVpFIChNT0RFKSArIENSMTZfVU5JVFNf UEVSX0RXT1JEIC0gMSkgLyBDUjE2X1VOSVRTX1BFUl9EV09SRClcCisgIDog KChHRVRfTU9ERV9TSVpFIChNT0RFKSArIFVOSVRTX1BFUl9XT1JEICAgICAg IC0gMSkgLyBVTklUU19QRVJfV09SRCkpCisKKy8qIE5vbnplcm8gaWYgaXQg aXMgcGVybWlzc2libGUgdG8gc3RvcmUgYSB2YWx1ZSBvZiBtb2RlIEB2YXJ7 bW9kZX0gaW4gaGFyZAorICAgcmVnaXN0ZXIgbnVtYmVyIEB2YXJ7cmVnbm99 IChvciBpbiBzZXZlcmFsIHJlZ2lzdGVycyBzdGFydGluZyB3aXRoIHRoYXQK KyAgIG9uZSkuICBPbiB0aGUgQ1IxNiBhcmNoaXRlY3R1cmUsIGFsbCByZWdp c3RlcnMgY2FuIGhvbGQgYWxsIG1vZGVzLAorICAgZXhjZXB0IHRoYXQgZG91 YmxlIHByZWNpc2lvbiBmbG9hdHMgKGFuZCBkb3VibGUgaW50cykgbXVzdCBm YWxsIG9uCisgICBldmVuLXJlZ2lzdGVyIGJvdW5kYXJpZXMuICAqLyAKKyNk ZWZpbmUgSEFSRF9SRUdOT19NT0RFX09LKFJFR05PLCBNT0RFKSBjcjE2X2hh cmRfcmVnbm9fbW9kZV9vayAoUkVHTk8sIE1PREUpCisKKyNkZWZpbmUgTk9U SUNFX1VQREFURV9DQyhFWFAsIElOU04pIFwKKyAgIG5vdGljZV91cGRhdGVf Y2MgKChFWFApKQorCisvKiBJbnRlcnJ1cHQgZnVuY3Rpb25zIGNhbiBvbmx5 IHVzZSByZWdpc3RlcnMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiAKKyAgIHNh dmVkIGJ5IHRoZSBwcm9sb2d1ZSwgZXZlbiBpZiB0aGV5IHdvdWxkIG5vcm1h bGx5IGJlIGNhbGwtY2xvYmJlcmVkIAorICAgQ2hlY2sgaWYgc2l6ZXMgYXJl IHNhbWUgYW5kIHRoZW4gY2hlY2sgaWYgaXQgaXMgcG9zc2libGUgdG8gcmVu YW1lLiAgKi8KKyNkZWZpbmUgSEFSRF9SRUdOT19SRU5BTUVfT0soU1JDLCBE RVNUKSAgICAgICAgICAgICAgICAgXAorICAoIWNyMTZfaW50ZXJydXB0X2Z1 bmN0aW9uX3AgKCkgfHwgKGRmX3JlZ3NfZXZlcl9saXZlX3AgKERFU1QpKSkK KworLyogRXhjZXB0aW9uIGhhbmRsaW5nIHN0dWZmLiAgKi8KKworLypUbyBl bnN1cmUgY29ycmVjdCBkd2FyZiB1bndpbmRpbmcuICAqLworI2RlZmluZSBM SUJHQ0MyX1VOV0lORF9BVFRSSUJVVEUgX19hdHRyaWJ1dGVfXygob3B0aW1p emUgKCJuby1nY3NlIiwibm8tZHNlIikpKQorCisjZGVmaW5lIGdlbl9ydHhf UkEJZ2VuX3J0eF9SRUcgKFBtb2RlLCBSRVRVUk5fQUREUkVTU19SRUdOVU0p CisKKy8qIFVzZSAocjgscjcpIGFuZCAocjEwLHI5KSB0byBwYXNzIGV4Y2Vw dGlvbiBoYW5kbGluZyBpbmZvcm1hdGlvbi4gICovCisjZGVmaW5lIEVIX1JF VFVSTl9EQVRBX1JFR05PKE4pICgoKE4pIDwgMikgPyAoTioyICsgNykgOiBJ TlZBTElEX1JFR05VTSkKKworI2RlZmluZSBEV0FSRjJfVU5XSU5EX0lORk8g MQorCisvKiAocjUscjQpIGhvbGRzIGEgc3RhY2sgYWRqdXN0bWVudCBmb3Ig cmV0dXJuaW5nIHRvIGEgaGFuZGxlci4gICovCisjZGVmaW5lIEVIX1JFVFVS Tl9TVEFDS0FESl9SVFggCQlnZW5fcnR4X1JFRyAoUG1vZGUsIDQpCisKKyNk ZWZpbmUgRUhfUkVUVVJOX0hBTkRMRVJfUlRYIFwKKyAgZ2VuX3J0eF9NRU0g KFBtb2RlLCBwbHVzX2NvbnN0YW50IChhcmdfcG9pbnRlcl9ydHgsIC00KSkK KworI2RlZmluZSBJTkNPTUlOR19SRVRVUk5fQUREUl9SVFgJZ2VuX3J0eF9S QQorCisjZGVmaW5lIERXQVJGX0ZSQU1FX1JFVFVSTl9DT0xVTU4JXAorICBE V0FSRl9GUkFNRV9SRUdOVU0gKFJFVFVSTl9BRERSRVNTX1JFR05VTSkKKwor I2RlZmluZSBJTkNPTUlOR19GUkFNRV9TUF9PRkZTRVQJCTAJCisjZGVmaW5l IEZSQU1FX1BPSU5URVJfQ0ZBX09GRlNFVChGTkRFQ0wpCTAJCisKKy8qIEEg QyBleHByZXNzaW9uIHdob3NlIHZhbHVlIGlzIFJUTCByZXByZXNlbnRpbmcg dGhlIHZhbHVlIG9mIHRoZSByZXR1cm4KKyAgIGFkZHJlc3MgZm9yIHRoZSBm cmFtZSBDT1VOVCBzdGVwcyB1cCBmcm9tIHRoZSBjdXJyZW50IGZyYW1lLiAg Ki8KKyNkZWZpbmUgUkVUVVJOX0FERFJfUlRYKENPVU5ULCBGUkFNRSkgCQkJ ICAJCVwKKyAgKDAgPT0gQ09VTlQpCT8gIGdlbl9ydHhfUExVUyAoUG1vZGUs IGdlbl9ydHhfUkEsIGdlbl9ydHhfUkEpCQlcCisJCTogIGNvbnN0MF9ydHgK KworI2RlZmluZSBNT0RFU19USUVBQkxFX1AoTU9ERTEsIE1PREUyKSAgXAor ICAoR0VUX01PREVfQ0xBU1MgKE1PREUxKSA9PSBHRVRfTU9ERV9DTEFTUyAo TU9ERTIpKQorCitlbnVtIHJlZ19jbGFzcworeworICBOT19SRUdTLAorICBT SE9SVF9SRUdTLAorICBMT05HX1JFR1MsCisgIE5PU1BfUkVHUywKKyAgRE9V QkxFX0JBU0VfUkVHUywKKyAgR0VORVJBTF9SRUdTLAorICBBTExfUkVHUywK KyAgTElNX1JFR19DTEFTU0VTCit9OworCisjZGVmaW5lIE5fUkVHX0NMQVNT RVMgKGludCkgTElNX1JFR19DTEFTU0VTCisKKyNkZWZpbmUgUkVHX0NMQVNT X05BTUVTCVwKKyAgewkJCVwKKyAgICAiTk9fUkVHUyIsCQlcCisgICAgIlNI T1JUX1JFR1MiLAlcCisgICAgIkxPTkdfUkVHUyIsCVwKKyAgICAiTk9TUF9S RUdTIiwJXAorICAgICJET1VCTEVfQkFTRV9SRUdTIiwJXAorICAgICJHRU5F UkFMX1JFR1MiLAlcCisgICAgIkFMTF9SRUdTIgkJXAorICB9CisKKyNkZWZp bmUgUkVHX0NMQVNTX0NPTlRFTlRTCQkJICAgICAJCVwKKyAgewkJCQkJCSAg ICAgCQlcCisgICAgezB4MDAwMDAwMDB9LCAvKiBOT19SRUdTCQkgICAgICAg ICAgICAgKi8gIAlcCisgICAgezB4MDAwMDBGRkZ9LCAvKiBTSE9SVF9SRUdT IAk6IDAgLSAxMSAgICAgKi8gICAJXAorICAgIHsweDAwMDBGMDAwfSwgLyog TE9OR19SRUdTIAkJOiAxMiAtIDE1ICAgICovICAJXAorICAgIHsweDAwMDA3 RkZGfSwgLyogTk9TUF9SRUdTIAkJOiAwIC0gMTQgICAgICovICAgCVwKKyAg ICB7MHgwMDAwRjU1NX0sIC8qIERPVUJMRV9CQVNFX1JFR1MgICA6IDIsNCw2 LDgsMTAgKi8gIAlcCisgICAgezB4MDAwMEZGRkZ9LCAvKiBHRU5FUkFMX1JF R1MJOiAwIC0gMTUgICAgICovICAJXAorICAgIHsweDAwMDBGRkZGfSAgLyog QUxMX1JFR1MgCQk6IDAgLSAxNSAgICAgKi8gIAlcCisgIH0KKworI2RlZmlu ZSBUQVJHRVRfU01BTExfUkVHSVNURVJfQ0xBU1NFU19GT1JfTU9ERV9QICBo b29rX2Jvb2xfbW9kZV90cnVlIAorCisjZGVmaW5lIFJFR05PX1JFR19DTEFT UyhSRUdOTykgIGNyMTZfcmVnbm9fcmVnX2NsYXNzIChSRUdOTykKKworI2Rl ZmluZSBCQVNFX1JFR19DTEFTUyAgICAgIEdFTkVSQUxfUkVHUworCisjZGVm aW5lIE1PREVfQkFTRV9SRUdfQ0xBU1MoTU9ERSkgXAorICAoR0VUX01PREVf U0laRSAoTU9ERSkgPD0gNCA/ICAoQkFTRV9SRUdfQ0xBU1MpIDogIChET1VC TEVfQkFTRV9SRUdTKSkKKworI2RlZmluZSBJTkRFWF9SRUdfQ0xBU1MgICAg ICBMT05HX1JFR1MKKworI2RlZmluZSBDUjE2X1JFR05PX09LX0ZPUl9CQVNF X1AoUkVHTk8pICAgICAgICAgICAgICAgIFwKKyAgKCgoUkVHTk8pIDwgRklS U1RfUFNFVURPX1JFR0lTVEVSKSAgICAgICAgICAgICAgICAgICBcCisgICB8 fCAocmVnX3JlbnVtYmVyICYmICgodW5zaWduZWQpIHJlZ19yZW51bWJlcltS RUdOT10gXAorICAgICAgICAgICAgICAgICAgICAgICAgPCBGSVJTVF9QU0VV RE9fUkVHSVNURVIpKSkKKworLyogVXNlIGV2ZW4tbnVtYmVyZWQgcmVnIGZv ciA2NC1iaXQgYWNjZXNzZXMuICAqLworI2RlZmluZSBSRUdOT19NT0RFX09L X0ZPUl9CQVNFX1AoUkVHTk8sIE1PREUpCSAgXAorCShDUjE2X1JFR05PX09L X0ZPUl9CQVNFX1AoUkVHTk8pICAmJgkgIFwKKwkgICgoR0VUX01PREVfU0la RSAoTU9ERSkgPiA0ICAmJiAgCSAgXAorCSAgICAgKFJFR05PKSA8IENSMTZf RklSU1RfRFdPUkRfUkVHSVNURVIpXAorCSAgICAgPyAoMCA9PSAoKFJFR05P KSAmIDEpKSBcCisJICAgICA6IDEpKQorCisvKiBUT0RPOiBGb3Igbm93IGxl dHMgbm90IHN1cHBvcnQgaW5kZXggYWRkcmVzc2luZyBtb2RlLiAgKi8KKyNk ZWZpbmUgUkVHTk9fT0tfRk9SX0lOREVYX1AoUkVHTk8pICAgICAgICBcCisg ICgoKFJFR05PID49IENSMTZfRklSU1RfRFdPUkRfUkVHSVNURVIpICBcCisg ICAgICYmICgoUkVHTk8pIDwgRklSU1RfUFNFVURPX1JFR0lTVEVSKSkgXAor ICAgfHwgKHJlZ19yZW51bWJlciAgICAgICAgICAgICAgICAgICAgICAgIFwK KyAgICAgICAmJiAoKCh1bnNpZ25lZCkgcmVnX3JlbnVtYmVyW1JFR05PXSA+ PSBDUjE2X0ZJUlNUX0RXT1JEX1JFR0lTVEVSKSBcCisgICAgICAgICAgICAm JiAoKHVuc2lnbmVkKSByZWdfcmVudW1iZXJbUkVHTk9dIDwgRklSU1RfUFNF VURPX1JFR0lTVEVSKSkpXAorICApCisKKyNkZWZpbmUgUFJFRkVSUkVEX1JF TE9BRF9DTEFTUyhYLCBDTEFTUykgQ0xBU1MKKworLyogVGhlIG1heGltdW0g bnVtYmVyIG9mIGNvbnNlY3V0aXZlIHJlZ2lzdGVycyBvZiBjbGFzcyBDTEFT UyBuZWVkZWQgdG8KKyAgIGhvbGQgYSB2YWx1ZSBvZiBtb2RlIE1PREUuCisg ICBPbiB0aGUgQ29tcGFjdFJJU0MgYXJjaGl0ZWN0dXJlLCB0aGUgc2l6ZSBv ZiBNT0RFIGluIHdvcmRzLgorICAgVGhlIHNpemUgb2YgTU9ERSBpbiBkb3Vi bGUgd29yZHMgZm9yIHRoZSBjbGFzcyBMT05HX1JFR1MuCisKKyAgIFRoZSBm b2xsb3dpbmcgY2hlY2sgYXNzdW1lcyBpZiB0aGUgY2xhc3MgaXMgbm90IExP TkdfUkVHUywgdGhlbgorICAgYWxsIChOT19SRUdTLCBTSE9SVF9SRUdTLCBO T1NQX1JFR1MgYW5kIEdFTkVSQUxfUkVHUykgb3RoZXIgY2xhc3NlcyBhcmUg CisgICBzaG9ydC4gIFdlIG1heSBoYXZlIHRvIGNoZWNrIGlmIHRoaXMgY2Fu IGNhdXNlIGFueSBkZWdyYWRhdGlvbiBpbiAKKyAgIHBlcmZvcm1hbmNlLiAg Ki8KKyNkZWZpbmUgQ0xBU1NfTUFYX05SRUdTKENMQVNTLCBNT0RFKSBcCisg IChDTEFTUyA9PSBMT05HX1JFR1MgXAorICAgPyAoR0VUX01PREVfU0laRSAo TU9ERSkgKyBDUjE2X1VOSVRTX1BFUl9EV09SRCAtIDEpIC8gQ1IxNl9VTklU U19QRVJfRFdPUkRcCisgICA6IChHRVRfTU9ERV9TSVpFIChNT0RFKSArIFVO SVRTX1BFUl9XT1JEIC0gMSkgLyBVTklUU19QRVJfV09SRCkKKworLyogTWFj cm9zIHRvIGNoZWNrIHRoZSByYW5nZSBvZiBpbnRlZ2VycyAuIFRoZXNlIG1h Y3JvcyB3ZXJlIHVzZWQgYWNyb3NzCisgICB0aGUgcG9ydCwgbWFqb3JseSBp biBjb25zdHJhaW50cy5tZCwgcHJlZGljYXRlcy5tZCBmaWxlcy4gKi8KKyNk ZWZpbmUgU0lHTkVEX0lOVF9GSVRTX05fQklUUyhpbW0sIE4pICAgICAgICAg ICBcCisgICgoKChpbW0pIDwgKChIT1NUX1dJREVfSU5UKSAxIDw8ICgoTikg LSAxKSkpICAgICAgIFwKKyAgICAgICYmICgoaW1tKSA+PSAtKChIT1NUX1dJ REVfSU5UKSAxIDw8ICgoTikgLSAxKSkpKSA/IDEgOiAwKQorCisjZGVmaW5l IFVOU0lHTkVEX0lOVF9GSVRTX05fQklUUyhpbW0sIE4pIFwKKyAgKCgoaW1t KSA8ICgoSE9TVF9XSURFX0lOVCkgMSA8PCAoTikpICYmIChpbW0pID49IChI T1NUX1dJREVfSU5UKSAwKSA/IDEgOiAwKQorCisjZGVmaW5lIElOX1JBTkdF X1AoVkFMVUUsIExPVywgSElHSCkgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorICAoKCgoSE9TVF9XSURFX0lOVCkoVkFMVUUpKSA+PSAoSE9TVF9X SURFX0lOVCkoTE9XKSkgICAgICAgICAgIFwKKyAgICYmICgoKEhPU1RfV0lE RV9JTlQpKFZBTFVFKSkgPD0gKChIT1NUX1dJREVfSU5UKShISUdIKSkpKQor CisjZGVmaW5lIElOX1JBTihWQUxVRSwgTE9XLCBISUdIKSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorICAoKCgoKEhPU1RfV0lERV9JTlQpKFZB TFVFKSkgPj0gKEhPU1RfV0lERV9JTlQpKExPVykpICAgICAgIFwKKyAgICYm ICgoKEhPU1RfV0lERV9JTlQpKFZBTFVFKSkgPD0gKChIT1NUX1dJREVfSU5U KShISUdIKSkpKSA/IDEgOiAwKQorCisvKiBUaGlzIGNoZWNrIGlzIGZvciBz Yml0L2NiaXQgaW5zdHJ1Y3Rpb24uICAqLworI2RlZmluZSBPS19GT1JfWihP UCkgXAorICAoKEdFVF9DT0RFIChPUCkgPT0gTUVNICYmIEdFVF9DT0RFIChY RVhQIChPUCwgMCkpID09IENPTlNUX0lOVCkgXAorICAgfHwgKEdFVF9DT0RF IChPUCkgPT0gTUVNICYmIEdFVF9DT0RFIChYRVhQIChPUCwgMCkpID09IFJF RykgXAorICAgfHwgKEdFVF9DT0RFIChPUCkgPT0gTUVNICYmIEdFVF9DT0RF IChYRVhQIChPUCwgMCkpID09IFBMVVMgXAorICAgICAgICYmIEdFVF9DT0RF IChYRVhQICgoWEVYUCAoT1AsIDApKSwgMCkpID09IFJFRyBcCisgICAgICAg JiYgR0VUX0NPREUgKFhFWFAgKChYRVhQIChPUCwgMCkpLCAxKSkgPT0gQ09O U1RfSU5UKSkKKworLyogU3RhY2sgbGF5b3V0IGFuZCBjYWxsaW5nIGNvbnZl bnRpb25zLiAgKi8KKyNkZWZpbmUgU1RBQ0tfR1JPV1NfRE9XTldBUkQKKwor I2RlZmluZSBTVEFSVElOR19GUkFNRV9PRkZTRVQgICAwCisKKyNkZWZpbmUg U1RBQ0tfUE9JTlRFUl9SRUdOVU0gICAgMTUKKworI2RlZmluZSBGUkFNRV9Q T0lOVEVSX1JFR05VTSAgICAxMworCisjZGVmaW5lIEFSR19QT0lOVEVSX1JF R05VTSAgICAgIDEyCisKKyNkZWZpbmUgU1RBVElDX0NIQUlOX1JFR05VTSAg ICAgMQorCisjZGVmaW5lIFJFVFVSTl9BRERSRVNTX1JFR05VTSAgIDE0CisK KyNkZWZpbmUgRklSU1RfUEFSTV9PRkZTRVQoRk5ERUNMKSAwCisKKyNkZWZp bmUgRUxJTUlOQUJMRV9SRUdTICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKyAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKyAgICB7IEFSR19QT0lOVEVSX1JFR05VTSwgICBTVEFD S19QT0lOVEVSX1JFR05VTX0sIFwKKyAgICB7IEFSR19QT0lOVEVSX1JFR05V TSwgICBGUkFNRV9QT0lOVEVSX1JFR05VTX0sIFwKKyAgICB7IEZSQU1FX1BP SU5URVJfUkVHTlVNLCBTVEFDS19QT0lOVEVSX1JFR05VTX0gIFwKKyAgfQor CisjZGVmaW5lIElOSVRJQUxfRUxJTUlOQVRJT05fT0ZGU0VUKEZST00sIFRP LCBPRkZTRVQpICAgICAgICAgICAgICBcCisgIGRvICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAoT0ZGU0VUKSA9 IGNyMTZfaW5pdGlhbF9lbGltaW5hdGlvbl9vZmZzZXQgKChGUk9NKSwgKFRP KSk7ICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHdoaWxlICgwKQor CisvKiBQYXNzaW5nIGZ1bmN0aW9uIGFyZ3VtZW50cy4gICovCisKKyNkZWZp bmUgQUNDVU1VTEFURV9PVVRHT0lOR19BUkdTIDAKKworI2RlZmluZSBQVVNI X0FSR1MgMQorCisjZGVmaW5lIFBVU0hfUk9VTkRJTkcoQllURVMpICgoKEJZ VEVTKSArIDEpICYgfjEpCisKKyNpZm5kZWYgQ1VNVUxBVElWRV9BUkdTCitz dHJ1Y3QgY3VtdWxhdGl2ZV9hcmdzCit7CisgIGludCBpbnRzOworICBpbnQg bGFzdF9wYXJtX2luX3JlZzsKK307CisKKyNkZWZpbmUgQ1VNVUxBVElWRV9B UkdTIHN0cnVjdCBjdW11bGF0aXZlX2FyZ3MKKyNlbmRpZgorCisvKiBPbiB0 aGUgQ1IxNiBhcmNoaXRlY3R1cmUsIFZhcmFyZ3Mgcm91dGluZXMgc2hvdWxk IHJlY2VpdmUgdGhlaXIgcGFyYW1ldGVycyAKKyAgIG9uIHRoZSBzdGFjay4g ICovCisKKyNkZWZpbmUgSU5JVF9DVU1VTEFUSVZFX0FSR1MoQ1VNLCBGTlRZ UEUsIExJQk5BTUUsIEZOREVDTCwgTl9OQU1FRF9BUkdTKSBcCisgIGNyMTZf aW5pdF9jdW11bGF0aXZlX2FyZ3MgKCYoQ1VNKSwgKEZOVFlQRSksIChMSUJO QU1FKSkKKworI2RlZmluZSBGVU5DVElPTl9BUkdfUkVHTk9fUChSRUdOTykg IGNyMTZfZnVuY3Rpb25fYXJnX3JlZ25vX3AgKFJFR05PKQorCisvKiBHZW5l cmF0aW5nIGNvZGUgZm9yIHByb2ZpbGluZyAtIE5PVCBJTVBMRU1FTlRFRC4g ICovCisjdW5kZWYgIEZVTkNUSU9OX1BST0ZJTEVSCisjZGVmaW5lIEZVTkNU SU9OX1BST0ZJTEVSKFNUUkVBTSwgTEFCRUxOTykgICAgICBcCit7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg IHNvcnJ5ICgicHJvZmlsZXIgc3VwcG9ydCBmb3IgQ1IxNiIpOyAgICAgICAg XAorfQorCisvKiBUcmFtcG9saW5lcyBmb3IgbmVzdGVkIGZ1bmN0aW9ucyAt IE5PVCBTVVBQT1JURUQuICAqLworI2RlZmluZSBUUkFNUE9MSU5FX1NJWkUg ICAgMTYKKworLyogQUREUkVTU0lORyBNT0RFUy4gICovCisKKyNkZWZpbmUg Q09OU1RBTlRfQUREUkVTU19QKFgpICAgICAgIFwKKyAgKEdFVF9DT0RFIChY KSA9PSBMQUJFTF9SRUYgICAgICAgIFwKKyAgIHx8IEdFVF9DT0RFIChYKSA9 PSBTWU1CT0xfUkVGICAgIFwKKyAgIHx8IEdFVF9DT0RFIChYKSA9PSBDT05T VCAgICAgICAgIFwKKyAgIHx8IEdFVF9DT0RFIChYKSA9PSBDT05TVF9JTlQp CisKKyNkZWZpbmUgTUFYX1JFR1NfUEVSX0FERFJFU1MgICAgMgorCisjZGVm aW5lIEhBVkVfUE9TVF9JTkNSRU1FTlQgICAgIDAKKyNkZWZpbmUgSEFWRV9Q T1NUX0RFQ1JFTUVOVCAgICAgMAorI2RlZmluZSBIQVZFX1BPU1RfTU9ESUZZ X0RJU1AgICAwCisjZGVmaW5lIEhBVkVfUE9TVF9NT0RJRllfUkVHICAgIDAK KworI2lmZGVmIFJFR19PS19TVFJJQ1QKKyNkZWZpbmUgQ1IxNl9SRUdfT0tf Rk9SX0JBU0VfUChYKQlDUjE2X1JFR05PX09LX0ZPUl9CQVNFX1AgKFJFR05P IChYKSkKKyNkZWZpbmUgUkVHX01PREVfT0tfRk9SX0JBU0VfUChYLCBNT0RF KQlcCisgIFJFR05PX01PREVfT0tfRk9SX0JBU0VfUCAoUkVHTk8oWCksIE1P REUpCisjZGVmaW5lIFJFR19PS19GT1JfSU5ERVhfUChYKSAgIFJFR05PX09L X0ZPUl9JTkRFWF9QIChSRUdOTyAoWCkpCisjZWxzZSAvKiBub3QgUkVHX09L X1NUUklDVC4gICovCisjZGVmaW5lIENSMTZfUkVHX09LX0ZPUl9CQVNFX1Ao WCkJMQorI2RlZmluZSBSRUdfTU9ERV9PS19GT1JfQkFTRV9QKFgsIE1PREUp CTEKKyNkZWZpbmUgUkVHX09LX0ZPUl9JTkRFWF9QKFgpICAgMQorI2VuZGlm IC8qIG5vdCBSRUdfT0tfU1RSSUNULiAgKi8KKworLyogR28gdG8gTEFCRUwg aWYgQUREUiAoYSBsZWdpdGltYXRlIGFkZHJlc3MgZXhwcmVzc2lvbikgaGFz IAorICAgYW4gZWZmZWN0IHRoYXQgZGVwZW5kcyBvbiB0aGUgbWFjaGluZSBt b2RlIGl0IGlzIHVzZWQgZm9yLiAgKi8KKyNkZWZpbmUgR09fSUZfTU9ERV9E RVBFTkRFTlRfQUREUkVTUyhBRERSLCBMQUJFTCkKKworLyogQXNzdW1lIGJl c3QgY2FzZSAoYnJhbmNoIHByZWRpY3RlZCkuICAqLworI2RlZmluZSBCUkFO Q0hfQ09TVChzcGVlZF9wLCBwcmVkaWN0YWJsZV9wKSAgICAgICAyCisKKyNk ZWZpbmUgU0xPV19CWVRFX0FDQ0VTUyAgMQorCisvKiBJdCBpcyBhcyBnb29k IG9yIGJldHRlciB0byBjYWxsIGEgY29uc3RhbnQgZnVuY3Rpb24gYWRkcmVz cyB0aGFuIHRvCisgICBjYWxsIGFuIGFkZHJlc3Mga2VwdCBpbiBhIHJlZ2lz dGVyLiAgKi8KKyNkZWZpbmUgTk9fRlVOQ1RJT05fQ1NFCisKKy8qIERpdmlk aW5nIHRoZSBvdXRwdXQgaW50byBzZWN0aW9ucy4gICovCisKKyNkZWZpbmUg VEVYVF9TRUNUSU9OX0FTTV9PUCAiXHQuc2VjdGlvblx0LnRleHQiCisKKyNk ZWZpbmUgREFUQV9TRUNUSU9OX0FTTV9PUCAiXHQuc2VjdGlvblx0LmRhdGEi CisKKyNkZWZpbmUgQlNTX1NFQ1RJT05fQVNNX09QICAiXHQuc2VjdGlvblx0 LmJzcyIKKworLyogUG9zaXRpb24gaW5kZXBlbmRlbnQgY29kZSAoUElDKS4g ICovCisvKiBORUFSX1BJQyBmb3IgLWZwaWMgb3B0aW9uLiAgKi8KKworI2Rl ZmluZSBORUFSX1BJQyAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIAorLyogRkFSX1BJQyBmb3IgLWZQSUMgb3B0aW9uLiAgKi8g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwor I2RlZmluZSBGQVJfUElDICAyCisKKyNkZWZpbmUgUElDX09GRlNFVF9UQUJM RV9SRUdOVU0gIDEyCisKKyNkZWZpbmUgTEVHSVRJTUFURV9QSUNfT1BFUkFO RF9QKFgpIGxlZ2l0aW1hdGVfcGljX29wZXJhbmRfcCAoWCkgICAgICAgCisK Ky8qIEFzc2VtYmxlciBmb3JtYXQuICAqLworCisvKiBDaGFyYWN0ZXIgdG8g c3RhcnQgYSBjb21tZW50LiAgKi8KKyNkZWZpbmUgQVNNX0NPTU1FTlRfU1RB UlQgIiMiCisKKyNkZWZpbmUgR0xPQkFMX0FTTV9PUCAiXHQuZ2xvYmxcdCIK KworI3VuZGVmIFVTRVJfTEFCRUxfUFJFRklYCisjZGVmaW5lIFVTRVJfTEFC RUxfUFJFRklYICJfIgorCisjdW5kZWYgQVNNX09VVFBVVF9MQUJFTFJFRgor I2RlZmluZSBBU01fT1VUUFVUX0xBQkVMUkVGKFNUUkVBTSwgTkFNRSkgXAor ICBhc21fZnByaW50ZiAoU1RSRUFNLCAiJVUlcyIsICgqdGFyZ2V0bS5zdHJp cF9uYW1lX2VuY29kaW5nKSAoTkFNRSkpOworCisjZGVmaW5lIEFTTV9PVVRQ VVRfU1lNQk9MX1JFRihTVFJFQU0sIFNZTUJPTCkgICBcCisgIGRvICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisgICAgICBjb25zdCBjaGFyICpybiA9IFhTVFIgKFNZTUJPTCwgMCk7ICAg ICAgICBcCisgICAgICBhc3NlbWJsZV9uYW1lIChTVFJFQU0sIHJuKTsgICAg ICAgICAgICAgICBcCisgICAgICBpZiAoU1lNQk9MX1JFRl9GVU5DVElPTl9Q IChTWU1CT0wpKSAgICAgICBcCisgICAgICB7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGZwcmludGYgKChT VFJFQU0pLCAiQGMiKTsgICAgICAgICAgICAgICBcCisgICAgICB9ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg IHdoaWxlICgwKQorCisjdW5kZWYgQVNNX0FQUF9PTgorI2RlZmluZSBBU01f QVBQX09OICAgIiNBUFBcbiIKKworI3VuZGVmIEFTTV9BUFBfT0ZGCisjZGVm aW5lIEFTTV9BUFBfT0ZGICAiI05PX0FQUFxuIgorCisvKiBTd2l0Y2ggaW50 byBhIGdlbmVyaWMgc2VjdGlvbi4gICovCisjZGVmaW5lIFRBUkdFVF9BU01f TkFNRURfU0VDVElPTglkZWZhdWx0X2VsZl9hc21fbmFtZWRfc2VjdGlvbgor CisjdW5kZWYgSU5JVF9TRUNUSU9OX0FTTV9PUAorI2RlZmluZSBJTklUX1NF Q1RJT05fQVNNX09QCQkiXHQuc2VjdGlvblx0LmluaXQiCisKKyN1bmRlZiBG SU5JX1NFQ1RJT05fQVNNX09QCisjZGVmaW5lIEZJTklfU0VDVElPTl9BU01f T1AJCSJcdC5zZWN0aW9uXHQuZmluaSIKKworLyogSW5zdHJ1Y3Rpb24gb3V0 cHV0LiAgKi8KKworI2RlZmluZSBSRUdJU1RFUl9OQU1FUyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK KyAgICAicjAiLCAgInIxIiwgICJyMiIsICAicjMiLCAgInI0IiwgICJyNSIs ICAicjYiLCAgInI3IiwgXAorICAgICJyOCIsICAicjkiLCAgInIxMCIsICJy MTEiLCAicjEyIiwgInIxMyIsICJyYSIsICAic3AiICBcCisgIH0KKworLyog T3V0cHV0IG9mIGRpc3BhdGNoIHRhYmxlcy4gICovCisKKy8qIFJldmlzaXQu IE5vIFBDIHJlbGF0aXZlIGNhc2UgYXMgbGFiZWwgZXhwcmVzc2lvbnMgYXJl IG5vdCAKKyAgIHByb3Blcmx5IHN1cHBvcnRlZCBpbiBiaW51dGlscyBlbHNl IHdlIGNvdWxkIGhhdmUgZG9uZSB0aGlzOgorICAgI2RlZmluZSBDQVNFX1ZF Q1RPUl9QQ19SRUxBVElWRSAob3B0aW1pemVfc2l6ZSA/IDEgOiAwKS4gICov CisjZGVmaW5lIENBU0VfVkVDVE9SX1BDX1JFTEFUSVZFIDAKKworI2RlZmlu ZSBBU01fT1VUUFVUX0FERFJfRElGRl9FTFQoRklMRSwgQk9EWSwgVkFMVUUs IFJFTCkgICAgXAorICAoKEdFVF9NT0RFIChCT0RZKSA9PSBRSW1vZGUpICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgPyBmcHJpbnRmICgo RklMRSksICJcdC5ieXRlICguTCVkLS5MJWQpID4+IDFcbiIsICAgICAgICAg XAorICAgICAgICAgICAgICBWQUxVRSwgUkVMKSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorICAgOiBmcHJpbnRmICgoRklMRSksICJc dC53b3JkICguTCVkLS5MJWQpID4+IDFcbiIsICAgICAgICAgXAorICAgICAg ICAgICAgICBWQUxVRSwgUkVMKSkKKworI2RlZmluZSBBU01fT1VUUFVUX0FE RFJfVkVDX0VMVChTVFJFQU0sIFZBTFVFKSBcCisgIGFzbV9mcHJpbnRmICgo U1RSRUFNKSwgIlx0LmxvbmdcdC5MJWRAY1xuIiwgKFZBTFVFKSkKKworLyog QWxpZ25tZW50IGluIGFzc2VtYmxlciBmaWxlLiAgKi8KKworI2RlZmluZSBB U01fT1VUUFVUX0FMSUdOKFNUUkVBTSwgUE9XRVIpIFwKKyAgYXNtX2Zwcmlu dGYgKChTVFJFQU0pLCAiXHQuYWxpZ25cdCVkXG4iLCAxIDw8IChQT1dFUikp CisKKy8qIE1pc2NlbGxhbmVvdXMgcGFyYW1ldGVycy4gICovCisKKyNkZWZp bmUgQ0FTRV9WRUNUT1JfTU9ERSAgUG1vZGUKKworI2RlZmluZSBNT1ZFX01B WCA0CisKKyNkZWZpbmUgVFJVTFlfTk9PUF9UUlVOQ0FUSU9OKE9VVFBSRUMs IElOUFJFQykgIDEKKworI2RlZmluZSBTVE9SRV9GTEFHX1ZBTFVFICAxCisK KyNkZWZpbmUgUG1vZGUgU0ltb2RlCisKKyNkZWZpbmUgRlVOQ1RJT05fTU9E RSBRSW1vZGUKKworLyogRGVmaW5lIHRoaXMgYm9vbGVhbiBtYWNybyhzKSB0 byBpbmRpY2F0ZSB3aGV0aGVyIG9yIG5vdCB5b3VyIGFyY2hpdGVjdHVyZQor ICAgaGFzICh1biljb25kaXRpb25hbCBicmFuY2hlcyB0aGF0IGNhbiBzcGFu IGFsbCBvZiBtZW1vcnkuICBJdCBpcyB1c2VkIGluCisgICBjb25qdW5jdGlv biB3aXRoIGFuIG9wdGltaXphdGlvbiB0aGF0IHBhcnRpdGlvbnMgaG90IGFu ZCBjb2xkIGJhc2ljIGJsb2NrcworICAgaW50byBzZXBhcmF0ZSBzZWN0aW9u cyBvZiB0aGUgZXhlY3V0YWJsZS4KKyAgIENSMTYgY29udGFpbnMgYnJhbmNo IGluc3RydWN0aW9ucyB0aGF0IHNwYW4gd2hvbGUgYWRkcmVzcyBzcGFjZS4g ICovCisjZGVmaW5lIEhBU19MT05HX0NPTkRfQlJBTkNIICAgIDEKKyNkZWZp bmUgSEFTX0xPTkdfVU5DT05EX0JSQU5DSCAgMQorCisjZW5kaWYgLyogRW5k IG9mIEdDQ19DUjE2X0guICAqLwpkaWZmIC11cHJOIG9yaWcvZ2NjL2NvbmZp Zy9jcjE2L2NyMTYtbGliZ2NjLnMgbW9kL2djYy9jb25maWcvY3IxNi9jcjE2 LWxpYmdjYy5zCi0tLSBvcmlnL2djYy9jb25maWcvY3IxNi9jcjE2LWxpYmdj Yy5zCTE5NzAtMDEtMDEgMDU6MzA6MDAuMDAwMDAwMDAwICswNTMwCisrKyBt b2QvZ2NjL2NvbmZpZy9jcjE2L2NyMTYtbGliZ2NjLnMJMjAxMS0wNS0yMCAx NToxNzoxMy4wMDAwMDAwMDAgKzA1MzAKQEAgLTAsMCArMSw1NjggQEAKKy8q IExpYmdjYyBUYXJnZXQgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24uCisgICBD b3B5cmlnaHQgKEMpIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ bmMuCisgICBDb250cmlidXRlZCBieSBLUElUIEN1bW1pbnMgSW5mb3N5c3Rl bXMgTGltaXRlZC4KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgor CisgICBHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgorICAgdGhlIHRlcm1zIG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQg YnkgdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2 ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisgICB2 ZXJzaW9uLgorCisgICBHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCisgICBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m IE1FUkNIQU5UQUJJTElUWSBvcgorICAgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlCisgICBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBVbmRlciBTZWN0aW9u IDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9u YWwKKyAgIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRp bWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKyAgIDMuMSwgYXMgcHVi bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKyAg IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorICAgYSBjb3B5IG9mIHRoZSBH Q0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMg cHJvZ3JhbTsKKyAgIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJ TkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorICAgPGh0 dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmZGVmICBM X211bHNpMworCS50ZXh0CisJLmFsaWduICA0CisJLmdsb2JsICBfX19tdWxz aTMKK19fX211bHNpMzoKKwltb3Z3ICAgIHI0LHIwCisJbW92dyAgICByMixy MQorCS8qIEV4dGVuZGVkIG11bHRpcGxpY2F0aW9uIGJldHdlZW4gdGhlIDIg bG93ZXIgd29yZHMgKi8KKwltdWx1dyAgIHIxLChyMSxyMCkKKworCS8qIE11 bHRpcGx5IHRoZSBsb3dlciB3b3JkIG9mIGVhY2ggcGFyYW1ldGVyICAqLyAg CisJbXVsdyAgICByMixyNSAgIAorICAgIAorCS8qIFdpdGggdGhlIGhpZ2hl ciB3b3JkIG9mIHRoZSBvdGhlciAgKi8KKwltdWx3ICAgIHIzLHI0ICAgICAK KyAgCisJLyogQWRkIHByb2R1Y3RzIHRvIHRoZSBoaWdoZXIgcGFydCBvZiB0 aGUgZmluYWwgcmVzdWx0ICAqLworCWFkZHcgICAgcjQscjEgICAgICAgCisJ YWRkdyAgICByNSxyMQorCWp1bXAgICAgKHJhKQorI2VuZGlmCisKKworI2lm ZGVmIExfZGl2ZGkzCisJLnRleHQKKwkuYWxpZ24gNAorCS5nbG9ibCBfX19k aXZkaTMKKworX19fZGl2ZGkzOgorCXB1c2gJJDQsIHI3LCByYQorCisKKwkv KiBQYXJhbSAjMSBMb25nIExvbmcgbG93IGJpdCBmaXJzdCAqLworCWxvYWRk ICAgMTIoc3ApLCAocjEsIHIwKQorCWxvYWRkICAgMTYoc3ApLCAocjMsIHIy KQorCisJLyogUGFyYW0gIzIgTG9uZyBMb25nIGxvdyBiaXQgZmlyc3QgKi8K Kwlsb2FkZCAgIDIwKHNwKSwgKHI1LCByNCkKKwlsb2FkZCAgIDI0KHNwKSwg KHI3LCByNikKKwkKKwkvKiBTZXQgbmVnIHRvIDAgKi8KKwltb3Z3ICQwLCBy MTAKKwkKKwlzdWJkICQxNiwgKHNwKQorCisJLyogQ29tcGFyZSBpZiBwYXJh bTEgaXMgZ3JlYXRlciB0aGFuIDAgKi8JCisJY21wdyAkMCwgcjMKKwlibGUg TDQKKworCS8qIEludmVydCBwYXJhbTEgYW5kIG5lZyAqLworCW1vdmQgJC0x LCAocjksIHI4KSAJLyogVGVtcCBzZXQgdG8gRkZGRkZGRkYgKi8KKwl4b3Jk IChyOSwgcjgpLCAocjEsIHIwKQkvKiBYb3IgbG93IGJpdHMgb2YgcGFyYW0g MSB3aXRoIHRlbXAgKi8KKwl4b3JkIChyOSwgcjgpLCAocjMsIHIyKQkvKiBY b3IgaGlnaCBiaXRzIG9mIHBhcmFtIDEgd2l0aCB0ZW1wICovCisJYWRkZCAk MSwgKHIxLCByMCkJLyogQWRkIDEgdG8gbG93IGJpdHMgb2YgcGFyYW0gMSAq LworCXhvcncgJDEsIHIxMAkJLyogSW52ZXJ0IG5lZyAqLworCWJjYyBMNAkJ CS8qIElmIG5vIGNhcnJ5IG9jY3VycmVkIGdvIHRvIEw0ICovCisJYWRkZCAk MSwgKHIzLCByMikJLyogQWRkIDEgdG8gaGlnaCBiaXRzIG9mIHBhcmFtIDEg Ki8KKworTDQ6CXN0b3JkIChyMSwgcjApLCAwKHNwKQorCXN0b3JkIChyMywg cjIpLCA0KHNwKQorCQorCS8qIENvbXBhcmUgaWYgcGFyYW0yIGlzIGdyZWF0 ZXIgdGhhbiAwICovCQorCWNtcHcgJDAsIHI3CisJYmxlIEw1CisKKwkvKiBJ bnZlcnQgcGFyYW0yIGFuZCBuZWcgKi8KKwltb3ZkICQtMSwgKHI5LCByOCkJ LyogVGVtcCBzZXQgdG8gRkZGRkZGRkYgKi8KKwl4b3JkIChyOSwgcjgpLCAo cjUsIHI0KQkvKiBYb3IgbG93IGJpdHMgb2YgcGFyYW0gMiB3aXRoIHRlbXAg Ki8KKwl4b3JkIChyOSwgcjgpLCAocjcsIHI2KQkvKiBYb3IgaGlnaCBiaXRz IG9mIHBhcmFtIDIgd2l0aCB0ZW1wICovCisJYWRkZCAkMSwgKHI1LCByNCkJ LyogQWRkIDEgdG8gbG93IGJpdHMgb2YgcGFyYW0gMiAqLworCXhvcncgJDEs IHIxMAkJLyogSW52ZXJ0IG5lZyAqLworCWJjYyBMNQkJCS8qIElmIG5vIGNh cnJ5IG9jY3VycmVkIGdvIHRvIEw1ICovCisJYWRkZCAkMSwgKHI3LCByNikJ LyogQWRkIDEgdG8gaGlnaCBiaXRzIG9mIHBhcmFtIDIgKi8KKworTDU6CXN0 b3JkIChyNSwgcjQpLCA4KHNwKQorCXN0b3JkIChyNywgcjYpLCAxMihzcCkK Kwltb3Z3ICQwLCByMgorCisJLyogQ2FsbCB1ZGl2bW9kZGkzICovCisjaWZk ZWYgX19QSUNfXworCWxvYWRkCV9fX3VkaXZtb2RkaTNAY0dPVChyMTIpLCAo cjEscjApCisJamFsCShyMSxyMCkKKyNlbHNlCisJYmFsIChyYSksIF9fX3Vk aXZtb2RkaTMKKyNlbmRpZgorCisJLyogSWYgKG5lZykgKi8KKwlhZGRkCSQx NiwgKHNwKQorCWNtcHcgJDAsIHIxMAkJLyogQ29tcGFyZSAwIHdpdGggbmVn ICovCisJYmVxIExleGl0X18KKwkKKwkvKiBOZWcgPSAtTmVnICovCisJeG9y ZCAocjksIHI4KSwgKHIxLCByMCkJLyogWG9yIGxvdyBiaXRzIG9mIHVyZXMg d2l0aCB0ZW1wICovCisJeG9yZCAocjksIHI4KSwgKHIzLCByMikJLyogWG9y IGhpZ2ggYml0cyBvZiB1cmVzIHdpdGggdGVtcCAqLworCWFkZGQgJDEsIChy MSwgcjApCS8qIEFkZCAxIHRvIGxvdyBiaXRzIG9mIHVyZXMgKi8KKwliY2Mg TGV4aXRfXworCWFkZGQgJDEsIChyMywgcjIpCS8qIEFkZCAxIHRvIGhpZ2gg Yml0IG9mIHVyZXMgKi8KKworTGV4aXRfXzoKKyMgIGlmZGVmIF9fSURfU0hB UkVEX0xJQl9fCisJcG9wCSQyLCByMTIKKyMgIGVuZGlmCisJcG9wcmV0ICQ0 LCByNywgcmEKKyNlbmRpZgorCisjaWZkZWYgTF9sc2hyZGkzCisJLnRleHQK KwkuYWxpZ24gNAorCS5nbG9ibCBfX19sc2hyZGkzCisKK19fX2xzaHJkaTM6 CisJcHVzaAkkMywgcjcKKworCS8qIExvYWQgcGFyYW1ldGVycyBmcm9tIHN0 YWNrIGluIHRoaXMgb3JkZXIgKi8KKwltb3Z3IHIyLCByNgkJLyogTnVtYmVy IG9mIHNoaWZ0cyAqLworCWxvYWRkCTYoc3ApLCAocjEsIHIwKQkvKiBMb3cg Yml0cyAqLworCWxvYWRkCTEwKHNwKSwgKHIzLCByMikvKiBIaWdoIGJpdHMg Ki8KKworCXhvcncgJC0xLCByNgkJLyogSW52ZXJ0IG51bWJlciBvZiBzaGlm dHMgKi8KKwlhZGR3ICQxLCByNgkJLyogQWRkIDEgYnkgbnVtYmVyIG9mIHNo aWZ0cyAqLworCisJbW92dyByNiwgcjcJCS8qIENvcHkgbnVtYmVyIG9mIHNo aWZ0cyAqLworCisJdGJpdCAkMTUsIHI2CQkvKiBUZXN0IGlmIG51bWJlciBp cyBuZWdhdGl2ZSAqLworCWJmcyBMMgkJCS8qIElmIG5lZ2F0aXZlIGp1bXAg dG8gTDIgKi8KKworCW1vdmQgKHIxLCByMCksIChyOSwgcjgpCS8qIENvcHkg bG93IGJpdHMgKi8KKworCXN1YncgJDMyLCByNwkJLyogQ2FsYyBob3cgbWFu eSBiaXRzIHdpbGwgb3ZlcmZsb3cgKi8KKwkvKiBTaGlmdCB0aGUgdGVtcCBs b3cgYml0IHRvIHRoZSByaWdodCB0byBzZWUgdGhlIG92ZXJmbG93aW5nIGJp dHMgICovCisJbHNoZCByNywgKHI5LCByOCkJCisKKwljbXB3ICQzMiwgcjYJ CS8qIElmIG51bWJlciBvZiBzaGlmdHMgaXMgaGlnaGVyIHRoYW4gMzEgKi8K KwlibHQgTDEJCQkvKiBTaGlmdCBieSBtb3ZpbmcgKi8KKworCWxzaGQgcjYs IChyMywgcjIpCS8qIFNoaWZ0IGhpZ2ggYml0cyAqLworCWxzaGQgcjYsIChy MSwgcjApCS8qIFNoaWZ0IGxvdyBiaXRzICovCisJYWRkZCAocjksIHI4KSwg KHIzLCByMikJLyogQWRkIG92ZXJmbG93IHRvIHRoZSBoaWdoIGJpdHMgKi8K Kwlwb3ByZXQJJDMsIHI3CQkvKiBSZXR1cm4gKi8KKworTDE6CW1vdmQgJDAs IChyMSwgcjApCS8qIFJlc2V0IGxvdyBiaXQgKi8KKwltb3ZkIChyOSwgcjgp LCAocjMsIHIyKQkvKiBBZGQgdGhlIG92ZXJmbG93IGZyb20gdGhlIGxvdyBi aXQgKi8KKwlwb3ByZXQJJDMsIHI3CQkvKiBSZXR1cm4gKi8KKworTDI6CW1v dmQgKHIzLCByMiksIChyOSwgcjgpCS8qIENvcHkgaGlnaCBiaXRzICovCisK KwlhZGR3ICQzMiwgcjcJCS8qIENhbGMgaG93IG1hbnkgYml0cyB3aWxsIG92 ZXJmbG93ICovCisJLyogU2hpZnQgdGhlIHRlbXAgbG93IGJpdCB0byB0aGUg bGVmdCB0byBzZWUgdGhlIG92ZXJmbG93aW5nIGJpdHMgICovCisJbHNoZCBy NywgKHI5LCByOCkJCisKKwljbXB3ICQtMzIsIHI2CQkvKiBJZiBudW1iZXIg b2Ygc2hpZnRzIGlzIGxvd2VyIHRoYW4gLTMxICovCisJYmd0IEwzCQkJLyog U2hpZnQgYnkgbW92aW5nICovCisKKwlsc2hkIHI2LCAocjEsIHIwKQkvKiBT aGlmdCBsb3cgYml0cyAqLworCWxzaGQgcjYsIChyMywgcjIpCS8qIFNoaWZ0 IGhpZ2ggYml0cyAqLworCWFkZGQgKHI5LCByOCksIChyMSwgcjApCS8qIEFk ZCBvdmVyZmxvdyB0byB0aGUgbG93IGJpdHMgKi8KKwlwb3ByZXQJJDMsIHI3 CQkvKiBSZXR1cm4gKi8KKwkKK0wzOgltb3ZkICQwLCAocjMsIHIyKQkvKiBS ZXNldCB0aGUgaGlnaCBiaXQgKi8KKwltb3ZkIChyOSwgcjgpLCAocjEsIHIw KQkvKiBBZGQgdGhlIG92ZXJmbG93IGZyb20gdGhlIGhpZ2ggYml0ICovCisJ cG9wcmV0CSQzLCByNwkJLyogUmV0dXJuICovCisjZW5kaWYKKworI2lmZGVm IExfbW9kZGkzCisJLnRleHQKKwkuYWxpZ24gNAorCS5nbG9ibCBfX19tb2Rk aTMKKworX19fbW9kZGkzOgorCXB1c2gJJDQsIHI3LCByYQorCisKKwkvKiBQ YXJhbSAjMSBMb25nIExvbmcgbG93IGJpdCBmaXJzdCAqLworCWxvYWRkCTEy KHNwKSwgKHIxLCByMCkKKwlsb2FkZAkxNihzcCksIChyMywgcjIpCisKKwkv KiBQYXJhbSAjMiBMb25nIExvbmcgbG93IGJpdCBmaXJzdCAqLworCWxvYWRk CTIwKHNwKSwgKHI1LCByNCkKKwlsb2FkZAkyNChzcCksIChyNywgcjYpCisJ CisJc3ViZAkkMTgsIChzcCkKKworCS8qIFNldCBuZWcgdG8gMCAqLworCXN0 b3J3ICQwLCAxNihzcCkKKwkKKwltb3ZkCSQtMSwgKHI5LCByOCkgCS8qIFRl bXAgc2V0IHRvIEZGRkZGRkZGICovCisKKwkvKiBDb21wYXJlIGlmIHBhcmFt MSBpcyBncmVhdGVyIHRoYW4gMCAqLwkKKwljbXB3ICQwLCByMworCWJsZSBM NAorCisJLyogSW52ZXJ0IHBhcmFtMSBhbmQgbmVnICovCisJeG9yZCAocjks IHI4KSwgKHIxLCByMCkJLyogWG9yIGxvdyBiaXRzIG9mIHBhcmFtIDEgd2l0 aCB0ZW1wICovCisJeG9yZCAocjksIHI4KSwgKHIzLCByMikJLyogWG9yIGhp Z2ggYml0cyBvZiBwYXJhbSAxIHdpdGggdGVtcCAqLworCWFkZGQgJDEsIChy MSwgcjApCS8qIEFkZCAxIHRvIGxvdyBiaXRzIG9mIHBhcmFtIDEgKi8KKwlz dG9ydyAkMSwgMTYoc3ApCisJYmNjIEw0CQkJLyogSWYgbm8gY2Fycnkgb2Nj dXJyZWQgZ28gdG8gTDQgKi8KKwlhZGRkICQxLCAocjMsIHIyKQkvKiBBZGQg MSB0byBoaWdoIGJpdHMgb2YgcGFyYW0gMSAqLworCitMNDoJc3RvcmQgKHIx LCByMCksIDAoc3ApCisJc3RvcmQgKHIzLCByMiksIDQoc3ApCisJCisJLyog Q29tcGFyZSBpZiBwYXJhbTIgaXMgZ3JlYXRlciB0aGFuIDAgKi8JCisJY21w dyAkMCwgcjcKKwlibGUgTDUKKworCS8qIEludmVydCBwYXJhbTIgYW5kIG5l ZyAqLworCXhvcmQgKHI5LCByOCksIChyNSwgcjQpCS8qIFhvciBsb3cgYml0 cyBvZiBwYXJhbSAyIHdpdGggdGVtcCAqLworCXhvcmQgKHI5LCByOCksIChy NywgcjYpCS8qIFhvciBoaWdoIGJpdHMgb2YgcGFyYW0gMiB3aXRoIHRlbXAg Ki8KKwlhZGRkICQxLCAocjUsIHI0KQkvKiBBZGQgMSB0byBsb3cgYml0cyBv ZiBwYXJhbSAyICovCisJYmNjIEw1CQkJLyogSWYgbm8gY2Fycnkgb2NjdXJy ZWQgZ28gdG8gTDUgKi8KKwlhZGRkICQxLCAocjcsIHI2KQkvKiBBZGQgMSB0 byBoaWdoIGJpdHMgb2YgcGFyYW0gMiAqLworCitMNToJc3RvcmQgKHI1LCBy NCksIDgoc3ApCisJc3RvcmQgKHI3LCByNiksIDEyKHNwKQorCW1vdncgJDEs IHIyCisKKwkvKiBDYWxsIHVkaXZtb2RkaTMgKi8KKyNpZmRlZiBfX1BJQ19f CisJbG9hZGQJX19fdWRpdm1vZGRpM0BjR09UKHIxMiksIChyMSxyMCkKKwlq YWwJKHIxLHIwKQorI2Vsc2UKKwliYWwgKHJhKSwgX19fdWRpdm1vZGRpMwor I2VuZGlmCisKKwkvKiBJZiAobmVnKSAqLworCWxvYWR3IDE2KHNwKSwgcjEw CS8qIExvYWQgbmVnIGZyb20gc3RhY2sgKi8KKwlhZGRkCSQxOCwgKHNwKQor CWNtcHcgJDAsIHIxMAkJLyogQ29tcGFyZSAwIHdpdGggbmVnICovCisJYmVx CUxleGl0X18KKwkKKwkvKiBOZWcgPSAtTmVnICovCisJeG9yZCAocjksIHI4 KSwgKHIxLCByMCkJLyogWG9yIGxvdyBiaXRzIG9mIHVyZXMgd2l0aCB0ZW1w ICovCisJeG9yZCAocjksIHI4KSwgKHIzLCByMikJLyogWG9yIGhpZ2ggYml0 cyBvZiB1cmVzIHdpdGggdGVtcCAqLworCWFkZGQgJDEsIChyMSwgcjApCS8q IEFkZCAxIHRvIGxvdyBiaXRzIG9mIHVyZXMgKi8KKwliY2MJTGV4aXRfXwor CWFkZGQgJDEsIChyMywgcjIpCS8qIEFkZCAxIHRvIGhpZ2ggYml0IG9mIHVy ZXMgKi8KK0xleGl0X186CisjICBpZmRlZiBfX0lEX1NIQVJFRF9MSUJfXwor CXBvcAkkMiwgcjEyCisjICBlbmRpZgorCXBvcHJldAkkNCwgcjcsIHJhCisj ZW5kaWYKKworI2lmZGVmIExfbXVsZGkzCisJLnRleHQKKwkuYWxpZ24gNAor CS5nbG9ibCBfX19tdWxkaTMKKworX19fbXVsZGkzOgorCXB1c2gJJDIsIHIx MworCXB1c2gJJDcsIHI3CisJLyogUGFyYW0gIzEgTG9uZyBMb25nIGxvdyBi aXQgZmlyc3QgKi8KKwlsb2FkZCAgIDE4KHNwKSwgKHIxLCByMCkKKwlsb2Fk ZCAgIDIyKHNwKSwgKHIzLCByMikKKworCS8qIFBhcmFtICMyIExvbmcgTG9u ZyBsb3cgYml0IGZpcnN0ICovCisJbG9hZGQgICAyNihzcCksIChyNSwgcjQp CisJbG9hZGQgICAzMChzcCksIChyNywgcjYpCisKKwkvKiBDbGVhciByMTMs IHIxMiAqLwkKKwltb3ZkICQwLCAocjEyKQkKKwltb3ZkICQwLCAocjEzKQor CisJLyogU2V0IG5lZyAqLworCW1vdncgJDAsIHIxMAorCisJLyogQ29tcGFy ZSBpZiBwYXJhbTEgaXMgZ3JlYXRlciB0aGFuIDAgKi8JCisJY21wdyAkMCwg cjMKKwlibGUgTDEKKworCS8qIEludmVydCBwYXJhbTEgYW5kIG5lZyAqLwor CW1vdmQgJC0xLCAocjksIHI4KSAJLyogVGVtcCBzZXQgdG8gRkZGRkZGRkYg Ki8KKwl4b3JkIChyOSwgcjgpLCAocjEsIHIwKQkvKiBYb3IgbG93IGJpdHMg b2YgcGFyYW0gMSB3aXRoIHRlbXAgKi8KKwl4b3JkIChyOSwgcjgpLCAocjMs IHIyKQkvKiBYb3IgaGlnaCBiaXRzIG9mIHBhcmFtIDEgd2l0aCB0ZW1wICov CisJYWRkZCAkMSwgKHIxLCByMCkJLyogQWRkIDEgdG8gbG93IGJpdHMgb2Yg cGFyYW0gMSAqLworCXhvcncgJDEsIHIxMAkJLyogSW52ZXJ0IG5lZyAqLwor CWJjYyBMMQkJCS8qIElmIG5vIGNhcnJ5IG9jY3VycmVkIGdvIHRvIEwxICov CisJYWRkZCAkMSwgKHIzLCByMikJLyogQWRkIDEgdG8gaGlnaCBiaXRzIG9m IHBhcmFtIDEgKi8KKworTDE6CS8qIENvbXBhcmUgaWYgcGFyYW0yIGlzIGdy ZWF0ZXIgdGhhbiAwICovCQorCWNtcHcgJDAsIHI3CisJYmxlIEwyCQorCQor CS8qIEludmVydCBwYXJhbTIgYW5kIG5lZyAqLworCW1vdmQgJC0xLCAocjks IHI4KQkvKiBUZW1wIHNldCB0byBGRkZGRkZGRiAqLworCXhvcmQgKHI5LCBy OCksIChyNSwgcjQpCS8qIFhvciBsb3cgYml0cyBvZiBwYXJhbSAyIHdpdGgg dGVtcCAqLworCXhvcmQgKHI5LCByOCksIChyNywgcjYpCS8qIFhvciBoaWdo IGJpdHMgb2YgcGFyYW0gMiB3aXRoIHRlbXAgKi8KKwlhZGRkICQxLCAocjUs IHI0KQkvKiBBZGQgMSB0byBsb3cgYml0cyBvZiBwYXJhbSAyICovCisJeG9y dyAkMSwgcjEwCQkvKiBJbnZlcnQgbmVnICovCisJYmNjIEwyCQkJLyogSWYg bm8gY2Fycnkgb2NjdXJyZWQgZ28gdG8gTDIgKi8KKwlhZGRkICQxLCAocjcs IHI2KQkvKiBBZGQgMSB0byBoaWdoIGJpdHMgb2YgcGFyYW0gMiAqLworCQor TDI6CXN0b3J3IHIxMCwgMTgoc3ApCS8qIFN0b3JlIG5lZyB0byBzdGFjayBz byB3ZSBjYW4gdXNlIHIxMCAqLworCisJLyogQipEICovCisJLyogQmwqRGwg Ki8KKwltYWN1dyByMCwgcjQsIChyMTIpCS8qIE11bHRpcGx5IHIwIGFuZCBy NCBhbmQgYWRkIHRvIHIxMiAqLworCQkKKwkvKiBCaCpEbCAqLworCW1vdmQg JDAsIChyOSwgcjgpCS8qIENsZWFyIHI5LCByOCAqLworCW1hY3V3IHIxLCBy NCwgKHI5LCByOCkJLyogTXVsdGlwbHkgQmgqRGwgYW5kIGFkZCByZXN1bHQg dG8gKHI5LCByOCkgKi8KKwltb3Z3IHI5LCAgcjEwCQkvKiBTaGlmdCBsZWZ0 OiByOSB0byByMTAgKi8KKwlsc2hkICQxNiwgKHI5LCByOCkJLyogU2hpZnQg bGVmdDogcjggdG8gcjkgKi8KKwltb3Z3ICQwLCByMTEJCS8qIENsZWFyIHIx MSAqLworCWFkZGQgKHI5LCByOCksIChyMTIpCS8qIEFkZCAocjksIHI4KSB0 byByMTIgKi8KKwliY2MgTDMJCQkvKiBJZiBubyBjYXJyeSBvY2N1cnJlZCBn byB0byBMMyAqLworCWFkZGQgJDEsIChyMTMpCQkvKiBJZiBjYXJyeSBvY2N1 cnJlZCBhZGQgMSB0byByMTMgKi8KKworTDM6CWFkZGQgKHIxMSwgcjEwKSwg KHIxMykJLyogQWRkIChyMTEsIHIxMCkgdG8gcjEzICovCisJCQorCS8qIEJs KkRoICovCisJbW92ZCAkMCwgKHI5LCByOCkJLyogQ2xlYXIgKHI5LCByOCkg Ki8KKwltYWN1dyByMCwgcjUsIChyOSwgcjgpCS8qIE11bHRpcGx5IHIwIGFu ZCByNSBhbmQgc3RvciBpbiAocjksIHI4KSAqLworCW1vdncgcjksIHIxMAkJ LyogU2hpZnQgbGVmdDogcjkgdG8gcjEwICovCisJbHNoZCAkMTYsIChyOSwg cjgpCS8qIFNoaWZ0IGxlZnQ6IHI4IHRvIHI5ICovCisJYWRkZCAocjksIHI4 KSwgKHIxMikJLyogQWRkIChyOSwgcjgpIHRvIHIxMiAqLworCWJjYyBMNAkJ CS8qIElmIG5vIGNhcnJ5IG9jY3VycmVkIGdvIHRvIEw0ICovIAorCWFkZGQg JDEsIChyMTMpCQkvKiBJZiBjYXJyeSBvY2N1cnJlZCBhZGQgMSB0byByMTMg Ki8KKworTDQ6CWFkZGQgKHIxMSwgcjEwKSwgKHIxMykJLyogQWRkIChyMTEs IHIxMCkgdG8gcjEzICovCisKKwkvKiBCaCpEaCAqLworCW1vdmQgJDAsIChy OSwgcjgpCS8qIENsZWFyIChyOSwgcjgpICovCisJbWFjdXcgcjEsIHI1LCAo cjksIHI4KQkvKiBNdWx0aXBseSByMSBhbmQgcjUgYW5kIGFkZCB0byByMTMg Ki8KKwlhZGRkIChyOSwgcjgpLCAocjEzKQkvKiBBZGQgKHI5LCByOCkgdG8g cmVzdWx0ICovCisKKwkvKiBBKkQgKi8KKwkvKiBBbCpEbCAqLworCW1vdmQg JDAsIChyMTEsIHIxMCkJLyogQ2xlYXIgKHIxMSwgcjEwKSAqLworCW1hY3V3 IHIyLCByNCwgKHIxMSwgcjEwKS8qIE11bHRpcGx5IHIyIGFuZCByNCBhbmQg YWRkIHRvIChyMTEsIHIxMCkgKi8KKwkKKwlhZGRkIChyMTMpLCAocjExLCBy MTApCS8qIENvcHkgcjEzIHRvIChyMTEsIHIxMCkgKi8KKworCS8qIEFsKkRo ICovCisJbW92ZCAkMCwgKHI5LCByOCkJLyogQ2xlYXIgKHI5LCByOCkgKi8K KwltYWN1dyByMiwgcjUsIChyOSwgcjgpCS8qIE11bHRpcGx5IHIyIGFuZCBy NSBhbmQgYWRkIHRvIChyOSwgcjgpICovCisJYWRkdyByOCwgcjExCQkvKiBB ZGQgcjggdG8gcjExICovCisJCisJLyogQWgqRGwgKi8KKwltdWx1dyByMywg KHI1LCByNCkJLyogTXVsdGlwbHkgcjMgYW5kIHI0IGFuZCBzdG9yIGluIChy NSwgcjQpICovCisJYWRkdyByNCwgcjExCQkvKiBBZGQgcjQgdG8gcjExICov CisKKwkvKiBCKkMgKi8KKwkvKiBCbCpDbCAqLworCW1vdmQgJDAsIChyOSwg cjgpCS8qIENsZWFyIChyOSwgcjgpICovCisJbWFjdXcgcjAsIHI2LCAocjks IHI4KQkvKiBNdWx0aXBseSByMCBhbmQgcjYgYW5kIGFkZCB0byAocjksIHI4 KSAqLworCWFkZGQgKHI5LCByOCksIChyMTEsIHIxMCkvKiBBZGQgKHI5LCBy OCkgdG8gcmVzdWx0ICovCisKKwkvKiBCbCpDaCAqLworCW1vdmQgJDAsIChy OSwgcjgpCS8qIENsZWFyIChyOSwgcjgpICovCisJbWFjdXcgcjAsIHI3LCAo cjksIHI4KQkvKiBNdWx0aXBseSByMCBhbmQgcjcgYW5kIGFkZCB0byAocjks IHI4KSAqLworCWFkZHcgcjgsIHIxMQkJLyogQWRkIHI4IHRvIHIxMSAqLwor CisJbG9hZHcgMTgoc3ApLCByOAkvKiBMb2FkIG5lZyBmcm9tIHN0YWNrICov CisKKwkvKiBCaCpDbCAqLworCW11bHV3IHIxLCAocjcsIHI2KQkvKiBNdWx0 aXBseSByMSBhbmQgcjYgYW5kIHN0b3IgaW4gKHI3LCByNikgKi8KKwlhZGR3 IHI2LCByMTEJCS8qIEFkZCByNiB0byByMTEgKi8KKworRTE6CW1vdmQgKHIx MSwgcjEwKSwgKHIzLCByMikKKwltb3ZkIChyMTIpLCAocjEsIHIwKQkKKwor CS8qIElmIChuZWcpICovCisJY21wdyAkMCwgcjgJCS8qIENvbXBhcmUgMCB3 aXRoIG5lZyAqLworCWJlcQlMZXhpdF9fCisJCisJLyogTmVnID0gLU5lZyAq LworCW1vdmQgJC0xLCAocjksIHI4KSAJLyogVGVtcCBzZXQgdG8gRkZGRkZG RkYgKi8KKwl4b3JkIChyOSwgcjgpLCAocjEsIHIwKQkvKiBYb3IgbG93IGJp dHMgb2YgcmVzdWx0IHdpdGggdGVtcCAqLworCXhvcmQgKHI5LCByOCksIChy MywgcjIpIC8qIFhvciBoaWdoIGJpdHMgb2YgcmVzdWx0IHdpdGggdGVtcCAq LworCWFkZGQgJDEsIChyMSwgcjApCS8qIEFkZCAxIHRvIGxvdyBiaXRzIG9m IHJlc3VsdCAqLworCWJjYwlMZXhpdF9fCisJYWRkZCAkMSwgKHIzLCByMikJ LyogQWRkIDEgdG8gaGlnaCBiaXQgb2YgcmVzdWx0ICovCitMZXhpdF9fOgor CXBvcAkkNywgcjcKKwlwb3ByZXQJJDIsIHIxMworI2VuZGlmCisKKyNpZmRl ZiBMX25lZ2RpMgorCS50ZXh0CisJLmFsaWduIDQKKwkuZ2xvYmwgX19fbmVn ZGkyCisKK19fX25lZ2RpMjoKKwkvKiBMb2FkIHBhcmFtZXRlciBmcm9tIHRo ZSByZWdpc3RlcnMgaW4gdGhpcyBvcmRlciAqLworCWxvYWRkIDAoc3ApLCAo cjEsIHIwKQorCWxvYWRkIDQoc3ApLCAocjMsIHIyKQorCQorCW1vdmQgJC0x LCAocjYsIHI1KQkvKiBTZXQgdGVtcCB0byBGRkZGRkZGRiAqLworCXhvcmQg KHI2LCByNSksIChyMSwgcjApCS8qIFhvciBsb3cgYml0cyB3aXRoIHRlbXAg Ki8KKwl4b3JkIChyNiwgcjUpLCAocjMsIHIyKQkvKiBYb3IgaGlnaCBiaXRz IHdpdGggdGVtcCAqLworCWFkZGQgJDEsIChyMSwgcjApCS8qIEFkZCBvbmUg Ki8KKwlqY2MgKHJhKQorCWFkZGQgJDEsIChyMywgcjIpCS8qIEFkZCB0aGUg Y2FycnkgdG8gdGhlIGhpZ2ggYml0cyAqLworCWp1bXAgKHJhKQorI2VuZGlm CisKKyNpZmRlZiBMX3VkaXZkaTMKKwkudGV4dAorCS5hbGlnbiA0CisJLmds b2JsIF9fX3VkaXZkaTMKKworX19fdWRpdmRpMzoKKwltb3Z3ICQwLCByMgor CWJyIF9fX3VkaXZtb2RkaTMKKyNlbmRpZgorCisjaWZkZWYgTF91ZGl2bW9k ZGkzCisJLnRleHQKKwkuYWxpZ24gNAorCS5nbG9ibCBfX191ZGl2bW9kZGkz CisKK19fX3VkaXZtb2RkaTM6CisJcHVzaAkkMiwgcjEzCisJcHVzaAkkNywg cjcKKworCS8qIFBhcmFtICMxIExvbmcgTG9uZyBsb3cgYml0IGZpcnN0ICov CisJbG9hZGQJMTgoc3ApLCAocjEsIHIwKQorCXN0b3J3CXIyLCAxOChzcCkJ LyogU3RvcmUgbW9kdWxvIG9uIHN0YWNrICovCisJbG9hZGQJMjIoc3ApLCAo cjMsIHIyKQorCisJLyogUGFyYW0gIzIgTG9uZyBMb25nIGxvdyBiaXQgZmly c3QgKi8KKwlsb2FkZAkyNihzcCksIChyNSwgcjQpCisJbG9hZGQJMzAoc3Ap LCAocjcsIHI2KQorCisJLyogU2V0IHVyZXMgdG8gMCAqLworCW1vdmQgJDAs IChyMTMpCisJbW92ZCAkMCwgKHIxMikKKwkKKwljbXBkIChyMTIpLCAocjUs IHI0KQorCWJlcSBMRQorCitMNToJbW92ZCAkMSwgKHI5LCByOCkJLyogU3Rv cmUgMSBpbiBsb3cgYml0cyBmcm9tIGJpdCAqLworCW1vdmQgJDAsIChyMTEs IHIxMCkJLyogU3RvcmUgMCBpbiBoaWdoIGJpdHMgZnJvbSBiaXQgKi8KKwkK K0w2OgkvKiBXaGlsZSAoZGVuIDwgbnVtICYmICghZGVuICYgKDFMTDw8NjMp KSkgKi8KKwkvKiBDb21wYXJlIGhpZ2ggYml0cyBmcm9tIHBhcmFtIDEgYW5k IHBhcmFtIDIgKi8KKwljbXBkIChyNywgcjYpLCAocjMsIHIyKQkKKwliaGkg TDEwCQkJLyogSWYgcGFyYW0gMiBpcyBncmVhdGVyIGdvIHRvIEwxMCAqLwor CWJuZSBMOAkJCS8qIElmIHBhcmFtIDEgaXMgZ3JlYXRlciBnbyB0byBMOCAq LworCWNtcGQgKHI1LCByNCksIChyMSwgcjApCS8qIENvbXBhcmUgbG93IGJp dHMgZnJvbSBwYXJhbSAxIGFuZCBwYXJhbSAyICovCisJLyogIElmIHBhcmFt IDIgaXMgZ3JlYXRlciBvciB0aGUgc2FtZSBnbyB0byBMMSAqLworCWJocyBM MTAJCQkgCisKK0w4OgkvKiBDaGVjayBpZiBtb3N0IHNpZ25pZmljYW50IGJp dCBvZiBwYXJhbSAyIGlzIHNldCAqLworCXRiaXQgJDE1LCByNwkJCisJYmZz IEwxMAkJCS8qIElmIFBTUiBpcyBzZXQgZ28gdG8gTDEwICovCisKKwkvKiBT aGlmdCBiaXQgKi8KKwlsc2hkICQxLCAocjExLCByMTApCS8qIFNoaWZ0IGxl ZnQ6IGhpZ2ggYml0cyBvZiBiaXQgKi8gCisJLyogQ2hlY2sgaWYgbW9zdCBz aWduaWZpY2FudCBiaXQgb2YgYml0IGlzIHNldCAqLworCXRiaXQgJDE1LCBy OQkJCisJbHNoZCAkMSwgKHI5LCByOCkJLyogU2hpZnQgbGVmdDogbG93IGJp dHMgb2YgYml0ICovCisJYmZzIEwyOAkJCS8qIElmIFBTUiBpcyBzZXQgZ28g dG8gTDI4ICovCisKK0w5OgkvKiBTaGlmdCBiICovCisJbHNoZCAkMSwgKHI3 LCByNikJLyogU2hpZnQgbGVmdDogaGlnaCBiaXRzIG9mIHBhcmFtIDIgKi8K KwkvKiBDaGVjayBpZiBtb3N0IHNpZ25pZmljYW50IGJpdCBvZiBwYXJhbSAy IGlzIHNldCAqLworCXRiaXQgJDE1LCByNQkJCisJbHNoZCAkMSwgKHI1LCBy NCkJLyogU2hpZnQgbGVmdDogbG93IGJpdHMgb2YgcGFyYW0gMiAqLworCWJm YyBMNgkJCS8qIElmIFBTUiBpcyBzZXQgZ28gdG8gTDYgKi8KKwlhZGR3ICQx LCByNgkJLyogQWRkIDEgdG8gdGhlIGhpZ2hlc3QgYml0cyBvZiBiICovCisJ YnIgTDYJCQkvKiBHbyB0byBMNiAqLworCQorTDEwOgkvKiBXaGlsZSAoYml0 KSAqLworCWNtcGQgJDAsIChyMTEsIHIxMCkJCisJYm5lIEwxMQorCWNtcGQg JDAsIChyOSwgcjgpCisJYmVxIEUxCisKK0wxMToJLyogSWYgKG51bSA+PSBk ZW4pICovCisJY21wZCAocjMsIHIyKSwgKHI3LCByNikJLyogQ29tcGFyZSBo aWdoIGJpdHMgb2YgcGFyYW0gMSBhbmQgcGFyYW0gMiAqLworCWJsbyBMMTUJ CQkvKiBJZiBwYXJhbSAxIGxvd2VyIHRoYW4gcGFyYW0gMiBnbyB0byBMMTUg Ki8KKwlibmUgTDEyCQkJLyogSWYgbm90IGVxdWFsIGdvIHRvIEwxMiAqLwkK KwljbXBkIChyMSwgcjApLCAocjUsIHI0KQkvKiBDb21wYXJlIGxvdyBiaXRz IG9mIHBhcmFtIDEgYW5kIHBhcmFtIDIgKi8KKwlibG8gTDE1CQkJLyogSWYg cGFyYW0gMSBsb3dlciB0aGFuIHBhcmFtIDIgZ28gdG8gTDE1ICovCisKK0wx MjoJLyogVXJlcyB8PSBiaXQgKi8KKwlvcmQgKHIxMSwgcjEwKSwgKHIxMykK KwlvcmQgKHI5LCByOCksIChyMTIpCQorCisJLyogTnVtIC09IGRlbiAqLwor CXN1YmQgKHI3LCByNiksIChyMywgcjIpIC8qIFN1YnRyYWN0IGhpZ2hlc3Qg MzIgYml0cyBmcm9tIGVhY2ggb3RoZXIgKi8KKwlzdWJkIChyNSwgcjQpLCAo cjEsIHIwKQkvKiBTdWJ0cmFjdCBsb3dlc3QgMzIgYml0cyBmcm9tIGVhY2gg b3RoZXIgKi8KKwliY2MgTDE1CQkJLyogSWYgbm8gY2Fycnkgb2NjdXJyZWQg Z28gdG8gTDE1ICovCisJc3ViZCAkMSwgKHIzLCByMikJLyogU3VidHJhY3Qg dGhlIGNhcnJ5ICovCisKKwkKK0wxNToJLyogU2hpZnQgYml0IHRvIHRoZSBy aWdodCAqLworCWxzaGQgJC0xLCAocjksIHI4KQkvKiBTaGlmdCByaWdodDog bG93IGJpdHMgb2YgYml0ICovCisJLyogQ2hlY2sgaWYgbGVhc3Qgc2lnbmlm aWNhbnQgYml0IG9mIGhpZ2ggYml0cyBpcyBzZXQgKi8KKwl0Yml0ICQwLCBy MTAJCQorCWxzaGQgJC0xLCAocjExLCByMTApCS8qIFNoaWZ0IHJpZ2h0OiBo aWdoIGJpdHMgb2YgYml0ICovCisJYmZzIEwxOAkJCS8qIElmIFBTUiBpcyBz ZXQgZ28gdG8gTDE4ICovCisKK0wxNzoJLyogU2hpZnQgcGFyYW0jMiB0byB0 aGUgcmlnaHQgKi8KKwlsc2hkICQtMSwgKHI1LCByNCkJLyogU2hpZnQgcmln aHQ6IGxvdyBiaXRzIG9mIHBhcmFtIDIgKi8KKwkvKiBDaGVjayBpZiBsZWFz dCBzaWduaWZpY2FudCBiaXQgb2YgaGlnaCBiaXRzIGlzIHNldCAqLworCXRi aXQgJDAsIHI2CQkKKwlsc2hkICQtMSwgKHI3LCByNikJLyogU2hpZnQgcmln aHQ6IGhpZ2ggYml0cyBvZiBwYXJhbSAyICovCisJYmZjIEwxMAkJCS8qIElm IFBTUiBpcyBub3Qgc2V0IGdvIHRvIEwxMCAqLworCS8qIE9yIHdpdGggMHg4 MDAwIHRvIHNldCBtb3N0IHNpZ25pZmljYW50IGJpdCAqLworCW9ydyAkMzI3 NjgsIHI1CQkKKwliciBMMTAJCQkvKiBHbyB0byBMMTAgKi8KKworCitMMTg6 CS8qIE9yIHdpdGggMHg4MDAwIHRvIHNldCBtb3N0IHNpZ25pZmljYW50IGJp dCAqLworCW9ydyAkMzI3NjgsIHI5CQkKKwliciBMMTcKKworCitMMjg6IAkv KiBMZWZ0IHNoaWZ0IGJpdCAqLworCWFkZHcgJDEsIHIxMAkJLyogQWRkIDEg dG8gaGlnaGVzdCBiaXRzIG9mIGJpdCAqLworCWJyIEw5CQkJLyogR28gdG8g TDkgKi8KKworTEU6CWNtcGQgKHIxMiksIChyNywgcjYpCisJYm5lIEw1CisJ ZXhjcCBkdnoKKwlicglMZXhpdF9fCisKK0UxOglsb2FkdwkxOChzcCksIHI0 CisJY21wdyAkMCwgcjQKKwlibmUJTGV4aXRfXworCisJLyogUmV0dXJuIHJl c3VsdCAqLworCW1vdmQgKHIxMiksIChyMSwgcjApCisJbW92ZCAocjEzKSwg KHIzLCByMikKK0xleGl0X186CisJcG9wCSQ3LCByNworCXBvcHJldAkkMiwg cjEzCisjZW5kaWYKKworI2lmZGVmIExfdW1vZGRpMworCS50ZXh0CisJLmFs aWduIDQKKwkuZ2xvYmwgX19fdW1vZGRpMworCitfX191bW9kZGkzOgorCW1v dncgJDEsIHIyCisJYnIgX19fdWRpdm1vZGRpMworI2VuZGlmCisKZGlmZiAt dXByTiBvcmlnL2djYy9jb25maWcvY3IxNi9jcjE2Lm1kIG1vZC9nY2MvY29u ZmlnL2NyMTYvY3IxNi5tZAotLS0gb3JpZy9nY2MvY29uZmlnL2NyMTYvY3Ix Ni5tZAkxOTcwLTAxLTAxIDA1OjMwOjAwLjAwMDAwMDAwMCArMDUzMAorKysg bW9kL2djYy9jb25maWcvY3IxNi9jcjE2Lm1kCTIwMTEtMDUtMjAgMTY6Mjk6 NTEuMDAwMDAwMDAwICswNTMwCkBAIC0wLDAgKzEsMTI3MSBAQAorOzsgR0ND IG1hY2hpbmUgZGVzY3JpcHRpb24gZm9yIENSMTYuCis7OyBDb3B5cmlnaHQg KEMpIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCis7OyBD b250cmlidXRlZCBieSBLUElUIEN1bW1pbnMgSW5mb3N5c3RlbXMgTGltaXRl ZC4KKworOzsgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCis7OyBHQ0Mg aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeSBpdAorOzsgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKzs7IHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMs IG9yIChhdCB5b3VyIG9wdGlvbikKKzs7IGFueSBsYXRlciB2ZXJzaW9uLgor Cis7OyBHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKzs7IEFOWSBXQVJSQU5UWTsg d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5U QUJJTElUWQorOzsgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworOzsgTGljZW5zZSBm b3IgbW9yZSBkZXRhaWxzLgorCis7OyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2 ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor OzsgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElm IG5vdCBzZWUKKzs7IDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4g CisKKzs7ICBSZWdpc3RlciBudW1iZXJzCisoZGVmaW5lX2NvbnN0YW50cwor ICBbKFNQX1JFR05VTSAxNSk7IFN0YWNrIHBvaW50ZXIKKyAgIChSQV9SRUdO VU0gMTQpOyBSZXR1cm4gYWRkcmVzcworICBdCispCisKKzs7IFByZWRpY2F0 ZXMgJiBDb25zdHJhaW50cworKGluY2x1ZGUgInByZWRpY2F0ZXMubWQiKQor KGluY2x1ZGUgImNvbnN0cmFpbnRzLm1kIikKKworOzsgVU5TUEVDIHVzYWdl CisoZGVmaW5lX2NvbnN0YW50cworICBbKFVOU1BFQ19QSUNfQUREUiAgICAg ICAgICAgICAwKQorICAgKFVOU1BFQ19QSUNfTE9BRF9BRERSICAgICAgICAx KQorICAgKFVOU1BFQ19MSUJSQVJZX09GRlNFVCAgICAgICAyKQorICAgKFVO U1BFQ19TSF9MSUJfUFVTSF9SMTIgICAgICAzKQorICAgKFVOU1BFQ19TSF9M SUJfUE9QX1IxMiAgICAgICA0KQorICAgKFVOU1BFQ19SRVRVUk5fQUREUiAg ICAgICAgICA1KQorICBdCispCisKKzs7IEF0dHJpYnV0ZXMKKyhkZWZpbmVf YXR0ciAibGVuZ3RoIiAiIiAoY29uc3RfaW50IDIpKQorCisoZGVmaW5lX2Fz bV9hdHRyaWJ1dGVzCisgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjIiKV0KKykK KworOzsgIE1vZGUgTWFjcm8gRGVmaW5pdGlvbnMKKyhkZWZpbmVfbW9kZV9p dGVyYXRvciBDUjE2SU0gW1FJIEhJIFNJXSkKKyhkZWZpbmVfbW9kZV9pdGVy YXRvciBMT05HICAgW1NJIFNGXSkKKyhkZWZpbmVfbW9kZV9pdGVyYXRvciBB TExNVEQgW1FJIEhJIFNJIFNGIERJIERGXSkKKyhkZWZpbmVfbW9kZV9pdGVy YXRvciBET1VCTEUgW0RJIERGXSkKKyhkZWZpbmVfbW9kZV9pdGVyYXRvciBT SE9SVCAgW1FJIEhJXSkKKyhkZWZpbmVfbW9kZV9hdHRyIHRJc2EgICAgICBb KFFJICJiIikgKEhJICJ3IikgKFNJICJkIikgKFNGICJkIildKQorKGRlZmlu ZV9tb2RlX2F0dHIgbEltbUFyaXRoICBbKFFJICI0IikgKEhJICI0IikgKFNJ ICI2IikgKFNGICI2IildKQorKGRlZmluZV9tb2RlX2F0dHIgbEltbUFyaXRo RCBbKFFJICI0IikgKEhJICI0IikgKFNJICI2IikgKFNGICI2IikgKERJICIx MiIpIChERiAiMTIiKV0pCisoZGVmaW5lX21vZGVfYXR0ciBpRiAgICAgICAg WyhRSSAiaSIpIChISSAiaSIpIChTSSAiaSIpIChTRiAiRiIpXSkKKyhkZWZp bmVfbW9kZV9hdHRyIGlGRCAgICAgICBbKERJICJpIikgKERGICJGIildKQor KGRlZmluZV9tb2RlX2F0dHIgTEwgICAgICAgIFsoUUkgIkwiKSAoSEkgIkwi KV0pCisoZGVmaW5lX21vZGVfYXR0ciBzaEltbUJpdHMJWyhRSSAiMyIpIChI SSAiNCIpIChTSSAiNSIpXSkKKworOyBJbiBRSSBtb2RlIHdlIHB1c2ggMiBi eXRlcyBpbnN0ZWFkIG9mIDEgYnl0ZS4KKyhkZWZpbmVfbW9kZV9hdHRyIHB1 c2hDbnN0ciBbKFFJICJYIikgKEhJICI8IikgKFNJICI8IikgKFNGICI8Iikg KERJICI8IikgKERGICI8IildKQorOyB0cHVzaCB3aWxsIGJlIHVzZWQgdG8g Z2VuZXJhdGUgdGhlICdudW1iZXIgb2YgcmVnaXN0ZXJzIHRvIHB1c2gnIGlu IHRoZSAKKzsgcHVzaCBpbnN0cnVjdGlvbi4KKyhkZWZpbmVfbW9kZV9hdHRy IHRwdXNoIFsoUUkgIjEiKSAoSEkgIjEiKSAoU0kgIjIiKSAoU0YgIjIiKSAo REkgIjQiKSAoREYgIjQiKV0pCisKKzs7ICBDb2RlIE1hY3JvIERlZmluaXRp b25zCisoZGVmaW5lX2NvZGVfaXRlcmF0b3Igc3pfeHRuZCBbIHNpZ25fZXh0 ZW5kICAgICAgIHplcm9fZXh0ZW5kXSkKKyhkZWZpbmVfY29kZV9hdHRyICBz SXNhICAgIFsoc2lnbl9leHRlbmQgIiIpICAoemVyb19leHRlbmQgInUiKV0p CisoZGVmaW5lX2NvZGVfYXR0ciAgc1BhdCAgICBbKHNpZ25fZXh0ZW5kICJz IikgKHplcm9fZXh0ZW5kICJ1IildKQorKGRlZmluZV9jb2RlX2F0dHIgIHN6 UGF0ICAgWyhzaWduX2V4dGVuZCAiIikgICh6ZXJvX2V4dGVuZCAiemVyb18i KV0pCisoZGVmaW5lX2NvZGVfYXR0ciAgc3pJc2EgICBbKHNpZ25fZXh0ZW5k ICJ4IikgKHplcm9fZXh0ZW5kICJ6IildKQorKGRlZmluZV9jb2RlX2l0ZXJh dG9yIGFueV9jb25kIFtlcSBuZSBndCBndHUgbHQgbHR1IGdlIGdldSBsZSBs ZXVdKQorCis7OyBBcml0aG1ldGljIEluc3R1Y3Rpb24gIFBhdHRlcm5zCis7 OworOzsgQWRkaXRpb24gaW5zbnMuCisoZGVmaW5lX2V4cGFuZCAiYWRkZGkz IgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpESSAwICJyZWdpc3Rlcl9vcGVy YW5kIiAiIikKKwkocGx1czpESSAobWF0Y2hfb3BlcmFuZDpESSAxICJyZWdp c3Rlcl9vcGVyYW5kIiAiIikKKwkJIChtYXRjaF9vcGVyYW5kOkRJIDIgIm5v bm1lbW9yeV9vcGVyYW5kIiAiIikpKV0KKyAgIiIKKyAgeworICAgIGlmICgo R0VUX0NPREUgKG9wZXJhbmRzWzJdKSAhPSBSRUcpKQorICAgICAgeworCW9w ZXJhbmRzWzJdID0gZm9yY2VfcmVnIChESW1vZGUsIG9wZXJhbmRzWzJdKTsK KyAgICAgIH0KKyAgfQorKQorCisoZGVmaW5lX2luc24gImFkZGRpM19pbnNu IgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpESSAwICJyZWdpc3Rlcl9vcGVy YW5kIiAiPXIiKQorCShwbHVzOkRJIChtYXRjaF9vcGVyYW5kOkRJIDEgInJl Z2lzdGVyX29wZXJhbmQiICIlMCIpCisJCSAobWF0Y2hfb3BlcmFuZDpESSAy ICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpKSldCisgICIiCisgICIqCisgICAg cmV0dXJuIGNyMTZfZW1pdF9hZGRfc3ViX2RpIChvcGVyYW5kcywgMCk7Cisg ICIKKykKKworKGRlZmluZV9pbnNuICJhZGRzaTMiCisgIFsoc2V0IChtYXRj aF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9cixyLHIscixy IikKKwkocGx1czpTSSAobWF0Y2hfb3BlcmFuZDpTSSAxICJyZWdpc3Rlcl9v cGVyYW5kIiAiJTAsMCwwLDAsMCIpCisJCSAobWF0Y2hfb3BlcmFuZDpTSSAy ICJyZWdfc2lfaW50X29wZXJhbmQiICJyLE0sTixPLGkiKSkpXQorICAiIgor ICAiYWRkZFx0JTIsICUwIgorICBbKHNldF9hdHRyICJsZW5ndGgiICIyLDIs NCw0LDYiKV0KKykKKworKGRlZmluZV9pbnNuICJhZGRoaTMiCisgIFsoc2V0 IChtYXRjaF9vcGVyYW5kOkhJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9Yyxj LGMiKQorCShwbHVzOkhJIChtYXRjaF9vcGVyYW5kOkhJIDEgInJlZ2lzdGVy X29wZXJhbmQiICIlMCwwLDAiKQorCQkgKG1hdGNoX29wZXJhbmQ6SEkgMiAi cmVnX2hpX2ludF9vcGVyYW5kIiAiYyxNLE4iKSkpXQorICAiIgorICAiYWRk d1x0JTIsICUwIgorICBbKHNldF9hdHRyICJsZW5ndGgiICIyLDIsNCIpXQor KQorCisoZGVmaW5lX2luc24gImFkZHFpMyIKKyAgWyhzZXQgKG1hdGNoX29w ZXJhbmQ6UUkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1jLGMiKQorCShwbHVz OlFJIChtYXRjaF9vcGVyYW5kOlFJIDEgInJlZ2lzdGVyX29wZXJhbmQiICIl MCwwIikKKwkJIChtYXRjaF9vcGVyYW5kOlFJIDIgInJlZ19xaV9pbnRfb3Bl cmFuZCIgImMsTSIpKSldCisgICIiCisgICJhZGRiXHQlMiwgJTAiCisgIFso c2V0X2F0dHIgImxlbmd0aCIgIjIsMiIpXQorKQorCis7OworOzsgIFN1YnRy YWN0IEluc3RydWN0aW9ucworKGRlZmluZV9leHBhbmQgInN1YmRpMyIKKyAg WyhzZXQgKG1hdGNoX29wZXJhbmQ6REkgMCAicmVnaXN0ZXJfb3BlcmFuZCIg IiIpCisJKG1pbnVzOkRJIChtYXRjaF9vcGVyYW5kOkRJIDEgInJlZ2lzdGVy X29wZXJhbmQiICIiKQorCQkgIChtYXRjaF9vcGVyYW5kOkRJIDIgIm5vbm1l bW9yeV9vcGVyYW5kIiAiIikpKV0KKyAgIiIKKyAgeworICAgIGlmICgoR0VU X0NPREUgKG9wZXJhbmRzWzJdKSAhPSBSRUcpKQorICAgICAgeworCW9wZXJh bmRzWzJdID0gZm9yY2VfcmVnIChESW1vZGUsIG9wZXJhbmRzWzJdKTsKKyAg ICAgIH0KKyAgfQorKQorCisoZGVmaW5lX2luc24gInN1YmRpM19pbnNuIgor ICBbKHNldCAobWF0Y2hfb3BlcmFuZDpESSAwICJyZWdpc3Rlcl9vcGVyYW5k IiAiPXIiKQorCShtaW51czpESSAobWF0Y2hfb3BlcmFuZDpESSAxICJyZWdp c3Rlcl9vcGVyYW5kIiAiMCIpCisJCSAgKG1hdGNoX29wZXJhbmQ6REkgMiAi cmVnaXN0ZXJfb3BlcmFuZCIgInIiKSkpXQorICAiIgorICAiKgorICAgIHJl dHVybiBjcjE2X2VtaXRfYWRkX3N1Yl9kaSAob3BlcmFuZHMsIDEpOworICAi CispCisKKyhkZWZpbmVfaW5zbiAic3Vic2kzIgorICBbKHNldCAobWF0Y2hf b3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIsciIpCisJKG1p bnVzOlNJIChtYXRjaF9vcGVyYW5kOlNJIDEgInJlZ2lzdGVyX29wZXJhbmQi ICIwLDAiKQorCQkgIChtYXRjaF9vcGVyYW5kOlNJIDIgInJlZ19zaV9pbnRf b3BlcmFuZCIgInIsaSIpKSldCisgICIiCisgICJzdWJkXHQlMiwgJTAiCisg IFsoc2V0X2F0dHIgImxlbmd0aCIgIjQsNiIpXQorKQorCisoZGVmaW5lX2lu c24gInN1YmhpMyIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6SEkgMCAicmVn aXN0ZXJfb3BlcmFuZCIgIj1jLGMsYyIpCisJKG1pbnVzOkhJIChtYXRjaF9v cGVyYW5kOkhJIDEgInJlZ2lzdGVyX29wZXJhbmQiICIwLDAsMCIpCisJCSAg KG1hdGNoX29wZXJhbmQ6SEkgMiAicmVnX2hpX2ludF9vcGVyYW5kIiAiYyxN LE4iKSkpXQorICAiIgorICAic3Vid1x0JTIsICUwIgorICBbKHNldF9hdHRy ICJsZW5ndGgiICIyLDIsNCIpXQorKQorCisoZGVmaW5lX2luc24gInN1YnFp MyIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6UUkgMCAicmVnaXN0ZXJfb3Bl cmFuZCIgIj1jLGMiKQorCShtaW51czpRSSAobWF0Y2hfb3BlcmFuZDpRSSAx ICJyZWdpc3Rlcl9vcGVyYW5kIiAiMCwwIikKKwkJICAobWF0Y2hfb3BlcmFu ZDpRSSAyICJyZWdfcWlfaW50X29wZXJhbmQiICJjLE0iKSkpXQorICAiIgor ICAic3ViYlx0JTIsICUwIgorICBbKHNldF9hdHRyICJsZW5ndGgiICIyLDIi KV0KKykKKworOzsKKzs7ICBNdWx0aXBseSBhbmQgQWNjdW11bGF0ZSBJbnN0 cnVjdGlvbnMKKyhkZWZpbmVfaW5zbiAic21hY2hpc2kzIgorICBbKHNldCAo bWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQor CShwbHVzOlNJCisJIChtdWx0OlNJIChzaWduX2V4dGVuZDpTSSAobWF0Y2hf b3BlcmFuZDpISSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpKQorCQkgIChz aWduX2V4dGVuZDpTSSAobWF0Y2hfb3BlcmFuZDpISSAyICJyZWdpc3Rlcl9v cGVyYW5kIiAiciIpKSkKKwkgKG1hdGNoX29wZXJhbmQ6U0kgMyAicmVnaXN0 ZXJfb3BlcmFuZCIgIjAiKSkpXQorICAiVEFSR0VUX01BQyIKKyAgIm1hY3N3 XHQlMSwgJTIsICUwIgorICBbKHNldF9hdHRyICJsZW5ndGgiICIyIildCisp CisKKyhkZWZpbmVfaW5zbiAidW1hY2hpc2kzIgorICBbKHNldCAobWF0Y2hf b3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQorCShwbHVz OlNJCisJIChtdWx0OlNJICh6ZXJvX2V4dGVuZDpTSSAobWF0Y2hfb3BlcmFu ZDpISSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpKQorCQkgICh6ZXJvX2V4 dGVuZDpTSSAobWF0Y2hfb3BlcmFuZDpISSAyICJyZWdpc3Rlcl9vcGVyYW5k IiAiciIpKSkKKwkgKG1hdGNoX29wZXJhbmQ6U0kgMyAicmVnaXN0ZXJfb3Bl cmFuZCIgIjAiKSkpXQorICAiVEFSR0VUX01BQyIKKyAgIm1hY3V3XHQlMSwg JTIsICUwIgorICBbKHNldF9hdHRyICJsZW5ndGgiICIyIildCispCisKKzs7 Cis7OyAgTXVsdGlwbHkgSW5zdHJ1Y3Rpb25zCisoZGVmaW5lX2luc24gIm11 bGhpMyIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6SEkgMCAicmVnaXN0ZXJf b3BlcmFuZCIgIj1jLGMsYyIpCisJKG11bHQ6SEkgKG1hdGNoX29wZXJhbmQ6 SEkgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIiUwLDAsMCIpCisJCSAobWF0Y2hf b3BlcmFuZDpISSAyICJyZWdfb3JfaW50X29wZXJhbmQiICJjLE0sTiIpKSld CisgICIiCisgICJtdWx3XHQlMiwgJTAiCisgIFsoc2V0X2F0dHIgImxlbmd0 aCIgIjIsMiw0IildCispCisKKyhkZWZpbmVfaW5zbiAibXVscWloaTMiCisg IFsoc2V0IChtYXRjaF9vcGVyYW5kOkhJIDAgInJlZ2lzdGVyX29wZXJhbmQi ICI9YyIpCisJKG11bHQ6SEkgKHNpZ25fZXh0ZW5kOkhJIChtYXRjaF9vcGVy YW5kOlFJIDEgInJlZ2lzdGVyX29wZXJhbmQiICIlMCIpKQorCQkgKHNpZ25f ZXh0ZW5kOkhJIChtYXRjaF9vcGVyYW5kOlFJIDIgInJlZ2lzdGVyX29wZXJh bmQiICJjIikpKSldCisgICIiCisgICJtdWxzYlx0JTIsICUwIgorICBbKHNl dF9hdHRyICJsZW5ndGgiICIyIildCispCisKKzs7Cis7OyAgQml0IFNldC9D bGVhciBJbnN0cnVjdGlvbnMKKyhkZWZpbmVfZXhwYW5kICJpbnN2IgorICBb KHNldCAoemVyb19leHRyYWN0IChtYXRjaF9vcGVyYW5kIDAgIm1lbW9yeV9v cGVyYW5kIiAiIikKKwkJICAgICAgKG1hdGNoX29wZXJhbmQgMSAiaW1tZWRp YXRlX29wZXJhbmQiICIiKQorCQkgICAgICAobWF0Y2hfb3BlcmFuZCAyICJp bW1lZGlhdGVfb3BlcmFuZCIgIiIpKQorCShtYXRjaF9vcGVyYW5kIDMgImlt bWVkaWF0ZV9vcGVyYW5kIiAiIikpXQorICAiVEFSR0VUX0JJVF9PUFMiCisg IHsKKyAgICBpZiAoSU5UVkFMIChvcGVyYW5kc1sxXSkgIT0gMSkKKyAgICAg IEZBSUw7CisgICAgaWYgKElOVFZBTCAob3BlcmFuZHNbMl0pIDwgMCB8fCBJ TlRWQUwgKG9wZXJhbmRzWzJdKSA+IDE1KQorICAgICAgRkFJTDsKKyAgICBp ZiAoSU5UVkFMIChvcGVyYW5kc1szXSkgPT0gMSkKKyAgICAgIHsKKwlpZiAo R0VUX01PREUgKG9wZXJhbmRzWzBdKSA9PSBRSW1vZGUpCisJICB7CisJICAg IGVtaXRfaW5zbiAoZ2VuX3NldF9iaXRxaSAob3BlcmFuZHNbMF0sIG9wZXJh bmRzWzJdKSk7CisJICAgIERPTkU7CisJICB9CisJZWxzZSBpZiAoR0VUX01P REUgKG9wZXJhbmRzWzBdKSA9PSBISW1vZGUpCisJICB7CisJICAgIGVtaXRf aW5zbiAoZ2VuX3NldF9iaXRoaSAob3BlcmFuZHNbMF0sIG9wZXJhbmRzWzJd KSk7CisJICAgIERPTkU7CisJICB9CisgICAgICB9CisgICAgaWYgKElOVFZB TCAob3BlcmFuZHNbM10pID09IDApCisgICAgICB7CisJaWYgKEdFVF9NT0RF IChvcGVyYW5kc1swXSkgPT0gUUltb2RlKQorCSAgeworCSAgICBlbWl0X2lu c24gKGdlbl9jbHJfYml0cWkgKG9wZXJhbmRzWzBdLCBvcGVyYW5kc1syXSkp OworCSAgICBET05FOworCSAgfQorCWVsc2UgaWYgKEdFVF9NT0RFIChvcGVy YW5kc1swXSkgPT0gSEltb2RlKQorCSAgeworCSAgICBlbWl0X2luc24gKGdl bl9jbHJfYml0aGkgKG9wZXJhbmRzWzBdLCBvcGVyYW5kc1syXSkpOworCSAg ICBET05FOworCSAgfQorICAgICAgfQorICB9CispCisKKyhkZWZpbmVfaW5z biAic2V0X2JpdDxtb2RlPiIKKyAgWyhzZXQgKHplcm9fZXh0cmFjdDpTSE9S VCAobWF0Y2hfb3BlcmFuZDpTSE9SVCAwICJtZW1vcnlfb3BlcmFuZCIgIitt IikKKwkJCSAgICAoY29uc3RfaW50IDEpCisJCQkgICAgKG1hdGNoX29wZXJh bmQgMSAiaW1tZWRpYXRlX29wZXJhbmQiICJpIikpCisJKGNvbnN0X2ludCAx KSldCisgICJUQVJHRVRfQklUX09QUyIKKyAgInNiaXQ8dElzYT5cdCUxLCUw IgorICBbKHNldF9hdHRyICJsZW5ndGgiICIyIildCispCisKKyhkZWZpbmVf aW5zbiAiY2xyX2JpdDxtb2RlPiIKKyAgWyhzZXQgKHplcm9fZXh0cmFjdDpT SE9SVCAobWF0Y2hfb3BlcmFuZDpTSE9SVCAwICJtZW1vcnlfb3BlcmFuZCIg IittIikKKwkJCSAgICAoY29uc3RfaW50IDEpCisJCQkgICAgKG1hdGNoX29w ZXJhbmQgMSAiaW1tZWRpYXRlX29wZXJhbmQiICJpIikpCisJKGNvbnN0X2lu dCAwKSldCisgICJUQVJHRVRfQklUX09QUyIKKyAgImNiaXQ8dElzYT5cdCUx LCUwIgorICBbKHNldF9hdHRyICJsZW5ndGgiICIyIildCispCisKKyhkZWZp bmVfaW5zbiAic2V0X2JpdDxtb2RlPl9tZW0iCisgIFsoc2V0IChtYXRjaF9v cGVyYW5kOlNIT1JUIDAgImJpdF9vcGVyYW5kIiAiPW0iKQorCShpb3I6U0hP UlQgKG1hdGNoX2R1cCAwKQorCQkgICAobWF0Y2hfb3BlcmFuZDpTSE9SVCAx ICJvbmVfYml0X29wZXJhbmQiICJpIikpCisgICldCisgICJUQVJHRVRfQklU X09QUyIKKyAgInNiaXQ8dElzYT5cdCQlczEsJTAiCisgIFsoc2V0X2F0dHIg Imxlbmd0aCIgIjIiKV0KKykKKworKGRlZmluZV9pbnNuICJjbGVhcl9iaXQ8 bW9kZT5fbWVtIgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSE9SVCAwICJi aXRfb3BlcmFuZCIgIj1tIikKKwkoYW5kOlNIT1JUIChtYXRjaF9kdXAgMCkK KwkJICAgKG1hdGNoX29wZXJhbmQ6U0hPUlQgMSAicmV2X29uZV9iaXRfb3Bl cmFuZCIgImkiKSkKKyAgKV0KKyAgIlRBUkdFVF9CSVRfT1BTIgorICAiY2Jp dDx0SXNhPlx0JCVyMSwlMCIKKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiMiIp XQorKQorCis7OworOzsgIExvZ2ljYWwgSW5zdHJ1Y3Rpb25zIC0gYW5kCisK KyhkZWZpbmVfZXhwYW5kICJhbmRkaTMiCisgIFsoc2V0IChtYXRjaF9vcGVy YW5kOkRJIDAgInJlZ2lzdGVyX29wZXJhbmQiICIiKQorCShhbmQ6REkgKG1h dGNoX29wZXJhbmQ6REkgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIiIpCisJCSht YXRjaF9vcGVyYW5kOkRJIDIgIm5vbm1lbW9yeV9vcGVyYW5kIiAiIikpKV0K KyAgIiIKKyAgICB7CisgICAgICBpZiAoKEdFVF9DT0RFIChvcGVyYW5kc1sy XSkgIT0gUkVHKSkKKwl7CisJICBvcGVyYW5kc1syXSA9IGZvcmNlX3JlZyAo REltb2RlLCBvcGVyYW5kc1syXSk7CisJfQorICAgIH0KKykKKworKGRlZmlu ZV9pbnNuICJhbmRkaTNfaW5zbiIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6 REkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikKKwkoYW5kOkRJIChtYXRj aF9vcGVyYW5kOkRJIDEgInJlZ2lzdGVyX29wZXJhbmQiICIlMCIpCisJCSht YXRjaF9vcGVyYW5kOkRJIDIgInJlZ2lzdGVyX29wZXJhbmQiICJyIikpKV0K KyAgIiIKKyAgIioKKyAgICByZXR1cm4gY3IxNl9lbWl0X2xvZ2ljYWxfZGkg KG9wZXJhbmRzLCAwKTsKKyAgIgorKQorCisoZGVmaW5lX2luc24gImFuZHNp MyIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3Bl cmFuZCIgIj1yLHIscixyIikKKwkoYW5kOlNJIChtYXRjaF9vcGVyYW5kOlNJ IDEgInJlZ2lzdGVyX29wZXJhbmQiICIlMCwwLDAsMCIpCisJCShtYXRjaF9v cGVyYW5kOlNJIDIgInJlZ19zaV9pbnRfb3BlcmFuZCIgInIsTSxOLGkiKSkp XQorICAiIgorICAiYW5kZFx0JTIsICUwIgorICBbKHNldF9hdHRyICJsZW5n dGgiICIyLDIsNCw2IildCispCisKKyhkZWZpbmVfaW5zbiAiYW5kaGkzIgor ICBbKHNldCAobWF0Y2hfb3BlcmFuZDpISSAwICJyZWdpc3Rlcl9vcGVyYW5k IiAiPWMsYyxjIikKKwkoYW5kOkhJIChtYXRjaF9vcGVyYW5kOkhJIDEgInJl Z2lzdGVyX29wZXJhbmQiICIlMCwwLDAiKQorCQkobWF0Y2hfb3BlcmFuZDpI SSAyICJyZWdfaGlfaW50X29wZXJhbmQiICJjLE0sTiIpKSldCisgICIiCisg ICJhbmR3XHQlMiwgJTAiCisgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjIsMiw0 IildCispCisKKyhkZWZpbmVfaW5zbiAiYW5kcWkzIgorICBbKHNldCAobWF0 Y2hfb3BlcmFuZDpRSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPWMsYyxjIikK KwkoYW5kOlFJIChtYXRjaF9vcGVyYW5kOlFJIDEgInJlZ2lzdGVyX29wZXJh bmQiICIlMCwwLDAiKQorCQkobWF0Y2hfb3BlcmFuZDpRSSAyICJyZWdfaGlf aW50X29wZXJhbmQiICJjLE0sTiIpKSldCisgICIiCisgICJhbmRiXHQlMiwg JTAiCisgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjIsMiwyIildCispCisKKzs7 ICBMb2dpY2FsIEluc3RydWN0aW9ucyAtIG9yIAorKGRlZmluZV9leHBhbmQg ImlvcmRpMyIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6REkgMCAicmVnaXN0 ZXJfb3BlcmFuZCIgIiIpCisJKGlvcjpESSAobWF0Y2hfb3BlcmFuZDpESSAx ICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikKKwkJKG1hdGNoX29wZXJhbmQ6REkg MiAibm9ubWVtb3J5X29wZXJhbmQiICIiKSkpXQorICAiIgorICAgIHsKKyAg ICAgIGlmICgoR0VUX0NPREUgKG9wZXJhbmRzWzJdKSAhPSBSRUcpKQorCXsK KwkgIG9wZXJhbmRzWzJdID0gZm9yY2VfcmVnIChESW1vZGUsIG9wZXJhbmRz WzJdKTsKKwl9CisgICAgfQorKQorCisoZGVmaW5lX2luc24gImlvcmRpM19p bnNuIgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpESSAwICJyZWdpc3Rlcl9v cGVyYW5kIiAiPXIiKQorCShpb3I6REkgKG1hdGNoX29wZXJhbmQ6REkgMSAi cmVnaXN0ZXJfb3BlcmFuZCIgIiUwIikKKwkJKG1hdGNoX29wZXJhbmQ6REkg MiAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKSkpXQorICAiIgorICAiKgorICAg IHJldHVybiBjcjE2X2VtaXRfbG9naWNhbF9kaSAob3BlcmFuZHMsIDEpOwor ICAiCispCisKKyhkZWZpbmVfaW5zbiAiaW9yc2kzIgorICBbKHNldCAobWF0 Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIscixyLHIi KQorCShpb3I6U0kgKG1hdGNoX29wZXJhbmQ6U0kgMSAicmVnaXN0ZXJfb3Bl cmFuZCIgIiUwLDAsMCwwIikKKwkJKG1hdGNoX29wZXJhbmQ6U0kgMiAicmVn X3NpX2ludF9vcGVyYW5kIiAicixNLE4saSIpKSldCisgICIiCisgICJvcmRc dCUyLCAlMCIKKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiMiwyLDQsNiIpXQor KQorCisoZGVmaW5lX2luc24gImlvcmhpMyIKKyAgWyhzZXQgKG1hdGNoX29w ZXJhbmQ6SEkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1jLGMsYyIpCisJKGlv cjpISSAobWF0Y2hfb3BlcmFuZDpISSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAi JTAsMCwwIikKKwkJKG1hdGNoX29wZXJhbmQ6SEkgMiAicmVnX2hpX2ludF9v cGVyYW5kIiAiYyxNLE4iKSkpXQorICAiIgorICAib3J3XHQlMiwgJTAiCisg IFsoc2V0X2F0dHIgImxlbmd0aCIgIjIsMiw0IildCispCisKKyhkZWZpbmVf aW5zbiAiaW9ycWkzIgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpRSSAwICJy ZWdpc3Rlcl9vcGVyYW5kIiAiPWMsYyxjIikKKwkoaW9yOlFJIChtYXRjaF9v cGVyYW5kOlFJIDEgInJlZ2lzdGVyX29wZXJhbmQiICIlMCwwLDAiKQorCQko bWF0Y2hfb3BlcmFuZDpRSSAyICJyZWdfaGlfaW50X29wZXJhbmQiICJjLE0s TiIpKSldCisgICIiCisgICJvcmJcdCUyLCAlMCIKKyAgWyhzZXRfYXR0ciAi bGVuZ3RoIiAiMiwyLDIiKV0KKykKKworOzsgIExvZ2ljYWwgSW5zdHJ1Y3Rp b25zIC0geG9yIAorKGRlZmluZV9leHBhbmQgInhvcmRpMyIKKyAgWyhzZXQg KG1hdGNoX29wZXJhbmQ6REkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIiIpCisJ KHhvcjpESSAobWF0Y2hfb3BlcmFuZDpESSAxICJyZWdpc3Rlcl9vcGVyYW5k IiAiIikKKwkJKG1hdGNoX29wZXJhbmQ6REkgMiAibm9ubWVtb3J5X29wZXJh bmQiICIiKSkpXQorICAiIgorICAgIHsKKyAgICAgIGlmICgoR0VUX0NPREUg KG9wZXJhbmRzWzJdKSAhPSBSRUcpKQorCXsKKwkgIG9wZXJhbmRzWzJdID0g Zm9yY2VfcmVnIChESW1vZGUsIG9wZXJhbmRzWzJdKTsKKwl9CisgICAgfQor KQorCisoZGVmaW5lX2luc24gInhvcmRpM19pbnNuIgorICBbKHNldCAobWF0 Y2hfb3BlcmFuZDpESSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQorCSh4 b3I6REkgKG1hdGNoX29wZXJhbmQ6REkgMSAicmVnaXN0ZXJfb3BlcmFuZCIg IiUwIikKKwkJKG1hdGNoX29wZXJhbmQ6REkgMiAicmVnaXN0ZXJfb3BlcmFu ZCIgInIiKSkpXQorICAiIgorICAiKgorICAgIHJldHVybiBjcjE2X2VtaXRf bG9naWNhbF9kaSAob3BlcmFuZHMsIDIpOworICAiCispCisKKyhkZWZpbmVf aW5zbiAieG9yc2kzIgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJy ZWdpc3Rlcl9vcGVyYW5kIiAiPXIscixyLHIiKQorCSh4b3I6U0kgKG1hdGNo X29wZXJhbmQ6U0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIiUwLDAsMCwwIikK KwkJKG1hdGNoX29wZXJhbmQ6U0kgMiAicmVnX3NpX2ludF9vcGVyYW5kIiAi cixNLE4saSIpKSldCisgICIiCisgICJ4b3JkXHQlMiwgJTAiCisgIFsoc2V0 X2F0dHIgImxlbmd0aCIgIjIsMiw0LDYiKV0KKykKKworKGRlZmluZV9pbnNu ICJ4b3JoaTMiCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOkhJIDAgInJlZ2lz dGVyX29wZXJhbmQiICI9YyxjLGMiKQorCSh4b3I6SEkgKG1hdGNoX29wZXJh bmQ6SEkgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIiUwLDAsMCIpCisJCShtYXRj aF9vcGVyYW5kOkhJIDIgInJlZ19oaV9pbnRfb3BlcmFuZCIgImMsTSxOIikp KV0KKyAgIiIKKyAgInhvcndcdCUyLCAlMCIKKyAgWyhzZXRfYXR0ciAibGVu Z3RoIiAiMiwyLDQiKV0KKykKKworKGRlZmluZV9pbnNuICJ4b3JxaTMiCisg IFsoc2V0IChtYXRjaF9vcGVyYW5kOlFJIDAgInJlZ2lzdGVyX29wZXJhbmQi ICI9YyxjLGMiKQorCSh4b3I6UUkgKG1hdGNoX29wZXJhbmQ6UUkgMSAicmVn aXN0ZXJfb3BlcmFuZCIgIiUwLDAsMCIpCisJCShtYXRjaF9vcGVyYW5kOlFJ IDIgInJlZ19oaV9pbnRfb3BlcmFuZCIgImMsTSxOIikpKV0KKyAgIiIKKyAg InhvcmJcdCUyLCAlMCIKKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiMiwyLDIi KV0KKykKKworOzsKKzs7ICBTaWduIGFuZCBaZXJvIEV4dGVuZCBJbnN0cnVj dGlvbnMKKyhkZWZpbmVfaW5zbiAiPHN6UGF0PmV4dGVuZGhpc2kyIgorICBb KHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAi PXIiKQorCShzel94dG5kOlNJIChtYXRjaF9vcGVyYW5kOkhJIDEgInJlZ2lz dGVyX29wZXJhbmQiICJyIikpKV0KKyAgIiIKKyAgIm1vdjxzeklzYT53XHQl MSwgJTAiCisgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjQiKV0KKykKKworKGRl ZmluZV9pbnNuICI8c3pQYXQ+ZXh0ZW5kcWloaTIiCisgIFsoc2V0IChtYXRj aF9vcGVyYW5kOkhJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9ciIpCisJKHN6 X3h0bmQ6SEkgKG1hdGNoX29wZXJhbmQ6UUkgMSAicmVnaXN0ZXJfb3BlcmFu ZCIgInIiKSkpXQorICAiIgorICAibW92PHN6SXNhPmJcdCUxLCAlMCIKKyAg WyhzZXRfYXR0ciAibGVuZ3RoIiAiNCIpXQorKQorCis7OworOzsgIE9uZSdz IENvbXBsZW1lbnQKKyhkZWZpbmVfaW5zbiAib25lX2NtcGxkaTIiCisgIFso c2V0IChtYXRjaF9vcGVyYW5kOkRJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9 ciIpCisJKG5vdDpESSAobWF0Y2hfb3BlcmFuZDpESSAxICJyZWdpc3Rlcl9v cGVyYW5kIiAiMCIpKSldCisgICIiCisgIHsKKyAgICAgcnR4IHhvcGVyYW5k IDsKKyAgICAgaW50IHJlZzAgPSBSRUdOTyAob3BlcmFuZHNbMF0pOworCisg ICAgIHhvcGVyYW5kID0gZ2VuX3J0eF9SRUcgKFNJbW9kZSwgcmVnMCArIDIp OworICAgICBvdXRwdXRfYXNtX2luc24gKCJ4b3JkXHQkLTEsICUwIiwgb3Bl cmFuZHMpOworICAgICBvdXRwdXRfYXNtX2luc24gKCJ4b3JkXHQkLTEsICUw IiwgJnhvcGVyYW5kKTsKKyAgICAgcmV0dXJuICIiIDsKKyAgfQorICBbKHNl dF9hdHRyICJsZW5ndGgiICIxMiIpXQorKQorCisoZGVmaW5lX2luc24gIm9u ZV9jbXBsPG1vZGU+MiIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6Q1IxNklN IDAgInJlZ2lzdGVyX29wZXJhbmQiICI9ciIpCisJKG5vdDpDUjE2SU0gKG1h dGNoX29wZXJhbmQ6Q1IxNklNIDEgInJlZ2lzdGVyX29wZXJhbmQiICIwIikp KV0KKyAgIiIKKyAgInhvcjx0SXNhPlx0JC0xLCAlMCIKKyAgWyhzZXRfYXR0 ciAibGVuZ3RoIiAiMiIpXQorKQorCis7OworOzsgIEFyaXRobWV0aWMgTGVm dCBhbmQgUmlnaHQgU2hpZnQgSW5zdHJ1Y3Rpb25zCisoZGVmaW5lX2luc24g ImFzaGxxaTMiCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlFJIDAgInJlZ2lz dGVyX29wZXJhbmQiICI9YyxjIikKKwkoYXNoaWZ0OlFJIChtYXRjaF9vcGVy YW5kOlFJIDEgInJlZ2lzdGVyX29wZXJhbmQiICIwLDAiKQorCQkgICAobWF0 Y2hfb3BlcmFuZDpRSSAyICJub25tZW1vcnlfb3BlcmFuZCIgImMsSSIpKSld CisgICIiCisgICJhc2h1Ylx0JTIsICUwIgorICBbKHNldF9hdHRyICJsZW5n dGgiICIyLDIiKV0KKykKKworKGRlZmluZV9pbnNuICJhc2hsaGkzIgorICBb KHNldCAobWF0Y2hfb3BlcmFuZDpISSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAi PWMsYyIpCisJKGFzaGlmdDpISSAobWF0Y2hfb3BlcmFuZDpISSAxICJyZWdp c3Rlcl9vcGVyYW5kIiAiMCwwIikKKwkJICAgKG1hdGNoX29wZXJhbmQ6UUkg MiAibm9ubWVtb3J5X29wZXJhbmQiICJjLEoiKSkpXQorICAiIgorICAiYXNo dXdcdCUyLCAlMCIKKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiMiwyIildCisp CisKKyhkZWZpbmVfaW5zbiAiYXNobHNpMyIKKyAgWyhzZXQgKG1hdGNoX29w ZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yLHIiKQorCShhc2hp ZnQ6U0kgKG1hdGNoX29wZXJhbmQ6U0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIg IjAsMCIpCisJCSAgIChtYXRjaF9vcGVyYW5kOlFJIDIgIm5vbm1lbW9yeV9v cGVyYW5kIiAicixLIikpKV0KKyAgIiIKKyAgImFzaHVkXHQlMiwgJTAiCisg IFsoc2V0X2F0dHIgImxlbmd0aCIgIjIsMiIpXQorKQorCisoZGVmaW5lX2V4 cGFuZCAiYXNocjxtb2RlPjMiCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOkNS MTZJTSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikKKwkoYXNoaWZ0cnQ6Q1Ix NklNIChtYXRjaF9vcGVyYW5kOkNSMTZJTSAxICJyZWdpc3Rlcl9vcGVyYW5k IiAiIikKKwkJCSAobWF0Y2hfb3BlcmFuZDpRSSAyICJub25tZW1vcnlfb3Bl cmFuZCIgIiIpKSldCisgICIiCisgICAgeworICAgICAgaWYgKEdFVF9DT0RF IChvcGVyYW5kc1syXSkgPT0gQ09OU1RfSU5UKQorCXsKKwkgIC8qIElmIHRo ZSBjb25zdGFudCBpcyBub3QgaW4gcmFuZ2UsIHRyeSBwbGFjaW5nIGl0IGlu IGEgcmVnICovCisJICBpZiAoIVVOU0lHTkVEX0lOVF9GSVRTX05fQklUUyhJ TlRWQUwgKG9wZXJhbmRzWzJdKSw8c2hJbW1CaXRzPikpCisJICBvcGVyYW5k c1syXSA9IGNvcHlfdG9fbW9kZV9yZWcoUUltb2RlLCBvcGVyYW5kc1syXSk7 CisJfQorCisgICAgICBpZiAoR0VUX0NPREUgKG9wZXJhbmRzWzJdKSAhPSBD T05TVF9JTlQpCisJb3BlcmFuZHNbMl0gPSBnZW5fcnR4X05FRyAoUUltb2Rl LCBuZWdhdGVfcnR4IChRSW1vZGUsIG9wZXJhbmRzWzJdKSk7CisgICAgfQor KQorCisoZGVmaW5lX2luc24gImFzaHJxaTNfaW1tX2luc24iCisgIFsoc2V0 IChtYXRjaF9vcGVyYW5kOlFJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9YyIp CisJKGFzaGlmdHJ0OlFJIChtYXRjaF9vcGVyYW5kOlFJIDEgInJlZ2lzdGVy X29wZXJhbmQiICIwIikKKwkJICAgICAobWF0Y2hfb3BlcmFuZDpRSSAyICJz aGlmdF9xaV9pbW1fb3BlcmFuZCIgImkiKSkpXQorICAiIgorICAiYXNodWJc dCQlbjIsICUwIgorICBbKHNldF9hdHRyICJsZW5ndGgiICIyIildCispCisK KyhkZWZpbmVfaW5zbiAiYXNocmhpM19pbW1faW5zbiIKKyAgWyhzZXQgKG1h dGNoX29wZXJhbmQ6SEkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1jIikKKwko YXNoaWZ0cnQ6SEkgKG1hdGNoX29wZXJhbmQ6SEkgMSAicmVnaXN0ZXJfb3Bl cmFuZCIgIjAiKQorCQkgICAgIChtYXRjaF9vcGVyYW5kOlFJIDIgInNoaWZ0 X2hpX2ltbV9vcGVyYW5kIiAiaSIpKSldCisgICIiCisgICJhc2h1d1x0JCVu MiwgJTAiCisgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjIiKV0KKykKKworKGRl ZmluZV9pbnNuICJhc2hyc2kzX2ltbV9pbnNuIgorICBbKHNldCAobWF0Y2hf b3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQorCShhc2hp ZnRydDpTSSAobWF0Y2hfb3BlcmFuZDpTSSAxICJyZWdpc3Rlcl9vcGVyYW5k IiAiMCIpCisJCSAgICAgKG1hdGNoX29wZXJhbmQ6UUkgMiAic2hpZnRfc2lf aW1tX29wZXJhbmQiICJpIikpKV0KKyAgIiIKKyAgImFzaHVkXHQkJW4yLCAl MCIKKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiMiIpXQorKQorCisoZGVmaW5l X2luc24gImFzaHJxaTNfbmVnX2luc24iCisgIFsoc2V0IChtYXRjaF9vcGVy YW5kOlFJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9YyIpCisJKGFzaGlmdHJ0 OlFJIChtYXRjaF9vcGVyYW5kOlFJIDEgInJlZ2lzdGVyX29wZXJhbmQiICIw IikKKwkJICAgICAobmVnOlFJIChtYXRjaF9vcGVyYW5kOlFJIDIgInJlZ2lz dGVyX29wZXJhbmQiICJjIikpKSldCisgICIiCisgICJhc2h1Ylx0JTIsJTAi CisgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjIiKV0KKykKKworKGRlZmluZV9p bnNuICJhc2hyaGkzX25lZ19pbnNuIgorICBbKHNldCAobWF0Y2hfb3BlcmFu ZDpISSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPWMiKQorCShhc2hpZnRydDpI SSAobWF0Y2hfb3BlcmFuZDpISSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiMCIp CisJCSAgICAgKG5lZzpRSSAobWF0Y2hfb3BlcmFuZDpRSSAyICJyZWdpc3Rl cl9vcGVyYW5kIiAiYyIpKSkpXQorICAiIgorICAiYXNodXdcdCUyLCUwIgor ICBbKHNldF9hdHRyICJsZW5ndGgiICIyIildCispCisKKyhkZWZpbmVfaW5z biAiYXNocmRpM19uZWdfaW5zbiIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6 U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikKKwkoYXNoaWZ0cnQ6U0kg KG1hdGNoX29wZXJhbmQ6U0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIjAiKQor CQkgICAgIChuZWc6UUkgKG1hdGNoX29wZXJhbmQ6UUkgMiAicmVnaXN0ZXJf b3BlcmFuZCIgInIiKSkpKV0KKyAgIiIKKyAgImFzaHVkXHQlMiwlMCIKKyAg WyhzZXRfYXR0ciAibGVuZ3RoIiAiMiIpXQorKQorCisoZGVmaW5lX2V4cGFu ZCAibHNocjxtb2RlPjMiCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOkNSMTZJ TSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikKKwkobHNoaWZ0cnQ6Q1IxNklN IChtYXRjaF9vcGVyYW5kOkNSMTZJTSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAi IikKKwkJCSAobWF0Y2hfb3BlcmFuZDpRSSAyICJyZWdfb3JfaW50X29wZXJh bmQiICIiKSkpXQorICAiIgorICAgIHsKKyAgICAgIGlmIChHRVRfQ09ERSAo b3BlcmFuZHNbMl0pID09IENPTlNUX0lOVCkKKwl7CisJICAvKiBJZiB0aGUg Y29uc3RhbnQgaXMgbm90IGluIHJhbmdlLCB0cnkgcGxhY2luZyBpdCBpbiBh IHJlZyAqLworCSAgaWYgKCFVTlNJR05FRF9JTlRfRklUU19OX0JJVFMoSU5U VkFMIChvcGVyYW5kc1syXSksPHNoSW1tQml0cz4pKQorCSAgb3BlcmFuZHNb Ml0gPSBjb3B5X3RvX21vZGVfcmVnKFFJbW9kZSwgb3BlcmFuZHNbMl0pOwor CX0KKworICAgICAgaWYgKEdFVF9DT0RFIChvcGVyYW5kc1syXSkgIT0gQ09O U1RfSU5UKQorCW9wZXJhbmRzWzJdID0gZ2VuX3J0eF9ORUcgKFFJbW9kZSwg bmVnYXRlX3J0eCAoUUltb2RlLCBvcGVyYW5kc1syXSkpOworICAgIH0KKykK KworKGRlZmluZV9pbnNuICJsc2hycWkzX2ltbV9pbnNuIgorICBbKHNldCAo bWF0Y2hfb3BlcmFuZDpRSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPWMiKQor CShsc2hpZnRydDpRSSAobWF0Y2hfb3BlcmFuZDpRSSAxICJyZWdpc3Rlcl9v cGVyYW5kIiAiMCIpCisJCSAgICAgKG1hdGNoX29wZXJhbmQ6UUkgMiAic2hp ZnRfcWlfb3BlcmFuZCIgIlEiKSkpXQorICAiIgorICAibHNoYlx0JCVuMiwg JTAiCisgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjIiKV0KKykKKworKGRlZmlu ZV9pbnNuICJsc2hyaGkzX2ltbV9pbnNuIgorICBbKHNldCAobWF0Y2hfb3Bl cmFuZDpISSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPWMiKQorCShsc2hpZnRy dDpISSAobWF0Y2hfb3BlcmFuZDpISSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAi MCIpCisJCSAgICAgKG1hdGNoX29wZXJhbmQ6UUkgMiAic2hpZnRfaGlfb3Bl cmFuZCIgIlIiKSkpXQorICAiIgorICAibHNod1x0JCVuMiwgJTAiCisgIFso c2V0X2F0dHIgImxlbmd0aCIgIjIiKV0KKykKKworKGRlZmluZV9pbnNuICJs c2hyc2kzX2ltbV9pbnNuIgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAw ICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQorCShsc2hpZnRydDpTSSAobWF0 Y2hfb3BlcmFuZDpTSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiMCIpCisJCSAg ICAgKG1hdGNoX29wZXJhbmQ6UUkgMiAic2hpZnRfc2lfb3BlcmFuZCIgIlMi KSkpXQorICAiIgorICAibHNoZFx0JCVuMiwgJTAiCisgIFsoc2V0X2F0dHIg Imxlbmd0aCIgIjIiKV0KKykKKworKGRlZmluZV9pbnNuICJsc2hycWkzX25l Z19pbnNuIgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpRSSAwICJyZWdpc3Rl cl9vcGVyYW5kIiAiPWMiKQorCShsc2hpZnRydDpRSSAobWF0Y2hfb3BlcmFu ZDpRSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiMCIpCisJCSAgICAgKG5lZzpR SSAobWF0Y2hfb3BlcmFuZDpRSSAyICJyZWdpc3Rlcl9vcGVyYW5kIiAiYyIp KSkpXQorICAiIgorICAibHNoYlx0JTIsJTAiCisgIFsoc2V0X2F0dHIgImxl bmd0aCIgIjIiKV0KKykKKworKGRlZmluZV9pbnNuICJsc2hyaGkzX25lZ19p bnNuIgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpISSAwICJyZWdpc3Rlcl9v cGVyYW5kIiAiPWMiKQorCShsc2hpZnRydDpISSAobWF0Y2hfb3BlcmFuZDpI SSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiMCIpCisJCSAgICAgKG5lZzpRSSAo bWF0Y2hfb3BlcmFuZDpRSSAyICJyZWdpc3Rlcl9vcGVyYW5kIiAiYyIpKSkp XQorICAiIgorICAibHNod1x0JTIsJTAiCisgIFsoc2V0X2F0dHIgImxlbmd0 aCIgIjIiKV0KKykKKworKGRlZmluZV9pbnNuICJsc2hyc2kzX25lZ19pbnNu IgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVy YW5kIiAiPXIiKQorCShsc2hpZnRydDpTSSAobWF0Y2hfb3BlcmFuZDpTSSAx ICJyZWdpc3Rlcl9vcGVyYW5kIiAiMCIpCisJCSAgICAgKG5lZzpRSSAobWF0 Y2hfb3BlcmFuZDpRSSAyICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpKSkpXQor ICAiIgorICAibHNoZFx0JTIsJTAiCisgIFsoc2V0X2F0dHIgImxlbmd0aCIg IjIiKV0KKykKKworOzsKKzs7ICBNb3ZlIEluc3RydWN0aW9ucworCis7OyBN b3ZlIGFueSBub24taW1tZWRpYXRlIG9wZXJhbmQgMCB0byBhIGdlbmVyYWwg b3BlcmFuZCAxLgorOzsgVGhpcyBhcHBsaWVzIG9ubHkgYmVmb3JlIHN0YXJ0 aW5nIHRoZSByZWxvYWQgcHJvY2VzcworOzsgT3BlcmFuZCAwIGlzIG5vdCBh IHJlZ2lzdGVyIG9wZXJhbmQgb2YgdHlwZSBtb2RlIE1PREUKKzs7IElmIE9w ZXJhbmQgMCBpcyBhIHB1c2ggb3BlcmFuZCBvZiB0eXBlIG1vZGUgTU9ERQor OzsgdGhlbiwgaWYgT3BlcmFuZCAxIGlzIGEgbm9uLVNQIHJlZ2lzdGVyCis7 OyB0aGVuLCBPcGVyYW5kIDEgPSBjb3B5X3RvX21vZGVfcmVnICg8TU9ERT5t b2RlLCBPcGVyYW5kIDEpCis7OyBlbmRpZgorOzsgZWxzZQorOzsgaWYgT3Bl cmFuZCAxIGlzIGVpdGhlciByZWdpc3RlciBvciA0LWJpdCBpbW1lZGlhdGUg Y29uc3RhbnQKKzs7IHRoZW4sIE9wZXJhbmQgMSA9IGNvcHlfdG9fbW9kZV9y ZWcgKDxNT0RFPm1vZGUsIE9wZXJhbmQgMSkKKzs7IGVuZGlmCis7OyBlbmRp ZgorOzsKKzs7IFdoYXQgZG9lcyBjb3B5X3RvX21vZGVfcmVnIChtb2RlLCBy dHggdmFsKSBkbz8KKzs7IENvcHkgdGhlIHZhbHVlIGludG8gbmV3IHRlbXAg cmVnIGFuZCByZXR1cm4gdGhlIHJlZyB3aGVyZSB0aGUKKzs7IG1vZGUgb2Yg dGhlIG5ldyByZWcgaXMgYWx3YXlzIG1vZGUgTU9ERSB3aGVuIHZhbHVlIGlz IGNvbnN0YW50Cis7OworOzsgV2h5IHNob3VsZCBjb3B5X3RvX21vZGVfcmVn IGJlIGNhbGxlZD8KKzs7IEFsbCBzb3J0cyBvZiBtb3ZlIGFyZSBub3Igc3Vw cG9ydGVkIGJ5IENSMTYuIFRoZXJlZm9yZSwgCis7OyB3aGVuIHVuc3VwcG9y dGVkIG1vdmUgaXMgZW5jb3VudGVyZWQsIHRoZSBhZGRpdGlvbmFsIGluc3Ry dWN0aW9ucyAKKzs7IHdpbGwgYmUgaW50cm9kdWNlZCBmb3IgdGhlIHB1cnBv c2UuCis7OworOzsgQSBuZXcgbW92ZSBpbnNuIGlzIGluc2VydGVkIGZvciBP cCAxIHdoZW4gb25lIG9mIHRoZSBmb2xsb3dpbmcKKzs7IGNvbmRpdGlvbnMg aXMgbWV0LgorOzsgQ2FzZSAxOiAgT3AgMCBpcyBwdXNoX29wZXJhbmQKKzs7 ICAgICAgICAgIE9wIDEgaXMgU1AgcmVnaXN0ZXIKKzs7Cis7OyBDYXNlIDI6 ICBPcCAwIGlzIG5vdCBwdXNoX29wZXJhbmQKKzs7ICAgICAgICAgIE9wIDEg aXMgbmVpdGhlciByZWdpc3RlciBub3IgdW5zaWduZWQgNC1iaXQgaW1tZWRp YXRlCisKKyhkZWZpbmVfZXhwYW5kICJtb3Y8bW9kZT4iCisgIFsoc2V0ICht YXRjaF9vcGVyYW5kOkFMTE1URCAwICJub25pbW1lZGlhdGVfb3BlcmFuZCIg IiIpCisJKG1hdGNoX29wZXJhbmQ6QUxMTVREIDEgImdlbmVyYWxfb3BlcmFu ZCIgIiIpKV0KKyAgIiIKKyAgeworICAgIGlmICghKHJlbG9hZF9pbl9wcm9n cmVzcyB8fCByZWxvYWRfY29tcGxldGVkKSkKKyAgICAgIHsKKwkvKiBPbmx5 IGlmIE9wMCBpcyBhIHJlZ2lzdGVyIG9wZXJhbmQuICAqLworCWlmICghcmVn aXN0ZXJfb3BlcmFuZCAob3BlcmFuZHNbMF0sIDxNT0RFPm1vZGUpKQorCSAg eworCSAgICBpZiAocHVzaF9vcGVyYW5kIChvcGVyYW5kc1swXSwgPE1PREU+ bW9kZSkpIAorCSAgICAgIHsKKwkJLyogVXNlIGNvcHlfdG9fbW9kZV9yZWcg b25seSBpZiB0aGUgcmVnaXN0ZXIgbmVlZHMgCisJCXRvIGJlIHB1c2hlZCBp cyBTUCBhcyBDUjE2IGRvZXMgbm90IHN1cHBvcnQgcHVzaGluZyBTUC4gICov CisJCWlmICghbm9zcF9yZWdfb3BlcmFuZCAob3BlcmFuZHNbMV0sIDxNT0RF Pm1vZGUpKQorCQkgIG9wZXJhbmRzWzFdID0gY29weV90b19tb2RlX3JlZyAo PE1PREU+bW9kZSwgb3BlcmFuZHNbMV0pOworCSAgICAgIH0KKwkgICAgZWxz ZQorCSAgICAgIHsKKwkJLyogVXNlIGNvcHlfdG9fbW9kZV9yZWcgaWYgb3Ax IGlzIG5vdCByZWdpc3RlciBvcGVyYW5kCisJCSAgIHN1YmplY3QgdG8gY29u ZGl0aW9ucyBpbnNpZGUuICAqLworCQlpZiAoIXJlZ2lzdGVyX29wZXJhbmQg KG9wZXJhbmRzWzFdLCA8TU9ERT5tb2RlKSkKKwkJICB7CisJCSAgICAvKiBD UjE2IGRvZXMgbm90IHN1cHBvcnQgbW92aW5nIGltbWVkaWF0ZSB0byBTSSBv ciBTRiAKKwkJICAgICAgIHR5cGUgbWVtb3J5LiAgKi8KKwkJICAgIGlmICg8 TU9ERT5tb2RlID09IFNJbW9kZSB8fCA8TU9ERT5tb2RlID09IFNGbW9kZSB8 fAorCQkJPE1PREU+bW9kZSA9PSBESW1vZGUgfHwgPE1PREU+bW9kZSA9PSBE Rm1vZGUpCisJCSAgICAgIG9wZXJhbmRzWzFdID0gY29weV90b19tb2RlX3Jl ZyAoPE1PREU+bW9kZSwgb3BlcmFuZHNbMV0pOworCQkgICAgZWxzZQorCQkg ICAgICAvKiBtb3ZpbmcgaW1tNCBpcyBzdXBwb3J0ZWQgYnkgQ1IxNiBpbnN0 cnVjdGlvbi4gICovCisJCSAgICAgIGlmICghdTRiaXRzX29wZXJhbmQgKG9w ZXJhbmRzWzFdLCA8TU9ERT5tb2RlKSkKKwkJCW9wZXJhbmRzWzFdID0gY29w eV90b19tb2RlX3JlZyAoPE1PREU+bW9kZSwgb3BlcmFuZHNbMV0pOworCQkg IH0KKwkgICAgICAgfQorCSAgfQorCisJICAvKiBJZiBvcGVyYW5kLTEgaXMg YSBzeW1ib2wsIGNvbnZlcnQgaXQgaW50byBhIEJSTyBvciBHT1QgRm9ybWF0 LiAgKi8KKwkgIGlmIChmbGFnX3BpYyAmJiAhIGxlZ2l0aW1hdGVfcGljX29w ZXJhbmRfcCAob3BlcmFuZHNbMV0pKQorCSAgICB7CisJICAgICAgb3BlcmFu ZHNbMV0gPSBsZWdpdGltaXplX3BpY19hZGRyZXNzIChvcGVyYW5kc1sxXSwg PE1PREU+bW9kZSwgMCk7CisJICAgIH0KKyAgICAgIH0KKyAgfQorKQorCis7 IEFMTE1UICAgICA6IFFJLEhJLFNJLFNGCis7IHB1c2hDbnN0ciA6IFB1c2gg Y29uc3RyYWludHMgCis7ICAgICAgICAgICAgICAgIFFJIDogWAorOyAgICAg ICAgICAgICBISSxTSSxTRixESSxERiA6IDwKKzsgYiAgICAgICAgIDogQWxs IG5vbi1zcCByZWdpc3RlcnMKKzsgdHB1c2ggICAgIDogUHVzaCBjb3VudAor OyAgICAgICAgICAgICAgICBRSSxISSA6IDEKKzsgICAgICAgICAgICAgICAg U0ksU0YgOiAyCis7ICAgICAgICAgICAgICAgIERJLERGIDogNAorKGRlZmlu ZV9pbnNuICJwdXNoPG1vZGU+X2ludGVybmFsIgorICBbKHNldCAobWF0Y2hf b3BlcmFuZDpBTExNVEQgMCAicHVzaF9vcGVyYW5kIiAiPTxwdXNoQ25zdHI+ IikKKwkobWF0Y2hfb3BlcmFuZDpBTExNVEQgMSAibm9zcF9yZWdfb3BlcmFu ZCIgImIiKSldCisgICIiCisgICJwdXNoXHQkPHRwdXNoPiwlcDEiCisgIFso c2V0X2F0dHIgImxlbmd0aCIgIjIiKV0KKykKKworOyAoREksIERGKSBtb3Zl CisoZGVmaW5lX2luc24gIiptb3Y8bW9kZT5fZG91YmxlIgorICBbKHNldCAo bWF0Y2hfb3BlcmFuZDpET1VCTEUgMCAibm9uaW1tZWRpYXRlX29wZXJhbmQi ICI9ciwgciwgciwgbSIpCisJKG1hdGNoX29wZXJhbmQ6RE9VQkxFIDEgImdl bmVyYWxfb3BlcmFuZCIgInIsIDxpRkQ+LCBtLCByIikpXQorICAicmVnaXN0 ZXJfb3BlcmFuZCAob3BlcmFuZHNbMF0sIERJbW9kZSkgCisgICB8fCByZWdp c3Rlcl9vcGVyYW5kIChvcGVyYW5kc1swXSwgREZtb2RlKQorICAgfHwgcmVn aXN0ZXJfb3BlcmFuZCAob3BlcmFuZHNbMV0sIERJbW9kZSkKKyAgIHx8IHJl Z2lzdGVyX29wZXJhbmQgKG9wZXJhbmRzWzFdLCBERm1vZGUpIgorICB7Cisg ICAgaWYgKDAgPT0gd2hpY2hfYWx0ZXJuYXRpdmUpIHsKKyAgICAgIHJ0eCB4 b3BlcmFuZHNbMl0gOworICAgICAgaW50IHJlZzAgPSBSRUdOTyAob3BlcmFu ZHNbMF0pOworICAgICAgaW50IHJlZzEgPSBSRUdOTyAob3BlcmFuZHNbMV0p OworCisgICAgICB4b3BlcmFuZHNbMF0gPSBnZW5fcnR4X1JFRyAoU0ltb2Rl LCByZWcwICsgMik7CisgICAgICB4b3BlcmFuZHNbMV0gPSBnZW5fcnR4X1JF RyAoU0ltb2RlLCByZWcxICsgMik7CisgICAgICBpZiAoKHJlZzEgKyAyKSAh PSByZWcwKQorCXsKKwkgIG91dHB1dF9hc21faW5zbiAoIm1vdmRcdCUxLCAl MCIsIG9wZXJhbmRzKTsKKwkgIG91dHB1dF9hc21faW5zbiAoIm1vdmRcdCUx LCAlMCIsIHhvcGVyYW5kcyk7CisJfQorICAgICAgZWxzZQorCXsKKwkgIG91 dHB1dF9hc21faW5zbiAoIm1vdmRcdCUxLCAlMCIsIHhvcGVyYW5kcyk7CisJ ICBvdXRwdXRfYXNtX2luc24gKCJtb3ZkXHQlMSwgJTAiLCBvcGVyYW5kcyk7 CisJfX0KKworICAgIGVsc2UgaWYgKDEgPT0gd2hpY2hfYWx0ZXJuYXRpdmUp IHsKKyAgICAgIHJ0eCBsb19vcGVyYW5kc1syXSA7CisgICAgICBydHggaGlf b3BlcmFuZHNbMl0gOworCisgICAgICBsb19vcGVyYW5kc1swXSA9IGdlbl9y dHhfUkVHIChTSW1vZGUsIFJFR05PIChvcGVyYW5kc1swXSkpOworICAgICAg aGlfb3BlcmFuZHNbMF0gPSBnZW5fcnR4X1JFRyAoU0ltb2RlLCBSRUdOTyAo b3BlcmFuZHNbMF0pICsgMik7CisgICAgICBsb19vcGVyYW5kc1sxXSA9IHNp bXBsaWZ5X2dlbl9zdWJyZWcgKFNJbW9kZSwgb3BlcmFuZHNbMV0sCisJCSAg ICAgICBWT0lEbW9kZSA9PSBHRVRfTU9ERSAob3BlcmFuZHNbMV0pCisJCSAg ICAgICA/IERJbW9kZSAgOiBHRVRfTU9ERSAob3BlcmFuZHNbMV0pLCAwKTsK KyAgICAgIGhpX29wZXJhbmRzWzFdID0gc2ltcGxpZnlfZ2VuX3N1YnJlZyAo U0ltb2RlLCBvcGVyYW5kc1sxXSwKKwkJICAgICAgIFZPSURtb2RlID09IEdF VF9NT0RFIChvcGVyYW5kc1sxXSkKKwkJICAgICAgID8gREltb2RlICA6IEdF VF9NT0RFIChvcGVyYW5kc1sxXSksIDQpOworICAgICAgb3V0cHV0X2FzbV9p bnNuICgibW92ZFx0JTEsICUwIiwgbG9fb3BlcmFuZHMpOworICAgICAgb3V0 cHV0X2FzbV9pbnNuICgibW92ZFx0JTEsICUwIiwgaGlfb3BlcmFuZHMpO30K KworICAgIGVsc2UgaWYgKDIgPT0gd2hpY2hfYWx0ZXJuYXRpdmUpIHsKKyAg ICAgIHJ0eCB4b3BlcmFuZHNbMl0gOworICAgICAgaW50IHJlZzAgPSBSRUdO TyAob3BlcmFuZHNbMF0pLCByZWcxID0gLTIgOworICAgICAgcnR4IGFkZHIg OworCisJaWYgKE1FTV9QIChvcGVyYW5kc1sxXSkpCisJICBhZGRyID0gWEVY UCAob3BlcmFuZHNbMV0sIDApOworCWVsc2UKKwkgIGFkZHIgPSBOVUxMX1JU WCA7CisJc3dpdGNoIChHRVRfQ09ERSAoYWRkcikpCisJICB7CisJICAgIGNh c2UgUkVHOgorCSAgICBjYXNlIFNVQlJFRzoKKwkgICAgICByZWcxID0gUkVH Tk8gKGFkZHIpOworCSAgICAgIGJyZWFrIDsKKwkgICAgY2FzZSBQTFVTOgor CSAgICAgIHN3aXRjaCAoR0VUX0NPREUgKFhFWFAgKGFkZHIsIDApKSkgewor CQljYXNlIFJFRzoKKwkJY2FzZSBTVUJSRUc6CisJCSAgcmVnMSA9IFJFR05P IChYRVhQIChhZGRyLCAwKSk7CisJCSAgYnJlYWsgOworCQljYXNlIFBMVVM6 CisJCSAgcmVnMSA9IFJFR05PIChYRVhQIChYRVhQIChhZGRyLCAwKSwgMCkp OworCQkgIGJyZWFrIDsKKwkJZGVmYXVsdDoKKwkJICBpbmZvcm0gKERFQ0xf U09VUkNFX0xPQ0FUSU9OIChjZnVuLT5kZWNsKSwgInVuZXhwZWN0ZWQgZXhw cmVzc2lvbjsgYWRkcjoiKTsKKwkJICBkZWJ1Z19ydHggKGFkZHIpOworCQkg IGluZm9ybSAoREVDTF9TT1VSQ0VfTE9DQVRJT04gKGNmdW4tPmRlY2wpLCAi b3BlcmFuZHNbMV06Iik7CisJCSAgZGVidWdfcnR4IChvcGVyYW5kc1sxXSk7 CisJCSAgaW5mb3JtIChERUNMX1NPVVJDRV9MT0NBVElPTiAoY2Z1bi0+ZGVj bCksICJnZW5lcmF0ZWQgY29kZSBtaWdodCBub3cgd29ya1xuIik7CisJCSAg YnJlYWsgO30KKwkgICAgICBicmVhayA7CisJICAgIGRlZmF1bHQ6CisJICAg ICAgYnJlYWsgOworCSAgfQorCisJeG9wZXJhbmRzWzBdID0gZ2VuX3J0eF9S RUcgKFNJbW9kZSwgcmVnMCArIDIpOworCXhvcGVyYW5kc1sxXSA9IG9mZnNl dF9hZGRyZXNzIChvcGVyYW5kc1sxXSwgR0VOX0lOVCAoNCksIDIpOworCWdj Y19hc3NlcnQgKChyZWcwICsgMSkgIT0gcmVnMSk7CisJaWYgKHJlZzAgIT0g cmVnMSAgJiYgIChyZWcxICsgMSkgIT0gcmVnMCkKKwkgIHsKKwkgICAgb3V0 cHV0X2FzbV9pbnNuICgibG9hZGRcdCUxLCAlMCIsIG9wZXJhbmRzKTsKKwkg ICAgb3V0cHV0X2FzbV9pbnNuICgibG9hZGRcdCUxLCAlMCIsIHhvcGVyYW5k cyk7CisJICB9CisJZWxzZQorCSAgeworCSAgICBvdXRwdXRfYXNtX2luc24g KCJsb2FkZFx0JTEsICUwIiwgeG9wZXJhbmRzKTsKKwkgICAgb3V0cHV0X2Fz bV9pbnNuICgibG9hZGRcdCUxLCAlMCIsIG9wZXJhbmRzKTsKKwkgIH19Cisg ICAgZWxzZQorICAgICAgeworCXJ0eCB4b3BlcmFuZHNbMl0gOworCXhvcGVy YW5kc1swXSA9IG9mZnNldF9hZGRyZXNzIChvcGVyYW5kc1swXSwgR0VOX0lO VCAoNCksIDIpOworCXhvcGVyYW5kc1sxXSA9IGdlbl9ydHhfUkVHIChTSW1v ZGUsIFJFR05PIChvcGVyYW5kc1sxXSkgKyAyKTsKKwlvdXRwdXRfYXNtX2lu c24gKCJzdG9yZFx0JTEsICUwIiwgb3BlcmFuZHMpOworICAgCW91dHB1dF9h c21faW5zbiAoInN0b3JkXHQlMSwgJTAiLCB4b3BlcmFuZHMpOworICAgICAg fQorICAgIHJldHVybiAiIiA7CisgIH0KKyAgWyhzZXRfYXR0ciAibGVuZ3Ro IiAiNCwgPGxJbW1Bcml0aEQ+LCA8bEltbUFyaXRoRD4sIDxsSW1tQXJpdGhE PiIpXQorKQorCis7IEFsbCBsb25nIChTSSwgU0YpIHJlZ2lzdGVyIG1vdmUs IGxvYWQgYW5kIHN0b3JlIG9wZXJhdGlvbnMKKzsgVGhlIHByaW50X29wZXJh bmQgd2lsbCB0YWtlIGNhcmUgb2YgcHJpbnRpbmcgdGhlIHJlZ2lzdGVyIHBh aXIgCis7IHdoZW4gbW9kZSBpcyBTSS9TRiBhbmQgcmVnaXN0ZXIgaXMgaW4g U0hPUlRfUkVHUworKGRlZmluZV9pbnNuICIqbW92PG1vZGU+X2xvbmciCisg IFsoc2V0IChtYXRjaF9vcGVyYW5kOkxPTkcgMCAibm9uaW1tZWRpYXRlX29w ZXJhbmQiICI9ciwgciwgciwgbSIpCisJKG1hdGNoX29wZXJhbmQ6TE9ORyAx ICJnZW5lcmFsX29wZXJhbmQiICJyLCA8aUY+LCBtLCByIikpXQorICAicmVn aXN0ZXJfb3BlcmFuZCAob3BlcmFuZHNbMF0sIDxNT0RFPm1vZGUpCisgICB8 fCByZWdpc3Rlcl9vcGVyYW5kIChvcGVyYW5kc1sxXSwgPE1PREU+bW9kZSki CisgICJACisgIG1vdjx0SXNhPlx0JTEsICUwCisgIG1vdjx0SXNhPlx0JTEs ICUwCisgIGxvYWQ8dElzYT5cdCUxLCAlMAorICBzdG9yPHRJc2E+XHQlMSwg JTAiCisgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjIsPGxJbW1Bcml0aD4sPGxJ bW1Bcml0aD4sPGxJbW1Bcml0aD4iKV0KKykKKworOzsgQWxsIHNob3J0IChR SSwgSEkpIHJlZ2lzdGVyIG1vdmUsIGxvYWQgYW5kIHN0b3JlIG9wZXJhdGlv bnMKKyhkZWZpbmVfaW5zbiAiKm1vdjxtb2RlPl9zaG9ydCIKKyAgWyhzZXQg KG1hdGNoX29wZXJhbmQ6U0hPUlQgMCAibm9uaW1tZWRpYXRlX29wZXJhbmQi ICI9ciwgciwgciwgbSwgbSIpCisJKG1hdGNoX29wZXJhbmQ6U0hPUlQgMSAi Z2VuZXJhbF9vcGVyYW5kIiAiciwgPGlGPiwgbSwgciwgPExMPiIpKV0KKyAg IihyZWdpc3Rlcl9vcGVyYW5kIChvcGVyYW5kc1swXSwgPE1PREU+bW9kZSkp CisgICAgfHwgKHN0b3JlX29wZXJhbmQgKG9wZXJhbmRzWzBdLCA8TU9ERT5t b2RlKQorCSYmIChyZWdpc3Rlcl9vcGVyYW5kIChvcGVyYW5kc1sxXSwgPE1P REU+bW9kZSkKKwkgICAgfHwgdTRiaXRzX29wZXJhbmQgKG9wZXJhbmRzWzFd LCA8TU9ERT5tb2RlKSkpIgorICAiQAorICBtb3Y8dElzYT5cdCUxLCAlMAor ICBtb3Y8dElzYT5cdCUxLCAlMAorICBsb2FkPHRJc2E+XHQlMSwgJTAKKyAg c3Rvcjx0SXNhPlx0JTEsICUwCisgIHN0b3I8dElzYT5cdCUxLCAlMCIKKyAg WyhzZXRfYXR0ciAibGVuZ3RoIiAiMiw8bEltbUFyaXRoPiw8bEltbUFyaXRo Piw8bEltbUFyaXRoPiw8bEltbUFyaXRoPiIpXQorKQorCis7OyAgQ29tcGFy ZSBJbnN0cnVjdGlvbnMKKzsgSW5zdHJ1Y3Rpb24gZ2VuZXJhdGVkIGNvbXBh cmVzIHRoZSBvcGVyYW5kcyBpbiByZXZlcnNlIG9yZGVyCis7IFRoZXJlZm9y ZSwgd2hpbGUgcHJpbnRpbmcgdGhlIGFzbSwgdGhlIHJldmVyc2Ugb2YgdGhl Cis7IGNvbXBhcmUgY29uZGl0aW9uIHNoYWxsIGJlIHByaW50ZWQuCisoZGVm aW5lX2luc24gImNicmFuY2g8bW9kZT40IgorICBbKHNldCAocGMpCisJKGlm X3RoZW5fZWxzZSAobWF0Y2hfb3BlcmF0b3IgMCAib3JkZXJlZF9jb21wYXJp c29uX29wZXJhdG9yIgorCQkgICAgICBbKG1hdGNoX29wZXJhbmQ6Q1IxNklN IDEgInJlZ2lzdGVyX29wZXJhbmQiICJyLHIiKQorCQkgICAgICAgKG1hdGNo X29wZXJhbmQ6Q1IxNklNIDIgIm5vbm1lbW9yeV9vcGVyYW5kIiAicixuIild KQorCQkgICAgICAgKGxhYmVsX3JlZiAobWF0Y2hfb3BlcmFuZCAzICIiICIi KSkKKyAgICAgICAgICAgICAgICAgICAgICAocGMpKSkKKyAgIChjbG9iYmVy IChjYzApKV0KKyAgIiIKKyAgImNtcDx0SXNhPlx0JTIsICUxXDtiJWQwXHQl bDMiCisgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjYsNiIpXQorKQorCisoZGVm aW5lX2V4cGFuZCAiY21wPG1vZGU+IgorICBbKHBhcmFsbGVsIFsoc2V0IChj YzApCisgICAgKGNvbXBhcmUgKG1hdGNoX29wZXJhbmQ6Q1IxNklNIDAgInJl Z2lzdGVyX29wZXJhbmQiICIiKQorCSAgICAgKG1hdGNoX29wZXJhbmQ6Q1Ix NklNIDEgIm5vbm1lbW9yeV9vcGVyYW5kIiAiIikpKQorICAgIChjbG9iYmVy IChtYXRjaF9zY3JhdGNoOkhJIDIgIj1yIikpXSApIF0KKyAgIiIKKyAgIiIp CisKKzs7ICBTY29uZCBJbnN0cnVjdGlvbnMKKyhkZWZpbmVfZXhwYW5kICJj c3RvcmU8bW9kZT40IgorICBbKHNldCAoY2MwKQorCShjb21wYXJlIChtYXRj aF9vcGVyYW5kOkNSMTZJTSAyICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikKKwkJ IChtYXRjaF9vcGVyYW5kOkNSMTZJTSAzICJub25tZW1vcnlfb3BlcmFuZCIg IiIpKSkKKyAgIChzZXQgKG1hdGNoX29wZXJhbmQ6SEkgMCAicmVnaXN0ZXJf b3BlcmFuZCIpCisJKG1hdGNoX29wZXJhdG9yOkhJIDEgIm9yZGVyZWRfY29t cGFyaXNvbl9vcGVyYXRvciIKKwlbKGNjMCkgKGNvbnN0X2ludCAwKV0pKV0K KyAgIiIKKyAgIiIKKykKKworKGRlZmluZV9pbnNuICIqY21wPG1vZGU+X2lu c24iCisgIFsoc2V0IChjYzApCisJKGNvbXBhcmUgKG1hdGNoX29wZXJhbmQ6 Q1IxNklNIDAgInJlZ2lzdGVyX29wZXJhbmQiICJyLHIiKQorCQkgKG1hdGNo X29wZXJhbmQ6Q1IxNklNIDEgIm5vbm1lbW9yeV9vcGVyYW5kIiAicixuIikp KV0KKyAgIiIKKyAgImNtcDx0SXNhPlx0JTEsICUwIgorICBbKHNldF9hdHRy ICJsZW5ndGgiICIyLDQiKV0KKykKKworKGRlZmluZV9pbnNuICJzQ09ORF9p bnRlcm5hbCIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6SEkgMCAicmVnaXN0 ZXJfb3BlcmFuZCIgIj1yIikKKwkobWF0Y2hfb3BlcmF0b3I6SEkgMSAib3Jk ZXJlZF9jb21wYXJpc29uX29wZXJhdG9yIgorCVsoY2MwKSAoY29uc3RfaW50 IDApXSkpXQorICAiIgorICAicyVkMVx0JTAiCisgIFsoc2V0X2F0dHIgImxl bmd0aCIgIjIiKV0KKykKKworOzsgIEp1bXBzIGFuZCBCcmFuY2hlcworKGRl ZmluZV9pbnNuICJpbmRpcmVjdF9qdW1wX3JldHVybiIKKyAgWyhwYXJhbGxl bAorICAgIFsoc2V0IChwYykKKwkgIChyZWc6U0kgUkFfUkVHTlVNKSkKKyAg IChyZXR1cm4pXSkKKyAgXQorICAicmVsb2FkX2NvbXBsZXRlZCIKKyAgImp1 bXBcdCAocmEpIgorICBbKHNldF9hdHRyICJsZW5ndGgiICIyIildCispCisK KyhkZWZpbmVfaW5zbiAianVtcF9yZXR1cm4iCisgIFsocGFyYWxsZWwKKyAg ICBbKHVuc3BlYzpTSSBbKGNvbnN0X2ludCAwKV0gVU5TUEVDX1JFVFVSTl9B RERSKQorICAgICAocmV0dXJuKV0pXQorICAicmVsb2FkX2NvbXBsZXRlZCIK KyAgImp1bXBcdChyYSkiCisgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjIiKV0K KykKKworKGRlZmluZV9pbnNuICJpbmRpcmVjdF9qdW1wIgorICBbKHNldCAo cGMpCisJKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnX29yX3N5bV9vcGVyYW5k IiAicixpIikpXQorICAiIgorICAiQAorICBqdW1wXHQlMAorICBiclx0JWEw IgorICBbKHNldF9hdHRyICJsZW5ndGgiICIyLDYiKV0KKykKKworKGRlZmlu ZV9pbnNuICJpbnRlcnJ1cHRfcmV0dXJuIgorICBbKHBhcmFsbGVsCisgICAg Wyh1bnNwZWNfdm9sYXRpbGUgWyhjb25zdF9pbnQgMCldIDApCisgICAocmV0 dXJuKV0pXQorICAiIgorICB7CisgICAgcmV0dXJuIGNyMTZfcHJlcGFyZV9w dXNoX3BvcF9zdHJpbmcgKDEpOworICB9CisgIFsoc2V0X2F0dHIgImxlbmd0 aCIgIjE0IildCispCisKKyhkZWZpbmVfaW5zbiAianVtcF90b19pbW0iCisg IFsoc2V0IChwYykKKwkobWF0Y2hfb3BlcmFuZCAwICJqdW1wX2ltbV9vcGVy YW5kIiAiaSIpKV0KKyAgIiIKKyAgImJyXHQlYzAiCisgIFsoc2V0X2F0dHIg Imxlbmd0aCIgIjYiKV0KKykKKworKGRlZmluZV9pbnNuICJqdW1wIgorICBb KHNldCAocGMpCisJKGxhYmVsX3JlZiAobWF0Y2hfb3BlcmFuZCAwICIiICIi KSkpXQorICAiIgorICAiYnJcdCVsMCIKKyAgWyhzZXRfYXR0ciAibGVuZ3Ro IiAiNiIpXQorKQorCis7OyAgRnVuY3Rpb24gUHJvbG9ndWUgYW5kIEVwaWxv Z3VlCisoZGVmaW5lX2V4cGFuZCAicHJvbG9ndWUiCisgIFsoY29uc3RfaW50 IDApXQorICAiIgorICB7CisgICAgY3IxNl9leHBhbmRfcHJvbG9ndWUgKCk7 CisgICAgRE9ORTsKKyAgfQorKQorCisoZGVmaW5lX2luc24gInB1c2hfZm9y X3Byb2xvZ3VlIgorICBbKHBhcmFsbGVsCisgICAgWyhzZXQgKHJlZzpTSSBT UF9SRUdOVU0pCisJICAobWludXM6U0kgKHJlZzpTSSBTUF9SRUdOVU0pCisJ CSAgICAobWF0Y2hfb3BlcmFuZDpTSSAwICJpbW1lZGlhdGVfb3BlcmFuZCIg ImkiKSkpXSldCisgICJyZWxvYWRfY29tcGxldGVkIgorICB7CisgICAgcmV0 dXJuIGNyMTZfcHJlcGFyZV9wdXNoX3BvcF9zdHJpbmcgKDApOworICB9Cisg IFsoc2V0X2F0dHIgImxlbmd0aCIgIjQiKV0KKykKKworKGRlZmluZV9leHBh bmQgImVwaWxvZ3VlIgorICBbKHJldHVybildCisgICIiCisgIHsKKyAgICBj cjE2X2V4cGFuZF9lcGlsb2d1ZSAoKTsKKyAgICBET05FOworICB9CispCisK KyhkZWZpbmVfaW5zbiAicG9wX2FuZF9wb3ByZXRfcmV0dXJuIgorICBbKHBh cmFsbGVsCisgICAgWyhzZXQgKHJlZzpTSSBTUF9SRUdOVU0pCisJICAocGx1 czpTSSAocmVnOlNJIFNQX1JFR05VTSkKKwkJICAgKG1hdGNoX29wZXJhbmQ6 U0kgMCAiaW1tZWRpYXRlX29wZXJhbmQiICJpIikpKQorICAgICAodXNlIChy ZWc6U0kgUkFfUkVHTlVNKSkKKyAgICAgKHJldHVybildKQorICBdCisgICJy ZWxvYWRfY29tcGxldGVkIgorICB7CisgICAgcmV0dXJuIGNyMTZfcHJlcGFy ZV9wdXNoX3BvcF9zdHJpbmcgKDEpOworICB9CisgIFsoc2V0X2F0dHIgImxl bmd0aCIgIjQiKV0KKykKKworKGRlZmluZV9pbnNuICJwb3ByZXRfUkFfcmV0 dXJuIgorICBbKHBhcmFsbGVsCisgICAgWyh1c2UgKHJlZzpTSSBSQV9SRUdO VU0pKQorICAgICAocmV0dXJuKV0pCisgIF0KKyAgInJlbG9hZF9jb21wbGV0 ZWQiCisgICJwb3ByZXRcdHJhIgorICBbKHNldF9hdHRyICJsZW5ndGgiICIy IildCispCisKKzs7ICBUYWJsZSBKdW1wCisoZGVmaW5lX2luc24gInRhYmxl anVtcCIKKyAgWyhzZXQgKHBjKQorCShtYXRjaF9vcGVyYW5kOlNJIDAgInJl Z2lzdGVyX29wZXJhbmQiICJyIikpCisgICAodXNlIChsYWJlbF9yZWY6U0kg KG1hdGNoX29wZXJhbmQgMSAiIiAiIikpKV0KKyAgIiFmbGFnX3BpYyIKKyAg Imp1bXBcdCUwIgorICBbKHNldF9hdHRyICJsZW5ndGgiICIyIildCispCisK Kzs7ICBDYWxsIEluc3RydWN0aW9ucworKGRlZmluZV9leHBhbmQgImNhbGwi CisgIFsoY2FsbCAobWF0Y2hfb3BlcmFuZDpRSSAwICJtZW1vcnlfb3BlcmFu ZCIgIiIpCisJIChtYXRjaF9vcGVyYW5kIDEgIiIgIiIpKV0KKyAgIiIKKyAg eworICAgIGlmIChmbGFnX3BpYyAmJiAhIGxlZ2l0aW1hdGVfcGljX29wZXJh bmRfcCAob3BlcmFuZHNbMF0pKQorICAgICAgeworCW9wZXJhbmRzWzBdID0g Z2VuX2NvbnN0X21lbSAoUUltb2RlLAorCWxlZ2l0aW1pemVfcGljX2FkZHJl c3MgKFhFWFAgKG9wZXJhbmRzWzBdLCAwKSwgUG1vZGUsIDApKTsKKwllbWl0 X2NhbGxfaW5zbiAoZ2VuX2NyMTZfY2FsbCAob3BlcmFuZHNbMF0sIG9wZXJh bmRzWzFdKSk7CisgICAgICB9CisgICAgZWxzZQorICAgICAgZW1pdF9jYWxs X2luc24gKGdlbl9jcjE2X2NhbGwgKG9wZXJhbmRzWzBdLCBvcGVyYW5kc1sx XSkpOworICAgICAgRE9ORTsKKyAgfQorKQorCisoZGVmaW5lX2V4cGFuZCAi Y3IxNl9jYWxsIgorICBbKHBhcmFsbGVsCisgICAgWyhjYWxsIChtYXRjaF9v cGVyYW5kOlFJIDAgIm1lbW9yeV9vcGVyYW5kIiAiIikKKwkgICAobWF0Y2hf b3BlcmFuZCAxICIiICIiKSkKKyAgIChjbG9iYmVyIChyZWc6U0kgUkFfUkVH TlVNKSldKV0KKyAgIiIKKyAgIiIKKykKKworKGRlZmluZV9pbnNuICJjcjE2 X2NhbGxfaW5zbl9icmFuY2hfcGljIgorICBbKGNhbGwgKG1lbTpRSSAobWF0 Y2hfb3BlcmFuZDpTSSAwICJjYWxsX2ltbV9vcGVyYW5kIiAiaSIpKQorCSAo bWF0Y2hfb3BlcmFuZCAxICIiICIiKSkKKyAgIChjbG9iYmVyIChtYXRjaF9v cGVyYW5kOlNJIDIgInJlZ2lzdGVyX29wZXJhbmQiICIrciIpKV0KKyAgImZs YWdfcGljID09IEZBUl9QSUMiCisgIHsKKyAgICBpZiAoR0VUX0NPREUgKG9w ZXJhbmRzWzBdKSAhPSBDT05TVF9JTlQpCisgICAgICByZXR1cm4gImxvYWRk XHQlZzAsICUyIFxuXHRqYWwgJTIiOworICAgIGVsc2UKKyAgICAgIHJldHVy biAiamFsICUyIjsKKyAgfQorICBbKHNldF9hdHRyICJsZW5ndGgiICI4Iild CispCisKKyhkZWZpbmVfaW5zbiAiY3IxNl9jYWxsX2luc25fYnJhbmNoIgor ICBbKGNhbGwgKG1lbTpRSSAobWF0Y2hfb3BlcmFuZDpTSSAwICJjYWxsX2lt bV9vcGVyYW5kIiAiaSIpKQorCSAobWF0Y2hfb3BlcmFuZCAxICIiICIiKSkK KyAgIChjbG9iYmVyIChtYXRjaF9vcGVyYW5kOlNJIDIgInJlZ2lzdGVyX29w ZXJhbmQiICIrciIpKV0KKyAgImZsYWdfcGljID09IDAgfHwgZmxhZ19waWMg PT0gTkVBUl9QSUMiCisgIHsKKyAgICAvKiBQcmludCB0aGUgaW1tZWRpYXRl IGFkZHJlc3MgZm9yIGJhbCAKKyAgICAgICAnYicgaXMgdXNlZCBpbnN0ZWFk IG9mICdhJyB0byBhdm9pZCBjb21waWxlciBjYWxsaW5nCisgICAgICAgdGhl IEdPX0lGX0xFR0lUSU1BVEVfQUREUkVTUyB3aGljaCBjYW5ub3QKKyAgICAg ICBwZXJmb3JtIGNoZWNrcyBvbiBjb25zdF9pbnQgY29kZSBhZGRyZXNzZXMg YXMgaXQKKyAgICAgICBhc3N1bWVzIGFsbCBjb25zdF9pbnQgYXJlIGRhdGEg YWRkcmVzc2VzLgorICAgICovCisgICAgaWYgKEdFVF9DT0RFIChvcGVyYW5k c1swXSkgIT0gQ09OU1RfSU5UKQorICAgICAgcmV0dXJuICJiYWwgKHJhKSwg JWEwIjsKKyAgICBlbHNlCisgICAgICBvcGVyYW5kc1s0XSA9IEdFTl9JTlQg KChJTlRWQUwgKG9wZXJhbmRzWzBdKSk+PjEpOworICAgICAgcmV0dXJuICJt b3ZkXHQlZzQsXHQocjEscjApXG5cdGphbFx0KHIxLHIwKSI7CQorICB9Cisg IFsoc2V0X2F0dHIgImxlbmd0aCIgIjYiKV0KKykKKworKGRlZmluZV9pbnNu ICJjcjE2X2NhbGxfaW5zbl9qdW1wIgorICBbKGNhbGwgKG1lbTpRSSAobWF0 Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpKQorCSAo bWF0Y2hfb3BlcmFuZCAxICIiICIiKSkKKyAgIChjbG9iYmVyIChtYXRjaF9v cGVyYW5kOlNJIDIgInJlZ2lzdGVyX29wZXJhbmQiICIrciIpKV0KKyAgIiIK KyAgImphbFx0JTAiCisgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjIiKV0KKykK KworOzsgIENhbGwgVmFsdWUgSW5zdHJ1Y3Rpb25zCisKKyhkZWZpbmVfZXhw YW5kICJjYWxsX3ZhbHVlIgorICBbKHNldCAobWF0Y2hfb3BlcmFuZCAwICJn ZW5lcmFsX29wZXJhbmQiICIiKQorCShjYWxsIChtYXRjaF9vcGVyYW5kOlFJ IDEgIm1lbW9yeV9vcGVyYW5kIiAiIikKKwkgICAgICAobWF0Y2hfb3BlcmFu ZCAyICIiICIiKSkpXQorICAiIgorICB7CisgICAgaWYgKGZsYWdfcGljICYm ICFsZWdpdGltYXRlX3BpY19vcGVyYW5kX3AgKG9wZXJhbmRzWzFdKSkKKyAg ICAgIHsKKwlvcGVyYW5kc1sxXSA9IGdlbl9jb25zdF9tZW0gKFFJbW9kZSwK KwlsZWdpdGltaXplX3BpY19hZGRyZXNzIChYRVhQIChvcGVyYW5kc1sxXSwg MCksIFBtb2RlLCAwKSk7CisJZW1pdF9jYWxsX2luc24gKGdlbl9jcjE2X2Nh bGxfdmFsdWUgKG9wZXJhbmRzWzBdLCBvcGVyYW5kc1sxXSwgb3BlcmFuZHNb Ml0pKTsKKyAgICAgIH0KKyAgICBlbHNlCisJZW1pdF9jYWxsX2luc24gKGdl bl9jcjE2X2NhbGxfdmFsdWUgKG9wZXJhbmRzWzBdLCBvcGVyYW5kc1sxXSwg b3BlcmFuZHNbMl0pKTsKKyAgICBET05FOworICB9CispCisKKyhkZWZpbmVf ZXhwYW5kICJjcjE2X2NhbGxfdmFsdWUiCisgIFsocGFyYWxsZWwKKyAgICBb KHNldCAobWF0Y2hfb3BlcmFuZCAwICJnZW5lcmFsX29wZXJhbmQiICIiKQor CSAgKGNhbGwgKG1hdGNoX29wZXJhbmQgMSAibWVtb3J5X29wZXJhbmQiICIi KQorCQkobWF0Y2hfb3BlcmFuZCAyICIiICIiKSkpCisgICAgIChjbG9iYmVy IChyZWc6U0kgUkFfUkVHTlVNKSldKV0KKyAgIiIKKyAgIiIKKykKKworKGRl ZmluZV9pbnNuICJjcjE2X2NhbGxfdmFsdWVfaW5zbl9icmFuY2hfcGljIgor ICBbKHNldCAobWF0Y2hfb3BlcmFuZCAwICIiICI9ZyIpCisJKGNhbGwgKG1l bTpRSSAobWF0Y2hfb3BlcmFuZDpTSSAxICJjYWxsX2ltbV9vcGVyYW5kIiAi aSIpKQorCSAgICAgIChtYXRjaF9vcGVyYW5kIDIgIiIgIiIpKSkKKyAgIChj bG9iYmVyIChtYXRjaF9vcGVyYW5kOlNJIDMgInJlZ2lzdGVyX29wZXJhbmQi ICIrciIpKV0KKyAgImZsYWdfcGljID09IEZBUl9QSUMiCisgIHsKKyAgICBp ZiAoR0VUX0NPREUgKG9wZXJhbmRzWzFdKSAhPSBDT05TVF9JTlQpCisgICAg ICByZXR1cm4gImxvYWRkXHQlZzEsICUzIFxuXHRqYWwgJTMiOworICAgIGVs c2UKKyAgICAgIHJldHVybiAiamFsICUzIjsKKyAgfQorICBbKHNldF9hdHRy ICJsZW5ndGgiICI4IildCispCisKKyhkZWZpbmVfaW5zbiAiY3IxNl9jYWxs X3ZhbHVlX2luc25fYnJhbmNoIgorICBbKHNldCAobWF0Y2hfb3BlcmFuZCAw ICIiICI9ZyIpCisJKGNhbGwgKG1lbTpRSSAobWF0Y2hfb3BlcmFuZDpTSSAx ICJjYWxsX2ltbV9vcGVyYW5kIiAiaSIpKQorCSAgICAgIChtYXRjaF9vcGVy YW5kIDIgIiIgIiIpKSkKKyAgIChjbG9iYmVyIChtYXRjaF9vcGVyYW5kOlNJ IDMgInJlZ2lzdGVyX29wZXJhbmQiICIrciIpKV0KKyAgImZsYWdfcGljID09 IDAgfHwgZmxhZ19waWMgPT0gTkVBUl9QSUMiCisgIHsKKyAgICAvKiBQcmlu dCB0aGUgaW1tZWRpYXRlIGFkZHJlc3MgZm9yIGJhbCAKKyAgICAgICAnYicg aXMgdXNlZCBpbnN0ZWFkIG9mICdhJyB0byBhdm9pZCBjb21waWxlciBjYWxs aW5nCisgICAgICAgdGhlIEdPX0lGX0xFR0lUSU1BVEVfQUREUkVTUyB3aGlj aCBjYW5ub3QKKyAgICAgICBwZXJmb3JtIGNoZWNrcyBvbiBjb25zdF9pbnQg Y29kZSBhZGRyZXNzZXMgYXMgaXQKKyAgICAgICBhc3N1bWVzIGFsbCBjb25z dF9pbnQgYXJlIGRhdGEgYWRkcmVzc2VzLgorICAgICovCisgICAgaWYgKEdF VF9DT0RFIChvcGVyYW5kc1sxXSkgIT0gQ09OU1RfSU5UKSAKKyAgICAgIHJl dHVybiAiYmFsIChyYSksICVhMSI7CisgICAgZWxzZQorICAgICAgeworCW9w ZXJhbmRzWzRdID0gR0VOX0lOVCAoKElOVFZBTCAob3BlcmFuZHNbMV0pKT4+ MSk7CisgICAgICAgIHJldHVybiAibW92ZFx0JWc0LFx0KHIxLHIwKVxuXHRq YWxcdChyMSxyMCkiOwkKKyAgICAgIH0KKyAgfQorICBbKHNldF9hdHRyICJs ZW5ndGgiICI2IildCispCisKKworKGRlZmluZV9pbnNuICJjcjE2X2NhbGxf dmFsdWVfaW5zbl9qdW1wIgorICBbKHNldCAobWF0Y2hfb3BlcmFuZCAwICIi ICI9ZyIpCisgICAgICAgIChjYWxsIChtZW06UUkgKG1hdGNoX29wZXJhbmQ6 U0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKSkKKyAgICAgICAgICAgICAg KG1hdGNoX29wZXJhbmQgMiAiIiAiIikpKQorICAgKGNsb2JiZXIgKG1hdGNo X29wZXJhbmQ6U0kgMyAicmVnaXN0ZXJfb3BlcmFuZCIgIityIikpXQorICAi IgorICAiamFsXHQlMSIKKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiMiIpXQor KQorCisKKzs7ICBOb3AKKyhkZWZpbmVfaW5zbiAibm9wIgorICBbKGNvbnN0 X2ludCAwKV0KKyAgIiIKKyAgIm5vcFx0IgorKQorCis7OyBQSUMKKy8qIFdo ZW4gZ2VuZXJhdGluZyBwaWMsIHdlIG5lZWQgdG8gbG9hZCB0aGUgc3ltYm9s IG9mZnNldCBpbnRvIGEgcmVnaXN0ZXIuCisgICBTbyB0aGF0IHRoZSBvcHRp bWl6ZXIgZG9lcyBub3QgY29uZnVzZSB0aGlzIHdpdGggYSBub3JtYWwgc3lt Ym9sIGxvYWQKKyAgIHdlIHVzZSBhbiB1bnNwZWMuICBUaGUgb2Zmc2V0IHdp bGwgYmUgbG9hZGVkIGZyb20gYSBjb25zdGFudCBwb29sIGVudHJ5LAorICAg c2luY2UgdGhhdCBpcyB0aGUgb25seSB0eXBlIG9mIHJlbG9jYXRpb24gd2Ug Y2FuIHVzZS4gICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgCisoZGVmaW5lX2luc24gInVuc3BlY19icm9fYWRkciIKKyAgWyhzZXQg KG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikK KwkodW5zcGVjOlNJIFsobWF0Y2hfb3BlcmFuZCAxICIiICIiKV0gVU5TUEVD X1BJQ19BRERSKSldCisgICIiCisgICJtb3ZkIFx0JWYxLCAlMCIKKyAgWyhz ZXRfYXR0ciAibGVuZ3RoIiAiNCIpXQorKQorCisoZGVmaW5lX2luc24gInVu c3BlY19nb3RfYWRkciIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAi cmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikKKwkodW5zcGVjOlNJIFsobWF0Y2hf b3BlcmFuZCAxICIiICIiKV0gVU5TUEVDX1BJQ19MT0FEX0FERFIpKV0KKyAg IiIKKyAgImxvYWRkIFx0JWcxLCAlMCIKKyAgWyhzZXRfYXR0ciAibGVuZ3Ro IiAiNiIpXQorKQpkaWZmIC11cHJOIG9yaWcvZ2NjL2NvbmZpZy9jcjE2L2Ny MTYub3B0IG1vZC9nY2MvY29uZmlnL2NyMTYvY3IxNi5vcHQKLS0tIG9yaWcv Z2NjL2NvbmZpZy9jcjE2L2NyMTYub3B0CTE5NzAtMDEtMDEgMDU6MzA6MDAu MDAwMDAwMDAwICswNTMwCisrKyBtb2QvZ2NjL2NvbmZpZy9jcjE2L2NyMTYu b3B0CTIwMTEtMDUtMjAgMTU6MTc6MTMuMDAwMDAwMDAwICswNTMwCkBAIC0w LDAgKzEsNTEgQEAKKzsgT3B0aW9ucyBmb3IgdGhlIE5hdGlvbmFsIFNlbWlj b25kdWN0b3IgQ1IxNiBwb3J0IG9mIHRoZSBjb21waWxlci4KKzsgQ29weXJp Z2h0IChDKSAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgor OyBDb250cmlidXRlZCBieSBLUElUIEN1bW1pbnMgSW5mb3N5c3RlbXMgTGlt aXRlZC4KKzsKKzsgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorOworOyBH Q0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg YW5kL29yIG1vZGlmeSBpdAorOyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorOyBieSB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAz LCBvciAoYXQgeW91cgorOyBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor OworOyBHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKzsgQU5ZIFdBUlJBTlRZOyB3 aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRB QklMSVRZCis7IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKzsgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgorOworOyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg YSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorOyBh bG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90 IHNlZQorOyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKK21z aW0KK1RhcmdldAorLW1zaW0gICBVc2Ugc2ltdWxhdG9yIHJ1bnRpbWUKKwor bWJpdC1vcHMKK1RhcmdldCBSZXBvcnQgTWFzayhCSVRfT1BTKQorR2VuZXJh dGUgU0JJVCwgQ0JJVCBpbnN0cnVjdGlvbnMKKworbW1hYworVGFyZ2V0IFJl cG9ydCBNYXNrKE1BQykKK1N1cHBvcnQgbXVsdGlwbHkgYWNjdW11bGF0ZSBp bnN0cnVjdGlvbnMKKworbWRlYnVnLWFkZHIKK1RhcmdldCBSZWplY3ROZWdh dGl2ZSBWYXIoVEFSR0VUX0RFQlVHX0FERFIpIFVuZG9jdW1lbnRlZAorCitt ZGF0YS1tb2RlbD0KK1RhcmdldCBSZWplY3ROZWdhdGl2ZSBKb2luZWRPck1p c3NpbmcgVmFyKGNyMTZfZGF0YV9tb2RlbCkKK1RyZWF0IGRhdGEgcmVmZXJl bmNlcyBhcyBuZWFyLCBmYXIgb3IgbWVkaXVtLiBtZWRpdW0gaXMgZGVmYXVs dAorCittY3IxNmMKK1RhcmdldCBSZWplY3ROZWdhdGl2ZSBNYXNrKENSMTZD KQorR2VuZXJhdGUgY29kZSBmb3IgQ1IxNkMgYXJjaGl0ZWN0dXJlCisKK21j cjE2Y3BsdXMKK1RhcmdldCBSZWplY3ROZWdhdGl2ZSBJbnZlcnNlTWFzayhD UjE2QyxDUjE2Q1ApCitHZW5lcmF0ZSBjb2RlIGZvciBDUjE2QysgYXJjaGl0 ZWN0dXJlIChEZWZhdWx0KQorCittaW50MzIKK1RhcmdldCBSZWplY3ROZWdh dGl2ZSBNYXNrKElOVDMyKQorVHJlYXQgaW50ZWdlcnMgYXMgMzItYml0Lgor CmRpZmYgLXVwck4gb3JpZy9nY2MvY29uZmlnL2NyMTYvY3IxNi1wcm90b3Mu aCBtb2QvZ2NjL2NvbmZpZy9jcjE2L2NyMTYtcHJvdG9zLmgKLS0tIG9yaWcv Z2NjL2NvbmZpZy9jcjE2L2NyMTYtcHJvdG9zLmgJMTk3MC0wMS0wMSAwNToz MDowMC4wMDAwMDAwMDAgKzA1MzAKKysrIG1vZC9nY2MvY29uZmlnL2NyMTYv Y3IxNi1wcm90b3MuaAkyMDExLTA1LTIwIDE1OjE3OjEzLjAwMDAwMDAwMCAr MDUzMApAQCAtMCwwICsxLDEwMCBAQAorLyogUHJvdG90eXBlcyBmb3IgZXhw b3J0ZWQgZnVuY3Rpb25zIGRlZmluZWQgaW4gY3IxNi5jCisgICBDb3B5cmln aHQgKEMpIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisg ICBDb250cmlidXRlZCBieSBLUElUIEN1bW1pbnMgSW5mb3N5c3RlbXMgTGlt aXRlZC4KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCisgICBH Q0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg YW5kL29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyAgIGJ5 IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9u IDMsIG9yIChhdCB5b3VyCisgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u LgorCisgICBHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNI QU5UQUJJTElUWQorICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5z ZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVj ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZQorICAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4g IElmIG5vdCBzZWUKKyAgIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMv Pi4gICovCisKKyNpZm5kZWYgR0NDX0NSMTZfUFJPVE9TX0gKKyNkZWZpbmUg R0NDX0NSMTZfUFJPVE9TX0gKKworLyogUmVnaXN0ZXIgdXNhZ2UuICAqLwor ZXh0ZXJuIGVudW0gcmVnX2NsYXNzIGNyMTZfcmVnbm9fcmVnX2NsYXNzIChp bnQpOworZXh0ZXJuIGludCBjcjE2X2hhcmRfcmVnbm9fbW9kZV9vayAoaW50 IHJlZ25vLCBlbnVtIG1hY2hpbmVfbW9kZSk7CisKKy8qIFBhc3NpbmcgZnVu Y3Rpb24gYXJndW1lbnRzLiAgKi8KK2V4dGVybiBpbnQgY3IxNl9mdW5jdGlv bl9hcmdfcmVnbm9fcCAoaW50KTsKKyNpZmRlZiBUUkVFX0NPREUKKworI2lm ZGVmIFJUWF9DT0RFCisKK2V4dGVybiB2b2lkIGNyMTZfaW5pdF9jdW11bGF0 aXZlX2FyZ3MgKENVTVVMQVRJVkVfQVJHUyAqLCB0cmVlLCBydHgpOworCisj ZW5kaWYgLyogUlRYX0NPREUuICAqLworCisjZW5kaWYgLyogVFJFRV9DT0RF LiAgKi8KKworLyogRW51bWVyYXRpb24gZ2l2aW5nIHRoZSB2YXJpb3VzIGRh dGEgbW9kZWxzIHdlIHN1cHBvcnQuICAqLworZW51bSBkYXRhX21vZGVsX3R5 cGUKK3sKKyAgRE1fREVGQVVMVCwJCS8qIERlZmF1bHQgZGF0YSBtb2RlbCAo aW4gQ1IxNkMvQysgLSB1cCB0byAxNk0pLiAgKi8KKyAgRE1fTkVBUiwJCS8q IE5lYXIgZGF0YSBtb2RlbCAgICAoaW4gQ1IxNkMvQysgLSB1cCB0byAxTSku ICAqLworICBETV9GQVIsCQkvKiBGYXIgZGF0YSBtb2RlbCAgICAgKGluIENS MTZDKyAgIC0gdXAgdG8gNEcpCisJCQkgICAoaW4gQ1IxNkMgICAgLSB1cCB0 byAxNk0pLiAgKi8KKyAgSUxMRUdBTF9ETQkJLyogSWxsZWdhbCBkYXRhIG1v ZGVsLiAgKi8KK307CisKKyNpZmRlZiBSVFhfQ09ERQorCisvKiBBZGRyZXNz aW5nIE1vZGVzLiAgKi8KK3N0cnVjdCBjcjE2X2FkZHJlc3MKK3sKKyAgcnR4 IGJhc2U7CSAJLyogQmFzZSByZWdpc3RlcjogQW55IHJlZ2lzdGVyIG9yIHJl Z2lzdGVyIHBhaXIuICAqLworICBydHggaW5kZXg7CQkvKiBJbmRleCByZWdp c3RlcjogSWYgb25lIGlzIHByZXNlbnQuICAqLworICBydHggZGlzcDsJCS8q IERpc3BsYWNlbWVudCBvciBBYnNvbHV0ZSBhZGRyZXNzLiAgKi8KKyAgZW51 bSBkYXRhX21vZGVsX3R5cGUgZGF0YTsJLyogZGF0YSByZWYgdHlwZS4gICov CisgIGludCBjb2RlOwkJLyogV2hldGhlciB0aGUgYWRkcmVzcyBpcyBjb2Rl IGFkZHJlc3MuIAorCQkJICAgMCAtIGRhdGEsIDEgLSBjb2RlIGxhYmVsLCAy IC0gZnVuY3Rpb24gbGFiZWwuICAqLworfTsKKworZW51bSBjcjE2X2FkZHJ0 eXBlCit7CisgIENSMTZfSU5WQUxJRCwKKyAgQ1IxNl9SRUdfUkVMLAorICBD UjE2X1JFR1BfUkVMLAorICBDUjE2X0lOREVYX1JFR1BfUkVMLAorICBDUjE2 X0FCU09MVVRFCit9OworCitleHRlcm4gdm9pZCBub3RpY2VfdXBkYXRlX2Nj IFBBUkFNUyAoKHJ0eCkpOworZXh0ZXJuIGludCBjcjE2X29wZXJhbmRfYml0 X3BvcyAoaW50IHZhbCwgaW50IGJpdHZhbCk7CitleHRlcm4gdm9pZCBjcjE2 X2RlY29tcG9zZV9jb25zdCAocnR4IHgsIGludCAqY29kZSwKKwkJCQkgIGVu dW0gZGF0YV9tb2RlbF90eXBlICpkYXRhLAorCQkJCSAgYm9vbCB0cmVhdF9h c19jb25zdCk7CitleHRlcm4gZW51bSBjcjE2X2FkZHJ0eXBlIGNyMTZfZGVj b21wb3NlX2FkZHJlc3MgKHJ0eCBhZGRyLAorCQkJCQkJICBzdHJ1Y3QgY3Ix Nl9hZGRyZXNzICpvdXQsCisJCQkJCQkgIGJvb2wgZGVidWdfcHJpbnQsCisJ CQkJCQkgIGJvb2wgdHJlYXRfYXNfY29uc3QpOworZXh0ZXJuIGludCBjcjE2 X2NvbnN0X2RvdWJsZV9vayAocnR4IG9wKTsKK2V4dGVybiBpbnQgbGVnaXRp bWF0ZV9waWNfb3BlcmFuZF9wIChydHgpOworZXh0ZXJuIHJ0eCBsZWdpdGlt aXplX3BpY19hZGRyZXNzIChydHgsIGVudW0gbWFjaGluZV9tb2RlLCBydHgp OworCisjZW5kaWYgLyogUlRYX0NPREUuICAqLworCisKKy8qIFByb2xvZ3Vl L0VwaWxvZ3VlIGZ1bmN0aW9ucy4gICovCitleHRlcm4gaW50IGNyMTZfaW5p dGlhbF9lbGltaW5hdGlvbl9vZmZzZXQgKGludCwgaW50KTsKK2V4dGVybiBj aGFyICpjcjE2X3ByZXBhcmVfcHVzaF9wb3Bfc3RyaW5nIChpbnQpOworZXh0 ZXJuIHZvaWQgY3IxNl9leHBhbmRfcHJvbG9ndWUgKHZvaWQpOworZXh0ZXJu IHZvaWQgY3IxNl9leHBhbmRfZXBpbG9ndWUgKHZvaWQpOworZXh0ZXJuIGNv bnN0IGNoYXIgKmNyMTZfZW1pdF9hZGRfc3ViX2RpIChydHggKiwgaW50KTsK K2V4dGVybiBjb25zdCBjaGFyICpjcjE2X2VtaXRfbG9naWNhbF9kaSAocnR4 ICosIGludCk7CisKKy8qIEhhbmRsaW5nIHRoZSAiaW50ZXJydXB0IiBhdHRy aWJ1dGUuICAqLworZXh0ZXJuIGludCBjcjE2X2ludGVycnVwdF9mdW5jdGlv bl9wICh2b2lkKTsKK2V4dGVybiBib29sIGNyMTZfaXNfZGF0YV9tb2RlbCAo ZW51bSBkYXRhX21vZGVsX3R5cGUpOworCisjZW5kaWYgLyogTm90IEdDQ19D UjE2X1BST1RPU19ILiAgKi8gCmRpZmYgLXVwck4gb3JpZy9nY2MvY29uZmln L2NyMTYvZGl2bW9kaGkzLmMgbW9kL2djYy9jb25maWcvY3IxNi9kaXZtb2Ro aTMuYwotLS0gb3JpZy9nY2MvY29uZmlnL2NyMTYvZGl2bW9kaGkzLmMJMTk3 MC0wMS0wMSAwNTozMDowMC4wMDAwMDAwMDAgKzA1MzAKKysrIG1vZC9nY2Mv Y29uZmlnL2NyMTYvZGl2bW9kaGkzLmMJMjAxMS0wNS0yMCAxNToxNzoxMy4w MDAwMDAwMDAgKzA1MzAKQEAgLTAsMCArMSwxMTUgQEAKKy8qIExpYmdjYyBU YXJnZXQgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gLSBFbXVsYXRpbmcgZGl2 IGFuZCBtb2QuCisgICBDb3B5cmlnaHQgKEMpIDIwMTAgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLCBJbmMuCisgICBDb250cmlidXRlZCBieSBLUElUIEN1 bW1pbnMgSW5mb3N5c3RlbXMgTGltaXRlZC4KKworICAgVGhpcyBmaWxlIGlz IHBhcnQgb2YgR0NDLgorCisgICBHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikK KyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBHQ0MgaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJ VEhPVVQKKyAgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICAgb3IgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYworICAgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisg ICBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBn cmFudGVkIGFkZGl0aW9uYWwKKyAgIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBp biB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24K KyAgIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24uCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv cHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorICAg YSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBh bG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKyAgIHNlZSB0aGUgZmlsZXMgQ09Q WUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBu b3QsIHNlZQorICAgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAg Ki8KKwkgCisKKy8qIEVtdWxhdGUgdGhlIGRpdmlzaW9uIGFuZCBtb2R1bHVz IG9wZXJhdGlvbi4gICovCisKK3Vuc2lnbmVkIHNob3J0Cit1ZGl2bW9kaGk0 ICh1bnNpZ25lZCBzaG9ydCBudW0sIHVuc2lnbmVkIHNob3J0IGRlbiwgc2hv cnQgbW9kd2FudGVkKQoreworICB1bnNpZ25lZCBzaG9ydCBiaXQgPSAxOwor ICB1bnNpZ25lZCBzaG9ydCByZXMgPSAwOworCisgIHdoaWxlIChkZW4gPCBu dW0gJiYgYml0ICYmICEoZGVuICYgKDEgPDwgMTUpKSkKKyAgICB7CisgICAg ICBkZW4gPDw9IDE7CisgICAgICBiaXQgPDw9IDE7CisgICAgfQorICB3aGls ZSAoYml0KQorICAgIHsKKyAgICAgIGlmIChudW0gPj0gZGVuKQorCXsKKwkg IG51bSAtPSBkZW47CisJICByZXMgfD0gYml0OworCX0KKyAgICAgIGJpdCA+ Pj0gMTsKKyAgICAgIGRlbiA+Pj0gMTsKKyAgICB9CisKKyAgaWYgKG1vZHdh bnRlZCkKKyAgICByZXR1cm4gbnVtOworICByZXR1cm4gcmVzOworfQorCitz aG9ydAorX19kaXZoaTMgKHNob3J0IGEsIHNob3J0IGIpCit7CisgIHNob3J0 IG5lZyA9IDA7CisgIHNob3J0IHJlczsKKworICBpZiAoYSA8IDApCisgICAg eworICAgICAgYSA9IC1hOworICAgICAgbmVnID0gIW5lZzsKKyAgICB9CisK KyAgaWYgKGIgPCAwKQorICAgIHsKKyAgICAgIGIgPSAtYjsKKyAgICAgIG5l ZyA9ICFuZWc7CisgICAgfQorCisgIHJlcyA9IHVkaXZtb2RoaTQgKGEsIGIs IDApOworCisgIGlmIChuZWcpCisgICAgcmVzID0gLXJlczsKKworICByZXR1 cm4gcmVzOworfQorCitzaG9ydAorX19tb2RoaTMgKHNob3J0IGEsIHNob3J0 IGIpCit7CisgIHNob3J0IG5lZyA9IDA7CisgIHNob3J0IHJlczsKKworICBp ZiAoYSA8IDApCisgICAgeworICAgICAgYSA9IC1hOworICAgICAgbmVnID0g MTsKKyAgICB9CisKKyAgaWYgKGIgPCAwKQorICAgIGIgPSAtYjsKKworICBy ZXMgPSB1ZGl2bW9kaGk0IChhLCBiLCAxKTsKKworICBpZiAobmVnKQorICAg IHJlcyA9IC1yZXM7CisKKyAgcmV0dXJuIHJlczsKK30KKworc2hvcnQKK19f dWRpdmhpMyAoc2hvcnQgYSwgc2hvcnQgYikKK3sKKyAgcmV0dXJuIHVkaXZt b2RoaTQgKGEsIGIsIDApOworfQorCitzaG9ydAorX191bW9kaGkzIChzaG9y dCBhLCBzaG9ydCBiKQoreworICByZXR1cm4gdWRpdm1vZGhpNCAoYSwgYiwg MSk7Cit9CmRpZmYgLXVwck4gb3JpZy9nY2MvY29uZmlnL2NyMTYvcHJlZGlj YXRlcy5tZCBtb2QvZ2NjL2NvbmZpZy9jcjE2L3ByZWRpY2F0ZXMubWQKLS0t IG9yaWcvZ2NjL2NvbmZpZy9jcjE2L3ByZWRpY2F0ZXMubWQJMTk3MC0wMS0w MSAwNTozMDowMC4wMDAwMDAwMDAgKzA1MzAKKysrIG1vZC9nY2MvY29uZmln L2NyMTYvcHJlZGljYXRlcy5tZAkyMDExLTA1LTIwIDE2OjI3OjA5LjAwMDAw MDAwMCArMDUzMApAQCAtMCwwICsxLDIyNCBAQAorOzsgUHJlZGljYXRlcyBv ZiBtYWNoaW5lIGRlc2NyaXB0aW9uIGZvciBDUjE2LgorOzsgQ29weXJpZ2h0 IChDKSAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorOzsg Q29udHJpYnV0ZWQgYnkgS1BJVCBDdW1taW5zIEluZm9zeXN0ZW1zIExpbWl0 ZWQuCis7OworOzsgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorOzsKKzs7 IEdDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IgbW9kaWZ5IGl0Cis7OyB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorOzsg YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNp b24gMywgb3IgKGF0IHlvdXIKKzs7IG9wdGlvbikgYW55IGxhdGVyIHZlcnNp b24uCis7OworOzsgR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCis7OyBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBN RVJDSEFOVEFCSUxJVFkKKzs7IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKzs7IExp Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKzs7Cis7OyBZb3Ugc2hvdWxkIGhh dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZQorOzsgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZ SU5HMy4gIElmIG5vdCBzZWUKKzs7IDxodHRwOi8vd3d3LmdudS5vcmcvbGlj ZW5zZXMvPi4gIAorCis7OyAgUHJlZGljYXRlcworCis7OyBQcmVkaWNhdGVz IGZvciBzYml0L2NiaXQgaW5zdHJ1Y3Rpb25zCis7OyBiaXQgb3BlcmFuZCB1 c2VkIGZvciB0aGUgZ2VuZXJhdGlvbiBvZiBiaXQgaW5zbiBnZW5lcmF0aW9u CisoZGVmaW5lX3ByZWRpY2F0ZSAiYml0X29wZXJhbmQiCisgIChtYXRjaF9j b2RlICJtZW0iKQoreworICByZXR1cm4gKChHRVRfQ09ERSAob3ApID09IE1F TSAmJiBPS19GT1JfWiAob3ApKSk7Cit9KQorCis7OyBVbnNpZ25lZCA0LWJp dHMgY29uc3RhbnQgaW50IG9yIGRvdWJsZSB2YWx1ZS4KKyhkZWZpbmVfcHJl ZGljYXRlICJ1NGJpdHNfb3BlcmFuZCIKKyAgKG1hdGNoX2NvZGUgImNvbnN0 X2ludCxjb25zdF9kb3VibGUiKQoreworICBpZiAoR0VUX0NPREUgKG9wKSA9 PSBDT05TVF9ET1VCTEUpCisgICAgcmV0dXJuIGNyMTZfY29uc3RfZG91Ymxl X29rIChvcCk7CisgICAgcmV0dXJuIChVTlNJR05FRF9JTlRfRklUU19OX0JJ VFMoSU5UVkFMIChvcCksIDQpKSA/IDEgOiAwOworfSkKKworOzsgT3BlcmFu ZCBpcyBhIGNvbnN0YW50IGludGVnZXIgd2hlcmUKKzs7IG9ubHkgb25lIGJp dCBpcyBzZXQgdG8gMS4KKyhkZWZpbmVfcHJlZGljYXRlICJvbmVfYml0X29w ZXJhbmQiCisgIChtYXRjaF9jb2RlICJjb25zdF9pbnQiKQoreworICB1bnNp Z25lZCBpbnQgdmFsOworCisgIHZhbCA9IElOVFZBTCAob3ApOworICBpZiAo bW9kZSA9PSBRSW1vZGUpIAorICAgIHZhbCAmPSAweGZmOworICBlbHNlIGlm IChtb2RlID09IEhJbW9kZSkKKyAgICB2YWwgJj0gMHhmZmZmOworICBlbHNl CisgICAgZ2NjX3VucmVhY2hhYmxlKCk7CisKKyAgaWYgKHZhbCAhPSAwKQor ICAgIHJldHVybiAodmFsICYgKHZhbCAtIDEpKSA9PSAwOyAvKiB0cnVlIGlm IG9ubHkgb25lIGJpdCBpcyBzZXQuICAqLworICBlbHNlCisgICAgcmV0dXJu IDA7Cit9KQorCis7OyBPcGVyYW5kIGlzIGEgY29uc3RhbnQgaW50ZWdlciB3 aGVyZQorOzsgb25seSBvbmUgYml0IGlzIHNldCB0byAwLgorKGRlZmluZV9w cmVkaWNhdGUgInJldl9vbmVfYml0X29wZXJhbmQiCisgIChtYXRjaF9jb2Rl ICJjb25zdF9pbnQiKQoreworICB1bnNpZ25lZCBpbnQgdmFsOworCisgIHZh bCA9IH5JTlRWQUwgKG9wKTsgLyogSW52ZXJ0IGFuZCB1c2UuICAqLworICBp ZiAobW9kZSA9PSBRSW1vZGUpIAorICAgIHZhbCAmPSAweGZmOworICBlbHNl IGlmIChtb2RlID09IEhJbW9kZSkKKyAgICB2YWwgJj0gMHhmZmZmOworICBl bHNlCisgICAgZ2NjX3VucmVhY2hhYmxlKCk7CisKKyAgaWYgKHZhbCAhPSAw KQorICAgIHJldHVybiAodmFsICYgKHZhbCAtIDEpKSA9PSAwOyAvKiB0cnVl IGlmIG9ubHkgb25lIGJpdCBpcyBzZXQuICAqLworICBlbHNlCisgICAgcmV0 dXJuIDA7Cit9KQorCis7OyBQcmVkaWNhdGVzIGZvciBzaGlmdCBpbnN0cnVj dGlvbnMKKzs7IEltbWVkaWF0ZSBvcGVyYW5kIHByZWRpY2F0ZSBmb3IgY291 bnQgaW4gc2hpZnQgb3BlcmF0aW9ucy4KKzs7IEltbWVkaWF0ZSBzaGFsbCBi ZSAzLWJpdHMgaW4gY2FzZSBvcGVyYW5kIHRvIGJlIG9wZXJhdGVkIG9uCis7 OyBpcyBhIHFpIG1vZGUgb3BlcmFuZC4KKyhkZWZpbmVfcHJlZGljYXRlICJz aGlmdF9xaV9pbW1fb3BlcmFuZCIKKyAgKG1hdGNoX2NvZGUgImNvbnN0X2lu dCIpCit7CisgIHJldHVybiAoVU5TSUdORURfSU5UX0ZJVFNfTl9CSVRTKElO VFZBTCAob3ApLCAzKSkgPyAxIDogMDsKK30pCisKKzs7IEltbWVkaWF0ZSBz aGFsbCBiZSA0LWJpdHMgaW4gY2FzZSBvcGVyYW5kIHRvIGJlIG9wZXJhdGVk IG9uCis7OyBpcyBhIGhpIG1vZGUgb3BlcmFuZC4KKyhkZWZpbmVfcHJlZGlj YXRlICJzaGlmdF9oaV9pbW1fb3BlcmFuZCIKKyAgKG1hdGNoX2NvZGUgImNv bnN0X2ludCIpCit7CisgIHJldHVybiAoVU5TSUdORURfSU5UX0ZJVFNfTl9C SVRTKElOVFZBTCAob3ApLCA0KSkgPyAxIDogMDsKK30pCisKKzs7IEltbWVk aWF0ZSBzaGFsbCBiZSAzLWJpdHMgaW4gY2FzZSBvcGVyYW5kIHRvIGJlIG9w ZXJhdGVkIG9uCis7OyBpcyBhIHNpIG1vZGUgb3BlcmFuZC4KKyhkZWZpbmVf cHJlZGljYXRlICJzaGlmdF9zaV9pbW1fb3BlcmFuZCIKKyAgKG1hdGNoX2Nv ZGUgImNvbnN0X2ludCIpCit7CisgIHJldHVybiAoVU5TSUdORURfSU5UX0ZJ VFNfTl9CSVRTKElOVFZBTCAob3ApLCA1KSkgPyAxIDogMDsKK30pCisKKzs7 IFByZWRpY2F0ZXMgZm9yIGp1bXAvY2FsbCBpbnN0cnVjdGlvbnMKKzs7IEp1 bXAgaW1tZWRpYXRlIGNhbm5vdCBiZSBtb3JlIHRoYW4gMjQtYml0cworKGRl ZmluZV9wcmVkaWNhdGUgImp1bXBfaW1tX29wZXJhbmQiCisgIChtYXRjaF9j b2RlICJjb25zdF9pbnQiKQoreworICByZXR1cm4gKFVOU0lHTkVEX0lOVF9G SVRTX05fQklUUyhJTlRWQUwgKG9wKSwgMjQpKSA/IDEgOiAwOworfSkKKwor OzsgQ2FsbCBpbW1lZGlhdGUgY2Fubm90IGJlIG1vcmUgdGhhbiAyNC1iaXRz CisoZGVmaW5lX3ByZWRpY2F0ZSAiY2FsbF9pbW1fb3BlcmFuZCIKKyAgKG1h dGNoX29wZXJhbmQgMCAiaW1tZWRpYXRlX29wZXJhbmQiKQoreworICBpZiAo R0VUX0NPREUgKG9wKSAhPSBDT05TVF9JTlQpIHJldHVybiAxOworICAgIHJl dHVybiAoVU5TSUdORURfSU5UX0ZJVFNfTl9CSVRTKElOVFZBTCAob3ApLCAy NCkpID8gMSA6IDA7Cit9KQorCis7OyBPcGVyYW5kIGlzIHJlZ2lzdGVyIG9y IDQtYml0IGltbWVkaWF0ZSBvcGVyYW5kCisoZGVmaW5lX3ByZWRpY2F0ZSAi cmVnX29yX3U0Yml0c19vcGVyYW5kIgorICAoaW9yIChtYXRjaF9vcGVyYW5k IDAgInU0Yml0c19vcGVyYW5kIikKKyAgICAgICAobWF0Y2hfb3BlcmFuZCAw ICJyZWdpc3Rlcl9vcGVyYW5kIikpKQorCis7OyBPcGVyYW5kIGlzIGEgcmVn aXN0ZXIgb3Igc3ltYm9sIHJlZmVyZW5jZQorKGRlZmluZV9wcmVkaWNhdGUg InJlZ19vcl9zeW1fb3BlcmFuZCIKKyAgKGlvciAobWF0Y2hfY29kZSAic3lt Ym9sX3JlZiIpCisgICAgICAgKG1hdGNoX29wZXJhbmQgMCAicmVnaXN0ZXJf b3BlcmFuZCIpKSkKKworOzsgT3BlcmFuZCBpcyBhIG5vbiBzdGFjayBwb2lu dGVyIHJlZ2lzdGVyCisoZGVmaW5lX3ByZWRpY2F0ZSAibm9zcF9yZWdfb3Bl cmFuZCIKKyAgKGFuZCAobWF0Y2hfb3BlcmFuZCAwICJyZWdpc3Rlcl9vcGVy YW5kIikKKyAgICAgICAobWF0Y2hfdGVzdCAiUkVHTk8gKG9wKSAhPSBTUF9S RUdOVU0iKSkpCisKKyhkZWZpbmVfcHJlZGljYXRlICJoYXJkX3JlZ19vcGVy YW5kIgorICAoYW5kIChtYXRjaF9vcGVyYW5kIDAgInJlZ2lzdGVyX29wZXJh bmQiKQorICAgICAgIChtYXRjaF90ZXN0ICJSRUdOTyAob3ApIDw9IDE1Iikp KQorCis7OyBPcGVyYW5kIGlzIGEgbWVtb3J5IHJlZmVyZW5jZSBhbmQKKzs7 IG5vdCBhIHB1c2ggb3BlcmFuZC4KKyhkZWZpbmVfcHJlZGljYXRlICJzdG9y ZV9vcGVyYW5kIgorICAoYW5kIChtYXRjaF9vcGVyYW5kIDAgIm1lbW9yeV9v cGVyYW5kIikKKyAgICAgICAobm90IChtYXRjaF9vcGVyYW5kIDAgInB1c2hf b3BlcmFuZCIpKSkpCisKKzs7IEhlbHBlciBwcmVkaWNhdGUgCisoZGVmaW5l X3ByZWRpY2F0ZSAicmVnX29yX2ludF9vcGVyYW5kIgorICAoaW9yIChtYXRj aF9jb2RlICJjb25zdF9pbnQiKQorICAgICAgIChtYXRjaF9vcGVyYW5kIDAg InJlZ2lzdGVyX29wZXJhbmQiKSkpCisKKzs7Cis7OworOzsgQXRpdGhtZXRp Yy9sb2dpY2FsIHByZWRpY2F0ZXMKKworOzsgUUkgSGVscGVyCisoZGVmaW5l X3ByZWRpY2F0ZSAiYXJpdGhfcWlfb3BlcmFuZCIKKyAgIChtYXRjaF9jb2Rl ICJjb25zdF9pbnQiKQoreworICAgICAgICByZXR1cm4gKElOX1JBTihJTlRW QUwgKG9wKSwgMCwgMTUpICYmICgoSU5UVkFMIChvcCkgIT0gOSkgCisgICAg ICAgICAgICAgICAgfHwgKElOVFZBTCAob3ApICE9IDExKSkpID8gMSA6IDAg OyAKK30pCisKKzs7UUkgUmVnLCBzdWJyZWcocmVnKSBvciBjb25zdF9pbnQu CisoZGVmaW5lX3ByZWRpY2F0ZSAicmVnX3FpX2ludF9vcGVyYW5kIgorICAo aW9yIChtYXRjaF9vcGVyYW5kIDAgImFyaXRoX3FpX29wZXJhbmQiKQorICAg ICAgIChtYXRjaF9vcGVyYW5kIDAgInJlZ2lzdGVyX29wZXJhbmQiKSkpCisK Kzs7IEhJIEhlbHBlcgorKGRlZmluZV9wcmVkaWNhdGUgImFyaXRoX2hpX29w ZXJhbmQiCisgICAobWF0Y2hfY29kZSAiY29uc3RfaW50IikKK3sKKyAgICAg ICAgcmV0dXJuIChJTl9SQU4oSU5UVkFMIChvcCksIC0zMjc2OCwgMzI3Njgp ICkgPyAxIDogMCA7IAorfSkKKworOztISSBSZWcsIHN1YnJlZyhyZWcpIG9y IGNvbnN0X2ludC4KKyhkZWZpbmVfcHJlZGljYXRlICJyZWdfaGlfaW50X29w ZXJhbmQiCisgIChpb3IgKG1hdGNoX29wZXJhbmQgMCAiYXJpdGhfaGlfb3Bl cmFuZCIpCisgICAgICAgKG1hdGNoX29wZXJhbmQgMCAicmVnaXN0ZXJfb3Bl cmFuZCIpKSkKKworOztTSSBSZWcsIHN1YnJlZyhyZWcpIG9yIGNvbnN0X2lu dC4KKyhkZWZpbmVfcHJlZGljYXRlICJyZWdfc2lfaW50X29wZXJhbmQiCisg IChpb3IgKG1hdGNoX29wZXJhbmQgMCAiY29uc3RfaW50X29wZXJhbmQiKQor ICAgICAgIChtYXRjaF9vcGVyYW5kIDAgInJlZ2lzdGVyX29wZXJhbmQiKSkp CisKKzs7Cis7OyBTaGlmdCBwcmVkaWNhdGVzCisKKzs7IFFJIEhlbHBlcgor KGRlZmluZV9wcmVkaWNhdGUgInNoaWZ0X3FpX29wZXJhbmQiCisgICAobWF0 Y2hfY29kZSAiY29uc3RfaW50IikKK3sKKyAgICAgICAgcmV0dXJuIChJTl9S QU4oSU5UVkFMIChvcCksIDAsIDcpICkgPyAxIDogMDsgCit9KQorCis7O1FJ IFJlZywgc3VicmVnKHJlZykgb3IgY29uc3RfaW50LgorKGRlZmluZV9wcmVk aWNhdGUgInNoaWZ0X3JlZ19xaV9pbnRfb3BlcmFuZCIKKyAgKGlvciAobWF0 Y2hfb3BlcmFuZCAwICJzaGlmdF9xaV9vcGVyYW5kIikKKyAgICAgICAobWF0 Y2hfb3BlcmFuZCAwICJyZWdpc3Rlcl9vcGVyYW5kIikpKQorOzsgSEkgSGVs cGVyCisoZGVmaW5lX3ByZWRpY2F0ZSAic2hpZnRfaGlfb3BlcmFuZCIKKyAg IChtYXRjaF9jb2RlICJjb25zdF9pbnQiKQoreworICAgICAgICByZXR1cm4g KElOX1JBTihJTlRWQUwgKG9wKSwgMCwgMTUpICkgPyAxIDogMCA7IAorfSkK KworOztISSBSZWcsIHN1YnJlZyhyZWcpIG9yIGNvbnN0X2ludC4KKyhkZWZp bmVfcHJlZGljYXRlICJzaGlmdF9yZWdfaGlfaW50X29wZXJhbmQiCisgIChp b3IgKG1hdGNoX29wZXJhbmQgMCAic2hpZnRfaGlfb3BlcmFuZCIpCisgICAg ICAgKG1hdGNoX29wZXJhbmQgMCAicmVnaXN0ZXJfb3BlcmFuZCIpKSkKKwor OzsgU0kgSGVscGVyCisoZGVmaW5lX3ByZWRpY2F0ZSAic2hpZnRfc2lfb3Bl cmFuZCIKKyAgIChtYXRjaF9jb2RlICJjb25zdF9pbnQiKQoreworICAgICAg ICByZXR1cm4gKElOX1JBTihJTlRWQUwgKG9wKSwgMCwgMzEpICkgPyAxIDog MDsgCit9KQorCis7O1NJIFJlZywgc3VicmVnKHJlZykgb3IgY29uc3RfaW50 LgorKGRlZmluZV9wcmVkaWNhdGUgInNoaWZ0X3JlZ19zaV9pbnRfb3BlcmFu ZCIKKyAgKGlvciAobWF0Y2hfb3BlcmFuZCAwICJzaGlmdF9zaV9vcGVyYW5k IikKKyAgICAgICAobWF0Y2hfb3BlcmFuZCAwICJyZWdpc3Rlcl9vcGVyYW5k IikpKQpkaWZmIC11cHJOIG9yaWcvZ2NjL2NvbmZpZy9jcjE2L3QtY3IxNiBt b2QvZ2NjL2NvbmZpZy9jcjE2L3QtY3IxNgotLS0gb3JpZy9nY2MvY29uZmln L2NyMTYvdC1jcjE2CTE5NzAtMDEtMDEgMDU6MzA6MDAuMDAwMDAwMDAwICsw NTMwCisrKyBtb2QvZ2NjL2NvbmZpZy9jcjE2L3QtY3IxNgkyMDExLTA1LTIw IDE1OjE3OjEzLjAwMDAwMDAwMCArMDUzMApAQCAtMCwwICsxLDU4IEBACisj IENSMTYgVGFyZ2V0IE1ha2VmaWxlCisjIENvcHlyaWdodCAoQykgMjAxMCBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgQ29udHJpYnV0ZWQg YnkgS1BJVCBDdW1taW5zIEluZm9zeXN0ZW1zIExpbWl0ZWQuCisjCisjIFRo aXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKyMKKyMgR0NDIGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkg aXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyMgYnkgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIK KyMgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgR0NDIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws IGJ1dCBXSVRIT1VUCisjIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorIyBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V IEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K KyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCBHQ0M7 IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKyMgPGh0dHA6 Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgICAgCisKK0xJQjFBU01TUkMg PSBjcjE2L2NyMTYtbGliZ2NjLnMKK0xJQjFBU01GVU5DUyA9CV9tdWxzaTMg X2xzaHJkaTMgX211bGRpMyBfZGl2ZGkzIF91ZGl2ZGkzIF91ZGl2bW9kZGkz IFwKKwkJX3Vtb2RkaTMgX21vZGRpMworCitMSUIyRlVOQ1NfRVhUUkEgPSBc CisJJChzcmNkaXIpL2NvbmZpZy9jcjE2L2Rpdm1vZGhpMy5jICBcCisJJChz cmNkaXIpL2NvbmZpZy91ZGl2bW9kc2k0LmMgXAorCSQoc3JjZGlyKS9jb25m aWcvdWRpdm1vZC5jICAgXAorCSQoc3JjZGlyKS9jb25maWcvZGl2bW9kLmMg CisKK0xJQjJBRERFSCA9ICQoc3JjZGlyKS9jb25maWcvY3IxNi91bndpbmQt ZHcyLWNyMTYuYyBcCisgICAkKHNyY2RpcikvdW53aW5kLWR3Mi1mZGUuYyAk KHNyY2RpcikvdW53aW5kLWMuYworCisKK01VTFRJTElCX09QVElPTlMgICAg ID0gZlBJQyBtaW50MzIgCitNVUxUSUxJQl9ESVJOQU1FUyAgICA9IGZhci1w aWMgaW50MzIgCitNVUxUSUxJQl9NQVRDSEVTICAgICA9CitNVUxUSUxJQl9F WFRSQV9PUFRTICA9IG1jcjE2Y3BsdXMgbWRhdGEtbW9kZWw9ZmFyCisKK0xJ QkdDQyA9IHN0bXAtbXVsdGlsaWIKK0lOU1RBTExfTElCR0NDID0gaW5zdGFs bC1tdWx0aWxpYgorCisjIFdlIHdhbnQgZmluZSBncmFpbmVkIGxpYnJhcmll cywgc28gdXNlIHRoZSBuZXcgY29kZS4KKyMgdG8gYnVpbGQgdGhlIGZsb2F0 aW5nIHBvaW50IGVtdWxhdGlvbiBsaWJyYXJpZXMuCitGUEJJVCA9IGZwLWJp dC5jCitEUEJJVCA9IGRwLWJpdC5jCisKK2ZwLWJpdC5jOiAkKHNyY2Rpcikv Y29uZmlnL2ZwLWJpdC5jCisJZWNobyAnI2RlZmluZSBGTE9BVCcgPiBmcC1i aXQuYworCWVjaG8gJyNkZWZpbmUgU01BTExfTUFDSElORScgPj4gZnAtYml0 LmMKKwllY2hvICcjZGVmaW5lIENNUHR5cGUgSEl0eXBlJyA+PiBmcC1iaXQu YworCWNhdCAkKHNyY2RpcikvY29uZmlnL2ZwLWJpdC5jID4+IGZwLWJpdC5j CisKK2RwLWJpdC5jOiAkKHNyY2RpcikvY29uZmlnL2ZwLWJpdC5jCisJZWNo byAnI2RlZmluZSBTTUFMTF9NQUNISU5FJyA+PiBkcC1iaXQuYworCWVjaG8g JyNkZWZpbmUgQ01QdHlwZSBISXR5cGUnID4+IGRwLWJpdC5jCisJY2F0ICQo c3JjZGlyKS9jb25maWcvZnAtYml0LmMgPj4gZHAtYml0LmMKKwpkaWZmIC11 cHJOIG9yaWcvZ2NjL2NvbmZpZy9jcjE2L3Vud2luZC1kdzItY3IxNi5jIG1v ZC9nY2MvY29uZmlnL2NyMTYvdW53aW5kLWR3Mi1jcjE2LmMKLS0tIG9yaWcv Z2NjL2NvbmZpZy9jcjE2L3Vud2luZC1kdzItY3IxNi5jCTE5NzAtMDEtMDEg MDU6MzA6MDAuMDAwMDAwMDAwICswNTMwCisrKyBtb2QvZ2NjL2NvbmZpZy9j cjE2L3Vud2luZC1kdzItY3IxNi5jCTIwMTEtMDUtMjAgMTU6MTc6MTMuMDAw MDAwMDAwICswNTMwCkBAIC0wLDAgKzEsMTU5NyBAQAorLyogRFdBUkYyIGV4 Y2VwdGlvbiBoYW5kbGluZyBhbmQgZnJhbWUgdW53aW5kIHJ1bnRpbWUgaW50 ZXJmYWNlIHJvdXRpbmVzLgorICAgQ29weXJpZ2h0IChDKSAxOTk3LCAxOTk4 LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAy MDA2LAorICAgMjAwOCwgMjAwOSwgMjAxMCAgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4K KworICAgR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgIHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVk IGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIg dmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIg dmVyc2lvbi4KKworICAgR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgICBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv ZiBNRVJDSEFOVEFCSUxJVFkKKyAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAg IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgVW5kZXIgU2VjdGlv biA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlv bmFsCisgICBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50 aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisgICAzLjEsIGFzIHB1 Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisg ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKyAgIGEgY29weSBvZiB0aGUg R0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlz IHByb2dyYW07CisgICBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZ SU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKyAgIDxo dHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpbmNsdWRl ICJ0Y29uZmlnLmgiCisjaW5jbHVkZSAidHN5c3RlbS5oIgorI2luY2x1ZGUg ImNvcmV0eXBlcy5oIgorI2luY2x1ZGUgInRtLmgiCisjaW5jbHVkZSAiZHdh cmYyLmgiCisjaW5jbHVkZSAidW53aW5kLmgiCisjaWZkZWYgX19VU0lOR19T SkxKX0VYQ0VQVElPTlNfXworIyBkZWZpbmUgTk9fU0laRV9PRl9FTkNPREVE X1ZBTFVFCisjZW5kaWYKKyNpbmNsdWRlICJ1bndpbmQtcGUuaCIKKyNpbmNs dWRlICJ1bndpbmQtZHcyLWZkZS5oIgorI2luY2x1ZGUgImd0aHIuaCIKKyNp bmNsdWRlICJ1bndpbmQtZHcyLmgiCisKKyNpZm5kZWYgX19VU0lOR19TSkxK X0VYQ0VQVElPTlNfXworCisjaWZuZGVmIFNUQUNLX0dST1dTX0RPV05XQVJE CisjZGVmaW5lIFNUQUNLX0dST1dTX0RPV05XQVJEIDAKKyNlbHNlCisjdW5k ZWYgU1RBQ0tfR1JPV1NfRE9XTldBUkQKKyNkZWZpbmUgU1RBQ0tfR1JPV1Nf RE9XTldBUkQgMQorI2VuZGlmCisKKy8qIER3YXJmIGZyYW1lIHJlZ2lzdGVy cyB1c2VkIGZvciBwcmUgZ2NjIDMuMCBjb21waWxlZCBnbGliYy4gICovCisj aWZuZGVmIFBSRV9HQ0MzX0RXQVJGX0ZSQU1FX1JFR0lTVEVSUworI2RlZmlu ZSBQUkVfR0NDM19EV0FSRl9GUkFNRV9SRUdJU1RFUlMgRFdBUkZfRlJBTUVf UkVHSVNURVJTCisjZW5kaWYKKworI2lmbmRlZiBEV0FSRl9SRUdfVE9fVU5X SU5EX0NPTFVNTgorI2RlZmluZSBEV0FSRl9SRUdfVE9fVU5XSU5EX0NPTFVN TihSRUdOTykgKFJFR05PKQorI2VuZGlmCisKKy8qIFRoaXMgaXMgdGhlIHJl Z2lzdGVyIGFuZCB1bndpbmQgc3RhdGUgZm9yIGEgcGFydGljdWxhciBmcmFt ZS4gIFRoaXMKKyAgIHByb3ZpZGVzIHRoZSBpbmZvcm1hdGlvbiBuZWNlc3Nh cnkgdG8gdW53aW5kIHVwIHBhc3QgYSBmcmFtZSBhbmQgcmV0dXJuCisgICB0 byBpdHMgY2FsbGVyLiAgKi8KK3N0cnVjdCBfVW53aW5kX0NvbnRleHQKK3sK KyAgdm9pZCAqcmVnW0RXQVJGX0ZSQU1FX1JFR0lTVEVSUysxXTsKKyAgdm9p ZCAqY2ZhOworICB2b2lkICpyYTsKKyAgdm9pZCAqbHNkYTsKKyAgc3RydWN0 IGR3YXJmX2VoX2Jhc2VzIGJhc2VzOworICAvKiBTaWduYWwgZnJhbWUgY29u dGV4dC4gICovCisjZGVmaW5lIFNJR05BTF9GUkFNRV9CSVQgKCh+KF9Vbndp bmRfV29yZCkgMCA+PiAxKSArIDEpCisgIC8qIENvbnRleHQgd2hpY2ggaGFz IHZlcnNpb24vYXJnc19zaXplL2J5X3ZhbHVlIGZpZWxkcy4gICovCisjZGVm aW5lIEVYVEVOREVEX0NPTlRFWFRfQklUICgofihfVW53aW5kX1dvcmQpIDAg Pj4gMikgKyAxKQorICBfVW53aW5kX1dvcmQgZmxhZ3M7CisgIC8qIDAgZm9y IG5vdywgY2FuIGJlIGluY3JlYXNlZCB3aGVuIGZ1cnRoZXIgZmllbGRzIGFy ZSBhZGRlZCB0bworICAgICBzdHJ1Y3QgX1Vud2luZF9Db250ZXh0LiAgKi8K KyAgX1Vud2luZF9Xb3JkIHZlcnNpb247CisgIF9VbndpbmRfV29yZCBhcmdz X3NpemU7CisgIGNoYXIgYnlfdmFsdWVbRFdBUkZfRlJBTUVfUkVHSVNURVJT KzFdOworfTsKKworLyogQnl0ZSBzaXplIG9mIGV2ZXJ5IHJlZ2lzdGVyIG1h bmFnZWQgYnkgdGhlc2Ugcm91dGluZXMuICAqLworc3RhdGljIHVuc2lnbmVk IGNoYXIgZHdhcmZfcmVnX3NpemVfdGFibGVbRFdBUkZfRlJBTUVfUkVHSVNU RVJTKzFdOworCisMCisvKiBSZWFkIHVuYWxpZ25lZCBkYXRhIGZyb20gdGhl IGluc3RydWN0aW9uIGJ1ZmZlci4gICovCisKK3VuaW9uIHVuYWxpZ25lZAor eworICB2b2lkICpwOworICB1bnNpZ25lZCB1MiBfX2F0dHJpYnV0ZV9fICgo bW9kZSAoSEkpKSk7CisgIHVuc2lnbmVkIHU0IF9fYXR0cmlidXRlX18gKCht b2RlIChTSSkpKTsKKyAgdW5zaWduZWQgdTggX19hdHRyaWJ1dGVfXyAoKG1v ZGUgKERJKSkpOworICBzaWduZWQgczIgX19hdHRyaWJ1dGVfXyAoKG1vZGUg KEhJKSkpOworICBzaWduZWQgczQgX19hdHRyaWJ1dGVfXyAoKG1vZGUgKFNJ KSkpOworICBzaWduZWQgczggX19hdHRyaWJ1dGVfXyAoKG1vZGUgKERJKSkp OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0YXRpYyB2b2lk IHV3X3VwZGF0ZV9jb250ZXh0IChzdHJ1Y3QgX1Vud2luZF9Db250ZXh0ICos IF9VbndpbmRfRnJhbWVTdGF0ZSAqKTsKK3N0YXRpYyBfVW53aW5kX1JlYXNv bl9Db2RlIHV3X2ZyYW1lX3N0YXRlX2ZvciAoc3RydWN0IF9VbndpbmRfQ29u dGV4dCAqLAorCQkJCQkgICAgICAgX1Vud2luZF9GcmFtZVN0YXRlICopOwor CitzdGF0aWMgaW5saW5lIHZvaWQgKgorcmVhZF9wb2ludGVyIChjb25zdCB2 b2lkICpwKSB7IGNvbnN0IHVuaW9uIHVuYWxpZ25lZCAqdXAgPSBwOyByZXR1 cm4gdXAtPnA7IH0KKworc3RhdGljIGlubGluZSBpbnQKK3JlYWRfMXUgKGNv bnN0IHZvaWQgKnApIHsgcmV0dXJuICooY29uc3QgdW5zaWduZWQgY2hhciAq KSBwOyB9CisKK3N0YXRpYyBpbmxpbmUgaW50CityZWFkXzFzIChjb25zdCB2 b2lkICpwKSB7IHJldHVybiAqKGNvbnN0IHNpZ25lZCBjaGFyICopIHA7IH0K Kworc3RhdGljIGlubGluZSBpbnQKK3JlYWRfMnUgKGNvbnN0IHZvaWQgKnAp IHsgY29uc3QgdW5pb24gdW5hbGlnbmVkICp1cCA9IHA7IHJldHVybiB1cC0+ dTI7IH0KKworc3RhdGljIGlubGluZSBpbnQKK3JlYWRfMnMgKGNvbnN0IHZv aWQgKnApIHsgY29uc3QgdW5pb24gdW5hbGlnbmVkICp1cCA9IHA7IHJldHVy biB1cC0+czI7IH0KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKK3Jl YWRfNHUgKGNvbnN0IHZvaWQgKnApIHsgY29uc3QgdW5pb24gdW5hbGlnbmVk ICp1cCA9IHA7IHJldHVybiB1cC0+dTQ7IH0KKworc3RhdGljIGlubGluZSBp bnQKK3JlYWRfNHMgKGNvbnN0IHZvaWQgKnApIHsgY29uc3QgdW5pb24gdW5h bGlnbmVkICp1cCA9IHA7IHJldHVybiB1cC0+czQ7IH0KKworc3RhdGljIGlu bGluZSB1bnNpZ25lZCBsb25nCityZWFkXzh1IChjb25zdCB2b2lkICpwKSB7 IGNvbnN0IHVuaW9uIHVuYWxpZ25lZCAqdXAgPSBwOyByZXR1cm4gdXAtPnU4 OyB9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZworcmVhZF84cyAo Y29uc3Qgdm9pZCAqcCkgeyBjb25zdCB1bmlvbiB1bmFsaWduZWQgKnVwID0g cDsgcmV0dXJuIHVwLT5zODsgfQorDAorc3RhdGljIGlubGluZSBfVW53aW5k X1dvcmQKK19VbndpbmRfSXNTaWduYWxGcmFtZSAoc3RydWN0IF9VbndpbmRf Q29udGV4dCAqY29udGV4dCkKK3sKKyAgcmV0dXJuIChjb250ZXh0LT5mbGFn cyAmIFNJR05BTF9GUkFNRV9CSVQpID8gMSA6IDA7Cit9CisKK3N0YXRpYyBp bmxpbmUgdm9pZAorX1Vud2luZF9TZXRTaWduYWxGcmFtZSAoc3RydWN0IF9V bndpbmRfQ29udGV4dCAqY29udGV4dCwgaW50IHZhbCkKK3sKKyAgaWYgKHZh bCkKKyAgICBjb250ZXh0LT5mbGFncyB8PSBTSUdOQUxfRlJBTUVfQklUOwor ICBlbHNlCisgICAgY29udGV4dC0+ZmxhZ3MgJj0gflNJR05BTF9GUkFNRV9C SVQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgX1Vud2luZF9Xb3JkCitfVW53aW5k X0lzRXh0ZW5kZWRDb250ZXh0IChzdHJ1Y3QgX1Vud2luZF9Db250ZXh0ICpj b250ZXh0KQoreworICByZXR1cm4gY29udGV4dC0+ZmxhZ3MgJiBFWFRFTkRF RF9DT05URVhUX0JJVDsKK30KKwwKKy8qIEdldCB0aGUgdmFsdWUgb2YgcmVn aXN0ZXIgSU5ERVggYXMgc2F2ZWQgaW4gQ09OVEVYVC4gICovCisKK2lubGlu ZSBfVW53aW5kX1dvcmQKK19VbndpbmRfR2V0R1IgKHN0cnVjdCBfVW53aW5k X0NvbnRleHQgKmNvbnRleHQsIGludCBpbmRleCkKK3sKKyAgaW50IHNpemU7 CisgIHZvaWQgKnB0cjsKKworI2lmZGVmIERXQVJGX1pFUk9fUkVHCisgIGlm IChpbmRleCA9PSBEV0FSRl9aRVJPX1JFRykKKyAgICByZXR1cm4gMDsKKyNl bmRpZgorCisgIGluZGV4ID0gRFdBUkZfUkVHX1RPX1VOV0lORF9DT0xVTU4g KGluZGV4KTsKKyAgZ2NjX2Fzc2VydCAoaW5kZXggPCAoaW50KSBzaXplb2Yo ZHdhcmZfcmVnX3NpemVfdGFibGUpKTsKKyAgc2l6ZSA9IGR3YXJmX3JlZ19z aXplX3RhYmxlW2luZGV4XTsKKyAgcHRyID0gY29udGV4dC0+cmVnW2luZGV4 XTsKKworICBpZiAoX1Vud2luZF9Jc0V4dGVuZGVkQ29udGV4dCAoY29udGV4 dCkgJiYgY29udGV4dC0+YnlfdmFsdWVbaW5kZXhdKQorICAgIHJldHVybiAo X1Vud2luZF9Xb3JkKSAoX1Vud2luZF9JbnRlcm5hbF9QdHIpIHB0cjsKKwor ICAvKiBUaGlzIHdpbGwgc2VnZmF1bHQgaWYgdGhlIHJlZ2lzdGVyIGhhc24n dCBiZWVuIHNhdmVkLiAgKi8KKyAgaWYgKHNpemUgPT0gc2l6ZW9mKF9Vbndp bmRfUHRyKSkKKyAgICByZXR1cm4gKiAoX1Vud2luZF9QdHIgKikgcHRyOwor ICBlbHNlCisgICAgeworICAgICAgZ2NjX2Fzc2VydCAoc2l6ZSA9PSBzaXpl b2YoX1Vud2luZF9Xb3JkKSk7CisgICAgICByZXR1cm4gKiAoX1Vud2luZF9X b3JkICopIHB0cjsKKyAgICB9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAq CitfVW53aW5kX0dldFB0ciAoc3RydWN0IF9VbndpbmRfQ29udGV4dCAqY29u dGV4dCwgaW50IGluZGV4KQoreworICByZXR1cm4gKHZvaWQgKikoX1Vud2lu ZF9QdHIpIF9VbndpbmRfR2V0R1IgKGNvbnRleHQsIGluZGV4KTsKK30KKwor LyogR2V0IHRoZSB2YWx1ZSBvZiB0aGUgQ0ZBIGFzIHNhdmVkIGluIENPTlRF WFQuICAqLworCitfVW53aW5kX1dvcmQKK19VbndpbmRfR2V0Q0ZBIChzdHJ1 Y3QgX1Vud2luZF9Db250ZXh0ICpjb250ZXh0KQoreworICByZXR1cm4gKF9V bndpbmRfUHRyKSBjb250ZXh0LT5jZmE7Cit9CisKKy8qIE92ZXJ3cml0ZSB0 aGUgc2F2ZWQgdmFsdWUgZm9yIHJlZ2lzdGVyIElOREVYIGluIENPTlRFWFQg d2l0aCBWQUwuICAqLworCitpbmxpbmUgdm9pZAorX1Vud2luZF9TZXRHUiAo c3RydWN0IF9VbndpbmRfQ29udGV4dCAqY29udGV4dCwgaW50IGluZGV4LCBf VW53aW5kX1dvcmQgdmFsKQoreworICBpbnQgc2l6ZTsKKyAgdm9pZCAqcHRy OworCisgIGluZGV4ID0gRFdBUkZfUkVHX1RPX1VOV0lORF9DT0xVTU4gKGlu ZGV4KTsKKyAgZ2NjX2Fzc2VydCAoaW5kZXggPCAoaW50KSBzaXplb2YoZHdh cmZfcmVnX3NpemVfdGFibGUpKTsKKyAgc2l6ZSA9IGR3YXJmX3JlZ19zaXpl X3RhYmxlW2luZGV4XTsKKworICBpZiAoX1Vud2luZF9Jc0V4dGVuZGVkQ29u dGV4dCAoY29udGV4dCkgJiYgY29udGV4dC0+YnlfdmFsdWVbaW5kZXhdKQor ICAgIHsKKyAgICAgIGNvbnRleHQtPnJlZ1tpbmRleF0gPSAodm9pZCAqKSAo X1Vud2luZF9JbnRlcm5hbF9QdHIpIHZhbDsKKyAgICAgIHJldHVybjsKKyAg ICB9CisgIHB0ciA9IGNvbnRleHQtPnJlZ1tpbmRleF07CisgICAgaWYgKCBz aXplID09IHNpemVvZihfVW53aW5kX1dvcmQpICkKKyAgICAgICogKF9Vbndp bmRfV29yZCAqKSBwdHIgPSB2YWw7CisgICAgZWxzZSB7CisgICAgICB0eXBl ZGVmIHVuc2lnbmVkIF9DUjE2X1Vud2luZF9Xb3JkIF9fYXR0cmlidXRlX18o KF9fbW9kZV9fKF9fd29yZF9fKSkpOworICAgICAgZ2NjX2Fzc2VydCAoaW5k ZXggKyAxICA8ICAoaW50KSBzaXplb2YoZHdhcmZfcmVnX3NpemVfdGFibGUp KTsKKyAgICAgICogKF9DUjE2X1Vud2luZF9Xb3JkICopIHB0ciA9IHZhbCAm IDB4ZmZmZiA7ICAvKiBsb3cgMTYtYml0LiAgKi8KKyAgICAgIHB0ciA9IGNv bnRleHQtPnJlZ1tpbmRleCArIDFdOworICAgICAgKiAoX0NSMTZfVW53aW5k X1dvcmQgKikgcHRyID0gdmFsID4+IDE2IDsgIC8qIGhpZ2ggMTYtYml0LiAg Ki8KKyAgICAgICAgIH0KK30KKworLyogR2V0IHRoZSBwb2ludGVyIHRvIGEg cmVnaXN0ZXIgSU5ERVggYXMgc2F2ZWQgaW4gQ09OVEVYVC4gICovCisKK3N0 YXRpYyBpbmxpbmUgdm9pZCAqCitfVW53aW5kX0dldEdSUHRyIChzdHJ1Y3Qg X1Vud2luZF9Db250ZXh0ICpjb250ZXh0LCBpbnQgaW5kZXgpCit7CisgIGlu ZGV4ID0gRFdBUkZfUkVHX1RPX1VOV0lORF9DT0xVTU4gKGluZGV4KTsKKyAg aWYgKF9VbndpbmRfSXNFeHRlbmRlZENvbnRleHQgKGNvbnRleHQpICYmIGNv bnRleHQtPmJ5X3ZhbHVlW2luZGV4XSkKKyAgICByZXR1cm4gJmNvbnRleHQt PnJlZ1tpbmRleF07CisgIHJldHVybiBjb250ZXh0LT5yZWdbaW5kZXhdOwor fQorCisvKiBTZXQgdGhlIHBvaW50ZXIgdG8gYSByZWdpc3RlciBJTkRFWCBh cyBzYXZlZCBpbiBDT05URVhULiAgKi8KKworc3RhdGljIGlubGluZSB2b2lk CitfVW53aW5kX1NldEdSUHRyIChzdHJ1Y3QgX1Vud2luZF9Db250ZXh0ICpj b250ZXh0LCBpbnQgaW5kZXgsIHZvaWQgKnApCit7CisgIGluZGV4ID0gRFdB UkZfUkVHX1RPX1VOV0lORF9DT0xVTU4gKGluZGV4KTsKKyAgaWYgKF9Vbndp bmRfSXNFeHRlbmRlZENvbnRleHQgKGNvbnRleHQpKQorICAgIGNvbnRleHQt PmJ5X3ZhbHVlW2luZGV4XSA9IDA7CisgIGNvbnRleHQtPnJlZ1tpbmRleF0g PSBwOworfQorCisvKiBPdmVyd3JpdGUgdGhlIHNhdmVkIHZhbHVlIGZvciBy ZWdpc3RlciBJTkRFWCBpbiBDT05URVhUIHdpdGggVkFMLiAgKi8KKworc3Rh dGljIGlubGluZSB2b2lkCitfVW53aW5kX1NldEdSVmFsdWUgKHN0cnVjdCBf VW53aW5kX0NvbnRleHQgKmNvbnRleHQsIGludCBpbmRleCwKKwkJICAgIF9V bndpbmRfV29yZCB2YWwpCit7CisgIGluZGV4ID0gRFdBUkZfUkVHX1RPX1VO V0lORF9DT0xVTU4gKGluZGV4KTsKKyAgZ2NjX2Fzc2VydCAoaW5kZXggPCAo aW50KSBzaXplb2YoZHdhcmZfcmVnX3NpemVfdGFibGUpKTsKKyAgZ2NjX2Fz c2VydCAoZHdhcmZfcmVnX3NpemVfdGFibGVbaW5kZXhdID09IHNpemVvZiAo X1Vud2luZF9QdHIpKTsKKworICBjb250ZXh0LT5ieV92YWx1ZVtpbmRleF0g PSAxOworICBjb250ZXh0LT5yZWdbaW5kZXhdID0gKHZvaWQgKikgKF9Vbndp bmRfSW50ZXJuYWxfUHRyKSB2YWw7Cit9CisKKy8qIFJldHVybiBub256ZXJv IGlmIHJlZ2lzdGVyIElOREVYIGlzIHN0b3JlZCBieSB2YWx1ZSByYXRoZXIg dGhhbgorICAgYnkgcmVmZXJlbmNlLiAgKi8KKworc3RhdGljIGlubGluZSBp bnQKK19VbndpbmRfR1JCeVZhbHVlIChzdHJ1Y3QgX1Vud2luZF9Db250ZXh0 ICpjb250ZXh0LCBpbnQgaW5kZXgpCit7CisgIGluZGV4ID0gRFdBUkZfUkVH X1RPX1VOV0lORF9DT0xVTU4gKGluZGV4KTsKKyAgcmV0dXJuIGNvbnRleHQt PmJ5X3ZhbHVlW2luZGV4XTsKK30KKworLyogUmV0cmlldmUgdGhlIHJldHVy biBhZGRyZXNzIGZvciBDT05URVhULiAgKi8KKworaW5saW5lIF9VbndpbmRf UHRyCitfVW53aW5kX0dldElQIChzdHJ1Y3QgX1Vud2luZF9Db250ZXh0ICpj b250ZXh0KQoreworICByZXR1cm4gKF9VbndpbmRfUHRyKSBjb250ZXh0LT5y YTsKK30KKworLyogUmV0cmlldmUgdGhlIHJldHVybiBhZGRyZXNzIGFuZCBm bGFnIHdoZXRoZXIgdGhhdCBJUCBpcyBiZWZvcmUKKyAgIG9yIGFmdGVyIGZp cnN0IG5vdCB5ZXQgZnVsbHkgZXhlY3V0ZWQgaW5zdHJ1Y3Rpb24uICAqLwor CitpbmxpbmUgX1Vud2luZF9QdHIKK19VbndpbmRfR2V0SVBJbmZvIChzdHJ1 Y3QgX1Vud2luZF9Db250ZXh0ICpjb250ZXh0LCBpbnQgKmlwX2JlZm9yZV9p bnNuKQoreworICAqaXBfYmVmb3JlX2luc24gPSBfVW53aW5kX0lzU2lnbmFs RnJhbWUgKGNvbnRleHQpOworICByZXR1cm4gKF9VbndpbmRfUHRyKSBjb250 ZXh0LT5yYTsKK30KKworLyogT3ZlcndyaXRlIHRoZSByZXR1cm4gYWRkcmVz cyBmb3IgQ09OVEVYVCB3aXRoIFZBTC4gICovCisKK2lubGluZSB2b2lkCitf VW53aW5kX1NldElQIChzdHJ1Y3QgX1Vud2luZF9Db250ZXh0ICpjb250ZXh0 LCBfVW53aW5kX1B0ciB2YWwpCit7CisgIGNvbnRleHQtPnJhID0gKHZvaWQg KikgdmFsOworfQorCit2b2lkICoKK19VbndpbmRfR2V0TGFuZ3VhZ2VTcGVj aWZpY0RhdGEgKHN0cnVjdCBfVW53aW5kX0NvbnRleHQgKmNvbnRleHQpCit7 CisgIHJldHVybiBjb250ZXh0LT5sc2RhOworfQorCitfVW53aW5kX1B0cgor X1Vud2luZF9HZXRSZWdpb25TdGFydCAoc3RydWN0IF9VbndpbmRfQ29udGV4 dCAqY29udGV4dCkKK3sKKyAgcmV0dXJuIChfVW53aW5kX1B0cikgY29udGV4 dC0+YmFzZXMuZnVuYzsKK30KKwordm9pZCAqCitfVW53aW5kX0ZpbmRFbmNs b3NpbmdGdW5jdGlvbiAodm9pZCAqcGMpCit7CisgIHN0cnVjdCBkd2FyZl9l aF9iYXNlcyBiYXNlczsKKyAgY29uc3Qgc3RydWN0IGR3YXJmX2ZkZSAqZmRl ID0gX1Vud2luZF9GaW5kX0ZERSAocGMtMSwgJmJhc2VzKTsKKyAgaWYgKGZk ZSkKKyAgICByZXR1cm4gYmFzZXMuZnVuYzsKKyAgZWxzZQorICAgIHJldHVy biBOVUxMOworfQorCisjaWZuZGVmIF9faWE2NF9fCitfVW53aW5kX1B0cgor X1Vud2luZF9HZXREYXRhUmVsQmFzZSAoc3RydWN0IF9VbndpbmRfQ29udGV4 dCAqY29udGV4dCkKK3sKKyAgcmV0dXJuIChfVW53aW5kX1B0cikgY29udGV4 dC0+YmFzZXMuZGJhc2U7Cit9CisKK19VbndpbmRfUHRyCitfVW53aW5kX0dl dFRleHRSZWxCYXNlIChzdHJ1Y3QgX1Vud2luZF9Db250ZXh0ICpjb250ZXh0 KQoreworICByZXR1cm4gKF9VbndpbmRfUHRyKSBjb250ZXh0LT5iYXNlcy50 YmFzZTsKK30KKyNlbmRpZgorCisjaWZkZWYgTURfVU5XSU5EX1NVUFBPUlQK KyNpbmNsdWRlIE1EX1VOV0lORF9TVVBQT1JUCisjZW5kaWYKKwwKKy8qIEV4 dHJhY3QgYW55IGludGVyZXN0aW5nIGluZm9ybWF0aW9uIGZyb20gdGhlIENJ RSBmb3IgdGhlIHRyYW5zbGF0aW9uCisgICB1bml0IEYgYmVsb25ncyB0by4g IFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGJ5dGUgYWZ0ZXIgdGhlIGF1Z21l bnRhdGlvbiwKKyAgIG9yIE5VTEwgaWYgd2UgZW5jb3VudGVyZWQgYW4gdW5k ZWNpcGhlcmFibGUgYXVnbWVudGF0aW9uLiAgKi8KKworc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgKgorZXh0cmFjdF9jaWVfaW5mbyAoY29uc3Qgc3Ry dWN0IGR3YXJmX2NpZSAqY2llLCBzdHJ1Y3QgX1Vud2luZF9Db250ZXh0ICpj b250ZXh0LAorCQkgIF9VbndpbmRfRnJhbWVTdGF0ZSAqZnMpCit7CisgIGNv bnN0IHVuc2lnbmVkIGNoYXIgKmF1ZyA9IGNpZS0+YXVnbWVudGF0aW9uOwor ICBjb25zdCB1bnNpZ25lZCBjaGFyICpwID0gYXVnICsgc3RybGVuICgoY29u c3QgY2hhciAqKWF1ZykgKyAxOworICBjb25zdCB1bnNpZ25lZCBjaGFyICpy ZXQgPSBOVUxMOworICBfdWxlYjEyOF90IHV0bXA7CisgIF9zbGViMTI4X3Qg c3RtcDsKKworICAvKiBnKysgdjIgImVoIiBoYXMgcG9pbnRlciBpbW1lZGlh dGVseSBmb2xsb3dpbmcgYXVnbWVudGF0aW9uIHN0cmluZywKKyAgICAgc28g aXQgbXVzdCBiZSBoYW5kbGVkIGZpcnN0LiAgKi8KKyAgaWYgKGF1Z1swXSA9 PSAnZScgJiYgYXVnWzFdID09ICdoJykKKyAgICB7CisgICAgICBmcy0+ZWhf cHRyID0gcmVhZF9wb2ludGVyIChwKTsKKyAgICAgIHAgKz0gc2l6ZW9mICh2 b2lkICopOworICAgICAgYXVnICs9IDI7CisgICAgfQorCisgIC8qIEltbWVk aWF0ZWx5IGZvbGxvd2luZyB0aGUgYXVnbWVudGF0aW9uIGFyZSB0aGUgY29k ZSBhbmQKKyAgICAgZGF0YSBhbGlnbm1lbnQgYW5kIHJldHVybiBhZGRyZXNz IGNvbHVtbi4gICovCisgIHAgPSByZWFkX3VsZWIxMjggKHAsICZ1dG1wKTsK KyAgZnMtPmNvZGVfYWxpZ24gPSAoX1Vud2luZF9Xb3JkKXV0bXA7CisgIHAg PSByZWFkX3NsZWIxMjggKHAsICZzdG1wKTsKKyAgZnMtPmRhdGFfYWxpZ24g PSAoX1Vud2luZF9Td29yZClzdG1wOworICBpZiAoY2llLT52ZXJzaW9uID09 IDEpCisgICAgZnMtPnJldGFkZHJfY29sdW1uID0gKnArKzsKKyAgZWxzZQor ICAgIHsKKyAgICAgIHAgPSByZWFkX3VsZWIxMjggKHAsICZ1dG1wKTsKKyAg ICAgIGZzLT5yZXRhZGRyX2NvbHVtbiA9IChfVW53aW5kX1dvcmQpdXRtcDsK KyAgICB9CisgIGZzLT5sc2RhX2VuY29kaW5nID0gRFdfRUhfUEVfb21pdDsK KworICAvKiBJZiB0aGUgYXVnbWVudGF0aW9uIHN0YXJ0cyB3aXRoICd6Jywg dGhlbiBhIHVsZWIxMjggaW1tZWRpYXRlbHkKKyAgICAgZm9sbG93cyBjb250 YWluaW5nIHRoZSBsZW5ndGggb2YgdGhlIGF1Z21lbnRhdGlvbiBmaWVsZCBm b2xsb3dpbmcKKyAgICAgdGhlIHNpemUuICAqLworICBpZiAoKmF1ZyA9PSAn eicpCisgICAgeworICAgICAgcCA9IHJlYWRfdWxlYjEyOCAocCwgJnV0bXAp OworICAgICAgcmV0ID0gcCArIHV0bXA7CisKKyAgICAgIGZzLT5zYXdfeiA9 IDE7CisgICAgICArK2F1ZzsKKyAgICB9CisKKyAgLyogSXRlcmF0ZSBvdmVy IHJlY29nbml6ZWQgYXVnbWVudGF0aW9uIHN1YnNlcXVlbmNlcy4gICovCisg IHdoaWxlICgqYXVnICE9ICdcMCcpCisgICAgeworICAgICAgLyogIkwiIGlu ZGljYXRlcyBhIGJ5dGUgc2hvd2luZyBob3cgdGhlIExTREEgcG9pbnRlciBp cyBlbmNvZGVkLiAgKi8KKyAgICAgIGlmIChhdWdbMF0gPT0gJ0wnKQorCXsK KwkgIGZzLT5sc2RhX2VuY29kaW5nID0gKnArKzsKKwkgIGF1ZyArPSAxOwor CX0KKworICAgICAgLyogIlIiIGluZGljYXRlcyBhIGJ5dGUgaW5kaWNhdGlu ZyBob3cgRkRFIGFkZHJlc3NlcyBhcmUgZW5jb2RlZC4gICovCisgICAgICBl bHNlIGlmIChhdWdbMF0gPT0gJ1InKQorCXsKKwkgIGZzLT5mZGVfZW5jb2Rp bmcgPSAqcCsrOworCSAgYXVnICs9IDE7CisJfQorCisgICAgICAvKiAiUCIg aW5kaWNhdGVzIGEgcGVyc29uYWxpdHkgcm91dGluZSBpbiB0aGUgQ0lFIGF1 Z21lbnRhdGlvbi4gICovCisgICAgICBlbHNlIGlmIChhdWdbMF0gPT0gJ1An KQorCXsKKwkgIF9VbndpbmRfUHRyIHBlcnNvbmFsaXR5OworCisJICBwID0g cmVhZF9lbmNvZGVkX3ZhbHVlIChjb250ZXh0LCAqcCwgcCArIDEsICZwZXJz b25hbGl0eSk7CisJICBmcy0+cGVyc29uYWxpdHkgPSAoX1Vud2luZF9QZXJz b25hbGl0eV9GbikgcGVyc29uYWxpdHk7CisJICBhdWcgKz0gMTsKKwl9CisK KyAgICAgIC8qICJTIiBpbmRpY2F0ZXMgYSBzaWduYWwgZnJhbWUuICAqLwor ICAgICAgZWxzZSBpZiAoYXVnWzBdID09ICdTJykKKwl7CisJICBmcy0+c2ln bmFsX2ZyYW1lID0gMTsKKwkgIGF1ZyArPSAxOworCX0KKworICAgICAgLyog T3RoZXJ3aXNlIHdlIGhhdmUgYW4gdW5rbm93biBhdWdtZW50YXRpb24gc3Ry aW5nLgorCSBCYWlsIHVubGVzcyB3ZSBzYXcgYSAneicgcHJlZml4LiAgKi8K KyAgICAgIGVsc2UKKwlyZXR1cm4gcmV0OworICAgIH0KKworICByZXR1cm4g cmV0ID8gcmV0IDogcDsKK30KKworCisvKiBEZWNvZGUgYSBEV19PUCBzdGFj ayBwcm9ncmFtLiAgUmV0dXJuIHRoZSB0b3Agb2Ygc3RhY2suICBQdXNoIElO SVRJQUwKKyAgIG9udG8gdGhlIHN0YWNrIHRvIHN0YXJ0LiAgKi8KKworc3Rh dGljIF9VbndpbmRfV29yZAorZXhlY3V0ZV9zdGFja19vcCAoY29uc3QgdW5z aWduZWQgY2hhciAqb3BfcHRyLCBjb25zdCB1bnNpZ25lZCBjaGFyICpvcF9l bmQsCisJCSAgc3RydWN0IF9VbndpbmRfQ29udGV4dCAqY29udGV4dCwgX1Vu d2luZF9Xb3JkIGluaXRpYWwpCit7CisgIF9VbndpbmRfV29yZCBzdGFja1s2 NF07CS8qID8/PyBBc3N1bWUgdGhpcyBpcyBlbm91Z2guICAqLworICBpbnQg c3RhY2tfZWx0OworCisgIHN0YWNrWzBdID0gaW5pdGlhbDsKKyAgc3RhY2tf ZWx0ID0gMTsKKworICB3aGlsZSAob3BfcHRyIDwgb3BfZW5kKQorICAgIHsK KyAgICAgIGVudW0gZHdhcmZfbG9jYXRpb25fYXRvbSBvcCA9ICpvcF9wdHIr KzsKKyAgICAgIF9VbndpbmRfV29yZCByZXN1bHQ7CisgICAgICBfdWxlYjEy OF90IHJlZywgdXRtcDsKKyAgICAgIF9zbGViMTI4X3Qgb2Zmc2V0LCBzdG1w OworCisgICAgICBzd2l0Y2ggKG9wKQorCXsKKwljYXNlIERXX09QX2xpdDA6 CisJY2FzZSBEV19PUF9saXQxOgorCWNhc2UgRFdfT1BfbGl0MjoKKwljYXNl IERXX09QX2xpdDM6CisJY2FzZSBEV19PUF9saXQ0OgorCWNhc2UgRFdfT1Bf bGl0NToKKwljYXNlIERXX09QX2xpdDY6CisJY2FzZSBEV19PUF9saXQ3Ogor CWNhc2UgRFdfT1BfbGl0ODoKKwljYXNlIERXX09QX2xpdDk6CisJY2FzZSBE V19PUF9saXQxMDoKKwljYXNlIERXX09QX2xpdDExOgorCWNhc2UgRFdfT1Bf bGl0MTI6CisJY2FzZSBEV19PUF9saXQxMzoKKwljYXNlIERXX09QX2xpdDE0 OgorCWNhc2UgRFdfT1BfbGl0MTU6CisJY2FzZSBEV19PUF9saXQxNjoKKwlj YXNlIERXX09QX2xpdDE3OgorCWNhc2UgRFdfT1BfbGl0MTg6CisJY2FzZSBE V19PUF9saXQxOToKKwljYXNlIERXX09QX2xpdDIwOgorCWNhc2UgRFdfT1Bf bGl0MjE6CisJY2FzZSBEV19PUF9saXQyMjoKKwljYXNlIERXX09QX2xpdDIz OgorCWNhc2UgRFdfT1BfbGl0MjQ6CisJY2FzZSBEV19PUF9saXQyNToKKwlj YXNlIERXX09QX2xpdDI2OgorCWNhc2UgRFdfT1BfbGl0Mjc6CisJY2FzZSBE V19PUF9saXQyODoKKwljYXNlIERXX09QX2xpdDI5OgorCWNhc2UgRFdfT1Bf bGl0MzA6CisJY2FzZSBEV19PUF9saXQzMToKKwkgIHJlc3VsdCA9IG9wIC0g RFdfT1BfbGl0MDsKKwkgIGJyZWFrOworCisJY2FzZSBEV19PUF9hZGRyOgor CSAgcmVzdWx0ID0gKF9VbndpbmRfV29yZCkgKF9VbndpbmRfUHRyKSByZWFk X3BvaW50ZXIgKG9wX3B0cik7CisJICBvcF9wdHIgKz0gc2l6ZW9mICh2b2lk ICopOworCSAgYnJlYWs7CisKKwljYXNlIERXX09QX0dOVV9lbmNvZGVkX2Fk ZHI6CisJICB7CisJICAgIF9VbndpbmRfUHRyIHByZXN1bHQ7CisJICAgIG9w X3B0ciA9IHJlYWRfZW5jb2RlZF92YWx1ZSAoY29udGV4dCwgKm9wX3B0ciwg b3BfcHRyKzEsICZwcmVzdWx0KTsKKwkgICAgcmVzdWx0ID0gcHJlc3VsdDsK KwkgIH0KKwkgIGJyZWFrOworCisJY2FzZSBEV19PUF9jb25zdDF1OgorCSAg cmVzdWx0ID0gcmVhZF8xdSAob3BfcHRyKTsKKwkgIG9wX3B0ciArPSAxOwor CSAgYnJlYWs7CisJY2FzZSBEV19PUF9jb25zdDFzOgorCSAgcmVzdWx0ID0g cmVhZF8xcyAob3BfcHRyKTsKKwkgIG9wX3B0ciArPSAxOworCSAgYnJlYWs7 CisJY2FzZSBEV19PUF9jb25zdDJ1OgorCSAgcmVzdWx0ID0gcmVhZF8ydSAo b3BfcHRyKTsKKwkgIG9wX3B0ciArPSAyOworCSAgYnJlYWs7CisJY2FzZSBE V19PUF9jb25zdDJzOgorCSAgcmVzdWx0ID0gcmVhZF8ycyAob3BfcHRyKTsK KwkgIG9wX3B0ciArPSAyOworCSAgYnJlYWs7CisJY2FzZSBEV19PUF9jb25z dDR1OgorCSAgcmVzdWx0ID0gcmVhZF80dSAob3BfcHRyKTsKKwkgIG9wX3B0 ciArPSA0OworCSAgYnJlYWs7CisJY2FzZSBEV19PUF9jb25zdDRzOgorCSAg cmVzdWx0ID0gcmVhZF80cyAob3BfcHRyKTsKKwkgIG9wX3B0ciArPSA0Owor CSAgYnJlYWs7CisJY2FzZSBEV19PUF9jb25zdDh1OgorCSAgcmVzdWx0ID0g cmVhZF84dSAob3BfcHRyKTsKKwkgIG9wX3B0ciArPSA4OworCSAgYnJlYWs7 CisJY2FzZSBEV19PUF9jb25zdDhzOgorCSAgcmVzdWx0ID0gcmVhZF84cyAo b3BfcHRyKTsKKwkgIG9wX3B0ciArPSA4OworCSAgYnJlYWs7CisJY2FzZSBE V19PUF9jb25zdHU6CisJICBvcF9wdHIgPSByZWFkX3VsZWIxMjggKG9wX3B0 ciwgJnV0bXApOworCSAgcmVzdWx0ID0gKF9VbndpbmRfV29yZCl1dG1wOwor CSAgYnJlYWs7CisJY2FzZSBEV19PUF9jb25zdHM6CisJICBvcF9wdHIgPSBy ZWFkX3NsZWIxMjggKG9wX3B0ciwgJnN0bXApOworCSAgcmVzdWx0ID0gKF9V bndpbmRfU3dvcmQpc3RtcDsKKwkgIGJyZWFrOworCisJY2FzZSBEV19PUF9y ZWcwOgorCWNhc2UgRFdfT1BfcmVnMToKKwljYXNlIERXX09QX3JlZzI6CisJ Y2FzZSBEV19PUF9yZWczOgorCWNhc2UgRFdfT1BfcmVnNDoKKwljYXNlIERX X09QX3JlZzU6CisJY2FzZSBEV19PUF9yZWc2OgorCWNhc2UgRFdfT1BfcmVn NzoKKwljYXNlIERXX09QX3JlZzg6CisJY2FzZSBEV19PUF9yZWc5OgorCWNh c2UgRFdfT1BfcmVnMTA6CisJY2FzZSBEV19PUF9yZWcxMToKKwljYXNlIERX X09QX3JlZzEyOgorCWNhc2UgRFdfT1BfcmVnMTM6CisJY2FzZSBEV19PUF9y ZWcxNDoKKwljYXNlIERXX09QX3JlZzE1OgorCWNhc2UgRFdfT1BfcmVnMTY6 CisJY2FzZSBEV19PUF9yZWcxNzoKKwljYXNlIERXX09QX3JlZzE4OgorCWNh c2UgRFdfT1BfcmVnMTk6CisJY2FzZSBEV19PUF9yZWcyMDoKKwljYXNlIERX X09QX3JlZzIxOgorCWNhc2UgRFdfT1BfcmVnMjI6CisJY2FzZSBEV19PUF9y ZWcyMzoKKwljYXNlIERXX09QX3JlZzI0OgorCWNhc2UgRFdfT1BfcmVnMjU6 CisJY2FzZSBEV19PUF9yZWcyNjoKKwljYXNlIERXX09QX3JlZzI3OgorCWNh c2UgRFdfT1BfcmVnMjg6CisJY2FzZSBEV19PUF9yZWcyOToKKwljYXNlIERX X09QX3JlZzMwOgorCWNhc2UgRFdfT1BfcmVnMzE6CisJICByZXN1bHQgPSBf VW53aW5kX0dldEdSIChjb250ZXh0LCBvcCAtIERXX09QX3JlZzApOworCSAg YnJlYWs7CisJY2FzZSBEV19PUF9yZWd4OgorCSAgb3BfcHRyID0gcmVhZF91 bGViMTI4IChvcF9wdHIsICZyZWcpOworCSAgcmVzdWx0ID0gX1Vud2luZF9H ZXRHUiAoY29udGV4dCwgcmVnKTsKKwkgIGJyZWFrOworCisJY2FzZSBEV19P UF9icmVnMDoKKwljYXNlIERXX09QX2JyZWcxOgorCWNhc2UgRFdfT1BfYnJl ZzI6CisJY2FzZSBEV19PUF9icmVnMzoKKwljYXNlIERXX09QX2JyZWc0Ogor CWNhc2UgRFdfT1BfYnJlZzU6CisJY2FzZSBEV19PUF9icmVnNjoKKwljYXNl IERXX09QX2JyZWc3OgorCWNhc2UgRFdfT1BfYnJlZzg6CisJY2FzZSBEV19P UF9icmVnOToKKwljYXNlIERXX09QX2JyZWcxMDoKKwljYXNlIERXX09QX2Jy ZWcxMToKKwljYXNlIERXX09QX2JyZWcxMjoKKwljYXNlIERXX09QX2JyZWcx MzoKKwljYXNlIERXX09QX2JyZWcxNDoKKwljYXNlIERXX09QX2JyZWcxNToK KwljYXNlIERXX09QX2JyZWcxNjoKKwljYXNlIERXX09QX2JyZWcxNzoKKwlj YXNlIERXX09QX2JyZWcxODoKKwljYXNlIERXX09QX2JyZWcxOToKKwljYXNl IERXX09QX2JyZWcyMDoKKwljYXNlIERXX09QX2JyZWcyMToKKwljYXNlIERX X09QX2JyZWcyMjoKKwljYXNlIERXX09QX2JyZWcyMzoKKwljYXNlIERXX09Q X2JyZWcyNDoKKwljYXNlIERXX09QX2JyZWcyNToKKwljYXNlIERXX09QX2Jy ZWcyNjoKKwljYXNlIERXX09QX2JyZWcyNzoKKwljYXNlIERXX09QX2JyZWcy ODoKKwljYXNlIERXX09QX2JyZWcyOToKKwljYXNlIERXX09QX2JyZWczMDoK KwljYXNlIERXX09QX2JyZWczMToKKwkgIG9wX3B0ciA9IHJlYWRfc2xlYjEy OCAob3BfcHRyLCAmb2Zmc2V0KTsKKwkgIHJlc3VsdCA9IF9VbndpbmRfR2V0 R1IgKGNvbnRleHQsIG9wIC0gRFdfT1BfYnJlZzApICsgb2Zmc2V0OworCSAg YnJlYWs7CisJY2FzZSBEV19PUF9icmVneDoKKwkgIG9wX3B0ciA9IHJlYWRf dWxlYjEyOCAob3BfcHRyLCAmcmVnKTsKKwkgIG9wX3B0ciA9IHJlYWRfc2xl YjEyOCAob3BfcHRyLCAmb2Zmc2V0KTsKKwkgIHJlc3VsdCA9IF9VbndpbmRf R2V0R1IgKGNvbnRleHQsIHJlZykgKyAoX1Vud2luZF9Xb3JkKW9mZnNldDsK KwkgIGJyZWFrOworCisJY2FzZSBEV19PUF9kdXA6CisJICBnY2NfYXNzZXJ0 IChzdGFja19lbHQpOworCSAgcmVzdWx0ID0gc3RhY2tbc3RhY2tfZWx0IC0g MV07CisJICBicmVhazsKKworCWNhc2UgRFdfT1BfZHJvcDoKKwkgIGdjY19h c3NlcnQgKHN0YWNrX2VsdCk7CisJICBzdGFja19lbHQgLT0gMTsKKwkgIGdv dG8gbm9fcHVzaDsKKworCWNhc2UgRFdfT1BfcGljazoKKwkgIG9mZnNldCA9 ICpvcF9wdHIrKzsKKwkgIGdjY19hc3NlcnQgKG9mZnNldCA8IHN0YWNrX2Vs dCAtIDEpOworCSAgcmVzdWx0ID0gc3RhY2tbc3RhY2tfZWx0IC0gMSAtIG9m ZnNldF07CisJICBicmVhazsKKworCWNhc2UgRFdfT1Bfb3ZlcjoKKwkgIGdj Y19hc3NlcnQgKHN0YWNrX2VsdCA+PSAyKTsKKwkgIHJlc3VsdCA9IHN0YWNr W3N0YWNrX2VsdCAtIDJdOworCSAgYnJlYWs7CisKKwljYXNlIERXX09QX3N3 YXA6CisJICB7CisJICAgIF9VbndpbmRfV29yZCB0OworCSAgICBnY2NfYXNz ZXJ0IChzdGFja19lbHQgPj0gMik7CisJICAgIHQgPSBzdGFja1tzdGFja19l bHQgLSAxXTsKKwkgICAgc3RhY2tbc3RhY2tfZWx0IC0gMV0gPSBzdGFja1tz dGFja19lbHQgLSAyXTsKKwkgICAgc3RhY2tbc3RhY2tfZWx0IC0gMl0gPSB0 OworCSAgICBnb3RvIG5vX3B1c2g7CisJICB9CisKKwljYXNlIERXX09QX3Jv dDoKKwkgIHsKKwkgICAgX1Vud2luZF9Xb3JkIHQxLCB0MiwgdDM7CisKKwkg ICAgZ2NjX2Fzc2VydCAoc3RhY2tfZWx0ID49IDMpOworCSAgICB0MSA9IHN0 YWNrW3N0YWNrX2VsdCAtIDFdOworCSAgICB0MiA9IHN0YWNrW3N0YWNrX2Vs dCAtIDJdOworCSAgICB0MyA9IHN0YWNrW3N0YWNrX2VsdCAtIDNdOworCSAg ICBzdGFja1tzdGFja19lbHQgLSAxXSA9IHQyOworCSAgICBzdGFja1tzdGFj a19lbHQgLSAyXSA9IHQzOworCSAgICBzdGFja1tzdGFja19lbHQgLSAzXSA9 IHQxOworCSAgICBnb3RvIG5vX3B1c2g7CisJICB9CisKKwljYXNlIERXX09Q X2RlcmVmOgorCWNhc2UgRFdfT1BfZGVyZWZfc2l6ZToKKwljYXNlIERXX09Q X2FiczoKKwljYXNlIERXX09QX25lZzoKKwljYXNlIERXX09QX25vdDoKKwlj YXNlIERXX09QX3BsdXNfdWNvbnN0OgorCSAgLyogVW5hcnkgb3BlcmF0aW9u cy4gICovCisJICBnY2NfYXNzZXJ0IChzdGFja19lbHQpOworCSAgc3RhY2tf ZWx0IC09IDE7CisKKwkgIHJlc3VsdCA9IHN0YWNrW3N0YWNrX2VsdF07CisK KwkgIHN3aXRjaCAob3ApCisJICAgIHsKKwkgICAgY2FzZSBEV19PUF9kZXJl ZjoKKwkgICAgICB7CisJCXZvaWQgKnB0ciA9ICh2b2lkICopIChfVW53aW5k X1B0cikgcmVzdWx0OworCQlyZXN1bHQgPSAoX1Vud2luZF9QdHIpIHJlYWRf cG9pbnRlciAocHRyKTsKKwkgICAgICB9CisJICAgICAgYnJlYWs7CisKKwkg ICAgY2FzZSBEV19PUF9kZXJlZl9zaXplOgorCSAgICAgIHsKKwkJdm9pZCAq cHRyID0gKHZvaWQgKikgKF9VbndpbmRfUHRyKSByZXN1bHQ7CisJCXN3aXRj aCAoKm9wX3B0cisrKQorCQkgIHsKKwkJICBjYXNlIDE6CisJCSAgICByZXN1 bHQgPSByZWFkXzF1IChwdHIpOworCQkgICAgYnJlYWs7CisJCSAgY2FzZSAy OgorCQkgICAgcmVzdWx0ID0gcmVhZF8ydSAocHRyKTsKKwkJICAgIGJyZWFr OworCQkgIGNhc2UgNDoKKwkJICAgIHJlc3VsdCA9IHJlYWRfNHUgKHB0cik7 CisJCSAgICBicmVhazsKKwkJICBjYXNlIDg6CisJCSAgICByZXN1bHQgPSBy ZWFkXzh1IChwdHIpOworCQkgICAgYnJlYWs7CisJCSAgZGVmYXVsdDoKKwkJ ICAgIGdjY191bnJlYWNoYWJsZSAoKTsKKwkJICB9CisJICAgICAgfQorCSAg ICAgIGJyZWFrOworCisJICAgIGNhc2UgRFdfT1BfYWJzOgorCSAgICAgIGlm ICgoX1Vud2luZF9Td29yZCkgcmVzdWx0IDwgMCkKKwkJcmVzdWx0ID0gLXJl c3VsdDsKKwkgICAgICBicmVhazsKKwkgICAgY2FzZSBEV19PUF9uZWc6CisJ ICAgICAgcmVzdWx0ID0gLXJlc3VsdDsKKwkgICAgICBicmVhazsKKwkgICAg Y2FzZSBEV19PUF9ub3Q6CisJICAgICAgcmVzdWx0ID0gfnJlc3VsdDsKKwkg ICAgICBicmVhazsKKwkgICAgY2FzZSBEV19PUF9wbHVzX3Vjb25zdDoKKwkg ICAgICBvcF9wdHIgPSByZWFkX3VsZWIxMjggKG9wX3B0ciwgJnV0bXApOwor CSAgICAgIHJlc3VsdCArPSAoX1Vud2luZF9Xb3JkKXV0bXA7CisJICAgICAg YnJlYWs7CisKKwkgICAgZGVmYXVsdDoKKwkgICAgICBnY2NfdW5yZWFjaGFi bGUgKCk7CisJICAgIH0KKwkgIGJyZWFrOworCisJY2FzZSBEV19PUF9hbmQ6 CisJY2FzZSBEV19PUF9kaXY6CisJY2FzZSBEV19PUF9taW51czoKKwljYXNl IERXX09QX21vZDoKKwljYXNlIERXX09QX211bDoKKwljYXNlIERXX09QX29y OgorCWNhc2UgRFdfT1BfcGx1czoKKwljYXNlIERXX09QX3NobDoKKwljYXNl IERXX09QX3NocjoKKwljYXNlIERXX09QX3NocmE6CisJY2FzZSBEV19PUF94 b3I6CisJY2FzZSBEV19PUF9sZToKKwljYXNlIERXX09QX2dlOgorCWNhc2Ug RFdfT1BfZXE6CisJY2FzZSBEV19PUF9sdDoKKwljYXNlIERXX09QX2d0Ogor CWNhc2UgRFdfT1BfbmU6CisJICB7CisJICAgIC8qIEJpbmFyeSBvcGVyYXRp b25zLiAgKi8KKwkgICAgX1Vud2luZF9Xb3JkIGZpcnN0LCBzZWNvbmQ7CisJ ICAgIGdjY19hc3NlcnQgKHN0YWNrX2VsdCA+PSAyKTsKKwkgICAgc3RhY2tf ZWx0IC09IDI7CisKKwkgICAgc2Vjb25kID0gc3RhY2tbc3RhY2tfZWx0XTsK KwkgICAgZmlyc3QgPSBzdGFja1tzdGFja19lbHQgKyAxXTsKKworCSAgICBz d2l0Y2ggKG9wKQorCSAgICAgIHsKKwkgICAgICBjYXNlIERXX09QX2FuZDoK KwkJcmVzdWx0ID0gc2Vjb25kICYgZmlyc3Q7CisJCWJyZWFrOworCSAgICAg IGNhc2UgRFdfT1BfZGl2OgorCQlyZXN1bHQgPSAoX1Vud2luZF9Td29yZCkg c2Vjb25kIC8gKF9VbndpbmRfU3dvcmQpIGZpcnN0OworCQlicmVhazsKKwkg ICAgICBjYXNlIERXX09QX21pbnVzOgorCQlyZXN1bHQgPSBzZWNvbmQgLSBm aXJzdDsKKwkJYnJlYWs7CisJICAgICAgY2FzZSBEV19PUF9tb2Q6CisJCXJl c3VsdCA9IHNlY29uZCAlIGZpcnN0OworCQlicmVhazsKKwkgICAgICBjYXNl IERXX09QX211bDoKKwkJcmVzdWx0ID0gc2Vjb25kICogZmlyc3Q7CisJCWJy ZWFrOworCSAgICAgIGNhc2UgRFdfT1Bfb3I6CisJCXJlc3VsdCA9IHNlY29u ZCB8IGZpcnN0OworCQlicmVhazsKKwkgICAgICBjYXNlIERXX09QX3BsdXM6 CisJCXJlc3VsdCA9IHNlY29uZCArIGZpcnN0OworCQlicmVhazsKKwkgICAg ICBjYXNlIERXX09QX3NobDoKKwkJcmVzdWx0ID0gc2Vjb25kIDw8IGZpcnN0 OworCQlicmVhazsKKwkgICAgICBjYXNlIERXX09QX3NocjoKKwkJcmVzdWx0 ID0gc2Vjb25kID4+IGZpcnN0OworCQlicmVhazsKKwkgICAgICBjYXNlIERX X09QX3NocmE6CisJCXJlc3VsdCA9IChfVW53aW5kX1N3b3JkKSBzZWNvbmQg Pj4gZmlyc3Q7CisJCWJyZWFrOworCSAgICAgIGNhc2UgRFdfT1BfeG9yOgor CQlyZXN1bHQgPSBzZWNvbmQgXiBmaXJzdDsKKwkJYnJlYWs7CisJICAgICAg Y2FzZSBEV19PUF9sZToKKwkJcmVzdWx0ID0gKF9VbndpbmRfU3dvcmQpIHNl Y29uZCA8PSAoX1Vud2luZF9Td29yZCkgZmlyc3Q7CisJCWJyZWFrOworCSAg ICAgIGNhc2UgRFdfT1BfZ2U6CisJCXJlc3VsdCA9IChfVW53aW5kX1N3b3Jk KSBzZWNvbmQgPj0gKF9VbndpbmRfU3dvcmQpIGZpcnN0OworCQlicmVhazsK KwkgICAgICBjYXNlIERXX09QX2VxOgorCQlyZXN1bHQgPSAoX1Vud2luZF9T d29yZCkgc2Vjb25kID09IChfVW53aW5kX1N3b3JkKSBmaXJzdDsKKwkJYnJl YWs7CisJICAgICAgY2FzZSBEV19PUF9sdDoKKwkJcmVzdWx0ID0gKF9Vbndp bmRfU3dvcmQpIHNlY29uZCA8IChfVW53aW5kX1N3b3JkKSBmaXJzdDsKKwkJ YnJlYWs7CisJICAgICAgY2FzZSBEV19PUF9ndDoKKwkJcmVzdWx0ID0gKF9V bndpbmRfU3dvcmQpIHNlY29uZCA+IChfVW53aW5kX1N3b3JkKSBmaXJzdDsK KwkJYnJlYWs7CisJICAgICAgY2FzZSBEV19PUF9uZToKKwkJcmVzdWx0ID0g KF9VbndpbmRfU3dvcmQpIHNlY29uZCAhPSAoX1Vud2luZF9Td29yZCkgZmly c3Q7CisJCWJyZWFrOworCisJICAgICAgZGVmYXVsdDoKKwkJZ2NjX3VucmVh Y2hhYmxlICgpOworCSAgICAgIH0KKwkgIH0KKwkgIGJyZWFrOworCisJY2Fz ZSBEV19PUF9za2lwOgorCSAgb2Zmc2V0ID0gcmVhZF8ycyAob3BfcHRyKTsK KwkgIG9wX3B0ciArPSAyOworCSAgb3BfcHRyICs9IG9mZnNldDsKKwkgIGdv dG8gbm9fcHVzaDsKKworCWNhc2UgRFdfT1BfYnJhOgorCSAgZ2NjX2Fzc2Vy dCAoc3RhY2tfZWx0KTsKKwkgIHN0YWNrX2VsdCAtPSAxOworCisJICBvZmZz ZXQgPSByZWFkXzJzIChvcF9wdHIpOworCSAgb3BfcHRyICs9IDI7CisJICBp ZiAoc3RhY2tbc3RhY2tfZWx0XSAhPSAwKQorCSAgICBvcF9wdHIgKz0gb2Zm c2V0OworCSAgZ290byBub19wdXNoOworCisJY2FzZSBEV19PUF9ub3A6CisJ ICBnb3RvIG5vX3B1c2g7CisKKwlkZWZhdWx0OgorCSAgZ2NjX3VucmVhY2hh YmxlICgpOworCX0KKworICAgICAgLyogTW9zdCB0aGluZ3MgcHVzaCBhIHJl c3VsdCB2YWx1ZS4gICovCisgICAgICBnY2NfYXNzZXJ0ICgoc2l6ZV90KSBz dGFja19lbHQgPCBzaXplb2Yoc3RhY2spL3NpemVvZigqc3RhY2spKTsKKyAg ICAgIHN0YWNrW3N0YWNrX2VsdCsrXSA9IHJlc3VsdDsKKyAgICBub19wdXNo OjsKKyAgICB9CisKKyAgLyogV2Ugd2VyZSBleGVjdXRpbmcgdGhpcyBwcm9n cmFtIHRvIGdldCBhIHZhbHVlLiAgSXQgc2hvdWxkIGJlCisgICAgIGF0IHRv cCBvZiBzdGFjay4gICovCisgIGdjY19hc3NlcnQgKHN0YWNrX2VsdCk7Cisg IHN0YWNrX2VsdCAtPSAxOworICByZXR1cm4gc3RhY2tbc3RhY2tfZWx0XTsK K30KKworCisvKiBEZWNvZGUgRFdBUkYgMiBjYWxsIGZyYW1lIGluZm9ybWF0 aW9uLiBUYWtlcyBwb2ludGVycyB0aGUKKyAgIGluc3RydWN0aW9uIHNlcXVl bmNlIHRvIGRlY29kZSwgY3VycmVudCByZWdpc3RlciBpbmZvcm1hdGlvbiBh bmQKKyAgIENJRSBpbmZvLCBhbmQgdGhlIFBDIHJhbmdlIHRvIGV2YWx1YXRl LiAgKi8KKworc3RhdGljIHZvaWQKK2V4ZWN1dGVfY2ZhX3Byb2dyYW0gKGNv bnN0IHVuc2lnbmVkIGNoYXIgKmluc25fcHRyLAorCQkgICAgIGNvbnN0IHVu c2lnbmVkIGNoYXIgKmluc25fZW5kLAorCQkgICAgIHN0cnVjdCBfVW53aW5k X0NvbnRleHQgKmNvbnRleHQsCisJCSAgICAgX1Vud2luZF9GcmFtZVN0YXRl ICpmcykKK3sKKyAgc3RydWN0IGZyYW1lX3N0YXRlX3JlZ19pbmZvICp1bnVz ZWRfcnMgPSBOVUxMOworCisgIC8qIERvbid0IGFsbG93IHJlbWVtYmVyL3Jl c3RvcmUgYmV0d2VlbiBDSUUgYW5kIEZERSBwcm9ncmFtcy4gICovCisgIGZz LT5yZWdzLnByZXYgPSBOVUxMOworCisgIC8qIFRoZSBjb21wYXJpc29uIHdp dGggdGhlIHJldHVybiBhZGRyZXNzIHVzZXMgPCByYXRoZXIgdGhhbiA8PSBi ZWNhdXNlCisgICAgIHdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gdGhlIGVm ZmVjdHMgb2YgY29kZSBiZWZvcmUgdGhlIGNhbGw7IGZvciBhCisgICAgIG5v cmV0dXJuIGZ1bmN0aW9uLCB0aGUgcmV0dXJuIGFkZHJlc3MgbWF5IHBvaW50 IHRvIHVucmVsYXRlZCBjb2RlIHdpdGgKKyAgICAgYSBkaWZmZXJlbnQgc3Rh Y2sgY29uZmlndXJhdGlvbiB0aGF0IHdlIGFyZSBub3QgaW50ZXJlc3RlZCBp bi4gIFdlCisgICAgIGFzc3VtZSB0aGF0IHRoZSBjYWxsIGl0c2VsZiBpcyB1 bndpbmQgaW5mby1uZXV0cmFsOyBpZiBub3QsIG9yIGlmCisgICAgIHRoZXJl IGFyZSBkZWxheSBpbnN0cnVjdGlvbnMgdGhhdCBhZGp1c3QgdGhlIHN0YWNr LCB0aGVzZSBtdXN0IGJlCisgICAgIHJlZmxlY3RlZCBhdCB0aGUgcG9pbnQg aW1tZWRpYXRlbHkgYmVmb3JlIHRoZSBjYWxsIGluc24uCisgICAgIEluIHNp Z25hbCBmcmFtZXMsIHJldHVybiBhZGRyZXNzIGlzIGFmdGVyIGxhc3QgY29t cGxldGVkIGluc3RydWN0aW9uLAorICAgICBzbyB3ZSBhZGQgMSB0byByZXR1 cm4gYWRkcmVzcyB0byBtYWtlIHRoZSBjb21wYXJpc29uIDw9LiAgKi8KKyAg d2hpbGUgKGluc25fcHRyIDwgaW5zbl9lbmQKKwkgJiYgZnMtPnBjIDwgY29u dGV4dC0+cmEgKyBfVW53aW5kX0lzU2lnbmFsRnJhbWUgKGNvbnRleHQpKQor ICAgIHsKKyAgICAgIHVuc2lnbmVkIGNoYXIgaW5zbiA9ICppbnNuX3B0cisr OworICAgICAgX3VsZWIxMjhfdCByZWcsIHV0bXA7CisgICAgICBfc2xlYjEy OF90IG9mZnNldCwgc3RtcDsKKworICAgICAgaWYgKChpbnNuICYgMHhjMCkg PT0gRFdfQ0ZBX2FkdmFuY2VfbG9jKQorCWZzLT5wYyArPSAoaW5zbiAmIDB4 M2YpICogZnMtPmNvZGVfYWxpZ247CisgICAgICBlbHNlIGlmICgoaW5zbiAm IDB4YzApID09IERXX0NGQV9vZmZzZXQpCisJeworCSAgcmVnID0gaW5zbiAm IDB4M2Y7CisJICBpbnNuX3B0ciA9IHJlYWRfdWxlYjEyOCAoaW5zbl9wdHIs ICZ1dG1wKTsKKwkgIG9mZnNldCA9IChfVW53aW5kX1N3b3JkKSB1dG1wICog ZnMtPmRhdGFfYWxpZ247CisJICBmcy0+cmVncy5yZWdbRFdBUkZfUkVHX1RP X1VOV0lORF9DT0xVTU4gKHJlZyldLmhvdworCSAgICA9IFJFR19TQVZFRF9P RkZTRVQ7CisJICBmcy0+cmVncy5yZWdbRFdBUkZfUkVHX1RPX1VOV0lORF9D T0xVTU4gKHJlZyldLmxvYy5vZmZzZXQgPSBvZmZzZXQ7CisJfQorICAgICAg ZWxzZSBpZiAoKGluc24gJiAweGMwKSA9PSBEV19DRkFfcmVzdG9yZSkKKwl7 CisJICByZWcgPSBpbnNuICYgMHgzZjsKKwkgIGZzLT5yZWdzLnJlZ1tEV0FS Rl9SRUdfVE9fVU5XSU5EX0NPTFVNTiAocmVnKV0uaG93ID0gUkVHX1VOU0FW RUQ7CisJfQorICAgICAgZWxzZSBzd2l0Y2ggKGluc24pCisJeworCWNhc2Ug RFdfQ0ZBX3NldF9sb2M6CisJICB7CisJICAgIF9VbndpbmRfUHRyIHBjOwor CisJICAgIGluc25fcHRyID0gcmVhZF9lbmNvZGVkX3ZhbHVlIChjb250ZXh0 LCBmcy0+ZmRlX2VuY29kaW5nLAorCQkJCQkgICBpbnNuX3B0ciwgJnBjKTsK KwkgICAgZnMtPnBjID0gKHZvaWQgKikgcGM7CisJICB9CisJICBicmVhazsK KworCWNhc2UgRFdfQ0ZBX2FkdmFuY2VfbG9jMToKKwkgIGZzLT5wYyArPSBy ZWFkXzF1IChpbnNuX3B0cikgKiBmcy0+Y29kZV9hbGlnbjsKKwkgIGluc25f cHRyICs9IDE7CisJICBicmVhazsKKwljYXNlIERXX0NGQV9hZHZhbmNlX2xv YzI6CisJICBmcy0+cGMgKz0gcmVhZF8ydSAoaW5zbl9wdHIpICogZnMtPmNv ZGVfYWxpZ247CisJICBpbnNuX3B0ciArPSAyOworCSAgYnJlYWs7CisJY2Fz ZSBEV19DRkFfYWR2YW5jZV9sb2M0OgorCSAgZnMtPnBjICs9IHJlYWRfNHUg KGluc25fcHRyKSAqIGZzLT5jb2RlX2FsaWduOworCSAgaW5zbl9wdHIgKz0g NDsKKwkgIGJyZWFrOworCisJY2FzZSBEV19DRkFfb2Zmc2V0X2V4dGVuZGVk OgorCSAgaW5zbl9wdHIgPSByZWFkX3VsZWIxMjggKGluc25fcHRyLCAmcmVn KTsKKwkgIGluc25fcHRyID0gcmVhZF91bGViMTI4IChpbnNuX3B0ciwgJnV0 bXApOworCSAgb2Zmc2V0ID0gKF9VbndpbmRfU3dvcmQpIHV0bXAgKiBmcy0+ ZGF0YV9hbGlnbjsKKwkgIGZzLT5yZWdzLnJlZ1tEV0FSRl9SRUdfVE9fVU5X SU5EX0NPTFVNTiAocmVnKV0uaG93CisJICAgID0gUkVHX1NBVkVEX09GRlNF VDsKKwkgIGZzLT5yZWdzLnJlZ1tEV0FSRl9SRUdfVE9fVU5XSU5EX0NPTFVN TiAocmVnKV0ubG9jLm9mZnNldCA9IG9mZnNldDsKKwkgIGJyZWFrOworCisJ Y2FzZSBEV19DRkFfcmVzdG9yZV9leHRlbmRlZDoKKwkgIGluc25fcHRyID0g cmVhZF91bGViMTI4IChpbnNuX3B0ciwgJnJlZyk7CisJICAvKiBGSVhNRSwg dGhpcyBpcyB3cm9uZzsgdGhlIENJRSBtaWdodCBoYXZlIHNhaWQgdGhhdCB0 aGUKKwkgICAgIHJlZ2lzdGVyIHdhcyBzYXZlZCBzb21ld2hlcmUuICAqLwor CSAgZnMtPnJlZ3MucmVnW0RXQVJGX1JFR19UT19VTldJTkRfQ09MVU1OKHJl ZyldLmhvdyA9IFJFR19VTlNBVkVEOworCSAgYnJlYWs7CisKKwljYXNlIERX X0NGQV9zYW1lX3ZhbHVlOgorCSAgaW5zbl9wdHIgPSByZWFkX3VsZWIxMjgg KGluc25fcHRyLCAmcmVnKTsKKwkgIGZzLT5yZWdzLnJlZ1tEV0FSRl9SRUdf VE9fVU5XSU5EX0NPTFVNTihyZWcpXS5ob3cgPSBSRUdfVU5TQVZFRDsKKwkg IGJyZWFrOworCisJY2FzZSBEV19DRkFfdW5kZWZpbmVkOgorCSAgaW5zbl9w dHIgPSByZWFkX3VsZWIxMjggKGluc25fcHRyLCAmcmVnKTsKKwkgIGZzLT5y ZWdzLnJlZ1tEV0FSRl9SRUdfVE9fVU5XSU5EX0NPTFVNTihyZWcpXS5ob3cg PSBSRUdfVU5ERUZJTkVEOworCSAgYnJlYWs7CisKKwljYXNlIERXX0NGQV9u b3A6CisJICBicmVhazsKKworCWNhc2UgRFdfQ0ZBX3JlZ2lzdGVyOgorCSAg eworCSAgICBfdWxlYjEyOF90IHJlZzI7CisJICAgIGluc25fcHRyID0gcmVh ZF91bGViMTI4IChpbnNuX3B0ciwgJnJlZyk7CisJICAgIGluc25fcHRyID0g cmVhZF91bGViMTI4IChpbnNuX3B0ciwgJnJlZzIpOworCSAgICBmcy0+cmVn cy5yZWdbRFdBUkZfUkVHX1RPX1VOV0lORF9DT0xVTU4gKHJlZyldLmhvdyA9 IFJFR19TQVZFRF9SRUc7CisJICAgIGZzLT5yZWdzLnJlZ1tEV0FSRl9SRUdf VE9fVU5XSU5EX0NPTFVNTiAocmVnKV0ubG9jLnJlZyA9CisJICAgICAgKF9V bndpbmRfV29yZClyZWcyOworCSAgfQorCSAgYnJlYWs7CisKKwljYXNlIERX X0NGQV9yZW1lbWJlcl9zdGF0ZToKKwkgIHsKKwkgICAgc3RydWN0IGZyYW1l X3N0YXRlX3JlZ19pbmZvICpuZXdfcnM7CisJICAgIGlmICh1bnVzZWRfcnMp CisJICAgICAgeworCQluZXdfcnMgPSB1bnVzZWRfcnM7CisJCXVudXNlZF9y cyA9IHVudXNlZF9ycy0+cHJldjsKKwkgICAgICB9CisJICAgIGVsc2UKKwkg ICAgICBuZXdfcnMgPSBhbGxvY2EgKHNpemVvZiAoc3RydWN0IGZyYW1lX3N0 YXRlX3JlZ19pbmZvKSk7CisKKwkgICAgKm5ld19ycyA9IGZzLT5yZWdzOwor CSAgICBmcy0+cmVncy5wcmV2ID0gbmV3X3JzOworCSAgfQorCSAgYnJlYWs7 CisKKwljYXNlIERXX0NGQV9yZXN0b3JlX3N0YXRlOgorCSAgeworCSAgICBz dHJ1Y3QgZnJhbWVfc3RhdGVfcmVnX2luZm8gKm9sZF9ycyA9IGZzLT5yZWdz LnByZXY7CisJICAgIGZzLT5yZWdzID0gKm9sZF9yczsKKwkgICAgb2xkX3Jz LT5wcmV2ID0gdW51c2VkX3JzOworCSAgICB1bnVzZWRfcnMgPSBvbGRfcnM7 CisJICB9CisJICBicmVhazsKKworCWNhc2UgRFdfQ0ZBX2RlZl9jZmE6CisJ ICBpbnNuX3B0ciA9IHJlYWRfdWxlYjEyOCAoaW5zbl9wdHIsICZ1dG1wKTsK KwkgIGZzLT5yZWdzLmNmYV9yZWcgPSAoX1Vud2luZF9Xb3JkKXV0bXA7CisJ ICBpbnNuX3B0ciA9IHJlYWRfdWxlYjEyOCAoaW5zbl9wdHIsICZ1dG1wKTsK KwkgIGZzLT5yZWdzLmNmYV9vZmZzZXQgPSAoX1Vud2luZF9Xb3JkKXV0bXA7 CisJICBmcy0+cmVncy5jZmFfaG93ID0gQ0ZBX1JFR19PRkZTRVQ7CisJICBi cmVhazsKKworCWNhc2UgRFdfQ0ZBX2RlZl9jZmFfcmVnaXN0ZXI6CisJICBp bnNuX3B0ciA9IHJlYWRfdWxlYjEyOCAoaW5zbl9wdHIsICZ1dG1wKTsKKwkg IGZzLT5yZWdzLmNmYV9yZWcgPSAoX1Vud2luZF9Xb3JkKXV0bXA7CisJICBm cy0+cmVncy5jZmFfaG93ID0gQ0ZBX1JFR19PRkZTRVQ7CisJICBicmVhazsK KworCWNhc2UgRFdfQ0ZBX2RlZl9jZmFfb2Zmc2V0OgorCSAgaW5zbl9wdHIg PSByZWFkX3VsZWIxMjggKGluc25fcHRyLCAmdXRtcCk7CisJICBmcy0+cmVn cy5jZmFfb2Zmc2V0ID0gdXRtcDsKKwkgIC8qIGNmYV9ob3cgZGVsaWJlcmF0 ZWx5IG5vdCBzZXQuICAqLworCSAgYnJlYWs7CisKKwljYXNlIERXX0NGQV9k ZWZfY2ZhX2V4cHJlc3Npb246CisJICBmcy0+cmVncy5jZmFfZXhwID0gaW5z bl9wdHI7CisJICBmcy0+cmVncy5jZmFfaG93ID0gQ0ZBX0VYUDsKKwkgIGlu c25fcHRyID0gcmVhZF91bGViMTI4IChpbnNuX3B0ciwgJnV0bXApOworCSAg aW5zbl9wdHIgKz0gdXRtcDsKKwkgIGJyZWFrOworCisJY2FzZSBEV19DRkFf ZXhwcmVzc2lvbjoKKwkgIGluc25fcHRyID0gcmVhZF91bGViMTI4IChpbnNu X3B0ciwgJnJlZyk7CisJICBmcy0+cmVncy5yZWdbRFdBUkZfUkVHX1RPX1VO V0lORF9DT0xVTU4gKHJlZyldLmhvdyA9IFJFR19TQVZFRF9FWFA7CisJICBm cy0+cmVncy5yZWdbRFdBUkZfUkVHX1RPX1VOV0lORF9DT0xVTU4gKHJlZyld LmxvYy5leHAgPSBpbnNuX3B0cjsKKwkgIGluc25fcHRyID0gcmVhZF91bGVi MTI4IChpbnNuX3B0ciwgJnV0bXApOworCSAgaW5zbl9wdHIgKz0gdXRtcDsK KwkgIGJyZWFrOworCisJICAvKiBEd2FyZjMuICAqLworCWNhc2UgRFdfQ0ZB X29mZnNldF9leHRlbmRlZF9zZjoKKwkgIGluc25fcHRyID0gcmVhZF91bGVi MTI4IChpbnNuX3B0ciwgJnJlZyk7CisJICBpbnNuX3B0ciA9IHJlYWRfc2xl YjEyOCAoaW5zbl9wdHIsICZzdG1wKTsKKwkgIG9mZnNldCA9IHN0bXAgKiBm cy0+ZGF0YV9hbGlnbjsKKwkgIGZzLT5yZWdzLnJlZ1tEV0FSRl9SRUdfVE9f VU5XSU5EX0NPTFVNTiAocmVnKV0uaG93CisJICAgID0gUkVHX1NBVkVEX09G RlNFVDsKKwkgIGZzLT5yZWdzLnJlZ1tEV0FSRl9SRUdfVE9fVU5XSU5EX0NP TFVNTiAocmVnKV0ubG9jLm9mZnNldCA9IG9mZnNldDsKKwkgIGJyZWFrOwor CisJY2FzZSBEV19DRkFfZGVmX2NmYV9zZjoKKwkgIGluc25fcHRyID0gcmVh ZF91bGViMTI4IChpbnNuX3B0ciwgJnV0bXApOworCSAgZnMtPnJlZ3MuY2Zh X3JlZyA9IChfVW53aW5kX1dvcmQpdXRtcDsKKwkgIGluc25fcHRyID0gcmVh ZF9zbGViMTI4IChpbnNuX3B0ciwgJnN0bXApOworCSAgZnMtPnJlZ3MuY2Zh X29mZnNldCA9IChfVW53aW5kX1N3b3JkKXN0bXA7CisJICBmcy0+cmVncy5j ZmFfaG93ID0gQ0ZBX1JFR19PRkZTRVQ7CisJICBmcy0+cmVncy5jZmFfb2Zm c2V0ICo9IGZzLT5kYXRhX2FsaWduOworCSAgYnJlYWs7CisKKwljYXNlIERX X0NGQV9kZWZfY2ZhX29mZnNldF9zZjoKKwkgIGluc25fcHRyID0gcmVhZF9z bGViMTI4IChpbnNuX3B0ciwgJnN0bXApOworCSAgZnMtPnJlZ3MuY2ZhX29m ZnNldCA9IChfVW53aW5kX1N3b3JkKXN0bXA7CisJICBmcy0+cmVncy5jZmFf b2Zmc2V0ICo9IGZzLT5kYXRhX2FsaWduOworCSAgLyogY2ZhX2hvdyBkZWxp YmVyYXRlbHkgbm90IHNldC4gICovCisJICBicmVhazsKKworCWNhc2UgRFdf Q0ZBX3ZhbF9vZmZzZXQ6CisJICBpbnNuX3B0ciA9IHJlYWRfdWxlYjEyOCAo aW5zbl9wdHIsICZyZWcpOworCSAgaW5zbl9wdHIgPSByZWFkX3VsZWIxMjgg KGluc25fcHRyLCAmdXRtcCk7CisJICBvZmZzZXQgPSAoX1Vud2luZF9Td29y ZCkgdXRtcCAqIGZzLT5kYXRhX2FsaWduOworCSAgZnMtPnJlZ3MucmVnW0RX QVJGX1JFR19UT19VTldJTkRfQ09MVU1OIChyZWcpXS5ob3cKKwkgICAgPSBS RUdfU0FWRURfVkFMX09GRlNFVDsKKwkgIGZzLT5yZWdzLnJlZ1tEV0FSRl9S RUdfVE9fVU5XSU5EX0NPTFVNTiAocmVnKV0ubG9jLm9mZnNldCA9IG9mZnNl dDsKKwkgIGJyZWFrOworCisJY2FzZSBEV19DRkFfdmFsX29mZnNldF9zZjoK KwkgIGluc25fcHRyID0gcmVhZF91bGViMTI4IChpbnNuX3B0ciwgJnJlZyk7 CisJICBpbnNuX3B0ciA9IHJlYWRfc2xlYjEyOCAoaW5zbl9wdHIsICZzdG1w KTsKKwkgIG9mZnNldCA9IHN0bXAgKiBmcy0+ZGF0YV9hbGlnbjsKKwkgIGZz LT5yZWdzLnJlZ1tEV0FSRl9SRUdfVE9fVU5XSU5EX0NPTFVNTiAocmVnKV0u aG93CisJICAgID0gUkVHX1NBVkVEX1ZBTF9PRkZTRVQ7CisJICBmcy0+cmVn cy5yZWdbRFdBUkZfUkVHX1RPX1VOV0lORF9DT0xVTU4gKHJlZyldLmxvYy5v ZmZzZXQgPSBvZmZzZXQ7CisJICBicmVhazsKKworCWNhc2UgRFdfQ0ZBX3Zh bF9leHByZXNzaW9uOgorCSAgaW5zbl9wdHIgPSByZWFkX3VsZWIxMjggKGlu c25fcHRyLCAmcmVnKTsKKwkgIGZzLT5yZWdzLnJlZ1tEV0FSRl9SRUdfVE9f VU5XSU5EX0NPTFVNTiAocmVnKV0uaG93CisJICAgID0gUkVHX1NBVkVEX1ZB TF9FWFA7CisJICBmcy0+cmVncy5yZWdbRFdBUkZfUkVHX1RPX1VOV0lORF9D T0xVTU4gKHJlZyldLmxvYy5leHAgPSBpbnNuX3B0cjsKKwkgIGluc25fcHRy ID0gcmVhZF91bGViMTI4IChpbnNuX3B0ciwgJnV0bXApOworCSAgaW5zbl9w dHIgKz0gdXRtcDsKKwkgIGJyZWFrOworCisJY2FzZSBEV19DRkFfR05VX3dp bmRvd19zYXZlOgorCSAgLyogPz8/IEhhcmRjb2RlZCBmb3IgU1BBUkMgcmVn aXN0ZXIgd2luZG93IGNvbmZpZ3VyYXRpb24uICAqLworCSAgZm9yIChyZWcg PSAxNjsgcmVnIDwgMzI7ICsrcmVnKQorCSAgICB7CisJICAgICAgZnMtPnJl Z3MucmVnW3JlZ10uaG93ID0gUkVHX1NBVkVEX09GRlNFVDsKKwkgICAgICBm cy0+cmVncy5yZWdbcmVnXS5sb2Mub2Zmc2V0ID0gKHJlZyAtIDE2KSAqIHNp emVvZiAodm9pZCAqKTsKKwkgICAgfQorCSAgYnJlYWs7CisKKwljYXNlIERX X0NGQV9HTlVfYXJnc19zaXplOgorCSAgaW5zbl9wdHIgPSByZWFkX3VsZWIx MjggKGluc25fcHRyLCAmdXRtcCk7CisJICBjb250ZXh0LT5hcmdzX3NpemUg PSAoX1Vud2luZF9Xb3JkKXV0bXA7CisJICBicmVhazsKKworCWNhc2UgRFdf Q0ZBX0dOVV9uZWdhdGl2ZV9vZmZzZXRfZXh0ZW5kZWQ6CisJICAvKiBPYnNv bGV0ZWQgYnkgRFdfQ0ZBX29mZnNldF9leHRlbmRlZF9zZiwgYnV0IHVzZWQg YnkKKwkgICAgIG9sZGVyIFBvd2VyUEMgY29kZS4gICovCisJICBpbnNuX3B0 ciA9IHJlYWRfdWxlYjEyOCAoaW5zbl9wdHIsICZyZWcpOworCSAgaW5zbl9w dHIgPSByZWFkX3VsZWIxMjggKGluc25fcHRyLCAmdXRtcCk7CisJICBvZmZz ZXQgPSAoX1Vud2luZF9Xb3JkKSB1dG1wICogZnMtPmRhdGFfYWxpZ247CisJ ICBmcy0+cmVncy5yZWdbRFdBUkZfUkVHX1RPX1VOV0lORF9DT0xVTU4gKHJl ZyldLmhvdworCSAgICA9IFJFR19TQVZFRF9PRkZTRVQ7CisJICBmcy0+cmVn cy5yZWdbRFdBUkZfUkVHX1RPX1VOV0lORF9DT0xVTU4gKHJlZyldLmxvYy5v ZmZzZXQgPSAtb2Zmc2V0OworCSAgYnJlYWs7CisKKwlkZWZhdWx0OgorCSAg Z2NjX3VucmVhY2hhYmxlICgpOworCX0KKyAgICB9Cit9CisMCisvKiBHaXZl biB0aGUgX1Vud2luZF9Db250ZXh0IENPTlRFWFQgZm9yIGEgc3RhY2sgZnJh bWUsIGxvb2sgdXAgdGhlIEZERSBmb3IKKyAgIGl0cyBjYWxsZXIgYW5kIGRl Y29kZSBpdCBpbnRvIEZTLiAgVGhpcyBmdW5jdGlvbiBhbHNvIHNldHMgdGhl CisgICBhcmdzX3NpemUgYW5kIGxzZGEgbWVtYmVycyBvZiBDT05URVhULCBh cyB0aGV5IGFyZSByZWFsbHkgaW5mb3JtYXRpb24KKyAgIGFib3V0IHRoZSBj YWxsZXIncyBmcmFtZS4gICovCisKK3N0YXRpYyBfVW53aW5kX1JlYXNvbl9D b2RlCit1d19mcmFtZV9zdGF0ZV9mb3IgKHN0cnVjdCBfVW53aW5kX0NvbnRl eHQgKmNvbnRleHQsIF9VbndpbmRfRnJhbWVTdGF0ZSAqZnMpCit7CisgIGNv bnN0IHN0cnVjdCBkd2FyZl9mZGUgKmZkZTsKKyAgY29uc3Qgc3RydWN0IGR3 YXJmX2NpZSAqY2llOworICBjb25zdCB1bnNpZ25lZCBjaGFyICphdWcsICpp bnNuLCAqZW5kOworCisgIG1lbXNldCAoZnMsIDAsIHNpemVvZiAoKmZzKSk7 CisgIGNvbnRleHQtPmFyZ3Nfc2l6ZSA9IDA7CisgIGNvbnRleHQtPmxzZGEg PSAwOworCisgIGlmIChjb250ZXh0LT5yYSA9PSAwKQorICAgIHJldHVybiBf VVJDX0VORF9PRl9TVEFDSzsKKworICBmZGUgPSBfVW53aW5kX0ZpbmRfRkRF IChjb250ZXh0LT5yYSArIF9VbndpbmRfSXNTaWduYWxGcmFtZSAoY29udGV4 dCkgLSAxLAorCQkJICAmY29udGV4dC0+YmFzZXMpOworICBpZiAoZmRlID09 IE5VTEwpCisgICAgeworI2lmZGVmIE1EX0ZBTExCQUNLX0ZSQU1FX1NUQVRF X0ZPUgorICAgICAgLyogQ291bGRuJ3QgZmluZCBmcmFtZSB1bndpbmQgaW5m byBmb3IgdGhpcyBmdW5jdGlvbi4gIFRyeSBhCisJIHRhcmdldC1zcGVjaWZp YyBmYWxsYmFjayBtZWNoYW5pc20uICBUaGlzIHdpbGwgbmVjZXNzYXJpbHkK Kwkgbm90IHByb3ZpZGUgYSBwZXJzb25hbGl0eSByb3V0aW5lIG9yIExTREEu ICAqLworICAgICAgcmV0dXJuIE1EX0ZBTExCQUNLX0ZSQU1FX1NUQVRFX0ZP UiAoY29udGV4dCwgZnMpOworI2Vsc2UKKyAgICAgIHJldHVybiBfVVJDX0VO RF9PRl9TVEFDSzsKKyNlbmRpZgorICAgIH0KKworICBmcy0+cGMgPSBjb250 ZXh0LT5iYXNlcy5mdW5jOworCisgIGNpZSA9IGdldF9jaWUgKGZkZSk7Cisg IGluc24gPSBleHRyYWN0X2NpZV9pbmZvIChjaWUsIGNvbnRleHQsIGZzKTsK KyAgaWYgKGluc24gPT0gTlVMTCkKKyAgICAvKiBDSUUgY29udGFpbmVkIHVu a25vd24gYXVnbWVudGF0aW9uLiAgKi8KKyAgICByZXR1cm4gX1VSQ19GQVRB TF9QSEFTRTFfRVJST1I7CisKKyAgLyogRmlyc3QgZGVjb2RlIGFsbCB0aGUg aW5zbnMgaW4gdGhlIENJRS4gICovCisgIGVuZCA9IChjb25zdCB1bnNpZ25l ZCBjaGFyICopIG5leHRfZmRlICgoY29uc3Qgc3RydWN0IGR3YXJmX2ZkZSAq KSBjaWUpOworICBleGVjdXRlX2NmYV9wcm9ncmFtIChpbnNuLCBlbmQsIGNv bnRleHQsIGZzKTsKKworICAvKiBMb2NhdGUgYXVnbWVudGF0aW9uIGZvciB0 aGUgZmRlLiAgKi8KKyAgYXVnID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikg ZmRlICsgc2l6ZW9mICgqZmRlKTsKKyAgYXVnICs9IDIgKiBzaXplX29mX2Vu Y29kZWRfdmFsdWUgKGZzLT5mZGVfZW5jb2RpbmcpOworICBpbnNuID0gTlVM TDsKKyAgaWYgKGZzLT5zYXdfeikKKyAgICB7CisgICAgICBfdWxlYjEyOF90 IGk7CisgICAgICBhdWcgPSByZWFkX3VsZWIxMjggKGF1ZywgJmkpOworICAg ICAgaW5zbiA9IGF1ZyArIGk7CisgICAgfQorICBpZiAoZnMtPmxzZGFfZW5j b2RpbmcgIT0gRFdfRUhfUEVfb21pdCkKKyAgICB7CisgICAgICBfVW53aW5k X1B0ciBsc2RhOworCisgICAgICBhdWcgPSByZWFkX2VuY29kZWRfdmFsdWUg KGNvbnRleHQsIGZzLT5sc2RhX2VuY29kaW5nLCBhdWcsICZsc2RhKTsKKyAg ICAgIGNvbnRleHQtPmxzZGEgPSAodm9pZCAqKSBsc2RhOworICAgIH0KKwor ICAvKiBUaGVuIHRoZSBpbnNucyBpbiB0aGUgRkRFIHVwIHRvIG91ciB0YXJn ZXQgUEMuICAqLworICBpZiAoaW5zbiA9PSBOVUxMKQorICAgIGluc24gPSBh dWc7CisgIGVuZCA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopIG5leHRfZmRl IChmZGUpOworICBleGVjdXRlX2NmYV9wcm9ncmFtIChpbnNuLCBlbmQsIGNv bnRleHQsIGZzKTsKKworICByZXR1cm4gX1VSQ19OT19SRUFTT047Cit9CisM Cit0eXBlZGVmIHN0cnVjdCBmcmFtZV9zdGF0ZQoreworICB2b2lkICpjZmE7 CisgIHZvaWQgKmVoX3B0cjsKKyAgbG9uZyBjZmFfb2Zmc2V0OworICBsb25n IGFyZ3Nfc2l6ZTsKKyAgbG9uZyByZWdfb3Jfb2Zmc2V0W1BSRV9HQ0MzX0RX QVJGX0ZSQU1FX1JFR0lTVEVSUysxXTsKKyAgdW5zaWduZWQgc2hvcnQgY2Zh X3JlZzsKKyAgdW5zaWduZWQgc2hvcnQgcmV0YWRkcl9jb2x1bW47CisgIGNo YXIgc2F2ZWRbUFJFX0dDQzNfRFdBUkZfRlJBTUVfUkVHSVNURVJTKzFdOwor fSBmcmFtZV9zdGF0ZTsKKworc3RydWN0IGZyYW1lX3N0YXRlICogX19mcmFt ZV9zdGF0ZV9mb3IgKHZvaWQgKiwgc3RydWN0IGZyYW1lX3N0YXRlICopOwor CisvKiBDYWxsZWQgZnJvbSBwcmUtRysrIDMuMCBfX3Rocm93IHRvIGZpbmQg dGhlIHJlZ2lzdGVycyB0byByZXN0b3JlIGZvcgorICAgYSBnaXZlbiBQQ19U QVJHRVQuICBUaGUgY2FsbGVyIHNob3VsZCBhbGxvY2F0ZSBhIGxvY2FsIHZh cmlhYmxlIG9mCisgICBgc3RydWN0IGZyYW1lX3N0YXRlJyBhbmQgcGFzcyBp dHMgYWRkcmVzcyB0byBTVEFURV9JTi4gICovCisKK3N0cnVjdCBmcmFtZV9z dGF0ZSAqCitfX2ZyYW1lX3N0YXRlX2ZvciAodm9pZCAqcGNfdGFyZ2V0LCBz dHJ1Y3QgZnJhbWVfc3RhdGUgKnN0YXRlX2luKQoreworICBzdHJ1Y3QgX1Vu d2luZF9Db250ZXh0IGNvbnRleHQ7CisgIF9VbndpbmRfRnJhbWVTdGF0ZSBm czsKKyAgaW50IHJlZzsKKworICBtZW1zZXQgKCZjb250ZXh0LCAwLCBzaXpl b2YgKHN0cnVjdCBfVW53aW5kX0NvbnRleHQpKTsKKyAgY29udGV4dC5mbGFn cyA9IEVYVEVOREVEX0NPTlRFWFRfQklUOworICBjb250ZXh0LnJhID0gcGNf dGFyZ2V0ICsgMTsKKworICBpZiAodXdfZnJhbWVfc3RhdGVfZm9yICgmY29u dGV4dCwgJmZzKSAhPSBfVVJDX05PX1JFQVNPTikKKyAgICByZXR1cm4gMDsK KworICAvKiBXZSBoYXZlIG5vIHdheSB0byBwYXNzIGEgbG9jYXRpb24gZXhw cmVzc2lvbiBmb3IgdGhlIENGQSB0byBvdXIKKyAgICAgY2FsbGVyLiAgSXQg d291bGRuJ3QgdW5kZXJzdGFuZCBpdCBhbnl3YXkuICAqLworICBpZiAoZnMu cmVncy5jZmFfaG93ID09IENGQV9FWFApCisgICAgcmV0dXJuIDA7CisKKyAg Zm9yIChyZWcgPSAwOyByZWcgPCBQUkVfR0NDM19EV0FSRl9GUkFNRV9SRUdJ U1RFUlMgKyAxOyByZWcrKykKKyAgICB7CisgICAgICBzdGF0ZV9pbi0+c2F2 ZWRbcmVnXSA9IGZzLnJlZ3MucmVnW3JlZ10uaG93OworICAgICAgc3dpdGNo IChzdGF0ZV9pbi0+c2F2ZWRbcmVnXSkKKwl7CisJY2FzZSBSRUdfU0FWRURf UkVHOgorCSAgc3RhdGVfaW4tPnJlZ19vcl9vZmZzZXRbcmVnXSA9IGZzLnJl Z3MucmVnW3JlZ10ubG9jLnJlZzsKKwkgIGJyZWFrOworCWNhc2UgUkVHX1NB VkVEX09GRlNFVDoKKwkgIHN0YXRlX2luLT5yZWdfb3Jfb2Zmc2V0W3JlZ10g PSBmcy5yZWdzLnJlZ1tyZWddLmxvYy5vZmZzZXQ7CisJICBicmVhazsKKwlk ZWZhdWx0OgorCSAgc3RhdGVfaW4tPnJlZ19vcl9vZmZzZXRbcmVnXSA9IDA7 CisJICBicmVhazsKKwl9CisgICAgfQorCisgIHN0YXRlX2luLT5jZmFfb2Zm c2V0ID0gZnMucmVncy5jZmFfb2Zmc2V0OworICBzdGF0ZV9pbi0+Y2ZhX3Jl ZyA9IGZzLnJlZ3MuY2ZhX3JlZzsKKyAgc3RhdGVfaW4tPnJldGFkZHJfY29s dW1uID0gZnMucmV0YWRkcl9jb2x1bW47CisgIHN0YXRlX2luLT5hcmdzX3Np emUgPSBjb250ZXh0LmFyZ3Nfc2l6ZTsKKyAgc3RhdGVfaW4tPmVoX3B0ciA9 IGZzLmVoX3B0cjsKKworICByZXR1cm4gc3RhdGVfaW47Cit9CisMCit0eXBl ZGVmIHVuaW9uIHsgX1Vud2luZF9QdHIgcHRyOyBfVW53aW5kX1dvcmQgd29y ZDsgfSBfVW53aW5kX1NwVG1wOworCitzdGF0aWMgaW5saW5lIHZvaWQKK19V bndpbmRfU2V0U3BDb2x1bW4gKHN0cnVjdCBfVW53aW5kX0NvbnRleHQgKmNv bnRleHQsIHZvaWQgKmNmYSwKKwkJICAgICBfVW53aW5kX1NwVG1wICp0bXBf c3ApCit7CisgIGludCBzaXplID0gZHdhcmZfcmVnX3NpemVfdGFibGVbX19i dWlsdGluX2R3YXJmX3NwX2NvbHVtbiAoKV07CisKKyAgaWYgKHNpemUgPT0g c2l6ZW9mKF9VbndpbmRfUHRyKSkKKyAgICB0bXBfc3AtPnB0ciA9IChfVW53 aW5kX1B0cikgY2ZhOworICBlbHNlCisgICAgeworICAgICAgZ2NjX2Fzc2Vy dCAoc2l6ZSA9PSBzaXplb2YoX1Vud2luZF9Xb3JkKSk7CisgICAgICB0bXBf c3AtPndvcmQgPSAoX1Vud2luZF9QdHIpIGNmYTsKKyAgICB9CisgIF9Vbndp bmRfU2V0R1JQdHIgKGNvbnRleHQsIF9fYnVpbHRpbl9kd2FyZl9zcF9jb2x1 bW4gKCksIHRtcF9zcCk7Cit9CisKK3N0YXRpYyB2b2lkCit1d191cGRhdGVf Y29udGV4dF8xIChzdHJ1Y3QgX1Vud2luZF9Db250ZXh0ICpjb250ZXh0LCBf VW53aW5kX0ZyYW1lU3RhdGUgKmZzKQoreworICBzdHJ1Y3QgX1Vud2luZF9D b250ZXh0IG9yaWdfY29udGV4dCA9ICpjb250ZXh0OworICB2b2lkICpjZmE7 CisgIGxvbmcgaTsKKworI2lmZGVmIEVIX1JFVFVSTl9TVEFDS0FESl9SVFgK KyAgLyogU3BlY2lhbCBoYW5kbGluZyBoZXJlOiBNYW55IG1hY2hpbmVzIGRv IG5vdCB1c2UgYSBmcmFtZSBwb2ludGVyLAorICAgICBhbmQgdHJhY2sgdGhl IENGQSBvbmx5IHRocm91Z2ggb2Zmc2V0cyBmcm9tIHRoZSBzdGFjayBwb2lu dGVyIGZyb20KKyAgICAgb25lIGZyYW1lIHRvIHRoZSBuZXh0LiAgSW4gdGhp cyBjYXNlLCB0aGUgc3RhY2sgcG9pbnRlciBpcyBuZXZlcgorICAgICBzdG9y ZWQsIHNvIGl0IGhhcyBubyBzYXZlZCBhZGRyZXNzIGluIHRoZSBjb250ZXh0 LiAgV2hhdCB3ZSBkbworICAgICBoYXZlIGlzIHRoZSBDRkEgZnJvbSB0aGUg cHJldmlvdXMgc3RhY2sgZnJhbWUuCisKKyAgICAgSW4gdmVyeSBzcGVjaWFs IHNpdHVhdGlvbnMgKHN1Y2ggYXMgdW53aW5kIGluZm8gZm9yIHNpZ25hbCBy ZXR1cm4pLAorICAgICB0aGVyZSBtYXkgYmUgbG9jYXRpb24gZXhwcmVzc2lv bnMgdGhhdCB1c2UgdGhlIHN0YWNrIHBvaW50ZXIgYXMgd2VsbC4KKworICAg ICBEbyB0aGlzIGNvbmRpdGlvbmFsbHkgZm9yIG9uZSBmcmFtZS4gIFRoaXMg YWxsb3dzIHRoZSB1bndpbmQgaW5mbworICAgICBmb3Igb25lIGZyYW1lIHRv IHNhdmUgYSBjb3B5IG9mIHRoZSBzdGFjayBwb2ludGVyIGZyb20gdGhlIHBy ZXZpb3VzCisgICAgIGZyYW1lLCBhbmQgYmUgYWJsZSB0byB1c2UgbXVjaCBl YXNpZXIgQ0ZBIG1lY2hhbmlzbXMgdG8gZG8gaXQuCisgICAgIEFsd2F5cyB6 YXAgdGhlIHNhdmVkIHN0YWNrIHBvaW50ZXIgdmFsdWUgZm9yIHRoZSBuZXh0 IGZyYW1lOyBjYXJyeWluZworICAgICB0aGUgdmFsdWUgb3ZlciBmcm9tIG9u ZSBmcmFtZSB0byBhbm90aGVyIGRvZXNuJ3QgbWFrZSBzZW5zZS4gICovCisK KyAgX1Vud2luZF9TcFRtcCB0bXBfc3A7CisKKyAgaWYgKCFfVW53aW5kX0dl dEdSUHRyICgmb3JpZ19jb250ZXh0LCBfX2J1aWx0aW5fZHdhcmZfc3BfY29s dW1uICgpKSkKKyAgICBfVW53aW5kX1NldFNwQ29sdW1uICgmb3JpZ19jb250 ZXh0LCBjb250ZXh0LT5jZmEsICZ0bXBfc3ApOworICBfVW53aW5kX1NldEdS UHRyIChjb250ZXh0LCBfX2J1aWx0aW5fZHdhcmZfc3BfY29sdW1uICgpLCBO VUxMKTsKKyNlbmRpZgorCisgIC8qIENvbXB1dGUgdGhpcyBmcmFtZSdzIENG QS4gICovCisgIHN3aXRjaCAoZnMtPnJlZ3MuY2ZhX2hvdykKKyAgICB7Cisg ICAgY2FzZSBDRkFfUkVHX09GRlNFVDoKKyAgICAgIGNmYSA9IF9VbndpbmRf R2V0UHRyICgmb3JpZ19jb250ZXh0LCBmcy0+cmVncy5jZmFfcmVnKTsKKyAg ICAgIGNmYSArPSBmcy0+cmVncy5jZmFfb2Zmc2V0OworICAgICAgYnJlYWs7 CisKKyAgICBjYXNlIENGQV9FWFA6CisgICAgICB7CisJY29uc3QgdW5zaWdu ZWQgY2hhciAqZXhwID0gZnMtPnJlZ3MuY2ZhX2V4cDsKKwlfdWxlYjEyOF90 IGxlbjsKKworCWV4cCA9IHJlYWRfdWxlYjEyOCAoZXhwLCAmbGVuKTsKKwlj ZmEgPSAodm9pZCAqKSAoX1Vud2luZF9QdHIpCisJICBleGVjdXRlX3N0YWNr X29wIChleHAsIGV4cCArIGxlbiwgJm9yaWdfY29udGV4dCwgMCk7CisJYnJl YWs7CisgICAgICB9CisKKyAgICBkZWZhdWx0OgorICAgICAgZ2NjX3VucmVh Y2hhYmxlICgpOworICAgIH0KKyAgY29udGV4dC0+Y2ZhID0gY2ZhOworCisg IC8qIENvbXB1dGUgdGhlIGFkZHJlc3NlcyBvZiBhbGwgcmVnaXN0ZXJzIHNh dmVkIGluIHRoaXMgZnJhbWUuICAqLworICBmb3IgKGkgPSAwOyBpIDwgRFdB UkZfRlJBTUVfUkVHSVNURVJTICsgMTsgKytpKQorICAgIHN3aXRjaCAoZnMt PnJlZ3MucmVnW2ldLmhvdykKKyAgICAgIHsKKyAgICAgIGNhc2UgUkVHX1VO U0FWRUQ6CisgICAgICBjYXNlIFJFR19VTkRFRklORUQ6CisJYnJlYWs7CisK KyAgICAgIGNhc2UgUkVHX1NBVkVEX09GRlNFVDoKKwlfVW53aW5kX1NldEdS UHRyIChjb250ZXh0LCBpLAorCQkJICAodm9pZCAqKSAoY2ZhICsgZnMtPnJl Z3MucmVnW2ldLmxvYy5vZmZzZXQpKTsKKwlicmVhazsKKworICAgICAgY2Fz ZSBSRUdfU0FWRURfUkVHOgorCWlmIChfVW53aW5kX0dSQnlWYWx1ZSAoJm9y aWdfY29udGV4dCwgZnMtPnJlZ3MucmVnW2ldLmxvYy5yZWcpKQorCSAgX1Vu d2luZF9TZXRHUlZhbHVlIChjb250ZXh0LCBpLAorCQkJICAgICAgX1Vud2lu ZF9HZXRHUiAoJm9yaWdfY29udGV4dCwKKwkJCQkJICAgICBmcy0+cmVncy5y ZWdbaV0ubG9jLnJlZykpOworCWVsc2UKKwkgIF9VbndpbmRfU2V0R1JQdHIg KGNvbnRleHQsIGksCisJCQkgICAgX1Vud2luZF9HZXRHUlB0ciAoJm9yaWdf Y29udGV4dCwKKwkJCQkJICAgICAgZnMtPnJlZ3MucmVnW2ldLmxvYy5yZWcp KTsKKwlicmVhazsKKworICAgICAgY2FzZSBSRUdfU0FWRURfRVhQOgorCXsK KwkgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmV4cCA9IGZzLT5yZWdzLnJlZ1tp XS5sb2MuZXhwOworCSAgX3VsZWIxMjhfdCBsZW47CisJICBfVW53aW5kX1B0 ciB2YWw7CisKKwkgIGV4cCA9IHJlYWRfdWxlYjEyOCAoZXhwLCAmbGVuKTsK KwkgIHZhbCA9IGV4ZWN1dGVfc3RhY2tfb3AgKGV4cCwgZXhwICsgbGVuLCAm b3JpZ19jb250ZXh0LAorCQkJCSAgKF9VbndpbmRfUHRyKSBjZmEpOworCSAg X1Vud2luZF9TZXRHUlB0ciAoY29udGV4dCwgaSwgKHZvaWQgKikgdmFsKTsK Kwl9CisJYnJlYWs7CisKKyAgICAgIGNhc2UgUkVHX1NBVkVEX1ZBTF9PRkZT RVQ6CisJX1Vud2luZF9TZXRHUlZhbHVlIChjb250ZXh0LCBpLAorCQkJICAg IChfVW53aW5kX0ludGVybmFsX1B0cikKKwkJCSAgICAoY2ZhICsgZnMtPnJl Z3MucmVnW2ldLmxvYy5vZmZzZXQpKTsKKwlicmVhazsKKworICAgICAgY2Fz ZSBSRUdfU0FWRURfVkFMX0VYUDoKKwl7CisJICBjb25zdCB1bnNpZ25lZCBj aGFyICpleHAgPSBmcy0+cmVncy5yZWdbaV0ubG9jLmV4cDsKKwkgIF91bGVi MTI4X3QgbGVuOworCSAgX1Vud2luZF9QdHIgdmFsOworCisJICBleHAgPSBy ZWFkX3VsZWIxMjggKGV4cCwgJmxlbik7CisJICB2YWwgPSBleGVjdXRlX3N0 YWNrX29wIChleHAsIGV4cCArIGxlbiwgJm9yaWdfY29udGV4dCwKKwkJCQkg IChfVW53aW5kX1B0cikgY2ZhKTsKKwkgIF9VbndpbmRfU2V0R1JWYWx1ZSAo Y29udGV4dCwgaSwgdmFsKTsKKwl9CisJYnJlYWs7CisgICAgICB9CisKKyAg X1Vud2luZF9TZXRTaWduYWxGcmFtZSAoY29udGV4dCwgZnMtPnNpZ25hbF9m cmFtZSk7CisKKyNpZmRlZiBNRF9GUk9CX1VQREFURV9DT05URVhUCisgIE1E X0ZST0JfVVBEQVRFX0NPTlRFWFQgKGNvbnRleHQsIGZzKTsKKyNlbmRpZgor fQorCisvKiBDT05URVhUIGRlc2NyaWJlcyB0aGUgdW53aW5kIHN0YXRlIGZv ciBhIGZyYW1lLCBhbmQgRlMgZGVzY3JpYmVzIHRoZSBGREUKKyAgIG9mIGl0 cyBjYWxsZXIuICBVcGRhdGUgQ09OVEVYVCB0byByZWZlciB0byB0aGUgY2Fs bGVyIGFzIHdlbGwuICBOb3RlCisgICB0aGF0IHRoZSBhcmdzX3NpemUgYW5k IGxzZGEgbWVtYmVycyBhcmUgbm90IHVwZGF0ZWQgaGVyZSwgYnV0IGxhdGVy IGluCisgICB1d19mcmFtZV9zdGF0ZV9mb3IuICAqLworCitzdGF0aWMgdm9p ZAordXdfdXBkYXRlX2NvbnRleHQgKHN0cnVjdCBfVW53aW5kX0NvbnRleHQg KmNvbnRleHQsIF9VbndpbmRfRnJhbWVTdGF0ZSAqZnMpCit7CisgIHV3X3Vw ZGF0ZV9jb250ZXh0XzEgKGNvbnRleHQsIGZzKTsKKworICAvKiBJbiBnZW5l cmFsIHRoaXMgdW53aW5kZXIgZG9lc24ndCBtYWtlIGFueSBkaXN0aW5jdGlv biBiZXR3ZWVuCisgICAgIHVuZGVmaW5lZCBhbmQgc2FtZV92YWx1ZSBydWxl LiAgQ2FsbC1zYXZlZCByZWdpc3RlcnMgYXJlIGFzc3VtZWQKKyAgICAgdG8g aGF2ZSBzYW1lX3ZhbHVlIHJ1bGUgYnkgZGVmYXVsdCBhbmQgZXhwbGljaXQg dW5kZWZpbmVkCisgICAgIHJ1bGUgaXMgaGFuZGxlZCBsaWtlIHNhbWVfdmFs dWUuICBUaGUgb25seSBleGNlcHRpb24gaXMKKyAgICAgRFdfQ0ZBX3VuZGVm aW5lZCBvbiByZXRhZGRyX2NvbHVtbiB3aGljaCBpcyBzdXBwb3NlZCB0bwor ICAgICBtYXJrIG91dGVybW9zdCBmcmFtZSBpbiBEV0FSRiAzLiAgKi8KKyAg aWYgKGZzLT5yZWdzLnJlZ1tEV0FSRl9SRUdfVE9fVU5XSU5EX0NPTFVNTiAo ZnMtPnJldGFkZHJfY29sdW1uKV0uaG93CisgICAgICA9PSBSRUdfVU5ERUZJ TkVEKQorICAgIC8qIHV3X2ZyYW1lX3N0YXRlX2ZvciB1c2VzIGNvbnRleHQt PnJhID09IDAgY2hlY2sgdG8gZmluZCBvdXRlcm1vc3QKKyAgICAgICBzdGFj ayBmcmFtZS4gICovCisgICAgY29udGV4dC0+cmEgPSAwOworICBlbHNlCisg ICAgLyogQ29tcHV0ZSB0aGUgcmV0dXJuIGFkZHJlc3Mgbm93LCBzaW5jZSB0 aGUgcmV0dXJuIGFkZHJlc3MgY29sdW1uCisgICAgICAgY2FuIGNoYW5nZSBm cm9tIGZyYW1lIHRvIGZyYW1lLiAgKi8KKyAgICBjb250ZXh0LT5yYSA9IF9f YnVpbHRpbl9leHRyYWN0X3JldHVybl9hZGRyCisgICAgICAoX1Vud2luZF9H ZXRQdHIgKGNvbnRleHQsIGZzLT5yZXRhZGRyX2NvbHVtbikpOworICAgIGNv bnRleHQtPnJhID0gKHZvaWQqKSggKCAodW5zaWduZWQpY29udGV4dC0+cmEg KSA8PCAxICkgOworfQorCitzdGF0aWMgdm9pZAordXdfYWR2YW5jZV9jb250 ZXh0IChzdHJ1Y3QgX1Vud2luZF9Db250ZXh0ICpjb250ZXh0LCBfVW53aW5k X0ZyYW1lU3RhdGUgKmZzKQoreworICB1d191cGRhdGVfY29udGV4dCAoY29u dGV4dCwgZnMpOworfQorDAorLyogRmlsbCBpbiBDT05URVhUIGZvciB0b3At b2Ytc3RhY2suICBUaGUgb25seSB2YWxpZCByZWdpc3RlcnMgYXQgdGhpcwor ICAgbGV2ZWwgd2lsbCBiZSB0aGUgcmV0dXJuIGFkZHJlc3MgYW5kIHRoZSBD RkEuICAqLworCisjZGVmaW5lIHV3X2luaXRfY29udGV4dChDT05URVhUKQkJ CQkJICAgXAorICBkbwkJCQkJCQkJCSAgIFwKKyAgICB7CQkJCQkJCQkJICAg XAorICAgICAgLyogRG8gYW55IG5lY2Vzc2FyeSBpbml0aWFsaXphdGlvbiB0 byBhY2Nlc3MgYXJiaXRyYXJ5IHN0YWNrIGZyYW1lcy4gXAorCSBPbiB0aGUg U1BBUkMsIHRoaXMgbWVhbnMgZmx1c2hpbmcgdGhlIHJlZ2lzdGVyIHdpbmRv d3MuICAqLwkgICBcCisgICAgICBfX2J1aWx0aW5fdW53aW5kX2luaXQgKCk7 CQkJCQkJICAgXAorICAgICAgdXdfaW5pdF9jb250ZXh0XzEgKENPTlRFWFQs IF9fYnVpbHRpbl9kd2FyZl9jZmEgKCksCQkgICBcCisJCQkgX19idWlsdGlu X3JldHVybl9hZGRyZXNzICgwKSk7CQkJICAgXAorICAgIH0JCQkJCQkJCQkg ICBcCisgIHdoaWxlICgwKQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2luaXRf ZHdhcmZfcmVnX3NpemVfdGFibGUgKHZvaWQpCit7CisgIF9fYnVpbHRpbl9p bml0X2R3YXJmX3JlZ19zaXplX3RhYmxlIChkd2FyZl9yZWdfc2l6ZV90YWJs ZSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fYXR0cmlidXRlX18oKG5vaW5saW5l KSkKK3V3X2luaXRfY29udGV4dF8xIChzdHJ1Y3QgX1Vud2luZF9Db250ZXh0 ICpjb250ZXh0LAorCQkgICB2b2lkICpvdXRlcl9jZmEsIHZvaWQgKm91dGVy X3JhKQoreworICB2b2lkICpyYSA9IF9fYnVpbHRpbl9leHRyYWN0X3JldHVy bl9hZGRyIChfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MgKDApKTsKKyAgX1Vu d2luZF9GcmFtZVN0YXRlIGZzOworICBfVW53aW5kX1NwVG1wIHNwX3Nsb3Q7 CisgIF9VbndpbmRfUmVhc29uX0NvZGUgY29kZTsKKworICBtZW1zZXQgKGNv bnRleHQsIDAsIHNpemVvZiAoc3RydWN0IF9VbndpbmRfQ29udGV4dCkpOwor ICBjb250ZXh0LT5yYSA9IHJhOworICBjb250ZXh0LT5mbGFncyA9IEVYVEVO REVEX0NPTlRFWFRfQklUOworCisgIGNvZGUgPSB1d19mcmFtZV9zdGF0ZV9m b3IgKGNvbnRleHQsICZmcyk7CisgIGdjY19hc3NlcnQgKGNvZGUgPT0gX1VS Q19OT19SRUFTT04pOworCisjaWYgX19HVEhSRUFEUworICB7CisgICAgc3Rh dGljIF9fZ3RocmVhZF9vbmNlX3Qgb25jZV9yZWdzaXplcyA9IF9fR1RIUkVB RF9PTkNFX0lOSVQ7CisgICAgaWYgKF9fZ3RocmVhZF9vbmNlICgmb25jZV9y ZWdzaXplcywgaW5pdF9kd2FyZl9yZWdfc2l6ZV90YWJsZSkgIT0gMAorCSYm IGR3YXJmX3JlZ19zaXplX3RhYmxlWzBdID09IDApCisgICAgICBpbml0X2R3 YXJmX3JlZ19zaXplX3RhYmxlICgpOworICB9CisjZWxzZQorICBpZiAoZHdh cmZfcmVnX3NpemVfdGFibGVbMF0gPT0gMCkKKyAgICBpbml0X2R3YXJmX3Jl Z19zaXplX3RhYmxlICgpOworI2VuZGlmCisKKyAgLyogRm9yY2UgdGhlIGZy YW1lIHN0YXRlIHRvIHVzZSB0aGUga25vd24gY2ZhIHZhbHVlLiAgKi8KKyAg X1Vud2luZF9TZXRTcENvbHVtbiAoY29udGV4dCwgb3V0ZXJfY2ZhLCAmc3Bf c2xvdCk7CisgIGZzLnJlZ3MuY2ZhX2hvdyA9IENGQV9SRUdfT0ZGU0VUOwor ICBmcy5yZWdzLmNmYV9yZWcgPSBfX2J1aWx0aW5fZHdhcmZfc3BfY29sdW1u ICgpOworICBmcy5yZWdzLmNmYV9vZmZzZXQgLT0gY29udGV4dC0+YXJnc19z aXplIDsKKyAgdXdfdXBkYXRlX2NvbnRleHRfMSAoY29udGV4dCwgJmZzKTsK KworICAvKiBJZiB0aGUgcmV0dXJuIGFkZHJlc3MgY29sdW1uIHdhcyBzYXZl ZCBpbiBhIHJlZ2lzdGVyIGluIHRoZQorICAgICBpbml0aWFsaXphdGlvbiBj b250ZXh0LCB0aGVuIHdlIGNhbid0IHNlZSBpdCBpbiB0aGUgZ2l2ZW4KKyAg ICAgY2FsbCBmcmFtZSBkYXRhLiAgU28gaGF2ZSB0aGUgaW5pdGlhbGl6YXRp b24gY29udGV4dCB0ZWxsIHVzLiAgKi8KKyAgY29udGV4dC0+cmEgPSBfX2J1 aWx0aW5fZXh0cmFjdF9yZXR1cm5fYWRkciAob3V0ZXJfcmEpOworfQorCitz dGF0aWMgdm9pZCBfVW53aW5kX0RlYnVnSG9vayAodm9pZCAqLCB2b2lkICop CisgIF9fYXR0cmlidXRlX18gKChfX25vaW5saW5lX18sIF9fdXNlZF9fLCBf X25vY2xvbmVfXykpOworCisvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBk dXJpbmcgdW53aW5kaW5nLiAgSXQgaXMgaW50ZW5kZWQgYXMgYSBob29rCisg ICBmb3IgYSBkZWJ1Z2dlciB0byBpbnRlcmNlcHQgZXhjZXB0aW9ucy4gIENG QSBpcyB0aGUgQ0ZBIG9mIHRoZQorICAgdGFyZ2V0IGZyYW1lLiAgSEFORExF UiBpcyB0aGUgUEMgdG8gd2hpY2ggY29udHJvbCB3aWxsIGJlCisgICB0cmFu c2ZlcnJlZC4gICovCitzdGF0aWMgdm9pZAorX1Vud2luZF9EZWJ1Z0hvb2sg KHZvaWQgKmNmYSBfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpLAorCQkg ICB2b2lkICpoYW5kbGVyIF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSkp Cit7CisgIGFzbSAoIiIpOworfQorCisvKiBJbnN0YWxsIFRBUkdFVCBpbnRv IENVUlJFTlQgc28gdGhhdCB3ZSBjYW4gcmV0dXJuIHRvIGl0LiAgVGhpcyBp cyBhCisgICBtYWNybyBiZWNhdXNlIF9fYnVpbHRpbl9laF9yZXR1cm4gbXVz dCBiZSBpbnZva2VkIGluIHRoZSBjb250ZXh0IG9mCisgICBvdXIgY2FsbGVy LiAgKi8KKworCisjZGVmaW5lIHV3X2luc3RhbGxfY29udGV4dChDVVJSRU5U LCBUQVJHRVQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBk byAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisgICAgICBsb25nIG9mZnNldCA9IHV3X2luc3RhbGxf Y29udGV4dF8xICgoQ1VSUkVOVCksIChUQVJHRVQpKTsgICAgICAgICAgXAor ICAgICAgdm9pZCAqaGFuZGxlciA9IF9fYnVpbHRpbl9mcm9iX3JldHVybl9h ZGRyICgoVEFSR0VUKS0+cmEpOyAgICAgICAgIFwKKyAgICAgIGhhbmRsZXIg PSAodm9pZCopKCAoICh1bnNpZ25lZCloYW5kbGVyICkgPj4gMSApIDsgICAg ICAgICAgICAgICAgICBcCisgICAgICBfX2J1aWx0aW5fZWhfcmV0dXJuIChv ZmZzZXQsIGhhbmRsZXIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgd2hpbGUgKDAp CisKKworCitzdGF0aWMgbG9uZwordXdfaW5zdGFsbF9jb250ZXh0XzEgKHN0 cnVjdCBfVW53aW5kX0NvbnRleHQgKmN1cnJlbnQsCisJCSAgICAgIHN0cnVj dCBfVW53aW5kX0NvbnRleHQgKnRhcmdldCkKK3sKKyAgbG9uZyBpOworICBf VW53aW5kX1NwVG1wIHNwX3Nsb3Q7CisKKyAgLyogSWYgdGhlIHRhcmdldCBm cmFtZSBkb2VzIG5vdCBoYXZlIGEgc2F2ZWQgc3RhY2sgcG9pbnRlciwKKyAg ICAgdGhlbiBzZXQgdXAgdGhlIHRhcmdldCdzIENGQS4gICovCisgIGlmICgh X1Vud2luZF9HZXRHUlB0ciAodGFyZ2V0LCBfX2J1aWx0aW5fZHdhcmZfc3Bf Y29sdW1uICgpKSkKKyAgICBfVW53aW5kX1NldFNwQ29sdW1uICh0YXJnZXQs IHRhcmdldC0+Y2ZhLCAmc3Bfc2xvdCk7CisKKyAgZm9yIChpID0gMDsgaSA8 IERXQVJGX0ZSQU1FX1JFR0lTVEVSUzsgKytpKQorICAgIHsKKyAgICAgIHZv aWQgKmMgPSBjdXJyZW50LT5yZWdbaV07CisgICAgICB2b2lkICp0ID0gdGFy Z2V0LT5yZWdbaV07CisKKyAgICAgIGdjY19hc3NlcnQgKGN1cnJlbnQtPmJ5 X3ZhbHVlW2ldID09IDApOworICAgICAgaWYgKHRhcmdldC0+YnlfdmFsdWVb aV0gJiYgYykKKwl7CisJICBfVW53aW5kX1dvcmQgdzsKKwkgIF9VbndpbmRf UHRyIHA7CisJICBpZiAoZHdhcmZfcmVnX3NpemVfdGFibGVbaV0gPT0gc2l6 ZW9mIChfVW53aW5kX1dvcmQpKQorCSAgICB7CisJICAgICAgdyA9IChfVW53 aW5kX0ludGVybmFsX1B0cikgdDsKKwkgICAgICBtZW1jcHkgKGMsICZ3LCBz aXplb2YgKF9VbndpbmRfV29yZCkpOworCSAgICB9CisJICBlbHNlCisJICAg IHsKKwkgICAgICBnY2NfYXNzZXJ0IChkd2FyZl9yZWdfc2l6ZV90YWJsZVtp XSA9PSBzaXplb2YgKF9VbndpbmRfUHRyKSk7CisJICAgICAgcCA9IChfVW53 aW5kX0ludGVybmFsX1B0cikgdDsKKwkgICAgICBtZW1jcHkgKGMsICZwLCBz aXplb2YgKF9VbndpbmRfUHRyKSk7CisJICAgIH0KKwl9CisgICAgICBlbHNl IGlmICh0ICYmIGMgJiYgdCAhPSBjKQorCW1lbWNweSAoYywgdCwgZHdhcmZf cmVnX3NpemVfdGFibGVbaV0pOworICAgIH0KKworICAvKiBJZiB0aGUgY3Vy cmVudCBmcmFtZSBkb2Vzbid0IGhhdmUgYSBzYXZlZCBzdGFjayBwb2ludGVy LCB0aGVuIHdlCisgICAgIG5lZWQgdG8gcmVseSBvbiBFSF9SRVRVUk5fU1RB Q0tBREpfUlRYIHRvIGdldCBvdXIgdGFyZ2V0IHN0YWNrCisgICAgIHBvaW50 ZXIgdmFsdWUgcmVsb2FkZWQuICAqLworICBpZiAoIV9VbndpbmRfR2V0R1JQ dHIgKGN1cnJlbnQsIF9fYnVpbHRpbl9kd2FyZl9zcF9jb2x1bW4gKCkpKQor ICAgIHsKKyAgICAgIHZvaWQgKnRhcmdldF9jZmE7CisKKyAgICAgIHRhcmdl dF9jZmEgPSBfVW53aW5kX0dldFB0ciAodGFyZ2V0LCBfX2J1aWx0aW5fZHdh cmZfc3BfY29sdW1uICgpKTsKKworICAgICAgLyogV2UgYWRqdXN0IFNQIGJ5 IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gQ1VSUkVOVCBhbmQgVEFSR0VUJ3Mg Q0ZBLiAgKi8KKyAgICAgIGlmIChTVEFDS19HUk9XU19ET1dOV0FSRCkKKwly ZXR1cm4gdGFyZ2V0X2NmYSAtIGN1cnJlbnQtPmNmYSArIHRhcmdldC0+YXJn c19zaXplOworICAgICAgZWxzZQorCXJldHVybiBjdXJyZW50LT5jZmEgLSB0 YXJnZXRfY2ZhIC0gdGFyZ2V0LT5hcmdzX3NpemU7CisgICAgfQorICByZXR1 cm4gMDsKK30KKworc3RhdGljIGlubGluZSBfVW53aW5kX1B0cgordXdfaWRl bnRpZnlfY29udGV4dCAoc3RydWN0IF9VbndpbmRfQ29udGV4dCAqY29udGV4 dCkKK3sKKyAgLyogVGhlIENGQSBpcyBub3Qgc3VmZmljaWVudCB0byBkaXNh bWJpZ3VhdGUgdGhlIGNvbnRleHQgb2YgYSBmdW5jdGlvbgorICAgICBpbnRl cnJ1cHRlZCBieSBhIHNpZ25hbCBiZWZvcmUgZXN0YWJsaXNoaW5nIGl0cyBm cmFtZSBhbmQgdGhlIGNvbnRleHQKKyAgICAgb2YgdGhlIHNpZ25hbCBpdHNl bGYuICAqLworICBpZiAoU1RBQ0tfR1JPV1NfRE9XTldBUkQpCisgICAgcmV0 dXJuIF9VbndpbmRfR2V0Q0ZBIChjb250ZXh0KSAtIF9VbndpbmRfSXNTaWdu YWxGcmFtZSAoY29udGV4dCk7CisgIGVsc2UKKyAgICByZXR1cm4gX1Vud2lu ZF9HZXRDRkEgKGNvbnRleHQpICsgX1Vud2luZF9Jc1NpZ25hbEZyYW1lIChj b250ZXh0KTsKK30KKworCisjaW5jbHVkZSAidW53aW5kLmluYyIKKworI2lm IGRlZmluZWQgKFVTRV9HQVNfU1lNVkVSKSAmJiBkZWZpbmVkIChTSEFSRUQp ICYmIGRlZmluZWQgKFVTRV9MSUJVTldJTkRfRVhDRVBUSU9OUykKK2FsaWFz IChfVW53aW5kX0JhY2t0cmFjZSk7CithbGlhcyAoX1Vud2luZF9EZWxldGVF eGNlcHRpb24pOworYWxpYXMgKF9VbndpbmRfRmluZEVuY2xvc2luZ0Z1bmN0 aW9uKTsKK2FsaWFzIChfVW53aW5kX0ZvcmNlZFVud2luZCk7CithbGlhcyAo X1Vud2luZF9HZXREYXRhUmVsQmFzZSk7CithbGlhcyAoX1Vud2luZF9HZXRU ZXh0UmVsQmFzZSk7CithbGlhcyAoX1Vud2luZF9HZXRDRkEpOworYWxpYXMg KF9VbndpbmRfR2V0R1IpOworYWxpYXMgKF9VbndpbmRfR2V0SVApOworYWxp YXMgKF9VbndpbmRfR2V0TGFuZ3VhZ2VTcGVjaWZpY0RhdGEpOworYWxpYXMg KF9VbndpbmRfR2V0UmVnaW9uU3RhcnQpOworYWxpYXMgKF9VbndpbmRfUmFp c2VFeGNlcHRpb24pOworYWxpYXMgKF9VbndpbmRfUmVzdW1lKTsKK2FsaWFz IChfVW53aW5kX1Jlc3VtZV9vcl9SZXRocm93KTsKK2FsaWFzIChfVW53aW5k X1NldEdSKTsKK2FsaWFzIChfVW53aW5kX1NldElQKTsKKyNlbmRpZgorCisj ZW5kaWYgLyogIVVTSU5HX1NKTEpfRVhDRVBUSU9OUyAqLwpkaWZmIC11cHJO IG9yaWcvZ2NjL2NvbmZpZy9jcjE2L3Vud2luZC1kdzIuaCBtb2QvZ2NjL2Nv bmZpZy9jcjE2L3Vud2luZC1kdzIuaAotLS0gb3JpZy9nY2MvY29uZmlnL2Ny MTYvdW53aW5kLWR3Mi5oCTE5NzAtMDEtMDEgMDU6MzA6MDAuMDAwMDAwMDAw ICswNTMwCisrKyBtb2QvZ2NjL2NvbmZpZy9jcjE2L3Vud2luZC1kdzIuaAky MDExLTA1LTIwIDE1OjE3OjEzLjAwMDAwMDAwMCArMDUzMApAQCAtMCwwICsx LDg3IEBACisvKiBEV0FSRjIgZnJhbWUgdW53aW5kIGRhdGEgc3RydWN0dXJl LgorICAgQ29weXJpZ2h0IChDKSAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAy MDAxLCAyMDAyLCAyMDAzLCAyMDA5CisgICBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24sIEluYy4KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgor CisgICBHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQg YnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2 ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2 ZXJzaW9uLgorCisgICBHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m IE1FUkNIQU5UQUJJTElUWQorICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICAg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBVbmRlciBTZWN0aW9u IDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9u YWwKKyAgIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRp bWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKyAgIDMuMSwgYXMgcHVi bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKyAg IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorICAgYSBjb3B5IG9mIHRoZSBH Q0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMg cHJvZ3JhbTsKKyAgIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJ TkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorICAgPGh0 dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyogQSB0YXJn ZXQgY2FuIG92ZXJyaWRlIChwZXJoYXBzIGZvciBiYWNrd2FyZCBjb21wYXRp YmlsaXR5KSBob3cKKyAgIG1hbnkgZHdhcmYyIGNvbHVtbnMgYXJlIHVud291 bmQuICAqLworI2lmbmRlZiBEV0FSRl9GUkFNRV9SRUdJU1RFUlMKKyNkZWZp bmUgRFdBUkZfRlJBTUVfUkVHSVNURVJTIEZJUlNUX1BTRVVET19SRUdJU1RF UgorI2VuZGlmCisKKy8qIFRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRo ZSBmcmFtZSB1bndpbmQgaW5mbyBmb3IgYSBmcmFtZS4KKyAgIFRoaXMgaXMg YWxsIHN5bWJvbGljIGF0IHRoaXMgcG9pbnQsIGFzIG5vbmUgb2YgdGhlIHZh bHVlcyBjYW4KKyAgIGJlIHJlc29sdmVkIHVudGlsIHRoZSB0YXJnZXQgcGMg aXMgbG9jYXRlZC4gICovCit0eXBlZGVmIHN0cnVjdAoreworICAvKiBFYWNo IHJlZ2lzdGVyIHNhdmUgc3RhdGUgY2FuIGJlIGRlc2NyaWJlZCBpbiB0ZXJt cyBvZiBhIENGQSBzbG90LAorICAgICBhbm90aGVyIHJlZ2lzdGVyLCBvciBh IGxvY2F0aW9uIGV4cHJlc3Npb24uICAqLworICBzdHJ1Y3QgZnJhbWVfc3Rh dGVfcmVnX2luZm8KKyAgeworICAgIHN0cnVjdCB7CisgICAgICB1bmlvbiB7 CisJX1Vud2luZF9Xb3JkIHJlZzsKKwlfVW53aW5kX1N3b3JkIG9mZnNldDsK Kwljb25zdCB1bnNpZ25lZCBjaGFyICpleHA7CisgICAgICB9IGxvYzsKKyAg ICAgIGVudW0geworCVJFR19VTlNBVkVELAorCVJFR19TQVZFRF9PRkZTRVQs CisJUkVHX1NBVkVEX1JFRywKKwlSRUdfU0FWRURfRVhQLAorCVJFR19TQVZF RF9WQUxfT0ZGU0VULAorCVJFR19TQVZFRF9WQUxfRVhQLAorCVJFR19VTkRF RklORUQKKyAgICAgIH0gaG93OworICAgIH0gcmVnW0RXQVJGX0ZSQU1FX1JF R0lTVEVSUysxXTsKKworICAgIC8qIFVzZWQgdG8gaW1wbGVtZW50IERXX0NG QV9yZW1lbWJlcl9zdGF0ZS4gICovCisgICAgc3RydWN0IGZyYW1lX3N0YXRl X3JlZ19pbmZvICpwcmV2OworCisgICAgLyogVGhlIENGQSBjYW4gYmUgZGVz Y3JpYmVkIGluIHRlcm1zIG9mIGEgcmVnK29mZnNldCBvciBhCisgICAgICAg bG9jYXRpb24gZXhwcmVzc2lvbi4gICovCisgICAgX1Vud2luZF9Td29yZCBj ZmFfb2Zmc2V0OworICAgIF9VbndpbmRfV29yZCBjZmFfcmVnOworICAgIGNv bnN0IHVuc2lnbmVkIGNoYXIgKmNmYV9leHA7CisgICAgZW51bSB7CisgICAg ICBDRkFfVU5TRVQsCisgICAgICBDRkFfUkVHX09GRlNFVCwKKyAgICAgIENG QV9FWFAKKyAgICB9IGNmYV9ob3c7CisgIH0gcmVnczsKKworICAvKiBUaGUg UEMgZGVzY3JpYmVkIGJ5IHRoZSBjdXJyZW50IGZyYW1lIHN0YXRlLiAgKi8K KyAgdm9pZCAqcGM7CisKKyAgLyogVGhlIGluZm9ybWF0aW9uIHdlIGNhcmUg YWJvdXQgZnJvbSB0aGUgQ0lFL0ZERS4gICovCisgIF9VbndpbmRfUGVyc29u YWxpdHlfRm4gcGVyc29uYWxpdHk7CisgIF9VbndpbmRfU3dvcmQgZGF0YV9h bGlnbjsKKyAgX1Vud2luZF9Xb3JkIGNvZGVfYWxpZ247CisgIF9VbndpbmRf V29yZCByZXRhZGRyX2NvbHVtbjsKKyAgdW5zaWduZWQgY2hhciBmZGVfZW5j b2Rpbmc7CisgIHVuc2lnbmVkIGNoYXIgbHNkYV9lbmNvZGluZzsKKyAgdW5z aWduZWQgY2hhciBzYXdfejsKKyAgdW5zaWduZWQgY2hhciBzaWduYWxfZnJh bWU7CisgIHZvaWQgKmVoX3B0cjsKK30gX1Vud2luZF9GcmFtZVN0YXRlOwor CmRpZmYgLXVwck4gb3JpZy9nY2MvY29uZmlnLmdjYyBtb2QvZ2NjL2NvbmZp Zy5nY2MKLS0tIG9yaWcvZ2NjL2NvbmZpZy5nY2MJMjAxMS0wNS0xMCAyMjox MDo1NS4wMDAwMDAwMDAgKzA1MzAKKysrIG1vZC9nY2MvY29uZmlnLmdjYwky MDExLTA1LTIwIDE1OjE3OjMyLjAwMDAwMDAwMCArMDUzMApAQCAtOTI2LDYg KzkyNiwxMiBAQCBiZmluKi0qKQogCXVzZV9jb2xsZWN0Mj1ubwogCXVzZV9n Y2Nfc3RkaW50PXdyYXAKIAk7OworY3IxNi0qLWVsZikKKyAgICAgICAgdG1f ZmlsZT0iZWxmb3MuaCAke3RtX2ZpbGV9IgorICAgICAgICB0bWFrZV9maWxl PSIke3RtYWtlX2ZpbGV9IGNyMTYvdC1jcjE2ICIKKyAgICAgICAgZXh0cmFf cGFydHM9ImNydGJlZ2luLm8gY3J0ZW5kLm8gY3J0aS5vIGNydG4ubyBjcnRs aWJpZC5vIgorICAgICAgICB1c2VfY29sbGVjdDI9bm8KKyAgICAgICAgOzsK IGNyaXN2MzItKi1lbGYgfCBjcmlzdjMyLSotbm9uZSkKIAl0bV9maWxlPSJk YnhlbGYuaCBlbGZvcy5oIG5ld2xpYi1zdGRpbnQuaCAke3RtX2ZpbGV9Igog CXRtYWtlX2ZpbGU9ImNyaXMvdC1jcmlzIgpkaWZmIC11cHJOIG9yaWcvZ2Nj L2RvYy9leHRlbmQudGV4aSBtb2QvZ2NjL2RvYy9leHRlbmQudGV4aQotLS0g b3JpZy9nY2MvZG9jL2V4dGVuZC50ZXhpCTIwMTEtMDUtMDUgMDU6MDQ6Mzcu MDAwMDAwMDAwICswNTMwCisrKyBtb2QvZ2NjL2RvYy9leHRlbmQudGV4aQky MDExLTA1LTIwIDE1OjE3OjM1LjAwMDAwMDAwMCArMDUzMApAQCAtMjU1MSw3 ICsyNTUxLDcgQEAgVGhpcyBhdHRyaWJ1dGUgaXMgaWdub3JlZCBmb3IgUjhD IHRhcmdldAogCiBAaXRlbSBpbnRlcnJ1cHQKIEBjaW5kZXggaW50ZXJydXB0 IGhhbmRsZXIgZnVuY3Rpb25zCi1Vc2UgdGhpcyBhdHRyaWJ1dGUgb24gdGhl IEFSTSwgQVZSLCBNMzJDLCBNMzJSL0QsIG02OGssIE1lUCwgTUlQUywKK1Vz ZSB0aGlzIGF0dHJpYnV0ZSBvbiB0aGUgQVJNLCBBVlIsIENSMTYsIE0zMkMs IE0zMlIvRCwgbTY4aywgTWVQLCBNSVBTLAogUlggYW5kIFhzdG9ybXkxNiBw b3J0cyB0byBpbmRpY2F0ZSB0aGF0IHRoZSBzcGVjaWZpZWQgZnVuY3Rpb24g aXMgYW4KIGludGVycnVwdCBoYW5kbGVyLiAgVGhlIGNvbXBpbGVyIHdpbGwg Z2VuZXJhdGUgZnVuY3Rpb24gZW50cnkgYW5kIGV4aXQKIHNlcXVlbmNlcyBz dWl0YWJsZSBmb3IgdXNlIGluIGFuIGludGVycnVwdCBoYW5kbGVyIHdoZW4g dGhpcyBhdHRyaWJ1dGUKZGlmZiAtdXByTiBvcmlnL2djYy9kb2MvaW5zdGFs bC50ZXhpIG1vZC9nY2MvZG9jL2luc3RhbGwudGV4aQotLS0gb3JpZy9nY2Mv ZG9jL2luc3RhbGwudGV4aQkyMDExLTA1LTExIDIzOjU4OjE0LjAwMDAwMDAw MCArMDUzMAorKysgbW9kL2djYy9kb2MvaW5zdGFsbC50ZXhpCTIwMTEtMDUt MjAgMTU6MTc6MzYuMDAwMDAwMDAwICswNTMwCkBAIC0zMjA1LDYgKzMyMDUs MjkgQEAgaXMgYXZhaWxhYmxlIGF0IEB1cmVme2h0dHA6Ly9ibGFja2Zpbi51 YwogQGh0bWwKIDxociAvPgogQGVuZCBodG1sCitAaGVhZGluZyBAYW5jaG9y e2NyMTZ9Q1IxNgorCitUaGUgQ1IxNiBDb21wYWN0UklTQyBhcmNoaXRlY3R1 cmUgaXMgYSAxNi1iaXQgYXJjaGl0ZWN0dXJlLiBUaGlzIGFyY2hpdGVjdHVy ZSBpcyAKK3VzZWQgaW4gZW1iZWRkZWQgYXBwbGljYXRpb25zLgorCitAaWZu b3RodG1sCitAeHJlZntDUjE2IE9wdGlvbnMsLCBDUjE2IE9wdGlvbnMsIGdj YywgVXNpbmcgYW5kIFBvcnRpbmcgdGhlIEdOVSBDb21waWxlcgorQ29sbGVj dGlvbiAoR0NDKX0sCitAZW5kIGlmbm90aHRtbAorCitAaWZodG1sCitTZWUg YGBDUjE2IE9wdGlvbnMnJyBpbiB0aGUgbWFpbiBtYW51YWwgZm9yIGEgbGlz dCBvZiBDUjE2LXNwZWNpZmljIG9wdGlvbnMuCitAZW5kIGlmaHRtbAorCitV c2UgQHNhbXB7Y29uZmlndXJlIC0tdGFyZ2V0PWNyMTYtZWxmIC0tZW5hYmxl LWxhbmd1YWdlcz1jLGMrK30gdG8gY29uZmlndXJlCitHQ0NAIGZvciBidWls ZGluZyBhIENSMTYgZWxmIGNyb3NzLWNvbXBpbGVyLgorCitVc2UgQHNhbXB7 Y29uZmlndXJlIC0tdGFyZ2V0PWNyMTYtdWNsaW51eCAtLWVuYWJsZS1sYW5n dWFnZXM9YyxjKyt9IHRvIGNvbmZpZ3VyZQorR0NDQCBmb3IgYnVpbGRpbmcg YSBDUjE2IHVjbGludXggY3Jvc3MtY29tcGlsZXIuCisKK0BodG1sCis8aHIg Lz4KK0BlbmQgaHRtbAogQGhlYWRpbmcgQGFuY2hvcntjcmlzfUNSSVMKIAog Q1JJUyBpcyB0aGUgQ1BVIGFyY2hpdGVjdHVyZSBpbiBBeGlzIENvbW11bmlj YXRpb25zIEVUUkFYIHN5c3RlbS1vbi1hLWNoaXAKZGlmZiAtdXByTiBvcmln L2djYy9kb2MvaW52b2tlLnRleGkgbW9kL2djYy9kb2MvaW52b2tlLnRleGkK LS0tIG9yaWcvZ2NjL2RvYy9pbnZva2UudGV4aQkyMDExLTA1LTE0IDE1OjA5 OjM4LjAwMDAwMDAwMCArMDUzMAorKysgbW9kL2djYy9kb2MvaW52b2tlLnRl eGkJMjAxMS0wNS0yMCAxNToxNzozNi4wMDAwMDAwMDAgKzA1MzAKQEAgLTQ5 Nyw2ICs0OTcsMTIgQEAgT2JqZWN0aXZlLUMgYW5kIE9iamVjdGl2ZS1DKysg RGlhbGVjdHN9LgogLW1lbGYgIC1tYW91dCAgLW1lbGludXggIC1tbGludXgg IC1zaW0gIC1zaW0yIEBnb2wKIC1tbXVsLWJ1Zy13b3JrYXJvdW5kICAtbW5v LW11bC1idWctd29ya2Fyb3VuZH0KIAorQGVtcGh7Q1IxNiBPcHRpb25zfQor QGdjY29wdGxpc3R7LW1tYWMgQGdvbAorLW1jcjE2Y3BsdXMgLW1jcjE2YyBA Z29sCistbXNpbSAtbWludDMyIC1tYml0LW9wcworLW1kYXRhLW1vZGVsPUB2 YXJ7bW9kZWx9fQorCiBAZW1waHtEYXJ3aW4gT3B0aW9uc30KIEBnY2NvcHRs aXN0ey1hbGxfbG9hZCAgLWFsbG93YWJsZV9jbGllbnQgIC1hcmNoICAtYXJj aF9lcnJvcnNfZmF0YWwgQGdvbAogLWFyY2hfb25seSAgLWJpbmRfYXRfbG9h ZCAgLWJ1bmRsZSAgLWJ1bmRsZV9sb2FkZXIgQGdvbApAQCAtOTk1MSw2ICs5 OTU3LDcgQEAgcGxhdGZvcm0uCiAqIEFWUiBPcHRpb25zOjoKICogQmxhY2tm aW4gT3B0aW9uczo6CiAqIENSSVMgT3B0aW9uczo6CisqIENSMTYgT3B0aW9u czo6CiAqIERhcndpbiBPcHRpb25zOjoKICogREVDIEFscGhhIE9wdGlvbnM6 OgogKiBERUMgQWxwaGEvVk1TIE9wdGlvbnM6OgpAQCAtMTA3MjYsNiArMTA3 MzMsNDYgQEAgTGlrZSBAb3B0aW9uey1zaW19LCBidXQgcGFzcyBsaW5rZXIg b3B0aQogMHg0MDAwMDAwMCBhbmQgemVyby1pbml0aWFsaXplZCBkYXRhIGF0 IDB4ODAwMDAwMDAuCiBAZW5kIHRhYmxlCiAKK0Bub2RlIENSMTYgT3B0aW9u cworQHN1YnNlY3Rpb24gQ1IxNiBPcHRpb25zCitAY2luZGV4IENSMTYgT3B0 aW9ucworCitUaGVzZSBvcHRpb25zIGFyZSBkZWZpbmVkIHNwZWNpZmljYWxs eSBmb3IgdGhlIENSMTYgcG9ydHMuCisKK0B0YWJsZSBAZ2NjdGFib3B0CisK K0BpdGVtIC1tbWFjCitAb3BpbmRleCBtbWFjCitFbmFibGUgdGhlIHVzZSBv ZiBtdWx0aXBseS1hY2N1bXVsYXRlIGluc3RydWN0aW9ucy4gRGlzYWJsZWQg YnkgZGVmYXVsdC4KKworQGl0ZW0gLW1jcjE2Y3BsdXMKK0BpdGVteCAtbWNy MTZjCitAb3BpbmRleCBtY3IxNmNwbHVzCitAb3BpbmRleCBtY3IxNmMKK0dl bmVyYXRlIGNvZGUgZm9yIENSMTZDIG9yIENSMTZDKyBhcmNoaXRlY3R1cmUu IENSMTZDKyBhcmNoaXRlY3R1cmUgCitpcyBkZWZhdWx0LgorCitAaXRlbSAt bXNpbQorQG9waW5kZXggbXNpbQorTGlua3MgdGhlIGxpYnJhcnkgbGlic2lt LmEgd2hpY2ggaXMgaW4gY29tcGF0aWJsZSB3aXRoIHNpbXVsYXRvci4gQXBw bGljYWJsZQordG8gZWxmIGNvbXBpbGVyIG9ubHkuCisKK0BpdGVtIC1taW50 MzIKK0BvcGluZGV4IG1pbnQzMgorQ2hvb3NlIGludGVnZXIgdHlwZSBhcyAz Mi1iaXQgd2lkZS4KKworQGl0ZW0gLW1iaXQtb3BzCitAb3BpbmRleCBtYml0 LW9wcworR2VuZXJhdGVzIHNiaXQvY2JpdCBpbnN0cnVjdGlvbnMgZm9yIGJp dCBtYW5pcHVsYXRpb25zLgorCitAaXRlbSAtbWRhdGEtbW9kZWw9QHZhcntt b2RlbH0KK0BvcGluZGV4IG1kYXRhLW1vZGVsCitDaG9vc2UgYSBkYXRhIG1v ZGVsLiBUaGUgY2hvaWNlcyBmb3IgQHZhcnttb2RlbH0gYXJlIEBzYW1we25l YXJ9LAorQHNhbXB7ZmFyfSBvciBAc2FtcHttZWRpdW19LiBAc2FtcHttZWRp dW19IGlzIGRlZmF1bHQuCitIb3dldmVyLCBAc2FtcHtmYXJ9IGlzIG5vdCB2 YWxpZCB3aGVuIC1tY3IxNmMgb3B0aW9uIGlzIGNob3NlbiBhcworQ1IxNkMg YXJjaGl0ZWN0dXJlIGRvZXMgbm90IHN1cHBvcnQgZmFyIGRhdGEgbW9kZWwu CitAZW5kIHRhYmxlCisKIEBub2RlIERhcndpbiBPcHRpb25zCiBAc3Vic2Vj dGlvbiBEYXJ3aW4gT3B0aW9ucwogQGNpbmRleCBEYXJ3aW4gb3B0aW9ucwpk aWZmIC11cHJOIG9yaWcvZ2NjL2RvYy9tZC50ZXhpIG1vZC9nY2MvZG9jL21k LnRleGkKLS0tIG9yaWcvZ2NjL2RvYy9tZC50ZXhpCTIwMTEtMDUtMDUgMDU6 MDQ6MzcuMDAwMDAwMDAwICswNTMwCisrKyBtb2QvZ2NjL2RvYy9tZC50ZXhp CTIwMTEtMDUtMjAgMTU6MTc6MzYuMDAwMDAwMDAwICswNTMwCkBAIC0xNzc1 LDYgKzE3NzUsNDAgQEAgSW50ZWdlciBjb25zdGFudCBpbiB0aGUgcmFuZ2Ug QG1pbnVze302IAogQSBtZW1vcnkgYWRkcmVzcyBiYXNlZCBvbiBZIG9yIFog cG9pbnRlciB3aXRoIGRpc3BsYWNlbWVudC4KIEBlbmQgdGFibGUKIAorQGl0 ZW0gQ1IxNiBBcmNoaXRlY3R1cmUtLS1AZmlsZXtjb25maWcvY3IxNi9jcjE2 Lmh9CitAdGFibGUgQGNvZGUKKworQGl0ZW0gYgorUmVnaXN0ZXJzIGZyb20g cjAgdG8gcjE0IChyZWdpc3RlcnMgd2l0aG91dCBzdGFjayBwb2ludGVyKQor CitAaXRlbSB0CitSZWdpc3RlciBmcm9tIHIwIHRvIHIxMSAoYWxsIDE2LWJp dCByZWdpc3RlcnMpCisKK0BpdGVtIHAKK1JlZ2lzdGVyIGZyb20gcjEyIHRv IHIxNSAoYWxsIDMyLWJpdCByZWdpc3RlcnMpCisKK0BpdGVtIEkKK1NpZ25l ZCBjb25zdGFudCB0aGF0IGZpdHMgaW4gNCBiaXRzCisKK0BpdGVtIEoKK1Np Z25lZCBjb25zdGFudCB0aGF0IGZpdHMgaW4gNSBiaXRzCisKK0BpdGVtIEsK K1NpZ25lZCBjb25zdGFudCB0aGF0IGZpdHMgaW4gNiBiaXRzCisKK0BpdGVt IEwKK1Vuc2lnbmVkIGNvbnN0YW50IHRoYXQgZml0cyBpbiA0IGJpdHMKKwor QGl0ZW0gTQorU2lnbmVkIGNvbnN0YW50IHRoYXQgZml0cyBpbiAzMiBiaXRz CisKK0BpdGVtIE4KK0NoZWNrIGZvciA2NCBiaXRzIHdpZGUgY29uc3RhbnRz IGZvciBhZGQvc3ViIGluc3RydWN0aW9ucworCitAaXRlbSBHCitGbG9hdGlu ZyBwb2ludCBjb25zdGFudCB0aGF0IGlzIGxlZ2FsIGZvciBzdG9yZSBpbW1l ZGlhdGUKK0BlbmQgdGFibGUKKwogQGl0ZW0gSGV3bGV0dC1QYWNrYXJkIFBB LVJJU0MtLS1AZmlsZXtjb25maWcvcGEvcGEuaH0KIEB0YWJsZSBAY29kZQog QGl0ZW0gYQpkaWZmIC11cHJOIG9yaWcvbGliZ2NjL2NvbmZpZy9jcjE2L2Ny dGkuUyBtb2QvbGliZ2NjL2NvbmZpZy9jcjE2L2NydGkuUwotLS0gb3JpZy9s aWJnY2MvY29uZmlnL2NyMTYvY3J0aS5TCTE5NzAtMDEtMDEgMDU6MzA6MDAu MDAwMDAwMDAwICswNTMwCisrKyBtb2QvbGliZ2NjL2NvbmZpZy9jcjE2L2Ny dGkuUwkyMDExLTA1LTIwIDE2OjQwOjMyLjAwMDAwMDAwMCArMDUzMApAQCAt MCwwICsxLDU0IEBACisjIFNwZWNpYWxpemVkIGNvZGUgbmVlZGVkIHRvIHN1 cHBvcnQgY29uc3RydWN0aW9uIGFuZCBkZXN0cnVjdGlvbiBvZgorIyBmaWxl LXNjb3BlIG9iamVjdHMgaW4gQysrIGFuZCBKYXZhIGNvZGUsIGFuZCB0byBz dXBwb3J0IGV4Y2VwdGlvbiBoYW5kbGluZy4KKyMgQ29weXJpZ2h0IChDKSAy MDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBDb250cmli dXRlZCBieSBLUElUIEN1bW1pbnMgSW5mb3N5c3RlbXMgTGltaXRlZC4KKwor IyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hl ZCBieSB0aGUKKyMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIg dmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorIyBsYXRlciB2 ZXJzaW9uLgorIworIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisjIFdJVEhPVVQg QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyMgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBVbmRlciBTZWN0 aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0 aW9uYWwKKyMgcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVu dGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorIyAzLjEsIGFzIHB1 Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIwor IyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKyMgYSBjb3B5IG9mIHRoZSBH Q0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMg cHJvZ3JhbTsKKyMgc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlO Ry5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisjIDxodHRw Oi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworCisvKiBUaGlzIGZpbGUg anVzdCBzdXBwbGllcyBmdW5jdGlvbiBwcm9sb2d1ZXMgZm9yIHRoZSAuaW5p dCBhbmQgLmZpbmkKKyAgIHNlY3Rpb25zLiAgSXQgaXMgbGlua2VkIGluIGJl Zm9yZSBjcnRiZWdpbi5vLiAgKi8KKworCS5pZGVudCAgIkdOVSBDIGNydGku byIKKworCS5zZWN0aW9uIC5pbml0CisJLmdsb2JsICBfX2luaXQKKwkudHlw ZSAgIF9faW5pdCxAZnVuY3Rpb24KK19faW5pdDoKKyNpZiBkZWZpbmVkIChf X0lEX1NIQVJFRF9MSUJfXykKKwlwdXNoCSQyLCByMTIsIHJhCisJbW92ZCAg ICAkX19jdXJyZW50X3NoYXJlZF9saWJyYXJ5X3IxMl9vZmZzZXRfLCAocjEs cjApCisJbG9hZGQgICBbcjEyXTAocjEscjApLCAocjEyKQorI2Vsc2UKKyAg ICAgICAgcHVzaAlyYQorI2VuZGlmCisKKwkuc2VjdGlvbiAuZmluaQorCS5n bG9ibCAgX19maW5pCisJLnR5cGUgICBfX2ZpbmksQGZ1bmN0aW9uCitfX2Zp bmk6CisjaWYgZGVmaW5lZCAoX19JRF9TSEFSRURfTElCX18pCisJcHVzaAkk MiwgcjEyLCByYQorCW1vdmQgICAgJF9fY3VycmVudF9zaGFyZWRfbGlicmFy eV9yMTJfb2Zmc2V0XywgKHIxLHIwKQorCWxvYWRkICAgW3IxMl0wKHIxLHIw KSwgKHIxMikKKyNlbHNlCisgICAgICAgIHB1c2gJcmEKKyNlbmRpZgorCQpk aWZmIC11cHJOIG9yaWcvbGliZ2NjL2NvbmZpZy9jcjE2L2NydGxpYmlkLlMg bW9kL2xpYmdjYy9jb25maWcvY3IxNi9jcnRsaWJpZC5TCi0tLSBvcmlnL2xp YmdjYy9jb25maWcvY3IxNi9jcnRsaWJpZC5TCTE5NzAtMDEtMDEgMDU6MzA6 MDAuMDAwMDAwMDAwICswNTMwCisrKyBtb2QvbGliZ2NjL2NvbmZpZy9jcjE2 L2NydGxpYmlkLlMJMjAxMS0wNS0yMCAxNjo0MDo1My4wMDAwMDAwMDAgKzA1 MzAKQEAgLTAsMCArMSwyOCBAQAorIyBQcm92aWRlIGEgd2VhayBkZWZpbml0 aW9uIG9mIHRoZSBsaWJyYXJ5IElELCBmb3IgdGhlIGJlbmVmaXQgb2YgY2Vy dGFpbgorIyBjb25maWd1cmUgc2NyaXB0cy4JIAorIyBDb3B5cmlnaHQgKEMp IDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIENvbnRy aWJ1dGVkIGJ5IEtQSVQgQ3VtbWlucyBJbmZvc3lzdGVtcyBMaW1pdGVkLgor CisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjIHVuZGVyIHRoZSB0ZXJt cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlz aGVkIGJ5IHRoZQorIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl ciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisjIGxhdGVy IHZlcnNpb24uCisjCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0 aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyMgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIyBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFVuZGVyIFNl Y3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRk aXRpb25hbAorIyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBS dW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisjIDMuMSwgYXMg cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisj CisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorIyBhIGNvcHkgb2YgdGhl IEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhp cyBwcm9ncmFtOworIyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZ SU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKyMgPGh0 dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisJLmlkZW50ICAiR05V IEMgY3J0bGliaWQubyIKKworLndlYWsgX19jdXJyZW50X3NoYXJlZF9saWJy YXJ5X3IxMl9vZmZzZXRfCisuc2V0IF9fY3VycmVudF9zaGFyZWRfbGlicmFy eV9yMTJfb2Zmc2V0XywgMApkaWZmIC11cHJOIG9yaWcvbGliZ2NjL2NvbmZp Zy9jcjE2L2NydG4uUyBtb2QvbGliZ2NjL2NvbmZpZy9jcjE2L2NydG4uUwot LS0gb3JpZy9saWJnY2MvY29uZmlnL2NyMTYvY3J0bi5TCTE5NzAtMDEtMDEg MDU6MzA6MDAuMDAwMDAwMDAwICswNTMwCisrKyBtb2QvbGliZ2NjL2NvbmZp Zy9jcjE2L2NydG4uUwkyMDExLTA1LTIwIDE2OjQwOjQxLjAwMDAwMDAwMCAr MDUzMApAQCAtMCwwICsxLDQ0IEBACisjIFNwZWNpYWxpemVkIGNvZGUgbmVl ZGVkIHRvIHN1cHBvcnQgY29uc3RydWN0aW9uIGFuZCBkZXN0cnVjdGlvbiBv ZgorIyBmaWxlLXNjb3BlIG9iamVjdHMgaW4gQysrIGFuZCBKYXZhIGNvZGUs IGFuZCB0byBzdXBwb3J0IGV4Y2VwdGlvbiBoYW5kbGluZy4KKyMgQ29weXJp Z2h0IChDKSAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgor IyBDb250cmlidXRlZCBieSBLUElUIEN1bW1pbnMgSW5mb3N5c3RlbXMgTGlt aXRlZC4KKworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFz IHB1Ymxpc2hlZCBieSB0aGUKKyMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u OyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQor IyBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Cisj IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyMgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBV bmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFu dGVkIGFkZGl0aW9uYWwKKyMgcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRo ZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorIyAz LjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKyMgYSBjb3B5 IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3 aXRoIHRoaXMgcHJvZ3JhbTsKKyMgc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBh bmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2Vl CisjIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworCisvKiBU aGlzIGZpbGUgc3VwcGxpZXMgZnVuY3Rpb24gZXBpbG9ndWVzIGZvciB0aGUg LmluaXQgYW5kIC5maW5pIHNlY3Rpb25zLgorICBJdCBpcyBsaW5rZWQgaW4g YWZ0ZXIgYWxsIG90aGVyIGZpbGVzLiAgKi8KKworCS5pZGVudCAgIkdOVSBD IGNydG4ubyIKKworCS5zZWN0aW9uIC5pbml0CisjaWYgZGVmaW5lZCAoX19J RF9TSEFSRURfTElCX18pCisJcG9wcmV0CSQyLCByMTIsIHJhCisjZWxzZQor CXBvcHJldAlyYQorI2VuZGlmCisKKwkuc2VjdGlvbiAuZmluaQorI2lmIGRl ZmluZWQgKF9fSURfU0hBUkVEX0xJQl9fKQorCXBvcHJldAkkMiwgcjEyLCBy YQorI2Vsc2UKKwlwb3ByZXQJcmEKKyNlbmRpZgorCmRpZmYgLXVwck4gb3Jp Zy9saWJnY2MvY29uZmlnL2NyMTYvdC1jcjE2IG1vZC9saWJnY2MvY29uZmln L2NyMTYvdC1jcjE2Ci0tLSBvcmlnL2xpYmdjYy9jb25maWcvY3IxNi90LWNy MTYJMTk3MC0wMS0wMSAwNTozMDowMC4wMDAwMDAwMDAgKzA1MzAKKysrIG1v ZC9saWJnY2MvY29uZmlnL2NyMTYvdC1jcjE2CTIwMTEtMDUtMjAgMTU6MTY6 NDAuMDAwMDAwMDAwICswNTMwCkBAIC0wLDAgKzEsMTQgQEAKKyMgQXNzZW1i bGUgc3RhcnR1cCBmaWxlcy4KK0VYVFJBX01VTFRJTElCX1BBUlRTID0gY3J0 YmVnaW4ubyBjcnRlbmQubyBjcnRpLm8gY3J0bi5vIGNydGxpYmlkLm8KKwor JChUKWNydGkubzogJChzcmNkaXIpL2NvbmZpZy9jcjE2L2NydGkuUyAkKEdD Q19QQVNTRVMpCisJJChHQ0NfRk9SX1RBUkdFVCkgJChHQ0NfQ0ZMQUdTKSAk KE1VTFRJTElCX0NGTEFHUykgJChJTkNMVURFUykgXAorCS1jIC1vICQoVClj cnRpLm8gLXggYXNzZW1ibGVyLXdpdGgtY3BwICQoc3JjZGlyKS9jb25maWcv Y3IxNi9jcnRpLlMKKworJChUKWNydGxpYmlkLm86ICQoc3JjZGlyKS9jb25m aWcvY3IxNi9jcnRsaWJpZC5TICQoR0NDX1BBU1NFUykKKwkkKEdDQ19GT1Jf VEFSR0VUKSAkKEdDQ19DRkxBR1MpICQoTVVMVElMSUJfQ0ZMQUdTKSAkKElO Q0xVREVTKSBcCisJLWMgLW8gJChUKWNydGxpYmlkLm8gLXggYXNzZW1ibGVy LXdpdGgtY3BwICQoc3JjZGlyKS9jb25maWcvY3IxNi9jcnRsaWJpZC5TCisK KyQoVCljcnRuLm86ICQoc3JjZGlyKS9jb25maWcvY3IxNi9jcnRuLlMgJChH Q0NfUEFTU0VTKQorCSQoR0NDX0ZPUl9UQVJHRVQpICQoR0NDX0NGTEFHUykg JChNVUxUSUxJQl9DRkxBR1MpICQoSU5DTFVERVMpIFwKKwktYyAtbyAkKFQp Y3J0bi5vIC14IGFzc2VtYmxlci13aXRoLWNwcCAkKHNyY2RpcikvY29uZmln L2NyMTYvY3J0bi5TCmRpZmYgLXVwck4gb3JpZy9saWJnY2MvY29uZmlnLmhv c3QgbW9kL2xpYmdjYy9jb25maWcuaG9zdAotLS0gb3JpZy9saWJnY2MvY29u ZmlnLmhvc3QJMjAxMS0wMy0yMyAwMToyODoxOC4wMDAwMDAwMDAgKzA1MzAK KysrIG1vZC9saWJnY2MvY29uZmlnLmhvc3QJMjAxMS0wNS0yMCAxNToxNjo0 MC4wMDAwMDAwMDAgKzA1MzAKQEAgLTc5LDYgKzc5LDggQEAgYXZyLSotKikK IGJmaW4qLSopCiAJY3B1X3R5cGU9YmZpbgogCTs7CitjcjE2LSotKikKKwk7 OwogZmlkby0qLSopCiAJY3B1X3R5cGU9bTY4awogCTs7CkBAIC0yMzcsNiAr MjM5LDEwIEBAIGJmaW4qLWxpbnV4LXVjbGliYyopCiAJOzsKIGJmaW4qLSop CiAgICAgICAgIDs7CitjcjE2LSotKikKKyAgICAgICAgZXh0cmFfcGFydHM9 ImNydGJlZ2luLm8gY3J0ZW5kLm8gY3J0aS5vIGNydG4ubyBjcnRsaWJpZC5v IgorICAgICAgICB0bWFrZV9maWxlPSIke3RtYWtlX2ZpbGV9IGNyMTYvdC1j cjE2IgorICAgICAgICA7OwogY3Jpc3YzMi0qLWVsZiB8IGNyaXN2MzItKi1u b25lIHwgY3Jpcy0qLWVsZiB8IGNyaXMtKi1ub25lKQogCWV4dHJhX3BhcnRz PSJjcnRiZWdpbi5vIGNydGVuZC5vIgogCTs7CmRpZmYgLXVwck4gb3JpZy9s aWJzdGRjKystdjMvY29uZmlndXJlIG1vZC9saWJzdGRjKystdjMvY29uZmln dXJlCi0tLSBvcmlnL2xpYnN0ZGMrKy12My9jb25maWd1cmUJMjAxMS0wNC0x MCAyMTo1MDo0Mi4wMDAwMDAwMDAgKzA1MzAKKysrIG1vZC9saWJzdGRjKyst djMvY29uZmlndXJlCTIwMTEtMDUtMjAgMTU6MTY6MzEuMDAwMDAwMDAwICsw NTMwCkBAIC0yNjQ5Miw2ICsyNjQ5Miw5IEBAIGNhc2UgIiR7aG9zdH0iIGlu CiAgICAgIyBUaGlzIGlzIGEgZnJlZXN0YW5kaW5nIGNvbmZpZ3VyYXRpb247 IHRoZXJlIGlzIG5vdGhpbmcgdG8gZG8gaGVyZS4KICAgICA7OwogCisgIGNy MTYtKi0qKQorICAgIDs7CisKICAgbWlwcyotc2RlLWVsZiopCiAgICAgIyBU aGVzZSBkZWZpbml0aW9ucyBhcmUgZm9yIHRoZSBTREUgQyBsaWJyYXJ5IHJh dGhlciB0aGFuIG5ld2xpYi4KICAgICBTRUNUSU9OX0ZMQUdTPSctZmZ1bmN0 aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9ucycK --_003_371569CBCFB2E745B891DBB88B2DFDDD1A246E7DDFKCINPUNHJCMS0_ Content-Type: application/octet-stream; name="unwind.diff" Content-Description: unwind.diff Content-Disposition: attachment; filename="unwind.diff"; size=2686; creation-date="Fri, 20 May 2011 17:32:26 GMT"; modification-date="Fri, 20 May 2011 18:15:16 GMT" Content-Transfer-Encoding: base64 Content-length: 3644 M2MzCjwgICAgMjAwOCwgMjAwOSwgMjAxMCAgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLCBJbmMuCi0tLQo+ICAgIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEg IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgozOWE0MCw0Mwo+ICNp ZmRlZiBIQVZFX1NZU19TRFRfSAo+ICNpbmNsdWRlIDxzeXMvc2R0Lmg+Cj4g I2VuZGlmCj4gCjIxMGEyMTUKPiAKMjEyYzIxNywyMjIKPCAgICAgaWYgKCBz aXplID09IHNpemVvZihfVW53aW5kX1dvcmQpICkKLS0tCj4gCj4gICBpZiAo c2l6ZSA9PSBzaXplb2YoX1Vud2luZF9QdHIpKQo+ICAgICAqIChfVW53aW5k X1B0ciAqKSBwdHIgPSB2YWw7Cj4gICBlbHNlCj4gICAgIHsKPiAgICAgICBn Y2NfYXNzZXJ0IChzaXplID09IHNpemVvZihfVW53aW5kX1dvcmQpKTsKMjE0 LDIyMGMyMjQKPCAgICAgZWxzZSB7CjwgICAgICAgdHlwZWRlZiB1bnNpZ25l ZCBfQ1IxNl9VbndpbmRfV29yZCBfX2F0dHJpYnV0ZV9fKChfX21vZGVfXyhf X3dvcmRfXykpKTsKPCAgICAgICBnY2NfYXNzZXJ0IChpbmRleCArIDEgIDwg IChpbnQpIHNpemVvZihkd2FyZl9yZWdfc2l6ZV90YWJsZSkpOwo8ICAgICAg ICogKF9DUjE2X1Vud2luZF9Xb3JkICopIHB0ciA9IHZhbCAmIDB4ZmZmZiA7 ICAvKiBsb3cgMTYtYml0LiAgKi8KPCAgICAgICBwdHIgPSBjb250ZXh0LT5y ZWdbaW5kZXggKyAxXTsKPCAgICAgICAqIChfQ1IxNl9VbndpbmRfV29yZCAq KSBwdHIgPSB2YWwgPj4gMTYgOyAgLyogaGlnaCAxNi1iaXQuICAqLwo8ICAg ICAgICAgIH0KLS0tCj4gICAgIH0KMzU5YzM2MywzNzIKPCAgIC8qIEltbWVk aWF0ZWx5IGZvbGxvd2luZyB0aGUgYXVnbWVudGF0aW9uIGFyZSB0aGUgY29k ZSBhbmQKLS0tCj4gICAvKiBBZnRlciB0aGUgYXVnbWVudGF0aW9uIHJlc3Au IHBvaW50ZXIgZm9yICJlaCIgYXVnbWVudGF0aW9uCj4gICAgICBmb2xsb3dz IGZvciBDSUUgdmVyc2lvbiA+PSA0IGFkZHJlc3Mgc2l6ZSBieXRlIGFuZAo+ ICAgICAgc2VnbWVudCBzaXplIGJ5dGUuICAqLwo+ICAgaWYgKF9fYnVpbHRp bl9leHBlY3QgKGNpZS0+dmVyc2lvbiA+PSA0LCAwKSkKPiAgICAgewo+ICAg ICAgIGlmIChwWzBdICE9IHNpemVvZiAodm9pZCAqKSB8fCBwWzFdICE9IDAp Cj4gCXJldHVybiBOVUxMOwo+ICAgICAgIHAgKz0gMjsKPiAgICAgfQo+ICAg LyogSW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoaXMgYXJlIHRoZSBjb2RlIGFu ZAoxNDA2ZDE0MTgKPCAgICAgY29udGV4dC0+cmEgPSAodm9pZCopKCAoICh1 bnNpZ25lZCljb250ZXh0LT5yYSApIDw8IDEgKSA7CjE0NjdjMTQ3OSwxNDgw CjwgICBmcy5yZWdzLmNmYV9vZmZzZXQgLT0gY29udGV4dC0+YXJnc19zaXpl IDsKLS0tCj4gICBmcy5yZWdzLmNmYV9vZmZzZXQgPSAwOwo+IAoxNDg2YTE1 MDAsMTUwNAo+ICAgLyogV2Ugb25seSB3YW50IHRvIHVzZSBzdGFwIHByb2Jl cyBzdGFydGluZyB3aXRoIHYzLiAgRWFybGllcgo+ICAgICAgdmVyc2lvbnMg YWRkZWQgdG9vIG11Y2ggc3RhcnR1cCBjb3N0LiAgKi8KPiAjaWYgZGVmaW5l ZCAoSEFWRV9TWVNfU0RUX0gpICYmIGRlZmluZWQgKFNUQVBfUFJPQkUyKSAm JiBfU0RUX05PVEVfVFlQRSA+PSAzCj4gICBTVEFQX1BST0JFMiAobGliZ2Nj LCB1bndpbmQsIGNmYSwgaGFuZGxlcik7Cj4gI2Vsc2UKMTQ4N2ExNTA2Cj4g I2VuZGlmCjE0OTQsMTUwMmMxNTEzLDE1MjAKPCAKPCAjZGVmaW5lIHV3X2lu c3RhbGxfY29udGV4dChDVVJSRU5ULCBUQVJHRVQpICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAo8ICAgZG8gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCjwgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPCAgICAgICBs b25nIG9mZnNldCA9IHV3X2luc3RhbGxfY29udGV4dF8xICgoQ1VSUkVOVCks IChUQVJHRVQpKTsgICAgICAgICAgXAo8ICAgICAgIHZvaWQgKmhhbmRsZXIg PSBfX2J1aWx0aW5fZnJvYl9yZXR1cm5fYWRkciAoKFRBUkdFVCktPnJhKTsg ICAgICAgICBcCjwgICAgICAgaGFuZGxlciA9ICh2b2lkKikoICggKHVuc2ln bmVkKWhhbmRsZXIgKSA+PiAxICkgOyAgICAgICAgICAgICAgICAgIFwKPCAg ICAgICBfX2J1aWx0aW5fZWhfcmV0dXJuIChvZmZzZXQsIGhhbmRsZXIpOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo8ICAgICB9ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCi0tLQo+ICNkZWZpbmUgdXdfaW5zdGFsbF9jb250 ZXh0KENVUlJFTlQsIFRBUkdFVCkJCQkJXAo+ICAgZG8JCQkJCQkJCQlcCj4g ICAgIHsJCQkJCQkJCQlcCj4gICAgICAgbG9uZyBvZmZzZXQgPSB1d19pbnN0 YWxsX2NvbnRleHRfMSAoKENVUlJFTlQpLCAoVEFSR0VUKSk7CQlcCj4gICAg ICAgdm9pZCAqaGFuZGxlciA9IF9fYnVpbHRpbl9mcm9iX3JldHVybl9hZGRy ICgoVEFSR0VUKS0+cmEpOwlcCj4gICAgICAgX1Vud2luZF9EZWJ1Z0hvb2sg KChUQVJHRVQpLT5jZmEsIGhhbmRsZXIpOwkJCVwKPiAgICAgICBfX2J1aWx0 aW5fZWhfcmV0dXJuIChvZmZzZXQsIGhhbmRsZXIpOwkJCQlcCj4gICAgIH0J CQkJCQkJCQlcCjE1MDUsMTUwNmQxNTIyCjwgCjwgCg== --_003_371569CBCFB2E745B891DBB88B2DFDDD1A246E7DDFKCINPUNHJCMS0_--