Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rO3LT-000qbv-IF for pgsql-hackers@arkaria.postgresql.org; Thu, 11 Jan 2024 22:16:17 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1rO3LR-00FYvN-Mp for pgsql-hackers@arkaria.postgresql.org; Thu, 11 Jan 2024 22:16:13 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rO3LP-00FYvF-JQ for pgsql-hackers@lists.postgresql.org; Thu, 11 Jan 2024 22:16:13 +0000 Received: from out4-smtp.messagingengine.com ([66.111.4.28]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rO3LK-0014vi-0j for pgsql-hackers@lists.postgresql.org; Thu, 11 Jan 2024 22:16:10 +0000 Received: from compute2.internal (compute2.nyi.internal [10.202.2.46]) by mailout.nyi.internal (Postfix) with ESMTP id EA2355C00F0; Thu, 11 Jan 2024 17:16:04 -0500 (EST) Received: from imap49 ([10.202.2.99]) by compute2.internal (MEProxy); Thu, 11 Jan 2024 17:16:04 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=eulerto.com; h= cc:cc:content-type:content-type:date:date:from:from:in-reply-to :in-reply-to:message-id:mime-version:references:reply-to:subject :subject:to:to; s=fm3; t=1705011364; x=1705097764; bh=njNuJJHFBS v7naDMh9xgqqZOYBq1y+mFz6CFVrrFgUA=; b=o6mJd13u6T3RyRJJMygiNtL2G7 KO+c35nccPGMTVz/x3dS10AF3zadB+g7hmKhupRIBdJXHtNy/ZGNxWyzWV1KBjbS CQQ6W/Sm8aPhBCuckO8HTfxs5HRYqCVT+aeQ5HRDTV6vzmxZ+lmaiLh0JtSorW6v 6dDDi9JmWPcGrkicXHvCz9zFTUvJlagwkhXeuLTVR421BpBYHQmjztleNU/9OEjK TACGTCzDWy44zhjjpRPKOgFrmjM18/hOkzfLkiba7RsJf6L09lbrl08ep9v3fyfa YBGSlGBp1uBgkxqIBXMWyVhVOpwdKl1pCDWsqGPNPX9lOGE5IB0IFMQpu9rg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:subject:subject:to :to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm2; t=1705011364; x=1705097764; bh=njNuJJHFBSv7naDMh9xgqqZOYBq1 y+mFz6CFVrrFgUA=; b=CUDsOI9Te4PpBMLMs4o3192RX2zN9vOQHTN6D39CW4PJ ATmy/D+SpgSACcgjvMxjWyP9PhPWvgEmgYUj5s8zwlB1PrHewRoRhhk53TmtdiTf w/V8UV65YuTc3QmIflMDCUsiBbVE3z7r5pzAo9sggT4X7IEN/iqooh4mnuBPIld+ vP+OobvfxgV+yRVZUAGrHX6eJtQHfhgDuTDWg5eWDg31gh1zYJFnv7uY++VgjZAT 9OedohRT0izcy8CbKuTee3vc+D1HoWbxP3NtaguIqdCgfjiK5TWJaSeexy9d7xen Z/jjwnf3YrJn/kUJ01VPLGW2RLMOnNykThGG7e3tog== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvkedrvdeifedgudehjecutefuodetggdotefrod ftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfgh necuuegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmd enucfjughrpefofgggkfgjfhffhffvvefutgesmhdtreerreertdenucfhrhhomhepfdfg uhhlvghrucfvrghvvghirhgrfdcuoegvuhhlvghrsegvuhhlvghrthhordgtohhmqeenuc ggtffrrghtthgvrhhnpeeiheeuledvvdejteejieduteefgefhgfeftdeggfekhefgueet ieekveduieetgfenucffohhmrghinhepphhoshhtghhrvghsqhhlrdhorhhgpdgvnhhtvg hrphhrihhsvggusgdrtghomhenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhep mhgrihhlfhhrohhmpegvuhhlvghrsegvuhhlvghrthhordgtohhm X-ME-Proxy: Feedback-ID: i0c21471d:Fastmail Received: by mailuser.nyi.internal (Postfix, from userid 501) id 44EAD15A0092; Thu, 11 Jan 2024 17:16:04 -0500 (EST) X-Mailer: MessagingEngine.com Webmail Interface User-Agent: Cyrus-JMAP/3.9.0-alpha0-1374-gc37f3abe3d-fm-20240102.001-gc37f3abe MIME-Version: 1.0 Message-Id: In-Reply-To: References: <5ac50071-f2ed-4ace-a8fd-b892cffd33eb@www.fastmail.com> <4710d895-689a-4ae6-b8e3-344286dbf970@app.fastmail.com> <96e3b739-d63d-4d35-90a3-7869465b7167@eisentraut.org> <2736443c-58e3-42df-8cc4-8c66106e3da5@app.fastmail.com> Date: Thu, 11 Jan 2024 19:15:22 -0300 From: "Euler Taveira" To: "kuroda.hayato@fujitsu.com" , "pgsql-hackers@lists.postgresql.org" Cc: "Shlok Kyal" , "vignesh C" , "Michael Paquier" , "Peter Eisentraut" , "Andres Freund" , "Ashutosh Bapat" , "Amit Kapila" Subject: Re: speed up a logical replica setup Content-Type: multipart/mixed; boundary=edfad4ed2a4841a3865dc10edbe150cd List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --edfad4ed2a4841a3865dc10edbe150cd Content-Type: multipart/alternative; boundary=24fe9cf03d974ff1b3aa5f70fcaf02b1 --24fe9cf03d974ff1b3aa5f70fcaf02b1 Content-Type: text/plain On Thu, Jan 11, 2024, at 9:18 AM, Hayato Kuroda (Fujitsu) wrote: > I have been concerned that the patch has not been tested by cfbot due to the > application error. Also, some comments were raised. Therefore, I created a patch > to move forward. Let me send an updated patch to hopefully keep the CF bot happy. The following items are included in this patch: * drop physical replication slot if standby is using one [1]. * cleanup small changes (copyright, .gitignore) [2][3] * fix getopt_long() options [2] * fix format specifier for some messages * move doc to Server Application section [4] * fix assert failure * ignore duplicate database names [2] * store subscriber server log into a separate file * remove MSVC support I'm still addressing other reviews and I'll post another version that includes it soon. [1] https://www.postgresql.org/message-id/e02a2c17-22e5-4ba6-b788-de696ab74f1e%40app.fastmail.com [2] https://www.postgresql.org/message-id/CALDaNm1joke42n68LdegN5wCpaeoOMex2EHcdZrVZnGD3UhfNQ%40mail.gmail.com [3] https://www.postgresql.org/message-id/TY3PR01MB98895BA6C1D72CB8582CACC4F5682%40TY3PR01MB9889.jpnprd01.prod.outlook.com [4] https://www.postgresql.org/message-id/TY3PR01MB988978C7362A101927070D29F56A2%40TY3PR01MB9889.jpnprd01.prod.outlook.com -- Euler Taveira EDB https://www.enterprisedb.com/ --24fe9cf03d974ff1b3aa5f70fcaf02b1 Content-Type: text/html Content-Transfer-Encoding: quoted-printable
On Thu, Jan 11,= 2024, at 9:18 AM, Hayato Kuroda (Fujitsu) wrote:
I have been concerned that the pa= tch has not been tested by cfbot due to the
application er= ror. Also, some comments were raised. Therefore, I created a patch
to move forward.

Let = me send an updated patch to hopefully keep the CF bot happy. The followi= ng
items are included in this patch:

* drop physical replication slot if standby is using one [1].
* cleanup small changes (copyright, .gitignore) [2][3]
* fix getopt_long() options [2]
* fix format spec= ifier for some messages
* move doc to Server Application s= ection [4]
* fix assert failure
* ignore dup= licate database names [2]
* store subscriber server log in= to a separate file
* remove MSVC support
I'm still addressing other reviews and I'll post another ver= sion that includes
it soon.

= =


--
Euler Taveira
EDB   https://www.enterprisedb.com/

<= /body> --24fe9cf03d974ff1b3aa5f70fcaf02b1-- --edfad4ed2a4841a3865dc10edbe150cd Content-Disposition: attachment; filename*0="v5-0001-Creates-a-new-logical-replica-from-a-standby-serv.pat"; filename*1="ch" Content-Type: text/x-patch; name="=?UTF-8?Q?v5-0001-Creates-a-new-logical-replica-from-a-standby-serv.patc?= =?UTF-8?Q?h?=" Content-Transfer-Encoding: BASE64 RnJvbSAyMzQxZWYzZGMyNmQ0OGI1MWIxM2FkMDFhYzM4Yzc5ZDI0YjFlNDYxIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBFdWxlciBUYXZlaXJhIDxldWxlci50YXZlaXJhQGVu dGVycHJpc2VkYi5jb20+CkRhdGU6IE1vbiwgNSBKdW4gMjAyMyAxNDozOTo0MCAtMDQwMApT dWJqZWN0OiBbUEFUQ0ggdjVdIENyZWF0ZXMgYSBuZXcgbG9naWNhbCByZXBsaWNhIGZyb20g YSBzdGFuZGJ5IHNlcnZlcgoKQSBuZXcgdG9vbCBjYWxsZWQgcGdfc3Vic2NyaWJlciBjYW4g Y29udmVydCBhIHBoeXNpY2FsIHJlcGxpY2EgaW50byBhCmxvZ2ljYWwgcmVwbGljYS4gSXQg cnVucyBvbiB0aGUgdGFyZ2V0IHNlcnZlciBhbmQgc2hvdWxkIGJlIGFibGUgdG8KY29ubmVj dCB0byB0aGUgc291cmNlIHNlcnZlciAocHVibGlzaGVyKSBhbmQgdGhlIHRhcmdldCBzZXJ2 ZXIKKHN1YnNjcmliZXIpLgoKVGhlIGNvbnZlcnNpb24gcmVxdWlyZXMgYSBmZXcgc3RlcHMu IENoZWNrIGlmIHRoZSB0YXJnZXQgZGF0YSBkaXJlY3RvcnkKaGFzIHRoZSBzYW1lIHN5c3Rl bSBpZGVudGlmaWVyIHRoYW4gdGhlIHNvdXJjZSBkYXRhIGRpcmVjdG9yeS4gU3RvcCB0aGUK dGFyZ2V0IHNlcnZlciBpZiBpdCBpcyBydW5uaW5nIGFzIGEgc3RhbmRieSBzZXJ2ZXIuIENy ZWF0ZSBvbmUKcmVwbGljYXRpb24gc2xvdCBwZXIgc3BlY2lmaWVkIGRhdGFiYXNlIG9uIHRo ZSBzb3VyY2Ugc2VydmVyLiBPbmUKYWRkaXRpb25hbCByZXBsaWNhdGlvbiBzbG90IGlzIGNy ZWF0ZWQgYXQgdGhlIGVuZCB0byBnZXQgdGhlIGNvbnNpc3RlbnQKTFNOIChUaGlzIGNvbnNp c3RlbnQgTFNOIHdpbGwgYmUgdXNlZCBhcyAoYSkgYSBzdG9wcGluZyBwb2ludCBmb3IgdGhl CnJlY292ZXJ5IHByb2Nlc3MgYW5kIChiKSBhIHN0YXJ0aW5nIHBvaW50IGZvciB0aGUgc3Vi c2NyaXB0aW9ucykuIFdyaXRlCnJlY292ZXJ5IHBhcmFtZXRlcnMgaW50byB0aGUgdGFyZ2V0 IGRhdGEgZGlyZWN0b3J5IGFuZCBzdGFydCB0aGUgdGFyZ2V0CnNlcnZlciAoV2FpdCB1bnRp bCB0aGUgdGFyZ2V0IHNlcnZlciBpcyBwcm9tb3RlZCkuIENyZWF0ZSBvbmUKcHVibGljYXRp b24gKEZPUiBBTEwgVEFCTEVTKSBwZXIgc3BlY2lmaWVkIGRhdGFiYXNlIG9uIHRoZSBzb3Vy Y2UKc2VydmVyLiBDcmVhdGUgb25lIHN1YnNjcmlwdGlvbiBwZXIgc3BlY2lmaWVkIGRhdGFi YXNlIG9uIHRoZSB0YXJnZXQKc2VydmVyIChVc2UgcmVwbGljYXRpb24gc2xvdCBhbmQgcHVi bGljYXRpb24gY3JlYXRlZCBpbiBhIHByZXZpb3VzIHN0ZXAuCkRvbid0IGVuYWJsZSB0aGUg c3Vic2NyaXB0aW9ucyB5ZXQpLiBTZXRzIHRoZSByZXBsaWNhdGlvbiBwcm9ncmVzcyB0bwp0 aGUgY29uc2lzdGVudCBMU04gdGhhdCB3YXMgZ290IGluIGEgcHJldmlvdXMgc3RlcC4gRW5h YmxlIHRoZQpzdWJzY3JpcHRpb24gZm9yIGVhY2ggc3BlY2lmaWVkIGRhdGFiYXNlIG9uIHRo ZSB0YXJnZXQgc2VydmVyLiBSZW1vdmUKdGhlIGFkZGl0aW9uYWwgcmVwbGljYXRpb24gc2xv dCB0aGF0IHdhcyB1c2VkIHRvIGdldCB0aGUgY29uc2lzdGVudCBMU04uClN0b3AgdGhlIHRh cmdldCBzZXJ2ZXIuIENoYW5nZSB0aGUgc3lzdGVtIGlkZW50aWZpZXIgZnJvbSB0aGUgdGFy Z2V0CnNlcnZlci4KCkRlcGVuZGluZyBvbiB5b3VyIHdvcmtsb2FkIGFuZCBkYXRhYmFzZSBz aXplLCBjcmVhdGluZyBhIGxvZ2ljYWwgcmVwbGljYQpjb3VsZG4ndCBiZSBhbiBvcHRpb24g ZHVlIHRvIHJlc291cmNlIGNvbnN0cmFpbnRzIChXQUwgYmFja2xvZyBzaG91bGQgYmUKYXZh aWxhYmxlIHVudGlsIGFsbCB0YWJsZSBkYXRhIGlzIHN5bmNocm9uaXplZCkuIFRoZSBpbml0 aWFsIGRhdGEgY29weQphbmQgdGhlIHJlcGxpY2F0aW9uIHByb2dyZXNzIHRlbmRzIHRvIGJl IGZhc3RlciBvbiBhIHBoeXNpY2FsIHJlcGxpY2EuClRoZSBwdXJwb3NlIG9mIHRoaXMgdG9v bCBpcyB0byBzcGVlZCB1cCBhIGxvZ2ljYWwgcmVwbGljYSBzZXR1cC4KLS0tCiBkb2Mvc3Jj L3NnbWwvcmVmL2FsbGZpbGVzLnNnbWwgICAgICAgICAgICAgICAgfCAgICAxICsKIGRvYy9z cmMvc2dtbC9yZWYvcGdfc3Vic2NyaWJlci5zZ21sICAgICAgICAgICB8ICAyODQgKysrCiBk b2Mvc3JjL3NnbWwvcmVmZXJlbmNlLnNnbWwgICAgICAgICAgICAgICAgICAgfCAgICAxICsK IHNyYy9iaW4vcGdfYmFzZWJhY2t1cC8uZ2l0aWdub3JlICAgICAgICAgICAgICB8ICAgIDEg Kwogc3JjL2Jpbi9wZ19iYXNlYmFja3VwL01ha2VmaWxlICAgICAgICAgICAgICAgIHwgICAg OCArLQogc3JjL2Jpbi9wZ19iYXNlYmFja3VwL21lc29uLmJ1aWxkICAgICAgICAgICAgIHwg ICAxOSArCiBzcmMvYmluL3BnX2Jhc2ViYWNrdXAvcGdfc3Vic2NyaWJlci5jICAgICAgICAg fCAxNjU3ICsrKysrKysrKysrKysrKysrCiBzcmMvYmluL3BnX2Jhc2ViYWNrdXAvdC8wNDBf cGdfc3Vic2NyaWJlci5wbCAgfCAgIDQ0ICsKIC4uLi90LzA0MV9wZ19zdWJzY3JpYmVyX3N0 YW5kYnkucGwgICAgICAgICAgICB8ICAxMzkgKysKIDkgZmlsZXMgY2hhbmdlZCwgMjE1MyBp bnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZG9jL3Ny Yy9zZ21sL3JlZi9wZ19zdWJzY3JpYmVyLnNnbWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMv YmluL3BnX2Jhc2ViYWNrdXAvcGdfc3Vic2NyaWJlci5jCiBjcmVhdGUgbW9kZSAxMDA2NDQg c3JjL2Jpbi9wZ19iYXNlYmFja3VwL3QvMDQwX3BnX3N1YnNjcmliZXIucGwKIGNyZWF0ZSBt b2RlIDEwMDY0NCBzcmMvYmluL3BnX2Jhc2ViYWNrdXAvdC8wNDFfcGdfc3Vic2NyaWJlcl9z dGFuZGJ5LnBsCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9hbGxmaWxlcy5zZ21s IGIvZG9jL3NyYy9zZ21sL3JlZi9hbGxmaWxlcy5zZ21sCmluZGV4IDRhNDI5OTliMTguLjM4 NjJjOTc2ZDcgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvYWxsZmlsZXMuc2dtbAor KysgYi9kb2Mvc3JjL3NnbWwvcmVmL2FsbGZpbGVzLnNnbWwKQEAgLTIxNCw2ICsyMTQsNyBA QCBDb21wbGV0ZSBsaXN0IG9mIHVzYWJsZSBzZ21sIHNvdXJjZSBmaWxlcyBpbiB0aGlzIGRp cmVjdG9yeS4KIDwhRU5USVRZIHBnUmVzZXR3YWwgICAgICAgICBTWVNURU0gInBnX3Jlc2V0 d2FsLnNnbWwiPgogPCFFTlRJVFkgcGdSZXN0b3JlICAgICAgICAgIFNZU1RFTSAicGdfcmVz dG9yZS5zZ21sIj4KIDwhRU5USVRZIHBnUmV3aW5kICAgICAgICAgICBTWVNURU0gInBnX3Jl d2luZC5zZ21sIj4KKzwhRU5USVRZIHBnU3Vic2NyaWJlciAgICAgICBTWVNURU0gInBnX3N1 YnNjcmliZXIuc2dtbCI+CiA8IUVOVElUWSBwZ1ZlcmlmeUJhY2t1cCAgICAgU1lTVEVNICJw Z192ZXJpZnliYWNrdXAuc2dtbCI+CiA8IUVOVElUWSBwZ3Rlc3Rmc3luYyAgICAgICAgU1lT VEVNICJwZ3Rlc3Rmc3luYy5zZ21sIj4KIDwhRU5USVRZIHBndGVzdHRpbWluZyAgICAgICBT WVNURU0gInBndGVzdHRpbWluZy5zZ21sIj4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9y ZWYvcGdfc3Vic2NyaWJlci5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ19zdWJzY3JpYmVy LnNnbWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNTUzMTg1YzM1 ZgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvcGdfc3Vic2NyaWJlci5z Z21sCkBAIC0wLDAgKzEsMjg0IEBACis8IS0tCitkb2Mvc3JjL3NnbWwvcmVmL3BnX3N1YnNj cmliZXIuc2dtbAorUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCistLT4KKworPHJlZmVudHJ5 IGlkPSJhcHAtcGdzdWJzY3JpYmVyIj4KKyA8aW5kZXh0ZXJtIHpvbmU9ImFwcC1wZ3N1YnNj cmliZXIiPgorICA8cHJpbWFyeT5wZ19zdWJzY3JpYmVyPC9wcmltYXJ5PgorIDwvaW5kZXh0 ZXJtPgorCisgPHJlZm1ldGE+CisgIDxyZWZlbnRyeXRpdGxlPjxhcHBsaWNhdGlvbj5wZ19z dWJzY3JpYmVyPC9hcHBsaWNhdGlvbj48L3JlZmVudHJ5dGl0bGU+CisgIDxtYW52b2xudW0+ MTwvbWFudm9sbnVtPgorICA8cmVmbWlzY2luZm8+QXBwbGljYXRpb248L3JlZm1pc2NpbmZv PgorIDwvcmVmbWV0YT4KKworIDxyZWZuYW1lZGl2PgorICA8cmVmbmFtZT5wZ19zdWJzY3Jp YmVyPC9yZWZuYW1lPgorICA8cmVmcHVycG9zZT5jcmVhdGUgYSBuZXcgbG9naWNhbCByZXBs aWNhIGZyb20gYSBzdGFuZGJ5IHNlcnZlcjwvcmVmcHVycG9zZT4KKyA8L3JlZm5hbWVkaXY+ CisKKyA8cmVmc3lub3BzaXNkaXY+CisgIDxjbWRzeW5vcHNpcz4KKyAgIDxjb21tYW5kPnBn X3N1YnNjcmliZXI8L2NvbW1hbmQ+CisgICA8YXJnIHJlcD0icmVwZWF0Ij48cmVwbGFjZWFi bGU+b3B0aW9uPC9yZXBsYWNlYWJsZT48L2FyZz4KKyAgPC9jbWRzeW5vcHNpcz4KKyA8L3Jl ZnN5bm9wc2lzZGl2PgorCisgPHJlZnNlY3QxPgorICA8dGl0bGU+RGVzY3JpcHRpb248L3Rp dGxlPgorICA8cGFyYT4KKyAgIDxhcHBsaWNhdGlvbj5wZ19zdWJzY3JpYmVyPC9hcHBsaWNh dGlvbj4gdGFrZXMgdGhlIHB1Ymxpc2hlciBhbmQgc3Vic2NyaWJlcgorICAgY29ubmVjdGlv biBzdHJpbmdzLCBhIGNsdXN0ZXIgZGlyZWN0b3J5IGZyb20gYSBzdGFuZGJ5IHNlcnZlciBh bmQgYSBsaXN0IG9mCisgICBkYXRhYmFzZSBuYW1lcyBhbmQgaXQgc2V0cyB1cCBhIG5ldyBs b2dpY2FsIHJlcGxpY2EgdXNpbmcgdGhlIHBoeXNpY2FsCisgICByZWNvdmVyeSBwcm9jZXNz LgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBUaGUgPGFwcGxpY2F0aW9uPnBnX3N1YnNj cmliZXI8L2FwcGxpY2F0aW9uPiBzaG91bGQgYmUgcnVuIGF0IHRoZSB0YXJnZXQKKyAgIHNl cnZlci4gVGhlIHNvdXJjZSBzZXJ2ZXIgKGtub3duIGFzIHB1Ymxpc2hlciBzZXJ2ZXIpIHNo b3VsZCBhY2NlcHQgbG9naWNhbAorICAgcmVwbGljYXRpb24gY29ubmVjdGlvbnMgZnJvbSB0 aGUgdGFyZ2V0IHNlcnZlciAoa25vd24gYXMgc3Vic2NyaWJlciBzZXJ2ZXIpLgorICAgVGhl IHRhcmdldCBzZXJ2ZXIgc2hvdWxkIGFjY2VwdCBsb2NhbCBsb2dpY2FsIHJlcGxpY2F0aW9u IGNvbm5lY3Rpb24uCisgIDwvcGFyYT4KKyA8L3JlZnNlY3QxPgorCisgPHJlZnNlY3QxPgor ICA8dGl0bGU+T3B0aW9uczwvdGl0bGU+CisKKyAgIDxwYXJhPgorICAgIDxhcHBsaWNhdGlv bj5wZ19zdWJzY3JpYmVyPC9hcHBsaWNhdGlvbj4gYWNjZXB0cyB0aGUgZm9sbG93aW5nCisg ICAgY29tbWFuZC1saW5lIGFyZ3VtZW50czoKKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAg IDx2YXJsaXN0ZW50cnk+CisgICAgICA8dGVybT48b3B0aW9uPi1EIDxyZXBsYWNlYWJsZSBj bGFzcz0icGFyYW1ldGVyIj5kaXJlY3Rvcnk8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVy bT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LS1wZ2RhdGE9PHJlcGxhY2VhYmxlIGNsYXNzPSJw YXJhbWV0ZXIiPmRpcmVjdG9yeTwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgorICAg ICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBUaGUgdGFyZ2V0IGRpcmVj dG9yeSB0aGF0IGNvbnRhaW5zIGEgY2x1c3RlciBkaXJlY3RvcnkgZnJvbSBhIHN0YW5kYnkK KyAgICAgICAgc2VydmVyLgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+Cisg ICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICA8dGVy bT48b3B0aW9uPi1QICA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+Y29ubmluZm88 L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LS1w dWJsaXNoZXItY29ubmluZm89PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmNvbm5p bmZvPC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+Cisg ICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBjb25uZWN0aW9uIHN0cmluZyB0byB0aGUgcHVi bGlzaGVyLiBGb3IgZGV0YWlscyBzZWUgPHhyZWYgbGlua2VuZD0ibGlicHEtY29ubnN0cmlu ZyIvPi4KKyAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxp c3RlbnRyeT4KKworICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgPHRlcm0+PG9wdGlvbj4t UyA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+Y29ubmluZm88L3JlcGxhY2VhYmxl Pjwvb3B0aW9uPjwvdGVybT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LS1zdWJzY3JpYmVyLWNv bm5pbmZvPTxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5jb25uaW5mbzwvcmVwbGFj ZWFibGU+PC9vcHRpb24+PC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJh PgorICAgICAgICBUaGUgY29ubmVjdGlvbiBzdHJpbmcgdG8gdGhlIHN1YnNjcmliZXIuIEZv ciBkZXRhaWxzIHNlZSA8eHJlZiBsaW5rZW5kPSJsaWJwcS1jb25uc3RyaW5nIi8+LgorICAg ICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5Pgor CisgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICA8dGVybT48b3B0aW9uPi1kIDxyZXBsYWNl YWJsZSBjbGFzcz0icGFyYW1ldGVyIj5kYm5hbWU8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwv dGVybT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LS1kYXRhYmFzZT08cmVwbGFjZWFibGUgY2xh c3M9InBhcmFtZXRlciI+ZGJuYW1lPC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+Cisg ICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBkYXRhYmFzZSBu YW1lIHRvIGNyZWF0ZSB0aGUgc3Vic2NyaXB0aW9uLiBNdWx0aXBsZSBkYXRhYmFzZXMgY2Fu IGJlCisgICAgICAgIHNlbGVjdGVkIGJ5IHdyaXRpbmcgbXVsdGlwbGUgPG9wdGlvbj4tZDwv b3B0aW9uPiBzd2l0Y2hlcy4KKyAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgor ICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgPHRl cm0+PG9wdGlvbj4tbjwvb3B0aW9uPjwvdGVybT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LS1k cnktcnVuPC9vcHRpb24+PC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJh PgorICAgICAgICBEbyBldmVyeXRoaW5nIGV4Y2VwdCBhY3R1YWxseSBtb2RpZnlpbmcgdGhl IHRhcmdldCBkaXJlY3RvcnkuCisgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4K KyAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgIDx0 ZXJtPjxvcHRpb24+LXY8L29wdGlvbj48L3Rlcm0+CisgICAgICA8dGVybT48b3B0aW9uPi0t dmVyYm9zZTwvb3B0aW9uPjwvdGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFy YT4KKyAgICAgICAgRW5hYmxlcyB2ZXJib3NlIG1vZGUuIFRoaXMgd2lsbCBjYXVzZQorICAg ICAgICA8YXBwbGljYXRpb24+cGdfc3Vic2NyaWJlcjwvYXBwbGljYXRpb24+IHRvIG91dHB1 dCBwcm9ncmVzcyBtZXNzYWdlcworICAgICAgICBhbmQgZGV0YWlsZWQgaW5mb3JtYXRpb24g YWJvdXQgZWFjaCBzdGVwLgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+Cisg ICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorICAgPC9wYXJhPgor CisgICA8cGFyYT4KKyAgICBPdGhlciBvcHRpb25zIGFyZSBhbHNvIGF2YWlsYWJsZToKKwor ICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgPHRlcm0+ PG9wdGlvbj4tVjwvb3B0aW9uPjwvdGVybT4KKyAgICAgICA8dGVybT48b3B0aW9uPi0tdmVy c2lvbjwvb3B0aW9uPjwvdGVybT4KKyAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+ CisgICAgICAgUHJpbnQgdGhlIDxhcHBsaWNhdGlvbj5wZ19zdWJzY3JpYmVyPC9hcHBsaWNh dGlvbj4gdmVyc2lvbiBhbmQgZXhpdC4KKyAgICAgICA8L3BhcmE+CisgICAgICAgPC9saXN0 aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgPHZhcmxpc3RlbnRyeT4KKyAg ICAgICA8dGVybT48b3B0aW9uPi0/PC9vcHRpb24+PC90ZXJtPgorICAgICAgIDx0ZXJtPjxv cHRpb24+LS1oZWxwPC9vcHRpb24+PC90ZXJtPgorICAgICAgIDxsaXN0aXRlbT4KKyAgICAg ICA8cGFyYT4KKyAgICAgICBTaG93IGhlbHAgYWJvdXQgPGFwcGxpY2F0aW9uPnBnX3N1YnNj cmliZXI8L2FwcGxpY2F0aW9uPiBjb21tYW5kCisgICAgICAgbGluZSBhcmd1bWVudHMsIGFu ZCBleGl0LgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zh cmxpc3RlbnRyeT4KKworICAgIDwvdmFyaWFibGVsaXN0PgorICAgPC9wYXJhPgorCisgPC9y ZWZzZWN0MT4KKworIDxyZWZzZWN0MT4KKyAgPHRpdGxlPk5vdGVzPC90aXRsZT4KKworICA8 cGFyYT4KKyAgIFRoZSB0cmFuc2Zvcm1hdGlvbiBwcm9jZWVkcyBpbiB0aGUgZm9sbG93aW5n IHN0ZXBzOgorICA8L3BhcmE+CisKKyAgPHByb2NlZHVyZT4KKyAgIDxzdGVwPgorICAgIDxw YXJhPgorICAgICA8YXBwbGljYXRpb24+cGdfc3Vic2NyaWJlcjwvYXBwbGljYXRpb24+IGNo ZWNrcyBpZiB0aGUgZ2l2ZW4gdGFyZ2V0IGRhdGEKKyAgICAgZGlyZWN0b3J5IGhhcyB0aGUg c2FtZSBzeXN0ZW0gaWRlbnRpZmllciB0aGFuIHRoZSBzb3VyY2UgZGF0YSBkaXJlY3Rvcnku CisgICAgIFNpbmNlIGl0IHVzZXMgdGhlIHJlY292ZXJ5IHByb2Nlc3MgYXMgb25lIG9mIHRo ZSBzdGVwcywgaXQgc3RhcnRzIHRoZQorICAgICB0YXJnZXQgc2VydmVyIGFzIGEgcmVwbGlj YSBmcm9tIHRoZSBzb3VyY2Ugc2VydmVyLiBJZiB0aGUgc3lzdGVtCisgICAgIGlkZW50aWZp ZXIgaXMgbm90IHRoZSBzYW1lLCA8YXBwbGljYXRpb24+cGdfc3Vic2NyaWJlcjwvYXBwbGlj YXRpb24+IHdpbGwKKyAgICAgdGVybWluYXRlIHdpdGggYW4gZXJyb3IuCisgICAgPC9wYXJh PgorICAgPC9zdGVwPgorCisgICA8c3RlcD4KKyAgICA8cGFyYT4KKyAgICAgPGFwcGxpY2F0 aW9uPnBnX3N1YnNjcmliZXI8L2FwcGxpY2F0aW9uPiBjaGVja3MgaWYgdGhlIHRhcmdldCBk YXRhCisgICAgIGRpcmVjdG9yeSBpcyB1c2VkIGJ5IGEgc3RhbmRieSBzZXJ2ZXIuIFN0b3Ag dGhlIHN0YW5kYnkgc2VydmVyIGlmIGl0IGlzCisgICAgIHJ1bm5pbmcuIE9uZSBvZiB0aGUg bmV4dCBzdGVwcyBpcyB0byBhZGQgc29tZSByZWNvdmVyeSBwYXJhbWV0ZXJzIHRoYXQKKyAg ICAgcmVxdWlyZXMgYSBzZXJ2ZXIgc3RhcnQuIFRoaXMgc3RlcCBhdm9pZHMgYW4gZXJyb3Iu CisgICAgPC9wYXJhPgorICAgPC9zdGVwPgorCisgICA8c3RlcD4KKyAgICA8cGFyYT4KKyAg ICAgPGFwcGxpY2F0aW9uPnBnX3N1YnNjcmliZXI8L2FwcGxpY2F0aW9uPiBjcmVhdGVzIG9u ZSByZXBsaWNhdGlvbiBzbG90IGZvcgorICAgICBlYWNoIHNwZWNpZmllZCBkYXRhYmFzZSBv biB0aGUgc291cmNlIHNlcnZlci4gVGhlIHJlcGxpY2F0aW9uIHNsb3QgbmFtZQorICAgICBj b250YWlucyBhIDxsaXRlcmFsPnBnX3N1YnNjcmliZXI8L2xpdGVyYWw+IHByZWZpeC4gVGhl c2UgcmVwbGljYXRpb24KKyAgICAgc2xvdHMgd2lsbCBiZSB1c2VkIGJ5IHRoZSBzdWJzY3Jp cHRpb25zIGluIGEgZnV0dXJlIHN0ZXAuICBBbm90aGVyCisgICAgIHJlcGxpY2F0aW9uIHNs b3QgaXMgdXNlZCB0byBnZXQgYSBjb25zaXN0ZW50IHN0YXJ0IGxvY2F0aW9uLiBUaGlzCisg ICAgIGNvbnNpc3RlbnQgTFNOIHdpbGwgYmUgdXNlZCBhcyBhIHN0b3BwaW5nIHBvaW50IGlu IHRoZSA8eHJlZgorICAgICBsaW5rZW5kPSJndWMtcmVjb3ZlcnktdGFyZ2V0LWxzbiIvPiBw YXJhbWV0ZXIgYW5kIGJ5IHRoZQorICAgICBzdWJzY3JpcHRpb25zIGFzIGEgcmVwbGljYXRp b24gc3RhcnRpbmcgcG9pbnQuIEl0IGd1YXJhbnRlZXMgdGhhdCBubworICAgICB0cmFuc2Fj dGlvbiB3aWxsIGJlIGxvc3QuCisgICAgPC9wYXJhPgorICAgPC9zdGVwPgorCisgICA8c3Rl cD4KKyAgICA8cGFyYT4KKyAgICAgPGFwcGxpY2F0aW9uPnBnX3N1YnNjcmliZXI8L2FwcGxp Y2F0aW9uPiB3cml0ZXMgcmVjb3ZlcnkgcGFyYW1ldGVycyBpbnRvCisgICAgIHRoZSB0YXJn ZXQgZGF0YSBkaXJlY3RvcnkgYW5kIHN0YXJ0IHRoZSB0YXJnZXQgc2VydmVyLiBJdCBzcGVj aWZpZXMgYSBMU04KKyAgICAgKGNvbnNpc3RlbnQgTFNOIHRoYXQgd2FzIG9idGFpbmVkIGlu IHRoZSBwcmV2aW91cyBzdGVwKSBvZiB3cml0ZS1haGVhZAorICAgICBsb2cgbG9jYXRpb24g dXAgdG8gd2hpY2ggcmVjb3Zlcnkgd2lsbCBwcm9jZWVkLiBJdCBhbHNvIHNwZWNpZmllcwor ICAgICA8bGl0ZXJhbD5wcm9tb3RlPC9saXRlcmFsPiBhcyB0aGUgYWN0aW9uIHRoYXQgdGhl IHNlcnZlciBzaG91bGQgdGFrZSBvbmNlCisgICAgIHRoZSByZWNvdmVyeSB0YXJnZXQgaXMg cmVhY2hlZC4gVGhpcyBzdGVwIGZpbmlzaGVzIG9uY2UgdGhlIHNlcnZlciBlbmRzCisgICAg IHN0YW5kYnkgbW9kZSBhbmQgaXMgYWNjZXB0aW5nIHJlYWQtd3JpdGUgb3BlcmF0aW9ucy4K KyAgICA8L3BhcmE+CisgICA8L3N0ZXA+CisKKyAgIDxzdGVwPgorICAgIDxwYXJhPgorICAg ICBOZXh0LCA8YXBwbGljYXRpb24+cGdfc3Vic2NyaWJlcjwvYXBwbGljYXRpb24+IGNyZWF0 ZXMgb25lIHB1YmxpY2F0aW9uCisgICAgIGZvciBlYWNoIHNwZWNpZmllZCBkYXRhYmFzZSBv biB0aGUgc291cmNlIHNlcnZlci4gRWFjaCBwdWJsaWNhdGlvbgorICAgICByZXBsaWNhdGVz IGNoYW5nZXMgZm9yIGFsbCB0YWJsZXMgaW4gdGhlIGRhdGFiYXNlLiBUaGUgcHVibGljYXRp b24gbmFtZQorICAgICBjb250YWlucyBhIDxsaXRlcmFsPnBnX3N1YnNjcmliZXI8L2xpdGVy YWw+IHByZWZpeC4gVGhlc2UgcHVibGljYXRpb24KKyAgICAgd2lsbCBiZSB1c2VkIGJ5IGEg Y29ycmVzcG9uZGluZyBzdWJzY3JpcHRpb24gaW4gYSBuZXh0IHN0ZXAuCisgICAgPC9wYXJh PgorICAgPC9zdGVwPgorCisgICA8c3RlcD4KKyAgICA8cGFyYT4KKyAgICAgPGFwcGxpY2F0 aW9uPnBnX3N1YnNjcmliZXI8L2FwcGxpY2F0aW9uPiBjcmVhdGVzIG9uZSBzdWJzY3JpcHRp b24gZm9yCisgICAgIGVhY2ggc3BlY2lmaWVkIGRhdGFiYXNlIG9uIHRoZSB0YXJnZXQgc2Vy dmVyLiBFYWNoIHN1YnNjcmlwdGlvbiBuYW1lCisgICAgIGNvbnRhaW5zIGEgPGxpdGVyYWw+ cGdfc3Vic2NyaWJlcjwvbGl0ZXJhbD4gcHJlZml4LiBUaGUgcmVwbGljYXRpb24gc2xvdAor ICAgICBuYW1lIGlzIGlkZW50aWNhbCB0byB0aGUgc3Vic2NyaXB0aW9uIG5hbWUuIEl0IGRv ZXMgbm90IGNvcHkgZXhpc3RpbmcgZGF0YQorICAgICBmcm9tIHRoZSBzb3VyY2Ugc2VydmVy LiBJdCBkb2VzIG5vdCBjcmVhdGUgYSByZXBsaWNhdGlvbiBzbG90LiBJbnN0ZWFkLCBpdAor ICAgICB1c2VzIHRoZSByZXBsaWNhdGlvbiBzbG90IHRoYXQgd2FzIGNyZWF0ZWQgaW4gYSBw cmV2aW91cyBzdGVwLiBUaGUKKyAgICAgc3Vic2NyaXB0aW9uIGlzIGNyZWF0ZWQgYnV0IGl0 IGlzIG5vdCBlbmFibGVkIHlldC4gVGhlIHJlYXNvbiBpcyB0aGUKKyAgICAgcmVwbGljYXRp b24gcHJvZ3Jlc3MgbXVzdCBiZSBzZXQgdG8gdGhlIGNvbnNpc3RlbnQgTFNOIGJ1dCByZXBs aWNhdGlvbgorICAgICBvcmlnaW4gbmFtZSBjb250YWlucyB0aGUgc3Vic2NyaXB0aW9uIG9p ZCBpbiBpdHMgbmFtZS4gSGVuY2UsIHRoZQorICAgICBzdWJzY3JpcHRpb24gd2lsbCBiZSBl bmFibGVkIGluIGEgc2VwYXJhdGUgc3RlcC4KKyAgICA8L3BhcmE+CisgICA8L3N0ZXA+CisK KyAgIDxzdGVwPgorICAgIDxwYXJhPgorICAgICA8YXBwbGljYXRpb24+cGdfc3Vic2NyaWJl cjwvYXBwbGljYXRpb24+IHNldHMgdGhlIHJlcGxpY2F0aW9uIHByb2dyZXNzIHRvCisgICAg IHRoZSBjb25zaXN0ZW50IExTTiB0aGF0IHdhcyBvYnRhaW5lZCBpbiBhIHByZXZpb3VzIHN0 ZXAuIFdoZW4gdGhlIHRhcmdldAorICAgICBzZXJ2ZXIgc3RhcnRlZCB0aGUgcmVjb3Zlcnkg cHJvY2VzcywgaXQgY2F1Z2h0IHVwIHRvIHRoZSBjb25zaXN0ZW50IExTTi4KKyAgICAgVGhp cyBpcyB0aGUgZXhhY3QgTFNOIHRvIGJlIHVzZWQgYXMgYSBpbml0aWFsIGxvY2F0aW9uIGZv ciBlYWNoCisgICAgIHN1YnNjcmlwdGlvbi4KKyAgICA8L3BhcmE+CisgICA8L3N0ZXA+CisK KyAgIDxzdGVwPgorICAgIDxwYXJhPgorICAgICBGaW5hbGx5LCA8YXBwbGljYXRpb24+cGdf c3Vic2NyaWJlcjwvYXBwbGljYXRpb24+IGVuYWJsZXMgdGhlIHN1YnNjcmlwdGlvbgorICAg ICBmb3IgZWFjaCBzcGVjaWZpZWQgZGF0YWJhc2Ugb24gdGhlIHRhcmdldCBzZXJ2ZXIuIFRo ZSBzdWJzY3JpcHRpb24gc3RhcnRzCisgICAgIHN0cmVhbWluZyBmcm9tIHRoZSBjb25zaXN0 ZW50IExTTi4KKyAgICA8L3BhcmE+CisgICA8L3N0ZXA+CisKKyAgIDxzdGVwPgorICAgIDxw YXJhPgorICAgICA8YXBwbGljYXRpb24+cGdfc3Vic2NyaWJlcjwvYXBwbGljYXRpb24+IHJl bW92ZXMgdGhlIGFkZGl0aW9uYWwgcmVwbGljYXRpb24KKyAgICAgc2xvdCB0aGF0IHdhcyB1 c2VkIHRvIGdldCB0aGUgY29uc2lzdGVudCBMU04gb24gdGhlIHNvdXJjZSBzZXJ2ZXIuCisg ICAgPC9wYXJhPgorICAgPC9zdGVwPgorCisgICA8c3RlcD4KKyAgICA8cGFyYT4KKyAgICAg PGFwcGxpY2F0aW9uPnBnX3N1YnNjcmliZXI8L2FwcGxpY2F0aW9uPiBzdG9wcyB0aGUgdGFy Z2V0IHNlcnZlciB0byBjaGFuZ2UKKyAgICAgaXRzIHN5c3RlbSBpZGVudGlmaWVyLgorICAg IDwvcGFyYT4KKyAgIDwvc3RlcD4KKyAgPC9wcm9jZWR1cmU+CisgPC9yZWZzZWN0MT4KKwor IDxyZWZzZWN0MT4KKyAgPHRpdGxlPkV4YW1wbGVzPC90aXRsZT4KKworICA8cGFyYT4KKyAg IFRvIGNyZWF0ZSBhIGxvZ2ljYWwgcmVwbGljYSBmb3IgZGF0YWJhc2VzIDxsaXRlcmFsPmhy PC9saXRlcmFsPiBhbmQKKyAgIDxsaXRlcmFsPmZpbmFuY2U8L2xpdGVyYWw+IGZyb20gYSBz dGFuZGJ5IHNlcnZlciBhdCA8bGl0ZXJhbD5mb288L2xpdGVyYWw+OgorPHNjcmVlbj4KKzxw cm9tcHQ+JDwvcHJvbXB0PiA8dXNlcmlucHV0PnBnX3N1YnNjcmliZXIgLUQgL3Vzci9sb2Nh bC9wZ3NxbC9kYXRhIC1QICJob3N0PWZvbyIgLVMgImhvc3Q9bG9jYWxob3N0IiAtZCBociAt ZCBmaW5hbmNlPC91c2VyaW5wdXQ+Cis8L3NjcmVlbj4KKyAgPC9wYXJhPgorCisgPC9yZWZz ZWN0MT4KKworIDxyZWZzZWN0MT4KKyAgPHRpdGxlPlNlZSBBbHNvPC90aXRsZT4KKworICA8 c2ltcGxlbGlzdCB0eXBlPSJpbmxpbmUiPgorICAgPG1lbWJlcj48eHJlZiBsaW5rZW5kPSJh cHAtcGdiYXNlYmFja3VwIi8+PC9tZW1iZXI+CisgIDwvc2ltcGxlbGlzdD4KKyA8L3JlZnNl Y3QxPgorCis8L3JlZmVudHJ5PgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZmVyZW5j ZS5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZmVyZW5jZS5zZ21sCmluZGV4IGFhOTRmNmFkZjYu LjI2NmY0ZTUxNWEgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWZlcmVuY2Uuc2dtbAor KysgYi9kb2Mvc3JjL3NnbWwvcmVmZXJlbmNlLnNnbWwKQEAgLTI4NSw2ICsyODUsNyBAQAog ICAgJnBnQ3RsOwogICAgJnBnUmVzZXR3YWw7CiAgICAmcGdSZXdpbmQ7CisgICAmcGdTdWJz Y3JpYmVyOwogICAgJnBndGVzdGZzeW5jOwogICAgJnBndGVzdHRpbWluZzsKICAgICZwZ3Vw Z3JhZGU7CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2Jhc2ViYWNrdXAvLmdpdGlnbm9yZSBi L3NyYy9iaW4vcGdfYmFzZWJhY2t1cC8uZ2l0aWdub3JlCmluZGV4IDI2MDQ4YmRiZDguLjBl NTM4NGExZDUgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfYmFzZWJhY2t1cC8uZ2l0aWdub3Jl CisrKyBiL3NyYy9iaW4vcGdfYmFzZWJhY2t1cC8uZ2l0aWdub3JlCkBAIC0xLDUgKzEsNiBA QAogL3BnX2Jhc2ViYWNrdXAKIC9wZ19yZWNlaXZld2FsCiAvcGdfcmVjdmxvZ2ljYWwKKy9w Z19zdWJzY3JpYmVyCiAKIC90bXBfY2hlY2svCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2Jh c2ViYWNrdXAvTWFrZWZpbGUgYi9zcmMvYmluL3BnX2Jhc2ViYWNrdXAvTWFrZWZpbGUKaW5k ZXggYWJmYjY0NDBlYy4uZjYyODFiNzY3NiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19iYXNl YmFja3VwL01ha2VmaWxlCisrKyBiL3NyYy9iaW4vcGdfYmFzZWJhY2t1cC9NYWtlZmlsZQpA QCAtNDQsNyArNDQsNyBAQCBCQk9CSlMgPSBcCiAJYmJzdHJlYW1lcl90YXIubyBcCiAJYmJz dHJlYW1lcl96c3RkLm8KIAotYWxsOiBwZ19iYXNlYmFja3VwIHBnX3JlY2VpdmV3YWwgcGdf cmVjdmxvZ2ljYWwKK2FsbDogcGdfYmFzZWJhY2t1cCBwZ19yZWNlaXZld2FsIHBnX3JlY3Zs b2dpY2FsIHBnX3N1YnNjcmliZXIKIAogcGdfYmFzZWJhY2t1cDogJChCQk9CSlMpICQoT0JK UykgfCBzdWJtYWtlLWxpYnBxIHN1Ym1ha2UtbGlicGdwb3J0IHN1Ym1ha2UtbGlicGdmZXV0 aWxzCiAJJChDQykgJChDRkxBR1MpICQoQkJPQkpTKSAkKE9CSlMpICQoTERGTEFHUykgJChM REZMQUdTX0VYKSAkKExJQlMpIC1vICRAJChYKQpAQCAtNTUsMTAgKzU1LDE0IEBAIHBnX3Jl Y2VpdmV3YWw6IHBnX3JlY2VpdmV3YWwubyAkKE9CSlMpIHwgc3VibWFrZS1saWJwcSBzdWJt YWtlLWxpYnBncG9ydCBzdWJtYWtlCiBwZ19yZWN2bG9naWNhbDogcGdfcmVjdmxvZ2ljYWwu byAkKE9CSlMpIHwgc3VibWFrZS1saWJwcSBzdWJtYWtlLWxpYnBncG9ydCBzdWJtYWtlLWxp YnBnZmV1dGlscwogCSQoQ0MpICQoQ0ZMQUdTKSBwZ19yZWN2bG9naWNhbC5vICQoT0JKUykg JChMREZMQUdTKSAkKExERkxBR1NfRVgpICQoTElCUykgLW8gJEAkKFgpCiAKK3BnX3N1YnNj cmliZXI6ICQoV0lOMzJSRVMpIHBnX3N1YnNjcmliZXIubyB8IHN1Ym1ha2UtbGlicHEgc3Vi bWFrZS1saWJwZ3BvcnQgc3VibWFrZS1saWJwZ2ZldXRpbHMKKwkkKENDKSAkKENGTEFHUykg JF4gJChMREZMQUdTKSAkKExERkxBR1NfRVgpICQoTElCUykgLW8gJEAkKFgpCisKIGluc3Rh bGw6IGFsbCBpbnN0YWxsZGlycwogCSQoSU5TVEFMTF9QUk9HUkFNKSBwZ19iYXNlYmFja3Vw JChYKSAnJChERVNURElSKSQoYmluZGlyKS9wZ19iYXNlYmFja3VwJChYKScKIAkkKElOU1RB TExfUFJPR1JBTSkgcGdfcmVjZWl2ZXdhbCQoWCkgJyQoREVTVERJUikkKGJpbmRpcikvcGdf cmVjZWl2ZXdhbCQoWCknCiAJJChJTlNUQUxMX1BST0dSQU0pIHBnX3JlY3Zsb2dpY2FsJChY KSAnJChERVNURElSKSQoYmluZGlyKS9wZ19yZWN2bG9naWNhbCQoWCknCisJJChJTlNUQUxM X1BST0dSQU0pIHBnX3N1YnNjcmliZXIkKFgpICckKERFU1RESVIpJChiaW5kaXIpL3BnX3N1 YnNjcmliZXIkKFgpJwogCiBpbnN0YWxsZGlyczoKIAkkKE1LRElSX1ApICckKERFU1RESVIp JChiaW5kaXIpJwpAQCAtNjcsMTAgKzcxLDEyIEBAIHVuaW5zdGFsbDoKIAlybSAtZiAnJChE RVNURElSKSQoYmluZGlyKS9wZ19iYXNlYmFja3VwJChYKScKIAlybSAtZiAnJChERVNURElS KSQoYmluZGlyKS9wZ19yZWNlaXZld2FsJChYKScKIAlybSAtZiAnJChERVNURElSKSQoYmlu ZGlyKS9wZ19yZWN2bG9naWNhbCQoWCknCisJcm0gLWYgJyQoREVTVERJUikkKGJpbmRpcikv cGdfc3Vic2NyaWJlciQoWCknCiAKIGNsZWFuIGRpc3RjbGVhbjoKIAlybSAtZiBwZ19iYXNl YmFja3VwJChYKSBwZ19yZWNlaXZld2FsJChYKSBwZ19yZWN2bG9naWNhbCQoWCkgXAogCQkk KEJCT0JKUykgcGdfcmVjZWl2ZXdhbC5vIHBnX3JlY3Zsb2dpY2FsLm8gXAorCQlwZ19zdWJz Y3JpYmVyJChYKSBwZ19zdWJzY3JpYmVyLm8gXAogCQkkKE9CSlMpCiAJcm0gLXJmIHRtcF9j aGVjawogCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2Jhc2ViYWNrdXAvbWVzb24uYnVpbGQg Yi9zcmMvYmluL3BnX2Jhc2ViYWNrdXAvbWVzb24uYnVpbGQKaW5kZXggZjdlNjBlNjY3MC4u Y2NmZDdiYjdhNSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19iYXNlYmFja3VwL21lc29uLmJ1 aWxkCisrKyBiL3NyYy9iaW4vcGdfYmFzZWJhY2t1cC9tZXNvbi5idWlsZApAQCAtNzUsNiAr NzUsMjMgQEAgcGdfcmVjdmxvZ2ljYWwgPSBleGVjdXRhYmxlKCdwZ19yZWN2bG9naWNhbCcs CiApCiBiaW5fdGFyZ2V0cyArPSBwZ19yZWN2bG9naWNhbAogCitwZ19zdWJzY3JpYmVyX3Nv dXJjZXMgPSBmaWxlcygKKyAgJ3BnX3N1YnNjcmliZXIuYycKKykKKworaWYgaG9zdF9zeXN0 ZW0gPT0gJ3dpbmRvd3MnCisgIHBnX3N1YnNjcmliZXJfc291cmNlcyArPSByY19iaW5fZ2Vu LnByb2Nlc3Mod2luMzJ2ZXJfcmMsIGV4dHJhX2FyZ3M6IFsKKwknLS1OQU1FJywgJ3BnX3N1 YnNjcmliZXInLAorCSctLUZJTEVERVNDJywgJ3BnX3N1YnNjcmliZXIgLSBjcmVhdGUgYSBu ZXcgbG9naWNhbCByZXBsaWNhIGZyb20gYSBzdGFuZGJ5IHNlcnZlcicsXSkKK2VuZGlmCisK K3BnX3N1YnNjcmliZXIgPSBleGVjdXRhYmxlKCdwZ19zdWJzY3JpYmVyJywKKyAgcGdfc3Vi c2NyaWJlcl9zb3VyY2VzLAorICBkZXBlbmRlbmNpZXM6IFtmcm9udGVuZF9jb2RlLCBsaWJw cV0sCisgIGt3YXJnczogZGVmYXVsdF9iaW5fYXJncywKKykKK2Jpbl90YXJnZXRzICs9IHBn X3N1YnNjcmliZXIKKwogdGVzdHMgKz0gewogICAnbmFtZSc6ICdwZ19iYXNlYmFja3VwJywK ICAgJ3NkJzogbWVzb24uY3VycmVudF9zb3VyY2VfZGlyKCksCkBAIC04OSw2ICsxMDYsOCBA QCB0ZXN0cyArPSB7CiAgICAgICAndC8wMTFfaW5fcGxhY2VfdGFibGVzcGFjZS5wbCcsCiAg ICAgICAndC8wMjBfcGdfcmVjZWl2ZXdhbC5wbCcsCiAgICAgICAndC8wMzBfcGdfcmVjdmxv Z2ljYWwucGwnLAorICAgICAgJ3QvMDQwX3BnX3N1YnNjcmliZXIucGwnLAorICAgICAgJ3Qv MDQxX3BnX3N1YnNjcmliZXJfc3RhbmRieS5wbCcsCiAgICAgXSwKICAgfSwKIH0KZGlmZiAt LWdpdCBhL3NyYy9iaW4vcGdfYmFzZWJhY2t1cC9wZ19zdWJzY3JpYmVyLmMgYi9zcmMvYmlu L3BnX2Jhc2ViYWNrdXAvcGdfc3Vic2NyaWJlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAuLmU5OThjMjlmOWUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmlu L3BnX2Jhc2ViYWNrdXAvcGdfc3Vic2NyaWJlci5jCkBAIC0wLDAgKzEsMTY1NyBAQAorLyot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogcGdfc3Vic2NyaWJlci5jCisgKgkgIENyZWF0 ZSBhIG5ldyBsb2dpY2FsIHJlcGxpY2EgZnJvbSBhIHN0YW5kYnkgc2VydmVyCisgKgorICog Q29weXJpZ2h0IChDKSAyMDI0LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91 cAorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkJc3JjL2Jpbi9wZ19zdWJzY3JpYmVyL3Bn X3N1YnNjcmliZXIuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaW5jbHVk ZSAicG9zdGdyZXNfZmUuaCIKKworI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHN5 cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDxzeXMvd2FpdC5o PgorI2luY2x1ZGUgPHRpbWUuaD4KKworI2luY2x1ZGUgImFjY2Vzcy94bG9nZGVmcy5oIgor I2luY2x1ZGUgImNhdGFsb2cvcGdfY29udHJvbC5oIgorI2luY2x1ZGUgImNvbW1vbi9jb25u ZWN0LmgiCisjaW5jbHVkZSAiY29tbW9uL2NvbnRyb2xkYXRhX3V0aWxzLmgiCisjaW5jbHVk ZSAiY29tbW9uL2ZpbGVfcGVybS5oIgorI2luY2x1ZGUgImNvbW1vbi9maWxlX3V0aWxzLmgi CisjaW5jbHVkZSAiY29tbW9uL2xvZ2dpbmcuaCIKKyNpbmNsdWRlICJmZV91dGlscy9yZWNv dmVyeV9nZW4uaCIKKyNpbmNsdWRlICJmZV91dGlscy9zaW1wbGVfbGlzdC5oIgorI2luY2x1 ZGUgImdldG9wdF9sb25nLmgiCisjaW5jbHVkZSAidXRpbHMvcGlkZmlsZS5oIgorCisjZGVm aW5lCVBHU19PVVRQVVRfRElSCSJwZ19zdWJzY3JpYmVyX291dHB1dC5kIgorCit0eXBlZGVm IHN0cnVjdCBMb2dpY2FsUmVwSW5mbworeworCU9pZAkJCW9pZDsJCQkvKiBkYXRhYmFzZSBP SUQgKi8KKwljaGFyCSAgICpkYm5hbWU7CQkJLyogZGF0YWJhc2UgbmFtZSAqLworCWNoYXIJ ICAgKnB1YmNvbm5pbmZvOwkvKiBwdWJsaWNhdGlvbiBjb25uZWN0aW9uIHN0cmluZyBmb3Ig bG9naWNhbAorCQkJCQkJCQkgKiByZXBsaWNhdGlvbiAqLworCWNoYXIJICAgKnN1YmNvbm5p bmZvOwkvKiBzdWJzY3JpcHRpb24gY29ubmVjdGlvbiBzdHJpbmcgZm9yIGxvZ2ljYWwKKwkJ CQkJCQkJICogcmVwbGljYXRpb24gKi8KKwljaGFyCSAgICpwdWJuYW1lOwkJLyogcHVibGlj YXRpb24gbmFtZSAqLworCWNoYXIJICAgKnN1Ym5hbWU7CQkvKiBzdWJzY3JpcHRpb24gbmFt ZSAoYWxzbyByZXBsaWNhdGlvbiBzbG90CisJCQkJCQkJCSAqIG5hbWUpICovCisKKwlib29s CQltYWRlX3JlcGxzbG90OwkvKiByZXBsaWNhdGlvbiBzbG90IHdhcyBjcmVhdGVkICovCisJ Ym9vbAkJbWFkZV9wdWJsaWNhdGlvbjsJLyogcHVibGljYXRpb24gd2FzIGNyZWF0ZWQgKi8K Kwlib29sCQltYWRlX3N1YnNjcmlwdGlvbjsJLyogc3Vic2NyaXB0aW9uIHdhcyBjcmVhdGVk ICovCit9IExvZ2ljYWxSZXBJbmZvOworCitzdGF0aWMgdm9pZCBjbGVhbnVwX29iamVjdHNf YXRleGl0KHZvaWQpOworc3RhdGljIHZvaWQgdXNhZ2UoKTsKK3N0YXRpYyBjaGFyICpnZXRf YmFzZV9jb25uaW5mbyhjaGFyICpjb25uaW5mbywgY2hhciAqZGJuYW1lLAorCQkJCQkJCSAg IGNvbnN0IGNoYXIgKm5vZGVyb2xlKTsKK3N0YXRpYyBib29sIGdldF9leGVjX3BhdGgoY29u c3QgY2hhciAqcGF0aCk7CitzdGF0aWMgYm9vbCBjaGVja19kYXRhX2RpcmVjdG9yeShjb25z dCBjaGFyICpkYXRhZGlyKTsKK3N0YXRpYyBjaGFyICpjb25jYXRfY29ubmluZm9fZGJuYW1l KGNvbnN0IGNoYXIgKmNvbm5pbmZvLCBjb25zdCBjaGFyICpkYm5hbWUpOworc3RhdGljIExv Z2ljYWxSZXBJbmZvICpzdG9yZV9wdWJfc3ViX2luZm8oY29uc3QgY2hhciAqcHViX2Jhc2Vf Y29ubmluZm8sIGNvbnN0IGNoYXIgKnN1Yl9iYXNlX2Nvbm5pbmZvKTsKK3N0YXRpYyBQR2Nv bm4gKmNvbm5lY3RfZGF0YWJhc2UoY29uc3QgY2hhciAqY29ubmluZm8pOworc3RhdGljIHZv aWQgZGlzY29ubmVjdF9kYXRhYmFzZShQR2Nvbm4gKmNvbm4pOworc3RhdGljIHVpbnQ2NCBn ZXRfc3lzaWRfZnJvbV9jb25uKGNvbnN0IGNoYXIgKmNvbm5pbmZvKTsKK3N0YXRpYyB1aW50 NjQgZ2V0X2NvbnRyb2xfZnJvbV9kYXRhZGlyKGNvbnN0IGNoYXIgKmRhdGFkaXIpOworc3Rh dGljIHZvaWQgbW9kaWZ5X3N5c2lkKGNvbnN0IGNoYXIgKnBnX3Jlc2V0d2FsX3BhdGgsIGNv bnN0IGNoYXIgKmRhdGFkaXIpOworc3RhdGljIGNoYXIgKnVzZV9wcmltYXJ5X3Nsb3RfbmFt ZSh2b2lkKTsKK3N0YXRpYyBib29sIGNyZWF0ZV9hbGxfbG9naWNhbF9yZXBsaWNhdGlvbl9z bG90cyhMb2dpY2FsUmVwSW5mbyAqZGJpbmZvKTsKK3N0YXRpYyBjaGFyICpjcmVhdGVfbG9n aWNhbF9yZXBsaWNhdGlvbl9zbG90KFBHY29ubiAqY29ubiwgTG9naWNhbFJlcEluZm8gKmRi aW5mbywKKwkJCQkJCQkJCQkJIGNoYXIgKnNsb3RfbmFtZSk7CitzdGF0aWMgdm9pZCBkcm9w X3JlcGxpY2F0aW9uX3Nsb3QoUEdjb25uICpjb25uLCBMb2dpY2FsUmVwSW5mbyAqZGJpbmZv LCBjb25zdCBjaGFyICpzbG90X25hbWUpOworc3RhdGljIHZvaWQgcGdfY3RsX3N0YXR1cyhj b25zdCBjaGFyICpwZ19jdGxfY21kLCBpbnQgcmMsIGludCBhY3Rpb24pOworc3RhdGljIHZv aWQgd2FpdF9mb3JfZW5kX3JlY292ZXJ5KGNvbnN0IGNoYXIgKmNvbm5pbmZvKTsKK3N0YXRp YyB2b2lkIGNyZWF0ZV9wdWJsaWNhdGlvbihQR2Nvbm4gKmNvbm4sIExvZ2ljYWxSZXBJbmZv ICpkYmluZm8pOworc3RhdGljIHZvaWQgZHJvcF9wdWJsaWNhdGlvbihQR2Nvbm4gKmNvbm4s IExvZ2ljYWxSZXBJbmZvICpkYmluZm8pOworc3RhdGljIHZvaWQgY3JlYXRlX3N1YnNjcmlw dGlvbihQR2Nvbm4gKmNvbm4sIExvZ2ljYWxSZXBJbmZvICpkYmluZm8pOworc3RhdGljIHZv aWQgZHJvcF9zdWJzY3JpcHRpb24oUEdjb25uICpjb25uLCBMb2dpY2FsUmVwSW5mbyAqZGJp bmZvKTsKK3N0YXRpYyB2b2lkIHNldF9yZXBsaWNhdGlvbl9wcm9ncmVzcyhQR2Nvbm4gKmNv bm4sIExvZ2ljYWxSZXBJbmZvICpkYmluZm8sIGNvbnN0IGNoYXIgKmxzbik7CitzdGF0aWMg dm9pZCBlbmFibGVfc3Vic2NyaXB0aW9uKFBHY29ubiAqY29ubiwgTG9naWNhbFJlcEluZm8g KmRiaW5mbyk7CisKKyNkZWZpbmUJVVNFQ19QRVJfU0VDCTEwMDAwMDAKKyNkZWZpbmUJV0FJ VF9JTlRFUlZBTAkxCQkvKiAxIHNlY29uZCAqLworCisvKiBPcHRpb25zICovCitzdGF0aWMg Y29uc3QgY2hhciAqcHJvZ25hbWU7CisKK3N0YXRpYyBjaGFyICpzdWJzY3JpYmVyX2RpciA9 IE5VTEw7CitzdGF0aWMgY2hhciAqcHViX2Nvbm5pbmZvX3N0ciA9IE5VTEw7CitzdGF0aWMg Y2hhciAqc3ViX2Nvbm5pbmZvX3N0ciA9IE5VTEw7CitzdGF0aWMgU2ltcGxlU3RyaW5nTGlz dCBkYXRhYmFzZV9uYW1lcyA9IHtOVUxMLCBOVUxMfTsKK3N0YXRpYyBjaGFyICpwcmltYXJ5 X3Nsb3RfbmFtZSA9IE5VTEw7CitzdGF0aWMgYm9vbCBkcnlfcnVuID0gZmFsc2U7CisKK3N0 YXRpYyBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKKworc3RhdGljIGNoYXIgKnBnX2N0bF9wYXRo ID0gTlVMTDsKK3N0YXRpYyBjaGFyICpwZ19yZXNldHdhbF9wYXRoID0gTlVMTDsKKworc3Rh dGljIExvZ2ljYWxSZXBJbmZvICpkYmluZm87CitzdGF0aWMgaW50CW51bV9kYnMgPSAwOwor CitzdGF0aWMgY2hhciB0ZW1wX3JlcGxzbG90W05BTUVEQVRBTEVOXSA9IHswfTsKK3N0YXRp YyBib29sIG1hZGVfdHJhbnNpZW50X3JlcGxzbG90ID0gZmFsc2U7CisKK2VudW0gV2FpdFBN UmVzdWx0Cit7CisJUE9TVE1BU1RFUl9SRUFEWSwKKwlQT1NUTUFTVEVSX1NUQU5EQlksCisJ UE9TVE1BU1RFUl9TVElMTF9TVEFSVElORywKKwlQT1NUTUFTVEVSX0ZBSUxFRAorfTsKKwor CisvKgorICogQ2xlYW51cCBvYmplY3RzIHRoYXQgd2VyZSBjcmVhdGVkIGJ5IHBnX3N1YnNj cmliZXIgaWYgdGhlcmUgaXMgYW4gZXJyb3IuCisgKgorICogUmVwbGljYXRpb24gc2xvdHMs IHB1YmxpY2F0aW9ucyBhbmQgc3Vic2NyaXB0aW9ucyBhcmUgY3JlYXRlZC4gRGVwZW5kaW5n IG9uCisgKiB0aGUgc3RlcCBpdCBmYWlsZWQsIGl0IHNob3VsZCByZW1vdmUgdGhlIGFscmVh ZHkgY3JlYXRlZCBvYmplY3RzIGlmIGl0IGlzCisgKiBwb3NzaWJsZSAoc29tZXRpbWVzIGl0 IHdvbid0IHdvcmsgZHVlIHRvIGEgY29ubmVjdGlvbiBpc3N1ZSkuCisgKi8KK3N0YXRpYyB2 b2lkCitjbGVhbnVwX29iamVjdHNfYXRleGl0KHZvaWQpCit7CisJUEdjb25uCSAgICpjb25u OworCWludAkJCWk7CisKKwlpZiAoc3VjY2VzcykKKwkJcmV0dXJuOworCisJZm9yIChpID0g MDsgaSA8IG51bV9kYnM7IGkrKykKKwl7CisJCWlmIChkYmluZm9baV0ubWFkZV9zdWJzY3Jp cHRpb24pCisJCXsKKwkJCWNvbm4gPSBjb25uZWN0X2RhdGFiYXNlKGRiaW5mb1tpXS5zdWJj b25uaW5mbyk7CisJCQlpZiAoY29ubiAhPSBOVUxMKQorCQkJeworCQkJCWRyb3Bfc3Vic2Ny aXB0aW9uKGNvbm4sICZkYmluZm9baV0pOworCQkJCWRpc2Nvbm5lY3RfZGF0YWJhc2UoY29u bik7CisJCQl9CisJCX0KKworCQlpZiAoZGJpbmZvW2ldLm1hZGVfcHVibGljYXRpb24gfHwg ZGJpbmZvW2ldLm1hZGVfcmVwbHNsb3QpCisJCXsKKwkJCWNvbm4gPSBjb25uZWN0X2RhdGFi YXNlKGRiaW5mb1tpXS5wdWJjb25uaW5mbyk7CisJCQlpZiAoY29ubiAhPSBOVUxMKQorCQkJ eworCQkJCWlmIChkYmluZm9baV0ubWFkZV9wdWJsaWNhdGlvbikKKwkJCQkJZHJvcF9wdWJs aWNhdGlvbihjb25uLCAmZGJpbmZvW2ldKTsKKwkJCQlpZiAoZGJpbmZvW2ldLm1hZGVfcmVw bHNsb3QpCisJCQkJCWRyb3BfcmVwbGljYXRpb25fc2xvdChjb25uLCAmZGJpbmZvW2ldLCBO VUxMKTsKKwkJCQlkaXNjb25uZWN0X2RhdGFiYXNlKGNvbm4pOworCQkJfQorCQl9CisJfQor CisJaWYgKG1hZGVfdHJhbnNpZW50X3JlcGxzbG90KQorCXsKKwkJY29ubiA9IGNvbm5lY3Rf ZGF0YWJhc2UoZGJpbmZvWzBdLnB1YmNvbm5pbmZvKTsKKwkJaWYgKGNvbm4gIT0gTlVMTCkK KwkJeworCQkJZHJvcF9yZXBsaWNhdGlvbl9zbG90KGNvbm4sICZkYmluZm9bMF0sIHRlbXBf cmVwbHNsb3QpOworCQkJZGlzY29ubmVjdF9kYXRhYmFzZShjb25uKTsKKwkJfQorCX0KK30K Kworc3RhdGljIHZvaWQKK3VzYWdlKHZvaWQpCit7CisJcHJpbnRmKF8oIiVzIGNyZWF0ZXMg YSBuZXcgbG9naWNhbCByZXBsaWNhIGZyb20gYSBzdGFuZGJ5IHNlcnZlci5cblxuIiksCisJ CSAgIHByb2duYW1lKTsKKwlwcmludGYoXygiVXNhZ2U6XG4iKSk7CisJcHJpbnRmKF8oIiAg JXMgW09QVElPTl0uLi5cbiIpLCBwcm9nbmFtZSk7CisJcHJpbnRmKF8oIlxuT3B0aW9uczpc biIpKTsKKwlwcmludGYoXygiIC1ELCAtLXBnZGF0YT1EQVRBRElSICAgICAgICAgICAgICAg IGxvY2F0aW9uIGZvciB0aGUgc3Vic2NyaWJlciBkYXRhIGRpcmVjdG9yeVxuIikpOworCXBy aW50ZihfKCIgLVAsIC0tcHVibGlzaGVyLWNvbm5pbmZvPUNPTk5JTkZPICAgcHVibGlzaGVy IGNvbm5lY3Rpb24gc3RyaW5nXG4iKSk7CisJcHJpbnRmKF8oIiAtUywgLS1zdWJzY3JpYmVy LWNvbm5pbmZvPUNPTk5JTkZPICBzdWJzY3JpYmVyIGNvbm5lY3Rpb24gc3RyaW5nXG4iKSk7 CisJcHJpbnRmKF8oIiAtZCwgLS1kYXRhYmFzZT1EQk5BTUUgICAgICAgICAgICAgICBkYXRh YmFzZSB0byBjcmVhdGUgYSBzdWJzY3JpcHRpb25cbiIpKTsKKwlwcmludGYoXygiIC1uLCAt LWRyeS1ydW4gICAgICAgICAgICAgICAgICAgICAgIHN0b3AgYmVmb3JlIG1vZGlmeWluZyBh bnl0aGluZ1xuIikpOworCXByaW50ZihfKCIgLXYsIC0tdmVyYm9zZSAgICAgICAgICAgICAg ICAgICAgICAgb3V0cHV0IHZlcmJvc2UgbWVzc2FnZXNcbiIpKTsKKwlwcmludGYoXygiIC1W LCAtLXZlcnNpb24gICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCB2ZXJzaW9uIGluZm9y bWF0aW9uLCB0aGVuIGV4aXRcbiIpKTsKKwlwcmludGYoXygiIC0/LCAtLWhlbHAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNob3cgdGhpcyBoZWxwLCB0aGVuIGV4aXRcbiIpKTsKKwlw cmludGYoXygiXG5SZXBvcnQgYnVncyB0byA8JXM+LlxuIiksIFBBQ0tBR0VfQlVHUkVQT1JU KTsKKwlwcmludGYoXygiJXMgaG9tZSBwYWdlOiA8JXM+XG4iKSwgUEFDS0FHRV9OQU1FLCBQ QUNLQUdFX1VSTCk7Cit9CisKKy8qCisgKiBWYWxpZGF0ZSBhIGNvbm5lY3Rpb24gc3RyaW5n LiBSZXR1cm5zIGEgYmFzZSBjb25uZWN0aW9uIHN0cmluZyB0aGF0IGlzIGEKKyAqIGNvbm5l Y3Rpb24gc3RyaW5nIHdpdGhvdXQgYSBkYXRhYmFzZSBuYW1lIHBsdXMgYSBmYWxsYmFjayBh cHBsaWNhdGlvbiBuYW1lLgorICogU2luY2Ugd2UgbWlnaHQgcHJvY2VzcyBtdWx0aXBsZSBk YXRhYmFzZXMsIGVhY2ggZGF0YWJhc2UgbmFtZSB3aWxsIGJlCisgKiBhcHBlbmRlZCB0byB0 aGlzIGJhc2UgY29ubmVjdGlvbiBzdHJpbmcgdG8gcHJvdmlkZSBhIGZpbmFsIGNvbm5lY3Rp b24gc3RyaW5nLgorICogSWYgdGhlIHNlY29uZCBhcmd1bWVudCAoZGJuYW1lKSBpcyBub3Qg bnVsbCwgcmV0dXJucyBkYm5hbWUgaWYgdGhlIHByb3ZpZGVkCisgKiBjb25uZWN0aW9uIHN0 cmluZyBjb250YWlucyBpdC4gSWYgb3B0aW9uIC0tZGF0YWJhc2UgaXMgbm90IHByb3ZpZGVk LCB1c2VzCisgKiBkYm5hbWUgYXMgdGhlIG9ubHkgZGF0YWJhc2UgdG8gc2V0dXAgdGhlIGxv Z2ljYWwgcmVwbGljYS4KKyAqIEl0IGlzIHRoZSBjYWxsZXIncyByZXNwb25zaWJpbGl0eSB0 byBmcmVlIHRoZSByZXR1cm5lZCBjb25uZWN0aW9uIHN0cmluZyBhbmQKKyAqIGRibmFtZS4K KyAqLworc3RhdGljIGNoYXIgKgorZ2V0X2Jhc2VfY29ubmluZm8oY2hhciAqY29ubmluZm8s IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqbm9kZXJvbGUpCit7CisJUFFFeHBCdWZmZXIg YnVmID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKKwlQUWNvbm5pbmZvT3B0aW9uICpjb25uX29w dHMgPSBOVUxMOworCVBRY29ubmluZm9PcHRpb24gKmNvbm5fb3B0OworCWNoYXIJICAgKmVy cm1zZyA9IE5VTEw7CisJY2hhcgkgICAqcmV0OworCWludAkJCWk7CisKKwlwZ19sb2dfaW5m bygidmFsaWRhdGluZyBjb25uZWN0aW9uIHN0cmluZyBvbiAlcyIsIG5vZGVyb2xlKTsKKwor CWNvbm5fb3B0cyA9IFBRY29ubmluZm9QYXJzZShjb25uaW5mbywgJmVycm1zZyk7CisJaWYg KGNvbm5fb3B0cyA9PSBOVUxMKQorCXsKKwkJcGdfbG9nX2Vycm9yKCJjb3VsZCBub3QgcGFy c2UgY29ubmVjdGlvbiBzdHJpbmc6ICVzIiwgZXJybXNnKTsKKwkJcmV0dXJuIE5VTEw7CisJ fQorCisJaSA9IDA7CisJZm9yIChjb25uX29wdCA9IGNvbm5fb3B0czsgY29ubl9vcHQtPmtl eXdvcmQgIT0gTlVMTDsgY29ubl9vcHQrKykKKwl7CisJCWlmIChzdHJjbXAoY29ubl9vcHQt PmtleXdvcmQsICJkYm5hbWUiKSA9PSAwICYmIGNvbm5fb3B0LT52YWwgIT0gTlVMTCkKKwkJ eworCQkJaWYgKGRibmFtZSkKKwkJCQlkYm5hbWUgPSBwZ19zdHJkdXAoY29ubl9vcHQtPnZh bCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChjb25uX29wdC0+dmFsICE9IE5VTEwg JiYgY29ubl9vcHQtPnZhbFswXSAhPSAnXDAnKQorCQl7CisJCQlpZiAoaSA+IDApCisJCQkJ YXBwZW5kUFFFeHBCdWZmZXJDaGFyKGJ1ZiwgJyAnKTsKKwkJCWFwcGVuZFBRRXhwQnVmZmVy KGJ1ZiwgIiVzPSVzIiwgY29ubl9vcHQtPmtleXdvcmQsIGNvbm5fb3B0LT52YWwpOworCQkJ aSsrOworCQl9CisJfQorCisJaWYgKGkgPiAwKQorCQlhcHBlbmRQUUV4cEJ1ZmZlckNoYXIo YnVmLCAnICcpOworCWFwcGVuZFBRRXhwQnVmZmVyKGJ1ZiwgImZhbGxiYWNrX2FwcGxpY2F0 aW9uX25hbWU9JXMiLCBwcm9nbmFtZSk7CisKKwlyZXQgPSBwZ19zdHJkdXAoYnVmLT5kYXRh KTsKKworCWRlc3Ryb3lQUUV4cEJ1ZmZlcihidWYpOworCVBRY29ubmluZm9GcmVlKGNvbm5f b3B0cyk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogR2V0IHRoZSBhYnNvbHV0ZSBw YXRoIGZyb20gb3RoZXIgUG9zdGdyZVNRTCBiaW5hcmllcyAocGdfY3RsIGFuZAorICogcGdf cmVzZXR3YWwpIHRoYXQgaXMgdXNlZCBieSBpdC4KKyAqLworc3RhdGljIGJvb2wKK2dldF9l eGVjX3BhdGgoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlpbnQJCQlyYzsKKworCXBnX2N0bF9w YXRoID0gcGdfbWFsbG9jKE1BWFBHUEFUSCk7CisJcmMgPSBmaW5kX290aGVyX2V4ZWMocGF0 aCwgInBnX2N0bCIsCisJCQkJCQkgInBnX2N0bCAoUG9zdGdyZVNRTCkgIiBQR19WRVJTSU9O ICJcbiIsCisJCQkJCQkgcGdfY3RsX3BhdGgpOworCWlmIChyYyA8IDApCisJeworCQljaGFy CQlmdWxsX3BhdGhbTUFYUEdQQVRIXTsKKworCQlpZiAoZmluZF9teV9leGVjKHBhdGgsIGZ1 bGxfcGF0aCkgPCAwKQorCQkJc3RybGNweShmdWxsX3BhdGgsIHByb2duYW1lLCBzaXplb2Yo ZnVsbF9wYXRoKSk7CisJCWlmIChyYyA9PSAtMSkKKwkJCXBnX2xvZ19lcnJvcigiVGhlIHBy b2dyYW0gXCIlc1wiIGlzIG5lZWRlZCBieSAlcyBidXQgd2FzIG5vdCBmb3VuZCBpbiB0aGVc biIKKwkJCQkJCSAic2FtZSBkaXJlY3RvcnkgYXMgXCIlc1wiLlxuIgorCQkJCQkJICJDaGVj ayB5b3VyIGluc3RhbGxhdGlvbi4iLAorCQkJCQkJICJwZ19jdGwiLCBwcm9nbmFtZSwgZnVs bF9wYXRoKTsKKwkJZWxzZQorCQkJcGdfbG9nX2Vycm9yKCJUaGUgcHJvZ3JhbSBcIiVzXCIg d2FzIGZvdW5kIGJ5IFwiJXNcIlxuIgorCQkJCQkJICJidXQgd2FzIG5vdCB0aGUgc2FtZSB2 ZXJzaW9uIGFzICVzLlxuIgorCQkJCQkJICJDaGVjayB5b3VyIGluc3RhbGxhdGlvbi4iLAor CQkJCQkJICJwZ19jdGwiLCBmdWxsX3BhdGgsIHByb2duYW1lKTsKKwkJcmV0dXJuIGZhbHNl OworCX0KKworCXBnX2xvZ19kZWJ1ZygicGdfY3RsIHBhdGggaXM6ICVzIiwgcGdfY3RsX3Bh dGgpOworCisJcGdfcmVzZXR3YWxfcGF0aCA9IHBnX21hbGxvYyhNQVhQR1BBVEgpOworCXJj ID0gZmluZF9vdGhlcl9leGVjKHBhdGgsICJwZ19yZXNldHdhbCIsCisJCQkJCQkgInBnX3Jl c2V0d2FsIChQb3N0Z3JlU1FMKSAiIFBHX1ZFUlNJT04gIlxuIiwKKwkJCQkJCSBwZ19yZXNl dHdhbF9wYXRoKTsKKwlpZiAocmMgPCAwKQorCXsKKwkJY2hhcgkJZnVsbF9wYXRoW01BWFBH UEFUSF07CisKKwkJaWYgKGZpbmRfbXlfZXhlYyhwYXRoLCBmdWxsX3BhdGgpIDwgMCkKKwkJ CXN0cmxjcHkoZnVsbF9wYXRoLCBwcm9nbmFtZSwgc2l6ZW9mKGZ1bGxfcGF0aCkpOworCQlp ZiAocmMgPT0gLTEpCisJCQlwZ19sb2dfZXJyb3IoIlRoZSBwcm9ncmFtIFwiJXNcIiBpcyBu ZWVkZWQgYnkgJXMgYnV0IHdhcyBub3QgZm91bmQgaW4gdGhlXG4iCisJCQkJCQkgInNhbWUg ZGlyZWN0b3J5IGFzIFwiJXNcIi5cbiIKKwkJCQkJCSAiQ2hlY2sgeW91ciBpbnN0YWxsYXRp b24uIiwKKwkJCQkJCSAicGdfcmVzZXR3YWwiLCBwcm9nbmFtZSwgZnVsbF9wYXRoKTsKKwkJ ZWxzZQorCQkJcGdfbG9nX2Vycm9yKCJUaGUgcHJvZ3JhbSBcIiVzXCIgd2FzIGZvdW5kIGJ5 IFwiJXNcIlxuIgorCQkJCQkJICJidXQgd2FzIG5vdCB0aGUgc2FtZSB2ZXJzaW9uIGFzICVz LlxuIgorCQkJCQkJICJDaGVjayB5b3VyIGluc3RhbGxhdGlvbi4iLAorCQkJCQkJICJwZ19y ZXNldHdhbCIsIGZ1bGxfcGF0aCwgcHJvZ25hbWUpOworCQlyZXR1cm4gZmFsc2U7CisJfQor CisJcGdfbG9nX2RlYnVnKCJwZ19yZXNldHdhbCBwYXRoIGlzOiAlcyIsIHBnX3Jlc2V0d2Fs X3BhdGgpOworCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBJcyBpdCBhIGNsdXN0ZXIg ZGlyZWN0b3J5PyBUaGVzZSBhcmUgcHJlbGltaW5hcnkgY2hlY2tzLiBJdCBpcyBmYXIgZnJv bQorICogbWFraW5nIGFuIGFjY3VyYXRlIGNoZWNrLiBJZiBpdCBpcyBub3QgYSBjbG9uZSBm cm9tIHRoZSBwdWJsaXNoZXIsIGl0IHdpbGwKKyAqIGV2ZW50dWFsbHkgZmFpbCBpbiBhIGZ1 dHVyZSBzdGVwLgorICovCitzdGF0aWMgYm9vbAorY2hlY2tfZGF0YV9kaXJlY3RvcnkoY29u c3QgY2hhciAqZGF0YWRpcikKK3sKKwlzdHJ1Y3Qgc3RhdCBzdGF0YnVmOworCWNoYXIJCXZl cnNpb25maWxlW01BWFBHUEFUSF07CisKKwlwZ19sb2dfaW5mbygiY2hlY2tpbmcgaWYgZGly ZWN0b3J5IFwiJXNcIiBpcyBhIGNsdXN0ZXIgZGF0YSBkaXJlY3RvcnkiLAorCQkJCWRhdGFk aXIpOworCisJaWYgKHN0YXQoZGF0YWRpciwgJnN0YXRidWYpICE9IDApCisJeworCQlpZiAo ZXJybm8gPT0gRU5PRU5UKQorCQkJcGdfbG9nX2Vycm9yKCJkYXRhIGRpcmVjdG9yeSBcIiVz XCIgZG9lcyBub3QgZXhpc3QiLCBkYXRhZGlyKTsKKwkJZWxzZQorCQkJcGdfbG9nX2Vycm9y KCJjb3VsZCBub3QgYWNjZXNzIGRpcmVjdG9yeSBcIiVzXCI6ICVzIiwgZGF0YWRpciwgc3Ry ZXJyb3IoZXJybm8pKTsKKworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJc25wcmludGYodmVy c2lvbmZpbGUsIE1BWFBHUEFUSCwgIiVzL1BHX1ZFUlNJT04iLCBkYXRhZGlyKTsKKwlpZiAo c3RhdCh2ZXJzaW9uZmlsZSwgJnN0YXRidWYpICE9IDAgJiYgZXJybm8gPT0gRU5PRU5UKQor CXsKKwkJcGdfbG9nX2Vycm9yKCJkaXJlY3RvcnkgXCIlc1wiIGlzIG5vdCBhIGRhdGFiYXNl IGNsdXN0ZXIgZGlyZWN0b3J5IiwgZGF0YWRpcik7CisJCXJldHVybiBmYWxzZTsKKwl9CisK KwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIEFwcGVuZCBkYXRhYmFzZSBuYW1lIGludG8g YSBiYXNlIGNvbm5lY3Rpb24gc3RyaW5nLgorICoKKyAqIGRibmFtZSBpcyB0aGUgb25seSBw YXJhbWV0ZXIgdGhhdCBjaGFuZ2VzIHNvIGl0IGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgYmFz ZQorICogY29ubmVjdGlvbiBzdHJpbmcuIFRoaXMgZnVuY3Rpb24gY29uY2F0ZW5hdGVzIGRi bmFtZSB0byBidWlsZCBhICJyZWFsIgorICogY29ubmVjdGlvbiBzdHJpbmcuCisgKi8KK3N0 YXRpYyBjaGFyICoKK2NvbmNhdF9jb25uaW5mb19kYm5hbWUoY29uc3QgY2hhciAqY29ubmlu Zm8sIGNvbnN0IGNoYXIgKmRibmFtZSkKK3sKKwlQUUV4cEJ1ZmZlciBidWYgPSBjcmVhdGVQ UUV4cEJ1ZmZlcigpOworCWNoYXIJICAgKnJldDsKKworCUFzc2VydChjb25uaW5mbyAhPSBO VUxMKTsKKworCWFwcGVuZFBRRXhwQnVmZmVyU3RyKGJ1ZiwgY29ubmluZm8pOworCWFwcGVu ZFBRRXhwQnVmZmVyKGJ1ZiwgIiBkYm5hbWU9JXMiLCBkYm5hbWUpOworCisJcmV0ID0gcGdf c3RyZHVwKGJ1Zi0+ZGF0YSk7CisJZGVzdHJveVBRRXhwQnVmZmVyKGJ1Zik7CisKKwlyZXR1 cm4gcmV0OworfQorCisvKgorICogU3RvcmUgcHVibGljYXRpb24gYW5kIHN1YnNjcmlwdGlv biBpbmZvcm1hdGlvbi4KKyAqLworc3RhdGljIExvZ2ljYWxSZXBJbmZvICoKK3N0b3JlX3B1 Yl9zdWJfaW5mbyhjb25zdCBjaGFyICpwdWJfYmFzZV9jb25uaW5mbywgY29uc3QgY2hhciAq c3ViX2Jhc2VfY29ubmluZm8pCit7CisJTG9naWNhbFJlcEluZm8gKmRiaW5mbzsKKwlTaW1w bGVTdHJpbmdMaXN0Q2VsbCAqY2VsbDsKKwlpbnQJCQlpID0gMDsKKworCWRiaW5mbyA9IChM b2dpY2FsUmVwSW5mbyAqKSBwZ19tYWxsb2MobnVtX2RicyAqIHNpemVvZihMb2dpY2FsUmVw SW5mbykpOworCisJZm9yIChjZWxsID0gZGF0YWJhc2VfbmFtZXMuaGVhZDsgY2VsbDsgY2Vs bCA9IGNlbGwtPm5leHQpCisJeworCQljaGFyCSAgICpjb25uaW5mbzsKKworCQkvKiBQdWJs aXNoZXIuICovCisJCWNvbm5pbmZvID0gY29uY2F0X2Nvbm5pbmZvX2RibmFtZShwdWJfYmFz ZV9jb25uaW5mbywgY2VsbC0+dmFsKTsKKwkJZGJpbmZvW2ldLnB1YmNvbm5pbmZvID0gY29u bmluZm87CisJCWRiaW5mb1tpXS5kYm5hbWUgPSBjZWxsLT52YWw7CisJCWRiaW5mb1tpXS5t YWRlX3JlcGxzbG90ID0gZmFsc2U7CisJCWRiaW5mb1tpXS5tYWRlX3B1YmxpY2F0aW9uID0g ZmFsc2U7CisJCWRiaW5mb1tpXS5tYWRlX3N1YnNjcmlwdGlvbiA9IGZhbHNlOworCQkvKiBv dGhlciBzdHJ1Y3QgZmllbGRzIHdpbGwgYmUgZmlsbGVkIGxhdGVyLiAqLworCisJCS8qIFN1 YnNjcmliZXIuICovCisJCWNvbm5pbmZvID0gY29uY2F0X2Nvbm5pbmZvX2RibmFtZShzdWJf YmFzZV9jb25uaW5mbywgY2VsbC0+dmFsKTsKKwkJZGJpbmZvW2ldLnN1YmNvbm5pbmZvID0g Y29ubmluZm87CisKKwkJaSsrOworCX0KKworCXJldHVybiBkYmluZm87Cit9CisKK3N0YXRp YyBQR2Nvbm4gKgorY29ubmVjdF9kYXRhYmFzZShjb25zdCBjaGFyICpjb25uaW5mbykKK3sK KwlQR2Nvbm4JICAgKmNvbm47CisJUEdyZXN1bHQgICAqcmVzOworCWNvbnN0IGNoYXIgKnJj b25uaW5mbzsKKworCS8qIGxvZ2ljYWwgcmVwbGljYXRpb24gbW9kZSAqLworCXJjb25uaW5m byA9IHBzcHJpbnRmKCIlcyByZXBsaWNhdGlvbj1kYXRhYmFzZSIsIGNvbm5pbmZvKTsKKwor CWNvbm4gPSBQUWNvbm5lY3RkYihyY29ubmluZm8pOworCWlmIChQUXN0YXR1cyhjb25uKSAh PSBDT05ORUNUSU9OX09LKQorCXsKKwkJcGdfbG9nX2Vycm9yKCJjb25uZWN0aW9uIHRvIGRh dGFiYXNlIGZhaWxlZDogJXMiLCBQUWVycm9yTWVzc2FnZShjb25uKSk7CisJCXJldHVybiBO VUxMOworCX0KKworCS8qIHNlY3VyZSBzZWFyY2hfcGF0aCAqLworCXJlcyA9IFBRZXhlYyhj b25uLCBBTFdBWVNfU0VDVVJFX1NFQVJDSF9QQVRIX1NRTCk7CisJaWYgKFBRcmVzdWx0U3Rh dHVzKHJlcykgIT0gUEdSRVNfVFVQTEVTX09LKQorCXsKKwkJcGdfbG9nX2Vycm9yKCJjb3Vs ZCBub3QgY2xlYXIgc2VhcmNoX3BhdGg6ICVzIiwgUFFyZXN1bHRFcnJvck1lc3NhZ2UocmVz KSk7CisJCXJldHVybiBOVUxMOworCX0KKwlQUWNsZWFyKHJlcyk7CisKKwlyZXR1cm4gY29u bjsKK30KKworc3RhdGljIHZvaWQKK2Rpc2Nvbm5lY3RfZGF0YWJhc2UoUEdjb25uICpjb25u KQoreworCUFzc2VydChjb25uICE9IE5VTEwpOworCisJUFFmaW5pc2goY29ubik7Cit9CisK Ky8qCisgKiBPYnRhaW4gdGhlIHN5c3RlbSBpZGVudGlmaWVyIHVzaW5nIHRoZSBwcm92aWRl ZCBjb25uZWN0aW9uLiBJdCB3aWxsIGJlIHVzZWQKKyAqIHRvIGNvbXBhcmUgaWYgYSBkYXRh IGRpcmVjdG9yeSBpcyBhIGNsb25lIG9mIGFub3RoZXIgb25lLgorICovCitzdGF0aWMgdWlu dDY0CitnZXRfc3lzaWRfZnJvbV9jb25uKGNvbnN0IGNoYXIgKmNvbm5pbmZvKQoreworCVBH Y29ubgkgICAqY29ubjsKKwlQR3Jlc3VsdCAgICpyZXM7CisJdWludDY0CQlzeXNpZDsKKwor CXBnX2xvZ19pbmZvKCJnZXR0aW5nIHN5c3RlbSBpZGVudGlmaWVyIGZyb20gcHVibGlzaGVy Iik7CisKKwljb25uID0gY29ubmVjdF9kYXRhYmFzZShjb25uaW5mbyk7CisJaWYgKGNvbm4g PT0gTlVMTCkKKwkJZXhpdCgxKTsKKworCXJlcyA9IFBRZXhlYyhjb25uLCAiSURFTlRJRllf U1lTVEVNIik7CisJaWYgKFBRcmVzdWx0U3RhdHVzKHJlcykgIT0gUEdSRVNfVFVQTEVTX09L KQorCXsKKwkJcGdfbG9nX2Vycm9yKCJjb3VsZCBub3Qgc2VuZCByZXBsaWNhdGlvbiBjb21t YW5kIFwiJXNcIjogJXMiLAorCQkJCQkgIklERU5USUZZX1NZU1RFTSIsIFBRcmVzdWx0RXJy b3JNZXNzYWdlKHJlcykpOworCQlQUWNsZWFyKHJlcyk7CisJCWRpc2Nvbm5lY3RfZGF0YWJh c2UoY29ubik7CisJCWV4aXQoMSk7CisJfQorCWlmIChQUW50dXBsZXMocmVzKSAhPSAxIHx8 IFBRbmZpZWxkcyhyZXMpIDwgMykKKwl7CisJCXBnX2xvZ19lcnJvcigiY291bGQgbm90IGlk ZW50aWZ5IHN5c3RlbTogZ290ICVkIHJvd3MgYW5kICVkIGZpZWxkcywgZXhwZWN0ZWQgJWQg cm93cyBhbmQgJWQgb3IgbW9yZSBmaWVsZHMiLAorCQkJCQkgUFFudHVwbGVzKHJlcyksIFBR bmZpZWxkcyhyZXMpLCAxLCAzKTsKKworCQlQUWNsZWFyKHJlcyk7CisJCWRpc2Nvbm5lY3Rf ZGF0YWJhc2UoY29ubik7CisJCWV4aXQoMSk7CisJfQorCisJc3lzaWQgPSBzdHJ0b3U2NChQ UWdldHZhbHVlKHJlcywgMCwgMCksIE5VTEwsIDEwKTsKKworCXBnX2xvZ19pbmZvKCJzeXN0 ZW0gaWRlbnRpZmllciBpcyAlbGx1IG9uIHB1Ymxpc2hlciIsICh1bnNpZ25lZCBsb25nIGxv bmcpIHN5c2lkKTsKKworCWRpc2Nvbm5lY3RfZGF0YWJhc2UoY29ubik7CisKKwlyZXR1cm4g c3lzaWQ7Cit9CisKKy8qCisgKiBPYnRhaW4gdGhlIHN5c3RlbSBpZGVudGlmaWVyIGZyb20g Y29udHJvbCBmaWxlLiBJdCB3aWxsIGJlIHVzZWQgdG8gY29tcGFyZQorICogaWYgYSBkYXRh IGRpcmVjdG9yeSBpcyBhIGNsb25lIG9mIGFub3RoZXIgb25lLiBUaGlzIHJvdXRpbmUgaXMg dXNlZCBsb2NhbGx5CisgKiBhbmQgYXZvaWRzIGEgcmVwbGljYXRpb24gY29ubmVjdGlvbi4K KyAqLworc3RhdGljIHVpbnQ2NAorZ2V0X2NvbnRyb2xfZnJvbV9kYXRhZGlyKGNvbnN0IGNo YXIgKmRhdGFkaXIpCit7CisJQ29udHJvbEZpbGVEYXRhICpjZjsKKwlib29sCQljcmNfb2s7 CisJdWludDY0CQlzeXNpZDsKKworCXBnX2xvZ19pbmZvKCJnZXR0aW5nIHN5c3RlbSBpZGVu dGlmaWVyIGZyb20gc3Vic2NyaWJlciIpOworCisJY2YgPSBnZXRfY29udHJvbGZpbGUoZGF0 YWRpciwgJmNyY19vayk7CisJaWYgKCFjcmNfb2spCisJeworCQlwZ19sb2dfZXJyb3IoImNv bnRyb2wgZmlsZSBhcHBlYXJzIHRvIGJlIGNvcnJ1cHQiKTsKKwkJZXhpdCgxKTsKKwl9CisK KwlzeXNpZCA9IGNmLT5zeXN0ZW1faWRlbnRpZmllcjsKKworCXBnX2xvZ19pbmZvKCJzeXN0 ZW0gaWRlbnRpZmllciBpcyAlbGx1IG9uIHN1YnNjcmliZXIiLCAodW5zaWduZWQgbG9uZyBs b25nKSBzeXNpZCk7CisKKwlwZnJlZShjZik7CisKKwlyZXR1cm4gc3lzaWQ7Cit9CisKKy8q CisgKiBNb2RpZnkgdGhlIHN5c3RlbSBpZGVudGlmaWVyLiBTaW5jZSBhIHN0YW5kYnkgc2Vy dmVyIHByZXNlcnZlcyB0aGUgc3lzdGVtCisgKiBpZGVudGlmaWVyLCBpdCBtYWtlcyBzZW5z ZSB0byBjaGFuZ2UgaXQgdG8gYXZvaWQgc2l0dWF0aW9ucyBpbiB3aGljaCBXQUwKKyAqIGZp bGVzIGZyb20gb25lIG9mIHRoZSBzeXN0ZW1zIG1pZ2h0IGJlIHVzZWQgaW4gdGhlIG90aGVy IG9uZS4KKyAqLworc3RhdGljIHZvaWQKK21vZGlmeV9zeXNpZChjb25zdCBjaGFyICpwZ19y ZXNldHdhbF9wYXRoLCBjb25zdCBjaGFyICpkYXRhZGlyKQoreworCUNvbnRyb2xGaWxlRGF0 YSAqY2Y7CisJYm9vbAkJY3JjX29rOworCXN0cnVjdCB0aW1ldmFsIHR2OworCisJY2hhcgkg ICAqY21kX3N0cjsKKwlpbnQJCQlyYzsKKworCXBnX2xvZ19pbmZvKCJtb2RpZnlpbmcgc3lz dGVtIGlkZW50aWZpZXIgZnJvbSBzdWJzY3JpYmVyIik7CisKKwljZiA9IGdldF9jb250cm9s ZmlsZShkYXRhZGlyLCAmY3JjX29rKTsKKwlpZiAoIWNyY19vaykKKwl7CisJCXBnX2xvZ19l cnJvcigiY29udHJvbCBmaWxlIGFwcGVhcnMgdG8gYmUgY29ycnVwdCIpOworCQlleGl0KDEp OworCX0KKworCS8qCisJICogU2VsZWN0IGEgbmV3IHN5c3RlbSBpZGVudGlmaWVyLgorCSAq CisJICogWFhYIHRoaXMgY29kZSB3YXMgZXh0cmFjdGVkIGZyb20gQm9vdFN0cmFwWExPRygp LgorCSAqLworCWdldHRpbWVvZmRheSgmdHYsIE5VTEwpOworCWNmLT5zeXN0ZW1faWRlbnRp ZmllciA9ICgodWludDY0KSB0di50dl9zZWMpIDw8IDMyOworCWNmLT5zeXN0ZW1faWRlbnRp ZmllciB8PSAoKHVpbnQ2NCkgdHYudHZfdXNlYykgPDwgMTI7CisJY2YtPnN5c3RlbV9pZGVu dGlmaWVyIHw9IGdldHBpZCgpICYgMHhGRkY7CisKKwlpZiAoIWRyeV9ydW4pCisJCXVwZGF0 ZV9jb250cm9sZmlsZShkYXRhZGlyLCBjZiwgdHJ1ZSk7CisKKwlwZ19sb2dfaW5mbygic3lz dGVtIGlkZW50aWZpZXIgaXMgJWxsdSBvbiBzdWJzY3JpYmVyIiwgKHVuc2lnbmVkIGxvbmcg bG9uZykgY2YtPnN5c3RlbV9pZGVudGlmaWVyKTsKKworCXBnX2xvZ19pbmZvKCJydW5uaW5n IHBnX3Jlc2V0d2FsIG9uIHRoZSBzdWJzY3JpYmVyIik7CisKKwljbWRfc3RyID0gcHNwcmlu dGYoIlwiJXNcIiAtRCBcIiVzXCIiLCBwZ19yZXNldHdhbF9wYXRoLCBkYXRhZGlyKTsKKwor CXBnX2xvZ19kZWJ1ZygiY29tbWFuZCBpczogJXMiLCBjbWRfc3RyKTsKKworCWlmICghZHJ5 X3J1bikKKwl7CisJCXJjID0gc3lzdGVtKGNtZF9zdHIpOworCQlpZiAocmMgPT0gMCkKKwkJ CXBnX2xvZ19pbmZvKCJzdWJzY3JpYmVyIHN1Y2Nlc3NmdWxseSBjaGFuZ2VkIHRoZSBzeXN0 ZW0gaWRlbnRpZmllciIpOworCQllbHNlCisJCQlwZ19sb2dfZXJyb3IoInN1YnNjcmliZXIg ZmFpbGVkIHRvIGNoYW5nZSBzeXN0ZW0gaWRlbnRpZmllcjogZXhpdCBjb2RlOiAlZCIsIHJj KTsKKwl9CisKKwlwZnJlZShjZik7Cit9CisKKy8qCisgKiBSZXR1cm4gYSBwYWxsb2MnZCBz bG90IG5hbWUgaWYgdGhlIHJlcGxpY2F0aW9uIGlzIHVzaW5nIG9uZS4KKyAqLworc3RhdGlj IGNoYXIgKgordXNlX3ByaW1hcnlfc2xvdF9uYW1lKHZvaWQpCit7CisJUEdjb25uCSAgICpj b25uOworCVBHcmVzdWx0ICAgKnJlczsKKwlQUUV4cEJ1ZmZlciBzdHIgPSBjcmVhdGVQUUV4 cEJ1ZmZlcigpOworCWNoYXIJICAgKnNsb3RfbmFtZTsKKworCWNvbm4gPSBjb25uZWN0X2Rh dGFiYXNlKGRiaW5mb1swXS5zdWJjb25uaW5mbyk7CisJaWYgKGNvbm4gPT0gTlVMTCkKKwkJ ZXhpdCgxKTsKKworCXJlcyA9IFBRZXhlYyhjb25uLCAiU0VMRUNUIHNldHRpbmcgRlJPTSBw Z19zZXR0aW5ncyBXSEVSRSBuYW1lID0gJ3ByaW1hcnlfc2xvdF9uYW1lJyIpOworCWlmIChQ UXJlc3VsdFN0YXR1cyhyZXMpICE9IFBHUkVTX1RVUExFU19PSykKKwl7CisJCXBnX2xvZ19l cnJvcigiY291bGQgbm90IG9idGFpbiBwYXJhbWV0ZXIgaW5mb3JtYXRpb246ICVzIiwgUFFy ZXN1bHRFcnJvck1lc3NhZ2UocmVzKSk7CisJCXJldHVybiBOVUxMOworCX0KKworCS8qCisJ ICogSWYgcHJpbWFyeV9zbG90X25hbWUgaXMgYW4gZW1wdHkgc3RyaW5nLCB0aGUgY3VycmVu dCByZXBsaWNhdGlvbgorCSAqIGNvbm5lY3Rpb24gaXMgbm90IHVzaW5nIGEgcmVwbGljYXRp b24gc2xvdCwgYmFpbCBvdXQuCisJICovCisJaWYgKHN0cmNtcChQUWdldHZhbHVlKHJlcywg MCwgMCksICIiKSA9PSAwKQorCXsKKwkJUFFjbGVhcihyZXMpOworCQlyZXR1cm4gTlVMTDsK Kwl9CisKKwlzbG90X25hbWUgPSBwZ19zdHJkdXAoUFFnZXR2YWx1ZShyZXMsIDAsIDApKTsK KwlQUWNsZWFyKHJlcyk7CisKKwlkaXNjb25uZWN0X2RhdGFiYXNlKGNvbm4pOworCisJY29u biA9IGNvbm5lY3RfZGF0YWJhc2UoZGJpbmZvWzBdLnB1YmNvbm5pbmZvKTsKKwlpZiAoY29u biA9PSBOVUxMKQorCQlleGl0KDEpOworCisJYXBwZW5kUFFFeHBCdWZmZXIoc3RyLAorCQkJ CQkgICJTRUxFQ1QgMSBGUk9NIHBnX3JlcGxpY2F0aW9uX3Nsb3RzIHIgSU5ORVIgSk9JTiBw Z19zdGF0X2FjdGl2aXR5IGEgT04gKHIuYWN0aXZlX3BpZCA9IGEucGlkKSBXSEVSRSBzbG90 X25hbWUgPSAnJXMnIiwgc2xvdF9uYW1lKTsKKworCXBnX2xvZ19kZWJ1ZygiY29tbWFuZCBp czogJXMiLCBzdHItPmRhdGEpOworCisJcmVzID0gUFFleGVjKGNvbm4sIHN0ci0+ZGF0YSk7 CisJaWYgKFBRcmVzdWx0U3RhdHVzKHJlcykgIT0gUEdSRVNfVFVQTEVTX09LKQorCXsKKwkJ cGdfbG9nX2Vycm9yKCJjb3VsZCBub3Qgb2J0YWluIHJlcGxpY2F0aW9uIHNsb3QgaW5mb3Jt YXRpb246ICVzIiwgUFFyZXN1bHRFcnJvck1lc3NhZ2UocmVzKSk7CisJCXJldHVybiBOVUxM OworCX0KKworCWlmIChQUW50dXBsZXMocmVzKSAhPSAxKQorCXsKKwkJcGdfbG9nX2Vycm9y KCJjb3VsZCBub3Qgb2J0YWluIHJlcGxpY2F0aW9uIHNsb3QgaW5mb3JtYXRpb246IGdvdCAl ZCByb3dzLCBleHBlY3RlZCAlZCByb3ciLAorCQkJCQkgUFFudHVwbGVzKHJlcyksIDEpOwor CQlyZXR1cm4gTlVMTDsKKwl9CisKKwlQUWNsZWFyKHJlcyk7CisJZGlzY29ubmVjdF9kYXRh YmFzZShjb25uKTsKKworCXJldHVybiBzbG90X25hbWU7Cit9CisKK3N0YXRpYyBib29sCitj cmVhdGVfYWxsX2xvZ2ljYWxfcmVwbGljYXRpb25fc2xvdHMoTG9naWNhbFJlcEluZm8gKmRi aW5mbykKK3sKKwlpbnQJCQlpOworCisJZm9yIChpID0gMDsgaSA8IG51bV9kYnM7IGkrKykK Kwl7CisJCVBHY29ubgkgICAqY29ubjsKKwkJUEdyZXN1bHQgICAqcmVzOworCQljaGFyCQly ZXBsc2xvdG5hbWVbTkFNRURBVEFMRU5dOworCisJCWNvbm4gPSBjb25uZWN0X2RhdGFiYXNl KGRiaW5mb1tpXS5wdWJjb25uaW5mbyk7CisJCWlmIChjb25uID09IE5VTEwpCisJCQlleGl0 KDEpOworCisJCXJlcyA9IFBRZXhlYyhjb25uLAorCQkJCQkgIlNFTEVDVCBvaWQgRlJPTSBw Z19jYXRhbG9nLnBnX2RhdGFiYXNlIFdIRVJFIGRhdG5hbWUgPSBjdXJyZW50X2RhdGFiYXNl KCkiKTsKKwkJaWYgKFBRcmVzdWx0U3RhdHVzKHJlcykgIT0gUEdSRVNfVFVQTEVTX09LKQor CQl7CisJCQlwZ19sb2dfZXJyb3IoImNvdWxkIG5vdCBvYnRhaW4gZGF0YWJhc2UgT0lEOiAl cyIsIFBRcmVzdWx0RXJyb3JNZXNzYWdlKHJlcykpOworCQkJcmV0dXJuIGZhbHNlOworCQl9 CisKKwkJaWYgKFBRbnR1cGxlcyhyZXMpICE9IDEpCisJCXsKKwkJCXBnX2xvZ19lcnJvcigi Y291bGQgbm90IG9idGFpbiBkYXRhYmFzZSBPSUQ6IGdvdCAlZCByb3dzLCBleHBlY3RlZCAl ZCByb3dzIiwKKwkJCQkJCSBQUW50dXBsZXMocmVzKSwgMSk7CisJCQlyZXR1cm4gZmFsc2U7 CisJCX0KKworCQkvKiBSZW1lbWJlciBkYXRhYmFzZSBPSUQuICovCisJCWRiaW5mb1tpXS5v aWQgPSBzdHJ0b3VsKFBRZ2V0dmFsdWUocmVzLCAwLCAwKSwgTlVMTCwgMTApOworCisJCVBR Y2xlYXIocmVzKTsKKworCQkvKgorCQkgKiBCdWlsZCB0aGUgcmVwbGljYXRpb24gc2xvdCBu YW1lLiBUaGUgbmFtZSBtdXN0IG5vdCBleGNlZWQKKwkJICogTkFNRURBVEFMRU4gLSAxLiBU aGlzIGN1cnJlbnQgc2NoZW1hIHVzZXMgYSBtYXhpbXVtIG9mIDM2CisJCSAqIGNoYXJhY3Rl cnMgKDE0ICsgMTAgKyAxICsgMTAgKyAnXDAnKS4gU3lzdGVtIGlkZW50aWZpZXIgaXMgaW5j bHVkZWQKKwkJICogdG8gcmVkdWNlIHRoZSBwcm9iYWJpbGl0eSBvZiBjb2xsaXNpb24uIEJ5 IGRlZmF1bHQsIHN1YnNjcmlwdGlvbgorCQkgKiBuYW1lIGlzIHVzZWQgYXMgcmVwbGljYXRp b24gc2xvdCBuYW1lLgorCQkgKi8KKwkJc25wcmludGYocmVwbHNsb3RuYW1lLCBzaXplb2Yo cmVwbHNsb3RuYW1lKSwKKwkJCQkgInBnX3N1YnNjcmliZXJfJXVfJWQiLAorCQkJCSBkYmlu Zm9baV0ub2lkLAorCQkJCSAoaW50KSBnZXRwaWQoKSk7CisJCWRiaW5mb1tpXS5zdWJuYW1l ID0gcGdfc3RyZHVwKHJlcGxzbG90bmFtZSk7CisKKwkJLyogQ3JlYXRlIHJlcGxpY2F0aW9u IHNsb3Qgb24gcHVibGlzaGVyLiAqLworCQlpZiAoY3JlYXRlX2xvZ2ljYWxfcmVwbGljYXRp b25fc2xvdChjb25uLCAmZGJpbmZvW2ldLCByZXBsc2xvdG5hbWUpICE9IE5VTEwgfHwgZHJ5 X3J1bikKKwkJCXBnX2xvZ19pbmZvKCJjcmVhdGUgcmVwbGljYXRpb24gc2xvdCBcIiVzXCIg b24gcHVibGlzaGVyIiwgcmVwbHNsb3RuYW1lKTsKKwkJZWxzZQorCQkJcmV0dXJuIGZhbHNl OworCisJCWRpc2Nvbm5lY3RfZGF0YWJhc2UoY29ubik7CisJfQorCisJcmV0dXJuIHRydWU7 Cit9CisKKy8qCisgKiBDcmVhdGUgYSBsb2dpY2FsIHJlcGxpY2F0aW9uIHNsb3QgYW5kIHJl dHVybnMgYSBjb25zaXN0ZW50IExTTi4gVGhlIHJldHVybmVkCisgKiBMU04gbWlnaHQgYmUg dXNlZCB0byBjYXRjaCB1cCB0aGUgc3Vic2NyaWJlciB1cCB0byB0aGUgcmVxdWlyZWQgcG9p bnQuCisgKgorICogQ3JlYXRlUmVwbGljYXRpb25TbG90KCkgaXMgbm90IHVzZWQgYmVjYXVz ZSBpdCBkb2VzIG5vdCBwcm92aWRlIHRoZSBvbmUtcm93CisgKiByZXN1bHQgc2V0IHRoYXQg Y29udGFpbnMgdGhlIGNvbnNpc3RlbnQgTFNOLgorICovCitzdGF0aWMgY2hhciAqCitjcmVh dGVfbG9naWNhbF9yZXBsaWNhdGlvbl9zbG90KFBHY29ubiAqY29ubiwgTG9naWNhbFJlcElu Zm8gKmRiaW5mbywKKwkJCQkJCQkJY2hhciAqc2xvdF9uYW1lKQoreworCVBRRXhwQnVmZmVy IHN0ciA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisJUEdyZXN1bHQgICAqcmVzID0gTlVMTDsK KwljaGFyCSAgICpsc24gPSBOVUxMOworCWJvb2wJCXRyYW5zaWVudF9yZXBsc2xvdCA9IGZh bHNlOworCisJQXNzZXJ0KGNvbm4gIT0gTlVMTCk7CisKKwkvKgorCSAqIElmIG5vIHNsb3Qg bmFtZSBpcyBpbmZvcm1lZCwgaXQgaXMgYSB0cmFuc2llbnQgcmVwbGljYXRpb24gc2xvdCB1 c2VkCisJICogb25seSBmb3IgY2F0Y2ggdXAgcHVycG9zZXMuCisJICovCisJaWYgKHNsb3Rf bmFtZVswXSA9PSAnXDAnKQorCXsKKwkJc25wcmludGYoc2xvdF9uYW1lLCBOQU1FREFUQUxF TiwgInBnX3N1YnNjcmliZXJfJWRfc3RhcnRwb2ludCIsCisJCQkJIChpbnQpIGdldHBpZCgp KTsKKwkJdHJhbnNpZW50X3JlcGxzbG90ID0gdHJ1ZTsKKwl9CisKKwlwZ19sb2dfaW5mbygi Y3JlYXRpbmcgdGhlIHJlcGxpY2F0aW9uIHNsb3QgXCIlc1wiIG9uIGRhdGFiYXNlIFwiJXNc IiIsIHNsb3RfbmFtZSwgZGJpbmZvLT5kYm5hbWUpOworCisJYXBwZW5kUFFFeHBCdWZmZXIo c3RyLCAiQ1JFQVRFX1JFUExJQ0FUSU9OX1NMT1QgXCIlc1wiIiwgc2xvdF9uYW1lKTsKKwlh cHBlbmRQUUV4cEJ1ZmZlclN0cihzdHIsICIgTE9HSUNBTCBcInBnb3V0cHV0XCIgTk9FWFBP UlRfU05BUFNIT1QiKTsKKworCXBnX2xvZ19kZWJ1ZygiY29tbWFuZCBpczogJXMiLCBzdHIt PmRhdGEpOworCisJaWYgKCFkcnlfcnVuKQorCXsKKwkJcmVzID0gUFFleGVjKGNvbm4sIHN0 ci0+ZGF0YSk7CisJCWlmIChQUXJlc3VsdFN0YXR1cyhyZXMpICE9IFBHUkVTX1RVUExFU19P SykKKwkJeworCQkJcGdfbG9nX2Vycm9yKCJjb3VsZCBub3QgY3JlYXRlIHJlcGxpY2F0aW9u IHNsb3QgXCIlc1wiIG9uIGRhdGFiYXNlIFwiJXNcIjogJXMiLCBzbG90X25hbWUsIGRiaW5m by0+ZGJuYW1lLAorCQkJCQkJIFBRcmVzdWx0RXJyb3JNZXNzYWdlKHJlcykpOworCQkJcmV0 dXJuIGxzbjsKKwkJfQorCX0KKworCS8qIGZvciBjbGVhbnVwIHB1cnBvc2VzICovCisJaWYg KHRyYW5zaWVudF9yZXBsc2xvdCkKKwkJbWFkZV90cmFuc2llbnRfcmVwbHNsb3QgPSB0cnVl OworCWVsc2UKKwkJZGJpbmZvLT5tYWRlX3JlcGxzbG90ID0gdHJ1ZTsKKworCWlmICghZHJ5 X3J1bikKKwl7CisJCWxzbiA9IHBnX3N0cmR1cChQUWdldHZhbHVlKHJlcywgMCwgMSkpOwor CQlQUWNsZWFyKHJlcyk7CisJfQorCisJZGVzdHJveVBRRXhwQnVmZmVyKHN0cik7CisKKwly ZXR1cm4gbHNuOworfQorCitzdGF0aWMgdm9pZAorZHJvcF9yZXBsaWNhdGlvbl9zbG90KFBH Y29ubiAqY29ubiwgTG9naWNhbFJlcEluZm8gKmRiaW5mbywgY29uc3QgY2hhciAqc2xvdF9u YW1lKQoreworCVBRRXhwQnVmZmVyIHN0ciA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisJUEdy ZXN1bHQgICAqcmVzOworCisJQXNzZXJ0KGNvbm4gIT0gTlVMTCk7CisKKwlwZ19sb2dfaW5m bygiZHJvcHBpbmcgdGhlIHJlcGxpY2F0aW9uIHNsb3QgXCIlc1wiIG9uIGRhdGFiYXNlIFwi JXNcIiIsIHNsb3RfbmFtZSwgZGJpbmZvLT5kYm5hbWUpOworCisJYXBwZW5kUFFFeHBCdWZm ZXIoc3RyLCAiRFJPUF9SRVBMSUNBVElPTl9TTE9UIFwiJXNcIiIsIHNsb3RfbmFtZSk7CisK KwlwZ19sb2dfZGVidWcoImNvbW1hbmQgaXM6ICVzIiwgc3RyLT5kYXRhKTsKKworCWlmICgh ZHJ5X3J1bikKKwl7CisJCXJlcyA9IFBRZXhlYyhjb25uLCBzdHItPmRhdGEpOworCQlpZiAo UFFyZXN1bHRTdGF0dXMocmVzKSAhPSBQR1JFU19DT01NQU5EX09LKQorCQkJcGdfbG9nX2Vy cm9yKCJjb3VsZCBub3QgZHJvcCByZXBsaWNhdGlvbiBzbG90IFwiJXNcIiBvbiBkYXRhYmFz ZSBcIiVzXCI6ICVzIiwgc2xvdF9uYW1lLCBkYmluZm8tPmRibmFtZSwKKwkJCQkJCSBQUWVy cm9yTWVzc2FnZShjb25uKSk7CisKKwkJUFFjbGVhcihyZXMpOworCX0KKworCWRlc3Ryb3lQ UUV4cEJ1ZmZlcihzdHIpOworfQorCisvKgorICogUmVwb3J0cyBhIHN1aXRhYmxlIG1lc3Nh Z2UgaWYgcGdfY3RsIGZhaWxzLgorICovCitzdGF0aWMgdm9pZAorcGdfY3RsX3N0YXR1cyhj b25zdCBjaGFyICpwZ19jdGxfY21kLCBpbnQgcmMsIGludCBhY3Rpb24pCit7CisJaWYgKHJj ICE9IDApCisJeworCQlpZiAoV0lGRVhJVEVEKHJjKSkKKwkJeworCQkJcGdfbG9nX2Vycm9y KCJwZ19jdGwgZmFpbGVkIHdpdGggZXhpdCBjb2RlICVkIiwgV0VYSVRTVEFUVVMocmMpKTsK KwkJfQorCQllbHNlIGlmIChXSUZTSUdOQUxFRChyYykpCisJCXsKKyNpZiBkZWZpbmVkKFdJ TjMyKQorCQkJcGdfbG9nX2Vycm9yKCJwZ19jdGwgd2FzIHRlcm1pbmF0ZWQgYnkgZXhjZXB0 aW9uIDB4JVgiLCBXVEVSTVNJRyhyYykpOworCQkJcGdfbG9nX2Vycm9yX2RldGFpbCgiU2Vl IEMgaW5jbHVkZSBmaWxlIFwibnRzdGF0dXMuaFwiIGZvciBhIGRlc2NyaXB0aW9uIG9mIHRo ZSBoZXhhZGVjaW1hbCB2YWx1ZS4iKTsKKyNlbHNlCisJCQlwZ19sb2dfZXJyb3IoInBnX2N0 bCB3YXMgdGVybWluYXRlZCBieSBzaWduYWwgJWQ6ICVzIiwKKwkJCQkJCSBXVEVSTVNJRyhy YyksIHBnX3N0cnNpZ25hbChXVEVSTVNJRyhyYykpKTsKKyNlbmRpZgorCQl9CisJCWVsc2UK KwkJeworCQkJcGdfbG9nX2Vycm9yKCJwZ19jdGwgZXhpdGVkIHdpdGggdW5yZWNvZ25pemVk IHN0YXR1cyAlZCIsIHJjKTsKKwkJfQorCisJCXBnX2xvZ19lcnJvcl9kZXRhaWwoIlRoZSBm YWlsZWQgY29tbWFuZCB3YXM6ICVzIiwgcGdfY3RsX2NtZCk7CisJCWV4aXQoMSk7CisJfQor CisJaWYgKGFjdGlvbikKKwkJcGdfbG9nX2luZm8oInBvc3RtYXN0ZXIgd2FzIHN0YXJ0ZWQi KTsKKwllbHNlCisJCXBnX2xvZ19pbmZvKCJwb3N0bWFzdGVyIHdhcyBzdG9wcGVkIik7Cit9 CisKKy8qCisgKiBSZXR1cm5zIGFmdGVyIHRoZSBzZXJ2ZXIgZmluaXNoZXMgdGhlIHJlY292 ZXJ5IHByb2Nlc3MuCisgKi8KK3N0YXRpYyB2b2lkCit3YWl0X2Zvcl9lbmRfcmVjb3Zlcnko Y29uc3QgY2hhciAqY29ubmluZm8pCit7CisJUEdjb25uCSAgICpjb25uOworCVBHcmVzdWx0 ICAgKnJlczsKKwlpbnQJCQlzdGF0dXMgPSBQT1NUTUFTVEVSX1NUSUxMX1NUQVJUSU5HOwor CisJcGdfbG9nX2luZm8oIndhaXRpbmcgdGhlIHBvc3RtYXN0ZXIgdG8gcmVhY2ggdGhlIGNv bnNpc3RlbnQgc3RhdGUiKTsKKworCWNvbm4gPSBjb25uZWN0X2RhdGFiYXNlKGNvbm5pbmZv KTsKKwlpZiAoY29ubiA9PSBOVUxMKQorCQlleGl0KDEpOworCisJZm9yICg7OykKKwl7CisJ CWJvb2wJCWluX3JlY292ZXJ5OworCisJCXJlcyA9IFBRZXhlYyhjb25uLCAiU0VMRUNUIHBn X2NhdGFsb2cucGdfaXNfaW5fcmVjb3ZlcnkoKSIpOworCisJCWlmIChQUXJlc3VsdFN0YXR1 cyhyZXMpICE9IFBHUkVTX1RVUExFU19PSykKKwkJeworCQkJcGdfbG9nX2Vycm9yKCJjb3Vs ZCBub3Qgb2J0YWluIHJlY292ZXJ5IHByb2dyZXNzIik7CisJCQlleGl0KDEpOworCQl9CisK KwkJaWYgKFBRbnR1cGxlcyhyZXMpICE9IDEpCisJCXsKKwkJCXBnX2xvZ19lcnJvcigidW5l eHBlY3RlZCByZXN1bHQgZnJvbSBwZ19pc19pbl9yZWNvdmVyeSBmdW5jdGlvbiIpOworCQkJ ZXhpdCgxKTsKKwkJfQorCisJCWluX3JlY292ZXJ5ID0gKHN0cmNtcChQUWdldHZhbHVlKHJl cywgMCwgMCksICJ0IikgPT0gMCk7CisKKwkJUFFjbGVhcihyZXMpOworCisJCS8qCisJCSAq IERvZXMgdGhlIHJlY292ZXJ5IHByb2Nlc3MgZmluaXNoPyBJbiBkcnkgcnVuIG1vZGUsIHRo ZXJlIGlzIG5vCisJCSAqIHJlY292ZXJ5IG1vZGUuIEJhaWwgb3V0IGFzIHRoZSByZWNvdmVy eSBwcm9jZXNzIGhhcyBlbmRlZC4KKwkJICovCisJCWlmICghaW5fcmVjb3ZlcnkgfHwgZHJ5 X3J1bikKKwkJeworCQkJc3RhdHVzID0gUE9TVE1BU1RFUl9SRUFEWTsKKwkJCWJyZWFrOwor CQl9CisKKwkJLyogS2VlcCB3YWl0aW5nLiAqLworCQlwZ191c2xlZXAoV0FJVF9JTlRFUlZB TCAqIFVTRUNfUEVSX1NFQyk7CisJfQorCisJZGlzY29ubmVjdF9kYXRhYmFzZShjb25uKTsK KworCWlmIChzdGF0dXMgPT0gUE9TVE1BU1RFUl9TVElMTF9TVEFSVElORykKKwl7CisJCXBn X2xvZ19lcnJvcigic2VydmVyIGRpZCBub3QgZW5kIHJlY292ZXJ5Iik7CisJCWV4aXQoMSk7 CisJfQorCisJcGdfbG9nX2luZm8oInBvc3RtYXN0ZXIgcmVhY2hlZCB0aGUgY29uc2lzdGVu dCBzdGF0ZSIpOworfQorCisvKgorICogQ3JlYXRlIGEgcHVibGljYXRpb24gdGhhdCBpbmNs dWRlcyBhbGwgdGFibGVzIGluIHRoZSBkYXRhYmFzZS4KKyAqLworc3RhdGljIHZvaWQKK2Ny ZWF0ZV9wdWJsaWNhdGlvbihQR2Nvbm4gKmNvbm4sIExvZ2ljYWxSZXBJbmZvICpkYmluZm8p Cit7CisJUFFFeHBCdWZmZXIgc3RyID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKKwlQR3Jlc3Vs dCAgICpyZXM7CisKKwlBc3NlcnQoY29ubiAhPSBOVUxMKTsKKworCS8qIENoZWNrIGlmIHRo ZSBwdWJsaWNhdGlvbiBuZWVkcyB0byBiZSBjcmVhdGVkLiAqLworCWFwcGVuZFBRRXhwQnVm ZmVyKHN0ciwKKwkJCQkJICAiU0VMRUNUIHB1YmFsbHRhYmxlcyBGUk9NIHBnX2NhdGFsb2cu cGdfcHVibGljYXRpb24gV0hFUkUgcHVibmFtZSA9ICclcyciLAorCQkJCQkgIGRiaW5mby0+ cHVibmFtZSk7CisJcmVzID0gUFFleGVjKGNvbm4sIHN0ci0+ZGF0YSk7CisJaWYgKFBRcmVz dWx0U3RhdHVzKHJlcykgIT0gUEdSRVNfVFVQTEVTX09LKQorCXsKKwkJcGdfbG9nX2Vycm9y KCJjb3VsZCBub3Qgb2J0YWluIHB1YmxpY2F0aW9uIGluZm9ybWF0aW9uOiAlcyIsCisJCQkJ CSBQUXJlc3VsdEVycm9yTWVzc2FnZShyZXMpKTsKKwkJUFFjbGVhcihyZXMpOworCQlQUWZp bmlzaChjb25uKTsKKwkJZXhpdCgxKTsKKwl9CisKKwlpZiAoUFFudHVwbGVzKHJlcykgPT0g MSkKKwl7CisJCS8qCisJCSAqIElmIHB1YmxpY2F0aW9uIG5hbWUgYWxyZWFkeSBleGlzdHMg YW5kIHB1YmFsbHRhYmxlcyBpcyB0cnVlLCBsZXQncworCQkgKiB1c2UgaXQuIEEgcHJldmlv dXMgcnVuIG9mIHBnX3N1YnNjcmliZXIgbXVzdCBoYXZlIGNyZWF0ZWQgdGhpcworCQkgKiBw dWJsaWNhdGlvbi4gQmFpbCBvdXQuCisJCSAqLworCQlpZiAoc3RyY21wKFBRZ2V0dmFsdWUo cmVzLCAwLCAwKSwgInQiKSA9PSAwKQorCQl7CisJCQlwZ19sb2dfaW5mbygicHVibGljYXRp b24gXCIlc1wiIGFscmVhZHkgZXhpc3RzIiwgZGJpbmZvLT5wdWJuYW1lKTsKKwkJCXJldHVy bjsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qCisJCQkgKiBVbmZvcnR1bmF0ZWx5LCBpZiBp dCByZWFjaGVzIHRoaXMgY29kZSBwYXRoLCBpdCB3aWxsIGFsd2F5cworCQkJICogZmFpbCAo dW5sZXNzIHlvdSBkZWNpZGUgdG8gY2hhbmdlIHRoZSBleGlzdGluZyBwdWJsaWNhdGlvbgor CQkJICogbmFtZSkuIFRoYXQncyBiYWQgYnV0IGl0IGlzIHZlcnkgdW5saWtlbHkgdGhhdCB0 aGUgdXNlciB3aWxsCisJCQkgKiBjaG9vc2UgYSBuYW1lIHdpdGggcGdfc3Vic2NyaWJlcl8g cHJlZml4IGZvbGxvd2VkIGJ5IHRoZSBleGFjdAorCQkJICogZGF0YWJhc2Ugb2lkIGluIHdo aWNoIHB1YmFsbHRhYmxlcyBpcyBmYWxzZS4KKwkJCSAqLworCQkJcGdfbG9nX2Vycm9yKCJw dWJsaWNhdGlvbiBcIiVzXCIgZG9lcyBub3QgcmVwbGljYXRlIGNoYW5nZXMgZm9yIGFsbCB0 YWJsZXMiLAorCQkJCQkJIGRiaW5mby0+cHVibmFtZSk7CisJCQlwZ19sb2dfZXJyb3JfaGlu dCgiQ29uc2lkZXIgcmVuYW1pbmcgdGhpcyBwdWJsaWNhdGlvbi4iKTsKKwkJCVBRY2xlYXIo cmVzKTsKKwkJCVBRZmluaXNoKGNvbm4pOworCQkJZXhpdCgxKTsKKwkJfQorCX0KKworCVBR Y2xlYXIocmVzKTsKKwlyZXNldFBRRXhwQnVmZmVyKHN0cik7CisKKwlwZ19sb2dfaW5mbygi Y3JlYXRpbmcgcHVibGljYXRpb24gXCIlc1wiIG9uIGRhdGFiYXNlIFwiJXNcIiIsIGRiaW5m by0+cHVibmFtZSwgZGJpbmZvLT5kYm5hbWUpOworCisJYXBwZW5kUFFFeHBCdWZmZXIoc3Ry LCAiQ1JFQVRFIFBVQkxJQ0FUSU9OICVzIEZPUiBBTEwgVEFCTEVTIiwgZGJpbmZvLT5wdWJu YW1lKTsKKworCXBnX2xvZ19kZWJ1ZygiY29tbWFuZCBpczogJXMiLCBzdHItPmRhdGEpOwor CisJaWYgKCFkcnlfcnVuKQorCXsKKwkJcmVzID0gUFFleGVjKGNvbm4sIHN0ci0+ZGF0YSk7 CisJCWlmIChQUXJlc3VsdFN0YXR1cyhyZXMpICE9IFBHUkVTX0NPTU1BTkRfT0spCisJCXsK KwkJCXBnX2xvZ19lcnJvcigiY291bGQgbm90IGNyZWF0ZSBwdWJsaWNhdGlvbiBcIiVzXCIg b24gZGF0YWJhc2UgXCIlc1wiOiAlcyIsCisJCQkJCQkgZGJpbmZvLT5wdWJuYW1lLCBkYmlu Zm8tPmRibmFtZSwgUFFlcnJvck1lc3NhZ2UoY29ubikpOworCQkJUFFmaW5pc2goY29ubik7 CisJCQlleGl0KDEpOworCQl9CisJfQorCisJLyogZm9yIGNsZWFudXAgcHVycG9zZXMgKi8K KwlkYmluZm8tPm1hZGVfcHVibGljYXRpb24gPSB0cnVlOworCisJaWYgKCFkcnlfcnVuKQor CQlQUWNsZWFyKHJlcyk7CisKKwlkZXN0cm95UFFFeHBCdWZmZXIoc3RyKTsKK30KKworLyoK KyAqIFJlbW92ZSBwdWJsaWNhdGlvbiBpZiBpdCBjb3VsZG4ndCBmaW5pc2ggYWxsIHN0ZXBz LgorICovCitzdGF0aWMgdm9pZAorZHJvcF9wdWJsaWNhdGlvbihQR2Nvbm4gKmNvbm4sIExv Z2ljYWxSZXBJbmZvICpkYmluZm8pCit7CisJUFFFeHBCdWZmZXIgc3RyID0gY3JlYXRlUFFF eHBCdWZmZXIoKTsKKwlQR3Jlc3VsdCAgICpyZXM7CisKKwlBc3NlcnQoY29ubiAhPSBOVUxM KTsKKworCXBnX2xvZ19pbmZvKCJkcm9wcGluZyBwdWJsaWNhdGlvbiBcIiVzXCIgb24gZGF0 YWJhc2UgXCIlc1wiIiwgZGJpbmZvLT5wdWJuYW1lLCBkYmluZm8tPmRibmFtZSk7CisKKwlh cHBlbmRQUUV4cEJ1ZmZlcihzdHIsICJEUk9QIFBVQkxJQ0FUSU9OICVzIiwgZGJpbmZvLT5w dWJuYW1lKTsKKworCXBnX2xvZ19kZWJ1ZygiY29tbWFuZCBpczogJXMiLCBzdHItPmRhdGEp OworCisJaWYgKCFkcnlfcnVuKQorCXsKKwkJcmVzID0gUFFleGVjKGNvbm4sIHN0ci0+ZGF0 YSk7CisJCWlmIChQUXJlc3VsdFN0YXR1cyhyZXMpICE9IFBHUkVTX0NPTU1BTkRfT0spCisJ CQlwZ19sb2dfZXJyb3IoImNvdWxkIG5vdCBkcm9wIHB1YmxpY2F0aW9uIFwiJXNcIiBvbiBk YXRhYmFzZSBcIiVzXCI6ICVzIiwgZGJpbmZvLT5wdWJuYW1lLCBkYmluZm8tPmRibmFtZSwg UFFlcnJvck1lc3NhZ2UoY29ubikpOworCisJCVBRY2xlYXIocmVzKTsKKwl9CisKKwlkZXN0 cm95UFFFeHBCdWZmZXIoc3RyKTsKK30KKworLyoKKyAqIENyZWF0ZSBhIHN1YnNjcmlwdGlv biB3aXRoIHNvbWUgcHJlZGVmaW5lZCBvcHRpb25zLgorICoKKyAqIEEgcmVwbGljYXRpb24g c2xvdCB3YXMgYWxyZWFkeSBjcmVhdGVkIGluIGEgcHJldmlvdXMgc3RlcC4gTGV0J3MgdXNl IGl0LiBCeQorICogZGVmYXVsdCwgdGhlIHN1YnNjcmlwdGlvbiBuYW1lIGlzIHVzZWQgYXMg cmVwbGljYXRpb24gc2xvdCBuYW1lLiBJdCBpcworICogbm90IHJlcXVpcmVkIHRvIGNvcHkg ZGF0YS4gVGhlIHN1YnNjcmlwdGlvbiB3aWxsIGJlIGNyZWF0ZWQgYnV0IGl0IHdpbGwgbm90 CisgKiBiZSBlbmFibGVkIG5vdy4gVGhhdCdzIGJlY2F1c2UgdGhlIHJlcGxpY2F0aW9uIHBy b2dyZXNzIG11c3QgYmUgc2V0IGFuZCB0aGUKKyAqIHJlcGxpY2F0aW9uIG9yaWdpbiBuYW1l IChvbmUgb2YgdGhlIGZ1bmN0aW9uIGFyZ3VtZW50cykgY29udGFpbnMgdGhlCisgKiBzdWJz Y3JpcHRpb24gT0lEIGluIGl0cyBuYW1lLiBPbmNlIHRoZSBzdWJzY3JpcHRpb24gaXMgY3Jl YXRlZCwKKyAqIHNldF9yZXBsaWNhdGlvbl9wcm9ncmVzcygpIGNhbiBvYnRhaW4gdGhlIGNo b3NlbiBvcmlnaW4gbmFtZSBhbmQgc2V0IHVwIGl0cworICogaW5pdGlhbCBsb2NhdGlvbi4K KyAqLworc3RhdGljIHZvaWQKK2NyZWF0ZV9zdWJzY3JpcHRpb24oUEdjb25uICpjb25uLCBM b2dpY2FsUmVwSW5mbyAqZGJpbmZvKQoreworCVBRRXhwQnVmZmVyIHN0ciA9IGNyZWF0ZVBR RXhwQnVmZmVyKCk7CisJUEdyZXN1bHQgICAqcmVzOworCisJQXNzZXJ0KGNvbm4gIT0gTlVM TCk7CisKKwlwZ19sb2dfaW5mbygiY3JlYXRpbmcgc3Vic2NyaXB0aW9uIFwiJXNcIiBvbiBk YXRhYmFzZSBcIiVzXCIiLCBkYmluZm8tPnN1Ym5hbWUsIGRiaW5mby0+ZGJuYW1lKTsKKwor CWFwcGVuZFBRRXhwQnVmZmVyKHN0ciwKKwkJCQkJICAiQ1JFQVRFIFNVQlNDUklQVElPTiAl cyBDT05ORUNUSU9OICclcycgUFVCTElDQVRJT04gJXMgIgorCQkJCQkgICJXSVRIIChjcmVh dGVfc2xvdCA9IGZhbHNlLCBjb3B5X2RhdGEgPSBmYWxzZSwgZW5hYmxlZCA9IGZhbHNlKSIs CisJCQkJCSAgZGJpbmZvLT5zdWJuYW1lLCBkYmluZm8tPnB1YmNvbm5pbmZvLCBkYmluZm8t PnB1Ym5hbWUpOworCisJcGdfbG9nX2RlYnVnKCJjb21tYW5kIGlzOiAlcyIsIHN0ci0+ZGF0 YSk7CisKKwlpZiAoIWRyeV9ydW4pCisJeworCQlyZXMgPSBQUWV4ZWMoY29ubiwgc3RyLT5k YXRhKTsKKwkJaWYgKFBRcmVzdWx0U3RhdHVzKHJlcykgIT0gUEdSRVNfQ09NTUFORF9PSykK KwkJeworCQkJcGdfbG9nX2Vycm9yKCJjb3VsZCBub3QgY3JlYXRlIHN1YnNjcmlwdGlvbiBc IiVzXCIgb24gZGF0YWJhc2UgXCIlc1wiOiAlcyIsCisJCQkJCQkgZGJpbmZvLT5zdWJuYW1l LCBkYmluZm8tPmRibmFtZSwgUFFlcnJvck1lc3NhZ2UoY29ubikpOworCQkJUFFmaW5pc2go Y29ubik7CisJCQlleGl0KDEpOworCQl9CisJfQorCisJLyogZm9yIGNsZWFudXAgcHVycG9z ZXMgKi8KKwlkYmluZm8tPm1hZGVfc3Vic2NyaXB0aW9uID0gdHJ1ZTsKKworCWlmICghZHJ5 X3J1bikKKwkJUFFjbGVhcihyZXMpOworCisJZGVzdHJveVBRRXhwQnVmZmVyKHN0cik7Cit9 CisKKy8qCisgKiBSZW1vdmUgc3Vic2NyaXB0aW9uIGlmIGl0IGNvdWxkbid0IGZpbmlzaCBh bGwgc3RlcHMuCisgKi8KK3N0YXRpYyB2b2lkCitkcm9wX3N1YnNjcmlwdGlvbihQR2Nvbm4g KmNvbm4sIExvZ2ljYWxSZXBJbmZvICpkYmluZm8pCit7CisJUFFFeHBCdWZmZXIgc3RyID0g Y3JlYXRlUFFFeHBCdWZmZXIoKTsKKwlQR3Jlc3VsdCAgICpyZXM7CisKKwlBc3NlcnQoY29u biAhPSBOVUxMKTsKKworCXBnX2xvZ19pbmZvKCJkcm9wcGluZyBzdWJzY3JpcHRpb24gXCIl c1wiIG9uIGRhdGFiYXNlIFwiJXNcIiIsIGRiaW5mby0+c3VibmFtZSwgZGJpbmZvLT5kYm5h bWUpOworCisJYXBwZW5kUFFFeHBCdWZmZXIoc3RyLCAiRFJPUCBTVUJTQ1JJUFRJT04gJXMi LCBkYmluZm8tPnN1Ym5hbWUpOworCisJcGdfbG9nX2RlYnVnKCJjb21tYW5kIGlzOiAlcyIs IHN0ci0+ZGF0YSk7CisKKwlpZiAoIWRyeV9ydW4pCisJeworCQlyZXMgPSBQUWV4ZWMoY29u biwgc3RyLT5kYXRhKTsKKwkJaWYgKFBRcmVzdWx0U3RhdHVzKHJlcykgIT0gUEdSRVNfQ09N TUFORF9PSykKKwkJCXBnX2xvZ19lcnJvcigiY291bGQgbm90IGRyb3Agc3Vic2NyaXB0aW9u IFwiJXNcIiBvbiBkYXRhYmFzZSBcIiVzXCI6ICVzIiwgZGJpbmZvLT5zdWJuYW1lLCBkYmlu Zm8tPmRibmFtZSwgUFFlcnJvck1lc3NhZ2UoY29ubikpOworCisJCVBRY2xlYXIocmVzKTsK Kwl9CisKKwlkZXN0cm95UFFFeHBCdWZmZXIoc3RyKTsKK30KKworLyoKKyAqIFNldHMgdGhl IHJlcGxpY2F0aW9uIHByb2dyZXNzIHRvIHRoZSBjb25zaXN0ZW50IExTTi4KKyAqCisgKiBU aGUgc3Vic2NyaWJlciBjYXVnaHQgdXAgdG8gdGhlIGNvbnNpc3RlbnQgTFNOIHByb3ZpZGVk IGJ5IHRoZSB0ZW1wb3JhcnkKKyAqIHJlcGxpY2F0aW9uIHNsb3QuIFRoZSBnb2FsIGlzIHRv IHNldCB1cCB0aGUgaW5pdGlhbCBsb2NhdGlvbiBmb3IgdGhlIGxvZ2ljYWwKKyAqIHJlcGxp Y2F0aW9uIHRoYXQgaXMgdGhlIGV4YWN0IExTTiB0aGF0IHRoZSBzdWJzY3JpYmVyIHdhcyBw cm9tb3RlZC4gT25jZSB0aGUKKyAqIHN1YnNjcmlwdGlvbiBpcyBlbmFibGVkIGl0IHdpbGwg c3RhcnQgc3RyZWFtaW5nIGZyb20gdGhhdCBsb2NhdGlvbiBvbndhcmRzLgorICogSW4gZHJ5 IHJ1biBtb2RlLCB0aGUgc3Vic2NyaXB0aW9uIE9JRCBhbmQgTFNOIGFyZSBzZXQgdG8gaW52 YWxpZCB2YWx1ZXMgZm9yCisgKiBwcmludGluZyBwdXJwb3Nlcy4KKyAqLworc3RhdGljIHZv aWQKK3NldF9yZXBsaWNhdGlvbl9wcm9ncmVzcyhQR2Nvbm4gKmNvbm4sIExvZ2ljYWxSZXBJ bmZvICpkYmluZm8sIGNvbnN0IGNoYXIgKmxzbikKK3sKKwlQUUV4cEJ1ZmZlciBzdHIgPSBj cmVhdGVQUUV4cEJ1ZmZlcigpOworCVBHcmVzdWx0ICAgKnJlczsKKwlPaWQJCQlzdWJvaWQ7 CisJY2hhcgkJb3JpZ2lubmFtZVtOQU1FREFUQUxFTl07CisJY2hhcgkJbHNuc3RyWzE3ICsg MV07IC8qIE1BWFBHX0xTTkxFTiA9IDE3ICovCisKKwlBc3NlcnQoY29ubiAhPSBOVUxMKTsK KworCWFwcGVuZFBRRXhwQnVmZmVyKHN0ciwKKwkJCQkJICAiU0VMRUNUIG9pZCBGUk9NIHBn X2NhdGFsb2cucGdfc3Vic2NyaXB0aW9uIFdIRVJFIHN1Ym5hbWUgPSAnJXMnIiwgZGJpbmZv LT5zdWJuYW1lKTsKKworCXJlcyA9IFBRZXhlYyhjb25uLCBzdHItPmRhdGEpOworCWlmIChQ UXJlc3VsdFN0YXR1cyhyZXMpICE9IFBHUkVTX1RVUExFU19PSykKKwl7CisJCXBnX2xvZ19l cnJvcigiY291bGQgbm90IG9idGFpbiBzdWJzY3JpcHRpb24gT0lEOiAlcyIsCisJCQkJCSBQ UXJlc3VsdEVycm9yTWVzc2FnZShyZXMpKTsKKwkJUFFjbGVhcihyZXMpOworCQlQUWZpbmlz aChjb25uKTsKKwkJZXhpdCgxKTsKKwl9CisKKwlpZiAoUFFudHVwbGVzKHJlcykgIT0gMSAm JiAhZHJ5X3J1bikKKwl7CisJCXBnX2xvZ19lcnJvcigiY291bGQgbm90IG9idGFpbiBzdWJz Y3JpcHRpb24gT0lEOiBnb3QgJWQgcm93cywgZXhwZWN0ZWQgJWQgcm93cyIsCisJCQkJCSBQ UW50dXBsZXMocmVzKSwgMSk7CisJCVBRY2xlYXIocmVzKTsKKwkJUFFmaW5pc2goY29ubik7 CisJCWV4aXQoMSk7CisJfQorCisJaWYgKGRyeV9ydW4pCisJeworCQlzdWJvaWQgPSBJbnZh bGlkT2lkOworCQlzbnByaW50Zihsc25zdHIsIHNpemVvZihsc25zdHIpLCAiJVgvJVgiLCBM U05fRk9STUFUX0FSR1MoKFhMb2dSZWNQdHIpIEludmFsaWRYTG9nUmVjUHRyKSk7CisJfQor CWVsc2UKKwl7CisJCXN1Ym9pZCA9IHN0cnRvdWwoUFFnZXR2YWx1ZShyZXMsIDAsIDApLCBO VUxMLCAxMCk7CisJCXNucHJpbnRmKGxzbnN0ciwgc2l6ZW9mKGxzbnN0ciksICIlcyIsIGxz bik7CisJfQorCisJLyoKKwkgKiBUaGUgb3JpZ2luIG5hbWUgaXMgZGVmaW5lZCBhcyBwZ18l dS4gJXUgaXMgdGhlIHN1YnNjcmlwdGlvbiBPSUQuIFNlZQorCSAqIEFwcGx5V29ya2VyTWFp bigpLgorCSAqLworCXNucHJpbnRmKG9yaWdpbm5hbWUsIHNpemVvZihvcmlnaW5uYW1lKSwg InBnXyV1Iiwgc3Vib2lkKTsKKworCVBRY2xlYXIocmVzKTsKKworCXBnX2xvZ19pbmZvKCJz ZXR0aW5nIHRoZSByZXBsaWNhdGlvbiBwcm9ncmVzcyAobm9kZSBuYW1lIFwiJXNcIiA7IExT TiAlcykgb24gZGF0YWJhc2UgXCIlc1wiIiwKKwkJCQlvcmlnaW5uYW1lLCBsc25zdHIsIGRi aW5mby0+ZGJuYW1lKTsKKworCXJlc2V0UFFFeHBCdWZmZXIoc3RyKTsKKwlhcHBlbmRQUUV4 cEJ1ZmZlcihzdHIsCisJCQkJCSAgIlNFTEVDVCBwZ19jYXRhbG9nLnBnX3JlcGxpY2F0aW9u X29yaWdpbl9hZHZhbmNlKCclcycsICclcycpIiwgb3JpZ2lubmFtZSwgbHNuc3RyKTsKKwor CXBnX2xvZ19kZWJ1ZygiY29tbWFuZCBpczogJXMiLCBzdHItPmRhdGEpOworCisJaWYgKCFk cnlfcnVuKQorCXsKKwkJcmVzID0gUFFleGVjKGNvbm4sIHN0ci0+ZGF0YSk7CisJCWlmIChQ UXJlc3VsdFN0YXR1cyhyZXMpICE9IFBHUkVTX1RVUExFU19PSykKKwkJeworCQkJcGdfbG9n X2Vycm9yKCJjb3VsZCBub3Qgc2V0IHJlcGxpY2F0aW9uIHByb2dyZXNzIGZvciB0aGUgc3Vi c2NyaXB0aW9uIFwiJXNcIjogJXMiLAorCQkJCQkJIGRiaW5mby0+c3VibmFtZSwgUFFyZXN1 bHRFcnJvck1lc3NhZ2UocmVzKSk7CisJCQlQUWZpbmlzaChjb25uKTsKKwkJCWV4aXQoMSk7 CisJCX0KKworCQlQUWNsZWFyKHJlcyk7CisJfQorCisJZGVzdHJveVBRRXhwQnVmZmVyKHN0 cik7Cit9CisKKy8qCisgKiBFbmFibGVzIHRoZSBzdWJzY3JpcHRpb24uCisgKgorICogVGhl IHN1YnNjcmlwdGlvbiB3YXMgY3JlYXRlZCBpbiBhIHByZXZpb3VzIHN0ZXAgYnV0IGl0IHdh cyBkaXNhYmxlZC4gQWZ0ZXIKKyAqIGFkanVzdGluZyB0aGUgaW5pdGlhbCBsb2NhdGlvbiwg ZW5hYmxpbmcgdGhlIHN1YnNjcmlwdGlvbiBpcyB0aGUgbGFzdCBzdGVwCisgKiBvZiB0aGlz IHNldHVwLgorICovCitzdGF0aWMgdm9pZAorZW5hYmxlX3N1YnNjcmlwdGlvbihQR2Nvbm4g KmNvbm4sIExvZ2ljYWxSZXBJbmZvICpkYmluZm8pCit7CisJUFFFeHBCdWZmZXIgc3RyID0g Y3JlYXRlUFFFeHBCdWZmZXIoKTsKKwlQR3Jlc3VsdCAgICpyZXM7CisKKwlBc3NlcnQoY29u biAhPSBOVUxMKTsKKworCXBnX2xvZ19pbmZvKCJlbmFibGluZyBzdWJzY3JpcHRpb24gXCIl c1wiIG9uIGRhdGFiYXNlIFwiJXNcIiIsIGRiaW5mby0+c3VibmFtZSwgZGJpbmZvLT5kYm5h bWUpOworCisJYXBwZW5kUFFFeHBCdWZmZXIoc3RyLCAiQUxURVIgU1VCU0NSSVBUSU9OICVz IEVOQUJMRSIsIGRiaW5mby0+c3VibmFtZSk7CisKKwlwZ19sb2dfZGVidWcoImNvbW1hbmQg aXM6ICVzIiwgc3RyLT5kYXRhKTsKKworCWlmICghZHJ5X3J1bikKKwl7CisJCXJlcyA9IFBR ZXhlYyhjb25uLCBzdHItPmRhdGEpOworCQlpZiAoUFFyZXN1bHRTdGF0dXMocmVzKSAhPSBQ R1JFU19DT01NQU5EX09LKQorCQl7CisJCQlwZ19sb2dfZXJyb3IoImNvdWxkIG5vdCBlbmFi bGUgc3Vic2NyaXB0aW9uIFwiJXNcIjogJXMiLCBkYmluZm8tPnN1Ym5hbWUsCisJCQkJCQkg UFFlcnJvck1lc3NhZ2UoY29ubikpOworCQkJUFFmaW5pc2goY29ubik7CisJCQlleGl0KDEp OworCQl9CisKKwkJUFFjbGVhcihyZXMpOworCX0KKworCWRlc3Ryb3lQUUV4cEJ1ZmZlcihz dHIpOworfQorCitpbnQKK21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCXN0YXRp YyBzdHJ1Y3Qgb3B0aW9uIGxvbmdfb3B0aW9uc1tdID0KKwl7CisJCXsiaGVscCIsIG5vX2Fy Z3VtZW50LCBOVUxMLCAnPyd9LAorCQl7InZlcnNpb24iLCBub19hcmd1bWVudCwgTlVMTCwg J1YnfSwKKwkJeyJwZ2RhdGEiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ0QnfSwKKwkJ eyJwdWJsaXNoZXItY29ubmluZm8iLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ1AnfSwK KwkJeyJzdWJzY3JpYmVyLWNvbm5pbmZvIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdT J30sCisJCXsiZGF0YWJhc2UiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ2QnfSwKKwkJ eyJkcnktcnVuIiwgbm9fYXJndW1lbnQsIE5VTEwsICduJ30sCisJCXsidmVyYm9zZSIsIG5v X2FyZ3VtZW50LCBOVUxMLCAndid9LAorCQl7TlVMTCwgMCwgTlVMTCwgMH0KKwl9OworCisJ aW50CQkJYzsKKwlpbnQJCQlvcHRpb25faW5kZXg7CisJaW50CQkJcmM7CisKKwljaGFyCSAg ICpwZ19jdGxfY21kOworCisJY2hhcgkgICAqYmFzZV9kaXI7CisJY2hhcgkgICAqc2VydmVy X3N0YXJ0X2xvZzsKKworCWNoYXIJCXRpbWVidWZbMTI4XTsKKwlzdHJ1Y3QgdGltZXZhbCB0 aW1lOworCXRpbWVfdAkJdHQ7CisJaW50CQkJbGVuOworCisJY2hhcgkgICAqcHViX2Jhc2Vf Y29ubmluZm8gPSBOVUxMOworCWNoYXIJICAgKnN1Yl9iYXNlX2Nvbm5pbmZvID0gTlVMTDsK KwljaGFyCSAgICpkYm5hbWVfY29ubmluZm8gPSBOVUxMOworCisJdWludDY0CQlwdWJfc3lz aWQ7CisJdWludDY0CQlzdWJfc3lzaWQ7CisJc3RydWN0IHN0YXQgc3RhdGJ1ZjsKKworCVBH Y29ubgkgICAqY29ubjsKKwljaGFyCSAgICpjb25zaXN0ZW50X2xzbjsKKworCVBRRXhwQnVm ZmVyIHJlY292ZXJ5Y29uZmNvbnRlbnRzID0gTlVMTDsKKworCWNoYXIJCXBpZGZpbGVbTUFY UEdQQVRIXTsKKworCWludAkJCWk7CisKKwlwZ19sb2dnaW5nX2luaXQoYXJndlswXSk7CisJ cGdfbG9nZ2luZ19zZXRfbGV2ZWwoUEdfTE9HX1dBUk5JTkcpOworCXByb2duYW1lID0gZ2V0 X3Byb2duYW1lKGFyZ3ZbMF0pOworCXNldF9wZ2xvY2FsZV9wZ3NlcnZpY2UoYXJndlswXSwg UEdfVEVYVERPTUFJTigicGdfc3Vic2NyaWJlciIpKTsKKworCWlmIChhcmdjID4gMSkKKwl7 CisJCWlmIChzdHJjbXAoYXJndlsxXSwgIi0taGVscCIpID09IDAgfHwgc3RyY21wKGFyZ3Zb MV0sICItPyIpID09IDApCisJCXsKKwkJCXVzYWdlKCk7CisJCQlleGl0KDApOworCQl9CisJ CWVsc2UgaWYgKHN0cmNtcChhcmd2WzFdLCAiLVYiKSA9PSAwCisJCQkJIHx8IHN0cmNtcChh cmd2WzFdLCAiLS12ZXJzaW9uIikgPT0gMCkKKwkJeworCQkJcHV0cygicGdfc3Vic2NyaWJl ciAoUG9zdGdyZVNRTCkgIiBQR19WRVJTSU9OKTsKKwkJCWV4aXQoMCk7CisJCX0KKwl9CisK KwlhdGV4aXQoY2xlYW51cF9vYmplY3RzX2F0ZXhpdCk7CisKKwkvKgorCSAqIERvbid0IGFs bG93IGl0IHRvIGJlIHJ1biBhcyByb290LiBJdCB1c2VzIHBnX2N0bCB3aGljaCBkb2VzIG5v dCBhbGxvdworCSAqIGl0IGVpdGhlci4KKwkgKi8KKyNpZm5kZWYgV0lOMzIKKwlpZiAoZ2V0 ZXVpZCgpID09IDApCisJeworCQlwZ19sb2dfZXJyb3IoImNhbm5vdCBiZSBleGVjdXRlZCBi eSBcInJvb3RcIiIpOworCQlwZ19sb2dfZXJyb3JfaGludCgiWW91IG11c3QgcnVuICVzIGFz IHRoZSBQb3N0Z3JlU1FMIHN1cGVydXNlci4iLAorCQkJCQkJICBwcm9nbmFtZSk7CisJCWV4 aXQoMSk7CisJfQorI2VuZGlmCisKKwl3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyhhcmdjLCBh cmd2LCAiRDpQOlM6ZDpudiIsCisJCQkJCQkJbG9uZ19vcHRpb25zLCAmb3B0aW9uX2luZGV4 KSkgIT0gLTEpCisJeworCQlzd2l0Y2ggKGMpCisJCXsKKwkJCWNhc2UgJ0QnOgorCQkJCXN1 YnNjcmliZXJfZGlyID0gcGdfc3RyZHVwKG9wdGFyZyk7CisJCQkJYnJlYWs7CisJCQljYXNl ICdQJzoKKwkJCQlwdWJfY29ubmluZm9fc3RyID0gcGdfc3RyZHVwKG9wdGFyZyk7CisJCQkJ YnJlYWs7CisJCQljYXNlICdTJzoKKwkJCQlzdWJfY29ubmluZm9fc3RyID0gcGdfc3RyZHVw KG9wdGFyZyk7CisJCQkJYnJlYWs7CisJCQljYXNlICdkJzoKKwkJCQkvKiBJZ25vcmUgZHVw bGljYXRlZCBkYXRhYmFzZSBuYW1lcy4gKi8KKwkJCQlpZiAoIXNpbXBsZV9zdHJpbmdfbGlz dF9tZW1iZXIoJmRhdGFiYXNlX25hbWVzLCBvcHRhcmcpKQorCQkJCXsKKwkJCQkJc2ltcGxl X3N0cmluZ19saXN0X2FwcGVuZCgmZGF0YWJhc2VfbmFtZXMsIG9wdGFyZyk7CisJCQkJCW51 bV9kYnMrKzsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlICduJzoKKwkJCQlkcnlfcnVu ID0gdHJ1ZTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ3YnOgorCQkJCXBnX2xvZ2dpbmdfaW5j cmVhc2VfdmVyYm9zaXR5KCk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCS8qIGdl dG9wdF9sb25nIGFscmVhZHkgZW1pdHRlZCBhIGNvbXBsYWludCAqLworCQkJCXBnX2xvZ19l cnJvcl9oaW50KCJUcnkgXCIlcyAtLWhlbHBcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iLCBw cm9nbmFtZSk7CisJCQkJZXhpdCgxKTsKKwkJfQorCX0KKworCS8qCisJICogQW55IG5vbi1v cHRpb24gYXJndW1lbnRzPworCSAqLworCWlmIChvcHRpbmQgPCBhcmdjKQorCXsKKwkJcGdf bG9nX2Vycm9yKCJ0b28gbWFueSBjb21tYW5kLWxpbmUgYXJndW1lbnRzIChmaXJzdCBpcyBc IiVzXCIpIiwKKwkJCQkJIGFyZ3Zbb3B0aW5kXSk7CisJCXBnX2xvZ19lcnJvcl9oaW50KCJU cnkgXCIlcyAtLWhlbHBcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iLCBwcm9nbmFtZSk7CisJ CWV4aXQoMSk7CisJfQorCisJLyoKKwkgKiBSZXF1aXJlZCBhcmd1bWVudHMKKwkgKi8KKwlp ZiAoc3Vic2NyaWJlcl9kaXIgPT0gTlVMTCkKKwl7CisJCXBnX2xvZ19lcnJvcigibm8gc3Vi c2NyaWJlciBkYXRhIGRpcmVjdG9yeSBzcGVjaWZpZWQiKTsKKwkJcGdfbG9nX2Vycm9yX2hp bnQoIlRyeSBcIiVzIC0taGVscFwiIGZvciBtb3JlIGluZm9ybWF0aW9uLiIsIHByb2duYW1l KTsKKwkJZXhpdCgxKTsKKwl9CisKKwkvKgorCSAqIFBhcnNlIGNvbm5lY3Rpb24gc3RyaW5n LiBCdWlsZCBhIGJhc2UgY29ubmVjdGlvbiBzdHJpbmcgdGhhdCBtaWdodCBiZQorCSAqIHJl dXNlZCBieSBtdWx0aXBsZSBkYXRhYmFzZXMuCisJICovCisJaWYgKHB1Yl9jb25uaW5mb19z dHIgPT0gTlVMTCkKKwl7CisJCS8qCisJCSAqIFRPRE8gdXNlIHByaW1hcnlfY29ubmluZm8g KGlmIGF2YWlsYWJsZSkgZnJvbSBzdWJzY3JpYmVyIGFuZAorCQkgKiBleHRyYWN0IHB1Ymxp c2hlciBjb25uZWN0aW9uIHN0cmluZy4gQXNzdW1lIHRoYXQgdGhlcmUgYXJlCisJCSAqIGlk ZW50aWNhbCBlbnRyaWVzIGZvciBwaHlzaWNhbCBhbmQgbG9naWNhbCByZXBsaWNhdGlvbi4g SWYgdGhlcmUgaXMKKwkJICogbm90LCB3ZSB3b3VsZCBmYWlsIGFueXdheS4KKwkJICovCisJ CXBnX2xvZ19lcnJvcigibm8gcHVibGlzaGVyIGNvbm5lY3Rpb24gc3RyaW5nIHNwZWNpZmll ZCIpOworCQlwZ19sb2dfZXJyb3JfaGludCgiVHJ5IFwiJXMgLS1oZWxwXCIgZm9yIG1vcmUg aW5mb3JtYXRpb24uIiwgcHJvZ25hbWUpOworCQlleGl0KDEpOworCX0KKwlwdWJfYmFzZV9j b25uaW5mbyA9IGdldF9iYXNlX2Nvbm5pbmZvKHB1Yl9jb25uaW5mb19zdHIsIGRibmFtZV9j b25uaW5mbywKKwkJCQkJCQkJCQkgICJwdWJsaXNoZXIiKTsKKwlpZiAocHViX2Jhc2VfY29u bmluZm8gPT0gTlVMTCkKKwkJZXhpdCgxKTsKKworCWlmIChzdWJfY29ubmluZm9fc3RyID09 IE5VTEwpCisJeworCQlwZ19sb2dfZXJyb3IoIm5vIHN1YnNjcmliZXIgY29ubmVjdGlvbiBz dHJpbmcgc3BlY2lmaWVkIik7CisJCXBnX2xvZ19lcnJvcl9oaW50KCJUcnkgXCIlcyAtLWhl bHBcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iLCBwcm9nbmFtZSk7CisJCWV4aXQoMSk7CisJ fQorCXN1Yl9iYXNlX2Nvbm5pbmZvID0gZ2V0X2Jhc2VfY29ubmluZm8oc3ViX2Nvbm5pbmZv X3N0ciwgTlVMTCwgInN1YnNjcmliZXIiKTsKKwlpZiAoc3ViX2Jhc2VfY29ubmluZm8gPT0g TlVMTCkKKwkJZXhpdCgxKTsKKworCWlmIChkYXRhYmFzZV9uYW1lcy5oZWFkID09IE5VTEwp CisJeworCQlwZ19sb2dfaW5mbygibm8gZGF0YWJhc2Ugd2FzIHNwZWNpZmllZCIpOworCisJ CS8qCisJCSAqIElmIC0tZGF0YWJhc2Ugb3B0aW9uIGlzIG5vdCBwcm92aWRlZCwgdHJ5IHRv IG9idGFpbiB0aGUgZGJuYW1lIGZyb20KKwkJICogdGhlIHB1Ymxpc2hlciBjb25uaW5mby4g SWYgZGJuYW1lIHBhcmFtZXRlciBpcyBub3QgYXZhaWxhYmxlLCBlcnJvcgorCQkgKiBvdXQu CisJCSAqLworCQlpZiAoZGJuYW1lX2Nvbm5pbmZvKQorCQl7CisJCQlzaW1wbGVfc3RyaW5n X2xpc3RfYXBwZW5kKCZkYXRhYmFzZV9uYW1lcywgZGJuYW1lX2Nvbm5pbmZvKTsKKwkJCW51 bV9kYnMrKzsKKworCQkJcGdfbG9nX2luZm8oImRhdGFiYXNlIFwiJXNcIiB3YXMgZXh0cmFj dGVkIGZyb20gdGhlIHB1Ymxpc2hlciBjb25uZWN0aW9uIHN0cmluZyIsCisJCQkJCQlkYm5h bWVfY29ubmluZm8pOworCQl9CisJCWVsc2UKKwkJeworCQkJcGdfbG9nX2Vycm9yKCJubyBk YXRhYmFzZSBuYW1lIHNwZWNpZmllZCIpOworCQkJcGdfbG9nX2Vycm9yX2hpbnQoIlRyeSBc IiVzIC0taGVscFwiIGZvciBtb3JlIGluZm9ybWF0aW9uLiIsIHByb2duYW1lKTsKKwkJCWV4 aXQoMSk7CisJCX0KKwl9CisKKwkvKgorCSAqIEdldCB0aGUgYWJzb2x1dGUgcGF0aCBvZiBw Z19jdGwgYW5kIHBnX3Jlc2V0d2FsIG9uIHRoZSBzdWJzY3JpYmVyLgorCSAqLworCWlmICgh Z2V0X2V4ZWNfcGF0aChhcmd2WzBdKSkKKwkJZXhpdCgxKTsKKworCS8qIHJ1ZGltZW50YXJ5 IGNoZWNrIGZvciBhIGRhdGEgZGlyZWN0b3J5LiAqLworCWlmICghY2hlY2tfZGF0YV9kaXJl Y3Rvcnkoc3Vic2NyaWJlcl9kaXIpKQorCQlleGl0KDEpOworCisJLyogU3RvcmUgZGF0YWJh c2UgaW5mb3JtYXRpb24gZm9yIHB1Ymxpc2hlciBhbmQgc3Vic2NyaWJlci4gKi8KKwlkYmlu Zm8gPSBzdG9yZV9wdWJfc3ViX2luZm8ocHViX2Jhc2VfY29ubmluZm8sIHN1Yl9iYXNlX2Nv bm5pbmZvKTsKKworCS8qCisJICogQ2hlY2sgaWYgdGhlIHN1YnNjcmliZXIgZGF0YSBkaXJl Y3RvcnkgaGFzIHRoZSBzYW1lIHN5c3RlbSBpZGVudGlmaWVyCisJICogdGhhbiB0aGUgcHVi bGlzaGVyIGRhdGEgZGlyZWN0b3J5LgorCSAqLworCXB1Yl9zeXNpZCA9IGdldF9zeXNpZF9m cm9tX2Nvbm4oZGJpbmZvWzBdLnB1YmNvbm5pbmZvKTsKKwlzdWJfc3lzaWQgPSBnZXRfY29u dHJvbF9mcm9tX2RhdGFkaXIoc3Vic2NyaWJlcl9kaXIpOworCWlmIChwdWJfc3lzaWQgIT0g c3ViX3N5c2lkKQorCXsKKwkJcGdfbG9nX2Vycm9yKCJzdWJzY3JpYmVyIGRhdGEgZGlyZWN0 b3J5IGlzIG5vdCBhIGNvcHkgb2YgdGhlIHNvdXJjZSBkYXRhYmFzZSBjbHVzdGVyIik7CisJ CWV4aXQoMSk7CisJfQorCisJLyoKKwkgKiBDcmVhdGUgdGhlIG91dHB1dCBkaXJlY3Rvcnkg dG8gc3RvcmUgYW55IGRhdGEgZ2VuZXJhdGVkIGJ5IHRoaXMgdG9vbC4KKwkgKi8KKwliYXNl X2RpciA9IChjaGFyICopIHBnX21hbGxvYzAoTUFYUEdQQVRIKTsKKwlsZW4gPSBzbnByaW50 ZihiYXNlX2RpciwgTUFYUEdQQVRILCAiJXMvJXMiLCBzdWJzY3JpYmVyX2RpciwgUEdTX09V VFBVVF9ESVIpOworCWlmIChsZW4gPj0gTUFYUEdQQVRIKQorCXsKKwkJcGdfbG9nX2Vycm9y KCJkaXJlY3RvcnkgcGF0aCBmb3Igc3Vic2NyaWJlciBpcyB0b28gbG9uZyIpOworCQlleGl0 KDEpOworCX0KKworCWlmIChta2RpcihiYXNlX2RpciwgcGdfZGlyX2NyZWF0ZV9tb2RlKSA8 IDAgJiYgZXJybm8gIT0gRUVYSVNUKQorCXsKKwkJcGdfbG9nX2Vycm9yKCJjb3VsZCBub3Qg Y3JlYXRlIGRpcmVjdG9yeSBcIiVzXCI6ICVtIiwgYmFzZV9kaXIpOworCQlleGl0KDEpOwor CX0KKworCS8qIHN1YnNjcmliZXIgUElEIGZpbGUuICovCisJc25wcmludGYocGlkZmlsZSwg TUFYUEdQQVRILCAiJXMvcG9zdG1hc3Rlci5waWQiLCBzdWJzY3JpYmVyX2Rpcik7CisKKwkv KgorCSAqIFN0b3AgdGhlIHN1YnNjcmliZXIgaWYgaXQgaXMgYSBzdGFuZGJ5IHNlcnZlci4g QmVmb3JlIGV4ZWN1dGluZyB0aGUKKwkgKiB0cmFuc2Zvcm1hdGlvbiBzdGVwcywgbWFrZSBz dXJlIHRoZSBzdWJzY3JpYmVyIGlzIG5vdCBydW5uaW5nIGJlY2F1c2UKKwkgKiBvbmUgb2Yg dGhlIHN0ZXBzIGlzIHRvIG1vZGlmeSBzb21lIHJlY292ZXJ5IHBhcmFtZXRlcnMgdGhhdCBy ZXF1aXJlIGEKKwkgKiByZXN0YXJ0LgorCSAqLworCWlmIChzdGF0KHBpZGZpbGUsICZzdGF0 YnVmKSA9PSAwKQorCXsKKwkJLyoKKwkJICogU2luY2UgdGhlIHN0YW5kYnkgc2VydmVyIGlz IHJ1bm5pbmcsIGNoZWNrIGlmIGl0IGlzIHVzaW5nIGFuCisJCSAqIGV4aXN0aW5nIHJlcGxp Y2F0aW9uIHNsb3QgZm9yIFdBTCByZXRlbnRpb24gcHVycG9zZXMuIFRoaXMKKwkJICogcmVw bGljYXRpb24gc2xvdCBoYXMgbm8gdXNlIGFmdGVyIHRoZSB0cmFuc2Zvcm1hdGlvbiwgaGVu Y2UsIGl0CisJCSAqIHdpbGwgYmUgcmVtb3ZlZCBhdCB0aGUgZW5kIG9mIHRoaXMgcHJvY2Vz cy4KKwkJICovCisJCXByaW1hcnlfc2xvdF9uYW1lID0gdXNlX3ByaW1hcnlfc2xvdF9uYW1l KCk7CisJCWlmIChwcmltYXJ5X3Nsb3RfbmFtZSAhPSBOVUxMKQorCQkJcGdfbG9nX2luZm8o InByaW1hcnkgaGFzIHJlcGxpY2F0aW9uIHNsb3QgXCIlc1wiIiwgcHJpbWFyeV9zbG90X25h bWUpOworCisJCXBnX2xvZ19pbmZvKCJzdWJzY3JpYmVyIGlzIHVwIGFuZCBydW5uaW5nIik7 CisJCXBnX2xvZ19pbmZvKCJzdG9wcGluZyB0aGUgc2VydmVyIHRvIHN0YXJ0IHRoZSB0cmFu c2Zvcm1hdGlvbiBzdGVwcyIpOworCisJCXBnX2N0bF9jbWQgPSBwc3ByaW50ZigiXCIlc1wi IHN0b3AgLUQgXCIlc1wiIC1zIiwgcGdfY3RsX3BhdGgsIHN1YnNjcmliZXJfZGlyKTsKKwkJ cmMgPSBzeXN0ZW0ocGdfY3RsX2NtZCk7CisJCXBnX2N0bF9zdGF0dXMocGdfY3RsX2NtZCwg cmMsIDApOworCX0KKworCS8qCisJICogQ3JlYXRlIGEgcmVwbGljYXRpb24gc2xvdCBmb3Ig ZWFjaCBkYXRhYmFzZSBvbiB0aGUgcHVibGlzaGVyLgorCSAqLworCWlmICghY3JlYXRlX2Fs bF9sb2dpY2FsX3JlcGxpY2F0aW9uX3Nsb3RzKGRiaW5mbykpCisJCWV4aXQoMSk7CisKKwkv KgorCSAqIENyZWF0ZSBhIGxvZ2ljYWwgcmVwbGljYXRpb24gc2xvdCB0byBnZXQgYSBjb25z aXN0ZW50IExTTi4KKwkgKgorCSAqIFRoaXMgY29uc2lzdGVudCBMU04gd2lsbCBiZSB1c2Vk IGxhdGVyIHRvIGFkdmFuY2VkIHRoZSByZWNlbnRseSBjcmVhdGVkCisJICogcmVwbGljYXRp b24gc2xvdHMuIFdlIGNhbm5vdCB1c2UgdGhlIGxhc3QgY3JlYXRlZCByZXBsaWNhdGlvbiBz bG90CisJICogYmVjYXVzZSB0aGUgY29uc2lzdGVudCBMU04gc2hvdWxkIGJlIG9idGFpbmVk ICphZnRlciogdGhlIGJhc2UgYmFja3VwCisJICogZmluaXNoZXMgKGFuZCB0aGUgYmFzZSBi YWNrdXAgc2hvdWxkIGluY2x1ZGUgdGhlIGxvZ2ljYWwgcmVwbGljYXRpb24KKwkgKiBzbG90 cykuCisJICoKKwkgKiBYWFggd2Ugc2hvdWxkIHByb2JhYmx5IHVzZSB0aGUgbGFzdCBjcmVh dGVkIHJlcGxpY2F0aW9uIHNsb3QgdG8gZ2V0IGEKKwkgKiBjb25zaXN0ZW50IExTTiBidXQg aXQgc2hvdWxkIGJlIGNoYW5nZWQgYWZ0ZXIgYWRkaW5nIHBnX2Jhc2ViYWNrdXAKKwkgKiBz dXBwb3J0LgorCSAqCisJICogQSB0ZW1wb3JhcnkgcmVwbGljYXRpb24gc2xvdCBpcyBub3Qg dXNlZCBoZXJlIHRvIGF2b2lkIGtlZXBpbmcgYQorCSAqIHJlcGxpY2F0aW9uIGNvbm5lY3Rp b24gb3BlbiAoZGVwZW5kaW5nIHdoZW4gYmFzZSBiYWNrdXAgd2FzIHRha2VuLCB0aGUKKwkg KiBjb25uZWN0aW9uIHNob3VsZCBiZSBvcGVuIGZvciBhIGZldyBob3VycykuCisJICovCisJ Y29ubiA9IGNvbm5lY3RfZGF0YWJhc2UoZGJpbmZvWzBdLnB1YmNvbm5pbmZvKTsKKwlpZiAo Y29ubiA9PSBOVUxMKQorCQlleGl0KDEpOworCWNvbnNpc3RlbnRfbHNuID0gY3JlYXRlX2xv Z2ljYWxfcmVwbGljYXRpb25fc2xvdChjb25uLCAmZGJpbmZvWzBdLAorCQkJCQkJCQkJCQkJ CSB0ZW1wX3JlcGxzbG90KTsKKworCS8qCisJICogV3JpdGUgcmVjb3ZlcnkgcGFyYW1ldGVy cy4KKwkgKgorCSAqIERlc3BpdGUgb2YgdGhlIHJlY292ZXJ5IHBhcmFtZXRlcnMgd2lsbCBi ZSB3cml0dGVuIHRvIHRoZSBzdWJzY3JpYmVyLAorCSAqIHVzZSBhIHB1Ymxpc2hlciBjb25u ZWN0aW9uIGZvciB0aGUgZm9sbHdpbmcgcmVjb3ZlcnkgZnVuY3Rpb25zLiBUaGUKKwkgKiBj b25uZWN0aW9uIGlzIG9ubHkgdXNlZCB0byBjaGVjayB0aGUgY3VycmVudCBzZXJ2ZXIgdmVy c2lvbiAocGh5c2ljYWwKKwkgKiByZXBsaWNhLCBzYW1lIHNlcnZlciB2ZXJzaW9uKS4gVGhl IHN1YnNjcmliZXIgaXMgbm90IHJ1bm5pbmcgeWV0LiBJbgorCSAqIGRyeSBydW4gbW9kZSwg dGhlIHJlY292ZXJ5IHBhcmFtZXRlcnMgKndvbid0KiBiZSB3cml0dGVuLiBBbiBpbnZhbGlk CisJICogTFNOIGlzIHVzZWQgZm9yIHByaW50aW5nIHB1cnBvc2VzLgorCSAqLworCXJlY292 ZXJ5Y29uZmNvbnRlbnRzID0gR2VuZXJhdGVSZWNvdmVyeUNvbmZpZyhjb25uLCBOVUxMKTsK KwlhcHBlbmRQUUV4cEJ1ZmZlcihyZWNvdmVyeWNvbmZjb250ZW50cywgInJlY292ZXJ5X3Rh cmdldF9pbmNsdXNpdmUgPSB0cnVlXG4iKTsKKwlhcHBlbmRQUUV4cEJ1ZmZlcihyZWNvdmVy eWNvbmZjb250ZW50cywgInJlY292ZXJ5X3RhcmdldF9hY3Rpb24gPSBwcm9tb3RlXG4iKTsK KworCWlmIChkcnlfcnVuKQorCXsKKwkJYXBwZW5kUFFFeHBCdWZmZXIocmVjb3Zlcnljb25m Y29udGVudHMsICIjIGRyeSBydW4gbW9kZSIpOworCQlhcHBlbmRQUUV4cEJ1ZmZlcihyZWNv dmVyeWNvbmZjb250ZW50cywgInJlY292ZXJ5X3RhcmdldF9sc24gPSAnJVgvJVgnXG4iLAor CQkJCQkJICBMU05fRk9STUFUX0FSR1MoKFhMb2dSZWNQdHIpIEludmFsaWRYTG9nUmVjUHRy KSk7CisJfQorCWVsc2UKKwl7CisJCWFwcGVuZFBRRXhwQnVmZmVyKHJlY292ZXJ5Y29uZmNv bnRlbnRzLCAicmVjb3ZlcnlfdGFyZ2V0X2xzbiA9ICclcydcbiIsCisJCQkJCQkgIGNvbnNp c3RlbnRfbHNuKTsKKwkJV3JpdGVSZWNvdmVyeUNvbmZpZyhjb25uLCBzdWJzY3JpYmVyX2Rp ciwgcmVjb3Zlcnljb25mY29udGVudHMpOworCX0KKwlkaXNjb25uZWN0X2RhdGFiYXNlKGNv bm4pOworCisJcGdfbG9nX2RlYnVnKCJyZWNvdmVyeSBwYXJhbWV0ZXJzOlxuJXMiLCByZWNv dmVyeWNvbmZjb250ZW50cy0+ZGF0YSk7CisKKwkvKgorCSAqIFN0YXJ0IHN1YnNjcmliZXIg YW5kIHdhaXQgdW50aWwgYWNjZXB0aW5nIGNvbm5lY3Rpb25zLgorCSAqLworCXBnX2xvZ19p bmZvKCJzdGFydGluZyB0aGUgc3Vic2NyaWJlciIpOworCisJLyogYXBwZW5kIHRpbWVzdGFt cCB3aXRoIElTTyA4NjAxIGZvcm1hdC4gKi8KKwlnZXR0aW1lb2ZkYXkoJnRpbWUsIE5VTEwp OworCXR0ID0gKHRpbWVfdCkgdGltZS50dl9zZWM7CisJc3RyZnRpbWUodGltZWJ1Ziwgc2l6 ZW9mKHRpbWVidWYpLCAiJVklbSVkVCVIJU0lUyIsIGxvY2FsdGltZSgmdHQpKTsKKwlzbnBy aW50Zih0aW1lYnVmICsgc3RybGVuKHRpbWVidWYpLCBzaXplb2YodGltZWJ1ZikgLSBzdHJs ZW4odGltZWJ1ZiksCisJCQkgIi4lMDNkIiwgKGludCkgKHRpbWUudHZfdXNlYyAvIDEwMDAp KTsKKworCXNlcnZlcl9zdGFydF9sb2cgPSAoY2hhciAqKSBwZ19tYWxsb2MwKE1BWFBHUEFU SCk7CisJbGVuID0gc25wcmludGYoc2VydmVyX3N0YXJ0X2xvZywgTUFYUEdQQVRILCAiJXMv JXMvc2VydmVyX3N0YXJ0XyVzLmxvZyIsIHN1YnNjcmliZXJfZGlyLCBQR1NfT1VUUFVUX0RJ UiwgdGltZWJ1Zik7CisJaWYgKGxlbiA+PSBNQVhQR1BBVEgpCisJeworCQlwZ19sb2dfZXJy b3IoImxvZyBmaWxlIHBhdGggaXMgdG9vIGxvbmciKTsKKwkJZXhpdCgxKTsKKwl9CisKKwlw Z19jdGxfY21kID0gcHNwcmludGYoIlwiJXNcIiBzdGFydCAtRCBcIiVzXCIgLXMgLWwgXCIl c1wiIiwgcGdfY3RsX3BhdGgsIHN1YnNjcmliZXJfZGlyLCBzZXJ2ZXJfc3RhcnRfbG9nKTsK KwlyYyA9IHN5c3RlbShwZ19jdGxfY21kKTsKKwlwZ19jdGxfc3RhdHVzKHBnX2N0bF9jbWQs IHJjLCAxKTsKKworCS8qCisJICogV2FpdGluZyB0aGUgc3Vic2NyaWJlciB0byBiZSBwcm9t b3RlZC4KKwkgKi8KKwl3YWl0X2Zvcl9lbmRfcmVjb3ZlcnkoZGJpbmZvWzBdLnN1YmNvbm5p bmZvKTsKKworCS8qCisJICogQ3JlYXRlIGEgcHVibGljYXRpb24gZm9yIGVhY2ggZGF0YWJh c2UuIFRoaXMgc3RlcCBzaG91bGQgYmUgZXhlY3V0ZWQKKwkgKiBhZnRlciBwcm9tb3Rpbmcg dGhlIHN1YnNjcmliZXIgdG8gYXZvaWQgcmVwbGljYXRpbmcgdW5uZWNlc3NhcnkKKwkgKiBv YmplY3RzLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBudW1fZGJzOyBpKyspCisJeworCQlj aGFyCQlwdWJuYW1lW05BTUVEQVRBTEVOXTsKKworCQkvKiBDb25uZWN0IHRvIHB1Ymxpc2hl ci4gKi8KKwkJY29ubiA9IGNvbm5lY3RfZGF0YWJhc2UoZGJpbmZvW2ldLnB1YmNvbm5pbmZv KTsKKwkJaWYgKGNvbm4gPT0gTlVMTCkKKwkJCWV4aXQoMSk7CisKKwkJLyoKKwkJICogQnVp bGQgdGhlIHB1YmxpY2F0aW9uIG5hbWUuIFRoZSBuYW1lIG11c3Qgbm90IGV4Y2VlZCBOQU1F REFUQUxFTiAtCisJCSAqIDEuIFRoaXMgY3VycmVudCBzY2hlbWEgdXNlcyBhIG1heGltdW0g b2YgMzUgY2hhcmFjdGVycyAoMTQgKyAxMCArCisJCSAqICdcMCcpLgorCQkgKi8KKwkJc25w cmludGYocHVibmFtZSwgc2l6ZW9mKHB1Ym5hbWUpLCAicGdfc3Vic2NyaWJlcl8ldSIsIGRi aW5mb1tpXS5vaWQpOworCQlkYmluZm9baV0ucHVibmFtZSA9IHBnX3N0cmR1cChwdWJuYW1l KTsKKworCQljcmVhdGVfcHVibGljYXRpb24oY29ubiwgJmRiaW5mb1tpXSk7CisKKwkJZGlz Y29ubmVjdF9kYXRhYmFzZShjb25uKTsKKwl9CisKKwkvKgorCSAqIENyZWF0ZSBhIHN1YnNj cmlwdGlvbiBmb3IgZWFjaCBkYXRhYmFzZS4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnVt X2RiczsgaSsrKQorCXsKKwkJLyogQ29ubmVjdCB0byBzdWJzY3JpYmVyLiAqLworCQljb25u ID0gY29ubmVjdF9kYXRhYmFzZShkYmluZm9baV0uc3ViY29ubmluZm8pOworCQlpZiAoY29u biA9PSBOVUxMKQorCQkJZXhpdCgxKTsKKworCQljcmVhdGVfc3Vic2NyaXB0aW9uKGNvbm4s ICZkYmluZm9baV0pOworCisJCS8qIFNldCB0aGUgcmVwbGljYXRpb24gcHJvZ3Jlc3MgdG8g dGhlIGNvcnJlY3QgTFNOLiAqLworCQlzZXRfcmVwbGljYXRpb25fcHJvZ3Jlc3MoY29ubiwg JmRiaW5mb1tpXSwgY29uc2lzdGVudF9sc24pOworCisJCS8qIEVuYWJsZSBzdWJzY3JpcHRp b24uICovCisJCWVuYWJsZV9zdWJzY3JpcHRpb24oY29ubiwgJmRiaW5mb1tpXSk7CisKKwkJ ZGlzY29ubmVjdF9kYXRhYmFzZShjb25uKTsKKwl9CisKKwkvKgorCSAqIFRoZSB0cmFuc2ll bnQgcmVwbGljYXRpb24gc2xvdCBpcyBubyBsb25nZXIgcmVxdWlyZWQuIERyb3AgaXQuCisJ ICoKKwkgKiBJZiB0aGUgcGh5c2ljYWwgcmVwbGljYXRpb24gc2xvdCBleGlzdHMsIGRyb3Ag aXQuCisJICoKKwkgKiBYWFggd2UgbWlnaHQgbm90IGZhaWwgaGVyZS4gSW5zdGVhZCwgd2Ug cHJvdmlkZSBhIHdhcm5pbmcgc28gdGhlIHVzZXIKKwkgKiBldmVudHVhbGx5IGRyb3BzIHRo ZSByZXBsaWNhdGlvbiBzbG90IGxhdGVyLgorCSAqLworCWNvbm4gPSBjb25uZWN0X2RhdGFi YXNlKGRiaW5mb1swXS5wdWJjb25uaW5mbyk7CisJaWYgKGNvbm4gPT0gTlVMTCkKKwl7CisJ CXBnX2xvZ193YXJuaW5nKCJjb3VsZCBub3QgZHJvcCB0cmFuc2llbnQgcmVwbGljYXRpb24g c2xvdCBcIiVzXCIgb24gcHVibGlzaGVyIiwgdGVtcF9yZXBsc2xvdCk7CisJCXBnX2xvZ193 YXJuaW5nX2hpbnQoIkRyb3AgdGhpcyByZXBsaWNhdGlvbiBzbG90IHNvb24gdG8gYXZvaWQg cmV0ZW50aW9uIG9mIFdBTCBmaWxlcy4iKTsKKwkJaWYgKHByaW1hcnlfc2xvdF9uYW1lICE9 IE5VTEwpCisJCQlwZ19sb2dfd2FybmluZygiY291bGQgbm90IGRyb3AgcmVwbGljYXRpb24g c2xvdCBcIiVzXCIgb24gcHJpbWFyeSIsIHByaW1hcnlfc2xvdF9uYW1lKTsKKwl9CisJZWxz ZQorCXsKKwkJZHJvcF9yZXBsaWNhdGlvbl9zbG90KGNvbm4sICZkYmluZm9bMF0sIHRlbXBf cmVwbHNsb3QpOworCQlpZiAocHJpbWFyeV9zbG90X25hbWUgIT0gTlVMTCkKKwkJCWRyb3Bf cmVwbGljYXRpb25fc2xvdChjb25uLCAmZGJpbmZvWzBdLCBwcmltYXJ5X3Nsb3RfbmFtZSk7 CisJCWRpc2Nvbm5lY3RfZGF0YWJhc2UoY29ubik7CisJfQorCisJLyoKKwkgKiBTdG9wIHRo ZSBzdWJzY3JpYmVyLgorCSAqLworCXBnX2xvZ19pbmZvKCJzdG9wcGluZyB0aGUgc3Vic2Ny aWJlciIpOworCisJcGdfY3RsX2NtZCA9IHBzcHJpbnRmKCJcIiVzXCIgc3RvcCAtRCBcIiVz XCIgLXMiLCBwZ19jdGxfcGF0aCwgc3Vic2NyaWJlcl9kaXIpOworCXJjID0gc3lzdGVtKHBn X2N0bF9jbWQpOworCXBnX2N0bF9zdGF0dXMocGdfY3RsX2NtZCwgcmMsIDApOworCisJLyoK KwkgKiBDaGFuZ2Ugc3lzdGVtIGlkZW50aWZpZXIuCisJICovCisJbW9kaWZ5X3N5c2lkKHBn X3Jlc2V0d2FsX3BhdGgsIHN1YnNjcmliZXJfZGlyKTsKKworCS8qCisJICogUmVtb3ZlIGxv ZyBmaWxlIGdlbmVyYXRlZCBieSB0aGlzIHRvb2wsIGlmIGl0IHJ1bnMgc3VjY2Vzc2Z1bGx5 LgorCSAqIE90aGVyd2lzZSwgZmlsZSBpcyBrZXB0IHRoYXQgbWF5IHByb3ZpZGUgdXNlZnVs IGRlYnVnZ2luZyBpbmZvcm1hdGlvbi4KKwkgKi8KKwl1bmxpbmsoc2VydmVyX3N0YXJ0X2xv Zyk7CisKKwlzdWNjZXNzID0gdHJ1ZTsKKworCXBnX2xvZ19pbmZvKCJEb25lISIpOworCisJ cmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2Jhc2ViYWNrdXAvdC8wNDBf cGdfc3Vic2NyaWJlci5wbCBiL3NyYy9iaW4vcGdfYmFzZWJhY2t1cC90LzA0MF9wZ19zdWJz Y3JpYmVyLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjRlYmZm NzZiMmQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmluL3BnX2Jhc2ViYWNrdXAvdC8wNDBf cGdfc3Vic2NyaWJlci5wbApAQCAtMCwwICsxLDQ0IEBACisjIENvcHlyaWdodCAoYykgMjAy NCwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKworIworIyBUZXN0IGNo ZWNraW5nIG9wdGlvbnMgb2YgcGdfc3Vic2NyaWJlci4KKyMKKwordXNlIHN0cmljdDsKK3Vz ZSB3YXJuaW5nczsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKK3VzZSBUZXN0OjpN b3JlOworCitwcm9ncmFtX2hlbHBfb2soJ3BnX3N1YnNjcmliZXInKTsKK3Byb2dyYW1fdmVy c2lvbl9vaygncGdfc3Vic2NyaWJlcicpOworcHJvZ3JhbV9vcHRpb25zX2hhbmRsaW5nX29r KCdwZ19zdWJzY3JpYmVyJyk7CisKK215ICRkYXRhZGlyID0gUG9zdGdyZVNRTDo6VGVzdDo6 VXRpbHM6OnRlbXBkaXI7CisKK2NvbW1hbmRfZmFpbHMoWydwZ19zdWJzY3JpYmVyJ10sCisJ J25vIHN1YnNjcmliZXIgZGF0YSBkaXJlY3Rvcnkgc3BlY2lmaWVkJyk7Citjb21tYW5kX2Zh aWxzKAorCVsKKwkJJ3BnX3N1YnNjcmliZXInLAorCQknLS1wZ2RhdGEnLCAkZGF0YWRpcgor CV0sCisJJ25vIHB1Ymxpc2hlciBjb25uZWN0aW9uIHN0cmluZyBzcGVjaWZpZWQnKTsKK2Nv bW1hbmRfZmFpbHMoCisJWworCQkncGdfc3Vic2NyaWJlcicsCisJCSctLWRyeS1ydW4nLAor CQknLS1wZ2RhdGEnLCAkZGF0YWRpciwKKwkJJy0tcHVibGlzaGVyLWNvbm5pbmZvJywgJ2Ri bmFtZT1wb3N0Z3JlcycKKwldLAorCSdubyBzdWJzY3JpYmVyIGNvbm5lY3Rpb24gc3RyaW5n IHNwZWNpZmllZCcpOworY29tbWFuZF9mYWlscygKKwlbCisJCSdwZ19zdWJzY3JpYmVyJywK KwkJJy0tdmVyYm9zZScsCisJCSctLXBnZGF0YScsICRkYXRhZGlyLAorCQknLS1wdWJsaXNo ZXItY29ubmluZm8nLCAnZGJuYW1lPXBvc3RncmVzJywKKwkJJy0tc3Vic2NyaWJlci1jb25u aW5mbycsICdkYm5hbWU9cG9zdGdyZXMnCisJXSwKKwknbm8gZGF0YWJhc2UgbmFtZSBzcGVj aWZpZWQnKTsKKworZG9uZV90ZXN0aW5nKCk7CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2Jh c2ViYWNrdXAvdC8wNDFfcGdfc3Vic2NyaWJlcl9zdGFuZGJ5LnBsIGIvc3JjL2Jpbi9wZ19i YXNlYmFja3VwL3QvMDQxX3BnX3N1YnNjcmliZXJfc3RhbmRieS5wbApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5mYmNkMGZjODJiCi0tLSAvZGV2L251bGwKKysr IGIvc3JjL2Jpbi9wZ19iYXNlYmFja3VwL3QvMDQxX3BnX3N1YnNjcmliZXJfc3RhbmRieS5w bApAQCAtMCwwICsxLDEzOSBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMjQsIFBvc3RncmVTUUwg R2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisKKyMKKyMgVGVzdCB1c2luZyBhIHN0YW5kYnkg c2VydmVyIGFzIHRoZSBzdWJzY3JpYmVyLgorCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdz OwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7Cit1c2UgUG9zdGdyZVNRTDo6VGVz dDo6VXRpbHM7Cit1c2UgVGVzdDo6TW9yZTsKKworbXkgJG5vZGVfcDsKK215ICRub2RlX2Y7 CitteSAkbm9kZV9zOworbXkgJHJlc3VsdDsKKworIyBTZXQgdXAgbm9kZSBQIGFzIHByaW1h cnkKKyRub2RlX3AgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ25vZGVfcCcp OworJG5vZGVfcC0+aW5pdChhbGxvd3Nfc3RyZWFtaW5nID0+ICdsb2dpY2FsJyk7Ciskbm9k ZV9wLT5zdGFydDsKKworIyBTZXQgdXAgbm9kZSBGIGFzIGFib3V0LXRvLWZhaWwgbm9kZQor IyBUaGUgZXh0cmEgb3B0aW9uIGZvcmNlcyBpdCB0byBpbml0aWFsaXplIGEgbmV3IGNsdXN0 ZXIgaW5zdGVhZCBvZiBjb3B5aW5nIGEKKyMgcHJldmlvdXNseSBpbml0ZGIncyBjbHVzdGVy LgorJG5vZGVfZiA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnbm9kZV9mJyk7 Ciskbm9kZV9mLT5pbml0KGFsbG93c19zdHJlYW1pbmcgPT4gJ2xvZ2ljYWwnLCBleHRyYSA9 PiBbICctLW5vLWluc3RydWN0aW9ucycgXSk7Ciskbm9kZV9mLT5zdGFydDsKKworIyBPbiBu b2RlIFAKKyMgLSBjcmVhdGUgZGF0YWJhc2VzCisjIC0gY3JlYXRlIHRlc3QgdGFibGVzCisj IC0gaW5zZXJ0IGEgcm93Ciskbm9kZV9wLT5zYWZlX3BzcWwoCisJJ3Bvc3RncmVzJywgcSgK KwlDUkVBVEUgREFUQUJBU0UgcGcxOworCUNSRUFURSBEQVRBQkFTRSBwZzI7CispKTsKKyRu b2RlX3AtPnNhZmVfcHNxbCgncGcxJywgJ0NSRUFURSBUQUJMRSB0YmwxIChhIHRleHQpJyk7 Ciskbm9kZV9wLT5zYWZlX3BzcWwoJ3BnMScsICJJTlNFUlQgSU5UTyB0YmwxIFZBTFVFUygn Zmlyc3Qgcm93JykiKTsKKyRub2RlX3AtPnNhZmVfcHNxbCgncGcyJywgJ0NSRUFURSBUQUJM RSB0YmwyIChhIHRleHQpJyk7CisKKyMgU2V0IHVwIG5vZGUgUyBhcyBzdGFuZGJ5IGxpbmtp bmcgdG8gbm9kZSBQCiskbm9kZV9wLT5iYWNrdXAoJ2JhY2t1cF8xJyk7Ciskbm9kZV9zID0g UG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdub2RlX3MnKTsKKyRub2RlX3MtPmlu aXRfZnJvbV9iYWNrdXAoJG5vZGVfcCwgJ2JhY2t1cF8xJywgaGFzX3N0cmVhbWluZyA9PiAx KTsKKyRub2RlX3MtPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCAnbG9nX21pbl9t ZXNzYWdlcyA9IGRlYnVnMicpOworJG5vZGVfcy0+c2V0X3N0YW5kYnlfbW9kZSgpOworJG5v ZGVfcy0+c3RhcnQ7CisKKyMgSW5zZXJ0IGFub3RoZXIgcm93IG9uIG5vZGUgUCBhbmQgd2Fp dCBub2RlIFMgdG8gY2F0Y2ggdXAKKyRub2RlX3AtPnNhZmVfcHNxbCgncGcxJywgIklOU0VS VCBJTlRPIHRibDEgVkFMVUVTKCdzZWNvbmQgcm93JykiKTsKKyRub2RlX3AtPndhaXRfZm9y X3JlcGxheV9jYXRjaHVwKCRub2RlX3MpOworCisjIFJ1biBwZ19zdWJzY3JpYmVyIG9uIGFi b3V0LXRvLWZhaWwgbm9kZSBGCitjb21tYW5kX2ZhaWxzKAorCVsKKwkJJ3BnX3N1YnNjcmli ZXInLCAnLS12ZXJib3NlJywKKwkJJy0tcGdkYXRhJywgJG5vZGVfZi0+ZGF0YV9kaXIsCisJ CSctLXB1Ymxpc2hlci1jb25uaW5mbycsICRub2RlX3AtPmNvbm5zdHIoJ3BnMScpLAorCQkn LS1zdWJzY3JpYmVyLWNvbm5pbmZvJywgJG5vZGVfZi0+Y29ubnN0cigncGcxJyksCisJCSct LWRhdGFiYXNlJywgJ3BnMScsCisJCSctLWRhdGFiYXNlJywgJ3BnMicKKwldLAorCSdzdWJz Y3JpYmVyIGRhdGEgZGlyZWN0b3J5IGlzIG5vdCBhIGNvcHkgb2YgdGhlIHNvdXJjZSBkYXRh YmFzZSBjbHVzdGVyJyk7CisKKyMgZHJ5IHJ1biBtb2RlIG9uIG5vZGUgUworY29tbWFuZF9v aygKKwlbCisJCSdwZ19zdWJzY3JpYmVyJywgJy0tdmVyYm9zZScsICctLWRyeS1ydW4nLAor CQknLS1wZ2RhdGEnLCAkbm9kZV9zLT5kYXRhX2RpciwKKwkJJy0tcHVibGlzaGVyLWNvbm5p bmZvJywgJG5vZGVfcC0+Y29ubnN0cigncGcxJyksCisJCSctLXN1YnNjcmliZXItY29ubmlu Zm8nLCAkbm9kZV9zLT5jb25uc3RyKCdwZzEnKSwKKwkJJy0tZGF0YWJhc2UnLCAncGcxJywK KwkJJy0tZGF0YWJhc2UnLCAncGcyJworCV0sCisJJ3J1biBwZ19zdWJzY3JpYmVyIC0tZHJ5 LXJ1biBvbiBub2RlIFMnKTsKKworIyBQSUQgc2V0cyB0byB1bmRlZmluZWQgYmVjYXVzZSBz dWJzY3JpYmVyIHdhcyBzdG9wcGVkIGJlaGluZCB0aGUgc2NlbmVzLgorIyBTdGFydCBzdWJz Y3JpYmVyCiskbm9kZV9zLT57X3BpZH0gPSB1bmRlZjsKKyRub2RlX3MtPnN0YXJ0OworIyBD aGVjayBpZiBub2RlIFMgaXMgc3RpbGwgYSBzdGFuZGJ5Citpcygkbm9kZV9zLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgJ1NFTEVDVCBwZ19pc19pbl9yZWNvdmVyeSgpJyksCisJJ3QnLCAn c3RhbmRieSBpcyBpbiByZWNvdmVyeScpOworCisjIFJ1biBwZ19zdWJzY3JpYmVyIG9uIG5v ZGUgUworY29tbWFuZF9vaygKKwlbCisJCSdwZ19zdWJzY3JpYmVyJywgJy0tdmVyYm9zZScs CisJCSctLXBnZGF0YScsICRub2RlX3MtPmRhdGFfZGlyLAorCQknLS1wdWJsaXNoZXItY29u bmluZm8nLCAkbm9kZV9wLT5jb25uc3RyKCdwZzEnKSwKKwkJJy0tc3Vic2NyaWJlci1jb25u aW5mbycsICRub2RlX3MtPmNvbm5zdHIoJ3BnMScpLAorCQknLS1kYXRhYmFzZScsICdwZzEn LAorCQknLS1kYXRhYmFzZScsICdwZzInCisJXSwKKwkncnVuIHBnX3N1YnNjcmliZXIgb24g bm9kZSBTJyk7CisKKyMgSW5zZXJ0IHJvd3Mgb24gUAorJG5vZGVfcC0+c2FmZV9wc3FsKCdw ZzEnLCAiSU5TRVJUIElOVE8gdGJsMSBWQUxVRVMoJ3RoaXJkIHJvdycpIik7Ciskbm9kZV9w LT5zYWZlX3BzcWwoJ3BnMicsICJJTlNFUlQgSU5UTyB0YmwyIFZBTFVFUygncm93IDEnKSIp OworCisjIFBJRCBzZXRzIHRvIHVuZGVmaW5lZCBiZWNhdXNlIHN1YnNjcmliZXIgd2FzIHN0 b3BwZWQgYmVoaW5kIHRoZSBzY2VuZXMuCisjIFN0YXJ0IHN1YnNjcmliZXIKKyRub2RlX3Mt PntfcGlkfSA9IHVuZGVmOworJG5vZGVfcy0+c3RhcnQ7CisKKyMgR2V0IHN1YnNjcmlwdGlv biBuYW1lcworJHJlc3VsdCA9ICRub2RlX3MtPnNhZmVfcHNxbCgKKwkncG9zdGdyZXMnLCBx cSgKKwlTRUxFQ1Qgc3VibmFtZSBGUk9NIHBnX3N1YnNjcmlwdGlvbiBXSEVSRSBzdWJuYW1l IH4gJ15wZ19zdWJzY3JpYmVyXycKKykpOworbXkgQHN1Ym5hbWVzID0gc3BsaXQoIlxuIiwg JHJlc3VsdCk7CisKKyMgV2FpdCBzdWJzY3JpYmVyIHRvIGNhdGNoIHVwCiskbm9kZV9zLT53 YWl0X2Zvcl9zdWJzY3JpcHRpb25fc3luYygkbm9kZV9wLCAkc3VibmFtZXNbMF0pOworJG5v ZGVfcy0+d2FpdF9mb3Jfc3Vic2NyaXB0aW9uX3N5bmMoJG5vZGVfcCwgJHN1Ym5hbWVzWzFd KTsKKworIyBDaGVjayByZXN1bHQgb24gZGF0YWJhc2UgcGcxCiskcmVzdWx0ID0gJG5vZGVf cy0+c2FmZV9wc3FsKCdwZzEnLCAnU0VMRUNUICogRlJPTSB0YmwxJyk7CitpcyggJHJlc3Vs dCwgcXEoZmlyc3Qgcm93CitzZWNvbmQgcm93Cit0aGlyZCByb3cpLAorCSdsb2dpY2FsIHJl cGxpY2F0aW9uIHdvcmtzIG9uIGRhdGFiYXNlIHBnMScpOworCisjIENoZWNrIHJlc3VsdCBv biBkYXRhYmFzZSBwZzIKKyRyZXN1bHQgPSAkbm9kZV9zLT5zYWZlX3BzcWwoJ3BnMicsICdT RUxFQ1QgKiBGUk9NIHRibDInKTsKK2lzKCAkcmVzdWx0LCBxcShyb3cgMSksCisJJ2xvZ2lj YWwgcmVwbGljYXRpb24gd29ya3Mgb24gZGF0YWJhc2UgcGcyJyk7CisKKyMgRGlmZmVyZW50 IHN5c3RlbSBpZGVudGlmaWVyPworbXkgJHN5c2lkX3AgPSAkbm9kZV9wLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgJ1NFTEVDVCBzeXN0ZW1faWRlbnRpZmllciBGUk9NIHBnX2NvbnRyb2xf c3lzdGVtKCknKTsKK215ICRzeXNpZF9zID0gJG5vZGVfcy0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICdTRUxFQ1Qgc3lzdGVtX2lkZW50aWZpZXIgRlJPTSBwZ19jb250cm9sX3N5c3RlbSgp Jyk7Citvaygkc3lzaWRfcCAhPSAkc3lzaWRfcywgJ3N5c3RlbSBpZGVudGlmaWVyIHdhcyBj aGFuZ2VkJyk7CisKKyMgY2xlYW4gdXAKKyRub2RlX3AtPnRlYXJkb3duX25vZGU7Ciskbm9k ZV9zLT50ZWFyZG93bl9ub2RlOworCitkb25lX3Rlc3RpbmcoKTsKLS0gCjIuMzAuMgoK --edfad4ed2a4841a3865dc10edbe150cd--