Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1vEVKy-00CV4J-4d for pgsql-hackers@arkaria.postgresql.org; Thu, 30 Oct 2025 16:17:19 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1vEVKx-009PC6-2S for pgsql-hackers@arkaria.postgresql.org; Thu, 30 Oct 2025 16:17:18 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1vEVKw-009PBy-7D for pgsql-hackers@lists.postgresql.org; Thu, 30 Oct 2025 16:17:17 +0000 Received: from mail-qt1-x82c.google.com ([2607:f8b0:4864:20::82c]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vEVKs-004af2-1b for pgsql-hackers@lists.postgresql.org; Thu, 30 Oct 2025 16:17:16 +0000 Received: by mail-qt1-x82c.google.com with SMTP id d75a77b69052e-4e88ac010b0so1574701cf.3 for ; Thu, 30 Oct 2025 09:17:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1761841033; x=1762445833; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=gxDcgES4HsclKbKarL45AKwmJQCdABWonlK5nWihqpQ=; b=QLDu5E9krOTDDpQLI7JV4HYAbDA+ZSzsM0oWWD/UR7rjpBmlQ3NqqPMX7x24E0M6sD Scg0WFtqejmHXtxLeiAd8+yb9pI49u+cozTdNDxYZN+IYTl7upjWIF7Rolnm9A/N8EOa up7ykhhItG6llLA5oFV3T16qdg6UPBFlGbRH2TvtX1FENKH3V1/VCNm3nVgnAM7DVOkR Bg0MdczCcuNGWV01NrF9QLjpooizc2b81Qx9/XlNlju11SC7+eCosTi3u/Xu84kINn6l Wu8mHrfPLR8s2Tcuc0sQE9hTBRkYCKi3f4nwh91U11IDFlrBiqxqXRNOI7AvhTRfs1wj IVow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761841033; x=1762445833; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=gxDcgES4HsclKbKarL45AKwmJQCdABWonlK5nWihqpQ=; b=LWScXmzAZ8CXec7uhIFkWzHZ+k34r6OCjDjlxeOPUymXC8CqYDCU89zCzXbZ7Y+IpQ Vqbcd/cfelaiVZgUUPE/XsK5+8IxvljSqvHqHTpEVYjdU1AarXDypUvMpydmQRJT1BXT eCfmJglwCvFazVXSuHvvaSThpFDCHhaRLNi+H4SREaDF0/76UBMyRDnm54QDbsfqx/M9 NgUtgMJTQD70tu/TMp2R5Gx6MDNbUNb5Weuib1VLGRxSIqfyr0ZCObdX9HXsQ12OzOwM WGMHmiKS4bbkbC61Mz0GoQ3eCyuR5W7S7hKGu0pFsNEFEK5fYmG+eY9bDCLLfSGwfYw9 G/gg== X-Forwarded-Encrypted: i=1; AJvYcCW1aCM4aphg1Q/1gx/F8oG9V8N9D5inzbcY9w8oX57qI4xVdlil8RcIgBdfn+rNYyNmM0sIcNK0rIFcian+@lists.postgresql.org X-Gm-Message-State: AOJu0YwV0HUGHIA6zfXQs2tdn+Ko15I9x+xxJ5mo3fdMGsp1rGionIN6 4YeHXlOs3WrTML40OvrTIo4wLR4rvXNlJByYw5+Ya7aiqOmGcSZ/2+9iJsNgzeWTE2Ac3VD6iMa Oa3hPySc7PDWYkLuax7jREnAWFg3UW/0= X-Gm-Gg: ASbGncsa2HbbFz3PSr9oygCIoM+UNZl5INtQ1bg4seGhrFAPry3qdCxYH0RKViyEEjV ypiArcZw/YS6tskyjOY6FuyV+Acwep9rc/wexqPDkm/RcT4MY7uzMCMz1/sFlRz16X6xudew1HQ 2UYiDf1aVPRB/gXNNot6wzhD6amaB9B37xeSSYcki9T3Qp/Fp8ZfJNH77ssIBaNi0i4VvqraZO3 Ds1ppLDAufNb4b8hn+uV6wt/fQXVOAsXj2UJWmbF1TqN/+Ui9WYA4YIm8pb X-Google-Smtp-Source: AGHT+IFPRMwmMIKSYhKt82vcYHw2buMSVBIj7BBR8c+GL7cnwg0oP0HmrJ3sR1uEnuAHSYcbp9I2Anr1IV8jFQ0bEds= X-Received: by 2002:ac8:594d:0:b0:4b5:e4dc:1ee5 with SMTP id d75a77b69052e-4ed30d416d0mr1896121cf.3.1761841033386; Thu, 30 Oct 2025 09:17:13 -0700 (PDT) MIME-Version: 1.0 References: <0794857c-aaaf-4cd3-bd99-84c6155bb2f6@iki.fi> In-Reply-To: <0794857c-aaaf-4cd3-bd99-84c6155bb2f6@iki.fi> From: Maxim Orlov Date: Thu, 30 Oct 2025 19:17:00 +0300 X-Gm-Features: AWmQ_bmZU1dZRg6cPPnDuzGshD00s5r7seySiR7F09lzGUHMWuzYi8TDFNfWqAU Message-ID: Subject: Re: POC: make mxidoff 64 bits To: Heikki Linnakangas Cc: wenhui qiu , Alexander Korotkov , Ashutosh Bapat , Postgres hackers Content-Type: multipart/mixed; boundary="000000000000f243d206426294de" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000f243d206426294de Content-Type: multipart/alternative; boundary="000000000000f243d106426294dc" --000000000000f243d106426294dc Content-Type: text/plain; charset="UTF-8" On Thu, 30 Oct 2025 at 12:10, Heikki Linnakangas wrote: > > Oh I see, the 'base' is not necessarily the base offset of the first > multixact on the page, it's the base offset of the first multixid that > is written to the page. And the (short) offsets can be negative. That's > a frighteningly clever encoding scheme. One upshot of that is that WAL > redo might get construct the page with a different 'base'. I guess that > works, but it scares me. Could we come up with a more deterministic scheme? > > Definitely! The most stable approach is the one we had before, which used actual 64-bit offsets in the SLRU. To be honest, I'm completely happy with it. After all, what's most important for me is to have 64-bit xids in Postgres, and this patch is a step towards that goal. PFA v20 returns to using actual 64-bit offsets for on-disk SLRU segments. Fortunately, now that I've separated reading and writing offsets into different functions, switching from one implementation to another is easy to do. Here's a quick overview of the current state of the patch: 1) Access to the offset is placed to separate calls: MXOffsetWrite/MXOffsetRead. 2) I abandoned byte juggling in pg_upgrade and moved to using logic that replicates the work with offsets im multixact.c 3) As a result, the update issue came down to the correct implementation of functions MXOffsetWrite/MXOffsetRead. 4) The only question that remains is the question of disk representation of 64-bit offsets in SLRU segments. My thoughts on point (4). Using 32-bit offsets + some kind of packing: Pros: + Reduce the total disc space used by the segments; ideally it is almost the same as before. Cons: - Reduces reliability (losing a part will most likely result in losing the entire page). - Complicates code, especially considering that segments may be written to the page in random order. Using 64-bit offsets in SLRU: Pros: + Easy to implement/transparent logic. Cons: - Increases the amount of disk space used. In terms of speed, I'm not sure which will be faster. On the one hand, 64-bit eliminates the necessity for calculations and branching. On the other hand, the amount of data used will increase. I am not opposed to any of these options, as our primary goal is getting 64-bit offsets. However, I like the approach using full 64-bit offsets in SLRU, because it is more clear and, should we say, robust. Yes, it will increase the number of segment, however this is not heap data in for a table. Under typical circumstances, there should not be too many such segments. -- Best regards, Maxim Orlov. --000000000000f243d106426294dc Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable

On Thu, 30 Oct 2025= at 12:10, Heikki Linnakangas <hlinna= ka@iki.fi> wrote:

Oh I see, the 'base' is not necessarily the base offset of the firs= t
multixact on the page, it's the base offset of the first multixid that =
is written to the page. And the (short) offsets can be negative. That's=
a frighteningly clever encoding scheme. One upshot of that is that WAL
redo might get construct the page with a different 'base'. I guess = that
works, but it scares me. Could we come up with a more deterministic scheme?=

Definitely! The most stable approach is the one we ha= d before, which
used actual 64-bit offsets in the SLRU. To be honest, I&= #39;m completely
happy with it. After all, what's most important for= me is to have 64-bit
xids in Postgres, and this patch is a step towards= that goal.

PFA v20 returns to using actual 64-bit offsets for on-d= isk SLRU
segments.

Fortunately, now that I've separated readi= ng and writing offsets into
different functions, switching from one impl= ementation to another is
easy to do.

Here's a quick overview = of the current state of the patch:
1) Access to the offset is placed to = separate calls:
=C2=A0 =C2=A0MXOffsetWrite/MXOffsetRead.
2) I abandon= ed byte juggling in pg_upgrade and moved to using logic that
=C2=A0 =C2= =A0replicates the work with offsets im multixact.c
3) As a result, the u= pdate issue came down to the correct implementation
=C2=A0 =C2=A0of func= tions MXOffsetWrite/MXOffsetRead.
4) The only question that remains is t= he question of disk representation
=C2=A0 =C2=A0of 64-bit offsets in SLR= U segments.

My thoughts on point (4).

Using 32-bit offsets + = some kind of packing:
Pros:
=C2=A0+ Reduce the total disc space used = by the segments; ideally it is
=C2=A0 =C2=A0almost the same as before.Cons:
=C2=A0- Reduces reliability (losing a part will most likely resu= lt in losing
=C2=A0 =C2=A0the entire page).
=C2=A0- Complicates code,= especially considering that segments may be written
=C2=A0 =C2=A0to the= page in random order.

Using 64-bit offsets in SLRU:
Pros:
=C2= =A0+ Easy to implement/transparent logic.
Cons:
=C2=A0- Increases the= amount of disk space used.

In terms of speed, I'm not sure whic= h will be faster. On the one hand,
64-bit eliminates the necessity for c= alculations and branching. On the
other=C2=A0hand, the amount of data us= ed will increase.

