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 1m3PB4-0005k1-JS for pgsql-hackers@arkaria.postgresql.org; Tue, 13 Jul 2021 20:38:51 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1m3PB3-0003aI-F2 for pgsql-hackers@arkaria.postgresql.org; Tue, 13 Jul 2021 20:38:49 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1m3PB1-0003a9-CA for pgsql-hackers@lists.postgresql.org; Tue, 13 Jul 2021 20:38:49 +0000 Received: from new3-smtp.messagingengine.com ([66.111.4.229]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1m3PAv-0005mX-B7 for pgsql-hackers@lists.postgresql.org; Tue, 13 Jul 2021 20:38:46 +0000 Received: from compute1.internal (compute1.nyi.internal [10.202.2.41]) by mailnew.nyi.internal (Postfix) with ESMTP id 410F1580871; Tue, 13 Jul 2021 16:38:40 -0400 (EDT) Received: from imap21 ([10.202.2.71]) by compute1.internal (MEProxy); Tue, 13 Jul 2021 16:38:40 -0400 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=fm2; bh=/Pez7z5VbVThCfTsKepJ6ONUxR1zdXw SRtwnIqKoFwM=; b=H8uB9EReFCLbOVVf0TiFj+9psLIde40DuIumr4ezrkiUQ1f zaHYUrV8sZ/NV4FyKPRJfUGCQe4QxzekpBlGbiEy+quR5TW+SrXhvh4rfy+nMZOC FXXW8V9w4TQQvoXFO1XK8cbOTEhCLCRY0/jGu1I5iUOl3h/b3XEbDIYleptLzojA 0Jms5eqoift77TM62cZMyLDK2PhkzNEGXI4I0ryaZOTqneeHtRP20a3SPcSI+X5Q rnpfnVf/QYZbSPRLhIsAMDWXblw+HnXPIys1b7mbhMDPi2QxvT6aCUbiDQu4x6ag lbY6L+pW5O6cz+rPQvEkgAE7enAqsyv48cCXzkg== 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=fm3; bh=/Pez7z 5VbVThCfTsKepJ6ONUxR1zdXwSRtwnIqKoFwM=; b=sqGN6FTOiKmWIn/jEesHt9 yk7zdLHPzLuTRDmJ6WUqVF2ZO8YErtbIkjFa0eCT+Lh/WaTBb8/wzQ2oTwfA+KF/ FrexXVzPhdP/slbOaW7XjPtDRFJ5pp/JzkE3qn1iKviEHlVP8AI3lA/dlgcmtSrZ kQl2wwhW93r1eL+vAqCBf5h0anuJTQbT5IOK8Cj6TiNZqBpPGyZF6oJ8x343scyd KxQfvta1KDBGnxKsILEAwNs0JpmM932aT8BBEYkNoUFKYko59cOlBKWCddugFihz 0KFWqTvk1jZKFTIqRfmX1aWQujCJw0IRBQ+Zj6lggDyTRP1/N3YSsDzolM11qzYw == X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvtddrudeigddtkecutefuodetggdotefrodftvf curfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfghnecu uegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenuc fjughrpefofgggkfgjfhffhffvufgtsehmtderreerredtnecuhfhrohhmpedfgfhulhgv rhcuvfgrvhgvihhrrgdfuceovghulhgvrhesvghulhgvrhhtohdrtghomheqnecuggftrf grthhtvghrnhephfdvlefgkedvteejjeethfdujeefieelteejueefteffgeejtddvueek tdegffegnecuffhomhgrihhnpegvnhhtvghrphhrihhsvggusgdrtghomhenucevlhhush htvghrufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfhhrohhmpegvuhhlvghrsegvuhhl vghrthhordgtohhm X-ME-Proxy: Received: by mailuser.nyi.internal (Postfix, from userid 501) id 260C751C0060; Tue, 13 Jul 2021 16:38:39 -0400 (EDT) X-Mailer: MessagingEngine.com Webmail Interface User-Agent: Cyrus-JMAP/3.5.0-alpha0-533-gf73e617b8a-fm-20210712.002-gf73e617b Mime-Version: 1.0 Message-Id: In-Reply-To: References: <8cf1ea71-b609-00e8-b8f0-c85ba61b7312@pgmasters.net> <4dbad191-9b40-4bb6-8940-d18f2e93c3ce@www.fastmail.com> <5b9fceed-8f91-467f-a64e-2134c5c3f496@www.fastmail.com> <52edc9d2-8e52-4cde-9a15-991961b78387@www.fastmail.com> <9d5ef845-391a-4c66-b298-0f594d9e6828@www.fastmail.com> <7e4b5c48-a3d3-4b7e-b455-2d50c60a0ab7@www.fastmail.com> <57373e8b-1264-cd37-404e-8edbcf7884cc@enterprisedb.com> <86d76e89-9a96-411a-8077-f8918cbae2e1@www.fastmail.com> <3dbf7241-a417-45c9-9a0e-04a079de9b9f@www.fastmail.com> <0ca5b27f-edf8-4ef9-a9e2-533216890f62@www.fastmail.com> <532a18d8-ce90-4444-8570-8a9fcf09f329@www.fastmail.com> Date: Tue, 13 Jul 2021 17:37:55 -0300 From: "Euler Taveira" To: "Peter Smith" Cc: "Amit Kapila" , "Rahila Syed" , "Peter Eisentraut" , =?UTF-8?Q?=C3=96nder_Kalac=C4=B1?= , japin , "Michael Paquier" , "David Steele" , "Craig Ringer" , "Tomas Vondra" , "Amit Langote" , "PostgreSQL Hackers" Subject: Re: row filtering for logical replication Content-Type: multipart/mixed; boundary=6cd8d80aca5e4b2fa07fe89550d395b2 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --6cd8d80aca5e4b2fa07fe89550d395b2 Content-Type: multipart/alternative; boundary=27f682cdb752465cbe79dc6fe76a7e5c --27f682cdb752465cbe79dc6fe76a7e5c Content-Type: text/plain On Tue, Jul 13, 2021, at 12:25 AM, Peter Smith wrote: > I have reviewed the latest v18 patch. Below are some more review > comments and patches. Peter, thanks for quickly check the new patch. I'm attaching a new patch (v19) that addresses (a) this new review, (b) Tomas' review and (c) Greg's review. I also included the copy/equal node support for the new node (PublicationTable) mentioned by Tomas in another email. > 1. Commit comment - wording 8< > => > > I think this means to say: "Rows that don't satisfy an optional WHERE > clause will be filtered out." Agreed. > 2. Commit comment - wording > > "The row filter is per table, which allows different row filters to be > defined for different tables." > > => > > I think all that is the same as just saying: "The row filter is per table." Agreed. > 3. PG docs - independent improvement > > You wrote (ref [1] point 3): > > "I agree it can be confusing. BTW, CREATE PUBLICATION does not mention that the > root partitioned table is used. We should improve that sentence too." > > I agree, but that PG docs improvement is independent of your RowFilter > patch; please make another thread for that idea. I will. And I will also include the next item that I removed from the patch. > 4. doc/src/sgml/ref/create_publication.sgml - independent improvement > > @@ -131,9 +135,9 @@ CREATE PUBLICATION class="parameter">name > on its partitions) contained in the publication will be published > using the identity and schema of the partitioned table rather than > that of the individual partitions that are actually changed; the > - latter is the default. Enabling this allows the changes to be > - replicated into a non-partitioned table or a partitioned table > - consisting of a different set of partitions. > + latter is the default (false). Enabling this > + allows the changes to be replicated into a non-partitioned table or a > + partitioned table consisting of a different set of partitions. > > > I think that Tomas wrote (ref [2] point 2) that this change seems > unrelated to your RowFilter patch. > > I agree; I liked the change, but IMO you need to propose this one in > another thread too. Reverted. > 5. doc/src/sgml/ref/create_subscription.sgml - wording 8< > I felt that the sentence: "If any table in the publications has a > WHERE clause, data synchronization does not use it > if the subscriber is a PostgreSQL version > before 15." > > Could be expressed more simply like: "If the subscriber is a > PostgreSQL version before 15 then any row > filtering is ignored." Agreed. > 6. src/backend/commands/publicationcmds.c - wrong function comment 8< > /* > * Close all relations in the list. > + * > + * Publication node can have a different list element, hence, pub_drop_table > + * indicates if it has a Relation (true) or PublicationTable (false). > */ > static void > CloseTableList(List *rels) > > => > > The 2nd parameter does not exist in v18, so that comment about > pub_drop_table seems to be a cut/paste error from the OpenTableList. Oops. Removed. > src/backend/replication/logical/tablesync.c - bug ? > > @@ -829,16 +883,23 @@ copy_table(Relation rel) > relmapentry = logicalrep_rel_open(lrel.remoteid, NoLock); > Assert(rel == relmapentry->localrel); > > + /* List of columns for COPY */ > + attnamelist = make_copy_attnamelist(relmapentry); > + > /* Start copy on the publisher. */ > => > > I did not understand the above call to make_copy_attnamelist. The > result seems unused before it is overwritten later in this same > function (??) Good catch. This seems to be a leftover from an ancient version. > 7. src/backend/replication/logical/tablesync.c - > fetch_remote_table_info enhancement > > + /* Get relation qual */ > + if (walrcv_server_version(LogRepWorkerWalRcvConn) >= 150000) > + { > + resetStringInfo(&cmd); > + appendStringInfo(&cmd, > + "SELECT pg_get_expr(prqual, prrelid) " > + " FROM pg_publication p " > + " INNER JOIN pg_publication_rel pr " > + " ON (p.oid = pr.prpubid) " > + " WHERE pr.prrelid = %u " > + " AND p.pubname IN (", lrel->remoteid); > > => > > I think a small improvement is possible in this SQL. > > If we change that to "SELECT DISTINCT pg_get_expr(prqual, prrelid)"... > then it avoids the copy SQL from having multiple WHERE clauses which > are all identical. This could happen when subscribed to multiple > publications which had the same filter for the same table. Good catch! > 8. src/backend/replication/pgoutput/pgoutput.c - qual member is redundant > > @@ -99,6 +108,9 @@ typedef struct RelationSyncEntry > > bool replicate_valid; > PublicationActions pubactions; > + List *qual; /* row filter */ > + List *exprstate; /* ExprState for row filter */ > + TupleTableSlot *scantuple; /* tuple table slot for row filter */ > > => > > Now that the exprstate is introduced I think that the other member > "qual" is redundant, so it can be removed. I was thinking about it for the next patch. Removed. > 9. src/backend/replication/pgoutput/pgoutput.c - comment typo? 8< > typo: it/that ? > > I think it ought to say "This is the same code as ExecPrepareExpr() > but that is not used because"... Fixed. > 10. src/backend/replication/pgoutput/pgoutput.c - redundant debug logging? > > + /* Evaluates row filter */ > + result = pgoutput_row_filter_exec_expr(exprstate, ecxt); > + > + elog(DEBUG3, "row filter %smatched", result ? "" : "not "); > > The above debug logging is really only a repeat (with different > wording) of the same information already being logged inside the > pgoutput_row_filter_exec_expr function isn't it? Consider removing the > redundant logging. Agreed. Removed. -- Euler Taveira EDB https://www.enterprisedb.com/ --27f682cdb752465cbe79dc6fe76a7e5c Content-Type: text/html Content-Transfer-Encoding: quoted-printable
On Tue, Ju= l 13, 2021, at 12:25 AM, Peter Smith wrote:
I have reviewed the latest v18 patch. B= elow are some more review
comments and patches.
<= /blockquote>
Peter, thanks for quickly check the new patch. I'm atta= ching a new patch (v19)
that addresses (a) this new review= , (b) Tomas' review and (c) Greg's review. I
also included= the copy/equal node support for the new node (PublicationTable)
mentioned by Tomas in another email.

1. Commit comment - word= ing
8<

=3D>

I think this means to say: "Rows that don't satisfy an optional WH= ERE
clause will be filtered out."
Agreed.

2. Commit comment - wording

= "The row filter is per table, which allows different row filters to be
defined for different tables."

=3D>

I think all that is the same as ju= st saying: "The row filter is per table."
Agr= eed.

3. PG docs - independent improvement

You wrote (ref [1] point 3):

"I agree it = can be confusing. BTW, CREATE PUBLICATION does not mention that the
<= /div>
root partitioned table is used. We should improve that sentenc= e too."

I agree, but that PG docs improveme= nt is independent of your RowFilter
patch; please make ano= ther thread for that idea.
I will. And I will= also include the next item that I removed from the patch.

4. doc/sr= c/sgml/ref/create_publication.sgml - independent improvement

@@ -131,9 +135,9 @@ CREATE PUBLICATION <replaceable=
class=3D"parameter">name</replaceable>
=
           on its= partitions) contained in the publication will be published
           using the= identity and schema of the partitioned table rather than
=            that of the= individual partitions that are actually changed; the
-&nb= sp;         latter is the defaul= t.  Enabling this allows the changes to be
- &nb= sp;        replicated into a non-part= itioned table or a partitioned table
-   &n= bsp;      consisting of a different set of part= itions.
+        &= nbsp; latter is the default (<literal>false</literal>). = ; Enabling this
+       = ;   allows the changes to be replicated into a non-partitioned= table or a
+       &nb= sp;  partitioned table consisting of a different set of partitions.=
          &l= t;/para>

I think that Tomas wrote (ref [= 2] point 2) that this change seems
unrelated to your RowFi= lter patch.

I agree; I liked the change, bu= t IMO you need to propose this one in
another thread too.<= br>
Reverted.

5. doc/src/sgml/ref/create_subs= cription.sgml - wording
8<
<= br>
I felt that= the sentence: "If any table in the publications has a
<= ;literal>WHERE</literal> clause, data synchronization does not = use it
if the subscriber is a <productname>PostgreSQ= L</productname> version
before 15."
Could be expressed more simply like: "If the subscriber is = a
<productname>PostgreSQL</productname> versio= n before 15 then any row
filtering is ignored."
<= /blockquote>
Agreed.

6. src/backend/commands/publicationcmds.c -= wrong function comment
8<
<= br>
/*
  * Close all relations in the list.
+ *
+ * Publication node can have a different list element, hence, p= ub_drop_table
+ * indicates if it has a Relation (true) or= PublicationTable (false).
  */
static = void
CloseTableList(List *rels)

=3D>

The 2nd parameter does not exist= in v18, so that comment about
pub_drop_table seems to be = a cut/paste error from the OpenTableList.
Oop= s. Removed.

src/backend/replication/logical/tablesync.c - bug ?
<= /div>

@@ -829,16 +883,23 @@ copy_table(Relation rel)<= br>
  relmapentry =3D logicalrep_rel_open(lrel.remoteid, = NoLock);
  Assert(rel =3D=3D relmapentry->localrel= );

+ /* List of columns for COPY */
+ attnamelist =3D make_copy_attnamelist(relmapentry);
+
  /* Start copy on the publisher. */
=3D>

I did not understand the above c= all to make_copy_attnamelist. The
result seems unused befo= re it is overwritten later in this same
function (??)
<= /div>
Good catch. This seems to be a leftover from an a= ncient version.

7. src/backend/replication/logical/tablesync.c = -
fetch_remote_table_info enhancement

<= /div>
+ /* Get relation qual */
+ if (walrcv_server_ve= rsion(LogRepWorkerWalRcvConn) >=3D 150000)
+ {
+ resetStringInfo(&cmd);
+ appendStringInfo(&= ;cmd,
+ "SELECT pg_get_expr(prqual, prrelid) "
+ "  FROM pg_publication p "
+ "  INNER JOIN = pg_publication_rel pr "
+ "     &= nbsp; ON (p.oid =3D pr.prpubid) "
+ " WHERE pr.prrelid =3D= %u "
+ "   AND p.pubname IN (", lrel->remote= id);

=3D>

I= think a small improvement is possible in this SQL.

If we change that to "SELECT DISTINCT pg_get_expr(prqual, prrel= id)"...
then it avoids the copy SQL from having multiple W= HERE clauses which
are all identical. This could happen wh= en subscribed to multiple
publications which had the same = filter for the same table.
Good catch!

8.= src/backend/replication/pgoutput/pgoutput.c - qual member is redundant<= br>

@@ -99,6 +108,9 @@ typedef struct RelationS= yncEntry

  bool replicate_valid;
  PublicationActions pubactions;
+ List = ;   *qual; /* row filter */
+ List  &n= bsp; *exprstate; /* ExprState for row filter */
+ TupleTab= leSlot *scantuple; /* tuple table slot for row filter */
<= br>
=3D>

Now that the exprstat= e is introduced I think that the other member
"qual" is re= dundant, so it can be removed.
I was thinking= about it for the next patch. Removed.

9. src/backend/replication/pg= output/pgoutput.c - comment typo?
8<

t= ypo: it/that ?

I think it ought to say "Thi= s is the same code as ExecPrepareExpr()
but that is not us= ed because"...
Fixed.

10. src/backend/rep= lication/pgoutput/pgoutput.c - redundant debug logging?
+ /* Evaluates row filter */
+ result =3D pgo= utput_row_filter_exec_expr(exprstate, ecxt);
+
+ elog(DEBUG3, "row filter %smatched", result ? "" : "not ");

The above debug logging is really only a repeat (w= ith different
wording) of the same information already bei= ng logged inside the
pgoutput_row_filter_exec_expr functio= n isn't it? Consider removing the
redundant logging.
Agreed. Removed.


=
--
Euler Taveira

--27f682cdb752465cbe79dc6fe76a7e5c-- --6cd8d80aca5e4b2fa07fe89550d395b2 Content-Disposition: attachment;filename="v19-0001-Row-filter-for-logical-replication.patch" Content-Type: text/x-patch; name="v19-0001-Row-filter-for-logical-replication.patch" Content-Transfer-Encoding: BASE64 RnJvbSBlZGM5ZWE4MzJiYWNiNjYzYjQ3Mzc1YjIxMzJmZTNmOWQ3NDgyZjc4IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBFdWxlciBUYXZlaXJhIDxldWxlci50YXZlaXJhQGVu dGVycHJpc2VkYi5jb20+CkRhdGU6IE1vbiwgMTggSmFuIDIwMjEgMTI6MDc6NTEgLTAzMDAK U3ViamVjdDogW1BBVENIIHYxOV0gUm93IGZpbHRlciBmb3IgbG9naWNhbCByZXBsaWNhdGlv bgoKVGhpcyBmZWF0dXJlIGFkZHMgcm93IGZpbHRlciBmb3IgcHVibGljYXRpb24gdGFibGVz LiBXaGVuIGEgcHVibGljYXRpb24KaXMgZGVmaW5lZCBvciBtb2RpZmllZCwgcm93cyB0aGF0 IGRvbid0IHNhdGlzZnkgYW4gb3B0aW9uYWwgV0hFUkUgY2xhdXNlCndpbGwgYmUgZmlsdGVy ZWQgb3V0LiBUaGlzIGFsbG93cyBhIGRhdGFiYXNlIG9yIHNldCBvZiB0YWJsZXMgdG8gYmUK cGFydGlhbGx5IHJlcGxpY2F0ZWQuIFRoZSByb3cgZmlsdGVyIGlzIHBlciB0YWJsZS4gQSBu ZXcgcm93IGZpbHRlciBjYW4KYmUgYWRkZWQgc2ltcGx5IGJ5IHNwZWNpZnlpbmcgYSBXSEVS RSBjbGF1c2UgYWZ0ZXIgdGhlIHRhYmxlIG5hbWUuIFRoZQpXSEVSRSBjbGF1c2UgbXVzdCBi ZSBlbmNsb3NlZCBieSBwYXJlbnRoZXNlcy4KClRoZSBXSEVSRSBjbGF1c2Ugc2hvdWxkIHBy b2JhYmx5IGNvbnRhaW4gb25seSBjb2x1bW5zIHRoYXQgYXJlIHBhcnQgb2YgdGhlCnByaW1h cnkga2V5IG9yIHRoYXQgYXJlIGNvdmVyZWQgYnkgUkVQTElDQSBJREVOVElUWS4gT3RoZXJ3 aXNlLCBhbnkgREVMRVRFcwp3b24ndCBiZSByZXBsaWNhdGVkLiBERUxFVEUgdXNlcyB0aGUg b2xkIHJvdyB2ZXJzaW9uICh0aGF0IGlzIGxpbWl0ZWQgdG8KcHJpbWFyeSBrZXkgb3IgUkVQ TElDQSBJREVOVElUWSkgdG8gZXZhbHVhdGUgdGhlIHJvdyBmaWx0ZXIuIElOU0VSVCBhbmQg VVBEQVRFCnVzZSB0aGUgbmV3IHJvdyB2ZXJzaW9uIHRvIGV2YWx1YXRlIHRoZSByb3cgZmls dGVyLCBoZW5jZSwgeW91IGNhbiB1c2UgYW55CmNvbHVtbi4gSWYgdGhlIHJvdyBmaWx0ZXIg ZXZhbHVhdGVzIHRvIE5VTEwsIGl0IHJldHVybnMgZmFsc2UuIEZvciBzaW1wbGljaXR5LApm dW5jdGlvbnMgYXJlIG5vdCBhbGxvd2VkOyBpdCBjb3VsZCBwb3NzaWJseSBiZSBhZGRyZXNz ZWQgaW4gYSBmdXR1cmUgcGF0Y2guCgpJZiB5b3UgY2hvb3NlIHRvIGRvIHRoZSBpbml0aWFs IHRhYmxlIHN5bmNocm9uaXphdGlvbiwgb25seSBkYXRhIHRoYXQgc2F0aXNmaWVzCnRoZSBy b3cgZmlsdGVycyBpcyBzZW50LiBJZiB0aGUgc3Vic2NyaXB0aW9uIGhhcyBzZXZlcmFsIHB1 YmxpY2F0aW9ucyBpbiB3aGljaAphIHRhYmxlIGhhcyBiZWVuIHB1Ymxpc2hlZCB3aXRoIGRp ZmZlcmVudCBXSEVSRSBjbGF1c2VzLCByb3dzIG11c3Qgc2F0aXNmeSBhbGwKZXhwcmVzc2lv bnMgdG8gYmUgY29waWVkLiBJZiBzdWJzY3JpYmVyIGlzIGEgcHJlLTE1IHZlcnNpb24sIGRh dGEKc3luY2hyb25pemF0aW9uIHdvbid0IHVzZSByb3cgZmlsdGVycyBpZiB0aGV5IGFyZSBk ZWZpbmVkIGluIHRoZSBwdWJsaXNoZXIuClByZXZpb3VzIHZlcnNpb25zIGNhbm5vdCBoYW5k bGUgcm93IGZpbHRlcnMuCgpJZiB5b3VyIHB1YmxpY2F0aW9uIGNvbnRhaW5zIGEgcGFydGl0 aW9uZWQgdGFibGUsIHRoZSBwdWJsaWNhdGlvbiBwYXJhbWV0ZXIKcHVibGlzaF92aWFfcGFy dGl0aW9uX3Jvb3QgZGV0ZXJtaW5lcyBpZiBpdCB1c2VzIHRoZSBwYXJ0aXRpb24gcm93IGZp bHRlciAoaWYKdGhlIHBhcmFtZXRlciBpcyBmYWxzZSwgdGhlIGRlZmF1bHQpIG9yIHRoZSBy b290IHBhcnRpdGlvbmVkIHRhYmxlIHJvdyBmaWx0ZXIuCi0tLQogZG9jL3NyYy9zZ21sL2Nh dGFsb2dzLnNnbWwgICAgICAgICAgICAgICAgICB8ICAgOCArCiBkb2Mvc3JjL3NnbWwvcmVm L2FsdGVyX3B1YmxpY2F0aW9uLnNnbWwgICAgIHwgIDExICstCiBkb2Mvc3JjL3NnbWwvcmVm L2NyZWF0ZV9wdWJsaWNhdGlvbi5zZ21sICAgIHwgIDMzICsrLQogZG9jL3NyYy9zZ21sL3Jl Zi9jcmVhdGVfc3Vic2NyaXB0aW9uLnNnbWwgICB8ICAxMCArLQogc3JjL2JhY2tlbmQvY2F0 YWxvZy9wZ19wdWJsaWNhdGlvbi5jICAgICAgICB8ICA0NyArKy0KIHNyYy9iYWNrZW5kL2Nv bW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jICAgICAgfCAxMTAgKysrKystLS0KIHNyYy9iYWNr ZW5kL25vZGVzL2NvcHlmdW5jcy5jICAgICAgICAgICAgICAgfCAgMTQgKwogc3JjL2JhY2tl bmQvbm9kZXMvZXF1YWxmdW5jcy5jICAgICAgICAgICAgICB8ICAxMiArCiBzcmMvYmFja2Vu ZC9wYXJzZXIvZ3JhbS55ICAgICAgICAgICAgICAgICAgIHwgIDI0ICstCiBzcmMvYmFja2Vu ZC9wYXJzZXIvcGFyc2VfYWdnLmMgICAgICAgICAgICAgIHwgIDEwICsKIHNyYy9iYWNrZW5k L3BhcnNlci9wYXJzZV9leHByLmMgICAgICAgICAgICAgfCAgMTMgKwogc3JjL2JhY2tlbmQv cGFyc2VyL3BhcnNlX2Z1bmMuYyAgICAgICAgICAgICB8ICAgMyArCiBzcmMvYmFja2VuZC9w YXJzZXIvcGFyc2Vfb3Blci5jICAgICAgICAgICAgIHwgICA3ICsKIHNyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL2xvZ2ljYWwvdGFibGVzeW5jLmMgfCAgOTUgKysrKysrLQogc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYyB8IDI1NSArKysrKysrKysrKysr KysrLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYyAgICAgICAgICAgICAgICAgICB8ICAy NCArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuaCAgICAgICAgICAgICAgICAgICB8ICAg MSArCiBzcmMvYmluL3BzcWwvZGVzY3JpYmUuYyAgICAgICAgICAgICAgICAgICAgIHwgIDE1 ICstCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmggICAgICAgIHwgICA5 ICstCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uX3JlbC5oICAgIHwgICA2 ICsKIHNyYy9pbmNsdWRlL25vZGVzL25vZGVzLmggICAgICAgICAgICAgICAgICAgfCAgIDEg Kwogc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oICAgICAgICAgICAgICB8ICAxMSAr LQogc3JjL2luY2x1ZGUvcGFyc2VyL3BhcnNlX25vZGUuaCAgICAgICAgICAgICB8ICAgMSAr CiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dCAgIHwgIDcxICsr KysrCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9wdWJsaWNhdGlvbi5zcWwgICAgICAgIHwgIDMy ICsrKwogc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDIxX3Jvd19maWx0ZXIucGwgICB8IDI5 OCArKysrKysrKysrKysrKysrKysrKwogMjYgZmlsZXMgY2hhbmdlZCwgMTA0NyBpbnNlcnRp b25zKCspLCA3NCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9z dWJzY3JpcHRpb24vdC8wMjFfcm93X2ZpbHRlci5wbAoKZGlmZiAtLWdpdCBhL2RvYy9zcmMv c2dtbC9jYXRhbG9ncy5zZ21sIGIvZG9jL3NyYy9zZ21sL2NhdGFsb2dzLnNnbWwKaW5kZXgg ZjUxN2E3ZDRhZi4uZGJmMmY0NmMwMCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2NhdGFs b2dzLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2NhdGFsb2dzLnNnbWwKQEAgLTYyMzMsNiAr NjIzMywxNCBAQCBTQ1JBTS1TSEEtMjU2JDxyZXBsYWNlYWJsZT4mbHQ7aXRlcmF0aW9uIGNv dW50Jmd0OzwvcmVwbGFjZWFibGU+OjxyZXBsYWNlYWJsZT4mbAogICAgICAgIFJlZmVyZW5j ZSB0byByZWxhdGlvbgogICAgICAgPC9wYXJhPjwvZW50cnk+CiAgICAgIDwvcm93PgorCisg ICAgIDxyb3c+CisgICAgICA8ZW50cnkgcm9sZT0iY2F0YWxvZ190YWJsZV9lbnRyeSI+PHBh cmEgcm9sZT0iY29sdW1uX2RlZmluaXRpb24iPgorICAgICAgPHN0cnVjdGZpZWxkPnBycXVh bDwvc3RydWN0ZmllbGQ+IDx0eXBlPnBnX25vZGVfdHJlZTwvdHlwZT4KKyAgICAgIDwvcGFy YT4KKyAgICAgIDxwYXJhPkV4cHJlc3Npb24gdHJlZSAoaW4gPGZ1bmN0aW9uPm5vZGVUb1N0 cmluZygpPC9mdW5jdGlvbj4KKyAgICAgIHJlcHJlc2VudGF0aW9uKSBmb3IgdGhlIHJlbGF0 aW9uJ3MgcXVhbGlmeWluZyBjb25kaXRpb248L3BhcmE+PC9lbnRyeT4KKyAgICAgPC9yb3c+ CiAgICAgPC90Ym9keT4KICAgIDwvdGdyb3VwPgogICA8L3RhYmxlPgpkaWZmIC0tZ2l0IGEv ZG9jL3NyYy9zZ21sL3JlZi9hbHRlcl9wdWJsaWNhdGlvbi5zZ21sIGIvZG9jL3NyYy9zZ21s L3JlZi9hbHRlcl9wdWJsaWNhdGlvbi5zZ21sCmluZGV4IGZhYTExNGIyYzYuLjRiYjQzMTQ0 NTggMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvYWx0ZXJfcHVibGljYXRpb24uc2dt bAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL2FsdGVyX3B1YmxpY2F0aW9uLnNnbWwKQEAgLTIx LDggKzIxLDggQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAKICA8cmVmc3lub3BzaXNk aXY+CiA8c3lub3BzaXM+Ci1BTFRFUiBQVUJMSUNBVElPTiA8cmVwbGFjZWFibGUgY2xhc3M9 InBhcmFtZXRlciI+bmFtZTwvcmVwbGFjZWFibGU+IEFERCBUQUJMRSBbIE9OTFkgXSA8cmVw bGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+dGFibGVfbmFtZTwvcmVwbGFjZWFibGU+IFsg KiBdIFssIC4uLl0KLUFMVEVSIFBVQkxJQ0FUSU9OIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFy YW1ldGVyIj5uYW1lPC9yZXBsYWNlYWJsZT4gU0VUIFRBQkxFIFsgT05MWSBdIDxyZXBsYWNl YWJsZSBjbGFzcz0icGFyYW1ldGVyIj50YWJsZV9uYW1lPC9yZXBsYWNlYWJsZT4gWyAqIF0g WywgLi4uXQorQUxURVIgUFVCTElDQVRJT04gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0 ZXIiPm5hbWU8L3JlcGxhY2VhYmxlPiBBREQgVEFCTEUgWyBPTkxZIF0gPHJlcGxhY2VhYmxl IGNsYXNzPSJwYXJhbWV0ZXIiPnRhYmxlX25hbWU8L3JlcGxhY2VhYmxlPiBbICogXSBbIFdI RVJFICggPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmV4cHJlc3Npb248L3JlcGxh Y2VhYmxlPiApIF0gWywgLi4uXQorQUxURVIgUFVCTElDQVRJT04gPHJlcGxhY2VhYmxlIGNs YXNzPSJwYXJhbWV0ZXIiPm5hbWU8L3JlcGxhY2VhYmxlPiBTRVQgVEFCTEUgWyBPTkxZIF0g PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnRhYmxlX25hbWU8L3JlcGxhY2VhYmxl PiBbICogXSBbIFdIRVJFICggPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmV4cHJl c3Npb248L3JlcGxhY2VhYmxlPiApIF0gWywgLi4uXQogQUxURVIgUFVCTElDQVRJT04gPHJl cGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm5hbWU8L3JlcGxhY2VhYmxlPiBEUk9QIFRB QkxFIFsgT05MWSBdIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj50YWJsZV9uYW1l PC9yZXBsYWNlYWJsZT4gWyAqIF0gWywgLi4uXQogQUxURVIgUFVCTElDQVRJT04gPHJlcGxh Y2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm5hbWU8L3JlcGxhY2VhYmxlPiBTRVQgKCA8cmVw bGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+cHVibGljYXRpb25fcGFyYW1ldGVyPC9yZXBs YWNlYWJsZT4gWz0gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnZhbHVlPC9yZXBs YWNlYWJsZT5dIFssIC4uLiBdICkKIEFMVEVSIFBVQkxJQ0FUSU9OIDxyZXBsYWNlYWJsZSBj bGFzcz0icGFyYW1ldGVyIj5uYW1lPC9yZXBsYWNlYWJsZT4gT1dORVIgVE8geyA8cmVwbGFj ZWFibGU+bmV3X293bmVyPC9yZXBsYWNlYWJsZT4gfCBDVVJSRU5UX1JPTEUgfCBDVVJSRU5U X1VTRVIgfCBTRVNTSU9OX1VTRVIgfQpAQCAtOTIsNyArOTIsMTIgQEAgQUxURVIgUFVCTElD QVRJT04gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm5hbWU8L3JlcGxhY2VhYmxl PiBSRU5BTUUgVE8gPHIKICAgICAgIHRhYmxlIG5hbWUsIG9ubHkgdGhhdCB0YWJsZSBpcyBh ZmZlY3RlZC4gIElmIDxsaXRlcmFsPk9OTFk8L2xpdGVyYWw+IGlzIG5vdAogICAgICAgc3Bl Y2lmaWVkLCB0aGUgdGFibGUgYW5kIGFsbCBpdHMgZGVzY2VuZGFudCB0YWJsZXMgKGlmIGFu eSkgYXJlCiAgICAgICBhZmZlY3RlZC4gIE9wdGlvbmFsbHksIDxsaXRlcmFsPio8L2xpdGVy YWw+IGNhbiBiZSBzcGVjaWZpZWQgYWZ0ZXIgdGhlIHRhYmxlCi0gICAgICBuYW1lIHRvIGV4 cGxpY2l0bHkgaW5kaWNhdGUgdGhhdCBkZXNjZW5kYW50IHRhYmxlcyBhcmUgaW5jbHVkZWQu CisgICAgICBuYW1lIHRvIGV4cGxpY2l0bHkgaW5kaWNhdGUgdGhhdCBkZXNjZW5kYW50IHRh YmxlcyBhcmUgaW5jbHVkZWQuIElmIHRoZQorICAgICAgb3B0aW9uYWwgPGxpdGVyYWw+V0hF UkU8L2xpdGVyYWw+IGNsYXVzZSBpcyBzcGVjaWZpZWQsIHJvd3MgdGhhdCBkbyBub3QKKyAg ICAgIHNhdGlzZnkgdGhlIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5leHByZXNz aW9uPC9yZXBsYWNlYWJsZT4gd2lsbAorICAgICAgbm90IGJlIHB1Ymxpc2hlZC4gTm90ZSB0 aGF0IHBhcmVudGhlc2VzIGFyZSByZXF1aXJlZCBhcm91bmQgdGhlCisgICAgICBleHByZXNz aW9uLiBUaGUgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmV4cHJlc3Npb248L3Jl cGxhY2VhYmxlPgorICAgICAgaXMgZXZhbHVhdGVkIHdpdGggdGhlIHJvbGUgdXNlZCBmb3Ig dGhlIHJlcGxpY2F0aW9uIGNvbm5lY3Rpb24uCiAgICAgIDwvcGFyYT4KICAgICA8L2xpc3Rp dGVtPgogICAgPC92YXJsaXN0ZW50cnk+CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVm L2NyZWF0ZV9wdWJsaWNhdGlvbi5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfcHVi bGljYXRpb24uc2dtbAppbmRleCBmZjgyZmJjYTU1Li4zNTAwNmQ5ZmZjIDEwMDY0NAotLS0g YS9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9wdWJsaWNhdGlvbi5zZ21sCisrKyBiL2RvYy9z cmMvc2dtbC9yZWYvY3JlYXRlX3B1YmxpY2F0aW9uLnNnbWwKQEAgLTIyLDcgKzIyLDcgQEAg UG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAgPHJlZnN5bm9wc2lzZGl2PgogPHN5bm9wc2lz PgogQ1JFQVRFIFBVQkxJQ0FUSU9OIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5u YW1lPC9yZXBsYWNlYWJsZT4KLSAgICBbIEZPUiBUQUJMRSBbIE9OTFkgXSA8cmVwbGFjZWFi bGUgY2xhc3M9InBhcmFtZXRlciI+dGFibGVfbmFtZTwvcmVwbGFjZWFibGU+IFsgKiBdIFss IC4uLl0KKyAgICBbIEZPUiBUQUJMRSBbIE9OTFkgXSA8cmVwbGFjZWFibGUgY2xhc3M9InBh cmFtZXRlciI+dGFibGVfbmFtZTwvcmVwbGFjZWFibGU+IFsgKiBdIFsgV0hFUkUgKCA8cmVw bGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+ZXhwcmVzc2lvbjwvcmVwbGFjZWFibGU+ICkg XSBbLCAuLi5dCiAgICAgICB8IEZPUiBBTEwgVEFCTEVTIF0KICAgICBbIFdJVEggKCA8cmVw bGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+cHVibGljYXRpb25fcGFyYW1ldGVyPC9yZXBs YWNlYWJsZT4gWz0gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnZhbHVlPC9yZXBs YWNlYWJsZT5dIFssIC4uLiBdICkgXQogPC9zeW5vcHNpcz4KQEAgLTcxLDYgKzcxLDEwIEBA IENSRUFURSBQVUJMSUNBVElPTiA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bmFt ZTwvcmVwbGFjZWFibGU+CiAgICAgICBUaGlzIGRvZXMgbm90IGFwcGx5IHRvIGEgcGFydGl0 aW9uZWQgdGFibGUsIGhvd2V2ZXIuICBUaGUgcGFydGl0aW9ucyBvZgogICAgICAgYSBwYXJ0 aXRpb25lZCB0YWJsZSBhcmUgYWx3YXlzIGltcGxpY2l0bHkgY29uc2lkZXJlZCBwYXJ0IG9m IHRoZQogICAgICAgcHVibGljYXRpb24sIHNvIHRoZXkgYXJlIG5ldmVyIGV4cGxpY2l0bHkg YWRkZWQgdG8gdGhlIHB1YmxpY2F0aW9uLgorICAgICAgSWYgdGhlIG9wdGlvbmFsIDxsaXRl cmFsPldIRVJFPC9saXRlcmFsPiBjbGF1c2UgaXMgc3BlY2lmaWVkLCByb3dzIHRoYXQgZG8g CisgICAgICBub3Qgc2F0aXNmeSB0aGUgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIi PmV4cHJlc3Npb248L3JlcGxhY2VhYmxlPiAKKyAgICAgIHdpbGwgbm90IGJlIHB1Ymxpc2hl ZC4gTm90ZSB0aGF0IHBhcmVudGhlc2VzIGFyZSByZXF1aXJlZCBhcm91bmQgdGhlIAorICAg ICAgZXhwcmVzc2lvbi4gSXQgaGFzIG5vIGVmZmVjdCBvbiA8bGl0ZXJhbD5UUlVOQ0FURTwv bGl0ZXJhbD4gY29tbWFuZHMuCiAgICAgIDwvcGFyYT4KIAogICAgICA8cGFyYT4KQEAgLTE4 Miw2ICsxODYsMjEgQEAgQ1JFQVRFIFBVQkxJQ0FUSU9OIDxyZXBsYWNlYWJsZSBjbGFzcz0i cGFyYW1ldGVyIj5uYW1lPC9yZXBsYWNlYWJsZT4KICAgIGRpc2FsbG93ZWQgb24gdGhvc2Ug dGFibGVzLgogICA8L3BhcmE+CiAKKyAgPHBhcmE+CisgICBUaGUgPGxpdGVyYWw+V0hFUkU8 L2xpdGVyYWw+IGNsYXVzZSBzaG91bGQgY29udGFpbiBvbmx5IGNvbHVtbnMgdGhhdCBhcmUK KyAgIHBhcnQgb2YgdGhlIHByaW1hcnkga2V5IG9yIGJlIGNvdmVyZWQgIGJ5IDxsaXRlcmFs PlJFUExJQ0EKKyAgIElERU5USVRZPC9saXRlcmFsPiBvdGhlcndpc2UsIDxjb21tYW5kPkRF TEVURTwvY29tbWFuZD4gb3BlcmF0aW9ucyB3aWxsIG5vdAorICAgYmUgcmVwbGljYXRlZC4g VGhhdCdzIGJlY2F1c2Ugb2xkIHJvdyBpcyB1c2VkIGFuZCBpdCBvbmx5IGNvbnRhaW5zIHBy aW1hcnkKKyAgIGtleSBvciBjb2x1bW5zIHRoYXQgYXJlIHBhcnQgb2YgdGhlIDxsaXRlcmFs PlJFUExJQ0EgSURFTlRJVFk8L2xpdGVyYWw+OyB0aGUKKyAgIHJlbWFpbmluZyBjb2x1bW5z IGFyZSA8bGl0ZXJhbD5OVUxMPC9saXRlcmFsPi4gRm9yIDxjb21tYW5kPklOU0VSVDwvY29t bWFuZD4KKyAgIGFuZCA8Y29tbWFuZD5VUERBVEU8L2NvbW1hbmQ+IG9wZXJhdGlvbnMsIGFu eSBjb2x1bW4gbWlnaHQgYmUgdXNlZCBpbiB0aGUKKyAgIDxsaXRlcmFsPldIRVJFPC9saXRl cmFsPiBjbGF1c2UuIE5ldyByb3cgaXMgdXNlZCBhbmQgaXQgY29udGFpbnMgYWxsCisgICBj b2x1bW5zLiBBIDxsaXRlcmFsPk5VTEw8L2xpdGVyYWw+IHZhbHVlIGNhdXNlcyB0aGUgZXhw cmVzc2lvbiB0byBldmFsdWF0ZQorICAgdG8gZmFsc2U7IGF2b2lkIHVzaW5nIGNvbHVtbnMg d2l0aG91dCBub3QtbnVsbCBjb25zdHJhaW50cyBpbiB0aGUKKyAgIDxsaXRlcmFsPldIRVJF PC9saXRlcmFsPiBjbGF1c2UuIFRoZSA8bGl0ZXJhbD5XSEVSRTwvbGl0ZXJhbD4gY2xhdXNl IGRvZXMKKyAgIG5vdCBhbGxvdyBmdW5jdGlvbnMgYW5kIHVzZXItZGVmaW5lZCBvcGVyYXRv cnMuCisgIDwvcGFyYT4KKwogICA8cGFyYT4KICAgIEZvciBhbiA8Y29tbWFuZD5JTlNFUlQg Li4uIE9OIENPTkZMSUNUPC9jb21tYW5kPiBjb21tYW5kLCB0aGUgcHVibGljYXRpb24gd2ls bAogICAgcHVibGlzaCB0aGUgb3BlcmF0aW9uIHRoYXQgYWN0dWFsbHkgcmVzdWx0cyBmcm9t IHRoZSBjb21tYW5kLiAgU28gZGVwZW5kaW5nCkBAIC0xOTcsNiArMjE2LDExIEBAIENSRUFU RSBQVUJMSUNBVElPTiA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bmFtZTwvcmVw bGFjZWFibGU+CiAgIDxwYXJhPgogICAgPGFjcm9ueW0+RERMPC9hY3JvbnltPiBvcGVyYXRp b25zIGFyZSBub3QgcHVibGlzaGVkLgogICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBUaGUg PGxpdGVyYWw+V0hFUkU8L2xpdGVyYWw+IGNsYXVzZSBleHByZXNzaW9uIGlzIGV4ZWN1dGVk IHdpdGggdGhlIHJvbGUgdXNlZAorICAgZm9yIHRoZSByZXBsaWNhdGlvbiBjb25uZWN0aW9u LgorICA8L3BhcmE+CiAgPC9yZWZzZWN0MT4KIAogIDxyZWZzZWN0MT4KQEAgLTIwOSw2ICsy MzMsMTMgQEAgQ1JFQVRFIFBVQkxJQ0FUSU9OIG15cHVibGljYXRpb24gRk9SIFRBQkxFIHVz ZXJzLCBkZXBhcnRtZW50czsKIDwvcHJvZ3JhbWxpc3Rpbmc+CiAgIDwvcGFyYT4KIAorICA8 cGFyYT4KKyAgIENyZWF0ZSBhIHB1YmxpY2F0aW9uIHRoYXQgcHVibGlzaGVzIGFsbCBjaGFu Z2VzIGZyb20gYWN0aXZlIGRlcGFydG1lbnRzOgorPHByb2dyYW1saXN0aW5nPgorQ1JFQVRF IFBVQkxJQ0FUSU9OIGFjdGl2ZV9kZXBhcnRtZW50cyBGT1IgVEFCTEUgZGVwYXJ0bWVudHMg V0hFUkUgKGFjdGl2ZSBJUyBUUlVFKTsKKzwvcHJvZ3JhbWxpc3Rpbmc+CisgIDwvcGFyYT4K KwogICA8cGFyYT4KICAgIENyZWF0ZSBhIHB1YmxpY2F0aW9uIHRoYXQgcHVibGlzaGVzIGFs bCBjaGFuZ2VzIGluIGFsbCB0YWJsZXM6CiA8cHJvZ3JhbWxpc3Rpbmc+CmRpZmYgLS1naXQg YS9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9zdWJzY3JpcHRpb24uc2dtbCBiL2RvYy9zcmMv c2dtbC9yZWYvY3JlYXRlX3N1YnNjcmlwdGlvbi5zZ21sCmluZGV4IGU4MTJiZWVlMzcuLmNm OTQyNDg0NWQgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3N1YnNjcmlw dGlvbi5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3N1YnNjcmlwdGlvbi5z Z21sCkBAIC0xMDIsNyArMTAyLDE1IEBAIENSRUFURSBTVUJTQ1JJUFRJT04gPHJlcGxhY2Vh YmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnN1YnNjcmlwdGlvbl9uYW1lPC9yZXBsYWNlYWJsCiAg ICAgICAgICA8cGFyYT4KICAgICAgICAgICBTcGVjaWZpZXMgd2hldGhlciB0aGUgZXhpc3Rp bmcgZGF0YSBpbiB0aGUgcHVibGljYXRpb25zIHRoYXQgYXJlCiAgICAgICAgICAgYmVpbmcg c3Vic2NyaWJlZCB0byBzaG91bGQgYmUgY29waWVkIG9uY2UgdGhlIHJlcGxpY2F0aW9uIHN0 YXJ0cy4KLSAgICAgICAgICBUaGUgZGVmYXVsdCBpcyA8bGl0ZXJhbD50cnVlPC9saXRlcmFs Pi4KKyAgICAgICAgICBUaGUgZGVmYXVsdCBpcyA8bGl0ZXJhbD50cnVlPC9saXRlcmFsPi4g SWYgYW55IHRhYmxlIGluIHRoZQorICAgICAgICAgIHB1YmxpY2F0aW9ucyBoYXMgYSA8bGl0 ZXJhbD5XSEVSRTwvbGl0ZXJhbD4gY2xhdXNlLCByb3dzIHRoYXQgZG8gbm90CisgICAgICAg ICAgc2F0aXNmeSB0aGUgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmV4cHJlc3Np b248L3JlcGxhY2VhYmxlPgorICAgICAgICAgIHdpbGwgbm90IGJlIGNvcGllZC4gSWYgdGhl IHN1YnNjcmlwdGlvbiBoYXMgc2V2ZXJhbCBwdWJsaWNhdGlvbnMgaW4KKyAgICAgICAgICB3 aGljaCBhIHRhYmxlIGhhcyBiZWVuIHB1Ymxpc2hlZCB3aXRoIGRpZmZlcmVudAorICAgICAg ICAgIDxsaXRlcmFsPldIRVJFPC9saXRlcmFsPiBjbGF1c2VzLCByb3dzIG11c3Qgc2F0aXNm eSBhbGwgZXhwcmVzc2lvbnMKKyAgICAgICAgICB0byBiZSBjb3BpZWQuIElmIHRoZSBzdWJz Y3JpYmVyIGlzIGEKKyAgICAgICAgICA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVj dG5hbWU+IHZlcnNpb24gYmVmb3JlIDE1IHRoZW4gYW55IHJvdworICAgICAgICAgIGZpbHRl cmluZyBpcyBpZ25vcmVkLgogICAgICAgICAgPC9wYXJhPgogICAgICAgICA8L2xpc3RpdGVt PgogICAgICAgIDwvdmFybGlzdGVudHJ5PgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0 YWxvZy9wZ19wdWJsaWNhdGlvbi5jIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNh dGlvbi5jCmluZGV4IDg2ZTQxNWFmODkuLmIwODRjZWEyYWEgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2NhdGFsb2cvcGdfcHVibGljYXRpb24uYworKysgYi9zcmMvYmFja2VuZC9jYXRh bG9nL3BnX3B1YmxpY2F0aW9uLmMKQEAgLTMzLDYgKzMzLDkgQEAKICNpbmNsdWRlICJjYXRh bG9nL3BnX3R5cGUuaCIKICNpbmNsdWRlICJmdW5jYXBpLmgiCiAjaW5jbHVkZSAibWlzY2Fk bWluLmgiCisjaW5jbHVkZSAicGFyc2VyL3BhcnNlX2NsYXVzZS5oIgorI2luY2x1ZGUgInBh cnNlci9wYXJzZV9jb2xsYXRlLmgiCisjaW5jbHVkZSAicGFyc2VyL3BhcnNlX3JlbGF0aW9u LmgiCiAjaW5jbHVkZSAidXRpbHMvYXJyYXkuaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlu cy5oIgogI2luY2x1ZGUgInV0aWxzL2NhdGNhY2hlLmgiCkBAIC0xNDEsMjEgKzE0NCwyNyBA QCBwZ19yZWxhdGlvbl9pc19wdWJsaXNoYWJsZShQR19GVU5DVElPTl9BUkdTKQogICogSW5z ZXJ0IG5ldyBwdWJsaWNhdGlvbiAvIHJlbGF0aW9uIG1hcHBpbmcuCiAgKi8KIE9iamVjdEFk ZHJlc3MKLXB1YmxpY2F0aW9uX2FkZF9yZWxhdGlvbihPaWQgcHViaWQsIFJlbGF0aW9uIHRh cmdldHJlbCwKK3B1YmxpY2F0aW9uX2FkZF9yZWxhdGlvbihPaWQgcHViaWQsIFB1YmxpY2F0 aW9uUmVsYXRpb25JbmZvICpwcmksCiAJCQkJCQkgYm9vbCBpZl9ub3RfZXhpc3RzKQogewog CVJlbGF0aW9uCXJlbDsKIAlIZWFwVHVwbGUJdHVwOwogCURhdHVtCQl2YWx1ZXNbTmF0dHNf cGdfcHVibGljYXRpb25fcmVsXTsKIAlib29sCQludWxsc1tOYXR0c19wZ19wdWJsaWNhdGlv bl9yZWxdOwotCU9pZAkJCXJlbGlkID0gUmVsYXRpb25HZXRSZWxpZCh0YXJnZXRyZWwpOwor CVJlbGF0aW9uCXRhcmdldHJlbCA9IHByaS0+cmVsYXRpb247CisJT2lkCQkJcmVsaWQ7CiAJ T2lkCQkJcHJyZWxpZDsKIAlQdWJsaWNhdGlvbiAqcHViID0gR2V0UHVibGljYXRpb24ocHVi aWQpOwogCU9iamVjdEFkZHJlc3MgbXlzZWxmLAogCQkJCXJlZmVyZW5jZWQ7CisJUGFyc2VT dGF0ZSAqcHN0YXRlOworCVBhcnNlTmFtZXNwYWNlSXRlbSAqbnNpdGVtOworCU5vZGUJICAg KndoZXJlY2xhdXNlID0gTlVMTDsKIAogCXJlbCA9IHRhYmxlX29wZW4oUHVibGljYXRpb25S ZWxSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKIAorCXJlbGlkID0gUmVsYXRpb25H ZXRSZWxpZCh0YXJnZXRyZWwpOworCiAJLyoKIAkgKiBDaGVjayBmb3IgZHVwbGljYXRlcy4g Tm90ZSB0aGF0IHRoaXMgZG9lcyBub3QgcmVhbGx5IHByZXZlbnQKIAkgKiBkdXBsaWNhdGVz LCBpdCdzIGhlcmUganVzdCB0byBwcm92aWRlIG5pY2VyIGVycm9yIG1lc3NhZ2UgaW4gY29t bW9uCkBAIC0xNzcsNiArMTg2LDI2IEBAIHB1YmxpY2F0aW9uX2FkZF9yZWxhdGlvbihPaWQg cHViaWQsIFJlbGF0aW9uIHRhcmdldHJlbCwKIAogCWNoZWNrX3B1YmxpY2F0aW9uX2FkZF9y ZWxhdGlvbih0YXJnZXRyZWwpOwogCisJaWYgKHByaS0+d2hlcmVDbGF1c2UgIT0gTlVMTCkK Kwl7CisJCS8qIFNldCB1cCBhIHBzdGF0ZSB0byBwYXJzZSB3aXRoICovCisJCXBzdGF0ZSA9 IG1ha2VfcGFyc2VzdGF0ZShOVUxMKTsKKwkJcHN0YXRlLT5wX3NvdXJjZXRleHQgPSBub2Rl VG9TdHJpbmcocHJpLT53aGVyZUNsYXVzZSk7CisKKwkJbnNpdGVtID0gYWRkUmFuZ2VUYWJs ZUVudHJ5Rm9yUmVsYXRpb24ocHN0YXRlLCB0YXJnZXRyZWwsCisJCQkJCQkJCQkJCSAgIEFj Y2Vzc1NoYXJlTG9jaywKKwkJCQkJCQkJCQkJICAgTlVMTCwgZmFsc2UsIGZhbHNlKTsKKwkJ YWRkTlNJdGVtVG9RdWVyeShwc3RhdGUsIG5zaXRlbSwgZmFsc2UsIHRydWUsIHRydWUpOwor CisJCXdoZXJlY2xhdXNlID0gdHJhbnNmb3JtV2hlcmVDbGF1c2UocHN0YXRlLAorCQkJCQkJ CQkJCSAgIGNvcHlPYmplY3QocHJpLT53aGVyZUNsYXVzZSksCisJCQkJCQkJCQkJICAgRVhQ Ul9LSU5EX1BVQkxJQ0FUSU9OX1dIRVJFLAorCQkJCQkJCQkJCSAgICJQVUJMSUNBVElPTiIp OworCisJCS8qIEZpeCB1cCBjb2xsYXRpb24gaW5mb3JtYXRpb24gKi8KKwkJYXNzaWduX2V4 cHJfY29sbGF0aW9ucyhwc3RhdGUsIHdoZXJlY2xhdXNlKTsKKwl9CisKIAkvKiBGb3JtIGEg dHVwbGUuICovCiAJbWVtc2V0KHZhbHVlcywgMCwgc2l6ZW9mKHZhbHVlcykpOwogCW1lbXNl dChudWxscywgZmFsc2UsIHNpemVvZihudWxscykpOwpAQCAtMTg5LDYgKzIxOCwxMiBAQCBw dWJsaWNhdGlvbl9hZGRfcmVsYXRpb24oT2lkIHB1YmlkLCBSZWxhdGlvbiB0YXJnZXRyZWws CiAJdmFsdWVzW0FudW1fcGdfcHVibGljYXRpb25fcmVsX3BycmVsaWQgLSAxXSA9CiAJCU9i amVjdElkR2V0RGF0dW0ocmVsaWQpOwogCisJLyogQWRkIHF1YWxpZmljYXRpb25zLCBpZiBh dmFpbGFibGUgKi8KKwlpZiAod2hlcmVjbGF1c2UpCisJCXZhbHVlc1tBbnVtX3BnX3B1Ymxp Y2F0aW9uX3JlbF9wcnF1YWwgLSAxXSA9IENTdHJpbmdHZXRUZXh0RGF0dW0obm9kZVRvU3Ry aW5nKHdoZXJlY2xhdXNlKSk7CisJZWxzZQorCQludWxsc1tBbnVtX3BnX3B1YmxpY2F0aW9u X3JlbF9wcnF1YWwgLSAxXSA9IHRydWU7CisKIAl0dXAgPSBoZWFwX2Zvcm1fdHVwbGUoUmVs YXRpb25HZXREZXNjcihyZWwpLCB2YWx1ZXMsIG51bGxzKTsKIAogCS8qIEluc2VydCB0dXBs ZSBpbnRvIGNhdGFsb2cuICovCkBAIC0yMDUsNiArMjQwLDE0IEBAIHB1YmxpY2F0aW9uX2Fk ZF9yZWxhdGlvbihPaWQgcHViaWQsIFJlbGF0aW9uIHRhcmdldHJlbCwKIAlPYmplY3RBZGRy ZXNzU2V0KHJlZmVyZW5jZWQsIFJlbGF0aW9uUmVsYXRpb25JZCwgcmVsaWQpOwogCXJlY29y ZERlcGVuZGVuY3lPbigmbXlzZWxmLCAmcmVmZXJlbmNlZCwgREVQRU5ERU5DWV9BVVRPKTsK IAorCS8qIEFkZCBkZXBlbmRlbmN5IG9uIHRoZSBvYmplY3RzIG1lbnRpb25lZCBpbiB0aGUg cXVhbGlmaWNhdGlvbnMgKi8KKwlpZiAod2hlcmVjbGF1c2UpCisJeworCQlyZWNvcmREZXBl bmRlbmN5T25FeHByKCZteXNlbGYsIHdoZXJlY2xhdXNlLCBwc3RhdGUtPnBfcnRhYmxlLCBE RVBFTkRFTkNZX05PUk1BTCk7CisKKwkJZnJlZV9wYXJzZXN0YXRlKHBzdGF0ZSk7CisJfQor CiAJLyogQ2xvc2UgdGhlIHRhYmxlLiAqLwogCXRhYmxlX2Nsb3NlKHJlbCwgUm93RXhjbHVz aXZlTG9jayk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0 aW9uY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMKaW5k ZXggOTVjMjUzYzhlMC4uNjU5ZjQ0OGM5NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29t bWFuZHMvcHVibGljYXRpb25jbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVi bGljYXRpb25jbWRzLmMKQEAgLTM4NSwzMSArMzg1LDI0IEBAIEFsdGVyUHVibGljYXRpb25U YWJsZXMoQWx0ZXJQdWJsaWNhdGlvblN0bXQgKnN0bXQsIFJlbGF0aW9uIHJlbCwKIAkJTGlz dAkgICAqZGVscmVscyA9IE5JTDsKIAkJTGlzdENlbGwgICAqb2xkbGM7CiAKLQkJLyogQ2Fs Y3VsYXRlIHdoaWNoIHJlbGF0aW9ucyB0byBkcm9wLiAqLworCQkvKgorCQkgKiBSZW1vdmUg YWxsIHB1YmxpY2F0aW9uLXRhYmxlIG1hcHBpbmdzLiAgV2UgY291bGQgcG9zc2libHkgcmVt b3ZlIChpKQorCQkgKiB0YWJsZXMgdGhhdCBhcmUgbm90IGZvdW5kIGluIHRoZSBuZXcgdGFi bGUgbGlzdCBhbmQgKGlpKSB0YWJsZXMgdGhhdAorCQkgKiBhcmUgYmVpbmcgcmUtYWRkZWQg d2l0aCBhIGRpZmZlcmVudCBxdWFsIGV4cHJlc3Npb24uIEZvciAoaWkpLAorCQkgKiBzaW1w bHkgdXBkYXRpbmcgdGhlIGV4aXN0aW5nIHR1cGxlIGlzIG5vdCBlbm91Z2gsIGJlY2F1c2Ug b2YgcXVhbAorCQkgKiBleHByZXNzaW9uIGRlcGVuZGVuY2llcy4KKwkJICovCiAJCWZvcmVh Y2gob2xkbGMsIG9sZHJlbGlkcykKIAkJewogCQkJT2lkCQkJb2xkcmVsaWQgPSBsZmlyc3Rf b2lkKG9sZGxjKTsKLQkJCUxpc3RDZWxsICAgKm5ld2xjOwotCQkJYm9vbAkJZm91bmQgPSBm YWxzZTsKKwkJCVB1YmxpY2F0aW9uUmVsYXRpb25JbmZvICpvbGRyZWw7CiAKLQkJCWZvcmVh Y2gobmV3bGMsIHJlbHMpCi0JCQl7Ci0JCQkJUmVsYXRpb24JbmV3cmVsID0gKFJlbGF0aW9u KSBsZmlyc3QobmV3bGMpOwotCi0JCQkJaWYgKFJlbGF0aW9uR2V0UmVsaWQobmV3cmVsKSA9 PSBvbGRyZWxpZCkKLQkJCQl7Ci0JCQkJCWZvdW5kID0gdHJ1ZTsKLQkJCQkJYnJlYWs7Ci0J CQkJfQotCQkJfQotCi0JCQlpZiAoIWZvdW5kKQotCQkJewotCQkJCVJlbGF0aW9uCW9sZHJl bCA9IHRhYmxlX29wZW4ob2xkcmVsaWQsCi0JCQkJCQkJCQkJCQlTaGFyZVVwZGF0ZUV4Y2x1 c2l2ZUxvY2spOwotCi0JCQkJZGVscmVscyA9IGxhcHBlbmQoZGVscmVscywgb2xkcmVsKTsK LQkJCX0KKwkJCW9sZHJlbCA9IHBhbGxvYyhzaXplb2YoUHVibGljYXRpb25SZWxhdGlvbklu Zm8pKTsKKwkJCW9sZHJlbC0+cmVsaWQgPSBvbGRyZWxpZDsKKwkJCW9sZHJlbC0+d2hlcmVD bGF1c2UgPSBOVUxMOworCQkJb2xkcmVsLT5yZWxhdGlvbiA9IHRhYmxlX29wZW4ob2xkcmVs LT5yZWxpZCwKKwkJCQkJCQkJCQkgIFNoYXJlVXBkYXRlRXhjbHVzaXZlTG9jayk7CisJCQlk ZWxyZWxzID0gbGFwcGVuZChkZWxyZWxzLCBvbGRyZWwpOwogCQl9CiAKIAkJLyogQW5kIGRy b3AgdGhlbS4gKi8KQEAgLTQ5OSw3ICs0OTIsOCBAQCBSZW1vdmVQdWJsaWNhdGlvblJlbEJ5 SWQoT2lkIHByb2lkKQogfQogCiAvKgotICogT3BlbiByZWxhdGlvbnMgc3BlY2lmaWVkIGJ5 IGEgUmFuZ2VWYXIgbGlzdC4KKyAqIE9wZW4gcmVsYXRpb25zIHNwZWNpZmllZCBieSBhIFJh bmdlVmFyIGxpc3QgKFB1YmxpY2F0aW9uVGFibGUgb3IgUmVsYXRpb24pLgorICoKICAqIFRo ZSByZXR1cm5lZCB0YWJsZXMgYXJlIGxvY2tlZCBpbiBTaGFyZVVwZGF0ZUV4Y2x1c2l2ZUxv Y2sgbW9kZSBpbiBvcmRlciB0bwogICogYWRkIHRoZW0gdG8gYSBwdWJsaWNhdGlvbi4KICAq LwpAQCAtNTA5LDE2ICs1MDMsNDEgQEAgT3BlblRhYmxlTGlzdChMaXN0ICp0YWJsZXMpCiAJ TGlzdAkgICAqcmVsaWRzID0gTklMOwogCUxpc3QJICAgKnJlbHMgPSBOSUw7CiAJTGlzdENl bGwgICAqbGM7CisJUHVibGljYXRpb25SZWxhdGlvbkluZm8gKnByaTsKIAogCS8qCiAJICog T3Blbiwgc2hhcmUtbG9jaywgYW5kIGNoZWNrIGFsbCB0aGUgZXhwbGljaXRseS1zcGVjaWZp ZWQgcmVsYXRpb25zCiAJICovCiAJZm9yZWFjaChsYywgdGFibGVzKQogCXsKLQkJUmFuZ2VW YXIgICAqcnYgPSBjYXN0Tm9kZShSYW5nZVZhciwgbGZpcnN0KGxjKSk7Ci0JCWJvb2wJCXJl Y3Vyc2UgPSBydi0+aW5oOworCQlQdWJsaWNhdGlvblRhYmxlICp0ID0gTlVMTDsKKwkJUmFu Z2VWYXIgICAqcnY7CisJCWJvb2wJCXJlY3Vyc2U7CiAJCVJlbGF0aW9uCXJlbDsKIAkJT2lk CQkJbXlyZWxpZDsKKwkJYm9vbAkJd2hlcmVjbGF1c2U7CisKKwkJLyoKKwkJICogQUxURVIg UFVCTElDQVRJT04gLi4uIEFERCBUQUJMRSBwcm92aWRlcyBhIFB1YmxpY2F0aW9uVGFibGUg TGlzdAorCQkgKiAoUmVsYXRpb24sIFdoZXJlIGNsYXVzZSkuIEFMVEVSIFBVQkxJQ0FUSU9O IC4uLiBEUk9QIFRBQkxFIHByb3ZpZGVzCisJCSAqIGEgUmVsYXRpb24gTGlzdC4gQ2hlY2sg dGhlIExpc3QgZWxlbWVudCB0byBiZSB1c2VkLgorCQkgKi8KKwkJaWYgKElzQShsZmlyc3Qo bGMpLCBQdWJsaWNhdGlvblRhYmxlKSkKKwkJCXdoZXJlY2xhdXNlID0gdHJ1ZTsKKwkJZWxz ZQorCQkJd2hlcmVjbGF1c2UgPSBmYWxzZTsKKworCQlpZiAod2hlcmVjbGF1c2UpCisJCXsK KwkJCXQgPSBsZmlyc3QobGMpOworCQkJcnYgPSBjYXN0Tm9kZShSYW5nZVZhciwgdC0+cmVs YXRpb24pOworCQl9CisJCWVsc2UKKwkJeworCQkJcnYgPSBjYXN0Tm9kZShSYW5nZVZhciwg bGZpcnN0KGxjKSk7CisJCX0KKworCQlyZWN1cnNlID0gcnYtPmluaDsKIAogCQkvKiBBbGxv dyBxdWVyeSBjYW5jZWwgaW4gY2FzZSB0aGlzIHRha2VzIGEgbG9uZyB0aW1lICovCiAJCUNI RUNLX0ZPUl9JTlRFUlJVUFRTKCk7CkBAIC01MzgsOCArNTU3LDE0IEBAIE9wZW5UYWJsZUxp c3QoTGlzdCAqdGFibGVzKQogCQkJdGFibGVfY2xvc2UocmVsLCBTaGFyZVVwZGF0ZUV4Y2x1 c2l2ZUxvY2spOwogCQkJY29udGludWU7CiAJCX0KLQotCQlyZWxzID0gbGFwcGVuZChyZWxz LCByZWwpOworCQlwcmkgPSBwYWxsb2Moc2l6ZW9mKFB1YmxpY2F0aW9uUmVsYXRpb25JbmZv KSk7CisJCXByaS0+cmVsaWQgPSBteXJlbGlkOworCQlwcmktPnJlbGF0aW9uID0gcmVsOwor CQlpZiAod2hlcmVjbGF1c2UpCisJCQlwcmktPndoZXJlQ2xhdXNlID0gdC0+d2hlcmVDbGF1 c2U7CisJCWVsc2UKKwkJCXByaS0+d2hlcmVDbGF1c2UgPSBOVUxMOworCQlyZWxzID0gbGFw cGVuZChyZWxzLCBwcmkpOwogCQlyZWxpZHMgPSBsYXBwZW5kX29pZChyZWxpZHMsIG15cmVs aWQpOwogCiAJCS8qCkBAIC01NzIsNyArNTk3LDE1IEBAIE9wZW5UYWJsZUxpc3QoTGlzdCAq dGFibGVzKQogCiAJCQkJLyogZmluZF9hbGxfaW5oZXJpdG9ycyBhbHJlYWR5IGdvdCBsb2Nr ICovCiAJCQkJcmVsID0gdGFibGVfb3BlbihjaGlsZHJlbGlkLCBOb0xvY2spOwotCQkJCXJl bHMgPSBsYXBwZW5kKHJlbHMsIHJlbCk7CisJCQkJcHJpID0gcGFsbG9jKHNpemVvZihQdWJs aWNhdGlvblJlbGF0aW9uSW5mbykpOworCQkJCXByaS0+cmVsaWQgPSBjaGlsZHJlbGlkOwor CQkJCXByaS0+cmVsYXRpb24gPSByZWw7CisJCQkJLyogY2hpbGQgaW5oZXJpdHMgV0hFUkUg Y2xhdXNlIGZyb20gcGFyZW50ICovCisJCQkJaWYgKHdoZXJlY2xhdXNlKQorCQkJCQlwcmkt PndoZXJlQ2xhdXNlID0gdC0+d2hlcmVDbGF1c2U7CisJCQkJZWxzZQorCQkJCQlwcmktPndo ZXJlQ2xhdXNlID0gTlVMTDsKKwkJCQlyZWxzID0gbGFwcGVuZChyZWxzLCBwcmkpOwogCQkJ CXJlbGlkcyA9IGxhcHBlbmRfb2lkKHJlbGlkcywgY2hpbGRyZWxpZCk7CiAJCQl9CiAJCX0K QEAgLTU5MywxMCArNjI2LDEyIEBAIENsb3NlVGFibGVMaXN0KExpc3QgKnJlbHMpCiAKIAlm b3JlYWNoKGxjLCByZWxzKQogCXsKLQkJUmVsYXRpb24JcmVsID0gKFJlbGF0aW9uKSBsZmly c3QobGMpOworCQlQdWJsaWNhdGlvblJlbGF0aW9uSW5mbyAqcHJpID0gKFB1YmxpY2F0aW9u UmVsYXRpb25JbmZvICopIGxmaXJzdChsYyk7CiAKLQkJdGFibGVfY2xvc2UocmVsLCBOb0xv Y2spOworCQl0YWJsZV9jbG9zZShwcmktPnJlbGF0aW9uLCBOb0xvY2spOwogCX0KKworCWxp c3RfZnJlZV9kZWVwKHJlbHMpOwogfQogCiAvKgpAQCAtNjEyLDE1ICs2NDcsMTUgQEAgUHVi bGljYXRpb25BZGRUYWJsZXMoT2lkIHB1YmlkLCBMaXN0ICpyZWxzLCBib29sIGlmX25vdF9l eGlzdHMsCiAKIAlmb3JlYWNoKGxjLCByZWxzKQogCXsKLQkJUmVsYXRpb24JcmVsID0gKFJl bGF0aW9uKSBsZmlyc3QobGMpOworCQlQdWJsaWNhdGlvblJlbGF0aW9uSW5mbyAqcHJpID0g KFB1YmxpY2F0aW9uUmVsYXRpb25JbmZvICopIGxmaXJzdChsYyk7CiAJCU9iamVjdEFkZHJl c3Mgb2JqOwogCiAJCS8qIE11c3QgYmUgb3duZXIgb2YgdGhlIHRhYmxlIG9yIHN1cGVydXNl ci4gKi8KLQkJaWYgKCFwZ19jbGFzc19vd25lcmNoZWNrKFJlbGF0aW9uR2V0UmVsaWQocmVs KSwgR2V0VXNlcklkKCkpKQotCQkJYWNsY2hlY2tfZXJyb3IoQUNMQ0hFQ0tfTk9UX09XTkVS LCBnZXRfcmVsa2luZF9vYmp0eXBlKHJlbC0+cmRfcmVsLT5yZWxraW5kKSwKLQkJCQkJCSAg IFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCkpOworCQlpZiAoIXBnX2NsYXNzX293bmVy Y2hlY2socHJpLT5yZWxpZCwgR2V0VXNlcklkKCkpKQorCQkJYWNsY2hlY2tfZXJyb3IoQUNM Q0hFQ0tfTk9UX09XTkVSLCBnZXRfcmVsa2luZF9vYmp0eXBlKHByaS0+cmVsYXRpb24tPnJk X3JlbC0+cmVsa2luZCksCisJCQkJCQkgICBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShwcmkt PnJlbGF0aW9uKSk7CiAKLQkJb2JqID0gcHVibGljYXRpb25fYWRkX3JlbGF0aW9uKHB1Ymlk LCByZWwsIGlmX25vdF9leGlzdHMpOworCQlvYmogPSBwdWJsaWNhdGlvbl9hZGRfcmVsYXRp b24ocHViaWQsIHByaSwgaWZfbm90X2V4aXN0cyk7CiAJCWlmIChzdG10KQogCQl7CiAJCQlF dmVudFRyaWdnZXJDb2xsZWN0U2ltcGxlQ29tbWFuZChvYmosIEludmFsaWRPYmplY3RBZGRy ZXNzLApAQCAtNjQ0LDExICs2NzksMTAgQEAgUHVibGljYXRpb25Ecm9wVGFibGVzKE9pZCBw dWJpZCwgTGlzdCAqcmVscywgYm9vbCBtaXNzaW5nX29rKQogCiAJZm9yZWFjaChsYywgcmVs cykKIAl7Ci0JCVJlbGF0aW9uCXJlbCA9IChSZWxhdGlvbikgbGZpcnN0KGxjKTsKLQkJT2lk CQkJcmVsaWQgPSBSZWxhdGlvbkdldFJlbGlkKHJlbCk7CisJCVB1YmxpY2F0aW9uUmVsYXRp b25JbmZvICpwcmkgPSAoUHVibGljYXRpb25SZWxhdGlvbkluZm8gKikgbGZpcnN0KGxjKTsK IAogCQlwcmlkID0gR2V0U3lzQ2FjaGVPaWQyKFBVQkxJQ0FUSU9OUkVMTUFQLCBBbnVtX3Bn X3B1YmxpY2F0aW9uX3JlbF9vaWQsCi0JCQkJCQkJICAgT2JqZWN0SWRHZXREYXR1bShyZWxp ZCksCisJCQkJCQkJICAgT2JqZWN0SWRHZXREYXR1bShwcmktPnJlbGlkKSwKIAkJCQkJCQkg ICBPYmplY3RJZEdldERhdHVtKHB1YmlkKSk7CiAJCWlmICghT2lkSXNWYWxpZChwcmlkKSkK IAkJewpAQCAtNjU4LDcgKzY5Miw3IEBAIFB1YmxpY2F0aW9uRHJvcFRhYmxlcyhPaWQgcHVi aWQsIExpc3QgKnJlbHMsIGJvb2wgbWlzc2luZ19vaykKIAkJCWVyZXBvcnQoRVJST1IsCiAJ CQkJCShlcnJjb2RlKEVSUkNPREVfVU5ERUZJTkVEX09CSkVDVCksCiAJCQkJCSBlcnJtc2co InJlbGF0aW9uIFwiJXNcIiBpcyBub3QgcGFydCBvZiB0aGUgcHVibGljYXRpb24iLAotCQkJ CQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCkpKSk7CisJCQkJCQkJUmVsYXRpb25H ZXRSZWxhdGlvbk5hbWUocHJpLT5yZWxhdGlvbikpKSk7CiAJCX0KIAogCQlPYmplY3RBZGRy ZXNzU2V0KG9iaiwgUHVibGljYXRpb25SZWxSZWxhdGlvbklkLCBwcmlkKTsKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL25vZGVzL2NvcHlmdW5jcy5jIGIvc3JjL2JhY2tlbmQvbm9kZXMv Y29weWZ1bmNzLmMKaW5kZXggNmZlZjA2Nzk1Ny4uZTA0Nzk3YmE1OCAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvbm9kZXMvY29weWZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMv Y29weWZ1bmNzLmMKQEAgLTQ4NDAsNiArNDg0MCwxNyBAQCBfY29weUFsdGVyUHVibGljYXRp b25TdG10KGNvbnN0IEFsdGVyUHVibGljYXRpb25TdG10ICpmcm9tKQogCXJldHVybiBuZXdu b2RlOwogfQogCitzdGF0aWMgUHVibGljYXRpb25UYWJsZSAqCitfY29weVB1YmxpY2F0aW9u VGFibGUoY29uc3QgUHVibGljYXRpb25UYWJsZSAqZnJvbSkKK3sKKwlQdWJsaWNhdGlvblRh YmxlICpuZXdub2RlID0gbWFrZU5vZGUoUHVibGljYXRpb25UYWJsZSk7CisKKwlDT1BZX05P REVfRklFTEQocmVsYXRpb24pOworCUNPUFlfTk9ERV9GSUVMRCh3aGVyZUNsYXVzZSk7CisK KwlyZXR1cm4gbmV3bm9kZTsKK30KKwogc3RhdGljIENyZWF0ZVN1YnNjcmlwdGlvblN0bXQg KgogX2NvcHlDcmVhdGVTdWJzY3JpcHRpb25TdG10KGNvbnN0IENyZWF0ZVN1YnNjcmlwdGlv blN0bXQgKmZyb20pCiB7CkBAIC01NzA0LDYgKzU3MTUsOSBAQCBjb3B5T2JqZWN0SW1wbChj b25zdCB2b2lkICpmcm9tKQogCQljYXNlIFRfQWx0ZXJQdWJsaWNhdGlvblN0bXQ6CiAJCQly ZXR2YWwgPSBfY29weUFsdGVyUHVibGljYXRpb25TdG10KGZyb20pOwogCQkJYnJlYWs7CisJ CWNhc2UgVF9QdWJsaWNhdGlvblRhYmxlOgorCQkJcmV0dmFsID0gX2NvcHlQdWJsaWNhdGlv blRhYmxlKGZyb20pOworCQkJYnJlYWs7CiAJCWNhc2UgVF9DcmVhdGVTdWJzY3JpcHRpb25T dG10OgogCQkJcmV0dmFsID0gX2NvcHlDcmVhdGVTdWJzY3JpcHRpb25TdG10KGZyb20pOwog CQkJYnJlYWs7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9ub2Rlcy9lcXVhbGZ1bmNzLmMg Yi9zcmMvYmFja2VuZC9ub2Rlcy9lcXVhbGZ1bmNzLmMKaW5kZXggYjljYzdiMTk5Yy4uMDZi MGFkYzJiMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbm9kZXMvZXF1YWxmdW5jcy5jCisr KyBiL3NyYy9iYWNrZW5kL25vZGVzL2VxdWFsZnVuY3MuYwpAQCAtMjMxNCw2ICsyMzE0LDE1 IEBAIF9lcXVhbEFsdGVyUHVibGljYXRpb25TdG10KGNvbnN0IEFsdGVyUHVibGljYXRpb25T dG10ICphLAogCXJldHVybiB0cnVlOwogfQogCitzdGF0aWMgYm9vbAorX2VxdWFsUHVibGlj YXRpb25UYWJsZShjb25zdCBQdWJsaWNhdGlvblRhYmxlICphLCBjb25zdCBQdWJsaWNhdGlv blRhYmxlICpiKQoreworCUNPTVBBUkVfTk9ERV9GSUVMRChyZWxhdGlvbik7CisJQ09NUEFS RV9OT0RFX0ZJRUxEKHdoZXJlQ2xhdXNlKTsKKworCXJldHVybiB0cnVlOworfQorCiBzdGF0 aWMgYm9vbAogX2VxdWFsQ3JlYXRlU3Vic2NyaXB0aW9uU3RtdChjb25zdCBDcmVhdGVTdWJz Y3JpcHRpb25TdG10ICphLAogCQkJCQkJCSBjb25zdCBDcmVhdGVTdWJzY3JpcHRpb25TdG10 ICpiKQpAQCAtMzcwMCw2ICszNzA5LDkgQEAgZXF1YWwoY29uc3Qgdm9pZCAqYSwgY29uc3Qg dm9pZCAqYikKIAkJY2FzZSBUX0FsdGVyUHVibGljYXRpb25TdG10OgogCQkJcmV0dmFsID0g X2VxdWFsQWx0ZXJQdWJsaWNhdGlvblN0bXQoYSwgYik7CiAJCQlicmVhazsKKwkJY2FzZSBU X1B1YmxpY2F0aW9uVGFibGU6CisJCQlyZXR2YWwgPSBfZXF1YWxQdWJsaWNhdGlvblRhYmxl KGEsIGIpOworCQkJYnJlYWs7CiAJCWNhc2UgVF9DcmVhdGVTdWJzY3JpcHRpb25TdG10Ogog CQkJcmV0dmFsID0gX2VxdWFsQ3JlYXRlU3Vic2NyaXB0aW9uU3RtdChhLCBiKTsKIAkJCWJy ZWFrOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueSBiL3NyYy9iYWNr ZW5kL3BhcnNlci9ncmFtLnkKaW5kZXggZWIyNDE5NTQzOC4uZDgyZWEwMDNkYiAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueQorKysgYi9zcmMvYmFja2VuZC9wYXJz ZXIvZ3JhbS55CkBAIC00MjYsMTQgKzQyNiwxNCBAQCBzdGF0aWMgTm9kZSAqbWFrZVJlY3Vy c2l2ZVZpZXdTZWxlY3QoY2hhciAqcmVsbmFtZSwgTGlzdCAqYWxpYXNlcywgTm9kZSAqcXVl cnkpOwogCQkJCXRyYW5zZm9ybV9lbGVtZW50X2xpc3QgdHJhbnNmb3JtX3R5cGVfbGlzdAog CQkJCVRyaWdnZXJUcmFuc2l0aW9ucyBUcmlnZ2VyUmVmZXJlbmNpbmcKIAkJCQl2YWN1dW1f cmVsYXRpb25fbGlzdCBvcHRfdmFjdXVtX3JlbGF0aW9uX2xpc3QKLQkJCQlkcm9wX29wdGlv bl9saXN0CisJCQkJZHJvcF9vcHRpb25fbGlzdCBwdWJsaWNhdGlvbl90YWJsZV9saXN0CiAK ICV0eXBlIDxub2RlPglvcHRfcm91dGluZV9ib2R5CiAldHlwZSA8Z3JvdXBjbGF1c2U+IGdy b3VwX2NsYXVzZQogJXR5cGUgPGxpc3Q+CWdyb3VwX2J5X2xpc3QKICV0eXBlIDxub2RlPgln cm91cF9ieV9pdGVtIGVtcHR5X2dyb3VwaW5nX3NldCByb2xsdXBfY2xhdXNlIGN1YmVfY2xh dXNlCiAldHlwZSA8bm9kZT4JZ3JvdXBpbmdfc2V0c19jbGF1c2UKLSV0eXBlIDxub2RlPglv cHRfcHVibGljYXRpb25fZm9yX3RhYmxlcyBwdWJsaWNhdGlvbl9mb3JfdGFibGVzCisldHlw ZSA8bm9kZT4Jb3B0X3B1YmxpY2F0aW9uX2Zvcl90YWJsZXMgcHVibGljYXRpb25fZm9yX3Rh YmxlcyBwdWJsaWNhdGlvbl90YWJsZV9lbGVtCiAKICV0eXBlIDxsaXN0PglvcHRfZmR3X29w dGlvbnMgZmR3X29wdGlvbnMKICV0eXBlIDxkZWZlbHQ+CWZkd19vcHRpb24KQEAgLTk2MTIs NyArOTYxMiw3IEBAIG9wdF9wdWJsaWNhdGlvbl9mb3JfdGFibGVzOgogCQk7CiAKIHB1Ymxp Y2F0aW9uX2Zvcl90YWJsZXM6Ci0JCQlGT1IgVEFCTEUgcmVsYXRpb25fZXhwcl9saXN0CisJ CQlGT1IgVEFCTEUgcHVibGljYXRpb25fdGFibGVfbGlzdAogCQkJCXsKIAkJCQkJJCQgPSAo Tm9kZSAqKSAkMzsKIAkJCQl9CkBAIC05NjQzLDcgKzk2NDMsNyBAQCBBbHRlclB1YmxpY2F0 aW9uU3RtdDoKIAkJCQkJbi0+b3B0aW9ucyA9ICQ1OwogCQkJCQkkJCA9IChOb2RlICopbjsK IAkJCQl9Ci0JCQl8IEFMVEVSIFBVQkxJQ0FUSU9OIG5hbWUgQUREX1AgVEFCTEUgcmVsYXRp b25fZXhwcl9saXN0CisJCQl8IEFMVEVSIFBVQkxJQ0FUSU9OIG5hbWUgQUREX1AgVEFCTEUg cHVibGljYXRpb25fdGFibGVfbGlzdAogCQkJCXsKIAkJCQkJQWx0ZXJQdWJsaWNhdGlvblN0 bXQgKm4gPSBtYWtlTm9kZShBbHRlclB1YmxpY2F0aW9uU3RtdCk7CiAJCQkJCW4tPnB1Ym5h bWUgPSAkMzsKQEAgLTk2NTEsNyArOTY1MSw3IEBAIEFsdGVyUHVibGljYXRpb25TdG10Ogog CQkJCQluLT50YWJsZUFjdGlvbiA9IERFRkVMRU1fQUREOwogCQkJCQkkJCA9IChOb2RlICop bjsKIAkJCQl9Ci0JCQl8IEFMVEVSIFBVQkxJQ0FUSU9OIG5hbWUgU0VUIFRBQkxFIHJlbGF0 aW9uX2V4cHJfbGlzdAorCQkJfCBBTFRFUiBQVUJMSUNBVElPTiBuYW1lIFNFVCBUQUJMRSBw dWJsaWNhdGlvbl90YWJsZV9saXN0CiAJCQkJewogCQkJCQlBbHRlclB1YmxpY2F0aW9uU3Rt dCAqbiA9IG1ha2VOb2RlKEFsdGVyUHVibGljYXRpb25TdG10KTsKIAkJCQkJbi0+cHVibmFt ZSA9ICQzOwpAQCAtOTY2OSw2ICs5NjY5LDIwIEBAIEFsdGVyUHVibGljYXRpb25TdG10Ogog CQkJCX0KIAkJOwogCitwdWJsaWNhdGlvbl90YWJsZV9saXN0OgorCQkJcHVibGljYXRpb25f dGFibGVfZWxlbQkJCQkJCQkJCXsgJCQgPSBsaXN0X21ha2UxKCQxKTsgfQorCQkJfCBwdWJs aWNhdGlvbl90YWJsZV9saXN0ICcsJyBwdWJsaWNhdGlvbl90YWJsZV9lbGVtCQl7ICQkID0g bGFwcGVuZCgkMSwgJDMpOyB9CisJCTsKKworcHVibGljYXRpb25fdGFibGVfZWxlbTogcmVs YXRpb25fZXhwciBPcHRXaGVyZUNsYXVzZQorCQkJCXsKKwkJCQkJUHVibGljYXRpb25UYWJs ZSAqbiA9IG1ha2VOb2RlKFB1YmxpY2F0aW9uVGFibGUpOworCQkJCQluLT5yZWxhdGlvbiA9 ICQxOworCQkJCQluLT53aGVyZUNsYXVzZSA9ICQyOworCQkJCQkkJCA9IChOb2RlICopIG47 CisJCQkJfQorCQk7CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIENSRUFU RSBTVUJTQ1JJUFRJT04gbmFtZSAuLi4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNl ci9wYXJzZV9hZ2cuYyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9hZ2cuYwppbmRleCAy NDI2OGViNTAyLi44ZmI5NTNiNTRmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wYXJzZXIv cGFyc2VfYWdnLmMKKysrIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2FnZy5jCkBAIC01 NTEsNiArNTUxLDEzIEBAIGNoZWNrX2FnZ2xldmVsc19hbmRfY29uc3RyYWludHMoUGFyc2VT dGF0ZSAqcHN0YXRlLCBOb2RlICpleHByKQogCQkJCWVyciA9IF8oImdyb3VwaW5nIG9wZXJh dGlvbnMgYXJlIG5vdCBhbGxvd2VkIGluIENPUFkgRlJPTSBXSEVSRSBjb25kaXRpb25zIik7 CiAKIAkJCWJyZWFrOworCQljYXNlIEVYUFJfS0lORF9QVUJMSUNBVElPTl9XSEVSRToKKwkJ CWlmIChpc0FnZykKKwkJCQllcnIgPSBfKCJhZ2dyZWdhdGUgZnVuY3Rpb25zIGFyZSBub3Qg YWxsb3dlZCBpbiBwdWJsaWNhdGlvbiBXSEVSRSBleHByZXNzaW9ucyIpOworCQkJZWxzZQor CQkJCWVyciA9IF8oImdyb3VwaW5nIG9wZXJhdGlvbnMgYXJlIG5vdCBhbGxvd2VkIGluIHB1 YmxpY2F0aW9uIFdIRVJFIGV4cHJlc3Npb25zIik7CisKKwkJCWJyZWFrOwogCiAJCWNhc2Ug RVhQUl9LSU5EX0NZQ0xFX01BUks6CiAJCQllcnJraW5kID0gdHJ1ZTsKQEAgLTk1MCw2ICs5 NTcsOSBAQCB0cmFuc2Zvcm1XaW5kb3dGdW5jQ2FsbChQYXJzZVN0YXRlICpwc3RhdGUsIFdp bmRvd0Z1bmMgKndmdW5jLAogCQljYXNlIEVYUFJfS0lORF9DWUNMRV9NQVJLOgogCQkJZXJy a2luZCA9IHRydWU7CiAJCQlicmVhazsKKwkJY2FzZSBFWFBSX0tJTkRfUFVCTElDQVRJT05f V0hFUkU6CisJCQllcnIgPSBfKCJ3aW5kb3cgZnVuY3Rpb25zIGFyZSBub3QgYWxsb3dlZCBp biBwdWJsaWNhdGlvbiBXSEVSRSBleHByZXNzaW9ucyIpOworCQkJYnJlYWs7CiAKIAkJCS8q CiAJCQkgKiBUaGVyZSBpcyBpbnRlbnRpb25hbGx5IG5vIGRlZmF1bHQ6IGNhc2UgaGVyZSwg c28gdGhhdCB0aGUKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9leHBy LmMgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfZXhwci5jCmluZGV4IGY5MjhjMzIzMTEu LmZjNDE3MGU3MjMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9leHBy LmMKKysrIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2V4cHIuYwpAQCAtMTE5LDYgKzEx OSwxMyBAQCB0cmFuc2Zvcm1FeHByUmVjdXJzZShQYXJzZVN0YXRlICpwc3RhdGUsIE5vZGUg KmV4cHIpCiAJLyogR3VhcmQgYWdhaW5zdCBzdGFjayBvdmVyZmxvdyBkdWUgdG8gb3Zlcmx5 IGNvbXBsZXggZXhwcmVzc2lvbnMgKi8KIAljaGVja19zdGFja19kZXB0aCgpOwogCisJLyog RnVuY3Rpb25zIGFyZSBub3QgYWxsb3dlZCBpbiBwdWJsaWNhdGlvbiBXSEVSRSBjbGF1c2Vz ICovCisJaWYgKHBzdGF0ZS0+cF9leHByX2tpbmQgPT0gRVhQUl9LSU5EX1BVQkxJQ0FUSU9O X1dIRVJFICYmIG5vZGVUYWcoZXhwcikgPT0gVF9GdW5jQ2FsbCkKKwkJZXJlcG9ydChFUlJP UiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJCQkJ IGVycm1zZygiZnVuY3Rpb25zIGFyZSBub3QgYWxsb3dlZCBpbiBwdWJsaWNhdGlvbiBXSEVS RSBleHByZXNzaW9ucyIpLAorCQkJCSBwYXJzZXJfZXJycG9zaXRpb24ocHN0YXRlLCBleHBy TG9jYXRpb24oZXhwcikpKSk7CisKIAlzd2l0Y2ggKG5vZGVUYWcoZXhwcikpCiAJewogCQlj YXNlIFRfQ29sdW1uUmVmOgpAQCAtNTA5LDYgKzUxNiw3IEBAIHRyYW5zZm9ybUNvbHVtblJl ZihQYXJzZVN0YXRlICpwc3RhdGUsIENvbHVtblJlZiAqY3JlZikKIAkJY2FzZSBFWFBSX0tJ TkRfQ09QWV9XSEVSRToKIAkJY2FzZSBFWFBSX0tJTkRfR0VORVJBVEVEX0NPTFVNTjoKIAkJ Y2FzZSBFWFBSX0tJTkRfQ1lDTEVfTUFSSzoKKwkJY2FzZSBFWFBSX0tJTkRfUFVCTElDQVRJ T05fV0hFUkU6CiAJCQkvKiBva2F5ICovCiAJCQlicmVhazsKIApAQCAtMTc2OSw2ICsxNzc3 LDkgQEAgdHJhbnNmb3JtU3ViTGluayhQYXJzZVN0YXRlICpwc3RhdGUsIFN1YkxpbmsgKnN1 YmxpbmspCiAJCWNhc2UgRVhQUl9LSU5EX0dFTkVSQVRFRF9DT0xVTU46CiAJCQllcnIgPSBf KCJjYW5ub3QgdXNlIHN1YnF1ZXJ5IGluIGNvbHVtbiBnZW5lcmF0aW9uIGV4cHJlc3Npb24i KTsKIAkJCWJyZWFrOworCQljYXNlIEVYUFJfS0lORF9QVUJMSUNBVElPTl9XSEVSRToKKwkJ CWVyciA9IF8oImNhbm5vdCB1c2Ugc3VicXVlcnkgaW4gcHVibGljYXRpb24gV0hFUkUgZXhw cmVzc2lvbiIpOworCQkJYnJlYWs7CiAKIAkJCS8qCiAJCQkgKiBUaGVyZSBpcyBpbnRlbnRp b25hbGx5IG5vIGRlZmF1bHQ6IGNhc2UgaGVyZSwgc28gdGhhdCB0aGUKQEAgLTMwODksNiAr MzEwMCw4IEBAIFBhcnNlRXhwcktpbmROYW1lKFBhcnNlRXhwcktpbmQgZXhwcktpbmQpCiAJ CQlyZXR1cm4gIkdFTkVSQVRFRCBBUyI7CiAJCWNhc2UgRVhQUl9LSU5EX0NZQ0xFX01BUks6 CiAJCQlyZXR1cm4gIkNZQ0xFIjsKKwkJY2FzZSBFWFBSX0tJTkRfUFVCTElDQVRJT05fV0hF UkU6CisJCQlyZXR1cm4gInB1YmxpY2F0aW9uIGV4cHJlc3Npb24iOwogCiAJCQkvKgogCQkJ ICogVGhlcmUgaXMgaW50ZW50aW9uYWxseSBubyBkZWZhdWx0OiBjYXNlIGhlcmUsIHNvIHRo YXQgdGhlCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfZnVuYy5jIGIv c3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2Z1bmMuYwppbmRleCAzY2VjOGRlN2RhLi5lOTQ2 ZjE3YzY0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfZnVuYy5jCisr KyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9mdW5jLmMKQEAgLTI2NTUsNiArMjY1NSw5 IEBAIGNoZWNrX3NyZl9jYWxsX3BsYWNlbWVudChQYXJzZVN0YXRlICpwc3RhdGUsIE5vZGUg Kmxhc3Rfc3JmLCBpbnQgbG9jYXRpb24pCiAJCWNhc2UgRVhQUl9LSU5EX0NZQ0xFX01BUks6 CiAJCQllcnJraW5kID0gdHJ1ZTsKIAkJCWJyZWFrOworCQljYXNlIEVYUFJfS0lORF9QVUJM SUNBVElPTl9XSEVSRToKKwkJCWVyciA9IF8oInNldC1yZXR1cm5pbmcgZnVuY3Rpb25zIGFy ZSBub3QgYWxsb3dlZCBpbiBwdWJsaWNhdGlvbiBXSEVSRSBleHByZXNzaW9ucyIpOworCQkJ YnJlYWs7CiAKIAkJCS8qCiAJCQkgKiBUaGVyZSBpcyBpbnRlbnRpb25hbGx5IG5vIGRlZmF1 bHQ6IGNhc2UgaGVyZSwgc28gdGhhdCB0aGUKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bh cnNlci9wYXJzZV9vcGVyLmMgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2Vfb3Blci5jCmlu ZGV4IGJjMzRhMjNhZmMuLjI5Zjg4MzVjZTEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bh cnNlci9wYXJzZV9vcGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX29wZXIu YwpAQCAtNzE4LDYgKzcxOCwxMyBAQCBtYWtlX29wKFBhcnNlU3RhdGUgKnBzdGF0ZSwgTGlz dCAqb3BuYW1lLCBOb2RlICpsdHJlZSwgTm9kZSAqcnRyZWUsCiAJCQkJCQkJCQkJCW9wZm9y bS0+b3BycmlnaHQpKSwKIAkJCQkgcGFyc2VyX2VycnBvc2l0aW9uKHBzdGF0ZSwgbG9jYXRp b24pKSk7CiAKKwkvKiBDaGVjayBpdCdzIG5vdCBhIGN1c3RvbSBvcGVyYXRvciBmb3IgcHVi bGljYXRpb24gV0hFUkUgZXhwcmVzc2lvbnMgKi8KKwlpZiAocHN0YXRlLT5wX2V4cHJfa2lu ZCA9PSBFWFBSX0tJTkRfUFVCTElDQVRJT05fV0hFUkUgJiYgb3Bmb3JtLT5vaWQgPj0gRmly c3ROb3JtYWxPYmplY3RJZCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJD T0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJCQkJIGVycm1zZygidXNlci1kZWZpbmVk IG9wZXJhdG9ycyBhcmUgbm90IGFsbG93ZWQgaW4gcHVibGljYXRpb24gV0hFUkUgZXhwcmVz c2lvbnMiKSwKKwkJCQkgcGFyc2VyX2VycnBvc2l0aW9uKHBzdGF0ZSwgbG9jYXRpb24pKSk7 CisKIAkvKiBEbyB0eXBlY2FzdGluZyBhbmQgYnVpbGQgdGhlIGV4cHJlc3Npb24gdHJlZSAq LwogCWlmIChsdHJlZSA9PSBOVUxMKQogCXsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL2xvZ2ljYWwvdGFibGVzeW5jLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL3RhYmxlc3luYy5jCmluZGV4IDY4MmMxMDdlNzQuLmEzN2E2ZmVmZjEgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvdGFibGVzeW5jLmMK KysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC90YWJsZXN5bmMuYwpAQCAt NjkxLDE5ICs2OTEsMjMgQEAgY29weV9yZWFkX2RhdGEodm9pZCAqb3V0YnVmLCBpbnQgbWlu cmVhZCwgaW50IG1heHJlYWQpCiAKIC8qCiAgKiBHZXQgaW5mb3JtYXRpb24gYWJvdXQgcmVt b3RlIHJlbGF0aW9uIGluIHNpbWlsYXIgZmFzaGlvbiB0aGUgUkVMQVRJT04KLSAqIG1lc3Nh Z2UgcHJvdmlkZXMgZHVyaW5nIHJlcGxpY2F0aW9uLgorICogbWVzc2FnZSBwcm92aWRlcyBk dXJpbmcgcmVwbGljYXRpb24uIFRoaXMgZnVuY3Rpb24gYWxzbyByZXR1cm5zIHRoZSByZWxh dGlvbgorICogcXVhbGlmaWNhdGlvbnMgdG8gYmUgdXNlZCBpbiBDT1BZIGNvbW1hbmQuCiAg Ki8KIHN0YXRpYyB2b2lkCiBmZXRjaF9yZW1vdGVfdGFibGVfaW5mbyhjaGFyICpuc3BuYW1l LCBjaGFyICpyZWxuYW1lLAotCQkJCQkJTG9naWNhbFJlcFJlbGF0aW9uICpscmVsKQorCQkJ CQkJTG9naWNhbFJlcFJlbGF0aW9uICpscmVsLCBMaXN0ICoqcXVhbCkKIHsKIAlXYWxSY3ZF eGVjUmVzdWx0ICpyZXM7CiAJU3RyaW5nSW5mb0RhdGEgY21kOwogCVR1cGxlVGFibGVTbG90 ICpzbG90OwogCU9pZAkJCXRhYmxlUm93W10gPSB7T0lET0lELCBDSEFST0lELCBDSEFST0lE fTsKIAlPaWQJCQlhdHRyUm93W10gPSB7VEVYVE9JRCwgT0lET0lELCBCT09MT0lEfTsKKwlP aWQJCQlxdWFsUm93W10gPSB7VEVYVE9JRH07CiAJYm9vbAkJaXNudWxsOwogCWludAkJCW5h dHQ7CisJTGlzdENlbGwgICAqbGM7CisJYm9vbAkJZmlyc3Q7CiAKIAlscmVsLT5uc3BuYW1l ID0gbnNwbmFtZTsKIAlscmVsLT5yZWxuYW1lID0gcmVsbmFtZTsKQEAgLTc5OSw2ICs4MDMs NTkgQEAgZmV0Y2hfcmVtb3RlX3RhYmxlX2luZm8oY2hhciAqbnNwbmFtZSwgY2hhciAqcmVs bmFtZSwKIAlscmVsLT5uYXR0cyA9IG5hdHQ7CiAKIAl3YWxyY3ZfY2xlYXJfcmVzdWx0KHJl cyk7CisKKwkvKgorCSAqIEdldCByZWxhdGlvbiBxdWFsLiBESVNUSU5DVCBhdm9pZHMgdGhl IHNhbWUgZXhwcmVzc2lvbiBvZiBhIHRhYmxlIGluCisJICogbXVsdGlwbGUgcHVibGljYXRp b25zIGZyb20gYmVpbmcgaW5jbHVkZWQgbXVsdGlwbGUgdGltZXMgaW4gdGhlIGZpbmFsCisJ ICogZXhwcmVzc2lvbi4KKwkgKi8KKwlpZiAod2FscmN2X3NlcnZlcl92ZXJzaW9uKExvZ1Jl cFdvcmtlcldhbFJjdkNvbm4pID49IDE1MDAwMCkKKwl7CisJCXJlc2V0U3RyaW5nSW5mbygm Y21kKTsKKwkJYXBwZW5kU3RyaW5nSW5mbygmY21kLAorCQkJCQkJICJTRUxFQ1QgRElTVElO Q1QgcGdfZ2V0X2V4cHIocHJxdWFsLCBwcnJlbGlkKSAiCisJCQkJCQkgIiAgRlJPTSBwZ19w dWJsaWNhdGlvbiBwICIKKwkJCQkJCSAiICBJTk5FUiBKT0lOIHBnX3B1YmxpY2F0aW9uX3Jl bCBwciAiCisJCQkJCQkgIiAgICAgICBPTiAocC5vaWQgPSBwci5wcnB1YmlkKSAiCisJCQkJ CQkgIiBXSEVSRSBwci5wcnJlbGlkID0gJXUgIgorCQkJCQkJICIgICBBTkQgcC5wdWJuYW1l IElOICgiLCBscmVsLT5yZW1vdGVpZCk7CisKKwkJZmlyc3QgPSB0cnVlOworCQlmb3JlYWNo KGxjLCBNeVN1YnNjcmlwdGlvbi0+cHVibGljYXRpb25zKQorCQl7CisJCQljaGFyCSAgICpw dWJuYW1lID0gc3RyVmFsKGxmaXJzdChsYykpOworCisJCQlpZiAoZmlyc3QpCisJCQkJZmly c3QgPSBmYWxzZTsKKwkJCWVsc2UKKwkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjbWQs ICIsICIpOworCisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjbWQsIHF1b3RlX2xpdGVy YWxfY3N0cihwdWJuYW1lKSk7CisJCX0KKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmNtZCwg JyknKTsKKworCQlyZXMgPSB3YWxyY3ZfZXhlYyhMb2dSZXBXb3JrZXJXYWxSY3ZDb25uLCBj bWQuZGF0YSwgMSwgcXVhbFJvdyk7CisKKwkJaWYgKHJlcy0+c3RhdHVzICE9IFdBTFJDVl9P S19UVVBMRVMpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJybXNnKCJjb3VsZCBub3Qg ZmV0Y2ggcmVsYXRpb24gcXVhbGlmaWNhdGlvbnMgZm9yIHRhYmxlIFwiJXMuJXNcIiBmcm9t IHB1Ymxpc2hlcjogJXMiLAorCQkJCQkJCW5zcG5hbWUsIHJlbG5hbWUsIHJlcy0+ZXJyKSkp OworCisJCXNsb3QgPSBNYWtlU2luZ2xlVHVwbGVUYWJsZVNsb3QocmVzLT50dXBsZWRlc2Ms ICZUVFNPcHNNaW5pbWFsVHVwbGUpOworCQl3aGlsZSAodHVwbGVzdG9yZV9nZXR0dXBsZXNs b3QocmVzLT50dXBsZXN0b3JlLCB0cnVlLCBmYWxzZSwgc2xvdCkpCisJCXsKKwkJCURhdHVt CQlyZiA9IHNsb3RfZ2V0YXR0cihzbG90LCAxLCAmaXNudWxsKTsKKworCQkJaWYgKCFpc251 bGwpCisJCQkJKnF1YWwgPSBsYXBwZW5kKCpxdWFsLCBtYWtlU3RyaW5nKFRleHREYXR1bUdl dENTdHJpbmcocmYpKSk7CisKKwkJCUV4ZWNDbGVhclR1cGxlKHNsb3QpOworCQl9CisJCUV4 ZWNEcm9wU2luZ2xlVHVwbGVUYWJsZVNsb3Qoc2xvdCk7CisKKwkJd2FscmN2X2NsZWFyX3Jl c3VsdChyZXMpOworCX0KKwogCXBmcmVlKGNtZC5kYXRhKTsKIH0KIApAQCAtODEyLDYgKzg2 OSw3IEBAIGNvcHlfdGFibGUoUmVsYXRpb24gcmVsKQogewogCUxvZ2ljYWxSZXBSZWxNYXBF bnRyeSAqcmVsbWFwZW50cnk7CiAJTG9naWNhbFJlcFJlbGF0aW9uIGxyZWw7CisJTGlzdAkg ICAqcXVhbCA9IE5JTDsKIAlXYWxSY3ZFeGVjUmVzdWx0ICpyZXM7CiAJU3RyaW5nSW5mb0Rh dGEgY21kOwogCUNvcHlGcm9tU3RhdGUgY3N0YXRlOwpAQCAtODIwLDcgKzg3OCw3IEBAIGNv cHlfdGFibGUoUmVsYXRpb24gcmVsKQogCiAJLyogR2V0IHRoZSBwdWJsaXNoZXIgcmVsYXRp b24gaW5mby4gKi8KIAlmZXRjaF9yZW1vdGVfdGFibGVfaW5mbyhnZXRfbmFtZXNwYWNlX25h bWUoUmVsYXRpb25HZXROYW1lc3BhY2UocmVsKSksCi0JCQkJCQkJUmVsYXRpb25HZXRSZWxh dGlvbk5hbWUocmVsKSwgJmxyZWwpOworCQkJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1l KHJlbCksICZscmVsLCAmcXVhbCk7CiAKIAkvKiBQdXQgdGhlIHJlbGF0aW9uIGludG8gcmVs bWFwLiAqLwogCWxvZ2ljYWxyZXBfcmVsbWFwX3VwZGF0ZSgmbHJlbCk7CkBAIC04MzEsMTQg Kzg4OSwxOCBAQCBjb3B5X3RhYmxlKFJlbGF0aW9uIHJlbCkKIAogCS8qIFN0YXJ0IGNvcHkg b24gdGhlIHB1Ymxpc2hlci4gKi8KIAlpbml0U3RyaW5nSW5mbygmY21kKTsKLQlpZiAobHJl bC5yZWxraW5kID09IFJFTEtJTkRfUkVMQVRJT04pCisKKwkvKiBSZWd1bGFyIHRhYmxlIHdp dGggbm8gcm93IGZpbHRlciAqLworCWlmIChscmVsLnJlbGtpbmQgPT0gUkVMS0lORF9SRUxB VElPTiAmJiBxdWFsID09IE5JTCkKIAkJYXBwZW5kU3RyaW5nSW5mbygmY21kLCAiQ09QWSAl cyBUTyBTVERPVVQiLAogCQkJCQkJIHF1b3RlX3F1YWxpZmllZF9pZGVudGlmaWVyKGxyZWwu bnNwbmFtZSwgbHJlbC5yZWxuYW1lKSk7CiAJZWxzZQogCXsKIAkJLyoKIAkJICogRm9yIG5v bi10YWJsZXMsIHdlIG5lZWQgdG8gZG8gQ09QWSAoU0VMRUNUIC4uLiksIGJ1dCB3ZSBjYW4n dCBqdXN0Ci0JCSAqIGRvIFNFTEVDVCAqIGJlY2F1c2Ugd2UgbmVlZCB0byBub3QgY29weSBn ZW5lcmF0ZWQgY29sdW1ucy4KKwkJICogZG8gU0VMRUNUICogYmVjYXVzZSB3ZSBuZWVkIHRv IG5vdCBjb3B5IGdlbmVyYXRlZCBjb2x1bW5zLiBGb3IKKwkJICogdGFibGVzIHdpdGggYW55 IHJvdyBmaWx0ZXJzLCBidWlsZCBhIFNFTEVDVCBxdWVyeSB3aXRoIEFORCdlZCByb3cKKwkJ ICogZmlsdGVycyBmb3IgQ09QWS4KIAkJICovCiAJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmco JmNtZCwgIkNPUFkgKFNFTEVDVCAiKTsKIAkJZm9yIChpbnQgaSA9IDA7IGkgPCBscmVsLm5h dHRzOyBpKyspCkBAIC04NDcsOCArOTA5LDI5IEBAIGNvcHlfdGFibGUoUmVsYXRpb24gcmVs KQogCQkJaWYgKGkgPCBscmVsLm5hdHRzIC0gMSkKIAkJCQlhcHBlbmRTdHJpbmdJbmZvU3Ry aW5nKCZjbWQsICIsICIpOwogCQl9Ci0JCWFwcGVuZFN0cmluZ0luZm8oJmNtZCwgIiBGUk9N ICVzKSBUTyBTVERPVVQiLAorCQlhcHBlbmRTdHJpbmdJbmZvKCZjbWQsICIgRlJPTSAlcyIs CiAJCQkJCQkgcXVvdGVfcXVhbGlmaWVkX2lkZW50aWZpZXIobHJlbC5uc3BuYW1lLCBscmVs LnJlbG5hbWUpKTsKKwkJLyogbGlzdCBvZiBBTkQnZWQgZmlsdGVycyAqLworCQlpZiAocXVh bCAhPSBOSUwpCisJCXsKKwkJCUxpc3RDZWxsICAgKmxjOworCQkJYm9vbAkJZmlyc3QgPSB0 cnVlOworCisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjbWQsICIgV0hFUkUgIik7CisJ CQlmb3JlYWNoKGxjLCBxdWFsKQorCQkJeworCQkJCWNoYXIJICAgKnEgPSBzdHJWYWwobGZp cnN0KGxjKSk7CisKKwkJCQlpZiAoZmlyc3QpCisJCQkJCWZpcnN0ID0gZmFsc2U7CisJCQkJ ZWxzZQorCQkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjbWQsICIgQU5EICIpOworCQkJ CWFwcGVuZFN0cmluZ0luZm8oJmNtZCwgIiVzIiwgcSk7CisJCQl9CisJCQlsaXN0X2ZyZWVf ZGVlcChxdWFsKTsKKwkJfQorCisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmNtZCwgIikg VE8gU1RET1VUIik7CiAJfQogCXJlcyA9IHdhbHJjdl9leGVjKExvZ1JlcFdvcmtlcldhbFJj dkNvbm4sIGNtZC5kYXRhLCAwLCBOVUxMKTsKIAlwZnJlZShjbWQuZGF0YSk7CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jIGIvc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYwppbmRleCBhYmQ1MjE3 YWIxLi43ZmJmOWY0ZTMxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9w Z291dHB1dC9wZ291dHB1dC5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0 cHV0L3Bnb3V0cHV0LmMKQEAgLTEzLDE4ICsxMywyNyBAQAogI2luY2x1ZGUgInBvc3RncmVz LmgiCiAKICNpbmNsdWRlICJhY2Nlc3MvdHVwY29udmVydC5oIgorI2luY2x1ZGUgImFjY2Vz cy94YWN0LmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wYXJ0aXRpb24uaCIKICNpbmNsdWRlICJj YXRhbG9nL3BnX3B1YmxpY2F0aW9uLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19wdWJsaWNh dGlvbl9yZWwuaCIKICNpbmNsdWRlICJjb21tYW5kcy9kZWZyZW0uaCIKKyNpbmNsdWRlICJl eGVjdXRvci9leGVjdXRvci5oIgogI2luY2x1ZGUgImZtZ3IuaCIKKyNpbmNsdWRlICJub2Rl cy9ub2RlRnVuY3MuaCIKKyNpbmNsdWRlICJvcHRpbWl6ZXIvb3B0aW1pemVyLmgiCisjaW5j bHVkZSAicGFyc2VyL3BhcnNlX2NvZXJjZS5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL2xv Z2ljYWwuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9sb2dpY2FscHJvdG8uaCIKKyNpbmNs dWRlICJyZXBsaWNhdGlvbi9sb2dpY2FscmVsYXRpb24uaCIKICNpbmNsdWRlICJyZXBsaWNh dGlvbi9vcmlnaW4uaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9wZ291dHB1dC5oIgorI2lu Y2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvaW50OC5oIgogI2lu Y2x1ZGUgInV0aWxzL2ludmFsLmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAj aW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKKyNpbmNsdWRlICJ1dGlscy9zbmFwbWdyLmgi CiAjaW5jbHVkZSAidXRpbHMvc3lzY2FjaGUuaCIKICNpbmNsdWRlICJ1dGlscy92YXJsZW5h LmgiCiAKQEAgLTk5LDYgKzEwOCw4IEBAIHR5cGVkZWYgc3RydWN0IFJlbGF0aW9uU3luY0Vu dHJ5CiAKIAlib29sCQlyZXBsaWNhdGVfdmFsaWQ7CiAJUHVibGljYXRpb25BY3Rpb25zIHB1 YmFjdGlvbnM7CisJTGlzdAkgICAqZXhwcnN0YXRlOwkJCS8qIEV4cHJTdGF0ZSBmb3Igcm93 IGZpbHRlciAqLworCVR1cGxlVGFibGVTbG90CSpzY2FudHVwbGU7CQkvKiB0dXBsZSB0YWJs ZSBzbG90IGZvciByb3cgZmlsdGVyICovCiAKIAkvKgogCSAqIE9JRCBvZiB0aGUgcmVsYXRp b24gdG8gcHVibGlzaCBjaGFuZ2VzIGFzLiAgRm9yIGEgcGFydGl0aW9uLCB0aGlzIG1heQpA QCAtMTIyLDcgKzEzMyw3IEBAIHN0YXRpYyBIVEFCICpSZWxhdGlvblN5bmNDYWNoZSA9IE5V TEw7CiAKIHN0YXRpYyB2b2lkIGluaXRfcmVsX3N5bmNfY2FjaGUoTWVtb3J5Q29udGV4dCBk ZWNvZGluZ19jb250ZXh0KTsKIHN0YXRpYyB2b2lkIGNsZWFudXBfcmVsX3N5bmNfY2FjaGUo VHJhbnNhY3Rpb25JZCB4aWQsIGJvb2wgaXNfY29tbWl0KTsKLXN0YXRpYyBSZWxhdGlvblN5 bmNFbnRyeSAqZ2V0X3JlbF9zeW5jX2VudHJ5KFBHT3V0cHV0RGF0YSAqZGF0YSwgT2lkIHJl bGlkKTsKK3N0YXRpYyBSZWxhdGlvblN5bmNFbnRyeSAqZ2V0X3JlbF9zeW5jX2VudHJ5KFBH T3V0cHV0RGF0YSAqZGF0YSwgUmVsYXRpb24gcmVsYXRpb24pOwogc3RhdGljIHZvaWQgcmVs X3N5bmNfY2FjaGVfcmVsYXRpb25fY2IoRGF0dW0gYXJnLCBPaWQgcmVsaWQpOwogc3RhdGlj IHZvaWQgcmVsX3N5bmNfY2FjaGVfcHVibGljYXRpb25fY2IoRGF0dW0gYXJnLCBpbnQgY2Fj aGVpZCwKIAkJCQkJCQkJCQkgIHVpbnQzMiBoYXNodmFsdWUpOwpAQCAtMTMxLDYgKzE0Miwx MyBAQCBzdGF0aWMgdm9pZCBzZXRfc2NoZW1hX3NlbnRfaW5fc3RyZWFtZWRfdHhuKFJlbGF0 aW9uU3luY0VudHJ5ICplbnRyeSwKIHN0YXRpYyBib29sIGdldF9zY2hlbWFfc2VudF9pbl9z dHJlYW1lZF90eG4oUmVsYXRpb25TeW5jRW50cnkgKmVudHJ5LAogCQkJCQkJCQkJCQlUcmFu c2FjdGlvbklkIHhpZCk7CiAKKy8qIHJvdyBmaWx0ZXIgcm91dGluZXMgKi8KK3N0YXRpYyBF U3RhdGUgKmNyZWF0ZV9lc3RhdGVfZm9yX3JlbGF0aW9uKFJlbGF0aW9uIHJlbCk7CitzdGF0 aWMgRXhwclN0YXRlICpwZ291dHB1dF9yb3dfZmlsdGVyX2luaXRfZXhwcihOb2RlICpyZm5v ZGUpOworc3RhdGljIGJvb2wgcGdvdXRwdXRfcm93X2ZpbHRlcl9leGVjX2V4cHIoRXhwclN0 YXRlICpzdGF0ZSwgRXhwckNvbnRleHQgKmVjb250ZXh0KTsKK3N0YXRpYyBib29sIHBnb3V0 cHV0X3Jvd19maWx0ZXIoUmVsYXRpb24gcmVsYXRpb24sIEhlYXBUdXBsZSBvbGR0dXBsZSwK KwkJCQkJCQkJSGVhcFR1cGxlIG5ld3R1cGxlLCBSZWxhdGlvblN5bmNFbnRyeSAqZW50cnkp OworCiAvKgogICogU3BlY2lmeSBvdXRwdXQgcGx1Z2luIGNhbGxiYWNrcwogICovCkBAIC01 MjAsNiArNTM4LDE0OSBAQCBzZW5kX3JlbGF0aW9uX2FuZF9hdHRycyhSZWxhdGlvbiByZWxh dGlvbiwgVHJhbnNhY3Rpb25JZCB4aWQsCiAJT3V0cHV0UGx1Z2luV3JpdGUoY3R4LCBmYWxz ZSk7CiB9CiAKKy8qCisgKiBFeGVjdXRvciBzdGF0ZSBwcmVwYXJhdGlvbiBmb3IgZXZhbHVh dGlvbiBvZiByb3cgZmlsdGVyIGV4cHJlc3Npb25zIGZvciB0aGUKKyAqIHNwZWNpZmllZCBy ZWxhdGlvbi4KKyAqLworc3RhdGljIEVTdGF0ZSAqCitjcmVhdGVfZXN0YXRlX2Zvcl9yZWxh dGlvbihSZWxhdGlvbiByZWwpCit7CisJRVN0YXRlCQkJKmVzdGF0ZTsKKwlSYW5nZVRibEVu dHJ5CSpydGU7CisKKwllc3RhdGUgPSBDcmVhdGVFeGVjdXRvclN0YXRlKCk7CisKKwlydGUg PSBtYWtlTm9kZShSYW5nZVRibEVudHJ5KTsKKwlydGUtPnJ0ZWtpbmQgPSBSVEVfUkVMQVRJ T047CisJcnRlLT5yZWxpZCA9IFJlbGF0aW9uR2V0UmVsaWQocmVsKTsKKwlydGUtPnJlbGtp bmQgPSByZWwtPnJkX3JlbC0+cmVsa2luZDsKKwlydGUtPnJlbGxvY2ttb2RlID0gQWNjZXNz U2hhcmVMb2NrOworCUV4ZWNJbml0UmFuZ2VUYWJsZShlc3RhdGUsIGxpc3RfbWFrZTEocnRl KSk7CisKKwllc3RhdGUtPmVzX291dHB1dF9jaWQgPSBHZXRDdXJyZW50Q29tbWFuZElkKGZh bHNlKTsKKworCXJldHVybiBlc3RhdGU7Cit9CisKKy8qCisgKiBJbml0aWFsaXplIGZvciBy b3cgZmlsdGVyIGV4cHJlc3Npb24gZXhlY3V0aW9uLgorICovCitzdGF0aWMgRXhwclN0YXRl ICoKK3Bnb3V0cHV0X3Jvd19maWx0ZXJfaW5pdF9leHByKE5vZGUgKnJmbm9kZSkKK3sKKwlF eHByU3RhdGUJICAgKmV4cHJzdGF0ZTsKKwlPaWQJCQkJZXhwcnR5cGU7CisJRXhwcgkJICAg KmV4cHI7CisJTWVtb3J5Q29udGV4dAlvbGRjdHg7CisKKwkvKiBQcmVwYXJlIGV4cHJlc3Np b24gZm9yIGV4ZWN1dGlvbiAqLworCWV4cHJ0eXBlID0gZXhwclR5cGUocmZub2RlKTsKKwll eHByID0gKEV4cHIgKikgY29lcmNlX3RvX3RhcmdldF90eXBlKE5VTEwsIHJmbm9kZSwgZXhw cnR5cGUsIEJPT0xPSUQsIC0xLCBDT0VSQ0lPTl9BU1NJR05NRU5ULCBDT0VSQ0VfSU1QTElD SVRfQ0FTVCwgLTEpOworCisJaWYgKGV4cHIgPT0gTlVMTCkKKwkJZXJlcG9ydChFUlJPUiwK KwkJCQkoZXJyY29kZShFUlJDT0RFX0NBTk5PVF9DT0VSQ0UpLAorCQkJCSBlcnJtc2coInJv dyBmaWx0ZXIgcmV0dXJucyB0eXBlICVzIHRoYXQgY2Fubm90IGJlIGNvZXJjZWQgdG8gdGhl IGV4cGVjdGVkIHR5cGUgJXMiLAorCQkJCQkJZm9ybWF0X3R5cGVfYmUoZXhwcnR5cGUpLAor CQkJCQkJZm9ybWF0X3R5cGVfYmUoQk9PTE9JRCkpLAorCQkJCSBlcnJoaW50KCJZb3Ugd2ls bCBuZWVkIHRvIHJld3JpdGUgdGhlIHJvdyBmaWx0ZXIuIikpKTsKKworCS8qCisJICogQ2Fj aGUgRXhwclN0YXRlIHVzaW5nIENhY2hlTWVtb3J5Q29udGV4dC4gVGhpcyBpcyB0aGUgc2Ft ZSBjb2RlIGFzCisJICogRXhlY1ByZXBhcmVFeHByKCkgYnV0IHRoYXQgaXMgbm90IHVzZWQg YmVjYXVzZSBpdCBkb2Vzbid0IHVzZSBhbiBFU3RhdGUuCisJICogSXQgc2hvdWxkIHByb2Jh Ymx5IGJlIGFub3RoZXIgZnVuY3Rpb24gaW4gdGhlIGV4ZWN1dG9yIHRvIGhhbmRsZSB0aGUK KwkgKiBleGVjdXRpb24gb3V0c2lkZSBhIG5vcm1hbCBQbGFuIHRyZWUgY29udGV4dC4KKwkg Ki8KKwlvbGRjdHggPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oQ2FjaGVNZW1vcnlDb250ZXh0 KTsKKwlleHByID0gZXhwcmVzc2lvbl9wbGFubmVyKGV4cHIpOworCWV4cHJzdGF0ZSA9IEV4 ZWNJbml0RXhwcihleHByLCBOVUxMKTsKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3R4 KTsKKworCXJldHVybiBleHByc3RhdGU7Cit9CisKKy8qCisgKiBFdmFsdWF0ZXMgcm93IGZp bHRlci4KKyAqCisgKiBJZiB0aGUgcm93IGZpbHRlciBldmFsdWF0ZXMgdG8gTlVMTCwgaXQg aXMgdGFrZW4gYXMgZmFsc2UgaS5lLiB0aGUgY2hhbmdlCisgKiBpc24ndCByZXBsaWNhdGVk LgorICovCitzdGF0aWMgYm9vbAorcGdvdXRwdXRfcm93X2ZpbHRlcl9leGVjX2V4cHIoRXhw clN0YXRlICpzdGF0ZSwgRXhwckNvbnRleHQgKmVjb250ZXh0KQoreworCURhdHVtCQlyZXQ7 CisJYm9vbAkJaXNudWxsOworCisJQXNzZXJ0KHN0YXRlICE9IE5VTEwpOworCisJcmV0ID0g RXhlY0V2YWxFeHByU3dpdGNoQ29udGV4dChzdGF0ZSwgZWNvbnRleHQsICZpc251bGwpOwor CisJZWxvZyhERUJVRzMsICJyb3cgZmlsdGVyIGV2YWx1YXRlcyB0byAlcyAoaXNudWxsOiAl cykiLAorCQkgRGF0dW1HZXRCb29sKHJldCkgPyAidHJ1ZSIgOiAiZmFsc2UiLAorCQkgaXNu dWxsID8gInRydWUiIDogImZhbHNlIik7CisKKwlpZiAoaXNudWxsKQorCQlyZXR1cm4gZmFs c2U7CisKKwlyZXR1cm4gRGF0dW1HZXRCb29sKHJldCk7Cit9CisKKy8qCisgKiBDaGFuZ2Ug aXMgY2hlY2tlZCBhZ2FpbnN0IHRoZSByb3cgZmlsdGVyLCBpZiBhbnkuCisgKgorICogSWYg aXQgcmV0dXJucyB0cnVlLCB0aGUgY2hhbmdlIGlzIHJlcGxpY2F0ZWQsIG90aGVyd2lzZSwg aXQgaXMgbm90LgorICovCitzdGF0aWMgYm9vbAorcGdvdXRwdXRfcm93X2ZpbHRlcihSZWxh dGlvbiByZWxhdGlvbiwgSGVhcFR1cGxlIG9sZHR1cGxlLCBIZWFwVHVwbGUgbmV3dHVwbGUs IFJlbGF0aW9uU3luY0VudHJ5ICplbnRyeSkKK3sKKwlFU3RhdGUJICAgKmVzdGF0ZTsKKwlF eHByQ29udGV4dCAqZWN4dDsKKwlMaXN0Q2VsbCAgICpsYzsKKwlib29sCQlyZXN1bHQgPSB0 cnVlOworCisJLyogQmFpbCBvdXQgaWYgdGhlcmUgaXMgbm8gcm93IGZpbHRlciAqLworCWlm IChlbnRyeS0+ZXhwcnN0YXRlID09IE5JTCkKKwkJcmV0dXJuIHRydWU7CisKKwllbG9nKERF QlVHMywgInRhYmxlIFwiJXMuJXNcIiBoYXMgcm93IGZpbHRlciIsCisJCSBnZXRfbmFtZXNw YWNlX25hbWUoZ2V0X3JlbF9uYW1lc3BhY2UoUmVsYXRpb25HZXRSZWxpZChyZWxhdGlvbikp KSwKKwkJIGdldF9yZWxfbmFtZShyZWxhdGlvbi0+cmRfaWQpKTsKKworCVB1c2hBY3RpdmVT bmFwc2hvdChHZXRUcmFuc2FjdGlvblNuYXBzaG90KCkpOworCisJZXN0YXRlID0gY3JlYXRl X2VzdGF0ZV9mb3JfcmVsYXRpb24ocmVsYXRpb24pOworCisJLyogUHJlcGFyZSBjb250ZXh0 IHBlciB0dXBsZSAqLworCWVjeHQgPSBHZXRQZXJUdXBsZUV4cHJDb250ZXh0KGVzdGF0ZSk7 CisJZWN4dC0+ZWN4dF9zY2FudHVwbGUgPSBlbnRyeS0+c2NhbnR1cGxlOworCisJRXhlY1N0 b3JlSGVhcFR1cGxlKG5ld3R1cGxlID8gbmV3dHVwbGUgOiBvbGR0dXBsZSwgZWN4dC0+ZWN4 dF9zY2FudHVwbGUsIGZhbHNlKTsKKworCS8qCisJICogSWYgdGhlIHN1YnNjcmlwdGlvbiBo YXMgbXVsdGlwbGUgcHVibGljYXRpb25zIGFuZCB0aGUgc2FtZSB0YWJsZSBoYXMgYQorCSAq IGRpZmZlcmVudCByb3cgZmlsdGVyIGluIHRoZXNlIHB1YmxpY2F0aW9ucywgYWxsIHJvdyBm aWx0ZXJzIG11c3QgYmUKKwkgKiBtYXRjaGVkIGluIG9yZGVyIHRvIHJlcGxpY2F0ZSB0aGlz IGNoYW5nZS4KKwkgKi8KKwlmb3JlYWNoKGxjLCBlbnRyeS0+ZXhwcnN0YXRlKQorCXsKKwkJ RXhwclN0YXRlICAqZXhwcnN0YXRlID0gKEV4cHJTdGF0ZSAqKSBsZmlyc3QobGMpOworCisJ CS8qIEV2YWx1YXRlcyByb3cgZmlsdGVyICovCisJCXJlc3VsdCA9IHBnb3V0cHV0X3Jvd19m aWx0ZXJfZXhlY19leHByKGV4cHJzdGF0ZSwgZWN4dCk7CisKKwkJLyogSWYgdGhlIHR1cGxl IGRvZXMgbm90IG1hdGNoIG9uZSBvZiB0aGUgcm93IGZpbHRlcnMsIGJhaWwgb3V0ICovCisJ CWlmICghcmVzdWx0KQorCQkJYnJlYWs7CisJfQorCisJLyogQ2xlYW51cCBhbGxvY2F0ZWQg cmVzb3VyY2VzICovCisJUmVzZXRFeHByQ29udGV4dChlY3h0KTsKKwlGcmVlRXhlY3V0b3JT dGF0ZShlc3RhdGUpOworCVBvcEFjdGl2ZVNuYXBzaG90KCk7CisKKwlyZXR1cm4gcmVzdWx0 OworfQorCiAvKgogICogU2VuZHMgdGhlIGRlY29kZWQgRE1MIG92ZXIgd2lyZS4KICAqCkBA IC01NDcsNyArNzA4LDcgQEAgcGdvdXRwdXRfY2hhbmdlKExvZ2ljYWxEZWNvZGluZ0NvbnRl eHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCWlmIChpbl9zdHJlYW1pbmcpCiAJ CXhpZCA9IGNoYW5nZS0+dHhuLT54aWQ7CiAKLQlyZWxlbnRyeSA9IGdldF9yZWxfc3luY19l bnRyeShkYXRhLCBSZWxhdGlvbkdldFJlbGlkKHJlbGF0aW9uKSk7CisJcmVsZW50cnkgPSBn ZXRfcmVsX3N5bmNfZW50cnkoZGF0YSwgcmVsYXRpb24pOwogCiAJLyogRmlyc3QgY2hlY2sg dGhlIHRhYmxlIGZpbHRlciAqLwogCXN3aXRjaCAoY2hhbmdlLT5hY3Rpb24pCkBAIC01NzEs OCArNzMyLDYgQEAgcGdvdXRwdXRfY2hhbmdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0 eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCS8qIEF2b2lkIGxlYWtpbmcgbWVtb3J5IGJ5 IHVzaW5nIGFuZCByZXNldHRpbmcgb3VyIG93biBjb250ZXh0ICovCiAJb2xkID0gTWVtb3J5 Q29udGV4dFN3aXRjaFRvKGRhdGEtPmNvbnRleHQpOwogCi0JbWF5YmVfc2VuZF9zY2hlbWEo Y3R4LCB0eG4sIGNoYW5nZSwgcmVsYXRpb24sIHJlbGVudHJ5KTsKLQogCS8qIFNlbmQgdGhl IGRhdGEgKi8KIAlzd2l0Y2ggKGNoYW5nZS0+YWN0aW9uKQogCXsKQEAgLTU4MCw2ICs3Mzks MTYgQEAgcGdvdXRwdXRfY2hhbmdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgUmVv cmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJewogCQkJCUhlYXBUdXBsZQl0dXBsZSA9ICZjaGFu Z2UtPmRhdGEudHAubmV3dHVwbGUtPnR1cGxlOwogCisJCQkJLyogQ2hlY2sgcm93IGZpbHRl ci4gKi8KKwkJCQlpZiAoIXBnb3V0cHV0X3Jvd19maWx0ZXIocmVsYXRpb24sIE5VTEwsIHR1 cGxlLCByZWxlbnRyeSkpCisJCQkJCWJyZWFrOworCisJCQkJLyoKKwkJCQkgKiBTY2hlbWEg c2hvdWxkIGJlIHNlbnQgYmVmb3JlIHRoZSBsb2dpYyB0aGF0IHJlcGxhY2VzIHRoZQorCQkJ CSAqIHJlbGF0aW9uIGJlY2F1c2UgaXQgYWxzbyBzZW5kcyB0aGUgYW5jZXN0b3IncyByZWxh dGlvbi4KKwkJCQkgKi8KKwkJCQltYXliZV9zZW5kX3NjaGVtYShjdHgsIHR4biwgY2hhbmdl LCByZWxhdGlvbiwgcmVsZW50cnkpOworCiAJCQkJLyogU3dpdGNoIHJlbGF0aW9uIGlmIHB1 Ymxpc2hpbmcgdmlhIHJvb3QuICovCiAJCQkJaWYgKHJlbGVudHJ5LT5wdWJsaXNoX2FzX3Jl bGlkICE9IFJlbGF0aW9uR2V0UmVsaWQocmVsYXRpb24pKQogCQkJCXsKQEAgLTYwMyw2ICs3 NzIsMTIgQEAgcGdvdXRwdXRfY2hhbmdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwg UmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJCSZjaGFuZ2UtPmRhdGEudHAub2xkdHVwbGUt PnR1cGxlIDogTlVMTDsKIAkJCQlIZWFwVHVwbGUJbmV3dHVwbGUgPSAmY2hhbmdlLT5kYXRh LnRwLm5ld3R1cGxlLT50dXBsZTsKIAorCQkJCS8qIENoZWNrIHJvdyBmaWx0ZXIuICovCisJ CQkJaWYgKCFwZ291dHB1dF9yb3dfZmlsdGVyKHJlbGF0aW9uLCBvbGR0dXBsZSwgbmV3dHVw bGUsIHJlbGVudHJ5KSkKKwkJCQkJYnJlYWs7CisKKwkJCQltYXliZV9zZW5kX3NjaGVtYShj dHgsIHR4biwgY2hhbmdlLCByZWxhdGlvbiwgcmVsZW50cnkpOworCiAJCQkJLyogU3dpdGNo IHJlbGF0aW9uIGlmIHB1Ymxpc2hpbmcgdmlhIHJvb3QuICovCiAJCQkJaWYgKHJlbGVudHJ5 LT5wdWJsaXNoX2FzX3JlbGlkICE9IFJlbGF0aW9uR2V0UmVsaWQocmVsYXRpb24pKQogCQkJ CXsKQEAgLTYzMSw2ICs4MDYsMTIgQEAgcGdvdXRwdXRfY2hhbmdlKExvZ2ljYWxEZWNvZGlu Z0NvbnRleHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJewogCQkJCUhlYXBU dXBsZQlvbGR0dXBsZSA9ICZjaGFuZ2UtPmRhdGEudHAub2xkdHVwbGUtPnR1cGxlOwogCisJ CQkJLyogQ2hlY2sgcm93IGZpbHRlci4gKi8KKwkJCQlpZiAoIXBnb3V0cHV0X3Jvd19maWx0 ZXIocmVsYXRpb24sIG9sZHR1cGxlLCBOVUxMLCByZWxlbnRyeSkpCisJCQkJCWJyZWFrOwor CisJCQkJbWF5YmVfc2VuZF9zY2hlbWEoY3R4LCB0eG4sIGNoYW5nZSwgcmVsYXRpb24sIHJl bGVudHJ5KTsKKwogCQkJCS8qIFN3aXRjaCByZWxhdGlvbiBpZiBwdWJsaXNoaW5nIHZpYSBy b290LiAqLwogCQkJCWlmIChyZWxlbnRyeS0+cHVibGlzaF9hc19yZWxpZCAhPSBSZWxhdGlv bkdldFJlbGlkKHJlbGF0aW9uKSkKIAkJCQl7CkBAIC02OTQsNyArODc1LDcgQEAgcGdvdXRw dXRfdHJ1bmNhdGUoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVy VFhOICp0eG4sCiAJCWlmICghaXNfcHVibGlzaGFibGVfcmVsYXRpb24ocmVsYXRpb24pKQog CQkJY29udGludWU7CiAKLQkJcmVsZW50cnkgPSBnZXRfcmVsX3N5bmNfZW50cnkoZGF0YSwg cmVsaWQpOworCQlyZWxlbnRyeSA9IGdldF9yZWxfc3luY19lbnRyeShkYXRhLCByZWxhdGlv bik7CiAKIAkJaWYgKCFyZWxlbnRyeS0+cHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSkKIAkJCWNv bnRpbnVlOwpAQCAtMTAwNSw5ICsxMTg2LDEwIEBAIHNldF9zY2hlbWFfc2VudF9pbl9zdHJl YW1lZF90eG4oUmVsYXRpb25TeW5jRW50cnkgKmVudHJ5LCBUcmFuc2FjdGlvbklkIHhpZCkK ICAqIHdoZW4gcHVibGlzaGluZy4KICAqLwogc3RhdGljIFJlbGF0aW9uU3luY0VudHJ5ICoK LWdldF9yZWxfc3luY19lbnRyeShQR091dHB1dERhdGEgKmRhdGEsIE9pZCByZWxpZCkKK2dl dF9yZWxfc3luY19lbnRyeShQR091dHB1dERhdGEgKmRhdGEsIFJlbGF0aW9uIHJlbGF0aW9u KQogewogCVJlbGF0aW9uU3luY0VudHJ5ICplbnRyeTsKKwlPaWQJCQlyZWxpZCA9IFJlbGF0 aW9uR2V0UmVsaWQocmVsYXRpb24pOwogCWJvb2wJCWFtX3BhcnRpdGlvbiA9IGdldF9yZWxf cmVsaXNwYXJ0aXRpb24ocmVsaWQpOwogCWNoYXIJCXJlbGtpbmQgPSBnZXRfcmVsX3JlbGtp bmQocmVsaWQpOwogCWJvb2wJCWZvdW5kOwpAQCAtMTAzMCw2ICsxMjEyLDggQEAgZ2V0X3Jl bF9zeW5jX2VudHJ5KFBHT3V0cHV0RGF0YSAqZGF0YSwgT2lkIHJlbGlkKQogCQllbnRyeS0+ cmVwbGljYXRlX3ZhbGlkID0gZmFsc2U7CiAJCWVudHJ5LT5wdWJhY3Rpb25zLnB1Ymluc2Vy dCA9IGVudHJ5LT5wdWJhY3Rpb25zLnB1YnVwZGF0ZSA9CiAJCQllbnRyeS0+cHViYWN0aW9u cy5wdWJkZWxldGUgPSBlbnRyeS0+cHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSA9IGZhbHNlOwor CQllbnRyeS0+c2NhbnR1cGxlID0gTlVMTDsKKwkJZW50cnktPmV4cHJzdGF0ZSA9IE5JTDsK IAkJZW50cnktPnB1Ymxpc2hfYXNfcmVsaWQgPSBJbnZhbGlkT2lkOwogCQllbnRyeS0+bWFw ID0gTlVMTDsJCS8qIHdpbGwgYmUgc2V0IGJ5IG1heWJlX3NlbmRfc2NoZW1hKCkgaWYKIAkJ CQkJCQkJICogbmVlZGVkICovCkBAIC0xMDQxLDYgKzEyMjUsNyBAQCBnZXRfcmVsX3N5bmNf ZW50cnkoUEdPdXRwdXREYXRhICpkYXRhLCBPaWQgcmVsaWQpCiAJCUxpc3QJICAgKnB1Ymlk cyA9IEdldFJlbGF0aW9uUHVibGljYXRpb25zKHJlbGlkKTsKIAkJTGlzdENlbGwgICAqbGM7 CiAJCU9pZAkJCXB1Ymxpc2hfYXNfcmVsaWQgPSByZWxpZDsKKwkJVHVwbGVEZXNjCXR1cGRl c2MgPSBSZWxhdGlvbkdldERlc2NyKHJlbGF0aW9uKTsKIAogCQkvKiBSZWxvYWQgcHVibGlj YXRpb25zIGlmIG5lZWRlZCBiZWZvcmUgdXNlLiAqLwogCQlpZiAoIXB1YmxpY2F0aW9uc192 YWxpZCkKQEAgLTEwNTQsNiArMTIzOSwyMiBAQCBnZXRfcmVsX3N5bmNfZW50cnkoUEdPdXRw dXREYXRhICpkYXRhLCBPaWQgcmVsaWQpCiAJCQlwdWJsaWNhdGlvbnNfdmFsaWQgPSB0cnVl OwogCQl9CiAKKwkJLyogUmVsZWFzZSB0dXBsZSB0YWJsZSBzbG90ICovCisJCWlmIChlbnRy eS0+c2NhbnR1cGxlICE9IE5VTEwpCisJCXsKKwkJCUV4ZWNEcm9wU2luZ2xlVHVwbGVUYWJs ZVNsb3QoZW50cnktPnNjYW50dXBsZSk7CisJCQllbnRyeS0+c2NhbnR1cGxlID0gTlVMTDsK KwkJfQorCisJCS8qCisJCSAqIENyZWF0ZSBhIHR1cGxlIHRhYmxlIHNsb3QgZm9yIHJvdyBm aWx0ZXIuIFR1cGxlRGVzYyBtdXN0IGxpdmUgYXMKKwkJICogbG9uZyBhcyB0aGUgY2FjaGUg cmVtYWlucy4KKwkJICovCisJCW9sZGN0eCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhDYWNo ZU1lbW9yeUNvbnRleHQpOworCQl0dXBkZXNjID0gQ3JlYXRlVHVwbGVEZXNjQ29weSh0dXBk ZXNjKTsKKwkJZW50cnktPnNjYW50dXBsZSA9IE1ha2VTaW5nbGVUdXBsZVRhYmxlU2xvdCh0 dXBkZXNjLCAmVFRTT3BzSGVhcFR1cGxlKTsKKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9s ZGN0eCk7CisKIAkJLyoKIAkJICogQnVpbGQgcHVibGljYXRpb24gY2FjaGUuIFdlIGNhbid0 IHVzZSBvbmUgcHJvdmlkZWQgYnkgcmVsY2FjaGUgYXMKIAkJICogcmVsY2FjaGUgY29uc2lk ZXJzIGFsbCBwdWJsaWNhdGlvbnMgZ2l2ZW4gcmVsYXRpb24gaXMgaW4sIGJ1dCBoZXJlCkBA IC0xMDYzLDYgKzEyNjQsOSBAQCBnZXRfcmVsX3N5bmNfZW50cnkoUEdPdXRwdXREYXRhICpk YXRhLCBPaWQgcmVsaWQpCiAJCXsKIAkJCVB1YmxpY2F0aW9uICpwdWIgPSBsZmlyc3QobGMp OwogCQkJYm9vbAkJcHVibGlzaCA9IGZhbHNlOworCQkJSGVhcFR1cGxlCXJmdHVwbGU7CisJ CQlEYXR1bQkJcmZkYXR1bTsKKwkJCWJvb2wJCXJmaXNudWxsOwogCiAJCQlpZiAocHViLT5h bGx0YWJsZXMpCiAJCQl7CkBAIC0xMTIyLDkgKzEzMjYsMzMgQEAgZ2V0X3JlbF9zeW5jX2Vu dHJ5KFBHT3V0cHV0RGF0YSAqZGF0YSwgT2lkIHJlbGlkKQogCQkJCWVudHJ5LT5wdWJhY3Rp b25zLnB1YnRydW5jYXRlIHw9IHB1Yi0+cHViYWN0aW9ucy5wdWJ0cnVuY2F0ZTsKIAkJCX0K IAotCQkJaWYgKGVudHJ5LT5wdWJhY3Rpb25zLnB1Ymluc2VydCAmJiBlbnRyeS0+cHViYWN0 aW9ucy5wdWJ1cGRhdGUgJiYKLQkJCQllbnRyeS0+cHViYWN0aW9ucy5wdWJkZWxldGUgJiYg ZW50cnktPnB1YmFjdGlvbnMucHVidHJ1bmNhdGUpCi0JCQkJYnJlYWs7CisJCQkvKgorCQkJ ICogQ2FjaGUgcm93IGZpbHRlciwgaWYgYXZhaWxhYmxlLiBBbGwgcHVibGljYXRpb24tdGFi bGUgbWFwcGluZ3MKKwkJCSAqIG11c3QgYmUgY2hlY2tlZC4gSWYgaXQgaXMgYSBwYXJ0aXRp b24gYW5kIHB1YnZpYXJvb3QgaXMgdHJ1ZSwKKwkJCSAqIHVzZSB0aGUgcm93IGZpbHRlciBv ZiB0aGUgdG9wbW9zdCBwYXJ0aXRpb25lZCB0YWJsZSBpbnN0ZWFkIG9mCisJCQkgKiB0aGUg cm93IGZpbHRlciBvZiBpdHMgb3duIHBhcnRpdGlvbi4KKwkJCSAqLworCQkJcmZ0dXBsZSA9 IFNlYXJjaFN5c0NhY2hlMihQVUJMSUNBVElPTlJFTE1BUCwgT2JqZWN0SWRHZXREYXR1bShw dWJsaXNoX2FzX3JlbGlkKSwgT2JqZWN0SWRHZXREYXR1bShwdWItPm9pZCkpOworCQkJaWYg KEhlYXBUdXBsZUlzVmFsaWQocmZ0dXBsZSkpCisJCQl7CisJCQkJcmZkYXR1bSA9IFN5c0Nh Y2hlR2V0QXR0cihQVUJMSUNBVElPTlJFTE1BUCwgcmZ0dXBsZSwgQW51bV9wZ19wdWJsaWNh dGlvbl9yZWxfcHJxdWFsLCAmcmZpc251bGwpOworCisJCQkJaWYgKCFyZmlzbnVsbCkKKwkJ CQl7CisJCQkJCU5vZGUJICAgKnJmbm9kZTsKKwkJCQkJRXhwclN0YXRlICAqZXhwcnN0YXRl OworCisJCQkJCW9sZGN0eCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhDYWNoZU1lbW9yeUNv bnRleHQpOworCQkJCQlyZm5vZGUgPSBzdHJpbmdUb05vZGUoVGV4dERhdHVtR2V0Q1N0cmlu ZyhyZmRhdHVtKSk7CisKKwkJCQkJLyogUHJlcGFyZSBmb3IgZXhwcmVzc2lvbiBleGVjdXRp b24gKi8KKwkJCQkJZXhwcnN0YXRlID0gcGdvdXRwdXRfcm93X2ZpbHRlcl9pbml0X2V4cHIo cmZub2RlKTsKKwkJCQkJZW50cnktPmV4cHJzdGF0ZSA9IGxhcHBlbmQoZW50cnktPmV4cHJz dGF0ZSwgZXhwcnN0YXRlKTsKKwkJCQkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN0eCk7 CisJCQkJfQorCisJCQkJUmVsZWFzZVN5c0NhY2hlKHJmdHVwbGUpOworCQkJfQogCQl9CiAK IAkJbGlzdF9mcmVlKHB1Ymlkcyk7CkBAIC0xMjQyLDYgKzE0NzAsNyBAQCByZWxfc3luY19j YWNoZV9wdWJsaWNhdGlvbl9jYihEYXR1bSBhcmcsIGludCBjYWNoZWlkLCB1aW50MzIgaGFz aHZhbHVlKQogewogCUhBU0hfU0VRX1NUQVRVUyBzdGF0dXM7CiAJUmVsYXRpb25TeW5jRW50 cnkgKmVudHJ5OworCU1lbW9yeUNvbnRleHQgb2xkY3R4OwogCiAJLyoKIAkgKiBXZSBjYW4g Z2V0IGhlcmUgaWYgdGhlIHBsdWdpbiB3YXMgdXNlZCBpbiBTUUwgaW50ZXJmYWNlIGFzIHRo ZQpAQCAtMTI1MSw2ICsxNDgwLDggQEAgcmVsX3N5bmNfY2FjaGVfcHVibGljYXRpb25fY2Io RGF0dW0gYXJnLCBpbnQgY2FjaGVpZCwgdWludDMyIGhhc2h2YWx1ZSkKIAlpZiAoUmVsYXRp b25TeW5jQ2FjaGUgPT0gTlVMTCkKIAkJcmV0dXJuOwogCisJb2xkY3R4ID0gTWVtb3J5Q29u dGV4dFN3aXRjaFRvKENhY2hlTWVtb3J5Q29udGV4dCk7CisKIAkvKgogCSAqIFRoZXJlIGlz IG5vIHdheSB0byBmaW5kIHdoaWNoIGVudHJ5IGluIG91ciBjYWNoZSB0aGUgaGFzaCBiZWxv bmdzIHRvIHNvCiAJICogbWFyayB0aGUgd2hvbGUgY2FjaGUgYXMgaW52YWxpZC4KQEAgLTEy NjgsNSArMTQ5OSwxMSBAQCByZWxfc3luY19jYWNoZV9wdWJsaWNhdGlvbl9jYihEYXR1bSBh cmcsIGludCBjYWNoZWlkLCB1aW50MzIgaGFzaHZhbHVlKQogCQllbnRyeS0+cHViYWN0aW9u cy5wdWJ1cGRhdGUgPSBmYWxzZTsKIAkJZW50cnktPnB1YmFjdGlvbnMucHViZGVsZXRlID0g ZmFsc2U7CiAJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YnRydW5jYXRlID0gZmFsc2U7CisKKwkJ aWYgKGVudHJ5LT5leHByc3RhdGUgIT0gTklMKQorCQkJbGlzdF9mcmVlX2RlZXAoZW50cnkt PmV4cHJzdGF0ZSk7CisJCWVudHJ5LT5leHByc3RhdGUgPSBOSUw7CiAJfQorCisJTWVtb3J5 Q29udGV4dFN3aXRjaFRvKG9sZGN0eCk7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1 bXAvcGdfZHVtcC5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYwppbmRleCAzMjExNTIx NTFkLi42Zjk0NGVjNjBkIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5j CisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKQEAgLTQxNzIsNiArNDE3Miw3IEBA IGdldFB1YmxpY2F0aW9uVGFibGVzKEFyY2hpdmUgKmZvdXQsIFRhYmxlSW5mbyB0YmxpbmZv W10sIGludCBudW1UYWJsZXMpCiAJaW50CQkJaV9vaWQ7CiAJaW50CQkJaV9wcnB1YmlkOwog CWludAkJCWlfcHJyZWxpZDsKKwlpbnQJCQlpX3BycmVscXVhbDsKIAlpbnQJCQlpLAogCQkJ CWosCiAJCQkJbnR1cHM7CkBAIC00MTgyLDkgKzQxODMsMTYgQEAgZ2V0UHVibGljYXRpb25U YWJsZXMoQXJjaGl2ZSAqZm91dCwgVGFibGVJbmZvIHRibGluZm9bXSwgaW50IG51bVRhYmxl cykKIAlxdWVyeSA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CiAKIAkvKiBDb2xsZWN0IGFsbCBw dWJsaWNhdGlvbiBtZW1iZXJzaGlwIGluZm8uICovCi0JYXBwZW5kUFFFeHBCdWZmZXJTdHIo cXVlcnksCi0JCQkJCQkgIlNFTEVDVCB0YWJsZW9pZCwgb2lkLCBwcnB1YmlkLCBwcnJlbGlk ICIKLQkJCQkJCSAiRlJPTSBwZ19jYXRhbG9nLnBnX3B1YmxpY2F0aW9uX3JlbCIpOworCWlm IChmb3V0LT5yZW1vdGVWZXJzaW9uID49IDE1MDAwMCkKKwkJYXBwZW5kUFFFeHBCdWZmZXJT dHIocXVlcnksCisJCQkJCQkJICJTRUxFQ1QgdGFibGVvaWQsIG9pZCwgcHJwdWJpZCwgcHJy ZWxpZCwgIgorCQkJCQkJCSAicGdfY2F0YWxvZy5wZ19nZXRfZXhwcihwcnF1YWwsIHBycmVs aWQpIEFTIHBycmVscXVhbCAiCisJCQkJCQkJICJGUk9NIHBnX2NhdGFsb2cucGdfcHVibGlj YXRpb25fcmVsIik7CisJZWxzZQorCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwKKwkJ CQkJCQkgIlNFTEVDVCB0YWJsZW9pZCwgb2lkLCBwcnB1YmlkLCBwcnJlbGlkLCAiCisJCQkJ CQkJICJOVUxMIEFTIHBycmVscXVhbCAiCisJCQkJCQkJICJGUk9NIHBnX2NhdGFsb2cucGdf cHVibGljYXRpb25fcmVsIik7CiAJcmVzID0gRXhlY3V0ZVNxbFF1ZXJ5KGZvdXQsIHF1ZXJ5 LT5kYXRhLCBQR1JFU19UVVBMRVNfT0spOwogCiAJbnR1cHMgPSBQUW50dXBsZXMocmVzKTsK QEAgLTQxOTMsNiArNDIwMSw3IEBAIGdldFB1YmxpY2F0aW9uVGFibGVzKEFyY2hpdmUgKmZv dXQsIFRhYmxlSW5mbyB0YmxpbmZvW10sIGludCBudW1UYWJsZXMpCiAJaV9vaWQgPSBQUWZu dW1iZXIocmVzLCAib2lkIik7CiAJaV9wcnB1YmlkID0gUFFmbnVtYmVyKHJlcywgInBycHVi aWQiKTsKIAlpX3BycmVsaWQgPSBQUWZudW1iZXIocmVzLCAicHJyZWxpZCIpOworCWlfcHJy ZWxxdWFsID0gUFFmbnVtYmVyKHJlcywgInBycmVscXVhbCIpOwogCiAJLyogdGhpcyBhbGxv Y2F0aW9uIG1heSBiZSBtb3JlIHRoYW4gd2UgbmVlZCAqLwogCXB1YnJpbmZvID0gcGdfbWFs bG9jKG50dXBzICogc2l6ZW9mKFB1YmxpY2F0aW9uUmVsSW5mbykpOwpAQCAtNDIzMyw2ICs0 MjQyLDEwIEBAIGdldFB1YmxpY2F0aW9uVGFibGVzKEFyY2hpdmUgKmZvdXQsIFRhYmxlSW5m byB0YmxpbmZvW10sIGludCBudW1UYWJsZXMpCiAJCXB1YnJpbmZvW2pdLmRvYmoubmFtZSA9 IHRiaW5mby0+ZG9iai5uYW1lOwogCQlwdWJyaW5mb1tqXS5wdWJsaWNhdGlvbiA9IHB1Ymlu Zm87CiAJCXB1YnJpbmZvW2pdLnB1YnRhYmxlID0gdGJpbmZvOworCQlpZiAoUFFnZXRpc251 bGwocmVzLCBpLCBpX3BycmVscXVhbCkpCisJCQlwdWJyaW5mb1tqXS5wdWJyZWxxdWFsID0g TlVMTDsKKwkJZWxzZQorCQkJcHVicmluZm9bal0ucHVicmVscXVhbCA9IHBnX3N0cmR1cChQ UWdldHZhbHVlKHJlcywgaSwgaV9wcnJlbHF1YWwpKTsKIAogCQkvKiBEZWNpZGUgd2hldGhl ciB3ZSB3YW50IHRvIGR1bXAgaXQgKi8KIAkJc2VsZWN0RHVtcGFibGVQdWJsaWNhdGlvblRh YmxlKCYocHVicmluZm9bal0uZG9iaiksIGZvdXQpOwpAQCAtNDI2NSw4ICs0Mjc4LDExIEBA IGR1bXBQdWJsaWNhdGlvblRhYmxlKEFyY2hpdmUgKmZvdXQsIGNvbnN0IFB1YmxpY2F0aW9u UmVsSW5mbyAqcHVicmluZm8pCiAKIAlhcHBlbmRQUUV4cEJ1ZmZlcihxdWVyeSwgIkFMVEVS IFBVQkxJQ0FUSU9OICVzIEFERCBUQUJMRSBPTkxZIiwKIAkJCQkJICBmbXRJZChwdWJpbmZv LT5kb2JqLm5hbWUpKTsKLQlhcHBlbmRQUUV4cEJ1ZmZlcihxdWVyeSwgIiAlcztcbiIsCisJ YXBwZW5kUFFFeHBCdWZmZXIocXVlcnksICIgJXMiLAogCQkJCQkgIGZtdFF1YWxpZmllZER1 bXBhYmxlKHRiaW5mbykpOworCWlmIChwdWJyaW5mby0+cHVicmVscXVhbCkKKwkJYXBwZW5k UFFFeHBCdWZmZXIocXVlcnksICIgV0hFUkUgKCVzKSIsIHB1YnJpbmZvLT5wdWJyZWxxdWFs KTsKKwlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgIjtcbiIpOwogCiAJLyoKIAkgKiBU aGVyZSBpcyBubyBwb2ludCBpbiBjcmVhdGluZyBhIGRyb3AgcXVlcnkgYXMgdGhlIGRyb3Ag aXMgZG9uZSBieSB0YWJsZQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAu aCBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmgKaW5kZXggYmE5YmM2ZGRkMi4uN2Q3MmQ0 OThjMSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuaAorKysgYi9zcmMv YmluL3BnX2R1bXAvcGdfZHVtcC5oCkBAIC02MjYsNiArNjI2LDcgQEAgdHlwZWRlZiBzdHJ1 Y3QgX1B1YmxpY2F0aW9uUmVsSW5mbwogCUR1bXBhYmxlT2JqZWN0IGRvYmo7CiAJUHVibGlj YXRpb25JbmZvICpwdWJsaWNhdGlvbjsKIAlUYWJsZUluZm8gICpwdWJ0YWJsZTsKKwljaGFy CSAgICpwdWJyZWxxdWFsOwogfSBQdWJsaWNhdGlvblJlbEluZm87CiAKIC8qCmRpZmYgLS1n aXQgYS9zcmMvYmluL3BzcWwvZGVzY3JpYmUuYyBiL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5j CmluZGV4IDJhYmYyNTU3OTguLmUyZTY0Y2IzYmYgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcHNx bC9kZXNjcmliZS5jCisrKyBiL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jCkBAIC02MzI5LDgg KzYzMjksMTUgQEAgZGVzY3JpYmVQdWJsaWNhdGlvbnMoY29uc3QgY2hhciAqcGF0dGVybikK IAkJaWYgKCFwdWJhbGx0YWJsZXMpCiAJCXsKIAkJCXByaW50ZlBRRXhwQnVmZmVyKCZidWYs Ci0JCQkJCQkJICAiU0VMRUNUIG4ubnNwbmFtZSwgYy5yZWxuYW1lXG4iCi0JCQkJCQkJICAi RlJPTSBwZ19jYXRhbG9nLnBnX2NsYXNzIGMsXG4iCisJCQkJCQkJICAiU0VMRUNUIG4ubnNw bmFtZSwgYy5yZWxuYW1lIik7CisJCQlpZiAocHNldC5zdmVyc2lvbiA+PSAxNTAwMDApCisJ CQkJYXBwZW5kUFFFeHBCdWZmZXIoJmJ1ZiwKKwkJCQkJCQkJICAiLCBwZ19nZXRfZXhwcihw ci5wcnF1YWwsIGMub2lkKSIpOworCQkJZWxzZQorCQkJCWFwcGVuZFBRRXhwQnVmZmVyKCZi dWYsCisJCQkJCQkJCSAgIiwgTlVMTCIpOworCQkJYXBwZW5kUFFFeHBCdWZmZXIoJmJ1ZiwK KwkJCQkJCQkgICJcbkZST00gcGdfY2F0YWxvZy5wZ19jbGFzcyBjLFxuIgogCQkJCQkJCSAg IiAgICAgcGdfY2F0YWxvZy5wZ19uYW1lc3BhY2UgbixcbiIKIAkJCQkJCQkgICIgICAgIHBn X2NhdGFsb2cucGdfcHVibGljYXRpb25fcmVsIHByXG4iCiAJCQkJCQkJICAiV0hFUkUgYy5y ZWxuYW1lc3BhY2UgPSBuLm9pZFxuIgpAQCAtNjM1OSw2ICs2MzY2LDEwIEBAIGRlc2NyaWJl UHVibGljYXRpb25zKGNvbnN0IGNoYXIgKnBhdHRlcm4pCiAJCQkJCQkJCSAgUFFnZXR2YWx1 ZSh0YWJyZXMsIGosIDApLAogCQkJCQkJCQkgIFBRZ2V0dmFsdWUodGFicmVzLCBqLCAxKSk7 CiAKKwkJCQlpZiAoIVBRZ2V0aXNudWxsKHRhYnJlcywgaiwgMikpCisJCQkJCWFwcGVuZFBR RXhwQnVmZmVyKCZidWYsICIgV0hFUkUgKCVzKSIsCisJCQkJCQkJCQkgIFBRZ2V0dmFsdWUo dGFicmVzLCBqLCAyKSk7CisKIAkJCQlwcmludFRhYmxlQWRkRm9vdGVyKCZjb250LCBidWYu ZGF0YSk7CiAJCQl9CiAJCQlQUWNsZWFyKHRhYnJlcyk7CmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmggYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3Bn X3B1YmxpY2F0aW9uLmgKaW5kZXggZjMzMmJhZDRkNC4uMjcwM2I5YzNmZSAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oCisrKyBiL3NyYy9pbmNs dWRlL2NhdGFsb2cvcGdfcHVibGljYXRpb24uaApAQCAtODMsNiArODMsMTMgQEAgdHlwZWRl ZiBzdHJ1Y3QgUHVibGljYXRpb24KIAlQdWJsaWNhdGlvbkFjdGlvbnMgcHViYWN0aW9uczsK IH0gUHVibGljYXRpb247CiAKK3R5cGVkZWYgc3RydWN0IFB1YmxpY2F0aW9uUmVsYXRpb25J bmZvCit7CisJT2lkCQkJcmVsaWQ7CisJUmVsYXRpb24JcmVsYXRpb247CisJTm9kZQkgICAq d2hlcmVDbGF1c2U7Cit9IFB1YmxpY2F0aW9uUmVsYXRpb25JbmZvOworCiBleHRlcm4gUHVi bGljYXRpb24gKkdldFB1YmxpY2F0aW9uKE9pZCBwdWJpZCk7CiBleHRlcm4gUHVibGljYXRp b24gKkdldFB1YmxpY2F0aW9uQnlOYW1lKGNvbnN0IGNoYXIgKnB1Ym5hbWUsIGJvb2wgbWlz c2luZ19vayk7CiBleHRlcm4gTGlzdCAqR2V0UmVsYXRpb25QdWJsaWNhdGlvbnMoT2lkIHJl bGlkKTsKQEAgLTEwOCw3ICsxMTUsNyBAQCBleHRlcm4gTGlzdCAqR2V0QWxsVGFibGVzUHVi bGljYXRpb25zKHZvaWQpOwogZXh0ZXJuIExpc3QgKkdldEFsbFRhYmxlc1B1YmxpY2F0aW9u UmVsYXRpb25zKGJvb2wgcHVidmlhcm9vdCk7CiAKIGV4dGVybiBib29sIGlzX3B1Ymxpc2hh YmxlX3JlbGF0aW9uKFJlbGF0aW9uIHJlbCk7Ci1leHRlcm4gT2JqZWN0QWRkcmVzcyBwdWJs aWNhdGlvbl9hZGRfcmVsYXRpb24oT2lkIHB1YmlkLCBSZWxhdGlvbiB0YXJnZXRyZWwsCitl eHRlcm4gT2JqZWN0QWRkcmVzcyBwdWJsaWNhdGlvbl9hZGRfcmVsYXRpb24oT2lkIHB1Ymlk LCBQdWJsaWNhdGlvblJlbGF0aW9uSW5mbyAqcHJpLAogCQkJCQkJCQkJCQkgIGJvb2wgaWZf bm90X2V4aXN0cyk7CiAKIGV4dGVybiBPaWQJZ2V0X3B1YmxpY2F0aW9uX29pZChjb25zdCBj aGFyICpwdWJuYW1lLCBib29sIG1pc3Npbmdfb2spOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbl9yZWwuaCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cv cGdfcHVibGljYXRpb25fcmVsLmgKaW5kZXggYjVkNTUwNGNiYi4uMTU0YmI2MTc3NyAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbl9yZWwuaAorKysg Yi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uX3JlbC5oCkBAIC0zMSw2ICsz MSwxMCBAQCBDQVRBTE9HKHBnX3B1YmxpY2F0aW9uX3JlbCw2MTA2LFB1YmxpY2F0aW9uUmVs UmVsYXRpb25JZCkKIAlPaWQJCQlvaWQ7CQkJLyogb2lkICovCiAJT2lkCQkJcHJwdWJpZCBC S0lfTE9PS1VQKHBnX3B1YmxpY2F0aW9uKTsgLyogT2lkIG9mIHRoZSBwdWJsaWNhdGlvbiAq LwogCU9pZAkJCXBycmVsaWQgQktJX0xPT0tVUChwZ19jbGFzcyk7CS8qIE9pZCBvZiB0aGUg cmVsYXRpb24gKi8KKworI2lmZGVmCUNBVEFMT0dfVkFSTEVOCQkJLyogdmFyaWFibGUtbGVu Z3RoIGZpZWxkcyBzdGFydCBoZXJlICovCisJcGdfbm9kZV90cmVlIHBycXVhbDsJCS8qIHF1 YWxpZmljYXRpb25zICovCisjZW5kaWYKIH0gRm9ybURhdGFfcGdfcHVibGljYXRpb25fcmVs OwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tCkBAIC00MCw2ICs0NCw4IEBAIENBVEFMT0cocGdf cHVibGljYXRpb25fcmVsLDYxMDYsUHVibGljYXRpb25SZWxSZWxhdGlvbklkKQogICovCiB0 eXBlZGVmIEZvcm1EYXRhX3BnX3B1YmxpY2F0aW9uX3JlbCAqRm9ybV9wZ19wdWJsaWNhdGlv bl9yZWw7CiAKK0RFQ0xBUkVfVE9BU1QocGdfcHVibGljYXRpb25fcmVsLCA4Mjg3LCA4Mjg4 KTsKKwogREVDTEFSRV9VTklRVUVfSU5ERVhfUEtFWShwZ19wdWJsaWNhdGlvbl9yZWxfb2lk X2luZGV4LCA2MTEyLCBQdWJsaWNhdGlvblJlbE9iamVjdEluZGV4SWQsIG9uIHBnX3B1Ymxp Y2F0aW9uX3JlbCB1c2luZyBidHJlZShvaWQgb2lkX29wcykpOwogREVDTEFSRV9VTklRVUVf SU5ERVgocGdfcHVibGljYXRpb25fcmVsX3BycmVsaWRfcHJwdWJpZF9pbmRleCwgNjExMywg UHVibGljYXRpb25SZWxQcnJlbGlkUHJwdWJpZEluZGV4SWQsIG9uIHBnX3B1YmxpY2F0aW9u X3JlbCB1c2luZyBidHJlZShwcnJlbGlkIG9pZF9vcHMsIHBycHViaWQgb2lkX29wcykpOwog CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9ub2Rlcy5oIGIvc3JjL2luY2x1ZGUv bm9kZXMvbm9kZXMuaAppbmRleCBkOWU0MTdiY2Q3Li4yMDM3NzA1ZjQ1IDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9ub2Rlcy9ub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL25v ZGVzLmgKQEAgLTQ5MSw2ICs0OTEsNyBAQCB0eXBlZGVmIGVudW0gTm9kZVRhZwogCVRfUGFy dGl0aW9uUmFuZ2VEYXR1bSwKIAlUX1BhcnRpdGlvbkNtZCwKIAlUX1ZhY3V1bVJlbGF0aW9u LAorCVRfUHVibGljYXRpb25UYWJsZSwKIAogCS8qCiAJICogVEFHUyBGT1IgUkVQTElDQVRJ T04gR1JBTU1BUiBQQVJTRSBOT0RFUyAocmVwbG5vZGVzLmgpCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5v ZGVzLmgKaW5kZXggZGVmOTY1MWIzNC4uY2Y4MTVjYzBmMiAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNl bm9kZXMuaApAQCAtMzYyNCwxMiArMzYyNCwxOSBAQCB0eXBlZGVmIHN0cnVjdCBBbHRlclRT Q29uZmlndXJhdGlvblN0bXQKIH0gQWx0ZXJUU0NvbmZpZ3VyYXRpb25TdG10OwogCiAKK3R5 cGVkZWYgc3RydWN0IFB1YmxpY2F0aW9uVGFibGUKK3sKKwlOb2RlVGFnCQl0eXBlOworCVJh bmdlVmFyICAgKnJlbGF0aW9uOwkJLyogcmVsYXRpb24gdG8gYmUgcHVibGlzaGVkICovCisJ Tm9kZQkgICAqd2hlcmVDbGF1c2U7CS8qIHF1YWxpZmljYXRpb25zICovCit9IFB1YmxpY2F0 aW9uVGFibGU7CisKIHR5cGVkZWYgc3RydWN0IENyZWF0ZVB1YmxpY2F0aW9uU3RtdAogewog CU5vZGVUYWcJCXR5cGU7CiAJY2hhcgkgICAqcHVibmFtZTsJCS8qIE5hbWUgb2YgdGhlIHB1 YmxpY2F0aW9uICovCiAJTGlzdAkgICAqb3B0aW9uczsJCS8qIExpc3Qgb2YgRGVmRWxlbSBu b2RlcyAqLwotCUxpc3QJICAgKnRhYmxlczsJCQkvKiBPcHRpb25hbCBsaXN0IG9mIHRhYmxl cyB0byBhZGQgKi8KKwlMaXN0CSAgICp0YWJsZXM7CQkJLyogT3B0aW9uYWwgbGlzdCBvZiBQ dWJsaWNhdGlvblRhYmxlIHRvIGFkZCAqLwogCWJvb2wJCWZvcl9hbGxfdGFibGVzOyAvKiBT cGVjaWFsIHB1YmxpY2F0aW9uIGZvciBhbGwgdGFibGVzIGluIGRiICovCiB9IENyZWF0ZVB1 YmxpY2F0aW9uU3RtdDsKIApAQCAtMzY0Miw3ICszNjQ5LDcgQEAgdHlwZWRlZiBzdHJ1Y3Qg QWx0ZXJQdWJsaWNhdGlvblN0bXQKIAlMaXN0CSAgICpvcHRpb25zOwkJLyogTGlzdCBvZiBE ZWZFbGVtIG5vZGVzICovCiAKIAkvKiBwYXJhbWV0ZXJzIHVzZWQgZm9yIEFMVEVSIFBVQkxJ Q0FUSU9OIC4uLiBBREQvRFJPUCBUQUJMRSAqLwotCUxpc3QJICAgKnRhYmxlczsJCQkvKiBM aXN0IG9mIHRhYmxlcyB0byBhZGQvZHJvcCAqLworCUxpc3QJICAgKnRhYmxlczsJCQkvKiBM aXN0IG9mIFB1YmxpY2F0aW9uVGFibGUgdG8gYWRkL2Ryb3AgKi8KIAlib29sCQlmb3JfYWxs X3RhYmxlczsgLyogU3BlY2lhbCBwdWJsaWNhdGlvbiBmb3IgYWxsIHRhYmxlcyBpbiBkYiAq LwogCURlZkVsZW1BY3Rpb24gdGFibGVBY3Rpb247CS8qIFdoYXQgYWN0aW9uIHRvIHBlcmZv cm0gd2l0aCB0aGUgdGFibGVzICovCiB9IEFsdGVyUHVibGljYXRpb25TdG10OwpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvcGFyc2VyL3BhcnNlX25vZGUuaCBiL3NyYy9pbmNsdWRlL3Bh cnNlci9wYXJzZV9ub2RlLmgKaW5kZXggMTUwMGRlMmRkMC4uNDUzNzU0M2E3YiAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvcGFyc2VyL3BhcnNlX25vZGUuaAorKysgYi9zcmMvaW5jbHVk ZS9wYXJzZXIvcGFyc2Vfbm9kZS5oCkBAIC04MCw2ICs4MCw3IEBAIHR5cGVkZWYgZW51bSBQ YXJzZUV4cHJLaW5kCiAJRVhQUl9LSU5EX0NPUFlfV0hFUkUsCQkvKiBXSEVSRSBjb25kaXRp b24gaW4gQ09QWSBGUk9NICovCiAJRVhQUl9LSU5EX0dFTkVSQVRFRF9DT0xVTU4sIC8qIGdl bmVyYXRpb24gZXhwcmVzc2lvbiBmb3IgYSBjb2x1bW4gKi8KIAlFWFBSX0tJTkRfQ1lDTEVf TUFSSywJCS8qIGN5Y2xlIG1hcmsgdmFsdWUgKi8KKwlFWFBSX0tJTkRfUFVCTElDQVRJT05f V0hFUkUgLyogV0hFUkUgY29uZGl0aW9uIGZvciBhIHRhYmxlIGluIFBVQkxJQ0FUSU9OICov CiB9IFBhcnNlRXhwcktpbmQ7CiAKIApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9wdWJsaWNhdGlvbi5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1 YmxpY2F0aW9uLm91dAppbmRleCA2M2Q2YWI3YTRlLi40NDRmODM0NGJjIDEwMDY0NAotLS0g YS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dAorKysgYi9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dApAQCAtMTU2LDYgKzE1Niw3 NyBAQCBUYWJsZXM6CiAKIERST1AgVEFCTEUgdGVzdHB1Yl9wYXJ0ZWQxOwogRFJPUCBQVUJM SUNBVElPTiB0ZXN0cHViX2ZvcnBhcnRlZCwgdGVzdHB1Yl9mb3JwYXJ0ZWQxOworQ1JFQVRF IFRBQkxFIHRlc3RwdWJfcmZfdGJsMSAoYSBpbnRlZ2VyLCBiIHRleHQpOworQ1JFQVRFIFRB QkxFIHRlc3RwdWJfcmZfdGJsMiAoYyB0ZXh0LCBkIGludGVnZXIpOworQ1JFQVRFIFRBQkxF IHRlc3RwdWJfcmZfdGJsMyAoZSBpbnRlZ2VyKTsKK0NSRUFURSBUQUJMRSB0ZXN0cHViX3Jm X3RibDQgKGcgdGV4dCk7CitTRVQgY2xpZW50X21pbl9tZXNzYWdlcyA9ICdFUlJPUic7CitD UkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjUgRk9SIFRBQkxFIHRlc3RwdWJfcmZfdGJsMSwg dGVzdHB1Yl9yZl90YmwyIFdIRVJFIChjIDw+ICd0ZXN0JyBBTkQgZCA8IDUpOworUkVTRVQg Y2xpZW50X21pbl9tZXNzYWdlczsKK1xkUnArIHRlc3RwdWI1CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNQorICAgICAgICAgIE93 bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0 ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKK1RhYmxlczoK KyAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMSIKKyAgICAicHVibGljLnRlc3RwdWJfcmZf dGJsMiIgV0hFUkUgKCgoYyA8PiAndGVzdCc6OnRleHQpIEFORCAoZCA8IDUpKSkKKworQUxU RVIgUFVCTElDQVRJT04gdGVzdHB1YjUgQUREIFRBQkxFIHRlc3RwdWJfcmZfdGJsMyBXSEVS RSAoZSA+IDEwMDAgQU5EIGUgPCAyMDAwKTsKK1xkUnArIHRlc3RwdWI1CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNQorICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKK1Rh YmxlczoKKyAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMSIKKyAgICAicHVibGljLnRlc3Rw dWJfcmZfdGJsMiIgV0hFUkUgKCgoYyA8PiAndGVzdCc6OnRleHQpIEFORCAoZCA8IDUpKSkK KyAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMyIgV0hFUkUgKCgoZSA+IDEwMDApIEFORCAo ZSA8IDIwMDApKSkKKworQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjUgRFJPUCBUQUJMRSB0 ZXN0cHViX3JmX3RibDI7CitcZFJwKyB0ZXN0cHViNQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjUKKyAgICAgICAgICBPd25lciAg ICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwg VHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCitUYWJsZXM6CisgICAg InB1YmxpYy50ZXN0cHViX3JmX3RibDEiCisgICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDMi IFdIRVJFICgoKGUgPiAxMDAwKSBBTkQgKGUgPCAyMDAwKSkpCisKKy0tIHJlbW92ZSB0ZXN0 cHViX3JmX3RibDEgYW5kIGFkZCB0ZXN0cHViX3JmX3RibDMgYWdhaW4gKGFub3RoZXIgV0hF UkUgZXhwcmVzc2lvbikKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI1IFNFVCBUQUJMRSB0 ZXN0cHViX3JmX3RibDMgV0hFUkUgKGUgPiAzMDAgQU5EIGUgPCA1MDApOworXGRScCsgdGVz dHB1YjUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9u IHRlc3RwdWI1CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IElu c2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICAgIHwgZgorVGFibGVzOgorICAgICJwdWJsaWMudGVzdHB1Yl9yZl90YmwzIiBX SEVSRSAoKChlID4gMzAwKSBBTkQgKGUgPCA1MDApKSkKKworLS0gZmFpbCAtIGZ1bmN0aW9u cyBkaXNhbGxvd2VkCitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNSBBREQgVEFCTEUgdGVz dHB1Yl9yZl90Ymw0IFdIRVJFIChsZW5ndGgoZykgPCA2KTsKK0VSUk9SOiAgZnVuY3Rpb25z IGFyZSBub3QgYWxsb3dlZCBpbiBwdWJsaWNhdGlvbiBXSEVSRSBleHByZXNzaW9ucworTElO RSAxOiAuLi5JQ0FUSU9OIHRlc3RwdWI1IEFERCBUQUJMRSB0ZXN0cHViX3JmX3RibDQgV0hF UkUgKGxlbmd0aChnKSAuLi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBeCistLSBmYWlsIC0gdXNlci1kZWZpbmVkIG9w ZXJhdG9ycyBkaXNhbGxvd2VkCitDUkVBVEUgRlVOQ1RJT04gdGVzdHB1Yl9yZl9mdW5jKGlu dGVnZXIsIGludGVnZXIpIFJFVFVSTlMgYm9vbGVhbiBBUyAkJCBTRUxFQ1QgaGFzaGludDQo JDEpID4gJDIgJCQgTEFOR1VBR0UgU1FMOworQ1JFQVRFIE9QRVJBVE9SID0jPiAoUFJPQ0VE VVJFID0gdGVzdHB1Yl9yZl9mdW5jLCBMRUZUQVJHID0gaW50ZWdlciwgUklHSFRBUkcgPSBp bnRlZ2VyKTsKK0NSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViNiBGT1IgVEFCTEUgdGVzdHB1 Yl9yZl90YmwzIFdIRVJFIChlID0jPiAyNyk7CitFUlJPUjogIHVzZXItZGVmaW5lZCBvcGVy YXRvcnMgYXJlIG5vdCBhbGxvd2VkIGluIHB1YmxpY2F0aW9uIFdIRVJFIGV4cHJlc3Npb25z CitMSU5FIDE6IC4uLklDQVRJT04gdGVzdHB1YjYgRk9SIFRBQkxFIHRlc3RwdWJfcmZfdGJs MyBXSEVSRSAoZSA9Iz4gMjcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorLS0gZmFpbCAtIFdIRVJFIG5vdCBh bGxvd2VkIGluIERST1AKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI1IERST1AgVEFCTEUg dGVzdHB1Yl9yZl90YmwzIFdIRVJFIChlIDwgMjcpOworRVJST1I6ICBzeW50YXggZXJyb3Ig YXQgb3IgbmVhciAiV0hFUkUiCitMSU5FIDE6IC4uLlIgUFVCTElDQVRJT04gdGVzdHB1YjUg RFJPUCBUQUJMRSB0ZXN0cHViX3JmX3RibDMgV0hFUkUgKGUgPC4uLgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KK0RS T1AgVEFCTEUgdGVzdHB1Yl9yZl90YmwxOworRFJPUCBUQUJMRSB0ZXN0cHViX3JmX3RibDI7 CitEUk9QIFRBQkxFIHRlc3RwdWJfcmZfdGJsMzsKK0RST1AgVEFCTEUgdGVzdHB1Yl9yZl90 Ymw0OworRFJPUCBQVUJMSUNBVElPTiB0ZXN0cHViNTsKK0RST1AgT1BFUkFUT1IgPSM+KGlu dGVnZXIsIGludGVnZXIpOworRFJPUCBGVU5DVElPTiB0ZXN0cHViX3JmX2Z1bmMoaW50ZWdl ciwgaW50ZWdlcik7CiAtLSBmYWlsIC0gdmlldwogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3Rw dWJfZm9ydGJsIEZPUiBUQUJMRSB0ZXN0cHViX3ZpZXc7CiBFUlJPUjogICJ0ZXN0cHViX3Zp ZXciIGlzIG5vdCBhIHRhYmxlCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9w dWJsaWNhdGlvbi5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wdWJsaWNhdGlvbi5zcWwK aW5kZXggZDg0NDA3NTM2OC4uYjE2MDZjY2U3ZSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVn cmVzcy9zcWwvcHVibGljYXRpb24uc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3B1 YmxpY2F0aW9uLnNxbApAQCAtOTMsNiArOTMsMzggQEAgQUxURVIgUFVCTElDQVRJT04gdGVz dHB1Yl9mb3JwYXJ0ZWQgU0VUIChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IHRydWUp OwogRFJPUCBUQUJMRSB0ZXN0cHViX3BhcnRlZDE7CiBEUk9QIFBVQkxJQ0FUSU9OIHRlc3Rw dWJfZm9ycGFydGVkLCB0ZXN0cHViX2ZvcnBhcnRlZDE7CiAKK0NSRUFURSBUQUJMRSB0ZXN0 cHViX3JmX3RibDEgKGEgaW50ZWdlciwgYiB0ZXh0KTsKK0NSRUFURSBUQUJMRSB0ZXN0cHVi X3JmX3RibDIgKGMgdGV4dCwgZCBpbnRlZ2VyKTsKK0NSRUFURSBUQUJMRSB0ZXN0cHViX3Jm X3RibDMgKGUgaW50ZWdlcik7CitDUkVBVEUgVEFCTEUgdGVzdHB1Yl9yZl90Ymw0IChnIHRl eHQpOworU0VUIGNsaWVudF9taW5fbWVzc2FnZXMgPSAnRVJST1InOworQ1JFQVRFIFBVQkxJ Q0FUSU9OIHRlc3RwdWI1IEZPUiBUQUJMRSB0ZXN0cHViX3JmX3RibDEsIHRlc3RwdWJfcmZf dGJsMiBXSEVSRSAoYyA8PiAndGVzdCcgQU5EIGQgPCA1KTsKK1JFU0VUIGNsaWVudF9taW5f bWVzc2FnZXM7CitcZFJwKyB0ZXN0cHViNQorQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjUg QUREIFRBQkxFIHRlc3RwdWJfcmZfdGJsMyBXSEVSRSAoZSA+IDEwMDAgQU5EIGUgPCAyMDAw KTsKK1xkUnArIHRlc3RwdWI1CitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNSBEUk9QIFRB QkxFIHRlc3RwdWJfcmZfdGJsMjsKK1xkUnArIHRlc3RwdWI1CistLSByZW1vdmUgdGVzdHB1 Yl9yZl90YmwxIGFuZCBhZGQgdGVzdHB1Yl9yZl90YmwzIGFnYWluIChhbm90aGVyIFdIRVJF IGV4cHJlc3Npb24pCitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNSBTRVQgVEFCTEUgdGVz dHB1Yl9yZl90YmwzIFdIRVJFIChlID4gMzAwIEFORCBlIDwgNTAwKTsKK1xkUnArIHRlc3Rw dWI1CistLSBmYWlsIC0gZnVuY3Rpb25zIGRpc2FsbG93ZWQKK0FMVEVSIFBVQkxJQ0FUSU9O IHRlc3RwdWI1IEFERCBUQUJMRSB0ZXN0cHViX3JmX3RibDQgV0hFUkUgKGxlbmd0aChnKSA8 IDYpOworLS0gZmFpbCAtIHVzZXItZGVmaW5lZCBvcGVyYXRvcnMgZGlzYWxsb3dlZAorQ1JF QVRFIEZVTkNUSU9OIHRlc3RwdWJfcmZfZnVuYyhpbnRlZ2VyLCBpbnRlZ2VyKSBSRVRVUk5T IGJvb2xlYW4gQVMgJCQgU0VMRUNUIGhhc2hpbnQ0KCQxKSA+ICQyICQkIExBTkdVQUdFIFNR TDsKK0NSRUFURSBPUEVSQVRPUiA9Iz4gKFBST0NFRFVSRSA9IHRlc3RwdWJfcmZfZnVuYywg TEVGVEFSRyA9IGludGVnZXIsIFJJR0hUQVJHID0gaW50ZWdlcik7CitDUkVBVEUgUFVCTElD QVRJT04gdGVzdHB1YjYgRk9SIFRBQkxFIHRlc3RwdWJfcmZfdGJsMyBXSEVSRSAoZSA9Iz4g MjcpOworLS0gZmFpbCAtIFdIRVJFIG5vdCBhbGxvd2VkIGluIERST1AKK0FMVEVSIFBVQkxJ Q0FUSU9OIHRlc3RwdWI1IERST1AgVEFCTEUgdGVzdHB1Yl9yZl90YmwzIFdIRVJFIChlIDwg MjcpOworCitEUk9QIFRBQkxFIHRlc3RwdWJfcmZfdGJsMTsKK0RST1AgVEFCTEUgdGVzdHB1 Yl9yZl90YmwyOworRFJPUCBUQUJMRSB0ZXN0cHViX3JmX3RibDM7CitEUk9QIFRBQkxFIHRl c3RwdWJfcmZfdGJsNDsKK0RST1AgUFVCTElDQVRJT04gdGVzdHB1YjU7CitEUk9QIE9QRVJB VE9SID0jPihpbnRlZ2VyLCBpbnRlZ2VyKTsKK0RST1AgRlVOQ1RJT04gdGVzdHB1Yl9yZl9m dW5jKGludGVnZXIsIGludGVnZXIpOworCiAtLSBmYWlsIC0gdmlldwogQ1JFQVRFIFBVQkxJ Q0FUSU9OIHRlc3RwdWJfZm9ydGJsIEZPUiBUQUJMRSB0ZXN0cHViX3ZpZXc7CiBTRVQgY2xp ZW50X21pbl9tZXNzYWdlcyA9ICdFUlJPUic7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9zdWJz Y3JpcHRpb24vdC8wMjFfcm93X2ZpbHRlci5wbCBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90 LzAyMV9yb3dfZmlsdGVyLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAuLjBmNmQyZjAxMjgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9zdWJzY3JpcHRp b24vdC8wMjFfcm93X2ZpbHRlci5wbApAQCAtMCwwICsxLDI5OCBAQAorIyBUZXN0IGxvZ2lj YWwgcmVwbGljYXRpb24gYmVoYXZpb3Igd2l0aCByb3cgZmlsdGVyaW5nCit1c2Ugc3RyaWN0 OwordXNlIHdhcm5pbmdzOwordXNlIFBvc3RncmVzTm9kZTsKK3VzZSBUZXN0TGliOwordXNl IFRlc3Q6Ok1vcmUgdGVzdHMgPT4gNzsKKworIyBjcmVhdGUgcHVibGlzaGVyIG5vZGUKK215 ICRub2RlX3B1Ymxpc2hlciA9IGdldF9uZXdfbm9kZSgncHVibGlzaGVyJyk7Ciskbm9kZV9w dWJsaXNoZXItPmluaXQoYWxsb3dzX3N0cmVhbWluZyA9PiAnbG9naWNhbCcpOworJG5vZGVf cHVibGlzaGVyLT5zdGFydDsKKworIyBjcmVhdGUgc3Vic2NyaWJlciBub2RlCitteSAkbm9k ZV9zdWJzY3JpYmVyID0gZ2V0X25ld19ub2RlKCdzdWJzY3JpYmVyJyk7Ciskbm9kZV9zdWJz Y3JpYmVyLT5pbml0KGFsbG93c19zdHJlYW1pbmcgPT4gJ2xvZ2ljYWwnKTsKKyRub2RlX3N1 YnNjcmliZXItPnN0YXJ0OworCisjIHNldHVwIHN0cnVjdHVyZSBvbiBwdWJsaXNoZXIKKyRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBUQUJMRSB0 YWJfcm93ZmlsdGVyXzEgKGEgaW50IHByaW1hcnkga2V5LCBiIHRleHQpIik7Ciskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgVEFCTEUgdGFiX3Jv d2ZpbHRlcl8yIChjIGludCBwcmltYXJ5IGtleSkiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBUQUJMRSB0YWJfcm93ZmlsdGVyXzMgKGEg aW50IHByaW1hcnkga2V5LCBiIGJvb2xlYW4pIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgVEFCTEUgdGFiX3Jvd2ZpbHRlcl9wYXJ0aXRp b25lZCAoYSBpbnQgcHJpbWFyeSBrZXksIGIgaW50ZWdlcikgUEFSVElUSU9OIEJZIFJBTkdF KGEpIgorKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNS RUFURSBUQUJMRSB0YWJfcm93ZmlsdGVyX2xlc3NfMTBrIChMSUtFIHRhYl9yb3dmaWx0ZXJf cGFydGl0aW9uZWQpIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LAorCSJBTFRFUiBUQUJMRSB0YWJfcm93ZmlsdGVyX3BhcnRpdGlvbmVkIEFUVEFDSCBQQVJU SVRJT04gdGFiX3Jvd2ZpbHRlcl9sZXNzXzEwayBGT1IgVkFMVUVTIEZST00gKE1JTlZBTFVF KSBUTyAoMTAwMDApIgorKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsCisJIkNSRUFURSBUQUJMRSB0YWJfcm93ZmlsdGVyX2dyZWF0ZXJfMTBrIChMSUtFIHRh Yl9yb3dmaWx0ZXJfcGFydGl0aW9uZWQpIgorKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsCisJIkFMVEVSIFRBQkxFIHRhYl9yb3dmaWx0ZXJfcGFydGl0aW9u ZWQgQVRUQUNIIFBBUlRJVElPTiB0YWJfcm93ZmlsdGVyX2dyZWF0ZXJfMTBrIEZPUiBWQUxV RVMgRlJPTSAoMTAwMDApIFRPIChNQVhWQUxVRSkiCispOworCisjIHNldHVwIHN0cnVjdHVy ZSBvbiBzdWJzY3JpYmVyCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywKKwkiQ1JFQVRFIFRBQkxFIHRhYl9yb3dmaWx0ZXJfMSAoYSBpbnQgcHJpbWFyeSBrZXks IGIgdGV4dCkiKTsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAor CSJDUkVBVEUgVEFCTEUgdGFiX3Jvd2ZpbHRlcl8yIChjIGludCBwcmltYXJ5IGtleSkiKTsK KyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgVEFC TEUgdGFiX3Jvd2ZpbHRlcl8zIChhIGludCBwcmltYXJ5IGtleSwgYiBib29sZWFuKSIpOwor JG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBUQUJM RSB0YWJfcm93ZmlsdGVyX3BhcnRpdGlvbmVkIChhIGludCBwcmltYXJ5IGtleSwgYiBpbnRl Z2VyKSBQQVJUSVRJT04gQlkgUkFOR0UoYSkiCispOworJG5vZGVfc3Vic2NyaWJlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBUQUJMRSB0YWJfcm93ZmlsdGVyX2xlc3Nf MTBrIChMSUtFIHRhYl9yb3dmaWx0ZXJfcGFydGl0aW9uZWQpIik7Ciskbm9kZV9zdWJzY3Jp YmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQUxURVIgVEFCTEUgdGFiX3Jvd2ZpbHRl cl9wYXJ0aXRpb25lZCBBVFRBQ0ggUEFSVElUSU9OIHRhYl9yb3dmaWx0ZXJfbGVzc18xMGsg Rk9SIFZBTFVFUyBGUk9NIChNSU5WQUxVRSkgVE8gKDEwMDAwKSIKKyk7Ciskbm9kZV9zdWJz Y3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFRBQkxFIHRhYl9yb3dm aWx0ZXJfZ3JlYXRlcl8xMGsgKExJS0UgdGFiX3Jvd2ZpbHRlcl9wYXJ0aXRpb25lZCkiCisp OworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkFMVEVSIFRB QkxFIHRhYl9yb3dmaWx0ZXJfcGFydGl0aW9uZWQgQVRUQUNIIFBBUlRJVElPTiB0YWJfcm93 ZmlsdGVyX2dyZWF0ZXJfMTBrIEZPUiBWQUxVRVMgRlJPTSAoMTAwMDApIFRPIChNQVhWQUxV RSkiCispOworCisjIHNldHVwIGxvZ2ljYWwgcmVwbGljYXRpb24KKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBQVUJMSUNBVElPTiB0YXBfcHVi XzEgRk9SIFRBQkxFIHRhYl9yb3dmaWx0ZXJfMSBXSEVSRSAoYSA+IDEwMDAgQU5EIGIgPD4g J2ZpbHRlcmVkJykiCispOworCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLAorCSJBTFRFUiBQVUJMSUNBVElPTiB0YXBfcHViXzEgQUREIFRBQkxFIHRhYl9yb3dm aWx0ZXJfMiBXSEVSRSAoYyAlIDcgPSAwKSIKKyk7CisKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsCisJIkFMVEVSIFBVQkxJQ0FUSU9OIHRhcF9wdWJfMSBTRVQg VEFCTEUgdGFiX3Jvd2ZpbHRlcl8xIFdIRVJFIChhID4gMTAwMCBBTkQgYiA8PiAnZmlsdGVy ZWQnKSwgdGFiX3Jvd2ZpbHRlcl8yIFdIRVJFIChjICUgMiA9IDApLCB0YWJfcm93ZmlsdGVy XzMiCispOworCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJD UkVBVEUgUFVCTElDQVRJT04gdGFwX3B1Yl8yIEZPUiBUQUJMRSB0YWJfcm93ZmlsdGVyXzIg V0hFUkUgKGMgJSAzID0gMCkiCispOworCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLAorCSJDUkVBVEUgUFVCTElDQVRJT04gdGFwX3B1Yl8zIEZPUiBUQUJMRSB0 YWJfcm93ZmlsdGVyX3BhcnRpdGlvbmVkIFdIRVJFIChhIDwgNTAwMCkiCispOworJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQUxURVIgUFVCTElDQVRJT04g dGFwX3B1Yl8zIEFERCBUQUJMRSB0YWJfcm93ZmlsdGVyX2xlc3NfMTBrIFdIRVJFIChhIDwg NjAwMCkiCispOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwki Q1JFQVRFIFBVQkxJQ0FUSU9OIHRhcF9wdWJfbm90X3VzZWQgRk9SIFRBQkxFIHRhYl9yb3dm aWx0ZXJfMSBXSEVSRSAoYSA8IDApIgorKTsKKworIworIyBUaGUgZm9sbG93aW5nIElOU0VS VHMgYXJlIGV4ZWN1dGVkIGJlZm9yZSB0aGUgQ1JFQVRFIFNVQlNDUklQVElPTiwgc28gdGhl c2UKKyMgU1FMIGNvbW1hbmRzIGFyZSBmb3IgdGVzdGluZyB0aGUgaW5pdGlhbCBkYXRhIGNv cHkgdXNpbmcgbG9naWNhbCByZXBsaWNhdGlvbi4KKyMKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsCisJIklOU0VSVCBJTlRPIHRhYl9yb3dmaWx0ZXJfMSAoYSwg YikgVkFMVUVTICgxLCAnbm90IHJlcGxpY2F0ZWQnKSIpOworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiSU5TRVJUIElOVE8gdGFiX3Jvd2ZpbHRlcl8xIChh LCBiKSBWQUxVRVMgKDE1MDAsICdmaWx0ZXJlZCcpIik7Ciskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLAorCSJJTlNFUlQgSU5UTyB0YWJfcm93ZmlsdGVyXzEgKGEs IGIpIFZBTFVFUyAoMTk4MCwgJ25vdCBmaWx0ZXJlZCcpIik7Ciskbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJJTlNFUlQgSU5UTyB0YWJfcm93ZmlsdGVyXzEg KGEsIGIpIFNFTEVDVCB4LCAndGVzdCAnIHx8IHggRlJPTSBnZW5lcmF0ZV9zZXJpZXMoOTkw LDEwMDIpIHgiCispOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywK KwkiSU5TRVJUIElOVE8gdGFiX3Jvd2ZpbHRlcl8yIChjKSBTRUxFQ1QgZ2VuZXJhdGVfc2Vy aWVzKDEsIDIwKSIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywK KwkiSU5TRVJUIElOVE8gdGFiX3Jvd2ZpbHRlcl8zIChhLCBiKSBTRUxFQ1QgeCwgKHggJSAz ID0gMCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTApIHgiKTsKKworIyBpbnNlcnQgZGF0 YSBpbnRvIHBhcnRpdGlvbmVkIHRhYmxlIGFuZCBkaXJlY3RseSBvbiB0aGUgcGFydGl0aW9u Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJJTlNFUlQgSU5U TyB0YWJfcm93ZmlsdGVyX3BhcnRpdGlvbmVkIChhLCBiKSBWQUxVRVMoMSwgMTAwKSwoNzAw MCwgMTAxKSwoMTUwMDAsIDEwMiksKDU1MDAsIDMwMCkiKTsKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIklOU0VSVCBJTlRPIHRhYl9yb3dmaWx0ZXJfbGVz c18xMGsgKGEsIGIpIFZBTFVFUygyLCAyMDApLCg2MDA1LCAyMDEpIik7Ciskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJJTlNFUlQgSU5UTyB0YWJfcm93Zmls dGVyX2dyZWF0ZXJfMTBrIChhLCBiKSBWQUxVRVMoMTYwMDAsIDEwMykiKTsKKworbXkgJHB1 Ymxpc2hlcl9jb25uc3RyID0gJG5vZGVfcHVibGlzaGVyLT5jb25uc3RyIC4gJyBkYm5hbWU9 cG9zdGdyZXMnOworbXkgJGFwcG5hbWUgICAgICAgICAgID0gJ3RhcF9zdWInOworJG5vZGVf c3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBTVUJTQ1JJUFRJ T04gdGFwX3N1YiBDT05ORUNUSU9OICckcHVibGlzaGVyX2Nvbm5zdHIgYXBwbGljYXRpb25f bmFtZT0kYXBwbmFtZScgUFVCTElDQVRJT04gdGFwX3B1Yl8xLCB0YXBfcHViXzIsIHRhcF9w dWJfMyIKKyk7CisKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFt ZSk7CisKKyMgd2FpdCBmb3IgaW5pdGlhbCB0YWJsZSBzeW5jaHJvbml6YXRpb24gdG8gZmlu aXNoCitteSAkc3luY2VkX3F1ZXJ5ID0KKyAgIlNFTEVDVCBjb3VudCgxKSA9IDAgRlJPTSBw Z19zdWJzY3JpcHRpb25fcmVsIFdIRVJFIHNyc3Vic3RhdGUgTk9UIElOICgncicsICdzJyk7 IjsKKyRub2RlX3N1YnNjcmliZXItPnBvbGxfcXVlcnlfdW50aWwoJ3Bvc3RncmVzJywgJHN5 bmNlZF9xdWVyeSkKKyAgb3IgZGllICJUaW1lZCBvdXQgd2hpbGUgd2FpdGluZyBmb3Igc3Vi c2NyaWJlciB0byBzeW5jaHJvbml6ZSBkYXRhIjsKKworIyBDaGVjayBleHBlY3RlZCByZXBs aWNhdGVkIHJvd3MgZm9yIHRhYl9yb3dmaWx0ZXJfMQorIyB0YXBfcHViXzEgZmlsdGVyIGlz OiAoYSA+IDEwMDAgQU5EIGIgPD4gJ2ZpbHRlcmVkJykKKyMgLSBJTlNFUlQgKDEsICdub3Qg cmVwbGljYXRlZCcpICAgTk8sIGJlY2F1c2UgYSBpcyBub3QgPiAxMDAwCisjIC0gSU5TRVJU ICgxNTAwLCAnZmlsdGVyZWQnKSAgICAgIE5PLCBiZWNhdXNlIGIgPT0gJ2ZpbHRlcmVkJwor IyAtIElOU0VSVCAoMTk4MCwgJ25vdCBmaWx0ZXJlZCcpICBZRVMKKyMgLSBnZW5lcmF0ZV9z ZXJpZXMoOTkwLDEwMDIpICAgICAgWUVTLCBvbmx5IGZvciAxMDAxLDEwMDIgYmVjYXVzZSBh ID4gMTAwMAorIworbXkgJHJlc3VsdCA9CisgICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgYSwgYiBGUk9NIHRhYl9yb3dmaWx0ZXJfMSBPUkRF UiBCWSAxLCAyIik7CitpcyggJHJlc3VsdCwgcXEoMTAwMXx0ZXN0IDEwMDEKKzEwMDJ8dGVz dCAxMDAyCisxOTgwfG5vdCBmaWx0ZXJlZCksICdjaGVjayBpbml0aWFsIGRhdGEgY29weSBm cm9tIHRhYmxlIHRhYl9yb3dmaWx0ZXJfMScpOworCisjIENoZWNrIGV4cGVjdGVkIHJlcGxp Y2F0ZWQgcm93cyBmb3IgdGFiX3Jvd2ZpbHRlcl8yCisjIHRhcF9wdWJfMSBmaWx0ZXIgaXM6 IChjICUgMiA9IDApCisjIHRhcF9wdWJfMiBmaWx0ZXIgaXM6IChjICUgMyA9IDApCisjIFdo ZW4gdGhlcmUgYXJlIG11bHRpcGxlIHB1YmxpY2F0aW9ucyBmb3IgdGhlIHNhbWUgdGFibGUs IGFsbCBmaWx0ZXIKKyMgZXhwcmVzc2lvbnMgc2hvdWxkIHN1Y2NlZWQuIEluIHRoaXMgY2Fz ZSwgcm93cyBhcmUgcmVwbGljYXRlZCBpZiBjIHZhbHVlIGlzCisjIGRpdmlkZWQgYnkgMiBB TkQgMyAoNiwgMTIsIDE4KS4KKyMKKyRyZXN1bHQgPQorICAkbm9kZV9zdWJzY3JpYmVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIGNvdW50KGMpLCBtaW4oYyksIG1heChj KSBGUk9NIHRhYl9yb3dmaWx0ZXJfMiIpOworaXMoJHJlc3VsdCwgcXEoM3w2fDE4KSwgJ2No ZWNrIGluaXRpYWwgZGF0YSBjb3B5IGZyb20gdGFibGUgdGFiX3Jvd2ZpbHRlcl8yJyk7CisK KyMgQ2hlY2sgZXhwZWN0ZWQgcmVwbGljYXRlZCByb3dzIGZvciB0YWJfcm93ZmlsdGVyXzMK KyMgVGhlcmUgaXMgbm8gZmlsdGVyLiAxMCByb3dzIGFyZSBpbnNlcnRlZCwgc28gMTAgcm93 cyBhcmUgcmVwbGljYXRlZC4KKyRyZXN1bHQgPQorICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIGNvdW50KGEpIEZST00gdGFiX3Jvd2ZpbHRl cl8zIik7CitpcygkcmVzdWx0LCBxcSgxMCksICdjaGVjayBpbml0aWFsIGRhdGEgY29weSBm cm9tIHRhYmxlIHRhYl9yb3dmaWx0ZXJfMycpOworCisjIENoZWNrIGV4cGVjdGVkIHJlcGxp Y2F0ZWQgcm93cyBmb3IgcGFydGl0aW9ucworIyBwdWJsaWNhdGlvbiBvcHRpb24gcHVibGlz aF92aWFfcGFydGl0aW9uX3Jvb3QgaXMgZmFsc2Ugc28gdXNlIHRoZSByb3cgZmlsdGVyCisj IGZyb20gYSBwYXJ0aXRpb24KKyMgdGFiX3Jvd2ZpbHRlcl9wYXJ0aXRpb25lZCBmaWx0ZXI6 IChhIDwgNTAwMCkKKyMgdGFiX3Jvd2ZpbHRlcl9sZXNzXzEwayBmaWx0ZXI6ICAgIChhIDwg NjAwMCkKKyMgdGFiX3Jvd2ZpbHRlcl9ncmVhdGVyXzEwayBmaWx0ZXI6IG5vIGZpbHRlcgor IworIyBJTlNFUlQgaW50byB0YWJfcm93ZmlsdGVyX3BhcnRpdGlvbmVkOgorIyAtIElOU0VS VCAoMSwxMDApICAgICAgIFlFUywgYmVjYXVzZSAxIDwgNjAwMAorIyAtIElOU0VSVCAoNzAw MCwgMTAxKSAgIE5PLCAgYmVjYXVzZSA3MDAwIGlzIG5vdCA8IDYwMDAKKyMgLSBJTlNFUlQg KDE1MDAwLCAxMDIpICBZRVMsIGJlY2F1c2UgdGFiX3Jvd2ZpbHRlcl9ncmVhdGVyXzEwayBo YXMgbm8gZmlsdGVyCisjIC0gSU5TRVJUICg1NTAwLCAzMDApICAgWUVTLCBiZWNhdXNlIDU1 MDAgPCA2MDAwCisjCisjIElOU0VSVCBkaXJlY3RseSBpbnRvIHRhYl9yb3dmaWx0ZXJfbGVz c18xMGs6CisjIC0gSU5TRVJUICgyLCAyMDApICAgICAgWUVTLCBiZWNhdXNlIDIgPCA2MDAw CisjIC0gSU5TRVJUICg2MDA1LCAyMDEpICAgTk8sIGJlY2F1c2UgNjAwNSBpcyBub3QgPCA2 MDAwCisjCisjIElOU0VSVCBkaXJlY3RseSBpbnRvIHRhYl9yb3dmaWx0ZXJfZ3JlYXRlcl8x MGs6CisjIC0gSU5TRVJUICgxNjAwMCwgMTAzKSAgWUVTLCBiZWNhdXNlIHRhYl9yb3dmaWx0 ZXJfZ3JlYXRlcl8xMGsgaGFzIG5vIGZpbHRlcgorIworJHJlc3VsdCA9CisgICRub2RlX3N1 YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgYSwgYiBGUk9NIHRh Yl9yb3dmaWx0ZXJfbGVzc18xMGsgT1JERVIgQlkgMSwgMiIpOworaXMoJHJlc3VsdCwgcXEo MXwxMDAKKzJ8MjAwCis1NTAwfDMwMCksICdjaGVjayBpbml0aWFsIGRhdGEgY29weSBmcm9t IHBhcnRpdGlvbiB0YWJfcm93ZmlsdGVyX2xlc3NfMTBrJyk7CisKKyRyZXN1bHQgPQorICAk bm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIGEsIGIg RlJPTSB0YWJfcm93ZmlsdGVyX2dyZWF0ZXJfMTBrIE9SREVSIEJZIDEsIDIiKTsKK2lzKCRy ZXN1bHQsIHFxKDE1MDAwfDEwMgorMTYwMDB8MTAzKSwgJ2NoZWNrIGluaXRpYWwgZGF0YSBj b3B5IGZyb20gcGFydGl0aW9uIHRhYl9yb3dmaWx0ZXJfZ3JlYXRlcl8xMGsnKTsKKworIyBU aGUgZm9sbG93aW5nIGNvbW1hbmRzIGFyZSBleGVjdXRlZCBhZnRlciBDUkVBVEUgU1VCU0NS SVBUSU9OLCBzbyB0aGVzZSBTUUwKKyMgY29tbWFuZHMgYXJlIGZvciB0ZXN0aW5nIG5vcm1h bCBsb2dpY2FsIHJlcGxpY2F0aW9uIGJlaGF2aW9yLgorIworIyB0ZXN0IHJvdyBmaWx0ZXIg KElOU0VSVCwgVVBEQVRFLCBERUxFVEUpCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLAorCSJJTlNFUlQgSU5UTyB0YWJfcm93ZmlsdGVyXzEgKGEsIGIpIFZBTFVF UyAoODAwLCAndGVzdCA4MDAnKSIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywKKwkiSU5TRVJUIElOVE8gdGFiX3Jvd2ZpbHRlcl8xIChhLCBiKSBWQUxVRVMg KDE2MDAsICd0ZXN0IDE2MDAnKSIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywKKwkiSU5TRVJUIElOVE8gdGFiX3Jvd2ZpbHRlcl8xIChhLCBiKSBWQUxVRVMg KDE2MDEsICd0ZXN0IDE2MDEnKSIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywKKwkiSU5TRVJUIElOVE8gdGFiX3Jvd2ZpbHRlcl8xIChhLCBiKSBWQUxVRVMg KDE3MDAsICd0ZXN0IDE3MDAnKSIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywKKwkiVVBEQVRFIHRhYl9yb3dmaWx0ZXJfMSBTRVQgYiA9IE5VTEwgV0hFUkUg YSA9IDE2MDAiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJ IlVQREFURSB0YWJfcm93ZmlsdGVyXzEgU0VUIGIgPSAndGVzdCAxNjAxIHVwZGF0ZWQnIFdI RVJFIGEgPSAxNjAxIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LAorCSJERUxFVEUgRlJPTSB0YWJfcm93ZmlsdGVyXzEgV0hFUkUgYSA9IDE3MDAiKTsKKwor JG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKworIyBDaGVj ayBleHBlY3RlZCByZXBsaWNhdGVkIHJvd3MgZm9yIHRhYl9yb3dmaWx0ZXJfMQorIyB0YXBf cHViXzEgZmlsdGVyIGlzOiAoYSA+IDEwMDAgQU5EIGIgPD4gJ2ZpbHRlcmVkJykKKyMKKyMg LSAxMDAxLCAxMDAyLCAxOTgwIGFscmVhZHkgZXhpc3QgZnJvbSBpbml0aWFsIGRhdGEgY29w eQorIyAtIElOU0VSVCAoODAwLCAndGVzdCA4MDAnKSAgIE5PLCBiZWNhdXNlIDgwMCBpcyBu b3QgPiAxMDAwCisjIC0gSU5TRVJUICgxNjAwLCAndGVzdCAxNjAwJykgWUVTLCBiZWNhdXNl IDE2MDAgPiAxMDAwIGFuZCAndGVzdCAxNjAwJyA8PiAnZmlsdGVyZWQnCisjIC0gSU5TRVJU ICgxNjAxLCAndGVzdCAxNjAxJykgWUVTLCBiZWNhdXNlIDE2MDEgPiAxMDAwIGFuZCAndGVz dCAxNjAxJyA8PiAnZmlsdGVyZWQnCisjIC0gSU5TRVJUICgxNzAwLCAndGVzdCAxNzAwJykg WUVTLCBiZWNhdXNlIDE3MDAgPiAxMDAwIGFuZCAndGVzdCAxNzAwJyA8PiAnZmlsdGVyZWQn CisjIC0gVVBEQVRFICgxNjAwLCBOVUxMKSAgICAgICAgTk8sIHJvdyBmaWx0ZXIgZXZhbHVh dGVzIHRvIGZhbHNlIGJlY2F1c2UgTlVMTCBpcyBub3QgPD4gJ2ZpbHRlcmVkJworIyAtIFVQ REFURSAoMTYwMSwgJ3Rlc3QgMTYwMSB1cGRhdGVkJykgWUVTLCBiZWNhdXNlIDE2MDEgPiAx MDAwIGFuZCAndGVzdCAxNjAxIHVwZGF0ZWQnIDw+ICdmaWx0ZXJlZCcKKyMgLSBERUxFVEUg KDE3MDApICAgICAgICAgICAgICBOTywgcm93IGZpbHRlciBjb250YWlucyBjb2x1bW4gYiB0 aGF0IGlzIG5vdCBwYXJ0IG9mCisjIHRoZSBQSyBvciBSRVBMSUNBIElERU5USVRZIGFuZCBv bGQgdHVwbGUgY29udGFpbnMgYiA9IE5VTEwsIGhlbmNlLCByb3cgZmlsdGVyCisjIGV2YWx1 YXRlcyB0byBmYWxzZQorIworJHJlc3VsdCA9CisgICRub2RlX3N1YnNjcmliZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgYSwgYiBGUk9NIHRhYl9yb3dmaWx0ZXJfMSBP UkRFUiBCWSAxLCAyIik7CitpcygkcmVzdWx0LCBxcSgxMDAxfHRlc3QgMTAwMQorMTAwMnx0 ZXN0IDEwMDIKKzE2MDB8dGVzdCAxNjAwCisxNjAxfHRlc3QgMTYwMSB1cGRhdGVkCisxNzAw fHRlc3QgMTcwMAorMTk4MHxub3QgZmlsdGVyZWQpLCAnY2hlY2sgcmVwbGljYXRlZCByb3dz IHRvIHRhYmxlIHRhYl9yb3dmaWx0ZXJfMScpOworCisjIFB1Ymxpc2ggdXNpbmcgcm9vdCBw YXJ0aXRpb25lZCB0YWJsZQorIyBVc2UgYSBkaWZmZXJlbnQgcGFydGl0aW9uZWQgdGFibGUg bGF5b3V0IChleGVyY2lzZSBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCkKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkFMVEVSIFBVQkxJQ0FUSU9OIHRh cF9wdWJfMyBTRVQgKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gdHJ1ZSkiKTsKKyRu b2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJUUlVOQ0FURSBUQUJM RSB0YWJfcm93ZmlsdGVyX3BhcnRpdGlvbmVkIik7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywKKwkiQUxURVIgU1VCU0NSSVBUSU9OIHRhcF9zdWIgUkVGUkVT SCBQVUJMSUNBVElPTiBXSVRIIChjb3B5X2RhdGEgPSB0cnVlKSIpOworJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiSU5TRVJUIElOVE8gdGFiX3Jvd2ZpbHRl cl9wYXJ0aXRpb25lZCAoYSwgYikgVkFMVUVTKDQwMDAsIDQwMCksKDQwMDEsIDQwMSksKDQw MDIsIDQwMikiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJ IklOU0VSVCBJTlRPIHRhYl9yb3dmaWx0ZXJfbGVzc18xMGsgKGEsIGIpIFZBTFVFUyg0NTAw LCA0NTApIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJJ TlNFUlQgSU5UTyB0YWJfcm93ZmlsdGVyX2xlc3NfMTBrIChhLCBiKSBWQUxVRVMoNTYwMCwg MTIzKSIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiSU5T RVJUIElOVE8gdGFiX3Jvd2ZpbHRlcl9ncmVhdGVyXzEwayAoYSwgYikgVkFMVUVTKDE0MDAw LCAxOTUwKSIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwki VVBEQVRFIHRhYl9yb3dmaWx0ZXJfbGVzc18xMGsgU0VUIGIgPSAzMCBXSEVSRSBhID0gNDAw MSIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiREVMRVRF IEZST00gdGFiX3Jvd2ZpbHRlcl9sZXNzXzEwayBXSEVSRSBhID0gNDAwMiIpOworCiskbm9k ZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOworCisjIENoZWNrIGV4 cGVjdGVkIHJlcGxpY2F0ZWQgcm93cyBmb3IgcGFydGl0aW9ucworIyBwdWJsaWNhdGlvbiBv cHRpb24gcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgaXMgdHJ1ZSBzbyB1c2UgdGhlIHJv dyBmaWx0ZXIKKyMgZnJvbSB0aGUgcm9vdCBwYXJ0aXRpb25lZCB0YWJsZQorIyB0YWJfcm93 ZmlsdGVyX3BhcnRpdGlvbmVkIGZpbHRlcjogKGEgPCA1MDAwKQorIyB0YWJfcm93ZmlsdGVy X2xlc3NfMTBrIGZpbHRlcjogICAgKGEgPCA2MDAwKQorIyB0YWJfcm93ZmlsdGVyX2dyZWF0 ZXJfMTBrIGZpbHRlcjogbm8gZmlsdGVyCisjCisjIEFmdGVyIFRSVU5DQVRFLCBSRUZSRVNI IFBVQkxJQ0FUSU9OLCB0aGUgaW5pdGlhbCBkYXRhIGNvcHkgd2lsbCBhcHBseSB0aGUKKyMg cGFydGl0aW9uZWQgdGFibGUgcm93IGZpbHRlci4KKyMgLSBJTlNFUlQgKDEsIDEwMCkgICAg ICBZRVMsIDEgPCA1MDAwCisjIC0gSU5TRVJUICg3MDAwLCAxMDEpICAgTk8sIDcwMDAgaXMg bm90IDwgNTAwMAorIyAtIElOU0VSVCAoMTUwMDAsIDEwMikgIE5PLCAxNTAwMCBpcyBub3Qg PCA1MDAwCisjIC0gSU5TRVJUICg1NTAwLCAzMDApICAgTk8sIDU1MDAgaXMgbm90IDwgNTAw MAorIyAtIElOU0VSVCAoMiwgMjAwKSAgICAgIFlFUywgMiA8IDUwMDAKKyMgLSBJTlNFUlQg KDYwMDUsIDIwMSkgICBOTywgNjAwNSBpcyBub3QgPCA1MDAwCisjIC0gSU5TRVJUICgxNjAw MCwgMTAzKSAgTk8sIDE2MDAwIGlzIG5vdCA8IDUwMDAKKyMKKyMgRXhlY3V0ZSBTUUwgY29t bWFuZHMgYWZ0ZXIgaW5pdGlhbCBkYXRhIGNvcHkgZm9yIHRlc3RpbmcgdGhlIGxvZ2ljYWwK KyMgcmVwbGljYXRpb24gYmVoYXZpb3IuCisjIC0gSU5TRVJUICg0MDAwLCA0MDApICAgIFlF UywgNDAwMCA8IDUwMDAKKyMgLSBJTlNFUlQgKDQwMDEsIDQwMSkgICAgWUVTLCA0MDAxIDwg NTAwMAorIyAtIElOU0VSVCAoNDAwMiwgNDAyKSAgICBZRVMsIDQwMDIgPCA1MDAwCisjIC0g SU5TRVJUICg0NTAwLCA0NTApICAgIFlFUywgNDUwMCA8IDUwMDAKKyMgLSBJTlNFUlQgKDU2 MDAsIDEyMykgICAgTk8sIDU2MDAgaXMgbm90IDwgNTAwMAorIyAtIElOU0VSVCAoMTQwMDAs IDE5NTApICBOTywgMTYwMDAgaXMgbm90IDwgNTAwMAorJHJlc3VsdCA9CisgICRub2RlX3N1 YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgYSwgYiBGUk9NIHRh Yl9yb3dmaWx0ZXJfcGFydGl0aW9uZWQgT1JERVIgQlkgMSwgMiIpOworaXMoICRyZXN1bHQs IHFxKDF8MTAwCisyfDIwMAorNDAwMHw0MDAKKzQwMDF8MzAKKzQ1MDB8NDUwKSwgJ2NoZWNr IHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290IGJlaGF2aW9yJyk7CisKKyRub2RlX3N1YnNj cmliZXItPnN0b3AoJ2Zhc3QnKTsKKyRub2RlX3B1Ymxpc2hlci0+c3RvcCgnZmFzdCcpOwot LSAKMi4yMC4xCgo= --6cd8d80aca5e4b2fa07fe89550d395b2--