From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 28912 invoked by alias); 8 Apr 2011 13:26:45 -0000 Received: (qmail 28901 invoked by uid 22791); 8 Apr 2011 13:26:43 -0000 X-SWARE-Spam-Status: No, hits=-1.5 required=5.0 tests=AWL,BAYES_00 X-Spam-Check-By: sourceware.org Received: from tx2ehsobe001.messaging.microsoft.com (HELO TX2EHSOBE001.bigfish.com) (65.55.88.11) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 08 Apr 2011 13:26:34 +0000 Received: from mail19-tx2-R.bigfish.com (10.9.14.249) by TX2EHSOBE001.bigfish.com (10.9.40.21) with Microsoft SMTP Server id 14.1.225.8; Fri, 8 Apr 2011 13:26:31 +0000 Received: from mail19-tx2 (localhost.localdomain [127.0.0.1]) by mail19-tx2-R.bigfish.com (Postfix) with ESMTP id B58772B06A2; Fri, 8 Apr 2011 13:26:31 +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 mail19-tx2 (localhost.localdomain [127.0.0.1]) by mail19-tx2 (MessageSwitch) id 130226916880695_4999; Fri, 8 Apr 2011 13:26:08 +0000 (UTC) Received: from TX2EHSMHS045.bigfish.com (unknown [10.9.14.253]) by mail19-tx2.bigfish.com (Postfix) with ESMTP id 6CC2B1B90154; Fri, 8 Apr 2011 13:25:32 +0000 (UTC) Received: from Kcinpunhjhc01.kpit.com (203.197.93.240) by TX2EHSMHS045.bigfish.com (10.9.99.145) with Microsoft SMTP Server (TLS) id 14.1.225.8; Fri, 8 Apr 2011 13:25:28 +0000 Received: from Kcinpunhjcms01.kpit.com ([172.10.16.121]) by Kcinpunhjhc01.kpit.com ([172.10.16.123]) with mapi; Fri, 8 Apr 2011 18:55:25 +0530 From: Sumanth Gundapaneni To: "gcc-patches@gcc.gnu.org" , Joseph Myers , "rth@redhat.com" CC: "Jayant R. Sonar" Date: Fri, 08 Apr 2011 13:26:00 -0000 Subject: RE: CR16 Port addition Message-ID: <371569CBCFB2E745B891DBB88B2DFDDD1A2343CD45@KCINPUNHJCMS01.kpit.com> x-cr-hashedpuzzle: EEHc FG4r G+iY G/Pz HJYt IGFT I/fO Jc+Y OhKR S2TF Txfk U/Zd aq8t baBx cXfp ebx/;3;ZwBjAGMALQBwAGEAdABjAGgAZQBzAEAAZwBjAGMALgBnAG4AdQAuAG8AcgBnADsAagBvAHMAZQBwAGgAQABjAG8AZABlAHMAbwB1AHIAYwBlAHIAeQAuAGMAbwBtADsAcgB0AGgAQAByAGUAZABoAGEAdAAuAGMAbwBtAA==;Sosha1_v1;7;{A78A97BE-B3E9-421F-93E1-EDE9E64E7578};cwB1AG0AYQBuAHQAaAAuAGcAdQBuAGQAYQBwAGEAbgBlAG4AaQBAAGsAcABpAHQAYwB1AG0AbQBpAG4AcwAuAGMAbwBtAA==;Fri, 08 Apr 2011 13:24:50 GMT;UgBFADoAIABDAFIAMQA2ACAAUABvAHIAdAAgAGEAZABkAGkAdABpAG8AbgA= x-cr-puzzleid: {A78A97BE-B3E9-421F-93E1-EDE9E64E7578} Content-Type: multipart/mixed; boundary="_002_371569CBCFB2E745B891DBB88B2DFDDD1A2343CD45KCINPUNHJCMS0_" 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-04/txt/msg00624.txt.bz2 --_002_371569CBCFB2E745B891DBB88B2DFDDD1A2343CD45KCINPUNHJCMS0_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Content-length: 6271 Hi Richard and Joseph, Thanks for your detailed review and valuable suggestions. Please find attached the patch "cr16-gcc.patch" which contains modification= s=20 as suggested by Richard 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 Please review the patch and let me know if there should be any=20 modifications in it. Richard, please go through my explanation for your comments. >> +targetm =3D TARGET_INITIALIZER; >I find it much cleaner to move the target initializer to the end=20 I moved this to the end of the file as advised. >> + if ((rclass) =3D=3D SHORT_REGS || (rclass) =3D=3D DOUBLE_BASE_REGS \ >Trailing \. Left over from macro-to-function conversion? The trailing \ has been removed in the current patch. >> + flag_split_wide_types =3D 0; >I would really like to know more about this. This particular flag causes the compiler to generate an ICE in=20 gen_rtx_SUBREG. The subreg rtx with offset byte "2" is the reason=20 for the issue. Though I disabled this flag I am hitting this ICE in=20 dejagnu regression for a specific test case named=20 "gcc.c-torture/compile/ptr-conv-1.c". Hacking at backend specifically=20 in predicates doesn't seem to solve my problem. I believe this issue=20 is due to the variable width registers in CR16 port=20 (r0-r11 are 16-bit wide register, r12-r15 are 32-bit wide registers).=20 Any hints on solving this problem would be much appreciated.=20 >> + flag_gcse =3D 0; >Why? It works for other targets. This is probably related to SUBREG issue mentioned above. >> +cr16_compute_frame (void) >I would be very much happier if these functions did not store their=20 >results into I defined a structure "cr16_frame_info" to store these variables. >> +if ((mode =3D=3D Pmode) && (regno =3D=3D 11)) >Is there a symbolic name for 11? There is no symbolic name for register number 11.=20 We will add a definition for readability. >> + last_parm_in_reg =3D 0; >Using a global here is definitely wrong.=20=20 I defined this variable in CUMULATIVE_ARGS structure as per your suggestion. >> + if ((next_param =3D=3D (tree) 0) && (TREE_VALUE (param) !=3D >s/(tree) 0/NULL_TREE/g I am not sure what needs to be modified here. >I don't see a constraints.md file? I added the constraints.md file and deleted the traditional macros. >> + [(set (match_operand:SHORT 0 "bit_operand" "=3DmZ") >The constraint here is almost certainly wrong. It should be only "=3DZ". This has been modified. =20 >> +(define_predicate "reg_operand" >This is wrong. This issue should be handled with=20 >CANNOT_CHANGE_MODE_CLASS This predicate definition has been deleted and changes have been made in pa= tterns=20 to avoid common subreg issues. >> +(define_expand "adddi3" >You should trust the predicates to do the right thing.=20 This pattern has been modified and defined in a normal manner.=20 Please verify the same. >> + (plus:SI (mult:SI (sz_xtnd:SI (match_operand:HI 1 "reg_operand"=20 >> +"%r")) >% should be used only when the constraints of the two operands are differe= nt. This is rectified. >> + [(set (match_operand:HI 0 "reg_operand" "=3Dr,=3Dr") >Extra =3D in operand 0. This is rectified. >> +(define_expand "andhi3" >What is this for? Disallowing subregs of pseudos?!? This pattern has been adjusted correctly. Please verify the same. >> + "andd\t%T2,%T0\;andd\t%U2,%U0" >You'd be better off without this, and let the compiler generate it=20 >itself from two SImode ands. This is handled with rtx. Please verify the same. >> +(define_insn "*mov_double" >This whole pattern has got to get cleaned up.=20=20 I am planning to solve this once I am finished with subreg issues. >> +(define_insn "*cmp_insn" >I'm not sure I understand the logic here. If you have a cbranch insn,=20 >which you never split This compare pattern is for scond instruction which you can find=20 in the updated patch. >> +(define_insn "indirect_jump_return" >Extra parallel. It's implicit in define_insn. >> +(define_expand "call" >These can be trivially merged. Yes, I plan to work on them after fixing the subreg issues.=20 >> +;; Nop >Nop really needs to output something.=20=20 This has been fixed as suggested. >> +;; Shared FLAT > Huh? These patterns are to support the target option MID_SHARED_LIBRARY. I will enable this target option soon.=20=20 =20 gcc/ChangeLog: -------------- 2011-04-08 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-04-08 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-04-08 Sumanth G Jayant R Sonar *configure: Add National Semiconductor CR16 target (cr16-*-*).=09=09 *crossconfig.m4 : Add support for National Semiconductor CR16 target. ChangeLog: ---------- 2011-04-08 Sumanth G Jayant R Sonar * configure.ac: Add National Semiconductor CR16 target. * configure: Regenerate =20=20=20 Thanks in advance, Sumanth G, PUNE (India). --_002_371569CBCFB2E745B891DBB88B2DFDDD1A2343CD45KCINPUNHJCMS0_ Content-Type: application/octet-stream; name="cr16-gcc.patch" Content-Description: cr16-gcc.patch Content-Disposition: attachment; filename="cr16-gcc.patch"; size=227465; creation-date="Fri, 08 Apr 2011 18:07:43 GMT"; modification-date="Fri, 08 Apr 2011 18:49:52 GMT" Content-Transfer-Encoding: base64 Content-length: 308343 ZGlmZiAtdXByTiAteCcqLm9yaWcnIC14JyoucmVqJyBvcmlnL2NvbmZpZ3Vy ZSBtb2QvY29uZmlndXJlCi0tLSBvcmlnL2NvbmZpZ3VyZQkyMDExLTAzLTE2 IDIzOjU3OjM2LjAwMDAwMDAwMCArMDUzMAorKysgbW9kL2NvbmZpZ3VyZQky MDExLTA0LTA4IDE2OjQzOjQ5LjAwMDAwMDAwMCArMDUzMApAQCAtMzI3OSw3 ICszMjc5LDEyIEBAIGNhc2UgIiR7dGFyZ2V0fSIgaW4KICAgICBub2NvbmZp Z2RpcnM9IiRub2NvbmZpZ2RpcnMgdGFyZ2V0LWxpYnN0ZGMrKy12MyB0YXJn ZXQtbGliZ2xvc3MgJHtsaWJnY2p9IGdjYyBnZGIgbmV3bGliIgogICAgIDs7 CiAgIGNyMTYtKi0qKQotICAgIG5vY29uZmlnZGlycz0iJG5vY29uZmlnZGly cyAke2xpYmdjan0gZ2RiIgorICAgIGNhc2UgIiR7dGFyZ2V0X2FsaWFzfSIg aW4KKyAgICAgIGNyMTYtdWNsaW51eCkKKyAgICAgICAgbm9jb25maWdkaXJz PSIkbm9jb25maWdkaXJzIHRhcmdldC1tdWRmbGFwICR7bGliZ2NqfSI7Owor ICAgICAgKikKKyAgICAgICAgbm9jb25maWdkaXJzPSIkbm9jb25maWdkaXJz IHRhcmdldC1tdWRmbGFwICR7bGliZ2NqfSBnZGIiOzsKKyAgICBlc2FjCiAg ICAgOzsKICAgY3Jpcy0qLSogfCBjcmlzdjMyLSotKikKICAgICB1bnN1cHBv cnRlZF9sYW5ndWFnZXM9IiR1bnN1cHBvcnRlZF9sYW5ndWFnZXMgamF2YSIK ZGlmZiAtdXByTiAteCcqLm9yaWcnIC14JyoucmVqJyBvcmlnL2NvbmZpZ3Vy ZS5hYyBtb2QvY29uZmlndXJlLmFjCi0tLSBvcmlnL2NvbmZpZ3VyZS5hYwky MDExLTAzLTE2IDIzOjU3OjM2LjAwMDAwMDAwMCArMDUzMAorKysgbW9kL2Nv bmZpZ3VyZS5hYwkyMDExLTA0LTA4IDE2OjQyOjI3LjAwMDAwMDAwMCArMDUz MApAQCAtNzI1LDcgKzcyNSwxMiBAQCBjYXNlICIke3RhcmdldH0iIGluCiAg ICAgbm9jb25maWdkaXJzPSIkbm9jb25maWdkaXJzIHRhcmdldC1saWJzdGRj KystdjMgdGFyZ2V0LWxpYmdsb3NzICR7bGliZ2NqfSBnY2MgZ2RiIG5ld2xp YiIKICAgICA7OwogICBjcjE2LSotKikKLSAgICBub2NvbmZpZ2RpcnM9IiRu b2NvbmZpZ2RpcnMgJHtsaWJnY2p9IGdkYiIKKyAgICBjYXNlICIke3Rhcmdl dF9hbGlhc30iIGluCisgICAgICBjcjE2LXVjbGludXgpCisgICAgICAgIG5v Y29uZmlnZGlycz0iJG5vY29uZmlnZGlycyB0YXJnZXQtbXVkZmxhcCAke2xp Ymdjan0iOzsKKyAgICAgICopCisgICAgICAgIG5vY29uZmlnZGlycz0iJG5v Y29uZmlnZGlycyB0YXJnZXQtbXVkZmxhcCAke2xpYmdjan0gZ2RiIjs7Cisg ICAgZXNhYwogICAgIDs7CiAgIGNyaXMtKi0qIHwgY3Jpc3YzMi0qLSopCiAg ICAgdW5zdXBwb3J0ZWRfbGFuZ3VhZ2VzPSIkdW5zdXBwb3J0ZWRfbGFuZ3Vh Z2VzIGphdmEiCmRpZmYgLXVwck4gLXgnKi5vcmlnJyAteCcqLnJlaicgb3Jp Zy9nY2MvY29uZmlnL2NyMTYvY29uc3RyYWludHMubWQgbW9kL2djYy9jb25m aWcvY3IxNi9jb25zdHJhaW50cy5tZAotLS0gb3JpZy9nY2MvY29uZmlnL2Ny MTYvY29uc3RyYWludHMubWQJMTk3MC0wMS0wMSAwNTozMDowMC4wMDAwMDAw MDAgKzA1MzAKKysrIG1vZC9nY2MvY29uZmlnL2NyMTYvY29uc3RyYWludHMu bWQJMjAxMS0wNC0wOCAxNzowMTo1Ny4wMDAwMDAwMDAgKzA1MzAKQEAgLTAs MCArMSw4NiBAQAorOzsgUHJlZGljYXRlcyBvZiBtYWNoaW5lIGRlc2NyaXB0 aW9uIGZvciBDUjE2LgorOzsgQ29weXJpZ2h0IChDKSAyMDEwIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbiwgSW5jLgorOzsgQ29udHJpYnV0ZWQgYnkgS1BJ VCBDdW1taW5zIEluZm9zeXN0ZW1zIExpbWl0ZWQuCis7OworOzsgVGhpcyBm aWxlIGlzIHBhcnQgb2YgR0NDLgorOzsKKzs7IEdDQyBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0 Cis7OyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorOzsgYnkgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIK Kzs7IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCis7OworOzsgR0NDIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm dWwsIGJ1dCBXSVRIT1VUCis7OyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKzs7 IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMKKzs7IExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4KKzs7Cis7OyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5 IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorOzsgYWxvbmcg d2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUK Kzs7IDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gIAorCis7OyBD b25zdHJhaW50cworOzsgUmVnaXN0ZXIgY29uc3RyYWludHMKKyhkZWZpbmVf cmVnaXN0ZXJfY29uc3RyYWludCAiYiIgIk5PU1BfUkVHUyIKKyAgIkBubyBz cCByZWdpc3RlcnMiKQorCisoZGVmaW5lX3JlZ2lzdGVyX2NvbnN0cmFpbnQg ImMiICJTSE9SVF9SRUdTIgorICAiQHNob3J0IHJlZ2lzdGVycyIpCisKKyhk ZWZpbmVfcmVnaXN0ZXJfY29uc3RyYWludCAiZCIgIkxPTkdfUkVHUyIKKyAg IkBsb25nIHJlZ2lzdGVycyIpCisKKzs7IEludGVnZXIgY29uc3RyYWludHMu CisoZGVmaW5lX2NvbnN0cmFpbnQgIkkiCisgICJBIHNpZ25lZCA0LWJpdCBp bW1lZGlhdGUuIgorICAoYW5kIChtYXRjaF9jb2RlICJjb25zdF9pbnQiKQor ICAgICAgIChtYXRjaF90ZXN0ICJTSUdORURfSU5UX0ZJVFNfTl9CSVRTIChp dmFsLCA0KSIpKSkKKworKGRlZmluZV9jb25zdHJhaW50ICJKIgorICAiQSBz aWduZWQgNS1iaXQgaW1tZWRpYXRlLiIKKyAgKGFuZCAobWF0Y2hfY29kZSAi Y29uc3RfaW50IikKKyAgICAgICAobWF0Y2hfdGVzdCAiU0lHTkVEX0lOVF9G SVRTX05fQklUUyAoaXZhbCwgNSkiKSkpCisKKyhkZWZpbmVfY29uc3RyYWlu dCAiSyIKKyAgIkEgc2lnbmVkIDYtYml0IGltbWVkaWF0ZS4iCisgIChhbmQg KG1hdGNoX2NvZGUgImNvbnN0X2ludCIpCisgICAgICAgKG1hdGNoX3Rlc3Qg IlNJR05FRF9JTlRfRklUU19OX0JJVFMgKGl2YWwsIDYpIikpKQorCisoZGVm aW5lX2NvbnN0cmFpbnQgIkwiCisgICJBIHVuc2lnbmVkIDQtYml0IGltbWVk aWF0ZS4iCisgIChhbmQgKG1hdGNoX2NvZGUgImNvbnN0X2ludCIpCisgICAg ICAgKG1hdGNoX3Rlc3QgIlVOU0lHTkVEX0lOVF9GSVRTX05fQklUUyAoaXZh bCwgNCkiKSkpCisKKyhkZWZpbmVfY29uc3RyYWludCAiTSIKKyAgIkEgdW5z aWduZWQgYW5kIGN1c3RvbWl6ZWQgIDQtYml0IGltbWVkaWF0ZS4iCisgIChh bmQgKG1hdGNoX2NvZGUgImNvbnN0X2ludCIpCisgICAgICAgKG1hdGNoX3Rl c3QgIihJTl9SQU5HRV9QIChpdmFsLCAwLCAxNSkgJiYgKChpdmFsICE9IDkp IHx8IChpdmFsICE9IDExKSkpICAiKSkpCisKKyhkZWZpbmVfY29uc3RyYWlu dCAiTiIKKyAgIkEgc2lnbmVkIDE2LWJpdCBpbW1lZGlhdGUuIgorICAoYW5k IChtYXRjaF9jb2RlICJjb25zdF9pbnQiKQorICAgICAgIChtYXRjaF90ZXN0 ICJJTl9SQU5HRV9QIChpdmFsLCAtMzI3NjgsIDMyNzY3KSIpKSkKKworKGRl ZmluZV9jb25zdHJhaW50ICJPIgorICAiQSB1bnNpZ25lZCAyMC1iaXQgaW1t ZWRpYXRlLiIKKyAgKGFuZCAobWF0Y2hfY29kZSAiY29uc3RfaW50IikKKyAg ICAgICAobWF0Y2hfdGVzdCAiSU5fUkFOR0VfUCAoaXZhbCwgMCwgMTA0ODU3 NSkiKSkpCisKKyhkZWZpbmVfY29uc3RyYWludCAiUCIKKyAgIkEgc2lnbmVk IDMyLWJpdCBpbW1lZGlhdGUuIgorICAoYW5kIChtYXRjaF9jb2RlICJjb25z dF9pbnQiKQorICAgICAgIChtYXRjaF90ZXN0ICJJTl9SQU5HRV9QIChpdmFs LCAtMjE0NzQ4MzY0OCwgMjE0NzQ4MzY0NykiKSkpCisKKyhkZWZpbmVfY29u c3RyYWludCAiUSIKKyAgIkEgc2hpZnQgUUkgaW1tZWRpYXRlLiIKKyAgKGFu ZCAobWF0Y2hfY29kZSAiY29uc3RfaW50IikKKyAgICAgICAobWF0Y2hfdGVz dCAiSU5fUkFOR0VfUCAoaXZhbCwgMCwgNykiKSkpCisKKyhkZWZpbmVfY29u c3RyYWludCAiUiIKKyAgIkEgc2hpZnQgSEkgaW1tZWRpYXRlLiIKKyAgKGFu ZCAobWF0Y2hfY29kZSAiY29uc3RfaW50IikKKyAgICAgICAobWF0Y2hfdGVz dCAiSU5fUkFOR0VfUCAoaXZhbCwgMCwgMTUpIikpKQorCisoZGVmaW5lX2Nv bnN0cmFpbnQgIlMiCisgICJBIHNoaWZ0IFNJIGltbWVkaWF0ZS4iCisgIChh bmQgKG1hdGNoX2NvZGUgImNvbnN0X2ludCIpCisgICAgICAgKG1hdGNoX3Rl c3QgIklOX1JBTkdFX1AgKGl2YWwsIDAsIDMxKSIpKSkKZGlmZiAtdXByTiAt eCcqLm9yaWcnIC14JyoucmVqJyBvcmlnL2djYy9jb25maWcvY3IxNi9jcjE2 LmMgbW9kL2djYy9jb25maWcvY3IxNi9jcjE2LmMKLS0tIG9yaWcvZ2NjL2Nv bmZpZy9jcjE2L2NyMTYuYwkxOTcwLTAxLTAxIDA1OjMwOjAwLjAwMDAwMDAw MCArMDUzMAorKysgbW9kL2djYy9jb25maWcvY3IxNi9jcjE2LmMJMjAxMS0w NC0wOCAxNzo1MDozOC4wMDAwMDAwMDAgKzA1MzAKQEAgLTAsMCArMSwyMzA5 IEBACisvKiBPdXRwdXQgcm91dGluZXMgZm9yIENSMTYgcHJvY2Vzc29yLgor ICAgQ29weXJpZ2h0IChDKSAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv biwgSW5jLgorICAgQ29udHJpYnV0ZWQgYnkgS1BJVCBDdW1taW5zIEluZm9z eXN0ZW1zIExpbWl0ZWQuCisgIAorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg R0NDLgorCisgICBHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJs aXNoZWQKKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp dGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyCisgICBvcHRpb24pIGFueSBs YXRlciB2ZXJzaW9uLgorIAorICAgR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisg ICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgIG9yIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMKKyAgIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNo b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZp bGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisgICA8aHR0cDovL3d3dy5nbnUu b3JnL2xpY2Vuc2VzLz4uICAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj aW5jbHVkZSAic3lzdGVtLmgiCisjaW5jbHVkZSAiY29yZXR5cGVzLmgiCisj aW5jbHVkZSAidG0uaCIKKyNpbmNsdWRlICJydGwuaCIKKyNpbmNsdWRlICJ0 cmVlLmgiCisjaW5jbHVkZSAidG1fcC5oIgorI2luY2x1ZGUgInJlZ3MuaCIK KyNpbmNsdWRlICJoYXJkLXJlZy1zZXQuaCIKKyNpbmNsdWRlICJpbnNuLWNv bmZpZy5oIgorI2luY2x1ZGUgImNvbmRpdGlvbnMuaCIKKyNpbmNsdWRlICJv dXRwdXQuaCIKKyNpbmNsdWRlICJpbnNuLWNvZGVzLmgiCisjaW5jbHVkZSAi aW5zbi1hdHRyLmgiCisjaW5jbHVkZSAiZmxhZ3MuaCIKKyNpbmNsdWRlICJl eGNlcHQuaCIKKyNpbmNsdWRlICJmdW5jdGlvbi5oIgorI2luY2x1ZGUgInJl Y29nLmgiCisjaW5jbHVkZSAiZXhwci5oIgorI2luY2x1ZGUgIm9wdGFicy5o IgorI2luY2x1ZGUgImRpYWdub3N0aWMtY29yZS5oIgorI2luY2x1ZGUgImJh c2ljLWJsb2NrLmgiCisjaW5jbHVkZSAidGFyZ2V0LmgiCisjaW5jbHVkZSAi dGFyZ2V0LWRlZi5oIgorI2luY2x1ZGUgImRmLmgiCisKKy8qIERlZmluaXRp b25zLiAgKi8KKworLyogTWF4aW11bSBudW1iZXIgb2YgcmVnaXN0ZXIgdXNl ZCBmb3IgcGFzc2luZyBwYXJhbWV0ZXJzLiAgKi8KKyNkZWZpbmUgTUFYX1JF R19GT1JfUEFTU0lOR19BUkdTICA2CisKKy8qIE1pbmltdW0gbnVtYmVyIHJl Z2lzdGVyIHVzZWQgZm9yIHBhc3NpbmcgcGFyYW1ldGVycy4gICovCisjZGVm aW5lIE1JTl9SRUdfRk9SX1BBU1NJTkdfQVJHUyAgMgorCisvKiBUaGUgbWF4 aW11bSBjb3VudCBvZiB3b3JkcyBzdXBwb3J0ZWQgaW4gdGhlIGFzc2VtYmx5 IG9mIHRoZSBhcmNoaXRlY3R1cmUgaW4KKyAgIGEgcHVzaC9wb3AgaW5zdHJ1 Y3Rpb24uICAqLworI2RlZmluZSBNQVhfQ09VTlQgIDgKKworLyogUHJlZGlj YXRlIGlzIHRydWUgaWYgdGhlIGN1cnJlbnQgZnVuY3Rpb24gaXMgYSAnbm9y ZXR1cm4nIGZ1bmN0aW9uLCAKKyAgIGkuZS4gaXQgaXMgcXVhbGlmaWVkIGFz IHZvbGF0aWxlLiAgKi8KKyNkZWZpbmUgRlVOQ19JU19OT1JFVFVSTl9QKGRl Y2wpIChUUkVFX1RISVNfVk9MQVRJTEUgKGRlY2wpKQorCisvKiBQcmVkaWNh dGUgdGhhdCBob2xkcyB3aGVuIHdlIG5lZWQgdG8gc2F2ZSByZWdpc3RlcnMg ZXZlbiBmb3IgJ25vcmV0dXJuJworICAgZnVuY3Rpb25zLCB0byBhY2NvbW9k YXRlIGZvciB1bndpbmRpbmcuICAqLworI2RlZmluZSBNVVNUX1NBVkVfUkVH U19QKCkgXAorICAoZmxhZ191bndpbmRfdGFibGVzIHx8IChmbGFnX2V4Y2Vw dGlvbnMgJiYgIVVJX1NKTEopKQorCisvKiBOb256ZXJvIGlmIHRoZSBydHgg WCBpcyBhIHNpZ25lZCBjb25zdCBpbnQgb2YgbiBiaXRzLiAgKi8KKyNkZWZp bmUgUlRYX1NJR05FRF9JTlRfRklUU19OX0JJVFMoWCxuKSAgICAgICAgICAg ICAgICBcCisgICgoR0VUX0NPREUgKFgpID09IENPTlNUX0lOVCAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorICAgJiYgU0lHTkVEX0lOVF9GSVRTX05f QklUUyAoSU5UVkFMIChYKSwgbikpID8gMSA6IDApCisKKy8qIE5vbnplcm8g aWYgdGhlIHJ0eCBYIGlzIGFuIHVuc2lnbmVkIGNvbnN0IGludCBvZiBuIGJp dHMuICAqLworI2RlZmluZSBSVFhfVU5TSUdORURfSU5UX0ZJVFNfTl9CSVRT KFgsIG4pICAgICAgICAgICAgICAgXAorICAoKEdFVF9DT0RFIChYKSA9PSBD T05TVF9JTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgJiYg VU5TSUdORURfSU5UX0ZJVFNfTl9CSVRTIChJTlRWQUwgKFgpLCBuKSkgPyAx IDogMCkKKworLyogU3RydWN0dXJlIGZvciBzdGFjayBjb21wdXRhdGlvbnMu ICAqLworCisvKiB2YXJpYWJsZSBkZWZpbml0aW9ucyBpbiB0aGUgc3RydXR1 cmUKKyAgIGFyZ3Nfc2l6ZSAgICAgICAgICAgICBOdW1iZXIgb2YgYnl0ZXMg c2F2ZWQgb24gdGhlIHN0YWNrIGZvciBsb2NhbCAKKwkJCSB2YXJpYWJsZXMK KworICAgcmVnX3NpemUJCSBOdW1iZXIgb2YgYnl0ZXMgc2F2ZWQgb24gdGhl IHN0YWNrIGZvciAKKwkJCSBub24tc2NyYXRjaCByZWdpc3RlcnMKKworICAg dG90YWxfc2l6ZSAJCSBUaGUgc3VtIG9mIDIgc2l6ZXM6IGxvY2FscyB2YXJz IGFuZCBwYWRkaW5nIGJ5dGUgCisJCQkgZm9yIHNhdmluZyB0aGUgcmVnaXN0 ZXJzLiBVc2VkIGluIGV4cGFuZF9wcm9sb2d1ZSgpIAorCQkJIGFuZCBleHBh bmRfZXBpbG9ndWUoKQorCisgICBsYXN0X3JlZ190b19zYXZlICAgICAgV2ls bCBob2xkIHRoZSBudW1iZXIgb2YgdGhlIGxhc3QgcmVnaXN0ZXIgdGhlIAor CQkJIHByb2xvZ3VlIHNhdmVzLCAtMSBpZiBubyByZWdpc3RlciBpcyBzYXZl ZAorCisgICBzYXZlX3JlZ3NbMTZdCSBFYWNoIG9iamVjdCBpbiB0aGUgYXJy YXkgaXMgYSByZWdpc3RlciBudW1iZXIuIAorCQkJIE1hcmsgMSBmb3IgcmVn aXN0ZXJzIHRoYXQgbmVlZCB0byBiZSBzYXZlZAorCisgICBudW1fcmVncwkJ IE51bWJlciBvZiByZWdpc3RlcnMgc2F2ZWQKKworICAgaW5pdGlhbGl6ZWQJ CSBOb24temVybyBpZiBmcmFtZSBzaXplIGFscmVhZHkgY2FsY3VsYXRlZCwg bm90IAorCQkJIHVzZWQgeWV0CisKKyAgIGZ1bmN0aW9uX21ha2VzX2NhbGxz ICBEb2VzIHRoZSBmdW5jdGlvbiBtYWtlIGNhbGxzID8gbm90IHVzZWQgeWV0 CisgICovCisKK3N0cnVjdCBjcjE2X2ZyYW1lX2luZm8KK3sKKyAgdW5zaWdu ZWQgbG9uZyB2YXJfc2l6ZTsKKyAgdW5zaWduZWQgbG9uZyBhcmdzX3NpemU7 CisgIHVuc2lnbmVkIGludCAgcmVnX3NpemU7CisgIHVuc2lnbmVkIGxvbmcg dG90YWxfc2l6ZTsKKyAgbG9uZyAgICAgICAgICBsYXN0X3JlZ190b19zYXZl OworICBsb25nICAgICAgICAgIHNhdmVfcmVnc1tGSVJTVF9QU0VVRE9fUkVH SVNURVJdOworICBpbnQgICAgICAgICAgIG51bV9yZWdzOworICBpbnQgICAg ICAgICAgIGluaXRpYWxpemVkOworICBpbnQgICAgICAgICAgIGZ1bmN0aW9u X21ha2VzX2NhbGxzOworfTsKKworLyogQ3VycmVudCBmcmFtZSBpbmZvcm1h dGlvbiBjYWxjdWxhdGVkIGJ5IGNyMTZfY29tcHV0ZV9mcmFtZV9zaXplLiAg Ki8KK3N0YXRpYyBzdHJ1Y3QgY3IxNl9mcmFtZV9pbmZvIGN1cnJlbnRfZnJh bWVfaW5mbzsKKworLyogU3RhdGljIFZhcmlhYmxlcy4gICovCisKKy8qIERh dGEgbW9kZWwgdGhhdCB3YXMgc3VwcGxpZWQgYnkgdXNlciB2aWEgY29tbWFu ZCBsaW5lIG9wdGlvbgorICAgVGhpcyB3aWxsIGJlIG92ZXJyaWRkZW4gaW4g Y2FzZSBvZiBpbnZhbGlkIGNvbWJpbmF0aW9uCisgICBvZiBjb3JlIGFuZCBk YXRhIG1vZGVsIG9wdGlvbnMgYXJlIHN1cHBsaWVkLiAgKi8KK3N0YXRpYyBl bnVtIGRhdGFfbW9kZWxfdHlwZSBkYXRhX21vZGVsID0gRE1fREVGQVVMVDsK KworLyogTm9uemVybyBpZiAtbXNoYXJlZC1saWJyYXJ5LWlkIHdhcyBnaXZl bi4gICovCitzdGF0aWMgaW50IGNyMTZfbGliX2lkX2dpdmVuOworCisvKiBH bG9iYWwgVmFyaWFibGVzLiAgKi8KKworLyogU3BlY2lmeSB0aGUgaWRlbnRp ZmljYXRpb24gbnVtYmVyIG9mIHRoZSBsaWJyYXJ5IGJlaW5nIGJ1aWx0LiAg Ki8KK2NvbnN0IGNoYXIgKmNyMTZfbGlicmFyeV9pZF9zdHJpbmcgPSAiX19j dXJyZW50X3NoYXJlZF9saWJyYXJ5X3IxMl9vZmZzZXRfIjsKKworLyogVGFi bGUgb2YgbWFjaGluZSBhdHRyaWJ1dGVzLiAgKi8KK2NvbnN0IHN0cnVjdCBh dHRyaWJ1dGVfc3BlYyBjcjE2X2F0dHJpYnV0ZV90YWJsZVtdOworCisvKiBU QVJHRVRNIEZ1bmN0aW9uIFByb3RvdHlwZXMuICAqLworc3RhdGljIHJ0eCBj cjE2X3N0cnVjdF92YWx1ZV9ydHggKHRyZWUgZm50eXBlIEFUVFJJQlVURV9V TlVTRUQsCisJCQkJICBpbnQgaW5jb21pbmcgQVRUUklCVVRFX1VOVVNFRCk7 CitzdGF0aWMgYm9vbCBjcjE2X3JldHVybl9pbl9tZW1vcnkgKHRyZWUgdHlw ZSwgdHJlZSBmbnR5cGUgQVRUUklCVVRFX1VOVVNFRCk7CitzdGF0aWMgaW50 IGNyMTZfYWRkcmVzc19jb3N0IChydHgpOworc3RhdGljIGJvb2wgY3IxNl9m cmFtZV9wb2ludGVyX3JlcXVpcmVkICh2b2lkKTsKK3N0YXRpYyBib29sIGNy MTZfY2FuX2VsaW1pbmF0ZSAoY29uc3QgaW50LCBjb25zdCBpbnQpOworc3Rh dGljIHJ0eCBjcjE2X2xlZ2l0aW1pemVfYWRkcmVzcyAocnR4LCBydHgsIGVu dW0gbWFjaGluZV9tb2RlKTsKK3N0YXRpYyBlbnVtIG1hY2hpbmVfbW9kZSBj cjE2X3Vud2luZF93b3JkX21vZGUgKHZvaWQpOworc3RhdGljIHZvaWQgY3Ix Nl9jb25kaXRpb25hbF9yZWdpc3Rlcl91c2FnZSAodm9pZCk7CitzdGF0aWMg dm9pZCBjcjE2X292ZXJyaWRlX29wdGlvbnMgKHZvaWQpOworc3RhdGljIGJv b2wgY3IxNl9jbGFzc19saWtlbHlfc3BpbGxlZF9wIChyZWdfY2xhc3NfdCk7 CitzdGF0aWMgaW50ICBjcjE2X3JldHVybl9wb3BzX2FyZ3MgKHRyZWUsIHRy ZWUsIGludCk7CitzdGF0aWMgcnR4IGNyMTZfZnVuY3Rpb25fYXJnIChDVU1V TEFUSVZFX0FSR1MgKiwgZW51bSBtYWNoaW5lX21vZGUsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0X3RyZWUsIGJvb2wpOworc3RhdGlj IHZvaWQgY3IxNl9mdW5jdGlvbl9hcmdfYWR2YW5jZSAoQ1VNVUxBVElWRV9B UkdTICosIGVudW0gbWFjaGluZV9tb2RlLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdF90cmVlLCBib29sKTsKKworLyog U3RhY2sgbGF5b3V0IGFuZCBjYWxsaW5nIGNvbnZlbnRpb25zLiAgKi8KKwor I3VuZGVmICBUQVJHRVRfU1RSVUNUX1ZBTFVFX1JUWAorI2RlZmluZSBUQVJH RVRfU1RSVUNUX1ZBTFVFX1JUWCAgICAgCWNyMTZfc3RydWN0X3ZhbHVlX3J0 eAorI3VuZGVmICBUQVJHRVRfUkVUVVJOX0lOX01FTU9SWQorI2RlZmluZSBU QVJHRVRfUkVUVVJOX0lOX01FTU9SWSAgICAgCWNyMTZfcmV0dXJuX2luX21l bW9yeQorCisvKiBSZWxhdGl2ZSBjb3N0cyBvZiBvcGVyYXRpb25zLiAgKi8K KyN1bmRlZiAgVEFSR0VUX0FERFJFU1NfQ09TVAorI2RlZmluZSBUQVJHRVRf QUREUkVTU19DT1NUIAkJY3IxNl9hZGRyZXNzX2Nvc3QKKworLyogVGFyZ2V0 LXNwZWNpZmljIHVzZXMgb2YgJ19fYXR0cmlidXRlX18nLiAgKi8KKyN1bmRl ZiAgVEFSR0VUX0FUVFJJQlVURV9UQUJMRQorI2RlZmluZSBUQVJHRVRfQVRU UklCVVRFX1RBQkxFIAkJY3IxNl9hdHRyaWJ1dGVfdGFibGUKKyN1bmRlZiBU QVJHRVRfTkFSUk9XX1ZPTEFUSUxFX0JJVEZJRUxECisjZGVmaW5lIFRBUkdF VF9OQVJST1dfVk9MQVRJTEVfQklURklFTEQgaG9va19ib29sX3ZvaWRfZmFs c2UKKworLyogRUggcmVsYXRlZC4gICovCisjdW5kZWYgVEFSR0VUX1VOV0lO RF9XT1JEX01PREUKKyNkZWZpbmUgVEFSR0VUX1VOV0lORF9XT1JEX01PREUJ CWNyMTZfdW53aW5kX3dvcmRfbW9kZQorCisvKiBPdmVycmlkZSBPcHRpb25z LiAgKi8KKyN1bmRlZiBUQVJHRVRfT1BUSU9OX09WRVJSSURFCisjZGVmaW5l IFRBUkdFVF9PUFRJT05fT1ZFUlJJREUgIAljcjE2X292ZXJyaWRlX29wdGlv bnMgCisKKy8qIENvbmRpdGlvbmFsIHJlZ2lzdGVyIHVzdWFnZS4gICovCisj dW5kZWYgVEFSR0VUX0NPTkRJVElPTkFMX1JFR0lTVEVSX1VTQUdFIAorI2Rl ZmluZSBUQVJHRVRfQ09ORElUSU9OQUxfUkVHSVNURVJfVVNBR0UgY3IxNl9j b25kaXRpb25hbF9yZWdpc3Rlcl91c2FnZQorCisvKiBDb250cm9sbGluZyBy ZWdpc3RlciBzcGlsbHMuICAqLworI3VuZGVmIFRBUkdFVF9DTEFTU19MSUtF TFlfU1BJTExFRF9QCisjZGVmaW5lIFRBUkdFVF9DTEFTU19MSUtFTFlfU1BJ TExFRF9QIGNyMTZfY2xhc3NfbGlrZWx5X3NwaWxsZWRfcAorCisvKiBQYXNz aW5nIGZ1bmN0aW9uIGFyZ3VtZW50cy4gICovCisjdW5kZWYgVEFSR0VUX0ZV TkNUSU9OX0FSRworI2RlZmluZSBUQVJHRVRfRlVOQ1RJT05fQVJHIGNyMTZf ZnVuY3Rpb25fYXJnCisjdW5kZWYgVEFSR0VUX0ZVTkNUSU9OX0FSR19BRFZB TkNFCisjZGVmaW5lIFRBUkdFVF9GVU5DVElPTl9BUkdfQURWQU5DRSBjcjE2 X2Z1bmN0aW9uX2FyZ19hZHZhbmNlCisjdW5kZWYgVEFSR0VUX1JFVFVSTl9Q T1BTX0FSR1MKKyNkZWZpbmUgVEFSR0VUX1JFVFVSTl9QT1BTX0FSR1MgY3Ix Nl9yZXR1cm5fcG9wc19hcmdzCisKKy8qIEluaXRpYWxpemUgdGhlIEdDQyB0 YXJnZXQgc3RydWN0dXJlLiAgKi8KKyN1bmRlZiBUQVJHRVRfRlJBTUVfUE9J TlRFUl9SRVFVSVJFRAorI2RlZmluZSBUQVJHRVRfRlJBTUVfUE9JTlRFUl9S RVFVSVJFRAljcjE2X2ZyYW1lX3BvaW50ZXJfcmVxdWlyZWQKKyN1bmRlZiBU QVJHRVRfQ0FOX0VMSU1JTkFURQorI2RlZmluZSBUQVJHRVRfQ0FOX0VMSU1J TkFURSAJCWNyMTZfY2FuX2VsaW1pbmF0ZQorI3VuZGVmIFRBUkdFVF9MRUdJ VElNSVpFX0FERFJFU1MKKyNkZWZpbmUgVEFSR0VUX0xFR0lUSU1JWkVfQURE UkVTUyAJY3IxNl9sZWdpdGltaXplX2FkZHJlc3MKKworY29uc3Qgc3RydWN0 IGF0dHJpYnV0ZV9zcGVjIGNyMTZfYXR0cmlidXRlX3RhYmxlW10gPSB7Cisg IC8qIElTUnMgaGF2ZSBzcGVjaWFsIHByb2xvZ3VlIGFuZCBlcGlsb2d1ZSBy ZXF1aXJlbWVudHMuICAqLworICB7ImludGVycnVwdCIsIDAsIDAsIGZhbHNl LCB0cnVlLCB0cnVlLCBOVUxMfSwKKyAge05VTEwsIDAsIDAsIGZhbHNlLCBm YWxzZSwgZmFsc2UsIE5VTEx9Cit9OworCisvKiBUQVJHRVRfQVNNX1VOQUxJ R05FRF94eF9PUCBnZW5lcmF0ZXMgLj9ieXRlIGRpcmVjdGl2ZQorICAgLj9i eXRlIGRpcmVjdGl2ZSBhbG9uZyB3aXRoIEBjIGlzIG5vdCB1bmRlcnN0b29k IGJ5IGFzc2VtYmxlci4KKyAgIFRoZXJlZm9yZSwgbWFrZSBhbGwgVEFSR0VU X0FTTV9VTkFMSUdORURfeHhfT1Agc2FtZQorICAgYXMgVEFSR0VUX0FTTV9B TElHTkVEX3h4X09QLiAgKi8KKyN1bmRlZiBUQVJHRVRfQVNNX1VOQUxJR05F RF9ISV9PUAorI2RlZmluZSBUQVJHRVRfQVNNX1VOQUxJR05FRF9ISV9PUCAJ VEFSR0VUX0FTTV9BTElHTkVEX0hJX09QCisjdW5kZWYgVEFSR0VUX0FTTV9V TkFMSUdORURfU0lfT1AKKyNkZWZpbmUgVEFSR0VUX0FTTV9VTkFMSUdORURf U0lfT1AgCVRBUkdFVF9BU01fQUxJR05FRF9TSV9PUAorI3VuZGVmIFRBUkdF VF9BU01fVU5BTElHTkVEX0RJX09QCisjZGVmaW5lIFRBUkdFVF9BU01fVU5B TElHTkVEX0RJX09QIAlUQVJHRVRfQVNNX0FMSUdORURfRElfT1AKKworLyog VGFyZ2V0IGhvb2sgaW1wbGVtZW50YXRpb25zLiAgKi8KKworLyogSW1wbGVt ZW50cyBob29rIFRBUkdFVF9TVFJVQ1RfVkFMVUVfUlRYLiAgKi8KK3N0YXRp YyBydHgKK2NyMTZfc3RydWN0X3ZhbHVlX3J0eCAodHJlZSBmbnR5cGUgQVRU UklCVVRFX1VOVVNFRCwKKwkJICAgICAgIGludCBpbmNvbWluZyBBVFRSSUJV VEVfVU5VU0VEKQoreworICByZXR1cm4gZ2VuX3J0eF9SRUcgKFBtb2RlLCBD UjE2X1NUUlVDVF9WQUxVRV9SRUdOVU0pOworfQorCisvKiBJbXBsZW1lbnRz IGhvb2sgVEFSR0VUX1JFVFVSTl9JTl9NRU1PUlkuICAqLworc3RhdGljIGJv b2wKK2NyMTZfcmV0dXJuX2luX21lbW9yeSAodHJlZSB0eXBlLCB0cmVlIGZu dHlwZSBBVFRSSUJVVEVfVU5VU0VEKQoreworICBpZiAoVFlQRV9NT0RFICh0 eXBlKSA9PSBCTEttb2RlKQorICAgIHsKKyAgICAgIEhPU1RfV0lERV9JTlQg c2l6ZSA9IGludF9zaXplX2luX2J5dGVzICh0eXBlKTsKKyAgICAgIHJldHVy biAoKHNpemUgPT0gLTEpIHx8IChzaXplID4gOCkpOworICAgIH0KKyAgZWxz ZQorICAgIHJldHVybiBmYWxzZTsKK30KKworLyogSW1wbGVtZW50IFRBUkdF VF9DTEFTU19MSUtFTFlfU1BJTExFRF9QLiAgKi8KKworc3RhdGljIGJvb2wK K2NyMTZfY2xhc3NfbGlrZWx5X3NwaWxsZWRfcCAocmVnX2NsYXNzX3QgcmNs YXNzKQoreworICBpZiAoKHJjbGFzcykgPT0gU0hPUlRfUkVHUyB8fCAocmNs YXNzKSA9PSBET1VCTEVfQkFTRV9SRUdTIAorICAgICAgIHx8IChyY2xhc3Mp ID09IEdFTkVSQUxfUkVHUykKKyAgICByZXR1cm4gdHJ1ZTsKKworICByZXR1 cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBpbnQKK2NyMTZfcmV0dXJuX3BvcHNf YXJncyAodHJlZSBmdW5kZWNsIEFUVFJJQlVURV9VTlVTRUQsCisgICAgICAg ICAgICAgICAgICAgICAgdHJlZSBmdW50eXBlIEFUVFJJQlVURV9VTlVTRUQs IGludCBzaXplKQoreworICByZXR1cm4gMDsKK30KKworLyogUmV0dXJucyB0 cnVlIGlmIGRhdGEgbW9kZWwgc2VsZWN0ZWQgdmlhIGNvbW1hbmQgbGluZSBv cHRpb24KKyAgIGlzIHNhbWUgYXMgZnVuY3Rpb24gYXJndW1lbnQuICAqLwor Ym9vbAorY3IxNl9pc19kYXRhX21vZGVsIChlbnVtIGRhdGFfbW9kZWxfdHlw ZSBtb2RlbCkKK3sKKyAgcmV0dXJuIChtb2RlbCA9PSBkYXRhX21vZGVsKTsK K30KKworLyogUGFyc2UgcmVsZXZhbnQgb3B0aW9ucyBhbmQgb3ZlcnJpZGUu ICAqLworc3RhdGljIHZvaWQKK2NyMTZfb3ZlcnJpZGVfb3B0aW9ucyAodm9p ZCkKK3sKKyAgLyogRGlzYWJsZSAtZmRlbGV0ZS1udWxsLXBvaW50ZXItY2hl Y2tzIG9wdGlvbiBmb3IgQ1IxNiB0YXJnZXQuCisgICAgIFByb2dyYW1zIHdo aWNoIHJlbHkgb24gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBfbm90XyBo YWx0aW5nIHRoZSAKKyAgICAgcHJvZ3JhbSBtYXkgbm90IHdvcmsgcHJvcGVy bHkgd2l0aCB0aGlzIG9wdGlvbi4gU28gZGlzYWJsZSB0aGlzIAorICAgICBv cHRpb24uICAqLworICBmbGFnX2RlbGV0ZV9udWxsX3BvaW50ZXJfY2hlY2tz ID0gMDsKKworICAvKiBUbyBhdm9pZCBnZW5fcnR4X1NVQlJFRyBJQ0UuIFNJ IGdldHMgc3BsaXR0ZWQgdG8gdHdvIEhJcyB3aGVyZSAKKyAgICAgdmFsaWRh dGVfc3VicmVnIGlzIGludmFsaWQgd2l0aCB0aGUgc2Vjb25kIEhJIGhhdmlu ZyBvZmZzZXQgMgorICAgICAuT2Zmc2V0IGFwcGxpY2FibGUgdG8gYmlnIGVu ZGlhbiBtYWNoaW5lcy4gICovCisgIGZsYWdfc3BsaXRfd2lkZV90eXBlcyA9 IDA7CisKKyAgLyogSWYgRUgsIGRpc2FibGUgb3B0aW1pemF0aW9uIEdDU0Uu ICAqLworICBpZiAoZmxhZ19leGNlcHRpb25zKQorICAgIGZsYWdfZ2NzZSA9 IDA7CisKKyAgLyogSWYgLWZwaWMgb3B0aW9uLCBkYXRhX21vZGVsID09IERN X0ZBUi4gICovCisgIGlmIChmbGFnX3BpYyA9PSBORUFSX1BJQykKKyAgICB7 CisgICAgICBkYXRhX21vZGVsID0gRE1fRkFSOworICAgIH0KKworICAvKiBU aGUgb25seSBvcHRpb24gd2Ugd2FudCB0byBleGFtaW5lIGlzIGRhdGEgbW9k ZWwgb3B0aW9uLiAgKi8KKyAgaWYgKGNyMTZfZGF0YV9tb2RlbCkKKyAgICB7 CisgICAgICBpZiAoc3RyY21wIChjcjE2X2RhdGFfbW9kZWwsICJtZWRpdW0i KSA9PSAwKQorCWRhdGFfbW9kZWwgPSBETV9ERUZBVUxUOworICAgICAgZWxz ZSBpZiAoc3RyY21wIChjcjE2X2RhdGFfbW9kZWwsICJuZWFyIikgPT0gMCkK KwlkYXRhX21vZGVsID0gRE1fTkVBUjsKKyAgICAgIGVsc2UgaWYgKHN0cmNt cCAoY3IxNl9kYXRhX21vZGVsLCAiZmFyIikgPT0gMCkKKwl7CisJICBpZiAo VEFSR0VUX0NSMTZDUCkKKwkgICAgZGF0YV9tb2RlbCA9IERNX0ZBUjsKKwkg IGVsc2UKKwkgICAgZXJyb3IgKCJkYXRhLW1vZGVsPWZhciBub3QgdmFsaWQg Zm9yIGNyMTZjIGFyY2hpdGVjdHVyZS4iKTsKKwl9CisgICAgICBlbHNlCisJ ZXJyb3IgKCJJbnZhbGlkIGRhdGEgbW9kZWwgb3B0aW9uIC1tZGF0YS1tb2Rl bD0lcyIsIGNyMTZfZGF0YV9tb2RlbCk7CisgICAgfQorICBlbHNlCisgICAg ZGF0YV9tb2RlbCA9IERNX0RFRkFVTFQ7CisKKyAgLyogTGlicmFyeSBpZGVu dGlmaWNhdGlvbi4gICovCisgIGlmIChjcjE2X2xpYl9pZF9naXZlbiAmJiAh VEFSR0VUX0lEX1NIQVJFRF9MSUJSQVJZKQorICAgIGVycm9yICgiLW1zaGFy ZWQtbGlicmFyeS1pZD0gc3BlY2lmaWVkIHdpdGhvdXQgLW1pZC1zaGFyZWQt bGlicmFyeSIpOworCisgIGlmIChUQVJHRVRfSURfU0hBUkVEX0xJQlJBUlkp CisgICAgZmxhZ19waWMgPSBGQVJfUElDOworCit9CisKKy8qIEltcGxlbWVu dHMgdGhlIG1hY3JvICBUQVJHRVRfQ09ORElUSU9OQUxfUkVHSVNURVJfVVNB R0UuICAqLworc3RhdGljIHZvaWQKK2NyMTZfY29uZGl0aW9uYWxfcmVnaXN0 ZXJfdXNhZ2UgKHZvaWQpCit7CisgIGlmIChmbGFnX3BpYykKKyAgICB7Cisg ICAgICBmaXhlZF9yZWdzWzEyXSA9IGNhbGxfdXNlZF9yZWdzWzEyXSA9IDE7 CisgICAgfQorfQorCisvKiBTdGFjayBsYXlvdXQgYW5kIGNhbGxpbmcgY29u dmVudGlvbnMgcm91dGluZXMuICAqLworCisvKiBSZXR1cm4gbm9uemVybyBp ZiB0aGUgY3VycmVudCBmdW5jdGlvbiBiZWluZyBjb21waWxlZCBpcyBhbiBp bnRlcnJ1cHQKKyAgIGZ1bmN0aW9uIGFzIHNwZWNpZmllZCBieSB0aGUgImlu dGVycnVwdCIgYXR0cmlidXRlLiAgKi8KK2ludAorY3IxNl9pbnRlcnJ1cHRf ZnVuY3Rpb25fcCAodm9pZCkKK3sKKyAgdHJlZSBhdHRyaWJ1dGVzOworCisg IGF0dHJpYnV0ZXMgPSBUWVBFX0FUVFJJQlVURVMgKFRSRUVfVFlQRSAoY3Vy cmVudF9mdW5jdGlvbl9kZWNsKSk7CisgIHJldHVybiAobG9va3VwX2F0dHJp YnV0ZSAoImludGVycnVwdCIsIGF0dHJpYnV0ZXMpICE9IE5VTExfVFJFRSk7 Cit9CisKKy8qIENvbXB1dGUgdmFsdWVzIGZvciB0aGUgYXJyYXkgY3VycmVu dF9mcmFtZV9pbmZvLnNhdmVfcmVncyBhbmQgdGhlIHZhcmlhYmxlIAorICAg Y3VycmVudF9mcmFtZV9pbmZvLnJlZ19zaXplLiBUaGUgaW5kZXggb2YgY3Vy cmVudF9mcmFtZV9pbmZvLnNhdmVfcmVncyAKKyAgIGlzIG51bWJlcnMgb2Yg cmVnaXN0ZXIsIGVhY2ggd2lsbCBnZXQgMSBpZiB3ZSBuZWVkIHRvIHNhdmUg aXQgaW4gdGhlIAorICAgY3VycmVudCBmdW5jdGlvbiwgMCBpZiBub3QuIGN1 cnJlbnRfZnJhbWVfaW5mby5yZWdfc2l6ZSBpcyB0aGUgdG90YWwgc3VtIAor ICAgb2YgdGhlIHJlZ2lzdGVycyBiZWluZyBzYXZlZC4gICovCitzdGF0aWMg dm9pZAorY3IxNl9jb21wdXRlX3NhdmVfcmVncyAodm9pZCkKK3sKKyAgdW5z aWduZWQgaW50IHJlZ25vOworCisgIC8qIEluaXRpYWxpemUgaGVyZSBzbyBp biBjYXNlIHRoZSBmdW5jdGlvbiBpcyBuby1yZXR1cm4gaXQgd2lsbCBiZSAt MS4gICovCisgIGN1cnJlbnRfZnJhbWVfaW5mby5sYXN0X3JlZ190b19zYXZl ID0gLTE7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgbnVtYmVyIG9mIGJ5dGVz IHRvIGJlIHNhdmVkLiAqLworICBjdXJyZW50X2ZyYW1lX2luZm8ucmVnX3Np emUgPSAwOworCisgIC8qIE5vIG5lZWQgdG8gc2F2ZSBhbnkgcmVnaXN0ZXJz IGlmIHRoZSBmdW5jdGlvbiBuZXZlciByZXR1cm5zLiAgKi8KKyAgaWYgKCFU QVJHRVRfSURfU0hBUkVEX0xJQlJBUlkgJiYKKyAgICAgIEZVTkNfSVNfTk9S RVRVUk5fUCAoY3VycmVudF9mdW5jdGlvbl9kZWNsKSAmJiAhTVVTVF9TQVZF X1JFR1NfUCAoKSkKKyAgICByZXR1cm47CisKKyAgZm9yIChyZWdubyA9IDA7 IHJlZ25vIDwgRklSU1RfUFNFVURPX1JFR0lTVEVSOyByZWdubysrKQorICAg IHsKKyAgICAgIGlmIChUQVJHRVRfSURfU0hBUkVEX0xJQlJBUlkgJiYgUElD X09GRlNFVF9UQUJMRV9SRUdOVU0gPT0gcmVnbm8pCisJeworCSAgY3VycmVu dF9mcmFtZV9pbmZvLnNhdmVfcmVnc1tyZWdub10gPSAxOworCSAgY29udGlu dWU7CisJfQorICAgICAgZWxzZSBpZiAoZml4ZWRfcmVnc1tyZWdub10pCisJ eworCSAgY3VycmVudF9mcmFtZV9pbmZvLnNhdmVfcmVnc1tyZWdub10gPSAw OworCSAgY29udGludWU7CisJfQorCisgICAgICAvKiBJZiB0aGlzIHJlZyBp cyB1c2VkIGFuZCBub3QgY2FsbC11c2VkIChleGNlcHQgUkEpLCBzYXZlIGl0 LiAgKi8KKyAgICAgIGlmIChjcjE2X2ludGVycnVwdF9mdW5jdGlvbl9wICgp KQorCXsKKwkgIGlmICghY3VycmVudF9mdW5jdGlvbl9pc19sZWFmICYmIGNh bGxfdXNlZF9yZWdzW3JlZ25vXSkKKwkgICAgLyogVGhpcyBpcyBhIHZvbGF0 aWxlIHJlZyBpbiBhIG5vbi1sZWFmIGludGVycnVwdCByb3V0aW5lIC0gc2F2 ZSAKKwkgICAgICAgaXQgZm9yIHRoZSBzYWtlIG9mIGl0cyBzb25zLiAgKi8K KwkgICAgY3VycmVudF9mcmFtZV9pbmZvLnNhdmVfcmVnc1tyZWdub10gPSAx OworCSAgZWxzZSBpZiAoZGZfcmVnc19ldmVyX2xpdmVfcCAocmVnbm8pKQor CSAgICAvKiBUaGlzIHJlZyBpcyB1c2VkIC0gc2F2ZSBpdC4gICovCisJICAg IGN1cnJlbnRfZnJhbWVfaW5mby5zYXZlX3JlZ3NbcmVnbm9dID0gMTsKKwkg IGVsc2UKKwkgICAgLyogVGhpcyByZWcgaXMgbm90IHVzZWQsIGFuZCBpcyBu b3QgYSB2b2xhdGlsZSAtIGRvbid0IHNhdmUuICAqLworCSAgICBjdXJyZW50 X2ZyYW1lX2luZm8uc2F2ZV9yZWdzW3JlZ25vXSA9IDA7CisJfQorICAgICAg ZWxzZQorCXsKKwkgIC8qIElmIHRoaXMgcmVnIGlzIHVzZWQgYW5kIG5vdCBj YWxsLXVzZWQgKGV4Y2VwdCBSQSksIHNhdmUgaXQuICAqLworCSAgaWYgKGRm X3JlZ3NfZXZlcl9saXZlX3AgKHJlZ25vKQorCSAgICAgICYmICghY2FsbF91 c2VkX3JlZ3NbcmVnbm9dIHx8IHJlZ25vID09IFJFVFVSTl9BRERSRVNTX1JF R05VTSkpCisJICAgIGN1cnJlbnRfZnJhbWVfaW5mby5zYXZlX3JlZ3NbcmVn bm9dID0gMTsKKwkgIGVsc2UKKwkgICAgY3VycmVudF9mcmFtZV9pbmZvLnNh dmVfcmVnc1tyZWdub10gPSAwOworCX0KKyAgICB9CisKKyAgLyogU2F2ZSBy ZWdpc3RlcnMgc28gdGhlIGV4Y2VwdGlvbiBoYW5kbGVyIGNhbiBtb2RpZnkg dGhlbS4gICovCisgIGlmIChjcnRsLT5jYWxsc19laF9yZXR1cm4pCisgICAg eworICAgICAgdW5zaWduZWQgaW50IGk7CisKKyAgICAgIGZvciAoaSA9IDA7 OyArK2kpCisJeworCSAgcmVnbm8gPSBFSF9SRVRVUk5fREFUQV9SRUdOTyAo aSk7CisJICBpZiAoSU5WQUxJRF9SRUdOVU0gPT0gcmVnbm8pCisJICAgIGJy ZWFrOworCSAgY3VycmVudF9mcmFtZV9pbmZvLnNhdmVfcmVnc1tyZWdub10g PSAxOworCX0KKyAgICB9CisKKyAgZm9yIChyZWdubyA9IDA7IHJlZ25vIDwg RklSU1RfUFNFVURPX1JFR0lTVEVSOyByZWdubysrKQorICAgIGlmIChjdXJy ZW50X2ZyYW1lX2luZm8uc2F2ZV9yZWdzW3JlZ25vXSA9PSAxKQorICAgICAg eworCWN1cnJlbnRfZnJhbWVfaW5mby5sYXN0X3JlZ190b19zYXZlID0gcmVn bm87CisJaWYgKHJlZ25vID49IENSMTZfRklSU1RfRFdPUkRfUkVHSVNURVIp CisJICBjdXJyZW50X2ZyYW1lX2luZm8ucmVnX3NpemUgKz0gQ1IxNl9VTklU U19QRVJfRFdPUkQ7CisJZWxzZQorCSAgY3VycmVudF9mcmFtZV9pbmZvLnJl Z19zaXplICs9IFVOSVRTX1BFUl9XT1JEOworICAgICAgfQorfQorCisvKiBD b21wdXRlIHRoZSBzaXplIG9mIHRoZSBsb2NhbCBhcmVhIGFuZCB0aGUgc2l6 ZSB0byBiZSBhZGp1c3RlZCBieSB0aGUKKyAgIHByb2xvZ3VlIGFuZCBlcGls b2d1ZS4gICovCitzdGF0aWMgdm9pZAorY3IxNl9jb21wdXRlX2ZyYW1lICh2 b2lkKQoreworICAvKiBGb3IgYWxpZ25pbmcgdGhlIGxvY2FsIHZhcmlhYmxl cy4gICovCisgIGludCBzdGFja19hbGlnbm1lbnQgPSBTVEFDS19CT1VOREFS WSAvIEJJVFNfUEVSX1VOSVQ7CisgIGludCBwYWRkaW5nX2xvY2FsczsKKwor ICAvKiBQYWRkaW5nIG5lZWRlZCBmb3IgZWFjaCBlbGVtZW50IG9mIHRoZSBm cmFtZS4gICovCisgIGN1cnJlbnRfZnJhbWVfaW5mby52YXJfc2l6ZSA9IGdl dF9mcmFtZV9zaXplICgpOworCisgIC8qIEFsaWduIHRvIHRoZSBzdGFjayBh bGlnbm1lbnQuICAqLworICBwYWRkaW5nX2xvY2FscyA9IGN1cnJlbnRfZnJh bWVfaW5mby52YXJfc2l6ZSAlIHN0YWNrX2FsaWdubWVudDsKKyAgaWYgKHBh ZGRpbmdfbG9jYWxzKQorICAgIHBhZGRpbmdfbG9jYWxzID0gc3RhY2tfYWxp Z25tZW50IC0gcGFkZGluZ19sb2NhbHM7CisKKyAgY3VycmVudF9mcmFtZV9p bmZvLnZhcl9zaXplICs9IHBhZGRpbmdfbG9jYWxzOworICBjdXJyZW50X2Zy YW1lX2luZm8udG90YWxfc2l6ZSA9IGN1cnJlbnRfZnJhbWVfaW5mby52YXJf c2l6ZSAKKwkJCSAgICsgKEFDQ1VNVUxBVEVfT1VUR09JTkdfQVJHUworCQkJ ICAgID8gY3J0bC0+b3V0Z29pbmdfYXJnc19zaXplIDogMCk7Cit9CisKKy8q IEltcGxlbWVudHMgdGhlIG1hY3JvIElOSVRJQUxfRUxJTUlOQVRJT05fT0ZG U0VULCByZXR1cm4gdGhlIE9GRlNFVC4gICovCitpbnQKK2NyMTZfaW5pdGlh bF9lbGltaW5hdGlvbl9vZmZzZXQgKGludCBmcm9tLCBpbnQgdG8pCit7Cisg IC8qIENvbXB1dGUgdGhpcyBzaW5jZSB3ZSBuZWVkIHRvIHVzZSBjdXJyZW50 X2ZyYW1lX2luZm8ucmVnX3NpemUuICAqLworICBjcjE2X2NvbXB1dGVfc2F2 ZV9yZWdzICgpOworCisgIC8qIENvbXB1dGUgdGhpcyBzaW5jZSB3ZSBuZWVk IHRvIHVzZSBjdXJyZW50X2ZyYW1lX2luZm8udmFyX3NpemUuICAqLworICBj cjE2X2NvbXB1dGVfZnJhbWUgKCk7CisKKyAgaWYgKCgoZnJvbSkgPT0gRlJB TUVfUE9JTlRFUl9SRUdOVU0pICYmICgodG8pID09IFNUQUNLX1BPSU5URVJf UkVHTlVNKSkKKyAgICByZXR1cm4gKEFDQ1VNVUxBVEVfT1VUR09JTkdfQVJH UyA/IGNydGwtPm91dGdvaW5nX2FyZ3Nfc2l6ZSA6IDApOworICBlbHNlIGlm ICgoKGZyb20pID09IEFSR19QT0lOVEVSX1JFR05VTSkgJiYgKCh0bykgPT0g RlJBTUVfUE9JTlRFUl9SRUdOVU0pKQorICAgIHJldHVybiAoY3VycmVudF9m cmFtZV9pbmZvLnJlZ19zaXplICsgY3VycmVudF9mcmFtZV9pbmZvLnZhcl9z aXplKTsKKyAgZWxzZSBpZiAoKChmcm9tKSA9PSBBUkdfUE9JTlRFUl9SRUdO VU0pICYmICgodG8pID09IFNUQUNLX1BPSU5URVJfUkVHTlVNKSkKKyAgICBy ZXR1cm4gKGN1cnJlbnRfZnJhbWVfaW5mby5yZWdfc2l6ZSArIGN1cnJlbnRf ZnJhbWVfaW5mby52YXJfc2l6ZSAKKwkgICAgKyAoQUNDVU1VTEFURV9PVVRH T0lOR19BUkdTID8gY3J0bC0+b3V0Z29pbmdfYXJnc19zaXplIDogMCkpOwor ICBlbHNlCisgICAgZ2NjX3VucmVhY2hhYmxlICgpOworfQorCisvKiBSZWdp c3RlciBVc2FnZS4gICovCisKKy8qIFJldHVybiB0aGUgY2xhc3MgbnVtYmVy IG9mIHRoZSBzbWFsbGVzdCBjbGFzcyBjb250YWluaW5nIHJlZyBudW1iZXIg UkVHTk8uCisgICBUaGlzIGNvdWxkIGJlIGEgY29uZGl0aW9uYWwgZXhwcmVz c2lvbiBvciBjb3VsZCBpbmRleCBhbiBhcnJheS4gICovCitlbnVtIHJlZ19j bGFzcworY3IxNl9yZWdub19yZWdfY2xhc3MgKGludCByZWdubykKK3sKKyAg aWYgKChyZWdubyA+PSAwKSAmJiAocmVnbm8gPCBDUjE2X0ZJUlNUX0RXT1JE X1JFR0lTVEVSKSkKKyAgICByZXR1cm4gU0hPUlRfUkVHUzsKKworICBpZiAo KHJlZ25vID49IENSMTZfRklSU1RfRFdPUkRfUkVHSVNURVIpICYmIChyZWdu byA8IEZJUlNUX1BTRVVET19SRUdJU1RFUikpCisgICAgcmV0dXJuIExPTkdf UkVHUzsKKworICByZXR1cm4gTk9fUkVHUzsKK30KKworLyogUmV0dXJuIDEg aWYgaGFyZCByZWdpc3RlciBSRUdOTyBjYW4gaG9sZCBhIHZhbHVlIG9mIG1h Y2hpbmUtbW9kZSBNT0RFLiAgKi8KK2ludAorY3IxNl9oYXJkX3JlZ25vX21v ZGVfb2sgKGludCByZWdubywgZW51bSBtYWNoaW5lX21vZGUgbW9kZSkKK3sK KyAgaWYgKChHRVRfTU9ERV9TSVpFIChtb2RlKSA+PSA0KSAmJiAocmVnbm8g PT0gMTEpKQorICAgICAgICByZXR1cm4gMDsKKyAKKyAgaWYgKG1vZGUgPT0g REltb2RlIHx8IG1vZGUgPT0gREZtb2RlKQorICAgIHsKKyAgICAgIGlmICgo cmVnbm8gPiA4KSB8fCAocmVnbm8gJiAxKSkKKwlyZXR1cm4gMDsKKyAgICAg IHJldHVybiAxOworICAgIH0KKworICBpZiAoKFRBUkdFVF9JTlQzMikKKyAg ICAgICYmICgocmVnbm8gPj0gMTIpICYmIChHRVRfTU9ERV9TSVpFIChtb2Rl KSA8IDQgKSkpCisgICAgIHJldHVybiAwOworCisgIC8qIENDIGNhbiBvbmx5 IGhvbGQgQ0Ntb2RlIHZhbHVlcy4gICovCisgIGlmIChHRVRfTU9ERV9DTEFT UyAobW9kZSkgPT0gTU9ERV9DQykKKyAgICByZXR1cm4gMDsKKyAgcmV0dXJu IDE7Cit9CisKKy8qIFBhc3NpbmcgZnVuY3Rpb24gYXJndW1lbnRzLiAgKi8K KworLyogSWYgZW5vdWdoIHBhcmFtIHJlZ3MgYXJlIGF2YWlsYWJsZSBmb3Ig cGFzc2luZyB0aGUgcGFyYW0gb2YgdHlwZSBUWVBFIHJldHVybgorICAgdGhl IG51bWJlciBvZiByZWdpc3RlcnMgbmVlZGVkIGVsc2UgMC4gICovCitzdGF0 aWMgaW50Citlbm91Z2hfcmVnc19mb3JfcGFyYW0gKENVTVVMQVRJVkVfQVJH UyAqIGN1bSwgdHJlZSB0eXBlLAorCQkgICAgICAgZW51bSBtYWNoaW5lX21v ZGUgbW9kZSkKK3sKKyAgaW50IHR5cGVfc2l6ZTsKKyAgaW50IHJlbWFpbmlu Z19zaXplOworCisgIGlmIChtb2RlICE9IEJMS21vZGUpCisgICAgdHlwZV9z aXplID0gR0VUX01PREVfQklUU0laRSAobW9kZSk7CisgIGVsc2UKKyAgICB0 eXBlX3NpemUgPSBpbnRfc2l6ZV9pbl9ieXRlcyAodHlwZSkgKiBCSVRTX1BF Ul9VTklUOworCisgIHJlbWFpbmluZ19zaXplID0gQklUU19QRVJfV09SRCAq IChNQVhfUkVHX0ZPUl9QQVNTSU5HX0FSR1MKKwkJCQkgICAgLSAoTUlOX1JF R19GT1JfUEFTU0lOR19BUkdTICsgY3VtLT5pbnRzKSArCisJCQkJICAgIDEp OworCisgIC8qIEFueSB2YXJpYWJsZSB3aGljaCBpcyB0b28gYmlnIHRvIHBh c3MgaW4gdHdvIHJlZ2lzdGVycywgd2lsbCBwYXNzIG9uCisgICAgIHN0YWNr LiAgKi8KKyAgaWYgKChyZW1haW5pbmdfc2l6ZSA+PSB0eXBlX3NpemUpICYm ICh0eXBlX3NpemUgPD0gMiAqIEJJVFNfUEVSX1dPUkQpKQorICAgIHJldHVy biAodHlwZV9zaXplICsgQklUU19QRVJfV09SRCAtIDEpIC8gQklUU19QRVJf V09SRDsKKworICByZXR1cm4gMDsKK30KKworLyogSW1wbGVtZW50cyB0aGUg bWFjcm8gRlVOQ1RJT05fQVJHIGRlZmluZWQgaW4gY3IxNi5oLiAgKi8KK3N0 YXRpYyBydHgKK2NyMTZfZnVuY3Rpb25fYXJnIChDVU1VTEFUSVZFX0FSR1Mg KiBjdW0sIGVudW0gbWFjaGluZV9tb2RlIG1vZGUsCisJCSAgIGNvbnN0X3Ry ZWUgdHlwZSwgYm9vbCBuYW1lZCBBVFRSSUJVVEVfVU5VU0VEKQoreworICBj dW0tPmxhc3RfcGFybV9pbl9yZWcgPSAwOworCisgIC8qIGZ1bmN0aW9uX2Fy ZyAoKSBpcyBjYWxsZWQgd2l0aCB0aGlzIHR5cGUganVzdCBhZnRlciBhbGwg dGhlIGFyZ3MgaGF2ZSAKKyAgICAgaGFkIHRoZWlyIHJlZ2lzdGVycyBhc3Np Z25lZC4gVGhlIHJ0eCB0aGF0IGZ1bmN0aW9uX2FyZyByZXR1cm5zIGZyb20g CisgICAgIHRoaXMgdHlwZSBpcyBzdXBwb3NlZCB0byBwYXNzIHRvICdnZW5f Y2FsbCcgYnV0IGN1cnJlbnRseSBpdCBpcyBub3QgCisgICAgIGltcGxlbWVu dGVkIChzZWUgbWFjcm8gR0VOX0NBTEwpLiAgKi8KKyAgaWYgKHR5cGUgPT0g dm9pZF90eXBlX25vZGUpCisgICAgcmV0dXJuIE5VTExfUlRYOworCisgIGlm ICh0YXJnZXRtLmNhbGxzLm11c3RfcGFzc19pbl9zdGFjayAobW9kZSwgdHlw ZSkgfHwgKGN1bS0+aW50cyA8IDApKQorICAgIHJldHVybiBOVUxMX1JUWDsK KworICBpZiAobW9kZSA9PSBCTEttb2RlKQorICAgIHsKKyAgICAgIC8qIEVu YWJsZSBzdHJ1Y3R1cmVzIHRoYXQgbmVlZCBwYWRkaW5nIGJ5dGVzIGF0IHRo ZSBlbmQgdG8gcGFzcyB0byBhCisgICAgICAgICBmdW5jdGlvbiBpbiByZWdp c3RlcnMuICAqLworICAgICAgaWYgKGVub3VnaF9yZWdzX2Zvcl9wYXJhbSAo Y3VtLCB0eXBlLCBtb2RlKSAhPSAwKQorCXsKKwkgIGN1bS0+bGFzdF9wYXJt X2luX3JlZyA9IDE7CisJICByZXR1cm4gZ2VuX3J0eF9SRUcgKG1vZGUsIE1J Tl9SRUdfRk9SX1BBU1NJTkdfQVJHUyArIGN1bS0+aW50cyk7CisJfQorICAg IH0KKworICBpZiAoKE1JTl9SRUdfRk9SX1BBU1NJTkdfQVJHUyArIGN1bS0+ aW50cykgPiBNQVhfUkVHX0ZPUl9QQVNTSU5HX0FSR1MpCisgICAgcmV0dXJu IE5VTExfUlRYOworICBlbHNlCisgICAgeworICAgICAgaWYgKGVub3VnaF9y ZWdzX2Zvcl9wYXJhbSAoY3VtLCB0eXBlLCBtb2RlKSAhPSAwKQorCXsKKwkg IGN1bS0+bGFzdF9wYXJtX2luX3JlZyA9IDE7CisJICByZXR1cm4gZ2VuX3J0 eF9SRUcgKG1vZGUsIE1JTl9SRUdfRk9SX1BBU1NJTkdfQVJHUyArIGN1bS0+ aW50cyk7CisJfQorICAgIH0KKworICByZXR1cm4gTlVMTF9SVFg7Cit9CisK Ky8qIEltcGxlbWVudHMgdGhlIG1hY3JvIElOSVRfQ1VNVUxBVElWRV9BUkdT IGRlZmluZWQgaW4gY3IxNi5oLiAgKi8KK3ZvaWQKK2NyMTZfaW5pdF9jdW11 bGF0aXZlX2FyZ3MgKENVTVVMQVRJVkVfQVJHUyAqIGN1bSwgdHJlZSBmbnR5 cGUsCisJCQkgICBydHggbGliZnVuYyBBVFRSSUJVVEVfVU5VU0VEKQorewor ICB0cmVlIHBhcmFtLCBuZXh0X3BhcmFtOworCisgIGN1bS0+aW50cyA9IDA7 CisKKyAgLyogRGV0ZXJtaW5lIGlmIHRoaXMgZnVuY3Rpb24gaGFzIHZhcmlh YmxlIGFyZ3VtZW50cy4gIFRoaXMgaXMgaW5kaWNhdGVkIGJ5CisgICAgIHRo ZSBsYXN0IGFyZ3VtZW50IGJlaW5nICd2b2lkX3R5cGVfbW9kZScgaWYgdGhl cmUgYXJlIG5vIHZhcmlhYmxlCisgICAgIGFyZ3VtZW50cy4gIENoYW5nZSBo ZXJlIGZvciBhIGRpZmZlcmVudCB2YXJhcmcuICAqLworICBmb3IgKHBhcmFt ID0gKGZudHlwZSkgPyBUWVBFX0FSR19UWVBFUyAoZm50eXBlKSA6IDA7Cisg ICAgICAgcGFyYW0gIT0gKHRyZWUpIDA7IHBhcmFtID0gbmV4dF9wYXJhbSkK KyAgICB7CisgICAgICBuZXh0X3BhcmFtID0gVFJFRV9DSEFJTiAocGFyYW0p OworICAgICAgaWYgKChuZXh0X3BhcmFtID09ICh0cmVlKSAwKSAmJiAoVFJF RV9WQUxVRSAocGFyYW0pICE9IHZvaWRfdHlwZV9ub2RlKSkKKwl7CisJICBj dW0tPmludHMgPSAtMTsKKwkgIHJldHVybjsKKwl9CisgICAgfQorfQorCisv KiBJbXBsZW1lbnRzIHRoZSBtYWNybyBGVU5DVElPTl9BUkdfQURWQU5DRSBk ZWZpbmVkIGluIGNyMTYuaC4gICovCitzdGF0aWMgdm9pZAorY3IxNl9mdW5j dGlvbl9hcmdfYWR2YW5jZSAoQ1VNVUxBVElWRV9BUkdTICogY3VtLCBlbnVt IG1hY2hpbmVfbW9kZSBtb2RlLAorCQkJICAgY29uc3RfdHJlZSB0eXBlLCBi b29sIG5hbWVkIEFUVFJJQlVURV9VTlVTRUQpCit7CisgIC8qIGwgaG9sZHMg dGhlIG51bWJlciBvZiByZWdpc3RlcnMgcmVxdWlyZWQuICAqLworICBpbnQg bCA9IEdFVF9NT0RFX0JJVFNJWkUgKG1vZGUpIC8gQklUU19QRVJfV09SRDsK KworICAvKiBJZiB0aGUgcGFyYW1ldGVyIGlzbid0IHBhc3NlZCBvbiBhIHJl Z2lzdGVyIGRvbid0IGFkdmFuY2UgY3VtLiAgKi8KKyAgaWYgKCFjdW0tPmxh c3RfcGFybV9pbl9yZWcpCisgICAgcmV0dXJuOworCisgIGlmICh0YXJnZXRt LmNhbGxzLm11c3RfcGFzc19pbl9zdGFjayAobW9kZSwgdHlwZSkgfHwgKGN1 bS0+aW50cyA8IDApKQorICAgIHJldHVybjsKKworICBpZiAoKG1vZGUgPT0g U0ltb2RlKSB8fCAobW9kZSA9PSBISW1vZGUpCisgICAgICB8fCAobW9kZSA9 PSBRSW1vZGUpIHx8IChtb2RlID09IERJbW9kZSkpCisgICAgeworICAgICAg aWYgKGwgPD0gMSkKKwljdW0tPmludHMgKz0gMTsKKyAgICAgIGVsc2UKKwlj dW0tPmludHMgKz0gbDsKKyAgICB9CisgIGVsc2UgaWYgKChtb2RlID09IFNG bW9kZSkgfHwgKG1vZGUgPT0gREZtb2RlKSkKKyAgICBjdW0tPmludHMgKz0g bDsKKyAgZWxzZSBpZiAoKG1vZGUpID09IEJMS21vZGUpCisgICAgeworICAg ICAgaWYgKChsID0gZW5vdWdoX3JlZ3NfZm9yX3BhcmFtIChjdW0sIHR5cGUs IG1vZGUpKSAhPSAwKQorCWN1bS0+aW50cyArPSBsOworICAgIH0KKyAgcmV0 dXJuOworfQorCisvKiBJbXBsZW1lbnRzIHRoZSBtYWNybyBGVU5DVElPTl9B UkdfUkVHTk9fUCBkZWZpbmVkIGluIGNyMTYuaC4KKyAgIFJldHVybiBub256 ZXJvIGlmIE4gaXMgYSByZWdpc3RlciB1c2VkIGZvciBwYXNzaW5nIHBhcmFt ZXRlcnMuICAqLworaW50CitjcjE2X2Z1bmN0aW9uX2FyZ19yZWdub19wIChp bnQgbikKK3sKKyAgcmV0dXJuICgobiA8PSBNQVhfUkVHX0ZPUl9QQVNTSU5H X0FSR1MpICYmIChuID49IE1JTl9SRUdfRk9SX1BBU1NJTkdfQVJHUykpOwor fQorCisvKiBBZGRyZXNzaW5nIG1vZGVzLiAKKyAgIEZvbGxvd2luZyBzZXQg b2YgZnVuY3Rpb24gaW1wbGVtZW50IHRoZSBtYWNybyBHT19JRl9MRUdJVElN QVRFX0FERFJFU1MKKyAgIGRlZmluZWQgaW4gY3IxNi5oLiAgKi8KKworLyog SGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIGlmIGlzIGEgdmFsaWQgYmFzZSBy ZWdpc3RlciB0aGF0IGNhbgorICAgaG9sZCBhZGRyZXNzLiAgKi8KK3N0YXRp YyBpbnQKK2NyMTZfYWRkcl9yZWdfcCAocnR4IGFkZHJfcmVnKQoreworICBy dHggcmVnOworCisgIGlmIChSRUdfUCAoYWRkcl9yZWcpKQorICAgIHJlZyA9 IGFkZHJfcmVnOworICBlbHNlIGlmICgoR0VUX0NPREUgKGFkZHJfcmVnKSA9 PSBTVUJSRUcpCisJICAgJiYgUkVHX1AgKFNVQlJFR19SRUcgKGFkZHJfcmVn KSkKKwkgICAmJiAoR0VUX01PREVfU0laRSAoR0VUX01PREUgKFNVQlJFR19S RUcgKGFkZHJfcmVnKSkpCisJICAgICAgIDw9IFVOSVRTX1BFUl9XT1JEKSkK KyAgICByZWcgPSBTVUJSRUdfUkVHIChhZGRyX3JlZyk7CisgIGVsc2UKKyAg ICByZXR1cm4gRkFMU0U7CisKKyAgaWYgKEdFVF9NT0RFIChyZWcpICE9IFBt b2RlKQorICAgIHJldHVybiBGQUxTRTsKKworICByZXR1cm4gVFJVRTsKK30K KworLyogSGVscGVyIGZ1bmN0aW9uczogQ3JlYXRlZCBzcGVjaWZpY2FsbHkg Zm9yIGRlY29tcG9zaW5nIG9wZXJhbmQgb2YgQ09OU1QKKyAgIFJlY3Vyc2l2 ZWx5IGxvb2sgaW50byBleHByZXNzaW9uIHggZm9yIGNvZGUgb3IgZGF0YSBz eW1ib2wuCisgICBUaGUgZnVuY3Rpb24gZXhwZWN0cyB0aGUgZXhwcmVzc2lv biB0byBjb250YWluIGNvbWJpbmF0aW9uIG9mIAorICAgU1lNQk9MX1JFRiwg Q09OU1RfSU5ULCAoUExVUyBvciBNSU5VUykKKyAgIExBQkVMX1JFRiwgQ09O U1RfSU5ULCAoUExVUyBvciBNSU5VUykKKyAgIFNZTUJPTF9SRUYKKyAgIExB QkVMX1JFRgorICAgQWxsIG90aGVyIGNvbWJpbmF0aW9ucyB3aWxsIHJlc3Vs dCBpbiBjb2RlID0gLTEgYW5kIGRhdGEgPSBJTExFR0FMX0RNCisgICBjb2Rl IGRhdGEKKyAgIC0xICAgSUxMRUdBTF9ETSAgIFRoZSBleHByZXNzaW9uIGRp ZCBub3QgY29udGFpbiBTWU1CT0xfUkVGIG9yIExBQkVMX1JFRgorICAgIDAg ICBETV9GQVIgICAgICAgU1lNQk9MX1JFRiB3YXMgZm91bmQgYW5kIGl0IHdh cyBmYXIgZGF0YSByZWZlcmVuY2UuIAorICAgIDAgICBETV9ERUZBVUxUICAg U1lNQk9MX1JFRiB3YXMgZm91bmQgYW5kIGl0IHdhcyBtZWRpdW0gZGF0YSBy ZWZlcmVuY2UuIAorICAgIDEgICBJTExFR0FMX0RNICAgTEFCRUxfUkVGIHdh cyBmb3VuZC4gCisgICAgMiAgIElMTEVHQUxfRE0gICBTWU1CT0xfUkVGIHdh cyBmb3VuZCBhbmQgaXQgd2FzIGZ1bmN0aW9uIHJlZmVyZW5jZS4gICovCit2 b2lkCitjcjE2X2RlY29tcG9zZV9jb25zdCAocnR4IHgsIGludCAqY29kZSwg ZW51bSBkYXRhX21vZGVsX3R5cGUgKmRhdGEsCisJCSAgICAgIGJvb2wgdHJl YXRfYXNfY29uc3QpCit7CisgICpjb2RlID0gLTE7CisgICpkYXRhID0gSUxM RUdBTF9ETTsKKyAgc3dpdGNoIChHRVRfQ09ERSAoeCkpCisgICAgeworICAg IGNhc2UgU1lNQk9MX1JFRjoKKyAgICAgICpjb2RlID0gU1lNQk9MX1JFRl9G VU5DVElPTl9QICh4KSA/IDIgOiAwOworICAgICAgLyogMiBpbmRpY2F0ZXMg ZnVuYyBzeW0uICAqLworICAgICAgaWYgKCpjb2RlID09IDApCisJeworCSAg aWYgKENSMTZfVEFSR0VUX0RBVEFfTkVBUikKKwkgICAgKmRhdGEgPSBETV9E RUZBVUxUOworCSAgZWxzZSBpZiAoQ1IxNl9UQVJHRVRfREFUQV9NRURJVU0p CisJICAgICpkYXRhID0gRE1fRkFSOworCSAgZWxzZSBpZiAoQ1IxNl9UQVJH RVRfREFUQV9GQVIpCisJICAgIHsKKwkgICAgICBpZiAodHJlYXRfYXNfY29u c3QpCisJCS8qIFRoaXMgd2lsbCBiZSB1c2VkIG9ubHkgZm9yIHByaW50aW5n IAorCQkgICB0aGUgcXVhbGlmaWVyLiBUaGlzIGNhbGwgaXMgKG1heSBiZSkK KwkJICAgbWFkZSBieSBjcjE2X3ByaW50X29wZXJhbmRfYWRkcmVzcy4gICov CisJCSpkYXRhID0gRE1fRkFSOworCSAgICAgIGVsc2UKKwkJLyogVGhpcyBj YWxsIGlzIChtYXkgYmUpIG1hZGUgYnkgCisJCSAgIGNyMTZfbGVnaXRpbWF0 ZV9hZGRyZXNzX3AuICAqLworCQkqZGF0YSA9IElMTEVHQUxfRE07CisJICAg IH0KKwl9CisgICAgICByZXR1cm47CisKKyAgICBjYXNlIExBQkVMX1JFRjoK KyAgICAgIC8qIDEgLSBpbmRpY2F0ZXMgbm9uLWZ1bmN0aW9uIHN5bWJvbC4g ICovCisgICAgICAqY29kZSA9IDE7CisgICAgICByZXR1cm47CisKKyAgICBj YXNlIFBMVVM6CisgICAgY2FzZSBNSU5VUzoKKyAgICAgIC8qIExvb2sgaW50 byB0aGUgdHJlZSBub2Rlcy4gICovCisgICAgICBpZiAoR0VUX0NPREUgKFhF WFAgKHgsIDApKSA9PSBDT05TVF9JTlQpCisJY3IxNl9kZWNvbXBvc2VfY29u c3QgKFhFWFAgKHgsIDEpLCBjb2RlLCBkYXRhLCB0cmVhdF9hc19jb25zdCk7 CisgICAgICBlbHNlIGlmIChHRVRfQ09ERSAoWEVYUCAoeCwgMSkpID09IENP TlNUX0lOVCkKKwljcjE2X2RlY29tcG9zZV9jb25zdCAoWEVYUCAoeCwgMCks IGNvZGUsIGRhdGEsIHRyZWF0X2FzX2NvbnN0KTsKKyAgICAgIHJldHVybjsK KyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuOworICAgIH0KK30KKworLyog RGVjb21wb3NlIEFkZHJlc3MKKyAgIFRoaXMgZnVuY3Rpb24gZGVjb21wb3Nl cyB0aGUgYWRkcmVzcyByZXR1cm5zIHRoZSB0eXBlIG9mIGFkZHJlc3MKKyAg IGFzIGRlZmluZWQgaW4gZW51bSBjcjE2X2FkZHJ0eXBlLiAgSXQgYWxzbyBm aWxscyB0aGUgcGFyYW1ldGVyICpvdXQuCisgICBUaGUgZGVjb21wb3NlZCBh ZGRyZXNzIGNhbiBiZSB1c2VkIGZvciB0d28gcHVycG9zZXMuICBPbmUgdG8g CisgICBjaGVjayBpZiB0aGUgYWRkcmVzcyBpcyB2YWxpZCBhbmQgc2Vjb25k IHRvIHByaW50IHRoZSBhZGRyZXNzCisgICBvcGVyYW5kLgorCisgICBGb2xs b3dpbmcgdGFibGVzIGxpc3QgdmFsaWQgYWRkcmVzcyBzdXBwb3J0ZWQgaW4g Q1IxNkMvQysgYXJjaGl0ZWN0dXJlcy4KKyAgIExlZ2VuZDogCisgICBhTiA6 IEFic291bHRlIGFkZHJlc3MgTi1iaXQgYWRkcmVzcworICAgUiAgOiBPbmUg MTYtYml0IHJlZ2lzdGVyCisgICBSUCA6IENvbnNlY3V0aXZlIHR3byAxNi1i aXQgcmVnaXN0ZXJzIG9yIG9uZSAzMi1iaXQgcmVnaXN0ZXIKKyAgIEkgIDog T25lIDMyLWJpdCByZWdpc3RlcgorICAgZGlzcE4gOiBTaWduZWQgZGlzcGxh Y2VtZW50IG9mIE4tYml0cworCisgICAtLS0tQ29kZSBhZGRyZXNzZXMtLS0t CisgICBCcmFuY2ggb3BlcmFuZHM6CisgICBkaXNwOSAgICAgICAgOiBDUjE2 X0FCU09MVVRFICAgICAgIChkaXNwKQorICAgZGlzcDE3ICAgICAgIDogQ1Ix Nl9BQlNPTFVURSAgICAgICAoZGlzcCkKKyAgIGRpc3AyNSAgICAgICA6IENS MTZfQUJTT0xVVEUgICAgICAgKGRpc3ApCisgICBSUCArIGRpc3AyNSAgOiBD UjE2X1JFR1BfUkVMICAgICAgIChiYXNlLCBkaXNwKQorCisgICBKdW1wIG9w ZXJhbmRzOgorICAgUlAgICAgICAgICAgIDogQ1IxNl9SRUdQX1JFTCAgICAg ICAoYmFzZSwgZGlzcD0wKQorICAgYTI0ICAgICAgICAgIDogQ1IxNl9BQlNP TFVURSAgICAgICAoZGlzcCkKKworICAgLS0tLURhdGEgYWRkcmVzc2VzLS0t LQorICAgYTIwICAgICAgICAgIDogQ1IxNl9BQlNPTFVURSAgICAgICAoZGlz cCkgICAgICAgICAgICAgICAgbmVhciAoMU0pCisgICBhMjQgICAgICAgICAg OiBDUjE2X0FCU09MVVRFICAgICAgIChkaXNwKSAgICAgICAgICAgICAgICBt ZWRpdW0gICgxNk0pCisgICBSICArIGQyMCAgICAgOiBDUjE2X1JFR19SRUwg ICAgICAgIChiYXNlLCAgZGlzcCkgICAgICAgICBuZWFyICgxTSs2NEspCisg ICBSUCArIGQ0ICAgICAgOiBDUjE2X1JFR1BfUkVMICAgICAgIChiYXNlLCAg ZGlzcCkgICAgICAgICBmYXIgICg0RykKKyAgIFJQICsgZDE2ICAgICA6IENS MTZfUkVHUF9SRUwgICAgICAgKGJhc2UsICBkaXNwKSAgICAgICAgIGZhciAg KDRHKQorICAgUlAgKyBkMjAgICAgIDogQ1IxNl9SRUdQX1JFTCAgICAgICAo YmFzZSwgIGRpc3ApICAgICAgICAgZmFyICAoNEcpCisgICBJICAgICAgICAg ICAgOiAqKiogVmFsaWQgYnV0IHBvcnQgZG9lcyBub3Qgc3VwcG9ydCB0aGlz CisgICBJICArIGEyMCAgICAgOiAqKiogVmFsaWQgYnV0IHBvcnQgZG9lcyBu b3Qgc3VwcG9ydCB0aGlzCisgICBJICArIFJQICsgZDE0OiBDUjE2X0lOREVY X1JFR1BfUkVMIChiYXNlLCAgaW5kZXgsIGRpc3ApICBmYXIgICg0RykKKyAg IEkgICsgUlAgKyBkMjA6IENSMTZfSU5ERVhfUkVHUF9SRUwgKGJhc2UsICBp bmRleCwgZGlzcCkgIGZhciAgKDRHKQorCisgICBEZWNvbXBvc2luZyBEYXRh IG1vZGVsIGluIGNhc2Ugb2YgYWJzb2x1dGUgYWRkcmVzcy4KKworICAgVGFy Z2V0IE9wdGlvbiAgICAgICAgICAgICBBZGRyZXNzIHR5cGUgUmVzdWx0YW50 IERhdGEgcmVmIHR5cGUKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAg LS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBDUjE2 X1RBUkdFVF9NT0RFTF9ORUFSICAgIEFCUzIwICAgICAgICBETV9ERUZBVUxU CisgICBDUjE2X1RBUkdFVF9NT0RFTF9ORUFSICAgIElNTTIwICAgICAgICBE TV9ERUZBVUxUCisgICBDUjE2X1RBUkdFVF9NT0RFTF9ORUFSICAgIEFCUzI0 ICAgICAgICBJbnZhbGlkCisgICBDUjE2X1RBUkdFVF9NT0RFTF9ORUFSICAg IElNTTMyICAgICAgICBJbnZhbGlkCisKKyAgIENSMTZfVEFSR0VUX01PREVM X01FRElVTSAgQUJTMjAgICAgICAgIERNX0RFRkFVTFQKKyAgIENSMTZfVEFS R0VUX01PREVMX01FRElVTSAgSU1NMjAgICAgICAgIERNX0RFRkFVTFQKKyAg IENSMTZfVEFSR0VUX01PREVMX01FRElVTSAgQUJTMjQgICAgICAgIERNX0ZB UgorICAgQ1IxNl9UQVJHRVRfTU9ERUxfTUVESVVNICBJTU0zMiAgICAgICAg SW52YWxpZAorCisgICBDUjE2X1RBUkdFVF9NT0RFTF9GQVIgICAgIEFCUzIw ICAgICAgICBETV9ERUZBVUxUCisgICBDUjE2X1RBUkdFVF9NT0RFTF9GQVIg ICAgIElNTTIwICAgICAgICBETV9ERUZBVUxUCisgICBDUjE2X1RBUkdFVF9N T0RFTF9GQVIgICAgIEFCUzI0ICAgICAgICBETV9GQVIKKyAgIENSMTZfVEFS R0VUX01PREVMX0ZBUiAgICAgSU1NMzIgICAgICAgIERNX0ZBUi4gICovCitl bnVtIGNyMTZfYWRkcnR5cGUKK2NyMTZfZGVjb21wb3NlX2FkZHJlc3MgKHJ0 eCBhZGRyLCBzdHJ1Y3QgY3IxNl9hZGRyZXNzICpvdXQsCisJCQlib29sIGRl YnVnX3ByaW50LCBib29sIHRyZWF0X2FzX2NvbnN0KQoreworICBydHggYmFz ZSA9IE5VTExfUlRYLCBkaXNwID0gTlVMTF9SVFgsIGluZGV4ID0gTlVMTF9S VFg7CisgIGVudW0gZGF0YV9tb2RlbF90eXBlIGRhdGEgPSBJTExFR0FMX0RN OworICBpbnQgY29kZSA9IC0xOworICBlbnVtIGNyMTZfYWRkcnR5cGUgcmV0 dmFsID0gQ1IxNl9JTlZBTElEOworCisgIHN3aXRjaCAoR0VUX0NPREUgKGFk ZHIpKQorICAgIHsKKyAgICBjYXNlIENPTlNUX0lOVDoKKyAgICAgIC8qIEFi c29sdXRlIGFkZHJlc3MgKGtub3duIGF0IGNvbXBpbGUgdGltZSkuICAqLwor ICAgICAgY29kZSA9IDA7CisgICAgICBpZiAoZGVidWdfcHJpbnQpCisJZnBy aW50ZiAoc3RkZXJyLCAiXG5jb2RlOiVkIiwgY29kZSk7CisgICAgICBkaXNw ID0gYWRkcjsKKworICAgICAgaWYgKGRlYnVnX3ByaW50KQorCXsKKwkgIGZw cmludGYgKHN0ZGVyciwgIlxuZGlzcDoiKTsKKwkgIGRlYnVnX3J0eCAoZGlz cCk7CisJfQorCisgICAgICBpZiAoVU5TSUdORURfSU5UX0ZJVFNfTl9CSVRT IChJTlRWQUwgKGRpc3ApLCAyMCkpCisJeworCSAgZGF0YSA9IERNX0RFRkFV TFQ7CisJICBpZiAoZGVidWdfcHJpbnQpCisJICAgIGZwcmludGYgKHN0ZGVy ciwgIlxuZGF0YTolZCIsIGRhdGEpOworCSAgcmV0dmFsID0gQ1IxNl9BQlNP TFVURTsKKwl9CisgICAgICBlbHNlIGlmIChVTlNJR05FRF9JTlRfRklUU19O X0JJVFMgKElOVFZBTCAoZGlzcCksIDI0KSkKKwl7CisJICBpZiAoIUNSMTZf VEFSR0VUX0RBVEFfTkVBUikKKwkgICAgeworCSAgICAgIGRhdGEgPSBETV9G QVI7CisJICAgICAgaWYgKGRlYnVnX3ByaW50KQorCQlmcHJpbnRmIChzdGRl cnIsICJcbmRhdGE6JWQiLCBkYXRhKTsKKwkgICAgICByZXR2YWwgPSBDUjE2 X0FCU09MVVRFOworCSAgICB9CisJICBlbHNlCisJICAgIHJldHVybiBDUjE2 X0lOVkFMSUQ7CS8qIEFCUzI0IGlzIG5vdCBzdXBwb3J0IGluIE5FQVIgbW9k ZWwuICAqLworCX0KKyAgICAgIGVsc2UKKwlyZXR1cm4gQ1IxNl9JTlZBTElE OworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIENPTlNUOgorICAgICAgLyog QSBDT05TVCBpcyBhbiBleHByZXNzaW9uIG9mIFBMVVMgb3IgTUlOVVMgd2l0 aCAKKyAgICAgICAgIENPTlNUX0lOVCwgU1lNQk9MX1JFRiBvciBMQUJFTF9S RUYuIFRoaXMgaXMgdGhlCisgICAgICAgICByZXN1bHQgb2YgYXNzZW1ibHkt dGltZSBhcml0aG1ldGljIGNvbXB1dGF0aW9uLiAgKi8KKyAgICAgIHJldHZh bCA9IENSMTZfQUJTT0xVVEU7CisgICAgICBkaXNwID0gYWRkcjsKKyAgICAg IC8qIENhbGwgdGhlIGhlbHBlciBmdW5jdGlvbiB0byBjaGVjayB0aGUgdmFs aWRpdHkuICAqLworICAgICAgY3IxNl9kZWNvbXBvc2VfY29uc3QgKFhFWFAg KGFkZHIsIDApLCAmY29kZSwgJmRhdGEsIHRyZWF0X2FzX2NvbnN0KTsKKyAg ICAgIGlmICgoY29kZSA9PSAwKSAmJiAoZGF0YSA9PSBJTExFR0FMX0RNKSkK KwkvKiBDT05TVCBpcyBub3QgdmFsaWQgY29kZSBvciBkYXRhIGFkZHJlc3Mu ICAqLworCXJldHVybiBDUjE2X0lOVkFMSUQ7CisgICAgICBpZiAoZGVidWdf cHJpbnQpCisJeworCSAgZnByaW50ZiAoc3RkZXJyLCAiXG5kaXNwOiIpOwor CSAgZGVidWdfcnR4IChkaXNwKTsKKwkgIGZwcmludGYgKHN0ZGVyciwgIlxu Y29kZTolZCIsIGNvZGUpOworCSAgZnByaW50ZiAoc3RkZXJyLCAiXG5kYXRh OiVkIiwgZGF0YSk7CisJfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIExB QkVMX1JFRjoKKyAgICAgIHJldHZhbCA9IENSMTZfQUJTT0xVVEU7CisgICAg ICBkaXNwID0gYWRkcjsKKyAgICAgIC8qIDEgLSBpbmRpY2F0ZXMgbm9uLWZ1 bmN0aW9uIHN5bWJvbC4gICovCisgICAgICBjb2RlID0gMTsKKyAgICAgIGlm IChkZWJ1Z19wcmludCkKKwl7CisJICBmcHJpbnRmIChzdGRlcnIsICJcbmRp c3A6Iik7CisJICBkZWJ1Z19ydHggKGRpc3ApOworCSAgZnByaW50ZiAoc3Rk ZXJyLCAiXG5jb2RlOiVkIiwgY29kZSk7CisJfQorICAgICAgYnJlYWs7CisK KyAgICBjYXNlIFNZTUJPTF9SRUY6CisgICAgICAvKiBBYnNvbHV0ZSBhZGRy ZXNzIChrbm93biBhdCBsaW5rIHRpbWUpLiAgKi8KKyAgICAgIHJldHZhbCA9 IENSMTZfQUJTT0xVVEU7CisgICAgICBkaXNwID0gYWRkcjsKKyAgICAgIC8q IFRoaXMgaXMgYSBjb2RlIGFkZHJlc3MgaWYgc3ltYm9sX3JlZiBpcyBhIGZ1 bmN0aW9uLiAgKi8KKyAgICAgIC8qIDIgaW5kaWNhdGVzIGZ1bmMgc3ltLiAg Ki8KKyAgICAgIGNvZGUgPSBTWU1CT0xfUkVGX0ZVTkNUSU9OX1AgKGFkZHIp ID8gMiA6IDA7CisgICAgICBpZiAoZGVidWdfcHJpbnQpCisJeworCSAgZnBy aW50ZiAoc3RkZXJyLCAiXG5kaXNwOiIpOworCSAgZGVidWdfcnR4IChkaXNw KTsKKwkgIGZwcmludGYgKHN0ZGVyciwgIlxuY29kZTolZCIsIGNvZGUpOwor CX0KKyAgICAgIC8qIElmIG5vdCBmdW5jdGlvbiByZWYgdGhlbiBjaGVjayBp ZiB2YWxpZCBkYXRhIHJlZi4gICovCisgICAgICBpZiAoY29kZSA9PSAwKQor CXsKKwkgIGlmIChDUjE2X1RBUkdFVF9EQVRBX05FQVIpCisJICAgIGRhdGEg PSBETV9ERUZBVUxUOworCSAgZWxzZSBpZiAoQ1IxNl9UQVJHRVRfREFUQV9N RURJVU0pCisJICAgIGRhdGEgPSBETV9GQVI7CisJICBlbHNlIGlmIChDUjE2 X1RBUkdFVF9EQVRBX0ZBUikKKwkgICAgeworCSAgICAgIGlmICh0cmVhdF9h c19jb25zdCkKKwkJLyogVGhpcyB3aWxsIGJlIHVzZWQgb25seSBmb3IgcHJp bnRpbmcgdGhlIAorCQkgICBxdWFsaWZpZXIuIFRoaXMgY2FsbCBpcyAobWF5 IGJlKSBtYWRlCisJCSAgIGJ5IGNyMTZfcHJpbnRfb3BlcmFuZF9hZGRyZXNz LiAgKi8KKwkJZGF0YSA9IERNX0ZBUjsKKwkgICAgICBlbHNlCisJCS8qIFRo aXMgY2FsbCBpcyAobWF5IGJlKSBtYWRlIGJ5IAorCQkgICBjcjE2X2xlZ2l0 aW1hdGVfYWRkcmVzc19wLiAgKi8KKwkJcmV0dXJuIENSMTZfSU5WQUxJRDsK KwkgICAgfQorCSAgZWxzZQorCSAgICBkYXRhID0gRE1fREVGQVVMVDsKKwl9 CisgICAgICBpZiAoZGVidWdfcHJpbnQpCisJZnByaW50ZiAoc3RkZXJyLCAi XG5kYXRhOiVkIiwgZGF0YSk7CisgICAgICBicmVhazsKKworICAgIGNhc2Ug UkVHOgorICAgIGNhc2UgU1VCUkVHOgorICAgICAgLyogUmVnaXN0ZXIgcmVs YXRpdmUgYWRkcmVzcy4gICovCisgICAgICAvKiBBc3N1bWUgUkVHIGZpdHMg aW4gYSBzaW5nbGUgcmVnaXN0ZXIuICAqLworICAgICAgcmV0dmFsID0gQ1Ix Nl9SRUdfUkVMOworICAgICAgaWYgKEdFVF9NT0RFX0JJVFNJWkUgKEdFVF9N T0RFIChhZGRyKSkgPiBCSVRTX1BFUl9XT1JEKQorCWlmICghTE9OR19SRUdf UCAoUkVHTk8gKGFkZHIpKSkKKwkgIC8qIFJFRyB3aWxsIHJlc3VsdCBpbiBy ZWcgcGFpci4gICovCisJICByZXR2YWwgPSBDUjE2X1JFR1BfUkVMOworICAg ICAgYmFzZSA9IGFkZHI7CisgICAgICBpZiAoZGVidWdfcHJpbnQpCisJewor CSAgZnByaW50ZiAoc3RkZXJyLCAiXG5iYXNlOiIpOworCSAgZGVidWdfcnR4 IChiYXNlKTsKKwl9CisgICAgICBicmVhazsKKworICAgIGNhc2UgUExVUzoK KyAgICAgIHN3aXRjaCAoR0VUX0NPREUgKFhFWFAgKGFkZHIsIDApKSkKKwl7 CisJY2FzZSBSRUc6CisJY2FzZSBTVUJSRUc6CisJICAvKiBSRUcgKyBESVNQ MjAuICAqLworCSAgLyogQWxsIFJlZyByZWxhdGl2ZSBhZGRyZXNzZXMgaGF2 aW5nIGEgZGlzcGxhY2VtZW50IG5lZWRzIAorCSAgICAgdG8gZml0IGluIDIw LWJpdHMuICAqLworCSAgZGlzcCA9IFhFWFAgKGFkZHIsIDEpOworCSAgaWYg KGRlYnVnX3ByaW50KQorCSAgICB7CisJICAgICAgZnByaW50ZiAoc3RkZXJy LCAiXG5kaXNwOiIpOworCSAgICAgIGRlYnVnX3J0eCAoZGlzcCk7CisJICAg IH0KKwkgIHN3aXRjaCAoR0VUX0NPREUgKFhFWFAgKGFkZHIsIDEpKSkKKwkg ICAgeworCSAgICBjYXNlIENPTlNUX0lOVDoKKwkgICAgICAvKiBTaGFsbCBm aXQgaW4gMjAtYml0cy4gICovCisJICAgICAgaWYgKCFVTlNJR05FRF9JTlRf RklUU19OX0JJVFMgKElOVFZBTCAoZGlzcCksIDIwKSkKKwkJcmV0dXJuIENS MTZfSU5WQUxJRDsKKwkgICAgICBjb2RlID0gMDsKKwkgICAgICBpZiAoZGVi dWdfcHJpbnQpCisJCWZwcmludGYgKHN0ZGVyciwgIlxuY29kZTolZCIsIGNv ZGUpOworCSAgICAgIGJyZWFrOworCisJICAgIGNhc2UgVU5TUEVDOgorCSAg ICAgIGluZm9ybSAoaW5wdXRfbG9jYXRpb24sICJVTlNQRUMgMiEhIik7CisJ ICAgICAgc3dpdGNoIChYSU5UIChYRVhQIChhZGRyLCAxKSwgMSkpCisJCXsK KwkJY2FzZSBVTlNQRUNfTElCUkFSWV9PRkZTRVQ6CisJCSAgaW5mb3JtIChp bnB1dF9sb2NhdGlvbiwgIlVOU1BFQ19MSUJSQVJZX09GRlNFVCAyISEhIik7 CisJCSAgYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJICBnY2NfdW5yZWFjaGFi bGUgKCk7CisJCX0KKwkgICAgICBicmVhazsKKworCSAgICBjYXNlIExBQkVM X1JFRjoKKwkgICAgY2FzZSBTWU1CT0xfUkVGOgorCSAgICBjYXNlIENPTlNU OgorCSAgICAgIC8qIFRoaXMgaXMgYWxzbyBhIHZhbGlkIGV4cHJlc3Npb24g Zm9yIGFkZHJlc3MuCisJICAgICAgICAgSG93ZXZlciwgd2UgY2Fubm90IGFz Y2VydGFpbiBpZiB0aGUgcmVzdWx0YW50CisJICAgICAgICAgZGlzcGxhY2Vt ZW50IHdpbGwgYmUgdmFsaWQgMjAtYml0IHZhbHVlLiAgVGhlcmVmb3JlLCAK KwkgICAgICAgICBsZXRzIG5vdCBhbGxvdyBzdWNoIGFuIGV4cHJlc3Npb24g Zm9yIG5vdy4gIFRoaXMgd2lsbCAKKwkgICAgICAgICBiZSB1cGRhdGVkIHdo ZW4gIHdlIGZpbmQgYSB3YXkgdG8gdmFsaWRhdGUgdGhpcyAKKwkgICAgICAg ICBleHByZXNzaW9uIGFzIGxlZ2l0aW1hdGUgYWRkcmVzcy4gCisJICAgICAg ICAgVGlsbCB0aGVuIGZhbGwgdGhyb3VnaCBDUjE2X0lOVkFMSUQuICAqLwor CSAgICBkZWZhdWx0OgorCSAgICAgIHJldHVybiBDUjE2X0lOVkFMSUQ7CisJ ICAgIH0KKworCSAgLyogTm93IGNoZWNrIGlmIFJFRyBjYW4gZml0IGludG8g c2luZ2xlIG9yIHBhaXIgcmVncy4gICovCisJICByZXR2YWwgPSBDUjE2X1JF R19SRUw7CisJICBiYXNlID0gWEVYUCAoYWRkciwgMCk7CisJICBpZiAoZGVi dWdfcHJpbnQpCisJICAgIHsKKwkgICAgICBmcHJpbnRmIChzdGRlcnIsICJc bmJhc2U6Iik7CisJICAgICAgZGVidWdfcnR4IChiYXNlKTsKKwkgICAgfQor CSAgaWYgKEdFVF9NT0RFX0JJVFNJWkUgKEdFVF9NT0RFICgoWEVYUCAoYWRk ciwgMCkpKSkgPiBCSVRTX1BFUl9XT1JEKQorCSAgICB7CisJICAgICAgaWYg KCFMT05HX1JFR19QIChSRUdOTyAoKFhFWFAgKGFkZHIsIDApKSkpKQorCQkv KiBSRUcgd2lsbCByZXN1bHQgaW4gcmVnIHBhaXIuICAqLworCQlyZXR2YWwg PSBDUjE2X1JFR1BfUkVMOworCSAgICB9CisJICBicmVhazsKKworCWNhc2Ug UExVUzoKKwkgIC8qIFZhbGlkIGV4cHI6IAorCSAgICAgcGx1cworCSAgICAg L1wKKwkgICAgIC8gIFwKKwkgICAgIHBsdXMgaWR4CisJICAgICAvXAorCSAg ICAgLyAgXAorCSAgICAgcmVnICBjb25zdF9pbnQKKworCSAgICAgQ2hlY2sg aWYgdGhlIG9wZXJhbmQgMSBpcyB2YWxpZCBpbmRleCByZWdpc3Rlci4gICov CisJICBkYXRhID0gSUxMRUdBTF9ETTsKKwkgIGlmIChkZWJ1Z19wcmludCkK KwkgICAgZnByaW50ZiAoc3RkZXJyLCAiXG5kYXRhOiVkIiwgZGF0YSk7CisJ ICBzd2l0Y2ggKEdFVF9DT0RFIChYRVhQIChhZGRyLCAxKSkpCisJICAgIHsK KwkgICAgY2FzZSBSRUc6CisJICAgIGNhc2UgU1VCUkVHOgorCSAgICAgIGlm ICghUkVHX09LX0ZPUl9JTkRFWF9QIChYRVhQIChhZGRyLCAxKSkpCisJCXJl dHVybiBDUjE2X0lOVkFMSUQ7CisJICAgICAgLyogT0suIFJFRyBpcyBhIHZh bGlkIGluZGV4IHJlZ2lzdGVyLiAgKi8KKwkgICAgICBpbmRleCA9IFhFWFAg KGFkZHIsIDEpOworCSAgICAgIGlmIChkZWJ1Z19wcmludCkKKwkJeworCQkg IGZwcmludGYgKHN0ZGVyciwgIlxuaW5kZXg6Iik7CisJCSAgZGVidWdfcnR4 IChpbmRleCk7CisJCX0KKwkgICAgICBicmVhazsKKwkgICAgZGVmYXVsdDoK KwkgICAgICByZXR1cm4gQ1IxNl9JTlZBTElEOworCSAgICB9CisJICAvKiBD aGVjayBpZiBvcGVyYW5kIDAgb2Ygb3BlcmFuZCAwIGlzIFJFR1AuICAqLwor CSAgc3dpdGNoIChHRVRfQ09ERSAoWEVYUCAoWEVYUCAoYWRkciwgMCksIDAp KSkKKwkgICAgeworCSAgICBjYXNlIFJFRzoKKwkgICAgY2FzZSBTVUJSRUc6 CisJICAgICAgLyogTm93IGNoZWNrIGlmIFJFRyBpcyBhIFJFR1AgYW5kIG5v dCBpbiBMT05HIHJlZ3MuICAqLworCSAgICAgIGlmIChHRVRfTU9ERV9CSVRT SVpFIChHRVRfTU9ERSAoWEVYUCAoWEVYUCAoYWRkciwgMCksIDApKSkKKwkJ ICA+IEJJVFNfUEVSX1dPUkQpCisJCXsKKwkJICBpZiAoUkVHTk8gKFhFWFAg KFhFWFAgKGFkZHIsIDApLCAwKSkKKwkJICAgICAgPj0gQ1IxNl9GSVJTVF9E V09SRF9SRUdJU1RFUikKKwkJICAgIHJldHVybiBDUjE2X0lOVkFMSUQ7CisJ CSAgYmFzZSA9IFhFWFAgKFhFWFAgKGFkZHIsIDApLCAwKTsKKwkJICBpZiAo ZGVidWdfcHJpbnQpCisJCSAgICB7CisJCSAgICAgIGZwcmludGYgKHN0ZGVy ciwgIlxuYmFzZToiKTsKKwkJICAgICAgZGVidWdfcnR4IChiYXNlKTsKKwkJ ICAgIH0KKwkJfQorCSAgICAgIGVsc2UKKwkJcmV0dXJuIENSMTZfSU5WQUxJ RDsKKwkgICAgICBicmVhazsKKwkgICAgZGVmYXVsdDoKKwkgICAgICByZXR1 cm4gQ1IxNl9JTlZBTElEOworCSAgICB9CisJICAvKiBOb3cgY2hlY2sgaWYg dGhlIG9wZXJhbmQgMSBvZiBvcGVyYW5kIDAgaXMgY29uc3RfaW50LiAgKi8K KwkgIGlmIChHRVRfQ09ERSAoWEVYUCAoWEVYUCAoYWRkciwgMCksIDEpKSA9 PSBDT05TVF9JTlQpCisJICAgIHsKKwkgICAgICBkaXNwID0gWEVYUCAoWEVY UCAoYWRkciwgMCksIDEpOworCSAgICAgIGlmIChkZWJ1Z19wcmludCkKKwkJ eworCQkgIGZwcmludGYgKHN0ZGVyciwgIlxuZGlzcDoiKTsKKwkJICBkZWJ1 Z19ydHggKGRpc3ApOworCQl9CisJICAgICAgaWYgKCFVTlNJR05FRF9JTlRf RklUU19OX0JJVFMgKElOVFZBTCAoZGlzcCksIDIwKSkKKwkJcmV0dXJuIENS MTZfSU5WQUxJRDsKKwkgICAgfQorCSAgZWxzZQorCSAgICByZXR1cm4gQ1Ix Nl9JTlZBTElEOworCSAgcmV0dmFsID0gQ1IxNl9JTkRFWF9SRUdQX1JFTDsK KwkgIGJyZWFrOworCWRlZmF1bHQ6CisJICByZXR1cm4gQ1IxNl9JTlZBTElE OworCX0KKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIHJl dHVybiBDUjE2X0lOVkFMSUQ7CisgICAgfQorCisgIC8qIENoZWNrIGlmIHRo ZSBiYXNlIGFuZCBpbmRleCByZWdpc3RlcnMgYXJlIHZhbGlkLiAgKi8KKyAg aWYgKGJhc2UgJiYgIShjcjE2X2FkZHJfcmVnX3AgKGJhc2UpKSkKKyAgICBy ZXR1cm4gQ1IxNl9JTlZBTElEOworICBpZiAoYmFzZSAmJiAhKENSMTZfUkVH X09LX0ZPUl9CQVNFX1AgKGJhc2UpKSkKKyAgICByZXR1cm4gQ1IxNl9JTlZB TElEOworICBpZiAoaW5kZXggJiYgIShSRUdfT0tfRk9SX0lOREVYX1AgKGlu ZGV4KSkpCisgICAgcmV0dXJuIENSMTZfSU5WQUxJRDsKKworICAvKiBXcml0 ZSB0aGUgZGVjb21wb3NpdGlvbiB0byBvdXQgcGFyYW1ldGVyLiAgKi8KKyAg b3V0LT5iYXNlID0gYmFzZTsKKyAgb3V0LT5kaXNwID0gZGlzcDsKKyAgb3V0 LT5pbmRleCA9IGluZGV4OworICBvdXQtPmRhdGEgPSBkYXRhOworICBvdXQt PmNvZGUgPSBjb2RlOworCisgIHJldHVybiByZXR2YWw7Cit9CisKKy8qIFJl dHVybiBub24temVybyB2YWx1ZSBpZiAneCcgaXMgbGVnaXRpbWF0ZSBQSUMg b3BlcmFuZAorICAgd2hlbiBnZW5lcmF0aW5nIFBJQyBjb2RlLiAgKi8KK2lu dAorbGVnaXRpbWF0ZV9waWNfb3BlcmFuZF9wIChydHggeCkKK3sKKyAgc3dp dGNoIChHRVRfQ09ERSAoeCkpCisgICAgeworICAgIGNhc2UgU1lNQk9MX1JF RjoKKyAgICAgIHJldHVybiAwOworICAgICAgYnJlYWs7CisgICAgY2FzZSBM QUJFTF9SRUY6CisgICAgICByZXR1cm4gMDsKKyAgICAgIGJyZWFrOworICAg IGNhc2UgQ09OU1Q6CisgICAgICAvKiBSRVZJU0lUOiBVc2Ugc29tZXRoaW5n IGxpa2Ugc3ltYm9sX3JlZmVyZW5jZWRfcC4gICovCisgICAgICBpZiAoR0VU X0NPREUgKFhFWFAgKHgsIDApKSA9PSBQTFVTCisJICAmJiAoR0VUX0NPREUg KFhFWFAgKFhFWFAgKHgsIDApLCAwKSkgPT0gU1lNQk9MX1JFRgorCSAgICAg IHx8IEdFVF9DT0RFIChYRVhQIChYRVhQICh4LCAwKSwgMCkpID09IExBQkVM X1JFRikKKwkgICYmIChHRVRfQ09ERSAoWEVYUCAoWEVYUCAoeCwgMCksIDEp KSA9PSBDT05TVF9JTlQpKQorCXJldHVybiAwOworICAgICAgYnJlYWs7Cisg ICAgY2FzZSBNRU06CisgICAgICByZXR1cm4gbGVnaXRpbWF0ZV9waWNfb3Bl cmFuZF9wIChYRVhQICh4LCAwKSk7CisgICAgICBicmVhazsKKyAgICBkZWZh dWx0OgorICAgICAgYnJlYWs7CisgICAgfQorICByZXR1cm4gMTsKK30KKwor LypDb252ZXJ0IGEgbm9uLVBJQyBhZGRyZXNzIGluIGBvcmlnJyB0byBhIFBJ QyBhZGRyZXNzIGluIGByZWcnLgorCisgICAgIElucHV0ICAgICAgICAgICAg T3V0cHV0ICgtZiBwaWMpICAgICAgICBPdXRwdXQgKC1mIFBJQykKKyAgICAg b3JpZyAgICAgICAgICAgICByZWcKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgCitDMSAgIHN5bWJvbCAgICAgICAgICAgc3ltYm9sQEJS TyAocjEyKSAgICAgICAgc3ltYm9sQEdPVCAocjEyKQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAKK0MyICAgc3ltYm9sICsgb2Zmc2V0 ICBzeW1ib2wrb2Zmc2V0QEJSTyAocjEyKSBzeW1ib2wrb2Zmc2V0QEdPVCAo cjEyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK05P VEU6IEBCUk8gaXMgYWRkZWQgdXNpbmcgdW5zcGVjOkJSTworTk9URTogQEdP VCBpcyBhZGRlZCB1c2luZyB1bnNwZWM6R09ULiAgKi8KK3J0eAorbGVnaXRp bWl6ZV9waWNfYWRkcmVzcyAocnR4IG9yaWcsIGVudW0gbWFjaGluZV9tb2Rl IG1vZGUgQVRUUklCVVRFX1VOVVNFRCwKKwkJCXJ0eCByZWcpCit7CisgIHJ0 eCBwaWNfcmVmOworCisgIC8qIEZpcnN0IGhhbmRsZSBhIHNpbXBsZSBTWU1C T0xfUkVGIG9yIExBQkVMX1JFRi4gICovCisgIGlmIChHRVRfQ09ERSAob3Jp ZykgPT0gU1lNQk9MX1JFRiB8fCBHRVRfQ09ERSAob3JpZykgPT0gTEFCRUxf UkVGKQorICAgIHsKKyAgICAgIGlmIChyZWcgPT0gMCkKKwlyZWcgPSBnZW5f cmVnX3J0eCAoUG1vZGUpOworCisgICAgICBpZiAoZmxhZ19waWMgPT0gTkVB Ul9QSUMpCisJeworCSAgLyogVW5zcGVjIHRvIGhhbmRsZSAtZnBpYyBvcHRp b24uICAqLworCSAgZW1pdF9pbnNuIChnZW5fdW5zcGVjX2Jyb19hZGRyIChy ZWcsIG9yaWcpKTsKKwkgIGVtaXRfaW5zbiAoZ2VuX2FkZHNpMyAocmVnLCBy ZWcsIHBpY19vZmZzZXRfdGFibGVfcnR4KSk7CisJICBwaWNfcmVmID0gcmVn OworCX0KKyAgICAgIGVsc2UgaWYgKGZsYWdfcGljID09IEZBUl9QSUMpCisJ eworCSAgLyogVW5zcGVjIHRvIGhhbmRsZSAtZlBJQyBvcHRpb24uICAqLwor CSAgZW1pdF9pbnNuIChnZW5fdW5zcGVjX2dvdF9hZGRyIChyZWcsIG9yaWcp KTsKKwkgIHBpY19yZWYgPSByZWc7CisJfQorICAgICAgcmV0dXJuIHJlZzsK KyAgICB9CisgIGVsc2UgaWYgKEdFVF9DT0RFIChvcmlnKSA9PSBDT05TVCkK KyAgICB7CisgICAgICAvKiBUbyBoYW5kbGUgKHN5bWJvbCArIG9mZnNldCku ICAqLworICAgICAgcnR4IGJhc2UsIG9mZnNldDsKKworICAgICAgaWYgKEdF VF9DT0RFIChYRVhQIChvcmlnLCAwKSkgPT0gUExVUworCSAgJiYgWEVYUCAo WEVYUCAob3JpZywgMCksIDApID09IHBpY19vZmZzZXRfdGFibGVfcnR4KQor CXJldHVybiBvcmlnOworCisgICAgICBpZiAocmVnID09IDApCisJeworCSAg Z2NjX2Fzc2VydCAoY2FuX2NyZWF0ZV9wc2V1ZG9fcCAoKSk7CisJICByZWcg PSBnZW5fcmVnX3J0eCAoUG1vZGUpOworCX0KKworICAgICAgZ2NjX2Fzc2Vy dCAoR0VUX0NPREUgKFhFWFAgKG9yaWcsIDApKSA9PSBQTFVTKTsKKworICAg ICAgYmFzZSA9IGxlZ2l0aW1pemVfcGljX2FkZHJlc3MgKFhFWFAgKFhFWFAg KG9yaWcsIDApLCAwKSwgUG1vZGUsIHJlZyk7CisgICAgICBvZmZzZXQgPSBs ZWdpdGltaXplX3BpY19hZGRyZXNzIChYRVhQIChYRVhQIChvcmlnLCAwKSwg MSksIFBtb2RlLAorCQkJCSAgICAgICBiYXNlID09IHJlZyA/IDAgOiByZWcp OworCisgICAgICAvKiBSRVZJU0lUOiBPcHRpbWl6ZSBmb3IgY29uc3Qtb2Zm c2V0cy4gICovCisgICAgICBlbWl0X2luc24gKGdlbl9hZGRzaTMgKHJlZywg YmFzZSwgb2Zmc2V0KSk7CisKKyAgICAgIHJldHVybiByZWc7CisgICAgfQor ICByZXR1cm4gb3JpZzsKK30KKworLyogSW1wbGVtZW50YXRpb24gb2YgZ290 X29wZXJhbmQuICAqLworcnR4Citnb3Rfb3BlcmFuZCAocnR4IG9yaWcsIGVu dW0gbWFjaGluZV9tb2RlIG1vZGUgQVRUUklCVVRFX1VOVVNFRCkKK3sKKyAg cnR4IHJlZzsKKyAgcmVnID0gZ2VuX3JlZ19ydHggKFBtb2RlKTsKKyAgZW1p dF9pbnNuIChnZW5fdW5zcGVjX2dvdF9hZGRyIChyZWcsIG9yaWcpKTsKKyAg cmV0dXJuIHJlZzsKK30KKworLyogSW1wbGVtZW50YXRpb24gb2YgYnJvX29w ZXJhbmQuICAqLworcnR4Citicm9fb3BlcmFuZCAocnR4IG9yaWcsIGVudW0g bWFjaGluZV9tb2RlIG1vZGUgQVRUUklCVVRFX1VOVVNFRCkKK3sKKyAgcnR4 IHJlZzsKKyAgcmVnID0gZ2VuX3JlZ19ydHggKFBtb2RlKTsKKyAgZW1pdF9p bnNuIChnZW5fdW5zcGVjX2Jyb19hZGRyIChyZWcsIG9yaWcpKTsKKyAgZW1p dF9pbnNuIChnZW5fYWRkc2kzIChyZWcsIHJlZywgcGljX29mZnNldF90YWJs ZV9ydHgpKTsKKyAgcmV0dXJuIHJlZzsKK30KKworLyogSW1wbGVtZW50YXRp b24gb2YgR09fSUZfTEVHSVRJTUFURV9BRERSRVNTLiAgKi8KK2ludAorY3Ix Nl9sZWdpdGltYXRlX2FkZHJlc3NfcCAoZW51bSBtYWNoaW5lX21vZGUgbW9k ZSBBVFRSSUJVVEVfVU5VU0VELAorCQkJICAgcnR4IGFkZHIsIGludCBzdHJp Y3QpCit7CisgIGVudW0gY3IxNl9hZGRydHlwZSBhZGRydHlwZTsKKyAgc3Ry dWN0IGNyMTZfYWRkcmVzcyBhZGRyZXNzOworCisgIGlmIChUQVJHRVRfREVC VUdfQUREUikKKyAgICB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsCisJICAg ICAgICJcbj09PT09PVxuR09fSUZfTEVHSVRJTUFURV9BRERSRVNTLCBtb2Rl ID0gJXMsIHN0cmljdCA9ICVkIiwKKwkgICAgICAgR0VUX01PREVfTkFNRSAo bW9kZSksIHN0cmljdCk7CisgICAgICBkZWJ1Z19ydHggKGFkZHIpOworICAg IH0KKyAgYWRkcnR5cGUgPSBjcjE2X2RlY29tcG9zZV9hZGRyZXNzIChhZGRy LCAmYWRkcmVzcywKKwkJCQkgICAgIChUQVJHRVRfREVCVUdfQUREUiA/IDEg OiAwKSwgRkFMU0UpOworCisgIGlmIChUQVJHRVRfREVCVUdfQUREUikKKyAg ICB7CisgICAgICBjb25zdCBjaGFyICp0eXBlc3RyOworCisgICAgICBzd2l0 Y2ggKGFkZHJ0eXBlKQorCXsKKwljYXNlIENSMTZfSU5WQUxJRDoKKwkgIHR5 cGVzdHIgPSAiSW52YWxpZCI7CisJICBicmVhazsKKwljYXNlIENSMTZfQUJT T0xVVEU6CisJICB0eXBlc3RyID0gIkFic29sdXRlIjsKKwkgIGJyZWFrOwor CWNhc2UgQ1IxNl9SRUdfUkVMOgorCSAgdHlwZXN0ciA9ICJSZWdpc3RlciBy ZWxhdGl2ZSI7CisJICBicmVhazsKKwljYXNlIENSMTZfUkVHUF9SRUw6CisJ ICB0eXBlc3RyID0gIlJlZ2lzdGVyIHBhaXIgcmVsYXRpdmUiOworCSAgYnJl YWs7CisJY2FzZSBDUjE2X0lOREVYX1JFR1BfUkVMOgorCSAgdHlwZXN0ciA9 ICJJbmRleCArIFJlZ2lzdGVyIHBhaXIgcmVsYXRpdmUiOworCSAgYnJlYWs7 CisJZGVmYXVsdDoKKwkgIGdjY191bnJlYWNoYWJsZSAoKTsKKwl9CisgICAg ICBmcHJpbnRmIChzdGRlcnIsICJcbkNSMTYgQWRkcmVzcyB0eXBlOiAlc1xu IiwgdHlwZXN0cik7CisgICAgfQorCisgIGlmIChhZGRydHlwZSA9PSBDUjE2 X0lOVkFMSUQpCisgICAgcmV0dXJuIEZBTFNFOworCisgIGlmIChzdHJpY3Qp CisgICAgeworICAgICAgaWYgKGFkZHJlc3MuYmFzZQorCSAgJiYgIVJFR05P X01PREVfT0tfRk9SX0JBU0VfUCAoUkVHTk8gKGFkZHJlc3MuYmFzZSksIG1v ZGUpKQorCXsKKwkgIGlmIChUQVJHRVRfREVCVUdfQUREUikKKwkgICAgZnBy aW50ZiAoc3RkZXJyLCAiQmFzZSByZWdpc3RlciBub3Qgc3RyaWN0XG4iKTsK KwkgIHJldHVybiBGQUxTRTsKKwl9CisgICAgICBpZiAoYWRkcmVzcy5pbmRl eCAmJiAhUkVHTk9fT0tfRk9SX0lOREVYX1AgKFJFR05PIChhZGRyZXNzLmlu ZGV4KSkpCisJeworCSAgaWYgKFRBUkdFVF9ERUJVR19BRERSKQorCSAgICBm cHJpbnRmIChzdGRlcnIsICJJbmRleCByZWdpc3RlciBub3Qgc3RyaWN0XG4i KTsKKwkgIHJldHVybiBGQUxTRTsKKwl9CisgICAgfQorCisgIC8qIFJldHVy biB0cnVlIGlmIGFkZHJlc3NpbmcgbW9kZSBpcyByZWdpc3RlciByZWxhdGl2 ZS4gICovCisgIGlmIChmbGFnX3BpYykKKyAgICB7CisgICAgICBpZiAoYWRk cnR5cGUgPT0gQ1IxNl9SRUdfUkVMIHx8IGFkZHJ0eXBlID09IENSMTZfUkVH UF9SRUwpCisJcmV0dXJuIFRSVUU7CisgICAgICBlbHNlCisJcmV0dXJuIEZB TFNFOworICAgIH0KKworICByZXR1cm4gVFJVRTsKK30KKworLyogUm91dGlu ZXMgdG8gY29tcHV0ZSBjb3N0cy4gICovCisKKy8qIFJldHVybiBjb3N0IG9m IHRoZSBtZW1vcnkgYWRkcmVzcyB4LiAgKi8KK3N0YXRpYyBpbnQKK2NyMTZf YWRkcmVzc19jb3N0IChydHggYWRkcikKK3sKKyAgZW51bSBjcjE2X2FkZHJ0 eXBlIGFkZHJ0eXBlOworICBzdHJ1Y3QgY3IxNl9hZGRyZXNzIGFkZHJlc3M7 CisgIGludCBjb3N0ID0gMjsKKworICBhZGRydHlwZSA9IGNyMTZfZGVjb21w b3NlX2FkZHJlc3MgKGFkZHIsICZhZGRyZXNzLCAwLCBGQUxTRSk7CisKKyAg Z2NjX2Fzc2VydCAoYWRkcnR5cGUgIT0gQ1IxNl9JTlZBTElEKTsKKworICAv KgorICAgICBDUjE2X0FCU09MVVRFICAgICAgICAgICAgOiAzCisgICAgIENS MTZfUkVHX1JFTCAgKGRpc3AgIT0wKSA6IDQKKyAgICAgQ1IxNl9SRUdfUkVM ICAoZGlzcCA9PTApIDogNQorICAgICBDUjE2X1JFR1BfUkVMIChkaXNwICE9 MCkgOiA2CisgICAgIENSMTZfUkVHUF9SRUwgKGRpc3AgPT0wKSA6IDcKKyAg ICAgQ1IxNl9JTkRFWF9SRUdQX1JFTCAoZGlzcCAhPTApIDogOAorICAgICBD UjE2X0lOREVYX1JFR1BfUkVMIChkaXNwID09MCkgOiA5CisgICovCisgIHN3 aXRjaCAoYWRkcnR5cGUpCisgICAgeworICAgIGNhc2UgQ1IxNl9BQlNPTFVU RToKKyAgICAgIGNvc3QgKz0gMTsKKyAgICAgIGJyZWFrOworICAgIGNhc2Ug Q1IxNl9SRUdQX1JFTDoKKyAgICAgIGNvc3QgKz0gMjsKKyAgICAgIC8qIEZh bGwgdGhyb3VnaC4gICovCisgICAgY2FzZSBDUjE2X1JFR19SRUw6CisgICAg ICBjb3N0ICs9IDM7CisgICAgICBpZiAoYWRkcmVzcy5kaXNwKQorCWNvc3Qg LT0gMTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgQ1IxNl9JTkRFWF9SRUdQ X1JFTDoKKyAgICAgIGNvc3QgKz0gNzsKKyAgICAgIGlmIChhZGRyZXNzLmRp c3ApCisJY29zdCAtPSAxOworICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsK KyAgICB9CisKKyAgaWYgKFRBUkdFVF9ERUJVR19BRERSKQorICAgIHsKKyAg ICAgIGZwcmludGYgKHN0ZGVyciwgIlxuPT09PT09XG5UQVJHRVRfQUREUkVT U19DT1NUID0gJWRcbiIsIGNvc3QpOworICAgICAgZGVidWdfcnR4IChhZGRy KTsKKyAgICB9CisKKyAgcmV0dXJuIGNvc3Q7Cit9CisKKy8qIFJldHVybiB0 aGUgY29zdCBvZiBtb3ZpbmcgZGF0YSBvZiBtb2RlIE1PREUgYmV0d2VlbiBh IHJlZ2lzdGVyIG9mIGNsYXNzCisgICBDTEFTUyBhbmQgbWVtb3J5OyBJTiBp cyB6ZXJvIGlmIHRoZSB2YWx1ZSBpcyB0byBiZSB3cml0dGVuIHRvIG1lbW9y eSwKKyAgIG5vbnplcm8gaWYgaXQgaXMgdG8gYmUgcmVhZCBpbi4gVGhpcyBj b3N0IGlzIHJlbGF0aXZlIHRvIHRob3NlIGluCisgICBSRUdJU1RFUl9NT1ZF X0NPU1QuICAqLworCitpbnQKK2NyMTZfbWVtb3J5X21vdmVfY29zdCAoZW51 bSBtYWNoaW5lX21vZGUgbW9kZSwKKwkJICAgICAgIGVudW0gcmVnX2NsYXNz IGNsYXNzIEFUVFJJQlVURV9VTlVTRUQsCisJCSAgICAgICBpbnQgaW4gQVRU UklCVVRFX1VOVVNFRCkKK3sKKyAgLyogT25lIExEIG9yIFNUIHRha2VzIHR3 aWNlIHRoZSB0aW1lIG9mIGEgc2ltcGxlIHJlZy1yZWcgbW92ZS4gICovCisg IGlmIChyZWdfY2xhc3Nlc19pbnRlcnNlY3RfcCAoY2xhc3MsIEdFTkVSQUxf UkVHUykpCisgICAgcmV0dXJuICg0ICogSEFSRF9SRUdOT19OUkVHUyAoMCwg bW9kZSkpOworICBlbHNlCisgICAgcmV0dXJuICgxMDApOworfQorCisvKiBJ bnN0cnVjdGlvbiBvdXRwdXQuICAqLworCisvKiBDaGVjayBpZiBhIGNvbnN0 X2RvdWJsZSBpcyBvayBmb3IgY3IxNiBzdG9yZS1pbW1lZGlhdGUgaW5zdHJ1 Y3Rpb25zLiAgKi8KK2ludAorY3IxNl9jb25zdF9kb3VibGVfb2sgKHJ0eCBv cCkKK3sKKyAgaWYgKEdFVF9NT0RFIChvcCkgPT0gU0Ztb2RlKQorICAgIHsK KyAgICAgIFJFQUxfVkFMVUVfVFlQRSByOworICAgICAgbG9uZyBsOworICAg ICAgUkVBTF9WQUxVRV9GUk9NX0NPTlNUX0RPVUJMRSAociwgb3ApOworICAg ICAgUkVBTF9WQUxVRV9UT19UQVJHRVRfU0lOR0xFIChyLCBsKTsKKyAgICAg IHJldHVybiBVTlNJR05FRF9JTlRfRklUU19OX0JJVFMgKGwsIDQpID8gMSA6 IDA7CisgICAgfQorCisgIHJldHVybiAoKFVOU0lHTkVEX0lOVF9GSVRTX05f QklUUyAoQ09OU1RfRE9VQkxFX0xPVyAob3ApLCA0KSkgJiYKKwkgIChVTlNJ R05FRF9JTlRfRklUU19OX0JJVFMgKENPTlNUX0RPVUJMRV9ISUdIIChvcCks IDQpKSkgPyAxIDogMDsKK30KKworLyogUmV0dXJucyBiaXQgcG9zaXRpb24g b2YgZmlyc3QgMCBvciAxIGJpdC4KKyAgIEl0IGlzIHNhZmUgdG8gYXNzdW1l IHZhbCBhcyAxNi1iaXQgd2lkZS4gICovCitpbnQKK2NyMTZfb3BlcmFuZF9i aXRfcG9zIChpbnQgdmFsLCBpbnQgYml0dmFsKQoreworICBpbnQgaTsKKyAg aWYgKGJpdHZhbCA9PSAwKQorICAgIHZhbCA9IH52YWw7CisKKyAgZm9yIChp ID0gMDsgaSA8IDE2OyBpKyspCisgICAgaWYgKHZhbCAmICgxIDw8IGkpKQor ICAgICAgYnJlYWs7CisgIHJldHVybiBpOworfQorCisvKiBJbXBsZW1lbnRz IHRoZSBtYWNybyBQUklOVF9PUEVSQU5EIGRlZmluZWQgaW4gY3IxNi5oLiAg Ki8KK3ZvaWQKK2NyMTZfcHJpbnRfb3BlcmFuZCAoRklMRSAqIGZpbGUsIHJ0 eCB4LCBpbnQgY29kZSkKK3sKKyAgaW50IHB0cl9kZXJlZmVyZW5jZSA9IDA7 CisKKyAgc3dpdGNoIChjb2RlKQorICAgIHsKKyAgICBjYXNlICdkJzoKKyAg ICAgIHsKKwljb25zdCBjaGFyICpjcjE2X2NtcF9zdHI7CisJc3dpdGNoIChH RVRfQ09ERSAoeCkpCisJICB7CisJICAgIC8qIE1EOiBjb21wYXJlIChyZWcs IHJlZyBvciBpbW0pIGJ1dCBDUjE2OiBjbXAgKHJlZyBvciBpbW0sIHJlZykK KwkgICAgICAgLT4gc3dhcCBhbGwgbm9uIHN5bW1ldHJpYyBvcHMuICAqLwor CSAgY2FzZSBFUToKKwkgICAgY3IxNl9jbXBfc3RyID0gImVxIjsKKwkgICAg YnJlYWs7CisJICBjYXNlIE5FOgorCSAgICBjcjE2X2NtcF9zdHIgPSAibmUi OworCSAgICBicmVhazsKKwkgIGNhc2UgR1Q6CisJICAgIGNyMTZfY21wX3N0 ciA9ICJsdCI7CisJICAgIGJyZWFrOworCSAgY2FzZSBHVFU6CisJICAgIGNy MTZfY21wX3N0ciA9ICJsbyI7CisJICAgIGJyZWFrOworCSAgY2FzZSBMVDoK KwkgICAgY3IxNl9jbXBfc3RyID0gImd0IjsKKwkgICAgYnJlYWs7CisJICBj YXNlIExUVToKKwkgICAgY3IxNl9jbXBfc3RyID0gImhpIjsKKwkgICAgYnJl YWs7CisJICBjYXNlIEdFOgorCSAgICBjcjE2X2NtcF9zdHIgPSAibGUiOwor CSAgICBicmVhazsKKwkgIGNhc2UgR0VVOgorCSAgICBjcjE2X2NtcF9zdHIg PSAibHMiOworCSAgICBicmVhazsKKwkgIGNhc2UgTEU6CisJICAgIGNyMTZf Y21wX3N0ciA9ICJnZSI7CisJICAgIGJyZWFrOworCSAgY2FzZSBMRVU6CisJ ICAgIGNyMTZfY21wX3N0ciA9ICJocyI7CisJICAgIGJyZWFrOworCSAgZGVm YXVsdDoKKwkgICAgZ2NjX3VucmVhY2hhYmxlICgpOworCSAgfQorCWZwcmlu dGYgKGZpbGUsICIlcyIsIGNyMTZfY21wX3N0cik7CisJcmV0dXJuOworICAg ICAgfQorICAgIGNhc2UgJyQnOgorICAgICAgcHV0YyAoJyQnLCBmaWxlKTsK KyAgICAgIHJldHVybjsKKworICAgIGNhc2UgJ3AnOgorICAgICAgaWYgKEdF VF9DT0RFICh4KSA9PSBSRUcpCisJeworCSAgLyogRm9yIFB1c2ggaW5zdHJ1 Y3Rpb25zLCB3ZSBzaG91bGQgbm90IHByaW50IHJlZ2lzdGVyIHBhaXJzLiAg Ki8KKwkgIGZwcmludGYgKGZpbGUsICIlcyIsIHJlZ19uYW1lc1tSRUdOTyAo eCldKTsKKwkgIHJldHVybjsKKwl9CisgICAgICBicmVhazsKKworICAgIGNh c2UgJ2InOgorICAgICAgLyogUHJpbnQgdGhlIGltbWVkaWF0ZSBhZGRyZXNz IGZvciBiYWwgCisgICAgICAgICAnYicgaXMgdXNlZCBpbnN0ZWFkIG9mICdh JyB0byBhdm9pZCBjb21waWxlciBjYWxsaW5nCisgICAgICAgICB0aGUgR09f SUZfTEVHSVRJTUFURV9BRERSRVNTIHdoaWNoIGNhbm5vdAorICAgICAgICAg cGVyZm9ybSBjaGVja3Mgb24gY29uc3RfaW50IGNvZGUgYWRkcmVzc2VzIGFz IGl0CisgICAgICAgICBhc3N1bWVzIGFsbCBjb25zdF9pbnQgYXJlIGRhdGEg YWRkcmVzc2VzLiAgKi8KKyAgICAgIGZwcmludGYgKGZpbGUsICIweCVseCIs IElOVFZBTCAoeCkpOworICAgICAgcmV0dXJuOworCisgICAgY2FzZSAncic6 CisgICAgICAvKiBQcmludCBiaXQgcG9zaXRpb24gb2YgZmlyc3QgMC4gICov CisgICAgICBmcHJpbnRmIChmaWxlLCAiJWQiLCBjcjE2X29wZXJhbmRfYml0 X3BvcyAoSU5UVkFMICh4KSwgMCkpOworICAgICAgcmV0dXJuOworCisgICAg Y2FzZSAncyc6CisgICAgICAvKiBQcmludCBiaXQgcG9zaXRpb24gb2YgZmly c3QgMS4gICovCisgICAgICBmcHJpbnRmIChmaWxlLCAiJWQiLCBjcjE2X29w ZXJhbmRfYml0X3BvcyAoSU5UVkFMICh4KSwgMSkpOworICAgICAgcmV0dXJu OworICAgIGNhc2UgJ2cnOgorICAgICAgLyogJ2cnIGlzIHVzZWQgZm9yIGlt cGxpY2l0IG1lbTogZGVyZWZlcmVuY2UuICAqLworICAgICAgcHRyX2RlcmVm ZXJlbmNlID0gMTsKKyAgICBjYXNlICdmJzoKKyAgICBjYXNlIDA6CisgICAg ICAvKiBkZWZhdWx0LiAgKi8KKyAgICAgIHN3aXRjaCAoR0VUX0NPREUgKHgp KQorCXsKKwljYXNlIFJFRzoKKwkgIGlmIChHRVRfTU9ERV9CSVRTSVpFIChH RVRfTU9ERSAoeCkpID4gQklUU19QRVJfV09SRCkKKwkgICAgeworCSAgICAg IGlmIChMT05HX1JFR19QIChSRUdOTyAoeCkpKQorCQlmcHJpbnRmIChmaWxl LCAiKCVzKSIsIHJlZ19uYW1lc1tSRUdOTyAoeCldKTsKKwkgICAgICBlbHNl CisJCWZwcmludGYgKGZpbGUsICIoJXMsJXMpIiwgcmVnX25hbWVzW1JFR05P ICh4KSArIDFdLAorCQkJIHJlZ19uYW1lc1tSRUdOTyAoeCldKTsKKwkgICAg fQorCSAgZWxzZQorCSAgICBmcHJpbnRmIChmaWxlLCAiJXMiLCByZWdfbmFt ZXNbUkVHTk8gKHgpXSk7CisJICByZXR1cm47CisKKwljYXNlIE1FTToKKwkg IG91dHB1dF9hZGRyZXNzIChYRVhQICh4LCAwKSk7CisJICByZXR1cm47CisK KwljYXNlIENPTlNUX0RPVUJMRToKKwkgIHsKKwkgICAgUkVBTF9WQUxVRV9U WVBFIHI7CisJICAgIGxvbmcgbDsKKworCSAgICBSRUFMX1ZBTFVFX0ZST01f Q09OU1RfRE9VQkxFIChyLCB4KTsKKwkgICAgUkVBTF9WQUxVRV9UT19UQVJH RVRfU0lOR0xFIChyLCBsKTsKKworCSAgICBmcHJpbnRmIChmaWxlLCAiJDB4 JWx4IiwgbCk7CisJICAgIHJldHVybjsKKwkgIH0KKwljYXNlIENPTlNUX0lO VDoKKwkgIHsKKwkgICAgZnByaW50ZiAoZmlsZSwgIiQlbGQiLCBJTlRWQUwg KHgpKTsKKwkgICAgcmV0dXJuOworCSAgfQorCWNhc2UgVU5TUEVDOgorCSAg aW5mb3JtIChpbnB1dF9sb2NhdGlvbiwgIlVOU1BFQyEhIik7CisJICBzd2l0 Y2ggKFhJTlQgKHgsIDEpKQorCSAgICB7CisJICAgIGNhc2UgVU5TUEVDX0xJ QlJBUllfT0ZGU0VUOgorCSAgICAgIGluZm9ybSAoaW5wdXRfbG9jYXRpb24s ICJVTlNQRUNfTElCUkFSWV9PRkZTRVQhISEiKTsKKwkgICAgICBmcHJpbnRm IChmaWxlLCAiJXMiLCBjcjE2X2xpYnJhcnlfaWRfc3RyaW5nKTsKKwkgICAg ICByZXR1cm47CisKKwkgICAgZGVmYXVsdDoKKwkgICAgICBnY2NfdW5yZWFj aGFibGUgKCk7CisJICAgIH0KKwkgIGJyZWFrOworCisJZGVmYXVsdDoKKwkg IGlmICghcHRyX2RlcmVmZXJlbmNlKQorCSAgICB7CisJICAgICAgcHV0YyAo JyQnLCBmaWxlKTsKKwkgICAgfQorCSAgY3IxNl9wcmludF9vcGVyYW5kX2Fk ZHJlc3MgKGZpbGUsIHgpOworCSAgcmV0dXJuOworCX0KKyAgICBkZWZhdWx0 OgorICAgICAgb3V0cHV0X29wZXJhbmRfbG9zc2FnZSAoImludmFsaWQgJSV4 biBjb2RlIik7CisgICAgfQorCisgIGdjY191bnJlYWNoYWJsZSAoKTsKK30K KworLyogSW1wbGVtZW50cyB0aGUgbWFjcm8gUFJJTlRfT1BFUkFORF9BRERS RVNTIGRlZmluZWQgaW4gY3IxNi5oLiAgKi8KKwordm9pZAorY3IxNl9wcmlu dF9vcGVyYW5kX2FkZHJlc3MgKEZJTEUgKiBmaWxlLCBydHggYWRkcikKK3sK KyAgZW51bSBjcjE2X2FkZHJ0eXBlIGFkZHJ0eXBlOworICBzdHJ1Y3QgY3Ix Nl9hZGRyZXNzIGFkZHJlc3M7CisKKyAgLyogRGVjb21wb3NlIHRoZSBhZGRy ZXNzLiBBbHNvIGFzayBpdCB0byB0cmVhdCBhZGRyZXNzIGFzIGNvbnN0YW50 LiAgKi8KKyAgYWRkcnR5cGUgPSBjcjE2X2RlY29tcG9zZV9hZGRyZXNzIChh ZGRyLCAmYWRkcmVzcywgMCwgVFJVRSk7CisKKyAgaWYgKGFkZHJlc3MuZGlz cCAmJiBHRVRfQ09ERSAoYWRkcmVzcy5kaXNwKSA9PSBVTlNQRUMpCisgICAg eworICAgICAgaW5mb3JtIChpbnB1dF9sb2NhdGlvbiwgIlVOU1BFQyAzICgl ZCkhISEiLCBhZGRydHlwZSk7CisgICAgICBkZWJ1Z19ydHggKGFkZHIpOwor ICAgIH0KKworICBzd2l0Y2ggKGFkZHJ0eXBlKQorICAgIHsKKyAgICBjYXNl IENSMTZfUkVHX1JFTDoKKyAgICAgIGlmIChhZGRyZXNzLmRpc3ApCisJewor CSAgaWYgKEdFVF9DT0RFIChhZGRyZXNzLmRpc3ApID09IFVOU1BFQykKKwkg ICAgY3IxNl9wcmludF9vcGVyYW5kIChmaWxlLCBhZGRyZXNzLmRpc3AsIDAp OworCSAgZWxzZQorCSAgICBvdXRwdXRfYWRkcl9jb25zdCAoZmlsZSwgYWRk cmVzcy5kaXNwKTsKKwl9CisgICAgICBlbHNlCisJZnByaW50ZiAoZmlsZSwg IjAiKTsKKyAgICAgIGZwcmludGYgKGZpbGUsICIoJXMpIiwgcmVnX25hbWVz W1JFR05PIChhZGRyZXNzLmJhc2UpXSk7CisgICAgICBicmVhazsKKworICAg IGNhc2UgQ1IxNl9BQlNPTFVURToKKyAgICAgIGlmIChhZGRyZXNzLmRpc3Ap CisJb3V0cHV0X2FkZHJfY29uc3QgKGZpbGUsIGFkZHJlc3MuZGlzcCk7Cisg ICAgICBlbHNlCisJZnByaW50ZiAoZmlsZSwgIjAiKTsKKyAgICAgIGJyZWFr OworCisgICAgY2FzZSBDUjE2X0lOREVYX1JFR1BfUkVMOgorICAgICAgZnBy aW50ZiAoZmlsZSwgIlslc10iLCByZWdfbmFtZXNbUkVHTk8gKGFkZHJlc3Mu aW5kZXgpXSk7CisgICAgICAvKiBGYWxsIHRocm91Z2guICAqLworICAgIGNh c2UgQ1IxNl9SRUdQX1JFTDoKKyAgICAgIGlmIChhZGRyZXNzLmRpc3ApCisJ eworCSAgaWYgKEdFVF9DT0RFIChhZGRyZXNzLmRpc3ApID09IFVOU1BFQykK KwkgICAgY3IxNl9wcmludF9vcGVyYW5kIChmaWxlLCBhZGRyZXNzLmRpc3As IDApOworCSAgZWxzZQorCSAgICBvdXRwdXRfYWRkcl9jb25zdCAoZmlsZSwg YWRkcmVzcy5kaXNwKTsKKwl9CisgICAgICBlbHNlCisJZnByaW50ZiAoZmls ZSwgIjAiKTsKKyAgICAgIGZwcmludGYgKGZpbGUsICIoJXMsJXMpIiwgcmVn X25hbWVzW1JFR05PIChhZGRyZXNzLmJhc2UpICsgMV0sCisJICAgICAgIHJl Z19uYW1lc1tSRUdOTyAoYWRkcmVzcy5iYXNlKV0pOworICAgICAgYnJlYWs7 CisgICAgZGVmYXVsdDoKKyAgICAgIGRlYnVnX3J0eCAoYWRkcik7CisgICAg ICBnY2NfdW5yZWFjaGFibGUgKCk7CisgICAgfQorICAvKiBBZGQgcXVhbGlm aWVycyB0byB0aGUgYWRkcmVzcyBleHByZXNzaW9uIHRoYXQgd2FzIGp1c3Qg cHJpbnRlZC4gICovCisgIGlmIChmbGFnX3BpYyA8IE5FQVJfUElDICYmIGFk ZHJlc3MuY29kZSA9PSAwKQorICAgIHsKKyAgICAgIGlmIChhZGRyZXNzLmRh dGEgPT0gRE1fRkFSKQorCS8qIEFkZHIgY29udGFpbnMgU1lNQk9MX1JFRiAm IGZhciBkYXRhIHB0ci4gICovCisJZnByaW50ZiAoZmlsZSwgIkBsIik7Cisg ICAgICBlbHNlIGlmIChhZGRyZXNzLmRhdGEgPT0gRE1fREVGQVVMVCkKKwkv KiBBZGRyIGNvbnRhaW5zIFNZTUJPTF9SRUYgJiBtZWRpdW0gZGF0YSBwdHIu ICAqLworCWZwcmludGYgKGZpbGUsICJAbSIpOworICAgICAgLyogQWRkciBj b250YWlucyBTWU1CT0xfUkVGICYgbWVkaXVtIGRhdGEgcHRyLiAgKi8KKyAg ICAgIGVsc2UgaWYgKGFkZHJlc3MuZGF0YSA9PSBETV9ORUFSKQorCS8qIEFk ZHIgY29udGFpbnMgU1lNQk9MX1JFRiAmIG5lYXIgZGF0YSBwdHIuICAqLwor CWZwcmludGYgKGZpbGUsICJAcyIpOworICAgIH0KKyAgZWxzZSBpZiAoZmxh Z19waWMgPT0gTkVBUl9QSUMKKwkgICAmJiAoYWRkcmVzcy5jb2RlID09IDAp ICYmIChhZGRyZXNzLmRhdGEgPT0gRE1fRkFSCisJCQkJICAgICAgfHwgYWRk cmVzcy5kYXRhID09IERNX0RFRkFVTFQKKwkJCQkgICAgICB8fCBhZGRyZXNz LmRhdGEgPT0gRE1fTkVBUikpCisgICAgeworICAgICAgZnByaW50ZiAoZmls ZSwgIkBsIik7CisgICAgfQorICBlbHNlIGlmIChmbGFnX3BpYyA9PSBORUFS X1BJQyAmJiBhZGRyZXNzLmNvZGUgPT0gMikKKyAgICB7CisgICAgICBmcHJp bnRmIChmaWxlLCAicGljIik7CisgICAgfQorICBlbHNlIGlmIChmbGFnX3Bp YyA9PSBORUFSX1BJQyAmJiBhZGRyZXNzLmNvZGUgPT0gMSkKKyAgICB7Cisg ICAgICBmcHJpbnRmIChmaWxlLCAiQGNwaWMiKTsKKyAgICB9CisKKyAgZWxz ZSBpZiAoZmxhZ19waWMgPT0gRkFSX1BJQyAmJiBhZGRyZXNzLmNvZGUgPT0g MikKKyAgICB7CisgICAgICAvKiBSRVZJU0lUOiBjcjE2IHJlZ2lzdGVyIGlu ZGlyZWN0IGp1bXAgZXhwZWN0cyBhIDEtYml0IHJpZ2h0IHNoaWZ0ZWQKKyAg ICAgICAgIGFkZHJlc3MgISBHT1RjIHRlbGxzIGFzc2VtYmxlciB0aGlzIHN5 bWJvbCBpcyBhIHRleHQtYWRkcmVzcyAKKyAgICAgICAgIFRoaXMgbmVlZHMg dG8gYmUgZml4ZWQgaW4gc3VjaCBhIHdheSB0aGF0IHRoaXMgb2Zmc2V0IGlz IGRvbmUgCisgICAgICAgICBvbmx5IGluIHRoZSBjYXNlIHdoZXJlIGFuIGFk ZHJlc3MgaXMgYmVpbmcgdXNlZCBmb3IgaW5kaXJlY3QganVtcAorICAgICAg ICAgb3IgY2FsbC4gRGV0ZXJtaW5pbmcgdGhlIHBvdGVudGlhbCB1c2FnZSBv ZiBsb2FkZCBpcyBvZiBjb3Vyc2Ugbm90CisgICAgICAgICBwb3NzaWJsZSBh bHdheXMuIEV2ZW50dWFsbHksIHRoaXMgaGFzIHRvIGJlIGZpeGVkIGluIHRo ZSAKKyAgICAgICAgIHByb2Nlc3Nvci4gICovCisgICAgICBmcHJpbnRmIChm aWxlLCAiR09UICglcykiLCByZWdfbmFtZXNbUElDX09GRlNFVF9UQUJMRV9S RUdOVU1dKTsKKyAgICB9CisgIGVsc2UgaWYgKGZsYWdfcGljID09IEZBUl9Q SUMgJiYgYWRkcmVzcy5jb2RlID09IDEpCisgICAgeworICAgICAgZnByaW50 ZiAoZmlsZSwgIkBjR09UICglcykiLCByZWdfbmFtZXNbUElDX09GRlNFVF9U QUJMRV9SRUdOVU1dKTsKKyAgICB9CisKKyAgZWxzZSBpZiAoZmxhZ19waWMg PT0gRkFSX1BJQyAmJgorCSAgIChhZGRyZXNzLmRhdGEgPT0gRE1fRkFSIHx8 IGFkZHJlc3MuZGF0YSA9PSBETV9ERUZBVUxUCisJICAgIHx8IGFkZHJlc3Mu ZGF0YSA9PSBETV9ORUFSKSkKKyAgICB7CisgICAgICBmcHJpbnRmIChmaWxl LCAiQEdPVCAoJXMpIiwgcmVnX25hbWVzW1BJQ19PRkZTRVRfVEFCTEVfUkVH TlVNXSk7CisgICAgfQorfQorCisvKiBNYWNoaW5lIGRlc2NyaXB0aW9uIGhl bHBlciBmdW5jdGlvbnMuICAqLwordm9pZAorY3IxNl9leHBhbmRfbW92bWVt X3NpbmdsZSAocnR4IHNyYywgcnR4IHNyY2Jhc2UsIHJ0eCBkc3QsIHJ0eCBk c3RiYXNlLAorCQkJICAgcnR4IHRtcF9yZWcsIHVuc2lnbmVkIEhPU1RfV0lE RV9JTlQgKiBvZmZzZXRfcCkKK3sKKyAgcnR4IGFkZHIsIG1lbTsKKyAgdW5z aWduZWQgSE9TVF9XSURFX0lOVCBvZmZzZXQgPSAqb2Zmc2V0X3A7CisKKyAg LyogTG9hZC4gICovCisgIGFkZHIgPSBwbHVzX2NvbnN0YW50IChzcmMsIG9m ZnNldCk7CisgIG1lbSA9IGFkanVzdF9hdXRvbW9kaWZ5X2FkZHJlc3MgKHNy Y2Jhc2UsIFNJbW9kZSwgYWRkciwgb2Zmc2V0KTsKKyAgZW1pdF9tb3ZlX2lu c24gKHRtcF9yZWcsIG1lbSk7CisKKyAgLyogU3RvcmUuICAqLworICBhZGRy ID0gcGx1c19jb25zdGFudCAoZHN0LCBvZmZzZXQpOworICBtZW0gPSBhZGp1 c3RfYXV0b21vZGlmeV9hZGRyZXNzIChkc3RiYXNlLCBTSW1vZGUsIGFkZHIs IG9mZnNldCk7CisgIGVtaXRfbW92ZV9pbnNuIChtZW0sIHRtcF9yZWcpOwor CisgICpvZmZzZXRfcCA9IG9mZnNldCArIDQ7Cit9CisKK2ludAorY3IxNl9l eHBhbmRfbW92bWVtIChydHggZHN0YmFzZSwgcnR4IHNyY2Jhc2UsIHJ0eCBj b3VudF9leHAsIHJ0eCBhbGlnbl9leHApCit7CisgIHVuc2lnbmVkIEhPU1Rf V0lERV9JTlQgY291bnQgPSAwLCBvZmZzZXQsIHNpX21vdmVzLCBpOworICBI T1NUX1dJREVfSU5UIGFsaWduID0gMDsKKworICBydHggc3JjLCBkc3Q7Cisg IHJ0eCB0bXBfcmVnOworCisgIGlmIChHRVRfQ09ERSAoYWxpZ25fZXhwKSA9 PSBDT05TVF9JTlQpCisgICAgewkJCQkvKiBPbmx5IGlmIGFsaWduZWQuICAq LworICAgICAgYWxpZ24gPSBJTlRWQUwgKGFsaWduX2V4cCk7CisgICAgICBp ZiAoYWxpZ24gJiAzKQorCXJldHVybiAwOworICAgIH0KKworICBpZiAoR0VU X0NPREUgKGNvdW50X2V4cCkgPT0gQ09OU1RfSU5UKQorICAgIHsJCQkJLyog Tm8gbW9yZSB0aGFuIDE2IFNJbW9kZSBtb3Zlcy4gICovCisgICAgICBjb3Vu dCA9IElOVFZBTCAoY291bnRfZXhwKTsKKyAgICAgIGlmIChjb3VudCA+IDY0 KQorCXJldHVybiAwOworICAgIH0KKworICB0bXBfcmVnID0gZ2VuX3JlZ19y dHggKFNJbW9kZSk7CisKKyAgLyogQ3JlYXRlIHBzcnMgZm9yIHRoZSBzcmMg YW5kIGRlc3QgcG9pbnRlcnMuICAqLworICBkc3QgPSBjb3B5X3RvX21vZGVf cmVnIChQbW9kZSwgWEVYUCAoZHN0YmFzZSwgMCkpOworICBpZiAoZHN0ICE9 IFhFWFAgKGRzdGJhc2UsIDApKQorICAgIGRzdGJhc2UgPSByZXBsYWNlX2Vx dWl2X2FkZHJlc3NfbnYgKGRzdGJhc2UsIGRzdCk7CisgIHNyYyA9IGNvcHlf dG9fbW9kZV9yZWcgKFBtb2RlLCBYRVhQIChzcmNiYXNlLCAwKSk7CisgIGlm IChzcmMgIT0gWEVYUCAoc3JjYmFzZSwgMCkpCisgICAgc3JjYmFzZSA9IHJl cGxhY2VfZXF1aXZfYWRkcmVzc19udiAoc3JjYmFzZSwgc3JjKTsKKworICBv ZmZzZXQgPSAwOworCisgIC8qIEVtaXQgU0ltb2RlIG1vdmVzLiAgKi8KKyAg c2lfbW92ZXMgPSBjb3VudCA+PiAyOworICBmb3IgKGkgPSAwOyBpIDwgc2lf bW92ZXM7IGkrKykKKyAgICBjcjE2X2V4cGFuZF9tb3ZtZW1fc2luZ2xlIChz cmMsIHNyY2Jhc2UsIGRzdCwgZHN0YmFzZSwgdG1wX3JlZywgJm9mZnNldCk7 CisKKyAgLyogU3BlY2lhbCBjYXNlcy4gICovCisgIGlmIChjb3VudCAmIDMp CisgICAgeworICAgICAgb2Zmc2V0ID0gY291bnQgLSA0OworICAgICAgY3Ix Nl9leHBhbmRfbW92bWVtX3NpbmdsZSAoc3JjLCBzcmNiYXNlLCBkc3QsIGRz dGJhc2UsIHRtcF9yZWcsCisJCQkJICZvZmZzZXQpOworICAgIH0KKworICBn Y2NfYXNzZXJ0IChvZmZzZXQgPT0gY291bnQpOworCisgIHJldHVybiAxOwor fQorCisvKiBDYWxsZWQgZnJvbSBjcjE2Lm1kLiBUaGUgcmV0dXJuIHZhbHVl IGRlcGVuZHMgb24gdGhlIHBhcmFtZXRlciBwdXNoX29yX3BvcDoKKyAgIFdo ZW4gcHVzaF9vcl9wb3AgaXMgemVybyAtPiBzdHJpbmcgZm9yIHB1c2ggaW5z dHJ1Y3Rpb25zIG9mIHByb2xvZ3VlLgorICAgV2hlbiBwdXNoX29yX3BvcCBp cyBub256ZXJvIC0+IHN0cmluZyBmb3IgcG9wL3BvcHJldC9yZXR4IGluIGVw aWxvZ3VlLgorICAgUmVsaWVzIG9uIHRoZSBhc3N1bXB0aW9uczoKKyAgIDEu IFJBIGlzIHRoZSBsYXN0IHJlZ2lzdGVyIHRvIGJlIHNhdmVkLgorICAgMi4g VGhlIG1heGltYWwgdmFsdWUgb2YgdGhlIGNvdW50ZXIgaXMgTUFYX0NPVU5U LiAgKi8KK2NoYXIgKgorY3IxNl9wcmVwYXJlX3B1c2hfcG9wX3N0cmluZyAo aW50IHB1c2hfb3JfcG9wKQoreworICAvKiBqIGlzIHRoZSBudW1iZXIgb2Yg cmVnaXN0ZXJzIGJlaW5nIHNhdmVkLCB0YWtlcyBjYXJlIHRoYXQgdGhlcmUg d29uJ3QgYmUKKyAgICAgbW9yZSB0aGFuIDggaW4gb25lIHB1c2gvcG9wIGlu c3RydWN0aW9uLiAgKi8KKworICAvKiBGb3IgdGhlIHJlZ2lzdGVyIG1hc2sg c3RyaW5nLiAgKi8KKyAgc3RhdGljIGNoYXIgb25lX2luc3Rfc3RyWzUwXTsK KworICAvKiBpIGlzIHRoZSBpbmRleCBvZiBjdXJyZW50X2ZyYW1lX2luZm8u c2F2ZV9yZWdzW10sIGdvaW5nIGZyb20gMCB1bnRpbCAKKyAgICAgY3VycmVu dF9mcmFtZV9pbmZvLmxhc3RfcmVnX3RvX3NhdmUuICAqLworICBpbnQgaSwg c3RhcnRfcmVnOworICBpbnQgd29yZF9jbnQ7CisgIGludCBwcmludF9yYTsK KyAgY2hhciAqcmV0dXJuX3N0cjsKKworICAvKiBGb3IgcmV2ZXJzaW5nIG9u IHRoZSBwdXNoIGluc3RydWN0aW9ucyBpZiB0aGVyZSBhcmUgbW9yZSB0aGFu IG9uZS4gICovCisgIGNoYXIgKnRlbXBfc3RyOworCisgIHJldHVybl9zdHIg PSAoY2hhciAqKSB4bWFsbG9jICgxNjApOworICB0ZW1wX3N0ciA9IChjaGFy ICopIHhtYWxsb2MgKDE2MCk7CisKKyAgLyogSW5pdGlhbGl6ZS4gICovCisg IG1lbXNldCAocmV0dXJuX3N0ciwgMCwgMyk7CisKKyAgaSA9IDA7CisgIHdo aWxlIChpIDw9IGN1cnJlbnRfZnJhbWVfaW5mby5sYXN0X3JlZ190b19zYXZl KQorICAgIHsKKyAgICAgIC8qIFByZXBhcmUgbWFzayBmb3Igb25lIGluc3Ry dWN0aW9uLiAgKi8KKyAgICAgIG9uZV9pbnN0X3N0clswXSA9IDA7CisKKyAg ICAgIC8qIFRvIGNvdW50IG51bWJlciBvZiB3b3JkcyBpbiBvbmUgaW5zdHJ1 Y3Rpb24uICAqLworICAgICAgd29yZF9jbnQgPSAwOworICAgICAgc3RhcnRf cmVnID0gaTsKKyAgICAgIHByaW50X3JhID0gMDsKKyAgICAgIHdoaWxlICgo d29yZF9jbnQgPCBNQVhfQ09VTlQpIAorCSAgICAgJiYgKGkgPD0gY3VycmVu dF9mcmFtZV9pbmZvLmxhc3RfcmVnX3RvX3NhdmUpKQorCXsKKwkgIC8qIEZv ciBlYWNoIG5vbiBjb25zZWN1dGl2ZSBzYXZlIHJlZ2lzdGVyLCAKKwkgICAg IGEgbmV3IGluc3RydWN0aW9uIHNoYWxsIGJlIGdlbmVyYXRlZC4gICovCisJ ICBpZiAoIWN1cnJlbnRfZnJhbWVfaW5mby5zYXZlX3JlZ3NbaV0pCisJICAg IHsKKwkgICAgICAvKiBNb3ZlIHRvIG5leHQgcmVnIGFuZCBicmVhay4gICov CisJICAgICAgKytpOworCSAgICAgIGJyZWFrOworCSAgICB9CisKKwkgIGlm IChpID09IFJFVFVSTl9BRERSRVNTX1JFR05VTSkKKwkgICAgcHJpbnRfcmEg PSAxOworCSAgZWxzZQorCSAgICB7CisJICAgICAgLyogQ2hlY2sgZXNwZWNp YWxseSBpZiBhZGRpbmcgMiBkb2VzIG5vdCBjcm9zcyB0aGUgTUFYX0NPVU5U LiAgKi8KKwkgICAgICBpZiAoKHdvcmRfY250ICsgKChpIDwgQ1IxNl9GSVJT VF9EV09SRF9SRUdJU1RFUikgPyAxIDogMikpCisJCSAgPj0gTUFYX0NPVU5U KQorCQlicmVhazsKKwkgICAgICAvKiBJbmNyZWFzZSB3b3JkIGNvdW50IGJ5 IDIgZm9yIGxvbmcgcmVnaXN0ZXJzIGV4Y2VwdCBSQS4gICAqLworCSAgICAg IHdvcmRfY250ICs9ICgoaSA8IENSMTZfRklSU1RfRFdPUkRfUkVHSVNURVIp ID8gMSA6IDIpOworCSAgICB9CisJICArK2k7CisJfQorCisgICAgICAvKiBO byBuZWVkIHRvIGdlbmVyYXRlIGFueSBpbnN0cnVjdGlvbiBhcworICAgICAg ICAgbm8gcmVnaXN0ZXIgb3IgUkEgbmVlZHMgdG8gYmUgc2F2ZWQuICAqLwor ICAgICAgaWYgKCh3b3JkX2NudCA9PSAwKSAmJiAocHJpbnRfcmEgPT0gMCkp CisJY29udGludWU7CisKKyAgICAgIC8qIE5vdyBwcmVwYXJlIHRoZSBpbnN0 cnVjdGlvbiBvcGVyYW5kcy4gICovCisgICAgICBpZiAod29yZF9jbnQgPiAw KQorCXsKKwkgIHNwcmludGYgKG9uZV9pbnN0X3N0ciwgIiQlZCwgJXMiLCB3 b3JkX2NudCwgcmVnX25hbWVzW3N0YXJ0X3JlZ10pOworCSAgaWYgKHByaW50 X3JhKQorCSAgICBzdHJjYXQgKG9uZV9pbnN0X3N0ciwgIiwgcmEiKTsKKwl9 CisgICAgICBlbHNlCisJc3RyY2F0IChvbmVfaW5zdF9zdHIsICJyYSIpOwor CisgICAgICBpZiAocHVzaF9vcl9wb3AgPT0gMSkKKwl7CisJICAvKiBQb3Ag aW5zdHJ1Y3Rpb24uICAqLworCSAgaWYgKHByaW50X3JhICYmICFjcjE2X2lu dGVycnVwdF9mdW5jdGlvbl9wICgpCisJICAgICAgJiYgIWNydGwtPmNhbGxz X2VoX3JldHVybikKKwkgICAgLyogUHJpbnQgcG9wcmV0IGlmIFJBIGlzIHNh dmVkIGFuZCBpdHMgbm90IGEgaW50ZXJydXB0IAorCSAgICAgICBmdW5jdGlv bi4gICovCisJICAgIHN0cmNweSAodGVtcF9zdHIsICJcblx0cG9wcmV0XHQi KTsKKwkgIGVsc2UKKwkgICAgc3RyY3B5ICh0ZW1wX3N0ciwgIlxuXHRwb3Bc dCIpOworCisJICBzdHJjYXQgKHRlbXBfc3RyLCBvbmVfaW5zdF9zdHIpOwor CisJICAvKiBBZGQgdGhlIHBvcCBpbnN0cnVjdGlvbiBsaXN0LiAgKi8KKwkg IHN0cmNhdCAocmV0dXJuX3N0ciwgdGVtcF9zdHIpOworCX0KKyAgICAgIGVs c2UKKwl7CisJICAvKiBQdXNoIGluc3RydWN0aW9uLiAgKi8KKwkgIHN0cmNw eSAodGVtcF9zdHIsICJcblx0cHVzaFx0Iik7CisJICBzdHJjYXQgKHRlbXBf c3RyLCBvbmVfaW5zdF9zdHIpOworCisJICAvKiBXZSBuZWVkIHRvIHJldmVy c2UgdGhlIG9yZGVyIG9mIHRoZSBpbnN0cnVjdGlvbnMgaWYgdGhlcmUKKwkg ICAgIGFyZSBtb3JlIHRoYW4gb25lLiAoc2luY2UgdGhlIHBvcCB3aWxsIG5v dCBiZSByZXZlcnNlZCBpbiAKKwkgICAgIHRoZSBlcGlsb2d1ZS4gICovCisJ ICBzdHJjYXQgKHRlbXBfc3RyLCByZXR1cm5fc3RyKTsKKwkgIHN0cmNweSAo cmV0dXJuX3N0ciwgdGVtcF9zdHIpOworCX0KKworICAgIH0KKworICBpZiAo cHVzaF9vcl9wb3AgPT0gMSkKKyAgICB7CisgICAgICAvKiBwb3AuICAqLwor ICAgICAgaWYgKGNyMTZfaW50ZXJydXB0X2Z1bmN0aW9uX3AgKCkpCisJc3Ry Y2F0IChyZXR1cm5fc3RyLCAiXG5cdHJldHhcbiIpOworICAgICAgZWxzZSBp ZiAoY3J0bC0+Y2FsbHNfZWhfcmV0dXJuKQorCXsKKwkgIC8qIEFkZCBzdGFj ayBhZGp1c3RtZW50IGJlZm9yZSByZXR1cm5pbmcgdG8gZXhjZXB0aW9uIGhh bmRsZXIKKwkgICAgIE5PVEU6IEVIX1JFVFVSTl9TVEFDS0FESl9SVFggbXVz dCByZWZlciB0byAocjUscjQpLiAgKi8KKwkgIHN0cmNhdCAocmV0dXJuX3N0 ciwgIlxuXHRhZGRkXHQgKHI1LHI0KSwgKHNwKVx0XG4iKTsKKwkgIHN0cmNh dCAocmV0dXJuX3N0ciwgIlxuXHRqdW1wXHQgKHJhKVxuIik7CisKKwkgIC8q IEJ1dCBiZWZvcmUgYW55dGhpbmcgZWxzZSwgdW5kbyB0aGUgYWRqdXN0bWVu dCBhZGRpdGlvbiBkb25lIGluCisJICAgICBjcjE2X2V4cGFuZF9lcGlsb2d1 ZSAoKS4gICovCisJICBzdHJjcHkgKHRlbXBfc3RyLCAiXG5cdHN1YmRcdCAo cjUscjQpLCAoc3ApXHRcbiIpOworCSAgc3RyY2F0ICh0ZW1wX3N0ciwgcmV0 dXJuX3N0cik7CisJICBzdHJjcHkgKHJldHVybl9zdHIsIHRlbXBfc3RyKTsK Kwl9CisgICAgICBlbHNlIGlmICghRlVOQ19JU19OT1JFVFVSTl9QIChjdXJy ZW50X2Z1bmN0aW9uX2RlY2wpCisJICAgICAgICYmICEoY3VycmVudF9mcmFt ZV9pbmZvLnNhdmVfcmVnc1tSRVRVUk5fQUREUkVTU19SRUdOVU1dKSkKKwlz dHJjYXQgKHJldHVybl9zdHIsICJcblx0anVtcFx0IChyYSlcbiIpOworICAg IH0KKworICAvKiBTa2lwIHRoZSBuZXdsaW5lIGFuZCB0aGUgdGFiIGluIHRo ZSBzdGFydCBvZiByZXR1cm5fc3RyLiAgKi8KKyAgcmV0dXJuX3N0ciArPSAy OworICByZXR1cm4gcmV0dXJuX3N0cjsKK30KKworCisvKiBHZW5lcmF0ZSBE V0FSRjIgYW5ub3RhdGlvbiBmb3IgbXVsdGktcHVzaCBpbnN0cnVjdGlvbi4g ICovCitzdGF0aWMgdm9pZAorY3IxNl9jcmVhdGVfZHdhcmZfZm9yX211bHRp X3B1c2ggKHJ0eCBpbnNuKQoreworICBydHggZHdhcmYsIHJlZywgdG1wOwor ICBpbnQgaSwgaiwgZnJvbSwgdG8sIHdvcmRfY250LCBkd2FyZl9wYXJfaW5k ZXgsIGluYzsKKyAgZW51bSBtYWNoaW5lX21vZGUgbW9kZTsKKyAgaW50IG51 bV9yZWdzID0gMCwgb2Zmc2V0ID0gMCwgc3BsaXRfaGVyZSA9IDAsIHRvdGFs X3B1c2hfYnl0ZXMgPSAwOworCisgIGZvciAoaSA9IDA7IGkgPD0gY3VycmVu dF9mcmFtZV9pbmZvLmxhc3RfcmVnX3RvX3NhdmU7ICsraSkKKyAgICB7Cisg ICAgICBpZiAoY3VycmVudF9mcmFtZV9pbmZvLnNhdmVfcmVnc1tpXSkKKwl7 CisJICArK251bV9yZWdzOworCSAgaWYgKGkgPCBDUjE2X0ZJUlNUX0RXT1JE X1JFR0lTVEVSKQorCSAgICB0b3RhbF9wdXNoX2J5dGVzICs9IDI7CisJICBl bHNlCisJICAgIHRvdGFsX3B1c2hfYnl0ZXMgKz0gNDsKKwl9CisgICAgfQor CisgIGlmICghbnVtX3JlZ3MpCisgICAgcmV0dXJuOworCisgIGR3YXJmID0g Z2VuX3J0eF9TRVFVRU5DRSAoVk9JRG1vZGUsIHJ0dmVjX2FsbG9jIChudW1f cmVncyArIDEpKTsKKyAgZHdhcmZfcGFyX2luZGV4ID0gbnVtX3JlZ3M7CisK KyAgZnJvbSA9IGN1cnJlbnRfZnJhbWVfaW5mby5sYXN0X3JlZ190b19zYXZl ICsgMTsKKyAgdG8gPSBjdXJyZW50X2ZyYW1lX2luZm8ubGFzdF9yZWdfdG9f c2F2ZTsKKyAgd29yZF9jbnQgPSAwOworCisgIGZvciAoaSA9IGN1cnJlbnRf ZnJhbWVfaW5mby5sYXN0X3JlZ190b19zYXZlOyBpID49IDA7KQorICAgIHsK KyAgICAgIGlmICghY3VycmVudF9mcmFtZV9pbmZvLnNhdmVfcmVnc1tpXSB8 fCAwID09IGkgfHwgc3BsaXRfaGVyZSkKKwl7CisJICAvKiBUaGlzIGJsb2Nr IG9mIHJlZ3MgaXMgcHVzaGVkIGluIG9uZSBpbnN0cnVjdGlvbi4gICovCisJ ICBpZiAoMCA9PSBpICYmIGN1cnJlbnRfZnJhbWVfaW5mby5zYXZlX3JlZ3Nb aV0pCisJICAgIGZyb20gPSAwOworCisJICBmb3IgKGogPSB0bzsgaiA+PSBm cm9tOyAtLWopCisJICAgIHsKKwkgICAgICBpZiAoaiA8IENSMTZfRklSU1Rf RFdPUkRfUkVHSVNURVIpCisJCXsKKwkJICBtb2RlID0gSEltb2RlOworCQkg IGluYyA9IDE7CisJCX0KKwkgICAgICBlbHNlCisJCXsKKwkJICBtb2RlID0g U0ltb2RlOworCQkgIGluYyA9IDI7CisJCX0KKwkgICAgICByZWcgPSBnZW5f cnR4X1JFRyAobW9kZSwgaik7CisJICAgICAgb2Zmc2V0ICs9IDIgKiBpbmM7 CisJICAgICAgdG1wID0gZ2VuX3J0eF9TRVQgKFZPSURtb2RlLAorCQkJCSBn ZW5fZnJhbWVfbWVtIChtb2RlLAorCQkJCQkJcGx1c19jb25zdGFudAorCQkJ CQkJKHN0YWNrX3BvaW50ZXJfcnR4LAorCQkJCQkJIHRvdGFsX3B1c2hfYnl0 ZXMgLSBvZmZzZXQpKSwKKwkJCQkgcmVnKTsKKwkgICAgICBSVFhfRlJBTUVf UkVMQVRFRF9QICh0bXApID0gMTsKKwkgICAgICBYVkVDRVhQIChkd2FyZiwg MCwgZHdhcmZfcGFyX2luZGV4LS0pID0gdG1wOworCSAgICB9CisJICBmcm9t ID0gaTsKKwkgIHRvID0gLS1pOworCSAgc3BsaXRfaGVyZSA9IDA7CisJICB3 b3JkX2NudCA9IDA7CisJICBjb250aW51ZTsKKwl9CisKKyAgICAgIGlmIChp ICE9IFJFVFVSTl9BRERSRVNTX1JFR05VTSkKKwl7CisJICBpbmMgPSAoaSA8 IENSMTZfRklSU1RfRFdPUkRfUkVHSVNURVIpID8gMSA6IDI7CisJICBpZiAo d29yZF9jbnQgKyBpbmMgPj0gTUFYX0NPVU5UIHx8IEZSQU1FX1BPSU5URVJf UkVHTlVNID09IGkpCisJICAgIHsKKwkgICAgICBzcGxpdF9oZXJlID0gMTsK KwkgICAgICBmcm9tID0gaTsKKwkgICAgICBjb250aW51ZTsKKwkgICAgfQor CSAgd29yZF9jbnQgKz0gaW5jOworCX0KKworICAgICAgZnJvbSA9IGktLTsK KyAgICB9CisKKyAgdG1wID0gZ2VuX3J0eF9TRVQgKFNJbW9kZSwgc3RhY2tf cG9pbnRlcl9ydHgsCisJCSAgICAgZ2VuX3J0eF9QTFVTIChTSW1vZGUsIHN0 YWNrX3BvaW50ZXJfcnR4LAorCQkJCSAgIEdFTl9JTlQgKC1vZmZzZXQpKSk7 CisgIFJUWF9GUkFNRV9SRUxBVEVEX1AgKHRtcCkgPSAxOworICBYVkVDRVhQ IChkd2FyZiwgMCwgMCkgPSB0bXA7CisKKyAgUkVHX05PVEVTIChpbnNuKSA9 IGdlbl9ydHhfRVhQUl9MSVNUIChSRUdfRlJBTUVfUkVMQVRFRF9FWFBSLCBk d2FyZiwKKwkJCQkJUkVHX05PVEVTIChpbnNuKSk7Cit9CisKKworLyoKK0Nv bXBhY3RSSVNDIENSMTYgQXJjaGl0ZWN0dXJlIHN0YWNrIGxheW91dDoKKwor ICAgICAwICstLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICB8CisgICAgLgor ICAgIC4KKyAgICB8CisgICAgKz09PT09PT09PT09PT09PT09PT09IFNwICh4 KSA9IEFwICh4KzEpCisgICAgICBBIHwgQXJncyBmb3IgZnVuY3Rpb25zCisg ICAgICB8IHwgY2FsbGVkIGJ5IFggYW5kICAgICAgRHluYW1pY2FsbHkKKyAg ICAgIHwgfCBEeW5hbWljIGFsbG9jYXRpb25zICBhbGxvY2F0ZWQgYW5kCisg ICAgICB8IHwgKGFsbG9jYSwgdmFyaWFibGUgICAgZGVhbGxvY2F0ZWQKKyAg U3RhY2sgfCBsZW5ndGggYXJyYXlzKS4KKyAgZ3Jvd3MgKy0tLS0tLS0tLS0t LS0tLS0tLS0tIEZwICh4KQorICBkb3dufCB8IExvY2FsIHZhcmlhYmxlcyBv ZiBYCisgIHdhcmR8ICstLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgfCB8 IFJlZ3Mgc2F2ZWQgZm9yIFgtMQorICAgICAgfCArPT09PT09PT09PT09PT09 PT09PT0gU3AgKHgtMSkgPSBBcCAoeCkKKyAgICB8IEFyZ3MgZm9yIGZ1bmMg WAorICAgIHwgcHVzaGVkIGJ5IFgtMQorICAgICstLS0tLS0tLS0tLS0tLS0t LS0tLSBGcCAoeC0xKQorICAgIHwKKyAgICB8CisgICAgVgorKi8KK3ZvaWQK K2NyMTZfZXhwYW5kX3Byb2xvZ3VlICh2b2lkKQoreworICBydHggaW5zbjsK KworICBjcjE2X2NvbXB1dGVfZnJhbWUgKCk7CisgIGNyMTZfY29tcHV0ZV9z YXZlX3JlZ3MgKCk7CisKKyAgLyogSWYgdGhlcmUgaXMgbm8gbmVlZCBpbiBw dXNoIGFuZCBhZGp1c3RtZW50IHRvIHNwLCByZXR1cm4uICAqLworICBpZiAo KGN1cnJlbnRfZnJhbWVfaW5mby50b3RhbF9zaXplICsgY3VycmVudF9mcmFt ZV9pbmZvLnJlZ19zaXplKSA9PSAwKQorICAgIHJldHVybjsKKworICBpZiAo Y3VycmVudF9mcmFtZV9pbmZvLmxhc3RfcmVnX3RvX3NhdmUgIT0gLTEpCisg ICAgeworICAgICAgLyogSWYgdGhlcmUgYXJlIHJlZ2lzdGVycyB0byBwdXNo LiAgKi8KKyAgICAgIGluc24gPSBlbWl0X2luc24gKGdlbl9wdXNoX2Zvcl9w cm9sb2d1ZQorCQkJKEdFTl9JTlQgKGN1cnJlbnRfZnJhbWVfaW5mby5yZWdf c2l6ZSkpKTsKKyAgICAgIGNyMTZfY3JlYXRlX2R3YXJmX2Zvcl9tdWx0aV9w dXNoIChpbnNuKTsKKyAgICAgIFJUWF9GUkFNRV9SRUxBVEVEX1AgKGluc24p ID0gMTsKKyAgICB9CisKKyAgaWYgKFRBUkdFVF9JRF9TSEFSRURfTElCUkFS WSkKKyAgICBlbWl0X2luc24gKGdlbl91bnNwZWNfbGlicmFyeV9vZmZzZXQg KCkpOworCisgIGlmIChjdXJyZW50X2ZyYW1lX2luZm8udG90YWxfc2l6ZSA+ IDApCisgICAgeworICAgICAgaW5zbiA9IGVtaXRfaW5zbiAoZ2VuX2FkZHNp MyAoc3RhY2tfcG9pbnRlcl9ydHgsIHN0YWNrX3BvaW50ZXJfcnR4LAorCQkJ CSAgICBHRU5fSU5UICgtY3VycmVudF9mcmFtZV9pbmZvLnRvdGFsX3NpemUp KSk7CisgICAgICBSVFhfRlJBTUVfUkVMQVRFRF9QIChpbnNuKSA9IDE7Cisg ICAgfQorCisgIGlmIChmcmFtZV9wb2ludGVyX25lZWRlZCkKKyAgICB7Cisg ICAgICAvKiBJbml0aWFsaXplIHRoZSBmcmFtZSBwb2ludGVyIHdpdGggdGhl IHZhbHVlIG9mIHRoZSBzdGFjayBwb2ludGVyCisgICAgICAgICBwb2ludGlu ZyBub3cgdG8gdGhlIGxvY2Fscy4gICovCisgICAgICBpbnNuID0gZW1pdF9t b3ZlX2luc24gKGZyYW1lX3BvaW50ZXJfcnR4LCBzdGFja19wb2ludGVyX3J0 eCk7CisgICAgfQorfQorCisvKiBHZW5lcmF0ZSBpbnNuIHRoYXQgdXBkYXRl cyB0aGUgc3RhY2sgZm9yIGxvY2FsIHZhcmlhYmxlcyBhbmQgcGFkZGluZyAK KyAgIGZvciByZWdpc3RlcnMgd2Ugc2F2ZS4gICAtIEdlbmVyYXRlIHRoZSBh cHByb3ByaWF0ZSByZXR1cm4gaW5zbi4gICovCit2b2lkCitjcjE2X2V4cGFu ZF9lcGlsb2d1ZSAodm9pZCkKK3sKKyAgcnR4IGluc247CisgIHJ0eCByZXR1 cm5fcmVnOworCisgIC8qIE5vbnplcm8gaWYgd2UgbmVlZCB0byByZXR1cm4g YW5kIHBvcCBvbmx5IFJBLiBUaGlzIHdpbGwgZ2VuZXJhdGUgYQorICAgICBk aWZmZXJlbnQgaW5zbi4gVGhpcyBkaWZmZXJlbnRpYXRlIGlzIGZvciB0aGUg cGVlcGhvbGVzIGZvciBjYWxsIGFzIAorICAgICBsYXN0IHN0YXRlbWVudCBp biBmdW5jdGlvbi4gICovCisgIGludCBvbmx5X3BvcHJldF9SQSA9IChjdXJy ZW50X2ZyYW1lX2luZm8uc2F2ZV9yZWdzW1JFVFVSTl9BRERSRVNTX1JFR05V TV0KKwkJCSYmIChjdXJyZW50X2ZyYW1lX2luZm8ucmVnX3NpemUgCisJCQkg PT0gQ1IxNl9VTklUU19QRVJfRFdPUkQpKTsKKworICAvKiBSZXR1cm4gcmVn aXN0ZXIuICAqLworICByZXR1cm5fcmVnID0gZ2VuX3J0eF9SRUcgKFBtb2Rl LCBSRVRVUk5fQUREUkVTU19SRUdOVU0pOworCisgIGlmIChmcmFtZV9wb2lu dGVyX25lZWRlZCkKKyAgICB7CisgICAgICAvKiBSZXN0b3JlIHRoZSBzdGFj ayBwb2ludGVyIHdpdGggdGhlIGZyYW1lIHBvaW50ZXJzIHZhbHVlLiAgKi8K KyAgICAgIGluc24gPSBlbWl0X21vdmVfaW5zbiAoc3RhY2tfcG9pbnRlcl9y dHgsIGZyYW1lX3BvaW50ZXJfcnR4KTsKKyAgICB9CisKKyAgaWYgKGN1cnJl bnRfZnJhbWVfaW5mby50b3RhbF9zaXplID4gMCkKKyAgICB7CisgICAgICBp bnNuID0gZW1pdF9pbnNuIChnZW5fYWRkc2kzIChzdGFja19wb2ludGVyX3J0 eCwgc3RhY2tfcG9pbnRlcl9ydHgsCisJCQkJICAgIEdFTl9JTlQgKGN1cnJl bnRfZnJhbWVfaW5mby50b3RhbF9zaXplKSkpOworICAgICAgUlRYX0ZSQU1F X1JFTEFURURfUCAoaW5zbikgPSAxOworICAgIH0KKworICBpZiAoY3J0bC0+ Y2FsbHNfZWhfcmV0dXJuKQorICAgIHsKKyAgICAgIC8qIEFkZCB0aGlzIGhl cmUgc28gdGhhdCAocjUscjQpIGlzIGFjdHVhbGx5IGxvYWRlZCB3aXRoIHRo ZSBhZGp1c3RtZW50CisgICAgICAgICB2YWx1ZTsgb3RoZXJ3aXNlLCB0aGUg bG9hZCBtaWdodCBiZSBvcHRpbWl6ZWQgYXdheS4uLgorICAgICAgICAgTk9U RTogcmVtZW1iZXIgdG8gc3VidHJhY3QgdGhlIGFkanVzdG1lbnQgYmVmb3Jl IHBvcHBpbmcgdGhlIHJlZ3MKKyAgICAgICAgIGFuZCBhZGQgaXQgYmFjayBi ZWZvcmUgcmV0dXJuaW5nLiAgKi8KKyAgICAgIGluc24gPSBlbWl0X2luc24g KGdlbl9hZGRzaTMgKHN0YWNrX3BvaW50ZXJfcnR4LCBzdGFja19wb2ludGVy X3J0eCwKKwkJCQkgICAgRUhfUkVUVVJOX1NUQUNLQURKX1JUWCkpOworICAg IH0KKworICBpZiAoY3IxNl9pbnRlcnJ1cHRfZnVuY3Rpb25fcCAoKSkKKyAg ICB7CisgICAgICBpbnNuID0gZW1pdF9qdW1wX2luc24gKGdlbl9pbnRlcnJ1 cHRfcmV0dXJuICgpKTsKKyAgICAgIFJUWF9GUkFNRV9SRUxBVEVEX1AgKGlu c24pID0gMTsKKyAgICB9CisgIGVsc2UgaWYgKGNydGwtPmNhbGxzX2VoX3Jl dHVybikKKyAgICB7CisgICAgICAvKiBTcGVjaWFsIGNhc2UsIHBvcCB3aGF0 J3MgbmVjZXNzYXJ5LCBhZGp1c3QgU1AgYW5kIGp1bXAgdG8gKFJBKS4gICov CisgICAgICBpbnNuID0gZW1pdF9qdW1wX2luc24gKGdlbl9wb3BfYW5kX3Bv cHJldF9yZXR1cm4gCisJCQkgICAgIChHRU5fSU5UIChjdXJyZW50X2ZyYW1l X2luZm8ucmVnX3NpemUpKSk7CisgICAgICBSVFhfRlJBTUVfUkVMQVRFRF9Q IChpbnNuKSA9IDE7CisgICAgfQorICBlbHNlIGlmIChjdXJyZW50X2ZyYW1l X2luZm8ubGFzdF9yZWdfdG9fc2F2ZSA9PSAtMSkKKyAgICAvKiBOb3RoaW5n IHRvIHBvcC4gICovCisgICAgLyogRG9uJ3Qgb3V0cHV0IGp1bXAgZm9yIGlu dGVycnVwdCByb3V0aW5lLCBvbmx5IHJldHguICAqLworICAgIGVtaXRfanVt cF9pbnNuIChnZW5faW5kaXJlY3RfanVtcF9yZXR1cm4gKCkpOworICBlbHNl IGlmIChvbmx5X3BvcHJldF9SQSkKKyAgICB7CisgICAgICBpbnNuID0gZW1p dF9qdW1wX2luc24gKGdlbl9wb3ByZXRfUkFfcmV0dXJuICgpKTsKKyAgICAg IFJUWF9GUkFNRV9SRUxBVEVEX1AgKGluc24pID0gMTsKKyAgICB9CisgIGVs c2UKKyAgICB7CisgICAgICBpbnNuID0gZW1pdF9qdW1wX2luc24gKGdlbl9w b3BfYW5kX3BvcHJldF9yZXR1cm4gCisJCQkgICAgIChHRU5fSU5UIChjdXJy ZW50X2ZyYW1lX2luZm8ucmVnX3NpemUpKSk7CisgICAgICBSVFhfRlJBTUVf UkVMQVRFRF9QIChpbnNuKSA9IDE7CisgICAgfQorfQorCisvKiBJbXBsZW1l bnRzIEZSQU1FX1BPSU5URVJfUkVRVUlSRUQuICAqLworc3RhdGljIGJvb2wK K2NyMTZfZnJhbWVfcG9pbnRlcl9yZXF1aXJlZCAodm9pZCkKK3sKKyAgcmV0 dXJuIChjZnVuLT5jYWxsc19hbGxvY2EgfHwgY3J0bC0+Y2FsbHNfZWhfcmV0 dXJuCisJICB8fCBjZnVuLT5oYXNfbm9ubG9jYWxfbGFiZWwgfHwgY3J0bC0+ Y2FsbHNfZWhfcmV0dXJuKTsKK30KKworc3RhdGljIGJvb2wKK2NyMTZfY2Fu X2VsaW1pbmF0ZSAoY29uc3QgaW50IGZyb20gQVRUUklCVVRFX1VOVVNFRCwg Y29uc3QgaW50IHRvKQoreworICByZXR1cm4gKHRvID09IFNUQUNLX1BPSU5U RVJfUkVHTlVNID8gIWZyYW1lX3BvaW50ZXJfbmVlZGVkIDogdHJ1ZSk7Cit9 CisKKworLyogSW1wbGVtZW50IFRBUkdFVF9IQU5ETEVfT1BUSU9OLiAgKi8K K3N0YXRpYyBib29sCitjcjE2X2hhbmRsZV9vcHRpb24gKHNpemVfdCBjb2Rl LCBjb25zdCBjaGFyICphcmcsIGludCB2YWx1ZSkKK3sKKyAgc3dpdGNoIChj b2RlKQorICAgIHsKKyAgICBjYXNlIE9QVF9tc2hhcmVkX2xpYnJhcnlfaWRf OgorICAgICAgaWYgKHZhbHVlID4gTUFYX0xJQlJBUllfSUQpCisJZXJyb3Ig KCItbXNoYXJlZC1saWJyYXJ5LWlkPSVzIGlzIG5vdCBiZXR3ZWVuIDAiCisJ ICAgICAgICIgYW5kICVkIiwgYXJnLCBNQVhfTElCUkFSWV9JRCk7CisgICAg ICBjcjE2X2xpYl9pZF9naXZlbiA9IDE7CisgICAgICByZXR1cm4gdHJ1ZTsK KworICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9 CisKKworLyogQSBDIGNvbXBvdW5kIHN0YXRlbWVudCB0aGF0IGF0dGVtcHRz IHRvIHJlcGxhY2UgWCB3aXRoCisgICBhIHZhbGlkIG1lbW9yeSBhZGRyZXNz IGZvciBhbiBvcGVyYW5kIG9mIG1vZGUgTU9ERS4gV0lOCisgICB3aWxsIGJl IGEgQyBzdGF0ZW1lbnQgbGFiZWwgZWxzZXdoZXJlIGluIHRoZSBjb2RlLgor ICAgWCB3aWxsIGFsd2F5cyBiZSB0aGUgcmVzdWx0IG9mIGEgY2FsbCB0byBi cmVha19vdXRfbWVtb3J5X3JlZnMgKCksCisgICBhbmQgT0xEWCB3aWxsIGJl IHRoZSBvcGVyYW5kIHRoYXQgd2FzIGdpdmVuIHRvIHRoYXQgZnVuY3Rpb24g dG8KKyAgIHByb2R1Y2UgWC4KKyAgIFRoZSBjb2RlIGdlbmVyYXRlZCBieSB0 aGlzIG1hY3JvIHNob3VsZCBub3QgYWx0ZXIgdGhlCisgICBzdWJzdHJ1Y3R1 cmUgb2YgWC4gIElmIGl0IHRyYW5zZm9ybXMgWCBpbnRvIGEgbW9yZSBsZWdp dGltYXRlIGZvcm0sIAorICAgaXQgc2hvdWxkIGFzc2lnbiBYICh3aGljaCB3 aWxsIGFsd2F5cyBiZSBhIEMgdmFyaWFibGUpIGEgbmV3IHZhbHVlLiAgKi8K K3N0YXRpYyBydHgKK2NyMTZfbGVnaXRpbWl6ZV9hZGRyZXNzIChydHggeCwg cnR4IG9yaWdfeCBBVFRSSUJVVEVfVU5VU0VELAorCQkJIGVudW0gbWFjaGlu ZV9tb2RlIG1vZGUgQVRUUklCVVRFX1VOVVNFRCkKK3sKKyAgaWYgKGZsYWdf cGljKQorICAgIHJldHVybiBsZWdpdGltaXplX3BpY19hZGRyZXNzIChvcmln X3gsIG1vZGUsIE5VTExfUlRYKTsKKyAgZWxzZQorICAgIHJldHVybiB4Owor fQorCisjdW5kZWYgVEFSR0VUX0hBTkRMRV9PUFRJT04KKyNkZWZpbmUgVEFS R0VUX0hBTkRMRV9PUFRJT04gY3IxNl9oYW5kbGVfb3B0aW9uCisKK3ZvaWQK K25vdGljZV91cGRhdGVfY2MgKGV4cCkKKyAgICAgcnR4IGV4cDsKK3sKKyAg aWYgKEdFVF9DT0RFIChleHApID09IFNFVCkKKyAgICB7CisgICAgICAvKiBK dW1wcyBkbyBub3QgYWx0ZXIgdGhlIGNjJ3MuICAqLworICAgICAgaWYgKFNF VF9ERVNUIChleHApID09IHBjX3J0eCkKKwlyZXR1cm47CisKKyAgICAgIC8q IE1vdmluZyByZWdpc3RlciBvciBtZW1vcnkgaW50byBhIHJlZ2lzdGVyOgor ICAgICAgICAgaXQgZG9lc24ndCBhbHRlciB0aGUgY2MncywgYnV0IGl0IG1p Z2h0IGludmFsaWRhdGUKKyAgICAgICAgIHRoZSBSVFgncyB3aGljaCB3ZSBy ZW1lbWJlciB0aGUgY2MncyBjYW1lIGZyb20uCisgICAgICAgICAoTm90ZSB0 aGF0IG1vdmluZyBhIGNvbnN0YW50IDAgb3IgMSBNQVkgc2V0IHRoZSBjYydz KS4gICovCisgICAgICBpZiAoUkVHX1AgKFNFVF9ERVNUIChleHApKQorCSAg JiYgKFJFR19QIChTRVRfU1JDIChleHApKSB8fCBHRVRfQ09ERSAoU0VUX1NS QyAoZXhwKSkgPT0gTUVNKSkKKwl7CisJICByZXR1cm47CisJfQorCisgICAg ICAvKiBNb3ZpbmcgcmVnaXN0ZXIgaW50byBtZW1vcnkgZG9lc24ndCBhbHRl ciB0aGUgY2Mncy4KKyAgICAgICAgIEl0IG1heSBpbnZhbGlkYXRlIHRoZSBS VFgncyB3aGljaCB3ZSByZW1lbWJlciB0aGUgY2MncyBjYW1lIGZyb20uICAq LworICAgICAgaWYgKEdFVF9DT0RFIChTRVRfREVTVCAoZXhwKSkgPT0gTUVN ICYmIFJFR19QIChTRVRfU1JDIChleHApKSkKKwl7CisJICByZXR1cm47CisJ fQorCisgICAgfQorCisgIENDX1NUQVRVU19JTklUOworICByZXR1cm47Cit9 CisKK3J0eAorZ2VuX2NvbXBhcmVfcmVnIChjb2RlLCB4LCB5KQorICAgICBl bnVtIHJ0eF9jb2RlIGNvZGU7CisgICAgIHJ0eCB4LCB5OworeworICBlbnVt IG1hY2hpbmVfbW9kZSBtb2RlOworCisgIG1vZGUgPSBHRVRfTU9ERSAoeCk7 CisKKyAgLyogRm9yIGZsb2F0aW5nIHBvaW50IGNvbXBhcmUgaW5zbnMsIGEg Y2FsbCBpcyBnZW5lcmF0ZWQgc28gZG9uJ3QKKyAgICAgZG8gYW55dGhpbmcg aGVyZS4gICovCisKKyAgaWYgKEdFVF9NT0RFX0NMQVNTIChtb2RlKSA9PSBN T0RFX0ZMT0FUKQorICAgIHJldHVybiBjYzBfcnR4OworCisgIGVtaXRfaW5z biAoZ2VuX3J0eF9TRVQgKFZPSURtb2RlLCBjYzBfcnR4LAorCQkJICBnZW5f cnR4X0NPTVBBUkUgKFZPSURtb2RlLAorCQkJCQkgICBmb3JjZV9yZWcgKG1v ZGUsIHgpLAorCQkJCQkgICBmb3JjZV9yZWcgKG1vZGUsIHkpKSkpOworICBy ZXR1cm4gY2MwX3J0eDsKK30KKworc3RhdGljIGVudW0gbWFjaGluZV9tb2Rl CitjcjE2X3Vud2luZF93b3JkX21vZGUgKHZvaWQpCit7CisgIHJldHVybiBT SW1vZGU7Cit9CisKKy8qIEhlbHBlciBmdW5jdGlvbiBmb3IgbWQgZmlsZS4g VGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGVtaXQgYXJpdGhtZXRpYyAKKyAg IERJIGluc3RydWN0aW9ucy4gVGhlIGFyZ3VtZW50ICJudW0iIGRlY2lkZXMg d2hpY2ggaW5zdHJ1Y3Rpb24gdG8gYmUKKyAgIHByaW50ZWQuICAqLworY29u c3QgY2hhciAqCitjcjE2X2VtaXRfYWRkX3N1Yl9kaSAocnR4ICpvcGVyYW5k cywgaW50IG51bSkKK3sKKworICBydHggbG9fb3BbMl0gOworICBydHggaGkw X29wWzJdIDsKKyAgcnR4IGhpMV9vcFsyXSA7CisKKyAgbG9fb3BbMF0gPSBn ZW5fbG93cGFydCAoU0ltb2RlLCBvcGVyYW5kc1swXSk7CisgIGhpMF9vcFsw XSA9IHNpbXBsaWZ5X2dlbl9zdWJyZWcgKEhJbW9kZSwgb3BlcmFuZHNbMF0s IERJbW9kZSwgNCk7CisgIGhpMV9vcFswXSA9IHNpbXBsaWZ5X2dlbl9zdWJy ZWcgKEhJbW9kZSwgb3BlcmFuZHNbMF0sIERJbW9kZSwgNik7CisKKyAgbG9f b3BbMV0gPSBnZW5fbG93cGFydCAoU0ltb2RlLCBvcGVyYW5kc1syXSk7Cisg IGhpMF9vcFsxXSA9IHNpbXBsaWZ5X2dlbl9zdWJyZWcgKEhJbW9kZSwgb3Bl cmFuZHNbMl0sIERJbW9kZSwgNCk7CisgIGhpMV9vcFsxXSA9IHNpbXBsaWZ5 X2dlbl9zdWJyZWcgKEhJbW9kZSwgb3BlcmFuZHNbMl0sIERJbW9kZSwgNik7 CisKKyAgaWYgKG51bSA9PSAwKQorICAgIHsKKyAgICAgICAgb3V0cHV0X2Fz bV9pbnNuICgiYWRkZFx0JTEsICUwIiwgbG9fb3ApIDsKKyAgICAgICAgb3V0 cHV0X2FzbV9pbnNuICgiYWRkY3dcdCUxLCAlMCIsIGhpMF9vcCkgOworICAg ICAgICBvdXRwdXRfYXNtX2luc24gKCJhZGRjd1x0JTEsICUwIiwgaGkxX29w KSA7CisgICAgICAgIHJldHVybiAiIjsKKyAgICB9CisgIGVsc2UgaWYgKG51 bSA9PSAxKQorICAgIHsKKyAgICAgICAgb3V0cHV0X2FzbV9pbnNuICgic3Vi ZFx0JTEsICUwIiwgbG9fb3ApIDsKKyAgICAgICAgb3V0cHV0X2FzbV9pbnNu ICgic3ViY3dcdCUxLCAlMCIsIGhpMF9vcCkgOworICAgICAgICBvdXRwdXRf YXNtX2luc24gKCJzdWJjd1x0JTEsICUwIiwgaGkxX29wKSA7CisgICAgICAg IHJldHVybiAiIjsKKyAgICB9CisgIGVsc2UKKyAgICByZXR1cm4gIiI7CisK K30KKworCisvKiBIZWxwZXIgZnVuY3Rpb24gZm9yIG1kIGZpbGUuIFRoaXMg ZnVuY3Rpb24gaXMgdXNlZCB0byBlbWl0IGxvZ2ljYWwgCisgICBESSBpbnN0 cnVjdGlvbnMuIFRoZSBhcmd1bWVudCAibnVtIiBkZWNpZGVzIHdoaWNoIGlu c3RydWN0aW9uIHRvIGJlCisgICBwcmludGVkLiAgKi8KK2NvbnN0IGNoYXIg KgorY3IxNl9lbWl0X2xvZ2ljYWxfZGkgKHJ0eCAqb3BlcmFuZHMsIGludCBu dW0pCit7CisKKyAgcnR4IGxvX29wWzJdIDsKKyAgcnR4IGhpX29wWzJdIDsK KworICBsb19vcFswXSA9IGdlbl9sb3dwYXJ0IChTSW1vZGUsIG9wZXJhbmRz WzBdKTsKKyAgaGlfb3BbMF0gPSBzaW1wbGlmeV9nZW5fc3VicmVnIChTSW1v ZGUsIG9wZXJhbmRzWzBdLCBESW1vZGUsIDQpOworCisgIGxvX29wWzFdID0g Z2VuX2xvd3BhcnQgKFNJbW9kZSwgb3BlcmFuZHNbMl0pOworICBoaV9vcFsx XSA9IHNpbXBsaWZ5X2dlbl9zdWJyZWcgKFNJbW9kZSwgb3BlcmFuZHNbMl0s IERJbW9kZSwgNCk7CisgIGlmIChudW0gPT0gMCkKKyAgICB7CisgICAgICAg IG91dHB1dF9hc21faW5zbiAoImFuZGRcdCUxLCAlMCIsIGxvX29wKSA7Cisg ICAgICAgIG91dHB1dF9hc21faW5zbiAoImFuZGRcdCUxLCAlMCIsIGhpX29w KSA7CisgICAgICAgIHJldHVybiAiIjsKKyAgICB9CisgIGVsc2UgaWYgKG51 bSA9PSAxKQorICAgIHsKKyAgICAgICAgb3V0cHV0X2FzbV9pbnNuICgib3Jk XHQlMSwgJTAiLCBsb19vcCkgOworICAgICAgICBvdXRwdXRfYXNtX2luc24g KCJvcmRcdCUxLCAlMCIsIGhpX29wKSA7CisgICAgICAgIHJldHVybiAiIjsK KyAgICB9CisgIGVsc2UgaWYgKG51bSA9PSAyKQorICAgIHsKKyAgICAgICAg b3V0cHV0X2FzbV9pbnNuICgieG9yZFx0JTEsICUwIiwgbG9fb3ApIDsKKyAg ICAgICAgb3V0cHV0X2FzbV9pbnNuICgieG9yZFx0JTEsICUwIiwgaGlfb3Ap IDsKKyAgICAgICAgcmV0dXJuICIiOworICAgIH0KKyAgZWxzZQorICAgIHJl dHVybiAiIjsKK30KKworLyogSW5pdGlhbGl6ZSAndGFyZ2V0bScgdmFyaWFi bGUgd2hpY2ggY29udGFpbnMgcG9pbnRlcnMgdG8gZnVuY3Rpb25zIAorICAg YW5kIGRhdGEgcmVsYXRpbmcgdG8gdGhlIHRhcmdldCBtYWNoaW5lLiAgKi8K Kworc3RydWN0IGdjY190YXJnZXQgdGFyZ2V0bSA9IFRBUkdFVF9JTklUSUFM SVpFUjsKZGlmZiAtdXByTiAteCcqLm9yaWcnIC14JyoucmVqJyBvcmlnL2dj Yy9jb25maWcvY3IxNi9jcjE2LmggbW9kL2djYy9jb25maWcvY3IxNi9jcjE2 LmgKLS0tIG9yaWcvZ2NjL2NvbmZpZy9jcjE2L2NyMTYuaAkxOTcwLTAxLTAx IDA1OjMwOjAwLjAwMDAwMDAwMCArMDUzMAorKysgbW9kL2djYy9jb25maWcv Y3IxNi9jcjE2LmgJMjAxMS0wNC0wOCAxNzoxOTo0Ny4wMDAwMDAwMDAgKzA1 MzAKQEAgLTAsMCArMSw2NjIgQEAKKy8qIERlZmluaXRpb25zIG9mIHRhcmdl dCBtYWNoaW5lIGZvciBHTlUgY29tcGlsZXIsIGZvciBDUjE2LgorICAgQ29w eXJpZ2h0IChDKSAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j LgorICAgQ29udHJpYnV0ZWQgYnkgS1BJVCBDdW1taW5zIEluZm9zeXN0ZW1z IExpbWl0ZWQuCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKwor ICAgR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisg ICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVy c2lvbiAzLCBvciAoYXQgeW91cgorICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy c2lvbi4KKworICAgR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgICBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBN RVJDSEFOVEFCSUxJVFkKKyAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAgIExp Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZl IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UKKyAgIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlO RzMuICBJZiBub3Qgc2VlCisgICA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vu c2VzLz4uICAqLworICAgCisjaWZuZGVmIEdDQ19DUjE2X0gKKyNkZWZpbmUg R0NDX0NSMTZfSAorCisjZGVmaW5lIE9CSkVDVF9GT1JNQVRfRUxGCisKKy8q IFRoZSBmb2xsb3dpbmcgbWFjcm8gZGVmaW5lcyBjb3ZlciBjbGFzc2VzIGZv ciBJbnRlZ3JhdGVkIFJlZ2lzdGVyCisgICBBbGxvY2F0b3IuICBDb3ZlciBj bGFzc2VzIGlzIGEgc2V0IG9mIG5vbi1pbnRlcnNlY3RlZCByZWdpc3Rlcgor ICAgY2xhc3NlcyBjb3ZlcmluZyBhbGwgaGFyZCByZWdpc3RlcnMgdXNlZCBm b3IgcmVnaXN0ZXIgYWxsb2NhdGlvbgorICAgcHVycG9zZS4gIEFueSBtb3Zl IGJldHdlZW4gdHdvIHJlZ2lzdGVycyBvZiBhIGNvdmVyIGNsYXNzIHNob3Vs ZCBiZQorICAgY2hlYXBlciB0aGFuIGxvYWQgb3Igc3RvcmUgb2YgdGhlIHJl Z2lzdGVycy4gIFRoZSBtYWNybyB2YWx1ZSBpcworICAgYXJyYXkgb2YgcmVn aXN0ZXIgY2xhc3NlcyB3aXRoIExJTV9SRUdfQ0xBU1NFUyB1c2VkIGFzIHRo ZSBlbmQKKyAgIG1hcmtlci4gICovCisKKyNkZWZpbmUgSVJBX0NPVkVSX0NM QVNTRVMgICAgICAgICAJXAorICB7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgCVwKKyAgICBHRU5FUkFMX1JFR1MsIExJTV9SRUdfQ0xBU1NF UyAgCVwKKyAgfQorCisvKiBDb250cm9sbGluZyB0aGUgZHJpdmVyLiAgKi8K KworLyogVGhlIEdOVSBDKysgc3RhbmRhcmQgbGlicmFyeSByZXF1aXJlcyB0 aGF0IHRoZXNlIG1hY3JvcyBiZSBkZWZpbmVkLiAgKi8KKyN1bmRlZiBDUExV U1BMVVNfQ1BQX1NQRUMKKyNkZWZpbmUgQ1BMVVNQTFVTX0NQUF9TUEVDICIt RF9HTlVfU09VUkNFICUoY3BwKSIKKworI3VuZGVmICBTVEFSVEZJTEVfU1BF QworI2RlZmluZSBTVEFSVEZJTEVfU1BFQyAiY3J0MS5vJXMgY3J0aS5vJXMg Y3J0YmVnaW4ubyVzIGNydGxpYmlkLm8lcyIKKworI3VuZGVmICBFTkRGSUxF X1NQRUMKKyNkZWZpbmUgRU5ERklMRV9TUEVDICJjcnRlbmQubyVzIGNydG4u byVzIgorCisjdW5kZWYgIE1BVEhfTElCUkFSWQorI2RlZmluZSBNQVRIX0xJ QlJBUlkgIiIKKworI3VuZGVmICBMSUJfU1BFQworI2RlZmluZSBMSUJfU1BF QyAiLSggLWxjICV7bXNpbSo6LWxzaW19JXshbXNpbSo6LWxub3N5c30gLSkg XAorJXttc2ltKjoleyFUKjotVHNpbS5sZH19IFwKKyV7IVQqOiV7IW1zaW0q OiAley1UZWxmMzJjcjE2Lnh9fX0gIgorCisKKworLyogUnVuLXRpbWUgdGFy Z2V0IHNwZWNpZmljYXRpb24uICAqLworI2lmbmRlZiBUQVJHRVRfQ1BVX0NQ UF9CVUlMVElOUworI2RlZmluZSBUQVJHRVRfQ1BVX0NQUF9CVUlMVElOUygp ICAgICAgICAgIFwKK2RvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorICAgIGJ1aWx0aW5fZGVmaW5lICgiX19DUl9fIik7 ICAgICAgICAgICAgIFwKKyAgICBidWlsdGluX2RlZmluZSAoIl9fQ1IxNl9f Iik7ICAgICAgICAgICBcCisgICAgYnVpbHRpbl9kZWZpbmUgKCJfX0NSMTZD X18iKTsgICAgICAgICAgXAorICAgIGlmIChUQVJHRVRfQ1IxNkNQKSAgICAg ICAgICAgICAgICAgICAgIFwKKyAgICAgIGJ1aWx0aW5fZGVmaW5lICgiX19D UjE2Q1BfXyIpOyAgICAgICBcCisgICAgZWxzZSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorICAgICAgYnVpbHRpbl9kZWZpbmUgKCJf X0NSMTZDU1REX18iKTsgICAgIFwKKyAgICBpZiAoQ1IxNl9UQVJHRVRfREFU QV9ORUFSKSAgICAgICAgICAgICBcCisgICAgICBidWlsdGluX2RlZmluZSAo Il9fREFUQV9ORUFSX18iKTsgICAgXAorICAgIGlmIChDUjE2X1RBUkdFVF9E QVRBX01FRElVTSkgICAgICAgICAgIFwKKyAgICAgIGJ1aWx0aW5fZGVmaW5l ICgiX19EQVRBX01FRElVTV9fIik7ICBcCisgICAgaWYgKENSMTZfVEFSR0VU X0RBVEFfRkFSKSAgICAgICAgICAgICAgXAorICAgICAgYnVpbHRpbl9kZWZp bmUgKCJfX0RBVEFfRkFSX18iKTsgICAgIFwKKyAgICBpZiAoVEFSR0VUX0lO VDMyKSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBidWlsdGluX2Rl ZmluZSAoIl9fSU5UMzJfXyIpOyAgICAgICAgIFwKKyAgICBpZiAoVEFSR0VU X0lEX1NIQVJFRF9MSUJSQVJZKSAgICAgICAgICBcCisgICAgICBidWlsdGlu X2RlZmluZSAoIl9fSURfU0hBUkVEX0xJQl9fIik7IFwKKyAgfSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit3aGlsZSAoMCkK KyNlbmRpZgorCisjZGVmaW5lIFRBUkdFVF9WRVJTSU9OIGZwdXRzICgiIChD UjE2L0VMRikiLCBzdGRlcnIpOworCisvKiBGb3JjZSB0aGUgZ2VuZXJhdGlv biBvZiBkd2FyZiAuZGVidWdfZnJhbWUgc2VjdGlvbnMgZXZlbiBpZiBub3QK KyAgIGNvbXBpbGluZyAtZy4gIFRoaXMgZ3VhcmFudGVlcyB0aGF0IHdlIGNh biB1bndpbmQgdGhlIHN0YWNrLiAgKi8KKyNkZWZpbmUgRFdBUkYyX0ZSQU1F X0lORk8gMQorCisjZGVmaW5lIFBSRUZFUlJFRF9ERUJVR0dJTkdfVFlQRSBE V0FSRjJfREVCVUcKKworLyogR2VuZXJhdGUgLmZpbGUvLmxvYyBkaXJlY3Rp dmVzLCBzbyB0aGF0IHRoZSBhc3NlbWJsZXIgZ2VuZXJhdGVzIHRoZQorICAg bGluZSB0YWJsZS4gICovCisjZGVmaW5lIERXQVJGMl9BU01fTElORV9ERUJV R19JTkZPIDEKKworLyogTWF4aW11bSBudW1iZXIgb2YgbGlicmFyeSBpZHMg d2UgcGVybWl0LiAgKi8KKyNkZWZpbmUgTUFYX0xJQlJBUllfSUQgMjU1CisK KyNkZWZpbmUgQ1IxNl9UQVJHRVRfREFUQV9ORUFSICAgY3IxNl9pc19kYXRh X21vZGVsIChETV9ORUFSKQorI2RlZmluZSBDUjE2X1RBUkdFVF9EQVRBX01F RElVTSBjcjE2X2lzX2RhdGFfbW9kZWwgKERNX0RFRkFVTFQpCisjZGVmaW5l IENSMTZfVEFSR0VUX0RBVEFfRkFSICAgIGNyMTZfaXNfZGF0YV9tb2RlbCAo RE1fRkFSKQorCisvKiBTdG9yYWdlIGxheW91dC4gICovCisjZGVmaW5lIEJJ VFNfQklHX0VORElBTiAgICAgMAorCisjZGVmaW5lIEJZVEVTX0JJR19FTkRJ QU4gICAgMAorCisjZGVmaW5lIFdPUkRTX0JJR19FTkRJQU4gICAgMAorCisj ZGVmaW5lIFVOSVRTX1BFUl9XT1JEICAgICAgMgorCisvKiBVbml0cyBwZXIg MzItYml0IChEV09SRCkuICAqLworI2RlZmluZSBDUjE2X1VOSVRTX1BFUl9E V09SRCA0CisKKyNkZWZpbmUgUE9JTlRFUl9TSVpFICAgICAgICAzMgorCisj ZGVmaW5lIFBBUk1fQk9VTkRBUlkgICAgICAgMTYKKworI2RlZmluZSBTVEFD S19CT1VOREFSWSAgICAgIChNQVggKEJJR0dFU1RfQUxJR05NRU5ULCBQQVJN X0JPVU5EQVJZKSkKKworI2RlZmluZSBGVU5DVElPTl9CT1VOREFSWSAgKCFv cHRpbWl6ZV9zaXplID8gQklHR0VTVF9BTElHTk1FTlQgOiBCSVRTX1BFUl9X T1JEKQorCisvKiBCaWdnZXN0IGFsaWdubWVudCBvbiBDUjE2QysgaXMgMzIt Yml0IGFzIGludGVybmFsIGJ1cyBpcyBBTUJBIGJhc2VkIAorICAgd2hlcmUg YXMgQ1IxNkMgaXMgcHJvcHJpZXRhcnkgaW50ZXJuYWwgYnVzIGFyY2hpdGVj dHVyZS4gICovCisjZGVmaW5lIEJJR0dFU1RfQUxJR05NRU5UICAgKChUQVJH RVRfQ1IxNkNQKSA/IDMyIDogMTYpCisKKyNkZWZpbmUgTUFYX0ZJWEVEX01P REVfU0laRSA2NAorCisvKiBJbiBDUjE2IGFycmF5cyBvZiBjaGFycyBhcmUg d29yZC1hbGlnbmVkLCBzbyBzdHJjcHkgKCkgd2lsbCBiZSBmYXN0ZXIuICAq LworI2RlZmluZSBEQVRBX0FMSUdOTUVOVChUWVBFLCBBTElHTikgICAgICAg ICAgICAgXAorICAoKChUUkVFX0NPREUgKFRZUEUpID09IEFSUkFZX1RZUEUp ICAgICAgICAgICAgXAorICAgICAmJiAoVFlQRV9NT0RFIChUUkVFX1RZUEUg KFRZUEUpKSA9PSBRSW1vZGUpIFwKKyAgICAgJiYgKChBTElHTikgPCBCSVRT X1BFUl9XT1JEKSkgICAgICAgICAgICAgICBcCisgICAgID8gKEJJVFNfUEVS X1dPUkQpIDogKEFMSUdOKSkKKworLyogSW4gQ1IxNiBzdHJpbmdzIGFyZSB3 b3JkLWFsaWduZTsgc3RyY3B5IGZyb20gY29uc3RhbnRzIHdpbGwgYmUgZmFz dGVyLiAgKi8KKyNkZWZpbmUgQ09OU1RBTlRfQUxJR05NRU5UKENPTlNUQU5U LCBBTElHTikgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAoKChU UkVFX0NPREUgKENPTlNUQU5UKSA9PSBTVFJJTkdfQ1NUKSAmJiAoKEFMSUdO KSA8IEJJVFNfUEVSX1dPUkQpKSBcCisgICAgID8gKEJJVFNfUEVSX1dPUkQp IDogKEFMSUdOKSkKKworI2RlZmluZSBTVFJJQ1RfQUxJR05NRU5UIDAKKwor I2RlZmluZSBQQ0NfQklURklFTERfVFlQRV9NQVRURVJTIDEKKworLyogTGF5 b3V0IG9mIHNvdXJjZSBsYW5ndWFnZSBkYXRhIHR5cGVzLiAgKi8KKyNkZWZp bmUgSU5UX1RZUEVfU0laRSAgICAgICAoVEFSR0VUX0lOVDMyID8gMzIgOiAx NikKKworI2RlZmluZSBTSE9SVF9UWVBFX1NJWkUgICAgIDE2CisKKyNkZWZp bmUgTE9OR19UWVBFX1NJWkUgICAgICAzMgorCisjZGVmaW5lIExPTkdfTE9O R19UWVBFX1NJWkUgNjQKKworI2RlZmluZSBGTE9BVF9UWVBFX1NJWkUgICAg IDMyCisKKyNkZWZpbmUgRE9VQkxFX1RZUEVfU0laRSAgICA2NAorCisjZGVm aW5lIExPTkdfRE9VQkxFX1RZUEVfU0laRSA2NAorCisjZGVmaW5lIERFRkFV TFRfU0lHTkVEX0NIQVIgMQorCisjZGVmaW5lIFNJWkVfVFlQRSAgICAgICAg ICAgImxvbmcgdW5zaWduZWQgaW50IgorCisjZGVmaW5lIFBUUkRJRkZfVFlQ RSAgICAgICAgImxvbmcgaW50IgorCisjZGVmaW5lIFdDSEFSX1RZUEUgICAg ICAgICAgInNob3J0IHVuc2lnbmVkIGludCIKKworI2RlZmluZSBXQ0hBUl9U WVBFX1NJWkUgICAgIDE2CisKKy8qIEJ5IGRlZmF1bHQsIHRoZSBDKysgY29t cGlsZXIgd2lsbCB1c2UgdGhlIGxvd2VzdCBiaXQgb2YgdGhlIHBvaW50ZXIK KyAgIHRvIGZ1bmN0aW9uIHRvIGluZGljYXRlIGEgcG9pbnRlci10by1tZW1i ZXItZnVuY3Rpb24gcG9pbnRzIHRvIGEKKyAgIHZpcnR1YWwgbWVtYmVyIGZ1 bmN0aW9uLiAgSG93ZXZlciwgaW4gQ1IgYXJjaGl0ZWN0dXJlIEZVTkNUSU9O X0JPVU5EQVJZCisgICBpbmRpY2F0ZXMgZnVuY3Rpb24gYWRkcmVzc2VzIGFy ZSBhbHdheXMgZXZlbiwgYnV0IGZ1bmN0aW9uIHBvaW50ZXJzIGNhbiBiZQor ICAgb2RkIChhZnRlciByaWdodC1zaGlmdGluZyB0aGVtIHdoZW4gbG9hZGlu ZyB0aGVtIGludG8gYSByZWdpc3RlciksIGFuZCB0aGUKKyAgIGRlZmF1bHQg ZG9lc24ndCB3b3JrLiAgSW4gdGhhdCBjYXNlLCB0aGUgbG93ZXN0IGJpdCBv ZiB0aGUgZGVsdGEKKyAgIGZpZWxkIHdpbGwgYmUgdXNlZCAodGhlIHJlbWFp bmRlciBvZiB0aGUgZmllbGQgaXMgc2hpZnRlZCB0byB0aGUgbGVmdCkuICAq LworI2RlZmluZSBUQVJHRVRfUFRSTUVNRlVOQ19WQklUX0xPQ0FUSU9OICAg ICBwdHJtZW1mdW5jX3ZiaXRfaW5fZGVsdGEKKworLyogRGVmaW5lIERFRkFV TFRfUENDX1NUUlVDVF9SRVRVUk4gdG8gMSBpZiBhbGwgc3RydWN0dXJlIGFu ZCB1bmlvbiByZXR1cm4KKyAgIHZhbHVlcyBtdXN0IGJlIGluIG1lbW9yeS4g ICovCisjZGVmaW5lIERFRkFVTFRfUENDX1NUUlVDVF9SRVRVUk4gMAorCisv KiBSZWdpc3RlciB1c2FnZS4gICovCisKKy8qIEZpcnN0IDMyLWJpdCByZWdp c3RlciBpcyBSMTIuICAqLworI2RlZmluZSBDUjE2X0ZJUlNUX0RXT1JEX1JF R0lTVEVSICAgMTIKKworI2RlZmluZSBGSVJTVF9QU0VVRE9fUkVHSVNURVIg ICAgICAgMTYKKworLyogMSBmb3IgcmVnaXN0ZXJzIHRoYXQgaGF2ZSBwZXJ2 YXNpdmUgc3RhbmRhcmQgdXNlcworICAgYW5kIGFyZSBub3QgYXZhaWxhYmxl IGZvciB0aGUgcmVnaXN0ZXIgYWxsb2NhdG9yLgorICAgT24gdGhlIENSMTYs IG9ubHkgdGhlIHN0YWNrIHBvaW50ZXIgKHIxNSkgaXMgc3VjaC4gICovCisj ZGVmaW5lIEZJWEVEX1JFR0lTVEVSUyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisgIC8qIHIwICByMSAgcjIgIHIzICBy NCAgcjUgIHI2ICByNyAgcjggIHI5ICByMTAuICAqLyBcCisgICAgMCwgIDAs ICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAgICAgICBc CisgIC8qIHIxMSByMTIgcjEzIHJhICBzcC4gICovICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisgICAgMCwgIDAsICAwLCAgMCwgIDEgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0gICAgICAKKworLyogMSBm b3IgcmVnaXN0ZXJzIG5vdCBhdmFpbGFibGUgYWNyb3NzIGZ1bmN0aW9uIGNh bGxzLgorICAgVGhlc2UgbXVzdCBpbmNsdWRlIHRoZSBGSVhFRF9SRUdJU1RF UlMgYW5kIGFsc28gYW55CisgICByZWdpc3RlcnMgdGhhdCBjYW4gYmUgdXNl ZCB3aXRob3V0IGJlaW5nIHNhdmVkLgorICAgVGhlIGxhdHRlciBtdXN0IGlu Y2x1ZGUgdGhlIHJlZ2lzdGVycyB3aGVyZSB2YWx1ZXMgYXJlIHJldHVybmVk CisgICBhbmQgdGhlIHJlZ2lzdGVyIHdoZXJlIHN0cnVjdHVyZS12YWx1ZSBh ZGRyZXNzZXMgYXJlIHBhc3NlZC4KKyAKKyAgIE9uIHRoZSBDUjE2LCBjYWxs cyBjbG9iYmVycyByMC1yNiAoc2NyYXRjaCByZWdpc3RlcnMpLCAKKyAgIHJh ICh0aGUgcmV0dXJuIGFkZHJlc3MpIGFuZCBzcCAodGhlIHN0YWNrIHBvaW50 ZXIpLiAgKi8KKyNkZWZpbmUgQ0FMTF9VU0VEX1JFR0lTVEVSUyAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKyAgeyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgLyogcjAgIHIx ICByMiAgcjMgIHI0ICByNSAgcjYgIHI3ICByOCAgcjkgIHIxMC4gICovIFwK KyAgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAg MCwgICAgICAgIFwKKyAgLyogcjExIHIxMiByMTMgcmEgIHNwLiAgKi8gICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAwLCAgMCwgIDAsICAxLCAg MSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfQorCisv KiBPcmRlciBvZiBhbGxvY2F0aW9uIG9mIHJlZ2lzdGVycy4gTmVlZCB0byBl eHBlcmltZW50IG9uIGl0CisgICB0byBmb3IgZWZmZWN0aXZlIGNvZGUgZGVu c2l0eS4gICovCisjZGVmaW5lIFJFR19BTExPQ19PUkRFUiB7MCwxLDIsMyw0 LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNX0KKworLyogUmV0dXJucyAx IGlmIHRoZSByZWdpc3RlciBpcyBsb25nZXIgdGhhbiB3b3JkIHNpemUsIDAg b3RoZXJ3aXNlLiAgKi8KKyNkZWZpbmUgTE9OR19SRUdfUChSRUdOTykgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorICAoSEFSRF9SRUdOT19OUkVHUyAoUkVHTk8sICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIAkJ ICAgICBHRVRfTU9ERV9XSURFUl9NT0RFIChzbWFsbGVzdF9tb2RlX2Zvcl9z aXplCSAgICAgXAorICAJCQkJCSAgKEJJVFNfUEVSX1dPUkQsIE1PREVfSU5U KSkpICAgICAgICBcCisgICAJCSAgICAgID09IDEpCisKKyNkZWZpbmUgSEFS RF9SRUdOT19OUkVHUyhSRUdOTywgTU9ERSkgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorICgoUkVHTk8gPj0gQ1IxNl9GSVJT VF9EV09SRF9SRUdJU1RFUikgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisgID8gKChHRVRfTU9ERV9TSVpFIChNT0RFKSArIENS MTZfVU5JVFNfUEVSX0RXT1JEIC0gMSkgLyBDUjE2X1VOSVRTX1BFUl9EV09S RClcCisgIDogKChHRVRfTU9ERV9TSVpFIChNT0RFKSArIFVOSVRTX1BFUl9X T1JEICAgICAgIC0gMSkgLyBVTklUU19QRVJfV09SRCkpCisKKy8qIE5vbnpl cm8gaWYgaXQgaXMgcGVybWlzc2libGUgdG8gc3RvcmUgYSB2YWx1ZSBvZiBt b2RlIEB2YXJ7bW9kZX0gaW4gaGFyZAorICAgcmVnaXN0ZXIgbnVtYmVyIEB2 YXJ7cmVnbm99IChvciBpbiBzZXZlcmFsIHJlZ2lzdGVycyBzdGFydGluZyB3 aXRoIHRoYXQKKyAgIG9uZSkuICBPbiB0aGUgQ1IxNiBhcmNoaXRlY3R1cmUs IGFsbCByZWdpc3RlcnMgY2FuIGhvbGQgYWxsIG1vZGVzLAorICAgZXhjZXB0 IHRoYXQgZG91YmxlIHByZWNpc2lvbiBmbG9hdHMgKGFuZCBkb3VibGUgaW50 cykgbXVzdCBmYWxsIG9uCisgICBldmVuLXJlZ2lzdGVyIGJvdW5kYXJpZXMu ICAqLyAKKyNkZWZpbmUgSEFSRF9SRUdOT19NT0RFX09LKFJFR05PLCBNT0RF KSBjcjE2X2hhcmRfcmVnbm9fbW9kZV9vayAoUkVHTk8sIE1PREUpCisKKyNk ZWZpbmUgTk9USUNFX1VQREFURV9DQyhFWFAsIElOU04pIFwKKyAgIG5vdGlj ZV91cGRhdGVfY2MgKChFWFApKQorCisvKiBJbnRlcnJ1cHQgZnVuY3Rpb25z IGNhbiBvbmx5IHVzZSByZWdpc3RlcnMgdGhhdCBoYXZlIGFscmVhZHkgYmVl biAKKyAgIHNhdmVkIGJ5IHRoZSBwcm9sb2d1ZSwgZXZlbiBpZiB0aGV5IHdv dWxkIG5vcm1hbGx5IGJlIGNhbGwtY2xvYmJlcmVkIAorICAgQ2hlY2sgaWYg c2l6ZXMgYXJlIHNhbWUgYW5kIHRoZW4gY2hlY2sgaWYgaXQgaXMgcG9zc2li bGUgdG8gcmVuYW1lLiAgKi8KKyNkZWZpbmUgSEFSRF9SRUdOT19SRU5BTUVf T0soU1JDLCBERVNUKSAgICAgICAgICAgICAgICAgXAorICAoIWNyMTZfaW50 ZXJydXB0X2Z1bmN0aW9uX3AgKCkgfHwgKGRmX3JlZ3NfZXZlcl9saXZlX3Ag KERFU1QpKSkKKworLyogRXhjZXB0aW9uIGhhbmRsaW5nIHN0dWZmLiAgKi8K KworLypUbyBlbnN1cmUgY29ycmVjdCBkd2FyZiB1bndpbmRpbmcuICAqLwor I2RlZmluZSBMSUJHQ0MyX1VOV0lORF9BVFRSSUJVVEUgX19hdHRyaWJ1dGVf Xygob3B0aW1pemUgKCJuby1nY3NlIiwibm8tZHNlIikpKQorCisjZGVmaW5l IGdlbl9ydHhfUkEJZ2VuX3J0eF9SRUcgKFBtb2RlLCBSRVRVUk5fQUREUkVT U19SRUdOVU0pCisKKy8qIFVzZSAocjgscjcpIGFuZCAocjEwLHI5KSB0byBw YXNzIGV4Y2VwdGlvbiBoYW5kbGluZyBpbmZvcm1hdGlvbi4gICovCisjZGVm aW5lIEVIX1JFVFVSTl9EQVRBX1JFR05PKE4pICgoKE4pIDwgMikgPyAoTioy ICsgNykgOiBJTlZBTElEX1JFR05VTSkKKworI2RlZmluZSBEV0FSRjJfVU5X SU5EX0lORk8gMQorCisvKiAocjUscjQpIGhvbGRzIGEgc3RhY2sgYWRqdXN0 bWVudCBmb3IgcmV0dXJuaW5nIHRvIGEgaGFuZGxlci4gICovCisjZGVmaW5l IEVIX1JFVFVSTl9TVEFDS0FESl9SVFggCQlnZW5fcnR4X1JFRyAoUG1vZGUs IDQpCisKKyNkZWZpbmUgRUhfUkVUVVJOX0hBTkRMRVJfUlRYIFwKKyAgZ2Vu X3J0eF9NRU0gKFBtb2RlLCBwbHVzX2NvbnN0YW50IChhcmdfcG9pbnRlcl9y dHgsIC00KSkKKworI2RlZmluZSBJTkNPTUlOR19SRVRVUk5fQUREUl9SVFgJ Z2VuX3J0eF9SQQorCisjZGVmaW5lIERXQVJGX0ZSQU1FX1JFVFVSTl9DT0xV TU4JXAorICBEV0FSRl9GUkFNRV9SRUdOVU0gKFJFVFVSTl9BRERSRVNTX1JF R05VTSkKKworI2RlZmluZSBJTkNPTUlOR19GUkFNRV9TUF9PRkZTRVQJCTAJ CisjZGVmaW5lIEZSQU1FX1BPSU5URVJfQ0ZBX09GRlNFVChGTkRFQ0wpCTAJ CisKKy8qIEEgQyBleHByZXNzaW9uIHdob3NlIHZhbHVlIGlzIFJUTCByZXBy ZXNlbnRpbmcgdGhlIHZhbHVlIG9mIHRoZSByZXR1cm4KKyAgIGFkZHJlc3Mg Zm9yIHRoZSBmcmFtZSBDT1VOVCBzdGVwcyB1cCBmcm9tIHRoZSBjdXJyZW50 IGZyYW1lLiAgKi8KKyNkZWZpbmUgUkVUVVJOX0FERFJfUlRYKENPVU5ULCBG UkFNRSkgCQkJICAJCVwKKyAgKDAgPT0gQ09VTlQpCT8gIGdlbl9ydHhfUExV UyAoUG1vZGUsIGdlbl9ydHhfUkEsIGdlbl9ydHhfUkEpCQlcCisJCTogIGNv bnN0MF9ydHgKKworI2RlZmluZSBNT0RFU19USUVBQkxFX1AoTU9ERTEsIE1P REUyKSAgXAorICAoR0VUX01PREVfQ0xBU1MgKE1PREUxKSA9PSBHRVRfTU9E RV9DTEFTUyAoTU9ERTIpKQorCitlbnVtIHJlZ19jbGFzcworeworICBOT19S RUdTLAorICBTSE9SVF9SRUdTLAorICBMT05HX1JFR1MsCisgIE5PU1BfUkVH UywKKyAgRE9VQkxFX0JBU0VfUkVHUywKKyAgR0VORVJBTF9SRUdTLAorICBB TExfUkVHUywKKyAgTElNX1JFR19DTEFTU0VTCit9OworCisjZGVmaW5lIE5f UkVHX0NMQVNTRVMgKGludCkgTElNX1JFR19DTEFTU0VTCisKKyNkZWZpbmUg UkVHX0NMQVNTX05BTUVTCVwKKyAgewkJCVwKKyAgICAiTk9fUkVHUyIsCQlc CisgICAgIlNIT1JUX1JFR1MiLAlcCisgICAgIkxPTkdfUkVHUyIsCVwKKyAg ICAiTk9TUF9SRUdTIiwJXAorICAgICJET1VCTEVfQkFTRV9SRUdTIiwJXAor ICAgICJHRU5FUkFMX1JFR1MiLAlcCisgICAgIkFMTF9SRUdTIgkJXAorICB9 CisKKyNkZWZpbmUgUkVHX0NMQVNTX0NPTlRFTlRTCQkJICAgICAJCVwKKyAg ewkJCQkJCSAgICAgCQlcCisgICAgezB4MDAwMDAwMDB9LCAvKiBOT19SRUdT CQkgICAgICAgICAgICAgKi8gIAlcCisgICAgezB4MDAwMDBGRkZ9LCAvKiBT SE9SVF9SRUdTIAk6IDAgLSAxMSAgICAgKi8gICAJXAorICAgIHsweDAwMDBG MDAwfSwgLyogTE9OR19SRUdTIAkJOiAxMiAtIDE1ICAgICovICAJXAorICAg IHsweDAwMDA3RkZGfSwgLyogTk9TUF9SRUdTIAkJOiAwIC0gMTQgICAgICov ICAgCVwKKyAgICB7MHgwMDAwRjU1NX0sIC8qIERPVUJMRV9CQVNFX1JFR1Mg ICA6IDIsNCw2LDgsMTAgKi8gIAlcCisgICAgezB4MDAwMEZGRkZ9LCAvKiBH RU5FUkFMX1JFR1MJOiAwIC0gMTUgICAgICovICAJXAorICAgIHsweDAwMDBG RkZGfSAgLyogQUxMX1JFR1MgCQk6IDAgLSAxNSAgICAgKi8gIAlcCisgIH0K KworI2RlZmluZSBUQVJHRVRfU01BTExfUkVHSVNURVJfQ0xBU1NFU19GT1Jf TU9ERV9QICBob29rX2Jvb2xfbW9kZV90cnVlIAorCisjZGVmaW5lIFJFR05P X1JFR19DTEFTUyhSRUdOTykgIGNyMTZfcmVnbm9fcmVnX2NsYXNzIChSRUdO TykKKworI2RlZmluZSBCQVNFX1JFR19DTEFTUyAgICAgIEdFTkVSQUxfUkVH UworCisjZGVmaW5lIE1PREVfQkFTRV9SRUdfQ0xBU1MoTU9ERSkgXAorICAo R0VUX01PREVfU0laRSAoTU9ERSkgPD0gNCA/ICAoQkFTRV9SRUdfQ0xBU1Mp IDogIChET1VCTEVfQkFTRV9SRUdTKSkKKworI2RlZmluZSBJTkRFWF9SRUdf Q0xBU1MgICAgICBMT05HX1JFR1MKKworI2RlZmluZSBDUjE2X1JFR05PX09L X0ZPUl9CQVNFX1AoUkVHTk8pICAgICAgICAgICAgICAgIFwKKyAgKCgoUkVH Tk8pIDwgRklSU1RfUFNFVURPX1JFR0lTVEVSKSAgICAgICAgICAgICAgICAg ICBcCisgICB8fCAocmVnX3JlbnVtYmVyICYmICgodW5zaWduZWQpIHJlZ19y ZW51bWJlcltSRUdOT10gXAorICAgICAgICAgICAgICAgICAgICAgICAgPCBG SVJTVF9QU0VVRE9fUkVHSVNURVIpKSkKKworLyogVXNlIGV2ZW4tbnVtYmVy ZWQgcmVnIGZvciA2NC1iaXQgYWNjZXNzZXMuICAqLworI2RlZmluZSBSRUdO T19NT0RFX09LX0ZPUl9CQVNFX1AoUkVHTk8sIE1PREUpCSAgXAorCShDUjE2 X1JFR05PX09LX0ZPUl9CQVNFX1AoUkVHTk8pICAmJgkgIFwKKwkgICgoR0VU X01PREVfU0laRSAoTU9ERSkgPiA0ICAmJiAgCSAgXAorCSAgICAgKFJFR05P KSA8IENSMTZfRklSU1RfRFdPUkRfUkVHSVNURVIpXAorCSAgICAgPyAoMCA9 PSAoKFJFR05PKSAmIDEpKSBcCisJICAgICA6IDEpKQorCisvKiBUT0RPOiBG b3Igbm93IGxldHMgbm90IHN1cHBvcnQgaW5kZXggYWRkcmVzc2luZyBtb2Rl LiAgKi8KKyNkZWZpbmUgUkVHTk9fT0tfRk9SX0lOREVYX1AoUkVHTk8pICAg ICAgICBcCisgICgoKFJFR05PID49IENSMTZfRklSU1RfRFdPUkRfUkVHSVNU RVIpICBcCisgICAgICYmICgoUkVHTk8pIDwgRklSU1RfUFNFVURPX1JFR0lT VEVSKSkgXAorICAgfHwgKHJlZ19yZW51bWJlciAgICAgICAgICAgICAgICAg ICAgICAgIFwKKyAgICAgICAmJiAoKCh1bnNpZ25lZCkgcmVnX3JlbnVtYmVy W1JFR05PXSA+PSBDUjE2X0ZJUlNUX0RXT1JEX1JFR0lTVEVSKSBcCisgICAg ICAgICAgICAmJiAoKHVuc2lnbmVkKSByZWdfcmVudW1iZXJbUkVHTk9dIDwg RklSU1RfUFNFVURPX1JFR0lTVEVSKSkpXAorICApCisKKyNkZWZpbmUgUFJF RkVSUkVEX1JFTE9BRF9DTEFTUyhYLCBDTEFTUykgQ0xBU1MKKworLyogVGhl IG1heGltdW0gbnVtYmVyIG9mIGNvbnNlY3V0aXZlIHJlZ2lzdGVycyBvZiBj bGFzcyBDTEFTUyBuZWVkZWQgdG8KKyAgIGhvbGQgYSB2YWx1ZSBvZiBtb2Rl IE1PREUuCisgICBPbiB0aGUgQ29tcGFjdFJJU0MgYXJjaGl0ZWN0dXJlLCB0 aGUgc2l6ZSBvZiBNT0RFIGluIHdvcmRzLgorICAgVGhlIHNpemUgb2YgTU9E RSBpbiBkb3VibGUgd29yZHMgZm9yIHRoZSBjbGFzcyBMT05HX1JFR1MuCisK KyAgIFRoZSBmb2xsb3dpbmcgY2hlY2sgYXNzdW1lcyBpZiB0aGUgY2xhc3Mg aXMgbm90IExPTkdfUkVHUywgdGhlbgorICAgYWxsIChOT19SRUdTLCBTSE9S VF9SRUdTLCBOT1NQX1JFR1MgYW5kIEdFTkVSQUxfUkVHUykgb3RoZXIgY2xh c3NlcyBhcmUgCisgICBzaG9ydC4gIFdlIG1heSBoYXZlIHRvIGNoZWNrIGlm IHRoaXMgY2FuIGNhdXNlIGFueSBkZWdyYWRhdGlvbiBpbiAKKyAgIHBlcmZv cm1hbmNlLiAgKi8KKyNkZWZpbmUgQ0xBU1NfTUFYX05SRUdTKENMQVNTLCBN T0RFKSBcCisgIChDTEFTUyA9PSBMT05HX1JFR1MgXAorICAgPyAoR0VUX01P REVfU0laRSAoTU9ERSkgKyBDUjE2X1VOSVRTX1BFUl9EV09SRCAtIDEpIC8g Q1IxNl9VTklUU19QRVJfRFdPUkRcCisgICA6IChHRVRfTU9ERV9TSVpFIChN T0RFKSArIFVOSVRTX1BFUl9XT1JEIC0gMSkgLyBVTklUU19QRVJfV09SRCkK KworLyogTWFjcm9zIHRvIGNoZWNrIHRoZSByYW5nZSBvZiBpbnRlZ2VycyAu IFRoZXNlIG1hY3JvcyB3ZXJlIHVzZWQgYWNyb3NzCisgICB0aGUgcG9ydCwg bWFqb3JseSBpbiBjb25zdHJhaW50cy5tZCwgcHJlZGljYXRlcy5tZCBmaWxl cy4gKi8KKyNkZWZpbmUgU0lHTkVEX0lOVF9GSVRTX05fQklUUyhpbW0sIE4p ICAgICAgICAgICBcCisgICgoKChpbW0pIDwgKChIT1NUX1dJREVfSU5UKSAx IDw8ICgoTikgLSAxKSkpICAgICAgIFwKKyAgICAgICYmICgoaW1tKSA+PSAt KChIT1NUX1dJREVfSU5UKSAxIDw8ICgoTikgLSAxKSkpKSA/IDEgOiAwKQor CisjZGVmaW5lIFVOU0lHTkVEX0lOVF9GSVRTX05fQklUUyhpbW0sIE4pIFwK KyAgKCgoaW1tKSA8ICgoSE9TVF9XSURFX0lOVCkgMSA8PCAoTikpICYmIChp bW0pID49IChIT1NUX1dJREVfSU5UKSAwKSA/IDEgOiAwKQorCisjZGVmaW5l IElOX1JBTkdFX1AoVkFMVUUsIExPVywgSElHSCkgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorICAoKCgoSE9TVF9XSURFX0lOVCkoVkFMVUUpKSA+ PSAoSE9TVF9XSURFX0lOVCkoTE9XKSkgICAgICAgICAgIFwKKyAgICYmICgo KEhPU1RfV0lERV9JTlQpKFZBTFVFKSkgPD0gKChIT1NUX1dJREVfSU5UKShI SUdIKSkpKQorCisjZGVmaW5lIElOX1JBTihWQUxVRSwgTE9XLCBISUdIKSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAoKCgoKEhPU1RfV0lE RV9JTlQpKFZBTFVFKSkgPj0gKEhPU1RfV0lERV9JTlQpKExPVykpICAgICAg IFwKKyAgICYmICgoKEhPU1RfV0lERV9JTlQpKFZBTFVFKSkgPD0gKChIT1NU X1dJREVfSU5UKShISUdIKSkpKSA/IDEgOiAwKQorCisvKiBUaGlzIGNoZWNr IGlzIGZvciBzYml0L2NiaXQgaW5zdHJ1Y3Rpb24uICAqLworI2RlZmluZSBP S19GT1JfWihPUCkgXAorICAoKEdFVF9DT0RFIChPUCkgPT0gTUVNICYmIEdF VF9DT0RFIChYRVhQIChPUCwgMCkpID09IENPTlNUX0lOVCkgXAorICAgfHwg KEdFVF9DT0RFIChPUCkgPT0gTUVNICYmIEdFVF9DT0RFIChYRVhQIChPUCwg MCkpID09IFJFRykgXAorICAgfHwgKEdFVF9DT0RFIChPUCkgPT0gTUVNICYm IEdFVF9DT0RFIChYRVhQIChPUCwgMCkpID09IFBMVVMgXAorICAgICAgICYm IEdFVF9DT0RFIChYRVhQICgoWEVYUCAoT1AsIDApKSwgMCkpID09IFJFRyBc CisgICAgICAgJiYgR0VUX0NPREUgKFhFWFAgKChYRVhQIChPUCwgMCkpLCAx KSkgPT0gQ09OU1RfSU5UKSkKKworLyogU3RhY2sgbGF5b3V0IGFuZCBjYWxs aW5nIGNvbnZlbnRpb25zLiAgKi8KKyNkZWZpbmUgU1RBQ0tfR1JPV1NfRE9X TldBUkQKKworI2RlZmluZSBTVEFSVElOR19GUkFNRV9PRkZTRVQgICAwCisK KyNkZWZpbmUgU1RBQ0tfUE9JTlRFUl9SRUdOVU0gICAgMTUKKworI2RlZmlu ZSBGUkFNRV9QT0lOVEVSX1JFR05VTSAgICAxMworCisjZGVmaW5lIEFSR19Q T0lOVEVSX1JFR05VTSAgICAgIDEyCisKKyNkZWZpbmUgU1RBVElDX0NIQUlO X1JFR05VTSAgICAgMQorCisjZGVmaW5lIFJFVFVSTl9BRERSRVNTX1JFR05V TSAgIDE0CisKKyNkZWZpbmUgRklSU1RfUEFSTV9PRkZTRVQoRk5ERUNMKSAw CisKKyNkZWZpbmUgRUxJTUlOQUJMRV9SRUdTICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKyAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKyAgICB7IEFSR19QT0lOVEVSX1JFR05V TSwgICBTVEFDS19QT0lOVEVSX1JFR05VTX0sIFwKKyAgICB7IEFSR19QT0lO VEVSX1JFR05VTSwgICBGUkFNRV9QT0lOVEVSX1JFR05VTX0sIFwKKyAgICB7 IEZSQU1FX1BPSU5URVJfUkVHTlVNLCBTVEFDS19QT0lOVEVSX1JFR05VTX0g IFwKKyAgfQorCisjZGVmaW5lIElOSVRJQUxfRUxJTUlOQVRJT05fT0ZGU0VU KEZST00sIFRPLCBPRkZTRVQpICAgICAgICAgICAgICBcCisgIGRvICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAo T0ZGU0VUKSA9IGNyMTZfaW5pdGlhbF9lbGltaW5hdGlvbl9vZmZzZXQgKChG Uk9NKSwgKFRPKSk7ICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHdo aWxlICgwKQorCisvKiBQYXNzaW5nIGZ1bmN0aW9uIGFyZ3VtZW50cy4gICov CisKKyNkZWZpbmUgQUNDVU1VTEFURV9PVVRHT0lOR19BUkdTIDAKKworI2Rl ZmluZSBQVVNIX0FSR1MgMQorCisjZGVmaW5lIFBVU0hfUk9VTkRJTkcoQllU RVMpICgoKEJZVEVTKSArIDEpICYgfjEpCisKKyNpZm5kZWYgQ1VNVUxBVElW RV9BUkdTCitzdHJ1Y3QgY3VtdWxhdGl2ZV9hcmdzCit7CisgIGludCBpbnRz OworICBpbnQgbGFzdF9wYXJtX2luX3JlZzsKK307CisKKyNkZWZpbmUgQ1VN VUxBVElWRV9BUkdTIHN0cnVjdCBjdW11bGF0aXZlX2FyZ3MKKyNlbmRpZgor CisvKiBPbiB0aGUgQ1IxNiBhcmNoaXRlY3R1cmUsIFZhcmFyZ3Mgcm91dGlu ZXMgc2hvdWxkIHJlY2VpdmUgdGhlaXIgcGFyYW1ldGVycyAKKyAgIG9uIHRo ZSBzdGFjay4gICovCisKKyNkZWZpbmUgSU5JVF9DVU1VTEFUSVZFX0FSR1Mo Q1VNLCBGTlRZUEUsIExJQk5BTUUsIEZOREVDTCwgTl9OQU1FRF9BUkdTKSBc CisgIGNyMTZfaW5pdF9jdW11bGF0aXZlX2FyZ3MgKCYoQ1VNKSwgKEZOVFlQ RSksIChMSUJOQU1FKSkKKworI2RlZmluZSBGVU5DVElPTl9BUkdfUkVHTk9f UChSRUdOTykgIGNyMTZfZnVuY3Rpb25fYXJnX3JlZ25vX3AgKFJFR05PKQor CisvKiBSZXR1cm5pbmcgZnVuY3Rpb24gdmFsdWUuICAqLworCisvKiBPbiB0 aGUgQ1IxNiwgdGhlIHJldHVybiB2YWx1ZSBpcyBpbiBSMC4gICovCisjZGVm aW5lIEZVTkNUSU9OX1ZBTFVFKFZBTFRZUEUsIEZVTkMpIFwKKyAgICBnZW5f cnR4X1JFRyAoVFlQRV9NT0RFIChWQUxUWVBFKSwgMCkKKworI2RlZmluZSBM SUJDQUxMX1ZBTFVFKE1PREUpICAgICBnZW5fcnR4X1JFRyAoTU9ERSwgMCkK KworI2RlZmluZSBGVU5DVElPTl9WQUxVRV9SRUdOT19QKE4pICAgKChOKSA9 PSAwKQorCisjZGVmaW5lIENSMTZfU1RSVUNUX1ZBTFVFX1JFR05VTSAgMAor CisvKiBHZW5lcmF0aW5nIGNvZGUgZm9yIHByb2ZpbGluZyAtIE5PVCBJTVBM RU1FTlRFRC4gICovCisjdW5kZWYgIEZVTkNUSU9OX1BST0ZJTEVSCisjZGVm aW5lIEZVTkNUSU9OX1BST0ZJTEVSKFNUUkVBTSwgTEFCRUxOTykgICAgICBc Cit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisgIHNvcnJ5ICgiUHJvZmlsZXIgc3VwcG9ydCBmb3IgQ1IxNiIp OyAgICAgICAgXAorfQorCisvKiBUcmFtcG9saW5lcyBmb3IgbmVzdGVkIGZ1 bmN0aW9ucyAtIE5PVCBTVVBQT1JURUQuICAqLworI2RlZmluZSBUUkFNUE9M SU5FX1NJWkUgICAgMTYKKworLyogQUREUkVTU0lORyBNT0RFUy4gICovCisK KyNkZWZpbmUgQ09OU1RBTlRfQUREUkVTU19QKFgpICAgICAgIFwKKyAgKEdF VF9DT0RFIChYKSA9PSBMQUJFTF9SRUYgICAgICAgIFwKKyAgIHx8IEdFVF9D T0RFIChYKSA9PSBTWU1CT0xfUkVGICAgIFwKKyAgIHx8IEdFVF9DT0RFIChY KSA9PSBDT05TVCAgICAgICAgIFwKKyAgIHx8IEdFVF9DT0RFIChYKSA9PSBD T05TVF9JTlQpCisKKyNkZWZpbmUgTUFYX1JFR1NfUEVSX0FERFJFU1MgICAg MgorCisjZGVmaW5lIEhBVkVfUE9TVF9JTkNSRU1FTlQgICAgIDAKKyNkZWZp bmUgSEFWRV9QT1NUX0RFQ1JFTUVOVCAgICAgMAorI2RlZmluZSBIQVZFX1BP U1RfTU9ESUZZX0RJU1AgICAwCisjZGVmaW5lIEhBVkVfUE9TVF9NT0RJRllf UkVHICAgIDAKKworI2lmZGVmIFJFR19PS19TVFJJQ1QKKyNkZWZpbmUgQ1Ix Nl9SRUdfT0tfRk9SX0JBU0VfUChYKQlDUjE2X1JFR05PX09LX0ZPUl9CQVNF X1AgKFJFR05PIChYKSkKKyNkZWZpbmUgUkVHX01PREVfT0tfRk9SX0JBU0Vf UChYLCBNT0RFKQlcCisgIFJFR05PX01PREVfT0tfRk9SX0JBU0VfUCAoUkVH Tk8oWCksIE1PREUpCisjZGVmaW5lIFJFR19PS19GT1JfSU5ERVhfUChYKSAg IFJFR05PX09LX0ZPUl9JTkRFWF9QIChSRUdOTyAoWCkpCisjZWxzZSAvKiBu b3QgUkVHX09LX1NUUklDVC4gICovCisjZGVmaW5lIENSMTZfUkVHX09LX0ZP Ul9CQVNFX1AoWCkJMQorI2RlZmluZSBSRUdfTU9ERV9PS19GT1JfQkFTRV9Q KFgsIE1PREUpCTEKKyNkZWZpbmUgUkVHX09LX0ZPUl9JTkRFWF9QKFgpICAg MQorI2VuZGlmIC8qIG5vdCBSRUdfT0tfU1RSSUNULiAgKi8KKworI2lmZGVm IFJFR19PS19TVFJJQ1QKKyNkZWZpbmUgR09fSUZfTEVHSVRJTUFURV9BRERS RVNTKE1PREUsIFgsIExBQkVMKSAgICBcCit7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBpZiAoY3Ix Nl9sZWdpdGltYXRlX2FkZHJlc3NfcCAoTU9ERSwgWCwgMSkpICAgICAgIFwK KyAgICBnb3RvIExBQkVMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorfQorI2Vsc2UgLyogbm90IFJFR19PS19TVFJJQ1QuICAqLwor I2RlZmluZSBHT19JRl9MRUdJVElNQVRFX0FERFJFU1MoTU9ERSwgWCwgTEFC RUwpICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisgIGlmIChjcjE2X2xlZ2l0aW1hdGVfYWRk cmVzc19wIChNT0RFLCBYLCAwKSkgICAgICAgXAorICAgIGdvdG8gTEFCRUw7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisjZW5k aWYgLyogbm90IFJFR19PS19TVFJJQ1QuICAqLworCisvKiBHbyB0byBMQUJF TCBpZiBBRERSIChhIGxlZ2l0aW1hdGUgYWRkcmVzcyBleHByZXNzaW9uKSBo YXMgCisgICBhbiBlZmZlY3QgdGhhdCBkZXBlbmRzIG9uIHRoZSBtYWNoaW5l IG1vZGUgaXQgaXMgdXNlZCBmb3IuICAqLworI2RlZmluZSBHT19JRl9NT0RF X0RFUEVOREVOVF9BRERSRVNTKEFERFIsIExBQkVMKQorCisvKiBOb256ZXJv IGlmIFggaXMgYSBsZWdpdGltYXRlIGNvbnN0YW50IGZvciBhbiBpbW1lZGlh dGUKKyAgIG9wZXJhbmQgb24gdGhlIHRhcmdldCBtYWNoaW5lLiAgWW91IGNh biBhc3N1bWUgdGhhdCBYCisgICBzYXRpc2ZpZXMgQ09OU1RBTlRfUC4KKyAg IEluIGNyMTZjIHRyZWF0IGxlZ2l0aW1pemUgZmxvYXQgY29uc3RhbnQgYXMg YW4gaW1tZWRpYXRlIG9wZXJhbmQuICAqLworI2RlZmluZSBMRUdJVElNQVRF X0NPTlNUQU5UX1AoWCkgIDEKKworLyogUmVsYXRpdmUgY29zdHMgb2Ygb3Bl cmF0aW9ucy4gICovCisjZGVmaW5lIE1FTU9SWV9NT1ZFX0NPU1QoTU9ERSwg Q0xBU1MsIElOKSBcCisgIGNyMTZfbWVtb3J5X21vdmVfY29zdCAoTU9ERSwg Q0xBU1MsIElOKQorCisvKiBNb3ZpbmcgdG8gcHJvY2Vzc29yIHJlZ2lzdGVy IGZsdXNoZXMgcGlwZWxpbmUgLSB0aHVzIGFzeW1tZXRyaWMuICAqLworI2Rl ZmluZSBSRUdJU1RFUl9NT1ZFX0NPU1QoTU9ERSwgRlJPTSwgVE8pICgoVE8g IT0gR0VORVJBTF9SRUdTKSA/IDggOiAyKQorLyogQXNzdW1lIGJlc3QgY2Fz ZSAoYnJhbmNoIHByZWRpY3RlZCkuICAqLworI2RlZmluZSBCUkFOQ0hfQ09T VChzcGVlZF9wLCBwcmVkaWN0YWJsZV9wKSAgICAgICAyCisKKyNkZWZpbmUg U0xPV19CWVRFX0FDQ0VTUyAgMQorCisvKiBJdCBpcyBhcyBnb29kIG9yIGJl dHRlciB0byBjYWxsIGEgY29uc3RhbnQgZnVuY3Rpb24gYWRkcmVzcyB0aGFu IHRvCisgICBjYWxsIGFuIGFkZHJlc3Mga2VwdCBpbiBhIHJlZ2lzdGVyLiAg Ki8KKyNkZWZpbmUgTk9fRlVOQ1RJT05fQ1NFCisKKy8qIERpdmlkaW5nIHRo ZSBvdXRwdXQgaW50byBzZWN0aW9ucy4gICovCisKKyNkZWZpbmUgVEVYVF9T RUNUSU9OX0FTTV9PUCAiXHQuc2VjdGlvblx0LnRleHQiCisKKyNkZWZpbmUg REFUQV9TRUNUSU9OX0FTTV9PUCAiXHQuc2VjdGlvblx0LmRhdGEiCisKKyNk ZWZpbmUgQlNTX1NFQ1RJT05fQVNNX09QICAiXHQuc2VjdGlvblx0LmJzcyIK KworLyogUG9zaXRpb24gaW5kZXBlbmRlbnQgY29kZSAoUElDKS4gICovCisv KiBORUFSX1BJQyBmb3IgLWZwaWMgb3B0aW9uLiAgKi8KKworI2RlZmluZSBO RUFSX1BJQyAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIAorLyogRkFSX1BJQyBmb3IgLWZQSUMgb3B0aW9uLiAgKi8gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKworI2RlZmlu ZSBGQVJfUElDICAyCisKKyNkZWZpbmUgUElDX09GRlNFVF9UQUJMRV9SRUdO VU0gIDEyCisKKyNkZWZpbmUgTEVHSVRJTUFURV9QSUNfT1BFUkFORF9QKFgp IGxlZ2l0aW1hdGVfcGljX29wZXJhbmRfcCAoWCkgICAgICAgCisKKy8qIEFz c2VtYmxlciBmb3JtYXQuICAqLworCisvKiBDaGFyYWN0ZXIgdG8gc3RhcnQg YSBjb21tZW50LiAgKi8KKyNkZWZpbmUgQVNNX0NPTU1FTlRfU1RBUlQgIiMi CisKKyNkZWZpbmUgR0xPQkFMX0FTTV9PUCAiXHQuZ2xvYmxcdCIKKworI3Vu ZGVmIFVTRVJfTEFCRUxfUFJFRklYCisjZGVmaW5lIFVTRVJfTEFCRUxfUFJF RklYICJfIgorCisjdW5kZWYgQVNNX09VVFBVVF9MQUJFTFJFRgorI2RlZmlu ZSBBU01fT1VUUFVUX0xBQkVMUkVGKFNUUkVBTSwgTkFNRSkgXAorICBhc21f ZnByaW50ZiAoU1RSRUFNLCAiJVUlcyIsICgqdGFyZ2V0bS5zdHJpcF9uYW1l X2VuY29kaW5nKSAoTkFNRSkpOworCisjZGVmaW5lIEFTTV9PVVRQVVRfU1lN Qk9MX1JFRihTVFJFQU0sIFNZTUJPTCkgICBcCisgIGRvICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg ICBjb25zdCBjaGFyICpybiA9IFhTVFIgKFNZTUJPTCwgMCk7ICAgICAgICBc CisgICAgICBhc3NlbWJsZV9uYW1lIChTVFJFQU0sIHJuKTsgICAgICAgICAg ICAgICBcCisgICAgICBpZiAoU1lNQk9MX1JFRl9GVU5DVElPTl9QIChTWU1C T0wpKSAgICAgICBcCisgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisgICAgICAgIGZwcmludGYgKChTVFJFQU0p LCAiQGMiKTsgICAgICAgICAgICAgICBcCisgICAgICB9ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHdoaWxl ICgwKQorCisjdW5kZWYgQVNNX0FQUF9PTgorI2RlZmluZSBBU01fQVBQX09O ICAgIiNBUFBcbiIKKworI3VuZGVmIEFTTV9BUFBfT0ZGCisjZGVmaW5lIEFT TV9BUFBfT0ZGICAiI05PX0FQUFxuIgorCisvKiBTd2l0Y2ggaW50byBhIGdl bmVyaWMgc2VjdGlvbi4gICovCisjZGVmaW5lIFRBUkdFVF9BU01fTkFNRURf U0VDVElPTglkZWZhdWx0X2VsZl9hc21fbmFtZWRfc2VjdGlvbgorCisjdW5k ZWYgSU5JVF9TRUNUSU9OX0FTTV9PUAorI2RlZmluZSBJTklUX1NFQ1RJT05f QVNNX09QCQkiXHQuc2VjdGlvblx0LmluaXQiCisKKyN1bmRlZiBGSU5JX1NF Q1RJT05fQVNNX09QCisjZGVmaW5lIEZJTklfU0VDVElPTl9BU01fT1AJCSJc dC5zZWN0aW9uXHQuZmluaSIKKworLyogSW5zdHJ1Y3Rpb24gb3V0cHV0LiAg Ki8KKworI2RlZmluZSBSRUdJU1RFUl9OQU1FUyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisgIHsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAi cjAiLCAgInIxIiwgICJyMiIsICAicjMiLCAgInI0IiwgICJyNSIsICAicjYi LCAgInI3IiwgXAorICAgICJyOCIsICAicjkiLCAgInIxMCIsICJyMTEiLCAi cjEyIiwgInIxMyIsICJyYSIsICAic3AiICBcCisgIH0KKworI2RlZmluZSBQ UklOVF9PUEVSQU5EKFNUUkVBTSwgWCwgQ09ERSkgXAorICBjcjE2X3ByaW50 X29wZXJhbmQgKFNUUkVBTSwgWCwgQ09ERSkKKworI2RlZmluZSBQUklOVF9P UEVSQU5EX0FERFJFU1MoU1RSRUFNLCBBRERSKSBcCisgIGNyMTZfcHJpbnRf b3BlcmFuZF9hZGRyZXNzIChTVFJFQU0sIEFERFIpCisKKy8qIE91dHB1dCBv ZiBkaXNwYXRjaCB0YWJsZXMuICAqLworCisvKiBSZXZpc2l0LiBObyBQQyBy ZWxhdGl2ZSBjYXNlIGFzIGxhYmVsIGV4cHJlc3Npb25zIGFyZSBub3QgCisg ICBwcm9wZXJseSBzdXBwb3J0ZWQgaW4gYmludXRpbHMgZWxzZSB3ZSBjb3Vs ZCBoYXZlIGRvbmUgdGhpczoKKyAgICNkZWZpbmUgQ0FTRV9WRUNUT1JfUENf UkVMQVRJVkUgKG9wdGltaXplX3NpemUgPyAxIDogMCkuICAqLworI2RlZmlu ZSBDQVNFX1ZFQ1RPUl9QQ19SRUxBVElWRSAwCisKKyNkZWZpbmUgQVNNX09V VFBVVF9BRERSX0RJRkZfRUxUKEZJTEUsIEJPRFksIFZBTFVFLCBSRUwpICAg IFwKKyAgKChHRVRfTU9ERSAoQk9EWSkgPT0gUUltb2RlKSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKyAgID8gZnByaW50ZiAoKEZJTEUpLCAi XHQuYnl0ZSAoLkwlZC0uTCVkKSA+PiAxXG4iLCAgICAgICAgIFwKKyAgICAg ICAgICAgICAgVkFMVUUsIFJFTCkgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKyAgIDogZnByaW50ZiAoKEZJTEUpLCAiXHQud29yZCAo LkwlZC0uTCVkKSA+PiAxXG4iLCAgICAgICAgIFwKKyAgICAgICAgICAgICAg VkFMVUUsIFJFTCkpCisKKyNkZWZpbmUgQVNNX09VVFBVVF9BRERSX1ZFQ19F TFQoU1RSRUFNLCBWQUxVRSkgXAorICBhc21fZnByaW50ZiAoKFNUUkVBTSks ICJcdC5sb25nXHQuTCVkQGNcbiIsIChWQUxVRSkpCisKKy8qIEFsaWdubWVu dCBpbiBhc3NlbWJsZXIgZmlsZS4gICovCisKKyNkZWZpbmUgQVNNX09VVFBV VF9BTElHTihTVFJFQU0sIFBPV0VSKSBcCisgIGFzbV9mcHJpbnRmICgoU1RS RUFNKSwgIlx0LmFsaWduXHQlZFxuIiwgMSA8PCAoUE9XRVIpKQorCisvKiBN aXNjZWxsYW5lb3VzIHBhcmFtZXRlcnMuICAqLworCisjZGVmaW5lIENBU0Vf VkVDVE9SX01PREUgIFBtb2RlCisKKyNkZWZpbmUgTU9WRV9NQVggNAorCisj ZGVmaW5lIFRSVUxZX05PT1BfVFJVTkNBVElPTihPVVRQUkVDLCBJTlBSRUMp ICAxCisKKyNkZWZpbmUgU1RPUkVfRkxBR19WQUxVRSAgMQorCisjZGVmaW5l IFBtb2RlIFNJbW9kZQorCisjZGVmaW5lIEZVTkNUSU9OX01PREUgUUltb2Rl CisKKy8qIERlZmluZSB0aGlzIGJvb2xlYW4gbWFjcm8ocykgdG8gaW5kaWNh dGUgd2hldGhlciBvciBub3QgeW91ciBhcmNoaXRlY3R1cmUKKyAgIGhhcyAo dW4pY29uZGl0aW9uYWwgYnJhbmNoZXMgdGhhdCBjYW4gc3BhbiBhbGwgb2Yg bWVtb3J5LiAgSXQgaXMgdXNlZCBpbgorICAgY29uanVuY3Rpb24gd2l0aCBh biBvcHRpbWl6YXRpb24gdGhhdCBwYXJ0aXRpb25zIGhvdCBhbmQgY29sZCBi YXNpYyBibG9ja3MKKyAgIGludG8gc2VwYXJhdGUgc2VjdGlvbnMgb2YgdGhl IGV4ZWN1dGFibGUuCisgICBDUjE2IGNvbnRhaW5zIGJyYW5jaCBpbnN0cnVj dGlvbnMgdGhhdCBzcGFuIHdob2xlIGFkZHJlc3Mgc3BhY2UuICAqLworI2Rl ZmluZSBIQVNfTE9OR19DT05EX0JSQU5DSCAgICAxCisjZGVmaW5lIEhBU19M T05HX1VOQ09ORF9CUkFOQ0ggIDEKKworCisjZW5kaWYgLyogRW5kIG9mIEdD Q19DUjE2X0guICAqLwpkaWZmIC11cHJOIC14Jyoub3JpZycgLXgnKi5yZWon IG9yaWcvZ2NjL2NvbmZpZy9jcjE2L2NyMTYtbGliZ2NjLnMgbW9kL2djYy9j b25maWcvY3IxNi9jcjE2LWxpYmdjYy5zCi0tLSBvcmlnL2djYy9jb25maWcv Y3IxNi9jcjE2LWxpYmdjYy5zCTE5NzAtMDEtMDEgMDU6MzA6MDAuMDAwMDAw MDAwICswNTMwCisrKyBtb2QvZ2NjL2NvbmZpZy9jcjE2L2NyMTYtbGliZ2Nj LnMJMjAxMS0wNC0wOCAxNjo0MzozNS4wMDAwMDAwMDAgKzA1MzAKQEAgLTAs MCArMSw1NzggQEAKKy8qIExpYmdjYyBUYXJnZXQgc3BlY2lmaWMgaW1wbGVt ZW50YXRpb24uCisgICBDb3B5cmlnaHQgKEMpIDIwMTAgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLCBJbmMuCisgICBDb250cmlidXRlZCBieSBLUElUIEN1 bW1pbnMgSW5mb3N5c3RlbXMgTGltaXRlZC4KKworICAgVGhpcyBmaWxlIGlz IHBhcnQgb2YgR0NDLgorCisgICBHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgor ICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5k YXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikg YW55IGxhdGVyCisgICB2ZXJzaW9uLgorCisgICBHQ0MgaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJ VEhPVVQgQU5ZCisgICBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICAgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlCisgICBmb3IgbW9yZSBkZXRhaWxzLgorCisg ICBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBn cmFudGVkIGFkZGl0aW9uYWwKKyAgIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBp biB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24K KyAgIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24uCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv cHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorICAg YSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBh bG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKyAgIHNlZSB0aGUgZmlsZXMgQ09Q WUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBu b3QsIHNlZQorICAgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAg Ki8KKworI2lmZGVmICBMX211bHNpMworCS50ZXh0CisJLmFsaWduICA0CisJ Lmdsb2JsICBfX19tdWxzaTMKK19fX211bHNpMzoKKwltb3Z3ICAgIHI0LHIw CisJbW92dyAgICByMixyMQorCS8qIEV4dGVuZGVkIG11bHRpcGxpY2F0aW9u IGJldHdlZW4gdGhlIDIgbG93ZXIgd29yZHMgKi8KKwltdWx1dyAgIHIxLChy MSxyMCkKKworCS8qIE11bHRpcGx5IHRoZSBsb3dlciB3b3JkIG9mIGVhY2gg cGFyYW1ldGVyICAqLyAgCisJbXVsdyAgICByMixyNSAgIAorICAgIAorCS8q IFdpdGggdGhlIGhpZ2hlciB3b3JkIG9mIHRoZSBvdGhlciAgKi8KKwltdWx3 ICAgIHIzLHI0ICAgICAKKyAgCisJLyogQWRkIHByb2R1Y3RzIHRvIHRoZSBo aWdoZXIgcGFydCBvZiB0aGUgZmluYWwgcmVzdWx0ICAqLworCWFkZHcgICAg cjQscjEgICAgICAgCisJYWRkdyAgICByNSxyMQorCWp1bXAgICAgKHJhKQor I2VuZGlmCisKKworI2lmZGVmIExfZGl2ZGkzCisJLnRleHQKKwkuYWxpZ24g NAorCS5nbG9ibCBfX19kaXZkaTMKKworX19fZGl2ZGkzOgorCXB1c2gJJDQs IHI3LCByYQorCisjICBpZmRlZiBfX0lEX1NIQVJFRF9MSUJfXworCXB1c2gJ JDIsIHIxMgorCW1vdmQJJF9fY3VycmVudF9zaGFyZWRfbGlicmFyeV9yMTJf b2Zmc2V0XywgKHIxLHIwKQorCWxvYWRkCVtyMTJdMChyMSxyMCksIChyMTIp CisjICBlbmRpZgorCisJLyogUGFyYW0gIzEgTG9uZyBMb25nIGxvdyBiaXQg Zmlyc3QgKi8KKwlsb2FkZCAgIDEyKHNwKSwgKHIxLCByMCkKKwlsb2FkZCAg IDE2KHNwKSwgKHIzLCByMikKKworCS8qIFBhcmFtICMyIExvbmcgTG9uZyBs b3cgYml0IGZpcnN0ICovCisJbG9hZGQgICAyMChzcCksIChyNSwgcjQpCisJ bG9hZGQgICAyNChzcCksIChyNywgcjYpCisJCisJLyogU2V0IG5lZyB0byAw ICovCisJbW92dyAkMCwgcjEwCisJCisJc3ViZCAkMTYsIChzcCkKKworCS8q IENvbXBhcmUgaWYgcGFyYW0xIGlzIGdyZWF0ZXIgdGhhbiAwICovCQorCWNt cHcgJDAsIHIzCisJYmxlIEw0CisKKwkvKiBJbnZlcnQgcGFyYW0xIGFuZCBu ZWcgKi8KKwltb3ZkICQtMSwgKHI5LCByOCkgCS8qIFRlbXAgc2V0IHRvIEZG RkZGRkZGICovCisJeG9yZCAocjksIHI4KSwgKHIxLCByMCkJLyogWG9yIGxv dyBiaXRzIG9mIHBhcmFtIDEgd2l0aCB0ZW1wICovCisJeG9yZCAocjksIHI4 KSwgKHIzLCByMikJLyogWG9yIGhpZ2ggYml0cyBvZiBwYXJhbSAxIHdpdGgg dGVtcCAqLworCWFkZGQgJDEsIChyMSwgcjApCS8qIEFkZCAxIHRvIGxvdyBi aXRzIG9mIHBhcmFtIDEgKi8KKwl4b3J3ICQxLCByMTAJCS8qIEludmVydCBu ZWcgKi8KKwliY2MgTDQJCQkvKiBJZiBubyBjYXJyeSBvY2N1cnJlZCBnbyB0 byBMNCAqLworCWFkZGQgJDEsIChyMywgcjIpCS8qIEFkZCAxIHRvIGhpZ2gg Yml0cyBvZiBwYXJhbSAxICovCisKK0w0OglzdG9yZCAocjEsIHIwKSwgMChz cCkKKwlzdG9yZCAocjMsIHIyKSwgNChzcCkKKwkKKwkvKiBDb21wYXJlIGlm IHBhcmFtMiBpcyBncmVhdGVyIHRoYW4gMCAqLwkKKwljbXB3ICQwLCByNwor CWJsZSBMNQorCisJLyogSW52ZXJ0IHBhcmFtMiBhbmQgbmVnICovCisJbW92 ZCAkLTEsIChyOSwgcjgpCS8qIFRlbXAgc2V0IHRvIEZGRkZGRkZGICovCisJ eG9yZCAocjksIHI4KSwgKHI1LCByNCkJLyogWG9yIGxvdyBiaXRzIG9mIHBh cmFtIDIgd2l0aCB0ZW1wICovCisJeG9yZCAocjksIHI4KSwgKHI3LCByNikJ LyogWG9yIGhpZ2ggYml0cyBvZiBwYXJhbSAyIHdpdGggdGVtcCAqLworCWFk ZGQgJDEsIChyNSwgcjQpCS8qIEFkZCAxIHRvIGxvdyBiaXRzIG9mIHBhcmFt IDIgKi8KKwl4b3J3ICQxLCByMTAJCS8qIEludmVydCBuZWcgKi8KKwliY2Mg TDUJCQkvKiBJZiBubyBjYXJyeSBvY2N1cnJlZCBnbyB0byBMNSAqLworCWFk ZGQgJDEsIChyNywgcjYpCS8qIEFkZCAxIHRvIGhpZ2ggYml0cyBvZiBwYXJh bSAyICovCisKK0w1OglzdG9yZCAocjUsIHI0KSwgOChzcCkKKwlzdG9yZCAo cjcsIHI2KSwgMTIoc3ApCisJbW92dyAkMCwgcjIKKworCS8qIENhbGwgdWRp dm1vZGRpMyAqLworI2lmZGVmIF9fUElDX18KKwlsb2FkZAlfX191ZGl2bW9k ZGkzQGNHT1QocjEyKSwgKHIxLHIwKQorCWphbAkocjEscjApCisjZWxzZQor CWJhbCAocmEpLCBfX191ZGl2bW9kZGkzCisjZW5kaWYKKworCS8qIElmIChu ZWcpICovCisJYWRkZAkkMTYsIChzcCkKKwljbXB3ICQwLCByMTAJCS8qIENv bXBhcmUgMCB3aXRoIG5lZyAqLworCWJlcSBMZXhpdF9fCisJCisJLyogTmVn ID0gLU5lZyAqLworCXhvcmQgKHI5LCByOCksIChyMSwgcjApCS8qIFhvciBs b3cgYml0cyBvZiB1cmVzIHdpdGggdGVtcCAqLworCXhvcmQgKHI5LCByOCks IChyMywgcjIpCS8qIFhvciBoaWdoIGJpdHMgb2YgdXJlcyB3aXRoIHRlbXAg Ki8KKwlhZGRkICQxLCAocjEsIHIwKQkvKiBBZGQgMSB0byBsb3cgYml0cyBv ZiB1cmVzICovCisJYmNjIExleGl0X18KKwlhZGRkICQxLCAocjMsIHIyKQkv KiBBZGQgMSB0byBoaWdoIGJpdCBvZiB1cmVzICovCisKK0xleGl0X186Cisj ICBpZmRlZiBfX0lEX1NIQVJFRF9MSUJfXworCXBvcAkkMiwgcjEyCisjICBl bmRpZgorCXBvcHJldCAkNCwgcjcsIHJhCisjZW5kaWYKKworI2lmZGVmIExf bHNocmRpMworCS50ZXh0CisJLmFsaWduIDQKKwkuZ2xvYmwgX19fbHNocmRp MworCitfX19sc2hyZGkzOgorCXB1c2gJJDMsIHI3CisKKwkvKiBMb2FkIHBh cmFtZXRlcnMgZnJvbSBzdGFjayBpbiB0aGlzIG9yZGVyICovCisJbW92dyBy MiwgcjYJCS8qIE51bWJlciBvZiBzaGlmdHMgKi8KKwlsb2FkZAk2KHNwKSwg KHIxLCByMCkJLyogTG93IGJpdHMgKi8KKwlsb2FkZAkxMChzcCksIChyMywg cjIpLyogSGlnaCBiaXRzICovCisKKwl4b3J3ICQtMSwgcjYJCS8qIEludmVy dCBudW1iZXIgb2Ygc2hpZnRzICovCisJYWRkdyAkMSwgcjYJCS8qIEFkZCAx IGJ5IG51bWJlciBvZiBzaGlmdHMgKi8KKworCW1vdncgcjYsIHI3CQkvKiBD b3B5IG51bWJlciBvZiBzaGlmdHMgKi8KKworCXRiaXQgJDE1LCByNgkJLyog VGVzdCBpZiBudW1iZXIgaXMgbmVnYXRpdmUgKi8KKwliZnMgTDIJCQkvKiBJ ZiBuZWdhdGl2ZSBqdW1wIHRvIEwyICovCisKKwltb3ZkIChyMSwgcjApLCAo cjksIHI4KQkvKiBDb3B5IGxvdyBiaXRzICovCisKKwlzdWJ3ICQzMiwgcjcJ CS8qIENhbGMgaG93IG1hbnkgYml0cyB3aWxsIG92ZXJmbG93ICovCisJLyog U2hpZnQgdGhlIHRlbXAgbG93IGJpdCB0byB0aGUgcmlnaHQgdG8gc2VlIHRo ZSBvdmVyZmxvd2luZyBiaXRzICAqLworCWxzaGQgcjcsIChyOSwgcjgpCQor CisJY21wdyAkMzIsIHI2CQkvKiBJZiBudW1iZXIgb2Ygc2hpZnRzIGlzIGhp Z2hlciB0aGFuIDMxICovCisJYmx0IEwxCQkJLyogU2hpZnQgYnkgbW92aW5n ICovCisKKwlsc2hkIHI2LCAocjMsIHIyKQkvKiBTaGlmdCBoaWdoIGJpdHMg Ki8KKwlsc2hkIHI2LCAocjEsIHIwKQkvKiBTaGlmdCBsb3cgYml0cyAqLwor CWFkZGQgKHI5LCByOCksIChyMywgcjIpCS8qIEFkZCBvdmVyZmxvdyB0byB0 aGUgaGlnaCBiaXRzICovCisJcG9wcmV0CSQzLCByNwkJLyogUmV0dXJuICov CisKK0wxOgltb3ZkICQwLCAocjEsIHIwKQkvKiBSZXNldCBsb3cgYml0ICov CisJbW92ZCAocjksIHI4KSwgKHIzLCByMikJLyogQWRkIHRoZSBvdmVyZmxv dyBmcm9tIHRoZSBsb3cgYml0ICovCisJcG9wcmV0CSQzLCByNwkJLyogUmV0 dXJuICovCisKK0wyOgltb3ZkIChyMywgcjIpLCAocjksIHI4KQkvKiBDb3B5 IGhpZ2ggYml0cyAqLworCisJYWRkdyAkMzIsIHI3CQkvKiBDYWxjIGhvdyBt YW55IGJpdHMgd2lsbCBvdmVyZmxvdyAqLworCS8qIFNoaWZ0IHRoZSB0ZW1w IGxvdyBiaXQgdG8gdGhlIGxlZnQgdG8gc2VlIHRoZSBvdmVyZmxvd2luZyBi aXRzICAqLworCWxzaGQgcjcsIChyOSwgcjgpCQorCisJY21wdyAkLTMyLCBy NgkJLyogSWYgbnVtYmVyIG9mIHNoaWZ0cyBpcyBsb3dlciB0aGFuIC0zMSAq LworCWJndCBMMwkJCS8qIFNoaWZ0IGJ5IG1vdmluZyAqLworCisJbHNoZCBy NiwgKHIxLCByMCkJLyogU2hpZnQgbG93IGJpdHMgKi8KKwlsc2hkIHI2LCAo cjMsIHIyKQkvKiBTaGlmdCBoaWdoIGJpdHMgKi8KKwlhZGRkIChyOSwgcjgp LCAocjEsIHIwKQkvKiBBZGQgb3ZlcmZsb3cgdG8gdGhlIGxvdyBiaXRzICov CisJcG9wcmV0CSQzLCByNwkJLyogUmV0dXJuICovCisJCitMMzoJbW92ZCAk MCwgKHIzLCByMikJLyogUmVzZXQgdGhlIGhpZ2ggYml0ICovCisJbW92ZCAo cjksIHI4KSwgKHIxLCByMCkJLyogQWRkIHRoZSBvdmVyZmxvdyBmcm9tIHRo ZSBoaWdoIGJpdCAqLworCXBvcHJldAkkMywgcjcJCS8qIFJldHVybiAqLwor I2VuZGlmCisKKyNpZmRlZiBMX21vZGRpMworCS50ZXh0CisJLmFsaWduIDQK KwkuZ2xvYmwgX19fbW9kZGkzCisKK19fX21vZGRpMzoKKwlwdXNoCSQ0LCBy NywgcmEKKworIyAgaWZkZWYgX19JRF9TSEFSRURfTElCX18KKwlwdXNoCSQy LCByMTIKKwltb3ZkCSRfX2N1cnJlbnRfc2hhcmVkX2xpYnJhcnlfcjEyX29m ZnNldF8sIChyMSxyMCkKKwlsb2FkZAlbcjEyXTAocjEscjApLCAocjEyKQor IyAgZW5kaWYKKworCS8qIFBhcmFtICMxIExvbmcgTG9uZyBsb3cgYml0IGZp cnN0ICovCisJbG9hZGQJMTIoc3ApLCAocjEsIHIwKQorCWxvYWRkCTE2KHNw KSwgKHIzLCByMikKKworCS8qIFBhcmFtICMyIExvbmcgTG9uZyBsb3cgYml0 IGZpcnN0ICovCisJbG9hZGQJMjAoc3ApLCAocjUsIHI0KQorCWxvYWRkCTI0 KHNwKSwgKHI3LCByNikKKwkKKwlzdWJkCSQxOCwgKHNwKQorCisJLyogU2V0 IG5lZyB0byAwICovCisJc3RvcncgJDAsIDE2KHNwKQorCQorCW1vdmQJJC0x LCAocjksIHI4KSAJLyogVGVtcCBzZXQgdG8gRkZGRkZGRkYgKi8KKworCS8q IENvbXBhcmUgaWYgcGFyYW0xIGlzIGdyZWF0ZXIgdGhhbiAwICovCQorCWNt cHcgJDAsIHIzCisJYmxlIEw0CisKKwkvKiBJbnZlcnQgcGFyYW0xIGFuZCBu ZWcgKi8KKwl4b3JkIChyOSwgcjgpLCAocjEsIHIwKQkvKiBYb3IgbG93IGJp dHMgb2YgcGFyYW0gMSB3aXRoIHRlbXAgKi8KKwl4b3JkIChyOSwgcjgpLCAo cjMsIHIyKQkvKiBYb3IgaGlnaCBiaXRzIG9mIHBhcmFtIDEgd2l0aCB0ZW1w ICovCisJYWRkZCAkMSwgKHIxLCByMCkJLyogQWRkIDEgdG8gbG93IGJpdHMg b2YgcGFyYW0gMSAqLworCXN0b3J3ICQxLCAxNihzcCkKKwliY2MgTDQJCQkv KiBJZiBubyBjYXJyeSBvY2N1cnJlZCBnbyB0byBMNCAqLworCWFkZGQgJDEs IChyMywgcjIpCS8qIEFkZCAxIHRvIGhpZ2ggYml0cyBvZiBwYXJhbSAxICov CisKK0w0OglzdG9yZCAocjEsIHIwKSwgMChzcCkKKwlzdG9yZCAocjMsIHIy KSwgNChzcCkKKwkKKwkvKiBDb21wYXJlIGlmIHBhcmFtMiBpcyBncmVhdGVy IHRoYW4gMCAqLwkKKwljbXB3ICQwLCByNworCWJsZSBMNQorCisJLyogSW52 ZXJ0IHBhcmFtMiBhbmQgbmVnICovCisJeG9yZCAocjksIHI4KSwgKHI1LCBy NCkJLyogWG9yIGxvdyBiaXRzIG9mIHBhcmFtIDIgd2l0aCB0ZW1wICovCisJ eG9yZCAocjksIHI4KSwgKHI3LCByNikJLyogWG9yIGhpZ2ggYml0cyBvZiBw YXJhbSAyIHdpdGggdGVtcCAqLworCWFkZGQgJDEsIChyNSwgcjQpCS8qIEFk ZCAxIHRvIGxvdyBiaXRzIG9mIHBhcmFtIDIgKi8KKwliY2MgTDUJCQkvKiBJ ZiBubyBjYXJyeSBvY2N1cnJlZCBnbyB0byBMNSAqLworCWFkZGQgJDEsIChy NywgcjYpCS8qIEFkZCAxIHRvIGhpZ2ggYml0cyBvZiBwYXJhbSAyICovCisK K0w1OglzdG9yZCAocjUsIHI0KSwgOChzcCkKKwlzdG9yZCAocjcsIHI2KSwg MTIoc3ApCisJbW92dyAkMSwgcjIKKworCS8qIENhbGwgdWRpdm1vZGRpMyAq LworI2lmZGVmIF9fUElDX18KKwlsb2FkZAlfX191ZGl2bW9kZGkzQGNHT1Qo cjEyKSwgKHIxLHIwKQorCWphbAkocjEscjApCisjZWxzZQorCWJhbCAocmEp LCBfX191ZGl2bW9kZGkzCisjZW5kaWYKKworCS8qIElmIChuZWcpICovCisJ bG9hZHcgMTYoc3ApLCByMTAJLyogTG9hZCBuZWcgZnJvbSBzdGFjayAqLwor CWFkZGQJJDE4LCAoc3ApCisJY21wdyAkMCwgcjEwCQkvKiBDb21wYXJlIDAg d2l0aCBuZWcgKi8KKwliZXEJTGV4aXRfXworCQorCS8qIE5lZyA9IC1OZWcg Ki8KKwl4b3JkIChyOSwgcjgpLCAocjEsIHIwKQkvKiBYb3IgbG93IGJpdHMg b2YgdXJlcyB3aXRoIHRlbXAgKi8KKwl4b3JkIChyOSwgcjgpLCAocjMsIHIy KQkvKiBYb3IgaGlnaCBiaXRzIG9mIHVyZXMgd2l0aCB0ZW1wICovCisJYWRk ZCAkMSwgKHIxLCByMCkJLyogQWRkIDEgdG8gbG93IGJpdHMgb2YgdXJlcyAq LworCWJjYwlMZXhpdF9fCisJYWRkZCAkMSwgKHIzLCByMikJLyogQWRkIDEg dG8gaGlnaCBiaXQgb2YgdXJlcyAqLworTGV4aXRfXzoKKyMgIGlmZGVmIF9f SURfU0hBUkVEX0xJQl9fCisJcG9wCSQyLCByMTIKKyMgIGVuZGlmCisJcG9w cmV0CSQ0LCByNywgcmEKKyNlbmRpZgorCisjaWZkZWYgTF9tdWxkaTMKKwku dGV4dAorCS5hbGlnbiA0CisJLmdsb2JsIF9fX211bGRpMworCitfX19tdWxk aTM6CisJcHVzaAkkMiwgcjEzCisJcHVzaAkkNywgcjcKKwkvKiBQYXJhbSAj MSBMb25nIExvbmcgbG93IGJpdCBmaXJzdCAqLworCWxvYWRkICAgMTgoc3Ap LCAocjEsIHIwKQorCWxvYWRkICAgMjIoc3ApLCAocjMsIHIyKQorCisJLyog UGFyYW0gIzIgTG9uZyBMb25nIGxvdyBiaXQgZmlyc3QgKi8KKwlsb2FkZCAg IDI2KHNwKSwgKHI1LCByNCkKKwlsb2FkZCAgIDMwKHNwKSwgKHI3LCByNikK KworCS8qIENsZWFyIHIxMywgcjEyICovCQorCW1vdmQgJDAsIChyMTIpCQor CW1vdmQgJDAsIChyMTMpCisKKwkvKiBTZXQgbmVnICovCisJbW92dyAkMCwg cjEwCisKKwkvKiBDb21wYXJlIGlmIHBhcmFtMSBpcyBncmVhdGVyIHRoYW4g MCAqLwkKKwljbXB3ICQwLCByMworCWJsZSBMMQorCisJLyogSW52ZXJ0IHBh cmFtMSBhbmQgbmVnICovCisJbW92ZCAkLTEsIChyOSwgcjgpIAkvKiBUZW1w IHNldCB0byBGRkZGRkZGRiAqLworCXhvcmQgKHI5LCByOCksIChyMSwgcjAp CS8qIFhvciBsb3cgYml0cyBvZiBwYXJhbSAxIHdpdGggdGVtcCAqLworCXhv cmQgKHI5LCByOCksIChyMywgcjIpCS8qIFhvciBoaWdoIGJpdHMgb2YgcGFy YW0gMSB3aXRoIHRlbXAgKi8KKwlhZGRkICQxLCAocjEsIHIwKQkvKiBBZGQg MSB0byBsb3cgYml0cyBvZiBwYXJhbSAxICovCisJeG9ydyAkMSwgcjEwCQkv KiBJbnZlcnQgbmVnICovCisJYmNjIEwxCQkJLyogSWYgbm8gY2Fycnkgb2Nj dXJyZWQgZ28gdG8gTDEgKi8KKwlhZGRkICQxLCAocjMsIHIyKQkvKiBBZGQg MSB0byBoaWdoIGJpdHMgb2YgcGFyYW0gMSAqLworCitMMToJLyogQ29tcGFy ZSBpZiBwYXJhbTIgaXMgZ3JlYXRlciB0aGFuIDAgKi8JCisJY21wdyAkMCwg cjcKKwlibGUgTDIJCisJCisJLyogSW52ZXJ0IHBhcmFtMiBhbmQgbmVnICov CisJbW92ZCAkLTEsIChyOSwgcjgpCS8qIFRlbXAgc2V0IHRvIEZGRkZGRkZG ICovCisJeG9yZCAocjksIHI4KSwgKHI1LCByNCkJLyogWG9yIGxvdyBiaXRz IG9mIHBhcmFtIDIgd2l0aCB0ZW1wICovCisJeG9yZCAocjksIHI4KSwgKHI3 LCByNikJLyogWG9yIGhpZ2ggYml0cyBvZiBwYXJhbSAyIHdpdGggdGVtcCAq LworCWFkZGQgJDEsIChyNSwgcjQpCS8qIEFkZCAxIHRvIGxvdyBiaXRzIG9m IHBhcmFtIDIgKi8KKwl4b3J3ICQxLCByMTAJCS8qIEludmVydCBuZWcgKi8K KwliY2MgTDIJCQkvKiBJZiBubyBjYXJyeSBvY2N1cnJlZCBnbyB0byBMMiAq LworCWFkZGQgJDEsIChyNywgcjYpCS8qIEFkZCAxIHRvIGhpZ2ggYml0cyBv ZiBwYXJhbSAyICovCisJCitMMjoJc3RvcncgcjEwLCAxOChzcCkJLyogU3Rv cmUgbmVnIHRvIHN0YWNrIHNvIHdlIGNhbiB1c2UgcjEwICovCisKKwkvKiBC KkQgKi8KKwkvKiBCbCpEbCAqLworCW1hY3V3IHIwLCByNCwgKHIxMikJLyog TXVsdGlwbHkgcjAgYW5kIHI0IGFuZCBhZGQgdG8gcjEyICovCisJCQorCS8q IEJoKkRsICovCisJbW92ZCAkMCwgKHI5LCByOCkJLyogQ2xlYXIgcjksIHI4 ICovCisJbWFjdXcgcjEsIHI0LCAocjksIHI4KQkvKiBNdWx0aXBseSBCaCpE bCBhbmQgYWRkIHJlc3VsdCB0byAocjksIHI4KSAqLworCW1vdncgcjksICBy MTAJCS8qIFNoaWZ0IGxlZnQ6IHI5IHRvIHIxMCAqLworCWxzaGQgJDE2LCAo cjksIHI4KQkvKiBTaGlmdCBsZWZ0OiByOCB0byByOSAqLworCW1vdncgJDAs IHIxMQkJLyogQ2xlYXIgcjExICovCisJYWRkZCAocjksIHI4KSwgKHIxMikJ LyogQWRkIChyOSwgcjgpIHRvIHIxMiAqLworCWJjYyBMMwkJCS8qIElmIG5v IGNhcnJ5IG9jY3VycmVkIGdvIHRvIEwzICovCisJYWRkZCAkMSwgKHIxMykJ CS8qIElmIGNhcnJ5IG9jY3VycmVkIGFkZCAxIHRvIHIxMyAqLworCitMMzoJ YWRkZCAocjExLCByMTApLCAocjEzKQkvKiBBZGQgKHIxMSwgcjEwKSB0byBy MTMgKi8KKwkJCisJLyogQmwqRGggKi8KKwltb3ZkICQwLCAocjksIHI4KQkv KiBDbGVhciAocjksIHI4KSAqLworCW1hY3V3IHIwLCByNSwgKHI5LCByOCkJ LyogTXVsdGlwbHkgcjAgYW5kIHI1IGFuZCBzdG9yIGluIChyOSwgcjgpICov CisJbW92dyByOSwgcjEwCQkvKiBTaGlmdCBsZWZ0OiByOSB0byByMTAgKi8K Kwlsc2hkICQxNiwgKHI5LCByOCkJLyogU2hpZnQgbGVmdDogcjggdG8gcjkg Ki8KKwlhZGRkIChyOSwgcjgpLCAocjEyKQkvKiBBZGQgKHI5LCByOCkgdG8g cjEyICovCisJYmNjIEw0CQkJLyogSWYgbm8gY2Fycnkgb2NjdXJyZWQgZ28g dG8gTDQgKi8gCisJYWRkZCAkMSwgKHIxMykJCS8qIElmIGNhcnJ5IG9jY3Vy cmVkIGFkZCAxIHRvIHIxMyAqLworCitMNDoJYWRkZCAocjExLCByMTApLCAo cjEzKQkvKiBBZGQgKHIxMSwgcjEwKSB0byByMTMgKi8KKworCS8qIEJoKkRo ICovCisJbW92ZCAkMCwgKHI5LCByOCkJLyogQ2xlYXIgKHI5LCByOCkgKi8K KwltYWN1dyByMSwgcjUsIChyOSwgcjgpCS8qIE11bHRpcGx5IHIxIGFuZCBy NSBhbmQgYWRkIHRvIHIxMyAqLworCWFkZGQgKHI5LCByOCksIChyMTMpCS8q IEFkZCAocjksIHI4KSB0byByZXN1bHQgKi8KKworCS8qIEEqRCAqLworCS8q IEFsKkRsICovCisJbW92ZCAkMCwgKHIxMSwgcjEwKQkvKiBDbGVhciAocjEx LCByMTApICovCisJbWFjdXcgcjIsIHI0LCAocjExLCByMTApLyogTXVsdGlw bHkgcjIgYW5kIHI0IGFuZCBhZGQgdG8gKHIxMSwgcjEwKSAqLworCQorCWFk ZGQgKHIxMyksIChyMTEsIHIxMCkJLyogQ29weSByMTMgdG8gKHIxMSwgcjEw KSAqLworCisJLyogQWwqRGggKi8KKwltb3ZkICQwLCAocjksIHI4KQkvKiBD bGVhciAocjksIHI4KSAqLworCW1hY3V3IHIyLCByNSwgKHI5LCByOCkJLyog TXVsdGlwbHkgcjIgYW5kIHI1IGFuZCBhZGQgdG8gKHI5LCByOCkgKi8KKwlh ZGR3IHI4LCByMTEJCS8qIEFkZCByOCB0byByMTEgKi8KKwkKKwkvKiBBaCpE bCAqLworCW11bHV3IHIzLCAocjUsIHI0KQkvKiBNdWx0aXBseSByMyBhbmQg cjQgYW5kIHN0b3IgaW4gKHI1LCByNCkgKi8KKwlhZGR3IHI0LCByMTEJCS8q IEFkZCByNCB0byByMTEgKi8KKworCS8qIEIqQyAqLworCS8qIEJsKkNsICov CisJbW92ZCAkMCwgKHI5LCByOCkJLyogQ2xlYXIgKHI5LCByOCkgKi8KKwlt YWN1dyByMCwgcjYsIChyOSwgcjgpCS8qIE11bHRpcGx5IHIwIGFuZCByNiBh bmQgYWRkIHRvIChyOSwgcjgpICovCisJYWRkZCAocjksIHI4KSwgKHIxMSwg cjEwKS8qIEFkZCAocjksIHI4KSB0byByZXN1bHQgKi8KKworCS8qIEJsKkNo ICovCisJbW92ZCAkMCwgKHI5LCByOCkJLyogQ2xlYXIgKHI5LCByOCkgKi8K KwltYWN1dyByMCwgcjcsIChyOSwgcjgpCS8qIE11bHRpcGx5IHIwIGFuZCBy NyBhbmQgYWRkIHRvIChyOSwgcjgpICovCisJYWRkdyByOCwgcjExCQkvKiBB ZGQgcjggdG8gcjExICovCisKKwlsb2FkdyAxOChzcCksIHI4CS8qIExvYWQg bmVnIGZyb20gc3RhY2sgKi8KKworCS8qIEJoKkNsICovCisJbXVsdXcgcjEs IChyNywgcjYpCS8qIE11bHRpcGx5IHIxIGFuZCByNiBhbmQgc3RvciBpbiAo cjcsIHI2KSAqLworCWFkZHcgcjYsIHIxMQkJLyogQWRkIHI2IHRvIHIxMSAq LworCitFMToJbW92ZCAocjExLCByMTApLCAocjMsIHIyKQorCW1vdmQgKHIx MiksIChyMSwgcjApCQorCisJLyogSWYgKG5lZykgKi8KKwljbXB3ICQwLCBy OAkJLyogQ29tcGFyZSAwIHdpdGggbmVnICovCisJYmVxCUxleGl0X18KKwkK KwkvKiBOZWcgPSAtTmVnICovCisJbW92ZCAkLTEsIChyOSwgcjgpIAkvKiBU ZW1wIHNldCB0byBGRkZGRkZGRiAqLworCXhvcmQgKHI5LCByOCksIChyMSwg cjApCS8qIFhvciBsb3cgYml0cyBvZiByZXN1bHQgd2l0aCB0ZW1wICovCisJ eG9yZCAocjksIHI4KSwgKHIzLCByMikgLyogWG9yIGhpZ2ggYml0cyBvZiBy ZXN1bHQgd2l0aCB0ZW1wICovCisJYWRkZCAkMSwgKHIxLCByMCkJLyogQWRk IDEgdG8gbG93IGJpdHMgb2YgcmVzdWx0ICovCisJYmNjCUxleGl0X18KKwlh ZGRkICQxLCAocjMsIHIyKQkvKiBBZGQgMSB0byBoaWdoIGJpdCBvZiByZXN1 bHQgKi8KK0xleGl0X186CisJcG9wCSQ3LCByNworCXBvcHJldAkkMiwgcjEz CisjZW5kaWYKKworI2lmZGVmIExfbmVnZGkyCisJLnRleHQKKwkuYWxpZ24g NAorCS5nbG9ibCBfX19uZWdkaTIKKworX19fbmVnZGkyOgorCS8qIExvYWQg cGFyYW1ldGVyIGZyb20gdGhlIHJlZ2lzdGVycyBpbiB0aGlzIG9yZGVyICov CisJbG9hZGQgMChzcCksIChyMSwgcjApCisJbG9hZGQgNChzcCksIChyMywg cjIpCisJCisJbW92ZCAkLTEsIChyNiwgcjUpCS8qIFNldCB0ZW1wIHRvIEZG RkZGRkZGICovCisJeG9yZCAocjYsIHI1KSwgKHIxLCByMCkJLyogWG9yIGxv dyBiaXRzIHdpdGggdGVtcCAqLworCXhvcmQgKHI2LCByNSksIChyMywgcjIp CS8qIFhvciBoaWdoIGJpdHMgd2l0aCB0ZW1wICovCisJYWRkZCAkMSwgKHIx LCByMCkJLyogQWRkIG9uZSAqLworCWpjYyAocmEpCisJYWRkZCAkMSwgKHIz LCByMikJLyogQWRkIHRoZSBjYXJyeSB0byB0aGUgaGlnaCBiaXRzICovCisJ anVtcCAocmEpCisjZW5kaWYKKworI2lmZGVmIExfdWRpdmRpMworCS50ZXh0 CisJLmFsaWduIDQKKwkuZ2xvYmwgX19fdWRpdmRpMworCitfX191ZGl2ZGkz OgorCW1vdncgJDAsIHIyCisJYnIgX19fdWRpdm1vZGRpMworI2VuZGlmCisK KyNpZmRlZiBMX3VkaXZtb2RkaTMKKwkudGV4dAorCS5hbGlnbiA0CisJLmds b2JsIF9fX3VkaXZtb2RkaTMKKworX19fdWRpdm1vZGRpMzoKKwlwdXNoCSQy LCByMTMKKwlwdXNoCSQ3LCByNworCisJLyogUGFyYW0gIzEgTG9uZyBMb25n IGxvdyBiaXQgZmlyc3QgKi8KKwlsb2FkZAkxOChzcCksIChyMSwgcjApCisJ c3RvcncJcjIsIDE4KHNwKQkvKiBTdG9yZSBtb2R1bG8gb24gc3RhY2sgKi8K Kwlsb2FkZAkyMihzcCksIChyMywgcjIpCisKKwkvKiBQYXJhbSAjMiBMb25n IExvbmcgbG93IGJpdCBmaXJzdCAqLworCWxvYWRkCTI2KHNwKSwgKHI1LCBy NCkKKwlsb2FkZAkzMChzcCksIChyNywgcjYpCisKKwkvKiBTZXQgdXJlcyB0 byAwICovCisJbW92ZCAkMCwgKHIxMykKKwltb3ZkICQwLCAocjEyKQorCQor CWNtcGQgKHIxMiksIChyNSwgcjQpCisJYmVxIExFCisKK0w1Ogltb3ZkICQx LCAocjksIHI4KQkvKiBTdG9yZSAxIGluIGxvdyBiaXRzIGZyb20gYml0ICov CisJbW92ZCAkMCwgKHIxMSwgcjEwKQkvKiBTdG9yZSAwIGluIGhpZ2ggYml0 cyBmcm9tIGJpdCAqLworCQorTDY6CS8qIFdoaWxlIChkZW4gPCBudW0gJiYg KCFkZW4gJiAoMUxMPDw2MykpKSAqLworCS8qIENvbXBhcmUgaGlnaCBiaXRz IGZyb20gcGFyYW0gMSBhbmQgcGFyYW0gMiAqLworCWNtcGQgKHI3LCByNiks IChyMywgcjIpCQorCWJoaSBMMTAJCQkvKiBJZiBwYXJhbSAyIGlzIGdyZWF0 ZXIgZ28gdG8gTDEwICovCisJYm5lIEw4CQkJLyogSWYgcGFyYW0gMSBpcyBn cmVhdGVyIGdvIHRvIEw4ICovCisJY21wZCAocjUsIHI0KSwgKHIxLCByMCkJ LyogQ29tcGFyZSBsb3cgYml0cyBmcm9tIHBhcmFtIDEgYW5kIHBhcmFtIDIg Ki8KKwkvKiAgSWYgcGFyYW0gMiBpcyBncmVhdGVyIG9yIHRoZSBzYW1lIGdv IHRvIEwxICovCisJYmhzIEwxMAkJCSAKKworTDg6CS8qIENoZWNrIGlmIG1v c3Qgc2lnbmlmaWNhbnQgYml0IG9mIHBhcmFtIDIgaXMgc2V0ICovCisJdGJp dCAkMTUsIHI3CQkKKwliZnMgTDEwCQkJLyogSWYgUFNSIGlzIHNldCBnbyB0 byBMMTAgKi8KKworCS8qIFNoaWZ0IGJpdCAqLworCWxzaGQgJDEsIChyMTEs IHIxMCkJLyogU2hpZnQgbGVmdDogaGlnaCBiaXRzIG9mIGJpdCAqLyAKKwkv KiBDaGVjayBpZiBtb3N0IHNpZ25pZmljYW50IGJpdCBvZiBiaXQgaXMgc2V0 ICovCisJdGJpdCAkMTUsIHI5CQkKKwlsc2hkICQxLCAocjksIHI4KQkvKiBT aGlmdCBsZWZ0OiBsb3cgYml0cyBvZiBiaXQgKi8KKwliZnMgTDI4CQkJLyog SWYgUFNSIGlzIHNldCBnbyB0byBMMjggKi8KKworTDk6CS8qIFNoaWZ0IGIg Ki8KKwlsc2hkICQxLCAocjcsIHI2KQkvKiBTaGlmdCBsZWZ0OiBoaWdoIGJp dHMgb2YgcGFyYW0gMiAqLworCS8qIENoZWNrIGlmIG1vc3Qgc2lnbmlmaWNh bnQgYml0IG9mIHBhcmFtIDIgaXMgc2V0ICovCisJdGJpdCAkMTUsIHI1CQkK Kwlsc2hkICQxLCAocjUsIHI0KQkvKiBTaGlmdCBsZWZ0OiBsb3cgYml0cyBv ZiBwYXJhbSAyICovCisJYmZjIEw2CQkJLyogSWYgUFNSIGlzIHNldCBnbyB0 byBMNiAqLworCWFkZHcgJDEsIHI2CQkvKiBBZGQgMSB0byB0aGUgaGlnaGVz dCBiaXRzIG9mIGIgKi8KKwliciBMNgkJCS8qIEdvIHRvIEw2ICovCisJCitM MTA6CS8qIFdoaWxlIChiaXQpICovCisJY21wZCAkMCwgKHIxMSwgcjEwKQkK KwlibmUgTDExCisJY21wZCAkMCwgKHI5LCByOCkKKwliZXEgRTEKKworTDEx OgkvKiBJZiAobnVtID49IGRlbikgKi8KKwljbXBkIChyMywgcjIpLCAocjcs IHI2KQkvKiBDb21wYXJlIGhpZ2ggYml0cyBvZiBwYXJhbSAxIGFuZCBwYXJh bSAyICovCisJYmxvIEwxNQkJCS8qIElmIHBhcmFtIDEgbG93ZXIgdGhhbiBw YXJhbSAyIGdvIHRvIEwxNSAqLworCWJuZSBMMTIJCQkvKiBJZiBub3QgZXF1 YWwgZ28gdG8gTDEyICovCQorCWNtcGQgKHIxLCByMCksIChyNSwgcjQpCS8q IENvbXBhcmUgbG93IGJpdHMgb2YgcGFyYW0gMSBhbmQgcGFyYW0gMiAqLwor CWJsbyBMMTUJCQkvKiBJZiBwYXJhbSAxIGxvd2VyIHRoYW4gcGFyYW0gMiBn byB0byBMMTUgKi8KKworTDEyOgkvKiBVcmVzIHw9IGJpdCAqLworCW9yZCAo cjExLCByMTApLCAocjEzKQorCW9yZCAocjksIHI4KSwgKHIxMikJCisKKwkv KiBOdW0gLT0gZGVuICovCisJc3ViZCAocjcsIHI2KSwgKHIzLCByMikgLyog U3VidHJhY3QgaGlnaGVzdCAzMiBiaXRzIGZyb20gZWFjaCBvdGhlciAqLwor CXN1YmQgKHI1LCByNCksIChyMSwgcjApCS8qIFN1YnRyYWN0IGxvd2VzdCAz MiBiaXRzIGZyb20gZWFjaCBvdGhlciAqLworCWJjYyBMMTUJCQkvKiBJZiBu byBjYXJyeSBvY2N1cnJlZCBnbyB0byBMMTUgKi8KKwlzdWJkICQxLCAocjMs IHIyKQkvKiBTdWJ0cmFjdCB0aGUgY2FycnkgKi8KKworCQorTDE1OgkvKiBT aGlmdCBiaXQgdG8gdGhlIHJpZ2h0ICovCisJbHNoZCAkLTEsIChyOSwgcjgp CS8qIFNoaWZ0IHJpZ2h0OiBsb3cgYml0cyBvZiBiaXQgKi8KKwkvKiBDaGVj ayBpZiBsZWFzdCBzaWduaWZpY2FudCBiaXQgb2YgaGlnaCBiaXRzIGlzIHNl dCAqLworCXRiaXQgJDAsIHIxMAkJCisJbHNoZCAkLTEsIChyMTEsIHIxMCkJ LyogU2hpZnQgcmlnaHQ6IGhpZ2ggYml0cyBvZiBiaXQgKi8KKwliZnMgTDE4 CQkJLyogSWYgUFNSIGlzIHNldCBnbyB0byBMMTggKi8KKworTDE3OgkvKiBT aGlmdCBwYXJhbSMyIHRvIHRoZSByaWdodCAqLworCWxzaGQgJC0xLCAocjUs IHI0KQkvKiBTaGlmdCByaWdodDogbG93IGJpdHMgb2YgcGFyYW0gMiAqLwor CS8qIENoZWNrIGlmIGxlYXN0IHNpZ25pZmljYW50IGJpdCBvZiBoaWdoIGJp dHMgaXMgc2V0ICovCisJdGJpdCAkMCwgcjYJCQorCWxzaGQgJC0xLCAocjcs IHI2KQkvKiBTaGlmdCByaWdodDogaGlnaCBiaXRzIG9mIHBhcmFtIDIgKi8K KwliZmMgTDEwCQkJLyogSWYgUFNSIGlzIG5vdCBzZXQgZ28gdG8gTDEwICov CisJLyogT3Igd2l0aCAweDgwMDAgdG8gc2V0IG1vc3Qgc2lnbmlmaWNhbnQg Yml0ICovCisJb3J3ICQzMjc2OCwgcjUJCQorCWJyIEwxMAkJCS8qIEdvIHRv IEwxMCAqLworCisKK0wxODoJLyogT3Igd2l0aCAweDgwMDAgdG8gc2V0IG1v c3Qgc2lnbmlmaWNhbnQgYml0ICovCisJb3J3ICQzMjc2OCwgcjkJCQorCWJy IEwxNworCisKK0wyODogCS8qIExlZnQgc2hpZnQgYml0ICovCisJYWRkdyAk MSwgcjEwCQkvKiBBZGQgMSB0byBoaWdoZXN0IGJpdHMgb2YgYml0ICovCisJ YnIgTDkJCQkvKiBHbyB0byBMOSAqLworCitMRToJY21wZCAocjEyKSwgKHI3 LCByNikKKwlibmUgTDUKKwlleGNwIGR2egorCWJyCUxleGl0X18KKworRTE6 CWxvYWR3CTE4KHNwKSwgcjQKKwljbXB3ICQwLCByNAorCWJuZQlMZXhpdF9f CisKKwkvKiBSZXR1cm4gcmVzdWx0ICovCisJbW92ZCAocjEyKSwgKHIxLCBy MCkKKwltb3ZkIChyMTMpLCAocjMsIHIyKQorTGV4aXRfXzoKKwlwb3AJJDcs IHI3CisJcG9wcmV0CSQyLCByMTMKKyNlbmRpZgorCisjaWZkZWYgTF91bW9k ZGkzCisJLnRleHQKKwkuYWxpZ24gNAorCS5nbG9ibCBfX191bW9kZGkzCisK K19fX3Vtb2RkaTM6CisJbW92dyAkMSwgcjIKKwliciBfX191ZGl2bW9kZGkz CisjZW5kaWYKKwpkaWZmIC11cHJOIC14Jyoub3JpZycgLXgnKi5yZWonIG9y aWcvZ2NjL2NvbmZpZy9jcjE2L2NyMTYubWQgbW9kL2djYy9jb25maWcvY3Ix Ni9jcjE2Lm1kCi0tLSBvcmlnL2djYy9jb25maWcvY3IxNi9jcjE2Lm1kCTE5 NzAtMDEtMDEgMDU6MzA6MDAuMDAwMDAwMDAwICswNTMwCisrKyBtb2QvZ2Nj L2NvbmZpZy9jcjE2L2NyMTYubWQJMjAxMS0wNC0wOCAxNzo1NDoxMC4wMDAw MDAwMDAgKzA1MzAKQEAgLTAsMCArMSwxMjg5IEBACis7OyBHQ0MgbWFjaGlu ZSBkZXNjcmlwdGlvbiBmb3IgQ1IxNi4KKzs7IENvcHlyaWdodCAoQykgMjAx MCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKzs7IENvbnRyaWJ1 dGVkIGJ5IEtQSVQgQ3VtbWlucyBJbmZvc3lzdGVtcyBMaW1pdGVkLgorCis7 OyBUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKKzs7IEdDQyBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k aWZ5IGl0Cis7OyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorOzsgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0 IHlvdXIgb3B0aW9uKQorOzsgYW55IGxhdGVyIHZlcnNpb24uCisKKzs7IEdD QyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLCBidXQgV0lUSE9VVAorOzsgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZ Cis7OyBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUgR05VIEdlbmVyYWwgUHVibGljCis7OyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCisKKzs7IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv cHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCis7OyBhbG9u ZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNl ZQorOzsgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAKKworOzsg IFJlZ2lzdGVyIG51bWJlcnMKKyhkZWZpbmVfY29uc3RhbnRzCisgIFsoU1Bf UkVHTlVNIDE1KTsgU3RhY2sgcG9pbnRlcgorICAgKFJBX1JFR05VTSAxNCk7 IFJldHVybiBhZGRyZXNzCisgIF0KKykKKworOzsgUHJlZGljYXRlcyAmIENv bnN0cmFpbnRzCisoaW5jbHVkZSAicHJlZGljYXRlcy5tZCIpCisoaW5jbHVk ZSAiY29uc3RyYWludHMubWQiKQorCis7OyBVTlNQRUMgdXNhZ2UKKyhkZWZp bmVfY29uc3RhbnRzCisgIFsoVU5TUEVDX1BJQ19BRERSICAgICAgICAgICAg IDApCisgICAoVU5TUEVDX1BJQ19MT0FEX0FERFIgICAgICAgIDEpCisgICAo VU5TUEVDX0xJQlJBUllfT0ZGU0VUICAgICAgIDIpCisgICAoVU5TUEVDX1NI X0xJQl9QVVNIX1IxMiAgICAgIDMpCisgICAoVU5TUEVDX1NIX0xJQl9QT1Bf UjEyICAgICAgIDQpCisgICAoVU5TUEVDX1JFVFVSTl9BRERSICAgICAgICAg IDUpCisgIF0KKykKKworOzsgQXR0cmlidXRlcworKGRlZmluZV9hdHRyICJs ZW5ndGgiICIiIChjb25zdF9pbnQgMikpCisKKyhkZWZpbmVfYXNtX2F0dHJp YnV0ZXMKKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiMiIpXQorKQorCis7OyAg TW9kZSBNYWNybyBEZWZpbml0aW9ucworKGRlZmluZV9tb2RlX2l0ZXJhdG9y IENSMTZJTSBbUUkgSEkgU0ldKQorKGRlZmluZV9tb2RlX2l0ZXJhdG9yIExP TkcgICBbU0kgU0ZdKQorKGRlZmluZV9tb2RlX2l0ZXJhdG9yIEFMTE1URCBb UUkgSEkgU0kgU0YgREkgREZdKQorKGRlZmluZV9tb2RlX2l0ZXJhdG9yIERP VUJMRSBbREkgREZdKQorKGRlZmluZV9tb2RlX2l0ZXJhdG9yIFNIT1JUICBb UUkgSEldKQorKGRlZmluZV9tb2RlX2F0dHIgdElzYSAgICAgIFsoUUkgImIi KSAoSEkgInciKSAoU0kgImQiKSAoU0YgImQiKV0pCisoZGVmaW5lX21vZGVf YXR0ciBsSW1tQXJpdGggIFsoUUkgIjQiKSAoSEkgIjQiKSAoU0kgIjYiKSAo U0YgIjYiKV0pCisoZGVmaW5lX21vZGVfYXR0ciBsSW1tQXJpdGhEIFsoUUkg IjQiKSAoSEkgIjQiKSAoU0kgIjYiKSAoU0YgIjYiKSAoREkgIjEyIikgKERG ICIxMiIpXSkKKyhkZWZpbmVfbW9kZV9hdHRyIGlGICAgICAgICBbKFFJICJp IikgKEhJICJpIikgKFNJICJpIikgKFNGICJGIildKQorKGRlZmluZV9tb2Rl X2F0dHIgaUZEICAgICAgIFsoREkgImkiKSAoREYgIkYiKV0pCisoZGVmaW5l X21vZGVfYXR0ciBMTCAgICAgICAgWyhRSSAiTCIpIChISSAiTCIpXSkKKyhk ZWZpbmVfbW9kZV9hdHRyIHNoSW1tQml0cwlbKFFJICIzIikgKEhJICI0Iikg KFNJICI1IildKQorCis7IEluIFFJIG1vZGUgd2UgcHVzaCAyIGJ5dGVzIGlu c3RlYWQgb2YgMSBieXRlLgorKGRlZmluZV9tb2RlX2F0dHIgcHVzaENuc3Ry IFsoUUkgIlgiKSAoSEkgIjwiKSAoU0kgIjwiKSAoU0YgIjwiKSAoREkgIjwi KSAoREYgIjwiKV0pCis7IHRwdXNoIHdpbGwgYmUgdXNlZCB0byBnZW5lcmF0 ZSB0aGUgJ251bWJlciBvZiByZWdpc3RlcnMgdG8gcHVzaCcgaW4gdGhlIAor OyBwdXNoIGluc3RydWN0aW9uLgorKGRlZmluZV9tb2RlX2F0dHIgdHB1c2gg WyhRSSAiMSIpIChISSAiMSIpIChTSSAiMiIpIChTRiAiMiIpIChESSAiNCIp IChERiAiNCIpXSkKKworOzsgIENvZGUgTWFjcm8gRGVmaW5pdGlvbnMKKyhk ZWZpbmVfY29kZV9pdGVyYXRvciBzel94dG5kIFsgc2lnbl9leHRlbmQgICAg ICAgemVyb19leHRlbmRdKQorKGRlZmluZV9jb2RlX2F0dHIgIHNJc2EgICAg WyhzaWduX2V4dGVuZCAiIikgICh6ZXJvX2V4dGVuZCAidSIpXSkKKyhkZWZp bmVfY29kZV9hdHRyICBzUGF0ICAgIFsoc2lnbl9leHRlbmQgInMiKSAoemVy b19leHRlbmQgInUiKV0pCisoZGVmaW5lX2NvZGVfYXR0ciAgc3pQYXQgICBb KHNpZ25fZXh0ZW5kICIiKSAgKHplcm9fZXh0ZW5kICJ6ZXJvXyIpXSkKKyhk ZWZpbmVfY29kZV9hdHRyICBzeklzYSAgIFsoc2lnbl9leHRlbmQgIngiKSAo emVyb19leHRlbmQgInoiKV0pCisoZGVmaW5lX2NvZGVfaXRlcmF0b3IgYW55 X2NvbmQgW2VxIG5lIGd0IGd0dSBsdCBsdHUgZ2UgZ2V1IGxlIGxldV0pCisK Kzs7IEFyaXRobWV0aWMgSW5zdHVjdGlvbiAgUGF0dGVybnMKKzs7Cis7OyBB ZGRpdGlvbiBpbnNucy4KKyhkZWZpbmVfZXhwYW5kICJhZGRkaTMiCisgIFso c2V0IChtYXRjaF9vcGVyYW5kOkRJIDAgInJlZ2lzdGVyX29wZXJhbmQiICIi KQorCShwbHVzOkRJIChtYXRjaF9vcGVyYW5kOkRJIDEgInJlZ2lzdGVyX29w ZXJhbmQiICIiKQorCQkgKG1hdGNoX29wZXJhbmQ6REkgMiAibm9ubWVtb3J5 X29wZXJhbmQiICIiKSkpXQorICAiIgorICB7CisgICAgaWYgKChHRVRfQ09E RSAob3BlcmFuZHNbMl0pICE9IFJFRykpCisgICAgICB7CisJb3BlcmFuZHNb Ml0gPSBmb3JjZV9yZWcgKERJbW9kZSwgb3BlcmFuZHNbMl0pOworICAgICAg fQorICB9CispCisKKyhkZWZpbmVfaW5zbiAiYWRkZGkzX2luc24iCisgIFso c2V0IChtYXRjaF9vcGVyYW5kOkRJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9 ciIpCisJKHBsdXM6REkgKG1hdGNoX29wZXJhbmQ6REkgMSAicmVnaXN0ZXJf b3BlcmFuZCIgIiUwIikKKwkJIChtYXRjaF9vcGVyYW5kOkRJIDIgInJlZ2lz dGVyX29wZXJhbmQiICJyIikpKV0KKyAgIiIKKyAgIioKKyAgICByZXR1cm4g Y3IxNl9lbWl0X2FkZF9zdWJfZGkgKG9wZXJhbmRzLCAwKTsKKyAgIgorKQor CisoZGVmaW5lX2luc24gImFkZHNpMyIKKyAgWyhzZXQgKG1hdGNoX29wZXJh bmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yLHIscixyLHIiKQorCShw bHVzOlNJIChtYXRjaF9vcGVyYW5kOlNJIDEgInJlZ2lzdGVyX29wZXJhbmQi ICIlMCwwLDAsMCwwIikKKwkJIChtYXRjaF9vcGVyYW5kOlNJIDIgInJlZ19z aV9pbnRfb3BlcmFuZCIgInIsTSxOLE8sUCIpKSldCisgICIiCisgICJhZGRk XHQlMiwgJTAiCisgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjIsMiw0LDQsNiIp XQorKQorCisoZGVmaW5lX2luc24gImFkZGhpMyIKKyAgWyhzZXQgKG1hdGNo X29wZXJhbmQ6SEkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1jLGMsYyIpCisJ KHBsdXM6SEkgKG1hdGNoX29wZXJhbmQ6SEkgMSAicmVnaXN0ZXJfb3BlcmFu ZCIgIiUwLDAsMCIpCisJCSAobWF0Y2hfb3BlcmFuZDpISSAyICJyZWdfaGlf aW50X29wZXJhbmQiICJjLE0sTiIpKSldCisgICIiCisgICJhZGR3XHQlMiwg JTAiCisgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjIsMiw0IildCispCisKKyhk ZWZpbmVfaW5zbiAiYWRkcWkzIgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpR SSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPWMsYyIpCisJKHBsdXM6UUkgKG1h dGNoX29wZXJhbmQ6UUkgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIiUwLDAiKQor CQkgKG1hdGNoX29wZXJhbmQ6UUkgMiAicmVnX3FpX2ludF9vcGVyYW5kIiAi YyxNIikpKV0KKyAgIiIKKyAgImFkZGJcdCUyLCAlMCIKKyAgWyhzZXRfYXR0 ciAibGVuZ3RoIiAiMiwyIildCispCisKKzs7Cis7OyAgU3VidHJhY3QgSW5z dHJ1Y3Rpb25zCisoZGVmaW5lX2V4cGFuZCAic3ViZGkzIgorICBbKHNldCAo bWF0Y2hfb3BlcmFuZDpESSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikKKwko bWludXM6REkgKG1hdGNoX29wZXJhbmQ6REkgMSAicmVnaXN0ZXJfb3BlcmFu ZCIgIiIpCisJCSAgKG1hdGNoX29wZXJhbmQ6REkgMiAibm9ubWVtb3J5X29w ZXJhbmQiICIiKSkpXQorICAiIgorICB7CisgICAgaWYgKChHRVRfQ09ERSAo b3BlcmFuZHNbMl0pICE9IFJFRykpCisgICAgICB7CisJb3BlcmFuZHNbMl0g PSBmb3JjZV9yZWcgKERJbW9kZSwgb3BlcmFuZHNbMl0pOworICAgICAgfQor ICB9CispCisKKyhkZWZpbmVfaW5zbiAic3ViZGkzX2luc24iCisgIFsoc2V0 IChtYXRjaF9vcGVyYW5kOkRJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9ciIp CisJKG1pbnVzOkRJIChtYXRjaF9vcGVyYW5kOkRJIDEgInJlZ2lzdGVyX29w ZXJhbmQiICIwIikKKwkJICAobWF0Y2hfb3BlcmFuZDpESSAyICJyZWdpc3Rl cl9vcGVyYW5kIiAiciIpKSldCisgICIiCisgICIqCisgICAgcmV0dXJuIGNy MTZfZW1pdF9hZGRfc3ViX2RpIChvcGVyYW5kcywgMSk7CisgICIKKykKKwor KGRlZmluZV9pbnNuICJzdWJzaTMiCisgIFsoc2V0IChtYXRjaF9vcGVyYW5k OlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9cixyIikKKwkobWludXM6U0kg KG1hdGNoX29wZXJhbmQ6U0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIjAsMCIp CisJCSAgKG1hdGNoX29wZXJhbmQ6U0kgMiAicmVnX3NpX2ludF9vcGVyYW5k IiAicixQIikpKV0KKyAgIiIKKyAgInN1YmRcdCUyLCAlMCIKKyAgWyhzZXRf YXR0ciAibGVuZ3RoIiAiNCw2IildCispCisKKyhkZWZpbmVfaW5zbiAic3Vi aGkzIgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpISSAwICJyZWdpc3Rlcl9v cGVyYW5kIiAiPWMsYyxjIikKKwkobWludXM6SEkgKG1hdGNoX29wZXJhbmQ6 SEkgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIjAsMCwwIikKKwkJICAobWF0Y2hf b3BlcmFuZDpISSAyICJyZWdfaGlfaW50X29wZXJhbmQiICJjLE0sTiIpKSld CisgICIiCisgICJzdWJ3XHQlMiwgJTAiCisgIFsoc2V0X2F0dHIgImxlbmd0 aCIgIjIsMiw0IildCispCisKKyhkZWZpbmVfaW5zbiAic3VicWkzIgorICBb KHNldCAobWF0Y2hfb3BlcmFuZDpRSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAi PWMsYyIpCisJKG1pbnVzOlFJIChtYXRjaF9vcGVyYW5kOlFJIDEgInJlZ2lz dGVyX29wZXJhbmQiICIwLDAiKQorCQkgIChtYXRjaF9vcGVyYW5kOlFJIDIg InJlZ19xaV9pbnRfb3BlcmFuZCIgImMsTSIpKSldCisgICIiCisgICJzdWJi XHQlMiwgJTAiCisgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjIsMiIpXQorKQor Cis7OworOzsgIE11bHRpcGx5IGFuZCBBY2N1bXVsYXRlIEluc3RydWN0aW9u cworKGRlZmluZV9pbnNuICJzbWFjaGlzaTMiCisgIFsoc2V0IChtYXRjaF9v cGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9ciIpCisJKHBsdXM6 U0kKKwkgKG11bHQ6U0kgKHNpZ25fZXh0ZW5kOlNJIChtYXRjaF9vcGVyYW5k OkhJIDEgInJlZ2lzdGVyX29wZXJhbmQiICJyIikpCisJCSAgKHNpZ25fZXh0 ZW5kOlNJIChtYXRjaF9vcGVyYW5kOkhJIDIgInJlZ2lzdGVyX29wZXJhbmQi ICJyIikpKQorCSAobWF0Y2hfb3BlcmFuZDpTSSAzICJyZWdpc3Rlcl9vcGVy YW5kIiAiMCIpKSldCisgICJUQVJHRVRfTUFDIgorICAibWFjc3dcdCUxLCAl MiwgJTAiCisgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjIiKV0KKykKKworKGRl ZmluZV9pbnNuICJ1bWFjaGlzaTMiCisgIFsoc2V0IChtYXRjaF9vcGVyYW5k OlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9ciIpCisJKHBsdXM6U0kKKwkg KG11bHQ6U0kgKHplcm9fZXh0ZW5kOlNJIChtYXRjaF9vcGVyYW5kOkhJIDEg InJlZ2lzdGVyX29wZXJhbmQiICJyIikpCisJCSAgKHplcm9fZXh0ZW5kOlNJ IChtYXRjaF9vcGVyYW5kOkhJIDIgInJlZ2lzdGVyX29wZXJhbmQiICJyIikp KQorCSAobWF0Y2hfb3BlcmFuZDpTSSAzICJyZWdpc3Rlcl9vcGVyYW5kIiAi MCIpKSldCisgICJUQVJHRVRfTUFDIgorICAibWFjdXdcdCUxLCAlMiwgJTAi CisgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjIiKV0KKykKKworOzsKKzs7ICBN dWx0aXBseSBJbnN0cnVjdGlvbnMKKyhkZWZpbmVfaW5zbiAibXVsaGkzIgor ICBbKHNldCAobWF0Y2hfb3BlcmFuZDpISSAwICJyZWdpc3Rlcl9vcGVyYW5k IiAiPWMsYyxjIikKKwkobXVsdDpISSAobWF0Y2hfb3BlcmFuZDpISSAxICJy ZWdpc3Rlcl9vcGVyYW5kIiAiJTAsMCwwIikKKwkJIChtYXRjaF9vcGVyYW5k OkhJIDIgInJlZ19vcl9pbnRfb3BlcmFuZCIgImMsTSxOIikpKV0KKyAgIiIK KyAgIm11bHdcdCUyLCAlMCIKKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiMiwy LDQiKV0KKykKKworKGRlZmluZV9pbnNuICJtdWxxaWhpMyIKKyAgWyhzZXQg KG1hdGNoX29wZXJhbmQ6SEkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1jIikK KwkobXVsdDpISSAoc2lnbl9leHRlbmQ6SEkgKG1hdGNoX29wZXJhbmQ6UUkg MSAicmVnaXN0ZXJfb3BlcmFuZCIgIiUwIikpCisJCSAoc2lnbl9leHRlbmQ6 SEkgKG1hdGNoX29wZXJhbmQ6UUkgMiAicmVnaXN0ZXJfb3BlcmFuZCIgImMi KSkpKV0KKyAgIiIKKyAgIm11bHNiXHQlMiwgJTAiCisgIFsoc2V0X2F0dHIg Imxlbmd0aCIgIjIiKV0KKykKKworOzsKKzs7ICBCaXQgU2V0L0NsZWFyIElu c3RydWN0aW9ucworKGRlZmluZV9leHBhbmQgImluc3YiCisgIFsoc2V0ICh6 ZXJvX2V4dHJhY3QgKG1hdGNoX29wZXJhbmQgMCAibWVtb3J5X29wZXJhbmQi ICIiKQorCQkgICAgICAobWF0Y2hfb3BlcmFuZCAxICJpbW1lZGlhdGVfb3Bl cmFuZCIgIiIpCisJCSAgICAgIChtYXRjaF9vcGVyYW5kIDIgImltbWVkaWF0 ZV9vcGVyYW5kIiAiIikpCisJKG1hdGNoX29wZXJhbmQgMyAiaW1tZWRpYXRl X29wZXJhbmQiICIiKSldCisgICJUQVJHRVRfQklUX09QUyIKKyAgeworICAg IGlmIChJTlRWQUwgKG9wZXJhbmRzWzFdKSAhPSAxKQorICAgICAgRkFJTDsK KyAgICBpZiAoSU5UVkFMIChvcGVyYW5kc1syXSkgPCAwIHx8IElOVFZBTCAo b3BlcmFuZHNbMl0pID4gMTUpCisgICAgICBGQUlMOworICAgIGlmIChJTlRW QUwgKG9wZXJhbmRzWzNdKSA9PSAxKQorICAgICAgeworCWlmIChHRVRfTU9E RSAob3BlcmFuZHNbMF0pID09IFFJbW9kZSkKKwkgIHsKKwkgICAgZW1pdF9p bnNuIChnZW5fc2V0X2JpdHFpIChvcGVyYW5kc1swXSwgb3BlcmFuZHNbMl0p KTsKKwkgICAgRE9ORTsKKwkgIH0KKwllbHNlIGlmIChHRVRfTU9ERSAob3Bl cmFuZHNbMF0pID09IEhJbW9kZSkKKwkgIHsKKwkgICAgZW1pdF9pbnNuIChn ZW5fc2V0X2JpdGhpIChvcGVyYW5kc1swXSwgb3BlcmFuZHNbMl0pKTsKKwkg ICAgRE9ORTsKKwkgIH0KKyAgICAgIH0KKyAgICBpZiAoSU5UVkFMIChvcGVy YW5kc1szXSkgPT0gMCkKKyAgICAgIHsKKwlpZiAoR0VUX01PREUgKG9wZXJh bmRzWzBdKSA9PSBRSW1vZGUpCisJICB7CisJICAgIGVtaXRfaW5zbiAoZ2Vu X2Nscl9iaXRxaSAob3BlcmFuZHNbMF0sIG9wZXJhbmRzWzJdKSk7CisJICAg IERPTkU7CisJICB9CisJZWxzZSBpZiAoR0VUX01PREUgKG9wZXJhbmRzWzBd KSA9PSBISW1vZGUpCisJICB7CisJICAgIGVtaXRfaW5zbiAoZ2VuX2Nscl9i aXRoaSAob3BlcmFuZHNbMF0sIG9wZXJhbmRzWzJdKSk7CisJICAgIERPTkU7 CisJICB9CisgICAgICB9CisgIH0KKykKKworKGRlZmluZV9pbnNuICJzZXRf Yml0PG1vZGU+IgorICBbKHNldCAoemVyb19leHRyYWN0OlNIT1JUIChtYXRj aF9vcGVyYW5kOlNIT1JUIDAgIm1lbW9yeV9vcGVyYW5kIiAiK20iKQorCQkJ ICAgIChjb25zdF9pbnQgMSkKKwkJCSAgICAobWF0Y2hfb3BlcmFuZCAxICJp bW1lZGlhdGVfb3BlcmFuZCIgImkiKSkKKwkoY29uc3RfaW50IDEpKV0KKyAg IlRBUkdFVF9CSVRfT1BTIgorICAic2JpdDx0SXNhPlx0JTEsJTAiCisgIFso c2V0X2F0dHIgImxlbmd0aCIgIjIiKV0KKykKKworKGRlZmluZV9pbnNuICJj bHJfYml0PG1vZGU+IgorICBbKHNldCAoemVyb19leHRyYWN0OlNIT1JUICht YXRjaF9vcGVyYW5kOlNIT1JUIDAgIm1lbW9yeV9vcGVyYW5kIiAiK20iKQor CQkJICAgIChjb25zdF9pbnQgMSkKKwkJCSAgICAobWF0Y2hfb3BlcmFuZCAx ICJpbW1lZGlhdGVfb3BlcmFuZCIgImkiKSkKKwkoY29uc3RfaW50IDApKV0K KyAgIlRBUkdFVF9CSVRfT1BTIgorICAiY2JpdDx0SXNhPlx0JTEsJTAiCisg IFsoc2V0X2F0dHIgImxlbmd0aCIgIjIiKV0KKykKKworKGRlZmluZV9pbnNu ICJzZXRfYml0PG1vZGU+X21lbSIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6 U0hPUlQgMCAiYml0X29wZXJhbmQiICI9bSIpCisJKGlvcjpTSE9SVCAobWF0 Y2hfZHVwIDApCisJCSAgIChtYXRjaF9vcGVyYW5kOlNIT1JUIDEgIm9uZV9i aXRfb3BlcmFuZCIgImkiKSkKKyAgKV0KKyAgIlRBUkdFVF9CSVRfT1BTIgor ICAic2JpdDx0SXNhPlx0JCVzMSwlMCIKKyAgWyhzZXRfYXR0ciAibGVuZ3Ro IiAiMiIpXQorKQorCisoZGVmaW5lX2luc24gImNsZWFyX2JpdDxtb2RlPl9t ZW0iCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNIT1JUIDAgImJpdF9vcGVy YW5kIiAiPW0iKQorCShhbmQ6U0hPUlQgKG1hdGNoX2R1cCAwKQorCQkgICAo bWF0Y2hfb3BlcmFuZDpTSE9SVCAxICJyZXZfb25lX2JpdF9vcGVyYW5kIiAi aSIpKQorICApXQorICAiVEFSR0VUX0JJVF9PUFMiCisgICJjYml0PHRJc2E+ XHQkJXIxLCUwIgorICBbKHNldF9hdHRyICJsZW5ndGgiICIyIildCispCisK Kzs7Cis7OyAgTG9naWNhbCBJbnN0cnVjdGlvbnMgLSBhbmQKKworKGRlZmlu ZV9leHBhbmQgImFuZGRpMyIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6REkg MCAicmVnaXN0ZXJfb3BlcmFuZCIgIiIpCisJKGFuZDpESSAobWF0Y2hfb3Bl cmFuZDpESSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikKKwkJKG1hdGNoX29w ZXJhbmQ6REkgMiAibm9ubWVtb3J5X29wZXJhbmQiICIiKSkpXQorICAiIgor ICAgIHsKKyAgICAgIGlmICgoR0VUX0NPREUgKG9wZXJhbmRzWzJdKSAhPSBS RUcpKQorCXsKKwkgIG9wZXJhbmRzWzJdID0gZm9yY2VfcmVnIChESW1vZGUs IG9wZXJhbmRzWzJdKTsKKwl9CisgICAgfQorKQorCisoZGVmaW5lX2luc24g ImFuZGRpM19pbnNuIgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpESSAwICJy ZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQorCShhbmQ6REkgKG1hdGNoX29wZXJh bmQ6REkgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIiUwIikKKwkJKG1hdGNoX29w ZXJhbmQ6REkgMiAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKSkpXQorICAiIgor ICAiKgorICAgIHJldHVybiBjcjE2X2VtaXRfbG9naWNhbF9kaSAob3BlcmFu ZHMsIDApOworICAiCispCisKKyhkZWZpbmVfaW5zbiAiYW5kc2kzIgorICBb KHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAi PXIscixyLHIiKQorCShhbmQ6U0kgKG1hdGNoX29wZXJhbmQ6U0kgMSAicmVn aXN0ZXJfb3BlcmFuZCIgIiUwLDAsMCwwIikKKwkJKG1hdGNoX29wZXJhbmQ6 U0kgMiAicmVnX3NpX2ludF9vcGVyYW5kIiAicixNLE4sUCIpKSldCisgICIi CisgICJhbmRkXHQlMiwgJTAiCisgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjIs Miw0LDYiKV0KKykKKworKGRlZmluZV9pbnNuICJhbmRoaTMiCisgIFsoc2V0 IChtYXRjaF9vcGVyYW5kOkhJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9Yyxj LGMiKQorCShhbmQ6SEkgKG1hdGNoX29wZXJhbmQ6SEkgMSAicmVnaXN0ZXJf b3BlcmFuZCIgIiUwLDAsMCIpCisJCShtYXRjaF9vcGVyYW5kOkhJIDIgInJl Z19oaV9pbnRfb3BlcmFuZCIgImMsTSxOIikpKV0KKyAgIiIKKyAgImFuZHdc dCUyLCAlMCIKKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiMiwyLDQiKV0KKykK KworKGRlZmluZV9pbnNuICJhbmRxaTMiCisgIFsoc2V0IChtYXRjaF9vcGVy YW5kOlFJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9YyxjLGMiKQorCShhbmQ6 UUkgKG1hdGNoX29wZXJhbmQ6UUkgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIiUw LDAsMCIpCisJCShtYXRjaF9vcGVyYW5kOlFJIDIgInJlZ19oaV9pbnRfb3Bl cmFuZCIgImMsTSxOIikpKV0KKyAgIiIKKyAgImFuZGJcdCUyLCAlMCIKKyAg WyhzZXRfYXR0ciAibGVuZ3RoIiAiMiwyLDIiKV0KKykKKworOzsgIExvZ2lj YWwgSW5zdHJ1Y3Rpb25zIC0gb3IgCisoZGVmaW5lX2V4cGFuZCAiaW9yZGkz IgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpESSAwICJyZWdpc3Rlcl9vcGVy YW5kIiAiIikKKwkoaW9yOkRJIChtYXRjaF9vcGVyYW5kOkRJIDEgInJlZ2lz dGVyX29wZXJhbmQiICIiKQorCQkobWF0Y2hfb3BlcmFuZDpESSAyICJub25t ZW1vcnlfb3BlcmFuZCIgIiIpKSldCisgICIiCisgICAgeworICAgICAgaWYg KChHRVRfQ09ERSAob3BlcmFuZHNbMl0pICE9IFJFRykpCisJeworCSAgb3Bl cmFuZHNbMl0gPSBmb3JjZV9yZWcgKERJbW9kZSwgb3BlcmFuZHNbMl0pOwor CX0KKyAgICB9CispCisKKyhkZWZpbmVfaW5zbiAiaW9yZGkzX2luc24iCisg IFsoc2V0IChtYXRjaF9vcGVyYW5kOkRJIDAgInJlZ2lzdGVyX29wZXJhbmQi ICI9ciIpCisJKGlvcjpESSAobWF0Y2hfb3BlcmFuZDpESSAxICJyZWdpc3Rl cl9vcGVyYW5kIiAiJTAiKQorCQkobWF0Y2hfb3BlcmFuZDpESSAyICJyZWdp c3Rlcl9vcGVyYW5kIiAiciIpKSldCisgICIiCisgICIqCisgICAgcmV0dXJu IGNyMTZfZW1pdF9sb2dpY2FsX2RpIChvcGVyYW5kcywgMSk7CisgICIKKykK KworKGRlZmluZV9pbnNuICJpb3JzaTMiCisgIFsoc2V0IChtYXRjaF9vcGVy YW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9cixyLHIsciIpCisJKGlv cjpTSSAobWF0Y2hfb3BlcmFuZDpTSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAi JTAsMCwwLDAiKQorCQkobWF0Y2hfb3BlcmFuZDpTSSAyICJyZWdfc2lfaW50 X29wZXJhbmQiICJyLE0sTixQIikpKV0KKyAgIiIKKyAgIm9yZFx0JTIsICUw IgorICBbKHNldF9hdHRyICJsZW5ndGgiICIyLDIsNCw2IildCispCisKKyhk ZWZpbmVfaW5zbiAiaW9yaGkzIgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpI SSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPWMsYyxjIikKKwkoaW9yOkhJICht YXRjaF9vcGVyYW5kOkhJIDEgInJlZ2lzdGVyX29wZXJhbmQiICIlMCwwLDAi KQorCQkobWF0Y2hfb3BlcmFuZDpISSAyICJyZWdfaGlfaW50X29wZXJhbmQi ICJjLE0sTiIpKSldCisgICIiCisgICJvcndcdCUyLCAlMCIKKyAgWyhzZXRf YXR0ciAibGVuZ3RoIiAiMiwyLDQiKV0KKykKKworKGRlZmluZV9pbnNuICJp b3JxaTMiCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlFJIDAgInJlZ2lzdGVy X29wZXJhbmQiICI9YyxjLGMiKQorCShpb3I6UUkgKG1hdGNoX29wZXJhbmQ6 UUkgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIiUwLDAsMCIpCisJCShtYXRjaF9v cGVyYW5kOlFJIDIgInJlZ19oaV9pbnRfb3BlcmFuZCIgImMsTSxOIikpKV0K KyAgIiIKKyAgIm9yYlx0JTIsICUwIgorICBbKHNldF9hdHRyICJsZW5ndGgi ICIyLDIsMiIpXQorKQorCis7OyAgTG9naWNhbCBJbnN0cnVjdGlvbnMgLSB4 b3IgCisoZGVmaW5lX2V4cGFuZCAieG9yZGkzIgorICBbKHNldCAobWF0Y2hf b3BlcmFuZDpESSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikKKwkoeG9yOkRJ IChtYXRjaF9vcGVyYW5kOkRJIDEgInJlZ2lzdGVyX29wZXJhbmQiICIiKQor CQkobWF0Y2hfb3BlcmFuZDpESSAyICJub25tZW1vcnlfb3BlcmFuZCIgIiIp KSldCisgICIiCisgICAgeworICAgICAgaWYgKChHRVRfQ09ERSAob3BlcmFu ZHNbMl0pICE9IFJFRykpCisJeworCSAgb3BlcmFuZHNbMl0gPSBmb3JjZV9y ZWcgKERJbW9kZSwgb3BlcmFuZHNbMl0pOworCX0KKyAgICB9CispCisKKyhk ZWZpbmVfaW5zbiAieG9yZGkzX2luc24iCisgIFsoc2V0IChtYXRjaF9vcGVy YW5kOkRJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9ciIpCisJKHhvcjpESSAo bWF0Y2hfb3BlcmFuZDpESSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiJTAiKQor CQkobWF0Y2hfb3BlcmFuZDpESSAyICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIp KSldCisgICIiCisgICIqCisgICAgcmV0dXJuIGNyMTZfZW1pdF9sb2dpY2Fs X2RpIChvcGVyYW5kcywgMik7CisgICIKKykKKworKGRlZmluZV9pbnNuICJ4 b3JzaTMiCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVy X29wZXJhbmQiICI9cixyLHIsciIpCisJKHhvcjpTSSAobWF0Y2hfb3BlcmFu ZDpTSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiJTAsMCwwLDAiKQorCQkobWF0 Y2hfb3BlcmFuZDpTSSAyICJyZWdfc2lfaW50X29wZXJhbmQiICJyLE0sTixQ IikpKV0KKyAgIiIKKyAgInhvcmRcdCUyLCAlMCIKKyAgWyhzZXRfYXR0ciAi bGVuZ3RoIiAiMiwyLDQsNiIpXQorKQorCisoZGVmaW5lX2luc24gInhvcmhp MyIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6SEkgMCAicmVnaXN0ZXJfb3Bl cmFuZCIgIj1jLGMsYyIpCisJKHhvcjpISSAobWF0Y2hfb3BlcmFuZDpISSAx ICJyZWdpc3Rlcl9vcGVyYW5kIiAiJTAsMCwwIikKKwkJKG1hdGNoX29wZXJh bmQ6SEkgMiAicmVnX2hpX2ludF9vcGVyYW5kIiAiYyxNLE4iKSkpXQorICAi IgorICAieG9yd1x0JTIsICUwIgorICBbKHNldF9hdHRyICJsZW5ndGgiICIy LDIsNCIpXQorKQorCisoZGVmaW5lX2luc24gInhvcnFpMyIKKyAgWyhzZXQg KG1hdGNoX29wZXJhbmQ6UUkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1jLGMs YyIpCisJKHhvcjpRSSAobWF0Y2hfb3BlcmFuZDpRSSAxICJyZWdpc3Rlcl9v cGVyYW5kIiAiJTAsMCwwIikKKwkJKG1hdGNoX29wZXJhbmQ6UUkgMiAicmVn X2hpX2ludF9vcGVyYW5kIiAiYyxNLE4iKSkpXQorICAiIgorICAieG9yYlx0 JTIsICUwIgorICBbKHNldF9hdHRyICJsZW5ndGgiICIyLDIsMiIpXQorKQor Cis7OworOzsgIFNpZ24gYW5kIFplcm8gRXh0ZW5kIEluc3RydWN0aW9ucwor KGRlZmluZV9pbnNuICI8c3pQYXQ+ZXh0ZW5kaGlzaTIiCisgIFsoc2V0ICht YXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9ciIpCisJ KHN6X3h0bmQ6U0kgKG1hdGNoX29wZXJhbmQ6SEkgMSAicmVnaXN0ZXJfb3Bl cmFuZCIgInIiKSkpXQorICAiIgorICAibW92PHN6SXNhPndcdCUxLCAlMCIK KyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiNCIpXQorKQorCisoZGVmaW5lX2lu c24gIjxzelBhdD5leHRlbmRxaWhpMiIKKyAgWyhzZXQgKG1hdGNoX29wZXJh bmQ6SEkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikKKwkoc3pfeHRuZDpI SSAobWF0Y2hfb3BlcmFuZDpRSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIp KSldCisgICIiCisgICJtb3Y8c3pJc2E+Ylx0JTEsICUwIgorICBbKHNldF9h dHRyICJsZW5ndGgiICI0IildCispCisKKzs7Cis7OyAgT25lJ3MgQ29tcGxl bWVudAorKGRlZmluZV9pbnNuICJvbmVfY21wbGRpMiIKKyAgWyhzZXQgKG1h dGNoX29wZXJhbmQ6REkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikKKwko bm90OkRJIChtYXRjaF9vcGVyYW5kOkRJIDEgInJlZ2lzdGVyX29wZXJhbmQi ICIwIikpKV0KKyAgIiIKKyAgeworICAgICBydHggeG9wZXJhbmQgOworICAg ICBpbnQgcmVnMCA9IFJFR05PIChvcGVyYW5kc1swXSk7CisKKyAgICAgeG9w ZXJhbmQgPSBnZW5fcnR4X1JFRyAoU0ltb2RlLCByZWcwICsgMik7CisgICAg IG91dHB1dF9hc21faW5zbiAoInhvcmRcdCQtMSwgJTAiLCBvcGVyYW5kcyk7 CisgICAgIG91dHB1dF9hc21faW5zbiAoInhvcmRcdCQtMSwgJTAiLCAmeG9w ZXJhbmQpOworICAgICByZXR1cm4gIiIgOworICB9CisgIFsoc2V0X2F0dHIg Imxlbmd0aCIgIjEyIildCispCisKKyhkZWZpbmVfaW5zbiAib25lX2NtcGw8 bW9kZT4yIgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpDUjE2SU0gMCAicmVn aXN0ZXJfb3BlcmFuZCIgIj1yIikKKwkobm90OkNSMTZJTSAobWF0Y2hfb3Bl cmFuZDpDUjE2SU0gMSAicmVnaXN0ZXJfb3BlcmFuZCIgIjAiKSkpXQorICAi IgorICAieG9yPHRJc2E+XHQkLTEsICUwIgorICBbKHNldF9hdHRyICJsZW5n dGgiICIyIildCispCisKKzs7Cis7OyAgQXJpdGhtZXRpYyBMZWZ0IGFuZCBS aWdodCBTaGlmdCBJbnN0cnVjdGlvbnMKKyhkZWZpbmVfaW5zbiAiYXNobHFp MyIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6UUkgMCAicmVnaXN0ZXJfb3Bl cmFuZCIgIj1jLGMiKQorCShhc2hpZnQ6UUkgKG1hdGNoX29wZXJhbmQ6UUkg MSAicmVnaXN0ZXJfb3BlcmFuZCIgIjAsMCIpCisJCSAgIChtYXRjaF9vcGVy YW5kOlFJIDIgIm5vbm1lbW9yeV9vcGVyYW5kIiAiYyxJIikpKV0KKyAgIiIK KyAgImFzaHViXHQlMiwgJTAiCisgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjIs MiIpXQorKQorCisoZGVmaW5lX2luc24gImFzaGxoaTMiCisgIFsoc2V0ICht YXRjaF9vcGVyYW5kOkhJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9YyxjIikK KwkoYXNoaWZ0OkhJIChtYXRjaF9vcGVyYW5kOkhJIDEgInJlZ2lzdGVyX29w ZXJhbmQiICIwLDAiKQorCQkgICAobWF0Y2hfb3BlcmFuZDpRSSAyICJub25t ZW1vcnlfb3BlcmFuZCIgImMsSiIpKSldCisgICIiCisgICJhc2h1d1x0JTIs ICUwIgorICBbKHNldF9hdHRyICJsZW5ndGgiICIyLDIiKV0KKykKKworKGRl ZmluZV9pbnNuICJhc2hsc2kzIgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpT SSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIsciIpCisJKGFzaGlmdDpTSSAo bWF0Y2hfb3BlcmFuZDpTSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiMCwwIikK KwkJICAgKG1hdGNoX29wZXJhbmQ6UUkgMiAibm9ubWVtb3J5X29wZXJhbmQi ICJyLEsiKSkpXQorICAiIgorICAiYXNodWRcdCUyLCAlMCIKKyAgWyhzZXRf YXR0ciAibGVuZ3RoIiAiMiwyIildCispCisKKyhkZWZpbmVfZXhwYW5kICJh c2hyPG1vZGU+MyIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6Q1IxNklNIDAg InJlZ2lzdGVyX29wZXJhbmQiICIiKQorCShhc2hpZnRydDpDUjE2SU0gKG1h dGNoX29wZXJhbmQ6Q1IxNklNIDEgInJlZ2lzdGVyX29wZXJhbmQiICIiKQor CQkJIChtYXRjaF9vcGVyYW5kOlFJIDIgIm5vbm1lbW9yeV9vcGVyYW5kIiAi IikpKV0KKyAgIiIKKyAgICB7CisgICAgICBpZiAoR0VUX0NPREUgKG9wZXJh bmRzWzJdKSA9PSBDT05TVF9JTlQpCisJeworCSAgLyogSWYgdGhlIGNvbnN0 YW50IGlzIG5vdCBpbiByYW5nZSwgdHJ5IHBsYWNpbmcgaXQgaW4gYSByZWcg Ki8KKwkgIGlmICghVU5TSUdORURfSU5UX0ZJVFNfTl9CSVRTKElOVFZBTCAo b3BlcmFuZHNbMl0pLDxzaEltbUJpdHM+KSkKKwkgIG9wZXJhbmRzWzJdID0g Y29weV90b19tb2RlX3JlZyhRSW1vZGUsIG9wZXJhbmRzWzJdKTsKKwl9CisK KyAgICAgIGlmIChHRVRfQ09ERSAob3BlcmFuZHNbMl0pICE9IENPTlNUX0lO VCkKKwlvcGVyYW5kc1syXSA9IGdlbl9ydHhfTkVHIChRSW1vZGUsIG5lZ2F0 ZV9ydHggKFFJbW9kZSwgb3BlcmFuZHNbMl0pKTsKKyAgICB9CispCisKKyhk ZWZpbmVfaW5zbiAiYXNocnFpM19pbW1faW5zbiIKKyAgWyhzZXQgKG1hdGNo X29wZXJhbmQ6UUkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1jIikKKwkoYXNo aWZ0cnQ6UUkgKG1hdGNoX29wZXJhbmQ6UUkgMSAicmVnaXN0ZXJfb3BlcmFu ZCIgIjAiKQorCQkgICAgIChtYXRjaF9vcGVyYW5kOlFJIDIgInNoaWZ0X3Fp X2ltbV9vcGVyYW5kIiAiaSIpKSldCisgICIiCisgICJhc2h1Ylx0JCVuMiwg JTAiCisgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjIiKV0KKykKKworKGRlZmlu ZV9pbnNuICJhc2hyaGkzX2ltbV9pbnNuIgorICBbKHNldCAobWF0Y2hfb3Bl cmFuZDpISSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPWMiKQorCShhc2hpZnRy dDpISSAobWF0Y2hfb3BlcmFuZDpISSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAi MCIpCisJCSAgICAgKG1hdGNoX29wZXJhbmQ6UUkgMiAic2hpZnRfaGlfaW1t X29wZXJhbmQiICJpIikpKV0KKyAgIiIKKyAgImFzaHV3XHQkJW4yLCAlMCIK KyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiMiIpXQorKQorCisoZGVmaW5lX2lu c24gImFzaHJzaTNfaW1tX2luc24iCisgIFsoc2V0IChtYXRjaF9vcGVyYW5k OlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9ciIpCisJKGFzaGlmdHJ0OlNJ IChtYXRjaF9vcGVyYW5kOlNJIDEgInJlZ2lzdGVyX29wZXJhbmQiICIwIikK KwkJICAgICAobWF0Y2hfb3BlcmFuZDpRSSAyICJzaGlmdF9zaV9pbW1fb3Bl cmFuZCIgImkiKSkpXQorICAiIgorICAiYXNodWRcdCQlbjIsICUwIgorICBb KHNldF9hdHRyICJsZW5ndGgiICIyIildCispCisKKyhkZWZpbmVfaW5zbiAi YXNocnFpM19uZWdfaW5zbiIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6UUkg MCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1jIikKKwkoYXNoaWZ0cnQ6UUkgKG1h dGNoX29wZXJhbmQ6UUkgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIjAiKQorCQkg ICAgIChuZWc6UUkgKG1hdGNoX29wZXJhbmQ6UUkgMiAicmVnaXN0ZXJfb3Bl cmFuZCIgImMiKSkpKV0KKyAgIiIKKyAgImFzaHViXHQlMiwlMCIKKyAgWyhz ZXRfYXR0ciAibGVuZ3RoIiAiMiIpXQorKQorCisoZGVmaW5lX2luc24gImFz aHJoaTNfbmVnX2luc24iCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOkhJIDAg InJlZ2lzdGVyX29wZXJhbmQiICI9YyIpCisJKGFzaGlmdHJ0OkhJIChtYXRj aF9vcGVyYW5kOkhJIDEgInJlZ2lzdGVyX29wZXJhbmQiICIwIikKKwkJICAg ICAobmVnOlFJIChtYXRjaF9vcGVyYW5kOlFJIDIgInJlZ2lzdGVyX29wZXJh bmQiICJjIikpKSldCisgICIiCisgICJhc2h1d1x0JTIsJTAiCisgIFsoc2V0 X2F0dHIgImxlbmd0aCIgIjIiKV0KKykKKworKGRlZmluZV9pbnNuICJhc2hy ZGkzX25lZ19pbnNuIgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJy ZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQorCShhc2hpZnRydDpTSSAobWF0Y2hf b3BlcmFuZDpTSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiMCIpCisJCSAgICAg KG5lZzpRSSAobWF0Y2hfb3BlcmFuZDpRSSAyICJyZWdpc3Rlcl9vcGVyYW5k IiAiciIpKSkpXQorICAiIgorICAiYXNodWRcdCUyLCUwIgorICBbKHNldF9h dHRyICJsZW5ndGgiICIyIildCispCisKKyhkZWZpbmVfZXhwYW5kICJsc2hy PG1vZGU+MyIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6Q1IxNklNIDAgInJl Z2lzdGVyX29wZXJhbmQiICIiKQorCShsc2hpZnRydDpDUjE2SU0gKG1hdGNo X29wZXJhbmQ6Q1IxNklNIDEgInJlZ2lzdGVyX29wZXJhbmQiICIiKQorCQkJ IChtYXRjaF9vcGVyYW5kOlFJIDIgInJlZ19vcl9pbnRfb3BlcmFuZCIgIiIp KSldCisgICIiCisgICAgeworICAgICAgaWYgKEdFVF9DT0RFIChvcGVyYW5k c1syXSkgPT0gQ09OU1RfSU5UKQorCXsKKwkgIC8qIElmIHRoZSBjb25zdGFu dCBpcyBub3QgaW4gcmFuZ2UsIHRyeSBwbGFjaW5nIGl0IGluIGEgcmVnICov CisJICBpZiAoIVVOU0lHTkVEX0lOVF9GSVRTX05fQklUUyhJTlRWQUwgKG9w ZXJhbmRzWzJdKSw8c2hJbW1CaXRzPikpCisJICBvcGVyYW5kc1syXSA9IGNv cHlfdG9fbW9kZV9yZWcoUUltb2RlLCBvcGVyYW5kc1syXSk7CisJfQorCisg ICAgICBpZiAoR0VUX0NPREUgKG9wZXJhbmRzWzJdKSAhPSBDT05TVF9JTlQp CisJb3BlcmFuZHNbMl0gPSBnZW5fcnR4X05FRyAoUUltb2RlLCBuZWdhdGVf cnR4IChRSW1vZGUsIG9wZXJhbmRzWzJdKSk7CisgICAgfQorKQorCisoZGVm aW5lX2luc24gImxzaHJxaTNfaW1tX2luc24iCisgIFsoc2V0IChtYXRjaF9v cGVyYW5kOlFJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9YyIpCisJKGxzaGlm dHJ0OlFJIChtYXRjaF9vcGVyYW5kOlFJIDEgInJlZ2lzdGVyX29wZXJhbmQi ICIwIikKKwkJICAgICAobWF0Y2hfb3BlcmFuZDpRSSAyICJzaGlmdF9xaV9v cGVyYW5kIiAiUSIpKSldCisgICIiCisgICJsc2hiXHQkJW4yLCAlMCIKKyAg WyhzZXRfYXR0ciAibGVuZ3RoIiAiMiIpXQorKQorCisoZGVmaW5lX2luc24g ImxzaHJoaTNfaW1tX2luc24iCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOkhJ IDAgInJlZ2lzdGVyX29wZXJhbmQiICI9YyIpCisJKGxzaGlmdHJ0OkhJICht YXRjaF9vcGVyYW5kOkhJIDEgInJlZ2lzdGVyX29wZXJhbmQiICIwIikKKwkJ ICAgICAobWF0Y2hfb3BlcmFuZDpRSSAyICJzaGlmdF9oaV9vcGVyYW5kIiAi UiIpKSldCisgICIiCisgICJsc2h3XHQkJW4yLCAlMCIKKyAgWyhzZXRfYXR0 ciAibGVuZ3RoIiAiMiIpXQorKQorCisoZGVmaW5lX2luc24gImxzaHJzaTNf aW1tX2luc24iCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lz dGVyX29wZXJhbmQiICI9ciIpCisJKGxzaGlmdHJ0OlNJIChtYXRjaF9vcGVy YW5kOlNJIDEgInJlZ2lzdGVyX29wZXJhbmQiICIwIikKKwkJICAgICAobWF0 Y2hfb3BlcmFuZDpRSSAyICJzaGlmdF9zaV9vcGVyYW5kIiAiUyIpKSldCisg ICIiCisgICJsc2hkXHQkJW4yLCAlMCIKKyAgWyhzZXRfYXR0ciAibGVuZ3Ro IiAiMiIpXQorKQorCisoZGVmaW5lX2luc24gImxzaHJxaTNfbmVnX2luc24i CisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlFJIDAgInJlZ2lzdGVyX29wZXJh bmQiICI9YyIpCisJKGxzaGlmdHJ0OlFJIChtYXRjaF9vcGVyYW5kOlFJIDEg InJlZ2lzdGVyX29wZXJhbmQiICIwIikKKwkJICAgICAobmVnOlFJIChtYXRj aF9vcGVyYW5kOlFJIDIgInJlZ2lzdGVyX29wZXJhbmQiICJjIikpKSldCisg ICIiCisgICJsc2hiXHQlMiwlMCIKKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAi MiIpXQorKQorCisoZGVmaW5lX2luc24gImxzaHJoaTNfbmVnX2luc24iCisg IFsoc2V0IChtYXRjaF9vcGVyYW5kOkhJIDAgInJlZ2lzdGVyX29wZXJhbmQi ICI9YyIpCisJKGxzaGlmdHJ0OkhJIChtYXRjaF9vcGVyYW5kOkhJIDEgInJl Z2lzdGVyX29wZXJhbmQiICIwIikKKwkJICAgICAobmVnOlFJIChtYXRjaF9v cGVyYW5kOlFJIDIgInJlZ2lzdGVyX29wZXJhbmQiICJjIikpKSldCisgICIi CisgICJsc2h3XHQlMiwlMCIKKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiMiIp XQorKQorCisoZGVmaW5lX2luc24gImxzaHJzaTNfbmVnX2luc24iCisgIFso c2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9 ciIpCisJKGxzaGlmdHJ0OlNJIChtYXRjaF9vcGVyYW5kOlNJIDEgInJlZ2lz dGVyX29wZXJhbmQiICIwIikKKwkJICAgICAobmVnOlFJIChtYXRjaF9vcGVy YW5kOlFJIDIgInJlZ2lzdGVyX29wZXJhbmQiICJyIikpKSldCisgICIiCisg ICJsc2hkXHQlMiwlMCIKKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiMiIpXQor KQorCis7OworOzsgIE1vdmUgSW5zdHJ1Y3Rpb25zCisKKzs7IE1vdmUgYW55 IG5vbi1pbW1lZGlhdGUgb3BlcmFuZCAwIHRvIGEgZ2VuZXJhbCBvcGVyYW5k IDEuCis7OyBUaGlzIGFwcGxpZXMgb25seSBiZWZvcmUgc3RhcnRpbmcgdGhl IHJlbG9hZCBwcm9jZXNzCis7OyBPcGVyYW5kIDAgaXMgbm90IGEgcmVnaXN0 ZXIgb3BlcmFuZCBvZiB0eXBlIG1vZGUgTU9ERQorOzsgSWYgT3BlcmFuZCAw IGlzIGEgcHVzaCBvcGVyYW5kIG9mIHR5cGUgbW9kZSBNT0RFCis7OyB0aGVu LCBpZiBPcGVyYW5kIDEgaXMgYSBub24tU1AgcmVnaXN0ZXIKKzs7IHRoZW4s IE9wZXJhbmQgMSA9IGNvcHlfdG9fbW9kZV9yZWcgKDxNT0RFPm1vZGUsIE9w ZXJhbmQgMSkKKzs7IGVuZGlmCis7OyBlbHNlCis7OyBpZiBPcGVyYW5kIDEg aXMgZWl0aGVyIHJlZ2lzdGVyIG9yIDQtYml0IGltbWVkaWF0ZSBjb25zdGFu dAorOzsgdGhlbiwgT3BlcmFuZCAxID0gY29weV90b19tb2RlX3JlZyAoPE1P REU+bW9kZSwgT3BlcmFuZCAxKQorOzsgZW5kaWYKKzs7IGVuZGlmCis7Owor OzsgV2hhdCBkb2VzIGNvcHlfdG9fbW9kZV9yZWcgKG1vZGUsIHJ0eCB2YWwp IGRvPworOzsgQ29weSB0aGUgdmFsdWUgaW50byBuZXcgdGVtcCByZWcgYW5k IHJldHVybiB0aGUgcmVnIHdoZXJlIHRoZQorOzsgbW9kZSBvZiB0aGUgbmV3 IHJlZyBpcyBhbHdheXMgbW9kZSBNT0RFIHdoZW4gdmFsdWUgaXMgY29uc3Rh bnQKKzs7Cis7OyBXaHkgc2hvdWxkIGNvcHlfdG9fbW9kZV9yZWcgYmUgY2Fs bGVkPworOzsgQWxsIHNvcnRzIG9mIG1vdmUgYXJlIG5vciBzdXBwb3J0ZWQg YnkgQ1IxNi4gVGhlcmVmb3JlLCAKKzs7IHdoZW4gdW5zdXBwb3J0ZWQgbW92 ZSBpcyBlbmNvdW50ZXJlZCwgdGhlIGFkZGl0aW9uYWwgaW5zdHJ1Y3Rpb25z IAorOzsgd2lsbCBiZSBpbnRyb2R1Y2VkIGZvciB0aGUgcHVycG9zZS4KKzs7 Cis7OyBBIG5ldyBtb3ZlIGluc24gaXMgaW5zZXJ0ZWQgZm9yIE9wIDEgd2hl biBvbmUgb2YgdGhlIGZvbGxvd2luZworOzsgY29uZGl0aW9ucyBpcyBtZXQu Cis7OyBDYXNlIDE6ICBPcCAwIGlzIHB1c2hfb3BlcmFuZAorOzsgICAgICAg ICAgT3AgMSBpcyBTUCByZWdpc3RlcgorOzsKKzs7IENhc2UgMjogIE9wIDAg aXMgbm90IHB1c2hfb3BlcmFuZAorOzsgICAgICAgICAgT3AgMSBpcyBuZWl0 aGVyIHJlZ2lzdGVyIG5vciB1bnNpZ25lZCA0LWJpdCBpbW1lZGlhdGUKKwor KGRlZmluZV9leHBhbmQgIm1vdjxtb2RlPiIKKyAgWyhzZXQgKG1hdGNoX29w ZXJhbmQ6QUxMTVREIDAgIm5vbmltbWVkaWF0ZV9vcGVyYW5kIiAiIikKKwko bWF0Y2hfb3BlcmFuZDpBTExNVEQgMSAiZ2VuZXJhbF9vcGVyYW5kIiAiIikp XQorICAiIgorICB7CisgICAgaWYgKCEocmVsb2FkX2luX3Byb2dyZXNzIHx8 IHJlbG9hZF9jb21wbGV0ZWQpKQorICAgICAgeworCS8qIE9ubHkgaWYgT3Aw IGlzIGEgcmVnaXN0ZXIgb3BlcmFuZC4gICovCisJaWYgKCFyZWdpc3Rlcl9v cGVyYW5kIChvcGVyYW5kc1swXSwgPE1PREU+bW9kZSkpCisJICB7CisJICAg IGlmIChwdXNoX29wZXJhbmQgKG9wZXJhbmRzWzBdLCA8TU9ERT5tb2RlKSkg CisJICAgICAgeworCQkvKiBVc2UgY29weV90b19tb2RlX3JlZyBvbmx5IGlm IHRoZSByZWdpc3RlciBuZWVkcyAKKwkJdG8gYmUgcHVzaGVkIGlzIFNQIGFz IENSMTYgZG9lcyBub3Qgc3VwcG9ydCBwdXNoaW5nIFNQLiAgKi8KKwkJaWYg KCFub3NwX3JlZ19vcGVyYW5kIChvcGVyYW5kc1sxXSwgPE1PREU+bW9kZSkp CisJCSAgb3BlcmFuZHNbMV0gPSBjb3B5X3RvX21vZGVfcmVnICg8TU9ERT5t b2RlLCBvcGVyYW5kc1sxXSk7CisJICAgICAgfQorCSAgICBlbHNlCisJICAg ICAgeworCQkvKiBVc2UgY29weV90b19tb2RlX3JlZyBpZiBvcDEgaXMgbm90 IHJlZ2lzdGVyIG9wZXJhbmQKKwkJICAgc3ViamVjdCB0byBjb25kaXRpb25z IGluc2lkZS4gICovCisJCWlmICghcmVnaXN0ZXJfb3BlcmFuZCAob3BlcmFu ZHNbMV0sIDxNT0RFPm1vZGUpKQorCQkgIHsKKwkJICAgIC8qIENSMTYgZG9l cyBub3Qgc3VwcG9ydCBtb3ZpbmcgaW1tZWRpYXRlIHRvIFNJIG9yIFNGIAor CQkgICAgICAgdHlwZSBtZW1vcnkuICAqLworCQkgICAgaWYgKDxNT0RFPm1v ZGUgPT0gU0ltb2RlIHx8IDxNT0RFPm1vZGUgPT0gU0Ztb2RlIHx8CisJCQk8 TU9ERT5tb2RlID09IERJbW9kZSB8fCA8TU9ERT5tb2RlID09IERGbW9kZSkK KwkJICAgICAgb3BlcmFuZHNbMV0gPSBjb3B5X3RvX21vZGVfcmVnICg8TU9E RT5tb2RlLCBvcGVyYW5kc1sxXSk7CisJCSAgICBlbHNlCisJCSAgICAgIC8q IG1vdmluZyBpbW00IGlzIHN1cHBvcnRlZCBieSBDUjE2IGluc3RydWN0aW9u LiAgKi8KKwkJICAgICAgaWYgKCF1NGJpdHNfb3BlcmFuZCAob3BlcmFuZHNb MV0sIDxNT0RFPm1vZGUpKQorCQkJb3BlcmFuZHNbMV0gPSBjb3B5X3RvX21v ZGVfcmVnICg8TU9ERT5tb2RlLCBvcGVyYW5kc1sxXSk7CisJCSAgfQorCSAg ICAgICB9CisJICB9CisKKwkgIC8qIElmIG9wZXJhbmQtMSBpcyBhIHN5bWJv bCwgY29udmVydCBpdCBpbnRvIGEgQlJPIG9yIEdPVCBGb3JtYXQuICAqLwor CSAgaWYgKGZsYWdfcGljICYmICEgbGVnaXRpbWF0ZV9waWNfb3BlcmFuZF9w IChvcGVyYW5kc1sxXSkpCisJICAgIHsKKwkgICAgICBvcGVyYW5kc1sxXSA9 IGxlZ2l0aW1pemVfcGljX2FkZHJlc3MgKG9wZXJhbmRzWzFdLCA8TU9ERT5t b2RlLCAwKTsKKwkgICAgfQorICAgICAgfQorICB9CispCisKKzsgQUxMTVQg ICAgIDogUUksSEksU0ksU0YKKzsgcHVzaENuc3RyIDogUHVzaCBjb25zdHJh aW50cyAKKzsgICAgICAgICAgICAgICAgUUkgOiBYCis7ICAgICAgICAgICAg IEhJLFNJLFNGLERJLERGIDogPAorOyBiICAgICAgICAgOiBBbGwgbm9uLXNw IHJlZ2lzdGVycworOyB0cHVzaCAgICAgOiBQdXNoIGNvdW50Cis7ICAgICAg ICAgICAgICAgIFFJLEhJIDogMQorOyAgICAgICAgICAgICAgICBTSSxTRiA6 IDIKKzsgICAgICAgICAgICAgICAgREksREYgOiA0CisoZGVmaW5lX2luc24g InB1c2g8bW9kZT5faW50ZXJuYWwiCisgIFsoc2V0IChtYXRjaF9vcGVyYW5k OkFMTE1URCAwICJwdXNoX29wZXJhbmQiICI9PHB1c2hDbnN0cj4iKQorCSht YXRjaF9vcGVyYW5kOkFMTE1URCAxICJub3NwX3JlZ19vcGVyYW5kIiAiYiIp KV0KKyAgIiIKKyAgInB1c2hcdCQ8dHB1c2g+LCVwMSIKKyAgWyhzZXRfYXR0 ciAibGVuZ3RoIiAiMiIpXQorKQorCis7IChESSwgREYpIG1vdmUKKyhkZWZp bmVfaW5zbiAiKm1vdjxtb2RlPl9kb3VibGUiCisgIFsoc2V0IChtYXRjaF9v cGVyYW5kOkRPVUJMRSAwICJub25pbW1lZGlhdGVfb3BlcmFuZCIgIj1yLCBy LCByLCBtIikKKwkobWF0Y2hfb3BlcmFuZDpET1VCTEUgMSAiZ2VuZXJhbF9v cGVyYW5kIiAiciwgPGlGRD4sIG0sIHIiKSldCisgICJyZWdpc3Rlcl9vcGVy YW5kIChvcGVyYW5kc1swXSwgREltb2RlKSAKKyAgIHx8IHJlZ2lzdGVyX29w ZXJhbmQgKG9wZXJhbmRzWzBdLCBERm1vZGUpCisgICB8fCByZWdpc3Rlcl9v cGVyYW5kIChvcGVyYW5kc1sxXSwgREltb2RlKQorICAgfHwgcmVnaXN0ZXJf b3BlcmFuZCAob3BlcmFuZHNbMV0sIERGbW9kZSkiCisgIHsKKyAgICBpZiAo MCA9PSB3aGljaF9hbHRlcm5hdGl2ZSkgeworICAgICAgcnR4IHhvcGVyYW5k c1syXSA7CisgICAgICBpbnQgcmVnMCA9IFJFR05PIChvcGVyYW5kc1swXSk7 CisgICAgICBpbnQgcmVnMSA9IFJFR05PIChvcGVyYW5kc1sxXSk7CisKKyAg ICAgIHhvcGVyYW5kc1swXSA9IGdlbl9ydHhfUkVHIChTSW1vZGUsIHJlZzAg KyAyKTsKKyAgICAgIHhvcGVyYW5kc1sxXSA9IGdlbl9ydHhfUkVHIChTSW1v ZGUsIHJlZzEgKyAyKTsKKyAgICAgIGlmICgocmVnMSArIDIpICE9IHJlZzAp CisJeworCSAgb3V0cHV0X2FzbV9pbnNuICgibW92ZFx0JTEsICUwIiwgb3Bl cmFuZHMpOworCSAgb3V0cHV0X2FzbV9pbnNuICgibW92ZFx0JTEsICUwIiwg eG9wZXJhbmRzKTsKKwl9CisgICAgICBlbHNlCisJeworCSAgb3V0cHV0X2Fz bV9pbnNuICgibW92ZFx0JTEsICUwIiwgeG9wZXJhbmRzKTsKKwkgIG91dHB1 dF9hc21faW5zbiAoIm1vdmRcdCUxLCAlMCIsIG9wZXJhbmRzKTsKKwl9fQor CisgICAgZWxzZSBpZiAoMSA9PSB3aGljaF9hbHRlcm5hdGl2ZSkgeworICAg ICAgcnR4IGxvX29wZXJhbmRzWzJdIDsKKyAgICAgIHJ0eCBoaV9vcGVyYW5k c1syXSA7CisKKyAgICAgIGxvX29wZXJhbmRzWzBdID0gZ2VuX3J0eF9SRUcg KFNJbW9kZSwgUkVHTk8gKG9wZXJhbmRzWzBdKSk7CisgICAgICBoaV9vcGVy YW5kc1swXSA9IGdlbl9ydHhfUkVHIChTSW1vZGUsIFJFR05PIChvcGVyYW5k c1swXSkgKyAyKTsKKyAgICAgIGxvX29wZXJhbmRzWzFdID0gc2ltcGxpZnlf Z2VuX3N1YnJlZyAoU0ltb2RlLCBvcGVyYW5kc1sxXSwKKwkJICAgICAgIFZP SURtb2RlID09IEdFVF9NT0RFIChvcGVyYW5kc1sxXSkKKwkJICAgICAgID8g REltb2RlICA6IEdFVF9NT0RFIChvcGVyYW5kc1sxXSksIDApOworICAgICAg aGlfb3BlcmFuZHNbMV0gPSBzaW1wbGlmeV9nZW5fc3VicmVnIChTSW1vZGUs IG9wZXJhbmRzWzFdLAorCQkgICAgICAgVk9JRG1vZGUgPT0gR0VUX01PREUg KG9wZXJhbmRzWzFdKQorCQkgICAgICAgPyBESW1vZGUgIDogR0VUX01PREUg KG9wZXJhbmRzWzFdKSwgNCk7CisgICAgICBvdXRwdXRfYXNtX2luc24gKCJt b3ZkXHQlMSwgJTAiLCBsb19vcGVyYW5kcyk7CisgICAgICBvdXRwdXRfYXNt X2luc24gKCJtb3ZkXHQlMSwgJTAiLCBoaV9vcGVyYW5kcyk7fQorCisgICAg ZWxzZSBpZiAoMiA9PSB3aGljaF9hbHRlcm5hdGl2ZSkgeworICAgICAgcnR4 IHhvcGVyYW5kc1syXSA7CisgICAgICBpbnQgcmVnMCA9IFJFR05PIChvcGVy YW5kc1swXSksIHJlZzEgPSAtMiA7CisgICAgICBydHggYWRkciA7CisKKwlp ZiAoTUVNX1AgKG9wZXJhbmRzWzFdKSkKKwkgIGFkZHIgPSBYRVhQIChvcGVy YW5kc1sxXSwgMCk7CisJZWxzZQorCSAgYWRkciA9IE5VTExfUlRYIDsKKwlz d2l0Y2ggKEdFVF9DT0RFIChhZGRyKSkKKwkgIHsKKwkgICAgY2FzZSBSRUc6 CisJICAgIGNhc2UgU1VCUkVHOgorCSAgICAgIHJlZzEgPSBSRUdOTyAoYWRk cik7CisJICAgICAgYnJlYWsgOworCSAgICBjYXNlIFBMVVM6CisJICAgICAg c3dpdGNoIChHRVRfQ09ERSAoWEVYUCAoYWRkciwgMCkpKSB7CisJCWNhc2Ug UkVHOgorCQljYXNlIFNVQlJFRzoKKwkJICByZWcxID0gUkVHTk8gKFhFWFAg KGFkZHIsIDApKTsKKwkJICBicmVhayA7CisJCWNhc2UgUExVUzoKKwkJICBy ZWcxID0gUkVHTk8gKFhFWFAgKFhFWFAgKGFkZHIsIDApLCAwKSk7CisJCSAg YnJlYWsgOworCQlkZWZhdWx0OgorCQkgIGluZm9ybSAoREVDTF9TT1VSQ0Vf TE9DQVRJT04gKGNmdW4tPmRlY2wpLCAidW5leHBlY3RlZCBleHByZXNzaW9u OyBhZGRyOiIpOworCQkgIGRlYnVnX3J0eCAoYWRkcik7CisJCSAgaW5mb3Jt IChERUNMX1NPVVJDRV9MT0NBVElPTiAoY2Z1bi0+ZGVjbCksICJvcGVyYW5k c1sxXToiKTsKKwkJICBkZWJ1Z19ydHggKG9wZXJhbmRzWzFdKTsKKwkJICBp bmZvcm0gKERFQ0xfU09VUkNFX0xPQ0FUSU9OIChjZnVuLT5kZWNsKSwgImdl bmVyYXRlZCBjb2RlIG1pZ2h0IG5vdyB3b3JrXG4iKTsKKwkJICBicmVhayA7 fQorCSAgICAgIGJyZWFrIDsKKwkgICAgZGVmYXVsdDoKKwkgICAgICBicmVh ayA7CisJICB9CisKKwl4b3BlcmFuZHNbMF0gPSBnZW5fcnR4X1JFRyAoU0lt b2RlLCByZWcwICsgMik7CisJeG9wZXJhbmRzWzFdID0gb2Zmc2V0X2FkZHJl c3MgKG9wZXJhbmRzWzFdLCBHRU5fSU5UICg0KSwgMik7CisJZ2NjX2Fzc2Vy dCAoKHJlZzAgKyAxKSAhPSByZWcxKTsKKwlpZiAocmVnMCAhPSByZWcxICAm JiAgKHJlZzEgKyAxKSAhPSByZWcwKQorCSAgeworCSAgICBvdXRwdXRfYXNt X2luc24gKCJsb2FkZFx0JTEsICUwIiwgb3BlcmFuZHMpOworCSAgICBvdXRw dXRfYXNtX2luc24gKCJsb2FkZFx0JTEsICUwIiwgeG9wZXJhbmRzKTsKKwkg IH0KKwllbHNlCisJICB7CisJICAgIG91dHB1dF9hc21faW5zbiAoImxvYWRk XHQlMSwgJTAiLCB4b3BlcmFuZHMpOworCSAgICBvdXRwdXRfYXNtX2luc24g KCJsb2FkZFx0JTEsICUwIiwgb3BlcmFuZHMpOworCSAgfX0KKyAgICBlbHNl CisgICAgICB7CisJcnR4IHhvcGVyYW5kc1syXSA7CisJeG9wZXJhbmRzWzBd ID0gb2Zmc2V0X2FkZHJlc3MgKG9wZXJhbmRzWzBdLCBHRU5fSU5UICg0KSwg Mik7CisJeG9wZXJhbmRzWzFdID0gZ2VuX3J0eF9SRUcgKFNJbW9kZSwgUkVH Tk8gKG9wZXJhbmRzWzFdKSArIDIpOworCW91dHB1dF9hc21faW5zbiAoInN0 b3JkXHQlMSwgJTAiLCBvcGVyYW5kcyk7CisgICAJb3V0cHV0X2FzbV9pbnNu ICgic3RvcmRcdCUxLCAlMCIsIHhvcGVyYW5kcyk7CisgICAgICB9CisgICAg cmV0dXJuICIiIDsKKyAgfQorICBbKHNldF9hdHRyICJsZW5ndGgiICI0LCA8 bEltbUFyaXRoRD4sIDxsSW1tQXJpdGhEPiwgPGxJbW1Bcml0aEQ+IildCisp CisKKzsgQWxsIGxvbmcgKFNJLCBTRikgcmVnaXN0ZXIgbW92ZSwgbG9hZCBh bmQgc3RvcmUgb3BlcmF0aW9ucworOyBUaGUgcHJpbnRfb3BlcmFuZCB3aWxs IHRha2UgY2FyZSBvZiBwcmludGluZyB0aGUgcmVnaXN0ZXIgcGFpciAKKzsg d2hlbiBtb2RlIGlzIFNJL1NGIGFuZCByZWdpc3RlciBpcyBpbiBTSE9SVF9S RUdTCisoZGVmaW5lX2luc24gIiptb3Y8bW9kZT5fbG9uZyIKKyAgWyhzZXQg KG1hdGNoX29wZXJhbmQ6TE9ORyAwICJub25pbW1lZGlhdGVfb3BlcmFuZCIg Ij1yLCByLCByLCBtIikKKwkobWF0Y2hfb3BlcmFuZDpMT05HIDEgImdlbmVy YWxfb3BlcmFuZCIgInIsIDxpRj4sIG0sIHIiKSldCisgICJyZWdpc3Rlcl9v cGVyYW5kIChvcGVyYW5kc1swXSwgPE1PREU+bW9kZSkKKyAgIHx8IHJlZ2lz dGVyX29wZXJhbmQgKG9wZXJhbmRzWzFdLCA8TU9ERT5tb2RlKSIKKyAgIkAK KyAgbW92PHRJc2E+XHQlMSwgJTAKKyAgbW92PHRJc2E+XHQlMSwgJTAKKyAg bG9hZDx0SXNhPlx0JTEsICUwCisgIHN0b3I8dElzYT5cdCUxLCAlMCIKKyAg WyhzZXRfYXR0ciAibGVuZ3RoIiAiMiw8bEltbUFyaXRoPiw8bEltbUFyaXRo Piw8bEltbUFyaXRoPiIpXQorKQorCis7OyBBbGwgc2hvcnQgKFFJLCBISSkg cmVnaXN0ZXIgbW92ZSwgbG9hZCBhbmQgc3RvcmUgb3BlcmF0aW9ucworKGRl ZmluZV9pbnNuICIqbW92PG1vZGU+X3Nob3J0IgorICBbKHNldCAobWF0Y2hf b3BlcmFuZDpTSE9SVCAwICJub25pbW1lZGlhdGVfb3BlcmFuZCIgIj1yLCBy LCByLCBtLCBtIikKKwkobWF0Y2hfb3BlcmFuZDpTSE9SVCAxICJnZW5lcmFs X29wZXJhbmQiICJyLCA8aUY+LCBtLCByLCA8TEw+IikpXQorICAiKHJlZ2lz dGVyX29wZXJhbmQgKG9wZXJhbmRzWzBdLCA8TU9ERT5tb2RlKSkKKyAgICB8 fCAoc3RvcmVfb3BlcmFuZCAob3BlcmFuZHNbMF0sIDxNT0RFPm1vZGUpCisJ JiYgKHJlZ2lzdGVyX29wZXJhbmQgKG9wZXJhbmRzWzFdLCA8TU9ERT5tb2Rl KQorCSAgICB8fCB1NGJpdHNfb3BlcmFuZCAob3BlcmFuZHNbMV0sIDxNT0RF Pm1vZGUpKSkiCisgICJACisgIG1vdjx0SXNhPlx0JTEsICUwCisgIG1vdjx0 SXNhPlx0JTEsICUwCisgIGxvYWQ8dElzYT5cdCUxLCAlMAorICBzdG9yPHRJ c2E+XHQlMSwgJTAKKyAgc3Rvcjx0SXNhPlx0JTEsICUwIgorICBbKHNldF9h dHRyICJsZW5ndGgiICIyLDxsSW1tQXJpdGg+LDxsSW1tQXJpdGg+LDxsSW1t QXJpdGg+LDxsSW1tQXJpdGg+IildCispCisKKzs7ICBDb21wYXJlIEluc3Ry dWN0aW9ucworOyBJbnN0cnVjdGlvbiBnZW5lcmF0ZWQgY29tcGFyZXMgdGhl IG9wZXJhbmRzIGluIHJldmVyc2Ugb3JkZXIKKzsgVGhlcmVmb3JlLCB3aGls ZSBwcmludGluZyB0aGUgYXNtLCB0aGUgcmV2ZXJzZSBvZiB0aGUKKzsgY29t cGFyZSBjb25kaXRpb24gc2hhbGwgYmUgcHJpbnRlZC4KKyhkZWZpbmVfaW5z biAiY2JyYW5jaDxtb2RlPjQiCisgIFsoc2V0IChwYykKKwkoaWZfdGhlbl9l bHNlIChtYXRjaF9vcGVyYXRvciAwICJvcmRlcmVkX2NvbXBhcmlzb25fb3Bl cmF0b3IiCisJCSAgICAgIFsobWF0Y2hfb3BlcmFuZDpDUjE2SU0gMSAicmVn aXN0ZXJfb3BlcmFuZCIgInIsciIpCisJCSAgICAgICAobWF0Y2hfb3BlcmFu ZDpDUjE2SU0gMiAibm9ubWVtb3J5X29wZXJhbmQiICJyLG4iKV0pCisJCSAg ICAgICAobGFiZWxfcmVmIChtYXRjaF9vcGVyYW5kIDMgIiIgIiIpKQorICAg ICAgICAgICAgICAgICAgICAgIChwYykpKQorICAgKGNsb2JiZXIgKGNjMCkp XQorICAiIgorICAiY21wPHRJc2E+XHQlMiwgJTFcO2IlZDBcdCVsMyIKKyAg WyhzZXRfYXR0ciAibGVuZ3RoIiAiNiw2IildCispCisKKyhkZWZpbmVfZXhw YW5kICJjbXA8bW9kZT4iCisgIFsocGFyYWxsZWwgWyhzZXQgKGNjMCkKKyAg ICAoY29tcGFyZSAobWF0Y2hfb3BlcmFuZDpDUjE2SU0gMCAicmVnaXN0ZXJf b3BlcmFuZCIgIiIpCisJICAgICAobWF0Y2hfb3BlcmFuZDpDUjE2SU0gMSAi bm9ubWVtb3J5X29wZXJhbmQiICIiKSkpCisgICAgKGNsb2JiZXIgKG1hdGNo X3NjcmF0Y2g6SEkgMiAiPXIiKSldICkgXQorICAiIgorICAiIikKKworOzsg IFNjb25kIEluc3RydWN0aW9ucworKGRlZmluZV9leHBhbmQgImNzdG9yZTxt b2RlPjQiCisgIFsoc2V0IChjYzApCisJKGNvbXBhcmUgKG1hdGNoX29wZXJh bmQ6Q1IxNklNIDIgInJlZ2lzdGVyX29wZXJhbmQiICIiKQorCQkgKG1hdGNo X29wZXJhbmQ6Q1IxNklNIDMgIm5vbm1lbW9yeV9vcGVyYW5kIiAiIikpKQor ICAgKHNldCAobWF0Y2hfb3BlcmFuZDpISSAwICJyZWdpc3Rlcl9vcGVyYW5k IikKKwkobWF0Y2hfb3BlcmF0b3I6SEkgMSAib3JkZXJlZF9jb21wYXJpc29u X29wZXJhdG9yIgorCVsoY2MwKSAoY29uc3RfaW50IDApXSkpXQorICAiIgor ICAiIgorKQorCisoZGVmaW5lX2luc24gIipjbXA8bW9kZT5faW5zbiIKKyAg WyhzZXQgKGNjMCkKKwkoY29tcGFyZSAobWF0Y2hfb3BlcmFuZDpDUjE2SU0g MCAicmVnaXN0ZXJfb3BlcmFuZCIgInIsciIpCisJCSAobWF0Y2hfb3BlcmFu ZDpDUjE2SU0gMSAibm9ubWVtb3J5X29wZXJhbmQiICJyLG4iKSkpXQorICAi IgorICAiY21wPHRJc2E+XHQlMSwgJTAiCisgIFsoc2V0X2F0dHIgImxlbmd0 aCIgIjIsNCIpXQorKQorCisoZGVmaW5lX2luc24gInNDT05EX2ludGVybmFs IgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpISSAwICJyZWdpc3Rlcl9vcGVy YW5kIiAiPXIiKQorCShtYXRjaF9vcGVyYXRvcjpISSAxICJvcmRlcmVkX2Nv bXBhcmlzb25fb3BlcmF0b3IiCisJWyhjYzApIChjb25zdF9pbnQgMCldKSld CisgICIiCisgICJzJWQxXHQlMCIKKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAi MiIpXQorKQorCis7OyAgSnVtcHMgYW5kIEJyYW5jaGVzCisoZGVmaW5lX2lu c24gImluZGlyZWN0X2p1bXBfcmV0dXJuIgorICBbKHBhcmFsbGVsCisgICAg WyhzZXQgKHBjKQorCSAgKHJlZzpTSSBSQV9SRUdOVU0pKQorICAgKHJldHVy bildKQorICBdCisgICJyZWxvYWRfY29tcGxldGVkIgorICAianVtcFx0IChy YSkiCisgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjIiKV0KKykKKworKGRlZmlu ZV9pbnNuICJqdW1wX3JldHVybiIKKyAgWyhwYXJhbGxlbAorICAgIFsodW5z cGVjOlNJIFsoY29uc3RfaW50IDApXSBVTlNQRUNfUkVUVVJOX0FERFIpCisg ICAgIChyZXR1cm4pXSldCisgICJyZWxvYWRfY29tcGxldGVkIgorICAianVt cFx0KHJhKSIKKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiMiIpXQorKQorCiso ZGVmaW5lX2luc24gImluZGlyZWN0X2p1bXAiCisgIFsoc2V0IChwYykKKwko bWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdfb3Jfc3ltX29wZXJhbmQiICJyLGki KSldCisgICIiCisgICJACisgIGp1bXBcdCUwCisgIGJyXHQlYTAiCisgIFso c2V0X2F0dHIgImxlbmd0aCIgIjIsNiIpXQorKQorCisoZGVmaW5lX2luc24g ImludGVycnVwdF9yZXR1cm4iCisgIFsocGFyYWxsZWwKKyAgICBbKHVuc3Bl Y192b2xhdGlsZSBbKGNvbnN0X2ludCAwKV0gMCkKKyAgIChyZXR1cm4pXSld CisgICIiCisgIHsKKyAgICByZXR1cm4gY3IxNl9wcmVwYXJlX3B1c2hfcG9w X3N0cmluZyAoMSk7CisgIH0KKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiMTQi KV0KKykKKworKGRlZmluZV9pbnNuICJqdW1wX3RvX2ltbSIKKyAgWyhzZXQg KHBjKQorCShtYXRjaF9vcGVyYW5kIDAgImp1bXBfaW1tX29wZXJhbmQiICJp IikpXQorICAiIgorICAiYnJcdCVjMCIKKyAgWyhzZXRfYXR0ciAibGVuZ3Ro IiAiNiIpXQorKQorCisoZGVmaW5lX2luc24gImp1bXAiCisgIFsoc2V0IChw YykKKwkobGFiZWxfcmVmIChtYXRjaF9vcGVyYW5kIDAgIiIgIiIpKSldCisg ICIiCisgICJiclx0JWwwIgorICBbKHNldF9hdHRyICJsZW5ndGgiICI2Iild CispCisKKzs7ICBGdW5jdGlvbiBQcm9sb2d1ZSBhbmQgRXBpbG9ndWUKKyhk ZWZpbmVfZXhwYW5kICJwcm9sb2d1ZSIKKyAgWyhjb25zdF9pbnQgMCldCisg ICIiCisgIHsKKyAgICBjcjE2X2V4cGFuZF9wcm9sb2d1ZSAoKTsKKyAgICBE T05FOworICB9CispCisKKyhkZWZpbmVfaW5zbiAicHVzaF9mb3JfcHJvbG9n dWUiCisgIFsocGFyYWxsZWwKKyAgICBbKHNldCAocmVnOlNJIFNQX1JFR05V TSkKKwkgIChtaW51czpTSSAocmVnOlNJIFNQX1JFR05VTSkKKwkJICAgICht YXRjaF9vcGVyYW5kOlNJIDAgImltbWVkaWF0ZV9vcGVyYW5kIiAiaSIpKSld KV0KKyAgInJlbG9hZF9jb21wbGV0ZWQiCisgIHsKKyAgICByZXR1cm4gY3Ix Nl9wcmVwYXJlX3B1c2hfcG9wX3N0cmluZyAoMCk7CisgIH0KKyAgWyhzZXRf YXR0ciAibGVuZ3RoIiAiNCIpXQorKQorCisoZGVmaW5lX2V4cGFuZCAiZXBp bG9ndWUiCisgIFsocmV0dXJuKV0KKyAgIiIKKyAgeworICAgIGNyMTZfZXhw YW5kX2VwaWxvZ3VlICgpOworICAgIERPTkU7CisgIH0KKykKKworKGRlZmlu ZV9pbnNuICJwb3BfYW5kX3BvcHJldF9yZXR1cm4iCisgIFsocGFyYWxsZWwK KyAgICBbKHNldCAocmVnOlNJIFNQX1JFR05VTSkKKwkgIChwbHVzOlNJIChy ZWc6U0kgU1BfUkVHTlVNKQorCQkgICAobWF0Y2hfb3BlcmFuZDpTSSAwICJp bW1lZGlhdGVfb3BlcmFuZCIgImkiKSkpCisgICAgICh1c2UgKHJlZzpTSSBS QV9SRUdOVU0pKQorICAgICAocmV0dXJuKV0pCisgIF0KKyAgInJlbG9hZF9j b21wbGV0ZWQiCisgIHsKKyAgICByZXR1cm4gY3IxNl9wcmVwYXJlX3B1c2hf cG9wX3N0cmluZyAoMSk7CisgIH0KKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAi NCIpXQorKQorCisoZGVmaW5lX2luc24gInBvcHJldF9SQV9yZXR1cm4iCisg IFsocGFyYWxsZWwKKyAgICBbKHVzZSAocmVnOlNJIFJBX1JFR05VTSkpCisg ICAgIChyZXR1cm4pXSkKKyAgXQorICAicmVsb2FkX2NvbXBsZXRlZCIKKyAg InBvcHJldFx0cmEiCisgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjIiKV0KKykK KworOzsgIFRhYmxlIEp1bXAKKyhkZWZpbmVfaW5zbiAidGFibGVqdW1wIgor ICBbKHNldCAocGMpCisJKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJf b3BlcmFuZCIgInIiKSkKKyAgICh1c2UgKGxhYmVsX3JlZjpTSSAobWF0Y2hf b3BlcmFuZCAxICIiICIiKSkpXQorICAiIWZsYWdfcGljIgorICAianVtcFx0 JTAiCisgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjIiKV0KKykKKworOzsgIENh bGwgSW5zdHJ1Y3Rpb25zCisoZGVmaW5lX2V4cGFuZCAiY2FsbCIKKyAgWyhj YWxsIChtYXRjaF9vcGVyYW5kOlFJIDAgIm1lbW9yeV9vcGVyYW5kIiAiIikK KwkgKG1hdGNoX29wZXJhbmQgMSAiIiAiIikpXQorICAiIgorICB7CisgICAg aWYgKGZsYWdfcGljICYmICEgbGVnaXRpbWF0ZV9waWNfb3BlcmFuZF9wIChv cGVyYW5kc1swXSkpCisgICAgICB7CisJb3BlcmFuZHNbMF0gPSBnZW5fY29u c3RfbWVtIChRSW1vZGUsCisJbGVnaXRpbWl6ZV9waWNfYWRkcmVzcyAoWEVY UCAob3BlcmFuZHNbMF0sIDApLCBQbW9kZSwgMCkpOworCWVtaXRfY2FsbF9p bnNuIChnZW5fY3IxNl9jYWxsIChvcGVyYW5kc1swXSwgb3BlcmFuZHNbMV0p KTsKKyAgICAgIH0KKyAgICBlbHNlCisgICAgICBlbWl0X2NhbGxfaW5zbiAo Z2VuX2NyMTZfY2FsbCAob3BlcmFuZHNbMF0sIG9wZXJhbmRzWzFdKSk7Cisg ICAgICBET05FOworICB9CispCisKKyhkZWZpbmVfZXhwYW5kICJjcjE2X2Nh bGwiCisgIFsocGFyYWxsZWwKKyAgICBbKGNhbGwgKG1hdGNoX29wZXJhbmQ6 UUkgMCAibWVtb3J5X29wZXJhbmQiICIiKQorCSAgIChtYXRjaF9vcGVyYW5k IDEgIiIgIiIpKQorICAgKGNsb2JiZXIgKHJlZzpTSSBSQV9SRUdOVU0pKV0p XQorICAiIgorICAiIgorKQorCisoZGVmaW5lX2luc24gImNyMTZfY2FsbF9p bnNuX2JyYW5jaF9waWMiCisgIFsoY2FsbCAobWVtOlFJIChtYXRjaF9vcGVy YW5kOlNJIDAgImNhbGxfaW1tX29wZXJhbmQiICJpIikpCisJIChtYXRjaF9v cGVyYW5kIDEgIiIgIiIpKQorICAgKGNsb2JiZXIgKG1hdGNoX29wZXJhbmQ6 U0kgMiAicmVnaXN0ZXJfb3BlcmFuZCIgIityIikpXQorICAiZmxhZ19waWMg PT0gRkFSX1BJQyIKKyAgeworICAgIGlmIChHRVRfQ09ERSAob3BlcmFuZHNb MF0pICE9IENPTlNUX0lOVCkKKyAgICAgIHJldHVybiAibG9hZGRcdCVnMCwg JTIgXG5cdGphbCAlMiI7CisgICAgZWxzZQorICAgICAgcmV0dXJuICJqYWwg JTIiOworICB9CisgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjgiKV0KKykKKwor KGRlZmluZV9pbnNuICJjcjE2X2NhbGxfaW5zbl9icmFuY2giCisgIFsoY2Fs bCAobWVtOlFJIChtYXRjaF9vcGVyYW5kOlNJIDAgImNhbGxfaW1tX29wZXJh bmQiICJpIikpCisJIChtYXRjaF9vcGVyYW5kIDEgIiIgIiIpKQorICAgKGNs b2JiZXIgKG1hdGNoX29wZXJhbmQ6U0kgMiAicmVnaXN0ZXJfb3BlcmFuZCIg IityIikpXQorICAiZmxhZ19waWMgPT0gMCB8fCBmbGFnX3BpYyA9PSBORUFS X1BJQyIKKyAgeworICAgIC8qIFByaW50IHRoZSBpbW1lZGlhdGUgYWRkcmVz cyBmb3IgYmFsIAorICAgICAgICdiJyBpcyB1c2VkIGluc3RlYWQgb2YgJ2En IHRvIGF2b2lkIGNvbXBpbGVyIGNhbGxpbmcKKyAgICAgICB0aGUgR09fSUZf TEVHSVRJTUFURV9BRERSRVNTIHdoaWNoIGNhbm5vdAorICAgICAgIHBlcmZv cm0gY2hlY2tzIG9uIGNvbnN0X2ludCBjb2RlIGFkZHJlc3NlcyBhcyBpdAor ICAgICAgIGFzc3VtZXMgYWxsIGNvbnN0X2ludCBhcmUgZGF0YSBhZGRyZXNz ZXMuCisgICAgKi8KKyAgICBpZiAoR0VUX0NPREUgKG9wZXJhbmRzWzBdKSAh PSBDT05TVF9JTlQpCisgICAgICByZXR1cm4gImJhbCAocmEpLCAlYTAiOwor ICAgIGVsc2UKKyAgICAgIG9wZXJhbmRzWzRdID0gR0VOX0lOVCAoKElOVFZB TCAob3BlcmFuZHNbMF0pKT4+MSk7CisgICAgICByZXR1cm4gIm1vdmRcdCVn NCxcdChyMSxyMClcblx0amFsXHQocjEscjApIjsJCisgIH0KKyAgWyhzZXRf YXR0ciAibGVuZ3RoIiAiNiIpXQorKQorCisoZGVmaW5lX2luc24gImNyMTZf Y2FsbF9pbnNuX2p1bXAiCisgIFsoY2FsbCAobWVtOlFJIChtYXRjaF9vcGVy YW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICJyIikpCisJIChtYXRjaF9v cGVyYW5kIDEgIiIgIiIpKQorICAgKGNsb2JiZXIgKG1hdGNoX29wZXJhbmQ6 U0kgMiAicmVnaXN0ZXJfb3BlcmFuZCIgIityIikpXQorICAiIgorICAiamFs XHQlMCIKKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiMiIpXQorKQorCis7OyAg Q2FsbCBWYWx1ZSBJbnN0cnVjdGlvbnMKKworKGRlZmluZV9leHBhbmQgImNh bGxfdmFsdWUiCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kIDAgImdlbmVyYWxf b3BlcmFuZCIgIiIpCisJKGNhbGwgKG1hdGNoX29wZXJhbmQ6UUkgMSAibWVt b3J5X29wZXJhbmQiICIiKQorCSAgICAgIChtYXRjaF9vcGVyYW5kIDIgIiIg IiIpKSldCisgICIiCisgIHsKKyAgICBpZiAoZmxhZ19waWMgJiYgIWxlZ2l0 aW1hdGVfcGljX29wZXJhbmRfcCAob3BlcmFuZHNbMV0pKQorICAgICAgewor CW9wZXJhbmRzWzFdID0gZ2VuX2NvbnN0X21lbSAoUUltb2RlLAorCWxlZ2l0 aW1pemVfcGljX2FkZHJlc3MgKFhFWFAgKG9wZXJhbmRzWzFdLCAwKSwgUG1v ZGUsIDApKTsKKwllbWl0X2NhbGxfaW5zbiAoZ2VuX2NyMTZfY2FsbF92YWx1 ZSAob3BlcmFuZHNbMF0sIG9wZXJhbmRzWzFdLCBvcGVyYW5kc1syXSkpOwor ICAgICAgfQorICAgIGVsc2UKKwllbWl0X2NhbGxfaW5zbiAoZ2VuX2NyMTZf Y2FsbF92YWx1ZSAob3BlcmFuZHNbMF0sIG9wZXJhbmRzWzFdLCBvcGVyYW5k c1syXSkpOworICAgIERPTkU7CisgIH0KKykKKworKGRlZmluZV9leHBhbmQg ImNyMTZfY2FsbF92YWx1ZSIKKyAgWyhwYXJhbGxlbAorICAgIFsoc2V0ICht YXRjaF9vcGVyYW5kIDAgImdlbmVyYWxfb3BlcmFuZCIgIiIpCisJICAoY2Fs bCAobWF0Y2hfb3BlcmFuZCAxICJtZW1vcnlfb3BlcmFuZCIgIiIpCisJCSht YXRjaF9vcGVyYW5kIDIgIiIgIiIpKSkKKyAgICAgKGNsb2JiZXIgKHJlZzpT SSBSQV9SRUdOVU0pKV0pXQorICAiIgorICAiIgorKQorCisoZGVmaW5lX2lu c24gImNyMTZfY2FsbF92YWx1ZV9pbnNuX2JyYW5jaF9waWMiCisgIFsoc2V0 IChtYXRjaF9vcGVyYW5kIDAgIiIgIj1nIikKKwkoY2FsbCAobWVtOlFJICht YXRjaF9vcGVyYW5kOlNJIDEgImNhbGxfaW1tX29wZXJhbmQiICJpIikpCisJ ICAgICAgKG1hdGNoX29wZXJhbmQgMiAiIiAiIikpKQorICAgKGNsb2JiZXIg KG1hdGNoX29wZXJhbmQ6U0kgMyAicmVnaXN0ZXJfb3BlcmFuZCIgIityIikp XQorICAiZmxhZ19waWMgPT0gRkFSX1BJQyIKKyAgeworICAgIGlmIChHRVRf Q09ERSAob3BlcmFuZHNbMV0pICE9IENPTlNUX0lOVCkKKyAgICAgIHJldHVy biAibG9hZGRcdCVnMSwgJTMgXG5cdGphbCAlMyI7CisgICAgZWxzZQorICAg ICAgcmV0dXJuICJqYWwgJTMiOworICB9CisgIFsoc2V0X2F0dHIgImxlbmd0 aCIgIjgiKV0KKykKKworKGRlZmluZV9pbnNuICJjcjE2X2NhbGxfdmFsdWVf aW5zbl9icmFuY2giCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kIDAgIiIgIj1n IikKKwkoY2FsbCAobWVtOlFJIChtYXRjaF9vcGVyYW5kOlNJIDEgImNhbGxf aW1tX29wZXJhbmQiICJpIikpCisJICAgICAgKG1hdGNoX29wZXJhbmQgMiAi IiAiIikpKQorICAgKGNsb2JiZXIgKG1hdGNoX29wZXJhbmQ6U0kgMyAicmVn aXN0ZXJfb3BlcmFuZCIgIityIikpXQorICAiZmxhZ19waWMgPT0gMCB8fCBm bGFnX3BpYyA9PSBORUFSX1BJQyIKKyAgeworICAgIC8qIFByaW50IHRoZSBp bW1lZGlhdGUgYWRkcmVzcyBmb3IgYmFsIAorICAgICAgICdiJyBpcyB1c2Vk IGluc3RlYWQgb2YgJ2EnIHRvIGF2b2lkIGNvbXBpbGVyIGNhbGxpbmcKKyAg ICAgICB0aGUgR09fSUZfTEVHSVRJTUFURV9BRERSRVNTIHdoaWNoIGNhbm5v dAorICAgICAgIHBlcmZvcm0gY2hlY2tzIG9uIGNvbnN0X2ludCBjb2RlIGFk ZHJlc3NlcyBhcyBpdAorICAgICAgIGFzc3VtZXMgYWxsIGNvbnN0X2ludCBh cmUgZGF0YSBhZGRyZXNzZXMuCisgICAgKi8KKyAgICBpZiAoR0VUX0NPREUg KG9wZXJhbmRzWzFdKSAhPSBDT05TVF9JTlQpIAorICAgICAgcmV0dXJuICJi YWwgKHJhKSwgJWExIjsKKyAgICBlbHNlCisgICAgICByZXR1cm4gImJhbCAo cmEpLCAlYjEiOwkKKyAgfQorICBbKHNldF9hdHRyICJsZW5ndGgiICI2Iild CispCisKKyhkZWZpbmVfaW5zbiAiY3IxNl9jYWxsX3ZhbHVlX2luc25fanVt cCIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQgMCAiIiAiPWciKQorCShjYWxs IChtZW06UUkgKG1hdGNoX29wZXJhbmQ6U0kgMSAicmVnaXN0ZXJfb3BlcmFu ZCIgInIiKSkKKwkgICAgICAobWF0Y2hfb3BlcmFuZCAyICIiICIiKSkpCisg ICAoY2xvYmJlciAobWF0Y2hfb3BlcmFuZDpTSSAzICJyZWdpc3Rlcl9vcGVy YW5kIiAiK3IiKSldCisgICIiCisgICJqYWxcdCUxIgorICBbKHNldF9hdHRy ICJsZW5ndGgiICIyIildCispCisKKzs7ICBOb3AKKyhkZWZpbmVfaW5zbiAi bm9wIgorICBbKGNvbnN0X2ludCAwKV0KKyAgIiIKKyAgIm5vcC90IgorKQor Cis7OyBQSUMKKy8qIFdoZW4gZ2VuZXJhdGluZyBwaWMsIHdlIG5lZWQgdG8g bG9hZCB0aGUgc3ltYm9sIG9mZnNldCBpbnRvIGEgcmVnaXN0ZXIuCisgICBT byB0aGF0IHRoZSBvcHRpbWl6ZXIgZG9lcyBub3QgY29uZnVzZSB0aGlzIHdp dGggYSBub3JtYWwgc3ltYm9sIGxvYWQKKyAgIHdlIHVzZSBhbiB1bnNwZWMu ICBUaGUgb2Zmc2V0IHdpbGwgYmUgbG9hZGVkIGZyb20gYSBjb25zdGFudCBw b29sIGVudHJ5LAorICAgc2luY2UgdGhhdCBpcyB0aGUgb25seSB0eXBlIG9m IHJlbG9jYXRpb24gd2UgY2FuIHVzZS4gICovCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgCisoZGVmaW5lX2luc24gInVuc3BlY19icm9f YWRkciIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJf b3BlcmFuZCIgIj1yIikKKwkodW5zcGVjOlNJIFsobWF0Y2hfb3BlcmFuZCAx ICIiICIiKV0gVU5TUEVDX1BJQ19BRERSKSldCisgICIiCisgICJtb3ZkIFx0 JWYxLCAlMCIKKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiNCIpXQorKQorCiso ZGVmaW5lX2luc24gInVuc3BlY19nb3RfYWRkciIKKyAgWyhzZXQgKG1hdGNo X29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikKKwkodW5z cGVjOlNJIFsobWF0Y2hfb3BlcmFuZCAxICIiICIiKV0gVU5TUEVDX1BJQ19M T0FEX0FERFIpKV0KKyAgIiIKKyAgImxvYWRkIFx0JWcxLCAlMCIKKyAgWyhz ZXRfYXR0ciAibGVuZ3RoIiAiNiIpXQorKQorCis7OyBTaGFyZWQgRkxBVAor KGRlZmluZV9pbnNuICJ1bnNwZWNfbGlicmFyeV9vZmZzZXQiCisgIFsoY29u c3RfaW50IFVOU1BFQ19MSUJSQVJZX09GRlNFVCldCisgICIiCisgICJwdXNo IFx0JDIsIHIwO1xuXHRtb3ZkIFx0JF9fY3VycmVudF9zaGFyZWRfbGlicmFy eV9yMTJfb2Zmc2V0XywgKHIxLHIwKTtcblx0bG9hZGQgXHRbcjEyXTAocjEs cjApLCAocjEyKTtcblx0cG9wIFx0JDIsIHIwXG5cdCIKKyAgWyhzZXRfYXR0 ciAibGVuZ3RoIiAiMTIiKV0KKykKKworKGRlZmluZV9pbnNuICJ1bnNwZWNf c2hfbGliX3B1c2hfcjEyIgorICBbKGNvbnN0X2ludCBVTlNQRUNfU0hfTElC X1BVU0hfUjEyKV0KKyAgIiIKKyAgInB1c2ggXHQkMiwgcjEyIgorICBbKHNl dF9hdHRyICJsZW5ndGgiICIyIildCispCisKKyhkZWZpbmVfaW5zbiAidW5z cGVjX3NoX2xpYl9wb3BfcjEyIgorICBbKGNvbnN0X2ludCBVTlNQRUNfU0hf TElCX1BPUF9SMTIpXQorICAiIgorICAicG9wIFx0JDIsIHIxMiIKKyAgWyhz ZXRfYXR0ciAibGVuZ3RoIiAiMiIpXQorKQorCmRpZmYgLXVwck4gLXgnKi5v cmlnJyAteCcqLnJlaicgb3JpZy9nY2MvY29uZmlnL2NyMTYvY3IxNi5vcHQg bW9kL2djYy9jb25maWcvY3IxNi9jcjE2Lm9wdAotLS0gb3JpZy9nY2MvY29u ZmlnL2NyMTYvY3IxNi5vcHQJMTk3MC0wMS0wMSAwNTozMDowMC4wMDAwMDAw MDAgKzA1MzAKKysrIG1vZC9nY2MvY29uZmlnL2NyMTYvY3IxNi5vcHQJMjAx MS0wNC0wOCAxNjo0MzozNS4wMDAwMDAwMDAgKzA1MzAKQEAgLTAsMCArMSw1 OSBAQAorOyBPcHRpb25zIGZvciB0aGUgTmF0aW9uYWwgU2VtaWNvbmR1Y3Rv ciBDUjE2IHBvcnQgb2YgdGhlIGNvbXBpbGVyLgorOyBDb3B5cmlnaHQgKEMp IDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCis7IENvbnRy aWJ1dGVkIGJ5IEtQSVQgQ3VtbWlucyBJbmZvc3lzdGVtcyBMaW1pdGVkLgor OworOyBUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCis7Cis7IEdDQyBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5IGl0Cis7IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCis7IGJ5IHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChh dCB5b3VyCis7IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCis7Cis7IEdD QyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLCBidXQgV0lUSE9VVAorOyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkK Kzsgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYworOyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCis7Cis7IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCis7IGFsb25nIHdp dGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCis7 IDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworbXNpbQorVGFy Z2V0CistbXNpbSAgIFVzZSBzaW11bGF0b3IgcnVudGltZQorCittYml0LW9w cworVGFyZ2V0IFJlcG9ydCBNYXNrKEJJVF9PUFMpCitHZW5lcmF0ZSBTQklU LCBDQklUIGluc3RydWN0aW9ucworCittbWFjCitUYXJnZXQgUmVwb3J0IE1h c2soTUFDKQorU3VwcG9ydCBtdWx0aXBseSBhY2N1bXVsYXRlIGluc3RydWN0 aW9ucworCittZGVidWctYWRkcgorVGFyZ2V0IFJlamVjdE5lZ2F0aXZlIFZh cihUQVJHRVRfREVCVUdfQUREUikgVW5kb2N1bWVudGVkCisKK21kYXRhLW1v ZGVsPQorVGFyZ2V0IFJlamVjdE5lZ2F0aXZlIEpvaW5lZE9yTWlzc2luZyBW YXIoY3IxNl9kYXRhX21vZGVsKQorVHJlYXQgZGF0YSByZWZlcmVuY2VzIGFz IG5lYXIsIGZhciBvciBtZWRpdW0uIG1lZGl1bSBpcyBkZWZhdWx0CisKK21j cjE2YworVGFyZ2V0IFJlamVjdE5lZ2F0aXZlIE1hc2soQ1IxNkMpCitHZW5l cmF0ZSBjb2RlIGZvciBDUjE2QyBhcmNoaXRlY3R1cmUKKworbWNyMTZjcGx1 cworVGFyZ2V0IFJlamVjdE5lZ2F0aXZlIEludmVyc2VNYXNrKENSMTZDLENS MTZDUCkKK0dlbmVyYXRlIGNvZGUgZm9yIENSMTZDKyBhcmNoaXRlY3R1cmUg KERlZmF1bHQpCisKK21pbnQzMgorVGFyZ2V0IFJlamVjdE5lZ2F0aXZlIE1h c2soSU5UMzIpCitUcmVhdCBpbnRlZ2VycyBhcyAzMi1iaXQuCisKK21pZC1z aGFyZWQtbGlicmFyeQorVGFyZ2V0IFJlcG9ydCBNYXNrKElEX1NIQVJFRF9M SUJSQVJZKQorRW5hYmxlZCBJRCBiYXNlZCBzaGFyZWQgbGlicmFyeQorCitt c2hhcmVkLWxpYnJhcnktaWQ9CitUYXJnZXQgUmVqZWN0TmVnYXRpdmUgSm9p bmVkIFVJbnRlZ2VyIFZhcihjcjE2X2xpYnJhcnlfaWQpCitJRCBvZiBzaGFy ZWQgbGlicmFyeSB0byBidWlsZAorCmRpZmYgLXVwck4gLXgnKi5vcmlnJyAt eCcqLnJlaicgb3JpZy9nY2MvY29uZmlnL2NyMTYvY3IxNi1wcm90b3MuaCBt b2QvZ2NjL2NvbmZpZy9jcjE2L2NyMTYtcHJvdG9zLmgKLS0tIG9yaWcvZ2Nj L2NvbmZpZy9jcjE2L2NyMTYtcHJvdG9zLmgJMTk3MC0wMS0wMSAwNTozMDow MC4wMDAwMDAwMDAgKzA1MzAKKysrIG1vZC9nY2MvY29uZmlnL2NyMTYvY3Ix Ni1wcm90b3MuaAkyMDExLTA0LTA4IDE2OjQzOjM1LjAwMDAwMDAwMCArMDUz MApAQCAtMCwwICsxLDExMiBAQAorLyogUHJvdG90eXBlcyBmb3IgZXhwb3J0 ZWQgZnVuY3Rpb25zIGRlZmluZWQgaW4gY3IxNi5jCisgICBDb3B5cmlnaHQg KEMpIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBD b250cmlidXRlZCBieSBLUElUIEN1bW1pbnMgSW5mb3N5c3RlbXMgTGltaXRl ZC4KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCisgICBHQ0Mg aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyAgIGJ5IHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMs IG9yIChhdCB5b3VyCisgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor CisgICBHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgIEFOWSBXQVJSQU5UWTsg d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5U QUJJTElUWQorICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBm b3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2 ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor ICAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElm IG5vdCBzZWUKKyAgIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4g ICovCisKKyNpZm5kZWYgR0NDX0NSMTZfUFJPVE9TX0gKKyNkZWZpbmUgR0ND X0NSMTZfUFJPVE9TX0gKKworLyogUmVnaXN0ZXIgdXNhZ2UuICAqLworZXh0 ZXJuIGVudW0gcmVnX2NsYXNzIGNyMTZfcmVnbm9fcmVnX2NsYXNzIChpbnQp OworZXh0ZXJuIGludCBjcjE2X2hhcmRfcmVnbm9fbW9kZV9vayAoaW50IHJl Z25vLCBlbnVtIG1hY2hpbmVfbW9kZSk7CisKKy8qIFBhc3NpbmcgZnVuY3Rp b24gYXJndW1lbnRzLiAgKi8KK2V4dGVybiBpbnQgY3IxNl9mdW5jdGlvbl9h cmdfcmVnbm9fcCAoaW50KTsKKyNpZmRlZiBUUkVFX0NPREUKKworI2lmZGVm IFJUWF9DT0RFCisKK2V4dGVybiB2b2lkIGNyMTZfaW5pdF9jdW11bGF0aXZl X2FyZ3MgKENVTVVMQVRJVkVfQVJHUyAqLCB0cmVlLCBydHgpOworCisjZW5k aWYgLyogUlRYX0NPREUuICAqLworCisjZW5kaWYgLyogVFJFRV9DT0RFLiAg Ki8KKworLyogRW51bWVyYXRpb24gZ2l2aW5nIHRoZSB2YXJpb3VzIGRhdGEg bW9kZWxzIHdlIHN1cHBvcnQuICAqLworZW51bSBkYXRhX21vZGVsX3R5cGUK K3sKKyAgRE1fREVGQVVMVCwJCS8qIERlZmF1bHQgZGF0YSBtb2RlbCAoaW4g Q1IxNkMvQysgLSB1cCB0byAxNk0pLiAgKi8KKyAgRE1fTkVBUiwJCS8qIE5l YXIgZGF0YSBtb2RlbCAgICAoaW4gQ1IxNkMvQysgLSB1cCB0byAxTSkuICAq LworICBETV9GQVIsCQkvKiBGYXIgZGF0YSBtb2RlbCAgICAgKGluIENSMTZD KyAgIC0gdXAgdG8gNEcpCisJCQkgICAoaW4gQ1IxNkMgICAgLSB1cCB0byAx Nk0pLiAgKi8KKyAgSUxMRUdBTF9ETQkJLyogSWxsZWdhbCBkYXRhIG1vZGVs LiAgKi8KK307CisKKyNpZmRlZiBSVFhfQ09ERQorCisvKiBBZGRyZXNzaW5n IE1vZGVzLiAgKi8KK3N0cnVjdCBjcjE2X2FkZHJlc3MKK3sKKyAgcnR4IGJh c2U7CSAJLyogQmFzZSByZWdpc3RlcjogQW55IHJlZ2lzdGVyIG9yIHJlZ2lz dGVyIHBhaXIuICAqLworICBydHggaW5kZXg7CQkvKiBJbmRleCByZWdpc3Rl cjogSWYgb25lIGlzIHByZXNlbnQuICAqLworICBydHggZGlzcDsJCS8qIERp c3BsYWNlbWVudCBvciBBYnNvbHV0ZSBhZGRyZXNzLiAgKi8KKyAgZW51bSBk YXRhX21vZGVsX3R5cGUgZGF0YTsJLyogZGF0YSByZWYgdHlwZS4gICovCisg IGludCBjb2RlOwkJLyogV2hldGhlciB0aGUgYWRkcmVzcyBpcyBjb2RlIGFk ZHJlc3MuIAorCQkJICAgMCAtIGRhdGEsIDEgLSBjb2RlIGxhYmVsLCAyIC0g ZnVuY3Rpb24gbGFiZWwuICAqLworfTsKKworZW51bSBjcjE2X2FkZHJ0eXBl Cit7CisgIENSMTZfSU5WQUxJRCwKKyAgQ1IxNl9SRUdfUkVMLAorICBDUjE2 X1JFR1BfUkVMLAorICBDUjE2X0lOREVYX1JFR1BfUkVMLAorICBDUjE2X0FC U09MVVRFCit9OworCitleHRlcm4gdm9pZCBub3RpY2VfdXBkYXRlX2NjIFBB UkFNUyAoKHJ0eCkpOworZXh0ZXJuIGludCBjcjE2X29wZXJhbmRfYml0X3Bv cyAoaW50IHZhbCwgaW50IGJpdHZhbCk7CitleHRlcm4gdm9pZCBjcjE2X2Rl Y29tcG9zZV9jb25zdCAocnR4IHgsIGludCAqY29kZSwKKwkJCQkgIGVudW0g ZGF0YV9tb2RlbF90eXBlICpkYXRhLAorCQkJCSAgYm9vbCB0cmVhdF9hc19j b25zdCk7CitleHRlcm4gZW51bSBjcjE2X2FkZHJ0eXBlIGNyMTZfZGVjb21w b3NlX2FkZHJlc3MgKHJ0eCBhZGRyLAorCQkJCQkJICBzdHJ1Y3QgY3IxNl9h ZGRyZXNzICpvdXQsCisJCQkJCQkgIGJvb2wgZGVidWdfcHJpbnQsCisJCQkJ CQkgIGJvb2wgdHJlYXRfYXNfY29uc3QpOworZXh0ZXJuIGludCBjcjE2X2xl Z2l0aW1hdGVfYWRkcmVzc19wIChlbnVtIG1hY2hpbmVfbW9kZSwgcnR4LCBp bnQpOworZXh0ZXJuIGludCBjcjE2X2NvbnN0X2RvdWJsZV9vayAocnR4IG9w KTsKK2V4dGVybiBpbnQgbGVnaXRpbWF0ZV9waWNfb3BlcmFuZF9wIChydHgp OworZXh0ZXJuIHJ0eCBsZWdpdGltaXplX3BpY19hZGRyZXNzIChydHgsIGVu dW0gbWFjaGluZV9tb2RlLCBydHgpOworCisvKiBJbnN0cnVjdGlvbiBvdXRw dXQuICAqLworZXh0ZXJuIHZvaWQgY3IxNl9wcmludF9vcGVyYW5kIChGSUxF ICosIHJ0eCwgaW50KTsKK2V4dGVybiB2b2lkIGNyMTZfcHJpbnRfb3BlcmFu ZF9hZGRyZXNzIChGSUxFICosIHJ0eCk7CitleHRlcm4gdm9pZCBjcjE2X2V4 cGFuZF9tb3ZtZW1fc2luZ2xlIChydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCwK KwkJCQkgICAgICAgdW5zaWduZWQgSE9TVF9XSURFX0lOVCAqKTsKK2V4dGVy biBpbnQgY3IxNl9leHBhbmRfbW92bWVtIChydHgsIHJ0eCwgcnR4LCBydHgp OworZXh0ZXJuIHJ0eCBnb3Rfb3BlcmFuZCAocnR4LCBlbnVtIG1hY2hpbmVf bW9kZSk7CitleHRlcm4gcnR4IGJyb19vcGVyYW5kIChydHgsIGVudW0gbWFj aGluZV9tb2RlKTsKKworI2VuZGlmIC8qIFJUWF9DT0RFLiAgKi8KKworLyog Um91dGluZXMgdG8gY29tcHV0ZSBjb3N0cy4gICovCitleHRlcm4gaW50IGNy MTZfbWVtb3J5X21vdmVfY29zdCAoZW51bSBtYWNoaW5lX21vZGUsIGVudW0g cmVnX2NsYXNzLCBpbnQpOworCisvKiBQcm9sb2d1ZS9FcGlsb2d1ZSBmdW5j dGlvbnMuICAqLworZXh0ZXJuIGludCBjcjE2X2luaXRpYWxfZWxpbWluYXRp b25fb2Zmc2V0IChpbnQsIGludCk7CitleHRlcm4gY2hhciAqY3IxNl9wcmVw YXJlX3B1c2hfcG9wX3N0cmluZyAoaW50KTsKK2V4dGVybiB2b2lkIGNyMTZf ZXhwYW5kX3Byb2xvZ3VlICh2b2lkKTsKK2V4dGVybiB2b2lkIGNyMTZfZXhw YW5kX2VwaWxvZ3VlICh2b2lkKTsKK2V4dGVybiBjb25zdCBjaGFyICpjcjE2 X2VtaXRfYWRkX3N1Yl9kaSAocnR4ICosIGludCk7CitleHRlcm4gY29uc3Qg Y2hhciAqY3IxNl9lbWl0X2xvZ2ljYWxfZGkgKHJ0eCAqLCBpbnQpOworCisv KiBIYW5kbGluZyB0aGUgImludGVycnVwdCIgYXR0cmlidXRlLiAgKi8KK2V4 dGVybiBpbnQgY3IxNl9pbnRlcnJ1cHRfZnVuY3Rpb25fcCAodm9pZCk7Citl eHRlcm4gYm9vbCBjcjE2X2lzX2RhdGFfbW9kZWwgKGVudW0gZGF0YV9tb2Rl bF90eXBlKTsKKworI2VuZGlmIC8qIE5vdCBHQ0NfQ1IxNl9QUk9UT1NfSC4g ICovIApkaWZmIC11cHJOIC14Jyoub3JpZycgLXgnKi5yZWonIG9yaWcvZ2Nj L2NvbmZpZy9jcjE2L2Rpdm1vZGhpMy5jIG1vZC9nY2MvY29uZmlnL2NyMTYv ZGl2bW9kaGkzLmMKLS0tIG9yaWcvZ2NjL2NvbmZpZy9jcjE2L2Rpdm1vZGhp My5jCTE5NzAtMDEtMDEgMDU6MzA6MDAuMDAwMDAwMDAwICswNTMwCisrKyBt b2QvZ2NjL2NvbmZpZy9jcjE2L2Rpdm1vZGhpMy5jCTIwMTEtMDQtMDggMTY6 NDM6MzUuMDAwMDAwMDAwICswNTMwCkBAIC0wLDAgKzEsMTE1IEBACisvKiBM aWJnY2MgVGFyZ2V0IHNwZWNpZmljIGltcGxlbWVudGF0aW9uIC0gRW11bGF0 aW5nIGRpdiBhbmQgbW9kLgorICAgQ29weXJpZ2h0IChDKSAyMDEwIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29udHJpYnV0ZWQgYnkg S1BJVCBDdW1taW5zIEluZm9zeXN0ZW1zIExpbWl0ZWQuCisKKyAgIFRoaXMg ZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworICAgR0NDIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQK KyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBv cHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgR0NDIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws IGJ1dCBXSVRIT1VUCisgICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls cy4KKworICAgVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlv dSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisgICBwZXJtaXNzaW9ucyBkZXNj cmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2 ZXJzaW9uCisgICAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2 ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBh bmQKKyAgIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNl cHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisgICBzZWUgdGhlIGZp bGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5 LiAgSWYgbm90LCBzZWUKKyAgIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5z ZXMvPi4gICovCisJIAorCisvKiBFbXVsYXRlIHRoZSBkaXZpc2lvbiBhbmQg bW9kdWx1cyBvcGVyYXRpb24uICAqLworCit1bnNpZ25lZCBzaG9ydAordWRp dm1vZGhpNCAodW5zaWduZWQgc2hvcnQgbnVtLCB1bnNpZ25lZCBzaG9ydCBk ZW4sIHNob3J0IG1vZHdhbnRlZCkKK3sKKyAgdW5zaWduZWQgc2hvcnQgYml0 ID0gMTsKKyAgdW5zaWduZWQgc2hvcnQgcmVzID0gMDsKKworICB3aGlsZSAo ZGVuIDwgbnVtICYmIGJpdCAmJiAhKGRlbiAmICgxIDw8IDE1KSkpCisgICAg eworICAgICAgZGVuIDw8PSAxOworICAgICAgYml0IDw8PSAxOworICAgIH0K KyAgd2hpbGUgKGJpdCkKKyAgICB7CisgICAgICBpZiAobnVtID49IGRlbikK Kwl7CisJICBudW0gLT0gZGVuOworCSAgcmVzIHw9IGJpdDsKKwl9CisgICAg ICBiaXQgPj49IDE7CisgICAgICBkZW4gPj49IDE7CisgICAgfQorCisgIGlm IChtb2R3YW50ZWQpCisgICAgcmV0dXJuIG51bTsKKyAgcmV0dXJuIHJlczsK K30KKworc2hvcnQKK19fZGl2aGkzIChzaG9ydCBhLCBzaG9ydCBiKQorewor ICBzaG9ydCBuZWcgPSAwOworICBzaG9ydCByZXM7CisKKyAgaWYgKGEgPCAw KQorICAgIHsKKyAgICAgIGEgPSAtYTsKKyAgICAgIG5lZyA9ICFuZWc7Cisg ICAgfQorCisgIGlmIChiIDwgMCkKKyAgICB7CisgICAgICBiID0gLWI7Cisg ICAgICBuZWcgPSAhbmVnOworICAgIH0KKworICByZXMgPSB1ZGl2bW9kaGk0 IChhLCBiLCAwKTsKKworICBpZiAobmVnKQorICAgIHJlcyA9IC1yZXM7CisK KyAgcmV0dXJuIHJlczsKK30KKworc2hvcnQKK19fbW9kaGkzIChzaG9ydCBh LCBzaG9ydCBiKQoreworICBzaG9ydCBuZWcgPSAwOworICBzaG9ydCByZXM7 CisKKyAgaWYgKGEgPCAwKQorICAgIHsKKyAgICAgIGEgPSAtYTsKKyAgICAg IG5lZyA9IDE7CisgICAgfQorCisgIGlmIChiIDwgMCkKKyAgICBiID0gLWI7 CisKKyAgcmVzID0gdWRpdm1vZGhpNCAoYSwgYiwgMSk7CisKKyAgaWYgKG5l ZykKKyAgICByZXMgPSAtcmVzOworCisgIHJldHVybiByZXM7Cit9CisKK3No b3J0CitfX3VkaXZoaTMgKHNob3J0IGEsIHNob3J0IGIpCit7CisgIHJldHVy biB1ZGl2bW9kaGk0IChhLCBiLCAwKTsKK30KKworc2hvcnQKK19fdW1vZGhp MyAoc2hvcnQgYSwgc2hvcnQgYikKK3sKKyAgcmV0dXJuIHVkaXZtb2RoaTQg KGEsIGIsIDEpOworfQpkaWZmIC11cHJOIC14Jyoub3JpZycgLXgnKi5yZWon IG9yaWcvZ2NjL2NvbmZpZy9jcjE2L3ByZWRpY2F0ZXMubWQgbW9kL2djYy9j b25maWcvY3IxNi9wcmVkaWNhdGVzLm1kCi0tLSBvcmlnL2djYy9jb25maWcv Y3IxNi9wcmVkaWNhdGVzLm1kCTE5NzAtMDEtMDEgMDU6MzA6MDAuMDAwMDAw MDAwICswNTMwCisrKyBtb2QvZ2NjL2NvbmZpZy9jcjE2L3ByZWRpY2F0ZXMu bWQJMjAxMS0wNC0wOCAxNzowMTo0Ni4wMDAwMDAwMDAgKzA1MzAKQEAgLTAs MCArMSwyMjcgQEAKKzs7IFByZWRpY2F0ZXMgb2YgbWFjaGluZSBkZXNjcmlw dGlvbiBmb3IgQ1IxNi4KKzs7IENvcHlyaWdodCAoQykgMjAxMCBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKzs7IENvbnRyaWJ1dGVkIGJ5IEtQ SVQgQ3VtbWlucyBJbmZvc3lzdGVtcyBMaW1pdGVkLgorOzsKKzs7IFRoaXMg ZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKzs7Cis7OyBHQ0MgaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBp dAorOzsgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKzs7IGJ5IHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3Vy Cis7OyBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorOzsKKzs7IEdDQyBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLCBidXQgV0lUSE9VVAorOzsgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCis7 OyBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0 aGUgR05VIEdlbmVyYWwgUHVibGljCis7OyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCis7OworOzsgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w eSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKzs7IGFsb25n IHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2Vl Cis7OyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAKKworOzsg IFByZWRpY2F0ZXMKKworOzsgUHJlZGljYXRlcyBmb3Igc2JpdC9jYml0IGlu c3RydWN0aW9ucworOzsgYml0IG9wZXJhbmQgdXNlZCBmb3IgdGhlIGdlbmVy YXRpb24gb2YgYml0IGluc24gZ2VuZXJhdGlvbgorKGRlZmluZV9wcmVkaWNh dGUgImJpdF9vcGVyYW5kIgorICAobWF0Y2hfY29kZSAibWVtIikKK3sKKyAg cmV0dXJuICgoR0VUX0NPREUgKG9wKSA9PSBNRU0gJiYgT0tfRk9SX1ogKG9w KSkpOworfSkKKworOzsgVW5zaWduZWQgNC1iaXRzIGNvbnN0YW50IGludCBv ciBkb3VibGUgdmFsdWUuCisoZGVmaW5lX3ByZWRpY2F0ZSAidTRiaXRzX29w ZXJhbmQiCisgIChtYXRjaF9jb2RlICJjb25zdF9pbnQsY29uc3RfZG91Ymxl IikKK3sKKyAgaWYgKEdFVF9DT0RFIChvcCkgPT0gQ09OU1RfRE9VQkxFKQor ICAgIHJldHVybiBjcjE2X2NvbnN0X2RvdWJsZV9vayAob3ApOworICAgIHJl dHVybiAoVU5TSUdORURfSU5UX0ZJVFNfTl9CSVRTKElOVFZBTCAob3ApLCA0 KSkgPyAxIDogMDsKK30pCisKKzs7IE9wZXJhbmQgaXMgYSBjb25zdGFudCBp bnRlZ2VyIHdoZXJlCis7OyBvbmx5IG9uZSBiaXQgaXMgc2V0IHRvIDEuCiso ZGVmaW5lX3ByZWRpY2F0ZSAib25lX2JpdF9vcGVyYW5kIgorICAobWF0Y2hf Y29kZSAiY29uc3RfaW50IikKK3sKKyAgdW5zaWduZWQgaW50IHZhbDsKKwor ICB2YWwgPSBJTlRWQUwgKG9wKTsKKyAgaWYgKG1vZGUgPT0gUUltb2RlKSAK KyAgICB2YWwgJj0gMHhmZjsKKyAgZWxzZSBpZiAobW9kZSA9PSBISW1vZGUp CisgICAgdmFsICY9IDB4ZmZmZjsKKyAgZWxzZQorICAgIGdjY191bnJlYWNo YWJsZSgpOworCisgIGlmICh2YWwgIT0gMCkKKyAgICByZXR1cm4gKHZhbCAm ICh2YWwgLSAxKSkgPT0gMDsgLyogdHJ1ZSBpZiBvbmx5IG9uZSBiaXQgaXMg c2V0LiAgKi8KKyAgZWxzZQorICAgIHJldHVybiAwOworfSkKKworOzsgT3Bl cmFuZCBpcyBhIGNvbnN0YW50IGludGVnZXIgd2hlcmUKKzs7IG9ubHkgb25l IGJpdCBpcyBzZXQgdG8gMC4KKyhkZWZpbmVfcHJlZGljYXRlICJyZXZfb25l X2JpdF9vcGVyYW5kIgorICAobWF0Y2hfY29kZSAiY29uc3RfaW50IikKK3sK KyAgdW5zaWduZWQgaW50IHZhbDsKKworICB2YWwgPSB+SU5UVkFMIChvcCk7 IC8qIEludmVydCBhbmQgdXNlLiAgKi8KKyAgaWYgKG1vZGUgPT0gUUltb2Rl KSAKKyAgICB2YWwgJj0gMHhmZjsKKyAgZWxzZSBpZiAobW9kZSA9PSBISW1v ZGUpCisgICAgdmFsICY9IDB4ZmZmZjsKKyAgZWxzZQorICAgIGdjY191bnJl YWNoYWJsZSgpOworCisgIGlmICh2YWwgIT0gMCkKKyAgICByZXR1cm4gKHZh bCAmICh2YWwgLSAxKSkgPT0gMDsgLyogdHJ1ZSBpZiBvbmx5IG9uZSBiaXQg aXMgc2V0LiAgKi8KKyAgZWxzZQorICAgIHJldHVybiAwOworfSkKKworOzsg UHJlZGljYXRlcyBmb3Igc2hpZnQgaW5zdHJ1Y3Rpb25zCis7OyBJbW1lZGlh dGUgb3BlcmFuZCBwcmVkaWNhdGUgZm9yIGNvdW50IGluIHNoaWZ0IG9wZXJh dGlvbnMuCis7OyBJbW1lZGlhdGUgc2hhbGwgYmUgMy1iaXRzIGluIGNhc2Ug b3BlcmFuZCB0byBiZSBvcGVyYXRlZCBvbgorOzsgaXMgYSBxaSBtb2RlIG9w ZXJhbmQuCisoZGVmaW5lX3ByZWRpY2F0ZSAic2hpZnRfcWlfaW1tX29wZXJh bmQiCisgIChtYXRjaF9jb2RlICJjb25zdF9pbnQiKQoreworICByZXR1cm4g KFVOU0lHTkVEX0lOVF9GSVRTX05fQklUUyhJTlRWQUwgKG9wKSwgMykpID8g MSA6IDA7Cit9KQorCis7OyBJbW1lZGlhdGUgc2hhbGwgYmUgNC1iaXRzIGlu IGNhc2Ugb3BlcmFuZCB0byBiZSBvcGVyYXRlZCBvbgorOzsgaXMgYSBoaSBt b2RlIG9wZXJhbmQuCisoZGVmaW5lX3ByZWRpY2F0ZSAic2hpZnRfaGlfaW1t X29wZXJhbmQiCisgIChtYXRjaF9jb2RlICJjb25zdF9pbnQiKQoreworICBy ZXR1cm4gKFVOU0lHTkVEX0lOVF9GSVRTX05fQklUUyhJTlRWQUwgKG9wKSwg NCkpID8gMSA6IDA7Cit9KQorCis7OyBJbW1lZGlhdGUgc2hhbGwgYmUgMy1i aXRzIGluIGNhc2Ugb3BlcmFuZCB0byBiZSBvcGVyYXRlZCBvbgorOzsgaXMg YSBzaSBtb2RlIG9wZXJhbmQuCisoZGVmaW5lX3ByZWRpY2F0ZSAic2hpZnRf c2lfaW1tX29wZXJhbmQiCisgIChtYXRjaF9jb2RlICJjb25zdF9pbnQiKQor eworICByZXR1cm4gKFVOU0lHTkVEX0lOVF9GSVRTX05fQklUUyhJTlRWQUwg KG9wKSwgNSkpID8gMSA6IDA7Cit9KQorCis7OyBQcmVkaWNhdGVzIGZvciBq dW1wL2NhbGwgaW5zdHJ1Y3Rpb25zCis7OyBKdW1wIGltbWVkaWF0ZSBjYW5u b3QgYmUgbW9yZSB0aGFuIDI0LWJpdHMKKyhkZWZpbmVfcHJlZGljYXRlICJq dW1wX2ltbV9vcGVyYW5kIgorICAobWF0Y2hfY29kZSAiY29uc3RfaW50IikK K3sKKyAgcmV0dXJuIChVTlNJR05FRF9JTlRfRklUU19OX0JJVFMoSU5UVkFM IChvcCksIDI0KSkgPyAxIDogMDsKK30pCisKKzs7IENhbGwgaW1tZWRpYXRl IGNhbm5vdCBiZSBtb3JlIHRoYW4gMjQtYml0cworKGRlZmluZV9wcmVkaWNh dGUgImNhbGxfaW1tX29wZXJhbmQiCisgIChtYXRjaF9vcGVyYW5kIDAgImlt bWVkaWF0ZV9vcGVyYW5kIikKK3sKKyAgaWYgKEdFVF9DT0RFIChvcCkgIT0g Q09OU1RfSU5UKSByZXR1cm4gMTsKKyAgICByZXR1cm4gKFVOU0lHTkVEX0lO VF9GSVRTX05fQklUUyhJTlRWQUwgKG9wKSwgMjQpKSA/IDEgOiAwOworfSkK KworOzsgT3BlcmFuZCBpcyByZWdpc3RlciBvciA0LWJpdCBpbW1lZGlhdGUg b3BlcmFuZAorKGRlZmluZV9wcmVkaWNhdGUgInJlZ19vcl91NGJpdHNfb3Bl cmFuZCIKKyAgKGlvciAobWF0Y2hfb3BlcmFuZCAwICJ1NGJpdHNfb3BlcmFu ZCIpCisgICAgICAgKG1hdGNoX29wZXJhbmQgMCAicmVnaXN0ZXJfb3BlcmFu ZCIpKSkKKworOzsgT3BlcmFuZCBpcyBhIHJlZ2lzdGVyIG9yIHN5bWJvbCBy ZWZlcmVuY2UKKyhkZWZpbmVfcHJlZGljYXRlICJyZWdfb3Jfc3ltX29wZXJh bmQiCisgIChpb3IgKG1hdGNoX2NvZGUgInN5bWJvbF9yZWYiKQorICAgICAg IChtYXRjaF9vcGVyYW5kIDAgInJlZ2lzdGVyX29wZXJhbmQiKSkpCisKKzs7 IE9wZXJhbmQgaXMgYSBub24gc3RhY2sgcG9pbnRlciByZWdpc3RlcgorKGRl ZmluZV9wcmVkaWNhdGUgIm5vc3BfcmVnX29wZXJhbmQiCisgIChhbmQgKG1h dGNoX29wZXJhbmQgMCAicmVnaXN0ZXJfb3BlcmFuZCIpCisgICAgICAgKG1h dGNoX3Rlc3QgIlJFR05PIChvcCkgIT0gU1BfUkVHTlVNIikpKQorCis7OyBP cGVyYW5kIGlzIGEgbWVtb3J5IHJlZmVyZW5jZSBhbmQKKzs7IG5vdCBhIHB1 c2ggb3BlcmFuZC4KKyhkZWZpbmVfcHJlZGljYXRlICJzdG9yZV9vcGVyYW5k IgorICAoYW5kIChtYXRjaF9vcGVyYW5kIDAgIm1lbW9yeV9vcGVyYW5kIikK KyAgICAgICAobm90IChtYXRjaF9vcGVyYW5kIDAgInB1c2hfb3BlcmFuZCIp KSkpCisKKzs7IEhlbHBlciBwcmVkaWNhdGUgCisoZGVmaW5lX3ByZWRpY2F0 ZSAicmVnX29yX2ludF9vcGVyYW5kIgorICAoaW9yIChtYXRjaF9jb2RlICJj b25zdF9pbnQiKQorICAgICAgIChtYXRjaF9vcGVyYW5kIDAgInJlZ2lzdGVy X29wZXJhbmQiKSkpCisKKzs7Cis7OworOzsgQXRpdGhtZXRpYy9sb2dpY2Fs IHByZWRpY2F0ZXMKKworOzsgUUkgSGVscGVyCisoZGVmaW5lX3ByZWRpY2F0 ZSAiYXJpdGhfcWlfb3BlcmFuZCIKKyAgIChtYXRjaF9jb2RlICJjb25zdF9p bnQiKQoreworICAgICAgICByZXR1cm4gKElOX1JBTihJTlRWQUwgKG9wKSwg MCwgMTUpICYmICgoSU5UVkFMIChvcCkgIT0gOSkgCisgICAgICAgICAgICAg ICAgfHwgKElOVFZBTCAob3ApICE9IDExKSkpID8gMSA6IDAgOyAKK30pCisK Kzs7UUkgUmVnLCBzdWJyZWcocmVnKSBvciBjb25zdF9pbnQuCisoZGVmaW5l X3ByZWRpY2F0ZSAicmVnX3FpX2ludF9vcGVyYW5kIgorICAoaW9yIChtYXRj aF9vcGVyYW5kIDAgImFyaXRoX3FpX29wZXJhbmQiKQorICAgICAgIChtYXRj aF9vcGVyYW5kIDAgInJlZ2lzdGVyX29wZXJhbmQiKSkpCisKKzs7IEhJIEhl bHBlcgorKGRlZmluZV9wcmVkaWNhdGUgImFyaXRoX2hpX29wZXJhbmQiCisg ICAobWF0Y2hfY29kZSAiY29uc3RfaW50IikKK3sKKyAgICAgICAgcmV0dXJu IChJTl9SQU4oSU5UVkFMIChvcCksIC0zMjc2OCwgMzI3NjgpICkgPyAxIDog MCA7IAorfSkKKworOztISSBSZWcsIHN1YnJlZyhyZWcpIG9yIGNvbnN0X2lu dC4KKyhkZWZpbmVfcHJlZGljYXRlICJyZWdfaGlfaW50X29wZXJhbmQiCisg IChpb3IgKG1hdGNoX29wZXJhbmQgMCAiYXJpdGhfaGlfb3BlcmFuZCIpCisg ICAgICAgKG1hdGNoX29wZXJhbmQgMCAicmVnaXN0ZXJfb3BlcmFuZCIpKSkK KworOzsgU0kgSGVscGVyCisoZGVmaW5lX3ByZWRpY2F0ZSAiYXJpdGhfc2lf b3BlcmFuZCIKKyAgIChtYXRjaF9jb2RlICJjb25zdF9pbnQiKQoreworICAg ICAgICByZXR1cm4gSU5fUkFOKElOVFZBTCAob3ApLCAtMjE0NzQ4MzY0OCwg MjE0NzQ4MzY0NykgPyAxIDogMCA7IAorfSkKKworOztTSSBSZWcsIHN1YnJl ZyhyZWcpIG9yIGNvbnN0X2ludC4KKyhkZWZpbmVfcHJlZGljYXRlICJyZWdf c2lfaW50X29wZXJhbmQiCisgIChpb3IgKG1hdGNoX29wZXJhbmQgMCAiYXJp dGhfc2lfb3BlcmFuZCIpCisgICAgICAgKG1hdGNoX29wZXJhbmQgMCAicmVn aXN0ZXJfb3BlcmFuZCIpKSkKKworOzsKKzs7IFNoaWZ0IHByZWRpY2F0ZXMK KworOzsgUUkgSGVscGVyCisoZGVmaW5lX3ByZWRpY2F0ZSAic2hpZnRfcWlf b3BlcmFuZCIKKyAgIChtYXRjaF9jb2RlICJjb25zdF9pbnQiKQoreworICAg ICAgICByZXR1cm4gKElOX1JBTihJTlRWQUwgKG9wKSwgMCwgNykgKSA/IDEg OiAwOyAKK30pCisKKzs7UUkgUmVnLCBzdWJyZWcocmVnKSBvciBjb25zdF9p bnQuCisoZGVmaW5lX3ByZWRpY2F0ZSAic2hpZnRfcmVnX3FpX2ludF9vcGVy YW5kIgorICAoaW9yIChtYXRjaF9vcGVyYW5kIDAgInNoaWZ0X3FpX29wZXJh bmQiKQorICAgICAgIChtYXRjaF9vcGVyYW5kIDAgInJlZ2lzdGVyX29wZXJh bmQiKSkpCis7OyBISSBIZWxwZXIKKyhkZWZpbmVfcHJlZGljYXRlICJzaGlm dF9oaV9vcGVyYW5kIgorICAgKG1hdGNoX2NvZGUgImNvbnN0X2ludCIpCit7 CisgICAgICAgIHJldHVybiAoSU5fUkFOKElOVFZBTCAob3ApLCAwLCAxNSkg KSA/IDEgOiAwIDsgCit9KQorCis7O0hJIFJlZywgc3VicmVnKHJlZykgb3Ig Y29uc3RfaW50LgorKGRlZmluZV9wcmVkaWNhdGUgInNoaWZ0X3JlZ19oaV9p bnRfb3BlcmFuZCIKKyAgKGlvciAobWF0Y2hfb3BlcmFuZCAwICJzaGlmdF9o aV9vcGVyYW5kIikKKyAgICAgICAobWF0Y2hfb3BlcmFuZCAwICJyZWdpc3Rl cl9vcGVyYW5kIikpKQorCis7OyBTSSBIZWxwZXIKKyhkZWZpbmVfcHJlZGlj YXRlICJzaGlmdF9zaV9vcGVyYW5kIgorICAgKG1hdGNoX2NvZGUgImNvbnN0 X2ludCIpCit7CisgICAgICAgIHJldHVybiAoSU5fUkFOKElOVFZBTCAob3Ap LCAwLCAzMSkgKSA/IDEgOiAwOyAKK30pCisKKzs7U0kgUmVnLCBzdWJyZWco cmVnKSBvciBjb25zdF9pbnQuCisoZGVmaW5lX3ByZWRpY2F0ZSAic2hpZnRf cmVnX3NpX2ludF9vcGVyYW5kIgorICAoaW9yIChtYXRjaF9vcGVyYW5kIDAg InNoaWZ0X3NpX29wZXJhbmQiKQorICAgICAgIChtYXRjaF9vcGVyYW5kIDAg InJlZ2lzdGVyX29wZXJhbmQiKSkpCmRpZmYgLXVwck4gLXgnKi5vcmlnJyAt eCcqLnJlaicgb3JpZy9nY2MvY29uZmlnL2NyMTYvdC1jcjE2IG1vZC9nY2Mv Y29uZmlnL2NyMTYvdC1jcjE2Ci0tLSBvcmlnL2djYy9jb25maWcvY3IxNi90 LWNyMTYJMTk3MC0wMS0wMSAwNTozMDowMC4wMDAwMDAwMDAgKzA1MzAKKysr IG1vZC9nY2MvY29uZmlnL2NyMTYvdC1jcjE2CTIwMTEtMDQtMDggMTY6NDM6 MzUuMDAwMDAwMDAwICswNTMwCkBAIC0wLDAgKzEsNzMgQEAKKyMgQ1IxNiBU YXJnZXQgTWFrZWZpbGUKKyMgQ29weXJpZ2h0IChDKSAyMDEwIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBDb250cmlidXRlZCBieSBLUElU IEN1bW1pbnMgSW5mb3N5c3RlbXMgTGltaXRlZC4KKyMKKyMgVGhpcyBmaWxl IGlzIHBhcnQgb2YgR0NDLgorIworIyBHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGFzIHB1Ymxpc2hlZAorIyBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91cgorIyBvcHRp b24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBHQ0MgaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJ VEhPVVQKKyMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisjIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMKKyMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZ b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIEdDQzsgc2VlIHRo ZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorIyA8aHR0cDovL3d3dy5n bnUub3JnL2xpY2Vuc2VzLz4uICAgICAKKworTElCMUFTTVNSQyA9IGNyMTYv Y3IxNi1saWJnY2MucworTElCMUFTTUZVTkNTID0JX211bHNpMyBfbHNocmRp MyBfbXVsZGkzIF9kaXZkaTMgX3VkaXZkaTMgX3VkaXZtb2RkaTMgXAorCQlf dW1vZGRpMyBfbW9kZGkzCisKK0xJQjJGVU5DU19FWFRSQSA9IFwKKwkkKHNy Y2RpcikvY29uZmlnL2NyMTYvZGl2bW9kaGkzLmMgIFwKKwkkKHNyY2Rpcikv Y29uZmlnL3VkaXZtb2RzaTQuYyBcCisJJChzcmNkaXIpL2NvbmZpZy91ZGl2 bW9kLmMgICBcCisJJChzcmNkaXIpL2NvbmZpZy9kaXZtb2QuYyAKKworTElC MkFEREVIID0gJChzcmNkaXIpL2NvbmZpZy9jcjE2L3Vud2luZC1kdzItY3Ix Ni5jIFwKKyAgICQoc3JjZGlyKS91bndpbmQtZHcyLWZkZS5jICQoc3JjZGly KS91bndpbmQtYy5jCisKKyNFWFRSQV9NVUxUSUxJQl9QQVJUUyA9IGNydGJl Z2luLm8gY3J0ZW5kLm8gY3J0aS5vIGNydG4ubyBjcnRsaWJpZC5vCisKKyMk KFQpY3J0aS5vOiAkKHNyY2RpcikvY29uZmlnL2NyMTYvY3J0aS5zICQoR0ND X1BBU1NFUykKKyMJJChHQ0NfRk9SX1RBUkdFVCkgJChHQ0NfQ0ZMQUdTKSAk KE1VTFRJTElCX0NGTEFHUykgJChJTkNMVURFUykgXAorIwkgIC1jIC1vICQo VCljcnRpLm8gLXggYXNzZW1ibGVyLXdpdGgtY3BwICQoc3JjZGlyKS9jb25m aWcvY3IxNi9jcnRpLnMKKworIyQoVCljcnRuLm86ICQoc3JjZGlyKS9jb25m aWcvY3IxNi9jcnRuLnMgJChHQ0NfUEFTU0VTKQorIwkkKEdDQ19GT1JfVEFS R0VUKSAkKEdDQ19DRkxBR1MpICQoTVVMVElMSUJfQ0ZMQUdTKSAkKElOQ0xV REVTKSBcCisjCSAgLWMgLW8gJChUKWNydG4ubyAteCBhc3NlbWJsZXItd2l0 aC1jcHAgJChzcmNkaXIpL2NvbmZpZy9jcjE2L2NydG4ucworCisjJChUKWNy dGxpYmlkLm86ICQoc3JjZGlyKS9jb25maWcvY3IxNi9jcnRsaWJpZC5zICQo R0NDX1BBU1NFUykKKyMJJChHQ0NfRk9SX1RBUkdFVCkgJChHQ0NfQ0ZMQUdT KSAkKE1VTFRJTElCX0NGTEFHUykgJChJTkNMVURFUykgXAorIwkgIC1jIC1v ICQoVCljcnRsaWJpZC5vIFwKKyMJICAteCBhc3NlbWJsZXItd2l0aC1jcHAg JChzcmNkaXIpL2NvbmZpZy9jcjE2L2NydGxpYmlkLnMKKworTVVMVElMSUJf T1BUSU9OUyAgICAgPSBmUElDIG1pbnQzMiBtaWQtc2hhcmVkLWxpYnJhcnkK K01VTFRJTElCX0RJUk5BTUVTICAgID0gZmFyLXBpYyBpbnQzMiBtaWQtc2hh cmVkLWxpYnJhcnkKK01VTFRJTElCX0VYQ0VQVElPTlMgID0gZm5vLVBJQy9t aWQtc2hhcmVkLWxpYnJhcnkKK01VTFRJTElCX01BVENIRVMgICAgID0KK01V TFRJTElCX0VYVFJBX09QVFMgID0gbWNyMTZjcGx1cyBtZGF0YS1tb2RlbD1m YXIKKworTElCR0NDID0gc3RtcC1tdWx0aWxpYgorSU5TVEFMTF9MSUJHQ0Mg PSBpbnN0YWxsLW11bHRpbGliCisKKyMgV2Ugd2FudCBmaW5lIGdyYWluZWQg bGlicmFyaWVzLCBzbyB1c2UgdGhlIG5ldyBjb2RlLgorIyB0byBidWlsZCB0 aGUgZmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uIGxpYnJhcmllcy4KK0ZQQklU ID0gZnAtYml0LmMKK0RQQklUID0gZHAtYml0LmMKKworZnAtYml0LmM6ICQo c3JjZGlyKS9jb25maWcvZnAtYml0LmMKKwllY2hvICcjZGVmaW5lIEZMT0FU JyA+IGZwLWJpdC5jCisJZWNobyAnI2RlZmluZSBTTUFMTF9NQUNISU5FJyA+ PiBmcC1iaXQuYworCWVjaG8gJyNkZWZpbmUgQ01QdHlwZSBISXR5cGUnID4+ IGZwLWJpdC5jCisJY2F0ICQoc3JjZGlyKS9jb25maWcvZnAtYml0LmMgPj4g ZnAtYml0LmMKKworZHAtYml0LmM6ICQoc3JjZGlyKS9jb25maWcvZnAtYml0 LmMKKwllY2hvICcjZGVmaW5lIFNNQUxMX01BQ0hJTkUnID4+IGRwLWJpdC5j CisJZWNobyAnI2RlZmluZSBDTVB0eXBlIEhJdHlwZScgPj4gZHAtYml0LmMK KwljYXQgJChzcmNkaXIpL2NvbmZpZy9mcC1iaXQuYyA+PiBkcC1iaXQuYwor CmRpZmYgLXVwck4gLXgnKi5vcmlnJyAteCcqLnJlaicgb3JpZy9nY2MvY29u ZmlnL2NyMTYvdW53aW5kLWR3Mi1jcjE2LmMgbW9kL2djYy9jb25maWcvY3Ix Ni91bndpbmQtZHcyLWNyMTYuYwotLS0gb3JpZy9nY2MvY29uZmlnL2NyMTYv dW53aW5kLWR3Mi1jcjE2LmMJMTk3MC0wMS0wMSAwNTozMDowMC4wMDAwMDAw MDAgKzA1MzAKKysrIG1vZC9nY2MvY29uZmlnL2NyMTYvdW53aW5kLWR3Mi1j cjE2LmMJMjAxMS0wNC0wOCAxNjo0MzozNS4wMDAwMDAwMDAgKzA1MzAKQEAg LTAsMCArMSwxNTk3IEBACisvKiBEV0FSRjIgZXhjZXB0aW9uIGhhbmRsaW5n IGFuZCBmcmFtZSB1bndpbmQgcnVudGltZSBpbnRlcmZhY2Ugcm91dGluZXMu CisgICBDb3B5cmlnaHQgKEMpIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIw MDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsCisgICAyMDA4LCAy MDA5LCAyMDEwICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKwor ICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCisgICBHQ0MgaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v ZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChh dCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBH Q0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl IHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElU WQorICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT ZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBmb3IgbW9y ZSBkZXRhaWxzLgorCisgICBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNp b24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKyAgIHBlcm1pc3Np b25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNl cHRpb24sIHZlcnNpb24KKyAgIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKyAgIFlvdSBzaG91bGQgaGF2 ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGFuZAorICAgYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJy YXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKyAgIHNl ZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNw ZWN0aXZlbHkuICBJZiBub3QsIHNlZQorICAgPGh0dHA6Ly93d3cuZ251Lm9y Zy9saWNlbnNlcy8+LiAgKi8KKworI2luY2x1ZGUgInRjb25maWcuaCIKKyNp bmNsdWRlICJ0c3lzdGVtLmgiCisjaW5jbHVkZSAiY29yZXR5cGVzLmgiCisj aW5jbHVkZSAidG0uaCIKKyNpbmNsdWRlICJkd2FyZjIuaCIKKyNpbmNsdWRl ICJ1bndpbmQuaCIKKyNpZmRlZiBfX1VTSU5HX1NKTEpfRVhDRVBUSU9OU19f CisjIGRlZmluZSBOT19TSVpFX09GX0VOQ09ERURfVkFMVUUKKyNlbmRpZgor I2luY2x1ZGUgInVud2luZC1wZS5oIgorI2luY2x1ZGUgInVud2luZC1kdzIt ZmRlLmgiCisjaW5jbHVkZSAiZ3Roci5oIgorI2luY2x1ZGUgInVud2luZC1k dzIuaCIKKworI2lmbmRlZiBfX1VTSU5HX1NKTEpfRVhDRVBUSU9OU19fCisK KyNpZm5kZWYgU1RBQ0tfR1JPV1NfRE9XTldBUkQKKyNkZWZpbmUgU1RBQ0tf R1JPV1NfRE9XTldBUkQgMAorI2Vsc2UKKyN1bmRlZiBTVEFDS19HUk9XU19E T1dOV0FSRAorI2RlZmluZSBTVEFDS19HUk9XU19ET1dOV0FSRCAxCisjZW5k aWYKKworLyogRHdhcmYgZnJhbWUgcmVnaXN0ZXJzIHVzZWQgZm9yIHByZSBn Y2MgMy4wIGNvbXBpbGVkIGdsaWJjLiAgKi8KKyNpZm5kZWYgUFJFX0dDQzNf RFdBUkZfRlJBTUVfUkVHSVNURVJTCisjZGVmaW5lIFBSRV9HQ0MzX0RXQVJG X0ZSQU1FX1JFR0lTVEVSUyBEV0FSRl9GUkFNRV9SRUdJU1RFUlMKKyNlbmRp ZgorCisjaWZuZGVmIERXQVJGX1JFR19UT19VTldJTkRfQ09MVU1OCisjZGVm aW5lIERXQVJGX1JFR19UT19VTldJTkRfQ09MVU1OKFJFR05PKSAoUkVHTk8p CisjZW5kaWYKKworLyogVGhpcyBpcyB0aGUgcmVnaXN0ZXIgYW5kIHVud2lu ZCBzdGF0ZSBmb3IgYSBwYXJ0aWN1bGFyIGZyYW1lLiAgVGhpcworICAgcHJv dmlkZXMgdGhlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSB0byB1bndpbmQgdXAg cGFzdCBhIGZyYW1lIGFuZCByZXR1cm4KKyAgIHRvIGl0cyBjYWxsZXIuICAq Lworc3RydWN0IF9VbndpbmRfQ29udGV4dAoreworICB2b2lkICpyZWdbRFdB UkZfRlJBTUVfUkVHSVNURVJTKzFdOworICB2b2lkICpjZmE7CisgIHZvaWQg KnJhOworICB2b2lkICpsc2RhOworICBzdHJ1Y3QgZHdhcmZfZWhfYmFzZXMg YmFzZXM7CisgIC8qIFNpZ25hbCBmcmFtZSBjb250ZXh0LiAgKi8KKyNkZWZp bmUgU0lHTkFMX0ZSQU1FX0JJVCAoKH4oX1Vud2luZF9Xb3JkKSAwID4+IDEp ICsgMSkKKyAgLyogQ29udGV4dCB3aGljaCBoYXMgdmVyc2lvbi9hcmdzX3Np emUvYnlfdmFsdWUgZmllbGRzLiAgKi8KKyNkZWZpbmUgRVhURU5ERURfQ09O VEVYVF9CSVQgKCh+KF9VbndpbmRfV29yZCkgMCA+PiAyKSArIDEpCisgIF9V bndpbmRfV29yZCBmbGFnczsKKyAgLyogMCBmb3Igbm93LCBjYW4gYmUgaW5j cmVhc2VkIHdoZW4gZnVydGhlciBmaWVsZHMgYXJlIGFkZGVkIHRvCisgICAg IHN0cnVjdCBfVW53aW5kX0NvbnRleHQuICAqLworICBfVW53aW5kX1dvcmQg dmVyc2lvbjsKKyAgX1Vud2luZF9Xb3JkIGFyZ3Nfc2l6ZTsKKyAgY2hhciBi eV92YWx1ZVtEV0FSRl9GUkFNRV9SRUdJU1RFUlMrMV07Cit9OworCisvKiBC eXRlIHNpemUgb2YgZXZlcnkgcmVnaXN0ZXIgbWFuYWdlZCBieSB0aGVzZSBy b3V0aW5lcy4gICovCitzdGF0aWMgdW5zaWduZWQgY2hhciBkd2FyZl9yZWdf c2l6ZV90YWJsZVtEV0FSRl9GUkFNRV9SRUdJU1RFUlMrMV07CisKKwwKKy8q IFJlYWQgdW5hbGlnbmVkIGRhdGEgZnJvbSB0aGUgaW5zdHJ1Y3Rpb24gYnVm ZmVyLiAgKi8KKwordW5pb24gdW5hbGlnbmVkCit7CisgIHZvaWQgKnA7Cisg IHVuc2lnbmVkIHUyIF9fYXR0cmlidXRlX18gKChtb2RlIChISSkpKTsKKyAg dW5zaWduZWQgdTQgX19hdHRyaWJ1dGVfXyAoKG1vZGUgKFNJKSkpOworICB1 bnNpZ25lZCB1OCBfX2F0dHJpYnV0ZV9fICgobW9kZSAoREkpKSk7CisgIHNp Z25lZCBzMiBfX2F0dHJpYnV0ZV9fICgobW9kZSAoSEkpKSk7CisgIHNpZ25l ZCBzNCBfX2F0dHJpYnV0ZV9fICgobW9kZSAoU0kpKSk7CisgIHNpZ25lZCBz OCBfX2F0dHJpYnV0ZV9fICgobW9kZSAoREkpKSk7Cit9IF9fYXR0cmlidXRl X18gKChwYWNrZWQpKTsKKworc3RhdGljIHZvaWQgdXdfdXBkYXRlX2NvbnRl eHQgKHN0cnVjdCBfVW53aW5kX0NvbnRleHQgKiwgX1Vud2luZF9GcmFtZVN0 YXRlICopOworc3RhdGljIF9VbndpbmRfUmVhc29uX0NvZGUgdXdfZnJhbWVf c3RhdGVfZm9yIChzdHJ1Y3QgX1Vud2luZF9Db250ZXh0ICosCisJCQkJCSAg ICAgICBfVW53aW5kX0ZyYW1lU3RhdGUgKik7CisKK3N0YXRpYyBpbmxpbmUg dm9pZCAqCityZWFkX3BvaW50ZXIgKGNvbnN0IHZvaWQgKnApIHsgY29uc3Qg dW5pb24gdW5hbGlnbmVkICp1cCA9IHA7IHJldHVybiB1cC0+cDsgfQorCitz dGF0aWMgaW5saW5lIGludAorcmVhZF8xdSAoY29uc3Qgdm9pZCAqcCkgeyBy ZXR1cm4gKihjb25zdCB1bnNpZ25lZCBjaGFyICopIHA7IH0KKworc3RhdGlj IGlubGluZSBpbnQKK3JlYWRfMXMgKGNvbnN0IHZvaWQgKnApIHsgcmV0dXJu ICooY29uc3Qgc2lnbmVkIGNoYXIgKikgcDsgfQorCitzdGF0aWMgaW5saW5l IGludAorcmVhZF8ydSAoY29uc3Qgdm9pZCAqcCkgeyBjb25zdCB1bmlvbiB1 bmFsaWduZWQgKnVwID0gcDsgcmV0dXJuIHVwLT51MjsgfQorCitzdGF0aWMg aW5saW5lIGludAorcmVhZF8ycyAoY29uc3Qgdm9pZCAqcCkgeyBjb25zdCB1 bmlvbiB1bmFsaWduZWQgKnVwID0gcDsgcmV0dXJuIHVwLT5zMjsgfQorCitz dGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAorcmVhZF80dSAoY29uc3Qgdm9p ZCAqcCkgeyBjb25zdCB1bmlvbiB1bmFsaWduZWQgKnVwID0gcDsgcmV0dXJu IHVwLT51NDsgfQorCitzdGF0aWMgaW5saW5lIGludAorcmVhZF80cyAoY29u c3Qgdm9pZCAqcCkgeyBjb25zdCB1bmlvbiB1bmFsaWduZWQgKnVwID0gcDsg cmV0dXJuIHVwLT5zNDsgfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxv bmcKK3JlYWRfOHUgKGNvbnN0IHZvaWQgKnApIHsgY29uc3QgdW5pb24gdW5h bGlnbmVkICp1cCA9IHA7IHJldHVybiB1cC0+dTg7IH0KKworc3RhdGljIGlu bGluZSB1bnNpZ25lZCBsb25nCityZWFkXzhzIChjb25zdCB2b2lkICpwKSB7 IGNvbnN0IHVuaW9uIHVuYWxpZ25lZCAqdXAgPSBwOyByZXR1cm4gdXAtPnM4 OyB9CisMCitzdGF0aWMgaW5saW5lIF9VbndpbmRfV29yZAorX1Vud2luZF9J c1NpZ25hbEZyYW1lIChzdHJ1Y3QgX1Vud2luZF9Db250ZXh0ICpjb250ZXh0 KQoreworICByZXR1cm4gKGNvbnRleHQtPmZsYWdzICYgU0lHTkFMX0ZSQU1F X0JJVCkgPyAxIDogMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitfVW53 aW5kX1NldFNpZ25hbEZyYW1lIChzdHJ1Y3QgX1Vud2luZF9Db250ZXh0ICpj b250ZXh0LCBpbnQgdmFsKQoreworICBpZiAodmFsKQorICAgIGNvbnRleHQt PmZsYWdzIHw9IFNJR05BTF9GUkFNRV9CSVQ7CisgIGVsc2UKKyAgICBjb250 ZXh0LT5mbGFncyAmPSB+U0lHTkFMX0ZSQU1FX0JJVDsKK30KKworc3RhdGlj IGlubGluZSBfVW53aW5kX1dvcmQKK19VbndpbmRfSXNFeHRlbmRlZENvbnRl eHQgKHN0cnVjdCBfVW53aW5kX0NvbnRleHQgKmNvbnRleHQpCit7CisgIHJl dHVybiBjb250ZXh0LT5mbGFncyAmIEVYVEVOREVEX0NPTlRFWFRfQklUOwor fQorDAorLyogR2V0IHRoZSB2YWx1ZSBvZiByZWdpc3RlciBJTkRFWCBhcyBz YXZlZCBpbiBDT05URVhULiAgKi8KKworaW5saW5lIF9VbndpbmRfV29yZAor X1Vud2luZF9HZXRHUiAoc3RydWN0IF9VbndpbmRfQ29udGV4dCAqY29udGV4 dCwgaW50IGluZGV4KQoreworICBpbnQgc2l6ZTsKKyAgdm9pZCAqcHRyOwor CisjaWZkZWYgRFdBUkZfWkVST19SRUcKKyAgaWYgKGluZGV4ID09IERXQVJG X1pFUk9fUkVHKQorICAgIHJldHVybiAwOworI2VuZGlmCisKKyAgaW5kZXgg PSBEV0FSRl9SRUdfVE9fVU5XSU5EX0NPTFVNTiAoaW5kZXgpOworICBnY2Nf YXNzZXJ0IChpbmRleCA8IChpbnQpIHNpemVvZihkd2FyZl9yZWdfc2l6ZV90 YWJsZSkpOworICBzaXplID0gZHdhcmZfcmVnX3NpemVfdGFibGVbaW5kZXhd OworICBwdHIgPSBjb250ZXh0LT5yZWdbaW5kZXhdOworCisgIGlmIChfVW53 aW5kX0lzRXh0ZW5kZWRDb250ZXh0IChjb250ZXh0KSAmJiBjb250ZXh0LT5i eV92YWx1ZVtpbmRleF0pCisgICAgcmV0dXJuIChfVW53aW5kX1dvcmQpIChf VW53aW5kX0ludGVybmFsX1B0cikgcHRyOworCisgIC8qIFRoaXMgd2lsbCBz ZWdmYXVsdCBpZiB0aGUgcmVnaXN0ZXIgaGFzbid0IGJlZW4gc2F2ZWQuICAq LworICBpZiAoc2l6ZSA9PSBzaXplb2YoX1Vud2luZF9QdHIpKQorICAgIHJl dHVybiAqIChfVW53aW5kX1B0ciAqKSBwdHI7CisgIGVsc2UKKyAgICB7Cisg ICAgICBnY2NfYXNzZXJ0IChzaXplID09IHNpemVvZihfVW53aW5kX1dvcmQp KTsKKyAgICAgIHJldHVybiAqIChfVW53aW5kX1dvcmQgKikgcHRyOworICAg IH0KK30KKworc3RhdGljIGlubGluZSB2b2lkICoKK19VbndpbmRfR2V0UHRy IChzdHJ1Y3QgX1Vud2luZF9Db250ZXh0ICpjb250ZXh0LCBpbnQgaW5kZXgp Cit7CisgIHJldHVybiAodm9pZCAqKShfVW53aW5kX1B0cikgX1Vud2luZF9H ZXRHUiAoY29udGV4dCwgaW5kZXgpOworfQorCisvKiBHZXQgdGhlIHZhbHVl IG9mIHRoZSBDRkEgYXMgc2F2ZWQgaW4gQ09OVEVYVC4gICovCisKK19Vbndp bmRfV29yZAorX1Vud2luZF9HZXRDRkEgKHN0cnVjdCBfVW53aW5kX0NvbnRl eHQgKmNvbnRleHQpCit7CisgIHJldHVybiAoX1Vud2luZF9QdHIpIGNvbnRl eHQtPmNmYTsKK30KKworLyogT3ZlcndyaXRlIHRoZSBzYXZlZCB2YWx1ZSBm b3IgcmVnaXN0ZXIgSU5ERVggaW4gQ09OVEVYVCB3aXRoIFZBTC4gICovCisK K2lubGluZSB2b2lkCitfVW53aW5kX1NldEdSIChzdHJ1Y3QgX1Vud2luZF9D b250ZXh0ICpjb250ZXh0LCBpbnQgaW5kZXgsIF9VbndpbmRfV29yZCB2YWwp Cit7CisgIGludCBzaXplOworICB2b2lkICpwdHI7CisKKyAgaW5kZXggPSBE V0FSRl9SRUdfVE9fVU5XSU5EX0NPTFVNTiAoaW5kZXgpOworICBnY2NfYXNz ZXJ0IChpbmRleCA8IChpbnQpIHNpemVvZihkd2FyZl9yZWdfc2l6ZV90YWJs ZSkpOworICBzaXplID0gZHdhcmZfcmVnX3NpemVfdGFibGVbaW5kZXhdOwor CisgIGlmIChfVW53aW5kX0lzRXh0ZW5kZWRDb250ZXh0IChjb250ZXh0KSAm JiBjb250ZXh0LT5ieV92YWx1ZVtpbmRleF0pCisgICAgeworICAgICAgY29u dGV4dC0+cmVnW2luZGV4XSA9ICh2b2lkICopIChfVW53aW5kX0ludGVybmFs X1B0cikgdmFsOworICAgICAgcmV0dXJuOworICAgIH0KKyAgcHRyID0gY29u dGV4dC0+cmVnW2luZGV4XTsKKyAgICBpZiAoIHNpemUgPT0gc2l6ZW9mKF9V bndpbmRfV29yZCkgKQorICAgICAgKiAoX1Vud2luZF9Xb3JkICopIHB0ciA9 IHZhbDsKKyAgICBlbHNlIHsKKyAgICAgIHR5cGVkZWYgdW5zaWduZWQgX0NS MTZfVW53aW5kX1dvcmQgX19hdHRyaWJ1dGVfXygoX19tb2RlX18oX193b3Jk X18pKSk7CisgICAgICBnY2NfYXNzZXJ0IChpbmRleCArIDEgIDwgIChpbnQp IHNpemVvZihkd2FyZl9yZWdfc2l6ZV90YWJsZSkpOworICAgICAgKiAoX0NS MTZfVW53aW5kX1dvcmQgKikgcHRyID0gdmFsICYgMHhmZmZmIDsgIC8qIGxv dyAxNi1iaXQuICAqLworICAgICAgcHRyID0gY29udGV4dC0+cmVnW2luZGV4 ICsgMV07CisgICAgICAqIChfQ1IxNl9VbndpbmRfV29yZCAqKSBwdHIgPSB2 YWwgPj4gMTYgOyAgLyogaGlnaCAxNi1iaXQuICAqLworICAgICAgICAgfQor fQorCisvKiBHZXQgdGhlIHBvaW50ZXIgdG8gYSByZWdpc3RlciBJTkRFWCBh cyBzYXZlZCBpbiBDT05URVhULiAgKi8KKworc3RhdGljIGlubGluZSB2b2lk ICoKK19VbndpbmRfR2V0R1JQdHIgKHN0cnVjdCBfVW53aW5kX0NvbnRleHQg KmNvbnRleHQsIGludCBpbmRleCkKK3sKKyAgaW5kZXggPSBEV0FSRl9SRUdf VE9fVU5XSU5EX0NPTFVNTiAoaW5kZXgpOworICBpZiAoX1Vud2luZF9Jc0V4 dGVuZGVkQ29udGV4dCAoY29udGV4dCkgJiYgY29udGV4dC0+YnlfdmFsdWVb aW5kZXhdKQorICAgIHJldHVybiAmY29udGV4dC0+cmVnW2luZGV4XTsKKyAg cmV0dXJuIGNvbnRleHQtPnJlZ1tpbmRleF07Cit9CisKKy8qIFNldCB0aGUg cG9pbnRlciB0byBhIHJlZ2lzdGVyIElOREVYIGFzIHNhdmVkIGluIENPTlRF WFQuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK19VbndpbmRfU2V0R1JQ dHIgKHN0cnVjdCBfVW53aW5kX0NvbnRleHQgKmNvbnRleHQsIGludCBpbmRl eCwgdm9pZCAqcCkKK3sKKyAgaW5kZXggPSBEV0FSRl9SRUdfVE9fVU5XSU5E X0NPTFVNTiAoaW5kZXgpOworICBpZiAoX1Vud2luZF9Jc0V4dGVuZGVkQ29u dGV4dCAoY29udGV4dCkpCisgICAgY29udGV4dC0+YnlfdmFsdWVbaW5kZXhd ID0gMDsKKyAgY29udGV4dC0+cmVnW2luZGV4XSA9IHA7Cit9CisKKy8qIE92 ZXJ3cml0ZSB0aGUgc2F2ZWQgdmFsdWUgZm9yIHJlZ2lzdGVyIElOREVYIGlu IENPTlRFWFQgd2l0aCBWQUwuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQK K19VbndpbmRfU2V0R1JWYWx1ZSAoc3RydWN0IF9VbndpbmRfQ29udGV4dCAq Y29udGV4dCwgaW50IGluZGV4LAorCQkgICAgX1Vud2luZF9Xb3JkIHZhbCkK K3sKKyAgaW5kZXggPSBEV0FSRl9SRUdfVE9fVU5XSU5EX0NPTFVNTiAoaW5k ZXgpOworICBnY2NfYXNzZXJ0IChpbmRleCA8IChpbnQpIHNpemVvZihkd2Fy Zl9yZWdfc2l6ZV90YWJsZSkpOworICBnY2NfYXNzZXJ0IChkd2FyZl9yZWdf c2l6ZV90YWJsZVtpbmRleF0gPT0gc2l6ZW9mIChfVW53aW5kX1B0cikpOwor CisgIGNvbnRleHQtPmJ5X3ZhbHVlW2luZGV4XSA9IDE7CisgIGNvbnRleHQt PnJlZ1tpbmRleF0gPSAodm9pZCAqKSAoX1Vud2luZF9JbnRlcm5hbF9QdHIp IHZhbDsKK30KKworLyogUmV0dXJuIG5vbnplcm8gaWYgcmVnaXN0ZXIgSU5E RVggaXMgc3RvcmVkIGJ5IHZhbHVlIHJhdGhlciB0aGFuCisgICBieSByZWZl cmVuY2UuICAqLworCitzdGF0aWMgaW5saW5lIGludAorX1Vud2luZF9HUkJ5 VmFsdWUgKHN0cnVjdCBfVW53aW5kX0NvbnRleHQgKmNvbnRleHQsIGludCBp bmRleCkKK3sKKyAgaW5kZXggPSBEV0FSRl9SRUdfVE9fVU5XSU5EX0NPTFVN TiAoaW5kZXgpOworICByZXR1cm4gY29udGV4dC0+YnlfdmFsdWVbaW5kZXhd OworfQorCisvKiBSZXRyaWV2ZSB0aGUgcmV0dXJuIGFkZHJlc3MgZm9yIENP TlRFWFQuICAqLworCitpbmxpbmUgX1Vud2luZF9QdHIKK19VbndpbmRfR2V0 SVAgKHN0cnVjdCBfVW53aW5kX0NvbnRleHQgKmNvbnRleHQpCit7CisgIHJl dHVybiAoX1Vud2luZF9QdHIpIGNvbnRleHQtPnJhOworfQorCisvKiBSZXRy aWV2ZSB0aGUgcmV0dXJuIGFkZHJlc3MgYW5kIGZsYWcgd2hldGhlciB0aGF0 IElQIGlzIGJlZm9yZQorICAgb3IgYWZ0ZXIgZmlyc3Qgbm90IHlldCBmdWxs eSBleGVjdXRlZCBpbnN0cnVjdGlvbi4gICovCisKK2lubGluZSBfVW53aW5k X1B0cgorX1Vud2luZF9HZXRJUEluZm8gKHN0cnVjdCBfVW53aW5kX0NvbnRl eHQgKmNvbnRleHQsIGludCAqaXBfYmVmb3JlX2luc24pCit7CisgICppcF9i ZWZvcmVfaW5zbiA9IF9VbndpbmRfSXNTaWduYWxGcmFtZSAoY29udGV4dCk7 CisgIHJldHVybiAoX1Vud2luZF9QdHIpIGNvbnRleHQtPnJhOworfQorCisv KiBPdmVyd3JpdGUgdGhlIHJldHVybiBhZGRyZXNzIGZvciBDT05URVhUIHdp dGggVkFMLiAgKi8KKworaW5saW5lIHZvaWQKK19VbndpbmRfU2V0SVAgKHN0 cnVjdCBfVW53aW5kX0NvbnRleHQgKmNvbnRleHQsIF9VbndpbmRfUHRyIHZh bCkKK3sKKyAgY29udGV4dC0+cmEgPSAodm9pZCAqKSB2YWw7Cit9CisKK3Zv aWQgKgorX1Vud2luZF9HZXRMYW5ndWFnZVNwZWNpZmljRGF0YSAoc3RydWN0 IF9VbndpbmRfQ29udGV4dCAqY29udGV4dCkKK3sKKyAgcmV0dXJuIGNvbnRl eHQtPmxzZGE7Cit9CisKK19VbndpbmRfUHRyCitfVW53aW5kX0dldFJlZ2lv blN0YXJ0IChzdHJ1Y3QgX1Vud2luZF9Db250ZXh0ICpjb250ZXh0KQorewor ICByZXR1cm4gKF9VbndpbmRfUHRyKSBjb250ZXh0LT5iYXNlcy5mdW5jOwor fQorCit2b2lkICoKK19VbndpbmRfRmluZEVuY2xvc2luZ0Z1bmN0aW9uICh2 b2lkICpwYykKK3sKKyAgc3RydWN0IGR3YXJmX2VoX2Jhc2VzIGJhc2VzOwor ICBjb25zdCBzdHJ1Y3QgZHdhcmZfZmRlICpmZGUgPSBfVW53aW5kX0ZpbmRf RkRFIChwYy0xLCAmYmFzZXMpOworICBpZiAoZmRlKQorICAgIHJldHVybiBi YXNlcy5mdW5jOworICBlbHNlCisgICAgcmV0dXJuIE5VTEw7Cit9CisKKyNp Zm5kZWYgX19pYTY0X18KK19VbndpbmRfUHRyCitfVW53aW5kX0dldERhdGFS ZWxCYXNlIChzdHJ1Y3QgX1Vud2luZF9Db250ZXh0ICpjb250ZXh0KQorewor ICByZXR1cm4gKF9VbndpbmRfUHRyKSBjb250ZXh0LT5iYXNlcy5kYmFzZTsK K30KKworX1Vud2luZF9QdHIKK19VbndpbmRfR2V0VGV4dFJlbEJhc2UgKHN0 cnVjdCBfVW53aW5kX0NvbnRleHQgKmNvbnRleHQpCit7CisgIHJldHVybiAo X1Vud2luZF9QdHIpIGNvbnRleHQtPmJhc2VzLnRiYXNlOworfQorI2VuZGlm CisKKyNpZmRlZiBNRF9VTldJTkRfU1VQUE9SVAorI2luY2x1ZGUgTURfVU5X SU5EX1NVUFBPUlQKKyNlbmRpZgorDAorLyogRXh0cmFjdCBhbnkgaW50ZXJl c3RpbmcgaW5mb3JtYXRpb24gZnJvbSB0aGUgQ0lFIGZvciB0aGUgdHJhbnNs YXRpb24KKyAgIHVuaXQgRiBiZWxvbmdzIHRvLiAgUmV0dXJuIGEgcG9pbnRl ciB0byB0aGUgYnl0ZSBhZnRlciB0aGUgYXVnbWVudGF0aW9uLAorICAgb3Ig TlVMTCBpZiB3ZSBlbmNvdW50ZXJlZCBhbiB1bmRlY2lwaGVyYWJsZSBhdWdt ZW50YXRpb24uICAqLworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciAq CitleHRyYWN0X2NpZV9pbmZvIChjb25zdCBzdHJ1Y3QgZHdhcmZfY2llICpj aWUsIHN0cnVjdCBfVW53aW5kX0NvbnRleHQgKmNvbnRleHQsCisJCSAgX1Vu d2luZF9GcmFtZVN0YXRlICpmcykKK3sKKyAgY29uc3QgdW5zaWduZWQgY2hh ciAqYXVnID0gY2llLT5hdWdtZW50YXRpb247CisgIGNvbnN0IHVuc2lnbmVk IGNoYXIgKnAgPSBhdWcgKyBzdHJsZW4gKChjb25zdCBjaGFyICopYXVnKSAr IDE7CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnJldCA9IE5VTEw7CisgIF91 bGViMTI4X3QgdXRtcDsKKyAgX3NsZWIxMjhfdCBzdG1wOworCisgIC8qIGcr KyB2MiAiZWgiIGhhcyBwb2ludGVyIGltbWVkaWF0ZWx5IGZvbGxvd2luZyBh dWdtZW50YXRpb24gc3RyaW5nLAorICAgICBzbyBpdCBtdXN0IGJlIGhhbmRs ZWQgZmlyc3QuICAqLworICBpZiAoYXVnWzBdID09ICdlJyAmJiBhdWdbMV0g PT0gJ2gnKQorICAgIHsKKyAgICAgIGZzLT5laF9wdHIgPSByZWFkX3BvaW50 ZXIgKHApOworICAgICAgcCArPSBzaXplb2YgKHZvaWQgKik7CisgICAgICBh dWcgKz0gMjsKKyAgICB9CisKKyAgLyogSW1tZWRpYXRlbHkgZm9sbG93aW5n IHRoZSBhdWdtZW50YXRpb24gYXJlIHRoZSBjb2RlIGFuZAorICAgICBkYXRh IGFsaWdubWVudCBhbmQgcmV0dXJuIGFkZHJlc3MgY29sdW1uLiAgKi8KKyAg cCA9IHJlYWRfdWxlYjEyOCAocCwgJnV0bXApOworICBmcy0+Y29kZV9hbGln biA9IChfVW53aW5kX1dvcmQpdXRtcDsKKyAgcCA9IHJlYWRfc2xlYjEyOCAo cCwgJnN0bXApOworICBmcy0+ZGF0YV9hbGlnbiA9IChfVW53aW5kX1N3b3Jk KXN0bXA7CisgIGlmIChjaWUtPnZlcnNpb24gPT0gMSkKKyAgICBmcy0+cmV0 YWRkcl9jb2x1bW4gPSAqcCsrOworICBlbHNlCisgICAgeworICAgICAgcCA9 IHJlYWRfdWxlYjEyOCAocCwgJnV0bXApOworICAgICAgZnMtPnJldGFkZHJf Y29sdW1uID0gKF9VbndpbmRfV29yZCl1dG1wOworICAgIH0KKyAgZnMtPmxz ZGFfZW5jb2RpbmcgPSBEV19FSF9QRV9vbWl0OworCisgIC8qIElmIHRoZSBh dWdtZW50YXRpb24gc3RhcnRzIHdpdGggJ3onLCB0aGVuIGEgdWxlYjEyOCBp bW1lZGlhdGVseQorICAgICBmb2xsb3dzIGNvbnRhaW5pbmcgdGhlIGxlbmd0 aCBvZiB0aGUgYXVnbWVudGF0aW9uIGZpZWxkIGZvbGxvd2luZworICAgICB0 aGUgc2l6ZS4gICovCisgIGlmICgqYXVnID09ICd6JykKKyAgICB7CisgICAg ICBwID0gcmVhZF91bGViMTI4IChwLCAmdXRtcCk7CisgICAgICByZXQgPSBw ICsgdXRtcDsKKworICAgICAgZnMtPnNhd196ID0gMTsKKyAgICAgICsrYXVn OworICAgIH0KKworICAvKiBJdGVyYXRlIG92ZXIgcmVjb2duaXplZCBhdWdt ZW50YXRpb24gc3Vic2VxdWVuY2VzLiAgKi8KKyAgd2hpbGUgKCphdWcgIT0g J1wwJykKKyAgICB7CisgICAgICAvKiAiTCIgaW5kaWNhdGVzIGEgYnl0ZSBz aG93aW5nIGhvdyB0aGUgTFNEQSBwb2ludGVyIGlzIGVuY29kZWQuICAqLwor ICAgICAgaWYgKGF1Z1swXSA9PSAnTCcpCisJeworCSAgZnMtPmxzZGFfZW5j b2RpbmcgPSAqcCsrOworCSAgYXVnICs9IDE7CisJfQorCisgICAgICAvKiAi UiIgaW5kaWNhdGVzIGEgYnl0ZSBpbmRpY2F0aW5nIGhvdyBGREUgYWRkcmVz c2VzIGFyZSBlbmNvZGVkLiAgKi8KKyAgICAgIGVsc2UgaWYgKGF1Z1swXSA9 PSAnUicpCisJeworCSAgZnMtPmZkZV9lbmNvZGluZyA9ICpwKys7CisJICBh dWcgKz0gMTsKKwl9CisKKyAgICAgIC8qICJQIiBpbmRpY2F0ZXMgYSBwZXJz b25hbGl0eSByb3V0aW5lIGluIHRoZSBDSUUgYXVnbWVudGF0aW9uLiAgKi8K KyAgICAgIGVsc2UgaWYgKGF1Z1swXSA9PSAnUCcpCisJeworCSAgX1Vud2lu ZF9QdHIgcGVyc29uYWxpdHk7CisKKwkgIHAgPSByZWFkX2VuY29kZWRfdmFs dWUgKGNvbnRleHQsICpwLCBwICsgMSwgJnBlcnNvbmFsaXR5KTsKKwkgIGZz LT5wZXJzb25hbGl0eSA9IChfVW53aW5kX1BlcnNvbmFsaXR5X0ZuKSBwZXJz b25hbGl0eTsKKwkgIGF1ZyArPSAxOworCX0KKworICAgICAgLyogIlMiIGlu ZGljYXRlcyBhIHNpZ25hbCBmcmFtZS4gICovCisgICAgICBlbHNlIGlmIChh dWdbMF0gPT0gJ1MnKQorCXsKKwkgIGZzLT5zaWduYWxfZnJhbWUgPSAxOwor CSAgYXVnICs9IDE7CisJfQorCisgICAgICAvKiBPdGhlcndpc2Ugd2UgaGF2 ZSBhbiB1bmtub3duIGF1Z21lbnRhdGlvbiBzdHJpbmcuCisJIEJhaWwgdW5s ZXNzIHdlIHNhdyBhICd6JyBwcmVmaXguICAqLworICAgICAgZWxzZQorCXJl dHVybiByZXQ7CisgICAgfQorCisgIHJldHVybiByZXQgPyByZXQgOiBwOwor fQorCisKKy8qIERlY29kZSBhIERXX09QIHN0YWNrIHByb2dyYW0uICBSZXR1 cm4gdGhlIHRvcCBvZiBzdGFjay4gIFB1c2ggSU5JVElBTAorICAgb250byB0 aGUgc3RhY2sgdG8gc3RhcnQuICAqLworCitzdGF0aWMgX1Vud2luZF9Xb3Jk CitleGVjdXRlX3N0YWNrX29wIChjb25zdCB1bnNpZ25lZCBjaGFyICpvcF9w dHIsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm9wX2VuZCwKKwkJICBzdHJ1Y3Qg X1Vud2luZF9Db250ZXh0ICpjb250ZXh0LCBfVW53aW5kX1dvcmQgaW5pdGlh bCkKK3sKKyAgX1Vud2luZF9Xb3JkIHN0YWNrWzY0XTsJLyogPz8/IEFzc3Vt ZSB0aGlzIGlzIGVub3VnaC4gICovCisgIGludCBzdGFja19lbHQ7CisKKyAg c3RhY2tbMF0gPSBpbml0aWFsOworICBzdGFja19lbHQgPSAxOworCisgIHdo aWxlIChvcF9wdHIgPCBvcF9lbmQpCisgICAgeworICAgICAgZW51bSBkd2Fy Zl9sb2NhdGlvbl9hdG9tIG9wID0gKm9wX3B0cisrOworICAgICAgX1Vud2lu ZF9Xb3JkIHJlc3VsdDsKKyAgICAgIF91bGViMTI4X3QgcmVnLCB1dG1wOwor ICAgICAgX3NsZWIxMjhfdCBvZmZzZXQsIHN0bXA7CisKKyAgICAgIHN3aXRj aCAob3ApCisJeworCWNhc2UgRFdfT1BfbGl0MDoKKwljYXNlIERXX09QX2xp dDE6CisJY2FzZSBEV19PUF9saXQyOgorCWNhc2UgRFdfT1BfbGl0MzoKKwlj YXNlIERXX09QX2xpdDQ6CisJY2FzZSBEV19PUF9saXQ1OgorCWNhc2UgRFdf T1BfbGl0NjoKKwljYXNlIERXX09QX2xpdDc6CisJY2FzZSBEV19PUF9saXQ4 OgorCWNhc2UgRFdfT1BfbGl0OToKKwljYXNlIERXX09QX2xpdDEwOgorCWNh c2UgRFdfT1BfbGl0MTE6CisJY2FzZSBEV19PUF9saXQxMjoKKwljYXNlIERX X09QX2xpdDEzOgorCWNhc2UgRFdfT1BfbGl0MTQ6CisJY2FzZSBEV19PUF9s aXQxNToKKwljYXNlIERXX09QX2xpdDE2OgorCWNhc2UgRFdfT1BfbGl0MTc6 CisJY2FzZSBEV19PUF9saXQxODoKKwljYXNlIERXX09QX2xpdDE5OgorCWNh c2UgRFdfT1BfbGl0MjA6CisJY2FzZSBEV19PUF9saXQyMToKKwljYXNlIERX X09QX2xpdDIyOgorCWNhc2UgRFdfT1BfbGl0MjM6CisJY2FzZSBEV19PUF9s aXQyNDoKKwljYXNlIERXX09QX2xpdDI1OgorCWNhc2UgRFdfT1BfbGl0MjY6 CisJY2FzZSBEV19PUF9saXQyNzoKKwljYXNlIERXX09QX2xpdDI4OgorCWNh c2UgRFdfT1BfbGl0Mjk6CisJY2FzZSBEV19PUF9saXQzMDoKKwljYXNlIERX X09QX2xpdDMxOgorCSAgcmVzdWx0ID0gb3AgLSBEV19PUF9saXQwOworCSAg YnJlYWs7CisKKwljYXNlIERXX09QX2FkZHI6CisJICByZXN1bHQgPSAoX1Vu d2luZF9Xb3JkKSAoX1Vud2luZF9QdHIpIHJlYWRfcG9pbnRlciAob3BfcHRy KTsKKwkgIG9wX3B0ciArPSBzaXplb2YgKHZvaWQgKik7CisJICBicmVhazsK KworCWNhc2UgRFdfT1BfR05VX2VuY29kZWRfYWRkcjoKKwkgIHsKKwkgICAg X1Vud2luZF9QdHIgcHJlc3VsdDsKKwkgICAgb3BfcHRyID0gcmVhZF9lbmNv ZGVkX3ZhbHVlIChjb250ZXh0LCAqb3BfcHRyLCBvcF9wdHIrMSwgJnByZXN1 bHQpOworCSAgICByZXN1bHQgPSBwcmVzdWx0OworCSAgfQorCSAgYnJlYWs7 CisKKwljYXNlIERXX09QX2NvbnN0MXU6CisJICByZXN1bHQgPSByZWFkXzF1 IChvcF9wdHIpOworCSAgb3BfcHRyICs9IDE7CisJICBicmVhazsKKwljYXNl IERXX09QX2NvbnN0MXM6CisJICByZXN1bHQgPSByZWFkXzFzIChvcF9wdHIp OworCSAgb3BfcHRyICs9IDE7CisJICBicmVhazsKKwljYXNlIERXX09QX2Nv bnN0MnU6CisJICByZXN1bHQgPSByZWFkXzJ1IChvcF9wdHIpOworCSAgb3Bf cHRyICs9IDI7CisJICBicmVhazsKKwljYXNlIERXX09QX2NvbnN0MnM6CisJ ICByZXN1bHQgPSByZWFkXzJzIChvcF9wdHIpOworCSAgb3BfcHRyICs9IDI7 CisJICBicmVhazsKKwljYXNlIERXX09QX2NvbnN0NHU6CisJICByZXN1bHQg PSByZWFkXzR1IChvcF9wdHIpOworCSAgb3BfcHRyICs9IDQ7CisJICBicmVh azsKKwljYXNlIERXX09QX2NvbnN0NHM6CisJICByZXN1bHQgPSByZWFkXzRz IChvcF9wdHIpOworCSAgb3BfcHRyICs9IDQ7CisJICBicmVhazsKKwljYXNl IERXX09QX2NvbnN0OHU6CisJICByZXN1bHQgPSByZWFkXzh1IChvcF9wdHIp OworCSAgb3BfcHRyICs9IDg7CisJICBicmVhazsKKwljYXNlIERXX09QX2Nv bnN0OHM6CisJICByZXN1bHQgPSByZWFkXzhzIChvcF9wdHIpOworCSAgb3Bf cHRyICs9IDg7CisJICBicmVhazsKKwljYXNlIERXX09QX2NvbnN0dToKKwkg IG9wX3B0ciA9IHJlYWRfdWxlYjEyOCAob3BfcHRyLCAmdXRtcCk7CisJICBy ZXN1bHQgPSAoX1Vud2luZF9Xb3JkKXV0bXA7CisJICBicmVhazsKKwljYXNl IERXX09QX2NvbnN0czoKKwkgIG9wX3B0ciA9IHJlYWRfc2xlYjEyOCAob3Bf cHRyLCAmc3RtcCk7CisJICByZXN1bHQgPSAoX1Vud2luZF9Td29yZClzdG1w OworCSAgYnJlYWs7CisKKwljYXNlIERXX09QX3JlZzA6CisJY2FzZSBEV19P UF9yZWcxOgorCWNhc2UgRFdfT1BfcmVnMjoKKwljYXNlIERXX09QX3JlZzM6 CisJY2FzZSBEV19PUF9yZWc0OgorCWNhc2UgRFdfT1BfcmVnNToKKwljYXNl IERXX09QX3JlZzY6CisJY2FzZSBEV19PUF9yZWc3OgorCWNhc2UgRFdfT1Bf cmVnODoKKwljYXNlIERXX09QX3JlZzk6CisJY2FzZSBEV19PUF9yZWcxMDoK KwljYXNlIERXX09QX3JlZzExOgorCWNhc2UgRFdfT1BfcmVnMTI6CisJY2Fz ZSBEV19PUF9yZWcxMzoKKwljYXNlIERXX09QX3JlZzE0OgorCWNhc2UgRFdf T1BfcmVnMTU6CisJY2FzZSBEV19PUF9yZWcxNjoKKwljYXNlIERXX09QX3Jl ZzE3OgorCWNhc2UgRFdfT1BfcmVnMTg6CisJY2FzZSBEV19PUF9yZWcxOToK KwljYXNlIERXX09QX3JlZzIwOgorCWNhc2UgRFdfT1BfcmVnMjE6CisJY2Fz ZSBEV19PUF9yZWcyMjoKKwljYXNlIERXX09QX3JlZzIzOgorCWNhc2UgRFdf T1BfcmVnMjQ6CisJY2FzZSBEV19PUF9yZWcyNToKKwljYXNlIERXX09QX3Jl ZzI2OgorCWNhc2UgRFdfT1BfcmVnMjc6CisJY2FzZSBEV19PUF9yZWcyODoK KwljYXNlIERXX09QX3JlZzI5OgorCWNhc2UgRFdfT1BfcmVnMzA6CisJY2Fz ZSBEV19PUF9yZWczMToKKwkgIHJlc3VsdCA9IF9VbndpbmRfR2V0R1IgKGNv bnRleHQsIG9wIC0gRFdfT1BfcmVnMCk7CisJICBicmVhazsKKwljYXNlIERX X09QX3JlZ3g6CisJICBvcF9wdHIgPSByZWFkX3VsZWIxMjggKG9wX3B0ciwg JnJlZyk7CisJICByZXN1bHQgPSBfVW53aW5kX0dldEdSIChjb250ZXh0LCBy ZWcpOworCSAgYnJlYWs7CisKKwljYXNlIERXX09QX2JyZWcwOgorCWNhc2Ug RFdfT1BfYnJlZzE6CisJY2FzZSBEV19PUF9icmVnMjoKKwljYXNlIERXX09Q X2JyZWczOgorCWNhc2UgRFdfT1BfYnJlZzQ6CisJY2FzZSBEV19PUF9icmVn NToKKwljYXNlIERXX09QX2JyZWc2OgorCWNhc2UgRFdfT1BfYnJlZzc6CisJ Y2FzZSBEV19PUF9icmVnODoKKwljYXNlIERXX09QX2JyZWc5OgorCWNhc2Ug RFdfT1BfYnJlZzEwOgorCWNhc2UgRFdfT1BfYnJlZzExOgorCWNhc2UgRFdf T1BfYnJlZzEyOgorCWNhc2UgRFdfT1BfYnJlZzEzOgorCWNhc2UgRFdfT1Bf YnJlZzE0OgorCWNhc2UgRFdfT1BfYnJlZzE1OgorCWNhc2UgRFdfT1BfYnJl ZzE2OgorCWNhc2UgRFdfT1BfYnJlZzE3OgorCWNhc2UgRFdfT1BfYnJlZzE4 OgorCWNhc2UgRFdfT1BfYnJlZzE5OgorCWNhc2UgRFdfT1BfYnJlZzIwOgor CWNhc2UgRFdfT1BfYnJlZzIxOgorCWNhc2UgRFdfT1BfYnJlZzIyOgorCWNh c2UgRFdfT1BfYnJlZzIzOgorCWNhc2UgRFdfT1BfYnJlZzI0OgorCWNhc2Ug RFdfT1BfYnJlZzI1OgorCWNhc2UgRFdfT1BfYnJlZzI2OgorCWNhc2UgRFdf T1BfYnJlZzI3OgorCWNhc2UgRFdfT1BfYnJlZzI4OgorCWNhc2UgRFdfT1Bf YnJlZzI5OgorCWNhc2UgRFdfT1BfYnJlZzMwOgorCWNhc2UgRFdfT1BfYnJl ZzMxOgorCSAgb3BfcHRyID0gcmVhZF9zbGViMTI4IChvcF9wdHIsICZvZmZz ZXQpOworCSAgcmVzdWx0ID0gX1Vud2luZF9HZXRHUiAoY29udGV4dCwgb3Ag LSBEV19PUF9icmVnMCkgKyBvZmZzZXQ7CisJICBicmVhazsKKwljYXNlIERX X09QX2JyZWd4OgorCSAgb3BfcHRyID0gcmVhZF91bGViMTI4IChvcF9wdHIs ICZyZWcpOworCSAgb3BfcHRyID0gcmVhZF9zbGViMTI4IChvcF9wdHIsICZv ZmZzZXQpOworCSAgcmVzdWx0ID0gX1Vud2luZF9HZXRHUiAoY29udGV4dCwg cmVnKSArIChfVW53aW5kX1dvcmQpb2Zmc2V0OworCSAgYnJlYWs7CisKKwlj YXNlIERXX09QX2R1cDoKKwkgIGdjY19hc3NlcnQgKHN0YWNrX2VsdCk7CisJ ICByZXN1bHQgPSBzdGFja1tzdGFja19lbHQgLSAxXTsKKwkgIGJyZWFrOwor CisJY2FzZSBEV19PUF9kcm9wOgorCSAgZ2NjX2Fzc2VydCAoc3RhY2tfZWx0 KTsKKwkgIHN0YWNrX2VsdCAtPSAxOworCSAgZ290byBub19wdXNoOworCisJ Y2FzZSBEV19PUF9waWNrOgorCSAgb2Zmc2V0ID0gKm9wX3B0cisrOworCSAg Z2NjX2Fzc2VydCAob2Zmc2V0IDwgc3RhY2tfZWx0IC0gMSk7CisJICByZXN1 bHQgPSBzdGFja1tzdGFja19lbHQgLSAxIC0gb2Zmc2V0XTsKKwkgIGJyZWFr OworCisJY2FzZSBEV19PUF9vdmVyOgorCSAgZ2NjX2Fzc2VydCAoc3RhY2tf ZWx0ID49IDIpOworCSAgcmVzdWx0ID0gc3RhY2tbc3RhY2tfZWx0IC0gMl07 CisJICBicmVhazsKKworCWNhc2UgRFdfT1Bfc3dhcDoKKwkgIHsKKwkgICAg X1Vud2luZF9Xb3JkIHQ7CisJICAgIGdjY19hc3NlcnQgKHN0YWNrX2VsdCA+ PSAyKTsKKwkgICAgdCA9IHN0YWNrW3N0YWNrX2VsdCAtIDFdOworCSAgICBz dGFja1tzdGFja19lbHQgLSAxXSA9IHN0YWNrW3N0YWNrX2VsdCAtIDJdOwor CSAgICBzdGFja1tzdGFja19lbHQgLSAyXSA9IHQ7CisJICAgIGdvdG8gbm9f cHVzaDsKKwkgIH0KKworCWNhc2UgRFdfT1Bfcm90OgorCSAgeworCSAgICBf VW53aW5kX1dvcmQgdDEsIHQyLCB0MzsKKworCSAgICBnY2NfYXNzZXJ0IChz dGFja19lbHQgPj0gMyk7CisJICAgIHQxID0gc3RhY2tbc3RhY2tfZWx0IC0g MV07CisJICAgIHQyID0gc3RhY2tbc3RhY2tfZWx0IC0gMl07CisJICAgIHQz ID0gc3RhY2tbc3RhY2tfZWx0IC0gM107CisJICAgIHN0YWNrW3N0YWNrX2Vs dCAtIDFdID0gdDI7CisJICAgIHN0YWNrW3N0YWNrX2VsdCAtIDJdID0gdDM7 CisJICAgIHN0YWNrW3N0YWNrX2VsdCAtIDNdID0gdDE7CisJICAgIGdvdG8g bm9fcHVzaDsKKwkgIH0KKworCWNhc2UgRFdfT1BfZGVyZWY6CisJY2FzZSBE V19PUF9kZXJlZl9zaXplOgorCWNhc2UgRFdfT1BfYWJzOgorCWNhc2UgRFdf T1BfbmVnOgorCWNhc2UgRFdfT1Bfbm90OgorCWNhc2UgRFdfT1BfcGx1c191 Y29uc3Q6CisJICAvKiBVbmFyeSBvcGVyYXRpb25zLiAgKi8KKwkgIGdjY19h c3NlcnQgKHN0YWNrX2VsdCk7CisJICBzdGFja19lbHQgLT0gMTsKKworCSAg cmVzdWx0ID0gc3RhY2tbc3RhY2tfZWx0XTsKKworCSAgc3dpdGNoIChvcCkK KwkgICAgeworCSAgICBjYXNlIERXX09QX2RlcmVmOgorCSAgICAgIHsKKwkJ dm9pZCAqcHRyID0gKHZvaWQgKikgKF9VbndpbmRfUHRyKSByZXN1bHQ7CisJ CXJlc3VsdCA9IChfVW53aW5kX1B0cikgcmVhZF9wb2ludGVyIChwdHIpOwor CSAgICAgIH0KKwkgICAgICBicmVhazsKKworCSAgICBjYXNlIERXX09QX2Rl cmVmX3NpemU6CisJICAgICAgeworCQl2b2lkICpwdHIgPSAodm9pZCAqKSAo X1Vud2luZF9QdHIpIHJlc3VsdDsKKwkJc3dpdGNoICgqb3BfcHRyKyspCisJ CSAgeworCQkgIGNhc2UgMToKKwkJICAgIHJlc3VsdCA9IHJlYWRfMXUgKHB0 cik7CisJCSAgICBicmVhazsKKwkJICBjYXNlIDI6CisJCSAgICByZXN1bHQg PSByZWFkXzJ1IChwdHIpOworCQkgICAgYnJlYWs7CisJCSAgY2FzZSA0Ogor CQkgICAgcmVzdWx0ID0gcmVhZF80dSAocHRyKTsKKwkJICAgIGJyZWFrOwor CQkgIGNhc2UgODoKKwkJICAgIHJlc3VsdCA9IHJlYWRfOHUgKHB0cik7CisJ CSAgICBicmVhazsKKwkJICBkZWZhdWx0OgorCQkgICAgZ2NjX3VucmVhY2hh YmxlICgpOworCQkgIH0KKwkgICAgICB9CisJICAgICAgYnJlYWs7CisKKwkg ICAgY2FzZSBEV19PUF9hYnM6CisJICAgICAgaWYgKChfVW53aW5kX1N3b3Jk KSByZXN1bHQgPCAwKQorCQlyZXN1bHQgPSAtcmVzdWx0OworCSAgICAgIGJy ZWFrOworCSAgICBjYXNlIERXX09QX25lZzoKKwkgICAgICByZXN1bHQgPSAt cmVzdWx0OworCSAgICAgIGJyZWFrOworCSAgICBjYXNlIERXX09QX25vdDoK KwkgICAgICByZXN1bHQgPSB+cmVzdWx0OworCSAgICAgIGJyZWFrOworCSAg ICBjYXNlIERXX09QX3BsdXNfdWNvbnN0OgorCSAgICAgIG9wX3B0ciA9IHJl YWRfdWxlYjEyOCAob3BfcHRyLCAmdXRtcCk7CisJICAgICAgcmVzdWx0ICs9 IChfVW53aW5kX1dvcmQpdXRtcDsKKwkgICAgICBicmVhazsKKworCSAgICBk ZWZhdWx0OgorCSAgICAgIGdjY191bnJlYWNoYWJsZSAoKTsKKwkgICAgfQor CSAgYnJlYWs7CisKKwljYXNlIERXX09QX2FuZDoKKwljYXNlIERXX09QX2Rp djoKKwljYXNlIERXX09QX21pbnVzOgorCWNhc2UgRFdfT1BfbW9kOgorCWNh c2UgRFdfT1BfbXVsOgorCWNhc2UgRFdfT1Bfb3I6CisJY2FzZSBEV19PUF9w bHVzOgorCWNhc2UgRFdfT1Bfc2hsOgorCWNhc2UgRFdfT1Bfc2hyOgorCWNh c2UgRFdfT1Bfc2hyYToKKwljYXNlIERXX09QX3hvcjoKKwljYXNlIERXX09Q X2xlOgorCWNhc2UgRFdfT1BfZ2U6CisJY2FzZSBEV19PUF9lcToKKwljYXNl IERXX09QX2x0OgorCWNhc2UgRFdfT1BfZ3Q6CisJY2FzZSBEV19PUF9uZToK KwkgIHsKKwkgICAgLyogQmluYXJ5IG9wZXJhdGlvbnMuICAqLworCSAgICBf VW53aW5kX1dvcmQgZmlyc3QsIHNlY29uZDsKKwkgICAgZ2NjX2Fzc2VydCAo c3RhY2tfZWx0ID49IDIpOworCSAgICBzdGFja19lbHQgLT0gMjsKKworCSAg ICBzZWNvbmQgPSBzdGFja1tzdGFja19lbHRdOworCSAgICBmaXJzdCA9IHN0 YWNrW3N0YWNrX2VsdCArIDFdOworCisJICAgIHN3aXRjaCAob3ApCisJICAg ICAgeworCSAgICAgIGNhc2UgRFdfT1BfYW5kOgorCQlyZXN1bHQgPSBzZWNv bmQgJiBmaXJzdDsKKwkJYnJlYWs7CisJICAgICAgY2FzZSBEV19PUF9kaXY6 CisJCXJlc3VsdCA9IChfVW53aW5kX1N3b3JkKSBzZWNvbmQgLyAoX1Vud2lu ZF9Td29yZCkgZmlyc3Q7CisJCWJyZWFrOworCSAgICAgIGNhc2UgRFdfT1Bf bWludXM6CisJCXJlc3VsdCA9IHNlY29uZCAtIGZpcnN0OworCQlicmVhazsK KwkgICAgICBjYXNlIERXX09QX21vZDoKKwkJcmVzdWx0ID0gc2Vjb25kICUg Zmlyc3Q7CisJCWJyZWFrOworCSAgICAgIGNhc2UgRFdfT1BfbXVsOgorCQly ZXN1bHQgPSBzZWNvbmQgKiBmaXJzdDsKKwkJYnJlYWs7CisJICAgICAgY2Fz ZSBEV19PUF9vcjoKKwkJcmVzdWx0ID0gc2Vjb25kIHwgZmlyc3Q7CisJCWJy ZWFrOworCSAgICAgIGNhc2UgRFdfT1BfcGx1czoKKwkJcmVzdWx0ID0gc2Vj b25kICsgZmlyc3Q7CisJCWJyZWFrOworCSAgICAgIGNhc2UgRFdfT1Bfc2hs OgorCQlyZXN1bHQgPSBzZWNvbmQgPDwgZmlyc3Q7CisJCWJyZWFrOworCSAg ICAgIGNhc2UgRFdfT1Bfc2hyOgorCQlyZXN1bHQgPSBzZWNvbmQgPj4gZmly c3Q7CisJCWJyZWFrOworCSAgICAgIGNhc2UgRFdfT1Bfc2hyYToKKwkJcmVz dWx0ID0gKF9VbndpbmRfU3dvcmQpIHNlY29uZCA+PiBmaXJzdDsKKwkJYnJl YWs7CisJICAgICAgY2FzZSBEV19PUF94b3I6CisJCXJlc3VsdCA9IHNlY29u ZCBeIGZpcnN0OworCQlicmVhazsKKwkgICAgICBjYXNlIERXX09QX2xlOgor CQlyZXN1bHQgPSAoX1Vud2luZF9Td29yZCkgc2Vjb25kIDw9IChfVW53aW5k X1N3b3JkKSBmaXJzdDsKKwkJYnJlYWs7CisJICAgICAgY2FzZSBEV19PUF9n ZToKKwkJcmVzdWx0ID0gKF9VbndpbmRfU3dvcmQpIHNlY29uZCA+PSAoX1Vu d2luZF9Td29yZCkgZmlyc3Q7CisJCWJyZWFrOworCSAgICAgIGNhc2UgRFdf T1BfZXE6CisJCXJlc3VsdCA9IChfVW53aW5kX1N3b3JkKSBzZWNvbmQgPT0g KF9VbndpbmRfU3dvcmQpIGZpcnN0OworCQlicmVhazsKKwkgICAgICBjYXNl IERXX09QX2x0OgorCQlyZXN1bHQgPSAoX1Vud2luZF9Td29yZCkgc2Vjb25k IDwgKF9VbndpbmRfU3dvcmQpIGZpcnN0OworCQlicmVhazsKKwkgICAgICBj YXNlIERXX09QX2d0OgorCQlyZXN1bHQgPSAoX1Vud2luZF9Td29yZCkgc2Vj b25kID4gKF9VbndpbmRfU3dvcmQpIGZpcnN0OworCQlicmVhazsKKwkgICAg ICBjYXNlIERXX09QX25lOgorCQlyZXN1bHQgPSAoX1Vud2luZF9Td29yZCkg c2Vjb25kICE9IChfVW53aW5kX1N3b3JkKSBmaXJzdDsKKwkJYnJlYWs7CisK KwkgICAgICBkZWZhdWx0OgorCQlnY2NfdW5yZWFjaGFibGUgKCk7CisJICAg ICAgfQorCSAgfQorCSAgYnJlYWs7CisKKwljYXNlIERXX09QX3NraXA6CisJ ICBvZmZzZXQgPSByZWFkXzJzIChvcF9wdHIpOworCSAgb3BfcHRyICs9IDI7 CisJICBvcF9wdHIgKz0gb2Zmc2V0OworCSAgZ290byBub19wdXNoOworCisJ Y2FzZSBEV19PUF9icmE6CisJICBnY2NfYXNzZXJ0IChzdGFja19lbHQpOwor CSAgc3RhY2tfZWx0IC09IDE7CisKKwkgIG9mZnNldCA9IHJlYWRfMnMgKG9w X3B0cik7CisJICBvcF9wdHIgKz0gMjsKKwkgIGlmIChzdGFja1tzdGFja19l bHRdICE9IDApCisJICAgIG9wX3B0ciArPSBvZmZzZXQ7CisJICBnb3RvIG5v X3B1c2g7CisKKwljYXNlIERXX09QX25vcDoKKwkgIGdvdG8gbm9fcHVzaDsK KworCWRlZmF1bHQ6CisJICBnY2NfdW5yZWFjaGFibGUgKCk7CisJfQorCisg ICAgICAvKiBNb3N0IHRoaW5ncyBwdXNoIGEgcmVzdWx0IHZhbHVlLiAgKi8K KyAgICAgIGdjY19hc3NlcnQgKChzaXplX3QpIHN0YWNrX2VsdCA8IHNpemVv ZihzdGFjaykvc2l6ZW9mKCpzdGFjaykpOworICAgICAgc3RhY2tbc3RhY2tf ZWx0KytdID0gcmVzdWx0OworICAgIG5vX3B1c2g6OworICAgIH0KKworICAv KiBXZSB3ZXJlIGV4ZWN1dGluZyB0aGlzIHByb2dyYW0gdG8gZ2V0IGEgdmFs dWUuICBJdCBzaG91bGQgYmUKKyAgICAgYXQgdG9wIG9mIHN0YWNrLiAgKi8K KyAgZ2NjX2Fzc2VydCAoc3RhY2tfZWx0KTsKKyAgc3RhY2tfZWx0IC09IDE7 CisgIHJldHVybiBzdGFja1tzdGFja19lbHRdOworfQorCisKKy8qIERlY29k ZSBEV0FSRiAyIGNhbGwgZnJhbWUgaW5mb3JtYXRpb24uIFRha2VzIHBvaW50 ZXJzIHRoZQorICAgaW5zdHJ1Y3Rpb24gc2VxdWVuY2UgdG8gZGVjb2RlLCBj dXJyZW50IHJlZ2lzdGVyIGluZm9ybWF0aW9uIGFuZAorICAgQ0lFIGluZm8s IGFuZCB0aGUgUEMgcmFuZ2UgdG8gZXZhbHVhdGUuICAqLworCitzdGF0aWMg dm9pZAorZXhlY3V0ZV9jZmFfcHJvZ3JhbSAoY29uc3QgdW5zaWduZWQgY2hh ciAqaW5zbl9wdHIsCisJCSAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5z bl9lbmQsCisJCSAgICAgc3RydWN0IF9VbndpbmRfQ29udGV4dCAqY29udGV4 dCwKKwkJICAgICBfVW53aW5kX0ZyYW1lU3RhdGUgKmZzKQoreworICBzdHJ1 Y3QgZnJhbWVfc3RhdGVfcmVnX2luZm8gKnVudXNlZF9ycyA9IE5VTEw7CisK KyAgLyogRG9uJ3QgYWxsb3cgcmVtZW1iZXIvcmVzdG9yZSBiZXR3ZWVuIENJ RSBhbmQgRkRFIHByb2dyYW1zLiAgKi8KKyAgZnMtPnJlZ3MucHJldiA9IE5V TEw7CisKKyAgLyogVGhlIGNvbXBhcmlzb24gd2l0aCB0aGUgcmV0dXJuIGFk ZHJlc3MgdXNlcyA8IHJhdGhlciB0aGFuIDw9IGJlY2F1c2UKKyAgICAgd2Ug YXJlIG9ubHkgaW50ZXJlc3RlZCBpbiB0aGUgZWZmZWN0cyBvZiBjb2RlIGJl Zm9yZSB0aGUgY2FsbDsgZm9yIGEKKyAgICAgbm9yZXR1cm4gZnVuY3Rpb24s IHRoZSByZXR1cm4gYWRkcmVzcyBtYXkgcG9pbnQgdG8gdW5yZWxhdGVkIGNv ZGUgd2l0aAorICAgICBhIGRpZmZlcmVudCBzdGFjayBjb25maWd1cmF0aW9u IHRoYXQgd2UgYXJlIG5vdCBpbnRlcmVzdGVkIGluLiAgV2UKKyAgICAgYXNz dW1lIHRoYXQgdGhlIGNhbGwgaXRzZWxmIGlzIHVud2luZCBpbmZvLW5ldXRy YWw7IGlmIG5vdCwgb3IgaWYKKyAgICAgdGhlcmUgYXJlIGRlbGF5IGluc3Ry dWN0aW9ucyB0aGF0IGFkanVzdCB0aGUgc3RhY2ssIHRoZXNlIG11c3QgYmUK KyAgICAgcmVmbGVjdGVkIGF0IHRoZSBwb2ludCBpbW1lZGlhdGVseSBiZWZv cmUgdGhlIGNhbGwgaW5zbi4KKyAgICAgSW4gc2lnbmFsIGZyYW1lcywgcmV0 dXJuIGFkZHJlc3MgaXMgYWZ0ZXIgbGFzdCBjb21wbGV0ZWQgaW5zdHJ1Y3Rp b24sCisgICAgIHNvIHdlIGFkZCAxIHRvIHJldHVybiBhZGRyZXNzIHRvIG1h a2UgdGhlIGNvbXBhcmlzb24gPD0uICAqLworICB3aGlsZSAoaW5zbl9wdHIg PCBpbnNuX2VuZAorCSAmJiBmcy0+cGMgPCBjb250ZXh0LT5yYSArIF9Vbndp bmRfSXNTaWduYWxGcmFtZSAoY29udGV4dCkpCisgICAgeworICAgICAgdW5z aWduZWQgY2hhciBpbnNuID0gKmluc25fcHRyKys7CisgICAgICBfdWxlYjEy OF90IHJlZywgdXRtcDsKKyAgICAgIF9zbGViMTI4X3Qgb2Zmc2V0LCBzdG1w OworCisgICAgICBpZiAoKGluc24gJiAweGMwKSA9PSBEV19DRkFfYWR2YW5j ZV9sb2MpCisJZnMtPnBjICs9IChpbnNuICYgMHgzZikgKiBmcy0+Y29kZV9h bGlnbjsKKyAgICAgIGVsc2UgaWYgKChpbnNuICYgMHhjMCkgPT0gRFdfQ0ZB X29mZnNldCkKKwl7CisJICByZWcgPSBpbnNuICYgMHgzZjsKKwkgIGluc25f cHRyID0gcmVhZF91bGViMTI4IChpbnNuX3B0ciwgJnV0bXApOworCSAgb2Zm c2V0ID0gKF9VbndpbmRfU3dvcmQpIHV0bXAgKiBmcy0+ZGF0YV9hbGlnbjsK KwkgIGZzLT5yZWdzLnJlZ1tEV0FSRl9SRUdfVE9fVU5XSU5EX0NPTFVNTiAo cmVnKV0uaG93CisJICAgID0gUkVHX1NBVkVEX09GRlNFVDsKKwkgIGZzLT5y ZWdzLnJlZ1tEV0FSRl9SRUdfVE9fVU5XSU5EX0NPTFVNTiAocmVnKV0ubG9j Lm9mZnNldCA9IG9mZnNldDsKKwl9CisgICAgICBlbHNlIGlmICgoaW5zbiAm IDB4YzApID09IERXX0NGQV9yZXN0b3JlKQorCXsKKwkgIHJlZyA9IGluc24g JiAweDNmOworCSAgZnMtPnJlZ3MucmVnW0RXQVJGX1JFR19UT19VTldJTkRf Q09MVU1OIChyZWcpXS5ob3cgPSBSRUdfVU5TQVZFRDsKKwl9CisgICAgICBl bHNlIHN3aXRjaCAoaW5zbikKKwl7CisJY2FzZSBEV19DRkFfc2V0X2xvYzoK KwkgIHsKKwkgICAgX1Vud2luZF9QdHIgcGM7CisKKwkgICAgaW5zbl9wdHIg PSByZWFkX2VuY29kZWRfdmFsdWUgKGNvbnRleHQsIGZzLT5mZGVfZW5jb2Rp bmcsCisJCQkJCSAgIGluc25fcHRyLCAmcGMpOworCSAgICBmcy0+cGMgPSAo dm9pZCAqKSBwYzsKKwkgIH0KKwkgIGJyZWFrOworCisJY2FzZSBEV19DRkFf YWR2YW5jZV9sb2MxOgorCSAgZnMtPnBjICs9IHJlYWRfMXUgKGluc25fcHRy KSAqIGZzLT5jb2RlX2FsaWduOworCSAgaW5zbl9wdHIgKz0gMTsKKwkgIGJy ZWFrOworCWNhc2UgRFdfQ0ZBX2FkdmFuY2VfbG9jMjoKKwkgIGZzLT5wYyAr PSByZWFkXzJ1IChpbnNuX3B0cikgKiBmcy0+Y29kZV9hbGlnbjsKKwkgIGlu c25fcHRyICs9IDI7CisJICBicmVhazsKKwljYXNlIERXX0NGQV9hZHZhbmNl X2xvYzQ6CisJICBmcy0+cGMgKz0gcmVhZF80dSAoaW5zbl9wdHIpICogZnMt PmNvZGVfYWxpZ247CisJICBpbnNuX3B0ciArPSA0OworCSAgYnJlYWs7CisK KwljYXNlIERXX0NGQV9vZmZzZXRfZXh0ZW5kZWQ6CisJICBpbnNuX3B0ciA9 IHJlYWRfdWxlYjEyOCAoaW5zbl9wdHIsICZyZWcpOworCSAgaW5zbl9wdHIg PSByZWFkX3VsZWIxMjggKGluc25fcHRyLCAmdXRtcCk7CisJICBvZmZzZXQg PSAoX1Vud2luZF9Td29yZCkgdXRtcCAqIGZzLT5kYXRhX2FsaWduOworCSAg ZnMtPnJlZ3MucmVnW0RXQVJGX1JFR19UT19VTldJTkRfQ09MVU1OIChyZWcp XS5ob3cKKwkgICAgPSBSRUdfU0FWRURfT0ZGU0VUOworCSAgZnMtPnJlZ3Mu cmVnW0RXQVJGX1JFR19UT19VTldJTkRfQ09MVU1OIChyZWcpXS5sb2Mub2Zm c2V0ID0gb2Zmc2V0OworCSAgYnJlYWs7CisKKwljYXNlIERXX0NGQV9yZXN0 b3JlX2V4dGVuZGVkOgorCSAgaW5zbl9wdHIgPSByZWFkX3VsZWIxMjggKGlu c25fcHRyLCAmcmVnKTsKKwkgIC8qIEZJWE1FLCB0aGlzIGlzIHdyb25nOyB0 aGUgQ0lFIG1pZ2h0IGhhdmUgc2FpZCB0aGF0IHRoZQorCSAgICAgcmVnaXN0 ZXIgd2FzIHNhdmVkIHNvbWV3aGVyZS4gICovCisJICBmcy0+cmVncy5yZWdb RFdBUkZfUkVHX1RPX1VOV0lORF9DT0xVTU4ocmVnKV0uaG93ID0gUkVHX1VO U0FWRUQ7CisJICBicmVhazsKKworCWNhc2UgRFdfQ0ZBX3NhbWVfdmFsdWU6 CisJICBpbnNuX3B0ciA9IHJlYWRfdWxlYjEyOCAoaW5zbl9wdHIsICZyZWcp OworCSAgZnMtPnJlZ3MucmVnW0RXQVJGX1JFR19UT19VTldJTkRfQ09MVU1O KHJlZyldLmhvdyA9IFJFR19VTlNBVkVEOworCSAgYnJlYWs7CisKKwljYXNl IERXX0NGQV91bmRlZmluZWQ6CisJICBpbnNuX3B0ciA9IHJlYWRfdWxlYjEy OCAoaW5zbl9wdHIsICZyZWcpOworCSAgZnMtPnJlZ3MucmVnW0RXQVJGX1JF R19UT19VTldJTkRfQ09MVU1OKHJlZyldLmhvdyA9IFJFR19VTkRFRklORUQ7 CisJICBicmVhazsKKworCWNhc2UgRFdfQ0ZBX25vcDoKKwkgIGJyZWFrOwor CisJY2FzZSBEV19DRkFfcmVnaXN0ZXI6CisJICB7CisJICAgIF91bGViMTI4 X3QgcmVnMjsKKwkgICAgaW5zbl9wdHIgPSByZWFkX3VsZWIxMjggKGluc25f cHRyLCAmcmVnKTsKKwkgICAgaW5zbl9wdHIgPSByZWFkX3VsZWIxMjggKGlu c25fcHRyLCAmcmVnMik7CisJICAgIGZzLT5yZWdzLnJlZ1tEV0FSRl9SRUdf VE9fVU5XSU5EX0NPTFVNTiAocmVnKV0uaG93ID0gUkVHX1NBVkVEX1JFRzsK KwkgICAgZnMtPnJlZ3MucmVnW0RXQVJGX1JFR19UT19VTldJTkRfQ09MVU1O IChyZWcpXS5sb2MucmVnID0KKwkgICAgICAoX1Vud2luZF9Xb3JkKXJlZzI7 CisJICB9CisJICBicmVhazsKKworCWNhc2UgRFdfQ0ZBX3JlbWVtYmVyX3N0 YXRlOgorCSAgeworCSAgICBzdHJ1Y3QgZnJhbWVfc3RhdGVfcmVnX2luZm8g Km5ld19yczsKKwkgICAgaWYgKHVudXNlZF9ycykKKwkgICAgICB7CisJCW5l d19ycyA9IHVudXNlZF9yczsKKwkJdW51c2VkX3JzID0gdW51c2VkX3JzLT5w cmV2OworCSAgICAgIH0KKwkgICAgZWxzZQorCSAgICAgIG5ld19ycyA9IGFs bG9jYSAoc2l6ZW9mIChzdHJ1Y3QgZnJhbWVfc3RhdGVfcmVnX2luZm8pKTsK KworCSAgICAqbmV3X3JzID0gZnMtPnJlZ3M7CisJICAgIGZzLT5yZWdzLnBy ZXYgPSBuZXdfcnM7CisJICB9CisJICBicmVhazsKKworCWNhc2UgRFdfQ0ZB X3Jlc3RvcmVfc3RhdGU6CisJICB7CisJICAgIHN0cnVjdCBmcmFtZV9zdGF0 ZV9yZWdfaW5mbyAqb2xkX3JzID0gZnMtPnJlZ3MucHJldjsKKwkgICAgZnMt PnJlZ3MgPSAqb2xkX3JzOworCSAgICBvbGRfcnMtPnByZXYgPSB1bnVzZWRf cnM7CisJICAgIHVudXNlZF9ycyA9IG9sZF9yczsKKwkgIH0KKwkgIGJyZWFr OworCisJY2FzZSBEV19DRkFfZGVmX2NmYToKKwkgIGluc25fcHRyID0gcmVh ZF91bGViMTI4IChpbnNuX3B0ciwgJnV0bXApOworCSAgZnMtPnJlZ3MuY2Zh X3JlZyA9IChfVW53aW5kX1dvcmQpdXRtcDsKKwkgIGluc25fcHRyID0gcmVh ZF91bGViMTI4IChpbnNuX3B0ciwgJnV0bXApOworCSAgZnMtPnJlZ3MuY2Zh X29mZnNldCA9IChfVW53aW5kX1dvcmQpdXRtcDsKKwkgIGZzLT5yZWdzLmNm YV9ob3cgPSBDRkFfUkVHX09GRlNFVDsKKwkgIGJyZWFrOworCisJY2FzZSBE V19DRkFfZGVmX2NmYV9yZWdpc3RlcjoKKwkgIGluc25fcHRyID0gcmVhZF91 bGViMTI4IChpbnNuX3B0ciwgJnV0bXApOworCSAgZnMtPnJlZ3MuY2ZhX3Jl ZyA9IChfVW53aW5kX1dvcmQpdXRtcDsKKwkgIGZzLT5yZWdzLmNmYV9ob3cg PSBDRkFfUkVHX09GRlNFVDsKKwkgIGJyZWFrOworCisJY2FzZSBEV19DRkFf ZGVmX2NmYV9vZmZzZXQ6CisJICBpbnNuX3B0ciA9IHJlYWRfdWxlYjEyOCAo aW5zbl9wdHIsICZ1dG1wKTsKKwkgIGZzLT5yZWdzLmNmYV9vZmZzZXQgPSB1 dG1wOworCSAgLyogY2ZhX2hvdyBkZWxpYmVyYXRlbHkgbm90IHNldC4gICov CisJICBicmVhazsKKworCWNhc2UgRFdfQ0ZBX2RlZl9jZmFfZXhwcmVzc2lv bjoKKwkgIGZzLT5yZWdzLmNmYV9leHAgPSBpbnNuX3B0cjsKKwkgIGZzLT5y ZWdzLmNmYV9ob3cgPSBDRkFfRVhQOworCSAgaW5zbl9wdHIgPSByZWFkX3Vs ZWIxMjggKGluc25fcHRyLCAmdXRtcCk7CisJICBpbnNuX3B0ciArPSB1dG1w OworCSAgYnJlYWs7CisKKwljYXNlIERXX0NGQV9leHByZXNzaW9uOgorCSAg aW5zbl9wdHIgPSByZWFkX3VsZWIxMjggKGluc25fcHRyLCAmcmVnKTsKKwkg IGZzLT5yZWdzLnJlZ1tEV0FSRl9SRUdfVE9fVU5XSU5EX0NPTFVNTiAocmVn KV0uaG93ID0gUkVHX1NBVkVEX0VYUDsKKwkgIGZzLT5yZWdzLnJlZ1tEV0FS Rl9SRUdfVE9fVU5XSU5EX0NPTFVNTiAocmVnKV0ubG9jLmV4cCA9IGluc25f cHRyOworCSAgaW5zbl9wdHIgPSByZWFkX3VsZWIxMjggKGluc25fcHRyLCAm dXRtcCk7CisJICBpbnNuX3B0ciArPSB1dG1wOworCSAgYnJlYWs7CisKKwkg IC8qIER3YXJmMy4gICovCisJY2FzZSBEV19DRkFfb2Zmc2V0X2V4dGVuZGVk X3NmOgorCSAgaW5zbl9wdHIgPSByZWFkX3VsZWIxMjggKGluc25fcHRyLCAm cmVnKTsKKwkgIGluc25fcHRyID0gcmVhZF9zbGViMTI4IChpbnNuX3B0ciwg JnN0bXApOworCSAgb2Zmc2V0ID0gc3RtcCAqIGZzLT5kYXRhX2FsaWduOwor CSAgZnMtPnJlZ3MucmVnW0RXQVJGX1JFR19UT19VTldJTkRfQ09MVU1OIChy ZWcpXS5ob3cKKwkgICAgPSBSRUdfU0FWRURfT0ZGU0VUOworCSAgZnMtPnJl Z3MucmVnW0RXQVJGX1JFR19UT19VTldJTkRfQ09MVU1OIChyZWcpXS5sb2Mu b2Zmc2V0ID0gb2Zmc2V0OworCSAgYnJlYWs7CisKKwljYXNlIERXX0NGQV9k ZWZfY2ZhX3NmOgorCSAgaW5zbl9wdHIgPSByZWFkX3VsZWIxMjggKGluc25f cHRyLCAmdXRtcCk7CisJICBmcy0+cmVncy5jZmFfcmVnID0gKF9VbndpbmRf V29yZCl1dG1wOworCSAgaW5zbl9wdHIgPSByZWFkX3NsZWIxMjggKGluc25f cHRyLCAmc3RtcCk7CisJICBmcy0+cmVncy5jZmFfb2Zmc2V0ID0gKF9Vbndp bmRfU3dvcmQpc3RtcDsKKwkgIGZzLT5yZWdzLmNmYV9ob3cgPSBDRkFfUkVH X09GRlNFVDsKKwkgIGZzLT5yZWdzLmNmYV9vZmZzZXQgKj0gZnMtPmRhdGFf YWxpZ247CisJICBicmVhazsKKworCWNhc2UgRFdfQ0ZBX2RlZl9jZmFfb2Zm c2V0X3NmOgorCSAgaW5zbl9wdHIgPSByZWFkX3NsZWIxMjggKGluc25fcHRy LCAmc3RtcCk7CisJICBmcy0+cmVncy5jZmFfb2Zmc2V0ID0gKF9VbndpbmRf U3dvcmQpc3RtcDsKKwkgIGZzLT5yZWdzLmNmYV9vZmZzZXQgKj0gZnMtPmRh dGFfYWxpZ247CisJICAvKiBjZmFfaG93IGRlbGliZXJhdGVseSBub3Qgc2V0 LiAgKi8KKwkgIGJyZWFrOworCisJY2FzZSBEV19DRkFfdmFsX29mZnNldDoK KwkgIGluc25fcHRyID0gcmVhZF91bGViMTI4IChpbnNuX3B0ciwgJnJlZyk7 CisJICBpbnNuX3B0ciA9IHJlYWRfdWxlYjEyOCAoaW5zbl9wdHIsICZ1dG1w KTsKKwkgIG9mZnNldCA9IChfVW53aW5kX1N3b3JkKSB1dG1wICogZnMtPmRh dGFfYWxpZ247CisJICBmcy0+cmVncy5yZWdbRFdBUkZfUkVHX1RPX1VOV0lO RF9DT0xVTU4gKHJlZyldLmhvdworCSAgICA9IFJFR19TQVZFRF9WQUxfT0ZG U0VUOworCSAgZnMtPnJlZ3MucmVnW0RXQVJGX1JFR19UT19VTldJTkRfQ09M VU1OIChyZWcpXS5sb2Mub2Zmc2V0ID0gb2Zmc2V0OworCSAgYnJlYWs7CisK KwljYXNlIERXX0NGQV92YWxfb2Zmc2V0X3NmOgorCSAgaW5zbl9wdHIgPSBy ZWFkX3VsZWIxMjggKGluc25fcHRyLCAmcmVnKTsKKwkgIGluc25fcHRyID0g cmVhZF9zbGViMTI4IChpbnNuX3B0ciwgJnN0bXApOworCSAgb2Zmc2V0ID0g c3RtcCAqIGZzLT5kYXRhX2FsaWduOworCSAgZnMtPnJlZ3MucmVnW0RXQVJG X1JFR19UT19VTldJTkRfQ09MVU1OIChyZWcpXS5ob3cKKwkgICAgPSBSRUdf U0FWRURfVkFMX09GRlNFVDsKKwkgIGZzLT5yZWdzLnJlZ1tEV0FSRl9SRUdf VE9fVU5XSU5EX0NPTFVNTiAocmVnKV0ubG9jLm9mZnNldCA9IG9mZnNldDsK KwkgIGJyZWFrOworCisJY2FzZSBEV19DRkFfdmFsX2V4cHJlc3Npb246CisJ ICBpbnNuX3B0ciA9IHJlYWRfdWxlYjEyOCAoaW5zbl9wdHIsICZyZWcpOwor CSAgZnMtPnJlZ3MucmVnW0RXQVJGX1JFR19UT19VTldJTkRfQ09MVU1OIChy ZWcpXS5ob3cKKwkgICAgPSBSRUdfU0FWRURfVkFMX0VYUDsKKwkgIGZzLT5y ZWdzLnJlZ1tEV0FSRl9SRUdfVE9fVU5XSU5EX0NPTFVNTiAocmVnKV0ubG9j LmV4cCA9IGluc25fcHRyOworCSAgaW5zbl9wdHIgPSByZWFkX3VsZWIxMjgg KGluc25fcHRyLCAmdXRtcCk7CisJICBpbnNuX3B0ciArPSB1dG1wOworCSAg YnJlYWs7CisKKwljYXNlIERXX0NGQV9HTlVfd2luZG93X3NhdmU6CisJICAv KiA/Pz8gSGFyZGNvZGVkIGZvciBTUEFSQyByZWdpc3RlciB3aW5kb3cgY29u ZmlndXJhdGlvbi4gICovCisJICBmb3IgKHJlZyA9IDE2OyByZWcgPCAzMjsg KytyZWcpCisJICAgIHsKKwkgICAgICBmcy0+cmVncy5yZWdbcmVnXS5ob3cg PSBSRUdfU0FWRURfT0ZGU0VUOworCSAgICAgIGZzLT5yZWdzLnJlZ1tyZWdd LmxvYy5vZmZzZXQgPSAocmVnIC0gMTYpICogc2l6ZW9mICh2b2lkICopOwor CSAgICB9CisJICBicmVhazsKKworCWNhc2UgRFdfQ0ZBX0dOVV9hcmdzX3Np emU6CisJICBpbnNuX3B0ciA9IHJlYWRfdWxlYjEyOCAoaW5zbl9wdHIsICZ1 dG1wKTsKKwkgIGNvbnRleHQtPmFyZ3Nfc2l6ZSA9IChfVW53aW5kX1dvcmQp dXRtcDsKKwkgIGJyZWFrOworCisJY2FzZSBEV19DRkFfR05VX25lZ2F0aXZl X29mZnNldF9leHRlbmRlZDoKKwkgIC8qIE9ic29sZXRlZCBieSBEV19DRkFf b2Zmc2V0X2V4dGVuZGVkX3NmLCBidXQgdXNlZCBieQorCSAgICAgb2xkZXIg UG93ZXJQQyBjb2RlLiAgKi8KKwkgIGluc25fcHRyID0gcmVhZF91bGViMTI4 IChpbnNuX3B0ciwgJnJlZyk7CisJICBpbnNuX3B0ciA9IHJlYWRfdWxlYjEy OCAoaW5zbl9wdHIsICZ1dG1wKTsKKwkgIG9mZnNldCA9IChfVW53aW5kX1dv cmQpIHV0bXAgKiBmcy0+ZGF0YV9hbGlnbjsKKwkgIGZzLT5yZWdzLnJlZ1tE V0FSRl9SRUdfVE9fVU5XSU5EX0NPTFVNTiAocmVnKV0uaG93CisJICAgID0g UkVHX1NBVkVEX09GRlNFVDsKKwkgIGZzLT5yZWdzLnJlZ1tEV0FSRl9SRUdf VE9fVU5XSU5EX0NPTFVNTiAocmVnKV0ubG9jLm9mZnNldCA9IC1vZmZzZXQ7 CisJICBicmVhazsKKworCWRlZmF1bHQ6CisJICBnY2NfdW5yZWFjaGFibGUg KCk7CisJfQorICAgIH0KK30KKwwKKy8qIEdpdmVuIHRoZSBfVW53aW5kX0Nv bnRleHQgQ09OVEVYVCBmb3IgYSBzdGFjayBmcmFtZSwgbG9vayB1cCB0aGUg RkRFIGZvcgorICAgaXRzIGNhbGxlciBhbmQgZGVjb2RlIGl0IGludG8gRlMu ICBUaGlzIGZ1bmN0aW9uIGFsc28gc2V0cyB0aGUKKyAgIGFyZ3Nfc2l6ZSBh bmQgbHNkYSBtZW1iZXJzIG9mIENPTlRFWFQsIGFzIHRoZXkgYXJlIHJlYWxs eSBpbmZvcm1hdGlvbgorICAgYWJvdXQgdGhlIGNhbGxlcidzIGZyYW1lLiAg Ki8KKworc3RhdGljIF9VbndpbmRfUmVhc29uX0NvZGUKK3V3X2ZyYW1lX3N0 YXRlX2ZvciAoc3RydWN0IF9VbndpbmRfQ29udGV4dCAqY29udGV4dCwgX1Vu d2luZF9GcmFtZVN0YXRlICpmcykKK3sKKyAgY29uc3Qgc3RydWN0IGR3YXJm X2ZkZSAqZmRlOworICBjb25zdCBzdHJ1Y3QgZHdhcmZfY2llICpjaWU7Cisg IGNvbnN0IHVuc2lnbmVkIGNoYXIgKmF1ZywgKmluc24sICplbmQ7CisKKyAg bWVtc2V0IChmcywgMCwgc2l6ZW9mICgqZnMpKTsKKyAgY29udGV4dC0+YXJn c19zaXplID0gMDsKKyAgY29udGV4dC0+bHNkYSA9IDA7CisKKyAgaWYgKGNv bnRleHQtPnJhID09IDApCisgICAgcmV0dXJuIF9VUkNfRU5EX09GX1NUQUNL OworCisgIGZkZSA9IF9VbndpbmRfRmluZF9GREUgKGNvbnRleHQtPnJhICsg X1Vud2luZF9Jc1NpZ25hbEZyYW1lIChjb250ZXh0KSAtIDEsCisJCQkgICZj b250ZXh0LT5iYXNlcyk7CisgIGlmIChmZGUgPT0gTlVMTCkKKyAgICB7Cisj aWZkZWYgTURfRkFMTEJBQ0tfRlJBTUVfU1RBVEVfRk9SCisgICAgICAvKiBD b3VsZG4ndCBmaW5kIGZyYW1lIHVud2luZCBpbmZvIGZvciB0aGlzIGZ1bmN0 aW9uLiAgVHJ5IGEKKwkgdGFyZ2V0LXNwZWNpZmljIGZhbGxiYWNrIG1lY2hh bmlzbS4gIFRoaXMgd2lsbCBuZWNlc3NhcmlseQorCSBub3QgcHJvdmlkZSBh IHBlcnNvbmFsaXR5IHJvdXRpbmUgb3IgTFNEQS4gICovCisgICAgICByZXR1 cm4gTURfRkFMTEJBQ0tfRlJBTUVfU1RBVEVfRk9SIChjb250ZXh0LCBmcyk7 CisjZWxzZQorICAgICAgcmV0dXJuIF9VUkNfRU5EX09GX1NUQUNLOworI2Vu ZGlmCisgICAgfQorCisgIGZzLT5wYyA9IGNvbnRleHQtPmJhc2VzLmZ1bmM7 CisKKyAgY2llID0gZ2V0X2NpZSAoZmRlKTsKKyAgaW5zbiA9IGV4dHJhY3Rf Y2llX2luZm8gKGNpZSwgY29udGV4dCwgZnMpOworICBpZiAoaW5zbiA9PSBO VUxMKQorICAgIC8qIENJRSBjb250YWluZWQgdW5rbm93biBhdWdtZW50YXRp b24uICAqLworICAgIHJldHVybiBfVVJDX0ZBVEFMX1BIQVNFMV9FUlJPUjsK KworICAvKiBGaXJzdCBkZWNvZGUgYWxsIHRoZSBpbnNucyBpbiB0aGUgQ0lF LiAgKi8KKyAgZW5kID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgbmV4dF9m ZGUgKChjb25zdCBzdHJ1Y3QgZHdhcmZfZmRlICopIGNpZSk7CisgIGV4ZWN1 dGVfY2ZhX3Byb2dyYW0gKGluc24sIGVuZCwgY29udGV4dCwgZnMpOworCisg IC8qIExvY2F0ZSBhdWdtZW50YXRpb24gZm9yIHRoZSBmZGUuICAqLworICBh dWcgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBmZGUgKyBzaXplb2YgKCpm ZGUpOworICBhdWcgKz0gMiAqIHNpemVfb2ZfZW5jb2RlZF92YWx1ZSAoZnMt PmZkZV9lbmNvZGluZyk7CisgIGluc24gPSBOVUxMOworICBpZiAoZnMtPnNh d196KQorICAgIHsKKyAgICAgIF91bGViMTI4X3QgaTsKKyAgICAgIGF1ZyA9 IHJlYWRfdWxlYjEyOCAoYXVnLCAmaSk7CisgICAgICBpbnNuID0gYXVnICsg aTsKKyAgICB9CisgIGlmIChmcy0+bHNkYV9lbmNvZGluZyAhPSBEV19FSF9Q RV9vbWl0KQorICAgIHsKKyAgICAgIF9VbndpbmRfUHRyIGxzZGE7CisKKyAg ICAgIGF1ZyA9IHJlYWRfZW5jb2RlZF92YWx1ZSAoY29udGV4dCwgZnMtPmxz ZGFfZW5jb2RpbmcsIGF1ZywgJmxzZGEpOworICAgICAgY29udGV4dC0+bHNk YSA9ICh2b2lkICopIGxzZGE7CisgICAgfQorCisgIC8qIFRoZW4gdGhlIGlu c25zIGluIHRoZSBGREUgdXAgdG8gb3VyIHRhcmdldCBQQy4gICovCisgIGlm IChpbnNuID09IE5VTEwpCisgICAgaW5zbiA9IGF1ZzsKKyAgZW5kID0gKGNv bnN0IHVuc2lnbmVkIGNoYXIgKikgbmV4dF9mZGUgKGZkZSk7CisgIGV4ZWN1 dGVfY2ZhX3Byb2dyYW0gKGluc24sIGVuZCwgY29udGV4dCwgZnMpOworCisg IHJldHVybiBfVVJDX05PX1JFQVNPTjsKK30KKwwKK3R5cGVkZWYgc3RydWN0 IGZyYW1lX3N0YXRlCit7CisgIHZvaWQgKmNmYTsKKyAgdm9pZCAqZWhfcHRy OworICBsb25nIGNmYV9vZmZzZXQ7CisgIGxvbmcgYXJnc19zaXplOworICBs b25nIHJlZ19vcl9vZmZzZXRbUFJFX0dDQzNfRFdBUkZfRlJBTUVfUkVHSVNU RVJTKzFdOworICB1bnNpZ25lZCBzaG9ydCBjZmFfcmVnOworICB1bnNpZ25l ZCBzaG9ydCByZXRhZGRyX2NvbHVtbjsKKyAgY2hhciBzYXZlZFtQUkVfR0ND M19EV0FSRl9GUkFNRV9SRUdJU1RFUlMrMV07Cit9IGZyYW1lX3N0YXRlOwor CitzdHJ1Y3QgZnJhbWVfc3RhdGUgKiBfX2ZyYW1lX3N0YXRlX2ZvciAodm9p ZCAqLCBzdHJ1Y3QgZnJhbWVfc3RhdGUgKik7CisKKy8qIENhbGxlZCBmcm9t IHByZS1HKysgMy4wIF9fdGhyb3cgdG8gZmluZCB0aGUgcmVnaXN0ZXJzIHRv IHJlc3RvcmUgZm9yCisgICBhIGdpdmVuIFBDX1RBUkdFVC4gIFRoZSBjYWxs ZXIgc2hvdWxkIGFsbG9jYXRlIGEgbG9jYWwgdmFyaWFibGUgb2YKKyAgIGBz dHJ1Y3QgZnJhbWVfc3RhdGUnIGFuZCBwYXNzIGl0cyBhZGRyZXNzIHRvIFNU QVRFX0lOLiAgKi8KKworc3RydWN0IGZyYW1lX3N0YXRlICoKK19fZnJhbWVf c3RhdGVfZm9yICh2b2lkICpwY190YXJnZXQsIHN0cnVjdCBmcmFtZV9zdGF0 ZSAqc3RhdGVfaW4pCit7CisgIHN0cnVjdCBfVW53aW5kX0NvbnRleHQgY29u dGV4dDsKKyAgX1Vud2luZF9GcmFtZVN0YXRlIGZzOworICBpbnQgcmVnOwor CisgIG1lbXNldCAoJmNvbnRleHQsIDAsIHNpemVvZiAoc3RydWN0IF9Vbndp bmRfQ29udGV4dCkpOworICBjb250ZXh0LmZsYWdzID0gRVhURU5ERURfQ09O VEVYVF9CSVQ7CisgIGNvbnRleHQucmEgPSBwY190YXJnZXQgKyAxOworCisg IGlmICh1d19mcmFtZV9zdGF0ZV9mb3IgKCZjb250ZXh0LCAmZnMpICE9IF9V UkNfTk9fUkVBU09OKQorICAgIHJldHVybiAwOworCisgIC8qIFdlIGhhdmUg bm8gd2F5IHRvIHBhc3MgYSBsb2NhdGlvbiBleHByZXNzaW9uIGZvciB0aGUg Q0ZBIHRvIG91cgorICAgICBjYWxsZXIuICBJdCB3b3VsZG4ndCB1bmRlcnN0 YW5kIGl0IGFueXdheS4gICovCisgIGlmIChmcy5yZWdzLmNmYV9ob3cgPT0g Q0ZBX0VYUCkKKyAgICByZXR1cm4gMDsKKworICBmb3IgKHJlZyA9IDA7IHJl ZyA8IFBSRV9HQ0MzX0RXQVJGX0ZSQU1FX1JFR0lTVEVSUyArIDE7IHJlZysr KQorICAgIHsKKyAgICAgIHN0YXRlX2luLT5zYXZlZFtyZWddID0gZnMucmVn cy5yZWdbcmVnXS5ob3c7CisgICAgICBzd2l0Y2ggKHN0YXRlX2luLT5zYXZl ZFtyZWddKQorCXsKKwljYXNlIFJFR19TQVZFRF9SRUc6CisJICBzdGF0ZV9p bi0+cmVnX29yX29mZnNldFtyZWddID0gZnMucmVncy5yZWdbcmVnXS5sb2Mu cmVnOworCSAgYnJlYWs7CisJY2FzZSBSRUdfU0FWRURfT0ZGU0VUOgorCSAg c3RhdGVfaW4tPnJlZ19vcl9vZmZzZXRbcmVnXSA9IGZzLnJlZ3MucmVnW3Jl Z10ubG9jLm9mZnNldDsKKwkgIGJyZWFrOworCWRlZmF1bHQ6CisJICBzdGF0 ZV9pbi0+cmVnX29yX29mZnNldFtyZWddID0gMDsKKwkgIGJyZWFrOworCX0K KyAgICB9CisKKyAgc3RhdGVfaW4tPmNmYV9vZmZzZXQgPSBmcy5yZWdzLmNm YV9vZmZzZXQ7CisgIHN0YXRlX2luLT5jZmFfcmVnID0gZnMucmVncy5jZmFf cmVnOworICBzdGF0ZV9pbi0+cmV0YWRkcl9jb2x1bW4gPSBmcy5yZXRhZGRy X2NvbHVtbjsKKyAgc3RhdGVfaW4tPmFyZ3Nfc2l6ZSA9IGNvbnRleHQuYXJn c19zaXplOworICBzdGF0ZV9pbi0+ZWhfcHRyID0gZnMuZWhfcHRyOworCisg IHJldHVybiBzdGF0ZV9pbjsKK30KKwwKK3R5cGVkZWYgdW5pb24geyBfVW53 aW5kX1B0ciBwdHI7IF9VbndpbmRfV29yZCB3b3JkOyB9IF9VbndpbmRfU3BU bXA7CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorX1Vud2luZF9TZXRTcENvbHVt biAoc3RydWN0IF9VbndpbmRfQ29udGV4dCAqY29udGV4dCwgdm9pZCAqY2Zh LAorCQkgICAgIF9VbndpbmRfU3BUbXAgKnRtcF9zcCkKK3sKKyAgaW50IHNp emUgPSBkd2FyZl9yZWdfc2l6ZV90YWJsZVtfX2J1aWx0aW5fZHdhcmZfc3Bf Y29sdW1uICgpXTsKKworICBpZiAoc2l6ZSA9PSBzaXplb2YoX1Vud2luZF9Q dHIpKQorICAgIHRtcF9zcC0+cHRyID0gKF9VbndpbmRfUHRyKSBjZmE7Cisg IGVsc2UKKyAgICB7CisgICAgICBnY2NfYXNzZXJ0IChzaXplID09IHNpemVv ZihfVW53aW5kX1dvcmQpKTsKKyAgICAgIHRtcF9zcC0+d29yZCA9IChfVW53 aW5kX1B0cikgY2ZhOworICAgIH0KKyAgX1Vud2luZF9TZXRHUlB0ciAoY29u dGV4dCwgX19idWlsdGluX2R3YXJmX3NwX2NvbHVtbiAoKSwgdG1wX3NwKTsK K30KKworc3RhdGljIHZvaWQKK3V3X3VwZGF0ZV9jb250ZXh0XzEgKHN0cnVj dCBfVW53aW5kX0NvbnRleHQgKmNvbnRleHQsIF9VbndpbmRfRnJhbWVTdGF0 ZSAqZnMpCit7CisgIHN0cnVjdCBfVW53aW5kX0NvbnRleHQgb3JpZ19jb250 ZXh0ID0gKmNvbnRleHQ7CisgIHZvaWQgKmNmYTsKKyAgbG9uZyBpOworCisj aWZkZWYgRUhfUkVUVVJOX1NUQUNLQURKX1JUWAorICAvKiBTcGVjaWFsIGhh bmRsaW5nIGhlcmU6IE1hbnkgbWFjaGluZXMgZG8gbm90IHVzZSBhIGZyYW1l IHBvaW50ZXIsCisgICAgIGFuZCB0cmFjayB0aGUgQ0ZBIG9ubHkgdGhyb3Vn aCBvZmZzZXRzIGZyb20gdGhlIHN0YWNrIHBvaW50ZXIgZnJvbQorICAgICBv bmUgZnJhbWUgdG8gdGhlIG5leHQuICBJbiB0aGlzIGNhc2UsIHRoZSBzdGFj ayBwb2ludGVyIGlzIG5ldmVyCisgICAgIHN0b3JlZCwgc28gaXQgaGFzIG5v IHNhdmVkIGFkZHJlc3MgaW4gdGhlIGNvbnRleHQuICBXaGF0IHdlIGRvCisg ICAgIGhhdmUgaXMgdGhlIENGQSBmcm9tIHRoZSBwcmV2aW91cyBzdGFjayBm cmFtZS4KKworICAgICBJbiB2ZXJ5IHNwZWNpYWwgc2l0dWF0aW9ucyAoc3Vj aCBhcyB1bndpbmQgaW5mbyBmb3Igc2lnbmFsIHJldHVybiksCisgICAgIHRo ZXJlIG1heSBiZSBsb2NhdGlvbiBleHByZXNzaW9ucyB0aGF0IHVzZSB0aGUg c3RhY2sgcG9pbnRlciBhcyB3ZWxsLgorCisgICAgIERvIHRoaXMgY29uZGl0 aW9uYWxseSBmb3Igb25lIGZyYW1lLiAgVGhpcyBhbGxvd3MgdGhlIHVud2lu ZCBpbmZvCisgICAgIGZvciBvbmUgZnJhbWUgdG8gc2F2ZSBhIGNvcHkgb2Yg dGhlIHN0YWNrIHBvaW50ZXIgZnJvbSB0aGUgcHJldmlvdXMKKyAgICAgZnJh bWUsIGFuZCBiZSBhYmxlIHRvIHVzZSBtdWNoIGVhc2llciBDRkEgbWVjaGFu aXNtcyB0byBkbyBpdC4KKyAgICAgQWx3YXlzIHphcCB0aGUgc2F2ZWQgc3Rh Y2sgcG9pbnRlciB2YWx1ZSBmb3IgdGhlIG5leHQgZnJhbWU7IGNhcnJ5aW5n CisgICAgIHRoZSB2YWx1ZSBvdmVyIGZyb20gb25lIGZyYW1lIHRvIGFub3Ro ZXIgZG9lc24ndCBtYWtlIHNlbnNlLiAgKi8KKworICBfVW53aW5kX1NwVG1w IHRtcF9zcDsKKworICBpZiAoIV9VbndpbmRfR2V0R1JQdHIgKCZvcmlnX2Nv bnRleHQsIF9fYnVpbHRpbl9kd2FyZl9zcF9jb2x1bW4gKCkpKQorICAgIF9V bndpbmRfU2V0U3BDb2x1bW4gKCZvcmlnX2NvbnRleHQsIGNvbnRleHQtPmNm YSwgJnRtcF9zcCk7CisgIF9VbndpbmRfU2V0R1JQdHIgKGNvbnRleHQsIF9f YnVpbHRpbl9kd2FyZl9zcF9jb2x1bW4gKCksIE5VTEwpOworI2VuZGlmCisK KyAgLyogQ29tcHV0ZSB0aGlzIGZyYW1lJ3MgQ0ZBLiAgKi8KKyAgc3dpdGNo IChmcy0+cmVncy5jZmFfaG93KQorICAgIHsKKyAgICBjYXNlIENGQV9SRUdf T0ZGU0VUOgorICAgICAgY2ZhID0gX1Vud2luZF9HZXRQdHIgKCZvcmlnX2Nv bnRleHQsIGZzLT5yZWdzLmNmYV9yZWcpOworICAgICAgY2ZhICs9IGZzLT5y ZWdzLmNmYV9vZmZzZXQ7CisgICAgICBicmVhazsKKworICAgIGNhc2UgQ0ZB X0VYUDoKKyAgICAgIHsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpleHAgPSBm cy0+cmVncy5jZmFfZXhwOworCV91bGViMTI4X3QgbGVuOworCisJZXhwID0g cmVhZF91bGViMTI4IChleHAsICZsZW4pOworCWNmYSA9ICh2b2lkICopIChf VW53aW5kX1B0cikKKwkgIGV4ZWN1dGVfc3RhY2tfb3AgKGV4cCwgZXhwICsg bGVuLCAmb3JpZ19jb250ZXh0LCAwKTsKKwlicmVhazsKKyAgICAgIH0KKwor ICAgIGRlZmF1bHQ6CisgICAgICBnY2NfdW5yZWFjaGFibGUgKCk7CisgICAg fQorICBjb250ZXh0LT5jZmEgPSBjZmE7CisKKyAgLyogQ29tcHV0ZSB0aGUg YWRkcmVzc2VzIG9mIGFsbCByZWdpc3RlcnMgc2F2ZWQgaW4gdGhpcyBmcmFt ZS4gICovCisgIGZvciAoaSA9IDA7IGkgPCBEV0FSRl9GUkFNRV9SRUdJU1RF UlMgKyAxOyArK2kpCisgICAgc3dpdGNoIChmcy0+cmVncy5yZWdbaV0uaG93 KQorICAgICAgeworICAgICAgY2FzZSBSRUdfVU5TQVZFRDoKKyAgICAgIGNh c2UgUkVHX1VOREVGSU5FRDoKKwlicmVhazsKKworICAgICAgY2FzZSBSRUdf U0FWRURfT0ZGU0VUOgorCV9VbndpbmRfU2V0R1JQdHIgKGNvbnRleHQsIGks CisJCQkgICh2b2lkICopIChjZmEgKyBmcy0+cmVncy5yZWdbaV0ubG9jLm9m ZnNldCkpOworCWJyZWFrOworCisgICAgICBjYXNlIFJFR19TQVZFRF9SRUc6 CisJaWYgKF9VbndpbmRfR1JCeVZhbHVlICgmb3JpZ19jb250ZXh0LCBmcy0+ cmVncy5yZWdbaV0ubG9jLnJlZykpCisJICBfVW53aW5kX1NldEdSVmFsdWUg KGNvbnRleHQsIGksCisJCQkgICAgICBfVW53aW5kX0dldEdSICgmb3JpZ19j b250ZXh0LAorCQkJCQkgICAgIGZzLT5yZWdzLnJlZ1tpXS5sb2MucmVnKSk7 CisJZWxzZQorCSAgX1Vud2luZF9TZXRHUlB0ciAoY29udGV4dCwgaSwKKwkJ CSAgICBfVW53aW5kX0dldEdSUHRyICgmb3JpZ19jb250ZXh0LAorCQkJCQkg ICAgICBmcy0+cmVncy5yZWdbaV0ubG9jLnJlZykpOworCWJyZWFrOworCisg ICAgICBjYXNlIFJFR19TQVZFRF9FWFA6CisJeworCSAgY29uc3QgdW5zaWdu ZWQgY2hhciAqZXhwID0gZnMtPnJlZ3MucmVnW2ldLmxvYy5leHA7CisJICBf dWxlYjEyOF90IGxlbjsKKwkgIF9VbndpbmRfUHRyIHZhbDsKKworCSAgZXhw ID0gcmVhZF91bGViMTI4IChleHAsICZsZW4pOworCSAgdmFsID0gZXhlY3V0 ZV9zdGFja19vcCAoZXhwLCBleHAgKyBsZW4sICZvcmlnX2NvbnRleHQsCisJ CQkJICAoX1Vud2luZF9QdHIpIGNmYSk7CisJICBfVW53aW5kX1NldEdSUHRy IChjb250ZXh0LCBpLCAodm9pZCAqKSB2YWwpOworCX0KKwlicmVhazsKKwor ICAgICAgY2FzZSBSRUdfU0FWRURfVkFMX09GRlNFVDoKKwlfVW53aW5kX1Nl dEdSVmFsdWUgKGNvbnRleHQsIGksCisJCQkgICAgKF9VbndpbmRfSW50ZXJu YWxfUHRyKQorCQkJICAgIChjZmEgKyBmcy0+cmVncy5yZWdbaV0ubG9jLm9m ZnNldCkpOworCWJyZWFrOworCisgICAgICBjYXNlIFJFR19TQVZFRF9WQUxf RVhQOgorCXsKKwkgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmV4cCA9IGZzLT5y ZWdzLnJlZ1tpXS5sb2MuZXhwOworCSAgX3VsZWIxMjhfdCBsZW47CisJICBf VW53aW5kX1B0ciB2YWw7CisKKwkgIGV4cCA9IHJlYWRfdWxlYjEyOCAoZXhw LCAmbGVuKTsKKwkgIHZhbCA9IGV4ZWN1dGVfc3RhY2tfb3AgKGV4cCwgZXhw ICsgbGVuLCAmb3JpZ19jb250ZXh0LAorCQkJCSAgKF9VbndpbmRfUHRyKSBj ZmEpOworCSAgX1Vud2luZF9TZXRHUlZhbHVlIChjb250ZXh0LCBpLCB2YWwp OworCX0KKwlicmVhazsKKyAgICAgIH0KKworICBfVW53aW5kX1NldFNpZ25h bEZyYW1lIChjb250ZXh0LCBmcy0+c2lnbmFsX2ZyYW1lKTsKKworI2lmZGVm IE1EX0ZST0JfVVBEQVRFX0NPTlRFWFQKKyAgTURfRlJPQl9VUERBVEVfQ09O VEVYVCAoY29udGV4dCwgZnMpOworI2VuZGlmCit9CisKKy8qIENPTlRFWFQg ZGVzY3JpYmVzIHRoZSB1bndpbmQgc3RhdGUgZm9yIGEgZnJhbWUsIGFuZCBG UyBkZXNjcmliZXMgdGhlIEZERQorICAgb2YgaXRzIGNhbGxlci4gIFVwZGF0 ZSBDT05URVhUIHRvIHJlZmVyIHRvIHRoZSBjYWxsZXIgYXMgd2VsbC4gIE5v dGUKKyAgIHRoYXQgdGhlIGFyZ3Nfc2l6ZSBhbmQgbHNkYSBtZW1iZXJzIGFy ZSBub3QgdXBkYXRlZCBoZXJlLCBidXQgbGF0ZXIgaW4KKyAgIHV3X2ZyYW1l X3N0YXRlX2Zvci4gICovCisKK3N0YXRpYyB2b2lkCit1d191cGRhdGVfY29u dGV4dCAoc3RydWN0IF9VbndpbmRfQ29udGV4dCAqY29udGV4dCwgX1Vud2lu ZF9GcmFtZVN0YXRlICpmcykKK3sKKyAgdXdfdXBkYXRlX2NvbnRleHRfMSAo Y29udGV4dCwgZnMpOworCisgIC8qIEluIGdlbmVyYWwgdGhpcyB1bndpbmRl ciBkb2Vzbid0IG1ha2UgYW55IGRpc3RpbmN0aW9uIGJldHdlZW4KKyAgICAg dW5kZWZpbmVkIGFuZCBzYW1lX3ZhbHVlIHJ1bGUuICBDYWxsLXNhdmVkIHJl Z2lzdGVycyBhcmUgYXNzdW1lZAorICAgICB0byBoYXZlIHNhbWVfdmFsdWUg cnVsZSBieSBkZWZhdWx0IGFuZCBleHBsaWNpdCB1bmRlZmluZWQKKyAgICAg cnVsZSBpcyBoYW5kbGVkIGxpa2Ugc2FtZV92YWx1ZS4gIFRoZSBvbmx5IGV4 Y2VwdGlvbiBpcworICAgICBEV19DRkFfdW5kZWZpbmVkIG9uIHJldGFkZHJf Y29sdW1uIHdoaWNoIGlzIHN1cHBvc2VkIHRvCisgICAgIG1hcmsgb3V0ZXJt b3N0IGZyYW1lIGluIERXQVJGIDMuICAqLworICBpZiAoZnMtPnJlZ3MucmVn W0RXQVJGX1JFR19UT19VTldJTkRfQ09MVU1OIChmcy0+cmV0YWRkcl9jb2x1 bW4pXS5ob3cKKyAgICAgID09IFJFR19VTkRFRklORUQpCisgICAgLyogdXdf ZnJhbWVfc3RhdGVfZm9yIHVzZXMgY29udGV4dC0+cmEgPT0gMCBjaGVjayB0 byBmaW5kIG91dGVybW9zdAorICAgICAgIHN0YWNrIGZyYW1lLiAgKi8KKyAg ICBjb250ZXh0LT5yYSA9IDA7CisgIGVsc2UKKyAgICAvKiBDb21wdXRlIHRo ZSByZXR1cm4gYWRkcmVzcyBub3csIHNpbmNlIHRoZSByZXR1cm4gYWRkcmVz cyBjb2x1bW4KKyAgICAgICBjYW4gY2hhbmdlIGZyb20gZnJhbWUgdG8gZnJh bWUuICAqLworICAgIGNvbnRleHQtPnJhID0gX19idWlsdGluX2V4dHJhY3Rf cmV0dXJuX2FkZHIKKyAgICAgIChfVW53aW5kX0dldFB0ciAoY29udGV4dCwg ZnMtPnJldGFkZHJfY29sdW1uKSk7CisgICAgY29udGV4dC0+cmEgPSAodm9p ZCopKCAoICh1bnNpZ25lZCljb250ZXh0LT5yYSApIDw8IDEgKSA7Cit9CisK K3N0YXRpYyB2b2lkCit1d19hZHZhbmNlX2NvbnRleHQgKHN0cnVjdCBfVW53 aW5kX0NvbnRleHQgKmNvbnRleHQsIF9VbndpbmRfRnJhbWVTdGF0ZSAqZnMp Cit7CisgIHV3X3VwZGF0ZV9jb250ZXh0IChjb250ZXh0LCBmcyk7Cit9CisM CisvKiBGaWxsIGluIENPTlRFWFQgZm9yIHRvcC1vZi1zdGFjay4gIFRoZSBv bmx5IHZhbGlkIHJlZ2lzdGVycyBhdCB0aGlzCisgICBsZXZlbCB3aWxsIGJl IHRoZSByZXR1cm4gYWRkcmVzcyBhbmQgdGhlIENGQS4gICovCisKKyNkZWZp bmUgdXdfaW5pdF9jb250ZXh0KENPTlRFWFQpCQkJCQkgICBcCisgIGRvCQkJ CQkJCQkJICAgXAorICAgIHsJCQkJCQkJCQkgICBcCisgICAgICAvKiBEbyBh bnkgbmVjZXNzYXJ5IGluaXRpYWxpemF0aW9uIHRvIGFjY2VzcyBhcmJpdHJh cnkgc3RhY2sgZnJhbWVzLiBcCisJIE9uIHRoZSBTUEFSQywgdGhpcyBtZWFu cyBmbHVzaGluZyB0aGUgcmVnaXN0ZXIgd2luZG93cy4gICovCSAgIFwKKyAg ICAgIF9fYnVpbHRpbl91bndpbmRfaW5pdCAoKTsJCQkJCQkgICBcCisgICAg ICB1d19pbml0X2NvbnRleHRfMSAoQ09OVEVYVCwgX19idWlsdGluX2R3YXJm X2NmYSAoKSwJCSAgIFwKKwkJCSBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3Mg KDApKTsJCQkgICBcCisgICAgfQkJCQkJCQkJCSAgIFwKKyAgd2hpbGUgKDAp CisKK3N0YXRpYyBpbmxpbmUgdm9pZAoraW5pdF9kd2FyZl9yZWdfc2l6ZV90 YWJsZSAodm9pZCkKK3sKKyAgX19idWlsdGluX2luaXRfZHdhcmZfcmVnX3Np emVfdGFibGUgKGR3YXJmX3JlZ19zaXplX3RhYmxlKTsKK30KKworc3RhdGlj IHZvaWQgX19hdHRyaWJ1dGVfXygobm9pbmxpbmUpKQordXdfaW5pdF9jb250 ZXh0XzEgKHN0cnVjdCBfVW53aW5kX0NvbnRleHQgKmNvbnRleHQsCisJCSAg IHZvaWQgKm91dGVyX2NmYSwgdm9pZCAqb3V0ZXJfcmEpCit7CisgIHZvaWQg KnJhID0gX19idWlsdGluX2V4dHJhY3RfcmV0dXJuX2FkZHIgKF9fYnVpbHRp bl9yZXR1cm5fYWRkcmVzcyAoMCkpOworICBfVW53aW5kX0ZyYW1lU3RhdGUg ZnM7CisgIF9VbndpbmRfU3BUbXAgc3Bfc2xvdDsKKyAgX1Vud2luZF9SZWFz b25fQ29kZSBjb2RlOworCisgIG1lbXNldCAoY29udGV4dCwgMCwgc2l6ZW9m IChzdHJ1Y3QgX1Vud2luZF9Db250ZXh0KSk7CisgIGNvbnRleHQtPnJhID0g cmE7CisgIGNvbnRleHQtPmZsYWdzID0gRVhURU5ERURfQ09OVEVYVF9CSVQ7 CisKKyAgY29kZSA9IHV3X2ZyYW1lX3N0YXRlX2ZvciAoY29udGV4dCwgJmZz KTsKKyAgZ2NjX2Fzc2VydCAoY29kZSA9PSBfVVJDX05PX1JFQVNPTik7CisK KyNpZiBfX0dUSFJFQURTCisgIHsKKyAgICBzdGF0aWMgX19ndGhyZWFkX29u Y2VfdCBvbmNlX3JlZ3NpemVzID0gX19HVEhSRUFEX09OQ0VfSU5JVDsKKyAg ICBpZiAoX19ndGhyZWFkX29uY2UgKCZvbmNlX3JlZ3NpemVzLCBpbml0X2R3 YXJmX3JlZ19zaXplX3RhYmxlKSAhPSAwCisJJiYgZHdhcmZfcmVnX3NpemVf dGFibGVbMF0gPT0gMCkKKyAgICAgIGluaXRfZHdhcmZfcmVnX3NpemVfdGFi bGUgKCk7CisgIH0KKyNlbHNlCisgIGlmIChkd2FyZl9yZWdfc2l6ZV90YWJs ZVswXSA9PSAwKQorICAgIGluaXRfZHdhcmZfcmVnX3NpemVfdGFibGUgKCk7 CisjZW5kaWYKKworICAvKiBGb3JjZSB0aGUgZnJhbWUgc3RhdGUgdG8gdXNl IHRoZSBrbm93biBjZmEgdmFsdWUuICAqLworICBfVW53aW5kX1NldFNwQ29s dW1uIChjb250ZXh0LCBvdXRlcl9jZmEsICZzcF9zbG90KTsKKyAgZnMucmVn cy5jZmFfaG93ID0gQ0ZBX1JFR19PRkZTRVQ7CisgIGZzLnJlZ3MuY2ZhX3Jl ZyA9IF9fYnVpbHRpbl9kd2FyZl9zcF9jb2x1bW4gKCk7CisgIGZzLnJlZ3Mu Y2ZhX29mZnNldCAtPSBjb250ZXh0LT5hcmdzX3NpemUgOworICB1d191cGRh dGVfY29udGV4dF8xIChjb250ZXh0LCAmZnMpOworCisgIC8qIElmIHRoZSBy ZXR1cm4gYWRkcmVzcyBjb2x1bW4gd2FzIHNhdmVkIGluIGEgcmVnaXN0ZXIg aW4gdGhlCisgICAgIGluaXRpYWxpemF0aW9uIGNvbnRleHQsIHRoZW4gd2Ug Y2FuJ3Qgc2VlIGl0IGluIHRoZSBnaXZlbgorICAgICBjYWxsIGZyYW1lIGRh dGEuICBTbyBoYXZlIHRoZSBpbml0aWFsaXphdGlvbiBjb250ZXh0IHRlbGwg dXMuICAqLworICBjb250ZXh0LT5yYSA9IF9fYnVpbHRpbl9leHRyYWN0X3Jl dHVybl9hZGRyIChvdXRlcl9yYSk7Cit9CisKK3N0YXRpYyB2b2lkIF9Vbndp bmRfRGVidWdIb29rICh2b2lkICosIHZvaWQgKikKKyAgX19hdHRyaWJ1dGVf XyAoKF9fbm9pbmxpbmVfXywgX191c2VkX18sIF9fbm9jbG9uZV9fKSk7CisK Ky8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGR1cmluZyB1bndpbmRpbmcu ICBJdCBpcyBpbnRlbmRlZCBhcyBhIGhvb2sKKyAgIGZvciBhIGRlYnVnZ2Vy IHRvIGludGVyY2VwdCBleGNlcHRpb25zLiAgQ0ZBIGlzIHRoZSBDRkEgb2Yg dGhlCisgICB0YXJnZXQgZnJhbWUuICBIQU5ETEVSIGlzIHRoZSBQQyB0byB3 aGljaCBjb250cm9sIHdpbGwgYmUKKyAgIHRyYW5zZmVycmVkLiAgKi8KK3N0 YXRpYyB2b2lkCitfVW53aW5kX0RlYnVnSG9vayAodm9pZCAqY2ZhIF9fYXR0 cmlidXRlX18gKChfX3VudXNlZF9fKSksCisJCSAgIHZvaWQgKmhhbmRsZXIg X19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKSkKK3sKKyAgYXNtICgiIik7 Cit9CisKKy8qIEluc3RhbGwgVEFSR0VUIGludG8gQ1VSUkVOVCBzbyB0aGF0 IHdlIGNhbiByZXR1cm4gdG8gaXQuICBUaGlzIGlzIGEKKyAgIG1hY3JvIGJl Y2F1c2UgX19idWlsdGluX2VoX3JldHVybiBtdXN0IGJlIGludm9rZWQgaW4g dGhlIGNvbnRleHQgb2YKKyAgIG91ciBjYWxsZXIuICAqLworCisKKyNkZWZp bmUgdXdfaW5zdGFsbF9jb250ZXh0KENVUlJFTlQsIFRBUkdFVCkgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisgIGRvICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg ICAgIGxvbmcgb2Zmc2V0ID0gdXdfaW5zdGFsbF9jb250ZXh0XzEgKChDVVJS RU5UKSwgKFRBUkdFVCkpOyAgICAgICAgICBcCisgICAgICB2b2lkICpoYW5k bGVyID0gX19idWlsdGluX2Zyb2JfcmV0dXJuX2FkZHIgKChUQVJHRVQpLT5y YSk7ICAgICAgICAgXAorICAgICAgaGFuZGxlciA9ICh2b2lkKikoICggKHVu c2lnbmVkKWhhbmRsZXIgKSA+PiAxICkgOyAgICAgICAgICAgICAgICAgIFwK KyAgICAgIF9fYnVpbHRpbl9laF9yZXR1cm4gKG9mZnNldCwgaGFuZGxlcik7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorICB3aGlsZSAoMCkKKworCisKK3N0YXRpYyBs b25nCit1d19pbnN0YWxsX2NvbnRleHRfMSAoc3RydWN0IF9VbndpbmRfQ29u dGV4dCAqY3VycmVudCwKKwkJICAgICAgc3RydWN0IF9VbndpbmRfQ29udGV4 dCAqdGFyZ2V0KQoreworICBsb25nIGk7CisgIF9VbndpbmRfU3BUbXAgc3Bf c2xvdDsKKworICAvKiBJZiB0aGUgdGFyZ2V0IGZyYW1lIGRvZXMgbm90IGhh dmUgYSBzYXZlZCBzdGFjayBwb2ludGVyLAorICAgICB0aGVuIHNldCB1cCB0 aGUgdGFyZ2V0J3MgQ0ZBLiAgKi8KKyAgaWYgKCFfVW53aW5kX0dldEdSUHRy ICh0YXJnZXQsIF9fYnVpbHRpbl9kd2FyZl9zcF9jb2x1bW4gKCkpKQorICAg IF9VbndpbmRfU2V0U3BDb2x1bW4gKHRhcmdldCwgdGFyZ2V0LT5jZmEsICZz cF9zbG90KTsKKworICBmb3IgKGkgPSAwOyBpIDwgRFdBUkZfRlJBTUVfUkVH SVNURVJTOyArK2kpCisgICAgeworICAgICAgdm9pZCAqYyA9IGN1cnJlbnQt PnJlZ1tpXTsKKyAgICAgIHZvaWQgKnQgPSB0YXJnZXQtPnJlZ1tpXTsKKwor ICAgICAgZ2NjX2Fzc2VydCAoY3VycmVudC0+YnlfdmFsdWVbaV0gPT0gMCk7 CisgICAgICBpZiAodGFyZ2V0LT5ieV92YWx1ZVtpXSAmJiBjKQorCXsKKwkg IF9VbndpbmRfV29yZCB3OworCSAgX1Vud2luZF9QdHIgcDsKKwkgIGlmIChk d2FyZl9yZWdfc2l6ZV90YWJsZVtpXSA9PSBzaXplb2YgKF9VbndpbmRfV29y ZCkpCisJICAgIHsKKwkgICAgICB3ID0gKF9VbndpbmRfSW50ZXJuYWxfUHRy KSB0OworCSAgICAgIG1lbWNweSAoYywgJncsIHNpemVvZiAoX1Vud2luZF9X b3JkKSk7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIGdjY19h c3NlcnQgKGR3YXJmX3JlZ19zaXplX3RhYmxlW2ldID09IHNpemVvZiAoX1Vu d2luZF9QdHIpKTsKKwkgICAgICBwID0gKF9VbndpbmRfSW50ZXJuYWxfUHRy KSB0OworCSAgICAgIG1lbWNweSAoYywgJnAsIHNpemVvZiAoX1Vud2luZF9Q dHIpKTsKKwkgICAgfQorCX0KKyAgICAgIGVsc2UgaWYgKHQgJiYgYyAmJiB0 ICE9IGMpCisJbWVtY3B5IChjLCB0LCBkd2FyZl9yZWdfc2l6ZV90YWJsZVtp XSk7CisgICAgfQorCisgIC8qIElmIHRoZSBjdXJyZW50IGZyYW1lIGRvZXNu J3QgaGF2ZSBhIHNhdmVkIHN0YWNrIHBvaW50ZXIsIHRoZW4gd2UKKyAgICAg bmVlZCB0byByZWx5IG9uIEVIX1JFVFVSTl9TVEFDS0FESl9SVFggdG8gZ2V0 IG91ciB0YXJnZXQgc3RhY2sKKyAgICAgcG9pbnRlciB2YWx1ZSByZWxvYWRl ZC4gICovCisgIGlmICghX1Vud2luZF9HZXRHUlB0ciAoY3VycmVudCwgX19i dWlsdGluX2R3YXJmX3NwX2NvbHVtbiAoKSkpCisgICAgeworICAgICAgdm9p ZCAqdGFyZ2V0X2NmYTsKKworICAgICAgdGFyZ2V0X2NmYSA9IF9VbndpbmRf R2V0UHRyICh0YXJnZXQsIF9fYnVpbHRpbl9kd2FyZl9zcF9jb2x1bW4gKCkp OworCisgICAgICAvKiBXZSBhZGp1c3QgU1AgYnkgdGhlIGRpZmZlcmVuY2Ug YmV0d2VlbiBDVVJSRU5UIGFuZCBUQVJHRVQncyBDRkEuICAqLworICAgICAg aWYgKFNUQUNLX0dST1dTX0RPV05XQVJEKQorCXJldHVybiB0YXJnZXRfY2Zh IC0gY3VycmVudC0+Y2ZhICsgdGFyZ2V0LT5hcmdzX3NpemU7CisgICAgICBl bHNlCisJcmV0dXJuIGN1cnJlbnQtPmNmYSAtIHRhcmdldF9jZmEgLSB0YXJn ZXQtPmFyZ3Nfc2l6ZTsKKyAgICB9CisgIHJldHVybiAwOworfQorCitzdGF0 aWMgaW5saW5lIF9VbndpbmRfUHRyCit1d19pZGVudGlmeV9jb250ZXh0IChz dHJ1Y3QgX1Vud2luZF9Db250ZXh0ICpjb250ZXh0KQoreworICAvKiBUaGUg Q0ZBIGlzIG5vdCBzdWZmaWNpZW50IHRvIGRpc2FtYmlndWF0ZSB0aGUgY29u dGV4dCBvZiBhIGZ1bmN0aW9uCisgICAgIGludGVycnVwdGVkIGJ5IGEgc2ln bmFsIGJlZm9yZSBlc3RhYmxpc2hpbmcgaXRzIGZyYW1lIGFuZCB0aGUgY29u dGV4dAorICAgICBvZiB0aGUgc2lnbmFsIGl0c2VsZi4gICovCisgIGlmIChT VEFDS19HUk9XU19ET1dOV0FSRCkKKyAgICByZXR1cm4gX1Vud2luZF9HZXRD RkEgKGNvbnRleHQpIC0gX1Vud2luZF9Jc1NpZ25hbEZyYW1lIChjb250ZXh0 KTsKKyAgZWxzZQorICAgIHJldHVybiBfVW53aW5kX0dldENGQSAoY29udGV4 dCkgKyBfVW53aW5kX0lzU2lnbmFsRnJhbWUgKGNvbnRleHQpOworfQorCisK KyNpbmNsdWRlICJ1bndpbmQuaW5jIgorCisjaWYgZGVmaW5lZCAoVVNFX0dB U19TWU1WRVIpICYmIGRlZmluZWQgKFNIQVJFRCkgJiYgZGVmaW5lZCAoVVNF X0xJQlVOV0lORF9FWENFUFRJT05TKQorYWxpYXMgKF9VbndpbmRfQmFja3Ry YWNlKTsKK2FsaWFzIChfVW53aW5kX0RlbGV0ZUV4Y2VwdGlvbik7CithbGlh cyAoX1Vud2luZF9GaW5kRW5jbG9zaW5nRnVuY3Rpb24pOworYWxpYXMgKF9V bndpbmRfRm9yY2VkVW53aW5kKTsKK2FsaWFzIChfVW53aW5kX0dldERhdGFS ZWxCYXNlKTsKK2FsaWFzIChfVW53aW5kX0dldFRleHRSZWxCYXNlKTsKK2Fs aWFzIChfVW53aW5kX0dldENGQSk7CithbGlhcyAoX1Vud2luZF9HZXRHUik7 CithbGlhcyAoX1Vud2luZF9HZXRJUCk7CithbGlhcyAoX1Vud2luZF9HZXRM YW5ndWFnZVNwZWNpZmljRGF0YSk7CithbGlhcyAoX1Vud2luZF9HZXRSZWdp b25TdGFydCk7CithbGlhcyAoX1Vud2luZF9SYWlzZUV4Y2VwdGlvbik7Cith bGlhcyAoX1Vud2luZF9SZXN1bWUpOworYWxpYXMgKF9VbndpbmRfUmVzdW1l X29yX1JldGhyb3cpOworYWxpYXMgKF9VbndpbmRfU2V0R1IpOworYWxpYXMg KF9VbndpbmRfU2V0SVApOworI2VuZGlmCisKKyNlbmRpZiAvKiAhVVNJTkdf U0pMSl9FWENFUFRJT05TICovCmRpZmYgLXVwck4gLXgnKi5vcmlnJyAteCcq LnJlaicgb3JpZy9nY2MvY29uZmlnL2NyMTYvdW53aW5kLWR3Mi5oIG1vZC9n Y2MvY29uZmlnL2NyMTYvdW53aW5kLWR3Mi5oCi0tLSBvcmlnL2djYy9jb25m aWcvY3IxNi91bndpbmQtZHcyLmgJMTk3MC0wMS0wMSAwNTozMDowMC4wMDAw MDAwMDAgKzA1MzAKKysrIG1vZC9nY2MvY29uZmlnL2NyMTYvdW53aW5kLWR3 Mi5oCTIwMTEtMDQtMDggMTY6NDM6MzUuMDAwMDAwMDAwICswNTMwCkBAIC0w LDAgKzEsODcgQEAKKy8qIERXQVJGMiBmcmFtZSB1bndpbmQgZGF0YSBzdHJ1 Y3R1cmUuCisgICBDb3B5cmlnaHQgKEMpIDE5OTcsIDE5OTgsIDE5OTksIDIw MDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDkKKyAgIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBH Q0MuCisKKyAgIEdDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgICB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxp c2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0 aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxh dGVyIHZlcnNpb24uCisKKyAgIEdDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICAg QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgICBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGlj CisgICBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFVuZGVyIFNl Y3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRk aXRpb25hbAorICAgcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0Mg UnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorICAgMy4xLCBh cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4K KworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisgICBhIGNvcHkgb2Yg dGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGgg dGhpcyBwcm9ncmFtOworICAgc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQg Q09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisg ICA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisvKiBB IHRhcmdldCBjYW4gb3ZlcnJpZGUgKHBlcmhhcHMgZm9yIGJhY2t3YXJkIGNv bXBhdGliaWxpdHkpIGhvdworICAgbWFueSBkd2FyZjIgY29sdW1ucyBhcmUg dW53b3VuZC4gICovCisjaWZuZGVmIERXQVJGX0ZSQU1FX1JFR0lTVEVSUwor I2RlZmluZSBEV0FSRl9GUkFNRV9SRUdJU1RFUlMgRklSU1RfUFNFVURPX1JF R0lTVEVSCisjZW5kaWYKKworLyogVGhlIHJlc3VsdCBvZiBpbnRlcnByZXRp bmcgdGhlIGZyYW1lIHVud2luZCBpbmZvIGZvciBhIGZyYW1lLgorICAgVGhp cyBpcyBhbGwgc3ltYm9saWMgYXQgdGhpcyBwb2ludCwgYXMgbm9uZSBvZiB0 aGUgdmFsdWVzIGNhbgorICAgYmUgcmVzb2x2ZWQgdW50aWwgdGhlIHRhcmdl dCBwYyBpcyBsb2NhdGVkLiAgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIC8q IEVhY2ggcmVnaXN0ZXIgc2F2ZSBzdGF0ZSBjYW4gYmUgZGVzY3JpYmVkIGlu IHRlcm1zIG9mIGEgQ0ZBIHNsb3QsCisgICAgIGFub3RoZXIgcmVnaXN0ZXIs IG9yIGEgbG9jYXRpb24gZXhwcmVzc2lvbi4gICovCisgIHN0cnVjdCBmcmFt ZV9zdGF0ZV9yZWdfaW5mbworICB7CisgICAgc3RydWN0IHsKKyAgICAgIHVu aW9uIHsKKwlfVW53aW5kX1dvcmQgcmVnOworCV9VbndpbmRfU3dvcmQgb2Zm c2V0OworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmV4cDsKKyAgICAgIH0gbG9j OworICAgICAgZW51bSB7CisJUkVHX1VOU0FWRUQsCisJUkVHX1NBVkVEX09G RlNFVCwKKwlSRUdfU0FWRURfUkVHLAorCVJFR19TQVZFRF9FWFAsCisJUkVH X1NBVkVEX1ZBTF9PRkZTRVQsCisJUkVHX1NBVkVEX1ZBTF9FWFAsCisJUkVH X1VOREVGSU5FRAorICAgICAgfSBob3c7CisgICAgfSByZWdbRFdBUkZfRlJB TUVfUkVHSVNURVJTKzFdOworCisgICAgLyogVXNlZCB0byBpbXBsZW1lbnQg RFdfQ0ZBX3JlbWVtYmVyX3N0YXRlLiAgKi8KKyAgICBzdHJ1Y3QgZnJhbWVf c3RhdGVfcmVnX2luZm8gKnByZXY7CisKKyAgICAvKiBUaGUgQ0ZBIGNhbiBi ZSBkZXNjcmliZWQgaW4gdGVybXMgb2YgYSByZWcrb2Zmc2V0IG9yIGEKKyAg ICAgICBsb2NhdGlvbiBleHByZXNzaW9uLiAgKi8KKyAgICBfVW53aW5kX1N3 b3JkIGNmYV9vZmZzZXQ7CisgICAgX1Vud2luZF9Xb3JkIGNmYV9yZWc7Cisg ICAgY29uc3QgdW5zaWduZWQgY2hhciAqY2ZhX2V4cDsKKyAgICBlbnVtIHsK KyAgICAgIENGQV9VTlNFVCwKKyAgICAgIENGQV9SRUdfT0ZGU0VULAorICAg ICAgQ0ZBX0VYUAorICAgIH0gY2ZhX2hvdzsKKyAgfSByZWdzOworCisgIC8q IFRoZSBQQyBkZXNjcmliZWQgYnkgdGhlIGN1cnJlbnQgZnJhbWUgc3RhdGUu ICAqLworICB2b2lkICpwYzsKKworICAvKiBUaGUgaW5mb3JtYXRpb24gd2Ug Y2FyZSBhYm91dCBmcm9tIHRoZSBDSUUvRkRFLiAgKi8KKyAgX1Vud2luZF9Q ZXJzb25hbGl0eV9GbiBwZXJzb25hbGl0eTsKKyAgX1Vud2luZF9Td29yZCBk YXRhX2FsaWduOworICBfVW53aW5kX1dvcmQgY29kZV9hbGlnbjsKKyAgX1Vu d2luZF9Xb3JkIHJldGFkZHJfY29sdW1uOworICB1bnNpZ25lZCBjaGFyIGZk ZV9lbmNvZGluZzsKKyAgdW5zaWduZWQgY2hhciBsc2RhX2VuY29kaW5nOwor ICB1bnNpZ25lZCBjaGFyIHNhd196OworICB1bnNpZ25lZCBjaGFyIHNpZ25h bF9mcmFtZTsKKyAgdm9pZCAqZWhfcHRyOworfSBfVW53aW5kX0ZyYW1lU3Rh dGU7CisKZGlmZiAtdXByTiAteCcqLm9yaWcnIC14JyoucmVqJyBvcmlnL2dj Yy9jb25maWcuZ2NjIG1vZC9nY2MvY29uZmlnLmdjYwotLS0gb3JpZy9nY2Mv Y29uZmlnLmdjYwkyMDExLTAzLTE0IDExOjM1OjI5LjAwMDAwMDAwMCArMDUz MAorKysgbW9kL2djYy9jb25maWcuZ2NjCTIwMTEtMDQtMDggMTY6NDI6MzUu MDAwMDAwMDAwICswNTMwCkBAIC05NTUsNiArOTU1LDEyIEBAIGJmaW4qLSop CiAJdXNlX2NvbGxlY3QyPW5vCiAJdXNlX2djY19zdGRpbnQ9d3JhcAogCTs7 CitjcjE2LSotZWxmKQorICAgICAgICB0bV9maWxlPSJlbGZvcy5oICR7dG1f ZmlsZX0iCisgICAgICAgIHRtYWtlX2ZpbGU9IiR7dG1ha2VfZmlsZX0gY3Ix Ni90LWNyMTYgIgorICAgICAgICBleHRyYV9wYXJ0cz0iY3J0YmVnaW4ubyBj cnRlbmQubyBjcnRpLm8gY3J0bi5vIGNydGxpYmlkLm8iCisgICAgICAgIHVz ZV9jb2xsZWN0Mj1ubworICAgICAgICA7OwogY3Jpc3YzMi0qLWVsZiB8IGNy aXN2MzItKi1ub25lKQogCXRtX2ZpbGU9ImRieGVsZi5oIGVsZm9zLmggbmV3 bGliLXN0ZGludC5oICR7dG1fZmlsZX0iCiAJdG1ha2VfZmlsZT0iY3Jpcy90 LWNyaXMiCmRpZmYgLXVwck4gLXgnKi5vcmlnJyAteCcqLnJlaicgb3JpZy9n Y2MvZG9jL2V4dGVuZC50ZXhpIG1vZC9nY2MvZG9jL2V4dGVuZC50ZXhpCi0t LSBvcmlnL2djYy9kb2MvZXh0ZW5kLnRleGkJMjAxMS0wMy0yOCAwMTozODoz NS4wMDAwMDAwMDAgKzA1MzAKKysrIG1vZC9nY2MvZG9jL2V4dGVuZC50ZXhp CTIwMTEtMDQtMDggMTY6NDI6NDIuMDAwMDAwMDAwICswNTMwCkBAIC0yNTUx LDcgKzI1NTEsNyBAQCBUaGlzIGF0dHJpYnV0ZSBpcyBpZ25vcmVkIGZvciBS OEMgdGFyZ2V0CiAKIEBpdGVtIGludGVycnVwdAogQGNpbmRleCBpbnRlcnJ1 cHQgaGFuZGxlciBmdW5jdGlvbnMKLVVzZSB0aGlzIGF0dHJpYnV0ZSBvbiB0 aGUgQVJNLCBBVlIsIENSWCwgTTMyQywgTTMyUi9ELCBtNjhrLCBNZVAsIE1J UFMsCitVc2UgdGhpcyBhdHRyaWJ1dGUgb24gdGhlIEFSTSwgQVZSLCBDUjE2 LCBDUlgsIE0zMkMsIE0zMlIvRCwgbTY4aywgTWVQLCBNSVBTLAogUlggYW5k IFhzdG9ybXkxNiBwb3J0cyB0byBpbmRpY2F0ZSB0aGF0IHRoZSBzcGVjaWZp ZWQgZnVuY3Rpb24gaXMgYW4KIGludGVycnVwdCBoYW5kbGVyLiAgVGhlIGNv bXBpbGVyIHdpbGwgZ2VuZXJhdGUgZnVuY3Rpb24gZW50cnkgYW5kIGV4aXQK IHNlcXVlbmNlcyBzdWl0YWJsZSBmb3IgdXNlIGluIGFuIGludGVycnVwdCBo YW5kbGVyIHdoZW4gdGhpcyBhdHRyaWJ1dGUKZGlmZiAtdXByTiAteCcqLm9y aWcnIC14JyoucmVqJyBvcmlnL2djYy9kb2MvaW5zdGFsbC50ZXhpIG1vZC9n Y2MvZG9jL2luc3RhbGwudGV4aQotLS0gb3JpZy9nY2MvZG9jL2luc3RhbGwu dGV4aQkyMDExLTAzLTIxIDE3OjQzOjI2LjAwMDAwMDAwMCArMDUzMAorKysg bW9kL2djYy9kb2MvaW5zdGFsbC50ZXhpCTIwMTEtMDQtMDggMTY6NDI6NDIu MDAwMDAwMDAwICswNTMwCkBAIC0zMjE1LDYgKzMyMTUsMzMgQEAgaXMgYXZh aWxhYmxlIGF0IEB1cmVme2h0dHA6Ly9ibGFja2Zpbi51YwogQGh0bWwKIDxo ciAvPgogQGVuZCBodG1sCitAaGVhZGluZyBAYW5jaG9ye2NyMTZ9Q1IxNgor CitUaGUgQ1IxNiBDb21wYWN0UklTQyBhcmNoaXRlY3R1cmUgaXMgYSAxNi1i aXQgYXJjaGl0ZWN0dXJlLiBUaGlzIGFyY2hpdGVjdHVyZSBpcyAKK3VzZWQg aW4gZW1iZWRkZWQgYXBwbGljYXRpb25zLgorCitAaWZub3RodG1sCitAeHJl ZntDUjE2IE9wdGlvbnMsLCBDUjE2IE9wdGlvbnMsIGdjYywgVXNpbmcgYW5k IFBvcnRpbmcgdGhlIEdOVSBDb21waWxlcgorQ29sbGVjdGlvbiAoR0NDKX0s CitAZW5kIGlmbm90aHRtbAorCitAaWZodG1sCitTZWUgYGBDUjE2IE9wdGlv bnMnJyBpbiB0aGUgbWFpbiBtYW51YWwgZm9yIGEgbGlzdCBvZiBDUjE2LXNw ZWNpZmljIG9wdGlvbnMuCitAZW5kIGlmaHRtbAorCitVc2UgQHNhbXB7Y29u ZmlndXJlIC0tdGFyZ2V0PWNyMTYtZWxmIC0tZW5hYmxlLWxhbmd1YWdlcz1j LGMrK30gdG8gY29uZmlndXJlCitHQ0NAIGZvciBidWlsZGluZyBhIENSMTYg ZWxmIGNyb3NzLWNvbXBpbGVyLgorCitVc2UgQHNhbXB7Y29uZmlndXJlIC0t dGFyZ2V0PWNyMTYtdWNsaW51eCAtLWVuYWJsZS1sYW5ndWFnZXM9YyxjKyt9 IHRvIGNvbmZpZ3VyZQorR0NDQCBmb3IgYnVpbGRpbmcgYSBDUjE2IHVjbGlu dXggY3Jvc3MtY29tcGlsZXIuCisKK0BodG1sCis8aHIgLz4KK0BlbmQgaHRt bAorCitAaHRtbAorPGhyIC8+CitAZW5kIGh0bWwKIEBoZWFkaW5nIEBhbmNo b3J7Y3Jpc31DUklTCiAKIENSSVMgaXMgdGhlIENQVSBhcmNoaXRlY3R1cmUg aW4gQXhpcyBDb21tdW5pY2F0aW9ucyBFVFJBWCBzeXN0ZW0tb24tYS1jaGlw CmRpZmYgLXVwck4gLXgnKi5vcmlnJyAteCcqLnJlaicgb3JpZy9nY2MvZG9j L2ludm9rZS50ZXhpIG1vZC9nY2MvZG9jL2ludm9rZS50ZXhpCi0tLSBvcmln L2djYy9kb2MvaW52b2tlLnRleGkJMjAxMS0wMy0yOSAxOTo1NDo0Mi4wMDAw MDAwMDAgKzA1MzAKKysrIG1vZC9nY2MvZG9jL2ludm9rZS50ZXhpCTIwMTEt MDQtMDggMTY6NDI6NDIuMDAwMDAwMDAwICswNTMwCkBAIC01MDIsNiArNTAy LDEyIEBAIE9iamVjdGl2ZS1DIGFuZCBPYmplY3RpdmUtQysrIERpYWxlY3Rz fS4KIC1tZWxmICAtbWFvdXQgIC1tZWxpbnV4ICAtbWxpbnV4ICAtc2ltICAt c2ltMiBAZ29sCiAtbW11bC1idWctd29ya2Fyb3VuZCAgLW1uby1tdWwtYnVn LXdvcmthcm91bmR9CiAKK0BlbXBoe0NSMTYgT3B0aW9uc30KK0BnY2NvcHRs aXN0ey1tbWFjIEBnb2wKKy1tY3IxNmNwbHVzIC1tY3IxNmMgQGdvbAorLW1z aW0gLW1pbnQzMiAtbWJpdC1vcHMKKy1tZGF0YS1tb2RlbD1AdmFye21vZGVs fX0KKwogQGVtcGh7Q1JYIE9wdGlvbnN9CiBAZ2Njb3B0bGlzdHstbW1hYyAt bXB1c2gtYXJnc30KIApAQCAtOTk3Myw2ICs5OTc5LDcgQEAgcGxhdGZvcm0u CiAqIEFWUiBPcHRpb25zOjoKICogQmxhY2tmaW4gT3B0aW9uczo6CiAqIENS SVMgT3B0aW9uczo6CisqIENSMTYgT3B0aW9uczo6CiAqIENSWCBPcHRpb25z OjoKICogRGFyd2luIE9wdGlvbnM6OgogKiBERUMgQWxwaGEgT3B0aW9uczo6 CkBAIC0xMDgwMSw2ICsxMDgwOCw0NiBAQCBMaWtlIEBvcHRpb257LXNpbX0s IGJ1dCBwYXNzIGxpbmtlciBvcHRpCiAweDQwMDAwMDAwIGFuZCB6ZXJvLWlu aXRpYWxpemVkIGRhdGEgYXQgMHg4MDAwMDAwMC4KIEBlbmQgdGFibGUKIAor QG5vZGUgQ1IxNiBPcHRpb25zCitAc3Vic2VjdGlvbiBDUjE2IE9wdGlvbnMK K0BjaW5kZXggQ1IxNiBPcHRpb25zCisKK1RoZXNlIG9wdGlvbnMgYXJlIGRl ZmluZWQgc3BlY2lmaWNhbGx5IGZvciB0aGUgQ1IxNiBwb3J0cy4KKworQHRh YmxlIEBnY2N0YWJvcHQKKworQGl0ZW0gLW1tYWMKK0BvcGluZGV4IG1tYWMK K0VuYWJsZSB0aGUgdXNlIG9mIG11bHRpcGx5LWFjY3VtdWxhdGUgaW5zdHJ1 Y3Rpb25zLiBEaXNhYmxlZCBieSBkZWZhdWx0LgorCitAaXRlbSAtbWNyMTZj cGx1cworQGl0ZW14IC1tY3IxNmMKK0BvcGluZGV4IG1jcjE2Y3BsdXMKK0Bv cGluZGV4IG1jcjE2YworR2VuZXJhdGUgY29kZSBmb3IgQ1IxNkMgb3IgQ1Ix NkMrIGFyY2hpdGVjdHVyZS4gQ1IxNkMrIGFyY2hpdGVjdHVyZSAKK2lzIGRl ZmF1bHQuCisKK0BpdGVtIC1tc2ltCitAb3BpbmRleCBtc2ltCitMaW5rcyB0 aGUgbGlicmFyeSBsaWJzaW0uYSB3aGljaCBpcyBpbiBjb21wYXRpYmxlIHdp dGggc2ltdWxhdG9yLiBBcHBsaWNhYmxlCit0byBlbGYgY29tcGlsZXIgb25s eS4KKworQGl0ZW0gLW1pbnQzMgorQG9waW5kZXggbWludDMyCitDaG9vc2Ug aW50ZWdlciB0eXBlIGFzIDMyLWJpdCB3aWRlLgorCitAaXRlbSAtbWJpdC1v cHMKK0BvcGluZGV4IG1iaXQtb3BzCitHZW5lcmF0ZXMgc2JpdC9jYml0IGlu c3RydWN0aW9ucyBmb3IgYml0IG1hbmlwdWxhdGlvbnMuCisKK0BpdGVtIC1t ZGF0YS1tb2RlbD1AdmFye21vZGVsfQorQG9waW5kZXggbWRhdGEtbW9kZWwK K0Nob29zZSBhIGRhdGEgbW9kZWwuIFRoZSBjaG9pY2VzIGZvciBAdmFye21v ZGVsfSBhcmUgQHNhbXB7bmVhcn0sCitAc2FtcHtmYXJ9IG9yIEBzYW1we21l ZGl1bX0uIEBzYW1we21lZGl1bX0gaXMgZGVmYXVsdC4KK0hvd2V2ZXIsIEBz YW1we2Zhcn0gaXMgbm90IHZhbGlkIHdoZW4gLW1jcjE2YyBvcHRpb24gaXMg Y2hvc2VuIGFzCitDUjE2QyBhcmNoaXRlY3R1cmUgZG9lcyBub3Qgc3VwcG9y dCBmYXIgZGF0YSBtb2RlbC4KK0BlbmQgdGFibGUKKwogQG5vZGUgQ1JYIE9w dGlvbnMKIEBzdWJzZWN0aW9uIENSWCBPcHRpb25zCiBAY2luZGV4IENSWCBP cHRpb25zCmRpZmYgLXVwck4gLXgnKi5vcmlnJyAteCcqLnJlaicgb3JpZy9n Y2MvZG9jL21kLnRleGkgbW9kL2djYy9kb2MvbWQudGV4aQotLS0gb3JpZy9n Y2MvZG9jL21kLnRleGkJMjAxMS0wMS0wNCAwMjoyMjoyMi4wMDAwMDAwMDAg KzA1MzAKKysrIG1vZC9nY2MvZG9jL21kLnRleGkJMjAxMS0wNC0wOCAxODoz NzoyMi4wMDAwMDAwMDAgKzA1MzAKQEAgLTE3NzUsNiArMTc3NSw1NSBAQCBJ bnRlZ2VyIGNvbnN0YW50IGluIHRoZSByYW5nZSBAbWludXN7fTYgCiBBIG1l bW9yeSBhZGRyZXNzIGJhc2VkIG9uIFkgb3IgWiBwb2ludGVyIHdpdGggZGlz cGxhY2VtZW50LgogQGVuZCB0YWJsZQogCitAaXRlbSBDUjE2IEFyY2hpdGVj dHVyZS0tLUBmaWxle2NvbmZpZy9jcjE2L2NyMTYuaH0KK0B0YWJsZSBAY29k ZQorCitAaXRlbSBiCitSZWdpc3RlcnMgZnJvbSByMCB0byByMTQgKHJlZ2lz dGVycyB3aXRob3V0IHN0YWNrIHBvaW50ZXIpCisKK0BpdGVtIGMKK1JlZ2lz dGVyIGZyb20gcjAgdG8gcjExIChhbGwgMTYtYml0IHJlZ2lzdGVycykKKwor QGl0ZW0gZAorUmVnaXN0ZXIgZnJvbSByMTIgdG8gcjE1IChhbGwgMzItYml0 IHJlZ2lzdGVycykKKworQGl0ZW0gSQorU2lnbmVkIGNvbnN0YW50IHRoYXQg Zml0cyBpbiA0IGJpdHMKKworQGl0ZW0gSgorU2lnbmVkIGNvbnN0YW50IHRo YXQgZml0cyBpbiA1IGJpdHMKKworQGl0ZW0gSworU2lnbmVkIGNvbnN0YW50 IHRoYXQgZml0cyBpbiA2IGJpdHMKKworQGl0ZW0gTAorVW5zaWduZWQgY29u c3RhbnQgdGhhdCBmaXRzIGluIDQgYml0cworCitAaXRlbSBNCitVbnNpZ25l ZCBjb25zdGFudCB0aGF0IGZpdHMgaW4gc3BlY2lmaWMgNCBiaXRzCisKK0Bp dGVtIE4KK1NpZ25lZCBjb25zdGFudCB0aGF0IGZpdHMgaW4gMTYgYml0cwor CitAaXRlbSBPCitVbnNpZ25lZCBjb25zdGFudCB0aGF0IGZpdHMgaW4gMjAg Yml0cworCitAaXRlbSBQCitTaWduZWQgY29uc3RhbnQgdGhhdCBmaXRzIGlu IDMyIGJpdHMKKworQGl0ZW0gUQorQSBzaGlmdCBvcGVyYXRpb24gaW1tZWRp YXRlIHZhbHVlIHRoYXQgZml0cyBpbiBRSSBtb2RlLgorCitAaXRlbSBSCitB IHNoaWZ0IG9wZXJhdGlvbiBpbW1lZGlhdGUgdmFsdWUgdGhhdCBmaXRzIGlu IEhJIG1vZGUuCisKK0BpdGVtIFMKK0Egc2hpZnQgb3BlcmF0aW9uIGltbWVk aWF0ZSB2YWx1ZSB0aGF0IGZpdHMgaW4gU0kgbW9kZS4KKworQGl0ZW0gRwor RmxvYXRpbmcgcG9pbnQgY29uc3RhbnQgdGhhdCBpcyBsZWdhbCBmb3Igc3Rv cmUgaW1tZWRpYXRlCitAZW5kIHRhYmxlCisKIEBpdGVtIENSWCBBcmNoaXRl Y3R1cmUtLS1AZmlsZXtjb25maWcvY3J4L2NyeC5ofQogQHRhYmxlIEBjb2Rl CiAKZGlmZiAtdXByTiAteCcqLm9yaWcnIC14JyoucmVqJyBvcmlnL2xpYmdj Yy9jb25maWcvY3IxNi9jcnRpLlMgbW9kL2xpYmdjYy9jb25maWcvY3IxNi9j cnRpLlMKLS0tIG9yaWcvbGliZ2NjL2NvbmZpZy9jcjE2L2NydGkuUwkxOTcw LTAxLTAxIDA1OjMwOjAwLjAwMDAwMDAwMCArMDUzMAorKysgbW9kL2xpYmdj Yy9jb25maWcvY3IxNi9jcnRpLlMJMjAxMS0wNC0wOCAxNjo0MjoyOC4wMDAw MDAwMDAgKzA1MzAKQEAgLTAsMCArMSw1NSBAQAorIyBTcGVjaWFsaXplZCBj b2RlIG5lZWRlZCB0byBzdXBwb3J0IGNvbnN0cnVjdGlvbiBhbmQgZGVzdHJ1 Y3Rpb24gb2YKKyMgZmlsZS1zY29wZSBvYmplY3RzIGluIEMrKyBhbmQgSmF2 YSBjb2RlLCBhbmQgdG8gc3VwcG9ydCBleGNlcHRpb24gaGFuZGxpbmcuCisj IENvcHlyaWdodCAoQykgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s IEluYy4KKyMgQ29udHJpYnV0ZWQgYnkgS1BJVCBDdW1taW5zIEluZm9zeXN0 ZW1zIExpbWl0ZWQuCisKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisjIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9u KSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBmaWxlIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws IGJ1dAorIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V CisjIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K KyMKKyMgVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBh cmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisjIHBlcm1pc3Npb25zIGRlc2NyaWJl ZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNp b24KKyMgMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbi4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg Y29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisj IGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24g YWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisjIHNlZSB0aGUgZmlsZXMgQ09Q WUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBu b3QsIHNlZQorIyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisK KworLyogVGhpcyBmaWxlIGp1c3Qgc3VwcGxpZXMgZnVuY3Rpb24gcHJvbG9n dWVzIGZvciB0aGUgLmluaXQgYW5kIC5maW5pCisgICBzZWN0aW9ucy4gIEl0 IGlzIGxpbmtlZCBpbiBiZWZvcmUgY3J0YmVnaW4uby4gICovCisKKwkuZmls ZSAgICJjcnRpLm8iCisJLmlkZW50ICAiR05VIEMgY3J0aS5vIgorCisJLnNl Y3Rpb24gLmluaXQKKwkuZ2xvYmwgIF9faW5pdAorCS50eXBlICAgX19pbml0 LEBmdW5jdGlvbgorX19pbml0OgorI2lmIGRlZmluZWQgKF9fSURfU0hBUkVE X0xJQl9fKQorCXB1c2gJJDIsIHIxMiwgcmEKKwltb3ZkICAgICRfX2N1cnJl bnRfc2hhcmVkX2xpYnJhcnlfcjEyX29mZnNldF8sIChyMSxyMCkKKwlsb2Fk ZCAgIFtyMTJdMChyMSxyMCksIChyMTIpCisjZWxzZQorICAgICAgICBwdXNo CXJhCisjZW5kaWYKKworCS5zZWN0aW9uIC5maW5pCisJLmdsb2JsICBfX2Zp bmkKKwkudHlwZSAgIF9fZmluaSxAZnVuY3Rpb24KK19fZmluaToKKyNpZiBk ZWZpbmVkIChfX0lEX1NIQVJFRF9MSUJfXykKKwlwdXNoCSQyLCByMTIsIHJh CisJbW92ZCAgICAkX19jdXJyZW50X3NoYXJlZF9saWJyYXJ5X3IxMl9vZmZz ZXRfLCAocjEscjApCisJbG9hZGQgICBbcjEyXTAocjEscjApLCAocjEyKQor I2Vsc2UKKyAgICAgICAgcHVzaAlyYQorI2VuZGlmCisJCmRpZmYgLXVwck4g LXgnKi5vcmlnJyAteCcqLnJlaicgb3JpZy9saWJnY2MvY29uZmlnL2NyMTYv Y3J0bGliaWQuUyBtb2QvbGliZ2NjL2NvbmZpZy9jcjE2L2NydGxpYmlkLlMK LS0tIG9yaWcvbGliZ2NjL2NvbmZpZy9jcjE2L2NydGxpYmlkLlMJMTk3MC0w MS0wMSAwNTozMDowMC4wMDAwMDAwMDAgKzA1MzAKKysrIG1vZC9saWJnY2Mv Y29uZmlnL2NyMTYvY3J0bGliaWQuUwkyMDExLTA0LTA4IDE2OjQyOjI4LjAw MDAwMDAwMCArMDUzMApAQCAtMCwwICsxLDI5IEBACisjIFByb3ZpZGUgYSB3 ZWFrIGRlZmluaXRpb24gb2YgdGhlIGxpYnJhcnkgSUQsIGZvciB0aGUgYmVu ZWZpdCBvZiBjZXJ0YWluCisjIGNvbmZpZ3VyZSBzY3JpcHRzLgkgCisjIENv cHlyaWdodCAoQykgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu Yy4KKyMgQ29udHJpYnV0ZWQgYnkgS1BJVCBDdW1taW5zIEluZm9zeXN0ZW1z IExpbWl0ZWQuCisKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisjIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBh bnkKKyMgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBmaWxlIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1 dAorIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp bXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisj IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMK KyMgVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUg Z3JhbnRlZCBhZGRpdGlvbmFsCisjIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBp biB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24K KyMgMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbi4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w eSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisjIGEg Y29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxv bmcgd2l0aCB0aGlzIHByb2dyYW07CisjIHNlZSB0aGUgZmlsZXMgQ09QWUlO RzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3Qs IHNlZQorIyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKwku ZmlsZSAgICJjcnRsaWJpZC5vIgorCS5pZGVudCAgIkdOVSBDIGNydGxpYmlk Lm8iCisKKy53ZWFrIF9fY3VycmVudF9zaGFyZWRfbGlicmFyeV9yMTJfb2Zm c2V0XworLnNldCBfX2N1cnJlbnRfc2hhcmVkX2xpYnJhcnlfcjEyX29mZnNl dF8sIDAKZGlmZiAtdXByTiAteCcqLm9yaWcnIC14JyoucmVqJyBvcmlnL2xp YmdjYy9jb25maWcvY3IxNi9jcnRuLlMgbW9kL2xpYmdjYy9jb25maWcvY3Ix Ni9jcnRuLlMKLS0tIG9yaWcvbGliZ2NjL2NvbmZpZy9jcjE2L2NydG4uUwkx OTcwLTAxLTAxIDA1OjMwOjAwLjAwMDAwMDAwMCArMDUzMAorKysgbW9kL2xp YmdjYy9jb25maWcvY3IxNi9jcnRuLlMJMjAxMS0wNC0wOCAxNjo0MjoyOC4w MDAwMDAwMDAgKzA1MzAKQEAgLTAsMCArMSw0NSBAQAorIyBTcGVjaWFsaXpl ZCBjb2RlIG5lZWRlZCB0byBzdXBwb3J0IGNvbnN0cnVjdGlvbiBhbmQgZGVz dHJ1Y3Rpb24gb2YKKyMgZmlsZS1zY29wZSBvYmplY3RzIGluIEMrKyBhbmQg SmF2YSBjb2RlLCBhbmQgdG8gc3VwcG9ydCBleGNlcHRpb24gaGFuZGxpbmcu CisjIENvcHlyaWdodCAoQykgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b24sIEluYy4KKyMgQ29udHJpYnV0ZWQgYnkgS1BJVCBDdW1taW5zIEluZm9z eXN0ZW1zIExpbWl0ZWQuCisKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQK KyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisjIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0 aW9uKSBhbnkKKyMgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBmaWxlIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm dWwsIGJ1dAorIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBv ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg R05VCisjIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls cy4KKyMKKyMgVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlv dSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisjIHBlcm1pc3Npb25zIGRlc2Ny aWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZl cnNpb24KKyMgMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbi4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk IGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5k CisjIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRp b24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisjIHNlZSB0aGUgZmlsZXMg Q09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJ ZiBub3QsIHNlZQorIyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4u CisKKworLyogVGhpcyBmaWxlIHN1cHBsaWVzIGZ1bmN0aW9uIGVwaWxvZ3Vl cyBmb3IgdGhlIC5pbml0IGFuZCAuZmluaSBzZWN0aW9ucy4KKyAgSXQgaXMg bGlua2VkIGluIGFmdGVyIGFsbCBvdGhlciBmaWxlcy4gICovCisKKwkuZmls ZSAgICJjcnRuLm8iCisJLmlkZW50ICAiR05VIEMgY3J0bi5vIgorCisJLnNl Y3Rpb24gLmluaXQKKyNpZiBkZWZpbmVkIChfX0lEX1NIQVJFRF9MSUJfXykK Kwlwb3ByZXQJJDIsIHIxMiwgcmEKKyNlbHNlCisJcG9wcmV0CXJhCisjZW5k aWYKKworCS5zZWN0aW9uIC5maW5pCisjaWYgZGVmaW5lZCAoX19JRF9TSEFS RURfTElCX18pCisJcG9wcmV0CSQyLCByMTIsIHJhCisjZWxzZQorCXBvcHJl dAlyYQorI2VuZGlmCisKZGlmZiAtdXByTiAteCcqLm9yaWcnIC14JyoucmVq JyBvcmlnL2xpYmdjYy9jb25maWcvY3IxNi90LWNyMTYgbW9kL2xpYmdjYy9j b25maWcvY3IxNi90LWNyMTYKLS0tIG9yaWcvbGliZ2NjL2NvbmZpZy9jcjE2 L3QtY3IxNgkxOTcwLTAxLTAxIDA1OjMwOjAwLjAwMDAwMDAwMCArMDUzMAor KysgbW9kL2xpYmdjYy9jb25maWcvY3IxNi90LWNyMTYJMjAxMS0wNC0wOCAx Njo0MjoyOC4wMDAwMDAwMDAgKzA1MzAKQEAgLTAsMCArMSwxNCBAQAorIyBB c3NlbWJsZSBzdGFydHVwIGZpbGVzLgorRVhUUkFfTVVMVElMSUJfUEFSVFMg PSBjcnRiZWdpbi5vIGNydGVuZC5vIGNydGkubyBjcnRuLm8gY3J0bGliaWQu bworCiskKFQpY3J0aS5vOiAkKHNyY2RpcikvY29uZmlnL2NyMTYvY3J0aS5T ICQoR0NDX1BBU1NFUykKKwkkKEdDQ19GT1JfVEFSR0VUKSAkKEdDQ19DRkxB R1MpICQoTVVMVElMSUJfQ0ZMQUdTKSAkKElOQ0xVREVTKSBcCisJLWMgLW8g JChUKWNydGkubyAteCBhc3NlbWJsZXItd2l0aC1jcHAgJChzcmNkaXIpL2Nv bmZpZy9jcjE2L2NydGkuUworCiskKFQpY3J0bGliaWQubzogJChzcmNkaXIp L2NvbmZpZy9jcjE2L2NydGxpYmlkLlMgJChHQ0NfUEFTU0VTKQorCSQoR0ND X0ZPUl9UQVJHRVQpICQoR0NDX0NGTEFHUykgJChNVUxUSUxJQl9DRkxBR1Mp ICQoSU5DTFVERVMpIFwKKwktYyAtbyAkKFQpY3J0bGliaWQubyAteCBhc3Nl bWJsZXItd2l0aC1jcHAgJChzcmNkaXIpL2NvbmZpZy9jcjE2L2NydGxpYmlk LlMKKworJChUKWNydG4ubzogJChzcmNkaXIpL2NvbmZpZy9jcjE2L2NydG4u UyAkKEdDQ19QQVNTRVMpCisJJChHQ0NfRk9SX1RBUkdFVCkgJChHQ0NfQ0ZM QUdTKSAkKE1VTFRJTElCX0NGTEFHUykgJChJTkNMVURFUykgXAorCS1jIC1v ICQoVCljcnRuLm8gLXggYXNzZW1ibGVyLXdpdGgtY3BwICQoc3JjZGlyKS9j b25maWcvY3IxNi9jcnRuLlMKZGlmZiAtdXByTiAteCcqLm9yaWcnIC14Jyou cmVqJyBvcmlnL2xpYmdjYy9jb25maWcuaG9zdCBtb2QvbGliZ2NjL2NvbmZp Zy5ob3N0Ci0tLSBvcmlnL2xpYmdjYy9jb25maWcuaG9zdAkyMDExLTAzLTE0 IDExOjM2OjIzLjAwMDAwMDAwMCArMDUzMAorKysgbW9kL2xpYmdjYy9jb25m aWcuaG9zdAkyMDExLTA0LTA4IDE2OjQyOjI4LjAwMDAwMDAwMCArMDUzMApA QCAtNzksNiArNzksOCBAQCBhdnItKi0qKQogYmZpbiotKikKIAljcHVfdHlw ZT1iZmluCiAJOzsKK2NyMTYtKi0qKQorICAgICAgICA7OwogZmlkby0qLSop CiAJY3B1X3R5cGU9bTY4awogCTs7CkBAIC0yNTAsNiArMjUyLDEwIEBAIGNy aXMtKi1saW51eCogfCBjcmlzdjMyLSotbGludXgqKQogCTs7CiBjcngtKi1l bGYpCiAJOzsKK2NyMTYtKi0qKQorICAgICAgICBleHRyYV9wYXJ0cz0iY3J0 YmVnaW4ubyBjcnRlbmQubyBjcnRpLm8gY3J0bi5vIGNydGxpYmlkLm8iCisg ICAgICAgIHRtYWtlX2ZpbGU9IiR7dG1ha2VfZmlsZX0gY3IxNi90LWNyMTYi CisgICAgICAgIDs7CiBmaWRvLSotZWxmKQogCTs7CiBmcjMwLSotZWxmKQpk aWZmIC11cHJOIC14Jyoub3JpZycgLXgnKi5yZWonIG9yaWcvbGlic3RkYysr LXYzL2NvbmZpZ3VyZSBtb2QvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQotLS0g b3JpZy9saWJzdGRjKystdjMvY29uZmlndXJlCTIwMTEtMDMtMDggMDU6MzQ6 MDUuMDAwMDAwMDAwICswNTMwCisrKyBtb2QvbGlic3RkYysrLXYzL2NvbmZp Z3VyZQkyMDExLTA0LTA4IDE2OjQzOjQ4LjAwMDAwMDAwMCArMDUzMApAQCAt MjY0OTIsNiArMjY0OTIsOSBAQCBjYXNlICIke2hvc3R9IiBpbgogICAgICMg VGhpcyBpcyBhIGZyZWVzdGFuZGluZyBjb25maWd1cmF0aW9uOyB0aGVyZSBp cyBub3RoaW5nIHRvIGRvIGhlcmUuCiAgICAgOzsKIAorICBjcjE2LSotKikK KyAgICA7OworCiAgIG1pcHMqLXNkZS1lbGYqKQogICAgICMgVGhlc2UgZGVm aW5pdGlvbnMgYXJlIGZvciB0aGUgU0RFIEMgbGlicmFyeSByYXRoZXIgdGhh biBuZXdsaWIuCiAgICAgU0VDVElPTl9GTEFHUz0nLWZmdW5jdGlvbi1zZWN0 aW9ucyAtZmRhdGEtc2VjdGlvbnMnCmRpZmYgLXVwck4gLXgnKi5vcmlnJyAt eCcqLnJlaicgb3JpZy9saWJzdGRjKystdjMvY3Jvc3Njb25maWcubTQgbW9k L2xpYnN0ZGMrKy12My9jcm9zc2NvbmZpZy5tNAotLS0gb3JpZy9saWJzdGRj KystdjMvY3Jvc3Njb25maWcubTQJMjAxMS0wMi0wNCAxMjo1Njo1Ny4wMDAw MDAwMDAgKzA1MzAKKysrIG1vZC9saWJzdGRjKystdjMvY3Jvc3Njb25maWcu bTQJMjAxMS0wNC0wOCAxNjo0Mzo0Ny4wMDAwMDAwMDAgKzA1MzAKQEAgLTgs NiArOCw5IEBAIGNhc2UgIiR7aG9zdH0iIGluCiAgIGFybSotKi1zeW1iaWFu ZWxmKikKICAgICAjIFRoaXMgaXMgYSBmcmVlc3RhbmRpbmcgY29uZmlndXJh dGlvbjsgdGhlcmUgaXMgbm90aGluZyB0byBkbyBoZXJlLgogICAgIDs7Cisg IGNyMTYtKi0qKQorICAgICMgU2lUZWwKKyAgICA7OyAKIAogICBtaXBzKi1z ZGUtZWxmKikKICAgICAjIFRoZXNlIGRlZmluaXRpb25zIGFyZSBmb3IgdGhl IFNERSBDIGxpYnJhcnkgcmF0aGVyIHRoYW4gbmV3bGliLgo= --_002_371569CBCFB2E745B891DBB88B2DFDDD1A2343CD45KCINPUNHJCMS0_--