I am not opposed to any of these options, as our p= rimary goal is getting
64-bit offsets. However, I like the approach usin= g full 64-bit offsets
in SLRU, because it is more clear and, should we s= ay, robust. Yes, it
will increase the number of segment, however this is= not heap data in
for a table. Under typical circumstances, there should= not be too many
such segments.
=C2=A0
--
Best regards,
Maxim Orlov.
--000000000000f243d106426294dc-- --000000000000f243d206426294de Content-Type: text/plain; charset="US-ASCII"; name="v20-0005-TEST-Add-test-for-64-bit-mxoff-in-pg_upgrade.patch.txt" Content-Disposition: attachment; filename="v20-0005-TEST-Add-test-for-64-bit-mxoff-in-pg_upgrade.patch.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhdmm28i4 RnJvbSBkZDQ1YmZiOTdiZTEyNmMwM2ExYzRlNDFmNTc5NGM1NzI2ZGNkNDEzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbSBPcmxvdiA8b3Jsb3ZtZ0BnbWFpbC5jb20+CkRhdGU6 IFdlZCwgMjkgT2N0IDIwMjUgMTQ6MTk6NTYgKzAzMDAKU3ViamVjdDogW1BBVENIIHYyMCA1LzVd IFRFU1Q6IEFkZCB0ZXN0IGZvciA2NC1iaXQgbXhvZmYgaW4gcGdfdXBncmFkZQoKLS0tCiBzcmMv YmluL3BnX3VwZ3JhZGUvdC8wMDdfbXhvZmYucGwgfCA0NjEgKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgNDYxIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBzcmMvYmluL3BnX3VwZ3JhZGUvdC8wMDdfbXhvZmYucGwKCmRpZmYgLS1naXQgYS9z cmMvYmluL3BnX3VwZ3JhZGUvdC8wMDdfbXhvZmYucGwgYi9zcmMvYmluL3BnX3VwZ3JhZGUvdC8w MDdfbXhvZmYucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjI2ZmQ2 ZTljNWQwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2Jpbi9wZ191cGdyYWRlL3QvMDA3X214b2Zm LnBsCkBAIC0wLDAgKzEsNDYxIEBACisKKyMgQ29weXJpZ2h0IChjKSAyMDI1LCBQb3N0Z3JlU1FM IEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzIEZB VEFMID0+ICdhbGwnOworCit1c2UgTWF0aDo6QmlnSW50OwordXNlIFBvc3RncmVTUUw6OlRlc3Q6 OkNsdXN0ZXI7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2UgUG9zdGdyZVNRTDo6 VGVzdDo6QWRqdXN0RHVtcDsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpBZGp1c3RVcGdyYWRlOwor dXNlIFRlc3Q6Ok1vcmU7CisKKyMgVGhpcyB0ZXN0IGludm9sdmVzIGRpZmZlcmVudCBtdWx0aXRy YW5zYWN0aW9uIHN0YXRlcywgc2ltaWxhcmx5IHRvIHRoYXQgb2YKKyMgMDAyX3BnX3VwZ3JhZGUu cGwuCisKK3VubGVzcyAoZGVmaW5lZCgkRU5We29sZGluc3RhbGx9KSkKK3sKKwlwbGFuIHNraXBf YWxsID0+ICd0byBydW4gdGVzdCBzZXQgb2xkaW5zdGFsbCBlbnZpcm9ubWVudCB2YXJpYWJsZSB0 byB0aGUgcHJlIDY0LWJpdCBteG9mZiBjbHVzdGVyJzsKK30KKworIyBUZW1wIGRpciBmb3IgYSBk dW1wcy4KK215ICR0ZW1wZGlyID0gUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM6OnRlbXBkaXI7CisK KyMgQ2FuIGJlIGNoYW5nZWQgdG8gdGVzdCB0aGUgb3RoZXIgbW9kZXMuCitteSAkbW9kZSA9ICRF TlZ7UEdfVEVTVF9QR19VUEdSQURFX01PREV9IHx8ICctLWNvcHknOworCisjIEdldCBOZXh0TXVs dGlPZmZzZXQuCitzdWIgbmV4dF9teG9mZgoreworCW15ICRub2RlID0gc2hpZnQ7CisKKwlteSAk cGdfY29udHJvbGRhdGFfcGF0aCA9CisJCWRlZmluZWQoJG5vZGUtPmluc3RhbGxfcGF0aCkgPwor CQkJJG5vZGUtPmluc3RhbGxfcGF0aCAuICcvYmluL3BnX2NvbnRyb2xkYXRhJyA6CisJCQkncGdf Y29udHJvbGRhdGEnOworCW15ICgkc3Rkb3V0LCAkc3RkZXJyKSA9IHJ1bl9jb21tYW5kKFsgJHBn X2NvbnRyb2xkYXRhX3BhdGgsCisJCQkJCQkJCQkJCSRub2RlLT5kYXRhX2RpciBdKTsKKwlteSBA Y29udHJvbF9kYXRhID0gc3BsaXQoIlxuIiwgJHN0ZG91dCk7CisJbXkgJG5leHRfbXhvZmYgPSB1 bmRlZjsKKworCWZvcmVhY2ggKEBjb250cm9sX2RhdGEpCisJeworCQlpZiAoJF8gPX4gL15MYXRl c3QgY2hlY2twb2ludCdzIE5leHRNdWx0aU9mZnNldDpccyooLiopJC9tZykKKwkJeworCQkJJG5l eHRfbXhvZmYgPSAkMTsKKwkJCWxhc3Q7CisJCX0KKwl9CisJZGllICJOZXh0TXVsdGlPZmZzZXQg bm90IGZvdW5kIGluIGNvbnRyb2wgZmlsZVxuIgorCQl1bmxlc3MgZGVmaW5lZCgkbmV4dF9teG9m Zik7CisKKwlyZXR1cm4gJG5leHRfbXhvZmY7Cit9CisKKyMgQ29uc3VtZSBhcm91bmQgMTBrIG9m IG14b2Zmc2V0cy4KK3N1YiBteGFjdF9lYXRlcgoreworCW15ICRub2RlID0gc2hpZnQ7CisJbXkg JHRibCA9ICdGT08nOworCisJbXkgKCRteG9mZjEsICRteG9mZjIpOworCisJJG14b2ZmMSA9IG5l eHRfbXhvZmYoJG5vZGUpOworCSRub2RlLT5zdGFydDsKKwkkbm9kZS0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsCisJCSJDUkVBVEUgVEFCTEUgJHt0Ymx9IChJIElOVCBQUklNQVJZIEtFWSwgTl9VUERB VEVEIElOVCkgIiAuCisJCSIgICAgICAgV0lUSCAoQVVUT1ZBQ1VVTV9FTkFCTEVEPUZBTFNFKTsi IC4KKwkJIklOU0VSVCBJTlRPICR7dGJsfSBTRUxFQ1QgRywgMCBGUk9NIEdFTkVSQVRFX1NFUklF UygxLCA1MCkgRzsiKTsKKworCSMgY29uc3VtZSBhcm91bmQgMTBrIG14b2ZmCisJbXkgJG5jbGll bnRzID0gMTA7CisJbXkgJHVwZGF0ZV9ldmVyeSA9IDc1OworCW15IEBjb25uZWN0aW9ucyA9ICgp OworCisJZm9yICgwLi4kbmNsaWVudHMpCisJeworCQlteSAkY29ubiA9ICRub2RlLT5iYWNrZ3Jv dW5kX3BzcWwoJ3Bvc3RncmVzJyk7CisJCSRjb25uLT5xdWVyeV9zYWZlKCJCRUdJTiIpOworCisJ CXB1c2goQGNvbm5lY3Rpb25zLCAkY29ubik7CisJfQorCisJZm9yIChteSAkaSA9IDA7ICRpIDwg MTAwMDsgJGkrKykKKwl7CisJCW15ICRjb25uID0gJGNvbm5lY3Rpb25zWyRpICUgJG5jbGllbnRz XTsKKworCQkkY29ubi0+cXVlcnlfc2FmZSgiQ09NTUlUOyIpOworCQkkY29ubi0+cXVlcnlfc2Fm ZSgiQkVHSU4iKTsKKworCQlpZiAoJGkgJSAkdXBkYXRlX2V2ZXJ5ID09IDApCisJCXsKKwkJCSRj b25uLT5xdWVyeV9zYWZlKAorCQkJCSJVUERBVEUgJHt0Ymx9IFNFVCAiIC4KKwkJCQkiTl9VUERB VEVEID0gTl9VUERBVEVEICsgMSAiIC4KKwkJCQkiV0hFUkUgSSA9ICR7aX0gJSA1MCIpOworCQl9 CisJCWVsc2UKKwkJeworCQkJJGNvbm4tPnF1ZXJ5X3NhZmUoCisJCQkJIlNFTEVDVCAqIEZST00g JHt0Ymx9IEZPUiBLRVkgU0hBUkUiKTsKKwkJfQorCX0KKworCWZvciBteSAkY29ubiAoQGNvbm5l Y3Rpb25zKQorCXsKKwkJJGNvbm4tPnF1aXQoKTsKKwl9CisKKwkkbm9kZS0+c3RvcDsKKwkkbXhv ZmYyID0gbmV4dF9teG9mZigkbm9kZSk7CisKKwlyZXR1cm4gJG14b2ZmMSwgJG14b2ZmMjsKK30K KworIyBDb25zdW1lIGFyb3VuZCAyTSBvZiBteG9mZnNldHMuCitzdWIgbXhhY3RfaHVnZV9lYXRl cgoreworCW15ICRub2RlID0gc2hpZnQ7CisJbXkgJHRibCA9ICdGT08nOworCisJbXkgKCRteG9m ZjEsICRteG9mZjIpOworCisJJG14b2ZmMSA9IG5leHRfbXhvZmYoJG5vZGUpOworCSRub2RlLT5z dGFydDsKKwkkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJDUkVBVEUgVEFCTEUgJHt0 Ymx9IChJIElOVCBQUklNQVJZIEtFWSwgTl9VUERBVEVEIElOVCkgIiAuCisJCSIgICAgICAgV0lU SCAoQVVUT1ZBQ1VVTV9FTkFCTEVEPUZBTFNFKTsiIC4KKwkJIklOU0VSVCBJTlRPICR7dGJsfSBT RUxFQ1QgRywgMCBGUk9NIEdFTkVSQVRFX1NFUklFUygxLCA1MCkgRzsiKTsKKworCSMgY29uc3Vt ZSBhcm91bmQgMU0gbXhvZmYKKwlteSAkbmNsaWVudHMgPSAxMDsKKwlteSAkdXBkYXRlX2V2ZXJ5 ID0gOTU7CisJbXkgQGNvbm5lY3Rpb25zID0gKCk7CisJbXkgJHRpbWVvdXQgPSAxMCAqICRQb3N0 Z3JlU1FMOjpUZXN0OjpVdGlsczo6dGltZW91dF9kZWZhdWx0OworCisJZm9yICgwLi4kbmNsaWVu dHMpCisJeworCQlteSAkY29ubiA9ICRub2RlLT5iYWNrZ3JvdW5kX3BzcWwoJ3Bvc3RncmVzJywK KwkJCQkJCQkJCQkgIHRpbWVvdXQgPT4gJHRpbWVvdXQpOworCQkkY29ubi0+cXVlcnlfc2FmZSgi QkVHSU4iKTsKKworCQlwdXNoKEBjb25uZWN0aW9ucywgJGNvbm4pOworCX0KKworCSMgSXQncyBh IGxvbmcgcHJvY2VzcywgYmV0dGVyIHRvIHRlbGwgYWJvdXQgcHJvZ3Jlc3MuCisJbXkgJG5fc3Rl cHMgPSAyMDBfMDAwOworCW15ICRzdGVwID0gaW50KCRuX3N0ZXBzIC8gMTApOworCisJZGlhZyAi XG5zdGFydCB0byBjb25zdW1lIG14b2Zmc2V0cyAuLi5cbiI7CisJZm9yIChteSAkaSA9IDA7ICRp IDwgJG5fc3RlcHM7ICRpKyspCisJeworCQlteSAkY29ubiA9ICRjb25uZWN0aW9uc1skaSAlICRu Y2xpZW50c107CisKKwkJJGNvbm4tPnF1ZXJ5X3NhZmUoIkNPTU1JVDsiKTsKKwkJJGNvbm4tPnF1 ZXJ5X3NhZmUoIkJFR0lOIik7CisKKwkJaWYgKCRpICUgJHVwZGF0ZV9ldmVyeSA9PSAwKQorCQl7 CisJCQkjIFBlcmZvcm0gc29tZSBub24ta2V5IFVQREFURXMgdG9vLCB0byBleGVyY2lzZSBkaWZm ZXJlbnQgbXVsdGl4YWN0CisJCQkjIG1lbWJlciBzdGF0dXNlcy4KKwkJCSRjb25uLT5xdWVyeV9z YWZlKAorCQkJCSJVUERBVEUgJHt0Ymx9IFNFVCAiIC4KKwkJCQkiTl9VUERBVEVEID0gTl9VUERB VEVEICsgMSAiIC4KKwkJCQkiV0hFUkUgSSA9ICR7aX0gJSA1MCIpOworCQl9CisJCWVsc2UKKwkJ eworCQkJJGNvbm4tPnF1ZXJ5X3NhZmUoCisJCQkJIlNFTEVDVCAqIEZST00gJHt0Ymx9ICIgLgor CQkJCSJUQUJMRVNBTVBMRSBTWVNURU0gKDg1KSAiIC4KKwkJCQkiRk9SIEtFWSBTSEFSRSIpOwor CQl9CisKKwkJaWYgKCRpICUgJHN0ZXAgPT0gMCkKKwkJeworCQkJbXkgJGRvbmUgPSBpbnQoKCRp IC8gJG5fc3RlcHMpICogMTAwKTsKKwkJCWRpYWcgIiRkb25lJSBkb25lLi4uIjsKKwkJfQorCX0K KworCWZvciBteSAkY29ubiAoQGNvbm5lY3Rpb25zKQorCXsKKwkJJGNvbm4tPnF1aXQoKTsKKwl9 CisKKwkkbm9kZS0+c3RvcDsKKwkkbXhvZmYyID0gbmV4dF9teG9mZigkbm9kZSk7CisKKwlyZXR1 cm4gJG14b2ZmMSwgJG14b2ZmMjsKK30KKworIyBTZXQgb2xkZXN0IG11bHRpeGFjdC1vZmZzZXQK K3N1YiByZXNldF9teG9mZgoreworCW15ICRub2RlID0gc2hpZnQ7CisJbXkgJG9mZnNldCA9IHNo aWZ0OworCisJbXkgJHBnX3Jlc2V0d2FsX3BhdGggPSAkbm9kZS0+aW5zdGFsbF9wYXRoIC4gJy9i aW4vcGdfcmVzZXR3YWwnOworCisJIyBHZXQgYmxvY2sgc2l6ZQorCW15ICRvdXQgPSAocnVuX2Nv bW1hbmQoWyAkcGdfcmVzZXR3YWxfcGF0aCwgJy0tZHJ5LXJ1bicsCisJCQkJCQkJICRub2RlLT5k YXRhX2RpciBdKSlbMF07CisJCSRvdXQgPX4gL15EYXRhYmFzZSBibG9jayBzaXplOiAqKFxkKykk L20gb3IgZGllOworCW15ICRibGNrc3ogPSAkMTsKKworCSMgUmVzZXQgdG8gbmV3IG9mZnNldAor CW15IEBjbWQgPSAoJHBnX3Jlc2V0d2FsX3BhdGgsICctLXBnZGF0YScgPT4gJG5vZGUtPmRhdGFf ZGlyKTsKKwlwdXNoIEBjbWQsICctLW11bHRpeGFjdC1vZmZzZXQnID0+ICRvZmZzZXQ7CisJY29t bWFuZF9vayhcQGNtZCwgJ3NldCBvbGRlc3QgbXVsdGl4YWN0LW9mZnNldCcpOworCisJIyBGaWxs IGVtcHR5IHBnX211bHRpeGFjdC9tZW1iZXJzIHNlZ21lbnQKKwlteSAkbXVsdCA9IDMyICogaW50 KCRibGNrc3ogLyAyMCkgKiA0OworCW15ICRzZWduYW1lID0gc3ByaW50ZiAiJTA0WCIsICRvZmZz ZXQgLyAkbXVsdDsKKworCW15IEBkZCA9ICgnZGQnKTsKKwlwdXNoIEBkZCwgImlmPS9kZXYvemVy byI7CisJcHVzaCBAZGQsICJvZj0iIC4gJG5vZGUtPmRhdGFfZGlyIC4gIi9wZ19tdWx0aXhhY3Qv bWVtYmVycy8iIC4gJHNlZ25hbWU7CisJcHVzaCBAZGQsICJicz0kYmxja3N6IjsKKwlwdXNoIEBk ZCwgImNvdW50PTMyIjsKKwljb21tYW5kX29rKFxAZGQsICdmaWxsIGVtcHR5IG11bHRpeGFjdC1t ZW1iZXJzJyk7Cit9CisKK3N1YiBnZXRfZHVtcF9mb3JfY29tcGFyaXNvbgoreworCW15ICgkbm9k ZSwgJGRiLCAkZmlsZV9wcmVmaXgsICRhZGp1c3RfY2hpbGRfY29sdW1ucykgPSBAXzsKKworCW15 ICRkdW1wZmlsZSA9ICR0ZW1wZGlyIC4gJy8nIC4gJGZpbGVfcHJlZml4IC4gJy5zcWwnOworCW15 ICRkdW1wX2FkanVzdGVkID0gIiR7ZHVtcGZpbGV9X2FkanVzdGVkIjsKKworCW9wZW4obXkgJGRo LCAnPicsICRkdW1wX2FkanVzdGVkKQorCSAgfHwgZGllICJjb3VsZCBub3Qgb3BlbiAkZHVtcF9h ZGp1c3RlZCBmb3Igd3JpdGluZyAkISI7CisKKwkkbm9kZS0+cnVuX2xvZygKKwkJWworCQkJJ3Bn X2R1bXAnLCAnLS1uby1zeW5jJywKKwkJCSctLXJlc3RyaWN0LWtleScgPT4gJ3Rlc3QnLAorCQkJ Jy1kJyA9PiAkbm9kZS0+Y29ubnN0cigkZGIpLAorCQkJJy1mJyA9PiAkZHVtcGZpbGUKKwkJXSk7 CisKKwlwcmludCAkZGggYWRqdXN0X3JlZ3Jlc3NfZHVtcGZpbGUoc2x1cnBfZmlsZSgkZHVtcGZp bGUpLAorCQkkYWRqdXN0X2NoaWxkX2NvbHVtbnMpOworCWNsb3NlKCRkaCk7CisKKwlyZXR1cm4g JGR1bXBfYWRqdXN0ZWQ7Cit9CisKKyMgTWFpbiB0ZXN0IHdvcmtob3JzZSByb3V0aW5lLgorIyBN YWtlIHBnX3VwZ3JhZGUsIGR1bXAgZGF0YSBhbmQgY29tcGFyZSBpdC4KK3N1YiBydW5fdGVzdAor eworCW15ICR0YWcgPSBzaGlmdDsKKwlteSAkb2xkbm9kZSA9IHNoaWZ0OworCW15ICRuZXdub2Rl ID0gc2hpZnQ7CisKKwljb21tYW5kX29rKAorCQlbCisJCQkncGdfdXBncmFkZScsICctLW5vLXN5 bmMnLAorCQkJJy0tb2xkLWRhdGFkaXInID0+ICRvbGRub2RlLT5kYXRhX2RpciwKKwkJCSctLW5l dy1kYXRhZGlyJyA9PiAkbmV3bm9kZS0+ZGF0YV9kaXIsCisJCQknLS1vbGQtYmluZGlyJyA9PiAk b2xkbm9kZS0+Y29uZmlnX2RhdGEoJy0tYmluZGlyJyksCisJCQknLS1uZXctYmluZGlyJyA9PiAk bmV3bm9kZS0+Y29uZmlnX2RhdGEoJy0tYmluZGlyJyksCisJCQknLS1zb2NrZXRkaXInID0+ICRu ZXdub2RlLT5ob3N0LAorCQkJJy0tb2xkLXBvcnQnID0+ICRvbGRub2RlLT5wb3J0LAorCQkJJy0t bmV3LXBvcnQnID0+ICRuZXdub2RlLT5wb3J0LAorCQkJJG1vZGUsCisJCV0sCisJCSdydW4gb2Yg cGdfdXBncmFkZSBmb3IgbmV3IGluc3RhbmNlJyk7CisJb2soICEtZCAkbmV3bm9kZS0+ZGF0YV9k aXIgLiAiL3BnX3VwZ3JhZGVfb3V0cHV0LmQiLAorCQkicGdfdXBncmFkZV9vdXRwdXQuZC8gcmVt b3ZlZCBhZnRlciBwZ191cGdyYWRlIHN1Y2Nlc3MiKTsKKworCSRvbGRub2RlLT5zdGFydDsKKwlt eSAkc3JjX2R1bXAgPQorCQlnZXRfZHVtcF9mb3JfY29tcGFyaXNvbigkb2xkbm9kZSwgJ3Bvc3Rn cmVzJywKKwkJCQkJCQkJIm9sZG5vZGVfJHt0YWd9X2R1bXAiLCAwKTsKKwkkb2xkbm9kZS0+c3Rv cDsKKworCSRuZXdub2RlLT5zdGFydDsKKwlteSAkZHN0X2R1bXAgPQorCQlnZXRfZHVtcF9mb3Jf Y29tcGFyaXNvbigkbmV3bm9kZSwgJ3Bvc3RncmVzJywKKwkJCQkJCQkJIm5ld25vZGVfJHt0YWd9 X2R1bXAiLCAwKTsKKwkkbmV3bm9kZS0+c3RvcDsKKworCWNvbXBhcmVfZmlsZXMoJHNyY19kdW1w LCAkZHN0X2R1bXAsCisJCSdkdW1wIG91dHB1dHMgZnJvbSBvcmlnaW5hbCBhbmQgcmVzdG9yZWQg cmVncmVzc2lvbiBkYXRhYmFzZXMgbWF0Y2gnKTsKK30KKworc3ViIHRvX2hleAoreworCW15ICRh cmcgPSBzaGlmdDsKKworCSRhcmcgPSBNYXRoOjpCaWdJbnQtPm5ldygkYXJnKTsKKwkkYXJnID0g JGFyZy0+YXNfaGV4KCk7CisKKwlyZXR1cm4gJGFyZzsKK30KKworIyBjYXNlICMxOiBzdGFydCBv bGQgbm9kZSBmcm9tIGRlZmF1bHRzCit7CisJbXkgJHRhZyA9IDE7CisJbXkgJG9sZCA9CisJCVBv c3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygib2xkbm9kZSR7dGFnfSIsCisJCQkJCQkJCQkg ICBpbnN0YWxsX3BhdGggPT4gJEVOVntvbGRpbnN0YWxsfSk7CisJJG9sZC0+aW5pdChleHRyYSA9 PiBbJy1rJ10pOworCisJbXkgKCRzdGFydF9teG9mZiwgJGZpbmlzaF9teG9mZikgPSBteGFjdF9l YXRlcigkb2xkKTsKKworCW15ICRuZXcgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXco Im5ld25vZGUke3RhZ30iKTsKKwkkbmV3LT5pbml0OworCisJcnVuX3Rlc3QoJHRhZywgJG9sZCwg JG5ldyk7CisKKwkkc3RhcnRfbXhvZmYgPSB0b19oZXgoJHN0YXJ0X214b2ZmKTsKKwkkZmluaXNo X214b2ZmID0gdG9faGV4KCRmaW5pc2hfbXhvZmYpOworCisJbXkgJG5leHRfbXhvZmYgPSB0b19o ZXgobmV4dF9teG9mZigkbmV3KSk7CisKKwlub3RlICI+Pj4gY2FzZSAjJHt0YWd9XG4iIC4KKwkJ ICIgb2xkbm9kZSBteG9mZiBmcm9tICR7c3RhcnRfbXhvZmZ9IHRvICR7ZmluaXNoX214b2ZmfVxu IiAuCisJCSAiIG5ld25vZGUgbXhvZmYgJHtuZXh0X214b2ZmfVxuIjsKK30KKworIyBjYXNlICMy OiBzdGFydCBvbGQgbm9kZSBmcm9tIGJlZm9yZSAzMi1iaXQgd3JhcGFyb3VuZAoreworCW15ICR0 YWcgPSAyOworCW15ICRvbGQgPQorCQlQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoIm9s ZG5vZGUke3RhZ30iLAorCQkJCQkJCQkJICAgaW5zdGFsbF9wYXRoID0+ICRFTlZ7b2xkaW5zdGFs bH0pOworCisJJG9sZC0+aW5pdChleHRyYSA9PiBbJy1rJ10pOworCXJlc2V0X214b2ZmKCRvbGQs IDB4RkZGRjAwMDApOworCisJbXkgKCRzdGFydF9teG9mZiwgJGZpbmlzaF9teG9mZikgPSBteGFj dF9lYXRlcigkb2xkKTsKKworCW15ICRuZXcgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5u ZXcoIm5ld25vZGUke3RhZ30iKTsKKwkkbmV3LT5pbml0OworCisJcnVuX3Rlc3QoJHRhZywgJG9s ZCwgJG5ldyk7CisKKwkkc3RhcnRfbXhvZmYgPSB0b19oZXgoJHN0YXJ0X214b2ZmKTsKKwkkZmlu aXNoX214b2ZmID0gdG9faGV4KCRmaW5pc2hfbXhvZmYpOworCisJbXkgJG5leHRfbXhvZmYgPSB0 b19oZXgobmV4dF9teG9mZigkbmV3KSk7CisKKwlub3RlICI+Pj4gY2FzZSAjJHt0YWd9XG4iIC4K KwkJICIgb2xkbm9kZSBteG9mZiBmcm9tICR7c3RhcnRfbXhvZmZ9IHRvICR7ZmluaXNoX214b2Zm fVxuIiAuCisJCSAiIG5ld25vZGUgbXhvZmYgJHtuZXh0X214b2ZmfVxuIjsKK30KKworIyBjYXNl ICMzOiBzdGFydCBvbGQgbm9kZSBuZWFyIDMyLWJpdCB3cmFwYXJvdW5kIGFuZCByZWFjaCB3cmFw YXJvdW5kIHN0YXRlLgoreworCW15ICR0YWcgPSAzOworCW15ICRvbGQgPQorCQlQb3N0Z3JlU1FM OjpUZXN0OjpDbHVzdGVyLT5uZXcoIm9sZG5vZGUke3RhZ30iLAorCQkJCQkJCQkJICAgaW5zdGFs bF9wYXRoID0+ICRFTlZ7b2xkaW5zdGFsbH0pOworCisJJG9sZC0+aW5pdChleHRyYSA9PiBbJy1r J10pOworCisJcmVzZXRfbXhvZmYoJG9sZCwgMHhGRkZGRUM3Nyk7CisJbXkgKCRzdGFydF9teG9m ZiwgJGZpbmlzaF9teG9mZikgPSBteGFjdF9lYXRlcigkb2xkKTsKKworCW15ICRuZXcgPSBQb3N0 Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoIm5ld25vZGUke3RhZ30iKTsKKwkkbmV3LT5pbml0 OworCisJcnVuX3Rlc3QoJHRhZywgJG9sZCwgJG5ldyk7CisKKwkkc3RhcnRfbXhvZmYgPSB0b19o ZXgoJHN0YXJ0X214b2ZmKTsKKwkkZmluaXNoX214b2ZmID0gdG9faGV4KCRmaW5pc2hfbXhvZmYp OworCisJbXkgJG5leHRfbXhvZmYgPSB0b19oZXgobmV4dF9teG9mZigkbmV3KSk7CisKKwlub3Rl ICI+Pj4gY2FzZSAjJHt0YWd9XG4iIC4KKwkJICIgb2xkbm9kZSBteG9mZiBmcm9tICR7c3RhcnRf bXhvZmZ9IHRvICR7ZmluaXNoX214b2ZmfVxuIiAuCisJCSAiIG5ld25vZGUgbXhvZmYgJHtuZXh0 X214b2ZmfVxuIjsKK30KKworIyBjYXNlICM0OiBzdGFydCBvbGQgbm9kZSBmcm9tIGRlZmF1bHRz Cit7CisJbXkgJHRhZyA9IDQ7CisJbXkgJG9sZCA9CisJCVBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0 ZXItPm5ldygib2xkbm9kZSR7dGFnfSIsCisJCQkJCQkJCQkgICBpbnN0YWxsX3BhdGggPT4gJEVO VntvbGRpbnN0YWxsfSk7CisKKwkkb2xkLT5pbml0KGV4dHJhID0+IFsnLWsnXSk7CisKKwlkaWFn ICJ0ZXN0ICMke3RhZ30gZm9yIG11bHRpcGxlIG14b2ZmIHNlZ21lbnRzIjsKKwlteSAoJHN0YXJ0 X214b2ZmLCAkZmluaXNoX214b2ZmKSA9IG14YWN0X2h1Z2VfZWF0ZXIoJG9sZCk7CisKKwlteSAk bmV3ID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCJuZXdub2RlJHt0YWd9Iik7CisJ JG5ldy0+aW5pdDsKKworCXJ1bl90ZXN0KCR0YWcsICRvbGQsICRuZXcpOworCisJJHN0YXJ0X214 b2ZmID0gdG9faGV4KCRzdGFydF9teG9mZik7CisJJGZpbmlzaF9teG9mZiA9IHRvX2hleCgkZmlu aXNoX214b2ZmKTsKKworCW15ICRuZXh0X214b2ZmID0gdG9faGV4KG5leHRfbXhvZmYoJG5ldykp OworCisJbm90ZSAiPj4+IGNhc2UgIyR7dGFnfVxuIiAuCisJCSAiIG9sZG5vZGUgbXhvZmYgZnJv bSAke3N0YXJ0X214b2ZmfSB0byAke2ZpbmlzaF9teG9mZn1cbiIgLgorCQkgIiBuZXdub2RlIG14 b2ZmICR7bmV4dF9teG9mZn1cbiI7Cit9CisKKyMgY2FzZSAjNTogc3RhcnQgb2xkIG5vZGUgZnJv bSBiZWZvcmUgMzItYml0IHdyYXBhcm91bmQKK3sKKwlteSAkdGFnID0gNTsKKwlteSAkb2xkID0K KwkJUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCJvbGRub2RlJHt0YWd9IiwKKwkJCQkJ CQkJCSAgIGluc3RhbGxfcGF0aCA9PiAkRU5We29sZGluc3RhbGx9KTsKKworCSRvbGQtPmluaXQo ZXh0cmEgPT4gWyctayddKTsKKwlyZXNldF9teG9mZigkb2xkLCAweEZGRkYwMDAwKTsKKworCWRp YWcgInRlc3QgIyR7dGFnfSBmb3IgbXVsdGlwbGUgbXhvZmYgc2VnbWVudHMiOworCW15ICgkc3Rh cnRfbXhvZmYsICRmaW5pc2hfbXhvZmYpID0gbXhhY3RfaHVnZV9lYXRlcigkb2xkKTsKKworCW15 ICRuZXcgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoIm5ld25vZGUke3RhZ30iKTsK KwkkbmV3LT5pbml0OworCisJcnVuX3Rlc3QoJHRhZywgJG9sZCwgJG5ldyk7CisKKwkkc3RhcnRf bXhvZmYgPSB0b19oZXgoJHN0YXJ0X214b2ZmKTsKKwkkZmluaXNoX214b2ZmID0gdG9faGV4KCRm aW5pc2hfbXhvZmYpOworCisJbXkgJG5leHRfbXhvZmYgPSB0b19oZXgobmV4dF9teG9mZigkbmV3 KSk7CisKKwlub3RlICI+Pj4gY2FzZSAjJHt0YWd9XG4iIC4KKwkJICIgb2xkbm9kZSBteG9mZiBm cm9tICR7c3RhcnRfbXhvZmZ9IHRvICR7ZmluaXNoX214b2ZmfVxuIiAuCisJCSAiIG5ld25vZGUg bXhvZmYgJHtuZXh0X214b2ZmfVxuIjsKK30KKworIyBjYXNlICM2OiBzdGFydCBvbGQgbm9kZSBu ZWFyIDMyLWJpdCB3cmFwYXJvdW5kIGFuZCByZWFjaCB3cmFwYXJvdW5kIHN0YXRlLgoreworCW15 ICR0YWcgPSA2OworCW15ICRvbGQgPQorCQlQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXco Im9sZG5vZGUke3RhZ30iLAorCQkJCQkJCQkJICAgaW5zdGFsbF9wYXRoID0+ICRFTlZ7b2xkaW5z dGFsbH0pOworCisJJG9sZC0+aW5pdChleHRyYSA9PiBbJy1rJ10pOworCisJcmVzZXRfbXhvZmYo JG9sZCwgMHhGRkZGRkZGRiAtIDFfMDAwXzAwMCk7CisJbXkgKCRzdGFydF9teG9mZiwgJGZpbmlz aF9teG9mZikgPSBteGFjdF9odWdlX2VhdGVyKCRvbGQpOworCisJZGlhZyAidGVzdCAjJHt0YWd9 IGZvciBtdWx0aXBsZSBteG9mZiBzZWdtZW50cyI7CisJbXkgJG5ldyA9IFBvc3RncmVTUUw6OlRl c3Q6OkNsdXN0ZXItPm5ldygibmV3bm9kZSR7dGFnfSIpOworCSRuZXctPmluaXQ7CisKKwlydW5f dGVzdCgkdGFnLCAkb2xkLCAkbmV3KTsKKworCSRzdGFydF9teG9mZiA9IHRvX2hleCgkc3RhcnRf bXhvZmYpOworCSRmaW5pc2hfbXhvZmYgPSB0b19oZXgoJGZpbmlzaF9teG9mZik7CisKKwlteSAk bmV4dF9teG9mZiA9IHRvX2hleChuZXh0X214b2ZmKCRuZXcpKTsKKworCW5vdGUgIj4+PiBjYXNl ICMke3RhZ31cbiIgLgorCQkgIiBvbGRub2RlIG14b2ZmIGZyb20gJHtzdGFydF9teG9mZn0gdG8g JHtmaW5pc2hfbXhvZmZ9XG4iIC4KKwkJICIgbmV3bm9kZSBteG9mZiAke25leHRfbXhvZmZ9XG4i OworfQorCitkb25lX3Rlc3RpbmcoKTsKLS0gCjIuNDMuMAoK --000000000000f243d206426294de Content-Type: application/octet-stream; name="v20-0003-Add-test-for-64-bit-mxoff-in-pg_resetwal.patch" Content-Disposition: attachment; filename="v20-0003-Add-test-for-64-bit-mxoff-in-pg_resetwal.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhdmm28b2 RnJvbSAyYTZhZTQzZjViZTNhNDU3NDFjMjMzYjAwMWRmYjg3MjFjN2Y4MjE3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbSBPcmxvdiA8b3Jsb3ZtZ0BnbWFpbC5jb20+CkRhdGU6 IFR1ZSwgMjggT2N0IDIwMjUgMTk6MDg6MjYgKzAzMDAKU3ViamVjdDogW1BBVENIIHYyMCAzLzVd IEFkZCB0ZXN0IGZvciA2NC1iaXQgbXhvZmYgaW4gcGdfcmVzZXR3YWwKCi0tLQogc3JjL2Jpbi9w Z19yZXNldHdhbC9tZXNvbi5idWlsZCAgICB8ICAgMSArCiBzcmMvYmluL3BnX3Jlc2V0d2FsL3Qv MDAzX214b2ZmLnBsIHwgMTcwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAyIGZpbGVz IGNoYW5nZWQsIDE3MSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2Jpbi9w Z19yZXNldHdhbC90LzAwM19teG9mZi5wbAoKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfcmVzZXR3 YWwvbWVzb24uYnVpbGQgYi9zcmMvYmluL3BnX3Jlc2V0d2FsL21lc29uLmJ1aWxkCmluZGV4IDI5 MDgzMmIyMjk5Li4xZTJkZmIzOGE1YiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19yZXNldHdhbC9t ZXNvbi5idWlsZAorKysgYi9zcmMvYmluL3BnX3Jlc2V0d2FsL21lc29uLmJ1aWxkCkBAIC0yNSw2 ICsyNSw3IEBAIHRlc3RzICs9IHsKICAgICAndGVzdHMnOiBbCiAgICAgICAndC8wMDFfYmFzaWMu cGwnLAogICAgICAgJ3QvMDAyX2NvcnJ1cHRlZC5wbCcsCisgICAgICAndC8wMDNfbXhvZmYucGwn LAogICAgIF0sCiAgIH0sCiB9CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3Jlc2V0d2FsL3QvMDAz X214b2ZmLnBsIGIvc3JjL2Jpbi9wZ19yZXNldHdhbC90LzAwM19teG9mZi5wbApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uM2MxYjdmYTFkMzMKLS0tIC9kZXYvbnVsbAor KysgYi9zcmMvYmluL3BnX3Jlc2V0d2FsL3QvMDAzX214b2ZmLnBsCkBAIC0wLDAgKzEsMTcwIEBA CisKKyMgQ29weXJpZ2h0IChjKSAyMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBH cm91cAorCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzIEZBVEFMID0+ICdhbGwnOworCit1c2Ug TWF0aDo6QmlnSW50OwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7Cit1c2UgUG9zdGdy ZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2UgVGVzdDo6TW9yZTsKKworc3ViIG14YWN0X2VhdGVyCit7 CisJbXkgJG5vZGUgPSBzaGlmdDsKKwlteSAkdGJsID0gc2hpZnQ7CisKKwkkbm9kZS0+c3RhcnQ7 CisJJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiQ1JFQVRFIFRBQkxFICR7dGJsfSAo SSBJTlQgUFJJTUFSWSBLRVksIE5fVVBEQVRFRCBJTlQpICIgLgorCQkiICAgICAgIFdJVEggKEFV VE9WQUNVVU1fRU5BQkxFRD1GQUxTRSk7IiAuCisJCSJJTlNFUlQgSU5UTyAke3RibH0gU0VMRUNU IEcsIDAgRlJPTSBHRU5FUkFURV9TRVJJRVMoMSwgNTApIEc7Iik7CisKKwkjIGNvbnN1bWUgYXJv dW5kIDEwayBtdWx0aXhhY3Qtb2Zmc2V0ZnMKKwlteSAkbmNsaWVudHMgPSAxMDsKKwlteSAkdXBk YXRlX2V2ZXJ5ID0gNzU7CisJbXkgQGNvbm5lY3Rpb25zID0gKCk7CisKKwlmb3IgKDAuLiRuY2xp ZW50cykKKwl7CisJCW15ICRjb25uID0gJG5vZGUtPmJhY2tncm91bmRfcHNxbCgncG9zdGdyZXMn KTsKKwkJJGNvbm4tPnF1ZXJ5X3NhZmUoIkJFR0lOIik7CisKKwkJcHVzaChAY29ubmVjdGlvbnMs ICRjb25uKTsKKwl9CisKKwlmb3IgKG15ICRpID0gMDsgJGkgPCAxMDAwOyAkaSsrKQorCXsKKwkJ bXkgJGNvbm4gPSAkY29ubmVjdGlvbnNbJGkgJSAkbmNsaWVudHNdOworCisJCSRjb25uLT5xdWVy eV9zYWZlKCJDT01NSVQ7Iik7CisJCSRjb25uLT5xdWVyeV9zYWZlKCJCRUdJTiIpOworCisJCWlm ICgkaSAlICR1cGRhdGVfZXZlcnkgPT0gMCkKKwkJeworCQkJJGNvbm4tPnF1ZXJ5X3NhZmUoCisJ CQkJIlVQREFURSAke3RibH0gU0VUICIgLgorCQkJCSJOX1VQREFURUQgPSBOX1VQREFURUQgKyAx ICIgLgorCQkJCSJXSEVSRSBJID0gJHtpfSAlIDUwIik7CisJCX0KKwkJZWxzZQorCQl7CisJCQkk Y29ubi0+cXVlcnlfc2FmZSgKKwkJCQkiU0VMRUNUICogRlJPTSAke3RibH0gRk9SIEtFWSBTSEFS RSIpOworCQl9CisJfQorCisJZm9yIG15ICRjb25uIChAY29ubmVjdGlvbnMpCisJeworCQkkY29u bi0+cXVpdCgpOworCX0KKworCSRub2RlLT5zdG9wOworfQorCitzdWIgbmV4dF9teG9mZgorewor CW15ICRub2RlID0gc2hpZnQ7CisJbXkgKCRzdGRvdXQsICRzdGRlcnIpID0KKwkgIHJ1bl9jb21t YW5kKFsgJ3BnX2NvbnRyb2xkYXRhJywgJG5vZGUtPmRhdGFfZGlyIF0pOworCW15IEBjb250cm9s X2RhdGEgPSBzcGxpdCgiXG4iLCAkc3Rkb3V0KTsKKwlteSAkbmV4dF9teG9mZiA9IHVuZGVmOwor CisJZm9yZWFjaCAoQGNvbnRyb2xfZGF0YSkKKwl7CisJCWlmICgkXyA9fiAvXkxhdGVzdCBjaGVj a3BvaW50J3MgTmV4dE11bHRpT2Zmc2V0OlxzKiguKikkL21nKQorCQl7CisJCQkkbmV4dF9teG9m ZiA9ICQxOworCQkJbGFzdDsKKwkJfQorCX0KKwlkaWUgIk5leHRNdWx0aU9mZnNldCBub3QgZm91 bmQgaW4gY29udHJvbCBmaWxlXG4iCisJCXVubGVzcyBkZWZpbmVkKCRuZXh0X214b2ZmKTsKKwor CXJldHVybiAkbmV4dF9teG9mZjsKK30KKworc3ViIHJlc2V0X214b2ZmCit7CisJbXkgJG5vZGUg PSBzaGlmdDsKKwlteSAkb2Zmc2V0ID0gc2hpZnQ7CisJCSRvZmZzZXQgPSBNYXRoOjpCaWdJbnQt Pm5ldygkb2Zmc2V0KTsKKworCSMgR2V0IGJsb2NrIHNpemUKKwlteSAkb3V0ID0gKHJ1bl9jb21t YW5kKFsgJ3BnX3Jlc2V0d2FsJywgJy0tZHJ5LXJ1bicsICRub2RlLT5kYXRhX2RpciBdKSlbMF07 CisJCSRvdXQgPX4gL15EYXRhYmFzZSBibG9jayBzaXplOiAqKFxkKykkL20gb3IgZGllOworCW15 ICRibGNrc3ogPSAkMTsKKworCSMgUmVzZXQgdG8gbmV3IG9mZnNldAorCW15IEBjbWQgPSAoJ3Bn X3Jlc2V0d2FsJywgJy0tcGdkYXRhJyA9PiAkbm9kZS0+ZGF0YV9kaXIpOworCXB1c2ggQGNtZCwg Jy0tbXVsdGl4YWN0LW9mZnNldCcgPT4gJG9mZnNldC0+YXNfaGV4KCk7CisJY29tbWFuZF9vayhc QGNtZCwgJ3NldCBvbGRlc3QgbXVsdGl4YWN0LW9mZnNldCcpOworCisJIyBGaWxsIGVtcHR5IHBn X211bHRpeGFjdC9tZW1iZXJzIHNlZ21lbnQKKwlteSAkbXVsdCA9IDMyICogaW50KCRibGNrc3og LyAyMCkgKiA0OworCW15ICRzZWduYW1lID0gc3ByaW50ZiAiJTAxNVgiLCAkb2Zmc2V0IC8gJG11 bHQ7CisKKwlteSBAZGQgPSAoJ2RkJyk7CisJcHVzaCBAZGQsICJpZj0vZGV2L3plcm8iOworCXB1 c2ggQGRkLCAib2Y9IiAuICRub2RlLT5kYXRhX2RpciAuICIvcGdfbXVsdGl4YWN0L21lbWJlcnMv IiAuICRzZWduYW1lOworCXB1c2ggQGRkLCAiYnM9JGJsY2tzeiI7CisJcHVzaCBAZGQsICJjb3Vu dD0zMiI7CisJY29tbWFuZF9vayhcQGRkLCAnZmlsbCBlbXB0eSBtdWx0aXhhY3QtbWVtYmVycycp OworfQorCitteSAoJG9mZjEsICRvZmYyKTsKKworIyBzdGFydCBmcm9tIGRlZmF1bHRzCitteSAk bm9kZTEgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ25vZGUxJyk7Ciskbm9kZTEt PmluaXQ7Ciskb2ZmMSA9IG5leHRfbXhvZmYoJG5vZGUxKTsKK214YWN0X2VhdGVyKCRub2RlMSwg IkZPTyIpOworJG9mZjIgPSBuZXh0X214b2ZmKCRub2RlMSk7Citub3RlICI+IHN0YXJ0IGZyb20g JG9mZjEsIGZpbmlzaGVkIGF0ICRvZmYyXG4iOworCisjIHN0YXJ0IGZyb20gYmVmb3JlIDMyLWJp dCB3cmFwYXJvdW5kCitteSAkbm9kZTIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXco J25vZGUyJyk7Ciskbm9kZTItPmluaXQ7CityZXNldF9teG9mZigkbm9kZTIsIDB4RkZGRjAwMDAp OworJG9mZjEgPSBuZXh0X214b2ZmKCRub2RlMik7CitteGFjdF9lYXRlcigkbm9kZTIsICJGT08i KTsKKyRvZmYyID0gbmV4dF9teG9mZigkbm9kZTIpOworbm90ZSAiPiBzdGFydCBmcm9tICRvZmYx LCBmaW5pc2hlZCBhdCAkb2ZmMlxuIjsKKworIyBzdGFydCBuZWFyIDMyLWJpdCB3cmFwYXJvdW5k CitteSAkbm9kZTMgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ25vZGUzJyk7Cisk bm9kZTMtPmluaXQ7CityZXNldF9teG9mZigkbm9kZTMsIDB4RkZGRkVDNzcpOworJG9mZjEgPSBu ZXh0X214b2ZmKCRub2RlMyk7CitteGFjdF9lYXRlcigkbm9kZTMsICJGT08iKTsKKyRvZmYyID0g bmV4dF9teG9mZigkbm9kZTMpOworbm90ZSAiPiBzdGFydCBmcm9tICRvZmYxLCBmaW5pc2hlZCBh dCAkb2ZmMlxuIjsKKworIyBzdGFydCBvdmVyIDMyLWJpdCB3cmFwYXJvdW5kCitteSAkbm9kZTQg PSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ25vZGU0Jyk7Ciskbm9kZTQtPmluaXQ7 CityZXNldF9teG9mZigkbm9kZTQsICcweEZGRkZGRkZGMDAwMCcpOworJG9mZjEgPSBuZXh0X214 b2ZmKCRub2RlNCk7CitteGFjdF9lYXRlcigkbm9kZTQsICJGT08iKTsKKyRvZmYyID0gbmV4dF9t eG9mZigkbm9kZTMpOworbm90ZSAiPiBzdGFydCBmcm9tICRvZmYxLCBmaW5pc2hlZCBhdCAkb2Zm MlxuIjsKKworIyBjaGVjayBpbnZhcmlhbnQKKyRub2RlMS0+c3RhcnQ7Ciskbm9kZTItPnN0YXJ0 OworJG5vZGUzLT5zdGFydDsKKyRub2RlNC0+c3RhcnQ7CisKK215ICR2YXIxID0gJG5vZGUxLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgJ1RBQkxFIEZPTycpOworbXkgJHZhcjIgPSAkbm9kZTItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAnVEFCTEUgRk9PJyk7CitteSAkdmFyMyA9ICRub2RlMy0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICdUQUJMRSBGT08nKTsKK215ICR2YXI0ID0gJG5vZGU0LT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgJ1RBQkxFIEZPTycpOworb2soJHZhcjEgZXEgJHZhcjIgZXEgJHZh cjMgZXEgJHZhcjQsCisJJ2NoZWNrIHRhYmxlIGludmFyaWFudCBpbiBhbGwgbm9kZXMnKTsKKwor JG5vZGU0LT5zdG9wOworJG5vZGUzLT5zdG9wOworJG5vZGUyLT5zdG9wOworJG5vZGUxLT5zdG9w OworCitkb25lX3Rlc3RpbmcoKTsKLS0gCjIuNDMuMAoK --000000000000f243d206426294de Content-Type: application/octet-stream; name="v20-0001-Use-64-bit-multixact-offsets.patch" Content-Disposition: attachment; filename="v20-0001-Use-64-bit-multixact-offsets.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhdmm27t0 RnJvbSA2NTFkYmQwNzBlOTYwNTk5ODBjNTBkM2RjNDE0ZmZiN2I1OTBiYjRiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbSBPcmxvdiA8b3Jsb3ZtZ0BnbWFpbC5jb20+CkRhdGU6 IFdlZCwgNyBBdWcgMjAyNCAxNjozNToyMiArMDMwMApTdWJqZWN0OiBbUEFUQ0ggdjIwIDEvNV0g VXNlIDY0LWJpdCBtdWx0aXhhY3Qgb2Zmc2V0cwoKU3dpdGNoaW5nIHRvIDY0LWJpdCBtdWx0aXRy YW5zYWN0aW9uIG9mZnNldHMgcmVtb3ZlcyB3cmFwYXJvdW5kIGFuZCB0aGUKMl4zMiBsaW1pdCBv biB0aGVpciB0b3RhbCBudW1iZXIuCgpBdXRob3I6IE1heGltIE9ybG92IDxvcmxvdm1nQGdtYWls LmNvbT4KLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvbXhhY3RkZXNjLmMgICB8ICAg NCArLQogc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL3hsb2dkZXNjLmMgICAgfCAgIDIgKy0K IHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL211bHRpeGFjdC5jICAgIHwgMzEyICsrKystLS0t LS0tLS0tLS0tLS0tLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dyZWNvdmVyeS5j IHwgICAyICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy92YWN1dW0uYyAgICAgICAgICAgICB8ICAg MiArLQogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9hdXRvdmFjdXVtLmMgICAgICAgfCAgIDQgKy0K IHNyYy9iaW4vcGdfY29udHJvbGRhdGEvcGdfY29udHJvbGRhdGEuYyAgIHwgICAyICstCiBzcmMv YmluL3BnX3Jlc2V0d2FsL3BnX3Jlc2V0d2FsLmMgICAgICAgICB8ICAgNiArLQogc3JjL2Jpbi9w Z19yZXNldHdhbC90LzAwMV9iYXNpYy5wbCAgICAgICAgfCAgIDIgKy0KIHNyYy9pbmNsdWRlL2Fj Y2Vzcy9tdWx0aXhhY3QuaCAgICAgICAgICAgIHwgICAzICstCiBzcmMvaW5jbHVkZS9jLmggICAg ICAgICAgICAgICAgICAgICAgICAgICB8ICAgMiArLQogMTEgZmlsZXMgY2hhbmdlZCwgNjMgaW5z ZXJ0aW9ucygrKSwgMjc4IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9ybWdyZGVzYy9teGFjdGRlc2MuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9t eGFjdGRlc2MuYwppbmRleCAzY2EwNTgyZGIzNi4uMDUyZGQwYTRjZTUgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9teGFjdGRlc2MuYworKysgYi9zcmMvYmFja2VuZC9h Y2Nlc3Mvcm1ncmRlc2MvbXhhY3RkZXNjLmMKQEAgLTY1LDcgKzY1LDcgQEAgbXVsdGl4YWN0X2Rl c2MoU3RyaW5nSW5mbyBidWYsIFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQogCQl4bF9tdWx0aXhh Y3RfY3JlYXRlICp4bHJlYyA9ICh4bF9tdWx0aXhhY3RfY3JlYXRlICopIHJlYzsKIAkJaW50CQkJ aTsKIAotCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiV1IG9mZnNldCAldSBubWVtYmVycyAlZDog IiwgeGxyZWMtPm1pZCwKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIldSBvZmZzZXQgJSIgUFJJ dTY0ICIgbm1lbWJlcnMgJWQ6ICIsIHhscmVjLT5taWQsCiAJCQkJCQkgeGxyZWMtPm1vZmYsIHhs cmVjLT5ubWVtYmVycyk7CiAJCWZvciAoaSA9IDA7IGkgPCB4bHJlYy0+bm1lbWJlcnM7IGkrKykK IAkJCW91dF9tZW1iZXIoYnVmLCAmeGxyZWMtPm1lbWJlcnNbaV0pOwpAQCAtNzQsNyArNzQsNyBA QCBtdWx0aXhhY3RfZGVzYyhTdHJpbmdJbmZvIGJ1ZiwgWExvZ1JlYWRlclN0YXRlICpyZWNvcmQp CiAJewogCQl4bF9tdWx0aXhhY3RfdHJ1bmNhdGUgKnhscmVjID0gKHhsX211bHRpeGFjdF90cnVu Y2F0ZSAqKSByZWM7CiAKLQkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICJvZmZzZXRzIFsldSwgJXUp LCBtZW1iZXJzIFsldSwgJXUpIiwKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICJvZmZzZXRzIFsl dSwgJXUpLCBtZW1iZXJzIFslIiBQUkl1NjQgIiwgJSIgUFJJdTY0ICIpIiwKIAkJCQkJCSB4bHJl Yy0+c3RhcnRUcnVuY09mZiwgeGxyZWMtPmVuZFRydW5jT2ZmLAogCQkJCQkJIHhscmVjLT5zdGFy dFRydW5jTWVtYiwgeGxyZWMtPmVuZFRydW5jTWVtYik7CiAJfQpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL3JtZ3JkZXNjL3hsb2dkZXNjLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1n cmRlc2MveGxvZ2Rlc2MuYwppbmRleCBjZDZjMmEyZjY1MC4uNDQxMDM0ZjU5MjkgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy94bG9nZGVzYy5jCisrKyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9ybWdyZGVzYy94bG9nZGVzYy5jCkBAIC02Niw3ICs2Niw3IEBAIHhsb2dfZGVz YyhTdHJpbmdJbmZvIGJ1ZiwgWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCiAJCUNoZWNrUG9pbnQg KmNoZWNrcG9pbnQgPSAoQ2hlY2tQb2ludCAqKSByZWM7CiAKIAkJYXBwZW5kU3RyaW5nSW5mbyhi dWYsICJyZWRvICVYLyUwOFg7ICIKLQkJCQkJCSAidGxpICV1OyBwcmV2IHRsaSAldTsgZnB3ICVz OyB3YWxfbGV2ZWwgJXM7IHhpZCAldToldTsgb2lkICV1OyBtdWx0aSAldTsgb2Zmc2V0ICV1OyAi CisJCQkJCQkgInRsaSAldTsgcHJldiB0bGkgJXU7IGZwdyAlczsgd2FsX2xldmVsICVzOyB4aWQg JXU6JXU7IG9pZCAldTsgbXVsdGkgJXU7IG9mZnNldCAlIiBQUkl1NjQgIjsgIgogCQkJCQkJICJv bGRlc3QgeGlkICV1IGluIERCICV1OyBvbGRlc3QgbXVsdGkgJXUgaW4gREIgJXU7ICIKIAkJCQkJ CSAib2xkZXN0L25ld2VzdCBjb21taXQgdGltZXN0YW1wIHhpZDogJXUvJXU7ICIKIAkJCQkJCSAi b2xkZXN0IHJ1bm5pbmcgeGlkICV1OyAlcyIsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nl c3MvdHJhbnNhbS9tdWx0aXhhY3QuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL211bHRp eGFjdC5jCmluZGV4IDlkNWYxMzBhZjdlLi45M2ExZTRjZmQyYSAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL3RyYW5zYW0vbXVsdGl4YWN0LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L3RyYW5zYW0vbXVsdGl4YWN0LmMKQEAgLTkyLDE3ICs5Miw5IEBACiAvKgogICogRGVmaW5lcyBm b3IgTXVsdGlYYWN0T2Zmc2V0IHBhZ2Ugc2l6ZXMuICBBIHBhZ2UgaXMgdGhlIHNhbWUgQkxDS1Na IGFzIGlzCiAgKiB1c2VkIGV2ZXJ5d2hlcmUgZWxzZSBpbiBQb3N0Z3Jlcy4KLSAqCi0gKiBOb3Rl OiBiZWNhdXNlIE11bHRpWGFjdE9mZnNldHMgYXJlIDMyIGJpdHMgYW5kIHdyYXAgYXJvdW5kIGF0 IDB4RkZGRkZGRkYsCi0gKiBNdWx0aVhhY3QgcGFnZSBudW1iZXJpbmcgYWxzbyB3cmFwcyBhcm91 bmQgYXQKLSAqIDB4RkZGRkZGRkYvTVVMVElYQUNUX09GRlNFVFNfUEVSX1BBR0UsIGFuZCBzZWdt ZW50IG51bWJlcmluZyBhdAotICogMHhGRkZGRkZGRi9NVUxUSVhBQ1RfT0ZGU0VUU19QRVJfUEFH RS9TTFJVX1BBR0VTX1BFUl9TRUdNRU5ULiAgV2UgbmVlZAotICogdGFrZSBubyBleHBsaWNpdCBu b3RpY2Ugb2YgdGhhdCBmYWN0IGluIHRoaXMgbW9kdWxlLCBleGNlcHQgd2hlbiBjb21wYXJpbmcK LSAqIHNlZ21lbnQgYW5kIHBhZ2UgbnVtYmVycyBpbiBUcnVuY2F0ZU11bHRpWGFjdCAoc2VlCi0g KiBNdWx0aVhhY3RPZmZzZXRQYWdlUHJlY2VkZXMpLgogICovCiAKLS8qIFdlIG5lZWQgZm91ciBi eXRlcyBwZXIgb2Zmc2V0ICovCisvKiBXZSBuZWVkIDggYnl0ZXMgcGVyIG9mZnNldCAqLwogI2Rl ZmluZSBNVUxUSVhBQ1RfT0ZGU0VUU19QRVJfUEFHRSAoQkxDS1NaIC8gc2l6ZW9mKE11bHRpWGFj dE9mZnNldCkpCiAKIHN0YXRpYyBpbmxpbmUgaW50NjQKQEAgLTIwOCwxMCArMjAwLDE0IEBAIE1Y T2Zmc2V0VG9NZW1iZXJPZmZzZXQoTXVsdGlYYWN0T2Zmc2V0IG9mZnNldCkKIAkJbWVtYmVyX2lu X2dyb3VwICogc2l6ZW9mKFRyYW5zYWN0aW9uSWQpOwogfQogCi0vKiBNdWx0aXhhY3QgbWVtYmVy cyB3cmFwYXJvdW5kIHRocmVzaG9sZHMuICovCi0jZGVmaW5lIE1VTFRJWEFDVF9NRU1CRVJfU0FG RV9USFJFU0hPTEQJCShNYXhNdWx0aVhhY3RPZmZzZXQgLyAyKQotI2RlZmluZSBNVUxUSVhBQ1Rf TUVNQkVSX0RBTkdFUl9USFJFU0hPTEQJXAotCShNYXhNdWx0aVhhY3RPZmZzZXQgLSBNYXhNdWx0 aVhhY3RPZmZzZXQgLyA0KQorLyoKKyAqIE11bHRpeGFjdCBtZW1iZXJzIHdhcm5pbmcgdGhyZXNo b2xkLgorICoKKyAqIElmIGRpZmZlcmVuY2UgYmV0dHdlZW4gbmV4dE9mZnNldCBhbmQgb2xkZXN0 T2Zmc2V0IGV4Y2VlZCB0aGlzIHZhbHVlLCB3ZQorICogdHJpZ2dlciBhdXRvdmFjdXVtaW4gb3Jk ZXIgdG8gcmVsZWFzZSB0aGUgZGlzayBzcGFjZSwgcmVkdWNlIHRhYmxlIGJsb2F0IGlmCisgKiBw b3NzaWJsZS4KKyAqLworI2RlZmluZSBNVUxUSVhBQ1RfTUVNQkVSX0FVVE9WQUNfVEhSRVNIT0xE CQlVSU5UNjRDT05TVCgweEZGRkZGRkZGKQogCiBzdGF0aWMgaW5saW5lIE11bHRpWGFjdElkCiBQ cmV2aW91c011bHRpWGFjdElkKE11bHRpWGFjdElkIG11bHRpKQpAQCAtMjI4LDYgKzIyNCwyNCBA QCBzdGF0aWMgU2xydUN0bERhdGEgTXVsdGlYYWN0TWVtYmVyQ3RsRGF0YTsKICNkZWZpbmUgTXVs dGlYYWN0T2Zmc2V0Q3RsCSgmTXVsdGlYYWN0T2Zmc2V0Q3RsRGF0YSkKICNkZWZpbmUgTXVsdGlY YWN0TWVtYmVyQ3RsCSgmTXVsdGlYYWN0TWVtYmVyQ3RsRGF0YSkKIAorc3RhdGljIGlubGluZSBN dWx0aVhhY3RPZmZzZXQKK01YT2Zmc2V0UmVhZChpbnQgZW50cnlubywgaW50IHNsb3RubykKK3sK KwlNdWx0aVhhY3RPZmZzZXQgKm9mZnB0ciA9CisJCShNdWx0aVhhY3RPZmZzZXQgKikgTXVsdGlY YWN0T2Zmc2V0Q3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub107CisKKwlyZXR1cm4gb2Zm cHRyW2VudHJ5bm9dOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK01YT2Zmc2V0V3JpdGUoaW50 IGVudHJ5bm8sIGludCBzbG90bm8sIE11bHRpWGFjdE9mZnNldCBvZmZzZXQpCit7CisJTXVsdGlY YWN0T2Zmc2V0ICpvZmZwdHIgPQorCQkoTXVsdGlYYWN0T2Zmc2V0ICopIE11bHRpWGFjdE9mZnNl dEN0bC0+c2hhcmVkLT5wYWdlX2J1ZmZlcltzbG90bm9dOworCisJb2ZmcHRyW2VudHJ5bm9dID0g b2Zmc2V0OworfQorCiAvKgogICogTXVsdGlYYWN0IHN0YXRlIHNoYXJlZCBhY3Jvc3MgYWxsIGJh Y2tlbmRzLiAgQWxsIHRoaXMgc3RhdGUgaXMgcHJvdGVjdGVkCiAgKiBieSBNdWx0aVhhY3RHZW5M b2NrLiAgKFdlIGFsc28gdXNlIFNMUlUgYmFuaydzIGxvY2sgb2YgTXVsdGlYYWN0T2Zmc2V0IGFu ZApAQCAtMjY4LDkgKzI4Miw2IEBAIHR5cGVkZWYgc3RydWN0IE11bHRpWGFjdFN0YXRlRGF0YQog CU11bHRpWGFjdElkIG11bHRpU3RvcExpbWl0OwogCU11bHRpWGFjdElkIG11bHRpV3JhcExpbWl0 OwogCi0JLyogc3VwcG9ydCBmb3IgbWVtYmVycyBhbnRpLXdyYXBhcm91bmQgbWVhc3VyZXMgKi8K LQlNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0U3RvcExpbWl0OwkvKiBrbm93biBpZiBvbGRlc3RPZmZz ZXRLbm93biAqLwotCiAJLyoKIAkgKiBUaGlzIGlzIHVzZWQgdG8gc2xlZXAgdW50aWwgYSBtdWx0 aXhhY3Qgb2Zmc2V0IGlzIHdyaXR0ZW4gd2hlbiB3ZSB3YW50CiAJICogdG8gY3JlYXRlIHRoZSBu ZXh0IG9uZS4KQEAgLTQwMSw4ICs0MTIsNiBAQCBzdGF0aWMgYm9vbCBNdWx0aVhhY3RPZmZzZXRQ cmVjZWRlcyhNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0MSwKIAkJCQkJCQkJCU11bHRpWGFjdE9mZnNl dCBvZmZzZXQyKTsKIHN0YXRpYyB2b2lkIEV4dGVuZE11bHRpWGFjdE9mZnNldChNdWx0aVhhY3RJ ZCBtdWx0aSk7CiBzdGF0aWMgdm9pZCBFeHRlbmRNdWx0aVhhY3RNZW1iZXIoTXVsdGlYYWN0T2Zm c2V0IG9mZnNldCwgaW50IG5tZW1iZXJzKTsKLXN0YXRpYyBib29sIE11bHRpWGFjdE9mZnNldFdv dWxkV3JhcChNdWx0aVhhY3RPZmZzZXQgYm91bmRhcnksCi0JCQkJCQkJCQkgTXVsdGlYYWN0T2Zm c2V0IHN0YXJ0LCB1aW50MzIgZGlzdGFuY2UpOwogc3RhdGljIGJvb2wgU2V0T2Zmc2V0VmFjdXVt TGltaXQoYm9vbCBpc19zdGFydHVwKTsKIHN0YXRpYyBib29sIGZpbmRfbXVsdGl4YWN0X3N0YXJ0 KE11bHRpWGFjdElkIG11bHRpLCBNdWx0aVhhY3RPZmZzZXQgKnJlc3VsdCk7CiBzdGF0aWMgdm9p ZCBXcml0ZU1UcnVuY2F0ZVhsb2dSZWMoT2lkIG9sZGVzdE11bHRpREIsCkBAIC05MTEsNyArOTIw LDYgQEAgUmVjb3JkTmV3TXVsdGlYYWN0KE11bHRpWGFjdElkIG11bHRpLCBNdWx0aVhhY3RPZmZz ZXQgb2Zmc2V0LAogCWludDY0CQlwcmV2X3BhZ2VubzsKIAlpbnQJCQllbnRyeW5vOwogCWludAkJ CXNsb3RubzsKLQlNdWx0aVhhY3RPZmZzZXQgKm9mZnB0cjsKIAlpbnQJCQlpOwogCUxXTG9jawkg ICAqbG9jazsKIAlMV0xvY2sJICAgKnByZXZsb2NrID0gTlVMTDsKQEAgLTkzMCwxMCArOTM4LDgg QEAgUmVjb3JkTmV3TXVsdGlYYWN0KE11bHRpWGFjdElkIG11bHRpLCBNdWx0aVhhY3RPZmZzZXQg b2Zmc2V0LAogCSAqIHRha2UgdGhlIHRyb3VibGUgdG8gZ2VuZXJhbGl6ZSB0aGUgc2xydS5jIGVy cm9yIHJlcG9ydGluZyBjb2RlLgogCSAqLwogCXNsb3RubyA9IFNpbXBsZUxydVJlYWRQYWdlKE11 bHRpWGFjdE9mZnNldEN0bCwgcGFnZW5vLCB0cnVlLCBtdWx0aSk7Ci0Jb2ZmcHRyID0gKE11bHRp WGFjdE9mZnNldCAqKSBNdWx0aVhhY3RPZmZzZXRDdGwtPnNoYXJlZC0+cGFnZV9idWZmZXJbc2xv dG5vXTsKLQlvZmZwdHIgKz0gZW50cnlubzsKIAotCSpvZmZwdHIgPSBvZmZzZXQ7CisJTVhPZmZz ZXRXcml0ZShlbnRyeW5vLCBzbG90bm8sIG9mZnNldCk7CiAKIAlNdWx0aVhhY3RPZmZzZXRDdGwt PnNoYXJlZC0+cGFnZV9kaXJ0eVtzbG90bm9dID0gdHJ1ZTsKIApAQCAtMTE1NSw3OCArMTE2MSw2 IEBAIEdldE5ld011bHRpWGFjdElkKGludCBubWVtYmVycywgTXVsdGlYYWN0T2Zmc2V0ICpvZmZz ZXQpCiAJZWxzZQogCQkqb2Zmc2V0ID0gbmV4dE9mZnNldDsKIAotCS8qLS0tLS0tLS0tLQotCSAq IFByb3RlY3QgYWdhaW5zdCBvdmVycnVuIG9mIHRoZSBtZW1iZXJzIHNwYWNlIGFzIHdlbGwsIHdp dGggdGhlCi0JICogZm9sbG93aW5nIHJ1bGVzOgotCSAqCi0JICogSWYgd2UncmUgcGFzdCBvZmZz ZXRTdG9wTGltaXQsIHJlZnVzZSB0byBnZW5lcmF0ZSBtb3JlIG11bHRpcy4KLQkgKiBJZiB3ZSdy ZSBjbG9zZSB0byBvZmZzZXRTdG9wTGltaXQsIGVtaXQgYSB3YXJuaW5nLgotCSAqCi0JICogQXJi aXRyYXJpbHksIHdlIHN0YXJ0IGVtaXR0aW5nIHdhcm5pbmdzIHdoZW4gd2UncmUgMjAgc2VnbWVu dHMgb3IgbGVzcwotCSAqIGZyb20gb2Zmc2V0U3RvcExpbWl0LgotCSAqCi0JICogTm90ZSB3ZSBo YXZlbid0IHVwZGF0ZWQgdGhlIHNoYXJlZCBzdGF0ZSB5ZXQsIHNvIGlmIHdlIGZhaWwgYXQgdGhp cwotCSAqIHBvaW50LCB0aGUgbXVsdGl4YWN0IElEIHdlIGdyYWJiZWQgY2FuIHN0aWxsIGJlIHVz ZWQgYnkgdGhlIG5leHQgZ3V5LgotCSAqCi0JICogTm90ZSB0aGF0IHRoZXJlIGlzIG5vIHBvaW50 IGluIGZvcmNpbmcgYXV0b3ZhY3V1bSBydW5zIGhlcmU6IHRoZQotCSAqIG11bHRpeGFjdCBmcmVl emUgc2V0dGluZ3Mgd291bGQgaGF2ZSB0byBiZSByZWR1Y2VkIGZvciB0aGF0IHRvIGhhdmUgYW55 Ci0JICogZWZmZWN0LgotCSAqLS0tLS0tLS0tLQotCSAqLwotI2RlZmluZSBPRkZTRVRfV0FSTl9T RUdNRU5UUwkyMAotCWlmIChNdWx0aVhhY3RTdGF0ZS0+b2xkZXN0T2Zmc2V0S25vd24gJiYKLQkJ TXVsdGlYYWN0T2Zmc2V0V291bGRXcmFwKE11bHRpWGFjdFN0YXRlLT5vZmZzZXRTdG9wTGltaXQs IG5leHRPZmZzZXQsCi0JCQkJCQkJCSBubWVtYmVycykpCi0JewotCQkvKiBzZWUgY29tbWVudCBp biB0aGUgY29ycmVzcG9uZGluZyBvZmZzZXRzIHdyYXBhcm91bmQgY2FzZSAqLwotCQlTZW5kUG9z dG1hc3RlclNpZ25hbChQTVNJR05BTF9TVEFSVF9BVVRPVkFDX0xBVU5DSEVSKTsKLQotCQllcmVw b3J0KEVSUk9SLAotCQkJCShlcnJjb2RlKEVSUkNPREVfUFJPR1JBTV9MSU1JVF9FWENFRURFRCks Ci0JCQkJIGVycm1zZygibXVsdGl4YWN0IFwibWVtYmVyc1wiIGxpbWl0IGV4Y2VlZGVkIiksCi0J CQkJIGVycmRldGFpbF9wbHVyYWwoIlRoaXMgY29tbWFuZCB3b3VsZCBjcmVhdGUgYSBtdWx0aXhh Y3Qgd2l0aCAldSBtZW1iZXJzLCBidXQgdGhlIHJlbWFpbmluZyBzcGFjZSBpcyBvbmx5IGVub3Vn aCBmb3IgJXUgbWVtYmVyLiIsCi0JCQkJCQkJCSAgIlRoaXMgY29tbWFuZCB3b3VsZCBjcmVhdGUg YSBtdWx0aXhhY3Qgd2l0aCAldSBtZW1iZXJzLCBidXQgdGhlIHJlbWFpbmluZyBzcGFjZSBpcyBv bmx5IGVub3VnaCBmb3IgJXUgbWVtYmVycy4iLAotCQkJCQkJCQkgIE11bHRpWGFjdFN0YXRlLT5v ZmZzZXRTdG9wTGltaXQgLSBuZXh0T2Zmc2V0IC0gMSwKLQkJCQkJCQkJICBubWVtYmVycywKLQkJ CQkJCQkJICBNdWx0aVhhY3RTdGF0ZS0+b2Zmc2V0U3RvcExpbWl0IC0gbmV4dE9mZnNldCAtIDEp LAotCQkJCSBlcnJoaW50KCJFeGVjdXRlIGEgZGF0YWJhc2Utd2lkZSBWQUNVVU0gaW4gZGF0YWJh c2Ugd2l0aCBPSUQgJXUgd2l0aCByZWR1Y2VkIFwidmFjdXVtX211bHRpeGFjdF9mcmVlemVfbWlu X2FnZVwiIGFuZCBcInZhY3V1bV9tdWx0aXhhY3RfZnJlZXplX3RhYmxlX2FnZVwiIHNldHRpbmdz LiIsCi0JCQkJCQkgTXVsdGlYYWN0U3RhdGUtPm9sZGVzdE11bHRpWGFjdERCKSkpOwotCX0KLQot CS8qCi0JICogQ2hlY2sgd2hldGhlciB3ZSBzaG91bGQga2ljayBhdXRvdmFjdXVtIGludG8gYWN0 aW9uLCB0byBwcmV2ZW50IG1lbWJlcnMKLQkgKiB3cmFwYXJvdW5kLiBOQiB3ZSB1c2UgYSBtdWNo IGxhcmdlciB3aW5kb3cgdG8gdHJpZ2dlciBhdXRvdmFjdXVtIHRoYW4KLQkgKiBqdXN0IHRoZSB3 YXJuaW5nIGxpbWl0LiBUaGUgd2FybmluZyBpcyBqdXN0IGEgbWVhc3VyZSBvZiBsYXN0IHJlc29y dCAtCi0JICogdGhpcyBpcyBpbiBsaW5lIHdpdGggR2V0TmV3VHJhbnNhY3Rpb25JZCdzIGJlaGF2 aW91ci4KLQkgKi8KLQlpZiAoIU11bHRpWGFjdFN0YXRlLT5vbGRlc3RPZmZzZXRLbm93biB8fAot CQkoTXVsdGlYYWN0U3RhdGUtPm5leHRPZmZzZXQgLSBNdWx0aVhhY3RTdGF0ZS0+b2xkZXN0T2Zm c2V0Ci0JCSA+IE1VTFRJWEFDVF9NRU1CRVJfU0FGRV9USFJFU0hPTEQpKQotCXsKLQkJLyoKLQkJ ICogVG8gYXZvaWQgc3dhbXBpbmcgdGhlIHBvc3RtYXN0ZXIgd2l0aCBzaWduYWxzLCB3ZSBpc3N1 ZSB0aGUgYXV0b3ZhYwotCQkgKiByZXF1ZXN0IG9ubHkgd2hlbiBjcm9zc2luZyBhIHNlZ21lbnQg Ym91bmRhcnkuIFdpdGggZGVmYXVsdAotCQkgKiBjb21waWxhdGlvbiBzZXR0aW5ncyB0aGF0J3Mg cm91Z2hseSBhZnRlciA1MGsgbWVtYmVycy4gIFRoaXMgc3RpbGwKLQkJICogZ2l2ZXMgcGxlbnR5 IG9mIGNoYW5jZXMgYmVmb3JlIHdlIGdldCBpbnRvIHJlYWwgdHJvdWJsZS4KLQkJICovCi0JCWlm ICgoTVhPZmZzZXRUb01lbWJlclBhZ2UobmV4dE9mZnNldCkgLyBTTFJVX1BBR0VTX1BFUl9TRUdN RU5UKSAhPQotCQkJKE1YT2Zmc2V0VG9NZW1iZXJQYWdlKG5leHRPZmZzZXQgKyBubWVtYmVycykg LyBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UKSkKLQkJCVNlbmRQb3N0bWFzdGVyU2lnbmFsKFBNU0lH TkFMX1NUQVJUX0FVVE9WQUNfTEFVTkNIRVIpOwotCX0KLQotCWlmIChNdWx0aVhhY3RTdGF0ZS0+ b2xkZXN0T2Zmc2V0S25vd24gJiYKLQkJTXVsdGlYYWN0T2Zmc2V0V291bGRXcmFwKE11bHRpWGFj dFN0YXRlLT5vZmZzZXRTdG9wTGltaXQsCi0JCQkJCQkJCSBuZXh0T2Zmc2V0LAotCQkJCQkJCQkg bm1lbWJlcnMgKyBNVUxUSVhBQ1RfTUVNQkVSU19QRVJfUEFHRSAqIFNMUlVfUEFHRVNfUEVSX1NF R01FTlQgKiBPRkZTRVRfV0FSTl9TRUdNRU5UUykpCi0JCWVyZXBvcnQoV0FSTklORywKLQkJCQko ZXJyY29kZShFUlJDT0RFX1BST0dSQU1fTElNSVRfRVhDRUVERUQpLAotCQkJCSBlcnJtc2dfcGx1 cmFsKCJkYXRhYmFzZSB3aXRoIE9JRCAldSBtdXN0IGJlIHZhY3V1bWVkIGJlZm9yZSAlZCBtb3Jl IG11bHRpeGFjdCBtZW1iZXIgaXMgdXNlZCIsCi0JCQkJCQkJICAgImRhdGFiYXNlIHdpdGggT0lE ICV1IG11c3QgYmUgdmFjdXVtZWQgYmVmb3JlICVkIG1vcmUgbXVsdGl4YWN0IG1lbWJlcnMgYXJl IHVzZWQiLAotCQkJCQkJCSAgIE11bHRpWGFjdFN0YXRlLT5vZmZzZXRTdG9wTGltaXQgLSBuZXh0 T2Zmc2V0ICsgbm1lbWJlcnMsCi0JCQkJCQkJICAgTXVsdGlYYWN0U3RhdGUtPm9sZGVzdE11bHRp WGFjdERCLAotCQkJCQkJCSAgIE11bHRpWGFjdFN0YXRlLT5vZmZzZXRTdG9wTGltaXQgLSBuZXh0 T2Zmc2V0ICsgbm1lbWJlcnMpLAotCQkJCSBlcnJoaW50KCJFeGVjdXRlIGEgZGF0YWJhc2Utd2lk ZSBWQUNVVU0gaW4gdGhhdCBkYXRhYmFzZSB3aXRoIHJlZHVjZWQgXCJ2YWN1dW1fbXVsdGl4YWN0 X2ZyZWV6ZV9taW5fYWdlXCIgYW5kIFwidmFjdXVtX211bHRpeGFjdF9mcmVlemVfdGFibGVfYWdl XCIgc2V0dGluZ3MuIikpKTsKLQogCUV4dGVuZE11bHRpWGFjdE1lbWJlcihuZXh0T2Zmc2V0LCBu bWVtYmVycyk7CiAKIAkvKgpAQCAtMTI1NSw3ICsxMTg5LDggQEAgR2V0TmV3TXVsdGlYYWN0SWQo aW50IG5tZW1iZXJzLCBNdWx0aVhhY3RPZmZzZXQgKm9mZnNldCkKIAogCUxXTG9ja1JlbGVhc2Uo TXVsdGlYYWN0R2VuTG9jayk7CiAKLQlkZWJ1Z19lbG9nNChERUJVRzIsICJHZXROZXc6IHJldHVy bmluZyAldSBvZmZzZXQgJXUiLCByZXN1bHQsICpvZmZzZXQpOworCWRlYnVnX2Vsb2c0KERFQlVH MiwgIkdldE5ldzogcmV0dXJuaW5nICV1IG9mZnNldCAlIiBQUkl1NjQsIHJlc3VsdCwKKwkJCQkq b2Zmc2V0KTsKIAlyZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xMjk0LDcgKzEyMjksNiBAQCBHZXRN dWx0aVhhY3RJZE1lbWJlcnMoTXVsdGlYYWN0SWQgbXVsdGksIE11bHRpWGFjdE1lbWJlciAqKm1l bWJlcnMsCiAJaW50NjQJCXByZXZfcGFnZW5vOwogCWludAkJCWVudHJ5bm87CiAJaW50CQkJc2xv dG5vOwotCU11bHRpWGFjdE9mZnNldCAqb2ZmcHRyOwogCU11bHRpWGFjdE9mZnNldCBvZmZzZXQ7 CiAJaW50CQkJbGVuZ3RoOwogCWludAkJCXRydWVsZW5ndGg7CkBAIC0xNDE4LDkgKzEzNTIsOCBA QCByZXRyeToKIAlMV0xvY2tBY3F1aXJlKGxvY2ssIExXX0VYQ0xVU0lWRSk7CiAKIAlzbG90bm8g PSBTaW1wbGVMcnVSZWFkUGFnZShNdWx0aVhhY3RPZmZzZXRDdGwsIHBhZ2VubywgdHJ1ZSwgbXVs dGkpOwotCW9mZnB0ciA9IChNdWx0aVhhY3RPZmZzZXQgKikgTXVsdGlYYWN0T2Zmc2V0Q3RsLT5z aGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub107Ci0Jb2ZmcHRyICs9IGVudHJ5bm87Ci0Jb2Zmc2V0 ID0gKm9mZnB0cjsKKworCW9mZnNldCA9IE1YT2Zmc2V0UmVhZChlbnRyeW5vLCBzbG90bm8pOwog CiAJQXNzZXJ0KG9mZnNldCAhPSAwKTsKIApAQCAtMTQ2Nyw5ICsxNDAwLDcgQEAgcmV0cnk6CiAJ CQlzbG90bm8gPSBTaW1wbGVMcnVSZWFkUGFnZShNdWx0aVhhY3RPZmZzZXRDdGwsIHBhZ2Vubywg dHJ1ZSwgdG1wTVhhY3QpOwogCQl9CiAKLQkJb2ZmcHRyID0gKE11bHRpWGFjdE9mZnNldCAqKSBN dWx0aVhhY3RPZmZzZXRDdGwtPnNoYXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXTsKLQkJb2ZmcHRy ICs9IGVudHJ5bm87Ci0JCW5leHRNWE9mZnNldCA9ICpvZmZwdHI7CisJCW5leHRNWE9mZnNldCA9 IE1YT2Zmc2V0UmVhZChlbnRyeW5vLCBzbG90bm8pOwogCiAJCWlmIChuZXh0TVhPZmZzZXQgPT0g MCkKIAkJewpAQCAtMTk3Myw3ICsxOTA0LDcgQEAgTXVsdGlYYWN0U2htZW1Jbml0KHZvaWQpCiAJ CQkJICAicGdfbXVsdGl4YWN0L21lbWJlcnMiLCBMV1RSQU5DSEVfTVVMVElYQUNUTUVNQkVSX0JV RkZFUiwKIAkJCQkgIExXVFJBTkNIRV9NVUxUSVhBQ1RNRU1CRVJfU0xSVSwKIAkJCQkgIFNZTkNf SEFORExFUl9NVUxUSVhBQ1RfTUVNQkVSLAotCQkJCSAgZmFsc2UpOworCQkJCSAgdHJ1ZSk7CiAJ LyogZG9lc24ndCBjYWxsIFNpbXBsZUxydVRydW5jYXRlKCkgb3IgbWVldCBjcml0ZXJpYSBmb3Ig dW5pdCB0ZXN0cyAqLwogCiAJLyogSW5pdGlhbGl6ZSBvdXIgc2hhcmVkIHN0YXRlIHN0cnVjdCAq LwpAQCAtMjE1MCw3ICsyMDgxLDYgQEAgVHJpbU11bHRpWGFjdCh2b2lkKQogCQlzbG90bm8gPSBT aW1wbGVMcnVSZWFkUGFnZShNdWx0aVhhY3RPZmZzZXRDdGwsIHBhZ2VubywgdHJ1ZSwgbmV4dE1Y YWN0KTsKIAkJb2ZmcHRyID0gKE11bHRpWGFjdE9mZnNldCAqKSBNdWx0aVhhY3RPZmZzZXRDdGwt PnNoYXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXTsKIAkJb2ZmcHRyICs9IGVudHJ5bm87Ci0KIAkJ TWVtU2V0KG9mZnB0ciwgMCwgQkxDS1NaIC0gKGVudHJ5bm8gKiBzaXplb2YoTXVsdGlYYWN0T2Zm c2V0KSkpOwogCiAJCU11bHRpWGFjdE9mZnNldEN0bC0+c2hhcmVkLT5wYWdlX2RpcnR5W3Nsb3Ru b10gPSB0cnVlOwpAQCAtMjIyMyw3ICsyMTUzLDcgQEAgTXVsdGlYYWN0R2V0Q2hlY2twdE11bHRp KGJvb2wgaXNfc2h1dGRvd24sCiAJTFdMb2NrUmVsZWFzZShNdWx0aVhhY3RHZW5Mb2NrKTsKIAog CWRlYnVnX2Vsb2c2KERFQlVHMiwKLQkJCQkiTXVsdGlYYWN0OiBjaGVja3BvaW50IGlzIG5leHRN dWx0aSAldSwgbmV4dE9mZnNldCAldSwgb2xkZXN0TXVsdGkgJXUgaW4gREIgJXUiLAorCQkJCSJN dWx0aVhhY3Q6IGNoZWNrcG9pbnQgaXMgbmV4dE11bHRpICV1LCBuZXh0T2Zmc2V0ICUiIFBSSXU2 NCAiLCBvbGRlc3RNdWx0aSAldSBpbiBEQiAldSIsCiAJCQkJKm5leHRNdWx0aSwgKm5leHRNdWx0 aU9mZnNldCwgKm9sZGVzdE11bHRpLCAqb2xkZXN0TXVsdGlEQik7CiB9CiAKQEAgLTIyNTgsNyAr MjE4OCw3IEBAIHZvaWQKIE11bHRpWGFjdFNldE5leHRNWGFjdChNdWx0aVhhY3RJZCBuZXh0TXVs dGksCiAJCQkJCSAgTXVsdGlYYWN0T2Zmc2V0IG5leHRNdWx0aU9mZnNldCkKIHsKLQlkZWJ1Z19l bG9nNChERUJVRzIsICJNdWx0aVhhY3Q6IHNldHRpbmcgbmV4dCBtdWx0aSB0byAldSBvZmZzZXQg JXUiLAorCWRlYnVnX2Vsb2c0KERFQlVHMiwgIk11bHRpWGFjdDogc2V0dGluZyBuZXh0IG11bHRp IHRvICV1IG9mZnNldCAlIiBQUkl1NjQsCiAJCQkJbmV4dE11bHRpLCBuZXh0TXVsdGlPZmZzZXQp OwogCUxXTG9ja0FjcXVpcmUoTXVsdGlYYWN0R2VuTG9jaywgTFdfRVhDTFVTSVZFKTsKIAlNdWx0 aVhhY3RTdGF0ZS0+bmV4dE1YYWN0ID0gbmV4dE11bHRpOwpAQCAtMjQ0OSw3ICsyMzc5LDcgQEAg TXVsdGlYYWN0QWR2YW5jZU5leHRNWGFjdChNdWx0aVhhY3RJZCBtaW5NdWx0aSwKIAl9CiAJaWYg KE11bHRpWGFjdE9mZnNldFByZWNlZGVzKE11bHRpWGFjdFN0YXRlLT5uZXh0T2Zmc2V0LCBtaW5N dWx0aU9mZnNldCkpCiAJewotCQlkZWJ1Z19lbG9nMyhERUJVRzIsICJNdWx0aVhhY3Q6IHNldHRp bmcgbmV4dCBvZmZzZXQgdG8gJXUiLAorCQlkZWJ1Z19lbG9nMyhERUJVRzIsICJNdWx0aVhhY3Q6 IHNldHRpbmcgbmV4dCBvZmZzZXQgdG8gJSIgUFJJVTY0LAogCQkJCQltaW5NdWx0aU9mZnNldCk7 CiAJCU11bHRpWGFjdFN0YXRlLT5uZXh0T2Zmc2V0ID0gbWluTXVsdGlPZmZzZXQ7CiAJfQpAQCAt MjYzMywxNSArMjU2MywxMyBAQCBHZXRPbGRlc3RNdWx0aVhhY3RJZCh2b2lkKQogfQogCiAvKgot ICogRGV0ZXJtaW5lIGhvdyBhZ2dyZXNzaXZlbHkgd2UgbmVlZCB0byB2YWN1dW0gaW4gb3JkZXIg dG8gcHJldmVudCBtZW1iZXIKLSAqIHdyYXBhcm91bmQuCisgKiBEZXRlcm1pbmUgaWYgd2UgbmVl ZCB0byB2YWN1dW0gZm9yIG1lbWJlciBvciBub3QuCiAgKgogICogVG8gZG8gc28gZGV0ZXJtaW5l IHdoYXQncyB0aGUgb2xkZXN0IG1lbWJlciBvZmZzZXQgYW5kIGluc3RhbGwgdGhlIGxpbWl0CiAg KiBpbmZvIGluIE11bHRpWGFjdFN0YXRlLCB3aGVyZSBpdCBjYW4gYmUgdXNlZCB0byBwcmV2ZW50 IG92ZXJydW4gb2Ygb2xkIGRhdGEKICAqIGluIHRoZSBtZW1iZXJzIFNMUlUgYXJlYS4KICAqCi0g KiBUaGUgcmV0dXJuIHZhbHVlIGlzIHRydWUgaWYgZW1lcmdlbmN5IGF1dG92YWN1dW0gaXMgcmVx dWlyZWQgYW5kIGZhbHNlCi0gKiBvdGhlcndpc2UuCisgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIHRy dWUgaWYgYXV0b3ZhY3V1bSBpcyByZXF1aXJlZCBhbmQgZmFsc2Ugb3RoZXJ3aXNlLgogICovCiBz dGF0aWMgYm9vbAogU2V0T2Zmc2V0VmFjdXVtTGltaXQoYm9vbCBpc19zdGFydHVwKQpAQCAtMjY1 Myw4ICsyNTgxLDYgQEAgU2V0T2Zmc2V0VmFjdXVtTGltaXQoYm9vbCBpc19zdGFydHVwKQogCU11 bHRpWGFjdE9mZnNldCBuZXh0T2Zmc2V0OwogCWJvb2wJCW9sZGVzdE9mZnNldEtub3duID0gZmFs c2U7CiAJYm9vbAkJcHJldk9sZGVzdE9mZnNldEtub3duOwotCU11bHRpWGFjdE9mZnNldCBvZmZz ZXRTdG9wTGltaXQgPSAwOwotCU11bHRpWGFjdE9mZnNldCBwcmV2T2Zmc2V0U3RvcExpbWl0Owog CiAJLyoKIAkgKiBOQjogSGF2ZSB0byBwcmV2ZW50IGNvbmN1cnJlbnQgdHJ1bmNhdGlvbiwgd2Ug bWlnaHQgb3RoZXJ3aXNlIHRyeSB0bwpAQCAtMjY2OSw3ICsyNTk1LDYgQEAgU2V0T2Zmc2V0VmFj dXVtTGltaXQoYm9vbCBpc19zdGFydHVwKQogCW5leHRPZmZzZXQgPSBNdWx0aVhhY3RTdGF0ZS0+ bmV4dE9mZnNldDsKIAlwcmV2T2xkZXN0T2Zmc2V0S25vd24gPSBNdWx0aVhhY3RTdGF0ZS0+b2xk ZXN0T2Zmc2V0S25vd247CiAJcHJldk9sZGVzdE9mZnNldCA9IE11bHRpWGFjdFN0YXRlLT5vbGRl c3RPZmZzZXQ7Ci0JcHJldk9mZnNldFN0b3BMaW1pdCA9IE11bHRpWGFjdFN0YXRlLT5vZmZzZXRT dG9wTGltaXQ7CiAJQXNzZXJ0KE11bHRpWGFjdFN0YXRlLT5maW5pc2hlZFN0YXJ0dXApOwogCUxX TG9ja1JlbGVhc2UoTXVsdGlYYWN0R2VuTG9jayk7CiAKQEAgLTI3MDAsMTEgKzI2MjUsNyBAQCBT ZXRPZmZzZXRWYWN1dW1MaW1pdChib29sIGlzX3N0YXJ0dXApCiAJCW9sZGVzdE9mZnNldEtub3du ID0KIAkJCWZpbmRfbXVsdGl4YWN0X3N0YXJ0KG9sZGVzdE11bHRpWGFjdElkLCAmb2xkZXN0T2Zm c2V0KTsKIAotCQlpZiAob2xkZXN0T2Zmc2V0S25vd24pCi0JCQllcmVwb3J0KERFQlVHMSwKLQkJ CQkJKGVycm1zZ19pbnRlcm5hbCgib2xkZXN0IE11bHRpWGFjdElkIG1lbWJlciBpcyBhdCBvZmZz ZXQgJXUiLAotCQkJCQkJCQkJIG9sZGVzdE9mZnNldCkpKTsKLQkJZWxzZQorCQlpZiAoIW9sZGVz dE9mZnNldEtub3duKQogCQkJZXJlcG9ydChMT0csCiAJCQkJCShlcnJtc2coIk11bHRpWGFjdCBt ZW1iZXIgd3JhcGFyb3VuZCBwcm90ZWN0aW9ucyBhcmUgZGlzYWJsZWQgYmVjYXVzZSBvbGRlc3Qg Y2hlY2twb2ludGVkIE11bHRpWGFjdCAldSBkb2VzIG5vdCBleGlzdCBvbiBkaXNrIiwKIAkJCQkJ CQlvbGRlc3RNdWx0aVhhY3RJZCkpKTsKQEAgLTI3MTcsMjQgKzI2MzgsNyBAQCBTZXRPZmZzZXRW YWN1dW1MaW1pdChib29sIGlzX3N0YXJ0dXApCiAJICogb3ZlcnJ1biBvZiBvbGQgZGF0YSBpbiB0 aGUgbWVtYmVycyBTTFJVIGFyZWEuIFdlIGNhbiBvbmx5IGRvIHNvIGlmIHRoZQogCSAqIG9sZGVz dCBvZmZzZXQgaXMga25vd24gdGhvdWdoLgogCSAqLwotCWlmIChvbGRlc3RPZmZzZXRLbm93bikK LQl7Ci0JCS8qIG1vdmUgYmFjayB0byBzdGFydCBvZiB0aGUgY29ycmVzcG9uZGluZyBzZWdtZW50 ICovCi0JCW9mZnNldFN0b3BMaW1pdCA9IG9sZGVzdE9mZnNldCAtIChvbGRlc3RPZmZzZXQgJQot CQkJCQkJCQkJCSAgKE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9QQUdFICogU0xSVV9QQUdFU19QRVJf U0VHTUVOVCkpOwotCi0JCS8qIGFsd2F5cyBsZWF2ZSBvbmUgc2VnbWVudCBiZWZvcmUgdGhlIHdy YXBhcm91bmQgcG9pbnQgKi8KLQkJb2Zmc2V0U3RvcExpbWl0IC09IChNVUxUSVhBQ1RfTUVNQkVS U19QRVJfUEFHRSAqIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQpOwotCi0JCWlmICghcHJldk9sZGVz dE9mZnNldEtub3duICYmICFpc19zdGFydHVwKQotCQkJZXJlcG9ydChMT0csCi0JCQkJCShlcnJt c2coIk11bHRpWGFjdCBtZW1iZXIgd3JhcGFyb3VuZCBwcm90ZWN0aW9ucyBhcmUgbm93IGVuYWJs ZWQiKSkpOwotCi0JCWVyZXBvcnQoREVCVUcxLAotCQkJCShlcnJtc2dfaW50ZXJuYWwoIk11bHRp WGFjdCBtZW1iZXIgc3RvcCBsaW1pdCBpcyBub3cgJXUgYmFzZWQgb24gTXVsdGlYYWN0ICV1IiwK LQkJCQkJCQkJIG9mZnNldFN0b3BMaW1pdCwgb2xkZXN0TXVsdGlYYWN0SWQpKSk7Ci0JfQotCWVs c2UgaWYgKHByZXZPbGRlc3RPZmZzZXRLbm93bikKKwlpZiAocHJldk9sZGVzdE9mZnNldEtub3du KQogCXsKIAkJLyoKIAkJICogSWYgd2UgZmFpbGVkIHRvIGdldCB0aGUgb2xkZXN0IG9mZnNldCB0 aGlzIHRpbWUsIGJ1dCB3ZSBoYXZlIGEKQEAgLTI3NDQsNjkgKzI2NDgsMTkgQEAgU2V0T2Zmc2V0 VmFjdXVtTGltaXQoYm9vbCBpc19zdGFydHVwKQogCQkgKi8KIAkJb2xkZXN0T2Zmc2V0ID0gcHJl dk9sZGVzdE9mZnNldDsKIAkJb2xkZXN0T2Zmc2V0S25vd24gPSB0cnVlOwotCQlvZmZzZXRTdG9w TGltaXQgPSBwcmV2T2Zmc2V0U3RvcExpbWl0OwogCX0KIAogCS8qIEluc3RhbGwgdGhlIGNvbXB1 dGVkIHZhbHVlcyAqLwogCUxXTG9ja0FjcXVpcmUoTXVsdGlYYWN0R2VuTG9jaywgTFdfRVhDTFVT SVZFKTsKIAlNdWx0aVhhY3RTdGF0ZS0+b2xkZXN0T2Zmc2V0ID0gb2xkZXN0T2Zmc2V0OwogCU11 bHRpWGFjdFN0YXRlLT5vbGRlc3RPZmZzZXRLbm93biA9IG9sZGVzdE9mZnNldEtub3duOwotCU11 bHRpWGFjdFN0YXRlLT5vZmZzZXRTdG9wTGltaXQgPSBvZmZzZXRTdG9wTGltaXQ7CiAJTFdMb2Nr UmVsZWFzZShNdWx0aVhhY3RHZW5Mb2NrKTsKIAogCS8qCi0JICogRG8gd2UgbmVlZCBhbiBlbWVy Z2VuY3kgYXV0b3ZhY3V1bT8JSWYgd2UncmUgbm90IHN1cmUsIGFzc3VtZSB5ZXMuCisJICogRG8g d2UgbmVlZCBhdXRvdmFjdXVtPwlJZiB3ZSdyZSBub3Qgc3VyZSwgYXNzdW1lIHllcy4KIAkgKi8K IAlyZXR1cm4gIW9sZGVzdE9mZnNldEtub3duIHx8Ci0JCShuZXh0T2Zmc2V0IC0gb2xkZXN0T2Zm c2V0ID4gTVVMVElYQUNUX01FTUJFUl9TQUZFX1RIUkVTSE9MRCk7Ci19Ci0KLS8qCi0gKiBSZXR1 cm4gd2hldGhlciBhZGRpbmcgImRpc3RhbmNlIiB0byAic3RhcnQiIHdvdWxkIG1vdmUgcGFzdCAi Ym91bmRhcnkiLgotICoKLSAqIFdlIHVzZSB0aGlzIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBh ZGRpdGlvbiBpcyAid3JhcHBpbmcgYXJvdW5kIiB0aGUKLSAqIGJvdW5kYXJ5IHBvaW50LCBoZW5j ZSB0aGUgbmFtZS4gIFRoZSByZWFzb24gd2UgZG9uJ3Qgd2FudCB0byB1c2UgdGhlIHJlZ3VsYXIK LSAqIDJeMzEtbW9kdWxvIGFyaXRobWV0aWMgaGVyZSBpcyB0aGF0IHdlIHdhbnQgdG8gYmUgYWJs ZSB0byB1c2UgdGhlIHdob2xlIG9mCi0gKiB0aGUgMl4zMi0xIHNwYWNlIGhlcmUsIGFsbG93aW5n IGZvciBtb3JlIG11bHRpeGFjdHMgdGhhbiB3b3VsZCBmaXQKLSAqIG90aGVyd2lzZS4KLSAqLwot c3RhdGljIGJvb2wKLU11bHRpWGFjdE9mZnNldFdvdWxkV3JhcChNdWx0aVhhY3RPZmZzZXQgYm91 bmRhcnksIE11bHRpWGFjdE9mZnNldCBzdGFydCwKLQkJCQkJCSB1aW50MzIgZGlzdGFuY2UpCi17 Ci0JTXVsdGlYYWN0T2Zmc2V0IGZpbmlzaDsKLQotCS8qCi0JICogTm90ZSB0aGF0IG9mZnNldCBu dW1iZXIgMCBpcyBub3QgdXNlZCAoc2VlIEdldE11bHRpWGFjdElkTWVtYmVycyksIHNvCi0JICog aWYgdGhlIGFkZGl0aW9uIHdyYXBzIGFyb3VuZCB0aGUgVUlOVF9NQVggYm91bmRhcnksIHNraXAg dGhhdCB2YWx1ZS4KLQkgKi8KLQlmaW5pc2ggPSBzdGFydCArIGRpc3RhbmNlOwotCWlmIChmaW5p c2ggPCBzdGFydCkKLQkJZmluaXNoKys7Ci0KLQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JICogV2hlbiB0 aGUgYm91bmRhcnkgaXMgbnVtZXJpY2FsbHkgZ3JlYXRlciB0aGFuIHRoZSBzdGFydGluZyBwb2lu dCwgYW55Ci0JICogdmFsdWUgbnVtZXJpY2FsbHkgYmV0d2VlbiB0aGUgdHdvIGlzIG5vdCB3cmFw cGVkOgotCSAqCi0JICoJPC0tLS1TLS0tLUItLS0tPgotCSAqCVstLS0pCQkJID0gRiB3cmFwcGVk IHBhc3QgQiAoYW5kIFVJTlRfTUFYKQotCSAqCQkgWy0tLSkJCSA9IEYgbm90IHdyYXBwZWQKLQkg KgkJCSAgWy0tLS1dID0gRiB3cmFwcGVkIHBhc3QgQgotCSAqCi0JICogV2hlbiB0aGUgYm91bmRh cnkgaXMgbnVtZXJpY2FsbHkgbGVzcyB0aGFuIHRoZSBzdGFydGluZyBwb2ludCAoaS5lLiB0aGUK LQkgKiBVSU5UX01BWCB3cmFwYXJvdW5kIG9jY3VycyBzb21ld2hlcmUgaW4gYmV0d2VlbikgdGhl biBhbGwgdmFsdWVzIGluCi0JICogYmV0d2VlbiBhcmUgd3JhcHBlZDoKLQkgKgotCSAqCTwtLS0t Qi0tLS1TLS0tLT4KLQkgKglbLS0tKQkJCSA9IEYgbm90IHdyYXBwZWQgcGFzdCBCIChidXQgd3Jh cHBlZCBwYXN0IFVJTlRfTUFYKQotCSAqCQkgWy0tLSkJCSA9IEYgd3JhcHBlZCBwYXN0IEIgKGFu ZCBVSU5UX01BWCkKLQkgKgkJCSAgWy0tLS1dID0gRiBub3Qgd3JhcHBlZAotCSAqLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KLQkgKi8KLQlpZiAoc3RhcnQgPCBib3VuZGFyeSkKLQkJcmV0dXJuIGZpbmlzaCA+PSBi b3VuZGFyeSB8fCBmaW5pc2ggPCBzdGFydDsKLQllbHNlCi0JCXJldHVybiBmaW5pc2ggPj0gYm91 bmRhcnkgJiYgZmluaXNoIDwgc3RhcnQ7CisJCShuZXh0T2Zmc2V0IC0gb2xkZXN0T2Zmc2V0ID4g TVVMVElYQUNUX01FTUJFUl9BVVRPVkFDX1RIUkVTSE9MRCk7CiB9CiAKIC8qCkBAIC0yODI1LDcg KzI2NzksNiBAQCBmaW5kX211bHRpeGFjdF9zdGFydChNdWx0aVhhY3RJZCBtdWx0aSwgTXVsdGlY YWN0T2Zmc2V0ICpyZXN1bHQpCiAJaW50NjQJCXBhZ2VubzsKIAlpbnQJCQllbnRyeW5vOwogCWlu dAkJCXNsb3RubzsKLQlNdWx0aVhhY3RPZmZzZXQgKm9mZnB0cjsKIAogCUFzc2VydChNdWx0aVhh Y3RTdGF0ZS0+ZmluaXNoZWRTdGFydHVwKTsKIApAQCAtMjg0Myw5ICsyNjk2LDkgQEAgZmluZF9t dWx0aXhhY3Rfc3RhcnQoTXVsdGlYYWN0SWQgbXVsdGksIE11bHRpWGFjdE9mZnNldCAqcmVzdWx0 KQogCiAJLyogbG9jayBpcyBhY3F1aXJlZCBieSBTaW1wbGVMcnVSZWFkUGFnZV9SZWFkT25seSAq LwogCXNsb3RubyA9IFNpbXBsZUxydVJlYWRQYWdlX1JlYWRPbmx5KE11bHRpWGFjdE9mZnNldEN0 bCwgcGFnZW5vLCBtdWx0aSk7Ci0Jb2ZmcHRyID0gKE11bHRpWGFjdE9mZnNldCAqKSBNdWx0aVhh Y3RPZmZzZXRDdGwtPnNoYXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXTsKLQlvZmZwdHIgKz0gZW50 cnlubzsKLQlvZmZzZXQgPSAqb2ZmcHRyOworCisJb2Zmc2V0ID0gTVhPZmZzZXRSZWFkKGVudHJ5 bm8sIHNsb3Rubyk7CisKIAlMV0xvY2tSZWxlYXNlKFNpbXBsZUxydUdldEJhbmtMb2NrKE11bHRp WGFjdE9mZnNldEN0bCwgcGFnZW5vKSk7CiAKIAkqcmVzdWx0ID0gb2Zmc2V0OwpAQCAtMjg5Myw3 MyArMjc0Niw2IEBAIEdldE11bHRpWGFjdEluZm8odWludDMyICptdWx0aXhhY3RzLCBNdWx0aVhh Y3RPZmZzZXQgKm1lbWJlcnMsCiAJcmV0dXJuIHRydWU7CiB9CiAKLS8qCi0gKiBNdWx0aXhhY3Qg bWVtYmVycyBjYW4gYmUgcmVtb3ZlZCBvbmNlIHRoZSBtdWx0aXhhY3RzIHRoYXQgcmVmZXIgdG8g dGhlbQotICogYXJlIG9sZGVyIHRoYW4gZXZlcnkgZGF0bWlubXhpZC4gIGF1dG92YWN1dW1fbXVs dGl4YWN0X2ZyZWV6ZV9tYXhfYWdlIGFuZAotICogdmFjdXVtX211bHRpeGFjdF9mcmVlemVfdGFi bGVfYWdlIHdvcmsgdG9nZXRoZXIgdG8gbWFrZSBzdXJlIHdlIG5ldmVyIGhhdmUKLSAqIHRvbyBt YW55IG11bHRpeGFjdHM7IHdlIGhvcGUgdGhhdCwgYXQgbGVhc3QgdW5kZXIgbm9ybWFsIGNpcmN1 bXN0YW5jZXMsCi0gKiB0aGlzIHdpbGwgYWxzbyBiZSBzdWZmaWNpZW50IHRvIGtlZXAgdXMgZnJv bSB1c2luZyB0b28gbWFueSBvZmZzZXRzLgotICogSG93ZXZlciwgaWYgdGhlIGF2ZXJhZ2UgbXVs dGl4YWN0IGhhcyBtYW55IG1lbWJlcnMsIHdlIG1pZ2h0IGV4aGF1c3QgdGhlCi0gKiBtZW1iZXJz IHNwYWNlIHdoaWxlIHN0aWxsIHVzaW5nIGZldyBlbm91Z2ggbWVtYmVycyB0aGF0IHRoZXNlIGxp bWl0cyBmYWlsCi0gKiB0byB0cmlnZ2VyIHJlbG1pbm14aWQgYWR2YW5jZW1lbnQgYnkgVkFDVVVN LiAgQXQgdGhhdCBwb2ludCwgd2UnZCBoYXZlIG5vCi0gKiBjaG9pY2UgYnV0IHRvIHN0YXJ0IGZh aWxpbmcgbXVsdGl4YWN0LWNyZWF0aW5nIG9wZXJhdGlvbnMgd2l0aCBhbiBlcnJvci4KLSAqCi0g KiBUbyBwcmV2ZW50IHRoYXQsIGlmIG1vcmUgdGhhbiBhIHRocmVzaG9sZCBwb3J0aW9uIG9mIHRo ZSBtZW1iZXJzIHNwYWNlIGlzCi0gKiB1c2VkLCB3ZSBlZmZlY3RpdmVseSByZWR1Y2UgYXV0b3Zh Y3V1bV9tdWx0aXhhY3RfZnJlZXplX21heF9hZ2UgYW5kCi0gKiB0byBhIHZhbHVlIGp1c3QgbGVz cyB0aGFuIHRoZSBudW1iZXIgb2YgbXVsdGl4YWN0cyBpbiB1c2UuICBXZSBob3BlIHRoYXQKLSAq IHRoaXMgd2lsbCBxdWlja2x5IHRyaWdnZXIgYXV0b3ZhY3V1bWluZyBvbiB0aGUgdGFibGUgb3Ig dGFibGVzIHdpdGggdGhlCi0gKiBvbGRlc3QgcmVsbWlubXhpZCwgdGh1cyBhbGxvd2luZyBkYXRt aW5teGlkIHZhbHVlcyB0byBhZHZhbmNlIGFuZCByZW1vdmluZwotICogc29tZSBtZW1iZXJzLgot ICoKLSAqIEFzIHRoZSBmcmFjdGlvbiBvZiB0aGUgbWVtYmVyIHNwYWNlIGN1cnJlbnRseSBpbiB1 c2UgZ3Jvd3MsIHdlIGJlY29tZQotICogbW9yZSBhZ2dyZXNzaXZlIGluIGNsYW1waW5nIHRoaXMg dmFsdWUuICBUaGF0IG5vdCBvbmx5IGNhdXNlcyBhdXRvdmFjdXVtCi0gKiB0byByYW1wIHVwLCBi dXQgYWxzbyBtYWtlcyBhbnkgbWFudWFsIHZhY3V1bXMgdGhlIHVzZXIgaXNzdWVzIG1vcmUKLSAq IGFnZ3Jlc3NpdmUuICBUaGlzIGhhcHBlbnMgYmVjYXVzZSB2YWN1dW1fZ2V0X2N1dG9mZnMoKSB3 aWxsIGNsYW1wIHRoZQotICogZnJlZXplIHRhYmxlIGFuZCB0aGUgbWluaW11bSBmcmVlemUgYWdl IGN1dG9mZnMgYmFzZWQgb24gdGhlIGVmZmVjdGl2ZQotICogYXV0b3ZhY3V1bV9tdWx0aXhhY3Rf ZnJlZXplX21heF9hZ2UgdGhpcyBmdW5jdGlvbiByZXR1cm5zLiAgSW4gdGhlIHdvcnN0Ci0gKiBj YXNlLCB3ZSdsbCBjbGFpbSB0aGUgZnJlZXplX21heF9hZ2UgdG8gemVybywgYW5kIGV2ZXJ5IHZh Y3V1bSBvZiBhbnkKLSAqIHRhYmxlIHdpbGwgZnJlZXplIGV2ZXJ5IG11bHRpeGFjdC4KLSAqLwot aW50Ci1NdWx0aVhhY3RNZW1iZXJGcmVlemVUaHJlc2hvbGQodm9pZCkKLXsKLQlNdWx0aVhhY3RP ZmZzZXQgbWVtYmVyczsKLQl1aW50MzIJCW11bHRpeGFjdHM7Ci0JdWludDMyCQl2aWN0aW1fbXVs dGl4YWN0czsKLQlkb3VibGUJCWZyYWN0aW9uOwotCWludAkJCXJlc3VsdDsKLQlNdWx0aVhhY3RJ ZCBvbGRlc3RNdWx0aVhhY3RJZDsKLQlNdWx0aVhhY3RPZmZzZXQgb2xkZXN0T2Zmc2V0OwotCi0J LyogSWYgd2UgY2FuJ3QgZGV0ZXJtaW5lIG1lbWJlciBzcGFjZSB1dGlsaXphdGlvbiwgYXNzdW1l IHRoZSB3b3JzdC4gKi8KLQlpZiAoIUdldE11bHRpWGFjdEluZm8oJm11bHRpeGFjdHMsICZtZW1i ZXJzLCAmb2xkZXN0TXVsdGlYYWN0SWQsICZvbGRlc3RPZmZzZXQpKQotCQlyZXR1cm4gMDsKLQot CS8qIElmIG1lbWJlciBzcGFjZSB1dGlsaXphdGlvbiBpcyBsb3csIG5vIHNwZWNpYWwgYWN0aW9u IGlzIHJlcXVpcmVkLiAqLwotCWlmIChtZW1iZXJzIDw9IE1VTFRJWEFDVF9NRU1CRVJfU0FGRV9U SFJFU0hPTEQpCi0JCXJldHVybiBhdXRvdmFjdXVtX211bHRpeGFjdF9mcmVlemVfbWF4X2FnZTsK LQotCS8qCi0JICogQ29tcHV0ZSBhIHRhcmdldCBmb3IgcmVsbWlubXhpZCBhZHZhbmNlbWVudC4g IFRoZSBudW1iZXIgb2YgbXVsdGl4YWN0cwotCSAqIHdlIHRyeSB0byBlbGltaW5hdGUgZnJvbSB0 aGUgc3lzdGVtIGlzIGJhc2VkIG9uIGhvdyBmYXIgd2UgYXJlIHBhc3QKLQkgKiBNVUxUSVhBQ1Rf TUVNQkVSX1NBRkVfVEhSRVNIT0xELgotCSAqLwotCWZyYWN0aW9uID0gKGRvdWJsZSkgKG1lbWJl cnMgLSBNVUxUSVhBQ1RfTUVNQkVSX1NBRkVfVEhSRVNIT0xEKSAvCi0JCShNVUxUSVhBQ1RfTUVN QkVSX0RBTkdFUl9USFJFU0hPTEQgLSBNVUxUSVhBQ1RfTUVNQkVSX1NBRkVfVEhSRVNIT0xEKTsK LQl2aWN0aW1fbXVsdGl4YWN0cyA9IG11bHRpeGFjdHMgKiBmcmFjdGlvbjsKLQotCS8qIGZyYWN0 aW9uIGNvdWxkIGJlID4gMS4wLCBidXQgbG93ZXN0IHBvc3NpYmxlIGZyZWV6ZSBhZ2UgaXMgemVy byAqLwotCWlmICh2aWN0aW1fbXVsdGl4YWN0cyA+IG11bHRpeGFjdHMpCi0JCXJldHVybiAwOwot CXJlc3VsdCA9IG11bHRpeGFjdHMgLSB2aWN0aW1fbXVsdGl4YWN0czsKLQotCS8qCi0JICogQ2xh bXAgdG8gYXV0b3ZhY3V1bV9tdWx0aXhhY3RfZnJlZXplX21heF9hZ2UsIHNvIHRoYXQgd2UgbmV2 ZXIgbWFrZQotCSAqIGF1dG92YWN1dW0gbGVzcyBhZ2dyZXNzaXZlIHRoYW4gaXQgd291bGQgb3Ro ZXJ3aXNlIGJlLgotCSAqLwotCXJldHVybiBNaW4ocmVzdWx0LCBhdXRvdmFjdXVtX211bHRpeGFj dF9mcmVlemVfbWF4X2FnZSk7Ci19Ci0KIHR5cGVkZWYgc3RydWN0IG14dHJ1bmNpbmZvCiB7CiAJ aW50NjQJCWVhcmxpZXN0RXhpc3RpbmdQYWdlOwpAQCAtMzE1OSw3ICsyOTQ1LDcgQEAgVHJ1bmNh dGVNdWx0aVhhY3QoTXVsdGlYYWN0SWQgbmV3T2xkZXN0TXVsdGksIE9pZCBuZXdPbGRlc3RNdWx0 aURCKQogCiAJZWxvZyhERUJVRzEsICJwZXJmb3JtaW5nIG11bHRpeGFjdCB0cnVuY2F0aW9uOiAi CiAJCSAib2Zmc2V0cyBbJXUsICV1KSwgb2Zmc2V0cyBzZWdtZW50cyBbJSIgUFJJeDY0ICIsICUi IFBSSXg2NCAiKSwgIgotCQkgIm1lbWJlcnMgWyV1LCAldSksIG1lbWJlcnMgc2VnbWVudHMgWyUi IFBSSXg2NCAiLCAlIiBQUkl4NjQgIikiLAorCQkgIm1lbWJlcnMgWyUiIFBSSXU2NCAiLCAlIiBQ Ukl1NjQgIiksIG1lbWJlcnMgc2VnbWVudHMgWyUiIFBSSXg2NCAiLCAlIiBQUkl4NjQgIikiLAog CQkgb2xkZXN0TXVsdGksIG5ld09sZGVzdE11bHRpLAogCQkgTXVsdGlYYWN0SWRUb09mZnNldFNl Z21lbnQob2xkZXN0TXVsdGkpLAogCQkgTXVsdGlYYWN0SWRUb09mZnNldFNlZ21lbnQobmV3T2xk ZXN0TXVsdGkpLApAQCAtMzI5MCw3ICszMDc2LDcgQEAgTXVsdGlYYWN0SWRQcmVjZWRlc09yRXF1 YWxzKE11bHRpWGFjdElkIG11bHRpMSwgTXVsdGlYYWN0SWQgbXVsdGkyKQogc3RhdGljIGJvb2wK IE11bHRpWGFjdE9mZnNldFByZWNlZGVzKE11bHRpWGFjdE9mZnNldCBvZmZzZXQxLCBNdWx0aVhh Y3RPZmZzZXQgb2Zmc2V0MikKIHsKLQlpbnQzMgkJZGlmZiA9IChpbnQzMikgKG9mZnNldDEgLSBv ZmZzZXQyKTsKKwlpbnQ2NAkJZGlmZiA9IChpbnQ2NCkgKG9mZnNldDEgLSBvZmZzZXQyKTsKIAog CXJldHVybiAoZGlmZiA8IDApOwogfQpAQCAtMzM4Nyw3ICszMTczLDcgQEAgbXVsdGl4YWN0X3Jl ZG8oWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCiAKIAkJZWxvZyhERUJVRzEsICJyZXBsYXlpbmcg bXVsdGl4YWN0IHRydW5jYXRpb246ICIKIAkJCSAib2Zmc2V0cyBbJXUsICV1KSwgb2Zmc2V0cyBz ZWdtZW50cyBbJSIgUFJJeDY0ICIsICUiIFBSSXg2NCAiKSwgIgotCQkJICJtZW1iZXJzIFsldSwg JXUpLCBtZW1iZXJzIHNlZ21lbnRzIFslIiBQUkl4NjQgIiwgJSIgUFJJeDY0ICIpIiwKKwkJCSAi bWVtYmVycyBbJSIgUFJJdTY0ICIsICUiIFBSSXU2NCAiKSwgbWVtYmVycyBzZWdtZW50cyBbJSIg UFJJeDY0ICIsICUiIFBSSXg2NCAiKSIsCiAJCQkgeGxyZWMuc3RhcnRUcnVuY09mZiwgeGxyZWMu ZW5kVHJ1bmNPZmYsCiAJCQkgTXVsdGlYYWN0SWRUb09mZnNldFNlZ21lbnQoeGxyZWMuc3RhcnRU cnVuY09mZiksCiAJCQkgTXVsdGlYYWN0SWRUb09mZnNldFNlZ21lbnQoeGxyZWMuZW5kVHJ1bmNP ZmYpLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3JlY292ZXJ5 LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncmVjb3ZlcnkuYwppbmRleCAzZTNj NGRhMDFhMi4uM2IyYjBhNTIyY2IgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFu c2FtL3hsb2dyZWNvdmVyeS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dy ZWNvdmVyeS5jCkBAIC04ODUsNyArODg1LDcgQEAgSW5pdFdhbFJlY292ZXJ5KENvbnRyb2xGaWxl RGF0YSAqQ29udHJvbEZpbGUsIGJvb2wgKndhc1NodXRkb3duX3B0ciwKIAkJCQkJCQkgVTY0RnJv bUZ1bGxUcmFuc2FjdGlvbklkKGNoZWNrUG9pbnQubmV4dFhpZCksCiAJCQkJCQkJIGNoZWNrUG9p bnQubmV4dE9pZCkpKTsKIAllcmVwb3J0KERFQlVHMSwKLQkJCShlcnJtc2dfaW50ZXJuYWwoIm5l eHQgTXVsdGlYYWN0SWQ6ICV1OyBuZXh0IE11bHRpWGFjdE9mZnNldDogJXUiLAorCQkJKGVycm1z Z19pbnRlcm5hbCgibmV4dCBNdWx0aVhhY3RJZDogJXU7IG5leHQgTXVsdGlYYWN0T2Zmc2V0OiAl IiBQUkl1NjQsCiAJCQkJCQkJIGNoZWNrUG9pbnQubmV4dE11bHRpLCBjaGVja1BvaW50Lm5leHRN dWx0aU9mZnNldCkpKTsKIAllcmVwb3J0KERFQlVHMSwKIAkJCShlcnJtc2dfaW50ZXJuYWwoIm9s ZGVzdCB1bmZyb3plbiB0cmFuc2FjdGlvbiBJRDogJXUsIGluIGRhdGFiYXNlICV1IiwKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1bS5jIGIvc3JjL2JhY2tlbmQvY29tbWFu ZHMvdmFjdXVtLmMKaW5kZXggZWQwM2UzYmQ1MGQuLjI1OWVmNjBiZDMxIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9jb21tYW5kcy92YWN1dW0uYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy92 YWN1dW0uYwpAQCAtMTE0Nyw3ICsxMTQ3LDcgQEAgdmFjdXVtX2dldF9jdXRvZmZzKFJlbGF0aW9u IHJlbCwgY29uc3QgVmFjdXVtUGFyYW1zIHBhcmFtcywKIAkgKiBub3JtYWxseSBhdXRvdmFjdXVt X211bHRpeGFjdF9mcmVlemVfbWF4X2FnZSwgYnV0IG1heSBiZSBsZXNzIGlmIHdlIGFyZQogCSAq IHNob3J0IG9mIG11bHRpeGFjdCBtZW1iZXIgc3BhY2UuCiAJICovCi0JZWZmZWN0aXZlX211bHRp eGFjdF9mcmVlemVfbWF4X2FnZSA9IE11bHRpWGFjdE1lbWJlckZyZWV6ZVRocmVzaG9sZCgpOwor CWVmZmVjdGl2ZV9tdWx0aXhhY3RfZnJlZXplX21heF9hZ2UgPSBhdXRvdmFjdXVtX211bHRpeGFj dF9mcmVlemVfbWF4X2FnZTsKIAogCS8qCiAJICogQWxtb3N0IHJlYWR5IHRvIHNldCBmcmVlemUg b3V0cHV0IHBhcmFtZXRlcnM7IGNoZWNrIGlmIE9sZGVzdFhtaW4gb3IKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5jIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rl ci9hdXRvdmFjdXVtLmMKaW5kZXggNTA4NGFmN2RmYjYuLjI2Mzg1NDcwYzE5IDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2F1dG92YWN1dW0uYworKysgYi9zcmMvYmFja2VuZC9w b3N0bWFzdGVyL2F1dG92YWN1dW0uYwpAQCAtMTE1MSw3ICsxMTUxLDcgQEAgZG9fc3RhcnRfd29y a2VyKHZvaWQpCiAKIAkvKiBBbHNvIGRldGVybWluZSB0aGUgb2xkZXN0IGRhdG1pbm14aWQgd2Ug d2lsbCBjb25zaWRlci4gKi8KIAlyZWNlbnRNdWx0aSA9IFJlYWROZXh0TXVsdGlYYWN0SWQoKTsK LQltdWx0aUZvcmNlTGltaXQgPSByZWNlbnRNdWx0aSAtIE11bHRpWGFjdE1lbWJlckZyZWV6ZVRo cmVzaG9sZCgpOworCW11bHRpRm9yY2VMaW1pdCA9IHJlY2VudE11bHRpIC0gYXV0b3ZhY3V1bV9t dWx0aXhhY3RfZnJlZXplX21heF9hZ2U7CiAJaWYgKG11bHRpRm9yY2VMaW1pdCA8IEZpcnN0TXVs dGlYYWN0SWQpCiAJCW11bHRpRm9yY2VMaW1pdCAtPSBGaXJzdE11bHRpWGFjdElkOwogCkBAIC0x OTM5LDcgKzE5MzksNyBAQCBkb19hdXRvdmFjdXVtKHZvaWQpCiAJICogbm9ybWFsbHkgYXV0b3Zh Y3V1bV9tdWx0aXhhY3RfZnJlZXplX21heF9hZ2UsIGJ1dCBtYXkgYmUgbGVzcyBpZiB3ZSBhcmUK IAkgKiBzaG9ydCBvZiBtdWx0aXhhY3QgbWVtYmVyIHNwYWNlLgogCSAqLwotCWVmZmVjdGl2ZV9t dWx0aXhhY3RfZnJlZXplX21heF9hZ2UgPSBNdWx0aVhhY3RNZW1iZXJGcmVlemVUaHJlc2hvbGQo KTsKKwllZmZlY3RpdmVfbXVsdGl4YWN0X2ZyZWV6ZV9tYXhfYWdlID0gYXV0b3ZhY3V1bV9tdWx0 aXhhY3RfZnJlZXplX21heF9hZ2U7CiAKIAkvKgogCSAqIEZpbmQgdGhlIHBnX2RhdGFiYXNlIGVu dHJ5IGFuZCBzZWxlY3QgdGhlIGRlZmF1bHQgZnJlZXplIGFnZXMuIFdlIHVzZQpkaWZmIC0tZ2l0 IGEvc3JjL2Jpbi9wZ19jb250cm9sZGF0YS9wZ19jb250cm9sZGF0YS5jIGIvc3JjL2Jpbi9wZ19j b250cm9sZGF0YS9wZ19jb250cm9sZGF0YS5jCmluZGV4IDEwZGUwNThjZTkxLi41Mjk1MTA4YWRl MyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19jb250cm9sZGF0YS9wZ19jb250cm9sZGF0YS5jCisr KyBiL3NyYy9iaW4vcGdfY29udHJvbGRhdGEvcGdfY29udHJvbGRhdGEuYwpAQCAtMjY0LDcgKzI2 NCw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJICAgQ29udHJvbEZpbGUtPmNo ZWNrUG9pbnRDb3B5Lm5leHRPaWQpOwogCXByaW50ZihfKCJMYXRlc3QgY2hlY2twb2ludCdzIE5l eHRNdWx0aVhhY3RJZDogICV1XG4iKSwKIAkJICAgQ29udHJvbEZpbGUtPmNoZWNrUG9pbnRDb3B5 Lm5leHRNdWx0aSk7Ci0JcHJpbnRmKF8oIkxhdGVzdCBjaGVja3BvaW50J3MgTmV4dE11bHRpT2Zm c2V0OiAgJXVcbiIpLAorCXByaW50ZihfKCJMYXRlc3QgY2hlY2twb2ludCdzIE5leHRNdWx0aU9m ZnNldDogICUiIFBSSXU2NCAiXG4iKSwKIAkJICAgQ29udHJvbEZpbGUtPmNoZWNrUG9pbnRDb3B5 Lm5leHRNdWx0aU9mZnNldCk7CiAJcHJpbnRmKF8oIkxhdGVzdCBjaGVja3BvaW50J3Mgb2xkZXN0 WElEOiAgICAgICAgJXVcbiIpLAogCQkgICBDb250cm9sRmlsZS0+Y2hlY2tQb2ludENvcHkub2xk ZXN0WGlkKTsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfcmVzZXR3YWwvcGdfcmVzZXR3YWwuYyBi L3NyYy9iaW4vcGdfcmVzZXR3YWwvcGdfcmVzZXR3YWwuYwppbmRleCBhODlkNzJmYzVjZi4uNGU1 ZWVjZWQ4OWQgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfcmVzZXR3YWwvcGdfcmVzZXR3YWwuYwor KysgYi9zcmMvYmluL3BnX3Jlc2V0d2FsL3BnX3Jlc2V0d2FsLmMKQEAgLTI2Nyw3ICsyNjcsNyBA QCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAKIAkJCWNhc2UgJ08nOgogCQkJCWVycm5v ID0gMDsKLQkJCQlzZXRfbXhvZmYgPSBzdHJ0b3VsKG9wdGFyZywgJmVuZHB0ciwgMCk7CisJCQkJ c2V0X214b2ZmID0gc3RydG91NjQob3B0YXJnLCAmZW5kcHRyLCAwKTsKIAkJCQlpZiAoZW5kcHRy ID09IG9wdGFyZyB8fCAqZW5kcHRyICE9ICdcMCcgfHwgZXJybm8gIT0gMCkKIAkJCQl7CiAJCQkJ CXBnX2xvZ19lcnJvcigiaW52YWxpZCBhcmd1bWVudCBmb3Igb3B0aW9uICVzIiwgIi1PIik7CkBA IC03NDMsNyArNzQzLDcgQEAgUHJpbnRDb250cm9sVmFsdWVzKGJvb2wgZ3Vlc3NlZCkKIAkJICAg Q29udHJvbEZpbGUuY2hlY2tQb2ludENvcHkubmV4dE9pZCk7CiAJcHJpbnRmKF8oIkxhdGVzdCBj aGVja3BvaW50J3MgTmV4dE11bHRpWGFjdElkOiAgJXVcbiIpLAogCQkgICBDb250cm9sRmlsZS5j aGVja1BvaW50Q29weS5uZXh0TXVsdGkpOwotCXByaW50ZihfKCJMYXRlc3QgY2hlY2twb2ludCdz IE5leHRNdWx0aU9mZnNldDogICV1XG4iKSwKKwlwcmludGYoXygiTGF0ZXN0IGNoZWNrcG9pbnQn cyBOZXh0TXVsdGlPZmZzZXQ6ICAlIiBQUkl1NjQgIlxuIiksCiAJCSAgIENvbnRyb2xGaWxlLmNo ZWNrUG9pbnRDb3B5Lm5leHRNdWx0aU9mZnNldCk7CiAJcHJpbnRmKF8oIkxhdGVzdCBjaGVja3Bv aW50J3Mgb2xkZXN0WElEOiAgICAgICAgJXVcbiIpLAogCQkgICBDb250cm9sRmlsZS5jaGVja1Bv aW50Q29weS5vbGRlc3RYaWQpOwpAQCAtODE3LDcgKzgxNyw3IEBAIFByaW50TmV3Q29udHJvbFZh bHVlcyh2b2lkKQogCiAJaWYgKHNldF9teG9mZiAhPSAtMSkKIAl7Ci0JCXByaW50ZihfKCJOZXh0 TXVsdGlPZmZzZXQ6ICAgICAgICAgICAgICAgICAgICAgICV1XG4iKSwKKwkJcHJpbnRmKF8oIk5l eHRNdWx0aU9mZnNldDogICAgICAgICAgICAgICAgICAgICAgJSIgUFJJdTY0ICJcbiIpLAogCQkJ ICAgQ29udHJvbEZpbGUuY2hlY2tQb2ludENvcHkubmV4dE11bHRpT2Zmc2V0KTsKIAl9CiAKZGlm ZiAtLWdpdCBhL3NyYy9iaW4vcGdfcmVzZXR3YWwvdC8wMDFfYmFzaWMucGwgYi9zcmMvYmluL3Bn X3Jlc2V0d2FsL3QvMDAxX2Jhc2ljLnBsCmluZGV4IGQ2YmJiZDBjZWRhLi5jYzg5ZTA3NjRhZSAx MDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19yZXNldHdhbC90LzAwMV9iYXNpYy5wbAorKysgYi9zcmMv YmluL3BnX3Jlc2V0d2FsL3QvMDAxX2Jhc2ljLnBsCkBAIC0yMTMsNyArMjEzLDcgQEAgcHVzaCBA Y21kLAogICBzcHJpbnRmKCIlZCwlZCIsIGhleCgkZmlsZXNbMF0pID09IDAgPyAzIDogaGV4KCRm aWxlc1swXSksIGhleCgkZmlsZXNbLTFdKSk7CiAKIEBmaWxlcyA9IGdldF9zbHJ1X2ZpbGVzKCdw Z19tdWx0aXhhY3Qvb2Zmc2V0cycpOwotJG11bHQgPSAzMiAqICRibGNrc3ogLyA0OworJG11bHQg PSAzMiAqICRibGNrc3ogLyA4OwogIyAtLW11bHRpeGFjdC1pZHMgYXJndW1lbnQgaXMgIm5ldyxv bGQiCiBwdXNoIEBjbWQsCiAgICctLW11bHRpeGFjdC1pZHMnID0+IHNwcmludGYoIiVkLCVkIiwK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9tdWx0aXhhY3QuaCBiL3NyYy9pbmNsdWRl L2FjY2Vzcy9tdWx0aXhhY3QuaAppbmRleCA4MmU0YmI5MGRkNS4uMTZhMDc3MjMwODggMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9tdWx0aXhhY3QuaAorKysgYi9zcmMvaW5jbHVkZS9h Y2Nlc3MvbXVsdGl4YWN0LmgKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2RlZmluZSBNdWx0aVhhY3RJ ZElzVmFsaWQobXVsdGkpICgobXVsdGkpICE9IEludmFsaWRNdWx0aVhhY3RJZCkKIAotI2RlZmlu ZSBNYXhNdWx0aVhhY3RPZmZzZXQJKChNdWx0aVhhY3RPZmZzZXQpIDB4RkZGRkZGRkYpCisjZGVm aW5lIE1heE11bHRpWGFjdE9mZnNldAlVSU5UNjRDT05TVCgweEZGRkZGRkZGRkZGRkZGRkYpCiAK IC8qCiAgKiBQb3NzaWJsZSBtdWx0aXhhY3QgbG9jayBtb2RlcyAoInN0YXR1cyIpLiAgVGhlIGZp cnN0IGZvdXIgbW9kZXMgYXJlIGZvcgpAQCAtMTQ3LDcgKzE0Nyw2IEBAIGV4dGVybiB2b2lkIE11 bHRpWGFjdFNldE5leHRNWGFjdChNdWx0aVhhY3RJZCBuZXh0TXVsdGksCiBleHRlcm4gdm9pZCBN dWx0aVhhY3RBZHZhbmNlTmV4dE1YYWN0KE11bHRpWGFjdElkIG1pbk11bHRpLAogCQkJCQkJCQkJ ICBNdWx0aVhhY3RPZmZzZXQgbWluTXVsdGlPZmZzZXQpOwogZXh0ZXJuIHZvaWQgTXVsdGlYYWN0 QWR2YW5jZU9sZGVzdChNdWx0aVhhY3RJZCBvbGRlc3RNdWx0aSwgT2lkIG9sZGVzdE11bHRpREIp OwotZXh0ZXJuIGludAlNdWx0aVhhY3RNZW1iZXJGcmVlemVUaHJlc2hvbGQodm9pZCk7CiAKIGV4 dGVybiB2b2lkIG11bHRpeGFjdF90d29waGFzZV9yZWNvdmVyKEZ1bGxUcmFuc2FjdGlvbklkIGZ4 aWQsIHVpbnQxNiBpbmZvLAogCQkJCQkJCQkJICAgdm9pZCAqcmVjZGF0YSwgdWludDMyIGxlbik7 CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jLmggYi9zcmMvaW5jbHVkZS9jLmgKaW5kZXggNzU3 ZGZmZjQ3ODIuLmJjOTJhNmY0NTY1IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jLmgKKysrIGIv c3JjL2luY2x1ZGUvYy5oCkBAIC02NzAsNyArNjcwLDcgQEAgdHlwZWRlZiB1aW50MzIgU3ViVHJh bnNhY3Rpb25JZDsKIC8qIE11bHRpWGFjdElkIG11c3QgYmUgZXF1aXZhbGVudCB0byBUcmFuc2Fj dGlvbklkLCB0byBmaXQgaW4gdF94bWF4ICovCiB0eXBlZGVmIFRyYW5zYWN0aW9uSWQgTXVsdGlY YWN0SWQ7CiAKLXR5cGVkZWYgdWludDMyIE11bHRpWGFjdE9mZnNldDsKK3R5cGVkZWYgdWludDY0 IE11bHRpWGFjdE9mZnNldDsKIAogdHlwZWRlZiB1aW50MzIgQ29tbWFuZElkOwogCi0tIAoyLjQz LjAKCg== --000000000000f243d206426294de Content-Type: text/plain; charset="US-ASCII"; name="v20-0004-TEST-bump-catversion.patch.txt" Content-Disposition: attachment; filename="v20-0004-TEST-bump-catversion.patch.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhdmm28f3 RnJvbSA5YWU0OGYxYTY2ZmNiMmYxNjUxYTE2OGM0ODEyMTRmMWY5YjZlMjAxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbSBPcmxvdiA8b3Jsb3ZtZ0BnbWFpbC5jb20+CkRhdGU6 IEZyaSwgMjQgT2N0IDIwMjUgMTE6NDc6NTAgKzAzMDAKU3ViamVjdDogW1BBVENIIHYyMCA0LzVd IFRFU1Q6IGJ1bXAgY2F0dmVyc2lvbgoKVG8gYXZvaWQgY29uc3RhbnQgQ0YtYm90IGNvbXBsYWlu cywgbWFrZSBjYXR2ZXJzaW9uIGJ1bXAgaW4gYSBzZXBhcmF0ZQpjb21taXQuCgpOT1RFOiBrZWVw IGl0IGluIHN5bmMgd2l0aCBNVUxUSVhBQ1RPRkZTRVRfRk9STUFUQ0hBTkdFX0NBVF9WRVIKLS0t CiBzcmMvaW5jbHVkZS9jYXRhbG9nL2NhdHZlcnNpb24uaCB8IDIgKy0KIDEgZmlsZSBjaGFuZ2Vk LCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L2NhdGFsb2cvY2F0dmVyc2lvbi5oIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9jYXR2ZXJzaW9uLmgK aW5kZXggMThlOTUxNzlhYjYuLjZhMTNmYTNjZGIwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9j YXRhbG9nL2NhdHZlcnNpb24uaAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL2NhdHZlcnNpb24u aApAQCAtNTcsNiArNTcsNiBAQAogICovCiAKIC8qCQkJCQkJCXl5eXltbWRkTiAqLwotI2RlZmlu ZSBDQVRBTE9HX1ZFUlNJT05fTk8JMjAyNTEwMjgxCisjZGVmaW5lIENBVEFMT0dfVkVSU0lPTl9O Twk5OTk5OTk5OTkKIAogI2VuZGlmCi0tIAoyLjQzLjAKCg== --000000000000f243d206426294de Content-Type: application/octet-stream; name="v20-0002-Add-pg_upgarde-for-64-bit-multixact-offsets.patch" Content-Disposition: attachment; filename="v20-0002-Add-pg_upgarde-for-64-bit-multixact-offsets.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhdmm2871 RnJvbSA0MDc2NzAyYTM5ZDVhYjBjMGNkNWFmODYwZmI0N2QyYjA3NDJjN2VlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbSBPcmxvdiA8b3Jsb3ZtZ0BnbWFpbC5jb20+CkRhdGU6 IEZyaSwgMjQgT2N0IDIwMjUgMTA6NTg6MzcgKzAzMDAKU3ViamVjdDogW1BBVENIIHYyMCAyLzVd IEFkZCBwZ191cGdhcmRlIGZvciA2NCBiaXQgbXVsdGl4YWN0IG9mZnNldHMKCkF1dGhvcjogTWF4 aW0gT3Jsb3YgPG9ybG92bWdAZ21haWwuY29tPgpBdXRob3I6IEhlaWtraSBMaW5uYWthbmdhcyA8 aGxpbm5ha2FAaWtpLmZpPgotLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL211bHRpeGFj dC5jIHwgIDM1ICstLQogc3JjL2Jpbi9wZ191cGdyYWRlL01ha2VmaWxlICAgICAgICAgICAgfCAg IDMgKwogc3JjL2Jpbi9wZ191cGdyYWRlL21lc29uLmJ1aWxkICAgICAgICAgfCAgIDMgKwogc3Jj L2Jpbi9wZ191cGdyYWRlL211bHRpeGFjdF9uZXcuYyAgICAgfCAyMjcgKysrKysrKysrKysrKysr KysrKwogc3JjL2Jpbi9wZ191cGdyYWRlL211bHRpeGFjdF9uZXcuaCAgICAgfCAgMzEgKysrCiBz cmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4YWN0X29sZC5jICAgICB8IDI5NiArKysrKysrKysrKysr KysrKysrKysrKysrCiBzcmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4YWN0X29sZC5oICAgICB8ICAz MSArKysKIHNyYy9iaW4vcGdfdXBncmFkZS9wZ191cGdyYWRlLmMgICAgICAgIHwgMTA4ICsrKysr KysrLQogc3JjL2Jpbi9wZ191cGdyYWRlL3BnX3VwZ3JhZGUuaCAgICAgICAgfCAgIDUgKwogc3Jj L2Jpbi9wZ191cGdyYWRlL3NscnVfaW8uYyAgICAgICAgICAgfCAyNDAgKysrKysrKysrKysrKysr KysrKysKIHNyYy9iaW4vcGdfdXBncmFkZS9zbHJ1X2lvLmggICAgICAgICAgIHwgIDMwICsrKwog MTEgZmlsZXMgY2hhbmdlZCwgOTc3IGluc2VydGlvbnMoKyksIDMyIGRlbGV0aW9ucygtKQogY3Jl YXRlIG1vZGUgMTAwNjQ0IHNyYy9iaW4vcGdfdXBncmFkZS9tdWx0aXhhY3RfbmV3LmMKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBzcmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4YWN0X25ldy5oCiBjcmVhdGUg bW9kZSAxMDA2NDQgc3JjL2Jpbi9wZ191cGdyYWRlL211bHRpeGFjdF9vbGQuYwogY3JlYXRlIG1v ZGUgMTAwNjQ0IHNyYy9iaW4vcGdfdXBncmFkZS9tdWx0aXhhY3Rfb2xkLmgKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBzcmMvYmluL3BnX3VwZ3JhZGUvc2xydV9pby5jCiBjcmVhdGUgbW9kZSAxMDA2NDQg c3JjL2Jpbi9wZ191cGdyYWRlL3NscnVfaW8uaAoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy90cmFuc2FtL211bHRpeGFjdC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vbXVs dGl4YWN0LmMKaW5kZXggOTNhMWU0Y2ZkMmEuLjVhMTM1OTZjZDg2IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9tdWx0aXhhY3QuYworKysgYi9zcmMvYmFja2VuZC9hY2Nl c3MvdHJhbnNhbS9tdWx0aXhhY3QuYwpAQCAtMTIzMSw3ICsxMjMxLDYgQEAgR2V0TXVsdGlYYWN0 SWRNZW1iZXJzKE11bHRpWGFjdElkIG11bHRpLCBNdWx0aVhhY3RNZW1iZXIgKiptZW1iZXJzLAog CWludAkJCXNsb3RubzsKIAlNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0OwogCWludAkJCWxlbmd0aDsK LQlpbnQJCQl0cnVlbGVuZ3RoOwogCU11bHRpWGFjdElkIG9sZGVzdE1YYWN0OwogCU11bHRpWGFj dElkIG5leHRNWGFjdDsKIAlNdWx0aVhhY3RJZCB0bXBNWGFjdDsKQEAgLTEzMzAsMTUgKzEzMjks NiBAQCBHZXRNdWx0aVhhY3RJZE1lbWJlcnMoTXVsdGlYYWN0SWQgbXVsdGksIE11bHRpWGFjdE1l bWJlciAqKm1lbWJlcnMsCiAJICogd2UgaGF2ZSBqdXN0IGZvciB0aGlzOyB0aGUgcHJvY2VzcyBp biBjaGFyZ2Ugd2lsbCBzaWduYWwgdGhlIENWIGFzIHNvb24KIAkgKiBhcyBpdCBoYXMgZmluaXNo ZWQgd3JpdGluZyB0aGUgbXVsdGl4YWN0IG9mZnNldC4KIAkgKgotCSAqIDMuIEJlY2F1c2UgR2V0 TmV3TXVsdGlYYWN0SWQgaW5jcmVtZW50cyBvZmZzZXQgemVybyB0byBvZmZzZXQgb25lIHRvCi0J ICogaGFuZGxlIGNhc2UgIzIsIHRoZXJlIGlzIGFuIGFtYmlndWl0eSBuZWFyIHRoZSBwb2ludCBv ZiBvZmZzZXQKLQkgKiB3cmFwYXJvdW5kLiAgSWYgd2Ugc2VlIG5leHQgbXVsdGl4YWN0J3Mgb2Zm c2V0IGlzIG9uZSwgaXMgdGhhdCBvdXIKLQkgKiBtdWx0aXhhY3QncyBhY3R1YWwgZW5kcG9pbnQs IG9yIGRpZCBpdCBlbmQgYXQgemVybyB3aXRoIGEgc3Vic2VxdWVudAotCSAqIGluY3JlbWVudD8g IFdlIGhhbmRsZSB0aGlzIHVzaW5nIHRoZSBrbm93bGVkZ2UgdGhhdCBpZiB0aGUgemVybyd0aAot CSAqIG1lbWJlciBzbG90IHdhc24ndCBmaWxsZWQsIGl0J2xsIGNvbnRhaW4gemVybywgYW5kIHpl cm8gaXNuJ3QgYSB2YWxpZAotCSAqIHRyYW5zYWN0aW9uIElEIHNvIGl0IGNhbid0IGJlIGEgbXVs dGl4YWN0IG1lbWJlci4gIFRoZXJlZm9yZSwgaWYgd2UKLQkgKiByZWFkIGEgemVybyBmcm9tIHRo ZSBtZW1iZXJzIGFycmF5LCBqdXN0IGlnbm9yZSBpdC4KLQkgKgogCSAqIFRoaXMgaXMgYWxsIHBy ZXR0eSBtZXNzeSwgYnV0IHRoZSBtZXNzIG9jY3VycyBvbmx5IGluIGluZnJlcXVlbnQgY29ybmVy CiAJICogY2FzZXMsIHNvIGl0IHNlZW1zIGJldHRlciB0aGFuIGhvbGRpbmcgdGhlIE11bHRpWGFj dEdlbkxvY2sgZm9yIGEgbG9uZwogCSAqIHRpbWUgb24gZXZlcnkgbXVsdGl4YWN0IGNyZWF0aW9u LgpAQCAtMTQyMiw2ICsxNDEyLDkgQEAgcmV0cnk6CiAJTFdMb2NrUmVsZWFzZShsb2NrKTsKIAls b2NrID0gTlVMTDsKIAorCS8qIEEgbXVsdGl4aWQgd2l0aCB6ZXJvIG1lbWJlcnMgc2hvdWxkIG5v dCBoYXBwZW4gKi8KKwlBc3NlcnQobGVuZ3RoID4gMCk7CisKIAkvKgogCSAqIElmIHdlIHNsZXB0 IGFib3ZlLCBjbGVhbiB1cCBzdGF0ZTsgaXQncyBubyBsb25nZXIgbmVlZGVkLgogCSAqLwpAQCAt MTQzMCw3ICsxNDIzLDYgQEAgcmV0cnk6CiAKIAlwdHIgPSAoTXVsdGlYYWN0TWVtYmVyICopIHBh bGxvYyhsZW5ndGggKiBzaXplb2YoTXVsdGlYYWN0TWVtYmVyKSk7CiAKLQl0cnVlbGVuZ3RoID0g MDsKIAlwcmV2X3BhZ2VubyA9IC0xOwogCWZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyss IG9mZnNldCsrKQogCXsKQEAgLTE0NjgsMzYgKzE0NjAsMjcgQEAgcmV0cnk6CiAJCXhhY3RwdHIg PSAoVHJhbnNhY3Rpb25JZCAqKQogCQkJKE11bHRpWGFjdE1lbWJlckN0bC0+c2hhcmVkLT5wYWdl X2J1ZmZlcltzbG90bm9dICsgbWVtYmVyb2ZmKTsKIAotCQlpZiAoIVRyYW5zYWN0aW9uSWRJc1Zh bGlkKCp4YWN0cHRyKSkKLQkJewotCQkJLyogQ29ybmVyIGNhc2UgMzogd2UgbXVzdCBiZSBsb29r aW5nIGF0IHVudXNlZCBzbG90IHplcm8gKi8KLQkJCUFzc2VydChvZmZzZXQgPT0gMCk7Ci0JCQlj b250aW51ZTsKLQkJfQorCQlBc3NlcnQoVHJhbnNhY3Rpb25JZElzVmFsaWQoKnhhY3RwdHIpKTsK IAogCQlmbGFnc29mZiA9IE1YT2Zmc2V0VG9GbGFnc09mZnNldChvZmZzZXQpOwogCQlic2hpZnQg PSBNWE9mZnNldFRvRmxhZ3NCaXRTaGlmdChvZmZzZXQpOwogCQlmbGFnc3B0ciA9ICh1aW50MzIg KikgKE11bHRpWGFjdE1lbWJlckN0bC0+c2hhcmVkLT5wYWdlX2J1ZmZlcltzbG90bm9dICsgZmxh Z3NvZmYpOwogCi0JCXB0clt0cnVlbGVuZ3RoXS54aWQgPSAqeGFjdHB0cjsKLQkJcHRyW3RydWVs ZW5ndGhdLnN0YXR1cyA9ICgqZmxhZ3NwdHIgPj4gYnNoaWZ0KSAmIE1YQUNUX01FTUJFUl9YQUNU X0JJVE1BU0s7Ci0JCXRydWVsZW5ndGgrKzsKKwkJcHRyW2ldLnhpZCA9ICp4YWN0cHRyOworCQlw dHJbaV0uc3RhdHVzID0gKCpmbGFnc3B0ciA+PiBic2hpZnQpICYgTVhBQ1RfTUVNQkVSX1hBQ1Rf QklUTUFTSzsKIAl9CiAKIAlMV0xvY2tSZWxlYXNlKGxvY2spOwogCi0JLyogQSBtdWx0aXhpZCB3 aXRoIHplcm8gbWVtYmVycyBzaG91bGQgbm90IGhhcHBlbiAqLwotCUFzc2VydCh0cnVlbGVuZ3Ro ID4gMCk7Ci0KIAkvKgogCSAqIENvcHkgdGhlIHJlc3VsdCBpbnRvIHRoZSBsb2NhbCBjYWNoZS4K IAkgKi8KLQltWGFjdENhY2hlUHV0KG11bHRpLCB0cnVlbGVuZ3RoLCBwdHIpOworCW1YYWN0Q2Fj aGVQdXQobXVsdGksIGxlbmd0aCwgcHRyKTsKIAogCWRlYnVnX2Vsb2czKERFQlVHMiwgIkdldE1l bWJlcnM6IG5vIGNhY2hlIGZvciAlcyIsCi0JCQkJbXhpZF90b19zdHJpbmcobXVsdGksIHRydWVs ZW5ndGgsIHB0cikpOworCQkJCW14aWRfdG9fc3RyaW5nKG11bHRpLCBsZW5ndGgsIHB0cikpOwog CSptZW1iZXJzID0gcHRyOwotCXJldHVybiB0cnVlbGVuZ3RoOworCXJldHVybiBsZW5ndGg7CiB9 CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3VwZ3JhZGUvTWFrZWZpbGUgYi9zcmMvYmlu L3BnX3VwZ3JhZGUvTWFrZWZpbGUKaW5kZXggNjlmY2Y1OTNjYWUuLjQyOTk1ZDUzYjBiIDEwMDY0 NAotLS0gYS9zcmMvYmluL3BnX3VwZ3JhZGUvTWFrZWZpbGUKKysrIGIvc3JjL2Jpbi9wZ191cGdy YWRlL01ha2VmaWxlCkBAIC0xOCwxMSArMTgsMTQgQEAgT0JKUyA9IFwKIAlmaWxlLm8gXAogCWZ1 bmN0aW9uLm8gXAogCWluZm8ubyBcCisJbXVsdGl4YWN0X25ldy5vIFwKKwltdWx0aXhhY3Rfb2xk Lm8gXAogCW9wdGlvbi5vIFwKIAlwYXJhbGxlbC5vIFwKIAlwZ191cGdyYWRlLm8gXAogCXJlbGZp bGVudW1iZXIubyBcCiAJc2VydmVyLm8gXAorCXNscnVfaW8ubyBcCiAJdGFibGVzcGFjZS5vIFwK IAl0YXNrLm8gXAogCXV0aWwubyBcCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3VwZ3JhZGUvbWVz b24uYnVpbGQgYi9zcmMvYmluL3BnX3VwZ3JhZGUvbWVzb24uYnVpbGQKaW5kZXggYWM5OTJmMGQx NGIuLjNlNDZjNDUxMmNmIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX3VwZ3JhZGUvbWVzb24uYnVp bGQKKysrIGIvc3JjL2Jpbi9wZ191cGdyYWRlL21lc29uLmJ1aWxkCkBAIC04LDExICs4LDE0IEBA IHBnX3VwZ3JhZGVfc291cmNlcyA9IGZpbGVzKAogICAnZmlsZS5jJywKICAgJ2Z1bmN0aW9uLmMn LAogICAnaW5mby5jJywKKyAgJ211bHRpeGFjdF9uZXcuYycsCisgICdtdWx0aXhhY3Rfb2xkLmMn LAogICAnb3B0aW9uLmMnLAogICAncGFyYWxsZWwuYycsCiAgICdwZ191cGdyYWRlLmMnLAogICAn cmVsZmlsZW51bWJlci5jJywKICAgJ3NlcnZlci5jJywKKyAgJ3NscnVfaW8uYycsCiAgICd0YWJs ZXNwYWNlLmMnLAogICAndGFzay5jJywKICAgJ3V0aWwuYycsCmRpZmYgLS1naXQgYS9zcmMvYmlu L3BnX3VwZ3JhZGUvbXVsdGl4YWN0X25ldy5jIGIvc3JjL2Jpbi9wZ191cGdyYWRlL211bHRpeGFj dF9uZXcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZDQzNDQyZmI5 YTcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4YWN0X25ldy5j CkBAIC0wLDAgKzEsMjI3IEBACisvKgorICogbXVsdGl4YWN0X25ldy5jCisgKgorICogUmV3cml0 ZSBwcmUtdjE5IG11bHRpeGFjdHMgdG8gbmV3IGZvcm1hdCB3aXRoIDY0LWJpdCBNdWx0aVhhY3RP ZmZzZXRzCisgKgorICogQ29weXJpZ2h0IChjKSAyMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZl bG9wbWVudCBHcm91cAorICogc3JjL2Jpbi9wZ191cGdyYWRlL211bHRpeGFjdF9uZXcuYworICov CisKKyNpbmNsdWRlICJtdWx0aXhhY3RfbmV3LmgiCisKKy8qCisgKiBOT1RFOiBCZWxvdyBhcmUg YSBidW5jaCBvZiBkZWZpbml0aW9ucyBhbmQgc2ltcGxlIGlubGluZSBmdW5jdGlvbnMgdGhhdCBh cmUKKyAqIGNvcHktcGFzdGVkIGZyb20gbXVsdGl4YWN0LmMKKyAqLworCisvKiBXZSBuZWVkIGZv dXIgYnl0ZXMgcGVyIG9mZnNldCwgOCBieXRlcyBmb3IgdGhlIGJhc2UgKi8KKyNkZWZpbmUgTVVM VElYQUNUX09GRlNFVFNfUEVSX1BBR0UgKEJMQ0tTWiAvIHNpemVvZihNdWx0aVhhY3RPZmZzZXQp KQorCitzdGF0aWMgaW5saW5lIGludDY0CitNdWx0aVhhY3RJZFRvT2Zmc2V0UGFnZShNdWx0aVhh Y3RJZCBtdWx0aSkKK3sKKwlyZXR1cm4gbXVsdGkgLyBNVUxUSVhBQ1RfT0ZGU0VUU19QRVJfUEFH RTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK011bHRpWGFjdElkVG9PZmZzZXRFbnRyeShNdWx0 aVhhY3RJZCBtdWx0aSkKK3sKKwlyZXR1cm4gbXVsdGkgJSBNVUxUSVhBQ1RfT0ZGU0VUU19QRVJf UEFHRTsKK30KKworLyogV2UgbmVlZCBlaWdodCBiaXRzIHBlciB4YWN0LCBzbyBvbmUgeGFjdCBm aXRzIGluIGEgYnl0ZSAqLworI2RlZmluZSBNWEFDVF9NRU1CRVJfQklUU19QRVJfWEFDVAkJCTgK KyNkZWZpbmUgTVhBQ1RfTUVNQkVSX0ZMQUdTX1BFUl9CWVRFCQkJMQorI2RlZmluZSBNWEFDVF9N RU1CRVJfWEFDVF9CSVRNQVNLCSgoMSA8PCBNWEFDVF9NRU1CRVJfQklUU19QRVJfWEFDVCkgLSAx KQorCisvKiBob3cgbWFueSBmdWxsIGJ5dGVzIG9mIGZsYWdzIGFyZSB0aGVyZSBpbiBhIGdyb3Vw PyAqLworI2RlZmluZSBNVUxUSVhBQ1RfRkxBR0JZVEVTX1BFUl9HUk9VUAkJNAorI2RlZmluZSBN VUxUSVhBQ1RfTUVNQkVSU19QRVJfTUVNQkVSR1JPVVAJXAorCShNVUxUSVhBQ1RfRkxBR0JZVEVT X1BFUl9HUk9VUCAqIE1YQUNUX01FTUJFUl9GTEFHU19QRVJfQllURSkKKy8qIHNpemUgaW4gYnl0 ZXMgb2YgYSBjb21wbGV0ZSBncm91cCAqLworI2RlZmluZSBNVUxUSVhBQ1RfTUVNQkVSR1JPVVBf U0laRSBcCisJKHNpemVvZihUcmFuc2FjdGlvbklkKSAqIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9N RU1CRVJHUk9VUCArIE1VTFRJWEFDVF9GTEFHQllURVNfUEVSX0dST1VQKQorI2RlZmluZSBNVUxU SVhBQ1RfTUVNQkVSR1JPVVBTX1BFUl9QQUdFIChCTENLU1ogLyBNVUxUSVhBQ1RfTUVNQkVSR1JP VVBfU0laRSkKKyNkZWZpbmUgTVVMVElYQUNUX01FTUJFUlNfUEVSX1BBR0UJXAorCShNVUxUSVhB Q1RfTUVNQkVSR1JPVVBTX1BFUl9QQUdFICogTVVMVElYQUNUX01FTUJFUlNfUEVSX01FTUJFUkdS T1VQKQorCisvKgorICogQmVjYXVzZSB0aGUgbnVtYmVyIG9mIGl0ZW1zIHBlciBwYWdlIGlzIG5v dCBhIGRpdmlzb3Igb2YgdGhlIGxhc3QgaXRlbQorICogbnVtYmVyIChtZW1iZXIgMHhGRkZGRkZG RiksIHRoZSBsYXN0IHNlZ21lbnQgZG9lcyBub3QgdXNlIHRoZSBtYXhpbXVtIG51bWJlcgorICog b2YgcGFnZXMsIGFuZCBtb3Jlb3ZlciB0aGUgbGFzdCB1c2VkIHBhZ2UgdGhlcmVpbiBkb2VzIG5v dCB1c2UgdGhlIHNhbWUKKyAqIG51bWJlciBvZiBpdGVtcyBhcyBwcmV2aW91cyBwYWdlcy4gIChB bm90aGVyIHdheSB0byBzYXkgaXQgaXMgdGhhdCB0aGUKKyAqIDB4RkZGRkZGRkYgbWVtYmVyIGlz IHNvbWV3aGVyZSBpbiB0aGUgbWlkZGxlIG9mIHRoZSBsYXN0IHBhZ2UsIHNvIHRoZSBwYWdlCisg KiBoYXMgc29tZSBlbXB0eSBzcGFjZSBhZnRlciB0aGF0IGl0ZW0uKQorICoKKyAqIFRoaXMgY29u c3RhbnQgaXMgdGhlIG51bWJlciBvZiBtZW1iZXJzIGluIHRoZSBsYXN0IHBhZ2Ugb2YgdGhlIGxh c3Qgc2VnbWVudC4KKyAqLworI2RlZmluZSBNQVhfTUVNQkVSU19JTl9MQVNUX01FTUJFUlNfUEFH RSBcCisJCSgodWludDMyKSAoKDB4RkZGRkZGRkYgJSBNVUxUSVhBQ1RfTUVNQkVSU19QRVJfUEFH RSkgKyAxKSkKKworLyogcGFnZSBpbiB3aGljaCBhIG1lbWJlciBpcyB0byBiZSBmb3VuZCAqLwor c3RhdGljIGlubGluZSBpbnQ2NAorTVhPZmZzZXRUb01lbWJlclBhZ2UoTXVsdGlYYWN0T2Zmc2V0 IG9mZnNldCkKK3sKKwlyZXR1cm4gb2Zmc2V0IC8gTVVMVElYQUNUX01FTUJFUlNfUEVSX1BBR0U7 Cit9CisKKy8qIExvY2F0aW9uIChieXRlIG9mZnNldCB3aXRoaW4gcGFnZSkgb2YgZmxhZyB3b3Jk IGZvciBhIGdpdmVuIG1lbWJlciAqLworc3RhdGljIGlubGluZSBpbnQKK01YT2Zmc2V0VG9GbGFn c09mZnNldChNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0KQoreworCU11bHRpWGFjdE9mZnNldCBncm91 cCA9IG9mZnNldCAvIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9NRU1CRVJHUk9VUDsKKwlpbnQJCQln cm91cG9ucGcgPSBncm91cCAlIE1VTFRJWEFDVF9NRU1CRVJHUk9VUFNfUEVSX1BBR0U7CisJaW50 CQkJYnl0ZW9mZiA9IGdyb3Vwb25wZyAqIE1VTFRJWEFDVF9NRU1CRVJHUk9VUF9TSVpFOworCisJ cmV0dXJuIGJ5dGVvZmY7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitNWE9mZnNldFRvRmxhZ3NC aXRTaGlmdChNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0KQoreworCWludAkJCW1lbWJlcl9pbl9ncm91 cCA9IG9mZnNldCAlIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9NRU1CRVJHUk9VUDsKKwlpbnQJCQli c2hpZnQgPSBtZW1iZXJfaW5fZ3JvdXAgKiBNWEFDVF9NRU1CRVJfQklUU19QRVJfWEFDVDsKKwor CXJldHVybiBic2hpZnQ7Cit9CisKKy8qIExvY2F0aW9uIChieXRlIG9mZnNldCB3aXRoaW4gcGFn ZSkgb2YgVHJhbnNhY3Rpb25JZCBvZiBnaXZlbiBtZW1iZXIgKi8KK3N0YXRpYyBpbmxpbmUgaW50 CitNWE9mZnNldFRvTWVtYmVyT2Zmc2V0KE11bHRpWGFjdE9mZnNldCBvZmZzZXQpCit7CisJaW50 CQkJbWVtYmVyX2luX2dyb3VwID0gb2Zmc2V0ICUgTVVMVElYQUNUX01FTUJFUlNfUEVSX01FTUJF UkdST1VQOworCisJcmV0dXJuIE1YT2Zmc2V0VG9GbGFnc09mZnNldChvZmZzZXQpICsKKwkJTVVM VElYQUNUX0ZMQUdCWVRFU19QRVJfR1JPVVAgKworCQltZW1iZXJfaW5fZ3JvdXAgKiBzaXplb2Yo VHJhbnNhY3Rpb25JZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorTVhPZmZzZXRXcml0ZShj aGFyICpidWYsIGludCBlbnRyeW5vLCBNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0KQoreworCU11bHRp WGFjdE9mZnNldCAqb2ZmcHRyID0gKE11bHRpWGFjdE9mZnNldCAqKSBidWY7CisKKwlvZmZwdHJb ZW50cnlub10gPSBvZmZzZXQ7Cit9CisKK011bHRpWGFjdFdyaXRlciAqCitBbGxvY011bHRpWGFj dFdyaXRlKGNoYXIgKnBnZGF0YSwgTXVsdGlYYWN0SWQgZmlyc3RNdWx0aSwKKwkJCQkJTXVsdGlY YWN0T2Zmc2V0IGZpcnN0T2Zmc2V0KQoreworCU11bHRpWGFjdFdyaXRlciAgICAqc3RhdGUgPSBw Z19tYWxsb2Moc2l6ZW9mKCpzdGF0ZSkpOworCWNoYXIJCQkJZGlyW01BWFBHUEFUSF0gPSB7MH07 CisKKwlzdGF0ZS0+bmV4dE1YYWN0ID0gZmlyc3RNdWx0aTsKKwlzdGF0ZS0+bmV4dE9mZnNldCA9 IGZpcnN0T2Zmc2V0OworCisJcGdfc3ByaW50ZihkaXIsICIlcy9wZ19tdWx0aXhhY3Qvb2Zmc2V0 cyIsIHBnZGF0YSk7CisJc3RhdGUtPm9mZnNldCA9IEFsbG9jU2xydVdyaXRlKGRpciwgZmFsc2Up OworCisJcGdfc3ByaW50ZihkaXIsICIlcy9wZ19tdWx0aXhhY3QvbWVtYmVycyIsIHBnZGF0YSk7 CisJc3RhdGUtPm1lbWJlcnMgPSBBbGxvY1NscnVXcml0ZShkaXIsIHRydWUgLyogdXNlIGxvbmcg c2VnbWVudCBuYW1lcyAqLyk7CisKKwlyZXR1cm4gc3RhdGU7Cit9CisKKy8qCisgKiBTaW1wbGlm aWVkIGNvcHkgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc2VydmVyIGZ1bmN0aW9uCisgKi8KK011bHRp WGFjdElkCitHZXROZXdNdWx0aVhhY3RJZChNdWx0aVhhY3RXcml0ZXIgKnN0YXRlLCBpbnQgbm1l bWJlcnMsIE11bHRpWGFjdE9mZnNldCAqb2Zmc2V0KQoreworCU11bHRpWGFjdElkCQlyZXN1bHQ7 CisKKwkvKiBIYW5kbGUgd3JhcGFyb3VuZCBvZiB0aGUgbmV4dE1YYWN0IGNvdW50ZXIgKi8KKwlp ZiAoc3RhdGUtPm5leHRNWGFjdCA8IEZpcnN0TXVsdGlYYWN0SWQpCisJCXN0YXRlLT5uZXh0TVhh Y3QgPSBGaXJzdE11bHRpWGFjdElkOworCisJLyogQXNzaWduIHRoZSBNWElEICovCisJcmVzdWx0 ID0gc3RhdGUtPm5leHRNWGFjdDsKKworCS8qIFJlc2VydmUgdGhlIG1lbWJlcnMgc3BhY2UsIHNp bWlsYXJseSB0byBhYm92ZS4gKi8KKwkqb2Zmc2V0ID0gc3RhdGUtPm5leHRPZmZzZXQ7CisKKwkv KgorCSAqIEFkdmFuY2UgY291bnRlcnMuICBBcyBpbiBHZXROZXdUcmFuc2FjdGlvbklkKCksIHRo aXMgbXVzdCBub3QgaGFwcGVuCisJICogdW50aWwgYWZ0ZXIgZmlsZSBleHRlbnNpb24gaGFzIHN1 Y2NlZWRlZCEKKwkgKgorCSAqIFdlIGRvbid0IGNhcmUgYWJvdXQgTXVsdGlYYWN0SWQgd3JhcGFy b3VuZCBoZXJlOyBpdCB3aWxsIGJlIGhhbmRsZWQgYnkKKwkgKiB0aGUgbmV4dCBpdGVyYXRpb24u ICBCdXQgbm90ZSB0aGF0IG5leHRNWGFjdCBtYXkgYmUgSW52YWxpZE11bHRpWGFjdElkCisJICog b3IgdGhlIGZpcnN0IHZhbHVlIG9uIGEgc2VnbWVudC1iZWdpbm5pbmcgcGFnZSBhZnRlciB0aGlz IHJvdXRpbmUKKwkgKiBleGl0cywgc28gYW55b25lIGVsc2UgbG9va2luZyBhdCB0aGUgdmFyaWFi bGUgbXVzdCBiZSBwcmVwYXJlZCB0byBkZWFsCisJICogd2l0aCBlaXRoZXIgY2FzZS4gIFNpbWls YXJseSwgbmV4dE9mZnNldCBtYXkgYmUgemVybywgYnV0IHdlIHdvbid0IHVzZQorCSAqIHRoYXQg YXMgdGhlIGFjdHVhbCBzdGFydCBvZmZzZXQgb2YgdGhlIG5leHQgbXVsdGl4YWN0LgorCSAqLwor CShzdGF0ZS0+bmV4dE1YYWN0KSsrOworCisJc3RhdGUtPm5leHRPZmZzZXQgKz0gbm1lbWJlcnM7 CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogV3JpdGUgYSBuZXcgbXVsdGl4YWN0IHdp dGggbWVtYmVycy4KKyAqCisgKiBTaW1wbGlmaWVkIHZlcnNpb24gb2YgdGhlIGNvcnJlc3BvZGlu ZyBzZXJ2ZXIgZnVuY3Rpb24sIGhlbmNlIHRoZSBuYW1lLgorICovCit2b2lkCitSZWNvcmROZXdN dWx0aVhhY3QoTXVsdGlYYWN0V3JpdGVyICpzdGF0ZSwgTXVsdGlYYWN0T2Zmc2V0IG9mZnNldCwK KwkJCQkgICBNdWx0aVhhY3RJZCBtdWx0aSwgaW50IG5tZW1iZXJzLCBNdWx0aVhhY3RNZW1iZXIg Km1lbWJlcnMpCit7CisJaW50NjQJCXBhZ2VubzsKKwlpbnQ2NAkJcHJldl9wYWdlbm87CisJaW50 CQkJZW50cnlubywKKwkJCQlpOworCWNoYXIJICAgKmJ1ZjsKKworCXBhZ2VubyA9IE11bHRpWGFj dElkVG9PZmZzZXRQYWdlKG11bHRpKTsKKwllbnRyeW5vID0gTXVsdGlYYWN0SWRUb09mZnNldEVu dHJ5KG11bHRpKTsKKworCWJ1ZiA9IFNscnVXcml0ZVN3aXRjaFBhZ2Uoc3RhdGUtPm9mZnNldCwg cGFnZW5vKTsKKwlNWE9mZnNldFdyaXRlKGJ1ZiwgZW50cnlubywgb2Zmc2V0KTsKKworCXByZXZf cGFnZW5vID0gLTE7CisKKwlmb3IgKGkgPSAwOyBpIDwgbm1lbWJlcnM7IGkrKywgb2Zmc2V0Kysp CisJeworCQlUcmFuc2FjdGlvbklkICptZW1iZXJwdHI7CisJCXVpbnQzMgkgICAqZmxhZ3NwdHI7 CisJCXVpbnQzMgkJZmxhZ3N2YWw7CisJCWludAkJCWJzaGlmdDsKKwkJaW50CQkJZmxhZ3NvZmY7 CisJCWludAkJCW1lbWJlcm9mZjsKKworCQlBc3NlcnQobWVtYmVyc1tpXS5zdGF0dXMgPD0gTXVs dGlYYWN0U3RhdHVzVXBkYXRlKTsKKworCQlwYWdlbm8gPSBNWE9mZnNldFRvTWVtYmVyUGFnZShv ZmZzZXQpOworCQltZW1iZXJvZmYgPSBNWE9mZnNldFRvTWVtYmVyT2Zmc2V0KG9mZnNldCk7CisJ CWZsYWdzb2ZmID0gTVhPZmZzZXRUb0ZsYWdzT2Zmc2V0KG9mZnNldCk7CisJCWJzaGlmdCA9IE1Y T2Zmc2V0VG9GbGFnc0JpdFNoaWZ0KG9mZnNldCk7CisKKwkJaWYgKHBhZ2VubyAhPSBwcmV2X3Bh Z2VubykKKwkJeworCQkJYnVmID0gU2xydVdyaXRlU3dpdGNoUGFnZShzdGF0ZS0+bWVtYmVycywg cGFnZW5vKTsKKwkJCXByZXZfcGFnZW5vID0gcGFnZW5vOworCQl9CisKKwkJbWVtYmVycHRyID0g KFRyYW5zYWN0aW9uSWQgKikgKGJ1ZiArIG1lbWJlcm9mZik7CisKKwkJKm1lbWJlcnB0ciA9IG1l bWJlcnNbaV0ueGlkOworCisJCWZsYWdzcHRyID0gKHVpbnQzMiAqKSAoYnVmICsgZmxhZ3NvZmYp OworCisJCWZsYWdzdmFsID0gKmZsYWdzcHRyOworCQlmbGFnc3ZhbCAmPSB+KCgoMSA8PCBNWEFD VF9NRU1CRVJfQklUU19QRVJfWEFDVCkgLSAxKSA8PCBic2hpZnQpOworCQlmbGFnc3ZhbCB8PSAo bWVtYmVyc1tpXS5zdGF0dXMgPDwgYnNoaWZ0KTsKKwkJKmZsYWdzcHRyID0gZmxhZ3N2YWw7CisJ fQorfQorCit2b2lkCitGcmVlTXVsdGlYYWN0V3JpdGUoTXVsdGlYYWN0V3JpdGVyICpzdGF0ZSkK K3sKKwlGcmVlU2xydVdyaXRlKHN0YXRlLT5vZmZzZXQpOworCUZyZWVTbHJ1V3JpdGUoc3RhdGUt Pm1lbWJlcnMpOworCisJcGZyZWUoc3RhdGUpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ191 cGdyYWRlL211bHRpeGFjdF9uZXcuaCBiL3NyYy9iaW4vcGdfdXBncmFkZS9tdWx0aXhhY3RfbmV3 LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjMzZDVkMWI4MjIyCi0t LSAvZGV2L251bGwKKysrIGIvc3JjL2Jpbi9wZ191cGdyYWRlL211bHRpeGFjdF9uZXcuaApAQCAt MCwwICsxLDMxIEBACisvKgorICogbXVsdGl4YWN0X25ldy5oCisgKgorICogQ29weXJpZ2h0IChj KSAyMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogc3JjL2Jpbi9w Z191cGdyYWRlL211bHRpeGFjdF9uZXcuaAorICovCisKKyNpbmNsdWRlICJwb3N0Z3Jlc19mZS5o IgorCisjaW5jbHVkZSAiYWNjZXNzL211bHRpeGFjdC5oIgorCisjaW5jbHVkZSAic2xydV9pby5o IgorCit0eXBlZGVmIHN0cnVjdCBNdWx0aVhhY3RXcml0ZXIKK3sKKwlNdWx0aVhhY3RJZAkJCW5l eHRNWGFjdDsKKwlNdWx0aVhhY3RPZmZzZXQJCW5leHRPZmZzZXQ7CisKKwlTbHJ1U2VnU3RhdGUJ ICAgKm9mZnNldDsKKwlTbHJ1U2VnU3RhdGUJICAgKm1lbWJlcnM7Cit9IE11bHRpWGFjdFdyaXRl cjsKKworZXh0ZXJuIE11bHRpWGFjdFdyaXRlciAqQWxsb2NNdWx0aVhhY3RXcml0ZShjaGFyICpw Z2RhdGEsCisJCQkJCQkJCQkJCU11bHRpWGFjdElkIGZpcnN0TXVsdGksCisJCQkJCQkJCQkJCU11 bHRpWGFjdE9mZnNldCBmaXJzdE9mZnNldCk7CitleHRlcm4gTXVsdGlYYWN0SWQgR2V0TmV3TXVs dGlYYWN0SWQoTXVsdGlYYWN0V3JpdGVyICpzdGF0ZSwgaW50IG5tZW1iZXJzLAorCQkJCQkJCQkJ IE11bHRpWGFjdE9mZnNldCAqb2Zmc2V0KTsKK2V4dGVybiB2b2lkIFJlY29yZE5ld011bHRpWGFj dChNdWx0aVhhY3RXcml0ZXIgKnN0YXRlLCBNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0LAorCQkJCQkJ CSAgIE11bHRpWGFjdElkIG11bHRpLCBpbnQgbm1lbWJlcnMsCisJCQkJCQkJICAgTXVsdGlYYWN0 TWVtYmVyICptZW1iZXJzKTsKK2V4dGVybiB2b2lkIEZyZWVNdWx0aVhhY3RXcml0ZShNdWx0aVhh Y3RXcml0ZXIgKndyaXRlcik7CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4 YWN0X29sZC5jIGIvc3JjL2Jpbi9wZ191cGdyYWRlL211bHRpeGFjdF9vbGQuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNmNjMzg0ZDJjZjIKLS0tIC9kZXYvbnVsbAor KysgYi9zcmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4YWN0X29sZC5jCkBAIC0wLDAgKzEsMjk2IEBA CisvKgorICogbXVsdGl4YWN0X29sZC5jCisgKgorICogUmV3cml0ZSBwcmUtdjE5IG11bHRpeGFj dHMgdG8gbmV3IGZvcm1hdCB3aXRoIDY0LWJpdCBNdWx0aVhhY3RPZmZzZXRzCisgKgorICogQ29w eXJpZ2h0IChjKSAyMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICog c3JjL2Jpbi9wZ191cGdyYWRlL211bHRpeGFjdF9vbGQuYworICovCisKKyNpbmNsdWRlICJtdWx0 aXhhY3Rfb2xkLmgiCisKKyNpbmNsdWRlICJwZ191cGdyYWRlLmgiCisKKy8qCisgKiBOT1RFOiBi ZWxvdyBhcmUgYSBidW5jaCBvZiBkZWZpbml0aW9ucyBhbmQgc2ltcGxlIHN0dGFpYyBpbmxpbmUg ZnVuY3Rpb25zCisgKiB0aGF0IGFyZSBjb3B5LXBhc3RlZCBmcm9tIG11bHRpeGFjdC5jIGZyb20g dmVyc2lvbiAxOC4gIFRoZSBvbmx5IGRpZmZlcmVuY2UKKyAqIGlzIHRoYXQgd2UgdXNlIHRoZSBP bGRNdWx0aVhhY3RPZmZzZXQgdHlwZSBlcXVhbCB0byB1aW50MzIgaW5zdGVhZCBvZgorICogTXVs dGlYYWN0T2Zmc2V0IHdoaWNoIGJlY2FtZSB1aW50NjQuCisgKi8KKworLyogV2UgbmVlZCBmb3Vy IGJ5dGVzIHBlciBvZmZzZXQgYW5kIDggYnl0ZXMgcGVyIGJhc2UgZm9yIGVhY2ggcGFnZS4gKi8K KyNkZWZpbmUgTVVMVElYQUNUX09GRlNFVFNfUEVSX1BBR0UgKEJMQ0tTWiAvIHNpemVvZihPbGRN dWx0aVhhY3RPZmZzZXQpKQorCitzdGF0aWMgaW5saW5lIGludDY0CitNdWx0aVhhY3RJZFRvT2Zm c2V0UGFnZShNdWx0aVhhY3RJZCBtdWx0aSkKK3sKKwlyZXR1cm4gbXVsdGkgLyBNVUxUSVhBQ1Rf T0ZGU0VUU19QRVJfUEFHRTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK011bHRpWGFjdElkVG9P ZmZzZXRFbnRyeShNdWx0aVhhY3RJZCBtdWx0aSkKK3sKKwlyZXR1cm4gbXVsdGkgJSBNVUxUSVhB Q1RfT0ZGU0VUU19QRVJfUEFHRTsKK30KKworLyoKKyAqIFRoZSBzaXR1YXRpb24gZm9yIG1lbWJl cnMgaXMgYSBiaXQgbW9yZSBjb21wbGV4OiB3ZSBzdG9yZSBvbmUgYnl0ZSBvZgorICogYWRkaXRp b25hbCBmbGFnIGJpdHMgZm9yIGVhY2ggVHJhbnNhY3Rpb25JZC4gIFRvIGRvIHRoaXMgd2l0aG91 dCBnZXR0aW5nCisgKiBpbnRvIGFsaWdubWVudCBpc3N1ZXMsIHdlIHN0b3JlIGZvdXIgYnl0ZXMg b2YgZmxhZ3MsIGFuZCB0aGVuIHRoZQorICogY29ycmVzcG9uZGluZyA0IFhpZHMuICBFYWNoIHN1 Y2ggNS13b3JkICgyMC1ieXRlKSBzZXQgd2UgY2FsbCBhICJncm91cCIsIGFuZAorICogYXJlIHN0 b3JlZCBhcyBhIHdob2xlIGluIHBhZ2VzLiAgVGh1cywgd2l0aCA4a0IgQkxDS1NaLCB3ZSBrZWVw IDQwOSBncm91cHMKKyAqIHBlciBwYWdlLiAgVGhpcyB3YXN0ZXMgMTIgYnl0ZXMgcGVyIHBhZ2Us IGJ1dCB0aGF0J3MgT0sgLS0gc2ltcGxpY2l0eSAoYW5kCisgKiBwZXJmb3JtYW5jZSkgdHJ1bXBz IHNwYWNlIGVmZmljaWVuY3kgaGVyZS4KKyAqCisgKiBOb3RlIHRoYXQgdGhlICJvZmZzZXQiIG1h Y3JvcyB3b3JrIHdpdGggYnl0ZSBvZmZzZXQsIG5vdCBhcnJheSBpbmRleGVzLCBzbworICogYXJp dGhtZXRpYyBtdXN0IGJlIGRvbmUgdXNpbmcgImNoYXIgKiIgcG9pbnRlcnMuCisgKi8KKy8qIFdl IG5lZWQgZWlnaHQgYml0cyBwZXIgeGFjdCwgc28gb25lIHhhY3QgZml0cyBpbiBhIGJ5dGUgKi8K KyNkZWZpbmUgTVhBQ1RfTUVNQkVSX0JJVFNfUEVSX1hBQ1QJCQk4CisjZGVmaW5lIE1YQUNUX01F TUJFUl9GTEFHU19QRVJfQllURQkJCTEKKyNkZWZpbmUgTVhBQ1RfTUVNQkVSX1hBQ1RfQklUTUFT SwkoKDEgPDwgTVhBQ1RfTUVNQkVSX0JJVFNfUEVSX1hBQ1QpIC0gMSkKKworLyogaG93IG1hbnkg ZnVsbCBieXRlcyBvZiBmbGFncyBhcmUgdGhlcmUgaW4gYSBncm91cD8gKi8KKyNkZWZpbmUgTVVM VElYQUNUX0ZMQUdCWVRFU19QRVJfR1JPVVAJCTQKKyNkZWZpbmUgTVVMVElYQUNUX01FTUJFUlNf UEVSX01FTUJFUkdST1VQCVwKKwkoTVVMVElYQUNUX0ZMQUdCWVRFU19QRVJfR1JPVVAgKiBNWEFD VF9NRU1CRVJfRkxBR1NfUEVSX0JZVEUpCisvKiBzaXplIGluIGJ5dGVzIG9mIGEgY29tcGxldGUg Z3JvdXAgKi8KKyNkZWZpbmUgTVVMVElYQUNUX01FTUJFUkdST1VQX1NJWkUgXAorCShzaXplb2Yo VHJhbnNhY3Rpb25JZCkgKiBNVUxUSVhBQ1RfTUVNQkVSU19QRVJfTUVNQkVSR1JPVVAgKyBNVUxU SVhBQ1RfRkxBR0JZVEVTX1BFUl9HUk9VUCkKKyNkZWZpbmUgTVVMVElYQUNUX01FTUJFUkdST1VQ U19QRVJfUEFHRSAoQkxDS1NaIC8gTVVMVElYQUNUX01FTUJFUkdST1VQX1NJWkUpCisjZGVmaW5l IE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9QQUdFCVwKKwkoTVVMVElYQUNUX01FTUJFUkdST1VQU19Q RVJfUEFHRSAqIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9NRU1CRVJHUk9VUCkKKworLyogcGFnZSBp biB3aGljaCBhIG1lbWJlciBpcyB0byBiZSBmb3VuZCAqLworc3RhdGljIGlubGluZSBpbnQ2NAor TVhPZmZzZXRUb01lbWJlclBhZ2UoT2xkTXVsdGlYYWN0T2Zmc2V0IG9mZnNldCkKK3sKKwlyZXR1 cm4gb2Zmc2V0IC8gTVVMVElYQUNUX01FTUJFUlNfUEVSX1BBR0U7Cit9CisKKy8qIExvY2F0aW9u IChieXRlIG9mZnNldCB3aXRoaW4gcGFnZSkgb2YgZmxhZyB3b3JkIGZvciBhIGdpdmVuIG1lbWJl ciAqLworc3RhdGljIGlubGluZSBpbnQKK01YT2Zmc2V0VG9GbGFnc09mZnNldChNdWx0aVhhY3RP ZmZzZXQgb2Zmc2V0KQoreworCU9sZE11bHRpWGFjdE9mZnNldCBncm91cCA9IG9mZnNldCAvIE1V TFRJWEFDVF9NRU1CRVJTX1BFUl9NRU1CRVJHUk9VUDsKKwlpbnQJCQlncm91cG9ucGcgPSBncm91 cCAlIE1VTFRJWEFDVF9NRU1CRVJHUk9VUFNfUEVSX1BBR0U7CisJaW50CQkJYnl0ZW9mZiA9IGdy b3Vwb25wZyAqIE1VTFRJWEFDVF9NRU1CRVJHUk9VUF9TSVpFOworCisJcmV0dXJuIGJ5dGVvZmY7 Cit9CisKKy8qIExvY2F0aW9uIChieXRlIG9mZnNldCB3aXRoaW4gcGFnZSkgb2YgVHJhbnNhY3Rp b25JZCBvZiBnaXZlbiBtZW1iZXIgKi8KK3N0YXRpYyBpbmxpbmUgaW50CitNWE9mZnNldFRvTWVt YmVyT2Zmc2V0KE9sZE11bHRpWGFjdE9mZnNldCBvZmZzZXQpCit7CisJaW50CQkJbWVtYmVyX2lu X2dyb3VwID0gb2Zmc2V0ICUgTVVMVElYQUNUX01FTUJFUlNfUEVSX01FTUJFUkdST1VQOworCisJ cmV0dXJuIE1YT2Zmc2V0VG9GbGFnc09mZnNldChvZmZzZXQpICsKKwkJTVVMVElYQUNUX0ZMQUdC WVRFU19QRVJfR1JPVVAgKworCQltZW1iZXJfaW5fZ3JvdXAgKiBzaXplb2YoVHJhbnNhY3Rpb25J ZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitNWE9mZnNldFRvRmxhZ3NCaXRTaGlmdChPbGRN dWx0aVhhY3RPZmZzZXQgb2Zmc2V0KQoreworCWludAkJCW1lbWJlcl9pbl9ncm91cCA9IG9mZnNl dCAlIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9NRU1CRVJHUk9VUDsKKwlpbnQJCQlic2hpZnQgPSBt ZW1iZXJfaW5fZ3JvdXAgKiBNWEFDVF9NRU1CRVJfQklUU19QRVJfWEFDVDsKKworCXJldHVybiBi c2hpZnQ7Cit9CisKKy8qCisgKiBDb25zdHJ1Y3QgcmVhZGVyIG9mIG9sZCBtdWx0aXhhY3RzLgor ICoKKyAqIFJldHVybnMgdGhlIG1hbGxvY2VkIG1lbW9yeSB1c2VkIGJ5IHRoZSBhbGwgb3RoZXIg Y2FsbHMgaW4gdGhpcyBtb2R1bGUuCisgKi8KK09sZE11bHRpWGFjdFJlYWRlciAqCitBbGxvY09s ZE11bHRpWGFjdFJlYWQoY2hhciAqcGdkYXRhLCBNdWx0aVhhY3RJZCBuZXh0TXVsdGksCisJCQkJ CSAgT2xkTXVsdGlYYWN0T2Zmc2V0IG5leHRPZmZzZXQpCit7CisJT2xkTXVsdGlYYWN0UmVhZGVy ICpzdGF0ZSA9IHN0YXRlID0gcGdfbWFsbG9jKHNpemVvZigqc3RhdGUpKTsKKwljaGFyCQkJCWRp cltNQVhQR1BBVEhdID0gezB9OworCisJc3RhdGUtPm5leHRNWGFjdCA9IG5leHRNdWx0aTsKKwlz dGF0ZS0+bmV4dE9mZnNldCA9IG5leHRPZmZzZXQ7CisKKwlwZ19zcHJpbnRmKGRpciwgIiVzL3Bn X211bHRpeGFjdC9vZmZzZXRzIiwgcGdkYXRhKTsKKwlzdGF0ZS0+b2Zmc2V0ID0gQWxsb2NTbHJ1 UmVhZChkaXIpOworCisJcGdfc3ByaW50ZihkaXIsICIlcy9wZ19tdWx0aXhhY3QvbWVtYmVycyIs IHBnZGF0YSk7CisJc3RhdGUtPm1lbWJlcnMgPSBBbGxvY1NscnVSZWFkKGRpcik7CisKKwlyZXR1 cm4gc3RhdGU7Cit9CisKKy8qCisgKiBUaGlzIGlzIGEgc2ltcGxpZmllZCB2ZXJzaW9uIG9mIHRo ZSBHZXRNdWx0aVhhY3RJZE1lbWJlcnMoKSBzZXJ2ZXIgZnVuY3Rpb24uCisgKgorICogLSBPbmx5 IHJldHVybiB0aGUgdXBkYXRpbmcgbWVtYmVyLCBpZiBhbnkuIFVwZ3JhZGUgb25seSBjYXJlcyBh Ym91dCB0aGUKKyAqICAgdXBkYXRlcnMuIElmIHRoZXJlIGlzIG5vIHVwZGF0aW5nIG1lbWJlciwg cmV0dXJuIHRoZSBmaXJzdCBsb2NraW5nLW9ubHkKKyAqICAgbWVtYmVyLiBXZSBkb24ndCBoYXZl IGFueSB3YXkgdG8gcmVwcmVzZW50ICJubyBtZW1iZXJzIiwgYnV0IHdlIGFsc28gZG9uJ3QKKyAq ICAgbmVlZCB0byBwcmVzZXJ2ZSBhbGwgdGhlIGxvY2tpbmcgbWVtYmVycy4KKyAqCisgKiAtIFdl IGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgbG9ja2luZyBhbmQgc29tZSBjb3JuZXIgY2FzZXMg YmVjYXVzZSB0aGVyZSdzCisgKiAgIG5vIGNvbmN1cnJlbnQgYWN0aXZpdHkuCisgKi8KK3ZvaWQK K0dldE9sZE11bHRpWGFjdElkU2luZ2xlTWVtYmVyKE9sZE11bHRpWGFjdFJlYWRlciAqc3RhdGUs IE11bHRpWGFjdElkIG11bHRpLAorCQkJCQkJCSAgVHJhbnNhY3Rpb25JZCAqcmVzdWx0LCBNdWx0 aVhhY3RTdGF0dXMgKnN0YXR1cykKK3sKKwlNdWx0aVhhY3RJZAkJbmV4dE1YYWN0LAorCQkJCQlu ZXh0T2Zmc2V0LAorCQkJCQl0bXBNWGFjdDsKKwlpbnQ2NAkJCXBhZ2VubywKKwkJCQkJcHJldl9w YWdlbm87CisJaW50CQkJCWVudHJ5bm8sCisJCQkJCWxlbmd0aDsKKwljaGFyCQkgICAqYnVmOwor CU9sZE11bHRpWGFjdE9mZnNldCAqb2ZmcHRyLAorCQkJCQkJb2Zmc2V0OworCVRyYW5zYWN0aW9u SWQJcmVzdWx0X3hpZCA9IEludmFsaWRUcmFuc2FjdGlvbklkOworCWJvb2wJCQlyZXN1bHRfaXN1 cGRhdGUgPSBmYWxzZTsKKworCW5leHRNWGFjdCA9IHN0YXRlLT5uZXh0TVhhY3Q7CisJbmV4dE9m ZnNldCA9IHN0YXRlLT5uZXh0T2Zmc2V0OworCisJLyoKKwkgKiBTZWUgR2V0TXVsdGlYYWN0SWRN ZW1iZXJzIGluIG11bHRpeGFjdC5jCisJICoKKwkgKiBGaW5kIG91dCB0aGUgb2Zmc2V0IGF0IHdo aWNoIHdlIG5lZWQgdG8gc3RhcnQgcmVhZGluZyBNdWx0aVhhY3RNZW1iZXJzCisJICogYW5kIHRo ZSBudW1iZXIgb2YgbWVtYmVycyBpbiB0aGUgbXVsdGl4YWN0LiAgV2UgZGV0ZXJtaW5lIHRoZSBs YXR0ZXIgYXMKKwkgKiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoaXMgbXVsdGl4YWN0J3Mgc3Rh cnRpbmcgb2Zmc2V0IGFuZCB0aGUgbmV4dAorCSAqIG9uZSdzLiAgSG93ZXZlciwgdGhlcmUgYXJl IHNvbWUgY29ybmVyIGNhc2VzIHRvIHdvcnJ5IGFib3V0OgorCSAqCisJICogMS4gVGhpcyBtdWx0 aXhhY3QgbWF5IGJlIHRoZSBsYXRlc3Qgb25lIGNyZWF0ZWQsIGluIHdoaWNoIGNhc2UgdGhlcmUg aXMKKwkgKiBubyBuZXh0IG9uZSB0byBsb29rIGF0LiAgSW4gdGhpcyBjYXNlIHRoZSBuZXh0T2Zm c2V0IHZhbHVlIHdlIGp1c3QKKwkgKiBzYXZlZCBpcyB0aGUgY29ycmVjdCBlbmRwb2ludC4KKwkg KgorCSAqIDIuIFRoZSBuZXh0IG11bHRpeGFjdCBtYXkgc3RpbGwgYmUgaW4gcHJvY2VzcyBvZiBi ZWluZyBmaWxsZWQgaW4uLi4KKwkgKiBUaGlzIGNhbm5vdCBoYXBwZW4gZHVyaW5nIHVwZ3JhZGUu CisJICoKKwkgKiAzLiBCZWNhdXNlIEdldE5ld011bHRpWGFjdElkIGluY3JlbWVudHMgb2Zmc2V0 IHplcm8gdG8gb2Zmc2V0IG9uZSB0bworCSAqIGhhbmRsZSBjYXNlICMyLCB0aGVyZSBpcyBhbiBh bWJpZ3VpdHkgbmVhciB0aGUgcG9pbnQgb2Ygb2Zmc2V0CisJICogd3JhcGFyb3VuZC4gIElmIHdl IHNlZSBuZXh0IG11bHRpeGFjdCdzIG9mZnNldCBpcyBvbmUsIGlzIHRoYXQgb3VyCisJICogbXVs dGl4YWN0J3MgYWN0dWFsIGVuZHBvaW50LCBvciBkaWQgaXQgZW5kIGF0IHplcm8gd2l0aCBhIHN1 YnNlcXVlbnQKKwkgKiBpbmNyZW1lbnQ/ICBXZSBoYW5kbGUgdGhpcyB1c2luZyB0aGUga25vd2xl ZGdlIHRoYXQgaWYgdGhlIHplcm8ndGgKKwkgKiBtZW1iZXIgc2xvdCB3YXNuJ3QgZmlsbGVkLCBp dCdsbCBjb250YWluIHplcm8sIGFuZCB6ZXJvIGlzbid0IGEgdmFsaWQKKwkgKiB0cmFuc2FjdGlv biBJRCBzbyBpdCBjYW4ndCBiZSBhIG11bHRpeGFjdCBtZW1iZXIuICBUaGVyZWZvcmUsIGlmIHdl CisJICogcmVhZCBhIHplcm8gZnJvbSB0aGUgbWVtYmVycyBhcnJheSwganVzdCBpZ25vcmUgaXQu CisJICovCisKKwlwYWdlbm8gPSBNdWx0aVhhY3RJZFRvT2Zmc2V0UGFnZShtdWx0aSk7CisJZW50 cnlubyA9IE11bHRpWGFjdElkVG9PZmZzZXRFbnRyeShtdWx0aSk7CisKKwlidWYgPSBTbHJ1UmVh ZFN3aXRjaFBhZ2Uoc3RhdGUtPm9mZnNldCwgcGFnZW5vKTsKKwlvZmZwdHIgPSAoT2xkTXVsdGlY YWN0T2Zmc2V0ICopIGJ1ZjsKKwlvZmZwdHIgKz0gZW50cnlubzsKKwlvZmZzZXQgPSAqb2ZmcHRy OworCisJQXNzZXJ0KG9mZnNldCAhPSAwKTsKKworCS8qCisJICogVXNlIHRoZSBzYW1lIGluY3Jl bWVudCBydWxlIGFzIEdldE5ld011bHRpWGFjdElkKCksIHRoYXQgaXMsIGRvbid0CisJICogaGFu ZGxlIHdyYXBhcm91bmQgZXhwbGljaXRseSB1bnRpbCBuZWVkZWQuCisJICovCisJdG1wTVhhY3Qg PSBtdWx0aSArIDE7CisKKwlpZiAobmV4dE1YYWN0ID09IHRtcE1YYWN0KQorCXsKKwkJLyogQ29y bmVyIGNhc2UgMTogdGhlcmUgaXMgbm8gbmV4dCBtdWx0aXhhY3QgKi8KKwkJbGVuZ3RoID0gbmV4 dE9mZnNldCAtIG9mZnNldDsKKwl9CisJZWxzZQorCXsKKwkJT2xkTXVsdGlYYWN0T2Zmc2V0IG5l eHRNWE9mZnNldDsKKworCQkvKiBoYW5kbGUgd3JhcGFyb3VuZCBpZiBuZWVkZWQgKi8KKwkJaWYg KHRtcE1YYWN0IDwgRmlyc3RNdWx0aVhhY3RJZCkKKwkJCXRtcE1YYWN0ID0gRmlyc3RNdWx0aVhh Y3RJZDsKKworCQlwcmV2X3BhZ2VubyA9IHBhZ2VubzsKKworCQlwYWdlbm8gPSBNdWx0aVhhY3RJ ZFRvT2Zmc2V0UGFnZSh0bXBNWGFjdCk7CisJCWVudHJ5bm8gPSBNdWx0aVhhY3RJZFRvT2Zmc2V0 RW50cnkodG1wTVhhY3QpOworCisJCWlmIChwYWdlbm8gIT0gcHJldl9wYWdlbm8pCisJCQlidWYg PSBTbHJ1UmVhZFN3aXRjaFBhZ2Uoc3RhdGUtPm9mZnNldCwgcGFnZW5vKTsKKworCQlvZmZwdHIg PSAoT2xkTXVsdGlYYWN0T2Zmc2V0ICopIGJ1ZjsKKwkJb2ZmcHRyICs9IGVudHJ5bm87CisJCW5l eHRNWE9mZnNldCA9ICpvZmZwdHI7CisKKwkJLyoKKwkJICogQ29ybmVyIGNhc2UgMjogbmV4dCBt dWx0aXhhY3QgaXMgc3RpbGwgYmVpbmcgZmlsbGVkIGluLCB0aGlzIG11c3QKKwkJICogbm90IGhh cHBlbiBkdXJpbmcgdXBncmFkZS4KKwkJICovCisJCUFzc2VydChuZXh0TVhPZmZzZXQgIT0gMCk7 CisKKwkJbGVuZ3RoID0gbmV4dE1YT2Zmc2V0IC0gb2Zmc2V0OworCX0KKworCXByZXZfcGFnZW5v ID0gLTE7CisJZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKywgb2Zmc2V0KyspCisJewor CQlUcmFuc2FjdGlvbklkICp4YWN0cHRyOworCQl1aW50MzIJICAgKmZsYWdzcHRyOworCQlpbnQJ CQlmbGFnc29mZjsKKwkJaW50CQkJYnNoaWZ0OworCQlpbnQJCQltZW1iZXJvZmY7CisJCU11bHRp WGFjdFN0YXR1cyBzdDsKKworCQlwYWdlbm8gPSBNWE9mZnNldFRvTWVtYmVyUGFnZShvZmZzZXQp OworCQltZW1iZXJvZmYgPSBNWE9mZnNldFRvTWVtYmVyT2Zmc2V0KG9mZnNldCk7CisKKwkJaWYg KHBhZ2VubyAhPSBwcmV2X3BhZ2VubykKKwkJeworCQkJYnVmID0gU2xydVJlYWRTd2l0Y2hQYWdl KHN0YXRlLT5tZW1iZXJzLCBwYWdlbm8pOworCQkJcHJldl9wYWdlbm8gPSBwYWdlbm87CisJCX0K KworCQl4YWN0cHRyID0gKFRyYW5zYWN0aW9uSWQgKikgKGJ1ZiArIG1lbWJlcm9mZik7CisJCWlm ICghVHJhbnNhY3Rpb25JZElzVmFsaWQoKnhhY3RwdHIpKQorCQl7CisJCQkvKiBDb3JuZXIgY2Fz ZSAzOiB3ZSBtdXN0IGJlIGxvb2tpbmcgYXQgdW51c2VkIHNsb3QgemVybyAqLworCQkJQXNzZXJ0 KG9mZnNldCA9PSAwKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJZmxhZ3NvZmYgPSBNWE9mZnNl dFRvRmxhZ3NPZmZzZXQob2Zmc2V0KTsKKwkJYnNoaWZ0ID0gTVhPZmZzZXRUb0ZsYWdzQml0U2hp ZnQob2Zmc2V0KTsKKwkJZmxhZ3NwdHIgPSAodWludDMyICopIChidWYgKyBmbGFnc29mZik7CisK KwkJc3QgPSAoKmZsYWdzcHRyID4+IGJzaGlmdCkgJiBNWEFDVF9NRU1CRVJfWEFDVF9CSVRNQVNL OworCisJCS8qIFZlcmlmeSB0aGF0IHRoZXJlIGlzIGEgc2luZ2xlIHVwZGF0ZSBYaWQgYW1vbmcg dGhlIGdpdmVuIG1lbWJlcnMuICovCisJCWlmIChJU1VQREFURV9mcm9tX214c3RhdHVzKHN0KSkK KwkJeworCQkJaWYgKHJlc3VsdF9pc3VwZGF0ZSkKKwkJCQlwZ19mYXRhbCgibXVsdGl4YWN0ICV1 IGhhcyBtb3JlIHRoYW4gb25lIHVwZGF0aW5nIG1lbWJlciIsCisJCQkJCQkgbXVsdGkpOworCQkJ cmVzdWx0X3hpZCA9ICp4YWN0cHRyOworCQkJcmVzdWx0X2lzdXBkYXRlID0gdHJ1ZTsKKwkJfQor CQllbHNlIGlmICghVHJhbnNhY3Rpb25JZElzVmFsaWQocmVzdWx0X3hpZCkpCisJCQlyZXN1bHRf eGlkID0gKnhhY3RwdHI7CisJfQorCisJLyogQSBtdWx0aXhpZCB3aXRoIHplcm8gbWVtYmVycyBz aG91bGQgbm90IGhhcHBlbiAqLworCUFzc2VydChUcmFuc2FjdGlvbklkSXNWYWxpZChyZXN1bHRf eGlkKSk7CisKKwkqcmVzdWx0ID0gcmVzdWx0X3hpZDsKKwkqc3RhdHVzID0gcmVzdWx0X2lzdXBk YXRlID8gTXVsdGlYYWN0U3RhdHVzVXBkYXRlIDoKKwkJCQkJCQkJTXVsdGlYYWN0U3RhdHVzRm9y S2V5U2hhcmU7Cit9CisKKy8qCisgKiBGcmVlcyB0aGUgbWFsbG9jZWQgcmVhZGVyLgorICovCit2 b2lkCitGcmVlT2xkTXVsdGlYYWN0UmVhZGVyKE9sZE11bHRpWGFjdFJlYWRlciAqc3RhdGUpCit7 CisJRnJlZVNscnVSZWFkKHN0YXRlLT5vZmZzZXQpOworCUZyZWVTbHJ1UmVhZChzdGF0ZS0+bWVt YmVycyk7CisKKwlwZnJlZShzdGF0ZSk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3VwZ3Jh ZGUvbXVsdGl4YWN0X29sZC5oIGIvc3JjL2Jpbi9wZ191cGdyYWRlL211bHRpeGFjdF9vbGQuaApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOGQ0NjU5YmE2YTAKLS0tIC9k ZXYvbnVsbAorKysgYi9zcmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4YWN0X29sZC5oCkBAIC0wLDAg KzEsMzEgQEAKKy8qCisgKiBtdWx0aXhhY3Rfb2xkLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIw MjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBzcmMvYmluL3BnX3Vw Z3JhZGUvbXVsdGl4YWN0X29sZC5oCisgKi8KKworI2luY2x1ZGUgInBvc3RncmVzX2ZlLmgiCisK KyNpbmNsdWRlICJhY2Nlc3MvbXVsdGl4YWN0LmgiCisjaW5jbHVkZSAic2xydV9pby5oIgorCit0 eXBlZGVmIHVpbnQzMiBPbGRNdWx0aVhhY3RPZmZzZXQ7CisKK3R5cGVkZWYgc3RydWN0IE9sZE11 bHRpWGFjdFJlYWRlcgoreworCU11bHRpWGFjdElkCQkJbmV4dE1YYWN0OworCU9sZE11bHRpWGFj dE9mZnNldAluZXh0T2Zmc2V0OworCisJU2xydVNlZ1N0YXRlCSAgICpvZmZzZXQ7CisJU2xydVNl Z1N0YXRlCSAgICptZW1iZXJzOworfSBPbGRNdWx0aVhhY3RSZWFkZXI7CisKK2V4dGVybiBPbGRN dWx0aVhhY3RSZWFkZXIgKkFsbG9jT2xkTXVsdGlYYWN0UmVhZChjaGFyICpwZ2RhdGEsCisJCQkJ CQkJCQkJCQkgTXVsdGlYYWN0SWQgbmV4dE11bHRpLAorCQkJCQkJCQkJCQkJIE9sZE11bHRpWGFj dE9mZnNldCBuZXh0T2Zmc2V0KTsKK2V4dGVybiB2b2lkIEdldE9sZE11bHRpWGFjdElkU2luZ2xl TWVtYmVyKE9sZE11bHRpWGFjdFJlYWRlciAqc3RhdGUsCisJCQkJCQkJCQkJICBNdWx0aVhhY3RJ ZCBtdWx0aSwKKwkJCQkJCQkJCQkgIFRyYW5zYWN0aW9uSWQgKnJlc3VsdCwKKwkJCQkJCQkJCQkg IE11bHRpWGFjdFN0YXR1cyAqc3RhdHVzKTsKK2V4dGVybiB2b2lkIEZyZWVPbGRNdWx0aVhhY3RS ZWFkZXIoT2xkTXVsdGlYYWN0UmVhZGVyICpyZWFkZXIpOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9w Z191cGdyYWRlL3BnX3VwZ3JhZGUuYyBiL3NyYy9iaW4vcGdfdXBncmFkZS9wZ191cGdyYWRlLmMK aW5kZXggNDkwZTk4ZmEyNmYuLjU0MzJjMDNhMmIwIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX3Vw Z3JhZGUvcGdfdXBncmFkZS5jCisrKyBiL3NyYy9iaW4vcGdfdXBncmFkZS9wZ191cGdyYWRlLmMK QEAgLTQ5LDYgKzQ5LDggQEAKICNpbmNsdWRlICJjb21tb24vcmVzdHJpY3RlZF90b2tlbi5oIgog I2luY2x1ZGUgImZlX3V0aWxzL3N0cmluZ191dGlscy5oIgogI2luY2x1ZGUgInBnX3VwZ3JhZGUu aCIKKyNpbmNsdWRlICJtdWx0aXhhY3Rfb2xkLmgiCisjaW5jbHVkZSAibXVsdGl4YWN0X25ldy5o IgogCiAvKgogICogTWF4aW11bSBudW1iZXIgb2YgcGdfcmVzdG9yZSBhY3Rpb25zIChUT0MgZW50 cmllcykgdG8gcHJvY2VzcyB3aXRoaW4gb25lCkBAIC03NjksNiArNzcxLDgyIEBAIGNvcHlfc3Vi ZGlyX2ZpbGVzKGNvbnN0IGNoYXIgKm9sZF9zdWJkaXIsIGNvbnN0IGNoYXIgKm5ld19zdWJkaXIp CiAJY2hlY2tfb2soKTsKIH0KIAorLyoKKyAqIENvbnZlcnQgcGdfbXVsdGl4YWN0L29mZnNldCBh bmQgL21lbWJlcnMgdG8gbmV3IGZvcm1hdCB3aXRoIDY0LWJpdCBvZmZzZXRzLgorICovCitzdGF0 aWMgdm9pZAorY29udmVydF9tdWx0aXhhY3RzKE11bHRpWGFjdElkICpuZXdfbnh0bXVsdGksIE11 bHRpWGFjdE9mZnNldCAqbmV3X254dG14b2ZmKQoreworCU11bHRpWGFjdElkCQkJb2xkZXN0X211 bHRpLAorCQkJCQkJbmV4dF9tdWx0aTsKKwlPbGRNdWx0aVhhY3RSZWFkZXIgKm9sZF9yZWFkZXI7 CisJTXVsdGlYYWN0V3JpdGVyCSAgICpuZXdfd3JpdGVyOworCisJb2xkX3JlYWRlciA9IEFsbG9j T2xkTXVsdGlYYWN0UmVhZChvbGRfY2x1c3Rlci5wZ2RhdGEsCisJCQkJCQkJCQkgICBvbGRfY2x1 c3Rlci5jb250cm9sZGF0YS5jaGtwbnRfbnh0bXVsdGksCisJCQkJCQkJCQkgICBvbGRfY2x1c3Rl ci5jb250cm9sZGF0YS5jaGtwbnRfbnh0bXhvZmYpOworCW5ld193cml0ZXIgPSBBbGxvY011bHRp WGFjdFdyaXRlKG5ld19jbHVzdGVyLnBnZGF0YSwKKwkJCQkJCQkJCSBvbGRfY2x1c3Rlci5jb250 cm9sZGF0YS5jaGtwbnRfb2xkc3RNdWx0aSwKKwkJCQkJCQkJCSAxIC8qIHNlZSBiZWxvdyAqLyk7 CisKKwlvbGRlc3RfbXVsdGkgPSBvbGRfY2x1c3Rlci5jb250cm9sZGF0YS5jaGtwbnRfb2xkc3RN dWx0aTsKKwluZXh0X211bHRpID0gb2xkX2NsdXN0ZXIuY29udHJvbGRhdGEuY2hrcG50X254dG11 bHRpOworCisJLyogaGFuZGxlIHdyYXBhcm91bmQgKi8KKwlpZiAobmV4dF9tdWx0aSA8IEZpcnN0 TXVsdGlYYWN0SWQpCisJCW5leHRfbXVsdGkgPSBGaXJzdE11bHRpWGFjdElkOworCisJLyoKKwkg KiBSZWFkIG11bHRpeGlkcyBmcm9tIG9sZCBmaWxlcyBvbmUgYnkgb25lLCBhbmQgd3JpdGUgdGhl bSBiYWNrIGluIHRoZSBuZXcKKwkgKiBmb3JtYXQuCisJICoKKwkgKiBUaGUgbG9ja2luZy1vbmx5 IFhJRHMgdGhhdCBtYXkgYmUgcGFydCBvZiBtdWx0aS14aWRzIGRvbid0IG1hdHRlciBhZnRlcgor CSAqIHVwZ3JhZGUsIGFzIHRoZXJlIGNhbiBiZSBubyB0cmFuc2FjdGlvbnMgcnVubmluZyBhY3Jv c3MgdXBncmFkZS4gIFNvIGFzCisJICogYSBsaXR0bGUgb3B0aW1pemF0aW9uLCB3ZSBvbmx5IHJl YWQgb25lIG1lbWJlciBmcm9tIGVhY2ggbXVsdGl4aWQ6IHRoZQorCSAqIG9uZSB1cGRhdGluZyBv bmUsIG9yIGlmIHRoZXJlIHdhcyBubyB1cGRhdGUsIGFyYml0cmFyaWx5IHRoZSBmaXJzdAorCSAq IGxvY2tpbmcgeGlkLgorCSAqLworCWZvciAoTXVsdGlYYWN0SWQgbXVsdGkgPSBvbGRlc3RfbXVs dGk7IG11bHRpICE9IG5leHRfbXVsdGk7KQorCXsKKwkJVHJhbnNhY3Rpb25JZAkJeGlkOworCQlN dWx0aVhhY3RTdGF0dXMJCXN0YXR1czsKKwkJTXVsdGlYYWN0TWVtYmVyCQltZW1iZXI7CisJCU11 bHRpWGFjdElkCQkJbmV3X211bHRpIFBHX1VTRURfRk9SX0FTU0VSVFNfT05MWTsKKwkJTXVsdGlY YWN0T2Zmc2V0CQlvZmZzZXQ7CisKKwkJLyogUmVhZCB0aGUgb2xkIG11bHRpeGlkICovCisJCUdl dE9sZE11bHRpWGFjdElkU2luZ2xlTWVtYmVyKG9sZF9yZWFkZXIsIG11bHRpLCAmeGlkLCAmc3Rh dHVzKTsKKworCQkvKiBXcml0ZSBpdCBvdXQgaW4gbmV3IGZvcm1hdCAqLworCQltZW1iZXIueGlk ID0geGlkOworCQltZW1iZXIuc3RhdHVzID0gc3RhdHVzOworCQluZXdfbXVsdGkgPSBHZXROZXdN dWx0aVhhY3RJZChuZXdfd3JpdGVyLCAxLCAmb2Zmc2V0KTsKKworCQlBc3NlcnQobmV3X211bHRp ID09IG11bHRpKTsKKworCQlSZWNvcmROZXdNdWx0aVhhY3QobmV3X3dyaXRlciwgb2Zmc2V0LCBt dWx0aSwgMSwgJm1lbWJlcik7CisKKwkJbXVsdGkrKzsKKwkJLyogaGFuZGxlIHdyYXBhcm91bmQg Ki8KKwkJaWYgKG11bHRpIDwgRmlyc3RNdWx0aVhhY3RJZCkKKwkJCW11bHRpID0gRmlyc3RNdWx0 aVhhY3RJZDsKKwl9CisKKwkvKgorCSAqIFVwZGF0ZSB0aGUgbmV4dE1YYWN0L09mZnNldCB2YWx1 ZXMgaW4gdGhlIGNvbnRyb2wgZmlsZSB0byBtYXRjaCB3aGF0IHdlCisJICogd3JvdGUuICBUaGUg bmV4dE1YYWN0IHNob3VsZCBiZSB1bmNoYW5nZWQsIGJ1dCBiZWNhdXNlIHdlIGlnbm9yZWQgdGhl CisJICogbG9ja2luZyBYSURzIG1lbWJlcnMsIHRoZSBuZXh0T2Zmc2V0IHdpbGwgYmUgZGlmZmVy ZW50LgorCSAqLworCUFzc2VydChuZXdfd3JpdGVyLT5uZXh0TVhhY3QgPT0gbmV4dF9tdWx0aSk7 CisKKwkqbmV3X254dG11bHRpID0gbmV4dF9tdWx0aTsKKwkqbmV3X254dG14b2ZmID0gbmV3X3dy aXRlci0+bmV4dE9mZnNldDsKKworCS8qIFJlbGVhc2UgcmVzb3VyY2VzICovCisJRnJlZU11bHRp WGFjdFdyaXRlKG5ld193cml0ZXIpOworCUZyZWVPbGRNdWx0aVhhY3RSZWFkZXIob2xkX3JlYWRl cik7Cit9CisKIHN0YXRpYyB2b2lkCiBjb3B5X3hhY3RfeGxvZ194aWQodm9pZCkKIHsKQEAgLTgx Niw4ICs4OTQsMjggQEAgY29weV94YWN0X3hsb2dfeGlkKHZvaWQpCiAJaWYgKG9sZF9jbHVzdGVy LmNvbnRyb2xkYXRhLmNhdF92ZXIgPj0gTVVMVElYQUNUX0ZPUk1BVENIQU5HRV9DQVRfVkVSICYm CiAJCW5ld19jbHVzdGVyLmNvbnRyb2xkYXRhLmNhdF92ZXIgPj0gTVVMVElYQUNUX0ZPUk1BVENI QU5HRV9DQVRfVkVSKQogCXsKLQkJY29weV9zdWJkaXJfZmlsZXMoInBnX211bHRpeGFjdC9vZmZz ZXRzIiwgInBnX211bHRpeGFjdC9vZmZzZXRzIik7Ci0JCWNvcHlfc3ViZGlyX2ZpbGVzKCJwZ19t dWx0aXhhY3QvbWVtYmVycyIsICJwZ19tdWx0aXhhY3QvbWVtYmVycyIpOworCQlNdWx0aVhhY3RJ ZAkJbmV3X254dG11bHRpID0gb2xkX2NsdXN0ZXIuY29udHJvbGRhdGEuY2hrcG50X254dG11bHRp OworCQlNdWx0aVhhY3RPZmZzZXQgbmV3X254dG14b2ZmID0gb2xkX2NsdXN0ZXIuY29udHJvbGRh dGEuY2hrcG50X254dG14b2ZmOworCisJCS8qCisJCSAqIElmIHRoZSBvbGQgc2VydmVyIGlzIGJl Zm9yZSB0aGUgTVVMVElYQUNUT0ZGU0VUX0ZPUk1BVENIQU5HRV9DQVRfVkVSCisJCSAqIGl0IG11 c3QgaGF2ZSAzMi1iaXQgbXVsdGl4aWQgb2Zmc2V0cywgdGh1cyBpdCBzaG91bGQgYmUgY29udmVy dGVkLgorCQkgKi8KKwkJaWYgKG9sZF9jbHVzdGVyLmNvbnRyb2xkYXRhLmNhdF92ZXIgPCBNVUxU SVhBQ1RPRkZTRVRfRk9STUFUQ0hBTkdFX0NBVF9WRVIgJiYKKwkJCW5ld19jbHVzdGVyLmNvbnRy b2xkYXRhLmNhdF92ZXIgPj0gTVVMVElYQUNUT0ZGU0VUX0ZPUk1BVENIQU5HRV9DQVRfVkVSKQor CQl7CisJCQlyZW1vdmVfbmV3X3N1YmRpcigicGdfbXVsdGl4YWN0L21lbWJlcnMiLCBmYWxzZSk7 CisJCQlyZW1vdmVfbmV3X3N1YmRpcigicGdfbXVsdGl4YWN0L29mZnNldHMiLCBmYWxzZSk7CisK KwkJCXByZXBfc3RhdHVzKCJDb252ZXJ0aW5nIHBnX211bHRpeGFjdC9vZmZzZXRzIHRvIDY0LWJp dCIpOworCQkJY29udmVydF9tdWx0aXhhY3RzKCZuZXdfbnh0bXVsdGksICZuZXdfbnh0bXhvZmYp OworCQkJY2hlY2tfb2soKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCWNvcHlfc3ViZGlyX2ZpbGVz KCJwZ19tdWx0aXhhY3Qvb2Zmc2V0cyIsICJwZ19tdWx0aXhhY3Qvb2Zmc2V0cyIpOworCQkJY29w eV9zdWJkaXJfZmlsZXMoInBnX211bHRpeGFjdC9tZW1iZXJzIiwgInBnX211bHRpeGFjdC9tZW1i ZXJzIik7CisJCX0KIAogCQlwcmVwX3N0YXR1cygiU2V0dGluZyBuZXh0IG11bHRpeGFjdCBJRCBh bmQgb2Zmc2V0IGZvciBuZXcgY2x1c3RlciIpOwogCkBAIC04MjYsMTAgKzkyNCw4IEBAIGNvcHlf eGFjdF94bG9nX3hpZCh2b2lkKQogCQkgKiBjb3VudGVycyBoZXJlIGFuZCB0aGUgb2xkZXN0IG11 bHRpIHByZXNlbnQgb24gc3lzdGVtLgogCQkgKi8KIAkJZXhlY19wcm9nKFVUSUxJVFlfTE9HX0ZJ TEUsIE5VTEwsIHRydWUsIHRydWUsCi0JCQkJICAiXCIlcy9wZ19yZXNldHdhbFwiIC1PICV1IC1t ICV1LCV1IFwiJXNcIiIsCi0JCQkJICBuZXdfY2x1c3Rlci5iaW5kaXIsCi0JCQkJICBvbGRfY2x1 c3Rlci5jb250cm9sZGF0YS5jaGtwbnRfbnh0bXhvZmYsCi0JCQkJICBvbGRfY2x1c3Rlci5jb250 cm9sZGF0YS5jaGtwbnRfbnh0bXVsdGksCisJCQkJICAiXCIlcy9wZ19yZXNldHdhbFwiIC1PICUi IFBSSXU2NCAiIC1tICV1LCV1IFwiJXNcIiIsCisJCQkJICBuZXdfY2x1c3Rlci5iaW5kaXIsIG5l d19ueHRteG9mZiwgbmV3X254dG11bHRpLAogCQkJCSAgb2xkX2NsdXN0ZXIuY29udHJvbGRhdGEu Y2hrcG50X29sZHN0TXVsdGksCiAJCQkJICBuZXdfY2x1c3Rlci5wZ2RhdGEpOwogCQljaGVja19v aygpOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ191cGdyYWRlL3BnX3VwZ3JhZGUuaCBiL3NyYy9i aW4vcGdfdXBncmFkZS9wZ191cGdyYWRlLmgKaW5kZXggZTg2MzM2ZjRiZTkuLjEyN2IyY2IwMGZh IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX3VwZ3JhZGUvcGdfdXBncmFkZS5oCisrKyBiL3NyYy9i aW4vcGdfdXBncmFkZS9wZ191cGdyYWRlLmgKQEAgLTExNCw2ICsxMTQsMTEgQEAgZXh0ZXJuIGNo YXIgKm91dHB1dF9maWxlc1tdOwogICovCiAjZGVmaW5lIE1VTFRJWEFDVF9GT1JNQVRDSEFOR0Vf Q0FUX1ZFUiAyMDEzMDEyMzEKIAorLyoKKyAqIFN3aWN0aCBmcm9tIDMyLWJpdCB0byA2NC1iaXQg Zm9yIG11bHRpeGlkIG9mZnNldHMuCisgKi8KKyNkZWZpbmUgTVVMVElYQUNUT0ZGU0VUX0ZPUk1B VENIQU5HRV9DQVRfVkVSIDk5OTk5OTk5OQorCiAvKgogICogbGFyZ2Ugb2JqZWN0IGNodW5rIHNp emUgYWRkZWQgdG8gcGdfY29udHJvbGRhdGEsCiAgKiBjb21taXQgNWY5M2MzNzgwNWU3NDg1NDg4 NDgwOTE2YjQ1ODVlMDk4ZDNjYzg4MwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ191cGdyYWRlL3Ns cnVfaW8uYyBiL3NyYy9iaW4vcGdfdXBncmFkZS9zbHJ1X2lvLmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAuLjRlODIzMTk5MzAzCi0tLSAvZGV2L251bGwKKysrIGIvc3Jj L2Jpbi9wZ191cGdyYWRlL3NscnVfaW8uYwpAQCAtMCwwICsxLDI0MCBAQAorLyoKKyAqIHNscnVf aW8uYworICoKKyAqIFJvdXRpbmVzIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIFNMUlUgZmlsZXMg ZHVyaW5nIHVwZ3JhZGUuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDI1LCBQb3N0Z3JlU1FMIEds b2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogc3JjL2Jpbi9wZ191cGdyYWRlL3NscnVfaW8uYwor ICovCisKKyNpbmNsdWRlICJwb3N0Z3Jlc19mZS5oIgorCisjaW5jbHVkZSA8ZmNudGwuaD4KKwor I2luY2x1ZGUgInBnX3VwZ3JhZGUuaCIKKyNpbmNsdWRlICJzbHJ1X2lvLmgiCisKKyNpbmNsdWRl ICJjb21tb24vZmVfbWVtdXRpbHMuaCIKKyNpbmNsdWRlICJjb21tb24vZmlsZV9wZXJtLmgiCisj aW5jbHVkZSAiY29tbW9uL2ZpbGVfdXRpbHMuaCIKKyNpbmNsdWRlICJwb3J0L3BnX2lvdmVjLmgi CisKKy8qCisgKiBTdGF0ZSBmb3IgcmVhZGluZyBvciB3cml0aW5nIGFuIFNMUlUsIHdpdGggYSBv bmUgcGFnZSBidWZmZXIuCisgKi8KK3R5cGVkZWYgc3RydWN0IFNscnVTZWdTdGF0ZQoreworCWJv b2wJCXdyaXRpbmc7CisJYm9vbAkJbG9uZ19zZWdtZW50X25hbWVzOworCisJY2hhcgkgICAqZGly OworCWNoYXIJICAgKmZuOworCWludAkJCWZkOworCWludDY0CQlzZWdubzsKKwl1aW50NjQJCXBh Z2VubzsKKworCVBHQWxpZ25lZEJsb2NrIGJ1ZjsKK30gU2xydVNlZ1N0YXRlOworCitzdGF0aWMg aW5saW5lIFNscnVTZWdTdGF0ZSAqCitBbGxvY1NscnVTZWdTdGF0ZShjaGFyICpkaXIpCit7CisJ U2xydVNlZ1N0YXRlICpzdGF0ZSA9IHBnX21hbGxvYyhzaXplb2YoKnN0YXRlKSk7CisKKwlzdGF0 ZS0+c2Vnbm8gPSAtMTsKKwlzdGF0ZS0+cGFnZW5vID0gMDsKKwlzdGF0ZS0+ZGlyID0gcHN0cmR1 cChkaXIpOworCXN0YXRlLT5mZCA9IC0xOworCXN0YXRlLT5mbiA9IE5VTEw7CisKKwlyZXR1cm4g c3RhdGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorU2xydUZsdXNoKFNscnVTZWdTdGF0ZSAq c3RhdGUpCit7CisJc3RydWN0IGlvdmVjCWlvdmVjID0geworCQkuaW92X2Jhc2UgPSAmc3RhdGUt PmJ1ZiwKKwkJLmlvdl9sZW4gPSBCTENLU1osCisJfTsKKwlvZmZfdAkJCW9mZnNldDsKKworCWlm IChzdGF0ZS0+c2Vnbm8gPT0gLTEpCisJCXJldHVybjsKKworCW9mZnNldCA9IChzdGF0ZS0+cGFn ZW5vICUgU0xSVV9QQUdFU19QRVJfU0VHTUVOVCkgKiBCTENLU1o7CisKKwlpZiAocGdfcHdyaXRl dl93aXRoX3JldHJ5KHN0YXRlLT5mZCwgJmlvdmVjLCAxLCBvZmZzZXQpIDwgMCkKKwkJcGdfZmF0 YWwoImNvdWxkIG5vdCB3cml0ZSBmaWxlIFwiJXNcIjogJW0iLCBzdGF0ZS0+Zm4pOworfQorCisv KgorICogQ3JlYXRlIHNscnUgcmVhZGVyIGZvciBkaXIuCisgKgorICogUmV0dXJucyB0aGUgbWFs bG9jZWQgbWVtb3J5IHVzZWQgYnkgdGhlIGFsbCBvdGhlciByZWFkIGNhbGxzIGluIHRoaXMgbW9k dWxlLgorICovCitTbHJ1U2VnU3RhdGUgKgorQWxsb2NTbHJ1UmVhZChjaGFyICpkaXIpCit7CisJ U2xydVNlZ1N0YXRlICpzdGF0ZSA9IEFsbG9jU2xydVNlZ1N0YXRlKGRpcik7CisKKwlzdGF0ZS0+ d3JpdGluZyA9IGZhbHNlOworCisJcmV0dXJuIHN0YXRlOworfQorCisvKgorICogT3BlbiBnaXZl biBwYWdlIGZvciByZWFkaW5nLgorICoKKyAqIFJlYWRpbmcgY2FuIGJlIGRvbmUgaW4gcmFuZG9t IG9yZGVyLgorICovCitjaGFyICoKK1NscnVSZWFkU3dpdGNoUGFnZShTbHJ1U2VnU3RhdGUgKnN0 YXRlLCB1aW50NjQgcGFnZW5vKQoreworCWludDY0IHNlZ25vOworCisJQXNzZXJ0KCFzdGF0ZS0+ d3JpdGluZyk7CS8qIHJlYWQgb25seSBtb2RlICovCisKKwlpZiAoc3RhdGUtPnNlZ25vICE9IC0x ICYmIHBhZ2VubyA9PSBzdGF0ZS0+cGFnZW5vKQorCQlyZXR1cm4gc3RhdGUtPmJ1Zi5kYXRhOwor CisJc2Vnbm8gPSBwYWdlbm8gLyBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UOworCWlmIChzZWdubyAh PSBzdGF0ZS0+c2Vnbm8pCisJeworCQlpZiAoc3RhdGUtPnNlZ25vICE9IC0xKQorCQl7CisJCQlj bG9zZShzdGF0ZS0+ZmQpOworCQkJc3RhdGUtPmZkID0gLTE7CisKKwkJCXBnX2ZyZWUoc3RhdGUt PmZuKTsKKwkJCXN0YXRlLT5mbiA9IE5VTEw7CisJCX0KKworCQkvKiBPcGVuIG5ldyBzZWdtZW50 ICovCisJCXN0YXRlLT5mbiA9IHBzcHJpbnRmKCIlcy8lMDRYIiwgc3RhdGUtPmRpciwgKHVuc2ln bmVkIGludCkgc2Vnbm8pOworCQlpZiAoKHN0YXRlLT5mZCA9IG9wZW4oc3RhdGUtPmZuLCBPX1JE T05MWSB8IFBHX0JJTkFSWSwgMCkpIDwgMCkKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBm aWxlIFwiJXNcIjogJW0iLCBzdGF0ZS0+Zm4pOworCX0KKworCXN0YXRlLT5zZWdubyA9IHNlZ25v OworCisJeworCQlzdHJ1Y3QgaW92ZWMJaW92ZWMgPSB7CisJCQkuaW92X2Jhc2UgPSAmc3RhdGUt PmJ1ZiwKKwkJCS5pb3ZfbGVuID0gQkxDS1NaLAorCQl9OworCQlvZmZfdAkJCW9mZnNldCA9IChw YWdlbm8gJSBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UKSAqIEJMQ0tTWjsKKworCQlpZiAocGdfcHJl YWR2KHN0YXRlLT5mZCwgJmlvdmVjLCAxLCBvZmZzZXQpIDwgMCkKKwkJCXBnX2ZhdGFsKCJjb3Vs ZCBub3QgcmVhZCBmaWxlIFwiJXNcIjogJW0iLCBzdGF0ZS0+Zm4pOworCisJCXN0YXRlLT5wYWdl bm8gPSBwYWdlbm87CisJfQorCisJcmV0dXJuIHN0YXRlLT5idWYuZGF0YTsKK30KKworLyoKKyAq IEZyZWVzIHRoZSBtYWxsb2NlZCByZWFkZXIuCisgKi8KK3ZvaWQKK0ZyZWVTbHJ1UmVhZChTbHJ1 U2VnU3RhdGUgKnN0YXRlKQoreworCUFzc2VydCghc3RhdGUtPndyaXRpbmcpOwkvKiByZWFkIG9u bHkgbW9kZSAqLworCisJY2xvc2Uoc3RhdGUtPmZkKTsKKwlwZ19mcmVlKHN0YXRlKTsKK30KKwor LyoKKyAqIE9wZW4gdGhlIGdpdmVuIHBhZ2UgZm9yIHdyaXRpbmcuCisgKgorICogTk9URTogVGhp cyB1c2VzIE9fRVhDTCB3aGVuIHN0ZXBwaW5nIHRvIGEgbmV3IHNlZ21lbnQsIHNvIHRoaXMgYXNz dW1lcyB0aGF0CisgKiBlYWNoIHNlZ21lbnQgaXMgd3JpdHRlbiBpbiBmdWxsIGJlZm9yZSBtb3Zp bmcgb24gdG8gbmV4dCBvbmUuICBUaGlzCisgKiBsaW1pdGF0aW9uIHdvdWxkIGJlIGVhc3kgdG8g bGlmdCBpZiBuZWVkZWQsIGJ1dCBpdCBmaXRzIHRoZSB1c2FnZSBwYXR0ZXJuIG9mCisgKiBjdXJy ZW50IGNhbGxlcnMuCisgKi8KK2NoYXIgKgorU2xydVdyaXRlU3dpdGNoUGFnZShTbHJ1U2VnU3Rh dGUgKnN0YXRlLCB1aW50NjQgcGFnZW5vKQoreworCWludDY0CXNlZ25vID0gcGFnZW5vIC8gU0xS VV9QQUdFU19QRVJfU0VHTUVOVDsKKwlvZmZfdAlvZmZzZXQ7CisKKwlpZiAoc3RhdGUtPnNlZ25v ICE9IC0xICYmIHBhZ2VubyA9PSBzdGF0ZS0+cGFnZW5vKQorCQlyZXR1cm4gc3RhdGUtPmJ1Zi5k YXRhOworCisJc2Vnbm8gPSBwYWdlbm8gLyBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UOworCW9mZnNl dCA9IChwYWdlbm8gJSBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UKSAqIEJMQ0tTWjsKKworCVNscnVG bHVzaChzdGF0ZSk7CisJbWVtc2V0KHN0YXRlLT5idWYuZGF0YSwgMCwgQkxDS1NaKTsKKworCWlm IChzZWdubyAhPSBzdGF0ZS0+c2Vnbm8pCisJeworCQlpZiAoc3RhdGUtPnNlZ25vICE9IC0xKQor CQl7CisJCQljbG9zZShzdGF0ZS0+ZmQpOworCQkJc3RhdGUtPmZkID0gLTE7CisKKwkJCXBnX2Zy ZWUoc3RhdGUtPmZuKTsKKwkJCXN0YXRlLT5mbiA9IE5VTEw7CisJCX0KKworCQkvKiBDcmVhdGUg dGhlIHNlZ21lbnQgKi8KKwkJaWYgKHN0YXRlLT5sb25nX3NlZ21lbnRfbmFtZXMpCisJCXsKKwkJ CUFzc2VydChzZWdubyA+PSAwICYmIHNlZ25vIDw9IElOVDY0Q09OU1QoMHhGRkZGRkZGRkZGRkZG RkYpKTsKKwkJCXN0YXRlLT5mbiA9IHBzcHJpbnRmKCIlcy8lMDE1IiBQUklYNjQsIHN0YXRlLT5k aXIsIHNlZ25vKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCUFzc2VydChzZWdubyA+PSAwICYmIHNl Z25vIDw9IElOVDY0Q09OU1QoMHhGRkZGRkYpKTsKKwkJCXN0YXRlLT5mbiA9IHBzcHJpbnRmKCIl cy8lMDRYIiwgc3RhdGUtPmRpciwgKHVuc2lnbmVkIGludCkgc2Vnbm8pOworCQl9CisKKwkJaWYg KChzdGF0ZS0+ZmQgPSBvcGVuKHN0YXRlLT5mbiwgT19SRFdSIHwgT19DUkVBVCB8IE9fRVhDTCB8 IFBHX0JJTkFSWSwKKwkJCQkJCQkgIHBnX2ZpbGVfY3JlYXRlX21vZGUpKSA8IDApCisJCXsKKwkJ CXBnX2ZhdGFsKCJjb3VsZCBub3QgY3JlYXRlIGZpbGUgXCIlc1wiOiAlbSIsIHN0YXRlLT5mbik7 CisJCX0KKworCQlzdGF0ZS0+c2Vnbm8gPSBzZWdubzsKKworCQlpZiAob2Zmc2V0ID4gMCAmJiBw Z19wd3JpdGVfemVyb3Moc3RhdGUtPmZkLCBvZmZzZXQsIDApIDwgMCkKKwkJCXBnX2ZhdGFsKCJj b3VsZCBub3Qgd3JpdGUgZmlsZSBcIiVzXCI6ICVtIiwgc3RhdGUtPmZuKTsKKwl9CisKKwlzdGF0 ZS0+cGFnZW5vID0gcGFnZW5vOworCisJcmV0dXJuIHN0YXRlLT5idWYuZGF0YTsKK30KKworLyoK KyAqIENyZWF0ZSBzbHJ1IHdyaXRlciBmb3IgZGlyLgorICoKKyAqIFJldHVybnMgdGhlIG1hbGxv Y2VkIG1lbW9yeSB1c2VkIGJ5IHRoZSBhbGwgb3RoZXIgd3JpdGUgY2FsbHMgaW4gdGhpcyBtb2R1 bGUuCisgKi8KK1NscnVTZWdTdGF0ZSAqCitBbGxvY1NscnVXcml0ZShjaGFyICpkaXIsIGJvb2wg bG9uZ19zZWdtZW50X25hbWVzKQoreworCVNscnVTZWdTdGF0ZSAqc3RhdGUgPSBBbGxvY1NscnVT ZWdTdGF0ZShkaXIpOworCisJc3RhdGUtPndyaXRpbmcgPSB0cnVlOworCXN0YXRlLT5sb25nX3Nl Z21lbnRfbmFtZXMgPSBsb25nX3NlZ21lbnRfbmFtZXM7CisKKwlyZXR1cm4gc3RhdGU7Cit9CisK Ky8qCisgKiBGcmVlcyB0aGUgbWFsbG9jZWQgd3JpdGVyLgorICovCit2b2lkCitGcmVlU2xydVdy aXRlKFNscnVTZWdTdGF0ZSAqc3RhdGUpCit7CisJQXNzZXJ0KHN0YXRlLT53cml0aW5nKTsKKwor CVNscnVGbHVzaChzdGF0ZSk7CisKKwljbG9zZShzdGF0ZS0+ZmQpOworCXBnX2ZyZWUoc3RhdGUp OworfQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ191cGdyYWRlL3NscnVfaW8uaCBiL3NyYy9iaW4v cGdfdXBncmFkZS9zbHJ1X2lvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAuLjkyMGI4YWU4MmUyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2Jpbi9wZ191cGdyYWRlL3Ns cnVfaW8uaApAQCAtMCwwICsxLDMwIEBACisvKgorICogc2xydV9pby5oCisgKgorICogQ29weXJp Z2h0IChjKSAyMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogc3Jj L2Jpbi9wZ191cGdyYWRlL3NscnVfaW8uaAorICovCisKKy8qCisgKiBTb21lIGtpbmQgb2YgaXRl cmF0b3IgYXNzb2NpYXRlZCB3aXRoIGEgcGFydGljdWxhciBTTFJVIHNlZ21lbnQuICBUaGUgaWRl YSBpcworICogdG8gc3BlY2lmeSB0aGUgc2VnbWVudCBhbmQgcGFnZSBudW1iZXIgYW5kIHRoZW4g bW92ZSB0aHJvdWdoIHRoZSBwYWdlcy4KKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIK KworLyoKKyAqIFNlZSBhY2Nlc3Mvc2xydS5oCisgKgorICogQ29weSBoZXJlLCBzaW5jZSBzbHJ1 LmggY291bGQgbm90IGJlIGluY2x1ZGVkIGluIGZlIGNvZGUuCisgKi8KKyNkZWZpbmUgU0xSVV9Q QUdFU19QRVJfU0VHTUVOVCAzMgorCit0eXBlZGVmIHN0cnVjdCBTbHJ1U2VnU3RhdGUgU2xydVNl Z1N0YXRlOworCitleHRlcm4gU2xydVNlZ1N0YXRlICpBbGxvY1NscnVSZWFkKGNoYXIgKmRpcik7 CitleHRlcm4gY2hhciAqU2xydVJlYWRTd2l0Y2hQYWdlKFNscnVTZWdTdGF0ZSAqc3RhdGUsIHVp bnQ2NCBwYWdlbm8pOworZXh0ZXJuIHZvaWQgRnJlZVNscnVSZWFkKFNscnVTZWdTdGF0ZSAqc3Rh dGUpOworCitleHRlcm4gU2xydVNlZ1N0YXRlICpBbGxvY1NscnVXcml0ZShjaGFyICpkaXIsIGJv b2wgbG9uZ19zZWdtZW50X25hbWVzKTsKK2V4dGVybiBjaGFyICpTbHJ1V3JpdGVTd2l0Y2hQYWdl KFNscnVTZWdTdGF0ZSAqc3RhdGUsIHVpbnQ2NCBwYWdlbm8pOworZXh0ZXJuIHZvaWQgRnJlZVNs cnVXcml0ZShTbHJ1U2VnU3RhdGUgKnN0YXRlKTsKLS0gCjIuNDMuMAoK --000000000000f243d206426294de--