Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mu2ff-0001gK-SH for pgsql-hackers@arkaria.postgresql.org; Mon, 06 Dec 2021 01:20:00 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1mu2fe-0006Ar-Nx for pgsql-hackers@arkaria.postgresql.org; Mon, 06 Dec 2021 01:19:58 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mu2fc-0006Ab-Tb for pgsql-hackers@lists.postgresql.org; Mon, 06 Dec 2021 01:19:58 +0000 Received: from new3-smtp.messagingengine.com ([66.111.4.229]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mu2fW-0003hK-E5 for pgsql-hackers@lists.postgresql.org; Mon, 06 Dec 2021 01:19:56 +0000 Received: from compute5.internal (compute5.nyi.internal [10.202.2.45]) by mailnew.nyi.internal (Postfix) with ESMTP id 35CAA5801C3; Sun, 5 Dec 2021 20:19:48 -0500 (EST) Received: from imap49 ([10.202.2.99]) by compute5.internal (MEProxy); Sun, 05 Dec 2021 20:19:48 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=eulerto.com; h= mime-version:message-id:in-reply-to:references:date:from:to:cc :subject:content-type; s=fm3; bh=Q0Nm+iRKgwh9Y4AJ3UL9pWeXVnwSxN4 GktzbLf/5AUc=; b=nR8feydNLHfKuYz8yLlejbfOzZsJ+W8ume+c76faYuzDQI2 tubJHRB8tuZTS9mwbrsa01U8za1quKrLPVnpE24Bf7z2gzYGWciWntwat8I9uoWy BG1arZMO6LRlKiZEOpUuHlitLBdKUfA4vSvTd4jKks5xauy6Rry9xyaYHZEcx+YC enFBA0hSWl/y4oS5NM3vPc3io3h+GbuQvuZF2ASkfG7tivLFO+a3yxWgaS71fXSE aR+sSe5chuogVqO95aTqdgXexViXeVWMf7Pc9FoD5o1tYNJAk+AdK03BiylPITG7 VQT1ewGPSoA1PXmyyzsW5qdvkELpAwAkjvgVO/w== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to:x-me-proxy :x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm1; bh=Q0Nm+i RKgwh9Y4AJ3UL9pWeXVnwSxN4GktzbLf/5AUc=; b=Er2BrBj+bIMMe15VCdi8Tn sGbFYBKwAD24ZtMiVDbYRu2xxlBGOuWYmfIlf1IRn2rVsAbG4NvU3Vf7hRZo2HLw OMdV2PntOhScL+0DKd22PGXzWOLRpNdk2GJDO6bggg5i6lYU10tnJDB3RFIPZSjD 88RB75lHD/1Ozh2mrQZ38Un3eL00pfgraF6/hmUdN/uadDBTDUEa2tSFPeeykmOW v1+XHCY3VrIcbEJsDXFDM5dSeKkxuo6+RI1Ii3upYQRy9M2TvbKIlq2ZonrR82ph P0NR7kBzfBxPJWZMSprDrNdCdSgJpWthHvyl5Usssog43/t9uPio18Y/dVgoa//A == X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvuddrjedvgdefvdcutefuodetggdotefrodftvf curfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfghnecu uegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenuc fjughrpefofgggkfgjfhffhffvufgtsehmtderreerredtnecuhfhrohhmpedfgfhulhgv rhcuvfgrvhgvihhrrgdfuceovghulhgvrhesvghulhgvrhhtohdrtghomheqnecuggftrf grthhtvghrnhepleffueelfeejledtveegtdeugeffvdehteefieejgefhgefffedutdek geefkeetnecuffhomhgrihhnpehpohhsthhgrhdrvghspdgvnhhtvghrphhrihhsvggusg drtghomhenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfhhrohhm pegvuhhlvghrsegvuhhlvghrthhordgtohhm X-ME-Proxy: Received: by mailuser.nyi.internal (Postfix, from userid 501) id 9C498F6006E; Sun, 5 Dec 2021 20:19:47 -0500 (EST) X-Mailer: MessagingEngine.com Webmail Interface User-Agent: Cyrus-JMAP/3.5.0-alpha0-4458-g51a91c06b2-fm-20211130.004-g51a91c06 Mime-Version: 1.0 Message-Id: In-Reply-To: <49ba49f1-8bdb-40b7-ae9e-f17d88b3afcd@www.fastmail.com> References: <49ba49f1-8bdb-40b7-ae9e-f17d88b3afcd@www.fastmail.com> Date: Sun, 05 Dec 2021 22:19:27 -0300 From: "Euler Taveira" To: "Peter Smith" , "Amit Kapila" Cc: "Greg Nancarrow" , "houzj.fnst@fujitsu.com" , "vignesh C" , "tanghy.fnst@fujitsu.com" , "Ajin Cherian" , "Dilip Kumar" , "Rahila Syed" , "Peter Eisentraut" , =?UTF-8?Q?=C3=96nder_Kalac=C4=B1?= , japin , "Michael Paquier" , "David Steele" , "Craig Ringer" , "Amit Langote" , "PostgreSQL Hackers" Subject: Re: row filtering for logical replication Content-Type: multipart/mixed; boundary=412c5a77b8c54439afa8759a2e76e736 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --412c5a77b8c54439afa8759a2e76e736 Content-Type: multipart/alternative; boundary=3f5917c7f565460f952f14441d203f53 --3f5917c7f565460f952f14441d203f53 Content-Type: text/plain On Fri, Dec 3, 2021, at 8:12 PM, Euler Taveira wrote: > PS> I will update the commit message in the next version. I barely changed the > documentation to reflect the current behavior. I probably missed some changes > but I will fix in the next version. I realized that I forgot to mention a few things about the UPDATE behavior. Regardless of 0003, we need to define which tuple will be used to evaluate the row filter for UPDATEs. We already discussed it circa [1]. This current version chooses *new* tuple. Is it the best choice? Let's check all cases. There are 2 rows on the provider. One row satisfies the row filter and the other one doesn't. For each case, I expect the initial rows to be there (no modifications). The DDLs are: CREATE TABLE foo (a integer, b text, PRIMARY KEY(a)); INSERT INTO foo (a, b) VALUES(10, 'abc'),(30, 'abc'); CREATE PUBLICATION bar FOR TABLE foo WHERE (a > 20); The table describes what happen on the subscriber. BEFORE is the current row on subscriber. OLD, NEW and OLD & NEW are action/row if we consider different ways to evaluate the row filter. -- case 1: old tuple (10, abc) ; new tuple (10, def) UPDATE foo SET b = 'def' WHERE a = 10; +-----------+--------------------+------------------+------------------+ | BEFORE | OLD | NEW | OLD & NEW | +-----------+--------------------+------------------+------------------+ | NA | NA | NA | NA | +-----------+--------------------+------------------+------------------+ If the old and new tuple don't satisfy the row filter, there is no issue. -- case 2: old tuple (30, abc) ; new tuple (30, def) UPDATE foo SET b = 'def' WHERE a = 30; +-----------+--------------------+------------------+------------------+ | BEFORE | OLD | NEW | OLD & NEW | +-----------+--------------------+------------------+------------------+ | (30, abc) | UPDATE (30, def) | UPDATE (30, def) | UPDATE (30, def) | +-----------+--------------------+------------------+------------------+ If the old and new tuple satisfy the row filter, there is no issue. -- case 3: old tuple (30, abc) ; new tuple (10, def) UPDATE foo SET a = 10, b = 'def' WHERE a = 30; +-----------+--------------------+------------------+------------------+ | BEFORE | OLD | NEW | OLD & NEW | +-----------+--------------------+------------------+------------------+ | (30, abc) | UPDATE (10, def) * | KEEP (30, abc) * | KEEP (30, abc) * | +-----------+--------------------+------------------+------------------+ If the old tuple satisfies the row filter but the new tuple doesn't, we have a data consistency issue. Since the old tuple satisfies the row filter, the initial table synchronization copies this row. However, after the UPDATE the new tuple doesn't satisfy the row filter then, from the data consistency perspective, that row should be removed on the subscriber. The OLD sends the UPDATE because it satisfies the row filter (if it is a sharding solution this new row should be moved to another node). The new row would likely not be modified by replication again. That's a data inconsistency according to the row filter. The NEW and OLD & NEW don't send the UPDATE because it doesn't satisfy the row filter. Keep the old row is undesirable because it doesn't reflect what we have on the source. This row on the subscriber would likely not be modified by replication again. If someone inserted a new row with a = 30, replication will stop because there is already a row with that value. -- case 4: old tuple (10, abc) ; new tuple (30, def) UPDATE foo SET a = 30, b = 'def' WHERE a = 10; +-----------+--------------------+------------------+------------------+ | BEFORE | OLD | NEW | OLD & NEW | +-----------+--------------------+------------------+------------------+ | NA | NA ! | NA ! | NA | +-----------+--------------------+------------------+------------------+ The OLD and OLD & NEW don't send the UPDATE because it doesn't satisfy the row filter. The NEW sends the UPDATE because it satisfies the row filter but there is no row to modify. The current behavior does nothing. However, it should INSERT the new tuple. Subsequent UPDATE or DELETE have no effect. It could be a surprise for an application that expects the same data set from the provider. If we have to choose the default behavior I would say use the old tuple for evaluates row filter. Why? The validation already restricts the columns to replica identity so there isn't an issues with missing (NULL) columns. The case 3 updates the row with a value that is not consistent but keeping the old row is worse because it could stop the replication if someone inserted the old key in a new row on the provider. The case 4 ignores the UPDATE if it cannot find the tuple but it could provide an error if there was an strict mode. Since this change is very simple to revert, this new version contains this modification. I also improve the documentation, remove extra parenthesis from psql/pg_dump. As I said in the previous email, I merged the validation patch too. FWIW in the previous version, I removed a code that compares nodes to decide if it is necessary to remove the publication-relation entry. I had a similar code in a ancient version of this patch but decided that the additional code is not worth. There is at least one issue in the current code that should be addressed: PK or REPLICA IDENTITY modification could break the publication check for UPDATEs and DELETEs. [1] https://postgr.es/m/202107162135.m5ehijgcasjk@alvherre.pgsql -- Euler Taveira EDB https://www.enterprisedb.com/ --3f5917c7f565460f952f14441d203f53 Content-Type: text/html Content-Transfer-Encoding: quoted-printable
On Fri, De= c 3, 2021, at 8:12 PM, Euler Taveira wrote:
PS> I will update the commit message= in the next version. I barely changed the
documentation t= o reflect the current behavior. I probably missed some changes
=
but I will fix in the next version.
I re= alized that I forgot to mention a few things about the UPDATE behavior.<= br>
Regardless of 0003, we need to define which tuple will be = used to evaluate the
row filter for UPDATEs. We already di= scussed it circa [1]. This current version
chooses *new* t= uple. Is it the best choice?

Let's check al= l cases. There are 2 rows on the provider. One row satisfies the
row filter and the other one doesn't. For each case, I expect the= initial rows
to be there (no modifications). The DDLs are= :

CREATE TABLE foo (a integer, b text, PRIM= ARY KEY(a));
INSERT INTO foo (a, b) VALUES(10, 'abc'),(30,= 'abc');
CREATE PUBLICATION bar FOR TABLE foo WHERE (a >= ; 20);

The table describes what happen on t= he subscriber. BEFORE is the current row on
subscriber. OL= D, NEW and OLD & NEW are action/row if we consider different ways
to evaluate the row filter.

-- = case 1: old tuple (10, abc) ; new tuple (10, def)
UPDATE f= oo SET b =3D 'def' WHERE a =3D 10;

+-------= ----+--------------------+------------------+------------------+
|   BEFORE  |       = OLD          |  &= nbsp;     NEW       |&= nbsp;   OLD & NEW     |
= +-----------+--------------------+------------------+------------------+=
|    NA     | &nb= sp;     NA       =     |       NA  &= nbsp;      |      = ; NA         |
+--= ---------+--------------------+------------------+------------------+

If the old and new tuple don't satisfy the ro= w filter, there is no issue.

-- case 2: old= tuple (30, abc) ; new tuple (30, def)
UPDATE foo SET b =3D= 'def' WHERE a =3D 30;

+-----------+-------= -------------+------------------+------------------+
|&nbs= p;  BEFORE  |       OLD &nb= sp;        |    &= nbsp;   NEW       |  &= nbsp; OLD & NEW     |
+-----------= +--------------------+------------------+------------------+
| (30, abc) | UPDATE (30, def)   | UPDATE (30, def) | UPDAT= E (30, def) |
+-----------+--------------------+----------= --------+------------------+

If the old and= new tuple satisfy the row filter, there is no issue.

=
-- case 3: old tuple (30, abc) ; new tuple (10, def)
UPDATE foo SET a =3D 10, b =3D 'def' WHERE a =3D 30;

+-----------+--------------------+------------------+---= ---------------+
|   BEFORE  |  &= nbsp;    OLD       &nb= sp;  |        NEW  &nb= sp;    |    OLD & NEW   = ;  |
+-----------+--------------------+--------------= ----+------------------+
| (30, abc) | UPDATE (10, def) * = | KEEP (30, abc) * | KEEP (30, abc) * |
+-----------+-----= ---------------+------------------+------------------+
If the old tuple satisfies the row filter but the new tuple = doesn't,  we have a
data consistency issue. Since the= old tuple satisfies the row filter, the
initial table syn= chronization copies this row. However, after the UPDATE the
new tuple doesn't satisfy the row filter then, from the data consisten= cy
perspective, that row should be removed on the subscrib= er.

The OLD sends the UPDATE because it sat= isfies the row filter (if it is a
sharding solution this n= ew row should be moved to another node). The new row
would= likely not be modified by replication again. That's a data inconsistenc= y
according to the row filter.

The NEW and OLD & NEW don't send the UPDATE because it doesn't sat= isfy the row
filter. Keep the old row is undesirable becau= se it doesn't reflect what we have
on the source. This row= on the subscriber would likely not be modified by
replica= tion again. If someone inserted a new row with a =3D 30, replication wil= l
stop because there is already a row with that value.
=

-- case 4: old tuple (10, abc) ; new tuple (30= , def)
UPDATE foo SET a =3D 30, b =3D 'def' WHERE a =3D 10= ;

+-----------+--------------------+-------= -----------+------------------+
|   BEFORE = |       OLD     =      |        NEW=        |    OLD & NEW&n= bsp;    |
+-----------+--------------------= +------------------+------------------+
|   = ; NA     |       NA !&= nbsp;        |    = ;   NA !       |  &nbs= p;    NA         = |
+-----------+--------------------+------------------+---= ---------------+

The OLD and OLD & NEW = don't send the UPDATE because it doesn't satisfy the row
f= ilter. The NEW sends the UPDATE because it satisfies the row filter but = there
is no row to modify. The current behavior does nothi= ng. However, it should
INSERT the new tuple. Subsequent UP= DATE or DELETE have no effect. It could be a
surprise for = an application that expects the same data set from the provider.

If we have to choose the default behavior I would = say use the old tuple for
evaluates row filter. Why? The v= alidation already restricts the columns to
replica identit= y so there isn't an issues with missing (NULL) columns. The case
3 updates the row with a value that is not consistent but keeping= the old row
is worse because it could stop the replicatio= n if someone inserted the old key
in a new row on the prov= ider. The case 4 ignores the UPDATE if it cannot find
the = tuple but it could provide an error if there was an strict mode.

Since this change is very simple to revert, this n= ew version contains this
modification. I also improve the = documentation, remove extra parenthesis from
psql/pg_dump.= As I said in the previous email, I merged the validation patch too.
=

FWIW in the previous version, I removed a code= that compares nodes to decide if
it is necessary to remov= e the publication-relation entry. I had a similar code
in = a ancient version of this patch but decided that the additional code is = not
worth.

There is at least = one issue in the current code that should be addressed: PK or
<= div>REPLICA IDENTITY modification could break the publication check for = UPDATEs and
DELETEs.


--3f5917c7f565460f952f14441d203f53-- --412c5a77b8c54439afa8759a2e76e736 Content-Disposition: attachment;filename="0001-Row-filter-for-logical-replication.patch" Content-Type: text/x-patch; name="0001-Row-filter-for-logical-replication.patch" Content-Transfer-Encoding: BASE64 RnJvbSA2OWRkYzQ0YzAwNmQyOTQzNmQ4YjVhOTEyYWMyMzg2ZjZiZTQ2MGUwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBFdWxlciBUYXZlaXJhIDxldWxlci50YXZlaXJhQGVu dGVycHJpc2VkYi5jb20+CkRhdGU6IE1vbiwgMjIgTm92IDIwMjEgMTU6MDI6MTkgLTAzMDAK U3ViamVjdDogW1BBVENIXSBSb3cgZmlsdGVyIGZvciBsb2dpY2FsIHJlcGxpY2F0aW9uCgpU aGlzIGZlYXR1cmUgYWRkcyByb3cgZmlsdGVyIGZvciBwdWJsaWNhdGlvbiB0YWJsZXMuIFdo ZW4gYSBwdWJsaWNhdGlvbiBpcwpkZWZpbmVkIG9yIG1vZGlmaWVkLCByb3dzIHRoYXQgZG9u J3Qgc2F0aXNmeSBhbiBvcHRpb25hbCBXSEVSRSBjbGF1c2Ugd2lsbCBiZQpmaWx0ZXJlZCBv dXQuIFRoaXMgYWxsb3dzIGEgZGF0YWJhc2Ugb3Igc2V0IG9mIHRhYmxlcyB0byBiZSBwYXJ0 aWFsbHkKcmVwbGljYXRlZC4gVGhlIHJvdyBmaWx0ZXIgaXMgcGVyIHRhYmxlLiBBIG5ldyBy b3cgZmlsdGVyIGNhbiBiZSBhZGRlZCBzaW1wbHkKYnkgc3BlY2lmeWluZyBhIFdIRVJFIGNs YXVzZSBhZnRlciB0aGUgdGFibGUgbmFtZS4gVGhlIFdIRVJFIGNsYXVzZSBtdXN0IGJlCmVu Y2xvc2VkIGJ5IHBhcmVudGhlc2VzLgoKVGhlIFdIRVJFIGNsYXVzZSBzaG91bGQgcHJvYmFi bHkgY29udGFpbiBvbmx5IGNvbHVtbnMgdGhhdCBhcmUgcGFydCBvZiB0aGUKcHJpbWFyeSBr ZXkgb3IgdGhhdCBhcmUgY292ZXJlZCBieSBSRVBMSUNBIElERU5USVRZLiBPdGhlcndpc2Us IGFueSBVUERBVEVzIGFuZApERUxFVEVzIHdvbid0IGJlIHJlcGxpY2F0ZWQuIEZvciBVUERB VEUgYW5kIERFTEVURSBjb21tYW5kcywgaXQgdXNlcyB0aGUgb2xkCnJvdyB2ZXJzaW9uICh0 aGF0IGlzIGxpbWl0ZWQgdG8gcHJpbWFyeSBrZXkgb3IgUkVQTElDQSBJREVOVElUWSkgdG8g ZXZhbHVhdGUKdGhlIHJvdyBmaWx0ZXIuICBJTlNFUlQgdXNlcyB0aGUgbmV3IHJvdyB2ZXJz aW9uIHRvIGV2YWx1YXRlIHRoZSByb3cgZmlsdGVyLApoZW5jZSwgeW91IGNhbiB1c2UgYW55 IGNvbHVtbi4gSWYgdGhlIHJvdyBmaWx0ZXIgZXZhbHVhdGVzIHRvIE5VTEwsIGl0IHJldHVy bnMKZmFsc2UuIFRoZSBXSEVSRSBjbGF1c2UgYWxsb3dzIHNpbXBsZSBleHByZXNzaW9ucy4g U2ltcGxlIGV4cHJlc3Npb25zIGNhbm5vdApjb250YWluIGFueSBhZ2dyZWdhdGUgb3Igd2lu ZG93IGZ1bmN0aW9ucywgbm9uLWltbXV0YWJsZSBmdW5jdGlvbnMsCnVzZXItZGVmaW5lZCB0 eXBlcywgb3BlcmF0b3JzIG9yIGZ1bmN0aW9ucy4gIFRoaXMgcmVzdHJpY3Rpb24gY291bGQg cG9zc2libHkgYmUKYWRkcmVzc2VkIGluIHRoZSBmdXR1cmUuCgpJZiB5b3UgY2hvb3NlIHRv IGRvIHRoZSBpbml0aWFsIHRhYmxlIHN5bmNocm9uaXphdGlvbiwgb25seSBkYXRhIHRoYXQg c2F0aXNmaWVzCnRoZSByb3cgZmlsdGVycyBpcyBzZW50LiBJZiB0aGUgc3Vic2NyaXB0aW9u IGhhcyBzZXZlcmFsIHB1YmxpY2F0aW9ucyBpbiB3aGljaAphIHRhYmxlIGhhcyBiZWVuIHB1 Ymxpc2hlZCB3aXRoIGRpZmZlcmVudCBXSEVSRSBjbGF1c2VzLCByb3dzIG11c3Qgc2F0aXNm eSBhbnkKZXhwcmVzc2lvbnMgdG8gYmUgY29waWVkLiBJbiB0aGlzIGNhc2Ugb2YgZGlmZmVy ZW50IFdIRVJFIGNsYXVzZXMsIGlmIG9uZSBvZgp0aGUgZXhwcmVzc2lvbnMgaXMgbm90IGRl ZmluZWQsIHJvd3MgYXJlIGFsd2F5cyByZXBsaWNhdGVkIHJlZ2FyZGxlc3Mgb2YgdGhlCmRl ZmluaXRpb24gb2YgdGhlIG90aGVyIGV4cHJlc3Npb25zLiBJZiBzdWJzY3JpYmVyIGlzIGEg cHJlLTE1IHZlcnNpb24sIGRhdGEKc3luY2hyb25pemF0aW9uIHdvbid0IHVzZSByb3cgZmls dGVycyBpZiB0aGV5IGFyZSBkZWZpbmVkIGluIHRoZSBwdWJsaXNoZXIuClByZXZpb3VzIHZl cnNpb25zIGNhbm5vdCBoYW5kbGUgcm93IGZpbHRlcnMuCgpJZiB5b3VyIHB1YmxpY2F0aW9u IGNvbnRhaW5zIGEgcGFydGl0aW9uZWQgdGFibGUsIHRoZSBwdWJsaWNhdGlvbiBwYXJhbWV0 ZXIKcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgZGV0ZXJtaW5lcyBpZiBpdCB1c2VzIHRo ZSBwYXJ0aXRpb24gcm93IGZpbHRlciAoaWYKdGhlIHBhcmFtZXRlciBpcyBmYWxzZSwgdGhl IGRlZmF1bHQpIG9yIHRoZSByb290IHBhcnRpdGlvbmVkIHRhYmxlIHJvdyBmaWx0ZXIuCgpE aXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL0NBSEUzd2dnYjcxNVglMkJtS19EaXRM WEYyNUIlM0RqRTZ4eU5DSDRZT3dNODYwSlI3SGFyR1ElNDBtYWlsLmdtYWlsLmNvbQotLS0K IGRvYy9zcmMvc2dtbC9jYXRhbG9ncy5zZ21sICAgICAgICAgICAgICAgICAgfCAgIDggKwog ZG9jL3NyYy9zZ21sL3JlZi9hbHRlcl9wdWJsaWNhdGlvbi5zZ21sICAgICB8ICAxMyArLQog ZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfcHVibGljYXRpb24uc2dtbCAgICB8ICAzNSArLQog ZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfc3Vic2NyaXB0aW9uLnNnbWwgICB8ICAyMyArLQog c3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jICAgICAgICB8IDE5MyArKysr KysrKystCiBzcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYyAgICAgIHwg IDc2ICsrKy0KIHNyYy9iYWNrZW5kL25vZGVzL2NvcHlmdW5jcy5jICAgICAgICAgICAgICAg fCAgIDEgKwogc3JjL2JhY2tlbmQvbm9kZXMvZXF1YWxmdW5jcy5jICAgICAgICAgICAgICB8 ICAgMSArCiBzcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55ICAgICAgICAgICAgICAgICAgIHwg IDM4ICstCiBzcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfYWdnLmMgICAgICAgICAgICAgIHwg ICA2ICsKIHNyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9leHByLmMgICAgICAgICAgICAgfCAg IDYgKwogc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2Z1bmMuYyAgICAgICAgICAgICB8ICAg NCArCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3RhYmxlc3luYy5jIHwgMTE4 ICsrKysrLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYyB8 IDM5MSArKysrKysrKysrKysrKysrKysrLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYyAg ICAgICAgICAgICAgICAgICB8ICAyNCArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuaCAg ICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmluL3BzcWwvZGVzY3JpYmUuYyAgICAg ICAgICAgICAgICAgICAgIHwgIDI2ICstCiBzcmMvYmluL3BzcWwvdGFiLWNvbXBsZXRlLmMg ICAgICAgICAgICAgICAgIHwgIDI3ICstCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1Ymxp Y2F0aW9uLmggICAgICAgIHwgICAzICstCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1Ymxp Y2F0aW9uX3JlbC5oICAgIHwgICA2ICsKIHNyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMu aCAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvcGFyc2VyL3BhcnNlX25vZGUu aCAgICAgICAgICAgICB8ICAgMSArCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1Ymxp Y2F0aW9uLm91dCAgIHwgMTY3ICsrKysrKysrKwogc3JjL3Rlc3QvcmVncmVzcy9zcWwvcHVi bGljYXRpb24uc3FsICAgICAgICB8ICA5NCArKysrKwogc3JjL3Rlc3Qvc3Vic2NyaXB0aW9u L3QvMDI3X3Jvd19maWx0ZXIucGwgICB8IDM1NSArKysrKysrKysrKysrKysrKysKIDI1IGZp bGVzIGNoYW5nZWQsIDE1NjYgaW5zZXJ0aW9ucygrKSwgNTIgZGVsZXRpb25zKC0pCiBtb2Rl IGNoYW5nZSAxMDA2NDQgPT4gMTAwNzU1IHNyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMjdfcm93X2ZpbHRl ci5wbAoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9jYXRhbG9ncy5zZ21sIGIvZG9jL3Ny Yy9zZ21sL2NhdGFsb2dzLnNnbWwKaW5kZXggYzFkMTFiZTczZi4uYWY2YjFmNjg0YyAxMDA2 NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2NhdGFsb2dzLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21s L2NhdGFsb2dzLnNnbWwKQEAgLTYyOTksNiArNjI5OSwxNCBAQCBTQ1JBTS1TSEEtMjU2JDxy ZXBsYWNlYWJsZT4mbHQ7aXRlcmF0aW9uIGNvdW50Jmd0OzwvcmVwbGFjZWFibGU+OjxyZXBs YWNlYWJsZT4mbAogICAgICAgIFJlZmVyZW5jZSB0byByZWxhdGlvbgogICAgICAgPC9wYXJh PjwvZW50cnk+CiAgICAgIDwvcm93PgorCisgICAgIDxyb3c+CisgICAgICA8ZW50cnkgcm9s ZT0iY2F0YWxvZ190YWJsZV9lbnRyeSI+PHBhcmEgcm9sZT0iY29sdW1uX2RlZmluaXRpb24i PgorICAgICAgPHN0cnVjdGZpZWxkPnBycXVhbDwvc3RydWN0ZmllbGQ+IDx0eXBlPnBnX25v ZGVfdHJlZTwvdHlwZT4KKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwYXJhPkV4cHJlc3Npb24g dHJlZSAoaW4gPGZ1bmN0aW9uPm5vZGVUb1N0cmluZygpPC9mdW5jdGlvbj4KKyAgICAgIHJl cHJlc2VudGF0aW9uKSBmb3IgdGhlIHJlbGF0aW9uJ3MgcXVhbGlmeWluZyBjb25kaXRpb248 L3BhcmE+PC9lbnRyeT4KKyAgICAgPC9yb3c+CiAgICAgPC90Ym9keT4KICAgIDwvdGdyb3Vw PgogICA8L3RhYmxlPgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9hbHRlcl9wdWJs aWNhdGlvbi5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9hbHRlcl9wdWJsaWNhdGlvbi5zZ21s CmluZGV4IGJiNGVmNWU1ZTIuLjVkOTg2OWM0ZjYgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dt bC9yZWYvYWx0ZXJfcHVibGljYXRpb24uc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL2Fs dGVyX3B1YmxpY2F0aW9uLnNnbWwKQEAgLTMwLDcgKzMwLDcgQEAgQUxURVIgUFVCTElDQVRJ T04gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm5hbWU8L3JlcGxhY2VhYmxlPiBS RU5BTUUgVE8gPHIKIAogPHBocmFzZT53aGVyZSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFt ZXRlciI+cHVibGljYXRpb25fb2JqZWN0PC9yZXBsYWNlYWJsZT4gaXMgb25lIG9mOjwvcGhy YXNlPgogCi0gICAgVEFCTEUgWyBPTkxZIF0gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0 ZXIiPnRhYmxlX25hbWU8L3JlcGxhY2VhYmxlPiBbICogXSBbLCAuLi4gXQorICAgIFRBQkxF IFsgT05MWSBdIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj50YWJsZV9uYW1lPC9y ZXBsYWNlYWJsZT4gWyAqIF0gWyBXSEVSRSAoIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1l dGVyIj5leHByZXNzaW9uPC9yZXBsYWNlYWJsZT4gKSBdIFssIC4uLiBdCiAgICAgQUxMIFRB QkxFUyBJTiBTQ0hFTUEgeyA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+c2NoZW1h X25hbWU8L3JlcGxhY2VhYmxlPiB8IENVUlJFTlRfU0NIRU1BIH0gWywgLi4uIF0KIDwvc3lu b3BzaXM+CiAgPC9yZWZzeW5vcHNpc2Rpdj4KQEAgLTUyLDcgKzUyLDkgQEAgQUxURVIgUFVC TElDQVRJT04gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm5hbWU8L3JlcGxhY2Vh YmxlPiBSRU5BTUUgVE8gPHIKICAgIHJlbW92ZSBvbmUgb3IgbW9yZSB0YWJsZXMvc2NoZW1h cyBmcm9tIHRoZSBwdWJsaWNhdGlvbi4gIE5vdGUgdGhhdCBhZGRpbmcKICAgIHRhYmxlcy9z Y2hlbWFzIHRvIGEgcHVibGljYXRpb24gdGhhdCBpcyBhbHJlYWR5IHN1YnNjcmliZWQgdG8g d2lsbCByZXF1aXJlIGEKICAgIDxsaXRlcmFsPkFMVEVSIFNVQlNDUklQVElPTiAuLi4gUkVG UkVTSCBQVUJMSUNBVElPTjwvbGl0ZXJhbD4gYWN0aW9uIG9uIHRoZQotICAgc3Vic2NyaWJp bmcgc2lkZSBpbiBvcmRlciB0byBiZWNvbWUgZWZmZWN0aXZlLgorICAgc3Vic2NyaWJpbmcg c2lkZSBpbiBvcmRlciB0byBiZWNvbWUgZWZmZWN0aXZlLiBOb3RlIGFsc28gdGhhdCB0aGUg Y29tYmluYXRpb24KKyAgIG9mIDxsaXRlcmFsPkRST1A8L2xpdGVyYWw+IHdpdGggPGxpdGVy YWw+V0hFUkU8L2xpdGVyYWw+IGNsYXVzZSBpcyBub3QKKyAgIGFsbG93ZWQuCiAgIDwvcGFy YT4KIAogICA8cGFyYT4KQEAgLTEwOSw3ICsxMTEsMTIgQEAgQUxURVIgUFVCTElDQVRJT04g PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm5hbWU8L3JlcGxhY2VhYmxlPiBSRU5B TUUgVE8gPHIKICAgICAgIHRhYmxlIG5hbWUsIG9ubHkgdGhhdCB0YWJsZSBpcyBhZmZlY3Rl ZC4gIElmIDxsaXRlcmFsPk9OTFk8L2xpdGVyYWw+IGlzIG5vdAogICAgICAgc3BlY2lmaWVk LCB0aGUgdGFibGUgYW5kIGFsbCBpdHMgZGVzY2VuZGFudCB0YWJsZXMgKGlmIGFueSkgYXJl CiAgICAgICBhZmZlY3RlZC4gIE9wdGlvbmFsbHksIDxsaXRlcmFsPio8L2xpdGVyYWw+IGNh biBiZSBzcGVjaWZpZWQgYWZ0ZXIgdGhlIHRhYmxlCi0gICAgICBuYW1lIHRvIGV4cGxpY2l0 bHkgaW5kaWNhdGUgdGhhdCBkZXNjZW5kYW50IHRhYmxlcyBhcmUgaW5jbHVkZWQuCisgICAg ICBuYW1lIHRvIGV4cGxpY2l0bHkgaW5kaWNhdGUgdGhhdCBkZXNjZW5kYW50IHRhYmxlcyBh cmUgaW5jbHVkZWQuIElmIHRoZQorICAgICAgb3B0aW9uYWwgPGxpdGVyYWw+V0hFUkU8L2xp dGVyYWw+IGNsYXVzZSBpcyBzcGVjaWZpZWQsIHJvd3MgdGhhdCBkbyBub3QKKyAgICAgIHNh dGlzZnkgdGhlIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5leHByZXNzaW9uPC9y ZXBsYWNlYWJsZT4gd2lsbAorICAgICAgbm90IGJlIHB1Ymxpc2hlZC4gTm90ZSB0aGF0IHBh cmVudGhlc2VzIGFyZSByZXF1aXJlZCBhcm91bmQgdGhlCisgICAgICBleHByZXNzaW9uLiBU aGUgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmV4cHJlc3Npb248L3JlcGxhY2Vh YmxlPgorICAgICAgaXMgZXZhbHVhdGVkIHdpdGggdGhlIHJvbGUgdXNlZCBmb3IgdGhlIHJl cGxpY2F0aW9uIGNvbm5lY3Rpb24uCiAgICAgIDwvcGFyYT4KICAgICA8L2xpc3RpdGVtPgog ICAgPC92YXJsaXN0ZW50cnk+CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0 ZV9wdWJsaWNhdGlvbi5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfcHVibGljYXRp b24uc2dtbAppbmRleCBkODA1ZThlNzdhLi5iMjE1OTVmOTU1IDEwMDY0NAotLS0gYS9kb2Mv c3JjL3NnbWwvcmVmL2NyZWF0ZV9wdWJsaWNhdGlvbi5zZ21sCisrKyBiL2RvYy9zcmMvc2dt bC9yZWYvY3JlYXRlX3B1YmxpY2F0aW9uLnNnbWwKQEAgLTI4LDcgKzI4LDcgQEAgQ1JFQVRF IFBVQkxJQ0FUSU9OIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5uYW1lPC9yZXBs YWNlYWJsZT4KIAogPHBocmFzZT53aGVyZSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRl ciI+cHVibGljYXRpb25fb2JqZWN0PC9yZXBsYWNlYWJsZT4gaXMgb25lIG9mOjwvcGhyYXNl PgogCi0gICAgVEFCTEUgWyBPTkxZIF0gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIi PnRhYmxlX25hbWU8L3JlcGxhY2VhYmxlPiBbICogXSBbLCAuLi4gXQorICAgIFRBQkxFIFsg T05MWSBdIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj50YWJsZV9uYW1lPC9yZXBs YWNlYWJsZT4gWyAqIF0gWyBXSEVSRSAoIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVy Ij5leHByZXNzaW9uPC9yZXBsYWNlYWJsZT4gKSBdIFssIC4uLiBdCiAgICAgQUxMIFRBQkxF UyBJTiBTQ0hFTUEgeyA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+c2NoZW1hX25h bWU8L3JlcGxhY2VhYmxlPiB8IENVUlJFTlRfU0NIRU1BIH0gWywgLi4uIF0KIDwvc3lub3Bz aXM+CiAgPC9yZWZzeW5vcHNpc2Rpdj4KQEAgLTc2LDYgKzc2LDEwIEBAIENSRUFURSBQVUJM SUNBVElPTiA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bmFtZTwvcmVwbGFjZWFi bGU+CiAgICAgICBUaGlzIGRvZXMgbm90IGFwcGx5IHRvIGEgcGFydGl0aW9uZWQgdGFibGUs IGhvd2V2ZXIuICBUaGUgcGFydGl0aW9ucyBvZgogICAgICAgYSBwYXJ0aXRpb25lZCB0YWJs ZSBhcmUgYWx3YXlzIGltcGxpY2l0bHkgY29uc2lkZXJlZCBwYXJ0IG9mIHRoZQogICAgICAg cHVibGljYXRpb24sIHNvIHRoZXkgYXJlIG5ldmVyIGV4cGxpY2l0bHkgYWRkZWQgdG8gdGhl IHB1YmxpY2F0aW9uLgorICAgICAgSWYgdGhlIG9wdGlvbmFsIDxsaXRlcmFsPldIRVJFPC9s aXRlcmFsPiBjbGF1c2UgaXMgc3BlY2lmaWVkLCByb3dzIHRoYXQgZG8gCisgICAgICBub3Qg c2F0aXNmeSB0aGUgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmV4cHJlc3Npb248 L3JlcGxhY2VhYmxlPiAKKyAgICAgIHdpbGwgbm90IGJlIHB1Ymxpc2hlZC4gTm90ZSB0aGF0 IHBhcmVudGhlc2VzIGFyZSByZXF1aXJlZCBhcm91bmQgdGhlIAorICAgICAgZXhwcmVzc2lv bi4gSXQgaGFzIG5vIGVmZmVjdCBvbiA8bGl0ZXJhbD5UUlVOQ0FURTwvbGl0ZXJhbD4gY29t bWFuZHMuCiAgICAgIDwvcGFyYT4KIAogICAgICA8cGFyYT4KQEAgLTIyNSw2ICsyMjksMjMg QEAgQ1JFQVRFIFBVQkxJQ0FUSU9OIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5u YW1lPC9yZXBsYWNlYWJsZT4KICAgIGRpc2FsbG93ZWQgb24gdGhvc2UgdGFibGVzLgogICA8 L3BhcmE+CiAKKyAgPHBhcmE+CisgICBUaGUgPGxpdGVyYWw+V0hFUkU8L2xpdGVyYWw+IGNs YXVzZSBzaG91bGQgY29udGFpbiBvbmx5IGNvbHVtbnMgdGhhdCBhcmUKKyAgIHBhcnQgb2Yg dGhlIHByaW1hcnkga2V5IG9yIGJlIGNvdmVyZWQgYnkgPGxpdGVyYWw+UkVQTElDQQorICAg SURFTlRJVFk8L2xpdGVyYWw+IG90aGVyd2lzZSwgPGNvbW1hbmQ+VVBEQVRFPC9jb21tYW5k PiBhbmQKKyAgIDxjb21tYW5kPkRFTEVURTwvY29tbWFuZD4gb3BlcmF0aW9ucyB3aWxsIG5v dCBiZSByZXBsaWNhdGVkLiBUaGF0J3MgYmVjYXVzZQorICAgb2xkIHJvdyBpcyB1c2VkIGFu ZCBpdCBvbmx5IGNvbnRhaW5zIHByaW1hcnkga2V5IG9yIGNvbHVtbnMgdGhhdCBhcmUgcGFy dCBvZgorICAgdGhlIDxsaXRlcmFsPlJFUExJQ0EgSURFTlRJVFk8L2xpdGVyYWw+OyB0aGUg cmVtYWluaW5nIGNvbHVtbnMgYXJlCisgICA8bGl0ZXJhbD5OVUxMPC9saXRlcmFsPi4gRm9y IDxjb21tYW5kPklOU0VSVDwvY29tbWFuZD4gb3BlcmF0aW9ucywgYW55IGNvbHVtbgorICAg bWlnaHQgYmUgdXNlZCBpbiB0aGUgPGxpdGVyYWw+V0hFUkU8L2xpdGVyYWw+IGNsYXVzZS4g TmV3IHJvdyBpcyB1c2VkIGFuZCBpdAorICAgY29udGFpbnMgYWxsIGNvbHVtbnMuIEEgPGxp dGVyYWw+TlVMTDwvbGl0ZXJhbD4gdmFsdWUgY2F1c2VzIHRoZSBleHByZXNzaW9uCisgICB0 byBldmFsdWF0ZSB0byBmYWxzZTsgYXZvaWQgdXNpbmcgY29sdW1ucyB3aXRob3V0IG5vdC1u dWxsIGNvbnN0cmFpbnRzIGluIHRoZQorICAgPGxpdGVyYWw+V0hFUkU8L2xpdGVyYWw+IGNs YXVzZS4gVGhlIDxsaXRlcmFsPldIRVJFPC9saXRlcmFsPiBjbGF1c2UgYWxsb3dzCisgICBz aW1wbGUgZXhwcmVzc2lvbnMuIFRoZSBzaW1wbGUgZXhwcmVzc2lvbiBjYW5ub3QgY29udGFp biBhbnkgYWdncmVnYXRlIG9yCisgICB3aW5kb3cgZnVuY3Rpb25zLCBub24taW1tdXRhYmxl IGZ1bmN0aW9ucywgdXNlci1kZWZpbmVkIHR5cGVzLCBvcGVyYXRvcnMgb3IKKyAgIGZ1bmN0 aW9ucy4KKyAgPC9wYXJhPgorCiAgIDxwYXJhPgogICAgRm9yIGFuIDxjb21tYW5kPklOU0VS VCAuLi4gT04gQ09ORkxJQ1Q8L2NvbW1hbmQ+IGNvbW1hbmQsIHRoZSBwdWJsaWNhdGlvbiB3 aWxsCiAgICBwdWJsaXNoIHRoZSBvcGVyYXRpb24gdGhhdCBhY3R1YWxseSByZXN1bHRzIGZy b20gdGhlIGNvbW1hbmQuICBTbyBkZXBlbmRpbmcKQEAgLTI0Nyw2ICsyNjgsMTEgQEAgQ1JF QVRFIFBVQkxJQ0FUSU9OIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5uYW1lPC9y ZXBsYWNlYWJsZT4KICAgPHBhcmE+CiAgICA8YWNyb255bT5EREw8L2Fjcm9ueW0+IG9wZXJh dGlvbnMgYXJlIG5vdCBwdWJsaXNoZWQuCiAgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFRo ZSA8bGl0ZXJhbD5XSEVSRTwvbGl0ZXJhbD4gY2xhdXNlIGV4cHJlc3Npb24gaXMgZXhlY3V0 ZWQgd2l0aCB0aGUgcm9sZSB1c2VkCisgICBmb3IgdGhlIHJlcGxpY2F0aW9uIGNvbm5lY3Rp b24uCisgIDwvcGFyYT4KICA8L3JlZnNlY3QxPgogCiAgPHJlZnNlY3QxPgpAQCAtMjU5LDYg KzI4NSwxMyBAQCBDUkVBVEUgUFVCTElDQVRJT04gbXlwdWJsaWNhdGlvbiBGT1IgVEFCTEUg dXNlcnMsIGRlcGFydG1lbnRzOwogPC9wcm9ncmFtbGlzdGluZz4KICAgPC9wYXJhPgogCisg IDxwYXJhPgorICAgQ3JlYXRlIGEgcHVibGljYXRpb24gdGhhdCBwdWJsaXNoZXMgYWxsIGNo YW5nZXMgZnJvbSBhY3RpdmUgZGVwYXJ0bWVudHM6Cis8cHJvZ3JhbWxpc3Rpbmc+CitDUkVB VEUgUFVCTElDQVRJT04gYWN0aXZlX2RlcGFydG1lbnRzIEZPUiBUQUJMRSBkZXBhcnRtZW50 cyBXSEVSRSAoYWN0aXZlIElTIFRSVUUpOworPC9wcm9ncmFtbGlzdGluZz4KKyAgPC9wYXJh PgorCiAgIDxwYXJhPgogICAgQ3JlYXRlIGEgcHVibGljYXRpb24gdGhhdCBwdWJsaXNoZXMg YWxsIGNoYW5nZXMgaW4gYWxsIHRhYmxlczoKIDxwcm9ncmFtbGlzdGluZz4KZGlmZiAtLWdp dCBhL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3N1YnNjcmlwdGlvbi5zZ21sIGIvZG9jL3Ny Yy9zZ21sL3JlZi9jcmVhdGVfc3Vic2NyaXB0aW9uLnNnbWwKaW5kZXggOTkwYTQxZjFhMS4u NGJhYTdmZDc4MSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfc3Vic2Ny aXB0aW9uLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfc3Vic2NyaXB0aW9u LnNnbWwKQEAgLTIwOCw2ICsyMDgsMTMgQEAgQ1JFQVRFIFNVQlNDUklQVElPTiA8cmVwbGFj ZWFibGUgY2xhc3M9InBhcmFtZXRlciI+c3Vic2NyaXB0aW9uX25hbWU8L3JlcGxhY2VhYmwK ICAgICAgICAgICB0aGF0IGFyZSBiZWluZyBzdWJzY3JpYmVkIHRvIHdoZW4gdGhlIHJlcGxp Y2F0aW9uIHN0YXJ0cy4KICAgICAgICAgICBUaGUgZGVmYXVsdCBpcyA8bGl0ZXJhbD50cnVl PC9saXRlcmFsPi4KICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgIDxwYXJhPgorICAgICAg ICAgIElmIHRoZSBwdWJsaWNhdGlvbnMgY29udGFpbiBjb25kaXRpb25hbCBleHByZXNzaW9u cywgaXQgd2lsbCBhZmZlY3QKKyAgICAgICAgICB3aGF0IGRhdGEgaXMgY29waWVkLiBSZWZl ciB0byB0aGUKKyAgICAgICAgICA8eHJlZiBsaW5rZW5kPSJzcWwtY3JlYXRlc3Vic2NyaXB0 aW9uLW5vdGVzIiAvPiBmb3IgZGV0YWlscy4KKyAgICAgICAgICBSb3ctZmlsdGVyaW5nIG1h eSBhbHNvIGFwcGx5IGhlcmUgYW5kIHdpbGwgYWZmZWN0IHdoYXQgZGF0YSBpcworICAgICAg ICAgIGNvcGllZC4gUmVmZXIgdG8gdGhlIE5vdGVzIHNlY3Rpb24gYmVsb3cuCisgICAgICAg ICA8L3BhcmE+CiAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgPC92YXJsaXN0ZW50cnk+ CiAKQEAgLTI5Myw3ICszMDAsNyBAQCBDUkVBVEUgU1VCU0NSSVBUSU9OIDxyZXBsYWNlYWJs ZSBjbGFzcz0icGFyYW1ldGVyIj5zdWJzY3JpcHRpb25fbmFtZTwvcmVwbGFjZWFibAogICA8 L3ZhcmlhYmxlbGlzdD4KICA8L3JlZnNlY3QxPgogCi0gPHJlZnNlY3QxPgorIDxyZWZzZWN0 MSBpZD0ic3FsLWNyZWF0ZXN1YnNjcmlwdGlvbi1ub3RlcyIgeHJlZmxhYmVsPSJOb3RlcyI+ CiAgIDx0aXRsZT5Ob3RlczwvdGl0bGU+CiAKICAgPHBhcmE+CkBAIC0zMTksNiArMzI2LDIw IEBAIENSRUFURSBTVUJTQ1JJUFRJT04gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIi PnN1YnNjcmlwdGlvbl9uYW1lPC9yZXBsYWNlYWJsCiAgICB0aGUgcGFyYW1ldGVyIDxsaXRl cmFsPmNyZWF0ZV9zbG90ID0gZmFsc2U8L2xpdGVyYWw+LiAgVGhpcyBpcyBhbgogICAgaW1w bGVtZW50YXRpb24gcmVzdHJpY3Rpb24gdGhhdCBtaWdodCBiZSBsaWZ0ZWQgaW4gYSBmdXR1 cmUgcmVsZWFzZS4KICAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgSWYgYW55IHRhYmxlIGlu IHRoZSBwdWJsaWNhdGlvbiBoYXMgYSA8bGl0ZXJhbD5XSEVSRTwvbGl0ZXJhbD4gY2xhdXNl LCByb3dzCisgICB0aGF0IGRvIG5vdCBzYXRpc2Z5IHRoZSA8cmVwbGFjZWFibGUgY2xhc3M9 InBhcmFtZXRlciI+ZXhwcmVzc2lvbjwvcmVwbGFjZWFibGU+CisgICB3aWxsIG5vdCBiZSBy ZXBsaWNhdGVkLiBJZiB0aGUgc3Vic2NyaXB0aW9uIGhhcyBzZXZlcmFsIHB1YmxpY2F0aW9u cyBpbgorICAgd2hpY2ggdGhlIHNhbWUgdGFibGUgaGFzIGJlZW4gcHVibGlzaGVkIHdpdGgg ZGlmZmVyZW50CisgICA8bGl0ZXJhbD5XSEVSRTwvbGl0ZXJhbD4gY2xhdXNlcywgYSByb3cg d2lsbCBiZSByZXBsaWNhdGVkIGlmIGFueSBvZiB0aGUKKyAgIGV4cHJlc3Npb25zIGlzIHNh dGlzZmllZC4gSW4gdGhpcyBjYXNlIG9mIGRpZmZlcmVudCA8bGl0ZXJhbD5XSEVSRTwvbGl0 ZXJhbD4KKyAgIGNsYXVzZXMsIGlmIG9uZSBvZiB0aGUgZXhwcmVzc2lvbnMgaXMgbm90IGRl ZmluZWQsIHJvd3MgYXJlIGFsd2F5cyByZXBsaWNhdGVkCisgICByZWdhcmRsZXNzIG9mIHRo ZSBkZWZpbml0aW9uIG9mIHRoZSBvdGhlciBleHByZXNzaW9ucy4gSWYgdGhlIHN1YnNjcmli ZXIgaXMgYQorICAgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiB2ZXJz aW9uIGJlZm9yZSAxNSB0aGVuIGFueSByb3cgZmlsdGVyaW5nCisgICBpcyBpZ25vcmVkIGR1 cmluZyB0aGUgaW5pdGlhbCB0YWJsZSBzeW5jaHJvbml6YXRpb24gcGhhc2UuCisgIDwvcGFy YT4KKwogIDwvcmVmc2VjdDE+CiAKICA8cmVmc2VjdDE+CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3Bn X3B1YmxpY2F0aW9uLmMKaW5kZXggNjM1NzliMmY4Mi4uMDRlMjI3MDI5MyAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jCisrKyBiL3NyYy9iYWNr ZW5kL2NhdGFsb2cvcGdfcHVibGljYXRpb24uYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1 ZGUgImNhdGFsb2cvb2JqZWN0YWRkcmVzcy5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfaW5o ZXJpdHMuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX25hbWVzcGFjZS5oIgorI2luY2x1ZGUg ImNhdGFsb2cvcGdfcHJvYy5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfcHVibGljYXRpb24u aCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3B1YmxpY2F0aW9uX25hbWVzcGFjZS5oIgogI2lu Y2x1ZGUgImNhdGFsb2cvcGdfcHVibGljYXRpb25fcmVsLmgiCkBAIC0zNiw2ICszNywxMCBA QAogI2luY2x1ZGUgImNvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5oIgogI2luY2x1ZGUgImZ1 bmNhcGkuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJub2Rlcy9ub2Rl RnVuY3MuaCIKKyNpbmNsdWRlICJwYXJzZXIvcGFyc2VfY2xhdXNlLmgiCisjaW5jbHVkZSAi cGFyc2VyL3BhcnNlX2NvbGxhdGUuaCIKKyNpbmNsdWRlICJwYXJzZXIvcGFyc2VfcmVsYXRp b24uaCIKICNpbmNsdWRlICJ1dGlscy9hcnJheS5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0 aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvY2F0Y2FjaGUuaCIKQEAgLTQ1LDYgKzUwLDEyIEBA CiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCiAjaW5jbHVkZSAidXRpbHMvc3lzY2FjaGUuaCIK IAordHlwZWRlZiBzdHJ1Y3QgUm93RmlsdGVyQ2hlY2tJbmZvCit7CisJUmVsYXRpb24JcmVs OworCVB1YmxpY2F0aW9uQWN0aW9ucyBwdWJhY3Rpb25zOworfSBSb3dGaWx0ZXJDaGVja0lu Zm87CisKIC8qCiAgKiBDaGVjayBpZiByZWxhdGlvbiBjYW4gYmUgaW4gZ2l2ZW4gcHVibGlj YXRpb24gYW5kIHRocm93cyBhcHByb3ByaWF0ZQogICogZXJyb3IgaWYgbm90LgpAQCAtMTA4 LDYgKzExOSwxNDAgQEAgY2hlY2tfcHVibGljYXRpb25fYWRkX3NjaGVtYShPaWQgc2NoZW1h aWQpCiAJCQkJIGVycmRldGFpbCgiVGVtcG9yYXJ5IHNjaGVtYXMgY2Fubm90IGJlIHJlcGxp Y2F0ZWQuIikpKTsKIH0KIAorLyoKKyAqIFRoaXMgcm91dGluZSBjaGVja3MgaWYgdGhlIHJv dyBmaWx0ZXIgZXhwcmVzc2lvbiBpcyBhICJzaW1wbGUgZXhwcmVzc2lvbiIuCisgKiBCeSAi c2ltcGxlIGV4cHJlc3Npb24iIGl0IG1lYW5zOgorICoKKyAqIC0gc2ltcGxlIG9yIGNvbXBv dW5kIGV4cHJlc3Npb25zOworICogICBFeGFtcGxlczoKKyAqICAgICAoVmFyIE9wIENvbnN0 KQorICogICAgIChWYXIgT3AgVmFyKQorICogICAgIChWYXIgT3AgQ29uc3QpIEJvb2wgKFZh ciBPcCBDb25zdCkKKyAqIC0gdXNlci1kZWZpbmVkIG9wZXJhdG9ycyBhcmUgbm90IGFsbG93 ZWQ7CisgKiAtIHVzZXItZGVmaW5lZCB0eXBlcyBhcmUgbm90IGFsbG93ZWQ7CisgKiAtIHVz ZXItZGVmaW5lZCBmdW5jdGlvbnMgYXJlIG5vdCBhbGxvd2VkOworICogLSBub24taW1tdXRh YmxlIGJ1aWx0aW4gZnVuY3Rpb25zIGFyZSBub3QgYWxsb3dlZC4KKyAqCisgKiBOT1RFUzoK KyAqCisgKiBVc2VyLWRlZmluZWQgZnVuY3Rpb25zLCBvcGVyYXRvcnMgb3IgdHlwZXMgYXJl IG5vdCBhbGxvd2VkIGJlY2F1c2UKKyAqIChhKSBpZiBhIHVzZXIgZHJvcHMgYSB1c2VyLWRl ZmluZWQgb2JqZWN0IHVzZWQgaW4gYSByb3cgZmlsdGVyIGV4cHJlc3Npb24sCisgKiB0aGUg bG9naWNhbCBkZWNvZGluZyBpbmZyYXN0cnVjdHVyZSB3b24ndCBiZSBhYmxlIHRvIHJlY292 ZXIgZnJvbSBzdWNoIHBpbG90CisgKiBlcnJvciBldmVuIGlmIHRoZSBvYmplY3QgaXMgcmVj cmVhdGVkIGFnYWluIGJlY2F1c2UgYSBoaXN0b3JpYyBzbmFwc2hvdCBpcworICogdXNlZCB0 byBleGVjdXRlIHRoZSByb3cgZmlsdGVyLgorICogKGIpIGEgdXNlci1kZWZpbmVkIGZ1bmN0 aW9uIGNhbiBiZSB1c2VkIHRvIGFjY2VzcyB0YWJsZXMgd2hpY2ggY291bGQgaGF2ZQorICog dW5wbGVhc2FudCByZXN1bHRzIGJlY2F1c2UgYSBoaXN0b3JpYyBzbmFwc2hvdCBpcyB1c2Vk LiBUaGF0J3Mgd2h5IG9ubHkKKyAqIG5vbi1pbW11dGFibGUgZnVuY3Rpb25zIGFyZSBhbGxv d2VkIGluIHJvdyBmaWx0ZXIgZXhwcmVzc2lvbnMuCisgKi8KK3N0YXRpYyBib29sCitwdWJs aWNhdGlvbl9yb3dfZmlsdGVyX3dhbGtlcihOb2RlICpub2RlLCBSb3dGaWx0ZXJDaGVja0lu Zm8gKnJmaW5mbykKK3sKKwljaGFyCSAgICplcnJvcm1zZyA9IE5VTEw7CisKKwlpZiAobm9k ZSA9PSBOVUxMKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoSXNBKG5vZGUsIFZhcikpCisJ eworCQlWYXIJCSAgICp2YXIgPSAoVmFyICopIG5vZGU7CisJCUF0dHJOdW1iZXIJYXR0bnVt ID0gdmFyLT52YXJhdHRubzsKKwkJY2hhcgkJcmVwbGlkZW50ID0gcmZpbmZvLT5yZWwtPnJk X3JlbC0+cmVscmVwbGlkZW50OworCisJCS8qCisJCSAqIENoZWNrIHJlcGxpY2EgaWRlbnRp dHkgaWYgdGhlIHB1YmxpY2F0aW9uIGFsbG93cyBVUERBVEUgYW5kL29yCisJCSAqIERFTEVU RSBhcyBETUwgb3BlcmF0aW9ucy4gUkVQTElDQSBJREVOVElUWSBGVUxMIGlzIE9LIHNpbmNl IGl0CisJCSAqIGluY2x1ZGVzIGFsbCBjb2x1bW5zIGluIHRoZSBvbGQgdHVwbGUuCisJCSAq LworCQlpZiAoKHJmaW5mby0+cHViYWN0aW9ucy5wdWJ1cGRhdGUgfHwgcmZpbmZvLT5wdWJh Y3Rpb25zLnB1YmRlbGV0ZSkgJiYKKwkJCXJlcGxpZGVudCAhPSBSRVBMSUNBX0lERU5USVRZ X0ZVTEwpCisJCXsKKwkJCUJpdG1hcHNldCAgKmJtc19yZXBsaWRlbnQgPSBOVUxMOworCisJ CQlpZiAocmVwbGlkZW50ID09IFJFUExJQ0FfSURFTlRJVFlfREVGQVVMVCkKKwkJCQlibXNf cmVwbGlkZW50ID0gUmVsYXRpb25HZXRJbmRleEF0dHJCaXRtYXAocmZpbmZvLT5yZWwsIElO REVYX0FUVFJfQklUTUFQX1BSSU1BUllfS0VZKTsKKwkJCWVsc2UgaWYgKHJlcGxpZGVudCA9 PSBSRVBMSUNBX0lERU5USVRZX0lOREVYKQorCQkJCWJtc19yZXBsaWRlbnQgPSBSZWxhdGlv bkdldEluZGV4QXR0ckJpdG1hcChyZmluZm8tPnJlbCwgSU5ERVhfQVRUUl9CSVRNQVBfSURF TlRJVFlfS0VZKTsKKworCQkJLyoKKwkJCSAqIFJFUExJQ0EgSURFTlRJVFkgTk9USElORyBk b2VzIG5vdCBjb250YWluIGNvbHVtbnMgaW4gdGhlIG9sZAorCQkJICogdHVwbGUgc28gaXQg aXMgbm90IHN1cHBvcnRlZC4gVGhlIHJlZmVyZW5jZWQgY29sdW1uIG11c3QgYmUKKwkJCSAq IGNvbnRhaW5lZCBieSBSRVBMSUNBIElERU5USVRZIERFRkFVTFQgKHByaW1hcnkga2V5KSBv ciBSRVBMSUNBCisJCQkgKiBJREVOVElUWSBJTkRFWCAoaW5kZXggY29sdW1ucykuCisJCQkg Ki8KKwkJCWlmIChyZXBsaWRlbnQgPT0gUkVQTElDQV9JREVOVElUWV9OT1RISU5HIHx8CisJ CQkJIWJtc19pc19tZW1iZXIoYXR0bnVtIC0gRmlyc3RMb3dJbnZhbGlkSGVhcEF0dHJpYnV0 ZU51bWJlciwgYm1zX3JlcGxpZGVudCkpCisJCQl7CisJCQkJY29uc3QgY2hhciAqY29sbmFt ZSA9IGdldF9hdHRuYW1lKFJlbGF0aW9uR2V0UmVsaWQocmZpbmZvLT5yZWwpLCBhdHRudW0s IGZhbHNlKTsKKworCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RF X0lOVkFMSURfQ09MVU1OX1JFRkVSRU5DRSksCisJCQkJCQkgZXJybXNnKCJjYW5ub3QgYWRk IHJlbGF0aW9uIFwiJXNcIiB0byBwdWJsaWNhdGlvbiIsCisJCQkJCQkJCVJlbGF0aW9uR2V0 UmVsYXRpb25OYW1lKHJmaW5mby0+cmVsKSksCisJCQkJCQkgZXJyZGV0YWlsKCJDb2x1bW4g XCIlc1wiIHVzZWQgaW4gdGhlIFdIRVJFIGV4cHJlc3Npb24gaXMgbm90IHBhcnQgb2YgdGhl IHJlcGxpY2EgaWRlbnRpdHkuIiwKKwkJCQkJCQkJICAgY29sbmFtZSkpKTsKKwkJCX0KKwor CQkJYm1zX2ZyZWUoYm1zX3JlcGxpZGVudCk7CisJCX0KKwkJZWxzZSBpZiAodmFyLT52YXJ0 eXBlID49IEZpcnN0Tm9ybWFsT2JqZWN0SWQpCisJCXsKKwkJCWVycm9ybXNnID0gXygiVXNl ci1kZWZpbmVkIHR5cGVzIGFyZSBub3QgYWxsb3dlZC4iKTsKKwkJfQorCX0KKwllbHNlIGlm IChJc0Eobm9kZSwgTGlzdCkgfHwgSXNBKG5vZGUsIENvbnN0KSB8fCBJc0Eobm9kZSwgQm9v bEV4cHIpIHx8IElzQShub2RlLCBOdWxsSWZFeHByKSB8fCBJc0Eobm9kZSwgTnVsbFRlc3Qp IHx8IElzQShub2RlLCBCb29sZWFuVGVzdCkgfHwgSXNBKG5vZGUsIENvYWxlc2NlRXhwcikg fHwgSXNBKG5vZGUsIENhc2VFeHByKSB8fCBJc0Eobm9kZSwgQ2FzZVRlc3RFeHByKSB8fCBJ c0Eobm9kZSwgTWluTWF4RXhwcikgfHwgSXNBKG5vZGUsIEFycmF5RXhwcikgfHwgSXNBKG5v ZGUsIFNjYWxhckFycmF5T3BFeHByKSB8fCBJc0Eobm9kZSwgWG1sRXhwcikpCisJeworCQkv KiBub2RlcyBhcmUgcGFydCBvZiBzaW1wbGUgZXhwcmVzc2lvbnMgKi8KKwl9CisJZWxzZSBp ZiAoSXNBKG5vZGUsIE9wRXhwcikpCisJeworCQlpZiAoKChPcEV4cHIgKikgbm9kZSktPm9w bm8gPj0gRmlyc3ROb3JtYWxPYmplY3RJZCkKKwkJCWVycm9ybXNnID0gXygiVXNlci1kZWZp bmVkIG9wZXJhdG9ycyBhcmUgbm90IGFsbG93ZWQuIik7CisJfQorCWVsc2UgaWYgKElzQShu b2RlLCBGdW5jRXhwcikpCisJeworCQlPaWQJCQlmdW5jaWQgPSAoKEZ1bmNFeHByICopIG5v ZGUpLT5mdW5jaWQ7CisJCWNvbnN0IGNoYXIgKmZ1bmNuYW1lID0gZ2V0X2Z1bmNfbmFtZShm dW5jaWQpOworCisJCWlmIChmdW5jaWQgPj0gRmlyc3ROb3JtYWxPYmplY3RJZCkKKwkJCWVy cm9ybXNnID0gcHNwcmludGYoXygiVXNlci1kZWZpbmVkIGZ1bmN0aW9ucyBhcmUgbm90IGFs bG93ZWQgKCVzKS4iKSwgZnVuY25hbWUpOworCQllbHNlIGlmIChmdW5jX3ZvbGF0aWxlKGZ1 bmNpZCkgIT0gUFJPVk9MQVRJTEVfSU1NVVRBQkxFKQorCQkJZXJyb3Jtc2cgPSBwc3ByaW50 ZihfKCJOb24taW1tdXRhYmxlIGZ1bmN0aW9ucyBhcmUgbm90IGFsbG93ZWQgKCVzKS4iKSwg ZnVuY25hbWUpOworCX0KKwllbHNlCisJeworCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJt c2coImludmFsaWQgcHVibGljYXRpb24gV0hFUkUgZXhwcmVzc2lvbiBmb3IgcmVsYXRpb24g XCIlc1wiIiwKKwkJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJmaW5mby0+cmVsKSks CisJCQkJIGVycmRldGFpbCgiRXhwcmVzc2lvbnMgb25seSBhbGxvd3MgY29sdW1ucywgY29u c3RhbnRzIGFuZCBzb21lIGJ1aWx0aW4gZnVuY3Rpb25zIGFuZCBvcGVyYXRvcnMuIikpKTsK Kwl9CisKKwlpZiAoZXJyb3Jtc2cpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycm1zZygi aW52YWxpZCBwdWJsaWNhdGlvbiBXSEVSRSBleHByZXNzaW9uIGZvciByZWxhdGlvbiBcIiVz XCIiLAorCQkJCQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmZpbmZvLT5yZWwpKSwKKwkJ CQkgZXJyZGV0YWlsKCIlcyIsIGVycm9ybXNnKSkpOworCisJcmV0dXJuIGV4cHJlc3Npb25f dHJlZV93YWxrZXIobm9kZSwgcHVibGljYXRpb25fcm93X2ZpbHRlcl93YWxrZXIsICh2b2lk ICopIHJmaW5mbyk7Cit9CisKKy8qCisgKiBWYWxpZGF0ZSB0aGUgcm93IGZpbHRlciB3aXRo IHRoZSBmb2xsb3dpbmcgcnVsZXM6CisgKiAoYSkgZmV3IG5vZGUgdHlwZXMgYXJlIGFsbG93 ZWQgaW4gdGhlIGV4cHJlc3Npb24uIFNlZSB0aGUgZnVuY3Rpb24KKyAqIHB1YmxpY2F0aW9u X3Jvd19maWx0ZXJfd2Fsa2VyIGZvciBkZXRhaWxzLgorICogKGIpIElmIHRoZSBwdWJsaWNh dGlvbiBwdWJsaXNoZXMgVVBEQVRFIGFuZC9vciBERUxFVEUgb3BlcmF0aW9ucywgYWxsCisg KiBjb2x1bW5zIHVzZWQgaW4gdGhlIHJvdyBmaWx0ZXIgbXVzdCBiZSBjb250YWluZWQgaW4g dGhlIHJlcGxpY2EgaWRlbnRpdHkuCisgKi8KK3N0YXRpYyB2b2lkCitjaGVja19wdWJsaWNh dGlvbl9yb3dfZmlsdGVyKFB1YmxpY2F0aW9uQWN0aW9ucyBwdWJhY3Rpb25zLCBSZWxhdGlv biByZWwsIE5vZGUgKnJmbm9kZSkKK3sKKwlSb3dGaWx0ZXJDaGVja0luZm8gcmZpbmZvID0g ezB9OworCisJcmZpbmZvLnJlbCA9IHJlbDsKKwlyZmluZm8ucHViYWN0aW9ucyA9IHB1YmFj dGlvbnM7CisKKwlwdWJsaWNhdGlvbl9yb3dfZmlsdGVyX3dhbGtlcihyZm5vZGUsICZyZmlu Zm8pOworfQorCiAvKgogICogUmV0dXJucyBpZiByZWxhdGlvbiByZXByZXNlbnRlZCBieSBv aWQgYW5kIEZvcm1fcGdfY2xhc3MgZW50cnkKICAqIGlzIHB1Ymxpc2hhYmxlLgpAQCAtMjU3 LDE4ICs0MDIsMjIgQEAgR2V0UHViUGFydGl0aW9uT3B0aW9uUmVsYXRpb25zKExpc3QgKnJl c3VsdCwgUHVibGljYXRpb25QYXJ0T3B0IHB1Yl9wYXJ0b3B0LAogICogSW5zZXJ0IG5ldyBw dWJsaWNhdGlvbiAvIHJlbGF0aW9uIG1hcHBpbmcuCiAgKi8KIE9iamVjdEFkZHJlc3MKLXB1 YmxpY2F0aW9uX2FkZF9yZWxhdGlvbihPaWQgcHViaWQsIFB1YmxpY2F0aW9uUmVsSW5mbyAq dGFyZ2V0cmVsLAorcHVibGljYXRpb25fYWRkX3JlbGF0aW9uKE9pZCBwdWJpZCwgUHVibGlj YXRpb25SZWxJbmZvICpwcmksCiAJCQkJCQkgYm9vbCBpZl9ub3RfZXhpc3RzKQogewogCVJl bGF0aW9uCXJlbDsKIAlIZWFwVHVwbGUJdHVwOwogCURhdHVtCQl2YWx1ZXNbTmF0dHNfcGdf cHVibGljYXRpb25fcmVsXTsKIAlib29sCQludWxsc1tOYXR0c19wZ19wdWJsaWNhdGlvbl9y ZWxdOwotCU9pZAkJCXJlbGlkID0gUmVsYXRpb25HZXRSZWxpZCh0YXJnZXRyZWwtPnJlbGF0 aW9uKTsKKwlSZWxhdGlvbgl0YXJnZXRyZWwgPSBwcmktPnJlbGF0aW9uOworCU9pZAkJCXJl bGlkID0gUmVsYXRpb25HZXRSZWxpZCh0YXJnZXRyZWwpOwogCU9pZAkJCXBycmVsaWQ7CiAJ UHVibGljYXRpb24gKnB1YiA9IEdldFB1YmxpY2F0aW9uKHB1YmlkKTsKIAlPYmplY3RBZGRy ZXNzIG15c2VsZiwKIAkJCQlyZWZlcmVuY2VkOworCVBhcnNlU3RhdGUgKnBzdGF0ZTsKKwlQ YXJzZU5hbWVzcGFjZUl0ZW0gKm5zaXRlbTsKKwlOb2RlCSAgICp3aGVyZWNsYXVzZSA9IE5V TEw7CiAJTGlzdAkgICAqcmVsaWRzID0gTklMOwogCiAJcmVsID0gdGFibGVfb3BlbihQdWJs aWNhdGlvblJlbFJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOwpAQCAtMjg5LDEwICs0 MzgsMzMgQEAgcHVibGljYXRpb25fYWRkX3JlbGF0aW9uKE9pZCBwdWJpZCwgUHVibGljYXRp b25SZWxJbmZvICp0YXJnZXRyZWwsCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUo RVJSQ09ERV9EVVBMSUNBVEVfT0JKRUNUKSwKIAkJCQkgZXJybXNnKCJyZWxhdGlvbiBcIiVz XCIgaXMgYWxyZWFkeSBtZW1iZXIgb2YgcHVibGljYXRpb24gXCIlc1wiIiwKLQkJCQkJCVJl bGF0aW9uR2V0UmVsYXRpb25OYW1lKHRhcmdldHJlbC0+cmVsYXRpb24pLCBwdWItPm5hbWUp KSk7CisJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZSh0YXJnZXRyZWwpLCBwdWItPm5h bWUpKSk7CiAJfQogCi0JY2hlY2tfcHVibGljYXRpb25fYWRkX3JlbGF0aW9uKHRhcmdldHJl bC0+cmVsYXRpb24pOworCWNoZWNrX3B1YmxpY2F0aW9uX2FkZF9yZWxhdGlvbih0YXJnZXRy ZWwpOworCisJaWYgKHByaS0+d2hlcmVDbGF1c2UgIT0gTlVMTCkKKwl7CisJCS8qIFNldCB1 cCBhIFBhcnNlU3RhdGUgdG8gcGFyc2Ugd2l0aCAqLworCQlwc3RhdGUgPSBtYWtlX3BhcnNl c3RhdGUoTlVMTCk7CisJCXBzdGF0ZS0+cF9zb3VyY2V0ZXh0ID0gbm9kZVRvU3RyaW5nKHBy aS0+d2hlcmVDbGF1c2UpOworCisJCW5zaXRlbSA9IGFkZFJhbmdlVGFibGVFbnRyeUZvclJl bGF0aW9uKHBzdGF0ZSwgdGFyZ2V0cmVsLAorCQkJCQkJCQkJCQkgICBBY2Nlc3NTaGFyZUxv Y2ssCisJCQkJCQkJCQkJCSAgIE5VTEwsIGZhbHNlLCBmYWxzZSk7CisJCWFkZE5TSXRlbVRv UXVlcnkocHN0YXRlLCBuc2l0ZW0sIGZhbHNlLCB0cnVlLCB0cnVlKTsKKworCQl3aGVyZWNs YXVzZSA9IHRyYW5zZm9ybVdoZXJlQ2xhdXNlKHBzdGF0ZSwKKwkJCQkJCQkJCQkgICBjb3B5 T2JqZWN0KHByaS0+d2hlcmVDbGF1c2UpLAorCQkJCQkJCQkJCSAgIEVYUFJfS0lORF9QVUJM SUNBVElPTl9XSEVSRSwKKwkJCQkJCQkJCQkgICAiUFVCTElDQVRJT04iKTsKKworCQkvKiBW YWxpZGF0ZSByb3cgZmlsdGVyIGV4cHJlc3Npb24gKi8KKwkJY2hlY2tfcHVibGljYXRpb25f cm93X2ZpbHRlcihwdWItPnB1YmFjdGlvbnMsIHRhcmdldHJlbCwgd2hlcmVjbGF1c2UpOwor CisJCS8qIEZpeCB1cCBjb2xsYXRpb24gaW5mb3JtYXRpb24gKi8KKwkJYXNzaWduX2V4cHJf Y29sbGF0aW9ucyhwc3RhdGUsIHdoZXJlY2xhdXNlKTsKKwl9CiAKIAkvKiBGb3JtIGEgdHVw bGUuICovCiAJbWVtc2V0KHZhbHVlcywgMCwgc2l6ZW9mKHZhbHVlcykpOwpAQCAtMzA2LDYg KzQ3OCwxMiBAQCBwdWJsaWNhdGlvbl9hZGRfcmVsYXRpb24oT2lkIHB1YmlkLCBQdWJsaWNh dGlvblJlbEluZm8gKnRhcmdldHJlbCwKIAl2YWx1ZXNbQW51bV9wZ19wdWJsaWNhdGlvbl9y ZWxfcHJyZWxpZCAtIDFdID0KIAkJT2JqZWN0SWRHZXREYXR1bShyZWxpZCk7CiAKKwkvKiBB ZGQgcXVhbGlmaWNhdGlvbnMsIGlmIGF2YWlsYWJsZSAqLworCWlmICh3aGVyZWNsYXVzZSkK KwkJdmFsdWVzW0FudW1fcGdfcHVibGljYXRpb25fcmVsX3BycXVhbCAtIDFdID0gQ1N0cmlu Z0dldFRleHREYXR1bShub2RlVG9TdHJpbmcod2hlcmVjbGF1c2UpKTsKKwllbHNlCisJCW51 bGxzW0FudW1fcGdfcHVibGljYXRpb25fcmVsX3BycXVhbCAtIDFdID0gdHJ1ZTsKKwogCXR1 cCA9IGhlYXBfZm9ybV90dXBsZShSZWxhdGlvbkdldERlc2NyKHJlbCksIHZhbHVlcywgbnVs bHMpOwogCiAJLyogSW5zZXJ0IHR1cGxlIGludG8gY2F0YWxvZy4gKi8KQEAgLTMyMiw2ICs1 MDAsMTMgQEAgcHVibGljYXRpb25fYWRkX3JlbGF0aW9uKE9pZCBwdWJpZCwgUHVibGljYXRp b25SZWxJbmZvICp0YXJnZXRyZWwsCiAJT2JqZWN0QWRkcmVzc1NldChyZWZlcmVuY2VkLCBS ZWxhdGlvblJlbGF0aW9uSWQsIHJlbGlkKTsKIAlyZWNvcmREZXBlbmRlbmN5T24oJm15c2Vs ZiwgJnJlZmVyZW5jZWQsIERFUEVOREVOQ1lfQVVUTyk7CiAKKwkvKiBBZGQgZGVwZW5kZW5j eSBvbiB0aGUgb2JqZWN0cyBtZW50aW9uZWQgaW4gdGhlIHF1YWxpZmljYXRpb25zICovCisJ aWYgKHdoZXJlY2xhdXNlKQorCXsKKwkJcmVjb3JkRGVwZW5kZW5jeU9uRXhwcigmbXlzZWxm LCB3aGVyZWNsYXVzZSwgcHN0YXRlLT5wX3J0YWJsZSwgREVQRU5ERU5DWV9OT1JNQUwpOwor CQlmcmVlX3BhcnNlc3RhdGUocHN0YXRlKTsKKwl9CisKIAkvKiBDbG9zZSB0aGUgdGFibGUu ICovCiAJdGFibGVfY2xvc2UocmVsLCBSb3dFeGNsdXNpdmVMb2NrKTsKIApkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMgYi9zcmMvYmFja2Vu ZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYwppbmRleCA3ZDRhMGU5NWY2Li5iYWRlMjRm MTJhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMu YworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYwpAQCAtNTI5 LDQwICs1MjksNjQgQEAgQWx0ZXJQdWJsaWNhdGlvblRhYmxlcyhBbHRlclB1YmxpY2F0aW9u U3RtdCAqc3RtdCwgSGVhcFR1cGxlIHR1cCwKIAkJTGlzdAkgICAqZGVscmVscyA9IE5JTDsK IAkJTGlzdENlbGwgICAqb2xkbGM7CiAKKwkJLyoKKwkJICogQ2hlY2sgaWYgdGhlIHJlbGF0 aW9uIGlzIG1lbWJlciBvZiB0aGUgZXhpc3Rpbmcgc2NoZW1hIGluIHRoZQorCQkgKiBwdWJs aWNhdGlvbiBvciBtZW1iZXIgb2YgdGhlIHNjaGVtYSBsaXN0IHNwZWNpZmllZC4KKwkJICov CiAJCUNoZWNrT2JqU2NoZW1hTm90QWxyZWFkeUluUHVibGljYXRpb24ocmVscywgc2NoZW1h aWRsaXN0LAogCQkJCQkJCQkJCQkgIFBVQkxJQ0FUSU9OT0JKX1RBQkxFKTsKIAotCQkvKiBD YWxjdWxhdGUgd2hpY2ggcmVsYXRpb25zIHRvIGRyb3AuICovCisJCS8qCisJCSAqIFJlbW92 ZSB0YWJsZXMgdGhhdCBhcmUgbm90IGZvdW5kIGluIHRoZSBuZXcgdGFibGUgbGlzdC4gUmVt b3ZlCisJCSAqIHRhYmxlcyB0aGF0IGFyZSBiZWluZyByZS1hZGRlZCB3aXRoIGEgZGlmZmVy ZW50IHF1YWwgZXhwcmVzc2lvbgorCQkgKiAoaW5jbHVkaW5nIGEgdGFibGUgdGhhdCBoYXMg bm8gcXVhbCBleHByZXNzaW9uKSBiZWNhdXNlIHNpbXBseQorCQkgKiB1cGRhdGluZyB0aGUg ZXhpc3RpbmcgdHVwbGUgaXMgbm90IGVub3VnaCBkdWUgdG8gcXVhbCBleHByZXNzaW9uCisJ CSAqIGRlcGVuZGVuY2llcy4KKwkJICovCiAJCWZvcmVhY2gob2xkbGMsIG9sZHJlbGlkcykK IAkJewogCQkJT2lkCQkJb2xkcmVsaWQgPSBsZmlyc3Rfb2lkKG9sZGxjKTsKKwkJCVB1Ymxp Y2F0aW9uUmVsSW5mbyAqb2xkcmVsOwogCQkJTGlzdENlbGwgICAqbmV3bGM7CiAJCQlib29s CQlmb3VuZCA9IGZhbHNlOworCQkJSGVhcFR1cGxlCXJmdHVwbGU7CisJCQlib29sCQlyZmlz bnVsbCA9IHRydWU7CS8qIGRlZmF1bHQgaWYgdHVwbGUgaXMgbm90IGZvdW5kICovCisKKwkJ CXJmdHVwbGUgPSBTZWFyY2hTeXNDYWNoZTIoUFVCTElDQVRJT05SRUxNQVAsIE9iamVjdElk R2V0RGF0dW0ob2xkcmVsaWQpLAorCQkJCQkJCQkJICBPYmplY3RJZEdldERhdHVtKHB1Ymlk KSk7CisJCQlpZiAoSGVhcFR1cGxlSXNWYWxpZChyZnR1cGxlKSkKKwkJCXsKKwkJCQlTeXND YWNoZUdldEF0dHIoUFVCTElDQVRJT05SRUxNQVAsIHJmdHVwbGUsIEFudW1fcGdfcHVibGlj YXRpb25fcmVsX3BycXVhbCwKKwkJCQkJCQkJJnJmaXNudWxsKTsKKwkJCQlSZWxlYXNlU3lz Q2FjaGUocmZ0dXBsZSk7CisJCQl9CiAKIAkJCWZvcmVhY2gobmV3bGMsIHJlbHMpCiAJCQl7 CiAJCQkJUHVibGljYXRpb25SZWxJbmZvICpuZXdwdWJyZWw7CiAKIAkJCQluZXdwdWJyZWwg PSAoUHVibGljYXRpb25SZWxJbmZvICopIGxmaXJzdChuZXdsYyk7Ci0JCQkJaWYgKFJlbGF0 aW9uR2V0UmVsaWQobmV3cHVicmVsLT5yZWxhdGlvbikgPT0gb2xkcmVsaWQpCisKKwkJCQkv KgorCQkJCSAqIEtlZXAgdGhlIHRhYmxlIGlpZiBvbGQgYW5kIG5ldyB0YWJsZSBoYXMgbm8g cXVhbAorCQkJCSAqIGV4cHJlc3Npb24uIE90aGVyd2lzZSwgdGhpcyB0YWJsZSB3aWxsIGJl IGluY2x1ZGVkIGluIHRoZQorCQkJCSAqIGRlbGV0aW9uIGxpc3QgYmVsb3cuCisJCQkJICov CisJCQkJaWYgKG9sZHJlbGlkID09IFJlbGF0aW9uR2V0UmVsaWQobmV3cHVicmVsLT5yZWxh dGlvbikgJiYKKwkJCQkJbmV3cHVicmVsLT53aGVyZUNsYXVzZSA9PSBOVUxMICYmIHJmaXNu dWxsKQogCQkJCXsKIAkJCQkJZm91bmQgPSB0cnVlOwogCQkJCQlicmVhazsKIAkJCQl9CiAJ CQl9Ci0JCQkvKiBOb3QgeWV0IGluIHRoZSBsaXN0LCBvcGVuIGl0IGFuZCBhZGQgdG8gdGhl IGxpc3QgKi8KKwogCQkJaWYgKCFmb3VuZCkKIAkJCXsKLQkJCQlSZWxhdGlvbglvbGRyZWw7 Ci0JCQkJUHVibGljYXRpb25SZWxJbmZvICpwdWJyZWw7Ci0KLQkJCQkvKiBXcmFwIHJlbGF0 aW9uIGludG8gUHVibGljYXRpb25SZWxJbmZvICovCi0JCQkJb2xkcmVsID0gdGFibGVfb3Bl bihvbGRyZWxpZCwgU2hhcmVVcGRhdGVFeGNsdXNpdmVMb2NrKTsKLQotCQkJCXB1YnJlbCA9 IHBhbGxvYyhzaXplb2YoUHVibGljYXRpb25SZWxJbmZvKSk7Ci0JCQkJcHVicmVsLT5yZWxh dGlvbiA9IG9sZHJlbDsKLQotCQkJCWRlbHJlbHMgPSBsYXBwZW5kKGRlbHJlbHMsIHB1YnJl bCk7CisJCQkJb2xkcmVsID0gcGFsbG9jKHNpemVvZihQdWJsaWNhdGlvblJlbEluZm8pKTsK KwkJCQlvbGRyZWwtPndoZXJlQ2xhdXNlID0gTlVMTDsKKwkJCQlvbGRyZWwtPnJlbGF0aW9u ID0gdGFibGVfb3BlbihvbGRyZWxpZCwKKwkJCQkJCQkJCQkJICBTaGFyZVVwZGF0ZUV4Y2x1 c2l2ZUxvY2spOworCQkJCWRlbHJlbHMgPSBsYXBwZW5kKGRlbHJlbHMsIG9sZHJlbCk7CiAJ CQl9CiAJCX0KIApAQCAtODk5LDYgKzkyMyw3IEBAIE9wZW5UYWJsZUxpc3QoTGlzdCAqdGFi bGVzKQogCUxpc3QJICAgKnJlbGlkcyA9IE5JTDsKIAlMaXN0CSAgICpyZWxzID0gTklMOwog CUxpc3RDZWxsICAgKmxjOworCUxpc3QJICAgKnJlbGlkc193aXRoX3JmID0gTklMOwogCiAJ LyoKIAkgKiBPcGVuLCBzaGFyZS1sb2NrLCBhbmQgY2hlY2sgYWxsIHRoZSBleHBsaWNpdGx5 LXNwZWNpZmllZCByZWxhdGlvbnMKQEAgLTkyNiwxNSArOTUxLDMwIEBAIE9wZW5UYWJsZUxp c3QoTGlzdCAqdGFibGVzKQogCQkgKi8KIAkJaWYgKGxpc3RfbWVtYmVyX29pZChyZWxpZHMs IG15cmVsaWQpKQogCQl7CisJCQljaGFyCSAgICpyZWxuYW1lID0gcHN0cmR1cChSZWxhdGlv bkdldFJlbGF0aW9uTmFtZShyZWwpKTsKKwogCQkJdGFibGVfY2xvc2UocmVsLCBTaGFyZVVw ZGF0ZUV4Y2x1c2l2ZUxvY2spOworCisJCQkvKiBEaXNhbGxvdyBkdXBsaWNhdGUgdGFibGVz IGlmIHRoZXJlIGFyZSBhbnkgV0hFUkUgY2xhdXNlcy4gKi8KKwkJCWlmICh0LT53aGVyZUNs YXVzZSB8fCBsaXN0X21lbWJlcl9vaWQocmVsaWRzX3dpdGhfcmYsIG15cmVsaWQpKQorCQkJ CWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0RVUExJQ0FURV9PQkpF Q1QpLAorCQkJCQkJIGVycm1zZygiY29uZmxpY3Rpbmcgb3IgcmVkdW5kYW50IFdIRVJFIGNs YXVzZXMgZm9yIHRhYmxlIFwiJXNcIiIsCisJCQkJCQkJCXJlbG5hbWUpKSk7CisKKwkJCXBm cmVlKHJlbG5hbWUpOwogCQkJY29udGludWU7CiAJCX0KIAogCQlwdWJfcmVsID0gcGFsbG9j KHNpemVvZihQdWJsaWNhdGlvblJlbEluZm8pKTsKIAkJcHViX3JlbC0+cmVsYXRpb24gPSBy ZWw7CisJCXB1Yl9yZWwtPndoZXJlQ2xhdXNlID0gdC0+d2hlcmVDbGF1c2U7CiAJCXJlbHMg PSBsYXBwZW5kKHJlbHMsIHB1Yl9yZWwpOwogCQlyZWxpZHMgPSBsYXBwZW5kX29pZChyZWxp ZHMsIG15cmVsaWQpOwogCisJCWlmICh0LT53aGVyZUNsYXVzZSkKKwkJCXJlbGlkc193aXRo X3JmID0gbGFwcGVuZF9vaWQocmVsaWRzX3dpdGhfcmYsIG15cmVsaWQpOworCiAJCS8qCiAJ CSAqIEFkZCBjaGlsZHJlbiBvZiB0aGlzIHJlbCwgaWYgcmVxdWVzdGVkLCBzbyB0aGF0IHRo ZXkgdG9vIGFyZSBhZGRlZAogCQkgKiB0byB0aGUgcHVibGljYXRpb24uICBBIHBhcnRpdGlv bmVkIHRhYmxlIGNhbid0IGhhdmUgYW55IGluaGVyaXRhbmNlCkBAIC05NjcsNiArMTAwNyw4 IEBAIE9wZW5UYWJsZUxpc3QoTGlzdCAqdGFibGVzKQogCQkJCXJlbCA9IHRhYmxlX29wZW4o Y2hpbGRyZWxpZCwgTm9Mb2NrKTsKIAkJCQlwdWJfcmVsID0gcGFsbG9jKHNpemVvZihQdWJs aWNhdGlvblJlbEluZm8pKTsKIAkJCQlwdWJfcmVsLT5yZWxhdGlvbiA9IHJlbDsKKwkJCQkv KiBjaGlsZCBpbmhlcml0cyBXSEVSRSBjbGF1c2UgZnJvbSBwYXJlbnQgKi8KKwkJCQlwdWJf cmVsLT53aGVyZUNsYXVzZSA9IHQtPndoZXJlQ2xhdXNlOwogCQkJCXJlbHMgPSBsYXBwZW5k KHJlbHMsIHB1Yl9yZWwpOwogCQkJCXJlbGlkcyA9IGxhcHBlbmRfb2lkKHJlbGlkcywgY2hp bGRyZWxpZCk7CiAJCQl9CkBAIC05NzQsNiArMTAxNiw3IEBAIE9wZW5UYWJsZUxpc3QoTGlz dCAqdGFibGVzKQogCX0KIAogCWxpc3RfZnJlZShyZWxpZHMpOworCWxpc3RfZnJlZShyZWxp ZHNfd2l0aF9yZik7CiAKIAlyZXR1cm4gcmVsczsKIH0KQEAgLTk5Myw2ICsxMDM2LDggQEAg Q2xvc2VUYWJsZUxpc3QoTGlzdCAqcmVscykKIAkJcHViX3JlbCA9IChQdWJsaWNhdGlvblJl bEluZm8gKikgbGZpcnN0KGxjKTsKIAkJdGFibGVfY2xvc2UocHViX3JlbC0+cmVsYXRpb24s IE5vTG9jayk7CiAJfQorCisJbGlzdF9mcmVlX2RlZXAocmVscyk7CiB9CiAKIC8qCkBAIC0x MDg4LDYgKzExMzMsMTEgQEAgUHVibGljYXRpb25Ecm9wVGFibGVzKE9pZCBwdWJpZCwgTGlz dCAqcmVscywgYm9vbCBtaXNzaW5nX29rKQogCQkJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25O YW1lKHJlbCkpKSk7CiAJCX0KIAorCQlpZiAocHVicmVsLT53aGVyZUNsYXVzZSkKKwkJCWVy ZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKKwkJ CQkJIGVycm1zZygiY2Fubm90IHVzZSBhIFdIRVJFIGNsYXVzZSB3aGVuIHJlbW92aW5nIGEg dGFibGUgZnJvbSBwdWJsaWNhdGlvbiIpKSk7CisKIAkJT2JqZWN0QWRkcmVzc1NldChvYmos IFB1YmxpY2F0aW9uUmVsUmVsYXRpb25JZCwgcHJpZCk7CiAJCXBlcmZvcm1EZWxldGlvbigm b2JqLCBEUk9QX0NBU0NBREUsIDApOwogCX0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25v ZGVzL2NvcHlmdW5jcy5jIGIvc3JjL2JhY2tlbmQvbm9kZXMvY29weWZ1bmNzLmMKaW5kZXgg Mjk3YjZlZTcxNS4uYmU5YzFmYmYzMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbm9kZXMv Y29weWZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvY29weWZ1bmNzLmMKQEAgLTQ4 MzIsNiArNDgzMiw3IEBAIF9jb3B5UHVibGljYXRpb25UYWJsZShjb25zdCBQdWJsaWNhdGlv blRhYmxlICpmcm9tKQogCVB1YmxpY2F0aW9uVGFibGUgKm5ld25vZGUgPSBtYWtlTm9kZShQ dWJsaWNhdGlvblRhYmxlKTsKIAogCUNPUFlfTk9ERV9GSUVMRChyZWxhdGlvbik7CisJQ09Q WV9OT0RFX0ZJRUxEKHdoZXJlQ2xhdXNlKTsKIAogCXJldHVybiBuZXdub2RlOwogfQpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMvZXF1YWxmdW5jcy5jIGIvc3JjL2JhY2tlbmQv bm9kZXMvZXF1YWxmdW5jcy5jCmluZGV4IGY1MzdkM2ViOTYuLjU3NzY0NDcwZGMgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVzL2VxdWFsZnVuY3MuYworKysgYi9zcmMvYmFja2Vu ZC9ub2Rlcy9lcXVhbGZ1bmNzLmMKQEAgLTIzMTIsNiArMjMxMiw3IEBAIHN0YXRpYyBib29s CiBfZXF1YWxQdWJsaWNhdGlvblRhYmxlKGNvbnN0IFB1YmxpY2F0aW9uVGFibGUgKmEsIGNv bnN0IFB1YmxpY2F0aW9uVGFibGUgKmIpCiB7CiAJQ09NUEFSRV9OT0RFX0ZJRUxEKHJlbGF0 aW9uKTsKKwlDT01QQVJFX05PREVfRklFTEQod2hlcmVDbGF1c2UpOwogCiAJcmV0dXJuIHRy dWU7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55IGIvc3JjL2Jh Y2tlbmQvcGFyc2VyL2dyYW0ueQpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1Cmlu ZGV4IDg2Y2UzM2JkOTcuLmM5Y2NiZjMxYWYKLS0tIGEvc3JjL2JhY2tlbmQvcGFyc2VyL2dy YW0ueQorKysgYi9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55CkBAIC05NjU0LDEyICs5NjU0 LDEzIEBAIENyZWF0ZVB1YmxpY2F0aW9uU3RtdDoKICAqIHJlbGF0aW9uX2V4cHIgaGVyZS4K ICAqLwogUHVibGljYXRpb25PYmpTcGVjOgotCQkJVEFCTEUgcmVsYXRpb25fZXhwcgorCQkJ VEFCTEUgcmVsYXRpb25fZXhwciBPcHRXaGVyZUNsYXVzZQogCQkJCXsKIAkJCQkJJCQgPSBt YWtlTm9kZShQdWJsaWNhdGlvbk9ialNwZWMpOwogCQkJCQkkJC0+cHVib2JqdHlwZSA9IFBV QkxJQ0FUSU9OT0JKX1RBQkxFOwogCQkJCQkkJC0+cHVidGFibGUgPSBtYWtlTm9kZShQdWJs aWNhdGlvblRhYmxlKTsKIAkJCQkJJCQtPnB1YnRhYmxlLT5yZWxhdGlvbiA9ICQyOworCQkJ CQkkJC0+cHVidGFibGUtPndoZXJlQ2xhdXNlID0gJDM7CiAJCQkJfQogCQkJfCBBTEwgVEFC TEVTIElOX1AgU0NIRU1BIENvbElkCiAJCQkJewpAQCAtOTY3NCwyOCArOTY3NSw0NSBAQCBQ dWJsaWNhdGlvbk9ialNwZWM6CiAJCQkJCSQkLT5wdWJvYmp0eXBlID0gUFVCTElDQVRJT05P QkpfVEFCTEVfSU5fQ1VSX1NDSEVNQTsKIAkJCQkJJCQtPmxvY2F0aW9uID0gQDU7CiAJCQkJ fQotCQkJfCBDb2xJZAorCQkJfCBDb2xJZCBPcHRXaGVyZUNsYXVzZQogCQkJCXsKIAkJCQkJ JCQgPSBtYWtlTm9kZShQdWJsaWNhdGlvbk9ialNwZWMpOwogCQkJCQkkJC0+cHVib2JqdHlw ZSA9IFBVQkxJQ0FUSU9OT0JKX0NPTlRJTlVBVElPTjsKLQkJCQkJJCQtPm5hbWUgPSAkMTsK KwkJCQkJaWYgKCQyKQorCQkJCQl7CisJCQkJCQkvKgorCQkJCQkJICogVGhlIE9wdFdoZXJl Q2xhdXNlIG11c3QgYmUgc3RvcmVkIGhlcmUgYnV0IGl0IGlzCisJCQkJCQkgKiB2YWxpZCBv bmx5IGZvciB0YWJsZXMuIElmIHRoZSBDb2xJZCB3YXMgbWlzdGFrZW5seQorCQkJCQkJICog bm90IGEgdGFibGUgdGhpcyB3aWxsIGJlIGRldGVjdGVkIGxhdGVyIGluCisJCQkJCQkgKiBw cmVwcm9jZXNzX3B1Ym9ial9saXN0KCkgYW5kIGFuIGVycm9yIGlzIHRocm93bi4KKwkJCQkJ CSAqLworCQkJCQkJJCQtPnB1YnRhYmxlID0gbWFrZU5vZGUoUHVibGljYXRpb25UYWJsZSk7 CisJCQkJCQkkJC0+cHVidGFibGUtPnJlbGF0aW9uID0gbWFrZVJhbmdlVmFyKE5VTEwsICQx LCBAMSk7CisJCQkJCQkkJC0+cHVidGFibGUtPndoZXJlQ2xhdXNlID0gJDI7CisJCQkJCX0K KwkJCQkJZWxzZQorCQkJCQl7CisJCQkJCQkkJC0+bmFtZSA9ICQxOworCQkJCQl9CiAJCQkJ CSQkLT5sb2NhdGlvbiA9IEAxOwogCQkJCX0KLQkJCXwgQ29sSWQgaW5kaXJlY3Rpb24KKwkJ CXwgQ29sSWQgaW5kaXJlY3Rpb24gT3B0V2hlcmVDbGF1c2UKIAkJCQl7CiAJCQkJCSQkID0g bWFrZU5vZGUoUHVibGljYXRpb25PYmpTcGVjKTsKIAkJCQkJJCQtPnB1Ym9ianR5cGUgPSBQ VUJMSUNBVElPTk9CSl9DT05USU5VQVRJT047CiAJCQkJCSQkLT5wdWJ0YWJsZSA9IG1ha2VO b2RlKFB1YmxpY2F0aW9uVGFibGUpOwogCQkJCQkkJC0+cHVidGFibGUtPnJlbGF0aW9uID0g bWFrZVJhbmdlVmFyRnJvbVF1YWxpZmllZE5hbWUoJDEsICQyLCBAMSwgeXlzY2FubmVyKTsK KwkJCQkJJCQtPnB1YnRhYmxlLT53aGVyZUNsYXVzZSA9ICQzOwogCQkJCQkkJC0+bG9jYXRp b24gPSBAMTsKIAkJCQl9CiAJCQkvKiBncmFtbWFyIGxpa2UgdGFibGVuYW1lICogLCBPTkxZ IHRhYmxlbmFtZSwgT05MWSAoIHRhYmxlbmFtZSApICovCi0JCQl8IGV4dGVuZGVkX3JlbGF0 aW9uX2V4cHIKKwkJCXwgZXh0ZW5kZWRfcmVsYXRpb25fZXhwciBPcHRXaGVyZUNsYXVzZQog CQkJCXsKIAkJCQkJJCQgPSBtYWtlTm9kZShQdWJsaWNhdGlvbk9ialNwZWMpOwogCQkJCQkk JC0+cHVib2JqdHlwZSA9IFBVQkxJQ0FUSU9OT0JKX0NPTlRJTlVBVElPTjsKIAkJCQkJJCQt PnB1YnRhYmxlID0gbWFrZU5vZGUoUHVibGljYXRpb25UYWJsZSk7CiAJCQkJCSQkLT5wdWJ0 YWJsZS0+cmVsYXRpb24gPSAkMTsKKwkJCQkJJCQtPnB1YnRhYmxlLT53aGVyZUNsYXVzZSA9 ICQyOwogCQkJCX0KIAkJCXwgQ1VSUkVOVF9TQ0hFTUEKIAkJCQl7CkBAIC0xNzM0Myw3ICsx NzM2MSw4IEBAIHByZXByb2Nlc3NfcHVib2JqX2xpc3QoTGlzdCAqcHVib2Jqc3BlY19saXN0 LCBjb3JlX3l5c2Nhbl90IHl5c2Nhbm5lcikKIAkJCQkJCWVycmNvZGUoRVJSQ09ERV9TWU5U QVhfRVJST1IpLAogCQkJCQkJZXJybXNnKCJpbnZhbGlkIHRhYmxlIG5hbWUgYXQgb3IgbmVh ciIpLAogCQkJCQkJcGFyc2VyX2VycnBvc2l0aW9uKHB1Ym9iai0+bG9jYXRpb24pKTsKLQkJ CWVsc2UgaWYgKHB1Ym9iai0+bmFtZSkKKworCQkJaWYgKHB1Ym9iai0+bmFtZSkKIAkJCXsK IAkJCQkvKiBjb252ZXJ0IGl0IHRvIFB1YmxpY2F0aW9uVGFibGUgKi8KIAkJCQlQdWJsaWNh dGlvblRhYmxlICpwdWJ0YWJsZSA9IG1ha2VOb2RlKFB1YmxpY2F0aW9uVGFibGUpOwpAQCAt MTczNTYsNiArMTczNzUsMTMgQEAgcHJlcHJvY2Vzc19wdWJvYmpfbGlzdChMaXN0ICpwdWJv YmpzcGVjX2xpc3QsIGNvcmVfeXlzY2FuX3QgeXlzY2FubmVyKQogCQllbHNlIGlmIChwdWJv YmotPnB1Ym9ianR5cGUgPT0gUFVCTElDQVRJT05PQkpfVEFCTEVfSU5fU0NIRU1BIHx8CiAJ CQkJIHB1Ym9iai0+cHVib2JqdHlwZSA9PSBQVUJMSUNBVElPTk9CSl9UQUJMRV9JTl9DVVJf U0NIRU1BKQogCQl7CisJCQkvKiBXSEVSRSBjbGF1c2UgaXMgbm90IGFsbG93ZWQgb24gYSBz Y2hlbWEgb2JqZWN0ICovCisJCQlpZiAocHVib2JqLT5wdWJ0YWJsZSAmJiBwdWJvYmotPnB1 YnRhYmxlLT53aGVyZUNsYXVzZSkKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJZXJyY29k ZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCisJCQkJCQllcnJtc2coIldIRVJFIGNsYXVzZSBm b3Igc2NoZW1hIG5vdCBhbGxvd2VkIiksCisJCQkJCQlwYXJzZXJfZXJycG9zaXRpb24ocHVi b2JqLT5sb2NhdGlvbikpOworCiAJCQkvKgogCQkJICogV2UgY2FuIGRpc3Rpbmd1aXNoIGJl dHdlZW4gdGhlIGRpZmZlcmVudCB0eXBlIG9mIHNjaGVtYQogCQkJICogb2JqZWN0cyBiYXNl ZCBvbiB3aGV0aGVyIG5hbWUgYW5kIHB1YnRhYmxlIGlzIHNldC4KZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3BhcnNlci9wYXJzZV9hZ2cuYyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJz ZV9hZ2cuYwppbmRleCA3ZDgyOWEwNWE5Li43Mzg4YmJkYmQ0IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9wYXJzZXIvcGFyc2VfYWdnLmMKKysrIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3Bh cnNlX2FnZy5jCkBAIC01NTEsNiArNTUxLDkgQEAgY2hlY2tfYWdnbGV2ZWxzX2FuZF9jb25z dHJhaW50cyhQYXJzZVN0YXRlICpwc3RhdGUsIE5vZGUgKmV4cHIpCiAJCQkJZXJyID0gXygi Z3JvdXBpbmcgb3BlcmF0aW9ucyBhcmUgbm90IGFsbG93ZWQgaW4gQ09QWSBGUk9NIFdIRVJF IGNvbmRpdGlvbnMiKTsKIAogCQkJYnJlYWs7CisJCWNhc2UgRVhQUl9LSU5EX1BVQkxJQ0FU SU9OX1dIRVJFOgorCQkJLyogb2theSAoc2VlIGZ1bmN0aW9uIHB1YmxpY2F0aW9uX3Jvd19m aWx0ZXJfd2Fsa2VyKSAqLworCQkJYnJlYWs7CiAKIAkJY2FzZSBFWFBSX0tJTkRfQ1lDTEVf TUFSSzoKIAkJCWVycmtpbmQgPSB0cnVlOwpAQCAtOTQzLDYgKzk0Niw5IEBAIHRyYW5zZm9y bVdpbmRvd0Z1bmNDYWxsKFBhcnNlU3RhdGUgKnBzdGF0ZSwgV2luZG93RnVuYyAqd2Z1bmMs CiAJCWNhc2UgRVhQUl9LSU5EX0NZQ0xFX01BUks6CiAJCQllcnJraW5kID0gdHJ1ZTsKIAkJ CWJyZWFrOworCQljYXNlIEVYUFJfS0lORF9QVUJMSUNBVElPTl9XSEVSRToKKwkJCS8qIG9r YXkgKHNlZSBmdW5jdGlvbiBwdWJsaWNhdGlvbl9yb3dfZmlsdGVyX3dhbGtlcikgKi8KKwkJ CWJyZWFrOwogCiAJCQkvKgogCQkJICogVGhlcmUgaXMgaW50ZW50aW9uYWxseSBubyBkZWZh dWx0OiBjYXNlIGhlcmUsIHNvIHRoYXQgdGhlCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9w YXJzZXIvcGFyc2VfZXhwci5jIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2V4cHIuYwpp bmRleCAyZDFhNDc3MTU0Li5mMWJiMDFjODBkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9w YXJzZXIvcGFyc2VfZXhwci5jCisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9leHBy LmMKQEAgLTUwNCw2ICs1MDQsNyBAQCB0cmFuc2Zvcm1Db2x1bW5SZWYoUGFyc2VTdGF0ZSAq cHN0YXRlLCBDb2x1bW5SZWYgKmNyZWYpCiAJCWNhc2UgRVhQUl9LSU5EX0NPUFlfV0hFUkU6 CiAJCWNhc2UgRVhQUl9LSU5EX0dFTkVSQVRFRF9DT0xVTU46CiAJCWNhc2UgRVhQUl9LSU5E X0NZQ0xFX01BUks6CisJCWNhc2UgRVhQUl9LSU5EX1BVQkxJQ0FUSU9OX1dIRVJFOgogCQkJ Lyogb2theSAqLwogCQkJYnJlYWs7CiAKQEAgLTE3NjQsNiArMTc2NSw5IEBAIHRyYW5zZm9y bVN1YkxpbmsoUGFyc2VTdGF0ZSAqcHN0YXRlLCBTdWJMaW5rICpzdWJsaW5rKQogCQljYXNl IEVYUFJfS0lORF9HRU5FUkFURURfQ09MVU1OOgogCQkJZXJyID0gXygiY2Fubm90IHVzZSBz dWJxdWVyeSBpbiBjb2x1bW4gZ2VuZXJhdGlvbiBleHByZXNzaW9uIik7CiAJCQlicmVhazsK KwkJY2FzZSBFWFBSX0tJTkRfUFVCTElDQVRJT05fV0hFUkU6CisJCQkvKiBva2F5IChzZWUg ZnVuY3Rpb24gcHVibGljYXRpb25fcm93X2ZpbHRlcl93YWxrZXIpICovCisJCQlicmVhazsK IAogCQkJLyoKIAkJCSAqIFRoZXJlIGlzIGludGVudGlvbmFsbHkgbm8gZGVmYXVsdDogY2Fz ZSBoZXJlLCBzbyB0aGF0IHRoZQpAQCAtMzA4NCw2ICszMDg4LDggQEAgUGFyc2VFeHByS2lu ZE5hbWUoUGFyc2VFeHByS2luZCBleHByS2luZCkKIAkJCXJldHVybiAiR0VORVJBVEVEIEFT IjsKIAkJY2FzZSBFWFBSX0tJTkRfQ1lDTEVfTUFSSzoKIAkJCXJldHVybiAiQ1lDTEUiOwor CQljYXNlIEVYUFJfS0lORF9QVUJMSUNBVElPTl9XSEVSRToKKwkJCXJldHVybiAicHVibGlj YXRpb24gZXhwcmVzc2lvbiI7CiAKIAkJCS8qCiAJCQkgKiBUaGVyZSBpcyBpbnRlbnRpb25h bGx5IG5vIGRlZmF1bHQ6IGNhc2UgaGVyZSwgc28gdGhhdCB0aGUKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3BhcnNlci9wYXJzZV9mdW5jLmMgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFy c2VfZnVuYy5jCmluZGV4IDU0MmY5MTY3YWEuLmZmZGY4NmZjN2UgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3BhcnNlci9wYXJzZV9mdW5jLmMKKysrIGIvc3JjL2JhY2tlbmQvcGFyc2Vy L3BhcnNlX2Z1bmMuYwpAQCAtMjY1NSw2ICsyNjU1LDEwIEBAIGNoZWNrX3NyZl9jYWxsX3Bs YWNlbWVudChQYXJzZVN0YXRlICpwc3RhdGUsIE5vZGUgKmxhc3Rfc3JmLCBpbnQgbG9jYXRp b24pCiAJCWNhc2UgRVhQUl9LSU5EX0NZQ0xFX01BUks6CiAJCQllcnJraW5kID0gdHJ1ZTsK IAkJCWJyZWFrOworCQljYXNlIEVYUFJfS0lORF9QVUJMSUNBVElPTl9XSEVSRToKKwkJCS8q IG9rYXkgKHNlZSBmdW5jdGlvbiBwdWJsaWNhdGlvbl9yb3dfZmlsdGVyX3dhbGtlcikgKi8K KwkJCXBzdGF0ZS0+cF9oYXNUYXJnZXRTUkZzID0gdHJ1ZTsKKwkJCWJyZWFrOwogCiAJCQkv KgogCQkJICogVGhlcmUgaXMgaW50ZW50aW9uYWxseSBubyBkZWZhdWx0OiBjYXNlIGhlcmUs IHNvIHRoYXQgdGhlCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL3RhYmxlc3luYy5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC90YWJs ZXN5bmMuYwppbmRleCBmMDc5ODNhNDNjLi45MDQxODQ3MDg3IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3RhYmxlc3luYy5jCisrKyBiL3NyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvdGFibGVzeW5jLmMKQEAgLTY4OCwxOSArNjg4LDIz IEBAIGNvcHlfcmVhZF9kYXRhKHZvaWQgKm91dGJ1ZiwgaW50IG1pbnJlYWQsIGludCBtYXhy ZWFkKQogCiAvKgogICogR2V0IGluZm9ybWF0aW9uIGFib3V0IHJlbW90ZSByZWxhdGlvbiBp biBzaW1pbGFyIGZhc2hpb24gdGhlIFJFTEFUSU9OCi0gKiBtZXNzYWdlIHByb3ZpZGVzIGR1 cmluZyByZXBsaWNhdGlvbi4KKyAqIG1lc3NhZ2UgcHJvdmlkZXMgZHVyaW5nIHJlcGxpY2F0 aW9uLiBUaGlzIGZ1bmN0aW9uIGFsc28gcmV0dXJucyB0aGUgcmVsYXRpb24KKyAqIHF1YWxp ZmljYXRpb25zIHRvIGJlIHVzZWQgaW4gQ09QWSBjb21tYW5kLgogICovCiBzdGF0aWMgdm9p ZAogZmV0Y2hfcmVtb3RlX3RhYmxlX2luZm8oY2hhciAqbnNwbmFtZSwgY2hhciAqcmVsbmFt ZSwKLQkJCQkJCUxvZ2ljYWxSZXBSZWxhdGlvbiAqbHJlbCkKKwkJCQkJCUxvZ2ljYWxSZXBS ZWxhdGlvbiAqbHJlbCwgTGlzdCAqKnF1YWwpCiB7CiAJV2FsUmN2RXhlY1Jlc3VsdCAqcmVz OwogCVN0cmluZ0luZm9EYXRhIGNtZDsKIAlUdXBsZVRhYmxlU2xvdCAqc2xvdDsKIAlPaWQJ CQl0YWJsZVJvd1tdID0ge09JRE9JRCwgQ0hBUk9JRCwgQ0hBUk9JRH07CiAJT2lkCQkJYXR0 clJvd1tdID0ge1RFWFRPSUQsIE9JRE9JRCwgQk9PTE9JRH07CisJT2lkCQkJcXVhbFJvd1td ID0ge1RFWFRPSUR9OwogCWJvb2wJCWlzbnVsbDsKIAlpbnQJCQluYXR0OworCUxpc3RDZWxs ICAgKmxjOworCWJvb2wJCWZpcnN0OwogCiAJbHJlbC0+bnNwbmFtZSA9IG5zcG5hbWU7CiAJ bHJlbC0+cmVsbmFtZSA9IHJlbG5hbWU7CkBAIC03OTYsNiArODAwLDgyIEBAIGZldGNoX3Jl bW90ZV90YWJsZV9pbmZvKGNoYXIgKm5zcG5hbWUsIGNoYXIgKnJlbG5hbWUsCiAJbHJlbC0+ bmF0dHMgPSBuYXR0OwogCiAJd2FscmN2X2NsZWFyX3Jlc3VsdChyZXMpOworCisJLyoKKwkg KiBHZXQgcmVsYXRpb24gcXVhbC4gRElTVElOQ1QgYXZvaWRzIHRoZSBzYW1lIGV4cHJlc3Np b24gb2YgYSB0YWJsZSBpbgorCSAqIG11bHRpcGxlIHB1YmxpY2F0aW9ucyBmcm9tIGJlaW5n IGluY2x1ZGVkIG11bHRpcGxlIHRpbWVzIGluIHRoZSBmaW5hbAorCSAqIGV4cHJlc3Npb24u CisJICovCisJaWYgKHdhbHJjdl9zZXJ2ZXJfdmVyc2lvbihMb2dSZXBXb3JrZXJXYWxSY3ZD b25uKSA+PSAxNTAwMDApCisJeworCQlyZXNldFN0cmluZ0luZm8oJmNtZCk7CisJCWFwcGVu ZFN0cmluZ0luZm8oJmNtZCwKKwkJCQkJCSAiU0VMRUNUIERJU1RJTkNUIHBnX2dldF9leHBy KHBycXVhbCwgcHJyZWxpZCkgIgorCQkJCQkJICIgIEZST00gcGdfcHVibGljYXRpb24gcCAi CisJCQkJCQkgIiAgSU5ORVIgSk9JTiBwZ19wdWJsaWNhdGlvbl9yZWwgcHIgIgorCQkJCQkJ ICIgICAgICAgT04gKHAub2lkID0gcHIucHJwdWJpZCkgIgorCQkJCQkJICIgV0hFUkUgcHIu cHJyZWxpZCA9ICV1ICIKKwkJCQkJCSAiICAgQU5EIHAucHVibmFtZSBJTiAoIiwgbHJlbC0+ cmVtb3RlaWQpOworCisJCWZpcnN0ID0gdHJ1ZTsKKwkJZm9yZWFjaChsYywgTXlTdWJzY3Jp cHRpb24tPnB1YmxpY2F0aW9ucykKKwkJeworCQkJY2hhcgkgICAqcHVibmFtZSA9IHN0clZh bChsZmlyc3QobGMpKTsKKworCQkJaWYgKGZpcnN0KQorCQkJCWZpcnN0ID0gZmFsc2U7CisJ CQllbHNlCisJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmY21kLCAiLCAiKTsKKworCQkJ YXBwZW5kU3RyaW5nSW5mb1N0cmluZygmY21kLCBxdW90ZV9saXRlcmFsX2NzdHIocHVibmFt ZSkpOworCQl9CisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZjbWQsICcpJyk7CisKKwkJcmVz ID0gd2FscmN2X2V4ZWMoTG9nUmVwV29ya2VyV2FsUmN2Q29ubiwgY21kLmRhdGEsIDEsIHF1 YWxSb3cpOworCisJCWlmIChyZXMtPnN0YXR1cyAhPSBXQUxSQ1ZfT0tfVFVQTEVTKQorCQkJ ZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycm1zZygiY291bGQgbm90IGZldGNoIHJlbGF0aW9u IHF1YWxpZmljYXRpb25zIGZvciB0YWJsZSBcIiVzLiVzXCIgZnJvbSBwdWJsaXNoZXI6ICVz IiwKKwkJCQkJCQluc3BuYW1lLCByZWxuYW1lLCByZXMtPmVycikpKTsKKworCQkvKgorCQkg KiBNdWx0aXBsZSByb3cgZmlsdGVyIGV4cHJlc3Npb25zIGZvciB0aGUgc2FtZSB0YWJsZSB3 aWxsIGJlIGNvbWJpbmVkCisJCSAqIGJ5IENPUFkgdXNpbmcgT1IuIElmIG9uZSBvZiB0aGUg bXVsdGlwbGUgcm93IGZpbHRlciBleHByZXNzaW9ucyBpbgorCQkgKiB0aGlzIHRhYmxlIGhh cyBubyBmaWx0ZXIsIGl0IG1lYW5zIHRoZSB3aG9sZSB0YWJsZSB3aWxsIGJlIGNvcGllZC4K KwkJICogSGVuY2UsIGl0IGlzIG5vdCByZXF1aXJlZCB0byBpbmZvcm0gYW4gdW5pZmllZCBy b3cgZmlsdGVyCisJCSAqIGV4cHJlc3Npb24gYXQgYWxsLgorCQkgKi8KKwkJc2xvdCA9IE1h a2VTaW5nbGVUdXBsZVRhYmxlU2xvdChyZXMtPnR1cGxlZGVzYywgJlRUU09wc01pbmltYWxU dXBsZSk7CisJCXdoaWxlICh0dXBsZXN0b3JlX2dldHR1cGxlc2xvdChyZXMtPnR1cGxlc3Rv cmUsIHRydWUsIGZhbHNlLCBzbG90KSkKKwkJeworCQkJRGF0dW0JCXJmID0gc2xvdF9nZXRh dHRyKHNsb3QsIDEsICZpc251bGwpOworCisJCQkvKgorCQkJICogT25lIGVudHJ5IHdpdGhv dXQgYSByb3cgZmlsdGVyIGV4cHJlc3Npb24gbWVhbnMgY2xlYW4gdXAKKwkJCSAqIHByZXZp b3VzIGV4cHJlc3Npb25zIChpZiB0aGVyZSBpcyBhbnkpIGFuZCByZXR1cm4gd2l0aCBubwor CQkJICogZXhwcmVzc2lvbnMuCisJCQkgKi8KKwkJCWlmIChpc251bGwpCisJCQl7CisJCQkJ aWYgKCpxdWFsKQorCQkJCXsKKwkJCQkJbGlzdF9mcmVlKCpxdWFsKTsKKwkJCQkJKnF1YWwg PSBOSUw7CisJCQkJfQorCQkJCUV4ZWNDbGVhclR1cGxlKHNsb3QpOworCQkJCWJyZWFrOwor CQkJfQorCQkJZWxzZQorCQkJeworCQkJCSpxdWFsID0gbGFwcGVuZCgqcXVhbCwgbWFrZVN0 cmluZyhUZXh0RGF0dW1HZXRDU3RyaW5nKHJmKSkpOworCQkJCUV4ZWNDbGVhclR1cGxlKHNs b3QpOworCQkJfQorCQl9CisJCUV4ZWNEcm9wU2luZ2xlVHVwbGVUYWJsZVNsb3Qoc2xvdCk7 CisKKwkJd2FscmN2X2NsZWFyX3Jlc3VsdChyZXMpOworCX0KKwogCXBmcmVlKGNtZC5kYXRh KTsKIH0KIApAQCAtODA5LDYgKzg4OSw3IEBAIGNvcHlfdGFibGUoUmVsYXRpb24gcmVsKQog ewogCUxvZ2ljYWxSZXBSZWxNYXBFbnRyeSAqcmVsbWFwZW50cnk7CiAJTG9naWNhbFJlcFJl bGF0aW9uIGxyZWw7CisJTGlzdAkgICAqcXVhbCA9IE5JTDsKIAlXYWxSY3ZFeGVjUmVzdWx0 ICpyZXM7CiAJU3RyaW5nSW5mb0RhdGEgY21kOwogCUNvcHlGcm9tU3RhdGUgY3N0YXRlOwpA QCAtODE3LDcgKzg5OCw3IEBAIGNvcHlfdGFibGUoUmVsYXRpb24gcmVsKQogCiAJLyogR2V0 IHRoZSBwdWJsaXNoZXIgcmVsYXRpb24gaW5mby4gKi8KIAlmZXRjaF9yZW1vdGVfdGFibGVf aW5mbyhnZXRfbmFtZXNwYWNlX25hbWUoUmVsYXRpb25HZXROYW1lc3BhY2UocmVsKSksCi0J CQkJCQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSwgJmxyZWwpOworCQkJCQkJCVJl bGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCksICZscmVsLCAmcXVhbCk7CiAKIAkvKiBQdXQg dGhlIHJlbGF0aW9uIGludG8gcmVsbWFwLiAqLwogCWxvZ2ljYWxyZXBfcmVsbWFwX3VwZGF0 ZSgmbHJlbCk7CkBAIC04MjgsMTQgKzkwOSwxOCBAQCBjb3B5X3RhYmxlKFJlbGF0aW9uIHJl bCkKIAogCS8qIFN0YXJ0IGNvcHkgb24gdGhlIHB1Ymxpc2hlci4gKi8KIAlpbml0U3RyaW5n SW5mbygmY21kKTsKLQlpZiAobHJlbC5yZWxraW5kID09IFJFTEtJTkRfUkVMQVRJT04pCisK KwkvKiBSZWd1bGFyIHRhYmxlIHdpdGggbm8gcm93IGZpbHRlciAqLworCWlmIChscmVsLnJl bGtpbmQgPT0gUkVMS0lORF9SRUxBVElPTiAmJiBxdWFsID09IE5JTCkKIAkJYXBwZW5kU3Ry aW5nSW5mbygmY21kLCAiQ09QWSAlcyBUTyBTVERPVVQiLAogCQkJCQkJIHF1b3RlX3F1YWxp ZmllZF9pZGVudGlmaWVyKGxyZWwubnNwbmFtZSwgbHJlbC5yZWxuYW1lKSk7CiAJZWxzZQog CXsKIAkJLyoKIAkJICogRm9yIG5vbi10YWJsZXMsIHdlIG5lZWQgdG8gZG8gQ09QWSAoU0VM RUNUIC4uLiksIGJ1dCB3ZSBjYW4ndCBqdXN0Ci0JCSAqIGRvIFNFTEVDVCAqIGJlY2F1c2Ug d2UgbmVlZCB0byBub3QgY29weSBnZW5lcmF0ZWQgY29sdW1ucy4KKwkJICogZG8gU0VMRUNU ICogYmVjYXVzZSB3ZSBuZWVkIHRvIG5vdCBjb3B5IGdlbmVyYXRlZCBjb2x1bW5zLiBGb3IK KwkJICogdGFibGVzIHdpdGggYW55IHJvdyBmaWx0ZXJzLCBidWlsZCBhIFNFTEVDVCBxdWVy eSB3aXRoIE9SJ2VkIHJvdworCQkgKiBmaWx0ZXJzIGZvciBDT1BZLgogCQkgKi8KIAkJYXBw ZW5kU3RyaW5nSW5mb1N0cmluZygmY21kLCAiQ09QWSAoU0VMRUNUICIpOwogCQlmb3IgKGlu dCBpID0gMDsgaSA8IGxyZWwubmF0dHM7IGkrKykKQEAgLTg0NCw4ICs5MjksMjkgQEAgY29w eV90YWJsZShSZWxhdGlvbiByZWwpCiAJCQlpZiAoaSA8IGxyZWwubmF0dHMgLSAxKQogCQkJ CWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmNtZCwgIiwgIik7CiAJCX0KLQkJYXBwZW5kU3Ry aW5nSW5mbygmY21kLCAiIEZST00gJXMpIFRPIFNURE9VVCIsCisJCWFwcGVuZFN0cmluZ0lu Zm8oJmNtZCwgIiBGUk9NICVzIiwKIAkJCQkJCSBxdW90ZV9xdWFsaWZpZWRfaWRlbnRpZmll cihscmVsLm5zcG5hbWUsIGxyZWwucmVsbmFtZSkpOworCQkvKiBsaXN0IG9mIE9SJ2VkIGZp bHRlcnMgKi8KKwkJaWYgKHF1YWwgIT0gTklMKQorCQl7CisJCQlMaXN0Q2VsbCAgICpsYzsK KwkJCWJvb2wJCWZpcnN0ID0gdHJ1ZTsKKworCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygm Y21kLCAiIFdIRVJFICIpOworCQkJZm9yZWFjaChsYywgcXVhbCkKKwkJCXsKKwkJCQljaGFy CSAgICpxID0gc3RyVmFsKGxmaXJzdChsYykpOworCisJCQkJaWYgKGZpcnN0KQorCQkJCQlm aXJzdCA9IGZhbHNlOworCQkJCWVsc2UKKwkJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygm Y21kLCAiIE9SICIpOworCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmNtZCwgcSk7CisJ CQl9CisJCQlsaXN0X2ZyZWVfZGVlcChxdWFsKTsKKwkJfQorCisJCWFwcGVuZFN0cmluZ0lu Zm9TdHJpbmcoJmNtZCwgIikgVE8gU1RET1VUIik7CiAJfQogCXJlcyA9IHdhbHJjdl9leGVj KExvZ1JlcFdvcmtlcldhbFJjdkNvbm4sIGNtZC5kYXRhLCAwLCBOVUxMKTsKIAlwZnJlZShj bWQuZGF0YSk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1 dC9wZ291dHB1dC5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRw dXQuYwppbmRleCA2ZjZhMjAzZGVhLi5jZmQ0MTUyNmQ0IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jCisrKyBiL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMKQEAgLTEzLDE4ICsxMywyOCBAQAog I2luY2x1ZGUgInBvc3RncmVzLmgiCiAKICNpbmNsdWRlICJhY2Nlc3MvdHVwY29udmVydC5o IgorI2luY2x1ZGUgImFjY2Vzcy94YWN0LmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wYXJ0aXRp b24uaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmgiCisjaW5jbHVkZSAi Y2F0YWxvZy9wZ19wdWJsaWNhdGlvbl9yZWwuaCIKICNpbmNsdWRlICJjb21tYW5kcy9kZWZy ZW0uaCIKKyNpbmNsdWRlICJleGVjdXRvci9leGVjdXRvci5oIgogI2luY2x1ZGUgImZtZ3Iu aCIKKyNpbmNsdWRlICJub2Rlcy9ub2RlRnVuY3MuaCIKKyNpbmNsdWRlICJub2Rlcy9tYWtl ZnVuY3MuaCIKKyNpbmNsdWRlICJvcHRpbWl6ZXIvb3B0aW1pemVyLmgiCisjaW5jbHVkZSAi cGFyc2VyL3BhcnNlX2NvZXJjZS5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL2xvZ2ljYWwu aCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9sb2dpY2FscHJvdG8uaCIKKyNpbmNsdWRlICJy ZXBsaWNhdGlvbi9sb2dpY2FscmVsYXRpb24uaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9v cmlnaW4uaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9wZ291dHB1dC5oIgorI2luY2x1ZGUg InV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvaW50OC5oIgogI2luY2x1ZGUg InV0aWxzL2ludmFsLmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAjaW5jbHVk ZSAidXRpbHMvbWVtdXRpbHMuaCIKKyNpbmNsdWRlICJ1dGlscy9zbmFwbWdyLmgiCiAjaW5j bHVkZSAidXRpbHMvc3lzY2FjaGUuaCIKICNpbmNsdWRlICJ1dGlscy92YXJsZW5hLmgiCiAK QEAgLTExNSw2ICsxMjUsMTcgQEAgdHlwZWRlZiBzdHJ1Y3QgUmVsYXRpb25TeW5jRW50cnkK IAlib29sCQlyZXBsaWNhdGVfdmFsaWQ7CiAJUHVibGljYXRpb25BY3Rpb25zIHB1YmFjdGlv bnM7CiAKKwkvKgorCSAqIEV4cHJTdGF0ZSBjYW5ub3QgYmUgdXNlZCB0byBpbmRpY2F0ZSBu byBjYWNoZSwgaW52YWxpZCBjYWNoZSBhbmQgdmFsaWQKKwkgKiBjYWNoZS4gVGhlIGZsYWcg ZXhwcnN0YXRlX3ZhbGlkIGluZGljYXRlcyBpZiB0aGUgY3VycmVudCBjYWNoZSBpcworCSAq IHZhbGlkLiBNdWx0aXBsZSBFeHByU3RhdGUgZW50cmllcyBtaWdodCBiZSB1c2VkIGlmIHRo ZXJlIGFyZSBtdWx0aXBsZQorCSAqIHB1YmxpY2F0aW9ucyBmb3IgYSBzaW5nbGUgdGFibGUu IERpZmZlcmVudCBwdWJsaWNhdGlvbiBhY3Rpb25zIGRvbid0CisJICogYWxsb3cgbXVsdGlw bGUgZXhwcmVzc2lvbnMgdG8gYWx3YXlzIGJlIGNvbWJpbmVkIGludG8gb25lLgorCSAqLwor CWJvb2wJCWV4cHJzdGF0ZV92YWxpZDsKKwlFeHByU3RhdGUgICpleHByc3RhdGVbM107CS8q IEV4cHJTdGF0ZSBhcnJheSBmb3Igcm93IGZpbHRlciAqLworCVR1cGxlVGFibGVTbG90ICpz Y2FudHVwbGU7CS8qIHR1cGxlIHRhYmxlIHNsb3QgZm9yIHJvdyBmaWx0ZXIgKi8KKwogCS8q CiAJICogT0lEIG9mIHRoZSByZWxhdGlvbiB0byBwdWJsaXNoIGNoYW5nZXMgYXMuICBGb3Ig YSBwYXJ0aXRpb24sIHRoaXMgbWF5CiAJICogYmUgc2V0IHRvIG9uZSBvZiBpdHMgYW5jZXN0 b3JzIHdob3NlIHNjaGVtYSB3aWxsIGJlIHVzZWQgd2hlbgpAQCAtMTM3LDcgKzE1OCw3IEBA IHN0YXRpYyBIVEFCICpSZWxhdGlvblN5bmNDYWNoZSA9IE5VTEw7CiAKIHN0YXRpYyB2b2lk IGluaXRfcmVsX3N5bmNfY2FjaGUoTWVtb3J5Q29udGV4dCBkZWNvZGluZ19jb250ZXh0KTsK IHN0YXRpYyB2b2lkIGNsZWFudXBfcmVsX3N5bmNfY2FjaGUoVHJhbnNhY3Rpb25JZCB4aWQs IGJvb2wgaXNfY29tbWl0KTsKLXN0YXRpYyBSZWxhdGlvblN5bmNFbnRyeSAqZ2V0X3JlbF9z eW5jX2VudHJ5KFBHT3V0cHV0RGF0YSAqZGF0YSwgT2lkIHJlbGlkKTsKK3N0YXRpYyBSZWxh dGlvblN5bmNFbnRyeSAqZ2V0X3JlbF9zeW5jX2VudHJ5KFBHT3V0cHV0RGF0YSAqZGF0YSwg UmVsYXRpb24gcmVsYXRpb24pOwogc3RhdGljIHZvaWQgcmVsX3N5bmNfY2FjaGVfcmVsYXRp b25fY2IoRGF0dW0gYXJnLCBPaWQgcmVsaWQpOwogc3RhdGljIHZvaWQgcmVsX3N5bmNfY2Fj aGVfcHVibGljYXRpb25fY2IoRGF0dW0gYXJnLCBpbnQgY2FjaGVpZCwKIAkJCQkJCQkJCQkg IHVpbnQzMiBoYXNodmFsdWUpOwpAQCAtMTQ2LDYgKzE2NywxMyBAQCBzdGF0aWMgdm9pZCBz ZXRfc2NoZW1hX3NlbnRfaW5fc3RyZWFtZWRfdHhuKFJlbGF0aW9uU3luY0VudHJ5ICplbnRy eSwKIHN0YXRpYyBib29sIGdldF9zY2hlbWFfc2VudF9pbl9zdHJlYW1lZF90eG4oUmVsYXRp b25TeW5jRW50cnkgKmVudHJ5LAogCQkJCQkJCQkJCQlUcmFuc2FjdGlvbklkIHhpZCk7CiAK Ky8qIHJvdyBmaWx0ZXIgcm91dGluZXMgKi8KK3N0YXRpYyBFU3RhdGUgKmNyZWF0ZV9lc3Rh dGVfZm9yX3JlbGF0aW9uKFJlbGF0aW9uIHJlbCk7CitzdGF0aWMgRXhwclN0YXRlICpwZ291 dHB1dF9yb3dfZmlsdGVyX2luaXRfZXhwcihOb2RlICpyZm5vZGUpOworc3RhdGljIGJvb2wg cGdvdXRwdXRfcm93X2ZpbHRlcl9leGVjX2V4cHIoRXhwclN0YXRlICpzdGF0ZSwgRXhwckNv bnRleHQgKmVjb250ZXh0KTsKK3N0YXRpYyBib29sIHBnb3V0cHV0X3Jvd19maWx0ZXIoUEdP dXRwdXREYXRhICpkYXRhLCBSZWxhdGlvbiByZWxhdGlvbiwgSGVhcFR1cGxlIG9sZHR1cGxl LAorCQkJCQkJCQlIZWFwVHVwbGUgbmV3dHVwbGUsIFJlbGF0aW9uU3luY0VudHJ5ICplbnRy eSwgaW50IGFjdGlvbik7CisKIC8qCiAgKiBTcGVjaWZ5IG91dHB1dCBwbHVnaW4gY2FsbGJh Y2tzCiAgKi8KQEAgLTYyMCw2ICs2NDgsMzA1IEBAIHNlbmRfcmVsYXRpb25fYW5kX2F0dHJz KFJlbGF0aW9uIHJlbGF0aW9uLCBUcmFuc2FjdGlvbklkIHhpZCwKIAlPdXRwdXRQbHVnaW5X cml0ZShjdHgsIGZhbHNlKTsKIH0KIAorLyoKKyAqIEV4ZWN1dG9yIHN0YXRlIHByZXBhcmF0 aW9uIGZvciBldmFsdWF0aW9uIG9mIHJvdyBmaWx0ZXIgZXhwcmVzc2lvbnMgZm9yIHRoZQor ICogc3BlY2lmaWVkIHJlbGF0aW9uLgorICovCitzdGF0aWMgRVN0YXRlICoKK2NyZWF0ZV9l c3RhdGVfZm9yX3JlbGF0aW9uKFJlbGF0aW9uIHJlbCkKK3sKKwlFU3RhdGUJICAgKmVzdGF0 ZTsKKwlSYW5nZVRibEVudHJ5ICpydGU7CisKKwllc3RhdGUgPSBDcmVhdGVFeGVjdXRvclN0 YXRlKCk7CisKKwlydGUgPSBtYWtlTm9kZShSYW5nZVRibEVudHJ5KTsKKwlydGUtPnJ0ZWtp bmQgPSBSVEVfUkVMQVRJT047CisJcnRlLT5yZWxpZCA9IFJlbGF0aW9uR2V0UmVsaWQocmVs KTsKKwlydGUtPnJlbGtpbmQgPSByZWwtPnJkX3JlbC0+cmVsa2luZDsKKwlydGUtPnJlbGxv Y2ttb2RlID0gQWNjZXNzU2hhcmVMb2NrOworCUV4ZWNJbml0UmFuZ2VUYWJsZShlc3RhdGUs IGxpc3RfbWFrZTEocnRlKSk7CisKKwllc3RhdGUtPmVzX291dHB1dF9jaWQgPSBHZXRDdXJy ZW50Q29tbWFuZElkKGZhbHNlKTsKKworCXJldHVybiBlc3RhdGU7Cit9CisKKy8qCisgKiBJ bml0aWFsaXplIGZvciByb3cgZmlsdGVyIGV4cHJlc3Npb24gZXhlY3V0aW9uLgorICovCitz dGF0aWMgRXhwclN0YXRlICoKK3Bnb3V0cHV0X3Jvd19maWx0ZXJfaW5pdF9leHByKE5vZGUg KnJmbm9kZSkKK3sKKwlFeHByU3RhdGUgICpleHByc3RhdGU7CisJT2lkCQkJZXhwcnR5cGU7 CisJRXhwcgkgICAqZXhwcjsKKwlNZW1vcnlDb250ZXh0IG9sZGN0eDsKKworCS8qIFByZXBh cmUgZXhwcmVzc2lvbiBmb3IgZXhlY3V0aW9uICovCisJZXhwcnR5cGUgPSBleHByVHlwZShy Zm5vZGUpOworCWV4cHIgPSAoRXhwciAqKSBjb2VyY2VfdG9fdGFyZ2V0X3R5cGUoTlVMTCwg cmZub2RlLCBleHBydHlwZSwgQk9PTE9JRCwgLTEsIENPRVJDSU9OX0FTU0lHTk1FTlQsIENP RVJDRV9JTVBMSUNJVF9DQVNULCAtMSk7CisKKwlpZiAoZXhwciA9PSBOVUxMKQorCQllcmVw b3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfQ0FOTk9UX0NPRVJDRSksCisJCQkJ IGVycm1zZygicm93IGZpbHRlciByZXR1cm5zIHR5cGUgJXMgdGhhdCBjYW5ub3QgYmUgY29l cmNlZCB0byB0aGUgZXhwZWN0ZWQgdHlwZSAlcyIsCisJCQkJCQlmb3JtYXRfdHlwZV9iZShl eHBydHlwZSksCisJCQkJCQlmb3JtYXRfdHlwZV9iZShCT09MT0lEKSksCisJCQkJIGVycmhp bnQoIllvdSB3aWxsIG5lZWQgdG8gcmV3cml0ZSB0aGUgcm93IGZpbHRlci4iKSkpOworCisJ LyoKKwkgKiBDYWNoZSBFeHByU3RhdGUgdXNpbmcgQ2FjaGVNZW1vcnlDb250ZXh0LiBUaGlz IGlzIHRoZSBzYW1lIGNvZGUgYXMKKwkgKiBFeGVjUHJlcGFyZUV4cHIoKSBidXQgdGhhdCBp cyBub3QgdXNlZCBiZWNhdXNlIGl0IGRvZXNuJ3QgdXNlIGFuCisJICogRVN0YXRlLiBJdCBz aG91bGQgcHJvYmFibHkgYmUgYW5vdGhlciBmdW5jdGlvbiBpbiB0aGUgZXhlY3V0b3IgdG8K KwkgKiBoYW5kbGUgdGhlIGV4ZWN1dGlvbiBvdXRzaWRlIGEgbm9ybWFsIFBsYW4gdHJlZSBj b250ZXh0LgorCSAqLworCW9sZGN0eCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhDYWNoZU1l bW9yeUNvbnRleHQpOworCWV4cHIgPSBleHByZXNzaW9uX3BsYW5uZXIoZXhwcik7CisJZXhw cnN0YXRlID0gRXhlY0luaXRFeHByKGV4cHIsIE5VTEwpOworCU1lbW9yeUNvbnRleHRTd2l0 Y2hUbyhvbGRjdHgpOworCisJcmV0dXJuIGV4cHJzdGF0ZTsKK30KKworLyoKKyAqIEV2YWx1 YXRlcyByb3cgZmlsdGVyLgorICoKKyAqIElmIHRoZSByb3cgZmlsdGVyIGV2YWx1YXRlcyB0 byBOVUxMLCBpdCBpcyB0YWtlbiBhcyBmYWxzZSBpLmUuIHRoZSBjaGFuZ2UKKyAqIGlzbid0 IHJlcGxpY2F0ZWQuCisgKi8KK3N0YXRpYyBib29sCitwZ291dHB1dF9yb3dfZmlsdGVyX2V4 ZWNfZXhwcihFeHByU3RhdGUgKnN0YXRlLCBFeHByQ29udGV4dCAqZWNvbnRleHQpCit7CisJ RGF0dW0JCXJldDsKKwlib29sCQlpc251bGw7CisKKwlBc3NlcnQoc3RhdGUgIT0gTlVMTCk7 CisKKwlyZXQgPSBFeGVjRXZhbEV4cHJTd2l0Y2hDb250ZXh0KHN0YXRlLCBlY29udGV4dCwg JmlzbnVsbCk7CisKKwllbG9nKERFQlVHMywgInJvdyBmaWx0ZXIgZXZhbHVhdGVzIHRvICVz IChpc251bGw6ICVzKSIsCisJCSBEYXR1bUdldEJvb2wocmV0KSA/ICJ0cnVlIiA6ICJmYWxz ZSIsCisJCSBpc251bGwgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKKworCWlmIChpc251bGwpCisJ CXJldHVybiBmYWxzZTsKKworCXJldHVybiBEYXR1bUdldEJvb2wocmV0KTsKK30KKworLyoK KyAqIENoYW5nZSBpcyBjaGVja2VkIGFnYWluc3QgdGhlIHJvdyBmaWx0ZXIsIGlmIGFueS4K KyAqCisgKiBJZiBpdCByZXR1cm5zIHRydWUsIHRoZSBjaGFuZ2UgaXMgcmVwbGljYXRlZCwg b3RoZXJ3aXNlLCBpdCBpcyBub3QuCisgKi8KK3N0YXRpYyBib29sCitwZ291dHB1dF9yb3df ZmlsdGVyKFBHT3V0cHV0RGF0YSAqZGF0YSwgUmVsYXRpb24gcmVsYXRpb24sIEhlYXBUdXBs ZSBvbGR0dXBsZSwgSGVhcFR1cGxlIG5ld3R1cGxlLCBSZWxhdGlvblN5bmNFbnRyeSAqZW50 cnksIGludCBhY3Rpb24pCit7CisJRVN0YXRlCSAgICplc3RhdGU7CisJRXhwckNvbnRleHQg KmVjeHQ7CisJTGlzdENlbGwgICAqbGM7CisJYm9vbAkJcmVzdWx0ID0gZmFsc2U7CisJT2lk CQkJcmVsaWQgPSBSZWxhdGlvbkdldFJlbGlkKHJlbGF0aW9uKTsKKworCS8qCisJICogVGhl IGZsYWcgZXhwcnN0YXRlX3ZhbGlkIGluZGljYXRlcyB0aGUgcm93IGZpbHRlciBjYWNoZSBz dGF0ZS4gQW4KKwkgKiBpbnZhbGlkIHN0YXRlIG1lYW5zIHRoZXJlIGlzIG5vIGNhY2hlIHll dCBvciB0aGVyZSBpcyBubyByb3cgZmlsdGVyIGZvcgorCSAqIHRoaXMgcmVsYXRpb24uCisJ ICoKKwkgKiBPbmNlIHRoZSByb3cgZmlsdGVyIGlzIGNhY2hlZCwgaXQgd2lsbCBiZSBleGVj dXRlZCBhZ2FpbiBvbmx5IGlmIHRoZXJlCisJICogaXMgYSByZWxhdGlvbiBlbnRyeSBpbnZh bGlkYXRpb24uIEhlbmNlLCBpdCBzZWVtcyBmaW5lIHRvIGNhY2hlIGl0CisJICogaGVyZS4K KwkgKgorCSAqIFRoaXMgY29kZSB3YXMgbm90IGFkZGVkIHRvIGZ1bmN0aW9uIGdldF9yZWxf c3luY19lbnRyeSgpIHRvIGF2b2lkCisJICogdXBkYXRpbmcgdGhlIGNhY2hlIGV2ZW4gaWYg aXQgd2FzIG5vdCBjaGFuZ2VkLiBCZXNpZGVzIHRoYXQsIGl0CisJICogcG9zdHBvbmVzIGNh Y2hpbmcgdGhlIGV4cHJlc3Npb24gbmVhciB0byB0aGUgbW9tZW50IGl0IHdpbGwgYmUgdXNl ZC4gSXQKKwkgKiBtZWFucyB0aGF0IGl0IHdvbid0IHdhc3RlIGN5Y2xlcyBpbiBjaGFuZ2Vz IChzdWNoIGFzIHRydW5jYXRlKSB0aGF0CisJICogd29uJ3QgdXNlIGl0IG9yIGNvZGUgcGF0 aHMgdGhhdCB3aWxsIGV2ZW50dWFsbHkgYmFpbCBvdXQgd2l0aG91dCB1c2luZworCSAqIHRo aXMgY2FjaGUuCisJICovCisJaWYgKCFlbnRyeS0+ZXhwcnN0YXRlX3ZhbGlkKQorCXsKKwkJ TWVtb3J5Q29udGV4dCBvbGRjdHg7CisJCVR1cGxlRGVzYwl0dXBkZXNjID0gUmVsYXRpb25H ZXREZXNjcihyZWxhdGlvbik7CisJCUxpc3QJICAgKnJmbm9kZXNbM10gPSB7TklMLCBOSUws IE5JTH07CS8qIG9uZSBOb2RlIExpc3QgcGVyCisJCQkJCQkJCQkJCQkJICogcHVibGljYXRp b24gb3BlcmF0aW9uICovCisJCWJvb2wJCXJmX2luX2FsbF9wdWJzWzNdID0ge3RydWUsIHRy dWUsIHRydWV9OyAvKiByb3cgZmlsdGVyIGluIGFsbAorCQkJCQkJCQkJCQkJCQkJICogcHVi bGljYXRpb25zPyAqLworCQlOb2RlCSAgICpyZm5vZGU7CisJCWludAkJCWk7CisKKwkJLyoK KwkJICogQ3JlYXRlIGEgdHVwbGUgdGFibGUgc2xvdCBmb3Igcm93IGZpbHRlci4gVHVwbGVE ZXNjIG11c3QgbGl2ZSBhcworCQkgKiBsb25nIGFzIHRoZSBjYWNoZSByZW1haW5zLiBSZWxl YXNlIHRoZSB0dXBsZSB0YWJsZSBzbG90IGlmIGl0CisJCSAqIGFscmVhZHkgZXhpc3RzLgor CQkgKi8KKwkJaWYgKGVudHJ5LT5zY2FudHVwbGUgIT0gTlVMTCkKKwkJeworCQkJRXhlY0Ry b3BTaW5nbGVUdXBsZVRhYmxlU2xvdChlbnRyeS0+c2NhbnR1cGxlKTsKKwkJCWVudHJ5LT5z Y2FudHVwbGUgPSBOVUxMOworCQl9CisJCW9sZGN0eCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hU byhDYWNoZU1lbW9yeUNvbnRleHQpOworCQl0dXBkZXNjID0gQ3JlYXRlVHVwbGVEZXNjQ29w eSh0dXBkZXNjKTsKKwkJZW50cnktPnNjYW50dXBsZSA9IE1ha2VTaW5nbGVUdXBsZVRhYmxl U2xvdCh0dXBkZXNjLCAmVFRTT3BzSGVhcFR1cGxlKTsKKwkJTWVtb3J5Q29udGV4dFN3aXRj aFRvKG9sZGN0eCk7CisKKwkJLyoKKwkJICogTk9URTogSWYgdGhlIHJlbGF0aW9uIGlzIGEg cGFydGl0aW9uIGFuZCBwdWJ2aWFyb290IGlzIHRydWUsIHVzZQorCQkgKiB0aGUgcm93IGZp bHRlciBvZiB0aGUgdG9wbW9zdCBwYXJ0aXRpb25lZCB0YWJsZSBpbnN0ZWFkIG9mIHRoZSBy b3cKKwkJICogZmlsdGVyIG9mIGl0cyBvd24gcGFydGl0aW9uLgorCQkgKgorCQkgKiBNdWx0 aXBsZSBwdWJsaWNhdGlvbnMgbWlnaHQgaGF2ZSBtdWx0aXBsZSByb3cgZmlsdGVycyBmb3Ig dGhpcworCQkgKiByZWxhdGlvbi4gU2luY2Ugcm93IGZpbHRlciB1c2FnZSBkZXBlbmRzIG9u IHRoZSBETUwgb3BlcmF0aW9uLAorCQkgKiB0aGVyZSBhcmUgbXVsdGlwbGUgbGlzdHMgKG9u ZSBmb3IgZWFjaCBvcGVyYXRpb24pIHdoaWNoIHJvdyBmaWx0ZXJzCisJCSAqIHdpbGwgYmUg YXBwZW5kZWQuCisJCSAqLworCQlmb3JlYWNoKGxjLCBkYXRhLT5wdWJsaWNhdGlvbnMpCisJ CXsKKwkJCVB1YmxpY2F0aW9uICpwdWIgPSBsZmlyc3QobGMpOworCQkJSGVhcFR1cGxlCXJm dHVwbGU7CisJCQlEYXR1bQkJcmZkYXR1bTsKKwkJCWJvb2wJCXJmaXNudWxsOworCisJCQkv KgorCQkJICogQXBwZW5kIG11bHRpcGxlIHJvdyBmaWx0ZXJzIGFjY29yZGluZyB0byB0aGUg RE1MIG9wZXJhdGlvbi4gSWYKKwkJCSAqIGFuIGVudHJ5IGRvZXMgbm90IGhhdmUgYSByb3cg ZmlsdGVyLCByZW1lbWJlciB0aGlzIGluZm9ybWF0aW9uCisJCQkgKiAocmZfaW5fYWxsX3B1 YnMpLiAgSXQgaXMgdXNlZCB0byBkaXNjYXJkIGFsbCByb3cgZmlsdGVyCisJCQkgKiBleHBy ZXNzaW9ucyBmb3IgdGhhdCBETUwgb3BlcmF0aW9uIGFuZCwgYXMgYSByZXN1bHQsIGJhaWwg b3V0CisJCQkgKiB0aHJvdWdoIGEgZmFzdCBwYXRoIGJlZm9yZSBpbml0aWFsaXppbmcgdGhl IHN0YXRlIHRvIHByb2Nlc3MKKwkJCSAqIHRoZSByb3cgZmlsdGVyIGV4cHJlc3Npb24uCisJ CQkgKi8KKwkJCXJmdHVwbGUgPSBTZWFyY2hTeXNDYWNoZTIoUFVCTElDQVRJT05SRUxNQVAs IE9iamVjdElkR2V0RGF0dW0oZW50cnktPnB1Ymxpc2hfYXNfcmVsaWQpLCBPYmplY3RJZEdl dERhdHVtKHB1Yi0+b2lkKSk7CisJCQlpZiAoSGVhcFR1cGxlSXNWYWxpZChyZnR1cGxlKSkK KwkJCXsKKwkJCQlyZmRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKFBVQkxJQ0FUSU9OUkVMTUFQ LCByZnR1cGxlLCBBbnVtX3BnX3B1YmxpY2F0aW9uX3JlbF9wcnF1YWwsICZyZmlzbnVsbCk7 CisKKwkJCQlpZiAocmZpc251bGwpCisJCQkJeworCQkJCQlpZiAocHViLT5wdWJhY3Rpb25z LnB1Ymluc2VydCkKKwkJCQkJCXJmX2luX2FsbF9wdWJzWzBdID0gZmFsc2U7CS8qIElOU0VS VCAqLworCQkJCQlpZiAocHViLT5wdWJhY3Rpb25zLnB1YnVwZGF0ZSkKKwkJCQkJCXJmX2lu X2FsbF9wdWJzWzFdID0gZmFsc2U7CS8qIFVQREFURSAqLworCQkJCQlpZiAocHViLT5wdWJh Y3Rpb25zLnB1YmRlbGV0ZSkKKwkJCQkJCXJmX2luX2FsbF9wdWJzWzJdID0gZmFsc2U7CS8q IERFTEVURSAqLworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlyZm5vZGUgPSBzdHJp bmdUb05vZGUoVGV4dERhdHVtR2V0Q1N0cmluZyhyZmRhdHVtKSk7CisJCQkJCWlmIChwdWIt PnB1YmFjdGlvbnMucHViaW5zZXJ0KQorCQkJCQkJcmZub2Rlc1swXSA9IGxhcHBlbmQocmZu b2Rlc1swXSwgcmZub2RlKTsJLyogSU5TRVJUICovCisJCQkJCWlmIChwdWItPnB1YmFjdGlv bnMucHVidXBkYXRlKQorCQkJCQkJcmZub2Rlc1sxXSA9IGxhcHBlbmQocmZub2Rlc1sxXSwg cmZub2RlKTsJLyogVVBEQVRFICovCisJCQkJCWlmIChwdWItPnB1YmFjdGlvbnMucHViZGVs ZXRlKQorCQkJCQkJcmZub2Rlc1syXSA9IGxhcHBlbmQocmZub2Rlc1syXSwgcmZub2RlKTsJ LyogREVMRVRFICovCisJCQkJfQorCisJCQkJUmVsZWFzZVN5c0NhY2hlKHJmdHVwbGUpOwor CQkJfQorCQl9CisKKwkJLyoKKwkJICogRm9yIGVhY2ggcHVibGljYXRpb24gb3BlcmF0aW9u IHN0b3JlcyBhIHNpbmdsZSByb3cgZmlsdGVyCisJCSAqIGV4cHJlc3Npb24uIFRoaXMgZXhw cmVzc2lvbiBtaWdodCBiZSB1c2VkIG9yIG5vdCBkZXBlbmRpbmcgb24gdGhlCisJCSAqIHJm X2luX2FsbF9wdWJzIHZhbHVlLgorCQkgKi8KKwkJZm9yIChpID0gMDsgaSA8IDM7IGkrKykK KwkJeworCQkJaW50CQkJbjsKKworCQkJLyoKKwkJCSAqIEFsbCByb3cgZmlsdGVyIGV4cHJl c3Npb25zIHdpbGwgYmUgZGlzY2FyZGVkIGlmIHRoZXJlIGlzIG9uZQorCQkJICogcHVibGlj YXRpb24tcmVsYXRpb24gZW50cnkgd2l0aG91dCBhIHJvdyBmaWx0ZXIuIFRoYXQncyBiZWNh dXNlCisJCQkgKiBhbGwgZXhwcmVzc2lvbnMgYXJlIGFnZ3JlZ2F0ZWQgYnkgdGhlIE9SIG9w ZXJhdG9yLiBUaGUgcm93CisJCQkgKiBmaWx0ZXIgYWJzZW5jZSBtZWFucyByZXBsaWNhdGUg YWxsIHJvd3Mgc28gYSBzaW5nbGUgdmFsaWQKKwkJCSAqIGV4cHJlc3Npb24gbWVhbnMgcHVi bGlzaCB0aGlzIHJvdy4KKwkJCSAqLworCQkJaWYgKCFyZl9pbl9hbGxfcHVic1tpXSkKKwkJ CXsKKwkJCQlsaXN0X2ZyZWUocmZub2Rlc1tpXSk7CisJCQkJZW50cnktPmV4cHJzdGF0ZVtp XSA9IE5VTEw7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCW4gPSBsaXN0X2xlbmd0aChy Zm5vZGVzW2ldKTsKKwkJCWlmIChuID09IDEpCisJCQkJcmZub2RlID0gbGluaXRpYWwocmZu b2Rlc1tpXSk7CisJCQllbHNlIGlmIChuID4gMSkKKwkJCQlyZm5vZGUgPSAoTm9kZSAqKSBt YWtlQm9vbEV4cHIoT1JfRVhQUiwgcmZub2Rlc1tpXSwgLTEpOworCQkJZWxzZQorCQkJCXJm bm9kZSA9IE5VTEw7CisKKwkJCW9sZGN0eCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhDYWNo ZU1lbW9yeUNvbnRleHQpOworCQkJaWYgKG4gPT0gMCkKKwkJCQllbnRyeS0+ZXhwcnN0YXRl W2ldID0gTlVMTDsKKwkJCWVsc2UKKwkJCQllbnRyeS0+ZXhwcnN0YXRlW2ldID0gcGdvdXRw dXRfcm93X2ZpbHRlcl9pbml0X2V4cHIocmZub2RlKTsKKwkJCU1lbW9yeUNvbnRleHRTd2l0 Y2hUbyhvbGRjdHgpOworCQl9CisKKwkJZW50cnktPmV4cHJzdGF0ZV92YWxpZCA9IHRydWU7 CisJfQorCisJLyoKKwkgKiBCYWlsIG91dCBpZiBmb3IgYSBjZXJ0YWluIG9wZXJhdGlvbiB0 aGVyZSBpcyBubyByb3cgZmlsdGVyIHRvIHByb2Nlc3MuCisJICogVGhpcyBpcyBhIGZhc3Qg cGF0aCBvcHRpbWl6YXRpb24uIFJlYWQgdGhlIGV4cGxhbmF0aW9uIGFib3ZlIGFib3V0CisJ ICogcmZfaW5fYWxsX3B1YnMuCisJICovCisJaWYgKGFjdGlvbiA9PSBSRU9SREVSX0JVRkZF Ul9DSEFOR0VfSU5TRVJUICYmIGVudHJ5LT5leHByc3RhdGVbMF0gPT0gTlVMTCkKKwkJcmV0 dXJuIHRydWU7CisJaWYgKGFjdGlvbiA9PSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfVVBEQVRF ICYmIGVudHJ5LT5leHByc3RhdGVbMV0gPT0gTlVMTCkKKwkJcmV0dXJuIHRydWU7CisJaWYg KGFjdGlvbiA9PSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfREVMRVRFICYmIGVudHJ5LT5leHBy c3RhdGVbMl0gPT0gTlVMTCkKKwkJcmV0dXJuIHRydWU7CisKKwllbG9nKERFQlVHMywgInRh YmxlIFwiJXMuJXNcIiBoYXMgcm93IGZpbHRlciIsCisJCSBnZXRfbmFtZXNwYWNlX25hbWUo Z2V0X3JlbF9uYW1lc3BhY2UocmVsaWQpKSwKKwkJIGdldF9yZWxfbmFtZShyZWxpZCkpOwor CisJUHVzaEFjdGl2ZVNuYXBzaG90KEdldFRyYW5zYWN0aW9uU25hcHNob3QoKSk7CisKKwll c3RhdGUgPSBjcmVhdGVfZXN0YXRlX2Zvcl9yZWxhdGlvbihyZWxhdGlvbik7CisKKwkvKiBQ cmVwYXJlIGNvbnRleHQgcGVyIHR1cGxlICovCisJZWN4dCA9IEdldFBlclR1cGxlRXhwckNv bnRleHQoZXN0YXRlKTsKKwllY3h0LT5lY3h0X3NjYW50dXBsZSA9IGVudHJ5LT5zY2FudHVw bGU7CisKKwkvKgorCSAqIFRoZSBkZWZhdWx0IGJlaGF2aW9yIGZvciBVUERBVEVzIGlzIHRv IHVzZSB0aGUgb2xkIHR1cGxlIGZvciByb3cKKwkgKiBmaWx0ZXJpbmcuCisJICogMSkgVGhl IGNvbHVtbnMgdXNlZCBpbiB0aGUgZXhwcmVzc2lvbiBpcyByZXN0cmljdGVkIHRvIFJFUExJ Q0EgSURFTlRJVFkuCisJICogSXQgbWVhbnMgdGhhdCBhbGwgY29sdW1uIHZhbHVlcyBhcmUg YXZhaWxhYmxlIHRvIGV2YWx1YXRlIHRoZQorCSAqIGV4cHJlc3Npb24uCisJICogMikgSWYg dGhlIG9sZCB0dXBsZSBzYXRpc2ZpZXMgdGhlIHJvdyBmaWx0ZXIgYnV0IHRoZSBuZXcgdHVw bGUgZG9lc24ndCwKKwkgKiB0aGVyZSBpcyBhIGRhdGEgY29uc2lzdGVuY3kgaXNzdWUuIFRo YXQgaXMgd29yc2Ugd2hlbiB0aGUgbmV3IHR1cGxlIGlzCisJICogdXNlZCAoa2VlcCBvbGQg cm93IHRoYXQgY291bGQgZXZlbnR1YWxseSBjb25mbGljdHMgd2l0aCBhIG5ldyByb3cKKwkg KiBpbnNlcnRlZCBpbiB0aGUgZnV0dXJlKSBpbnN0ZWFkIG9mIHRoZSBvbGQgdHVwbGUgKG1v ZGlmeSB0aGUgcm93IG9uCisJICogc3Vic2NyaWJlciB0aGF0IGNvdWxkbid0IGJlIGNoYW5n ZWQgYnkgdGhlIHJlcGxpY2F0aW9uIGFnYWluIGR1ZSB0byByb3cKKwkgKiBmaWx0ZXIgZXhw cmVzc2lvbikuCisJICovCisJRXhlY1N0b3JlSGVhcFR1cGxlKG9sZHR1cGxlID8gb2xkdHVw bGUgOiBuZXd0dXBsZSwgZWN4dC0+ZWN4dF9zY2FudHVwbGUsIGZhbHNlKTsKKworCS8qCisJ ICogUHJvY2VzcyB0aGUgcm93IGZpbHRlci4gTXVsdGlwbGUgcm93IGZpbHRlcnMgd2VyZSBh bHJlYWR5IGNvbWJpbmVkCisJICogYWJvdmUuCisJICovCisJaWYgKGFjdGlvbiA9PSBSRU9S REVSX0JVRkZFUl9DSEFOR0VfSU5TRVJUKQorCQlyZXN1bHQgPSBwZ291dHB1dF9yb3dfZmls dGVyX2V4ZWNfZXhwcihlbnRyeS0+ZXhwcnN0YXRlWzBdLCBlY3h0KTsKKwllbHNlIGlmIChh Y3Rpb24gPT0gUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX1VQREFURSkKKwkJcmVzdWx0ID0gcGdv dXRwdXRfcm93X2ZpbHRlcl9leGVjX2V4cHIoZW50cnktPmV4cHJzdGF0ZVsxXSwgZWN4dCk7 CisJZWxzZSBpZiAoYWN0aW9uID09IFJFT1JERVJfQlVGRkVSX0NIQU5HRV9ERUxFVEUpCisJ CXJlc3VsdCA9IHBnb3V0cHV0X3Jvd19maWx0ZXJfZXhlY19leHByKGVudHJ5LT5leHByc3Rh dGVbMl0sIGVjeHQpOworCWVsc2UKKwkJQXNzZXJ0KGZhbHNlKTsKKworCS8qIENsZWFudXAg YWxsb2NhdGVkIHJlc291cmNlcyAqLworCVJlc2V0RXhwckNvbnRleHQoZWN4dCk7CisJRnJl ZUV4ZWN1dG9yU3RhdGUoZXN0YXRlKTsKKwlQb3BBY3RpdmVTbmFwc2hvdCgpOworCisJcmV0 dXJuIHJlc3VsdDsKK30KKwogLyoKICAqIFNlbmRzIHRoZSBkZWNvZGVkIERNTCBvdmVyIHdp cmUuCiAgKgpAQCAtNjQ3LDcgKzk3NCw3IEBAIHBnb3V0cHV0X2NoYW5nZShMb2dpY2FsRGVj b2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAlpZiAoaW5fc3Ry ZWFtaW5nKQogCQl4aWQgPSBjaGFuZ2UtPnR4bi0+eGlkOwogCi0JcmVsZW50cnkgPSBnZXRf cmVsX3N5bmNfZW50cnkoZGF0YSwgUmVsYXRpb25HZXRSZWxpZChyZWxhdGlvbikpOworCXJl bGVudHJ5ID0gZ2V0X3JlbF9zeW5jX2VudHJ5KGRhdGEsIHJlbGF0aW9uKTsKIAogCS8qIEZp cnN0IGNoZWNrIHRoZSB0YWJsZSBmaWx0ZXIgKi8KIAlzd2l0Y2ggKGNoYW5nZS0+YWN0aW9u KQpAQCAtNjcxLDggKzk5OCw2IEBAIHBnb3V0cHV0X2NoYW5nZShMb2dpY2FsRGVjb2RpbmdD b250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkvKiBBdm9pZCBsZWFraW5n IG1lbW9yeSBieSB1c2luZyBhbmQgcmVzZXR0aW5nIG91ciBvd24gY29udGV4dCAqLwogCW9s ZCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhkYXRhLT5jb250ZXh0KTsKIAotCW1heWJlX3Nl bmRfc2NoZW1hKGN0eCwgY2hhbmdlLCByZWxhdGlvbiwgcmVsZW50cnkpOwotCiAJLyogU2Vu ZCB0aGUgZGF0YSAqLwogCXN3aXRjaCAoY2hhbmdlLT5hY3Rpb24pCiAJewpAQCAtNjgwLDYg KzEwMDUsMTYgQEAgcGdvdXRwdXRfY2hhbmdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0 eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJewogCQkJCUhlYXBUdXBsZQl0dXBsZSA9 ICZjaGFuZ2UtPmRhdGEudHAubmV3dHVwbGUtPnR1cGxlOwogCisJCQkJLyogQ2hlY2sgcm93 IGZpbHRlci4gKi8KKwkJCQlpZiAoIXBnb3V0cHV0X3Jvd19maWx0ZXIoZGF0YSwgcmVsYXRp b24sIE5VTEwsIHR1cGxlLCByZWxlbnRyeSwgY2hhbmdlLT5hY3Rpb24pKQorCQkJCQlicmVh azsKKworCQkJCS8qCisJCQkJICogU2NoZW1hIHNob3VsZCBiZSBzZW50IGJlZm9yZSB0aGUg bG9naWMgdGhhdCByZXBsYWNlcyB0aGUKKwkJCQkgKiByZWxhdGlvbiBiZWNhdXNlIGl0IGFs c28gc2VuZHMgdGhlIGFuY2VzdG9yJ3MgcmVsYXRpb24uCisJCQkJICovCisJCQkJbWF5YmVf c2VuZF9zY2hlbWEoY3R4LCBjaGFuZ2UsIHJlbGF0aW9uLCByZWxlbnRyeSk7CisKIAkJCQkv KiBTd2l0Y2ggcmVsYXRpb24gaWYgcHVibGlzaGluZyB2aWEgcm9vdC4gKi8KIAkJCQlpZiAo cmVsZW50cnktPnB1Ymxpc2hfYXNfcmVsaWQgIT0gUmVsYXRpb25HZXRSZWxpZChyZWxhdGlv bikpCiAJCQkJewpAQCAtNzAzLDYgKzEwMzgsMTIgQEAgcGdvdXRwdXRfY2hhbmdlKExvZ2lj YWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJCSZj aGFuZ2UtPmRhdGEudHAub2xkdHVwbGUtPnR1cGxlIDogTlVMTDsKIAkJCQlIZWFwVHVwbGUJ bmV3dHVwbGUgPSAmY2hhbmdlLT5kYXRhLnRwLm5ld3R1cGxlLT50dXBsZTsKIAorCQkJCS8q IENoZWNrIHJvdyBmaWx0ZXIuICovCisJCQkJaWYgKCFwZ291dHB1dF9yb3dfZmlsdGVyKGRh dGEsIHJlbGF0aW9uLCBvbGR0dXBsZSwgbmV3dHVwbGUsIHJlbGVudHJ5LCBjaGFuZ2UtPmFj dGlvbikpCisJCQkJCWJyZWFrOworCisJCQkJbWF5YmVfc2VuZF9zY2hlbWEoY3R4LCBjaGFu Z2UsIHJlbGF0aW9uLCByZWxlbnRyeSk7CisKIAkJCQkvKiBTd2l0Y2ggcmVsYXRpb24gaWYg cHVibGlzaGluZyB2aWEgcm9vdC4gKi8KIAkJCQlpZiAocmVsZW50cnktPnB1Ymxpc2hfYXNf cmVsaWQgIT0gUmVsYXRpb25HZXRSZWxpZChyZWxhdGlvbikpCiAJCQkJewpAQCAtNzMxLDYg KzEwNzIsMTIgQEAgcGdvdXRwdXRfY2hhbmdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0 eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJewogCQkJCUhlYXBUdXBsZQlvbGR0dXBs ZSA9ICZjaGFuZ2UtPmRhdGEudHAub2xkdHVwbGUtPnR1cGxlOwogCisJCQkJLyogQ2hlY2sg cm93IGZpbHRlci4gKi8KKwkJCQlpZiAoIXBnb3V0cHV0X3Jvd19maWx0ZXIoZGF0YSwgcmVs YXRpb24sIG9sZHR1cGxlLCBOVUxMLCByZWxlbnRyeSwgY2hhbmdlLT5hY3Rpb24pKQorCQkJ CQlicmVhazsKKworCQkJCW1heWJlX3NlbmRfc2NoZW1hKGN0eCwgY2hhbmdlLCByZWxhdGlv biwgcmVsZW50cnkpOworCiAJCQkJLyogU3dpdGNoIHJlbGF0aW9uIGlmIHB1Ymxpc2hpbmcg dmlhIHJvb3QuICovCiAJCQkJaWYgKHJlbGVudHJ5LT5wdWJsaXNoX2FzX3JlbGlkICE9IFJl bGF0aW9uR2V0UmVsaWQocmVsYXRpb24pKQogCQkJCXsKQEAgLTc5NCw3ICsxMTQxLDcgQEAg cGdvdXRwdXRfdHJ1bmNhdGUoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVy QnVmZmVyVFhOICp0eG4sCiAJCWlmICghaXNfcHVibGlzaGFibGVfcmVsYXRpb24ocmVsYXRp b24pKQogCQkJY29udGludWU7CiAKLQkJcmVsZW50cnkgPSBnZXRfcmVsX3N5bmNfZW50cnko ZGF0YSwgcmVsaWQpOworCQlyZWxlbnRyeSA9IGdldF9yZWxfc3luY19lbnRyeShkYXRhLCBy ZWxhdGlvbik7CiAKIAkJaWYgKCFyZWxlbnRyeS0+cHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSkK IAkJCWNvbnRpbnVlOwpAQCAtMTExNiw5ICsxNDYzLDEwIEBAIHNldF9zY2hlbWFfc2VudF9p bl9zdHJlYW1lZF90eG4oUmVsYXRpb25TeW5jRW50cnkgKmVudHJ5LCBUcmFuc2FjdGlvbklk IHhpZCkKICAqIHdoZW4gcHVibGlzaGluZy4KICAqLwogc3RhdGljIFJlbGF0aW9uU3luY0Vu dHJ5ICoKLWdldF9yZWxfc3luY19lbnRyeShQR091dHB1dERhdGEgKmRhdGEsIE9pZCByZWxp ZCkKK2dldF9yZWxfc3luY19lbnRyeShQR091dHB1dERhdGEgKmRhdGEsIFJlbGF0aW9uIHJl bGF0aW9uKQogewogCVJlbGF0aW9uU3luY0VudHJ5ICplbnRyeTsKKwlPaWQJCQlyZWxpZCA9 IFJlbGF0aW9uR2V0UmVsaWQocmVsYXRpb24pOwogCWJvb2wJCWFtX3BhcnRpdGlvbiA9IGdl dF9yZWxfcmVsaXNwYXJ0aXRpb24ocmVsaWQpOwogCWNoYXIJCXJlbGtpbmQgPSBnZXRfcmVs X3JlbGtpbmQocmVsaWQpOwogCWJvb2wJCWZvdW5kOwpAQCAtMTEzOSw4ICsxNDg3LDExIEBA IGdldF9yZWxfc3luY19lbnRyeShQR091dHB1dERhdGEgKmRhdGEsIE9pZCByZWxpZCkKIAkJ ZW50cnktPnNjaGVtYV9zZW50ID0gZmFsc2U7CiAJCWVudHJ5LT5zdHJlYW1lZF90eG5zID0g TklMOwogCQllbnRyeS0+cmVwbGljYXRlX3ZhbGlkID0gZmFsc2U7CisJCWVudHJ5LT5leHBy c3RhdGVfdmFsaWQgPSBmYWxzZTsKIAkJZW50cnktPnB1YmFjdGlvbnMucHViaW5zZXJ0ID0g ZW50cnktPnB1YmFjdGlvbnMucHVidXBkYXRlID0KIAkJCWVudHJ5LT5wdWJhY3Rpb25zLnB1 YmRlbGV0ZSA9IGVudHJ5LT5wdWJhY3Rpb25zLnB1YnRydW5jYXRlID0gZmFsc2U7CisJCWVu dHJ5LT5zY2FudHVwbGUgPSBOVUxMOworCQllbnRyeS0+ZXhwcnN0YXRlWzBdID0gZW50cnkt PmV4cHJzdGF0ZVsxXSA9IGVudHJ5LT5leHByc3RhdGVbMl0gPSBOVUxMOwogCQllbnRyeS0+ cHVibGlzaF9hc19yZWxpZCA9IEludmFsaWRPaWQ7CiAJCWVudHJ5LT5tYXAgPSBOVUxMOwkJ Lyogd2lsbCBiZSBzZXQgYnkgbWF5YmVfc2VuZF9zY2hlbWEoKSBpZgogCQkJCQkJCQkgKiBu ZWVkZWQgKi8KQEAgLTEyNDUsOSArMTU5Niw2IEBAIGdldF9yZWxfc3luY19lbnRyeShQR091 dHB1dERhdGEgKmRhdGEsIE9pZCByZWxpZCkKIAkJCQllbnRyeS0+cHViYWN0aW9ucy5wdWJ0 cnVuY2F0ZSB8PSBwdWItPnB1YmFjdGlvbnMucHVidHJ1bmNhdGU7CiAJCQl9CiAKLQkJCWlm IChlbnRyeS0+cHViYWN0aW9ucy5wdWJpbnNlcnQgJiYgZW50cnktPnB1YmFjdGlvbnMucHVi dXBkYXRlICYmCi0JCQkJZW50cnktPnB1YmFjdGlvbnMucHViZGVsZXRlICYmIGVudHJ5LT5w dWJhY3Rpb25zLnB1YnRydW5jYXRlKQotCQkJCWJyZWFrOwogCQl9CiAKIAkJbGlzdF9mcmVl KHB1Ymlkcyk7CkBAIC0xMzQwLDYgKzE2ODgsOCBAQCByZWxfc3luY19jYWNoZV9yZWxhdGlv bl9jYihEYXR1bSBhcmcsIE9pZCByZWxpZCkKIAkgKi8KIAlpZiAoZW50cnkgIT0gTlVMTCkK IAl7CisJCWludAkJCWk7CisKIAkJZW50cnktPnNjaGVtYV9zZW50ID0gZmFsc2U7CiAJCWxp c3RfZnJlZShlbnRyeS0+c3RyZWFtZWRfdHhucyk7CiAJCWVudHJ5LT5zdHJlYW1lZF90eG5z ID0gTklMOwpAQCAtMTM1NCw2ICsxNzA0LDI0IEBAIHJlbF9zeW5jX2NhY2hlX3JlbGF0aW9u X2NiKERhdHVtIGFyZywgT2lkIHJlbGlkKQogCQkJZnJlZV9jb252ZXJzaW9uX21hcChlbnRy eS0+bWFwKTsKIAkJfQogCQllbnRyeS0+bWFwID0gTlVMTDsKKworCQkvKgorCQkgKiBSb3cg ZmlsdGVyIGNhY2hlIGNsZWFudXBzCisJCSAqLworCQllbnRyeS0+ZXhwcnN0YXRlX3ZhbGlk ID0gZmFsc2U7CisJCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCisJCXsKKwkJCWlmIChlbnRy eS0+ZXhwcnN0YXRlW2ldICE9IE5VTEwpCisJCQl7CisJCQkJcGZyZWUoZW50cnktPmV4cHJz dGF0ZVtpXSk7CisJCQkJZW50cnktPmV4cHJzdGF0ZVtpXSA9IE5VTEw7CisJCQl9CisJCX0K KwkJaWYgKGVudHJ5LT5zY2FudHVwbGUgIT0gTlVMTCkKKwkJeworCQkJRXhlY0Ryb3BTaW5n bGVUdXBsZVRhYmxlU2xvdChlbnRyeS0+c2NhbnR1cGxlKTsKKwkJCWVudHJ5LT5zY2FudHVw bGUgPSBOVUxMOworCQl9CiAJfQogfQogCkBAIC0xMzY1LDYgKzE3MzMsNyBAQCByZWxfc3lu Y19jYWNoZV9wdWJsaWNhdGlvbl9jYihEYXR1bSBhcmcsIGludCBjYWNoZWlkLCB1aW50MzIg aGFzaHZhbHVlKQogewogCUhBU0hfU0VRX1NUQVRVUyBzdGF0dXM7CiAJUmVsYXRpb25TeW5j RW50cnkgKmVudHJ5OworCU1lbW9yeUNvbnRleHQgb2xkY3R4OwogCiAJLyoKIAkgKiBXZSBj YW4gZ2V0IGhlcmUgaWYgdGhlIHBsdWdpbiB3YXMgdXNlZCBpbiBTUUwgaW50ZXJmYWNlIGFz IHRoZQpAQCAtMTM3NCw2ICsxNzQzLDggQEAgcmVsX3N5bmNfY2FjaGVfcHVibGljYXRpb25f Y2IoRGF0dW0gYXJnLCBpbnQgY2FjaGVpZCwgdWludDMyIGhhc2h2YWx1ZSkKIAlpZiAoUmVs YXRpb25TeW5jQ2FjaGUgPT0gTlVMTCkKIAkJcmV0dXJuOwogCisJb2xkY3R4ID0gTWVtb3J5 Q29udGV4dFN3aXRjaFRvKENhY2hlTWVtb3J5Q29udGV4dCk7CisKIAkvKgogCSAqIFRoZXJl IGlzIG5vIHdheSB0byBmaW5kIHdoaWNoIGVudHJ5IGluIG91ciBjYWNoZSB0aGUgaGFzaCBi ZWxvbmdzIHRvIHNvCiAJICogbWFyayB0aGUgd2hvbGUgY2FjaGUgYXMgaW52YWxpZC4KQEAg LTEzOTIsNiArMTc2Myw4IEBAIHJlbF9zeW5jX2NhY2hlX3B1YmxpY2F0aW9uX2NiKERhdHVt IGFyZywgaW50IGNhY2hlaWQsIHVpbnQzMiBoYXNodmFsdWUpCiAJCWVudHJ5LT5wdWJhY3Rp b25zLnB1YmRlbGV0ZSA9IGZhbHNlOwogCQllbnRyeS0+cHViYWN0aW9ucy5wdWJ0cnVuY2F0 ZSA9IGZhbHNlOwogCX0KKworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjdHgpOwogfQog CiAvKiBTZW5kIFJlcGxpY2F0aW9uIG9yaWdpbiAqLwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9w Z19kdW1wL3BnX2R1bXAuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKaW5kZXggYzU5 MDAwM2YxOC4uNjk0OGVlMDYwMyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1 bXAuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCkBAIC00MjY1LDYgKzQyNjUs NyBAQCBnZXRQdWJsaWNhdGlvblRhYmxlcyhBcmNoaXZlICpmb3V0LCBUYWJsZUluZm8gdGJs aW5mb1tdLCBpbnQgbnVtVGFibGVzKQogCWludAkJCWlfb2lkOwogCWludAkJCWlfcHJwdWJp ZDsKIAlpbnQJCQlpX3BycmVsaWQ7CisJaW50CQkJaV9wcnJlbHF1YWw7CiAJaW50CQkJaSwK IAkJCQlqLAogCQkJCW50dXBzOwpAQCAtNDI3NSw5ICs0Mjc2LDE2IEBAIGdldFB1YmxpY2F0 aW9uVGFibGVzKEFyY2hpdmUgKmZvdXQsIFRhYmxlSW5mbyB0YmxpbmZvW10sIGludCBudW1U YWJsZXMpCiAJcXVlcnkgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOwogCiAJLyogQ29sbGVjdCBh bGwgcHVibGljYXRpb24gbWVtYmVyc2hpcCBpbmZvLiAqLwotCWFwcGVuZFBRRXhwQnVmZmVy U3RyKHF1ZXJ5LAotCQkJCQkJICJTRUxFQ1QgdGFibGVvaWQsIG9pZCwgcHJwdWJpZCwgcHJy ZWxpZCAiCi0JCQkJCQkgIkZST00gcGdfY2F0YWxvZy5wZ19wdWJsaWNhdGlvbl9yZWwiKTsK KwlpZiAoZm91dC0+cmVtb3RlVmVyc2lvbiA+PSAxNTAwMDApCisJCWFwcGVuZFBRRXhwQnVm ZmVyU3RyKHF1ZXJ5LAorCQkJCQkJCSAiU0VMRUNUIHRhYmxlb2lkLCBvaWQsIHBycHViaWQs IHBycmVsaWQsICIKKwkJCQkJCQkgInBnX2NhdGFsb2cucGdfZ2V0X2V4cHIocHJxdWFsLCBw cnJlbGlkKSBBUyBwcnJlbHF1YWwgIgorCQkJCQkJCSAiRlJPTSBwZ19jYXRhbG9nLnBnX3B1 YmxpY2F0aW9uX3JlbCIpOworCWVsc2UKKwkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnks CisJCQkJCQkJICJTRUxFQ1QgdGFibGVvaWQsIG9pZCwgcHJwdWJpZCwgcHJyZWxpZCwgIgor CQkJCQkJCSAiTlVMTCBBUyBwcnJlbHF1YWwgIgorCQkJCQkJCSAiRlJPTSBwZ19jYXRhbG9n LnBnX3B1YmxpY2F0aW9uX3JlbCIpOwogCXJlcyA9IEV4ZWN1dGVTcWxRdWVyeShmb3V0LCBx dWVyeS0+ZGF0YSwgUEdSRVNfVFVQTEVTX09LKTsKIAogCW50dXBzID0gUFFudHVwbGVzKHJl cyk7CkBAIC00Mjg2LDYgKzQyOTQsNyBAQCBnZXRQdWJsaWNhdGlvblRhYmxlcyhBcmNoaXZl ICpmb3V0LCBUYWJsZUluZm8gdGJsaW5mb1tdLCBpbnQgbnVtVGFibGVzKQogCWlfb2lkID0g UFFmbnVtYmVyKHJlcywgIm9pZCIpOwogCWlfcHJwdWJpZCA9IFBRZm51bWJlcihyZXMsICJw cnB1YmlkIik7CiAJaV9wcnJlbGlkID0gUFFmbnVtYmVyKHJlcywgInBycmVsaWQiKTsKKwlp X3BycmVscXVhbCA9IFBRZm51bWJlcihyZXMsICJwcnJlbHF1YWwiKTsKIAogCS8qIHRoaXMg YWxsb2NhdGlvbiBtYXkgYmUgbW9yZSB0aGFuIHdlIG5lZWQgKi8KIAlwdWJyaW5mbyA9IHBn X21hbGxvYyhudHVwcyAqIHNpemVvZihQdWJsaWNhdGlvblJlbEluZm8pKTsKQEAgLTQzMjYs NiArNDMzNSwxMCBAQCBnZXRQdWJsaWNhdGlvblRhYmxlcyhBcmNoaXZlICpmb3V0LCBUYWJs ZUluZm8gdGJsaW5mb1tdLCBpbnQgbnVtVGFibGVzKQogCQlwdWJyaW5mb1tqXS5kb2JqLm5h bWUgPSB0YmluZm8tPmRvYmoubmFtZTsKIAkJcHVicmluZm9bal0ucHVibGljYXRpb24gPSBw dWJpbmZvOwogCQlwdWJyaW5mb1tqXS5wdWJ0YWJsZSA9IHRiaW5mbzsKKwkJaWYgKFBRZ2V0 aXNudWxsKHJlcywgaSwgaV9wcnJlbHF1YWwpKQorCQkJcHVicmluZm9bal0ucHVicmVscXVh bCA9IE5VTEw7CisJCWVsc2UKKwkJCXB1YnJpbmZvW2pdLnB1YnJlbHF1YWwgPSBwZ19zdHJk dXAoUFFnZXR2YWx1ZShyZXMsIGksIGlfcHJyZWxxdWFsKSk7CiAKIAkJLyogRGVjaWRlIHdo ZXRoZXIgd2Ugd2FudCB0byBkdW1wIGl0ICovCiAJCXNlbGVjdER1bXBhYmxlUHVibGljYXRp b25PYmplY3QoJihwdWJyaW5mb1tqXS5kb2JqKSwgZm91dCk7CkBAIC00Mzk2LDggKzQ0MDks MTEgQEAgZHVtcFB1YmxpY2F0aW9uVGFibGUoQXJjaGl2ZSAqZm91dCwgY29uc3QgUHVibGlj YXRpb25SZWxJbmZvICpwdWJyaW5mbykKIAogCWFwcGVuZFBRRXhwQnVmZmVyKHF1ZXJ5LCAi QUxURVIgUFVCTElDQVRJT04gJXMgQUREIFRBQkxFIE9OTFkiLAogCQkJCQkgIGZtdElkKHB1 YmluZm8tPmRvYmoubmFtZSkpOwotCWFwcGVuZFBRRXhwQnVmZmVyKHF1ZXJ5LCAiICVzO1xu IiwKKwlhcHBlbmRQUUV4cEJ1ZmZlcihxdWVyeSwgIiAlcyIsCiAJCQkJCSAgZm10UXVhbGlm aWVkRHVtcGFibGUodGJpbmZvKSk7CisJaWYgKHB1YnJpbmZvLT5wdWJyZWxxdWFsKQorCQlh cHBlbmRQUUV4cEJ1ZmZlcihxdWVyeSwgIiBXSEVSRSAlcyIsIHB1YnJpbmZvLT5wdWJyZWxx dWFsKTsKKwlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgIjtcbiIpOwogCiAJLyoKIAkg KiBUaGVyZSBpcyBubyBwb2ludCBpbiBjcmVhdGluZyBhIGRyb3AgcXVlcnkgYXMgdGhlIGRy b3AgaXMgZG9uZSBieSB0YWJsZQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1 bXAuaCBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmgKaW5kZXggZDFkODYwOGU5Yy4uMDg0 MmEzYzkzNiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuaAorKysgYi9z cmMvYmluL3BnX2R1bXAvcGdfZHVtcC5oCkBAIC02MzAsNiArNjMwLDcgQEAgdHlwZWRlZiBz dHJ1Y3QgX1B1YmxpY2F0aW9uUmVsSW5mbwogCUR1bXBhYmxlT2JqZWN0IGRvYmo7CiAJUHVi bGljYXRpb25JbmZvICpwdWJsaWNhdGlvbjsKIAlUYWJsZUluZm8gICpwdWJ0YWJsZTsKKwlj aGFyCSAgICpwdWJyZWxxdWFsOwogfSBQdWJsaWNhdGlvblJlbEluZm87CiAKIC8qCmRpZmYg LS1naXQgYS9zcmMvYmluL3BzcWwvZGVzY3JpYmUuYyBiL3NyYy9iaW4vcHNxbC9kZXNjcmli ZS5jCmluZGV4IGVhNzIxZDk2M2EuLmZiNWNmYzUxMGYgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4v cHNxbC9kZXNjcmliZS5jCisrKyBiL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jCkBAIC0zMTUw LDE3ICszMTUwLDIxIEBAIGRlc2NyaWJlT25lVGFibGVEZXRhaWxzKGNvbnN0IGNoYXIgKnNj aGVtYW5hbWUsCiAJCQl7CiAJCQkJcHJpbnRmUFFFeHBCdWZmZXIoJmJ1ZiwKIAkJCQkJCQkJ ICAiU0VMRUNUIHB1Ym5hbWVcbiIKKwkJCQkJCQkJICAiCQksIE5VTExcbiIKIAkJCQkJCQkJ ICAiRlJPTSBwZ19jYXRhbG9nLnBnX3B1YmxpY2F0aW9uIHBcbiIKIAkJCQkJCQkJICAiCQlK T0lOIHBnX2NhdGFsb2cucGdfcHVibGljYXRpb25fbmFtZXNwYWNlIHBuIE9OIHAub2lkID0g cG4ucG5wdWJpZFxuIgogCQkJCQkJCQkgICIJCUpPSU4gcGdfY2F0YWxvZy5wZ19jbGFzcyBw YyBPTiBwYy5yZWxuYW1lc3BhY2UgPSBwbi5wbm5zcGlkXG4iCiAJCQkJCQkJCSAgIldIRVJF IHBjLm9pZCA9JyVzJyBhbmQgcGdfY2F0YWxvZy5wZ19yZWxhdGlvbl9pc19wdWJsaXNoYWJs ZSgnJXMnKVxuIgogCQkJCQkJCQkgICJVTklPTlxuIgogCQkJCQkJCQkgICJTRUxFQ1QgcHVi bmFtZVxuIgorCQkJCQkJCQkgICIJCSwgcGdfZ2V0X2V4cHIocHIucHJxdWFsLCBjLm9pZClc biIKIAkJCQkJCQkJICAiRlJPTSBwZ19jYXRhbG9nLnBnX3B1YmxpY2F0aW9uIHBcbiIKIAkJ CQkJCQkJICAiCQlKT0lOIHBnX2NhdGFsb2cucGdfcHVibGljYXRpb25fcmVsIHByIE9OIHAu b2lkID0gcHIucHJwdWJpZFxuIgorCQkJCQkJCQkgICIJCUpPSU4gcGdfY2F0YWxvZy5wZ19j bGFzcyBjIE9OIGMub2lkID0gcHIucHJyZWxpZFxuIgogCQkJCQkJCQkgICJXSEVSRSBwci5w cnJlbGlkID0gJyVzJ1xuIgogCQkJCQkJCQkgICJVTklPTlxuIgogCQkJCQkJCQkgICJTRUxF Q1QgcHVibmFtZVxuIgorCQkJCQkJCQkgICIJCSwgTlVMTFxuIgogCQkJCQkJCQkgICJGUk9N IHBnX2NhdGFsb2cucGdfcHVibGljYXRpb24gcFxuIgogCQkJCQkJCQkgICJXSEVSRSBwLnB1 YmFsbHRhYmxlcyBBTkQgcGdfY2F0YWxvZy5wZ19yZWxhdGlvbl9pc19wdWJsaXNoYWJsZSgn JXMnKVxuIgogCQkJCQkJCQkgICJPUkRFUiBCWSAxOyIsCkBAIC0zMTk2LDYgKzMyMDAsMTMg QEAgZGVzY3JpYmVPbmVUYWJsZURldGFpbHMoY29uc3QgY2hhciAqc2NoZW1hbmFtZSwKIAkJ CQlwcmludGZQUUV4cEJ1ZmZlcigmYnVmLCAiICAgIFwiJXNcIiIsCiAJCQkJCQkJCSAgUFFn ZXR2YWx1ZShyZXN1bHQsIGksIDApKTsKIAorCQkJCS8qIHJvdyBmaWx0ZXIgKGlmIGFueSkg Ki8KKwkJCQlpZiAocHNldC5zdmVyc2lvbiA+PSAxNTAwMDApCisJCQkJeworCQkJCQlpZiAo IVBRZ2V0aXNudWxsKHJlc3VsdCwgaSwgMSkpCisJCQkJCQlhcHBlbmRQUUV4cEJ1ZmZlcigm YnVmLCAiIFdIRVJFICVzIiwgUFFnZXR2YWx1ZShyZXN1bHQsIGksIDEpKTsKKwkJCQl9CisK IAkJCQlwcmludFRhYmxlQWRkRm9vdGVyKCZjb250LCBidWYuZGF0YSk7CiAJCQl9CiAJCQlQ UWNsZWFyKHJlc3VsdCk7CkBAIC02MzIwLDggKzYzMzEsMTIgQEAgYWRkRm9vdGVyVG9QdWJs aWNhdGlvbkRlc2MoUFFFeHBCdWZmZXIgYnVmLCBjaGFyICpmb290ZXJtc2csCiAJZm9yIChp ID0gMDsgaSA8IGNvdW50OyBpKyspCiAJewogCQlpZiAoIXNpbmdsZWNvbCkKKwkJewogCQkJ cHJpbnRmUFFFeHBCdWZmZXIoYnVmLCAiICAgIFwiJXMuJXNcIiIsIFBRZ2V0dmFsdWUocmVz LCBpLCAwKSwKIAkJCQkJCQkgIFBRZ2V0dmFsdWUocmVzLCBpLCAxKSk7CisJCQlpZiAoIVBR Z2V0aXNudWxsKHJlcywgaSwgMikpCisJCQkJYXBwZW5kUFFFeHBCdWZmZXIoYnVmLCAiIFdI RVJFICVzIiwgUFFnZXR2YWx1ZShyZXMsIGksIDIpKTsKKwkJfQogCQllbHNlCiAJCQlwcmlu dGZQUUV4cEJ1ZmZlcihidWYsICIgICAgXCIlc1wiIiwgUFFnZXR2YWx1ZShyZXMsIGksIDAp KTsKIApAQCAtNjQ1MCw4ICs2NDY1LDE1IEBAIGRlc2NyaWJlUHVibGljYXRpb25zKGNvbnN0 IGNoYXIgKnBhdHRlcm4pCiAJCXsKIAkJCS8qIEdldCB0aGUgdGFibGVzIGZvciB0aGUgc3Bl Y2lmaWVkIHB1YmxpY2F0aW9uICovCiAJCQlwcmludGZQUUV4cEJ1ZmZlcigmYnVmLAotCQkJ CQkJCSAgIlNFTEVDVCBuLm5zcG5hbWUsIGMucmVsbmFtZVxuIgotCQkJCQkJCSAgIkZST00g cGdfY2F0YWxvZy5wZ19jbGFzcyBjLFxuIgorCQkJCQkJCSAgIlNFTEVDVCBuLm5zcG5hbWUs IGMucmVsbmFtZSIpOworCQkJaWYgKHBzZXQuc3ZlcnNpb24gPj0gMTUwMDAwKQorCQkJCWFw cGVuZFBRRXhwQnVmZmVyU3RyKCZidWYsCisJCQkJCQkJCQkgIiwgcGdfZ2V0X2V4cHIocHIu cHJxdWFsLCBjLm9pZCkiKTsKKwkJCWVsc2UKKwkJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigm YnVmLAorCQkJCQkJCQkJICIsIE5VTEwiKTsKKwkJCWFwcGVuZFBRRXhwQnVmZmVyKCZidWYs CisJCQkJCQkJICAiXG5GUk9NIHBnX2NhdGFsb2cucGdfY2xhc3MgYyxcbiIKIAkJCQkJCQkg ICIgICAgIHBnX2NhdGFsb2cucGdfbmFtZXNwYWNlIG4sXG4iCiAJCQkJCQkJICAiICAgICBw Z19jYXRhbG9nLnBnX3B1YmxpY2F0aW9uX3JlbCBwclxuIgogCQkJCQkJCSAgIldIRVJFIGMu cmVsbmFtZXNwYWNlID0gbi5vaWRcbiIKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcHNxbC90YWIt Y29tcGxldGUuYyBiL3NyYy9iaW4vcHNxbC90YWItY29tcGxldGUuYwppbmRleCAyZjQxMmNh M2RiLi5lMWJlMjU0YjlhIDEwMDY0NAotLS0gYS9zcmMvYmluL3BzcWwvdGFiLWNvbXBsZXRl LmMKKysrIGIvc3JjL2Jpbi9wc3FsL3RhYi1jb21wbGV0ZS5jCkBAIC0xNjU0LDYgKzE2NTQs MjIgQEAgcHNxbF9jb21wbGV0aW9uKGNvbnN0IGNoYXIgKnRleHQsIGludCBzdGFydCwgaW50 IGVuZCkKIAkvKiBBTFRFUiBQVUJMSUNBVElPTiA8bmFtZT4gU0VUICovCiAJZWxzZSBpZiAo TWF0Y2hlcygiQUxURVIiLCAiUFVCTElDQVRJT04iLCBNYXRjaEFueSwgIlNFVCIpKQogCQlD T01QTEVURV9XSVRIKCIoIiwgIkFMTCBUQUJMRVMgSU4gU0NIRU1BIiwgIlRBQkxFIik7CisJ LyogQUxURVIgUFVCTElDQVRJT04gPG5hbWU+IFNFVCBUQUJMRSA8bmFtZT4gKi8KKwkvKiBB TFRFUiBQVUJMSUNBVElPTiA8bmFtZT4gQUREIFRBQkxFIDxuYW1lPiAqLworCWVsc2UgaWYg KE1hdGNoZXMoIkFMVEVSIiwgIlBVQkxJQ0FUSU9OIiwgTWF0Y2hBbnksICJTRVR8QUREIiwg IlRBQkxFIiwgTWF0Y2hBbnkpICYmICFlbmRzX3dpdGgocHJldl93ZCwgJywnKSkKKwkJQ09N UExFVEVfV0lUSCgiV0hFUkUgKCIpOworCisJLyoKKwkgKiAiQUxURVIgUFVCTElDQVRJT04g PG5hbWU+IFNFVCBUQUJMRSA8bmFtZT4gV0hFUkUgKCIgLSBjb21wbGV0ZSB3aXRoCisJICog dGFibGUgYXR0cmlidXRlcworCSAqLworCisJLyoKKwkgKiAiQUxURVIgUFVCTElDQVRJT04g PG5hbWU+IEFERCBUQUJMRSA8bmFtZT4gV0hFUkUgKCIgLSBjb21wbGV0ZSB3aXRoCisJICog dGFibGUgYXR0cmlidXRlcworCSAqLworCWVsc2UgaWYgKEhlYWRNYXRjaGVzKCJBTFRFUiIs ICJQVUJMSUNBVElPTiIsIE1hdGNoQW55KSAmJiBUYWlsTWF0Y2hlcygiV0hFUkUiLCAiKCIp KQorCQlDT01QTEVURV9XSVRIX0FUVFIocHJldjNfd2QsICIiKTsKIAllbHNlIGlmIChNYXRj aGVzKCJBTFRFUiIsICJQVUJMSUNBVElPTiIsIE1hdGNoQW55LCAiQUREfERST1B8U0VUIiwg IkFMTCIsICJUQUJMRVMiLCAiSU4iLCAiU0NIRU1BIikpCiAJCUNPTVBMRVRFX1dJVEhfUVVF UlkoUXVlcnlfZm9yX2xpc3Rfb2Zfc2NoZW1hcwogCQkJCQkJCSIgQU5EIG5zcG5hbWUgIT0g J3BnX2NhdGFsb2cnICIKQEAgLTI3NzcsMTIgKzI3OTMsMTkgQEAgcHNxbF9jb21wbGV0aW9u KGNvbnN0IGNoYXIgKnRleHQsIGludCBzdGFydCwgaW50IGVuZCkKIAkJQ09NUExFVEVfV0lU SCgiVEFCTEVTIiwgIlRBQkxFUyBJTiBTQ0hFTUEiKTsKIAllbHNlIGlmIChNYXRjaGVzKCJD UkVBVEUiLCAiUFVCTElDQVRJT04iLCBNYXRjaEFueSwgIkZPUiIsICJBTEwiLCAiVEFCTEVT IikpCiAJCUNPTVBMRVRFX1dJVEgoIklOIFNDSEVNQSIsICJXSVRIICgiKTsKLQllbHNlIGlm IChNYXRjaGVzKCJDUkVBVEUiLCAiUFVCTElDQVRJT04iLCBNYXRjaEFueSwgIkZPUiIsICJU QUJMRSIsIE1hdGNoQW55KSkKLQkJQ09NUExFVEVfV0lUSCgiV0lUSCAoIik7CisJZWxzZSBp ZiAoTWF0Y2hlcygiQ1JFQVRFIiwgIlBVQkxJQ0FUSU9OIiwgTWF0Y2hBbnksICJGT1IiLCAi VEFCTEUiLCBNYXRjaEFueSkgJiYgIWVuZHNfd2l0aChwcmV2X3dkLCAnLCcpKQorCQlDT01Q TEVURV9XSVRIKCJXSEVSRSAoIiwgIldJVEggKCIpOwogCS8qIENvbXBsZXRlICJDUkVBVEUg UFVCTElDQVRJT04gPG5hbWU+IEZPUiBUQUJMRSIgd2l0aCAiPHRhYmxlPiwgLi4uIiAqLwog CWVsc2UgaWYgKE1hdGNoZXMoIkNSRUFURSIsICJQVUJMSUNBVElPTiIsIE1hdGNoQW55LCAi Rk9SIiwgIlRBQkxFIikpCiAJCUNPTVBMRVRFX1dJVEhfU0NIRU1BX1FVRVJZKFF1ZXJ5X2Zv cl9saXN0X29mX3RhYmxlcywgTlVMTCk7CiAKKwkvKgorCSAqICJDUkVBVEUgUFVCTElDQVRJ T04gPG5hbWU+IEZPUiBUQUJMRSA8bmFtZT4gV0hFUkUgKCIgLSBjb21wbGV0ZSB3aXRoCisJ ICogdGFibGUgYXR0cmlidXRlcworCSAqLworCWVsc2UgaWYgKEhlYWRNYXRjaGVzKCJDUkVB VEUiLCAiUFVCTElDQVRJT04iLCBNYXRjaEFueSkgJiYgVGFpbE1hdGNoZXMoIldIRVJFIiwg IigiKSkKKwkJQ09NUExFVEVfV0lUSF9BVFRSKHByZXYzX3dkLCAiIik7CisKIAkvKgogCSAq IENvbXBsZXRlICJDUkVBVEUgUFVCTElDQVRJT04gPG5hbWU+IEZPUiBBTEwgVEFCTEVTIElO IFNDSEVNQSA8c2NoZW1hPiwKIAkgKiAuLi4iCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9j YXRhbG9nL3BnX3B1YmxpY2F0aW9uLmggYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1Ymxp Y2F0aW9uLmgKaW5kZXggMWFlNDM5ZTZmMy4uZmEyM2YwOWQ2OSAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oCisrKyBiL3NyYy9pbmNsdWRlL2Nh dGFsb2cvcGdfcHVibGljYXRpb24uaApAQCAtODYsNiArODYsNyBAQCB0eXBlZGVmIHN0cnVj dCBQdWJsaWNhdGlvbgogdHlwZWRlZiBzdHJ1Y3QgUHVibGljYXRpb25SZWxJbmZvCiB7CiAJ UmVsYXRpb24JcmVsYXRpb247CisJTm9kZQkgICAqd2hlcmVDbGF1c2U7CiB9IFB1YmxpY2F0 aW9uUmVsSW5mbzsKIAogZXh0ZXJuIFB1YmxpY2F0aW9uICpHZXRQdWJsaWNhdGlvbihPaWQg cHViaWQpOwpAQCAtMTIyLDcgKzEyMyw3IEBAIGV4dGVybiBMaXN0ICpHZXRQdWJQYXJ0aXRp b25PcHRpb25SZWxhdGlvbnMoTGlzdCAqcmVzdWx0LAogCQkJCQkJCQkJCQlPaWQgcmVsaWQp OwogCiBleHRlcm4gYm9vbCBpc19wdWJsaXNoYWJsZV9yZWxhdGlvbihSZWxhdGlvbiByZWwp OwotZXh0ZXJuIE9iamVjdEFkZHJlc3MgcHVibGljYXRpb25fYWRkX3JlbGF0aW9uKE9pZCBw dWJpZCwgUHVibGljYXRpb25SZWxJbmZvICp0YXJnZXRyZWwsCitleHRlcm4gT2JqZWN0QWRk cmVzcyBwdWJsaWNhdGlvbl9hZGRfcmVsYXRpb24oT2lkIHB1YmlkLCBQdWJsaWNhdGlvblJl bEluZm8gKnByaSwKIAkJCQkJCQkJCQkJICBib29sIGlmX25vdF9leGlzdHMpOwogZXh0ZXJu IE9iamVjdEFkZHJlc3MgcHVibGljYXRpb25fYWRkX3NjaGVtYShPaWQgcHViaWQsIE9pZCBz Y2hlbWFpZCwKIAkJCQkJCQkJCQkJYm9vbCBpZl9ub3RfZXhpc3RzKTsKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHVibGljYXRpb25fcmVsLmggYi9zcmMvaW5jbHVk ZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uX3JlbC5oCmluZGV4IGI1ZDU1MDRjYmIuLjE1NGJi NjE3NzcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHVibGljYXRpb25f cmVsLmgKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbl9yZWwuaApA QCAtMzEsNiArMzEsMTAgQEAgQ0FUQUxPRyhwZ19wdWJsaWNhdGlvbl9yZWwsNjEwNixQdWJs aWNhdGlvblJlbFJlbGF0aW9uSWQpCiAJT2lkCQkJb2lkOwkJCS8qIG9pZCAqLwogCU9pZAkJ CXBycHViaWQgQktJX0xPT0tVUChwZ19wdWJsaWNhdGlvbik7IC8qIE9pZCBvZiB0aGUgcHVi bGljYXRpb24gKi8KIAlPaWQJCQlwcnJlbGlkIEJLSV9MT09LVVAocGdfY2xhc3MpOwkvKiBP aWQgb2YgdGhlIHJlbGF0aW9uICovCisKKyNpZmRlZglDQVRBTE9HX1ZBUkxFTgkJCS8qIHZh cmlhYmxlLWxlbmd0aCBmaWVsZHMgc3RhcnQgaGVyZSAqLworCXBnX25vZGVfdHJlZSBwcnF1 YWw7CQkvKiBxdWFsaWZpY2F0aW9ucyAqLworI2VuZGlmCiB9IEZvcm1EYXRhX3BnX3B1Ymxp Y2F0aW9uX3JlbDsKIAogLyogLS0tLS0tLS0tLS0tLS0tLQpAQCAtNDAsNiArNDQsOCBAQCBD QVRBTE9HKHBnX3B1YmxpY2F0aW9uX3JlbCw2MTA2LFB1YmxpY2F0aW9uUmVsUmVsYXRpb25J ZCkKICAqLwogdHlwZWRlZiBGb3JtRGF0YV9wZ19wdWJsaWNhdGlvbl9yZWwgKkZvcm1fcGdf cHVibGljYXRpb25fcmVsOwogCitERUNMQVJFX1RPQVNUKHBnX3B1YmxpY2F0aW9uX3JlbCwg ODI4NywgODI4OCk7CisKIERFQ0xBUkVfVU5JUVVFX0lOREVYX1BLRVkocGdfcHVibGljYXRp b25fcmVsX29pZF9pbmRleCwgNjExMiwgUHVibGljYXRpb25SZWxPYmplY3RJbmRleElkLCBv biBwZ19wdWJsaWNhdGlvbl9yZWwgdXNpbmcgYnRyZWUob2lkIG9pZF9vcHMpKTsKIERFQ0xB UkVfVU5JUVVFX0lOREVYKHBnX3B1YmxpY2F0aW9uX3JlbF9wcnJlbGlkX3BycHViaWRfaW5k ZXgsIDYxMTMsIFB1YmxpY2F0aW9uUmVsUHJyZWxpZFBycHViaWRJbmRleElkLCBvbiBwZ19w dWJsaWNhdGlvbl9yZWwgdXNpbmcgYnRyZWUocHJyZWxpZCBvaWRfb3BzLCBwcnB1YmlkIG9p ZF9vcHMpKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5o IGIvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCmluZGV4IDA2NzEzOGU2YjUuLmIz OGU2NjMzZmIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaAor KysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgKQEAgLTM2NDEsNiArMzY0MSw3 IEBAIHR5cGVkZWYgc3RydWN0IFB1YmxpY2F0aW9uVGFibGUKIHsKIAlOb2RlVGFnCQl0eXBl OwogCVJhbmdlVmFyICAgKnJlbGF0aW9uOwkJLyogcmVsYXRpb24gdG8gYmUgcHVibGlzaGVk ICovCisJTm9kZQkgICAqd2hlcmVDbGF1c2U7CS8qIHF1YWxpZmljYXRpb25zICovCiB9IFB1 YmxpY2F0aW9uVGFibGU7CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9wYXJzZXIv cGFyc2Vfbm9kZS5oIGIvc3JjL2luY2x1ZGUvcGFyc2VyL3BhcnNlX25vZGUuaAppbmRleCBl ZTE3OTA4MmNlLi5kNThhZTZhNjNmIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9wYXJzZXIv cGFyc2Vfbm9kZS5oCisrKyBiL3NyYy9pbmNsdWRlL3BhcnNlci9wYXJzZV9ub2RlLmgKQEAg LTgwLDYgKzgwLDcgQEAgdHlwZWRlZiBlbnVtIFBhcnNlRXhwcktpbmQKIAlFWFBSX0tJTkRf Q09QWV9XSEVSRSwJCS8qIFdIRVJFIGNvbmRpdGlvbiBpbiBDT1BZIEZST00gKi8KIAlFWFBS X0tJTkRfR0VORVJBVEVEX0NPTFVNTiwgLyogZ2VuZXJhdGlvbiBleHByZXNzaW9uIGZvciBh IGNvbHVtbiAqLwogCUVYUFJfS0lORF9DWUNMRV9NQVJLLAkJLyogY3ljbGUgbWFyayB2YWx1 ZSAqLworCUVYUFJfS0lORF9QVUJMSUNBVElPTl9XSEVSRSAvKiBXSEVSRSBjb25kaXRpb24g Zm9yIGEgdGFibGUgaW4gUFVCTElDQVRJT04gKi8KIH0gUGFyc2VFeHByS2luZDsKIAogCmRp ZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dCBi L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0CmluZGV4IDFmZWI1 NTg5NjguLjNiZjc5NTc1NmIgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvcHVibGljYXRpb24ub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVi bGljYXRpb24ub3V0CkBAIC0yMzksNiArMjM5LDE3MyBAQCBBTFRFUiBQVUJMSUNBVElPTiB0 ZXN0cHViX2ZvcnBhcnRlZCBEUk9QIFRBQkxFIHRlc3RwdWJfcGFydGVkOwogVVBEQVRFIHRl c3RwdWJfcGFydGVkMiBTRVQgYSA9IDI7CiBEUk9QIFRBQkxFIHRlc3RwdWJfcGFydGVkMSwg dGVzdHB1Yl9wYXJ0ZWQyOwogRFJPUCBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnBhcnRlZCwg dGVzdHB1Yl9mb3JwYXJ0ZWQxOworQ1JFQVRFIFRBQkxFIHRlc3RwdWJfcmZfdGJsMSAoYSBp bnRlZ2VyLCBiIHRleHQpOworQ1JFQVRFIFRBQkxFIHRlc3RwdWJfcmZfdGJsMiAoYyB0ZXh0 LCBkIGludGVnZXIpOworQ1JFQVRFIFRBQkxFIHRlc3RwdWJfcmZfdGJsMyAoZSBpbnRlZ2Vy KTsKK0NSRUFURSBUQUJMRSB0ZXN0cHViX3JmX3RibDQgKGcgdGV4dCk7CitDUkVBVEUgVEFC TEUgdGVzdHB1Yl9yZl90Ymw1IChhIHhtbCk7CitDUkVBVEUgU0NIRU1BIHRlc3RwdWJfcmZf c2NoZW1hMTsKK0NSRUFURSBUQUJMRSB0ZXN0cHViX3JmX3NjaGVtYTEudGVzdHB1Yl9yZl90 Ymw1IChoIGludGVnZXIpOworQ1JFQVRFIFNDSEVNQSB0ZXN0cHViX3JmX3NjaGVtYTI7CitD UkVBVEUgVEFCTEUgdGVzdHB1Yl9yZl9zY2hlbWEyLnRlc3RwdWJfcmZfdGIxNiAoaSBpbnRl Z2VyKTsKK1NFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKK0NSRUFURSBQVUJM SUNBVElPTiB0ZXN0cHViNSBGT1IgVEFCTEUgdGVzdHB1Yl9yZl90YmwxLCB0ZXN0cHViX3Jm X3RibDIgV0hFUkUgKGMgPD4gJ3Rlc3QnIEFORCBkIDwgNSkgV0lUSCAocHVibGlzaCA9ICdp bnNlcnQnKTsKK1JFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CitcZFJwKyB0ZXN0cHViNQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1 YjUKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNl ciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAg ICAgfCBmCitUYWJsZXM6CisgICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDEiCisgICAgInB1 YmxpYy50ZXN0cHViX3JmX3RibDIiIFdIRVJFICgoYyA8PiAndGVzdCc6OnRleHQpIEFORCAo ZCA8IDUpKQorCitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNSBBREQgVEFCTEUgdGVzdHB1 Yl9yZl90YmwzIFdIRVJFIChlID4gMTAwMCBBTkQgZSA8IDIwMDApOworXGRScCsgdGVzdHB1 YjUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRl c3RwdWI1CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2Vy dHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9u X3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAg ICAgICAgIHwgZgorVGFibGVzOgorICAgICJwdWJsaWMudGVzdHB1Yl9yZl90YmwxIgorICAg ICJwdWJsaWMudGVzdHB1Yl9yZl90YmwyIiBXSEVSRSAoKGMgPD4gJ3Rlc3QnOjp0ZXh0KSBB TkQgKGQgPCA1KSkKKyAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMyIgV0hFUkUgKChlID4g MTAwMCkgQU5EIChlIDwgMjAwMCkpCisKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI1IERS T1AgVEFCTEUgdGVzdHB1Yl9yZl90YmwyOworXGRScCsgdGVzdHB1YjUKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI1CisgICAgICAg ICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwg RGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAg ICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgorVGFi bGVzOgorICAgICJwdWJsaWMudGVzdHB1Yl9yZl90YmwxIgorICAgICJwdWJsaWMudGVzdHB1 Yl9yZl90YmwzIiBXSEVSRSAoKGUgPiAxMDAwKSBBTkQgKGUgPCAyMDAwKSkKKworLS0gcmVt b3ZlIHRlc3RwdWJfcmZfdGJsMSBhbmQgYWRkIHRlc3RwdWJfcmZfdGJsMyBhZ2FpbiAoYW5v dGhlciBXSEVSRSBleHByZXNzaW9uKQorQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjUgU0VU IFRBQkxFIHRlc3RwdWJfcmZfdGJsMyBXSEVSRSAoZSA+IDMwMCBBTkQgZSA8IDUwMCk7Citc ZFJwKyB0ZXN0cHViNQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVi bGljYXRpb24gdGVzdHB1YjUKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3Nf cHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYg ICAgICAgfCBmICAgICAgICAgfCBmCitUYWJsZXM6CisgICAgInB1YmxpYy50ZXN0cHViX3Jm X3RibDMiIFdIRVJFICgoZSA+IDMwMCkgQU5EIChlIDwgNTAwKSkKKworLS0gdGVzdCBcZCsg KG5vdyBpdCBkaXNwbGF5cyBmaWx0ZXIgaW5mb3JtYXRpb24pCitTRVQgY2xpZW50X21pbl9t ZXNzYWdlcyA9ICdFUlJPUic7CitDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjVhIEZPUiBU QUJMRSB0ZXN0cHViX3JmX3RibDEgV0hFUkUgKGEgPiAxKSBXSVRIIChwdWJsaXNoID0gJ2lu c2VydCcpOworQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWI1YiBGT1IgVEFCTEUgdGVzdHB1 Yl9yZl90YmwxOworQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWI1YyBGT1IgVEFCTEUgdGVz dHB1Yl9yZl90YmwxIFdIRVJFIChhID4gMykgV0lUSCAocHVibGlzaCA9ICdpbnNlcnQnKTsK K1JFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CitcZCsgdGVzdHB1Yl9yZl90YmwxCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBUYWJsZSAicHVibGljLnRlc3RwdWJfcmZfdGJs MSIKKyBDb2x1bW4gfCAgVHlwZSAgIHwgQ29sbGF0aW9uIHwgTnVsbGFibGUgfCBEZWZhdWx0 IHwgU3RvcmFnZSAgfCBTdGF0cyB0YXJnZXQgfCBEZXNjcmlwdGlvbiAKKy0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0KKyBhICAgICAgfCBpbnRlZ2VyIHwgICAgICAg ICAgIHwgICAgICAgICAgfCAgICAgICAgIHwgcGxhaW4gICAgfCAgICAgICAgICAgICAgfCAK KyBiICAgICAgfCB0ZXh0ICAgIHwgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICAgIHwg ZXh0ZW5kZWQgfCAgICAgICAgICAgICAgfCAKK1B1YmxpY2F0aW9uczoKKyAgICAidGVzdHB1 YjVhIiBXSEVSRSAoYSA+IDEpCisgICAgInRlc3RwdWI1YiIKKyAgICAidGVzdHB1YjVjIiBX SEVSRSAoYSA+IDMpCisKK0RST1AgUFVCTElDQVRJT04gdGVzdHB1YjVhLCB0ZXN0cHViNWIs IHRlc3RwdWI1YzsKKy0tIHNvbWUgbW9yZSBzeW50YXggdGVzdHMgdG8gZXhlcmNpc2Ugb3Ro ZXIgcGFyc2VyIHBhdGh3YXlzCitTRVQgY2xpZW50X21pbl9tZXNzYWdlcyA9ICdFUlJPUic7 CitDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl9zeW50YXgxIEZPUiBUQUJMRSB0ZXN0cHVi X3JmX3RibDEsIE9OTFkgdGVzdHB1Yl9yZl90YmwzIFdIRVJFIChlIDwgOTk5KSBXSVRIIChw dWJsaXNoID0gJ2luc2VydCcpOworUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKK1xkUnAr IHRlc3RwdWJfc3ludGF4MQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJs aWNhdGlvbiB0ZXN0cHViX3N5bnRheDEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJl Z3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAg ICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCitUYWJsZXM6CisgICAgInB1YmxpYy50ZXN0 cHViX3JmX3RibDEiCisgICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDMiIFdIRVJFIChlIDwg OTk5KQorCitEUk9QIFBVQkxJQ0FUSU9OIHRlc3RwdWJfc3ludGF4MTsKK1NFVCBjbGllbnRf bWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKK0NSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX3N5 bnRheDIgRk9SIFRBQkxFIHRlc3RwdWJfcmZfdGJsMSwgdGVzdHB1Yl9yZl9zY2hlbWExLnRl c3RwdWJfcmZfdGJsNSBXSEVSRSAoaCA8IDk5OSkgV0lUSCAocHVibGlzaCA9ICdpbnNlcnQn KTsKK1JFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CitcZFJwKyB0ZXN0cHViX3N5bnRheDIK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9z eW50YXgyCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2Vy dHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9u X3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAg ICAgICAgIHwgZgorVGFibGVzOgorICAgICJwdWJsaWMudGVzdHB1Yl9yZl90YmwxIgorICAg ICJ0ZXN0cHViX3JmX3NjaGVtYTEudGVzdHB1Yl9yZl90Ymw1IiBXSEVSRSAoaCA8IDk5OSkK KworRFJPUCBQVUJMSUNBVElPTiB0ZXN0cHViX3N5bnRheDI7CistLSBmYWlsIC0gc2NoZW1h cyBkb24ndCBhbGxvdyBXSEVSRSBjbGF1c2UKK1NFVCBjbGllbnRfbWluX21lc3NhZ2VzID0g J0VSUk9SJzsKK0NSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX3N5bnRheDMgRk9SIEFMTCBU QUJMRVMgSU4gU0NIRU1BIHRlc3RwdWJfcmZfc2NoZW1hMSBXSEVSRSAoYSA9IDEyMyk7CitF UlJPUjogIHN5bnRheCBlcnJvciBhdCBvciBuZWFyICJXSEVSRSIKK0xJTkUgMTogLi4ubnRh eDMgRk9SIEFMTCBUQUJMRVMgSU4gU0NIRU1BIHRlc3RwdWJfcmZfc2NoZW1hMSBXSEVSRSAo YSA9Li4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXgorQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfc3ludGF4MyBG T1IgQUxMIFRBQkxFUyBJTiBTQ0hFTUEgdGVzdHB1Yl9yZl9zY2hlbWExLCB0ZXN0cHViX3Jm X3NjaGVtYTEgV0hFUkUgKGEgPSAxMjMpOworRVJST1I6ICBXSEVSRSBjbGF1c2UgZm9yIHNj aGVtYSBub3QgYWxsb3dlZAorTElORSAxOiAuLi50YXgzIEZPUiBBTEwgVEFCTEVTIElOIFND SEVNQSB0ZXN0cHViX3JmX3NjaGVtYTEsIHRlc3RwdWJfcmYuLi4KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCitSRVNF VCBjbGllbnRfbWluX21lc3NhZ2VzOworLS0gZmFpbCAtIGR1cGxpY2F0ZSB0YWJsZXMgYXJl IG5vdCBhbGxvd2VkIGlmIHRoYXQgdGFibGUgaGFzIGFueSBXSEVSRSBjbGF1c2UKK1NFVCBj bGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKK0NSRUFURSBQVUJMSUNBVElPTiB0ZXN0 cHViX2R1cHMgRk9SIFRBQkxFIHRlc3RwdWJfcmZfdGJsMSBXSEVSRSAoYSA9IDEpLCB0ZXN0 cHViX3JmX3RibDEgV0lUSCAocHVibGlzaCA9ICdpbnNlcnQnKTsKK0VSUk9SOiAgY29uZmxp Y3Rpbmcgb3IgcmVkdW5kYW50IFdIRVJFIGNsYXVzZXMgZm9yIHRhYmxlICJ0ZXN0cHViX3Jm X3RibDEiCitDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl9kdXBzIEZPUiBUQUJMRSB0ZXN0 cHViX3JmX3RibDEsIHRlc3RwdWJfcmZfdGJsMSBXSEVSRSAoYSA9IDIpIFdJVEggKHB1Ymxp c2ggPSAnaW5zZXJ0Jyk7CitFUlJPUjogIGNvbmZsaWN0aW5nIG9yIHJlZHVuZGFudCBXSEVS RSBjbGF1c2VzIGZvciB0YWJsZSAidGVzdHB1Yl9yZl90YmwxIgorUkVTRVQgY2xpZW50X21p bl9tZXNzYWdlczsKKy0tIGZhaWwgLSB1c2VyLWRlZmluZWQgb3BlcmF0b3JzIGFyZSBub3Qg YWxsb3dlZAorQ1JFQVRFIEZVTkNUSU9OIHRlc3RwdWJfcmZfZnVuYzEoaW50ZWdlciwgaW50 ZWdlcikgUkVUVVJOUyBib29sZWFuIEFTICQkIFNFTEVDVCBoYXNoaW50NCgkMSkgPiAkMiAk JCBMQU5HVUFHRSBTUUw7CitDUkVBVEUgT1BFUkFUT1IgPSM+IChQUk9DRURVUkUgPSB0ZXN0 cHViX3JmX2Z1bmMxLCBMRUZUQVJHID0gaW50ZWdlciwgUklHSFRBUkcgPSBpbnRlZ2VyKTsK K0NSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViNiBGT1IgVEFCTEUgdGVzdHB1Yl9yZl90Ymwz IFdIRVJFIChlID0jPiAyNyk7CitFUlJPUjogIGludmFsaWQgcHVibGljYXRpb24gV0hFUkUg ZXhwcmVzc2lvbiBmb3IgcmVsYXRpb24gInRlc3RwdWJfcmZfdGJsMyIKK0RFVEFJTDogIFVz ZXItZGVmaW5lZCBvcGVyYXRvcnMgYXJlIG5vdCBhbGxvd2VkLgorLS0gZmFpbCAtIHVzZXIt ZGVmaW5lZCBmdW5jdGlvbnMgYXJlIG5vdCBhbGxvd2VkCitDUkVBVEUgRlVOQ1RJT04gdGVz dHB1Yl9yZl9mdW5jMigpIFJFVFVSTlMgaW50ZWdlciBBUyAkJCBCRUdJTiBSRVRVUk4gMTIz OyBFTkQ7ICQkIExBTkdVQUdFIHBscGdzcWw7CitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHVi NSBBREQgVEFCTEUgdGVzdHB1Yl9yZl90YmwxIFdIRVJFIChhID49IHRlc3RwdWJfcmZfZnVu YzIoKSk7CitFUlJPUjogIGludmFsaWQgcHVibGljYXRpb24gV0hFUkUgZXhwcmVzc2lvbiBm b3IgcmVsYXRpb24gInRlc3RwdWJfcmZfdGJsMSIKK0RFVEFJTDogIFVzZXItZGVmaW5lZCBm dW5jdGlvbnMgYXJlIG5vdCBhbGxvd2VkICh0ZXN0cHViX3JmX2Z1bmMyKS4KKy0tIGZhaWwg LSBub24taW1tdXRhYmxlIGZ1bmN0aW9ucyBhcmUgbm90IGFsbG93ZWQuIHJhbmRvbSgpIGlz IHZvbGF0aWxlLgorQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjUgQUREIFRBQkxFIHRlc3Rw dWJfcmZfdGJsMSBXSEVSRSAoYSA8IHJhbmRvbSgpKTsKK0VSUk9SOiAgaW52YWxpZCBwdWJs aWNhdGlvbiBXSEVSRSBleHByZXNzaW9uIGZvciByZWxhdGlvbiAidGVzdHB1Yl9yZl90Ymwx IgorREVUQUlMOiAgTm9uLWltbXV0YWJsZSBmdW5jdGlvbnMgYXJlIG5vdCBhbGxvd2VkIChy YW5kb20pLgorLS0gb2sgLSBidWlsdGluIG9wZXJhdG9ycyBhcmUgYWxsb3dlZAorQUxURVIg UFVCTElDQVRJT04gdGVzdHB1YjUgU0VUIFRBQkxFIHRlc3RwdWJfcmZfdGJsMSBXSEVSRSAo YSBJUyBOVUxMKTsKKy0tIG9rIC0gaW1tdXRhYmxlIGJ1aWx0aW4gZnVuY3Rpb25zIGFyZSBh bGxvd2VkCitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNSBTRVQgVEFCTEUgdGVzdHB1Yl9y Zl90Ymw0IFdIRVJFIChsZW5ndGgoZykgPCA2KTsKKy0tIG9rIC0gY29uZGl0aW9uYWwgZXhw cmVzc2lvbnMgYXJlIGFsbG93ZWQKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI1IFNFVCBU QUJMRSB0ZXN0cHViX3JmX3RibDUgV0hFUkUgKGEgSVMgRE9DVU1FTlQpOworQUxURVIgUFVC TElDQVRJT04gdGVzdHB1YjUgU0VUIFRBQkxFIHRlc3RwdWJfcmZfdGJsNSBXSEVSRSAoeG1s ZXhpc3RzKCcvL2Zvb1t0ZXh0KCkgPSAnJ2JhcicnXScgUEFTU0lORyBCWSBWQUxVRSBhKSk7 CitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNSBTRVQgVEFCTEUgdGVzdHB1Yl9yZl90Ymwx IFdIRVJFIChOVUxMSUYoMSwgMikgPSBhKTsKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI1 IFNFVCBUQUJMRSB0ZXN0cHViX3JmX3RibDEgV0hFUkUgKENBU0UgYSBXSEVOIDUgVEhFTiB0 cnVlIEVMU0UgZmFsc2UgRU5EKTsKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI1IFNFVCBU QUJMRSB0ZXN0cHViX3JmX3RibDEgV0hFUkUgKENPQUxFU0NFKGIsICdmb28nKSA9ICdmb28n KTsKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI1IFNFVCBUQUJMRSB0ZXN0cHViX3JmX3Ri bDEgV0hFUkUgKEdSRUFURVNUKGEsIDEwKSA+IDEwKTsKK0FMVEVSIFBVQkxJQ0FUSU9OIHRl c3RwdWI1IFNFVCBUQUJMRSB0ZXN0cHViX3JmX3RibDEgV0hFUkUgKGEgSU4gKDIsIDQsIDYp KTsKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI1IFNFVCBUQUJMRSB0ZXN0cHViX3JmX3Ri bDEgV0hFUkUgKEFSUkFZW2FdIDxAIEFSUkFZWzIsIDQsIDZdKTsKKy0tIGZhaWwgLSBXSEVS RSBub3QgYWxsb3dlZCBpbiBEUk9QCitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNSBEUk9Q IFRBQkxFIHRlc3RwdWJfcmZfdGJsMSBXSEVSRSAoZSA8IDI3KTsKK0VSUk9SOiAgY2Fubm90 IHVzZSBhIFdIRVJFIGNsYXVzZSB3aGVuIHJlbW92aW5nIGEgdGFibGUgZnJvbSBwdWJsaWNh dGlvbgorLS0gZmFpbCAtIGNhbm5vdCBBTFRFUiBTRVQgdGFibGUgd2hpY2ggaXMgYSBtZW1i ZXIgb2YgYSBwcmUtZXhpc3Rpbmcgc2NoZW1hCitTRVQgY2xpZW50X21pbl9tZXNzYWdlcyA9 ICdFUlJPUic7CitDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjcgRk9SIEFMTCBUQUJMRVMg SU4gU0NIRU1BIHRlc3RwdWJfcmZfc2NoZW1hMjsKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3Rw dWI3IFNFVCBBTEwgVEFCTEVTIElOIFNDSEVNQSB0ZXN0cHViX3JmX3NjaGVtYTIsIFRBQkxF IHRlc3RwdWJfcmZfc2NoZW1hMi50ZXN0cHViX3JmX3RiMTY7CitFUlJPUjogIGNhbm5vdCBh ZGQgcmVsYXRpb24gInRlc3RwdWJfcmZfc2NoZW1hMi50ZXN0cHViX3JmX3RiMTYiIHRvIHB1 YmxpY2F0aW9uCitERVRBSUw6ICBUYWJsZSdzIHNjaGVtYSAidGVzdHB1Yl9yZl9zY2hlbWEy IiBpcyBhbHJlYWR5IHBhcnQgb2YgdGhlIHB1YmxpY2F0aW9uIG9yIHBhcnQgb2YgdGhlIHNw ZWNpZmllZCBzY2hlbWEgbGlzdC4KK1JFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CitEUk9Q IFRBQkxFIHRlc3RwdWJfcmZfdGJsMTsKK0RST1AgVEFCTEUgdGVzdHB1Yl9yZl90YmwyOwor RFJPUCBUQUJMRSB0ZXN0cHViX3JmX3RibDM7CitEUk9QIFRBQkxFIHRlc3RwdWJfcmZfdGJs NDsKK0RST1AgVEFCTEUgdGVzdHB1Yl9yZl90Ymw1OworRFJPUCBUQUJMRSB0ZXN0cHViX3Jm X3NjaGVtYTEudGVzdHB1Yl9yZl90Ymw1OworRFJPUCBUQUJMRSB0ZXN0cHViX3JmX3NjaGVt YTIudGVzdHB1Yl9yZl90YjE2OworRFJPUCBTQ0hFTUEgdGVzdHB1Yl9yZl9zY2hlbWExOwor RFJPUCBTQ0hFTUEgdGVzdHB1Yl9yZl9zY2hlbWEyOworRFJPUCBQVUJMSUNBVElPTiB0ZXN0 cHViNTsKK0RST1AgUFVCTElDQVRJT04gdGVzdHB1Yjc7CitEUk9QIE9QRVJBVE9SID0jPihp bnRlZ2VyLCBpbnRlZ2VyKTsKK0RST1AgRlVOQ1RJT04gdGVzdHB1Yl9yZl9mdW5jMShpbnRl Z2VyLCBpbnRlZ2VyKTsKK0RST1AgRlVOQ1RJT04gdGVzdHB1Yl9yZl9mdW5jMigpOwogLS0g VGVzdCBjYWNoZSBpbnZhbGlkYXRpb24gRk9SIEFMTCBUQUJMRVMgcHVibGljYXRpb24KIFNF VCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKIENSRUFURSBUQUJMRSB0ZXN0cHVi X3RibDQoYSBpbnQpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcHVibGlj YXRpb24uc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcHVibGljYXRpb24uc3FsCmluZGV4 IDhmYTA0MzVjMzIuLjdhYjBlZjdlNjMgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mv c3FsL3B1YmxpY2F0aW9uLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wdWJsaWNh dGlvbi5zcWwKQEAgLTEzNCw2ICsxMzQsMTAwIEBAIFVQREFURSB0ZXN0cHViX3BhcnRlZDIg U0VUIGEgPSAyOwogRFJPUCBUQUJMRSB0ZXN0cHViX3BhcnRlZDEsIHRlc3RwdWJfcGFydGVk MjsKIERST1AgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3JwYXJ0ZWQsIHRlc3RwdWJfZm9ycGFy dGVkMTsKIAorQ1JFQVRFIFRBQkxFIHRlc3RwdWJfcmZfdGJsMSAoYSBpbnRlZ2VyLCBiIHRl eHQpOworQ1JFQVRFIFRBQkxFIHRlc3RwdWJfcmZfdGJsMiAoYyB0ZXh0LCBkIGludGVnZXIp OworQ1JFQVRFIFRBQkxFIHRlc3RwdWJfcmZfdGJsMyAoZSBpbnRlZ2VyKTsKK0NSRUFURSBU QUJMRSB0ZXN0cHViX3JmX3RibDQgKGcgdGV4dCk7CitDUkVBVEUgVEFCTEUgdGVzdHB1Yl9y Zl90Ymw1IChhIHhtbCk7CitDUkVBVEUgU0NIRU1BIHRlc3RwdWJfcmZfc2NoZW1hMTsKK0NS RUFURSBUQUJMRSB0ZXN0cHViX3JmX3NjaGVtYTEudGVzdHB1Yl9yZl90Ymw1IChoIGludGVn ZXIpOworQ1JFQVRFIFNDSEVNQSB0ZXN0cHViX3JmX3NjaGVtYTI7CitDUkVBVEUgVEFCTEUg dGVzdHB1Yl9yZl9zY2hlbWEyLnRlc3RwdWJfcmZfdGIxNiAoaSBpbnRlZ2VyKTsKK1NFVCBj bGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKK0NSRUFURSBQVUJMSUNBVElPTiB0ZXN0 cHViNSBGT1IgVEFCTEUgdGVzdHB1Yl9yZl90YmwxLCB0ZXN0cHViX3JmX3RibDIgV0hFUkUg KGMgPD4gJ3Rlc3QnIEFORCBkIDwgNSkgV0lUSCAocHVibGlzaCA9ICdpbnNlcnQnKTsKK1JF U0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CitcZFJwKyB0ZXN0cHViNQorQUxURVIgUFVCTElD QVRJT04gdGVzdHB1YjUgQUREIFRBQkxFIHRlc3RwdWJfcmZfdGJsMyBXSEVSRSAoZSA+IDEw MDAgQU5EIGUgPCAyMDAwKTsKK1xkUnArIHRlc3RwdWI1CitBTFRFUiBQVUJMSUNBVElPTiB0 ZXN0cHViNSBEUk9QIFRBQkxFIHRlc3RwdWJfcmZfdGJsMjsKK1xkUnArIHRlc3RwdWI1Cist LSByZW1vdmUgdGVzdHB1Yl9yZl90YmwxIGFuZCBhZGQgdGVzdHB1Yl9yZl90YmwzIGFnYWlu IChhbm90aGVyIFdIRVJFIGV4cHJlc3Npb24pCitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHVi NSBTRVQgVEFCTEUgdGVzdHB1Yl9yZl90YmwzIFdIRVJFIChlID4gMzAwIEFORCBlIDwgNTAw KTsKK1xkUnArIHRlc3RwdWI1CistLSB0ZXN0IFxkKyAobm93IGl0IGRpc3BsYXlzIGZpbHRl ciBpbmZvcm1hdGlvbikKK1NFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKK0NS RUFURSBQVUJMSUNBVElPTiB0ZXN0cHViNWEgRk9SIFRBQkxFIHRlc3RwdWJfcmZfdGJsMSBX SEVSRSAoYSA+IDEpIFdJVEggKHB1Ymxpc2ggPSAnaW5zZXJ0Jyk7CitDUkVBVEUgUFVCTElD QVRJT04gdGVzdHB1YjViIEZPUiBUQUJMRSB0ZXN0cHViX3JmX3RibDE7CitDUkVBVEUgUFVC TElDQVRJT04gdGVzdHB1YjVjIEZPUiBUQUJMRSB0ZXN0cHViX3JmX3RibDEgV0hFUkUgKGEg PiAzKSBXSVRIIChwdWJsaXNoID0gJ2luc2VydCcpOworUkVTRVQgY2xpZW50X21pbl9tZXNz YWdlczsKK1xkKyB0ZXN0cHViX3JmX3RibDEKK0RST1AgUFVCTElDQVRJT04gdGVzdHB1YjVh LCB0ZXN0cHViNWIsIHRlc3RwdWI1YzsKKy0tIHNvbWUgbW9yZSBzeW50YXggdGVzdHMgdG8g ZXhlcmNpc2Ugb3RoZXIgcGFyc2VyIHBhdGh3YXlzCitTRVQgY2xpZW50X21pbl9tZXNzYWdl cyA9ICdFUlJPUic7CitDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl9zeW50YXgxIEZPUiBU QUJMRSB0ZXN0cHViX3JmX3RibDEsIE9OTFkgdGVzdHB1Yl9yZl90YmwzIFdIRVJFIChlIDwg OTk5KSBXSVRIIChwdWJsaXNoID0gJ2luc2VydCcpOworUkVTRVQgY2xpZW50X21pbl9tZXNz YWdlczsKK1xkUnArIHRlc3RwdWJfc3ludGF4MQorRFJPUCBQVUJMSUNBVElPTiB0ZXN0cHVi X3N5bnRheDE7CitTRVQgY2xpZW50X21pbl9tZXNzYWdlcyA9ICdFUlJPUic7CitDUkVBVEUg UFVCTElDQVRJT04gdGVzdHB1Yl9zeW50YXgyIEZPUiBUQUJMRSB0ZXN0cHViX3JmX3RibDEs IHRlc3RwdWJfcmZfc2NoZW1hMS50ZXN0cHViX3JmX3RibDUgV0hFUkUgKGggPCA5OTkpIFdJ VEggKHB1Ymxpc2ggPSAnaW5zZXJ0Jyk7CitSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwor XGRScCsgdGVzdHB1Yl9zeW50YXgyCitEUk9QIFBVQkxJQ0FUSU9OIHRlc3RwdWJfc3ludGF4 MjsKKy0tIGZhaWwgLSBzY2hlbWFzIGRvbid0IGFsbG93IFdIRVJFIGNsYXVzZQorU0VUIGNs aWVudF9taW5fbWVzc2FnZXMgPSAnRVJST1InOworQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3Rw dWJfc3ludGF4MyBGT1IgQUxMIFRBQkxFUyBJTiBTQ0hFTUEgdGVzdHB1Yl9yZl9zY2hlbWEx IFdIRVJFIChhID0gMTIzKTsKK0NSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX3N5bnRheDMg Rk9SIEFMTCBUQUJMRVMgSU4gU0NIRU1BIHRlc3RwdWJfcmZfc2NoZW1hMSwgdGVzdHB1Yl9y Zl9zY2hlbWExIFdIRVJFIChhID0gMTIzKTsKK1JFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7 CistLSBmYWlsIC0gZHVwbGljYXRlIHRhYmxlcyBhcmUgbm90IGFsbG93ZWQgaWYgdGhhdCB0 YWJsZSBoYXMgYW55IFdIRVJFIGNsYXVzZQorU0VUIGNsaWVudF9taW5fbWVzc2FnZXMgPSAn RVJST1InOworQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZHVwcyBGT1IgVEFCTEUgdGVz dHB1Yl9yZl90YmwxIFdIRVJFIChhID0gMSksIHRlc3RwdWJfcmZfdGJsMSBXSVRIIChwdWJs aXNoID0gJ2luc2VydCcpOworQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZHVwcyBGT1Ig VEFCTEUgdGVzdHB1Yl9yZl90YmwxLCB0ZXN0cHViX3JmX3RibDEgV0hFUkUgKGEgPSAyKSBX SVRIIChwdWJsaXNoID0gJ2luc2VydCcpOworUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsK Ky0tIGZhaWwgLSB1c2VyLWRlZmluZWQgb3BlcmF0b3JzIGFyZSBub3QgYWxsb3dlZAorQ1JF QVRFIEZVTkNUSU9OIHRlc3RwdWJfcmZfZnVuYzEoaW50ZWdlciwgaW50ZWdlcikgUkVUVVJO UyBib29sZWFuIEFTICQkIFNFTEVDVCBoYXNoaW50NCgkMSkgPiAkMiAkJCBMQU5HVUFHRSBT UUw7CitDUkVBVEUgT1BFUkFUT1IgPSM+IChQUk9DRURVUkUgPSB0ZXN0cHViX3JmX2Z1bmMx LCBMRUZUQVJHID0gaW50ZWdlciwgUklHSFRBUkcgPSBpbnRlZ2VyKTsKK0NSRUFURSBQVUJM SUNBVElPTiB0ZXN0cHViNiBGT1IgVEFCTEUgdGVzdHB1Yl9yZl90YmwzIFdIRVJFIChlID0j PiAyNyk7CistLSBmYWlsIC0gdXNlci1kZWZpbmVkIGZ1bmN0aW9ucyBhcmUgbm90IGFsbG93 ZWQKK0NSRUFURSBGVU5DVElPTiB0ZXN0cHViX3JmX2Z1bmMyKCkgUkVUVVJOUyBpbnRlZ2Vy IEFTICQkIEJFR0lOIFJFVFVSTiAxMjM7IEVORDsgJCQgTEFOR1VBR0UgcGxwZ3NxbDsKK0FM VEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI1IEFERCBUQUJMRSB0ZXN0cHViX3JmX3RibDEgV0hF UkUgKGEgPj0gdGVzdHB1Yl9yZl9mdW5jMigpKTsKKy0tIGZhaWwgLSBub24taW1tdXRhYmxl IGZ1bmN0aW9ucyBhcmUgbm90IGFsbG93ZWQuIHJhbmRvbSgpIGlzIHZvbGF0aWxlLgorQUxU RVIgUFVCTElDQVRJT04gdGVzdHB1YjUgQUREIFRBQkxFIHRlc3RwdWJfcmZfdGJsMSBXSEVS RSAoYSA8IHJhbmRvbSgpKTsKKy0tIG9rIC0gYnVpbHRpbiBvcGVyYXRvcnMgYXJlIGFsbG93 ZWQKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI1IFNFVCBUQUJMRSB0ZXN0cHViX3JmX3Ri bDEgV0hFUkUgKGEgSVMgTlVMTCk7CistLSBvayAtIGltbXV0YWJsZSBidWlsdGluIGZ1bmN0 aW9ucyBhcmUgYWxsb3dlZAorQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjUgU0VUIFRBQkxF IHRlc3RwdWJfcmZfdGJsNCBXSEVSRSAobGVuZ3RoKGcpIDwgNik7CistLSBvayAtIGNvbmRp dGlvbmFsIGV4cHJlc3Npb25zIGFyZSBhbGxvd2VkCitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0 cHViNSBTRVQgVEFCTEUgdGVzdHB1Yl9yZl90Ymw1IFdIRVJFIChhIElTIERPQ1VNRU5UKTsK K0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI1IFNFVCBUQUJMRSB0ZXN0cHViX3JmX3RibDUg V0hFUkUgKHhtbGV4aXN0cygnLy9mb29bdGV4dCgpID0gJydiYXInJ10nIFBBU1NJTkcgQlkg VkFMVUUgYSkpOworQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjUgU0VUIFRBQkxFIHRlc3Rw dWJfcmZfdGJsMSBXSEVSRSAoTlVMTElGKDEsIDIpID0gYSk7CitBTFRFUiBQVUJMSUNBVElP TiB0ZXN0cHViNSBTRVQgVEFCTEUgdGVzdHB1Yl9yZl90YmwxIFdIRVJFIChDQVNFIGEgV0hF TiA1IFRIRU4gdHJ1ZSBFTFNFIGZhbHNlIEVORCk7CitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0 cHViNSBTRVQgVEFCTEUgdGVzdHB1Yl9yZl90YmwxIFdIRVJFIChDT0FMRVNDRShiLCAnZm9v JykgPSAnZm9vJyk7CitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNSBTRVQgVEFCTEUgdGVz dHB1Yl9yZl90YmwxIFdIRVJFIChHUkVBVEVTVChhLCAxMCkgPiAxMCk7CitBTFRFUiBQVUJM SUNBVElPTiB0ZXN0cHViNSBTRVQgVEFCTEUgdGVzdHB1Yl9yZl90YmwxIFdIRVJFIChhIElO ICgyLCA0LCA2KSk7CitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNSBTRVQgVEFCTEUgdGVz dHB1Yl9yZl90YmwxIFdIRVJFIChBUlJBWVthXSA8QCBBUlJBWVsyLCA0LCA2XSk7CistLSBm YWlsIC0gV0hFUkUgbm90IGFsbG93ZWQgaW4gRFJPUAorQUxURVIgUFVCTElDQVRJT04gdGVz dHB1YjUgRFJPUCBUQUJMRSB0ZXN0cHViX3JmX3RibDEgV0hFUkUgKGUgPCAyNyk7CistLSBm YWlsIC0gY2Fubm90IEFMVEVSIFNFVCB0YWJsZSB3aGljaCBpcyBhIG1lbWJlciBvZiBhIHBy ZS1leGlzdGluZyBzY2hlbWEKK1NFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsK K0NSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViNyBGT1IgQUxMIFRBQkxFUyBJTiBTQ0hFTUEg dGVzdHB1Yl9yZl9zY2hlbWEyOworQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjcgU0VUIEFM TCBUQUJMRVMgSU4gU0NIRU1BIHRlc3RwdWJfcmZfc2NoZW1hMiwgVEFCTEUgdGVzdHB1Yl9y Zl9zY2hlbWEyLnRlc3RwdWJfcmZfdGIxNjsKK1JFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7 CisKK0RST1AgVEFCTEUgdGVzdHB1Yl9yZl90YmwxOworRFJPUCBUQUJMRSB0ZXN0cHViX3Jm X3RibDI7CitEUk9QIFRBQkxFIHRlc3RwdWJfcmZfdGJsMzsKK0RST1AgVEFCTEUgdGVzdHB1 Yl9yZl90Ymw0OworRFJPUCBUQUJMRSB0ZXN0cHViX3JmX3RibDU7CitEUk9QIFRBQkxFIHRl c3RwdWJfcmZfc2NoZW1hMS50ZXN0cHViX3JmX3RibDU7CitEUk9QIFRBQkxFIHRlc3RwdWJf cmZfc2NoZW1hMi50ZXN0cHViX3JmX3RiMTY7CitEUk9QIFNDSEVNQSB0ZXN0cHViX3JmX3Nj aGVtYTE7CitEUk9QIFNDSEVNQSB0ZXN0cHViX3JmX3NjaGVtYTI7CitEUk9QIFBVQkxJQ0FU SU9OIHRlc3RwdWI1OworRFJPUCBQVUJMSUNBVElPTiB0ZXN0cHViNzsKK0RST1AgT1BFUkFU T1IgPSM+KGludGVnZXIsIGludGVnZXIpOworRFJPUCBGVU5DVElPTiB0ZXN0cHViX3JmX2Z1 bmMxKGludGVnZXIsIGludGVnZXIpOworRFJPUCBGVU5DVElPTiB0ZXN0cHViX3JmX2Z1bmMy KCk7CisKIC0tIFRlc3QgY2FjaGUgaW52YWxpZGF0aW9uIEZPUiBBTEwgVEFCTEVTIHB1Ymxp Y2F0aW9uCiBTRVQgY2xpZW50X21pbl9tZXNzYWdlcyA9ICdFUlJPUic7CiBDUkVBVEUgVEFC TEUgdGVzdHB1Yl90Ymw0KGEgaW50KTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3N1YnNjcmlw dGlvbi90LzAyN19yb3dfZmlsdGVyLnBsIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDI3 X3Jvd19maWx0ZXIucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4u NTg2N2NmZDc1NgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90 LzAyN19yb3dfZmlsdGVyLnBsCkBAIC0wLDAgKzEsMzU1IEBACisjIFRlc3QgbG9naWNhbCBy ZXBsaWNhdGlvbiBiZWhhdmlvciB3aXRoIHJvdyBmaWx0ZXJpbmcKK3VzZSBzdHJpY3Q7Cit1 c2Ugd2FybmluZ3M7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0 Z3JlU1FMOjpUZXN0OjpVdGlsczsKK3VzZSBUZXN0OjpNb3JlIHRlc3RzID0+IDEwOworCisj IGNyZWF0ZSBwdWJsaXNoZXIgbm9kZQorbXkgJG5vZGVfcHVibGlzaGVyID0gUG9zdGdyZVNR TDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdwdWJsaXNoZXInKTsKKyRub2RlX3B1Ymxpc2hlci0+ aW5pdChhbGxvd3Nfc3RyZWFtaW5nID0+ICdsb2dpY2FsJyk7Ciskbm9kZV9wdWJsaXNoZXIt PnN0YXJ0OworCisjIGNyZWF0ZSBzdWJzY3JpYmVyIG5vZGUKK215ICRub2RlX3N1YnNjcmli ZXIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3N1YnNjcmliZXInKTsKKyRu b2RlX3N1YnNjcmliZXItPmluaXQoYWxsb3dzX3N0cmVhbWluZyA9PiAnbG9naWNhbCcpOwor JG5vZGVfc3Vic2NyaWJlci0+c3RhcnQ7CisKKyMgc2V0dXAgc3RydWN0dXJlIG9uIHB1Ymxp c2hlcgorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRF IFRBQkxFIHRhYl9yb3dmaWx0ZXJfMSAoYSBpbnQgcHJpbWFyeSBrZXksIGIgdGV4dCkiKTsK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkFMVEVSIFRBQkxF IHRhYl9yb3dmaWx0ZXJfMSBSRVBMSUNBIElERU5USVRZIEZVTEwiKTsKKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBUQUJMRSB0YWJfcm93Zmls dGVyXzIgKGMgaW50IHByaW1hcnkga2V5KSIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFRBQkxFIHRhYl9yb3dmaWx0ZXJfMyAoYSBpbnQg cHJpbWFyeSBrZXksIGIgYm9vbGVhbikiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsCisJIkNSRUFURSBUQUJMRSB0YWJfcm93ZmlsdGVyXzQgKGMgaW50IHBy aW1hcnkga2V5KSIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywK KwkiQ1JFQVRFIFRBQkxFIHRhYl9yb3dmaWx0ZXJfcGFydGl0aW9uZWQgKGEgaW50IHByaW1h cnkga2V5LCBiIGludGVnZXIpIFBBUlRJVElPTiBCWSBSQU5HRShhKSIKKyk7Ciskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgVEFCTEUgdGFiX3Jv d2ZpbHRlcl9sZXNzXzEwayAoTElLRSB0YWJfcm93ZmlsdGVyX3BhcnRpdGlvbmVkKSIpOwor JG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQUxURVIgVEFCTEUg dGFiX3Jvd2ZpbHRlcl9wYXJ0aXRpb25lZCBBVFRBQ0ggUEFSVElUSU9OIHRhYl9yb3dmaWx0 ZXJfbGVzc18xMGsgRk9SIFZBTFVFUyBGUk9NIChNSU5WQUxVRSkgVE8gKDEwMDAwKSIKKyk7 Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgVEFC TEUgdGFiX3Jvd2ZpbHRlcl9ncmVhdGVyXzEwayAoTElLRSB0YWJfcm93ZmlsdGVyX3BhcnRp dGlvbmVkKSIKKyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAor CSJBTFRFUiBUQUJMRSB0YWJfcm93ZmlsdGVyX3BhcnRpdGlvbmVkIEFUVEFDSCBQQVJUSVRJ T04gdGFiX3Jvd2ZpbHRlcl9ncmVhdGVyXzEwayBGT1IgVkFMVUVTIEZST00gKDEwMDAwKSBU TyAoTUFYVkFMVUUpIgorKTsKKworIyBzZXR1cCBzdHJ1Y3R1cmUgb24gc3Vic2NyaWJlcgor JG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBUQUJM RSB0YWJfcm93ZmlsdGVyXzEgKGEgaW50IHByaW1hcnkga2V5LCBiIHRleHQpIik7Ciskbm9k ZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFRBQkxFIHRh Yl9yb3dmaWx0ZXJfMiAoYyBpbnQgcHJpbWFyeSBrZXkpIik7Ciskbm9kZV9zdWJzY3JpYmVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFRBQkxFIHRhYl9yb3dmaWx0ZXJf MyAoYSBpbnQgcHJpbWFyeSBrZXksIGIgYm9vbGVhbikiKTsKKyRub2RlX3N1YnNjcmliZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgVEFCTEUgdGFiX3Jvd2ZpbHRlcl80 IChjIGludCBwcmltYXJ5IGtleSkiKTsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLAorCSJDUkVBVEUgVEFCTEUgdGFiX3Jvd2ZpbHRlcl9wYXJ0aXRpb25lZCAo YSBpbnQgcHJpbWFyeSBrZXksIGIgaW50ZWdlcikgUEFSVElUSU9OIEJZIFJBTkdFKGEpIgor KTsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUg VEFCTEUgdGFiX3Jvd2ZpbHRlcl9sZXNzXzEwayAoTElLRSB0YWJfcm93ZmlsdGVyX3BhcnRp dGlvbmVkKSIpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJ IkFMVEVSIFRBQkxFIHRhYl9yb3dmaWx0ZXJfcGFydGl0aW9uZWQgQVRUQUNIIFBBUlRJVElP TiB0YWJfcm93ZmlsdGVyX2xlc3NfMTBrIEZPUiBWQUxVRVMgRlJPTSAoTUlOVkFMVUUpIFRP ICgxMDAwMCkiCispOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs CisJIkNSRUFURSBUQUJMRSB0YWJfcm93ZmlsdGVyX2dyZWF0ZXJfMTBrIChMSUtFIHRhYl9y b3dmaWx0ZXJfcGFydGl0aW9uZWQpIgorKTsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLAorCSJBTFRFUiBUQUJMRSB0YWJfcm93ZmlsdGVyX3BhcnRpdGlvbmVk IEFUVEFDSCBQQVJUSVRJT04gdGFiX3Jvd2ZpbHRlcl9ncmVhdGVyXzEwayBGT1IgVkFMVUVT IEZST00gKDEwMDAwKSBUTyAoTUFYVkFMVUUpIgorKTsKKworIyBzZXR1cCBsb2dpY2FsIHJl cGxpY2F0aW9uCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJD UkVBVEUgUFVCTElDQVRJT04gdGFwX3B1Yl8xIEZPUiBUQUJMRSB0YWJfcm93ZmlsdGVyXzEg V0hFUkUgKGEgPiAxMDAwIEFORCBiIDw+ICdmaWx0ZXJlZCcpIgorKTsKKworJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQUxURVIgUFVCTElDQVRJT04gdGFw X3B1Yl8xIEFERCBUQUJMRSB0YWJfcm93ZmlsdGVyXzIgV0hFUkUgKGMgJSA3ID0gMCkiCisp OworCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJBTFRFUiBQ VUJMSUNBVElPTiB0YXBfcHViXzEgU0VUIFRBQkxFIHRhYl9yb3dmaWx0ZXJfMSBXSEVSRSAo YSA+IDEwMDAgQU5EIGIgPD4gJ2ZpbHRlcmVkJyksIHRhYl9yb3dmaWx0ZXJfMiBXSEVSRSAo YyAlIDIgPSAwKSwgdGFiX3Jvd2ZpbHRlcl8zIgorKTsKKworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFBVQkxJQ0FUSU9OIHRhcF9wdWJfMiBG T1IgVEFCTEUgdGFiX3Jvd2ZpbHRlcl8yIFdIRVJFIChjICUgMyA9IDApIgorKTsKKworJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFBVQkxJQ0FU SU9OIHRhcF9wdWJfMyBGT1IgVEFCTEUgdGFiX3Jvd2ZpbHRlcl9wYXJ0aXRpb25lZCBXSEVS RSAoYSA8IDUwMDApIgorKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsCisJIkFMVEVSIFBVQkxJQ0FUSU9OIHRhcF9wdWJfMyBBREQgVEFCTEUgdGFiX3Jvd2Zp bHRlcl9sZXNzXzEwayBXSEVSRSAoYSA8IDYwMDApIgorKTsKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBQVUJMSUNBVElPTiB0YXBfcHViX25v dF91c2VkIEZPUiBUQUJMRSB0YWJfcm93ZmlsdGVyXzEgV0hFUkUgKGEgPCAwKSIKKyk7CisK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBQVUJM SUNBVElPTiB0YXBfcHViXzRhIEZPUiBUQUJMRSB0YWJfcm93ZmlsdGVyXzQgV0hFUkUgKGMg JSAyID0gMCkiCispOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywK KwkiQ1JFQVRFIFBVQkxJQ0FUSU9OIHRhcF9wdWJfNGIgRk9SIFRBQkxFIHRhYl9yb3dmaWx0 ZXJfNCIpOworCisjCisjIFRoZSBmb2xsb3dpbmcgSU5TRVJUcyBhcmUgZXhlY3V0ZWQgYmVm b3JlIHRoZSBDUkVBVEUgU1VCU0NSSVBUSU9OLCBzbyB0aGVzZQorIyBTUUwgY29tbWFuZHMg YXJlIGZvciB0ZXN0aW5nIHRoZSBpbml0aWFsIGRhdGEgY29weSB1c2luZyBsb2dpY2FsIHJl cGxpY2F0aW9uLgorIworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywK KwkiSU5TRVJUIElOVE8gdGFiX3Jvd2ZpbHRlcl8xIChhLCBiKSBWQUxVRVMgKDEsICdub3Qg cmVwbGljYXRlZCcpIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LAorCSJJTlNFUlQgSU5UTyB0YWJfcm93ZmlsdGVyXzEgKGEsIGIpIFZBTFVFUyAoMTUwMCwg J2ZpbHRlcmVkJykiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs CisJIklOU0VSVCBJTlRPIHRhYl9yb3dmaWx0ZXJfMSAoYSwgYikgVkFMVUVTICgxOTgwLCAn bm90IGZpbHRlcmVkJykiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsCisJIklOU0VSVCBJTlRPIHRhYl9yb3dmaWx0ZXJfMSAoYSwgYikgU0VMRUNUIHgsICd0 ZXN0ICcgfHwgeCBGUk9NIGdlbmVyYXRlX3Nlcmllcyg5OTAsMTAwMikgeCIKKyk7Ciskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJJTlNFUlQgSU5UTyB0YWJf cm93ZmlsdGVyXzIgKGMpIFNFTEVDVCBnZW5lcmF0ZV9zZXJpZXMoMSwgMjApIik7Ciskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJJTlNFUlQgSU5UTyB0YWJf cm93ZmlsdGVyXzMgKGEsIGIpIFNFTEVDVCB4LCAoeCAlIDMgPSAwKSBGUk9NIGdlbmVyYXRl X3NlcmllcygxLCAxMCkgeCIKKyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLAorCSJJTlNFUlQgSU5UTyB0YWJfcm93ZmlsdGVyXzQgKGMpIFNFTEVDVCBnZW5l cmF0ZV9zZXJpZXMoMSwgMTApIik7CisKKyMgaW5zZXJ0IGRhdGEgaW50byBwYXJ0aXRpb25l ZCB0YWJsZSBhbmQgZGlyZWN0bHkgb24gdGhlIHBhcnRpdGlvbgorJG5vZGVfcHVibGlzaGVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiSU5TRVJUIElOVE8gdGFiX3Jvd2ZpbHRlcl9w YXJ0aXRpb25lZCAoYSwgYikgVkFMVUVTKDEsIDEwMCksKDcwMDAsIDEwMSksKDE1MDAwLCAx MDIpLCg1NTAwLCAzMDApIgorKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsCisJIklOU0VSVCBJTlRPIHRhYl9yb3dmaWx0ZXJfbGVzc18xMGsgKGEsIGIpIFZB TFVFUygyLCAyMDApLCg2MDA1LCAyMDEpIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLAorCSJJTlNFUlQgSU5UTyB0YWJfcm93ZmlsdGVyX2dyZWF0ZXJfMTBr IChhLCBiKSBWQUxVRVMoMTYwMDAsIDEwMykiKTsKKworbXkgJHB1Ymxpc2hlcl9jb25uc3Ry ID0gJG5vZGVfcHVibGlzaGVyLT5jb25uc3RyIC4gJyBkYm5hbWU9cG9zdGdyZXMnOworbXkg JGFwcG5hbWUgICAgICAgICAgID0gJ3RhcF9zdWInOworJG5vZGVfc3Vic2NyaWJlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBTVUJTQ1JJUFRJT04gdGFwX3N1YiBDT05O RUNUSU9OICckcHVibGlzaGVyX2Nvbm5zdHIgYXBwbGljYXRpb25fbmFtZT0kYXBwbmFtZScg UFVCTElDQVRJT04gdGFwX3B1Yl8xLCB0YXBfcHViXzIsIHRhcF9wdWJfMywgdGFwX3B1Yl80 YSwgdGFwX3B1Yl80YiIKKyk7CisKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1 cCgkYXBwbmFtZSk7CisKKyMgd2FpdCBmb3IgaW5pdGlhbCB0YWJsZSBzeW5jaHJvbml6YXRp b24gdG8gZmluaXNoCitteSAkc3luY2VkX3F1ZXJ5ID0KKyAgIlNFTEVDVCBjb3VudCgxKSA9 IDAgRlJPTSBwZ19zdWJzY3JpcHRpb25fcmVsIFdIRVJFIHNyc3Vic3RhdGUgTk9UIElOICgn cicsICdzJyk7IjsKKyRub2RlX3N1YnNjcmliZXItPnBvbGxfcXVlcnlfdW50aWwoJ3Bvc3Rn cmVzJywgJHN5bmNlZF9xdWVyeSkKKyAgb3IgZGllICJUaW1lZCBvdXQgd2hpbGUgd2FpdGlu ZyBmb3Igc3Vic2NyaWJlciB0byBzeW5jaHJvbml6ZSBkYXRhIjsKKworIyBDaGVjayBleHBl Y3RlZCByZXBsaWNhdGVkIHJvd3MgZm9yIHRhYl9yb3dmaWx0ZXJfMQorIyB0YXBfcHViXzEg ZmlsdGVyIGlzOiAoYSA+IDEwMDAgQU5EIGIgPD4gJ2ZpbHRlcmVkJykKKyMgLSBJTlNFUlQg KDEsICdub3QgcmVwbGljYXRlZCcpICAgTk8sIGJlY2F1c2UgYSBpcyBub3QgPiAxMDAwCisj IC0gSU5TRVJUICgxNTAwLCAnZmlsdGVyZWQnKSAgICAgIE5PLCBiZWNhdXNlIGIgPT0gJ2Zp bHRlcmVkJworIyAtIElOU0VSVCAoMTk4MCwgJ25vdCBmaWx0ZXJlZCcpICBZRVMKKyMgLSBn ZW5lcmF0ZV9zZXJpZXMoOTkwLDEwMDIpICAgICAgWUVTLCBvbmx5IGZvciAxMDAxLDEwMDIg YmVjYXVzZSBhID4gMTAwMAorIworbXkgJHJlc3VsdCA9CisgICRub2RlX3N1YnNjcmliZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgYSwgYiBGUk9NIHRhYl9yb3dmaWx0 ZXJfMSBPUkRFUiBCWSAxLCAyIik7CitpcyggJHJlc3VsdCwgcXEoMTAwMXx0ZXN0IDEwMDEK KzEwMDJ8dGVzdCAxMDAyCisxOTgwfG5vdCBmaWx0ZXJlZCksICdjaGVjayBpbml0aWFsIGRh dGEgY29weSBmcm9tIHRhYmxlIHRhYl9yb3dmaWx0ZXJfMScpOworCisjIENoZWNrIGV4cGVj dGVkIHJlcGxpY2F0ZWQgcm93cyBmb3IgdGFiX3Jvd2ZpbHRlcl8yCisjIHRhcF9wdWJfMSBm aWx0ZXIgaXM6IChjICUgMiA9IDApCisjIHRhcF9wdWJfMiBmaWx0ZXIgaXM6IChjICUgMyA9 IDApCisjIFdoZW4gdGhlcmUgYXJlIG11bHRpcGxlIHB1YmxpY2F0aW9ucyBmb3IgdGhlIHNh bWUgdGFibGUsIHRoZSBmaWx0ZXJzCisjIGV4cHJlc3Npb25zIGFyZSBPUidlZCB0b2dldGhl ci4gSW4gdGhpcyBjYXNlLCByb3dzIGFyZSByZXBsaWNhdGVkIGlmCisjIGMgdmFsdWUgaXMg ZGl2aWRlZCBieSAyIE9SIDMgKDIsIDMsIDQsIDYsIDgsIDksIDEwLCAxMiwgMTQsIDE1LCAx NiwgMTgsIDIwKQorIworJHJlc3VsdCA9CisgICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgY291bnQoYyksIG1pbihjKSwgbWF4KGMpIEZST00g dGFiX3Jvd2ZpbHRlcl8yIik7CitpcygkcmVzdWx0LCBxcSgxM3wyfDIwKSwKKwknY2hlY2sg aW5pdGlhbCBkYXRhIGNvcHkgZnJvbSB0YWJsZSB0YWJfcm93ZmlsdGVyXzInKTsKKworIyBD aGVjayBleHBlY3RlZCByZXBsaWNhdGVkIHJvd3MgZm9yIHRhYl9yb3dmaWx0ZXJfNAorIyAo c2FtZSB0YWJsZSBpbiB0d28gcHVibGljYXRpb25zIGJ1dCBvbmx5IG9uZSBoYXMgYSBmaWx0 ZXIpLgorIyB0YXBfcHViXzRhIGZpbHRlciBpczogKGMgJSAyID0gMCkKKyMgdGFwX3B1Yl80 YiBmaWx0ZXIgaXM6IDxubyBmaWx0ZXI+CisjIEV4cHJlc3Npb25zIGFyZSBPUidlZCB0b2dl dGhlciBidXQgd2hlbiB0aGVyZSBpcyBubyBmaWx0ZXIgaXQganVzdCBtZWFucworIyBPUiBl dmVyeXRoaW5nIC0gZS5nLiBzYW1lIGFzIG5vIGZpbHRlciBhdCBhbGwuCisjIEV4cGVjdCBh bGwgcm93czogKDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwKQorJHJlc3VsdCA9Cisg ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgY291 bnQoYyksIG1pbihjKSwgbWF4KGMpIEZST00gdGFiX3Jvd2ZpbHRlcl80Iik7CitpcygkcmVz dWx0LCBxcSgxMHwxfDEwKSwKKwknY2hlY2sgaW5pdGlhbCBkYXRhIGNvcHkgZnJvbSB0YWJs ZSB0YWJfcm93ZmlsdGVyXzQnKTsKKworIyBDaGVjayBleHBlY3RlZCByZXBsaWNhdGVkIHJv d3MgZm9yIHRhYl9yb3dmaWx0ZXJfMworIyBUaGVyZSBpcyBubyBmaWx0ZXIuIDEwIHJvd3Mg YXJlIGluc2VydGVkLCBzbyAxMCByb3dzIGFyZSByZXBsaWNhdGVkLgorJHJlc3VsdCA9Cisg ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgY291 bnQoYSkgRlJPTSB0YWJfcm93ZmlsdGVyXzMiKTsKK2lzKCRyZXN1bHQsIHFxKDEwKSwgJ2No ZWNrIGluaXRpYWwgZGF0YSBjb3B5IGZyb20gdGFibGUgdGFiX3Jvd2ZpbHRlcl8zJyk7CisK KyMgQ2hlY2sgZXhwZWN0ZWQgcmVwbGljYXRlZCByb3dzIGZvciBwYXJ0aXRpb25zCisjIHB1 YmxpY2F0aW9uIG9wdGlvbiBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCBpcyBmYWxzZSBz byB1c2UgdGhlIHJvdyBmaWx0ZXIKKyMgZnJvbSBhIHBhcnRpdGlvbgorIyB0YWJfcm93Zmls dGVyX3BhcnRpdGlvbmVkIGZpbHRlcjogKGEgPCA1MDAwKQorIyB0YWJfcm93ZmlsdGVyX2xl c3NfMTBrIGZpbHRlcjogICAgKGEgPCA2MDAwKQorIyB0YWJfcm93ZmlsdGVyX2dyZWF0ZXJf MTBrIGZpbHRlcjogbm8gZmlsdGVyCisjCisjIElOU0VSVCBpbnRvIHRhYl9yb3dmaWx0ZXJf cGFydGl0aW9uZWQ6CisjIC0gSU5TRVJUICgxLDEwMCkgICAgICAgWUVTLCBiZWNhdXNlIDEg PCA2MDAwCisjIC0gSU5TRVJUICg3MDAwLCAxMDEpICAgTk8sICBiZWNhdXNlIDcwMDAgaXMg bm90IDwgNjAwMAorIyAtIElOU0VSVCAoMTUwMDAsIDEwMikgIFlFUywgYmVjYXVzZSB0YWJf cm93ZmlsdGVyX2dyZWF0ZXJfMTBrIGhhcyBubyBmaWx0ZXIKKyMgLSBJTlNFUlQgKDU1MDAs IDMwMCkgICBZRVMsIGJlY2F1c2UgNTUwMCA8IDYwMDAKKyMKKyMgSU5TRVJUIGRpcmVjdGx5 IGludG8gdGFiX3Jvd2ZpbHRlcl9sZXNzXzEwazoKKyMgLSBJTlNFUlQgKDIsIDIwMCkgICAg ICBZRVMsIGJlY2F1c2UgMiA8IDYwMDAKKyMgLSBJTlNFUlQgKDYwMDUsIDIwMSkgICBOTywg YmVjYXVzZSA2MDA1IGlzIG5vdCA8IDYwMDAKKyMKKyMgSU5TRVJUIGRpcmVjdGx5IGludG8g dGFiX3Jvd2ZpbHRlcl9ncmVhdGVyXzEwazoKKyMgLSBJTlNFUlQgKDE2MDAwLCAxMDMpICBZ RVMsIGJlY2F1c2UgdGFiX3Jvd2ZpbHRlcl9ncmVhdGVyXzEwayBoYXMgbm8gZmlsdGVyCisj CiskcmVzdWx0ID0KKyAgJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs CisJIlNFTEVDVCBhLCBiIEZST00gdGFiX3Jvd2ZpbHRlcl9sZXNzXzEwayBPUkRFUiBCWSAx LCAyIik7CitpcyggJHJlc3VsdCwgcXEoMXwxMDAKKzJ8MjAwCis1NTAwfDMwMCksICdjaGVj ayBpbml0aWFsIGRhdGEgY29weSBmcm9tIHBhcnRpdGlvbiB0YWJfcm93ZmlsdGVyX2xlc3Nf MTBrJyk7CisKKyRyZXN1bHQgPQorICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywKKwkiU0VMRUNUIGEsIGIgRlJPTSB0YWJfcm93ZmlsdGVyX2dyZWF0ZXJfMTBr IE9SREVSIEJZIDEsIDIiKTsKK2lzKCAkcmVzdWx0LCBxcSgxNTAwMHwxMDIKKzE2MDAwfDEw MyksICdjaGVjayBpbml0aWFsIGRhdGEgY29weSBmcm9tIHBhcnRpdGlvbiB0YWJfcm93Zmls dGVyX2dyZWF0ZXJfMTBrJworKTsKKworIyBUaGUgZm9sbG93aW5nIGNvbW1hbmRzIGFyZSBl eGVjdXRlZCBhZnRlciBDUkVBVEUgU1VCU0NSSVBUSU9OLCBzbyB0aGVzZSBTUUwKKyMgY29t bWFuZHMgYXJlIGZvciB0ZXN0aW5nIG5vcm1hbCBsb2dpY2FsIHJlcGxpY2F0aW9uIGJlaGF2 aW9yLgorIworIyB0ZXN0IHJvdyBmaWx0ZXIgKElOU0VSVCwgVVBEQVRFLCBERUxFVEUpCisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJJTlNFUlQgSU5UTyB0 YWJfcm93ZmlsdGVyXzEgKGEsIGIpIFZBTFVFUyAoODAwLCAndGVzdCA4MDAnKSIpOworJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiSU5TRVJUIElOVE8gdGFi X3Jvd2ZpbHRlcl8xIChhLCBiKSBWQUxVRVMgKDE2MDAsICd0ZXN0IDE2MDAnKSIpOworJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiSU5TRVJUIElOVE8gdGFi X3Jvd2ZpbHRlcl8xIChhLCBiKSBWQUxVRVMgKDE2MDEsICd0ZXN0IDE2MDEnKSIpOworJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiVVBEQVRFIHRhYl9yb3dm aWx0ZXJfMSBTRVQgYiA9IE5VTEwgV0hFUkUgYSA9IDE2MDAiKTsKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlVQREFURSB0YWJfcm93ZmlsdGVyXzEgU0VU IGIgPSAndGVzdCAxNjAxIHVwZGF0ZWQnIFdIRVJFIGEgPSAxNjAxIik7Ciskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJJTlNFUlQgSU5UTyB0YWJfcm93Zmls dGVyXzIgKGMpIFZBTFVFUyAoMjEpLCAoMjIpLCAoMjMpLCAoMjQpLCAoMjUpIik7Ciskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJJTlNFUlQgSU5UTyB0YWJf cm93ZmlsdGVyXzQgKGMpIFZBTFVFUyAoMCksICgxMSksICgxMikiKTsKKworJG5vZGVfcHVi bGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKworIyBDaGVjayBleHBlY3Rl ZCByZXBsaWNhdGVkIHJvd3MgZm9yIHRhYl9yb3dmaWx0ZXJfMgorIyB0YXBfcHViXzEgZmls dGVyIGlzOiAoYyAlIDIgPSAwKQorIyB0YXBfcHViXzIgZmlsdGVyIGlzOiAoYyAlIDMgPSAw KQorIyBXaGVuIHRoZXJlIGFyZSBtdWx0aXBsZSBwdWJsaWNhdGlvbnMgZm9yIHRoZSBzYW1l IHRhYmxlLCB0aGUgZmlsdGVycworIyBleHByZXNzaW9ucyBhcmUgT1InZWQgdG9nZXRoZXIu IEluIHRoaXMgY2FzZSwgcm93cyBhcmUgcmVwbGljYXRlZCBpZgorIyBjIHZhbHVlIGlzIGRp dmlkZWQgYnkgMiBPUiAzLgorIworIyBFeHBlY3Qgb3JpZ2luYWwgcm93cyAoMiwgMywgNCwg NiwgOCwgOSwgMTAsIDEyLCAxNCwgMTUsIDE2LCAxOCwgMjApCisjIFBsdXMgKDIxLCAyMiwg MjQpCisjCiskcmVzdWx0ID0KKyAgJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsCisJIlNFTEVDVCBjb3VudChjKSwgbWluKGMpLCBtYXgoYykgRlJPTSB0YWJfcm93 ZmlsdGVyXzIiKTsKK2lzKCRyZXN1bHQsIHFxKDE2fDJ8MjQpLCAnY2hlY2sgcmVwbGljYXRl ZCByb3dzIHRvIHRhYl9yb3dmaWx0ZXJfMicpOworCisjIENoZWNrIGV4cGVjdGVkIHJlcGxp Y2F0ZWQgcm93cyBmb3IgdGFiX3Jvd2ZpbHRlcl80CisjIChzYW1lIHRhYmxlIGluIHR3byBw dWJsaWNhdGlvbnMgYnV0IG9ubHkgb25lIGhhcyBhIGZpbHRlcikuCisjIHRhcF9wdWJfNGEg ZmlsdGVyIGlzOiAoYyAlIDIgPSAwKQorIyB0YXBfcHViXzRiIGZpbHRlciBpczogPG5vIGZp bHRlcj4KKyMgRXhwcmVzc2lvbnMgYXJlIE9SJ2VkIHRvZ2V0aGVyIGJ1dCB3aGVuIHRoZXJl IGlzIG5vIGZpbHRlciBpdCBqdXN0IG1lYW5zCisjIE9SIGV2ZXJ5dGhpbmcgLSBlLmcuIHNh bWUgYXMgbm8gZmlsdGVyIGF0IGFsbC4KKyMgRXhwZWN0IGFsbCByb3dzIGZyb20gaW5pdGlh bCBjb3B5OiAoMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTApCisjIEFuZCBhbHNvICgw LCAxMSwgMTIpCiskcmVzdWx0ID0KKyAgJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsCisJIlNFTEVDVCBjb3VudChjKSwgbWluKGMpLCBtYXgoYykgRlJPTSB0YWJf cm93ZmlsdGVyXzQiKTsKK2lzKCRyZXN1bHQsIHFxKDEzfDB8MTIpLCAnY2hlY2sgcmVwbGlj YXRlZCByb3dzIHRvIHRhYl9yb3dmaWx0ZXJfNCcpOworCisjIENoZWNrIGV4cGVjdGVkIHJl cGxpY2F0ZWQgcm93cyBmb3IgdGFiX3Jvd2ZpbHRlcl8xCisjIHRhcF9wdWJfMSBmaWx0ZXIg aXM6IChhID4gMTAwMCBBTkQgYiA8PiAnZmlsdGVyZWQnKQorIworIyAtIDEwMDEsIDEwMDIs IDE5ODAgYWxyZWFkeSBleGlzdCBmcm9tIGluaXRpYWwgZGF0YSBjb3B5CisjIC0gSU5TRVJU ICg4MDAsICd0ZXN0IDgwMCcpICAgTk8sIGJlY2F1c2UgODAwIGlzIG5vdCA+IDEwMDAKKyMg LSBJTlNFUlQgKDE2MDAsICd0ZXN0IDE2MDAnKSBZRVMsIGJlY2F1c2UgMTYwMCA+IDEwMDAg YW5kICd0ZXN0IDE2MDAnIDw+ICdmaWx0ZXJlZCcKKyMgLSBJTlNFUlQgKDE2MDEsICd0ZXN0 IDE2MDEnKSBZRVMsIGJlY2F1c2UgMTYwMSA+IDEwMDAgYW5kICd0ZXN0IDE2MDEnIDw+ICdm aWx0ZXJlZCcKKyMgLSBVUERBVEUgKDE2MDAsIE5VTEwpICAgICAgICBZRVMsIGJlY2F1c2Ug MTYwMCA+IDEwMDAgYW5kICd0ZXN0IDE2MDAnIDw+ICdmaWx0ZXJlZCcKKyMgLSBVUERBVEUg KDE2MDEsICd0ZXN0IDE2MDEgdXBkYXRlZCcpIFlFUywgYmVjYXVzZSAxNjAxID4gMTAwMCBh bmQgJ3Rlc3QgMTYwMScgPD4gJ2ZpbHRlcmVkJworIworJHJlc3VsdCA9CisgICRub2RlX3N1 YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgYSwgYiBGUk9NIHRh Yl9yb3dmaWx0ZXJfMSBPUkRFUiBCWSAxLCAyIik7CitpcyggJHJlc3VsdCwgcXEoMTAwMXx0 ZXN0IDEwMDEKKzEwMDJ8dGVzdCAxMDAyCisxNjAwfAorMTYwMXx0ZXN0IDE2MDEgdXBkYXRl ZAorMTk4MHxub3QgZmlsdGVyZWQpLCAnY2hlY2sgcmVwbGljYXRlZCByb3dzIHRvIHRhYmxl IHRhYl9yb3dmaWx0ZXJfMScpOworCisjIFB1Ymxpc2ggdXNpbmcgcm9vdCBwYXJ0aXRpb25l ZCB0YWJsZQorIyBVc2UgYSBkaWZmZXJlbnQgcGFydGl0aW9uZWQgdGFibGUgbGF5b3V0IChl eGVyY2lzZSBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCkKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkFMVEVSIFBVQkxJQ0FUSU9OIHRhcF9wdWJfMyBT RVQgKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gdHJ1ZSkiKTsKKyRub2RlX3N1YnNj cmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJUUlVOQ0FURSBUQUJMRSB0YWJfcm93 ZmlsdGVyX3BhcnRpdGlvbmVkIik7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywKKwkiQUxURVIgU1VCU0NSSVBUSU9OIHRhcF9zdWIgUkVGUkVTSCBQVUJMSUNB VElPTiBXSVRIIChjb3B5X2RhdGEgPSB0cnVlKSIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywKKwkiSU5TRVJUIElOVE8gdGFiX3Jvd2ZpbHRlcl9wYXJ0aXRp b25lZCAoYSwgYikgVkFMVUVTKDQwMDAsIDQwMCksKDQwMDEsIDQwMSksKDQwMDIsIDQwMiki CispOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiSU5TRVJU IElOVE8gdGFiX3Jvd2ZpbHRlcl9sZXNzXzEwayAoYSwgYikgVkFMVUVTKDQ1MDAsIDQ1MCki KTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIklOU0VSVCBJ TlRPIHRhYl9yb3dmaWx0ZXJfbGVzc18xMGsgKGEsIGIpIFZBTFVFUyg1NjAwLCAxMjMpIik7 Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJJTlNFUlQgSU5U TyB0YWJfcm93ZmlsdGVyX2dyZWF0ZXJfMTBrIChhLCBiKSBWQUxVRVMoMTQwMDAsIDE5NTAp Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJVUERBVEUg dGFiX3Jvd2ZpbHRlcl9sZXNzXzEwayBTRVQgYiA9IDMwIFdIRVJFIGEgPSA0MDAxIik7Cisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJERUxFVEUgRlJPTSB0 YWJfcm93ZmlsdGVyX2xlc3NfMTBrIFdIRVJFIGEgPSA0MDAyIik7CisKKyRub2RlX3B1Ymxp c2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CisKKyMgQ2hlY2sgZXhwZWN0ZWQg cmVwbGljYXRlZCByb3dzIGZvciBwYXJ0aXRpb25zCisjIHB1YmxpY2F0aW9uIG9wdGlvbiBw dWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCBpcyB0cnVlIHNvIHVzZSB0aGUgcm93IGZpbHRl cgorIyBmcm9tIHRoZSByb290IHBhcnRpdGlvbmVkIHRhYmxlCisjIHRhYl9yb3dmaWx0ZXJf cGFydGl0aW9uZWQgZmlsdGVyOiAoYSA8IDUwMDApCisjIHRhYl9yb3dmaWx0ZXJfbGVzc18x MGsgZmlsdGVyOiAgICAoYSA8IDYwMDApCisjIHRhYl9yb3dmaWx0ZXJfZ3JlYXRlcl8xMGsg ZmlsdGVyOiBubyBmaWx0ZXIKKyMKKyMgQWZ0ZXIgVFJVTkNBVEUsIFJFRlJFU0ggUFVCTElD QVRJT04sIHRoZSBpbml0aWFsIGRhdGEgY29weSB3aWxsIGFwcGx5IHRoZQorIyBwYXJ0aXRp b25lZCB0YWJsZSByb3cgZmlsdGVyLgorIyAtIElOU0VSVCAoMSwgMTAwKSAgICAgIFlFUywg MSA8IDUwMDAKKyMgLSBJTlNFUlQgKDcwMDAsIDEwMSkgICBOTywgNzAwMCBpcyBub3QgPCA1 MDAwCisjIC0gSU5TRVJUICgxNTAwMCwgMTAyKSAgTk8sIDE1MDAwIGlzIG5vdCA8IDUwMDAK KyMgLSBJTlNFUlQgKDU1MDAsIDMwMCkgICBOTywgNTUwMCBpcyBub3QgPCA1MDAwCisjIC0g SU5TRVJUICgyLCAyMDApICAgICAgWUVTLCAyIDwgNTAwMAorIyAtIElOU0VSVCAoNjAwNSwg MjAxKSAgIE5PLCA2MDA1IGlzIG5vdCA8IDUwMDAKKyMgLSBJTlNFUlQgKDE2MDAwLCAxMDMp ICBOTywgMTYwMDAgaXMgbm90IDwgNTAwMAorIworIyBFeGVjdXRlIFNRTCBjb21tYW5kcyBh ZnRlciBpbml0aWFsIGRhdGEgY29weSBmb3IgdGVzdGluZyB0aGUgbG9naWNhbAorIyByZXBs aWNhdGlvbiBiZWhhdmlvci4KKyMgLSBJTlNFUlQgKDQwMDAsIDQwMCkgICAgWUVTLCA0MDAw IDwgNTAwMAorIyAtIElOU0VSVCAoNDAwMSwgNDAxKSAgICBZRVMsIDQwMDEgPCA1MDAwCisj IC0gSU5TRVJUICg0MDAyLCA0MDIpICAgIFlFUywgNDAwMiA8IDUwMDAKKyMgLSBJTlNFUlQg KDQ1MDAsIDQ1MCkgICAgWUVTLCA0NTAwIDwgNTAwMAorIyAtIElOU0VSVCAoNTYwMCwgMTIz KSAgICBOTywgNTYwMCBpcyBub3QgPCA1MDAwCisjIC0gSU5TRVJUICgxNDAwMCwgMTk1MCkg IE5PLCAxNjAwMCBpcyBub3QgPCA1MDAwCisjIC0gVVBEQVRFICg0MDAxKSAgICAgICAgIFlF UywgNDAwMSA8IDUwMDAKKyMgLSBERUxFVEUgKDQwMDIpICAgICAgICAgWUVTLCA0MDAyIDwg NTAwMAorJHJlc3VsdCA9CisgICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLAorCSJTRUxFQ1QgYSwgYiBGUk9NIHRhYl9yb3dmaWx0ZXJfcGFydGl0aW9uZWQgT1JE RVIgQlkgMSwgMiIpOworaXMoICRyZXN1bHQsIHFxKDF8MTAwCisyfDIwMAorNDAwMHw0MDAK KzQwMDF8MzAKKzQ1MDB8NDUwKSwgJ2NoZWNrIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290 IGJlaGF2aW9yJyk7CisKKyRub2RlX3N1YnNjcmliZXItPnN0b3AoJ2Zhc3QnKTsKKyRub2Rl X3B1Ymxpc2hlci0+c3RvcCgnZmFzdCcpOwotLSAKMi4yMC4xCgo= --412c5a77b8c54439afa8759a2e76e736--