From win-pv-devel-bounces@lists.xenproject.org Thu May 03 11:03:27 2018
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 03 May 2018 11:03:27 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1fEC1E-0002zq-0w; Thu, 03 May 2018 11:03:24 +0000
Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <srs0=ylbo=hw=citrix.com=prvs=654105155=owen.smith@srs-us1.protection.inumbo.net>)
 id 1fEC1C-0002zb-WC
 for win-pv-devel@lists.xenproject.org; Thu, 03 May 2018 11:03:23 +0000
X-Inumbo-ID: 65d9ccbe-4ec1-11e8-9728-bc764e045a96
Received: from SMTP03.CITRIX.COM (unknown [162.221.156.55])
 by us1-rack-dfw2.inumbo.com (Halon) with ESMTPS
 id 65d9ccbe-4ec1-11e8-9728-bc764e045a96;
 Thu, 03 May 2018 13:01:58 +0200 (CEST)
X-IronPort-AV: E=Sophos;i="5.49,358,1520899200"; d="scan'208";a="53573845"
From: owensm <owen.smith@citrix.com>
To: <win-pv-devel@lists.xenproject.org>
Date: Thu, 3 May 2018 12:02:56 +0100
Message-ID: <20180503110302.17308-1-owen.smith@citrix.com>
X-Mailer: git-send-email 2.16.2.windows.1
MIME-Version: 1.0
Subject: [win-pv-devel] [RFC PATCH 0/6] Multi-queue frontend
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Cc: owensm <owen.smith@citrix.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>

RXhwZXJpbWVudGFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtdWx0aS1xdWV1ZSBwcm90b2NvbC4K
VGhpcyBhbGxvd3MgZnJvbnRlbmRzIHRvIHVzZSBtdWx0aXBsZSBxdWV1ZXMvcmluZ3Mgd2hlbgp1
c2VkIHdpdGggYSBjb21wYXRpYmxlIGJhY2tlbmQgKHhlbi1ibGtiYWNrKS4gYmxraWZfcmVxdWVz
dF90J3MKYXJlIGRpcmVjdGVkIHRvIGEgcGFydGljdWxhciBxdWV1ZSBiYXNlZCBvbiB0aGUgY2Fs
bGluZyBDUFUsIHdoaWNoCmlzIHVubGlrZWx5IHRvIHN1ZmZpY2llbnRseSBiYWxhbmNlIGFueSBs
b2FkLiBObyBwZXJmb3JtYW5jZSB0ZXN0aW5nCmhhcyBiZWVuIGRvbmUgeWV0IC0gdGhpcyBSRkMg
aXMgZm9yIGNvbW1lbnRzIG9uIHRoZSBvdmVyYWxsIGltcGxlbWVudGF0aW9uCnN0cmF0ZWd5LgoK
b3dlbnNtICg2KToKICBVcGRhdGUgYmxraWYuaAogIFJlbmFtZSBYRU5WQkRfUklORyAtPiBYRU5W
QkRfUFJPVE9DT0wKICBRdWVyeSBmb3IgIm11bHRpLXF1ZXVlLW1heC1xdWV1ZXMiCiAgQWRkIGlu
aXRpYWwgbXVsdGktcXVldWUgc3VwcG9ydAogIEluY3JlYXNlIGNvbmN1cnJlbnQgY2FsbHMgdG8g
U3RhcnRJbwogIEZpeCB1cCBtb3JlIHRoYW4gMSBxdWV1ZQoKIGluY2x1ZGUveGVuL2lvL2Jsa2lm
LmggICAgICAgICAgICB8IDExMDAgKysrKysrKysrKy0tLS0tLS0tCiBzcmMveGVudmJkL2FkYXB0
ZXIuYyAgICAgICAgICAgICAgfCAgIDQxICsKIHNyYy94ZW52YmQvZHJpdmVyLmMgICAgICAgICAg
ICAgICB8ICAgIDMgKy0KIHNyYy94ZW52YmQvZHJpdmVyLmggICAgICAgICAgICAgICB8ICAgIDEg
Kwogc3JjL3hlbnZiZC9mcm9udGVuZC5jICAgICAgICAgICAgIHwgIDEwMCArLQogc3JjL3hlbnZi
ZC9mcm9udGVuZC5oICAgICAgICAgICAgIHwgICAgNiArLQogc3JjL3hlbnZiZC97cmluZy5jID0+
IHByb3RvY29sLmN9IHwgMjMxMCArKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0t
CiBzcmMveGVudmJkL3tyaW5nLmggPT4gcHJvdG9jb2wuaH0gfCAgIDU0ICstCiBzcmMveGVudmJk
L3RhcmdldC5jICAgICAgICAgICAgICAgfCAgIDI0ICstCiB2czIwMTUveGVudmJkL3hlbnZiZC52
Y3hwcm9qICAgICAgfCAgICAyICstCiB2czIwMTcveGVudmJkL3hlbnZiZC52Y3hwcm9qICAgICAg
fCAgICAyICstCiAxMSBmaWxlcyBjaGFuZ2VkLCAyMTE3IGluc2VydGlvbnMoKyksIDE1MjYgZGVs
ZXRpb25zKC0pCiByZW5hbWUgc3JjL3hlbnZiZC97cmluZy5jID0+IHByb3RvY29sLmN9ICg2MCUp
CiByZW5hbWUgc3JjL3hlbnZiZC97cmluZy5oID0+IHByb3RvY29sLmh9ICg2NyUpCgotLSAKMi4x
Ni4yLndpbmRvd3MuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fCndpbi1wdi1kZXZlbCBtYWlsaW5nIGxpc3QKd2luLXB2LWRldmVsQGxpc3RzLnhlbnBy
b2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby93
aW4tcHYtZGV2ZWw=

From win-pv-devel-bounces@lists.xenproject.org Thu May 03 11:03:27 2018
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 03 May 2018 11:03:27 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1fEC1H-00030P-3x; Thu, 03 May 2018 11:03:27 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <srs0=ylbo=hw=citrix.com=prvs=654105155=owen.smith@srs-us1.protection.inumbo.net>)
 id 1fEC1F-000302-Co
 for win-pv-devel@lists.xenproject.org; Thu, 03 May 2018 11:03:25 +0000
X-Inumbo-ID: fafc4a5b-4ec1-11e8-8249-2fda3a446a53
Received: from SMTP03.CITRIX.COM (unknown [162.221.156.55])
 by us1-amaz-eas1.inumbo.com (Halon) with ESMTPS
 id fafc4a5b-4ec1-11e8-8249-2fda3a446a53;
 Thu, 03 May 2018 11:06:08 +0000 (UTC)
X-IronPort-AV: E=Sophos;i="5.49,358,1520899200"; d="scan'208";a="53573855"
From: owensm <owen.smith@citrix.com>
To: <win-pv-devel@lists.xenproject.org>
Date: Thu, 3 May 2018 12:03:02 +0100
Message-ID: <20180503110302.17308-7-owen.smith@citrix.com>
X-Mailer: git-send-email 2.16.2.windows.1
In-Reply-To: <20180503110302.17308-1-owen.smith@citrix.com>
References: <20180503110302.17308-1-owen.smith@citrix.com>
MIME-Version: 1.0
Subject: [win-pv-devel] [RFC PATCH 6/6] Fix up more than 1 queue
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Cc: owensm <owen.smith@citrix.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>

Rml4IHNldmVyYWwgaXNzdWVzIGRldGVybWluaW5nIHRoZSBjb3JyZWN0IG51bWJlciBvZiBxdWV1
ZXMgdG8gdXNlLgpXaWxsIG5vdyB1c2UgbWF4KDEsIG1pbihtdWx0aS1xdWV1ZS1tYXgtcXVldWVz
LCBudW1iZXItb2YtdmNwdXMsCmZyb250ZW5kLXJlZ2lzdHJ5LW92ZXJyaWRlKSkKClNpZ25lZC1v
ZmYtYnk6IG93ZW5zbSA8b3dlbi5zbWl0aEBjaXRyaXguY29tPgotLS0KIHNyYy94ZW52YmQvZnJv
bnRlbmQuYyB8ICA4MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0KIHNy
Yy94ZW52YmQvZnJvbnRlbmQuaCB8ICAgMSArCiBzcmMveGVudmJkL3Byb3RvY29sLmMgfCAxMDQg
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0KIDMgZmls
ZXMgY2hhbmdlZCwgMTM2IGluc2VydGlvbnMoKyksIDUxIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdp
dCBhL3NyYy94ZW52YmQvZnJvbnRlbmQuYyBiL3NyYy94ZW52YmQvZnJvbnRlbmQuYwppbmRleCA0
MGZkYmNhLi44MGIxMmQ5IDEwMDY0NAotLS0gYS9zcmMveGVudmJkL2Zyb250ZW5kLmMKKysrIGIv
c3JjL3hlbnZiZC9mcm9udGVuZC5jCkBAIC03NSw2ICs3NSw3IEBAIHN0cnVjdCBfWEVOVkJEX0ZS
T05URU5EIHsKICAgICBYRU5WQkRfUEFHRSAgICAgICAgICAgICAgICAgUGFnZTgwOwogICAgIFhF
TlZCRF9QQUdFICAgICAgICAgICAgICAgICBQYWdlODM7CiAgICAgVUxPTkcgICAgICAgICAgICAg
ICAgICAgICAgIE11bHRpUXVldWVNYXhRdWV1ZXM7CisgICAgVUxPTkcgICAgICAgICAgICAgICAg
ICAgICAgIE11bHRpUXVldWVOdW1RdWV1ZXM7CiAKICAgICAvLyBJbnRlcmZhY2VzIHRvIFhlbkJ1
cwogICAgIFhFTkJVU19TVE9SRV9JTlRFUkZBQ0UgICAgICBTdG9yZUludGVyZmFjZTsKQEAgLTc4
NSw3ICs3ODYsNiBAQCBGcm9udGVuZFJlYWRGZWF0dXJlcygKICAgICBJTiAgUFhFTlZCRF9GUk9O
VEVORCAgICBGcm9udGVuZAogICAgICkKIHsKLSAgICBVTE9ORyAgICAgICAgICAgICAgICAgICBQ
cm9jZXNzb3JDb3VudDsKICAgICBCT09MRUFOICAgICAgICAgICAgICAgICBDaGFuZ2VkOwogCiAg
ICAgQ2hhbmdlZCA9IEZyb250ZW5kUmVhZEZlYXR1cmUoRnJvbnRlbmQsCkBAIC03OTgsMTQgKzc5
OCw2IEBAIEZyb250ZW5kUmVhZEZlYXR1cmVzKAogICAgIENoYW5nZWQgfD0gRnJvbnRlbmRSZWFk
RmVhdHVyZShGcm9udGVuZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmVh
dHVyZVBlcnNpc3RlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZGcm9u
dGVuZC0+RmVhdHVyZXMuUGVyc2lzdGVudCk7Ci0gICAgQ2hhbmdlZCB8PSBGcm9udGVuZFJlYWRW
YWx1ZTMyKEZyb250ZW5kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGZWF0
dXJlTXVsdGlRdWV1ZU1heFF1ZXVlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVFJVRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkZyb250ZW5kLT5N
dWx0aVF1ZXVlTWF4UXVldWVzKTsKLQotICAgIFByb2Nlc3NvckNvdW50ID0gS2VRdWVyeUFjdGl2
ZVByb2Nlc3NvckNvdW50KE5VTEwpOwotICAgIGlmIChQcm9jZXNzb3JDb3VudCA8IEZyb250ZW5k
LT5NdWx0aVF1ZXVlTWF4UXVldWVzKQotICAgICAgICBGcm9udGVuZC0+TXVsdGlRdWV1ZU1heFF1
ZXVlcyA9IFByb2Nlc3NvckNvdW50OwogCiAgICAgaWYgKCFDaGFuZ2VkKQogICAgICAgICByZXR1
cm47CkBAIC04MjEsMTAgKzgxMyw2IEBAIEZyb250ZW5kUmVhZEZlYXR1cmVzKAogICAgICAgICAg
ICAgICAgICAgICBGcm9udGVuZC0+VGFyZ2V0SWQsCiAgICAgICAgICAgICAgICAgICAgIEZyb250
ZW5kLT5GZWF0dXJlcy5JbmRpcmVjdCk7CiAgICAgfQotCi0gICAgVmVyYm9zZSgiVGFyZ2V0WyVk
XSA6IE11bHRpUXVldWVNYXhRdWV1ZXMgJXVcbiIsCi0gICAgICAgICAgICBGcm9udGVuZC0+VGFy
Z2V0SWQsCi0gICAgICAgICAgICBGcm9udGVuZC0+TXVsdGlRdWV1ZU1heFF1ZXVlcyk7CiB9CiAK
IHN0YXRpYyBGT1JDRUlOTElORSBWT0lECkBAIC0xMDk1LDYgKzEwODMsNDEgQEAgZmFpbDE6CiAg
ICAgRXJyb3IoIkZhaWwxICglMDh4KVxuIiwgU3RhdHVzKTsKICAgICByZXR1cm4gU3RhdHVzOwog
fQorCitzdGF0aWMgVk9JRAorRnJvbnRlbmRTZXROdW1RdWV1ZXMoCisgICAgSU4gIFBYRU5WQkRf
RlJPTlRFTkQgICAgRnJvbnRlbmQKKyAgICApCit7CisgICAgUENIQVIgICAgICAgICAgICAgICAg
ICAgQnVmZmVyOworICAgIFVMT05HICAgICAgICAgICAgICAgICAgIEJhY2tlbmRNYXhRdWV1ZXM7
CisgICAgTlRTVEFUVVMgICAgICAgICAgICAgICAgc3RhdHVzOworCisgICAgc3RhdHVzID0gWEVO
QlVTX1NUT1JFKFJlYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZGcm9udGVuZC0+U3Rv
cmVJbnRlcmZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgIEZyb250ZW5kR2V0QmFja2VuZFBhdGgoRnJvbnRlbmQpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAibXVsdGktcXVldWUtbWF4LXF1ZXVlcyIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICZCdWZmZXIpOworICAgIGlmIChOVF9TVUNDRVNTKHN0YXR1cykpIHsK
KyAgICAgICAgQmFja2VuZE1heFF1ZXVlcyA9IChVTE9ORylzdHJ0b3VsKEJ1ZmZlciwgTlVMTCwg
MTApOworCisgICAgICAgIFhFTkJVU19TVE9SRShGcmVlLAorICAgICAgICAgICAgICAgICAgICAg
JkZyb250ZW5kLT5TdG9yZUludGVyZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlcik7
CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBCYWNrZW5kTWF4UXVldWVzID0gMTsKKyAgICB9
CisKKyAgICBGcm9udGVuZC0+TXVsdGlRdWV1ZU51bVF1ZXVlcyA9IF9fbWluKEZyb250ZW5kR2V0
TXVsdGlRdWV1ZU1heFF1ZXVlcyhGcm9udGVuZCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBCYWNrZW5kTWF4UXVldWVzKTsKKworICAgIFZlcmJvc2UoIlRhcmdl
dFslZF0gJXVcbiIsCisgICAgICAgICAgICBGcm9udGVuZC0+VGFyZ2V0SWQsCisgICAgICAgICAg
ICBGcm9udGVuZC0+TXVsdGlRdWV1ZU51bVF1ZXVlcyk7Cit9CisKIF9fZHJ2X3JlcXVpcmVzSVJR
TChESVNQQVRDSF9MRVZFTCkKIHN0YXRpYyBOVFNUQVRVUwogRnJvbnRlbmRDb25uZWN0KApAQCAt
MTEwOSw2ICsxMTMyLDggQEAgRnJvbnRlbmRDb25uZWN0KAogICAgIGlmICghTlRfU1VDQ0VTUyhT
dGF0dXMpKQogICAgICAgICBnb3RvIGZhaWwxOwogCisgICAgRnJvbnRlbmRTZXROdW1RdWV1ZXMo
RnJvbnRlbmQpOworCiAgICAgU3RhdHVzID0gUHJvdG9jb2xDb25uZWN0KEZyb250ZW5kLT5Qcm90
b2NvbCk7CiAgICAgaWYgKCFOVF9TVUNDRVNTKFN0YXR1cykpCiAgICAgICAgIGdvdG8gZmFpbDI7
CkBAIC0xNTM3LDYgKzE1NjIsMTIgQEAgRnJvbnRlbmREZWJ1Z0NhbGxiYWNrKAogICAgICAgICAg
ICAgICAgICAgICAgRnJvbnRlbmQtPkRpc2tJbmZvLkRpc2NhcmRHcmFudWxhcml0eSk7CiAgICAg
fQogCisgICAgWEVOQlVTX0RFQlVHKFByaW50ZiwKKyAgICAgICAgICAgICAgICAgJkZyb250ZW5k
LT5EZWJ1Z0ludGVyZmFjZSwKKyAgICAgICAgICAgICAgICAgIk11bHRpUXVldWVOdW1RdWV1ZXM6
ICV1IC8gJXVcbiIsCisgICAgICAgICAgICAgICAgIEZyb250ZW5kLT5NdWx0aVF1ZXVlTnVtUXVl
dWVzLAorICAgICAgICAgICAgICAgICBGcm9udGVuZC0+TXVsdGlRdWV1ZU1heFF1ZXVlcyk7CisK
ICAgICBYRU5CVVNfREVCVUcoUHJpbnRmLAogICAgICAgICAgICAgICAgICAmRnJvbnRlbmQtPkRl
YnVnSW50ZXJmYWNlLAogICAgICAgICAgICAgICAgICAiRGlza0luZm86ICVsbHUgQCAldSAoJXUp
ICUwOHhcbiIsCkBAIC0xNzQwLDYgKzE3NzEsMjggQEAgZmFpbDE6CiAgICAgcmV0dXJuIHN0YXR1
czsKIH0KIAorc3RhdGljIEZPUkNFSU5MSU5FIFZPSUQKK0Zyb250ZW5kU2V0TWF4UXVldWVzKAor
ICAgIElOICBQWEVOVkJEX0ZST05URU5EICAgIEZyb250ZW5kCisgICAgKQoreworICAgIFVMT05H
ICAgICAgICAgICAgICAgICAgIEZyb250ZW5kTWF4UXVldWVzOworCisgICAgRnJvbnRlbmQtPk11
bHRpUXVldWVNYXhRdWV1ZXMgPSBLZVF1ZXJ5QWN0aXZlUHJvY2Vzc29yQ291bnRFeChBTExfUFJP
Q0VTU09SX0dST1VQUyk7OworCisgICAgaWYgKERyaXZlckdldEZlYXR1cmVPdmVycmlkZShGZWF0
dXJlTXVsdGlRdWV1ZU1heFF1ZXVlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICZGcm9udGVuZE1heFF1ZXVlcykgJiYKKyAgICAgICAgRnJvbnRlbmRNYXhRdWV1ZXMgPCBGcm9u
dGVuZC0+TXVsdGlRdWV1ZU1heFF1ZXVlcykKKyAgICAgICAgRnJvbnRlbmQtPk11bHRpUXVldWVN
YXhRdWV1ZXMgPSBGcm9udGVuZE1heFF1ZXVlczsKKworICAgIGlmIChGcm9udGVuZC0+TXVsdGlR
dWV1ZU1heFF1ZXVlcyA9PSAwKQorICAgICAgICBGcm9udGVuZC0+TXVsdGlRdWV1ZU1heFF1ZXVl
cyA9IDE7CisKKyAgICBWZXJib3NlKCJUYXJnZXRbJWRdIDogTXVsdGlRdWV1ZU1heFF1ZXVlcyAl
dVxuIiwKKyAgICAgICAgICAgIEZyb250ZW5kLT5UYXJnZXRJZCwKKyAgICAgICAgICAgIEZyb250
ZW5kLT5NdWx0aVF1ZXVlTWF4UXVldWVzKTsKK30KKwogTlRTVEFUVVMKIEZyb250ZW5kQ3JlYXRl
KAogICAgIElOICBQWEVOVkJEX1RBUkdFVCAgICAgIFRhcmdldCwKQEAgLTE3ODEsNiArMTgzNCw3
IEBAIEZyb250ZW5kQ3JlYXRlKAogICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKQogICAgICAg
ICBnb3RvIGZhaWwzOwogCisgICAgRnJvbnRlbmRTZXRNYXhRdWV1ZXMoRnJvbnRlbmQpOwogICAg
IHN0YXR1cyA9IFByb3RvY29sQ3JlYXRlKEZyb250ZW5kLCAmRnJvbnRlbmQtPlByb3RvY29sKTsK
ICAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkKICAgICAgICAgZ290byBmYWlsNDsKQEAgLTE5
NDQsNiArMTk5OCw2IEBAIEZyb250ZW5kR2V0QmFycmllcigKICAgICByZXR1cm4gRnJvbnRlbmQt
PkRpc2tJbmZvLkJhcnJpZXI7CiB9CiBGUk9OVEVORF9HRVRfUFJPUEVSVFkoTXVsdGlRdWV1ZU1h
eFF1ZXVlcywgVUxPTkcpCi0KK0ZST05URU5EX0dFVF9QUk9QRVJUWShNdWx0aVF1ZXVlTnVtUXVl
dWVzLCBVTE9ORykKIAogI3VuZGVmIEZST05URU5EX0dFVF9QUk9QRVJUWQpkaWZmIC0tZ2l0IGEv
c3JjL3hlbnZiZC9mcm9udGVuZC5oIGIvc3JjL3hlbnZiZC9mcm9udGVuZC5oCmluZGV4IDBmZmIy
NjEuLmUwNjhmNTEgMTAwNjQ0Ci0tLSBhL3NyYy94ZW52YmQvZnJvbnRlbmQuaAorKysgYi9zcmMv
eGVudmJkL2Zyb250ZW5kLmgKQEAgLTE2OCw2ICsxNjgsNyBAQCBGUk9OVEVORF9HRVRfUFJPUEVS
VFkoRGlzY2FyZCwgQk9PTEVBTikKIEZST05URU5EX0dFVF9QUk9QRVJUWShGbHVzaENhY2hlLCBC
T09MRUFOKQogRlJPTlRFTkRfR0VUX1BST1BFUlRZKEJhcnJpZXIsIEJPT0xFQU4pCiBGUk9OVEVO
RF9HRVRfUFJPUEVSVFkoTXVsdGlRdWV1ZU1heFF1ZXVlcywgVUxPTkcpCitGUk9OVEVORF9HRVRf
UFJPUEVSVFkoTXVsdGlRdWV1ZU51bVF1ZXVlcywgVUxPTkcpCiAKICN1bmRlZiBGUk9OVEVORF9H
RVRfUFJPUEVSVFkKIApkaWZmIC0tZ2l0IGEvc3JjL3hlbnZiZC9wcm90b2NvbC5jIGIvc3JjL3hl
bnZiZC9wcm90b2NvbC5jCmluZGV4IDhhYTZlYzguLmJmY2EzYmIgMTAwNjQ0Ci0tLSBhL3NyYy94
ZW52YmQvcHJvdG9jb2wuYworKysgYi9zcmMveGVudmJkL3Byb3RvY29sLmMKQEAgLTEwNiw3ICsx
MDYsNiBAQCBzdHJ1Y3QgX1hFTlZCRF9QUk9UT0NPTCB7CiAgICAgUFhFTkJVU19DQUNIRSAgICAg
ICAgICAgICAgICAgICBJbmRpcmVjdENhY2hlOwogCiAgICAgVUxPTkcgICAgICAgICAgICAgICAg
ICAgICAgICAgICBPcmRlcjsKLSAgICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgICAgIE51
bVF1ZXVlczsKICAgICBQWEVOVkJEX1JJTkcgICAgICAgICAgICAgICAgICAgICpSaW5nczsKIAog
ICAgIFVMT05HNjQgICAgICAgICAgICAgICAgICAgICAgICAgU2Vnc0dyYW50ZWQ7CkBAIC0xMDA4
LDkgKzEwMDcsOSBAQCBSaW5nQ3JlYXRlKAogICAgICgqUmluZyktPlByb3RvY29sID0gUHJvdG9j
b2w7CiAgICAgKCpSaW5nKS0+SW5kZXggPSBJbmRleDsKIAotICAgIExlbmd0aCA9IDEgKyAoVUxP
Tkcpc3RybGVuKEZyb250ZW5kR2V0RnJvbnRlbmRQYXRoKEZyb250ZW5kKSkgKyAoVUxPTkcpc3Ry
bGVuKCJxdWV1ZS14eCIpOworICAgIExlbmd0aCA9IChVTE9ORylzdHJsZW4oRnJvbnRlbmRHZXRG
cm9udGVuZFBhdGgoRnJvbnRlbmQpKSArIChVTE9ORylzdHJsZW4oIi9xdWV1ZS14eHgiKTsKIAot
ICAgICgqUmluZyktPlBhdGggPSBfX1Byb3RvY29sQWxsb2NhdGUoc2l6ZW9mKENIQVIpICogTGVu
Z3RoKTsKKyAgICAoKlJpbmcpLT5QYXRoID0gX19Qcm90b2NvbEFsbG9jYXRlKHNpemVvZihDSEFS
KSAqIChMZW5ndGggKyAxKSk7CiAKICAgICBzdGF0dXMgPSBTVEFUVVNfTk9fTUVNT1JZOwogICAg
IGlmICgoKlJpbmcpLT5QYXRoID09IE5VTEwpCkBAIC0xMTk4LDEyICsxMTk3LDE1IEBAIFJpbmdT
dG9yZVdyaXRlKAogICAgIFBYRU5WQkRfR1JBTlRFUiAgICAgR3JhbnRlciA9IEZyb250ZW5kR2V0
R3JhbnRlcihQcm90b2NvbC0+RnJvbnRlbmQpOwogICAgIFBDSEFSICAgICAgICAgICAgICAgUGF0
aDsKICAgICBVTE9ORyAgICAgICAgICAgICAgIFBvcnQ7CisgICAgVUxPTkcgICAgICAgICAgICAg
ICBOdW1RdWV1ZXM7CiAgICAgTlRTVEFUVVMgICAgICAgICAgICBzdGF0dXM7CiAKLSAgICBpZiAo
RnJvbnRlbmRHZXRNdWx0aVF1ZXVlTWF4UXVldWVzKFByb3RvY29sLT5Gcm9udGVuZCkgPiAxKQot
ICAgICAgICBQYXRoID0gUmluZy0+UGF0aDsKLSAgICBlbHNlCi0gICAgICAgIFBhdGggPSBGcm9u
dGVuZEdldEZyb250ZW5kUGF0aChQcm90b2NvbC0+RnJvbnRlbmQpOworICAgIE51bVF1ZXVlcyA9
IEZyb250ZW5kR2V0TXVsdGlRdWV1ZU51bVF1ZXVlcyhQcm90b2NvbC0+RnJvbnRlbmQpOworCisg
ICAgQVNTRVJUKE51bVF1ZXVlcyAhPSAwKTsKKyAgICBQYXRoID0gKE51bVF1ZXVlcyA9PSAxKSA/
CisgICAgICAgICAgIEZyb250ZW5kR2V0RnJvbnRlbmRQYXRoKFByb3RvY29sLT5Gcm9udGVuZCkg
OgorICAgICAgICAgICBSaW5nLT5QYXRoOwogCiAgICAgaWYgKFByb3RvY29sLT5PcmRlciA9PSAw
KSB7CiAgICAgICAgIHN0YXR1cyA9IFhFTkJVU19TVE9SRShQcmludGYsCkBAIC0xOTM1LDYgKzE5
MzcsNyBAQCBQcm90b2NvbENyZWF0ZSgKICAgICBQWEVOVkJEX0FEQVBURVIgICAgICAgICBBZGFw
dGVyID0gVGFyZ2V0R2V0QWRhcHRlcihUYXJnZXQpOwogICAgIENIQVIgICAgICAgICAgICAgICAg
ICAgIE5hbWVbTUFYX05BTUVfTEVOXTsKICAgICBVTE9ORyAgICAgICAgICAgICAgICAgICBJbmRl
eDsKKyAgICBVTE9ORyAgICAgICAgICAgICAgICAgICBNYXhRdWV1ZXM7CiAgICAgTlRTVEFUVVMg
ICAgICAgICAgICAgICAgc3RhdHVzOwogCiAgICAgKlByb3RvY29sID0gX19Qcm90b2NvbEFsbG9j
YXRlKHNpemVvZihYRU5WQkRfUFJPVE9DT0wpKTsKQEAgLTIwMTUsMjggKzIwMTgsMzIgQEAgUHJv
dG9jb2xDcmVhdGUoCiAgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpCiAgICAgICAgIGdvdG8g
ZmFpbDg7CiAKLSAgICAoKlByb3RvY29sKS0+TnVtUXVldWVzID0gRnJvbnRlbmRHZXRNdWx0aVF1
ZXVlTWF4UXVldWVzKEZyb250ZW5kKTsKLSAgICBpZiAoKCpQcm90b2NvbCktPk51bVF1ZXVlcyA9
PSAwKQotICAgICAgICAoKlByb3RvY29sKS0+TnVtUXVldWVzID0gMTsKLSAgICAoKlByb3RvY29s
KS0+UmluZ3MgPSBfX1Byb3RvY29sQWxsb2NhdGUoc2l6ZW9mKFBYRU5WQkRfUklORykgKiAoKlBy
b3RvY29sKS0+TnVtUXVldWVzKTsKKyAgICBNYXhRdWV1ZXMgPSBGcm9udGVuZEdldE11bHRpUXVl
dWVNYXhRdWV1ZXMoRnJvbnRlbmQpOworCisgICAgKCpQcm90b2NvbCktPlJpbmdzID0gX19Qcm90
b2NvbEFsbG9jYXRlKHNpemVvZihQWEVOVkJEX1JJTkcpICoKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgTWF4UXVldWVzKTsKIAogICAgIHN0YXR1cyA9IFNUQVRV
U19OT19NRU1PUlk7CiAgICAgaWYgKCgqUHJvdG9jb2wpLT5SaW5ncyA9PSBOVUxMKQogICAgICAg
ICBnb3RvIGZhaWw5OwogCi0gICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgKCpQcm90b2NvbCkt
Pk51bVF1ZXVlczsgKytJbmRleCkgeworICAgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IE1heFF1
ZXVlczsgKytJbmRleCkgeworICAgICAgICBQWEVOVkJEX1JJTkcgICAgICAgIFJpbmc7CisKICAg
ICAgICAgc3RhdHVzID0gUmluZ0NyZWF0ZSgqUHJvdG9jb2wsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgSW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJigqUHJvdG9jb2wp
LT5SaW5nc1tJbmRleF0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICZSaW5nKTsKICAg
ICAgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpCiAgICAgICAgICAgICBnb3RvIGZhaWwxMDsK
KworICAgICAgICAoKlByb3RvY29sKS0+UmluZ3NbSW5kZXhdID0gUmluZzsKICAgICB9CiAKICAg
ICByZXR1cm4gU1RBVFVTX1NVQ0NFU1M7CiAKIGZhaWwxMDoKICAgICBFcnJvcigiZmFpbDEwXG4i
KTsKLSAgICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCAoKlByb3RvY29sKS0+TnVtUXVldWVzOyAr
K0luZGV4KSB7CisgICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgTWF4UXVldWVzOyArK0luZGV4
KSB7CiAgICAgICAgIGlmICgoKlByb3RvY29sKS0+UmluZ3NbSW5kZXhdKQogICAgICAgICAgICAg
UmluZ0Rlc3Ryb3koKCpQcm90b2NvbCktPlJpbmdzW0luZGV4XSk7CiAgICAgICAgICgqUHJvdG9j
b2wpLT5SaW5nc1tJbmRleF0gPSBOVUxMOwpAQCAtMjA0NSw3ICsyMDUyLDYgQEAgZmFpbDEwOgog
ICAgICgqUHJvdG9jb2wpLT5SaW5ncyA9IE5VTEw7CiBmYWlsOToKICAgICBFcnJvcigiZmFpbDlc
biIpOwotICAgICgqUHJvdG9jb2wpLT5OdW1RdWV1ZXMgPSAwOwogICAgIFhFTkJVU19DQUNIRShE
ZXN0cm95LAogICAgICAgICAgICAgICAgICAmKCpQcm90b2NvbCktPkNhY2hlSW50ZXJmYWNlLAog
ICAgICAgICAgICAgICAgICAoKlByb3RvY29sKS0+SW5kaXJlY3RDYWNoZSk7CkBAIC0yMDk0LDkg
KzIxMDAsMTIgQEAgUHJvdG9jb2xEZXN0cm95KAogICAgIElOICBQWEVOVkJEX1BST1RPQ09MICAg
IFByb3RvY29sCiAgICAgKQogeworICAgIFVMT05HICAgICAgICAgICAgICAgICAgIE1heFF1ZXVl
czsKICAgICBVTE9ORyAgICAgICAgICAgICAgICAgICBJbmRleDsKIAotICAgIGZvciAoSW5kZXgg
PSAwOyBJbmRleCA8IFByb3RvY29sLT5OdW1RdWV1ZXM7ICsrSW5kZXgpIHsKKyAgICBNYXhRdWV1
ZXMgPSBGcm9udGVuZEdldE11bHRpUXVldWVNYXhRdWV1ZXMoUHJvdG9jb2wtPkZyb250ZW5kKTsK
KworICAgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IE1heFF1ZXVlczsgKytJbmRleCkgewogICAg
ICAgICBpZiAoUHJvdG9jb2wtPlJpbmdzW0luZGV4XSkKICAgICAgICAgICAgIFJpbmdEZXN0cm95
KFByb3RvY29sLT5SaW5nc1tJbmRleF0pOwogICAgICAgICBQcm90b2NvbC0+UmluZ3NbSW5kZXhd
ID0gMDsKQEAgLTIxMDUsOCArMjExNCw2IEBAIFByb3RvY29sRGVzdHJveSgKICAgICBfX1Byb3Rv
Y29sRnJlZShQcm90b2NvbC0+UmluZ3MpOwogICAgIFByb3RvY29sLT5SaW5ncyA9IE5VTEw7CiAK
LSAgICBQcm90b2NvbC0+TnVtUXVldWVzID0gMDsKLQogICAgIFhFTkJVU19DQUNIRShEZXN0cm95
LAogICAgICAgICAgICAgICAgICAmUHJvdG9jb2wtPkNhY2hlSW50ZXJmYWNlLAogICAgICAgICAg
ICAgICAgICBQcm90b2NvbC0+SW5kaXJlY3RDYWNoZSk7CkBAIC0yMTQ2LDExICsyMTUzLDE0IEBA
IFByb3RvY29sQ29ubmVjdCgKICAgICBQWEVOVkJEX1RBUkdFVCAgICAgIFRhcmdldCA9IEZyb250
ZW5kR2V0VGFyZ2V0KFByb3RvY29sLT5Gcm9udGVuZCk7CiAgICAgUFhFTlZCRF9BREFQVEVSICAg
ICBBZGFwdGVyID0gVGFyZ2V0R2V0QWRhcHRlcihUYXJnZXQpOwogICAgIFBDSEFSICAgICAgICAg
ICAgICAgQnVmZmVyOworICAgIFVMT05HICAgICAgICAgICAgICAgTnVtUXVldWVzOwogICAgIFVM
T05HICAgICAgICAgICAgICAgSW5kZXg7CiAgICAgTlRTVEFUVVMgICAgICAgICAgICBzdGF0dXM7
CiAKICAgICBBU1NFUlQoUHJvdG9jb2wtPkNvbm5lY3RlZCA9PSBGQUxTRSk7CiAKKyAgICBOdW1R
dWV1ZXMgPSBGcm9udGVuZEdldE11bHRpUXVldWVOdW1RdWV1ZXMoUHJvdG9jb2wtPkZyb250ZW5k
KTsKKwogICAgIEFkYXB0ZXJHZXRTdG9yZUludGVyZmFjZShBZGFwdGVyLCAmUHJvdG9jb2wtPlN0
b3JlSW50ZXJmYWNlKTsKICAgICBBZGFwdGVyR2V0RXZ0Y2huSW50ZXJmYWNlKEFkYXB0ZXIsICZQ
cm90b2NvbC0+RXZ0Y2huSW50ZXJmYWNlKTsKICAgICBBZGFwdGVyR2V0RGVidWdJbnRlcmZhY2Uo
QWRhcHRlciwgJlByb3RvY29sLT5EZWJ1Z0ludGVyZmFjZSk7CkBAIC0yMTkzLDcgKzIyMDMsNyBA
QCBQcm90b2NvbENvbm5lY3QoCiAgICAgICAgIFByb3RvY29sLT5PcmRlciA9IDA7CiAgICAgfQog
Ci0gICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgUHJvdG9jb2wtPk51bVF1ZXVlczsgKytJbmRl
eCkgeworICAgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IE51bVF1ZXVlczsgKytJbmRleCkgewog
ICAgICAgICBzdGF0dXMgPSBSaW5nQ29ubmVjdChQcm90b2NvbC0+UmluZ3NbSW5kZXhdKTsKICAg
ICAgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpCiAgICAgICAgICAgICBnb3RvIGZhaWw0OwpA
QCAtMjIxMyw3ICsyMjIzLDcgQEAgUHJvdG9jb2xDb25uZWN0KAogCiBmYWlsNToKICAgICBFcnJv
cigiZmFpbDVcbiIpOwotICAgIEluZGV4ID0gUHJvdG9jb2wtPk51bVF1ZXVlczsKKyAgICBJbmRl
eCA9IEZyb250ZW5kR2V0TXVsdGlRdWV1ZU51bVF1ZXVlcyhQcm90b2NvbC0+RnJvbnRlbmQpOwog
ZmFpbDQ6CiAgICAgRXJyb3IoImZhaWw0XG4iKTsKICAgICB3aGlsZSAoSW5kZXgtLSAhPSAwKSB7
CkBAIC0yMjQ3LDkgKzIyNTcsMTIgQEAgUHJvdG9jb2xTdG9yZVdyaXRlKAogICAgICkKIHsKICAg
ICBVTE9ORyAgICAgICAgICAgICAgICAgICBJbmRleDsKKyAgICBVTE9ORyAgICAgICAgICAgICAg
ICAgICBOdW1RdWV1ZXM7CiAgICAgTlRTVEFUVVMgICAgICAgICAgICAgICAgc3RhdHVzOwogCi0g
ICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgUHJvdG9jb2wtPk51bVF1ZXVlczsgKytJbmRleCkg
eworICAgIE51bVF1ZXVlcyA9IEZyb250ZW5kR2V0TXVsdGlRdWV1ZU51bVF1ZXVlcyhQcm90b2Nv
bC0+RnJvbnRlbmQpOworCisgICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgTnVtUXVldWVzOyAr
K0luZGV4KSB7CiAgICAgICAgIHN0YXR1cyA9IFJpbmdTdG9yZVdyaXRlKFByb3RvY29sLT5SaW5n
c1tJbmRleF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zYWN0aW9uKTsK
ICAgICAgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpCkBAIC0yMjY4LDE1ICsyMjgxLDE3IEBA
IFByb3RvY29sU3RvcmVXcml0ZSgKICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CiAgICAgfQog
Ci0gICAgc3RhdHVzID0gWEVOQlVTX1NUT1JFKFByaW50ZiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgJlByb3RvY29sLT5TdG9yZUludGVyZmFjZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgVHJhbnNhY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEZyb250ZW5kR2V0RnJv
bnRlbmRQYXRoKFByb3RvY29sLT5Gcm9udGVuZCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICJtdWx0aS1xdWV1ZS1udW0tcXVldWVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIiV1
IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvdG9jb2wtPk51bVF1ZXVlcyk7Ci0gICAg
aWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpCi0gICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgaWYg
KEZyb250ZW5kR2V0TXVsdGlRdWV1ZU51bVF1ZXVlcyhQcm90b2NvbC0+RnJvbnRlbmQpID4gMSkg
eworICAgICAgICBzdGF0dXMgPSBYRU5CVVNfU1RPUkUoUHJpbnRmLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJlByb3RvY29sLT5TdG9yZUludGVyZmFjZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFRyYW5zYWN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRnJvbnRlbmRHZXRGcm9udGVuZFBhdGgoUHJvdG9jb2wtPkZyb250ZW5kKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJtdWx0aS1xdWV1ZS1udW0tcXVldWVzIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICIldSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBGcm9udGVuZEdldE11bHRpUXVldWVOdW1RdWV1ZXMoUHJvdG9jb2wtPkZyb250ZW5kKSk7Cisg
ICAgICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKQorICAgICAgICAgICAgcmV0dXJuIHN0YXR1
czsKKyAgICB9CiAKICAgICBzdGF0dXMgPSBYRU5CVVNfU1RPUkUoUHJpbnRmLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAmUHJvdG9jb2wtPlN0b3JlSW50ZXJmYWNlLApAQCAtMjI5NiwxMSAr
MjMxMSwxNCBAQCBQcm90b2NvbEVuYWJsZSgKICAgICApCiB7CiAgICAgVUxPTkcgICAgICAgICAg
ICAgICAgICAgSW5kZXg7CisgICAgVUxPTkcgICAgICAgICAgICAgICAgICAgTnVtUXVldWVzOwog
CiAgICAgQVNTRVJUKFByb3RvY29sLT5FbmFibGVkID09IEZBTFNFKTsKICAgICBQcm90b2NvbC0+
RW5hYmxlZCA9IFRSVUU7CiAKLSAgICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBQcm90b2NvbC0+
TnVtUXVldWVzOyArK0luZGV4KQorICAgIE51bVF1ZXVlcyA9IEZyb250ZW5kR2V0TXVsdGlRdWV1
ZU51bVF1ZXVlcyhQcm90b2NvbC0+RnJvbnRlbmQpOworCisgICAgZm9yIChJbmRleCA9IDA7IElu
ZGV4IDwgTnVtUXVldWVzOyArK0luZGV4KQogICAgICAgICBSaW5nRW5hYmxlKFByb3RvY29sLT5S
aW5nc1tJbmRleF0pOwogfQogCkBAIC0yMzEwLDExICsyMzI4LDE0IEBAIFByb3RvY29sRGlzYWJs
ZSgKICAgICApCiB7CiAgICAgVUxPTkcgICAgICAgICAgICAgICAgICAgSW5kZXg7CisgICAgVUxP
TkcgICAgICAgICAgICAgICAgICAgTnVtUXVldWVzOwogCiAgICAgQVNTRVJUKFByb3RvY29sLT5F
bmFibGVkID09IFRSVUUpOwogICAgIFByb3RvY29sLT5FbmFibGVkID0gRkFMU0U7CiAKLSAgICBm
b3IgKEluZGV4ID0gMDsgSW5kZXggPCBQcm90b2NvbC0+TnVtUXVldWVzOyArK0luZGV4KQorICAg
IE51bVF1ZXVlcyA9IEZyb250ZW5kR2V0TXVsdGlRdWV1ZU51bVF1ZXVlcyhQcm90b2NvbC0+RnJv
bnRlbmQpOworCisgICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgTnVtUXVldWVzOyArK0luZGV4
KQogICAgICAgICBSaW5nRGlzYWJsZShQcm90b2NvbC0+UmluZ3NbSW5kZXhdKTsKIH0KIApAQCAt
MjMyNCwxNiArMjM0NSwxOSBAQCBQcm90b2NvbERpc2Nvbm5lY3QoCiAgICAgKQogewogICAgIFVM
T05HICAgICAgICAgICAgICAgSW5kZXg7CisgICAgVUxPTkcgICAgICAgICAgICAgICBOdW1RdWV1
ZXM7CiAKICAgICBBU1NFUlQoUHJvdG9jb2wtPkNvbm5lY3RlZCk7CiAgICAgUHJvdG9jb2wtPkNv
bm5lY3RlZCA9IEZBTFNFOwogCisgICAgTnVtUXVldWVzID0gRnJvbnRlbmRHZXRNdWx0aVF1ZXVl
TnVtUXVldWVzKFByb3RvY29sLT5Gcm9udGVuZCk7CisKICAgICBYRU5CVVNfREVCVUcoRGVyZWdp
c3RlciwKICAgICAgICAgICAgICAgICAgJlByb3RvY29sLT5EZWJ1Z0ludGVyZmFjZSwKICAgICAg
ICAgICAgICAgICAgUHJvdG9jb2wtPkRlYnVnQ2FsbGJhY2spOwogICAgIFByb3RvY29sLT5EZWJ1
Z0NhbGxiYWNrID0gTlVMTDsKIAotICAgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IFByb3RvY29s
LT5OdW1RdWV1ZXM7ICsrSW5kZXgpCisgICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgTnVtUXVl
dWVzOyArK0luZGV4KQogICAgICAgICBSaW5nRGlzY29ubmVjdChQcm90b2NvbC0+UmluZ3NbSW5k
ZXhdKTsKIAogICAgIFByb3RvY29sLT5PcmRlciA9IDA7CkBAIC0yMzU2LDExICsyMzgwLDE0IEBA
IFByb3RvY29sVHJpZ2dlcigKICAgICApCiB7CiAgICAgVUxPTkcgICAgICAgICAgICAgICAgICAg
SW5kZXg7CisgICAgVUxPTkcgICAgICAgICAgICAgICAgICAgTnVtUXVldWVzOwogCiAgICAgaWYg
KCFQcm90b2NvbC0+RW5hYmxlZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZm9yIChJbmRleCA9
IDA7IEluZGV4IDwgUHJvdG9jb2wtPk51bVF1ZXVlczsgKytJbmRleCkKKyAgICBOdW1RdWV1ZXMg
PSBGcm9udGVuZEdldE11bHRpUXVldWVOdW1RdWV1ZXMoUHJvdG9jb2wtPkZyb250ZW5kKTsKKwor
ICAgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IE51bVF1ZXVlczsgKytJbmRleCkKICAgICAgICAg
UmluZ1RyaWdnZXIoUHJvdG9jb2wtPlJpbmdzW0luZGV4XSk7CiB9CiAKQEAgLTIzNjksMTMgKzIz
OTYsMTYgQEAgX19Qcm90b2NvbEdldFJpbmcoCiAgICAgSU4gIFBYRU5WQkRfUFJPVE9DT0wgICAg
UHJvdG9jb2wKICAgICApCiB7CisgICAgVUxPTkcgICAgICAgICAgICAgICAgICAgTnVtUXVldWVz
OwogICAgIFVMT05HICAgICAgICAgICAgICAgICAgIEluZGV4OwogCi0gICAgaWYgKFByb3RvY29s
LT5OdW1RdWV1ZXMgPT0gMCkKKyAgICBOdW1RdWV1ZXMgPSBGcm9udGVuZEdldE11bHRpUXVldWVO
dW1RdWV1ZXMoUHJvdG9jb2wtPkZyb250ZW5kKTsKKworICAgIGlmIChOdW1RdWV1ZXMgPT0gMCkK
ICAgICAgICAgcmV0dXJuIFByb3RvY29sLT5SaW5nc1swXTsKIAotICAgIEluZGV4ID0gS2VHZXRD
dXJyZW50UHJvY2Vzc29yTnVtYmVyRXgoTlVMTCkgJSBQcm90b2NvbC0+TnVtUXVldWVzOwotICAg
IEFTU0VSVChJbmRleCA8IFByb3RvY29sLT5OdW1RdWV1ZXMpOworICAgIEluZGV4ID0gS2VHZXRD
dXJyZW50UHJvY2Vzc29yTnVtYmVyRXgoTlVMTCkgJSBOdW1RdWV1ZXM7CisgICAgQVNTRVJUKElu
ZGV4IDwgTnVtUXVldWVzKTsKIAogICAgIHJldHVybiBQcm90b2NvbC0+UmluZ3NbSW5kZXhdOwog
fQotLSAKMi4xNi4yLndpbmRvd3MuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fCndpbi1wdi1kZXZlbCBtYWlsaW5nIGxpc3QKd2luLXB2LWRldmVsQGxp
c3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9s
aXN0aW5mby93aW4tcHYtZGV2ZWw=

From win-pv-devel-bounces@lists.xenproject.org Thu May 03 11:03:27 2018
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 03 May 2018 11:03:27 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1fEC1G-00030C-2L; Thu, 03 May 2018 11:03:26 +0000
Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <srs0=ylbo=hw=citrix.com=prvs=654105155=owen.smith@srs-us1.protection.inumbo.net>)
 id 1fEC1E-0002zv-8d
 for win-pv-devel@lists.xenproject.org; Thu, 03 May 2018 11:03:24 +0000
X-Inumbo-ID: 66f6d95b-4ec1-11e8-9728-bc764e045a96
Received: from SMTP03.CITRIX.COM (unknown [162.221.156.55])
 by us1-rack-dfw2.inumbo.com (Halon) with ESMTPS
 id 66f6d95b-4ec1-11e8-9728-bc764e045a96;
 Thu, 03 May 2018 13:01:59 +0200 (CEST)
X-IronPort-AV: E=Sophos;i="5.49,358,1520899200"; d="scan'208";a="53573849"
From: owensm <owen.smith@citrix.com>
To: <win-pv-devel@lists.xenproject.org>
Date: Thu, 3 May 2018 12:03:01 +0100
Message-ID: <20180503110302.17308-6-owen.smith@citrix.com>
X-Mailer: git-send-email 2.16.2.windows.1
In-Reply-To: <20180503110302.17308-1-owen.smith@citrix.com>
References: <20180503110302.17308-1-owen.smith@citrix.com>
MIME-Version: 1.0
Subject: [win-pv-devel] [RFC PATCH 5/6] Increase concurrent calls to StartIo
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Cc: owensm <owen.smith@citrix.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>

QnkgaW5jcmVhc2luZyBjb25jdXJyZW50IFN0YXJ0SW8gY2FsbHMsIHN0b3JhZ2UgcmVxdWVzdHMg
c2hvdWxkIGJlCmJldHRlciBkaXN0cmlidXRlZCBvdmVyIENQVXMsIGFuZCB1dGlsaXplIG11bHRp
cGxlIHF1ZXVlcyBiZXR0ZXIuCgpTaWduZWQtb2ZmLWJ5OiBvd2Vuc20gPG93ZW4uc21pdGhAY2l0
cml4LmNvbT4KLS0tCiBzcmMveGVudmJkL2FkYXB0ZXIuYyB8IDQxICsrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgNDEgaW5zZXJ0aW9ucygr
KQoKZGlmZiAtLWdpdCBhL3NyYy94ZW52YmQvYWRhcHRlci5jIGIvc3JjL3hlbnZiZC9hZGFwdGVy
LmMKaW5kZXggNzc1MzM4OC4uYjVlNmUyNSAxMDA2NDQKLS0tIGEvc3JjL3hlbnZiZC9hZGFwdGVy
LmMKKysrIGIvc3JjL3hlbnZiZC9hZGFwdGVyLmMKQEAgLTIxMzksNiArMjEzOSw0NyBAQCBBZGFw
dGVySHdJbml0aWFsaXplKAogICAgIElOICBQVk9JRCAgIERldkV4dAogICAgICkKIHsKKyAgICBQ
RVJGX0NPTkZJR1VSQVRJT05fREFUQSAgICAgUGVyZkRhdGE7CisgICAgVUxPTkcgICAgICAgICAg
ICAgICAgICAgICAgIENwdUNvdW50OworICAgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICBz
dGF0dXM7CisKKyAgICBSdGxaZXJvTWVtb3J5KCZQZXJmRGF0YSwgc2l6ZW9mKFBFUkZfQ09ORklH
VVJBVElPTl9EQVRBKSk7CisgICAgUGVyZkRhdGEuVmVyc2lvbiA9IFNUT1JfUEVSRl9WRVJTSU9O
OworICAgIFBlcmZEYXRhLlNpemUgPSBzaXplb2YoUEVSRl9DT05GSUdVUkFUSU9OX0RBVEEpOwor
CisgICAgc3RhdHVzID0gU3RvclBvcnRJbml0aWFsaXplUGVyZk9wdHMoRGV2RXh0LCBUUlVFLCAm
UGVyZkRhdGEpOworICAgIGlmIChzdGF0dXMgPT0gU1RPUl9TVEFUVVNfU1VDQ0VTUykgeworICAg
ICAgICAvLyBkaXNwbGF5IGF2YWlsYWJsZSBvcHRpb25zCisgICAgICAgIFRyYWNlKCJQRVJGX0NP
TkZJR1VSQVRJT05fREFUQSA9IFxuIik7CisgICAgICAgIGlmIChQZXJmRGF0YS5GbGFncyAmIFNU
T1JfUEVSRl9EUENfUkVESVJFQ1RJT04pCisgICAgICAgICAgICBUcmFjZSgiXHRTVE9SX1BFUkZf
RFBDX1JFRElSRUNUSU9OIFxuIik7CisgICAgICAgIGlmIChQZXJmRGF0YS5GbGFncyAmIFNUT1Jf
UEVSRl9DT05DVVJSRU5UX0NIQU5ORUxTKQorICAgICAgICAgICAgVHJhY2UoIlx0U1RPUl9QRVJG
X0NPTkNVUlJFTlRfQ0hBTk5FTFNcbiIpOworICAgICAgICBpZiAoUGVyZkRhdGEuRmxhZ3MgJiBT
VE9SX1BFUkZfSU5URVJSVVBUX01FU1NBR0VfUkFOR0VTKQorICAgICAgICAgICAgVHJhY2UoIlx0
U1RPUl9QRVJGX0lOVEVSUlVQVF9NRVNTQUdFX1JBTkdFUyBcbiIpOworICAgICAgICBpZiAoUGVy
ZkRhdGEuRmxhZ3MgJiBTVE9SX1BFUkZfQURWX0NPTkZJR19MT0NBTElUWSkKKyAgICAgICAgICAg
IFRyYWNlKCJcdFNUT1JfUEVSRl9BRFZfQ09ORklHX0xPQ0FMSVRZIFxuIik7CisgICAgICAgIGlm
IChQZXJmRGF0YS5GbGFncyAmIFNUT1JfUEVSRl9PUFRJTUlaRV9GT1JfQ09NUExFVElPTl9EVVJJ
TkdfU1RBUlRJTykKKyAgICAgICAgICAgIFRyYWNlKCJcdFNUT1JfUEVSRl9PUFRJTUlaRV9GT1Jf
Q09NUExFVElPTl9EVVJJTkdfU1RBUlRJTyBcbiIpOworICAgICAgICBpZiAoUGVyZkRhdGEuRmxh
Z3MgJiBTVE9SX1BFUkZfRFBDX1JFRElSRUNUSU9OX0NVUlJFTlRfQ1BVKQorICAgICAgICAgICAg
VHJhY2UoIlx0U1RPUl9QRVJGX0RQQ19SRURJUkVDVElPTl9DVVJSRU5UX0NQVSAgXG4iKTsKKyAg
ICAgICAgaWYgKFBlcmZEYXRhLkZsYWdzICYgU1RPUl9QRVJGX05PX1NHTCkKKyAgICAgICAgICAg
IFRyYWNlKCJcdFNUT1JfUEVSRl9OT19TR0wgIFxuIik7CisgICAgfQorCisgICAgQ3B1Q291bnQg
PSBLZVF1ZXJ5QWN0aXZlUHJvY2Vzc29yQ291bnQoTlVMTCk7CisKKyAgICBSdGxaZXJvTWVtb3J5
KCZQZXJmRGF0YSwgc2l6ZW9mKFBFUkZfQ09ORklHVVJBVElPTl9EQVRBKSk7CisgICAgUGVyZkRh
dGEuVmVyc2lvbiA9IFNUT1JfUEVSRl9WRVJTSU9OOworICAgIFBlcmZEYXRhLlNpemUgPSBzaXpl
b2YoUEVSRl9DT05GSUdVUkFUSU9OX0RBVEEpOworICAgIFBlcmZEYXRhLkZsYWdzID0gU1RPUl9Q
RVJGX0NPTkNVUlJFTlRfQ0hBTk5FTFM7CisgICAgUGVyZkRhdGEuQ29uY3VycmVudENoYW5uZWxz
ID0gQ3B1Q291bnQ7CisKKyAgICBzdGF0dXMgPSBTdG9yUG9ydEluaXRpYWxpemVQZXJmT3B0cyhE
ZXZFeHQsIEZBTFNFLCAmUGVyZkRhdGEpOworICAgIGlmIChzdGF0dXMgIT0gU1RPUl9TVEFUVVNf
U1VDQ0VTUykgeworICAgICAgICBFcnJvcigiU3RvclBvcnRJbml0aWFsaXplUGVyZk9wdHMgZmFp
bGVkICglMDh4KVxuIiwgc3RhdHVzKTsKKyAgICB9CisKICAgICByZXR1cm4gU3RvclBvcnRFbmFi
bGVQYXNzaXZlSW5pdGlhbGl6YXRpb24oRGV2RXh0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBBZGFwdGVySHdQYXNzaXZlSW5pdGlhbGl6ZSk7CiB9Ci0t
IAoyLjE2LjIud2luZG93cy4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX18Kd2luLXB2LWRldmVsIG1haWxpbmcgbGlzdAp3aW4tcHYtZGV2ZWxAbGlzdHMu
eGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3Rp
bmZvL3dpbi1wdi1kZXZlbA==

From win-pv-devel-bounces@lists.xenproject.org Thu May 03 11:03:27 2018
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 03 May 2018 11:03:27 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1fEC1H-00030V-6D; Thu, 03 May 2018 11:03:27 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <srs0=ylbo=hw=citrix.com=prvs=654105155=owen.smith@srs-us1.protection.inumbo.net>)
 id 1fEC1F-000304-Id
 for win-pv-devel@lists.xenproject.org; Thu, 03 May 2018 11:03:25 +0000
X-Inumbo-ID: fa53f038-4ec1-11e8-8249-2fda3a446a53
Received: from SMTP03.CITRIX.COM (unknown [162.221.156.55])
 by us1-amaz-eas1.inumbo.com (Halon) with ESMTPS
 id fa53f038-4ec1-11e8-8249-2fda3a446a53;
 Thu, 03 May 2018 11:06:07 +0000 (UTC)
X-IronPort-AV: E=Sophos;i="5.49,358,1520899200"; d="scan'208";a="53573848"
From: owensm <owen.smith@citrix.com>
To: <win-pv-devel@lists.xenproject.org>
Date: Thu, 3 May 2018 12:02:57 +0100
Message-ID: <20180503110302.17308-2-owen.smith@citrix.com>
X-Mailer: git-send-email 2.16.2.windows.1
In-Reply-To: <20180503110302.17308-1-owen.smith@citrix.com>
References: <20180503110302.17308-1-owen.smith@citrix.com>
MIME-Version: 1.0
Subject: [win-pv-devel] [RFC PATCH 1/6] Update blkif.h
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Cc: owensm <owen.smith@citrix.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>

UHVsbCB0aGUgbGF0ZXN0IGJsa2lmLmggZnJvbSB4ZW4uZ2l0IGF0CjBkMTZlY2UwYzVhZGI5NjBl
ZTRlNDVmMTIxODNiY2FjOGZlNmQ1MGEKClNpZ25lZC1vZmYtYnk6IG93ZW5zbSA8b3dlbi5zbWl0
aEBjaXRyaXguY29tPgotLS0KIGluY2x1ZGUveGVuL2lvL2Jsa2lmLmggfCAxMTAwICsrKysrKysr
KysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQs
IDU5NyBpbnNlcnRpb25zKCspLCA1MDMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvaW5jbHVk
ZS94ZW4vaW8vYmxraWYuaCBiL2luY2x1ZGUveGVuL2lvL2Jsa2lmLmgKaW5kZXggYzNlMTY5Yy4u
ZjY1OTg4MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS94ZW4vaW8vYmxraWYuaAorKysgYi9pbmNsdWRl
L3hlbi9pby9ibGtpZi5oCkBAIC0xLDI5ICsxLDI5IEBACiAvKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
Ci0gKiBibGtpZi5oCi0gKgotICogVW5pZmllZCBibG9jay1kZXZpY2UgSS9PIGludGVyZmFjZSBm
b3IgWGVuIGd1ZXN0IE9TZXMuCi0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwg
ZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQotICogb2YgdGhp
cyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3
YXJlIiksIHRvCi0gKiBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBp
bmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZQotICogcmlnaHRzIHRvIHVzZSwgY29weSwg
bW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yCi0g
KiBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3
aG9tIHRoZSBTb2Z0d2FyZSBpcwotICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGlj
ZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgotICogYWxs
IGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0gKgotICog
VEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5Z
IEtJTkQsIEVYUFJFU1MgT1IKLSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQg
VE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotICogRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFCi0gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENM
QUlNLCBEQU1BR0VTIE9SIE9USEVSCi0gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9O
IE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwotICogRlJPTSwgT1VUIE9G
IE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgot
ICogREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgotICoKLSAqIENvcHlyaWdodCAoYykgMjAwMy0y
MDA0LCBLZWlyIEZyYXNlcgotICogQ29weXJpZ2h0IChjKSAyMDEyLCBTcGVjdHJhIExvZ2ljIENv
cnBvcmF0aW9uCi0gKi8KKyogYmxraWYuaAorKgorKiBVbmlmaWVkIGJsb2NrLWRldmljZSBJL08g
aW50ZXJmYWNlIGZvciBYZW4gZ3Vlc3QgT1Nlcy4KKyoKKyogUGVybWlzc2lvbiBpcyBoZXJlYnkg
Z3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQor
KiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRo
ZSAiU29mdHdhcmUiKSwgdG8KKyogZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmlj
dGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUKKyogcmlnaHRzIHRvIHVzZSwg
Y29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5k
L29yCisqIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25z
IHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0
byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisqCisqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90
aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisqIGFs
bCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorKgorKiBU
SEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkg
S0lORCwgRVhQUkVTUyBPUgorKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRP
IFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyogRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
CisqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0s
IERBTUFHRVMgT1IgT1RIRVIKKyogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBD
T05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyogRlJPTSwgT1VUIE9GIE9SIElO
IENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgorKiBERUFM
SU5HUyBJTiBUSEUgU09GVFdBUkUuCisqCisqIENvcHlyaWdodCAoYykgMjAwMy0yMDA0LCBLZWly
IEZyYXNlcgorKiBDb3B5cmlnaHQgKGMpIDIwMTIsIFNwZWN0cmEgTG9naWMgQ29ycG9yYXRpb24K
KyovCiAKICNpZm5kZWYgX19YRU5fUFVCTElDX0lPX0JMS0lGX0hfXwogI2RlZmluZSBfX1hFTl9Q
VUJMSUNfSU9fQkxLSUZfSF9fCkBAIC0zMiwxNiArMzIsMTYgQEAKICNpbmNsdWRlICIuLi9ncmFu
dF90YWJsZS5oIgogCiAvKgotICogRnJvbnQtPmJhY2sgbm90aWZpY2F0aW9uczogV2hlbiBlbnF1
ZXVpbmcgYSBuZXcgcmVxdWVzdCwgc2VuZGluZyBhCi0gKiBub3RpZmljYXRpb24gY2FuIGJlIG1h
ZGUgY29uZGl0aW9uYWwgb24gcmVxX2V2ZW50IChpLmUuLCB0aGUgZ2VuZXJpYwotICogaG9sZC1v
ZmYgbWVjaGFuaXNtIHByb3ZpZGVkIGJ5IHRoZSByaW5nIG1hY3JvcykuIEJhY2tlbmRzIG11c3Qg
c2V0Ci0gKiByZXFfZXZlbnQgYXBwcm9wcmlhdGVseSAoZS5nLiwgdXNpbmcgUklOR19GSU5BTF9D
SEVDS19GT1JfUkVRVUVTVFMoKSkuCi0gKgotICogQmFjay0+ZnJvbnQgbm90aWZpY2F0aW9uczog
V2hlbiBlbnF1ZXVpbmcgYSBuZXcgcmVzcG9uc2UsIHNlbmRpbmcgYQotICogbm90aWZpY2F0aW9u
IGNhbiBiZSBtYWRlIGNvbmRpdGlvbmFsIG9uIHJzcF9ldmVudCAoaS5lLiwgdGhlIGdlbmVyaWMK
LSAqIGhvbGQtb2ZmIG1lY2hhbmlzbSBwcm92aWRlZCBieSB0aGUgcmluZyBtYWNyb3MpLiBGcm9u
dGVuZHMgbXVzdCBzZXQKLSAqIHJzcF9ldmVudCBhcHByb3ByaWF0ZWx5IChlLmcuLCB1c2luZyBS
SU5HX0ZJTkFMX0NIRUNLX0ZPUl9SRVNQT05TRVMoKSkuCi0gKi8KKyogRnJvbnQtPmJhY2sgbm90
aWZpY2F0aW9uczogV2hlbiBlbnF1ZXVpbmcgYSBuZXcgcmVxdWVzdCwgc2VuZGluZyBhCisqIG5v
dGlmaWNhdGlvbiBjYW4gYmUgbWFkZSBjb25kaXRpb25hbCBvbiByZXFfZXZlbnQgKGkuZS4sIHRo
ZSBnZW5lcmljCisqIGhvbGQtb2ZmIG1lY2hhbmlzbSBwcm92aWRlZCBieSB0aGUgcmluZyBtYWNy
b3MpLiBCYWNrZW5kcyBtdXN0IHNldAorKiByZXFfZXZlbnQgYXBwcm9wcmlhdGVseSAoZS5nLiwg
dXNpbmcgUklOR19GSU5BTF9DSEVDS19GT1JfUkVRVUVTVFMoKSkuCisqCisqIEJhY2stPmZyb250
IG5vdGlmaWNhdGlvbnM6IFdoZW4gZW5xdWV1aW5nIGEgbmV3IHJlc3BvbnNlLCBzZW5kaW5nIGEK
Kyogbm90aWZpY2F0aW9uIGNhbiBiZSBtYWRlIGNvbmRpdGlvbmFsIG9uIHJzcF9ldmVudCAoaS5l
LiwgdGhlIGdlbmVyaWMKKyogaG9sZC1vZmYgbWVjaGFuaXNtIHByb3ZpZGVkIGJ5IHRoZSByaW5n
IG1hY3JvcykuIEZyb250ZW5kcyBtdXN0IHNldAorKiByc3BfZXZlbnQgYXBwcm9wcmlhdGVseSAo
ZS5nLiwgdXNpbmcgUklOR19GSU5BTF9DSEVDS19GT1JfUkVTUE9OU0VTKCkpLgorKi8KIAogI2lm
bmRlZiBibGtpZl92ZGV2X3QKICNkZWZpbmUgYmxraWZfdmRldl90ICAgdWludDE2X3QKQEAgLTQ5
LDQ4NyArNDksNTgxIEBACiAjZGVmaW5lIGJsa2lmX3NlY3Rvcl90IHVpbnQ2NF90CiAKIC8qCi0g
KiBGZWF0dXJlIGFuZCBQYXJhbWV0ZXIgTmVnb3RpYXRpb24KLSAqID09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotICogVGhlIHR3byBoYWx2ZXMgb2YgYSBYZW4gYmxvY2sgZHJpdmVy
IHV0aWxpemUgbm9kZXMgd2l0aGluIHRoZSBYZW5TdG9yZSB0bwotICogY29tbXVuaWNhdGUgY2Fw
YWJpbGl0aWVzIGFuZCB0byBuZWdvdGlhdGUgb3BlcmF0aW5nIHBhcmFtZXRlcnMuICBUaGlzCi0g
KiBzZWN0aW9uIGVudW1lcmF0ZXMgdGhlc2Ugbm9kZXMgd2hpY2ggcmVzaWRlIGluIHRoZSByZXNw
ZWN0aXZlIGZyb250IGFuZAotICogYmFja2VuZCBwb3J0aW9ucyBvZiB0aGUgWGVuU3RvcmUsIGZv
bGxvd2luZyB0aGUgWGVuQnVzIGNvbnZlbnRpb24uCi0gKgotICogQWxsIGRhdGEgaW4gdGhlIFhl
blN0b3JlIGlzIHN0b3JlZCBhcyBzdHJpbmdzLiAgTm9kZXMgc3BlY2lmeWluZyBudW1lcmljCi0g
KiB2YWx1ZXMgYXJlIGVuY29kZWQgaW4gZGVjaW1hbC4gIEludGVnZXIgdmFsdWUgcmFuZ2VzIGxp
c3RlZCBiZWxvdyBhcmUKLSAqIGV4cHJlc3NlZCBhcyBmaXhlZCBzaXplZCBpbnRlZ2VyIHR5cGVz
IGNhcGFibGUgb2Ygc3RvcmluZyB0aGUgY29udmVyc2lvbgotICogb2YgYSBwcm9wZXJseSBmb3Jt
YXRlZCBub2RlIHN0cmluZywgd2l0aG91dCBsb3NzIG9mIGluZm9ybWF0aW9uLgotICoKLSAqIEFu
eSBzcGVjaWZpZWQgZGVmYXVsdCB2YWx1ZSBpcyBpbiBlZmZlY3QgaWYgdGhlIGNvcnJlc3BvbmRp
bmcgWGVuQnVzIG5vZGUKLSAqIGlzIG5vdCBwcmVzZW50IGluIHRoZSBYZW5TdG9yZS4KLSAqCi0g
KiBYZW5TdG9yZSBub2RlcyBpbiBzZWN0aW9ucyBtYXJrZWQgIlBSSVZBVEUiIGFyZSBzb2xlbHkg
Zm9yIHVzZSBieSB0aGUKLSAqIGRyaXZlciBzaWRlIHdob3NlIFhlbkJ1cyB0cmVlIGNvbnRhaW5z
IHRoZW0uCi0gKgotICogWGVuU3RvcmUgbm9kZXMgbWFya2VkICJERVBSRUNBVEVEIiBpbiB0aGVp
ciBub3RlcyBzZWN0aW9uIHNob3VsZCBvbmx5IGJlCi0gKiB1c2VkIHRvIHByb3ZpZGUgaW50ZXJv
cGVyYWJpbGl0eSB3aXRoIGxlZ2FjeSBpbXBsZW1lbnRhdGlvbnMuCi0gKgotICogU2VlIHRoZSBY
ZW5CdXMgc3RhdGUgdHJhbnNpdGlvbiBkaWFncmFtIGJlbG93IGZvciBkZXRhaWxzIG9uIHdoZW4g
WGVuQnVzCi0gKiBub2RlcyBtdXN0IGJlIHB1Ymxpc2hlZCBhbmQgd2hlbiB0aGV5IGNhbiBiZSBx
dWVyaWVkLgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQmFja2VuZCBYZW5CdXMgTm9kZXMKLSAqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoK
LSAqLS0tLS0tLS0tLS0tLS0tLS0tIEJhY2tlbmQgRGV2aWNlIElkZW50aWZpY2F0aW9uIChQUklW
QVRFKSAtLS0tLS0tLS0tLS0tLS0tLS0KLSAqCi0gKiBtb2RlCi0gKiAgICAgIFZhbHVlczogICAg
ICAgICAiciIgKHJlYWQgb25seSksICJ3IiAod3JpdGFibGUpCi0gKgotICogICAgICBUaGUgcmVh
ZCBvciB3cml0ZSBhY2Nlc3MgcGVybWlzc2lvbnMgdG8gdGhlIGJhY2tpbmcgc3RvcmUgdG8gYmUK
LSAqICAgICAgZ3JhbnRlZCB0byB0aGUgZnJvbnRlbmQuCi0gKgotICogcGFyYW1zCi0gKiAgICAg
IFZhbHVlczogICAgICAgICBzdHJpbmcKLSAqCi0gKiAgICAgIEEgZnJlZSBmb3JtYXR0ZWQgc3Ry
aW5nIHByb3ZpZGluZyBzdWZmaWNpZW50IGluZm9ybWF0aW9uIGZvciB0aGUKLSAqICAgICAgYmFj
a2VuZCBkcml2ZXIgdG8gb3BlbiB0aGUgYmFja2luZyBkZXZpY2UuICAoZS5nLiB0aGUgcGF0aCB0
byB0aGUKLSAqICAgICAgZmlsZSBvciBibG9jayBkZXZpY2UgcmVwcmVzZW50aW5nIHRoZSBiYWNr
aW5nIHN0b3JlLikKLSAqCi0gKiB0eXBlCi0gKiAgICAgIFZhbHVlczogICAgICAgICAiZmlsZSIs
ICJwaHkiLCAidGFwIgotICoKLSAqICAgICAgVGhlIHR5cGUgb2YgdGhlIGJhY2tpbmcgZGV2aWNl
L29iamVjdC4KLSAqCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGZWF0dXJl
cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqCi0gKiBmZWF0dXJlLWJhcnJp
ZXIKLSAqICAgICAgVmFsdWVzOiAgICAgICAgIDAvMSAoYm9vbGVhbikKLSAqICAgICAgRGVmYXVs
dCBWYWx1ZTogIDAKLSAqCi0gKiAgICAgIEEgdmFsdWUgb2YgIjEiIGluZGljYXRlcyB0aGF0IHRo
ZSBiYWNrZW5kIGNhbiBwcm9jZXNzIHJlcXVlc3RzCi0gKiAgICAgIGNvbnRhaW5pbmcgdGhlIEJM
S0lGX09QX1dSSVRFX0JBUlJJRVIgcmVxdWVzdCBvcGNvZGUuICBSZXF1ZXN0cwotICogICAgICBv
ZiB0aGlzIHR5cGUgbWF5IHN0aWxsIGJlIHJldHVybmVkIGF0IGFueSB0aW1lIHdpdGggdGhlCi0g
KiAgICAgIEJMS0lGX1JTUF9FT1BOT1RTVVBQIHJlc3VsdCBjb2RlLgotICoKLSAqIGZlYXR1cmUt
Zmx1c2gtY2FjaGUKLSAqICAgICAgVmFsdWVzOiAgICAgICAgIDAvMSAoYm9vbGVhbikKLSAqICAg
ICAgRGVmYXVsdCBWYWx1ZTogIDAKLSAqCi0gKiAgICAgIEEgdmFsdWUgb2YgIjEiIGluZGljYXRl
cyB0aGF0IHRoZSBiYWNrZW5kIGNhbiBwcm9jZXNzIHJlcXVlc3RzCi0gKiAgICAgIGNvbnRhaW5p
bmcgdGhlIEJMS0lGX09QX0ZMVVNIX0RJU0tDQUNIRSByZXF1ZXN0IG9wY29kZS4gIFJlcXVlc3Rz
Ci0gKiAgICAgIG9mIHRoaXMgdHlwZSBtYXkgc3RpbGwgYmUgcmV0dXJuZWQgYXQgYW55IHRpbWUg
d2l0aCB0aGUKLSAqICAgICAgQkxLSUZfUlNQX0VPUE5PVFNVUFAgcmVzdWx0IGNvZGUuCi0gKgot
ICogZmVhdHVyZS1kaXNjYXJkCi0gKiAgICAgIFZhbHVlczogICAgICAgICAwLzEgKGJvb2xlYW4p
Ci0gKiAgICAgIERlZmF1bHQgVmFsdWU6ICAwCi0gKgotICogICAgICBBIHZhbHVlIG9mICIxIiBp
bmRpY2F0ZXMgdGhhdCB0aGUgYmFja2VuZCBjYW4gcHJvY2VzcyByZXF1ZXN0cwotICogICAgICBj
b250YWluaW5nIHRoZSBCTEtJRl9PUF9ESVNDQVJEIHJlcXVlc3Qgb3Bjb2RlLiAgUmVxdWVzdHMK
LSAqICAgICAgb2YgdGhpcyB0eXBlIG1heSBzdGlsbCBiZSByZXR1cm5lZCBhdCBhbnkgdGltZSB3
aXRoIHRoZQotICogICAgICBCTEtJRl9SU1BfRU9QTk9UU1VQUCByZXN1bHQgY29kZS4KLSAqCi0g
KiBmZWF0dXJlLXBlcnNpc3RlbnQKLSAqICAgICAgVmFsdWVzOiAgICAgICAgIDAvMSAoYm9vbGVh
bikKLSAqICAgICAgRGVmYXVsdCBWYWx1ZTogIDAKLSAqICAgICAgTm90ZXM6IDcKLSAqCi0gKiAg
ICAgIEEgdmFsdWUgb2YgIjEiIGluZGljYXRlcyB0aGF0IHRoZSBiYWNrZW5kIGNhbiBrZWVwIHRo
ZSBncmFudHMgdXNlZAotICogICAgICBieSB0aGUgZnJvbnRlbmQgZHJpdmVyIG1hcHBlZCwgc28g
dGhlIHNhbWUgc2V0IG9mIGdyYW50cyBzaG91bGQgYmUKLSAqICAgICAgdXNlZCBpbiBhbGwgdHJh
bnNhY3Rpb25zLiBUaGUgbWF4aW11bSBudW1iZXIgb2YgZ3JhbnRzIHRoZSBiYWNrZW5kCi0gKiAg
ICAgIGNhbiBtYXAgcGVyc2lzdGVudGx5IGRlcGVuZHMgb24gdGhlIGltcGxlbWVudGF0aW9uLCBi
dXQgaWRlYWxseSBpdAotICogICAgICBzaG91bGQgYmUgUklOR19TSVpFICogQkxLSUZfTUFYX1NF
R01FTlRTX1BFUl9SRVFVRVNULiBVc2luZyB0aGlzCi0gKiAgICAgIGZlYXR1cmUgdGhlIGJhY2tl
bmQgZG9lc24ndCBuZWVkIHRvIHVubWFwIGVhY2ggZ3JhbnQsIHByZXZlbnRpbmcKLSAqICAgICAg
Y29zdGx5IFRMQiBmbHVzaGVzLiBUaGUgYmFja2VuZCBkcml2ZXIgc2hvdWxkIG9ubHkgbWFwIGdy
YW50cwotICogICAgICBwZXJzaXN0ZW50bHkgaWYgdGhlIGZyb250ZW5kIHN1cHBvcnRzIGl0LiBJ
ZiBhIGJhY2tlbmQgZHJpdmVyIGNob29zZXMKLSAqICAgICAgdG8gdXNlIHRoZSBwZXJzaXN0ZW50
IHByb3RvY29sIHdoZW4gdGhlIGZyb250ZW5kIGRvZXNuJ3Qgc3VwcG9ydCBpdCwKLSAqICAgICAg
aXQgd2lsbCBwcm9iYWJseSBoaXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIHBlcnNpc3RlbnRseSBt
YXBwZWQgZ3JhbnRzCi0gKiAgICAgIChkdWUgdG8gdGhlIGZhY3QgdGhhdCB0aGUgZnJvbnRlbmQg
d29uJ3QgYmUgcmV1c2luZyB0aGUgc2FtZSBncmFudHMpLAotICogICAgICBhbmQgZmFsbCBiYWNr
IHRvIG5vbi1wZXJzaXN0ZW50IG1vZGUuIEJhY2tlbmQgaW1wbGVtZW50YXRpb25zIG1heQotICog
ICAgICBzaHJpbmsgb3IgZXhwYW5kIHRoZSBudW1iZXIgb2YgcGVyc2lzdGVudGx5IG1hcHBlZCBn
cmFudHMgd2l0aG91dAotICogICAgICBub3RpZnlpbmcgdGhlIGZyb250ZW5kIGRlcGVuZGluZyBv
biBtZW1vcnkgY29uc3RyYWludHMgKHRoaXMgbWlnaHQKLSAqICAgICAgY2F1c2UgYSBwZXJmb3Jt
YW5jZSBkZWdyYWRhdGlvbikuCi0gKgotICogICAgICBJZiBhIGJhY2tlbmQgZHJpdmVyIHdhbnRz
IHRvIGxpbWl0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBwZXJzaXN0ZW50bHkKLSAqICAgICAgbWFw
cGVkIGdyYW50cyB0byBhIHZhbHVlIGxlc3MgdGhhbiBSSU5HX1NJWkUgKgotICogICAgICBCTEtJ
Rl9NQVhfU0VHTUVOVFNfUEVSX1JFUVVFU1QgYSBMUlUgc3RyYXRlZ3kgc2hvdWxkIGJlIHVzZWQg
dG8KLSAqICAgICAgZGlzY2FyZCB0aGUgZ3JhbnRzIHRoYXQgYXJlIGxlc3MgY29tbW9ubHkgdXNl
ZC4gVXNpbmcgYSBMUlUgaW4gdGhlCi0gKiAgICAgIGJhY2tlbmQgZHJpdmVyIHBhaXJlZCB3aXRo
IGEgTElGTyBxdWV1ZSBpbiB0aGUgZnJvbnRlbmQgd2lsbAotICogICAgICBhbGxvdyB1cyB0byBo
YXZlIGJldHRlciBwZXJmb3JtYW5jZSBpbiB0aGlzIHNjZW5hcmlvLgotICoKLSAqLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0gUmVxdWVzdCBUcmFuc3BvcnQgUGFyYW1ldGVycyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLSAqCi0gKiBtYXgtcmluZy1wYWdlLW9yZGVyCi0gKiAgICAgIFZhbHVlczog
ICAgICAgICA8dWludDMyX3Q+Ci0gKiAgICAgIERlZmF1bHQgVmFsdWU6ICAwCi0gKiAgICAgIE5v
dGVzOiAgICAgICAgICAxLCAzCi0gKgotICogICAgICBUaGUgbWF4aW11bSBzdXBwb3J0ZWQgc2l6
ZSBvZiB0aGUgcmVxdWVzdCByaW5nIGJ1ZmZlciBpbiB1bml0cyBvZgotICogICAgICBsYihtYWNo
aW5lIHBhZ2VzKS4gKGUuZy4gMCA9PSAxIHBhZ2UsICAxID0gMiBwYWdlcywgMiA9PSA0IHBhZ2Vz
LAotICogICAgICBldGMuKS4KLSAqCi0gKiBtYXgtcmluZy1wYWdlcwotICogICAgICBWYWx1ZXM6
ICAgICAgICAgPHVpbnQzMl90PgotICogICAgICBEZWZhdWx0IFZhbHVlOiAgMQotICogICAgICBO
b3RlczogICAgICAgICAgREVQUkVDQVRFRCwgMiwgMwotICoKLSAqICAgICAgVGhlIG1heGltdW0g
c3VwcG9ydGVkIHNpemUgb2YgdGhlIHJlcXVlc3QgcmluZyBidWZmZXIgaW4gdW5pdHMgb2YKLSAq
ICAgICAgbWFjaGluZSBwYWdlcy4gIFRoZSB2YWx1ZSBtdXN0IGJlIGEgcG93ZXIgb2YgMi4KLSAq
Ci0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQmFja2VuZCBEZXZpY2UgUHJvcGVydGllcyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKgotICogZGlzY2FyZC1hbGlnbm1lbnQKLSAqICAg
ICAgVmFsdWVzOiAgICAgICAgIDx1aW50MzJfdD4KLSAqICAgICAgRGVmYXVsdCBWYWx1ZTogIDAK
LSAqICAgICAgTm90ZXM6ICAgICAgICAgIDQsIDUKLSAqCi0gKiAgICAgIFRoZSBvZmZzZXQsIGlu
IGJ5dGVzIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgdmlydHVhbCBibG9jayBkZXZpY2UsCi0g
KiAgICAgIHRvIHRoZSBmaXJzdCwgYWRkcmVzc2FibGUsIGRpc2NhcmQgZXh0ZW50IG9uIHRoZSB1
bmRlcmx5aW5nIGRldmljZS4KLSAqCi0gKiBkaXNjYXJkLWdyYW51bGFyaXR5Ci0gKiAgICAgIFZh
bHVlczogICAgICAgICA8dWludDMyX3Q+Ci0gKiAgICAgIERlZmF1bHQgVmFsdWU6ICA8InNlY3Rv
ci1zaXplIj4KLSAqICAgICAgTm90ZXM6ICAgICAgICAgIDQKLSAqCi0gKiAgICAgIFRoZSBzaXpl
LCBpbiBieXRlcywgb2YgdGhlIGluZGl2aWR1YWxseSBhZGRyZXNzYWJsZSBkaXNjYXJkIGV4dGVu
dHMKLSAqICAgICAgb2YgdGhlIHVuZGVybHlpbmcgZGV2aWNlLgotICoKLSAqIGRpc2NhcmQtc2Vj
dXJlCi0gKiAgICAgIFZhbHVlczogICAgICAgICAwLzEgKGJvb2xlYW4pCi0gKiAgICAgIERlZmF1
bHQgVmFsdWU6ICAwCi0gKiAgICAgIE5vdGVzOiAgICAgICAgICAxMAotICoKLSAqICAgICAgQSB2
YWx1ZSBvZiAiMSIgaW5kaWNhdGVzIHRoYXQgdGhlIGJhY2tlbmQgY2FuIHByb2Nlc3MgQkxLSUZf
T1BfRElTQ0FSRAotICogICAgICByZXF1ZXN0cyB3aXRoIHRoZSBCTEtJRl9ESVNDQVJEX1NFQ1VS
RSBmbGFnIHNldC4KLSAqCi0gKiBpbmZvCi0gKiAgICAgIFZhbHVlczogICAgICAgICA8dWludDMy
X3Q+IChiaXRtYXApCi0gKgotICogICAgICBBIGNvbGxlY3Rpb24gb2YgYml0IGZsYWdzIGRlc2Ny
aWJpbmcgYXR0cmlidXRlcyBvZiB0aGUgYmFja2luZwotICogICAgICBkZXZpY2UuICBUaGUgVkRJ
U0tfKiBtYWNyb3MgZGVmaW5lIHRoZSBtZWFuaW5nIG9mIGVhY2ggYml0Ci0gKiAgICAgIGxvY2F0
aW9uLgotICoKLSAqIHNlY3Rvci1zaXplCi0gKiAgICAgIFZhbHVlczogICAgICAgICA8dWludDMy
X3Q+Ci0gKgotICogICAgICBUaGUgbG9naWNhbCBzZWN0b3Igc2l6ZSwgaW4gYnl0ZXMsIG9mIHRo
ZSBiYWNrZW5kIGRldmljZS4KLSAqCi0gKiBwaHlzaWNhbC1zZWN0b3Itc2l6ZQotICogICAgICBW
YWx1ZXM6ICAgICAgICAgPHVpbnQzMl90PgotICoKLSAqICAgICAgVGhlIHBoeXNpY2FsIHNlY3Rv
ciBzaXplLCBpbiBieXRlcywgb2YgdGhlIGJhY2tlbmQgZGV2aWNlLgotICoKLSAqIHNlY3RvcnMK
LSAqICAgICAgVmFsdWVzOiAgICAgICAgIDx1aW50NjRfdD4KLSAqCi0gKiAgICAgIFRoZSBzaXpl
IG9mIHRoZSBiYWNrZW5kIGRldmljZSwgZXhwcmVzc2VkIGluIHVuaXRzIG9mIGl0cyBsb2dpY2Fs
Ci0gKiAgICAgIHNlY3RvciBzaXplICgic2VjdG9yLXNpemUiKS4KLSAqCi0gKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyb250ZW5kIFhlbkJ1cyBO
b2RlcwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSBSZXF1ZXN0IFRyYW5zcG9ydCBQYXJhbWV0ZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0g
KgotICogZXZlbnQtY2hhbm5lbAotICogICAgICBWYWx1ZXM6ICAgICAgICAgPHVpbnQzMl90Pgot
ICoKLSAqICAgICAgVGhlIGlkZW50aWZpZXIgb2YgdGhlIFhlbiBldmVudCBjaGFubmVsIHVzZWQg
dG8gc2lnbmFsIGFjdGl2aXR5Ci0gKiAgICAgIGluIHRoZSByaW5nIGJ1ZmZlci4KLSAqCi0gKiBy
aW5nLXJlZgotICogICAgICBWYWx1ZXM6ICAgICAgICAgPHVpbnQzMl90PgotICogICAgICBOb3Rl
czogICAgICAgICAgNgotICoKLSAqICAgICAgVGhlIFhlbiBncmFudCByZWZlcmVuY2UgZ3JhbnRp
bmcgcGVybWlzc2lvbiBmb3IgdGhlIGJhY2tlbmQgdG8gbWFwCi0gKiAgICAgIHRoZSBzb2xlIHBh
Z2UgaW4gYSBzaW5nbGUgcGFnZSBzaXplZCByaW5nIGJ1ZmZlci4KLSAqCi0gKiByaW5nLXJlZiV1
Ci0gKiAgICAgIFZhbHVlczogICAgICAgICA8dWludDMyX3Q+Ci0gKiAgICAgIE5vdGVzOiAgICAg
ICAgICA2Ci0gKgotICogICAgICBGb3IgYSBmcm9udGVuZCBwcm92aWRpbmcgYSBtdWx0aS1wYWdl
IHJpbmcsIGEgIm51bWJlciBvZiByaW5nIHBhZ2VzIgotICogICAgICBzaXplZCBsaXN0IG9mIG5v
ZGVzLCBlYWNoIGNvbnRhaW5pbmcgYSBYZW4gZ3JhbnQgcmVmZXJlbmNlIGdyYW50aW5nCi0gKiAg
ICAgIHBlcm1pc3Npb24gZm9yIHRoZSBiYWNrZW5kIHRvIG1hcCB0aGUgcGFnZSBvZiB0aGUgcmlu
ZyBsb2NhdGVkCi0gKiAgICAgIGF0IHBhZ2UgaW5kZXggIiV1Ii4gIFBhZ2UgaW5kZXhlcyBhcmUg
emVybyBiYXNlZC4KLSAqCi0gKiBwcm90b2NvbAotICogICAgICBWYWx1ZXM6ICAgICAgICAgc3Ry
aW5nIChYRU5fSU9fUFJPVE9fQUJJXyopCi0gKiAgICAgIERlZmF1bHQgVmFsdWU6ICBYRU5fSU9f
UFJPVE9fQUJJX05BVElWRQotICoKLSAqICAgICAgVGhlIG1hY2hpbmUgQUJJIHJ1bGVzIGdvdmVy
bmluZyB0aGUgZm9ybWF0IG9mIGFsbCByaW5nIHJlcXVlc3QgYW5kCi0gKiAgICAgIHJlc3BvbnNl
IHN0cnVjdHVyZXMuCi0gKgotICogcmluZy1wYWdlLW9yZGVyCi0gKiAgICAgIFZhbHVlczogICAg
ICAgICA8dWludDMyX3Q+Ci0gKiAgICAgIERlZmF1bHQgVmFsdWU6ICAwCi0gKiAgICAgIE1heGlt
dW0gVmFsdWU6ICBNQVgoZmZzKG1heC1yaW5nLXBhZ2VzKSAtIDEsIG1heC1yaW5nLXBhZ2Utb3Jk
ZXIpCi0gKiAgICAgIE5vdGVzOiAgICAgICAgICAxLCAzCi0gKgotICogICAgICBUaGUgc2l6ZSBv
ZiB0aGUgZnJvbnRlbmQgYWxsb2NhdGVkIHJlcXVlc3QgcmluZyBidWZmZXIgaW4gdW5pdHMKLSAq
ICAgICAgb2YgbGIobWFjaGluZSBwYWdlcykuIChlLmcuIDAgPT0gMSBwYWdlLCAxID0gMiBwYWdl
cywgMiA9PSA0IHBhZ2VzLAotICogICAgICBldGMuKS4KLSAqCi0gKiBudW0tcmluZy1wYWdlcwot
ICogICAgICBWYWx1ZXM6ICAgICAgICAgPHVpbnQzMl90PgotICogICAgICBEZWZhdWx0IFZhbHVl
OiAgMQotICogICAgICBNYXhpbXVtIFZhbHVlOiAgTUFYKG1heC1yaW5nLXBhZ2VzLCgweDEgPDwg
bWF4LXJpbmctcGFnZS1vcmRlcikpCi0gKiAgICAgIE5vdGVzOiAgICAgICAgICBERVBSRUNBVEVE
LCAyLCAzCi0gKgotICogICAgICBUaGUgc2l6ZSBvZiB0aGUgZnJvbnRlbmQgYWxsb2NhdGVkIHJl
cXVlc3QgcmluZyBidWZmZXIgaW4gdW5pdHMgb2YKLSAqICAgICAgbWFjaGluZSBwYWdlcy4gIFRo
ZSB2YWx1ZSBtdXN0IGJlIGEgcG93ZXIgb2YgMi4KLSAqCi0gKiBmZWF0dXJlLXBlcnNpc3RlbnQK
LSAqICAgICAgVmFsdWVzOiAgICAgICAgIDAvMSAoYm9vbGVhbikKLSAqICAgICAgRGVmYXVsdCBW
YWx1ZTogIDAKLSAqICAgICAgTm90ZXM6IDcsIDgsIDkKLSAqCi0gKiAgICAgIEEgdmFsdWUgb2Yg
IjEiIGluZGljYXRlcyB0aGF0IHRoZSBmcm9udGVuZCB3aWxsIHJldXNlIHRoZSBzYW1lIGdyYW50
cwotICogICAgICBmb3IgYWxsIHRyYW5zYWN0aW9ucywgYWxsb3dpbmcgdGhlIGJhY2tlbmQgdG8g
bWFwIHRoZW0gd2l0aCB3cml0ZQotICogICAgICBhY2Nlc3MgKGV2ZW4gd2hlbiBpdCBzaG91bGQg
YmUgcmVhZC1vbmx5KS4gSWYgdGhlIGZyb250ZW5kIGhpdHMgdGhlCi0gKiAgICAgIG1heGltdW0g
bnVtYmVyIG9mIGFsbG93ZWQgcGVyc2lzdGVudGx5IG1hcHBlZCBncmFudHMsIGl0IGNhbiBmYWxs
YmFjawotICogICAgICB0byBub24gcGVyc2lzdGVudCBtb2RlLiBUaGlzIHdpbGwgY2F1c2UgYSBw
ZXJmb3JtYW5jZSBkZWdyYWRhdGlvbiwKLSAqICAgICAgc2luY2UgdGhlIHRoZSBiYWNrZW5kIGRy
aXZlciB3aWxsIHN0aWxsIHRyeSB0byBtYXAgdGhvc2UgZ3JhbnRzCi0gKiAgICAgIHBlcnNpc3Rl
bnRseS4gU2luY2UgdGhlIHBlcnNpc3RlbnQgZ3JhbnRzIHByb3RvY29sIGlzIGNvbXBhdGlibGUg
d2l0aAotICogICAgICB0aGUgcHJldmlvdXMgcHJvdG9jb2wsIGEgZnJvbnRlbmQgZHJpdmVyIGNh
biBjaG9vc2UgdG8gd29yayBpbgotICogICAgICBwZXJzaXN0ZW50IG1vZGUgZXZlbiB3aGVuIHRo
ZSBiYWNrZW5kIGRvZXNuJ3Qgc3VwcG9ydCBpdC4KLSAqCi0gKiAgICAgIEl0IGlzIHJlY29tbWVu
ZGVkIHRoYXQgdGhlIGZyb250ZW5kIGRyaXZlciBzdG9yZXMgdGhlIHBlcnNpc3RlbnRseQotICog
ICAgICBtYXBwZWQgZ3JhbnRzIGluIGEgTElGTyBxdWV1ZSwgc28gYSBzdWJzZXQgb2YgYWxsIHBl
cnNpc3RlbnRseSBtYXBwZWQKLSAqICAgICAgZ3JhbnRzIGdldHMgdXNlZCBjb21tb25seS4gVGhp
cyBpcyBkb25lIGluIGNhc2UgdGhlIGJhY2tlbmQgZHJpdmVyCi0gKiAgICAgIGRlY2lkZXMgdG8g
bGltaXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIHBlcnNpc3RlbnRseSBtYXBwZWQgZ3JhbnRzCi0g
KiAgICAgIHRvIGEgdmFsdWUgbGVzcyB0aGFuIFJJTkdfU0laRSAqIEJMS0lGX01BWF9TRUdNRU5U
U19QRVJfUkVRVUVTVC4KLSAqCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVmlydHVhbCBE
ZXZpY2UgUHJvcGVydGllcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKgotICogZGV2aWNl
LXR5cGUKLSAqICAgICAgVmFsdWVzOiAgICAgICAgICJkaXNrIiwgImNkcm9tIiwgImZsb3BweSIs
IGV0Yy4KLSAqCi0gKiB2aXJ0dWFsLWRldmljZQotICogICAgICBWYWx1ZXM6ICAgICAgICAgPHVp
bnQzMl90PgotICoKLSAqICAgICAgQSB2YWx1ZSBpbmRpY2F0aW5nIHRoZSBwaHlzaWNhbCBkZXZp
Y2UgdG8gdmlydHVhbGl6ZSB3aXRoaW4gdGhlCi0gKiAgICAgIGZyb250ZW5kJ3MgZG9tYWluLiAg
KGUuZy4gIlRoZSBmaXJzdCBBVEEgZGlzayIsICJUaGUgdGhpcmQgU0NTSQotICogICAgICBkaXNr
IiwgZXRjLikKLSAqCi0gKiAgICAgIFNlZSBkb2NzL21pc2MvdmJkLWludGVyZmFjZS50eHQgZm9y
IGRldGFpbHMgb24gdGhlIGZvcm1hdCBvZiB0aGlzCi0gKiAgICAgIHZhbHVlLgotICoKLSAqIE5v
dGVzCi0gKiAtLS0tLQotICogKDEpIE11bHRpLXBhZ2UgcmluZyBidWZmZXIgc2NoZW1lIGZpcnN0
IGRldmVsb3BlZCBpbiB0aGUgQ2l0cml4IFhlblNlcnZlcgotICogICAgIFBWIGRyaXZlcnMuCi0g
KiAoMikgTXVsdGktcGFnZSByaW5nIGJ1ZmZlciBzY2hlbWUgZmlyc3QgdXNlZCBpbiBzb21lIFJl
ZEhhdCBkaXN0cmlidXRpb25zCi0gKiAgICAgaW5jbHVkaW5nIGEgZGlzdHJpYnV0aW9uIGRlcGxv
eWVkIG9uIGNlcnRhaW4gbm9kZXMgb2YgdGhlIEFtYXpvbgotICogICAgIEVDMiBjbHVzdGVyLgot
ICogKDMpIFN1cHBvcnQgZm9yIG11bHRpLXBhZ2UgcmluZyBidWZmZXJzIHdhcyBpbXBsZW1lbnRl
ZCBpbmRlcGVuZGVudGx5LAotICogICAgIGluIHNsaWdodGx5IGRpZmZlcmVudCBmb3JtcywgYnkg
Ym90aCBDaXRyaXggYW5kIFJlZEhhdC9BbWF6b24uCi0gKiAgICAgRm9yIGZ1bGwgaW50ZXJvcGVy
YWJpbGl0eSwgYmxvY2sgZnJvbnQgYW5kIGJhY2tlbmRzIHNob3VsZCBwdWJsaXNoCi0gKiAgICAg
aWRlbnRpY2FsIHJpbmcgcGFyYW1ldGVycywgYWRqdXN0ZWQgZm9yIHVuaXQgZGlmZmVyZW5jZXMs
IHRvIHRoZQotICogICAgIFhlblN0b3JlIG5vZGVzIHVzZWQgaW4gYm90aCBzY2hlbWVzLgotICog
KDQpIERldmljZXMgdGhhdCBzdXBwb3J0IGRpc2NhcmQgZnVuY3Rpb25hbGl0eSBtYXkgaW50ZXJu
YWxseSBhbGxvY2F0ZSBzcGFjZQotICogICAgIChkaXNjYXJkYWJsZSBleHRlbnRzKSBpbiB1bml0
cyB0aGF0IGFyZSBsYXJnZXIgdGhhbiB0aGUgZXhwb3J0ZWQgbG9naWNhbAotICogICAgIGJsb2Nr
IHNpemUuIElmIHRoZSBiYWNraW5nIGRldmljZSBoYXMgc3VjaCBkaXNjYXJkYWJsZSBleHRlbnRz
IHRoZQotICogICAgIGJhY2tlbmQgc2hvdWxkIHByb3ZpZGUgYm90aCBkaXNjYXJkLWdyYW51bGFy
aXR5IGFuZCBkaXNjYXJkLWFsaWdubWVudC4KLSAqICAgICBQcm92aWRpbmcganVzdCBvbmUgb2Yg
dGhlIHR3byBtYXkgYmUgY29uc2lkZXJlZCBhbiBlcnJvciBieSB0aGUgZnJvbnRlbmQuCi0gKiAg
ICAgQmFja2VuZHMgc3VwcG9ydGluZyBkaXNjYXJkIHNob3VsZCBpbmNsdWRlIGRpc2NhcmQtZ3Jh
bnVsYXJpdHkgYW5kCi0gKiAgICAgZGlzY2FyZC1hbGlnbm1lbnQgZXZlbiBpZiBpdCBzdXBwb3J0
cyBkaXNjYXJkaW5nIGluZGl2aWR1YWwgc2VjdG9ycy4KLSAqICAgICBGcm9udGVuZHMgc2hvdWxk
IGFzc3VtZSBkaXNjYXJkLWFsaWdubWVudCA9PSAwIGFuZCBkaXNjYXJkLWdyYW51bGFyaXR5Ci0g
KiAgICAgPT0gc2VjdG9yIHNpemUgaWYgdGhlc2Uga2V5cyBhcmUgbWlzc2luZy4KLSAqICg1KSBU
aGUgZGlzY2FyZC1hbGlnbm1lbnQgcGFyYW1ldGVyIGFsbG93cyBhIHBoeXNpY2FsIGRldmljZSB0
byBiZQotICogICAgIHBhcnRpdGlvbmVkIGludG8gdmlydHVhbCBkZXZpY2VzIHRoYXQgZG8gbm90
IG5lY2Vzc2FyaWx5IGJlZ2luIG9yCi0gKiAgICAgZW5kIG9uIGEgZGlzY2FyZGFibGUgZXh0ZW50
IGJvdW5kYXJ5LgotICogKDYpIFdoZW4gdGhlcmUgaXMgb25seSBhIHNpbmdsZSBwYWdlIGFsbG9j
YXRlZCB0byB0aGUgcmVxdWVzdCByaW5nLAotICogICAgICdyaW5nLXJlZicgaXMgdXNlZCB0byBj
b21tdW5pY2F0ZSB0aGUgZ3JhbnQgcmVmZXJlbmNlIGZvciB0aGlzCi0gKiAgICAgcGFnZSB0byB0
aGUgYmFja2VuZC4gIFdoZW4gdXNpbmcgYSBtdWx0aS1wYWdlIHJpbmcsIHRoZSAncmluZy1yZWYn
Ci0gKiAgICAgbm9kZSBpcyBub3QgY3JlYXRlZC4gIEluc3RlYWQgJ3JpbmctcmVmMCcgLSAncmlu
Zy1yZWZOJyBhcmUgdXNlZC4KLSAqICg3KSBXaGVuIHVzaW5nIHBlcnNpc3RlbnQgZ3JhbnRzIGRh
dGEgaGFzIHRvIGJlIGNvcGllZCBmcm9tL3RvIHRoZSBwYWdlCi0gKiAgICAgd2hlcmUgdGhlIGdy
YW50IGlzIGN1cnJlbnRseSBtYXBwZWQuIFRoZSBvdmVyaGVhZCBvZiBkb2luZyB0aGlzIGNvcHkK
LSAqICAgICBob3dldmVyIGRvZXNuJ3Qgc3VwcHJlc3MgdGhlIHNwZWVkIGltcHJvdmVtZW50IG9m
IG5vdCBoYXZpbmcgdG8gdW5tYXAKLSAqICAgICB0aGUgZ3JhbnRzLgotICogKDgpIFRoZSBmcm9u
dGVuZCBkcml2ZXIgaGFzIHRvIGFsbG93IHRoZSBiYWNrZW5kIGRyaXZlciB0byBtYXAgYWxsIGdy
YW50cwotICogICAgIHdpdGggd3JpdGUgYWNjZXNzLCBldmVuIHdoZW4gdGhleSBzaG91bGQgYmUg
bWFwcGVkIHJlYWQtb25seSwgc2luY2UKLSAqICAgICBmdXJ0aGVyIHJlcXVlc3RzIG1heSByZXVz
ZSB0aGVzZSBncmFudHMgYW5kIHJlcXVpcmUgd3JpdGUgcGVybWlzc2lvbnMuCi0gKiAoOSkgTGlu
dXggaW1wbGVtZW50YXRpb24gZG9lc24ndCBoYXZlIGEgbGltaXQgb24gdGhlIG1heGltdW0gbnVt
YmVyIG9mCi0gKiAgICAgZ3JhbnRzIHRoYXQgY2FuIGJlIHBlcnNpc3RlbnRseSBtYXBwZWQgaW4g
dGhlIGZyb250ZW5kIGRyaXZlciwgYnV0Ci0gKiAgICAgZHVlIHRvIHRoZSBmcm9udGVudCBkcml2
ZXIgaW1wbGVtZW50YXRpb24gaXQgc2hvdWxkIG5ldmVyIGJlIGJpZ2dlcgotICogICAgIHRoYW4g
UklOR19TSVpFICogQkxLSUZfTUFYX1NFR01FTlRTX1BFUl9SRVFVRVNULgotICooMTApIFRoZSBk
aXNjYXJkLXNlY3VyZSBwcm9wZXJ0eSBtYXkgYmUgcHJlc2VudCBhbmQgd2lsbCBiZSBzZXQgdG8g
MSBpZiB0aGUKLSAqICAgICBiYWNraW5nIGRldmljZSBzdXBwb3J0cyBzZWN1cmUgZGlzY2FyZC4K
LSAqLworKiBGZWF0dXJlIGFuZCBQYXJhbWV0ZXIgTmVnb3RpYXRpb24KKyogPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09CisqIFRoZSB0d28gaGFsdmVzIG9mIGEgWGVuIGJsb2NrIGRy
aXZlciB1dGlsaXplIG5vZGVzIHdpdGhpbiB0aGUgWGVuU3RvcmUgdG8KKyogY29tbXVuaWNhdGUg
Y2FwYWJpbGl0aWVzIGFuZCB0byBuZWdvdGlhdGUgb3BlcmF0aW5nIHBhcmFtZXRlcnMuICBUaGlz
CisqIHNlY3Rpb24gZW51bWVyYXRlcyB0aGVzZSBub2RlcyB3aGljaCByZXNpZGUgaW4gdGhlIHJl
c3BlY3RpdmUgZnJvbnQgYW5kCisqIGJhY2tlbmQgcG9ydGlvbnMgb2YgdGhlIFhlblN0b3JlLCBm
b2xsb3dpbmcgdGhlIFhlbkJ1cyBjb252ZW50aW9uLgorKgorKiBBbGwgZGF0YSBpbiB0aGUgWGVu
U3RvcmUgaXMgc3RvcmVkIGFzIHN0cmluZ3MuICBOb2RlcyBzcGVjaWZ5aW5nIG51bWVyaWMKKyog
dmFsdWVzIGFyZSBlbmNvZGVkIGluIGRlY2ltYWwuICBJbnRlZ2VyIHZhbHVlIHJhbmdlcyBsaXN0
ZWQgYmVsb3cgYXJlCisqIGV4cHJlc3NlZCBhcyBmaXhlZCBzaXplZCBpbnRlZ2VyIHR5cGVzIGNh
cGFibGUgb2Ygc3RvcmluZyB0aGUgY29udmVyc2lvbgorKiBvZiBhIHByb3Blcmx5IGZvcm1hdGVk
IG5vZGUgc3RyaW5nLCB3aXRob3V0IGxvc3Mgb2YgaW5mb3JtYXRpb24uCisqCisqIEFueSBzcGVj
aWZpZWQgZGVmYXVsdCB2YWx1ZSBpcyBpbiBlZmZlY3QgaWYgdGhlIGNvcnJlc3BvbmRpbmcgWGVu
QnVzIG5vZGUKKyogaXMgbm90IHByZXNlbnQgaW4gdGhlIFhlblN0b3JlLgorKgorKiBYZW5TdG9y
ZSBub2RlcyBpbiBzZWN0aW9ucyBtYXJrZWQgIlBSSVZBVEUiIGFyZSBzb2xlbHkgZm9yIHVzZSBi
eSB0aGUKKyogZHJpdmVyIHNpZGUgd2hvc2UgWGVuQnVzIHRyZWUgY29udGFpbnMgdGhlbS4KKyoK
KyogWGVuU3RvcmUgbm9kZXMgbWFya2VkICJERVBSRUNBVEVEIiBpbiB0aGVpciBub3RlcyBzZWN0
aW9uIHNob3VsZCBvbmx5IGJlCisqIHVzZWQgdG8gcHJvdmlkZSBpbnRlcm9wZXJhYmlsaXR5IHdp
dGggbGVnYWN5IGltcGxlbWVudGF0aW9ucy4KKyoKKyogU2VlIHRoZSBYZW5CdXMgc3RhdGUgdHJh
bnNpdGlvbiBkaWFncmFtIGJlbG93IGZvciBkZXRhaWxzIG9uIHdoZW4gWGVuQnVzCisqIG5vZGVz
IG11c3QgYmUgcHVibGlzaGVkIGFuZCB3aGVuIHRoZXkgY2FuIGJlIHF1ZXJpZWQuCisqCisqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYWNrZW5kIFhl
bkJ1cyBOb2RlcworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyotLS0tLS0tLS0tLS0tLS0tLS0g
QmFja2VuZCBEZXZpY2UgSWRlbnRpZmljYXRpb24gKFBSSVZBVEUpIC0tLS0tLS0tLS0tLS0tLS0t
LQorKgorKiBtb2RlCisqICAgICAgVmFsdWVzOiAgICAgICAgICJyIiAocmVhZCBvbmx5KSwgInci
ICh3cml0YWJsZSkKKyoKKyogICAgICBUaGUgcmVhZCBvciB3cml0ZSBhY2Nlc3MgcGVybWlzc2lv
bnMgdG8gdGhlIGJhY2tpbmcgc3RvcmUgdG8gYmUKKyogICAgICBncmFudGVkIHRvIHRoZSBmcm9u
dGVuZC4KKyoKKyogcGFyYW1zCisqICAgICAgVmFsdWVzOiAgICAgICAgIHN0cmluZworKgorKiAg
ICAgIEEgZnJlZSBmb3JtYXR0ZWQgc3RyaW5nIHByb3ZpZGluZyBzdWZmaWNpZW50IGluZm9ybWF0
aW9uIGZvciB0aGUKKyogICAgICBob3RwbHVnIHNjcmlwdCB0byBhdHRhY2ggdGhlIGRldmljZSBh
bmQgcHJvdmlkZSBhIHN1aXRhYmxlCisqICAgICAgaGFuZGxlciAoaWU6IGEgYmxvY2sgZGV2aWNl
KSBmb3IgYmxrYmFjayB0byB1c2UuCisqCisqIHBoeXNpY2FsLWRldmljZQorKiAgICAgIFZhbHVl
czogICAgICAgICAiTUFKT1I6TUlOT1IiCisqICAgICAgTm90ZXM6IDExCisqCisqICAgICAgTUFK
T1IgYW5kIE1JTk9SIGFyZSB0aGUgbWFqb3IgbnVtYmVyIGFuZCBtaW5vciBudW1iZXIgb2YgdGhl
CisqICAgICAgYmFja2luZyBkZXZpY2UgcmVzcGVjdGl2ZWx5LgorKgorKiBwaHlzaWNhbC1kZXZp
Y2UtcGF0aAorKiAgICAgIFZhbHVlczogICAgICAgICBwYXRoIHN0cmluZworKgorKiAgICAgIEEg
c3RyaW5nIHRoYXQgY29udGFpbnMgdGhlIGFic29sdXRlIHBhdGggdG8gdGhlIGRpc2sgaW1hZ2Uu
IE9uCisqICAgICAgTmV0QlNEIGFuZCBMaW51eCB0aGlzIGlzIGFsd2F5cyBhIGJsb2NrIGRldmlj
ZSwgd2hpbGUgb24gRnJlZUJTRAorKiAgICAgIGl0IGNhbiBiZSBlaXRoZXIgYSBibG9jayBkZXZp
Y2Ugb3IgYSByZWd1bGFyIGZpbGUuCisqCisqIHR5cGUKKyogICAgICBWYWx1ZXM6ICAgICAgICAg
ImZpbGUiLCAicGh5IiwgInRhcCIKKyoKKyogICAgICBUaGUgdHlwZSBvZiB0aGUgYmFja2luZyBk
ZXZpY2Uvb2JqZWN0LgorKgorKgorKiBkaXJlY3QtaW8tc2FmZQorKiAgICAgIFZhbHVlczogICAg
ICAgICAwLzEgKGJvb2xlYW4pCisqICAgICAgRGVmYXVsdCBWYWx1ZTogIDAKKyoKKyogICAgICBU
aGUgdW5kZXJseWluZyBzdG9yYWdlIGlzIG5vdCBhZmZlY3RlZCBieSB0aGUgZGlyZWN0IElPIG1l
bW9yeQorKiAgICAgIGxpZmV0aW1lIGJ1Zy4gIFNlZToKKyogICAgICAgIGh0dHA6Ly9saXN0cy54
ZW4ub3JnL2FyY2hpdmVzL2h0bWwveGVuLWRldmVsLzIwMTItMTIvbXNnMDExNTQuaHRtbAorKgor
KiAgICAgIFRoZXJlZm9yZSB0aGlzIG9wdGlvbiBnaXZlcyB0aGUgYmFja2VuZCBwZXJtaXNzaW9u
IHRvIHVzZQorKiAgICAgIE9fRElSRUNULCBub3R3aXRoc3RhbmRpbmcgdGhhdCBidWcuCisqCisq
ICAgICAgVGhhdCBpcywgaWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCwgdXNlIG9mIE9fRElSRUNU
IGlzIHNhZmUsCisqICAgICAgaW4gY2lyY3Vtc3RhbmNlcyB3aGVyZSB3ZSB3b3VsZCBub3JtYWxs
eSBoYXZlIGF2b2lkZWQgaXQgYXMgYQorKiAgICAgIHdvcmthcm91bmQgZm9yIHRoYXQgYnVnLiAg
VGhpcyBvcHRpb24gaXMgbm90IHJlbGV2YW50IGZvciBhbGwKKyogICAgICBiYWNrZW5kcywgYW5k
IGV2ZW4gbm90IG5lY2Vzc2FyaWx5IHN1cHBvcnRlZCBmb3IgdGhvc2UgZm9yCisqICAgICAgd2hp
Y2ggaXQgaXMgcmVsZXZhbnQuICBBIGJhY2tlbmQgd2hpY2gga25vd3MgdGhhdCBpdCBpcyBub3QK
KyogICAgICBhZmZlY3RlZCBieSB0aGUgYnVnIGNhbiBpZ25vcmUgdGhpcyBvcHRpb24uCisqCisq
ICAgICAgVGhpcyBvcHRpb24gZG9lc24ndCByZXF1aXJlIGEgYmFja2VuZCB0byB1c2UgT19ESVJF
Q1QsIHNvIGl0CisqICAgICAgc2hvdWxkIG5vdCBiZSB1c2VkIHRvIHRyeSB0byBjb250cm9sIHRo
ZSBjYWNoaW5nIGJlaGF2aW91ci4KKyoKKyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gRmVhdHVyZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIGZlYXR1
cmUtYmFycmllcgorKiAgICAgIFZhbHVlczogICAgICAgICAwLzEgKGJvb2xlYW4pCisqICAgICAg
RGVmYXVsdCBWYWx1ZTogIDAKKyoKKyogICAgICBBIHZhbHVlIG9mICIxIiBpbmRpY2F0ZXMgdGhh
dCB0aGUgYmFja2VuZCBjYW4gcHJvY2VzcyByZXF1ZXN0cworKiAgICAgIGNvbnRhaW5pbmcgdGhl
IEJMS0lGX09QX1dSSVRFX0JBUlJJRVIgcmVxdWVzdCBvcGNvZGUuICBSZXF1ZXN0cworKiAgICAg
IG9mIHRoaXMgdHlwZSBtYXkgc3RpbGwgYmUgcmV0dXJuZWQgYXQgYW55IHRpbWUgd2l0aCB0aGUK
KyogICAgICBCTEtJRl9SU1BfRU9QTk9UU1VQUCByZXN1bHQgY29kZS4KKyoKKyogZmVhdHVyZS1m
bHVzaC1jYWNoZQorKiAgICAgIFZhbHVlczogICAgICAgICAwLzEgKGJvb2xlYW4pCisqICAgICAg
RGVmYXVsdCBWYWx1ZTogIDAKKyoKKyogICAgICBBIHZhbHVlIG9mICIxIiBpbmRpY2F0ZXMgdGhh
dCB0aGUgYmFja2VuZCBjYW4gcHJvY2VzcyByZXF1ZXN0cworKiAgICAgIGNvbnRhaW5pbmcgdGhl
IEJMS0lGX09QX0ZMVVNIX0RJU0tDQUNIRSByZXF1ZXN0IG9wY29kZS4gIFJlcXVlc3RzCisqICAg
ICAgb2YgdGhpcyB0eXBlIG1heSBzdGlsbCBiZSByZXR1cm5lZCBhdCBhbnkgdGltZSB3aXRoIHRo
ZQorKiAgICAgIEJMS0lGX1JTUF9FT1BOT1RTVVBQIHJlc3VsdCBjb2RlLgorKgorKiBmZWF0dXJl
LWRpc2NhcmQKKyogICAgICBWYWx1ZXM6ICAgICAgICAgMC8xIChib29sZWFuKQorKiAgICAgIERl
ZmF1bHQgVmFsdWU6ICAwCisqCisqICAgICAgQSB2YWx1ZSBvZiAiMSIgaW5kaWNhdGVzIHRoYXQg
dGhlIGJhY2tlbmQgY2FuIHByb2Nlc3MgcmVxdWVzdHMKKyogICAgICBjb250YWluaW5nIHRoZSBC
TEtJRl9PUF9ESVNDQVJEIHJlcXVlc3Qgb3Bjb2RlLiAgUmVxdWVzdHMKKyogICAgICBvZiB0aGlz
IHR5cGUgbWF5IHN0aWxsIGJlIHJldHVybmVkIGF0IGFueSB0aW1lIHdpdGggdGhlCisqICAgICAg
QkxLSUZfUlNQX0VPUE5PVFNVUFAgcmVzdWx0IGNvZGUuCisqCisqIGZlYXR1cmUtcGVyc2lzdGVu
dAorKiAgICAgIFZhbHVlczogICAgICAgICAwLzEgKGJvb2xlYW4pCisqICAgICAgRGVmYXVsdCBW
YWx1ZTogIDAKKyogICAgICBOb3RlczogNworKgorKiAgICAgIEEgdmFsdWUgb2YgIjEiIGluZGlj
YXRlcyB0aGF0IHRoZSBiYWNrZW5kIGNhbiBrZWVwIHRoZSBncmFudHMgdXNlZAorKiAgICAgIGJ5
IHRoZSBmcm9udGVuZCBkcml2ZXIgbWFwcGVkLCBzbyB0aGUgc2FtZSBzZXQgb2YgZ3JhbnRzIHNo
b3VsZCBiZQorKiAgICAgIHVzZWQgaW4gYWxsIHRyYW5zYWN0aW9ucy4gVGhlIG1heGltdW0gbnVt
YmVyIG9mIGdyYW50cyB0aGUgYmFja2VuZAorKiAgICAgIGNhbiBtYXAgcGVyc2lzdGVudGx5IGRl
cGVuZHMgb24gdGhlIGltcGxlbWVudGF0aW9uLCBidXQgaWRlYWxseSBpdAorKiAgICAgIHNob3Vs
ZCBiZSBSSU5HX1NJWkUgKiBCTEtJRl9NQVhfU0VHTUVOVFNfUEVSX1JFUVVFU1QuIFVzaW5nIHRo
aXMKKyogICAgICBmZWF0dXJlIHRoZSBiYWNrZW5kIGRvZXNuJ3QgbmVlZCB0byB1bm1hcCBlYWNo
IGdyYW50LCBwcmV2ZW50aW5nCisqICAgICAgY29zdGx5IFRMQiBmbHVzaGVzLiBUaGUgYmFja2Vu
ZCBkcml2ZXIgc2hvdWxkIG9ubHkgbWFwIGdyYW50cworKiAgICAgIHBlcnNpc3RlbnRseSBpZiB0
aGUgZnJvbnRlbmQgc3VwcG9ydHMgaXQuIElmIGEgYmFja2VuZCBkcml2ZXIgY2hvb3NlcworKiAg
ICAgIHRvIHVzZSB0aGUgcGVyc2lzdGVudCBwcm90b2NvbCB3aGVuIHRoZSBmcm9udGVuZCBkb2Vz
bid0IHN1cHBvcnQgaXQsCisqICAgICAgaXQgd2lsbCBwcm9iYWJseSBoaXQgdGhlIG1heGltdW0g
bnVtYmVyIG9mIHBlcnNpc3RlbnRseSBtYXBwZWQgZ3JhbnRzCisqICAgICAgKGR1ZSB0byB0aGUg
ZmFjdCB0aGF0IHRoZSBmcm9udGVuZCB3b24ndCBiZSByZXVzaW5nIHRoZSBzYW1lIGdyYW50cyks
CisqICAgICAgYW5kIGZhbGwgYmFjayB0byBub24tcGVyc2lzdGVudCBtb2RlLiBCYWNrZW5kIGlt
cGxlbWVudGF0aW9ucyBtYXkKKyogICAgICBzaHJpbmsgb3IgZXhwYW5kIHRoZSBudW1iZXIgb2Yg
cGVyc2lzdGVudGx5IG1hcHBlZCBncmFudHMgd2l0aG91dAorKiAgICAgIG5vdGlmeWluZyB0aGUg
ZnJvbnRlbmQgZGVwZW5kaW5nIG9uIG1lbW9yeSBjb25zdHJhaW50cyAodGhpcyBtaWdodAorKiAg
ICAgIGNhdXNlIGEgcGVyZm9ybWFuY2UgZGVncmFkYXRpb24pLgorKgorKiAgICAgIElmIGEgYmFj
a2VuZCBkcml2ZXIgd2FudHMgdG8gbGltaXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIHBlcnNpc3Rl
bnRseQorKiAgICAgIG1hcHBlZCBncmFudHMgdG8gYSB2YWx1ZSBsZXNzIHRoYW4gUklOR19TSVpF
ICoKKyogICAgICBCTEtJRl9NQVhfU0VHTUVOVFNfUEVSX1JFUVVFU1QgYSBMUlUgc3RyYXRlZ3kg
c2hvdWxkIGJlIHVzZWQgdG8KKyogICAgICBkaXNjYXJkIHRoZSBncmFudHMgdGhhdCBhcmUgbGVz
cyBjb21tb25seSB1c2VkLiBVc2luZyBhIExSVSBpbiB0aGUKKyogICAgICBiYWNrZW5kIGRyaXZl
ciBwYWlyZWQgd2l0aCBhIExJRk8gcXVldWUgaW4gdGhlIGZyb250ZW5kIHdpbGwKKyogICAgICBh
bGxvdyB1cyB0byBoYXZlIGJldHRlciBwZXJmb3JtYW5jZSBpbiB0aGlzIHNjZW5hcmlvLgorKgor
Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJlcXVlc3QgVHJhbnNwb3J0IFBhcmFtZXRlcnMgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIG1heC1yaW5nLXBhZ2Utb3JkZXIKKyogICAgICBW
YWx1ZXM6ICAgICAgICAgPHVpbnQzMl90PgorKiAgICAgIERlZmF1bHQgVmFsdWU6ICAwCisqICAg
ICAgTm90ZXM6ICAgICAgICAgIDEsIDMKKyoKKyogICAgICBUaGUgbWF4aW11bSBzdXBwb3J0ZWQg
c2l6ZSBvZiB0aGUgcmVxdWVzdCByaW5nIGJ1ZmZlciBpbiB1bml0cyBvZgorKiAgICAgIGxiKG1h
Y2hpbmUgcGFnZXMpLiAoZS5nLiAwID09IDEgcGFnZSwgIDEgPSAyIHBhZ2VzLCAyID09IDQgcGFn
ZXMsCisqICAgICAgZXRjLikuCisqCisqIG1heC1yaW5nLXBhZ2VzCisqICAgICAgVmFsdWVzOiAg
ICAgICAgIDx1aW50MzJfdD4KKyogICAgICBEZWZhdWx0IFZhbHVlOiAgMQorKiAgICAgIE5vdGVz
OiAgICAgICAgICBERVBSRUNBVEVELCAyLCAzCisqCisqICAgICAgVGhlIG1heGltdW0gc3VwcG9y
dGVkIHNpemUgb2YgdGhlIHJlcXVlc3QgcmluZyBidWZmZXIgaW4gdW5pdHMgb2YKKyogICAgICBt
YWNoaW5lIHBhZ2VzLiAgVGhlIHZhbHVlIG11c3QgYmUgYSBwb3dlciBvZiAyLgorKgorKi0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0gQmFja2VuZCBEZXZpY2UgUHJvcGVydGllcyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisqCisqIGRpc2NhcmQtZW5hYmxlCisqICAgICAgVmFsdWVzOiAgICAg
ICAgIDAvMSAoYm9vbGVhbikKKyogICAgICBEZWZhdWx0IFZhbHVlOiAgMQorKgorKiAgICAgIFRo
aXMgb3B0aW9uYWwgcHJvcGVydHksIHNldCBieSB0aGUgdG9vbHN0YWNrLCBpbnN0cnVjdHMgdGhl
IGJhY2tlbmQKKyogICAgICB0byBvZmZlciAob3Igbm90IHRvIG9mZmVyKSBkaXNjYXJkIHRvIHRo
ZSBmcm9udGVuZC4gSWYgdGhlIHByb3BlcnR5CisqICAgICAgaXMgbWlzc2luZyB0aGUgYmFja2Vu
ZCBzaG91bGQgb2ZmZXIgZGlzY2FyZCBpZiB0aGUgYmFja2luZyBzdG9yYWdlCisqICAgICAgYWN0
dWFsbHkgc3VwcG9ydHMgaXQuCisqCisqIGRpc2NhcmQtYWxpZ25tZW50CisqICAgICAgVmFsdWVz
OiAgICAgICAgIDx1aW50MzJfdD4KKyogICAgICBEZWZhdWx0IFZhbHVlOiAgMAorKiAgICAgIE5v
dGVzOiAgICAgICAgICA0LCA1CisqCisqICAgICAgVGhlIG9mZnNldCwgaW4gYnl0ZXMgZnJvbSB0
aGUgYmVnaW5uaW5nIG9mIHRoZSB2aXJ0dWFsIGJsb2NrIGRldmljZSwKKyogICAgICB0byB0aGUg
Zmlyc3QsIGFkZHJlc3NhYmxlLCBkaXNjYXJkIGV4dGVudCBvbiB0aGUgdW5kZXJseWluZyBkZXZp
Y2UuCisqCisqIGRpc2NhcmQtZ3JhbnVsYXJpdHkKKyogICAgICBWYWx1ZXM6ICAgICAgICAgPHVp
bnQzMl90PgorKiAgICAgIERlZmF1bHQgVmFsdWU6ICA8InNlY3Rvci1zaXplIj4KKyogICAgICBO
b3RlczogICAgICAgICAgNAorKgorKiAgICAgIFRoZSBzaXplLCBpbiBieXRlcywgb2YgdGhlIGlu
ZGl2aWR1YWxseSBhZGRyZXNzYWJsZSBkaXNjYXJkIGV4dGVudHMKKyogICAgICBvZiB0aGUgdW5k
ZXJseWluZyBkZXZpY2UuCisqCisqIGRpc2NhcmQtc2VjdXJlCisqICAgICAgVmFsdWVzOiAgICAg
ICAgIDAvMSAoYm9vbGVhbikKKyogICAgICBEZWZhdWx0IFZhbHVlOiAgMAorKiAgICAgIE5vdGVz
OiAgICAgICAgICAxMAorKgorKiAgICAgIEEgdmFsdWUgb2YgIjEiIGluZGljYXRlcyB0aGF0IHRo
ZSBiYWNrZW5kIGNhbiBwcm9jZXNzIEJMS0lGX09QX0RJU0NBUkQKKyogICAgICByZXF1ZXN0cyB3
aXRoIHRoZSBCTEtJRl9ESVNDQVJEX1NFQ1VSRSBmbGFnIHNldC4KKyoKKyogaW5mbworKiAgICAg
IFZhbHVlczogICAgICAgICA8dWludDMyX3Q+IChiaXRtYXApCisqCisqICAgICAgQSBjb2xsZWN0
aW9uIG9mIGJpdCBmbGFncyBkZXNjcmliaW5nIGF0dHJpYnV0ZXMgb2YgdGhlIGJhY2tpbmcKKyog
ICAgICBkZXZpY2UuICBUaGUgVkRJU0tfKiBtYWNyb3MgZGVmaW5lIHRoZSBtZWFuaW5nIG9mIGVh
Y2ggYml0CisqICAgICAgbG9jYXRpb24uCisqCisqIHNlY3Rvci1zaXplCisqICAgICAgVmFsdWVz
OiAgICAgICAgIDx1aW50MzJfdD4KKyoKKyogICAgICBUaGUgbG9naWNhbCBzZWN0b3Igc2l6ZSwg
aW4gYnl0ZXMsIG9mIHRoZSBiYWNrZW5kIGRldmljZS4KKyoKKyogcGh5c2ljYWwtc2VjdG9yLXNp
emUKKyogICAgICBWYWx1ZXM6ICAgICAgICAgPHVpbnQzMl90PgorKgorKiAgICAgIFRoZSBwaHlz
aWNhbCBzZWN0b3Igc2l6ZSwgaW4gYnl0ZXMsIG9mIHRoZSBiYWNrZW5kIGRldmljZS4KKyoKKyog
c2VjdG9ycworKiAgICAgIFZhbHVlczogICAgICAgICA8dWludDY0X3Q+CisqCisqICAgICAgVGhl
IHNpemUgb2YgdGhlIGJhY2tlbmQgZGV2aWNlLCBleHByZXNzZWQgaW4gdW5pdHMgb2YgaXRzIGxv
Z2ljYWwKKyogICAgICBzZWN0b3Igc2l6ZSAoInNlY3Rvci1zaXplIikuCisqCisqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcm9udGVuZCBYZW5CdXMg
Tm9kZXMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g
UmVxdWVzdCBUcmFuc3BvcnQgUGFyYW1ldGVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgor
KiBldmVudC1jaGFubmVsCisqICAgICAgVmFsdWVzOiAgICAgICAgIDx1aW50MzJfdD4KKyoKKyog
ICAgICBUaGUgaWRlbnRpZmllciBvZiB0aGUgWGVuIGV2ZW50IGNoYW5uZWwgdXNlZCB0byBzaWdu
YWwgYWN0aXZpdHkKKyogICAgICBpbiB0aGUgcmluZyBidWZmZXIuCisqCisqIHJpbmctcmVmCisq
ICAgICAgVmFsdWVzOiAgICAgICAgIDx1aW50MzJfdD4KKyogICAgICBOb3RlczogICAgICAgICAg
NgorKgorKiAgICAgIFRoZSBYZW4gZ3JhbnQgcmVmZXJlbmNlIGdyYW50aW5nIHBlcm1pc3Npb24g
Zm9yIHRoZSBiYWNrZW5kIHRvIG1hcAorKiAgICAgIHRoZSBzb2xlIHBhZ2UgaW4gYSBzaW5nbGUg
cGFnZSBzaXplZCByaW5nIGJ1ZmZlci4KKyoKKyogcmluZy1yZWYldQorKiAgICAgIFZhbHVlczog
ICAgICAgICA8dWludDMyX3Q+CisqICAgICAgTm90ZXM6ICAgICAgICAgIDYKKyoKKyogICAgICBG
b3IgYSBmcm9udGVuZCBwcm92aWRpbmcgYSBtdWx0aS1wYWdlIHJpbmcsIGEgIm51bWJlciBvZiBy
aW5nIHBhZ2VzIgorKiAgICAgIHNpemVkIGxpc3Qgb2Ygbm9kZXMsIGVhY2ggY29udGFpbmluZyBh
IFhlbiBncmFudCByZWZlcmVuY2UgZ3JhbnRpbmcKKyogICAgICBwZXJtaXNzaW9uIGZvciB0aGUg
YmFja2VuZCB0byBtYXAgdGhlIHBhZ2Ugb2YgdGhlIHJpbmcgbG9jYXRlZAorKiAgICAgIGF0IHBh
Z2UgaW5kZXggIiV1Ii4gIFBhZ2UgaW5kZXhlcyBhcmUgemVybyBiYXNlZC4KKyoKKyogcHJvdG9j
b2wKKyogICAgICBWYWx1ZXM6ICAgICAgICAgc3RyaW5nIChYRU5fSU9fUFJPVE9fQUJJXyopCisq
ICAgICAgRGVmYXVsdCBWYWx1ZTogIFhFTl9JT19QUk9UT19BQklfTkFUSVZFCisqCisqICAgICAg
VGhlIG1hY2hpbmUgQUJJIHJ1bGVzIGdvdmVybmluZyB0aGUgZm9ybWF0IG9mIGFsbCByaW5nIHJl
cXVlc3QgYW5kCisqICAgICAgcmVzcG9uc2Ugc3RydWN0dXJlcy4KKyoKKyogcmluZy1wYWdlLW9y
ZGVyCisqICAgICAgVmFsdWVzOiAgICAgICAgIDx1aW50MzJfdD4KKyogICAgICBEZWZhdWx0IFZh
bHVlOiAgMAorKiAgICAgIE1heGltdW0gVmFsdWU6ICBNQVgoZmZzKG1heC1yaW5nLXBhZ2VzKSAt
IDEsIG1heC1yaW5nLXBhZ2Utb3JkZXIpCisqICAgICAgTm90ZXM6ICAgICAgICAgIDEsIDMKKyoK
KyogICAgICBUaGUgc2l6ZSBvZiB0aGUgZnJvbnRlbmQgYWxsb2NhdGVkIHJlcXVlc3QgcmluZyBi
dWZmZXIgaW4gdW5pdHMKKyogICAgICBvZiBsYihtYWNoaW5lIHBhZ2VzKS4gKGUuZy4gMCA9PSAx
IHBhZ2UsIDEgPSAyIHBhZ2VzLCAyID09IDQgcGFnZXMsCisqICAgICAgZXRjLikuCisqCisqIG51
bS1yaW5nLXBhZ2VzCisqICAgICAgVmFsdWVzOiAgICAgICAgIDx1aW50MzJfdD4KKyogICAgICBE
ZWZhdWx0IFZhbHVlOiAgMQorKiAgICAgIE1heGltdW0gVmFsdWU6ICBNQVgobWF4LXJpbmctcGFn
ZXMsKDB4MSA8PCBtYXgtcmluZy1wYWdlLW9yZGVyKSkKKyogICAgICBOb3RlczogICAgICAgICAg
REVQUkVDQVRFRCwgMiwgMworKgorKiAgICAgIFRoZSBzaXplIG9mIHRoZSBmcm9udGVuZCBhbGxv
Y2F0ZWQgcmVxdWVzdCByaW5nIGJ1ZmZlciBpbiB1bml0cyBvZgorKiAgICAgIG1hY2hpbmUgcGFn
ZXMuICBUaGUgdmFsdWUgbXVzdCBiZSBhIHBvd2VyIG9mIDIuCisqCisqIGZlYXR1cmUtcGVyc2lz
dGVudAorKiAgICAgIFZhbHVlczogICAgICAgICAwLzEgKGJvb2xlYW4pCisqICAgICAgRGVmYXVs
dCBWYWx1ZTogIDAKKyogICAgICBOb3RlczogNywgOCwgOQorKgorKiAgICAgIEEgdmFsdWUgb2Yg
IjEiIGluZGljYXRlcyB0aGF0IHRoZSBmcm9udGVuZCB3aWxsIHJldXNlIHRoZSBzYW1lIGdyYW50
cworKiAgICAgIGZvciBhbGwgdHJhbnNhY3Rpb25zLCBhbGxvd2luZyB0aGUgYmFja2VuZCB0byBt
YXAgdGhlbSB3aXRoIHdyaXRlCisqICAgICAgYWNjZXNzIChldmVuIHdoZW4gaXQgc2hvdWxkIGJl
IHJlYWQtb25seSkuIElmIHRoZSBmcm9udGVuZCBoaXRzIHRoZQorKiAgICAgIG1heGltdW0gbnVt
YmVyIG9mIGFsbG93ZWQgcGVyc2lzdGVudGx5IG1hcHBlZCBncmFudHMsIGl0IGNhbiBmYWxsYmFj
aworKiAgICAgIHRvIG5vbiBwZXJzaXN0ZW50IG1vZGUuIFRoaXMgd2lsbCBjYXVzZSBhIHBlcmZv
cm1hbmNlIGRlZ3JhZGF0aW9uLAorKiAgICAgIHNpbmNlIHRoZSB0aGUgYmFja2VuZCBkcml2ZXIg
d2lsbCBzdGlsbCB0cnkgdG8gbWFwIHRob3NlIGdyYW50cworKiAgICAgIHBlcnNpc3RlbnRseS4g
U2luY2UgdGhlIHBlcnNpc3RlbnQgZ3JhbnRzIHByb3RvY29sIGlzIGNvbXBhdGlibGUgd2l0aAor
KiAgICAgIHRoZSBwcmV2aW91cyBwcm90b2NvbCwgYSBmcm9udGVuZCBkcml2ZXIgY2FuIGNob29z
ZSB0byB3b3JrIGluCisqICAgICAgcGVyc2lzdGVudCBtb2RlIGV2ZW4gd2hlbiB0aGUgYmFja2Vu
ZCBkb2Vzbid0IHN1cHBvcnQgaXQuCisqCisqICAgICAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB0
aGUgZnJvbnRlbmQgZHJpdmVyIHN0b3JlcyB0aGUgcGVyc2lzdGVudGx5CisqICAgICAgbWFwcGVk
IGdyYW50cyBpbiBhIExJRk8gcXVldWUsIHNvIGEgc3Vic2V0IG9mIGFsbCBwZXJzaXN0ZW50bHkg
bWFwcGVkCisqICAgICAgZ3JhbnRzIGdldHMgdXNlZCBjb21tb25seS4gVGhpcyBpcyBkb25lIGlu
IGNhc2UgdGhlIGJhY2tlbmQgZHJpdmVyCisqICAgICAgZGVjaWRlcyB0byBsaW1pdCB0aGUgbWF4
aW11bSBudW1iZXIgb2YgcGVyc2lzdGVudGx5IG1hcHBlZCBncmFudHMKKyogICAgICB0byBhIHZh
bHVlIGxlc3MgdGhhbiBSSU5HX1NJWkUgKiBCTEtJRl9NQVhfU0VHTUVOVFNfUEVSX1JFUVVFU1Qu
CisqCisqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBWaXJ0dWFsIERldmljZSBQcm9wZXJ0aWVz
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogZGV2aWNlLXR5cGUKKyogICAgICBWYWx1
ZXM6ICAgICAgICAgImRpc2siLCAiY2Ryb20iLCAiZmxvcHB5IiwgZXRjLgorKgorKiB2aXJ0dWFs
LWRldmljZQorKiAgICAgIFZhbHVlczogICAgICAgICA8dWludDMyX3Q+CisqCisqICAgICAgQSB2
YWx1ZSBpbmRpY2F0aW5nIHRoZSBwaHlzaWNhbCBkZXZpY2UgdG8gdmlydHVhbGl6ZSB3aXRoaW4g
dGhlCisqICAgICAgZnJvbnRlbmQncyBkb21haW4uICAoZS5nLiAiVGhlIGZpcnN0IEFUQSBkaXNr
IiwgIlRoZSB0aGlyZCBTQ1NJCisqICAgICAgZGlzayIsIGV0Yy4pCisqCisqICAgICAgU2VlIGRv
Y3MvbWlzYy92YmQtaW50ZXJmYWNlLnR4dCBmb3IgZGV0YWlscyBvbiB0aGUgZm9ybWF0IG9mIHRo
aXMKKyogICAgICB2YWx1ZS4KKyoKKyogTm90ZXMKKyogLS0tLS0KKyogKDEpIE11bHRpLXBhZ2Ug
cmluZyBidWZmZXIgc2NoZW1lIGZpcnN0IGRldmVsb3BlZCBpbiB0aGUgQ2l0cml4IFhlblNlcnZl
cgorKiAgICAgUFYgZHJpdmVycy4KKyogKDIpIE11bHRpLXBhZ2UgcmluZyBidWZmZXIgc2NoZW1l
IGZpcnN0IHVzZWQgaW4gc29tZSBSZWRIYXQgZGlzdHJpYnV0aW9ucworKiAgICAgaW5jbHVkaW5n
IGEgZGlzdHJpYnV0aW9uIGRlcGxveWVkIG9uIGNlcnRhaW4gbm9kZXMgb2YgdGhlIEFtYXpvbgor
KiAgICAgRUMyIGNsdXN0ZXIuCisqICgzKSBTdXBwb3J0IGZvciBtdWx0aS1wYWdlIHJpbmcgYnVm
ZmVycyB3YXMgaW1wbGVtZW50ZWQgaW5kZXBlbmRlbnRseSwKKyogICAgIGluIHNsaWdodGx5IGRp
ZmZlcmVudCBmb3JtcywgYnkgYm90aCBDaXRyaXggYW5kIFJlZEhhdC9BbWF6b24uCisqICAgICBG
b3IgZnVsbCBpbnRlcm9wZXJhYmlsaXR5LCBibG9jayBmcm9udCBhbmQgYmFja2VuZHMgc2hvdWxk
IHB1Ymxpc2gKKyogICAgIGlkZW50aWNhbCByaW5nIHBhcmFtZXRlcnMsIGFkanVzdGVkIGZvciB1
bml0IGRpZmZlcmVuY2VzLCB0byB0aGUKKyogICAgIFhlblN0b3JlIG5vZGVzIHVzZWQgaW4gYm90
aCBzY2hlbWVzLgorKiAoNCkgRGV2aWNlcyB0aGF0IHN1cHBvcnQgZGlzY2FyZCBmdW5jdGlvbmFs
aXR5IG1heSBpbnRlcm5hbGx5IGFsbG9jYXRlIHNwYWNlCisqICAgICAoZGlzY2FyZGFibGUgZXh0
ZW50cykgaW4gdW5pdHMgdGhhdCBhcmUgbGFyZ2VyIHRoYW4gdGhlIGV4cG9ydGVkIGxvZ2ljYWwK
KyogICAgIGJsb2NrIHNpemUuIElmIHRoZSBiYWNraW5nIGRldmljZSBoYXMgc3VjaCBkaXNjYXJk
YWJsZSBleHRlbnRzIHRoZQorKiAgICAgYmFja2VuZCBzaG91bGQgcHJvdmlkZSBib3RoIGRpc2Nh
cmQtZ3JhbnVsYXJpdHkgYW5kIGRpc2NhcmQtYWxpZ25tZW50LgorKiAgICAgUHJvdmlkaW5nIGp1
c3Qgb25lIG9mIHRoZSB0d28gbWF5IGJlIGNvbnNpZGVyZWQgYW4gZXJyb3IgYnkgdGhlIGZyb250
ZW5kLgorKiAgICAgQmFja2VuZHMgc3VwcG9ydGluZyBkaXNjYXJkIHNob3VsZCBpbmNsdWRlIGRp
c2NhcmQtZ3JhbnVsYXJpdHkgYW5kCisqICAgICBkaXNjYXJkLWFsaWdubWVudCBldmVuIGlmIGl0
IHN1cHBvcnRzIGRpc2NhcmRpbmcgaW5kaXZpZHVhbCBzZWN0b3JzLgorKiAgICAgRnJvbnRlbmRz
IHNob3VsZCBhc3N1bWUgZGlzY2FyZC1hbGlnbm1lbnQgPT0gMCBhbmQgZGlzY2FyZC1ncmFudWxh
cml0eQorKiAgICAgPT0gc2VjdG9yIHNpemUgaWYgdGhlc2Uga2V5cyBhcmUgbWlzc2luZy4KKyog
KDUpIFRoZSBkaXNjYXJkLWFsaWdubWVudCBwYXJhbWV0ZXIgYWxsb3dzIGEgcGh5c2ljYWwgZGV2
aWNlIHRvIGJlCisqICAgICBwYXJ0aXRpb25lZCBpbnRvIHZpcnR1YWwgZGV2aWNlcyB0aGF0IGRv
IG5vdCBuZWNlc3NhcmlseSBiZWdpbiBvcgorKiAgICAgZW5kIG9uIGEgZGlzY2FyZGFibGUgZXh0
ZW50IGJvdW5kYXJ5LgorKiAoNikgV2hlbiB0aGVyZSBpcyBvbmx5IGEgc2luZ2xlIHBhZ2UgYWxs
b2NhdGVkIHRvIHRoZSByZXF1ZXN0IHJpbmcsCisqICAgICAncmluZy1yZWYnIGlzIHVzZWQgdG8g
Y29tbXVuaWNhdGUgdGhlIGdyYW50IHJlZmVyZW5jZSBmb3IgdGhpcworKiAgICAgcGFnZSB0byB0
aGUgYmFja2VuZC4gIFdoZW4gdXNpbmcgYSBtdWx0aS1wYWdlIHJpbmcsIHRoZSAncmluZy1yZWYn
CisqICAgICBub2RlIGlzIG5vdCBjcmVhdGVkLiAgSW5zdGVhZCAncmluZy1yZWYwJyAtICdyaW5n
LXJlZk4nIGFyZSB1c2VkLgorKiAoNykgV2hlbiB1c2luZyBwZXJzaXN0ZW50IGdyYW50cyBkYXRh
IGhhcyB0byBiZSBjb3BpZWQgZnJvbS90byB0aGUgcGFnZQorKiAgICAgd2hlcmUgdGhlIGdyYW50
IGlzIGN1cnJlbnRseSBtYXBwZWQuIFRoZSBvdmVyaGVhZCBvZiBkb2luZyB0aGlzIGNvcHkKKyog
ICAgIGhvd2V2ZXIgZG9lc24ndCBzdXBwcmVzcyB0aGUgc3BlZWQgaW1wcm92ZW1lbnQgb2Ygbm90
IGhhdmluZyB0byB1bm1hcAorKiAgICAgdGhlIGdyYW50cy4KKyogKDgpIFRoZSBmcm9udGVuZCBk
cml2ZXIgaGFzIHRvIGFsbG93IHRoZSBiYWNrZW5kIGRyaXZlciB0byBtYXAgYWxsIGdyYW50cwor
KiAgICAgd2l0aCB3cml0ZSBhY2Nlc3MsIGV2ZW4gd2hlbiB0aGV5IHNob3VsZCBiZSBtYXBwZWQg
cmVhZC1vbmx5LCBzaW5jZQorKiAgICAgZnVydGhlciByZXF1ZXN0cyBtYXkgcmV1c2UgdGhlc2Ug
Z3JhbnRzIGFuZCByZXF1aXJlIHdyaXRlIHBlcm1pc3Npb25zLgorKiAoOSkgTGludXggaW1wbGVt
ZW50YXRpb24gZG9lc24ndCBoYXZlIGEgbGltaXQgb24gdGhlIG1heGltdW0gbnVtYmVyIG9mCisq
ICAgICBncmFudHMgdGhhdCBjYW4gYmUgcGVyc2lzdGVudGx5IG1hcHBlZCBpbiB0aGUgZnJvbnRl
bmQgZHJpdmVyLCBidXQKKyogICAgIGR1ZSB0byB0aGUgZnJvbnRlbnQgZHJpdmVyIGltcGxlbWVu
dGF0aW9uIGl0IHNob3VsZCBuZXZlciBiZSBiaWdnZXIKKyogICAgIHRoYW4gUklOR19TSVpFICog
QkxLSUZfTUFYX1NFR01FTlRTX1BFUl9SRVFVRVNULgorKigxMCkgVGhlIGRpc2NhcmQtc2VjdXJl
IHByb3BlcnR5IG1heSBiZSBwcmVzZW50IGFuZCB3aWxsIGJlIHNldCB0byAxIGlmIHRoZQorKiAg
ICAgYmFja2luZyBkZXZpY2Ugc3VwcG9ydHMgc2VjdXJlIGRpc2NhcmQuCisqKDExKSBPbmx5IHVz
ZWQgYnkgTGludXggYW5kIE5ldEJTRC4KKyovCiAKIC8qCi0gKiBTVEFURSBESUFHUkFNUwotICoK
LSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFN0YXJ0dXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioKLSAqCi0gKiBUb29sIHN0YWNrIGNyZWF0ZXMgZnJvbnQgYW5kIGJhY2sgbm9k
ZXMgd2l0aCBzdGF0ZSBYZW5idXNTdGF0ZUluaXRpYWxpc2luZy4KLSAqCi0gKiBGcm9udCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFjawotICogPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAq
IFhlbmJ1c1N0YXRlSW5pdGlhbGlzaW5nICAgICAgICAgICAgICBYZW5idXNTdGF0ZUluaXRpYWxp
c2luZwotICogIG8gUXVlcnkgdmlydHVhbCBkZXZpY2UgICAgICAgICAgICAgICBvIFF1ZXJ5IGJh
Y2tlbmQgZGV2aWNlIGlkZW50aWZpY2F0aW9uCi0gKiAgICBwcm9wZXJ0aWVzLiAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YS4KLSAqICBvIFNldHVwIE9TIGRldmljZSBpbnN0YW5jZS4gICAg
ICAgICAgbyBPcGVuIGFuZCB2YWxpZGF0ZSBiYWNrZW5kIGRldmljZS4KLSAqICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbyBQdWJsaXNoIGJhY2tlbmQgZmVhdHVyZXMgYW5k
Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNwb3J0IHBh
cmFtZXRlcnMuCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHwKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBWCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
WGVuYnVzU3RhdGVJbml0V2FpdAotICoKLSAqIG8gUXVlcnkgYmFja2VuZCBmZWF0dXJlcyBhbmQK
LSAqICAgdHJhbnNwb3J0IHBhcmFtZXRlcnMuCi0gKiBvIEFsbG9jYXRlIGFuZCBpbml0aWFsaXpl
IHRoZQotICogICByZXF1ZXN0IHJpbmcuCi0gKiBvIFB1Ymxpc2ggdHJhbnNwb3J0IHBhcmFtZXRl
cnMKLSAqICAgdGhhdCB3aWxsIGJlIGluIGVmZmVjdCBkdXJpbmcKLSAqICAgdGhpcyBjb25uZWN0
aW9uLgotICogICAgICAgICAgICAgIHwKLSAqICAgICAgICAgICAgICB8Ci0gKiAgICAgICAgICAg
ICAgVgotICogWGVuYnVzU3RhdGVJbml0aWFsaXNlZAotICoKLSAqICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbyBRdWVyeSBmcm9udGVuZCB0cmFuc3BvcnQgcGFyYW1ldGVy
cy4KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbyBDb25uZWN0IHRv
IHRoZSByZXF1ZXN0IHJpbmcgYW5kCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZXZlbnQgY2hhbm5lbC4KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbyBQdWJsaXNoIGJhY2tlbmQgZGV2aWNlIHByb3BlcnRpZXMuCi0gKiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAqICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWCi0gKiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWGVuYnVzU3RhdGVDb25uZWN0ZWQK
LSAqCi0gKiAgbyBRdWVyeSBiYWNrZW5kIGRldmljZSBwcm9wZXJ0aWVzLgotICogIG8gRmluYWxp
emUgT1MgdmlydHVhbCBkZXZpY2UKLSAqICAgIGluc3RhbmNlLgotICogICAgICAgICAgICAgIHwK
LSAqICAgICAgICAgICAgICB8Ci0gKiAgICAgICAgICAgICAgVgotICogWGVuYnVzU3RhdGVDb25u
ZWN0ZWQKLSAqCi0gKiBOb3RlOiBEcml2ZXJzIHRoYXQgZG8gbm90IHN1cHBvcnQgYW55IG9wdGlv
bmFsIGZlYXR1cmVzLCBvciB0aGUgbmVnb3RpYXRpb24KLSAqICAgICAgIG9mIHRyYW5zcG9ydCBw
YXJhbWV0ZXJzLCBjYW4gc2tpcCBjZXJ0YWluIHN0YXRlcyBpbiB0aGUgc3RhdGUgbWFjaGluZToK
LSAqCi0gKiAgICAgICBvIEEgZnJvbnRlbmQgbWF5IHRyYW5zaXRpb24gdG8gWGVuYnVzU3RhdGVJ
bml0aWFsaXNlZCB3aXRob3V0Ci0gKiAgICAgICAgIHdhaXRpbmcgZm9yIHRoZSBiYWNrZW5kIHRv
IGVudGVyIFhlbmJ1c1N0YXRlSW5pdFdhaXQuICBJbiB0aGlzCi0gKiAgICAgICAgIGNhc2UsIGRl
ZmF1bHQgdHJhbnNwb3J0IHBhcmFtZXRlcnMgYXJlIGluIGVmZmVjdCBhbmQgYW55Ci0gKiAgICAg
ICAgIHRyYW5zcG9ydCBwYXJhbWV0ZXJzIHB1Ymxpc2hlZCBieSB0aGUgZnJvbnRlbmQgbXVzdCBj
b250YWluCi0gKiAgICAgICAgIHRoZWlyIGRlZmF1bHQgdmFsdWVzLgotICoKLSAqICAgICAgIG8g
QSBiYWNrZW5kIG1heSB0cmFuc2l0aW9uIHRvIFhlbmJ1c1N0YXRlSW5pdGlhbGlzZWQsIGJ5cGFz
c2luZwotICogICAgICAgICBYZW5idXNTdGF0ZUluaXRXYWl0LCB3aXRob3V0IHdhaXRpbmcgZm9y
IHRoZSBmcm9udGVuZCB0byBmaXJzdAotICogICAgICAgICBlbnRlciB0aGUgWGVuYnVzU3RhdGVJ
bml0aWFsaXNlZCBzdGF0ZS4gIEluIHRoaXMgY2FzZSwgZGVmYXVsdAotICogICAgICAgICB0cmFu
c3BvcnQgcGFyYW1ldGVycyBhcmUgaW4gZWZmZWN0IGFuZCBhbnkgdHJhbnNwb3J0IHBhcmFtZXRl
cnMKLSAqICAgICAgICAgcHVibGlzaGVkIGJ5IHRoZSBiYWNrZW5kIG11c3QgY29udGFpbiB0aGVp
ciBkZWZhdWx0IHZhbHVlcy4KLSAqCi0gKiAgICAgICBEcml2ZXJzIHRoYXQgc3VwcG9ydCBvcHRp
b25hbCBmZWF0dXJlcyBhbmQvb3IgdHJhbnNwb3J0IHBhcmFtZXRlcgotICogICAgICAgbmVnb3Rp
YXRpb24gbXVzdCB0b2xlcmF0ZSB0aGVzZSBhZGRpdGlvbmFsIHN0YXRlIHRyYW5zaXRpb24gcGF0
aHMuCi0gKiAgICAgICBJbiBnZW5lcmFsIHRoaXMgbWVhbnMgcGVyZm9ybWluZyB0aGUgd29yayBv
ZiBhbnkgc2tpcHBlZCBzdGF0ZQotICogICAgICAgdHJhbnNpdGlvbiwgaWYgaXQgaGFzIG5vdCBh
bHJlYWR5IGJlZW4gcGVyZm9ybWVkLCBpbiBhZGRpdGlvbiB0byB0aGUKLSAqICAgICAgIHdvcmsg
YXNzb2NpYXRlZCB3aXRoIGVudHJ5IGludG8gdGhlIGN1cnJlbnQgc3RhdGUuCi0gKi8KKyogTXVs
dGlwbGUgaGFyZHdhcmUgcXVldWVzL3JpbmdzOgorKiBJZiBzdXBwb3J0ZWQsIHRoZSBiYWNrZW5k
IHdpbGwgd3JpdGUgdGhlIGtleSAibXVsdGktcXVldWUtbWF4LXF1ZXVlcyIgdG8KKyogdGhlIGRp
cmVjdG9yeSBmb3IgdGhhdCB2YmQsIGFuZCBzZXQgaXRzIHZhbHVlIHRvIHRoZSBtYXhpbXVtIHN1
cHBvcnRlZAorKiBudW1iZXIgb2YgcXVldWVzLgorKiBGcm9udGVuZHMgdGhhdCBhcmUgYXdhcmUg
b2YgdGhpcyBmZWF0dXJlIGFuZCB3aXNoIHRvIHVzZSBpdCBjYW4gd3JpdGUgdGhlCisqIGtleSAi
bXVsdGktcXVldWUtbnVtLXF1ZXVlcyIgd2l0aCB0aGUgbnVtYmVyIHRoZXkgd2lzaCB0byB1c2Us
IHdoaWNoIG11c3QgYmUKKyogZ3JlYXRlciB0aGFuIHplcm8sIGFuZCBubyBtb3JlIHRoYW4gdGhl
IHZhbHVlIHJlcG9ydGVkIGJ5IHRoZSBiYWNrZW5kIGluCisqICJtdWx0aS1xdWV1ZS1tYXgtcXVl
dWVzIi4KKyoKKyogRm9yIGZyb250ZW5kcyByZXF1ZXN0aW5nIGp1c3Qgb25lIHF1ZXVlLCB0aGUg
dXN1YWwgZXZlbnQtY2hhbm5lbCBhbmQKKyogcmluZy1yZWYga2V5cyBhcmUgd3JpdHRlbiBhcyBi
ZWZvcmUsIHNpbXBsaWZ5aW5nIHRoZSBiYWNrZW5kIHByb2Nlc3NpbmcKKyogdG8gYXZvaWQgZGlz
dGluZ3Vpc2hpbmcgYmV0d2VlbiBhIGZyb250ZW5kIHRoYXQgZG9lc24ndCB1bmRlcnN0YW5kIHRo
ZQorKiBtdWx0aS1xdWV1ZSBmZWF0dXJlLCBhbmQgb25lIHRoYXQgZG9lcywgYnV0IHJlcXVlc3Rl
ZCBvbmx5IG9uZSBxdWV1ZS4KKyoKKyogRnJvbnRlbmRzIHJlcXVlc3RpbmcgdHdvIG9yIG1vcmUg
cXVldWVzIG11c3Qgbm90IHdyaXRlIHRoZSB0b3BsZXZlbAorKiBldmVudC1jaGFubmVsIGFuZCBy
aW5nLXJlZiBrZXlzLCBpbnN0ZWFkIHdyaXRpbmcgdGhvc2Uga2V5cyB1bmRlciBzdWIta2V5cwor
KiBoYXZpbmcgdGhlIG5hbWUgInF1ZXVlLU4iIHdoZXJlIE4gaXMgdGhlIGludGVnZXIgSUQgb2Yg
dGhlIHF1ZXVlL3JpbmcgZm9yCisqIHdoaWNoIHRob3NlIGtleXMgYmVsb25nLiBRdWV1ZXMgYXJl
IGluZGV4ZWQgZnJvbSB6ZXJvLgorKiBGb3IgZXhhbXBsZSwgYSBmcm9udGVuZCB3aXRoIHR3byBx
dWV1ZXMgbXVzdCB3cml0ZSB0aGUgZm9sbG93aW5nIHNldCBvZgorKiBxdWV1ZS1yZWxhdGVkIGtl
eXM6CisqCisqIC9sb2NhbC9kb21haW4vMS9kZXZpY2UvdmJkLzAvbXVsdGktcXVldWUtbnVtLXF1
ZXVlcyA9ICIyIgorKiAvbG9jYWwvZG9tYWluLzEvZGV2aWNlL3ZiZC8wL3F1ZXVlLTAgPSAiIgor
KiAvbG9jYWwvZG9tYWluLzEvZGV2aWNlL3ZiZC8wL3F1ZXVlLTAvcmluZy1yZWYgPSAiPHJpbmct
cmVmIzA+IgorKiAvbG9jYWwvZG9tYWluLzEvZGV2aWNlL3ZiZC8wL3F1ZXVlLTAvZXZlbnQtY2hh
bm5lbCA9ICI8ZXZ0Y2huIzA+IgorKiAvbG9jYWwvZG9tYWluLzEvZGV2aWNlL3ZiZC8wL3F1ZXVl
LTEgPSAiIgorKiAvbG9jYWwvZG9tYWluLzEvZGV2aWNlL3ZiZC8wL3F1ZXVlLTEvcmluZy1yZWYg
PSAiPHJpbmctcmVmIzE+IgorKiAvbG9jYWwvZG9tYWluLzEvZGV2aWNlL3ZiZC8wL3F1ZXVlLTEv
ZXZlbnQtY2hhbm5lbCA9ICI8ZXZ0Y2huIzE+IgorKgorKiBJdCBpcyBhbHNvIHBvc3NpYmxlIHRv
IHVzZSBtdWx0aXBsZSBxdWV1ZXMvcmluZ3MgdG9nZXRoZXIgd2l0aAorKiBmZWF0dXJlIG11bHRp
LXBhZ2UgcmluZyBidWZmZXIuCisqIEZvciBleGFtcGxlLCBhIGZyb250ZW5kIHJlcXVlc3RzIHR3
byBxdWV1ZXMvcmluZ3MgYW5kIHRoZSBzaXplIG9mIGVhY2ggcmluZworKiBidWZmZXIgaXMgdHdv
IHBhZ2VzIG11c3Qgd3JpdGUgdGhlIGZvbGxvd2luZyBzZXQgb2YgcmVsYXRlZCBrZXlzOgorKgor
KiAvbG9jYWwvZG9tYWluLzEvZGV2aWNlL3ZiZC8wL211bHRpLXF1ZXVlLW51bS1xdWV1ZXMgPSAi
MiIKKyogL2xvY2FsL2RvbWFpbi8xL2RldmljZS92YmQvMC9yaW5nLXBhZ2Utb3JkZXIgPSAiMSIK
KyogL2xvY2FsL2RvbWFpbi8xL2RldmljZS92YmQvMC9xdWV1ZS0wID0gIiIKKyogL2xvY2FsL2Rv
bWFpbi8xL2RldmljZS92YmQvMC9xdWV1ZS0wL3JpbmctcmVmMCA9ICI8cmluZy1yZWYjMD4iCisq
IC9sb2NhbC9kb21haW4vMS9kZXZpY2UvdmJkLzAvcXVldWUtMC9yaW5nLXJlZjEgPSAiPHJpbmct
cmVmIzE+IgorKiAvbG9jYWwvZG9tYWluLzEvZGV2aWNlL3ZiZC8wL3F1ZXVlLTAvZXZlbnQtY2hh
bm5lbCA9ICI8ZXZ0Y2huIzA+IgorKiAvbG9jYWwvZG9tYWluLzEvZGV2aWNlL3ZiZC8wL3F1ZXVl
LTEgPSAiIgorKiAvbG9jYWwvZG9tYWluLzEvZGV2aWNlL3ZiZC8wL3F1ZXVlLTEvcmluZy1yZWYw
ID0gIjxyaW5nLXJlZiMyPiIKKyogL2xvY2FsL2RvbWFpbi8xL2RldmljZS92YmQvMC9xdWV1ZS0x
L3JpbmctcmVmMSA9ICI8cmluZy1yZWYjMz4iCisqIC9sb2NhbC9kb21haW4vMS9kZXZpY2UvdmJk
LzAvcXVldWUtMS9ldmVudC1jaGFubmVsID0gIjxldnRjaG4jMT4iCisqCisqLwogCiAvKgotICog
UkVRVUVTVCBDT0RFUy4KLSAqLworKiBTVEFURSBESUFHUkFNUworKgorKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0dXAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiBU
b29sIHN0YWNrIGNyZWF0ZXMgZnJvbnQgYW5kIGJhY2sgbm9kZXMgd2l0aCBzdGF0ZSBYZW5idXNT
dGF0ZUluaXRpYWxpc2luZy4KKyoKKyogRnJvbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEJhY2sKKyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICAgID09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyogWGVuYnVzU3RhdGVJbml0aWFsaXNpbmcg
ICAgICAgICAgICAgIFhlbmJ1c1N0YXRlSW5pdGlhbGlzaW5nCisqICBvIFF1ZXJ5IHZpcnR1YWwg
ZGV2aWNlICAgICAgICAgICAgICAgbyBRdWVyeSBiYWNrZW5kIGRldmljZSBpZGVudGlmaWNhdGlv
bgorKiAgICBwcm9wZXJ0aWVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS4KKyogIG8g
U2V0dXAgT1MgZGV2aWNlIGluc3RhbmNlLiAgICAgICAgICBvIE9wZW4gYW5kIHZhbGlkYXRlIGJh
Y2tlbmQgZGV2aWNlLgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8g
UHVibGlzaCBiYWNrZW5kIGZlYXR1cmVzIGFuZAorKiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdHJhbnNwb3J0IHBhcmFtZXRlcnMuCisqICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWCisqICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBYZW5idXNTdGF0ZUluaXRXYWl0CisqCisqIG8gUXVlcnkg
YmFja2VuZCBmZWF0dXJlcyBhbmQKKyogICB0cmFuc3BvcnQgcGFyYW1ldGVycy4KKyogbyBBbGxv
Y2F0ZSBhbmQgaW5pdGlhbGl6ZSB0aGUKKyogICByZXF1ZXN0IHJpbmcuCisqIG8gUHVibGlzaCB0
cmFuc3BvcnQgcGFyYW1ldGVycworKiAgIHRoYXQgd2lsbCBiZSBpbiBlZmZlY3QgZHVyaW5nCisq
ICAgdGhpcyBjb25uZWN0aW9uLgorKiAgICAgICAgICAgICAgfAorKiAgICAgICAgICAgICAgfAor
KiAgICAgICAgICAgICAgVgorKiBYZW5idXNTdGF0ZUluaXRpYWxpc2VkCisqCisqICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbyBRdWVyeSBmcm9udGVuZCB0cmFuc3BvcnQg
cGFyYW1ldGVycy4KKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvIENv
bm5lY3QgdG8gdGhlIHJlcXVlc3QgcmluZyBhbmQKKyogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGV2ZW50IGNoYW5uZWwuCisqICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbyBQdWJsaXNoIGJhY2tlbmQgZGV2aWNlIHByb3BlcnRpZXMuCisqICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWCisq
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYZW5idXNTdGF0ZUNvbm5lY3Rl
ZAorKgorKiAgbyBRdWVyeSBiYWNrZW5kIGRldmljZSBwcm9wZXJ0aWVzLgorKiAgbyBGaW5hbGl6
ZSBPUyB2aXJ0dWFsIGRldmljZQorKiAgICBpbnN0YW5jZS4KKyogICAgICAgICAgICAgIHwKKyog
ICAgICAgICAgICAgIHwKKyogICAgICAgICAgICAgIFYKKyogWGVuYnVzU3RhdGVDb25uZWN0ZWQK
KyoKKyogTm90ZTogRHJpdmVycyB0aGF0IGRvIG5vdCBzdXBwb3J0IGFueSBvcHRpb25hbCBmZWF0
dXJlcywgb3IgdGhlIG5lZ290aWF0aW9uCisqICAgICAgIG9mIHRyYW5zcG9ydCBwYXJhbWV0ZXJz
LCBjYW4gc2tpcCBjZXJ0YWluIHN0YXRlcyBpbiB0aGUgc3RhdGUgbWFjaGluZToKKyoKKyogICAg
ICAgbyBBIGZyb250ZW5kIG1heSB0cmFuc2l0aW9uIHRvIFhlbmJ1c1N0YXRlSW5pdGlhbGlzZWQg
d2l0aG91dAorKiAgICAgICAgIHdhaXRpbmcgZm9yIHRoZSBiYWNrZW5kIHRvIGVudGVyIFhlbmJ1
c1N0YXRlSW5pdFdhaXQuICBJbiB0aGlzCisqICAgICAgICAgY2FzZSwgZGVmYXVsdCB0cmFuc3Bv
cnQgcGFyYW1ldGVycyBhcmUgaW4gZWZmZWN0IGFuZCBhbnkKKyogICAgICAgICB0cmFuc3BvcnQg
cGFyYW1ldGVycyBwdWJsaXNoZWQgYnkgdGhlIGZyb250ZW5kIG11c3QgY29udGFpbgorKiAgICAg
ICAgIHRoZWlyIGRlZmF1bHQgdmFsdWVzLgorKgorKiAgICAgICBvIEEgYmFja2VuZCBtYXkgdHJh
bnNpdGlvbiB0byBYZW5idXNTdGF0ZUluaXRpYWxpc2VkLCBieXBhc3NpbmcKKyogICAgICAgICBY
ZW5idXNTdGF0ZUluaXRXYWl0LCB3aXRob3V0IHdhaXRpbmcgZm9yIHRoZSBmcm9udGVuZCB0byBm
aXJzdAorKiAgICAgICAgIGVudGVyIHRoZSBYZW5idXNTdGF0ZUluaXRpYWxpc2VkIHN0YXRlLiAg
SW4gdGhpcyBjYXNlLCBkZWZhdWx0CisqICAgICAgICAgdHJhbnNwb3J0IHBhcmFtZXRlcnMgYXJl
IGluIGVmZmVjdCBhbmQgYW55IHRyYW5zcG9ydCBwYXJhbWV0ZXJzCisqICAgICAgICAgcHVibGlz
aGVkIGJ5IHRoZSBiYWNrZW5kIG11c3QgY29udGFpbiB0aGVpciBkZWZhdWx0IHZhbHVlcy4KKyoK
KyogICAgICAgRHJpdmVycyB0aGF0IHN1cHBvcnQgb3B0aW9uYWwgZmVhdHVyZXMgYW5kL29yIHRy
YW5zcG9ydCBwYXJhbWV0ZXIKKyogICAgICAgbmVnb3RpYXRpb24gbXVzdCB0b2xlcmF0ZSB0aGVz
ZSBhZGRpdGlvbmFsIHN0YXRlIHRyYW5zaXRpb24gcGF0aHMuCisqICAgICAgIEluIGdlbmVyYWwg
dGhpcyBtZWFucyBwZXJmb3JtaW5nIHRoZSB3b3JrIG9mIGFueSBza2lwcGVkIHN0YXRlCisqICAg
ICAgIHRyYW5zaXRpb24sIGlmIGl0IGhhcyBub3QgYWxyZWFkeSBiZWVuIHBlcmZvcm1lZCwgaW4g
YWRkaXRpb24gdG8gdGhlCisqICAgICAgIHdvcmsgYXNzb2NpYXRlZCB3aXRoIGVudHJ5IGludG8g
dGhlIGN1cnJlbnQgc3RhdGUuCisqLworCisvKgorKiBSRVFVRVNUIENPREVTLgorKi8KICNkZWZp
bmUgQkxLSUZfT1BfUkVBRCAgICAgICAgICAgICAgMAogI2RlZmluZSBCTEtJRl9PUF9XUklURSAg
ICAgICAgICAgICAxCiAvKgotICogQWxsIHdyaXRlcyBpc3N1ZWQgcHJpb3IgdG8gYSByZXF1ZXN0
IHdpdGggdGhlIEJMS0lGX09QX1dSSVRFX0JBUlJJRVIKLSAqIG9wZXJhdGlvbiBjb2RlICgiYmFy
cmllciByZXF1ZXN0IikgbXVzdCBiZSBjb21wbGV0ZWQgcHJpb3IgdG8gdGhlCi0gKiBleGVjdXRp
b24gb2YgdGhlIGJhcnJpZXIgcmVxdWVzdC4gIEFsbCB3cml0ZXMgaXNzdWVkIGFmdGVyIHRoZSBi
YXJyaWVyCi0gKiByZXF1ZXN0IG11c3Qgbm90IGV4ZWN1dGUgdW50aWwgYWZ0ZXIgdGhlIGNvbXBs
ZXRpb24gb2YgdGhlIGJhcnJpZXIgcmVxdWVzdC4KLSAqCi0gKiBPcHRpb25hbC4gIFNlZSAiZmVh
dHVyZS1iYXJyaWVyIiBYZW5CdXMgbm9kZSBkb2N1bWVudGF0aW9uIGFib3ZlLgotICovCisqIEFs
bCB3cml0ZXMgaXNzdWVkIHByaW9yIHRvIGEgcmVxdWVzdCB3aXRoIHRoZSBCTEtJRl9PUF9XUklU
RV9CQVJSSUVSCisqIG9wZXJhdGlvbiBjb2RlICgiYmFycmllciByZXF1ZXN0IikgbXVzdCBiZSBj
b21wbGV0ZWQgcHJpb3IgdG8gdGhlCisqIGV4ZWN1dGlvbiBvZiB0aGUgYmFycmllciByZXF1ZXN0
LiAgQWxsIHdyaXRlcyBpc3N1ZWQgYWZ0ZXIgdGhlIGJhcnJpZXIKKyogcmVxdWVzdCBtdXN0IG5v
dCBleGVjdXRlIHVudGlsIGFmdGVyIHRoZSBjb21wbGV0aW9uIG9mIHRoZSBiYXJyaWVyIHJlcXVl
c3QuCisqCisqIE9wdGlvbmFsLiAgU2VlICJmZWF0dXJlLWJhcnJpZXIiIFhlbkJ1cyBub2RlIGRv
Y3VtZW50YXRpb24gYWJvdmUuCisqLwogI2RlZmluZSBCTEtJRl9PUF9XUklURV9CQVJSSUVSICAg
ICAyCiAvKgotICogQ29tbWl0IGFueSB1bmNvbW1pdHRlZCBjb250ZW50cyBvZiB0aGUgYmFja2lu
ZyBkZXZpY2UncyB2b2xhdGlsZSBjYWNoZQotICogdG8gc3RhYmxlIHN0b3JhZ2UuCi0gKgotICog
T3B0aW9uYWwuICBTZWUgImZlYXR1cmUtZmx1c2gtY2FjaGUiIFhlbkJ1cyBub2RlIGRvY3VtZW50
YXRpb24gYWJvdmUuCi0gKi8KKyogQ29tbWl0IGFueSB1bmNvbW1pdHRlZCBjb250ZW50cyBvZiB0
aGUgYmFja2luZyBkZXZpY2UncyB2b2xhdGlsZSBjYWNoZQorKiB0byBzdGFibGUgc3RvcmFnZS4K
KyoKKyogT3B0aW9uYWwuICBTZWUgImZlYXR1cmUtZmx1c2gtY2FjaGUiIFhlbkJ1cyBub2RlIGRv
Y3VtZW50YXRpb24gYWJvdmUuCisqLwogI2RlZmluZSBCTEtJRl9PUF9GTFVTSF9ESVNLQ0FDSEUg
ICAzCiAvKgotICogVXNlZCBpbiBTTEVTIHNvdXJjZXMgZm9yIGRldmljZSBzcGVjaWZpYyBjb21t
YW5kIHBhY2tldAotICogY29udGFpbmVkIHdpdGhpbiB0aGUgcmVxdWVzdC4gUmVzZXJ2ZWQgZm9y
IHRoYXQgcHVycG9zZS4KLSAqLworKiBVc2VkIGluIFNMRVMgc291cmNlcyBmb3IgZGV2aWNlIHNw
ZWNpZmljIGNvbW1hbmQgcGFja2V0CisqIGNvbnRhaW5lZCB3aXRoaW4gdGhlIHJlcXVlc3QuIFJl
c2VydmVkIGZvciB0aGF0IHB1cnBvc2UuCisqLwogI2RlZmluZSBCTEtJRl9PUF9SRVNFUlZFRF8x
ICAgICAgICA0CiAvKgotICogSW5kaWNhdGUgdG8gdGhlIGJhY2tlbmQgZGV2aWNlIHRoYXQgYSBy
ZWdpb24gb2Ygc3RvcmFnZSBpcyBubyBsb25nZXIgaW4KLSAqIHVzZSwgYW5kIG1heSBiZSBkaXNj
YXJkZWQgYXQgYW55IHRpbWUgd2l0aG91dCBpbXBhY3QgdG8gdGhlIGNsaWVudC4gIElmCi0gKiB0
aGUgQkxLSUZfRElTQ0FSRF9TRUNVUkUgZmxhZyBpcyBzZXQgb24gdGhlIHJlcXVlc3QsIGFsbCBj
b3BpZXMgb2YgdGhlCi0gKiBkaXNjYXJkZWQgcmVnaW9uIG9uIHRoZSBkZXZpY2UgbXVzdCBiZSBy
ZW5kZXJlZCB1bnJlY292ZXJhYmxlIGJlZm9yZSB0aGUKLSAqIGNvbW1hbmQgcmV0dXJucy4KLSAq
Ci0gKiBUaGlzIG9wZXJhdGlvbiBpcyBhbmFsb2dvdXMgdG8gcGVyZm9ybWluZyBhIHRyaW0gKEFU
QSkgb3IgdW5hbXAgKFNDU0kpLAotICogY29tbWFuZCBvbiBhIG5hdGl2ZSBkZXZpY2UuCi0gKgot
ICogTW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0cmltL3VubWFwIG9wZXJhdGlvbnMgY2FuIGJlIGZv
dW5kIGF0OgotICogaHR0cDovL3QxMy5vcmcvRG9jdW1lbnRzL1VwbG9hZGVkRG9jdW1lbnRzL2Rv
Y3MyMDA4LwotICogICAgIGUwNzE1NHI2LURhdGFfU2V0X01hbmFnZW1lbnRfUHJvcG9zYWxfZm9y
X0FUQS1BQ1MyLmRvYwotICogaHR0cDovL3d3dy5zZWFnYXRlLmNvbS9zdGF0aWNmaWxlcy9zdXBw
b3J0L2Rpc2MvbWFudWFscy8KLSAqICAgICBJbnRlcmZhY2UlMjBtYW51YWxzLzEwMDI5MzA2OGMu
cGRmCi0gKgotICogT3B0aW9uYWwuICBTZWUgImZlYXR1cmUtZGlzY2FyZCIsICJkaXNjYXJkLWFs
aWdubWVudCIsCi0gKiAiZGlzY2FyZC1ncmFudWxhcml0eSIsIGFuZCAiZGlzY2FyZC1zZWN1cmUi
IGluIHRoZSBYZW5CdXMgbm9kZQotICogZG9jdW1lbnRhdGlvbiBhYm92ZS4KLSAqLworKiBJbmRp
Y2F0ZSB0byB0aGUgYmFja2VuZCBkZXZpY2UgdGhhdCBhIHJlZ2lvbiBvZiBzdG9yYWdlIGlzIG5v
IGxvbmdlciBpbgorKiB1c2UsIGFuZCBtYXkgYmUgZGlzY2FyZGVkIGF0IGFueSB0aW1lIHdpdGhv
dXQgaW1wYWN0IHRvIHRoZSBjbGllbnQuICBJZgorKiB0aGUgQkxLSUZfRElTQ0FSRF9TRUNVUkUg
ZmxhZyBpcyBzZXQgb24gdGhlIHJlcXVlc3QsIGFsbCBjb3BpZXMgb2YgdGhlCisqIGRpc2NhcmRl
ZCByZWdpb24gb24gdGhlIGRldmljZSBtdXN0IGJlIHJlbmRlcmVkIHVucmVjb3ZlcmFibGUgYmVm
b3JlIHRoZQorKiBjb21tYW5kIHJldHVybnMuCisqCisqIFRoaXMgb3BlcmF0aW9uIGlzIGFuYWxv
Z291cyB0byBwZXJmb3JtaW5nIGEgdHJpbSAoQVRBKSBvciB1bmFtcCAoU0NTSSksCisqIGNvbW1h
bmQgb24gYSBuYXRpdmUgZGV2aWNlLgorKgorKiBNb3JlIGluZm9ybWF0aW9uIGFib3V0IHRyaW0v
dW5tYXAgb3BlcmF0aW9ucyBjYW4gYmUgZm91bmQgYXQ6CisqIGh0dHA6Ly90MTMub3JnL0RvY3Vt
ZW50cy9VcGxvYWRlZERvY3VtZW50cy9kb2NzMjAwOC8KKyogICAgIGUwNzE1NHI2LURhdGFfU2V0
X01hbmFnZW1lbnRfUHJvcG9zYWxfZm9yX0FUQS1BQ1MyLmRvYworKiBodHRwOi8vd3d3LnNlYWdh
dGUuY29tL3N0YXRpY2ZpbGVzL3N1cHBvcnQvZGlzYy9tYW51YWxzLworKiAgICAgSW50ZXJmYWNl
JTIwbWFudWFscy8xMDAyOTMwNjhjLnBkZgorKgorKiBPcHRpb25hbC4gIFNlZSAiZmVhdHVyZS1k
aXNjYXJkIiwgImRpc2NhcmQtYWxpZ25tZW50IiwKKyogImRpc2NhcmQtZ3JhbnVsYXJpdHkiLCBh
bmQgImRpc2NhcmQtc2VjdXJlIiBpbiB0aGUgWGVuQnVzIG5vZGUKKyogZG9jdW1lbnRhdGlvbiBh
Ym92ZS4KKyovCiAjZGVmaW5lIEJMS0lGX09QX0RJU0NBUkQgICAgICAgICAgIDUKIAogLyoKLSAq
IFJlY29nbml6ZWQgaWYgImZlYXR1cmUtbWF4LWluZGlyZWN0LXNlZ21lbnRzIiBpbiBwcmVzZW50
IGluIHRoZSBiYWNrZW5kCi0gKiB4ZW5idXMgaW5mby4gVGhlICJmZWF0dXJlLW1heC1pbmRpcmVj
dC1zZWdtZW50cyIgbm9kZSBjb250YWlucyB0aGUgbWF4aW11bQotICogbnVtYmVyIG9mIHNlZ21l
bnRzIGFsbG93ZWQgYnkgdGhlIGJhY2tlbmQgcGVyIHJlcXVlc3QuIElmIHRoZSBub2RlIGlzCi0g
KiBwcmVzZW50LCB0aGUgZnJvbnRlbmQgbWlnaHQgdXNlIGJsa2lmX3JlcXVlc3RfaW5kaXJlY3Qg
c3RydWN0cyBpbiBvcmRlciB0bwotICogaXNzdWUgcmVxdWVzdHMgd2l0aCBtb3JlIHRoYW4gQkxL
SUZfTUFYX1NFR01FTlRTX1BFUl9SRVFVRVNUICgxMSkuIFRoZQotICogbWF4aW11bSBudW1iZXIg
b2YgaW5kaXJlY3Qgc2VnbWVudHMgaXMgZml4ZWQgYnkgdGhlIGJhY2tlbmQsIGJ1dCB0aGUKLSAq
IGZyb250ZW5kIGNhbiBpc3N1ZSByZXF1ZXN0cyB3aXRoIGFueSBudW1iZXIgb2YgaW5kaXJlY3Qg
c2VnbWVudHMgYXMgbG9uZyBhcwotICogaXQncyBsZXNzIHRoYW4gdGhlIG51bWJlciBwcm92aWRl
ZCBieSB0aGUgYmFja2VuZC4gVGhlIGluZGlyZWN0X2dyZWZzIGZpZWxkCi0gKiBpbiBibGtpZl9y
ZXF1ZXN0X2luZGlyZWN0IHNob3VsZCBiZSBmaWxsZWQgYnkgdGhlIGZyb250ZW5kIHdpdGggdGhl
Ci0gKiBncmFudCByZWZlcmVuY2VzIG9mIHRoZSBwYWdlcyB0aGF0IGFyZSBob2xkaW5nIHRoZSBp
bmRpcmVjdCBzZWdtZW50cy4KLSAqIFRoZXNlIHBhZ2VzIGFyZSBmaWxsZWQgd2l0aCBhbiBhcnJh
eSBvZiBibGtpZl9yZXF1ZXN0X3NlZ21lbnQgdGhhdCBob2xkIHRoZQotICogaW5mb3JtYXRpb24g
YWJvdXQgdGhlIHNlZ21lbnRzLiBUaGUgbnVtYmVyIG9mIGluZGlyZWN0IHBhZ2VzIHRvIHVzZSBp
cwotICogZGV0ZXJtaW5lZCBieSB0aGUgbnVtYmVyIG9mIHNlZ21lbnRzIGFuIGluZGlyZWN0IHJl
cXVlc3QgY29udGFpbnMuIEV2ZXJ5Ci0gKiBpbmRpcmVjdCBwYWdlIGNhbiBjb250YWluIGEgbWF4
aW11bSBvZgotICogKFBBR0VfU0laRSAvIHNpemVvZihzdHJ1Y3QgYmxraWZfcmVxdWVzdF9zZWdt
ZW50KSkgc2VnbWVudHMsIHNvIHRvCi0gKiBjYWxjdWxhdGUgdGhlIG51bWJlciBvZiBpbmRpcmVj
dCBwYWdlcyB0byB1c2Ugd2UgaGF2ZSB0byBkbwotICogY2VpbChpbmRpcmVjdF9zZWdtZW50cyAv
IChQQUdFX1NJWkUgLyBzaXplb2Yoc3RydWN0IGJsa2lmX3JlcXVlc3Rfc2VnbWVudCkpKS4KLSAq
Ci0gKiBJZiBhIGJhY2tlbmQgZG9lcyBub3QgcmVjb2duaXplIEJMS0lGX09QX0lORElSRUNULCBp
dCBzaG91bGQgKm5vdCoKLSAqIGNyZWF0ZSB0aGUgImZlYXR1cmUtbWF4LWluZGlyZWN0LXNlZ21l
bnRzIiBub2RlIQotICovCisqIFJlY29nbml6ZWQgaWYgImZlYXR1cmUtbWF4LWluZGlyZWN0LXNl
Z21lbnRzIiBpbiBwcmVzZW50IGluIHRoZSBiYWNrZW5kCisqIHhlbmJ1cyBpbmZvLiBUaGUgImZl
YXR1cmUtbWF4LWluZGlyZWN0LXNlZ21lbnRzIiBub2RlIGNvbnRhaW5zIHRoZSBtYXhpbXVtCisq
IG51bWJlciBvZiBzZWdtZW50cyBhbGxvd2VkIGJ5IHRoZSBiYWNrZW5kIHBlciByZXF1ZXN0LiBJ
ZiB0aGUgbm9kZSBpcworKiBwcmVzZW50LCB0aGUgZnJvbnRlbmQgbWlnaHQgdXNlIGJsa2lmX3Jl
cXVlc3RfaW5kaXJlY3Qgc3RydWN0cyBpbiBvcmRlciB0bworKiBpc3N1ZSByZXF1ZXN0cyB3aXRo
IG1vcmUgdGhhbiBCTEtJRl9NQVhfU0VHTUVOVFNfUEVSX1JFUVVFU1QgKDExKS4gVGhlCisqIG1h
eGltdW0gbnVtYmVyIG9mIGluZGlyZWN0IHNlZ21lbnRzIGlzIGZpeGVkIGJ5IHRoZSBiYWNrZW5k
LCBidXQgdGhlCisqIGZyb250ZW5kIGNhbiBpc3N1ZSByZXF1ZXN0cyB3aXRoIGFueSBudW1iZXIg
b2YgaW5kaXJlY3Qgc2VnbWVudHMgYXMgbG9uZyBhcworKiBpdCdzIGxlc3MgdGhhbiB0aGUgbnVt
YmVyIHByb3ZpZGVkIGJ5IHRoZSBiYWNrZW5kLiBUaGUgaW5kaXJlY3RfZ3JlZnMgZmllbGQKKyog
aW4gYmxraWZfcmVxdWVzdF9pbmRpcmVjdCBzaG91bGQgYmUgZmlsbGVkIGJ5IHRoZSBmcm9udGVu
ZCB3aXRoIHRoZQorKiBncmFudCByZWZlcmVuY2VzIG9mIHRoZSBwYWdlcyB0aGF0IGFyZSBob2xk
aW5nIHRoZSBpbmRpcmVjdCBzZWdtZW50cy4KKyogVGhlc2UgcGFnZXMgYXJlIGZpbGxlZCB3aXRo
IGFuIGFycmF5IG9mIGJsa2lmX3JlcXVlc3Rfc2VnbWVudCB0aGF0IGhvbGQgdGhlCisqIGluZm9y
bWF0aW9uIGFib3V0IHRoZSBzZWdtZW50cy4gVGhlIG51bWJlciBvZiBpbmRpcmVjdCBwYWdlcyB0
byB1c2UgaXMKKyogZGV0ZXJtaW5lZCBieSB0aGUgbnVtYmVyIG9mIHNlZ21lbnRzIGFuIGluZGly
ZWN0IHJlcXVlc3QgY29udGFpbnMuIEV2ZXJ5CisqIGluZGlyZWN0IHBhZ2UgY2FuIGNvbnRhaW4g
YSBtYXhpbXVtIG9mCisqIChQQUdFX1NJWkUgLyBzaXplb2Yoc3RydWN0IGJsa2lmX3JlcXVlc3Rf
c2VnbWVudCkpIHNlZ21lbnRzLCBzbyB0bworKiBjYWxjdWxhdGUgdGhlIG51bWJlciBvZiBpbmRp
cmVjdCBwYWdlcyB0byB1c2Ugd2UgaGF2ZSB0byBkbworKiBjZWlsKGluZGlyZWN0X3NlZ21lbnRz
IC8gKFBBR0VfU0laRSAvIHNpemVvZihzdHJ1Y3QgYmxraWZfcmVxdWVzdF9zZWdtZW50KSkpLgor
KgorKiBJZiBhIGJhY2tlbmQgZG9lcyBub3QgcmVjb2duaXplIEJMS0lGX09QX0lORElSRUNULCBp
dCBzaG91bGQgKm5vdCoKKyogY3JlYXRlIHRoZSAiZmVhdHVyZS1tYXgtaW5kaXJlY3Qtc2VnbWVu
dHMiIG5vZGUhCisqLwogI2RlZmluZSBCTEtJRl9PUF9JTkRJUkVDVCAgICAgICAgICA2CiAKIC8q
Ci0gKiBNYXhpbXVtIHNjYXR0ZXIvZ2F0aGVyIHNlZ21lbnRzIHBlciByZXF1ZXN0LgotICogVGhp
cyBpcyBjYXJlZnVsbHkgY2hvc2VuIHNvIHRoYXQgc2l6ZW9mKGJsa2lmX3JpbmdfdCkgPD0gUEFH
RV9TSVpFLgotICogTkIuIFRoaXMgY291bGQgYmUgMTIgaWYgdGhlIHJpbmcgaW5kZXhlcyB3ZXJl
bid0IHN0b3JlZCBpbiB0aGUgc2FtZSBwYWdlLgotICovCisqIE1heGltdW0gc2NhdHRlci9nYXRo
ZXIgc2VnbWVudHMgcGVyIHJlcXVlc3QuCisqIFRoaXMgaXMgY2FyZWZ1bGx5IGNob3NlbiBzbyB0
aGF0IHNpemVvZihibGtpZl9yaW5nX3QpIDw9IFBBR0VfU0laRS4KKyogTkIuIFRoaXMgY291bGQg
YmUgMTIgaWYgdGhlIHJpbmcgaW5kZXhlcyB3ZXJlbid0IHN0b3JlZCBpbiB0aGUgc2FtZSBwYWdl
LgorKi8KICNkZWZpbmUgQkxLSUZfTUFYX1NFR01FTlRTX1BFUl9SRVFVRVNUIDExCiAKIC8qCi0g
KiBNYXhpbXVtIG51bWJlciBvZiBpbmRpcmVjdCBwYWdlcyB0byB1c2UgcGVyIHJlcXVlc3QuCi0g
Ki8KKyogTWF4aW11bSBudW1iZXIgb2YgaW5kaXJlY3QgcGFnZXMgdG8gdXNlIHBlciByZXF1ZXN0
LgorKi8KICNkZWZpbmUgQkxLSUZfTUFYX0lORElSRUNUX1BBR0VTX1BFUl9SRVFVRVNUIDgKIAog
LyoKLSAqIE5CLiBmaXJzdF9zZWN0IGFuZCBsYXN0X3NlY3QgaW4gYmxraWZfcmVxdWVzdF9zZWdt
ZW50LCBhcyB3ZWxsIGFzCi0gKiBzZWN0b3JfbnVtYmVyIGluIGJsa2lmX3JlcXVlc3QsIGFyZSBh
bHdheXMgZXhwcmVzc2VkIGluIDUxMi1ieXRlIHVuaXRzLgotICogSG93ZXZlciB0aGV5IG11c3Qg
YmUgcHJvcGVybHkgYWxpZ25lZCB0byB0aGUgcmVhbCBzZWN0b3Igc2l6ZSBvZiB0aGUKLSAqIHBo
eXNpY2FsIGRpc2ssIHdoaWNoIGlzIHJlcG9ydGVkIGluIHRoZSAicGh5c2ljYWwtc2VjdG9yLXNp
emUiIG5vZGUgaW4KLSAqIHRoZSBiYWNrZW5kIHhlbmJ1cyBpbmZvLiBBbHNvIHRoZSB4ZW5idXMg
InNlY3RvcnMiIG5vZGUgaXMgZXhwcmVzc2VkIGluCi0gKiA1MTItYnl0ZSB1bml0cy4KLSAqLwor
KiBOQi4gZmlyc3Rfc2VjdCBhbmQgbGFzdF9zZWN0IGluIGJsa2lmX3JlcXVlc3Rfc2VnbWVudCwg
YXMgd2VsbCBhcworKiBzZWN0b3JfbnVtYmVyIGluIGJsa2lmX3JlcXVlc3QsIGFyZSBhbHdheXMg
ZXhwcmVzc2VkIGluIDUxMi1ieXRlIHVuaXRzLgorKiBIb3dldmVyIHRoZXkgbXVzdCBiZSBwcm9w
ZXJseSBhbGlnbmVkIHRvIHRoZSByZWFsIHNlY3RvciBzaXplIG9mIHRoZQorKiBwaHlzaWNhbCBk
aXNrLCB3aGljaCBpcyByZXBvcnRlZCBpbiB0aGUgInBoeXNpY2FsLXNlY3Rvci1zaXplIiBub2Rl
IGluCisqIHRoZSBiYWNrZW5kIHhlbmJ1cyBpbmZvLiBBbHNvIHRoZSB4ZW5idXMgInNlY3RvcnMi
IG5vZGUgaXMgZXhwcmVzc2VkIGluCisqIDUxMi1ieXRlIHVuaXRzLgorKi8KIHN0cnVjdCBibGtp
Zl9yZXF1ZXN0X3NlZ21lbnQgewogICAgIGdyYW50X3JlZl90IGdyZWY7ICAgICAgICAvKiByZWZl
cmVuY2UgdG8gSS9PIGJ1ZmZlciBmcmFtZSAgICAgICAgKi8KLSAgICAvKiBAZmlyc3Rfc2VjdDog
Zmlyc3Qgc2VjdG9yIGluIGZyYW1lIHRvIHRyYW5zZmVyIChpbmNsdXNpdmUpLiAgICovCi0gICAg
LyogQGxhc3Rfc2VjdDogbGFzdCBzZWN0b3IgaW4gZnJhbWUgdG8gdHJhbnNmZXIgKGluY2x1c2l2
ZSkuICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBAZmlyc3Rfc2VjdDog
Zmlyc3Qgc2VjdG9yIGluIGZyYW1lIHRvIHRyYW5zZmVyIChpbmNsdXNpdmUpLiAgICovCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEBsYXN0X3NlY3Q6IGxhc3Qgc2VjdG9yIGluIGZy
YW1lIHRvIHRyYW5zZmVyIChpbmNsdXNpdmUpLiAgICAgKi8KICAgICB1aW50OF90ICAgICBmaXJz
dF9zZWN0LCBsYXN0X3NlY3Q7CiB9OwogCiAvKgotICogU3RhcnRpbmcgcmluZyBlbGVtZW50IGZv
ciBhbnkgSS9PIHJlcXVlc3QuCi0gKi8KKyogU3RhcnRpbmcgcmluZyBlbGVtZW50IGZvciBhbnkg
SS9PIHJlcXVlc3QuCisqLwogc3RydWN0IGJsa2lmX3JlcXVlc3QgewogICAgIHVpbnQ4X3QgICAg
ICAgIG9wZXJhdGlvbjsgICAgLyogQkxLSUZfT1BfPz8/ICAgICAgICAgICAgICAgICAgICAgICAg
ICovCiAgICAgdWludDhfdCAgICAgICAgbnJfc2VnbWVudHM7ICAvKiBudW1iZXIgb2Ygc2VnbWVu
dHMgICAgICAgICAgICAgICAgICAgKi8KQEAgLTU0MSw5ICs2MzUsOSBAQCBzdHJ1Y3QgYmxraWZf
cmVxdWVzdCB7CiB0eXBlZGVmIHN0cnVjdCBibGtpZl9yZXF1ZXN0IGJsa2lmX3JlcXVlc3RfdDsK
IAogLyoKLSAqIENhc3QgdG8gdGhpcyBzdHJ1Y3R1cmUgd2hlbiBibGtpZl9yZXF1ZXN0Lm9wZXJh
dGlvbiA9PSBCTEtJRl9PUF9ESVNDQVJECi0gKiBzaXplb2Yoc3RydWN0IGJsa2lmX3JlcXVlc3Rf
ZGlzY2FyZCkgPD0gc2l6ZW9mKHN0cnVjdCBibGtpZl9yZXF1ZXN0KQotICovCisqIENhc3QgdG8g
dGhpcyBzdHJ1Y3R1cmUgd2hlbiBibGtpZl9yZXF1ZXN0Lm9wZXJhdGlvbiA9PSBCTEtJRl9PUF9E
SVNDQVJECisqIHNpemVvZihzdHJ1Y3QgYmxraWZfcmVxdWVzdF9kaXNjYXJkKSA8PSBzaXplb2Yo
c3RydWN0IGJsa2lmX3JlcXVlc3QpCisqLwogc3RydWN0IGJsa2lmX3JlcXVlc3RfZGlzY2FyZCB7
CiAgICAgdWludDhfdCAgICAgICAgb3BlcmF0aW9uOyAgICAvKiBCTEtJRl9PUF9ESVNDQVJEICAg
ICAgICAgICAgICAgICAgICAgKi8KICAgICB1aW50OF90ICAgICAgICBmbGFnOyAgICAgICAgIC8q
IEJMS0lGX0RJU0NBUkRfU0VDVVJFIG9yIHplcm8gICAgICAgICAqLwpAQCAtNTc3LDE4ICs2NzEs
MTggQEAgc3RydWN0IGJsa2lmX3Jlc3BvbnNlIHsKIHR5cGVkZWYgc3RydWN0IGJsa2lmX3Jlc3Bv
bnNlIGJsa2lmX3Jlc3BvbnNlX3Q7CiAKIC8qCi0gKiBTVEFUVVMgUkVUVVJOIENPREVTLgotICov
Ci0gLyogT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQgKG9ubHkgaGFwcGVucyBvbiBiYXJyaWVyIHdy
aXRlcykuICovCisqIFNUQVRVUyBSRVRVUk4gQ09ERVMuCisqLworLyogT3BlcmF0aW9uIG5vdCBz
dXBwb3J0ZWQgKG9ubHkgaGFwcGVucyBvbiBiYXJyaWVyIHdyaXRlcykuICovCiAjZGVmaW5lIEJM
S0lGX1JTUF9FT1BOT1RTVVBQICAtMgotIC8qIE9wZXJhdGlvbiBmYWlsZWQgZm9yIHNvbWUgdW5z
cGVjaWZpZWQgcmVhc29uICgtRUlPKS4gKi8KKy8qIE9wZXJhdGlvbiBmYWlsZWQgZm9yIHNvbWUg
dW5zcGVjaWZpZWQgcmVhc29uICgtRUlPKS4gKi8KICNkZWZpbmUgQkxLSUZfUlNQX0VSUk9SICAg
ICAgIC0xCi0gLyogT3BlcmF0aW9uIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuICovCisvKiBPcGVy
YXRpb24gY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4gKi8KICNkZWZpbmUgQkxLSUZfUlNQX09LQVkg
ICAgICAgICAwCiAKIC8qCi0gKiBHZW5lcmF0ZSBibGtpZiByaW5nIHN0cnVjdHVyZXMgYW5kIHR5
cGVzLgotICovCisqIEdlbmVyYXRlIGJsa2lmIHJpbmcgc3RydWN0dXJlcyBhbmQgdHlwZXMuCisq
LwogREVGSU5FX1JJTkdfVFlQRVMoYmxraWYsIHN0cnVjdCBibGtpZl9yZXF1ZXN0LCBzdHJ1Y3Qg
YmxraWZfcmVzcG9uc2UpOwogCiAjZGVmaW5lIFZESVNLX0NEUk9NICAgICAgICAweDEKQEAgLTU5
OCwxMSArNjkyLDExIEBAIERFRklORV9SSU5HX1RZUEVTKGJsa2lmLCBzdHJ1Y3QgYmxraWZfcmVx
dWVzdCwgc3RydWN0IGJsa2lmX3Jlc3BvbnNlKTsKICNlbmRpZiAvKiBfX1hFTl9QVUJMSUNfSU9f
QkxLSUZfSF9fICovCiAKIC8qCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBtb2RlOiBDCi0gKiBj
LWZpbGUtc3R5bGU6ICJCU0QiCi0gKiBjLWJhc2ljLW9mZnNldDogNAotICogdGFiLXdpZHRoOiA0
Ci0gKiBpbmRlbnQtdGFicy1tb2RlOiBuaWwKLSAqIEVuZDoKLSAqLworKiBMb2NhbCB2YXJpYWJs
ZXM6CisqIG1vZGU6IEMKKyogYy1maWxlLXN0eWxlOiAiQlNEIgorKiBjLWJhc2ljLW9mZnNldDog
NAorKiB0YWItd2lkdGg6IDQKKyogaW5kZW50LXRhYnMtbW9kZTogbmlsCisqIEVuZDoKKyovCi0t
IAoyLjE2LjIud2luZG93cy4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX18Kd2luLXB2LWRldmVsIG1haWxpbmcgbGlzdAp3aW4tcHYtZGV2ZWxAbGlzdHMu
eGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3Rp
bmZvL3dpbi1wdi1kZXZlbA==

From win-pv-devel-bounces@lists.xenproject.org Thu May 03 11:03:27 2018
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 03 May 2018 11:03:27 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1fEC1D-0002zk-VR; Thu, 03 May 2018 11:03:23 +0000
Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <srs0=ylbo=hw=citrix.com=prvs=654105155=owen.smith@srs-us1.protection.inumbo.net>)
 id 1fEC1C-0002za-Vb
 for win-pv-devel@lists.xenproject.org; Thu, 03 May 2018 11:03:23 +0000
X-Inumbo-ID: 669f1563-4ec1-11e8-9728-bc764e045a96
Received: from SMTP03.CITRIX.COM (unknown [162.221.156.55])
 by us1-rack-dfw2.inumbo.com (Halon) with ESMTPS
 id 669f1563-4ec1-11e8-9728-bc764e045a96;
 Thu, 03 May 2018 13:01:59 +0200 (CEST)
X-IronPort-AV: E=Sophos;i="5.49,358,1520899200"; d="scan'208";a="53573847"
From: owensm <owen.smith@citrix.com>
To: <win-pv-devel@lists.xenproject.org>
Date: Thu, 3 May 2018 12:02:59 +0100
Message-ID: <20180503110302.17308-4-owen.smith@citrix.com>
X-Mailer: git-send-email 2.16.2.windows.1
In-Reply-To: <20180503110302.17308-1-owen.smith@citrix.com>
References: <20180503110302.17308-1-owen.smith@citrix.com>
MIME-Version: 1.0
Subject: [win-pv-devel] [RFC PATCH 3/6] Query for "multi-queue-max-queues"
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Cc: owensm <owen.smith@citrix.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>

VmFsdWUgaXMgbGltaXRlZCB0byB0aGUgbnVtYmVyIG9mIHZDUFVzCgpTaWduZWQtb2ZmLWJ5OiBv
d2Vuc20gPG93ZW4uc21pdGhAY2l0cml4LmNvbT4KLS0tCiBzcmMveGVudmJkL2RyaXZlci5jICAg
fCAgMyArKy0KIHNyYy94ZW52YmQvZHJpdmVyLmggICB8ICAxICsKIHNyYy94ZW52YmQvZnJvbnRl
bmQuYyB8IDE2ICsrKysrKysrKysrKysrKysKIHNyYy94ZW52YmQvZnJvbnRlbmQuaCB8ICAxICsK
IDQgZmlsZXMgY2hhbmdlZCwgMjAgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQoKZGlmZiAt
LWdpdCBhL3NyYy94ZW52YmQvZHJpdmVyLmMgYi9zcmMveGVudmJkL2RyaXZlci5jCmluZGV4IDU5
YjM4MGMuLjJlOWJhNTQgMTAwNjQ0Ci0tLSBhL3NyYy94ZW52YmQvZHJpdmVyLmMKKysrIGIvc3Jj
L3hlbnZiZC9kcml2ZXIuYwpAQCAtMjY3LDcgKzI2Nyw4IEBAIF9fRHJpdmVySW5pdGlhbGl6ZU92
ZXJyaWRlcygKICAgICAgICAgICAgICAgeyAiZGlzY2FyZC1zZWN1cmUiLCBGZWF0dXJlRGlzY2Fy
ZFNlY3VyZSB9LAogICAgICAgICAgICAgICB7ICJkaXNjYXJkLWFsaWdubWVudCIsIEZlYXR1cmVE
aXNjYXJkQWxpZ25tZW50IH0sCiAgICAgICAgICAgICAgIHsgImRpc2NhcmQtZ3JhbnVsYXJpdHki
LCBGZWF0dXJlRGlzY2FyZEdyYW51bGFyaXR5IH0sCi0gICAgICAgICAgICAgIHsgIm1heC1yaW5n
LXBhZ2Utb3JkZXIiLCBGZWF0dXJlTWF4UmluZ1BhZ2VPcmRlciB9CisgICAgICAgICAgICAgIHsg
Im1heC1yaW5nLXBhZ2Utb3JkZXIiLCBGZWF0dXJlTWF4UmluZ1BhZ2VPcmRlciB9LAorICAgICAg
ICAgICAgICB7ICJtdWx0aS1xdWV1ZS1tYXgtcXVldWVzIiwgRmVhdHVyZU11bHRpUXVldWVNYXhR
dWV1ZXMgfQogICAgICAgICAgIH07CiAKICAgICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBBUlJB
WVNJWkUoTWFwcGluZyk7IEluZGV4KyspIHsKZGlmZiAtLWdpdCBhL3NyYy94ZW52YmQvZHJpdmVy
LmggYi9zcmMveGVudmJkL2RyaXZlci5oCmluZGV4IGQ5OWMwOWEuLjVhMjRjNGEgMTAwNjQ0Ci0t
LSBhL3NyYy94ZW52YmQvZHJpdmVyLmgKKysrIGIvc3JjL3hlbnZiZC9kcml2ZXIuaApAQCAtODAs
NiArODAsNyBAQCB0eXBlZGVmIGVudW0gX1hFTlZCRF9GRUFUVVJFIHsKICAgICBGZWF0dXJlRGlz
Y2FyZEFsaWdubWVudCwKICAgICBGZWF0dXJlRGlzY2FyZEdyYW51bGFyaXR5LAogICAgIEZlYXR1
cmVNYXhSaW5nUGFnZU9yZGVyLAorICAgIEZlYXR1cmVNdWx0aVF1ZXVlTWF4UXVldWVzLAogCiAg
ICAgLy8gQWRkIGFueSBuZXcgZmVhdHVyZXMgYmVmb3JlIHRoaXMgZW51bQogICAgIE51bWJlck9m
RmVhdHVyZXMKZGlmZiAtLWdpdCBhL3NyYy94ZW52YmQvZnJvbnRlbmQuYyBiL3NyYy94ZW52YmQv
ZnJvbnRlbmQuYwppbmRleCBmOGU5MDNlLi40MGZkYmNhIDEwMDY0NAotLS0gYS9zcmMveGVudmJk
L2Zyb250ZW5kLmMKKysrIGIvc3JjL3hlbnZiZC9mcm9udGVuZC5jCkBAIC03NCw2ICs3NCw3IEBA
IHN0cnVjdCBfWEVOVkJEX0ZST05URU5EIHsKICAgICBYRU5WQkRfRElTS0lORk8gICAgICAgICAg
ICAgRGlza0luZm87CiAgICAgWEVOVkJEX1BBR0UgICAgICAgICAgICAgICAgIFBhZ2U4MDsKICAg
ICBYRU5WQkRfUEFHRSAgICAgICAgICAgICAgICAgUGFnZTgzOworICAgIFVMT05HICAgICAgICAg
ICAgICAgICAgICAgICBNdWx0aVF1ZXVlTWF4UXVldWVzOwogCiAgICAgLy8gSW50ZXJmYWNlcyB0
byBYZW5CdXMKICAgICBYRU5CVVNfU1RPUkVfSU5URVJGQUNFICAgICAgU3RvcmVJbnRlcmZhY2U7
CkBAIC03ODQsNiArNzg1LDcgQEAgRnJvbnRlbmRSZWFkRmVhdHVyZXMoCiAgICAgSU4gIFBYRU5W
QkRfRlJPTlRFTkQgICAgRnJvbnRlbmQKICAgICApCiB7CisgICAgVUxPTkcgICAgICAgICAgICAg
ICAgICAgUHJvY2Vzc29yQ291bnQ7CiAgICAgQk9PTEVBTiAgICAgICAgICAgICAgICAgQ2hhbmdl
ZDsKIAogICAgIENoYW5nZWQgPSBGcm9udGVuZFJlYWRGZWF0dXJlKEZyb250ZW5kLApAQCAtNzk2
LDYgKzc5OCwxNCBAQCBGcm9udGVuZFJlYWRGZWF0dXJlcygKICAgICBDaGFuZ2VkIHw9IEZyb250
ZW5kUmVhZEZlYXR1cmUoRnJvbnRlbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEZlYXR1cmVQZXJzaXN0ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAmRnJvbnRlbmQtPkZlYXR1cmVzLlBlcnNpc3RlbnQpOworICAgIENoYW5nZWQgfD0gRnJvbnRl
bmRSZWFkVmFsdWUzMihGcm9udGVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRmVhdHVyZU11bHRpUXVldWVNYXhRdWV1ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFRSVUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZGcm9u
dGVuZC0+TXVsdGlRdWV1ZU1heFF1ZXVlcyk7CisKKyAgICBQcm9jZXNzb3JDb3VudCA9IEtlUXVl
cnlBY3RpdmVQcm9jZXNzb3JDb3VudChOVUxMKTsKKyAgICBpZiAoUHJvY2Vzc29yQ291bnQgPCBG
cm9udGVuZC0+TXVsdGlRdWV1ZU1heFF1ZXVlcykKKyAgICAgICAgRnJvbnRlbmQtPk11bHRpUXVl
dWVNYXhRdWV1ZXMgPSBQcm9jZXNzb3JDb3VudDsKIAogICAgIGlmICghQ2hhbmdlZCkKICAgICAg
ICAgcmV0dXJuOwpAQCAtODExLDYgKzgyMSwxMCBAQCBGcm9udGVuZFJlYWRGZWF0dXJlcygKICAg
ICAgICAgICAgICAgICAgICAgRnJvbnRlbmQtPlRhcmdldElkLAogICAgICAgICAgICAgICAgICAg
ICBGcm9udGVuZC0+RmVhdHVyZXMuSW5kaXJlY3QpOwogICAgIH0KKworICAgIFZlcmJvc2UoIlRh
cmdldFslZF0gOiBNdWx0aVF1ZXVlTWF4UXVldWVzICV1XG4iLAorICAgICAgICAgICAgRnJvbnRl
bmQtPlRhcmdldElkLAorICAgICAgICAgICAgRnJvbnRlbmQtPk11bHRpUXVldWVNYXhRdWV1ZXMp
OwogfQogCiBzdGF0aWMgRk9SQ0VJTkxJTkUgVk9JRApAQCAtMTkyOSw1ICsxOTQzLDcgQEAgRnJv
bnRlbmRHZXRCYXJyaWVyKAogewogICAgIHJldHVybiBGcm9udGVuZC0+RGlza0luZm8uQmFycmll
cjsKIH0KK0ZST05URU5EX0dFVF9QUk9QRVJUWShNdWx0aVF1ZXVlTWF4UXVldWVzLCBVTE9ORykK
KwogCiAjdW5kZWYgRlJPTlRFTkRfR0VUX1BST1BFUlRZCmRpZmYgLS1naXQgYS9zcmMveGVudmJk
L2Zyb250ZW5kLmggYi9zcmMveGVudmJkL2Zyb250ZW5kLmgKaW5kZXggZGZkNzJiNC4uMGZmYjI2
MSAxMDA2NDQKLS0tIGEvc3JjL3hlbnZiZC9mcm9udGVuZC5oCisrKyBiL3NyYy94ZW52YmQvZnJv
bnRlbmQuaApAQCAtMTY3LDYgKzE2Nyw3IEBAIEZST05URU5EX0dFVF9QUk9QRVJUWShSZWFkT25s
eSwgQk9PTEVBTikKIEZST05URU5EX0dFVF9QUk9QRVJUWShEaXNjYXJkLCBCT09MRUFOKQogRlJP
TlRFTkRfR0VUX1BST1BFUlRZKEZsdXNoQ2FjaGUsIEJPT0xFQU4pCiBGUk9OVEVORF9HRVRfUFJP
UEVSVFkoQmFycmllciwgQk9PTEVBTikKK0ZST05URU5EX0dFVF9QUk9QRVJUWShNdWx0aVF1ZXVl
TWF4UXVldWVzLCBVTE9ORykKIAogI3VuZGVmIEZST05URU5EX0dFVF9QUk9QRVJUWQogCi0tIAoy
LjE2LjIud2luZG93cy4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX18Kd2luLXB2LWRldmVsIG1haWxpbmcgbGlzdAp3aW4tcHYtZGV2ZWxAbGlzdHMueGVu
cHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZv
L3dpbi1wdi1kZXZlbA==

From win-pv-devel-bounces@lists.xenproject.org Thu May 03 11:03:29 2018
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 03 May 2018 11:03:29 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1fEC1J-00031y-BA; Thu, 03 May 2018 11:03:29 +0000
Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <srs0=ylbo=hw=citrix.com=prvs=654105155=owen.smith@srs-us1.protection.inumbo.net>)
 id 1fEC1H-00030g-Ek
 for win-pv-devel@lists.xenproject.org; Thu, 03 May 2018 11:03:27 +0000
X-Inumbo-ID: 67479278-4ec1-11e8-9728-bc764e045a96
Received: from SMTP03.CITRIX.COM (unknown [162.221.156.55])
 by us1-rack-dfw2.inumbo.com (Halon) with ESMTPS
 id 67479278-4ec1-11e8-9728-bc764e045a96;
 Thu, 03 May 2018 13:02:00 +0200 (CEST)
X-IronPort-AV: E=Sophos;i="5.49,358,1520899200"; d="scan'208";a="53573850"
From: owensm <owen.smith@citrix.com>
To: <win-pv-devel@lists.xenproject.org>
Date: Thu, 3 May 2018 12:02:58 +0100
Message-ID: <20180503110302.17308-3-owen.smith@citrix.com>
X-Mailer: git-send-email 2.16.2.windows.1
In-Reply-To: <20180503110302.17308-1-owen.smith@citrix.com>
References: <20180503110302.17308-1-owen.smith@citrix.com>
MIME-Version: 1.0
Subject: [win-pv-devel] [RFC PATCH 2/6] Rename XENVBD_RING -> XENVBD_PROTOCOL
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Cc: owensm <owen.smith@citrix.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>

U2lnbmVkLW9mZi1ieTogb3dlbnNtIDxvd2VuLnNtaXRoQGNpdHJpeC5jb20+Ci0tLQogc3JjL3hl
bnZiZC9mcm9udGVuZC5jICAgICAgICAgICAgIHwgIDMwICstCiBzcmMveGVudmJkL2Zyb250ZW5k
LmggICAgICAgICAgICAgfCAgIDQgKy0KIHNyYy94ZW52YmQve3JpbmcuYyA9PiBwcm90b2NvbC5j
fSB8IDk4OCArKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLQogc3JjL3hlbnZi
ZC97cmluZy5oID0+IHByb3RvY29sLmh9IHwgIDU0ICstLQogc3JjL3hlbnZiZC90YXJnZXQuYyAg
ICAgICAgICAgICAgIHwgIDI0ICstCiB2czIwMTUveGVudmJkL3hlbnZiZC52Y3hwcm9qICAgICAg
fCAgIDIgKy0KIHZzMjAxNy94ZW52YmQveGVudmJkLnZjeHByb2ogICAgICB8ICAgMiArLQogNyBm
aWxlcyBjaGFuZ2VkLCA1NTYgaW5zZXJ0aW9ucygrKSwgNTQ4IGRlbGV0aW9ucygtKQogcmVuYW1l
IHNyYy94ZW52YmQve3JpbmcuYyA9PiBwcm90b2NvbC5jfSAoNjQlKQogcmVuYW1lIHNyYy94ZW52
YmQve3JpbmcuaCA9PiBwcm90b2NvbC5ofSAoNjclKQoKZGlmZiAtLWdpdCBhL3NyYy94ZW52YmQv
ZnJvbnRlbmQuYyBiL3NyYy94ZW52YmQvZnJvbnRlbmQuYwppbmRleCBiN2U2MWMyLi5mOGU5MDNl
IDEwMDY0NAotLS0gYS9zcmMveGVudmJkL2Zyb250ZW5kLmMKKysrIGIvc3JjL3hlbnZiZC9mcm9u
dGVuZC5jCkBAIC00Myw3ICs0Myw3IEBACiAjaW5jbHVkZSAiYWRhcHRlci5oIgogI2luY2x1ZGUg
InNyYmV4dC5oIgogI2luY2x1ZGUgIm5hbWVzLmgiCi0jaW5jbHVkZSAicmluZy5oIgorI2luY2x1
ZGUgInByb3RvY29sLmgiCiAjaW5jbHVkZSAiZ3JhbnRlci5oIgogI2luY2x1ZGUgInRocmVhZC5o
IgogI2luY2x1ZGUgImJhc2U2NC5oIgpAQCAtODQsNyArODQsNyBAQCBzdHJ1Y3QgX1hFTlZCRF9G
Uk9OVEVORCB7CiAgICAgUFhFTkJVU19TVVNQRU5EX0NBTExCQUNLICAgIFN1c3BlbmRDYWxsYmFj
azsKIAogICAgIC8vIFJpbmcKLSAgICBQWEVOVkJEX1JJTkcgICAgICAgICAgICAgICAgUmluZzsK
KyAgICBQWEVOVkJEX1BST1RPQ09MICAgICAgICAgICAgUHJvdG9jb2w7CiAgICAgUFhFTlZCRF9H
UkFOVEVSICAgICAgICAgICAgIEdyYW50ZXI7CiAKICAgICAvLyBCYWNrZW5kIFN0YXRlIFdhdGNo
CkBAIC0xMDk1LDcgKzEwOTUsNyBAQCBGcm9udGVuZENvbm5lY3QoCiAgICAgaWYgKCFOVF9TVUND
RVNTKFN0YXR1cykpCiAgICAgICAgIGdvdG8gZmFpbDE7CiAKLSAgICBTdGF0dXMgPSBSaW5nQ29u
bmVjdChGcm9udGVuZC0+UmluZyk7CisgICAgU3RhdHVzID0gUHJvdG9jb2xDb25uZWN0KEZyb250
ZW5kLT5Qcm90b2NvbCk7CiAgICAgaWYgKCFOVF9TVUNDRVNTKFN0YXR1cykpCiAgICAgICAgIGdv
dG8gZmFpbDI7CiAKQEAgLTExMDksNyArMTEwOSw3IEBAIEZyb250ZW5kQ29ubmVjdCgKICAgICAg
ICAgaWYgKCFOVF9TVUNDRVNTKFN0YXR1cykpCiAgICAgICAgICAgICBicmVhazsKIAotICAgICAg
ICBTdGF0dXMgPSBSaW5nU3RvcmVXcml0ZShGcm9udGVuZC0+UmluZywgVHJhbnNhY3Rpb24pOwor
ICAgICAgICBTdGF0dXMgPSBQcm90b2NvbFN0b3JlV3JpdGUoRnJvbnRlbmQtPlByb3RvY29sLCBU
cmFuc2FjdGlvbik7CiAgICAgICAgIGlmICghTlRfU1VDQ0VTUyhTdGF0dXMpKQogICAgICAgICAg
ICAgZ290byBhYm9ydDsKIApAQCAtMTIxMSw3ICsxMjExLDcgQEAgZmFpbDQ6CiAgICAgRXJyb3Io
IkZhaWw0XG4iKTsKIGZhaWwzOgogICAgIEVycm9yKCJGYWlsM1xuIik7Ci0gICAgUmluZ0Rpc2Nv
bm5lY3QoRnJvbnRlbmQtPlJpbmcpOworICAgIFByb3RvY29sRGlzY29ubmVjdChGcm9udGVuZC0+
UHJvdG9jb2wpOwogZmFpbDI6CiAgICAgRXJyb3IoIkZhaWwyXG4iKTsKICAgICBHcmFudGVyRGlz
Y29ubmVjdChGcm9udGVuZC0+R3JhbnRlcik7CkBAIC0xMjI1LDcgKzEyMjUsNyBAQCBGcm9udGVu
ZERpc2Nvbm5lY3QoCiAgICAgX19pbiAgUFhFTlZCRF9GUk9OVEVORCAgICAgICAgRnJvbnRlbmQK
ICAgICApCiB7Ci0gICAgUmluZ0Rpc2Nvbm5lY3QoRnJvbnRlbmQtPlJpbmcpOworICAgIFByb3Rv
Y29sRGlzY29ubmVjdChGcm9udGVuZC0+UHJvdG9jb2wpOwogICAgIEdyYW50ZXJEaXNjb25uZWN0
KEZyb250ZW5kLT5HcmFudGVyKTsKIAogICAgIEJhc2U2NEZyZWUoRnJvbnRlbmQtPlBhZ2U4MC5E
YXRhKTsKQEAgLTEyNDYsNyArMTI0Niw3IEBAIEZyb250ZW5kRW5hYmxlKAogICAgIEtlTWVtb3J5
QmFycmllcigpOwogCiAgICAgR3JhbnRlckVuYWJsZShGcm9udGVuZC0+R3JhbnRlcik7Ci0gICAg
UmluZ0VuYWJsZShGcm9udGVuZC0+UmluZyk7CisgICAgUHJvdG9jb2xFbmFibGUoRnJvbnRlbmQt
PlByb3RvY29sKTsKIH0KIF9fZHJ2X3JlcXVpcmVzSVJRTChESVNQQVRDSF9MRVZFTCkKIHN0YXRp
YyBGT1JDRUlOTElORSBWT0lECkBAIC0xMjU2LDcgKzEyNTYsNyBAQCBGcm9udGVuZERpc2FibGUo
CiB7CiAgICAgRnJvbnRlbmQtPkNhcHMuQ29ubmVjdGVkID0gRkFMU0U7CiAKLSAgICBSaW5nRGlz
YWJsZShGcm9udGVuZC0+UmluZyk7CisgICAgUHJvdG9jb2xEaXNhYmxlKEZyb250ZW5kLT5Qcm90
b2NvbCk7CiAgICAgR3JhbnRlckRpc2FibGUoRnJvbnRlbmQtPkdyYW50ZXIpOwogfQogCkBAIC0x
NDUxLDcgKzE0NTEsNyBAQCBGcm9udGVuZFN1c3BlbmRDYWxsYmFjaygKICAgICAgICAgQVNTRVJU
KEZBTFNFKTsKICAgICB9CiAKLSAgICBSaW5nVHJpZ2dlcihGcm9udGVuZC0+UmluZyk7CisgICAg
UHJvdG9jb2xUcmlnZ2VyKEZyb250ZW5kLT5Qcm90b2NvbCk7CiAKICAgICBWZXJib3NlKCJUYXJn
ZXRbJWRdIDogPD09PSByZXN0b3JlZCAlc1xuIiwgRnJvbnRlbmQtPlRhcmdldElkLCBfX1hlbnZi
ZFN0YXRlTmFtZShGcm9udGVuZC0+U3RhdGUpKTsKIH0KQEAgLTE3NjcsNyArMTc2Nyw3IEBAIEZy
b250ZW5kQ3JlYXRlKAogICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKQogICAgICAgICBnb3Rv
IGZhaWwzOwogCi0gICAgc3RhdHVzID0gUmluZ0NyZWF0ZShGcm9udGVuZCwgJkZyb250ZW5kLT5S
aW5nKTsKKyAgICBzdGF0dXMgPSBQcm90b2NvbENyZWF0ZShGcm9udGVuZCwgJkZyb250ZW5kLT5Q
cm90b2NvbCk7CiAgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpCiAgICAgICAgIGdvdG8gZmFp
bDQ7CiAKQEAgLTE3OTIsOCArMTc5Miw4IEBAIGZhaWw2OgogICAgIEZyb250ZW5kLT5HcmFudGVy
ID0gTlVMTDsKIGZhaWw1OgogICAgIEVycm9yKCJmYWlsNVxuIik7Ci0gICAgUmluZ0Rlc3Ryb3ko
RnJvbnRlbmQtPlJpbmcpOwotICAgIEZyb250ZW5kLT5SaW5nID0gTlVMTDsKKyAgICBQcm90b2Nv
bERlc3Ryb3koRnJvbnRlbmQtPlByb3RvY29sKTsKKyAgICBGcm9udGVuZC0+UHJvdG9jb2wgPSBO
VUxMOwogZmFpbDQ6CiAgICAgRXJyb3IoImZhaWw0XG4iKTsKIGZhaWwzOgpAQCAtMTgzMSw4ICsx
ODMxLDggQEAgRnJvbnRlbmREZXN0cm95KAogICAgIEdyYW50ZXJEZXN0cm95KEZyb250ZW5kLT5H
cmFudGVyKTsKICAgICBGcm9udGVuZC0+R3JhbnRlciA9IE5VTEw7CiAKLSAgICBSaW5nRGVzdHJv
eShGcm9udGVuZC0+UmluZyk7Ci0gICAgRnJvbnRlbmQtPlJpbmcgPSBOVUxMOworICAgIFByb3Rv
Y29sRGVzdHJveShGcm9udGVuZC0+UHJvdG9jb2wpOworICAgIEZyb250ZW5kLT5Qcm90b2NvbCA9
IE5VTEw7CiAKICAgICBBU1NFUlQzUChGcm9udGVuZC0+QmFja2VuZFBhdGgsID09LCBOVUxMKTsK
ICAgICBBU1NFUlQzUChGcm9udGVuZC0+QmFja2VuZFdhdGNoLCA9PSwgTlVMTCk7CkBAIC0xODU4
LDcgKzE4NTgsNyBAQCBGcm9udGVuZEdldCAjIyBfbmFtZSAjIyAoICAgICAgICAgICAgICAgICAg
ICAgICBcCiB9CiAKIEZST05URU5EX0dFVF9QUk9QRVJUWShUYXJnZXQsIFBYRU5WQkRfVEFSR0VU
KQotRlJPTlRFTkRfR0VUX1BST1BFUlRZKFJpbmcsIFBYRU5WQkRfUklORykKK0ZST05URU5EX0dF
VF9QUk9QRVJUWShQcm90b2NvbCwgUFhFTlZCRF9QUk9UT0NPTCkKIEZST05URU5EX0dFVF9QUk9Q
RVJUWShHcmFudGVyLCBQWEVOVkJEX0dSQU5URVIpCiBGUk9OVEVORF9HRVRfUFJPUEVSVFkoVGFy
Z2V0SWQsIFVMT05HKQogRlJPTlRFTkRfR0VUX1BST1BFUlRZKERldmljZUlkLCBVTE9ORykKZGlm
ZiAtLWdpdCBhL3NyYy94ZW52YmQvZnJvbnRlbmQuaCBiL3NyYy94ZW52YmQvZnJvbnRlbmQuaApp
bmRleCAxNDg4NDc2Li5kZmQ3MmI0IDEwMDY0NAotLS0gYS9zcmMveGVudmJkL2Zyb250ZW5kLmgK
KysrIGIvc3JjL3hlbnZiZC9mcm9udGVuZC5oCkBAIC0xNTAsOCArMTUwLDggQEAgRnJvbnRlbmRH
ZXQgIyMgX25hbWUgIyMgKCAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICk7CiAKIEZST05U
RU5EX0dFVF9QUk9QRVJUWShUYXJnZXQsIFBYRU5WQkRfVEFSR0VUKQotI2luY2x1ZGUgInJpbmcu
aCIKLUZST05URU5EX0dFVF9QUk9QRVJUWShSaW5nLCBQWEVOVkJEX1JJTkcpCisjaW5jbHVkZSAi
cHJvdG9jb2wuaCIKK0ZST05URU5EX0dFVF9QUk9QRVJUWShQcm90b2NvbCwgUFhFTlZCRF9QUk9U
T0NPTCkKICNpbmNsdWRlICJncmFudGVyLmgiCiBGUk9OVEVORF9HRVRfUFJPUEVSVFkoR3JhbnRl
ciwgUFhFTlZCRF9HUkFOVEVSKQogRlJPTlRFTkRfR0VUX1BST1BFUlRZKFRhcmdldElkLCBVTE9O
RykKZGlmZiAtLWdpdCBhL3NyYy94ZW52YmQvcmluZy5jIGIvc3JjL3hlbnZiZC9wcm90b2NvbC5j
CnNpbWlsYXJpdHkgaW5kZXggNjQlCnJlbmFtZSBmcm9tIHNyYy94ZW52YmQvcmluZy5jCnJlbmFt
ZSB0byBzcmMveGVudmJkL3Byb3RvY29sLmMKaW5kZXggMzNiMzQ2ZC4uMzk3NjdlYiAxMDA2NDQK
LS0tIGEvc3JjL3hlbnZiZC9yaW5nLmMKKysrIGIvc3JjL3hlbnZiZC9wcm90b2NvbC5jCkBAIC00
MCw3ICs0MCw3IEBACiAjaW5jbHVkZSA8ZXZ0Y2huX2ludGVyZmFjZS5oPgogI2luY2x1ZGUgPGRl
YnVnX2ludGVyZmFjZS5oPgogCi0jaW5jbHVkZSAicmluZy5oIgorI2luY2x1ZGUgInByb3RvY29s
LmgiCiAjaW5jbHVkZSAiZnJvbnRlbmQuaCIKICNpbmNsdWRlICJ0YXJnZXQuaCIKICNpbmNsdWRl
ICJhZGFwdGVyLmgiCkBAIC01MywxMCArNTMsMTAgQEAKICNpbmNsdWRlICJkZWJ1Zy5oIgogI2lu
Y2x1ZGUgImFzc2VydC5oIgogCi0jZGVmaW5lIFhFTlZCRF9NQVhfUklOR19QQUdFX09SREVSICAo
NCkKLSNkZWZpbmUgWEVOVkJEX01BWF9SSU5HX1BBR0VTICAgICAgICgxIDw8IFhFTlZCRF9NQVhf
UklOR19QQUdFX09SREVSKQorI2RlZmluZSBYRU5WQkRfTUFYX1BST1RPQ09MX1BBR0VfT1JERVIg
ICg0KQorI2RlZmluZSBYRU5WQkRfTUFYX1BST1RPQ09MX1BBR0VTICAgICAgICgxIDw8IFhFTlZC
RF9NQVhfUFJPVE9DT0xfUEFHRV9PUkRFUikKIAotc3RydWN0IF9YRU5WQkRfUklORyB7CitzdHJ1
Y3QgX1hFTlZCRF9QUk9UT0NPTCB7CiAgICAgUFhFTlZCRF9GUk9OVEVORCAgICAgICAgICAgICAg
ICBGcm9udGVuZDsKICAgICBCT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgIENvbm5lY3Rl
ZDsKICAgICBCT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgIEVuYWJsZWQ7CkBAIC03Myw3
ICs3Myw3IEBAIHN0cnVjdCBfWEVOVkJEX1JJTkcgewogICAgIGJsa2lmX3NyaW5nX3QqICAgICAg
ICAgICAgICAgICAgU2hhcmVkOwogICAgIGJsa2lmX2Zyb250X3JpbmdfdCAgICAgICAgICAgICAg
RnJvbnQ7CiAgICAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlcjsKLSAgICBQ
Vk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyYW50c1tYRU5WQkRfTUFYX1JJTkdfUEFH
RVNdOworICAgIFBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JhbnRzW1hFTlZCRF9N
QVhfUFJPVE9DT0xfUEFHRVNdOwogICAgIFBYRU5CVVNfRVZUQ0hOX0NIQU5ORUwgICAgICAgICAg
Q2hhbm5lbDsKICAgICBLRFBDICAgICAgICAgICAgICAgICAgICAgICAgICAgIERwYzsKIApAQCAt
MTAwLDI3ICsxMDAsMjcgQEAgc3RydWN0IF9YRU5WQkRfUklORyB7CiB9OwogCiAjZGVmaW5lIE1B
WF9OQU1FX0xFTiAgICAgICAgICAgICAgICA2NAotI2RlZmluZSBSSU5HX1BPT0xfVEFHICAgICAg
ICAgICAgICAgJ2duUlgnCisjZGVmaW5lIFBST1RPQ09MX1BPT0xfVEFHICAgICAgICAgICAnZ25S
WCcKICNkZWZpbmUgWEVOX0lPX1BST1RPX0FCSSAgICAgICAgICAgICJ4ODZfNjQtYWJpIgogCiBz
dGF0aWMgRk9SQ0VJTkxJTkUgUFZPSUQKLV9fUmluZ0FsbG9jYXRlKAorX19Qcm90b2NvbEFsbG9j
YXRlKAogICAgIElOICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoCiAgICAgKQog
ewogICAgIHJldHVybiBfX0FsbG9jYXRlUG9vbFdpdGhUYWcoTm9uUGFnZWRQb29sLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUklOR19QT09MX1RBRyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBQUk9UT0NPTF9QT09MX1RBRyk7CiB9CiAKIHN0YXRpYyBGT1JDRUlOTElORSBWT0lECi1f
X1JpbmdGcmVlKAorX19Qcm90b2NvbEZyZWUoCiAgICAgSU4gIFBWT0lEICAgICAgICAgICAgICAg
ICAgICAgICBCdWZmZXIKICAgICApCiB7CiAgICAgaWYgKEJ1ZmZlcikKICAgICAgICAgX19GcmVl
UG9vbFdpdGhUYWcoQnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICBSSU5HX1BPT0xf
VEFHKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPVE9DT0xfUE9PTF9UQUcpOwogfQog
CiBzdGF0aWMgRk9SQ0VJTkxJTkUgVk9JRApAQCAtMTM4LDEzICsxMzgsMTMgQEAgeGVuX3dtYigp
CiB9CiAKIHN0YXRpYyBGT1JDRUlOTElORSBWT0lECi1fX1JpbmdJbnNlcnQoCi0gICAgSU4gIFBY
RU5WQkRfUklORyAgICAgICAgUmluZywKK19fUHJvdG9jb2xJbnNlcnQoCisgICAgSU4gIFBYRU5W
QkRfUFJPVE9DT0wgICAgICAgIFByb3RvY29sLAogICAgIElOICBQWEVOVkJEX1JFUVVFU1QgICAg
IFJlcXVlc3QsCiAgICAgSU4gIGJsa2lmX3JlcXVlc3RfdCogICAgcmVxCiAgICAgKQogewotICAg
IFBYRU5WQkRfR1JBTlRFUiAgICAgICAgIEdyYW50ZXIgPSBGcm9udGVuZEdldEdyYW50ZXIoUmlu
Zy0+RnJvbnRlbmQpOworICAgIFBYRU5WQkRfR1JBTlRFUiAgICAgICAgIEdyYW50ZXIgPSBGcm9u
dGVuZEdldEdyYW50ZXIoUHJvdG9jb2wtPkZyb250ZW5kKTsKIAogICAgIHN3aXRjaCAoUmVxdWVz
dC0+T3BlcmF0aW9uKSB7CiAgICAgY2FzZSBCTEtJRl9PUF9SRUFEOgpAQCAtMTYzLDcgKzE2Myw3
IEBAIF9fUmluZ0luc2VydCgKICAgICAgICAgICAgIHJlcV9pbmRpcmVjdC0+bnJfc2VnbWVudHMg
ICAgICAgPSBSZXF1ZXN0LT5OclNlZ21lbnRzOwogICAgICAgICAgICAgcmVxX2luZGlyZWN0LT5p
ZCAgICAgICAgICAgICAgICA9IChVTE9ORzY0KShVTE9OR19QVFIpUmVxdWVzdDsKICAgICAgICAg
ICAgIHJlcV9pbmRpcmVjdC0+c2VjdG9yX251bWJlciAgICAgPSBSZXF1ZXN0LT5GaXJzdFNlY3Rv
cjsKLSAgICAgICAgICAgIHJlcV9pbmRpcmVjdC0+aGFuZGxlICAgICAgICAgICAgPSAoVVNIT1JU
KUZyb250ZW5kR2V0RGV2aWNlSWQoUmluZy0+RnJvbnRlbmQpOworICAgICAgICAgICAgcmVxX2lu
ZGlyZWN0LT5oYW5kbGUgICAgICAgICAgICA9IChVU0hPUlQpRnJvbnRlbmRHZXREZXZpY2VJZChQ
cm90b2NvbC0+RnJvbnRlbmQpOwogCiAgICAgICAgICAgICBmb3IgKFBhZ2VJZHggPSAwLAogICAg
ICAgICAgICAgICAgICBQYWdlRW50cnkgPSBSZXF1ZXN0LT5JbmRpcmVjdHMuRmxpbmssCkBAIC0x
OTQsNyArMTk0LDcgQEAgX19SaW5nSW5zZXJ0KAogCiAgICAgICAgICAgICByZXEtPm9wZXJhdGlv
biAgICAgICAgICAgICAgICAgID0gUmVxdWVzdC0+T3BlcmF0aW9uOwogICAgICAgICAgICAgcmVx
LT5ucl9zZWdtZW50cyAgICAgICAgICAgICAgICA9IChVQ0hBUilSZXF1ZXN0LT5OclNlZ21lbnRz
OwotICAgICAgICAgICAgcmVxLT5oYW5kbGUgICAgICAgICAgICAgICAgICAgICA9IChVU0hPUlQp
RnJvbnRlbmRHZXREZXZpY2VJZChSaW5nLT5Gcm9udGVuZCk7CisgICAgICAgICAgICByZXEtPmhh
bmRsZSAgICAgICAgICAgICAgICAgICAgID0gKFVTSE9SVClGcm9udGVuZEdldERldmljZUlkKFBy
b3RvY29sLT5Gcm9udGVuZCk7CiAgICAgICAgICAgICByZXEtPmlkICAgICAgICAgICAgICAgICAg
ICAgICAgID0gKFVMT05HNjQpKFVMT05HX1BUUilSZXF1ZXN0OwogICAgICAgICAgICAgcmVxLT5z
ZWN0b3JfbnVtYmVyICAgICAgICAgICAgICA9IFJlcXVlc3QtPkZpcnN0U2VjdG9yOwogCkBAIC0y
MTQsNyArMjE0LDcgQEAgX19SaW5nSW5zZXJ0KAogICAgIGNhc2UgQkxLSUZfT1BfRkxVU0hfRElT
S0NBQ0hFOgogICAgICAgICByZXEtPm9wZXJhdGlvbiAgICAgICAgICAgICAgICAgID0gUmVxdWVz
dC0+T3BlcmF0aW9uOwogICAgICAgICByZXEtPm5yX3NlZ21lbnRzICAgICAgICAgICAgICAgID0g
MDsKLSAgICAgICAgcmVxLT5oYW5kbGUgICAgICAgICAgICAgICAgICAgICA9IChVU0hPUlQpRnJv
bnRlbmRHZXREZXZpY2VJZChSaW5nLT5Gcm9udGVuZCk7CisgICAgICAgIHJlcS0+aGFuZGxlICAg
ICAgICAgICAgICAgICAgICAgPSAoVVNIT1JUKUZyb250ZW5kR2V0RGV2aWNlSWQoUHJvdG9jb2wt
PkZyb250ZW5kKTsKICAgICAgICAgcmVxLT5pZCAgICAgICAgICAgICAgICAgICAgICAgICA9IChV
TE9ORzY0KShVTE9OR19QVFIpUmVxdWVzdDsKICAgICAgICAgcmVxLT5zZWN0b3JfbnVtYmVyICAg
ICAgICAgICAgICA9IFJlcXVlc3QtPkZpcnN0U2VjdG9yOwogICAgICAgICBicmVhazsKQEAgLTIy
NCw3ICsyMjQsNyBAQCBfX1JpbmdJbnNlcnQoCiAgICAgICAgIHJlcV9kaXNjYXJkID0gKGJsa2lm
X3JlcXVlc3RfZGlzY2FyZF90KilyZXE7CiAgICAgICAgIHJlcV9kaXNjYXJkLT5vcGVyYXRpb24g
ICAgICAgICAgPSBCTEtJRl9PUF9ESVNDQVJEOwogICAgICAgICByZXFfZGlzY2FyZC0+ZmxhZyAg
ICAgICAgICAgICAgID0gUmVxdWVzdC0+RmxhZ3M7Ci0gICAgICAgIHJlcV9kaXNjYXJkLT5oYW5k
bGUgICAgICAgICAgICAgPSAoVVNIT1JUKUZyb250ZW5kR2V0RGV2aWNlSWQoUmluZy0+RnJvbnRl
bmQpOworICAgICAgICByZXFfZGlzY2FyZC0+aGFuZGxlICAgICAgICAgICAgID0gKFVTSE9SVClG
cm9udGVuZEdldERldmljZUlkKFByb3RvY29sLT5Gcm9udGVuZCk7CiAgICAgICAgIHJlcV9kaXNj
YXJkLT5pZCAgICAgICAgICAgICAgICAgPSAoVUxPTkc2NCkoVUxPTkdfUFRSKVJlcXVlc3Q7CiAg
ICAgICAgIHJlcV9kaXNjYXJkLT5zZWN0b3JfbnVtYmVyICAgICAgPSBSZXF1ZXN0LT5GaXJzdFNl
Y3RvcjsKICAgICAgICAgcmVxX2Rpc2NhcmQtPm5yX3NlY3RvcnMgICAgICAgICA9IFJlcXVlc3Qt
Pk5yU2VjdG9yczsKQEAgLTIzNCwyMSArMjM0LDIxIEBAIF9fUmluZ0luc2VydCgKICAgICAgICAg
QVNTRVJUKEZBTFNFKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgICsrUmluZy0+U3VibWl0
dGVkOworICAgICsrUHJvdG9jb2wtPlN1Ym1pdHRlZDsKIH0KIAogc3RhdGljIFBYRU5WQkRfSU5E
SVJFQ1QKLVJpbmdHZXRJbmRpcmVjdCgKLSAgICBJTiAgUFhFTlZCRF9SSU5HICAgIFJpbmcKK1By
b3RvY29sR2V0SW5kaXJlY3QoCisgICAgSU4gIFBYRU5WQkRfUFJPVE9DT0wgICAgUHJvdG9jb2wK
ICAgICApCiB7CiAgICAgUFhFTlZCRF9JTkRJUkVDVCAgICBJbmRpcmVjdDsKICAgICBOVFNUQVRV
UyAgICAgICAgICAgIHN0YXR1czsKLSAgICBQWEVOVkJEX0dSQU5URVIgICAgIEdyYW50ZXIgPSBG
cm9udGVuZEdldEdyYW50ZXIoUmluZy0+RnJvbnRlbmQpOworICAgIFBYRU5WQkRfR1JBTlRFUiAg
ICAgR3JhbnRlciA9IEZyb250ZW5kR2V0R3JhbnRlcihQcm90b2NvbC0+RnJvbnRlbmQpOwogCiAg
ICAgSW5kaXJlY3QgPSBYRU5CVVNfQ0FDSEUoR2V0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICZSaW5nLT5DYWNoZUludGVyZmFjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBS
aW5nLT5JbmRpcmVjdENhY2hlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQcm90b2Nv
bC0+Q2FjaGVJbnRlcmZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvdG9jb2wt
PkluZGlyZWN0Q2FjaGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UpOwogICAg
IGlmIChJbmRpcmVjdCA9PSBOVUxMKQogICAgICAgICBnb3RvIGZhaWwxOwpAQCAtMjY2LDggKzI2
Niw4IEBAIFJpbmdHZXRJbmRpcmVjdCgKIAogZmFpbDI6CiAgICAgWEVOQlVTX0NBQ0hFKFB1dCwK
LSAgICAgICAgICAgICAgICAgJlJpbmctPkNhY2hlSW50ZXJmYWNlLAotICAgICAgICAgICAgICAg
ICBSaW5nLT5JbmRpcmVjdENhY2hlLAorICAgICAgICAgICAgICAgICAmUHJvdG9jb2wtPkNhY2hl
SW50ZXJmYWNlLAorICAgICAgICAgICAgICAgICBQcm90b2NvbC0+SW5kaXJlY3RDYWNoZSwKICAg
ICAgICAgICAgICAgICAgSW5kaXJlY3QsCiAgICAgICAgICAgICAgICAgIEZBTFNFKTsKIGZhaWwx
OgpAQCAtMjc1LDEyICsyNzUsMTIgQEAgZmFpbDE6CiB9CiAKIHN0YXRpYyBWT0lECi1SaW5nUHV0
SW5kaXJlY3QoCi0gICAgSU4gIFBYRU5WQkRfUklORyAgICAgICAgUmluZywKK1Byb3RvY29sUHV0
SW5kaXJlY3QoCisgICAgSU4gIFBYRU5WQkRfUFJPVE9DT0wgICAgICAgIFByb3RvY29sLAogICAg
IElOICBQWEVOVkJEX0lORElSRUNUICAgIEluZGlyZWN0CiAgICAgKQogewotICAgIFBYRU5WQkRf
R1JBTlRFUiAgICAgICAgIEdyYW50ZXIgPSBGcm9udGVuZEdldEdyYW50ZXIoUmluZy0+RnJvbnRl
bmQpOworICAgIFBYRU5WQkRfR1JBTlRFUiAgICAgICAgIEdyYW50ZXIgPSBGcm9udGVuZEdldEdy
YW50ZXIoUHJvdG9jb2wtPkZyb250ZW5kKTsKIAogICAgIGlmIChJbmRpcmVjdC0+R3JhbnQpCiAg
ICAgICAgIEdyYW50ZXJQdXQoR3JhbnRlciwgSW5kaXJlY3QtPkdyYW50KTsKQEAgLTI4OSwzMCAr
Mjg5LDMwIEBAIFJpbmdQdXRJbmRpcmVjdCgKICAgICBSdGxaZXJvTWVtb3J5KCZJbmRpcmVjdC0+
TGlzdEVudHJ5LCBzaXplb2YoTElTVF9FTlRSWSkpOwogCiAgICAgWEVOQlVTX0NBQ0hFKFB1dCwK
LSAgICAgICAgICAgICAgICAgJlJpbmctPkNhY2hlSW50ZXJmYWNlLAotICAgICAgICAgICAgICAg
ICBSaW5nLT5JbmRpcmVjdENhY2hlLAorICAgICAgICAgICAgICAgICAmUHJvdG9jb2wtPkNhY2hl
SW50ZXJmYWNlLAorICAgICAgICAgICAgICAgICBQcm90b2NvbC0+SW5kaXJlY3RDYWNoZSwKICAg
ICAgICAgICAgICAgICAgSW5kaXJlY3QsCiAgICAgICAgICAgICAgICAgIEZBTFNFKTsKIH0KIAog
c3RhdGljIFBYRU5WQkRfU0VHTUVOVAotUmluZ0dldFNlZ21lbnQoCi0gICAgSU4gIFBYRU5WQkRf
UklORyAgICBSaW5nCitQcm90b2NvbEdldFNlZ21lbnQoCisgICAgSU4gIFBYRU5WQkRfUFJPVE9D
T0wgICAgUHJvdG9jb2wKICAgICApCiB7CiAgICAgcmV0dXJuIFhFTkJVU19DQUNIRShHZXQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAmUmluZy0+Q2FjaGVJbnRlcmZhY2UsCi0gICAgICAgICAg
ICAgICAgICAgICAgICBSaW5nLT5TZWdtZW50Q2FjaGUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAmUHJvdG9jb2wtPkNhY2hlSW50ZXJmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgUHJv
dG9jb2wtPlNlZ21lbnRDYWNoZSwKICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFKTsKIH0K
IAogc3RhdGljIFZPSUQKLVJpbmdQdXRTZWdtZW50KAotICAgIElOICBQWEVOVkJEX1JJTkcgICAg
UmluZywKK1Byb3RvY29sUHV0U2VnbWVudCgKKyAgICBJTiAgUFhFTlZCRF9QUk9UT0NPTCAgICBQ
cm90b2NvbCwKICAgICBJTiAgUFhFTlZCRF9TRUdNRU5UIFNlZ21lbnQKICAgICApCiB7Ci0gICAg
UFhFTlZCRF9HUkFOVEVSICAgICBHcmFudGVyID0gRnJvbnRlbmRHZXRHcmFudGVyKFJpbmctPkZy
b250ZW5kKTsKKyAgICBQWEVOVkJEX0dSQU5URVIgICAgIEdyYW50ZXIgPSBGcm9udGVuZEdldEdy
YW50ZXIoUHJvdG9jb2wtPkZyb250ZW5kKTsKICAgICBQWEVOVkJEX0JPVU5DRSAgICAgIEJvdW5j
ZSA9IFNlZ21lbnQtPkJvdW5jZTsKIAogICAgIGlmIChTZWdtZW50LT5HcmFudCkKQEAgLTMyOSw3
ICszMjksNyBAQCBSaW5nUHV0U2VnbWVudCgKICAgICAgICAgQm91bmNlLT5Tb3VyY2VQZm5bMF0g
PSAwOwogICAgICAgICBCb3VuY2UtPlNvdXJjZVBmblsxXSA9IDA7CiAKLSAgICAgICAgQWRhcHRl
clB1dEJvdW5jZShUYXJnZXRHZXRBZGFwdGVyKEZyb250ZW5kR2V0VGFyZ2V0KFJpbmctPkZyb250
ZW5kKSksCisgICAgICAgIEFkYXB0ZXJQdXRCb3VuY2UoVGFyZ2V0R2V0QWRhcHRlcihGcm9udGVu
ZEdldFRhcmdldChQcm90b2NvbC0+RnJvbnRlbmQpKSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICBCb3VuY2UpOwogICAgIH0KICAgICBTZWdtZW50LT5Cb3VuY2UgPSBOVUxMOwpAQCAtMzM5LDI2
ICszMzksMjYgQEAgUmluZ1B1dFNlZ21lbnQoCiAgICAgUnRsWmVyb01lbW9yeSgmU2VnbWVudC0+
TGlzdEVudHJ5LCBzaXplb2YoTElTVF9FTlRSWSkpOwogCiAgICAgWEVOQlVTX0NBQ0hFKFB1dCwK
LSAgICAgICAgICAgICAgICAgJlJpbmctPkNhY2hlSW50ZXJmYWNlLAotICAgICAgICAgICAgICAg
ICBSaW5nLT5TZWdtZW50Q2FjaGUsCisgICAgICAgICAgICAgICAgICZQcm90b2NvbC0+Q2FjaGVJ
bnRlcmZhY2UsCisgICAgICAgICAgICAgICAgIFByb3RvY29sLT5TZWdtZW50Q2FjaGUsCiAgICAg
ICAgICAgICAgICAgIFNlZ21lbnQsCiAgICAgICAgICAgICAgICAgIEZBTFNFKTsKIH0KIAogc3Rh
dGljIFBYRU5WQkRfUkVRVUVTVAotUmluZ0dldFJlcXVlc3QoCi0gICAgSU4gIFBYRU5WQkRfUklO
RyAgICBSaW5nCitQcm90b2NvbEdldFJlcXVlc3QoCisgICAgSU4gIFBYRU5WQkRfUFJPVE9DT0wg
ICAgUHJvdG9jb2wKICAgICApCiB7CiAgICAgcmV0dXJuIFhFTkJVU19DQUNIRShHZXQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAmUmluZy0+Q2FjaGVJbnRlcmZhY2UsCi0gICAgICAgICAgICAg
ICAgICAgICAgICBSaW5nLT5SZXF1ZXN0Q2FjaGUsCisgICAgICAgICAgICAgICAgICAgICAgICAm
UHJvdG9jb2wtPkNhY2hlSW50ZXJmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgUHJvdG9j
b2wtPlJlcXVlc3RDYWNoZSwKICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFKTsKIH0KIAog
c3RhdGljIFZPSUQKLVJpbmdQdXRSZXF1ZXN0KAotICAgIElOICBQWEVOVkJEX1JJTkcgICAgUmlu
ZywKK1Byb3RvY29sUHV0UmVxdWVzdCgKKyAgICBJTiAgUFhFTlZCRF9QUk9UT0NPTCAgICBQcm90
b2NvbCwKICAgICBJTiAgUFhFTlZCRF9SRVFVRVNUIFJlcXVlc3QKICAgICApCiB7CkBAIC0zNzEs
NyArMzcxLDcgQEAgUmluZ1B1dFJlcXVlc3QoCiAgICAgICAgIGlmIChMaXN0RW50cnkgPT0gJlJl
cXVlc3QtPlNlZ21lbnRzKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIFNlZ21lbnQgPSBD
T05UQUlOSU5HX1JFQ09SRChMaXN0RW50cnksIFhFTlZCRF9TRUdNRU5ULCBMaXN0RW50cnkpOwot
ICAgICAgICBSaW5nUHV0U2VnbWVudChSaW5nLCBTZWdtZW50KTsKKyAgICAgICAgUHJvdG9jb2xQ
dXRTZWdtZW50KFByb3RvY29sLCBTZWdtZW50KTsKICAgICB9CiAKICAgICBmb3IgKDs7KSB7CkBA
IC0zODEsNyArMzgxLDcgQEAgUmluZ1B1dFJlcXVlc3QoCiAgICAgICAgIGlmIChMaXN0RW50cnkg
PT0gJlJlcXVlc3QtPkluZGlyZWN0cykKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBJbmRp
cmVjdCA9IENPTlRBSU5JTkdfUkVDT1JEKExpc3RFbnRyeSwgWEVOVkJEX0lORElSRUNULCBMaXN0
RW50cnkpOwotICAgICAgICBSaW5nUHV0SW5kaXJlY3QoUmluZywgSW5kaXJlY3QpOworICAgICAg
ICBQcm90b2NvbFB1dEluZGlyZWN0KFByb3RvY29sLCBJbmRpcmVjdCk7CiAgICAgfQogCiAgICAg
UmVxdWVzdC0+U3JiRXh0ID0gTlVMTDsKQEAgLTM5MywyMiArMzkzLDIyIEBAIFJpbmdQdXRSZXF1
ZXN0KAogICAgIFJ0bFplcm9NZW1vcnkoJlJlcXVlc3QtPkxpc3RFbnRyeSwgc2l6ZW9mKExJU1Rf
RU5UUlkpKTsKIAogICAgIFhFTkJVU19DQUNIRShQdXQsCi0gICAgICAgICAgICAgICAgICZSaW5n
LT5DYWNoZUludGVyZmFjZSwKLSAgICAgICAgICAgICAgICAgUmluZy0+UmVxdWVzdENhY2hlLAor
ICAgICAgICAgICAgICAgICAmUHJvdG9jb2wtPkNhY2hlSW50ZXJmYWNlLAorICAgICAgICAgICAg
ICAgICBQcm90b2NvbC0+UmVxdWVzdENhY2hlLAogICAgICAgICAgICAgICAgICBSZXF1ZXN0LAog
ICAgICAgICAgICAgICAgICBGQUxTRSk7CiB9CiAKIHN0YXRpYyBGT1JDRUlOTElORSBQWEVOVkJE
X1JFUVVFU1QKLVJpbmdGaW5kUmVxdWVzdCgKLSAgICBJTiAgUFhFTlZCRF9SSU5HICAgIFJpbmcs
CitQcm90b2NvbEZpbmRSZXF1ZXN0KAorICAgIElOICBQWEVOVkJEX1BST1RPQ09MICAgIFByb3Rv
Y29sLAogICAgIElOICBVTE9ORzY0ICAgICAgICAgSWQKICAgICApCiB7CiAgICAgS0lSUUwgICAg
ICAgICAgICAgICBJcnFsOwogICAgIFBMSVNUX0VOVFJZICAgICAgICAgTGlzdEVudHJ5OwogICAg
IFBYRU5WQkRfUkVRVUVTVCAgICAgUmVxdWVzdDsKLSAgICBQWEVOVkJEX1FVRVVFICAgICAgIFF1
ZXVlID0gJlJpbmctPlN1Ym1pdHRlZFJlcXM7CisgICAgUFhFTlZCRF9RVUVVRSAgICAgICBRdWV1
ZSA9ICZQcm90b2NvbC0+U3VibWl0dGVkUmVxczsKIAogICAgIEtlQWNxdWlyZVNwaW5Mb2NrKCZR
dWV1ZS0+TG9jaywgJklycWwpOwogCkBAIC00MjYsMzkgKzQyNiwzOSBAQCBSaW5nRmluZFJlcXVl
c3QoCiAKICAgICBLZVJlbGVhc2VTcGluTG9jaygmUXVldWUtPkxvY2ssIElycWwpOwogICAgIFdh
cm5pbmcoIlRhcmdldFslZF0gOiBUYWcgJWxseCBub3QgZm91bmQgaW4gc3VibWl0dGVkIGxpc3Qg
KCV1IGl0ZW1zKVxuIiwKLSAgICAgICAgICAgIEZyb250ZW5kR2V0VGFyZ2V0SWQoUmluZy0+RnJv
bnRlbmQpLAorICAgICAgICAgICAgRnJvbnRlbmRHZXRUYXJnZXRJZChQcm90b2NvbC0+RnJvbnRl
bmQpLAogICAgICAgICAgICAgSWQsCiAgICAgICAgICAgICBRdWV1ZUNvdW50KFF1ZXVlKSk7CiAg
ICAgcmV0dXJuIE5VTEw7CiB9CiAKIHN0YXRpYyBGT1JDRUlOTElORSBWT0lECi1fX1JpbmdJbmNC
bGtpZk9wQ291bnQoCi0gICAgSU4gIFBYRU5WQkRfUklORyAgICBSaW5nLAorX19Qcm90b2NvbElu
Y0Jsa2lmT3BDb3VudCgKKyAgICBJTiAgUFhFTlZCRF9QUk9UT0NPTCAgICBQcm90b2NvbCwKICAg
ICBJTiAgUFhFTlZCRF9SRVFVRVNUIFJlcXVlc3QKICAgICApCiB7CiAgICAgc3dpdGNoIChSZXF1
ZXN0LT5PcGVyYXRpb24pIHsKICAgICBjYXNlIEJMS0lGX09QX1JFQUQ6CiAgICAgICAgIGlmIChS
ZXF1ZXN0LT5OclNlZ21lbnRzID4gQkxLSUZfTUFYX1NFR01FTlRTX1BFUl9SRVFVRVNUKQotICAg
ICAgICAgICAgKytSaW5nLT5CbGtPcEluZGlyZWN0UmVhZDsKKyAgICAgICAgICAgICsrUHJvdG9j
b2wtPkJsa09wSW5kaXJlY3RSZWFkOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICArK1Jpbmct
PkJsa09wUmVhZDsKKyAgICAgICAgICAgICsrUHJvdG9jb2wtPkJsa09wUmVhZDsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBCTEtJRl9PUF9XUklURToKICAgICAgICAgaWYgKFJlcXVlc3QtPk5y
U2VnbWVudHMgPiBCTEtJRl9NQVhfU0VHTUVOVFNfUEVSX1JFUVVFU1QpCi0gICAgICAgICAgICAr
K1JpbmctPkJsa09wSW5kaXJlY3RXcml0ZTsKKyAgICAgICAgICAgICsrUHJvdG9jb2wtPkJsa09w
SW5kaXJlY3RXcml0ZTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgKytSaW5nLT5CbGtPcFdy
aXRlOworICAgICAgICAgICAgKytQcm90b2NvbC0+QmxrT3BXcml0ZTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBCTEtJRl9PUF9XUklURV9CQVJSSUVSOgotICAgICAgICArK1JpbmctPkJsa09w
QmFycmllcjsKKyAgICAgICAgKytQcm90b2NvbC0+QmxrT3BCYXJyaWVyOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIEJMS0lGX09QX0RJU0NBUkQ6Ci0gICAgICAgICsrUmluZy0+QmxrT3BEaXNj
YXJkOworICAgICAgICArK1Byb3RvY29sLT5CbGtPcERpc2NhcmQ7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgQkxLSUZfT1BfRkxVU0hfRElTS0NBQ0hFOgotICAgICAgICArK1JpbmctPkJsa09w
Rmx1c2g7CisgICAgICAgICsrUHJvdG9jb2wtPkJsa09wRmx1c2g7CiAgICAgICAgIGJyZWFrOwog
ICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVChGQUxTRSk7CkBAIC00NjcsNyArNDY3LDcgQEAg
X19SaW5nSW5jQmxraWZPcENvdW50KAogfQogCiBzdGF0aWMgRk9SQ0VJTkxJTkUgVUxPTkcKLV9f
UmluZ1NlY3RvcnNQZXJQYWdlKAorX19Qcm90b2NvbFNlY3RvcnNQZXJQYWdlKAogICAgIElOICBV
TE9ORyAgIFNlY3RvclNpemUKICAgICApCiB7CkBAIC00NzYsMTkgKzQ3NiwxOSBAQCBfX1JpbmdT
ZWN0b3JzUGVyUGFnZSgKIH0KIAogc3RhdGljIEZPUkNFSU5MSU5FIFZPSUQKLV9fUmluZ09wZXJh
dGlvbigKK19fUHJvdG9jb2xPcGVyYXRpb24oCiAgICAgSU4gIFVDSEFSICAgICAgIENkYk9wLAot
ICAgIE9VVCBQVUNIQVIgICAgICBSaW5nT3AsCisgICAgT1VUIFBVQ0hBUiAgICAgIFByb3RvY29s
T3AsCiAgICAgT1VUIFBCT09MRUFOICAgIFJlYWRPbmx5CiAgICAgKQogewogICAgIHN3aXRjaCAo
Q2RiT3ApIHsKICAgICBjYXNlIFNDU0lPUF9SRUFEOgotICAgICAgICAqUmluZ09wICAgICA9IEJM
S0lGX09QX1JFQUQ7CisgICAgICAgICpQcm90b2NvbE9wICAgICA9IEJMS0lGX09QX1JFQUQ7CiAg
ICAgICAgICpSZWFkT25seSAgID0gRkFMU0U7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU0NT
SU9QX1dSSVRFOgotICAgICAgICAqUmluZ09wICAgICA9IEJMS0lGX09QX1dSSVRFOworICAgICAg
ICAqUHJvdG9jb2xPcCAgICAgPSBCTEtJRl9PUF9XUklURTsKICAgICAgICAgKlJlYWRPbmx5ICAg
PSBUUlVFOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgpAQCAtNDk3LDExICs0OTcsMTEg
QEAgX19SaW5nT3BlcmF0aW9uKAogfQogCiBzdGF0aWMgRk9SQ0VJTkxJTkUgTU1fUEFHRV9QUklP
UklUWQotX19SaW5nUHJpb3JpdHkoCi0gICAgSU4gIFBYRU5WQkRfUklORyAgICBSaW5nCitfX1By
b3RvY29sUHJpb3JpdHkoCisgICAgSU4gIFBYRU5WQkRfUFJPVE9DT0wgICAgUHJvdG9jb2wKICAg
ICApCiB7Ci0gICAgUFhFTlZCRF9DQVBTICAgICAgICBDYXBzID0gRnJvbnRlbmRHZXRDYXBzKFJp
bmctPkZyb250ZW5kKTsKKyAgICBQWEVOVkJEX0NBUFMgICAgICAgIENhcHMgPSBGcm9udGVuZEdl
dENhcHMoUHJvdG9jb2wtPkZyb250ZW5kKTsKICAgICBpZiAoIShDYXBzLT5QYWdpbmcgfHwKICAg
ICAgICAgICBDYXBzLT5IaWJlcm5hdGlvbiB8fAogICAgICAgICAgIENhcHMtPkR1bXBGaWxlKSkK
QEAgLTUxMSw3ICs1MTEsNyBAQCBfX1JpbmdQcmlvcml0eSgKIH0KIAogc3RhdGljIEZPUkNFSU5M
SU5FIFZPSUQKLVJpbmdSZXF1ZXN0Q29weU91dHB1dCgKK1Byb3RvY29sUmVxdWVzdENvcHlPdXRw
dXQoCiAgICAgSU4gIFBYRU5WQkRfUkVRVUVTVCBSZXF1ZXN0CiAgICAgKQogewpAQCAtNTM1LDgg
KzUzNSw4IEBAIFJpbmdSZXF1ZXN0Q29weU91dHB1dCgKIH0KIAogc3RhdGljIEJPT0xFQU4KLVJp
bmdQcmVwYXJlU2VnbWVudCgKLSAgICBJTiAgUFhFTlZCRF9SSU5HICAgIFJpbmcsCitQcm90b2Nv
bFByZXBhcmVTZWdtZW50KAorICAgIElOICBQWEVOVkJEX1BST1RPQ09MICAgIFByb3RvY29sLAog
ICAgIElOICBQWEVOVkJEX1NFR01FTlQgU2VnbWVudCwKICAgICBJTiAgUFhFTlZCRF9TUkJFWFQg
IFNyYkV4dCwKICAgICBJTiAgQk9PTEVBTiAgICAgICAgIFJlYWRPbmx5LApAQCAtNTQ4LDEwICs1
NDgsMTAgQEAgUmluZ1ByZXBhcmVTZWdtZW50KAogICAgIFVMT05HICAgICAgICAgICAgICAgT2Zm
c2V0OwogICAgIFVMT05HICAgICAgICAgICAgICAgTGVuZ3RoOwogICAgIE5UU1RBVFVTICAgICAg
ICAgICAgU3RhdHVzOwotICAgIFBYRU5WQkRfR1JBTlRFUiAgICAgR3JhbnRlciA9IEZyb250ZW5k
R2V0R3JhbnRlcihSaW5nLT5Gcm9udGVuZCk7Ci0gICAgY29uc3QgVUxPTkcgICAgICAgICBTZWN0
b3JTaXplID0gRnJvbnRlbmRHZXREaXNrSW5mbyhSaW5nLT5Gcm9udGVuZCktPlNlY3RvclNpemU7
Ci0gICAgY29uc3QgVUxPTkcgICAgICAgICBTZWN0b3JzUGVyUGFnZSA9IF9fUmluZ1NlY3RvcnNQ
ZXJQYWdlKFNlY3RvclNpemUpOwotICAgIFBYRU5WQkRfVEFSR0VUICAgICAgVGFyZ2V0ID0gRnJv
bnRlbmRHZXRUYXJnZXQoUmluZy0+RnJvbnRlbmQpOworICAgIFBYRU5WQkRfR1JBTlRFUiAgICAg
R3JhbnRlciA9IEZyb250ZW5kR2V0R3JhbnRlcihQcm90b2NvbC0+RnJvbnRlbmQpOworICAgIGNv
bnN0IFVMT05HICAgICAgICAgU2VjdG9yU2l6ZSA9IEZyb250ZW5kR2V0RGlza0luZm8oUHJvdG9j
b2wtPkZyb250ZW5kKS0+U2VjdG9yU2l6ZTsKKyAgICBjb25zdCBVTE9ORyAgICAgICAgIFNlY3Rv
cnNQZXJQYWdlID0gX19Qcm90b2NvbFNlY3RvcnNQZXJQYWdlKFNlY3RvclNpemUpOworICAgIFBY
RU5WQkRfVEFSR0VUICAgICAgVGFyZ2V0ID0gRnJvbnRlbmRHZXRUYXJnZXQoUHJvdG9jb2wtPkZy
b250ZW5kKTsKICAgICBQWEVOVkJEX0FEQVBURVIgICAgIEFkYXB0ZXIgPSBUYXJnZXRHZXRBZGFw
dGVyKFRhcmdldCk7CiAKICAgICBQZm4gPSBBZGFwdGVyR2V0TmV4dFNHRW50cnkoQWRhcHRlciwK
QEAgLTU2MSw3ICs1NjEsNyBAQCBSaW5nUHJlcGFyZVNlZ21lbnQoCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICZMZW5ndGgpOwogICAgIGlmICgoT2Zmc2V0ICYgKFNlY3RvclNpemUg
LSAxKSkgPT0gMCAmJgogICAgICAgICAoTGVuZ3RoICYgKFNlY3RvclNpemUgLSAxKSkgPT0gMCkg
ewotICAgICAgICArK1JpbmctPlNlZ3NHcmFudGVkOworICAgICAgICArK1Byb3RvY29sLT5TZWdz
R3JhbnRlZDsKICAgICAgICAgLy8gZ2V0IGZpcnN0IHNlY3RvciwgbGFzdCBzZWN0b3IgYW5kIGNv
dW50CiAgICAgICAgIFNlZ21lbnQtPkZpcnN0U2VjdG9yICAgID0gKFVDSEFSKSgoT2Zmc2V0ICsg
U2VjdG9yU2l6ZSAtIDEpIC8gU2VjdG9yU2l6ZSk7CiAgICAgICAgICpTZWN0b3JzTm93ICAgICAg
ICAgICAgID0gX19taW4oU2VjdG9yc0xlZnQsIFNlY3RvcnNQZXJQYWdlIC0gU2VnbWVudC0+Rmly
c3RTZWN0b3IpOwpAQCAtNTcyLDcgKzU3Miw3IEBAIFJpbmdQcmVwYXJlU2VnbWVudCgKICAgICAg
ICAgUFhFTlZCRF9CT1VOQ0UgICAgICBCb3VuY2U7CiAgICAgICAgIFBNREwgICAgICAgICAgICAg
ICAgTWRsOwogCi0gICAgICAgICsrUmluZy0+U2Vnc0JvdW5jZWQ7CisgICAgICAgICsrUHJvdG9j
b2wtPlNlZ3NCb3VuY2VkOwogICAgICAgICAvLyBnZXQgZmlyc3Qgc2VjdG9yLCBsYXN0IHNlY3Rv
ciBhbmQgY291bnQKICAgICAgICAgU2VnbWVudC0+Rmlyc3RTZWN0b3IgICAgPSAwOwogICAgICAg
ICAqU2VjdG9yc05vdyAgICAgICAgICAgICA9IF9fbWluKFNlY3RvcnNMZWZ0LCBTZWN0b3JzUGVy
UGFnZSk7CkBAIC02MTcsNyArNjE3LDcgQEAgUmluZ1ByZXBhcmVTZWdtZW50KAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTW1DYWNoZWQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBOVUxMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRkFMU0UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX1JpbmdQcmlvcml0eShSaW5nKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX1Byb3RvY29sUHJpb3Jp
dHkoUHJvdG9jb2wpKTsKICAgICAgICAgaWYgKEJvdW5jZS0+U291cmNlUHRyID09IE5VTEwpCiAg
ICAgICAgICAgICBnb3RvIGZhaWwyOwogCkBAIC02NDgsOCArNjQ4LDggQEAgZmFpbDE6CiB9CiAK
IHN0YXRpYyBCT09MRUFOCi1SaW5nUHJlcGFyZUJsa2lmUmVhZFdyaXRlKAotICAgIElOICBQWEVO
VkJEX1JJTkcgICAgUmluZywKK1Byb3RvY29sUHJlcGFyZUJsa2lmUmVhZFdyaXRlKAorICAgIElO
ICBQWEVOVkJEX1BST1RPQ09MICAgIFByb3RvY29sLAogICAgIElOICBQWEVOVkJEX1JFUVVFU1Qg
UmVxdWVzdCwKICAgICBJTiAgUFhFTlZCRF9TUkJFWFQgIFNyYkV4dCwKICAgICBJTiAgVUxPTkcg
ICAgICAgICAgIE1heFNlZ21lbnRzLApAQCAtNjYyLDcgKzY2Miw3IEBAIFJpbmdQcmVwYXJlQmxr
aWZSZWFkV3JpdGUoCiAgICAgVUNIQVIgICAgICAgICAgICAgICBPcGVyYXRpb247CiAgICAgQk9P
TEVBTiAgICAgICAgICAgICBSZWFkT25seTsKICAgICBVTE9ORyAgICAgICAgICAgICAgIEluZGV4
OwotICAgIF9fUmluZ09wZXJhdGlvbihDZGJfT3BlcmF0aW9uRXgoU3JiKSwgJk9wZXJhdGlvbiwg
JlJlYWRPbmx5KTsKKyAgICBfX1Byb3RvY29sT3BlcmF0aW9uKENkYl9PcGVyYXRpb25FeChTcmIp
LCAmT3BlcmF0aW9uLCAmUmVhZE9ubHkpOwogCiAgICAgUmVxdWVzdC0+T3BlcmF0aW9uICA9IE9w
ZXJhdGlvbjsKICAgICBSZXF1ZXN0LT5OclNlZ21lbnRzID0gMDsKQEAgLTY3NSwxNCArNjc1LDE0
IEBAIFJpbmdQcmVwYXJlQmxraWZSZWFkV3JpdGUoCiAgICAgICAgIFBYRU5WQkRfU0VHTUVOVCBT
ZWdtZW50OwogICAgICAgICBVTE9ORyAgICAgICAgICAgU2VjdG9yc05vdzsKIAotICAgICAgICBT
ZWdtZW50ID0gUmluZ0dldFNlZ21lbnQoUmluZyk7CisgICAgICAgIFNlZ21lbnQgPSBQcm90b2Nv
bEdldFNlZ21lbnQoUHJvdG9jb2wpOwogICAgICAgICBpZiAoU2VnbWVudCA9PSBOVUxMKQogICAg
ICAgICAgICAgZ290byBmYWlsMTsKIAogICAgICAgICBJbnNlcnRUYWlsTGlzdCgmUmVxdWVzdC0+
U2VnbWVudHMsICZTZWdtZW50LT5MaXN0RW50cnkpOwogICAgICAgICArK1JlcXVlc3QtPk5yU2Vn
bWVudHM7CiAKLSAgICAgICAgaWYgKCFSaW5nUHJlcGFyZVNlZ21lbnQoUmluZywKKyAgICAgICAg
aWYgKCFQcm90b2NvbFByZXBhcmVTZWdtZW50KFByb3RvY29sLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBTZWdtZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBT
cmJFeHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRPbmx5LApAQCAtNzA0
LDggKzcwNCw4IEBAIGZhaWwxOgogfQogCiBzdGF0aWMgQk9PTEVBTgotUmluZ1ByZXBhcmVCbGtp
ZkluZGlyZWN0KAotICAgIElOICBQWEVOVkJEX1JJTkcgICAgUmluZywKK1Byb3RvY29sUHJlcGFy
ZUJsa2lmSW5kaXJlY3QoCisgICAgSU4gIFBYRU5WQkRfUFJPVE9DT0wgICAgUHJvdG9jb2wsCiAg
ICAgSU4gIFBYRU5WQkRfUkVRVUVTVCBSZXF1ZXN0CiAgICAgKQogewpAQCAtNzE4LDcgKzcxOCw3
IEBAIFJpbmdQcmVwYXJlQmxraWZJbmRpcmVjdCgKICAgICAgICAgICAgICAgICArK0luZGV4KSB7
CiAgICAgICAgIFBYRU5WQkRfSU5ESVJFQ1QgICAgSW5kaXJlY3Q7CiAKLSAgICAgICAgSW5kaXJl
Y3QgPSBSaW5nR2V0SW5kaXJlY3QoUmluZyk7CisgICAgICAgIEluZGlyZWN0ID0gUHJvdG9jb2xH
ZXRJbmRpcmVjdChQcm90b2NvbCk7CiAgICAgICAgIGlmIChJbmRpcmVjdCA9PSBOVUxMKQogICAg
ICAgICAgICAgZ290byBmYWlsMTsKICAgICAgICAgSW5zZXJ0VGFpbExpc3QoJlJlcXVlc3QtPklu
ZGlyZWN0cywgJkluZGlyZWN0LT5MaXN0RW50cnkpOwpAQCAtNzMzLDEzICs3MzMsMTMgQEAgZmFp
bDE6CiB9CiAKIHN0YXRpYyBGT1JDRUlOTElORSBVTE9ORwotUmluZ1VzZUluZGlyZWN0KAotICAg
IElOICBQWEVOVkJEX1JJTkcgICAgUmluZywKK1Byb3RvY29sVXNlSW5kaXJlY3QoCisgICAgSU4g
IFBYRU5WQkRfUFJPVE9DT0wgICAgUHJvdG9jb2wsCiAgICAgSU4gIFVMT05HICAgICAgICAgICBT
ZWN0b3JzTGVmdAogICAgICkKIHsKLSAgICBjb25zdCBVTE9ORyBTZWN0b3JzUGVyUGFnZSA9IF9f
UmluZ1NlY3RvcnNQZXJQYWdlKEZyb250ZW5kR2V0RGlza0luZm8oUmluZy0+RnJvbnRlbmQpLT5T
ZWN0b3JTaXplKTsKLSAgICBjb25zdCBVTE9ORyBNYXhJbmRpcmVjdFNlZ3MgPSBGcm9udGVuZEdl
dEZlYXR1cmVzKFJpbmctPkZyb250ZW5kKS0+SW5kaXJlY3Q7CisgICAgY29uc3QgVUxPTkcgU2Vj
dG9yc1BlclBhZ2UgPSBfX1Byb3RvY29sU2VjdG9yc1BlclBhZ2UoRnJvbnRlbmRHZXREaXNrSW5m
byhQcm90b2NvbC0+RnJvbnRlbmQpLT5TZWN0b3JTaXplKTsKKyAgICBjb25zdCBVTE9ORyBNYXhJ
bmRpcmVjdFNlZ3MgPSBGcm9udGVuZEdldEZlYXR1cmVzKFByb3RvY29sLT5Gcm9udGVuZCktPklu
ZGlyZWN0OwogCiAgICAgaWYgKE1heEluZGlyZWN0U2VncyA8PSBCTEtJRl9NQVhfU0VHTUVOVFNf
UEVSX1JFUVVFU1QpCiAgICAgICAgIHJldHVybiBCTEtJRl9NQVhfU0VHTUVOVFNfUEVSX1JFUVVF
U1Q7IC8vIG5vdCBzdXBwb3J0ZWQKQEAgLTc1MSw5ICs3NTEsOSBAQCBSaW5nVXNlSW5kaXJlY3Qo
CiB9CiAKIHN0YXRpYyBGT1JDRUlOTElORSBWT0lECi1SaW5nUXVldWVSZXF1ZXN0TGlzdCgKLSAg
ICBJTiAgUFhFTlZCRF9SSU5HICAgIFJpbmcsCi0gICAgSU4gIFBMSVNUX0VOVFJZICAgICBMaXN0
CitQcm90b2NvbFF1ZXVlUmVxdWVzdExpc3QoCisgICAgSU4gIFBYRU5WQkRfUFJPVE9DT0wgICAg
UHJvdG9jb2wsCisgICAgSU4gIFBMSVNUX0VOVFJZICAgICAgICAgTGlzdAogICAgICkKIHsKICAg
ICBmb3IgKDs7KSB7CkBAIC03NjUsMTQgKzc2NSwxNCBAQCBSaW5nUXVldWVSZXF1ZXN0TGlzdCgK
ICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIFJlcXVlc3QgPSBDT05UQUlOSU5HX1JFQ09S
RChMaXN0RW50cnksIFhFTlZCRF9SRVFVRVNULCBMaXN0RW50cnkpOwotICAgICAgICBfX1JpbmdJ
bmNCbGtpZk9wQ291bnQoUmluZywgUmVxdWVzdCk7Ci0gICAgICAgIFF1ZXVlQXBwZW5kKCZSaW5n
LT5QcmVwYXJlZFJlcXMsICZSZXF1ZXN0LT5MaXN0RW50cnkpOworICAgICAgICBfX1Byb3RvY29s
SW5jQmxraWZPcENvdW50KFByb3RvY29sLCBSZXF1ZXN0KTsKKyAgICAgICAgUXVldWVBcHBlbmQo
JlByb3RvY29sLT5QcmVwYXJlZFJlcXMsICZSZXF1ZXN0LT5MaXN0RW50cnkpOwogICAgIH0KIH0K
IAogc3RhdGljIEZPUkNFSU5MSU5FIFZPSUQKLVJpbmdDYW5jZWxSZXF1ZXN0TGlzdCgKLSAgICBJ
TiAgUFhFTlZCRF9SSU5HICAgIFJpbmcsCitQcm90b2NvbENhbmNlbFJlcXVlc3RMaXN0KAorICAg
IElOICBQWEVOVkJEX1BST1RPQ09MICAgIFByb3RvY29sLAogICAgIElOICBQTElTVF9FTlRSWSAg
ICAgTGlzdAogICAgICkKIHsKQEAgLTc4NSwxMyArNzg1LDEzIEBAIFJpbmdDYW5jZWxSZXF1ZXN0
TGlzdCgKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIFJlcXVlc3QgPSBDT05UQUlOSU5H
X1JFQ09SRChMaXN0RW50cnksIFhFTlZCRF9SRVFVRVNULCBMaXN0RW50cnkpOwotICAgICAgICBS
aW5nUHV0UmVxdWVzdChSaW5nLCBSZXF1ZXN0KTsKKyAgICAgICAgUHJvdG9jb2xQdXRSZXF1ZXN0
KFByb3RvY29sLCBSZXF1ZXN0KTsKICAgICB9CiB9CiAKIHN0YXRpYyBCT09MRUFOCi1SaW5nUHJl
cGFyZVJlYWRXcml0ZSgKLSAgICBJTiAgUFhFTlZCRF9SSU5HICAgICAgICBSaW5nLAorUHJvdG9j
b2xQcmVwYXJlUmVhZFdyaXRlKAorICAgIElOICBQWEVOVkJEX1BST1RPQ09MICAgICAgICBQcm90
b2NvbCwKICAgICBJTiAgUFhFTlZCRF9TUkJFWFQgICAgICBTcmJFeHQKICAgICApCiB7CkBAIC04
MTAsMTYgKzgxMCwxNiBAQCBSaW5nUHJlcGFyZVJlYWRXcml0ZSgKICAgICAgICAgVUxPTkcgICAg
ICAgICAgIFNlY3RvcnNEb25lID0gMDsKICAgICAgICAgUFhFTlZCRF9SRVFVRVNUIFJlcXVlc3Q7
CiAKLSAgICAgICAgUmVxdWVzdCA9IFJpbmdHZXRSZXF1ZXN0KFJpbmcpOworICAgICAgICBSZXF1
ZXN0ID0gUHJvdG9jb2xHZXRSZXF1ZXN0KFByb3RvY29sKTsKICAgICAgICAgaWYgKFJlcXVlc3Qg
PT0gTlVMTCkKICAgICAgICAgICAgIGdvdG8gZmFpbDE7CiAgICAgICAgIEluc2VydFRhaWxMaXN0
KCZMaXN0LCAmUmVxdWVzdC0+TGlzdEVudHJ5KTsKICAgICAgICAgSW50ZXJsb2NrZWRJbmNyZW1l
bnQoJlNyYkV4dC0+UmVxdWVzdENvdW50KTsKIAogICAgICAgICBSZXF1ZXN0LT5TcmJFeHQgPSBT
cmJFeHQ7Ci0gICAgICAgIE1heFNlZ21lbnRzID0gUmluZ1VzZUluZGlyZWN0KFJpbmcsIFNlY3Rv
cnNMZWZ0KTsKKyAgICAgICAgTWF4U2VnbWVudHMgPSBQcm90b2NvbFVzZUluZGlyZWN0KFByb3Rv
Y29sLCBTZWN0b3JzTGVmdCk7CiAKLSAgICAgICAgaWYgKCFSaW5nUHJlcGFyZUJsa2lmUmVhZFdy
aXRlKFJpbmcsCisgICAgICAgIGlmICghUHJvdG9jb2xQcmVwYXJlQmxraWZSZWFkV3JpdGUoUHJv
dG9jb2wsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXF1ZXN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3JiRXh0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF4U2VnbWVudHMsCkBAIC04MjksNyArODI5
LDcgQEAgUmluZ1ByZXBhcmVSZWFkV3JpdGUoCiAgICAgICAgICAgICBnb3RvIGZhaWwyOwogCiAg
ICAgICAgIGlmIChNYXhTZWdtZW50cyA+IEJMS0lGX01BWF9TRUdNRU5UU19QRVJfUkVRVUVTVCkg
ewotICAgICAgICAgICAgaWYgKCFSaW5nUHJlcGFyZUJsa2lmSW5kaXJlY3QoUmluZywgUmVxdWVz
dCkpCisgICAgICAgICAgICBpZiAoIVByb3RvY29sUHJlcGFyZUJsa2lmSW5kaXJlY3QoUHJvdG9j
b2wsIFJlcXVlc3QpKQogICAgICAgICAgICAgICAgIGdvdG8gZmFpbDM7CiAgICAgICAgIH0KIApA
QCAtODM3LDIxICs4MzcsMjEgQEAgUmluZ1ByZXBhcmVSZWFkV3JpdGUoCiAgICAgICAgIFNlY3Rv
clN0YXJ0ICs9IFNlY3RvcnNEb25lOwogICAgIH0KIAotICAgIFJpbmdRdWV1ZVJlcXVlc3RMaXN0
KFJpbmcsICZMaXN0KTsKKyAgICBQcm90b2NvbFF1ZXVlUmVxdWVzdExpc3QoUHJvdG9jb2wsICZM
aXN0KTsKICAgICByZXR1cm4gVFJVRTsKIAogZmFpbDM6CiBmYWlsMjoKIGZhaWwxOgotICAgIFJp
bmdDYW5jZWxSZXF1ZXN0TGlzdChSaW5nLCAmTGlzdCk7CisgICAgUHJvdG9jb2xDYW5jZWxSZXF1
ZXN0TGlzdChQcm90b2NvbCwgJkxpc3QpOwogICAgIFNyYkV4dC0+UmVxdWVzdENvdW50ID0gMDsK
ICAgICBTcmItPlNyYlN0YXR1cyA9IFNSQl9TVEFUVVNfRVJST1I7CiAgICAgcmV0dXJuIEZBTFNF
OwogfQogCiBzdGF0aWMgQk9PTEVBTgotUmluZ1ByZXBhcmVTeW5jQ2FjaGUoCi0gICAgSU4gIFBY
RU5WQkRfUklORyAgICAgICAgUmluZywKK1Byb3RvY29sUHJlcGFyZVN5bmNDYWNoZSgKKyAgICBJ
TiAgUFhFTlZCRF9QUk9UT0NPTCAgICAgICAgUHJvdG9jb2wsCiAgICAgSU4gIFBYRU5WQkRfU1JC
RVhUICAgICAgU3JiRXh0CiAgICAgKQogewpAQCAtODYyLDcgKzg2Miw3IEBAIFJpbmdQcmVwYXJl
U3luY0NhY2hlKAogCiAgICAgU3JiLT5TcmJTdGF0dXMgPSBTUkJfU1RBVFVTX1BFTkRJTkc7CiAK
LSAgICBpZiAoRnJvbnRlbmRHZXREaXNrSW5mbyhSaW5nLT5Gcm9udGVuZCktPkZsdXNoQ2FjaGUp
CisgICAgaWYgKEZyb250ZW5kR2V0RGlza0luZm8oUHJvdG9jb2wtPkZyb250ZW5kKS0+Rmx1c2hD
YWNoZSkKICAgICAgICAgT3BlcmF0aW9uID0gQkxLSUZfT1BfRkxVU0hfRElTS0NBQ0hFOwogICAg
IGVsc2UKICAgICAgICAgT3BlcmF0aW9uID0gQkxLSUZfT1BfV1JJVEVfQkFSUklFUjsKQEAgLTg3
MCw3ICs4NzAsNyBAQCBSaW5nUHJlcGFyZVN5bmNDYWNoZSgKICAgICBJbml0aWFsaXplTGlzdEhl
YWQoJkxpc3QpOwogICAgIFNyYkV4dC0+UmVxdWVzdENvdW50ID0gMDsKIAotICAgIFJlcXVlc3Qg
PSBSaW5nR2V0UmVxdWVzdChSaW5nKTsKKyAgICBSZXF1ZXN0ID0gUHJvdG9jb2xHZXRSZXF1ZXN0
KFByb3RvY29sKTsKICAgICBpZiAoUmVxdWVzdCA9PSBOVUxMKQogICAgICAgICBnb3RvIGZhaWwx
OwogICAgIEluc2VydFRhaWxMaXN0KCZMaXN0LCAmUmVxdWVzdC0+TGlzdEVudHJ5KTsKQEAgLTg4
MCwxOSArODgwLDE5IEBAIFJpbmdQcmVwYXJlU3luY0NhY2hlKAogICAgIFJlcXVlc3QtPk9wZXJh
dGlvbiAgPSBPcGVyYXRpb247CiAgICAgUmVxdWVzdC0+Rmlyc3RTZWN0b3IgPSBDZGJfTG9naWNh
bEJsb2NrKFNyYik7CiAKLSAgICBSaW5nUXVldWVSZXF1ZXN0TGlzdChSaW5nLCAmTGlzdCk7Cisg
ICAgUHJvdG9jb2xRdWV1ZVJlcXVlc3RMaXN0KFByb3RvY29sLCAmTGlzdCk7CiAgICAgcmV0dXJu
IFRSVUU7CiAKIGZhaWwxOgotICAgIFJpbmdDYW5jZWxSZXF1ZXN0TGlzdChSaW5nLCAmTGlzdCk7
CisgICAgUHJvdG9jb2xDYW5jZWxSZXF1ZXN0TGlzdChQcm90b2NvbCwgJkxpc3QpOwogICAgIFNy
YkV4dC0+UmVxdWVzdENvdW50ID0gMDsKICAgICBTcmItPlNyYlN0YXR1cyA9IFNSQl9TVEFUVVNf
RVJST1I7CiAgICAgcmV0dXJuIEZBTFNFOwogfQogCiBzdGF0aWMgQk9PTEVBTgotUmluZ1ByZXBh
cmVVbm1hcCgKLSAgICBJTiAgUFhFTlZCRF9SSU5HICAgICAgICBSaW5nLAorUHJvdG9jb2xQcmVw
YXJlVW5tYXAoCisgICAgSU4gIFBYRU5WQkRfUFJPVE9DT0wgICAgICAgIFByb3RvY29sLAogICAg
IElOICBQWEVOVkJEX1NSQkVYVCAgICAgIFNyYkV4dAogICAgICkKIHsKQEAgLTkxMSw3ICs5MTEs
NyBAQCBSaW5nUHJlcGFyZVVubWFwKAogICAgICAgICBQVU5NQVBfQkxPQ0tfREVTQ1JJUFRPUiBE
ZXNjciA9ICZVbm1hcC0+RGVzY3JpcHRvcnNbSW5kZXhdOwogICAgICAgICBQWEVOVkJEX1JFUVVF
U1QgICAgICAgICBSZXF1ZXN0OwogCi0gICAgICAgIFJlcXVlc3QgPSBSaW5nR2V0UmVxdWVzdChS
aW5nKTsKKyAgICAgICAgUmVxdWVzdCA9IFByb3RvY29sR2V0UmVxdWVzdChQcm90b2NvbCk7CiAg
ICAgICAgIGlmIChSZXF1ZXN0ID09IE5VTEwpCiAgICAgICAgICAgICBnb3RvIGZhaWwxOwogICAg
ICAgICBJbnNlcnRUYWlsTGlzdCgmTGlzdCwgJlJlcXVlc3QtPkxpc3RFbnRyeSk7CkBAIC05MjQs
MzIgKzkyNCwzMiBAQCBSaW5nUHJlcGFyZVVubWFwKAogICAgICAgICBSZXF1ZXN0LT5GbGFncyAg
ICAgICAgICA9IDA7CiAgICAgfQogCi0gICAgUmluZ1F1ZXVlUmVxdWVzdExpc3QoUmluZywgJkxp
c3QpOworICAgIFByb3RvY29sUXVldWVSZXF1ZXN0TGlzdChQcm90b2NvbCwgJkxpc3QpOwogICAg
IHJldHVybiBUUlVFOwogCiBmYWlsMToKLSAgICBSaW5nQ2FuY2VsUmVxdWVzdExpc3QoUmluZywg
Jkxpc3QpOworICAgIFByb3RvY29sQ2FuY2VsUmVxdWVzdExpc3QoUHJvdG9jb2wsICZMaXN0KTsK
ICAgICBTcmJFeHQtPlJlcXVlc3RDb3VudCA9IDA7CiAgICAgU3JiLT5TcmJTdGF0dXMgPSBTUkJf
U1RBVFVTX0VSUk9SOwogICAgIHJldHVybiBGQUxTRTsKIH0KIAogc3RhdGljIEZPUkNFSU5MSU5F
IEJPT0xFQU4KLVJpbmdQcmVwYXJlUmVxdWVzdCgKLSAgICBJTiAgUFhFTlZCRF9SSU5HICAgIFJp
bmcsCitQcm90b2NvbFByZXBhcmVSZXF1ZXN0KAorICAgIElOICBQWEVOVkJEX1BST1RPQ09MICAg
IFByb3RvY29sLAogICAgIElOICBQWEVOVkJEX1NSQkVYVCAgU3JiRXh0CiAgICAgKQogewogICAg
IHN3aXRjaCAoQ2RiX09wZXJhdGlvbkV4KFNyYkV4dC0+U3JiKSkgewogICAgIGNhc2UgU0NTSU9Q
X1JFQUQ6CiAgICAgY2FzZSBTQ1NJT1BfV1JJVEU6Ci0gICAgICAgIHJldHVybiBSaW5nUHJlcGFy
ZVJlYWRXcml0ZShSaW5nLCBTcmJFeHQpOworICAgICAgICByZXR1cm4gUHJvdG9jb2xQcmVwYXJl
UmVhZFdyaXRlKFByb3RvY29sLCBTcmJFeHQpOwogCiAgICAgY2FzZSBTQ1NJT1BfU1lOQ0hST05J
WkVfQ0FDSEU6Ci0gICAgICAgIHJldHVybiBSaW5nUHJlcGFyZVN5bmNDYWNoZShSaW5nLCBTcmJF
eHQpOworICAgICAgICByZXR1cm4gUHJvdG9jb2xQcmVwYXJlU3luY0NhY2hlKFByb3RvY29sLCBT
cmJFeHQpOwogCiAgICAgY2FzZSBTQ1NJT1BfVU5NQVA6Ci0gICAgICAgIHJldHVybiBSaW5nUHJl
cGFyZVVubWFwKFJpbmcsIFNyYkV4dCk7CisgICAgICAgIHJldHVybiBQcm90b2NvbFByZXBhcmVV
bm1hcChQcm90b2NvbCwgU3JiRXh0KTsKIAogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVChG
QUxTRSk7CkBAIC05NTgsOCArOTU4LDggQEAgUmluZ1ByZXBhcmVSZXF1ZXN0KAogfQogCiBzdGF0
aWMgQk9PTEVBTgotUmluZ1N1Ym1pdCgKLSAgICBJTiAgUFhFTlZCRF9SSU5HICAgIFJpbmcsCitQ
cm90b2NvbFN1Ym1pdCgKKyAgICBJTiAgUFhFTlZCRF9QUk9UT0NPTCAgICBQcm90b2NvbCwKICAg
ICBJTiAgUFhFTlZCRF9SRVFVRVNUIFJlcXVlc3QKICAgICApCiB7CkBAIC05NjcsNDIgKzk2Nyw0
MiBAQCBSaW5nU3VibWl0KAogICAgIGJsa2lmX3JlcXVlc3RfdCogICAgcmVxOwogICAgIEJPT0xF
QU4gICAgICAgICAgICAgTm90aWZ5OwogCi0gICAgS2VBY3F1aXJlU3BpbkxvY2soJlJpbmctPkxv
Y2ssICZJcnFsKTsKLSAgICBpZiAoUklOR19GVUxMKCZSaW5nLT5Gcm9udCkpIHsKLSAgICAgICAg
S2VSZWxlYXNlU3BpbkxvY2soJlJpbmctPkxvY2ssIElycWwpOworICAgIEtlQWNxdWlyZVNwaW5M
b2NrKCZQcm90b2NvbC0+TG9jaywgJklycWwpOworICAgIGlmIChSSU5HX0ZVTEwoJlByb3RvY29s
LT5Gcm9udCkpIHsKKyAgICAgICAgS2VSZWxlYXNlU3BpbkxvY2soJlByb3RvY29sLT5Mb2NrLCBJ
cnFsKTsKICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgIH0KIAotICAgIHJlcSA9IFJJTkdfR0VU
X1JFUVVFU1QoJlJpbmctPkZyb250LCBSaW5nLT5Gcm9udC5yZXFfcHJvZF9wdnQpOwotICAgIF9f
UmluZ0luc2VydChSaW5nLCBSZXF1ZXN0LCByZXEpOworICAgIHJlcSA9IFJJTkdfR0VUX1JFUVVF
U1QoJlByb3RvY29sLT5Gcm9udCwgUHJvdG9jb2wtPkZyb250LnJlcV9wcm9kX3B2dCk7CisgICAg
X19Qcm90b2NvbEluc2VydChQcm90b2NvbCwgUmVxdWVzdCwgcmVxKTsKICAgICBLZU1lbW9yeUJh
cnJpZXIoKTsKLSAgICArK1JpbmctPkZyb250LnJlcV9wcm9kX3B2dDsKKyAgICArK1Byb3RvY29s
LT5Gcm9udC5yZXFfcHJvZF9wdnQ7CiAKLSAgICBSSU5HX1BVU0hfUkVRVUVTVFNfQU5EX0NIRUNL
X05PVElGWSgmUmluZy0+RnJvbnQsIE5vdGlmeSk7Ci0gICAgS2VSZWxlYXNlU3BpbkxvY2soJlJp
bmctPkxvY2ssIElycWwpOworICAgIFJJTkdfUFVTSF9SRVFVRVNUU19BTkRfQ0hFQ0tfTk9USUZZ
KCZQcm90b2NvbC0+RnJvbnQsIE5vdGlmeSk7CisgICAgS2VSZWxlYXNlU3BpbkxvY2soJlByb3Rv
Y29sLT5Mb2NrLCBJcnFsKTsKIAogICAgIGlmIChOb3RpZnkpIHsKLSAgICAgICAgaWYgKCFSaW5n
LT5FbmFibGVkKQorICAgICAgICBpZiAoIVByb3RvY29sLT5FbmFibGVkKQogICAgICAgICAgICAg
cmV0dXJuIFRSVUU7CiAKICAgICAgICAgWEVOQlVTX0VWVENITihTZW5kLAotICAgICAgICAgICAg
ICAgICAgICAgICZSaW5nLT5FdnRjaG5JbnRlcmZhY2UsCi0gICAgICAgICAgICAgICAgICAgICAg
UmluZy0+Q2hhbm5lbCk7CisgICAgICAgICAgICAgICAgICAgICAgJlByb3RvY29sLT5FdnRjaG5J
bnRlcmZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgUHJvdG9jb2wtPkNoYW5uZWwpOwogICAg
IH0KIAogICAgIHJldHVybiBUUlVFOwogfQogCiBzdGF0aWMgRk9SQ0VJTkxJTkUgQk9PTEVBTgot
UmluZ1N1Ym1pdFJlcXVlc3RzKAotICAgIElOICBQWEVOVkJEX1JJTkcgICAgUmluZworUHJvdG9j
b2xTdWJtaXRSZXF1ZXN0cygKKyAgICBJTiAgUFhFTlZCRF9QUk9UT0NPTCAgICBQcm90b2NvbAog
ICAgICkKIHsKLSAgICBpZiAoIVJpbmctPkVuYWJsZWQpIHsKLSAgICAgICAgaWYgKFF1ZXVlQ291
bnQoJlJpbmctPlByZXBhcmVkUmVxcykpCisgICAgaWYgKCFQcm90b2NvbC0+RW5hYmxlZCkgewor
ICAgICAgICBpZiAoUXVldWVDb3VudCgmUHJvdG9jb2wtPlByZXBhcmVkUmVxcykpCiAgICAgICAg
ICAgICBXYXJuaW5nKCJUYXJnZXRbJWRdIDogUGF1c2VkLCBub3Qgc3VibWl0dGluZyBuZXcgcmVx
dWVzdHMgKCV1KVxuIiwKLSAgICAgICAgICAgICAgICAgICAgRnJvbnRlbmRHZXRUYXJnZXRJZChS
aW5nLT5Gcm9udGVuZCksCi0gICAgICAgICAgICAgICAgICAgIFF1ZXVlQ291bnQoJlJpbmctPlBy
ZXBhcmVkUmVxcykpOworICAgICAgICAgICAgICAgICAgICBGcm9udGVuZEdldFRhcmdldElkKFBy
b3RvY29sLT5Gcm9udGVuZCksCisgICAgICAgICAgICAgICAgICAgIFF1ZXVlQ291bnQoJlByb3Rv
Y29sLT5QcmVwYXJlZFJlcXMpKTsKICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgIH0KIApAQCAt
MTAxMCw0OSArMTAxMCw0OSBAQCBSaW5nU3VibWl0UmVxdWVzdHMoCiAgICAgICAgIFBYRU5WQkRf
UkVRVUVTVCBSZXF1ZXN0OwogICAgICAgICBQTElTVF9FTlRSWSAgICAgTGlzdEVudHJ5OwogCi0g
ICAgICAgIExpc3RFbnRyeSA9IFF1ZXVlUG9wKCZSaW5nLT5QcmVwYXJlZFJlcXMpOworICAgICAg
ICBMaXN0RW50cnkgPSBRdWV1ZVBvcCgmUHJvdG9jb2wtPlByZXBhcmVkUmVxcyk7CiAgICAgICAg
IGlmIChMaXN0RW50cnkgPT0gTlVMTCkKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIFJl
cXVlc3QgPSBDT05UQUlOSU5HX1JFQ09SRChMaXN0RW50cnksIFhFTlZCRF9SRVFVRVNULCBMaXN0
RW50cnkpOwogCi0gICAgICAgIFF1ZXVlQXBwZW5kKCZSaW5nLT5TdWJtaXR0ZWRSZXFzLCAmUmVx
dWVzdC0+TGlzdEVudHJ5KTsKKyAgICAgICAgUXVldWVBcHBlbmQoJlByb3RvY29sLT5TdWJtaXR0
ZWRSZXFzLCAmUmVxdWVzdC0+TGlzdEVudHJ5KTsKICAgICAgICAgS2VNZW1vcnlCYXJyaWVyKCk7
CiAKLSAgICAgICAgaWYgKFJpbmdTdWJtaXQoUmluZywgUmVxdWVzdCkpCisgICAgICAgIGlmIChQ
cm90b2NvbFN1Ym1pdChQcm90b2NvbCwgUmVxdWVzdCkpCiAgICAgICAgICAgICBjb250aW51ZTsK
IAotICAgICAgICBRdWV1ZVJlbW92ZSgmUmluZy0+U3VibWl0dGVkUmVxcywgJlJlcXVlc3QtPkxp
c3RFbnRyeSk7Ci0gICAgICAgIFF1ZXVlVW5Qb3AoJlJpbmctPlByZXBhcmVkUmVxcywgJlJlcXVl
c3QtPkxpc3RFbnRyeSk7CisgICAgICAgIFF1ZXVlUmVtb3ZlKCZQcm90b2NvbC0+U3VibWl0dGVk
UmVxcywgJlJlcXVlc3QtPkxpc3RFbnRyeSk7CisgICAgICAgIFF1ZXVlVW5Qb3AoJlByb3RvY29s
LT5QcmVwYXJlZFJlcXMsICZSZXF1ZXN0LT5MaXN0RW50cnkpOwogICAgICAgICBicmVhazsKICAg
ICB9CiAKLSAgICByZXR1cm4gUXVldWVDb3VudCgmUmluZy0+UHJlcGFyZWRSZXFzKSAhPSAwOwor
ICAgIHJldHVybiBRdWV1ZUNvdW50KCZQcm90b2NvbC0+UHJlcGFyZWRSZXFzKSAhPSAwOwogfQog
CiBzdGF0aWMgRk9SQ0VJTkxJTkUgVk9JRAotUmluZ0NvbXBsZXRlU2h1dGRvd24oCi0gICAgSU4g
IFBYRU5WQkRfUklORyAgICBSaW5nCitQcm90b2NvbENvbXBsZXRlU2h1dGRvd24oCisgICAgSU4g
IFBYRU5WQkRfUFJPVE9DT0wgICAgUHJvdG9jb2wKICAgICApCiB7CiAgICAgUFhFTlZCRF9UQVJH
RVQgICAgICBUYXJnZXQ7CiAgICAgUFhFTlZCRF9BREFQVEVSICAgICBBZGFwdGVyOwogCi0gICAg
aWYgKFF1ZXVlQ291bnQoJlJpbmctPlNodXRkb3duU3JicykgPT0gMCkKKyAgICBpZiAoUXVldWVD
b3VudCgmUHJvdG9jb2wtPlNodXRkb3duU3JicykgPT0gMCkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgaWYgKFF1ZXVlQ291bnQoJlJpbmctPlByZXBhcmVkUmVxcykgfHwKLSAgICAgICAgUXVldWVD
b3VudCgmUmluZy0+U3VibWl0dGVkUmVxcykpCisgICAgaWYgKFF1ZXVlQ291bnQoJlByb3RvY29s
LT5QcmVwYXJlZFJlcXMpIHx8CisgICAgICAgIFF1ZXVlQ291bnQoJlByb3RvY29sLT5TdWJtaXR0
ZWRSZXFzKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVGFyZ2V0ID0gRnJvbnRlbmRHZXRUYXJn
ZXQoUmluZy0+RnJvbnRlbmQpOworICAgIFRhcmdldCA9IEZyb250ZW5kR2V0VGFyZ2V0KFByb3Rv
Y29sLT5Gcm9udGVuZCk7CiAgICAgQWRhcHRlciA9IFRhcmdldEdldEFkYXB0ZXIoVGFyZ2V0KTsK
ICAgICBmb3IgKDs7KSB7CiAgICAgICAgIFBYRU5WQkRfU1JCRVhUICAgICAgU3JiRXh0OwogICAg
ICAgICBQU0NTSV9SRVFVRVNUX0JMT0NLIFNyYjsKICAgICAgICAgUExJU1RfRU5UUlkgICAgICAg
ICBMaXN0RW50cnk7CiAKLSAgICAgICAgTGlzdEVudHJ5ID0gUXVldWVQb3AoJlJpbmctPlNodXRk
b3duU3Jicyk7CisgICAgICAgIExpc3RFbnRyeSA9IFF1ZXVlUG9wKCZQcm90b2NvbC0+U2h1dGRv
d25TcmJzKTsKICAgICAgICAgaWYgKExpc3RFbnRyeSA9PSBOVUxMKQogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIFNyYkV4dCA9IENPTlRBSU5JTkdfUkVDT1JEKExpc3RFbnRyeSwgWEVOVkJE
X1NSQkVYVCwgTGlzdEVudHJ5KTsKQEAgLTEwODEsOCArMTA4MSw4IEBAIF9fQmxraWZPcGVyYXRp
b25OYW1lKAogfQogCiBzdGF0aWMgVk9JRAotUmluZ0NvbXBsZXRlUmVzcG9uc2UoCi0gICAgSU4g
IFBYRU5WQkRfUklORyAgICBSaW5nLAorUHJvdG9jb2xDb21wbGV0ZVJlc3BvbnNlKAorICAgIElO
ICBQWEVOVkJEX1BST1RPQ09MICAgIFByb3RvY29sLAogICAgIElOICBVTE9ORzY0ICAgICAgICAg
SWQsCiAgICAgSU4gIFNIT1JUICAgICAgICAgICBTdGF0dXMKICAgICApCkBAIC0xMDkxLDcgKzEw
OTEsNyBAQCBSaW5nQ29tcGxldGVSZXNwb25zZSgKICAgICBQU0NTSV9SRVFVRVNUX0JMT0NLIFNy
YjsKICAgICBQWEVOVkJEX1NSQkVYVCAgICAgIFNyYkV4dDsKIAotICAgIFJlcXVlc3QgPSBSaW5n
RmluZFJlcXVlc3QoUmluZywgSWQpOworICAgIFJlcXVlc3QgPSBQcm90b2NvbEZpbmRSZXF1ZXN0
KFByb3RvY29sLCBJZCk7CiAgICAgaWYgKFJlcXVlc3QgPT0gTlVMTCkKICAgICAgICAgcmV0dXJu
OwogCkBAIC0xMTAwLDEyICsxMTAwLDEyIEBAIFJpbmdDb21wbGV0ZVJlc3BvbnNlKAogCiAgICAg
c3dpdGNoIChTdGF0dXMpIHsKICAgICBjYXNlIEJMS0lGX1JTUF9PS0FZOgotICAgICAgICBSaW5n
UmVxdWVzdENvcHlPdXRwdXQoUmVxdWVzdCk7CisgICAgICAgIFByb3RvY29sUmVxdWVzdENvcHlP
dXRwdXQoUmVxdWVzdCk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBCTEtJRl9SU1BfRU9Q
Tk9UU1VQUDoKICAgICAgICAgLy8gUmVtb3ZlIGFwcHJvcHJpYXRlIGZlYXR1cmUgc3VwcG9ydAot
ICAgICAgICBGcm9udGVuZFJlbW92ZUZlYXR1cmUoUmluZy0+RnJvbnRlbmQsIFJlcXVlc3QtPk9w
ZXJhdGlvbik7CisgICAgICAgIEZyb250ZW5kUmVtb3ZlRmVhdHVyZShQcm90b2NvbC0+RnJvbnRl
bmQsIFJlcXVlc3QtPk9wZXJhdGlvbik7CiAgICAgICAgIC8vIFN1Y2NlZWQgdGhpcyBTUkIsIHN1
YnNpcXVlbnQgU1JCcyB3aWxsIGJlIHN1Y2NlZWRlZCBpbnN0ZWFkIG9mIGJlaW5nIHBhc3NlZCB0
byB0aGUgYmFja2VuZC4KICAgICAgICAgU3JiLT5TcmJTdGF0dXMgPSBTUkJfU1RBVFVTX1NVQ0NF
U1M7CiAgICAgICAgIGJyZWFrOwpAQCAtMTExMywxOCArMTExMywxOCBAQCBSaW5nQ29tcGxldGVS
ZXNwb25zZSgKICAgICBjYXNlIEJMS0lGX1JTUF9FUlJPUjoKICAgICBkZWZhdWx0OgogICAgICAg
ICBXYXJuaW5nKCJUYXJnZXRbJWRdIDogJXMgQkxLSUZfUlNQX0VSUk9SIChUYWcgJWxseClcbiIs
Ci0gICAgICAgICAgICAgICAgRnJvbnRlbmRHZXRUYXJnZXRJZChSaW5nLT5Gcm9udGVuZCksCisg
ICAgICAgICAgICAgICAgRnJvbnRlbmRHZXRUYXJnZXRJZChQcm90b2NvbC0+RnJvbnRlbmQpLAog
ICAgICAgICAgICAgICAgIF9fQmxraWZPcGVyYXRpb25OYW1lKFJlcXVlc3QtPk9wZXJhdGlvbiks
CiAgICAgICAgICAgICAgICAgSWQpOwogICAgICAgICBTcmItPlNyYlN0YXR1cyA9IFNSQl9TVEFU
VVNfRVJST1I7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIFJpbmdQdXRSZXF1ZXN0KFJp
bmcsIFJlcXVlc3QpOworICAgIFByb3RvY29sUHV0UmVxdWVzdChQcm90b2NvbCwgUmVxdWVzdCk7
CiAKICAgICAvLyBjb21wbGV0ZSBzcmIKICAgICBpZiAoSW50ZXJsb2NrZWREZWNyZW1lbnQoJlNy
YkV4dC0+UmVxdWVzdENvdW50KSA9PSAwKSB7Ci0gICAgICAgIFBYRU5WQkRfVEFSR0VUICBUYXJn
ZXQgPSBGcm9udGVuZEdldFRhcmdldChSaW5nLT5Gcm9udGVuZCk7CisgICAgICAgIFBYRU5WQkRf
VEFSR0VUICBUYXJnZXQgPSBGcm9udGVuZEdldFRhcmdldChQcm90b2NvbC0+RnJvbnRlbmQpOwog
ICAgICAgICBQWEVOVkJEX0FEQVBURVIgQWRhcHRlciA9IFRhcmdldEdldEFkYXB0ZXIoVGFyZ2V0
KTsKIAogICAgICAgICBpZiAoU3JiLT5TcmJTdGF0dXMgPT0gU1JCX1NUQVRVU19QRU5ESU5HKSB7
CkBAIC0xMTQyLDE4ICsxMTQyLDE4IEBAIFJpbmdDb21wbGV0ZVJlc3BvbnNlKAogfQogCiBzdGF0
aWMgQk9PTEVBTgotUmluZ1BvbGwoCi0gICAgSU4gIFBYRU5WQkRfUklORyAgICBSaW5nCitQcm90
b2NvbFBvbGwoCisgICAgSU4gIFBYRU5WQkRfUFJPVE9DT0wgICAgUHJvdG9jb2wKICAgICApCiB7
CiAgICAgQk9PTEVBTiAgICAgICAgICAgICBSZXRyeSA9IEZBTFNFOwogCiAgICAgQVNTRVJUM1Uo
S2VHZXRDdXJyZW50SXJxbCgpLCA9PSwgRElTUEFUQ0hfTEVWRUwpOwotICAgIEtlQWNxdWlyZVNw
aW5Mb2NrQXREcGNMZXZlbCgmUmluZy0+TG9jayk7CisgICAgS2VBY3F1aXJlU3BpbkxvY2tBdERw
Y0xldmVsKCZQcm90b2NvbC0+TG9jayk7CiAKICAgICAvLyBHdWFyZCBhZ2FpbnN0IHRoaXMgbG9j
a2VkIHJlZ2lvbiBiZWluZyBjYWxsZWQgYWZ0ZXIgdGhlCiAgICAgLy8gbG9jayBvbiBGcm9udGVu
ZFNldFN0YXRlCi0gICAgaWYgKFJpbmctPkVuYWJsZWQgPT0gRkFMU0UpCisgICAgaWYgKFByb3Rv
Y29sLT5FbmFibGVkID09IEZBTFNFKQogICAgICAgICBnb3RvIGRvbmU7CiAKICAgICBmb3IgKDs7
KSB7CkBAIC0xMTYyLDggKzExNjIsOCBAQCBSaW5nUG9sbCgKIAogICAgICAgICBLZU1lbW9yeUJh
cnJpZXIoKTsKIAotICAgICAgICByc3BfcHJvZCA9IFJpbmctPlNoYXJlZC0+cnNwX3Byb2Q7Ci0g
ICAgICAgIHJzcF9jb25zID0gUmluZy0+RnJvbnQucnNwX2NvbnM7CisgICAgICAgIHJzcF9wcm9k
ID0gUHJvdG9jb2wtPlNoYXJlZC0+cnNwX3Byb2Q7CisgICAgICAgIHJzcF9jb25zID0gUHJvdG9j
b2wtPkZyb250LnJzcF9jb25zOwogCiAgICAgICAgIEtlTWVtb3J5QmFycmllcigpOwogCkBAIC0x
MTczLDk1ICsxMTczLDk1IEBAIFJpbmdQb2xsKAogICAgICAgICB3aGlsZSAocnNwX2NvbnMgIT0g
cnNwX3Byb2QgJiYgIVJldHJ5KSB7CiAgICAgICAgICAgICBibGtpZl9yZXNwb25zZV90KiAgIHJz
cDsKIAotICAgICAgICAgICAgcnNwID0gUklOR19HRVRfUkVTUE9OU0UoJlJpbmctPkZyb250LCBy
c3BfY29ucyk7CisgICAgICAgICAgICByc3AgPSBSSU5HX0dFVF9SRVNQT05TRSgmUHJvdG9jb2wt
PkZyb250LCByc3BfY29ucyk7CiAgICAgICAgICAgICArK3JzcF9jb25zOwotICAgICAgICAgICAg
KytSaW5nLT5SZWNlaXZlZDsKKyAgICAgICAgICAgICsrUHJvdG9jb2wtPlJlY2VpdmVkOwogCi0g
ICAgICAgICAgICBSaW5nQ29tcGxldGVSZXNwb25zZShSaW5nLCByc3AtPmlkLCByc3AtPnN0YXR1
cyk7CisgICAgICAgICAgICBQcm90b2NvbENvbXBsZXRlUmVzcG9uc2UoUHJvdG9jb2wsIHJzcC0+
aWQsIHJzcC0+c3RhdHVzKTsKICAgICAgICAgICAgIFJ0bFplcm9NZW1vcnkocnNwLCBzaXplb2Yo
dW5pb24gYmxraWZfc3JpbmdfZW50cnkpKTsKIAotICAgICAgICAgICAgaWYgKHJzcF9jb25zIC0g
UmluZy0+RnJvbnQucnNwX2NvbnMgPiBSSU5HX1NJWkUoJlJpbmctPkZyb250KSAvIDQpCisgICAg
ICAgICAgICBpZiAocnNwX2NvbnMgLSBQcm90b2NvbC0+RnJvbnQucnNwX2NvbnMgPiBSSU5HX1NJ
WkUoJlByb3RvY29sLT5Gcm9udCkgLyA0KQogICAgICAgICAgICAgICAgIFJldHJ5ID0gVFJVRTsK
ICAgICAgICAgfQogCiAgICAgICAgIEtlTWVtb3J5QmFycmllcigpOwogCi0gICAgICAgIFJpbmct
PkZyb250LnJzcF9jb25zID0gcnNwX2NvbnM7Ci0gICAgICAgIFJpbmctPlNoYXJlZC0+cnNwX2V2
ZW50ID0gcnNwX2NvbnMgKyAxOworICAgICAgICBQcm90b2NvbC0+RnJvbnQucnNwX2NvbnMgPSBy
c3BfY29uczsKKyAgICAgICAgUHJvdG9jb2wtPlNoYXJlZC0+cnNwX2V2ZW50ID0gcnNwX2NvbnMg
KyAxOwogICAgIH0KIAogZG9uZToKLSAgICBLZVJlbGVhc2VTcGluTG9ja0Zyb21EcGNMZXZlbCgm
UmluZy0+TG9jayk7CisgICAgS2VSZWxlYXNlU3BpbkxvY2tGcm9tRHBjTGV2ZWwoJlByb3RvY29s
LT5Mb2NrKTsKIAogICAgIHJldHVybiBSZXRyeTsKIH0KIAogX19kcnZfcmVxdWlyZXNJUlFMKERJ
U1BBVENIX0xFVkVMKQogc3RhdGljIEJPT0xFQU4KLVJpbmdOb3RpZnlSZXNwb25zZXMoCi0gICAg
SU4gIFBYRU5WQkRfUklORyAgICBSaW5nCitQcm90b2NvbE5vdGlmeVJlc3BvbnNlcygKKyAgICBJ
TiAgUFhFTlZCRF9QUk9UT0NPTCAgICBQcm90b2NvbAogICAgICkKIHsKICAgICBCT09MRUFOICAg
ICAgICAgICAgIFJldHJ5ID0gRkFMU0U7CiAKLSAgICBpZiAoIVJpbmctPkVuYWJsZWQpCisgICAg
aWYgKCFQcm90b2NvbC0+RW5hYmxlZCkKICAgICAgICAgcmV0dXJuIEZBTFNFOwogCi0gICAgUmV0
cnkgfD0gUmluZ1BvbGwoUmluZyk7Ci0gICAgUmV0cnkgfD0gUmluZ1N1Ym1pdFJlcXVlc3RzKFJp
bmcpOworICAgIFJldHJ5IHw9IFByb3RvY29sUG9sbChQcm90b2NvbCk7CisgICAgUmV0cnkgfD0g
UHJvdG9jb2xTdWJtaXRSZXF1ZXN0cyhQcm90b2NvbCk7CiAKLSAgICBSaW5nQ29tcGxldGVTaHV0
ZG93bihSaW5nKTsKKyAgICBQcm90b2NvbENvbXBsZXRlU2h1dGRvd24oUHJvdG9jb2wpOwogICAg
IHJldHVybiBSZXRyeTsKIH0KIAotS1NFUlZJQ0VfUk9VVElORSAgICBSaW5nSW50ZXJydXB0Owor
S1NFUlZJQ0VfUk9VVElORSAgICBQcm90b2NvbEludGVycnVwdDsKIAogQk9PTEVBTgotUmluZ0lu
dGVycnVwdCgKK1Byb3RvY29sSW50ZXJydXB0KAogICAgIElOICBQS0lOVEVSUlVQVCBJbnRlcnJ1
cHQsCiAgICAgSU4gIFBWT0lEICAgICAgIENvbnRleHQKICAgICApCiB7Ci0gICAgUFhFTlZCRF9S
SU5HICAgIFJpbmcgPSBDb250ZXh0OworICAgIFBYRU5WQkRfUFJPVE9DT0wgICAgUHJvdG9jb2wg
PSBDb250ZXh0OwogCiAgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihJbnRlcnJ1cHQpOwogCi0g
ICAgQVNTRVJUKFJpbmcgIT0gTlVMTCk7CisgICAgQVNTRVJUKFByb3RvY29sICE9IE5VTEwpOwog
Ci0gICAgKytSaW5nLT5FdmVudHM7Ci0gICAgaWYgKCFSaW5nLT5Db25uZWN0ZWQpCisgICAgKytQ
cm90b2NvbC0+RXZlbnRzOworICAgIGlmICghUHJvdG9jb2wtPkNvbm5lY3RlZCkKICAgICAgICAg
cmV0dXJuIFRSVUU7CiAKLSAgICBpZiAoS2VJbnNlcnRRdWV1ZURwYygmUmluZy0+RHBjLCBOVUxM
LCBOVUxMKSkKLSAgICAgICAgKytSaW5nLT5EcGNzOworICAgIGlmIChLZUluc2VydFF1ZXVlRHBj
KCZQcm90b2NvbC0+RHBjLCBOVUxMLCBOVUxMKSkKKyAgICAgICAgKytQcm90b2NvbC0+RHBjczsK
IAogICAgIHJldHVybiBUUlVFOwogfQogCi1LREVGRVJSRURfUk9VVElORSBSaW5nRHBjOworS0RF
RkVSUkVEX1JPVVRJTkUgUHJvdG9jb2xEcGM7CiAKIFZPSUQKLVJpbmdEcGMoCitQcm90b2NvbERw
YygKICAgICBfX2luICBQS0RQQyAgICAgRHBjLAogICAgIF9faW5fb3B0IFBWT0lEICBDb250ZXh0
LAogICAgIF9faW5fb3B0IFBWT0lEICBBcmcxLAogICAgIF9faW5fb3B0IFBWT0lEICBBcmcyCiAg
ICAgKQogewotICAgIFBYRU5WQkRfUklORyAgICBSaW5nID0gQ29udGV4dDsKKyAgICBQWEVOVkJE
X1BST1RPQ09MICAgIFByb3RvY29sID0gQ29udGV4dDsKIAogICAgIFVOUkVGRVJFTkNFRF9QQVJB
TUVURVIoRHBjKTsKICAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKEFyZzEpOwogICAgIFVOUkVG
RVJFTkNFRF9QQVJBTUVURVIoQXJnMik7CiAKLSAgICBBU1NFUlQoUmluZyAhPSBOVUxMKTsKKyAg
ICBBU1NFUlQoUHJvdG9jb2wgIT0gTlVMTCk7CiAKICAgICBmb3IgKDs7KSB7CiAgICAgICAgIEtJ
UlFMICAgICAgIElycWw7CiAgICAgICAgIEJPT0xFQU4gICAgIFJldHJ5OwogCiAgICAgICAgIEtl
UmFpc2VJcnFsKERJU1BBVENIX0xFVkVMLCAmSXJxbCk7Ci0gICAgICAgIFJldHJ5ID0gUmluZ05v
dGlmeVJlc3BvbnNlcyhSaW5nKTsKKyAgICAgICAgUmV0cnkgPSBQcm90b2NvbE5vdGlmeVJlc3Bv
bnNlcyhQcm90b2NvbCk7CiAgICAgICAgIEtlTG93ZXJJcnFsKElycWwpOwogCiAgICAgICAgIGlm
ICghUmV0cnkpCkBAIC0xMjY5LDEzNiArMTI2OSwxMzYgQEAgUmluZ0RwYygKICAgICB9CiAKICAg
ICBYRU5CVVNfRVZUQ0hOKFVubWFzaywKLSAgICAgICAgICAgICAgICAgICZSaW5nLT5FdnRjaG5J
bnRlcmZhY2UsCi0gICAgICAgICAgICAgICAgICBSaW5nLT5DaGFubmVsLAorICAgICAgICAgICAg
ICAgICAgJlByb3RvY29sLT5FdnRjaG5JbnRlcmZhY2UsCisgICAgICAgICAgICAgICAgICBQcm90
b2NvbC0+Q2hhbm5lbCwKICAgICAgICAgICAgICAgICAgIEZBTFNFKTsKIH0KIAogc3RhdGljIERF
Q0xTUEVDX05PSU5MSU5FIFZPSUQKLVJpbmdEZWJ1Z0NhbGxiYWNrKAorUHJvdG9jb2xEZWJ1Z0Nh
bGxiYWNrKAogICAgIElOICBQVk9JRCAgICAgICBBcmd1bWVudCwKICAgICBJTiAgQk9PTEVBTiAg
ICAgQ3Jhc2hpbmcKICAgICApCiB7Ci0gICAgUFhFTlZCRF9SSU5HICAgIFJpbmcgPSBBcmd1bWVu
dDsKLSAgICBQWEVOVkJEX0dSQU5URVIgR3JhbnRlciA9IEZyb250ZW5kR2V0R3JhbnRlcihSaW5n
LT5Gcm9udGVuZCk7CisgICAgUFhFTlZCRF9QUk9UT0NPTCAgICBQcm90b2NvbCA9IEFyZ3VtZW50
OworICAgIFBYRU5WQkRfR1JBTlRFUiBHcmFudGVyID0gRnJvbnRlbmRHZXRHcmFudGVyKFByb3Rv
Y29sLT5Gcm9udGVuZCk7CiAgICAgVUxPTkcgICAgICAgICAgIEluZGV4OwogCiAgICAgVU5SRUZF
UkVOQ0VEX1BBUkFNRVRFUihDcmFzaGluZyk7CiAKICAgICBYRU5CVVNfREVCVUcoUHJpbnRmLAot
ICAgICAgICAgICAgICAgICAmUmluZy0+RGVidWdJbnRlcmZhY2UsCisgICAgICAgICAgICAgICAg
ICZQcm90b2NvbC0+RGVidWdJbnRlcmZhY2UsCiAgICAgICAgICAgICAgICAgICJTdWJtaXR0ZWQ6
ICV1IFJlY2VpdmVkOiAldVxuIiwKLSAgICAgICAgICAgICAgICAgUmluZy0+U3VibWl0dGVkLAot
ICAgICAgICAgICAgICAgICBSaW5nLT5SZWNlaXZlZCk7CisgICAgICAgICAgICAgICAgIFByb3Rv
Y29sLT5TdWJtaXR0ZWQsCisgICAgICAgICAgICAgICAgIFByb3RvY29sLT5SZWNlaXZlZCk7CiAK
ICAgICBYRU5CVVNfREVCVUcoUHJpbnRmLAotICAgICAgICAgICAgICAgICAmUmluZy0+RGVidWdJ
bnRlcmZhY2UsCisgICAgICAgICAgICAgICAgICZQcm90b2NvbC0+RGVidWdJbnRlcmZhY2UsCiAg
ICAgICAgICAgICAgICAgICJFdmVudHM6ICV1IERwY3M6ICV1XG4iLAotICAgICAgICAgICAgICAg
ICBSaW5nLT5FdmVudHMsCi0gICAgICAgICAgICAgICAgIFJpbmctPkRwY3MpOworICAgICAgICAg
ICAgICAgICBQcm90b2NvbC0+RXZlbnRzLAorICAgICAgICAgICAgICAgICBQcm90b2NvbC0+RHBj
cyk7CiAKICAgICBYRU5CVVNfREVCVUcoUHJpbnRmLAotICAgICAgICAgICAgICAgICAmUmluZy0+
RGVidWdJbnRlcmZhY2UsCisgICAgICAgICAgICAgICAgICZQcm90b2NvbC0+RGVidWdJbnRlcmZh
Y2UsCiAgICAgICAgICAgICAgICAgICJTaGFyZWQgOiAweCVwXG4iLAotICAgICAgICAgICAgICAg
ICBSaW5nLT5TaGFyZWQpOworICAgICAgICAgICAgICAgICBQcm90b2NvbC0+U2hhcmVkKTsKIAot
ICAgIGlmIChSaW5nLT5TaGFyZWQpIHsKKyAgICBpZiAoUHJvdG9jb2wtPlNoYXJlZCkgewogICAg
ICAgICBYRU5CVVNfREVCVUcoUHJpbnRmLAotICAgICAgICAgICAgICAgICAgICAgJlJpbmctPkRl
YnVnSW50ZXJmYWNlLAorICAgICAgICAgICAgICAgICAgICAgJlByb3RvY29sLT5EZWJ1Z0ludGVy
ZmFjZSwKICAgICAgICAgICAgICAgICAgICAgICJTaGFyZWQ6ICVkIC8gJWQgLSAlZCAvICVkXG4i
LAotICAgICAgICAgICAgICAgICAgICAgUmluZy0+U2hhcmVkLT5yZXFfcHJvZCwKLSAgICAgICAg
ICAgICAgICAgICAgIFJpbmctPlNoYXJlZC0+cmVxX2V2ZW50LAotICAgICAgICAgICAgICAgICAg
ICAgUmluZy0+U2hhcmVkLT5yc3BfcHJvZCwKLSAgICAgICAgICAgICAgICAgICAgIFJpbmctPlNo
YXJlZC0+cnNwX2V2ZW50KTsKKyAgICAgICAgICAgICAgICAgICAgIFByb3RvY29sLT5TaGFyZWQt
PnJlcV9wcm9kLAorICAgICAgICAgICAgICAgICAgICAgUHJvdG9jb2wtPlNoYXJlZC0+cmVxX2V2
ZW50LAorICAgICAgICAgICAgICAgICAgICAgUHJvdG9jb2wtPlNoYXJlZC0+cnNwX3Byb2QsCisg
ICAgICAgICAgICAgICAgICAgICBQcm90b2NvbC0+U2hhcmVkLT5yc3BfZXZlbnQpOwogICAgIH0K
IAogICAgIFhFTkJVU19ERUJVRyhQcmludGYsCi0gICAgICAgICAgICAgICAgICZSaW5nLT5EZWJ1
Z0ludGVyZmFjZSwKKyAgICAgICAgICAgICAgICAgJlByb3RvY29sLT5EZWJ1Z0ludGVyZmFjZSwK
ICAgICAgICAgICAgICAgICAgIkZyb250OiAlZCAvICVkICglZClcbiIsCi0gICAgICAgICAgICAg
ICAgIFJpbmctPkZyb250LnJlcV9wcm9kX3B2dCwKLSAgICAgICAgICAgICAgICAgUmluZy0+RnJv
bnQucnNwX2NvbnMsCi0gICAgICAgICAgICAgICAgIFJpbmctPkZyb250Lm5yX2VudHMpOworICAg
ICAgICAgICAgICAgICBQcm90b2NvbC0+RnJvbnQucmVxX3Byb2RfcHZ0LAorICAgICAgICAgICAg
ICAgICBQcm90b2NvbC0+RnJvbnQucnNwX2NvbnMsCisgICAgICAgICAgICAgICAgIFByb3RvY29s
LT5Gcm9udC5ucl9lbnRzKTsKIAogICAgIFhFTkJVU19ERUJVRyhQcmludGYsCi0gICAgICAgICAg
ICAgICAgICZSaW5nLT5EZWJ1Z0ludGVyZmFjZSwKKyAgICAgICAgICAgICAgICAgJlByb3RvY29s
LT5EZWJ1Z0ludGVyZmFjZSwKICAgICAgICAgICAgICAgICAgIk9yZGVyOiAlZFxuIiwKLSAgICAg
ICAgICAgICAgICAgUmluZy0+T3JkZXIpOworICAgICAgICAgICAgICAgICBQcm90b2NvbC0+T3Jk
ZXIpOwogCi0gICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgKDF1bCA8PCBSaW5nLT5PcmRlcik7
ICsrSW5kZXgpIHsKKyAgICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCAoMXVsIDw8IFByb3RvY29s
LT5PcmRlcik7ICsrSW5kZXgpIHsKICAgICAgICAgWEVOQlVTX0RFQlVHKFByaW50ZiwKLSAgICAg
ICAgICAgICAgICAgICAgICZSaW5nLT5EZWJ1Z0ludGVyZmFjZSwKKyAgICAgICAgICAgICAgICAg
ICAgICZQcm90b2NvbC0+RGVidWdJbnRlcmZhY2UsCiAgICAgICAgICAgICAgICAgICAgICAiR3Jh
bnRzWyUtMmRdOiAweCVwICgldSlcbiIsCiAgICAgICAgICAgICAgICAgICAgICBJbmRleCwKLSAg
ICAgICAgICAgICAgICAgICAgIFJpbmctPkdyYW50c1tJbmRleF0sCi0gICAgICAgICAgICAgICAg
ICAgICBHcmFudGVyUmVmZXJlbmNlKEdyYW50ZXIsIFJpbmctPkdyYW50c1tJbmRleF0pKTsKKyAg
ICAgICAgICAgICAgICAgICAgIFByb3RvY29sLT5HcmFudHNbSW5kZXhdLAorICAgICAgICAgICAg
ICAgICAgICAgR3JhbnRlclJlZmVyZW5jZShHcmFudGVyLCBQcm90b2NvbC0+R3JhbnRzW0luZGV4
XSkpOwogICAgIH0KIAotICAgIGlmIChSaW5nLT5DaGFubmVsKSB7CisgICAgaWYgKFByb3RvY29s
LT5DaGFubmVsKSB7CiAgICAgICAgIFVMT05HICAgICAgIFBvcnQgPSBYRU5CVVNfRVZUQ0hOKEdl
dFBvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZSaW5nLT5F
dnRjaG5JbnRlcmZhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFJpbmctPkNoYW5uZWwpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAmUHJvdG9jb2wtPkV2dGNobkludGVyZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUHJvdG9jb2wtPkNoYW5uZWwpOwogCiAgICAgICAgIFhFTkJVU19ERUJV
RyhQcmludGYsCi0gICAgICAgICAgICAgICAgICAgICAmUmluZy0+RGVidWdJbnRlcmZhY2UsCisg
ICAgICAgICAgICAgICAgICAgICAmUHJvdG9jb2wtPkRlYnVnSW50ZXJmYWNlLAogICAgICAgICAg
ICAgICAgICAgICAgIkNoYW5uZWwgOiAlcCAoJWQpXG4iLAotICAgICAgICAgICAgICAgICAgICAg
UmluZy0+Q2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgICAgIFByb3RvY29sLT5DaGFubmVsLAog
ICAgICAgICAgICAgICAgICAgICAgUG9ydCk7CiAgICAgfQogCiAgICAgWEVOQlVTX0RFQlVHKFBy
aW50ZiwKLSAgICAgICAgICAgICAgICAgJlJpbmctPkRlYnVnSW50ZXJmYWNlLAorICAgICAgICAg
ICAgICAgICAmUHJvdG9jb2wtPkRlYnVnSW50ZXJmYWNlLAogICAgICAgICAgICAgICAgICAiQkxL
SUZfT1BzOiBSRUFEPSV1IFdSSVRFPSV1XG4iLAotICAgICAgICAgICAgICAgICBSaW5nLT5CbGtP
cFJlYWQsCi0gICAgICAgICAgICAgICAgIFJpbmctPkJsa09wV3JpdGUpOworICAgICAgICAgICAg
ICAgICBQcm90b2NvbC0+QmxrT3BSZWFkLAorICAgICAgICAgICAgICAgICBQcm90b2NvbC0+Qmxr
T3BXcml0ZSk7CiAgICAgWEVOQlVTX0RFQlVHKFByaW50ZiwKLSAgICAgICAgICAgICAgICAgJlJp
bmctPkRlYnVnSW50ZXJmYWNlLAorICAgICAgICAgICAgICAgICAmUHJvdG9jb2wtPkRlYnVnSW50
ZXJmYWNlLAogICAgICAgICAgICAgICAgICAiQkxLSUZfT1BzOiBJTkRJUkVDVF9SRUFEPSV1IElO
RElSRUNUX1dSSVRFPSV1XG4iLAotICAgICAgICAgICAgICAgICBSaW5nLT5CbGtPcEluZGlyZWN0
UmVhZCwKLSAgICAgICAgICAgICAgICAgUmluZy0+QmxrT3BJbmRpcmVjdFdyaXRlKTsKKyAgICAg
ICAgICAgICAgICAgUHJvdG9jb2wtPkJsa09wSW5kaXJlY3RSZWFkLAorICAgICAgICAgICAgICAg
ICBQcm90b2NvbC0+QmxrT3BJbmRpcmVjdFdyaXRlKTsKICAgICBYRU5CVVNfREVCVUcoUHJpbnRm
LAotICAgICAgICAgICAgICAgICAmUmluZy0+RGVidWdJbnRlcmZhY2UsCisgICAgICAgICAgICAg
ICAgICZQcm90b2NvbC0+RGVidWdJbnRlcmZhY2UsCiAgICAgICAgICAgICAgICAgICJCTEtJRl9P
UHM6IEJBUlJJRVI9JXUgRElTQ0FSRD0ldSBGTFVTSD0ldVxuIiwKLSAgICAgICAgICAgICAgICAg
UmluZy0+QmxrT3BCYXJyaWVyLAotICAgICAgICAgICAgICAgICBSaW5nLT5CbGtPcERpc2NhcmQs
Ci0gICAgICAgICAgICAgICAgIFJpbmctPkJsa09wRmx1c2gpOworICAgICAgICAgICAgICAgICBQ
cm90b2NvbC0+QmxrT3BCYXJyaWVyLAorICAgICAgICAgICAgICAgICBQcm90b2NvbC0+QmxrT3BE
aXNjYXJkLAorICAgICAgICAgICAgICAgICBQcm90b2NvbC0+QmxrT3BGbHVzaCk7CiAgICAgWEVO
QlVTX0RFQlVHKFByaW50ZiwKLSAgICAgICAgICAgICAgICAgJlJpbmctPkRlYnVnSW50ZXJmYWNl
LAorICAgICAgICAgICAgICAgICAmUHJvdG9jb2wtPkRlYnVnSW50ZXJmYWNlLAogICAgICAgICAg
ICAgICAgICAiU2VnbWVudHMgR3JhbnRlZD0lbGx1IEJvdW5jZWQ9JWxsdVxuIiwKLSAgICAgICAg
ICAgICAgICAgUmluZy0+U2Vnc0dyYW50ZWQsCi0gICAgICAgICAgICAgICAgIFJpbmctPlNlZ3NC
b3VuY2VkKTsKKyAgICAgICAgICAgICAgICAgUHJvdG9jb2wtPlNlZ3NHcmFudGVkLAorICAgICAg
ICAgICAgICAgICBQcm90b2NvbC0+U2Vnc0JvdW5jZWQpOwogCi0gICAgUXVldWVEZWJ1Z0NhbGxi
YWNrKCZSaW5nLT5QcmVwYXJlZFJlcXMsCisgICAgUXVldWVEZWJ1Z0NhbGxiYWNrKCZQcm90b2Nv
bC0+UHJlcGFyZWRSZXFzLAogICAgICAgICAgICAgICAgICAgICAgICAiUHJlcGFyZWQgIiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgJlJpbmctPkRlYnVnSW50ZXJmYWNlKTsKLSAgICBRdWV1ZURl
YnVnQ2FsbGJhY2soJlJpbmctPlN1Ym1pdHRlZFJlcXMsCisgICAgICAgICAgICAgICAgICAgICAg
ICZQcm90b2NvbC0+RGVidWdJbnRlcmZhY2UpOworICAgIFF1ZXVlRGVidWdDYWxsYmFjaygmUHJv
dG9jb2wtPlN1Ym1pdHRlZFJlcXMsCiAgICAgICAgICAgICAgICAgICAgICAgICJTdWJtaXR0ZWQi
LAotICAgICAgICAgICAgICAgICAgICAgICAmUmluZy0+RGVidWdJbnRlcmZhY2UpOwotICAgIFF1
ZXVlRGVidWdDYWxsYmFjaygmUmluZy0+U2h1dGRvd25TcmJzLAorICAgICAgICAgICAgICAgICAg
ICAgICAmUHJvdG9jb2wtPkRlYnVnSW50ZXJmYWNlKTsKKyAgICBRdWV1ZURlYnVnQ2FsbGJhY2so
JlByb3RvY29sLT5TaHV0ZG93blNyYnMsCiAgICAgICAgICAgICAgICAgICAgICAgICJTaHV0ZG93
biAiLAotICAgICAgICAgICAgICAgICAgICAgICAmUmluZy0+RGVidWdJbnRlcmZhY2UpOworICAg
ICAgICAgICAgICAgICAgICAgICAmUHJvdG9jb2wtPkRlYnVnSW50ZXJmYWNlKTsKIH0KIAogc3Rh
dGljIERFQ0xTUEVDX05PSU5MSU5FIFZPSUQKLVJpbmdBY3F1aXJlTG9jaygKK1Byb3RvY29sQWNx
dWlyZUxvY2soCiAgICAgSU4gIFBWT0lEICAgICAgIEFyZ3VtZW50CiAgICAgKQogewotICAgIFBY
RU5WQkRfUklORyAgICBSaW5nID0gQXJndW1lbnQ7Ci0gICAgS2VBY3F1aXJlU3BpbkxvY2tBdERw
Y0xldmVsKCZSaW5nLT5Mb2NrKTsKKyAgICBQWEVOVkJEX1BST1RPQ09MICAgIFByb3RvY29sID0g
QXJndW1lbnQ7CisgICAgS2VBY3F1aXJlU3BpbkxvY2tBdERwY0xldmVsKCZQcm90b2NvbC0+TG9j
ayk7CiB9CiAKIHN0YXRpYyBERUNMU1BFQ19OT0lOTElORSBWT0lECi1SaW5nUmVsZWFzZUxvY2so
CitQcm90b2NvbFJlbGVhc2VMb2NrKAogICAgIElOICBQVk9JRCAgICAgICBBcmd1bWVudAogICAg
ICkKIHsKLSAgICBQWEVOVkJEX1JJTkcgICAgUmluZyA9IEFyZ3VtZW50OwotICAgIEtlUmVsZWFz
ZVNwaW5Mb2NrRnJvbURwY0xldmVsKCZSaW5nLT5Mb2NrKTsKKyAgICBQWEVOVkJEX1BST1RPQ09M
ICAgIFByb3RvY29sID0gQXJndW1lbnQ7CisgICAgS2VSZWxlYXNlU3BpbkxvY2tGcm9tRHBjTGV2
ZWwoJlByb3RvY29sLT5Mb2NrKTsKIH0KIAogc3RhdGljIERFQ0xTUEVDX05PSU5MSU5FIE5UU1RB
VFVTCi1SaW5nUmVxdWVzdEN0b3IoCitQcm90b2NvbFJlcXVlc3RDdG9yKAogICAgIElOICBQVk9J
RCAgICAgICBBcmd1bWVudCwKICAgICBJTiAgUFZPSUQgICAgICAgT2JqZWN0CiAgICAgKQpAQCAt
MTQxMyw3ICsxNDEzLDcgQEAgUmluZ1JlcXVlc3RDdG9yKAogfQogCiBzdGF0aWMgREVDTFNQRUNf
Tk9JTkxJTkUgVk9JRAotUmluZ1JlcXVlc3REdG9yKAorUHJvdG9jb2xSZXF1ZXN0RHRvcigKICAg
ICBJTiAgUFZPSUQgICAgICAgQXJndW1lbnQsCiAgICAgSU4gIFBWT0lEICAgICAgIE9iamVjdAog
ICAgICkKQEAgLTE0MjMsNyArMTQyMyw3IEBAIFJpbmdSZXF1ZXN0RHRvcigKIH0KIAogc3RhdGlj
IERFQ0xTUEVDX05PSU5MSU5FIE5UU1RBVFVTCi1SaW5nU2VnbWVudEN0b3IoCitQcm90b2NvbFNl
Z21lbnRDdG9yKAogICAgIElOICBQVk9JRCAgICAgICBBcmd1bWVudCwKICAgICBJTiAgUFZPSUQg
ICAgICAgT2JqZWN0CiAgICAgKQpAQCAtMTQzNCw3ICsxNDM0LDcgQEAgUmluZ1NlZ21lbnRDdG9y
KAogfQogCiBzdGF0aWMgREVDTFNQRUNfTk9JTkxJTkUgVk9JRAotUmluZ1NlZ21lbnREdG9yKAor
UHJvdG9jb2xTZWdtZW50RHRvcigKICAgICBJTiAgUFZPSUQgICAgICAgQXJndW1lbnQsCiAgICAg
SU4gIFBWT0lEICAgICAgIE9iamVjdAogICAgICkKQEAgLTE0NDQsNyArMTQ0NCw3IEBAIFJpbmdT
ZWdtZW50RHRvcigKIH0KIAogc3RhdGljIERFQ0xTUEVDX05PSU5MSU5FIE5UU1RBVFVTCi1SaW5n
SW5kaXJlY3RDdG9yKAorUHJvdG9jb2xJbmRpcmVjdEN0b3IoCiAgICAgSU4gIFBWT0lEICAgICAg
ICAgICBBcmd1bWVudCwKICAgICBJTiAgUFZPSUQgICAgICAgICAgIE9iamVjdAogICAgICkKQEAg
LTE0NzEsNyArMTQ3MSw3IEBAIGZhaWwxOgogfQogCiBzdGF0aWMgREVDTFNQRUNfTk9JTkxJTkUg
Vk9JRAotUmluZ0luZGlyZWN0RHRvcigKK1Byb3RvY29sSW5kaXJlY3REdG9yKAogICAgIElOICBQ
Vk9JRCAgICAgICBBcmd1bWVudCwKICAgICBJTiAgUFZPSUQgICAgICAgT2JqZWN0CiAgICAgKQpA
QCAtMTQ4Niw5ICsxNDg2LDkgQEAgUmluZ0luZGlyZWN0RHRvcigKIH0KIAogTlRTVEFUVVMKLVJp
bmdDcmVhdGUoCitQcm90b2NvbENyZWF0ZSgKICAgICBJTiAgUFhFTlZCRF9GUk9OVEVORCAgICBG
cm9udGVuZCwKLSAgICBPVVQgUFhFTlZCRF9SSU5HKiAgICAgICBSaW5nCisgICAgT1VUIFBYRU5W
QkRfUFJPVE9DT0wqICAgICAgIFByb3RvY29sCiAgICAgKQogewogICAgIFBYRU5WQkRfVEFSR0VU
ICAgICAgICAgIFRhcmdldCA9IEZyb250ZW5kR2V0VGFyZ2V0KEZyb250ZW5kKTsKQEAgLTE0OTYs
MjQgKzE0OTYsMjQgQEAgUmluZ0NyZWF0ZSgKICAgICBDSEFSICAgICAgICAgICAgICAgICAgICBO
YW1lW01BWF9OQU1FX0xFTl07CiAgICAgTlRTVEFUVVMgICAgICAgICAgICAgICAgc3RhdHVzOwog
Ci0gICAgKlJpbmcgPSBfX1JpbmdBbGxvY2F0ZShzaXplb2YoWEVOVkJEX1JJTkcpKTsKKyAgICAq
UHJvdG9jb2wgPSBfX1Byb3RvY29sQWxsb2NhdGUoc2l6ZW9mKFhFTlZCRF9QUk9UT0NPTCkpOwog
CiAgICAgc3RhdHVzID0gU1RBVFVTX05PX01FTU9SWTsKLSAgICBpZiAoKlJpbmcgPT0gTlVMTCkK
KyAgICBpZiAoKlByb3RvY29sID09IE5VTEwpCiAgICAgICAgIGdvdG8gZmFpbDE7CiAKLSAgICAo
KlJpbmcpLT5Gcm9udGVuZCA9IEZyb250ZW5kOwotICAgIEtlSW5pdGlhbGl6ZVNwaW5Mb2NrKCYo
KlJpbmcpLT5Mb2NrKTsKLSAgICBLZUluaXRpYWxpemVUaHJlYWRlZERwYygmKCpSaW5nKS0+RHBj
LCBSaW5nRHBjLCAqUmluZyk7Ci0gICAgS2VTZXRJbXBvcnRhbmNlRHBjKCYoKlJpbmcpLT5EcGMs
IE1lZGl1bUhpZ2hJbXBvcnRhbmNlKTsKKyAgICAoKlByb3RvY29sKS0+RnJvbnRlbmQgPSBGcm9u
dGVuZDsKKyAgICBLZUluaXRpYWxpemVTcGluTG9jaygmKCpQcm90b2NvbCktPkxvY2spOworICAg
IEtlSW5pdGlhbGl6ZVRocmVhZGVkRHBjKCYoKlByb3RvY29sKS0+RHBjLCBQcm90b2NvbERwYywg
KlByb3RvY29sKTsKKyAgICBLZVNldEltcG9ydGFuY2VEcGMoJigqUHJvdG9jb2wpLT5EcGMsIE1l
ZGl1bUhpZ2hJbXBvcnRhbmNlKTsKIAotICAgIFF1ZXVlSW5pdCgmKCpSaW5nKS0+UHJlcGFyZWRS
ZXFzKTsKLSAgICBRdWV1ZUluaXQoJigqUmluZyktPlN1Ym1pdHRlZFJlcXMpOwotICAgIFF1ZXVl
SW5pdCgmKCpSaW5nKS0+U2h1dGRvd25TcmJzKTsKKyAgICBRdWV1ZUluaXQoJigqUHJvdG9jb2wp
LT5QcmVwYXJlZFJlcXMpOworICAgIFF1ZXVlSW5pdCgmKCpQcm90b2NvbCktPlN1Ym1pdHRlZFJl
cXMpOworICAgIFF1ZXVlSW5pdCgmKCpQcm90b2NvbCktPlNodXRkb3duU3Jicyk7CiAKLSAgICBB
ZGFwdGVyR2V0Q2FjaGVJbnRlcmZhY2UoQWRhcHRlciwgJigqUmluZyktPkNhY2hlSW50ZXJmYWNl
KTsKKyAgICBBZGFwdGVyR2V0Q2FjaGVJbnRlcmZhY2UoQWRhcHRlciwgJigqUHJvdG9jb2wpLT5D
YWNoZUludGVyZmFjZSk7CiAKLSAgICBzdGF0dXMgPSBYRU5CVVNfQ0FDSEUoQWNxdWlyZSwgJigq
UmluZyktPkNhY2hlSW50ZXJmYWNlKTsKKyAgICBzdGF0dXMgPSBYRU5CVVNfQ0FDSEUoQWNxdWly
ZSwgJigqUHJvdG9jb2wpLT5DYWNoZUludGVyZmFjZSk7CiAgICAgaWYgKCFOVF9TVUNDRVNTKHN0
YXR1cykpCiAgICAgICAgIGdvdG8gZmFpbDI7CiAKQEAgLTE1MjUsMTYgKzE1MjUsMTYgQEAgUmlu
Z0NyZWF0ZSgKICAgICAgICAgZ290byBmYWlsMzsKIAogICAgIHN0YXR1cyA9IFhFTkJVU19DQUNI
RShDcmVhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICYoKlJpbmcpLT5DYWNoZUludGVy
ZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJigqUHJvdG9jb2wpLT5DYWNoZUludGVy
ZmFjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZW9mKFhFTlZCRF9SRVFVRVNUKSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMzIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFJpbmdSZXF1ZXN0Q3RvciwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgUmluZ1JlcXVlc3REdG9yLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICBSaW5nQWNxdWlyZUxvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFJpbmdS
ZWxlYXNlTG9jaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKlJpbmcsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICYoKlJpbmcpLT5SZXF1ZXN0Q2FjaGUpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICBQcm90b2NvbFJlcXVlc3RDdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICBQcm90b2NvbFJlcXVlc3REdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBQcm90b2Nv
bEFjcXVpcmVMb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICBQcm90b2NvbFJlbGVhc2VM
b2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAqUHJvdG9jb2wsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICYoKlByb3RvY29sKS0+UmVxdWVzdENhY2hlKTsKICAgICBpZiAoIU5UX1NV
Q0NFU1Moc3RhdHVzKSkKICAgICAgICAgZ290byBmYWlsNDsKIApAQCAtMTU0NiwxNiArMTU0Niwx
NiBAQCBSaW5nQ3JlYXRlKAogICAgICAgICBnb3RvIGZhaWw1OwogCiAgICAgc3RhdHVzID0gWEVO
QlVTX0NBQ0hFKENyZWF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJigqUmluZyktPkNh
Y2hlSW50ZXJmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmKCpQcm90b2NvbCktPkNh
Y2hlSW50ZXJmYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICBzaXplb2YoWEVOVkJEX1NFR01FTlQpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAzMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgUmluZ1NlZ21lbnRDdG9y
LAotICAgICAgICAgICAgICAgICAgICAgICAgICBSaW5nU2VnbWVudER0b3IsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgIFJpbmdBY3F1aXJlTG9jaywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgUmluZ1JlbGVhc2VMb2NrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAqUmluZywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgJigqUmluZyktPlNlZ21lbnRDYWNoZSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgIFByb3RvY29sU2VnbWVudEN0b3IsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgIFByb3RvY29sU2VnbWVudER0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAg
IFByb3RvY29sQWNxdWlyZUxvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgIFByb3RvY29s
UmVsZWFzZUxvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICpQcm90b2NvbCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgJigqUHJvdG9jb2wpLT5TZWdtZW50Q2FjaGUpOwogICAgIGlm
ICghTlRfU1VDQ0VTUyhzdGF0dXMpKQogICAgICAgICBnb3RvIGZhaWw2OwogCkBAIC0xNTY3LDE2
ICsxNTY3LDE2IEBAIFJpbmdDcmVhdGUoCiAgICAgICAgIGdvdG8gZmFpbDc7CiAKICAgICBzdGF0
dXMgPSBYRU5CVVNfQ0FDSEUoQ3JlYXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmKCpS
aW5nKS0+Q2FjaGVJbnRlcmZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICYoKlByb3Rv
Y29sKS0+Q2FjaGVJbnRlcmZhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihYRU5WQkRfSU5ESVJFQ1QpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICBSaW5nSW5k
aXJlY3RDdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICBSaW5nSW5kaXJlY3REdG9yLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICBSaW5nQWNxdWlyZUxvY2ssCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgIFJpbmdSZWxlYXNlTG9jaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
KlJpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICYoKlJpbmcpLT5JbmRpcmVjdENhY2hl
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvdG9jb2xJbmRpcmVjdEN0b3IsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgIFByb3RvY29sSW5kaXJlY3REdG9yLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICBQcm90b2NvbEFjcXVpcmVMb2NrLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICBQcm90b2NvbFJlbGVhc2VMb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAqUHJv
dG9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICYoKlByb3RvY29sKS0+SW5kaXJlY3RD
YWNoZSk7CiAgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpCiAgICAgICAgIGdvdG8gZmFpbDg7
CiAKQEAgLTE1ODcsMTI3ICsxNTg3LDEyNyBAQCBmYWlsODoKIGZhaWw3OgogICAgIEVycm9yKCJm
YWlsN1xuIik7CiAgICAgWEVOQlVTX0NBQ0hFKERlc3Ryb3ksCi0gICAgICAgICAgICAgICAgICYo
KlJpbmcpLT5DYWNoZUludGVyZmFjZSwKLSAgICAgICAgICAgICAgICAgKCpSaW5nKS0+U2VnbWVu
dENhY2hlKTsKLSAgICAoKlJpbmcpLT5TZWdtZW50Q2FjaGUgPSBOVUxMOworICAgICAgICAgICAg
ICAgICAmKCpQcm90b2NvbCktPkNhY2hlSW50ZXJmYWNlLAorICAgICAgICAgICAgICAgICAoKlBy
b3RvY29sKS0+U2VnbWVudENhY2hlKTsKKyAgICAoKlByb3RvY29sKS0+U2VnbWVudENhY2hlID0g
TlVMTDsKIGZhaWw2OgogICAgIEVycm9yKCJmYWlsNlxuIik7CiBmYWlsNToKICAgICBFcnJvcigi
ZmFpbDVcbiIpOwogICAgIFhFTkJVU19DQUNIRShEZXN0cm95LAotICAgICAgICAgICAgICAgICAm
KCpSaW5nKS0+Q2FjaGVJbnRlcmZhY2UsCi0gICAgICAgICAgICAgICAgICgqUmluZyktPlJlcXVl
c3RDYWNoZSk7Ci0gICAgKCpSaW5nKS0+UmVxdWVzdENhY2hlID0gTlVMTDsKKyAgICAgICAgICAg
ICAgICAgJigqUHJvdG9jb2wpLT5DYWNoZUludGVyZmFjZSwKKyAgICAgICAgICAgICAgICAgKCpQ
cm90b2NvbCktPlJlcXVlc3RDYWNoZSk7CisgICAgKCpQcm90b2NvbCktPlJlcXVlc3RDYWNoZSA9
IE5VTEw7CiBmYWlsNDoKICAgICBFcnJvcigiZmFpbDRcbiIpOwogZmFpbDM6CiAgICAgRXJyb3Io
ImZhaWwzXG4iKTsKICAgICBYRU5CVVNfQ0FDSEUoUmVsZWFzZSwKLSAgICAgICAgICAgICAgICAg
JigqUmluZyktPkNhY2hlSW50ZXJmYWNlKTsKKyAgICAgICAgICAgICAgICAgJigqUHJvdG9jb2wp
LT5DYWNoZUludGVyZmFjZSk7CiBmYWlsMjoKICAgICBFcnJvcigiZmFpbDJcbiIpOwogCi0gICAg
UnRsWmVyb01lbW9yeSgmKCpSaW5nKS0+Q2FjaGVJbnRlcmZhY2UsCisgICAgUnRsWmVyb01lbW9y
eSgmKCpQcm90b2NvbCktPkNhY2hlSW50ZXJmYWNlLAogICAgICAgICAgICAgICAgICAgc2l6ZW9m
IChYRU5CVVNfQ0FDSEVfSU5URVJGQUNFKSk7CiAKLSAgICBSdGxaZXJvTWVtb3J5KCYoKlJpbmcp
LT5QcmVwYXJlZFJlcXMsIHNpemVvZihYRU5WQkRfUVVFVUUpKTsKLSAgICBSdGxaZXJvTWVtb3J5
KCYoKlJpbmcpLT5TdWJtaXR0ZWRSZXFzLCBzaXplb2YoWEVOVkJEX1FVRVVFKSk7Ci0gICAgUnRs
WmVyb01lbW9yeSgmKCpSaW5nKS0+U2h1dGRvd25TcmJzLCBzaXplb2YoWEVOVkJEX1FVRVVFKSk7
CisgICAgUnRsWmVyb01lbW9yeSgmKCpQcm90b2NvbCktPlByZXBhcmVkUmVxcywgc2l6ZW9mKFhF
TlZCRF9RVUVVRSkpOworICAgIFJ0bFplcm9NZW1vcnkoJigqUHJvdG9jb2wpLT5TdWJtaXR0ZWRS
ZXFzLCBzaXplb2YoWEVOVkJEX1FVRVVFKSk7CisgICAgUnRsWmVyb01lbW9yeSgmKCpQcm90b2Nv
bCktPlNodXRkb3duU3Jicywgc2l6ZW9mKFhFTlZCRF9RVUVVRSkpOwogCi0gICAgUnRsWmVyb01l
bW9yeSgmKCpSaW5nKS0+RHBjLCBzaXplb2YoS0RQQykpOwotICAgIFJ0bFplcm9NZW1vcnkoJigq
UmluZyktPkxvY2ssIHNpemVvZihLU1BJTl9MT0NLKSk7Ci0gICAgKCpSaW5nKS0+RnJvbnRlbmQg
PSBOVUxMOworICAgIFJ0bFplcm9NZW1vcnkoJigqUHJvdG9jb2wpLT5EcGMsIHNpemVvZihLRFBD
KSk7CisgICAgUnRsWmVyb01lbW9yeSgmKCpQcm90b2NvbCktPkxvY2ssIHNpemVvZihLU1BJTl9M
T0NLKSk7CisgICAgKCpQcm90b2NvbCktPkZyb250ZW5kID0gTlVMTDsKIAotICAgIEFTU0VSVChJ
c1plcm9NZW1vcnkoKlJpbmcsIHNpemVvZihYRU5WQkRfUklORykpKTsKLSAgICBfX1JpbmdGcmVl
KCpSaW5nKTsKLSAgICAqUmluZyA9IE5VTEw7CisgICAgQVNTRVJUKElzWmVyb01lbW9yeSgqUHJv
dG9jb2wsIHNpemVvZihYRU5WQkRfUFJPVE9DT0wpKSk7CisgICAgX19Qcm90b2NvbEZyZWUoKlBy
b3RvY29sKTsKKyAgICAqUHJvdG9jb2wgPSBOVUxMOwogZmFpbDE6CiAgICAgRXJyb3IoImZhaWwx
ICUwOHhcbiIsIHN0YXR1cyk7CiAgICAgcmV0dXJuIHN0YXR1czsKIH0KIAogVk9JRAotUmluZ0Rl
c3Ryb3koCi0gICAgSU4gIFBYRU5WQkRfUklORyAgICBSaW5nCitQcm90b2NvbERlc3Ryb3koCisg
ICAgSU4gIFBYRU5WQkRfUFJPVE9DT0wgICAgUHJvdG9jb2wKICAgICApCiB7CiAgICAgWEVOQlVT
X0NBQ0hFKERlc3Ryb3ksCi0gICAgICAgICAgICAgICAgICZSaW5nLT5DYWNoZUludGVyZmFjZSwK
LSAgICAgICAgICAgICAgICAgUmluZy0+SW5kaXJlY3RDYWNoZSk7Ci0gICAgUmluZy0+SW5kaXJl
Y3RDYWNoZSA9IE5VTEw7CisgICAgICAgICAgICAgICAgICZQcm90b2NvbC0+Q2FjaGVJbnRlcmZh
Y2UsCisgICAgICAgICAgICAgICAgIFByb3RvY29sLT5JbmRpcmVjdENhY2hlKTsKKyAgICBQcm90
b2NvbC0+SW5kaXJlY3RDYWNoZSA9IE5VTEw7CiAKICAgICBYRU5CVVNfQ0FDSEUoRGVzdHJveSwK
LSAgICAgICAgICAgICAgICAgJlJpbmctPkNhY2hlSW50ZXJmYWNlLAotICAgICAgICAgICAgICAg
ICBSaW5nLT5TZWdtZW50Q2FjaGUpOwotICAgIFJpbmctPlNlZ21lbnRDYWNoZSA9IE5VTEw7Cisg
ICAgICAgICAgICAgICAgICZQcm90b2NvbC0+Q2FjaGVJbnRlcmZhY2UsCisgICAgICAgICAgICAg
ICAgIFByb3RvY29sLT5TZWdtZW50Q2FjaGUpOworICAgIFByb3RvY29sLT5TZWdtZW50Q2FjaGUg
PSBOVUxMOwogCiAgICAgWEVOQlVTX0NBQ0hFKERlc3Ryb3ksCi0gICAgICAgICAgICAgICAgICZS
aW5nLT5DYWNoZUludGVyZmFjZSwKLSAgICAgICAgICAgICAgICAgUmluZy0+UmVxdWVzdENhY2hl
KTsKLSAgICBSaW5nLT5SZXF1ZXN0Q2FjaGUgPSBOVUxMOworICAgICAgICAgICAgICAgICAmUHJv
dG9jb2wtPkNhY2hlSW50ZXJmYWNlLAorICAgICAgICAgICAgICAgICBQcm90b2NvbC0+UmVxdWVz
dENhY2hlKTsKKyAgICBQcm90b2NvbC0+UmVxdWVzdENhY2hlID0gTlVMTDsKIAogICAgIFhFTkJV
U19DQUNIRShSZWxlYXNlLAotICAgICAgICAgICAgICAgICAmUmluZy0+Q2FjaGVJbnRlcmZhY2Up
OworICAgICAgICAgICAgICAgICAmUHJvdG9jb2wtPkNhY2hlSW50ZXJmYWNlKTsKIAotICAgIFJ0
bFplcm9NZW1vcnkoJlJpbmctPkNhY2hlSW50ZXJmYWNlLAorICAgIFJ0bFplcm9NZW1vcnkoJlBy
b3RvY29sLT5DYWNoZUludGVyZmFjZSwKICAgICAgICAgICAgICAgICAgIHNpemVvZiAoWEVOQlVT
X0NBQ0hFX0lOVEVSRkFDRSkpOwogCi0gICAgUnRsWmVyb01lbW9yeSgmUmluZy0+UHJlcGFyZWRS
ZXFzLCBzaXplb2YoWEVOVkJEX1FVRVVFKSk7Ci0gICAgUnRsWmVyb01lbW9yeSgmUmluZy0+U3Vi
bWl0dGVkUmVxcywgc2l6ZW9mKFhFTlZCRF9RVUVVRSkpOwotICAgIFJ0bFplcm9NZW1vcnkoJlJp
bmctPlNodXRkb3duU3Jicywgc2l6ZW9mKFhFTlZCRF9RVUVVRSkpOwotCi0gICAgUnRsWmVyb01l
bW9yeSgmUmluZy0+RHBjLCBzaXplb2YoS0RQQykpOwotICAgIFJ0bFplcm9NZW1vcnkoJlJpbmct
PkxvY2ssIHNpemVvZihLU1BJTl9MT0NLKSk7Ci0gICAgUmluZy0+RnJvbnRlbmQgPSBOVUxMOwot
Ci0gICAgUmluZy0+QmxrT3BSZWFkID0gMDsKLSAgICBSaW5nLT5CbGtPcFdyaXRlID0gMDsKLSAg
ICBSaW5nLT5CbGtPcEluZGlyZWN0UmVhZCA9IDA7Ci0gICAgUmluZy0+QmxrT3BJbmRpcmVjdFdy
aXRlID0gMDsKLSAgICBSaW5nLT5CbGtPcEJhcnJpZXIgPSAwOwotICAgIFJpbmctPkJsa09wRGlz
Y2FyZCA9IDA7Ci0gICAgUmluZy0+QmxrT3BGbHVzaCA9IDA7Ci0gICAgUmluZy0+U2Vnc0dyYW50
ZWQgPSAwOwotICAgIFJpbmctPlNlZ3NCb3VuY2VkID0gMDsKLQotICAgIEFTU0VSVChJc1plcm9N
ZW1vcnkoUmluZywgc2l6ZW9mKFhFTlZCRF9SSU5HKSkpOwotICAgIF9fUmluZ0ZyZWUoUmluZyk7
CisgICAgUnRsWmVyb01lbW9yeSgmUHJvdG9jb2wtPlByZXBhcmVkUmVxcywgc2l6ZW9mKFhFTlZC
RF9RVUVVRSkpOworICAgIFJ0bFplcm9NZW1vcnkoJlByb3RvY29sLT5TdWJtaXR0ZWRSZXFzLCBz
aXplb2YoWEVOVkJEX1FVRVVFKSk7CisgICAgUnRsWmVyb01lbW9yeSgmUHJvdG9jb2wtPlNodXRk
b3duU3Jicywgc2l6ZW9mKFhFTlZCRF9RVUVVRSkpOworCisgICAgUnRsWmVyb01lbW9yeSgmUHJv
dG9jb2wtPkRwYywgc2l6ZW9mKEtEUEMpKTsKKyAgICBSdGxaZXJvTWVtb3J5KCZQcm90b2NvbC0+
TG9jaywgc2l6ZW9mKEtTUElOX0xPQ0spKTsKKyAgICBQcm90b2NvbC0+RnJvbnRlbmQgPSBOVUxM
OworCisgICAgUHJvdG9jb2wtPkJsa09wUmVhZCA9IDA7CisgICAgUHJvdG9jb2wtPkJsa09wV3Jp
dGUgPSAwOworICAgIFByb3RvY29sLT5CbGtPcEluZGlyZWN0UmVhZCA9IDA7CisgICAgUHJvdG9j
b2wtPkJsa09wSW5kaXJlY3RXcml0ZSA9IDA7CisgICAgUHJvdG9jb2wtPkJsa09wQmFycmllciA9
IDA7CisgICAgUHJvdG9jb2wtPkJsa09wRGlzY2FyZCA9IDA7CisgICAgUHJvdG9jb2wtPkJsa09w
Rmx1c2ggPSAwOworICAgIFByb3RvY29sLT5TZWdzR3JhbnRlZCA9IDA7CisgICAgUHJvdG9jb2wt
PlNlZ3NCb3VuY2VkID0gMDsKKworICAgIEFTU0VSVChJc1plcm9NZW1vcnkoUHJvdG9jb2wsIHNp
emVvZihYRU5WQkRfUFJPVE9DT0wpKSk7CisgICAgX19Qcm90b2NvbEZyZWUoUHJvdG9jb2wpOwog
fQogCiBOVFNUQVRVUwotUmluZ0Nvbm5lY3QoCi0gICAgSU4gIFBYRU5WQkRfUklORyAgICBSaW5n
CitQcm90b2NvbENvbm5lY3QoCisgICAgSU4gIFBYRU5WQkRfUFJPVE9DT0wgICAgUHJvdG9jb2wK
ICAgICApCiB7Ci0gICAgUFhFTlZCRF9UQVJHRVQgICAgICBUYXJnZXQgPSBGcm9udGVuZEdldFRh
cmdldChSaW5nLT5Gcm9udGVuZCk7CisgICAgUFhFTlZCRF9UQVJHRVQgICAgICBUYXJnZXQgPSBG
cm9udGVuZEdldFRhcmdldChQcm90b2NvbC0+RnJvbnRlbmQpOwogICAgIFBYRU5WQkRfQURBUFRF
UiAgICAgQWRhcHRlciA9IFRhcmdldEdldEFkYXB0ZXIoVGFyZ2V0KTsKLSAgICBQWEVOVkJEX0dS
QU5URVIgICAgIEdyYW50ZXIgPSBGcm9udGVuZEdldEdyYW50ZXIoUmluZy0+RnJvbnRlbmQpOwor
ICAgIFBYRU5WQkRfR1JBTlRFUiAgICAgR3JhbnRlciA9IEZyb250ZW5kR2V0R3JhbnRlcihQcm90
b2NvbC0+RnJvbnRlbmQpOwogICAgIFBDSEFSICAgICAgICAgICAgICAgQnVmZmVyOwogICAgIFVM
T05HICAgICAgICAgICAgICAgSW5kZXg7CiAgICAgTlRTVEFUVVMgICAgICAgICAgICBzdGF0dXM7
CiAKLSAgICBBU1NFUlQoUmluZy0+Q29ubmVjdGVkID09IEZBTFNFKTsKKyAgICBBU1NFUlQoUHJv
dG9jb2wtPkNvbm5lY3RlZCA9PSBGQUxTRSk7CiAKLSAgICBBZGFwdGVyR2V0U3RvcmVJbnRlcmZh
Y2UoQWRhcHRlciwgJlJpbmctPlN0b3JlSW50ZXJmYWNlKTsKLSAgICBBZGFwdGVyR2V0RXZ0Y2hu
SW50ZXJmYWNlKEFkYXB0ZXIsICZSaW5nLT5FdnRjaG5JbnRlcmZhY2UpOwotICAgIEFkYXB0ZXJH
ZXREZWJ1Z0ludGVyZmFjZShBZGFwdGVyLCAmUmluZy0+RGVidWdJbnRlcmZhY2UpOworICAgIEFk
YXB0ZXJHZXRTdG9yZUludGVyZmFjZShBZGFwdGVyLCAmUHJvdG9jb2wtPlN0b3JlSW50ZXJmYWNl
KTsKKyAgICBBZGFwdGVyR2V0RXZ0Y2huSW50ZXJmYWNlKEFkYXB0ZXIsICZQcm90b2NvbC0+RXZ0
Y2huSW50ZXJmYWNlKTsKKyAgICBBZGFwdGVyR2V0RGVidWdJbnRlcmZhY2UoQWRhcHRlciwgJlBy
b3RvY29sLT5EZWJ1Z0ludGVyZmFjZSk7CiAKLSAgICBzdGF0dXMgPSBYRU5CVVNfU1RPUkUoQWNx
dWlyZSwgJlJpbmctPlN0b3JlSW50ZXJmYWNlKTsKKyAgICBzdGF0dXMgPSBYRU5CVVNfU1RPUkUo
QWNxdWlyZSwgJlByb3RvY29sLT5TdG9yZUludGVyZmFjZSk7CiAgICAgaWYgKCFOVF9TVUNDRVNT
KHN0YXR1cykpCiAgICAgICAgIGdvdG8gZmFpbDE7CiAKLSAgICBzdGF0dXMgPSBYRU5CVVNfRVZU
Q0hOKEFjcXVpcmUsICZSaW5nLT5FdnRjaG5JbnRlcmZhY2UpOworICAgIHN0YXR1cyA9IFhFTkJV
U19FVlRDSE4oQWNxdWlyZSwgJlByb3RvY29sLT5FdnRjaG5JbnRlcmZhY2UpOwogICAgIGlmICgh
TlRfU1VDQ0VTUyhzdGF0dXMpKQogICAgICAgICBnb3RvIGZhaWwyOwogCi0gICAgc3RhdHVzID0g
WEVOQlVTX0RFQlVHKEFjcXVpcmUsICZSaW5nLT5EZWJ1Z0ludGVyZmFjZSk7CisgICAgc3RhdHVz
ID0gWEVOQlVTX0RFQlVHKEFjcXVpcmUsICZQcm90b2NvbC0+RGVidWdJbnRlcmZhY2UpOwogICAg
IGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKQogICAgICAgICBnb3RvIGZhaWwzOwogCiAgICAgc3Rh
dHVzID0gWEVOQlVTX1NUT1JFKFJlYWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZSaW5n
LT5TdG9yZUludGVyZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJlByb3RvY29sLT5T
dG9yZUludGVyZmFjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgRnJvbnRlbmRHZXRCYWNrZW5kUGF0aChSaW5nLT5Gcm9udGVuZCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgIEZyb250ZW5kR2V0QmFja2VuZFBhdGgoUHJvdG9j
b2wtPkZyb250ZW5kKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1heC1yaW5nLXBhZ2Ut
b3JkZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAmQnVmZmVyKTsKICAgICBpZiAoTlRf
U1VDQ0VTUyhzdGF0dXMpKSB7CkBAIC0xNzE1LDE1NiArMTcxNSwxNTYgQEAgUmluZ0Nvbm5lY3Qo
CiAKICAgICAgICAgaWYgKERyaXZlckdldEZlYXR1cmVPdmVycmlkZShGZWF0dXJlTWF4UmluZ1Bh
Z2VPcmRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmTWF4T3JkZXIp
KSB7Ci0gICAgICAgICAgICBNYXhPcmRlciA9IG1pbihNYXhPcmRlciwgWEVOVkJEX01BWF9SSU5H
X1BBR0VfT1JERVIpOworICAgICAgICAgICAgTWF4T3JkZXIgPSBtaW4oTWF4T3JkZXIsIFhFTlZC
RF9NQVhfUFJPVE9DT0xfUEFHRV9PUkRFUik7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBNYXhPcmRlciA9IFhFTlZCRF9NQVhfUklOR19QQUdFX09SREVSOworICAgICAgICAgICAgTWF4
T3JkZXIgPSBYRU5WQkRfTUFYX1BST1RPQ09MX1BBR0VfT1JERVI7CiAgICAgICAgIH0KIAotICAg
ICAgICBSaW5nLT5PcmRlciA9IHN0cnRvdWwoQnVmZmVyLCBOVUxMLCAxMCk7Ci0gICAgICAgIFJp
bmctPk9yZGVyID0gbWluKFJpbmctPk9yZGVyLCBNYXhPcmRlcik7CisgICAgICAgIFByb3RvY29s
LT5PcmRlciA9IHN0cnRvdWwoQnVmZmVyLCBOVUxMLCAxMCk7CisgICAgICAgIFByb3RvY29sLT5P
cmRlciA9IG1pbihQcm90b2NvbC0+T3JkZXIsIE1heE9yZGVyKTsKIAogICAgICAgICBYRU5CVVNf
U1RPUkUoRnJlZSwKLSAgICAgICAgICAgICAgICAgICAgICZSaW5nLT5TdG9yZUludGVyZmFjZSwK
KyAgICAgICAgICAgICAgICAgICAgICZQcm90b2NvbC0+U3RvcmVJbnRlcmZhY2UsCiAgICAgICAg
ICAgICAgICAgICAgICBCdWZmZXIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIFJpbmctPk9yZGVy
ID0gMDsKKyAgICAgICAgUHJvdG9jb2wtPk9yZGVyID0gMDsKICAgICB9CiAKLSAgICBSaW5nLT5N
ZGwgPSBfX0FsbG9jYXRlUGFnZXMoMSA8PCBSaW5nLT5PcmRlcik7CisgICAgUHJvdG9jb2wtPk1k
bCA9IF9fQWxsb2NhdGVQYWdlcygxIDw8IFByb3RvY29sLT5PcmRlcik7CiAKICAgICBzdGF0dXMg
PSBTVEFUVVNfTk9fTUVNT1JZOwotICAgIGlmIChSaW5nLT5NZGwgPT0gTlVMTCkKKyAgICBpZiAo
UHJvdG9jb2wtPk1kbCA9PSBOVUxMKQogICAgICAgICBnb3RvIGZhaWw0OwogCi0gICAgUmluZy0+
U2hhcmVkID0gTW1HZXRTeXN0ZW1BZGRyZXNzRm9yTWRsU2FmZShSaW5nLT5NZGwsCisgICAgUHJv
dG9jb2wtPlNoYXJlZCA9IE1tR2V0U3lzdGVtQWRkcmVzc0Zvck1kbFNhZmUoUHJvdG9jb2wtPk1k
bCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vcm1h
bFBhZ2VQcmlvcml0eSk7Ci0gICAgQVNTRVJUKFJpbmctPlNoYXJlZCAhPSBOVUxMKTsKKyAgICBB
U1NFUlQoUHJvdG9jb2wtPlNoYXJlZCAhPSBOVUxMKTsKIAogI3ByYWdtYSB3YXJuaW5nKHB1c2gp
CiAjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDMwNSkKICNwcmFnbWEgd2FybmluZyhkaXNhYmxl
OiA0MzExKSAvLyAndHlwZSBjYXN0JyBwb2ludGVyIHRydW5jYXRpb24gZnJvbSAnYmxraWZfc3Jp
bmdfZW50cnlbMV0nIHRvICdsb25nJwotICAgIFNIQVJFRF9SSU5HX0lOSVQoUmluZy0+U2hhcmVk
KTsKLSAgICBGUk9OVF9SSU5HX0lOSVQoJlJpbmctPkZyb250LCBSaW5nLT5TaGFyZWQsIFBBR0Vf
U0laRSA8PCBSaW5nLT5PcmRlcik7CisgICAgU0hBUkVEX1JJTkdfSU5JVChQcm90b2NvbC0+U2hh
cmVkKTsKKyAgICBGUk9OVF9SSU5HX0lOSVQoJlByb3RvY29sLT5Gcm9udCwgUHJvdG9jb2wtPlNo
YXJlZCwgUEFHRV9TSVpFIDw8IFByb3RvY29sLT5PcmRlcik7CiAjcHJhZ21hIHdhcm5pbmcocG9w
KQogCi0gICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgKDF1bCA8PCBSaW5nLT5PcmRlcik7ICsr
SW5kZXgpIHsKKyAgICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCAoMXVsIDw8IFByb3RvY29sLT5P
cmRlcik7ICsrSW5kZXgpIHsKICAgICAgICAgc3RhdHVzID0gR3JhbnRlckdldChHcmFudGVyLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1tR2V0TWRsUGZuQXJyYXkoUmluZy0+TWRsKVtJ
bmRleF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTW1HZXRNZGxQZm5BcnJheShQcm90
b2NvbC0+TWRsKVtJbmRleF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJlJpbmctPkdyYW50c1tJbmRleF0pOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICZQcm90b2NvbC0+R3JhbnRzW0luZGV4XSk7CiAgICAgICAg
IGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKQogICAgICAgICAgICAgZ290byBmYWlsNTsKICAgICB9
CiAKLSAgICBSaW5nLT5DaGFubmVsID0gWEVOQlVTX0VWVENITihPcGVuLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICZSaW5nLT5FdnRjaG5JbnRlcmZhY2UsCisgICAgUHJvdG9j
b2wtPkNoYW5uZWwgPSBYRU5CVVNfRVZUQ0hOKE9wZW4sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJlByb3RvY29sLT5FdnRjaG5JbnRlcmZhY2UsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgWEVOQlVTX0VWVENITl9UWVBFX1VOQk9VTkQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUmluZ0ludGVycnVwdCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBSaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEZyb250ZW5kR2V0QmFja2VuZERvbWFpbihSaW5nLT5Gcm9udGVuZCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUHJvdG9jb2xJbnRlcnJ1cHQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUHJvdG9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRnJvbnRlbmRHZXRCYWNrZW5kRG9tYWluKFByb3RvY29sLT5Gcm9udGVuZCksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSk7CiAgICAgc3RhdHVzID0gU1RBVFVT
X05PX01FTU9SWTsKLSAgICBpZiAoUmluZy0+Q2hhbm5lbCA9PSBOVUxMKQorICAgIGlmIChQcm90
b2NvbC0+Q2hhbm5lbCA9PSBOVUxMKQogICAgICAgICBnb3RvIGZhaWw2OwogCiAgICAgWEVOQlVT
X0VWVENITihVbm1hc2ssCi0gICAgICAgICAgICAgICAgICAmUmluZy0+RXZ0Y2huSW50ZXJmYWNl
LAotICAgICAgICAgICAgICAgICAgUmluZy0+Q2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgICZQ
cm90b2NvbC0+RXZ0Y2huSW50ZXJmYWNlLAorICAgICAgICAgICAgICAgICAgUHJvdG9jb2wtPkNo
YW5uZWwsCiAgICAgICAgICAgICAgICAgICBGQUxTRSk7CiAKICAgICBzdGF0dXMgPSBYRU5CVVNf
REVCVUcoUmVnaXN0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZSaW5nLT5EZWJ1Z0lu
dGVyZmFjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgX19NT0RVTEVfXyJ8UklORyIsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgIFJpbmdEZWJ1Z0NhbGxiYWNrLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICBSaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmUmluZy0+RGVi
dWdDYWxsYmFjayk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICZQcm90b2NvbC0+RGVidWdJ
bnRlcmZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIF9fTU9EVUxFX18ifFBST1RPQ09M
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvdG9jb2xEZWJ1Z0NhbGxiYWNrLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICBQcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgJlByb3RvY29sLT5EZWJ1Z0NhbGxiYWNrKTsKICAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVz
KSkKICAgICAgICAgZ290byBmYWlsNzsKIAotICAgIFJpbmctPkNvbm5lY3RlZCA9IFRSVUU7Cisg
ICAgUHJvdG9jb2wtPkNvbm5lY3RlZCA9IFRSVUU7CiAgICAgcmV0dXJuIFNUQVRVU19TVUNDRVNT
OwogCiBmYWlsNzoKICAgICBFcnJvcigiZmFpbDdcbiIpOwogICAgIFhFTkJVU19FVlRDSE4oQ2xv
c2UsCi0gICAgICAgICAgICAgICAgICAmUmluZy0+RXZ0Y2huSW50ZXJmYWNlLAotICAgICAgICAg
ICAgICAgICAgUmluZy0+Q2hhbm5lbCk7Ci0gICAgUmluZy0+Q2hhbm5lbCA9IE5VTEw7CisgICAg
ICAgICAgICAgICAgICAmUHJvdG9jb2wtPkV2dGNobkludGVyZmFjZSwKKyAgICAgICAgICAgICAg
ICAgIFByb3RvY29sLT5DaGFubmVsKTsKKyAgICBQcm90b2NvbC0+Q2hhbm5lbCA9IE5VTEw7CiBm
YWlsNjoKICAgICBFcnJvcigiZmFpbDZcbiIpOwogZmFpbDU6CiAgICAgRXJyb3IoImZhaWw1XG4i
KTsKLSAgICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCAoMXVsIDw8IFJpbmctPk9yZGVyKTsgKytJ
bmRleCkgewotICAgICAgICBpZiAoUmluZy0+R3JhbnRzW0luZGV4XSA9PSBOVUxMKQorICAgIGZv
ciAoSW5kZXggPSAwOyBJbmRleCA8ICgxdWwgPDwgUHJvdG9jb2wtPk9yZGVyKTsgKytJbmRleCkg
eworICAgICAgICBpZiAoUHJvdG9jb2wtPkdyYW50c1tJbmRleF0gPT0gTlVMTCkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogCi0gICAgICAgIEdyYW50ZXJQdXQoR3JhbnRlciwgUmluZy0+R3JhbnRz
W0luZGV4XSk7Ci0gICAgICAgIFJpbmctPkdyYW50c1tJbmRleF0gPSBOVUxMOworICAgICAgICBH
cmFudGVyUHV0KEdyYW50ZXIsIFByb3RvY29sLT5HcmFudHNbSW5kZXhdKTsKKyAgICAgICAgUHJv
dG9jb2wtPkdyYW50c1tJbmRleF0gPSBOVUxMOwogICAgIH0KIAotICAgIFJ0bFplcm9NZW1vcnko
JlJpbmctPkZyb250LCBzaXplb2YoYmxraWZfZnJvbnRfcmluZ190KSk7CisgICAgUnRsWmVyb01l
bW9yeSgmUHJvdG9jb2wtPkZyb250LCBzaXplb2YoYmxraWZfZnJvbnRfcmluZ190KSk7CiAKLSAg
ICBfX0ZyZWVQYWdlcyhSaW5nLT5NZGwpOwotICAgIFJpbmctPlNoYXJlZCA9IE5VTEw7Ci0gICAg
UmluZy0+TWRsID0gTlVMTDsKKyAgICBfX0ZyZWVQYWdlcyhQcm90b2NvbC0+TWRsKTsKKyAgICBQ
cm90b2NvbC0+U2hhcmVkID0gTlVMTDsKKyAgICBQcm90b2NvbC0+TWRsID0gTlVMTDsKIAotICAg
IFJpbmctPk9yZGVyID0gMDsKKyAgICBQcm90b2NvbC0+T3JkZXIgPSAwOwogZmFpbDQ6CiAgICAg
RXJyb3IoImZhaWw0XG4iKTsKLSAgICBYRU5CVVNfREVCVUcoUmVsZWFzZSwgJlJpbmctPkRlYnVn
SW50ZXJmYWNlKTsKKyAgICBYRU5CVVNfREVCVUcoUmVsZWFzZSwgJlByb3RvY29sLT5EZWJ1Z0lu
dGVyZmFjZSk7CiBmYWlsMzoKICAgICBFcnJvcigiZmFpbDNcbiIpOwotICAgIFhFTkJVU19FVlRD
SE4oUmVsZWFzZSwgJlJpbmctPkV2dGNobkludGVyZmFjZSk7CisgICAgWEVOQlVTX0VWVENITihS
ZWxlYXNlLCAmUHJvdG9jb2wtPkV2dGNobkludGVyZmFjZSk7CiBmYWlsMjoKICAgICBFcnJvcigi
ZmFpbDJcbiIpOwotICAgIFhFTkJVU19TVE9SRShSZWxlYXNlLCAmUmluZy0+U3RvcmVJbnRlcmZh
Y2UpOworICAgIFhFTkJVU19TVE9SRShSZWxlYXNlLCAmUHJvdG9jb2wtPlN0b3JlSW50ZXJmYWNl
KTsKIGZhaWwxOgogICAgIEVycm9yKCJmYWlsMSAlMDh4XG4iLCBzdGF0dXMpOwogCi0gICAgUnRs
WmVyb01lbW9yeSgmUmluZy0+RGVidWdJbnRlcmZhY2UsCisgICAgUnRsWmVyb01lbW9yeSgmUHJv
dG9jb2wtPkRlYnVnSW50ZXJmYWNlLAogICAgICAgICAgICAgICAgICAgc2l6ZW9mKFhFTkJVU19E
RUJVR19JTlRFUkZBQ0UpKTsKLSAgICBSdGxaZXJvTWVtb3J5KCZSaW5nLT5FdnRjaG5JbnRlcmZh
Y2UsCisgICAgUnRsWmVyb01lbW9yeSgmUHJvdG9jb2wtPkV2dGNobkludGVyZmFjZSwKICAgICAg
ICAgICAgICAgICAgIHNpemVvZihYRU5CVVNfRVZUQ0hOX0lOVEVSRkFDRSkpOwotICAgIFJ0bFpl
cm9NZW1vcnkoJlJpbmctPlN0b3JlSW50ZXJmYWNlLAorICAgIFJ0bFplcm9NZW1vcnkoJlByb3Rv
Y29sLT5TdG9yZUludGVyZmFjZSwKICAgICAgICAgICAgICAgICAgIHNpemVvZihYRU5CVVNfU1RP
UkVfSU5URVJGQUNFKSk7CiAKICAgICByZXR1cm4gc3RhdHVzOwogfQogCiBOVFNUQVRVUwotUmlu
Z1N0b3JlV3JpdGUoCi0gICAgSU4gIFBYRU5WQkRfUklORyAgICBSaW5nLAorUHJvdG9jb2xTdG9y
ZVdyaXRlKAorICAgIElOICBQWEVOVkJEX1BST1RPQ09MICAgIFByb3RvY29sLAogICAgIElOICBQ
Vk9JRCAgICAgICAgICAgVHJhbnNhY3Rpb24KICAgICApCiB7Ci0gICAgUFhFTlZCRF9HUkFOVEVS
ICAgICBHcmFudGVyID0gRnJvbnRlbmRHZXRHcmFudGVyKFJpbmctPkZyb250ZW5kKTsKKyAgICBQ
WEVOVkJEX0dSQU5URVIgICAgIEdyYW50ZXIgPSBGcm9udGVuZEdldEdyYW50ZXIoUHJvdG9jb2wt
PkZyb250ZW5kKTsKICAgICBVTE9ORyAgICAgICAgICAgICAgIFBvcnQ7CiAgICAgTlRTVEFUVVMg
ICAgICAgICAgICBzdGF0dXM7CiAKLSAgICBpZiAoUmluZy0+T3JkZXIgPT0gMCkgeworICAgIGlm
IChQcm90b2NvbC0+T3JkZXIgPT0gMCkgewogICAgICAgICBzdGF0dXMgPSBYRU5CVVNfU1RPUkUo
UHJpbnRmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlJpbmctPlN0b3JlSW50ZXJm
YWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlByb3RvY29sLT5TdG9yZUludGVy
ZmFjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zYWN0aW9uLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgRnJvbnRlbmRHZXRGcm9udGVuZFBhdGgoUmluZy0+RnJv
bnRlbmQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJvbnRlbmRHZXRGcm9udGVu
ZFBhdGgoUHJvdG9jb2wtPkZyb250ZW5kKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJyaW5nLXJlZiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXUiLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR3JhbnRlclJlZmVyZW5jZShHcmFudGVyLCBSaW5nLT5H
cmFudHNbMF0pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyYW50ZXJSZWZlcmVu
Y2UoR3JhbnRlciwgUHJvdG9jb2wtPkdyYW50c1swXSkpOwogICAgICAgICBpZiAoIU5UX1NVQ0NF
U1Moc3RhdHVzKSkKICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CiAgICAgfSBlbHNlIHsKICAg
ICAgICAgVUxPTkcgICAgICAgICAgIEluZGV4OwogCiAgICAgICAgIHN0YXR1cyA9IFhFTkJVU19T
VE9SRShQcmludGYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUmluZy0+U3RvcmVJ
bnRlcmZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUHJvdG9jb2wtPlN0b3Jl
SW50ZXJmYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNhY3Rpb24sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcm9udGVuZEdldEZyb250ZW5kUGF0aChSaW5n
LT5Gcm9udGVuZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcm9udGVuZEdldEZy
b250ZW5kUGF0aChQcm90b2NvbC0+RnJvbnRlbmQpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgInJpbmctcGFnZS1vcmRlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
JXUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmluZy0+T3JkZXIpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUHJvdG9jb2wtPk9yZGVyKTsKICAgICAgICAgaWYgKCFO
VF9TVUNDRVNTKHN0YXR1cykpCiAgICAgICAgICAgICByZXR1cm4gc3RhdHVzOwogCi0gICAgICAg
IGZvciAoSW5kZXggPSAwOyBJbmRleCA8ICgxdWwgPDwgUmluZy0+T3JkZXIpOyArK0luZGV4KSB7
CisgICAgICAgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8ICgxdWwgPDwgUHJvdG9jb2wtPk9yZGVy
KTsgKytJbmRleCkgewogICAgICAgICAgICAgQ0hBUiAgICAgICAgTmFtZVtNQVhfTkFNRV9MRU4r
MV07CiAKICAgICAgICAgICAgIHN0YXR1cyA9IFJ0bFN0cmluZ0NjaFByaW50ZkEoTmFtZSwKQEAg
LTE4NzUsMzQgKzE4NzUsMzQgQEAgUmluZ1N0b3JlV3JpdGUoCiAgICAgICAgICAgICAgICAgcmV0
dXJuIHN0YXR1czsKIAogICAgICAgICAgICAgc3RhdHVzID0gWEVOQlVTX1NUT1JFKFByaW50ZiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUmluZy0+U3RvcmVJbnRlcmZhY2Us
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlByb3RvY29sLT5TdG9yZUludGVy
ZmFjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2FjdGlvbiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcm9udGVuZEdldEZyb250ZW5kUGF0aChS
aW5nLT5Gcm9udGVuZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJvbnRl
bmRHZXRGcm9udGVuZFBhdGgoUHJvdG9jb2wtPkZyb250ZW5kKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICIldSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JhbnRlclJlZmVyZW5j
ZShHcmFudGVyLCBSaW5nLT5HcmFudHNbSW5kZXhdKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR3JhbnRlclJlZmVyZW5jZShHcmFudGVyLCBQcm90b2NvbC0+R3JhbnRzW0lu
ZGV4XSkpOwogICAgICAgICAgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIHN0YXR1czsKICAgICAgICAgfQogICAgIH0KIAogICAgIHN0YXR1cyA9IFhF
TkJVU19TVE9SRShQcmludGYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZSaW5nLT5TdG9y
ZUludGVyZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJlByb3RvY29sLT5TdG9yZUlu
dGVyZmFjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNhY3Rpb24sCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgIEZyb250ZW5kR2V0RnJvbnRlbmRQYXRoKFJpbmctPkZyb250ZW5k
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRnJvbnRlbmRHZXRGcm9udGVuZFBhdGgoUHJv
dG9jb2wtPkZyb250ZW5kKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInByb3RvY29sIiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgWEVOX0lPX1BST1RPX0FCSSk7CiAgICAgaWYgKCFO
VF9TVUNDRVNTKHN0YXR1cykpCiAgICAgICAgIHJldHVybiBzdGF0dXM7CiAKICAgICBQb3J0ID0g
WEVOQlVTX0VWVENITihHZXRQb3J0LAotICAgICAgICAgICAgICAgICAgICAgICAgICZSaW5nLT5F
dnRjaG5JbnRlcmZhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgUmluZy0+Q2hhbm5lbCk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgJlByb3RvY29sLT5FdnRjaG5JbnRlcmZhY2UsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgUHJvdG9jb2wtPkNoYW5uZWwpOwogCiAgICAgc3RhdHVz
ID0gWEVOQlVTX1NUT1JFKFByaW50ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJlJpbmct
PlN0b3JlSW50ZXJmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmUHJvdG9jb2wtPlN0
b3JlSW50ZXJmYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2FjdGlvbiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgRnJvbnRlbmRHZXRGcm9udGVuZFBhdGgoUmluZy0+RnJv
bnRlbmQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBGcm9udGVuZEdldEZyb250ZW5kUGF0
aChQcm90b2NvbC0+RnJvbnRlbmQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiZXZlbnQt
Y2hhbm5lbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICIldSIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFBvcnQpOwpAQCAtMTkxMyw0OSArMTkxMyw0OSBAQCBSaW5nU3RvcmVXcml0
ZSgKIH0KIAogVk9JRAotUmluZ0VuYWJsZSgKLSAgICBJTiAgUFhFTlZCRF9SSU5HICAgIFJpbmcK
K1Byb3RvY29sRW5hYmxlKAorICAgIElOICBQWEVOVkJEX1BST1RPQ09MICAgIFByb3RvY29sCiAg
ICAgKQogewotICAgIEFTU0VSVChSaW5nLT5FbmFibGVkID09IEZBTFNFKTsKLSAgICBSaW5nLT5F
bmFibGVkID0gVFJVRTsKKyAgICBBU1NFUlQoUHJvdG9jb2wtPkVuYWJsZWQgPT0gRkFMU0UpOwor
ICAgIFByb3RvY29sLT5FbmFibGVkID0gVFJVRTsKIAogICAgIFhFTkJVU19FVlRDSE4oVHJpZ2dl
ciwKLSAgICAgICAgICAgICAgICAgICZSaW5nLT5FdnRjaG5JbnRlcmZhY2UsCi0gICAgICAgICAg
ICAgICAgICBSaW5nLT5DaGFubmVsKTsKKyAgICAgICAgICAgICAgICAgICZQcm90b2NvbC0+RXZ0
Y2huSW50ZXJmYWNlLAorICAgICAgICAgICAgICAgICAgUHJvdG9jb2wtPkNoYW5uZWwpOwogfQog
CiBWT0lECi1SaW5nRGlzYWJsZSgKLSAgICBJTiAgUFhFTlZCRF9SSU5HICAgIFJpbmcKK1Byb3Rv
Y29sRGlzYWJsZSgKKyAgICBJTiAgUFhFTlZCRF9QUk9UT0NPTCAgICBQcm90b2NvbAogICAgICkK
IHsKICAgICBVTE9ORyAgICAgICAgICAgICAgIENvdW50OwogICAgIEtJUlFMICAgICAgICAgICAg
ICAgSXJxbDsKLSAgICBQWEVOVkJEX1RBUkdFVCAgICAgIFRhcmdldCA9IEZyb250ZW5kR2V0VGFy
Z2V0KFJpbmctPkZyb250ZW5kKTsKKyAgICBQWEVOVkJEX1RBUkdFVCAgICAgIFRhcmdldCA9IEZy
b250ZW5kR2V0VGFyZ2V0KFByb3RvY29sLT5Gcm9udGVuZCk7CiAgICAgUFhFTlZCRF9BREFQVEVS
ICAgICBBZGFwdGVyID0gVGFyZ2V0R2V0QWRhcHRlcihUYXJnZXQpOwogCi0gICAgQVNTRVJUKFJp
bmctPkVuYWJsZWQgPT0gVFJVRSk7Ci0gICAgUmluZy0+RW5hYmxlZCA9IEZBTFNFOworICAgIEFT
U0VSVChQcm90b2NvbC0+RW5hYmxlZCA9PSBUUlVFKTsKKyAgICBQcm90b2NvbC0+RW5hYmxlZCA9
IEZBTFNFOwogCiAgICAgLy8gcG9sbCByaW5nIGFuZCBzZW5kIGV2ZW50IGNoYW5uZWwgbm90aWZp
Y2F0aW9uIGV2ZXJ5IDFtcyAoZm9yIHVwIHRvIDMgbWludXRlcykKICAgICBDb3VudCA9IDA7Ci0g
ICAgd2hpbGUgKFF1ZXVlQ291bnQoJlJpbmctPlN1Ym1pdHRlZFJlcXMpKSB7CisgICAgd2hpbGUg
KFF1ZXVlQ291bnQoJlByb3RvY29sLT5TdWJtaXR0ZWRSZXFzKSkgewogICAgICAgICBpZiAoQ291
bnQgPiAxODAwMDApCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgS2VSYWlzZUlycWwoRElT
UEFUQ0hfTEVWRUwsICZJcnFsKTsKLSAgICAgICAgUmluZ1BvbGwoUmluZyk7CisgICAgICAgIFBy
b3RvY29sUG9sbChQcm90b2NvbCk7CiAgICAgICAgIEtlTG93ZXJJcnFsKElycWwpOwogICAgICAg
ICBYRU5CVVNfRVZUQ0hOKFNlbmQsCi0gICAgICAgICAgICAgICAgICAgICAgJlJpbmctPkV2dGNo
bkludGVyZmFjZSwKLSAgICAgICAgICAgICAgICAgICAgICBSaW5nLT5DaGFubmVsKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAmUHJvdG9jb2wtPkV2dGNobkludGVyZmFjZSwKKyAgICAgICAgICAg
ICAgICAgICAgICBQcm90b2NvbC0+Q2hhbm5lbCk7CiAgICAgICAgIFN0b3JQb3J0U3RhbGxFeGVj
dXRpb24oMTAwMCk7ICAgLy8gMTAwMCBtaWNyby1zZWNvbmRzCiAgICAgICAgICsrQ291bnQ7CiAg
ICAgfQogCiAgICAgVmVyYm9zZSgiVGFyZ2V0WyVkXSA6ICV1IFN1Ym1pdHRlZCByZXF1ZXN0cyBs
ZWZ0ICgldSBpdGVycmF0aW9ucylcbiIsCi0gICAgICAgICAgICBGcm9udGVuZEdldFRhcmdldElk
KFJpbmctPkZyb250ZW5kKSwKLSAgICAgICAgICAgIFF1ZXVlQ291bnQoJlJpbmctPlN1Ym1pdHRl
ZFJlcXMpLAorICAgICAgICAgICAgRnJvbnRlbmRHZXRUYXJnZXRJZChQcm90b2NvbC0+RnJvbnRl
bmQpLAorICAgICAgICAgICAgUXVldWVDb3VudCgmUHJvdG9jb2wtPlN1Ym1pdHRlZFJlcXMpLAog
ICAgICAgICAgICAgQ291bnQpOwogCiAgICAgLy8gRmFpbCBQcmVwYXJlZFJlcXMKQEAgLTE5NjUs
NyArMTk2NSw3IEBAIFJpbmdEaXNhYmxlKAogICAgICAgICBQWEVOVkJEX1JFUVVFU1QgICAgIFJl
cXVlc3Q7CiAgICAgICAgIFBMSVNUX0VOVFJZICAgICAgICAgTGlzdEVudHJ5OwogCi0gICAgICAg
IExpc3RFbnRyeSA9IFF1ZXVlUG9wKCZSaW5nLT5QcmVwYXJlZFJlcXMpOworICAgICAgICBMaXN0
RW50cnkgPSBRdWV1ZVBvcCgmUHJvdG9jb2wtPlByZXBhcmVkUmVxcyk7CiAgICAgICAgIGlmIChM
aXN0RW50cnkgPT0gTlVMTCkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBSZXF1ZXN0ID0g
Q09OVEFJTklOR19SRUNPUkQoTGlzdEVudHJ5LCBYRU5WQkRfUkVRVUVTVCwgTGlzdEVudHJ5KTsK
QEAgLTE5NzUsNyArMTk3NSw3IEBAIFJpbmdEaXNhYmxlKAogICAgICAgICBTcmItPlNyYlN0YXR1
cyA9IFNSQl9TVEFUVVNfQUJPUlRFRDsKICAgICAgICAgU3JiLT5TY3NpU3RhdHVzID0gMHg0MDsg
Ly8gU0NTSV9BQk9SVEVECiAKLSAgICAgICAgUmluZ1B1dFJlcXVlc3QoUmluZywgUmVxdWVzdCk7
CisgICAgICAgIFByb3RvY29sUHV0UmVxdWVzdChQcm90b2NvbCwgUmVxdWVzdCk7CiAKICAgICAg
ICAgaWYgKEludGVybG9ja2VkRGVjcmVtZW50KCZTcmJFeHQtPlJlcXVlc3RDb3VudCkgPT0gMCkK
ICAgICAgICAgICAgIEFkYXB0ZXJDb21wbGV0ZVNyYihBZGFwdGVyLCBTcmJFeHQpOwpAQCAtMTk4
Myw5MSArMTk4Myw5MSBAQCBSaW5nRGlzYWJsZSgKIH0KIAogVk9JRAotUmluZ0Rpc2Nvbm5lY3Qo
Ci0gICAgSU4gIFBYRU5WQkRfUklORyAgICBSaW5nCitQcm90b2NvbERpc2Nvbm5lY3QoCisgICAg
SU4gIFBYRU5WQkRfUFJPVE9DT0wgICAgUHJvdG9jb2wKICAgICApCiB7Ci0gICAgUFhFTlZCRF9H
UkFOVEVSICAgICBHcmFudGVyID0gRnJvbnRlbmRHZXRHcmFudGVyKFJpbmctPkZyb250ZW5kKTsK
KyAgICBQWEVOVkJEX0dSQU5URVIgICAgIEdyYW50ZXIgPSBGcm9udGVuZEdldEdyYW50ZXIoUHJv
dG9jb2wtPkZyb250ZW5kKTsKICAgICBVTE9ORyAgICAgICAgICAgICAgIEluZGV4OwogCi0gICAg
QVNTRVJUM1UoUmluZy0+U3VibWl0dGVkLCA9PSwgUmluZy0+UmVjZWl2ZWQpOwotICAgIEFTU0VS
VChSaW5nLT5Db25uZWN0ZWQpOwotICAgIFJpbmctPkNvbm5lY3RlZCA9IEZBTFNFOworICAgIEFT
U0VSVDNVKFByb3RvY29sLT5TdWJtaXR0ZWQsID09LCBQcm90b2NvbC0+UmVjZWl2ZWQpOworICAg
IEFTU0VSVChQcm90b2NvbC0+Q29ubmVjdGVkKTsKKyAgICBQcm90b2NvbC0+Q29ubmVjdGVkID0g
RkFMU0U7CiAKICAgICBYRU5CVVNfREVCVUcoRGVyZWdpc3RlciwKLSAgICAgICAgICAgICAgICAg
JlJpbmctPkRlYnVnSW50ZXJmYWNlLAotICAgICAgICAgICAgICAgICBSaW5nLT5EZWJ1Z0NhbGxi
YWNrKTsKLSAgICBSaW5nLT5EZWJ1Z0NhbGxiYWNrID0gTlVMTDsKKyAgICAgICAgICAgICAgICAg
JlByb3RvY29sLT5EZWJ1Z0ludGVyZmFjZSwKKyAgICAgICAgICAgICAgICAgUHJvdG9jb2wtPkRl
YnVnQ2FsbGJhY2spOworICAgIFByb3RvY29sLT5EZWJ1Z0NhbGxiYWNrID0gTlVMTDsKIAogICAg
IFhFTkJVU19FVlRDSE4oQ2xvc2UsCi0gICAgICAgICAgICAgICAgICAmUmluZy0+RXZ0Y2huSW50
ZXJmYWNlLAotICAgICAgICAgICAgICAgICAgUmluZy0+Q2hhbm5lbCk7Ci0gICAgUmluZy0+Q2hh
bm5lbCA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAmUHJvdG9jb2wtPkV2dGNobkludGVyZmFj
ZSwKKyAgICAgICAgICAgICAgICAgIFByb3RvY29sLT5DaGFubmVsKTsKKyAgICBQcm90b2NvbC0+
Q2hhbm5lbCA9IE5VTEw7CiAKLSAgICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCAoMXVsIDw8IFJp
bmctPk9yZGVyKTsgKytJbmRleCkgewotICAgICAgICBpZiAoUmluZy0+R3JhbnRzW0luZGV4XSA9
PSBOVUxMKQorICAgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8ICgxdWwgPDwgUHJvdG9jb2wtPk9y
ZGVyKTsgKytJbmRleCkgeworICAgICAgICBpZiAoUHJvdG9jb2wtPkdyYW50c1tJbmRleF0gPT0g
TlVMTCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIEdyYW50ZXJQdXQoR3JhbnRl
ciwgUmluZy0+R3JhbnRzW0luZGV4XSk7Ci0gICAgICAgIFJpbmctPkdyYW50c1tJbmRleF0gPSBO
VUxMOworICAgICAgICBHcmFudGVyUHV0KEdyYW50ZXIsIFByb3RvY29sLT5HcmFudHNbSW5kZXhd
KTsKKyAgICAgICAgUHJvdG9jb2wtPkdyYW50c1tJbmRleF0gPSBOVUxMOwogICAgIH0KIAotICAg
IFJ0bFplcm9NZW1vcnkoJlJpbmctPkZyb250LCBzaXplb2YoYmxraWZfZnJvbnRfcmluZ190KSk7
CisgICAgUnRsWmVyb01lbW9yeSgmUHJvdG9jb2wtPkZyb250LCBzaXplb2YoYmxraWZfZnJvbnRf
cmluZ190KSk7CiAKLSAgICBfX0ZyZWVQYWdlcyhSaW5nLT5NZGwpOwotICAgIFJpbmctPlNoYXJl
ZCA9IE5VTEw7Ci0gICAgUmluZy0+TWRsID0gTlVMTDsKKyAgICBfX0ZyZWVQYWdlcyhQcm90b2Nv
bC0+TWRsKTsKKyAgICBQcm90b2NvbC0+U2hhcmVkID0gTlVMTDsKKyAgICBQcm90b2NvbC0+TWRs
ID0gTlVMTDsKIAotICAgIFJpbmctPk9yZGVyID0gMDsKKyAgICBQcm90b2NvbC0+T3JkZXIgPSAw
OwogCi0gICAgWEVOQlVTX0RFQlVHKFJlbGVhc2UsICZSaW5nLT5EZWJ1Z0ludGVyZmFjZSk7Ci0g
ICAgWEVOQlVTX0VWVENITihSZWxlYXNlLCAmUmluZy0+RXZ0Y2huSW50ZXJmYWNlKTsKLSAgICBY
RU5CVVNfU1RPUkUoUmVsZWFzZSwgJlJpbmctPlN0b3JlSW50ZXJmYWNlKTsKKyAgICBYRU5CVVNf
REVCVUcoUmVsZWFzZSwgJlByb3RvY29sLT5EZWJ1Z0ludGVyZmFjZSk7CisgICAgWEVOQlVTX0VW
VENITihSZWxlYXNlLCAmUHJvdG9jb2wtPkV2dGNobkludGVyZmFjZSk7CisgICAgWEVOQlVTX1NU
T1JFKFJlbGVhc2UsICZQcm90b2NvbC0+U3RvcmVJbnRlcmZhY2UpOwogCi0gICAgUnRsWmVyb01l
bW9yeSgmUmluZy0+RGVidWdJbnRlcmZhY2UsCisgICAgUnRsWmVyb01lbW9yeSgmUHJvdG9jb2wt
PkRlYnVnSW50ZXJmYWNlLAogICAgICAgICAgICAgICAgICAgc2l6ZW9mKFhFTkJVU19ERUJVR19J
TlRFUkZBQ0UpKTsKLSAgICBSdGxaZXJvTWVtb3J5KCZSaW5nLT5FdnRjaG5JbnRlcmZhY2UsCisg
ICAgUnRsWmVyb01lbW9yeSgmUHJvdG9jb2wtPkV2dGNobkludGVyZmFjZSwKICAgICAgICAgICAg
ICAgICAgIHNpemVvZihYRU5CVVNfRVZUQ0hOX0lOVEVSRkFDRSkpOwotICAgIFJ0bFplcm9NZW1v
cnkoJlJpbmctPlN0b3JlSW50ZXJmYWNlLAorICAgIFJ0bFplcm9NZW1vcnkoJlByb3RvY29sLT5T
dG9yZUludGVyZmFjZSwKICAgICAgICAgICAgICAgICAgIHNpemVvZihYRU5CVVNfU1RPUkVfSU5U
RVJGQUNFKSk7CiAKLSAgICBSaW5nLT5FdmVudHMgPSAwOwotICAgIFJpbmctPkRwY3MgPSAwOwot
ICAgIFJpbmctPlN1Ym1pdHRlZCA9IDA7Ci0gICAgUmluZy0+UmVjZWl2ZWQgPSAwOworICAgIFBy
b3RvY29sLT5FdmVudHMgPSAwOworICAgIFByb3RvY29sLT5EcGNzID0gMDsKKyAgICBQcm90b2Nv
bC0+U3VibWl0dGVkID0gMDsKKyAgICBQcm90b2NvbC0+UmVjZWl2ZWQgPSAwOwogfQogCiBWT0lE
Ci1SaW5nVHJpZ2dlcigKLSAgICBJTiAgUFhFTlZCRF9SSU5HICAgIFJpbmcKK1Byb3RvY29sVHJp
Z2dlcigKKyAgICBJTiAgUFhFTlZCRF9QUk9UT0NPTCAgICBQcm90b2NvbAogICAgICkKIHsKLSAg
ICBpZiAoIVJpbmctPkVuYWJsZWQpCisgICAgaWYgKCFQcm90b2NvbC0+RW5hYmxlZCkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgWEVOQlVTX0VWVENITihUcmlnZ2VyLAotICAgICAgICAgICAgICAg
ICAgJlJpbmctPkV2dGNobkludGVyZmFjZSwKLSAgICAgICAgICAgICAgICAgIFJpbmctPkNoYW5u
ZWwpOworICAgICAgICAgICAgICAgICAgJlByb3RvY29sLT5FdnRjaG5JbnRlcmZhY2UsCisgICAg
ICAgICAgICAgICAgICBQcm90b2NvbC0+Q2hhbm5lbCk7CiB9CiAKIEJPT0xFQU4KLVJpbmdRdWV1
ZVJlcXVlc3QoCi0gICAgSU4gIFBYRU5WQkRfUklORyAgICBSaW5nLAorUHJvdG9jb2xRdWV1ZVJl
cXVlc3QoCisgICAgSU4gIFBYRU5WQkRfUFJPVE9DT0wgICAgUHJvdG9jb2wsCiAgICAgSU4gIFBY
RU5WQkRfU1JCRVhUICBTcmJFeHQKICAgICApCiB7CiAgICAgUFNDU0lfUkVRVUVTVF9CTE9DSyBT
cmIgPSBTcmJFeHQtPlNyYjsKIAotICAgIGlmICghUmluZy0+RW5hYmxlZCkKKyAgICBpZiAoIVBy
b3RvY29sLT5FbmFibGVkKQogICAgICAgICBnb3RvIGZhaWwxOwogCi0gICAgaWYgKCFSaW5nUHJl
cGFyZVJlcXVlc3QoUmluZywgU3JiRXh0KSkKKyAgICBpZiAoIVByb3RvY29sUHJlcGFyZVJlcXVl
c3QoUHJvdG9jb2wsIFNyYkV4dCkpCiAgICAgICAgIGdvdG8gZmFpbDI7CiAKLSAgICBpZiAoUmlu
Z1N1Ym1pdFJlcXVlc3RzKFJpbmcpKSB7CisgICAgaWYgKFByb3RvY29sU3VibWl0UmVxdWVzdHMo
UHJvdG9jb2wpKSB7CiAgICAgICAgIC8vIG1vcmUgcHJlcGFyZWQtcmVxcyB0byBzdWJtaXQKLSAg
ICAgICAgaWYgKEtlSW5zZXJ0UXVldWVEcGMoJlJpbmctPkRwYywgTlVMTCwgTlVMTCkpCi0gICAg
ICAgICAgICArK1JpbmctPkRwY3M7CisgICAgICAgIGlmIChLZUluc2VydFF1ZXVlRHBjKCZQcm90
b2NvbC0+RHBjLCBOVUxMLCBOVUxMKSkKKyAgICAgICAgICAgICsrUHJvdG9jb2wtPkRwY3M7CiAg
ICAgfQogCiAgICAgcmV0dXJuIFRSVUU7CkBAIC0yMDc5LDE3ICsyMDc5LDE3IEBAIGZhaWwxOgog
fQogCiBWT0lECi1SaW5nUXVldWVTaHV0ZG93bigKLSAgICBJTiAgUFhFTlZCRF9SSU5HICAgIFJp
bmcsCitQcm90b2NvbFF1ZXVlU2h1dGRvd24oCisgICAgSU4gIFBYRU5WQkRfUFJPVE9DT0wgICAg
UHJvdG9jb2wsCiAgICAgSU4gIFBYRU5WQkRfU1JCRVhUICBTcmJFeHQKICAgICApCiB7Ci0gICAg
UXVldWVBcHBlbmQoJlJpbmctPlNodXRkb3duU3JicywKKyAgICBRdWV1ZUFwcGVuZCgmUHJvdG9j
b2wtPlNodXRkb3duU3JicywKICAgICAgICAgICAgICAgICAmU3JiRXh0LT5MaXN0RW50cnkpOwog
Ci0gICAgaWYgKCFSaW5nLT5FbmFibGVkKQorICAgIGlmICghUHJvdG9jb2wtPkVuYWJsZWQpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGlmIChLZUluc2VydFF1ZXVlRHBjKCZSaW5nLT5EcGMsIE5V
TEwsIE5VTEwpKQotCSAgICArK1JpbmctPkRwY3M7CisgICAgaWYgKEtlSW5zZXJ0UXVldWVEcGMo
JlByb3RvY29sLT5EcGMsIE5VTEwsIE5VTEwpKQorCSAgICArK1Byb3RvY29sLT5EcGNzOwogfQpk
aWZmIC0tZ2l0IGEvc3JjL3hlbnZiZC9yaW5nLmggYi9zcmMveGVudmJkL3Byb3RvY29sLmgKc2lt
aWxhcml0eSBpbmRleCA2NyUKcmVuYW1lIGZyb20gc3JjL3hlbnZiZC9yaW5nLmgKcmVuYW1lIHRv
IHNyYy94ZW52YmQvcHJvdG9jb2wuaAppbmRleCA5YjhhNTg3Li4zMTI2ZTE5IDEwMDY0NAotLS0g
YS9zcmMveGVudmJkL3JpbmcuaAorKysgYi9zcmMveGVudmJkL3Byb3RvY29sLmgKQEAgLTI5LDY2
ICsyOSw2NiBAQAogICogU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBfWEVOVkJEX1JJTkdf
SAotI2RlZmluZSBfWEVOVkJEX1JJTkdfSAorI2lmbmRlZiBfWEVOVkJEX1BST1RPQ09MX0gKKyNk
ZWZpbmUgX1hFTlZCRF9QUk9UT0NPTF9ICiAKLXR5cGVkZWYgc3RydWN0IF9YRU5WQkRfUklORyBY
RU5WQkRfUklORywgKlBYRU5WQkRfUklORzsKK3R5cGVkZWYgc3RydWN0IF9YRU5WQkRfUFJPVE9D
T0wgWEVOVkJEX1BST1RPQ09MLCAqUFhFTlZCRF9QUk9UT0NPTDsKIAogI2luY2x1ZGUgImZyb250
ZW5kLmgiCiAjaW5jbHVkZSAic3JiZXh0LmgiCiAKIGV4dGVybiBOVFNUQVRVUwotUmluZ0NyZWF0
ZSgKK1Byb3RvY29sQ3JlYXRlKAogICAgIElOICBQWEVOVkJEX0ZST05URU5EICAgIEZyb250ZW5k
LAotICAgIE9VVCBQWEVOVkJEX1JJTkcqICAgICAgIFJpbmcKKyAgICBPVVQgUFhFTlZCRF9QUk9U
T0NPTCogICBQcm90b2NvbAogICAgICk7CiAKIGV4dGVybiBWT0lECi1SaW5nRGVzdHJveSgKLSAg
ICBJTiAgUFhFTlZCRF9SSU5HICAgIFJpbmcKK1Byb3RvY29sRGVzdHJveSgKKyAgICBJTiAgUFhF
TlZCRF9QUk9UT0NPTCAgICBQcm90b2NvbAogICAgICk7CiAKIGV4dGVybiBOVFNUQVRVUwotUmlu
Z0Nvbm5lY3QoCi0gICAgSU4gIFBYRU5WQkRfUklORyAgICBSaW5nCitQcm90b2NvbENvbm5lY3Qo
CisgICAgSU4gIFBYRU5WQkRfUFJPVE9DT0wgICAgUHJvdG9jb2wKICAgICApOwogCiBleHRlcm4g
TlRTVEFUVVMKLVJpbmdTdG9yZVdyaXRlKAotICAgIElOICBQWEVOVkJEX1JJTkcgICAgUmluZywK
LSAgICBJTiAgUFZPSUQgICAgICAgICAgIFRyYW5zYWN0aW9uCitQcm90b2NvbFN0b3JlV3JpdGUo
CisgICAgSU4gIFBYRU5WQkRfUFJPVE9DT0wgICAgUHJvdG9jb2wsCisgICAgSU4gIFBWT0lEICAg
ICAgICAgICAgICAgVHJhbnNhY3Rpb24KICAgICApOwogCiBleHRlcm4gVk9JRAotUmluZ0VuYWJs
ZSgKLSAgICBJTiAgUFhFTlZCRF9SSU5HICAgIFJpbmcKK1Byb3RvY29sRW5hYmxlKAorICAgIElO
ICBQWEVOVkJEX1BST1RPQ09MICAgIFByb3RvY29sCiAgICAgKTsKIAogZXh0ZXJuIFZPSUQKLVJp
bmdEaXNhYmxlKAotICAgIElOICBQWEVOVkJEX1JJTkcgICAgUmluZworUHJvdG9jb2xEaXNhYmxl
KAorICAgIElOICBQWEVOVkJEX1BST1RPQ09MICAgIFByb3RvY29sCiAgICAgKTsKIAogZXh0ZXJu
IFZPSUQKLVJpbmdEaXNjb25uZWN0KAotICAgIElOICBQWEVOVkJEX1JJTkcgICAgUmluZworUHJv
dG9jb2xEaXNjb25uZWN0KAorICAgIElOICBQWEVOVkJEX1BST1RPQ09MICAgIFByb3RvY29sCiAg
ICAgKTsKIAogZXh0ZXJuIFZPSUQKLVJpbmdUcmlnZ2VyKAotICAgIElOICBQWEVOVkJEX1JJTkcg
ICAgUmluZworUHJvdG9jb2xUcmlnZ2VyKAorICAgIElOICBQWEVOVkJEX1BST1RPQ09MICAgIFBy
b3RvY29sCiAgICAgKTsKIAogZXh0ZXJuIEJPT0xFQU4KLVJpbmdRdWV1ZVJlcXVlc3QoCi0gICAg
SU4gIFBYRU5WQkRfUklORyAgICBSaW5nLAotICAgIElOICBQWEVOVkJEX1NSQkVYVCAgU3JiRXh0
CitQcm90b2NvbFF1ZXVlUmVxdWVzdCgKKyAgICBJTiAgUFhFTlZCRF9QUk9UT0NPTCAgICBQcm90
b2NvbCwKKyAgICBJTiAgUFhFTlZCRF9TUkJFWFQgICAgICBTcmJFeHQKICAgICApOwogCiBleHRl
cm4gVk9JRAotUmluZ1F1ZXVlU2h1dGRvd24oCi0gICAgSU4gIFBYRU5WQkRfUklORyAgICBSaW5n
LAotICAgIElOICBQWEVOVkJEX1NSQkVYVCAgU3JiRXh0CitQcm90b2NvbFF1ZXVlU2h1dGRvd24o
CisgICAgSU4gIFBYRU5WQkRfUFJPVE9DT0wgICAgUHJvdG9jb2wsCisgICAgSU4gIFBYRU5WQkRf
U1JCRVhUICAgICAgU3JiRXh0CiAgICAgKTsKIAotI2VuZGlmIC8vIF9YRU5WQkRfUklOR19ICisj
ZW5kaWYgLy8gX1hFTlZCRF9QUk9UT0NPTF9ICmRpZmYgLS1naXQgYS9zcmMveGVudmJkL3Rhcmdl
dC5jIGIvc3JjL3hlbnZiZC90YXJnZXQuYwppbmRleCA1NGZmYjkzLi5mNjUxOWUzIDEwMDY0NAot
LS0gYS9zcmMveGVudmJkL3RhcmdldC5jCisrKyBiL3NyYy94ZW52YmQvdGFyZ2V0LmMKQEAgLTIx
Nyw3ICsyMTcsNyBAQCBUYXJnZXRSZWFkV3JpdGUoCiB7CiAgICAgUFhFTlZCRF9TUkJFWFQgICAg
ICAgICAgU3JiRXh0ID0gU3JiLT5TcmJFeHRlbnNpb247CiAgICAgUFhFTlZCRF9GUk9OVEVORCAg
ICAgICAgRnJvbnRlbmQgPSBUYXJnZXQtPkZyb250ZW5kOwotICAgIFBYRU5WQkRfUklORyAgICAg
ICAgICAgIFJpbmcgPSBGcm9udGVuZEdldFJpbmcoRnJvbnRlbmQpOworICAgIFBYRU5WQkRfUFJP
VE9DT0wgICAgICAgIFByb3RvY29sID0gRnJvbnRlbmRHZXRQcm90b2NvbChGcm9udGVuZCk7CiAg
ICAgVUxPTkc2NCAgICAgICAgICAgICAgICAgU2VjdG9yQ291bnQ7CiAgICAgVUxPTkc2NCAgICAg
ICAgICAgICAgICAgU2VjdG9yU3RhcnQ7CiAgICAgVUxPTkcgICAgICAgICAgICAgICAgICAgTnVt
U2VjdG9yczsKQEAgLTI0Miw3ICsyNDIsNyBAQCBUYXJnZXRSZWFkV3JpdGUoCiAgICAgICAgIGdv
dG8gZmFpbDQ7CiAKICAgICBTcmItPlNyYlN0YXR1cyA9IFNSQl9TVEFUVVNfUEVORElORzsKLSAg
ICByZXR1cm4gUmluZ1F1ZXVlUmVxdWVzdChSaW5nLCBTcmJFeHQpOworICAgIHJldHVybiBQcm90
b2NvbFF1ZXVlUmVxdWVzdChQcm90b2NvbCwgU3JiRXh0KTsKIAogZmFpbDQ6CiAgICAgIEVycm9y
KCJmYWlsNFxuIik7CkBAIC0yNjMsNyArMjYzLDcgQEAgVGFyZ2V0U3luY0NhY2hlKAogewogICAg
IFBYRU5WQkRfU1JCRVhUICAgICAgICAgIFNyYkV4dCA9IFNyYi0+U3JiRXh0ZW5zaW9uOwogICAg
IFBYRU5WQkRfRlJPTlRFTkQgICAgICAgIEZyb250ZW5kID0gVGFyZ2V0LT5Gcm9udGVuZDsKLSAg
ICBQWEVOVkJEX1JJTkcgICAgICAgICAgICBSaW5nID0gRnJvbnRlbmRHZXRSaW5nKEZyb250ZW5k
KTsKKyAgICBQWEVOVkJEX1BST1RPQ09MICAgICAgICBQcm90b2NvbCA9IEZyb250ZW5kR2V0UHJv
dG9jb2woRnJvbnRlbmQpOwogCiAgICAgU3JiLT5TcmJTdGF0dXMgPSBTUkJfU1RBVFVTX0VSUk9S
OwogICAgIGlmICghRnJvbnRlbmRHZXRDb25uZWN0ZWQoRnJvbnRlbmQpKQpAQCAtMjc4LDcgKzI3
OCw3IEBAIFRhcmdldFN5bmNDYWNoZSgKICAgICAgICAgZ290byBzdWNjZWVkOwogCiAgICAgU3Ji
LT5TcmJTdGF0dXMgPSBTUkJfU1RBVFVTX1BFTkRJTkc7Ci0gICAgcmV0dXJuIFJpbmdRdWV1ZVJl
cXVlc3QoUmluZywgU3JiRXh0KTsKKyAgICByZXR1cm4gUHJvdG9jb2xRdWV1ZVJlcXVlc3QoUHJv
dG9jb2wsIFNyYkV4dCk7CiAKIHN1Y2NlZWQ6CiAgICAgU3JiLT5TcmJTdGF0dXMgPSBTUkJfU1RB
VFVTX1NVQ0NFU1M7CkBAIC0yOTksNyArMjk5LDcgQEAgVGFyZ2V0VW5tYXAoCiB7CiAgICAgUFhF
TlZCRF9TUkJFWFQgICAgICAgICAgU3JiRXh0ID0gU3JiLT5TcmJFeHRlbnNpb247CiAgICAgUFhF
TlZCRF9GUk9OVEVORCAgICAgICAgRnJvbnRlbmQgPSBUYXJnZXQtPkZyb250ZW5kOwotICAgIFBY
RU5WQkRfUklORyAgICAgICAgICAgIFJpbmcgPSBGcm9udGVuZEdldFJpbmcoRnJvbnRlbmQpOwor
ICAgIFBYRU5WQkRfUFJPVE9DT0wgICAgICAgIFByb3RvY29sID0gRnJvbnRlbmRHZXRQcm90b2Nv
bChGcm9udGVuZCk7CiAKICAgICBTcmItPlNyYlN0YXR1cyA9IFNSQl9TVEFUVVNfRVJST1I7CiAg
ICAgaWYgKCFGcm9udGVuZEdldENvbm5lY3RlZChGcm9udGVuZCkpCkBAIC0zMTIsNyArMzEyLDcg
QEAgVGFyZ2V0VW5tYXAoCiAgICAgICAgIGdvdG8gc3VjY2VlZDsKIAogICAgIFNyYi0+U3JiU3Rh
dHVzID0gU1JCX1NUQVRVU19QRU5ESU5HOwotICAgIHJldHVybiBSaW5nUXVldWVSZXF1ZXN0KFJp
bmcsIFNyYkV4dCk7CisgICAgcmV0dXJuIFByb3RvY29sUXVldWVSZXF1ZXN0KFByb3RvY29sLCBT
cmJFeHQpOwogCiBzdWNjZWVkOgogICAgIFNyYi0+U3JiU3RhdHVzID0gU1JCX1NUQVRVU19TVUND
RVNTOwpAQCAtOTgwLDcgKzk4MCwxMSBAQCBUYXJnZXRGbHVzaCgKICAgICBJTiAgUFhFTlZCRF9T
UkJFWFQgIFNyYkV4dAogICAgICkKIHsKLSAgICBSaW5nUXVldWVTaHV0ZG93bihGcm9udGVuZEdl
dFJpbmcoVGFyZ2V0LT5Gcm9udGVuZCksIFNyYkV4dCk7CisgICAgUFhFTlZCRF9QUk9UT0NPTCAg
ICBQcm90b2NvbDsKKworICAgIFByb3RvY29sID0gRnJvbnRlbmRHZXRQcm90b2NvbChUYXJnZXQt
PkZyb250ZW5kKTsKKyAgICBQcm90b2NvbFF1ZXVlU2h1dGRvd24oUHJvdG9jb2wsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgIFNyYkV4dCk7CiB9CiAKIFZPSUQKQEAgLTk4OSw3ICs5OTMsMTEg
QEAgVGFyZ2V0U2h1dGRvd24oCiAgICAgSU4gIFBYRU5WQkRfU1JCRVhUICBTcmJFeHQKICAgICAp
CiB7Ci0gICAgUmluZ1F1ZXVlU2h1dGRvd24oRnJvbnRlbmRHZXRSaW5nKFRhcmdldC0+RnJvbnRl
bmQpLCBTcmJFeHQpOworICAgIFBYRU5WQkRfUFJPVE9DT0wgICAgUHJvdG9jb2w7CisKKyAgICBQ
cm90b2NvbCA9IEZyb250ZW5kR2V0UHJvdG9jb2woVGFyZ2V0LT5Gcm9udGVuZCk7CisgICAgUHJv
dG9jb2xRdWV1ZVNodXRkb3duKFByb3RvY29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICBT
cmJFeHQpOwogfQogCiBWT0lECmRpZmYgLS1naXQgYS92czIwMTUveGVudmJkL3hlbnZiZC52Y3hw
cm9qIGIvdnMyMDE1L3hlbnZiZC94ZW52YmQudmN4cHJvagppbmRleCBhODVlNjViLi4wOTM5NzY5
IDEwMDY0NAotLS0gYS92czIwMTUveGVudmJkL3hlbnZiZC52Y3hwcm9qCisrKyBiL3ZzMjAxNS94
ZW52YmQveGVudmJkLnZjeHByb2oKQEAgLTcyLDcgKzcyLDcgQEAKICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uLy4uL3NyYy94ZW52YmQvYmFzZTY0LmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLi8uLi9zcmMveGVudmJkL3F1ZXVlLmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLi8uLi9zcmMveGVudmJkL3RocmVhZC5jIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li4vLi4vc3JjL3hlbnZiZC9yaW5nLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLi8u
Li9zcmMveGVudmJkL3Byb3RvY29sLmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLi8u
Li9zcmMveGVudmJkL2dyYW50ZXIuYyIgLz4KICAgPC9JdGVtR3JvdXA+CiAgIDxJdGVtR3JvdXA+
CmRpZmYgLS1naXQgYS92czIwMTcveGVudmJkL3hlbnZiZC52Y3hwcm9qIGIvdnMyMDE3L3hlbnZi
ZC94ZW52YmQudmN4cHJvagppbmRleCA3NGFmNWZjLi43OWU3YzI4IDEwMDY0NAotLS0gYS92czIw
MTcveGVudmJkL3hlbnZiZC52Y3hwcm9qCisrKyBiL3ZzMjAxNy94ZW52YmQveGVudmJkLnZjeHBy
b2oKQEAgLTgwLDcgKzgwLDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uLy4uL3NyYy94
ZW52YmQvYmFzZTY0LmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLi8uLi9zcmMveGVu
dmJkL3F1ZXVlLmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLi8uLi9zcmMveGVudmJk
L3RocmVhZC5jIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi4vLi4vc3JjL3hlbnZiZC9y
aW5nLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLi8uLi9zcmMveGVudmJkL3Byb3Rv
Y29sLmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLi8uLi9zcmMveGVudmJkL2dyYW50
ZXIuYyIgLz4KICAgPC9JdGVtR3JvdXA+CiAgIDxJdGVtR3JvdXA+Ci0tIAoyLjE2LjIud2luZG93
cy4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18Kd2lu
LXB2LWRldmVsIG1haWxpbmcgbGlzdAp3aW4tcHYtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcK
aHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL3dpbi1wdi1kZXZl
bA==

From win-pv-devel-bounces@lists.xenproject.org Thu May 03 11:03:29 2018
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 03 May 2018 11:03:29 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1fEC1J-000327-Dk; Thu, 03 May 2018 11:03:29 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <srs0=ylbo=hw=citrix.com=prvs=654105155=owen.smith@srs-us1.protection.inumbo.net>)
 id 1fEC1H-00030t-Pu
 for win-pv-devel@lists.xenproject.org; Thu, 03 May 2018 11:03:27 +0000
X-Inumbo-ID: fbdfecb4-4ec1-11e8-8249-2fda3a446a53
Received: from SMTP03.CITRIX.COM (unknown [162.221.156.55])
 by us1-amaz-eas1.inumbo.com (Halon) with ESMTPS
 id fbdfecb4-4ec1-11e8-8249-2fda3a446a53;
 Thu, 03 May 2018 11:06:09 +0000 (UTC)
X-IronPort-AV: E=Sophos;i="5.49,358,1520899200"; d="scan'208";a="53573857"
From: owensm <owen.smith@citrix.com>
To: <win-pv-devel@lists.xenproject.org>
Date: Thu, 3 May 2018 12:03:00 +0100
Message-ID: <20180503110302.17308-5-owen.smith@citrix.com>
X-Mailer: git-send-email 2.16.2.windows.1
In-Reply-To: <20180503110302.17308-1-owen.smith@citrix.com>
References: <20180503110302.17308-1-owen.smith@citrix.com>
MIME-Version: 1.0
Subject: [win-pv-devel] [RFC PATCH 4/6] Add initial multi-queue support
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Cc: owensm <owen.smith@citrix.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>

Q3JlYXRlIGEgcXVldWUgcGVyIENQVSwgdXAtdG8gdGhlIGxvd2VyIGxpbWl0IHNwZWNpZmllZCBi
eSB4ZW5zdG9yZSBhbmQKcmVnaXN0cnkgb3ZlcnJpZGUuIFJlcXVlc3RzIGFyZSBxdWV1ZWQgb24g
dGhlIHNhbWUgcHJvY2Vzc29yJ3MgRFBDIGFzClN0YXJ0SW8gcnVucyBvbi4gSXQgaXMgYXNzdW1l
ZCB0aGF0IGFueSByZXF1ZXN0IGRpc3BhdGNoZWQgdG8gdGhlCmJhY2tlbmQgb24gYSBwYXJ0aWN1
bGFyIHF1ZXVlIHdpbGwgYWx3YXlzIGJlIGNvbXBsZXRlZCBvbiB0aGUgc2FtZQpxdWV1ZS4KClNp
Z25lZC1vZmYtYnk6IG93ZW5zbSA8b3dlbi5zbWl0aEBjaXRyaXguY29tPgotLS0KIHNyYy94ZW52
YmQvcHJvdG9jb2wuYyB8IDIxMDAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0t
LS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDEyMjIgaW5zZXJ0aW9ucygrKSwgODc4IGRl
bGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy94ZW52YmQvcHJvdG9jb2wuYyBiL3NyYy94ZW52
YmQvcHJvdG9jb2wuYwppbmRleCAzOTc2N2ViLi44YWE2ZWM4IDEwMDY0NAotLS0gYS9zcmMveGVu
dmJkL3Byb3RvY29sLmMKKysrIGIvc3JjL3hlbnZiZC9wcm90b2NvbC5jCkBAIC01NiwxNSArNTYs
MTAgQEAKICNkZWZpbmUgWEVOVkJEX01BWF9QUk9UT0NPTF9QQUdFX09SREVSICAoNCkKICNkZWZp
bmUgWEVOVkJEX01BWF9QUk9UT0NPTF9QQUdFUyAgICAgICAoMSA8PCBYRU5WQkRfTUFYX1BST1RP
Q09MX1BBR0VfT1JERVIpCiAKLXN0cnVjdCBfWEVOVkJEX1BST1RPQ09MIHsKLSAgICBQWEVOVkJE
X0ZST05URU5EICAgICAgICAgICAgICAgIEZyb250ZW5kOwotICAgIEJPT0xFQU4gICAgICAgICAg
ICAgICAgICAgICAgICAgQ29ubmVjdGVkOwotICAgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAg
ICAgICAgRW5hYmxlZDsKLQotICAgIFhFTkJVU19DQUNIRV9JTlRFUkZBQ0UgICAgICAgICAgQ2Fj
aGVJbnRlcmZhY2U7Ci0gICAgWEVOQlVTX1NUT1JFX0lOVEVSRkFDRSAgICAgICAgICBTdG9yZUlu
dGVyZmFjZTsKLSAgICBYRU5CVVNfRVZUQ0hOX0lOVEVSRkFDRSAgICAgICAgIEV2dGNobkludGVy
ZmFjZTsKLSAgICBYRU5CVVNfREVCVUdfSU5URVJGQUNFICAgICAgICAgIERlYnVnSW50ZXJmYWNl
OwordHlwZWRlZiBzdHJ1Y3QgX1hFTlZCRF9SSU5HIHsKKyAgICBQWEVOVkJEX1BST1RPQ09MICAg
ICAgICAgICAgICAgIFByb3RvY29sOworICAgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAg
ICAgSW5kZXg7CisgICAgUENIQVIgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXRoOwogCiAg
ICAgUFhFTkJVU19ERUJVR19DQUxMQkFDSyAgICAgICAgICBEZWJ1Z0NhbGxiYWNrOwogCkBAIC03
MiwxNCArNjcsMTAgQEAgc3RydWN0IF9YRU5WQkRfUFJPVE9DT0wgewogICAgIFBNREwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTWRsOwogICAgIGJsa2lmX3NyaW5nX3QqICAgICAgICAgICAg
ICAgICAgU2hhcmVkOwogICAgIGJsa2lmX2Zyb250X3JpbmdfdCAgICAgICAgICAgICAgRnJvbnQ7
Ci0gICAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlcjsKICAgICBQVk9JRCAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdyYW50c1tYRU5WQkRfTUFYX1BST1RPQ09MX1BBR0VT
XTsKICAgICBQWEVOQlVTX0VWVENITl9DSEFOTkVMICAgICAgICAgIENoYW5uZWw7CiAgICAgS0RQ
QyAgICAgICAgICAgICAgICAgICAgICAgICAgICBEcGM7CiAKLSAgICBQWEVOQlVTX0NBQ0hFICAg
ICAgICAgICAgICAgICAgIFJlcXVlc3RDYWNoZTsKLSAgICBQWEVOQlVTX0NBQ0hFICAgICAgICAg
ICAgICAgICAgIFNlZ21lbnRDYWNoZTsKLSAgICBQWEVOQlVTX0NBQ0hFICAgICAgICAgICAgICAg
ICAgIEluZGlyZWN0Q2FjaGU7CiAgICAgWEVOVkJEX1FVRVVFICAgICAgICAgICAgICAgICAgICBQ
cmVwYXJlZFJlcXM7CiAgICAgWEVOVkJEX1FVRVVFICAgICAgICAgICAgICAgICAgICBTdWJtaXR0
ZWRSZXFzOwogICAgIFhFTlZCRF9RVUVVRSAgICAgICAgICAgICAgICAgICAgU2h1dGRvd25TcmJz
OwpAQCAtOTUsNiArODYsMjkgQEAgc3RydWN0IF9YRU5WQkRfUFJPVE9DT0wgewogICAgIFVMT05H
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQmxrT3BCYXJyaWVyOwogICAgIFVMT05HICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQmxrT3BEaXNjYXJkOwogICAgIFVMT05HICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQmxrT3BGbHVzaDsKK30gWEVOVkJEX1JJTkcsICpQWEVOVkJEX1JJTkc7
CisKK3N0cnVjdCBfWEVOVkJEX1BST1RPQ09MIHsKKyAgICBQWEVOVkJEX0ZST05URU5EICAgICAg
ICAgICAgICAgIEZyb250ZW5kOworICAgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAg
Q29ubmVjdGVkOworICAgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgRW5hYmxlZDsK
KworICAgIFhFTkJVU19DQUNIRV9JTlRFUkZBQ0UgICAgICAgICAgQ2FjaGVJbnRlcmZhY2U7Cisg
ICAgWEVOQlVTX1NUT1JFX0lOVEVSRkFDRSAgICAgICAgICBTdG9yZUludGVyZmFjZTsKKyAgICBY
RU5CVVNfRVZUQ0hOX0lOVEVSRkFDRSAgICAgICAgIEV2dGNobkludGVyZmFjZTsKKyAgICBYRU5C
VVNfREVCVUdfSU5URVJGQUNFICAgICAgICAgIERlYnVnSW50ZXJmYWNlOworCisgICAgUFhFTkJV
U19ERUJVR19DQUxMQkFDSyAgICAgICAgICBEZWJ1Z0NhbGxiYWNrOworICAgIEtTUElOX0xPQ0sg
ICAgICAgICAgICAgICAgICAgICAgTG9jazsKKworICAgIFBYRU5CVVNfQ0FDSEUgICAgICAgICAg
ICAgICAgICAgUmVxdWVzdENhY2hlOworICAgIFBYRU5CVVNfQ0FDSEUgICAgICAgICAgICAgICAg
ICAgU2VnbWVudENhY2hlOworICAgIFBYRU5CVVNfQ0FDSEUgICAgICAgICAgICAgICAgICAgSW5k
aXJlY3RDYWNoZTsKKworICAgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXI7
CisgICAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1RdWV1ZXM7CisgICAgUFhF
TlZCRF9SSU5HICAgICAgICAgICAgICAgICAgICAqUmluZ3M7CisKICAgICBVTE9ORzY0ICAgICAg
ICAgICAgICAgICAgICAgICAgIFNlZ3NHcmFudGVkOwogICAgIFVMT05HNjQgICAgICAgICAgICAg
ICAgICAgICAgICAgU2Vnc0JvdW5jZWQ7CiB9OwpAQCAtMTM4LDEyICsxNTIsMTMgQEAgeGVuX3dt
YigpCiB9CiAKIHN0YXRpYyBGT1JDRUlOTElORSBWT0lECi1fX1Byb3RvY29sSW5zZXJ0KAotICAg
IElOICBQWEVOVkJEX1BST1RPQ09MICAgICAgICBQcm90b2NvbCwKK19fUmluZ0luc2VydCgKKyAg
ICBJTiAgUFhFTlZCRF9SSU5HICAgICAgICBSaW5nLAogICAgIElOICBQWEVOVkJEX1JFUVVFU1Qg
ICAgIFJlcXVlc3QsCiAgICAgSU4gIGJsa2lmX3JlcXVlc3RfdCogICAgcmVxCiAgICAgKQogewor
ICAgIFBYRU5WQkRfUFJPVE9DT0wgICAgICAgIFByb3RvY29sID0gUmluZy0+UHJvdG9jb2w7CiAg
ICAgUFhFTlZCRF9HUkFOVEVSICAgICAgICAgR3JhbnRlciA9IEZyb250ZW5kR2V0R3JhbnRlcihQ
cm90b2NvbC0+RnJvbnRlbmQpOwogCiAgICAgc3dpdGNoIChSZXF1ZXN0LT5PcGVyYXRpb24pIHsK
QEAgLTIzNCw3ICsyNDksNyBAQCBfX1Byb3RvY29sSW5zZXJ0KAogICAgICAgICBBU1NFUlQoRkFM
U0UpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgKytQcm90b2NvbC0+U3VibWl0dGVkOwor
ICAgICsrUmluZy0+U3VibWl0dGVkOwogfQogCiBzdGF0aWMgUFhFTlZCRF9JTkRJUkVDVApAQCAt
NDAwLDE1ICs0MTUsMTYgQEAgUHJvdG9jb2xQdXRSZXF1ZXN0KAogfQogCiBzdGF0aWMgRk9SQ0VJ
TkxJTkUgUFhFTlZCRF9SRVFVRVNUCi1Qcm90b2NvbEZpbmRSZXF1ZXN0KAotICAgIElOICBQWEVO
VkJEX1BST1RPQ09MICAgIFByb3RvY29sLAorUmluZ0ZpbmRSZXF1ZXN0KAorICAgIElOICBQWEVO
VkJEX1JJTkcgICAgUmluZywKICAgICBJTiAgVUxPTkc2NCAgICAgICAgIElkCiAgICAgKQogewog
ICAgIEtJUlFMICAgICAgICAgICAgICAgSXJxbDsKICAgICBQTElTVF9FTlRSWSAgICAgICAgIExp
c3RFbnRyeTsKICAgICBQWEVOVkJEX1JFUVVFU1QgICAgIFJlcXVlc3Q7Ci0gICAgUFhFTlZCRF9R
VUVVRSAgICAgICBRdWV1ZSA9ICZQcm90b2NvbC0+U3VibWl0dGVkUmVxczsKKyAgICBQWEVOVkJE
X1FVRVVFICAgICAgIFF1ZXVlID0gJlJpbmctPlN1Ym1pdHRlZFJlcXM7CisgICAgUFhFTlZCRF9Q
Uk9UT0NPTCAgICBQcm90b2NvbCA9IFJpbmctPlByb3RvY29sOwogCiAgICAgS2VBY3F1aXJlU3Bp
bkxvY2soJlF1ZXVlLT5Mb2NrLCAmSXJxbCk7CiAKQEAgLTQyNSw0MCArNDQxLDQxIEBAIFByb3Rv
Y29sRmluZFJlcXVlc3QoCiAgICAgfQogCiAgICAgS2VSZWxlYXNlU3BpbkxvY2soJlF1ZXVlLT5M
b2NrLCBJcnFsKTsKLSAgICBXYXJuaW5nKCJUYXJnZXRbJWRdIDogVGFnICVsbHggbm90IGZvdW5k
IGluIHN1Ym1pdHRlZCBsaXN0ICgldSBpdGVtcylcbiIsCisgICAgV2FybmluZygiVGFyZ2V0WyVk
XVsldV0gOiBUYWcgJWxseCBub3QgZm91bmQgaW4gc3VibWl0dGVkIGxpc3QgKCV1IGl0ZW1zKVxu
IiwKICAgICAgICAgICAgIEZyb250ZW5kR2V0VGFyZ2V0SWQoUHJvdG9jb2wtPkZyb250ZW5kKSwK
KyAgICAgICAgICAgIFJpbmctPkluZGV4LAogICAgICAgICAgICAgSWQsCiAgICAgICAgICAgICBR
dWV1ZUNvdW50KFF1ZXVlKSk7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKIHN0YXRpYyBGT1JDRUlO
TElORSBWT0lECi1fX1Byb3RvY29sSW5jQmxraWZPcENvdW50KAotICAgIElOICBQWEVOVkJEX1BS
T1RPQ09MICAgIFByb3RvY29sLAorX19SaW5nSW5jQmxraWZPcENvdW50KAorICAgIElOICBQWEVO
VkJEX1JJTkcgICAgUmluZywKICAgICBJTiAgUFhFTlZCRF9SRVFVRVNUIFJlcXVlc3QKICAgICAp
CiB7CiAgICAgc3dpdGNoIChSZXF1ZXN0LT5PcGVyYXRpb24pIHsKICAgICBjYXNlIEJMS0lGX09Q
X1JFQUQ6CiAgICAgICAgIGlmIChSZXF1ZXN0LT5OclNlZ21lbnRzID4gQkxLSUZfTUFYX1NFR01F
TlRTX1BFUl9SRVFVRVNUKQotICAgICAgICAgICAgKytQcm90b2NvbC0+QmxrT3BJbmRpcmVjdFJl
YWQ7CisgICAgICAgICAgICArK1JpbmctPkJsa09wSW5kaXJlY3RSZWFkOwogICAgICAgICBlbHNl
Ci0gICAgICAgICAgICArK1Byb3RvY29sLT5CbGtPcFJlYWQ7CisgICAgICAgICAgICArK1Jpbmct
PkJsa09wUmVhZDsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBCTEtJRl9PUF9XUklURToKICAg
ICAgICAgaWYgKFJlcXVlc3QtPk5yU2VnbWVudHMgPiBCTEtJRl9NQVhfU0VHTUVOVFNfUEVSX1JF
UVVFU1QpCi0gICAgICAgICAgICArK1Byb3RvY29sLT5CbGtPcEluZGlyZWN0V3JpdGU7CisgICAg
ICAgICAgICArK1JpbmctPkJsa09wSW5kaXJlY3RXcml0ZTsKICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgKytQcm90b2NvbC0+QmxrT3BXcml0ZTsKKyAgICAgICAgICAgICsrUmluZy0+QmxrT3BX
cml0ZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBCTEtJRl9PUF9XUklURV9CQVJSSUVSOgot
ICAgICAgICArK1Byb3RvY29sLT5CbGtPcEJhcnJpZXI7CisgICAgICAgICsrUmluZy0+QmxrT3BC
YXJyaWVyOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEJMS0lGX09QX0RJU0NBUkQ6Ci0gICAg
ICAgICsrUHJvdG9jb2wtPkJsa09wRGlzY2FyZDsKKyAgICAgICAgKytSaW5nLT5CbGtPcERpc2Nh
cmQ7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQkxLSUZfT1BfRkxVU0hfRElTS0NBQ0hFOgot
ICAgICAgICArK1Byb3RvY29sLT5CbGtPcEZsdXNoOworICAgICAgICArK1JpbmctPkJsa09wRmx1
c2g7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVChGQUxTRSk7
CkBAIC00NjcsNyArNDg0LDcgQEAgX19Qcm90b2NvbEluY0Jsa2lmT3BDb3VudCgKIH0KIAogc3Rh
dGljIEZPUkNFSU5MSU5FIFVMT05HCi1fX1Byb3RvY29sU2VjdG9yc1BlclBhZ2UoCitfX1NlY3Rv
cnNQZXJQYWdlKAogICAgIElOICBVTE9ORyAgIFNlY3RvclNpemUKICAgICApCiB7CkBAIC00NzYs
NyArNDkzLDcgQEAgX19Qcm90b2NvbFNlY3RvcnNQZXJQYWdlKAogfQogCiBzdGF0aWMgRk9SQ0VJ
TkxJTkUgVk9JRAotX19Qcm90b2NvbE9wZXJhdGlvbigKK19fT3BlcmF0aW9uKAogICAgIElOICBV
Q0hBUiAgICAgICBDZGJPcCwKICAgICBPVVQgUFVDSEFSICAgICAgUHJvdG9jb2xPcCwKICAgICBP
VVQgUEJPT0xFQU4gICAgUmVhZE9ubHkKQEAgLTQ5NiwyMiArNTEzLDggQEAgX19Qcm90b2NvbE9w
ZXJhdGlvbigKICAgICB9CiB9CiAKLXN0YXRpYyBGT1JDRUlOTElORSBNTV9QQUdFX1BSSU9SSVRZ
Ci1fX1Byb3RvY29sUHJpb3JpdHkoCi0gICAgSU4gIFBYRU5WQkRfUFJPVE9DT0wgICAgUHJvdG9j
b2wKLSAgICApCi17Ci0gICAgUFhFTlZCRF9DQVBTICAgICAgICBDYXBzID0gRnJvbnRlbmRHZXRD
YXBzKFByb3RvY29sLT5Gcm9udGVuZCk7Ci0gICAgaWYgKCEoQ2Fwcy0+UGFnaW5nIHx8Ci0gICAg
ICAgICAgQ2Fwcy0+SGliZXJuYXRpb24gfHwKLSAgICAgICAgICBDYXBzLT5EdW1wRmlsZSkpCi0g
ICAgICAgIHJldHVybiBOb3JtYWxQYWdlUHJpb3JpdHk7Ci0KLSAgICByZXR1cm4gSGlnaFBhZ2VQ
cmlvcml0eTsKLX0KLQogc3RhdGljIEZPUkNFSU5MSU5FIFZPSUQKLVByb3RvY29sUmVxdWVzdENv
cHlPdXRwdXQoCitfX1JlcXVlc3RDb3B5T3V0cHV0KAogICAgIElOICBQWEVOVkJEX1JFUVVFU1Qg
UmVxdWVzdAogICAgICkKIHsKQEAgLTUzNCw1MzIgKzUzNywxMzYgQEAgUHJvdG9jb2xSZXF1ZXN0
Q29weU91dHB1dCgKICAgICB9CiB9CiAKLXN0YXRpYyBCT09MRUFOCi1Qcm90b2NvbFByZXBhcmVT
ZWdtZW50KAotICAgIElOICBQWEVOVkJEX1BST1RPQ09MICAgIFByb3RvY29sLAotICAgIElOICBQ
WEVOVkJEX1NFR01FTlQgU2VnbWVudCwKLSAgICBJTiAgUFhFTlZCRF9TUkJFWFQgIFNyYkV4dCwK
LSAgICBJTiAgQk9PTEVBTiAgICAgICAgIFJlYWRPbmx5LAotICAgIElOICBVTE9ORyAgICAgICAg
ICAgU2VjdG9yc0xlZnQsCi0gICAgT1VUIFBVTE9ORyAgICAgICAgICBTZWN0b3JzTm93CitzdGF0
aWMgRk9SQ0VJTkxJTkUgVk9JRAorUmluZ1F1ZXVlUmVxdWVzdExpc3QoCisgICAgSU4gIFBYRU5W
QkRfUklORyAgICAgICAgUmluZywKKyAgICBJTiAgUExJU1RfRU5UUlkgICAgICAgICBMaXN0CiAg
ICAgKQogewotICAgIFBGTl9OVU1CRVIgICAgICAgICAgUGZuOwotICAgIFVMT05HICAgICAgICAg
ICAgICAgT2Zmc2V0OwotICAgIFVMT05HICAgICAgICAgICAgICAgTGVuZ3RoOwotICAgIE5UU1RB
VFVTICAgICAgICAgICAgU3RhdHVzOwotICAgIFBYRU5WQkRfR1JBTlRFUiAgICAgR3JhbnRlciA9
IEZyb250ZW5kR2V0R3JhbnRlcihQcm90b2NvbC0+RnJvbnRlbmQpOwotICAgIGNvbnN0IFVMT05H
ICAgICAgICAgU2VjdG9yU2l6ZSA9IEZyb250ZW5kR2V0RGlza0luZm8oUHJvdG9jb2wtPkZyb250
ZW5kKS0+U2VjdG9yU2l6ZTsKLSAgICBjb25zdCBVTE9ORyAgICAgICAgIFNlY3RvcnNQZXJQYWdl
ID0gX19Qcm90b2NvbFNlY3RvcnNQZXJQYWdlKFNlY3RvclNpemUpOwotICAgIFBYRU5WQkRfVEFS
R0VUICAgICAgVGFyZ2V0ID0gRnJvbnRlbmRHZXRUYXJnZXQoUHJvdG9jb2wtPkZyb250ZW5kKTsK
LSAgICBQWEVOVkJEX0FEQVBURVIgICAgIEFkYXB0ZXIgPSBUYXJnZXRHZXRBZGFwdGVyKFRhcmdl
dCk7Ci0KLSAgICBQZm4gPSBBZGFwdGVyR2V0TmV4dFNHRW50cnkoQWRhcHRlciwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgU3JiRXh0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmT2Zmc2V0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmTGVuZ3RoKTsKLSAgICBpZiAoKE9mZnNldCAm
IChTZWN0b3JTaXplIC0gMSkpID09IDAgJiYKLSAgICAgICAgKExlbmd0aCAmIChTZWN0b3JTaXpl
IC0gMSkpID09IDApIHsKLSAgICAgICAgKytQcm90b2NvbC0+U2Vnc0dyYW50ZWQ7Ci0gICAgICAg
IC8vIGdldCBmaXJzdCBzZWN0b3IsIGxhc3Qgc2VjdG9yIGFuZCBjb3VudAotICAgICAgICBTZWdt
ZW50LT5GaXJzdFNlY3RvciAgICA9IChVQ0hBUikoKE9mZnNldCArIFNlY3RvclNpemUgLSAxKSAv
IFNlY3RvclNpemUpOwotICAgICAgICAqU2VjdG9yc05vdyAgICAgICAgICAgICA9IF9fbWluKFNl
Y3RvcnNMZWZ0LCBTZWN0b3JzUGVyUGFnZSAtIFNlZ21lbnQtPkZpcnN0U2VjdG9yKTsKLSAgICAg
ICAgU2VnbWVudC0+TGFzdFNlY3RvciAgICAgPSAoVUNIQVIpKFNlZ21lbnQtPkZpcnN0U2VjdG9y
ICsgKlNlY3RvcnNOb3cgLSAxKTsKLQotICAgICAgICBBU1NFUlQzVSgoTGVuZ3RoIC8gU2VjdG9y
U2l6ZSksID09LCAqU2VjdG9yc05vdyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgUFhFTlZCRF9C
T1VOQ0UgICAgICBCb3VuY2U7Ci0gICAgICAgIFBNREwgICAgICAgICAgICAgICAgTWRsOwotCi0g
ICAgICAgICsrUHJvdG9jb2wtPlNlZ3NCb3VuY2VkOwotICAgICAgICAvLyBnZXQgZmlyc3Qgc2Vj
dG9yLCBsYXN0IHNlY3RvciBhbmQgY291bnQKLSAgICAgICAgU2VnbWVudC0+Rmlyc3RTZWN0b3Ig
ICAgPSAwOwotICAgICAgICAqU2VjdG9yc05vdyAgICAgICAgICAgICA9IF9fbWluKFNlY3RvcnNM
ZWZ0LCBTZWN0b3JzUGVyUGFnZSk7Ci0gICAgICAgIFNlZ21lbnQtPkxhc3RTZWN0b3IgICAgID0g
KFVDSEFSKSgqU2VjdG9yc05vdyAtIDEpOwotCi0gICAgICAgIEJvdW5jZSA9IEFkYXB0ZXJHZXRC
b3VuY2UoQWRhcHRlcik7Ci0gICAgICAgIGlmIChCb3VuY2UgPT0gTlVMTCkKLSAgICAgICAgICAg
IGdvdG8gZmFpbDE7Ci0gICAgICAgIFNlZ21lbnQtPkJvdW5jZSA9IEJvdW5jZTsKLQotI3ByYWdt
YSB3YXJuaW5nKHB1c2gpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZToyODE0NSkKLSAgICAgICAg
TWRsID0gJkJvdW5jZS0+U291cmNlTWRsOwotICAgICAgICBNZGwtPk5leHQgICAgICAgICAgICAg
ICA9IE5VTEw7Ci0gICAgICAgIE1kbC0+U2l6ZSAgICAgICAgICAgICAgID0gKFNIT1JUKShzaXpl
b2YoTURMKSArIHNpemVvZihQRk5fTlVNQkVSKSk7Ci0gICAgICAgIE1kbC0+TWRsRmxhZ3MgICAg
ICAgICAgID0gTURMX1BBR0VTX0xPQ0tFRDsKLSAgICAgICAgTWRsLT5Qcm9jZXNzICAgICAgICAg
ICAgPSBOVUxMOwotICAgICAgICBNZGwtPk1hcHBlZFN5c3RlbVZhICAgICA9IE5VTEw7Ci0gICAg
ICAgIE1kbC0+U3RhcnRWYSAgICAgICAgICAgID0gTlVMTDsKLSAgICAgICAgTWRsLT5CeXRlQ291
bnQgICAgICAgICAgPSBMZW5ndGg7Ci0gICAgICAgIE1kbC0+Qnl0ZU9mZnNldCAgICAgICAgID0g
T2Zmc2V0OwotICAgICAgICBCb3VuY2UtPlNvdXJjZVBmblswXSAgICA9IFBmbjsKLQotICAgICAg
ICBpZiAoTGVuZ3RoIDwgKlNlY3RvcnNOb3cgKiBTZWN0b3JTaXplKSB7Ci0gICAgICAgICAgICBQ
Zm4gPSBBZGFwdGVyR2V0TmV4dFNHRW50cnkoQWRhcHRlciwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBTcmJFeHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgTGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICZPZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkxl
bmd0aCk7Ci0gICAgICAgICAgICBNZGwtPlNpemUgICAgICAgICAgICs9IHNpemVvZihQRk5fTlVN
QkVSKTsKLSAgICAgICAgICAgIE1kbC0+Qnl0ZUNvdW50ICAgICAgKz0gTGVuZ3RoOwotICAgICAg
ICAgICAgQm91bmNlLT5Tb3VyY2VQZm5bMV0gPSBQZm47Ci0gICAgICAgIH0KLSNwcmFnbWEgd2Fy
bmluZyhwb3ApCi0KLSAgICAgICAgQVNTRVJUKChNZGwtPkJ5dGVDb3VudCAmIChTZWN0b3JTaXpl
IC0gMSkpID09IDApOwotICAgICAgICBBU1NFUlQzVShNZGwtPkJ5dGVDb3VudCwgPD0sIFBBR0Vf
U0laRSk7Ci0gICAgICAgIEFTU0VSVDNVKCpTZWN0b3JzTm93LCA9PSwgKE1kbC0+Qnl0ZUNvdW50
IC8gU2VjdG9yU2l6ZSkpOwotCi0gICAgICAgIEJvdW5jZS0+U291cmNlUHRyID0gTW1NYXBMb2Nr
ZWRQYWdlc1NwZWNpZnlDYWNoZShNZGwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBLZXJuZWxNb2RlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTW1DYWNoZWQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
RkFMU0UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX1Byb3RvY29sUHJpb3JpdHkoUHJvdG9jb2wpKTsKLSAgICAgICAgaWYgKEJvdW5j
ZS0+U291cmNlUHRyID09IE5VTEwpCi0gICAgICAgICAgICBnb3RvIGZhaWwyOwotCi0gICAgICAg
IEFTU0VSVDNQKE1tR2V0TWRsUGZuQXJyYXkoTWRsKVswXSwgPT0sIEJvdW5jZS0+U291cmNlUGZu
WzBdKTsKLSAgICAgICAgQVNTRVJUM1AoTW1HZXRNZGxQZm5BcnJheShNZGwpWzFdLCA9PSwgQm91
bmNlLT5Tb3VyY2VQZm5bMV0pOworICAgIGZvciAoOzspIHsKKyAgICAgICAgUFhFTlZCRF9SRVFV
RVNUIFJlcXVlc3Q7CisgICAgICAgIFBMSVNUX0VOVFJZICAgICBMaXN0RW50cnk7CiAKLSAgICAg
ICAgLy8gY29weSBjb250ZW50cyBpbgotICAgICAgICBpZiAoUmVhZE9ubHkpIHsgLy8gT3BlcmF0
aW9uID09IEJMS0lGX09QX1dSSVRFCi0gICAgICAgICAgICBSdGxDb3B5TWVtb3J5KEJvdW5jZS0+
Qm91bmNlUHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICBCb3VuY2UtPlNvdXJjZVB0ciwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgTW1HZXRNZGxCeXRlQ291bnQoJkJvdW5jZS0+U291
cmNlTWRsKSk7Ci0gICAgICAgIH0KKyAgICAgICAgTGlzdEVudHJ5ID0gUmVtb3ZlSGVhZExpc3Qo
TGlzdCk7CisgICAgICAgIGlmIChMaXN0RW50cnkgPT0gTGlzdCkKKyAgICAgICAgICAgIGJyZWFr
OwogCi0gICAgICAgIFBmbiA9IE1tR2V0TWRsUGZuQXJyYXkoQm91bmNlLT5Cb3VuY2VNZGwpWzBd
OworICAgICAgICBSZXF1ZXN0ID0gQ09OVEFJTklOR19SRUNPUkQoTGlzdEVudHJ5LCBYRU5WQkRf
UkVRVUVTVCwgTGlzdEVudHJ5KTsKKyAgICAgICAgX19SaW5nSW5jQmxraWZPcENvdW50KFJpbmcs
IFJlcXVlc3QpOworICAgICAgICBRdWV1ZUFwcGVuZCgmUmluZy0+UHJlcGFyZWRSZXFzLCAmUmVx
dWVzdC0+TGlzdEVudHJ5KTsKICAgICB9Ci0KLSAgICAvLyBHcmFudCBzZWdtZW50J3MgcGFnZQot
ICAgIFN0YXR1cyA9IEdyYW50ZXJHZXQoR3JhbnRlciwgUGZuLCBSZWFkT25seSwgJlNlZ21lbnQt
PkdyYW50KTsKLSAgICBpZiAoIU5UX1NVQ0NFU1MoU3RhdHVzKSkKLSAgICAgICAgZ290byBmYWls
MzsKLQotICAgIHJldHVybiBUUlVFOwotCi1mYWlsMzoKLWZhaWwyOgotZmFpbDE6Ci0gICAgcmV0
dXJuIEZBTFNFOwogfQogCiBzdGF0aWMgQk9PTEVBTgotUHJvdG9jb2xQcmVwYXJlQmxraWZSZWFk
V3JpdGUoCi0gICAgSU4gIFBYRU5WQkRfUFJPVE9DT0wgICAgUHJvdG9jb2wsCi0gICAgSU4gIFBY
RU5WQkRfUkVRVUVTVCBSZXF1ZXN0LAotICAgIElOICBQWEVOVkJEX1NSQkVYVCAgU3JiRXh0LAot
ICAgIElOICBVTE9ORyAgICAgICAgICAgTWF4U2VnbWVudHMsCi0gICAgSU4gIFVMT05HNjQgICAg
ICAgICBTZWN0b3JTdGFydCwKLSAgICBJTiAgVUxPTkcgICAgICAgICAgIFNlY3RvcnNMZWZ0LAot
ICAgIE9VVCBQVUxPTkcgICAgICAgICAgU2VjdG9yc0RvbmUKK1JpbmdTdWJtaXQoCisgICAgSU4g
IFBYRU5WQkRfUklORyAgICBSaW5nLAorICAgIElOICBQWEVOVkJEX1JFUVVFU1QgUmVxdWVzdAog
ICAgICkKIHsKLSAgICBQU0NTSV9SRVFVRVNUX0JMT0NLIFNyYiA9IFNyYkV4dC0+U3JiOwotICAg
IFVDSEFSICAgICAgICAgICAgICAgT3BlcmF0aW9uOwotICAgIEJPT0xFQU4gICAgICAgICAgICAg
UmVhZE9ubHk7Ci0gICAgVUxPTkcgICAgICAgICAgICAgICBJbmRleDsKLSAgICBfX1Byb3RvY29s
T3BlcmF0aW9uKENkYl9PcGVyYXRpb25FeChTcmIpLCAmT3BlcmF0aW9uLCAmUmVhZE9ubHkpOwot
Ci0gICAgUmVxdWVzdC0+T3BlcmF0aW9uICA9IE9wZXJhdGlvbjsKLSAgICBSZXF1ZXN0LT5OclNl
Z21lbnRzID0gMDsKLSAgICBSZXF1ZXN0LT5GaXJzdFNlY3RvciA9IFNlY3RvclN0YXJ0OwotCi0g
ICAgZm9yIChJbmRleCA9IDA7Ci0gICAgICAgICAgICAgICAgSW5kZXggPCBNYXhTZWdtZW50cyAm
JgotICAgICAgICAgICAgICAgIFNlY3RvcnNMZWZ0ID4gMDsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICsrSW5kZXgpIHsKLSAgICAgICAgUFhFTlZCRF9TRUdNRU5UIFNlZ21lbnQ7Ci0gICAgICAg
IFVMT05HICAgICAgICAgICBTZWN0b3JzTm93OwotCi0gICAgICAgIFNlZ21lbnQgPSBQcm90b2Nv
bEdldFNlZ21lbnQoUHJvdG9jb2wpOwotICAgICAgICBpZiAoU2VnbWVudCA9PSBOVUxMKQotICAg
ICAgICAgICAgZ290byBmYWlsMTsKLQotICAgICAgICBJbnNlcnRUYWlsTGlzdCgmUmVxdWVzdC0+
U2VnbWVudHMsICZTZWdtZW50LT5MaXN0RW50cnkpOwotICAgICAgICArK1JlcXVlc3QtPk5yU2Vn
bWVudHM7Ci0KLSAgICAgICAgaWYgKCFQcm90b2NvbFByZXBhcmVTZWdtZW50KFByb3RvY29sLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWdtZW50LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBTcmJFeHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFJlYWRPbmx5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWN0b3JzTGVmdCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlNlY3RvcnNOb3cpKQotICAgICAgICAg
ICAgZ290byBmYWlsMjsKKyAgICBLSVJRTCAgICAgICAgICAgICAgIElycWw7CisgICAgYmxraWZf
cmVxdWVzdF90KiAgICByZXE7CisgICAgQk9PTEVBTiAgICAgICAgICAgICBOb3RpZnk7CisgICAg
UFhFTlZCRF9QUk9UT0NPTCAgICBQcm90b2NvbDsKIAotICAgICAgICAqU2VjdG9yc0RvbmUgKz0g
U2VjdG9yc05vdzsKLSAgICAgICAgU2VjdG9yc0xlZnQgIC09IFNlY3RvcnNOb3c7CisgICAgS2VB
Y3F1aXJlU3BpbkxvY2soJlJpbmctPkxvY2ssICZJcnFsKTsKKyAgICBpZiAoUklOR19GVUxMKCZS
aW5nLT5Gcm9udCkpIHsKKyAgICAgICAgS2VSZWxlYXNlU3BpbkxvY2soJlJpbmctPkxvY2ssIEly
cWwpOworICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgfQotICAgIEFTU0VSVDNVKFJlcXVlc3Qt
Pk5yU2VnbWVudHMsID4sIDApOwotICAgIEFTU0VSVDNVKFJlcXVlc3QtPk5yU2VnbWVudHMsIDw9
LCBNYXhTZWdtZW50cyk7Ci0KLSAgICByZXR1cm4gVFJVRTsKLQotZmFpbDI6Ci1mYWlsMToKLSAg
ICByZXR1cm4gRkFMU0U7Ci19CiAKLXN0YXRpYyBCT09MRUFOCi1Qcm90b2NvbFByZXBhcmVCbGtp
ZkluZGlyZWN0KAotICAgIElOICBQWEVOVkJEX1BST1RPQ09MICAgIFByb3RvY29sLAotICAgIElO
ICBQWEVOVkJEX1JFUVVFU1QgUmVxdWVzdAotICAgICkKLXsKLSAgICBVTE9ORyAgICAgICAgICAg
ICAgIEluZGV4OwotICAgIFVMT05HICAgICAgICAgICAgICAgTnJTZWdtZW50cyA9IDA7CisgICAg
cmVxID0gUklOR19HRVRfUkVRVUVTVCgmUmluZy0+RnJvbnQsIFJpbmctPkZyb250LnJlcV9wcm9k
X3B2dCk7CisgICAgX19SaW5nSW5zZXJ0KFJpbmcsIFJlcXVlc3QsIHJlcSk7CisgICAgS2VNZW1v
cnlCYXJyaWVyKCk7CisgICAgKytSaW5nLT5Gcm9udC5yZXFfcHJvZF9wdnQ7CiAKLSAgICBmb3Ig
KEluZGV4ID0gMDsKLSAgICAgICAgICAgIEluZGV4IDwgQkxLSUZfTUFYX0lORElSRUNUX1BBR0VT
X1BFUl9SRVFVRVNUICYmCi0gICAgICAgICAgICBOclNlZ21lbnRzIDwgUmVxdWVzdC0+TnJTZWdt
ZW50czsKLSAgICAgICAgICAgICAgICArK0luZGV4KSB7Ci0gICAgICAgIFBYRU5WQkRfSU5ESVJF
Q1QgICAgSW5kaXJlY3Q7CisgICAgUklOR19QVVNIX1JFUVVFU1RTX0FORF9DSEVDS19OT1RJRlko
JlJpbmctPkZyb250LCBOb3RpZnkpOworICAgIEtlUmVsZWFzZVNwaW5Mb2NrKCZSaW5nLT5Mb2Nr
LCBJcnFsKTsKIAotICAgICAgICBJbmRpcmVjdCA9IFByb3RvY29sR2V0SW5kaXJlY3QoUHJvdG9j
b2wpOwotICAgICAgICBpZiAoSW5kaXJlY3QgPT0gTlVMTCkKLSAgICAgICAgICAgIGdvdG8gZmFp
bDE7Ci0gICAgICAgIEluc2VydFRhaWxMaXN0KCZSZXF1ZXN0LT5JbmRpcmVjdHMsICZJbmRpcmVj
dC0+TGlzdEVudHJ5KTsKKyAgICBpZiAoTm90aWZ5KSB7CisgICAgICAgIFByb3RvY29sID0gUmlu
Zy0+UHJvdG9jb2w7CisgICAgICAgIGlmICghUHJvdG9jb2wtPkVuYWJsZWQpCisgICAgICAgICAg
ICByZXR1cm4gVFJVRTsKIAotICAgICAgICBOclNlZ21lbnRzICs9IFhFTlZCRF9NQVhfU0VHTUVO
VFNfUEVSX1BBR0U7CisgICAgICAgIFhFTkJVU19FVlRDSE4oU2VuZCwKKyAgICAgICAgICAgICAg
ICAgICAgICAmUHJvdG9jb2wtPkV2dGNobkludGVyZmFjZSwKKyAgICAgICAgICAgICAgICAgICAg
ICBSaW5nLT5DaGFubmVsKTsKICAgICB9CiAKICAgICByZXR1cm4gVFJVRTsKLQotZmFpbDE6Ci0g
ICAgcmV0dXJuIEZBTFNFOwogfQogCi1zdGF0aWMgRk9SQ0VJTkxJTkUgVUxPTkcKLVByb3RvY29s
VXNlSW5kaXJlY3QoCi0gICAgSU4gIFBYRU5WQkRfUFJPVE9DT0wgICAgUHJvdG9jb2wsCi0gICAg
SU4gIFVMT05HICAgICAgICAgICBTZWN0b3JzTGVmdAorc3RhdGljIEZPUkNFSU5MSU5FIEJPT0xF
QU4KK1JpbmdTdWJtaXRSZXF1ZXN0cygKKyAgICBJTiAgUFhFTlZCRF9SSU5HICAgIFJpbmcKICAg
ICApCiB7Ci0gICAgY29uc3QgVUxPTkcgU2VjdG9yc1BlclBhZ2UgPSBfX1Byb3RvY29sU2VjdG9y
c1BlclBhZ2UoRnJvbnRlbmRHZXREaXNrSW5mbyhQcm90b2NvbC0+RnJvbnRlbmQpLT5TZWN0b3JT
aXplKTsKLSAgICBjb25zdCBVTE9ORyBNYXhJbmRpcmVjdFNlZ3MgPSBGcm9udGVuZEdldEZlYXR1
cmVzKFByb3RvY29sLT5Gcm9udGVuZCktPkluZGlyZWN0OwotCi0gICAgaWYgKE1heEluZGlyZWN0
U2VncyA8PSBCTEtJRl9NQVhfU0VHTUVOVFNfUEVSX1JFUVVFU1QpCi0gICAgICAgIHJldHVybiBC
TEtJRl9NQVhfU0VHTUVOVFNfUEVSX1JFUVVFU1Q7IC8vIG5vdCBzdXBwb3J0ZWQKLQotICAgIGlm
IChTZWN0b3JzTGVmdCA8IEJMS0lGX01BWF9TRUdNRU5UU19QRVJfUkVRVUVTVCAqIFNlY3RvcnNQ
ZXJQYWdlKQotICAgICAgICByZXR1cm4gQkxLSUZfTUFYX1NFR01FTlRTX1BFUl9SRVFVRVNUOyAv
LyBmaXJzdCBpbnRvIGEgc2luZ2xlIEJMS0lGX09QX3tSRUFEL1dSSVRFfQorICAgIFBYRU5WQkRf
UFJPVE9DT0wgICAgUHJvdG9jb2wgPSBSaW5nLT5Qcm90b2NvbDsKIAotICAgIHJldHVybiBNYXhJ
bmRpcmVjdFNlZ3M7Ci19CisgICAgaWYgKCFQcm90b2NvbC0+RW5hYmxlZCkgeworICAgICAgICBp
ZiAoUXVldWVDb3VudCgmUmluZy0+UHJlcGFyZWRSZXFzKSkKKyAgICAgICAgICAgIFdhcm5pbmco
IlRhcmdldFslZF1bJXVdIDogUGF1c2VkLCBub3Qgc3VibWl0dGluZyBuZXcgcmVxdWVzdHMgKCV1
KVxuIiwKKyAgICAgICAgICAgICAgICAgICAgRnJvbnRlbmRHZXRUYXJnZXRJZChQcm90b2NvbC0+
RnJvbnRlbmQpLAorICAgICAgICAgICAgICAgICAgICBSaW5nLT5JbmRleCwKKyAgICAgICAgICAg
ICAgICAgICAgUXVldWVDb3VudCgmUmluZy0+UHJlcGFyZWRSZXFzKSk7CisgICAgICAgIHJldHVy
biBGQUxTRTsKKyAgICB9CiAKLXN0YXRpYyBGT1JDRUlOTElORSBWT0lECi1Qcm90b2NvbFF1ZXVl
UmVxdWVzdExpc3QoCi0gICAgSU4gIFBYRU5WQkRfUFJPVE9DT0wgICAgUHJvdG9jb2wsCi0gICAg
SU4gIFBMSVNUX0VOVFJZICAgICAgICAgTGlzdAotICAgICkKLXsKICAgICBmb3IgKDs7KSB7CiAg
ICAgICAgIFBYRU5WQkRfUkVRVUVTVCBSZXF1ZXN0OwogICAgICAgICBQTElTVF9FTlRSWSAgICAg
TGlzdEVudHJ5OwogCi0gICAgICAgIExpc3RFbnRyeSA9IFJlbW92ZUhlYWRMaXN0KExpc3QpOwot
ICAgICAgICBpZiAoTGlzdEVudHJ5ID09IExpc3QpCisgICAgICAgIExpc3RFbnRyeSA9IFF1ZXVl
UG9wKCZSaW5nLT5QcmVwYXJlZFJlcXMpOworICAgICAgICBpZiAoTGlzdEVudHJ5ID09IE5VTEwp
CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBSZXF1ZXN0ID0gQ09OVEFJTklOR19SRUNP
UkQoTGlzdEVudHJ5LCBYRU5WQkRfUkVRVUVTVCwgTGlzdEVudHJ5KTsKLSAgICAgICAgX19Qcm90
b2NvbEluY0Jsa2lmT3BDb3VudChQcm90b2NvbCwgUmVxdWVzdCk7Ci0gICAgICAgIFF1ZXVlQXBw
ZW5kKCZQcm90b2NvbC0+UHJlcGFyZWRSZXFzLCAmUmVxdWVzdC0+TGlzdEVudHJ5KTsKKworICAg
ICAgICBRdWV1ZUFwcGVuZCgmUmluZy0+U3VibWl0dGVkUmVxcywgJlJlcXVlc3QtPkxpc3RFbnRy
eSk7CisgICAgICAgIEtlTWVtb3J5QmFycmllcigpOworCisgICAgICAgIGlmIChSaW5nU3VibWl0
KFJpbmcsIFJlcXVlc3QpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgUXVldWVS
ZW1vdmUoJlJpbmctPlN1Ym1pdHRlZFJlcXMsICZSZXF1ZXN0LT5MaXN0RW50cnkpOworICAgICAg
ICBRdWV1ZVVuUG9wKCZSaW5nLT5QcmVwYXJlZFJlcXMsICZSZXF1ZXN0LT5MaXN0RW50cnkpOwor
ICAgICAgICBicmVhazsKICAgICB9CisKKyAgICByZXR1cm4gUXVldWVDb3VudCgmUmluZy0+UHJl
cGFyZWRSZXFzKSAhPSAwOwogfQogCiBzdGF0aWMgRk9SQ0VJTkxJTkUgVk9JRAotUHJvdG9jb2xD
YW5jZWxSZXF1ZXN0TGlzdCgKLSAgICBJTiAgUFhFTlZCRF9QUk9UT0NPTCAgICBQcm90b2NvbCwK
LSAgICBJTiAgUExJU1RfRU5UUlkgICAgIExpc3QKK1JpbmdDb21wbGV0ZVNodXRkb3duKAorICAg
IElOICBQWEVOVkJEX1JJTkcgICAgUmluZwogICAgICkKIHsKKyAgICBQWEVOVkJEX1BST1RPQ09M
ICAgIFByb3RvY29sOworICAgIFBYRU5WQkRfVEFSR0VUICAgICAgVGFyZ2V0OworICAgIFBYRU5W
QkRfQURBUFRFUiAgICAgQWRhcHRlcjsKKworICAgIGlmIChRdWV1ZUNvdW50KCZSaW5nLT5TaHV0
ZG93blNyYnMpID09IDApCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChRdWV1ZUNvdW50KCZS
aW5nLT5QcmVwYXJlZFJlcXMpIHx8CisgICAgICAgIFF1ZXVlQ291bnQoJlJpbmctPlN1Ym1pdHRl
ZFJlcXMpKQorICAgICAgICByZXR1cm47CisKKyAgICBQcm90b2NvbCA9IFJpbmctPlByb3RvY29s
OworICAgIFRhcmdldCA9IEZyb250ZW5kR2V0VGFyZ2V0KFByb3RvY29sLT5Gcm9udGVuZCk7Cisg
ICAgQWRhcHRlciA9IFRhcmdldEdldEFkYXB0ZXIoVGFyZ2V0KTsKICAgICBmb3IgKDs7KSB7Ci0g
ICAgICAgIFBYRU5WQkRfUkVRVUVTVCBSZXF1ZXN0OwotICAgICAgICBQTElTVF9FTlRSWSAgICAg
TGlzdEVudHJ5OworICAgICAgICBQWEVOVkJEX1NSQkVYVCAgICAgIFNyYkV4dDsKKyAgICAgICAg
UFNDU0lfUkVRVUVTVF9CTE9DSyBTcmI7CisgICAgICAgIFBMSVNUX0VOVFJZICAgICAgICAgTGlz
dEVudHJ5OwogCi0gICAgICAgIExpc3RFbnRyeSA9IFJlbW92ZUhlYWRMaXN0KExpc3QpOwotICAg
ICAgICBpZiAoTGlzdEVudHJ5ID09IExpc3QpCisgICAgICAgIExpc3RFbnRyeSA9IFF1ZXVlUG9w
KCZSaW5nLT5TaHV0ZG93blNyYnMpOworICAgICAgICBpZiAoTGlzdEVudHJ5ID09IE5VTEwpCiAg
ICAgICAgICAgICBicmVhazsKLQotICAgICAgICBSZXF1ZXN0ID0gQ09OVEFJTklOR19SRUNPUkQo
TGlzdEVudHJ5LCBYRU5WQkRfUkVRVUVTVCwgTGlzdEVudHJ5KTsKLSAgICAgICAgUHJvdG9jb2xQ
dXRSZXF1ZXN0KFByb3RvY29sLCBSZXF1ZXN0KTsKLSAgICB9Ci19Ci0KLXN0YXRpYyBCT09MRUFO
Ci1Qcm90b2NvbFByZXBhcmVSZWFkV3JpdGUoCi0gICAgSU4gIFBYRU5WQkRfUFJPVE9DT0wgICAg
ICAgIFByb3RvY29sLAotICAgIElOICBQWEVOVkJEX1NSQkVYVCAgICAgIFNyYkV4dAotICAgICkK
LXsKLSAgICBQU0NTSV9SRVFVRVNUX0JMT0NLICAgICBTcmIgPSBTcmJFeHQtPlNyYjsKLSAgICBV
TE9ORzY0ICAgICAgICAgICAgICAgICBTZWN0b3JTdGFydCA9IENkYl9Mb2dpY2FsQmxvY2soU3Ji
KTsKLSAgICBVTE9ORyAgICAgICAgICAgICAgICAgICBTZWN0b3JzTGVmdCA9IENkYl9UcmFuc2Zl
ckJsb2NrKFNyYik7Ci0gICAgTElTVF9FTlRSWSAgICAgICAgICAgICAgTGlzdDsKLQotICAgIFNy
Yi0+U3JiU3RhdHVzID0gU1JCX1NUQVRVU19QRU5ESU5HOwotCi0gICAgSW5pdGlhbGl6ZUxpc3RI
ZWFkKCZMaXN0KTsKLSAgICBTcmJFeHQtPlJlcXVlc3RDb3VudCA9IDA7Ci0KLSAgICB3aGlsZSAo
U2VjdG9yc0xlZnQgPiAwKSB7Ci0gICAgICAgIFVMT05HICAgICAgICAgICBNYXhTZWdtZW50czsK
LSAgICAgICAgVUxPTkcgICAgICAgICAgIFNlY3RvcnNEb25lID0gMDsKLSAgICAgICAgUFhFTlZC
RF9SRVFVRVNUIFJlcXVlc3Q7Ci0KLSAgICAgICAgUmVxdWVzdCA9IFByb3RvY29sR2V0UmVxdWVz
dChQcm90b2NvbCk7Ci0gICAgICAgIGlmIChSZXF1ZXN0ID09IE5VTEwpCi0gICAgICAgICAgICBn
b3RvIGZhaWwxOwotICAgICAgICBJbnNlcnRUYWlsTGlzdCgmTGlzdCwgJlJlcXVlc3QtPkxpc3RF
bnRyeSk7Ci0gICAgICAgIEludGVybG9ja2VkSW5jcmVtZW50KCZTcmJFeHQtPlJlcXVlc3RDb3Vu
dCk7Ci0KLSAgICAgICAgUmVxdWVzdC0+U3JiRXh0ID0gU3JiRXh0OwotICAgICAgICBNYXhTZWdt
ZW50cyA9IFByb3RvY29sVXNlSW5kaXJlY3QoUHJvdG9jb2wsIFNlY3RvcnNMZWZ0KTsKLQotICAg
ICAgICBpZiAoIVByb3RvY29sUHJlcGFyZUJsa2lmUmVhZFdyaXRlKFByb3RvY29sLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFNyYkV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIE1heFNlZ21lbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgU2VjdG9yU3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBTZWN0b3JzTGVmdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICZTZWN0b3JzRG9uZSkpCi0gICAgICAgICAgICBnb3RvIGZhaWwyOwotCi0gICAgICAgIGlm
IChNYXhTZWdtZW50cyA+IEJMS0lGX01BWF9TRUdNRU5UU19QRVJfUkVRVUVTVCkgewotICAgICAg
ICAgICAgaWYgKCFQcm90b2NvbFByZXBhcmVCbGtpZkluZGlyZWN0KFByb3RvY29sLCBSZXF1ZXN0
KSkKLSAgICAgICAgICAgICAgICBnb3RvIGZhaWwzOwotICAgICAgICB9Ci0KLSAgICAgICAgU2Vj
dG9yc0xlZnQgLT0gU2VjdG9yc0RvbmU7Ci0gICAgICAgIFNlY3RvclN0YXJ0ICs9IFNlY3RvcnNE
b25lOwotICAgIH0KLQotICAgIFByb3RvY29sUXVldWVSZXF1ZXN0TGlzdChQcm90b2NvbCwgJkxp
c3QpOwotICAgIHJldHVybiBUUlVFOwotCi1mYWlsMzoKLWZhaWwyOgotZmFpbDE6Ci0gICAgUHJv
dG9jb2xDYW5jZWxSZXF1ZXN0TGlzdChQcm90b2NvbCwgJkxpc3QpOwotICAgIFNyYkV4dC0+UmVx
dWVzdENvdW50ID0gMDsKLSAgICBTcmItPlNyYlN0YXR1cyA9IFNSQl9TVEFUVVNfRVJST1I7Ci0g
ICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgQk9PTEVBTgotUHJvdG9jb2xQcmVwYXJlU3lu
Y0NhY2hlKAotICAgIElOICBQWEVOVkJEX1BST1RPQ09MICAgICAgICBQcm90b2NvbCwKLSAgICBJ
TiAgUFhFTlZCRF9TUkJFWFQgICAgICBTcmJFeHQKLSAgICApCi17Ci0gICAgUFNDU0lfUkVRVUVT
VF9CTE9DSyAgICAgU3JiID0gU3JiRXh0LT5TcmI7Ci0gICAgUFhFTlZCRF9SRVFVRVNUICAgICAg
ICAgUmVxdWVzdDsKLSAgICBMSVNUX0VOVFJZICAgICAgICAgICAgICBMaXN0OwotICAgIFVDSEFS
ICAgICAgICAgICAgICAgICAgIE9wZXJhdGlvbjsKLQotICAgIFNyYi0+U3JiU3RhdHVzID0gU1JC
X1NUQVRVU19QRU5ESU5HOwotCi0gICAgaWYgKEZyb250ZW5kR2V0RGlza0luZm8oUHJvdG9jb2wt
PkZyb250ZW5kKS0+Rmx1c2hDYWNoZSkKLSAgICAgICAgT3BlcmF0aW9uID0gQkxLSUZfT1BfRkxV
U0hfRElTS0NBQ0hFOwotICAgIGVsc2UKLSAgICAgICAgT3BlcmF0aW9uID0gQkxLSUZfT1BfV1JJ
VEVfQkFSUklFUjsKLQotICAgIEluaXRpYWxpemVMaXN0SGVhZCgmTGlzdCk7Ci0gICAgU3JiRXh0
LT5SZXF1ZXN0Q291bnQgPSAwOwotCi0gICAgUmVxdWVzdCA9IFByb3RvY29sR2V0UmVxdWVzdChQ
cm90b2NvbCk7Ci0gICAgaWYgKFJlcXVlc3QgPT0gTlVMTCkKLSAgICAgICAgZ290byBmYWlsMTsK
LSAgICBJbnNlcnRUYWlsTGlzdCgmTGlzdCwgJlJlcXVlc3QtPkxpc3RFbnRyeSk7Ci0gICAgSW50
ZXJsb2NrZWRJbmNyZW1lbnQoJlNyYkV4dC0+UmVxdWVzdENvdW50KTsKLQotICAgIFJlcXVlc3Qt
PlNyYkV4dCAgICAgPSBTcmJFeHQ7Ci0gICAgUmVxdWVzdC0+T3BlcmF0aW9uICA9IE9wZXJhdGlv
bjsKLSAgICBSZXF1ZXN0LT5GaXJzdFNlY3RvciA9IENkYl9Mb2dpY2FsQmxvY2soU3JiKTsKLQot
ICAgIFByb3RvY29sUXVldWVSZXF1ZXN0TGlzdChQcm90b2NvbCwgJkxpc3QpOwotICAgIHJldHVy
biBUUlVFOwotCi1mYWlsMToKLSAgICBQcm90b2NvbENhbmNlbFJlcXVlc3RMaXN0KFByb3RvY29s
LCAmTGlzdCk7Ci0gICAgU3JiRXh0LT5SZXF1ZXN0Q291bnQgPSAwOwotICAgIFNyYi0+U3JiU3Rh
dHVzID0gU1JCX1NUQVRVU19FUlJPUjsKLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyBC
T09MRUFOCi1Qcm90b2NvbFByZXBhcmVVbm1hcCgKLSAgICBJTiAgUFhFTlZCRF9QUk9UT0NPTCAg
ICAgICAgUHJvdG9jb2wsCi0gICAgSU4gIFBYRU5WQkRfU1JCRVhUICAgICAgU3JiRXh0Ci0gICAg
KQotewotICAgIFBTQ1NJX1JFUVVFU1RfQkxPQ0sgICAgIFNyYiA9IFNyYkV4dC0+U3JiOwotICAg
IFBVTk1BUF9MSVNUX0hFQURFUiAgICAgIFVubWFwID0gU3JiLT5EYXRhQnVmZmVyOwotCVVMT05H
ICAgICAgICAgICAgICAgICAgIENvdW50ID0gX2J5dGVzd2FwX3VzaG9ydCgqKFBVU0hPUlQpVW5t
YXAtPkJsb2NrRGVzY3JEYXRhTGVuZ3RoKSAvIHNpemVvZihVTk1BUF9CTE9DS19ERVNDUklQVE9S
KTsKLSAgICBVTE9ORyAgICAgICAgICAgICAgICAgICBJbmRleDsKLSAgICBMSVNUX0VOVFJZICAg
ICAgICAgICAgICBMaXN0OwotCi0gICAgU3JiLT5TcmJTdGF0dXMgPSBTUkJfU1RBVFVTX1BFTkRJ
Tkc7Ci0KLSAgICBJbml0aWFsaXplTGlzdEhlYWQoJkxpc3QpOwotICAgIFNyYkV4dC0+UmVxdWVz
dENvdW50ID0gMDsKLQotICAgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IENvdW50OyArK0luZGV4
KSB7Ci0gICAgICAgIFBVTk1BUF9CTE9DS19ERVNDUklQVE9SIERlc2NyID0gJlVubWFwLT5EZXNj
cmlwdG9yc1tJbmRleF07Ci0gICAgICAgIFBYRU5WQkRfUkVRVUVTVCAgICAgICAgIFJlcXVlc3Q7
Ci0KLSAgICAgICAgUmVxdWVzdCA9IFByb3RvY29sR2V0UmVxdWVzdChQcm90b2NvbCk7Ci0gICAg
ICAgIGlmIChSZXF1ZXN0ID09IE5VTEwpCi0gICAgICAgICAgICBnb3RvIGZhaWwxOwotICAgICAg
ICBJbnNlcnRUYWlsTGlzdCgmTGlzdCwgJlJlcXVlc3QtPkxpc3RFbnRyeSk7Ci0gICAgICAgIElu
dGVybG9ja2VkSW5jcmVtZW50KCZTcmJFeHQtPlJlcXVlc3RDb3VudCk7Ci0KLSAgICAgICAgUmVx
dWVzdC0+U3JiRXh0ICAgICAgICAgPSBTcmJFeHQ7Ci0gICAgICAgIFJlcXVlc3QtPk9wZXJhdGlv
biAgICAgID0gQkxLSUZfT1BfRElTQ0FSRDsKLSAgICAgICAgUmVxdWVzdC0+Rmlyc3RTZWN0b3Ig
ICAgPSBfYnl0ZXN3YXBfdWludDY0KCooUFVMT05HNjQpRGVzY3ItPlN0YXJ0aW5nTGJhKTsKLSAg
ICAgICAgUmVxdWVzdC0+TnJTZWN0b3JzICAgICAgPSBfYnl0ZXN3YXBfdWxvbmcoKihQVUxPTkcp
RGVzY3ItPkxiYUNvdW50KTsKLSAgICAgICAgUmVxdWVzdC0+RmxhZ3MgICAgICAgICAgPSAwOwot
ICAgIH0KLQotICAgIFByb3RvY29sUXVldWVSZXF1ZXN0TGlzdChQcm90b2NvbCwgJkxpc3QpOwot
ICAgIHJldHVybiBUUlVFOwotCi1mYWlsMToKLSAgICBQcm90b2NvbENhbmNlbFJlcXVlc3RMaXN0
KFByb3RvY29sLCAmTGlzdCk7Ci0gICAgU3JiRXh0LT5SZXF1ZXN0Q291bnQgPSAwOwotICAgIFNy
Yi0+U3JiU3RhdHVzID0gU1JCX1NUQVRVU19FUlJPUjsKLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0K
LXN0YXRpYyBGT1JDRUlOTElORSBCT09MRUFOCi1Qcm90b2NvbFByZXBhcmVSZXF1ZXN0KAotICAg
IElOICBQWEVOVkJEX1BST1RPQ09MICAgIFByb3RvY29sLAotICAgIElOICBQWEVOVkJEX1NSQkVY
VCAgU3JiRXh0Ci0gICAgKQotewotICAgIHN3aXRjaCAoQ2RiX09wZXJhdGlvbkV4KFNyYkV4dC0+
U3JiKSkgewotICAgIGNhc2UgU0NTSU9QX1JFQUQ6Ci0gICAgY2FzZSBTQ1NJT1BfV1JJVEU6Ci0g
ICAgICAgIHJldHVybiBQcm90b2NvbFByZXBhcmVSZWFkV3JpdGUoUHJvdG9jb2wsIFNyYkV4dCk7
Ci0KLSAgICBjYXNlIFNDU0lPUF9TWU5DSFJPTklaRV9DQUNIRToKLSAgICAgICAgcmV0dXJuIFBy
b3RvY29sUHJlcGFyZVN5bmNDYWNoZShQcm90b2NvbCwgU3JiRXh0KTsKLQotICAgIGNhc2UgU0NT
SU9QX1VOTUFQOgotICAgICAgICByZXR1cm4gUHJvdG9jb2xQcmVwYXJlVW5tYXAoUHJvdG9jb2ws
IFNyYkV4dCk7Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlQoRkFMU0UpOwotICAgICAg
ICByZXR1cm4gRkFMU0U7Ci0gICAgfQotfQotCi1zdGF0aWMgQk9PTEVBTgotUHJvdG9jb2xTdWJt
aXQoCi0gICAgSU4gIFBYRU5WQkRfUFJPVE9DT0wgICAgUHJvdG9jb2wsCi0gICAgSU4gIFBYRU5W
QkRfUkVRVUVTVCBSZXF1ZXN0Ci0gICAgKQotewotICAgIEtJUlFMICAgICAgICAgICAgICAgSXJx
bDsKLSAgICBibGtpZl9yZXF1ZXN0X3QqICAgIHJlcTsKLSAgICBCT09MRUFOICAgICAgICAgICAg
IE5vdGlmeTsKLQotICAgIEtlQWNxdWlyZVNwaW5Mb2NrKCZQcm90b2NvbC0+TG9jaywgJklycWwp
OwotICAgIGlmIChSSU5HX0ZVTEwoJlByb3RvY29sLT5Gcm9udCkpIHsKLSAgICAgICAgS2VSZWxl
YXNlU3BpbkxvY2soJlByb3RvY29sLT5Mb2NrLCBJcnFsKTsKLSAgICAgICAgcmV0dXJuIEZBTFNF
OwotICAgIH0KLQotICAgIHJlcSA9IFJJTkdfR0VUX1JFUVVFU1QoJlByb3RvY29sLT5Gcm9udCwg
UHJvdG9jb2wtPkZyb250LnJlcV9wcm9kX3B2dCk7Ci0gICAgX19Qcm90b2NvbEluc2VydChQcm90
b2NvbCwgUmVxdWVzdCwgcmVxKTsKLSAgICBLZU1lbW9yeUJhcnJpZXIoKTsKLSAgICArK1Byb3Rv
Y29sLT5Gcm9udC5yZXFfcHJvZF9wdnQ7Ci0KLSAgICBSSU5HX1BVU0hfUkVRVUVTVFNfQU5EX0NI
RUNLX05PVElGWSgmUHJvdG9jb2wtPkZyb250LCBOb3RpZnkpOwotICAgIEtlUmVsZWFzZVNwaW5M
b2NrKCZQcm90b2NvbC0+TG9jaywgSXJxbCk7Ci0KLSAgICBpZiAoTm90aWZ5KSB7Ci0gICAgICAg
IGlmICghUHJvdG9jb2wtPkVuYWJsZWQpCi0gICAgICAgICAgICByZXR1cm4gVFJVRTsKLQotICAg
ICAgICBYRU5CVVNfRVZUQ0hOKFNlbmQsCi0gICAgICAgICAgICAgICAgICAgICAgJlByb3RvY29s
LT5FdnRjaG5JbnRlcmZhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgUHJvdG9jb2wtPkNoYW5u
ZWwpOwotICAgIH0KLQotICAgIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgRk9SQ0VJTkxJTkUg
Qk9PTEVBTgotUHJvdG9jb2xTdWJtaXRSZXF1ZXN0cygKLSAgICBJTiAgUFhFTlZCRF9QUk9UT0NP
TCAgICBQcm90b2NvbAotICAgICkKLXsKLSAgICBpZiAoIVByb3RvY29sLT5FbmFibGVkKSB7Ci0g
ICAgICAgIGlmIChRdWV1ZUNvdW50KCZQcm90b2NvbC0+UHJlcGFyZWRSZXFzKSkKLSAgICAgICAg
ICAgIFdhcm5pbmcoIlRhcmdldFslZF0gOiBQYXVzZWQsIG5vdCBzdWJtaXR0aW5nIG5ldyByZXF1
ZXN0cyAoJXUpXG4iLAotICAgICAgICAgICAgICAgICAgICBGcm9udGVuZEdldFRhcmdldElkKFBy
b3RvY29sLT5Gcm9udGVuZCksCi0gICAgICAgICAgICAgICAgICAgIFF1ZXVlQ291bnQoJlByb3Rv
Y29sLT5QcmVwYXJlZFJlcXMpKTsKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLQotICAg
IGZvciAoOzspIHsKLSAgICAgICAgUFhFTlZCRF9SRVFVRVNUIFJlcXVlc3Q7Ci0gICAgICAgIFBM
SVNUX0VOVFJZICAgICBMaXN0RW50cnk7Ci0KLSAgICAgICAgTGlzdEVudHJ5ID0gUXVldWVQb3Ao
JlByb3RvY29sLT5QcmVwYXJlZFJlcXMpOwotICAgICAgICBpZiAoTGlzdEVudHJ5ID09IE5VTEwp
Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBSZXF1ZXN0ID0gQ09OVEFJTklOR19SRUNP
UkQoTGlzdEVudHJ5LCBYRU5WQkRfUkVRVUVTVCwgTGlzdEVudHJ5KTsKLQotICAgICAgICBRdWV1
ZUFwcGVuZCgmUHJvdG9jb2wtPlN1Ym1pdHRlZFJlcXMsICZSZXF1ZXN0LT5MaXN0RW50cnkpOwot
ICAgICAgICBLZU1lbW9yeUJhcnJpZXIoKTsKLQotICAgICAgICBpZiAoUHJvdG9jb2xTdWJtaXQo
UHJvdG9jb2wsIFJlcXVlc3QpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgUXVl
dWVSZW1vdmUoJlByb3RvY29sLT5TdWJtaXR0ZWRSZXFzLCAmUmVxdWVzdC0+TGlzdEVudHJ5KTsK
LSAgICAgICAgUXVldWVVblBvcCgmUHJvdG9jb2wtPlByZXBhcmVkUmVxcywgJlJlcXVlc3QtPkxp
c3RFbnRyeSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiBRdWV1ZUNvdW50
KCZQcm90b2NvbC0+UHJlcGFyZWRSZXFzKSAhPSAwOwotfQotCi1zdGF0aWMgRk9SQ0VJTkxJTkUg
Vk9JRAotUHJvdG9jb2xDb21wbGV0ZVNodXRkb3duKAotICAgIElOICBQWEVOVkJEX1BST1RPQ09M
ICAgIFByb3RvY29sCi0gICAgKQotewotICAgIFBYRU5WQkRfVEFSR0VUICAgICAgVGFyZ2V0Owot
ICAgIFBYRU5WQkRfQURBUFRFUiAgICAgQWRhcHRlcjsKLQotICAgIGlmIChRdWV1ZUNvdW50KCZQ
cm90b2NvbC0+U2h1dGRvd25TcmJzKSA9PSAwKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
UXVldWVDb3VudCgmUHJvdG9jb2wtPlByZXBhcmVkUmVxcykgfHwKLSAgICAgICAgUXVldWVDb3Vu
dCgmUHJvdG9jb2wtPlN1Ym1pdHRlZFJlcXMpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBUYXJn
ZXQgPSBGcm9udGVuZEdldFRhcmdldChQcm90b2NvbC0+RnJvbnRlbmQpOwotICAgIEFkYXB0ZXIg
PSBUYXJnZXRHZXRBZGFwdGVyKFRhcmdldCk7Ci0gICAgZm9yICg7OykgewotICAgICAgICBQWEVO
VkJEX1NSQkVYVCAgICAgIFNyYkV4dDsKLSAgICAgICAgUFNDU0lfUkVRVUVTVF9CTE9DSyBTcmI7
Ci0gICAgICAgIFBMSVNUX0VOVFJZICAgICAgICAgTGlzdEVudHJ5OwotCi0gICAgICAgIExpc3RF
bnRyeSA9IFF1ZXVlUG9wKCZQcm90b2NvbC0+U2h1dGRvd25TcmJzKTsKLSAgICAgICAgaWYgKExp
c3RFbnRyeSA9PSBOVUxMKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIFNyYkV4dCA9IENP
TlRBSU5JTkdfUkVDT1JEKExpc3RFbnRyeSwgWEVOVkJEX1NSQkVYVCwgTGlzdEVudHJ5KTsKLSAg
ICAgICAgU3JiID0gU3JiRXh0LT5TcmI7Ci0gICAgICAgIAotICAgICAgICBTcmItPlNyYlN0YXR1
cyA9IFNSQl9TVEFUVVNfU1VDQ0VTUzsKLSAgICAgICAgQWRhcHRlckNvbXBsZXRlU3JiKEFkYXB0
ZXIsIFNyYkV4dCk7CisgICAgICAgIFNyYkV4dCA9IENPTlRBSU5JTkdfUkVDT1JEKExpc3RFbnRy
eSwgWEVOVkJEX1NSQkVYVCwgTGlzdEVudHJ5KTsKKyAgICAgICAgU3JiID0gU3JiRXh0LT5TcmI7
CisgICAgICAgIAorICAgICAgICBTcmItPlNyYlN0YXR1cyA9IFNSQl9TVEFUVVNfU1VDQ0VTUzsK
KyAgICAgICAgQWRhcHRlckNvbXBsZXRlU3JiKEFkYXB0ZXIsIFNyYkV4dCk7CiAgICAgfQogfQog
CkBAIC0xMDgxLDggKzY4OCw4IEBAIF9fQmxraWZPcGVyYXRpb25OYW1lKAogfQogCiBzdGF0aWMg
Vk9JRAotUHJvdG9jb2xDb21wbGV0ZVJlc3BvbnNlKAotICAgIElOICBQWEVOVkJEX1BST1RPQ09M
ICAgIFByb3RvY29sLAorUmluZ0NvbXBsZXRlUmVzcG9uc2UoCisgICAgSU4gIFBYRU5WQkRfUklO
RyAgICBSaW5nLAogICAgIElOICBVTE9ORzY0ICAgICAgICAgSWQsCiAgICAgSU4gIFNIT1JUICAg
ICAgICAgICBTdGF0dXMKICAgICApCkBAIC0xMDkwLDggKzY5Nyw5IEBAIFByb3RvY29sQ29tcGxl
dGVSZXNwb25zZSgKICAgICBQWEVOVkJEX1JFUVVFU1QgICAgIFJlcXVlc3Q7CiAgICAgUFNDU0lf
UkVRVUVTVF9CTE9DSyBTcmI7CiAgICAgUFhFTlZCRF9TUkJFWFQgICAgICBTcmJFeHQ7CisgICAg
UFhFTlZCRF9QUk9UT0NPTCAgICBQcm90b2NvbCA9IFJpbmctPlByb3RvY29sOwogCi0gICAgUmVx
dWVzdCA9IFByb3RvY29sRmluZFJlcXVlc3QoUHJvdG9jb2wsIElkKTsKKyAgICBSZXF1ZXN0ID0g
UmluZ0ZpbmRSZXF1ZXN0KFJpbmcsIElkKTsKICAgICBpZiAoUmVxdWVzdCA9PSBOVUxMKQogICAg
ICAgICByZXR1cm47CiAKQEAgLTExMDAsNyArNzA4LDcgQEAgUHJvdG9jb2xDb21wbGV0ZVJlc3Bv
bnNlKAogCiAgICAgc3dpdGNoIChTdGF0dXMpIHsKICAgICBjYXNlIEJMS0lGX1JTUF9PS0FZOgot
ICAgICAgICBQcm90b2NvbFJlcXVlc3RDb3B5T3V0cHV0KFJlcXVlc3QpOworICAgICAgIF9fUmVx
dWVzdENvcHlPdXRwdXQoUmVxdWVzdCk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBCTEtJ
Rl9SU1BfRU9QTk9UU1VQUDoKQEAgLTExMTIsOCArNzIwLDkgQEAgUHJvdG9jb2xDb21wbGV0ZVJl
c3BvbnNlKAogCiAgICAgY2FzZSBCTEtJRl9SU1BfRVJST1I6CiAgICAgZGVmYXVsdDoKLSAgICAg
ICAgV2FybmluZygiVGFyZ2V0WyVkXSA6ICVzIEJMS0lGX1JTUF9FUlJPUiAoVGFnICVsbHgpXG4i
LAorICAgICAgICBXYXJuaW5nKCJUYXJnZXRbJWRdWyV1XSA6ICVzIEJMS0lGX1JTUF9FUlJPUiAo
VGFnICVsbHgpXG4iLAogICAgICAgICAgICAgICAgIEZyb250ZW5kR2V0VGFyZ2V0SWQoUHJvdG9j
b2wtPkZyb250ZW5kKSwKKyAgICAgICAgICAgICAgICBSaW5nLT5JbmRleCwKICAgICAgICAgICAg
ICAgICBfX0Jsa2lmT3BlcmF0aW9uTmFtZShSZXF1ZXN0LT5PcGVyYXRpb24pLAogICAgICAgICAg
ICAgICAgIElkKTsKICAgICAgICAgU3JiLT5TcmJTdGF0dXMgPSBTUkJfU1RBVFVTX0VSUk9SOwpA
QCAtMTE0MiwxNCArNzUxLDE1IEBAIFByb3RvY29sQ29tcGxldGVSZXNwb25zZSgKIH0KIAogc3Rh
dGljIEJPT0xFQU4KLVByb3RvY29sUG9sbCgKLSAgICBJTiAgUFhFTlZCRF9QUk9UT0NPTCAgICBQ
cm90b2NvbAorUmluZ1BvbGwoCisgICAgSU4gIFBYRU5WQkRfUklORyAgICBSaW5nCiAgICAgKQog
eworICAgIFBYRU5WQkRfUFJPVE9DT0wgICAgUHJvdG9jb2wgPSBSaW5nLT5Qcm90b2NvbDsKICAg
ICBCT09MRUFOICAgICAgICAgICAgIFJldHJ5ID0gRkFMU0U7CiAKICAgICBBU1NFUlQzVShLZUdl
dEN1cnJlbnRJcnFsKCksID09LCBESVNQQVRDSF9MRVZFTCk7Ci0gICAgS2VBY3F1aXJlU3Bpbkxv
Y2tBdERwY0xldmVsKCZQcm90b2NvbC0+TG9jayk7CisgICAgS2VBY3F1aXJlU3BpbkxvY2tBdERw
Y0xldmVsKCZSaW5nLT5Mb2NrKTsKIAogICAgIC8vIEd1YXJkIGFnYWluc3QgdGhpcyBsb2NrZWQg
cmVnaW9uIGJlaW5nIGNhbGxlZCBhZnRlciB0aGUKICAgICAvLyBsb2NrIG9uIEZyb250ZW5kU2V0
U3RhdGUKQEAgLTExNjIsOCArNzcyLDggQEAgUHJvdG9jb2xQb2xsKAogCiAgICAgICAgIEtlTWVt
b3J5QmFycmllcigpOwogCi0gICAgICAgIHJzcF9wcm9kID0gUHJvdG9jb2wtPlNoYXJlZC0+cnNw
X3Byb2Q7Ci0gICAgICAgIHJzcF9jb25zID0gUHJvdG9jb2wtPkZyb250LnJzcF9jb25zOworICAg
ICAgICByc3BfcHJvZCA9IFJpbmctPlNoYXJlZC0+cnNwX3Byb2Q7CisgICAgICAgIHJzcF9jb25z
ID0gUmluZy0+RnJvbnQucnNwX2NvbnM7CiAKICAgICAgICAgS2VNZW1vcnlCYXJyaWVyKCk7CiAK
QEAgLTExNzMsMTA1ICs3ODMsMTAxOCBAQCBQcm90b2NvbFBvbGwoCiAgICAgICAgIHdoaWxlIChy
c3BfY29ucyAhPSByc3BfcHJvZCAmJiAhUmV0cnkpIHsKICAgICAgICAgICAgIGJsa2lmX3Jlc3Bv
bnNlX3QqICAgcnNwOwogCi0gICAgICAgICAgICByc3AgPSBSSU5HX0dFVF9SRVNQT05TRSgmUHJv
dG9jb2wtPkZyb250LCByc3BfY29ucyk7CisgICAgICAgICAgICByc3AgPSBSSU5HX0dFVF9SRVNQ
T05TRSgmUmluZy0+RnJvbnQsIHJzcF9jb25zKTsKICAgICAgICAgICAgICsrcnNwX2NvbnM7Ci0g
ICAgICAgICAgICArK1Byb3RvY29sLT5SZWNlaXZlZDsKKyAgICAgICAgICAgICsrUmluZy0+UmVj
ZWl2ZWQ7CiAKLSAgICAgICAgICAgIFByb3RvY29sQ29tcGxldGVSZXNwb25zZShQcm90b2NvbCwg
cnNwLT5pZCwgcnNwLT5zdGF0dXMpOworICAgICAgICAgICAgUmluZ0NvbXBsZXRlUmVzcG9uc2Uo
UmluZywgcnNwLT5pZCwgcnNwLT5zdGF0dXMpOwogICAgICAgICAgICAgUnRsWmVyb01lbW9yeShy
c3AsIHNpemVvZih1bmlvbiBibGtpZl9zcmluZ19lbnRyeSkpOwogCi0gICAgICAgICAgICBpZiAo
cnNwX2NvbnMgLSBQcm90b2NvbC0+RnJvbnQucnNwX2NvbnMgPiBSSU5HX1NJWkUoJlByb3RvY29s
LT5Gcm9udCkgLyA0KQorICAgICAgICAgICAgaWYgKHJzcF9jb25zIC0gUmluZy0+RnJvbnQucnNw
X2NvbnMgPiBSSU5HX1NJWkUoJlJpbmctPkZyb250KSAvIDQpCiAgICAgICAgICAgICAgICAgUmV0
cnkgPSBUUlVFOwogICAgICAgICB9CiAKICAgICAgICAgS2VNZW1vcnlCYXJyaWVyKCk7CiAKLSAg
ICAgICAgUHJvdG9jb2wtPkZyb250LnJzcF9jb25zID0gcnNwX2NvbnM7Ci0gICAgICAgIFByb3Rv
Y29sLT5TaGFyZWQtPnJzcF9ldmVudCA9IHJzcF9jb25zICsgMTsKKyAgICAgICAgUmluZy0+RnJv
bnQucnNwX2NvbnMgPSByc3BfY29uczsKKyAgICAgICAgUmluZy0+U2hhcmVkLT5yc3BfZXZlbnQg
PSByc3BfY29ucyArIDE7CiAgICAgfQogCiBkb25lOgotICAgIEtlUmVsZWFzZVNwaW5Mb2NrRnJv
bURwY0xldmVsKCZQcm90b2NvbC0+TG9jayk7CisgICAgS2VSZWxlYXNlU3BpbkxvY2tGcm9tRHBj
TGV2ZWwoJlJpbmctPkxvY2spOwogCiAgICAgcmV0dXJuIFJldHJ5OwogfQogCiBfX2Rydl9yZXF1
aXJlc0lSUUwoRElTUEFUQ0hfTEVWRUwpCiBzdGF0aWMgQk9PTEVBTgotUHJvdG9jb2xOb3RpZnlS
ZXNwb25zZXMoCi0gICAgSU4gIFBYRU5WQkRfUFJPVE9DT0wgICAgUHJvdG9jb2wKK1JpbmdOb3Rp
ZnlSZXNwb25zZXMoCisgICAgSU4gIFBYRU5WQkRfUklORyAgICBSaW5nCiAgICAgKQogeworICAg
IFBYRU5WQkRfUFJPVE9DT0wgICAgUHJvdG9jb2wgPSBSaW5nLT5Qcm90b2NvbDsKICAgICBCT09M
RUFOICAgICAgICAgICAgIFJldHJ5ID0gRkFMU0U7CiAKICAgICBpZiAoIVByb3RvY29sLT5FbmFi
bGVkKQogICAgICAgICByZXR1cm4gRkFMU0U7CiAKLSAgICBSZXRyeSB8PSBQcm90b2NvbFBvbGwo
UHJvdG9jb2wpOwotICAgIFJldHJ5IHw9IFByb3RvY29sU3VibWl0UmVxdWVzdHMoUHJvdG9jb2wp
OworICAgIFJldHJ5IHw9IFJpbmdQb2xsKFJpbmcpOworICAgIFJldHJ5IHw9IFJpbmdTdWJtaXRS
ZXF1ZXN0cyhSaW5nKTsKIAotICAgIFByb3RvY29sQ29tcGxldGVTaHV0ZG93bihQcm90b2NvbCk7
CisgICAgUmluZ0NvbXBsZXRlU2h1dGRvd24oUmluZyk7CiAgICAgcmV0dXJuIFJldHJ5OwogfQog
Ci1LU0VSVklDRV9ST1VUSU5FICAgIFByb3RvY29sSW50ZXJydXB0OworS1NFUlZJQ0VfUk9VVElO
RSAgICBSaW5nSW50ZXJydXB0OwogCiBCT09MRUFOCi1Qcm90b2NvbEludGVycnVwdCgKK1JpbmdJ
bnRlcnJ1cHQoCiAgICAgSU4gIFBLSU5URVJSVVBUIEludGVycnVwdCwKICAgICBJTiAgUFZPSUQg
ICAgICAgQ29udGV4dAogICAgICkKIHsKLSAgICBQWEVOVkJEX1BST1RPQ09MICAgIFByb3RvY29s
ID0gQ29udGV4dDsKKyAgICBQWEVOVkJEX1JJTkcgICAgUmluZyA9IENvbnRleHQ7CisgICAgUFhF
TlZCRF9QUk9UT0NPTCBQcm90b2NvbDsKIAogICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoSW50
ZXJydXB0KTsKIAorICAgIEFTU0VSVChSaW5nICE9IE5VTEwpOworICAgIFByb3RvY29sID0gUmlu
Zy0+UHJvdG9jb2w7CiAgICAgQVNTRVJUKFByb3RvY29sICE9IE5VTEwpOwogCi0gICAgKytQcm90
b2NvbC0+RXZlbnRzOworICAgICsrUmluZy0+RXZlbnRzOwogICAgIGlmICghUHJvdG9jb2wtPkNv
bm5lY3RlZCkKICAgICAgICAgcmV0dXJuIFRSVUU7CiAKLSAgICBpZiAoS2VJbnNlcnRRdWV1ZURw
YygmUHJvdG9jb2wtPkRwYywgTlVMTCwgTlVMTCkpCi0gICAgICAgICsrUHJvdG9jb2wtPkRwY3M7
CisgICAgaWYgKEtlSW5zZXJ0UXVldWVEcGMoJlJpbmctPkRwYywgTlVMTCwgTlVMTCkpCisgICAg
ICAgICsrUmluZy0+RHBjczsKIAogICAgIHJldHVybiBUUlVFOwogfQogCi1LREVGRVJSRURfUk9V
VElORSBQcm90b2NvbERwYzsKK0tERUZFUlJFRF9ST1VUSU5FIFJpbmdEcGM7CiAKIFZPSUQKLVBy
b3RvY29sRHBjKAorUmluZ0RwYygKICAgICBfX2luICBQS0RQQyAgICAgRHBjLAogICAgIF9faW5f
b3B0IFBWT0lEICBDb250ZXh0LAogICAgIF9faW5fb3B0IFBWT0lEICBBcmcxLAogICAgIF9faW5f
b3B0IFBWT0lEICBBcmcyCiAgICAgKQogewotICAgIFBYRU5WQkRfUFJPVE9DT0wgICAgUHJvdG9j
b2wgPSBDb250ZXh0OworICAgIFBYRU5WQkRfUklORyAgICBSaW5nID0gQ29udGV4dDsKKyAgICBQ
WEVOVkJEX1BST1RPQ09MIFByb3RvY29sOwogCiAgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihE
cGMpOwogICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoQXJnMSk7CiAgICAgVU5SRUZFUkVOQ0VE
X1BBUkFNRVRFUihBcmcyKTsKIAorICAgIEFTU0VSVChSaW5nICE9IE5VTEwpOworICAgIFByb3Rv
Y29sID0gUmluZy0+UHJvdG9jb2w7CiAgICAgQVNTRVJUKFByb3RvY29sICE9IE5VTEwpOwogCiAg
ICAgZm9yICg7OykgewogICAgICAgICBLSVJRTCAgICAgICBJcnFsOwogICAgICAgICBCT09MRUFO
ICAgICBSZXRyeTsKIAotICAgICAgICBLZVJhaXNlSXJxbChESVNQQVRDSF9MRVZFTCwgJklycWwp
OwotICAgICAgICBSZXRyeSA9IFByb3RvY29sTm90aWZ5UmVzcG9uc2VzKFByb3RvY29sKTsKLSAg
ICAgICAgS2VMb3dlcklycWwoSXJxbCk7CisgICAgICAgIEtlUmFpc2VJcnFsKERJU1BBVENIX0xF
VkVMLCAmSXJxbCk7CisgICAgICAgIFJldHJ5ID0gUmluZ05vdGlmeVJlc3BvbnNlcyhSaW5nKTsK
KyAgICAgICAgS2VMb3dlcklycWwoSXJxbCk7CisKKyAgICAgICAgaWYgKCFSZXRyeSkKKyAgICAg
ICAgICAgIGJyZWFrOworICAgIH0KKworICAgIFhFTkJVU19FVlRDSE4oVW5tYXNrLAorICAgICAg
ICAgICAgICAgICAgJlByb3RvY29sLT5FdnRjaG5JbnRlcmZhY2UsCisgICAgICAgICAgICAgICAg
ICBSaW5nLT5DaGFubmVsLAorICAgICAgICAgICAgICAgICAgRkFMU0UpOworfQorCitzdGF0aWMg
REVDTFNQRUNfTk9JTkxJTkUgVk9JRAorUmluZ0RlYnVnQ2FsbGJhY2soCisgICAgSU4gIFBWT0lE
ICAgICAgIEFyZ3VtZW50LAorICAgIElOICBCT09MRUFOICAgICBDcmFzaGluZworICAgICkKK3sK
KyAgICBQWEVOVkJEX1JJTkcgICAgICAgIFJpbmcgPSBBcmd1bWVudDsKKyAgICBQWEVOVkJEX1BS
T1RPQ09MICAgIFByb3RvY29sID0gUmluZy0+UHJvdG9jb2w7CisgICAgUFhFTlZCRF9HUkFOVEVS
ICAgICBHcmFudGVyID0gRnJvbnRlbmRHZXRHcmFudGVyKFByb3RvY29sLT5Gcm9udGVuZCk7Cisg
ICAgVUxPTkcgICAgICAgICAgICAgICBJbmRleDsKKworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVU
RVIoQ3Jhc2hpbmcpOworCisgICAgWEVOQlVTX0RFQlVHKFByaW50ZiwKKyAgICAgICAgICAgICAg
ICAgJlByb3RvY29sLT5EZWJ1Z0ludGVyZmFjZSwKKyAgICAgICAgICAgICAgICAgIlN1Ym1pdHRl
ZDogJXUgUmVjZWl2ZWQ6ICV1XG4iLAorICAgICAgICAgICAgICAgICBSaW5nLT5TdWJtaXR0ZWQs
CisgICAgICAgICAgICAgICAgIFJpbmctPlJlY2VpdmVkKTsKKworICAgIFhFTkJVU19ERUJVRyhQ
cmludGYsCisgICAgICAgICAgICAgICAgICZQcm90b2NvbC0+RGVidWdJbnRlcmZhY2UsCisgICAg
ICAgICAgICAgICAgICJFdmVudHM6ICV1IERwY3M6ICV1XG4iLAorICAgICAgICAgICAgICAgICBS
aW5nLT5FdmVudHMsCisgICAgICAgICAgICAgICAgIFJpbmctPkRwY3MpOworCisgICAgWEVOQlVT
X0RFQlVHKFByaW50ZiwKKyAgICAgICAgICAgICAgICAgJlByb3RvY29sLT5EZWJ1Z0ludGVyZmFj
ZSwKKyAgICAgICAgICAgICAgICAgIlNoYXJlZCA6IDB4JXBcbiIsCisgICAgICAgICAgICAgICAg
IFJpbmctPlNoYXJlZCk7CisKKyAgICBpZiAoUmluZy0+U2hhcmVkKSB7CisgICAgICAgIFhFTkJV
U19ERUJVRyhQcmludGYsCisgICAgICAgICAgICAgICAgICAgICAmUHJvdG9jb2wtPkRlYnVnSW50
ZXJmYWNlLAorICAgICAgICAgICAgICAgICAgICAgIlNoYXJlZDogJWQgLyAlZCAtICVkIC8gJWRc
biIsCisgICAgICAgICAgICAgICAgICAgICBSaW5nLT5TaGFyZWQtPnJlcV9wcm9kLAorICAgICAg
ICAgICAgICAgICAgICAgUmluZy0+U2hhcmVkLT5yZXFfZXZlbnQsCisgICAgICAgICAgICAgICAg
ICAgICBSaW5nLT5TaGFyZWQtPnJzcF9wcm9kLAorICAgICAgICAgICAgICAgICAgICAgUmluZy0+
U2hhcmVkLT5yc3BfZXZlbnQpOworICAgIH0KKworICAgIFhFTkJVU19ERUJVRyhQcmludGYsCisg
ICAgICAgICAgICAgICAgICZQcm90b2NvbC0+RGVidWdJbnRlcmZhY2UsCisgICAgICAgICAgICAg
ICAgICJGcm9udDogJWQgLyAlZCAoJWQpXG4iLAorICAgICAgICAgICAgICAgICBSaW5nLT5Gcm9u
dC5yZXFfcHJvZF9wdnQsCisgICAgICAgICAgICAgICAgIFJpbmctPkZyb250LnJzcF9jb25zLAor
ICAgICAgICAgICAgICAgICBSaW5nLT5Gcm9udC5ucl9lbnRzKTsKKworICAgIGZvciAoSW5kZXgg
PSAwOyBJbmRleCA8ICgxdWwgPDwgUHJvdG9jb2wtPk9yZGVyKTsgKytJbmRleCkgeworICAgICAg
ICBYRU5CVVNfREVCVUcoUHJpbnRmLAorICAgICAgICAgICAgICAgICAgICAgJlByb3RvY29sLT5E
ZWJ1Z0ludGVyZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICJHcmFudHNbJS0yZF06IDB4JXAg
KCV1KVxuIiwKKyAgICAgICAgICAgICAgICAgICAgIEluZGV4LAorICAgICAgICAgICAgICAgICAg
ICAgUmluZy0+R3JhbnRzW0luZGV4XSwKKyAgICAgICAgICAgICAgICAgICAgIEdyYW50ZXJSZWZl
cmVuY2UoR3JhbnRlciwgUmluZy0+R3JhbnRzW0luZGV4XSkpOworICAgIH0KKworICAgIGlmIChS
aW5nLT5DaGFubmVsKSB7CisgICAgICAgIFVMT05HICAgICAgIFBvcnQgPSBYRU5CVVNfRVZUQ0hO
KEdldFBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQcm90
b2NvbC0+RXZ0Y2huSW50ZXJmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBSaW5nLT5DaGFubmVsKTsKKworICAgICAgICBYRU5CVVNfREVCVUcoUHJpbnRmLAor
ICAgICAgICAgICAgICAgICAgICAgJlByb3RvY29sLT5EZWJ1Z0ludGVyZmFjZSwKKyAgICAgICAg
ICAgICAgICAgICAgICJDaGFubmVsIDogJXAgKCVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAg
IFJpbmctPkNoYW5uZWwsCisgICAgICAgICAgICAgICAgICAgICBQb3J0KTsKKyAgICB9CisKKyAg
ICBYRU5CVVNfREVCVUcoUHJpbnRmLAorICAgICAgICAgICAgICAgICAmUHJvdG9jb2wtPkRlYnVn
SW50ZXJmYWNlLAorICAgICAgICAgICAgICAgICAiQkxLSUZfT1BzOiBSRUFEPSV1IFdSSVRFPSV1
XG4iLAorICAgICAgICAgICAgICAgICBSaW5nLT5CbGtPcFJlYWQsCisgICAgICAgICAgICAgICAg
IFJpbmctPkJsa09wV3JpdGUpOworICAgIFhFTkJVU19ERUJVRyhQcmludGYsCisgICAgICAgICAg
ICAgICAgICZQcm90b2NvbC0+RGVidWdJbnRlcmZhY2UsCisgICAgICAgICAgICAgICAgICJCTEtJ
Rl9PUHM6IElORElSRUNUX1JFQUQ9JXUgSU5ESVJFQ1RfV1JJVEU9JXVcbiIsCisgICAgICAgICAg
ICAgICAgIFJpbmctPkJsa09wSW5kaXJlY3RSZWFkLAorICAgICAgICAgICAgICAgICBSaW5nLT5C
bGtPcEluZGlyZWN0V3JpdGUpOworICAgIFhFTkJVU19ERUJVRyhQcmludGYsCisgICAgICAgICAg
ICAgICAgICZQcm90b2NvbC0+RGVidWdJbnRlcmZhY2UsCisgICAgICAgICAgICAgICAgICJCTEtJ
Rl9PUHM6IEJBUlJJRVI9JXUgRElTQ0FSRD0ldSBGTFVTSD0ldVxuIiwKKyAgICAgICAgICAgICAg
ICAgUmluZy0+QmxrT3BCYXJyaWVyLAorICAgICAgICAgICAgICAgICBSaW5nLT5CbGtPcERpc2Nh
cmQsCisgICAgICAgICAgICAgICAgIFJpbmctPkJsa09wRmx1c2gpOworCisgICAgUXVldWVEZWJ1
Z0NhbGxiYWNrKCZSaW5nLT5QcmVwYXJlZFJlcXMsCisgICAgICAgICAgICAgICAgICAgICAgICJQ
cmVwYXJlZCAiLAorICAgICAgICAgICAgICAgICAgICAgICAmUHJvdG9jb2wtPkRlYnVnSW50ZXJm
YWNlKTsKKyAgICBRdWV1ZURlYnVnQ2FsbGJhY2soJlJpbmctPlN1Ym1pdHRlZFJlcXMsCisgICAg
ICAgICAgICAgICAgICAgICAgICJTdWJtaXR0ZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAm
UHJvdG9jb2wtPkRlYnVnSW50ZXJmYWNlKTsKKyAgICBRdWV1ZURlYnVnQ2FsbGJhY2soJlJpbmct
PlNodXRkb3duU3JicywKKyAgICAgICAgICAgICAgICAgICAgICAgIlNodXRkb3duICIsCisgICAg
ICAgICAgICAgICAgICAgICAgICZQcm90b2NvbC0+RGVidWdJbnRlcmZhY2UpOworfQorCitzdGF0
aWMgTlRTVEFUVVMKK1JpbmdDcmVhdGUoCisgICAgSU4gIFBYRU5WQkRfUFJPVE9DT0wgICAgUHJv
dG9jb2wsCisgICAgSU4gIFVMT05HICAgICAgICAgICAgICAgSW5kZXgsCisgICAgT1VUIFBYRU5W
QkRfUklORyAgICAgICAgKlJpbmcKKyAgICApCit7CisgICAgUFhFTlZCRF9GUk9OVEVORCAgICAg
ICAgRnJvbnRlbmQgPSBQcm90b2NvbC0+RnJvbnRlbmQ7CisgICAgUFJPQ0VTU09SX05VTUJFUiAg
ICAgICAgUHJvY051bWJlcjsKKyAgICBVTE9ORyAgICAgICAgICAgICAgICAgICBMZW5ndGg7Cisg
ICAgTlRTVEFUVVMgICAgICAgICAgICAgICAgc3RhdHVzOworCisgICAgKlJpbmcgPSBfX1Byb3Rv
Y29sQWxsb2NhdGUoc2l6ZW9mKFhFTlZCRF9SSU5HKSk7CisKKyAgICBzdGF0dXMgPSBTVEFUVVNf
Tk9fTUVNT1JZOworICAgIGlmICgqUmluZyA9PSBOVUxMKQorICAgICAgICBnb3RvIGZhaWwxOwor
CisgICAgKCpSaW5nKS0+UHJvdG9jb2wgPSBQcm90b2NvbDsKKyAgICAoKlJpbmcpLT5JbmRleCA9
IEluZGV4OworCisgICAgTGVuZ3RoID0gMSArIChVTE9ORylzdHJsZW4oRnJvbnRlbmRHZXRGcm9u
dGVuZFBhdGgoRnJvbnRlbmQpKSArIChVTE9ORylzdHJsZW4oInF1ZXVlLXh4Iik7CisKKyAgICAo
KlJpbmcpLT5QYXRoID0gX19Qcm90b2NvbEFsbG9jYXRlKHNpemVvZihDSEFSKSAqIExlbmd0aCk7
CisKKyAgICBzdGF0dXMgPSBTVEFUVVNfTk9fTUVNT1JZOworICAgIGlmICgoKlJpbmcpLT5QYXRo
ID09IE5VTEwpCisgICAgICAgIGdvdG8gZmFpbDI7CisKKyAgICBzdGF0dXMgPSBSdGxTdHJpbmdD
Y2hQcmludGZBKCgqUmluZyktPlBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMvcXVldWUtJXUi
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJvbnRlbmRHZXRGcm9udGVuZFBh
dGgoRnJvbnRlbmQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXgpOwor
ICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKQorICAgICAgICBnb3RvIGZhaWwzOworCisgICAg
S2VJbml0aWFsaXplU3BpbkxvY2soJigqUmluZyktPkxvY2spOworCisgICAgS2VJbml0aWFsaXpl
VGhyZWFkZWREcGMoJigqUmluZyktPkRwYywgUmluZ0RwYywgKlJpbmcpOworICAgIEtlU2V0SW1w
b3J0YW5jZURwYygmKCpSaW5nKS0+RHBjLCBNZWRpdW1IaWdoSW1wb3J0YW5jZSk7CisKKyAgICBz
dGF0dXMgPSBLZUdldFByb2Nlc3Nvck51bWJlckZyb21JbmRleChJbmRleCwgJlByb2NOdW1iZXIp
OworICAgIEFTU0VSVChOVF9TVUNDRVNTKHN0YXR1cykpOworCisgICAgS2VTZXRUYXJnZXRQcm9j
ZXNzb3JEcGNFeCgmKCpSaW5nKS0+RHBjLCAmUHJvY051bWJlcik7CisKKyAgICBRdWV1ZUluaXQo
JigqUmluZyktPlByZXBhcmVkUmVxcyk7CisgICAgUXVldWVJbml0KCYoKlJpbmcpLT5TdWJtaXR0
ZWRSZXFzKTsKKyAgICBRdWV1ZUluaXQoJigqUmluZyktPlNodXRkb3duU3Jicyk7CisKKyAgICBy
ZXR1cm4gU1RBVFVTX1NVQ0NFU1M7CisKK2ZhaWwzOgorICAgIEVycm9yKCJmYWlsM1xuIik7Cisg
ICAgX19Qcm90b2NvbEZyZWUoKCpSaW5nKS0+UGF0aCk7CisgICAgKCpSaW5nKS0+UGF0aCA9IE5V
TEw7CitmYWlsMjoKKyAgICBFcnJvcigiZmFpbDJcbiIpOworICAgICgqUmluZyktPkluZGV4ID0g
MDsKKyAgICAoKlJpbmcpLT5Qcm90b2NvbCA9IE5VTEw7CisKKyAgICBBU1NFUlQoSXNaZXJvTWVt
b3J5KCpSaW5nLCBzaXplb2YoWEVOVkJEX1JJTkcpKSk7CisgICAgX19Qcm90b2NvbEZyZWUoKlJp
bmcpOworZmFpbDE6CisgICAgRXJyb3IoImZhaWwxICglMDh4KVxuIiwgc3RhdHVzKTsKKyAgICAq
UmluZyA9IE5VTEw7CisgICAgcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIFZPSUQKK1JpbmdE
ZXN0cm95KAorICAgIElOICBQWEVOVkJEX1JJTkcgICAgUmluZworICAgICkKK3sKKyAgICBSdGxa
ZXJvTWVtb3J5KCZSaW5nLT5QcmVwYXJlZFJlcXMsIHNpemVvZihYRU5WQkRfUVVFVUUpKTsKKyAg
ICBSdGxaZXJvTWVtb3J5KCZSaW5nLT5TdWJtaXR0ZWRSZXFzLCBzaXplb2YoWEVOVkJEX1FVRVVF
KSk7CisgICAgUnRsWmVyb01lbW9yeSgmUmluZy0+U2h1dGRvd25TcmJzLCBzaXplb2YoWEVOVkJE
X1FVRVVFKSk7CisKKyAgICBSdGxaZXJvTWVtb3J5KCZSaW5nLT5EcGMsIHNpemVvZihLRFBDKSk7
CisgICAgUnRsWmVyb01lbW9yeSgmUmluZy0+TG9jaywgc2l6ZW9mKEtTUElOX0xPQ0spKTsKKwor
ICAgIFJpbmctPkJsa09wUmVhZCA9IDA7CisgICAgUmluZy0+QmxrT3BXcml0ZSA9IDA7CisgICAg
UmluZy0+QmxrT3BJbmRpcmVjdFJlYWQgPSAwOworICAgIFJpbmctPkJsa09wSW5kaXJlY3RXcml0
ZSA9IDA7CisgICAgUmluZy0+QmxrT3BCYXJyaWVyID0gMDsKKyAgICBSaW5nLT5CbGtPcERpc2Nh
cmQgPSAwOworICAgIFJpbmctPkJsa09wRmx1c2ggPSAwOworCisgICAgX19Qcm90b2NvbEZyZWUo
UmluZy0+UGF0aCk7CisgICAgUmluZy0+UGF0aCA9IE5VTEw7CisKKyAgICBSaW5nLT5JbmRleCA9
IDA7CisgICAgUmluZy0+UHJvdG9jb2wgPSBOVUxMOworCisgICAgQVNTRVJUKElzWmVyb01lbW9y
eShSaW5nLCBzaXplb2YoWEVOVkJEX1JJTkcpKSk7CisgICAgX19Qcm90b2NvbEZyZWUoUmluZyk7
Cit9CisKK3N0YXRpYyBOVFNUQVRVUworUmluZ0Nvbm5lY3QoCisgICAgSU4gIFBYRU5WQkRfUklO
RyAgICAgICAgUmluZworICAgICkKK3sKKyAgICBQWEVOVkJEX1BST1RPQ09MICAgICAgICBQcm90
b2NvbCA9IFJpbmctPlByb3RvY29sOworICAgIFBYRU5WQkRfR1JBTlRFUiAgICAgICAgIEdyYW50
ZXIgPSBGcm9udGVuZEdldEdyYW50ZXIoUHJvdG9jb2wtPkZyb250ZW5kKTsKKyAgICBDSEFSICAg
ICAgICAgICAgICAgICAgICBOYW1lW01BWF9OQU1FX0xFTiArIDFdOworICAgIFVMT05HICAgICAg
ICAgICAgICAgICAgIEluZGV4OworICAgIE5UU1RBVFVTICAgICAgICAgICAgICAgIHN0YXR1czsK
KworICAgIFJpbmctPk1kbCA9IF9fQWxsb2NhdGVQYWdlcygxIDw8IFByb3RvY29sLT5PcmRlcik7
CisKKyAgICBzdGF0dXMgPSBTVEFUVVNfTk9fTUVNT1JZOworICAgIGlmIChSaW5nLT5NZGwgPT0g
TlVMTCkKKyAgICAgICAgZ290byBmYWlsMTsKKworICAgIFJpbmctPlNoYXJlZCA9IE1tR2V0U3lz
dGVtQWRkcmVzc0Zvck1kbFNhZmUoUmluZy0+TWRsLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgTm9ybWFsUGFnZVByaW9yaXR5KTsKKyAgICBBU1NFUlQo
UmluZy0+U2hhcmVkICE9IE5VTEwpOworCisjcHJhZ21hIHdhcm5pbmcocHVzaCkKKyNwcmFnbWEg
d2FybmluZyhkaXNhYmxlOiA0MzA1KQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQzMTEpIC8v
ICd0eXBlIGNhc3QnIHBvaW50ZXIgdHJ1bmNhdGlvbiBmcm9tICdibGtpZl9zcmluZ19lbnRyeVsx
XScgdG8gJ2xvbmcnCisgICAgU0hBUkVEX1JJTkdfSU5JVChSaW5nLT5TaGFyZWQpOworICAgIEZS
T05UX1JJTkdfSU5JVCgmUmluZy0+RnJvbnQsIFJpbmctPlNoYXJlZCwgUEFHRV9TSVpFIDw8IFBy
b3RvY29sLT5PcmRlcik7CisjcHJhZ21hIHdhcm5pbmcocG9wKQorCisgICAgZm9yIChJbmRleCA9
IDA7IEluZGV4IDwgKDF1bCA8PCBQcm90b2NvbC0+T3JkZXIpOyArK0luZGV4KSB7CisgICAgICAg
IHN0YXR1cyA9IEdyYW50ZXJHZXQoR3JhbnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBNbUdldE1kbFBmbkFycmF5KFJpbmctPk1kbClbSW5kZXhdLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZSaW5nLT5HcmFu
dHNbSW5kZXhdKTsKKyAgICAgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpCisgICAgICAgICAg
ICBnb3RvIGZhaWwyOworICAgIH0KKworICAgIFJpbmctPkNoYW5uZWwgPSBYRU5CVVNfRVZUQ0hO
KE9wZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlByb3RvY29sLT5FdnRj
aG5JbnRlcmZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWEVOQlVTX0VW
VENITl9UWVBFX1VOQk9VTkQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmlu
Z0ludGVycnVwdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSaW5nLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyb250ZW5kR2V0QmFja2VuZERvbWFpbihQ
cm90b2NvbC0+RnJvbnRlbmQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRS
VUUpOworICAgIHN0YXR1cyA9IFNUQVRVU19OT19NRU1PUlk7CisgICAgaWYgKFJpbmctPkNoYW5u
ZWwgPT0gTlVMTCkKKyAgICAgICAgZ290byBmYWlsMzsKKworICAgIFhFTkJVU19FVlRDSE4oVW5t
YXNrLAorICAgICAgICAgICAgICAgICAgJlByb3RvY29sLT5FdnRjaG5JbnRlcmZhY2UsCisgICAg
ICAgICAgICAgICAgICBSaW5nLT5DaGFubmVsLAorICAgICAgICAgICAgICAgICAgRkFMU0UpOwor
CisgICAgc3RhdHVzID0gUnRsU3RyaW5nQ2NoUHJpbnRmQShOYW1lLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTUFYX05BTUVfTEVOLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19NT0RVTEVfXyIlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBSaW5nLT5QYXRoKTsKKyAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkKKyAgICAgICAgZ290
byBmYWlsNDsKKworICAgIHN0YXR1cyA9IFhFTkJVU19ERUJVRyhSZWdpc3RlciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgJlByb3RvY29sLT5EZWJ1Z0ludGVyZmFjZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUmluZ0RlYnVn
Q2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgIFJpbmcsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICZSaW5nLT5EZWJ1Z0NhbGxiYWNrKTsKKyAgICBpZiAoIU5UX1NVQ0NFU1Mo
c3RhdHVzKSkKKyAgICAgICAgZ290byBmYWlsNTsKKworICAgIHJldHVybiBTVEFUVVNfU1VDQ0VT
UzsKKworZmFpbDU6CisgICAgRXJyb3IoImZhaWw1XG4iKTsKK2ZhaWw0OgorICAgIEVycm9yKCJm
YWlsNFxuIik7CisgICAgWEVOQlVTX0VWVENITihDbG9zZSwKKyAgICAgICAgICAgICAgICAgICZQ
cm90b2NvbC0+RXZ0Y2huSW50ZXJmYWNlLAorICAgICAgICAgICAgICAgICAgUmluZy0+Q2hhbm5l
bCk7CisgICAgUmluZy0+Q2hhbm5lbCA9IE5VTEw7CitmYWlsMzoKKyAgICBFcnJvcigiZmFpbDNc
biIpOworZmFpbDI6CisgICAgRXJyb3IoImZhaWwyXG4iKTsKKyAgICBmb3IgKEluZGV4ID0gMDsg
SW5kZXggPCAoMXVsIDw8IFByb3RvY29sLT5PcmRlcik7ICsrSW5kZXgpIHsKKyAgICAgICAgaWYg
KFJpbmctPkdyYW50c1tJbmRleF0gPT0gTlVMTCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgIEdyYW50ZXJQdXQoR3JhbnRlciwgUmluZy0+R3JhbnRzW0luZGV4XSk7CisgICAgICAg
IFJpbmctPkdyYW50c1tJbmRleF0gPSBOVUxMOworICAgIH0KKworICAgIFJ0bFplcm9NZW1vcnko
JlJpbmctPkZyb250LCBzaXplb2YoYmxraWZfZnJvbnRfcmluZ190KSk7CisKKyAgICBfX0ZyZWVQ
YWdlcyhSaW5nLT5NZGwpOworICAgIFJpbmctPlNoYXJlZCA9IE5VTEw7CisgICAgUmluZy0+TWRs
ID0gTlVMTDsKK2ZhaWwxOgorICAgIEVycm9yKCJmYWlsMSAoJTA4eClcbiIsIHN0YXR1cyk7Cisg
ICAgcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIE5UU1RBVFVTCitSaW5nU3RvcmVXcml0ZSgK
KyAgICBJTiAgUFhFTlZCRF9SSU5HICAgIFJpbmcsCisgICAgSU4gIFBWT0lEICAgICAgICAgICBU
cmFuc2FjdGlvbgorICAgICkKK3sKKyAgICBQWEVOVkJEX1BST1RPQ09MICAgIFByb3RvY29sID0g
UmluZy0+UHJvdG9jb2w7CisgICAgUFhFTlZCRF9HUkFOVEVSICAgICBHcmFudGVyID0gRnJvbnRl
bmRHZXRHcmFudGVyKFByb3RvY29sLT5Gcm9udGVuZCk7CisgICAgUENIQVIgICAgICAgICAgICAg
ICBQYXRoOworICAgIFVMT05HICAgICAgICAgICAgICAgUG9ydDsKKyAgICBOVFNUQVRVUyAgICAg
ICAgICAgIHN0YXR1czsKKworICAgIGlmIChGcm9udGVuZEdldE11bHRpUXVldWVNYXhRdWV1ZXMo
UHJvdG9jb2wtPkZyb250ZW5kKSA+IDEpCisgICAgICAgIFBhdGggPSBSaW5nLT5QYXRoOworICAg
IGVsc2UKKyAgICAgICAgUGF0aCA9IEZyb250ZW5kR2V0RnJvbnRlbmRQYXRoKFByb3RvY29sLT5G
cm9udGVuZCk7CisKKyAgICBpZiAoUHJvdG9jb2wtPk9yZGVyID09IDApIHsKKyAgICAgICAgc3Rh
dHVzID0gWEVOQlVTX1NUT1JFKFByaW50ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICZQcm90b2NvbC0+U3RvcmVJbnRlcmZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBUcmFuc2FjdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhdGgsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAicmluZy1yZWYiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIiV1IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyYW50ZXJS
ZWZlcmVuY2UoR3JhbnRlciwgUmluZy0+R3JhbnRzWzBdKSk7CisgICAgICAgIGlmICghTlRfU1VD
Q0VTUyhzdGF0dXMpKQorICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisgICAgZWxz
ZSB7CisgICAgICAgIFVMT05HICAgICAgICAgICBJbmRleDsKKworICAgICAgICBmb3IgKEluZGV4
ID0gMDsgSW5kZXggPCAoMXVsIDw8IFByb3RvY29sLT5PcmRlcik7ICsrSW5kZXgpIHsKKyAgICAg
ICAgICAgIENIQVIgICAgICAgIE5hbWVbTUFYX05BTUVfTEVOICsgMV07CisKKyAgICAgICAgICAg
IHN0YXR1cyA9IFJ0bFN0cmluZ0NjaFByaW50ZkEoTmFtZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTUFYX05BTUVfTEVOLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAicmluZy1yZWYldSIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEluZGV4KTsKKyAgICAgICAgICAgIGlmICghTlRfU1VDQ0VTUyhz
dGF0dXMpKQorICAgICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisKKyAgICAgICAgICAgIHN0
YXR1cyA9IFhFTkJVU19TVE9SRShQcmludGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJlByb3RvY29sLT5TdG9yZUludGVyZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBUcmFuc2FjdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBQYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIiV1IiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHcmFudGVyUmVmZXJlbmNlKEdyYW50ZXIsIFJpbmctPkdyYW50c1tJbmRleF0p
KTsKKyAgICAgICAgICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKQorICAgICAgICAgICAgICAg
IHJldHVybiBzdGF0dXM7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBQb3J0ID0gWEVOQlVTX0VW
VENITihHZXRQb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICZQcm90b2NvbC0+RXZ0Y2hu
SW50ZXJmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgIFJpbmctPkNoYW5uZWwpOworCisg
ICAgc3RhdHVzID0gWEVOQlVTX1NUT1JFKFByaW50ZiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgJlByb3RvY29sLT5TdG9yZUludGVyZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
VHJhbnNhY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgIFBhdGgsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICJldmVudC1jaGFubmVsIiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIiV1IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUG9ydCk7CisgICAgaWYgKCFOVF9T
VUNDRVNTKHN0YXR1cykpCisgICAgICAgIHJldHVybiBzdGF0dXM7CisKKyAgICByZXR1cm4gU1RB
VFVTX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBWT0lECitSaW5nRGlzY29ubmVjdCgKKyAgICBJTiAg
UFhFTlZCRF9SSU5HICAgIFJpbmcKKyAgICApCit7CisgICAgUFhFTlZCRF9QUk9UT0NPTCAgICBQ
cm90b2NvbCA9IFJpbmctPlByb3RvY29sOworICAgIFBYRU5WQkRfR1JBTlRFUiAgICAgR3JhbnRl
ciA9IEZyb250ZW5kR2V0R3JhbnRlcihQcm90b2NvbC0+RnJvbnRlbmQpOworICAgIFVMT05HICAg
ICAgICAgICAgICAgSW5kZXg7CisKKyAgICBBU1NFUlQzVShSaW5nLT5TdWJtaXR0ZWQsID09ICwg
UmluZy0+UmVjZWl2ZWQpOworCisgICAgWEVOQlVTX0RFQlVHKERlcmVnaXN0ZXIsCisgICAgICAg
ICAgICAgICAgICZQcm90b2NvbC0+RGVidWdJbnRlcmZhY2UsCisgICAgICAgICAgICAgICAgIFJp
bmctPkRlYnVnQ2FsbGJhY2spOworICAgIFJpbmctPkRlYnVnQ2FsbGJhY2sgPSBOVUxMOworCisg
ICAgWEVOQlVTX0VWVENITihDbG9zZSwKKyAgICAgICAgICAgICAgICAgICZQcm90b2NvbC0+RXZ0
Y2huSW50ZXJmYWNlLAorICAgICAgICAgICAgICAgICAgUmluZy0+Q2hhbm5lbCk7CisgICAgUmlu
Zy0+Q2hhbm5lbCA9IE5VTEw7CisKKyAgICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCAoMXVsIDw8
IFByb3RvY29sLT5PcmRlcik7ICsrSW5kZXgpIHsKKyAgICAgICAgaWYgKFJpbmctPkdyYW50c1tJ
bmRleF0gPT0gTlVMTCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIEdyYW50ZXJQ
dXQoR3JhbnRlciwgUmluZy0+R3JhbnRzW0luZGV4XSk7CisgICAgICAgIFJpbmctPkdyYW50c1tJ
bmRleF0gPSBOVUxMOworICAgIH0KKworICAgIFJ0bFplcm9NZW1vcnkoJlJpbmctPkZyb250LCBz
aXplb2YoYmxraWZfZnJvbnRfcmluZ190KSk7CisKKyAgICBfX0ZyZWVQYWdlcyhSaW5nLT5NZGwp
OworICAgIFJpbmctPlNoYXJlZCA9IE5VTEw7CisgICAgUmluZy0+TWRsID0gTlVMTDsKKyAgICBS
aW5nLT5FdmVudHMgPSAwOworICAgIFJpbmctPkRwY3MgPSAwOworICAgIFJpbmctPlN1Ym1pdHRl
ZCA9IDA7CisgICAgUmluZy0+UmVjZWl2ZWQgPSAwOworfQorCitzdGF0aWMgVk9JRAorUmluZ0Vu
YWJsZSgKKyAgICBJTiAgUFhFTlZCRF9SSU5HICAgIFJpbmcKKyAgICApCit7CisgICAgUFhFTlZC
RF9QUk9UT0NPTCAgICBQcm90b2NvbCA9IFJpbmctPlByb3RvY29sOworCisgICAgWEVOQlVTX0VW
VENITihUcmlnZ2VyLAorICAgICAgICAgICAgICAgICAgJlByb3RvY29sLT5FdnRjaG5JbnRlcmZh
Y2UsCisgICAgICAgICAgICAgICAgICBSaW5nLT5DaGFubmVsKTsKK30KKworc3RhdGljIFZPSUQK
K1JpbmdEaXNhYmxlKAorICAgIElOICBQWEVOVkJEX1JJTkcgICAgUmluZworICAgICkKK3sKKyAg
ICBQWEVOVkJEX1BST1RPQ09MICAgIFByb3RvY29sID0gUmluZy0+UHJvdG9jb2w7CisgICAgVUxP
TkcgICAgICAgICAgICAgICBDb3VudDsKKyAgICBLSVJRTCAgICAgICAgICAgICAgIElycWw7Cisg
ICAgUFhFTlZCRF9UQVJHRVQgICAgICBUYXJnZXQgPSBGcm9udGVuZEdldFRhcmdldChQcm90b2Nv
bC0+RnJvbnRlbmQpOworICAgIFBYRU5WQkRfQURBUFRFUiAgICAgQWRhcHRlciA9IFRhcmdldEdl
dEFkYXB0ZXIoVGFyZ2V0KTsKKworICAgIC8vIHBvbGwgcmluZyBhbmQgc2VuZCBldmVudCBjaGFu
bmVsIG5vdGlmaWNhdGlvbiBldmVyeSAxbXMgKGZvciB1cCB0byAzIG1pbnV0ZXMpCisgICAgQ291
bnQgPSAwOworICAgIHdoaWxlIChRdWV1ZUNvdW50KCZSaW5nLT5TdWJtaXR0ZWRSZXFzKSkgewor
ICAgICAgICBpZiAoQ291bnQgPiAxODAwMDApCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
S2VSYWlzZUlycWwoRElTUEFUQ0hfTEVWRUwsICZJcnFsKTsKKyAgICAgICAgUmluZ1BvbGwoUmlu
Zyk7CisgICAgICAgIEtlTG93ZXJJcnFsKElycWwpOworICAgICAgICBYRU5CVVNfRVZUQ0hOKFNl
bmQsCisgICAgICAgICAgICAgICAgICAgICAgJlByb3RvY29sLT5FdnRjaG5JbnRlcmZhY2UsCisg
ICAgICAgICAgICAgICAgICAgICAgUmluZy0+Q2hhbm5lbCk7CisgICAgICAgIFN0b3JQb3J0U3Rh
bGxFeGVjdXRpb24oMTAwMCk7ICAgLy8gMTAwMCBtaWNyby1zZWNvbmRzCisgICAgICAgICsrQ291
bnQ7CisgICAgfQorCisgICAgVmVyYm9zZSgiVGFyZ2V0WyVkXVsldV0gOiAldSBTdWJtaXR0ZWQg
cmVxdWVzdHMgbGVmdCAoJXUgaXRlcnJhdGlvbnMpXG4iLAorICAgICAgICAgICAgRnJvbnRlbmRH
ZXRUYXJnZXRJZChQcm90b2NvbC0+RnJvbnRlbmQpLAorICAgICAgICAgICAgUmluZy0+SW5kZXgs
CisgICAgICAgICAgICBRdWV1ZUNvdW50KCZSaW5nLT5TdWJtaXR0ZWRSZXFzKSwKKyAgICAgICAg
ICAgIENvdW50KTsKKworICAgIC8vIEZhaWwgUHJlcGFyZWRSZXFzCisgICAgZm9yICg7Oykgewor
ICAgICAgICBQWEVOVkJEX1NSQkVYVCAgICAgIFNyYkV4dDsKKyAgICAgICAgUFNDU0lfUkVRVUVT
VF9CTE9DSyBTcmI7CisgICAgICAgIFBYRU5WQkRfUkVRVUVTVCAgICAgUmVxdWVzdDsKKyAgICAg
ICAgUExJU1RfRU5UUlkgICAgICAgICBMaXN0RW50cnk7CisKKyAgICAgICAgTGlzdEVudHJ5ID0g
UXVldWVQb3AoJlJpbmctPlByZXBhcmVkUmVxcyk7CisgICAgICAgIGlmIChMaXN0RW50cnkgPT0g
TlVMTCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBSZXF1ZXN0ID0gQ09OVEFJTklOR19S
RUNPUkQoTGlzdEVudHJ5LCBYRU5WQkRfUkVRVUVTVCwgTGlzdEVudHJ5KTsKKyAgICAgICAgU3Ji
RXh0ID0gUmVxdWVzdC0+U3JiRXh0OworICAgICAgICBTcmIgPSBTcmJFeHQtPlNyYjsKKworICAg
ICAgICBTcmItPlNyYlN0YXR1cyA9IFNSQl9TVEFUVVNfQUJPUlRFRDsKKyAgICAgICAgU3JiLT5T
Y3NpU3RhdHVzID0gMHg0MDsgLy8gU0NTSV9BQk9SVEVECisKKyAgICAgICAgUHJvdG9jb2xQdXRS
ZXF1ZXN0KFByb3RvY29sLCBSZXF1ZXN0KTsKKworICAgICAgICBpZiAoSW50ZXJsb2NrZWREZWNy
ZW1lbnQoJlNyYkV4dC0+UmVxdWVzdENvdW50KSA9PSAwKQorICAgICAgICAgICAgQWRhcHRlckNv
bXBsZXRlU3JiKEFkYXB0ZXIsIFNyYkV4dCk7CisgICAgfQorfQorCitzdGF0aWMgVk9JRAorUmlu
Z1RyaWdnZXIoCisgICAgSU4gIFBYRU5WQkRfUklORyAgICBSaW5nCisgICAgKQoreworICAgIFBY
RU5WQkRfUFJPVE9DT0wgICAgUHJvdG9jb2wgPSBSaW5nLT5Qcm90b2NvbDsKKworICAgIFhFTkJV
U19FVlRDSE4oVHJpZ2dlciwKKyAgICAgICAgICAgICAgICAgICZQcm90b2NvbC0+RXZ0Y2huSW50
ZXJmYWNlLAorICAgICAgICAgICAgICAgICAgUmluZy0+Q2hhbm5lbCk7Cit9CisKK3N0YXRpYyBG
T1JDRUlOTElORSBNTV9QQUdFX1BSSU9SSVRZCitfX1Byb3RvY29sUHJpb3JpdHkoCisgICAgSU4g
IFBYRU5WQkRfUFJPVE9DT0wgICAgUHJvdG9jb2wKKyAgICApCit7CisgICAgUFhFTlZCRF9DQVBT
ICAgICAgICBDYXBzID0gRnJvbnRlbmRHZXRDYXBzKFByb3RvY29sLT5Gcm9udGVuZCk7CisgICAg
aWYgKCEoQ2Fwcy0+UGFnaW5nIHx8CisgICAgICAgICAgQ2Fwcy0+SGliZXJuYXRpb24gfHwKKyAg
ICAgICAgICBDYXBzLT5EdW1wRmlsZSkpCisgICAgICAgIHJldHVybiBOb3JtYWxQYWdlUHJpb3Jp
dHk7CisKKyAgICByZXR1cm4gSGlnaFBhZ2VQcmlvcml0eTsKK30KKworc3RhdGljIEJPT0xFQU4K
K1Byb3RvY29sUHJlcGFyZVNlZ21lbnQoCisgICAgSU4gIFBYRU5WQkRfUFJPVE9DT0wgICAgUHJv
dG9jb2wsCisgICAgSU4gIFBYRU5WQkRfU0VHTUVOVCAgICAgU2VnbWVudCwKKyAgICBJTiAgUFhF
TlZCRF9TUkJFWFQgICAgICBTcmJFeHQsCisgICAgSU4gIEJPT0xFQU4gICAgICAgICAgICAgUmVh
ZE9ubHksCisgICAgSU4gIFVMT05HICAgICAgICAgICAgICAgU2VjdG9yc0xlZnQsCisgICAgT1VU
IFBVTE9ORyAgICAgICAgICAgICAgU2VjdG9yc05vdworICAgICkKK3sKKyAgICBQRk5fTlVNQkVS
ICAgICAgICAgICAgICBQZm47CisgICAgVUxPTkcgICAgICAgICAgICAgICAgICAgT2Zmc2V0Owor
ICAgIFVMT05HICAgICAgICAgICAgICAgICAgIExlbmd0aDsKKyAgICBOVFNUQVRVUyAgICAgICAg
ICAgICAgICBTdGF0dXM7CisgICAgUFhFTlZCRF9HUkFOVEVSICAgICAgICAgR3JhbnRlciA9IEZy
b250ZW5kR2V0R3JhbnRlcihQcm90b2NvbC0+RnJvbnRlbmQpOworICAgIGNvbnN0IFVMT05HICAg
ICAgICAgICAgIFNlY3RvclNpemUgPSBGcm9udGVuZEdldERpc2tJbmZvKFByb3RvY29sLT5Gcm9u
dGVuZCktPlNlY3RvclNpemU7CisgICAgY29uc3QgVUxPTkcgICAgICAgICAgICAgU2VjdG9yc1Bl
clBhZ2UgPSBfX1NlY3RvcnNQZXJQYWdlKFNlY3RvclNpemUpOworICAgIFBYRU5WQkRfVEFSR0VU
ICAgICAgICAgIFRhcmdldCA9IEZyb250ZW5kR2V0VGFyZ2V0KFByb3RvY29sLT5Gcm9udGVuZCk7
CisgICAgUFhFTlZCRF9BREFQVEVSICAgICAgICAgQWRhcHRlciA9IFRhcmdldEdldEFkYXB0ZXIo
VGFyZ2V0KTsKKworICAgIFBmbiA9IEFkYXB0ZXJHZXROZXh0U0dFbnRyeShBZGFwdGVyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTcmJFeHQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZPZmZzZXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZMZW5ndGgpOworICAgIGlmICgoT2Zm
c2V0ICYgKFNlY3RvclNpemUgLSAxKSkgPT0gMCAmJgorICAgICAgICAoTGVuZ3RoICYgKFNlY3Rv
clNpemUgLSAxKSkgPT0gMCkgeworICAgICAgICArK1Byb3RvY29sLT5TZWdzR3JhbnRlZDsKKyAg
ICAgICAgLy8gZ2V0IGZpcnN0IHNlY3RvciwgbGFzdCBzZWN0b3IgYW5kIGNvdW50CisgICAgICAg
IFNlZ21lbnQtPkZpcnN0U2VjdG9yID0gKFVDSEFSKSgoT2Zmc2V0ICsgU2VjdG9yU2l6ZSAtIDEp
IC8gU2VjdG9yU2l6ZSk7CisgICAgICAgICpTZWN0b3JzTm93ID0gX19taW4oU2VjdG9yc0xlZnQs
IFNlY3RvcnNQZXJQYWdlIC0gU2VnbWVudC0+Rmlyc3RTZWN0b3IpOworICAgICAgICBTZWdtZW50
LT5MYXN0U2VjdG9yID0gKFVDSEFSKShTZWdtZW50LT5GaXJzdFNlY3RvciArICpTZWN0b3JzTm93
IC0gMSk7CisKKyAgICAgICAgQVNTRVJUM1UoKExlbmd0aCAvIFNlY3RvclNpemUpLCA9PSAsICpT
ZWN0b3JzTm93KTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIFBYRU5WQkRfQk9VTkNFICAg
ICAgQm91bmNlOworICAgICAgICBQTURMICAgICAgICAgICAgICAgIE1kbDsKKworICAgICAgICAr
K1Byb3RvY29sLT5TZWdzQm91bmNlZDsKKyAgICAgICAgLy8gZ2V0IGZpcnN0IHNlY3RvciwgbGFz
dCBzZWN0b3IgYW5kIGNvdW50CisgICAgICAgIFNlZ21lbnQtPkZpcnN0U2VjdG9yID0gMDsKKyAg
ICAgICAgKlNlY3RvcnNOb3cgPSBfX21pbihTZWN0b3JzTGVmdCwgU2VjdG9yc1BlclBhZ2UpOwor
ICAgICAgICBTZWdtZW50LT5MYXN0U2VjdG9yID0gKFVDSEFSKSgqU2VjdG9yc05vdyAtIDEpOwor
CisgICAgICAgIEJvdW5jZSA9IEFkYXB0ZXJHZXRCb3VuY2UoQWRhcHRlcik7CisgICAgICAgIGlm
IChCb3VuY2UgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZmFpbDE7CisgICAgICAgIFNlZ21l
bnQtPkJvdW5jZSA9IEJvdW5jZTsKKworI3ByYWdtYSB3YXJuaW5nKHB1c2gpCisjcHJhZ21hIHdh
cm5pbmcoZGlzYWJsZToyODE0NSkKKyAgICAgICAgTWRsID0gJkJvdW5jZS0+U291cmNlTWRsOwor
ICAgICAgICBNZGwtPk5leHQgPSBOVUxMOworICAgICAgICBNZGwtPlNpemUgPSAoU0hPUlQpKHNp
emVvZihNREwpICsgc2l6ZW9mKFBGTl9OVU1CRVIpKTsKKyAgICAgICAgTWRsLT5NZGxGbGFncyA9
IE1ETF9QQUdFU19MT0NLRUQ7CisgICAgICAgIE1kbC0+UHJvY2VzcyA9IE5VTEw7CisgICAgICAg
IE1kbC0+TWFwcGVkU3lzdGVtVmEgPSBOVUxMOworICAgICAgICBNZGwtPlN0YXJ0VmEgPSBOVUxM
OworICAgICAgICBNZGwtPkJ5dGVDb3VudCA9IExlbmd0aDsKKyAgICAgICAgTWRsLT5CeXRlT2Zm
c2V0ID0gT2Zmc2V0OworICAgICAgICBCb3VuY2UtPlNvdXJjZVBmblswXSA9IFBmbjsKKworICAg
ICAgICBpZiAoTGVuZ3RoIDwgKlNlY3RvcnNOb3cgKiBTZWN0b3JTaXplKSB7CisgICAgICAgICAg
ICBQZm4gPSBBZGFwdGVyR2V0TmV4dFNHRW50cnkoQWRhcHRlciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBTcmJFeHQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICZPZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Jkxlbmd0aCk7CisgICAgICAgICAgICBNZGwtPlNpemUgKz0gc2l6ZW9mKFBGTl9OVU1CRVIpOwor
ICAgICAgICAgICAgTWRsLT5CeXRlQ291bnQgKz0gTGVuZ3RoOworICAgICAgICAgICAgQm91bmNl
LT5Tb3VyY2VQZm5bMV0gPSBQZm47CisgICAgICAgIH0KKyNwcmFnbWEgd2FybmluZyhwb3ApCisK
KyAgICAgICAgQVNTRVJUKChNZGwtPkJ5dGVDb3VudCAmIChTZWN0b3JTaXplIC0gMSkpID09IDAp
OworICAgICAgICBBU1NFUlQzVShNZGwtPkJ5dGVDb3VudCwgPD0gLCBQQUdFX1NJWkUpOworICAg
ICAgICBBU1NFUlQzVSgqU2VjdG9yc05vdywgPT0gLCAoTWRsLT5CeXRlQ291bnQgLyBTZWN0b3JT
aXplKSk7CisKKyAgICAgICAgQm91bmNlLT5Tb3VyY2VQdHIgPSBNbU1hcExvY2tlZFBhZ2VzU3Bl
Y2lmeUNhY2hlKE1kbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEtlcm5lbE1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNbUNhY2hlZCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
UHJvdG9jb2xQcmlvcml0eShQcm90b2NvbCkpOworICAgICAgICBpZiAoQm91bmNlLT5Tb3VyY2VQ
dHIgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZmFpbDI7CisKKyAgICAgICAgQVNTRVJUM1Ao
TW1HZXRNZGxQZm5BcnJheShNZGwpWzBdLCA9PSAsIEJvdW5jZS0+U291cmNlUGZuWzBdKTsKKyAg
ICAgICAgQVNTRVJUM1AoTW1HZXRNZGxQZm5BcnJheShNZGwpWzFdLCA9PSAsIEJvdW5jZS0+U291
cmNlUGZuWzFdKTsKKworICAgICAgICAvLyBjb3B5IGNvbnRlbnRzIGluCisgICAgICAgIGlmIChS
ZWFkT25seSkgeyAvLyBPcGVyYXRpb24gPT0gQkxLSUZfT1BfV1JJVEUKKyAgICAgICAgICAgIFJ0
bENvcHlNZW1vcnkoQm91bmNlLT5Cb3VuY2VQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
IEJvdW5jZS0+U291cmNlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBNbUdldE1kbEJ5
dGVDb3VudCgmQm91bmNlLT5Tb3VyY2VNZGwpKTsKKyAgICAgICAgfQorCisgICAgICAgIFBmbiA9
IE1tR2V0TWRsUGZuQXJyYXkoQm91bmNlLT5Cb3VuY2VNZGwpWzBdOworICAgIH0KKworICAgIC8v
IEdyYW50IHNlZ21lbnQncyBwYWdlCisgICAgU3RhdHVzID0gR3JhbnRlckdldChHcmFudGVyLCBQ
Zm4sIFJlYWRPbmx5LCAmU2VnbWVudC0+R3JhbnQpOworICAgIGlmICghTlRfU1VDQ0VTUyhTdGF0
dXMpKQorICAgICAgICBnb3RvIGZhaWwzOworCisgICAgcmV0dXJuIFRSVUU7CisKK2ZhaWwzOgor
ZmFpbDI6CitmYWlsMToKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyBCT09MRUFOCitQ
cm90b2NvbFByZXBhcmVCbGtpZlJlYWRXcml0ZSgKKyAgICBJTiAgUFhFTlZCRF9QUk9UT0NPTCAg
ICBQcm90b2NvbCwKKyAgICBJTiAgUFhFTlZCRF9SRVFVRVNUICAgICBSZXF1ZXN0LAorICAgIElO
ICBQWEVOVkJEX1NSQkVYVCAgICAgIFNyYkV4dCwKKyAgICBJTiAgVUxPTkcgICAgICAgICAgICAg
ICBNYXhTZWdtZW50cywKKyAgICBJTiAgVUxPTkc2NCAgICAgICAgICAgICBTZWN0b3JTdGFydCwK
KyAgICBJTiAgVUxPTkcgICAgICAgICAgICAgICBTZWN0b3JzTGVmdCwKKyAgICBPVVQgUFVMT05H
ICAgICAgICAgICAgICBTZWN0b3JzRG9uZQorICAgICkKK3sKKyAgICBQU0NTSV9SRVFVRVNUX0JM
T0NLICAgICBTcmIgPSBTcmJFeHQtPlNyYjsKKyAgICBVQ0hBUiAgICAgICAgICAgICAgICAgICBP
cGVyYXRpb247CisgICAgQk9PTEVBTiAgICAgICAgICAgICAgICAgUmVhZE9ubHk7CisgICAgVUxP
TkcgICAgICAgICAgICAgICAgICAgSW5kZXg7CisgICAgX19PcGVyYXRpb24oQ2RiX09wZXJhdGlv
bkV4KFNyYiksICZPcGVyYXRpb24sICZSZWFkT25seSk7CisKKyAgICBSZXF1ZXN0LT5PcGVyYXRp
b24gPSBPcGVyYXRpb247CisgICAgUmVxdWVzdC0+TnJTZWdtZW50cyA9IDA7CisgICAgUmVxdWVz
dC0+Rmlyc3RTZWN0b3IgPSBTZWN0b3JTdGFydDsKKworICAgIGZvciAoSW5kZXggPSAwOworICAg
ICAgICAgSW5kZXggPCBNYXhTZWdtZW50cyAmJgorICAgICAgICAgU2VjdG9yc0xlZnQgPiAwOwor
ICAgICAgICAgKytJbmRleCkgeworICAgICAgICBQWEVOVkJEX1NFR01FTlQgU2VnbWVudDsKKyAg
ICAgICAgVUxPTkcgICAgICAgICAgIFNlY3RvcnNOb3c7CisKKyAgICAgICAgU2VnbWVudCA9IFBy
b3RvY29sR2V0U2VnbWVudChQcm90b2NvbCk7CisgICAgICAgIGlmIChTZWdtZW50ID09IE5VTEwp
CisgICAgICAgICAgICBnb3RvIGZhaWwxOworCisgICAgICAgIEluc2VydFRhaWxMaXN0KCZSZXF1
ZXN0LT5TZWdtZW50cywgJlNlZ21lbnQtPkxpc3RFbnRyeSk7CisgICAgICAgICsrUmVxdWVzdC0+
TnJTZWdtZW50czsKKworICAgICAgICBpZiAoIVByb3RvY29sUHJlcGFyZVNlZ21lbnQoUHJvdG9j
b2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWdtZW50LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3JiRXh0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUmVhZE9ubHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBTZWN0b3JzTGVmdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICZTZWN0b3JzTm93KSkKKyAgICAgICAgICAgIGdvdG8gZmFpbDI7CisKKyAgICAgICAgKlNlY3Rv
cnNEb25lICs9IFNlY3RvcnNOb3c7CisgICAgICAgIFNlY3RvcnNMZWZ0IC09IFNlY3RvcnNOb3c7
CisgICAgfQorICAgIEFTU0VSVDNVKFJlcXVlc3QtPk5yU2VnbWVudHMsID4sIDApOworICAgIEFT
U0VSVDNVKFJlcXVlc3QtPk5yU2VnbWVudHMsIDw9ICwgTWF4U2VnbWVudHMpOworCisgICAgcmV0
dXJuIFRSVUU7CisKK2ZhaWwyOgorZmFpbDE6CisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0
aWMgQk9PTEVBTgorUHJvdG9jb2xQcmVwYXJlQmxraWZJbmRpcmVjdCgKKyAgICBJTiAgUFhFTlZC
RF9QUk9UT0NPTCAgICBQcm90b2NvbCwKKyAgICBJTiAgUFhFTlZCRF9SRVFVRVNUICAgICBSZXF1
ZXN0CisgICAgKQoreworICAgIFVMT05HICAgICAgICAgICAgICAgICAgIEluZGV4OworICAgIFVM
T05HICAgICAgICAgICAgICAgICAgIE5yU2VnbWVudHMgPSAwOworCisgICAgZm9yIChJbmRleCA9
IDA7CisgICAgICAgICBJbmRleCA8IEJMS0lGX01BWF9JTkRJUkVDVF9QQUdFU19QRVJfUkVRVUVT
VCAmJgorICAgICAgICAgTnJTZWdtZW50cyA8IFJlcXVlc3QtPk5yU2VnbWVudHM7CisgICAgICAg
ICArK0luZGV4KSB7CisgICAgICAgIFBYRU5WQkRfSU5ESVJFQ1QgICAgSW5kaXJlY3Q7CisKKyAg
ICAgICAgSW5kaXJlY3QgPSBQcm90b2NvbEdldEluZGlyZWN0KFByb3RvY29sKTsKKyAgICAgICAg
aWYgKEluZGlyZWN0ID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGZhaWwxOworICAgICAgICBJ
bnNlcnRUYWlsTGlzdCgmUmVxdWVzdC0+SW5kaXJlY3RzLCAmSW5kaXJlY3QtPkxpc3RFbnRyeSk7
CisKKyAgICAgICAgTnJTZWdtZW50cyArPSBYRU5WQkRfTUFYX1NFR01FTlRTX1BFUl9QQUdFOwor
ICAgIH0KKworICAgIHJldHVybiBUUlVFOworCitmYWlsMToKKyAgICByZXR1cm4gRkFMU0U7Cit9
CisKK3N0YXRpYyBGT1JDRUlOTElORSBVTE9ORworUHJvdG9jb2xVc2VJbmRpcmVjdCgKKyAgICBJ
TiAgUFhFTlZCRF9QUk9UT0NPTCAgICBQcm90b2NvbCwKKyAgICBJTiAgVUxPTkcgICAgICAgICAg
ICAgICBTZWN0b3JzTGVmdAorICAgICkKK3sKKyAgICBjb25zdCBVTE9ORyBTZWN0b3JzUGVyUGFn
ZSA9IF9fU2VjdG9yc1BlclBhZ2UoRnJvbnRlbmRHZXREaXNrSW5mbyhQcm90b2NvbC0+RnJvbnRl
bmQpLT5TZWN0b3JTaXplKTsKKyAgICBjb25zdCBVTE9ORyBNYXhJbmRpcmVjdFNlZ3MgPSBGcm9u
dGVuZEdldEZlYXR1cmVzKFByb3RvY29sLT5Gcm9udGVuZCktPkluZGlyZWN0OworCisgICAgaWYg
KE1heEluZGlyZWN0U2VncyA8PSBCTEtJRl9NQVhfU0VHTUVOVFNfUEVSX1JFUVVFU1QpCisgICAg
ICAgIHJldHVybiBCTEtJRl9NQVhfU0VHTUVOVFNfUEVSX1JFUVVFU1Q7IC8vIG5vdCBzdXBwb3J0
ZWQKKworICAgIGlmIChTZWN0b3JzTGVmdCA8IEJMS0lGX01BWF9TRUdNRU5UU19QRVJfUkVRVUVT
VCAqIFNlY3RvcnNQZXJQYWdlKQorICAgICAgICByZXR1cm4gQkxLSUZfTUFYX1NFR01FTlRTX1BF
Ul9SRVFVRVNUOyAvLyBmaXJzdCBpbnRvIGEgc2luZ2xlIEJMS0lGX09QX3tSRUFEL1dSSVRFfQor
CisgICAgcmV0dXJuIE1heEluZGlyZWN0U2VnczsKK30KKworc3RhdGljIEZPUkNFSU5MSU5FIFZP
SUQKK1Byb3RvY29sQ2FuY2VsUmVxdWVzdExpc3QoCisgICAgSU4gIFBYRU5WQkRfUFJPVE9DT0wg
ICAgUHJvdG9jb2wsCisgICAgSU4gIFBMSVNUX0VOVFJZICAgICAgICAgTGlzdAorICAgICkKK3sK
KyAgICBmb3IgKDs7KSB7CisgICAgICAgIFBYRU5WQkRfUkVRVUVTVCAgICAgUmVxdWVzdDsKKyAg
ICAgICAgUExJU1RfRU5UUlkgICAgICAgICBMaXN0RW50cnk7CisKKyAgICAgICAgTGlzdEVudHJ5
ID0gUmVtb3ZlSGVhZExpc3QoTGlzdCk7CisgICAgICAgIGlmIChMaXN0RW50cnkgPT0gTGlzdCkK
KyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIFJlcXVlc3QgPSBDT05UQUlOSU5HX1JFQ09S
RChMaXN0RW50cnksIFhFTlZCRF9SRVFVRVNULCBMaXN0RW50cnkpOworICAgICAgICBQcm90b2Nv
bFB1dFJlcXVlc3QoUHJvdG9jb2wsIFJlcXVlc3QpOworICAgIH0KK30KKworc3RhdGljIEJPT0xF
QU4KK1Byb3RvY29sUHJlcGFyZVJlYWRXcml0ZSgKKyAgICBJTiAgUFhFTlZCRF9QUk9UT0NPTCAg
ICBQcm90b2NvbCwKKyAgICBJTiAgUFhFTlZCRF9TUkJFWFQgICAgICBTcmJFeHQsCisgICAgSU4g
IFBMSVNUX0VOVFJZICAgICAgICAgTGlzdAorICAgICkKK3sKKyAgICBQU0NTSV9SRVFVRVNUX0JM
T0NLICAgICBTcmIgPSBTcmJFeHQtPlNyYjsKKyAgICBVTE9ORzY0ICAgICAgICAgICAgICAgICBT
ZWN0b3JTdGFydCA9IENkYl9Mb2dpY2FsQmxvY2soU3JiKTsKKyAgICBVTE9ORyAgICAgICAgICAg
ICAgICAgICBTZWN0b3JzTGVmdCA9IENkYl9UcmFuc2ZlckJsb2NrKFNyYik7CisKKyAgICBTcmIt
PlNyYlN0YXR1cyA9IFNSQl9TVEFUVVNfUEVORElORzsKKworICAgIFNyYkV4dC0+UmVxdWVzdENv
dW50ID0gMDsKKworICAgIHdoaWxlIChTZWN0b3JzTGVmdCA+IDApIHsKKyAgICAgICAgVUxPTkcg
ICAgICAgICAgIE1heFNlZ21lbnRzOworICAgICAgICBVTE9ORyAgICAgICAgICAgU2VjdG9yc0Rv
bmUgPSAwOworICAgICAgICBQWEVOVkJEX1JFUVVFU1QgUmVxdWVzdDsKKworICAgICAgICBSZXF1
ZXN0ID0gUHJvdG9jb2xHZXRSZXF1ZXN0KFByb3RvY29sKTsKKyAgICAgICAgaWYgKFJlcXVlc3Qg
PT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZmFpbDE7CisgICAgICAgIEluc2VydFRhaWxMaXN0
KExpc3QsICZSZXF1ZXN0LT5MaXN0RW50cnkpOworICAgICAgICBJbnRlcmxvY2tlZEluY3JlbWVu
dCgmU3JiRXh0LT5SZXF1ZXN0Q291bnQpOworCisgICAgICAgIFJlcXVlc3QtPlNyYkV4dCA9IFNy
YkV4dDsKKyAgICAgICAgTWF4U2VnbWVudHMgPSBQcm90b2NvbFVzZUluZGlyZWN0KFByb3RvY29s
LCBTZWN0b3JzTGVmdCk7CisKKyAgICAgICAgaWYgKCFQcm90b2NvbFByZXBhcmVCbGtpZlJlYWRX
cml0ZShQcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBSZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNy
YkV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXhTZWdt
ZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWN0b3JT
dGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWN0b3Jz
TGVmdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmU2VjdG9y
c0RvbmUpKQorICAgICAgICAgICAgZ290byBmYWlsMjsKKworICAgICAgICBpZiAoTWF4U2VnbWVu
dHMgPiBCTEtJRl9NQVhfU0VHTUVOVFNfUEVSX1JFUVVFU1QpIHsKKyAgICAgICAgICAgIGlmICgh
UHJvdG9jb2xQcmVwYXJlQmxraWZJbmRpcmVjdChQcm90b2NvbCwgUmVxdWVzdCkpCisgICAgICAg
ICAgICAgICAgZ290byBmYWlsMzsKKyAgICAgICAgfQorCisgICAgICAgIFNlY3RvcnNMZWZ0IC09
IFNlY3RvcnNEb25lOworICAgICAgICBTZWN0b3JTdGFydCArPSBTZWN0b3JzRG9uZTsKKyAgICB9
CisKKyAgICByZXR1cm4gVFJVRTsKKworZmFpbDM6CitmYWlsMjoKK2ZhaWwxOgorICAgIFByb3Rv
Y29sQ2FuY2VsUmVxdWVzdExpc3QoUHJvdG9jb2wsIExpc3QpOworICAgIFNyYkV4dC0+UmVxdWVz
dENvdW50ID0gMDsKKyAgICBTcmItPlNyYlN0YXR1cyA9IFNSQl9TVEFUVVNfRVJST1I7CisgICAg
cmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgQk9PTEVBTgorUHJvdG9jb2xQcmVwYXJlU3luY0Nh
Y2hlKAorICAgIElOICBQWEVOVkJEX1BST1RPQ09MICAgIFByb3RvY29sLAorICAgIElOICBQWEVO
VkJEX1NSQkVYVCAgICAgIFNyYkV4dCwKKyAgICBJTiAgUExJU1RfRU5UUlkgICAgICAgICBMaXN0
CisgICAgKQoreworICAgIFBTQ1NJX1JFUVVFU1RfQkxPQ0sgICAgIFNyYiA9IFNyYkV4dC0+U3Ji
OworICAgIFBYRU5WQkRfUkVRVUVTVCAgICAgICAgIFJlcXVlc3Q7CisgICAgVUNIQVIgICAgICAg
ICAgICAgICAgICAgT3BlcmF0aW9uOworCisgICAgU3JiLT5TcmJTdGF0dXMgPSBTUkJfU1RBVFVT
X1BFTkRJTkc7CisKKyAgICBpZiAoRnJvbnRlbmRHZXREaXNrSW5mbyhQcm90b2NvbC0+RnJvbnRl
bmQpLT5GbHVzaENhY2hlKQorICAgICAgICBPcGVyYXRpb24gPSBCTEtJRl9PUF9GTFVTSF9ESVNL
Q0FDSEU7CisgICAgZWxzZQorICAgICAgICBPcGVyYXRpb24gPSBCTEtJRl9PUF9XUklURV9CQVJS
SUVSOworCisgICAgU3JiRXh0LT5SZXF1ZXN0Q291bnQgPSAwOworCisgICAgUmVxdWVzdCA9IFBy
b3RvY29sR2V0UmVxdWVzdChQcm90b2NvbCk7CisgICAgaWYgKFJlcXVlc3QgPT0gTlVMTCkKKyAg
ICAgICAgZ290byBmYWlsMTsKKyAgICBJbnNlcnRUYWlsTGlzdChMaXN0LCAmUmVxdWVzdC0+TGlz
dEVudHJ5KTsKKyAgICBJbnRlcmxvY2tlZEluY3JlbWVudCgmU3JiRXh0LT5SZXF1ZXN0Q291bnQp
OworCisgICAgUmVxdWVzdC0+U3JiRXh0ID0gU3JiRXh0OworICAgIFJlcXVlc3QtPk9wZXJhdGlv
biA9IE9wZXJhdGlvbjsKKyAgICBSZXF1ZXN0LT5GaXJzdFNlY3RvciA9IENkYl9Mb2dpY2FsQmxv
Y2soU3JiKTsKKworICAgIHJldHVybiBUUlVFOworCitmYWlsMToKKyAgICBQcm90b2NvbENhbmNl
bFJlcXVlc3RMaXN0KFByb3RvY29sLCBMaXN0KTsKKyAgICBTcmJFeHQtPlJlcXVlc3RDb3VudCA9
IDA7CisgICAgU3JiLT5TcmJTdGF0dXMgPSBTUkJfU1RBVFVTX0VSUk9SOworICAgIHJldHVybiBG
QUxTRTsKK30KKworc3RhdGljIEJPT0xFQU4KK1Byb3RvY29sUHJlcGFyZVVubWFwKAorICAgIElO
ICBQWEVOVkJEX1BST1RPQ09MICAgIFByb3RvY29sLAorICAgIElOICBQWEVOVkJEX1NSQkVYVCAg
ICAgIFNyYkV4dCwKKyAgICBJTiAgUExJU1RfRU5UUlkgICAgICAgICBMaXN0CisgICAgKQorewor
ICAgIFBTQ1NJX1JFUVVFU1RfQkxPQ0sgICAgIFNyYiA9IFNyYkV4dC0+U3JiOworICAgIFBVTk1B
UF9MSVNUX0hFQURFUiAgICAgIFVubWFwID0gU3JiLT5EYXRhQnVmZmVyOworICAgIFVMT05HICAg
ICAgICAgICAgICAgICAgIENvdW50ID0gX2J5dGVzd2FwX3VzaG9ydCgqKFBVU0hPUlQpVW5tYXAt
PkJsb2NrRGVzY3JEYXRhTGVuZ3RoKSAvIHNpemVvZihVTk1BUF9CTE9DS19ERVNDUklQVE9SKTsK
KyAgICBVTE9ORyAgICAgICAgICAgICAgICAgICBJbmRleDsKKworICAgIFNyYi0+U3JiU3RhdHVz
ID0gU1JCX1NUQVRVU19QRU5ESU5HOworCisgICAgU3JiRXh0LT5SZXF1ZXN0Q291bnQgPSAwOwor
CisgICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgQ291bnQ7ICsrSW5kZXgpIHsKKyAgICAgICAg
UFVOTUFQX0JMT0NLX0RFU0NSSVBUT1IgRGVzY3IgPSAmVW5tYXAtPkRlc2NyaXB0b3JzW0luZGV4
XTsKKyAgICAgICAgUFhFTlZCRF9SRVFVRVNUICAgICAgICAgUmVxdWVzdDsKKworICAgICAgICBS
ZXF1ZXN0ID0gUHJvdG9jb2xHZXRSZXF1ZXN0KFByb3RvY29sKTsKKyAgICAgICAgaWYgKFJlcXVl
c3QgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZmFpbDE7CisgICAgICAgIEluc2VydFRhaWxM
aXN0KExpc3QsICZSZXF1ZXN0LT5MaXN0RW50cnkpOworICAgICAgICBJbnRlcmxvY2tlZEluY3Jl
bWVudCgmU3JiRXh0LT5SZXF1ZXN0Q291bnQpOworCisgICAgICAgIFJlcXVlc3QtPlNyYkV4dCA9
IFNyYkV4dDsKKyAgICAgICAgUmVxdWVzdC0+T3BlcmF0aW9uID0gQkxLSUZfT1BfRElTQ0FSRDsK
KyAgICAgICAgUmVxdWVzdC0+Rmlyc3RTZWN0b3IgPSBfYnl0ZXN3YXBfdWludDY0KCooUFVMT05H
NjQpRGVzY3ItPlN0YXJ0aW5nTGJhKTsKKyAgICAgICAgUmVxdWVzdC0+TnJTZWN0b3JzID0gX2J5
dGVzd2FwX3Vsb25nKCooUFVMT05HKURlc2NyLT5MYmFDb3VudCk7CisgICAgICAgIFJlcXVlc3Qt
PkZsYWdzID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gVFJVRTsKKworZmFpbDE6CisgICAgUHJv
dG9jb2xDYW5jZWxSZXF1ZXN0TGlzdChQcm90b2NvbCwgTGlzdCk7CisgICAgU3JiRXh0LT5SZXF1
ZXN0Q291bnQgPSAwOworICAgIFNyYi0+U3JiU3RhdHVzID0gU1JCX1NUQVRVU19FUlJPUjsKKyAg
ICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyBGT1JDRUlOTElORSBCT09MRUFOCitQcm90b2Nv
bFByZXBhcmVSZXF1ZXN0KAorICAgIElOICBQWEVOVkJEX1BST1RPQ09MICAgIFByb3RvY29sLAor
ICAgIElOICBQWEVOVkJEX1NSQkVYVCAgICAgIFNyYkV4dCwKKyAgICBJTiAgUExJU1RfRU5UUlkg
ICAgICAgICBMaXN0CisgICAgKQoreworICAgIHN3aXRjaCAoQ2RiX09wZXJhdGlvbkV4KFNyYkV4
dC0+U3JiKSkgeworICAgIGNhc2UgU0NTSU9QX1JFQUQ6CisgICAgY2FzZSBTQ1NJT1BfV1JJVEU6
CisgICAgICAgIHJldHVybiBQcm90b2NvbFByZXBhcmVSZWFkV3JpdGUoUHJvdG9jb2wsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3JiRXh0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3QpOworCisgICAgY2FzZSBTQ1NJT1BfU1lO
Q0hST05JWkVfQ0FDSEU6CisgICAgICAgIHJldHVybiBQcm90b2NvbFByZXBhcmVTeW5jQ2FjaGUo
UHJvdG9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3JiRXh0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3QpOworCisgICAg
Y2FzZSBTQ1NJT1BfVU5NQVA6CisgICAgICAgIHJldHVybiBQcm90b2NvbFByZXBhcmVVbm1hcChQ
cm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNyYkV4dCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3QpOwogCi0gICAgICAgIGlmICgh
UmV0cnkpCi0gICAgICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlQo
RkFMU0UpOworICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgfQotCi0gICAgWEVOQlVTX0VWVENI
TihVbm1hc2ssCi0gICAgICAgICAgICAgICAgICAmUHJvdG9jb2wtPkV2dGNobkludGVyZmFjZSwK
LSAgICAgICAgICAgICAgICAgIFByb3RvY29sLT5DaGFubmVsLAotICAgICAgICAgICAgICAgICAg
RkFMU0UpOwogfQogCiBzdGF0aWMgREVDTFNQRUNfTk9JTkxJTkUgVk9JRApAQCAtMTI4MSwxMDIg
KzE4MDQsMTkgQEAgUHJvdG9jb2xEZWJ1Z0NhbGxiYWNrKAogICAgICkKIHsKICAgICBQWEVOVkJE
X1BST1RPQ09MICAgIFByb3RvY29sID0gQXJndW1lbnQ7Ci0gICAgUFhFTlZCRF9HUkFOVEVSIEdy
YW50ZXIgPSBGcm9udGVuZEdldEdyYW50ZXIoUHJvdG9jb2wtPkZyb250ZW5kKTsKLSAgICBVTE9O
RyAgICAgICAgICAgSW5kZXg7CiAKICAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKENyYXNoaW5n
KTsKIAotICAgIFhFTkJVU19ERUJVRyhQcmludGYsCi0gICAgICAgICAgICAgICAgICZQcm90b2Nv
bC0+RGVidWdJbnRlcmZhY2UsCi0gICAgICAgICAgICAgICAgICJTdWJtaXR0ZWQ6ICV1IFJlY2Vp
dmVkOiAldVxuIiwKLSAgICAgICAgICAgICAgICAgUHJvdG9jb2wtPlN1Ym1pdHRlZCwKLSAgICAg
ICAgICAgICAgICAgUHJvdG9jb2wtPlJlY2VpdmVkKTsKLQotICAgIFhFTkJVU19ERUJVRyhQcmlu
dGYsCi0gICAgICAgICAgICAgICAgICZQcm90b2NvbC0+RGVidWdJbnRlcmZhY2UsCi0gICAgICAg
ICAgICAgICAgICJFdmVudHM6ICV1IERwY3M6ICV1XG4iLAotICAgICAgICAgICAgICAgICBQcm90
b2NvbC0+RXZlbnRzLAotICAgICAgICAgICAgICAgICBQcm90b2NvbC0+RHBjcyk7Ci0KLSAgICBY
RU5CVVNfREVCVUcoUHJpbnRmLAotICAgICAgICAgICAgICAgICAmUHJvdG9jb2wtPkRlYnVnSW50
ZXJmYWNlLAotICAgICAgICAgICAgICAgICAiU2hhcmVkIDogMHglcFxuIiwKLSAgICAgICAgICAg
ICAgICAgUHJvdG9jb2wtPlNoYXJlZCk7Ci0KLSAgICBpZiAoUHJvdG9jb2wtPlNoYXJlZCkgewot
ICAgICAgICBYRU5CVVNfREVCVUcoUHJpbnRmLAotICAgICAgICAgICAgICAgICAgICAgJlByb3Rv
Y29sLT5EZWJ1Z0ludGVyZmFjZSwKLSAgICAgICAgICAgICAgICAgICAgICJTaGFyZWQ6ICVkIC8g
JWQgLSAlZCAvICVkXG4iLAotICAgICAgICAgICAgICAgICAgICAgUHJvdG9jb2wtPlNoYXJlZC0+
cmVxX3Byb2QsCi0gICAgICAgICAgICAgICAgICAgICBQcm90b2NvbC0+U2hhcmVkLT5yZXFfZXZl
bnQsCi0gICAgICAgICAgICAgICAgICAgICBQcm90b2NvbC0+U2hhcmVkLT5yc3BfcHJvZCwKLSAg
ICAgICAgICAgICAgICAgICAgIFByb3RvY29sLT5TaGFyZWQtPnJzcF9ldmVudCk7Ci0gICAgfQot
Ci0gICAgWEVOQlVTX0RFQlVHKFByaW50ZiwKLSAgICAgICAgICAgICAgICAgJlByb3RvY29sLT5E
ZWJ1Z0ludGVyZmFjZSwKLSAgICAgICAgICAgICAgICAgIkZyb250OiAlZCAvICVkICglZClcbiIs
Ci0gICAgICAgICAgICAgICAgIFByb3RvY29sLT5Gcm9udC5yZXFfcHJvZF9wdnQsCi0gICAgICAg
ICAgICAgICAgIFByb3RvY29sLT5Gcm9udC5yc3BfY29ucywKLSAgICAgICAgICAgICAgICAgUHJv
dG9jb2wtPkZyb250Lm5yX2VudHMpOwotCiAgICAgWEVOQlVTX0RFQlVHKFByaW50ZiwKICAgICAg
ICAgICAgICAgICAgJlByb3RvY29sLT5EZWJ1Z0ludGVyZmFjZSwKICAgICAgICAgICAgICAgICAg
Ik9yZGVyOiAlZFxuIiwKICAgICAgICAgICAgICAgICAgUHJvdG9jb2wtPk9yZGVyKTsKIAotICAg
IGZvciAoSW5kZXggPSAwOyBJbmRleCA8ICgxdWwgPDwgUHJvdG9jb2wtPk9yZGVyKTsgKytJbmRl
eCkgewotICAgICAgICBYRU5CVVNfREVCVUcoUHJpbnRmLAotICAgICAgICAgICAgICAgICAgICAg
JlByb3RvY29sLT5EZWJ1Z0ludGVyZmFjZSwKLSAgICAgICAgICAgICAgICAgICAgICJHcmFudHNb
JS0yZF06IDB4JXAgKCV1KVxuIiwKLSAgICAgICAgICAgICAgICAgICAgIEluZGV4LAotICAgICAg
ICAgICAgICAgICAgICAgUHJvdG9jb2wtPkdyYW50c1tJbmRleF0sCi0gICAgICAgICAgICAgICAg
ICAgICBHcmFudGVyUmVmZXJlbmNlKEdyYW50ZXIsIFByb3RvY29sLT5HcmFudHNbSW5kZXhdKSk7
Ci0gICAgfQotCi0gICAgaWYgKFByb3RvY29sLT5DaGFubmVsKSB7Ci0gICAgICAgIFVMT05HICAg
ICAgIFBvcnQgPSBYRU5CVVNfRVZUQ0hOKEdldFBvcnQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICZQcm90b2NvbC0+RXZ0Y2huSW50ZXJmYWNlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm90b2NvbC0+Q2hhbm5lbCk7Ci0KLSAg
ICAgICAgWEVOQlVTX0RFQlVHKFByaW50ZiwKLSAgICAgICAgICAgICAgICAgICAgICZQcm90b2Nv
bC0+RGVidWdJbnRlcmZhY2UsCi0gICAgICAgICAgICAgICAgICAgICAiQ2hhbm5lbCA6ICVwICgl
ZClcbiIsCi0gICAgICAgICAgICAgICAgICAgICBQcm90b2NvbC0+Q2hhbm5lbCwKLSAgICAgICAg
ICAgICAgICAgICAgIFBvcnQpOwotICAgIH0KLQotICAgIFhFTkJVU19ERUJVRyhQcmludGYsCi0g
ICAgICAgICAgICAgICAgICZQcm90b2NvbC0+RGVidWdJbnRlcmZhY2UsCi0gICAgICAgICAgICAg
ICAgICJCTEtJRl9PUHM6IFJFQUQ9JXUgV1JJVEU9JXVcbiIsCi0gICAgICAgICAgICAgICAgIFBy
b3RvY29sLT5CbGtPcFJlYWQsCi0gICAgICAgICAgICAgICAgIFByb3RvY29sLT5CbGtPcFdyaXRl
KTsKLSAgICBYRU5CVVNfREVCVUcoUHJpbnRmLAotICAgICAgICAgICAgICAgICAmUHJvdG9jb2wt
PkRlYnVnSW50ZXJmYWNlLAotICAgICAgICAgICAgICAgICAiQkxLSUZfT1BzOiBJTkRJUkVDVF9S
RUFEPSV1IElORElSRUNUX1dSSVRFPSV1XG4iLAotICAgICAgICAgICAgICAgICBQcm90b2NvbC0+
QmxrT3BJbmRpcmVjdFJlYWQsCi0gICAgICAgICAgICAgICAgIFByb3RvY29sLT5CbGtPcEluZGly
ZWN0V3JpdGUpOwotICAgIFhFTkJVU19ERUJVRyhQcmludGYsCi0gICAgICAgICAgICAgICAgICZQ
cm90b2NvbC0+RGVidWdJbnRlcmZhY2UsCi0gICAgICAgICAgICAgICAgICJCTEtJRl9PUHM6IEJB
UlJJRVI9JXUgRElTQ0FSRD0ldSBGTFVTSD0ldVxuIiwKLSAgICAgICAgICAgICAgICAgUHJvdG9j
b2wtPkJsa09wQmFycmllciwKLSAgICAgICAgICAgICAgICAgUHJvdG9jb2wtPkJsa09wRGlzY2Fy
ZCwKLSAgICAgICAgICAgICAgICAgUHJvdG9jb2wtPkJsa09wRmx1c2gpOwogICAgIFhFTkJVU19E
RUJVRyhQcmludGYsCiAgICAgICAgICAgICAgICAgICZQcm90b2NvbC0+RGVidWdJbnRlcmZhY2Us
CiAgICAgICAgICAgICAgICAgICJTZWdtZW50cyBHcmFudGVkPSVsbHUgQm91bmNlZD0lbGx1XG4i
LAogICAgICAgICAgICAgICAgICBQcm90b2NvbC0+U2Vnc0dyYW50ZWQsCiAgICAgICAgICAgICAg
ICAgIFByb3RvY29sLT5TZWdzQm91bmNlZCk7Ci0KLSAgICBRdWV1ZURlYnVnQ2FsbGJhY2soJlBy
b3RvY29sLT5QcmVwYXJlZFJlcXMsCi0gICAgICAgICAgICAgICAgICAgICAgICJQcmVwYXJlZCAi
LAotICAgICAgICAgICAgICAgICAgICAgICAmUHJvdG9jb2wtPkRlYnVnSW50ZXJmYWNlKTsKLSAg
ICBRdWV1ZURlYnVnQ2FsbGJhY2soJlByb3RvY29sLT5TdWJtaXR0ZWRSZXFzLAotICAgICAgICAg
ICAgICAgICAgICAgICAiU3VibWl0dGVkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgJlByb3Rv
Y29sLT5EZWJ1Z0ludGVyZmFjZSk7Ci0gICAgUXVldWVEZWJ1Z0NhbGxiYWNrKCZQcm90b2NvbC0+
U2h1dGRvd25TcmJzLAotICAgICAgICAgICAgICAgICAgICAgICAiU2h1dGRvd24gIiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgJlByb3RvY29sLT5EZWJ1Z0ludGVyZmFjZSk7CiB9CiAKIHN0YXRp
YyBERUNMU1BFQ19OT0lOTElORSBWT0lECkBAIC0xMzkxLDcgKzE4MzEsNyBAQCBQcm90b2NvbEFj
cXVpcmVMb2NrKAogc3RhdGljIERFQ0xTUEVDX05PSU5MSU5FIFZPSUQKIFByb3RvY29sUmVsZWFz
ZUxvY2soCiAgICAgSU4gIFBWT0lEICAgICAgIEFyZ3VtZW50Ci0gICAgKQorKQogewogICAgIFBY
RU5WQkRfUFJPVE9DT0wgICAgUHJvdG9jb2wgPSBBcmd1bWVudDsKICAgICBLZVJlbGVhc2VTcGlu
TG9ja0Zyb21EcGNMZXZlbCgmUHJvdG9jb2wtPkxvY2spOwpAQCAtMTQyNiw3ICsxODY2LDcgQEAg
c3RhdGljIERFQ0xTUEVDX05PSU5MSU5FIE5UU1RBVFVTCiBQcm90b2NvbFNlZ21lbnRDdG9yKAog
ICAgIElOICBQVk9JRCAgICAgICBBcmd1bWVudCwKICAgICBJTiAgUFZPSUQgICAgICAgT2JqZWN0
Ci0gICAgKQorKQogewogICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoQXJndW1lbnQpOwogICAg
IFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoT2JqZWN0KTsKQEAgLTE0ODgsMTIgKzE5MjgsMTMgQEAg
UHJvdG9jb2xJbmRpcmVjdER0b3IoCiBOVFNUQVRVUwogUHJvdG9jb2xDcmVhdGUoCiAgICAgSU4g
IFBYRU5WQkRfRlJPTlRFTkQgICAgRnJvbnRlbmQsCi0gICAgT1VUIFBYRU5WQkRfUFJPVE9DT0wq
ICAgICAgIFByb3RvY29sCisgICAgT1VUIFBYRU5WQkRfUFJPVE9DT0wqICAgUHJvdG9jb2wKICAg
ICApCiB7CiAgICAgUFhFTlZCRF9UQVJHRVQgICAgICAgICAgVGFyZ2V0ID0gRnJvbnRlbmRHZXRU
YXJnZXQoRnJvbnRlbmQpOwogICAgIFBYRU5WQkRfQURBUFRFUiAgICAgICAgIEFkYXB0ZXIgPSBU
YXJnZXRHZXRBZGFwdGVyKFRhcmdldCk7CiAgICAgQ0hBUiAgICAgICAgICAgICAgICAgICAgTmFt
ZVtNQVhfTkFNRV9MRU5dOworICAgIFVMT05HICAgICAgICAgICAgICAgICAgIEluZGV4OwogICAg
IE5UU1RBVFVTICAgICAgICAgICAgICAgIHN0YXR1czsKIAogICAgICpQcm90b2NvbCA9IF9fUHJv
dG9jb2xBbGxvY2F0ZShzaXplb2YoWEVOVkJEX1BST1RPQ09MKSk7CkBAIC0xNTA0LDEyICsxOTQ1
LDYgQEAgUHJvdG9jb2xDcmVhdGUoCiAKICAgICAoKlByb3RvY29sKS0+RnJvbnRlbmQgPSBGcm9u
dGVuZDsKICAgICBLZUluaXRpYWxpemVTcGluTG9jaygmKCpQcm90b2NvbCktPkxvY2spOwotICAg
IEtlSW5pdGlhbGl6ZVRocmVhZGVkRHBjKCYoKlByb3RvY29sKS0+RHBjLCBQcm90b2NvbERwYywg
KlByb3RvY29sKTsKLSAgICBLZVNldEltcG9ydGFuY2VEcGMoJigqUHJvdG9jb2wpLT5EcGMsIE1l
ZGl1bUhpZ2hJbXBvcnRhbmNlKTsKLQotICAgIFF1ZXVlSW5pdCgmKCpQcm90b2NvbCktPlByZXBh
cmVkUmVxcyk7Ci0gICAgUXVldWVJbml0KCYoKlByb3RvY29sKS0+U3VibWl0dGVkUmVxcyk7Ci0g
ICAgUXVldWVJbml0KCYoKlByb3RvY29sKS0+U2h1dGRvd25TcmJzKTsKIAogICAgIEFkYXB0ZXJH
ZXRDYWNoZUludGVyZmFjZShBZGFwdGVyLCAmKCpQcm90b2NvbCktPkNhY2hlSW50ZXJmYWNlKTsK
IApAQCAtMTU4MCw4ICsyMDE1LDQxIEBAIFByb3RvY29sQ3JlYXRlKAogICAgIGlmICghTlRfU1VD
Q0VTUyhzdGF0dXMpKQogICAgICAgICBnb3RvIGZhaWw4OwogCisgICAgKCpQcm90b2NvbCktPk51
bVF1ZXVlcyA9IEZyb250ZW5kR2V0TXVsdGlRdWV1ZU1heFF1ZXVlcyhGcm9udGVuZCk7CisgICAg
aWYgKCgqUHJvdG9jb2wpLT5OdW1RdWV1ZXMgPT0gMCkKKyAgICAgICAgKCpQcm90b2NvbCktPk51
bVF1ZXVlcyA9IDE7CisgICAgKCpQcm90b2NvbCktPlJpbmdzID0gX19Qcm90b2NvbEFsbG9jYXRl
KHNpemVvZihQWEVOVkJEX1JJTkcpICogKCpQcm90b2NvbCktPk51bVF1ZXVlcyk7CisKKyAgICBz
dGF0dXMgPSBTVEFUVVNfTk9fTUVNT1JZOworICAgIGlmICgoKlByb3RvY29sKS0+UmluZ3MgPT0g
TlVMTCkKKyAgICAgICAgZ290byBmYWlsOTsKKworICAgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8
ICgqUHJvdG9jb2wpLT5OdW1RdWV1ZXM7ICsrSW5kZXgpIHsKKyAgICAgICAgc3RhdHVzID0gUmlu
Z0NyZWF0ZSgqUHJvdG9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXgsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJigqUHJvdG9jb2wpLT5SaW5nc1tJbmRleF0pOwor
ICAgICAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkKKyAgICAgICAgICAgIGdvdG8gZmFpbDEw
OworICAgIH0KKwogICAgIHJldHVybiBTVEFUVVNfU1VDQ0VTUzsKIAorZmFpbDEwOgorICAgIEVy
cm9yKCJmYWlsMTBcbiIpOworICAgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8ICgqUHJvdG9jb2wp
LT5OdW1RdWV1ZXM7ICsrSW5kZXgpIHsKKyAgICAgICAgaWYgKCgqUHJvdG9jb2wpLT5SaW5nc1tJ
bmRleF0pCisgICAgICAgICAgICBSaW5nRGVzdHJveSgoKlByb3RvY29sKS0+UmluZ3NbSW5kZXhd
KTsKKyAgICAgICAgKCpQcm90b2NvbCktPlJpbmdzW0luZGV4XSA9IE5VTEw7CisgICAgfQorICAg
IF9fUHJvdG9jb2xGcmVlKCgqUHJvdG9jb2wpLT5SaW5ncyk7CisgICAgKCpQcm90b2NvbCktPlJp
bmdzID0gTlVMTDsKK2ZhaWw5OgorICAgIEVycm9yKCJmYWlsOVxuIik7CisgICAgKCpQcm90b2Nv
bCktPk51bVF1ZXVlcyA9IDA7CisgICAgWEVOQlVTX0NBQ0hFKERlc3Ryb3ksCisgICAgICAgICAg
ICAgICAgICYoKlByb3RvY29sKS0+Q2FjaGVJbnRlcmZhY2UsCisgICAgICAgICAgICAgICAgICgq
UHJvdG9jb2wpLT5JbmRpcmVjdENhY2hlKTsKKyAgICAoKlByb3RvY29sKS0+SW5kaXJlY3RDYWNo
ZSA9IE5VTEw7CiBmYWlsODoKICAgICBFcnJvcigiZmFpbDhcbiIpOwogZmFpbDc6CkBAIC0xNjA4
LDEzICsyMDc2LDggQEAgZmFpbDI6CiAgICAgRXJyb3IoImZhaWwyXG4iKTsKIAogICAgIFJ0bFpl
cm9NZW1vcnkoJigqUHJvdG9jb2wpLT5DYWNoZUludGVyZmFjZSwKLSAgICAgICAgICAgICAgICAg
IHNpemVvZiAoWEVOQlVTX0NBQ0hFX0lOVEVSRkFDRSkpOworICAgICAgICAgICAgICAgICAgc2l6
ZW9mKFhFTkJVU19DQUNIRV9JTlRFUkZBQ0UpKTsKIAotICAgIFJ0bFplcm9NZW1vcnkoJigqUHJv
dG9jb2wpLT5QcmVwYXJlZFJlcXMsIHNpemVvZihYRU5WQkRfUVVFVUUpKTsKLSAgICBSdGxaZXJv
TWVtb3J5KCYoKlByb3RvY29sKS0+U3VibWl0dGVkUmVxcywgc2l6ZW9mKFhFTlZCRF9RVUVVRSkp
OwotICAgIFJ0bFplcm9NZW1vcnkoJigqUHJvdG9jb2wpLT5TaHV0ZG93blNyYnMsIHNpemVvZihY
RU5WQkRfUVVFVUUpKTsKLQotICAgIFJ0bFplcm9NZW1vcnkoJigqUHJvdG9jb2wpLT5EcGMsIHNp
emVvZihLRFBDKSk7CiAgICAgUnRsWmVyb01lbW9yeSgmKCpQcm90b2NvbCktPkxvY2ssIHNpemVv
ZihLU1BJTl9MT0NLKSk7CiAgICAgKCpQcm90b2NvbCktPkZyb250ZW5kID0gTlVMTDsKIApAQCAt
MTYzMSw2ICsyMDk0LDE5IEBAIFByb3RvY29sRGVzdHJveSgKICAgICBJTiAgUFhFTlZCRF9QUk9U
T0NPTCAgICBQcm90b2NvbAogICAgICkKIHsKKyAgICBVTE9ORyAgICAgICAgICAgICAgICAgICBJ
bmRleDsKKworICAgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IFByb3RvY29sLT5OdW1RdWV1ZXM7
ICsrSW5kZXgpIHsKKyAgICAgICAgaWYgKFByb3RvY29sLT5SaW5nc1tJbmRleF0pCisgICAgICAg
ICAgICBSaW5nRGVzdHJveShQcm90b2NvbC0+UmluZ3NbSW5kZXhdKTsKKyAgICAgICAgUHJvdG9j
b2wtPlJpbmdzW0luZGV4XSA9IDA7CisgICAgfQorCisgICAgX19Qcm90b2NvbEZyZWUoUHJvdG9j
b2wtPlJpbmdzKTsKKyAgICBQcm90b2NvbC0+UmluZ3MgPSBOVUxMOworCisgICAgUHJvdG9jb2wt
Pk51bVF1ZXVlcyA9IDA7CisKICAgICBYRU5CVVNfQ0FDSEUoRGVzdHJveSwKICAgICAgICAgICAg
ICAgICAgJlByb3RvY29sLT5DYWNoZUludGVyZmFjZSwKICAgICAgICAgICAgICAgICAgUHJvdG9j
b2wtPkluZGlyZWN0Q2FjaGUpOwpAQCAtMTY1MCwyNiArMjEyNiwxNCBAQCBQcm90b2NvbERlc3Ry
b3koCiAgICAgICAgICAgICAgICAgICZQcm90b2NvbC0+Q2FjaGVJbnRlcmZhY2UpOwogCiAgICAg
UnRsWmVyb01lbW9yeSgmUHJvdG9jb2wtPkNhY2hlSW50ZXJmYWNlLAotICAgICAgICAgICAgICAg
ICAgc2l6ZW9mIChYRU5CVVNfQ0FDSEVfSU5URVJGQUNFKSk7CisgICAgICAgICAgICAgICAgIHNp
emVvZihYRU5CVVNfQ0FDSEVfSU5URVJGQUNFKSk7CiAKLSAgICBSdGxaZXJvTWVtb3J5KCZQcm90
b2NvbC0+UHJlcGFyZWRSZXFzLCBzaXplb2YoWEVOVkJEX1FVRVVFKSk7Ci0gICAgUnRsWmVyb01l
bW9yeSgmUHJvdG9jb2wtPlN1Ym1pdHRlZFJlcXMsIHNpemVvZihYRU5WQkRfUVVFVUUpKTsKLSAg
ICBSdGxaZXJvTWVtb3J5KCZQcm90b2NvbC0+U2h1dGRvd25TcmJzLCBzaXplb2YoWEVOVkJEX1FV
RVVFKSk7CisgICAgUHJvdG9jb2wtPlNlZ3NHcmFudGVkID0gMDsKKyAgICBQcm90b2NvbC0+U2Vn
c0JvdW5jZWQgPSAwOwogCi0gICAgUnRsWmVyb01lbW9yeSgmUHJvdG9jb2wtPkRwYywgc2l6ZW9m
KEtEUEMpKTsKICAgICBSdGxaZXJvTWVtb3J5KCZQcm90b2NvbC0+TG9jaywgc2l6ZW9mKEtTUElO
X0xPQ0spKTsKICAgICBQcm90b2NvbC0+RnJvbnRlbmQgPSBOVUxMOwogCi0gICAgUHJvdG9jb2wt
PkJsa09wUmVhZCA9IDA7Ci0gICAgUHJvdG9jb2wtPkJsa09wV3JpdGUgPSAwOwotICAgIFByb3Rv
Y29sLT5CbGtPcEluZGlyZWN0UmVhZCA9IDA7Ci0gICAgUHJvdG9jb2wtPkJsa09wSW5kaXJlY3RX
cml0ZSA9IDA7Ci0gICAgUHJvdG9jb2wtPkJsa09wQmFycmllciA9IDA7Ci0gICAgUHJvdG9jb2wt
PkJsa09wRGlzY2FyZCA9IDA7Ci0gICAgUHJvdG9jb2wtPkJsa09wRmx1c2ggPSAwOwotICAgIFBy
b3RvY29sLT5TZWdzR3JhbnRlZCA9IDA7Ci0gICAgUHJvdG9jb2wtPlNlZ3NCb3VuY2VkID0gMDsK
LQogICAgIEFTU0VSVChJc1plcm9NZW1vcnkoUHJvdG9jb2wsIHNpemVvZihYRU5WQkRfUFJPVE9D
T0wpKSk7CiAgICAgX19Qcm90b2NvbEZyZWUoUHJvdG9jb2wpOwogfQpAQCAtMTY4MSw3ICsyMTQ1
LDYgQEAgUHJvdG9jb2xDb25uZWN0KAogewogICAgIFBYRU5WQkRfVEFSR0VUICAgICAgVGFyZ2V0
ID0gRnJvbnRlbmRHZXRUYXJnZXQoUHJvdG9jb2wtPkZyb250ZW5kKTsKICAgICBQWEVOVkJEX0FE
QVBURVIgICAgIEFkYXB0ZXIgPSBUYXJnZXRHZXRBZGFwdGVyKFRhcmdldCk7Ci0gICAgUFhFTlZC
RF9HUkFOVEVSICAgICBHcmFudGVyID0gRnJvbnRlbmRHZXRHcmFudGVyKFByb3RvY29sLT5Gcm9u
dGVuZCk7CiAgICAgUENIQVIgICAgICAgICAgICAgICBCdWZmZXI7CiAgICAgVUxPTkcgICAgICAg
ICAgICAgICBJbmRleDsKICAgICBOVFNUQVRVUyAgICAgICAgICAgIHN0YXR1czsKQEAgLTE3MzAs
NDggKzIxOTMsMTIgQEAgUHJvdG9jb2xDb25uZWN0KAogICAgICAgICBQcm90b2NvbC0+T3JkZXIg
PSAwOwogICAgIH0KIAotICAgIFByb3RvY29sLT5NZGwgPSBfX0FsbG9jYXRlUGFnZXMoMSA8PCBQ
cm90b2NvbC0+T3JkZXIpOwotCi0gICAgc3RhdHVzID0gU1RBVFVTX05PX01FTU9SWTsKLSAgICBp
ZiAoUHJvdG9jb2wtPk1kbCA9PSBOVUxMKQotICAgICAgICBnb3RvIGZhaWw0OwotCi0gICAgUHJv
dG9jb2wtPlNoYXJlZCA9IE1tR2V0U3lzdGVtQWRkcmVzc0Zvck1kbFNhZmUoUHJvdG9jb2wtPk1k
bCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vcm1h
bFBhZ2VQcmlvcml0eSk7Ci0gICAgQVNTRVJUKFByb3RvY29sLT5TaGFyZWQgIT0gTlVMTCk7Ci0K
LSNwcmFnbWEgd2FybmluZyhwdXNoKQotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQzMDUpCi0j
cHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDMxMSkgLy8gJ3R5cGUgY2FzdCcgcG9pbnRlciB0cnVu
Y2F0aW9uIGZyb20gJ2Jsa2lmX3NyaW5nX2VudHJ5WzFdJyB0byAnbG9uZycKLSAgICBTSEFSRURf
UklOR19JTklUKFByb3RvY29sLT5TaGFyZWQpOwotICAgIEZST05UX1JJTkdfSU5JVCgmUHJvdG9j
b2wtPkZyb250LCBQcm90b2NvbC0+U2hhcmVkLCBQQUdFX1NJWkUgPDwgUHJvdG9jb2wtPk9yZGVy
KTsKLSNwcmFnbWEgd2FybmluZyhwb3ApCi0KLSAgICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCAo
MXVsIDw8IFByb3RvY29sLT5PcmRlcik7ICsrSW5kZXgpIHsKLSAgICAgICAgc3RhdHVzID0gR3Jh
bnRlckdldChHcmFudGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1tR2V0TWRsUGZu
QXJyYXkoUHJvdG9jb2wtPk1kbClbSW5kZXhdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEZBTFNFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQcm90b2NvbC0+R3JhbnRzW0lu
ZGV4XSk7CisgICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgUHJvdG9jb2wtPk51bVF1ZXVlczsg
KytJbmRleCkgeworICAgICAgICBzdGF0dXMgPSBSaW5nQ29ubmVjdChQcm90b2NvbC0+UmluZ3Nb
SW5kZXhdKTsKICAgICAgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpCi0gICAgICAgICAgICBn
b3RvIGZhaWw1OworICAgICAgICAgICAgZ290byBmYWlsNDsKICAgICB9CiAKLSAgICBQcm90b2Nv
bC0+Q2hhbm5lbCA9IFhFTkJVU19FVlRDSE4oT3BlbiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAmUHJvdG9jb2wtPkV2dGNobkludGVyZmFjZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBYRU5CVVNfRVZUQ0hOX1RZUEVfVU5CT1VORCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBQcm90b2NvbEludGVycnVwdCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBQcm90b2NvbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBGcm9udGVuZEdldEJhY2tlbmREb21haW4oUHJvdG9jb2wtPkZyb250ZW5kKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFKTsKLSAgICBzdGF0dXMgPSBTVEFU
VVNfTk9fTUVNT1JZOwotICAgIGlmIChQcm90b2NvbC0+Q2hhbm5lbCA9PSBOVUxMKQotICAgICAg
ICBnb3RvIGZhaWw2OwotCi0gICAgWEVOQlVTX0VWVENITihVbm1hc2ssCi0gICAgICAgICAgICAg
ICAgICAmUHJvdG9jb2wtPkV2dGNobkludGVyZmFjZSwKLSAgICAgICAgICAgICAgICAgIFByb3Rv
Y29sLT5DaGFubmVsLAotICAgICAgICAgICAgICAgICAgRkFMU0UpOwotCiAgICAgc3RhdHVzID0g
WEVOQlVTX0RFQlVHKFJlZ2lzdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAmUHJvdG9j
b2wtPkRlYnVnSW50ZXJmYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX01PRFVMRV9f
InxQUk9UT0NPTCIsCkBAIC0xNzc5LDM4ICsyMjA2LDIwIEBAIFByb3RvY29sQ29ubmVjdCgKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUHJvdG9jb2wsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICZQcm90b2NvbC0+RGVidWdDYWxsYmFjayk7CiAgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1
cykpCi0gICAgICAgIGdvdG8gZmFpbDc7CisgICAgICAgIGdvdG8gZmFpbDU7CiAKICAgICBQcm90
b2NvbC0+Q29ubmVjdGVkID0gVFJVRTsKICAgICByZXR1cm4gU1RBVFVTX1NVQ0NFU1M7CiAKLWZh
aWw3OgotICAgIEVycm9yKCJmYWlsN1xuIik7Ci0gICAgWEVOQlVTX0VWVENITihDbG9zZSwKLSAg
ICAgICAgICAgICAgICAgICZQcm90b2NvbC0+RXZ0Y2huSW50ZXJmYWNlLAotICAgICAgICAgICAg
ICAgICAgUHJvdG9jb2wtPkNoYW5uZWwpOwotICAgIFByb3RvY29sLT5DaGFubmVsID0gTlVMTDsK
LWZhaWw2OgotICAgIEVycm9yKCJmYWlsNlxuIik7CiBmYWlsNToKICAgICBFcnJvcigiZmFpbDVc
biIpOwotICAgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8ICgxdWwgPDwgUHJvdG9jb2wtPk9yZGVy
KTsgKytJbmRleCkgewotICAgICAgICBpZiAoUHJvdG9jb2wtPkdyYW50c1tJbmRleF0gPT0gTlVM
TCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIEdyYW50ZXJQdXQoR3JhbnRlciwg
UHJvdG9jb2wtPkdyYW50c1tJbmRleF0pOwotICAgICAgICBQcm90b2NvbC0+R3JhbnRzW0luZGV4
XSA9IE5VTEw7Ci0gICAgfQotCi0gICAgUnRsWmVyb01lbW9yeSgmUHJvdG9jb2wtPkZyb250LCBz
aXplb2YoYmxraWZfZnJvbnRfcmluZ190KSk7Ci0KLSAgICBfX0ZyZWVQYWdlcyhQcm90b2NvbC0+
TWRsKTsKLSAgICBQcm90b2NvbC0+U2hhcmVkID0gTlVMTDsKLSAgICBQcm90b2NvbC0+TWRsID0g
TlVMTDsKLQotICAgIFByb3RvY29sLT5PcmRlciA9IDA7CisgICAgSW5kZXggPSBQcm90b2NvbC0+
TnVtUXVldWVzOwogZmFpbDQ6CiAgICAgRXJyb3IoImZhaWw0XG4iKTsKKyAgICB3aGlsZSAoSW5k
ZXgtLSAhPSAwKSB7CisgICAgICAgIFJpbmdEaXNjb25uZWN0KFByb3RvY29sLT5SaW5nc1tJbmRl
eF0pOworICAgIH0KKyAgICBQcm90b2NvbC0+T3JkZXIgPSAwOwogICAgIFhFTkJVU19ERUJVRyhS
ZWxlYXNlLCAmUHJvdG9jb2wtPkRlYnVnSW50ZXJmYWNlKTsKIGZhaWwzOgogICAgIEVycm9yKCJm
YWlsM1xuIik7CkBAIC0xODM0LDI2ICsyMjQzLDIwIEBAIGZhaWwxOgogTlRTVEFUVVMKIFByb3Rv
Y29sU3RvcmVXcml0ZSgKICAgICBJTiAgUFhFTlZCRF9QUk9UT0NPTCAgICBQcm90b2NvbCwKLSAg
ICBJTiAgUFZPSUQgICAgICAgICAgIFRyYW5zYWN0aW9uCisgICAgSU4gIFBWT0lEICAgICAgICAg
ICAgICAgVHJhbnNhY3Rpb24KICAgICApCiB7Ci0gICAgUFhFTlZCRF9HUkFOVEVSICAgICBHcmFu
dGVyID0gRnJvbnRlbmRHZXRHcmFudGVyKFByb3RvY29sLT5Gcm9udGVuZCk7Ci0gICAgVUxPTkcg
ICAgICAgICAgICAgICBQb3J0OwotICAgIE5UU1RBVFVTICAgICAgICAgICAgc3RhdHVzOworICAg
IFVMT05HICAgICAgICAgICAgICAgICAgIEluZGV4OworICAgIE5UU1RBVFVTICAgICAgICAgICAg
ICAgIHN0YXR1czsKIAotICAgIGlmIChQcm90b2NvbC0+T3JkZXIgPT0gMCkgewotICAgICAgICBz
dGF0dXMgPSBYRU5CVVNfU1RPUkUoUHJpbnRmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJlByb3RvY29sLT5TdG9yZUludGVyZmFjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFRyYW5zYWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJvbnRlbmRH
ZXRGcm9udGVuZFBhdGgoUHJvdG9jb2wtPkZyb250ZW5kKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJyaW5nLXJlZiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXUi
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JhbnRlclJlZmVyZW5jZShHcmFudGVy
LCBQcm90b2NvbC0+R3JhbnRzWzBdKSk7CisgICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgUHJv
dG9jb2wtPk51bVF1ZXVlczsgKytJbmRleCkgeworICAgICAgICBzdGF0dXMgPSBSaW5nU3RvcmVX
cml0ZShQcm90b2NvbC0+UmluZ3NbSW5kZXhdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBUcmFuc2FjdGlvbik7CiAgICAgICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKQogICAg
ICAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICB9IGVsc2UgewotICAgICAgICBVTE9ORyAgICAg
ICAgICAgSW5kZXg7CisgICAgfQogCisgICAgaWYgKFByb3RvY29sLT5PcmRlciAhPSAwKSB7CiAg
ICAgICAgIHN0YXR1cyA9IFhFTkJVU19TVE9SRShQcmludGYsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAmUHJvdG9jb2wtPlN0b3JlSW50ZXJmYWNlLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVHJhbnNhY3Rpb24sCkBAIC0xODYzLDQ5ICsyMjY2LDI0IEBAIFByb3RvY29s
U3RvcmVXcml0ZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb3RvY29sLT5PcmRl
cik7CiAgICAgICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKQogICAgICAgICAgICAgcmV0dXJu
IHN0YXR1czsKLQotICAgICAgICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCAoMXVsIDw8IFByb3Rv
Y29sLT5PcmRlcik7ICsrSW5kZXgpIHsKLSAgICAgICAgICAgIENIQVIgICAgICAgIE5hbWVbTUFY
X05BTUVfTEVOKzFdOwotCi0gICAgICAgICAgICBzdGF0dXMgPSBSdGxTdHJpbmdDY2hQcmludGZB
KE5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1BWF9OQU1F
X0xFTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJpbmctcmVm
JXUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleCk7Ci0g
ICAgICAgICAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gc3RhdHVzOwotCi0gICAgICAgICAgICBzdGF0dXMgPSBYRU5CVVNfU1RPUkUoUHJpbnRmLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQcm90b2NvbC0+U3RvcmVJbnRlcmZh
Y2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNhY3Rpb24sCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJvbnRlbmRHZXRGcm9udGVuZFBhdGgoUHJv
dG9jb2wtPkZyb250ZW5kKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1l
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIldSIsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR3JhbnRlclJlZmVyZW5jZShHcmFudGVyLCBQcm90b2NvbC0+
R3JhbnRzW0luZGV4XSkpOwotICAgICAgICAgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICAgICAgfQogICAgIH0KIAogICAgIHN0
YXR1cyA9IFhFTkJVU19TVE9SRShQcmludGYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICZQ
cm90b2NvbC0+U3RvcmVJbnRlcmZhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5z
YWN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICBGcm9udGVuZEdldEZyb250ZW5kUGF0
aChQcm90b2NvbC0+RnJvbnRlbmQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAicHJvdG9j
b2wiLAotICAgICAgICAgICAgICAgICAgICAgICAgICBYRU5fSU9fUFJPVE9fQUJJKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgIm11bHRpLXF1ZXVlLW51bS1xdWV1ZXMiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAiJXUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBQcm90b2Nv
bC0+TnVtUXVldWVzKTsKICAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkKICAgICAgICAgcmV0
dXJuIHN0YXR1czsKIAotICAgIFBvcnQgPSBYRU5CVVNfRVZUQ0hOKEdldFBvcnQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgJlByb3RvY29sLT5FdnRjaG5JbnRlcmZhY2UsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgUHJvdG9jb2wtPkNoYW5uZWwpOwotCiAgICAgc3RhdHVzID0gWEVOQlVT
X1NUT1JFKFByaW50ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgJlByb3RvY29sLT5TdG9y
ZUludGVyZmFjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNhY3Rpb24sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEZyb250ZW5kR2V0RnJvbnRlbmRQYXRoKFByb3RvY29sLT5G
cm9udGVuZCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJldmVudC1jaGFubmVsIiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgIiV1IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
UG9ydCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICJwcm90b2NvbCIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgIFhFTl9JT19QUk9UT19BQkkpOwogICAgIGlmICghTlRfU1VDQ0VTUyhz
dGF0dXMpKQogICAgICAgICByZXR1cm4gc3RhdHVzOwogCkBAIC0xOTE3LDEyICsyMjk1LDEzIEBA
IFByb3RvY29sRW5hYmxlKAogICAgIElOICBQWEVOVkJEX1BST1RPQ09MICAgIFByb3RvY29sCiAg
ICAgKQogeworICAgIFVMT05HICAgICAgICAgICAgICAgICAgIEluZGV4OworCiAgICAgQVNTRVJU
KFByb3RvY29sLT5FbmFibGVkID09IEZBTFNFKTsKICAgICBQcm90b2NvbC0+RW5hYmxlZCA9IFRS
VUU7CiAKLSAgICBYRU5CVVNfRVZUQ0hOKFRyaWdnZXIsCi0gICAgICAgICAgICAgICAgICAmUHJv
dG9jb2wtPkV2dGNobkludGVyZmFjZSwKLSAgICAgICAgICAgICAgICAgIFByb3RvY29sLT5DaGFu
bmVsKTsKKyAgICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBQcm90b2NvbC0+TnVtUXVldWVzOyAr
K0luZGV4KQorICAgICAgICBSaW5nRW5hYmxlKFByb3RvY29sLT5SaW5nc1tJbmRleF0pOwogfQog
CiBWT0lECkBAIC0xOTMwLDU2ICsyMzA5LDEzIEBAIFByb3RvY29sRGlzYWJsZSgKICAgICBJTiAg
UFhFTlZCRF9QUk9UT0NPTCAgICBQcm90b2NvbAogICAgICkKIHsKLSAgICBVTE9ORyAgICAgICAg
ICAgICAgIENvdW50OwotICAgIEtJUlFMICAgICAgICAgICAgICAgSXJxbDsKLSAgICBQWEVOVkJE
X1RBUkdFVCAgICAgIFRhcmdldCA9IEZyb250ZW5kR2V0VGFyZ2V0KFByb3RvY29sLT5Gcm9udGVu
ZCk7Ci0gICAgUFhFTlZCRF9BREFQVEVSICAgICBBZGFwdGVyID0gVGFyZ2V0R2V0QWRhcHRlcihU
YXJnZXQpOworICAgIFVMT05HICAgICAgICAgICAgICAgICAgIEluZGV4OwogCiAgICAgQVNTRVJU
KFByb3RvY29sLT5FbmFibGVkID09IFRSVUUpOwogICAgIFByb3RvY29sLT5FbmFibGVkID0gRkFM
U0U7CiAKLSAgICAvLyBwb2xsIHJpbmcgYW5kIHNlbmQgZXZlbnQgY2hhbm5lbCBub3RpZmljYXRp
b24gZXZlcnkgMW1zIChmb3IgdXAgdG8gMyBtaW51dGVzKQotICAgIENvdW50ID0gMDsKLSAgICB3
aGlsZSAoUXVldWVDb3VudCgmUHJvdG9jb2wtPlN1Ym1pdHRlZFJlcXMpKSB7Ci0gICAgICAgIGlm
IChDb3VudCA+IDE4MDAwMCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBLZVJhaXNlSXJx
bChESVNQQVRDSF9MRVZFTCwgJklycWwpOwotICAgICAgICBQcm90b2NvbFBvbGwoUHJvdG9jb2wp
OwotICAgICAgICBLZUxvd2VySXJxbChJcnFsKTsKLSAgICAgICAgWEVOQlVTX0VWVENITihTZW5k
LAotICAgICAgICAgICAgICAgICAgICAgICZQcm90b2NvbC0+RXZ0Y2huSW50ZXJmYWNlLAotICAg
ICAgICAgICAgICAgICAgICAgIFByb3RvY29sLT5DaGFubmVsKTsKLSAgICAgICAgU3RvclBvcnRT
dGFsbEV4ZWN1dGlvbigxMDAwKTsgICAvLyAxMDAwIG1pY3JvLXNlY29uZHMKLSAgICAgICAgKytD
b3VudDsKLSAgICB9Ci0KLSAgICBWZXJib3NlKCJUYXJnZXRbJWRdIDogJXUgU3VibWl0dGVkIHJl
cXVlc3RzIGxlZnQgKCV1IGl0ZXJyYXRpb25zKVxuIiwKLSAgICAgICAgICAgIEZyb250ZW5kR2V0
VGFyZ2V0SWQoUHJvdG9jb2wtPkZyb250ZW5kKSwKLSAgICAgICAgICAgIFF1ZXVlQ291bnQoJlBy
b3RvY29sLT5TdWJtaXR0ZWRSZXFzKSwKLSAgICAgICAgICAgIENvdW50KTsKLQotICAgIC8vIEZh
aWwgUHJlcGFyZWRSZXFzCi0gICAgZm9yICg7OykgewotICAgICAgICBQWEVOVkJEX1NSQkVYVCAg
ICAgIFNyYkV4dDsKLSAgICAgICAgUFNDU0lfUkVRVUVTVF9CTE9DSyBTcmI7Ci0gICAgICAgIFBY
RU5WQkRfUkVRVUVTVCAgICAgUmVxdWVzdDsKLSAgICAgICAgUExJU1RfRU5UUlkgICAgICAgICBM
aXN0RW50cnk7Ci0KLSAgICAgICAgTGlzdEVudHJ5ID0gUXVldWVQb3AoJlByb3RvY29sLT5QcmVw
YXJlZFJlcXMpOwotICAgICAgICBpZiAoTGlzdEVudHJ5ID09IE5VTEwpCi0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgUmVxdWVzdCA9IENPTlRBSU5JTkdfUkVDT1JEKExpc3RFbnRyeSwgWEVO
VkJEX1JFUVVFU1QsIExpc3RFbnRyeSk7Ci0gICAgICAgIFNyYkV4dCA9IFJlcXVlc3QtPlNyYkV4
dDsKLSAgICAgICAgU3JiID0gU3JiRXh0LT5TcmI7Ci0KLSAgICAgICAgU3JiLT5TcmJTdGF0dXMg
PSBTUkJfU1RBVFVTX0FCT1JURUQ7Ci0gICAgICAgIFNyYi0+U2NzaVN0YXR1cyA9IDB4NDA7IC8v
IFNDU0lfQUJPUlRFRAotCi0gICAgICAgIFByb3RvY29sUHV0UmVxdWVzdChQcm90b2NvbCwgUmVx
dWVzdCk7Ci0KLSAgICAgICAgaWYgKEludGVybG9ja2VkRGVjcmVtZW50KCZTcmJFeHQtPlJlcXVl
c3RDb3VudCkgPT0gMCkKLSAgICAgICAgICAgIEFkYXB0ZXJDb21wbGV0ZVNyYihBZGFwdGVyLCBT
cmJFeHQpOwotICAgIH0KKyAgICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBQcm90b2NvbC0+TnVt
UXVldWVzOyArK0luZGV4KQorICAgICAgICBSaW5nRGlzYWJsZShQcm90b2NvbC0+UmluZ3NbSW5k
ZXhdKTsKIH0KIAogVk9JRApAQCAtMTk4NywxMCArMjMyMyw4IEBAIFByb3RvY29sRGlzY29ubmVj
dCgKICAgICBJTiAgUFhFTlZCRF9QUk9UT0NPTCAgICBQcm90b2NvbAogICAgICkKIHsKLSAgICBQ
WEVOVkJEX0dSQU5URVIgICAgIEdyYW50ZXIgPSBGcm9udGVuZEdldEdyYW50ZXIoUHJvdG9jb2wt
PkZyb250ZW5kKTsKICAgICBVTE9ORyAgICAgICAgICAgICAgIEluZGV4OwogCi0gICAgQVNTRVJU
M1UoUHJvdG9jb2wtPlN1Ym1pdHRlZCwgPT0sIFByb3RvY29sLT5SZWNlaXZlZCk7CiAgICAgQVNT
RVJUKFByb3RvY29sLT5Db25uZWN0ZWQpOwogICAgIFByb3RvY29sLT5Db25uZWN0ZWQgPSBGQUxT
RTsKIApAQCAtMTk5OSwyNCArMjMzMyw4IEBAIFByb3RvY29sRGlzY29ubmVjdCgKICAgICAgICAg
ICAgICAgICAgUHJvdG9jb2wtPkRlYnVnQ2FsbGJhY2spOwogICAgIFByb3RvY29sLT5EZWJ1Z0Nh
bGxiYWNrID0gTlVMTDsKIAotICAgIFhFTkJVU19FVlRDSE4oQ2xvc2UsCi0gICAgICAgICAgICAg
ICAgICAmUHJvdG9jb2wtPkV2dGNobkludGVyZmFjZSwKLSAgICAgICAgICAgICAgICAgIFByb3Rv
Y29sLT5DaGFubmVsKTsKLSAgICBQcm90b2NvbC0+Q2hhbm5lbCA9IE5VTEw7Ci0KLSAgICBmb3Ig
KEluZGV4ID0gMDsgSW5kZXggPCAoMXVsIDw8IFByb3RvY29sLT5PcmRlcik7ICsrSW5kZXgpIHsK
LSAgICAgICAgaWYgKFByb3RvY29sLT5HcmFudHNbSW5kZXhdID09IE5VTEwpCi0gICAgICAgICAg
ICBjb250aW51ZTsKLQotICAgICAgICBHcmFudGVyUHV0KEdyYW50ZXIsIFByb3RvY29sLT5HcmFu
dHNbSW5kZXhdKTsKLSAgICAgICAgUHJvdG9jb2wtPkdyYW50c1tJbmRleF0gPSBOVUxMOwotICAg
IH0KLQotICAgIFJ0bFplcm9NZW1vcnkoJlByb3RvY29sLT5Gcm9udCwgc2l6ZW9mKGJsa2lmX2Zy
b250X3JpbmdfdCkpOwotCi0gICAgX19GcmVlUGFnZXMoUHJvdG9jb2wtPk1kbCk7Ci0gICAgUHJv
dG9jb2wtPlNoYXJlZCA9IE5VTEw7Ci0gICAgUHJvdG9jb2wtPk1kbCA9IE5VTEw7CisgICAgZm9y
IChJbmRleCA9IDA7IEluZGV4IDwgUHJvdG9jb2wtPk51bVF1ZXVlczsgKytJbmRleCkKKyAgICAg
ICAgUmluZ0Rpc2Nvbm5lY3QoUHJvdG9jb2wtPlJpbmdzW0luZGV4XSk7CiAKICAgICBQcm90b2Nv
bC0+T3JkZXIgPSAwOwogCkBAIC0yMDMwLDExICsyMzQ4LDYgQEAgUHJvdG9jb2xEaXNjb25uZWN0
KAogICAgICAgICAgICAgICAgICAgc2l6ZW9mKFhFTkJVU19FVlRDSE5fSU5URVJGQUNFKSk7CiAg
ICAgUnRsWmVyb01lbW9yeSgmUHJvdG9jb2wtPlN0b3JlSW50ZXJmYWNlLAogICAgICAgICAgICAg
ICAgICAgc2l6ZW9mKFhFTkJVU19TVE9SRV9JTlRFUkZBQ0UpKTsKLQotICAgIFByb3RvY29sLT5F
dmVudHMgPSAwOwotICAgIFByb3RvY29sLT5EcGNzID0gMDsKLSAgICBQcm90b2NvbC0+U3VibWl0
dGVkID0gMDsKLSAgICBQcm90b2NvbC0+UmVjZWl2ZWQgPSAwOwogfQogCiBWT0lECkBAIC0yMDQy
LDEyICsyMzU1LDI5IEBAIFByb3RvY29sVHJpZ2dlcigKICAgICBJTiAgUFhFTlZCRF9QUk9UT0NP
TCAgICBQcm90b2NvbAogICAgICkKIHsKKyAgICBVTE9ORyAgICAgICAgICAgICAgICAgICBJbmRl
eDsKKwogICAgIGlmICghUHJvdG9jb2wtPkVuYWJsZWQpCiAgICAgICAgIHJldHVybjsKIAotICAg
IFhFTkJVU19FVlRDSE4oVHJpZ2dlciwKLSAgICAgICAgICAgICAgICAgICZQcm90b2NvbC0+RXZ0
Y2huSW50ZXJmYWNlLAotICAgICAgICAgICAgICAgICAgUHJvdG9jb2wtPkNoYW5uZWwpOworICAg
IGZvciAoSW5kZXggPSAwOyBJbmRleCA8IFByb3RvY29sLT5OdW1RdWV1ZXM7ICsrSW5kZXgpCisg
ICAgICAgIFJpbmdUcmlnZ2VyKFByb3RvY29sLT5SaW5nc1tJbmRleF0pOworfQorCitzdGF0aWMg
Rk9SQ0VJTkxJTkUgUFhFTlZCRF9SSU5HCitfX1Byb3RvY29sR2V0UmluZygKKyAgICBJTiAgUFhF
TlZCRF9QUk9UT0NPTCAgICBQcm90b2NvbAorICAgICkKK3sKKyAgICBVTE9ORyAgICAgICAgICAg
ICAgICAgICBJbmRleDsKKworICAgIGlmIChQcm90b2NvbC0+TnVtUXVldWVzID09IDApCisgICAg
ICAgIHJldHVybiBQcm90b2NvbC0+UmluZ3NbMF07CisKKyAgICBJbmRleCA9IEtlR2V0Q3VycmVu
dFByb2Nlc3Nvck51bWJlckV4KE5VTEwpICUgUHJvdG9jb2wtPk51bVF1ZXVlczsKKyAgICBBU1NF
UlQoSW5kZXggPCBQcm90b2NvbC0+TnVtUXVldWVzKTsKKworICAgIHJldHVybiBQcm90b2NvbC0+
UmluZ3NbSW5kZXhdOwogfQogCiBCT09MRUFOCkBAIC0yMDU3LDE3ICsyMzg3LDI2IEBAIFByb3Rv
Y29sUXVldWVSZXF1ZXN0KAogICAgICkKIHsKICAgICBQU0NTSV9SRVFVRVNUX0JMT0NLIFNyYiA9
IFNyYkV4dC0+U3JiOworICAgIFBYRU5WQkRfUklORyAgICAgICAgUmluZzsKKyAgICBMSVNUX0VO
VFJZICAgICAgICAgIExpc3Q7CisKKyAgICBJbml0aWFsaXplTGlzdEhlYWQoJkxpc3QpOwogCiAg
ICAgaWYgKCFQcm90b2NvbC0+RW5hYmxlZCkKICAgICAgICAgZ290byBmYWlsMTsKIAotICAgIGlm
ICghUHJvdG9jb2xQcmVwYXJlUmVxdWVzdChQcm90b2NvbCwgU3JiRXh0KSkKKyAgICBpZiAoIVBy
b3RvY29sUHJlcGFyZVJlcXVlc3QoUHJvdG9jb2wsIFNyYkV4dCwgJkxpc3QpKQogICAgICAgICBn
b3RvIGZhaWwyOwogCi0gICAgaWYgKFByb3RvY29sU3VibWl0UmVxdWVzdHMoUHJvdG9jb2wpKSB7
CisgICAgUmluZyA9IF9fUHJvdG9jb2xHZXRSaW5nKFByb3RvY29sKTsKKyAgICBBU1NFUlQoUmlu
ZyAhPSBOVUxMKTsKKworICAgIFJpbmdRdWV1ZVJlcXVlc3RMaXN0KFJpbmcsICZMaXN0KTsKKwor
ICAgIGlmIChSaW5nU3VibWl0UmVxdWVzdHMoUmluZykpIHsKICAgICAgICAgLy8gbW9yZSBwcmVw
YXJlZC1yZXFzIHRvIHN1Ym1pdAotICAgICAgICBpZiAoS2VJbnNlcnRRdWV1ZURwYygmUHJvdG9j
b2wtPkRwYywgTlVMTCwgTlVMTCkpCi0gICAgICAgICAgICArK1Byb3RvY29sLT5EcGNzOworICAg
ICAgICBpZiAoS2VJbnNlcnRRdWV1ZURwYygmUmluZy0+RHBjLCBOVUxMLCBOVUxMKSkKKyAgICAg
ICAgICAgICsrUmluZy0+RHBjczsKICAgICB9CiAKICAgICByZXR1cm4gVFJVRTsKQEAgLTIwODEs
MTUgKzI0MjAsMjAgQEAgZmFpbDE6CiBWT0lECiBQcm90b2NvbFF1ZXVlU2h1dGRvd24oCiAgICAg
SU4gIFBYRU5WQkRfUFJPVE9DT0wgICAgUHJvdG9jb2wsCi0gICAgSU4gIFBYRU5WQkRfU1JCRVhU
ICBTcmJFeHQKKyAgICBJTiAgUFhFTlZCRF9TUkJFWFQgICAgICBTcmJFeHQKICAgICApCiB7Ci0g
ICAgUXVldWVBcHBlbmQoJlByb3RvY29sLT5TaHV0ZG93blNyYnMsCisgICAgUFhFTlZCRF9SSU5H
ICAgICAgICAgICAgUmluZzsKKworICAgIFJpbmcgPSBfX1Byb3RvY29sR2V0UmluZyhQcm90b2Nv
bCk7CisgICAgQVNTRVJUKFJpbmcgIT0gTlVMTCk7CisKKyAgICBRdWV1ZUFwcGVuZCgmUmluZy0+
U2h1dGRvd25TcmJzLAogICAgICAgICAgICAgICAgICZTcmJFeHQtPkxpc3RFbnRyeSk7CiAKICAg
ICBpZiAoIVByb3RvY29sLT5FbmFibGVkKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoS2VJ
bnNlcnRRdWV1ZURwYygmUHJvdG9jb2wtPkRwYywgTlVMTCwgTlVMTCkpCi0JICAgICsrUHJvdG9j
b2wtPkRwY3M7CisgICAgaWYgKEtlSW5zZXJ0UXVldWVEcGMoJlJpbmctPkRwYywgTlVMTCwgTlVM
TCkpCisJICAgICsrUmluZy0+RHBjczsKIH0KLS0gCjIuMTYuMi53aW5kb3dzLjEKCgpfX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwp3aW4tcHYtZGV2ZWwgbWFp
bGluZyBsaXN0Cndpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3Rz
LnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vd2luLXB2LWRldmVs

From win-pv-devel-bounces@lists.xenproject.org Thu May 03 15:12:26 2018
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 03 May 2018 15:12:26 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1fEFuB-00070f-NW; Thu, 03 May 2018 15:12:23 +0000
Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <srs0=t3s+=hw=citrix.com=prvs=654c57523=ian.jackson@srs-us1.protection.inumbo.net>)
 id 1fEFq4-0006Eo-0h
 for win-pv-devel@lists.xenproject.org; Thu, 03 May 2018 15:08:08 +0000
X-Inumbo-ID: 9581c7cc-4ee3-11e8-9728-bc764e045a96
Received: from SMTP03.CITRIX.COM (unknown [162.221.156.55])
 by us1-rack-dfw2.inumbo.com (Halon) with ESMTPS
 id 9581c7cc-4ee3-11e8-9728-bc764e045a96;
 Thu, 03 May 2018 17:06:43 +0200 (CEST)
X-IronPort-AV: E=Sophos;i="5.49,359,1520899200"; d="scan'208";a="53599767"
From: Ian Jackson <ian.jackson@citrix.com>
MIME-Version: 1.0
Message-ID: <23275.9644.879885.843917@mariner.uk.xensource.com>
Date: Thu, 3 May 2018 16:07:24 +0100
To: George Dunlap <dunlapg@umich.edu>
In-Reply-To: <CAFLBxZbUKYZ1sTtAcAXkoNWXeN4PCpovqGvgy9PXHQxk=1L0Ng@mail.gmail.com>
References: <FED16B1F-3CA3-4B91-B22B-A9B807FCB762@xenproject.org>
 <CAFLBxZbUKYZ1sTtAcAXkoNWXeN4PCpovqGvgy9PXHQxk=1L0Ng@mail.gmail.com>
X-Mailer: VM 8.2.0b under 24.4.1 (i586-pc-linux-gnu)
X-Mailman-Approved-At: Thu, 03 May 2018 15:12:23 +0000
Subject: Re: [win-pv-devel] [Xen-devel] Graduation Review: Windows PV Driver
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Lars Kurth <lars.kurth.xen@gmail.com>, xapi@lists.xenproject.org,
 minios-devel@lists.xenproject.org, Paul Durrant <paul.durrant@citrix.com>,
 Committers <committers@xenproject.org>, mirageos-devel@lists.xenproject.org,
 Zibby Keaton <zkeaton@linuxfoundation.org>,
 xen-devel <xen-devel@lists.xenproject.org>, win-pv-devel@lists.xenproject.org
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>

R2VvcmdlIER1bmxhcCB3cml0ZXMgKCJSZTogW1hlbi1kZXZlbF0gR3JhZHVhdGlvbiBSZXZpZXc6
IFdpbmRvd3MgUFYgRHJpdmVyIik6Cj4gT24gTW9uLCBBcHIgMjMsIDIwMTggYXQgNjoxNCBQTSwg
TGFycyBLdXJ0aCA8bGFycy5rdXJ0aC54ZW5AZ21haWwuY29tPiB3cm90ZToKPiA+ICMjIFN1bW1h
cnkvUmVjb21tZW5kYXRpb24KPiA+Cj4gPiBBc3Nlc3NtZW50IGJ5IExhcnMgS3VydGgsIENvbW11
bml0eSBNYW5hZ2VyOgo+ID4KPiA+IF9HaXZlbiB0aGUgbWF0dXJpdHkgb2YgdGhlIGRyaXZlcnMg
YW5kIHRodXMgbGltaXRlZCBuZWVkIHRvIGZpeCBpc3N1ZXMgb3IgZGV2ZWxvcCBuZXcgZmVhdHVy
ZXMsCj4gPiBJIHdvdWxkIHJlY29tbWVuZCB0byBncmFkdWF0ZSB0aGUgcHJvamVjdC4gVGhlIHBy
b2plY3QgaGFzIHNob3duIGluY3JlYXNlZCB1c2VyCj4gPiBlbmdhZ2VtZW50LCBhZG9wdGlvbiBh
bmQgZGVsaXZlcmVkIHNldmVyYWwgcmVsZWFzZXMgd2hpY2ggaXMgY29uc2lzdGVudCB3aXRoIGEg
bWF0dXJlCj4gPiBwcm9qZWN0IC4gSSBoYXZlIG5vIG9iamVjdGlvbnMgb24gZ3JvdW5kcyBvZiBw
cm9jZXNzIGFkaGVyZW5jZSwgdmFsdWVzIGFuZCBkZXZlbG9wZXIKPiA+IGNvbW11bml0eSBkaXZl
cnNpdHkgYW5kIHByb3Bvc2UgdG8gdGhlIHByb2plY3QgbGVhZGVyc2hpcCB0ZWFtcyBvZiBvdGhl
ciBtYXR1cmUKPiA+IHByb2plY3RzIHRvIGFncmVlIHRvIGdyYWR1YXRlIHRoZSBXaW5kb3dzIFBW
IERyaXZlciBzdWJwcm9qZWN0Ll8KPiA+Cj4gPiBfUmVjb21tZW5kYXRpb25zOiBHaXZlbiB0aGF0
IFdpbmRvd3MgUFYgRHJpdmVycyBkZXZlbG9wbWVudCB0b2RheSBkZXBlbmRzIG9uIDNyZAo+ID4g
cGFydHkgdGVzdGluZywgSSB3b3VsZCBsaWtlIHRvIHJlY29tbWVuZCBhIHB1YmxpYyBkaXNjdXNz
aW9uIHdoZXRoZXIgc29tZSB0ZXN0aW5nIG9mCj4gPiBXaW5kb3dzIFBWIERyaXZlcnMgaW4gT1NT
VEVTVCBpcyBmZWFzaWJsZSBhbmQgZGVzaXJhYmxlLl8KPiAKPiArMSBmcm9tIG1lLiAgSSB0aGlu
ayBpZiB0aGlzIHByb2plY3QgZG9lc24ndCBtYWtlIHRoZSBjdXQsIG5vdGhpbmcgd2lsbC4gOi0p
CgorMQoKSSBkb24ndCB0aGluayB0aGUgbGFjayBvZiB0ZXN0aW5nIGluIG9zc3Rlc3QgaXMgYSBi
bG9ja2VyLiAgVEJIIHRoZQpsZXZlbCBvZiBjb21tdW5pdHkgZW5nYWdlbWVudCB3aXRoIHRoZSBj
dXJyZW50IFdpbmRvd3MgdGVzdHMgaW4Kb3NzdGVzdCAod2hpY2ggZG8gbm90IHVzZSBhbnkgUFYg
ZHJpdmVycykgaXMgcmF0aGVyIHdlYWsuCgpJYW4uCgpfX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fXwp3aW4tcHYtZGV2ZWwgbWFpbGluZyBsaXN0Cndpbi1wdi1k
ZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21h
aWxtYW4vbGlzdGluZm8vd2luLXB2LWRldmVs

From win-pv-devel-bounces@lists.xenproject.org Wed May 09 15:50:59 2018
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 09 May 2018 15:50:59 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1fGRMl-00073o-Sw; Wed, 09 May 2018 15:50:55 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <srs0=re5l=h4=citrix.com=prvs=66078d76a=paul.durrant@srs-us1.protection.inumbo.net>)
 id 1fGRMk-00073i-Rh
 for win-pv-devel@lists.xenproject.org; Wed, 09 May 2018 15:50:55 +0000
X-Inumbo-ID: 2d29cf25-53a1-11e8-8249-2fda3a446a53
Received: from SMTP.EU.CITRIX.COM (unknown [185.25.65.24])
 by us1-amaz-eas1.inumbo.com (Halon) with ESMTPS
 id 2d29cf25-53a1-11e8-8249-2fda3a446a53;
 Wed, 09 May 2018 15:53:55 +0000 (UTC)
X-IronPort-AV: E=Sophos;i="5.49,382,1520899200"; d="scan'208";a="72843723"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Owen Smith <owen.smith@citrix.com>, "win-pv-devel@lists.xenproject.org"
 <win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] [RFC PATCH 2/6] Rename XENVBD_RING ->
 XENVBD_PROTOCOL
Thread-Index: AQHT4s5oeU08uJju/Ui6ThQLRvexeqQnlOUA
Date: Wed, 9 May 2018 15:50:20 +0000
Message-ID: <8e773f851f19454e93cf16e3e8a6b838@AMSPEX02CL03.citrite.net>
References: <20180503110302.17308-1-owen.smith@citrix.com>
 <20180503110302.17308-3-owen.smith@citrix.com>
In-Reply-To: <20180503110302.17308-3-owen.smith@citrix.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-ms-exchange-transport-fromentityheader: Hosted
MIME-Version: 1.0
Subject: Re: [win-pv-devel] [RFC PATCH 2/6] Rename XENVBD_RING ->
 XENVBD_PROTOCOL
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Owen Smith <owen.smith@citrix.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>

PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiB3aW4tcHYtZGV2ZWwgW21haWx0
bzp3aW4tcHYtZGV2ZWwtYm91bmNlc0BsaXN0cy54ZW5wcm9qZWN0Lm9yZ10gT24NCj4gQmVoYWxm
IE9mIG93ZW5zbQ0KPiBTZW50OiAwMyBNYXkgMjAxOCAxMjowMw0KPiBUbzogd2luLXB2LWRldmVs
QGxpc3RzLnhlbnByb2plY3Qub3JnDQo+IENjOiBPd2VuIFNtaXRoIDxvd2VuLnNtaXRoQGNpdHJp
eC5jb20+DQo+IFN1YmplY3Q6IFt3aW4tcHYtZGV2ZWxdIFtSRkMgUEFUQ0ggMi82XSBSZW5hbWUg
WEVOVkJEX1JJTkcgLT4NCj4gWEVOVkJEX1BST1RPQ09MDQo+IA0KPiBTaWduZWQtb2ZmLWJ5OiBv
d2Vuc20gPG93ZW4uc21pdGhAY2l0cml4LmNvbT4NCg0KV2h5PyBJIHRoaW5rICdyaW5nJyBpcyBz
dGlsbCBtb3JlIGlsbHVzdHJhdGl2ZS4uLiB0aGUgcHJvdG9jb2wgaXMgc3RpbGwgc3Bva2VuIG92
ZXIgYSBzaGFyZWQgcmluZyBhZnRlciBhbGwuDQoNCiAgUGF1bA0KDQo+IC0tLQ0KPiAgc3JjL3hl
bnZiZC9mcm9udGVuZC5jICAgICAgICAgICAgIHwgIDMwICstDQo+ICBzcmMveGVudmJkL2Zyb250
ZW5kLmggICAgICAgICAgICAgfCAgIDQgKy0NCj4gIHNyYy94ZW52YmQve3JpbmcuYyA9PiBwcm90
b2NvbC5jfSB8IDk4OCArKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tDQo+IC0tLS0N
Cj4gIHNyYy94ZW52YmQve3JpbmcuaCA9PiBwcm90b2NvbC5ofSB8ICA1NCArLS0NCj4gIHNyYy94
ZW52YmQvdGFyZ2V0LmMgICAgICAgICAgICAgICB8ICAyNCArLQ0KPiAgdnMyMDE1L3hlbnZiZC94
ZW52YmQudmN4cHJvaiAgICAgIHwgICAyICstDQo+ICB2czIwMTcveGVudmJkL3hlbnZiZC52Y3hw
cm9qICAgICAgfCAgIDIgKy0NCj4gIDcgZmlsZXMgY2hhbmdlZCwgNTU2IGluc2VydGlvbnMoKyks
IDU0OCBkZWxldGlvbnMoLSkNCj4gIHJlbmFtZSBzcmMveGVudmJkL3tyaW5nLmMgPT4gcHJvdG9j
b2wuY30gKDY0JSkNCj4gIHJlbmFtZSBzcmMveGVudmJkL3tyaW5nLmggPT4gcHJvdG9jb2wuaH0g
KDY3JSkNCj4gDQo+IGRpZmYgLS1naXQgYS9zcmMveGVudmJkL2Zyb250ZW5kLmMgYi9zcmMveGVu
dmJkL2Zyb250ZW5kLmMNCj4gaW5kZXggYjdlNjFjMi4uZjhlOTAzZSAxMDA2NDQNCj4gLS0tIGEv
c3JjL3hlbnZiZC9mcm9udGVuZC5jDQo+ICsrKyBiL3NyYy94ZW52YmQvZnJvbnRlbmQuYw0KPiBA
QCAtNDMsNyArNDMsNyBAQA0KPiAgI2luY2x1ZGUgImFkYXB0ZXIuaCINCj4gICNpbmNsdWRlICJz
cmJleHQuaCINCj4gICNpbmNsdWRlICJuYW1lcy5oIg0KPiAtI2luY2x1ZGUgInJpbmcuaCINCj4g
KyNpbmNsdWRlICJwcm90b2NvbC5oIg0KPiAgI2luY2x1ZGUgImdyYW50ZXIuaCINCj4gICNpbmNs
dWRlICJ0aHJlYWQuaCINCj4gICNpbmNsdWRlICJiYXNlNjQuaCINCj4gQEAgLTg0LDcgKzg0LDcg
QEAgc3RydWN0IF9YRU5WQkRfRlJPTlRFTkQgew0KPiAgICAgIFBYRU5CVVNfU1VTUEVORF9DQUxM
QkFDSyAgICBTdXNwZW5kQ2FsbGJhY2s7DQo+IA0KPiAgICAgIC8vIFJpbmcNCj4gLSAgICBQWEVO
VkJEX1JJTkcgICAgICAgICAgICAgICAgUmluZzsNCj4gKyAgICBQWEVOVkJEX1BST1RPQ09MICAg
ICAgICAgICAgUHJvdG9jb2w7DQo+ICAgICAgUFhFTlZCRF9HUkFOVEVSICAgICAgICAgICAgIEdy
YW50ZXI7DQo+IA0KPiAgICAgIC8vIEJhY2tlbmQgU3RhdGUgV2F0Y2gNCj4gQEAgLTEwOTUsNyAr
MTA5NSw3IEBAIEZyb250ZW5kQ29ubmVjdCgNCj4gICAgICBpZiAoIU5UX1NVQ0NFU1MoU3RhdHVz
KSkNCj4gICAgICAgICAgZ290byBmYWlsMTsNCj4gDQo+IC0gICAgU3RhdHVzID0gUmluZ0Nvbm5l
Y3QoRnJvbnRlbmQtPlJpbmcpOw0KPiArICAgIFN0YXR1cyA9IFByb3RvY29sQ29ubmVjdChGcm9u
dGVuZC0+UHJvdG9jb2wpOw0KPiAgICAgIGlmICghTlRfU1VDQ0VTUyhTdGF0dXMpKQ0KPiAgICAg
ICAgICBnb3RvIGZhaWwyOw0KPiANCj4gQEAgLTExMDksNyArMTEwOSw3IEBAIEZyb250ZW5kQ29u
bmVjdCgNCj4gICAgICAgICAgaWYgKCFOVF9TVUNDRVNTKFN0YXR1cykpDQo+ICAgICAgICAgICAg
ICBicmVhazsNCj4gDQo+IC0gICAgICAgIFN0YXR1cyA9IFJpbmdTdG9yZVdyaXRlKEZyb250ZW5k
LT5SaW5nLCBUcmFuc2FjdGlvbik7DQo+ICsgICAgICAgIFN0YXR1cyA9IFByb3RvY29sU3RvcmVX
cml0ZShGcm9udGVuZC0+UHJvdG9jb2wsIFRyYW5zYWN0aW9uKTsNCj4gICAgICAgICAgaWYgKCFO
VF9TVUNDRVNTKFN0YXR1cykpDQo+ICAgICAgICAgICAgICBnb3RvIGFib3J0Ow0KPiANCj4gQEAg
LTEyMTEsNyArMTIxMSw3IEBAIGZhaWw0Og0KPiAgICAgIEVycm9yKCJGYWlsNFxuIik7DQo+ICBm
YWlsMzoNCj4gICAgICBFcnJvcigiRmFpbDNcbiIpOw0KPiAtICAgIFJpbmdEaXNjb25uZWN0KEZy
b250ZW5kLT5SaW5nKTsNCj4gKyAgICBQcm90b2NvbERpc2Nvbm5lY3QoRnJvbnRlbmQtPlByb3Rv
Y29sKTsNCj4gIGZhaWwyOg0KPiAgICAgIEVycm9yKCJGYWlsMlxuIik7DQo+ICAgICAgR3JhbnRl
ckRpc2Nvbm5lY3QoRnJvbnRlbmQtPkdyYW50ZXIpOw0KPiBAQCAtMTIyNSw3ICsxMjI1LDcgQEAg
RnJvbnRlbmREaXNjb25uZWN0KA0KPiAgICAgIF9faW4gIFBYRU5WQkRfRlJPTlRFTkQgICAgICAg
IEZyb250ZW5kDQo+ICAgICAgKQ0KPiAgew0KPiAtICAgIFJpbmdEaXNjb25uZWN0KEZyb250ZW5k
LT5SaW5nKTsNCj4gKyAgICBQcm90b2NvbERpc2Nvbm5lY3QoRnJvbnRlbmQtPlByb3RvY29sKTsN
Cj4gICAgICBHcmFudGVyRGlzY29ubmVjdChGcm9udGVuZC0+R3JhbnRlcik7DQo+IA0KPiAgICAg
IEJhc2U2NEZyZWUoRnJvbnRlbmQtPlBhZ2U4MC5EYXRhKTsNCj4gQEAgLTEyNDYsNyArMTI0Niw3
IEBAIEZyb250ZW5kRW5hYmxlKA0KPiAgICAgIEtlTWVtb3J5QmFycmllcigpOw0KPiANCj4gICAg
ICBHcmFudGVyRW5hYmxlKEZyb250ZW5kLT5HcmFudGVyKTsNCj4gLSAgICBSaW5nRW5hYmxlKEZy
b250ZW5kLT5SaW5nKTsNCj4gKyAgICBQcm90b2NvbEVuYWJsZShGcm9udGVuZC0+UHJvdG9jb2wp
Ow0KPiAgfQ0KPiAgX19kcnZfcmVxdWlyZXNJUlFMKERJU1BBVENIX0xFVkVMKQ0KPiAgc3RhdGlj
IEZPUkNFSU5MSU5FIFZPSUQNCj4gQEAgLTEyNTYsNyArMTI1Niw3IEBAIEZyb250ZW5kRGlzYWJs
ZSgNCj4gIHsNCj4gICAgICBGcm9udGVuZC0+Q2Fwcy5Db25uZWN0ZWQgPSBGQUxTRTsNCj4gDQo+
IC0gICAgUmluZ0Rpc2FibGUoRnJvbnRlbmQtPlJpbmcpOw0KPiArICAgIFByb3RvY29sRGlzYWJs
ZShGcm9udGVuZC0+UHJvdG9jb2wpOw0KPiAgICAgIEdyYW50ZXJEaXNhYmxlKEZyb250ZW5kLT5H
cmFudGVyKTsNCj4gIH0NCj4gDQo+IEBAIC0xNDUxLDcgKzE0NTEsNyBAQCBGcm9udGVuZFN1c3Bl
bmRDYWxsYmFjaygNCj4gICAgICAgICAgQVNTRVJUKEZBTFNFKTsNCj4gICAgICB9DQo+IA0KPiAt
ICAgIFJpbmdUcmlnZ2VyKEZyb250ZW5kLT5SaW5nKTsNCj4gKyAgICBQcm90b2NvbFRyaWdnZXIo
RnJvbnRlbmQtPlByb3RvY29sKTsNCj4gDQo+ICAgICAgVmVyYm9zZSgiVGFyZ2V0WyVkXSA6IDw9
PT0gcmVzdG9yZWQgJXNcbiIsIEZyb250ZW5kLT5UYXJnZXRJZCwNCj4gX19YZW52YmRTdGF0ZU5h
bWUoRnJvbnRlbmQtPlN0YXRlKSk7DQo+ICB9DQo+IEBAIC0xNzY3LDcgKzE3NjcsNyBAQCBGcm9u
dGVuZENyZWF0ZSgNCj4gICAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkNCj4gICAgICAgICAg
Z290byBmYWlsMzsNCj4gDQo+IC0gICAgc3RhdHVzID0gUmluZ0NyZWF0ZShGcm9udGVuZCwgJkZy
b250ZW5kLT5SaW5nKTsNCj4gKyAgICBzdGF0dXMgPSBQcm90b2NvbENyZWF0ZShGcm9udGVuZCwg
JkZyb250ZW5kLT5Qcm90b2NvbCk7DQo+ICAgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpDQo+
ICAgICAgICAgIGdvdG8gZmFpbDQ7DQo+IA0KPiBAQCAtMTc5Miw4ICsxNzkyLDggQEAgZmFpbDY6
DQo+ICAgICAgRnJvbnRlbmQtPkdyYW50ZXIgPSBOVUxMOw0KPiAgZmFpbDU6DQo+ICAgICAgRXJy
b3IoImZhaWw1XG4iKTsNCj4gLSAgICBSaW5nRGVzdHJveShGcm9udGVuZC0+UmluZyk7DQo+IC0g
ICAgRnJvbnRlbmQtPlJpbmcgPSBOVUxMOw0KPiArICAgIFByb3RvY29sRGVzdHJveShGcm9udGVu
ZC0+UHJvdG9jb2wpOw0KPiArICAgIEZyb250ZW5kLT5Qcm90b2NvbCA9IE5VTEw7DQo+ICBmYWls
NDoNCj4gICAgICBFcnJvcigiZmFpbDRcbiIpOw0KPiAgZmFpbDM6DQo+IEBAIC0xODMxLDggKzE4
MzEsOCBAQCBGcm9udGVuZERlc3Ryb3koDQo+ICAgICAgR3JhbnRlckRlc3Ryb3koRnJvbnRlbmQt
PkdyYW50ZXIpOw0KPiAgICAgIEZyb250ZW5kLT5HcmFudGVyID0gTlVMTDsNCj4gDQo+IC0gICAg
UmluZ0Rlc3Ryb3koRnJvbnRlbmQtPlJpbmcpOw0KPiAtICAgIEZyb250ZW5kLT5SaW5nID0gTlVM
TDsNCj4gKyAgICBQcm90b2NvbERlc3Ryb3koRnJvbnRlbmQtPlByb3RvY29sKTsNCj4gKyAgICBG
cm9udGVuZC0+UHJvdG9jb2wgPSBOVUxMOw0KPiANCj4gICAgICBBU1NFUlQzUChGcm9udGVuZC0+
QmFja2VuZFBhdGgsID09LCBOVUxMKTsNCj4gICAgICBBU1NFUlQzUChGcm9udGVuZC0+QmFja2Vu
ZFdhdGNoLCA9PSwgTlVMTCk7DQo+IEBAIC0xODU4LDcgKzE4NTgsNyBAQCBGcm9udGVuZEdldCAj
IyBfbmFtZSAjIyAoICAgICAgICAgICAgICAgICAgICAgICBcDQo+ICB9DQo+IA0KPiAgRlJPTlRF
TkRfR0VUX1BST1BFUlRZKFRhcmdldCwgUFhFTlZCRF9UQVJHRVQpDQo+IC1GUk9OVEVORF9HRVRf
UFJPUEVSVFkoUmluZywgUFhFTlZCRF9SSU5HKQ0KPiArRlJPTlRFTkRfR0VUX1BST1BFUlRZKFBy
b3RvY29sLCBQWEVOVkJEX1BST1RPQ09MKQ0KPiAgRlJPTlRFTkRfR0VUX1BST1BFUlRZKEdyYW50
ZXIsIFBYRU5WQkRfR1JBTlRFUikNCj4gIEZST05URU5EX0dFVF9QUk9QRVJUWShUYXJnZXRJZCwg
VUxPTkcpDQo+ICBGUk9OVEVORF9HRVRfUFJPUEVSVFkoRGV2aWNlSWQsIFVMT05HKQ0KPiBkaWZm
IC0tZ2l0IGEvc3JjL3hlbnZiZC9mcm9udGVuZC5oIGIvc3JjL3hlbnZiZC9mcm9udGVuZC5oDQo+
IGluZGV4IDE0ODg0NzYuLmRmZDcyYjQgMTAwNjQ0DQo+IC0tLSBhL3NyYy94ZW52YmQvZnJvbnRl
bmQuaA0KPiArKysgYi9zcmMveGVudmJkL2Zyb250ZW5kLmgNCj4gQEAgLTE1MCw4ICsxNTAsOCBA
QCBGcm9udGVuZEdldCAjIyBfbmFtZSAjIyAoICAgICAgICAgICAgICAgICAgICAgICBcDQo+ICAg
ICAgKTsNCj4gDQo+ICBGUk9OVEVORF9HRVRfUFJPUEVSVFkoVGFyZ2V0LCBQWEVOVkJEX1RBUkdF
VCkNCj4gLSNpbmNsdWRlICJyaW5nLmgiDQo+IC1GUk9OVEVORF9HRVRfUFJPUEVSVFkoUmluZywg
UFhFTlZCRF9SSU5HKQ0KPiArI2luY2x1ZGUgInByb3RvY29sLmgiDQo+ICtGUk9OVEVORF9HRVRf
UFJPUEVSVFkoUHJvdG9jb2wsIFBYRU5WQkRfUFJPVE9DT0wpDQo+ICAjaW5jbHVkZSAiZ3JhbnRl
ci5oIg0KPiAgRlJPTlRFTkRfR0VUX1BST1BFUlRZKEdyYW50ZXIsIFBYRU5WQkRfR1JBTlRFUikN
Cj4gIEZST05URU5EX0dFVF9QUk9QRVJUWShUYXJnZXRJZCwgVUxPTkcpDQo+IGRpZmYgLS1naXQg
YS9zcmMveGVudmJkL3JpbmcuYyBiL3NyYy94ZW52YmQvcHJvdG9jb2wuYw0KPiBzaW1pbGFyaXR5
IGluZGV4IDY0JQ0KPiByZW5hbWUgZnJvbSBzcmMveGVudmJkL3JpbmcuYw0KPiByZW5hbWUgdG8g
c3JjL3hlbnZiZC9wcm90b2NvbC5jDQo+IGluZGV4IDMzYjM0NmQuLjM5NzY3ZWIgMTAwNjQ0DQo+
IC0tLSBhL3NyYy94ZW52YmQvcmluZy5jDQo+ICsrKyBiL3NyYy94ZW52YmQvcHJvdG9jb2wuYw0K
PiBAQCAtNDAsNyArNDAsNyBAQA0KPiAgI2luY2x1ZGUgPGV2dGNobl9pbnRlcmZhY2UuaD4NCj4g
ICNpbmNsdWRlIDxkZWJ1Z19pbnRlcmZhY2UuaD4NCj4gDQo+IC0jaW5jbHVkZSAicmluZy5oIg0K
PiArI2luY2x1ZGUgInByb3RvY29sLmgiDQo+ICAjaW5jbHVkZSAiZnJvbnRlbmQuaCINCj4gICNp
bmNsdWRlICJ0YXJnZXQuaCINCj4gICNpbmNsdWRlICJhZGFwdGVyLmgiDQo+IEBAIC01MywxMCAr
NTMsMTAgQEANCj4gICNpbmNsdWRlICJkZWJ1Zy5oIg0KPiAgI2luY2x1ZGUgImFzc2VydC5oIg0K
PiANCj4gLSNkZWZpbmUgWEVOVkJEX01BWF9SSU5HX1BBR0VfT1JERVIgICg0KQ0KPiAtI2RlZmlu
ZSBYRU5WQkRfTUFYX1JJTkdfUEFHRVMgICAgICAgKDEgPDwNCj4gWEVOVkJEX01BWF9SSU5HX1BB
R0VfT1JERVIpDQo+ICsjZGVmaW5lIFhFTlZCRF9NQVhfUFJPVE9DT0xfUEFHRV9PUkRFUiAgKDQp
DQo+ICsjZGVmaW5lIFhFTlZCRF9NQVhfUFJPVE9DT0xfUEFHRVMgICAgICAgKDEgPDwNCj4gWEVO
VkJEX01BWF9QUk9UT0NPTF9QQUdFX09SREVSKQ0KPiANCj4gLXN0cnVjdCBfWEVOVkJEX1JJTkcg
ew0KPiArc3RydWN0IF9YRU5WQkRfUFJPVE9DT0wgew0KPiAgICAgIFBYRU5WQkRfRlJPTlRFTkQg
ICAgICAgICAgICAgICAgRnJvbnRlbmQ7DQo+ICAgICAgQk9PTEVBTiAgICAgICAgICAgICAgICAg
ICAgICAgICBDb25uZWN0ZWQ7DQo+ICAgICAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAg
ICBFbmFibGVkOw0KPiBAQCAtNzMsNyArNzMsNyBAQCBzdHJ1Y3QgX1hFTlZCRF9SSU5HIHsNCj4g
ICAgICBibGtpZl9zcmluZ190KiAgICAgICAgICAgICAgICAgIFNoYXJlZDsNCj4gICAgICBibGtp
Zl9mcm9udF9yaW5nX3QgICAgICAgICAgICAgIEZyb250Ow0KPiAgICAgIFVMT05HICAgICAgICAg
ICAgICAgICAgICAgICAgICAgT3JkZXI7DQo+IC0gICAgUFZPSUQgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHcmFudHNbWEVOVkJEX01BWF9SSU5HX1BBR0VTXTsNCj4gKyAgICBQVk9JRCAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdyYW50c1tYRU5WQkRfTUFYX1BST1RPQ09MX1BBR0VTXTsN
Cj4gICAgICBQWEVOQlVTX0VWVENITl9DSEFOTkVMICAgICAgICAgIENoYW5uZWw7DQo+ICAgICAg
S0RQQyAgICAgICAgICAgICAgICAgICAgICAgICAgICBEcGM7DQo+IA0KPiBAQCAtMTAwLDI3ICsx
MDAsMjcgQEAgc3RydWN0IF9YRU5WQkRfUklORyB7DQo+ICB9Ow0KPiANCj4gICNkZWZpbmUgTUFY
X05BTUVfTEVOICAgICAgICAgICAgICAgIDY0DQo+IC0jZGVmaW5lIFJJTkdfUE9PTF9UQUcgICAg
ICAgICAgICAgICAnZ25SWCcNCj4gKyNkZWZpbmUgUFJPVE9DT0xfUE9PTF9UQUcgICAgICAgICAg
ICdnblJYJw0KPiAgI2RlZmluZSBYRU5fSU9fUFJPVE9fQUJJICAgICAgICAgICAgIng4Nl82NC1h
YmkiDQo+IA0KPiAgc3RhdGljIEZPUkNFSU5MSU5FIFBWT0lEDQo+IC1fX1JpbmdBbGxvY2F0ZSgN
Cj4gK19fUHJvdG9jb2xBbGxvY2F0ZSgNCj4gICAgICBJTiAgVUxPTkcgICAgICAgICAgICAgICAg
ICAgICAgIExlbmd0aA0KPiAgICAgICkNCj4gIHsNCj4gICAgICByZXR1cm4gX19BbGxvY2F0ZVBv
b2xXaXRoVGFnKE5vblBhZ2VkUG9vbCwNCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIExlbmd0aCwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJJTkdfUE9P
TF9UQUcpOw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPVE9DT0xfUE9P
TF9UQUcpOw0KPiAgfQ0KPiANCj4gIHN0YXRpYyBGT1JDRUlOTElORSBWT0lEDQo+IC1fX1JpbmdG
cmVlKA0KPiArX19Qcm90b2NvbEZyZWUoDQo+ICAgICAgSU4gIFBWT0lEICAgICAgICAgICAgICAg
ICAgICAgICBCdWZmZXINCj4gICAgICApDQo+ICB7DQo+ICAgICAgaWYgKEJ1ZmZlcikNCj4gICAg
ICAgICAgX19GcmVlUG9vbFdpdGhUYWcoQnVmZmVyLA0KPiAtICAgICAgICAgICAgICAgICAgICAg
ICAgICBSSU5HX1BPT0xfVEFHKTsNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPVE9D
T0xfUE9PTF9UQUcpOw0KPiAgfQ0KPiANCj4gIHN0YXRpYyBGT1JDRUlOTElORSBWT0lEDQo+IEBA
IC0xMzgsMTMgKzEzOCwxMyBAQCB4ZW5fd21iKCkNCj4gIH0NCj4gDQo+ICBzdGF0aWMgRk9SQ0VJ
TkxJTkUgVk9JRA0KPiAtX19SaW5nSW5zZXJ0KA0KPiAtICAgIElOICBQWEVOVkJEX1JJTkcgICAg
ICAgIFJpbmcsDQo+ICtfX1Byb3RvY29sSW5zZXJ0KA0KPiArICAgIElOICBQWEVOVkJEX1BST1RP
Q09MICAgICAgICBQcm90b2NvbCwNCj4gICAgICBJTiAgUFhFTlZCRF9SRVFVRVNUICAgICBSZXF1
ZXN0LA0KPiAgICAgIElOICBibGtpZl9yZXF1ZXN0X3QqICAgIHJlcQ0KPiAgICAgICkNCj4gIHsN
Cj4gLSAgICBQWEVOVkJEX0dSQU5URVIgICAgICAgICBHcmFudGVyID0gRnJvbnRlbmRHZXRHcmFu
dGVyKFJpbmctPkZyb250ZW5kKTsNCj4gKyAgICBQWEVOVkJEX0dSQU5URVIgICAgICAgICBHcmFu
dGVyID0gRnJvbnRlbmRHZXRHcmFudGVyKFByb3RvY29sLQ0KPiA+RnJvbnRlbmQpOw0KPiANCj4g
ICAgICBzd2l0Y2ggKFJlcXVlc3QtPk9wZXJhdGlvbikgew0KPiAgICAgIGNhc2UgQkxLSUZfT1Bf
UkVBRDoNCj4gQEAgLTE2Myw3ICsxNjMsNyBAQCBfX1JpbmdJbnNlcnQoDQo+ICAgICAgICAgICAg
ICByZXFfaW5kaXJlY3QtPm5yX3NlZ21lbnRzICAgICAgID0gUmVxdWVzdC0+TnJTZWdtZW50czsN
Cj4gICAgICAgICAgICAgIHJlcV9pbmRpcmVjdC0+aWQgICAgICAgICAgICAgICAgPSAoVUxPTkc2
NCkoVUxPTkdfUFRSKVJlcXVlc3Q7DQo+ICAgICAgICAgICAgICByZXFfaW5kaXJlY3QtPnNlY3Rv
cl9udW1iZXIgICAgID0gUmVxdWVzdC0+Rmlyc3RTZWN0b3I7DQo+IC0gICAgICAgICAgICByZXFf
aW5kaXJlY3QtPmhhbmRsZSAgICAgICAgICAgID0gKFVTSE9SVClGcm9udGVuZEdldERldmljZUlk
KFJpbmctDQo+ID5Gcm9udGVuZCk7DQo+ICsgICAgICAgICAgICByZXFfaW5kaXJlY3QtPmhhbmRs
ZSAgICAgICAgICAgID0NCj4gKFVTSE9SVClGcm9udGVuZEdldERldmljZUlkKFByb3RvY29sLT5G
cm9udGVuZCk7DQo+IA0KPiAgICAgICAgICAgICAgZm9yIChQYWdlSWR4ID0gMCwNCj4gICAgICAg
ICAgICAgICAgICAgUGFnZUVudHJ5ID0gUmVxdWVzdC0+SW5kaXJlY3RzLkZsaW5rLA0KPiBAQCAt
MTk0LDcgKzE5NCw3IEBAIF9fUmluZ0luc2VydCgNCj4gDQo+ICAgICAgICAgICAgICByZXEtPm9w
ZXJhdGlvbiAgICAgICAgICAgICAgICAgID0gUmVxdWVzdC0+T3BlcmF0aW9uOw0KPiAgICAgICAg
ICAgICAgcmVxLT5ucl9zZWdtZW50cyAgICAgICAgICAgICAgICA9IChVQ0hBUilSZXF1ZXN0LT5O
clNlZ21lbnRzOw0KPiAtICAgICAgICAgICAgcmVxLT5oYW5kbGUgICAgICAgICAgICAgICAgICAg
ICA9IChVU0hPUlQpRnJvbnRlbmRHZXREZXZpY2VJZChSaW5nLQ0KPiA+RnJvbnRlbmQpOw0KPiAr
ICAgICAgICAgICAgcmVxLT5oYW5kbGUgICAgICAgICAgICAgICAgICAgICA9IChVU0hPUlQpRnJv
bnRlbmRHZXREZXZpY2VJZChQcm90b2NvbC0NCj4gPkZyb250ZW5kKTsNCj4gICAgICAgICAgICAg
IHJlcS0+aWQgICAgICAgICAgICAgICAgICAgICAgICAgPSAoVUxPTkc2NCkoVUxPTkdfUFRSKVJl
cXVlc3Q7DQo+ICAgICAgICAgICAgICByZXEtPnNlY3Rvcl9udW1iZXIgICAgICAgICAgICAgID0g
UmVxdWVzdC0+Rmlyc3RTZWN0b3I7DQo+IA0KPiBAQCAtMjE0LDcgKzIxNCw3IEBAIF9fUmluZ0lu
c2VydCgNCj4gICAgICBjYXNlIEJMS0lGX09QX0ZMVVNIX0RJU0tDQUNIRToNCj4gICAgICAgICAg
cmVxLT5vcGVyYXRpb24gICAgICAgICAgICAgICAgICA9IFJlcXVlc3QtPk9wZXJhdGlvbjsNCj4g
ICAgICAgICAgcmVxLT5ucl9zZWdtZW50cyAgICAgICAgICAgICAgICA9IDA7DQo+IC0gICAgICAg
IHJlcS0+aGFuZGxlICAgICAgICAgICAgICAgICAgICAgPSAoVVNIT1JUKUZyb250ZW5kR2V0RGV2
aWNlSWQoUmluZy0NCj4gPkZyb250ZW5kKTsNCj4gKyAgICAgICAgcmVxLT5oYW5kbGUgICAgICAg
ICAgICAgICAgICAgICA9IChVU0hPUlQpRnJvbnRlbmRHZXREZXZpY2VJZChQcm90b2NvbC0NCj4g
PkZyb250ZW5kKTsNCj4gICAgICAgICAgcmVxLT5pZCAgICAgICAgICAgICAgICAgICAgICAgICA9
IChVTE9ORzY0KShVTE9OR19QVFIpUmVxdWVzdDsNCj4gICAgICAgICAgcmVxLT5zZWN0b3JfbnVt
YmVyICAgICAgICAgICAgICA9IFJlcXVlc3QtPkZpcnN0U2VjdG9yOw0KPiAgICAgICAgICBicmVh
azsNCj4gQEAgLTIyNCw3ICsyMjQsNyBAQCBfX1JpbmdJbnNlcnQoDQo+ICAgICAgICAgIHJlcV9k
aXNjYXJkID0gKGJsa2lmX3JlcXVlc3RfZGlzY2FyZF90KilyZXE7DQo+ICAgICAgICAgIHJlcV9k
aXNjYXJkLT5vcGVyYXRpb24gICAgICAgICAgPSBCTEtJRl9PUF9ESVNDQVJEOw0KPiAgICAgICAg
ICByZXFfZGlzY2FyZC0+ZmxhZyAgICAgICAgICAgICAgID0gUmVxdWVzdC0+RmxhZ3M7DQo+IC0g
ICAgICAgIHJlcV9kaXNjYXJkLT5oYW5kbGUgICAgICAgICAgICAgPSAoVVNIT1JUKUZyb250ZW5k
R2V0RGV2aWNlSWQoUmluZy0NCj4gPkZyb250ZW5kKTsNCj4gKyAgICAgICAgcmVxX2Rpc2NhcmQt
PmhhbmRsZSAgICAgICAgICAgICA9IChVU0hPUlQpRnJvbnRlbmRHZXREZXZpY2VJZChQcm90b2Nv
bC0NCj4gPkZyb250ZW5kKTsNCj4gICAgICAgICAgcmVxX2Rpc2NhcmQtPmlkICAgICAgICAgICAg
ICAgICA9IChVTE9ORzY0KShVTE9OR19QVFIpUmVxdWVzdDsNCj4gICAgICAgICAgcmVxX2Rpc2Nh
cmQtPnNlY3Rvcl9udW1iZXIgICAgICA9IFJlcXVlc3QtPkZpcnN0U2VjdG9yOw0KPiAgICAgICAg
ICByZXFfZGlzY2FyZC0+bnJfc2VjdG9ycyAgICAgICAgID0gUmVxdWVzdC0+TnJTZWN0b3JzOw0K
PiBAQCAtMjM0LDIxICsyMzQsMjEgQEAgX19SaW5nSW5zZXJ0KA0KPiAgICAgICAgICBBU1NFUlQo
RkFMU0UpOw0KPiAgICAgICAgICBicmVhazsNCj4gICAgICB9DQo+IC0gICAgKytSaW5nLT5TdWJt
aXR0ZWQ7DQo+ICsgICAgKytQcm90b2NvbC0+U3VibWl0dGVkOw0KPiAgfQ0KPiANCj4gIHN0YXRp
YyBQWEVOVkJEX0lORElSRUNUDQo+IC1SaW5nR2V0SW5kaXJlY3QoDQo+IC0gICAgSU4gIFBYRU5W
QkRfUklORyAgICBSaW5nDQo+ICtQcm90b2NvbEdldEluZGlyZWN0KA0KPiArICAgIElOICBQWEVO
VkJEX1BST1RPQ09MICAgIFByb3RvY29sDQo+ICAgICAgKQ0KPiAgew0KPiAgICAgIFBYRU5WQkRf
SU5ESVJFQ1QgICAgSW5kaXJlY3Q7DQo+ICAgICAgTlRTVEFUVVMgICAgICAgICAgICBzdGF0dXM7
DQo+IC0gICAgUFhFTlZCRF9HUkFOVEVSICAgICBHcmFudGVyID0gRnJvbnRlbmRHZXRHcmFudGVy
KFJpbmctPkZyb250ZW5kKTsNCj4gKyAgICBQWEVOVkJEX0dSQU5URVIgICAgIEdyYW50ZXIgPSBG
cm9udGVuZEdldEdyYW50ZXIoUHJvdG9jb2wtDQo+ID5Gcm9udGVuZCk7DQo+IA0KPiAgICAgIElu
ZGlyZWN0ID0gWEVOQlVTX0NBQ0hFKEdldCwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAmUmluZy0+Q2FjaGVJbnRlcmZhY2UsDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
UmluZy0+SW5kaXJlY3RDYWNoZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUHJv
dG9jb2wtPkNhY2hlSW50ZXJmYWNlLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBy
b3RvY29sLT5JbmRpcmVjdENhY2hlLA0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZB
TFNFKTsNCj4gICAgICBpZiAoSW5kaXJlY3QgPT0gTlVMTCkNCj4gICAgICAgICAgZ290byBmYWls
MTsNCj4gQEAgLTI2Niw4ICsyNjYsOCBAQCBSaW5nR2V0SW5kaXJlY3QoDQo+IA0KPiAgZmFpbDI6
DQo+ICAgICAgWEVOQlVTX0NBQ0hFKFB1dCwNCj4gLSAgICAgICAgICAgICAgICAgJlJpbmctPkNh
Y2hlSW50ZXJmYWNlLA0KPiAtICAgICAgICAgICAgICAgICBSaW5nLT5JbmRpcmVjdENhY2hlLA0K
PiArICAgICAgICAgICAgICAgICAmUHJvdG9jb2wtPkNhY2hlSW50ZXJmYWNlLA0KPiArICAgICAg
ICAgICAgICAgICBQcm90b2NvbC0+SW5kaXJlY3RDYWNoZSwNCj4gICAgICAgICAgICAgICAgICAg
SW5kaXJlY3QsDQo+ICAgICAgICAgICAgICAgICAgIEZBTFNFKTsNCj4gIGZhaWwxOg0KPiBAQCAt
Mjc1LDEyICsyNzUsMTIgQEAgZmFpbDE6DQo+ICB9DQo+IA0KPiAgc3RhdGljIFZPSUQNCj4gLVJp
bmdQdXRJbmRpcmVjdCgNCj4gLSAgICBJTiAgUFhFTlZCRF9SSU5HICAgICAgICBSaW5nLA0KPiAr
UHJvdG9jb2xQdXRJbmRpcmVjdCgNCj4gKyAgICBJTiAgUFhFTlZCRF9QUk9UT0NPTCAgICAgICAg
UHJvdG9jb2wsDQo+ICAgICAgSU4gIFBYRU5WQkRfSU5ESVJFQ1QgICAgSW5kaXJlY3QNCj4gICAg
ICApDQo+ICB7DQo+IC0gICAgUFhFTlZCRF9HUkFOVEVSICAgICAgICAgR3JhbnRlciA9IEZyb250
ZW5kR2V0R3JhbnRlcihSaW5nLT5Gcm9udGVuZCk7DQo+ICsgICAgUFhFTlZCRF9HUkFOVEVSICAg
ICAgICAgR3JhbnRlciA9IEZyb250ZW5kR2V0R3JhbnRlcihQcm90b2NvbC0NCj4gPkZyb250ZW5k
KTsNCj4gDQo+ICAgICAgaWYgKEluZGlyZWN0LT5HcmFudCkNCj4gICAgICAgICAgR3JhbnRlclB1
dChHcmFudGVyLCBJbmRpcmVjdC0+R3JhbnQpOw0KPiBAQCAtMjg5LDMwICsyODksMzAgQEAgUmlu
Z1B1dEluZGlyZWN0KA0KPiAgICAgIFJ0bFplcm9NZW1vcnkoJkluZGlyZWN0LT5MaXN0RW50cnks
IHNpemVvZihMSVNUX0VOVFJZKSk7DQo+IA0KPiAgICAgIFhFTkJVU19DQUNIRShQdXQsDQo+IC0g
ICAgICAgICAgICAgICAgICZSaW5nLT5DYWNoZUludGVyZmFjZSwNCj4gLSAgICAgICAgICAgICAg
ICAgUmluZy0+SW5kaXJlY3RDYWNoZSwNCj4gKyAgICAgICAgICAgICAgICAgJlByb3RvY29sLT5D
YWNoZUludGVyZmFjZSwNCj4gKyAgICAgICAgICAgICAgICAgUHJvdG9jb2wtPkluZGlyZWN0Q2Fj
aGUsDQo+ICAgICAgICAgICAgICAgICAgIEluZGlyZWN0LA0KPiAgICAgICAgICAgICAgICAgICBG
QUxTRSk7DQo+ICB9DQo+IA0KPiAgc3RhdGljIFBYRU5WQkRfU0VHTUVOVA0KPiAtUmluZ0dldFNl
Z21lbnQoDQo+IC0gICAgSU4gIFBYRU5WQkRfUklORyAgICBSaW5nDQo+ICtQcm90b2NvbEdldFNl
Z21lbnQoDQo+ICsgICAgSU4gIFBYRU5WQkRfUFJPVE9DT0wgICAgUHJvdG9jb2wNCj4gICAgICAp
DQo+ICB7DQo+ICAgICAgcmV0dXJuIFhFTkJVU19DQUNIRShHZXQsDQo+IC0gICAgICAgICAgICAg
ICAgICAgICAgICAmUmluZy0+Q2FjaGVJbnRlcmZhY2UsDQo+IC0gICAgICAgICAgICAgICAgICAg
ICAgICBSaW5nLT5TZWdtZW50Q2FjaGUsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAmUHJv
dG9jb2wtPkNhY2hlSW50ZXJmYWNlLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgUHJvdG9j
b2wtPlNlZ21lbnRDYWNoZSwNCj4gICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFKTsNCj4g
IH0NCj4gDQo+ICBzdGF0aWMgVk9JRA0KPiAtUmluZ1B1dFNlZ21lbnQoDQo+IC0gICAgSU4gIFBY
RU5WQkRfUklORyAgICBSaW5nLA0KPiArUHJvdG9jb2xQdXRTZWdtZW50KA0KPiArICAgIElOICBQ
WEVOVkJEX1BST1RPQ09MICAgIFByb3RvY29sLA0KPiAgICAgIElOICBQWEVOVkJEX1NFR01FTlQg
U2VnbWVudA0KPiAgICAgICkNCj4gIHsNCj4gLSAgICBQWEVOVkJEX0dSQU5URVIgICAgIEdyYW50
ZXIgPSBGcm9udGVuZEdldEdyYW50ZXIoUmluZy0+RnJvbnRlbmQpOw0KPiArICAgIFBYRU5WQkRf
R1JBTlRFUiAgICAgR3JhbnRlciA9IEZyb250ZW5kR2V0R3JhbnRlcihQcm90b2NvbC0NCj4gPkZy
b250ZW5kKTsNCj4gICAgICBQWEVOVkJEX0JPVU5DRSAgICAgIEJvdW5jZSA9IFNlZ21lbnQtPkJv
dW5jZTsNCj4gDQo+ICAgICAgaWYgKFNlZ21lbnQtPkdyYW50KQ0KPiBAQCAtMzI5LDcgKzMyOSw3
IEBAIFJpbmdQdXRTZWdtZW50KA0KPiAgICAgICAgICBCb3VuY2UtPlNvdXJjZVBmblswXSA9IDA7
DQo+ICAgICAgICAgIEJvdW5jZS0+U291cmNlUGZuWzFdID0gMDsNCj4gDQo+IC0gICAgICAgIEFk
YXB0ZXJQdXRCb3VuY2UoVGFyZ2V0R2V0QWRhcHRlcihGcm9udGVuZEdldFRhcmdldChSaW5nLQ0K
PiA+RnJvbnRlbmQpKSwNCj4gKyAgICAgICAgQWRhcHRlclB1dEJvdW5jZShUYXJnZXRHZXRBZGFw
dGVyKEZyb250ZW5kR2V0VGFyZ2V0KFByb3RvY29sLQ0KPiA+RnJvbnRlbmQpKSwNCj4gICAgICAg
ICAgICAgICAgICAgICAgICAgICBCb3VuY2UpOw0KPiAgICAgIH0NCj4gICAgICBTZWdtZW50LT5C
b3VuY2UgPSBOVUxMOw0KPiBAQCAtMzM5LDI2ICszMzksMjYgQEAgUmluZ1B1dFNlZ21lbnQoDQo+
ICAgICAgUnRsWmVyb01lbW9yeSgmU2VnbWVudC0+TGlzdEVudHJ5LCBzaXplb2YoTElTVF9FTlRS
WSkpOw0KPiANCj4gICAgICBYRU5CVVNfQ0FDSEUoUHV0LA0KPiAtICAgICAgICAgICAgICAgICAm
UmluZy0+Q2FjaGVJbnRlcmZhY2UsDQo+IC0gICAgICAgICAgICAgICAgIFJpbmctPlNlZ21lbnRD
YWNoZSwNCj4gKyAgICAgICAgICAgICAgICAgJlByb3RvY29sLT5DYWNoZUludGVyZmFjZSwNCj4g
KyAgICAgICAgICAgICAgICAgUHJvdG9jb2wtPlNlZ21lbnRDYWNoZSwNCj4gICAgICAgICAgICAg
ICAgICAgU2VnbWVudCwNCj4gICAgICAgICAgICAgICAgICAgRkFMU0UpOw0KPiAgfQ0KPiANCj4g
IHN0YXRpYyBQWEVOVkJEX1JFUVVFU1QNCj4gLVJpbmdHZXRSZXF1ZXN0KA0KPiAtICAgIElOICBQ
WEVOVkJEX1JJTkcgICAgUmluZw0KPiArUHJvdG9jb2xHZXRSZXF1ZXN0KA0KPiArICAgIElOICBQ
WEVOVkJEX1BST1RPQ09MICAgIFByb3RvY29sDQo+ICAgICAgKQ0KPiAgew0KPiAgICAgIHJldHVy
biBYRU5CVVNfQ0FDSEUoR2V0LA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgJlJpbmctPkNh
Y2hlSW50ZXJmYWNlLA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgUmluZy0+UmVxdWVzdENh
Y2hlLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgJlByb3RvY29sLT5DYWNoZUludGVyZmFj
ZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgIFByb3RvY29sLT5SZXF1ZXN0Q2FjaGUsDQo+
ICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSk7DQo+ICB9DQo+IA0KPiAgc3RhdGljIFZP
SUQNCj4gLVJpbmdQdXRSZXF1ZXN0KA0KPiAtICAgIElOICBQWEVOVkJEX1JJTkcgICAgUmluZywN
Cj4gK1Byb3RvY29sUHV0UmVxdWVzdCgNCj4gKyAgICBJTiAgUFhFTlZCRF9QUk9UT0NPTCAgICBQ
cm90b2NvbCwNCj4gICAgICBJTiAgUFhFTlZCRF9SRVFVRVNUIFJlcXVlc3QNCj4gICAgICApDQo+
ICB7DQo+IEBAIC0zNzEsNyArMzcxLDcgQEAgUmluZ1B1dFJlcXVlc3QoDQo+ICAgICAgICAgIGlm
IChMaXN0RW50cnkgPT0gJlJlcXVlc3QtPlNlZ21lbnRzKQ0KPiAgICAgICAgICAgICAgYnJlYWs7
DQo+ICAgICAgICAgIFNlZ21lbnQgPSBDT05UQUlOSU5HX1JFQ09SRChMaXN0RW50cnksIFhFTlZC
RF9TRUdNRU5ULA0KPiBMaXN0RW50cnkpOw0KPiAtICAgICAgICBSaW5nUHV0U2VnbWVudChSaW5n
LCBTZWdtZW50KTsNCj4gKyAgICAgICAgUHJvdG9jb2xQdXRTZWdtZW50KFByb3RvY29sLCBTZWdt
ZW50KTsNCj4gICAgICB9DQo+IA0KPiAgICAgIGZvciAoOzspIHsNCj4gQEAgLTM4MSw3ICszODEs
NyBAQCBSaW5nUHV0UmVxdWVzdCgNCj4gICAgICAgICAgaWYgKExpc3RFbnRyeSA9PSAmUmVxdWVz
dC0+SW5kaXJlY3RzKQ0KPiAgICAgICAgICAgICAgYnJlYWs7DQo+ICAgICAgICAgIEluZGlyZWN0
ID0gQ09OVEFJTklOR19SRUNPUkQoTGlzdEVudHJ5LCBYRU5WQkRfSU5ESVJFQ1QsDQo+IExpc3RF
bnRyeSk7DQo+IC0gICAgICAgIFJpbmdQdXRJbmRpcmVjdChSaW5nLCBJbmRpcmVjdCk7DQo+ICsg
ICAgICAgIFByb3RvY29sUHV0SW5kaXJlY3QoUHJvdG9jb2wsIEluZGlyZWN0KTsNCj4gICAgICB9
DQo+IA0KPiAgICAgIFJlcXVlc3QtPlNyYkV4dCA9IE5VTEw7DQo+IEBAIC0zOTMsMjIgKzM5Mywy
MiBAQCBSaW5nUHV0UmVxdWVzdCgNCj4gICAgICBSdGxaZXJvTWVtb3J5KCZSZXF1ZXN0LT5MaXN0
RW50cnksIHNpemVvZihMSVNUX0VOVFJZKSk7DQo+IA0KPiAgICAgIFhFTkJVU19DQUNIRShQdXQs
DQo+IC0gICAgICAgICAgICAgICAgICZSaW5nLT5DYWNoZUludGVyZmFjZSwNCj4gLSAgICAgICAg
ICAgICAgICAgUmluZy0+UmVxdWVzdENhY2hlLA0KPiArICAgICAgICAgICAgICAgICAmUHJvdG9j
b2wtPkNhY2hlSW50ZXJmYWNlLA0KPiArICAgICAgICAgICAgICAgICBQcm90b2NvbC0+UmVxdWVz
dENhY2hlLA0KPiAgICAgICAgICAgICAgICAgICBSZXF1ZXN0LA0KPiAgICAgICAgICAgICAgICAg
ICBGQUxTRSk7DQo+ICB9DQo+IA0KPiAgc3RhdGljIEZPUkNFSU5MSU5FIFBYRU5WQkRfUkVRVUVT
VA0KPiAtUmluZ0ZpbmRSZXF1ZXN0KA0KPiAtICAgIElOICBQWEVOVkJEX1JJTkcgICAgUmluZywN
Cj4gK1Byb3RvY29sRmluZFJlcXVlc3QoDQo+ICsgICAgSU4gIFBYRU5WQkRfUFJPVE9DT0wgICAg
UHJvdG9jb2wsDQo+ICAgICAgSU4gIFVMT05HNjQgICAgICAgICBJZA0KPiAgICAgICkNCj4gIHsN
Cj4gICAgICBLSVJRTCAgICAgICAgICAgICAgIElycWw7DQo+ICAgICAgUExJU1RfRU5UUlkgICAg
ICAgICBMaXN0RW50cnk7DQo+ICAgICAgUFhFTlZCRF9SRVFVRVNUICAgICBSZXF1ZXN0Ow0KPiAt
ICAgIFBYRU5WQkRfUVVFVUUgICAgICAgUXVldWUgPSAmUmluZy0+U3VibWl0dGVkUmVxczsNCj4g
KyAgICBQWEVOVkJEX1FVRVVFICAgICAgIFF1ZXVlID0gJlByb3RvY29sLT5TdWJtaXR0ZWRSZXFz
Ow0KPiANCj4gICAgICBLZUFjcXVpcmVTcGluTG9jaygmUXVldWUtPkxvY2ssICZJcnFsKTsNCj4g
DQo+IEBAIC00MjYsMzkgKzQyNiwzOSBAQCBSaW5nRmluZFJlcXVlc3QoDQo+IA0KPiAgICAgIEtl
UmVsZWFzZVNwaW5Mb2NrKCZRdWV1ZS0+TG9jaywgSXJxbCk7DQo+ICAgICAgV2FybmluZygiVGFy
Z2V0WyVkXSA6IFRhZyAlbGx4IG5vdCBmb3VuZCBpbiBzdWJtaXR0ZWQgbGlzdCAoJXUgaXRlbXMp
XG4iLA0KPiAtICAgICAgICAgICAgRnJvbnRlbmRHZXRUYXJnZXRJZChSaW5nLT5Gcm9udGVuZCks
DQo+ICsgICAgICAgICAgICBGcm9udGVuZEdldFRhcmdldElkKFByb3RvY29sLT5Gcm9udGVuZCks
DQo+ICAgICAgICAgICAgICBJZCwNCj4gICAgICAgICAgICAgIFF1ZXVlQ291bnQoUXVldWUpKTsN
Cj4gICAgICByZXR1cm4gTlVMTDsNCj4gIH0NCj4gDQo+ICBzdGF0aWMgRk9SQ0VJTkxJTkUgVk9J
RA0KPiAtX19SaW5nSW5jQmxraWZPcENvdW50KA0KPiAtICAgIElOICBQWEVOVkJEX1JJTkcgICAg
UmluZywNCj4gK19fUHJvdG9jb2xJbmNCbGtpZk9wQ291bnQoDQo+ICsgICAgSU4gIFBYRU5WQkRf
UFJPVE9DT0wgICAgUHJvdG9jb2wsDQo+ICAgICAgSU4gIFBYRU5WQkRfUkVRVUVTVCBSZXF1ZXN0
DQo+ICAgICAgKQ0KPiAgew0KPiAgICAgIHN3aXRjaCAoUmVxdWVzdC0+T3BlcmF0aW9uKSB7DQo+
ICAgICAgY2FzZSBCTEtJRl9PUF9SRUFEOg0KPiAgICAgICAgICBpZiAoUmVxdWVzdC0+TnJTZWdt
ZW50cyA+IEJMS0lGX01BWF9TRUdNRU5UU19QRVJfUkVRVUVTVCkNCj4gLSAgICAgICAgICAgICsr
UmluZy0+QmxrT3BJbmRpcmVjdFJlYWQ7DQo+ICsgICAgICAgICAgICArK1Byb3RvY29sLT5CbGtP
cEluZGlyZWN0UmVhZDsNCj4gICAgICAgICAgZWxzZQ0KPiAtICAgICAgICAgICAgKytSaW5nLT5C
bGtPcFJlYWQ7DQo+ICsgICAgICAgICAgICArK1Byb3RvY29sLT5CbGtPcFJlYWQ7DQo+ICAgICAg
ICAgIGJyZWFrOw0KPiAgICAgIGNhc2UgQkxLSUZfT1BfV1JJVEU6DQo+ICAgICAgICAgIGlmIChS
ZXF1ZXN0LT5OclNlZ21lbnRzID4gQkxLSUZfTUFYX1NFR01FTlRTX1BFUl9SRVFVRVNUKQ0KPiAt
ICAgICAgICAgICAgKytSaW5nLT5CbGtPcEluZGlyZWN0V3JpdGU7DQo+ICsgICAgICAgICAgICAr
K1Byb3RvY29sLT5CbGtPcEluZGlyZWN0V3JpdGU7DQo+ICAgICAgICAgIGVsc2UNCj4gLSAgICAg
ICAgICAgICsrUmluZy0+QmxrT3BXcml0ZTsNCj4gKyAgICAgICAgICAgICsrUHJvdG9jb2wtPkJs
a09wV3JpdGU7DQo+ICAgICAgICAgIGJyZWFrOw0KPiAgICAgIGNhc2UgQkxLSUZfT1BfV1JJVEVf
QkFSUklFUjoNCj4gLSAgICAgICAgKytSaW5nLT5CbGtPcEJhcnJpZXI7DQo+ICsgICAgICAgICsr
UHJvdG9jb2wtPkJsa09wQmFycmllcjsNCj4gICAgICAgICAgYnJlYWs7DQo+ICAgICAgY2FzZSBC
TEtJRl9PUF9ESVNDQVJEOg0KPiAtICAgICAgICArK1JpbmctPkJsa09wRGlzY2FyZDsNCj4gKyAg
ICAgICAgKytQcm90b2NvbC0+QmxrT3BEaXNjYXJkOw0KPiAgICAgICAgICBicmVhazsNCj4gICAg
ICBjYXNlIEJMS0lGX09QX0ZMVVNIX0RJU0tDQUNIRToNCj4gLSAgICAgICAgKytSaW5nLT5CbGtP
cEZsdXNoOw0KPiArICAgICAgICArK1Byb3RvY29sLT5CbGtPcEZsdXNoOw0KPiAgICAgICAgICBi
cmVhazsNCj4gICAgICBkZWZhdWx0Og0KPiAgICAgICAgICBBU1NFUlQoRkFMU0UpOw0KPiBAQCAt
NDY3LDcgKzQ2Nyw3IEBAIF9fUmluZ0luY0Jsa2lmT3BDb3VudCgNCj4gIH0NCj4gDQo+ICBzdGF0
aWMgRk9SQ0VJTkxJTkUgVUxPTkcNCj4gLV9fUmluZ1NlY3RvcnNQZXJQYWdlKA0KPiArX19Qcm90
b2NvbFNlY3RvcnNQZXJQYWdlKA0KPiAgICAgIElOICBVTE9ORyAgIFNlY3RvclNpemUNCj4gICAg
ICApDQo+ICB7DQo+IEBAIC00NzYsMTkgKzQ3NiwxOSBAQCBfX1JpbmdTZWN0b3JzUGVyUGFnZSgN
Cj4gIH0NCj4gDQo+ICBzdGF0aWMgRk9SQ0VJTkxJTkUgVk9JRA0KPiAtX19SaW5nT3BlcmF0aW9u
KA0KPiArX19Qcm90b2NvbE9wZXJhdGlvbigNCj4gICAgICBJTiAgVUNIQVIgICAgICAgQ2RiT3As
DQo+IC0gICAgT1VUIFBVQ0hBUiAgICAgIFJpbmdPcCwNCj4gKyAgICBPVVQgUFVDSEFSICAgICAg
UHJvdG9jb2xPcCwNCj4gICAgICBPVVQgUEJPT0xFQU4gICAgUmVhZE9ubHkNCj4gICAgICApDQo+
ICB7DQo+ICAgICAgc3dpdGNoIChDZGJPcCkgew0KPiAgICAgIGNhc2UgU0NTSU9QX1JFQUQ6DQo+
IC0gICAgICAgICpSaW5nT3AgICAgID0gQkxLSUZfT1BfUkVBRDsNCj4gKyAgICAgICAgKlByb3Rv
Y29sT3AgICAgID0gQkxLSUZfT1BfUkVBRDsNCj4gICAgICAgICAgKlJlYWRPbmx5ICAgPSBGQUxT
RTsNCj4gICAgICAgICAgYnJlYWs7DQo+ICAgICAgY2FzZSBTQ1NJT1BfV1JJVEU6DQo+IC0gICAg
ICAgICpSaW5nT3AgICAgID0gQkxLSUZfT1BfV1JJVEU7DQo+ICsgICAgICAgICpQcm90b2NvbE9w
ICAgICA9IEJMS0lGX09QX1dSSVRFOw0KPiAgICAgICAgICAqUmVhZE9ubHkgICA9IFRSVUU7DQo+
ICAgICAgICAgIGJyZWFrOw0KPiAgICAgIGRlZmF1bHQ6DQo+IEBAIC00OTcsMTEgKzQ5NywxMSBA
QCBfX1JpbmdPcGVyYXRpb24oDQo+ICB9DQo+IA0KPiAgc3RhdGljIEZPUkNFSU5MSU5FIE1NX1BB
R0VfUFJJT1JJVFkNCj4gLV9fUmluZ1ByaW9yaXR5KA0KPiAtICAgIElOICBQWEVOVkJEX1JJTkcg
ICAgUmluZw0KPiArX19Qcm90b2NvbFByaW9yaXR5KA0KPiArICAgIElOICBQWEVOVkJEX1BST1RP
Q09MICAgIFByb3RvY29sDQo+ICAgICAgKQ0KPiAgew0KPiAtICAgIFBYRU5WQkRfQ0FQUyAgICAg
ICAgQ2FwcyA9IEZyb250ZW5kR2V0Q2FwcyhSaW5nLT5Gcm9udGVuZCk7DQo+ICsgICAgUFhFTlZC
RF9DQVBTICAgICAgICBDYXBzID0gRnJvbnRlbmRHZXRDYXBzKFByb3RvY29sLT5Gcm9udGVuZCk7
DQo+ICAgICAgaWYgKCEoQ2Fwcy0+UGFnaW5nIHx8DQo+ICAgICAgICAgICAgQ2Fwcy0+SGliZXJu
YXRpb24gfHwNCj4gICAgICAgICAgICBDYXBzLT5EdW1wRmlsZSkpDQo+IEBAIC01MTEsNyArNTEx
LDcgQEAgX19SaW5nUHJpb3JpdHkoDQo+ICB9DQo+IA0KPiAgc3RhdGljIEZPUkNFSU5MSU5FIFZP
SUQNCj4gLVJpbmdSZXF1ZXN0Q29weU91dHB1dCgNCj4gK1Byb3RvY29sUmVxdWVzdENvcHlPdXRw
dXQoDQo+ICAgICAgSU4gIFBYRU5WQkRfUkVRVUVTVCBSZXF1ZXN0DQo+ICAgICAgKQ0KPiAgew0K
PiBAQCAtNTM1LDggKzUzNSw4IEBAIFJpbmdSZXF1ZXN0Q29weU91dHB1dCgNCj4gIH0NCj4gDQo+
ICBzdGF0aWMgQk9PTEVBTg0KPiAtUmluZ1ByZXBhcmVTZWdtZW50KA0KPiAtICAgIElOICBQWEVO
VkJEX1JJTkcgICAgUmluZywNCj4gK1Byb3RvY29sUHJlcGFyZVNlZ21lbnQoDQo+ICsgICAgSU4g
IFBYRU5WQkRfUFJPVE9DT0wgICAgUHJvdG9jb2wsDQo+ICAgICAgSU4gIFBYRU5WQkRfU0VHTUVO
VCBTZWdtZW50LA0KPiAgICAgIElOICBQWEVOVkJEX1NSQkVYVCAgU3JiRXh0LA0KPiAgICAgIElO
ICBCT09MRUFOICAgICAgICAgUmVhZE9ubHksDQo+IEBAIC01NDgsMTAgKzU0OCwxMCBAQCBSaW5n
UHJlcGFyZVNlZ21lbnQoDQo+ICAgICAgVUxPTkcgICAgICAgICAgICAgICBPZmZzZXQ7DQo+ICAg
ICAgVUxPTkcgICAgICAgICAgICAgICBMZW5ndGg7DQo+ICAgICAgTlRTVEFUVVMgICAgICAgICAg
ICBTdGF0dXM7DQo+IC0gICAgUFhFTlZCRF9HUkFOVEVSICAgICBHcmFudGVyID0gRnJvbnRlbmRH
ZXRHcmFudGVyKFJpbmctPkZyb250ZW5kKTsNCj4gLSAgICBjb25zdCBVTE9ORyAgICAgICAgIFNl
Y3RvclNpemUgPSBGcm9udGVuZEdldERpc2tJbmZvKFJpbmctPkZyb250ZW5kKS0NCj4gPlNlY3Rv
clNpemU7DQo+IC0gICAgY29uc3QgVUxPTkcgICAgICAgICBTZWN0b3JzUGVyUGFnZSA9IF9fUmlu
Z1NlY3RvcnNQZXJQYWdlKFNlY3RvclNpemUpOw0KPiAtICAgIFBYRU5WQkRfVEFSR0VUICAgICAg
VGFyZ2V0ID0gRnJvbnRlbmRHZXRUYXJnZXQoUmluZy0+RnJvbnRlbmQpOw0KPiArICAgIFBYRU5W
QkRfR1JBTlRFUiAgICAgR3JhbnRlciA9IEZyb250ZW5kR2V0R3JhbnRlcihQcm90b2NvbC0NCj4g
PkZyb250ZW5kKTsNCj4gKyAgICBjb25zdCBVTE9ORyAgICAgICAgIFNlY3RvclNpemUgPSBGcm9u
dGVuZEdldERpc2tJbmZvKFByb3RvY29sLQ0KPiA+RnJvbnRlbmQpLT5TZWN0b3JTaXplOw0KPiAr
ICAgIGNvbnN0IFVMT05HICAgICAgICAgU2VjdG9yc1BlclBhZ2UgPQ0KPiBfX1Byb3RvY29sU2Vj
dG9yc1BlclBhZ2UoU2VjdG9yU2l6ZSk7DQo+ICsgICAgUFhFTlZCRF9UQVJHRVQgICAgICBUYXJn
ZXQgPSBGcm9udGVuZEdldFRhcmdldChQcm90b2NvbC0+RnJvbnRlbmQpOw0KPiAgICAgIFBYRU5W
QkRfQURBUFRFUiAgICAgQWRhcHRlciA9IFRhcmdldEdldEFkYXB0ZXIoVGFyZ2V0KTsNCj4gDQo+
ICAgICAgUGZuID0gQWRhcHRlckdldE5leHRTR0VudHJ5KEFkYXB0ZXIsDQo+IEBAIC01NjEsNyAr
NTYxLDcgQEAgUmluZ1ByZXBhcmVTZWdtZW50KA0KPiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAmTGVuZ3RoKTsNCj4gICAgICBpZiAoKE9mZnNldCAmIChTZWN0b3JTaXplIC0gMSkp
ID09IDAgJiYNCj4gICAgICAgICAgKExlbmd0aCAmIChTZWN0b3JTaXplIC0gMSkpID09IDApIHsN
Cj4gLSAgICAgICAgKytSaW5nLT5TZWdzR3JhbnRlZDsNCj4gKyAgICAgICAgKytQcm90b2NvbC0+
U2Vnc0dyYW50ZWQ7DQo+ICAgICAgICAgIC8vIGdldCBmaXJzdCBzZWN0b3IsIGxhc3Qgc2VjdG9y
IGFuZCBjb3VudA0KPiAgICAgICAgICBTZWdtZW50LT5GaXJzdFNlY3RvciAgICA9IChVQ0hBUiko
KE9mZnNldCArIFNlY3RvclNpemUgLSAxKSAvIFNlY3RvclNpemUpOw0KPiAgICAgICAgICAqU2Vj
dG9yc05vdyAgICAgICAgICAgICA9IF9fbWluKFNlY3RvcnNMZWZ0LCBTZWN0b3JzUGVyUGFnZSAt
IFNlZ21lbnQtDQo+ID5GaXJzdFNlY3Rvcik7DQo+IEBAIC01NzIsNyArNTcyLDcgQEAgUmluZ1By
ZXBhcmVTZWdtZW50KA0KPiAgICAgICAgICBQWEVOVkJEX0JPVU5DRSAgICAgIEJvdW5jZTsNCj4g
ICAgICAgICAgUE1ETCAgICAgICAgICAgICAgICBNZGw7DQo+IA0KPiAtICAgICAgICArK1Jpbmct
PlNlZ3NCb3VuY2VkOw0KPiArICAgICAgICArK1Byb3RvY29sLT5TZWdzQm91bmNlZDsNCj4gICAg
ICAgICAgLy8gZ2V0IGZpcnN0IHNlY3RvciwgbGFzdCBzZWN0b3IgYW5kIGNvdW50DQo+ICAgICAg
ICAgIFNlZ21lbnQtPkZpcnN0U2VjdG9yICAgID0gMDsNCj4gICAgICAgICAgKlNlY3RvcnNOb3cg
ICAgICAgICAgICAgPSBfX21pbihTZWN0b3JzTGVmdCwgU2VjdG9yc1BlclBhZ2UpOw0KPiBAQCAt
NjE3LDcgKzYxNyw3IEBAIFJpbmdQcmVwYXJlU2VnbWVudCgNCj4gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1tQ2FjaGVkLA0KPiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVM
TCwNCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEZBTFNFLA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19SaW5nUHJpb3JpdHkoUmluZykpOw0KPiArICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19Qcm90b2NvbFBy
aW9yaXR5KFByb3RvY29sKSk7DQo+ICAgICAgICAgIGlmIChCb3VuY2UtPlNvdXJjZVB0ciA9PSBO
VUxMKQ0KPiAgICAgICAgICAgICAgZ290byBmYWlsMjsNCj4gDQo+IEBAIC02NDgsOCArNjQ4LDgg
QEAgZmFpbDE6DQo+ICB9DQo+IA0KPiAgc3RhdGljIEJPT0xFQU4NCj4gLVJpbmdQcmVwYXJlQmxr
aWZSZWFkV3JpdGUoDQo+IC0gICAgSU4gIFBYRU5WQkRfUklORyAgICBSaW5nLA0KPiArUHJvdG9j
b2xQcmVwYXJlQmxraWZSZWFkV3JpdGUoDQo+ICsgICAgSU4gIFBYRU5WQkRfUFJPVE9DT0wgICAg
UHJvdG9jb2wsDQo+ICAgICAgSU4gIFBYRU5WQkRfUkVRVUVTVCBSZXF1ZXN0LA0KPiAgICAgIElO
ICBQWEVOVkJEX1NSQkVYVCAgU3JiRXh0LA0KPiAgICAgIElOICBVTE9ORyAgICAgICAgICAgTWF4
U2VnbWVudHMsDQo+IEBAIC02NjIsNyArNjYyLDcgQEAgUmluZ1ByZXBhcmVCbGtpZlJlYWRXcml0
ZSgNCj4gICAgICBVQ0hBUiAgICAgICAgICAgICAgIE9wZXJhdGlvbjsNCj4gICAgICBCT09MRUFO
ICAgICAgICAgICAgIFJlYWRPbmx5Ow0KPiAgICAgIFVMT05HICAgICAgICAgICAgICAgSW5kZXg7
DQo+IC0gICAgX19SaW5nT3BlcmF0aW9uKENkYl9PcGVyYXRpb25FeChTcmIpLCAmT3BlcmF0aW9u
LCAmUmVhZE9ubHkpOw0KPiArICAgIF9fUHJvdG9jb2xPcGVyYXRpb24oQ2RiX09wZXJhdGlvbkV4
KFNyYiksICZPcGVyYXRpb24sICZSZWFkT25seSk7DQo+IA0KPiAgICAgIFJlcXVlc3QtPk9wZXJh
dGlvbiAgPSBPcGVyYXRpb247DQo+ICAgICAgUmVxdWVzdC0+TnJTZWdtZW50cyA9IDA7DQo+IEBA
IC02NzUsMTQgKzY3NSwxNCBAQCBSaW5nUHJlcGFyZUJsa2lmUmVhZFdyaXRlKA0KPiAgICAgICAg
ICBQWEVOVkJEX1NFR01FTlQgU2VnbWVudDsNCj4gICAgICAgICAgVUxPTkcgICAgICAgICAgIFNl
Y3RvcnNOb3c7DQo+IA0KPiAtICAgICAgICBTZWdtZW50ID0gUmluZ0dldFNlZ21lbnQoUmluZyk7
DQo+ICsgICAgICAgIFNlZ21lbnQgPSBQcm90b2NvbEdldFNlZ21lbnQoUHJvdG9jb2wpOw0KPiAg
ICAgICAgICBpZiAoU2VnbWVudCA9PSBOVUxMKQ0KPiAgICAgICAgICAgICAgZ290byBmYWlsMTsN
Cj4gDQo+ICAgICAgICAgIEluc2VydFRhaWxMaXN0KCZSZXF1ZXN0LT5TZWdtZW50cywgJlNlZ21l
bnQtPkxpc3RFbnRyeSk7DQo+ICAgICAgICAgICsrUmVxdWVzdC0+TnJTZWdtZW50czsNCj4gDQo+
IC0gICAgICAgIGlmICghUmluZ1ByZXBhcmVTZWdtZW50KFJpbmcsDQo+ICsgICAgICAgIGlmICgh
UHJvdG9jb2xQcmVwYXJlU2VnbWVudChQcm90b2NvbCwNCj4gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgU2VnbWVudCwNCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
U3JiRXh0LA0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkT25seSwNCj4g
QEAgLTcwNCw4ICs3MDQsOCBAQCBmYWlsMToNCj4gIH0NCj4gDQo+ICBzdGF0aWMgQk9PTEVBTg0K
PiAtUmluZ1ByZXBhcmVCbGtpZkluZGlyZWN0KA0KPiAtICAgIElOICBQWEVOVkJEX1JJTkcgICAg
UmluZywNCj4gK1Byb3RvY29sUHJlcGFyZUJsa2lmSW5kaXJlY3QoDQo+ICsgICAgSU4gIFBYRU5W
QkRfUFJPVE9DT0wgICAgUHJvdG9jb2wsDQo+ICAgICAgSU4gIFBYRU5WQkRfUkVRVUVTVCBSZXF1
ZXN0DQo+ICAgICAgKQ0KPiAgew0KPiBAQCAtNzE4LDcgKzcxOCw3IEBAIFJpbmdQcmVwYXJlQmxr
aWZJbmRpcmVjdCgNCj4gICAgICAgICAgICAgICAgICArK0luZGV4KSB7DQo+ICAgICAgICAgIFBY
RU5WQkRfSU5ESVJFQ1QgICAgSW5kaXJlY3Q7DQo+IA0KPiAtICAgICAgICBJbmRpcmVjdCA9IFJp
bmdHZXRJbmRpcmVjdChSaW5nKTsNCj4gKyAgICAgICAgSW5kaXJlY3QgPSBQcm90b2NvbEdldElu
ZGlyZWN0KFByb3RvY29sKTsNCj4gICAgICAgICAgaWYgKEluZGlyZWN0ID09IE5VTEwpDQo+ICAg
ICAgICAgICAgICBnb3RvIGZhaWwxOw0KPiAgICAgICAgICBJbnNlcnRUYWlsTGlzdCgmUmVxdWVz
dC0+SW5kaXJlY3RzLCAmSW5kaXJlY3QtPkxpc3RFbnRyeSk7DQo+IEBAIC03MzMsMTMgKzczMywx
MyBAQCBmYWlsMToNCj4gIH0NCj4gDQo+ICBzdGF0aWMgRk9SQ0VJTkxJTkUgVUxPTkcNCj4gLVJp
bmdVc2VJbmRpcmVjdCgNCj4gLSAgICBJTiAgUFhFTlZCRF9SSU5HICAgIFJpbmcsDQo+ICtQcm90
b2NvbFVzZUluZGlyZWN0KA0KPiArICAgIElOICBQWEVOVkJEX1BST1RPQ09MICAgIFByb3RvY29s
LA0KPiAgICAgIElOICBVTE9ORyAgICAgICAgICAgU2VjdG9yc0xlZnQNCj4gICAgICApDQo+ICB7
DQo+IC0gICAgY29uc3QgVUxPTkcgU2VjdG9yc1BlclBhZ2UgPQ0KPiBfX1JpbmdTZWN0b3JzUGVy
UGFnZShGcm9udGVuZEdldERpc2tJbmZvKFJpbmctPkZyb250ZW5kKS0+U2VjdG9yU2l6ZSk7DQo+
IC0gICAgY29uc3QgVUxPTkcgTWF4SW5kaXJlY3RTZWdzID0gRnJvbnRlbmRHZXRGZWF0dXJlcyhS
aW5nLT5Gcm9udGVuZCktDQo+ID5JbmRpcmVjdDsNCj4gKyAgICBjb25zdCBVTE9ORyBTZWN0b3Jz
UGVyUGFnZSA9DQo+IF9fUHJvdG9jb2xTZWN0b3JzUGVyUGFnZShGcm9udGVuZEdldERpc2tJbmZv
KFByb3RvY29sLT5Gcm9udGVuZCktDQo+ID5TZWN0b3JTaXplKTsNCj4gKyAgICBjb25zdCBVTE9O
RyBNYXhJbmRpcmVjdFNlZ3MgPSBGcm9udGVuZEdldEZlYXR1cmVzKFByb3RvY29sLQ0KPiA+RnJv
bnRlbmQpLT5JbmRpcmVjdDsNCj4gDQo+ICAgICAgaWYgKE1heEluZGlyZWN0U2VncyA8PSBCTEtJ
Rl9NQVhfU0VHTUVOVFNfUEVSX1JFUVVFU1QpDQo+ICAgICAgICAgIHJldHVybiBCTEtJRl9NQVhf
U0VHTUVOVFNfUEVSX1JFUVVFU1Q7IC8vIG5vdCBzdXBwb3J0ZWQNCj4gQEAgLTc1MSw5ICs3NTEs
OSBAQCBSaW5nVXNlSW5kaXJlY3QoDQo+ICB9DQo+IA0KPiAgc3RhdGljIEZPUkNFSU5MSU5FIFZP
SUQNCj4gLVJpbmdRdWV1ZVJlcXVlc3RMaXN0KA0KPiAtICAgIElOICBQWEVOVkJEX1JJTkcgICAg
UmluZywNCj4gLSAgICBJTiAgUExJU1RfRU5UUlkgICAgIExpc3QNCj4gK1Byb3RvY29sUXVldWVS
ZXF1ZXN0TGlzdCgNCj4gKyAgICBJTiAgUFhFTlZCRF9QUk9UT0NPTCAgICBQcm90b2NvbCwNCj4g
KyAgICBJTiAgUExJU1RfRU5UUlkgICAgICAgICBMaXN0DQo+ICAgICAgKQ0KPiAgew0KPiAgICAg
IGZvciAoOzspIHsNCj4gQEAgLTc2NSwxNCArNzY1LDE0IEBAIFJpbmdRdWV1ZVJlcXVlc3RMaXN0
KA0KPiAgICAgICAgICAgICAgYnJlYWs7DQo+IA0KPiAgICAgICAgICBSZXF1ZXN0ID0gQ09OVEFJ
TklOR19SRUNPUkQoTGlzdEVudHJ5LCBYRU5WQkRfUkVRVUVTVCwNCj4gTGlzdEVudHJ5KTsNCj4g
LSAgICAgICAgX19SaW5nSW5jQmxraWZPcENvdW50KFJpbmcsIFJlcXVlc3QpOw0KPiAtICAgICAg
ICBRdWV1ZUFwcGVuZCgmUmluZy0+UHJlcGFyZWRSZXFzLCAmUmVxdWVzdC0+TGlzdEVudHJ5KTsN
Cj4gKyAgICAgICAgX19Qcm90b2NvbEluY0Jsa2lmT3BDb3VudChQcm90b2NvbCwgUmVxdWVzdCk7
DQo+ICsgICAgICAgIFF1ZXVlQXBwZW5kKCZQcm90b2NvbC0+UHJlcGFyZWRSZXFzLCAmUmVxdWVz
dC0+TGlzdEVudHJ5KTsNCj4gICAgICB9DQo+ICB9DQo+IA0KPiAgc3RhdGljIEZPUkNFSU5MSU5F
IFZPSUQNCj4gLVJpbmdDYW5jZWxSZXF1ZXN0TGlzdCgNCj4gLSAgICBJTiAgUFhFTlZCRF9SSU5H
ICAgIFJpbmcsDQo+ICtQcm90b2NvbENhbmNlbFJlcXVlc3RMaXN0KA0KPiArICAgIElOICBQWEVO
VkJEX1BST1RPQ09MICAgIFByb3RvY29sLA0KPiAgICAgIElOICBQTElTVF9FTlRSWSAgICAgTGlz
dA0KPiAgICAgICkNCj4gIHsNCj4gQEAgLTc4NSwxMyArNzg1LDEzIEBAIFJpbmdDYW5jZWxSZXF1
ZXN0TGlzdCgNCj4gICAgICAgICAgICAgIGJyZWFrOw0KPiANCj4gICAgICAgICAgUmVxdWVzdCA9
IENPTlRBSU5JTkdfUkVDT1JEKExpc3RFbnRyeSwgWEVOVkJEX1JFUVVFU1QsDQo+IExpc3RFbnRy
eSk7DQo+IC0gICAgICAgIFJpbmdQdXRSZXF1ZXN0KFJpbmcsIFJlcXVlc3QpOw0KPiArICAgICAg
ICBQcm90b2NvbFB1dFJlcXVlc3QoUHJvdG9jb2wsIFJlcXVlc3QpOw0KPiAgICAgIH0NCj4gIH0N
Cj4gDQo+ICBzdGF0aWMgQk9PTEVBTg0KPiAtUmluZ1ByZXBhcmVSZWFkV3JpdGUoDQo+IC0gICAg
SU4gIFBYRU5WQkRfUklORyAgICAgICAgUmluZywNCj4gK1Byb3RvY29sUHJlcGFyZVJlYWRXcml0
ZSgNCj4gKyAgICBJTiAgUFhFTlZCRF9QUk9UT0NPTCAgICAgICAgUHJvdG9jb2wsDQo+ICAgICAg
SU4gIFBYRU5WQkRfU1JCRVhUICAgICAgU3JiRXh0DQo+ICAgICAgKQ0KPiAgew0KPiBAQCAtODEw
LDE2ICs4MTAsMTYgQEAgUmluZ1ByZXBhcmVSZWFkV3JpdGUoDQo+ICAgICAgICAgIFVMT05HICAg
ICAgICAgICBTZWN0b3JzRG9uZSA9IDA7DQo+ICAgICAgICAgIFBYRU5WQkRfUkVRVUVTVCBSZXF1
ZXN0Ow0KPiANCj4gLSAgICAgICAgUmVxdWVzdCA9IFJpbmdHZXRSZXF1ZXN0KFJpbmcpOw0KPiAr
ICAgICAgICBSZXF1ZXN0ID0gUHJvdG9jb2xHZXRSZXF1ZXN0KFByb3RvY29sKTsNCj4gICAgICAg
ICAgaWYgKFJlcXVlc3QgPT0gTlVMTCkNCj4gICAgICAgICAgICAgIGdvdG8gZmFpbDE7DQo+ICAg
ICAgICAgIEluc2VydFRhaWxMaXN0KCZMaXN0LCAmUmVxdWVzdC0+TGlzdEVudHJ5KTsNCj4gICAg
ICAgICAgSW50ZXJsb2NrZWRJbmNyZW1lbnQoJlNyYkV4dC0+UmVxdWVzdENvdW50KTsNCj4gDQo+
ICAgICAgICAgIFJlcXVlc3QtPlNyYkV4dCA9IFNyYkV4dDsNCj4gLSAgICAgICAgTWF4U2VnbWVu
dHMgPSBSaW5nVXNlSW5kaXJlY3QoUmluZywgU2VjdG9yc0xlZnQpOw0KPiArICAgICAgICBNYXhT
ZWdtZW50cyA9IFByb3RvY29sVXNlSW5kaXJlY3QoUHJvdG9jb2wsIFNlY3RvcnNMZWZ0KTsNCj4g
DQo+IC0gICAgICAgIGlmICghUmluZ1ByZXBhcmVCbGtpZlJlYWRXcml0ZShSaW5nLA0KPiArICAg
ICAgICBpZiAoIVByb3RvY29sUHJlcGFyZUJsa2lmUmVhZFdyaXRlKFByb3RvY29sLA0KPiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdCwNCj4gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNyYkV4dCwNCj4gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE1heFNlZ21lbnRzLA0KPiBAQCAtODI5LDcgKzgyOSw3
IEBAIFJpbmdQcmVwYXJlUmVhZFdyaXRlKA0KPiAgICAgICAgICAgICAgZ290byBmYWlsMjsNCj4g
DQo+ICAgICAgICAgIGlmIChNYXhTZWdtZW50cyA+IEJMS0lGX01BWF9TRUdNRU5UU19QRVJfUkVR
VUVTVCkgew0KPiAtICAgICAgICAgICAgaWYgKCFSaW5nUHJlcGFyZUJsa2lmSW5kaXJlY3QoUmlu
ZywgUmVxdWVzdCkpDQo+ICsgICAgICAgICAgICBpZiAoIVByb3RvY29sUHJlcGFyZUJsa2lmSW5k
aXJlY3QoUHJvdG9jb2wsIFJlcXVlc3QpKQ0KPiAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbDM7
DQo+ICAgICAgICAgIH0NCj4gDQo+IEBAIC04MzcsMjEgKzgzNywyMSBAQCBSaW5nUHJlcGFyZVJl
YWRXcml0ZSgNCj4gICAgICAgICAgU2VjdG9yU3RhcnQgKz0gU2VjdG9yc0RvbmU7DQo+ICAgICAg
fQ0KPiANCj4gLSAgICBSaW5nUXVldWVSZXF1ZXN0TGlzdChSaW5nLCAmTGlzdCk7DQo+ICsgICAg
UHJvdG9jb2xRdWV1ZVJlcXVlc3RMaXN0KFByb3RvY29sLCAmTGlzdCk7DQo+ICAgICAgcmV0dXJu
IFRSVUU7DQo+IA0KPiAgZmFpbDM6DQo+ICBmYWlsMjoNCj4gIGZhaWwxOg0KPiAtICAgIFJpbmdD
YW5jZWxSZXF1ZXN0TGlzdChSaW5nLCAmTGlzdCk7DQo+ICsgICAgUHJvdG9jb2xDYW5jZWxSZXF1
ZXN0TGlzdChQcm90b2NvbCwgJkxpc3QpOw0KPiAgICAgIFNyYkV4dC0+UmVxdWVzdENvdW50ID0g
MDsNCj4gICAgICBTcmItPlNyYlN0YXR1cyA9IFNSQl9TVEFUVVNfRVJST1I7DQo+ICAgICAgcmV0
dXJuIEZBTFNFOw0KPiAgfQ0KPiANCj4gIHN0YXRpYyBCT09MRUFODQo+IC1SaW5nUHJlcGFyZVN5
bmNDYWNoZSgNCj4gLSAgICBJTiAgUFhFTlZCRF9SSU5HICAgICAgICBSaW5nLA0KPiArUHJvdG9j
b2xQcmVwYXJlU3luY0NhY2hlKA0KPiArICAgIElOICBQWEVOVkJEX1BST1RPQ09MICAgICAgICBQ
cm90b2NvbCwNCj4gICAgICBJTiAgUFhFTlZCRF9TUkJFWFQgICAgICBTcmJFeHQNCj4gICAgICAp
DQo+ICB7DQo+IEBAIC04NjIsNyArODYyLDcgQEAgUmluZ1ByZXBhcmVTeW5jQ2FjaGUoDQo+IA0K
PiAgICAgIFNyYi0+U3JiU3RhdHVzID0gU1JCX1NUQVRVU19QRU5ESU5HOw0KPiANCj4gLSAgICBp
ZiAoRnJvbnRlbmRHZXREaXNrSW5mbyhSaW5nLT5Gcm9udGVuZCktPkZsdXNoQ2FjaGUpDQo+ICsg
ICAgaWYgKEZyb250ZW5kR2V0RGlza0luZm8oUHJvdG9jb2wtPkZyb250ZW5kKS0+Rmx1c2hDYWNo
ZSkNCj4gICAgICAgICAgT3BlcmF0aW9uID0gQkxLSUZfT1BfRkxVU0hfRElTS0NBQ0hFOw0KPiAg
ICAgIGVsc2UNCj4gICAgICAgICAgT3BlcmF0aW9uID0gQkxLSUZfT1BfV1JJVEVfQkFSUklFUjsN
Cj4gQEAgLTg3MCw3ICs4NzAsNyBAQCBSaW5nUHJlcGFyZVN5bmNDYWNoZSgNCj4gICAgICBJbml0
aWFsaXplTGlzdEhlYWQoJkxpc3QpOw0KPiAgICAgIFNyYkV4dC0+UmVxdWVzdENvdW50ID0gMDsN
Cj4gDQo+IC0gICAgUmVxdWVzdCA9IFJpbmdHZXRSZXF1ZXN0KFJpbmcpOw0KPiArICAgIFJlcXVl
c3QgPSBQcm90b2NvbEdldFJlcXVlc3QoUHJvdG9jb2wpOw0KPiAgICAgIGlmIChSZXF1ZXN0ID09
IE5VTEwpDQo+ICAgICAgICAgIGdvdG8gZmFpbDE7DQo+ICAgICAgSW5zZXJ0VGFpbExpc3QoJkxp
c3QsICZSZXF1ZXN0LT5MaXN0RW50cnkpOw0KPiBAQCAtODgwLDE5ICs4ODAsMTkgQEAgUmluZ1By
ZXBhcmVTeW5jQ2FjaGUoDQo+ICAgICAgUmVxdWVzdC0+T3BlcmF0aW9uICA9IE9wZXJhdGlvbjsN
Cj4gICAgICBSZXF1ZXN0LT5GaXJzdFNlY3RvciA9IENkYl9Mb2dpY2FsQmxvY2soU3JiKTsNCj4g
DQo+IC0gICAgUmluZ1F1ZXVlUmVxdWVzdExpc3QoUmluZywgJkxpc3QpOw0KPiArICAgIFByb3Rv
Y29sUXVldWVSZXF1ZXN0TGlzdChQcm90b2NvbCwgJkxpc3QpOw0KPiAgICAgIHJldHVybiBUUlVF
Ow0KPiANCj4gIGZhaWwxOg0KPiAtICAgIFJpbmdDYW5jZWxSZXF1ZXN0TGlzdChSaW5nLCAmTGlz
dCk7DQo+ICsgICAgUHJvdG9jb2xDYW5jZWxSZXF1ZXN0TGlzdChQcm90b2NvbCwgJkxpc3QpOw0K
PiAgICAgIFNyYkV4dC0+UmVxdWVzdENvdW50ID0gMDsNCj4gICAgICBTcmItPlNyYlN0YXR1cyA9
IFNSQl9TVEFUVVNfRVJST1I7DQo+ICAgICAgcmV0dXJuIEZBTFNFOw0KPiAgfQ0KPiANCj4gIHN0
YXRpYyBCT09MRUFODQo+IC1SaW5nUHJlcGFyZVVubWFwKA0KPiAtICAgIElOICBQWEVOVkJEX1JJ
TkcgICAgICAgIFJpbmcsDQo+ICtQcm90b2NvbFByZXBhcmVVbm1hcCgNCj4gKyAgICBJTiAgUFhF
TlZCRF9QUk9UT0NPTCAgICAgICAgUHJvdG9jb2wsDQo+ICAgICAgSU4gIFBYRU5WQkRfU1JCRVhU
ICAgICAgU3JiRXh0DQo+ICAgICAgKQ0KPiAgew0KPiBAQCAtOTExLDcgKzkxMSw3IEBAIFJpbmdQ
cmVwYXJlVW5tYXAoDQo+ICAgICAgICAgIFBVTk1BUF9CTE9DS19ERVNDUklQVE9SIERlc2NyID0g
JlVubWFwLT5EZXNjcmlwdG9yc1tJbmRleF07DQo+ICAgICAgICAgIFBYRU5WQkRfUkVRVUVTVCAg
ICAgICAgIFJlcXVlc3Q7DQo+IA0KPiAtICAgICAgICBSZXF1ZXN0ID0gUmluZ0dldFJlcXVlc3Qo
UmluZyk7DQo+ICsgICAgICAgIFJlcXVlc3QgPSBQcm90b2NvbEdldFJlcXVlc3QoUHJvdG9jb2wp
Ow0KPiAgICAgICAgICBpZiAoUmVxdWVzdCA9PSBOVUxMKQ0KPiAgICAgICAgICAgICAgZ290byBm
YWlsMTsNCj4gICAgICAgICAgSW5zZXJ0VGFpbExpc3QoJkxpc3QsICZSZXF1ZXN0LT5MaXN0RW50
cnkpOw0KPiBAQCAtOTI0LDMyICs5MjQsMzIgQEAgUmluZ1ByZXBhcmVVbm1hcCgNCj4gICAgICAg
ICAgUmVxdWVzdC0+RmxhZ3MgICAgICAgICAgPSAwOw0KPiAgICAgIH0NCj4gDQo+IC0gICAgUmlu
Z1F1ZXVlUmVxdWVzdExpc3QoUmluZywgJkxpc3QpOw0KPiArICAgIFByb3RvY29sUXVldWVSZXF1
ZXN0TGlzdChQcm90b2NvbCwgJkxpc3QpOw0KPiAgICAgIHJldHVybiBUUlVFOw0KPiANCj4gIGZh
aWwxOg0KPiAtICAgIFJpbmdDYW5jZWxSZXF1ZXN0TGlzdChSaW5nLCAmTGlzdCk7DQo+ICsgICAg
UHJvdG9jb2xDYW5jZWxSZXF1ZXN0TGlzdChQcm90b2NvbCwgJkxpc3QpOw0KPiAgICAgIFNyYkV4
dC0+UmVxdWVzdENvdW50ID0gMDsNCj4gICAgICBTcmItPlNyYlN0YXR1cyA9IFNSQl9TVEFUVVNf
RVJST1I7DQo+ICAgICAgcmV0dXJuIEZBTFNFOw0KPiAgfQ0KPiANCj4gIHN0YXRpYyBGT1JDRUlO
TElORSBCT09MRUFODQo+IC1SaW5nUHJlcGFyZVJlcXVlc3QoDQo+IC0gICAgSU4gIFBYRU5WQkRf
UklORyAgICBSaW5nLA0KPiArUHJvdG9jb2xQcmVwYXJlUmVxdWVzdCgNCj4gKyAgICBJTiAgUFhF
TlZCRF9QUk9UT0NPTCAgICBQcm90b2NvbCwNCj4gICAgICBJTiAgUFhFTlZCRF9TUkJFWFQgIFNy
YkV4dA0KPiAgICAgICkNCj4gIHsNCj4gICAgICBzd2l0Y2ggKENkYl9PcGVyYXRpb25FeChTcmJF
eHQtPlNyYikpIHsNCj4gICAgICBjYXNlIFNDU0lPUF9SRUFEOg0KPiAgICAgIGNhc2UgU0NTSU9Q
X1dSSVRFOg0KPiAtICAgICAgICByZXR1cm4gUmluZ1ByZXBhcmVSZWFkV3JpdGUoUmluZywgU3Ji
RXh0KTsNCj4gKyAgICAgICAgcmV0dXJuIFByb3RvY29sUHJlcGFyZVJlYWRXcml0ZShQcm90b2Nv
bCwgU3JiRXh0KTsNCj4gDQo+ICAgICAgY2FzZSBTQ1NJT1BfU1lOQ0hST05JWkVfQ0FDSEU6DQo+
IC0gICAgICAgIHJldHVybiBSaW5nUHJlcGFyZVN5bmNDYWNoZShSaW5nLCBTcmJFeHQpOw0KPiAr
ICAgICAgICByZXR1cm4gUHJvdG9jb2xQcmVwYXJlU3luY0NhY2hlKFByb3RvY29sLCBTcmJFeHQp
Ow0KPiANCj4gICAgICBjYXNlIFNDU0lPUF9VTk1BUDoNCj4gLSAgICAgICAgcmV0dXJuIFJpbmdQ
cmVwYXJlVW5tYXAoUmluZywgU3JiRXh0KTsNCj4gKyAgICAgICAgcmV0dXJuIFByb3RvY29sUHJl
cGFyZVVubWFwKFByb3RvY29sLCBTcmJFeHQpOw0KPiANCj4gICAgICBkZWZhdWx0Og0KPiAgICAg
ICAgICBBU1NFUlQoRkFMU0UpOw0KPiBAQCAtOTU4LDggKzk1OCw4IEBAIFJpbmdQcmVwYXJlUmVx
dWVzdCgNCj4gIH0NCj4gDQo+ICBzdGF0aWMgQk9PTEVBTg0KPiAtUmluZ1N1Ym1pdCgNCj4gLSAg
ICBJTiAgUFhFTlZCRF9SSU5HICAgIFJpbmcsDQo+ICtQcm90b2NvbFN1Ym1pdCgNCj4gKyAgICBJ
TiAgUFhFTlZCRF9QUk9UT0NPTCAgICBQcm90b2NvbCwNCj4gICAgICBJTiAgUFhFTlZCRF9SRVFV
RVNUIFJlcXVlc3QNCj4gICAgICApDQo+ICB7DQo+IEBAIC05NjcsNDIgKzk2Nyw0MiBAQCBSaW5n
U3VibWl0KA0KPiAgICAgIGJsa2lmX3JlcXVlc3RfdCogICAgcmVxOw0KPiAgICAgIEJPT0xFQU4g
ICAgICAgICAgICAgTm90aWZ5Ow0KPiANCj4gLSAgICBLZUFjcXVpcmVTcGluTG9jaygmUmluZy0+
TG9jaywgJklycWwpOw0KPiAtICAgIGlmIChSSU5HX0ZVTEwoJlJpbmctPkZyb250KSkgew0KPiAt
ICAgICAgICBLZVJlbGVhc2VTcGluTG9jaygmUmluZy0+TG9jaywgSXJxbCk7DQo+ICsgICAgS2VB
Y3F1aXJlU3BpbkxvY2soJlByb3RvY29sLT5Mb2NrLCAmSXJxbCk7DQo+ICsgICAgaWYgKFJJTkdf
RlVMTCgmUHJvdG9jb2wtPkZyb250KSkgew0KPiArICAgICAgICBLZVJlbGVhc2VTcGluTG9jaygm
UHJvdG9jb2wtPkxvY2ssIElycWwpOw0KPiAgICAgICAgICByZXR1cm4gRkFMU0U7DQo+ICAgICAg
fQ0KPiANCj4gLSAgICByZXEgPSBSSU5HX0dFVF9SRVFVRVNUKCZSaW5nLT5Gcm9udCwgUmluZy0+
RnJvbnQucmVxX3Byb2RfcHZ0KTsNCj4gLSAgICBfX1JpbmdJbnNlcnQoUmluZywgUmVxdWVzdCwg
cmVxKTsNCj4gKyAgICByZXEgPSBSSU5HX0dFVF9SRVFVRVNUKCZQcm90b2NvbC0+RnJvbnQsIFBy
b3RvY29sLQ0KPiA+RnJvbnQucmVxX3Byb2RfcHZ0KTsNCj4gKyAgICBfX1Byb3RvY29sSW5zZXJ0
KFByb3RvY29sLCBSZXF1ZXN0LCByZXEpOw0KPiAgICAgIEtlTWVtb3J5QmFycmllcigpOw0KPiAt
ICAgICsrUmluZy0+RnJvbnQucmVxX3Byb2RfcHZ0Ow0KPiArICAgICsrUHJvdG9jb2wtPkZyb250
LnJlcV9wcm9kX3B2dDsNCj4gDQo+IC0gICAgUklOR19QVVNIX1JFUVVFU1RTX0FORF9DSEVDS19O
T1RJRlkoJlJpbmctPkZyb250LCBOb3RpZnkpOw0KPiAtICAgIEtlUmVsZWFzZVNwaW5Mb2NrKCZS
aW5nLT5Mb2NrLCBJcnFsKTsNCj4gKyAgICBSSU5HX1BVU0hfUkVRVUVTVFNfQU5EX0NIRUNLX05P
VElGWSgmUHJvdG9jb2wtPkZyb250LCBOb3RpZnkpOw0KPiArICAgIEtlUmVsZWFzZVNwaW5Mb2Nr
KCZQcm90b2NvbC0+TG9jaywgSXJxbCk7DQo+IA0KPiAgICAgIGlmIChOb3RpZnkpIHsNCj4gLSAg
ICAgICAgaWYgKCFSaW5nLT5FbmFibGVkKQ0KPiArICAgICAgICBpZiAoIVByb3RvY29sLT5FbmFi
bGVkKQ0KPiAgICAgICAgICAgICAgcmV0dXJuIFRSVUU7DQo+IA0KPiAgICAgICAgICBYRU5CVVNf
RVZUQ0hOKFNlbmQsDQo+IC0gICAgICAgICAgICAgICAgICAgICAgJlJpbmctPkV2dGNobkludGVy
ZmFjZSwNCj4gLSAgICAgICAgICAgICAgICAgICAgICBSaW5nLT5DaGFubmVsKTsNCj4gKyAgICAg
ICAgICAgICAgICAgICAgICAmUHJvdG9jb2wtPkV2dGNobkludGVyZmFjZSwNCj4gKyAgICAgICAg
ICAgICAgICAgICAgICBQcm90b2NvbC0+Q2hhbm5lbCk7DQo+ICAgICAgfQ0KPiANCj4gICAgICBy
ZXR1cm4gVFJVRTsNCj4gIH0NCj4gDQo+ICBzdGF0aWMgRk9SQ0VJTkxJTkUgQk9PTEVBTg0KPiAt
UmluZ1N1Ym1pdFJlcXVlc3RzKA0KPiAtICAgIElOICBQWEVOVkJEX1JJTkcgICAgUmluZw0KPiAr
UHJvdG9jb2xTdWJtaXRSZXF1ZXN0cygNCj4gKyAgICBJTiAgUFhFTlZCRF9QUk9UT0NPTCAgICBQ
cm90b2NvbA0KPiAgICAgICkNCj4gIHsNCj4gLSAgICBpZiAoIVJpbmctPkVuYWJsZWQpIHsNCj4g
LSAgICAgICAgaWYgKFF1ZXVlQ291bnQoJlJpbmctPlByZXBhcmVkUmVxcykpDQo+ICsgICAgaWYg
KCFQcm90b2NvbC0+RW5hYmxlZCkgew0KPiArICAgICAgICBpZiAoUXVldWVDb3VudCgmUHJvdG9j
b2wtPlByZXBhcmVkUmVxcykpDQo+ICAgICAgICAgICAgICBXYXJuaW5nKCJUYXJnZXRbJWRdIDog
UGF1c2VkLCBub3Qgc3VibWl0dGluZyBuZXcgcmVxdWVzdHMgKCV1KVxuIiwNCj4gLSAgICAgICAg
ICAgICAgICAgICAgRnJvbnRlbmRHZXRUYXJnZXRJZChSaW5nLT5Gcm9udGVuZCksDQo+IC0gICAg
ICAgICAgICAgICAgICAgIFF1ZXVlQ291bnQoJlJpbmctPlByZXBhcmVkUmVxcykpOw0KPiArICAg
ICAgICAgICAgICAgICAgICBGcm9udGVuZEdldFRhcmdldElkKFByb3RvY29sLT5Gcm9udGVuZCks
DQo+ICsgICAgICAgICAgICAgICAgICAgIFF1ZXVlQ291bnQoJlByb3RvY29sLT5QcmVwYXJlZFJl
cXMpKTsNCj4gICAgICAgICAgcmV0dXJuIEZBTFNFOw0KPiAgICAgIH0NCj4gDQo+IEBAIC0xMDEw
LDQ5ICsxMDEwLDQ5IEBAIFJpbmdTdWJtaXRSZXF1ZXN0cygNCj4gICAgICAgICAgUFhFTlZCRF9S
RVFVRVNUIFJlcXVlc3Q7DQo+ICAgICAgICAgIFBMSVNUX0VOVFJZICAgICBMaXN0RW50cnk7DQo+
IA0KPiAtICAgICAgICBMaXN0RW50cnkgPSBRdWV1ZVBvcCgmUmluZy0+UHJlcGFyZWRSZXFzKTsN
Cj4gKyAgICAgICAgTGlzdEVudHJ5ID0gUXVldWVQb3AoJlByb3RvY29sLT5QcmVwYXJlZFJlcXMp
Ow0KPiAgICAgICAgICBpZiAoTGlzdEVudHJ5ID09IE5VTEwpDQo+ICAgICAgICAgICAgICBicmVh
azsNCj4gDQo+ICAgICAgICAgIFJlcXVlc3QgPSBDT05UQUlOSU5HX1JFQ09SRChMaXN0RW50cnks
IFhFTlZCRF9SRVFVRVNULA0KPiBMaXN0RW50cnkpOw0KPiANCj4gLSAgICAgICAgUXVldWVBcHBl
bmQoJlJpbmctPlN1Ym1pdHRlZFJlcXMsICZSZXF1ZXN0LT5MaXN0RW50cnkpOw0KPiArICAgICAg
ICBRdWV1ZUFwcGVuZCgmUHJvdG9jb2wtPlN1Ym1pdHRlZFJlcXMsICZSZXF1ZXN0LT5MaXN0RW50
cnkpOw0KPiAgICAgICAgICBLZU1lbW9yeUJhcnJpZXIoKTsNCj4gDQo+IC0gICAgICAgIGlmIChS
aW5nU3VibWl0KFJpbmcsIFJlcXVlc3QpKQ0KPiArICAgICAgICBpZiAoUHJvdG9jb2xTdWJtaXQo
UHJvdG9jb2wsIFJlcXVlc3QpKQ0KPiAgICAgICAgICAgICAgY29udGludWU7DQo+IA0KPiAtICAg
ICAgICBRdWV1ZVJlbW92ZSgmUmluZy0+U3VibWl0dGVkUmVxcywgJlJlcXVlc3QtPkxpc3RFbnRy
eSk7DQo+IC0gICAgICAgIFF1ZXVlVW5Qb3AoJlJpbmctPlByZXBhcmVkUmVxcywgJlJlcXVlc3Qt
Pkxpc3RFbnRyeSk7DQo+ICsgICAgICAgIFF1ZXVlUmVtb3ZlKCZQcm90b2NvbC0+U3VibWl0dGVk
UmVxcywgJlJlcXVlc3QtPkxpc3RFbnRyeSk7DQo+ICsgICAgICAgIFF1ZXVlVW5Qb3AoJlByb3Rv
Y29sLT5QcmVwYXJlZFJlcXMsICZSZXF1ZXN0LT5MaXN0RW50cnkpOw0KPiAgICAgICAgICBicmVh
azsNCj4gICAgICB9DQo+IA0KPiAtICAgIHJldHVybiBRdWV1ZUNvdW50KCZSaW5nLT5QcmVwYXJl
ZFJlcXMpICE9IDA7DQo+ICsgICAgcmV0dXJuIFF1ZXVlQ291bnQoJlByb3RvY29sLT5QcmVwYXJl
ZFJlcXMpICE9IDA7DQo+ICB9DQo+IA0KPiAgc3RhdGljIEZPUkNFSU5MSU5FIFZPSUQNCj4gLVJp
bmdDb21wbGV0ZVNodXRkb3duKA0KPiAtICAgIElOICBQWEVOVkJEX1JJTkcgICAgUmluZw0KPiAr
UHJvdG9jb2xDb21wbGV0ZVNodXRkb3duKA0KPiArICAgIElOICBQWEVOVkJEX1BST1RPQ09MICAg
IFByb3RvY29sDQo+ICAgICAgKQ0KPiAgew0KPiAgICAgIFBYRU5WQkRfVEFSR0VUICAgICAgVGFy
Z2V0Ow0KPiAgICAgIFBYRU5WQkRfQURBUFRFUiAgICAgQWRhcHRlcjsNCj4gDQo+IC0gICAgaWYg
KFF1ZXVlQ291bnQoJlJpbmctPlNodXRkb3duU3JicykgPT0gMCkNCj4gKyAgICBpZiAoUXVldWVD
b3VudCgmUHJvdG9jb2wtPlNodXRkb3duU3JicykgPT0gMCkNCj4gICAgICAgICAgcmV0dXJuOw0K
PiANCj4gLSAgICBpZiAoUXVldWVDb3VudCgmUmluZy0+UHJlcGFyZWRSZXFzKSB8fA0KPiAtICAg
ICAgICBRdWV1ZUNvdW50KCZSaW5nLT5TdWJtaXR0ZWRSZXFzKSkNCj4gKyAgICBpZiAoUXVldWVD
b3VudCgmUHJvdG9jb2wtPlByZXBhcmVkUmVxcykgfHwNCj4gKyAgICAgICAgUXVldWVDb3VudCgm
UHJvdG9jb2wtPlN1Ym1pdHRlZFJlcXMpKQ0KPiAgICAgICAgICByZXR1cm47DQo+IA0KPiAtICAg
IFRhcmdldCA9IEZyb250ZW5kR2V0VGFyZ2V0KFJpbmctPkZyb250ZW5kKTsNCj4gKyAgICBUYXJn
ZXQgPSBGcm9udGVuZEdldFRhcmdldChQcm90b2NvbC0+RnJvbnRlbmQpOw0KPiAgICAgIEFkYXB0
ZXIgPSBUYXJnZXRHZXRBZGFwdGVyKFRhcmdldCk7DQo+ICAgICAgZm9yICg7Oykgew0KPiAgICAg
ICAgICBQWEVOVkJEX1NSQkVYVCAgICAgIFNyYkV4dDsNCj4gICAgICAgICAgUFNDU0lfUkVRVUVT
VF9CTE9DSyBTcmI7DQo+ICAgICAgICAgIFBMSVNUX0VOVFJZICAgICAgICAgTGlzdEVudHJ5Ow0K
PiANCj4gLSAgICAgICAgTGlzdEVudHJ5ID0gUXVldWVQb3AoJlJpbmctPlNodXRkb3duU3Jicyk7
DQo+ICsgICAgICAgIExpc3RFbnRyeSA9IFF1ZXVlUG9wKCZQcm90b2NvbC0+U2h1dGRvd25TcmJz
KTsNCj4gICAgICAgICAgaWYgKExpc3RFbnRyeSA9PSBOVUxMKQ0KPiAgICAgICAgICAgICAgYnJl
YWs7DQo+ICAgICAgICAgIFNyYkV4dCA9IENPTlRBSU5JTkdfUkVDT1JEKExpc3RFbnRyeSwgWEVO
VkJEX1NSQkVYVCwgTGlzdEVudHJ5KTsNCj4gQEAgLTEwODEsOCArMTA4MSw4IEBAIF9fQmxraWZP
cGVyYXRpb25OYW1lKA0KPiAgfQ0KPiANCj4gIHN0YXRpYyBWT0lEDQo+IC1SaW5nQ29tcGxldGVS
ZXNwb25zZSgNCj4gLSAgICBJTiAgUFhFTlZCRF9SSU5HICAgIFJpbmcsDQo+ICtQcm90b2NvbENv
bXBsZXRlUmVzcG9uc2UoDQo+ICsgICAgSU4gIFBYRU5WQkRfUFJPVE9DT0wgICAgUHJvdG9jb2ws
DQo+ICAgICAgSU4gIFVMT05HNjQgICAgICAgICBJZCwNCj4gICAgICBJTiAgU0hPUlQgICAgICAg
ICAgIFN0YXR1cw0KPiAgICAgICkNCj4gQEAgLTEwOTEsNyArMTA5MSw3IEBAIFJpbmdDb21wbGV0
ZVJlc3BvbnNlKA0KPiAgICAgIFBTQ1NJX1JFUVVFU1RfQkxPQ0sgU3JiOw0KPiAgICAgIFBYRU5W
QkRfU1JCRVhUICAgICAgU3JiRXh0Ow0KPiANCj4gLSAgICBSZXF1ZXN0ID0gUmluZ0ZpbmRSZXF1
ZXN0KFJpbmcsIElkKTsNCj4gKyAgICBSZXF1ZXN0ID0gUHJvdG9jb2xGaW5kUmVxdWVzdChQcm90
b2NvbCwgSWQpOw0KPiAgICAgIGlmIChSZXF1ZXN0ID09IE5VTEwpDQo+ICAgICAgICAgIHJldHVy
bjsNCj4gDQo+IEBAIC0xMTAwLDEyICsxMTAwLDEyIEBAIFJpbmdDb21wbGV0ZVJlc3BvbnNlKA0K
PiANCj4gICAgICBzd2l0Y2ggKFN0YXR1cykgew0KPiAgICAgIGNhc2UgQkxLSUZfUlNQX09LQVk6
DQo+IC0gICAgICAgIFJpbmdSZXF1ZXN0Q29weU91dHB1dChSZXF1ZXN0KTsNCj4gKyAgICAgICAg
UHJvdG9jb2xSZXF1ZXN0Q29weU91dHB1dChSZXF1ZXN0KTsNCj4gICAgICAgICAgYnJlYWs7DQo+
IA0KPiAgICAgIGNhc2UgQkxLSUZfUlNQX0VPUE5PVFNVUFA6DQo+ICAgICAgICAgIC8vIFJlbW92
ZSBhcHByb3ByaWF0ZSBmZWF0dXJlIHN1cHBvcnQNCj4gLSAgICAgICAgRnJvbnRlbmRSZW1vdmVG
ZWF0dXJlKFJpbmctPkZyb250ZW5kLCBSZXF1ZXN0LT5PcGVyYXRpb24pOw0KPiArICAgICAgICBG
cm9udGVuZFJlbW92ZUZlYXR1cmUoUHJvdG9jb2wtPkZyb250ZW5kLCBSZXF1ZXN0LT5PcGVyYXRp
b24pOw0KPiAgICAgICAgICAvLyBTdWNjZWVkIHRoaXMgU1JCLCBzdWJzaXF1ZW50IFNSQnMgd2ls
bCBiZSBzdWNjZWVkZWQgaW5zdGVhZCBvZiBiZWluZw0KPiBwYXNzZWQgdG8gdGhlIGJhY2tlbmQu
DQo+ICAgICAgICAgIFNyYi0+U3JiU3RhdHVzID0gU1JCX1NUQVRVU19TVUNDRVNTOw0KPiAgICAg
ICAgICBicmVhazsNCj4gQEAgLTExMTMsMTggKzExMTMsMTggQEAgUmluZ0NvbXBsZXRlUmVzcG9u
c2UoDQo+ICAgICAgY2FzZSBCTEtJRl9SU1BfRVJST1I6DQo+ICAgICAgZGVmYXVsdDoNCj4gICAg
ICAgICAgV2FybmluZygiVGFyZ2V0WyVkXSA6ICVzIEJMS0lGX1JTUF9FUlJPUiAoVGFnICVsbHgp
XG4iLA0KPiAtICAgICAgICAgICAgICAgIEZyb250ZW5kR2V0VGFyZ2V0SWQoUmluZy0+RnJvbnRl
bmQpLA0KPiArICAgICAgICAgICAgICAgIEZyb250ZW5kR2V0VGFyZ2V0SWQoUHJvdG9jb2wtPkZy
b250ZW5kKSwNCj4gICAgICAgICAgICAgICAgICBfX0Jsa2lmT3BlcmF0aW9uTmFtZShSZXF1ZXN0
LT5PcGVyYXRpb24pLA0KPiAgICAgICAgICAgICAgICAgIElkKTsNCj4gICAgICAgICAgU3JiLT5T
cmJTdGF0dXMgPSBTUkJfU1RBVFVTX0VSUk9SOw0KPiAgICAgICAgICBicmVhazsNCj4gICAgICB9
DQo+IA0KPiAtICAgIFJpbmdQdXRSZXF1ZXN0KFJpbmcsIFJlcXVlc3QpOw0KPiArICAgIFByb3Rv
Y29sUHV0UmVxdWVzdChQcm90b2NvbCwgUmVxdWVzdCk7DQo+IA0KPiAgICAgIC8vIGNvbXBsZXRl
IHNyYg0KPiAgICAgIGlmIChJbnRlcmxvY2tlZERlY3JlbWVudCgmU3JiRXh0LT5SZXF1ZXN0Q291
bnQpID09IDApIHsNCj4gLSAgICAgICAgUFhFTlZCRF9UQVJHRVQgIFRhcmdldCA9IEZyb250ZW5k
R2V0VGFyZ2V0KFJpbmctPkZyb250ZW5kKTsNCj4gKyAgICAgICAgUFhFTlZCRF9UQVJHRVQgIFRh
cmdldCA9IEZyb250ZW5kR2V0VGFyZ2V0KFByb3RvY29sLT5Gcm9udGVuZCk7DQo+ICAgICAgICAg
IFBYRU5WQkRfQURBUFRFUiBBZGFwdGVyID0gVGFyZ2V0R2V0QWRhcHRlcihUYXJnZXQpOw0KPiAN
Cj4gICAgICAgICAgaWYgKFNyYi0+U3JiU3RhdHVzID09IFNSQl9TVEFUVVNfUEVORElORykgew0K
PiBAQCAtMTE0MiwxOCArMTE0MiwxOCBAQCBSaW5nQ29tcGxldGVSZXNwb25zZSgNCj4gIH0NCj4g
DQo+ICBzdGF0aWMgQk9PTEVBTg0KPiAtUmluZ1BvbGwoDQo+IC0gICAgSU4gIFBYRU5WQkRfUklO
RyAgICBSaW5nDQo+ICtQcm90b2NvbFBvbGwoDQo+ICsgICAgSU4gIFBYRU5WQkRfUFJPVE9DT0wg
ICAgUHJvdG9jb2wNCj4gICAgICApDQo+ICB7DQo+ICAgICAgQk9PTEVBTiAgICAgICAgICAgICBS
ZXRyeSA9IEZBTFNFOw0KPiANCj4gICAgICBBU1NFUlQzVShLZUdldEN1cnJlbnRJcnFsKCksID09
LCBESVNQQVRDSF9MRVZFTCk7DQo+IC0gICAgS2VBY3F1aXJlU3BpbkxvY2tBdERwY0xldmVsKCZS
aW5nLT5Mb2NrKTsNCj4gKyAgICBLZUFjcXVpcmVTcGluTG9ja0F0RHBjTGV2ZWwoJlByb3RvY29s
LT5Mb2NrKTsNCj4gDQo+ICAgICAgLy8gR3VhcmQgYWdhaW5zdCB0aGlzIGxvY2tlZCByZWdpb24g
YmVpbmcgY2FsbGVkIGFmdGVyIHRoZQ0KPiAgICAgIC8vIGxvY2sgb24gRnJvbnRlbmRTZXRTdGF0
ZQ0KPiAtICAgIGlmIChSaW5nLT5FbmFibGVkID09IEZBTFNFKQ0KPiArICAgIGlmIChQcm90b2Nv
bC0+RW5hYmxlZCA9PSBGQUxTRSkNCj4gICAgICAgICAgZ290byBkb25lOw0KPiANCj4gICAgICBm
b3IgKDs7KSB7DQo+IEBAIC0xMTYyLDggKzExNjIsOCBAQCBSaW5nUG9sbCgNCj4gDQo+ICAgICAg
ICAgIEtlTWVtb3J5QmFycmllcigpOw0KPiANCj4gLSAgICAgICAgcnNwX3Byb2QgPSBSaW5nLT5T
aGFyZWQtPnJzcF9wcm9kOw0KPiAtICAgICAgICByc3BfY29ucyA9IFJpbmctPkZyb250LnJzcF9j
b25zOw0KPiArICAgICAgICByc3BfcHJvZCA9IFByb3RvY29sLT5TaGFyZWQtPnJzcF9wcm9kOw0K
PiArICAgICAgICByc3BfY29ucyA9IFByb3RvY29sLT5Gcm9udC5yc3BfY29uczsNCj4gDQo+ICAg
ICAgICAgIEtlTWVtb3J5QmFycmllcigpOw0KPiANCj4gQEAgLTExNzMsOTUgKzExNzMsOTUgQEAg
UmluZ1BvbGwoDQo+ICAgICAgICAgIHdoaWxlIChyc3BfY29ucyAhPSByc3BfcHJvZCAmJiAhUmV0
cnkpIHsNCj4gICAgICAgICAgICAgIGJsa2lmX3Jlc3BvbnNlX3QqICAgcnNwOw0KPiANCj4gLSAg
ICAgICAgICAgIHJzcCA9IFJJTkdfR0VUX1JFU1BPTlNFKCZSaW5nLT5Gcm9udCwgcnNwX2NvbnMp
Ow0KPiArICAgICAgICAgICAgcnNwID0gUklOR19HRVRfUkVTUE9OU0UoJlByb3RvY29sLT5Gcm9u
dCwgcnNwX2NvbnMpOw0KPiAgICAgICAgICAgICAgKytyc3BfY29uczsNCj4gLSAgICAgICAgICAg
ICsrUmluZy0+UmVjZWl2ZWQ7DQo+ICsgICAgICAgICAgICArK1Byb3RvY29sLT5SZWNlaXZlZDsN
Cj4gDQo+IC0gICAgICAgICAgICBSaW5nQ29tcGxldGVSZXNwb25zZShSaW5nLCByc3AtPmlkLCBy
c3AtPnN0YXR1cyk7DQo+ICsgICAgICAgICAgICBQcm90b2NvbENvbXBsZXRlUmVzcG9uc2UoUHJv
dG9jb2wsIHJzcC0+aWQsIHJzcC0+c3RhdHVzKTsNCj4gICAgICAgICAgICAgIFJ0bFplcm9NZW1v
cnkocnNwLCBzaXplb2YodW5pb24gYmxraWZfc3JpbmdfZW50cnkpKTsNCj4gDQo+IC0gICAgICAg
ICAgICBpZiAocnNwX2NvbnMgLSBSaW5nLT5Gcm9udC5yc3BfY29ucyA+IFJJTkdfU0laRSgmUmlu
Zy0+RnJvbnQpIC8gNCkNCj4gKyAgICAgICAgICAgIGlmIChyc3BfY29ucyAtIFByb3RvY29sLT5G
cm9udC5yc3BfY29ucyA+IFJJTkdfU0laRSgmUHJvdG9jb2wtDQo+ID5Gcm9udCkgLyA0KQ0KPiAg
ICAgICAgICAgICAgICAgIFJldHJ5ID0gVFJVRTsNCj4gICAgICAgICAgfQ0KPiANCj4gICAgICAg
ICAgS2VNZW1vcnlCYXJyaWVyKCk7DQo+IA0KPiAtICAgICAgICBSaW5nLT5Gcm9udC5yc3BfY29u
cyA9IHJzcF9jb25zOw0KPiAtICAgICAgICBSaW5nLT5TaGFyZWQtPnJzcF9ldmVudCA9IHJzcF9j
b25zICsgMTsNCj4gKyAgICAgICAgUHJvdG9jb2wtPkZyb250LnJzcF9jb25zID0gcnNwX2NvbnM7
DQo+ICsgICAgICAgIFByb3RvY29sLT5TaGFyZWQtPnJzcF9ldmVudCA9IHJzcF9jb25zICsgMTsN
Cj4gICAgICB9DQo+IA0KPiAgZG9uZToNCj4gLSAgICBLZVJlbGVhc2VTcGluTG9ja0Zyb21EcGNM
ZXZlbCgmUmluZy0+TG9jayk7DQo+ICsgICAgS2VSZWxlYXNlU3BpbkxvY2tGcm9tRHBjTGV2ZWwo
JlByb3RvY29sLT5Mb2NrKTsNCj4gDQo+ICAgICAgcmV0dXJuIFJldHJ5Ow0KPiAgfQ0KPiANCj4g
IF9fZHJ2X3JlcXVpcmVzSVJRTChESVNQQVRDSF9MRVZFTCkNCj4gIHN0YXRpYyBCT09MRUFODQo+
IC1SaW5nTm90aWZ5UmVzcG9uc2VzKA0KPiAtICAgIElOICBQWEVOVkJEX1JJTkcgICAgUmluZw0K
PiArUHJvdG9jb2xOb3RpZnlSZXNwb25zZXMoDQo+ICsgICAgSU4gIFBYRU5WQkRfUFJPVE9DT0wg
ICAgUHJvdG9jb2wNCj4gICAgICApDQo+ICB7DQo+ICAgICAgQk9PTEVBTiAgICAgICAgICAgICBS
ZXRyeSA9IEZBTFNFOw0KPiANCj4gLSAgICBpZiAoIVJpbmctPkVuYWJsZWQpDQo+ICsgICAgaWYg
KCFQcm90b2NvbC0+RW5hYmxlZCkNCj4gICAgICAgICAgcmV0dXJuIEZBTFNFOw0KPiANCj4gLSAg
ICBSZXRyeSB8PSBSaW5nUG9sbChSaW5nKTsNCj4gLSAgICBSZXRyeSB8PSBSaW5nU3VibWl0UmVx
dWVzdHMoUmluZyk7DQo+ICsgICAgUmV0cnkgfD0gUHJvdG9jb2xQb2xsKFByb3RvY29sKTsNCj4g
KyAgICBSZXRyeSB8PSBQcm90b2NvbFN1Ym1pdFJlcXVlc3RzKFByb3RvY29sKTsNCj4gDQo+IC0g
ICAgUmluZ0NvbXBsZXRlU2h1dGRvd24oUmluZyk7DQo+ICsgICAgUHJvdG9jb2xDb21wbGV0ZVNo
dXRkb3duKFByb3RvY29sKTsNCj4gICAgICByZXR1cm4gUmV0cnk7DQo+ICB9DQo+IA0KPiAtS1NF
UlZJQ0VfUk9VVElORSAgICBSaW5nSW50ZXJydXB0Ow0KPiArS1NFUlZJQ0VfUk9VVElORSAgICBQ
cm90b2NvbEludGVycnVwdDsNCj4gDQo+ICBCT09MRUFODQo+IC1SaW5nSW50ZXJydXB0KA0KPiAr
UHJvdG9jb2xJbnRlcnJ1cHQoDQo+ICAgICAgSU4gIFBLSU5URVJSVVBUIEludGVycnVwdCwNCj4g
ICAgICBJTiAgUFZPSUQgICAgICAgQ29udGV4dA0KPiAgICAgICkNCj4gIHsNCj4gLSAgICBQWEVO
VkJEX1JJTkcgICAgUmluZyA9IENvbnRleHQ7DQo+ICsgICAgUFhFTlZCRF9QUk9UT0NPTCAgICBQ
cm90b2NvbCA9IENvbnRleHQ7DQo+IA0KPiAgICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoSW50
ZXJydXB0KTsNCj4gDQo+IC0gICAgQVNTRVJUKFJpbmcgIT0gTlVMTCk7DQo+ICsgICAgQVNTRVJU
KFByb3RvY29sICE9IE5VTEwpOw0KPiANCj4gLSAgICArK1JpbmctPkV2ZW50czsNCj4gLSAgICBp
ZiAoIVJpbmctPkNvbm5lY3RlZCkNCj4gKyAgICArK1Byb3RvY29sLT5FdmVudHM7DQo+ICsgICAg
aWYgKCFQcm90b2NvbC0+Q29ubmVjdGVkKQ0KPiAgICAgICAgICByZXR1cm4gVFJVRTsNCj4gDQo+
IC0gICAgaWYgKEtlSW5zZXJ0UXVldWVEcGMoJlJpbmctPkRwYywgTlVMTCwgTlVMTCkpDQo+IC0g
ICAgICAgICsrUmluZy0+RHBjczsNCj4gKyAgICBpZiAoS2VJbnNlcnRRdWV1ZURwYygmUHJvdG9j
b2wtPkRwYywgTlVMTCwgTlVMTCkpDQo+ICsgICAgICAgICsrUHJvdG9jb2wtPkRwY3M7DQo+IA0K
PiAgICAgIHJldHVybiBUUlVFOw0KPiAgfQ0KPiANCj4gLUtERUZFUlJFRF9ST1VUSU5FIFJpbmdE
cGM7DQo+ICtLREVGRVJSRURfUk9VVElORSBQcm90b2NvbERwYzsNCj4gDQo+ICBWT0lEDQo+IC1S
aW5nRHBjKA0KPiArUHJvdG9jb2xEcGMoDQo+ICAgICAgX19pbiAgUEtEUEMgICAgIERwYywNCj4g
ICAgICBfX2luX29wdCBQVk9JRCAgQ29udGV4dCwNCj4gICAgICBfX2luX29wdCBQVk9JRCAgQXJn
MSwNCj4gICAgICBfX2luX29wdCBQVk9JRCAgQXJnMg0KPiAgICAgICkNCj4gIHsNCj4gLSAgICBQ
WEVOVkJEX1JJTkcgICAgUmluZyA9IENvbnRleHQ7DQo+ICsgICAgUFhFTlZCRF9QUk9UT0NPTCAg
ICBQcm90b2NvbCA9IENvbnRleHQ7DQo+IA0KPiAgICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIo
RHBjKTsNCj4gICAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKEFyZzEpOw0KPiAgICAgIFVOUkVG
RVJFTkNFRF9QQVJBTUVURVIoQXJnMik7DQo+IA0KPiAtICAgIEFTU0VSVChSaW5nICE9IE5VTEwp
Ow0KPiArICAgIEFTU0VSVChQcm90b2NvbCAhPSBOVUxMKTsNCj4gDQo+ICAgICAgZm9yICg7Oykg
ew0KPiAgICAgICAgICBLSVJRTCAgICAgICBJcnFsOw0KPiAgICAgICAgICBCT09MRUFOICAgICBS
ZXRyeTsNCj4gDQo+ICAgICAgICAgIEtlUmFpc2VJcnFsKERJU1BBVENIX0xFVkVMLCAmSXJxbCk7
DQo+IC0gICAgICAgIFJldHJ5ID0gUmluZ05vdGlmeVJlc3BvbnNlcyhSaW5nKTsNCj4gKyAgICAg
ICAgUmV0cnkgPSBQcm90b2NvbE5vdGlmeVJlc3BvbnNlcyhQcm90b2NvbCk7DQo+ICAgICAgICAg
IEtlTG93ZXJJcnFsKElycWwpOw0KPiANCj4gICAgICAgICAgaWYgKCFSZXRyeSkNCj4gQEAgLTEy
NjksMTM2ICsxMjY5LDEzNiBAQCBSaW5nRHBjKA0KPiAgICAgIH0NCj4gDQo+ICAgICAgWEVOQlVT
X0VWVENITihVbm1hc2ssDQo+IC0gICAgICAgICAgICAgICAgICAmUmluZy0+RXZ0Y2huSW50ZXJm
YWNlLA0KPiAtICAgICAgICAgICAgICAgICAgUmluZy0+Q2hhbm5lbCwNCj4gKyAgICAgICAgICAg
ICAgICAgICZQcm90b2NvbC0+RXZ0Y2huSW50ZXJmYWNlLA0KPiArICAgICAgICAgICAgICAgICAg
UHJvdG9jb2wtPkNoYW5uZWwsDQo+ICAgICAgICAgICAgICAgICAgICBGQUxTRSk7DQo+ICB9DQo+
IA0KPiAgc3RhdGljIERFQ0xTUEVDX05PSU5MSU5FIFZPSUQNCj4gLVJpbmdEZWJ1Z0NhbGxiYWNr
KA0KPiArUHJvdG9jb2xEZWJ1Z0NhbGxiYWNrKA0KPiAgICAgIElOICBQVk9JRCAgICAgICBBcmd1
bWVudCwNCj4gICAgICBJTiAgQk9PTEVBTiAgICAgQ3Jhc2hpbmcNCj4gICAgICApDQo+ICB7DQo+
IC0gICAgUFhFTlZCRF9SSU5HICAgIFJpbmcgPSBBcmd1bWVudDsNCj4gLSAgICBQWEVOVkJEX0dS
QU5URVIgR3JhbnRlciA9IEZyb250ZW5kR2V0R3JhbnRlcihSaW5nLT5Gcm9udGVuZCk7DQo+ICsg
ICAgUFhFTlZCRF9QUk9UT0NPTCAgICBQcm90b2NvbCA9IEFyZ3VtZW50Ow0KPiArICAgIFBYRU5W
QkRfR1JBTlRFUiBHcmFudGVyID0gRnJvbnRlbmRHZXRHcmFudGVyKFByb3RvY29sLQ0KPiA+RnJv
bnRlbmQpOw0KPiAgICAgIFVMT05HICAgICAgICAgICBJbmRleDsNCj4gDQo+ICAgICAgVU5SRUZF
UkVOQ0VEX1BBUkFNRVRFUihDcmFzaGluZyk7DQo+IA0KPiAgICAgIFhFTkJVU19ERUJVRyhQcmlu
dGYsDQo+IC0gICAgICAgICAgICAgICAgICZSaW5nLT5EZWJ1Z0ludGVyZmFjZSwNCj4gKyAgICAg
ICAgICAgICAgICAgJlByb3RvY29sLT5EZWJ1Z0ludGVyZmFjZSwNCj4gICAgICAgICAgICAgICAg
ICAgIlN1Ym1pdHRlZDogJXUgUmVjZWl2ZWQ6ICV1XG4iLA0KPiAtICAgICAgICAgICAgICAgICBS
aW5nLT5TdWJtaXR0ZWQsDQo+IC0gICAgICAgICAgICAgICAgIFJpbmctPlJlY2VpdmVkKTsNCj4g
KyAgICAgICAgICAgICAgICAgUHJvdG9jb2wtPlN1Ym1pdHRlZCwNCj4gKyAgICAgICAgICAgICAg
ICAgUHJvdG9jb2wtPlJlY2VpdmVkKTsNCj4gDQo+ICAgICAgWEVOQlVTX0RFQlVHKFByaW50ZiwN
Cj4gLSAgICAgICAgICAgICAgICAgJlJpbmctPkRlYnVnSW50ZXJmYWNlLA0KPiArICAgICAgICAg
ICAgICAgICAmUHJvdG9jb2wtPkRlYnVnSW50ZXJmYWNlLA0KPiAgICAgICAgICAgICAgICAgICAi
RXZlbnRzOiAldSBEcGNzOiAldVxuIiwNCj4gLSAgICAgICAgICAgICAgICAgUmluZy0+RXZlbnRz
LA0KPiAtICAgICAgICAgICAgICAgICBSaW5nLT5EcGNzKTsNCj4gKyAgICAgICAgICAgICAgICAg
UHJvdG9jb2wtPkV2ZW50cywNCj4gKyAgICAgICAgICAgICAgICAgUHJvdG9jb2wtPkRwY3MpOw0K
PiANCj4gICAgICBYRU5CVVNfREVCVUcoUHJpbnRmLA0KPiAtICAgICAgICAgICAgICAgICAmUmlu
Zy0+RGVidWdJbnRlcmZhY2UsDQo+ICsgICAgICAgICAgICAgICAgICZQcm90b2NvbC0+RGVidWdJ
bnRlcmZhY2UsDQo+ICAgICAgICAgICAgICAgICAgICJTaGFyZWQgOiAweCVwXG4iLA0KPiAtICAg
ICAgICAgICAgICAgICBSaW5nLT5TaGFyZWQpOw0KPiArICAgICAgICAgICAgICAgICBQcm90b2Nv
bC0+U2hhcmVkKTsNCj4gDQo+IC0gICAgaWYgKFJpbmctPlNoYXJlZCkgew0KPiArICAgIGlmIChQ
cm90b2NvbC0+U2hhcmVkKSB7DQo+ICAgICAgICAgIFhFTkJVU19ERUJVRyhQcmludGYsDQo+IC0g
ICAgICAgICAgICAgICAgICAgICAmUmluZy0+RGVidWdJbnRlcmZhY2UsDQo+ICsgICAgICAgICAg
ICAgICAgICAgICAmUHJvdG9jb2wtPkRlYnVnSW50ZXJmYWNlLA0KPiAgICAgICAgICAgICAgICAg
ICAgICAgIlNoYXJlZDogJWQgLyAlZCAtICVkIC8gJWRcbiIsDQo+IC0gICAgICAgICAgICAgICAg
ICAgICBSaW5nLT5TaGFyZWQtPnJlcV9wcm9kLA0KPiAtICAgICAgICAgICAgICAgICAgICAgUmlu
Zy0+U2hhcmVkLT5yZXFfZXZlbnQsDQo+IC0gICAgICAgICAgICAgICAgICAgICBSaW5nLT5TaGFy
ZWQtPnJzcF9wcm9kLA0KPiAtICAgICAgICAgICAgICAgICAgICAgUmluZy0+U2hhcmVkLT5yc3Bf
ZXZlbnQpOw0KPiArICAgICAgICAgICAgICAgICAgICAgUHJvdG9jb2wtPlNoYXJlZC0+cmVxX3By
b2QsDQo+ICsgICAgICAgICAgICAgICAgICAgICBQcm90b2NvbC0+U2hhcmVkLT5yZXFfZXZlbnQs
DQo+ICsgICAgICAgICAgICAgICAgICAgICBQcm90b2NvbC0+U2hhcmVkLT5yc3BfcHJvZCwNCj4g
KyAgICAgICAgICAgICAgICAgICAgIFByb3RvY29sLT5TaGFyZWQtPnJzcF9ldmVudCk7DQo+ICAg
ICAgfQ0KPiANCj4gICAgICBYRU5CVVNfREVCVUcoUHJpbnRmLA0KPiAtICAgICAgICAgICAgICAg
ICAmUmluZy0+RGVidWdJbnRlcmZhY2UsDQo+ICsgICAgICAgICAgICAgICAgICZQcm90b2NvbC0+
RGVidWdJbnRlcmZhY2UsDQo+ICAgICAgICAgICAgICAgICAgICJGcm9udDogJWQgLyAlZCAoJWQp
XG4iLA0KPiAtICAgICAgICAgICAgICAgICBSaW5nLT5Gcm9udC5yZXFfcHJvZF9wdnQsDQo+IC0g
ICAgICAgICAgICAgICAgIFJpbmctPkZyb250LnJzcF9jb25zLA0KPiAtICAgICAgICAgICAgICAg
ICBSaW5nLT5Gcm9udC5ucl9lbnRzKTsNCj4gKyAgICAgICAgICAgICAgICAgUHJvdG9jb2wtPkZy
b250LnJlcV9wcm9kX3B2dCwNCj4gKyAgICAgICAgICAgICAgICAgUHJvdG9jb2wtPkZyb250LnJz
cF9jb25zLA0KPiArICAgICAgICAgICAgICAgICBQcm90b2NvbC0+RnJvbnQubnJfZW50cyk7DQo+
IA0KPiAgICAgIFhFTkJVU19ERUJVRyhQcmludGYsDQo+IC0gICAgICAgICAgICAgICAgICZSaW5n
LT5EZWJ1Z0ludGVyZmFjZSwNCj4gKyAgICAgICAgICAgICAgICAgJlByb3RvY29sLT5EZWJ1Z0lu
dGVyZmFjZSwNCj4gICAgICAgICAgICAgICAgICAgIk9yZGVyOiAlZFxuIiwNCj4gLSAgICAgICAg
ICAgICAgICAgUmluZy0+T3JkZXIpOw0KPiArICAgICAgICAgICAgICAgICBQcm90b2NvbC0+T3Jk
ZXIpOw0KPiANCj4gLSAgICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCAoMXVsIDw8IFJpbmctPk9y
ZGVyKTsgKytJbmRleCkgew0KPiArICAgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8ICgxdWwgPDwg
UHJvdG9jb2wtPk9yZGVyKTsgKytJbmRleCkgew0KPiAgICAgICAgICBYRU5CVVNfREVCVUcoUHJp
bnRmLA0KPiAtICAgICAgICAgICAgICAgICAgICAgJlJpbmctPkRlYnVnSW50ZXJmYWNlLA0KPiAr
ICAgICAgICAgICAgICAgICAgICAgJlByb3RvY29sLT5EZWJ1Z0ludGVyZmFjZSwNCj4gICAgICAg
ICAgICAgICAgICAgICAgICJHcmFudHNbJS0yZF06IDB4JXAgKCV1KVxuIiwNCj4gICAgICAgICAg
ICAgICAgICAgICAgIEluZGV4LA0KPiAtICAgICAgICAgICAgICAgICAgICAgUmluZy0+R3JhbnRz
W0luZGV4XSwNCj4gLSAgICAgICAgICAgICAgICAgICAgIEdyYW50ZXJSZWZlcmVuY2UoR3JhbnRl
ciwgUmluZy0+R3JhbnRzW0luZGV4XSkpOw0KPiArICAgICAgICAgICAgICAgICAgICAgUHJvdG9j
b2wtPkdyYW50c1tJbmRleF0sDQo+ICsgICAgICAgICAgICAgICAgICAgICBHcmFudGVyUmVmZXJl
bmNlKEdyYW50ZXIsIFByb3RvY29sLT5HcmFudHNbSW5kZXhdKSk7DQo+ICAgICAgfQ0KPiANCj4g
LSAgICBpZiAoUmluZy0+Q2hhbm5lbCkgew0KPiArICAgIGlmIChQcm90b2NvbC0+Q2hhbm5lbCkg
ew0KPiAgICAgICAgICBVTE9ORyAgICAgICBQb3J0ID0gWEVOQlVTX0VWVENITihHZXRQb3J0LA0K
PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUmluZy0+RXZ0Y2hu
SW50ZXJmYWNlLA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBS
aW5nLT5DaGFubmVsKTsNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJlByb3RvY29sLT5FdnRjaG5JbnRlcmZhY2UsDQo+ICsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFByb3RvY29sLT5DaGFubmVsKTsNCj4gDQo+ICAgICAgICAgIFhF
TkJVU19ERUJVRyhQcmludGYsDQo+IC0gICAgICAgICAgICAgICAgICAgICAmUmluZy0+RGVidWdJ
bnRlcmZhY2UsDQo+ICsgICAgICAgICAgICAgICAgICAgICAmUHJvdG9jb2wtPkRlYnVnSW50ZXJm
YWNlLA0KPiAgICAgICAgICAgICAgICAgICAgICAgIkNoYW5uZWwgOiAlcCAoJWQpXG4iLA0KPiAt
ICAgICAgICAgICAgICAgICAgICAgUmluZy0+Q2hhbm5lbCwNCj4gKyAgICAgICAgICAgICAgICAg
ICAgIFByb3RvY29sLT5DaGFubmVsLA0KPiAgICAgICAgICAgICAgICAgICAgICAgUG9ydCk7DQo+
ICAgICAgfQ0KPiANCj4gICAgICBYRU5CVVNfREVCVUcoUHJpbnRmLA0KPiAtICAgICAgICAgICAg
ICAgICAmUmluZy0+RGVidWdJbnRlcmZhY2UsDQo+ICsgICAgICAgICAgICAgICAgICZQcm90b2Nv
bC0+RGVidWdJbnRlcmZhY2UsDQo+ICAgICAgICAgICAgICAgICAgICJCTEtJRl9PUHM6IFJFQUQ9
JXUgV1JJVEU9JXVcbiIsDQo+IC0gICAgICAgICAgICAgICAgIFJpbmctPkJsa09wUmVhZCwNCj4g
LSAgICAgICAgICAgICAgICAgUmluZy0+QmxrT3BXcml0ZSk7DQo+ICsgICAgICAgICAgICAgICAg
IFByb3RvY29sLT5CbGtPcFJlYWQsDQo+ICsgICAgICAgICAgICAgICAgIFByb3RvY29sLT5CbGtP
cFdyaXRlKTsNCj4gICAgICBYRU5CVVNfREVCVUcoUHJpbnRmLA0KPiAtICAgICAgICAgICAgICAg
ICAmUmluZy0+RGVidWdJbnRlcmZhY2UsDQo+ICsgICAgICAgICAgICAgICAgICZQcm90b2NvbC0+
RGVidWdJbnRlcmZhY2UsDQo+ICAgICAgICAgICAgICAgICAgICJCTEtJRl9PUHM6IElORElSRUNU
X1JFQUQ9JXUgSU5ESVJFQ1RfV1JJVEU9JXVcbiIsDQo+IC0gICAgICAgICAgICAgICAgIFJpbmct
PkJsa09wSW5kaXJlY3RSZWFkLA0KPiAtICAgICAgICAgICAgICAgICBSaW5nLT5CbGtPcEluZGly
ZWN0V3JpdGUpOw0KPiArICAgICAgICAgICAgICAgICBQcm90b2NvbC0+QmxrT3BJbmRpcmVjdFJl
YWQsDQo+ICsgICAgICAgICAgICAgICAgIFByb3RvY29sLT5CbGtPcEluZGlyZWN0V3JpdGUpOw0K
PiAgICAgIFhFTkJVU19ERUJVRyhQcmludGYsDQo+IC0gICAgICAgICAgICAgICAgICZSaW5nLT5E
ZWJ1Z0ludGVyZmFjZSwNCj4gKyAgICAgICAgICAgICAgICAgJlByb3RvY29sLT5EZWJ1Z0ludGVy
ZmFjZSwNCj4gICAgICAgICAgICAgICAgICAgIkJMS0lGX09QczogQkFSUklFUj0ldSBESVNDQVJE
PSV1IEZMVVNIPSV1XG4iLA0KPiAtICAgICAgICAgICAgICAgICBSaW5nLT5CbGtPcEJhcnJpZXIs
DQo+IC0gICAgICAgICAgICAgICAgIFJpbmctPkJsa09wRGlzY2FyZCwNCj4gLSAgICAgICAgICAg
ICAgICAgUmluZy0+QmxrT3BGbHVzaCk7DQo+ICsgICAgICAgICAgICAgICAgIFByb3RvY29sLT5C
bGtPcEJhcnJpZXIsDQo+ICsgICAgICAgICAgICAgICAgIFByb3RvY29sLT5CbGtPcERpc2NhcmQs
DQo+ICsgICAgICAgICAgICAgICAgIFByb3RvY29sLT5CbGtPcEZsdXNoKTsNCj4gICAgICBYRU5C
VVNfREVCVUcoUHJpbnRmLA0KPiAtICAgICAgICAgICAgICAgICAmUmluZy0+RGVidWdJbnRlcmZh
Y2UsDQo+ICsgICAgICAgICAgICAgICAgICZQcm90b2NvbC0+RGVidWdJbnRlcmZhY2UsDQo+ICAg
ICAgICAgICAgICAgICAgICJTZWdtZW50cyBHcmFudGVkPSVsbHUgQm91bmNlZD0lbGx1XG4iLA0K
PiAtICAgICAgICAgICAgICAgICBSaW5nLT5TZWdzR3JhbnRlZCwNCj4gLSAgICAgICAgICAgICAg
ICAgUmluZy0+U2Vnc0JvdW5jZWQpOw0KPiArICAgICAgICAgICAgICAgICBQcm90b2NvbC0+U2Vn
c0dyYW50ZWQsDQo+ICsgICAgICAgICAgICAgICAgIFByb3RvY29sLT5TZWdzQm91bmNlZCk7DQo+
IA0KPiAtICAgIFF1ZXVlRGVidWdDYWxsYmFjaygmUmluZy0+UHJlcGFyZWRSZXFzLA0KPiArICAg
IFF1ZXVlRGVidWdDYWxsYmFjaygmUHJvdG9jb2wtPlByZXBhcmVkUmVxcywNCj4gICAgICAgICAg
ICAgICAgICAgICAgICAgIlByZXBhcmVkICIsDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICZS
aW5nLT5EZWJ1Z0ludGVyZmFjZSk7DQo+IC0gICAgUXVldWVEZWJ1Z0NhbGxiYWNrKCZSaW5nLT5T
dWJtaXR0ZWRSZXFzLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAmUHJvdG9jb2wtPkRlYnVn
SW50ZXJmYWNlKTsNCj4gKyAgICBRdWV1ZURlYnVnQ2FsbGJhY2soJlByb3RvY29sLT5TdWJtaXR0
ZWRSZXFzLA0KPiAgICAgICAgICAgICAgICAgICAgICAgICAiU3VibWl0dGVkIiwNCj4gLSAgICAg
ICAgICAgICAgICAgICAgICAgJlJpbmctPkRlYnVnSW50ZXJmYWNlKTsNCj4gLSAgICBRdWV1ZURl
YnVnQ2FsbGJhY2soJlJpbmctPlNodXRkb3duU3JicywNCj4gKyAgICAgICAgICAgICAgICAgICAg
ICAgJlByb3RvY29sLT5EZWJ1Z0ludGVyZmFjZSk7DQo+ICsgICAgUXVldWVEZWJ1Z0NhbGxiYWNr
KCZQcm90b2NvbC0+U2h1dGRvd25TcmJzLA0KPiAgICAgICAgICAgICAgICAgICAgICAgICAiU2h1
dGRvd24gIiwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgJlJpbmctPkRlYnVnSW50ZXJmYWNl
KTsNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgJlByb3RvY29sLT5EZWJ1Z0ludGVyZmFjZSk7
DQo+ICB9DQo+IA0KPiAgc3RhdGljIERFQ0xTUEVDX05PSU5MSU5FIFZPSUQNCj4gLVJpbmdBY3F1
aXJlTG9jaygNCj4gK1Byb3RvY29sQWNxdWlyZUxvY2soDQo+ICAgICAgSU4gIFBWT0lEICAgICAg
IEFyZ3VtZW50DQo+ICAgICAgKQ0KPiAgew0KPiAtICAgIFBYRU5WQkRfUklORyAgICBSaW5nID0g
QXJndW1lbnQ7DQo+IC0gICAgS2VBY3F1aXJlU3BpbkxvY2tBdERwY0xldmVsKCZSaW5nLT5Mb2Nr
KTsNCj4gKyAgICBQWEVOVkJEX1BST1RPQ09MICAgIFByb3RvY29sID0gQXJndW1lbnQ7DQo+ICsg
ICAgS2VBY3F1aXJlU3BpbkxvY2tBdERwY0xldmVsKCZQcm90b2NvbC0+TG9jayk7DQo+ICB9DQo+
IA0KPiAgc3RhdGljIERFQ0xTUEVDX05PSU5MSU5FIFZPSUQNCj4gLVJpbmdSZWxlYXNlTG9jaygN
Cj4gK1Byb3RvY29sUmVsZWFzZUxvY2soDQo+ICAgICAgSU4gIFBWT0lEICAgICAgIEFyZ3VtZW50
DQo+ICAgICAgKQ0KPiAgew0KPiAtICAgIFBYRU5WQkRfUklORyAgICBSaW5nID0gQXJndW1lbnQ7
DQo+IC0gICAgS2VSZWxlYXNlU3BpbkxvY2tGcm9tRHBjTGV2ZWwoJlJpbmctPkxvY2spOw0KPiAr
ICAgIFBYRU5WQkRfUFJPVE9DT0wgICAgUHJvdG9jb2wgPSBBcmd1bWVudDsNCj4gKyAgICBLZVJl
bGVhc2VTcGluTG9ja0Zyb21EcGNMZXZlbCgmUHJvdG9jb2wtPkxvY2spOw0KPiAgfQ0KPiANCj4g
IHN0YXRpYyBERUNMU1BFQ19OT0lOTElORSBOVFNUQVRVUw0KPiAtUmluZ1JlcXVlc3RDdG9yKA0K
PiArUHJvdG9jb2xSZXF1ZXN0Q3RvcigNCj4gICAgICBJTiAgUFZPSUQgICAgICAgQXJndW1lbnQs
DQo+ICAgICAgSU4gIFBWT0lEICAgICAgIE9iamVjdA0KPiAgICAgICkNCj4gQEAgLTE0MTMsNyAr
MTQxMyw3IEBAIFJpbmdSZXF1ZXN0Q3RvcigNCj4gIH0NCj4gDQo+ICBzdGF0aWMgREVDTFNQRUNf
Tk9JTkxJTkUgVk9JRA0KPiAtUmluZ1JlcXVlc3REdG9yKA0KPiArUHJvdG9jb2xSZXF1ZXN0RHRv
cigNCj4gICAgICBJTiAgUFZPSUQgICAgICAgQXJndW1lbnQsDQo+ICAgICAgSU4gIFBWT0lEICAg
ICAgIE9iamVjdA0KPiAgICAgICkNCj4gQEAgLTE0MjMsNyArMTQyMyw3IEBAIFJpbmdSZXF1ZXN0
RHRvcigNCj4gIH0NCj4gDQo+ICBzdGF0aWMgREVDTFNQRUNfTk9JTkxJTkUgTlRTVEFUVVMNCj4g
LVJpbmdTZWdtZW50Q3RvcigNCj4gK1Byb3RvY29sU2VnbWVudEN0b3IoDQo+ICAgICAgSU4gIFBW
T0lEICAgICAgIEFyZ3VtZW50LA0KPiAgICAgIElOICBQVk9JRCAgICAgICBPYmplY3QNCj4gICAg
ICApDQo+IEBAIC0xNDM0LDcgKzE0MzQsNyBAQCBSaW5nU2VnbWVudEN0b3IoDQo+ICB9DQo+IA0K
PiAgc3RhdGljIERFQ0xTUEVDX05PSU5MSU5FIFZPSUQNCj4gLVJpbmdTZWdtZW50RHRvcigNCj4g
K1Byb3RvY29sU2VnbWVudER0b3IoDQo+ICAgICAgSU4gIFBWT0lEICAgICAgIEFyZ3VtZW50LA0K
PiAgICAgIElOICBQVk9JRCAgICAgICBPYmplY3QNCj4gICAgICApDQo+IEBAIC0xNDQ0LDcgKzE0
NDQsNyBAQCBSaW5nU2VnbWVudER0b3IoDQo+ICB9DQo+IA0KPiAgc3RhdGljIERFQ0xTUEVDX05P
SU5MSU5FIE5UU1RBVFVTDQo+IC1SaW5nSW5kaXJlY3RDdG9yKA0KPiArUHJvdG9jb2xJbmRpcmVj
dEN0b3IoDQo+ICAgICAgSU4gIFBWT0lEICAgICAgICAgICBBcmd1bWVudCwNCj4gICAgICBJTiAg
UFZPSUQgICAgICAgICAgIE9iamVjdA0KPiAgICAgICkNCj4gQEAgLTE0NzEsNyArMTQ3MSw3IEBA
IGZhaWwxOg0KPiAgfQ0KPiANCj4gIHN0YXRpYyBERUNMU1BFQ19OT0lOTElORSBWT0lEDQo+IC1S
aW5nSW5kaXJlY3REdG9yKA0KPiArUHJvdG9jb2xJbmRpcmVjdER0b3IoDQo+ICAgICAgSU4gIFBW
T0lEICAgICAgIEFyZ3VtZW50LA0KPiAgICAgIElOICBQVk9JRCAgICAgICBPYmplY3QNCj4gICAg
ICApDQo+IEBAIC0xNDg2LDkgKzE0ODYsOSBAQCBSaW5nSW5kaXJlY3REdG9yKA0KPiAgfQ0KPiAN
Cj4gIE5UU1RBVFVTDQo+IC1SaW5nQ3JlYXRlKA0KPiArUHJvdG9jb2xDcmVhdGUoDQo+ICAgICAg
SU4gIFBYRU5WQkRfRlJPTlRFTkQgICAgRnJvbnRlbmQsDQo+IC0gICAgT1VUIFBYRU5WQkRfUklO
RyogICAgICAgUmluZw0KPiArICAgIE9VVCBQWEVOVkJEX1BST1RPQ09MKiAgICAgICBQcm90b2Nv
bA0KPiAgICAgICkNCj4gIHsNCj4gICAgICBQWEVOVkJEX1RBUkdFVCAgICAgICAgICBUYXJnZXQg
PSBGcm9udGVuZEdldFRhcmdldChGcm9udGVuZCk7DQo+IEBAIC0xNDk2LDI0ICsxNDk2LDI0IEBA
IFJpbmdDcmVhdGUoDQo+ICAgICAgQ0hBUiAgICAgICAgICAgICAgICAgICAgTmFtZVtNQVhfTkFN
RV9MRU5dOw0KPiAgICAgIE5UU1RBVFVTICAgICAgICAgICAgICAgIHN0YXR1czsNCj4gDQo+IC0g
ICAgKlJpbmcgPSBfX1JpbmdBbGxvY2F0ZShzaXplb2YoWEVOVkJEX1JJTkcpKTsNCj4gKyAgICAq
UHJvdG9jb2wgPSBfX1Byb3RvY29sQWxsb2NhdGUoc2l6ZW9mKFhFTlZCRF9QUk9UT0NPTCkpOw0K
PiANCj4gICAgICBzdGF0dXMgPSBTVEFUVVNfTk9fTUVNT1JZOw0KPiAtICAgIGlmICgqUmluZyA9
PSBOVUxMKQ0KPiArICAgIGlmICgqUHJvdG9jb2wgPT0gTlVMTCkNCj4gICAgICAgICAgZ290byBm
YWlsMTsNCj4gDQo+IC0gICAgKCpSaW5nKS0+RnJvbnRlbmQgPSBGcm9udGVuZDsNCj4gLSAgICBL
ZUluaXRpYWxpemVTcGluTG9jaygmKCpSaW5nKS0+TG9jayk7DQo+IC0gICAgS2VJbml0aWFsaXpl
VGhyZWFkZWREcGMoJigqUmluZyktPkRwYywgUmluZ0RwYywgKlJpbmcpOw0KPiAtICAgIEtlU2V0
SW1wb3J0YW5jZURwYygmKCpSaW5nKS0+RHBjLCBNZWRpdW1IaWdoSW1wb3J0YW5jZSk7DQo+ICsg
ICAgKCpQcm90b2NvbCktPkZyb250ZW5kID0gRnJvbnRlbmQ7DQo+ICsgICAgS2VJbml0aWFsaXpl
U3BpbkxvY2soJigqUHJvdG9jb2wpLT5Mb2NrKTsNCj4gKyAgICBLZUluaXRpYWxpemVUaHJlYWRl
ZERwYygmKCpQcm90b2NvbCktPkRwYywgUHJvdG9jb2xEcGMsICpQcm90b2NvbCk7DQo+ICsgICAg
S2VTZXRJbXBvcnRhbmNlRHBjKCYoKlByb3RvY29sKS0+RHBjLCBNZWRpdW1IaWdoSW1wb3J0YW5j
ZSk7DQo+IA0KPiAtICAgIFF1ZXVlSW5pdCgmKCpSaW5nKS0+UHJlcGFyZWRSZXFzKTsNCj4gLSAg
ICBRdWV1ZUluaXQoJigqUmluZyktPlN1Ym1pdHRlZFJlcXMpOw0KPiAtICAgIFF1ZXVlSW5pdCgm
KCpSaW5nKS0+U2h1dGRvd25TcmJzKTsNCj4gKyAgICBRdWV1ZUluaXQoJigqUHJvdG9jb2wpLT5Q
cmVwYXJlZFJlcXMpOw0KPiArICAgIFF1ZXVlSW5pdCgmKCpQcm90b2NvbCktPlN1Ym1pdHRlZFJl
cXMpOw0KPiArICAgIFF1ZXVlSW5pdCgmKCpQcm90b2NvbCktPlNodXRkb3duU3Jicyk7DQo+IA0K
PiAtICAgIEFkYXB0ZXJHZXRDYWNoZUludGVyZmFjZShBZGFwdGVyLCAmKCpSaW5nKS0+Q2FjaGVJ
bnRlcmZhY2UpOw0KPiArICAgIEFkYXB0ZXJHZXRDYWNoZUludGVyZmFjZShBZGFwdGVyLCAmKCpQ
cm90b2NvbCktPkNhY2hlSW50ZXJmYWNlKTsNCj4gDQo+IC0gICAgc3RhdHVzID0gWEVOQlVTX0NB
Q0hFKEFjcXVpcmUsICYoKlJpbmcpLT5DYWNoZUludGVyZmFjZSk7DQo+ICsgICAgc3RhdHVzID0g
WEVOQlVTX0NBQ0hFKEFjcXVpcmUsICYoKlByb3RvY29sKS0+Q2FjaGVJbnRlcmZhY2UpOw0KPiAg
ICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKQ0KPiAgICAgICAgICBnb3RvIGZhaWwyOw0KPiAN
Cj4gQEAgLTE1MjUsMTYgKzE1MjUsMTYgQEAgUmluZ0NyZWF0ZSgNCj4gICAgICAgICAgZ290byBm
YWlsMzsNCj4gDQo+ICAgICAgc3RhdHVzID0gWEVOQlVTX0NBQ0hFKENyZWF0ZSwNCj4gLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgJigqUmluZyktPkNhY2hlSW50ZXJmYWNlLA0KPiArICAgICAg
ICAgICAgICAgICAgICAgICAgICAmKCpQcm90b2NvbCktPkNhY2hlSW50ZXJmYWNlLA0KPiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBOYW1lLA0KPiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzaXplb2YoWEVOVkJEX1JFUVVFU1QpLA0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAz
MiwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgUmluZ1JlcXVlc3RDdG9yLA0KPiAtICAg
ICAgICAgICAgICAgICAgICAgICAgICBSaW5nUmVxdWVzdER0b3IsDQo+IC0gICAgICAgICAgICAg
ICAgICAgICAgICAgIFJpbmdBY3F1aXJlTG9jaywNCj4gLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgUmluZ1JlbGVhc2VMb2NrLA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAqUmluZywN
Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgJigqUmluZyktPlJlcXVlc3RDYWNoZSk7DQo+
ICsgICAgICAgICAgICAgICAgICAgICAgICAgIFByb3RvY29sUmVxdWVzdEN0b3IsDQo+ICsgICAg
ICAgICAgICAgICAgICAgICAgICAgIFByb3RvY29sUmVxdWVzdER0b3IsDQo+ICsgICAgICAgICAg
ICAgICAgICAgICAgICAgIFByb3RvY29sQWNxdWlyZUxvY2ssDQo+ICsgICAgICAgICAgICAgICAg
ICAgICAgICAgIFByb3RvY29sUmVsZWFzZUxvY2ssDQo+ICsgICAgICAgICAgICAgICAgICAgICAg
ICAgICpQcm90b2NvbCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgJigqUHJvdG9jb2wp
LT5SZXF1ZXN0Q2FjaGUpOw0KPiAgICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKQ0KPiAgICAg
ICAgICBnb3RvIGZhaWw0Ow0KPiANCj4gQEAgLTE1NDYsMTYgKzE1NDYsMTYgQEAgUmluZ0NyZWF0
ZSgNCj4gICAgICAgICAgZ290byBmYWlsNTsNCj4gDQo+ICAgICAgc3RhdHVzID0gWEVOQlVTX0NB
Q0hFKENyZWF0ZSwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgJigqUmluZyktPkNhY2hl
SW50ZXJmYWNlLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAmKCpQcm90b2NvbCktPkNh
Y2hlSW50ZXJmYWNlLA0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lLA0KPiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoWEVOVkJEX1NFR01FTlQpLA0KPiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAzMiwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgUmlu
Z1NlZ21lbnRDdG9yLA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICBSaW5nU2VnbWVudER0
b3IsDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgIFJpbmdBY3F1aXJlTG9jaywNCj4gLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgUmluZ1JlbGVhc2VMb2NrLA0KPiAtICAgICAgICAgICAg
ICAgICAgICAgICAgICAqUmluZywNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgJigqUmlu
ZyktPlNlZ21lbnRDYWNoZSk7DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIFByb3RvY29s
U2VnbWVudEN0b3IsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIFByb3RvY29sU2VnbWVu
dER0b3IsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIFByb3RvY29sQWNxdWlyZUxvY2ss
DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIFByb3RvY29sUmVsZWFzZUxvY2ssDQo+ICsg
ICAgICAgICAgICAgICAgICAgICAgICAgICpQcm90b2NvbCwNCj4gKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgJigqUHJvdG9jb2wpLT5TZWdtZW50Q2FjaGUpOw0KPiAgICAgIGlmICghTlRfU1VD
Q0VTUyhzdGF0dXMpKQ0KPiAgICAgICAgICBnb3RvIGZhaWw2Ow0KPiANCj4gQEAgLTE1NjcsMTYg
KzE1NjcsMTYgQEAgUmluZ0NyZWF0ZSgNCj4gICAgICAgICAgZ290byBmYWlsNzsNCj4gDQo+ICAg
ICAgc3RhdHVzID0gWEVOQlVTX0NBQ0hFKENyZWF0ZSwNCj4gLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgJigqUmluZyktPkNhY2hlSW50ZXJmYWNlLA0KPiArICAgICAgICAgICAgICAgICAgICAg
ICAgICAmKCpQcm90b2NvbCktPkNhY2hlSW50ZXJmYWNlLA0KPiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBOYW1lLA0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoWEVOVkJE
X0lORElSRUNUKSwNCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwNCj4gLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgUmluZ0luZGlyZWN0Q3RvciwNCj4gLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgUmluZ0luZGlyZWN0RHRvciwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAg
UmluZ0FjcXVpcmVMb2NrLA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICBSaW5nUmVsZWFz
ZUxvY2ssDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICpSaW5nLA0KPiAtICAgICAgICAg
ICAgICAgICAgICAgICAgICAmKCpSaW5nKS0+SW5kaXJlY3RDYWNoZSk7DQo+ICsgICAgICAgICAg
ICAgICAgICAgICAgICAgIFByb3RvY29sSW5kaXJlY3RDdG9yLA0KPiArICAgICAgICAgICAgICAg
ICAgICAgICAgICBQcm90b2NvbEluZGlyZWN0RHRvciwNCj4gKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgUHJvdG9jb2xBY3F1aXJlTG9jaywNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg
UHJvdG9jb2xSZWxlYXNlTG9jaywNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgKlByb3Rv
Y29sLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAmKCpQcm90b2NvbCktPkluZGlyZWN0
Q2FjaGUpOw0KPiAgICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKQ0KPiAgICAgICAgICBnb3Rv
IGZhaWw4Ow0KPiANCj4gQEAgLTE1ODcsMTI3ICsxNTg3LDEyNyBAQCBmYWlsODoNCj4gIGZhaWw3
Og0KPiAgICAgIEVycm9yKCJmYWlsN1xuIik7DQo+ICAgICAgWEVOQlVTX0NBQ0hFKERlc3Ryb3ks
DQo+IC0gICAgICAgICAgICAgICAgICYoKlJpbmcpLT5DYWNoZUludGVyZmFjZSwNCj4gLSAgICAg
ICAgICAgICAgICAgKCpSaW5nKS0+U2VnbWVudENhY2hlKTsNCj4gLSAgICAoKlJpbmcpLT5TZWdt
ZW50Q2FjaGUgPSBOVUxMOw0KPiArICAgICAgICAgICAgICAgICAmKCpQcm90b2NvbCktPkNhY2hl
SW50ZXJmYWNlLA0KPiArICAgICAgICAgICAgICAgICAoKlByb3RvY29sKS0+U2VnbWVudENhY2hl
KTsNCj4gKyAgICAoKlByb3RvY29sKS0+U2VnbWVudENhY2hlID0gTlVMTDsNCj4gIGZhaWw2Og0K
PiAgICAgIEVycm9yKCJmYWlsNlxuIik7DQo+ICBmYWlsNToNCj4gICAgICBFcnJvcigiZmFpbDVc
biIpOw0KPiAgICAgIFhFTkJVU19DQUNIRShEZXN0cm95LA0KPiAtICAgICAgICAgICAgICAgICAm
KCpSaW5nKS0+Q2FjaGVJbnRlcmZhY2UsDQo+IC0gICAgICAgICAgICAgICAgICgqUmluZyktPlJl
cXVlc3RDYWNoZSk7DQo+IC0gICAgKCpSaW5nKS0+UmVxdWVzdENhY2hlID0gTlVMTDsNCj4gKyAg
ICAgICAgICAgICAgICAgJigqUHJvdG9jb2wpLT5DYWNoZUludGVyZmFjZSwNCj4gKyAgICAgICAg
ICAgICAgICAgKCpQcm90b2NvbCktPlJlcXVlc3RDYWNoZSk7DQo+ICsgICAgKCpQcm90b2NvbCkt
PlJlcXVlc3RDYWNoZSA9IE5VTEw7DQo+ICBmYWlsNDoNCj4gICAgICBFcnJvcigiZmFpbDRcbiIp
Ow0KPiAgZmFpbDM6DQo+ICAgICAgRXJyb3IoImZhaWwzXG4iKTsNCj4gICAgICBYRU5CVVNfQ0FD
SEUoUmVsZWFzZSwNCj4gLSAgICAgICAgICAgICAgICAgJigqUmluZyktPkNhY2hlSW50ZXJmYWNl
KTsNCj4gKyAgICAgICAgICAgICAgICAgJigqUHJvdG9jb2wpLT5DYWNoZUludGVyZmFjZSk7DQo+
ICBmYWlsMjoNCj4gICAgICBFcnJvcigiZmFpbDJcbiIpOw0KPiANCj4gLSAgICBSdGxaZXJvTWVt
b3J5KCYoKlJpbmcpLT5DYWNoZUludGVyZmFjZSwNCj4gKyAgICBSdGxaZXJvTWVtb3J5KCYoKlBy
b3RvY29sKS0+Q2FjaGVJbnRlcmZhY2UsDQo+ICAgICAgICAgICAgICAgICAgICBzaXplb2YgKFhF
TkJVU19DQUNIRV9JTlRFUkZBQ0UpKTsNCj4gDQo+IC0gICAgUnRsWmVyb01lbW9yeSgmKCpSaW5n
KS0+UHJlcGFyZWRSZXFzLCBzaXplb2YoWEVOVkJEX1FVRVVFKSk7DQo+IC0gICAgUnRsWmVyb01l
bW9yeSgmKCpSaW5nKS0+U3VibWl0dGVkUmVxcywgc2l6ZW9mKFhFTlZCRF9RVUVVRSkpOw0KPiAt
ICAgIFJ0bFplcm9NZW1vcnkoJigqUmluZyktPlNodXRkb3duU3Jicywgc2l6ZW9mKFhFTlZCRF9R
VUVVRSkpOw0KPiArICAgIFJ0bFplcm9NZW1vcnkoJigqUHJvdG9jb2wpLT5QcmVwYXJlZFJlcXMs
IHNpemVvZihYRU5WQkRfUVVFVUUpKTsNCj4gKyAgICBSdGxaZXJvTWVtb3J5KCYoKlByb3RvY29s
KS0+U3VibWl0dGVkUmVxcywNCj4gc2l6ZW9mKFhFTlZCRF9RVUVVRSkpOw0KPiArICAgIFJ0bFpl
cm9NZW1vcnkoJigqUHJvdG9jb2wpLT5TaHV0ZG93blNyYnMsIHNpemVvZihYRU5WQkRfUVVFVUUp
KTsNCj4gDQo+IC0gICAgUnRsWmVyb01lbW9yeSgmKCpSaW5nKS0+RHBjLCBzaXplb2YoS0RQQykp
Ow0KPiAtICAgIFJ0bFplcm9NZW1vcnkoJigqUmluZyktPkxvY2ssIHNpemVvZihLU1BJTl9MT0NL
KSk7DQo+IC0gICAgKCpSaW5nKS0+RnJvbnRlbmQgPSBOVUxMOw0KPiArICAgIFJ0bFplcm9NZW1v
cnkoJigqUHJvdG9jb2wpLT5EcGMsIHNpemVvZihLRFBDKSk7DQo+ICsgICAgUnRsWmVyb01lbW9y
eSgmKCpQcm90b2NvbCktPkxvY2ssIHNpemVvZihLU1BJTl9MT0NLKSk7DQo+ICsgICAgKCpQcm90
b2NvbCktPkZyb250ZW5kID0gTlVMTDsNCj4gDQo+IC0gICAgQVNTRVJUKElzWmVyb01lbW9yeSgq
UmluZywgc2l6ZW9mKFhFTlZCRF9SSU5HKSkpOw0KPiAtICAgIF9fUmluZ0ZyZWUoKlJpbmcpOw0K
PiAtICAgICpSaW5nID0gTlVMTDsNCj4gKyAgICBBU1NFUlQoSXNaZXJvTWVtb3J5KCpQcm90b2Nv
bCwgc2l6ZW9mKFhFTlZCRF9QUk9UT0NPTCkpKTsNCj4gKyAgICBfX1Byb3RvY29sRnJlZSgqUHJv
dG9jb2wpOw0KPiArICAgICpQcm90b2NvbCA9IE5VTEw7DQo+ICBmYWlsMToNCj4gICAgICBFcnJv
cigiZmFpbDEgJTA4eFxuIiwgc3RhdHVzKTsNCj4gICAgICByZXR1cm4gc3RhdHVzOw0KPiAgfQ0K
PiANCj4gIFZPSUQNCj4gLVJpbmdEZXN0cm95KA0KPiAtICAgIElOICBQWEVOVkJEX1JJTkcgICAg
UmluZw0KPiArUHJvdG9jb2xEZXN0cm95KA0KPiArICAgIElOICBQWEVOVkJEX1BST1RPQ09MICAg
IFByb3RvY29sDQo+ICAgICAgKQ0KPiAgew0KPiAgICAgIFhFTkJVU19DQUNIRShEZXN0cm95LA0K
PiAtICAgICAgICAgICAgICAgICAmUmluZy0+Q2FjaGVJbnRlcmZhY2UsDQo+IC0gICAgICAgICAg
ICAgICAgIFJpbmctPkluZGlyZWN0Q2FjaGUpOw0KPiAtICAgIFJpbmctPkluZGlyZWN0Q2FjaGUg
PSBOVUxMOw0KPiArICAgICAgICAgICAgICAgICAmUHJvdG9jb2wtPkNhY2hlSW50ZXJmYWNlLA0K
PiArICAgICAgICAgICAgICAgICBQcm90b2NvbC0+SW5kaXJlY3RDYWNoZSk7DQo+ICsgICAgUHJv
dG9jb2wtPkluZGlyZWN0Q2FjaGUgPSBOVUxMOw0KPiANCj4gICAgICBYRU5CVVNfQ0FDSEUoRGVz
dHJveSwNCj4gLSAgICAgICAgICAgICAgICAgJlJpbmctPkNhY2hlSW50ZXJmYWNlLA0KPiAtICAg
ICAgICAgICAgICAgICBSaW5nLT5TZWdtZW50Q2FjaGUpOw0KPiAtICAgIFJpbmctPlNlZ21lbnRD
YWNoZSA9IE5VTEw7DQo+ICsgICAgICAgICAgICAgICAgICZQcm90b2NvbC0+Q2FjaGVJbnRlcmZh
Y2UsDQo+ICsgICAgICAgICAgICAgICAgIFByb3RvY29sLT5TZWdtZW50Q2FjaGUpOw0KPiArICAg
IFByb3RvY29sLT5TZWdtZW50Q2FjaGUgPSBOVUxMOw0KPiANCj4gICAgICBYRU5CVVNfQ0FDSEUo
RGVzdHJveSwNCj4gLSAgICAgICAgICAgICAgICAgJlJpbmctPkNhY2hlSW50ZXJmYWNlLA0KPiAt
ICAgICAgICAgICAgICAgICBSaW5nLT5SZXF1ZXN0Q2FjaGUpOw0KPiAtICAgIFJpbmctPlJlcXVl
c3RDYWNoZSA9IE5VTEw7DQo+ICsgICAgICAgICAgICAgICAgICZQcm90b2NvbC0+Q2FjaGVJbnRl
cmZhY2UsDQo+ICsgICAgICAgICAgICAgICAgIFByb3RvY29sLT5SZXF1ZXN0Q2FjaGUpOw0KPiAr
ICAgIFByb3RvY29sLT5SZXF1ZXN0Q2FjaGUgPSBOVUxMOw0KPiANCj4gICAgICBYRU5CVVNfQ0FD
SEUoUmVsZWFzZSwNCj4gLSAgICAgICAgICAgICAgICAgJlJpbmctPkNhY2hlSW50ZXJmYWNlKTsN
Cj4gKyAgICAgICAgICAgICAgICAgJlByb3RvY29sLT5DYWNoZUludGVyZmFjZSk7DQo+IA0KPiAt
ICAgIFJ0bFplcm9NZW1vcnkoJlJpbmctPkNhY2hlSW50ZXJmYWNlLA0KPiArICAgIFJ0bFplcm9N
ZW1vcnkoJlByb3RvY29sLT5DYWNoZUludGVyZmFjZSwNCj4gICAgICAgICAgICAgICAgICAgIHNp
emVvZiAoWEVOQlVTX0NBQ0hFX0lOVEVSRkFDRSkpOw0KPiANCj4gLSAgICBSdGxaZXJvTWVtb3J5
KCZSaW5nLT5QcmVwYXJlZFJlcXMsIHNpemVvZihYRU5WQkRfUVVFVUUpKTsNCj4gLSAgICBSdGxa
ZXJvTWVtb3J5KCZSaW5nLT5TdWJtaXR0ZWRSZXFzLCBzaXplb2YoWEVOVkJEX1FVRVVFKSk7DQo+
IC0gICAgUnRsWmVyb01lbW9yeSgmUmluZy0+U2h1dGRvd25TcmJzLCBzaXplb2YoWEVOVkJEX1FV
RVVFKSk7DQo+IC0NCj4gLSAgICBSdGxaZXJvTWVtb3J5KCZSaW5nLT5EcGMsIHNpemVvZihLRFBD
KSk7DQo+IC0gICAgUnRsWmVyb01lbW9yeSgmUmluZy0+TG9jaywgc2l6ZW9mKEtTUElOX0xPQ0sp
KTsNCj4gLSAgICBSaW5nLT5Gcm9udGVuZCA9IE5VTEw7DQo+IC0NCj4gLSAgICBSaW5nLT5CbGtP
cFJlYWQgPSAwOw0KPiAtICAgIFJpbmctPkJsa09wV3JpdGUgPSAwOw0KPiAtICAgIFJpbmctPkJs
a09wSW5kaXJlY3RSZWFkID0gMDsNCj4gLSAgICBSaW5nLT5CbGtPcEluZGlyZWN0V3JpdGUgPSAw
Ow0KPiAtICAgIFJpbmctPkJsa09wQmFycmllciA9IDA7DQo+IC0gICAgUmluZy0+QmxrT3BEaXNj
YXJkID0gMDsNCj4gLSAgICBSaW5nLT5CbGtPcEZsdXNoID0gMDsNCj4gLSAgICBSaW5nLT5TZWdz
R3JhbnRlZCA9IDA7DQo+IC0gICAgUmluZy0+U2Vnc0JvdW5jZWQgPSAwOw0KPiAtDQo+IC0gICAg
QVNTRVJUKElzWmVyb01lbW9yeShSaW5nLCBzaXplb2YoWEVOVkJEX1JJTkcpKSk7DQo+IC0gICAg
X19SaW5nRnJlZShSaW5nKTsNCj4gKyAgICBSdGxaZXJvTWVtb3J5KCZQcm90b2NvbC0+UHJlcGFy
ZWRSZXFzLCBzaXplb2YoWEVOVkJEX1FVRVVFKSk7DQo+ICsgICAgUnRsWmVyb01lbW9yeSgmUHJv
dG9jb2wtPlN1Ym1pdHRlZFJlcXMsIHNpemVvZihYRU5WQkRfUVVFVUUpKTsNCj4gKyAgICBSdGxa
ZXJvTWVtb3J5KCZQcm90b2NvbC0+U2h1dGRvd25TcmJzLCBzaXplb2YoWEVOVkJEX1FVRVVFKSk7
DQo+ICsNCj4gKyAgICBSdGxaZXJvTWVtb3J5KCZQcm90b2NvbC0+RHBjLCBzaXplb2YoS0RQQykp
Ow0KPiArICAgIFJ0bFplcm9NZW1vcnkoJlByb3RvY29sLT5Mb2NrLCBzaXplb2YoS1NQSU5fTE9D
SykpOw0KPiArICAgIFByb3RvY29sLT5Gcm9udGVuZCA9IE5VTEw7DQo+ICsNCj4gKyAgICBQcm90
b2NvbC0+QmxrT3BSZWFkID0gMDsNCj4gKyAgICBQcm90b2NvbC0+QmxrT3BXcml0ZSA9IDA7DQo+
ICsgICAgUHJvdG9jb2wtPkJsa09wSW5kaXJlY3RSZWFkID0gMDsNCj4gKyAgICBQcm90b2NvbC0+
QmxrT3BJbmRpcmVjdFdyaXRlID0gMDsNCj4gKyAgICBQcm90b2NvbC0+QmxrT3BCYXJyaWVyID0g
MDsNCj4gKyAgICBQcm90b2NvbC0+QmxrT3BEaXNjYXJkID0gMDsNCj4gKyAgICBQcm90b2NvbC0+
QmxrT3BGbHVzaCA9IDA7DQo+ICsgICAgUHJvdG9jb2wtPlNlZ3NHcmFudGVkID0gMDsNCj4gKyAg
ICBQcm90b2NvbC0+U2Vnc0JvdW5jZWQgPSAwOw0KPiArDQo+ICsgICAgQVNTRVJUKElzWmVyb01l
bW9yeShQcm90b2NvbCwgc2l6ZW9mKFhFTlZCRF9QUk9UT0NPTCkpKTsNCj4gKyAgICBfX1Byb3Rv
Y29sRnJlZShQcm90b2NvbCk7DQo+ICB9DQo+IA0KPiAgTlRTVEFUVVMNCj4gLVJpbmdDb25uZWN0
KA0KPiAtICAgIElOICBQWEVOVkJEX1JJTkcgICAgUmluZw0KPiArUHJvdG9jb2xDb25uZWN0KA0K
PiArICAgIElOICBQWEVOVkJEX1BST1RPQ09MICAgIFByb3RvY29sDQo+ICAgICAgKQ0KPiAgew0K
PiAtICAgIFBYRU5WQkRfVEFSR0VUICAgICAgVGFyZ2V0ID0gRnJvbnRlbmRHZXRUYXJnZXQoUmlu
Zy0+RnJvbnRlbmQpOw0KPiArICAgIFBYRU5WQkRfVEFSR0VUICAgICAgVGFyZ2V0ID0gRnJvbnRl
bmRHZXRUYXJnZXQoUHJvdG9jb2wtPkZyb250ZW5kKTsNCj4gICAgICBQWEVOVkJEX0FEQVBURVIg
ICAgIEFkYXB0ZXIgPSBUYXJnZXRHZXRBZGFwdGVyKFRhcmdldCk7DQo+IC0gICAgUFhFTlZCRF9H
UkFOVEVSICAgICBHcmFudGVyID0gRnJvbnRlbmRHZXRHcmFudGVyKFJpbmctPkZyb250ZW5kKTsN
Cj4gKyAgICBQWEVOVkJEX0dSQU5URVIgICAgIEdyYW50ZXIgPSBGcm9udGVuZEdldEdyYW50ZXIo
UHJvdG9jb2wtDQo+ID5Gcm9udGVuZCk7DQo+ICAgICAgUENIQVIgICAgICAgICAgICAgICBCdWZm
ZXI7DQo+ICAgICAgVUxPTkcgICAgICAgICAgICAgICBJbmRleDsNCj4gICAgICBOVFNUQVRVUyAg
ICAgICAgICAgIHN0YXR1czsNCj4gDQo+IC0gICAgQVNTRVJUKFJpbmctPkNvbm5lY3RlZCA9PSBG
QUxTRSk7DQo+ICsgICAgQVNTRVJUKFByb3RvY29sLT5Db25uZWN0ZWQgPT0gRkFMU0UpOw0KPiAN
Cj4gLSAgICBBZGFwdGVyR2V0U3RvcmVJbnRlcmZhY2UoQWRhcHRlciwgJlJpbmctPlN0b3JlSW50
ZXJmYWNlKTsNCj4gLSAgICBBZGFwdGVyR2V0RXZ0Y2huSW50ZXJmYWNlKEFkYXB0ZXIsICZSaW5n
LT5FdnRjaG5JbnRlcmZhY2UpOw0KPiAtICAgIEFkYXB0ZXJHZXREZWJ1Z0ludGVyZmFjZShBZGFw
dGVyLCAmUmluZy0+RGVidWdJbnRlcmZhY2UpOw0KPiArICAgIEFkYXB0ZXJHZXRTdG9yZUludGVy
ZmFjZShBZGFwdGVyLCAmUHJvdG9jb2wtPlN0b3JlSW50ZXJmYWNlKTsNCj4gKyAgICBBZGFwdGVy
R2V0RXZ0Y2huSW50ZXJmYWNlKEFkYXB0ZXIsICZQcm90b2NvbC0+RXZ0Y2huSW50ZXJmYWNlKTsN
Cj4gKyAgICBBZGFwdGVyR2V0RGVidWdJbnRlcmZhY2UoQWRhcHRlciwgJlByb3RvY29sLT5EZWJ1
Z0ludGVyZmFjZSk7DQo+IA0KPiAtICAgIHN0YXR1cyA9IFhFTkJVU19TVE9SRShBY3F1aXJlLCAm
UmluZy0+U3RvcmVJbnRlcmZhY2UpOw0KPiArICAgIHN0YXR1cyA9IFhFTkJVU19TVE9SRShBY3F1
aXJlLCAmUHJvdG9jb2wtPlN0b3JlSW50ZXJmYWNlKTsNCj4gICAgICBpZiAoIU5UX1NVQ0NFU1Mo
c3RhdHVzKSkNCj4gICAgICAgICAgZ290byBmYWlsMTsNCj4gDQo+IC0gICAgc3RhdHVzID0gWEVO
QlVTX0VWVENITihBY3F1aXJlLCAmUmluZy0+RXZ0Y2huSW50ZXJmYWNlKTsNCj4gKyAgICBzdGF0
dXMgPSBYRU5CVVNfRVZUQ0hOKEFjcXVpcmUsICZQcm90b2NvbC0+RXZ0Y2huSW50ZXJmYWNlKTsN
Cj4gICAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkNCj4gICAgICAgICAgZ290byBmYWlsMjsN
Cj4gDQo+IC0gICAgc3RhdHVzID0gWEVOQlVTX0RFQlVHKEFjcXVpcmUsICZSaW5nLT5EZWJ1Z0lu
dGVyZmFjZSk7DQo+ICsgICAgc3RhdHVzID0gWEVOQlVTX0RFQlVHKEFjcXVpcmUsICZQcm90b2Nv
bC0+RGVidWdJbnRlcmZhY2UpOw0KPiAgICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKQ0KPiAg
ICAgICAgICBnb3RvIGZhaWwzOw0KPiANCj4gICAgICBzdGF0dXMgPSBYRU5CVVNfU1RPUkUoUmVh
ZCwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgJlJpbmctPlN0b3JlSW50ZXJmYWNlLA0K
PiArICAgICAgICAgICAgICAgICAgICAgICAgICAmUHJvdG9jb2wtPlN0b3JlSW50ZXJmYWNlLA0K
PiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLA0KPiAtICAgICAgICAgICAgICAgICAg
ICAgICAgICBGcm9udGVuZEdldEJhY2tlbmRQYXRoKFJpbmctPkZyb250ZW5kKSwNCj4gKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgRnJvbnRlbmRHZXRCYWNrZW5kUGF0aChQcm90b2NvbC0+RnJv
bnRlbmQpLA0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWF4LXJpbmctcGFnZS1vcmRl
ciIsDQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZCdWZmZXIpOw0KPiAgICAgIGlmIChO
VF9TVUNDRVNTKHN0YXR1cykpIHsNCj4gQEAgLTE3MTUsMTU2ICsxNzE1LDE1NiBAQCBSaW5nQ29u
bmVjdCgNCj4gDQo+ICAgICAgICAgIGlmIChEcml2ZXJHZXRGZWF0dXJlT3ZlcnJpZGUoRmVhdHVy
ZU1heFJpbmdQYWdlT3JkZXIsDQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJk1heE9yZGVyKSkgew0KPiAtICAgICAgICAgICAgTWF4T3JkZXIgPSBtaW4oTWF4T3JkZXIs
IFhFTlZCRF9NQVhfUklOR19QQUdFX09SREVSKTsNCj4gKyAgICAgICAgICAgIE1heE9yZGVyID0g
bWluKE1heE9yZGVyLA0KPiBYRU5WQkRfTUFYX1BST1RPQ09MX1BBR0VfT1JERVIpOw0KPiAgICAg
ICAgICB9IGVsc2Ugew0KPiAtICAgICAgICAgICAgTWF4T3JkZXIgPSBYRU5WQkRfTUFYX1JJTkdf
UEFHRV9PUkRFUjsNCj4gKyAgICAgICAgICAgIE1heE9yZGVyID0gWEVOVkJEX01BWF9QUk9UT0NP
TF9QQUdFX09SREVSOw0KPiAgICAgICAgICB9DQo+IA0KPiAtICAgICAgICBSaW5nLT5PcmRlciA9
IHN0cnRvdWwoQnVmZmVyLCBOVUxMLCAxMCk7DQo+IC0gICAgICAgIFJpbmctPk9yZGVyID0gbWlu
KFJpbmctPk9yZGVyLCBNYXhPcmRlcik7DQo+ICsgICAgICAgIFByb3RvY29sLT5PcmRlciA9IHN0
cnRvdWwoQnVmZmVyLCBOVUxMLCAxMCk7DQo+ICsgICAgICAgIFByb3RvY29sLT5PcmRlciA9IG1p
bihQcm90b2NvbC0+T3JkZXIsIE1heE9yZGVyKTsNCj4gDQo+ICAgICAgICAgIFhFTkJVU19TVE9S
RShGcmVlLA0KPiAtICAgICAgICAgICAgICAgICAgICAgJlJpbmctPlN0b3JlSW50ZXJmYWNlLA0K
PiArICAgICAgICAgICAgICAgICAgICAgJlByb3RvY29sLT5TdG9yZUludGVyZmFjZSwNCj4gICAg
ICAgICAgICAgICAgICAgICAgIEJ1ZmZlcik7DQo+ICAgICAgfSBlbHNlIHsNCj4gLSAgICAgICAg
UmluZy0+T3JkZXIgPSAwOw0KPiArICAgICAgICBQcm90b2NvbC0+T3JkZXIgPSAwOw0KPiAgICAg
IH0NCj4gDQo+IC0gICAgUmluZy0+TWRsID0gX19BbGxvY2F0ZVBhZ2VzKDEgPDwgUmluZy0+T3Jk
ZXIpOw0KPiArICAgIFByb3RvY29sLT5NZGwgPSBfX0FsbG9jYXRlUGFnZXMoMSA8PCBQcm90b2Nv
bC0+T3JkZXIpOw0KPiANCj4gICAgICBzdGF0dXMgPSBTVEFUVVNfTk9fTUVNT1JZOw0KPiAtICAg
IGlmIChSaW5nLT5NZGwgPT0gTlVMTCkNCj4gKyAgICBpZiAoUHJvdG9jb2wtPk1kbCA9PSBOVUxM
KQ0KPiAgICAgICAgICBnb3RvIGZhaWw0Ow0KPiANCj4gLSAgICBSaW5nLT5TaGFyZWQgPSBNbUdl
dFN5c3RlbUFkZHJlc3NGb3JNZGxTYWZlKFJpbmctPk1kbCwNCj4gKyAgICBQcm90b2NvbC0+U2hh
cmVkID0gTW1HZXRTeXN0ZW1BZGRyZXNzRm9yTWRsU2FmZShQcm90b2NvbC0+TWRsLA0KPiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9ybWFsUGFnZVBy
aW9yaXR5KTsNCj4gLSAgICBBU1NFUlQoUmluZy0+U2hhcmVkICE9IE5VTEwpOw0KPiArICAgIEFT
U0VSVChQcm90b2NvbC0+U2hhcmVkICE9IE5VTEwpOw0KPiANCj4gICNwcmFnbWEgd2FybmluZyhw
dXNoKQ0KPiAgI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQzMDUpDQo+ICAjcHJhZ21hIHdhcm5p
bmcoZGlzYWJsZTogNDMxMSkgLy8gJ3R5cGUgY2FzdCcgcG9pbnRlciB0cnVuY2F0aW9uIGZyb20N
Cj4gJ2Jsa2lmX3NyaW5nX2VudHJ5WzFdJyB0byAnbG9uZycNCj4gLSAgICBTSEFSRURfUklOR19J
TklUKFJpbmctPlNoYXJlZCk7DQo+IC0gICAgRlJPTlRfUklOR19JTklUKCZSaW5nLT5Gcm9udCwg
UmluZy0+U2hhcmVkLCBQQUdFX1NJWkUgPDwgUmluZy0NCj4gPk9yZGVyKTsNCj4gKyAgICBTSEFS
RURfUklOR19JTklUKFByb3RvY29sLT5TaGFyZWQpOw0KPiArICAgIEZST05UX1JJTkdfSU5JVCgm
UHJvdG9jb2wtPkZyb250LCBQcm90b2NvbC0+U2hhcmVkLCBQQUdFX1NJWkUgPDwNCj4gUHJvdG9j
b2wtPk9yZGVyKTsNCj4gICNwcmFnbWEgd2FybmluZyhwb3ApDQo+IA0KPiAtICAgIGZvciAoSW5k
ZXggPSAwOyBJbmRleCA8ICgxdWwgPDwgUmluZy0+T3JkZXIpOyArK0luZGV4KSB7DQo+ICsgICAg
Zm9yIChJbmRleCA9IDA7IEluZGV4IDwgKDF1bCA8PCBQcm90b2NvbC0+T3JkZXIpOyArK0luZGV4
KSB7DQo+ICAgICAgICAgIHN0YXR1cyA9IEdyYW50ZXJHZXQoR3JhbnRlciwNCj4gLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBNbUdldE1kbFBmbkFycmF5KFJpbmctPk1kbClbSW5kZXhdLA0K
PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1tR2V0TWRsUGZuQXJyYXkoUHJvdG9jb2wt
Pk1kbClbSW5kZXhdLA0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFLA0KPiAt
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZSaW5nLT5HcmFudHNbSW5kZXhdKTsNCj4gKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAmUHJvdG9jb2wtPkdyYW50c1tJbmRleF0pOw0KPiAg
ICAgICAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkNCj4gICAgICAgICAgICAgIGdvdG8gZmFp
bDU7DQo+ICAgICAgfQ0KPiANCj4gLSAgICBSaW5nLT5DaGFubmVsID0gWEVOQlVTX0VWVENITihP
cGVuLA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZSaW5nLT5FdnRjaG5J
bnRlcmZhY2UsDQo+ICsgICAgUHJvdG9jb2wtPkNoYW5uZWwgPSBYRU5CVVNfRVZUQ0hOKE9wZW4s
DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlByb3RvY29sLT5FdnRjaG5J
bnRlcmZhY2UsDQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWEVOQlVTX0VW
VENITl9UWVBFX1VOQk9VTkQsDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UmluZ0ludGVycnVwdCwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSaW5n
LA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyb250ZW5kR2V0QmFja2Vu
ZERvbWFpbihSaW5nLT5Gcm9udGVuZCksDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUHJvdG9jb2xJbnRlcnJ1cHQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUHJvdG9jb2wsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJv
bnRlbmRHZXRCYWNrZW5kRG9tYWluKFByb3RvY29sLT5Gcm9udGVuZCksDQo+ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSk7DQo+ICAgICAgc3RhdHVzID0gU1RBVFVTX05P
X01FTU9SWTsNCj4gLSAgICBpZiAoUmluZy0+Q2hhbm5lbCA9PSBOVUxMKQ0KPiArICAgIGlmIChQ
cm90b2NvbC0+Q2hhbm5lbCA9PSBOVUxMKQ0KPiAgICAgICAgICBnb3RvIGZhaWw2Ow0KPiANCj4g
ICAgICBYRU5CVVNfRVZUQ0hOKFVubWFzaywNCj4gLSAgICAgICAgICAgICAgICAgICZSaW5nLT5F
dnRjaG5JbnRlcmZhY2UsDQo+IC0gICAgICAgICAgICAgICAgICBSaW5nLT5DaGFubmVsLA0KPiAr
ICAgICAgICAgICAgICAgICAgJlByb3RvY29sLT5FdnRjaG5JbnRlcmZhY2UsDQo+ICsgICAgICAg
ICAgICAgICAgICBQcm90b2NvbC0+Q2hhbm5lbCwNCj4gICAgICAgICAgICAgICAgICAgIEZBTFNF
KTsNCj4gDQo+ICAgICAgc3RhdHVzID0gWEVOQlVTX0RFQlVHKFJlZ2lzdGVyLA0KPiAtICAgICAg
ICAgICAgICAgICAgICAgICAgICAmUmluZy0+RGVidWdJbnRlcmZhY2UsDQo+IC0gICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fTU9EVUxFX18ifFJJTkciLA0KPiAtICAgICAgICAgICAgICAgICAg
ICAgICAgICBSaW5nRGVidWdDYWxsYmFjaywNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAg
UmluZywNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgJlJpbmctPkRlYnVnQ2FsbGJhY2sp
Ow0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAmUHJvdG9jb2wtPkRlYnVnSW50ZXJmYWNl
LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICBfX01PRFVMRV9fInxQUk9UT0NPTCIsDQo+
ICsgICAgICAgICAgICAgICAgICAgICAgICAgIFByb3RvY29sRGVidWdDYWxsYmFjaywNCj4gKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgUHJvdG9jb2wsDQo+ICsgICAgICAgICAgICAgICAgICAg
ICAgICAgICZQcm90b2NvbC0+RGVidWdDYWxsYmFjayk7DQo+ICAgICAgaWYgKCFOVF9TVUNDRVNT
KHN0YXR1cykpDQo+ICAgICAgICAgIGdvdG8gZmFpbDc7DQo+IA0KPiAtICAgIFJpbmctPkNvbm5l
Y3RlZCA9IFRSVUU7DQo+ICsgICAgUHJvdG9jb2wtPkNvbm5lY3RlZCA9IFRSVUU7DQo+ICAgICAg
cmV0dXJuIFNUQVRVU19TVUNDRVNTOw0KPiANCj4gIGZhaWw3Og0KPiAgICAgIEVycm9yKCJmYWls
N1xuIik7DQo+ICAgICAgWEVOQlVTX0VWVENITihDbG9zZSwNCj4gLSAgICAgICAgICAgICAgICAg
ICZSaW5nLT5FdnRjaG5JbnRlcmZhY2UsDQo+IC0gICAgICAgICAgICAgICAgICBSaW5nLT5DaGFu
bmVsKTsNCj4gLSAgICBSaW5nLT5DaGFubmVsID0gTlVMTDsNCj4gKyAgICAgICAgICAgICAgICAg
ICZQcm90b2NvbC0+RXZ0Y2huSW50ZXJmYWNlLA0KPiArICAgICAgICAgICAgICAgICAgUHJvdG9j
b2wtPkNoYW5uZWwpOw0KPiArICAgIFByb3RvY29sLT5DaGFubmVsID0gTlVMTDsNCj4gIGZhaWw2
Og0KPiAgICAgIEVycm9yKCJmYWlsNlxuIik7DQo+ICBmYWlsNToNCj4gICAgICBFcnJvcigiZmFp
bDVcbiIpOw0KPiAtICAgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8ICgxdWwgPDwgUmluZy0+T3Jk
ZXIpOyArK0luZGV4KSB7DQo+IC0gICAgICAgIGlmIChSaW5nLT5HcmFudHNbSW5kZXhdID09IE5V
TEwpDQo+ICsgICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgKDF1bCA8PCBQcm90b2NvbC0+T3Jk
ZXIpOyArK0luZGV4KSB7DQo+ICsgICAgICAgIGlmIChQcm90b2NvbC0+R3JhbnRzW0luZGV4XSA9
PSBOVUxMKQ0KPiAgICAgICAgICAgICAgY29udGludWU7DQo+IA0KPiAtICAgICAgICBHcmFudGVy
UHV0KEdyYW50ZXIsIFJpbmctPkdyYW50c1tJbmRleF0pOw0KPiAtICAgICAgICBSaW5nLT5HcmFu
dHNbSW5kZXhdID0gTlVMTDsNCj4gKyAgICAgICAgR3JhbnRlclB1dChHcmFudGVyLCBQcm90b2Nv
bC0+R3JhbnRzW0luZGV4XSk7DQo+ICsgICAgICAgIFByb3RvY29sLT5HcmFudHNbSW5kZXhdID0g
TlVMTDsNCj4gICAgICB9DQo+IA0KPiAtICAgIFJ0bFplcm9NZW1vcnkoJlJpbmctPkZyb250LCBz
aXplb2YoYmxraWZfZnJvbnRfcmluZ190KSk7DQo+ICsgICAgUnRsWmVyb01lbW9yeSgmUHJvdG9j
b2wtPkZyb250LCBzaXplb2YoYmxraWZfZnJvbnRfcmluZ190KSk7DQo+IA0KPiAtICAgIF9fRnJl
ZVBhZ2VzKFJpbmctPk1kbCk7DQo+IC0gICAgUmluZy0+U2hhcmVkID0gTlVMTDsNCj4gLSAgICBS
aW5nLT5NZGwgPSBOVUxMOw0KPiArICAgIF9fRnJlZVBhZ2VzKFByb3RvY29sLT5NZGwpOw0KPiAr
ICAgIFByb3RvY29sLT5TaGFyZWQgPSBOVUxMOw0KPiArICAgIFByb3RvY29sLT5NZGwgPSBOVUxM
Ow0KPiANCj4gLSAgICBSaW5nLT5PcmRlciA9IDA7DQo+ICsgICAgUHJvdG9jb2wtPk9yZGVyID0g
MDsNCj4gIGZhaWw0Og0KPiAgICAgIEVycm9yKCJmYWlsNFxuIik7DQo+IC0gICAgWEVOQlVTX0RF
QlVHKFJlbGVhc2UsICZSaW5nLT5EZWJ1Z0ludGVyZmFjZSk7DQo+ICsgICAgWEVOQlVTX0RFQlVH
KFJlbGVhc2UsICZQcm90b2NvbC0+RGVidWdJbnRlcmZhY2UpOw0KPiAgZmFpbDM6DQo+ICAgICAg
RXJyb3IoImZhaWwzXG4iKTsNCj4gLSAgICBYRU5CVVNfRVZUQ0hOKFJlbGVhc2UsICZSaW5nLT5F
dnRjaG5JbnRlcmZhY2UpOw0KPiArICAgIFhFTkJVU19FVlRDSE4oUmVsZWFzZSwgJlByb3RvY29s
LT5FdnRjaG5JbnRlcmZhY2UpOw0KPiAgZmFpbDI6DQo+ICAgICAgRXJyb3IoImZhaWwyXG4iKTsN
Cj4gLSAgICBYRU5CVVNfU1RPUkUoUmVsZWFzZSwgJlJpbmctPlN0b3JlSW50ZXJmYWNlKTsNCj4g
KyAgICBYRU5CVVNfU1RPUkUoUmVsZWFzZSwgJlByb3RvY29sLT5TdG9yZUludGVyZmFjZSk7DQo+
ICBmYWlsMToNCj4gICAgICBFcnJvcigiZmFpbDEgJTA4eFxuIiwgc3RhdHVzKTsNCj4gDQo+IC0g
ICAgUnRsWmVyb01lbW9yeSgmUmluZy0+RGVidWdJbnRlcmZhY2UsDQo+ICsgICAgUnRsWmVyb01l
bW9yeSgmUHJvdG9jb2wtPkRlYnVnSW50ZXJmYWNlLA0KPiAgICAgICAgICAgICAgICAgICAgc2l6
ZW9mKFhFTkJVU19ERUJVR19JTlRFUkZBQ0UpKTsNCj4gLSAgICBSdGxaZXJvTWVtb3J5KCZSaW5n
LT5FdnRjaG5JbnRlcmZhY2UsDQo+ICsgICAgUnRsWmVyb01lbW9yeSgmUHJvdG9jb2wtPkV2dGNo
bkludGVyZmFjZSwNCj4gICAgICAgICAgICAgICAgICAgIHNpemVvZihYRU5CVVNfRVZUQ0hOX0lO
VEVSRkFDRSkpOw0KPiAtICAgIFJ0bFplcm9NZW1vcnkoJlJpbmctPlN0b3JlSW50ZXJmYWNlLA0K
PiArICAgIFJ0bFplcm9NZW1vcnkoJlByb3RvY29sLT5TdG9yZUludGVyZmFjZSwNCj4gICAgICAg
ICAgICAgICAgICAgIHNpemVvZihYRU5CVVNfU1RPUkVfSU5URVJGQUNFKSk7DQo+IA0KPiAgICAg
IHJldHVybiBzdGF0dXM7DQo+ICB9DQo+IA0KPiAgTlRTVEFUVVMNCj4gLVJpbmdTdG9yZVdyaXRl
KA0KPiAtICAgIElOICBQWEVOVkJEX1JJTkcgICAgUmluZywNCj4gK1Byb3RvY29sU3RvcmVXcml0
ZSgNCj4gKyAgICBJTiAgUFhFTlZCRF9QUk9UT0NPTCAgICBQcm90b2NvbCwNCj4gICAgICBJTiAg
UFZPSUQgICAgICAgICAgIFRyYW5zYWN0aW9uDQo+ICAgICAgKQ0KPiAgew0KPiAtICAgIFBYRU5W
QkRfR1JBTlRFUiAgICAgR3JhbnRlciA9IEZyb250ZW5kR2V0R3JhbnRlcihSaW5nLT5Gcm9udGVu
ZCk7DQo+ICsgICAgUFhFTlZCRF9HUkFOVEVSICAgICBHcmFudGVyID0gRnJvbnRlbmRHZXRHcmFu
dGVyKFByb3RvY29sLQ0KPiA+RnJvbnRlbmQpOw0KPiAgICAgIFVMT05HICAgICAgICAgICAgICAg
UG9ydDsNCj4gICAgICBOVFNUQVRVUyAgICAgICAgICAgIHN0YXR1czsNCj4gDQo+IC0gICAgaWYg
KFJpbmctPk9yZGVyID09IDApIHsNCj4gKyAgICBpZiAoUHJvdG9jb2wtPk9yZGVyID09IDApIHsN
Cj4gICAgICAgICAgc3RhdHVzID0gWEVOQlVTX1NUT1JFKFByaW50ZiwNCj4gLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICZSaW5nLT5TdG9yZUludGVyZmFjZSwNCj4gKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICZQcm90b2NvbC0+U3RvcmVJbnRlcmZhY2UsDQo+ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2FjdGlvbiwNCj4gLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEZyb250ZW5kR2V0RnJvbnRlbmRQYXRoKFJpbmctPkZyb250ZW5kKSwNCj4g
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyb250ZW5kR2V0RnJvbnRlbmRQYXRoKFBy
b3RvY29sLT5Gcm9udGVuZCksDQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmlu
Zy1yZWYiLA0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiV1IiwNCj4gLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdyYW50ZXJSZWZlcmVuY2UoR3JhbnRlciwgUmluZy0+
R3JhbnRzWzBdKSk7DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcmFudGVyUmVm
ZXJlbmNlKEdyYW50ZXIsIFByb3RvY29sLT5HcmFudHNbMF0pKTsNCj4gICAgICAgICAgaWYgKCFO
VF9TVUNDRVNTKHN0YXR1cykpDQo+ICAgICAgICAgICAgICByZXR1cm4gc3RhdHVzOw0KPiAgICAg
IH0gZWxzZSB7DQo+ICAgICAgICAgIFVMT05HICAgICAgICAgICBJbmRleDsNCj4gDQo+ICAgICAg
ICAgIHN0YXR1cyA9IFhFTkJVU19TVE9SRShQcmludGYsDQo+IC0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAmUmluZy0+U3RvcmVJbnRlcmZhY2UsDQo+ICsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAmUHJvdG9jb2wtPlN0b3JlSW50ZXJmYWNlLA0KPiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVHJhbnNhY3Rpb24sDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBGcm9udGVuZEdldEZyb250ZW5kUGF0aChSaW5nLT5Gcm9udGVuZCksDQo+ICsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBGcm9udGVuZEdldEZyb250ZW5kUGF0aChQcm90b2NvbC0+
RnJvbnRlbmQpLA0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJpbmctcGFnZS1v
cmRlciIsDQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXUiLA0KPiAtICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUmluZy0+T3JkZXIpOw0KPiArICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUHJvdG9jb2wtPk9yZGVyKTsNCj4gICAgICAgICAgaWYgKCFOVF9TVUND
RVNTKHN0YXR1cykpDQo+ICAgICAgICAgICAgICByZXR1cm4gc3RhdHVzOw0KPiANCj4gLSAgICAg
ICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgKDF1bCA8PCBSaW5nLT5PcmRlcik7ICsrSW5kZXgp
IHsNCj4gKyAgICAgICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgKDF1bCA8PCBQcm90b2NvbC0+
T3JkZXIpOyArK0luZGV4KSB7DQo+ICAgICAgICAgICAgICBDSEFSICAgICAgICBOYW1lW01BWF9O
QU1FX0xFTisxXTsNCj4gDQo+ICAgICAgICAgICAgICBzdGF0dXMgPSBSdGxTdHJpbmdDY2hQcmlu
dGZBKE5hbWUsDQo+IEBAIC0xODc1LDM0ICsxODc1LDM0IEBAIFJpbmdTdG9yZVdyaXRlKA0KPiAg
ICAgICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7DQo+IA0KPiAgICAgICAgICAgICAgc3RhdHVz
ID0gWEVOQlVTX1NUT1JFKFByaW50ZiwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAmUmluZy0+U3RvcmVJbnRlcmZhY2UsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJlByb3RvY29sLT5TdG9yZUludGVyZmFjZSwNCj4gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBUcmFuc2FjdGlvbiwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBGcm9udGVuZEdldEZyb250ZW5kUGF0aChSaW5nLT5Gcm9udGVuZCksDQo+ICsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJvbnRlbmRHZXRGcm9udGVuZFBhdGgo
UHJvdG9jb2wtPkZyb250ZW5kKSwNCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBOYW1lLA0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIldSIsDQo+IC0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JhbnRlclJlZmVyZW5jZShHcmFudGVy
LCBSaW5nLT5HcmFudHNbSW5kZXhdKSk7DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR3JhbnRlclJlZmVyZW5jZShHcmFudGVyLCBQcm90b2NvbC0+R3JhbnRzW0luZGV4XSkp
Ow0KPiAgICAgICAgICAgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpDQo+ICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHN0YXR1czsNCj4gICAgICAgICAgfQ0KPiAgICAgIH0NCj4gDQo+ICAgICAg
c3RhdHVzID0gWEVOQlVTX1NUT1JFKFByaW50ZiwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgJlJpbmctPlN0b3JlSW50ZXJmYWNlLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAm
UHJvdG9jb2wtPlN0b3JlSW50ZXJmYWNlLA0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICBU
cmFuc2FjdGlvbiwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgRnJvbnRlbmRHZXRGcm9u
dGVuZFBhdGgoUmluZy0+RnJvbnRlbmQpLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICBG
cm9udGVuZEdldEZyb250ZW5kUGF0aChQcm90b2NvbC0+RnJvbnRlbmQpLA0KPiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAicHJvdG9jb2wiLA0KPiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBYRU5fSU9fUFJPVE9fQUJJKTsNCj4gICAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkNCj4g
ICAgICAgICAgcmV0dXJuIHN0YXR1czsNCj4gDQo+ICAgICAgUG9ydCA9IFhFTkJVU19FVlRDSE4o
R2V0UG9ydCwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAmUmluZy0+RXZ0Y2huSW50ZXJm
YWNlLA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgIFJpbmctPkNoYW5uZWwpOw0KPiArICAg
ICAgICAgICAgICAgICAgICAgICAgICZQcm90b2NvbC0+RXZ0Y2huSW50ZXJmYWNlLA0KPiArICAg
ICAgICAgICAgICAgICAgICAgICAgIFByb3RvY29sLT5DaGFubmVsKTsNCj4gDQo+ICAgICAgc3Rh
dHVzID0gWEVOQlVTX1NUT1JFKFByaW50ZiwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAg
JlJpbmctPlN0b3JlSW50ZXJmYWNlLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAmUHJv
dG9jb2wtPlN0b3JlSW50ZXJmYWNlLA0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFu
c2FjdGlvbiwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgRnJvbnRlbmRHZXRGcm9udGVu
ZFBhdGgoUmluZy0+RnJvbnRlbmQpLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICBGcm9u
dGVuZEdldEZyb250ZW5kUGF0aChQcm90b2NvbC0+RnJvbnRlbmQpLA0KPiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiZXZlbnQtY2hhbm5lbCIsDQo+ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICIldSIsDQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvcnQpOw0KPiBAQCAtMTkx
Myw0OSArMTkxMyw0OSBAQCBSaW5nU3RvcmVXcml0ZSgNCj4gIH0NCj4gDQo+ICBWT0lEDQo+IC1S
aW5nRW5hYmxlKA0KPiAtICAgIElOICBQWEVOVkJEX1JJTkcgICAgUmluZw0KPiArUHJvdG9jb2xF
bmFibGUoDQo+ICsgICAgSU4gIFBYRU5WQkRfUFJPVE9DT0wgICAgUHJvdG9jb2wNCj4gICAgICAp
DQo+ICB7DQo+IC0gICAgQVNTRVJUKFJpbmctPkVuYWJsZWQgPT0gRkFMU0UpOw0KPiAtICAgIFJp
bmctPkVuYWJsZWQgPSBUUlVFOw0KPiArICAgIEFTU0VSVChQcm90b2NvbC0+RW5hYmxlZCA9PSBG
QUxTRSk7DQo+ICsgICAgUHJvdG9jb2wtPkVuYWJsZWQgPSBUUlVFOw0KPiANCj4gICAgICBYRU5C
VVNfRVZUQ0hOKFRyaWdnZXIsDQo+IC0gICAgICAgICAgICAgICAgICAmUmluZy0+RXZ0Y2huSW50
ZXJmYWNlLA0KPiAtICAgICAgICAgICAgICAgICAgUmluZy0+Q2hhbm5lbCk7DQo+ICsgICAgICAg
ICAgICAgICAgICAmUHJvdG9jb2wtPkV2dGNobkludGVyZmFjZSwNCj4gKyAgICAgICAgICAgICAg
ICAgIFByb3RvY29sLT5DaGFubmVsKTsNCj4gIH0NCj4gDQo+ICBWT0lEDQo+IC1SaW5nRGlzYWJs
ZSgNCj4gLSAgICBJTiAgUFhFTlZCRF9SSU5HICAgIFJpbmcNCj4gK1Byb3RvY29sRGlzYWJsZSgN
Cj4gKyAgICBJTiAgUFhFTlZCRF9QUk9UT0NPTCAgICBQcm90b2NvbA0KPiAgICAgICkNCj4gIHsN
Cj4gICAgICBVTE9ORyAgICAgICAgICAgICAgIENvdW50Ow0KPiAgICAgIEtJUlFMICAgICAgICAg
ICAgICAgSXJxbDsNCj4gLSAgICBQWEVOVkJEX1RBUkdFVCAgICAgIFRhcmdldCA9IEZyb250ZW5k
R2V0VGFyZ2V0KFJpbmctPkZyb250ZW5kKTsNCj4gKyAgICBQWEVOVkJEX1RBUkdFVCAgICAgIFRh
cmdldCA9IEZyb250ZW5kR2V0VGFyZ2V0KFByb3RvY29sLT5Gcm9udGVuZCk7DQo+ICAgICAgUFhF
TlZCRF9BREFQVEVSICAgICBBZGFwdGVyID0gVGFyZ2V0R2V0QWRhcHRlcihUYXJnZXQpOw0KPiAN
Cj4gLSAgICBBU1NFUlQoUmluZy0+RW5hYmxlZCA9PSBUUlVFKTsNCj4gLSAgICBSaW5nLT5FbmFi
bGVkID0gRkFMU0U7DQo+ICsgICAgQVNTRVJUKFByb3RvY29sLT5FbmFibGVkID09IFRSVUUpOw0K
PiArICAgIFByb3RvY29sLT5FbmFibGVkID0gRkFMU0U7DQo+IA0KPiAgICAgIC8vIHBvbGwgcmlu
ZyBhbmQgc2VuZCBldmVudCBjaGFubmVsIG5vdGlmaWNhdGlvbiBldmVyeSAxbXMgKGZvciB1cCB0
byAzDQo+IG1pbnV0ZXMpDQo+ICAgICAgQ291bnQgPSAwOw0KPiAtICAgIHdoaWxlIChRdWV1ZUNv
dW50KCZSaW5nLT5TdWJtaXR0ZWRSZXFzKSkgew0KPiArICAgIHdoaWxlIChRdWV1ZUNvdW50KCZQ
cm90b2NvbC0+U3VibWl0dGVkUmVxcykpIHsNCj4gICAgICAgICAgaWYgKENvdW50ID4gMTgwMDAw
KQ0KPiAgICAgICAgICAgICAgYnJlYWs7DQo+ICAgICAgICAgIEtlUmFpc2VJcnFsKERJU1BBVENI
X0xFVkVMLCAmSXJxbCk7DQo+IC0gICAgICAgIFJpbmdQb2xsKFJpbmcpOw0KPiArICAgICAgICBQ
cm90b2NvbFBvbGwoUHJvdG9jb2wpOw0KPiAgICAgICAgICBLZUxvd2VySXJxbChJcnFsKTsNCj4g
ICAgICAgICAgWEVOQlVTX0VWVENITihTZW5kLA0KPiAtICAgICAgICAgICAgICAgICAgICAgICZS
aW5nLT5FdnRjaG5JbnRlcmZhY2UsDQo+IC0gICAgICAgICAgICAgICAgICAgICAgUmluZy0+Q2hh
bm5lbCk7DQo+ICsgICAgICAgICAgICAgICAgICAgICAgJlByb3RvY29sLT5FdnRjaG5JbnRlcmZh
Y2UsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgUHJvdG9jb2wtPkNoYW5uZWwpOw0KPiAgICAg
ICAgICBTdG9yUG9ydFN0YWxsRXhlY3V0aW9uKDEwMDApOyAgIC8vIDEwMDAgbWljcm8tc2Vjb25k
cw0KPiAgICAgICAgICArK0NvdW50Ow0KPiAgICAgIH0NCj4gDQo+ICAgICAgVmVyYm9zZSgiVGFy
Z2V0WyVkXSA6ICV1IFN1Ym1pdHRlZCByZXF1ZXN0cyBsZWZ0ICgldSBpdGVycmF0aW9ucylcbiIs
DQo+IC0gICAgICAgICAgICBGcm9udGVuZEdldFRhcmdldElkKFJpbmctPkZyb250ZW5kKSwNCj4g
LSAgICAgICAgICAgIFF1ZXVlQ291bnQoJlJpbmctPlN1Ym1pdHRlZFJlcXMpLA0KPiArICAgICAg
ICAgICAgRnJvbnRlbmRHZXRUYXJnZXRJZChQcm90b2NvbC0+RnJvbnRlbmQpLA0KPiArICAgICAg
ICAgICAgUXVldWVDb3VudCgmUHJvdG9jb2wtPlN1Ym1pdHRlZFJlcXMpLA0KPiAgICAgICAgICAg
ICAgQ291bnQpOw0KPiANCj4gICAgICAvLyBGYWlsIFByZXBhcmVkUmVxcw0KPiBAQCAtMTk2NSw3
ICsxOTY1LDcgQEAgUmluZ0Rpc2FibGUoDQo+ICAgICAgICAgIFBYRU5WQkRfUkVRVUVTVCAgICAg
UmVxdWVzdDsNCj4gICAgICAgICAgUExJU1RfRU5UUlkgICAgICAgICBMaXN0RW50cnk7DQo+IA0K
PiAtICAgICAgICBMaXN0RW50cnkgPSBRdWV1ZVBvcCgmUmluZy0+UHJlcGFyZWRSZXFzKTsNCj4g
KyAgICAgICAgTGlzdEVudHJ5ID0gUXVldWVQb3AoJlByb3RvY29sLT5QcmVwYXJlZFJlcXMpOw0K
PiAgICAgICAgICBpZiAoTGlzdEVudHJ5ID09IE5VTEwpDQo+ICAgICAgICAgICAgICBicmVhazsN
Cj4gICAgICAgICAgUmVxdWVzdCA9IENPTlRBSU5JTkdfUkVDT1JEKExpc3RFbnRyeSwgWEVOVkJE
X1JFUVVFU1QsDQo+IExpc3RFbnRyeSk7DQo+IEBAIC0xOTc1LDcgKzE5NzUsNyBAQCBSaW5nRGlz
YWJsZSgNCj4gICAgICAgICAgU3JiLT5TcmJTdGF0dXMgPSBTUkJfU1RBVFVTX0FCT1JURUQ7DQo+
ICAgICAgICAgIFNyYi0+U2NzaVN0YXR1cyA9IDB4NDA7IC8vIFNDU0lfQUJPUlRFRA0KPiANCj4g
LSAgICAgICAgUmluZ1B1dFJlcXVlc3QoUmluZywgUmVxdWVzdCk7DQo+ICsgICAgICAgIFByb3Rv
Y29sUHV0UmVxdWVzdChQcm90b2NvbCwgUmVxdWVzdCk7DQo+IA0KPiAgICAgICAgICBpZiAoSW50
ZXJsb2NrZWREZWNyZW1lbnQoJlNyYkV4dC0+UmVxdWVzdENvdW50KSA9PSAwKQ0KPiAgICAgICAg
ICAgICAgQWRhcHRlckNvbXBsZXRlU3JiKEFkYXB0ZXIsIFNyYkV4dCk7DQo+IEBAIC0xOTgzLDkx
ICsxOTgzLDkxIEBAIFJpbmdEaXNhYmxlKA0KPiAgfQ0KPiANCj4gIFZPSUQNCj4gLVJpbmdEaXNj
b25uZWN0KA0KPiAtICAgIElOICBQWEVOVkJEX1JJTkcgICAgUmluZw0KPiArUHJvdG9jb2xEaXNj
b25uZWN0KA0KPiArICAgIElOICBQWEVOVkJEX1BST1RPQ09MICAgIFByb3RvY29sDQo+ICAgICAg
KQ0KPiAgew0KPiAtICAgIFBYRU5WQkRfR1JBTlRFUiAgICAgR3JhbnRlciA9IEZyb250ZW5kR2V0
R3JhbnRlcihSaW5nLT5Gcm9udGVuZCk7DQo+ICsgICAgUFhFTlZCRF9HUkFOVEVSICAgICBHcmFu
dGVyID0gRnJvbnRlbmRHZXRHcmFudGVyKFByb3RvY29sLQ0KPiA+RnJvbnRlbmQpOw0KPiAgICAg
IFVMT05HICAgICAgICAgICAgICAgSW5kZXg7DQo+IA0KPiAtICAgIEFTU0VSVDNVKFJpbmctPlN1
Ym1pdHRlZCwgPT0sIFJpbmctPlJlY2VpdmVkKTsNCj4gLSAgICBBU1NFUlQoUmluZy0+Q29ubmVj
dGVkKTsNCj4gLSAgICBSaW5nLT5Db25uZWN0ZWQgPSBGQUxTRTsNCj4gKyAgICBBU1NFUlQzVShQ
cm90b2NvbC0+U3VibWl0dGVkLCA9PSwgUHJvdG9jb2wtPlJlY2VpdmVkKTsNCj4gKyAgICBBU1NF
UlQoUHJvdG9jb2wtPkNvbm5lY3RlZCk7DQo+ICsgICAgUHJvdG9jb2wtPkNvbm5lY3RlZCA9IEZB
TFNFOw0KPiANCj4gICAgICBYRU5CVVNfREVCVUcoRGVyZWdpc3RlciwNCj4gLSAgICAgICAgICAg
ICAgICAgJlJpbmctPkRlYnVnSW50ZXJmYWNlLA0KPiAtICAgICAgICAgICAgICAgICBSaW5nLT5E
ZWJ1Z0NhbGxiYWNrKTsNCj4gLSAgICBSaW5nLT5EZWJ1Z0NhbGxiYWNrID0gTlVMTDsNCj4gKyAg
ICAgICAgICAgICAgICAgJlByb3RvY29sLT5EZWJ1Z0ludGVyZmFjZSwNCj4gKyAgICAgICAgICAg
ICAgICAgUHJvdG9jb2wtPkRlYnVnQ2FsbGJhY2spOw0KPiArICAgIFByb3RvY29sLT5EZWJ1Z0Nh
bGxiYWNrID0gTlVMTDsNCj4gDQo+ICAgICAgWEVOQlVTX0VWVENITihDbG9zZSwNCj4gLSAgICAg
ICAgICAgICAgICAgICZSaW5nLT5FdnRjaG5JbnRlcmZhY2UsDQo+IC0gICAgICAgICAgICAgICAg
ICBSaW5nLT5DaGFubmVsKTsNCj4gLSAgICBSaW5nLT5DaGFubmVsID0gTlVMTDsNCj4gKyAgICAg
ICAgICAgICAgICAgICZQcm90b2NvbC0+RXZ0Y2huSW50ZXJmYWNlLA0KPiArICAgICAgICAgICAg
ICAgICAgUHJvdG9jb2wtPkNoYW5uZWwpOw0KPiArICAgIFByb3RvY29sLT5DaGFubmVsID0gTlVM
TDsNCj4gDQo+IC0gICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgKDF1bCA8PCBSaW5nLT5PcmRl
cik7ICsrSW5kZXgpIHsNCj4gLSAgICAgICAgaWYgKFJpbmctPkdyYW50c1tJbmRleF0gPT0gTlVM
TCkNCj4gKyAgICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCAoMXVsIDw8IFByb3RvY29sLT5PcmRl
cik7ICsrSW5kZXgpIHsNCj4gKyAgICAgICAgaWYgKFByb3RvY29sLT5HcmFudHNbSW5kZXhdID09
IE5VTEwpDQo+ICAgICAgICAgICAgICBjb250aW51ZTsNCj4gDQo+IC0gICAgICAgIEdyYW50ZXJQ
dXQoR3JhbnRlciwgUmluZy0+R3JhbnRzW0luZGV4XSk7DQo+IC0gICAgICAgIFJpbmctPkdyYW50
c1tJbmRleF0gPSBOVUxMOw0KPiArICAgICAgICBHcmFudGVyUHV0KEdyYW50ZXIsIFByb3RvY29s
LT5HcmFudHNbSW5kZXhdKTsNCj4gKyAgICAgICAgUHJvdG9jb2wtPkdyYW50c1tJbmRleF0gPSBO
VUxMOw0KPiAgICAgIH0NCj4gDQo+IC0gICAgUnRsWmVyb01lbW9yeSgmUmluZy0+RnJvbnQsIHNp
emVvZihibGtpZl9mcm9udF9yaW5nX3QpKTsNCj4gKyAgICBSdGxaZXJvTWVtb3J5KCZQcm90b2Nv
bC0+RnJvbnQsIHNpemVvZihibGtpZl9mcm9udF9yaW5nX3QpKTsNCj4gDQo+IC0gICAgX19GcmVl
UGFnZXMoUmluZy0+TWRsKTsNCj4gLSAgICBSaW5nLT5TaGFyZWQgPSBOVUxMOw0KPiAtICAgIFJp
bmctPk1kbCA9IE5VTEw7DQo+ICsgICAgX19GcmVlUGFnZXMoUHJvdG9jb2wtPk1kbCk7DQo+ICsg
ICAgUHJvdG9jb2wtPlNoYXJlZCA9IE5VTEw7DQo+ICsgICAgUHJvdG9jb2wtPk1kbCA9IE5VTEw7
DQo+IA0KPiAtICAgIFJpbmctPk9yZGVyID0gMDsNCj4gKyAgICBQcm90b2NvbC0+T3JkZXIgPSAw
Ow0KPiANCj4gLSAgICBYRU5CVVNfREVCVUcoUmVsZWFzZSwgJlJpbmctPkRlYnVnSW50ZXJmYWNl
KTsNCj4gLSAgICBYRU5CVVNfRVZUQ0hOKFJlbGVhc2UsICZSaW5nLT5FdnRjaG5JbnRlcmZhY2Up
Ow0KPiAtICAgIFhFTkJVU19TVE9SRShSZWxlYXNlLCAmUmluZy0+U3RvcmVJbnRlcmZhY2UpOw0K
PiArICAgIFhFTkJVU19ERUJVRyhSZWxlYXNlLCAmUHJvdG9jb2wtPkRlYnVnSW50ZXJmYWNlKTsN
Cj4gKyAgICBYRU5CVVNfRVZUQ0hOKFJlbGVhc2UsICZQcm90b2NvbC0+RXZ0Y2huSW50ZXJmYWNl
KTsNCj4gKyAgICBYRU5CVVNfU1RPUkUoUmVsZWFzZSwgJlByb3RvY29sLT5TdG9yZUludGVyZmFj
ZSk7DQo+IA0KPiAtICAgIFJ0bFplcm9NZW1vcnkoJlJpbmctPkRlYnVnSW50ZXJmYWNlLA0KPiAr
ICAgIFJ0bFplcm9NZW1vcnkoJlByb3RvY29sLT5EZWJ1Z0ludGVyZmFjZSwNCj4gICAgICAgICAg
ICAgICAgICAgIHNpemVvZihYRU5CVVNfREVCVUdfSU5URVJGQUNFKSk7DQo+IC0gICAgUnRsWmVy
b01lbW9yeSgmUmluZy0+RXZ0Y2huSW50ZXJmYWNlLA0KPiArICAgIFJ0bFplcm9NZW1vcnkoJlBy
b3RvY29sLT5FdnRjaG5JbnRlcmZhY2UsDQo+ICAgICAgICAgICAgICAgICAgICBzaXplb2YoWEVO
QlVTX0VWVENITl9JTlRFUkZBQ0UpKTsNCj4gLSAgICBSdGxaZXJvTWVtb3J5KCZSaW5nLT5TdG9y
ZUludGVyZmFjZSwNCj4gKyAgICBSdGxaZXJvTWVtb3J5KCZQcm90b2NvbC0+U3RvcmVJbnRlcmZh
Y2UsDQo+ICAgICAgICAgICAgICAgICAgICBzaXplb2YoWEVOQlVTX1NUT1JFX0lOVEVSRkFDRSkp
Ow0KPiANCj4gLSAgICBSaW5nLT5FdmVudHMgPSAwOw0KPiAtICAgIFJpbmctPkRwY3MgPSAwOw0K
PiAtICAgIFJpbmctPlN1Ym1pdHRlZCA9IDA7DQo+IC0gICAgUmluZy0+UmVjZWl2ZWQgPSAwOw0K
PiArICAgIFByb3RvY29sLT5FdmVudHMgPSAwOw0KPiArICAgIFByb3RvY29sLT5EcGNzID0gMDsN
Cj4gKyAgICBQcm90b2NvbC0+U3VibWl0dGVkID0gMDsNCj4gKyAgICBQcm90b2NvbC0+UmVjZWl2
ZWQgPSAwOw0KPiAgfQ0KPiANCj4gIFZPSUQNCj4gLVJpbmdUcmlnZ2VyKA0KPiAtICAgIElOICBQ
WEVOVkJEX1JJTkcgICAgUmluZw0KPiArUHJvdG9jb2xUcmlnZ2VyKA0KPiArICAgIElOICBQWEVO
VkJEX1BST1RPQ09MICAgIFByb3RvY29sDQo+ICAgICAgKQ0KPiAgew0KPiAtICAgIGlmICghUmlu
Zy0+RW5hYmxlZCkNCj4gKyAgICBpZiAoIVByb3RvY29sLT5FbmFibGVkKQ0KPiAgICAgICAgICBy
ZXR1cm47DQo+IA0KPiAgICAgIFhFTkJVU19FVlRDSE4oVHJpZ2dlciwNCj4gLSAgICAgICAgICAg
ICAgICAgICZSaW5nLT5FdnRjaG5JbnRlcmZhY2UsDQo+IC0gICAgICAgICAgICAgICAgICBSaW5n
LT5DaGFubmVsKTsNCj4gKyAgICAgICAgICAgICAgICAgICZQcm90b2NvbC0+RXZ0Y2huSW50ZXJm
YWNlLA0KPiArICAgICAgICAgICAgICAgICAgUHJvdG9jb2wtPkNoYW5uZWwpOw0KPiAgfQ0KPiAN
Cj4gIEJPT0xFQU4NCj4gLVJpbmdRdWV1ZVJlcXVlc3QoDQo+IC0gICAgSU4gIFBYRU5WQkRfUklO
RyAgICBSaW5nLA0KPiArUHJvdG9jb2xRdWV1ZVJlcXVlc3QoDQo+ICsgICAgSU4gIFBYRU5WQkRf
UFJPVE9DT0wgICAgUHJvdG9jb2wsDQo+ICAgICAgSU4gIFBYRU5WQkRfU1JCRVhUICBTcmJFeHQN
Cj4gICAgICApDQo+ICB7DQo+ICAgICAgUFNDU0lfUkVRVUVTVF9CTE9DSyBTcmIgPSBTcmJFeHQt
PlNyYjsNCj4gDQo+IC0gICAgaWYgKCFSaW5nLT5FbmFibGVkKQ0KPiArICAgIGlmICghUHJvdG9j
b2wtPkVuYWJsZWQpDQo+ICAgICAgICAgIGdvdG8gZmFpbDE7DQo+IA0KPiAtICAgIGlmICghUmlu
Z1ByZXBhcmVSZXF1ZXN0KFJpbmcsIFNyYkV4dCkpDQo+ICsgICAgaWYgKCFQcm90b2NvbFByZXBh
cmVSZXF1ZXN0KFByb3RvY29sLCBTcmJFeHQpKQ0KPiAgICAgICAgICBnb3RvIGZhaWwyOw0KPiAN
Cj4gLSAgICBpZiAoUmluZ1N1Ym1pdFJlcXVlc3RzKFJpbmcpKSB7DQo+ICsgICAgaWYgKFByb3Rv
Y29sU3VibWl0UmVxdWVzdHMoUHJvdG9jb2wpKSB7DQo+ICAgICAgICAgIC8vIG1vcmUgcHJlcGFy
ZWQtcmVxcyB0byBzdWJtaXQNCj4gLSAgICAgICAgaWYgKEtlSW5zZXJ0UXVldWVEcGMoJlJpbmct
PkRwYywgTlVMTCwgTlVMTCkpDQo+IC0gICAgICAgICAgICArK1JpbmctPkRwY3M7DQo+ICsgICAg
ICAgIGlmIChLZUluc2VydFF1ZXVlRHBjKCZQcm90b2NvbC0+RHBjLCBOVUxMLCBOVUxMKSkNCj4g
KyAgICAgICAgICAgICsrUHJvdG9jb2wtPkRwY3M7DQo+ICAgICAgfQ0KPiANCj4gICAgICByZXR1
cm4gVFJVRTsNCj4gQEAgLTIwNzksMTcgKzIwNzksMTcgQEAgZmFpbDE6DQo+ICB9DQo+IA0KPiAg
Vk9JRA0KPiAtUmluZ1F1ZXVlU2h1dGRvd24oDQo+IC0gICAgSU4gIFBYRU5WQkRfUklORyAgICBS
aW5nLA0KPiArUHJvdG9jb2xRdWV1ZVNodXRkb3duKA0KPiArICAgIElOICBQWEVOVkJEX1BST1RP
Q09MICAgIFByb3RvY29sLA0KPiAgICAgIElOICBQWEVOVkJEX1NSQkVYVCAgU3JiRXh0DQo+ICAg
ICAgKQ0KPiAgew0KPiAtICAgIFF1ZXVlQXBwZW5kKCZSaW5nLT5TaHV0ZG93blNyYnMsDQo+ICsg
ICAgUXVldWVBcHBlbmQoJlByb3RvY29sLT5TaHV0ZG93blNyYnMsDQo+ICAgICAgICAgICAgICAg
ICAgJlNyYkV4dC0+TGlzdEVudHJ5KTsNCj4gDQo+IC0gICAgaWYgKCFSaW5nLT5FbmFibGVkKQ0K
PiArICAgIGlmICghUHJvdG9jb2wtPkVuYWJsZWQpDQo+ICAgICAgICAgIHJldHVybjsNCj4gDQo+
IC0gICAgaWYgKEtlSW5zZXJ0UXVldWVEcGMoJlJpbmctPkRwYywgTlVMTCwgTlVMTCkpDQo+IC0J
ICAgICsrUmluZy0+RHBjczsNCj4gKyAgICBpZiAoS2VJbnNlcnRRdWV1ZURwYygmUHJvdG9jb2wt
PkRwYywgTlVMTCwgTlVMTCkpDQo+ICsJICAgICsrUHJvdG9jb2wtPkRwY3M7DQo+ICB9DQo+IGRp
ZmYgLS1naXQgYS9zcmMveGVudmJkL3JpbmcuaCBiL3NyYy94ZW52YmQvcHJvdG9jb2wuaA0KPiBz
aW1pbGFyaXR5IGluZGV4IDY3JQ0KPiByZW5hbWUgZnJvbSBzcmMveGVudmJkL3JpbmcuaA0KPiBy
ZW5hbWUgdG8gc3JjL3hlbnZiZC9wcm90b2NvbC5oDQo+IGluZGV4IDliOGE1ODcuLjMxMjZlMTkg
MTAwNjQ0DQo+IC0tLSBhL3NyYy94ZW52YmQvcmluZy5oDQo+ICsrKyBiL3NyYy94ZW52YmQvcHJv
dG9jb2wuaA0KPiBAQCAtMjksNjYgKzI5LDY2IEBADQo+ICAgKiBTVUNIIERBTUFHRS4NCj4gICAq
Lw0KPiANCj4gLSNpZm5kZWYgX1hFTlZCRF9SSU5HX0gNCj4gLSNkZWZpbmUgX1hFTlZCRF9SSU5H
X0gNCj4gKyNpZm5kZWYgX1hFTlZCRF9QUk9UT0NPTF9IDQo+ICsjZGVmaW5lIF9YRU5WQkRfUFJP
VE9DT0xfSA0KPiANCj4gLXR5cGVkZWYgc3RydWN0IF9YRU5WQkRfUklORyBYRU5WQkRfUklORywg
KlBYRU5WQkRfUklORzsNCj4gK3R5cGVkZWYgc3RydWN0IF9YRU5WQkRfUFJPVE9DT0wgWEVOVkJE
X1BST1RPQ09MLA0KPiAqUFhFTlZCRF9QUk9UT0NPTDsNCj4gDQo+ICAjaW5jbHVkZSAiZnJvbnRl
bmQuaCINCj4gICNpbmNsdWRlICJzcmJleHQuaCINCj4gDQo+ICBleHRlcm4gTlRTVEFUVVMNCj4g
LVJpbmdDcmVhdGUoDQo+ICtQcm90b2NvbENyZWF0ZSgNCj4gICAgICBJTiAgUFhFTlZCRF9GUk9O
VEVORCAgICBGcm9udGVuZCwNCj4gLSAgICBPVVQgUFhFTlZCRF9SSU5HKiAgICAgICBSaW5nDQo+
ICsgICAgT1VUIFBYRU5WQkRfUFJPVE9DT0wqICAgUHJvdG9jb2wNCj4gICAgICApOw0KPiANCj4g
IGV4dGVybiBWT0lEDQo+IC1SaW5nRGVzdHJveSgNCj4gLSAgICBJTiAgUFhFTlZCRF9SSU5HICAg
IFJpbmcNCj4gK1Byb3RvY29sRGVzdHJveSgNCj4gKyAgICBJTiAgUFhFTlZCRF9QUk9UT0NPTCAg
ICBQcm90b2NvbA0KPiAgICAgICk7DQo+IA0KPiAgZXh0ZXJuIE5UU1RBVFVTDQo+IC1SaW5nQ29u
bmVjdCgNCj4gLSAgICBJTiAgUFhFTlZCRF9SSU5HICAgIFJpbmcNCj4gK1Byb3RvY29sQ29ubmVj
dCgNCj4gKyAgICBJTiAgUFhFTlZCRF9QUk9UT0NPTCAgICBQcm90b2NvbA0KPiAgICAgICk7DQo+
IA0KPiAgZXh0ZXJuIE5UU1RBVFVTDQo+IC1SaW5nU3RvcmVXcml0ZSgNCj4gLSAgICBJTiAgUFhF
TlZCRF9SSU5HICAgIFJpbmcsDQo+IC0gICAgSU4gIFBWT0lEICAgICAgICAgICBUcmFuc2FjdGlv
bg0KPiArUHJvdG9jb2xTdG9yZVdyaXRlKA0KPiArICAgIElOICBQWEVOVkJEX1BST1RPQ09MICAg
IFByb3RvY29sLA0KPiArICAgIElOICBQVk9JRCAgICAgICAgICAgICAgIFRyYW5zYWN0aW9uDQo+
ICAgICAgKTsNCj4gDQo+ICBleHRlcm4gVk9JRA0KPiAtUmluZ0VuYWJsZSgNCj4gLSAgICBJTiAg
UFhFTlZCRF9SSU5HICAgIFJpbmcNCj4gK1Byb3RvY29sRW5hYmxlKA0KPiArICAgIElOICBQWEVO
VkJEX1BST1RPQ09MICAgIFByb3RvY29sDQo+ICAgICAgKTsNCj4gDQo+ICBleHRlcm4gVk9JRA0K
PiAtUmluZ0Rpc2FibGUoDQo+IC0gICAgSU4gIFBYRU5WQkRfUklORyAgICBSaW5nDQo+ICtQcm90
b2NvbERpc2FibGUoDQo+ICsgICAgSU4gIFBYRU5WQkRfUFJPVE9DT0wgICAgUHJvdG9jb2wNCj4g
ICAgICApOw0KPiANCj4gIGV4dGVybiBWT0lEDQo+IC1SaW5nRGlzY29ubmVjdCgNCj4gLSAgICBJ
TiAgUFhFTlZCRF9SSU5HICAgIFJpbmcNCj4gK1Byb3RvY29sRGlzY29ubmVjdCgNCj4gKyAgICBJ
TiAgUFhFTlZCRF9QUk9UT0NPTCAgICBQcm90b2NvbA0KPiAgICAgICk7DQo+IA0KPiAgZXh0ZXJu
IFZPSUQNCj4gLVJpbmdUcmlnZ2VyKA0KPiAtICAgIElOICBQWEVOVkJEX1JJTkcgICAgUmluZw0K
PiArUHJvdG9jb2xUcmlnZ2VyKA0KPiArICAgIElOICBQWEVOVkJEX1BST1RPQ09MICAgIFByb3Rv
Y29sDQo+ICAgICAgKTsNCj4gDQo+ICBleHRlcm4gQk9PTEVBTg0KPiAtUmluZ1F1ZXVlUmVxdWVz
dCgNCj4gLSAgICBJTiAgUFhFTlZCRF9SSU5HICAgIFJpbmcsDQo+IC0gICAgSU4gIFBYRU5WQkRf
U1JCRVhUICBTcmJFeHQNCj4gK1Byb3RvY29sUXVldWVSZXF1ZXN0KA0KPiArICAgIElOICBQWEVO
VkJEX1BST1RPQ09MICAgIFByb3RvY29sLA0KPiArICAgIElOICBQWEVOVkJEX1NSQkVYVCAgICAg
IFNyYkV4dA0KPiAgICAgICk7DQo+IA0KPiAgZXh0ZXJuIFZPSUQNCj4gLVJpbmdRdWV1ZVNodXRk
b3duKA0KPiAtICAgIElOICBQWEVOVkJEX1JJTkcgICAgUmluZywNCj4gLSAgICBJTiAgUFhFTlZC
RF9TUkJFWFQgIFNyYkV4dA0KPiArUHJvdG9jb2xRdWV1ZVNodXRkb3duKA0KPiArICAgIElOICBQ
WEVOVkJEX1BST1RPQ09MICAgIFByb3RvY29sLA0KPiArICAgIElOICBQWEVOVkJEX1NSQkVYVCAg
ICAgIFNyYkV4dA0KPiAgICAgICk7DQo+IA0KPiAtI2VuZGlmIC8vIF9YRU5WQkRfUklOR19IDQo+
ICsjZW5kaWYgLy8gX1hFTlZCRF9QUk9UT0NPTF9IDQo+IGRpZmYgLS1naXQgYS9zcmMveGVudmJk
L3RhcmdldC5jIGIvc3JjL3hlbnZiZC90YXJnZXQuYw0KPiBpbmRleCA1NGZmYjkzLi5mNjUxOWUz
IDEwMDY0NA0KPiAtLS0gYS9zcmMveGVudmJkL3RhcmdldC5jDQo+ICsrKyBiL3NyYy94ZW52YmQv
dGFyZ2V0LmMNCj4gQEAgLTIxNyw3ICsyMTcsNyBAQCBUYXJnZXRSZWFkV3JpdGUoDQo+ICB7DQo+
ICAgICAgUFhFTlZCRF9TUkJFWFQgICAgICAgICAgU3JiRXh0ID0gU3JiLT5TcmJFeHRlbnNpb247
DQo+ICAgICAgUFhFTlZCRF9GUk9OVEVORCAgICAgICAgRnJvbnRlbmQgPSBUYXJnZXQtPkZyb250
ZW5kOw0KPiAtICAgIFBYRU5WQkRfUklORyAgICAgICAgICAgIFJpbmcgPSBGcm9udGVuZEdldFJp
bmcoRnJvbnRlbmQpOw0KPiArICAgIFBYRU5WQkRfUFJPVE9DT0wgICAgICAgIFByb3RvY29sID0g
RnJvbnRlbmRHZXRQcm90b2NvbChGcm9udGVuZCk7DQo+ICAgICAgVUxPTkc2NCAgICAgICAgICAg
ICAgICAgU2VjdG9yQ291bnQ7DQo+ICAgICAgVUxPTkc2NCAgICAgICAgICAgICAgICAgU2VjdG9y
U3RhcnQ7DQo+ICAgICAgVUxPTkcgICAgICAgICAgICAgICAgICAgTnVtU2VjdG9yczsNCj4gQEAg
LTI0Miw3ICsyNDIsNyBAQCBUYXJnZXRSZWFkV3JpdGUoDQo+ICAgICAgICAgIGdvdG8gZmFpbDQ7
DQo+IA0KPiAgICAgIFNyYi0+U3JiU3RhdHVzID0gU1JCX1NUQVRVU19QRU5ESU5HOw0KPiAtICAg
IHJldHVybiBSaW5nUXVldWVSZXF1ZXN0KFJpbmcsIFNyYkV4dCk7DQo+ICsgICAgcmV0dXJuIFBy
b3RvY29sUXVldWVSZXF1ZXN0KFByb3RvY29sLCBTcmJFeHQpOw0KPiANCj4gIGZhaWw0Og0KPiAg
ICAgICBFcnJvcigiZmFpbDRcbiIpOw0KPiBAQCAtMjYzLDcgKzI2Myw3IEBAIFRhcmdldFN5bmND
YWNoZSgNCj4gIHsNCj4gICAgICBQWEVOVkJEX1NSQkVYVCAgICAgICAgICBTcmJFeHQgPSBTcmIt
PlNyYkV4dGVuc2lvbjsNCj4gICAgICBQWEVOVkJEX0ZST05URU5EICAgICAgICBGcm9udGVuZCA9
IFRhcmdldC0+RnJvbnRlbmQ7DQo+IC0gICAgUFhFTlZCRF9SSU5HICAgICAgICAgICAgUmluZyA9
IEZyb250ZW5kR2V0UmluZyhGcm9udGVuZCk7DQo+ICsgICAgUFhFTlZCRF9QUk9UT0NPTCAgICAg
ICAgUHJvdG9jb2wgPSBGcm9udGVuZEdldFByb3RvY29sKEZyb250ZW5kKTsNCj4gDQo+ICAgICAg
U3JiLT5TcmJTdGF0dXMgPSBTUkJfU1RBVFVTX0VSUk9SOw0KPiAgICAgIGlmICghRnJvbnRlbmRH
ZXRDb25uZWN0ZWQoRnJvbnRlbmQpKQ0KPiBAQCAtMjc4LDcgKzI3OCw3IEBAIFRhcmdldFN5bmND
YWNoZSgNCj4gICAgICAgICAgZ290byBzdWNjZWVkOw0KPiANCj4gICAgICBTcmItPlNyYlN0YXR1
cyA9IFNSQl9TVEFUVVNfUEVORElORzsNCj4gLSAgICByZXR1cm4gUmluZ1F1ZXVlUmVxdWVzdChS
aW5nLCBTcmJFeHQpOw0KPiArICAgIHJldHVybiBQcm90b2NvbFF1ZXVlUmVxdWVzdChQcm90b2Nv
bCwgU3JiRXh0KTsNCj4gDQo+ICBzdWNjZWVkOg0KPiAgICAgIFNyYi0+U3JiU3RhdHVzID0gU1JC
X1NUQVRVU19TVUNDRVNTOw0KPiBAQCAtMjk5LDcgKzI5OSw3IEBAIFRhcmdldFVubWFwKA0KPiAg
ew0KPiAgICAgIFBYRU5WQkRfU1JCRVhUICAgICAgICAgIFNyYkV4dCA9IFNyYi0+U3JiRXh0ZW5z
aW9uOw0KPiAgICAgIFBYRU5WQkRfRlJPTlRFTkQgICAgICAgIEZyb250ZW5kID0gVGFyZ2V0LT5G
cm9udGVuZDsNCj4gLSAgICBQWEVOVkJEX1JJTkcgICAgICAgICAgICBSaW5nID0gRnJvbnRlbmRH
ZXRSaW5nKEZyb250ZW5kKTsNCj4gKyAgICBQWEVOVkJEX1BST1RPQ09MICAgICAgICBQcm90b2Nv
bCA9IEZyb250ZW5kR2V0UHJvdG9jb2woRnJvbnRlbmQpOw0KPiANCj4gICAgICBTcmItPlNyYlN0
YXR1cyA9IFNSQl9TVEFUVVNfRVJST1I7DQo+ICAgICAgaWYgKCFGcm9udGVuZEdldENvbm5lY3Rl
ZChGcm9udGVuZCkpDQo+IEBAIC0zMTIsNyArMzEyLDcgQEAgVGFyZ2V0VW5tYXAoDQo+ICAgICAg
ICAgIGdvdG8gc3VjY2VlZDsNCj4gDQo+ICAgICAgU3JiLT5TcmJTdGF0dXMgPSBTUkJfU1RBVFVT
X1BFTkRJTkc7DQo+IC0gICAgcmV0dXJuIFJpbmdRdWV1ZVJlcXVlc3QoUmluZywgU3JiRXh0KTsN
Cj4gKyAgICByZXR1cm4gUHJvdG9jb2xRdWV1ZVJlcXVlc3QoUHJvdG9jb2wsIFNyYkV4dCk7DQo+
IA0KPiAgc3VjY2VlZDoNCj4gICAgICBTcmItPlNyYlN0YXR1cyA9IFNSQl9TVEFUVVNfU1VDQ0VT
UzsNCj4gQEAgLTk4MCw3ICs5ODAsMTEgQEAgVGFyZ2V0Rmx1c2goDQo+ICAgICAgSU4gIFBYRU5W
QkRfU1JCRVhUICBTcmJFeHQNCj4gICAgICApDQo+ICB7DQo+IC0gICAgUmluZ1F1ZXVlU2h1dGRv
d24oRnJvbnRlbmRHZXRSaW5nKFRhcmdldC0+RnJvbnRlbmQpLCBTcmJFeHQpOw0KPiArICAgIFBY
RU5WQkRfUFJPVE9DT0wgICAgUHJvdG9jb2w7DQo+ICsNCj4gKyAgICBQcm90b2NvbCA9IEZyb250
ZW5kR2V0UHJvdG9jb2woVGFyZ2V0LT5Gcm9udGVuZCk7DQo+ICsgICAgUHJvdG9jb2xRdWV1ZVNo
dXRkb3duKFByb3RvY29sLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICBTcmJFeHQpOw0K
PiAgfQ0KPiANCj4gIFZPSUQNCj4gQEAgLTk4OSw3ICs5OTMsMTEgQEAgVGFyZ2V0U2h1dGRvd24o
DQo+ICAgICAgSU4gIFBYRU5WQkRfU1JCRVhUICBTcmJFeHQNCj4gICAgICApDQo+ICB7DQo+IC0g
ICAgUmluZ1F1ZXVlU2h1dGRvd24oRnJvbnRlbmRHZXRSaW5nKFRhcmdldC0+RnJvbnRlbmQpLCBT
cmJFeHQpOw0KPiArICAgIFBYRU5WQkRfUFJPVE9DT0wgICAgUHJvdG9jb2w7DQo+ICsNCj4gKyAg
ICBQcm90b2NvbCA9IEZyb250ZW5kR2V0UHJvdG9jb2woVGFyZ2V0LT5Gcm9udGVuZCk7DQo+ICsg
ICAgUHJvdG9jb2xRdWV1ZVNodXRkb3duKFByb3RvY29sLA0KPiArICAgICAgICAgICAgICAgICAg
ICAgICAgICBTcmJFeHQpOw0KPiAgfQ0KPiANCj4gIFZPSUQNCj4gZGlmZiAtLWdpdCBhL3ZzMjAx
NS94ZW52YmQveGVudmJkLnZjeHByb2ogYi92czIwMTUveGVudmJkL3hlbnZiZC52Y3hwcm9qDQo+
IGluZGV4IGE4NWU2NWIuLjA5Mzk3NjkgMTAwNjQ0DQo+IC0tLSBhL3ZzMjAxNS94ZW52YmQveGVu
dmJkLnZjeHByb2oNCj4gKysrIGIvdnMyMDE1L3hlbnZiZC94ZW52YmQudmN4cHJvag0KPiBAQCAt
NzIsNyArNzIsNyBAQA0KPiAgICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi4vLi4vc3JjL3hlbnZi
ZC9iYXNlNjQuYyIgLz4NCj4gICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uLy4uL3NyYy94ZW52
YmQvcXVldWUuYyIgLz4NCj4gICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uLy4uL3NyYy94ZW52
YmQvdGhyZWFkLmMiIC8+DQo+IC0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLi8uLi9zcmMveGVu
dmJkL3JpbmcuYyIgLz4NCj4gKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uLy4uL3NyYy94ZW52
YmQvcHJvdG9jb2wuYyIgLz4NCj4gICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uLy4uL3NyYy94
ZW52YmQvZ3JhbnRlci5jIiAvPg0KPiAgICA8L0l0ZW1Hcm91cD4NCj4gICAgPEl0ZW1Hcm91cD4N
Cj4gZGlmZiAtLWdpdCBhL3ZzMjAxNy94ZW52YmQveGVudmJkLnZjeHByb2ogYi92czIwMTcveGVu
dmJkL3hlbnZiZC52Y3hwcm9qDQo+IGluZGV4IDc0YWY1ZmMuLjc5ZTdjMjggMTAwNjQ0DQo+IC0t
LSBhL3ZzMjAxNy94ZW52YmQveGVudmJkLnZjeHByb2oNCj4gKysrIGIvdnMyMDE3L3hlbnZiZC94
ZW52YmQudmN4cHJvag0KPiBAQCAtODAsNyArODAsNyBAQA0KPiAgICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi4vLi4vc3JjL3hlbnZiZC9iYXNlNjQuYyIgLz4NCj4gICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uLy4uL3NyYy94ZW52YmQvcXVldWUuYyIgLz4NCj4gICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uLy4uL3NyYy94ZW52YmQvdGhyZWFkLmMiIC8+DQo+IC0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLi8uLi9zcmMveGVudmJkL3JpbmcuYyIgLz4NCj4gKyAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uLy4uL3NyYy94ZW52YmQvcHJvdG9jb2wuYyIgLz4NCj4gICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uLy4uL3NyYy94ZW52YmQvZ3JhbnRlci5jIiAvPg0KPiAgICA8L0l0ZW1Hcm91
cD4NCj4gICAgPEl0ZW1Hcm91cD4NCj4gLS0NCj4gMi4xNi4yLndpbmRvd3MuMQ0KPiANCj4gDQo+
IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fDQo+IHdpbi1w
di1kZXZlbCBtYWlsaW5nIGxpc3QNCj4gd2luLXB2LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3Jn
DQo+IGh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby93aW4tcHYt
ZGV2ZWwNCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCndp
bi1wdi1kZXZlbCBtYWlsaW5nIGxpc3QKd2luLXB2LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3Jn
Cmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby93aW4tcHYtZGV2
ZWw=

From win-pv-devel-bounces@lists.xenproject.org Wed May 09 15:56:35 2018
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 09 May 2018 15:56:35 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1fGRSE-0007IX-If; Wed, 09 May 2018 15:56:34 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <srs0=re5l=h4=citrix.com=prvs=66078d76a=paul.durrant@srs-us1.protection.inumbo.net>)
 id 1fGRSD-0007IS-C5
 for win-pv-devel@lists.xenproject.org; Wed, 09 May 2018 15:56:33 +0000
X-Inumbo-ID: f74a89ce-53a1-11e8-8249-2fda3a446a53
Received: from SMTP.EU.CITRIX.COM (unknown [185.25.65.24])
 by us1-amaz-eas1.inumbo.com (Halon) with ESMTPS
 id f74a89ce-53a1-11e8-8249-2fda3a446a53;
 Wed, 09 May 2018 15:59:34 +0000 (UTC)
X-IronPort-AV: E=Sophos;i="5.49,382,1520899200"; d="scan'208";a="72844405"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Owen Smith <owen.smith@citrix.com>, "win-pv-devel@lists.xenproject.org"
 <win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] [RFC PATCH 4/6] Add initial multi-queue support
Thread-Index: AQHT4s5l2kx/HTPb00OEr6fasvFRR6Qnliwg
Date: Wed, 9 May 2018 15:56:27 +0000
Message-ID: <561f6506ea2d4e7196e6ed145400d4b0@AMSPEX02CL03.citrite.net>
References: <20180503110302.17308-1-owen.smith@citrix.com>
 <20180503110302.17308-5-owen.smith@citrix.com>
In-Reply-To: <20180503110302.17308-5-owen.smith@citrix.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-ms-exchange-transport-fromentityheader: Hosted
MIME-Version: 1.0
Subject: Re: [win-pv-devel] [RFC PATCH 4/6] Add initial multi-queue support
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Owen Smith <owen.smith@citrix.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>

PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiB3aW4tcHYtZGV2ZWwgW21haWx0
bzp3aW4tcHYtZGV2ZWwtYm91bmNlc0BsaXN0cy54ZW5wcm9qZWN0Lm9yZ10gT24NCj4gQmVoYWxm
IE9mIG93ZW5zbQ0KPiBTZW50OiAwMyBNYXkgMjAxOCAxMjowMw0KPiBUbzogd2luLXB2LWRldmVs
QGxpc3RzLnhlbnByb2plY3Qub3JnDQo+IENjOiBPd2VuIFNtaXRoIDxvd2VuLnNtaXRoQGNpdHJp
eC5jb20+DQo+IFN1YmplY3Q6IFt3aW4tcHYtZGV2ZWxdIFtSRkMgUEFUQ0ggNC82XSBBZGQgaW5p
dGlhbCBtdWx0aS1xdWV1ZSBzdXBwb3J0DQo+IA0KPiBDcmVhdGUgYSBxdWV1ZSBwZXIgQ1BVLCB1
cC10byB0aGUgbG93ZXIgbGltaXQgc3BlY2lmaWVkIGJ5IHhlbnN0b3JlIGFuZA0KPiByZWdpc3Ry
eSBvdmVycmlkZS4gUmVxdWVzdHMgYXJlIHF1ZXVlZCBvbiB0aGUgc2FtZSBwcm9jZXNzb3IncyBE
UEMgYXMNCj4gU3RhcnRJbyBydW5zIG9uLiBJdCBpcyBhc3N1bWVkIHRoYXQgYW55IHJlcXVlc3Qg
ZGlzcGF0Y2hlZCB0byB0aGUNCj4gYmFja2VuZCBvbiBhIHBhcnRpY3VsYXIgcXVldWUgd2lsbCBh
bHdheXMgYmUgY29tcGxldGVkIG9uIHRoZSBzYW1lDQo+IHF1ZXVlLg0KPiANCg0KV2UgbmVlZCB0
byBleHBvc2UgdGhlIGZhY3Qgd2UgaGF2ZSBtdWx0aXBsZSB1bmRlcmx5aW5nIHF1ZXVlcyB0byB0
aGUgc3RhY2sgb3RoZXJ3aXNlIHdlJ3JlIGdvaW5nIHRvIGhhdmUgdG8gbWFpbnRhaW4gYSB0b3Rh
bCBvcmRlcmluZyBvbiBTUkJzIHRvIGF2b2lkIHRoZSBwb3NzaWJpbGl0eSBvZiB3cml0ZXMgdG8g
YSBibG9jayBnZXR0aW5nIHJlLW9yZGVyZWQgYWhlYWQgb2YgcmVhZHMgZnJvbSB0aGUgc2FtZSBi
bG9jaywgb3IgdmljZSB2ZXJzYS4NCg0KICBQYXVsDQoNCj4gU2lnbmVkLW9mZi1ieTogb3dlbnNt
IDxvd2VuLnNtaXRoQGNpdHJpeC5jb20+DQo+IC0tLQ0KPiAgc3JjL3hlbnZiZC9wcm90b2NvbC5j
IHwgMjEwMCArKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tDQo+IC0tLS0t
LS0tLQ0KPiAgMSBmaWxlIGNoYW5nZWQsIDEyMjIgaW5zZXJ0aW9ucygrKSwgODc4IGRlbGV0aW9u
cygtKQ0KPiANCj4gZGlmZiAtLWdpdCBhL3NyYy94ZW52YmQvcHJvdG9jb2wuYyBiL3NyYy94ZW52
YmQvcHJvdG9jb2wuYw0KPiBpbmRleCAzOTc2N2ViLi44YWE2ZWM4IDEwMDY0NA0KPiAtLS0gYS9z
cmMveGVudmJkL3Byb3RvY29sLmMNCj4gKysrIGIvc3JjL3hlbnZiZC9wcm90b2NvbC5jDQo+IEBA
IC01NiwxNSArNTYsMTAgQEANCj4gICNkZWZpbmUgWEVOVkJEX01BWF9QUk9UT0NPTF9QQUdFX09S
REVSICAoNCkNCj4gICNkZWZpbmUgWEVOVkJEX01BWF9QUk9UT0NPTF9QQUdFUyAgICAgICAoMSA8
PA0KPiBYRU5WQkRfTUFYX1BST1RPQ09MX1BBR0VfT1JERVIpDQo+IA0KPiAtc3RydWN0IF9YRU5W
QkRfUFJPVE9DT0wgew0KPiAtICAgIFBYRU5WQkRfRlJPTlRFTkQgICAgICAgICAgICAgICAgRnJv
bnRlbmQ7DQo+IC0gICAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICBDb25uZWN0ZWQ7
DQo+IC0gICAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICBFbmFibGVkOw0KPiAtDQo+
IC0gICAgWEVOQlVTX0NBQ0hFX0lOVEVSRkFDRSAgICAgICAgICBDYWNoZUludGVyZmFjZTsNCj4g
LSAgICBYRU5CVVNfU1RPUkVfSU5URVJGQUNFICAgICAgICAgIFN0b3JlSW50ZXJmYWNlOw0KPiAt
ICAgIFhFTkJVU19FVlRDSE5fSU5URVJGQUNFICAgICAgICAgRXZ0Y2huSW50ZXJmYWNlOw0KPiAt
ICAgIFhFTkJVU19ERUJVR19JTlRFUkZBQ0UgICAgICAgICAgRGVidWdJbnRlcmZhY2U7DQo+ICt0
eXBlZGVmIHN0cnVjdCBfWEVOVkJEX1JJTkcgew0KPiArICAgIFBYRU5WQkRfUFJPVE9DT0wgICAg
ICAgICAgICAgICAgUHJvdG9jb2w7DQo+ICsgICAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAg
ICAgICBJbmRleDsNCj4gKyAgICBQQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhdGg7
DQo+IA0KPiAgICAgIFBYRU5CVVNfREVCVUdfQ0FMTEJBQ0sgICAgICAgICAgRGVidWdDYWxsYmFj
azsNCj4gDQo+IEBAIC03MiwxNCArNjcsMTAgQEAgc3RydWN0IF9YRU5WQkRfUFJPVE9DT0wgew0K
PiAgICAgIFBNREwgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWRsOw0KPiAgICAgIGJsa2lm
X3NyaW5nX3QqICAgICAgICAgICAgICAgICAgU2hhcmVkOw0KPiAgICAgIGJsa2lmX2Zyb250X3Jp
bmdfdCAgICAgICAgICAgICAgRnJvbnQ7DQo+IC0gICAgVUxPTkcgICAgICAgICAgICAgICAgICAg
ICAgICAgICBPcmRlcjsNCj4gICAgICBQVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgIEdy
YW50c1tYRU5WQkRfTUFYX1BST1RPQ09MX1BBR0VTXTsNCj4gICAgICBQWEVOQlVTX0VWVENITl9D
SEFOTkVMICAgICAgICAgIENoYW5uZWw7DQo+ICAgICAgS0RQQyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBEcGM7DQo+IA0KPiAtICAgIFBYRU5CVVNfQ0FDSEUgICAgICAgICAgICAgICAgICAg
UmVxdWVzdENhY2hlOw0KPiAtICAgIFBYRU5CVVNfQ0FDSEUgICAgICAgICAgICAgICAgICAgU2Vn
bWVudENhY2hlOw0KPiAtICAgIFBYRU5CVVNfQ0FDSEUgICAgICAgICAgICAgICAgICAgSW5kaXJl
Y3RDYWNoZTsNCj4gICAgICBYRU5WQkRfUVVFVUUgICAgICAgICAgICAgICAgICAgIFByZXBhcmVk
UmVxczsNCj4gICAgICBYRU5WQkRfUVVFVUUgICAgICAgICAgICAgICAgICAgIFN1Ym1pdHRlZFJl
cXM7DQo+ICAgICAgWEVOVkJEX1FVRVVFICAgICAgICAgICAgICAgICAgICBTaHV0ZG93blNyYnM7
DQo+IEBAIC05NSw2ICs4NiwyOSBAQCBzdHJ1Y3QgX1hFTlZCRF9QUk9UT0NPTCB7DQo+ICAgICAg
VUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICBCbGtPcEJhcnJpZXI7DQo+ICAgICAgVUxP
TkcgICAgICAgICAgICAgICAgICAgICAgICAgICBCbGtPcERpc2NhcmQ7DQo+ICAgICAgVUxPTkcg
ICAgICAgICAgICAgICAgICAgICAgICAgICBCbGtPcEZsdXNoOw0KPiArfSBYRU5WQkRfUklORywg
KlBYRU5WQkRfUklORzsNCj4gKw0KPiArc3RydWN0IF9YRU5WQkRfUFJPVE9DT0wgew0KPiArICAg
IFBYRU5WQkRfRlJPTlRFTkQgICAgICAgICAgICAgICAgRnJvbnRlbmQ7DQo+ICsgICAgQk9PTEVB
TiAgICAgICAgICAgICAgICAgICAgICAgICBDb25uZWN0ZWQ7DQo+ICsgICAgQk9PTEVBTiAgICAg
ICAgICAgICAgICAgICAgICAgICBFbmFibGVkOw0KPiArDQo+ICsgICAgWEVOQlVTX0NBQ0hFX0lO
VEVSRkFDRSAgICAgICAgICBDYWNoZUludGVyZmFjZTsNCj4gKyAgICBYRU5CVVNfU1RPUkVfSU5U
RVJGQUNFICAgICAgICAgIFN0b3JlSW50ZXJmYWNlOw0KPiArICAgIFhFTkJVU19FVlRDSE5fSU5U
RVJGQUNFICAgICAgICAgRXZ0Y2huSW50ZXJmYWNlOw0KPiArICAgIFhFTkJVU19ERUJVR19JTlRF
UkZBQ0UgICAgICAgICAgRGVidWdJbnRlcmZhY2U7DQo+ICsNCj4gKyAgICBQWEVOQlVTX0RFQlVH
X0NBTExCQUNLICAgICAgICAgIERlYnVnQ2FsbGJhY2s7DQo+ICsgICAgS1NQSU5fTE9DSyAgICAg
ICAgICAgICAgICAgICAgICBMb2NrOw0KPiArDQo+ICsgICAgUFhFTkJVU19DQUNIRSAgICAgICAg
ICAgICAgICAgICBSZXF1ZXN0Q2FjaGU7DQo+ICsgICAgUFhFTkJVU19DQUNIRSAgICAgICAgICAg
ICAgICAgICBTZWdtZW50Q2FjaGU7DQo+ICsgICAgUFhFTkJVU19DQUNIRSAgICAgICAgICAgICAg
ICAgICBJbmRpcmVjdENhY2hlOw0KPiArDQo+ICsgICAgVUxPTkcgICAgICAgICAgICAgICAgICAg
ICAgICAgICBPcmRlcjsNCj4gKyAgICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgICAgIE51
bVF1ZXVlczsNCj4gKyAgICBQWEVOVkJEX1JJTkcgICAgICAgICAgICAgICAgICAgICpSaW5nczsN
Cj4gKw0KPiAgICAgIFVMT05HNjQgICAgICAgICAgICAgICAgICAgICAgICAgU2Vnc0dyYW50ZWQ7
DQo+ICAgICAgVUxPTkc2NCAgICAgICAgICAgICAgICAgICAgICAgICBTZWdzQm91bmNlZDsNCj4g
IH07DQo+IEBAIC0xMzgsMTIgKzE1MiwxMyBAQCB4ZW5fd21iKCkNCj4gIH0NCj4gDQo+ICBzdGF0
aWMgRk9SQ0VJTkxJTkUgVk9JRA0KPiAtX19Qcm90b2NvbEluc2VydCgNCj4gLSAgICBJTiAgUFhF
TlZCRF9QUk9UT0NPTCAgICAgICAgUHJvdG9jb2wsDQo+ICtfX1JpbmdJbnNlcnQoDQo+ICsgICAg
SU4gIFBYRU5WQkRfUklORyAgICAgICAgUmluZywNCj4gICAgICBJTiAgUFhFTlZCRF9SRVFVRVNU
ICAgICBSZXF1ZXN0LA0KPiAgICAgIElOICBibGtpZl9yZXF1ZXN0X3QqICAgIHJlcQ0KPiAgICAg
ICkNCj4gIHsNCj4gKyAgICBQWEVOVkJEX1BST1RPQ09MICAgICAgICBQcm90b2NvbCA9IFJpbmct
PlByb3RvY29sOw0KPiAgICAgIFBYRU5WQkRfR1JBTlRFUiAgICAgICAgIEdyYW50ZXIgPSBGcm9u
dGVuZEdldEdyYW50ZXIoUHJvdG9jb2wtDQo+ID5Gcm9udGVuZCk7DQo+IA0KPiAgICAgIHN3aXRj
aCAoUmVxdWVzdC0+T3BlcmF0aW9uKSB7DQo+IEBAIC0yMzQsNyArMjQ5LDcgQEAgX19Qcm90b2Nv
bEluc2VydCgNCj4gICAgICAgICAgQVNTRVJUKEZBTFNFKTsNCj4gICAgICAgICAgYnJlYWs7DQo+
ICAgICAgfQ0KPiAtICAgICsrUHJvdG9jb2wtPlN1Ym1pdHRlZDsNCj4gKyAgICArK1JpbmctPlN1
Ym1pdHRlZDsNCj4gIH0NCj4gDQo+ICBzdGF0aWMgUFhFTlZCRF9JTkRJUkVDVA0KPiBAQCAtNDAw
LDE1ICs0MTUsMTYgQEAgUHJvdG9jb2xQdXRSZXF1ZXN0KA0KPiAgfQ0KPiANCj4gIHN0YXRpYyBG
T1JDRUlOTElORSBQWEVOVkJEX1JFUVVFU1QNCj4gLVByb3RvY29sRmluZFJlcXVlc3QoDQo+IC0g
ICAgSU4gIFBYRU5WQkRfUFJPVE9DT0wgICAgUHJvdG9jb2wsDQo+ICtSaW5nRmluZFJlcXVlc3Qo
DQo+ICsgICAgSU4gIFBYRU5WQkRfUklORyAgICBSaW5nLA0KPiAgICAgIElOICBVTE9ORzY0ICAg
ICAgICAgSWQNCj4gICAgICApDQo+ICB7DQo+ICAgICAgS0lSUUwgICAgICAgICAgICAgICBJcnFs
Ow0KPiAgICAgIFBMSVNUX0VOVFJZICAgICAgICAgTGlzdEVudHJ5Ow0KPiAgICAgIFBYRU5WQkRf
UkVRVUVTVCAgICAgUmVxdWVzdDsNCj4gLSAgICBQWEVOVkJEX1FVRVVFICAgICAgIFF1ZXVlID0g
JlByb3RvY29sLT5TdWJtaXR0ZWRSZXFzOw0KPiArICAgIFBYRU5WQkRfUVVFVUUgICAgICAgUXVl
dWUgPSAmUmluZy0+U3VibWl0dGVkUmVxczsNCj4gKyAgICBQWEVOVkJEX1BST1RPQ09MICAgIFBy
b3RvY29sID0gUmluZy0+UHJvdG9jb2w7DQo+IA0KPiAgICAgIEtlQWNxdWlyZVNwaW5Mb2NrKCZR
dWV1ZS0+TG9jaywgJklycWwpOw0KPiANCj4gQEAgLTQyNSw0MCArNDQxLDQxIEBAIFByb3RvY29s
RmluZFJlcXVlc3QoDQo+ICAgICAgfQ0KPiANCj4gICAgICBLZVJlbGVhc2VTcGluTG9jaygmUXVl
dWUtPkxvY2ssIElycWwpOw0KPiAtICAgIFdhcm5pbmcoIlRhcmdldFslZF0gOiBUYWcgJWxseCBu
b3QgZm91bmQgaW4gc3VibWl0dGVkIGxpc3QgKCV1IGl0ZW1zKVxuIiwNCj4gKyAgICBXYXJuaW5n
KCJUYXJnZXRbJWRdWyV1XSA6IFRhZyAlbGx4IG5vdCBmb3VuZCBpbiBzdWJtaXR0ZWQgbGlzdCAo
JXUNCj4gaXRlbXMpXG4iLA0KPiAgICAgICAgICAgICAgRnJvbnRlbmRHZXRUYXJnZXRJZChQcm90
b2NvbC0+RnJvbnRlbmQpLA0KPiArICAgICAgICAgICAgUmluZy0+SW5kZXgsDQo+ICAgICAgICAg
ICAgICBJZCwNCj4gICAgICAgICAgICAgIFF1ZXVlQ291bnQoUXVldWUpKTsNCj4gICAgICByZXR1
cm4gTlVMTDsNCj4gIH0NCj4gDQo+ICBzdGF0aWMgRk9SQ0VJTkxJTkUgVk9JRA0KPiAtX19Qcm90
b2NvbEluY0Jsa2lmT3BDb3VudCgNCj4gLSAgICBJTiAgUFhFTlZCRF9QUk9UT0NPTCAgICBQcm90
b2NvbCwNCj4gK19fUmluZ0luY0Jsa2lmT3BDb3VudCgNCj4gKyAgICBJTiAgUFhFTlZCRF9SSU5H
ICAgIFJpbmcsDQo+ICAgICAgSU4gIFBYRU5WQkRfUkVRVUVTVCBSZXF1ZXN0DQo+ICAgICAgKQ0K
PiAgew0KPiAgICAgIHN3aXRjaCAoUmVxdWVzdC0+T3BlcmF0aW9uKSB7DQo+ICAgICAgY2FzZSBC
TEtJRl9PUF9SRUFEOg0KPiAgICAgICAgICBpZiAoUmVxdWVzdC0+TnJTZWdtZW50cyA+IEJMS0lG
X01BWF9TRUdNRU5UU19QRVJfUkVRVUVTVCkNCj4gLSAgICAgICAgICAgICsrUHJvdG9jb2wtPkJs
a09wSW5kaXJlY3RSZWFkOw0KPiArICAgICAgICAgICAgKytSaW5nLT5CbGtPcEluZGlyZWN0UmVh
ZDsNCj4gICAgICAgICAgZWxzZQ0KPiAtICAgICAgICAgICAgKytQcm90b2NvbC0+QmxrT3BSZWFk
Ow0KPiArICAgICAgICAgICAgKytSaW5nLT5CbGtPcFJlYWQ7DQo+ICAgICAgICAgIGJyZWFrOw0K
PiAgICAgIGNhc2UgQkxLSUZfT1BfV1JJVEU6DQo+ICAgICAgICAgIGlmIChSZXF1ZXN0LT5OclNl
Z21lbnRzID4gQkxLSUZfTUFYX1NFR01FTlRTX1BFUl9SRVFVRVNUKQ0KPiAtICAgICAgICAgICAg
KytQcm90b2NvbC0+QmxrT3BJbmRpcmVjdFdyaXRlOw0KPiArICAgICAgICAgICAgKytSaW5nLT5C
bGtPcEluZGlyZWN0V3JpdGU7DQo+ICAgICAgICAgIGVsc2UNCj4gLSAgICAgICAgICAgICsrUHJv
dG9jb2wtPkJsa09wV3JpdGU7DQo+ICsgICAgICAgICAgICArK1JpbmctPkJsa09wV3JpdGU7DQo+
ICAgICAgICAgIGJyZWFrOw0KPiAgICAgIGNhc2UgQkxLSUZfT1BfV1JJVEVfQkFSUklFUjoNCj4g
LSAgICAgICAgKytQcm90b2NvbC0+QmxrT3BCYXJyaWVyOw0KPiArICAgICAgICArK1JpbmctPkJs
a09wQmFycmllcjsNCj4gICAgICAgICAgYnJlYWs7DQo+ICAgICAgY2FzZSBCTEtJRl9PUF9ESVND
QVJEOg0KPiAtICAgICAgICArK1Byb3RvY29sLT5CbGtPcERpc2NhcmQ7DQo+ICsgICAgICAgICsr
UmluZy0+QmxrT3BEaXNjYXJkOw0KPiAgICAgICAgICBicmVhazsNCj4gICAgICBjYXNlIEJMS0lG
X09QX0ZMVVNIX0RJU0tDQUNIRToNCj4gLSAgICAgICAgKytQcm90b2NvbC0+QmxrT3BGbHVzaDsN
Cj4gKyAgICAgICAgKytSaW5nLT5CbGtPcEZsdXNoOw0KPiAgICAgICAgICBicmVhazsNCj4gICAg
ICBkZWZhdWx0Og0KPiAgICAgICAgICBBU1NFUlQoRkFMU0UpOw0KPiBAQCAtNDY3LDcgKzQ4NCw3
IEBAIF9fUHJvdG9jb2xJbmNCbGtpZk9wQ291bnQoDQo+ICB9DQo+IA0KPiAgc3RhdGljIEZPUkNF
SU5MSU5FIFVMT05HDQo+IC1fX1Byb3RvY29sU2VjdG9yc1BlclBhZ2UoDQo+ICtfX1NlY3RvcnNQ
ZXJQYWdlKA0KPiAgICAgIElOICBVTE9ORyAgIFNlY3RvclNpemUNCj4gICAgICApDQo+ICB7DQo+
IEBAIC00NzYsNyArNDkzLDcgQEAgX19Qcm90b2NvbFNlY3RvcnNQZXJQYWdlKA0KPiAgfQ0KPiAN
Cj4gIHN0YXRpYyBGT1JDRUlOTElORSBWT0lEDQo+IC1fX1Byb3RvY29sT3BlcmF0aW9uKA0KPiAr
X19PcGVyYXRpb24oDQo+ICAgICAgSU4gIFVDSEFSICAgICAgIENkYk9wLA0KPiAgICAgIE9VVCBQ
VUNIQVIgICAgICBQcm90b2NvbE9wLA0KPiAgICAgIE9VVCBQQk9PTEVBTiAgICBSZWFkT25seQ0K
PiBAQCAtNDk2LDIyICs1MTMsOCBAQCBfX1Byb3RvY29sT3BlcmF0aW9uKA0KPiAgICAgIH0NCj4g
IH0NCj4gDQo+IC1zdGF0aWMgRk9SQ0VJTkxJTkUgTU1fUEFHRV9QUklPUklUWQ0KPiAtX19Qcm90
b2NvbFByaW9yaXR5KA0KPiAtICAgIElOICBQWEVOVkJEX1BST1RPQ09MICAgIFByb3RvY29sDQo+
IC0gICAgKQ0KPiAtew0KPiAtICAgIFBYRU5WQkRfQ0FQUyAgICAgICAgQ2FwcyA9IEZyb250ZW5k
R2V0Q2FwcyhQcm90b2NvbC0+RnJvbnRlbmQpOw0KPiAtICAgIGlmICghKENhcHMtPlBhZ2luZyB8
fA0KPiAtICAgICAgICAgIENhcHMtPkhpYmVybmF0aW9uIHx8DQo+IC0gICAgICAgICAgQ2Fwcy0+
RHVtcEZpbGUpKQ0KPiAtICAgICAgICByZXR1cm4gTm9ybWFsUGFnZVByaW9yaXR5Ow0KPiAtDQo+
IC0gICAgcmV0dXJuIEhpZ2hQYWdlUHJpb3JpdHk7DQo+IC19DQo+IC0NCj4gIHN0YXRpYyBGT1JD
RUlOTElORSBWT0lEDQo+IC1Qcm90b2NvbFJlcXVlc3RDb3B5T3V0cHV0KA0KPiArX19SZXF1ZXN0
Q29weU91dHB1dCgNCj4gICAgICBJTiAgUFhFTlZCRF9SRVFVRVNUIFJlcXVlc3QNCj4gICAgICAp
DQo+ICB7DQo+IEBAIC01MzQsNTMyICs1MzcsMTM2IEBAIFByb3RvY29sUmVxdWVzdENvcHlPdXRw
dXQoDQo+ICAgICAgfQ0KPiAgfQ0KPiANCj4gLXN0YXRpYyBCT09MRUFODQo+IC1Qcm90b2NvbFBy
ZXBhcmVTZWdtZW50KA0KPiAtICAgIElOICBQWEVOVkJEX1BST1RPQ09MICAgIFByb3RvY29sLA0K
PiAtICAgIElOICBQWEVOVkJEX1NFR01FTlQgU2VnbWVudCwNCj4gLSAgICBJTiAgUFhFTlZCRF9T
UkJFWFQgIFNyYkV4dCwNCj4gLSAgICBJTiAgQk9PTEVBTiAgICAgICAgIFJlYWRPbmx5LA0KPiAt
ICAgIElOICBVTE9ORyAgICAgICAgICAgU2VjdG9yc0xlZnQsDQo+IC0gICAgT1VUIFBVTE9ORyAg
ICAgICAgICBTZWN0b3JzTm93DQo+ICtzdGF0aWMgRk9SQ0VJTkxJTkUgVk9JRA0KPiArUmluZ1F1
ZXVlUmVxdWVzdExpc3QoDQo+ICsgICAgSU4gIFBYRU5WQkRfUklORyAgICAgICAgUmluZywNCj4g
KyAgICBJTiAgUExJU1RfRU5UUlkgICAgICAgICBMaXN0DQo+ICAgICAgKQ0KPiAgew0KPiAtICAg
IFBGTl9OVU1CRVIgICAgICAgICAgUGZuOw0KPiAtICAgIFVMT05HICAgICAgICAgICAgICAgT2Zm
c2V0Ow0KPiAtICAgIFVMT05HICAgICAgICAgICAgICAgTGVuZ3RoOw0KPiAtICAgIE5UU1RBVFVT
ICAgICAgICAgICAgU3RhdHVzOw0KPiAtICAgIFBYRU5WQkRfR1JBTlRFUiAgICAgR3JhbnRlciA9
IEZyb250ZW5kR2V0R3JhbnRlcihQcm90b2NvbC0NCj4gPkZyb250ZW5kKTsNCj4gLSAgICBjb25z
dCBVTE9ORyAgICAgICAgIFNlY3RvclNpemUgPSBGcm9udGVuZEdldERpc2tJbmZvKFByb3RvY29s
LT5Gcm9udGVuZCktDQo+ID5TZWN0b3JTaXplOw0KPiAtICAgIGNvbnN0IFVMT05HICAgICAgICAg
U2VjdG9yc1BlclBhZ2UgPQ0KPiBfX1Byb3RvY29sU2VjdG9yc1BlclBhZ2UoU2VjdG9yU2l6ZSk7
DQo+IC0gICAgUFhFTlZCRF9UQVJHRVQgICAgICBUYXJnZXQgPSBGcm9udGVuZEdldFRhcmdldChQ
cm90b2NvbC0+RnJvbnRlbmQpOw0KPiAtICAgIFBYRU5WQkRfQURBUFRFUiAgICAgQWRhcHRlciA9
IFRhcmdldEdldEFkYXB0ZXIoVGFyZ2V0KTsNCj4gLQ0KPiAtICAgIFBmbiA9IEFkYXB0ZXJHZXRO
ZXh0U0dFbnRyeShBZGFwdGVyLA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBT
cmJFeHQsDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsDQo+IC0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICZPZmZzZXQsDQo+IC0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICZMZW5ndGgpOw0KPiAtICAgIGlmICgoT2Zmc2V0ICYgKFNlY3RvclNpemUg
LSAxKSkgPT0gMCAmJg0KPiAtICAgICAgICAoTGVuZ3RoICYgKFNlY3RvclNpemUgLSAxKSkgPT0g
MCkgew0KPiAtICAgICAgICArK1Byb3RvY29sLT5TZWdzR3JhbnRlZDsNCj4gLSAgICAgICAgLy8g
Z2V0IGZpcnN0IHNlY3RvciwgbGFzdCBzZWN0b3IgYW5kIGNvdW50DQo+IC0gICAgICAgIFNlZ21l
bnQtPkZpcnN0U2VjdG9yICAgID0gKFVDSEFSKSgoT2Zmc2V0ICsgU2VjdG9yU2l6ZSAtIDEpIC8N
Cj4gU2VjdG9yU2l6ZSk7DQo+IC0gICAgICAgICpTZWN0b3JzTm93ICAgICAgICAgICAgID0gX19t
aW4oU2VjdG9yc0xlZnQsIFNlY3RvcnNQZXJQYWdlIC0gU2VnbWVudC0NCj4gPkZpcnN0U2VjdG9y
KTsNCj4gLSAgICAgICAgU2VnbWVudC0+TGFzdFNlY3RvciAgICAgPSAoVUNIQVIpKFNlZ21lbnQt
PkZpcnN0U2VjdG9yICsNCj4gKlNlY3RvcnNOb3cgLSAxKTsNCj4gLQ0KPiAtICAgICAgICBBU1NF
UlQzVSgoTGVuZ3RoIC8gU2VjdG9yU2l6ZSksID09LCAqU2VjdG9yc05vdyk7DQo+IC0gICAgfSBl
bHNlIHsNCj4gLSAgICAgICAgUFhFTlZCRF9CT1VOQ0UgICAgICBCb3VuY2U7DQo+IC0gICAgICAg
IFBNREwgICAgICAgICAgICAgICAgTWRsOw0KPiAtDQo+IC0gICAgICAgICsrUHJvdG9jb2wtPlNl
Z3NCb3VuY2VkOw0KPiAtICAgICAgICAvLyBnZXQgZmlyc3Qgc2VjdG9yLCBsYXN0IHNlY3RvciBh
bmQgY291bnQNCj4gLSAgICAgICAgU2VnbWVudC0+Rmlyc3RTZWN0b3IgICAgPSAwOw0KPiAtICAg
ICAgICAqU2VjdG9yc05vdyAgICAgICAgICAgICA9IF9fbWluKFNlY3RvcnNMZWZ0LCBTZWN0b3Jz
UGVyUGFnZSk7DQo+IC0gICAgICAgIFNlZ21lbnQtPkxhc3RTZWN0b3IgICAgID0gKFVDSEFSKSgq
U2VjdG9yc05vdyAtIDEpOw0KPiAtDQo+IC0gICAgICAgIEJvdW5jZSA9IEFkYXB0ZXJHZXRCb3Vu
Y2UoQWRhcHRlcik7DQo+IC0gICAgICAgIGlmIChCb3VuY2UgPT0gTlVMTCkNCj4gLSAgICAgICAg
ICAgIGdvdG8gZmFpbDE7DQo+IC0gICAgICAgIFNlZ21lbnQtPkJvdW5jZSA9IEJvdW5jZTsNCj4g
LQ0KPiAtI3ByYWdtYSB3YXJuaW5nKHB1c2gpDQo+IC0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZToy
ODE0NSkNCj4gLSAgICAgICAgTWRsID0gJkJvdW5jZS0+U291cmNlTWRsOw0KPiAtICAgICAgICBN
ZGwtPk5leHQgICAgICAgICAgICAgICA9IE5VTEw7DQo+IC0gICAgICAgIE1kbC0+U2l6ZSAgICAg
ICAgICAgICAgID0gKFNIT1JUKShzaXplb2YoTURMKSArIHNpemVvZihQRk5fTlVNQkVSKSk7DQo+
IC0gICAgICAgIE1kbC0+TWRsRmxhZ3MgICAgICAgICAgID0gTURMX1BBR0VTX0xPQ0tFRDsNCj4g
LSAgICAgICAgTWRsLT5Qcm9jZXNzICAgICAgICAgICAgPSBOVUxMOw0KPiAtICAgICAgICBNZGwt
Pk1hcHBlZFN5c3RlbVZhICAgICA9IE5VTEw7DQo+IC0gICAgICAgIE1kbC0+U3RhcnRWYSAgICAg
ICAgICAgID0gTlVMTDsNCj4gLSAgICAgICAgTWRsLT5CeXRlQ291bnQgICAgICAgICAgPSBMZW5n
dGg7DQo+IC0gICAgICAgIE1kbC0+Qnl0ZU9mZnNldCAgICAgICAgID0gT2Zmc2V0Ow0KPiAtICAg
ICAgICBCb3VuY2UtPlNvdXJjZVBmblswXSAgICA9IFBmbjsNCj4gLQ0KPiAtICAgICAgICBpZiAo
TGVuZ3RoIDwgKlNlY3RvcnNOb3cgKiBTZWN0b3JTaXplKSB7DQo+IC0gICAgICAgICAgICBQZm4g
PSBBZGFwdGVyR2V0TmV4dFNHRW50cnkoQWRhcHRlciwNCj4gLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBTcmJFeHQsDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgTGVuZ3RoLA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICZPZmZzZXQsDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJkxlbmd0aCk7DQo+IC0gICAgICAgICAgICBNZGwtPlNpemUgICAgICAgICAgICs9IHNp
emVvZihQRk5fTlVNQkVSKTsNCj4gLSAgICAgICAgICAgIE1kbC0+Qnl0ZUNvdW50ICAgICAgKz0g
TGVuZ3RoOw0KPiAtICAgICAgICAgICAgQm91bmNlLT5Tb3VyY2VQZm5bMV0gPSBQZm47DQo+IC0g
ICAgICAgIH0NCj4gLSNwcmFnbWEgd2FybmluZyhwb3ApDQo+IC0NCj4gLSAgICAgICAgQVNTRVJU
KChNZGwtPkJ5dGVDb3VudCAmIChTZWN0b3JTaXplIC0gMSkpID09IDApOw0KPiAtICAgICAgICBB
U1NFUlQzVShNZGwtPkJ5dGVDb3VudCwgPD0sIFBBR0VfU0laRSk7DQo+IC0gICAgICAgIEFTU0VS
VDNVKCpTZWN0b3JzTm93LCA9PSwgKE1kbC0+Qnl0ZUNvdW50IC8gU2VjdG9yU2l6ZSkpOw0KPiAt
DQo+IC0gICAgICAgIEJvdW5jZS0+U291cmNlUHRyID0gTW1NYXBMb2NrZWRQYWdlc1NwZWNpZnlD
YWNoZShNZGwsDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBLZXJuZWxNb2RlLA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTW1DYWNoZWQsDQo+IC0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLA0KPiAtICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFM
U0UsDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX1Byb3RvY29sUHJpb3JpdHkoUHJvdG9jb2wpKTsNCj4gLSAgICAgICAgaWYgKEJv
dW5jZS0+U291cmNlUHRyID09IE5VTEwpDQo+IC0gICAgICAgICAgICBnb3RvIGZhaWwyOw0KPiAt
DQo+IC0gICAgICAgIEFTU0VSVDNQKE1tR2V0TWRsUGZuQXJyYXkoTWRsKVswXSwgPT0sIEJvdW5j
ZS0+U291cmNlUGZuWzBdKTsNCj4gLSAgICAgICAgQVNTRVJUM1AoTW1HZXRNZGxQZm5BcnJheShN
ZGwpWzFdLCA9PSwgQm91bmNlLT5Tb3VyY2VQZm5bMV0pOw0KPiArICAgIGZvciAoOzspIHsNCj4g
KyAgICAgICAgUFhFTlZCRF9SRVFVRVNUIFJlcXVlc3Q7DQo+ICsgICAgICAgIFBMSVNUX0VOVFJZ
ICAgICBMaXN0RW50cnk7DQo+IA0KPiAtICAgICAgICAvLyBjb3B5IGNvbnRlbnRzIGluDQo+IC0g
ICAgICAgIGlmIChSZWFkT25seSkgeyAvLyBPcGVyYXRpb24gPT0gQkxLSUZfT1BfV1JJVEUNCj4g
LSAgICAgICAgICAgIFJ0bENvcHlNZW1vcnkoQm91bmNlLT5Cb3VuY2VQdHIsDQo+IC0gICAgICAg
ICAgICAgICAgICAgICAgICAgIEJvdW5jZS0+U291cmNlUHRyLA0KPiAtICAgICAgICAgICAgICAg
ICAgICAgICAgICBNbUdldE1kbEJ5dGVDb3VudCgmQm91bmNlLT5Tb3VyY2VNZGwpKTsNCj4gLSAg
ICAgICAgfQ0KPiArICAgICAgICBMaXN0RW50cnkgPSBSZW1vdmVIZWFkTGlzdChMaXN0KTsNCj4g
KyAgICAgICAgaWYgKExpc3RFbnRyeSA9PSBMaXN0KQ0KPiArICAgICAgICAgICAgYnJlYWs7DQo+
IA0KPiAtICAgICAgICBQZm4gPSBNbUdldE1kbFBmbkFycmF5KEJvdW5jZS0+Qm91bmNlTWRsKVsw
XTsNCj4gKyAgICAgICAgUmVxdWVzdCA9IENPTlRBSU5JTkdfUkVDT1JEKExpc3RFbnRyeSwgWEVO
VkJEX1JFUVVFU1QsDQo+IExpc3RFbnRyeSk7DQo+ICsgICAgICAgIF9fUmluZ0luY0Jsa2lmT3BD
b3VudChSaW5nLCBSZXF1ZXN0KTsNCj4gKyAgICAgICAgUXVldWVBcHBlbmQoJlJpbmctPlByZXBh
cmVkUmVxcywgJlJlcXVlc3QtPkxpc3RFbnRyeSk7DQo+ICAgICAgfQ0KPiAtDQo+IC0gICAgLy8g
R3JhbnQgc2VnbWVudCdzIHBhZ2UNCj4gLSAgICBTdGF0dXMgPSBHcmFudGVyR2V0KEdyYW50ZXIs
IFBmbiwgUmVhZE9ubHksICZTZWdtZW50LT5HcmFudCk7DQo+IC0gICAgaWYgKCFOVF9TVUNDRVNT
KFN0YXR1cykpDQo+IC0gICAgICAgIGdvdG8gZmFpbDM7DQo+IC0NCj4gLSAgICByZXR1cm4gVFJV
RTsNCj4gLQ0KPiAtZmFpbDM6DQo+IC1mYWlsMjoNCj4gLWZhaWwxOg0KPiAtICAgIHJldHVybiBG
QUxTRTsNCj4gIH0NCj4gDQo+ICBzdGF0aWMgQk9PTEVBTg0KPiAtUHJvdG9jb2xQcmVwYXJlQmxr
aWZSZWFkV3JpdGUoDQo+IC0gICAgSU4gIFBYRU5WQkRfUFJPVE9DT0wgICAgUHJvdG9jb2wsDQo+
IC0gICAgSU4gIFBYRU5WQkRfUkVRVUVTVCBSZXF1ZXN0LA0KPiAtICAgIElOICBQWEVOVkJEX1NS
QkVYVCAgU3JiRXh0LA0KPiAtICAgIElOICBVTE9ORyAgICAgICAgICAgTWF4U2VnbWVudHMsDQo+
IC0gICAgSU4gIFVMT05HNjQgICAgICAgICBTZWN0b3JTdGFydCwNCj4gLSAgICBJTiAgVUxPTkcg
ICAgICAgICAgIFNlY3RvcnNMZWZ0LA0KPiAtICAgIE9VVCBQVUxPTkcgICAgICAgICAgU2VjdG9y
c0RvbmUNCj4gK1JpbmdTdWJtaXQoDQo+ICsgICAgSU4gIFBYRU5WQkRfUklORyAgICBSaW5nLA0K
PiArICAgIElOICBQWEVOVkJEX1JFUVVFU1QgUmVxdWVzdA0KPiAgICAgICkNCj4gIHsNCj4gLSAg
ICBQU0NTSV9SRVFVRVNUX0JMT0NLIFNyYiA9IFNyYkV4dC0+U3JiOw0KPiAtICAgIFVDSEFSICAg
ICAgICAgICAgICAgT3BlcmF0aW9uOw0KPiAtICAgIEJPT0xFQU4gICAgICAgICAgICAgUmVhZE9u
bHk7DQo+IC0gICAgVUxPTkcgICAgICAgICAgICAgICBJbmRleDsNCj4gLSAgICBfX1Byb3RvY29s
T3BlcmF0aW9uKENkYl9PcGVyYXRpb25FeChTcmIpLCAmT3BlcmF0aW9uLCAmUmVhZE9ubHkpOw0K
PiAtDQo+IC0gICAgUmVxdWVzdC0+T3BlcmF0aW9uICA9IE9wZXJhdGlvbjsNCj4gLSAgICBSZXF1
ZXN0LT5OclNlZ21lbnRzID0gMDsNCj4gLSAgICBSZXF1ZXN0LT5GaXJzdFNlY3RvciA9IFNlY3Rv
clN0YXJ0Ow0KPiAtDQo+IC0gICAgZm9yIChJbmRleCA9IDA7DQo+IC0gICAgICAgICAgICAgICAg
SW5kZXggPCBNYXhTZWdtZW50cyAmJg0KPiAtICAgICAgICAgICAgICAgIFNlY3RvcnNMZWZ0ID4g
MDsNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICsrSW5kZXgpIHsNCj4gLSAgICAgICAgUFhF
TlZCRF9TRUdNRU5UIFNlZ21lbnQ7DQo+IC0gICAgICAgIFVMT05HICAgICAgICAgICBTZWN0b3Jz
Tm93Ow0KPiAtDQo+IC0gICAgICAgIFNlZ21lbnQgPSBQcm90b2NvbEdldFNlZ21lbnQoUHJvdG9j
b2wpOw0KPiAtICAgICAgICBpZiAoU2VnbWVudCA9PSBOVUxMKQ0KPiAtICAgICAgICAgICAgZ290
byBmYWlsMTsNCj4gLQ0KPiAtICAgICAgICBJbnNlcnRUYWlsTGlzdCgmUmVxdWVzdC0+U2VnbWVu
dHMsICZTZWdtZW50LT5MaXN0RW50cnkpOw0KPiAtICAgICAgICArK1JlcXVlc3QtPk5yU2VnbWVu
dHM7DQo+IC0NCj4gLSAgICAgICAgaWYgKCFQcm90b2NvbFByZXBhcmVTZWdtZW50KFByb3RvY29s
LA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWdtZW50LA0KPiAtICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBTcmJFeHQsDQo+IC0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFJlYWRPbmx5LA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBTZWN0b3JzTGVmdCwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlNlY3Rv
cnNOb3cpKQ0KPiAtICAgICAgICAgICAgZ290byBmYWlsMjsNCj4gKyAgICBLSVJRTCAgICAgICAg
ICAgICAgIElycWw7DQo+ICsgICAgYmxraWZfcmVxdWVzdF90KiAgICByZXE7DQo+ICsgICAgQk9P
TEVBTiAgICAgICAgICAgICBOb3RpZnk7DQo+ICsgICAgUFhFTlZCRF9QUk9UT0NPTCAgICBQcm90
b2NvbDsNCj4gDQo+IC0gICAgICAgICpTZWN0b3JzRG9uZSArPSBTZWN0b3JzTm93Ow0KPiAtICAg
ICAgICBTZWN0b3JzTGVmdCAgLT0gU2VjdG9yc05vdzsNCj4gKyAgICBLZUFjcXVpcmVTcGluTG9j
aygmUmluZy0+TG9jaywgJklycWwpOw0KPiArICAgIGlmIChSSU5HX0ZVTEwoJlJpbmctPkZyb250
KSkgew0KPiArICAgICAgICBLZVJlbGVhc2VTcGluTG9jaygmUmluZy0+TG9jaywgSXJxbCk7DQo+
ICsgICAgICAgIHJldHVybiBGQUxTRTsNCj4gICAgICB9DQo+IC0gICAgQVNTRVJUM1UoUmVxdWVz
dC0+TnJTZWdtZW50cywgPiwgMCk7DQo+IC0gICAgQVNTRVJUM1UoUmVxdWVzdC0+TnJTZWdtZW50
cywgPD0sIE1heFNlZ21lbnRzKTsNCj4gLQ0KPiAtICAgIHJldHVybiBUUlVFOw0KPiAtDQo+IC1m
YWlsMjoNCj4gLWZhaWwxOg0KPiAtICAgIHJldHVybiBGQUxTRTsNCj4gLX0NCj4gDQo+IC1zdGF0
aWMgQk9PTEVBTg0KPiAtUHJvdG9jb2xQcmVwYXJlQmxraWZJbmRpcmVjdCgNCj4gLSAgICBJTiAg
UFhFTlZCRF9QUk9UT0NPTCAgICBQcm90b2NvbCwNCj4gLSAgICBJTiAgUFhFTlZCRF9SRVFVRVNU
IFJlcXVlc3QNCj4gLSAgICApDQo+IC17DQo+IC0gICAgVUxPTkcgICAgICAgICAgICAgICBJbmRl
eDsNCj4gLSAgICBVTE9ORyAgICAgICAgICAgICAgIE5yU2VnbWVudHMgPSAwOw0KPiArICAgIHJl
cSA9IFJJTkdfR0VUX1JFUVVFU1QoJlJpbmctPkZyb250LCBSaW5nLT5Gcm9udC5yZXFfcHJvZF9w
dnQpOw0KPiArICAgIF9fUmluZ0luc2VydChSaW5nLCBSZXF1ZXN0LCByZXEpOw0KPiArICAgIEtl
TWVtb3J5QmFycmllcigpOw0KPiArICAgICsrUmluZy0+RnJvbnQucmVxX3Byb2RfcHZ0Ow0KPiAN
Cj4gLSAgICBmb3IgKEluZGV4ID0gMDsNCj4gLSAgICAgICAgICAgIEluZGV4IDwgQkxLSUZfTUFY
X0lORElSRUNUX1BBR0VTX1BFUl9SRVFVRVNUICYmDQo+IC0gICAgICAgICAgICBOclNlZ21lbnRz
IDwgUmVxdWVzdC0+TnJTZWdtZW50czsNCj4gLSAgICAgICAgICAgICAgICArK0luZGV4KSB7DQo+
IC0gICAgICAgIFBYRU5WQkRfSU5ESVJFQ1QgICAgSW5kaXJlY3Q7DQo+ICsgICAgUklOR19QVVNI
X1JFUVVFU1RTX0FORF9DSEVDS19OT1RJRlkoJlJpbmctPkZyb250LCBOb3RpZnkpOw0KPiArICAg
IEtlUmVsZWFzZVNwaW5Mb2NrKCZSaW5nLT5Mb2NrLCBJcnFsKTsNCj4gDQo+IC0gICAgICAgIElu
ZGlyZWN0ID0gUHJvdG9jb2xHZXRJbmRpcmVjdChQcm90b2NvbCk7DQo+IC0gICAgICAgIGlmIChJ
bmRpcmVjdCA9PSBOVUxMKQ0KPiAtICAgICAgICAgICAgZ290byBmYWlsMTsNCj4gLSAgICAgICAg
SW5zZXJ0VGFpbExpc3QoJlJlcXVlc3QtPkluZGlyZWN0cywgJkluZGlyZWN0LT5MaXN0RW50cnkp
Ow0KPiArICAgIGlmIChOb3RpZnkpIHsNCj4gKyAgICAgICAgUHJvdG9jb2wgPSBSaW5nLT5Qcm90
b2NvbDsNCj4gKyAgICAgICAgaWYgKCFQcm90b2NvbC0+RW5hYmxlZCkNCj4gKyAgICAgICAgICAg
IHJldHVybiBUUlVFOw0KPiANCj4gLSAgICAgICAgTnJTZWdtZW50cyArPSBYRU5WQkRfTUFYX1NF
R01FTlRTX1BFUl9QQUdFOw0KPiArICAgICAgICBYRU5CVVNfRVZUQ0hOKFNlbmQsDQo+ICsgICAg
ICAgICAgICAgICAgICAgICAgJlByb3RvY29sLT5FdnRjaG5JbnRlcmZhY2UsDQo+ICsgICAgICAg
ICAgICAgICAgICAgICAgUmluZy0+Q2hhbm5lbCk7DQo+ICAgICAgfQ0KPiANCj4gICAgICByZXR1
cm4gVFJVRTsNCj4gLQ0KPiAtZmFpbDE6DQo+IC0gICAgcmV0dXJuIEZBTFNFOw0KPiAgfQ0KPiAN
Cj4gLXN0YXRpYyBGT1JDRUlOTElORSBVTE9ORw0KPiAtUHJvdG9jb2xVc2VJbmRpcmVjdCgNCj4g
LSAgICBJTiAgUFhFTlZCRF9QUk9UT0NPTCAgICBQcm90b2NvbCwNCj4gLSAgICBJTiAgVUxPTkcg
ICAgICAgICAgIFNlY3RvcnNMZWZ0DQo+ICtzdGF0aWMgRk9SQ0VJTkxJTkUgQk9PTEVBTg0KPiAr
UmluZ1N1Ym1pdFJlcXVlc3RzKA0KPiArICAgIElOICBQWEVOVkJEX1JJTkcgICAgUmluZw0KPiAg
ICAgICkNCj4gIHsNCj4gLSAgICBjb25zdCBVTE9ORyBTZWN0b3JzUGVyUGFnZSA9DQo+IF9fUHJv
dG9jb2xTZWN0b3JzUGVyUGFnZShGcm9udGVuZEdldERpc2tJbmZvKFByb3RvY29sLT5Gcm9udGVu
ZCktDQo+ID5TZWN0b3JTaXplKTsNCj4gLSAgICBjb25zdCBVTE9ORyBNYXhJbmRpcmVjdFNlZ3Mg
PSBGcm9udGVuZEdldEZlYXR1cmVzKFByb3RvY29sLQ0KPiA+RnJvbnRlbmQpLT5JbmRpcmVjdDsN
Cj4gLQ0KPiAtICAgIGlmIChNYXhJbmRpcmVjdFNlZ3MgPD0gQkxLSUZfTUFYX1NFR01FTlRTX1BF
Ul9SRVFVRVNUKQ0KPiAtICAgICAgICByZXR1cm4gQkxLSUZfTUFYX1NFR01FTlRTX1BFUl9SRVFV
RVNUOyAvLyBub3Qgc3VwcG9ydGVkDQo+IC0NCj4gLSAgICBpZiAoU2VjdG9yc0xlZnQgPCBCTEtJ
Rl9NQVhfU0VHTUVOVFNfUEVSX1JFUVVFU1QgKg0KPiBTZWN0b3JzUGVyUGFnZSkNCj4gLSAgICAg
ICAgcmV0dXJuIEJMS0lGX01BWF9TRUdNRU5UU19QRVJfUkVRVUVTVDsgLy8gZmlyc3QgaW50byBh
IHNpbmdsZQ0KPiBCTEtJRl9PUF97UkVBRC9XUklURX0NCj4gKyAgICBQWEVOVkJEX1BST1RPQ09M
ICAgIFByb3RvY29sID0gUmluZy0+UHJvdG9jb2w7DQo+IA0KPiAtICAgIHJldHVybiBNYXhJbmRp
cmVjdFNlZ3M7DQo+IC19DQo+ICsgICAgaWYgKCFQcm90b2NvbC0+RW5hYmxlZCkgew0KPiArICAg
ICAgICBpZiAoUXVldWVDb3VudCgmUmluZy0+UHJlcGFyZWRSZXFzKSkNCj4gKyAgICAgICAgICAg
IFdhcm5pbmcoIlRhcmdldFslZF1bJXVdIDogUGF1c2VkLCBub3Qgc3VibWl0dGluZyBuZXcgcmVx
dWVzdHMNCj4gKCV1KVxuIiwNCj4gKyAgICAgICAgICAgICAgICAgICAgRnJvbnRlbmRHZXRUYXJn
ZXRJZChQcm90b2NvbC0+RnJvbnRlbmQpLA0KPiArICAgICAgICAgICAgICAgICAgICBSaW5nLT5J
bmRleCwNCj4gKyAgICAgICAgICAgICAgICAgICAgUXVldWVDb3VudCgmUmluZy0+UHJlcGFyZWRS
ZXFzKSk7DQo+ICsgICAgICAgIHJldHVybiBGQUxTRTsNCj4gKyAgICB9DQo+IA0KPiAtc3RhdGlj
IEZPUkNFSU5MSU5FIFZPSUQNCj4gLVByb3RvY29sUXVldWVSZXF1ZXN0TGlzdCgNCj4gLSAgICBJ
TiAgUFhFTlZCRF9QUk9UT0NPTCAgICBQcm90b2NvbCwNCj4gLSAgICBJTiAgUExJU1RfRU5UUlkg
ICAgICAgICBMaXN0DQo+IC0gICAgKQ0KPiAtew0KPiAgICAgIGZvciAoOzspIHsNCj4gICAgICAg
ICAgUFhFTlZCRF9SRVFVRVNUIFJlcXVlc3Q7DQo+ICAgICAgICAgIFBMSVNUX0VOVFJZICAgICBM
aXN0RW50cnk7DQo+IA0KPiAtICAgICAgICBMaXN0RW50cnkgPSBSZW1vdmVIZWFkTGlzdChMaXN0
KTsNCj4gLSAgICAgICAgaWYgKExpc3RFbnRyeSA9PSBMaXN0KQ0KPiArICAgICAgICBMaXN0RW50
cnkgPSBRdWV1ZVBvcCgmUmluZy0+UHJlcGFyZWRSZXFzKTsNCj4gKyAgICAgICAgaWYgKExpc3RF
bnRyeSA9PSBOVUxMKQ0KPiAgICAgICAgICAgICAgYnJlYWs7DQo+IA0KPiAgICAgICAgICBSZXF1
ZXN0ID0gQ09OVEFJTklOR19SRUNPUkQoTGlzdEVudHJ5LCBYRU5WQkRfUkVRVUVTVCwNCj4gTGlz
dEVudHJ5KTsNCj4gLSAgICAgICAgX19Qcm90b2NvbEluY0Jsa2lmT3BDb3VudChQcm90b2NvbCwg
UmVxdWVzdCk7DQo+IC0gICAgICAgIFF1ZXVlQXBwZW5kKCZQcm90b2NvbC0+UHJlcGFyZWRSZXFz
LCAmUmVxdWVzdC0+TGlzdEVudHJ5KTsNCj4gKw0KPiArICAgICAgICBRdWV1ZUFwcGVuZCgmUmlu
Zy0+U3VibWl0dGVkUmVxcywgJlJlcXVlc3QtPkxpc3RFbnRyeSk7DQo+ICsgICAgICAgIEtlTWVt
b3J5QmFycmllcigpOw0KPiArDQo+ICsgICAgICAgIGlmIChSaW5nU3VibWl0KFJpbmcsIFJlcXVl
c3QpKQ0KPiArICAgICAgICAgICAgY29udGludWU7DQo+ICsNCj4gKyAgICAgICAgUXVldWVSZW1v
dmUoJlJpbmctPlN1Ym1pdHRlZFJlcXMsICZSZXF1ZXN0LT5MaXN0RW50cnkpOw0KPiArICAgICAg
ICBRdWV1ZVVuUG9wKCZSaW5nLT5QcmVwYXJlZFJlcXMsICZSZXF1ZXN0LT5MaXN0RW50cnkpOw0K
PiArICAgICAgICBicmVhazsNCj4gICAgICB9DQo+ICsNCj4gKyAgICByZXR1cm4gUXVldWVDb3Vu
dCgmUmluZy0+UHJlcGFyZWRSZXFzKSAhPSAwOw0KPiAgfQ0KPiANCj4gIHN0YXRpYyBGT1JDRUlO
TElORSBWT0lEDQo+IC1Qcm90b2NvbENhbmNlbFJlcXVlc3RMaXN0KA0KPiAtICAgIElOICBQWEVO
VkJEX1BST1RPQ09MICAgIFByb3RvY29sLA0KPiAtICAgIElOICBQTElTVF9FTlRSWSAgICAgTGlz
dA0KPiArUmluZ0NvbXBsZXRlU2h1dGRvd24oDQo+ICsgICAgSU4gIFBYRU5WQkRfUklORyAgICBS
aW5nDQo+ICAgICAgKQ0KPiAgew0KPiArICAgIFBYRU5WQkRfUFJPVE9DT0wgICAgUHJvdG9jb2w7
DQo+ICsgICAgUFhFTlZCRF9UQVJHRVQgICAgICBUYXJnZXQ7DQo+ICsgICAgUFhFTlZCRF9BREFQ
VEVSICAgICBBZGFwdGVyOw0KPiArDQo+ICsgICAgaWYgKFF1ZXVlQ291bnQoJlJpbmctPlNodXRk
b3duU3JicykgPT0gMCkNCj4gKyAgICAgICAgcmV0dXJuOw0KPiArDQo+ICsgICAgaWYgKFF1ZXVl
Q291bnQoJlJpbmctPlByZXBhcmVkUmVxcykgfHwNCj4gKyAgICAgICAgUXVldWVDb3VudCgmUmlu
Zy0+U3VibWl0dGVkUmVxcykpDQo+ICsgICAgICAgIHJldHVybjsNCj4gKw0KPiArICAgIFByb3Rv
Y29sID0gUmluZy0+UHJvdG9jb2w7DQo+ICsgICAgVGFyZ2V0ID0gRnJvbnRlbmRHZXRUYXJnZXQo
UHJvdG9jb2wtPkZyb250ZW5kKTsNCj4gKyAgICBBZGFwdGVyID0gVGFyZ2V0R2V0QWRhcHRlcihU
YXJnZXQpOw0KPiAgICAgIGZvciAoOzspIHsNCj4gLSAgICAgICAgUFhFTlZCRF9SRVFVRVNUIFJl
cXVlc3Q7DQo+IC0gICAgICAgIFBMSVNUX0VOVFJZICAgICBMaXN0RW50cnk7DQo+ICsgICAgICAg
IFBYRU5WQkRfU1JCRVhUICAgICAgU3JiRXh0Ow0KPiArICAgICAgICBQU0NTSV9SRVFVRVNUX0JM
T0NLIFNyYjsNCj4gKyAgICAgICAgUExJU1RfRU5UUlkgICAgICAgICBMaXN0RW50cnk7DQo+IA0K
PiAtICAgICAgICBMaXN0RW50cnkgPSBSZW1vdmVIZWFkTGlzdChMaXN0KTsNCj4gLSAgICAgICAg
aWYgKExpc3RFbnRyeSA9PSBMaXN0KQ0KPiArICAgICAgICBMaXN0RW50cnkgPSBRdWV1ZVBvcCgm
UmluZy0+U2h1dGRvd25TcmJzKTsNCj4gKyAgICAgICAgaWYgKExpc3RFbnRyeSA9PSBOVUxMKQ0K
PiAgICAgICAgICAgICAgYnJlYWs7DQo+IC0NCj4gLSAgICAgICAgUmVxdWVzdCA9IENPTlRBSU5J
TkdfUkVDT1JEKExpc3RFbnRyeSwgWEVOVkJEX1JFUVVFU1QsDQo+IExpc3RFbnRyeSk7DQo+IC0g
ICAgICAgIFByb3RvY29sUHV0UmVxdWVzdChQcm90b2NvbCwgUmVxdWVzdCk7DQo+IC0gICAgfQ0K
PiAtfQ0KPiAtDQo+IC1zdGF0aWMgQk9PTEVBTg0KPiAtUHJvdG9jb2xQcmVwYXJlUmVhZFdyaXRl
KA0KPiAtICAgIElOICBQWEVOVkJEX1BST1RPQ09MICAgICAgICBQcm90b2NvbCwNCj4gLSAgICBJ
TiAgUFhFTlZCRF9TUkJFWFQgICAgICBTcmJFeHQNCj4gLSAgICApDQo+IC17DQo+IC0gICAgUFND
U0lfUkVRVUVTVF9CTE9DSyAgICAgU3JiID0gU3JiRXh0LT5TcmI7DQo+IC0gICAgVUxPTkc2NCAg
ICAgICAgICAgICAgICAgU2VjdG9yU3RhcnQgPSBDZGJfTG9naWNhbEJsb2NrKFNyYik7DQo+IC0g
ICAgVUxPTkcgICAgICAgICAgICAgICAgICAgU2VjdG9yc0xlZnQgPSBDZGJfVHJhbnNmZXJCbG9j
ayhTcmIpOw0KPiAtICAgIExJU1RfRU5UUlkgICAgICAgICAgICAgIExpc3Q7DQo+IC0NCj4gLSAg
ICBTcmItPlNyYlN0YXR1cyA9IFNSQl9TVEFUVVNfUEVORElORzsNCj4gLQ0KPiAtICAgIEluaXRp
YWxpemVMaXN0SGVhZCgmTGlzdCk7DQo+IC0gICAgU3JiRXh0LT5SZXF1ZXN0Q291bnQgPSAwOw0K
PiAtDQo+IC0gICAgd2hpbGUgKFNlY3RvcnNMZWZ0ID4gMCkgew0KPiAtICAgICAgICBVTE9ORyAg
ICAgICAgICAgTWF4U2VnbWVudHM7DQo+IC0gICAgICAgIFVMT05HICAgICAgICAgICBTZWN0b3Jz
RG9uZSA9IDA7DQo+IC0gICAgICAgIFBYRU5WQkRfUkVRVUVTVCBSZXF1ZXN0Ow0KPiAtDQo+IC0g
ICAgICAgIFJlcXVlc3QgPSBQcm90b2NvbEdldFJlcXVlc3QoUHJvdG9jb2wpOw0KPiAtICAgICAg
ICBpZiAoUmVxdWVzdCA9PSBOVUxMKQ0KPiAtICAgICAgICAgICAgZ290byBmYWlsMTsNCj4gLSAg
ICAgICAgSW5zZXJ0VGFpbExpc3QoJkxpc3QsICZSZXF1ZXN0LT5MaXN0RW50cnkpOw0KPiAtICAg
ICAgICBJbnRlcmxvY2tlZEluY3JlbWVudCgmU3JiRXh0LT5SZXF1ZXN0Q291bnQpOw0KPiAtDQo+
IC0gICAgICAgIFJlcXVlc3QtPlNyYkV4dCA9IFNyYkV4dDsNCj4gLSAgICAgICAgTWF4U2VnbWVu
dHMgPSBQcm90b2NvbFVzZUluZGlyZWN0KFByb3RvY29sLCBTZWN0b3JzTGVmdCk7DQo+IC0NCj4g
LSAgICAgICAgaWYgKCFQcm90b2NvbFByZXBhcmVCbGtpZlJlYWRXcml0ZShQcm90b2NvbCwNCj4g
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlcXVlc3QsDQo+IC0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTcmJFeHQsDQo+IC0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXhTZWdtZW50cywNCj4gLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlY3RvclN0YXJ0LA0KPiAtICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VjdG9yc0xlZnQsDQo+IC0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAmU2VjdG9yc0RvbmUpKQ0KPiAtICAgICAgICAgICAg
Z290byBmYWlsMjsNCj4gLQ0KPiAtICAgICAgICBpZiAoTWF4U2VnbWVudHMgPiBCTEtJRl9NQVhf
U0VHTUVOVFNfUEVSX1JFUVVFU1QpIHsNCj4gLSAgICAgICAgICAgIGlmICghUHJvdG9jb2xQcmVw
YXJlQmxraWZJbmRpcmVjdChQcm90b2NvbCwgUmVxdWVzdCkpDQo+IC0gICAgICAgICAgICAgICAg
Z290byBmYWlsMzsNCj4gLSAgICAgICAgfQ0KPiAtDQo+IC0gICAgICAgIFNlY3RvcnNMZWZ0IC09
IFNlY3RvcnNEb25lOw0KPiAtICAgICAgICBTZWN0b3JTdGFydCArPSBTZWN0b3JzRG9uZTsNCj4g
LSAgICB9DQo+IC0NCj4gLSAgICBQcm90b2NvbFF1ZXVlUmVxdWVzdExpc3QoUHJvdG9jb2wsICZM
aXN0KTsNCj4gLSAgICByZXR1cm4gVFJVRTsNCj4gLQ0KPiAtZmFpbDM6DQo+IC1mYWlsMjoNCj4g
LWZhaWwxOg0KPiAtICAgIFByb3RvY29sQ2FuY2VsUmVxdWVzdExpc3QoUHJvdG9jb2wsICZMaXN0
KTsNCj4gLSAgICBTcmJFeHQtPlJlcXVlc3RDb3VudCA9IDA7DQo+IC0gICAgU3JiLT5TcmJTdGF0
dXMgPSBTUkJfU1RBVFVTX0VSUk9SOw0KPiAtICAgIHJldHVybiBGQUxTRTsNCj4gLX0NCj4gLQ0K
PiAtc3RhdGljIEJPT0xFQU4NCj4gLVByb3RvY29sUHJlcGFyZVN5bmNDYWNoZSgNCj4gLSAgICBJ
TiAgUFhFTlZCRF9QUk9UT0NPTCAgICAgICAgUHJvdG9jb2wsDQo+IC0gICAgSU4gIFBYRU5WQkRf
U1JCRVhUICAgICAgU3JiRXh0DQo+IC0gICAgKQ0KPiAtew0KPiAtICAgIFBTQ1NJX1JFUVVFU1Rf
QkxPQ0sgICAgIFNyYiA9IFNyYkV4dC0+U3JiOw0KPiAtICAgIFBYRU5WQkRfUkVRVUVTVCAgICAg
ICAgIFJlcXVlc3Q7DQo+IC0gICAgTElTVF9FTlRSWSAgICAgICAgICAgICAgTGlzdDsNCj4gLSAg
ICBVQ0hBUiAgICAgICAgICAgICAgICAgICBPcGVyYXRpb247DQo+IC0NCj4gLSAgICBTcmItPlNy
YlN0YXR1cyA9IFNSQl9TVEFUVVNfUEVORElORzsNCj4gLQ0KPiAtICAgIGlmIChGcm9udGVuZEdl
dERpc2tJbmZvKFByb3RvY29sLT5Gcm9udGVuZCktPkZsdXNoQ2FjaGUpDQo+IC0gICAgICAgIE9w
ZXJhdGlvbiA9IEJMS0lGX09QX0ZMVVNIX0RJU0tDQUNIRTsNCj4gLSAgICBlbHNlDQo+IC0gICAg
ICAgIE9wZXJhdGlvbiA9IEJMS0lGX09QX1dSSVRFX0JBUlJJRVI7DQo+IC0NCj4gLSAgICBJbml0
aWFsaXplTGlzdEhlYWQoJkxpc3QpOw0KPiAtICAgIFNyYkV4dC0+UmVxdWVzdENvdW50ID0gMDsN
Cj4gLQ0KPiAtICAgIFJlcXVlc3QgPSBQcm90b2NvbEdldFJlcXVlc3QoUHJvdG9jb2wpOw0KPiAt
ICAgIGlmIChSZXF1ZXN0ID09IE5VTEwpDQo+IC0gICAgICAgIGdvdG8gZmFpbDE7DQo+IC0gICAg
SW5zZXJ0VGFpbExpc3QoJkxpc3QsICZSZXF1ZXN0LT5MaXN0RW50cnkpOw0KPiAtICAgIEludGVy
bG9ja2VkSW5jcmVtZW50KCZTcmJFeHQtPlJlcXVlc3RDb3VudCk7DQo+IC0NCj4gLSAgICBSZXF1
ZXN0LT5TcmJFeHQgICAgID0gU3JiRXh0Ow0KPiAtICAgIFJlcXVlc3QtPk9wZXJhdGlvbiAgPSBP
cGVyYXRpb247DQo+IC0gICAgUmVxdWVzdC0+Rmlyc3RTZWN0b3IgPSBDZGJfTG9naWNhbEJsb2Nr
KFNyYik7DQo+IC0NCj4gLSAgICBQcm90b2NvbFF1ZXVlUmVxdWVzdExpc3QoUHJvdG9jb2wsICZM
aXN0KTsNCj4gLSAgICByZXR1cm4gVFJVRTsNCj4gLQ0KPiAtZmFpbDE6DQo+IC0gICAgUHJvdG9j
b2xDYW5jZWxSZXF1ZXN0TGlzdChQcm90b2NvbCwgJkxpc3QpOw0KPiAtICAgIFNyYkV4dC0+UmVx
dWVzdENvdW50ID0gMDsNCj4gLSAgICBTcmItPlNyYlN0YXR1cyA9IFNSQl9TVEFUVVNfRVJST1I7
DQo+IC0gICAgcmV0dXJuIEZBTFNFOw0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMgQk9PTEVBTg0KPiAt
UHJvdG9jb2xQcmVwYXJlVW5tYXAoDQo+IC0gICAgSU4gIFBYRU5WQkRfUFJPVE9DT0wgICAgICAg
IFByb3RvY29sLA0KPiAtICAgIElOICBQWEVOVkJEX1NSQkVYVCAgICAgIFNyYkV4dA0KPiAtICAg
ICkNCj4gLXsNCj4gLSAgICBQU0NTSV9SRVFVRVNUX0JMT0NLICAgICBTcmIgPSBTcmJFeHQtPlNy
YjsNCj4gLSAgICBQVU5NQVBfTElTVF9IRUFERVIgICAgICBVbm1hcCA9IFNyYi0+RGF0YUJ1ZmZl
cjsNCj4gLQlVTE9ORyAgICAgICAgICAgICAgICAgICBDb3VudCA9IF9ieXRlc3dhcF91c2hvcnQo
KihQVVNIT1JUKVVubWFwLQ0KPiA+QmxvY2tEZXNjckRhdGFMZW5ndGgpIC8gc2l6ZW9mKFVOTUFQ
X0JMT0NLX0RFU0NSSVBUT1IpOw0KPiAtICAgIFVMT05HICAgICAgICAgICAgICAgICAgIEluZGV4
Ow0KPiAtICAgIExJU1RfRU5UUlkgICAgICAgICAgICAgIExpc3Q7DQo+IC0NCj4gLSAgICBTcmIt
PlNyYlN0YXR1cyA9IFNSQl9TVEFUVVNfUEVORElORzsNCj4gLQ0KPiAtICAgIEluaXRpYWxpemVM
aXN0SGVhZCgmTGlzdCk7DQo+IC0gICAgU3JiRXh0LT5SZXF1ZXN0Q291bnQgPSAwOw0KPiAtDQo+
IC0gICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgQ291bnQ7ICsrSW5kZXgpIHsNCj4gLSAgICAg
ICAgUFVOTUFQX0JMT0NLX0RFU0NSSVBUT1IgRGVzY3IgPSAmVW5tYXAtPkRlc2NyaXB0b3JzW0lu
ZGV4XTsNCj4gLSAgICAgICAgUFhFTlZCRF9SRVFVRVNUICAgICAgICAgUmVxdWVzdDsNCj4gLQ0K
PiAtICAgICAgICBSZXF1ZXN0ID0gUHJvdG9jb2xHZXRSZXF1ZXN0KFByb3RvY29sKTsNCj4gLSAg
ICAgICAgaWYgKFJlcXVlc3QgPT0gTlVMTCkNCj4gLSAgICAgICAgICAgIGdvdG8gZmFpbDE7DQo+
IC0gICAgICAgIEluc2VydFRhaWxMaXN0KCZMaXN0LCAmUmVxdWVzdC0+TGlzdEVudHJ5KTsNCj4g
LSAgICAgICAgSW50ZXJsb2NrZWRJbmNyZW1lbnQoJlNyYkV4dC0+UmVxdWVzdENvdW50KTsNCj4g
LQ0KPiAtICAgICAgICBSZXF1ZXN0LT5TcmJFeHQgICAgICAgICA9IFNyYkV4dDsNCj4gLSAgICAg
ICAgUmVxdWVzdC0+T3BlcmF0aW9uICAgICAgPSBCTEtJRl9PUF9ESVNDQVJEOw0KPiAtICAgICAg
ICBSZXF1ZXN0LT5GaXJzdFNlY3RvciAgICA9IF9ieXRlc3dhcF91aW50NjQoKihQVUxPTkc2NClE
ZXNjci0NCj4gPlN0YXJ0aW5nTGJhKTsNCj4gLSAgICAgICAgUmVxdWVzdC0+TnJTZWN0b3JzICAg
ICAgPSBfYnl0ZXN3YXBfdWxvbmcoKihQVUxPTkcpRGVzY3ItDQo+ID5MYmFDb3VudCk7DQo+IC0g
ICAgICAgIFJlcXVlc3QtPkZsYWdzICAgICAgICAgID0gMDsNCj4gLSAgICB9DQo+IC0NCj4gLSAg
ICBQcm90b2NvbFF1ZXVlUmVxdWVzdExpc3QoUHJvdG9jb2wsICZMaXN0KTsNCj4gLSAgICByZXR1
cm4gVFJVRTsNCj4gLQ0KPiAtZmFpbDE6DQo+IC0gICAgUHJvdG9jb2xDYW5jZWxSZXF1ZXN0TGlz
dChQcm90b2NvbCwgJkxpc3QpOw0KPiAtICAgIFNyYkV4dC0+UmVxdWVzdENvdW50ID0gMDsNCj4g
LSAgICBTcmItPlNyYlN0YXR1cyA9IFNSQl9TVEFUVVNfRVJST1I7DQo+IC0gICAgcmV0dXJuIEZB
TFNFOw0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMgRk9SQ0VJTkxJTkUgQk9PTEVBTg0KPiAtUHJvdG9j
b2xQcmVwYXJlUmVxdWVzdCgNCj4gLSAgICBJTiAgUFhFTlZCRF9QUk9UT0NPTCAgICBQcm90b2Nv
bCwNCj4gLSAgICBJTiAgUFhFTlZCRF9TUkJFWFQgIFNyYkV4dA0KPiAtICAgICkNCj4gLXsNCj4g
LSAgICBzd2l0Y2ggKENkYl9PcGVyYXRpb25FeChTcmJFeHQtPlNyYikpIHsNCj4gLSAgICBjYXNl
IFNDU0lPUF9SRUFEOg0KPiAtICAgIGNhc2UgU0NTSU9QX1dSSVRFOg0KPiAtICAgICAgICByZXR1
cm4gUHJvdG9jb2xQcmVwYXJlUmVhZFdyaXRlKFByb3RvY29sLCBTcmJFeHQpOw0KPiAtDQo+IC0g
ICAgY2FzZSBTQ1NJT1BfU1lOQ0hST05JWkVfQ0FDSEU6DQo+IC0gICAgICAgIHJldHVybiBQcm90
b2NvbFByZXBhcmVTeW5jQ2FjaGUoUHJvdG9jb2wsIFNyYkV4dCk7DQo+IC0NCj4gLSAgICBjYXNl
IFNDU0lPUF9VTk1BUDoNCj4gLSAgICAgICAgcmV0dXJuIFByb3RvY29sUHJlcGFyZVVubWFwKFBy
b3RvY29sLCBTcmJFeHQpOw0KPiAtDQo+IC0gICAgZGVmYXVsdDoNCj4gLSAgICAgICAgQVNTRVJU
KEZBTFNFKTsNCj4gLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KPiAtICAgIH0NCj4gLX0NCj4gLQ0K
PiAtc3RhdGljIEJPT0xFQU4NCj4gLVByb3RvY29sU3VibWl0KA0KPiAtICAgIElOICBQWEVOVkJE
X1BST1RPQ09MICAgIFByb3RvY29sLA0KPiAtICAgIElOICBQWEVOVkJEX1JFUVVFU1QgUmVxdWVz
dA0KPiAtICAgICkNCj4gLXsNCj4gLSAgICBLSVJRTCAgICAgICAgICAgICAgIElycWw7DQo+IC0g
ICAgYmxraWZfcmVxdWVzdF90KiAgICByZXE7DQo+IC0gICAgQk9PTEVBTiAgICAgICAgICAgICBO
b3RpZnk7DQo+IC0NCj4gLSAgICBLZUFjcXVpcmVTcGluTG9jaygmUHJvdG9jb2wtPkxvY2ssICZJ
cnFsKTsNCj4gLSAgICBpZiAoUklOR19GVUxMKCZQcm90b2NvbC0+RnJvbnQpKSB7DQo+IC0gICAg
ICAgIEtlUmVsZWFzZVNwaW5Mb2NrKCZQcm90b2NvbC0+TG9jaywgSXJxbCk7DQo+IC0gICAgICAg
IHJldHVybiBGQUxTRTsNCj4gLSAgICB9DQo+IC0NCj4gLSAgICByZXEgPSBSSU5HX0dFVF9SRVFV
RVNUKCZQcm90b2NvbC0+RnJvbnQsIFByb3RvY29sLQ0KPiA+RnJvbnQucmVxX3Byb2RfcHZ0KTsN
Cj4gLSAgICBfX1Byb3RvY29sSW5zZXJ0KFByb3RvY29sLCBSZXF1ZXN0LCByZXEpOw0KPiAtICAg
IEtlTWVtb3J5QmFycmllcigpOw0KPiAtICAgICsrUHJvdG9jb2wtPkZyb250LnJlcV9wcm9kX3B2
dDsNCj4gLQ0KPiAtICAgIFJJTkdfUFVTSF9SRVFVRVNUU19BTkRfQ0hFQ0tfTk9USUZZKCZQcm90
b2NvbC0+RnJvbnQsIE5vdGlmeSk7DQo+IC0gICAgS2VSZWxlYXNlU3BpbkxvY2soJlByb3RvY29s
LT5Mb2NrLCBJcnFsKTsNCj4gLQ0KPiAtICAgIGlmIChOb3RpZnkpIHsNCj4gLSAgICAgICAgaWYg
KCFQcm90b2NvbC0+RW5hYmxlZCkNCj4gLSAgICAgICAgICAgIHJldHVybiBUUlVFOw0KPiAtDQo+
IC0gICAgICAgIFhFTkJVU19FVlRDSE4oU2VuZCwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAm
UHJvdG9jb2wtPkV2dGNobkludGVyZmFjZSwNCj4gLSAgICAgICAgICAgICAgICAgICAgICBQcm90
b2NvbC0+Q2hhbm5lbCk7DQo+IC0gICAgfQ0KPiAtDQo+IC0gICAgcmV0dXJuIFRSVUU7DQo+IC19
DQo+IC0NCj4gLXN0YXRpYyBGT1JDRUlOTElORSBCT09MRUFODQo+IC1Qcm90b2NvbFN1Ym1pdFJl
cXVlc3RzKA0KPiAtICAgIElOICBQWEVOVkJEX1BST1RPQ09MICAgIFByb3RvY29sDQo+IC0gICAg
KQ0KPiAtew0KPiAtICAgIGlmICghUHJvdG9jb2wtPkVuYWJsZWQpIHsNCj4gLSAgICAgICAgaWYg
KFF1ZXVlQ291bnQoJlByb3RvY29sLT5QcmVwYXJlZFJlcXMpKQ0KPiAtICAgICAgICAgICAgV2Fy
bmluZygiVGFyZ2V0WyVkXSA6IFBhdXNlZCwgbm90IHN1Ym1pdHRpbmcgbmV3IHJlcXVlc3RzICgl
dSlcbiIsDQo+IC0gICAgICAgICAgICAgICAgICAgIEZyb250ZW5kR2V0VGFyZ2V0SWQoUHJvdG9j
b2wtPkZyb250ZW5kKSwNCj4gLSAgICAgICAgICAgICAgICAgICAgUXVldWVDb3VudCgmUHJvdG9j
b2wtPlByZXBhcmVkUmVxcykpOw0KPiAtICAgICAgICByZXR1cm4gRkFMU0U7DQo+IC0gICAgfQ0K
PiAtDQo+IC0gICAgZm9yICg7Oykgew0KPiAtICAgICAgICBQWEVOVkJEX1JFUVVFU1QgUmVxdWVz
dDsNCj4gLSAgICAgICAgUExJU1RfRU5UUlkgICAgIExpc3RFbnRyeTsNCj4gLQ0KPiAtICAgICAg
ICBMaXN0RW50cnkgPSBRdWV1ZVBvcCgmUHJvdG9jb2wtPlByZXBhcmVkUmVxcyk7DQo+IC0gICAg
ICAgIGlmIChMaXN0RW50cnkgPT0gTlVMTCkNCj4gLSAgICAgICAgICAgIGJyZWFrOw0KPiAtDQo+
IC0gICAgICAgIFJlcXVlc3QgPSBDT05UQUlOSU5HX1JFQ09SRChMaXN0RW50cnksIFhFTlZCRF9S
RVFVRVNULA0KPiBMaXN0RW50cnkpOw0KPiAtDQo+IC0gICAgICAgIFF1ZXVlQXBwZW5kKCZQcm90
b2NvbC0+U3VibWl0dGVkUmVxcywgJlJlcXVlc3QtPkxpc3RFbnRyeSk7DQo+IC0gICAgICAgIEtl
TWVtb3J5QmFycmllcigpOw0KPiAtDQo+IC0gICAgICAgIGlmIChQcm90b2NvbFN1Ym1pdChQcm90
b2NvbCwgUmVxdWVzdCkpDQo+IC0gICAgICAgICAgICBjb250aW51ZTsNCj4gLQ0KPiAtICAgICAg
ICBRdWV1ZVJlbW92ZSgmUHJvdG9jb2wtPlN1Ym1pdHRlZFJlcXMsICZSZXF1ZXN0LT5MaXN0RW50
cnkpOw0KPiAtICAgICAgICBRdWV1ZVVuUG9wKCZQcm90b2NvbC0+UHJlcGFyZWRSZXFzLCAmUmVx
dWVzdC0+TGlzdEVudHJ5KTsNCj4gLSAgICAgICAgYnJlYWs7DQo+IC0gICAgfQ0KPiAtDQo+IC0g
ICAgcmV0dXJuIFF1ZXVlQ291bnQoJlByb3RvY29sLT5QcmVwYXJlZFJlcXMpICE9IDA7DQo+IC19
DQo+IC0NCj4gLXN0YXRpYyBGT1JDRUlOTElORSBWT0lEDQo+IC1Qcm90b2NvbENvbXBsZXRlU2h1
dGRvd24oDQo+IC0gICAgSU4gIFBYRU5WQkRfUFJPVE9DT0wgICAgUHJvdG9jb2wNCj4gLSAgICAp
DQo+IC17DQo+IC0gICAgUFhFTlZCRF9UQVJHRVQgICAgICBUYXJnZXQ7DQo+IC0gICAgUFhFTlZC
RF9BREFQVEVSICAgICBBZGFwdGVyOw0KPiAtDQo+IC0gICAgaWYgKFF1ZXVlQ291bnQoJlByb3Rv
Y29sLT5TaHV0ZG93blNyYnMpID09IDApDQo+IC0gICAgICAgIHJldHVybjsNCj4gLQ0KPiAtICAg
IGlmIChRdWV1ZUNvdW50KCZQcm90b2NvbC0+UHJlcGFyZWRSZXFzKSB8fA0KPiAtICAgICAgICBR
dWV1ZUNvdW50KCZQcm90b2NvbC0+U3VibWl0dGVkUmVxcykpDQo+IC0gICAgICAgIHJldHVybjsN
Cj4gLQ0KPiAtICAgIFRhcmdldCA9IEZyb250ZW5kR2V0VGFyZ2V0KFByb3RvY29sLT5Gcm9udGVu
ZCk7DQo+IC0gICAgQWRhcHRlciA9IFRhcmdldEdldEFkYXB0ZXIoVGFyZ2V0KTsNCj4gLSAgICBm
b3IgKDs7KSB7DQo+IC0gICAgICAgIFBYRU5WQkRfU1JCRVhUICAgICAgU3JiRXh0Ow0KPiAtICAg
ICAgICBQU0NTSV9SRVFVRVNUX0JMT0NLIFNyYjsNCj4gLSAgICAgICAgUExJU1RfRU5UUlkgICAg
ICAgICBMaXN0RW50cnk7DQo+IC0NCj4gLSAgICAgICAgTGlzdEVudHJ5ID0gUXVldWVQb3AoJlBy
b3RvY29sLT5TaHV0ZG93blNyYnMpOw0KPiAtICAgICAgICBpZiAoTGlzdEVudHJ5ID09IE5VTEwp
DQo+IC0gICAgICAgICAgICBicmVhazsNCj4gLSAgICAgICAgU3JiRXh0ID0gQ09OVEFJTklOR19S
RUNPUkQoTGlzdEVudHJ5LCBYRU5WQkRfU1JCRVhULCBMaXN0RW50cnkpOw0KPiAtICAgICAgICBT
cmIgPSBTcmJFeHQtPlNyYjsNCj4gLQ0KPiAtICAgICAgICBTcmItPlNyYlN0YXR1cyA9IFNSQl9T
VEFUVVNfU1VDQ0VTUzsNCj4gLSAgICAgICAgQWRhcHRlckNvbXBsZXRlU3JiKEFkYXB0ZXIsIFNy
YkV4dCk7DQo+ICsgICAgICAgIFNyYkV4dCA9IENPTlRBSU5JTkdfUkVDT1JEKExpc3RFbnRyeSwg
WEVOVkJEX1NSQkVYVCwgTGlzdEVudHJ5KTsNCj4gKyAgICAgICAgU3JiID0gU3JiRXh0LT5TcmI7
DQo+ICsNCj4gKyAgICAgICAgU3JiLT5TcmJTdGF0dXMgPSBTUkJfU1RBVFVTX1NVQ0NFU1M7DQo+
ICsgICAgICAgIEFkYXB0ZXJDb21wbGV0ZVNyYihBZGFwdGVyLCBTcmJFeHQpOw0KPiAgICAgIH0N
Cj4gIH0NCj4gDQo+IEBAIC0xMDgxLDggKzY4OCw4IEBAIF9fQmxraWZPcGVyYXRpb25OYW1lKA0K
PiAgfQ0KPiANCj4gIHN0YXRpYyBWT0lEDQo+IC1Qcm90b2NvbENvbXBsZXRlUmVzcG9uc2UoDQo+
IC0gICAgSU4gIFBYRU5WQkRfUFJPVE9DT0wgICAgUHJvdG9jb2wsDQo+ICtSaW5nQ29tcGxldGVS
ZXNwb25zZSgNCj4gKyAgICBJTiAgUFhFTlZCRF9SSU5HICAgIFJpbmcsDQo+ICAgICAgSU4gIFVM
T05HNjQgICAgICAgICBJZCwNCj4gICAgICBJTiAgU0hPUlQgICAgICAgICAgIFN0YXR1cw0KPiAg
ICAgICkNCj4gQEAgLTEwOTAsOCArNjk3LDkgQEAgUHJvdG9jb2xDb21wbGV0ZVJlc3BvbnNlKA0K
PiAgICAgIFBYRU5WQkRfUkVRVUVTVCAgICAgUmVxdWVzdDsNCj4gICAgICBQU0NTSV9SRVFVRVNU
X0JMT0NLIFNyYjsNCj4gICAgICBQWEVOVkJEX1NSQkVYVCAgICAgIFNyYkV4dDsNCj4gKyAgICBQ
WEVOVkJEX1BST1RPQ09MICAgIFByb3RvY29sID0gUmluZy0+UHJvdG9jb2w7DQo+IA0KPiAtICAg
IFJlcXVlc3QgPSBQcm90b2NvbEZpbmRSZXF1ZXN0KFByb3RvY29sLCBJZCk7DQo+ICsgICAgUmVx
dWVzdCA9IFJpbmdGaW5kUmVxdWVzdChSaW5nLCBJZCk7DQo+ICAgICAgaWYgKFJlcXVlc3QgPT0g
TlVMTCkNCj4gICAgICAgICAgcmV0dXJuOw0KPiANCj4gQEAgLTExMDAsNyArNzA4LDcgQEAgUHJv
dG9jb2xDb21wbGV0ZVJlc3BvbnNlKA0KPiANCj4gICAgICBzd2l0Y2ggKFN0YXR1cykgew0KPiAg
ICAgIGNhc2UgQkxLSUZfUlNQX09LQVk6DQo+IC0gICAgICAgIFByb3RvY29sUmVxdWVzdENvcHlP
dXRwdXQoUmVxdWVzdCk7DQo+ICsgICAgICAgX19SZXF1ZXN0Q29weU91dHB1dChSZXF1ZXN0KTsN
Cj4gICAgICAgICAgYnJlYWs7DQo+IA0KPiAgICAgIGNhc2UgQkxLSUZfUlNQX0VPUE5PVFNVUFA6
DQo+IEBAIC0xMTEyLDggKzcyMCw5IEBAIFByb3RvY29sQ29tcGxldGVSZXNwb25zZSgNCj4gDQo+
ICAgICAgY2FzZSBCTEtJRl9SU1BfRVJST1I6DQo+ICAgICAgZGVmYXVsdDoNCj4gLSAgICAgICAg
V2FybmluZygiVGFyZ2V0WyVkXSA6ICVzIEJMS0lGX1JTUF9FUlJPUiAoVGFnICVsbHgpXG4iLA0K
PiArICAgICAgICBXYXJuaW5nKCJUYXJnZXRbJWRdWyV1XSA6ICVzIEJMS0lGX1JTUF9FUlJPUiAo
VGFnICVsbHgpXG4iLA0KPiAgICAgICAgICAgICAgICAgIEZyb250ZW5kR2V0VGFyZ2V0SWQoUHJv
dG9jb2wtPkZyb250ZW5kKSwNCj4gKyAgICAgICAgICAgICAgICBSaW5nLT5JbmRleCwNCj4gICAg
ICAgICAgICAgICAgICBfX0Jsa2lmT3BlcmF0aW9uTmFtZShSZXF1ZXN0LT5PcGVyYXRpb24pLA0K
PiAgICAgICAgICAgICAgICAgIElkKTsNCj4gICAgICAgICAgU3JiLT5TcmJTdGF0dXMgPSBTUkJf
U1RBVFVTX0VSUk9SOw0KPiBAQCAtMTE0MiwxNCArNzUxLDE1IEBAIFByb3RvY29sQ29tcGxldGVS
ZXNwb25zZSgNCj4gIH0NCj4gDQo+ICBzdGF0aWMgQk9PTEVBTg0KPiAtUHJvdG9jb2xQb2xsKA0K
PiAtICAgIElOICBQWEVOVkJEX1BST1RPQ09MICAgIFByb3RvY29sDQo+ICtSaW5nUG9sbCgNCj4g
KyAgICBJTiAgUFhFTlZCRF9SSU5HICAgIFJpbmcNCj4gICAgICApDQo+ICB7DQo+ICsgICAgUFhF
TlZCRF9QUk9UT0NPTCAgICBQcm90b2NvbCA9IFJpbmctPlByb3RvY29sOw0KPiAgICAgIEJPT0xF
QU4gICAgICAgICAgICAgUmV0cnkgPSBGQUxTRTsNCj4gDQo+ICAgICAgQVNTRVJUM1UoS2VHZXRD
dXJyZW50SXJxbCgpLCA9PSwgRElTUEFUQ0hfTEVWRUwpOw0KPiAtICAgIEtlQWNxdWlyZVNwaW5M
b2NrQXREcGNMZXZlbCgmUHJvdG9jb2wtPkxvY2spOw0KPiArICAgIEtlQWNxdWlyZVNwaW5Mb2Nr
QXREcGNMZXZlbCgmUmluZy0+TG9jayk7DQo+IA0KPiAgICAgIC8vIEd1YXJkIGFnYWluc3QgdGhp
cyBsb2NrZWQgcmVnaW9uIGJlaW5nIGNhbGxlZCBhZnRlciB0aGUNCj4gICAgICAvLyBsb2NrIG9u
IEZyb250ZW5kU2V0U3RhdGUNCj4gQEAgLTExNjIsOCArNzcyLDggQEAgUHJvdG9jb2xQb2xsKA0K
PiANCj4gICAgICAgICAgS2VNZW1vcnlCYXJyaWVyKCk7DQo+IA0KPiAtICAgICAgICByc3BfcHJv
ZCA9IFByb3RvY29sLT5TaGFyZWQtPnJzcF9wcm9kOw0KPiAtICAgICAgICByc3BfY29ucyA9IFBy
b3RvY29sLT5Gcm9udC5yc3BfY29uczsNCj4gKyAgICAgICAgcnNwX3Byb2QgPSBSaW5nLT5TaGFy
ZWQtPnJzcF9wcm9kOw0KPiArICAgICAgICByc3BfY29ucyA9IFJpbmctPkZyb250LnJzcF9jb25z
Ow0KPiANCj4gICAgICAgICAgS2VNZW1vcnlCYXJyaWVyKCk7DQo+IA0KPiBAQCAtMTE3MywxMDUg
Kzc4MywxMDE4IEBAIFByb3RvY29sUG9sbCgNCj4gICAgICAgICAgd2hpbGUgKHJzcF9jb25zICE9
IHJzcF9wcm9kICYmICFSZXRyeSkgew0KPiAgICAgICAgICAgICAgYmxraWZfcmVzcG9uc2VfdCog
ICByc3A7DQo+IA0KPiAtICAgICAgICAgICAgcnNwID0gUklOR19HRVRfUkVTUE9OU0UoJlByb3Rv
Y29sLT5Gcm9udCwgcnNwX2NvbnMpOw0KPiArICAgICAgICAgICAgcnNwID0gUklOR19HRVRfUkVT
UE9OU0UoJlJpbmctPkZyb250LCByc3BfY29ucyk7DQo+ICAgICAgICAgICAgICArK3JzcF9jb25z
Ow0KPiAtICAgICAgICAgICAgKytQcm90b2NvbC0+UmVjZWl2ZWQ7DQo+ICsgICAgICAgICAgICAr
K1JpbmctPlJlY2VpdmVkOw0KPiANCj4gLSAgICAgICAgICAgIFByb3RvY29sQ29tcGxldGVSZXNw
b25zZShQcm90b2NvbCwgcnNwLT5pZCwgcnNwLT5zdGF0dXMpOw0KPiArICAgICAgICAgICAgUmlu
Z0NvbXBsZXRlUmVzcG9uc2UoUmluZywgcnNwLT5pZCwgcnNwLT5zdGF0dXMpOw0KPiAgICAgICAg
ICAgICAgUnRsWmVyb01lbW9yeShyc3AsIHNpemVvZih1bmlvbiBibGtpZl9zcmluZ19lbnRyeSkp
Ow0KPiANCj4gLSAgICAgICAgICAgIGlmIChyc3BfY29ucyAtIFByb3RvY29sLT5Gcm9udC5yc3Bf
Y29ucyA+IFJJTkdfU0laRSgmUHJvdG9jb2wtDQo+ID5Gcm9udCkgLyA0KQ0KPiArICAgICAgICAg
ICAgaWYgKHJzcF9jb25zIC0gUmluZy0+RnJvbnQucnNwX2NvbnMgPiBSSU5HX1NJWkUoJlJpbmct
PkZyb250KSAvIDQpDQo+ICAgICAgICAgICAgICAgICAgUmV0cnkgPSBUUlVFOw0KPiAgICAgICAg
ICB9DQo+IA0KPiAgICAgICAgICBLZU1lbW9yeUJhcnJpZXIoKTsNCj4gDQo+IC0gICAgICAgIFBy
b3RvY29sLT5Gcm9udC5yc3BfY29ucyA9IHJzcF9jb25zOw0KPiAtICAgICAgICBQcm90b2NvbC0+
U2hhcmVkLT5yc3BfZXZlbnQgPSByc3BfY29ucyArIDE7DQo+ICsgICAgICAgIFJpbmctPkZyb250
LnJzcF9jb25zID0gcnNwX2NvbnM7DQo+ICsgICAgICAgIFJpbmctPlNoYXJlZC0+cnNwX2V2ZW50
ID0gcnNwX2NvbnMgKyAxOw0KPiAgICAgIH0NCj4gDQo+ICBkb25lOg0KPiAtICAgIEtlUmVsZWFz
ZVNwaW5Mb2NrRnJvbURwY0xldmVsKCZQcm90b2NvbC0+TG9jayk7DQo+ICsgICAgS2VSZWxlYXNl
U3BpbkxvY2tGcm9tRHBjTGV2ZWwoJlJpbmctPkxvY2spOw0KPiANCj4gICAgICByZXR1cm4gUmV0
cnk7DQo+ICB9DQo+IA0KPiAgX19kcnZfcmVxdWlyZXNJUlFMKERJU1BBVENIX0xFVkVMKQ0KPiAg
c3RhdGljIEJPT0xFQU4NCj4gLVByb3RvY29sTm90aWZ5UmVzcG9uc2VzKA0KPiAtICAgIElOICBQ
WEVOVkJEX1BST1RPQ09MICAgIFByb3RvY29sDQo+ICtSaW5nTm90aWZ5UmVzcG9uc2VzKA0KPiAr
ICAgIElOICBQWEVOVkJEX1JJTkcgICAgUmluZw0KPiAgICAgICkNCj4gIHsNCj4gKyAgICBQWEVO
VkJEX1BST1RPQ09MICAgIFByb3RvY29sID0gUmluZy0+UHJvdG9jb2w7DQo+ICAgICAgQk9PTEVB
TiAgICAgICAgICAgICBSZXRyeSA9IEZBTFNFOw0KPiANCj4gICAgICBpZiAoIVByb3RvY29sLT5F
bmFibGVkKQ0KPiAgICAgICAgICByZXR1cm4gRkFMU0U7DQo+IA0KPiAtICAgIFJldHJ5IHw9IFBy
b3RvY29sUG9sbChQcm90b2NvbCk7DQo+IC0gICAgUmV0cnkgfD0gUHJvdG9jb2xTdWJtaXRSZXF1
ZXN0cyhQcm90b2NvbCk7DQo+ICsgICAgUmV0cnkgfD0gUmluZ1BvbGwoUmluZyk7DQo+ICsgICAg
UmV0cnkgfD0gUmluZ1N1Ym1pdFJlcXVlc3RzKFJpbmcpOw0KPiANCj4gLSAgICBQcm90b2NvbENv
bXBsZXRlU2h1dGRvd24oUHJvdG9jb2wpOw0KPiArICAgIFJpbmdDb21wbGV0ZVNodXRkb3duKFJp
bmcpOw0KPiAgICAgIHJldHVybiBSZXRyeTsNCj4gIH0NCj4gDQo+IC1LU0VSVklDRV9ST1VUSU5F
ICAgIFByb3RvY29sSW50ZXJydXB0Ow0KPiArS1NFUlZJQ0VfUk9VVElORSAgICBSaW5nSW50ZXJy
dXB0Ow0KPiANCj4gIEJPT0xFQU4NCj4gLVByb3RvY29sSW50ZXJydXB0KA0KPiArUmluZ0ludGVy
cnVwdCgNCj4gICAgICBJTiAgUEtJTlRFUlJVUFQgSW50ZXJydXB0LA0KPiAgICAgIElOICBQVk9J
RCAgICAgICBDb250ZXh0DQo+ICAgICAgKQ0KPiAgew0KPiAtICAgIFBYRU5WQkRfUFJPVE9DT0wg
ICAgUHJvdG9jb2wgPSBDb250ZXh0Ow0KPiArICAgIFBYRU5WQkRfUklORyAgICBSaW5nID0gQ29u
dGV4dDsNCj4gKyAgICBQWEVOVkJEX1BST1RPQ09MIFByb3RvY29sOw0KPiANCj4gICAgICBVTlJF
RkVSRU5DRURfUEFSQU1FVEVSKEludGVycnVwdCk7DQo+IA0KPiArICAgIEFTU0VSVChSaW5nICE9
IE5VTEwpOw0KPiArICAgIFByb3RvY29sID0gUmluZy0+UHJvdG9jb2w7DQo+ICAgICAgQVNTRVJU
KFByb3RvY29sICE9IE5VTEwpOw0KPiANCj4gLSAgICArK1Byb3RvY29sLT5FdmVudHM7DQo+ICsg
ICAgKytSaW5nLT5FdmVudHM7DQo+ICAgICAgaWYgKCFQcm90b2NvbC0+Q29ubmVjdGVkKQ0KPiAg
ICAgICAgICByZXR1cm4gVFJVRTsNCj4gDQo+IC0gICAgaWYgKEtlSW5zZXJ0UXVldWVEcGMoJlBy
b3RvY29sLT5EcGMsIE5VTEwsIE5VTEwpKQ0KPiAtICAgICAgICArK1Byb3RvY29sLT5EcGNzOw0K
PiArICAgIGlmIChLZUluc2VydFF1ZXVlRHBjKCZSaW5nLT5EcGMsIE5VTEwsIE5VTEwpKQ0KPiAr
ICAgICAgICArK1JpbmctPkRwY3M7DQo+IA0KPiAgICAgIHJldHVybiBUUlVFOw0KPiAgfQ0KPiAN
Cj4gLUtERUZFUlJFRF9ST1VUSU5FIFByb3RvY29sRHBjOw0KPiArS0RFRkVSUkVEX1JPVVRJTkUg
UmluZ0RwYzsNCj4gDQo+ICBWT0lEDQo+IC1Qcm90b2NvbERwYygNCj4gK1JpbmdEcGMoDQo+ICAg
ICAgX19pbiAgUEtEUEMgICAgIERwYywNCj4gICAgICBfX2luX29wdCBQVk9JRCAgQ29udGV4dCwN
Cj4gICAgICBfX2luX29wdCBQVk9JRCAgQXJnMSwNCj4gICAgICBfX2luX29wdCBQVk9JRCAgQXJn
Mg0KPiAgICAgICkNCj4gIHsNCj4gLSAgICBQWEVOVkJEX1BST1RPQ09MICAgIFByb3RvY29sID0g
Q29udGV4dDsNCj4gKyAgICBQWEVOVkJEX1JJTkcgICAgUmluZyA9IENvbnRleHQ7DQo+ICsgICAg
UFhFTlZCRF9QUk9UT0NPTCBQcm90b2NvbDsNCj4gDQo+ICAgICAgVU5SRUZFUkVOQ0VEX1BBUkFN
RVRFUihEcGMpOw0KPiAgICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoQXJnMSk7DQo+ICAgICAg
VU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihBcmcyKTsNCj4gDQo+ICsgICAgQVNTRVJUKFJpbmcgIT0g
TlVMTCk7DQo+ICsgICAgUHJvdG9jb2wgPSBSaW5nLT5Qcm90b2NvbDsNCj4gICAgICBBU1NFUlQo
UHJvdG9jb2wgIT0gTlVMTCk7DQo+IA0KPiAgICAgIGZvciAoOzspIHsNCj4gICAgICAgICAgS0lS
UUwgICAgICAgSXJxbDsNCj4gICAgICAgICAgQk9PTEVBTiAgICAgUmV0cnk7DQo+IA0KPiAtICAg
ICAgICBLZVJhaXNlSXJxbChESVNQQVRDSF9MRVZFTCwgJklycWwpOw0KPiAtICAgICAgICBSZXRy
eSA9IFByb3RvY29sTm90aWZ5UmVzcG9uc2VzKFByb3RvY29sKTsNCj4gLSAgICAgICAgS2VMb3dl
cklycWwoSXJxbCk7DQo+ICsgICAgICAgIEtlUmFpc2VJcnFsKERJU1BBVENIX0xFVkVMLCAmSXJx
bCk7DQo+ICsgICAgICAgIFJldHJ5ID0gUmluZ05vdGlmeVJlc3BvbnNlcyhSaW5nKTsNCj4gKyAg
ICAgICAgS2VMb3dlcklycWwoSXJxbCk7DQo+ICsNCj4gKyAgICAgICAgaWYgKCFSZXRyeSkNCj4g
KyAgICAgICAgICAgIGJyZWFrOw0KPiArICAgIH0NCj4gKw0KPiArICAgIFhFTkJVU19FVlRDSE4o
VW5tYXNrLA0KPiArICAgICAgICAgICAgICAgICAgJlByb3RvY29sLT5FdnRjaG5JbnRlcmZhY2Us
DQo+ICsgICAgICAgICAgICAgICAgICBSaW5nLT5DaGFubmVsLA0KPiArICAgICAgICAgICAgICAg
ICAgRkFMU0UpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgREVDTFNQRUNfTk9JTkxJTkUgVk9JRA0K
PiArUmluZ0RlYnVnQ2FsbGJhY2soDQo+ICsgICAgSU4gIFBWT0lEICAgICAgIEFyZ3VtZW50LA0K
PiArICAgIElOICBCT09MRUFOICAgICBDcmFzaGluZw0KPiArICAgICkNCj4gK3sNCj4gKyAgICBQ
WEVOVkJEX1JJTkcgICAgICAgIFJpbmcgPSBBcmd1bWVudDsNCj4gKyAgICBQWEVOVkJEX1BST1RP
Q09MICAgIFByb3RvY29sID0gUmluZy0+UHJvdG9jb2w7DQo+ICsgICAgUFhFTlZCRF9HUkFOVEVS
ICAgICBHcmFudGVyID0gRnJvbnRlbmRHZXRHcmFudGVyKFByb3RvY29sLQ0KPiA+RnJvbnRlbmQp
Ow0KPiArICAgIFVMT05HICAgICAgICAgICAgICAgSW5kZXg7DQo+ICsNCj4gKyAgICBVTlJFRkVS
RU5DRURfUEFSQU1FVEVSKENyYXNoaW5nKTsNCj4gKw0KPiArICAgIFhFTkJVU19ERUJVRyhQcmlu
dGYsDQo+ICsgICAgICAgICAgICAgICAgICZQcm90b2NvbC0+RGVidWdJbnRlcmZhY2UsDQo+ICsg
ICAgICAgICAgICAgICAgICJTdWJtaXR0ZWQ6ICV1IFJlY2VpdmVkOiAldVxuIiwNCj4gKyAgICAg
ICAgICAgICAgICAgUmluZy0+U3VibWl0dGVkLA0KPiArICAgICAgICAgICAgICAgICBSaW5nLT5S
ZWNlaXZlZCk7DQo+ICsNCj4gKyAgICBYRU5CVVNfREVCVUcoUHJpbnRmLA0KPiArICAgICAgICAg
ICAgICAgICAmUHJvdG9jb2wtPkRlYnVnSW50ZXJmYWNlLA0KPiArICAgICAgICAgICAgICAgICAi
RXZlbnRzOiAldSBEcGNzOiAldVxuIiwNCj4gKyAgICAgICAgICAgICAgICAgUmluZy0+RXZlbnRz
LA0KPiArICAgICAgICAgICAgICAgICBSaW5nLT5EcGNzKTsNCj4gKw0KPiArICAgIFhFTkJVU19E
RUJVRyhQcmludGYsDQo+ICsgICAgICAgICAgICAgICAgICZQcm90b2NvbC0+RGVidWdJbnRlcmZh
Y2UsDQo+ICsgICAgICAgICAgICAgICAgICJTaGFyZWQgOiAweCVwXG4iLA0KPiArICAgICAgICAg
ICAgICAgICBSaW5nLT5TaGFyZWQpOw0KPiArDQo+ICsgICAgaWYgKFJpbmctPlNoYXJlZCkgew0K
PiArICAgICAgICBYRU5CVVNfREVCVUcoUHJpbnRmLA0KPiArICAgICAgICAgICAgICAgICAgICAg
JlByb3RvY29sLT5EZWJ1Z0ludGVyZmFjZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICJTaGFy
ZWQ6ICVkIC8gJWQgLSAlZCAvICVkXG4iLA0KPiArICAgICAgICAgICAgICAgICAgICAgUmluZy0+
U2hhcmVkLT5yZXFfcHJvZCwNCj4gKyAgICAgICAgICAgICAgICAgICAgIFJpbmctPlNoYXJlZC0+
cmVxX2V2ZW50LA0KPiArICAgICAgICAgICAgICAgICAgICAgUmluZy0+U2hhcmVkLT5yc3BfcHJv
ZCwNCj4gKyAgICAgICAgICAgICAgICAgICAgIFJpbmctPlNoYXJlZC0+cnNwX2V2ZW50KTsNCj4g
KyAgICB9DQo+ICsNCj4gKyAgICBYRU5CVVNfREVCVUcoUHJpbnRmLA0KPiArICAgICAgICAgICAg
ICAgICAmUHJvdG9jb2wtPkRlYnVnSW50ZXJmYWNlLA0KPiArICAgICAgICAgICAgICAgICAiRnJv
bnQ6ICVkIC8gJWQgKCVkKVxuIiwNCj4gKyAgICAgICAgICAgICAgICAgUmluZy0+RnJvbnQucmVx
X3Byb2RfcHZ0LA0KPiArICAgICAgICAgICAgICAgICBSaW5nLT5Gcm9udC5yc3BfY29ucywNCj4g
KyAgICAgICAgICAgICAgICAgUmluZy0+RnJvbnQubnJfZW50cyk7DQo+ICsNCj4gKyAgICBmb3Ig
KEluZGV4ID0gMDsgSW5kZXggPCAoMXVsIDw8IFByb3RvY29sLT5PcmRlcik7ICsrSW5kZXgpIHsN
Cj4gKyAgICAgICAgWEVOQlVTX0RFQlVHKFByaW50ZiwNCj4gKyAgICAgICAgICAgICAgICAgICAg
ICZQcm90b2NvbC0+RGVidWdJbnRlcmZhY2UsDQo+ICsgICAgICAgICAgICAgICAgICAgICAiR3Jh
bnRzWyUtMmRdOiAweCVwICgldSlcbiIsDQo+ICsgICAgICAgICAgICAgICAgICAgICBJbmRleCwN
Cj4gKyAgICAgICAgICAgICAgICAgICAgIFJpbmctPkdyYW50c1tJbmRleF0sDQo+ICsgICAgICAg
ICAgICAgICAgICAgICBHcmFudGVyUmVmZXJlbmNlKEdyYW50ZXIsIFJpbmctPkdyYW50c1tJbmRl
eF0pKTsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBpZiAoUmluZy0+Q2hhbm5lbCkgew0KPiArICAg
ICAgICBVTE9ORyAgICAgICBQb3J0ID0gWEVOQlVTX0VWVENITihHZXRQb3J0LA0KPiArICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUHJvdG9jb2wtPkV2dGNobkludGVy
ZmFjZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmluZy0+
Q2hhbm5lbCk7DQo+ICsNCj4gKyAgICAgICAgWEVOQlVTX0RFQlVHKFByaW50ZiwNCj4gKyAgICAg
ICAgICAgICAgICAgICAgICZQcm90b2NvbC0+RGVidWdJbnRlcmZhY2UsDQo+ICsgICAgICAgICAg
ICAgICAgICAgICAiQ2hhbm5lbCA6ICVwICglZClcbiIsDQo+ICsgICAgICAgICAgICAgICAgICAg
ICBSaW5nLT5DaGFubmVsLA0KPiArICAgICAgICAgICAgICAgICAgICAgUG9ydCk7DQo+ICsgICAg
fQ0KPiArDQo+ICsgICAgWEVOQlVTX0RFQlVHKFByaW50ZiwNCj4gKyAgICAgICAgICAgICAgICAg
JlByb3RvY29sLT5EZWJ1Z0ludGVyZmFjZSwNCj4gKyAgICAgICAgICAgICAgICAgIkJMS0lGX09Q
czogUkVBRD0ldSBXUklURT0ldVxuIiwNCj4gKyAgICAgICAgICAgICAgICAgUmluZy0+QmxrT3BS
ZWFkLA0KPiArICAgICAgICAgICAgICAgICBSaW5nLT5CbGtPcFdyaXRlKTsNCj4gKyAgICBYRU5C
VVNfREVCVUcoUHJpbnRmLA0KPiArICAgICAgICAgICAgICAgICAmUHJvdG9jb2wtPkRlYnVnSW50
ZXJmYWNlLA0KPiArICAgICAgICAgICAgICAgICAiQkxLSUZfT1BzOiBJTkRJUkVDVF9SRUFEPSV1
IElORElSRUNUX1dSSVRFPSV1XG4iLA0KPiArICAgICAgICAgICAgICAgICBSaW5nLT5CbGtPcElu
ZGlyZWN0UmVhZCwNCj4gKyAgICAgICAgICAgICAgICAgUmluZy0+QmxrT3BJbmRpcmVjdFdyaXRl
KTsNCj4gKyAgICBYRU5CVVNfREVCVUcoUHJpbnRmLA0KPiArICAgICAgICAgICAgICAgICAmUHJv
dG9jb2wtPkRlYnVnSW50ZXJmYWNlLA0KPiArICAgICAgICAgICAgICAgICAiQkxLSUZfT1BzOiBC
QVJSSUVSPSV1IERJU0NBUkQ9JXUgRkxVU0g9JXVcbiIsDQo+ICsgICAgICAgICAgICAgICAgIFJp
bmctPkJsa09wQmFycmllciwNCj4gKyAgICAgICAgICAgICAgICAgUmluZy0+QmxrT3BEaXNjYXJk
LA0KPiArICAgICAgICAgICAgICAgICBSaW5nLT5CbGtPcEZsdXNoKTsNCj4gKw0KPiArICAgIFF1
ZXVlRGVidWdDYWxsYmFjaygmUmluZy0+UHJlcGFyZWRSZXFzLA0KPiArICAgICAgICAgICAgICAg
ICAgICAgICAiUHJlcGFyZWQgIiwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgJlByb3RvY29s
LT5EZWJ1Z0ludGVyZmFjZSk7DQo+ICsgICAgUXVldWVEZWJ1Z0NhbGxiYWNrKCZSaW5nLT5TdWJt
aXR0ZWRSZXFzLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAiU3VibWl0dGVkIiwNCj4gKyAg
ICAgICAgICAgICAgICAgICAgICAgJlByb3RvY29sLT5EZWJ1Z0ludGVyZmFjZSk7DQo+ICsgICAg
UXVldWVEZWJ1Z0NhbGxiYWNrKCZSaW5nLT5TaHV0ZG93blNyYnMsDQo+ICsgICAgICAgICAgICAg
ICAgICAgICAgICJTaHV0ZG93biAiLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAmUHJvdG9j
b2wtPkRlYnVnSW50ZXJmYWNlKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIE5UU1RBVFVTDQo+ICtS
aW5nQ3JlYXRlKA0KPiArICAgIElOICBQWEVOVkJEX1BST1RPQ09MICAgIFByb3RvY29sLA0KPiAr
ICAgIElOICBVTE9ORyAgICAgICAgICAgICAgIEluZGV4LA0KPiArICAgIE9VVCBQWEVOVkJEX1JJ
TkcgICAgICAgICpSaW5nDQo+ICsgICAgKQ0KPiArew0KPiArICAgIFBYRU5WQkRfRlJPTlRFTkQg
ICAgICAgIEZyb250ZW5kID0gUHJvdG9jb2wtPkZyb250ZW5kOw0KPiArICAgIFBST0NFU1NPUl9O
VU1CRVIgICAgICAgIFByb2NOdW1iZXI7DQo+ICsgICAgVUxPTkcgICAgICAgICAgICAgICAgICAg
TGVuZ3RoOw0KPiArICAgIE5UU1RBVFVTICAgICAgICAgICAgICAgIHN0YXR1czsNCj4gKw0KPiAr
ICAgICpSaW5nID0gX19Qcm90b2NvbEFsbG9jYXRlKHNpemVvZihYRU5WQkRfUklORykpOw0KPiAr
DQo+ICsgICAgc3RhdHVzID0gU1RBVFVTX05PX01FTU9SWTsNCj4gKyAgICBpZiAoKlJpbmcgPT0g
TlVMTCkNCj4gKyAgICAgICAgZ290byBmYWlsMTsNCj4gKw0KPiArICAgICgqUmluZyktPlByb3Rv
Y29sID0gUHJvdG9jb2w7DQo+ICsgICAgKCpSaW5nKS0+SW5kZXggPSBJbmRleDsNCj4gKw0KPiAr
ICAgIExlbmd0aCA9IDEgKyAoVUxPTkcpc3RybGVuKEZyb250ZW5kR2V0RnJvbnRlbmRQYXRoKEZy
b250ZW5kKSkgKw0KPiAoVUxPTkcpc3RybGVuKCJxdWV1ZS14eCIpOw0KPiArDQo+ICsgICAgKCpS
aW5nKS0+UGF0aCA9IF9fUHJvdG9jb2xBbGxvY2F0ZShzaXplb2YoQ0hBUikgKiBMZW5ndGgpOw0K
PiArDQo+ICsgICAgc3RhdHVzID0gU1RBVFVTX05PX01FTU9SWTsNCj4gKyAgICBpZiAoKCpSaW5n
KS0+UGF0aCA9PSBOVUxMKQ0KPiArICAgICAgICBnb3RvIGZhaWwyOw0KPiArDQo+ICsgICAgc3Rh
dHVzID0gUnRsU3RyaW5nQ2NoUHJpbnRmQSgoKlJpbmcpLT5QYXRoLA0KPiArICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIiVzL3F1ZXVlLSV1IiwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEZyb250ZW5kR2V0RnJvbnRlbmRQYXRoKEZyb250ZW5kKSwNCj4gKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEluZGV4KTsNCj4gKyAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVz
KSkNCj4gKyAgICAgICAgZ290byBmYWlsMzsNCj4gKw0KPiArICAgIEtlSW5pdGlhbGl6ZVNwaW5M
b2NrKCYoKlJpbmcpLT5Mb2NrKTsNCj4gKw0KPiArICAgIEtlSW5pdGlhbGl6ZVRocmVhZGVkRHBj
KCYoKlJpbmcpLT5EcGMsIFJpbmdEcGMsICpSaW5nKTsNCj4gKyAgICBLZVNldEltcG9ydGFuY2VE
cGMoJigqUmluZyktPkRwYywgTWVkaXVtSGlnaEltcG9ydGFuY2UpOw0KPiArDQo+ICsgICAgc3Rh
dHVzID0gS2VHZXRQcm9jZXNzb3JOdW1iZXJGcm9tSW5kZXgoSW5kZXgsICZQcm9jTnVtYmVyKTsN
Cj4gKyAgICBBU1NFUlQoTlRfU1VDQ0VTUyhzdGF0dXMpKTsNCj4gKw0KPiArICAgIEtlU2V0VGFy
Z2V0UHJvY2Vzc29yRHBjRXgoJigqUmluZyktPkRwYywgJlByb2NOdW1iZXIpOw0KPiArDQo+ICsg
ICAgUXVldWVJbml0KCYoKlJpbmcpLT5QcmVwYXJlZFJlcXMpOw0KPiArICAgIFF1ZXVlSW5pdCgm
KCpSaW5nKS0+U3VibWl0dGVkUmVxcyk7DQo+ICsgICAgUXVldWVJbml0KCYoKlJpbmcpLT5TaHV0
ZG93blNyYnMpOw0KPiArDQo+ICsgICAgcmV0dXJuIFNUQVRVU19TVUNDRVNTOw0KPiArDQo+ICtm
YWlsMzoNCj4gKyAgICBFcnJvcigiZmFpbDNcbiIpOw0KPiArICAgIF9fUHJvdG9jb2xGcmVlKCgq
UmluZyktPlBhdGgpOw0KPiArICAgICgqUmluZyktPlBhdGggPSBOVUxMOw0KPiArZmFpbDI6DQo+
ICsgICAgRXJyb3IoImZhaWwyXG4iKTsNCj4gKyAgICAoKlJpbmcpLT5JbmRleCA9IDA7DQo+ICsg
ICAgKCpSaW5nKS0+UHJvdG9jb2wgPSBOVUxMOw0KPiArDQo+ICsgICAgQVNTRVJUKElzWmVyb01l
bW9yeSgqUmluZywgc2l6ZW9mKFhFTlZCRF9SSU5HKSkpOw0KPiArICAgIF9fUHJvdG9jb2xGcmVl
KCpSaW5nKTsNCj4gK2ZhaWwxOg0KPiArICAgIEVycm9yKCJmYWlsMSAoJTA4eClcbiIsIHN0YXR1
cyk7DQo+ICsgICAgKlJpbmcgPSBOVUxMOw0KPiArICAgIHJldHVybiBzdGF0dXM7DQo+ICt9DQo+
ICsNCj4gK3N0YXRpYyBWT0lEDQo+ICtSaW5nRGVzdHJveSgNCj4gKyAgICBJTiAgUFhFTlZCRF9S
SU5HICAgIFJpbmcNCj4gKyAgICApDQo+ICt7DQo+ICsgICAgUnRsWmVyb01lbW9yeSgmUmluZy0+
UHJlcGFyZWRSZXFzLCBzaXplb2YoWEVOVkJEX1FVRVVFKSk7DQo+ICsgICAgUnRsWmVyb01lbW9y
eSgmUmluZy0+U3VibWl0dGVkUmVxcywgc2l6ZW9mKFhFTlZCRF9RVUVVRSkpOw0KPiArICAgIFJ0
bFplcm9NZW1vcnkoJlJpbmctPlNodXRkb3duU3Jicywgc2l6ZW9mKFhFTlZCRF9RVUVVRSkpOw0K
PiArDQo+ICsgICAgUnRsWmVyb01lbW9yeSgmUmluZy0+RHBjLCBzaXplb2YoS0RQQykpOw0KPiAr
ICAgIFJ0bFplcm9NZW1vcnkoJlJpbmctPkxvY2ssIHNpemVvZihLU1BJTl9MT0NLKSk7DQo+ICsN
Cj4gKyAgICBSaW5nLT5CbGtPcFJlYWQgPSAwOw0KPiArICAgIFJpbmctPkJsa09wV3JpdGUgPSAw
Ow0KPiArICAgIFJpbmctPkJsa09wSW5kaXJlY3RSZWFkID0gMDsNCj4gKyAgICBSaW5nLT5CbGtP
cEluZGlyZWN0V3JpdGUgPSAwOw0KPiArICAgIFJpbmctPkJsa09wQmFycmllciA9IDA7DQo+ICsg
ICAgUmluZy0+QmxrT3BEaXNjYXJkID0gMDsNCj4gKyAgICBSaW5nLT5CbGtPcEZsdXNoID0gMDsN
Cj4gKw0KPiArICAgIF9fUHJvdG9jb2xGcmVlKFJpbmctPlBhdGgpOw0KPiArICAgIFJpbmctPlBh
dGggPSBOVUxMOw0KPiArDQo+ICsgICAgUmluZy0+SW5kZXggPSAwOw0KPiArICAgIFJpbmctPlBy
b3RvY29sID0gTlVMTDsNCj4gKw0KPiArICAgIEFTU0VSVChJc1plcm9NZW1vcnkoUmluZywgc2l6
ZW9mKFhFTlZCRF9SSU5HKSkpOw0KPiArICAgIF9fUHJvdG9jb2xGcmVlKFJpbmcpOw0KPiArfQ0K
PiArDQo+ICtzdGF0aWMgTlRTVEFUVVMNCj4gK1JpbmdDb25uZWN0KA0KPiArICAgIElOICBQWEVO
VkJEX1JJTkcgICAgICAgIFJpbmcNCj4gKyAgICApDQo+ICt7DQo+ICsgICAgUFhFTlZCRF9QUk9U
T0NPTCAgICAgICAgUHJvdG9jb2wgPSBSaW5nLT5Qcm90b2NvbDsNCj4gKyAgICBQWEVOVkJEX0dS
QU5URVIgICAgICAgICBHcmFudGVyID0gRnJvbnRlbmRHZXRHcmFudGVyKFByb3RvY29sLQ0KPiA+
RnJvbnRlbmQpOw0KPiArICAgIENIQVIgICAgICAgICAgICAgICAgICAgIE5hbWVbTUFYX05BTUVf
TEVOICsgMV07DQo+ICsgICAgVUxPTkcgICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+ICsgICAg
TlRTVEFUVVMgICAgICAgICAgICAgICAgc3RhdHVzOw0KPiArDQo+ICsgICAgUmluZy0+TWRsID0g
X19BbGxvY2F0ZVBhZ2VzKDEgPDwgUHJvdG9jb2wtPk9yZGVyKTsNCj4gKw0KPiArICAgIHN0YXR1
cyA9IFNUQVRVU19OT19NRU1PUlk7DQo+ICsgICAgaWYgKFJpbmctPk1kbCA9PSBOVUxMKQ0KPiAr
ICAgICAgICBnb3RvIGZhaWwxOw0KPiArDQo+ICsgICAgUmluZy0+U2hhcmVkID0gTW1HZXRTeXN0
ZW1BZGRyZXNzRm9yTWRsU2FmZShSaW5nLT5NZGwsDQo+ICsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWxQYWdlUHJpb3JpdHkpOw0KPiArICAgIEFT
U0VSVChSaW5nLT5TaGFyZWQgIT0gTlVMTCk7DQo+ICsNCj4gKyNwcmFnbWEgd2FybmluZyhwdXNo
KQ0KPiArI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQzMDUpDQo+ICsjcHJhZ21hIHdhcm5pbmco
ZGlzYWJsZTogNDMxMSkgLy8gJ3R5cGUgY2FzdCcgcG9pbnRlciB0cnVuY2F0aW9uIGZyb20NCj4g
J2Jsa2lmX3NyaW5nX2VudHJ5WzFdJyB0byAnbG9uZycNCj4gKyAgICBTSEFSRURfUklOR19JTklU
KFJpbmctPlNoYXJlZCk7DQo+ICsgICAgRlJPTlRfUklOR19JTklUKCZSaW5nLT5Gcm9udCwgUmlu
Zy0+U2hhcmVkLCBQQUdFX1NJWkUgPDwgUHJvdG9jb2wtDQo+ID5PcmRlcik7DQo+ICsjcHJhZ21h
IHdhcm5pbmcocG9wKQ0KPiArDQo+ICsgICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgKDF1bCA8
PCBQcm90b2NvbC0+T3JkZXIpOyArK0luZGV4KSB7DQo+ICsgICAgICAgIHN0YXR1cyA9IEdyYW50
ZXJHZXQoR3JhbnRlciwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBNbUdldE1kbFBm
bkFycmF5KFJpbmctPk1kbClbSW5kZXhdLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEZBTFNFLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICZSaW5nLT5HcmFudHNbSW5k
ZXhdKTsNCj4gKyAgICAgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpDQo+ICsgICAgICAgICAg
ICBnb3RvIGZhaWwyOw0KPiArICAgIH0NCj4gKw0KPiArICAgIFJpbmctPkNoYW5uZWwgPSBYRU5C
VVNfRVZUQ0hOKE9wZW4sDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlBy
b3RvY29sLT5FdnRjaG5JbnRlcmZhY2UsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgWEVOQlVTX0VWVENITl9UWVBFX1VOQk9VTkQsDQo+ICsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUmluZ0ludGVycnVwdCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBSaW5nLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZy
b250ZW5kR2V0QmFja2VuZERvbWFpbihQcm90b2NvbC0+RnJvbnRlbmQpLA0KPiArICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUpOw0KPiArICAgIHN0YXR1cyA9IFNUQVRVU19O
T19NRU1PUlk7DQo+ICsgICAgaWYgKFJpbmctPkNoYW5uZWwgPT0gTlVMTCkNCj4gKyAgICAgICAg
Z290byBmYWlsMzsNCj4gKw0KPiArICAgIFhFTkJVU19FVlRDSE4oVW5tYXNrLA0KPiArICAgICAg
ICAgICAgICAgICAgJlByb3RvY29sLT5FdnRjaG5JbnRlcmZhY2UsDQo+ICsgICAgICAgICAgICAg
ICAgICBSaW5nLT5DaGFubmVsLA0KPiArICAgICAgICAgICAgICAgICAgRkFMU0UpOw0KPiArDQo+
ICsgICAgc3RhdHVzID0gUnRsU3RyaW5nQ2NoUHJpbnRmQShOYW1lLA0KPiArICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTUFYX05BTUVfTEVOLA0KPiArICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19NT0RVTEVfXyIlcyIsDQo+ICsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBSaW5nLT5QYXRoKTsNCj4gKyAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkN
Cj4gKyAgICAgICAgZ290byBmYWlsNDsNCj4gKw0KPiArICAgIHN0YXR1cyA9IFhFTkJVU19ERUJV
RyhSZWdpc3RlciwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgJlByb3RvY29sLT5EZWJ1
Z0ludGVyZmFjZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSwNCj4gKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgUmluZ0RlYnVnQ2FsbGJhY2ssDQo+ICsgICAgICAgICAgICAg
ICAgICAgICAgICAgIFJpbmcsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICZSaW5nLT5E
ZWJ1Z0NhbGxiYWNrKTsNCj4gKyAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkNCj4gKyAgICAg
ICAgZ290byBmYWlsNTsNCj4gKw0KPiArICAgIHJldHVybiBTVEFUVVNfU1VDQ0VTUzsNCj4gKw0K
PiArZmFpbDU6DQo+ICsgICAgRXJyb3IoImZhaWw1XG4iKTsNCj4gK2ZhaWw0Og0KPiArICAgIEVy
cm9yKCJmYWlsNFxuIik7DQo+ICsgICAgWEVOQlVTX0VWVENITihDbG9zZSwNCj4gKyAgICAgICAg
ICAgICAgICAgICZQcm90b2NvbC0+RXZ0Y2huSW50ZXJmYWNlLA0KPiArICAgICAgICAgICAgICAg
ICAgUmluZy0+Q2hhbm5lbCk7DQo+ICsgICAgUmluZy0+Q2hhbm5lbCA9IE5VTEw7DQo+ICtmYWls
MzoNCj4gKyAgICBFcnJvcigiZmFpbDNcbiIpOw0KPiArZmFpbDI6DQo+ICsgICAgRXJyb3IoImZh
aWwyXG4iKTsNCj4gKyAgICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCAoMXVsIDw8IFByb3RvY29s
LT5PcmRlcik7ICsrSW5kZXgpIHsNCj4gKyAgICAgICAgaWYgKFJpbmctPkdyYW50c1tJbmRleF0g
PT0gTlVMTCkNCj4gKyAgICAgICAgICAgIGNvbnRpbnVlOw0KPiArDQo+ICsgICAgICAgIEdyYW50
ZXJQdXQoR3JhbnRlciwgUmluZy0+R3JhbnRzW0luZGV4XSk7DQo+ICsgICAgICAgIFJpbmctPkdy
YW50c1tJbmRleF0gPSBOVUxMOw0KPiArICAgIH0NCj4gKw0KPiArICAgIFJ0bFplcm9NZW1vcnko
JlJpbmctPkZyb250LCBzaXplb2YoYmxraWZfZnJvbnRfcmluZ190KSk7DQo+ICsNCj4gKyAgICBf
X0ZyZWVQYWdlcyhSaW5nLT5NZGwpOw0KPiArICAgIFJpbmctPlNoYXJlZCA9IE5VTEw7DQo+ICsg
ICAgUmluZy0+TWRsID0gTlVMTDsNCj4gK2ZhaWwxOg0KPiArICAgIEVycm9yKCJmYWlsMSAoJTA4
eClcbiIsIHN0YXR1cyk7DQo+ICsgICAgcmV0dXJuIHN0YXR1czsNCj4gK30NCj4gKw0KPiArc3Rh
dGljIE5UU1RBVFVTDQo+ICtSaW5nU3RvcmVXcml0ZSgNCj4gKyAgICBJTiAgUFhFTlZCRF9SSU5H
ICAgIFJpbmcsDQo+ICsgICAgSU4gIFBWT0lEICAgICAgICAgICBUcmFuc2FjdGlvbg0KPiArICAg
ICkNCj4gK3sNCj4gKyAgICBQWEVOVkJEX1BST1RPQ09MICAgIFByb3RvY29sID0gUmluZy0+UHJv
dG9jb2w7DQo+ICsgICAgUFhFTlZCRF9HUkFOVEVSICAgICBHcmFudGVyID0gRnJvbnRlbmRHZXRH
cmFudGVyKFByb3RvY29sLQ0KPiA+RnJvbnRlbmQpOw0KPiArICAgIFBDSEFSICAgICAgICAgICAg
ICAgUGF0aDsNCj4gKyAgICBVTE9ORyAgICAgICAgICAgICAgIFBvcnQ7DQo+ICsgICAgTlRTVEFU
VVMgICAgICAgICAgICBzdGF0dXM7DQo+ICsNCj4gKyAgICBpZiAoRnJvbnRlbmRHZXRNdWx0aVF1
ZXVlTWF4UXVldWVzKFByb3RvY29sLT5Gcm9udGVuZCkgPiAxKQ0KPiArICAgICAgICBQYXRoID0g
UmluZy0+UGF0aDsNCj4gKyAgICBlbHNlDQo+ICsgICAgICAgIFBhdGggPSBGcm9udGVuZEdldEZy
b250ZW5kUGF0aChQcm90b2NvbC0+RnJvbnRlbmQpOw0KPiArDQo+ICsgICAgaWYgKFByb3RvY29s
LT5PcmRlciA9PSAwKSB7DQo+ICsgICAgICAgIHN0YXR1cyA9IFhFTkJVU19TVE9SRShQcmludGYs
DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUHJvdG9jb2wtPlN0b3JlSW50ZXJm
YWNlLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNhY3Rpb24sDQo+ICsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXRoLA0KPiArICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgInJpbmctcmVmIiwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICIldSIsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcmFudGVyUmVmZXJlbmNl
KEdyYW50ZXIsIFJpbmctPkdyYW50c1swXSkpOw0KPiArICAgICAgICBpZiAoIU5UX1NVQ0NFU1Mo
c3RhdHVzKSkNCj4gKyAgICAgICAgICAgIHJldHVybiBzdGF0dXM7DQo+ICsgICAgfQ0KPiArICAg
IGVsc2Ugew0KPiArICAgICAgICBVTE9ORyAgICAgICAgICAgSW5kZXg7DQo+ICsNCj4gKyAgICAg
ICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgKDF1bCA8PCBQcm90b2NvbC0+T3JkZXIpOyArK0lu
ZGV4KSB7DQo+ICsgICAgICAgICAgICBDSEFSICAgICAgICBOYW1lW01BWF9OQU1FX0xFTiArIDFd
Ow0KPiArDQo+ICsgICAgICAgICAgICBzdGF0dXMgPSBSdGxTdHJpbmdDY2hQcmludGZBKE5hbWUs
DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1BWF9OQU1FX0xF
TiwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJpbmctcmVm
JXUiLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleCk7
DQo+ICsgICAgICAgICAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkNCj4gKyAgICAgICAgICAg
ICAgICByZXR1cm4gc3RhdHVzOw0KPiArDQo+ICsgICAgICAgICAgICBzdGF0dXMgPSBYRU5CVVNf
U1RPUkUoUHJpbnRmLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQcm90
b2NvbC0+U3RvcmVJbnRlcmZhY2UsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVHJhbnNhY3Rpb24sDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGF0
aCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lLA0KPiArICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICIldSIsDQo+ICsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR3JhbnRlclJlZmVyZW5jZShHcmFudGVyLCBSaW5nLT5HcmFudHNbSW5k
ZXhdKSk7DQo+ICsgICAgICAgICAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkNCj4gKyAgICAg
ICAgICAgICAgICByZXR1cm4gc3RhdHVzOw0KPiArICAgICAgICB9DQo+ICsgICAgfQ0KPiArDQo+
ICsgICAgUG9ydCA9IFhFTkJVU19FVlRDSE4oR2V0UG9ydCwNCj4gKyAgICAgICAgICAgICAgICAg
ICAgICAgICAmUHJvdG9jb2wtPkV2dGNobkludGVyZmFjZSwNCj4gKyAgICAgICAgICAgICAgICAg
ICAgICAgICBSaW5nLT5DaGFubmVsKTsNCj4gKw0KPiArICAgIHN0YXR1cyA9IFhFTkJVU19TVE9S
RShQcmludGYsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICZQcm90b2NvbC0+U3RvcmVJ
bnRlcmZhY2UsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zYWN0aW9uLA0KPiAr
ICAgICAgICAgICAgICAgICAgICAgICAgICBQYXRoLA0KPiArICAgICAgICAgICAgICAgICAgICAg
ICAgICAiZXZlbnQtY2hhbm5lbCIsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICIldSIs
DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIFBvcnQpOw0KPiArICAgIGlmICghTlRfU1VD
Q0VTUyhzdGF0dXMpKQ0KPiArICAgICAgICByZXR1cm4gc3RhdHVzOw0KPiArDQo+ICsgICAgcmV0
dXJuIFNUQVRVU19TVUNDRVNTOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgVk9JRA0KPiArUmluZ0Rp
c2Nvbm5lY3QoDQo+ICsgICAgSU4gIFBYRU5WQkRfUklORyAgICBSaW5nDQo+ICsgICAgKQ0KPiAr
ew0KPiArICAgIFBYRU5WQkRfUFJPVE9DT0wgICAgUHJvdG9jb2wgPSBSaW5nLT5Qcm90b2NvbDsN
Cj4gKyAgICBQWEVOVkJEX0dSQU5URVIgICAgIEdyYW50ZXIgPSBGcm9udGVuZEdldEdyYW50ZXIo
UHJvdG9jb2wtDQo+ID5Gcm9udGVuZCk7DQo+ICsgICAgVUxPTkcgICAgICAgICAgICAgICBJbmRl
eDsNCj4gKw0KPiArICAgIEFTU0VSVDNVKFJpbmctPlN1Ym1pdHRlZCwgPT0gLCBSaW5nLT5SZWNl
aXZlZCk7DQo+ICsNCj4gKyAgICBYRU5CVVNfREVCVUcoRGVyZWdpc3RlciwNCj4gKyAgICAgICAg
ICAgICAgICAgJlByb3RvY29sLT5EZWJ1Z0ludGVyZmFjZSwNCj4gKyAgICAgICAgICAgICAgICAg
UmluZy0+RGVidWdDYWxsYmFjayk7DQo+ICsgICAgUmluZy0+RGVidWdDYWxsYmFjayA9IE5VTEw7
DQo+ICsNCj4gKyAgICBYRU5CVVNfRVZUQ0hOKENsb3NlLA0KPiArICAgICAgICAgICAgICAgICAg
JlByb3RvY29sLT5FdnRjaG5JbnRlcmZhY2UsDQo+ICsgICAgICAgICAgICAgICAgICBSaW5nLT5D
aGFubmVsKTsNCj4gKyAgICBSaW5nLT5DaGFubmVsID0gTlVMTDsNCj4gKw0KPiArICAgIGZvciAo
SW5kZXggPSAwOyBJbmRleCA8ICgxdWwgPDwgUHJvdG9jb2wtPk9yZGVyKTsgKytJbmRleCkgew0K
PiArICAgICAgICBpZiAoUmluZy0+R3JhbnRzW0luZGV4XSA9PSBOVUxMKQ0KPiArICAgICAgICAg
ICAgY29udGludWU7DQo+ICsNCj4gKyAgICAgICAgR3JhbnRlclB1dChHcmFudGVyLCBSaW5nLT5H
cmFudHNbSW5kZXhdKTsNCj4gKyAgICAgICAgUmluZy0+R3JhbnRzW0luZGV4XSA9IE5VTEw7DQo+
ICsgICAgfQ0KPiArDQo+ICsgICAgUnRsWmVyb01lbW9yeSgmUmluZy0+RnJvbnQsIHNpemVvZihi
bGtpZl9mcm9udF9yaW5nX3QpKTsNCj4gKw0KPiArICAgIF9fRnJlZVBhZ2VzKFJpbmctPk1kbCk7
DQo+ICsgICAgUmluZy0+U2hhcmVkID0gTlVMTDsNCj4gKyAgICBSaW5nLT5NZGwgPSBOVUxMOw0K
PiArICAgIFJpbmctPkV2ZW50cyA9IDA7DQo+ICsgICAgUmluZy0+RHBjcyA9IDA7DQo+ICsgICAg
UmluZy0+U3VibWl0dGVkID0gMDsNCj4gKyAgICBSaW5nLT5SZWNlaXZlZCA9IDA7DQo+ICt9DQo+
ICsNCj4gK3N0YXRpYyBWT0lEDQo+ICtSaW5nRW5hYmxlKA0KPiArICAgIElOICBQWEVOVkJEX1JJ
TkcgICAgUmluZw0KPiArICAgICkNCj4gK3sNCj4gKyAgICBQWEVOVkJEX1BST1RPQ09MICAgIFBy
b3RvY29sID0gUmluZy0+UHJvdG9jb2w7DQo+ICsNCj4gKyAgICBYRU5CVVNfRVZUQ0hOKFRyaWdn
ZXIsDQo+ICsgICAgICAgICAgICAgICAgICAmUHJvdG9jb2wtPkV2dGNobkludGVyZmFjZSwNCj4g
KyAgICAgICAgICAgICAgICAgIFJpbmctPkNoYW5uZWwpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMg
Vk9JRA0KPiArUmluZ0Rpc2FibGUoDQo+ICsgICAgSU4gIFBYRU5WQkRfUklORyAgICBSaW5nDQo+
ICsgICAgKQ0KPiArew0KPiArICAgIFBYRU5WQkRfUFJPVE9DT0wgICAgUHJvdG9jb2wgPSBSaW5n
LT5Qcm90b2NvbDsNCj4gKyAgICBVTE9ORyAgICAgICAgICAgICAgIENvdW50Ow0KPiArICAgIEtJ
UlFMICAgICAgICAgICAgICAgSXJxbDsNCj4gKyAgICBQWEVOVkJEX1RBUkdFVCAgICAgIFRhcmdl
dCA9IEZyb250ZW5kR2V0VGFyZ2V0KFByb3RvY29sLT5Gcm9udGVuZCk7DQo+ICsgICAgUFhFTlZC
RF9BREFQVEVSICAgICBBZGFwdGVyID0gVGFyZ2V0R2V0QWRhcHRlcihUYXJnZXQpOw0KPiArDQo+
ICsgICAgLy8gcG9sbCByaW5nIGFuZCBzZW5kIGV2ZW50IGNoYW5uZWwgbm90aWZpY2F0aW9uIGV2
ZXJ5IDFtcyAoZm9yIHVwIHRvIDMNCj4gbWludXRlcykNCj4gKyAgICBDb3VudCA9IDA7DQo+ICsg
ICAgd2hpbGUgKFF1ZXVlQ291bnQoJlJpbmctPlN1Ym1pdHRlZFJlcXMpKSB7DQo+ICsgICAgICAg
IGlmIChDb3VudCA+IDE4MDAwMCkNCj4gKyAgICAgICAgICAgIGJyZWFrOw0KPiArICAgICAgICBL
ZVJhaXNlSXJxbChESVNQQVRDSF9MRVZFTCwgJklycWwpOw0KPiArICAgICAgICBSaW5nUG9sbChS
aW5nKTsNCj4gKyAgICAgICAgS2VMb3dlcklycWwoSXJxbCk7DQo+ICsgICAgICAgIFhFTkJVU19F
VlRDSE4oU2VuZCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAmUHJvdG9jb2wtPkV2dGNobklu
dGVyZmFjZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICBSaW5nLT5DaGFubmVsKTsNCj4gKyAg
ICAgICAgU3RvclBvcnRTdGFsbEV4ZWN1dGlvbigxMDAwKTsgICAvLyAxMDAwIG1pY3JvLXNlY29u
ZHMNCj4gKyAgICAgICAgKytDb3VudDsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBWZXJib3NlKCJU
YXJnZXRbJWRdWyV1XSA6ICV1IFN1Ym1pdHRlZCByZXF1ZXN0cyBsZWZ0ICgldQ0KPiBpdGVycmF0
aW9ucylcbiIsDQo+ICsgICAgICAgICAgICBGcm9udGVuZEdldFRhcmdldElkKFByb3RvY29sLT5G
cm9udGVuZCksDQo+ICsgICAgICAgICAgICBSaW5nLT5JbmRleCwNCj4gKyAgICAgICAgICAgIFF1
ZXVlQ291bnQoJlJpbmctPlN1Ym1pdHRlZFJlcXMpLA0KPiArICAgICAgICAgICAgQ291bnQpOw0K
PiArDQo+ICsgICAgLy8gRmFpbCBQcmVwYXJlZFJlcXMNCj4gKyAgICBmb3IgKDs7KSB7DQo+ICsg
ICAgICAgIFBYRU5WQkRfU1JCRVhUICAgICAgU3JiRXh0Ow0KPiArICAgICAgICBQU0NTSV9SRVFV
RVNUX0JMT0NLIFNyYjsNCj4gKyAgICAgICAgUFhFTlZCRF9SRVFVRVNUICAgICBSZXF1ZXN0Ow0K
PiArICAgICAgICBQTElTVF9FTlRSWSAgICAgICAgIExpc3RFbnRyeTsNCj4gKw0KPiArICAgICAg
ICBMaXN0RW50cnkgPSBRdWV1ZVBvcCgmUmluZy0+UHJlcGFyZWRSZXFzKTsNCj4gKyAgICAgICAg
aWYgKExpc3RFbnRyeSA9PSBOVUxMKQ0KPiArICAgICAgICAgICAgYnJlYWs7DQo+ICsgICAgICAg
IFJlcXVlc3QgPSBDT05UQUlOSU5HX1JFQ09SRChMaXN0RW50cnksIFhFTlZCRF9SRVFVRVNULA0K
PiBMaXN0RW50cnkpOw0KPiArICAgICAgICBTcmJFeHQgPSBSZXF1ZXN0LT5TcmJFeHQ7DQo+ICsg
ICAgICAgIFNyYiA9IFNyYkV4dC0+U3JiOw0KPiArDQo+ICsgICAgICAgIFNyYi0+U3JiU3RhdHVz
ID0gU1JCX1NUQVRVU19BQk9SVEVEOw0KPiArICAgICAgICBTcmItPlNjc2lTdGF0dXMgPSAweDQw
OyAvLyBTQ1NJX0FCT1JURUQNCj4gKw0KPiArICAgICAgICBQcm90b2NvbFB1dFJlcXVlc3QoUHJv
dG9jb2wsIFJlcXVlc3QpOw0KPiArDQo+ICsgICAgICAgIGlmIChJbnRlcmxvY2tlZERlY3JlbWVu
dCgmU3JiRXh0LT5SZXF1ZXN0Q291bnQpID09IDApDQo+ICsgICAgICAgICAgICBBZGFwdGVyQ29t
cGxldGVTcmIoQWRhcHRlciwgU3JiRXh0KTsNCj4gKyAgICB9DQo+ICt9DQo+ICsNCj4gK3N0YXRp
YyBWT0lEDQo+ICtSaW5nVHJpZ2dlcigNCj4gKyAgICBJTiAgUFhFTlZCRF9SSU5HICAgIFJpbmcN
Cj4gKyAgICApDQo+ICt7DQo+ICsgICAgUFhFTlZCRF9QUk9UT0NPTCAgICBQcm90b2NvbCA9IFJp
bmctPlByb3RvY29sOw0KPiArDQo+ICsgICAgWEVOQlVTX0VWVENITihUcmlnZ2VyLA0KPiArICAg
ICAgICAgICAgICAgICAgJlByb3RvY29sLT5FdnRjaG5JbnRlcmZhY2UsDQo+ICsgICAgICAgICAg
ICAgICAgICBSaW5nLT5DaGFubmVsKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIEZPUkNFSU5MSU5F
IE1NX1BBR0VfUFJJT1JJVFkNCj4gK19fUHJvdG9jb2xQcmlvcml0eSgNCj4gKyAgICBJTiAgUFhF
TlZCRF9QUk9UT0NPTCAgICBQcm90b2NvbA0KPiArICAgICkNCj4gK3sNCj4gKyAgICBQWEVOVkJE
X0NBUFMgICAgICAgIENhcHMgPSBGcm9udGVuZEdldENhcHMoUHJvdG9jb2wtPkZyb250ZW5kKTsN
Cj4gKyAgICBpZiAoIShDYXBzLT5QYWdpbmcgfHwNCj4gKyAgICAgICAgICBDYXBzLT5IaWJlcm5h
dGlvbiB8fA0KPiArICAgICAgICAgIENhcHMtPkR1bXBGaWxlKSkNCj4gKyAgICAgICAgcmV0dXJu
IE5vcm1hbFBhZ2VQcmlvcml0eTsNCj4gKw0KPiArICAgIHJldHVybiBIaWdoUGFnZVByaW9yaXR5
Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgQk9PTEVBTg0KPiArUHJvdG9jb2xQcmVwYXJlU2VnbWVu
dCgNCj4gKyAgICBJTiAgUFhFTlZCRF9QUk9UT0NPTCAgICBQcm90b2NvbCwNCj4gKyAgICBJTiAg
UFhFTlZCRF9TRUdNRU5UICAgICBTZWdtZW50LA0KPiArICAgIElOICBQWEVOVkJEX1NSQkVYVCAg
ICAgIFNyYkV4dCwNCj4gKyAgICBJTiAgQk9PTEVBTiAgICAgICAgICAgICBSZWFkT25seSwNCj4g
KyAgICBJTiAgVUxPTkcgICAgICAgICAgICAgICBTZWN0b3JzTGVmdCwNCj4gKyAgICBPVVQgUFVM
T05HICAgICAgICAgICAgICBTZWN0b3JzTm93DQo+ICsgICAgKQ0KPiArew0KPiArICAgIFBGTl9O
VU1CRVIgICAgICAgICAgICAgIFBmbjsNCj4gKyAgICBVTE9ORyAgICAgICAgICAgICAgICAgICBP
ZmZzZXQ7DQo+ICsgICAgVUxPTkcgICAgICAgICAgICAgICAgICAgTGVuZ3RoOw0KPiArICAgIE5U
U1RBVFVTICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAgICBQWEVOVkJEX0dSQU5URVIgICAg
ICAgICBHcmFudGVyID0gRnJvbnRlbmRHZXRHcmFudGVyKFByb3RvY29sLQ0KPiA+RnJvbnRlbmQp
Ow0KPiArICAgIGNvbnN0IFVMT05HICAgICAgICAgICAgIFNlY3RvclNpemUgPSBGcm9udGVuZEdl
dERpc2tJbmZvKFByb3RvY29sLQ0KPiA+RnJvbnRlbmQpLT5TZWN0b3JTaXplOw0KPiArICAgIGNv
bnN0IFVMT05HICAgICAgICAgICAgIFNlY3RvcnNQZXJQYWdlID0gX19TZWN0b3JzUGVyUGFnZShT
ZWN0b3JTaXplKTsNCj4gKyAgICBQWEVOVkJEX1RBUkdFVCAgICAgICAgICBUYXJnZXQgPSBGcm9u
dGVuZEdldFRhcmdldChQcm90b2NvbC0NCj4gPkZyb250ZW5kKTsNCj4gKyAgICBQWEVOVkJEX0FE
QVBURVIgICAgICAgICBBZGFwdGVyID0gVGFyZ2V0R2V0QWRhcHRlcihUYXJnZXQpOw0KPiArDQo+
ICsgICAgUGZuID0gQWRhcHRlckdldE5leHRTR0VudHJ5KEFkYXB0ZXIsDQo+ICsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFNyYkV4dCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJk9mZnNldCwN
Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkxlbmd0aCk7DQo+ICsgICAgaWYg
KChPZmZzZXQgJiAoU2VjdG9yU2l6ZSAtIDEpKSA9PSAwICYmDQo+ICsgICAgICAgIChMZW5ndGgg
JiAoU2VjdG9yU2l6ZSAtIDEpKSA9PSAwKSB7DQo+ICsgICAgICAgICsrUHJvdG9jb2wtPlNlZ3NH
cmFudGVkOw0KPiArICAgICAgICAvLyBnZXQgZmlyc3Qgc2VjdG9yLCBsYXN0IHNlY3RvciBhbmQg
Y291bnQNCj4gKyAgICAgICAgU2VnbWVudC0+Rmlyc3RTZWN0b3IgPSAoVUNIQVIpKChPZmZzZXQg
KyBTZWN0b3JTaXplIC0gMSkgLyBTZWN0b3JTaXplKTsNCj4gKyAgICAgICAgKlNlY3RvcnNOb3cg
PSBfX21pbihTZWN0b3JzTGVmdCwgU2VjdG9yc1BlclBhZ2UgLSBTZWdtZW50LQ0KPiA+Rmlyc3RT
ZWN0b3IpOw0KPiArICAgICAgICBTZWdtZW50LT5MYXN0U2VjdG9yID0gKFVDSEFSKShTZWdtZW50
LT5GaXJzdFNlY3RvciArICpTZWN0b3JzTm93DQo+IC0gMSk7DQo+ICsNCj4gKyAgICAgICAgQVNT
RVJUM1UoKExlbmd0aCAvIFNlY3RvclNpemUpLCA9PSAsICpTZWN0b3JzTm93KTsNCj4gKyAgICB9
DQo+ICsgICAgZWxzZSB7DQo+ICsgICAgICAgIFBYRU5WQkRfQk9VTkNFICAgICAgQm91bmNlOw0K
PiArICAgICAgICBQTURMICAgICAgICAgICAgICAgIE1kbDsNCj4gKw0KPiArICAgICAgICArK1By
b3RvY29sLT5TZWdzQm91bmNlZDsNCj4gKyAgICAgICAgLy8gZ2V0IGZpcnN0IHNlY3RvciwgbGFz
dCBzZWN0b3IgYW5kIGNvdW50DQo+ICsgICAgICAgIFNlZ21lbnQtPkZpcnN0U2VjdG9yID0gMDsN
Cj4gKyAgICAgICAgKlNlY3RvcnNOb3cgPSBfX21pbihTZWN0b3JzTGVmdCwgU2VjdG9yc1BlclBh
Z2UpOw0KPiArICAgICAgICBTZWdtZW50LT5MYXN0U2VjdG9yID0gKFVDSEFSKSgqU2VjdG9yc05v
dyAtIDEpOw0KPiArDQo+ICsgICAgICAgIEJvdW5jZSA9IEFkYXB0ZXJHZXRCb3VuY2UoQWRhcHRl
cik7DQo+ICsgICAgICAgIGlmIChCb3VuY2UgPT0gTlVMTCkNCj4gKyAgICAgICAgICAgIGdvdG8g
ZmFpbDE7DQo+ICsgICAgICAgIFNlZ21lbnQtPkJvdW5jZSA9IEJvdW5jZTsNCj4gKw0KPiArI3By
YWdtYSB3YXJuaW5nKHB1c2gpDQo+ICsjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZToyODE0NSkNCj4g
KyAgICAgICAgTWRsID0gJkJvdW5jZS0+U291cmNlTWRsOw0KPiArICAgICAgICBNZGwtPk5leHQg
PSBOVUxMOw0KPiArICAgICAgICBNZGwtPlNpemUgPSAoU0hPUlQpKHNpemVvZihNREwpICsgc2l6
ZW9mKFBGTl9OVU1CRVIpKTsNCj4gKyAgICAgICAgTWRsLT5NZGxGbGFncyA9IE1ETF9QQUdFU19M
T0NLRUQ7DQo+ICsgICAgICAgIE1kbC0+UHJvY2VzcyA9IE5VTEw7DQo+ICsgICAgICAgIE1kbC0+
TWFwcGVkU3lzdGVtVmEgPSBOVUxMOw0KPiArICAgICAgICBNZGwtPlN0YXJ0VmEgPSBOVUxMOw0K
PiArICAgICAgICBNZGwtPkJ5dGVDb3VudCA9IExlbmd0aDsNCj4gKyAgICAgICAgTWRsLT5CeXRl
T2Zmc2V0ID0gT2Zmc2V0Ow0KPiArICAgICAgICBCb3VuY2UtPlNvdXJjZVBmblswXSA9IFBmbjsN
Cj4gKw0KPiArICAgICAgICBpZiAoTGVuZ3RoIDwgKlNlY3RvcnNOb3cgKiBTZWN0b3JTaXplKSB7
DQo+ICsgICAgICAgICAgICBQZm4gPSBBZGFwdGVyR2V0TmV4dFNHRW50cnkoQWRhcHRlciwNCj4g
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTcmJFeHQsDQo+ICsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoLA0KPiArICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZPZmZzZXQsDQo+ICsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJkxlbmd0aCk7DQo+ICsgICAgICAgICAgICBNZGwt
PlNpemUgKz0gc2l6ZW9mKFBGTl9OVU1CRVIpOw0KPiArICAgICAgICAgICAgTWRsLT5CeXRlQ291
bnQgKz0gTGVuZ3RoOw0KPiArICAgICAgICAgICAgQm91bmNlLT5Tb3VyY2VQZm5bMV0gPSBQZm47
DQo+ICsgICAgICAgIH0NCj4gKyNwcmFnbWEgd2FybmluZyhwb3ApDQo+ICsNCj4gKyAgICAgICAg
QVNTRVJUKChNZGwtPkJ5dGVDb3VudCAmIChTZWN0b3JTaXplIC0gMSkpID09IDApOw0KPiArICAg
ICAgICBBU1NFUlQzVShNZGwtPkJ5dGVDb3VudCwgPD0gLCBQQUdFX1NJWkUpOw0KPiArICAgICAg
ICBBU1NFUlQzVSgqU2VjdG9yc05vdywgPT0gLCAoTWRsLT5CeXRlQ291bnQgLyBTZWN0b3JTaXpl
KSk7DQo+ICsNCj4gKyAgICAgICAgQm91bmNlLT5Tb3VyY2VQdHIgPSBNbU1hcExvY2tlZFBhZ2Vz
U3BlY2lmeUNhY2hlKE1kbCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEtlcm5lbE1vZGUsDQo+ICsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNbUNhY2hlZCwNCj4gKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEws
DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBGQUxTRSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fUHJvdG9jb2xQcmlvcml0eShQcm90b2NvbCkpOw0KPiArICAgICAg
ICBpZiAoQm91bmNlLT5Tb3VyY2VQdHIgPT0gTlVMTCkNCj4gKyAgICAgICAgICAgIGdvdG8gZmFp
bDI7DQo+ICsNCj4gKyAgICAgICAgQVNTRVJUM1AoTW1HZXRNZGxQZm5BcnJheShNZGwpWzBdLCA9
PSAsIEJvdW5jZS0+U291cmNlUGZuWzBdKTsNCj4gKyAgICAgICAgQVNTRVJUM1AoTW1HZXRNZGxQ
Zm5BcnJheShNZGwpWzFdLCA9PSAsIEJvdW5jZS0+U291cmNlUGZuWzFdKTsNCj4gKw0KPiArICAg
ICAgICAvLyBjb3B5IGNvbnRlbnRzIGluDQo+ICsgICAgICAgIGlmIChSZWFkT25seSkgeyAvLyBP
cGVyYXRpb24gPT0gQkxLSUZfT1BfV1JJVEUNCj4gKyAgICAgICAgICAgIFJ0bENvcHlNZW1vcnko
Qm91bmNlLT5Cb3VuY2VQdHIsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIEJvdW5jZS0+
U291cmNlUHRyLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICBNbUdldE1kbEJ5dGVDb3Vu
dCgmQm91bmNlLT5Tb3VyY2VNZGwpKTsNCj4gKyAgICAgICAgfQ0KPiArDQo+ICsgICAgICAgIFBm
biA9IE1tR2V0TWRsUGZuQXJyYXkoQm91bmNlLT5Cb3VuY2VNZGwpWzBdOw0KPiArICAgIH0NCj4g
Kw0KPiArICAgIC8vIEdyYW50IHNlZ21lbnQncyBwYWdlDQo+ICsgICAgU3RhdHVzID0gR3JhbnRl
ckdldChHcmFudGVyLCBQZm4sIFJlYWRPbmx5LCAmU2VnbWVudC0+R3JhbnQpOw0KPiArICAgIGlm
ICghTlRfU1VDQ0VTUyhTdGF0dXMpKQ0KPiArICAgICAgICBnb3RvIGZhaWwzOw0KPiArDQo+ICsg
ICAgcmV0dXJuIFRSVUU7DQo+ICsNCj4gK2ZhaWwzOg0KPiArZmFpbDI6DQo+ICtmYWlsMToNCj4g
KyAgICByZXR1cm4gRkFMU0U7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBCT09MRUFODQo+ICtQcm90
b2NvbFByZXBhcmVCbGtpZlJlYWRXcml0ZSgNCj4gKyAgICBJTiAgUFhFTlZCRF9QUk9UT0NPTCAg
ICBQcm90b2NvbCwNCj4gKyAgICBJTiAgUFhFTlZCRF9SRVFVRVNUICAgICBSZXF1ZXN0LA0KPiAr
ICAgIElOICBQWEVOVkJEX1NSQkVYVCAgICAgIFNyYkV4dCwNCj4gKyAgICBJTiAgVUxPTkcgICAg
ICAgICAgICAgICBNYXhTZWdtZW50cywNCj4gKyAgICBJTiAgVUxPTkc2NCAgICAgICAgICAgICBT
ZWN0b3JTdGFydCwNCj4gKyAgICBJTiAgVUxPTkcgICAgICAgICAgICAgICBTZWN0b3JzTGVmdCwN
Cj4gKyAgICBPVVQgUFVMT05HICAgICAgICAgICAgICBTZWN0b3JzRG9uZQ0KPiArICAgICkNCj4g
K3sNCj4gKyAgICBQU0NTSV9SRVFVRVNUX0JMT0NLICAgICBTcmIgPSBTcmJFeHQtPlNyYjsNCj4g
KyAgICBVQ0hBUiAgICAgICAgICAgICAgICAgICBPcGVyYXRpb247DQo+ICsgICAgQk9PTEVBTiAg
ICAgICAgICAgICAgICAgUmVhZE9ubHk7DQo+ICsgICAgVUxPTkcgICAgICAgICAgICAgICAgICAg
SW5kZXg7DQo+ICsgICAgX19PcGVyYXRpb24oQ2RiX09wZXJhdGlvbkV4KFNyYiksICZPcGVyYXRp
b24sICZSZWFkT25seSk7DQo+ICsNCj4gKyAgICBSZXF1ZXN0LT5PcGVyYXRpb24gPSBPcGVyYXRp
b247DQo+ICsgICAgUmVxdWVzdC0+TnJTZWdtZW50cyA9IDA7DQo+ICsgICAgUmVxdWVzdC0+Rmly
c3RTZWN0b3IgPSBTZWN0b3JTdGFydDsNCj4gKw0KPiArICAgIGZvciAoSW5kZXggPSAwOw0KPiAr
ICAgICAgICAgSW5kZXggPCBNYXhTZWdtZW50cyAmJg0KPiArICAgICAgICAgU2VjdG9yc0xlZnQg
PiAwOw0KPiArICAgICAgICAgKytJbmRleCkgew0KPiArICAgICAgICBQWEVOVkJEX1NFR01FTlQg
U2VnbWVudDsNCj4gKyAgICAgICAgVUxPTkcgICAgICAgICAgIFNlY3RvcnNOb3c7DQo+ICsNCj4g
KyAgICAgICAgU2VnbWVudCA9IFByb3RvY29sR2V0U2VnbWVudChQcm90b2NvbCk7DQo+ICsgICAg
ICAgIGlmIChTZWdtZW50ID09IE5VTEwpDQo+ICsgICAgICAgICAgICBnb3RvIGZhaWwxOw0KPiAr
DQo+ICsgICAgICAgIEluc2VydFRhaWxMaXN0KCZSZXF1ZXN0LT5TZWdtZW50cywgJlNlZ21lbnQt
Pkxpc3RFbnRyeSk7DQo+ICsgICAgICAgICsrUmVxdWVzdC0+TnJTZWdtZW50czsNCj4gKw0KPiAr
ICAgICAgICBpZiAoIVByb3RvY29sUHJlcGFyZVNlZ21lbnQoUHJvdG9jb2wsDQo+ICsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWdtZW50LA0KPiArICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgU3JiRXh0LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUmVhZE9ubHksDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBTZWN0b3JzTGVmdCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICZTZWN0b3JzTm93KSkNCj4gKyAgICAgICAgICAgIGdvdG8gZmFpbDI7DQo+ICsNCj4gKyAgICAg
ICAgKlNlY3RvcnNEb25lICs9IFNlY3RvcnNOb3c7DQo+ICsgICAgICAgIFNlY3RvcnNMZWZ0IC09
IFNlY3RvcnNOb3c7DQo+ICsgICAgfQ0KPiArICAgIEFTU0VSVDNVKFJlcXVlc3QtPk5yU2VnbWVu
dHMsID4sIDApOw0KPiArICAgIEFTU0VSVDNVKFJlcXVlc3QtPk5yU2VnbWVudHMsIDw9ICwgTWF4
U2VnbWVudHMpOw0KPiArDQo+ICsgICAgcmV0dXJuIFRSVUU7DQo+ICsNCj4gK2ZhaWwyOg0KPiAr
ZmFpbDE6DQo+ICsgICAgcmV0dXJuIEZBTFNFOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgQk9PTEVB
Tg0KPiArUHJvdG9jb2xQcmVwYXJlQmxraWZJbmRpcmVjdCgNCj4gKyAgICBJTiAgUFhFTlZCRF9Q
Uk9UT0NPTCAgICBQcm90b2NvbCwNCj4gKyAgICBJTiAgUFhFTlZCRF9SRVFVRVNUICAgICBSZXF1
ZXN0DQo+ICsgICAgKQ0KPiArew0KPiArICAgIFVMT05HICAgICAgICAgICAgICAgICAgIEluZGV4
Ow0KPiArICAgIFVMT05HICAgICAgICAgICAgICAgICAgIE5yU2VnbWVudHMgPSAwOw0KPiArDQo+
ICsgICAgZm9yIChJbmRleCA9IDA7DQo+ICsgICAgICAgICBJbmRleCA8IEJMS0lGX01BWF9JTkRJ
UkVDVF9QQUdFU19QRVJfUkVRVUVTVCAmJg0KPiArICAgICAgICAgTnJTZWdtZW50cyA8IFJlcXVl
c3QtPk5yU2VnbWVudHM7DQo+ICsgICAgICAgICArK0luZGV4KSB7DQo+ICsgICAgICAgIFBYRU5W
QkRfSU5ESVJFQ1QgICAgSW5kaXJlY3Q7DQo+ICsNCj4gKyAgICAgICAgSW5kaXJlY3QgPSBQcm90
b2NvbEdldEluZGlyZWN0KFByb3RvY29sKTsNCj4gKyAgICAgICAgaWYgKEluZGlyZWN0ID09IE5V
TEwpDQo+ICsgICAgICAgICAgICBnb3RvIGZhaWwxOw0KPiArICAgICAgICBJbnNlcnRUYWlsTGlz
dCgmUmVxdWVzdC0+SW5kaXJlY3RzLCAmSW5kaXJlY3QtPkxpc3RFbnRyeSk7DQo+ICsNCj4gKyAg
ICAgICAgTnJTZWdtZW50cyArPSBYRU5WQkRfTUFYX1NFR01FTlRTX1BFUl9QQUdFOw0KPiArICAg
IH0NCj4gKw0KPiArICAgIHJldHVybiBUUlVFOw0KPiArDQo+ICtmYWlsMToNCj4gKyAgICByZXR1
cm4gRkFMU0U7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBGT1JDRUlOTElORSBVTE9ORw0KPiArUHJv
dG9jb2xVc2VJbmRpcmVjdCgNCj4gKyAgICBJTiAgUFhFTlZCRF9QUk9UT0NPTCAgICBQcm90b2Nv
bCwNCj4gKyAgICBJTiAgVUxPTkcgICAgICAgICAgICAgICBTZWN0b3JzTGVmdA0KPiArICAgICkN
Cj4gK3sNCj4gKyAgICBjb25zdCBVTE9ORyBTZWN0b3JzUGVyUGFnZSA9DQo+IF9fU2VjdG9yc1Bl
clBhZ2UoRnJvbnRlbmRHZXREaXNrSW5mbyhQcm90b2NvbC0+RnJvbnRlbmQpLT5TZWN0b3JTaXpl
KTsNCj4gKyAgICBjb25zdCBVTE9ORyBNYXhJbmRpcmVjdFNlZ3MgPSBGcm9udGVuZEdldEZlYXR1
cmVzKFByb3RvY29sLQ0KPiA+RnJvbnRlbmQpLT5JbmRpcmVjdDsNCj4gKw0KPiArICAgIGlmIChN
YXhJbmRpcmVjdFNlZ3MgPD0gQkxLSUZfTUFYX1NFR01FTlRTX1BFUl9SRVFVRVNUKQ0KPiArICAg
ICAgICByZXR1cm4gQkxLSUZfTUFYX1NFR01FTlRTX1BFUl9SRVFVRVNUOyAvLyBub3Qgc3VwcG9y
dGVkDQo+ICsNCj4gKyAgICBpZiAoU2VjdG9yc0xlZnQgPCBCTEtJRl9NQVhfU0VHTUVOVFNfUEVS
X1JFUVVFU1QgKg0KPiBTZWN0b3JzUGVyUGFnZSkNCj4gKyAgICAgICAgcmV0dXJuIEJMS0lGX01B
WF9TRUdNRU5UU19QRVJfUkVRVUVTVDsgLy8gZmlyc3QgaW50byBhIHNpbmdsZQ0KPiBCTEtJRl9P
UF97UkVBRC9XUklURX0NCj4gKw0KPiArICAgIHJldHVybiBNYXhJbmRpcmVjdFNlZ3M7DQo+ICt9
DQo+ICsNCj4gK3N0YXRpYyBGT1JDRUlOTElORSBWT0lEDQo+ICtQcm90b2NvbENhbmNlbFJlcXVl
c3RMaXN0KA0KPiArICAgIElOICBQWEVOVkJEX1BST1RPQ09MICAgIFByb3RvY29sLA0KPiArICAg
IElOICBQTElTVF9FTlRSWSAgICAgICAgIExpc3QNCj4gKyAgICApDQo+ICt7DQo+ICsgICAgZm9y
ICg7Oykgew0KPiArICAgICAgICBQWEVOVkJEX1JFUVVFU1QgICAgIFJlcXVlc3Q7DQo+ICsgICAg
ICAgIFBMSVNUX0VOVFJZICAgICAgICAgTGlzdEVudHJ5Ow0KPiArDQo+ICsgICAgICAgIExpc3RF
bnRyeSA9IFJlbW92ZUhlYWRMaXN0KExpc3QpOw0KPiArICAgICAgICBpZiAoTGlzdEVudHJ5ID09
IExpc3QpDQo+ICsgICAgICAgICAgICBicmVhazsNCj4gKw0KPiArICAgICAgICBSZXF1ZXN0ID0g
Q09OVEFJTklOR19SRUNPUkQoTGlzdEVudHJ5LCBYRU5WQkRfUkVRVUVTVCwNCj4gTGlzdEVudHJ5
KTsNCj4gKyAgICAgICAgUHJvdG9jb2xQdXRSZXF1ZXN0KFByb3RvY29sLCBSZXF1ZXN0KTsNCj4g
KyAgICB9DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBCT09MRUFODQo+ICtQcm90b2NvbFByZXBhcmVS
ZWFkV3JpdGUoDQo+ICsgICAgSU4gIFBYRU5WQkRfUFJPVE9DT0wgICAgUHJvdG9jb2wsDQo+ICsg
ICAgSU4gIFBYRU5WQkRfU1JCRVhUICAgICAgU3JiRXh0LA0KPiArICAgIElOICBQTElTVF9FTlRS
WSAgICAgICAgIExpc3QNCj4gKyAgICApDQo+ICt7DQo+ICsgICAgUFNDU0lfUkVRVUVTVF9CTE9D
SyAgICAgU3JiID0gU3JiRXh0LT5TcmI7DQo+ICsgICAgVUxPTkc2NCAgICAgICAgICAgICAgICAg
U2VjdG9yU3RhcnQgPSBDZGJfTG9naWNhbEJsb2NrKFNyYik7DQo+ICsgICAgVUxPTkcgICAgICAg
ICAgICAgICAgICAgU2VjdG9yc0xlZnQgPSBDZGJfVHJhbnNmZXJCbG9jayhTcmIpOw0KPiArDQo+
ICsgICAgU3JiLT5TcmJTdGF0dXMgPSBTUkJfU1RBVFVTX1BFTkRJTkc7DQo+ICsNCj4gKyAgICBT
cmJFeHQtPlJlcXVlc3RDb3VudCA9IDA7DQo+ICsNCj4gKyAgICB3aGlsZSAoU2VjdG9yc0xlZnQg
PiAwKSB7DQo+ICsgICAgICAgIFVMT05HICAgICAgICAgICBNYXhTZWdtZW50czsNCj4gKyAgICAg
ICAgVUxPTkcgICAgICAgICAgIFNlY3RvcnNEb25lID0gMDsNCj4gKyAgICAgICAgUFhFTlZCRF9S
RVFVRVNUIFJlcXVlc3Q7DQo+ICsNCj4gKyAgICAgICAgUmVxdWVzdCA9IFByb3RvY29sR2V0UmVx
dWVzdChQcm90b2NvbCk7DQo+ICsgICAgICAgIGlmIChSZXF1ZXN0ID09IE5VTEwpDQo+ICsgICAg
ICAgICAgICBnb3RvIGZhaWwxOw0KPiArICAgICAgICBJbnNlcnRUYWlsTGlzdChMaXN0LCAmUmVx
dWVzdC0+TGlzdEVudHJ5KTsNCj4gKyAgICAgICAgSW50ZXJsb2NrZWRJbmNyZW1lbnQoJlNyYkV4
dC0+UmVxdWVzdENvdW50KTsNCj4gKw0KPiArICAgICAgICBSZXF1ZXN0LT5TcmJFeHQgPSBTcmJF
eHQ7DQo+ICsgICAgICAgIE1heFNlZ21lbnRzID0gUHJvdG9jb2xVc2VJbmRpcmVjdChQcm90b2Nv
bCwgU2VjdG9yc0xlZnQpOw0KPiArDQo+ICsgICAgICAgIGlmICghUHJvdG9jb2xQcmVwYXJlQmxr
aWZSZWFkV3JpdGUoUHJvdG9jb2wsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUmVxdWVzdCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBTcmJFeHQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgTWF4U2VnbWVudHMsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgU2VjdG9yU3RhcnQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgU2VjdG9yc0xlZnQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJlNlY3RvcnNEb25lKSkNCj4gKyAgICAgICAgICAgIGdvdG8gZmFp
bDI7DQo+ICsNCj4gKyAgICAgICAgaWYgKE1heFNlZ21lbnRzID4gQkxLSUZfTUFYX1NFR01FTlRT
X1BFUl9SRVFVRVNUKSB7DQo+ICsgICAgICAgICAgICBpZiAoIVByb3RvY29sUHJlcGFyZUJsa2lm
SW5kaXJlY3QoUHJvdG9jb2wsIFJlcXVlc3QpKQ0KPiArICAgICAgICAgICAgICAgIGdvdG8gZmFp
bDM7DQo+ICsgICAgICAgIH0NCj4gKw0KPiArICAgICAgICBTZWN0b3JzTGVmdCAtPSBTZWN0b3Jz
RG9uZTsNCj4gKyAgICAgICAgU2VjdG9yU3RhcnQgKz0gU2VjdG9yc0RvbmU7DQo+ICsgICAgfQ0K
PiArDQo+ICsgICAgcmV0dXJuIFRSVUU7DQo+ICsNCj4gK2ZhaWwzOg0KPiArZmFpbDI6DQo+ICtm
YWlsMToNCj4gKyAgICBQcm90b2NvbENhbmNlbFJlcXVlc3RMaXN0KFByb3RvY29sLCBMaXN0KTsN
Cj4gKyAgICBTcmJFeHQtPlJlcXVlc3RDb3VudCA9IDA7DQo+ICsgICAgU3JiLT5TcmJTdGF0dXMg
PSBTUkJfU1RBVFVTX0VSUk9SOw0KPiArICAgIHJldHVybiBGQUxTRTsNCj4gK30NCj4gKw0KPiAr
c3RhdGljIEJPT0xFQU4NCj4gK1Byb3RvY29sUHJlcGFyZVN5bmNDYWNoZSgNCj4gKyAgICBJTiAg
UFhFTlZCRF9QUk9UT0NPTCAgICBQcm90b2NvbCwNCj4gKyAgICBJTiAgUFhFTlZCRF9TUkJFWFQg
ICAgICBTcmJFeHQsDQo+ICsgICAgSU4gIFBMSVNUX0VOVFJZICAgICAgICAgTGlzdA0KPiArICAg
ICkNCj4gK3sNCj4gKyAgICBQU0NTSV9SRVFVRVNUX0JMT0NLICAgICBTcmIgPSBTcmJFeHQtPlNy
YjsNCj4gKyAgICBQWEVOVkJEX1JFUVVFU1QgICAgICAgICBSZXF1ZXN0Ow0KPiArICAgIFVDSEFS
ICAgICAgICAgICAgICAgICAgIE9wZXJhdGlvbjsNCj4gKw0KPiArICAgIFNyYi0+U3JiU3RhdHVz
ID0gU1JCX1NUQVRVU19QRU5ESU5HOw0KPiArDQo+ICsgICAgaWYgKEZyb250ZW5kR2V0RGlza0lu
Zm8oUHJvdG9jb2wtPkZyb250ZW5kKS0+Rmx1c2hDYWNoZSkNCj4gKyAgICAgICAgT3BlcmF0aW9u
ID0gQkxLSUZfT1BfRkxVU0hfRElTS0NBQ0hFOw0KPiArICAgIGVsc2UNCj4gKyAgICAgICAgT3Bl
cmF0aW9uID0gQkxLSUZfT1BfV1JJVEVfQkFSUklFUjsNCj4gKw0KPiArICAgIFNyYkV4dC0+UmVx
dWVzdENvdW50ID0gMDsNCj4gKw0KPiArICAgIFJlcXVlc3QgPSBQcm90b2NvbEdldFJlcXVlc3Qo
UHJvdG9jb2wpOw0KPiArICAgIGlmIChSZXF1ZXN0ID09IE5VTEwpDQo+ICsgICAgICAgIGdvdG8g
ZmFpbDE7DQo+ICsgICAgSW5zZXJ0VGFpbExpc3QoTGlzdCwgJlJlcXVlc3QtPkxpc3RFbnRyeSk7
DQo+ICsgICAgSW50ZXJsb2NrZWRJbmNyZW1lbnQoJlNyYkV4dC0+UmVxdWVzdENvdW50KTsNCj4g
Kw0KPiArICAgIFJlcXVlc3QtPlNyYkV4dCA9IFNyYkV4dDsNCj4gKyAgICBSZXF1ZXN0LT5PcGVy
YXRpb24gPSBPcGVyYXRpb247DQo+ICsgICAgUmVxdWVzdC0+Rmlyc3RTZWN0b3IgPSBDZGJfTG9n
aWNhbEJsb2NrKFNyYik7DQo+ICsNCj4gKyAgICByZXR1cm4gVFJVRTsNCj4gKw0KPiArZmFpbDE6
DQo+ICsgICAgUHJvdG9jb2xDYW5jZWxSZXF1ZXN0TGlzdChQcm90b2NvbCwgTGlzdCk7DQo+ICsg
ICAgU3JiRXh0LT5SZXF1ZXN0Q291bnQgPSAwOw0KPiArICAgIFNyYi0+U3JiU3RhdHVzID0gU1JC
X1NUQVRVU19FUlJPUjsNCj4gKyAgICByZXR1cm4gRkFMU0U7DQo+ICt9DQo+ICsNCj4gK3N0YXRp
YyBCT09MRUFODQo+ICtQcm90b2NvbFByZXBhcmVVbm1hcCgNCj4gKyAgICBJTiAgUFhFTlZCRF9Q
Uk9UT0NPTCAgICBQcm90b2NvbCwNCj4gKyAgICBJTiAgUFhFTlZCRF9TUkJFWFQgICAgICBTcmJF
eHQsDQo+ICsgICAgSU4gIFBMSVNUX0VOVFJZICAgICAgICAgTGlzdA0KPiArICAgICkNCj4gK3sN
Cj4gKyAgICBQU0NTSV9SRVFVRVNUX0JMT0NLICAgICBTcmIgPSBTcmJFeHQtPlNyYjsNCj4gKyAg
ICBQVU5NQVBfTElTVF9IRUFERVIgICAgICBVbm1hcCA9IFNyYi0+RGF0YUJ1ZmZlcjsNCj4gKyAg
ICBVTE9ORyAgICAgICAgICAgICAgICAgICBDb3VudCA9IF9ieXRlc3dhcF91c2hvcnQoKihQVVNI
T1JUKVVubWFwLQ0KPiA+QmxvY2tEZXNjckRhdGFMZW5ndGgpIC8gc2l6ZW9mKFVOTUFQX0JMT0NL
X0RFU0NSSVBUT1IpOw0KPiArICAgIFVMT05HICAgICAgICAgICAgICAgICAgIEluZGV4Ow0KPiAr
DQo+ICsgICAgU3JiLT5TcmJTdGF0dXMgPSBTUkJfU1RBVFVTX1BFTkRJTkc7DQo+ICsNCj4gKyAg
ICBTcmJFeHQtPlJlcXVlc3RDb3VudCA9IDA7DQo+ICsNCj4gKyAgICBmb3IgKEluZGV4ID0gMDsg
SW5kZXggPCBDb3VudDsgKytJbmRleCkgew0KPiArICAgICAgICBQVU5NQVBfQkxPQ0tfREVTQ1JJ
UFRPUiBEZXNjciA9ICZVbm1hcC0+RGVzY3JpcHRvcnNbSW5kZXhdOw0KPiArICAgICAgICBQWEVO
VkJEX1JFUVVFU1QgICAgICAgICBSZXF1ZXN0Ow0KPiArDQo+ICsgICAgICAgIFJlcXVlc3QgPSBQ
cm90b2NvbEdldFJlcXVlc3QoUHJvdG9jb2wpOw0KPiArICAgICAgICBpZiAoUmVxdWVzdCA9PSBO
VUxMKQ0KPiArICAgICAgICAgICAgZ290byBmYWlsMTsNCj4gKyAgICAgICAgSW5zZXJ0VGFpbExp
c3QoTGlzdCwgJlJlcXVlc3QtPkxpc3RFbnRyeSk7DQo+ICsgICAgICAgIEludGVybG9ja2VkSW5j
cmVtZW50KCZTcmJFeHQtPlJlcXVlc3RDb3VudCk7DQo+ICsNCj4gKyAgICAgICAgUmVxdWVzdC0+
U3JiRXh0ID0gU3JiRXh0Ow0KPiArICAgICAgICBSZXF1ZXN0LT5PcGVyYXRpb24gPSBCTEtJRl9P
UF9ESVNDQVJEOw0KPiArICAgICAgICBSZXF1ZXN0LT5GaXJzdFNlY3RvciA9IF9ieXRlc3dhcF91
aW50NjQoKihQVUxPTkc2NClEZXNjci0NCj4gPlN0YXJ0aW5nTGJhKTsNCj4gKyAgICAgICAgUmVx
dWVzdC0+TnJTZWN0b3JzID0gX2J5dGVzd2FwX3Vsb25nKCooUFVMT05HKURlc2NyLQ0KPiA+TGJh
Q291bnQpOw0KPiArICAgICAgICBSZXF1ZXN0LT5GbGFncyA9IDA7DQo+ICsgICAgfQ0KPiArDQo+
ICsgICAgcmV0dXJuIFRSVUU7DQo+ICsNCj4gK2ZhaWwxOg0KPiArICAgIFByb3RvY29sQ2FuY2Vs
UmVxdWVzdExpc3QoUHJvdG9jb2wsIExpc3QpOw0KPiArICAgIFNyYkV4dC0+UmVxdWVzdENvdW50
ID0gMDsNCj4gKyAgICBTcmItPlNyYlN0YXR1cyA9IFNSQl9TVEFUVVNfRVJST1I7DQo+ICsgICAg
cmV0dXJuIEZBTFNFOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgRk9SQ0VJTkxJTkUgQk9PTEVBTg0K
PiArUHJvdG9jb2xQcmVwYXJlUmVxdWVzdCgNCj4gKyAgICBJTiAgUFhFTlZCRF9QUk9UT0NPTCAg
ICBQcm90b2NvbCwNCj4gKyAgICBJTiAgUFhFTlZCRF9TUkJFWFQgICAgICBTcmJFeHQsDQo+ICsg
ICAgSU4gIFBMSVNUX0VOVFJZICAgICAgICAgTGlzdA0KPiArICAgICkNCj4gK3sNCj4gKyAgICBz
d2l0Y2ggKENkYl9PcGVyYXRpb25FeChTcmJFeHQtPlNyYikpIHsNCj4gKyAgICBjYXNlIFNDU0lP
UF9SRUFEOg0KPiArICAgIGNhc2UgU0NTSU9QX1dSSVRFOg0KPiArICAgICAgICByZXR1cm4gUHJv
dG9jb2xQcmVwYXJlUmVhZFdyaXRlKFByb3RvY29sLA0KPiArICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFNyYkV4dCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBMaXN0KTsNCj4gKw0KPiArICAgIGNhc2UgU0NTSU9QX1NZTkNIUk9OSVpF
X0NBQ0hFOg0KPiArICAgICAgICByZXR1cm4gUHJvdG9jb2xQcmVwYXJlU3luY0NhY2hlKFByb3Rv
Y29sLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNyYkV4dCwN
Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0KTsNCj4gKw0K
PiArICAgIGNhc2UgU0NTSU9QX1VOTUFQOg0KPiArICAgICAgICByZXR1cm4gUHJvdG9jb2xQcmVw
YXJlVW5tYXAoUHJvdG9jb2wsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBTcmJFeHQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0KTsN
Cj4gDQo+IC0gICAgICAgIGlmICghUmV0cnkpDQo+IC0gICAgICAgICAgICBicmVhazsNCj4gKyAg
ICBkZWZhdWx0Og0KPiArICAgICAgICBBU1NFUlQoRkFMU0UpOw0KPiArICAgICAgICByZXR1cm4g
RkFMU0U7DQo+ICAgICAgfQ0KPiAtDQo+IC0gICAgWEVOQlVTX0VWVENITihVbm1hc2ssDQo+IC0g
ICAgICAgICAgICAgICAgICAmUHJvdG9jb2wtPkV2dGNobkludGVyZmFjZSwNCj4gLSAgICAgICAg
ICAgICAgICAgIFByb3RvY29sLT5DaGFubmVsLA0KPiAtICAgICAgICAgICAgICAgICAgRkFMU0Up
Ow0KPiAgfQ0KPiANCj4gIHN0YXRpYyBERUNMU1BFQ19OT0lOTElORSBWT0lEDQo+IEBAIC0xMjgx
LDEwMiArMTgwNCwxOSBAQCBQcm90b2NvbERlYnVnQ2FsbGJhY2soDQo+ICAgICAgKQ0KPiAgew0K
PiAgICAgIFBYRU5WQkRfUFJPVE9DT0wgICAgUHJvdG9jb2wgPSBBcmd1bWVudDsNCj4gLSAgICBQ
WEVOVkJEX0dSQU5URVIgR3JhbnRlciA9IEZyb250ZW5kR2V0R3JhbnRlcihQcm90b2NvbC0NCj4g
PkZyb250ZW5kKTsNCj4gLSAgICBVTE9ORyAgICAgICAgICAgSW5kZXg7DQo+IA0KPiAgICAgIFVO
UkVGRVJFTkNFRF9QQVJBTUVURVIoQ3Jhc2hpbmcpOw0KPiANCj4gLSAgICBYRU5CVVNfREVCVUco
UHJpbnRmLA0KPiAtICAgICAgICAgICAgICAgICAmUHJvdG9jb2wtPkRlYnVnSW50ZXJmYWNlLA0K
PiAtICAgICAgICAgICAgICAgICAiU3VibWl0dGVkOiAldSBSZWNlaXZlZDogJXVcbiIsDQo+IC0g
ICAgICAgICAgICAgICAgIFByb3RvY29sLT5TdWJtaXR0ZWQsDQo+IC0gICAgICAgICAgICAgICAg
IFByb3RvY29sLT5SZWNlaXZlZCk7DQo+IC0NCj4gLSAgICBYRU5CVVNfREVCVUcoUHJpbnRmLA0K
PiAtICAgICAgICAgICAgICAgICAmUHJvdG9jb2wtPkRlYnVnSW50ZXJmYWNlLA0KPiAtICAgICAg
ICAgICAgICAgICAiRXZlbnRzOiAldSBEcGNzOiAldVxuIiwNCj4gLSAgICAgICAgICAgICAgICAg
UHJvdG9jb2wtPkV2ZW50cywNCj4gLSAgICAgICAgICAgICAgICAgUHJvdG9jb2wtPkRwY3MpOw0K
PiAtDQo+IC0gICAgWEVOQlVTX0RFQlVHKFByaW50ZiwNCj4gLSAgICAgICAgICAgICAgICAgJlBy
b3RvY29sLT5EZWJ1Z0ludGVyZmFjZSwNCj4gLSAgICAgICAgICAgICAgICAgIlNoYXJlZCA6IDB4
JXBcbiIsDQo+IC0gICAgICAgICAgICAgICAgIFByb3RvY29sLT5TaGFyZWQpOw0KPiAtDQo+IC0g
ICAgaWYgKFByb3RvY29sLT5TaGFyZWQpIHsNCj4gLSAgICAgICAgWEVOQlVTX0RFQlVHKFByaW50
ZiwNCj4gLSAgICAgICAgICAgICAgICAgICAgICZQcm90b2NvbC0+RGVidWdJbnRlcmZhY2UsDQo+
IC0gICAgICAgICAgICAgICAgICAgICAiU2hhcmVkOiAlZCAvICVkIC0gJWQgLyAlZFxuIiwNCj4g
LSAgICAgICAgICAgICAgICAgICAgIFByb3RvY29sLT5TaGFyZWQtPnJlcV9wcm9kLA0KPiAtICAg
ICAgICAgICAgICAgICAgICAgUHJvdG9jb2wtPlNoYXJlZC0+cmVxX2V2ZW50LA0KPiAtICAgICAg
ICAgICAgICAgICAgICAgUHJvdG9jb2wtPlNoYXJlZC0+cnNwX3Byb2QsDQo+IC0gICAgICAgICAg
ICAgICAgICAgICBQcm90b2NvbC0+U2hhcmVkLT5yc3BfZXZlbnQpOw0KPiAtICAgIH0NCj4gLQ0K
PiAtICAgIFhFTkJVU19ERUJVRyhQcmludGYsDQo+IC0gICAgICAgICAgICAgICAgICZQcm90b2Nv
bC0+RGVidWdJbnRlcmZhY2UsDQo+IC0gICAgICAgICAgICAgICAgICJGcm9udDogJWQgLyAlZCAo
JWQpXG4iLA0KPiAtICAgICAgICAgICAgICAgICBQcm90b2NvbC0+RnJvbnQucmVxX3Byb2RfcHZ0
LA0KPiAtICAgICAgICAgICAgICAgICBQcm90b2NvbC0+RnJvbnQucnNwX2NvbnMsDQo+IC0gICAg
ICAgICAgICAgICAgIFByb3RvY29sLT5Gcm9udC5ucl9lbnRzKTsNCj4gLQ0KPiAgICAgIFhFTkJV
U19ERUJVRyhQcmludGYsDQo+ICAgICAgICAgICAgICAgICAgICZQcm90b2NvbC0+RGVidWdJbnRl
cmZhY2UsDQo+ICAgICAgICAgICAgICAgICAgICJPcmRlcjogJWRcbiIsDQo+ICAgICAgICAgICAg
ICAgICAgIFByb3RvY29sLT5PcmRlcik7DQo+IA0KPiAtICAgIGZvciAoSW5kZXggPSAwOyBJbmRl
eCA8ICgxdWwgPDwgUHJvdG9jb2wtPk9yZGVyKTsgKytJbmRleCkgew0KPiAtICAgICAgICBYRU5C
VVNfREVCVUcoUHJpbnRmLA0KPiAtICAgICAgICAgICAgICAgICAgICAgJlByb3RvY29sLT5EZWJ1
Z0ludGVyZmFjZSwNCj4gLSAgICAgICAgICAgICAgICAgICAgICJHcmFudHNbJS0yZF06IDB4JXAg
KCV1KVxuIiwNCj4gLSAgICAgICAgICAgICAgICAgICAgIEluZGV4LA0KPiAtICAgICAgICAgICAg
ICAgICAgICAgUHJvdG9jb2wtPkdyYW50c1tJbmRleF0sDQo+IC0gICAgICAgICAgICAgICAgICAg
ICBHcmFudGVyUmVmZXJlbmNlKEdyYW50ZXIsIFByb3RvY29sLT5HcmFudHNbSW5kZXhdKSk7DQo+
IC0gICAgfQ0KPiAtDQo+IC0gICAgaWYgKFByb3RvY29sLT5DaGFubmVsKSB7DQo+IC0gICAgICAg
IFVMT05HICAgICAgIFBvcnQgPSBYRU5CVVNfRVZUQ0hOKEdldFBvcnQsDQo+IC0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQcm90b2NvbC0+RXZ0Y2huSW50ZXJmYWNl
LA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm90b2NvbC0+
Q2hhbm5lbCk7DQo+IC0NCj4gLSAgICAgICAgWEVOQlVTX0RFQlVHKFByaW50ZiwNCj4gLSAgICAg
ICAgICAgICAgICAgICAgICZQcm90b2NvbC0+RGVidWdJbnRlcmZhY2UsDQo+IC0gICAgICAgICAg
ICAgICAgICAgICAiQ2hhbm5lbCA6ICVwICglZClcbiIsDQo+IC0gICAgICAgICAgICAgICAgICAg
ICBQcm90b2NvbC0+Q2hhbm5lbCwNCj4gLSAgICAgICAgICAgICAgICAgICAgIFBvcnQpOw0KPiAt
ICAgIH0NCj4gLQ0KPiAtICAgIFhFTkJVU19ERUJVRyhQcmludGYsDQo+IC0gICAgICAgICAgICAg
ICAgICZQcm90b2NvbC0+RGVidWdJbnRlcmZhY2UsDQo+IC0gICAgICAgICAgICAgICAgICJCTEtJ
Rl9PUHM6IFJFQUQ9JXUgV1JJVEU9JXVcbiIsDQo+IC0gICAgICAgICAgICAgICAgIFByb3RvY29s
LT5CbGtPcFJlYWQsDQo+IC0gICAgICAgICAgICAgICAgIFByb3RvY29sLT5CbGtPcFdyaXRlKTsN
Cj4gLSAgICBYRU5CVVNfREVCVUcoUHJpbnRmLA0KPiAtICAgICAgICAgICAgICAgICAmUHJvdG9j
b2wtPkRlYnVnSW50ZXJmYWNlLA0KPiAtICAgICAgICAgICAgICAgICAiQkxLSUZfT1BzOiBJTkRJ
UkVDVF9SRUFEPSV1IElORElSRUNUX1dSSVRFPSV1XG4iLA0KPiAtICAgICAgICAgICAgICAgICBQ
cm90b2NvbC0+QmxrT3BJbmRpcmVjdFJlYWQsDQo+IC0gICAgICAgICAgICAgICAgIFByb3RvY29s
LT5CbGtPcEluZGlyZWN0V3JpdGUpOw0KPiAtICAgIFhFTkJVU19ERUJVRyhQcmludGYsDQo+IC0g
ICAgICAgICAgICAgICAgICZQcm90b2NvbC0+RGVidWdJbnRlcmZhY2UsDQo+IC0gICAgICAgICAg
ICAgICAgICJCTEtJRl9PUHM6IEJBUlJJRVI9JXUgRElTQ0FSRD0ldSBGTFVTSD0ldVxuIiwNCj4g
LSAgICAgICAgICAgICAgICAgUHJvdG9jb2wtPkJsa09wQmFycmllciwNCj4gLSAgICAgICAgICAg
ICAgICAgUHJvdG9jb2wtPkJsa09wRGlzY2FyZCwNCj4gLSAgICAgICAgICAgICAgICAgUHJvdG9j
b2wtPkJsa09wRmx1c2gpOw0KPiAgICAgIFhFTkJVU19ERUJVRyhQcmludGYsDQo+ICAgICAgICAg
ICAgICAgICAgICZQcm90b2NvbC0+RGVidWdJbnRlcmZhY2UsDQo+ICAgICAgICAgICAgICAgICAg
ICJTZWdtZW50cyBHcmFudGVkPSVsbHUgQm91bmNlZD0lbGx1XG4iLA0KPiAgICAgICAgICAgICAg
ICAgICBQcm90b2NvbC0+U2Vnc0dyYW50ZWQsDQo+ICAgICAgICAgICAgICAgICAgIFByb3RvY29s
LT5TZWdzQm91bmNlZCk7DQo+IC0NCj4gLSAgICBRdWV1ZURlYnVnQ2FsbGJhY2soJlByb3RvY29s
LT5QcmVwYXJlZFJlcXMsDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICJQcmVwYXJlZCAiLA0K
PiAtICAgICAgICAgICAgICAgICAgICAgICAmUHJvdG9jb2wtPkRlYnVnSW50ZXJmYWNlKTsNCj4g
LSAgICBRdWV1ZURlYnVnQ2FsbGJhY2soJlByb3RvY29sLT5TdWJtaXR0ZWRSZXFzLA0KPiAtICAg
ICAgICAgICAgICAgICAgICAgICAiU3VibWl0dGVkIiwNCj4gLSAgICAgICAgICAgICAgICAgICAg
ICAgJlByb3RvY29sLT5EZWJ1Z0ludGVyZmFjZSk7DQo+IC0gICAgUXVldWVEZWJ1Z0NhbGxiYWNr
KCZQcm90b2NvbC0+U2h1dGRvd25TcmJzLA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAiU2h1
dGRvd24gIiwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgJlByb3RvY29sLT5EZWJ1Z0ludGVy
ZmFjZSk7DQo+ICB9DQo+IA0KPiAgc3RhdGljIERFQ0xTUEVDX05PSU5MSU5FIFZPSUQNCj4gQEAg
LTEzOTEsNyArMTgzMSw3IEBAIFByb3RvY29sQWNxdWlyZUxvY2soDQo+ICBzdGF0aWMgREVDTFNQ
RUNfTk9JTkxJTkUgVk9JRA0KPiAgUHJvdG9jb2xSZWxlYXNlTG9jaygNCj4gICAgICBJTiAgUFZP
SUQgICAgICAgQXJndW1lbnQNCj4gLSAgICApDQo+ICspDQo+ICB7DQo+ICAgICAgUFhFTlZCRF9Q
Uk9UT0NPTCAgICBQcm90b2NvbCA9IEFyZ3VtZW50Ow0KPiAgICAgIEtlUmVsZWFzZVNwaW5Mb2Nr
RnJvbURwY0xldmVsKCZQcm90b2NvbC0+TG9jayk7DQo+IEBAIC0xNDI2LDcgKzE4NjYsNyBAQCBz
dGF0aWMgREVDTFNQRUNfTk9JTkxJTkUgTlRTVEFUVVMNCj4gIFByb3RvY29sU2VnbWVudEN0b3Io
DQo+ICAgICAgSU4gIFBWT0lEICAgICAgIEFyZ3VtZW50LA0KPiAgICAgIElOICBQVk9JRCAgICAg
ICBPYmplY3QNCj4gLSAgICApDQo+ICspDQo+ICB7DQo+ICAgICAgVU5SRUZFUkVOQ0VEX1BBUkFN
RVRFUihBcmd1bWVudCk7DQo+ICAgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihPYmplY3QpOw0K
PiBAQCAtMTQ4OCwxMiArMTkyOCwxMyBAQCBQcm90b2NvbEluZGlyZWN0RHRvcigNCj4gIE5UU1RB
VFVTDQo+ICBQcm90b2NvbENyZWF0ZSgNCj4gICAgICBJTiAgUFhFTlZCRF9GUk9OVEVORCAgICBG
cm9udGVuZCwNCj4gLSAgICBPVVQgUFhFTlZCRF9QUk9UT0NPTCogICAgICAgUHJvdG9jb2wNCj4g
KyAgICBPVVQgUFhFTlZCRF9QUk9UT0NPTCogICBQcm90b2NvbA0KPiAgICAgICkNCj4gIHsNCj4g
ICAgICBQWEVOVkJEX1RBUkdFVCAgICAgICAgICBUYXJnZXQgPSBGcm9udGVuZEdldFRhcmdldChG
cm9udGVuZCk7DQo+ICAgICAgUFhFTlZCRF9BREFQVEVSICAgICAgICAgQWRhcHRlciA9IFRhcmdl
dEdldEFkYXB0ZXIoVGFyZ2V0KTsNCj4gICAgICBDSEFSICAgICAgICAgICAgICAgICAgICBOYW1l
W01BWF9OQU1FX0xFTl07DQo+ICsgICAgVUxPTkcgICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+
ICAgICAgTlRTVEFUVVMgICAgICAgICAgICAgICAgc3RhdHVzOw0KPiANCj4gICAgICAqUHJvdG9j
b2wgPSBfX1Byb3RvY29sQWxsb2NhdGUoc2l6ZW9mKFhFTlZCRF9QUk9UT0NPTCkpOw0KPiBAQCAt
MTUwNCwxMiArMTk0NSw2IEBAIFByb3RvY29sQ3JlYXRlKA0KPiANCj4gICAgICAoKlByb3RvY29s
KS0+RnJvbnRlbmQgPSBGcm9udGVuZDsNCj4gICAgICBLZUluaXRpYWxpemVTcGluTG9jaygmKCpQ
cm90b2NvbCktPkxvY2spOw0KPiAtICAgIEtlSW5pdGlhbGl6ZVRocmVhZGVkRHBjKCYoKlByb3Rv
Y29sKS0+RHBjLCBQcm90b2NvbERwYywgKlByb3RvY29sKTsNCj4gLSAgICBLZVNldEltcG9ydGFu
Y2VEcGMoJigqUHJvdG9jb2wpLT5EcGMsIE1lZGl1bUhpZ2hJbXBvcnRhbmNlKTsNCj4gLQ0KPiAt
ICAgIFF1ZXVlSW5pdCgmKCpQcm90b2NvbCktPlByZXBhcmVkUmVxcyk7DQo+IC0gICAgUXVldWVJ
bml0KCYoKlByb3RvY29sKS0+U3VibWl0dGVkUmVxcyk7DQo+IC0gICAgUXVldWVJbml0KCYoKlBy
b3RvY29sKS0+U2h1dGRvd25TcmJzKTsNCj4gDQo+ICAgICAgQWRhcHRlckdldENhY2hlSW50ZXJm
YWNlKEFkYXB0ZXIsICYoKlByb3RvY29sKS0+Q2FjaGVJbnRlcmZhY2UpOw0KPiANCj4gQEAgLTE1
ODAsOCArMjAxNSw0MSBAQCBQcm90b2NvbENyZWF0ZSgNCj4gICAgICBpZiAoIU5UX1NVQ0NFU1Mo
c3RhdHVzKSkNCj4gICAgICAgICAgZ290byBmYWlsODsNCj4gDQo+ICsgICAgKCpQcm90b2NvbCkt
Pk51bVF1ZXVlcyA9DQo+IEZyb250ZW5kR2V0TXVsdGlRdWV1ZU1heFF1ZXVlcyhGcm9udGVuZCk7
DQo+ICsgICAgaWYgKCgqUHJvdG9jb2wpLT5OdW1RdWV1ZXMgPT0gMCkNCj4gKyAgICAgICAgKCpQ
cm90b2NvbCktPk51bVF1ZXVlcyA9IDE7DQo+ICsgICAgKCpQcm90b2NvbCktPlJpbmdzID0gX19Q
cm90b2NvbEFsbG9jYXRlKHNpemVvZihQWEVOVkJEX1JJTkcpICoNCj4gKCpQcm90b2NvbCktPk51
bVF1ZXVlcyk7DQo+ICsNCj4gKyAgICBzdGF0dXMgPSBTVEFUVVNfTk9fTUVNT1JZOw0KPiArICAg
IGlmICgoKlByb3RvY29sKS0+UmluZ3MgPT0gTlVMTCkNCj4gKyAgICAgICAgZ290byBmYWlsOTsN
Cj4gKw0KPiArICAgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8ICgqUHJvdG9jb2wpLT5OdW1RdWV1
ZXM7ICsrSW5kZXgpIHsNCj4gKyAgICAgICAgc3RhdHVzID0gUmluZ0NyZWF0ZSgqUHJvdG9jb2ws
DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXgsDQo+ICsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJigqUHJvdG9jb2wpLT5SaW5nc1tJbmRleF0pOw0KPiArICAgICAgICBp
ZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkNCj4gKyAgICAgICAgICAgIGdvdG8gZmFpbDEwOw0KPiAr
ICAgIH0NCj4gKw0KPiAgICAgIHJldHVybiBTVEFUVVNfU1VDQ0VTUzsNCj4gDQo+ICtmYWlsMTA6
DQo+ICsgICAgRXJyb3IoImZhaWwxMFxuIik7DQo+ICsgICAgZm9yIChJbmRleCA9IDA7IEluZGV4
IDwgKCpQcm90b2NvbCktPk51bVF1ZXVlczsgKytJbmRleCkgew0KPiArICAgICAgICBpZiAoKCpQ
cm90b2NvbCktPlJpbmdzW0luZGV4XSkNCj4gKyAgICAgICAgICAgIFJpbmdEZXN0cm95KCgqUHJv
dG9jb2wpLT5SaW5nc1tJbmRleF0pOw0KPiArICAgICAgICAoKlByb3RvY29sKS0+UmluZ3NbSW5k
ZXhdID0gTlVMTDsNCj4gKyAgICB9DQo+ICsgICAgX19Qcm90b2NvbEZyZWUoKCpQcm90b2NvbCkt
PlJpbmdzKTsNCj4gKyAgICAoKlByb3RvY29sKS0+UmluZ3MgPSBOVUxMOw0KPiArZmFpbDk6DQo+
ICsgICAgRXJyb3IoImZhaWw5XG4iKTsNCj4gKyAgICAoKlByb3RvY29sKS0+TnVtUXVldWVzID0g
MDsNCj4gKyAgICBYRU5CVVNfQ0FDSEUoRGVzdHJveSwNCj4gKyAgICAgICAgICAgICAgICAgJigq
UHJvdG9jb2wpLT5DYWNoZUludGVyZmFjZSwNCj4gKyAgICAgICAgICAgICAgICAgKCpQcm90b2Nv
bCktPkluZGlyZWN0Q2FjaGUpOw0KPiArICAgICgqUHJvdG9jb2wpLT5JbmRpcmVjdENhY2hlID0g
TlVMTDsNCj4gIGZhaWw4Og0KPiAgICAgIEVycm9yKCJmYWlsOFxuIik7DQo+ICBmYWlsNzoNCj4g
QEAgLTE2MDgsMTMgKzIwNzYsOCBAQCBmYWlsMjoNCj4gICAgICBFcnJvcigiZmFpbDJcbiIpOw0K
PiANCj4gICAgICBSdGxaZXJvTWVtb3J5KCYoKlByb3RvY29sKS0+Q2FjaGVJbnRlcmZhY2UsDQo+
IC0gICAgICAgICAgICAgICAgICBzaXplb2YgKFhFTkJVU19DQUNIRV9JTlRFUkZBQ0UpKTsNCj4g
KyAgICAgICAgICAgICAgICAgIHNpemVvZihYRU5CVVNfQ0FDSEVfSU5URVJGQUNFKSk7DQo+IA0K
PiAtICAgIFJ0bFplcm9NZW1vcnkoJigqUHJvdG9jb2wpLT5QcmVwYXJlZFJlcXMsIHNpemVvZihY
RU5WQkRfUVVFVUUpKTsNCj4gLSAgICBSdGxaZXJvTWVtb3J5KCYoKlByb3RvY29sKS0+U3VibWl0
dGVkUmVxcywgc2l6ZW9mKFhFTlZCRF9RVUVVRSkpOw0KPiAtICAgIFJ0bFplcm9NZW1vcnkoJigq
UHJvdG9jb2wpLT5TaHV0ZG93blNyYnMsIHNpemVvZihYRU5WQkRfUVVFVUUpKTsNCj4gLQ0KPiAt
ICAgIFJ0bFplcm9NZW1vcnkoJigqUHJvdG9jb2wpLT5EcGMsIHNpemVvZihLRFBDKSk7DQo+ICAg
ICAgUnRsWmVyb01lbW9yeSgmKCpQcm90b2NvbCktPkxvY2ssIHNpemVvZihLU1BJTl9MT0NLKSk7
DQo+ICAgICAgKCpQcm90b2NvbCktPkZyb250ZW5kID0gTlVMTDsNCj4gDQo+IEBAIC0xNjMxLDYg
KzIwOTQsMTkgQEAgUHJvdG9jb2xEZXN0cm95KA0KPiAgICAgIElOICBQWEVOVkJEX1BST1RPQ09M
ICAgIFByb3RvY29sDQo+ICAgICAgKQ0KPiAgew0KPiArICAgIFVMT05HICAgICAgICAgICAgICAg
ICAgIEluZGV4Ow0KPiArDQo+ICsgICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgUHJvdG9jb2wt
Pk51bVF1ZXVlczsgKytJbmRleCkgew0KPiArICAgICAgICBpZiAoUHJvdG9jb2wtPlJpbmdzW0lu
ZGV4XSkNCj4gKyAgICAgICAgICAgIFJpbmdEZXN0cm95KFByb3RvY29sLT5SaW5nc1tJbmRleF0p
Ow0KPiArICAgICAgICBQcm90b2NvbC0+UmluZ3NbSW5kZXhdID0gMDsNCj4gKyAgICB9DQo+ICsN
Cj4gKyAgICBfX1Byb3RvY29sRnJlZShQcm90b2NvbC0+UmluZ3MpOw0KPiArICAgIFByb3RvY29s
LT5SaW5ncyA9IE5VTEw7DQo+ICsNCj4gKyAgICBQcm90b2NvbC0+TnVtUXVldWVzID0gMDsNCj4g
Kw0KPiAgICAgIFhFTkJVU19DQUNIRShEZXN0cm95LA0KPiAgICAgICAgICAgICAgICAgICAmUHJv
dG9jb2wtPkNhY2hlSW50ZXJmYWNlLA0KPiAgICAgICAgICAgICAgICAgICBQcm90b2NvbC0+SW5k
aXJlY3RDYWNoZSk7DQo+IEBAIC0xNjUwLDI2ICsyMTI2LDE0IEBAIFByb3RvY29sRGVzdHJveSgN
Cj4gICAgICAgICAgICAgICAgICAgJlByb3RvY29sLT5DYWNoZUludGVyZmFjZSk7DQo+IA0KPiAg
ICAgIFJ0bFplcm9NZW1vcnkoJlByb3RvY29sLT5DYWNoZUludGVyZmFjZSwNCj4gLSAgICAgICAg
ICAgICAgICAgIHNpemVvZiAoWEVOQlVTX0NBQ0hFX0lOVEVSRkFDRSkpOw0KPiArICAgICAgICAg
ICAgICAgICBzaXplb2YoWEVOQlVTX0NBQ0hFX0lOVEVSRkFDRSkpOw0KPiANCj4gLSAgICBSdGxa
ZXJvTWVtb3J5KCZQcm90b2NvbC0+UHJlcGFyZWRSZXFzLCBzaXplb2YoWEVOVkJEX1FVRVVFKSk7
DQo+IC0gICAgUnRsWmVyb01lbW9yeSgmUHJvdG9jb2wtPlN1Ym1pdHRlZFJlcXMsIHNpemVvZihY
RU5WQkRfUVVFVUUpKTsNCj4gLSAgICBSdGxaZXJvTWVtb3J5KCZQcm90b2NvbC0+U2h1dGRvd25T
cmJzLCBzaXplb2YoWEVOVkJEX1FVRVVFKSk7DQo+ICsgICAgUHJvdG9jb2wtPlNlZ3NHcmFudGVk
ID0gMDsNCj4gKyAgICBQcm90b2NvbC0+U2Vnc0JvdW5jZWQgPSAwOw0KPiANCj4gLSAgICBSdGxa
ZXJvTWVtb3J5KCZQcm90b2NvbC0+RHBjLCBzaXplb2YoS0RQQykpOw0KPiAgICAgIFJ0bFplcm9N
ZW1vcnkoJlByb3RvY29sLT5Mb2NrLCBzaXplb2YoS1NQSU5fTE9DSykpOw0KPiAgICAgIFByb3Rv
Y29sLT5Gcm9udGVuZCA9IE5VTEw7DQo+IA0KPiAtICAgIFByb3RvY29sLT5CbGtPcFJlYWQgPSAw
Ow0KPiAtICAgIFByb3RvY29sLT5CbGtPcFdyaXRlID0gMDsNCj4gLSAgICBQcm90b2NvbC0+Qmxr
T3BJbmRpcmVjdFJlYWQgPSAwOw0KPiAtICAgIFByb3RvY29sLT5CbGtPcEluZGlyZWN0V3JpdGUg
PSAwOw0KPiAtICAgIFByb3RvY29sLT5CbGtPcEJhcnJpZXIgPSAwOw0KPiAtICAgIFByb3RvY29s
LT5CbGtPcERpc2NhcmQgPSAwOw0KPiAtICAgIFByb3RvY29sLT5CbGtPcEZsdXNoID0gMDsNCj4g
LSAgICBQcm90b2NvbC0+U2Vnc0dyYW50ZWQgPSAwOw0KPiAtICAgIFByb3RvY29sLT5TZWdzQm91
bmNlZCA9IDA7DQo+IC0NCj4gICAgICBBU1NFUlQoSXNaZXJvTWVtb3J5KFByb3RvY29sLCBzaXpl
b2YoWEVOVkJEX1BST1RPQ09MKSkpOw0KPiAgICAgIF9fUHJvdG9jb2xGcmVlKFByb3RvY29sKTsN
Cj4gIH0NCj4gQEAgLTE2ODEsNyArMjE0NSw2IEBAIFByb3RvY29sQ29ubmVjdCgNCj4gIHsNCj4g
ICAgICBQWEVOVkJEX1RBUkdFVCAgICAgIFRhcmdldCA9IEZyb250ZW5kR2V0VGFyZ2V0KFByb3Rv
Y29sLT5Gcm9udGVuZCk7DQo+ICAgICAgUFhFTlZCRF9BREFQVEVSICAgICBBZGFwdGVyID0gVGFy
Z2V0R2V0QWRhcHRlcihUYXJnZXQpOw0KPiAtICAgIFBYRU5WQkRfR1JBTlRFUiAgICAgR3JhbnRl
ciA9IEZyb250ZW5kR2V0R3JhbnRlcihQcm90b2NvbC0NCj4gPkZyb250ZW5kKTsNCj4gICAgICBQ
Q0hBUiAgICAgICAgICAgICAgIEJ1ZmZlcjsNCj4gICAgICBVTE9ORyAgICAgICAgICAgICAgIElu
ZGV4Ow0KPiAgICAgIE5UU1RBVFVTICAgICAgICAgICAgc3RhdHVzOw0KPiBAQCAtMTczMCw0OCAr
MjE5MywxMiBAQCBQcm90b2NvbENvbm5lY3QoDQo+ICAgICAgICAgIFByb3RvY29sLT5PcmRlciA9
IDA7DQo+ICAgICAgfQ0KPiANCj4gLSAgICBQcm90b2NvbC0+TWRsID0gX19BbGxvY2F0ZVBhZ2Vz
KDEgPDwgUHJvdG9jb2wtPk9yZGVyKTsNCj4gLQ0KPiAtICAgIHN0YXR1cyA9IFNUQVRVU19OT19N
RU1PUlk7DQo+IC0gICAgaWYgKFByb3RvY29sLT5NZGwgPT0gTlVMTCkNCj4gLSAgICAgICAgZ290
byBmYWlsNDsNCj4gLQ0KPiAtICAgIFByb3RvY29sLT5TaGFyZWQgPSBNbUdldFN5c3RlbUFkZHJl
c3NGb3JNZGxTYWZlKFByb3RvY29sLT5NZGwsDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWxQYWdlUHJpb3JpdHkpOw0KPiAtICAgIEFTU0VS
VChQcm90b2NvbC0+U2hhcmVkICE9IE5VTEwpOw0KPiAtDQo+IC0jcHJhZ21hIHdhcm5pbmcocHVz
aCkNCj4gLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0MzA1KQ0KPiAtI3ByYWdtYSB3YXJuaW5n
KGRpc2FibGU6IDQzMTEpIC8vICd0eXBlIGNhc3QnIHBvaW50ZXIgdHJ1bmNhdGlvbiBmcm9tDQo+
ICdibGtpZl9zcmluZ19lbnRyeVsxXScgdG8gJ2xvbmcnDQo+IC0gICAgU0hBUkVEX1JJTkdfSU5J
VChQcm90b2NvbC0+U2hhcmVkKTsNCj4gLSAgICBGUk9OVF9SSU5HX0lOSVQoJlByb3RvY29sLT5G
cm9udCwgUHJvdG9jb2wtPlNoYXJlZCwgUEFHRV9TSVpFIDw8DQo+IFByb3RvY29sLT5PcmRlcik7
DQo+IC0jcHJhZ21hIHdhcm5pbmcocG9wKQ0KPiAtDQo+IC0gICAgZm9yIChJbmRleCA9IDA7IElu
ZGV4IDwgKDF1bCA8PCBQcm90b2NvbC0+T3JkZXIpOyArK0luZGV4KSB7DQo+IC0gICAgICAgIHN0
YXR1cyA9IEdyYW50ZXJHZXQoR3JhbnRlciwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBNbUdldE1kbFBmbkFycmF5KFByb3RvY29sLT5NZGwpW0luZGV4XSwNCj4gLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBGQUxTRSwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAm
UHJvdG9jb2wtPkdyYW50c1tJbmRleF0pOw0KPiArICAgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8
IFByb3RvY29sLT5OdW1RdWV1ZXM7ICsrSW5kZXgpIHsNCj4gKyAgICAgICAgc3RhdHVzID0gUmlu
Z0Nvbm5lY3QoUHJvdG9jb2wtPlJpbmdzW0luZGV4XSk7DQo+ICAgICAgICAgIGlmICghTlRfU1VD
Q0VTUyhzdGF0dXMpKQ0KPiAtICAgICAgICAgICAgZ290byBmYWlsNTsNCj4gKyAgICAgICAgICAg
IGdvdG8gZmFpbDQ7DQo+ICAgICAgfQ0KPiANCj4gLSAgICBQcm90b2NvbC0+Q2hhbm5lbCA9IFhF
TkJVU19FVlRDSE4oT3BlbiwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm
UHJvdG9jb2wtPkV2dGNobkludGVyZmFjZSwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBYRU5CVVNfRVZUQ0hOX1RZUEVfVU5CT1VORCwNCj4gLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBQcm90b2NvbEludGVycnVwdCwNCj4gLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBQcm90b2NvbCwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBGcm9udGVuZEdldEJhY2tlbmREb21haW4oUHJvdG9jb2wtPkZyb250ZW5kKSwNCj4g
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFKTsNCj4gLSAgICBzdGF0dXMg
PSBTVEFUVVNfTk9fTUVNT1JZOw0KPiAtICAgIGlmIChQcm90b2NvbC0+Q2hhbm5lbCA9PSBOVUxM
KQ0KPiAtICAgICAgICBnb3RvIGZhaWw2Ow0KPiAtDQo+IC0gICAgWEVOQlVTX0VWVENITihVbm1h
c2ssDQo+IC0gICAgICAgICAgICAgICAgICAmUHJvdG9jb2wtPkV2dGNobkludGVyZmFjZSwNCj4g
LSAgICAgICAgICAgICAgICAgIFByb3RvY29sLT5DaGFubmVsLA0KPiAtICAgICAgICAgICAgICAg
ICAgRkFMU0UpOw0KPiAtDQo+ICAgICAgc3RhdHVzID0gWEVOQlVTX0RFQlVHKFJlZ2lzdGVyLA0K
PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUHJvdG9jb2wtPkRlYnVnSW50ZXJmYWNlLA0K
PiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX01PRFVMRV9fInxQUk9UT0NPTCIsDQo+IEBA
IC0xNzc5LDM4ICsyMjA2LDIwIEBAIFByb3RvY29sQ29ubmVjdCgNCj4gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUHJvdG9jb2wsDQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQcm90
b2NvbC0+RGVidWdDYWxsYmFjayk7DQo+ICAgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpDQo+
IC0gICAgICAgIGdvdG8gZmFpbDc7DQo+ICsgICAgICAgIGdvdG8gZmFpbDU7DQo+IA0KPiAgICAg
IFByb3RvY29sLT5Db25uZWN0ZWQgPSBUUlVFOw0KPiAgICAgIHJldHVybiBTVEFUVVNfU1VDQ0VT
UzsNCj4gDQo+IC1mYWlsNzoNCj4gLSAgICBFcnJvcigiZmFpbDdcbiIpOw0KPiAtICAgIFhFTkJV
U19FVlRDSE4oQ2xvc2UsDQo+IC0gICAgICAgICAgICAgICAgICAmUHJvdG9jb2wtPkV2dGNobklu
dGVyZmFjZSwNCj4gLSAgICAgICAgICAgICAgICAgIFByb3RvY29sLT5DaGFubmVsKTsNCj4gLSAg
ICBQcm90b2NvbC0+Q2hhbm5lbCA9IE5VTEw7DQo+IC1mYWlsNjoNCj4gLSAgICBFcnJvcigiZmFp
bDZcbiIpOw0KPiAgZmFpbDU6DQo+ICAgICAgRXJyb3IoImZhaWw1XG4iKTsNCj4gLSAgICBmb3Ig
KEluZGV4ID0gMDsgSW5kZXggPCAoMXVsIDw8IFByb3RvY29sLT5PcmRlcik7ICsrSW5kZXgpIHsN
Cj4gLSAgICAgICAgaWYgKFByb3RvY29sLT5HcmFudHNbSW5kZXhdID09IE5VTEwpDQo+IC0gICAg
ICAgICAgICBjb250aW51ZTsNCj4gLQ0KPiAtICAgICAgICBHcmFudGVyUHV0KEdyYW50ZXIsIFBy
b3RvY29sLT5HcmFudHNbSW5kZXhdKTsNCj4gLSAgICAgICAgUHJvdG9jb2wtPkdyYW50c1tJbmRl
eF0gPSBOVUxMOw0KPiAtICAgIH0NCj4gLQ0KPiAtICAgIFJ0bFplcm9NZW1vcnkoJlByb3RvY29s
LT5Gcm9udCwgc2l6ZW9mKGJsa2lmX2Zyb250X3JpbmdfdCkpOw0KPiAtDQo+IC0gICAgX19GcmVl
UGFnZXMoUHJvdG9jb2wtPk1kbCk7DQo+IC0gICAgUHJvdG9jb2wtPlNoYXJlZCA9IE5VTEw7DQo+
IC0gICAgUHJvdG9jb2wtPk1kbCA9IE5VTEw7DQo+IC0NCj4gLSAgICBQcm90b2NvbC0+T3JkZXIg
PSAwOw0KPiArICAgIEluZGV4ID0gUHJvdG9jb2wtPk51bVF1ZXVlczsNCj4gIGZhaWw0Og0KPiAg
ICAgIEVycm9yKCJmYWlsNFxuIik7DQo+ICsgICAgd2hpbGUgKEluZGV4LS0gIT0gMCkgew0KPiAr
ICAgICAgICBSaW5nRGlzY29ubmVjdChQcm90b2NvbC0+UmluZ3NbSW5kZXhdKTsNCj4gKyAgICB9
DQo+ICsgICAgUHJvdG9jb2wtPk9yZGVyID0gMDsNCj4gICAgICBYRU5CVVNfREVCVUcoUmVsZWFz
ZSwgJlByb3RvY29sLT5EZWJ1Z0ludGVyZmFjZSk7DQo+ICBmYWlsMzoNCj4gICAgICBFcnJvcigi
ZmFpbDNcbiIpOw0KPiBAQCAtMTgzNCwyNiArMjI0MywyMCBAQCBmYWlsMToNCj4gIE5UU1RBVFVT
DQo+ICBQcm90b2NvbFN0b3JlV3JpdGUoDQo+ICAgICAgSU4gIFBYRU5WQkRfUFJPVE9DT0wgICAg
UHJvdG9jb2wsDQo+IC0gICAgSU4gIFBWT0lEICAgICAgICAgICBUcmFuc2FjdGlvbg0KPiArICAg
IElOICBQVk9JRCAgICAgICAgICAgICAgIFRyYW5zYWN0aW9uDQo+ICAgICAgKQ0KPiAgew0KPiAt
ICAgIFBYRU5WQkRfR1JBTlRFUiAgICAgR3JhbnRlciA9IEZyb250ZW5kR2V0R3JhbnRlcihQcm90
b2NvbC0NCj4gPkZyb250ZW5kKTsNCj4gLSAgICBVTE9ORyAgICAgICAgICAgICAgIFBvcnQ7DQo+
IC0gICAgTlRTVEFUVVMgICAgICAgICAgICBzdGF0dXM7DQo+ICsgICAgVUxPTkcgICAgICAgICAg
ICAgICAgICAgSW5kZXg7DQo+ICsgICAgTlRTVEFUVVMgICAgICAgICAgICAgICAgc3RhdHVzOw0K
PiANCj4gLSAgICBpZiAoUHJvdG9jb2wtPk9yZGVyID09IDApIHsNCj4gLSAgICAgICAgc3RhdHVz
ID0gWEVOQlVTX1NUT1JFKFByaW50ZiwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICZQcm90b2NvbC0+U3RvcmVJbnRlcmZhY2UsDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBUcmFuc2FjdGlvbiwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyb250
ZW5kR2V0RnJvbnRlbmRQYXRoKFByb3RvY29sLT5Gcm9udGVuZCksDQo+IC0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAicmluZy1yZWYiLA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIiV1IiwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyYW50ZXJSZWZl
cmVuY2UoR3JhbnRlciwgUHJvdG9jb2wtPkdyYW50c1swXSkpOw0KPiArICAgIGZvciAoSW5kZXgg
PSAwOyBJbmRleCA8IFByb3RvY29sLT5OdW1RdWV1ZXM7ICsrSW5kZXgpIHsNCj4gKyAgICAgICAg
c3RhdHVzID0gUmluZ1N0b3JlV3JpdGUoUHJvdG9jb2wtPlJpbmdzW0luZGV4XSwNCj4gKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNhY3Rpb24pOw0KPiAgICAgICAgICBpZiAo
IU5UX1NVQ0NFU1Moc3RhdHVzKSkNCj4gICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7DQo+IC0g
ICAgfSBlbHNlIHsNCj4gLSAgICAgICAgVUxPTkcgICAgICAgICAgIEluZGV4Ow0KPiArICAgIH0N
Cj4gDQo+ICsgICAgaWYgKFByb3RvY29sLT5PcmRlciAhPSAwKSB7DQo+ICAgICAgICAgIHN0YXR1
cyA9IFhFTkJVU19TVE9SRShQcmludGYsDQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAmUHJvdG9jb2wtPlN0b3JlSW50ZXJmYWNlLA0KPiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVHJhbnNhY3Rpb24sDQo+IEBAIC0xODYzLDQ5ICsyMjY2LDI0IEBAIFByb3RvY29sU3Rv
cmVXcml0ZSgNCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb3RvY29sLT5PcmRl
cik7DQo+ICAgICAgICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKQ0KPiAgICAgICAgICAgICAg
cmV0dXJuIHN0YXR1czsNCj4gLQ0KPiAtICAgICAgICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCAo
MXVsIDw8IFByb3RvY29sLT5PcmRlcik7ICsrSW5kZXgpIHsNCj4gLSAgICAgICAgICAgIENIQVIg
ICAgICAgIE5hbWVbTUFYX05BTUVfTEVOKzFdOw0KPiAtDQo+IC0gICAgICAgICAgICBzdGF0dXMg
PSBSdGxTdHJpbmdDY2hQcmludGZBKE5hbWUsDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIE1BWF9OQU1FX0xFTiwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgInJpbmctcmVmJXUiLA0KPiAtICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBJbmRleCk7DQo+IC0gICAgICAgICAgICBpZiAoIU5UX1NVQ0NF
U1Moc3RhdHVzKSkNCj4gLSAgICAgICAgICAgICAgICByZXR1cm4gc3RhdHVzOw0KPiAtDQo+IC0g
ICAgICAgICAgICBzdGF0dXMgPSBYRU5CVVNfU1RPUkUoUHJpbnRmLA0KPiAtICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICZQcm90b2NvbC0+U3RvcmVJbnRlcmZhY2UsDQo+IC0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNhY3Rpb24sDQo+IC0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgRnJvbnRlbmRHZXRGcm9udGVuZFBhdGgoUHJvdG9jb2wt
PkZyb250ZW5kKSwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lLA0K
PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIldSIsDQo+IC0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR3JhbnRlclJlZmVyZW5jZShHcmFudGVyLCBQcm90b2Nv
bC0+R3JhbnRzW0luZGV4XSkpOw0KPiAtICAgICAgICAgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1
cykpDQo+IC0gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsNCj4gLSAgICAgICAgfQ0KPiAg
ICAgIH0NCj4gDQo+ICAgICAgc3RhdHVzID0gWEVOQlVTX1NUT1JFKFByaW50ZiwNCj4gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJlByb3RvY29sLT5TdG9yZUludGVyZmFjZSwNCj4gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVHJhbnNhY3Rpb24sDQo+ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEZyb250ZW5kR2V0RnJvbnRlbmRQYXRoKFByb3RvY29sLT5Gcm9udGVuZCksDQo+IC0g
ICAgICAgICAgICAgICAgICAgICAgICAgICJwcm90b2NvbCIsDQo+IC0gICAgICAgICAgICAgICAg
ICAgICAgICAgIFhFTl9JT19QUk9UT19BQkkpOw0KPiArICAgICAgICAgICAgICAgICAgICAgICAg
ICAibXVsdGktcXVldWUtbnVtLXF1ZXVlcyIsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg
ICIldSIsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIFByb3RvY29sLT5OdW1RdWV1ZXMp
Ow0KPiAgICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKQ0KPiAgICAgICAgICByZXR1cm4gc3Rh
dHVzOw0KPiANCj4gLSAgICBQb3J0ID0gWEVOQlVTX0VWVENITihHZXRQb3J0LA0KPiAtICAgICAg
ICAgICAgICAgICAgICAgICAgICZQcm90b2NvbC0+RXZ0Y2huSW50ZXJmYWNlLA0KPiAtICAgICAg
ICAgICAgICAgICAgICAgICAgIFByb3RvY29sLT5DaGFubmVsKTsNCj4gLQ0KPiAgICAgIHN0YXR1
cyA9IFhFTkJVU19TVE9SRShQcmludGYsDQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQ
cm90b2NvbC0+U3RvcmVJbnRlcmZhY2UsDQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRy
YW5zYWN0aW9uLA0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcm9udGVuZEdldEZyb250
ZW5kUGF0aChQcm90b2NvbC0+RnJvbnRlbmQpLA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAg
ICAiZXZlbnQtY2hhbm5lbCIsDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICIldSIsDQo+
IC0gICAgICAgICAgICAgICAgICAgICAgICAgIFBvcnQpOw0KPiArICAgICAgICAgICAgICAgICAg
ICAgICAgICAicHJvdG9jb2wiLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICBYRU5fSU9f
UFJPVE9fQUJJKTsNCj4gICAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkNCj4gICAgICAgICAg
cmV0dXJuIHN0YXR1czsNCj4gDQo+IEBAIC0xOTE3LDEyICsyMjk1LDEzIEBAIFByb3RvY29sRW5h
YmxlKA0KPiAgICAgIElOICBQWEVOVkJEX1BST1RPQ09MICAgIFByb3RvY29sDQo+ICAgICAgKQ0K
PiAgew0KPiArICAgIFVMT05HICAgICAgICAgICAgICAgICAgIEluZGV4Ow0KPiArDQo+ICAgICAg
QVNTRVJUKFByb3RvY29sLT5FbmFibGVkID09IEZBTFNFKTsNCj4gICAgICBQcm90b2NvbC0+RW5h
YmxlZCA9IFRSVUU7DQo+IA0KPiAtICAgIFhFTkJVU19FVlRDSE4oVHJpZ2dlciwNCj4gLSAgICAg
ICAgICAgICAgICAgICZQcm90b2NvbC0+RXZ0Y2huSW50ZXJmYWNlLA0KPiAtICAgICAgICAgICAg
ICAgICAgUHJvdG9jb2wtPkNoYW5uZWwpOw0KPiArICAgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8
IFByb3RvY29sLT5OdW1RdWV1ZXM7ICsrSW5kZXgpDQo+ICsgICAgICAgIFJpbmdFbmFibGUoUHJv
dG9jb2wtPlJpbmdzW0luZGV4XSk7DQo+ICB9DQo+IA0KPiAgVk9JRA0KPiBAQCAtMTkzMCw1NiAr
MjMwOSwxMyBAQCBQcm90b2NvbERpc2FibGUoDQo+ICAgICAgSU4gIFBYRU5WQkRfUFJPVE9DT0wg
ICAgUHJvdG9jb2wNCj4gICAgICApDQo+ICB7DQo+IC0gICAgVUxPTkcgICAgICAgICAgICAgICBD
b3VudDsNCj4gLSAgICBLSVJRTCAgICAgICAgICAgICAgIElycWw7DQo+IC0gICAgUFhFTlZCRF9U
QVJHRVQgICAgICBUYXJnZXQgPSBGcm9udGVuZEdldFRhcmdldChQcm90b2NvbC0+RnJvbnRlbmQp
Ow0KPiAtICAgIFBYRU5WQkRfQURBUFRFUiAgICAgQWRhcHRlciA9IFRhcmdldEdldEFkYXB0ZXIo
VGFyZ2V0KTsNCj4gKyAgICBVTE9ORyAgICAgICAgICAgICAgICAgICBJbmRleDsNCj4gDQo+ICAg
ICAgQVNTRVJUKFByb3RvY29sLT5FbmFibGVkID09IFRSVUUpOw0KPiAgICAgIFByb3RvY29sLT5F
bmFibGVkID0gRkFMU0U7DQo+IA0KPiAtICAgIC8vIHBvbGwgcmluZyBhbmQgc2VuZCBldmVudCBj
aGFubmVsIG5vdGlmaWNhdGlvbiBldmVyeSAxbXMgKGZvciB1cCB0byAzDQo+IG1pbnV0ZXMpDQo+
IC0gICAgQ291bnQgPSAwOw0KPiAtICAgIHdoaWxlIChRdWV1ZUNvdW50KCZQcm90b2NvbC0+U3Vi
bWl0dGVkUmVxcykpIHsNCj4gLSAgICAgICAgaWYgKENvdW50ID4gMTgwMDAwKQ0KPiAtICAgICAg
ICAgICAgYnJlYWs7DQo+IC0gICAgICAgIEtlUmFpc2VJcnFsKERJU1BBVENIX0xFVkVMLCAmSXJx
bCk7DQo+IC0gICAgICAgIFByb3RvY29sUG9sbChQcm90b2NvbCk7DQo+IC0gICAgICAgIEtlTG93
ZXJJcnFsKElycWwpOw0KPiAtICAgICAgICBYRU5CVVNfRVZUQ0hOKFNlbmQsDQo+IC0gICAgICAg
ICAgICAgICAgICAgICAgJlByb3RvY29sLT5FdnRjaG5JbnRlcmZhY2UsDQo+IC0gICAgICAgICAg
ICAgICAgICAgICAgUHJvdG9jb2wtPkNoYW5uZWwpOw0KPiAtICAgICAgICBTdG9yUG9ydFN0YWxs
RXhlY3V0aW9uKDEwMDApOyAgIC8vIDEwMDAgbWljcm8tc2Vjb25kcw0KPiAtICAgICAgICArK0Nv
dW50Ow0KPiAtICAgIH0NCj4gLQ0KPiAtICAgIFZlcmJvc2UoIlRhcmdldFslZF0gOiAldSBTdWJt
aXR0ZWQgcmVxdWVzdHMgbGVmdCAoJXUgaXRlcnJhdGlvbnMpXG4iLA0KPiAtICAgICAgICAgICAg
RnJvbnRlbmRHZXRUYXJnZXRJZChQcm90b2NvbC0+RnJvbnRlbmQpLA0KPiAtICAgICAgICAgICAg
UXVldWVDb3VudCgmUHJvdG9jb2wtPlN1Ym1pdHRlZFJlcXMpLA0KPiAtICAgICAgICAgICAgQ291
bnQpOw0KPiAtDQo+IC0gICAgLy8gRmFpbCBQcmVwYXJlZFJlcXMNCj4gLSAgICBmb3IgKDs7KSB7
DQo+IC0gICAgICAgIFBYRU5WQkRfU1JCRVhUICAgICAgU3JiRXh0Ow0KPiAtICAgICAgICBQU0NT
SV9SRVFVRVNUX0JMT0NLIFNyYjsNCj4gLSAgICAgICAgUFhFTlZCRF9SRVFVRVNUICAgICBSZXF1
ZXN0Ow0KPiAtICAgICAgICBQTElTVF9FTlRSWSAgICAgICAgIExpc3RFbnRyeTsNCj4gLQ0KPiAt
ICAgICAgICBMaXN0RW50cnkgPSBRdWV1ZVBvcCgmUHJvdG9jb2wtPlByZXBhcmVkUmVxcyk7DQo+
IC0gICAgICAgIGlmIChMaXN0RW50cnkgPT0gTlVMTCkNCj4gLSAgICAgICAgICAgIGJyZWFrOw0K
PiAtICAgICAgICBSZXF1ZXN0ID0gQ09OVEFJTklOR19SRUNPUkQoTGlzdEVudHJ5LCBYRU5WQkRf
UkVRVUVTVCwNCj4gTGlzdEVudHJ5KTsNCj4gLSAgICAgICAgU3JiRXh0ID0gUmVxdWVzdC0+U3Ji
RXh0Ow0KPiAtICAgICAgICBTcmIgPSBTcmJFeHQtPlNyYjsNCj4gLQ0KPiAtICAgICAgICBTcmIt
PlNyYlN0YXR1cyA9IFNSQl9TVEFUVVNfQUJPUlRFRDsNCj4gLSAgICAgICAgU3JiLT5TY3NpU3Rh
dHVzID0gMHg0MDsgLy8gU0NTSV9BQk9SVEVEDQo+IC0NCj4gLSAgICAgICAgUHJvdG9jb2xQdXRS
ZXF1ZXN0KFByb3RvY29sLCBSZXF1ZXN0KTsNCj4gLQ0KPiAtICAgICAgICBpZiAoSW50ZXJsb2Nr
ZWREZWNyZW1lbnQoJlNyYkV4dC0+UmVxdWVzdENvdW50KSA9PSAwKQ0KPiAtICAgICAgICAgICAg
QWRhcHRlckNvbXBsZXRlU3JiKEFkYXB0ZXIsIFNyYkV4dCk7DQo+IC0gICAgfQ0KPiArICAgIGZv
ciAoSW5kZXggPSAwOyBJbmRleCA8IFByb3RvY29sLT5OdW1RdWV1ZXM7ICsrSW5kZXgpDQo+ICsg
ICAgICAgIFJpbmdEaXNhYmxlKFByb3RvY29sLT5SaW5nc1tJbmRleF0pOw0KPiAgfQ0KPiANCj4g
IFZPSUQNCj4gQEAgLTE5ODcsMTAgKzIzMjMsOCBAQCBQcm90b2NvbERpc2Nvbm5lY3QoDQo+ICAg
ICAgSU4gIFBYRU5WQkRfUFJPVE9DT0wgICAgUHJvdG9jb2wNCj4gICAgICApDQo+ICB7DQo+IC0g
ICAgUFhFTlZCRF9HUkFOVEVSICAgICBHcmFudGVyID0gRnJvbnRlbmRHZXRHcmFudGVyKFByb3Rv
Y29sLQ0KPiA+RnJvbnRlbmQpOw0KPiAgICAgIFVMT05HICAgICAgICAgICAgICAgSW5kZXg7DQo+
IA0KPiAtICAgIEFTU0VSVDNVKFByb3RvY29sLT5TdWJtaXR0ZWQsID09LCBQcm90b2NvbC0+UmVj
ZWl2ZWQpOw0KPiAgICAgIEFTU0VSVChQcm90b2NvbC0+Q29ubmVjdGVkKTsNCj4gICAgICBQcm90
b2NvbC0+Q29ubmVjdGVkID0gRkFMU0U7DQo+IA0KPiBAQCAtMTk5OSwyNCArMjMzMyw4IEBAIFBy
b3RvY29sRGlzY29ubmVjdCgNCj4gICAgICAgICAgICAgICAgICAgUHJvdG9jb2wtPkRlYnVnQ2Fs
bGJhY2spOw0KPiAgICAgIFByb3RvY29sLT5EZWJ1Z0NhbGxiYWNrID0gTlVMTDsNCj4gDQo+IC0g
ICAgWEVOQlVTX0VWVENITihDbG9zZSwNCj4gLSAgICAgICAgICAgICAgICAgICZQcm90b2NvbC0+
RXZ0Y2huSW50ZXJmYWNlLA0KPiAtICAgICAgICAgICAgICAgICAgUHJvdG9jb2wtPkNoYW5uZWwp
Ow0KPiAtICAgIFByb3RvY29sLT5DaGFubmVsID0gTlVMTDsNCj4gLQ0KPiAtICAgIGZvciAoSW5k
ZXggPSAwOyBJbmRleCA8ICgxdWwgPDwgUHJvdG9jb2wtPk9yZGVyKTsgKytJbmRleCkgew0KPiAt
ICAgICAgICBpZiAoUHJvdG9jb2wtPkdyYW50c1tJbmRleF0gPT0gTlVMTCkNCj4gLSAgICAgICAg
ICAgIGNvbnRpbnVlOw0KPiAtDQo+IC0gICAgICAgIEdyYW50ZXJQdXQoR3JhbnRlciwgUHJvdG9j
b2wtPkdyYW50c1tJbmRleF0pOw0KPiAtICAgICAgICBQcm90b2NvbC0+R3JhbnRzW0luZGV4XSA9
IE5VTEw7DQo+IC0gICAgfQ0KPiAtDQo+IC0gICAgUnRsWmVyb01lbW9yeSgmUHJvdG9jb2wtPkZy
b250LCBzaXplb2YoYmxraWZfZnJvbnRfcmluZ190KSk7DQo+IC0NCj4gLSAgICBfX0ZyZWVQYWdl
cyhQcm90b2NvbC0+TWRsKTsNCj4gLSAgICBQcm90b2NvbC0+U2hhcmVkID0gTlVMTDsNCj4gLSAg
ICBQcm90b2NvbC0+TWRsID0gTlVMTDsNCj4gKyAgICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBQ
cm90b2NvbC0+TnVtUXVldWVzOyArK0luZGV4KQ0KPiArICAgICAgICBSaW5nRGlzY29ubmVjdChQ
cm90b2NvbC0+UmluZ3NbSW5kZXhdKTsNCj4gDQo+ICAgICAgUHJvdG9jb2wtPk9yZGVyID0gMDsN
Cj4gDQo+IEBAIC0yMDMwLDExICsyMzQ4LDYgQEAgUHJvdG9jb2xEaXNjb25uZWN0KA0KPiAgICAg
ICAgICAgICAgICAgICAgc2l6ZW9mKFhFTkJVU19FVlRDSE5fSU5URVJGQUNFKSk7DQo+ICAgICAg
UnRsWmVyb01lbW9yeSgmUHJvdG9jb2wtPlN0b3JlSW50ZXJmYWNlLA0KPiAgICAgICAgICAgICAg
ICAgICAgc2l6ZW9mKFhFTkJVU19TVE9SRV9JTlRFUkZBQ0UpKTsNCj4gLQ0KPiAtICAgIFByb3Rv
Y29sLT5FdmVudHMgPSAwOw0KPiAtICAgIFByb3RvY29sLT5EcGNzID0gMDsNCj4gLSAgICBQcm90
b2NvbC0+U3VibWl0dGVkID0gMDsNCj4gLSAgICBQcm90b2NvbC0+UmVjZWl2ZWQgPSAwOw0KPiAg
fQ0KPiANCj4gIFZPSUQNCj4gQEAgLTIwNDIsMTIgKzIzNTUsMjkgQEAgUHJvdG9jb2xUcmlnZ2Vy
KA0KPiAgICAgIElOICBQWEVOVkJEX1BST1RPQ09MICAgIFByb3RvY29sDQo+ICAgICAgKQ0KPiAg
ew0KPiArICAgIFVMT05HICAgICAgICAgICAgICAgICAgIEluZGV4Ow0KPiArDQo+ICAgICAgaWYg
KCFQcm90b2NvbC0+RW5hYmxlZCkNCj4gICAgICAgICAgcmV0dXJuOw0KPiANCj4gLSAgICBYRU5C
VVNfRVZUQ0hOKFRyaWdnZXIsDQo+IC0gICAgICAgICAgICAgICAgICAmUHJvdG9jb2wtPkV2dGNo
bkludGVyZmFjZSwNCj4gLSAgICAgICAgICAgICAgICAgIFByb3RvY29sLT5DaGFubmVsKTsNCj4g
KyAgICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBQcm90b2NvbC0+TnVtUXVldWVzOyArK0luZGV4
KQ0KPiArICAgICAgICBSaW5nVHJpZ2dlcihQcm90b2NvbC0+UmluZ3NbSW5kZXhdKTsNCj4gK30N
Cj4gKw0KPiArc3RhdGljIEZPUkNFSU5MSU5FIFBYRU5WQkRfUklORw0KPiArX19Qcm90b2NvbEdl
dFJpbmcoDQo+ICsgICAgSU4gIFBYRU5WQkRfUFJPVE9DT0wgICAgUHJvdG9jb2wNCj4gKyAgICAp
DQo+ICt7DQo+ICsgICAgVUxPTkcgICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+ICsNCj4gKyAg
ICBpZiAoUHJvdG9jb2wtPk51bVF1ZXVlcyA9PSAwKQ0KPiArICAgICAgICByZXR1cm4gUHJvdG9j
b2wtPlJpbmdzWzBdOw0KPiArDQo+ICsgICAgSW5kZXggPSBLZUdldEN1cnJlbnRQcm9jZXNzb3JO
dW1iZXJFeChOVUxMKSAlIFByb3RvY29sLQ0KPiA+TnVtUXVldWVzOw0KPiArICAgIEFTU0VSVChJ
bmRleCA8IFByb3RvY29sLT5OdW1RdWV1ZXMpOw0KPiArDQo+ICsgICAgcmV0dXJuIFByb3RvY29s
LT5SaW5nc1tJbmRleF07DQo+ICB9DQo+IA0KPiAgQk9PTEVBTg0KPiBAQCAtMjA1NywxNyArMjM4
NywyNiBAQCBQcm90b2NvbFF1ZXVlUmVxdWVzdCgNCj4gICAgICApDQo+ICB7DQo+ICAgICAgUFND
U0lfUkVRVUVTVF9CTE9DSyBTcmIgPSBTcmJFeHQtPlNyYjsNCj4gKyAgICBQWEVOVkJEX1JJTkcg
ICAgICAgIFJpbmc7DQo+ICsgICAgTElTVF9FTlRSWSAgICAgICAgICBMaXN0Ow0KPiArDQo+ICsg
ICAgSW5pdGlhbGl6ZUxpc3RIZWFkKCZMaXN0KTsNCj4gDQo+ICAgICAgaWYgKCFQcm90b2NvbC0+
RW5hYmxlZCkNCj4gICAgICAgICAgZ290byBmYWlsMTsNCj4gDQo+IC0gICAgaWYgKCFQcm90b2Nv
bFByZXBhcmVSZXF1ZXN0KFByb3RvY29sLCBTcmJFeHQpKQ0KPiArICAgIGlmICghUHJvdG9jb2xQ
cmVwYXJlUmVxdWVzdChQcm90b2NvbCwgU3JiRXh0LCAmTGlzdCkpDQo+ICAgICAgICAgIGdvdG8g
ZmFpbDI7DQo+IA0KPiAtICAgIGlmIChQcm90b2NvbFN1Ym1pdFJlcXVlc3RzKFByb3RvY29sKSkg
ew0KPiArICAgIFJpbmcgPSBfX1Byb3RvY29sR2V0UmluZyhQcm90b2NvbCk7DQo+ICsgICAgQVNT
RVJUKFJpbmcgIT0gTlVMTCk7DQo+ICsNCj4gKyAgICBSaW5nUXVldWVSZXF1ZXN0TGlzdChSaW5n
LCAmTGlzdCk7DQo+ICsNCj4gKyAgICBpZiAoUmluZ1N1Ym1pdFJlcXVlc3RzKFJpbmcpKSB7DQo+
ICAgICAgICAgIC8vIG1vcmUgcHJlcGFyZWQtcmVxcyB0byBzdWJtaXQNCj4gLSAgICAgICAgaWYg
KEtlSW5zZXJ0UXVldWVEcGMoJlByb3RvY29sLT5EcGMsIE5VTEwsIE5VTEwpKQ0KPiAtICAgICAg
ICAgICAgKytQcm90b2NvbC0+RHBjczsNCj4gKyAgICAgICAgaWYgKEtlSW5zZXJ0UXVldWVEcGMo
JlJpbmctPkRwYywgTlVMTCwgTlVMTCkpDQo+ICsgICAgICAgICAgICArK1JpbmctPkRwY3M7DQo+
ICAgICAgfQ0KPiANCj4gICAgICByZXR1cm4gVFJVRTsNCj4gQEAgLTIwODEsMTUgKzI0MjAsMjAg
QEAgZmFpbDE6DQo+ICBWT0lEDQo+ICBQcm90b2NvbFF1ZXVlU2h1dGRvd24oDQo+ICAgICAgSU4g
IFBYRU5WQkRfUFJPVE9DT0wgICAgUHJvdG9jb2wsDQo+IC0gICAgSU4gIFBYRU5WQkRfU1JCRVhU
ICBTcmJFeHQNCj4gKyAgICBJTiAgUFhFTlZCRF9TUkJFWFQgICAgICBTcmJFeHQNCj4gICAgICAp
DQo+ICB7DQo+IC0gICAgUXVldWVBcHBlbmQoJlByb3RvY29sLT5TaHV0ZG93blNyYnMsDQo+ICsg
ICAgUFhFTlZCRF9SSU5HICAgICAgICAgICAgUmluZzsNCj4gKw0KPiArICAgIFJpbmcgPSBfX1By
b3RvY29sR2V0UmluZyhQcm90b2NvbCk7DQo+ICsgICAgQVNTRVJUKFJpbmcgIT0gTlVMTCk7DQo+
ICsNCj4gKyAgICBRdWV1ZUFwcGVuZCgmUmluZy0+U2h1dGRvd25TcmJzLA0KPiAgICAgICAgICAg
ICAgICAgICZTcmJFeHQtPkxpc3RFbnRyeSk7DQo+IA0KPiAgICAgIGlmICghUHJvdG9jb2wtPkVu
YWJsZWQpDQo+ICAgICAgICAgIHJldHVybjsNCj4gDQo+IC0gICAgaWYgKEtlSW5zZXJ0UXVldWVE
cGMoJlByb3RvY29sLT5EcGMsIE5VTEwsIE5VTEwpKQ0KPiAtCSAgICArK1Byb3RvY29sLT5EcGNz
Ow0KPiArICAgIGlmIChLZUluc2VydFF1ZXVlRHBjKCZSaW5nLT5EcGMsIE5VTEwsIE5VTEwpKQ0K
PiArCSAgICArK1JpbmctPkRwY3M7DQo+ICB9DQo+IC0tDQo+IDIuMTYuMi53aW5kb3dzLjENCj4g
DQo+IA0KPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw0K
PiB3aW4tcHYtZGV2ZWwgbWFpbGluZyBsaXN0DQo+IHdpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9q
ZWN0Lm9yZw0KPiBodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8v
d2luLXB2LWRldmVsDQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXwp3aW4tcHYtZGV2ZWwgbWFpbGluZyBsaXN0Cndpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9q
ZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vd2lu
LXB2LWRldmVs

From win-pv-devel-bounces@lists.xenproject.org Wed May 23 01:08:07 2018
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 23 May 2018 01:08:07 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1fLIG3-0004kL-L0; Wed, 23 May 2018 01:08:03 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <srs0=vwus=ij=dingwall.me.uk=james@srs-us1.protection.inumbo.net>)
 id 1fL9tv-00039o-6B
 for win-pv-devel@lists.xenproject.org; Tue, 22 May 2018 16:12:39 +0000
X-Inumbo-ID: 700d96e6-5ddb-11e8-8249-2fda3a446a53
Received: from know-smtprelay-omc-9.server.virginmedia.net (unknown
 [80.0.253.73]) by us1-amaz-eas1.inumbo.com (Halon) with ESMTPS
 id 700d96e6-5ddb-11e8-8249-2fda3a446a53;
 Tue, 22 May 2018 16:16:10 +0000 (UTC)
Received: from dingwall.me.uk ([82.47.84.47]) by cmsmtp with ESMTP
 id L9tofp1fufU1xL9tofWXlu; Tue, 22 May 2018 17:12:33 +0100
X-Originating-IP: [82.47.84.47]
X-Authenticated-User: 
X-Spam: 0
X-Authority: v=2.3 cv=OoZhNR3t c=1 sm=1 tr=0 a=0bfgdX8EJi0Cr9X0x0jFDA==:117
 a=0bfgdX8EJi0Cr9X0x0jFDA==:17 a=kj9zAlcOel0A:10 a=VUJBJC2UJ8kA:10
 a=cWRNjhkoAAAA:8 a=xgJvUjryOsiFuIM43s4A:9 a=CjuIK1q_8ugA:10 a=MmcU4vdluOgA:10
 a=sVa6W5Aao32NNC1mekxh:22
Received: (qmail 22353 invoked from network); 22 May 2018 16:12:32 -0000
Received: from behemoth.dingwall.me.uk (192.168.1.5)
 by mail0.xen.dingwall.me.uk with SMTP; 22 May 2018 16:12:32 -0000
Received: by behemoth.dingwall.me.uk (Postfix, from userid 1000)
 id 42987D08C20; Tue, 22 May 2018 17:12:32 +0100 (BST)
Date: Tue, 22 May 2018 17:12:32 +0100
From: James Dingwall <james-xen@dingwall.me.uk>
To: win-pv-devel@lists.xenproject.org
Message-ID: <20180522161231.GA46399@dingwall.me.uk>
MIME-Version: 1.0
Content-Disposition: inline
User-Agent: Mutt/1.9.4 (2018-02-28)
X-CMAE-Envelope: MS4wfCar8WTsV4bs3NrNWENbKwU+NxHhHXnEl/XeSZ7X2MJdHTa4c44Hb8JjmaIORg0CU89pFAET1TcgVlZKcjVcfrEwjs6E6ZerdCMIC9yp4q6QiiYPxmn4
 ZxZzVL+i66Ej9fd/i72mKSp/Omx8731SeFAebM3r9bDbrTKhu7YacfrFhTUiWfC1MMfqORUPY/QcQg==
X-Mailman-Approved-At: Wed, 23 May 2018 01:08:02 +0000
Subject: [win-pv-devel] poor winpv performance with iommu=on + disk driver
 domain
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>

SGksCgpJIHJhaXNlZCB0aGlzIGlzc3VlIHdpdGggc29tZSBub24gc3BlY2lmaWMgZGV0YWlscyBi
ZWZvcmUgb24geGVuLWRldmVsOiAKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9hcmNoaXZl
cy9odG1sL3hlbi1kZXZlbC8yMDE3LTEyL21zZzAwMjYyLmh0bWwKCkluIHN1bW1hcnkgd2hlbiBl
bmFibGluZyB0aGUgaW9tbXUgd2Ugbm90ZSBhIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIGluIAp0
aGUgZGlzayBwZXJmb3JtYW5jZSBvZiBXaW5kb3dzIGd1ZXN0cyBydW5uaW5nIHdpdGggV2luUFYg
ZHJpdmVycy4KClNpbmNlIHRoZSBvcmlnaW5hbCByZXBvcnQgd2UgaGF2ZSBkb25lIHNvbWUgbW9y
ZSBpbnZlc3RpZ2F0aW9uIGFuZCBub3cgCnNlZW0gdG8gaGF2ZSBpc29sYXRlZCB0aGUgcGVyZm9y
bWFuY2UgaXNzdWUgbm90ZWQgaW4gb3VyIEhWTSBndWVzdHMgYXMgCmFuIGFkdmVyc2UgaW50ZXJh
Y3Rpb24gYmV0d2VlbiB0aGUgV2luUFYgZHJpdmVycyBhbmQgdGhlIGJsa2JhY2sgZHJpdmVyIApp
biB0aGUgZGlzayBkcml2ZXIgZG9tYWluLiAgVGhpcyBpcyBvYnNlcnZlZCBhcyBzbG93IGRpc2sg
c3BlZWQgaW4gdGhlIApndWVzdCBhbmQgaGlnaCBjcHUgdXNhZ2Ugb2YgdGhlIGNvcnJlc3BvbmRp
bmcgYmxrYmFjay48ZG9taWQ+LjxkaXNrPiAKcHJvY2VzcyBpbiB0aGUgYmFja2VuZC4gIElmIHRo
ZSBIVk0gaXMgY29uZmlndXJlZCB0byBuZXR3b3JrIGJvb3QgYSBQWEUgCkxpbnV4IGltYWdlIHRo
ZXJlIGlzIG5vIGRpc2sgcGVyZm9ybWFuY2UgaXNzdWUuCgpXZSBoYXZlIHVwZGF0ZWQgb3VyIHN0
YWNrIHRvIGJlIGJhc2VkIG9uIFhlbiA0LjguMywgYSBjdXN0b20gY29tcGlsZSBvZiAKdGhlIFVi
dW50dSBrZXJuZWwgdGFnIFVidW50dS1sdHMtNC40LjAtMTI3LjE1M18xNC4wNC4xIGFuZCBaRlMg
MC43LjkuICAKV2UgaGF2ZSBvdXIgb3duIGJ1aWxkIG9mIHRoZSBXaW5QViBkcml2ZXJzIHRvbyBi
dXQgd2Ugc2VlIHRoZSBzYW1lIHdoZW4gCnVzaW5nIHRoZSA4LjIuMSByZWxlYXNlLgoKSSBkaWQg
c29tZSB0cmFjaW5nIGluIHRoZSBkaXNrIGRyaXZlciBkb21haW4gZm9yIHRoZSBibG9jayBiYWNr
IGRyaXZlcjoKCmNkIC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcKZWNobyBmdW5jdGlvbl9ncmFw
aCA+IGN1cnJlbnRfdHJhY2VyCmVjaG8gJzptb2Q6eGVuX2Jsa2JhY2snID4gc2V0X2Z0cmFjZV9m
aWx0ZXIKZWNobyBwaWRfb2ZfYmxiYWNrX3dvcmtlciA+IHNldF9mdHJhY2VfcGlkCgpGb3IgV2lu
UFYgdGhlcmUgYXJlIHNvbWUgdmVyeSBsb25nIHBlcmlvZHMgYXQgdGhlIGVuZCBvZiBzb21lIApv
cGVyYXRpb25zIHdoaWNoIGFyZSBub3Qgc2VlbiB3aGVuIHRyYWNpbmcgd2l0aCBhIExpbnV4IGd1
ZXN0LCBzb21lIApwYXJ0cyBvZiB0aGUgY2FwdHVyZWQgdHJhY2VzIGJlbG93LiAgSSBhc3N1bWUg
dGhhdCBzb21ldGhpbmcgZXh0cmEgaXMgCmhhcHBlbmluZyB3aXRoIFdpblBWIGR1ZSB0byB0aGUg
ZXh0cmEge30gc2V0IGFmdGVyIHhlbl9ibGtia19tYXAgClt4ZW5fYmxrYmFja10oKS4KCklmIHRo
ZXJlIGFyZSBhbnkgc3VnZ2VzdGlvbnMgb24gaG93IHRvIGZ1cnRoZXIgZGVidWcgdGhpcywgb3B0
aW9ucyB0byAKdHJ5IG9yIGlmIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGVudmlyb25tZW50
IGlzIHJlcXVpcmVkIEknZCBiZSAKaGFwcHkgdG8gZ2l2ZSBhbnl0aGluZyBhIGdvLgoKVGhhbmtz
LApKYW1lcwoKCldpblBWIHRyYWNlIHNhbXBsZSAoaW9tbXU9b24pOgoKIDIpICAgICAgICAgICAg
ICAgfCAgICBkaXNwYXRjaF9yd19ibG9ja19pbyBbeGVuX2Jsa2JhY2tdKCkgewogMikgICAgICAg
ICAgICAgICB8ICAgICAgeGVuX2Jsa2JrX21hcCBbeGVuX2Jsa2JhY2tdKCkgewogMikgISAyMDgu
MjI5IHVzICB8ICAgICAgfQogMikgICAgICAgICAgICAgICB8ICAgICAgeGVuX2Jsa2JrX3VubWFw
IFt4ZW5fYmxrYmFja10oKSB7CiAyKSAgIDAuMjA4IHVzICAgIHwgICAgICAgIHhlbl9ibGtia191
bm1hcF9wcmVwYXJlIFt4ZW5fYmxrYmFja10oKTsKIDIpICEgMTY4LjQwNCB1cyAgfCAgICAgIH0K
IDIpICAgMC40NzggdXMgICAgfCAgICAgIHhlbl92YmRfdHJhbnNsYXRlIFt4ZW5fYmxrYmFja10o
KTsKIDIpICAgICAgICAgICAgICAgfCAgICAgIHhlbl9ibGtia19tYXAgW3hlbl9ibGtiYWNrXSgp
IHsKIDIpICogMjYzMDYuODYgdXMgfCAgICAgIH0KIDIpICogMjY3NzMuNzYgdXMgfCAgICB9CiAy
KSAgICAgICAgICAgICAgIHwgICAgZGlzcGF0Y2hfcndfYmxvY2tfaW8gW3hlbl9ibGtiYWNrXSgp
IHsKIDIpICsgOTAuMjk3IHVzICAgfCAgICAgIHhlbl9ibGtia19tYXAgW3hlbl9ibGtiYWNrXSgp
OwogMikgICAgICAgICAgICAgICB8ICAgICAgeGVuX2Jsa2JrX3VubWFwIFt4ZW5fYmxrYmFja10o
KSB7CiAyKSAgIDAuMTk2IHVzICAgIHwgICAgICAgIHhlbl9ibGtia191bm1hcF9wcmVwYXJlIFt4
ZW5fYmxrYmFja10oKTsKIDIpICsgOTAuMTYwIHVzICAgfCAgICAgIH0KIDIpICAgMC4yODYgdXMg
ICAgfCAgICAgIHhlbl92YmRfdHJhbnNsYXRlIFt4ZW5fYmxrYmFja10oKTsKIDIpICAgICAgICAg
ICAgICAgfCAgICAgIHhlbl9ibGtia19tYXAgW3hlbl9ibGtiYWNrXSgpIHsKIDIpICogMjEwNjIu
NTkgdXMgfCAgICAgIH0KIDIpICogMjEzMTQuMjYgdXMgfCAgICB9CiAzKSBAIDIwMzg0Ni4yIHVz
IHwgIH0gLyogX19kb19ibG9ja19pb19vcCBbeGVuX2Jsa2JhY2tdICovCiAzKSAgICAgICAgICAg
ICAgIHwgIF9fZG9fYmxvY2tfaW9fb3AgW3hlbl9ibGtiYWNrXSgpIHsKIDMpICAgICAgICAgICAg
ICAgfCAgICBkaXNwYXRjaF9yd19ibG9ja19pbyBbeGVuX2Jsa2JhY2tdKCkgewogMykgISAxNjku
NTQxIHVzICB8ICAgICAgeGVuX2Jsa2JrX21hcCBbeGVuX2Jsa2JhY2tdKCk7CiAzKSAgICAgICAg
ICAgICAgIHwgICAgICB4ZW5fYmxrYmtfdW5tYXAgW3hlbl9ibGtiYWNrXSgpIHsKIDMpICAgMC4x
NzMgdXMgICAgfCAgICAgICAgeGVuX2Jsa2JrX3VubWFwX3ByZXBhcmUgW3hlbl9ibGtiYWNrXSgp
OwogMykgISAyMjEuNzAxIHVzICB8ICAgICAgfQogMykgICAwLjQ3MSB1cyAgICB8ICAgICAgeGVu
X3ZiZF90cmFuc2xhdGUgW3hlbl9ibGtiYWNrXSgpOwogMykgICAgICAgICAgICAgICB8ICAgICAg
eGVuX2Jsa2JrX21hcCBbeGVuX2Jsa2JhY2tdKCkgewogMykgKyAxNS4wNTAgdXMgICB8ICAgICAg
ICB4ZW5fYmxraWZfYmVfaW50IFt4ZW5fYmxrYmFja10oKTsKIDMpICogMjU0NjcuNzAgdXMgfCAg
ICAgIH0KIDMpICogMjU5MjIuNjggdXMgfCAgICB9CiAzKSAgICAgICAgICAgICAgIHwgICAgZGlz
cGF0Y2hfcndfYmxvY2tfaW8gW3hlbl9ibGtiYWNrXSgpIHsKIDMpICAgMC4yNTIgdXMgICAgfCAg
ICAgIHhlbl92YmRfdHJhbnNsYXRlIFt4ZW5fYmxrYmFja10oKTsKIDMpICAgICAgICAgICAgICAg
fCAgICAgIHhlbl9ibGtia19tYXAgW3hlbl9ibGtiYWNrXSgpIHsKIDMpICEgNTMzLjg2NiB1cyAg
fCAgICAgIH0KIDMpICEgNTU2LjM0NCB1cyAgfCAgICB9CiAzKSAgICAgICAgICAgICAgIHwgICAg
ZGlzcGF0Y2hfcndfYmxvY2tfaW8gW3hlbl9ibGtiYWNrXSgpIHsKIDMpICsgODQuNDA3IHVzICAg
fCAgICAgIHhlbl9ibGtia19tYXAgW3hlbl9ibGtiYWNrXSgpOwogMykgICAgICAgICAgICAgICB8
ICAgICAgeGVuX2Jsa2JrX3VubWFwIFt4ZW5fYmxrYmFja10oKSB7CiAzKSAgIDAuMjM5IHVzICAg
IHwgICAgICAgIHhlbl9ibGtia191bm1hcF9wcmVwYXJlIFt4ZW5fYmxrYmFja10oKTsKIDMpICEg
MTM1Ljg2OSB1cyAgfCAgICAgIH0KIDMpICAgMC4zMTAgdXMgICAgfCAgICAgIHhlbl92YmRfdHJh
bnNsYXRlIFt4ZW5fYmxrYmFja10oKTsKIDMpICAgICAgICAgICAgICAgfCAgICAgIHhlbl9ibGti
a19tYXAgW3hlbl9ibGtiYWNrXSgpIHsKIDMpICMgMjg4Ni4yNzAgdXMgfCAgICAgIH0KIDMpICMg
MzE0Ni44ODMgdXMgfCAgICB9CgogCgpMaW51eCB0cmFjZSBzYW1wbGUgKGlvbW11PW9uKToKCiAy
KSAgICAgICAgICAgICAgIHwgICAgZGlzcGF0Y2hfcndfYmxvY2tfaW8gW3hlbl9ibGtiYWNrXSgp
IHsKIDIpICAgMS4yODggdXMgICAgfCAgICAgIHhlbl9ibGtia19tYXAgW3hlbl9ibGtiYWNrXSgp
OwogMikgICAgICAgICAgICAgICB8ICAgICAgeGVuX2Jsa2JrX3VubWFwIFt4ZW5fYmxrYmFja10o
KSB7CiAyKSAgIDAuMTA4IHVzICAgIHwgICAgICAgIHhlbl9ibGtia191bm1hcF9wcmVwYXJlIFt4
ZW5fYmxrYmFja10oKTsKIDIpICAgMC43NzAgdXMgICAgfCAgICAgIH0KIDIpICAgMC4xMTcgdXMg
ICAgfCAgICAgIHhlbl92YmRfdHJhbnNsYXRlIFt4ZW5fYmxrYmFja10oKTsKIDIpICsgMTMuNTAw
IHVzICAgfCAgICAgIHhlbl9ibGtia19tYXAgW3hlbl9ibGtiYWNrXSgpOwogMikgKyAyMy45Mzgg
dXMgICB8ICAgIH0KIDIpICAgICAgICAgICAgICAgfCAgICBkaXNwYXRjaF9yd19ibG9ja19pbyBb
eGVuX2Jsa2JhY2tdKCkgewogMikgICAxLjM2MiB1cyAgICB8ICAgICAgeGVuX2Jsa2JrX21hcCBb
eGVuX2Jsa2JhY2tdKCk7CiAyKSAgICAgICAgICAgICAgIHwgICAgICB4ZW5fYmxrYmtfdW5tYXAg
W3hlbl9ibGtiYWNrXSgpIHsKIDIpICAgMC4xMzEgdXMgICAgfCAgICAgICAgeGVuX2Jsa2JrX3Vu
bWFwX3ByZXBhcmUgW3hlbl9ibGtiYWNrXSgpOwogMikgICAwLjg4OCB1cyAgICB8ICAgICAgfQog
MikgICAwLjEyMCB1cyAgICB8ICAgICAgeGVuX3ZiZF90cmFuc2xhdGUgW3hlbl9ibGtiYWNrXSgp
OwogMikgKyAxMS40OTIgdXMgICB8ICAgICAgeGVuX2Jsa2JrX21hcCBbeGVuX2Jsa2JhY2tdKCk7
CiAyKSArIDI0LjIzNiB1cyAgIHwgICAgfQogMikgICAgICAgICAgICAgICB8ICAgIGRpc3BhdGNo
X3J3X2Jsb2NrX2lvIFt4ZW5fYmxrYmFja10oKSB7CiAyKSAgIDAuNDM5IHVzICAgIHwgICAgICB4
ZW5fYmxrYmtfbWFwIFt4ZW5fYmxrYmFja10oKTsKIDIpICAgICAgICAgICAgICAgfCAgICAgIHhl
bl9ibGtia191bm1hcCBbeGVuX2Jsa2JhY2tdKCkgewogMikgICAwLjExNyB1cyAgICB8ICAgICAg
ICB4ZW5fYmxrYmtfdW5tYXBfcHJlcGFyZSBbeGVuX2Jsa2JhY2tdKCk7CiAyKSAgIDEuMjczIHVz
ICAgIHwgICAgICB9CiAyKSAgIDAuMjI2IHVzICAgIHwgICAgICB4ZW5fdmJkX3RyYW5zbGF0ZSBb
eGVuX2Jsa2JhY2tdKCk7CiAyKSAgIDcuODY3IHVzICAgIHwgICAgICB4ZW5fYmxrYmtfbWFwIFt4
ZW5fYmxrYmFja10oKTsKIDIpICsgMTcuMzI4IHVzICAgfCAgICB9CiAyKSAgICAgICAgICAgICAg
IHwgICAgZGlzcGF0Y2hfcndfYmxvY2tfaW8gW3hlbl9ibGtiYWNrXSgpIHsKIDIpICAgMC41MjEg
dXMgICAgfCAgICAgIHhlbl9ibGtia19tYXAgW3hlbl9ibGtiYWNrXSgpOwogMikgICAgICAgICAg
ICAgICB8ICAgICAgeGVuX2Jsa2JrX3VubWFwIFt4ZW5fYmxrYmFja10oKSB7CiAyKSAgIDAuMTEx
IHVzICAgIHwgICAgICAgIHhlbl9ibGtia191bm1hcF9wcmVwYXJlIFt4ZW5fYmxrYmFja10oKTsK
IDIpICAgMC42MjAgdXMgICAgfCAgICAgIH0KIDIpICAgMC4wOTMgdXMgICAgfCAgICAgIHhlbl92
YmRfdHJhbnNsYXRlIFt4ZW5fYmxrYmFja10oKTsKIDIpICAgNy42ODkgdXMgICAgfCAgICAgIHhl
bl9ibGtia19tYXAgW3hlbl9ibGtiYWNrXSgpOwogMikgKyAxNC4zNjggdXMgICB8ICAgIH0KCgoK
V2luUFYgdHJhY2Ugc2FtcGxlIChpb21tdT1vZmYpOgoKIDEpICAgICAgICAgICAgICAgfCAgICBk
aXNwYXRjaF9yd19ibG9ja19pbyBbeGVuX2Jsa2JhY2tdKCkgewogMSkgICAwLjMwOCB1cyAgICB8
ICAgICAgeGVuX3ZiZF90cmFuc2xhdGUgW3hlbl9ibGtiYWNrXSgpOwogMSkgICA0Ljg1NSB1cyAg
ICB8ICAgICAgeGVuX2Jsa2JrX21hcCBbeGVuX2Jsa2JhY2tdKCk7CiAxKSArIDE1LjkxNSB1cyAg
IHwgICAgfQogMSkgICAgICAgICAgICAgICB8ICAgIGRpc3BhdGNoX3J3X2Jsb2NrX2lvIFt4ZW5f
YmxrYmFja10oKSB7CiAxKSAgIDAuMTEzIHVzICAgIHwgICAgICB4ZW5fdmJkX3RyYW5zbGF0ZSBb
eGVuX2Jsa2JhY2tdKCk7CiAxKSAgIDEuOTAyIHVzICAgIHwgICAgICB4ZW5fYmxrYmtfbWFwIFt4
ZW5fYmxrYmFja10oKTsKIDEpICAgNy4yNzggdXMgICAgfCAgICB9CiAxKSAhIDI4My44MDEgdXMg
IHwgIH0KIDEpICAgICAgICAgICAgICAgfCAgX19kb19ibG9ja19pb19vcCBbeGVuX2Jsa2JhY2td
KCkgewogMSkgICAgICAgICAgICAgICB8ICAgIGRpc3BhdGNoX3J3X2Jsb2NrX2lvIFt4ZW5fYmxr
YmFja10oKSB7CiAxKSAgIDAuMTY3IHVzICAgIHwgICAgICB4ZW5fdmJkX3RyYW5zbGF0ZSBbeGVu
X2Jsa2JhY2tdKCk7CiAxKSAgIDIuNzg2IHVzICAgIHwgICAgICB4ZW5fYmxrYmtfbWFwIFt4ZW5f
YmxrYmFja10oKTsKIDEpICAgOS42MzcgdXMgICAgfCAgICB9CiAxKSArIDQxLjY5MSB1cyAgIHwg
IH0KIDEpICAgICAgICAgICAgICAgfCAgX19kb19ibG9ja19pb19vcCBbeGVuX2Jsa2JhY2tdKCkg
ewogMSkgICAgICAgICAgICAgICB8ICAgIGRpc3BhdGNoX3J3X2Jsb2NrX2lvIFt4ZW5fYmxrYmFj
a10oKSB7CiAxKSArIDEwLjU2NiB1cyAgIHwgICAgICB4ZW5fYmxrYmtfbWFwIFt4ZW5fYmxrYmFj
a10oKTsKIDEpICAgICAgICAgICAgICAgfCAgICAgIHhlbl9ibGtia191bm1hcCBbeGVuX2Jsa2Jh
Y2tdKCkgewogMSkgICAwLjE5NSB1cyAgICB8ICAgICAgICB4ZW5fYmxrYmtfdW5tYXBfcHJlcGFy
ZSBbeGVuX2Jsa2JhY2tdKCk7CiAxKSAgIDQuNjkxIHVzICAgIHwgICAgICB9CiAxKSAgIDAuNzM2
IHVzICAgIHwgICAgICB4ZW5fdmJkX3RyYW5zbGF0ZSBbeGVuX2Jsa2JhY2tdKCk7CiAxKSArIDU3
Ljg5NyB1cyAgIHwgICAgICB4ZW5fYmxrYmtfbWFwIFt4ZW5fYmxrYmFja10oKTsKIDEpICsgOTQu
MTg2IHVzICAgfCAgICB9CiAxKSArIDk2LjY1OCB1cyAgIHwgIH0KIDIpICAgICAgICAgICAgICAg
fCAgX19kb19ibG9ja19pb19vcCBbeGVuX2Jsa2JhY2tdKCkgewogMikgICAgICAgICAgICAgICB8
ICAgIGRpc3BhdGNoX3J3X2Jsb2NrX2lvIFt4ZW5fYmxrYmFja10oKSB7CiAyKSAgIDAuNDQxIHVz
ICAgIHwgICAgICB4ZW5fdmJkX3RyYW5zbGF0ZSBbeGVuX2Jsa2JhY2tdKCk7CiAyKSAgIDguNjU2
IHVzICAgIHwgICAgICB4ZW5fYmxrYmtfbWFwIFt4ZW5fYmxrYmFja10oKTsKIDIpICsgMTguODgx
IHVzICAgfCAgICB9CiAyKSArIDQ2Ljk2MSB1cyAgIHwgIH0KIDIpICAgICAgICAgICAgICAgfCAg
X19kb19ibG9ja19pb19vcCBbeGVuX2Jsa2JhY2tdKCkgewogMikgICAgICAgICAgICAgICB8ICAg
IGRpc3BhdGNoX3J3X2Jsb2NrX2lvIFt4ZW5fYmxrYmFja10oKSB7CiAyKSAgIDAuNDk1IHVzICAg
IHwgICAgICB4ZW5fdmJkX3RyYW5zbGF0ZSBbeGVuX2Jsa2JhY2tdKCk7CiAyKSAgIDcuNjE0IHVz
ICAgIHwgICAgICB4ZW5fYmxrYmtfbWFwIFt4ZW5fYmxrYmFja10oKTsKIDIpICsgMjMuNTE4IHVz
ICAgfCAgICB9CiAyKSArIDI1Ljk4MCB1cyAgIHwgIH0KIDIpICAgICAgICAgICAgICAgfCAgX19k
b19ibG9ja19pb19vcCBbeGVuX2Jsa2JhY2tdKCkgewogMikgICAgICAgICAgICAgICB8ICAgIGRp
c3BhdGNoX3J3X2Jsb2NrX2lvIFt4ZW5fYmxrYmFja10oKSB7CiAyKSAgIDAuNDc5IHVzICAgIHwg
ICAgICB4ZW5fdmJkX3RyYW5zbGF0ZSBbeGVuX2Jsa2JhY2tdKCk7CiAyKSAgIDUuODcyIHVzICAg
IHwgICAgICB4ZW5fYmxrYmtfbWFwIFt4ZW5fYmxrYmFja10oKTsKIDIpICsgMTUuODMxIHVzICAg
fCAgICB9CiAyKSArIDE4LjUyMSB1cyAgIHwgIH0KIDIpICAgICAgICAgICAgICAgfCAgX19kb19i
bG9ja19pb19vcCBbeGVuX2Jsa2JhY2tdKCkgewogMikgICAgICAgICAgICAgICB8ICAgIGRpc3Bh
dGNoX3J3X2Jsb2NrX2lvIFt4ZW5fYmxrYmFja10oKSB7CiAyKSAgIDAuNDczIHVzICAgIHwgICAg
ICB4ZW5fdmJkX3RyYW5zbGF0ZSBbeGVuX2Jsa2JhY2tdKCk7CiAyKSAgIDguNzI0IHVzICAgIHwg
ICAgICB4ZW5fYmxrYmtfbWFwIFt4ZW5fYmxrYmFja10oKTsKIDIpICsgMjMuMjc1IHVzICAgfCAg
ICB9CiAyKSArIDI5LjMzMyB1cyAgIHwgIH0KCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fXwp3aW4tcHYtZGV2ZWwgbWFpbGluZyBsaXN0Cndpbi1wdi1kZXZl
bEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxt
YW4vbGlzdGluZm8vd2luLXB2LWRldmVs

From win-pv-devel-bounces@lists.xenproject.org Wed May 23 11:11:00 2018
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 23 May 2018 11:11:00 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1fLRfW-0000Tc-N0; Wed, 23 May 2018 11:10:58 +0000
Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <srs0=nzqw=ik=dingwall.me.uk=james@srs-us1.protection.inumbo.net>)
 id 1fLRHf-0006mr-Gh
 for win-pv-devel@lists.xenproject.org; Wed, 23 May 2018 10:46:19 +0000
X-Inumbo-ID: 3fea260e-5e76-11e8-9728-bc764e045a96
Received: from know-smtprelay-omc-9.server.virginmedia.net (unknown
 [80.0.253.73]) by us1-rack-dfw2.inumbo.com (Halon) with ESMTPS
 id 3fea260e-5e76-11e8-9728-bc764e045a96;
 Wed, 23 May 2018 12:44:22 +0200 (CEST)
Received: from dingwall.me.uk ([82.47.84.47]) by cmsmtp with ESMTP
 id LRHYftwGxfU1xLRHYfX8Tk; Wed, 23 May 2018 11:46:13 +0100
X-Originating-IP: [82.47.84.47]
X-Authenticated-User: 
X-Spam: 0
X-Authority: v=2.3 cv=OoZhNR3t c=1 sm=1 tr=0 a=0bfgdX8EJi0Cr9X0x0jFDA==:117
 a=0bfgdX8EJi0Cr9X0x0jFDA==:17 a=kj9zAlcOel0A:10 a=VUJBJC2UJ8kA:10
 a=wpLg_oTqyFdXFE0Q4y0A:9 a=CjuIK1q_8ugA:10
Received: (qmail 10685 invoked from network); 23 May 2018 10:46:11 -0000
Received: from behemoth.dingwall.me.uk (192.168.1.5)
 by mail0.xen.dingwall.me.uk with SMTP; 23 May 2018 10:46:11 -0000
Received: by behemoth.dingwall.me.uk (Postfix, from userid 1000)
 id 92B1CD08C20; Wed, 23 May 2018 11:46:11 +0100 (BST)
Date: Wed, 23 May 2018 11:46:11 +0100
From: James Dingwall <james-xen@dingwall.me.uk>
To: win-pv-devel@lists.xenproject.org
Message-ID: <20180523104611.GA160637@dingwall.me.uk>
References: <20180522161231.GA46399@dingwall.me.uk>
MIME-Version: 1.0
Content-Disposition: inline
In-Reply-To: <20180522161231.GA46399@dingwall.me.uk>
User-Agent: Mutt/1.9.4 (2018-02-28)
X-CMAE-Envelope: MS4wfC1RWTF9sihFY1R/pf+9TrA0FVIyN8K8K985KvppndxhUa2IrJ0V2xcPUmPXN94/GzuuQdPZMOPENRTFVhNm1LTso8QJmt2j38fTqYqp++CWITQt/vMJ
 soPEnhuXl/wFqtrvrEBVlIPuULSweSpuljqEncsrdDNz/CoEuzEWmZxg8GoTFQDOUjDrYif2/E/4fA==
X-Mailman-Approved-At: Wed, 23 May 2018 11:10:56 +0000
Subject: Re: [win-pv-devel] poor winpv performance with iommu=on + disk
 driver domain
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>

T24gVHVlLCBNYXkgMjIsIDIwMTggYXQgMDU6MTI6MzFQTSArMDEwMCwgSmFtZXMgRGluZ3dhbGwg
d3JvdGU6Cj4gSSBkaWQgc29tZSB0cmFjaW5nIGluIHRoZSBkaXNrIGRyaXZlciBkb21haW4gZm9y
IHRoZSBibG9jayBiYWNrIGRyaXZlcjoKPiAKPiBjZCAvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5n
Cj4gZWNobyBmdW5jdGlvbl9ncmFwaCA+IGN1cnJlbnRfdHJhY2VyCj4gZWNobyAnOm1vZDp4ZW5f
YmxrYmFjaycgPiBzZXRfZnRyYWNlX2ZpbHRlcgo+IGVjaG8gcGlkX29mX2JsYmFja193b3JrZXIg
PiBzZXRfZnRyYWNlX3BpZAo+IAo+IEZvciBXaW5QViB0aGVyZSBhcmUgc29tZSB2ZXJ5IGxvbmcg
cGVyaW9kcyBhdCB0aGUgZW5kIG9mIHNvbWUgCj4gb3BlcmF0aW9ucyB3aGljaCBhcmUgbm90IHNl
ZW4gd2hlbiB0cmFjaW5nIHdpdGggYSBMaW51eCBndWVzdCwgc29tZSAKPiBwYXJ0cyBvZiB0aGUg
Y2FwdHVyZWQgdHJhY2VzIGJlbG93LiAgSSBhc3N1bWUgdGhhdCBzb21ldGhpbmcgZXh0cmEgaXMg
Cj4gaGFwcGVuaW5nIHdpdGggV2luUFYgZHVlIHRvIHRoZSBleHRyYSB7fSBzZXQgYWZ0ZXIgeGVu
X2Jsa2JrX21hcCAKPiBbeGVuX2Jsa2JhY2tdKCkuCgpCYXNlZCBvbiB0aGUgdHJhY2VzIEkgaGFk
IGEgbG9vayBhdCB0aGUgYmxrYmFjayBkcml2ZXIgc291cmNlIGFuZCBpdCBoYXMgCmEgY29kZSBw
YXRoIGluIHhlbl9ibGtia19tYXAgd2hpY2ggaXMgY29uZGl0aW9uYWwgb24gcGVyc2lzdGVudC1n
cmFudHMgCmJlaW5nIGVuYWJsZWQuICBXaGVuIGEgZnJvbnRlbmQgZGV2aWNlIGlzIGNvbm5lY3Rl
ZCB0aGUgYmFja2VuZCBsb2dzIHRoZSAKZm9sbG93aW5nIG1lc3NhZ2VzOgoKTGludXg6IGlvbW11
PW9mZi9vbgoKTWF5IDIzIDEwOjM3OjAwIHpkaXNrZGQwMDAwLTAwNjMtMDAtMDAga2VybmVsOiBb
ICA1NzIuODMwNTcxXSAKeGVuLWJsa2JhY2s6IHJpbmctcGFnZXM6MSwgZXZlbnQtY2hhbm5lbCAx
OSwgcHJvdG9jb2wgMSAoeDg2XzY0LWFiaSkgCnBlcnNpc3RlbnQgZ3JhbnRzCgpXaW5QVjogaW9t
bXU9b2ZmL29uCgpNYXkgMjMgMTA6NDA6NTAgemRpc2tkZDAwMDAtMDA2My0wMC0wMCBrZXJuZWw6
IFsgIDgwMi4zNjI1MTFdIAp4ZW4tYmxrYmFjazogcmluZy1wYWdlczoxLCBldmVudC1jaGFubmVs
IDUsIHByb3RvY29sIDEgKHg4Nl82NC1hYmkpIApNYXkgMjMgMTA6NDA6NTAgemRpc2tkZDAwMDAt
MDA2My0wMC0wMCBrZXJuZWw6IFsgIDgwMi41MTI3OTBdIAp4ZW4tYmxrYmFjazogcmluZy1wYWdl
czoxLCBldmVudC1jaGFubmVsIDYsIHByb3RvY29sIDEgKHg4Nl82NC1hYmkpIApNYXkgMjMgMTA6
NDA6NTAgemRpc2tkZDAwMDAtMDA2My0wMC0wMCBrZXJuZWw6IFsgIDgwMi41Mzc2OTldIAp4ZW4t
YmxrYmFjazogcmluZy1wYWdlczoxLCBldmVudC1jaGFubmVsIDcsIHByb3RvY29sIDEgKHg4Nl82
NC1hYmkpCgpTbyBpdCBzZWVtcyB0aGF0IG5vdCB1c2luZyBwZXJzaXN0ZW50IGdyYW50cyBzZXZl
cmVseSBpbXBhY3RzIHRoZSAKcGVyZm9ybWFuY2Ugd2hlbiB0aGUgZGlzayBjb250cm9sbGVyIGlz
IHBhc3NlZCB0aHJvdWdoIHRvIGEgZHJpdmVyIApkb21haW4uICAoVGhlIHNhbWUgaXNzdWUgaXMg
bm90IHNlZW4gaWYgdGhlIGRpc2sgY29udHJvbGxlciBpcyBpbiB0aGUgCmRvbTAuKSAgTG9va2lu
ZyBhdCB0aGUgeGVudmJkIHNvdXJjZSBjb2RlIGl0IHNlZW1zIHRoZXJlIGlzIHNvbWUgCmF3YXJl
bmVzcyBvZiBmZWF0dXJlLXBlcnNpc3RlbnQgYnV0IEkgZG9uJ3Qga25vdyBpZiBpdCBpcyBmdWxs
eSAKc3VwcG9ydGVkLCBhbnkgYW5zd2VycyBpbiB0aGF0IHJlZ2FyZD8KClRoYW5rcywKSmFtZXMK
Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCndpbi1wdi1k
ZXZlbCBtYWlsaW5nIGxpc3QKd2luLXB2LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBz
Oi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby93aW4tcHYtZGV2ZWw=

From win-pv-devel-bounces@lists.xenproject.org Wed May 23 12:48:32 2018
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 23 May 2018 12:48:32 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1fLTBu-0007dx-GK; Wed, 23 May 2018 12:48:30 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <srs0=nubl=ik=citrix.com=prvs=6742ed110=paul.durrant@srs-us1.protection.inumbo.net>)
 id 1fLTBt-0007dr-7A
 for win-pv-devel@lists.xenproject.org; Wed, 23 May 2018 12:48:29 +0000
X-Inumbo-ID: 167bb88e-5e88-11e8-8249-2fda3a446a53
Received: from SMTP.EU.CITRIX.COM (unknown [185.25.65.24])
 by us1-amaz-eas1.inumbo.com (Halon) with ESMTPS
 id 167bb88e-5e88-11e8-8249-2fda3a446a53;
 Wed, 23 May 2018 12:52:02 +0000 (UTC)
X-IronPort-AV: E=Sophos;i="5.49,433,1520899200"; d="scan'208";a="73586397"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: 'James Dingwall' <james-xen@dingwall.me.uk>,
 "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] poor winpv performance with iommu=on + disk
 driver domain
Thread-Index: AQHT8jKLSrFn2roN50yLrkq+lrHeg6Q9QE6Q
Date: Wed, 23 May 2018 12:48:26 +0000
Message-ID: <489a8c70541244dcb4bb71c4b461c904@AMSPEX02CL03.citrite.net>
References: <20180522161231.GA46399@dingwall.me.uk>
In-Reply-To: <20180522161231.GA46399@dingwall.me.uk>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-ms-exchange-transport-fromentityheader: Hosted
MIME-Version: 1.0
Subject: Re: [win-pv-devel] poor winpv performance with iommu=on + disk
 driver domain
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>

PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiB3aW4tcHYtZGV2ZWwgW21haWx0
bzp3aW4tcHYtZGV2ZWwtYm91bmNlc0BsaXN0cy54ZW5wcm9qZWN0Lm9yZ10gT24NCj4gQmVoYWxm
IE9mIEphbWVzIERpbmd3YWxsDQo+IFNlbnQ6IDIyIE1heSAyMDE4IDEyOjEzDQo+IFRvOiB3aW4t
cHYtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcNCj4gU3ViamVjdDogW3dpbi1wdi1kZXZlbF0g
cG9vciB3aW5wdiBwZXJmb3JtYW5jZSB3aXRoIGlvbW11PW9uICsgZGlzaw0KPiBkcml2ZXIgZG9t
YWluDQo+IA0KPiBIaSwNCj4gDQo+IEkgcmFpc2VkIHRoaXMgaXNzdWUgd2l0aCBzb21lIG5vbiBz
cGVjaWZpYyBkZXRhaWxzIGJlZm9yZSBvbiB4ZW4tZGV2ZWw6DQo+IGh0dHBzOi8vbGlzdHMueGVu
cHJvamVjdC5vcmcvYXJjaGl2ZXMvaHRtbC94ZW4tZGV2ZWwvMjAxNy0NCj4gMTIvbXNnMDAyNjIu
aHRtbA0KPiANCj4gSW4gc3VtbWFyeSB3aGVuIGVuYWJsaW5nIHRoZSBpb21tdSB3ZSBub3RlIGEg
c2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgaW4NCj4gdGhlIGRpc2sgcGVyZm9ybWFuY2Ugb2YgV2lu
ZG93cyBndWVzdHMgcnVubmluZyB3aXRoIFdpblBWIGRyaXZlcnMuDQo+IA0KPiBTaW5jZSB0aGUg
b3JpZ2luYWwgcmVwb3J0IHdlIGhhdmUgZG9uZSBzb21lIG1vcmUgaW52ZXN0aWdhdGlvbiBhbmQg
bm93DQo+IHNlZW0gdG8gaGF2ZSBpc29sYXRlZCB0aGUgcGVyZm9ybWFuY2UgaXNzdWUgbm90ZWQg
aW4gb3VyIEhWTSBndWVzdHMgYXMNCj4gYW4gYWR2ZXJzZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRo
ZSBXaW5QViBkcml2ZXJzIGFuZCB0aGUgYmxrYmFjayBkcml2ZXINCj4gaW4gdGhlIGRpc2sgZHJp
dmVyIGRvbWFpbi4gIFRoaXMgaXMgb2JzZXJ2ZWQgYXMgc2xvdyBkaXNrIHNwZWVkIGluIHRoZQ0K
PiBndWVzdCBhbmQgaGlnaCBjcHUgdXNhZ2Ugb2YgdGhlIGNvcnJlc3BvbmRpbmcgYmxrYmFjay48
ZG9taWQ+LjxkaXNrPg0KPiBwcm9jZXNzIGluIHRoZSBiYWNrZW5kLiAgSWYgdGhlIEhWTSBpcyBj
b25maWd1cmVkIHRvIG5ldHdvcmsgYm9vdCBhIFBYRQ0KPiBMaW51eCBpbWFnZSB0aGVyZSBpcyBu
byBkaXNrIHBlcmZvcm1hbmNlIGlzc3VlLg0KPiANCj4gV2UgaGF2ZSB1cGRhdGVkIG91ciBzdGFj
ayB0byBiZSBiYXNlZCBvbiBYZW4gNC44LjMsIGEgY3VzdG9tIGNvbXBpbGUgb2YNCj4gdGhlIFVi
dW50dSBrZXJuZWwgdGFnIFVidW50dS1sdHMtNC40LjAtMTI3LjE1M18xNC4wNC4xIGFuZCBaRlMg
MC43LjkuDQo+IFdlIGhhdmUgb3VyIG93biBidWlsZCBvZiB0aGUgV2luUFYgZHJpdmVycyB0b28g
YnV0IHdlIHNlZSB0aGUgc2FtZSB3aGVuDQo+IHVzaW5nIHRoZSA4LjIuMSByZWxlYXNlLg0KPiAN
Cj4gSSBkaWQgc29tZSB0cmFjaW5nIGluIHRoZSBkaXNrIGRyaXZlciBkb21haW4gZm9yIHRoZSBi
bG9jayBiYWNrIGRyaXZlcjoNCj4gDQo+IGNkIC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcNCj4g
ZWNobyBmdW5jdGlvbl9ncmFwaCA+IGN1cnJlbnRfdHJhY2VyDQo+IGVjaG8gJzptb2Q6eGVuX2Js
a2JhY2snID4gc2V0X2Z0cmFjZV9maWx0ZXINCj4gZWNobyBwaWRfb2ZfYmxiYWNrX3dvcmtlciA+
IHNldF9mdHJhY2VfcGlkDQo+IA0KPiBGb3IgV2luUFYgdGhlcmUgYXJlIHNvbWUgdmVyeSBsb25n
IHBlcmlvZHMgYXQgdGhlIGVuZCBvZiBzb21lDQo+IG9wZXJhdGlvbnMgd2hpY2ggYXJlIG5vdCBz
ZWVuIHdoZW4gdHJhY2luZyB3aXRoIGEgTGludXggZ3Vlc3QsIHNvbWUNCj4gcGFydHMgb2YgdGhl
IGNhcHR1cmVkIHRyYWNlcyBiZWxvdy4gIEkgYXNzdW1lIHRoYXQgc29tZXRoaW5nIGV4dHJhIGlz
DQo+IGhhcHBlbmluZyB3aXRoIFdpblBWIGR1ZSB0byB0aGUgZXh0cmEge30gc2V0IGFmdGVyIHhl
bl9ibGtia19tYXANCj4gW3hlbl9ibGtiYWNrXSgpLg0KPiANCj4gSWYgdGhlcmUgYXJlIGFueSBz
dWdnZXN0aW9ucyBvbiBob3cgdG8gZnVydGhlciBkZWJ1ZyB0aGlzLCBvcHRpb25zIHRvDQo+IHRy
eSBvciBpZiBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBlbnZpcm9ubWVudCBpcyByZXF1aXJl
ZCBJJ2QgYmUNCj4gaGFwcHkgdG8gZ2l2ZSBhbnl0aGluZyBhIGdvLg0KPg0KDQpIaSBKYW1lcywN
Cg0KICBJIGhhdmUgYSBodW5jaCB0aGF0IHlvdSBtYXkgYmUgc3VmZmVyaW5nIGZybSBhIFhlbiAn
ZmVhdHVyZScuLi4NCg0KICBXaGVuIHRoZXJlIGlzIG5vIGhhcmR3YXJlIHBhc3NlZCB0aHJvdWdo
IHRvIGFuIEhWTSBkb21haW4sIFhlbiBvdmVycmlkZXMgdGhlIG1lbW9yeSBjYWNoZWFiaWxpdHkg
b2YgTU1JTyByYW5nZXMuLi4gYmVjYXVzZSBpdCAna25vd3MnIHRoYXQgYWxsIGgvdyBpcyBlbXVs
YXRlZCBhbmQgdGhlcmVmb3JlIGFueXRoaW5nIG1hcHBlZCBpbiB0aGUgTU1JTyByYW5nZXMgaXMg
b25seSBldmVyIGdvaW5nIHRvIGJlIFJBTSBhbmQgY2FuIHRoZXJlZm9yZSBhY2Nlc3NlcyBjYW4g
YmUgY2FjaGVkLg0KICBIb3dldmVyLCBhcyBzb29uIGFzIHlvdSBwYXNzIHRocm91Z2ggaC93IHRv
IGEgZG9tYWluIHRoZW4gWGVuIGNhbiBubyBsb25nZXIgdXNlIHRoaXMgJ29wdGltaXphdGlvbicu
IFVuZm9ydHVuYXRlbHkgdGhpcyBtZWFucyB0aGF0IGFjY2Vzc2VzIHRvIHRoZSBYZW4gcGxhdGZv
cm0gZGV2aWNlJ3MgTU1JTyBCQVIgYXJlIG5vIGxvbmdlciBjYWNoZWQgYW5kIGl0IGp1c3QgaGFw
cGVucyB0aGF0IFBWIGRyaXZlcnMgKGJvdGggTGludXggYW5kIFdpbmRvd3MpIHVzZSB0aGlzIEJB
UiB0byBtYXAgdGhlIGd1ZXN0IGdyYW50IHRhYmxlcy4gVGh1cyBldmVyeSBhY2Nlc3MgdGhlIGd1
ZXN0IFBWIGRyaXZlcnMgbWFrZSB0byB0aGUgZ3JhbnQgdGFibGUgaXMgdW5jYWNoZWQgYW5kIHRo
dXMgeW91IHdpbGwgc3VmZmVyIGEgc3Vic3RhbnRpYWwgc2xvdy1kb3duIGluIHRoZSBkb21haW4u
DQoNCiAgWW91ciByZXN1bHRzIHdpdGggcGVyc2lzdGVudCBncmFudHMgaXMgY29uc2lzdGVudCB3
aXRoIG15IGh1bmNoIGJlY2F1c2UsIG9mIGNvdXJzZSwgdXNpbmcgcGVyc2lzdGVudCBncmFudHMg
bWVhbnMgc3Vic3RhbnRpYWxseSBmZXdlciBhY2Nlc3MgdG8gZ3JhbnQgdGFibGVzIGluIHRoZSBi
b3RoIHRoZSBmcm9udGVuZCBhbmQgdGhlIGJhY2tlbmQuDQoNCiAgSSB0aGluayB0aGF0IHRoZXJl
IGhhdmUgYmVlbiByZWNlbnQgcGF0Y2hlcyB0byB0aGUgTGludXggUFYgY29kZSB0byB1c2UgYSBi
YWxsb29uZWQgbWVtb3J5IHRvIGhvc3QgdGhlIGdyYW50IHRhYmxlcyBpbnN0ZWFkIChidXQgSSBj
b3VsZCBiZSB3cm9uZykgYW5kIEkgaGF2ZSBkb25lIHNpbWlsYXIgaW4gdGhlIGxhdGVzdCBXaW5k
b3dzIHhlbmJ1cyBkcml2ZXIuIFlvdSBtYXkgYWxzbyBiZSBhYmxlIHRvIHdvcmsgYXJvdW5kIHRo
ZSBwcm9ibGVtIGJ5IGFkZGluZyB0aGlzIGxpdHRsZSBoYWNrIHRvIHlvdXIgWGVuOg0KDQpkaWZm
IC0tZ2l0IGEveGVuL2FyY2gveDg2L2h2bS9tdHJyLmMgYi94ZW4vYXJjaC94ODYvaHZtL210cnIu
Yw0KaW5kZXggM2M1MTI0NC4uZDAxMjZiNCAxMDA2NDQNCi0tLSBhL3hlbi9hcmNoL3g4Ni9odm0v
bXRyci5jDQorKysgYi94ZW4vYXJjaC94ODYvaHZtL210cnIuYw0KQEAgLTgxMSw3ICs4MTEsOCBA
QCBpbnQgZXB0ZV9nZXRfZW50cnlfZW10KHN0cnVjdCBkb21haW4gKmQsIHVuc2lnbmVkIGxvbmcg
Z2ZuLCBtZm5fdCBtZm4sDQogICAgICAgICByZXR1cm4gTVRSUl9UWVBFX1VOQ0FDSEFCTEU7DQog
ICAgIH0NCiANCi0gICAgaWYgKCAhbmVlZF9pb21tdShkKSAmJiAhY2FjaGVfZmx1c2hfcGVybWl0
dGVkKGQpICkNCisgICAgaWYgKCAoIW5lZWRfaW9tbXUoZCkgJiYgIWNhY2hlX2ZsdXNoX3Blcm1p
dHRlZChkKSkgfHwNCisgICAgICAgICBpc194ZW5faGVhcF9tZm4obWZuX3gobWZuKSkgKQ0KICAg
ICB7DQogICAgICAgICAqaXBhdCA9IDE7DQogICAgICAgICByZXR1cm4gTVRSUl9UWVBFX1dSQkFD
SzsgDQogDQogIENoZWVycywNCg0KICAgIFBhdWwNCg0KPiBUaGFua3MsDQo+IEphbWVzDQo+IA0K
PiANCj4gV2luUFYgdHJhY2Ugc2FtcGxlIChpb21tdT1vbik6DQo+IA0KPiAgMikgICAgICAgICAg
ICAgICB8ICAgIGRpc3BhdGNoX3J3X2Jsb2NrX2lvIFt4ZW5fYmxrYmFja10oKSB7DQo+ICAyKSAg
ICAgICAgICAgICAgIHwgICAgICB4ZW5fYmxrYmtfbWFwIFt4ZW5fYmxrYmFja10oKSB7DQo+ICAy
KSAhIDIwOC4yMjkgdXMgIHwgICAgICB9DQo+ICAyKSAgICAgICAgICAgICAgIHwgICAgICB4ZW5f
YmxrYmtfdW5tYXAgW3hlbl9ibGtiYWNrXSgpIHsNCj4gIDIpICAgMC4yMDggdXMgICAgfCAgICAg
ICAgeGVuX2Jsa2JrX3VubWFwX3ByZXBhcmUgW3hlbl9ibGtiYWNrXSgpOw0KPiAgMikgISAxNjgu
NDA0IHVzICB8ICAgICAgfQ0KPiAgMikgICAwLjQ3OCB1cyAgICB8ICAgICAgeGVuX3ZiZF90cmFu
c2xhdGUgW3hlbl9ibGtiYWNrXSgpOw0KPiAgMikgICAgICAgICAgICAgICB8ICAgICAgeGVuX2Js
a2JrX21hcCBbeGVuX2Jsa2JhY2tdKCkgew0KPiAgMikgKiAyNjMwNi44NiB1cyB8ICAgICAgfQ0K
PiAgMikgKiAyNjc3My43NiB1cyB8ICAgIH0NCj4gIDIpICAgICAgICAgICAgICAgfCAgICBkaXNw
YXRjaF9yd19ibG9ja19pbyBbeGVuX2Jsa2JhY2tdKCkgew0KPiAgMikgKyA5MC4yOTcgdXMgICB8
ICAgICAgeGVuX2Jsa2JrX21hcCBbeGVuX2Jsa2JhY2tdKCk7DQo+ICAyKSAgICAgICAgICAgICAg
IHwgICAgICB4ZW5fYmxrYmtfdW5tYXAgW3hlbl9ibGtiYWNrXSgpIHsNCj4gIDIpICAgMC4xOTYg
dXMgICAgfCAgICAgICAgeGVuX2Jsa2JrX3VubWFwX3ByZXBhcmUgW3hlbl9ibGtiYWNrXSgpOw0K
PiAgMikgKyA5MC4xNjAgdXMgICB8ICAgICAgfQ0KPiAgMikgICAwLjI4NiB1cyAgICB8ICAgICAg
eGVuX3ZiZF90cmFuc2xhdGUgW3hlbl9ibGtiYWNrXSgpOw0KPiAgMikgICAgICAgICAgICAgICB8
ICAgICAgeGVuX2Jsa2JrX21hcCBbeGVuX2Jsa2JhY2tdKCkgew0KPiAgMikgKiAyMTA2Mi41OSB1
cyB8ICAgICAgfQ0KPiAgMikgKiAyMTMxNC4yNiB1cyB8ICAgIH0NCj4gIDMpIEAgMjAzODQ2LjIg
dXMgfCAgfSAvKiBfX2RvX2Jsb2NrX2lvX29wIFt4ZW5fYmxrYmFja10gKi8NCj4gIDMpICAgICAg
ICAgICAgICAgfCAgX19kb19ibG9ja19pb19vcCBbeGVuX2Jsa2JhY2tdKCkgew0KPiAgMykgICAg
ICAgICAgICAgICB8ICAgIGRpc3BhdGNoX3J3X2Jsb2NrX2lvIFt4ZW5fYmxrYmFja10oKSB7DQo+
ICAzKSAhIDE2OS41NDEgdXMgIHwgICAgICB4ZW5fYmxrYmtfbWFwIFt4ZW5fYmxrYmFja10oKTsN
Cj4gIDMpICAgICAgICAgICAgICAgfCAgICAgIHhlbl9ibGtia191bm1hcCBbeGVuX2Jsa2JhY2td
KCkgew0KPiAgMykgICAwLjE3MyB1cyAgICB8ICAgICAgICB4ZW5fYmxrYmtfdW5tYXBfcHJlcGFy
ZSBbeGVuX2Jsa2JhY2tdKCk7DQo+ICAzKSAhIDIyMS43MDEgdXMgIHwgICAgICB9DQo+ICAzKSAg
IDAuNDcxIHVzICAgIHwgICAgICB4ZW5fdmJkX3RyYW5zbGF0ZSBbeGVuX2Jsa2JhY2tdKCk7DQo+
ICAzKSAgICAgICAgICAgICAgIHwgICAgICB4ZW5fYmxrYmtfbWFwIFt4ZW5fYmxrYmFja10oKSB7
DQo+ICAzKSArIDE1LjA1MCB1cyAgIHwgICAgICAgIHhlbl9ibGtpZl9iZV9pbnQgW3hlbl9ibGti
YWNrXSgpOw0KPiAgMykgKiAyNTQ2Ny43MCB1cyB8ICAgICAgfQ0KPiAgMykgKiAyNTkyMi42OCB1
cyB8ICAgIH0NCj4gIDMpICAgICAgICAgICAgICAgfCAgICBkaXNwYXRjaF9yd19ibG9ja19pbyBb
eGVuX2Jsa2JhY2tdKCkgew0KPiAgMykgICAwLjI1MiB1cyAgICB8ICAgICAgeGVuX3ZiZF90cmFu
c2xhdGUgW3hlbl9ibGtiYWNrXSgpOw0KPiAgMykgICAgICAgICAgICAgICB8ICAgICAgeGVuX2Js
a2JrX21hcCBbeGVuX2Jsa2JhY2tdKCkgew0KPiAgMykgISA1MzMuODY2IHVzICB8ICAgICAgfQ0K
PiAgMykgISA1NTYuMzQ0IHVzICB8ICAgIH0NCj4gIDMpICAgICAgICAgICAgICAgfCAgICBkaXNw
YXRjaF9yd19ibG9ja19pbyBbeGVuX2Jsa2JhY2tdKCkgew0KPiAgMykgKyA4NC40MDcgdXMgICB8
ICAgICAgeGVuX2Jsa2JrX21hcCBbeGVuX2Jsa2JhY2tdKCk7DQo+ICAzKSAgICAgICAgICAgICAg
IHwgICAgICB4ZW5fYmxrYmtfdW5tYXAgW3hlbl9ibGtiYWNrXSgpIHsNCj4gIDMpICAgMC4yMzkg
dXMgICAgfCAgICAgICAgeGVuX2Jsa2JrX3VubWFwX3ByZXBhcmUgW3hlbl9ibGtiYWNrXSgpOw0K
PiAgMykgISAxMzUuODY5IHVzICB8ICAgICAgfQ0KPiAgMykgICAwLjMxMCB1cyAgICB8ICAgICAg
eGVuX3ZiZF90cmFuc2xhdGUgW3hlbl9ibGtiYWNrXSgpOw0KPiAgMykgICAgICAgICAgICAgICB8
ICAgICAgeGVuX2Jsa2JrX21hcCBbeGVuX2Jsa2JhY2tdKCkgew0KPiAgMykgIyAyODg2LjI3MCB1
cyB8ICAgICAgfQ0KPiAgMykgIyAzMTQ2Ljg4MyB1cyB8ICAgIH0NCj4gDQo+IA0KPiANCj4gTGlu
dXggdHJhY2Ugc2FtcGxlIChpb21tdT1vbik6DQo+IA0KPiAgMikgICAgICAgICAgICAgICB8ICAg
IGRpc3BhdGNoX3J3X2Jsb2NrX2lvIFt4ZW5fYmxrYmFja10oKSB7DQo+ICAyKSAgIDEuMjg4IHVz
ICAgIHwgICAgICB4ZW5fYmxrYmtfbWFwIFt4ZW5fYmxrYmFja10oKTsNCj4gIDIpICAgICAgICAg
ICAgICAgfCAgICAgIHhlbl9ibGtia191bm1hcCBbeGVuX2Jsa2JhY2tdKCkgew0KPiAgMikgICAw
LjEwOCB1cyAgICB8ICAgICAgICB4ZW5fYmxrYmtfdW5tYXBfcHJlcGFyZSBbeGVuX2Jsa2JhY2td
KCk7DQo+ICAyKSAgIDAuNzcwIHVzICAgIHwgICAgICB9DQo+ICAyKSAgIDAuMTE3IHVzICAgIHwg
ICAgICB4ZW5fdmJkX3RyYW5zbGF0ZSBbeGVuX2Jsa2JhY2tdKCk7DQo+ICAyKSArIDEzLjUwMCB1
cyAgIHwgICAgICB4ZW5fYmxrYmtfbWFwIFt4ZW5fYmxrYmFja10oKTsNCj4gIDIpICsgMjMuOTM4
IHVzICAgfCAgICB9DQo+ICAyKSAgICAgICAgICAgICAgIHwgICAgZGlzcGF0Y2hfcndfYmxvY2tf
aW8gW3hlbl9ibGtiYWNrXSgpIHsNCj4gIDIpICAgMS4zNjIgdXMgICAgfCAgICAgIHhlbl9ibGti
a19tYXAgW3hlbl9ibGtiYWNrXSgpOw0KPiAgMikgICAgICAgICAgICAgICB8ICAgICAgeGVuX2Js
a2JrX3VubWFwIFt4ZW5fYmxrYmFja10oKSB7DQo+ICAyKSAgIDAuMTMxIHVzICAgIHwgICAgICAg
IHhlbl9ibGtia191bm1hcF9wcmVwYXJlIFt4ZW5fYmxrYmFja10oKTsNCj4gIDIpICAgMC44ODgg
dXMgICAgfCAgICAgIH0NCj4gIDIpICAgMC4xMjAgdXMgICAgfCAgICAgIHhlbl92YmRfdHJhbnNs
YXRlIFt4ZW5fYmxrYmFja10oKTsNCj4gIDIpICsgMTEuNDkyIHVzICAgfCAgICAgIHhlbl9ibGti
a19tYXAgW3hlbl9ibGtiYWNrXSgpOw0KPiAgMikgKyAyNC4yMzYgdXMgICB8ICAgIH0NCj4gIDIp
ICAgICAgICAgICAgICAgfCAgICBkaXNwYXRjaF9yd19ibG9ja19pbyBbeGVuX2Jsa2JhY2tdKCkg
ew0KPiAgMikgICAwLjQzOSB1cyAgICB8ICAgICAgeGVuX2Jsa2JrX21hcCBbeGVuX2Jsa2JhY2td
KCk7DQo+ICAyKSAgICAgICAgICAgICAgIHwgICAgICB4ZW5fYmxrYmtfdW5tYXAgW3hlbl9ibGti
YWNrXSgpIHsNCj4gIDIpICAgMC4xMTcgdXMgICAgfCAgICAgICAgeGVuX2Jsa2JrX3VubWFwX3By
ZXBhcmUgW3hlbl9ibGtiYWNrXSgpOw0KPiAgMikgICAxLjI3MyB1cyAgICB8ICAgICAgfQ0KPiAg
MikgICAwLjIyNiB1cyAgICB8ICAgICAgeGVuX3ZiZF90cmFuc2xhdGUgW3hlbl9ibGtiYWNrXSgp
Ow0KPiAgMikgICA3Ljg2NyB1cyAgICB8ICAgICAgeGVuX2Jsa2JrX21hcCBbeGVuX2Jsa2JhY2td
KCk7DQo+ICAyKSArIDE3LjMyOCB1cyAgIHwgICAgfQ0KPiAgMikgICAgICAgICAgICAgICB8ICAg
IGRpc3BhdGNoX3J3X2Jsb2NrX2lvIFt4ZW5fYmxrYmFja10oKSB7DQo+ICAyKSAgIDAuNTIxIHVz
ICAgIHwgICAgICB4ZW5fYmxrYmtfbWFwIFt4ZW5fYmxrYmFja10oKTsNCj4gIDIpICAgICAgICAg
ICAgICAgfCAgICAgIHhlbl9ibGtia191bm1hcCBbeGVuX2Jsa2JhY2tdKCkgew0KPiAgMikgICAw
LjExMSB1cyAgICB8ICAgICAgICB4ZW5fYmxrYmtfdW5tYXBfcHJlcGFyZSBbeGVuX2Jsa2JhY2td
KCk7DQo+ICAyKSAgIDAuNjIwIHVzICAgIHwgICAgICB9DQo+ICAyKSAgIDAuMDkzIHVzICAgIHwg
ICAgICB4ZW5fdmJkX3RyYW5zbGF0ZSBbeGVuX2Jsa2JhY2tdKCk7DQo+ICAyKSAgIDcuNjg5IHVz
ICAgIHwgICAgICB4ZW5fYmxrYmtfbWFwIFt4ZW5fYmxrYmFja10oKTsNCj4gIDIpICsgMTQuMzY4
IHVzICAgfCAgICB9DQo+IA0KPiANCj4gDQo+IFdpblBWIHRyYWNlIHNhbXBsZSAoaW9tbXU9b2Zm
KToNCj4gDQo+ICAxKSAgICAgICAgICAgICAgIHwgICAgZGlzcGF0Y2hfcndfYmxvY2tfaW8gW3hl
bl9ibGtiYWNrXSgpIHsNCj4gIDEpICAgMC4zMDggdXMgICAgfCAgICAgIHhlbl92YmRfdHJhbnNs
YXRlIFt4ZW5fYmxrYmFja10oKTsNCj4gIDEpICAgNC44NTUgdXMgICAgfCAgICAgIHhlbl9ibGti
a19tYXAgW3hlbl9ibGtiYWNrXSgpOw0KPiAgMSkgKyAxNS45MTUgdXMgICB8ICAgIH0NCj4gIDEp
ICAgICAgICAgICAgICAgfCAgICBkaXNwYXRjaF9yd19ibG9ja19pbyBbeGVuX2Jsa2JhY2tdKCkg
ew0KPiAgMSkgICAwLjExMyB1cyAgICB8ICAgICAgeGVuX3ZiZF90cmFuc2xhdGUgW3hlbl9ibGti
YWNrXSgpOw0KPiAgMSkgICAxLjkwMiB1cyAgICB8ICAgICAgeGVuX2Jsa2JrX21hcCBbeGVuX2Js
a2JhY2tdKCk7DQo+ICAxKSAgIDcuMjc4IHVzICAgIHwgICAgfQ0KPiAgMSkgISAyODMuODAxIHVz
ICB8ICB9DQo+ICAxKSAgICAgICAgICAgICAgIHwgIF9fZG9fYmxvY2tfaW9fb3AgW3hlbl9ibGti
YWNrXSgpIHsNCj4gIDEpICAgICAgICAgICAgICAgfCAgICBkaXNwYXRjaF9yd19ibG9ja19pbyBb
eGVuX2Jsa2JhY2tdKCkgew0KPiAgMSkgICAwLjE2NyB1cyAgICB8ICAgICAgeGVuX3ZiZF90cmFu
c2xhdGUgW3hlbl9ibGtiYWNrXSgpOw0KPiAgMSkgICAyLjc4NiB1cyAgICB8ICAgICAgeGVuX2Js
a2JrX21hcCBbeGVuX2Jsa2JhY2tdKCk7DQo+ICAxKSAgIDkuNjM3IHVzICAgIHwgICAgfQ0KPiAg
MSkgKyA0MS42OTEgdXMgICB8ICB9DQo+ICAxKSAgICAgICAgICAgICAgIHwgIF9fZG9fYmxvY2tf
aW9fb3AgW3hlbl9ibGtiYWNrXSgpIHsNCj4gIDEpICAgICAgICAgICAgICAgfCAgICBkaXNwYXRj
aF9yd19ibG9ja19pbyBbeGVuX2Jsa2JhY2tdKCkgew0KPiAgMSkgKyAxMC41NjYgdXMgICB8ICAg
ICAgeGVuX2Jsa2JrX21hcCBbeGVuX2Jsa2JhY2tdKCk7DQo+ICAxKSAgICAgICAgICAgICAgIHwg
ICAgICB4ZW5fYmxrYmtfdW5tYXAgW3hlbl9ibGtiYWNrXSgpIHsNCj4gIDEpICAgMC4xOTUgdXMg
ICAgfCAgICAgICAgeGVuX2Jsa2JrX3VubWFwX3ByZXBhcmUgW3hlbl9ibGtiYWNrXSgpOw0KPiAg
MSkgICA0LjY5MSB1cyAgICB8ICAgICAgfQ0KPiAgMSkgICAwLjczNiB1cyAgICB8ICAgICAgeGVu
X3ZiZF90cmFuc2xhdGUgW3hlbl9ibGtiYWNrXSgpOw0KPiAgMSkgKyA1Ny44OTcgdXMgICB8ICAg
ICAgeGVuX2Jsa2JrX21hcCBbeGVuX2Jsa2JhY2tdKCk7DQo+ICAxKSArIDk0LjE4NiB1cyAgIHwg
ICAgfQ0KPiAgMSkgKyA5Ni42NTggdXMgICB8ICB9DQo+ICAyKSAgICAgICAgICAgICAgIHwgIF9f
ZG9fYmxvY2tfaW9fb3AgW3hlbl9ibGtiYWNrXSgpIHsNCj4gIDIpICAgICAgICAgICAgICAgfCAg
ICBkaXNwYXRjaF9yd19ibG9ja19pbyBbeGVuX2Jsa2JhY2tdKCkgew0KPiAgMikgICAwLjQ0MSB1
cyAgICB8ICAgICAgeGVuX3ZiZF90cmFuc2xhdGUgW3hlbl9ibGtiYWNrXSgpOw0KPiAgMikgICA4
LjY1NiB1cyAgICB8ICAgICAgeGVuX2Jsa2JrX21hcCBbeGVuX2Jsa2JhY2tdKCk7DQo+ICAyKSAr
IDE4Ljg4MSB1cyAgIHwgICAgfQ0KPiAgMikgKyA0Ni45NjEgdXMgICB8ICB9DQo+ICAyKSAgICAg
ICAgICAgICAgIHwgIF9fZG9fYmxvY2tfaW9fb3AgW3hlbl9ibGtiYWNrXSgpIHsNCj4gIDIpICAg
ICAgICAgICAgICAgfCAgICBkaXNwYXRjaF9yd19ibG9ja19pbyBbeGVuX2Jsa2JhY2tdKCkgew0K
PiAgMikgICAwLjQ5NSB1cyAgICB8ICAgICAgeGVuX3ZiZF90cmFuc2xhdGUgW3hlbl9ibGtiYWNr
XSgpOw0KPiAgMikgICA3LjYxNCB1cyAgICB8ICAgICAgeGVuX2Jsa2JrX21hcCBbeGVuX2Jsa2Jh
Y2tdKCk7DQo+ICAyKSArIDIzLjUxOCB1cyAgIHwgICAgfQ0KPiAgMikgKyAyNS45ODAgdXMgICB8
ICB9DQo+ICAyKSAgICAgICAgICAgICAgIHwgIF9fZG9fYmxvY2tfaW9fb3AgW3hlbl9ibGtiYWNr
XSgpIHsNCj4gIDIpICAgICAgICAgICAgICAgfCAgICBkaXNwYXRjaF9yd19ibG9ja19pbyBbeGVu
X2Jsa2JhY2tdKCkgew0KPiAgMikgICAwLjQ3OSB1cyAgICB8ICAgICAgeGVuX3ZiZF90cmFuc2xh
dGUgW3hlbl9ibGtiYWNrXSgpOw0KPiAgMikgICA1Ljg3MiB1cyAgICB8ICAgICAgeGVuX2Jsa2Jr
X21hcCBbeGVuX2Jsa2JhY2tdKCk7DQo+ICAyKSArIDE1LjgzMSB1cyAgIHwgICAgfQ0KPiAgMikg
KyAxOC41MjEgdXMgICB8ICB9DQo+ICAyKSAgICAgICAgICAgICAgIHwgIF9fZG9fYmxvY2tfaW9f
b3AgW3hlbl9ibGtiYWNrXSgpIHsNCj4gIDIpICAgICAgICAgICAgICAgfCAgICBkaXNwYXRjaF9y
d19ibG9ja19pbyBbeGVuX2Jsa2JhY2tdKCkgew0KPiAgMikgICAwLjQ3MyB1cyAgICB8ICAgICAg
eGVuX3ZiZF90cmFuc2xhdGUgW3hlbl9ibGtiYWNrXSgpOw0KPiAgMikgICA4LjcyNCB1cyAgICB8
ICAgICAgeGVuX2Jsa2JrX21hcCBbeGVuX2Jsa2JhY2tdKCk7DQo+ICAyKSArIDIzLjI3NSB1cyAg
IHwgICAgfQ0KPiAgMikgKyAyOS4zMzMgdXMgICB8ICB9DQo+IA0KPiANCj4gX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18NCj4gd2luLXB2LWRldmVsIG1haWxp
bmcgbGlzdA0KPiB3aW4tcHYtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcNCj4gaHR0cHM6Ly9s
aXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL3dpbi1wdi1kZXZlbA0KX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18Kd2luLXB2LWRldmVsIG1h
aWxpbmcgbGlzdAp3aW4tcHYtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0
cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL3dpbi1wdi1kZXZlbA==

From win-pv-devel-bounces@lists.xenproject.org Fri May 25 17:53:23 2018
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 25 May 2018 17:53:23 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1fMGu1-000375-LZ; Fri, 25 May 2018 17:53:21 +0000
Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <srs0=axo3=im=gmail.com=lars.kurth.xen@srs-us1.protection.inumbo.net>)
 id 1fMGu0-00036d-FD
 for win-pv-devel@lists.xenproject.org; Fri, 25 May 2018 17:53:20 +0000
X-Inumbo-ID: 3b4d5aec-6044-11e8-9728-bc764e045a96
Received: from mail-qt0-x243.google.com (unknown [2607:f8b0:400d:c0d::243])
 by us1-rack-dfw2.inumbo.com (Halon) with ESMTPS
 id 3b4d5aec-6044-11e8-9728-bc764e045a96;
 Fri, 25 May 2018 19:51:21 +0200 (CEST)
Received: by mail-qt0-x243.google.com with SMTP id g13-v6so7564953qth.8;
 Fri, 25 May 2018 10:53:18 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=from:content-transfer-encoding:mime-version:subject:message-id:date
 :to; bh=fvA51BCcmjjYXv9ZkJA5BDAWq41gJ7A6NauRlhslsKA=;
 b=fmIPnWjQiAOKcLksueDYVON3Gm/NxzS2Zp1O7xdc/a7EPYUISVG4QOMI4JGKxyRRnJ
 xy94TxjijxeQ8qE+F3Mt24Eu8ifh15fgiw89Mx9pnv++FuTOc4T+TqDvns6IkkNgT4ue
 I2IXqyx5Sr/osO7DWkVvBVBD/c7i7GqKAEo4ZYSMVGEQONomu7nJfQkZx/RKID91ji+E
 VrsKusQV+1MWOZjERa1wZo2S6rPHneREv0VmbSoylPmFmqObbLCefCBbpo01sIayOgwf
 cAb2uxuQZbQGTZvgIWl/ZJ8Cp/rBTyu8s3l8BNcF7uOrhr4BffGDiEL8zrZo/pkE2pzT
 WX9A==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:from:content-transfer-encoding:mime-version
 :subject:message-id:date:to;
 bh=fvA51BCcmjjYXv9ZkJA5BDAWq41gJ7A6NauRlhslsKA=;
 b=izjk/aZWN4WqwH2OFUwwWrwqpfAd4s/DKyl3Chy2/UDWPl4i2jGQSX7zxMvj1qEAI3
 Pi3vVrLq6d/+Ad/IeEKo1+Ko6knXDDPQeQCh4mdaDJ8RldOgSy1KfVB2oKRJtef/sd+5
 EFDUFDTz2M+vm/ppDm2xOo7HOLxW9icBEBoOgZ+LogJdzH8D6GtyDVm9SMD4XeU/RLw7
 AeItfwKI8dCn5wCV8bTr0u29q+l0xcGX+mG4Fm1FEn1TqULtWrplOPciWQH6zMRp1/9B
 78iNthMyGjsq24IT47VBmJUq2fTxKq6DG6DGqF2mipivd+GcCPNeZGlCTsQtWiCFpy1p
 SR0A==
X-Gm-Message-State: ALKqPwfDzD/4ju+KPzk5YBsuOnuAIvur8y43W5jE92EcSRn9c5JWCgDc
 6jBZU68Xg0NtGoLltma5GQLQfkqD
X-Google-Smtp-Source: ADUXVKKv+zi0OX1ZIX7X28eerOxmukd3DNjTS7GHRtpMHCbDPhRJtPqmZc/NRo56GgW904U3iSF4Zg==
X-Received: by 2002:ac8:3347:: with SMTP id
 u7-v6mr3227481qta.195.1527270797116; 
 Fri, 25 May 2018 10:53:17 -0700 (PDT)
Received: from [10.10.4.26] ([216.200.17.249])
 by smtp.gmail.com with ESMTPSA id m59-v6sm17937877qte.8.2018.05.25.10.53.16
 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
 Fri, 25 May 2018 10:53:16 -0700 (PDT)
From: Lars Kurth <lars.kurth.xen@gmail.com>
X-Google-Original-From: Lars Kurth <lars.kurth@xenproject.org>
Mime-Version: 1.0 (Mac OS X Mail 11.3 \(3445.6.18\))
Message-Id: <BCA2969F-6A3E-409F-9D3E-F113E21502B5@xenproject.org>
Date: Fri, 25 May 2018 13:53:15 -0400
To: xen-api@lists.xenproject.org, mirageos-devel@lists.xenproject.org,
 win-pv-devel@lists.xenproject.org, embedded-pv-devel@lists.xenproject.org,
 minios-devel@lists.xenproject.org
X-Mailer: Apple Mail (2.3445.6.18)
Subject: [win-pv-devel] Schedule for our Annual Developer and Design Summit
 - Design Session Rating and Proposals
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>

CgpXZSBhcmUgZXhjaXRlZCB0byBhbm5vdW5jZSB0aGUgcHJvZ3JhbSBhbmQgc3BlYWtlcnMgZm9y
IHRoZSBYZW4gUHJvamVjdCBEZXZlbG9wZXIgYW5kIERlc2lnbiBTdW1taXQgKGh0dHBzOi8vd3d3
LmxmYXNpYWxsYy5jb20vZXZlbnRzL3hlbnN1bW1pdDIwMTgvKS4gVGhlIHN1bW1pdCBicmluZ3Mg
dG9nZXRoZXIgZGV2ZWxvcGVycywgZW5naW5lZXJzLCBhbmQgWGVuIFByb2plY3QgcG93ZXIgdXNl
cnMgZm9yIGluLXBlcnNvbiBjb2xsYWJvcmF0aW9uIGFuZCBlZHVjYXRpb25hbCBwcmVzZW50YXRp
b25zLiBUaGUgZXZlbnQgd2lsbCB0YWtlIHBsYWNlIGluIE5hbmppbmcgSmlhbmduaW5nLCBDaGlu
YSBmcm9tIEp1bmUgMjAtMjIsIDIwMTguIFRoaXMgaXMgdGhlIGZpZnRoIGFubnVhbCBYZW4gUHJv
amVjdCBTdW1taXQgd2l0aCBwcmVzZW50YXRpb25zIGFuZCBwYW5lbHMgZm9jdXNpbmcgb24gaHlw
ZXJ2aXNvciBwZXJmb3JtYW5jZSBhbmQgZGV2ZWxvcG1lbnQsIHNlY3VyaXR5LCBhdXRvbW90aXZl
IGFuZCBtdWNoIG1vcmUuIFlvdSBjYW4gdmlldyB0aGUgZnVsbCBzY2hlZHVsZSBhdCBodHRwczov
L3d3dy5sZmFzaWFsbGMuY29tL2V2ZW50cy94ZW5zdW1taXQyMDE4L3NjaGVkdWxlLy4KCgpEZXNp
Z24gU2Vzc2lvbnMKPT09PT09PT09PT09PT09CkJleW9uZCBwYW5lbHMgYW5kIHByZXNlbnRhdGlv
bnMsIHRoZSBYZW4gUHJvamVjdCB3aWxsIGJlIHJ1bm5pbmcgZGVzaWduIHNlc3Npb25zIHRoYXQg
c2hhcmUgYSBzaW1pbGFyIGZvcm1hdCB0byBYZW4gUHJvamVjdCBoYWNrYXRob25zIChodHRwczov
L2Jsb2cueGVucHJvamVjdC5vcmcvMjAxMy8wNS8yOC9ldmVudC1yZXBvcnQteGVuLWhhY2thdGhv
bi0yMDEzLykuIEF0dGVuZGVlcyBvZiB0aGUgY29uZmVyZW5jZSBoYXZlIHRoZSBvcHBvcnR1bml0
eSB0byBwcm9wb3NlIGRlc2lnbiBzZXNzaW9ucyBub3cgYW5kIGR1cmluZyB0aGUgY29uZmVyZW5j
ZS4gQ3VycmVudCBkZXNpZ24gdG9waWNzIGFscmVhZHkgaW5jbHVkZSBNYWtpbmcgU2FmZXR5IENl
cnRpZmljYXRpb25zIGZvciBYZW4gRWFzaWVyLCBGcm9tIEhvYmJ5aXN0IHRvIE1haW50YWluZXI6
IFdoeSBhbmQgSG93IGFuZCBSZXdvcmtpbmcgeDg2IGluIFhlbiAoQ3VycmVudCBhbmQgRnV0dXJl
IFBsYW5zKS4KCkRlc2lnbiBzZXNzaW9ucyBhcmUgc2NoZWR1bGVkIHZpYSBodHRwczovL2Rlc2ln
bi1zZXNzaW9ucy54ZW5wcm9qZWN0Lm9yZy8gYW5kIGNhbiBzdGlsbCBiZSBwcm9wb3NlZCBub3cu
IFJhdGhlciB0aGFuIHNjaGVkdWxpbmcgc2Vzc2lvbnMgbWFudWFsbHksIGFzIHdlIGhhdmUgZG9u
ZSBpbiB0aGUgcGFzdCwgd2UgaGF2ZSBpbnRyb2R1Y2VkIGFuIGF1dG9tYXRpYyBzY2hlZHVsaW5n
IHN5c3RlbS4gVGhpcyBhbGxvd3MgeW91IHRvCmEpIEhpZ2hsaWdodCB3aGljaCBzZXNzaW9ucyB5
b3Ugd2FudCB0byBhdHRlbmQgKGFuZCBob3cgaW1wb3J0YW50IGF0dGVuZGluZyBpcykKYikgUHJv
cG9zZSBuZXcgc2Vzc2lvbnMKClVzZXIgQWNjb3VudAo9PT09PT09PT09PT0KVG8gZG8gZWl0aGVy
IHlvdSB3aWxsIG5lZWQgdG8gY3JlYXRlIGEgdXNlci1hY2NvdW50IG9uIGRlc2lnbi1zZXNzaW9u
cy54ZW5wcm9qZWN0Lm9yZy4gVG8gZG8gc28sIHlvdSB3aWxsIG5lZWQgYSBWZXJpZmljYXRpb24g
Q29kZSB0aGF0IHlvdSBjYW4gZ2V0IG9uIElSQyAobG9vayBvdXQgZm9yIGd3ZCBvciBsYXJzX2t1
cnRoKSwgc2VuZCBhbiBlLW1haWwgdG8gWGVuZXZlbnRzQGxpbnV4Zm91bmRhdGlvbi5vcmcgb3Ig
Y29tbXVuaXR5Lm1hbmFnZXJAeGVucHJvamVjdC5vcmcgKGFuZCBhc2sgZm9yIGEgRGVzaWduIFNl
c3Npb24gVmVyaWZpY2F0aW9uIGNvZGUpLiBUaGUgc3lzdGVtIHdpbGwgYXV0b21hdGljYWxseSBj
aG9vc2UgdGhlIGJlc3Qgb3B0aW9uIGJhc2VkIG9uIHdoYXQgc2Vzc2lvbnMgeW91IHdhbnQgdG8g
YXR0ZW5kIGFuZCB3aWxsIG1pbmltaXNlIGNvbmZsaWN0cy4gCgpQcm9wb3NpbmcgU2Vzc2lvbnMK
PT09PT09PT09PT09PT09PT09CkxvZyBpbnRvIGRlc2lnbi1zZXNzaW9ucy54ZW5wcm9qZWN0Lm9y
ZwpHbyB0byBodHRwczovL2Rlc2lnbi1zZXNzaW9ucy54ZW5wcm9qZWN0Lm9yZy9kaXNjdXNzaW9u
L25ldwpBbmQgcHJvcG9zZSBhIHNlc3Npb24KSWYgdGhlIHNlc3Npb24gbmVlZHMgdG8gYmUgb24g
YSBjZXJ0YWluIGRheSwgcGxlYXNlIGxldCBtZSBvciBHZW9yZ2Ugbm93IGFuZCB3ZSBjYW4gcmVz
dHJpY3Qgd2hlbiB0aGUgc2Vzc2lvbiBjYW4gdGFrZSBwbGFjZS4KCkxldCB1cyBrbm93IHdoaWNo
IHNlc3Npb25zIHRvIGF0dGVuZAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
VGhlIHNjaGVkdWxlIHdpbGwgYmUgY3JlYXRlZCBiYXNlZCBvbiBpbmZvcm1hdGlvbiB5b3UgcHJv
dmlkZS4gSWYgeW91IGRvIG5vdCBwcm92aWRlIHRoZSBpbmZvcm1hdGlvbiwgeW91ciBwcmVmZXJl
bmNlIHdpbGwgTk9UIEJFIENPTlNJREVSRUQuCgpMb2cgaW50byBkZXNpZ24tc2Vzc2lvbnMueGVu
cHJvamVjdC5vcmcKR28gdG8gaHR0cHM6Ly9kZXNpZ24tc2Vzc2lvbnMueGVucHJvamVjdC5vcmcv
bGlzdC9kaXNjdXNzaW9uCkNob3NlIG9uZSBvZiB0aGUgZm9sbG93aW5nIGZvciBlYWNoIHNlc3Np
b246Ck5vbmUgPSBJIGRvIG5vdCB3YW50IHRvIGF0dGVuZCB0aGUgc2Vzc2lvbgpBIExpdHRsZSA9
IEkgaGF2ZSBzb21lIGludGVyZXN0IGluIHRoZSBzZXNzaW9uClllcyA9IEkgd2FudCB0byBhdHRl
bmQsIGJ1dCB3b3VsZCBpZiB0aGVyZSBpcyBhIGNvbmZsaWN0LCBJIGRvbid0IG1pbmQgbm90IGF0
dGVuZGluZwpWZXJ5ID0gSSBhYnNvbHV0ZWx5IHdhbnQgdG8gYXR0ZW5kIHRoaXMgc2Vzc2lvbiAK
CldlIHdpbGwgdXBkYXRlIHRoZSBzY2hlZHVsZSBkYWlseSBvbiBodHRwczovL2Rlc2lnbi1zZXNz
aW9ucy54ZW5wcm9qZWN0Lm9yZy9zY2hlZHVsZQpXZSB3aWxsIGZpbmFsaXNlIHRoZSBzY2hlZHVs
ZSBhdCAxMTowMCBmb3IgZWFjaCBkYXkgZHVyaW5nIHRoZSBldmVudAoKVGhlIHNjaGVkdWxpbmcg
c3lzdGVtIHdpbGwgcGljayB0aGUgYmVzdCB0aW1lLXNsb3QgYmFzZWQgb24geW91ciBpbnRlcmVz
dHMsIHRoZSBiZXN0IHJvb20gYmFzZWQgb24gdGhlIG51bWJlciBvZiBhdHRlbmRlZXMuCgpJIGFt
IGxvb2tpbmcgZm9yd2FyZCB0byBzZWVpbmcgeW91IGF0IHRoZSBzdW1taXQKCkJlc3QgUmVnYXJk
cwpMYXJzIAoKCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X18Kd2luLXB2LWRldmVsIG1haWxpbmcgbGlzdAp3aW4tcHYtZGV2ZWxAbGlzdHMueGVucHJvamVj
dC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL3dpbi1w
di1kZXZlbA==

From win-pv-devel-bounces@lists.xenproject.org Mon May 28 07:56:07 2018
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 28 May 2018 07:56:07 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1fND0e-0003L2-Gm; Mon, 28 May 2018 07:56:04 +0000
Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <srs0=+xit=im=dingwall.me.uk=james@srs-us1.protection.inumbo.net>)
 id 1fMCfu-0006H0-EV
 for win-pv-devel@lists.xenproject.org; Fri, 25 May 2018 13:22:30 +0000
X-Inumbo-ID: 64c7446f-601e-11e8-9728-bc764e045a96
Received: from know-smtprelay-omc-9.server.virginmedia.net (unknown
 [80.0.253.73]) by us1-rack-dfw2.inumbo.com (Halon) with ESMTPS
 id 64c7446f-601e-11e8-9728-bc764e045a96;
 Fri, 25 May 2018 15:20:30 +0200 (CEST)
Received: from dingwall.me.uk ([82.47.84.47]) by cmsmtp with ESMTP
 id MCfof86plfU1xMCfofZ1nE; Fri, 25 May 2018 14:22:25 +0100
X-Originating-IP: [82.47.84.47]
X-Authenticated-User: 
X-Spam: 0
X-Authority: v=2.3 cv=OoZhNR3t c=1 sm=1 tr=0 a=0bfgdX8EJi0Cr9X0x0jFDA==:117
 a=0bfgdX8EJi0Cr9X0x0jFDA==:17 a=kj9zAlcOel0A:10 a=VUJBJC2UJ8kA:10
 a=cWRNjhkoAAAA:8 a=5IRWAbXhAAAA:8 a=_-xpSzfGiQAMfry3i5YA:9
 a=gunRBtzw9Kh-t6Af:21 a=zyU_TYxlZSUxAbOp:21 a=CjuIK1q_8ugA:10
 a=sVa6W5Aao32NNC1mekxh:22 a=xo7gz2vLY8DhO4BdlxfM:22
Received: (qmail 9052 invoked from network); 25 May 2018 13:22:23 -0000
Received: from behemoth.dingwall.me.uk (192.168.1.5)
 by mail0.xen.dingwall.me.uk with SMTP; 25 May 2018 13:22:23 -0000
Received: by behemoth.dingwall.me.uk (Postfix, from userid 1000)
 id 7B7CED08C20; Fri, 25 May 2018 14:22:23 +0100 (BST)
Date: Fri, 25 May 2018 14:22:23 +0100
From: James Dingwall <james@dingwall.me.uk>
To: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Message-ID: <20180525132223.GA221591@dingwall.me.uk>
References: <20180522161231.GA46399@dingwall.me.uk>
 <489a8c70541244dcb4bb71c4b461c904@AMSPEX02CL03.citrite.net>
MIME-Version: 1.0
Content-Disposition: inline
In-Reply-To: <489a8c70541244dcb4bb71c4b461c904@AMSPEX02CL03.citrite.net>
User-Agent: Mutt/1.9.4 (2018-02-28)
X-CMAE-Envelope: MS4wfDBcV/2lDnxa10LUbIMUfvRknua1w0IVYTguY1/D5o0uznyCsg1gBBrklAckqesfT9RH2TuF5J2bjeeJI7KefM2PdyjK2fqGUyE1AL2F1Jl7D3GFg4nU
 d560mZ0veM9yWzKLI2vM5rq7KVvho0Kx5yw9yjCrDQzxkqPgqZghGNl5dtP0rR8ftmNZIv5sRA/a6g==
X-Mailman-Approved-At: Mon, 28 May 2018 07:56:03 +0000
Subject: Re: [win-pv-devel] poor winpv performance with iommu=on + disk
 driver domain
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Paul Durrant <Paul.Durrant@citrix.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>

T24gV2VkLCBNYXkgMjMsIDIwMTggYXQgMTI6NDg6MjZQTSArMDAwMCwgUGF1bCBEdXJyYW50IHdy
b3RlOgo+ID4gSGksCj4gPiAKPiA+IEkgcmFpc2VkIHRoaXMgaXNzdWUgd2l0aCBzb21lIG5vbiBz
cGVjaWZpYyBkZXRhaWxzIGJlZm9yZSBvbiB4ZW4tZGV2ZWw6Cj4gPiBodHRwczovL2xpc3RzLnhl
bnByb2plY3Qub3JnL2FyY2hpdmVzL2h0bWwveGVuLWRldmVsLzIwMTctCj4gPiAxMi9tc2cwMDI2
Mi5odG1sCj4gPiAKPiA+IEluIHN1bW1hcnkgd2hlbiBlbmFibGluZyB0aGUgaW9tbXUgd2Ugbm90
ZSBhIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIGluCj4gPiB0aGUgZGlzayBwZXJmb3JtYW5jZSBv
ZiBXaW5kb3dzIGd1ZXN0cyBydW5uaW5nIHdpdGggV2luUFYgZHJpdmVycy4KPiA+IAo+ID4gU2lu
Y2UgdGhlIG9yaWdpbmFsIHJlcG9ydCB3ZSBoYXZlIGRvbmUgc29tZSBtb3JlIGludmVzdGlnYXRp
b24gYW5kIG5vdwo+ID4gc2VlbSB0byBoYXZlIGlzb2xhdGVkIHRoZSBwZXJmb3JtYW5jZSBpc3N1
ZSBub3RlZCBpbiBvdXIgSFZNIGd1ZXN0cyBhcwo+ID4gYW4gYWR2ZXJzZSBpbnRlcmFjdGlvbiBi
ZXR3ZWVuIHRoZSBXaW5QViBkcml2ZXJzIGFuZCB0aGUgYmxrYmFjayBkcml2ZXIKPiA+IGluIHRo
ZSBkaXNrIGRyaXZlciBkb21haW4uICBUaGlzIGlzIG9ic2VydmVkIGFzIHNsb3cgZGlzayBzcGVl
ZCBpbiB0aGUKPiA+IGd1ZXN0IGFuZCBoaWdoIGNwdSB1c2FnZSBvZiB0aGUgY29ycmVzcG9uZGlu
ZyBibGtiYWNrLjxkb21pZD4uPGRpc2s+Cj4gPiBwcm9jZXNzIGluIHRoZSBiYWNrZW5kLiAgSWYg
dGhlIEhWTSBpcyBjb25maWd1cmVkIHRvIG5ldHdvcmsgYm9vdCBhIFBYRQo+ID4gTGludXggaW1h
Z2UgdGhlcmUgaXMgbm8gZGlzayBwZXJmb3JtYW5jZSBpc3N1ZS4KPiA+IAo+ID4gV2UgaGF2ZSB1
cGRhdGVkIG91ciBzdGFjayB0byBiZSBiYXNlZCBvbiBYZW4gNC44LjMsIGEgY3VzdG9tIGNvbXBp
bGUgb2YKPiA+IHRoZSBVYnVudHUga2VybmVsIHRhZyBVYnVudHUtbHRzLTQuNC4wLTEyNy4xNTNf
MTQuMDQuMSBhbmQgWkZTIDAuNy45Lgo+ID4gV2UgaGF2ZSBvdXIgb3duIGJ1aWxkIG9mIHRoZSBX
aW5QViBkcml2ZXJzIHRvbyBidXQgd2Ugc2VlIHRoZSBzYW1lIHdoZW4KPiA+IHVzaW5nIHRoZSA4
LjIuMSByZWxlYXNlLgo+ID4gCj4gPiBJIGRpZCBzb21lIHRyYWNpbmcgaW4gdGhlIGRpc2sgZHJp
dmVyIGRvbWFpbiBmb3IgdGhlIGJsb2NrIGJhY2sgZHJpdmVyOgo+ID4gCj4gPiBjZCAvc3lzL2tl
cm5lbC9kZWJ1Zy90cmFjaW5nCj4gPiBlY2hvIGZ1bmN0aW9uX2dyYXBoID4gY3VycmVudF90cmFj
ZXIKPiA+IGVjaG8gJzptb2Q6eGVuX2Jsa2JhY2snID4gc2V0X2Z0cmFjZV9maWx0ZXIKPiA+IGVj
aG8gcGlkX29mX2JsYmFja193b3JrZXIgPiBzZXRfZnRyYWNlX3BpZAo+ID4gCj4gPiBGb3IgV2lu
UFYgdGhlcmUgYXJlIHNvbWUgdmVyeSBsb25nIHBlcmlvZHMgYXQgdGhlIGVuZCBvZiBzb21lCj4g
PiBvcGVyYXRpb25zIHdoaWNoIGFyZSBub3Qgc2VlbiB3aGVuIHRyYWNpbmcgd2l0aCBhIExpbnV4
IGd1ZXN0LCBzb21lCj4gPiBwYXJ0cyBvZiB0aGUgY2FwdHVyZWQgdHJhY2VzIGJlbG93LiAgSSBh
c3N1bWUgdGhhdCBzb21ldGhpbmcgZXh0cmEgaXMKPiA+IGhhcHBlbmluZyB3aXRoIFdpblBWIGR1
ZSB0byB0aGUgZXh0cmEge30gc2V0IGFmdGVyIHhlbl9ibGtia19tYXAKPiA+IFt4ZW5fYmxrYmFj
a10oKS4KPiA+IAo+ID4gSWYgdGhlcmUgYXJlIGFueSBzdWdnZXN0aW9ucyBvbiBob3cgdG8gZnVy
dGhlciBkZWJ1ZyB0aGlzLCBvcHRpb25zIHRvCj4gPiB0cnkgb3IgaWYgbW9yZSBpbmZvcm1hdGlv
biBhYm91dCB0aGUgZW52aXJvbm1lbnQgaXMgcmVxdWlyZWQgSSdkIGJlCj4gPiBoYXBweSB0byBn
aXZlIGFueXRoaW5nIGEgZ28uCj4gPgo+IAo+IEhpIEphbWVzLAo+IAo+ICAgSSBoYXZlIGEgaHVu
Y2ggdGhhdCB5b3UgbWF5IGJlIHN1ZmZlcmluZyBmcm0gYSBYZW4gJ2ZlYXR1cmUnLi4uCj4gCj4g
ICBXaGVuIHRoZXJlIGlzIG5vIGhhcmR3YXJlIHBhc3NlZCB0aHJvdWdoIHRvIGFuIEhWTSBkb21h
aW4sIFhlbiBvdmVycmlkZXMgdGhlIG1lbW9yeSBjYWNoZWFiaWxpdHkgb2YgTU1JTyByYW5nZXMu
Li4gYmVjYXVzZSBpdCAna25vd3MnIHRoYXQgYWxsIGgvdyBpcyBlbXVsYXRlZCBhbmQgdGhlcmVm
b3JlIGFueXRoaW5nIG1hcHBlZCBpbiB0aGUgTU1JTyByYW5nZXMgaXMgb25seSBldmVyIGdvaW5n
IHRvIGJlIFJBTSBhbmQgY2FuIHRoZXJlZm9yZSBhY2Nlc3NlcyBjYW4gYmUgY2FjaGVkLgo+ICAg
SG93ZXZlciwgYXMgc29vbiBhcyB5b3UgcGFzcyB0aHJvdWdoIGgvdyB0byBhIGRvbWFpbiB0aGVu
IFhlbiBjYW4gbm8gbG9uZ2VyIHVzZSB0aGlzICdvcHRpbWl6YXRpb24nLiBVbmZvcnR1bmF0ZWx5
IHRoaXMgbWVhbnMgdGhhdCBhY2Nlc3NlcyB0byB0aGUgWGVuIHBsYXRmb3JtIGRldmljZSdzIE1N
SU8gQkFSIGFyZSBubyBsb25nZXIgY2FjaGVkIGFuZCBpdCBqdXN0IGhhcHBlbnMgdGhhdCBQViBk
cml2ZXJzIChib3RoIExpbnV4IGFuZCBXaW5kb3dzKSB1c2UgdGhpcyBCQVIgdG8gbWFwIHRoZSBn
dWVzdCBncmFudCB0YWJsZXMuIFRodXMgZXZlcnkgYWNjZXNzIHRoZSBndWVzdCBQViBkcml2ZXJz
IG1ha2UgdG8gdGhlIGdyYW50IHRhYmxlIGlzIHVuY2FjaGVkIGFuZCB0aHVzIHlvdSB3aWxsIHN1
ZmZlciBhIHN1YnN0YW50aWFsIHNsb3ctZG93biBpbiB0aGUgZG9tYWluLgo+IAo+ICAgWW91ciBy
ZXN1bHRzIHdpdGggcGVyc2lzdGVudCBncmFudHMgaXMgY29uc2lzdGVudCB3aXRoIG15IGh1bmNo
IGJlY2F1c2UsIG9mIGNvdXJzZSwgdXNpbmcgcGVyc2lzdGVudCBncmFudHMgbWVhbnMgc3Vic3Rh
bnRpYWxseSBmZXdlciBhY2Nlc3MgdG8gZ3JhbnQgdGFibGVzIGluIHRoZSBib3RoIHRoZSBmcm9u
dGVuZCBhbmQgdGhlIGJhY2tlbmQuCj4gCj4gICBJIHRoaW5rIHRoYXQgdGhlcmUgaGF2ZSBiZWVu
IHJlY2VudCBwYXRjaGVzIHRvIHRoZSBMaW51eCBQViBjb2RlIHRvIHVzZSBhIGJhbGxvb25lZCBt
ZW1vcnkgdG8gaG9zdCB0aGUgZ3JhbnQgdGFibGVzIGluc3RlYWQgKGJ1dCBJIGNvdWxkIGJlIHdy
b25nKSBhbmQgSSBoYXZlIGRvbmUgc2ltaWxhciBpbiB0aGUgbGF0ZXN0IFdpbmRvd3MgeGVuYnVz
IGRyaXZlci4gWW91IG1heSBhbHNvIGJlIGFibGUgdG8gd29yayBhcm91bmQgdGhlIHByb2JsZW0g
YnkgYWRkaW5nIHRoaXMgbGl0dGxlIGhhY2sgdG8geW91ciBYZW46Cj4gCj4gZGlmZiAtLWdpdCBh
L3hlbi9hcmNoL3g4Ni9odm0vbXRyci5jIGIveGVuL2FyY2gveDg2L2h2bS9tdHJyLmMKPiBpbmRl
eCAzYzUxMjQ0Li5kMDEyNmI0IDEwMDY0NAo+IC0tLSBhL3hlbi9hcmNoL3g4Ni9odm0vbXRyci5j
Cj4gKysrIGIveGVuL2FyY2gveDg2L2h2bS9tdHJyLmMKPiBAQCAtODExLDcgKzgxMSw4IEBAIGlu
dCBlcHRlX2dldF9lbnRyeV9lbXQoc3RydWN0IGRvbWFpbiAqZCwgdW5zaWduZWQgbG9uZyBnZm4s
IG1mbl90IG1mbiwKPiAgICAgICAgICByZXR1cm4gTVRSUl9UWVBFX1VOQ0FDSEFCTEU7Cj4gICAg
ICB9Cj4gIAo+IC0gICAgaWYgKCAhbmVlZF9pb21tdShkKSAmJiAhY2FjaGVfZmx1c2hfcGVybWl0
dGVkKGQpICkKPiArICAgIGlmICggKCFuZWVkX2lvbW11KGQpICYmICFjYWNoZV9mbHVzaF9wZXJt
aXR0ZWQoZCkpIHx8Cj4gKyAgICAgICAgIGlzX3hlbl9oZWFwX21mbihtZm5feChtZm4pKSApCj4g
ICAgICB7Cj4gICAgICAgICAgKmlwYXQgPSAxOwo+ICAgICAgICAgIHJldHVybiBNVFJSX1RZUEVf
V1JCQUNLOyAKPiAgCj4gICBDaGVlcnMsCj4gCj4gICAgIFBhdWwKCkhpIFBhdWwsCgpUaGFua3Mg
Zm9yIHlvdXIgaW50ZXJlc3QgaW4gdGhpcyBwcm9ibGVtLiAgSSBoYXZlIHRyaWVkIGJ1aWxkaW5n
IFhlbiB3aXRoIHRoaXMgcGF0Y2ggaW5jbHVkZWQgYnV0IGl0IGRvZXNuJ3QgCnNlZW0gdG8gaGVs
cCBpbiB0aGlzIHNpdHVhdGlvbi4gIEkgc3RpbGwgc2VlIGRpc2sgcGVyZm9ybWFuY2UgaW4gdGhl
IFdpbmRvd3MgZ3Vlc3QgYXQgfjEwLTIwJSBvZiB0aGUgcGVyZm9ybWFuY2UgCndoZW4gY29tcGFy
ZWQgdG8gaW9tbXU9b2ZmIGFuZCB0aGUgYmxrYmFjayBwcm9jZXNzIGJlaW5nIGEgY3B1IGhvZy4g
IChJIGNvdWxkIHRyeSBhbmQgcXVhbnRpZnkgdGhpcyBtb3JlIAphY2N1cmF0ZWx5IGlmIGl0IHdv
dWxkIGJlIHVzZWZ1bC4pICBDb3VsZCBpdCBhbHNvIGJlIHBvc3NpYmxlIHRoZXJlIGlzIGFuIGlz
c3VlIGluIHRoZSBMaW51eCBQQ0kgcGFzc3Rocm91Z2ggCmNvZGUgd2hpY2ggaXMgYmVpbmcgZXhw
b3NlZCB3aGVuIGlvbW11PW9uIGFuZCBwZXJzaXN0ZW50IGdyYW50cyBhcmUgbm90IHVzZWQ/CgpS
ZWdhcmRzLApKYW1lcwoKPiAKPiA+IAo+ID4gV2luUFYgdHJhY2Ugc2FtcGxlIChpb21tdT1vbik6
Cj4gPiAKPiA+ICAyKSAgICAgICAgICAgICAgIHwgICAgZGlzcGF0Y2hfcndfYmxvY2tfaW8gW3hl
bl9ibGtiYWNrXSgpIHsKPiA+ICAyKSAgICAgICAgICAgICAgIHwgICAgICB4ZW5fYmxrYmtfbWFw
IFt4ZW5fYmxrYmFja10oKSB7Cj4gPiAgMikgISAyMDguMjI5IHVzICB8ICAgICAgfQo+ID4gIDIp
ICAgICAgICAgICAgICAgfCAgICAgIHhlbl9ibGtia191bm1hcCBbeGVuX2Jsa2JhY2tdKCkgewo+
ID4gIDIpICAgMC4yMDggdXMgICAgfCAgICAgICAgeGVuX2Jsa2JrX3VubWFwX3ByZXBhcmUgW3hl
bl9ibGtiYWNrXSgpOwo+ID4gIDIpICEgMTY4LjQwNCB1cyAgfCAgICAgIH0KPiA+ICAyKSAgIDAu
NDc4IHVzICAgIHwgICAgICB4ZW5fdmJkX3RyYW5zbGF0ZSBbeGVuX2Jsa2JhY2tdKCk7Cj4gPiAg
MikgICAgICAgICAgICAgICB8ICAgICAgeGVuX2Jsa2JrX21hcCBbeGVuX2Jsa2JhY2tdKCkgewo+
ID4gIDIpICogMjYzMDYuODYgdXMgfCAgICAgIH0KPiA+ICAyKSAqIDI2NzczLjc2IHVzIHwgICAg
fQo+ID4gIDIpICAgICAgICAgICAgICAgfCAgICBkaXNwYXRjaF9yd19ibG9ja19pbyBbeGVuX2Js
a2JhY2tdKCkgewo+ID4gIDIpICsgOTAuMjk3IHVzICAgfCAgICAgIHhlbl9ibGtia19tYXAgW3hl
bl9ibGtiYWNrXSgpOwo+ID4gIDIpICAgICAgICAgICAgICAgfCAgICAgIHhlbl9ibGtia191bm1h
cCBbeGVuX2Jsa2JhY2tdKCkgewo+ID4gIDIpICAgMC4xOTYgdXMgICAgfCAgICAgICAgeGVuX2Js
a2JrX3VubWFwX3ByZXBhcmUgW3hlbl9ibGtiYWNrXSgpOwo+ID4gIDIpICsgOTAuMTYwIHVzICAg
fCAgICAgIH0KPiA+ICAyKSAgIDAuMjg2IHVzICAgIHwgICAgICB4ZW5fdmJkX3RyYW5zbGF0ZSBb
eGVuX2Jsa2JhY2tdKCk7Cj4gPiAgMikgICAgICAgICAgICAgICB8ICAgICAgeGVuX2Jsa2JrX21h
cCBbeGVuX2Jsa2JhY2tdKCkgewo+ID4gIDIpICogMjEwNjIuNTkgdXMgfCAgICAgIH0KPiA+ICAy
KSAqIDIxMzE0LjI2IHVzIHwgICAgfQo+ID4gIDMpIEAgMjAzODQ2LjIgdXMgfCAgfSAvKiBfX2Rv
X2Jsb2NrX2lvX29wIFt4ZW5fYmxrYmFja10gKi8KPiA+ICAzKSAgICAgICAgICAgICAgIHwgIF9f
ZG9fYmxvY2tfaW9fb3AgW3hlbl9ibGtiYWNrXSgpIHsKPiA+ICAzKSAgICAgICAgICAgICAgIHwg
ICAgZGlzcGF0Y2hfcndfYmxvY2tfaW8gW3hlbl9ibGtiYWNrXSgpIHsKPiA+ICAzKSAhIDE2OS41
NDEgdXMgIHwgICAgICB4ZW5fYmxrYmtfbWFwIFt4ZW5fYmxrYmFja10oKTsKPiA+ICAzKSAgICAg
ICAgICAgICAgIHwgICAgICB4ZW5fYmxrYmtfdW5tYXAgW3hlbl9ibGtiYWNrXSgpIHsKPiA+ICAz
KSAgIDAuMTczIHVzICAgIHwgICAgICAgIHhlbl9ibGtia191bm1hcF9wcmVwYXJlIFt4ZW5fYmxr
YmFja10oKTsKPiA+ICAzKSAhIDIyMS43MDEgdXMgIHwgICAgICB9Cj4gPiAgMykgICAwLjQ3MSB1
cyAgICB8ICAgICAgeGVuX3ZiZF90cmFuc2xhdGUgW3hlbl9ibGtiYWNrXSgpOwo+ID4gIDMpICAg
ICAgICAgICAgICAgfCAgICAgIHhlbl9ibGtia19tYXAgW3hlbl9ibGtiYWNrXSgpIHsKPiA+ICAz
KSArIDE1LjA1MCB1cyAgIHwgICAgICAgIHhlbl9ibGtpZl9iZV9pbnQgW3hlbl9ibGtiYWNrXSgp
Owo+ID4gIDMpICogMjU0NjcuNzAgdXMgfCAgICAgIH0KPiA+ICAzKSAqIDI1OTIyLjY4IHVzIHwg
ICAgfQo+ID4gIDMpICAgICAgICAgICAgICAgfCAgICBkaXNwYXRjaF9yd19ibG9ja19pbyBbeGVu
X2Jsa2JhY2tdKCkgewo+ID4gIDMpICAgMC4yNTIgdXMgICAgfCAgICAgIHhlbl92YmRfdHJhbnNs
YXRlIFt4ZW5fYmxrYmFja10oKTsKPiA+ICAzKSAgICAgICAgICAgICAgIHwgICAgICB4ZW5fYmxr
YmtfbWFwIFt4ZW5fYmxrYmFja10oKSB7Cj4gPiAgMykgISA1MzMuODY2IHVzICB8ICAgICAgfQo+
ID4gIDMpICEgNTU2LjM0NCB1cyAgfCAgICB9Cj4gPiAgMykgICAgICAgICAgICAgICB8ICAgIGRp
c3BhdGNoX3J3X2Jsb2NrX2lvIFt4ZW5fYmxrYmFja10oKSB7Cj4gPiAgMykgKyA4NC40MDcgdXMg
ICB8ICAgICAgeGVuX2Jsa2JrX21hcCBbeGVuX2Jsa2JhY2tdKCk7Cj4gPiAgMykgICAgICAgICAg
ICAgICB8ICAgICAgeGVuX2Jsa2JrX3VubWFwIFt4ZW5fYmxrYmFja10oKSB7Cj4gPiAgMykgICAw
LjIzOSB1cyAgICB8ICAgICAgICB4ZW5fYmxrYmtfdW5tYXBfcHJlcGFyZSBbeGVuX2Jsa2JhY2td
KCk7Cj4gPiAgMykgISAxMzUuODY5IHVzICB8ICAgICAgfQo+ID4gIDMpICAgMC4zMTAgdXMgICAg
fCAgICAgIHhlbl92YmRfdHJhbnNsYXRlIFt4ZW5fYmxrYmFja10oKTsKPiA+ICAzKSAgICAgICAg
ICAgICAgIHwgICAgICB4ZW5fYmxrYmtfbWFwIFt4ZW5fYmxrYmFja10oKSB7Cj4gPiAgMykgIyAy
ODg2LjI3MCB1cyB8ICAgICAgfQo+ID4gIDMpICMgMzE0Ni44ODMgdXMgfCAgICB9Cj4gPiAKPiA+
IAo+ID4gCj4gPiBMaW51eCB0cmFjZSBzYW1wbGUgKGlvbW11PW9uKToKPiA+IAo+ID4gIDIpICAg
ICAgICAgICAgICAgfCAgICBkaXNwYXRjaF9yd19ibG9ja19pbyBbeGVuX2Jsa2JhY2tdKCkgewo+
ID4gIDIpICAgMS4yODggdXMgICAgfCAgICAgIHhlbl9ibGtia19tYXAgW3hlbl9ibGtiYWNrXSgp
Owo+ID4gIDIpICAgICAgICAgICAgICAgfCAgICAgIHhlbl9ibGtia191bm1hcCBbeGVuX2Jsa2Jh
Y2tdKCkgewo+ID4gIDIpICAgMC4xMDggdXMgICAgfCAgICAgICAgeGVuX2Jsa2JrX3VubWFwX3By
ZXBhcmUgW3hlbl9ibGtiYWNrXSgpOwo+ID4gIDIpICAgMC43NzAgdXMgICAgfCAgICAgIH0KPiA+
ICAyKSAgIDAuMTE3IHVzICAgIHwgICAgICB4ZW5fdmJkX3RyYW5zbGF0ZSBbeGVuX2Jsa2JhY2td
KCk7Cj4gPiAgMikgKyAxMy41MDAgdXMgICB8ICAgICAgeGVuX2Jsa2JrX21hcCBbeGVuX2Jsa2Jh
Y2tdKCk7Cj4gPiAgMikgKyAyMy45MzggdXMgICB8ICAgIH0KPiA+ICAyKSAgICAgICAgICAgICAg
IHwgICAgZGlzcGF0Y2hfcndfYmxvY2tfaW8gW3hlbl9ibGtiYWNrXSgpIHsKPiA+ICAyKSAgIDEu
MzYyIHVzICAgIHwgICAgICB4ZW5fYmxrYmtfbWFwIFt4ZW5fYmxrYmFja10oKTsKPiA+ICAyKSAg
ICAgICAgICAgICAgIHwgICAgICB4ZW5fYmxrYmtfdW5tYXAgW3hlbl9ibGtiYWNrXSgpIHsKPiA+
ICAyKSAgIDAuMTMxIHVzICAgIHwgICAgICAgIHhlbl9ibGtia191bm1hcF9wcmVwYXJlIFt4ZW5f
YmxrYmFja10oKTsKPiA+ICAyKSAgIDAuODg4IHVzICAgIHwgICAgICB9Cj4gPiAgMikgICAwLjEy
MCB1cyAgICB8ICAgICAgeGVuX3ZiZF90cmFuc2xhdGUgW3hlbl9ibGtiYWNrXSgpOwo+ID4gIDIp
ICsgMTEuNDkyIHVzICAgfCAgICAgIHhlbl9ibGtia19tYXAgW3hlbl9ibGtiYWNrXSgpOwo+ID4g
IDIpICsgMjQuMjM2IHVzICAgfCAgICB9Cj4gPiAgMikgICAgICAgICAgICAgICB8ICAgIGRpc3Bh
dGNoX3J3X2Jsb2NrX2lvIFt4ZW5fYmxrYmFja10oKSB7Cj4gPiAgMikgICAwLjQzOSB1cyAgICB8
ICAgICAgeGVuX2Jsa2JrX21hcCBbeGVuX2Jsa2JhY2tdKCk7Cj4gPiAgMikgICAgICAgICAgICAg
ICB8ICAgICAgeGVuX2Jsa2JrX3VubWFwIFt4ZW5fYmxrYmFja10oKSB7Cj4gPiAgMikgICAwLjEx
NyB1cyAgICB8ICAgICAgICB4ZW5fYmxrYmtfdW5tYXBfcHJlcGFyZSBbeGVuX2Jsa2JhY2tdKCk7
Cj4gPiAgMikgICAxLjI3MyB1cyAgICB8ICAgICAgfQo+ID4gIDIpICAgMC4yMjYgdXMgICAgfCAg
ICAgIHhlbl92YmRfdHJhbnNsYXRlIFt4ZW5fYmxrYmFja10oKTsKPiA+ICAyKSAgIDcuODY3IHVz
ICAgIHwgICAgICB4ZW5fYmxrYmtfbWFwIFt4ZW5fYmxrYmFja10oKTsKPiA+ICAyKSArIDE3LjMy
OCB1cyAgIHwgICAgfQo+ID4gIDIpICAgICAgICAgICAgICAgfCAgICBkaXNwYXRjaF9yd19ibG9j
a19pbyBbeGVuX2Jsa2JhY2tdKCkgewo+ID4gIDIpICAgMC41MjEgdXMgICAgfCAgICAgIHhlbl9i
bGtia19tYXAgW3hlbl9ibGtiYWNrXSgpOwo+ID4gIDIpICAgICAgICAgICAgICAgfCAgICAgIHhl
bl9ibGtia191bm1hcCBbeGVuX2Jsa2JhY2tdKCkgewo+ID4gIDIpICAgMC4xMTEgdXMgICAgfCAg
ICAgICAgeGVuX2Jsa2JrX3VubWFwX3ByZXBhcmUgW3hlbl9ibGtiYWNrXSgpOwo+ID4gIDIpICAg
MC42MjAgdXMgICAgfCAgICAgIH0KPiA+ICAyKSAgIDAuMDkzIHVzICAgIHwgICAgICB4ZW5fdmJk
X3RyYW5zbGF0ZSBbeGVuX2Jsa2JhY2tdKCk7Cj4gPiAgMikgICA3LjY4OSB1cyAgICB8ICAgICAg
eGVuX2Jsa2JrX21hcCBbeGVuX2Jsa2JhY2tdKCk7Cj4gPiAgMikgKyAxNC4zNjggdXMgICB8ICAg
IH0KPiA+IAo+ID4gCj4gPiAKPiA+IFdpblBWIHRyYWNlIHNhbXBsZSAoaW9tbXU9b2ZmKToKPiA+
IAo+ID4gIDEpICAgICAgICAgICAgICAgfCAgICBkaXNwYXRjaF9yd19ibG9ja19pbyBbeGVuX2Js
a2JhY2tdKCkgewo+ID4gIDEpICAgMC4zMDggdXMgICAgfCAgICAgIHhlbl92YmRfdHJhbnNsYXRl
IFt4ZW5fYmxrYmFja10oKTsKPiA+ICAxKSAgIDQuODU1IHVzICAgIHwgICAgICB4ZW5fYmxrYmtf
bWFwIFt4ZW5fYmxrYmFja10oKTsKPiA+ICAxKSArIDE1LjkxNSB1cyAgIHwgICAgfQo+ID4gIDEp
ICAgICAgICAgICAgICAgfCAgICBkaXNwYXRjaF9yd19ibG9ja19pbyBbeGVuX2Jsa2JhY2tdKCkg
ewo+ID4gIDEpICAgMC4xMTMgdXMgICAgfCAgICAgIHhlbl92YmRfdHJhbnNsYXRlIFt4ZW5fYmxr
YmFja10oKTsKPiA+ICAxKSAgIDEuOTAyIHVzICAgIHwgICAgICB4ZW5fYmxrYmtfbWFwIFt4ZW5f
YmxrYmFja10oKTsKPiA+ICAxKSAgIDcuMjc4IHVzICAgIHwgICAgfQo+ID4gIDEpICEgMjgzLjgw
MSB1cyAgfCAgfQo+ID4gIDEpICAgICAgICAgICAgICAgfCAgX19kb19ibG9ja19pb19vcCBbeGVu
X2Jsa2JhY2tdKCkgewo+ID4gIDEpICAgICAgICAgICAgICAgfCAgICBkaXNwYXRjaF9yd19ibG9j
a19pbyBbeGVuX2Jsa2JhY2tdKCkgewo+ID4gIDEpICAgMC4xNjcgdXMgICAgfCAgICAgIHhlbl92
YmRfdHJhbnNsYXRlIFt4ZW5fYmxrYmFja10oKTsKPiA+ICAxKSAgIDIuNzg2IHVzICAgIHwgICAg
ICB4ZW5fYmxrYmtfbWFwIFt4ZW5fYmxrYmFja10oKTsKPiA+ICAxKSAgIDkuNjM3IHVzICAgIHwg
ICAgfQo+ID4gIDEpICsgNDEuNjkxIHVzICAgfCAgfQo+ID4gIDEpICAgICAgICAgICAgICAgfCAg
X19kb19ibG9ja19pb19vcCBbeGVuX2Jsa2JhY2tdKCkgewo+ID4gIDEpICAgICAgICAgICAgICAg
fCAgICBkaXNwYXRjaF9yd19ibG9ja19pbyBbeGVuX2Jsa2JhY2tdKCkgewo+ID4gIDEpICsgMTAu
NTY2IHVzICAgfCAgICAgIHhlbl9ibGtia19tYXAgW3hlbl9ibGtiYWNrXSgpOwo+ID4gIDEpICAg
ICAgICAgICAgICAgfCAgICAgIHhlbl9ibGtia191bm1hcCBbeGVuX2Jsa2JhY2tdKCkgewo+ID4g
IDEpICAgMC4xOTUgdXMgICAgfCAgICAgICAgeGVuX2Jsa2JrX3VubWFwX3ByZXBhcmUgW3hlbl9i
bGtiYWNrXSgpOwo+ID4gIDEpICAgNC42OTEgdXMgICAgfCAgICAgIH0KPiA+ICAxKSAgIDAuNzM2
IHVzICAgIHwgICAgICB4ZW5fdmJkX3RyYW5zbGF0ZSBbeGVuX2Jsa2JhY2tdKCk7Cj4gPiAgMSkg
KyA1Ny44OTcgdXMgICB8ICAgICAgeGVuX2Jsa2JrX21hcCBbeGVuX2Jsa2JhY2tdKCk7Cj4gPiAg
MSkgKyA5NC4xODYgdXMgICB8ICAgIH0KPiA+ICAxKSArIDk2LjY1OCB1cyAgIHwgIH0KPiA+ICAy
KSAgICAgICAgICAgICAgIHwgIF9fZG9fYmxvY2tfaW9fb3AgW3hlbl9ibGtiYWNrXSgpIHsKPiA+
ICAyKSAgICAgICAgICAgICAgIHwgICAgZGlzcGF0Y2hfcndfYmxvY2tfaW8gW3hlbl9ibGtiYWNr
XSgpIHsKPiA+ICAyKSAgIDAuNDQxIHVzICAgIHwgICAgICB4ZW5fdmJkX3RyYW5zbGF0ZSBbeGVu
X2Jsa2JhY2tdKCk7Cj4gPiAgMikgICA4LjY1NiB1cyAgICB8ICAgICAgeGVuX2Jsa2JrX21hcCBb
eGVuX2Jsa2JhY2tdKCk7Cj4gPiAgMikgKyAxOC44ODEgdXMgICB8ICAgIH0KPiA+ICAyKSArIDQ2
Ljk2MSB1cyAgIHwgIH0KPiA+ICAyKSAgICAgICAgICAgICAgIHwgIF9fZG9fYmxvY2tfaW9fb3Ag
W3hlbl9ibGtiYWNrXSgpIHsKPiA+ICAyKSAgICAgICAgICAgICAgIHwgICAgZGlzcGF0Y2hfcndf
YmxvY2tfaW8gW3hlbl9ibGtiYWNrXSgpIHsKPiA+ICAyKSAgIDAuNDk1IHVzICAgIHwgICAgICB4
ZW5fdmJkX3RyYW5zbGF0ZSBbeGVuX2Jsa2JhY2tdKCk7Cj4gPiAgMikgICA3LjYxNCB1cyAgICB8
ICAgICAgeGVuX2Jsa2JrX21hcCBbeGVuX2Jsa2JhY2tdKCk7Cj4gPiAgMikgKyAyMy41MTggdXMg
ICB8ICAgIH0KPiA+ICAyKSArIDI1Ljk4MCB1cyAgIHwgIH0KPiA+ICAyKSAgICAgICAgICAgICAg
IHwgIF9fZG9fYmxvY2tfaW9fb3AgW3hlbl9ibGtiYWNrXSgpIHsKPiA+ICAyKSAgICAgICAgICAg
ICAgIHwgICAgZGlzcGF0Y2hfcndfYmxvY2tfaW8gW3hlbl9ibGtiYWNrXSgpIHsKPiA+ICAyKSAg
IDAuNDc5IHVzICAgIHwgICAgICB4ZW5fdmJkX3RyYW5zbGF0ZSBbeGVuX2Jsa2JhY2tdKCk7Cj4g
PiAgMikgICA1Ljg3MiB1cyAgICB8ICAgICAgeGVuX2Jsa2JrX21hcCBbeGVuX2Jsa2JhY2tdKCk7
Cj4gPiAgMikgKyAxNS44MzEgdXMgICB8ICAgIH0KPiA+ICAyKSArIDE4LjUyMSB1cyAgIHwgIH0K
PiA+ICAyKSAgICAgICAgICAgICAgIHwgIF9fZG9fYmxvY2tfaW9fb3AgW3hlbl9ibGtiYWNrXSgp
IHsKPiA+ICAyKSAgICAgICAgICAgICAgIHwgICAgZGlzcGF0Y2hfcndfYmxvY2tfaW8gW3hlbl9i
bGtiYWNrXSgpIHsKPiA+ICAyKSAgIDAuNDczIHVzICAgIHwgICAgICB4ZW5fdmJkX3RyYW5zbGF0
ZSBbeGVuX2Jsa2JhY2tdKCk7Cj4gPiAgMikgICA4LjcyNCB1cyAgICB8ICAgICAgeGVuX2Jsa2Jr
X21hcCBbeGVuX2Jsa2JhY2tdKCk7Cj4gPiAgMikgKyAyMy4yNzUgdXMgICB8ICAgIH0KPiA+ICAy
KSArIDI5LjMzMyB1cyAgIHwgIH0KPiA+IAo+ID4gCj4gPiBfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fXwo+ID4gd2luLXB2LWRldmVsIG1haWxpbmcgbGlzdAo+
ID4gd2luLXB2LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCj4gPiBodHRwczovL2xpc3RzLnhl
bnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vd2luLXB2LWRldmVsCgotLSAKLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCkphbWVzIERpbmd3YWxsCmU6IGphbWVzQGRpbmd3YWxsLm1lLnVrCnc6IGh0dHA6Ly93
d3cuZGluZ3dhbGwubWUudWsvCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18Kd2luLXB2LWRldmVsIG1haWxpbmcgbGlzdAp3aW4t
cHYtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9y
Zy9tYWlsbWFuL2xpc3RpbmZvL3dpbi1wdi1kZXZlbA==

From win-pv-devel-bounces@lists.xenproject.org Tue May 29 10:07:51 2018
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 29 May 2018 10:07:51 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1fNbXh-0002cH-0o; Tue, 29 May 2018 10:07:49 +0000
Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <srs0=z+p9=iq=citrix.com=prvs=680118468=owen.smith@srs-us1.protection.inumbo.net>)
 id 1fNbXf-0002c2-GD
 for win-pv-devel@lists.xenproject.org; Tue, 29 May 2018 10:07:47 +0000
X-Inumbo-ID: d9055dc9-6327-11e8-9728-bc764e045a96
Received: from SMTP03.CITRIX.COM (unknown [162.221.156.55])
 by us1-rack-dfw2.inumbo.com (Halon) with ESMTPS
 id d9055dc9-6327-11e8-9728-bc764e045a96;
 Tue, 29 May 2018 12:05:43 +0200 (CEST)
X-IronPort-AV: E=Sophos;i="5.49,455,1520899200"; d="scan'208";a="55794478"
From: Owen Smith <owen.smith@citrix.com>
To: <win-pv-devel@lists.xenproject.org>
Date: Tue, 29 May 2018 11:07:12 +0100
Message-ID: <20180529100717.8340-5-owen.smith@citrix.com>
X-Mailer: git-send-email 2.16.2.windows.1
In-Reply-To: <20180529100717.8340-1-owen.smith@citrix.com>
References: <20180529100717.8340-1-owen.smith@citrix.com>
MIME-Version: 1.0
Subject: [win-pv-devel] [PATCH 4/9] Dont close ring during FrontendReset
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Owen Smith <owen.smith@citrix.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>

Q2xvc2luZyB0aGUgcmluZyAoYW5kIGRlc3Ryb3lpbmcgdGhlIHNoYXJlZCBwYWdlcywgZXRjKSBp
cyBub3QgcmVxdWlyZWQKd2hlbiBhIEh3U3RvclJlc2V0QnVzIG9yIFNSQl9GVU5DVElPTl9SRVNF
VF9ERVZJQ0UgaXMgdHJpZ2dlcmVkLgpEaXNhYmxpbmcgdGhlIHJpbmcgd2lsbCBjYXVzZSBhbnkg
b3V0c3RhbmRpbmcgYmxraWZfcmVxdWVzdHMgYW5kIFNSQnMgdG8KYmUgZmFpbGVkLgoKU2lnbmVk
LW9mZi1ieTogT3dlbiBTbWl0aCA8b3dlbi5zbWl0aEBjaXRyaXguY29tPgotLS0KIHNyYy94ZW52
YmQvZnJvbnRlbmQuYyB8IDcgKysrLS0tLQogMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygr
KSwgNCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMveGVudmJkL2Zyb250ZW5kLmMgYi9z
cmMveGVudmJkL2Zyb250ZW5kLmMKaW5kZXggNDdkNzQ0Yi4uOTAwYWQyYiAxMDA2NDQKLS0tIGEv
c3JjL3hlbnZiZC9mcm9udGVuZC5jCisrKyBiL3NyYy94ZW52YmQvZnJvbnRlbmQuYwpAQCAtMTg0
NiwxNyArMTg0NiwxNiBAQCBGcm9udGVuZFJlc2V0KAogICAgIElOICBQWEVOVkJEX0ZST05URU5E
ICAgIEZyb250ZW5kCiAgICAgKQogewotICAgIFhFTlZCRF9TVEFURSAgICAgICAgICAgIFByZXZp
b3VzU3RhdGUgPSBGcm9udGVuZC0+U3RhdGU7CiAgICAgTlRTVEFUVVMgICAgICAgICAgICAgICAg
c3RhdHVzOwogCi0gICAgaWYgKFByZXZpb3VzU3RhdGUgIT0gWEVOVkJEX0VOQUJMRUQpCisgICAg
aWYgKEZyb250ZW5kLT5TdGF0ZSAhPSBYRU5WQkRfRU5BQkxFRCkKICAgICAgICAgZ290byBkb25l
OwogCi0gICAgc3RhdHVzID0gRnJvbnRlbmRTZXRTdGF0ZShGcm9udGVuZCwgWEVOVkJEX0NMT1NF
RCk7CisgICAgc3RhdHVzID0gRnJvbnRlbmRTZXRTdGF0ZShGcm9udGVuZCwgWEVOVkJEX0NPTk5F
Q1RFRCk7CiAgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpCiAgICAgICAgIGdvdG8gZmFpbDE7
CiAKLSAgICBzdGF0dXMgPSBGcm9udGVuZFNldFN0YXRlKEZyb250ZW5kLCBQcmV2aW91c1N0YXRl
KTsKKyAgICBzdGF0dXMgPSBGcm9udGVuZFNldFN0YXRlKEZyb250ZW5kLCBYRU5WQkRfRU5BQkxF
RCk7CiAgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpCiAgICAgICAgIGdvdG8gZmFpbDI7CiAK
LS0gCjIuMTYuMi53aW5kb3dzLjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fXwp3aW4tcHYtZGV2ZWwgbWFpbGluZyBsaXN0Cndpbi1wdi1kZXZlbEBsaXN0
cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlz
dGluZm8vd2luLXB2LWRldmVs

From win-pv-devel-bounces@lists.xenproject.org Tue May 29 10:07:51 2018
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 29 May 2018 10:07:51 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1fNbXh-0002cM-2K; Tue, 29 May 2018 10:07:49 +0000
Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <srs0=z+p9=iq=citrix.com=prvs=680118468=owen.smith@srs-us1.protection.inumbo.net>)
 id 1fNbXf-0002c3-IE
 for win-pv-devel@lists.xenproject.org; Tue, 29 May 2018 10:07:47 +0000
X-Inumbo-ID: d830bd14-6327-11e8-9728-bc764e045a96
Received: from SMTP03.CITRIX.COM (unknown [162.221.156.55])
 by us1-rack-dfw2.inumbo.com (Halon) with ESMTPS
 id d830bd14-6327-11e8-9728-bc764e045a96;
 Tue, 29 May 2018 12:05:42 +0200 (CEST)
X-IronPort-AV: E=Sophos;i="5.49,455,1520899200"; d="scan'208";a="55794477"
From: Owen Smith <owen.smith@citrix.com>
To: <win-pv-devel@lists.xenproject.org>
Date: Tue, 29 May 2018 11:07:08 +0100
Message-ID: <20180529100717.8340-1-owen.smith@citrix.com>
X-Mailer: git-send-email 2.16.2.windows.1
MIME-Version: 1.0
Subject: [win-pv-devel] [PATCH 0/9] Implement VBD multi-queue
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Owen Smith <owen.smith@citrix.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>

VGhpcyBzZXJpZXMgYWRkcyBzdXBwb3J0IGZvciBWQkQgbXVsdGktcXVldWUgYXMgZGVmaW5lZCBi
eSB0aGUgdXBkYXRlZApibGtpZi5oCgpNdWx0aS1xdWV1ZSB3aWxsIHNwbGl0IHRoZSBpbmNvbW1p
bmcgU1JCIHJlcXVlc3RzIGludG8gc2VwZXJhdGUgc2hhcmVkCnJpbmdzLCBhdHRlbXB0aW5nIHRv
IGtlZXAgcHJvY2Vzc2luZyBvbiBhIHNpbmdsZSB2Q1BVLiBUaHMgYmFja2VuZCBzaG91bGQKdXNl
IHRoaXMgcGVyLXByb2Nlc3NvciBzaGFyZWQgcmluZyB0byBkaXJlY3QgcmVxdWVzdHMgaW50byB0
aGUgbXVsdGktcXVldWUKYmxvY2sgbGF5ZXIgKGJsay1tcSkgdG8gaW1wcm92ZSBzY2FsYWJpbGl0
eS4gUGFydCBvZiB0aGUgY2hhbmdlcyBpbnZvbHZlcwpyZWR1Y2luZyB0aGUgdXNhZ2Ugb2Ygc3Bp
bmxvY2tzIG9uIHRoZSBob3QtcGF0aC4KClRoZSBpbXBsZW1lbnRhdGlvbiBjaGFuZ2VzIHRvIHRo
ZSByaW5nJ3MgcHJvY2Vzc2luZyBhbGdvcml0aG0gaGFzIHNob3duIApzb21lIGltcHJvdmVtZW50
cywgYnV0IHRoaXMgZG9lcyBub3Qgc2NhbGUgd2l0aCBudW1iZXIgb2YgcXVldWVzIChpLmUuIHVz
aW5nCnRoaXMgcGF0Y2ggc2VyaWVzIHdpdGggYSBzaW5nbGUgcXVldWUgc2hvd3MgYW4gaW1wcm92
bWVudCwgYnV0IGFkZGluZyBtb3JlCnF1ZXVlcyBkb2VzIG5vdCBzaG93IGFueSBkaWZmZXJlbmNl
cyBvdXRzaWRlIG9mIHNhbXBsaW5nIG5vaXNlKS4KCk93ZW4gU21pdGggKDkpOgogIFVwZGF0ZSBi
bGtpZi5oIHRvIHVwc3RyZWFtCiAgUXVlcnkgIm11bHRpLXF1ZXVlLW1heC1xdWV1ZXMiCiAgUmVt
b3ZlIFJpbmdUcmlnZ2VyCiAgRG9udCBjbG9zZSByaW5nIGR1cmluZyBGcm9udGVuZFJlc2V0CiAg
Rm9yY2Ugc2luZ2xlIHF1ZXVlIGluIGNyYXNoL2hpYmVybmF0ZSBwYXRoCiAgSW1wbGVtZW50IG11
bHRpLXF1ZXVlcwogIFJlbW92ZSBxdWV1ZS5oLy5jCiAgTW92ZSBxdWVyeSBvZiAibXVsdGktcXVl
dWUtbWF4LXF1ZXVlcyIgdG8gZHJpdmVyLmMKICBTZXQgU3RvclBvcnRJbml0aWFsaXplUGVyZk9w
dHMKCiBpbmNsdWRlL3hlbi9pby9ibGtpZi5oICAgICAgIHwgMTEwMCArKysrKysrKy0tLS0tLS0K
IHNyYy94ZW5jcnNoL2Zyb250ZW5kLmMgICAgICAgfCAgICAyICsKIHNyYy94ZW52YmQvYWRhcHRl
ci5jICAgICAgICAgfCAgIDU2ICsKIHNyYy94ZW52YmQvZHJpdmVyLmMgICAgICAgICAgfCAgIDI1
ICstCiBzcmMveGVudmJkL2RyaXZlci5oICAgICAgICAgIHwgICAgNiArCiBzcmMveGVudmJkL2Zy
b250ZW5kLmMgICAgICAgIHwgIDI2MSArKy0tCiBzcmMveGVudmJkL2Zyb250ZW5kLmggICAgICAg
IHwgICAgMiArCiBzcmMveGVudmJkL3F1ZXVlLmMgICAgICAgICAgIHwgIDEzOSAtLQogc3JjL3hl
bnZiZC9xdWV1ZS5oICAgICAgICAgICB8ICAgODYgLS0KIHNyYy94ZW52YmQvcmluZy5jICAgICAg
ICAgICAgfCAzMTA2ICsrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLQog
c3JjL3hlbnZiZC9yaW5nLmggICAgICAgICAgICB8ICAgIDUgLQogc3JjL3hlbnZiZC90YXJnZXQu
YyAgICAgICAgICB8ICAgIDEgLQogdnMyMDE1L3hlbnZiZC94ZW52YmQudmN4cHJvaiB8ICAgIDEg
LQogdnMyMDE3L3hlbnZiZC94ZW52YmQudmN4cHJvaiB8ICAgIDEgLQogMTQgZmlsZXMgY2hhbmdl
ZCwgMjY4NiBpbnNlcnRpb25zKCspLCAyMTA1IGRlbGV0aW9ucygtKQogZGVsZXRlIG1vZGUgMTAw
NjQ0IHNyYy94ZW52YmQvcXVldWUuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IHNyYy94ZW52YmQvcXVl
dWUuaAoKLS0gCjIuMTYuMi53aW5kb3dzLjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fXwp3aW4tcHYtZGV2ZWwgbWFpbGluZyBsaXN0Cndpbi1wdi1kZXZl
bEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxt
YW4vbGlzdGluZm8vd2luLXB2LWRldmVs

From win-pv-devel-bounces@lists.xenproject.org Tue May 29 10:07:51 2018
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 29 May 2018 10:07:51 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1fNbXh-0002cR-3s; Tue, 29 May 2018 10:07:49 +0000
Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <srs0=z+p9=iq=citrix.com=prvs=680118468=owen.smith@srs-us1.protection.inumbo.net>)
 id 1fNbXg-0002cC-0H
 for win-pv-devel@lists.xenproject.org; Tue, 29 May 2018 10:07:48 +0000
X-Inumbo-ID: d8e2a821-6327-11e8-9728-bc764e045a96
Received: from SMTP03.CITRIX.COM (unknown [162.221.156.55])
 by us1-rack-dfw2.inumbo.com (Halon) with ESMTPS
 id d8e2a821-6327-11e8-9728-bc764e045a96;
 Tue, 29 May 2018 12:05:43 +0200 (CEST)
X-IronPort-AV: E=Sophos;i="5.49,455,1520899200"; d="scan'208";a="55794480"
From: Owen Smith <owen.smith@citrix.com>
To: <win-pv-devel@lists.xenproject.org>
Date: Tue, 29 May 2018 11:07:11 +0100
Message-ID: <20180529100717.8340-4-owen.smith@citrix.com>
X-Mailer: git-send-email 2.16.2.windows.1
In-Reply-To: <20180529100717.8340-1-owen.smith@citrix.com>
References: <20180529100717.8340-1-owen.smith@citrix.com>
MIME-Version: 1.0
Subject: [win-pv-devel] [PATCH 3/9] Remove RingTrigger
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Owen Smith <owen.smith@citrix.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>

UmluZ1RyaWdnZXIgY2FsbHMgWEVOQlVTX0VWVENITihUcmlnZ2VyLi4pIG9uIGR1cmluZyB0aGUg
c3VzcGVuZApjYWxsYmFjay4gSnVzdCBiZWZvcmUgdGhpcywgdGhlIHJpbmcgaXMgcmVjcmVhdGVk
IGFuZCBlbmFibGVkLCB3aGljaAphbHNvIGNhbGxzIFhFTkJVU19FVlRDSE4oVHJpZ2dlci4uKS4g
VGhlIGV4cGxpY2l0IGNhbGwgUmluZ1RyaWdnZXIgaXMKdW5uZWNjZXNzYXJ5CgpTaWduZWQtb2Zm
LWJ5OiBPd2VuIFNtaXRoIDxvd2VuLnNtaXRoQGNpdHJpeC5jb20+Ci0tLQogc3JjL3hlbnZiZC9m
cm9udGVuZC5jIHwgIDIgLS0KIHNyYy94ZW52YmQvcmluZy5jICAgICB8IDEzIC0tLS0tLS0tLS0t
LS0KIHNyYy94ZW52YmQvcmluZy5oICAgICB8ICA1IC0tLS0tCiAzIGZpbGVzIGNoYW5nZWQsIDIw
IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy94ZW52YmQvZnJvbnRlbmQuYyBiL3NyYy94
ZW52YmQvZnJvbnRlbmQuYwppbmRleCBkYjk2YTM2Li40N2Q3NDRiIDEwMDY0NAotLS0gYS9zcmMv
eGVudmJkL2Zyb250ZW5kLmMKKysrIGIvc3JjL3hlbnZiZC9mcm9udGVuZC5jCkBAIC0xNTk1LDgg
KzE1OTUsNiBAQCBGcm9udGVuZFN1c3BlbmRDYWxsYmFjaygKICAgICAgICAgQVNTRVJUKEZBTFNF
KTsKICAgICB9CiAKLSAgICBSaW5nVHJpZ2dlcihGcm9udGVuZC0+UmluZyk7Ci0KICAgICBWZXJi
b3NlKCJUYXJnZXRbJWRdIDogPD09PSByZXN0b3JlZCAlc1xuIiwgRnJvbnRlbmQtPlRhcmdldElk
LCBfX1hlbnZiZFN0YXRlTmFtZShGcm9udGVuZC0+U3RhdGUpKTsKIH0KIApkaWZmIC0tZ2l0IGEv
c3JjL3hlbnZiZC9yaW5nLmMgYi9zcmMveGVudmJkL3JpbmcuYwppbmRleCAzM2IzNDZkLi5lNDFj
MWI3IDEwMDY0NAotLS0gYS9zcmMveGVudmJkL3JpbmcuYworKysgYi9zcmMveGVudmJkL3Jpbmcu
YwpAQCAtMjAzNywxOSArMjAzNyw2IEBAIFJpbmdEaXNjb25uZWN0KAogICAgIFJpbmctPlJlY2Vp
dmVkID0gMDsKIH0KIAotVk9JRAotUmluZ1RyaWdnZXIoCi0gICAgSU4gIFBYRU5WQkRfUklORyAg
ICBSaW5nCi0gICAgKQotewotICAgIGlmICghUmluZy0+RW5hYmxlZCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgWEVOQlVTX0VWVENITihUcmlnZ2VyLAotICAgICAgICAgICAgICAgICAgJlJpbmct
PkV2dGNobkludGVyZmFjZSwKLSAgICAgICAgICAgICAgICAgIFJpbmctPkNoYW5uZWwpOwotfQot
CiBCT09MRUFOCiBSaW5nUXVldWVSZXF1ZXN0KAogICAgIElOICBQWEVOVkJEX1JJTkcgICAgUmlu
ZywKZGlmZiAtLWdpdCBhL3NyYy94ZW52YmQvcmluZy5oIGIvc3JjL3hlbnZiZC9yaW5nLmgKaW5k
ZXggOWI4YTU4Ny4uZTMzMDllMiAxMDA2NDQKLS0tIGEvc3JjL3hlbnZiZC9yaW5nLmgKKysrIGIv
c3JjL3hlbnZiZC9yaW5nLmgKQEAgLTc0LDExICs3NCw2IEBAIFJpbmdEaXNjb25uZWN0KAogICAg
IElOICBQWEVOVkJEX1JJTkcgICAgUmluZwogICAgICk7CiAKLWV4dGVybiBWT0lECi1SaW5nVHJp
Z2dlcigKLSAgICBJTiAgUFhFTlZCRF9SSU5HICAgIFJpbmcKLSAgICApOwotCiBleHRlcm4gQk9P
TEVBTgogUmluZ1F1ZXVlUmVxdWVzdCgKICAgICBJTiAgUFhFTlZCRF9SSU5HICAgIFJpbmcsCi0t
IAoyLjE2LjIud2luZG93cy4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX18Kd2luLXB2LWRldmVsIG1haWxpbmcgbGlzdAp3aW4tcHYtZGV2ZWxAbGlzdHMu
eGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3Rp
bmZvL3dpbi1wdi1kZXZlbA==

From win-pv-devel-bounces@lists.xenproject.org Tue May 29 10:07:51 2018
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 29 May 2018 10:07:51 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1fNbXj-0002dK-5E; Tue, 29 May 2018 10:07:51 +0000
Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <srs0=z+p9=iq=citrix.com=prvs=680118468=owen.smith@srs-us1.protection.inumbo.net>)
 id 1fNbXh-0002cW-91
 for win-pv-devel@lists.xenproject.org; Tue, 29 May 2018 10:07:49 +0000
X-Inumbo-ID: d9732e30-6327-11e8-9728-bc764e045a96
Received: from SMTP03.CITRIX.COM (unknown [162.221.156.55])
 by us1-rack-dfw2.inumbo.com (Halon) with ESMTPS
 id d9732e30-6327-11e8-9728-bc764e045a96;
 Tue, 29 May 2018 12:05:43 +0200 (CEST)
X-IronPort-AV: E=Sophos;i="5.49,455,1520899200"; d="scan'208";a="55794484"
From: Owen Smith <owen.smith@citrix.com>
To: <win-pv-devel@lists.xenproject.org>
Date: Tue, 29 May 2018 11:07:10 +0100
Message-ID: <20180529100717.8340-3-owen.smith@citrix.com>
X-Mailer: git-send-email 2.16.2.windows.1
In-Reply-To: <20180529100717.8340-1-owen.smith@citrix.com>
References: <20180529100717.8340-1-owen.smith@citrix.com>
MIME-Version: 1.0
Subject: [win-pv-devel] [PATCH 2/9] Query "multi-queue-max-queues"
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Owen Smith <owen.smith@citrix.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>

UXVlcnkgIm11bHRpLXF1ZXVlLW1heC1xdWV1ZXMiLCBhbmQgb3ZlcnJpZGUgaWYgbmVjY2Vzc2Fy
eSwgYW5kIHdvcmsKb3V0IGEgc3VpdGFibGUgdmFsdWUgZm9yIHRoZSBudW1iZXIgb2YgcXVldWVz
IHVzZWQuIEFsc28gYWRkcyB0aGUKY29tbWVudGVkIG91dCB3cml0aW5nIGNvZGUgdG8gc2V0ICJt
dWx0aS1xdWV1ZS1udW0tcXVldWVzIgoKU2lnbmVkLW9mZi1ieTogT3dlbiBTbWl0aCA8b3dlbi5z
bWl0aEBjaXRyaXguY29tPgotLS0KIHNyYy94ZW52YmQvZHJpdmVyLmMgICB8ICAgMyArLQogc3Jj
L3hlbnZiZC9kcml2ZXIuaCAgIHwgICAxICsKIHNyYy94ZW52YmQvZnJvbnRlbmQuYyB8IDI3MCAr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLQogc3JjL3hl
bnZiZC9mcm9udGVuZC5oIHwgICAyICsKIDQgZmlsZXMgY2hhbmdlZCwgMTg0IGluc2VydGlvbnMo
KyksIDkyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy94ZW52YmQvZHJpdmVyLmMgYi9z
cmMveGVudmJkL2RyaXZlci5jCmluZGV4IDU5YjM4MGMuLjJlOWJhNTQgMTAwNjQ0Ci0tLSBhL3Ny
Yy94ZW52YmQvZHJpdmVyLmMKKysrIGIvc3JjL3hlbnZiZC9kcml2ZXIuYwpAQCAtMjY3LDcgKzI2
Nyw4IEBAIF9fRHJpdmVySW5pdGlhbGl6ZU92ZXJyaWRlcygKICAgICAgICAgICAgICAgeyAiZGlz
Y2FyZC1zZWN1cmUiLCBGZWF0dXJlRGlzY2FyZFNlY3VyZSB9LAogICAgICAgICAgICAgICB7ICJk
aXNjYXJkLWFsaWdubWVudCIsIEZlYXR1cmVEaXNjYXJkQWxpZ25tZW50IH0sCiAgICAgICAgICAg
ICAgIHsgImRpc2NhcmQtZ3JhbnVsYXJpdHkiLCBGZWF0dXJlRGlzY2FyZEdyYW51bGFyaXR5IH0s
Ci0gICAgICAgICAgICAgIHsgIm1heC1yaW5nLXBhZ2Utb3JkZXIiLCBGZWF0dXJlTWF4UmluZ1Bh
Z2VPcmRlciB9CisgICAgICAgICAgICAgIHsgIm1heC1yaW5nLXBhZ2Utb3JkZXIiLCBGZWF0dXJl
TWF4UmluZ1BhZ2VPcmRlciB9LAorICAgICAgICAgICAgICB7ICJtdWx0aS1xdWV1ZS1tYXgtcXVl
dWVzIiwgRmVhdHVyZU11bHRpUXVldWVNYXhRdWV1ZXMgfQogICAgICAgICAgIH07CiAKICAgICBm
b3IgKEluZGV4ID0gMDsgSW5kZXggPCBBUlJBWVNJWkUoTWFwcGluZyk7IEluZGV4KyspIHsKZGlm
ZiAtLWdpdCBhL3NyYy94ZW52YmQvZHJpdmVyLmggYi9zcmMveGVudmJkL2RyaXZlci5oCmluZGV4
IGQ5OWMwOWEuLjVhMjRjNGEgMTAwNjQ0Ci0tLSBhL3NyYy94ZW52YmQvZHJpdmVyLmgKKysrIGIv
c3JjL3hlbnZiZC9kcml2ZXIuaApAQCAtODAsNiArODAsNyBAQCB0eXBlZGVmIGVudW0gX1hFTlZC
RF9GRUFUVVJFIHsKICAgICBGZWF0dXJlRGlzY2FyZEFsaWdubWVudCwKICAgICBGZWF0dXJlRGlz
Y2FyZEdyYW51bGFyaXR5LAogICAgIEZlYXR1cmVNYXhSaW5nUGFnZU9yZGVyLAorICAgIEZlYXR1
cmVNdWx0aVF1ZXVlTWF4UXVldWVzLAogCiAgICAgLy8gQWRkIGFueSBuZXcgZmVhdHVyZXMgYmVm
b3JlIHRoaXMgZW51bQogICAgIE51bWJlck9mRmVhdHVyZXMKZGlmZiAtLWdpdCBhL3NyYy94ZW52
YmQvZnJvbnRlbmQuYyBiL3NyYy94ZW52YmQvZnJvbnRlbmQuYwppbmRleCBiN2U2MWMyLi5kYjk2
YTM2IDEwMDY0NAotLS0gYS9zcmMveGVudmJkL2Zyb250ZW5kLmMKKysrIGIvc3JjL3hlbnZiZC9m
cm9udGVuZC5jCkBAIC03NCw2ICs3NCw4IEBAIHN0cnVjdCBfWEVOVkJEX0ZST05URU5EIHsKICAg
ICBYRU5WQkRfRElTS0lORk8gICAgICAgICAgICAgRGlza0luZm87CiAgICAgWEVOVkJEX1BBR0Ug
ICAgICAgICAgICAgICAgIFBhZ2U4MDsKICAgICBYRU5WQkRfUEFHRSAgICAgICAgICAgICAgICAg
UGFnZTgzOworICAgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICBNYXhRdWV1ZXM7CisgICAg
VUxPTkcgICAgICAgICAgICAgICAgICAgICAgIE51bVF1ZXVlczsKIAogICAgIC8vIEludGVyZmFj
ZXMgdG8gWGVuQnVzCiAgICAgWEVOQlVTX1NUT1JFX0lOVEVSRkFDRSAgICAgIFN0b3JlSW50ZXJm
YWNlOwpAQCAtMTExLDYgKzExMywxMDEgQEAgX19YZW52YmRTdGF0ZU5hbWUoCiAgICAgZGVmYXVs
dDogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIlVOS05PV04iOwogICAgIH0KIH0KKwor
CisjZGVmaW5lIEZST05URU5EX0dFVF9QUk9QRVJUWShfbmFtZSwgX3R5cGUpICAgICBcCitzdGF0
aWMgRk9SQ0VJTkxJTkUgX3R5cGUgICAgICAgICAgICAgICAgICAgICAgICBcCitfX0Zyb250ZW5k
R2V0ICMjIF9uYW1lICMjICggICAgICAgICAgICAgICAgICAgICBcCisgICAgSU4gIFBYRU5WQkRf
RlJPTlRFTkQgICAgRnJvbnRlbmQgICAgICAgICAgICBcCisgICAgKSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgcmV0dXJuIEZyb250ZW5kLT4gIyMgX25hbWUgIyMg
OyAgICAgICAgICAgICBcCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCitfdHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCitGcm9udGVuZEdldCAjIyBfbmFtZSAjIyAoICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgSU4gIFBYRU5WQkRfRlJPTlRFTkQgICAgRnJvbnRlbmQgICAgICAgICAgICBcCisgICAgKSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcmV0dXJuIF9fRnJvbnRl
bmRHZXQgIyMgX25hbWUgIyMgKEZyb250ZW5kKTtcCit9CisKK0ZST05URU5EX0dFVF9QUk9QRVJU
WShUYXJnZXQsIFBYRU5WQkRfVEFSR0VUKQorRlJPTlRFTkRfR0VUX1BST1BFUlRZKFJpbmcsIFBY
RU5WQkRfUklORykKK0ZST05URU5EX0dFVF9QUk9QRVJUWShHcmFudGVyLCBQWEVOVkJEX0dSQU5U
RVIpCitGUk9OVEVORF9HRVRfUFJPUEVSVFkoVGFyZ2V0SWQsIFVMT05HKQorRlJPTlRFTkRfR0VU
X1BST1BFUlRZKERldmljZUlkLCBVTE9ORykKK0ZST05URU5EX0dFVF9QUk9QRVJUWShCYWNrZW5k
RG9tYWluLCBVTE9ORykKK0ZST05URU5EX0dFVF9QUk9QRVJUWShCYWNrZW5kUGF0aCwgUENIQVIp
CitGUk9OVEVORF9HRVRfUFJPUEVSVFkoRnJvbnRlbmRQYXRoLCBQQ0hBUikKKy8vRlJPTlRFTkRf
R0VUX1BST1BFUlRZKENhcHMsIFBYRU5WQkRfQ0FQUykKK1BYRU5WQkRfQ0FQUworRnJvbnRlbmRH
ZXRDYXBzKAorICAgIElOICBQWEVOVkJEX0ZST05URU5EICAgIEZyb250ZW5kCisgICAgKQorewor
ICAgIHJldHVybiAmRnJvbnRlbmQtPkNhcHM7Cit9CisvL0ZST05URU5EX0dFVF9QUk9QRVJUWShG
ZWF0dXJlcywgUFhFTlZCRF9GRUFUVVJFUykKK1BYRU5WQkRfRkVBVFVSRVMKK0Zyb250ZW5kR2V0
RmVhdHVyZXMoCisgICAgSU4gIFBYRU5WQkRfRlJPTlRFTkQgICAgRnJvbnRlbmQKKyAgICApCit7
CisgICAgcmV0dXJuICZGcm9udGVuZC0+RmVhdHVyZXM7Cit9CisvL0ZST05URU5EX0dFVF9QUk9Q
RVJUWShEaXNrSW5mbywgUFhFTlZCRF9ESVNLSU5GTykKK1BYRU5WQkRfRElTS0lORk8KK0Zyb250
ZW5kR2V0RGlza0luZm8oCisgICAgSU4gIFBYRU5WQkRfRlJPTlRFTkQgICAgRnJvbnRlbmQKKyAg
ICApCit7CisgICAgcmV0dXJuICZGcm9udGVuZC0+RGlza0luZm87Cit9CisvL0ZST05URU5EX0dF
VF9QUk9QRVJUWShDb25uZWN0ZWQsIEJPT0xFQU4pCitCT09MRUFOCitGcm9udGVuZEdldENvbm5l
Y3RlZCgKKyAgICBJTiAgUFhFTlZCRF9GUk9OVEVORCAgICBGcm9udGVuZAorICAgICkKK3sKKyAg
ICByZXR1cm4gRnJvbnRlbmQtPkNhcHMuQ29ubmVjdGVkOworfQorLy9GUk9OVEVORF9HRVRfUFJP
UEVSVFkoUmVhZE9ubHksIEJPT0xFQU4pCitCT09MRUFOCitGcm9udGVuZEdldFJlYWRPbmx5KAor
ICAgIElOICBQWEVOVkJEX0ZST05URU5EICAgIEZyb250ZW5kCisgICAgKQoreworICAgIHJldHVy
biAhIShGcm9udGVuZC0+RGlza0luZm8uRGlza0luZm8gJiBWRElTS19SRUFET05MWSk7Cit9Cisv
L0ZST05URU5EX0dFVF9QUk9QRVJUWShEaXNjYXJkLCBCT09MRUFOKQorQk9PTEVBTgorRnJvbnRl
bmRHZXREaXNjYXJkKAorICAgIElOICBQWEVOVkJEX0ZST05URU5EICAgIEZyb250ZW5kCisgICAg
KQoreworICAgIHJldHVybiBGcm9udGVuZC0+RGlza0luZm8uRGlzY2FyZDsKK30KKy8vRlJPTlRF
TkRfR0VUX1BST1BFUlRZKEZsdXNoQ2FjaGUsIEJPT0xFQU4pCitCT09MRUFOCitGcm9udGVuZEdl
dEZsdXNoQ2FjaGUoCisgICAgSU4gIFBYRU5WQkRfRlJPTlRFTkQgICAgRnJvbnRlbmQKKyAgICAp
Cit7CisgICAgcmV0dXJuIEZyb250ZW5kLT5EaXNrSW5mby5GbHVzaENhY2hlOworfQorLy9GUk9O
VEVORF9HRVRfUFJPUEVSVFkoQmFycmllciwgQk9PTEVBTikKK0JPT0xFQU4KK0Zyb250ZW5kR2V0
QmFycmllcigKKyAgICBJTiAgUFhFTlZCRF9GUk9OVEVORCAgICBGcm9udGVuZAorICAgICkKK3sK
KyAgICByZXR1cm4gRnJvbnRlbmQtPkRpc2tJbmZvLkJhcnJpZXI7Cit9CitGUk9OVEVORF9HRVRf
UFJPUEVSVFkoTWF4UXVldWVzLCBVTE9ORykKK0ZST05URU5EX0dFVF9QUk9QRVJUWShOdW1RdWV1
ZXMsIFVMT05HKQorCisjdW5kZWYgRlJPTlRFTkRfR0VUX1BST1BFUlRZCisKIC8vPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KICNkZWZpbmUgRlJPTlRFTkRfUE9PTF9UQUcgICAgICAgICAgICAndG5GWCcK
IF9fY2hlY2tSZXR1cm4KQEAgLTEwODEsNiArMTE3OCwzOCBAQCBmYWlsMToKICAgICBFcnJvcigi
RmFpbDEgKCUwOHgpXG4iLCBTdGF0dXMpOwogICAgIHJldHVybiBTdGF0dXM7CiB9CitzdGF0aWMg
Vk9JRAorRnJvbnRlbmRTZXROdW1RdWV1ZXMoCisgICAgSU4gIFBYRU5WQkRfRlJPTlRFTkQgICAg
RnJvbnRlbmQKKyAgICApCit7CisgICAgUENIQVIgICAgICAgICAgICAgICAgICAgQnVmZmVyOwor
ICAgIFVMT05HICAgICAgICAgICAgICAgICAgIEJhY2tlbmRNYXhRdWV1ZXM7CisgICAgTlRTVEFU
VVMgICAgICAgICAgICAgICAgc3RhdHVzOworCisgICAgc3RhdHVzID0gWEVOQlVTX1NUT1JFKFJl
YWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZGcm9udGVuZC0+U3RvcmVJbnRlcmZhY2Us
CisgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fRnJvbnRlbmRHZXRCYWNrZW5kUGF0aChGcm9udGVuZCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICJtdWx0aS1xdWV1ZS1tYXgtcXVldWVzIiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgJkJ1ZmZlcik7CisgICAgaWYgKE5UX1NVQ0NFU1Moc3RhdHVzKSkgeworICAgICAgICBC
YWNrZW5kTWF4UXVldWVzID0gKFVMT05HKXN0cnRvdWwoQnVmZmVyLCBOVUxMLCAxMCk7CisKKyAg
ICAgICAgWEVOQlVTX1NUT1JFKEZyZWUsCisgICAgICAgICAgICAgICAgICAgICAmRnJvbnRlbmQt
PlN0b3JlSW50ZXJmYWNlLAorICAgICAgICAgICAgICAgICAgICAgQnVmZmVyKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBCYWNrZW5kTWF4UXVldWVzID0gMTsKKyAgICB9CisKKyAgICBGcm9udGVu
ZC0+TnVtUXVldWVzID0gX19taW4oX19Gcm9udGVuZEdldE1heFF1ZXVlcyhGcm9udGVuZCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJhY2tlbmRNYXhRdWV1ZXMpOworCisgICAg
VmVyYm9zZSgiVGFyZ2V0WyV1XSBOdW1RdWV1ZXMgJXVcbiIsCisgICAgICAgICAgICBfX0Zyb250
ZW5kR2V0VGFyZ2V0SWQoRnJvbnRlbmQpLAorICAgICAgICAgICAgRnJvbnRlbmQtPk51bVF1ZXVl
cyk7Cit9CiBfX2Rydl9yZXF1aXJlc0lSUUwoRElTUEFUQ0hfTEVWRUwpCiBzdGF0aWMgTlRTVEFU
VVMKIEZyb250ZW5kQ29ubmVjdCgKQEAgLTEwOTAsNiArMTIxOSw4IEBAIEZyb250ZW5kQ29ubmVj
dCgKICAgICBOVFNUQVRVUyAgICAgICAgU3RhdHVzOwogICAgIFhlbmJ1c1N0YXRlICAgICBCYWNr
ZW5kU3RhdGU7CiAKKyAgICBGcm9udGVuZFNldE51bVF1ZXVlcyhGcm9udGVuZCk7CisKICAgICAv
LyBBbGxvYyBSaW5nLCBDcmVhdGUgRXZ0Y2huLCBHbnR0YWIgbWFwCiAgICAgU3RhdHVzID0gR3Jh
bnRlckNvbm5lY3QoRnJvbnRlbmQtPkdyYW50ZXIpOwogICAgIGlmICghTlRfU1VDQ0VTUyhTdGF0
dXMpKQpAQCAtMTE0Nyw2ICsxMjc4LDE2IEBAIEZyb250ZW5kQ29ubmVjdCgKICAgICAgICAgaWYg
KCFOVF9TVUNDRVNTKFN0YXR1cykpCiAgICAgICAgICAgICBnb3RvIGFib3J0OwogCisgICAgICAg
IC8vc3RhdHVzID0gWEVOQlVTX1NUT1JFKFByaW50ZiwKKyAgICAgICAgLy8gICAgICAgICAgICAg
ICAgICAgICAgJkZyb250ZW5kLT5TdG9yZUludGVyZmFjZSwKKyAgICAgICAgLy8gICAgICAgICAg
ICAgICAgICAgICAgVHJhbnNhY3Rpb24sCisgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAg
IEZyb250ZW5kLT5Gcm9udGVuZFBhdGgsCisgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAg
ICJtdWx0aS1xdWV1ZS1udW0tcXVldWVzIiwKKyAgICAgICAgLy8gICAgICAgICAgICAgICAgICAg
ICAgIiV1IiwKKyAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgX19Gcm9udGVuZEdldE51
bVF1ZXVlcyhGcm9udGVuZCkpOworICAgICAgICAvL2lmICghTlRfU1VDQ0VTUyhzdGF0dXMpKQor
ICAgICAgICAvLyAgICBnb3RvIGFib3J0OworCiAgICAgICAgIFN0YXR1cyA9IFhFTkJVU19TVE9S
RShUcmFuc2FjdGlvbkVuZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZGcm9udGVu
ZC0+U3RvcmVJbnRlcmZhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Fj
dGlvbiwKQEAgLTEyMTcsNiArMTM1OCw3IEBAIGZhaWwyOgogICAgIEdyYW50ZXJEaXNjb25uZWN0
KEZyb250ZW5kLT5HcmFudGVyKTsKIGZhaWwxOgogICAgIEVycm9yKCJGYWlsMSAoJTA4eClcbiIs
IFN0YXR1cyk7CisgICAgRnJvbnRlbmQtPk51bVF1ZXVlcyA9IDA7CiAgICAgcmV0dXJuIFN0YXR1
czsKIH0KIF9fZHJ2X3JlcXVpcmVzSVJRTChESVNQQVRDSF9MRVZFTCkKQEAgLTEyMjgsNiArMTM3
MCw4IEBAIEZyb250ZW5kRGlzY29ubmVjdCgKICAgICBSaW5nRGlzY29ubmVjdChGcm9udGVuZC0+
UmluZyk7CiAgICAgR3JhbnRlckRpc2Nvbm5lY3QoRnJvbnRlbmQtPkdyYW50ZXIpOwogCisgICAg
RnJvbnRlbmQtPk51bVF1ZXVlcyA9IDA7CisKICAgICBCYXNlNjRGcmVlKEZyb250ZW5kLT5QYWdl
ODAuRGF0YSk7CiAgICAgRnJvbnRlbmQtPlBhZ2U4MC5EYXRhID0gTlVMTDsKICAgICBGcm9udGVu
ZC0+UGFnZTgwLlNpemUgPSAwOwpAQCAtMTcyNiw2ICsxODcwLDI5IEBAIGZhaWwxOgogICAgIHJl
dHVybiBzdGF0dXM7CiB9CiAKK3N0YXRpYyBWT0lECitGcm9udGVuZFNldE1heFF1ZXVlcygKKyAg
ICBJTiAgUFhFTlZCRF9GUk9OVEVORCAgICBGcm9udGVuZAorICAgICkKK3sKKyAgICBVTE9ORyAg
ICAgICAgICAgICAgICAgICBGcm9udGVuZE1heFF1ZXVlczsKKworICAgIEZyb250ZW5kLT5NYXhR
dWV1ZXMgPSBLZVF1ZXJ5QWN0aXZlUHJvY2Vzc29yQ291bnRFeChBTExfUFJPQ0VTU09SX0dST1VQ
Uyk7CisKKyAgICBpZiAoRHJpdmVyR2V0RmVhdHVyZU92ZXJyaWRlKEZlYXR1cmVNdWx0aVF1ZXVl
TWF4UXVldWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkZyb250ZW5kTWF4
UXVldWVzKSkgeworICAgICAgICBpZiAoRnJvbnRlbmRNYXhRdWV1ZXMgPCBGcm9udGVuZC0+TWF4
UXVldWVzKQorICAgICAgICAgICAgRnJvbnRlbmQtPk1heFF1ZXVlcyA9IEZyb250ZW5kTWF4UXVl
dWVzOworICAgIH0KKworICAgIGlmIChGcm9udGVuZC0+TWF4UXVldWVzID09IDApCisgICAgICAg
IEZyb250ZW5kLT5NYXhRdWV1ZXMgPSAxOworCisgICAgVmVyYm9zZSgiVGFyZ2V0WyV1XSBNYXhR
dWV1ZXMgJXVcbiIsCisgICAgICAgICAgICBfX0Zyb250ZW5kR2V0VGFyZ2V0SWQoRnJvbnRlbmQp
LAorICAgICAgICAgICAgRnJvbnRlbmQtPk1heFF1ZXVlcyk7Cit9CisKIE5UU1RBVFVTCiBGcm9u
dGVuZENyZWF0ZSgKICAgICBJTiAgUFhFTlZCRF9UQVJHRVQgICAgICBUYXJnZXQsCkBAIC0xNzUy
LDYgKzE5MTksOCBAQCBGcm9udGVuZENyZWF0ZSgKICAgICBGcm9udGVuZC0+U3RhdGUgPSBYRU5W
QkRfSU5JVElBTElaRUQ7CiAgICAgRnJvbnRlbmQtPkRpc2tJbmZvLlNlY3RvclNpemUgPSA1MTI7
IC8vIGRlZmF1bHQgc2VjdG9yIHNpemUKICAgICBGcm9udGVuZC0+QmFja2VuZERvbWFpbiA9IERP
TUlEX0lOVkFMSUQ7CisKKyAgICBGcm9udGVuZFNldE1heFF1ZXVlcyhGcm9udGVuZCk7CiAgICAg
CiAgICAgc3RhdHVzID0gUnRsU3RyaW5nQ2JQcmludGZBKEZyb250ZW5kLT5Gcm9udGVuZFBhdGgs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihGcm9udGVuZC0+RnJvbnRl
bmRQYXRoKSwKQEAgLTE4MDAsNiArMTk2OSwxNCBAQCBmYWlsMzoKICAgICBFcnJvcigiZmFpbDNc
biIpOwogZmFpbDI6CiAgICAgRXJyb3IoIkZhaWwyXG4iKTsKKyAgICBGcm9udGVuZC0+VGFyZ2V0
ID0gTlVMTDsKKyAgICBGcm9udGVuZC0+VGFyZ2V0SWQgPSAwOworICAgIEZyb250ZW5kLT5EZXZp
Y2VJZCA9IDA7CisgICAgRnJvbnRlbmQtPlN0YXRlID0gWEVOVkJEX1NUQVRFX0lOVkFMSUQ7IC8v
IDAKKyAgICBGcm9udGVuZC0+RGlza0luZm8uU2VjdG9yU2l6ZSA9IDA7CisgICAgRnJvbnRlbmQt
PkJhY2tlbmREb21haW4gPSAwOworICAgIEZyb250ZW5kLT5NYXhRdWV1ZXMgPSAwOworICAgIEFT
U0VSVChJc1plcm9NZW1vcnkoRnJvbnRlbmQsIHNpemVvZihYRU5WQkRfRlJPTlRFTkQpKSk7CiAg
ICAgX19Gcm9udGVuZEZyZWUoRnJvbnRlbmQpOwogZmFpbDE6CiAgICAgRXJyb3IoIkZhaWwxICgl
MDh4KVxuIiwgc3RhdHVzKTsKQEAgLTE4MjQsNiArMjAwMSw4IEBAIEZyb250ZW5kRGVzdHJveSgK
ICAgICBGcm9udGVuZC0+UGFnZTgzLkRhdGEgPSBOVUxMOwogICAgIEZyb250ZW5kLT5QYWdlODMu
U2l6ZSA9IDA7CiAKKyAgICBGcm9udGVuZC0+TWF4UXVldWVzID0gMDsKKwogICAgIFRocmVhZEFs
ZXJ0KEZyb250ZW5kLT5CYWNrZW5kVGhyZWFkKTsKICAgICBUaHJlYWRKb2luKEZyb250ZW5kLT5C
YWNrZW5kVGhyZWFkKTsKICAgICBGcm9udGVuZC0+QmFja2VuZFRocmVhZCA9IE5VTEw7CkBAIC0x
ODQwLDk0ICsyMDE5LDMgQEAgRnJvbnRlbmREZXN0cm95KAogICAgIF9fRnJvbnRlbmRGcmVlKEZy
b250ZW5kKTsKICAgICBUcmFjZSgiVGFyZ2V0WyVkXSBAICglZCkgPD09PT09XG4iLCBUYXJnZXRJ
ZCwgS2VHZXRDdXJyZW50SXJxbCgpKTsKIH0KLQotI2RlZmluZSBGUk9OVEVORF9HRVRfUFJPUEVS
VFkoX25hbWUsIF90eXBlKSAgICAgXAotc3RhdGljIEZPUkNFSU5MSU5FIF90eXBlICAgICAgICAg
ICAgICAgICAgICAgICAgXAotX19Gcm9udGVuZEdldCAjIyBfbmFtZSAjIyAoICAgICAgICAgICAg
ICAgICAgICAgXAotICAgIElOICBQWEVOVkJEX0ZST05URU5EICAgIEZyb250ZW5kICAgICAgICAg
ICAgXAotICAgICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHJl
dHVybiBGcm9udGVuZC0+ICMjIF9uYW1lICMjIDsgICAgICAgICAgICAgXAotfSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotX3R5cGUgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotRnJvbnRlbmRHZXQgIyMgX25hbWUgIyMg
KCAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIElOICBQWEVOVkJEX0ZST05URU5EICAgIEZy
b250ZW5kICAgICAgICAgICAgXAotICAgICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgIHJldHVybiBfX0Zyb250ZW5kR2V0ICMjIF9uYW1lICMjIChGcm9udGVuZCk7
XAotfQotCi1GUk9OVEVORF9HRVRfUFJPUEVSVFkoVGFyZ2V0LCBQWEVOVkJEX1RBUkdFVCkKLUZS
T05URU5EX0dFVF9QUk9QRVJUWShSaW5nLCBQWEVOVkJEX1JJTkcpCi1GUk9OVEVORF9HRVRfUFJP
UEVSVFkoR3JhbnRlciwgUFhFTlZCRF9HUkFOVEVSKQotRlJPTlRFTkRfR0VUX1BST1BFUlRZKFRh
cmdldElkLCBVTE9ORykKLUZST05URU5EX0dFVF9QUk9QRVJUWShEZXZpY2VJZCwgVUxPTkcpCi1G
Uk9OVEVORF9HRVRfUFJPUEVSVFkoQmFja2VuZERvbWFpbiwgVUxPTkcpCi1GUk9OVEVORF9HRVRf
UFJPUEVSVFkoQmFja2VuZFBhdGgsIFBDSEFSKQotRlJPTlRFTkRfR0VUX1BST1BFUlRZKEZyb250
ZW5kUGF0aCwgUENIQVIpCi0vL0ZST05URU5EX0dFVF9QUk9QRVJUWShDYXBzLCBQWEVOVkJEX0NB
UFMpCi1QWEVOVkJEX0NBUFMKLUZyb250ZW5kR2V0Q2FwcygKLSAgICBJTiAgUFhFTlZCRF9GUk9O
VEVORCAgICBGcm9udGVuZAotICAgICkKLXsKLSAgICByZXR1cm4gJkZyb250ZW5kLT5DYXBzOwot
fQotLy9GUk9OVEVORF9HRVRfUFJPUEVSVFkoRmVhdHVyZXMsIFBYRU5WQkRfRkVBVFVSRVMpCi1Q
WEVOVkJEX0ZFQVRVUkVTCi1Gcm9udGVuZEdldEZlYXR1cmVzKAotICAgIElOICBQWEVOVkJEX0ZS
T05URU5EICAgIEZyb250ZW5kCi0gICAgKQotewotICAgIHJldHVybiAmRnJvbnRlbmQtPkZlYXR1
cmVzOwotfQotLy9GUk9OVEVORF9HRVRfUFJPUEVSVFkoRGlza0luZm8sIFBYRU5WQkRfRElTS0lO
Rk8pCi1QWEVOVkJEX0RJU0tJTkZPCi1Gcm9udGVuZEdldERpc2tJbmZvKAotICAgIElOICBQWEVO
VkJEX0ZST05URU5EICAgIEZyb250ZW5kCi0gICAgKQotewotICAgIHJldHVybiAmRnJvbnRlbmQt
PkRpc2tJbmZvOwotfQotLy9GUk9OVEVORF9HRVRfUFJPUEVSVFkoQ29ubmVjdGVkLCBCT09MRUFO
KQotQk9PTEVBTgotRnJvbnRlbmRHZXRDb25uZWN0ZWQoCi0gICAgSU4gIFBYRU5WQkRfRlJPTlRF
TkQgICAgRnJvbnRlbmQKLSAgICApCi17Ci0gICAgcmV0dXJuIEZyb250ZW5kLT5DYXBzLkNvbm5l
Y3RlZDsKLX0KLS8vRlJPTlRFTkRfR0VUX1BST1BFUlRZKFJlYWRPbmx5LCBCT09MRUFOKQotQk9P
TEVBTgotRnJvbnRlbmRHZXRSZWFkT25seSgKLSAgICBJTiAgUFhFTlZCRF9GUk9OVEVORCAgICBG
cm9udGVuZAotICAgICkKLXsKLSAgICByZXR1cm4gISEoRnJvbnRlbmQtPkRpc2tJbmZvLkRpc2tJ
bmZvICYgVkRJU0tfUkVBRE9OTFkpOwotfQotLy9GUk9OVEVORF9HRVRfUFJPUEVSVFkoRGlzY2Fy
ZCwgQk9PTEVBTikKLUJPT0xFQU4KLUZyb250ZW5kR2V0RGlzY2FyZCgKLSAgICBJTiAgUFhFTlZC
RF9GUk9OVEVORCAgICBGcm9udGVuZAotICAgICkKLXsKLSAgICByZXR1cm4gRnJvbnRlbmQtPkRp
c2tJbmZvLkRpc2NhcmQ7Ci19Ci0vL0ZST05URU5EX0dFVF9QUk9QRVJUWShGbHVzaENhY2hlLCBC
T09MRUFOKQotQk9PTEVBTgotRnJvbnRlbmRHZXRGbHVzaENhY2hlKAotICAgIElOICBQWEVOVkJE
X0ZST05URU5EICAgIEZyb250ZW5kCi0gICAgKQotewotICAgIHJldHVybiBGcm9udGVuZC0+RGlz
a0luZm8uRmx1c2hDYWNoZTsKLX0KLS8vRlJPTlRFTkRfR0VUX1BST1BFUlRZKEJhcnJpZXIsIEJP
T0xFQU4pCi1CT09MRUFOCi1Gcm9udGVuZEdldEJhcnJpZXIoCi0gICAgSU4gIFBYRU5WQkRfRlJP
TlRFTkQgICAgRnJvbnRlbmQKLSAgICApCi17Ci0gICAgcmV0dXJuIEZyb250ZW5kLT5EaXNrSW5m
by5CYXJyaWVyOwotfQotCi0jdW5kZWYgRlJPTlRFTkRfR0VUX1BST1BFUlRZCmRpZmYgLS1naXQg
YS9zcmMveGVudmJkL2Zyb250ZW5kLmggYi9zcmMveGVudmJkL2Zyb250ZW5kLmgKaW5kZXggMTQ4
ODQ3Ni4uZmNmNTYzMiAxMDA2NDQKLS0tIGEvc3JjL3hlbnZiZC9mcm9udGVuZC5oCisrKyBiL3Ny
Yy94ZW52YmQvZnJvbnRlbmQuaApAQCAtMTY3LDYgKzE2Nyw4IEBAIEZST05URU5EX0dFVF9QUk9Q
RVJUWShSZWFkT25seSwgQk9PTEVBTikKIEZST05URU5EX0dFVF9QUk9QRVJUWShEaXNjYXJkLCBC
T09MRUFOKQogRlJPTlRFTkRfR0VUX1BST1BFUlRZKEZsdXNoQ2FjaGUsIEJPT0xFQU4pCiBGUk9O
VEVORF9HRVRfUFJPUEVSVFkoQmFycmllciwgQk9PTEVBTikKK0ZST05URU5EX0dFVF9QUk9QRVJU
WShNYXhRdWV1ZXMsIFVMT05HKQorRlJPTlRFTkRfR0VUX1BST1BFUlRZKE51bVF1ZXVlcywgVUxP
TkcpCiAKICN1bmRlZiBGUk9OVEVORF9HRVRfUFJPUEVSVFkKIAotLSAKMi4xNi4yLndpbmRvd3Mu
MQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCndpbi1w
di1kZXZlbCBtYWlsaW5nIGxpc3QKd2luLXB2LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0
dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby93aW4tcHYtZGV2ZWw=

From win-pv-devel-bounces@lists.xenproject.org Tue May 29 10:07:51 2018
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 29 May 2018 10:07:51 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1fNbXj-0002dQ-6v; Tue, 29 May 2018 10:07:51 +0000
Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <srs0=z+p9=iq=citrix.com=prvs=680118468=owen.smith@srs-us1.protection.inumbo.net>)
 id 1fNbXh-0002cX-9q
 for win-pv-devel@lists.xenproject.org; Tue, 29 May 2018 10:07:49 +0000
X-Inumbo-ID: d9d02a92-6327-11e8-9728-bc764e045a96
Received: from SMTP03.CITRIX.COM (unknown [162.221.156.55])
 by us1-rack-dfw2.inumbo.com (Halon) with ESMTPS
 id d9d02a92-6327-11e8-9728-bc764e045a96;
 Tue, 29 May 2018 12:05:44 +0200 (CEST)
X-IronPort-AV: E=Sophos;i="5.49,455,1520899200"; d="scan'208";a="55794494"
From: Owen Smith <owen.smith@citrix.com>
To: <win-pv-devel@lists.xenproject.org>
Date: Tue, 29 May 2018 11:07:15 +0100
Message-ID: <20180529100717.8340-8-owen.smith@citrix.com>
X-Mailer: git-send-email 2.16.2.windows.1
In-Reply-To: <20180529100717.8340-1-owen.smith@citrix.com>
References: <20180529100717.8340-1-owen.smith@citrix.com>
MIME-Version: 1.0
Subject: [win-pv-devel] [PATCH 7/9] Remove queue.h/.c
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Owen Smith <owen.smith@citrix.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>

WEVOVkJEX1FVRVVFIGhhcyBiZWVuIHJlcGxhY2VkIGJ5IExJU1RfRU5UUlksIGFuZCBpcyBubyBs
b25nZXIgdXNlZC4KUmVtb3ZlIHF1ZXVlLmgvLmMgYW5kIGFueSBpbmNsdWRlIGRpcmVjdGl2ZXMK
ClNpZ25lZC1vZmYtYnk6IE93ZW4gU21pdGggPG93ZW4uc21pdGhAY2l0cml4LmNvbT4KLS0tCiBz
cmMveGVudmJkL3F1ZXVlLmMgICAgICAgICAgIHwgMTM5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KIHNyYy94ZW52YmQvcXVldWUuaCAgICAgICAgICAgfCAgODYg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHNyYy94ZW52YmQvdGFyZ2V0LmMgICAgICAgICAg
fCAgIDEgLQogdnMyMDE1L3hlbnZiZC94ZW52YmQudmN4cHJvaiB8ICAgMSAtCiB2czIwMTcveGVu
dmJkL3hlbnZiZC52Y3hwcm9qIHwgICAxIC0KIDUgZmlsZXMgY2hhbmdlZCwgMjI4IGRlbGV0aW9u
cygtKQogZGVsZXRlIG1vZGUgMTAwNjQ0IHNyYy94ZW52YmQvcXVldWUuYwogZGVsZXRlIG1vZGUg
MTAwNjQ0IHNyYy94ZW52YmQvcXVldWUuaAoKZGlmZiAtLWdpdCBhL3NyYy94ZW52YmQvcXVldWUu
YyBiL3NyYy94ZW52YmQvcXVldWUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmM3
MDQ1OS4uMDAwMDAwMAotLS0gYS9zcmMveGVudmJkL3F1ZXVlLmMKKysrIC9kZXYvbnVsbApAQCAt
MSwxMzkgKzAsMCBAQAotLyogQ29weXJpZ2h0IChjKSBDaXRyaXggU3lzdGVtcyBJbmMuCi0gKiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCAKLSAqIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgCi0gKiB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUgbWV0OgotICogCi0gKiAqICAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSAKLSAqICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIAotICogICAgIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
KiAgIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgCi0gKiAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSAKLSAqICAgICBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgCi0gKiAgICAgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIAotICogQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgCi0gKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiAKLSAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIAotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgCi0gKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCAKLSAqIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiAKLSAqIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgCi0gKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgCi0gKiBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIAotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiAKLSAqIFNVQ0ggREFNQUdFLgotICovIAotCi0jaW5jbHVkZSAi
cXVldWUuaCIKLSNpbmNsdWRlICJkZWJ1Zy5oIgotI2luY2x1ZGUgImFzc2VydC5oIgotCi1WT0lE
Ci1RdWV1ZUluaXQoCi0gICAgX19pbiBQWEVOVkJEX1FVRVVFICAgICAgUXVldWUKLSAgICApCi17
Ci0gICAgUnRsWmVyb01lbW9yeShRdWV1ZSwgc2l6ZW9mKFhFTlZCRF9RVUVVRSkpOwotICAgIEtl
SW5pdGlhbGl6ZVNwaW5Mb2NrKCZRdWV1ZS0+TG9jayk7Ci0gICAgSW5pdGlhbGl6ZUxpc3RIZWFk
KCZRdWV1ZS0+TGlzdCk7Ci19Ci0KLVVMT05HCi1RdWV1ZUNvdW50KAotICAgIF9faW4gUFhFTlZC
RF9RVUVVRSAgICAgIFF1ZXVlCi0gICAgKQotewotICAgIHJldHVybiBRdWV1ZS0+Q3VycmVudDsK
LX0KLQotX19jaGVja1JldHVybgotUExJU1RfRU5UUlkKLVF1ZXVlUG9wKAotICAgIF9faW4gUFhF
TlZCRF9RVUVVRSAgICAgIFF1ZXVlCi0gICAgKQotewotICAgIEtJUlFMICAgICAgIElycWw7Ci0g
ICAgUExJU1RfRU5UUlkgRW50cnkgPSBOVUxMOwotCi0gICAgS2VBY3F1aXJlU3BpbkxvY2soJlF1
ZXVlLT5Mb2NrLCAmSXJxbCk7Ci0KLSAgICBpZiAoIUlzTGlzdEVtcHR5KCZRdWV1ZS0+TGlzdCkp
IHsKLSAgICAgICAgRW50cnkgPSBSZW1vdmVIZWFkTGlzdCgmUXVldWUtPkxpc3QpOwotICAgICAg
ICBBU1NFUlQzUChFbnRyeSwgIT0sICZRdWV1ZS0+TGlzdCk7Ci0gICAgICAgIC0tUXVldWUtPkN1
cnJlbnQ7Ci0gICAgfQotCi0gICAgS2VSZWxlYXNlU3BpbkxvY2soJlF1ZXVlLT5Mb2NrLCBJcnFs
KTsKLQotICAgIHJldHVybiBFbnRyeTsKLX0KLQotVk9JRAotUXVldWVVblBvcCgKLSAgICBfX2lu
IFBYRU5WQkRfUVVFVUUgICAgICBRdWV1ZSwKLSAgICBfX2luIFBMSVNUX0VOVFJZICAgICAgICBF
bnRyeQotICAgICkKLXsKLSAgICBLSVJRTCAgICAgICAgICAgICAgIElycWw7Ci0KLSAgICBLZUFj
cXVpcmVTcGluTG9jaygmUXVldWUtPkxvY2ssICZJcnFsKTsKLSAgICAKLSAgICBJbnNlcnRIZWFk
TGlzdCgmUXVldWUtPkxpc3QsIEVudHJ5KTsKLSAgICBpZiAoKytRdWV1ZS0+Q3VycmVudCA+IFF1
ZXVlLT5NYXhpbXVtKQotICAgICAgICBRdWV1ZS0+TWF4aW11bSA9IFF1ZXVlLT5DdXJyZW50Owot
ICAgIAotICAgIEtlUmVsZWFzZVNwaW5Mb2NrKCZRdWV1ZS0+TG9jaywgSXJxbCk7Ci19Ci0KLVZP
SUQKLVF1ZXVlQXBwZW5kKAotICAgIF9faW4gUFhFTlZCRF9RVUVVRSAgICAgIFF1ZXVlLAotICAg
IF9faW4gUExJU1RfRU5UUlkgICAgICAgIEVudHJ5Ci0gICAgKQotewotICAgIEtJUlFMICAgICAg
ICAgICAgICAgSXJxbDsKLQotICAgIEtlQWNxdWlyZVNwaW5Mb2NrKCZRdWV1ZS0+TG9jaywgJkly
cWwpOwotICAgIAotICAgIEluc2VydFRhaWxMaXN0KCZRdWV1ZS0+TGlzdCwgRW50cnkpOwotICAg
IGlmICgrK1F1ZXVlLT5DdXJyZW50ID4gUXVldWUtPk1heGltdW0pCi0gICAgICAgIFF1ZXVlLT5N
YXhpbXVtID0gUXVldWUtPkN1cnJlbnQ7Ci0gICAgCi0gICAgS2VSZWxlYXNlU3BpbkxvY2soJlF1
ZXVlLT5Mb2NrLCBJcnFsKTsKLX0KLQotVk9JRAotUXVldWVSZW1vdmUoCi0gICAgX19pbiBQWEVO
VkJEX1FVRVVFICAgICAgUXVldWUsCi0gICAgX19pbiBQTElTVF9FTlRSWSAgICAgICAgRW50cnkK
LSAgICApCi17Ci0gICAgS0lSUUwgICAgICAgICAgICAgICBJcnFsOwotCi0gICAgS2VBY3F1aXJl
U3BpbkxvY2soJlF1ZXVlLT5Mb2NrLCAmSXJxbCk7Ci0KLSAgICBSZW1vdmVFbnRyeUxpc3QoRW50
cnkpOwotICAgIC0tUXVldWUtPkN1cnJlbnQ7Ci0gICAgCi0gICAgS2VSZWxlYXNlU3BpbkxvY2so
JlF1ZXVlLT5Mb2NrLCBJcnFsKTsKLX0KLQotVk9JRAotUXVldWVEZWJ1Z0NhbGxiYWNrKAotICAg
IF9faW4gUFhFTlZCRF9RVUVVRSAgICAgICAgICAgICAgICAgIFF1ZXVlLAotICAgIF9faW4gX19u
dWxsdGVybWluYXRlZCBjb25zdCBDSEFSKiAgIE5hbWUsCi0gICAgX19pbiBQWEVOQlVTX0RFQlVH
X0lOVEVSRkFDRSAgICAgICAgRGVidWcKLSAgICApCi17Ci0gICAgWEVOQlVTX0RFQlVHKFByaW50
ZiwgRGVidWcsCi0gICAgICAgICAgICAgICAgICJRVUVVRTogJXMgOiAldSAvICV1XG4iLAotICAg
ICAgICAgICAgICAgICBOYW1lLCBRdWV1ZS0+Q3VycmVudCwgUXVldWUtPk1heGltdW0pOwotCi0g
ICAgUXVldWUtPk1heGltdW0gPSBRdWV1ZS0+Q3VycmVudDsKLX0KLQpkaWZmIC0tZ2l0IGEvc3Jj
L3hlbnZiZC9xdWV1ZS5oIGIvc3JjL3hlbnZiZC9xdWV1ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwNDM0MTk4Li4wMDAwMDAwCi0tLSBhL3NyYy94ZW52YmQvcXVldWUuaAorKysg
L2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAKLS8qIENvcHlyaWdodCAoYykgQ2l0cml4IFN5c3Rl
bXMgSW5jLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3JtcywgCi0gKiB3aXRoIG9yIHdpdGhvdXQg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIAotICogdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKLSAqIAotICogKiAgIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgCi0gKiAgICAgY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSAKLSAqICAgICBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqICogICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIAotICogICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgCi0gKiAgICAgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIAotICogICAgIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCAKLSAqIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIAotICogSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgCi0gKiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSAKLSAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIAotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIAot
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgCi0gKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIAotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIAotICogV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIAotICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSAKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgCi0gKiBTVUNIIERBTUFHRS4KLSAqLyAK
LQotI2lmbmRlZiBfWEVOVkJEX1FVRVVFX0gKLSNkZWZpbmUgX1hFTlZCRF9RVUVVRV9ICi0KLSNp
bmNsdWRlIDxudGRkay5oPgotI2luY2x1ZGUgPGRlYnVnX2ludGVyZmFjZS5oPgotCi10eXBlZGVm
IHN0cnVjdCBfWEVOVkJEX1FVRVVFIHsKLSAgICBLU1BJTl9MT0NLICAgICAgICAgIExvY2s7Ci0g
ICAgTElTVF9FTlRSWSAgICAgICAgICBMaXN0OwotICAgIFVMT05HICAgICAgICAgICAgICAgQ3Vy
cmVudDsKLSAgICBVTE9ORyAgICAgICAgICAgICAgIE1heGltdW07Ci19IFhFTlZCRF9RVUVVRSwg
KlBYRU5WQkRfUVVFVUU7Ci0KLWV4dGVybiBWT0lECi1RdWV1ZUluaXQoCi0gICAgX19pbiBQWEVO
VkJEX1FVRVVFICAgICAgUXVldWUKLSAgICApOwotCi1leHRlcm4gVUxPTkcKLVF1ZXVlQ291bnQo
Ci0gICAgX19pbiBQWEVOVkJEX1FVRVVFICAgICAgUXVldWUKLSAgICApOwotCi1fX2NoZWNrUmV0
dXJuCi1leHRlcm4gUExJU1RfRU5UUlkKLVF1ZXVlUG9wKAotICAgIF9faW4gUFhFTlZCRF9RVUVV
RSAgICAgIFF1ZXVlCi0gICAgKTsKLQotZXh0ZXJuIFZPSUQKLVF1ZXVlVW5Qb3AoCi0gICAgX19p
biBQWEVOVkJEX1FVRVVFICAgICAgUXVldWUsCi0gICAgX19pbiBQTElTVF9FTlRSWSAgICAgICAg
RW50cnkKLSAgICApOwotCi1leHRlcm4gVk9JRAotUXVldWVBcHBlbmQoCi0gICAgX19pbiBQWEVO
VkJEX1FVRVVFICAgICAgUXVldWUsCi0gICAgX19pbiBQTElTVF9FTlRSWSAgICAgICAgRW50cnkK
LSAgICApOwotCi1leHRlcm4gVk9JRAotUXVldWVSZW1vdmUoCi0gICAgX19pbiBQWEVOVkJEX1FV
RVVFICAgICAgUXVldWUsCi0gICAgX19pbiBQTElTVF9FTlRSWSAgICAgICAgRW50cnkKLSAgICAp
OwotCi1leHRlcm4gVk9JRAotUXVldWVEZWJ1Z0NhbGxiYWNrKAotICAgIF9faW4gUFhFTlZCRF9R
VUVVRSAgICAgICAgICAgICAgICAgIFF1ZXVlLAotICAgIF9faW4gX19udWxsdGVybWluYXRlZCBj
b25zdCBDSEFSKiAgIE5hbWUsCi0gICAgX19pbiBQWEVOQlVTX0RFQlVHX0lOVEVSRkFDRSAgICAg
ICAgRGVidWcKLSAgICApOwotCi0jZW5kaWYgLy8gX1hFTlZCRF9RVUVVRV9ICmRpZmYgLS1naXQg
YS9zcmMveGVudmJkL3RhcmdldC5jIGIvc3JjL3hlbnZiZC90YXJnZXQuYwppbmRleCA1NGZmYjkz
Li4xNzZjYmJlIDEwMDY0NAotLS0gYS9zcmMveGVudmJkL3RhcmdldC5jCisrKyBiL3NyYy94ZW52
YmQvdGFyZ2V0LmMKQEAgLTQ2LDcgKzQ2LDYgQEAKICNpbmNsdWRlICJkcml2ZXIuaCIKICNpbmNs
dWRlICJhZGFwdGVyLmgiCiAjaW5jbHVkZSAiZnJvbnRlbmQuaCIKLSNpbmNsdWRlICJxdWV1ZS5o
IgogI2luY2x1ZGUgInNyYmV4dC5oIgogCiAjaW5jbHVkZSAiZGVidWcuaCIKZGlmZiAtLWdpdCBh
L3ZzMjAxNS94ZW52YmQveGVudmJkLnZjeHByb2ogYi92czIwMTUveGVudmJkL3hlbnZiZC52Y3hw
cm9qCmluZGV4IGE4NWU2NWIuLjc1MmEwMjEgMTAwNjQ0Ci0tLSBhL3ZzMjAxNS94ZW52YmQveGVu
dmJkLnZjeHByb2oKKysrIGIvdnMyMDE1L3hlbnZiZC94ZW52YmQudmN4cHJvagpAQCAtNzAsNyAr
NzAsNiBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi4vLi4vc3JjL3hlbnZiZC9mcm9udGVu
ZC5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi4vLi4vc3JjL3hlbnZiZC90YXJnZXQu
YyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uLy4uL3NyYy94ZW52YmQvYmFzZTY0LmMi
IC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLi8uLi9zcmMveGVudmJkL3F1ZXVlLmMiIC8+
CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLi8uLi9zcmMveGVudmJkL3RocmVhZC5jIiAvPgog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi4vLi4vc3JjL3hlbnZiZC9yaW5nLmMiIC8+CiAgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLi8uLi9zcmMveGVudmJkL2dyYW50ZXIuYyIgLz4KZGlmZiAt
LWdpdCBhL3ZzMjAxNy94ZW52YmQveGVudmJkLnZjeHByb2ogYi92czIwMTcveGVudmJkL3hlbnZi
ZC52Y3hwcm9qCmluZGV4IDc0YWY1ZmMuLjdiODMyMjIgMTAwNjQ0Ci0tLSBhL3ZzMjAxNy94ZW52
YmQveGVudmJkLnZjeHByb2oKKysrIGIvdnMyMDE3L3hlbnZiZC94ZW52YmQudmN4cHJvagpAQCAt
NzgsNyArNzgsNiBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi4vLi4vc3JjL3hlbnZiZC9m
cm9udGVuZC5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi4vLi4vc3JjL3hlbnZiZC90
YXJnZXQuYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uLy4uL3NyYy94ZW52YmQvYmFz
ZTY0LmMiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLi8uLi9zcmMveGVudmJkL3F1ZXVl
LmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLi8uLi9zcmMveGVudmJkL3RocmVhZC5j
IiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi4vLi4vc3JjL3hlbnZiZC9yaW5nLmMiIC8+
CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLi8uLi9zcmMveGVudmJkL2dyYW50ZXIuYyIgLz4K
LS0gCjIuMTYuMi53aW5kb3dzLjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fXwp3aW4tcHYtZGV2ZWwgbWFpbGluZyBsaXN0Cndpbi1wdi1kZXZlbEBsaXN0
cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlz
dGluZm8vd2luLXB2LWRldmVs

From win-pv-devel-bounces@lists.xenproject.org Tue May 29 10:07:51 2018
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 29 May 2018 10:07:51 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1fNbXj-0002db-8K; Tue, 29 May 2018 10:07:51 +0000
Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <srs0=z+p9=iq=citrix.com=prvs=680118468=owen.smith@srs-us1.protection.inumbo.net>)
 id 1fNbXh-0002cY-AC
 for win-pv-devel@lists.xenproject.org; Tue, 29 May 2018 10:07:49 +0000
X-Inumbo-ID: d9909747-6327-11e8-9728-bc764e045a96
Received: from SMTP03.CITRIX.COM (unknown [162.221.156.55])
 by us1-rack-dfw2.inumbo.com (Halon) with ESMTPS
 id d9909747-6327-11e8-9728-bc764e045a96;
 Tue, 29 May 2018 12:05:44 +0200 (CEST)
X-IronPort-AV: E=Sophos;i="5.49,455,1520899200"; d="scan'208";a="55794485"
From: Owen Smith <owen.smith@citrix.com>
To: <win-pv-devel@lists.xenproject.org>
Date: Tue, 29 May 2018 11:07:13 +0100
Message-ID: <20180529100717.8340-6-owen.smith@citrix.com>
X-Mailer: git-send-email 2.16.2.windows.1
In-Reply-To: <20180529100717.8340-1-owen.smith@citrix.com>
References: <20180529100717.8340-1-owen.smith@citrix.com>
MIME-Version: 1.0
Subject: [win-pv-devel] [PATCH 5/9] Force single queue in crash/hibernate
 path
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Owen Smith <owen.smith@citrix.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>

UmVtb3ZlICJtdWx0aS1xdWV1ZS1udW0tcXVldWVzIiBmcm9tIGZyb250ZW5kIGFyZWEgd2hlbiB0
aGUgY3Jhc2h1bXAKZHJpdmVyIGlzIGFjdGl2ZS4gVGhpcyB3aWxsIGZvcmNlIHRoZSBiYWNrZW5k
IHRvIHVzZSBhIHNpbmdsZSBxdWV1ZSwKd2hpY2ggdGhlIGNyYXNoZHVtcCBmcm9udGVuZCBpcyBz
dXBwbHlpbmcKClNpZ25lZC1vZmYtYnk6IE93ZW4gU21pdGggPG93ZW4uc21pdGhAY2l0cml4LmNv
bT4KLS0tCiBzcmMveGVuY3JzaC9mcm9udGVuZC5jIHwgMiArKwogMSBmaWxlIGNoYW5nZWQsIDIg
aW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL3NyYy94ZW5jcnNoL2Zyb250ZW5kLmMgYi9zcmMv
eGVuY3JzaC9mcm9udGVuZC5jCmluZGV4IDBmYmJiZWIuLmU5OTAyY2UgMTAwNjQ0Ci0tLSBhL3Ny
Yy94ZW5jcnNoL2Zyb250ZW5kLmMKKysrIGIvc3JjL3hlbmNyc2gvZnJvbnRlbmQuYwpAQCAtNzM4
LDYgKzczOCw4IEBAIEZyb250ZW5kQ2xvc2UoCiAgICAgICAgICAgICAgICAgICAgICAgICJmZWF0
dXJlLW9ubGluZS1yZXNpemUiKTsKICAgICAoVk9JRCkgU3RvcmVSZW1vdmUoTlVMTCwgRnJvbnRl
bmQtPkZyb250ZW5kUGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAgImZlYXR1cmUtc3VycHJp
c2UtcmVtb3ZlIik7CisgICAgKFZPSUQpU3RvcmVSZW1vdmUoTlVMTCwgRnJvbnRlbmQtPkZyb250
ZW5kUGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAibXVsdGktcXVldWUtbnVtLXF1ZXVlcyIp
OwogCiAgICAgcmV0dXJuIFNUQVRVU19TVUNDRVNTOwogCi0tIAoyLjE2LjIud2luZG93cy4xCgoK
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18Kd2luLXB2LWRl
dmVsIG1haWxpbmcgbGlzdAp3aW4tcHYtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6
Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL3dpbi1wdi1kZXZlbA==

From win-pv-devel-bounces@lists.xenproject.org Tue May 29 10:07:51 2018
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 29 May 2018 10:07:51 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1fNbXj-0002dm-AW; Tue, 29 May 2018 10:07:51 +0000
Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <srs0=z+p9=iq=citrix.com=prvs=680118468=owen.smith@srs-us1.protection.inumbo.net>)
 id 1fNbXh-0002co-I6
 for win-pv-devel@lists.xenproject.org; Tue, 29 May 2018 10:07:49 +0000
X-Inumbo-ID: da2af569-6327-11e8-9728-bc764e045a96
Received: from SMTP03.CITRIX.COM (unknown [162.221.156.55])
 by us1-rack-dfw2.inumbo.com (Halon) with ESMTPS
 id da2af569-6327-11e8-9728-bc764e045a96;
 Tue, 29 May 2018 12:05:45 +0200 (CEST)
X-IronPort-AV: E=Sophos;i="5.49,455,1520899200"; d="scan'208";a="55794496"
From: Owen Smith <owen.smith@citrix.com>
To: <win-pv-devel@lists.xenproject.org>
Date: Tue, 29 May 2018 11:07:16 +0100
Message-ID: <20180529100717.8340-9-owen.smith@citrix.com>
X-Mailer: git-send-email 2.16.2.windows.1
In-Reply-To: <20180529100717.8340-1-owen.smith@citrix.com>
References: <20180529100717.8340-1-owen.smith@citrix.com>
MIME-Version: 1.0
Subject: [win-pv-devel] [PATCH 8/9] Move query of "multi-queue-max-queues"
 to driver.c
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Owen Smith <owen.smith@citrix.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>

U2lnbmVkLW9mZi1ieTogT3dlbiBTbWl0aCA8b3dlbi5zbWl0aEBjaXRyaXguY29tPgotLS0KIHNy
Yy94ZW52YmQvZHJpdmVyLmMgICB8IDIyICsrKysrKysrKysrKysrKysrKysrKysKIHNyYy94ZW52
YmQvZHJpdmVyLmggICB8ICA1ICsrKysrCiBzcmMveGVudmJkL2Zyb250ZW5kLmMgfCAzMCArKysr
Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDMgZmlsZXMgY2hhbmdlZCwgMzIgaW5zZXJ0aW9u
cygrKSwgMjUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL3hlbnZiZC9kcml2ZXIuYyBi
L3NyYy94ZW52YmQvZHJpdmVyLmMKaW5kZXggMmU5YmE1NC4uZmMxYzE2OSAxMDA2NDQKLS0tIGEv
c3JjL3hlbnZiZC9kcml2ZXIuYworKysgYi9zcmMveGVudmJkL2RyaXZlci5jCkBAIC0zMjAsNiAr
MzIwLDI4IEBAIERyaXZlckdldEZlYXR1cmVOYW1lKAogICAgICAgICAgICBOVUxMOwogfQogCitV
TE9ORworRHJpdmVyR2V0TWF4UXVldWVzKAorICAgIFZPSUQKKyAgICApCit7CisgICAgVUxPTkcg
ICBPdmVycmlkZTsKKyAgICBVTE9ORyAgIE1heFF1ZXVlczsKKworICAgIE1heFF1ZXVlcyA9IEtl
UXVlcnlBY3RpdmVQcm9jZXNzb3JDb3VudEV4KEFMTF9QUk9DRVNTT1JfR1JPVVBTKTsKKworICAg
IGlmIChEcml2ZXJHZXRGZWF0dXJlT3ZlcnJpZGUoRmVhdHVyZU11bHRpUXVldWVNYXhRdWV1ZXMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmT3ZlcnJpZGUpKSB7CisgICAgICAg
IGlmIChPdmVycmlkZSA8IE1heFF1ZXVlcykKKyAgICAgICAgICAgIE1heFF1ZXVlcyA9IE92ZXJy
aWRlOworICAgIH0KKworICAgIGlmIChNYXhRdWV1ZXMgPT0gMCkKKyAgICAgICAgTWF4UXVldWVz
ID0gMTsKKworICAgIHJldHVybiBNYXhRdWV1ZXM7Cit9CisKIERSSVZFUl9JTklUSUFMSVpFICAg
RHJpdmVyRW50cnk7CiAKIE5UU1RBVFVTCmRpZmYgLS1naXQgYS9zcmMveGVudmJkL2RyaXZlci5o
IGIvc3JjL3hlbnZiZC9kcml2ZXIuaAppbmRleCA1YTI0YzRhLi5jMmZkNDRhIDEwMDY0NAotLS0g
YS9zcmMveGVudmJkL2RyaXZlci5oCisrKyBiL3NyYy94ZW52YmQvZHJpdmVyLmgKQEAgLTEwMCw0
ICsxMDAsOSBAQCBEcml2ZXJHZXRGZWF0dXJlTmFtZSgKICAgICBJTiAgWEVOVkJEX0ZFQVRVUkUg
IEZlYXR1cmUKICAgICApOwogCitleHRlcm4gVUxPTkcKK0RyaXZlckdldE1heFF1ZXVlcygKKyAg
ICBWT0lECisgICAgKTsKKwogI2VuZGlmIC8vIF9YRU5WQkRfRFJJVkVSX0gKZGlmZiAtLWdpdCBh
L3NyYy94ZW52YmQvZnJvbnRlbmQuYyBiL3NyYy94ZW52YmQvZnJvbnRlbmQuYwppbmRleCBmZDJj
MjQ3Li5mNmJkMzBjIDEwMDY0NAotLS0gYS9zcmMveGVudmJkL2Zyb250ZW5kLmMKKysrIGIvc3Jj
L3hlbnZiZC9mcm9udGVuZC5jCkBAIC0xODY3LDI5ICsxODY3LDYgQEAgZmFpbDE6CiAgICAgcmV0
dXJuIHN0YXR1czsKIH0KIAotc3RhdGljIFZPSUQKLUZyb250ZW5kU2V0TWF4UXVldWVzKAotICAg
IElOICBQWEVOVkJEX0ZST05URU5EICAgIEZyb250ZW5kCi0gICAgKQotewotICAgIFVMT05HICAg
ICAgICAgICAgICAgICAgIEZyb250ZW5kTWF4UXVldWVzOwotCi0gICAgRnJvbnRlbmQtPk1heFF1
ZXVlcyA9IEtlUXVlcnlBY3RpdmVQcm9jZXNzb3JDb3VudEV4KEFMTF9QUk9DRVNTT1JfR1JPVVBT
KTsKLQotICAgIGlmIChEcml2ZXJHZXRGZWF0dXJlT3ZlcnJpZGUoRmVhdHVyZU11bHRpUXVldWVN
YXhRdWV1ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmRnJvbnRlbmRNYXhR
dWV1ZXMpKSB7Ci0gICAgICAgIGlmIChGcm9udGVuZE1heFF1ZXVlcyA8IEZyb250ZW5kLT5NYXhR
dWV1ZXMpCi0gICAgICAgICAgICBGcm9udGVuZC0+TWF4UXVldWVzID0gRnJvbnRlbmRNYXhRdWV1
ZXM7Ci0gICAgfQotCi0gICAgaWYgKEZyb250ZW5kLT5NYXhRdWV1ZXMgPT0gMCkKLSAgICAgICAg
RnJvbnRlbmQtPk1heFF1ZXVlcyA9IDE7Ci0KLSAgICBWZXJib3NlKCJUYXJnZXRbJXVdIE1heFF1
ZXVlcyAldVxuIiwKLSAgICAgICAgICAgIF9fRnJvbnRlbmRHZXRUYXJnZXRJZChGcm9udGVuZCks
Ci0gICAgICAgICAgICBGcm9udGVuZC0+TWF4UXVldWVzKTsKLX0KLQogTlRTVEFUVVMKIEZyb250
ZW5kQ3JlYXRlKAogICAgIElOICBQWEVOVkJEX1RBUkdFVCAgICAgIFRhcmdldCwKQEAgLTE5MTcs
OCArMTg5NCwxMSBAQCBGcm9udGVuZENyZWF0ZSgKICAgICBGcm9udGVuZC0+RGlza0luZm8uU2Vj
dG9yU2l6ZSA9IDUxMjsgLy8gZGVmYXVsdCBzZWN0b3Igc2l6ZQogICAgIEZyb250ZW5kLT5CYWNr
ZW5kRG9tYWluID0gRE9NSURfSU5WQUxJRDsKIAotICAgIEZyb250ZW5kU2V0TWF4UXVldWVzKEZy
b250ZW5kKTsKLSAgICAKKyAgICBGcm9udGVuZC0+TWF4UXVldWVzID0gRHJpdmVyR2V0TWF4UXVl
dWVzKCk7CisgICAgVmVyYm9zZSgiVGFyZ2V0WyV1XSBNYXhRdWV1ZXMgJXVcbiIsCisgICAgICAg
ICAgICBfX0Zyb250ZW5kR2V0VGFyZ2V0SWQoRnJvbnRlbmQpLAorICAgICAgICAgICAgRnJvbnRl
bmQtPk1heFF1ZXVlcyk7CisKICAgICBzdGF0dXMgPSBSdGxTdHJpbmdDYlByaW50ZkEoRnJvbnRl
bmQtPkZyb250ZW5kUGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9m
KEZyb250ZW5kLT5Gcm9udGVuZFBhdGgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiZGV2aWNlL3ZiZC8ldSIsCi0tIAoyLjE2LjIud2luZG93cy4xCgoKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18Kd2luLXB2LWRldmVsIG1haWxpbmcgbGlz
dAp3aW4tcHYtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9q
ZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL3dpbi1wdi1kZXZlbA==

From win-pv-devel-bounces@lists.xenproject.org Tue May 29 10:07:52 2018
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 29 May 2018 10:07:52 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1fNbXk-0002fQ-Ds; Tue, 29 May 2018 10:07:52 +0000
Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <srs0=z+p9=iq=citrix.com=prvs=680118468=owen.smith@srs-us1.protection.inumbo.net>)
 id 1fNbXj-0002do-EL
 for win-pv-devel@lists.xenproject.org; Tue, 29 May 2018 10:07:51 +0000
X-Inumbo-ID: dacf0b08-6327-11e8-9728-bc764e045a96
Received: from SMTP03.CITRIX.COM (unknown [162.221.156.55])
 by us1-rack-dfw2.inumbo.com (Halon) with ESMTPS
 id dacf0b08-6327-11e8-9728-bc764e045a96;
 Tue, 29 May 2018 12:05:46 +0200 (CEST)
X-IronPort-AV: E=Sophos;i="5.49,455,1520899200"; d="scan'208";a="55794501"
From: Owen Smith <owen.smith@citrix.com>
To: <win-pv-devel@lists.xenproject.org>
Date: Tue, 29 May 2018 11:07:17 +0100
Message-ID: <20180529100717.8340-10-owen.smith@citrix.com>
X-Mailer: git-send-email 2.16.2.windows.1
In-Reply-To: <20180529100717.8340-1-owen.smith@citrix.com>
References: <20180529100717.8340-1-owen.smith@citrix.com>
MIME-Version: 1.0
Subject: [win-pv-devel] [PATCH 9/9] Set StorPortInitializePerfOpts
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Owen Smith <owen.smith@citrix.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>

U2V0cyBEUENfUkVESVJFQ1RJT04sIE9QVElNSVpFX0ZPUl9DT01QTEVUSU9OX0RVUklOR19TVEFS
VElPIGFuZApDT05DVVJSRU5UX0NIQU5ORUxTICh0byAibXVsdGktcXVldWUtbWF4LXF1ZXVlcyIp
IHRvIGltcHJvdmUgU3RvclBvcnQncwpkaXN0cmlidXRpb24gb2YgU1JCcyB0byB2Q1BVcy4KClNp
Z25lZC1vZmYtYnk6IE93ZW4gU21pdGggPG93ZW4uc21pdGhAY2l0cml4LmNvbT4KLS0tCiBzcmMv
eGVudmJkL2FkYXB0ZXIuYyB8IDU2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCA1NiBpbnNlcnRpb25zKCspCgpkaWZm
IC0tZ2l0IGEvc3JjL3hlbnZiZC9hZGFwdGVyLmMgYi9zcmMveGVudmJkL2FkYXB0ZXIuYwppbmRl
eCA3NzUzMzg4Li4zNjQ4N2UzIDEwMDY0NAotLS0gYS9zcmMveGVudmJkL2FkYXB0ZXIuYworKysg
Yi9zcmMveGVudmJkL2FkYXB0ZXIuYwpAQCAtMjA4Miw2ICsyMDgyLDYxIEBAIEFkYXB0ZXJId0Zp
bmRBZGFwdGVyKAogICAgIHJldHVybiBTUF9SRVRVUk5fRk9VTkQ7CiB9CiAKK3N0YXRpYyBGT1JD
RUlOTElORSBWT0lECitBZGFwdGVyU2V0UGVyZm9ybWFuY2VPcHRpb25zKAorICAgIElOICBQVk9J
RCAgICAgICAgICAgICAgIERldkV4dAorICAgICkKK3sKKyAgICBQRVJGX0NPTkZJR1VSQVRJT05f
REFUQSBQZXJmRGF0YTsKKyAgICBVTE9ORyAgICAgICAgICAgICAgICAgICBWZXJzaW9uOworICAg
IFVMT05HICAgICAgICAgICAgICAgICAgIHN0YXR1czsKKworICAgIFJ0bFplcm9NZW1vcnkoJlBl
cmZEYXRhLCBzaXplb2YoUEVSRl9DT05GSUdVUkFUSU9OX0RBVEEpKTsKKyAgICBQZXJmRGF0YS5W
ZXJzaW9uID0gU1RPUl9QRVJGX1ZFUlNJT047CisgICAgUGVyZkRhdGEuU2l6ZSA9IHNpemVvZihQ
RVJGX0NPTkZJR1VSQVRJT05fREFUQSk7CisKKyAgICBzdGF0dXMgPSBTdG9yUG9ydEluaXRpYWxp
emVQZXJmT3B0cyhEZXZFeHQsIFRSVUUsICZQZXJmRGF0YSk7CisgICAgaWYgKHN0YXR1cyA9PSBT
VE9SX1NUQVRVU19TVUNDRVNTKSB7CisgICAgICAgIFRyYWNlKCJWZXJzaW9uID0gJXVcbiIsIFBl
cmZEYXRhLlZlcnNpb24pOworICAgICAgICAvLyBkdW1wIGF2YWlsYWJsZSBvcHRpb25zCisgICAg
ICAgIGlmIChQZXJmRGF0YS5GbGFncyAmIFNUT1JfUEVSRl9EUENfUkVESVJFQ1RJT04pCisgICAg
ICAgICAgICBUcmFjZSgiRFBDX1JFRElSRUNUSU9OXG4iKTsKKyAgICAgICAgaWYgKFBlcmZEYXRh
LkZsYWdzICYgU1RPUl9QRVJGX0NPTkNVUlJFTlRfQ0hBTk5FTFMpCisgICAgICAgICAgICBUcmFj
ZSgiQ09OQ1VSUkVOVF9DSEFOTkVMU1xuIik7CisgICAgICAgIGlmIChQZXJmRGF0YS5GbGFncyAm
IFNUT1JfUEVSRl9JTlRFUlJVUFRfTUVTU0FHRV9SQU5HRVMpCisgICAgICAgICAgICBUcmFjZSgi
SU5URVJSVVBUX01FU1NBR0VfUkFOR0VTXG4iKTsKKyAgICAgICAgaWYgKFBlcmZEYXRhLkZsYWdz
ICYgU1RPUl9QRVJGX0FEVl9DT05GSUdfTE9DQUxJVFkpCisgICAgICAgICAgICBUcmFjZSgiQURW
X0NPTkZJR19MT0NBTElUWVxuIik7CisgICAgICAgIGlmIChQZXJmRGF0YS5GbGFncyAmIFNUT1Jf
UEVSRl9PUFRJTUlaRV9GT1JfQ09NUExFVElPTl9EVVJJTkdfU1RBUlRJTykKKyAgICAgICAgICAg
IFRyYWNlKCJPUFRJTUlaRV9GT1JfQ09NUExFVElPTl9EVVJJTkdfU1RBUlRJT1xuIik7CisgICAg
ICAgIGlmIChQZXJmRGF0YS5GbGFncyAmIFNUT1JfUEVSRl9EUENfUkVESVJFQ1RJT05fQ1VSUkVO
VF9DUFUpCisgICAgICAgICAgICBUcmFjZSgiRFBDX1JFRElSRUNUSU9OX0NVUlJFTlRfQ1BVXG4i
KTsKKyAgICAgICAgaWYgKFBlcmZEYXRhLkZsYWdzICYgU1RPUl9QRVJGX05PX1NHTCkKKyAgICAg
ICAgICAgIFRyYWNlKCJOT19TR0xcbiIpOworCisgICAgICAgIFZlcnNpb24gPSBQZXJmRGF0YS5W
ZXJzaW9uOworICAgIH0gZWxzZSB7CisgICAgICAgIFdhcm5pbmcoIlN0b3JQb3J0SW5pdGlhbGl6
ZVBlcmZPcHRzKEdldCkgZmFpbGVkICUwOHhcbiIsIHN0YXR1cyk7CisgICAgICAgIFZlcnNpb24g
PSBTVE9SX1BFUkZfVkVSU0lPTjsKKyAgICB9CisKKyAgICBSdGxaZXJvTWVtb3J5KCZQZXJmRGF0
YSwgc2l6ZW9mKFBFUkZfQ09ORklHVVJBVElPTl9EQVRBKSk7CisgICAgUGVyZkRhdGEuVmVyc2lv
biA9IFZlcnNpb247CisgICAgUGVyZkRhdGEuU2l6ZSA9IHNpemVvZihQRVJGX0NPTkZJR1VSQVRJ
T05fREFUQSk7CisKKyAgICBpZiAoVmVyc2lvbiA+PSAyKSB7CisgICAgICAgIFBlcmZEYXRhLkZs
YWdzIHw9IFNUT1JfUEVSRl9EUENfUkVESVJFQ1RJT04gfAorICAgICAgICAgICAgICAgICAgICAg
ICAgICBTVE9SX1BFUkZfQ09OQ1VSUkVOVF9DSEFOTkVMUzsKKyAgICAgICAgUGVyZkRhdGEuQ29u
Y3VycmVudENoYW5uZWxzID0gRHJpdmVyR2V0TWF4UXVldWVzKCk7CisgICAgfQorICAgIGlmIChW
ZXJzaW9uID49IDMpCisgICAgICAgIFBlcmZEYXRhLkZsYWdzIHw9IFNUT1JfUEVSRl9PUFRJTUla
RV9GT1JfQ09NUExFVElPTl9EVVJJTkdfU1RBUlRJTzsKKworICAgIHN0YXR1cyA9IFN0b3JQb3J0
SW5pdGlhbGl6ZVBlcmZPcHRzKERldkV4dCwgRkFMU0UsICZQZXJmRGF0YSk7CisgICAgaWYgKHN0
YXR1cyAhPSBTVE9SX1NUQVRVU19TVUNDRVNTKQorICAgICAgICBXYXJuaW5nKCJTdG9yUG9ydElu
aXRpYWxpemVQZXJmT3B0cyhTZXQpIGZhaWxlZCAlMDh4XG4iLCBzdGF0dXMpOworfQorCiBIV19Q
QVNTSVZFX0lOSVRJQUxJWkVfUk9VVElORSBBZGFwdGVySHdQYXNzaXZlSW5pdGlhbGl6ZTsKIAog
Qk9PTEVBTgpAQCAtMjA5NSw2ICsyMTUwLDcgQEAgQWRhcHRlckh3UGFzc2l2ZUluaXRpYWxpemUo
CiAgICAgUERFVklDRV9PQkpFQ1QgIExvd2VyRGV2aWNlT2JqZWN0OwogICAgIE5UU1RBVFVTICAg
ICAgICBzdGF0dXM7CiAKKyAgICBBZGFwdGVyU2V0UGVyZm9ybWFuY2VPcHRpb25zKERldkV4dCk7
CiAgICAgaWYgKFN0b3JQb3J0R2V0RGV2aWNlT2JqZWN0cyhEZXZFeHQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAmRGV2aWNlT2JqZWN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJlBoeXNpY2FsRGV2aWNlT2JqZWN0LAotLSAKMi4xNi4yLndpbmRvd3MuMQoK
Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCndpbi1wdi1k
ZXZlbCBtYWlsaW5nIGxpc3QKd2luLXB2LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBz
Oi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby93aW4tcHYtZGV2ZWw=

From win-pv-devel-bounces@lists.xenproject.org Tue May 29 10:07:52 2018
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 29 May 2018 10:07:52 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1fNbXk-0002fW-GX; Tue, 29 May 2018 10:07:52 +0000
Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <srs0=z+p9=iq=citrix.com=prvs=680118468=owen.smith@srs-us1.protection.inumbo.net>)
 id 1fNbXj-0002eN-L4
 for win-pv-devel@lists.xenproject.org; Tue, 29 May 2018 10:07:51 +0000
X-Inumbo-ID: da5f7d3c-6327-11e8-9728-bc764e045a96
Received: from SMTP03.CITRIX.COM (unknown [162.221.156.55])
 by us1-rack-dfw2.inumbo.com (Halon) with ESMTPS
 id da5f7d3c-6327-11e8-9728-bc764e045a96;
 Tue, 29 May 2018 12:05:45 +0200 (CEST)
X-IronPort-AV: E=Sophos;i="5.49,455,1520899200"; d="scan'208";a="55794488"
From: Owen Smith <owen.smith@citrix.com>
To: <win-pv-devel@lists.xenproject.org>
Date: Tue, 29 May 2018 11:07:09 +0100
Message-ID: <20180529100717.8340-2-owen.smith@citrix.com>
X-Mailer: git-send-email 2.16.2.windows.1
In-Reply-To: <20180529100717.8340-1-owen.smith@citrix.com>
References: <20180529100717.8340-1-owen.smith@citrix.com>
MIME-Version: 1.0
Subject: [win-pv-devel] [PATCH 1/9] Update blkif.h to upstream
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Owen Smith <owen.smith@citrix.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>

VXBkYXRlcyBibGtpZi5oIHRvIHRoZSB2ZXJzaW9uIGluIHhlbi5naXQgYXQgdGFnICI0LjExLjAt
cmMzIgoKQnkgb2JzZXJ2YXRpb24sIG1haW4gZGlmZmVyZW5jZXMgYXJlIHdoaXRlc3BhY2UgYW5k
IGFuIGV4dHJhCmNvbW1lbnQgYmxvY2sgZGVzY3JpYmluZyBtdWx0aS1xdWV1ZSBjaGFuZ2VzCgpT
aWduZWQtb2ZmLWJ5OiBPd2VuIFNtaXRoIDxvd2VuLnNtaXRoQGNpdHJpeC5jb20+Ci0tLQogaW5j
bHVkZS94ZW4vaW8vYmxraWYuaCB8IDExMDAgKysrKysrKysrKysrKysrKysrKysrKysrKystLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgNTk3IGluc2VydGlvbnMoKyksIDUw
MyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9pbmNsdWRlL3hlbi9pby9ibGtpZi5oIGIvaW5j
bHVkZS94ZW4vaW8vYmxraWYuaAppbmRleCBjM2UxNjljLi5mNjU5ODgxIDEwMDY0NAotLS0gYS9p
bmNsdWRlL3hlbi9pby9ibGtpZi5oCisrKyBiL2luY2x1ZGUveGVuL2lvL2Jsa2lmLmgKQEAgLTEs
MjkgKzEsMjkgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIGJsa2lmLmgKLSAqCi0gKiBV
bmlmaWVkIGJsb2NrLWRldmljZSBJL08gaW50ZXJmYWNlIGZvciBYZW4gZ3Vlc3QgT1Nlcy4KLSAq
Ci0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55
IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Ci0gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lh
dGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8KLSAqIGRlYWwgaW4g
dGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0
YXRpb24gdGhlCi0gKiByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNo
LCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IKLSAqIHNlbGwgY29waWVzIG9mIHRoZSBT
b2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCi0g
KiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
OgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24g
bm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCi0gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFs
IHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklE
RUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICog
SU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQg
Tk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIEFVVEhPUlMgT1IgQ09Q
WVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIK
LSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Ig
T1RIRVJXSVNFLCBBUklTSU5HCi0gKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRI
IFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCi0gKiBERUFMSU5HUyBJTiBUSEUgU09G
VFdBUkUuCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDQsIEtlaXIgRnJhc2VyCi0gKiBD
b3B5cmlnaHQgKGMpIDIwMTIsIFNwZWN0cmEgTG9naWMgQ29ycG9yYXRpb24KLSAqLworKiBibGtp
Zi5oCisqCisqIFVuaWZpZWQgYmxvY2stZGV2aWNlIEkvTyBpbnRlcmZhY2UgZm9yIFhlbiBndWVz
dCBPU2VzLgorKgorKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJn
ZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisqIG9mIHRoaXMgc29mdHdhcmUgYW5k
IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0bworKiBk
ZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91
dCBsaW1pdGF0aW9uIHRoZQorKiByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBw
dWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IKKyogc2VsbCBjb3BpZXMgb2Yg
dGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUg
aXMKKyogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9uczoKKyoKKyogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lv
biBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyogYWxsIGNvcGllcyBvciBzdWJzdGFudGlh
bCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisqCisqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURF
RCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisqIElN
UExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZLAorKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9O
SU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyogQVVUSE9SUyBPUiBDT1BZUklH
SFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorKiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVS
V0lTRSwgQVJJU0lORworKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBT
T0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCisqIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4K
KyoKKyogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDQsIEtlaXIgRnJhc2VyCisqIENvcHlyaWdodCAo
YykgMjAxMiwgU3BlY3RyYSBMb2dpYyBDb3Jwb3JhdGlvbgorKi8KIAogI2lmbmRlZiBfX1hFTl9Q
VUJMSUNfSU9fQkxLSUZfSF9fCiAjZGVmaW5lIF9fWEVOX1BVQkxJQ19JT19CTEtJRl9IX18KQEAg
LTMyLDE2ICszMiwxNiBAQAogI2luY2x1ZGUgIi4uL2dyYW50X3RhYmxlLmgiCiAKIC8qCi0gKiBG
cm9udC0+YmFjayBub3RpZmljYXRpb25zOiBXaGVuIGVucXVldWluZyBhIG5ldyByZXF1ZXN0LCBz
ZW5kaW5nIGEKLSAqIG5vdGlmaWNhdGlvbiBjYW4gYmUgbWFkZSBjb25kaXRpb25hbCBvbiByZXFf
ZXZlbnQgKGkuZS4sIHRoZSBnZW5lcmljCi0gKiBob2xkLW9mZiBtZWNoYW5pc20gcHJvdmlkZWQg
YnkgdGhlIHJpbmcgbWFjcm9zKS4gQmFja2VuZHMgbXVzdCBzZXQKLSAqIHJlcV9ldmVudCBhcHBy
b3ByaWF0ZWx5IChlLmcuLCB1c2luZyBSSU5HX0ZJTkFMX0NIRUNLX0ZPUl9SRVFVRVNUUygpKS4K
LSAqCi0gKiBCYWNrLT5mcm9udCBub3RpZmljYXRpb25zOiBXaGVuIGVucXVldWluZyBhIG5ldyBy
ZXNwb25zZSwgc2VuZGluZyBhCi0gKiBub3RpZmljYXRpb24gY2FuIGJlIG1hZGUgY29uZGl0aW9u
YWwgb24gcnNwX2V2ZW50IChpLmUuLCB0aGUgZ2VuZXJpYwotICogaG9sZC1vZmYgbWVjaGFuaXNt
IHByb3ZpZGVkIGJ5IHRoZSByaW5nIG1hY3JvcykuIEZyb250ZW5kcyBtdXN0IHNldAotICogcnNw
X2V2ZW50IGFwcHJvcHJpYXRlbHkgKGUuZy4sIHVzaW5nIFJJTkdfRklOQUxfQ0hFQ0tfRk9SX1JF
U1BPTlNFUygpKS4KLSAqLworKiBGcm9udC0+YmFjayBub3RpZmljYXRpb25zOiBXaGVuIGVucXVl
dWluZyBhIG5ldyByZXF1ZXN0LCBzZW5kaW5nIGEKKyogbm90aWZpY2F0aW9uIGNhbiBiZSBtYWRl
IGNvbmRpdGlvbmFsIG9uIHJlcV9ldmVudCAoaS5lLiwgdGhlIGdlbmVyaWMKKyogaG9sZC1vZmYg
bWVjaGFuaXNtIHByb3ZpZGVkIGJ5IHRoZSByaW5nIG1hY3JvcykuIEJhY2tlbmRzIG11c3Qgc2V0
CisqIHJlcV9ldmVudCBhcHByb3ByaWF0ZWx5IChlLmcuLCB1c2luZyBSSU5HX0ZJTkFMX0NIRUNL
X0ZPUl9SRVFVRVNUUygpKS4KKyoKKyogQmFjay0+ZnJvbnQgbm90aWZpY2F0aW9uczogV2hlbiBl
bnF1ZXVpbmcgYSBuZXcgcmVzcG9uc2UsIHNlbmRpbmcgYQorKiBub3RpZmljYXRpb24gY2FuIGJl
IG1hZGUgY29uZGl0aW9uYWwgb24gcnNwX2V2ZW50IChpLmUuLCB0aGUgZ2VuZXJpYworKiBob2xk
LW9mZiBtZWNoYW5pc20gcHJvdmlkZWQgYnkgdGhlIHJpbmcgbWFjcm9zKS4gRnJvbnRlbmRzIG11
c3Qgc2V0CisqIHJzcF9ldmVudCBhcHByb3ByaWF0ZWx5IChlLmcuLCB1c2luZyBSSU5HX0ZJTkFM
X0NIRUNLX0ZPUl9SRVNQT05TRVMoKSkuCisqLwogCiAjaWZuZGVmIGJsa2lmX3ZkZXZfdAogI2Rl
ZmluZSBibGtpZl92ZGV2X3QgICB1aW50MTZfdApAQCAtNDksNDg3ICs0OSw1ODEgQEAKICNkZWZp
bmUgYmxraWZfc2VjdG9yX3QgdWludDY0X3QKIAogLyoKLSAqIEZlYXR1cmUgYW5kIFBhcmFtZXRl
ciBOZWdvdGlhdGlvbgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBU
aGUgdHdvIGhhbHZlcyBvZiBhIFhlbiBibG9jayBkcml2ZXIgdXRpbGl6ZSBub2RlcyB3aXRoaW4g
dGhlIFhlblN0b3JlIHRvCi0gKiBjb21tdW5pY2F0ZSBjYXBhYmlsaXRpZXMgYW5kIHRvIG5lZ290
aWF0ZSBvcGVyYXRpbmcgcGFyYW1ldGVycy4gIFRoaXMKLSAqIHNlY3Rpb24gZW51bWVyYXRlcyB0
aGVzZSBub2RlcyB3aGljaCByZXNpZGUgaW4gdGhlIHJlc3BlY3RpdmUgZnJvbnQgYW5kCi0gKiBi
YWNrZW5kIHBvcnRpb25zIG9mIHRoZSBYZW5TdG9yZSwgZm9sbG93aW5nIHRoZSBYZW5CdXMgY29u
dmVudGlvbi4KLSAqCi0gKiBBbGwgZGF0YSBpbiB0aGUgWGVuU3RvcmUgaXMgc3RvcmVkIGFzIHN0
cmluZ3MuICBOb2RlcyBzcGVjaWZ5aW5nIG51bWVyaWMKLSAqIHZhbHVlcyBhcmUgZW5jb2RlZCBp
biBkZWNpbWFsLiAgSW50ZWdlciB2YWx1ZSByYW5nZXMgbGlzdGVkIGJlbG93IGFyZQotICogZXhw
cmVzc2VkIGFzIGZpeGVkIHNpemVkIGludGVnZXIgdHlwZXMgY2FwYWJsZSBvZiBzdG9yaW5nIHRo
ZSBjb252ZXJzaW9uCi0gKiBvZiBhIHByb3Blcmx5IGZvcm1hdGVkIG5vZGUgc3RyaW5nLCB3aXRo
b3V0IGxvc3Mgb2YgaW5mb3JtYXRpb24uCi0gKgotICogQW55IHNwZWNpZmllZCBkZWZhdWx0IHZh
bHVlIGlzIGluIGVmZmVjdCBpZiB0aGUgY29ycmVzcG9uZGluZyBYZW5CdXMgbm9kZQotICogaXMg
bm90IHByZXNlbnQgaW4gdGhlIFhlblN0b3JlLgotICoKLSAqIFhlblN0b3JlIG5vZGVzIGluIHNl
Y3Rpb25zIG1hcmtlZCAiUFJJVkFURSIgYXJlIHNvbGVseSBmb3IgdXNlIGJ5IHRoZQotICogZHJp
dmVyIHNpZGUgd2hvc2UgWGVuQnVzIHRyZWUgY29udGFpbnMgdGhlbS4KLSAqCi0gKiBYZW5TdG9y
ZSBub2RlcyBtYXJrZWQgIkRFUFJFQ0FURUQiIGluIHRoZWlyIG5vdGVzIHNlY3Rpb24gc2hvdWxk
IG9ubHkgYmUKLSAqIHVzZWQgdG8gcHJvdmlkZSBpbnRlcm9wZXJhYmlsaXR5IHdpdGggbGVnYWN5
IGltcGxlbWVudGF0aW9ucy4KLSAqCi0gKiBTZWUgdGhlIFhlbkJ1cyBzdGF0ZSB0cmFuc2l0aW9u
IGRpYWdyYW0gYmVsb3cgZm9yIGRldGFpbHMgb24gd2hlbiBYZW5CdXMKLSAqIG5vZGVzIG11c3Qg
YmUgcHVibGlzaGVkIGFuZCB3aGVuIHRoZXkgY2FuIGJlIHF1ZXJpZWQuCi0gKgotICoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYWNrZW5kIFhlbkJ1
cyBOb2RlcwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICotLS0tLS0tLS0tLS0tLS0tLS0g
QmFja2VuZCBEZXZpY2UgSWRlbnRpZmljYXRpb24gKFBSSVZBVEUpIC0tLS0tLS0tLS0tLS0tLS0t
LQotICoKLSAqIG1vZGUKLSAqICAgICAgVmFsdWVzOiAgICAgICAgICJyIiAocmVhZCBvbmx5KSwg
InciICh3cml0YWJsZSkKLSAqCi0gKiAgICAgIFRoZSByZWFkIG9yIHdyaXRlIGFjY2VzcyBwZXJt
aXNzaW9ucyB0byB0aGUgYmFja2luZyBzdG9yZSB0byBiZQotICogICAgICBncmFudGVkIHRvIHRo
ZSBmcm9udGVuZC4KLSAqCi0gKiBwYXJhbXMKLSAqICAgICAgVmFsdWVzOiAgICAgICAgIHN0cmlu
ZwotICoKLSAqICAgICAgQSBmcmVlIGZvcm1hdHRlZCBzdHJpbmcgcHJvdmlkaW5nIHN1ZmZpY2ll
bnQgaW5mb3JtYXRpb24gZm9yIHRoZQotICogICAgICBiYWNrZW5kIGRyaXZlciB0byBvcGVuIHRo
ZSBiYWNraW5nIGRldmljZS4gIChlLmcuIHRoZSBwYXRoIHRvIHRoZQotICogICAgICBmaWxlIG9y
IGJsb2NrIGRldmljZSByZXByZXNlbnRpbmcgdGhlIGJhY2tpbmcgc3RvcmUuKQotICoKLSAqIHR5
cGUKLSAqICAgICAgVmFsdWVzOiAgICAgICAgICJmaWxlIiwgInBoeSIsICJ0YXAiCi0gKgotICog
ICAgICBUaGUgdHlwZSBvZiB0aGUgYmFja2luZyBkZXZpY2Uvb2JqZWN0LgotICoKLSAqLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZlYXR1cmVzIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotICoKLSAqIGZlYXR1cmUtYmFycmllcgotICogICAgICBWYWx1ZXM6ICAg
ICAgICAgMC8xIChib29sZWFuKQotICogICAgICBEZWZhdWx0IFZhbHVlOiAgMAotICoKLSAqICAg
ICAgQSB2YWx1ZSBvZiAiMSIgaW5kaWNhdGVzIHRoYXQgdGhlIGJhY2tlbmQgY2FuIHByb2Nlc3Mg
cmVxdWVzdHMKLSAqICAgICAgY29udGFpbmluZyB0aGUgQkxLSUZfT1BfV1JJVEVfQkFSUklFUiBy
ZXF1ZXN0IG9wY29kZS4gIFJlcXVlc3RzCi0gKiAgICAgIG9mIHRoaXMgdHlwZSBtYXkgc3RpbGwg
YmUgcmV0dXJuZWQgYXQgYW55IHRpbWUgd2l0aCB0aGUKLSAqICAgICAgQkxLSUZfUlNQX0VPUE5P
VFNVUFAgcmVzdWx0IGNvZGUuCi0gKgotICogZmVhdHVyZS1mbHVzaC1jYWNoZQotICogICAgICBW
YWx1ZXM6ICAgICAgICAgMC8xIChib29sZWFuKQotICogICAgICBEZWZhdWx0IFZhbHVlOiAgMAot
ICoKLSAqICAgICAgQSB2YWx1ZSBvZiAiMSIgaW5kaWNhdGVzIHRoYXQgdGhlIGJhY2tlbmQgY2Fu
IHByb2Nlc3MgcmVxdWVzdHMKLSAqICAgICAgY29udGFpbmluZyB0aGUgQkxLSUZfT1BfRkxVU0hf
RElTS0NBQ0hFIHJlcXVlc3Qgb3Bjb2RlLiAgUmVxdWVzdHMKLSAqICAgICAgb2YgdGhpcyB0eXBl
IG1heSBzdGlsbCBiZSByZXR1cm5lZCBhdCBhbnkgdGltZSB3aXRoIHRoZQotICogICAgICBCTEtJ
Rl9SU1BfRU9QTk9UU1VQUCByZXN1bHQgY29kZS4KLSAqCi0gKiBmZWF0dXJlLWRpc2NhcmQKLSAq
ICAgICAgVmFsdWVzOiAgICAgICAgIDAvMSAoYm9vbGVhbikKLSAqICAgICAgRGVmYXVsdCBWYWx1
ZTogIDAKLSAqCi0gKiAgICAgIEEgdmFsdWUgb2YgIjEiIGluZGljYXRlcyB0aGF0IHRoZSBiYWNr
ZW5kIGNhbiBwcm9jZXNzIHJlcXVlc3RzCi0gKiAgICAgIGNvbnRhaW5pbmcgdGhlIEJMS0lGX09Q
X0RJU0NBUkQgcmVxdWVzdCBvcGNvZGUuICBSZXF1ZXN0cwotICogICAgICBvZiB0aGlzIHR5cGUg
bWF5IHN0aWxsIGJlIHJldHVybmVkIGF0IGFueSB0aW1lIHdpdGggdGhlCi0gKiAgICAgIEJMS0lG
X1JTUF9FT1BOT1RTVVBQIHJlc3VsdCBjb2RlLgotICoKLSAqIGZlYXR1cmUtcGVyc2lzdGVudAot
ICogICAgICBWYWx1ZXM6ICAgICAgICAgMC8xIChib29sZWFuKQotICogICAgICBEZWZhdWx0IFZh
bHVlOiAgMAotICogICAgICBOb3RlczogNwotICoKLSAqICAgICAgQSB2YWx1ZSBvZiAiMSIgaW5k
aWNhdGVzIHRoYXQgdGhlIGJhY2tlbmQgY2FuIGtlZXAgdGhlIGdyYW50cyB1c2VkCi0gKiAgICAg
IGJ5IHRoZSBmcm9udGVuZCBkcml2ZXIgbWFwcGVkLCBzbyB0aGUgc2FtZSBzZXQgb2YgZ3JhbnRz
IHNob3VsZCBiZQotICogICAgICB1c2VkIGluIGFsbCB0cmFuc2FjdGlvbnMuIFRoZSBtYXhpbXVt
IG51bWJlciBvZiBncmFudHMgdGhlIGJhY2tlbmQKLSAqICAgICAgY2FuIG1hcCBwZXJzaXN0ZW50
bHkgZGVwZW5kcyBvbiB0aGUgaW1wbGVtZW50YXRpb24sIGJ1dCBpZGVhbGx5IGl0Ci0gKiAgICAg
IHNob3VsZCBiZSBSSU5HX1NJWkUgKiBCTEtJRl9NQVhfU0VHTUVOVFNfUEVSX1JFUVVFU1QuIFVz
aW5nIHRoaXMKLSAqICAgICAgZmVhdHVyZSB0aGUgYmFja2VuZCBkb2Vzbid0IG5lZWQgdG8gdW5t
YXAgZWFjaCBncmFudCwgcHJldmVudGluZwotICogICAgICBjb3N0bHkgVExCIGZsdXNoZXMuIFRo
ZSBiYWNrZW5kIGRyaXZlciBzaG91bGQgb25seSBtYXAgZ3JhbnRzCi0gKiAgICAgIHBlcnNpc3Rl
bnRseSBpZiB0aGUgZnJvbnRlbmQgc3VwcG9ydHMgaXQuIElmIGEgYmFja2VuZCBkcml2ZXIgY2hv
b3NlcwotICogICAgICB0byB1c2UgdGhlIHBlcnNpc3RlbnQgcHJvdG9jb2wgd2hlbiB0aGUgZnJv
bnRlbmQgZG9lc24ndCBzdXBwb3J0IGl0LAotICogICAgICBpdCB3aWxsIHByb2JhYmx5IGhpdCB0
aGUgbWF4aW11bSBudW1iZXIgb2YgcGVyc2lzdGVudGx5IG1hcHBlZCBncmFudHMKLSAqICAgICAg
KGR1ZSB0byB0aGUgZmFjdCB0aGF0IHRoZSBmcm9udGVuZCB3b24ndCBiZSByZXVzaW5nIHRoZSBz
YW1lIGdyYW50cyksCi0gKiAgICAgIGFuZCBmYWxsIGJhY2sgdG8gbm9uLXBlcnNpc3RlbnQgbW9k
ZS4gQmFja2VuZCBpbXBsZW1lbnRhdGlvbnMgbWF5Ci0gKiAgICAgIHNocmluayBvciBleHBhbmQg
dGhlIG51bWJlciBvZiBwZXJzaXN0ZW50bHkgbWFwcGVkIGdyYW50cyB3aXRob3V0Ci0gKiAgICAg
IG5vdGlmeWluZyB0aGUgZnJvbnRlbmQgZGVwZW5kaW5nIG9uIG1lbW9yeSBjb25zdHJhaW50cyAo
dGhpcyBtaWdodAotICogICAgICBjYXVzZSBhIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uKS4KLSAq
Ci0gKiAgICAgIElmIGEgYmFja2VuZCBkcml2ZXIgd2FudHMgdG8gbGltaXQgdGhlIG1heGltdW0g
bnVtYmVyIG9mIHBlcnNpc3RlbnRseQotICogICAgICBtYXBwZWQgZ3JhbnRzIHRvIGEgdmFsdWUg
bGVzcyB0aGFuIFJJTkdfU0laRSAqCi0gKiAgICAgIEJMS0lGX01BWF9TRUdNRU5UU19QRVJfUkVR
VUVTVCBhIExSVSBzdHJhdGVneSBzaG91bGQgYmUgdXNlZCB0bwotICogICAgICBkaXNjYXJkIHRo
ZSBncmFudHMgdGhhdCBhcmUgbGVzcyBjb21tb25seSB1c2VkLiBVc2luZyBhIExSVSBpbiB0aGUK
LSAqICAgICAgYmFja2VuZCBkcml2ZXIgcGFpcmVkIHdpdGggYSBMSUZPIHF1ZXVlIGluIHRoZSBm
cm9udGVuZCB3aWxsCi0gKiAgICAgIGFsbG93IHVzIHRvIGhhdmUgYmV0dGVyIHBlcmZvcm1hbmNl
IGluIHRoaXMgc2NlbmFyaW8uCi0gKgotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBSZXF1ZXN0
IFRyYW5zcG9ydCBQYXJhbWV0ZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICoKLSAqIG1h
eC1yaW5nLXBhZ2Utb3JkZXIKLSAqICAgICAgVmFsdWVzOiAgICAgICAgIDx1aW50MzJfdD4KLSAq
ICAgICAgRGVmYXVsdCBWYWx1ZTogIDAKLSAqICAgICAgTm90ZXM6ICAgICAgICAgIDEsIDMKLSAq
Ci0gKiAgICAgIFRoZSBtYXhpbXVtIHN1cHBvcnRlZCBzaXplIG9mIHRoZSByZXF1ZXN0IHJpbmcg
YnVmZmVyIGluIHVuaXRzIG9mCi0gKiAgICAgIGxiKG1hY2hpbmUgcGFnZXMpLiAoZS5nLiAwID09
IDEgcGFnZSwgIDEgPSAyIHBhZ2VzLCAyID09IDQgcGFnZXMsCi0gKiAgICAgIGV0Yy4pLgotICoK
LSAqIG1heC1yaW5nLXBhZ2VzCi0gKiAgICAgIFZhbHVlczogICAgICAgICA8dWludDMyX3Q+Ci0g
KiAgICAgIERlZmF1bHQgVmFsdWU6ICAxCi0gKiAgICAgIE5vdGVzOiAgICAgICAgICBERVBSRUNB
VEVELCAyLCAzCi0gKgotICogICAgICBUaGUgbWF4aW11bSBzdXBwb3J0ZWQgc2l6ZSBvZiB0aGUg
cmVxdWVzdCByaW5nIGJ1ZmZlciBpbiB1bml0cyBvZgotICogICAgICBtYWNoaW5lIHBhZ2VzLiAg
VGhlIHZhbHVlIG11c3QgYmUgYSBwb3dlciBvZiAyLgotICoKLSAqLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSBCYWNrZW5kIERldmljZSBQcm9wZXJ0aWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLSAqCi0gKiBkaXNjYXJkLWFsaWdubWVudAotICogICAgICBWYWx1ZXM6ICAgICAgICAgPHVp
bnQzMl90PgotICogICAgICBEZWZhdWx0IFZhbHVlOiAgMAotICogICAgICBOb3RlczogICAgICAg
ICAgNCwgNQotICoKLSAqICAgICAgVGhlIG9mZnNldCwgaW4gYnl0ZXMgZnJvbSB0aGUgYmVnaW5u
aW5nIG9mIHRoZSB2aXJ0dWFsIGJsb2NrIGRldmljZSwKLSAqICAgICAgdG8gdGhlIGZpcnN0LCBh
ZGRyZXNzYWJsZSwgZGlzY2FyZCBleHRlbnQgb24gdGhlIHVuZGVybHlpbmcgZGV2aWNlLgotICoK
LSAqIGRpc2NhcmQtZ3JhbnVsYXJpdHkKLSAqICAgICAgVmFsdWVzOiAgICAgICAgIDx1aW50MzJf
dD4KLSAqICAgICAgRGVmYXVsdCBWYWx1ZTogIDwic2VjdG9yLXNpemUiPgotICogICAgICBOb3Rl
czogICAgICAgICAgNAotICoKLSAqICAgICAgVGhlIHNpemUsIGluIGJ5dGVzLCBvZiB0aGUgaW5k
aXZpZHVhbGx5IGFkZHJlc3NhYmxlIGRpc2NhcmQgZXh0ZW50cwotICogICAgICBvZiB0aGUgdW5k
ZXJseWluZyBkZXZpY2UuCi0gKgotICogZGlzY2FyZC1zZWN1cmUKLSAqICAgICAgVmFsdWVzOiAg
ICAgICAgIDAvMSAoYm9vbGVhbikKLSAqICAgICAgRGVmYXVsdCBWYWx1ZTogIDAKLSAqICAgICAg
Tm90ZXM6ICAgICAgICAgIDEwCi0gKgotICogICAgICBBIHZhbHVlIG9mICIxIiBpbmRpY2F0ZXMg
dGhhdCB0aGUgYmFja2VuZCBjYW4gcHJvY2VzcyBCTEtJRl9PUF9ESVNDQVJECi0gKiAgICAgIHJl
cXVlc3RzIHdpdGggdGhlIEJMS0lGX0RJU0NBUkRfU0VDVVJFIGZsYWcgc2V0LgotICoKLSAqIGlu
Zm8KLSAqICAgICAgVmFsdWVzOiAgICAgICAgIDx1aW50MzJfdD4gKGJpdG1hcCkKLSAqCi0gKiAg
ICAgIEEgY29sbGVjdGlvbiBvZiBiaXQgZmxhZ3MgZGVzY3JpYmluZyBhdHRyaWJ1dGVzIG9mIHRo
ZSBiYWNraW5nCi0gKiAgICAgIGRldmljZS4gIFRoZSBWRElTS18qIG1hY3JvcyBkZWZpbmUgdGhl
IG1lYW5pbmcgb2YgZWFjaCBiaXQKLSAqICAgICAgbG9jYXRpb24uCi0gKgotICogc2VjdG9yLXNp
emUKLSAqICAgICAgVmFsdWVzOiAgICAgICAgIDx1aW50MzJfdD4KLSAqCi0gKiAgICAgIFRoZSBs
b2dpY2FsIHNlY3RvciBzaXplLCBpbiBieXRlcywgb2YgdGhlIGJhY2tlbmQgZGV2aWNlLgotICoK
LSAqIHBoeXNpY2FsLXNlY3Rvci1zaXplCi0gKiAgICAgIFZhbHVlczogICAgICAgICA8dWludDMy
X3Q+Ci0gKgotICogICAgICBUaGUgcGh5c2ljYWwgc2VjdG9yIHNpemUsIGluIGJ5dGVzLCBvZiB0
aGUgYmFja2VuZCBkZXZpY2UuCi0gKgotICogc2VjdG9ycwotICogICAgICBWYWx1ZXM6ICAgICAg
ICAgPHVpbnQ2NF90PgotICoKLSAqICAgICAgVGhlIHNpemUgb2YgdGhlIGJhY2tlbmQgZGV2aWNl
LCBleHByZXNzZWQgaW4gdW5pdHMgb2YgaXRzIGxvZ2ljYWwKLSAqICAgICAgc2VjdG9yIHNpemUg
KCJzZWN0b3Itc2l6ZSIpLgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgRnJvbnRlbmQgWGVuQnVzIE5vZGVzCi0gKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioKLSAqCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJlcXVlc3QgVHJhbnNwb3J0IFBh
cmFtZXRlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqCi0gKiBldmVudC1jaGFubmVsCi0g
KiAgICAgIFZhbHVlczogICAgICAgICA8dWludDMyX3Q+Ci0gKgotICogICAgICBUaGUgaWRlbnRp
ZmllciBvZiB0aGUgWGVuIGV2ZW50IGNoYW5uZWwgdXNlZCB0byBzaWduYWwgYWN0aXZpdHkKLSAq
ICAgICAgaW4gdGhlIHJpbmcgYnVmZmVyLgotICoKLSAqIHJpbmctcmVmCi0gKiAgICAgIFZhbHVl
czogICAgICAgICA8dWludDMyX3Q+Ci0gKiAgICAgIE5vdGVzOiAgICAgICAgICA2Ci0gKgotICog
ICAgICBUaGUgWGVuIGdyYW50IHJlZmVyZW5jZSBncmFudGluZyBwZXJtaXNzaW9uIGZvciB0aGUg
YmFja2VuZCB0byBtYXAKLSAqICAgICAgdGhlIHNvbGUgcGFnZSBpbiBhIHNpbmdsZSBwYWdlIHNp
emVkIHJpbmcgYnVmZmVyLgotICoKLSAqIHJpbmctcmVmJXUKLSAqICAgICAgVmFsdWVzOiAgICAg
ICAgIDx1aW50MzJfdD4KLSAqICAgICAgTm90ZXM6ICAgICAgICAgIDYKLSAqCi0gKiAgICAgIEZv
ciBhIGZyb250ZW5kIHByb3ZpZGluZyBhIG11bHRpLXBhZ2UgcmluZywgYSAibnVtYmVyIG9mIHJp
bmcgcGFnZXMiCi0gKiAgICAgIHNpemVkIGxpc3Qgb2Ygbm9kZXMsIGVhY2ggY29udGFpbmluZyBh
IFhlbiBncmFudCByZWZlcmVuY2UgZ3JhbnRpbmcKLSAqICAgICAgcGVybWlzc2lvbiBmb3IgdGhl
IGJhY2tlbmQgdG8gbWFwIHRoZSBwYWdlIG9mIHRoZSByaW5nIGxvY2F0ZWQKLSAqICAgICAgYXQg
cGFnZSBpbmRleCAiJXUiLiAgUGFnZSBpbmRleGVzIGFyZSB6ZXJvIGJhc2VkLgotICoKLSAqIHBy
b3RvY29sCi0gKiAgICAgIFZhbHVlczogICAgICAgICBzdHJpbmcgKFhFTl9JT19QUk9UT19BQklf
KikKLSAqICAgICAgRGVmYXVsdCBWYWx1ZTogIFhFTl9JT19QUk9UT19BQklfTkFUSVZFCi0gKgot
ICogICAgICBUaGUgbWFjaGluZSBBQkkgcnVsZXMgZ292ZXJuaW5nIHRoZSBmb3JtYXQgb2YgYWxs
IHJpbmcgcmVxdWVzdCBhbmQKLSAqICAgICAgcmVzcG9uc2Ugc3RydWN0dXJlcy4KLSAqCi0gKiBy
aW5nLXBhZ2Utb3JkZXIKLSAqICAgICAgVmFsdWVzOiAgICAgICAgIDx1aW50MzJfdD4KLSAqICAg
ICAgRGVmYXVsdCBWYWx1ZTogIDAKLSAqICAgICAgTWF4aW11bSBWYWx1ZTogIE1BWChmZnMobWF4
LXJpbmctcGFnZXMpIC0gMSwgbWF4LXJpbmctcGFnZS1vcmRlcikKLSAqICAgICAgTm90ZXM6ICAg
ICAgICAgIDEsIDMKLSAqCi0gKiAgICAgIFRoZSBzaXplIG9mIHRoZSBmcm9udGVuZCBhbGxvY2F0
ZWQgcmVxdWVzdCByaW5nIGJ1ZmZlciBpbiB1bml0cwotICogICAgICBvZiBsYihtYWNoaW5lIHBh
Z2VzKS4gKGUuZy4gMCA9PSAxIHBhZ2UsIDEgPSAyIHBhZ2VzLCAyID09IDQgcGFnZXMsCi0gKiAg
ICAgIGV0Yy4pLgotICoKLSAqIG51bS1yaW5nLXBhZ2VzCi0gKiAgICAgIFZhbHVlczogICAgICAg
ICA8dWludDMyX3Q+Ci0gKiAgICAgIERlZmF1bHQgVmFsdWU6ICAxCi0gKiAgICAgIE1heGltdW0g
VmFsdWU6ICBNQVgobWF4LXJpbmctcGFnZXMsKDB4MSA8PCBtYXgtcmluZy1wYWdlLW9yZGVyKSkK
LSAqICAgICAgTm90ZXM6ICAgICAgICAgIERFUFJFQ0FURUQsIDIsIDMKLSAqCi0gKiAgICAgIFRo
ZSBzaXplIG9mIHRoZSBmcm9udGVuZCBhbGxvY2F0ZWQgcmVxdWVzdCByaW5nIGJ1ZmZlciBpbiB1
bml0cyBvZgotICogICAgICBtYWNoaW5lIHBhZ2VzLiAgVGhlIHZhbHVlIG11c3QgYmUgYSBwb3dl
ciBvZiAyLgotICoKLSAqIGZlYXR1cmUtcGVyc2lzdGVudAotICogICAgICBWYWx1ZXM6ICAgICAg
ICAgMC8xIChib29sZWFuKQotICogICAgICBEZWZhdWx0IFZhbHVlOiAgMAotICogICAgICBOb3Rl
czogNywgOCwgOQotICoKLSAqICAgICAgQSB2YWx1ZSBvZiAiMSIgaW5kaWNhdGVzIHRoYXQgdGhl
IGZyb250ZW5kIHdpbGwgcmV1c2UgdGhlIHNhbWUgZ3JhbnRzCi0gKiAgICAgIGZvciBhbGwgdHJh
bnNhY3Rpb25zLCBhbGxvd2luZyB0aGUgYmFja2VuZCB0byBtYXAgdGhlbSB3aXRoIHdyaXRlCi0g
KiAgICAgIGFjY2VzcyAoZXZlbiB3aGVuIGl0IHNob3VsZCBiZSByZWFkLW9ubHkpLiBJZiB0aGUg
ZnJvbnRlbmQgaGl0cyB0aGUKLSAqICAgICAgbWF4aW11bSBudW1iZXIgb2YgYWxsb3dlZCBwZXJz
aXN0ZW50bHkgbWFwcGVkIGdyYW50cywgaXQgY2FuIGZhbGxiYWNrCi0gKiAgICAgIHRvIG5vbiBw
ZXJzaXN0ZW50IG1vZGUuIFRoaXMgd2lsbCBjYXVzZSBhIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9u
LAotICogICAgICBzaW5jZSB0aGUgdGhlIGJhY2tlbmQgZHJpdmVyIHdpbGwgc3RpbGwgdHJ5IHRv
IG1hcCB0aG9zZSBncmFudHMKLSAqICAgICAgcGVyc2lzdGVudGx5LiBTaW5jZSB0aGUgcGVyc2lz
dGVudCBncmFudHMgcHJvdG9jb2wgaXMgY29tcGF0aWJsZSB3aXRoCi0gKiAgICAgIHRoZSBwcmV2
aW91cyBwcm90b2NvbCwgYSBmcm9udGVuZCBkcml2ZXIgY2FuIGNob29zZSB0byB3b3JrIGluCi0g
KiAgICAgIHBlcnNpc3RlbnQgbW9kZSBldmVuIHdoZW4gdGhlIGJhY2tlbmQgZG9lc24ndCBzdXBw
b3J0IGl0LgotICoKLSAqICAgICAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB0aGUgZnJvbnRlbmQg
ZHJpdmVyIHN0b3JlcyB0aGUgcGVyc2lzdGVudGx5Ci0gKiAgICAgIG1hcHBlZCBncmFudHMgaW4g
YSBMSUZPIHF1ZXVlLCBzbyBhIHN1YnNldCBvZiBhbGwgcGVyc2lzdGVudGx5IG1hcHBlZAotICog
ICAgICBncmFudHMgZ2V0cyB1c2VkIGNvbW1vbmx5LiBUaGlzIGlzIGRvbmUgaW4gY2FzZSB0aGUg
YmFja2VuZCBkcml2ZXIKLSAqICAgICAgZGVjaWRlcyB0byBsaW1pdCB0aGUgbWF4aW11bSBudW1i
ZXIgb2YgcGVyc2lzdGVudGx5IG1hcHBlZCBncmFudHMKLSAqICAgICAgdG8gYSB2YWx1ZSBsZXNz
IHRoYW4gUklOR19TSVpFICogQkxLSUZfTUFYX1NFR01FTlRTX1BFUl9SRVFVRVNULgotICoKLSAq
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBWaXJ0dWFsIERldmljZSBQcm9wZXJ0aWVzIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqCi0gKiBkZXZpY2UtdHlwZQotICogICAgICBWYWx1ZXM6
ICAgICAgICAgImRpc2siLCAiY2Ryb20iLCAiZmxvcHB5IiwgZXRjLgotICoKLSAqIHZpcnR1YWwt
ZGV2aWNlCi0gKiAgICAgIFZhbHVlczogICAgICAgICA8dWludDMyX3Q+Ci0gKgotICogICAgICBB
IHZhbHVlIGluZGljYXRpbmcgdGhlIHBoeXNpY2FsIGRldmljZSB0byB2aXJ0dWFsaXplIHdpdGhp
biB0aGUKLSAqICAgICAgZnJvbnRlbmQncyBkb21haW4uICAoZS5nLiAiVGhlIGZpcnN0IEFUQSBk
aXNrIiwgIlRoZSB0aGlyZCBTQ1NJCi0gKiAgICAgIGRpc2siLCBldGMuKQotICoKLSAqICAgICAg
U2VlIGRvY3MvbWlzYy92YmQtaW50ZXJmYWNlLnR4dCBmb3IgZGV0YWlscyBvbiB0aGUgZm9ybWF0
IG9mIHRoaXMKLSAqICAgICAgdmFsdWUuCi0gKgotICogTm90ZXMKLSAqIC0tLS0tCi0gKiAoMSkg
TXVsdGktcGFnZSByaW5nIGJ1ZmZlciBzY2hlbWUgZmlyc3QgZGV2ZWxvcGVkIGluIHRoZSBDaXRy
aXggWGVuU2VydmVyCi0gKiAgICAgUFYgZHJpdmVycy4KLSAqICgyKSBNdWx0aS1wYWdlIHJpbmcg
YnVmZmVyIHNjaGVtZSBmaXJzdCB1c2VkIGluIHNvbWUgUmVkSGF0IGRpc3RyaWJ1dGlvbnMKLSAq
ICAgICBpbmNsdWRpbmcgYSBkaXN0cmlidXRpb24gZGVwbG95ZWQgb24gY2VydGFpbiBub2RlcyBv
ZiB0aGUgQW1hem9uCi0gKiAgICAgRUMyIGNsdXN0ZXIuCi0gKiAoMykgU3VwcG9ydCBmb3IgbXVs
dGktcGFnZSByaW5nIGJ1ZmZlcnMgd2FzIGltcGxlbWVudGVkIGluZGVwZW5kZW50bHksCi0gKiAg
ICAgaW4gc2xpZ2h0bHkgZGlmZmVyZW50IGZvcm1zLCBieSBib3RoIENpdHJpeCBhbmQgUmVkSGF0
L0FtYXpvbi4KLSAqICAgICBGb3IgZnVsbCBpbnRlcm9wZXJhYmlsaXR5LCBibG9jayBmcm9udCBh
bmQgYmFja2VuZHMgc2hvdWxkIHB1Ymxpc2gKLSAqICAgICBpZGVudGljYWwgcmluZyBwYXJhbWV0
ZXJzLCBhZGp1c3RlZCBmb3IgdW5pdCBkaWZmZXJlbmNlcywgdG8gdGhlCi0gKiAgICAgWGVuU3Rv
cmUgbm9kZXMgdXNlZCBpbiBib3RoIHNjaGVtZXMuCi0gKiAoNCkgRGV2aWNlcyB0aGF0IHN1cHBv
cnQgZGlzY2FyZCBmdW5jdGlvbmFsaXR5IG1heSBpbnRlcm5hbGx5IGFsbG9jYXRlIHNwYWNlCi0g
KiAgICAgKGRpc2NhcmRhYmxlIGV4dGVudHMpIGluIHVuaXRzIHRoYXQgYXJlIGxhcmdlciB0aGFu
IHRoZSBleHBvcnRlZCBsb2dpY2FsCi0gKiAgICAgYmxvY2sgc2l6ZS4gSWYgdGhlIGJhY2tpbmcg
ZGV2aWNlIGhhcyBzdWNoIGRpc2NhcmRhYmxlIGV4dGVudHMgdGhlCi0gKiAgICAgYmFja2VuZCBz
aG91bGQgcHJvdmlkZSBib3RoIGRpc2NhcmQtZ3JhbnVsYXJpdHkgYW5kIGRpc2NhcmQtYWxpZ25t
ZW50LgotICogICAgIFByb3ZpZGluZyBqdXN0IG9uZSBvZiB0aGUgdHdvIG1heSBiZSBjb25zaWRl
cmVkIGFuIGVycm9yIGJ5IHRoZSBmcm9udGVuZC4KLSAqICAgICBCYWNrZW5kcyBzdXBwb3J0aW5n
IGRpc2NhcmQgc2hvdWxkIGluY2x1ZGUgZGlzY2FyZC1ncmFudWxhcml0eSBhbmQKLSAqICAgICBk
aXNjYXJkLWFsaWdubWVudCBldmVuIGlmIGl0IHN1cHBvcnRzIGRpc2NhcmRpbmcgaW5kaXZpZHVh
bCBzZWN0b3JzLgotICogICAgIEZyb250ZW5kcyBzaG91bGQgYXNzdW1lIGRpc2NhcmQtYWxpZ25t
ZW50ID09IDAgYW5kIGRpc2NhcmQtZ3JhbnVsYXJpdHkKLSAqICAgICA9PSBzZWN0b3Igc2l6ZSBp
ZiB0aGVzZSBrZXlzIGFyZSBtaXNzaW5nLgotICogKDUpIFRoZSBkaXNjYXJkLWFsaWdubWVudCBw
YXJhbWV0ZXIgYWxsb3dzIGEgcGh5c2ljYWwgZGV2aWNlIHRvIGJlCi0gKiAgICAgcGFydGl0aW9u
ZWQgaW50byB2aXJ0dWFsIGRldmljZXMgdGhhdCBkbyBub3QgbmVjZXNzYXJpbHkgYmVnaW4gb3IK
LSAqICAgICBlbmQgb24gYSBkaXNjYXJkYWJsZSBleHRlbnQgYm91bmRhcnkuCi0gKiAoNikgV2hl
biB0aGVyZSBpcyBvbmx5IGEgc2luZ2xlIHBhZ2UgYWxsb2NhdGVkIHRvIHRoZSByZXF1ZXN0IHJp
bmcsCi0gKiAgICAgJ3JpbmctcmVmJyBpcyB1c2VkIHRvIGNvbW11bmljYXRlIHRoZSBncmFudCBy
ZWZlcmVuY2UgZm9yIHRoaXMKLSAqICAgICBwYWdlIHRvIHRoZSBiYWNrZW5kLiAgV2hlbiB1c2lu
ZyBhIG11bHRpLXBhZ2UgcmluZywgdGhlICdyaW5nLXJlZicKLSAqICAgICBub2RlIGlzIG5vdCBj
cmVhdGVkLiAgSW5zdGVhZCAncmluZy1yZWYwJyAtICdyaW5nLXJlZk4nIGFyZSB1c2VkLgotICog
KDcpIFdoZW4gdXNpbmcgcGVyc2lzdGVudCBncmFudHMgZGF0YSBoYXMgdG8gYmUgY29waWVkIGZy
b20vdG8gdGhlIHBhZ2UKLSAqICAgICB3aGVyZSB0aGUgZ3JhbnQgaXMgY3VycmVudGx5IG1hcHBl
ZC4gVGhlIG92ZXJoZWFkIG9mIGRvaW5nIHRoaXMgY29weQotICogICAgIGhvd2V2ZXIgZG9lc24n
dCBzdXBwcmVzcyB0aGUgc3BlZWQgaW1wcm92ZW1lbnQgb2Ygbm90IGhhdmluZyB0byB1bm1hcAot
ICogICAgIHRoZSBncmFudHMuCi0gKiAoOCkgVGhlIGZyb250ZW5kIGRyaXZlciBoYXMgdG8gYWxs
b3cgdGhlIGJhY2tlbmQgZHJpdmVyIHRvIG1hcCBhbGwgZ3JhbnRzCi0gKiAgICAgd2l0aCB3cml0
ZSBhY2Nlc3MsIGV2ZW4gd2hlbiB0aGV5IHNob3VsZCBiZSBtYXBwZWQgcmVhZC1vbmx5LCBzaW5j
ZQotICogICAgIGZ1cnRoZXIgcmVxdWVzdHMgbWF5IHJldXNlIHRoZXNlIGdyYW50cyBhbmQgcmVx
dWlyZSB3cml0ZSBwZXJtaXNzaW9ucy4KLSAqICg5KSBMaW51eCBpbXBsZW1lbnRhdGlvbiBkb2Vz
bid0IGhhdmUgYSBsaW1pdCBvbiB0aGUgbWF4aW11bSBudW1iZXIgb2YKLSAqICAgICBncmFudHMg
dGhhdCBjYW4gYmUgcGVyc2lzdGVudGx5IG1hcHBlZCBpbiB0aGUgZnJvbnRlbmQgZHJpdmVyLCBi
dXQKLSAqICAgICBkdWUgdG8gdGhlIGZyb250ZW50IGRyaXZlciBpbXBsZW1lbnRhdGlvbiBpdCBz
aG91bGQgbmV2ZXIgYmUgYmlnZ2VyCi0gKiAgICAgdGhhbiBSSU5HX1NJWkUgKiBCTEtJRl9NQVhf
U0VHTUVOVFNfUEVSX1JFUVVFU1QuCi0gKigxMCkgVGhlIGRpc2NhcmQtc2VjdXJlIHByb3BlcnR5
IG1heSBiZSBwcmVzZW50IGFuZCB3aWxsIGJlIHNldCB0byAxIGlmIHRoZQotICogICAgIGJhY2tp
bmcgZGV2aWNlIHN1cHBvcnRzIHNlY3VyZSBkaXNjYXJkLgotICovCisqIEZlYXR1cmUgYW5kIFBh
cmFtZXRlciBOZWdvdGlhdGlvbgorKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
KyogVGhlIHR3byBoYWx2ZXMgb2YgYSBYZW4gYmxvY2sgZHJpdmVyIHV0aWxpemUgbm9kZXMgd2l0
aGluIHRoZSBYZW5TdG9yZSB0bworKiBjb21tdW5pY2F0ZSBjYXBhYmlsaXRpZXMgYW5kIHRvIG5l
Z290aWF0ZSBvcGVyYXRpbmcgcGFyYW1ldGVycy4gIFRoaXMKKyogc2VjdGlvbiBlbnVtZXJhdGVz
IHRoZXNlIG5vZGVzIHdoaWNoIHJlc2lkZSBpbiB0aGUgcmVzcGVjdGl2ZSBmcm9udCBhbmQKKyog
YmFja2VuZCBwb3J0aW9ucyBvZiB0aGUgWGVuU3RvcmUsIGZvbGxvd2luZyB0aGUgWGVuQnVzIGNv
bnZlbnRpb24uCisqCisqIEFsbCBkYXRhIGluIHRoZSBYZW5TdG9yZSBpcyBzdG9yZWQgYXMgc3Ry
aW5ncy4gIE5vZGVzIHNwZWNpZnlpbmcgbnVtZXJpYworKiB2YWx1ZXMgYXJlIGVuY29kZWQgaW4g
ZGVjaW1hbC4gIEludGVnZXIgdmFsdWUgcmFuZ2VzIGxpc3RlZCBiZWxvdyBhcmUKKyogZXhwcmVz
c2VkIGFzIGZpeGVkIHNpemVkIGludGVnZXIgdHlwZXMgY2FwYWJsZSBvZiBzdG9yaW5nIHRoZSBj
b252ZXJzaW9uCisqIG9mIGEgcHJvcGVybHkgZm9ybWF0ZWQgbm9kZSBzdHJpbmcsIHdpdGhvdXQg
bG9zcyBvZiBpbmZvcm1hdGlvbi4KKyoKKyogQW55IHNwZWNpZmllZCBkZWZhdWx0IHZhbHVlIGlz
IGluIGVmZmVjdCBpZiB0aGUgY29ycmVzcG9uZGluZyBYZW5CdXMgbm9kZQorKiBpcyBub3QgcHJl
c2VudCBpbiB0aGUgWGVuU3RvcmUuCisqCisqIFhlblN0b3JlIG5vZGVzIGluIHNlY3Rpb25zIG1h
cmtlZCAiUFJJVkFURSIgYXJlIHNvbGVseSBmb3IgdXNlIGJ5IHRoZQorKiBkcml2ZXIgc2lkZSB3
aG9zZSBYZW5CdXMgdHJlZSBjb250YWlucyB0aGVtLgorKgorKiBYZW5TdG9yZSBub2RlcyBtYXJr
ZWQgIkRFUFJFQ0FURUQiIGluIHRoZWlyIG5vdGVzIHNlY3Rpb24gc2hvdWxkIG9ubHkgYmUKKyog
dXNlZCB0byBwcm92aWRlIGludGVyb3BlcmFiaWxpdHkgd2l0aCBsZWdhY3kgaW1wbGVtZW50YXRp
b25zLgorKgorKiBTZWUgdGhlIFhlbkJ1cyBzdGF0ZSB0cmFuc2l0aW9uIGRpYWdyYW0gYmVsb3cg
Zm9yIGRldGFpbHMgb24gd2hlbiBYZW5CdXMKKyogbm9kZXMgbXVzdCBiZSBwdWJsaXNoZWQgYW5k
IHdoZW4gdGhleSBjYW4gYmUgcXVlcmllZC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEJhY2tlbmQgWGVuQnVzIE5vZGVzCisqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKgorKgorKi0tLS0tLS0tLS0tLS0tLS0tLSBCYWNrZW5kIERldmljZSBJZGVudGlm
aWNhdGlvbiAoUFJJVkFURSkgLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIG1vZGUKKyogICAgICBW
YWx1ZXM6ICAgICAgICAgInIiIChyZWFkIG9ubHkpLCAidyIgKHdyaXRhYmxlKQorKgorKiAgICAg
IFRoZSByZWFkIG9yIHdyaXRlIGFjY2VzcyBwZXJtaXNzaW9ucyB0byB0aGUgYmFja2luZyBzdG9y
ZSB0byBiZQorKiAgICAgIGdyYW50ZWQgdG8gdGhlIGZyb250ZW5kLgorKgorKiBwYXJhbXMKKyog
ICAgICBWYWx1ZXM6ICAgICAgICAgc3RyaW5nCisqCisqICAgICAgQSBmcmVlIGZvcm1hdHRlZCBz
dHJpbmcgcHJvdmlkaW5nIHN1ZmZpY2llbnQgaW5mb3JtYXRpb24gZm9yIHRoZQorKiAgICAgIGhv
dHBsdWcgc2NyaXB0IHRvIGF0dGFjaCB0aGUgZGV2aWNlIGFuZCBwcm92aWRlIGEgc3VpdGFibGUK
KyogICAgICBoYW5kbGVyIChpZTogYSBibG9jayBkZXZpY2UpIGZvciBibGtiYWNrIHRvIHVzZS4K
KyoKKyogcGh5c2ljYWwtZGV2aWNlCisqICAgICAgVmFsdWVzOiAgICAgICAgICJNQUpPUjpNSU5P
UiIKKyogICAgICBOb3RlczogMTEKKyoKKyogICAgICBNQUpPUiBhbmQgTUlOT1IgYXJlIHRoZSBt
YWpvciBudW1iZXIgYW5kIG1pbm9yIG51bWJlciBvZiB0aGUKKyogICAgICBiYWNraW5nIGRldmlj
ZSByZXNwZWN0aXZlbHkuCisqCisqIHBoeXNpY2FsLWRldmljZS1wYXRoCisqICAgICAgVmFsdWVz
OiAgICAgICAgIHBhdGggc3RyaW5nCisqCisqICAgICAgQSBzdHJpbmcgdGhhdCBjb250YWlucyB0
aGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgZGlzayBpbWFnZS4gT24KKyogICAgICBOZXRCU0QgYW5k
IExpbnV4IHRoaXMgaXMgYWx3YXlzIGEgYmxvY2sgZGV2aWNlLCB3aGlsZSBvbiBGcmVlQlNECisq
ICAgICAgaXQgY2FuIGJlIGVpdGhlciBhIGJsb2NrIGRldmljZSBvciBhIHJlZ3VsYXIgZmlsZS4K
KyoKKyogdHlwZQorKiAgICAgIFZhbHVlczogICAgICAgICAiZmlsZSIsICJwaHkiLCAidGFwIgor
KgorKiAgICAgIFRoZSB0eXBlIG9mIHRoZSBiYWNraW5nIGRldmljZS9vYmplY3QuCisqCisqCisq
IGRpcmVjdC1pby1zYWZlCisqICAgICAgVmFsdWVzOiAgICAgICAgIDAvMSAoYm9vbGVhbikKKyog
ICAgICBEZWZhdWx0IFZhbHVlOiAgMAorKgorKiAgICAgIFRoZSB1bmRlcmx5aW5nIHN0b3JhZ2Ug
aXMgbm90IGFmZmVjdGVkIGJ5IHRoZSBkaXJlY3QgSU8gbWVtb3J5CisqICAgICAgbGlmZXRpbWUg
YnVnLiAgU2VlOgorKiAgICAgICAgaHR0cDovL2xpc3RzLnhlbi5vcmcvYXJjaGl2ZXMvaHRtbC94
ZW4tZGV2ZWwvMjAxMi0xMi9tc2cwMTE1NC5odG1sCisqCisqICAgICAgVGhlcmVmb3JlIHRoaXMg
b3B0aW9uIGdpdmVzIHRoZSBiYWNrZW5kIHBlcm1pc3Npb24gdG8gdXNlCisqICAgICAgT19ESVJF
Q1QsIG5vdHdpdGhzdGFuZGluZyB0aGF0IGJ1Zy4KKyoKKyogICAgICBUaGF0IGlzLCBpZiB0aGlz
IG9wdGlvbiBpcyBlbmFibGVkLCB1c2Ugb2YgT19ESVJFQ1QgaXMgc2FmZSwKKyogICAgICBpbiBj
aXJjdW1zdGFuY2VzIHdoZXJlIHdlIHdvdWxkIG5vcm1hbGx5IGhhdmUgYXZvaWRlZCBpdCBhcyBh
CisqICAgICAgd29ya2Fyb3VuZCBmb3IgdGhhdCBidWcuICBUaGlzIG9wdGlvbiBpcyBub3QgcmVs
ZXZhbnQgZm9yIGFsbAorKiAgICAgIGJhY2tlbmRzLCBhbmQgZXZlbiBub3QgbmVjZXNzYXJpbHkg
c3VwcG9ydGVkIGZvciB0aG9zZSBmb3IKKyogICAgICB3aGljaCBpdCBpcyByZWxldmFudC4gIEEg
YmFja2VuZCB3aGljaCBrbm93cyB0aGF0IGl0IGlzIG5vdAorKiAgICAgIGFmZmVjdGVkIGJ5IHRo
ZSBidWcgY2FuIGlnbm9yZSB0aGlzIG9wdGlvbi4KKyoKKyogICAgICBUaGlzIG9wdGlvbiBkb2Vz
bid0IHJlcXVpcmUgYSBiYWNrZW5kIHRvIHVzZSBPX0RJUkVDVCwgc28gaXQKKyogICAgICBzaG91
bGQgbm90IGJlIHVzZWQgdG8gdHJ5IHRvIGNvbnRyb2wgdGhlIGNhY2hpbmcgYmVoYXZpb3VyLgor
KgorKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGZWF0dXJlcyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogZmVhdHVyZS1iYXJyaWVyCisqICAgICAgVmFs
dWVzOiAgICAgICAgIDAvMSAoYm9vbGVhbikKKyogICAgICBEZWZhdWx0IFZhbHVlOiAgMAorKgor
KiAgICAgIEEgdmFsdWUgb2YgIjEiIGluZGljYXRlcyB0aGF0IHRoZSBiYWNrZW5kIGNhbiBwcm9j
ZXNzIHJlcXVlc3RzCisqICAgICAgY29udGFpbmluZyB0aGUgQkxLSUZfT1BfV1JJVEVfQkFSUklF
UiByZXF1ZXN0IG9wY29kZS4gIFJlcXVlc3RzCisqICAgICAgb2YgdGhpcyB0eXBlIG1heSBzdGls
bCBiZSByZXR1cm5lZCBhdCBhbnkgdGltZSB3aXRoIHRoZQorKiAgICAgIEJMS0lGX1JTUF9FT1BO
T1RTVVBQIHJlc3VsdCBjb2RlLgorKgorKiBmZWF0dXJlLWZsdXNoLWNhY2hlCisqICAgICAgVmFs
dWVzOiAgICAgICAgIDAvMSAoYm9vbGVhbikKKyogICAgICBEZWZhdWx0IFZhbHVlOiAgMAorKgor
KiAgICAgIEEgdmFsdWUgb2YgIjEiIGluZGljYXRlcyB0aGF0IHRoZSBiYWNrZW5kIGNhbiBwcm9j
ZXNzIHJlcXVlc3RzCisqICAgICAgY29udGFpbmluZyB0aGUgQkxLSUZfT1BfRkxVU0hfRElTS0NB
Q0hFIHJlcXVlc3Qgb3Bjb2RlLiAgUmVxdWVzdHMKKyogICAgICBvZiB0aGlzIHR5cGUgbWF5IHN0
aWxsIGJlIHJldHVybmVkIGF0IGFueSB0aW1lIHdpdGggdGhlCisqICAgICAgQkxLSUZfUlNQX0VP
UE5PVFNVUFAgcmVzdWx0IGNvZGUuCisqCisqIGZlYXR1cmUtZGlzY2FyZAorKiAgICAgIFZhbHVl
czogICAgICAgICAwLzEgKGJvb2xlYW4pCisqICAgICAgRGVmYXVsdCBWYWx1ZTogIDAKKyoKKyog
ICAgICBBIHZhbHVlIG9mICIxIiBpbmRpY2F0ZXMgdGhhdCB0aGUgYmFja2VuZCBjYW4gcHJvY2Vz
cyByZXF1ZXN0cworKiAgICAgIGNvbnRhaW5pbmcgdGhlIEJMS0lGX09QX0RJU0NBUkQgcmVxdWVz
dCBvcGNvZGUuICBSZXF1ZXN0cworKiAgICAgIG9mIHRoaXMgdHlwZSBtYXkgc3RpbGwgYmUgcmV0
dXJuZWQgYXQgYW55IHRpbWUgd2l0aCB0aGUKKyogICAgICBCTEtJRl9SU1BfRU9QTk9UU1VQUCBy
ZXN1bHQgY29kZS4KKyoKKyogZmVhdHVyZS1wZXJzaXN0ZW50CisqICAgICAgVmFsdWVzOiAgICAg
ICAgIDAvMSAoYm9vbGVhbikKKyogICAgICBEZWZhdWx0IFZhbHVlOiAgMAorKiAgICAgIE5vdGVz
OiA3CisqCisqICAgICAgQSB2YWx1ZSBvZiAiMSIgaW5kaWNhdGVzIHRoYXQgdGhlIGJhY2tlbmQg
Y2FuIGtlZXAgdGhlIGdyYW50cyB1c2VkCisqICAgICAgYnkgdGhlIGZyb250ZW5kIGRyaXZlciBt
YXBwZWQsIHNvIHRoZSBzYW1lIHNldCBvZiBncmFudHMgc2hvdWxkIGJlCisqICAgICAgdXNlZCBp
biBhbGwgdHJhbnNhY3Rpb25zLiBUaGUgbWF4aW11bSBudW1iZXIgb2YgZ3JhbnRzIHRoZSBiYWNr
ZW5kCisqICAgICAgY2FuIG1hcCBwZXJzaXN0ZW50bHkgZGVwZW5kcyBvbiB0aGUgaW1wbGVtZW50
YXRpb24sIGJ1dCBpZGVhbGx5IGl0CisqICAgICAgc2hvdWxkIGJlIFJJTkdfU0laRSAqIEJMS0lG
X01BWF9TRUdNRU5UU19QRVJfUkVRVUVTVC4gVXNpbmcgdGhpcworKiAgICAgIGZlYXR1cmUgdGhl
IGJhY2tlbmQgZG9lc24ndCBuZWVkIHRvIHVubWFwIGVhY2ggZ3JhbnQsIHByZXZlbnRpbmcKKyog
ICAgICBjb3N0bHkgVExCIGZsdXNoZXMuIFRoZSBiYWNrZW5kIGRyaXZlciBzaG91bGQgb25seSBt
YXAgZ3JhbnRzCisqICAgICAgcGVyc2lzdGVudGx5IGlmIHRoZSBmcm9udGVuZCBzdXBwb3J0cyBp
dC4gSWYgYSBiYWNrZW5kIGRyaXZlciBjaG9vc2VzCisqICAgICAgdG8gdXNlIHRoZSBwZXJzaXN0
ZW50IHByb3RvY29sIHdoZW4gdGhlIGZyb250ZW5kIGRvZXNuJ3Qgc3VwcG9ydCBpdCwKKyogICAg
ICBpdCB3aWxsIHByb2JhYmx5IGhpdCB0aGUgbWF4aW11bSBudW1iZXIgb2YgcGVyc2lzdGVudGx5
IG1hcHBlZCBncmFudHMKKyogICAgICAoZHVlIHRvIHRoZSBmYWN0IHRoYXQgdGhlIGZyb250ZW5k
IHdvbid0IGJlIHJldXNpbmcgdGhlIHNhbWUgZ3JhbnRzKSwKKyogICAgICBhbmQgZmFsbCBiYWNr
IHRvIG5vbi1wZXJzaXN0ZW50IG1vZGUuIEJhY2tlbmQgaW1wbGVtZW50YXRpb25zIG1heQorKiAg
ICAgIHNocmluayBvciBleHBhbmQgdGhlIG51bWJlciBvZiBwZXJzaXN0ZW50bHkgbWFwcGVkIGdy
YW50cyB3aXRob3V0CisqICAgICAgbm90aWZ5aW5nIHRoZSBmcm9udGVuZCBkZXBlbmRpbmcgb24g
bWVtb3J5IGNvbnN0cmFpbnRzICh0aGlzIG1pZ2h0CisqICAgICAgY2F1c2UgYSBwZXJmb3JtYW5j
ZSBkZWdyYWRhdGlvbikuCisqCisqICAgICAgSWYgYSBiYWNrZW5kIGRyaXZlciB3YW50cyB0byBs
aW1pdCB0aGUgbWF4aW11bSBudW1iZXIgb2YgcGVyc2lzdGVudGx5CisqICAgICAgbWFwcGVkIGdy
YW50cyB0byBhIHZhbHVlIGxlc3MgdGhhbiBSSU5HX1NJWkUgKgorKiAgICAgIEJMS0lGX01BWF9T
RUdNRU5UU19QRVJfUkVRVUVTVCBhIExSVSBzdHJhdGVneSBzaG91bGQgYmUgdXNlZCB0bworKiAg
ICAgIGRpc2NhcmQgdGhlIGdyYW50cyB0aGF0IGFyZSBsZXNzIGNvbW1vbmx5IHVzZWQuIFVzaW5n
IGEgTFJVIGluIHRoZQorKiAgICAgIGJhY2tlbmQgZHJpdmVyIHBhaXJlZCB3aXRoIGEgTElGTyBx
dWV1ZSBpbiB0aGUgZnJvbnRlbmQgd2lsbAorKiAgICAgIGFsbG93IHVzIHRvIGhhdmUgYmV0dGVy
IHBlcmZvcm1hbmNlIGluIHRoaXMgc2NlbmFyaW8uCisqCisqLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gUmVxdWVzdCBUcmFuc3BvcnQgUGFyYW1ldGVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
KyoKKyogbWF4LXJpbmctcGFnZS1vcmRlcgorKiAgICAgIFZhbHVlczogICAgICAgICA8dWludDMy
X3Q+CisqICAgICAgRGVmYXVsdCBWYWx1ZTogIDAKKyogICAgICBOb3RlczogICAgICAgICAgMSwg
MworKgorKiAgICAgIFRoZSBtYXhpbXVtIHN1cHBvcnRlZCBzaXplIG9mIHRoZSByZXF1ZXN0IHJp
bmcgYnVmZmVyIGluIHVuaXRzIG9mCisqICAgICAgbGIobWFjaGluZSBwYWdlcykuIChlLmcuIDAg
PT0gMSBwYWdlLCAgMSA9IDIgcGFnZXMsIDIgPT0gNCBwYWdlcywKKyogICAgICBldGMuKS4KKyoK
KyogbWF4LXJpbmctcGFnZXMKKyogICAgICBWYWx1ZXM6ICAgICAgICAgPHVpbnQzMl90PgorKiAg
ICAgIERlZmF1bHQgVmFsdWU6ICAxCisqICAgICAgTm90ZXM6ICAgICAgICAgIERFUFJFQ0FURUQs
IDIsIDMKKyoKKyogICAgICBUaGUgbWF4aW11bSBzdXBwb3J0ZWQgc2l6ZSBvZiB0aGUgcmVxdWVz
dCByaW5nIGJ1ZmZlciBpbiB1bml0cyBvZgorKiAgICAgIG1hY2hpbmUgcGFnZXMuICBUaGUgdmFs
dWUgbXVzdCBiZSBhIHBvd2VyIG9mIDIuCisqCisqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBC
YWNrZW5kIERldmljZSBQcm9wZXJ0aWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyog
ZGlzY2FyZC1lbmFibGUKKyogICAgICBWYWx1ZXM6ICAgICAgICAgMC8xIChib29sZWFuKQorKiAg
ICAgIERlZmF1bHQgVmFsdWU6ICAxCisqCisqICAgICAgVGhpcyBvcHRpb25hbCBwcm9wZXJ0eSwg
c2V0IGJ5IHRoZSB0b29sc3RhY2ssIGluc3RydWN0cyB0aGUgYmFja2VuZAorKiAgICAgIHRvIG9m
ZmVyIChvciBub3QgdG8gb2ZmZXIpIGRpc2NhcmQgdG8gdGhlIGZyb250ZW5kLiBJZiB0aGUgcHJv
cGVydHkKKyogICAgICBpcyBtaXNzaW5nIHRoZSBiYWNrZW5kIHNob3VsZCBvZmZlciBkaXNjYXJk
IGlmIHRoZSBiYWNraW5nIHN0b3JhZ2UKKyogICAgICBhY3R1YWxseSBzdXBwb3J0cyBpdC4KKyoK
KyogZGlzY2FyZC1hbGlnbm1lbnQKKyogICAgICBWYWx1ZXM6ICAgICAgICAgPHVpbnQzMl90Pgor
KiAgICAgIERlZmF1bHQgVmFsdWU6ICAwCisqICAgICAgTm90ZXM6ICAgICAgICAgIDQsIDUKKyoK
KyogICAgICBUaGUgb2Zmc2V0LCBpbiBieXRlcyBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHZp
cnR1YWwgYmxvY2sgZGV2aWNlLAorKiAgICAgIHRvIHRoZSBmaXJzdCwgYWRkcmVzc2FibGUsIGRp
c2NhcmQgZXh0ZW50IG9uIHRoZSB1bmRlcmx5aW5nIGRldmljZS4KKyoKKyogZGlzY2FyZC1ncmFu
dWxhcml0eQorKiAgICAgIFZhbHVlczogICAgICAgICA8dWludDMyX3Q+CisqICAgICAgRGVmYXVs
dCBWYWx1ZTogIDwic2VjdG9yLXNpemUiPgorKiAgICAgIE5vdGVzOiAgICAgICAgICA0CisqCisq
ICAgICAgVGhlIHNpemUsIGluIGJ5dGVzLCBvZiB0aGUgaW5kaXZpZHVhbGx5IGFkZHJlc3NhYmxl
IGRpc2NhcmQgZXh0ZW50cworKiAgICAgIG9mIHRoZSB1bmRlcmx5aW5nIGRldmljZS4KKyoKKyog
ZGlzY2FyZC1zZWN1cmUKKyogICAgICBWYWx1ZXM6ICAgICAgICAgMC8xIChib29sZWFuKQorKiAg
ICAgIERlZmF1bHQgVmFsdWU6ICAwCisqICAgICAgTm90ZXM6ICAgICAgICAgIDEwCisqCisqICAg
ICAgQSB2YWx1ZSBvZiAiMSIgaW5kaWNhdGVzIHRoYXQgdGhlIGJhY2tlbmQgY2FuIHByb2Nlc3Mg
QkxLSUZfT1BfRElTQ0FSRAorKiAgICAgIHJlcXVlc3RzIHdpdGggdGhlIEJMS0lGX0RJU0NBUkRf
U0VDVVJFIGZsYWcgc2V0LgorKgorKiBpbmZvCisqICAgICAgVmFsdWVzOiAgICAgICAgIDx1aW50
MzJfdD4gKGJpdG1hcCkKKyoKKyogICAgICBBIGNvbGxlY3Rpb24gb2YgYml0IGZsYWdzIGRlc2Ny
aWJpbmcgYXR0cmlidXRlcyBvZiB0aGUgYmFja2luZworKiAgICAgIGRldmljZS4gIFRoZSBWRElT
S18qIG1hY3JvcyBkZWZpbmUgdGhlIG1lYW5pbmcgb2YgZWFjaCBiaXQKKyogICAgICBsb2NhdGlv
bi4KKyoKKyogc2VjdG9yLXNpemUKKyogICAgICBWYWx1ZXM6ICAgICAgICAgPHVpbnQzMl90Pgor
KgorKiAgICAgIFRoZSBsb2dpY2FsIHNlY3RvciBzaXplLCBpbiBieXRlcywgb2YgdGhlIGJhY2tl
bmQgZGV2aWNlLgorKgorKiBwaHlzaWNhbC1zZWN0b3Itc2l6ZQorKiAgICAgIFZhbHVlczogICAg
ICAgICA8dWludDMyX3Q+CisqCisqICAgICAgVGhlIHBoeXNpY2FsIHNlY3RvciBzaXplLCBpbiBi
eXRlcywgb2YgdGhlIGJhY2tlbmQgZGV2aWNlLgorKgorKiBzZWN0b3JzCisqICAgICAgVmFsdWVz
OiAgICAgICAgIDx1aW50NjRfdD4KKyoKKyogICAgICBUaGUgc2l6ZSBvZiB0aGUgYmFja2VuZCBk
ZXZpY2UsIGV4cHJlc3NlZCBpbiB1bml0cyBvZiBpdHMgbG9naWNhbAorKiAgICAgIHNlY3RvciBz
aXplICgic2VjdG9yLXNpemUiKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEZyb250ZW5kIFhlbkJ1cyBOb2RlcworKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioKKyoKKyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBSZXF1ZXN0IFRyYW5zcG9ydCBQYXJh
bWV0ZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIGV2ZW50LWNoYW5uZWwKKyogICAg
ICBWYWx1ZXM6ICAgICAgICAgPHVpbnQzMl90PgorKgorKiAgICAgIFRoZSBpZGVudGlmaWVyIG9m
IHRoZSBYZW4gZXZlbnQgY2hhbm5lbCB1c2VkIHRvIHNpZ25hbCBhY3Rpdml0eQorKiAgICAgIGlu
IHRoZSByaW5nIGJ1ZmZlci4KKyoKKyogcmluZy1yZWYKKyogICAgICBWYWx1ZXM6ICAgICAgICAg
PHVpbnQzMl90PgorKiAgICAgIE5vdGVzOiAgICAgICAgICA2CisqCisqICAgICAgVGhlIFhlbiBn
cmFudCByZWZlcmVuY2UgZ3JhbnRpbmcgcGVybWlzc2lvbiBmb3IgdGhlIGJhY2tlbmQgdG8gbWFw
CisqICAgICAgdGhlIHNvbGUgcGFnZSBpbiBhIHNpbmdsZSBwYWdlIHNpemVkIHJpbmcgYnVmZmVy
LgorKgorKiByaW5nLXJlZiV1CisqICAgICAgVmFsdWVzOiAgICAgICAgIDx1aW50MzJfdD4KKyog
ICAgICBOb3RlczogICAgICAgICAgNgorKgorKiAgICAgIEZvciBhIGZyb250ZW5kIHByb3ZpZGlu
ZyBhIG11bHRpLXBhZ2UgcmluZywgYSAibnVtYmVyIG9mIHJpbmcgcGFnZXMiCisqICAgICAgc2l6
ZWQgbGlzdCBvZiBub2RlcywgZWFjaCBjb250YWluaW5nIGEgWGVuIGdyYW50IHJlZmVyZW5jZSBn
cmFudGluZworKiAgICAgIHBlcm1pc3Npb24gZm9yIHRoZSBiYWNrZW5kIHRvIG1hcCB0aGUgcGFn
ZSBvZiB0aGUgcmluZyBsb2NhdGVkCisqICAgICAgYXQgcGFnZSBpbmRleCAiJXUiLiAgUGFnZSBp
bmRleGVzIGFyZSB6ZXJvIGJhc2VkLgorKgorKiBwcm90b2NvbAorKiAgICAgIFZhbHVlczogICAg
ICAgICBzdHJpbmcgKFhFTl9JT19QUk9UT19BQklfKikKKyogICAgICBEZWZhdWx0IFZhbHVlOiAg
WEVOX0lPX1BST1RPX0FCSV9OQVRJVkUKKyoKKyogICAgICBUaGUgbWFjaGluZSBBQkkgcnVsZXMg
Z292ZXJuaW5nIHRoZSBmb3JtYXQgb2YgYWxsIHJpbmcgcmVxdWVzdCBhbmQKKyogICAgICByZXNw
b25zZSBzdHJ1Y3R1cmVzLgorKgorKiByaW5nLXBhZ2Utb3JkZXIKKyogICAgICBWYWx1ZXM6ICAg
ICAgICAgPHVpbnQzMl90PgorKiAgICAgIERlZmF1bHQgVmFsdWU6ICAwCisqICAgICAgTWF4aW11
bSBWYWx1ZTogIE1BWChmZnMobWF4LXJpbmctcGFnZXMpIC0gMSwgbWF4LXJpbmctcGFnZS1vcmRl
cikKKyogICAgICBOb3RlczogICAgICAgICAgMSwgMworKgorKiAgICAgIFRoZSBzaXplIG9mIHRo
ZSBmcm9udGVuZCBhbGxvY2F0ZWQgcmVxdWVzdCByaW5nIGJ1ZmZlciBpbiB1bml0cworKiAgICAg
IG9mIGxiKG1hY2hpbmUgcGFnZXMpLiAoZS5nLiAwID09IDEgcGFnZSwgMSA9IDIgcGFnZXMsIDIg
PT0gNCBwYWdlcywKKyogICAgICBldGMuKS4KKyoKKyogbnVtLXJpbmctcGFnZXMKKyogICAgICBW
YWx1ZXM6ICAgICAgICAgPHVpbnQzMl90PgorKiAgICAgIERlZmF1bHQgVmFsdWU6ICAxCisqICAg
ICAgTWF4aW11bSBWYWx1ZTogIE1BWChtYXgtcmluZy1wYWdlcywoMHgxIDw8IG1heC1yaW5nLXBh
Z2Utb3JkZXIpKQorKiAgICAgIE5vdGVzOiAgICAgICAgICBERVBSRUNBVEVELCAyLCAzCisqCisq
ICAgICAgVGhlIHNpemUgb2YgdGhlIGZyb250ZW5kIGFsbG9jYXRlZCByZXF1ZXN0IHJpbmcgYnVm
ZmVyIGluIHVuaXRzIG9mCisqICAgICAgbWFjaGluZSBwYWdlcy4gIFRoZSB2YWx1ZSBtdXN0IGJl
IGEgcG93ZXIgb2YgMi4KKyoKKyogZmVhdHVyZS1wZXJzaXN0ZW50CisqICAgICAgVmFsdWVzOiAg
ICAgICAgIDAvMSAoYm9vbGVhbikKKyogICAgICBEZWZhdWx0IFZhbHVlOiAgMAorKiAgICAgIE5v
dGVzOiA3LCA4LCA5CisqCisqICAgICAgQSB2YWx1ZSBvZiAiMSIgaW5kaWNhdGVzIHRoYXQgdGhl
IGZyb250ZW5kIHdpbGwgcmV1c2UgdGhlIHNhbWUgZ3JhbnRzCisqICAgICAgZm9yIGFsbCB0cmFu
c2FjdGlvbnMsIGFsbG93aW5nIHRoZSBiYWNrZW5kIHRvIG1hcCB0aGVtIHdpdGggd3JpdGUKKyog
ICAgICBhY2Nlc3MgKGV2ZW4gd2hlbiBpdCBzaG91bGQgYmUgcmVhZC1vbmx5KS4gSWYgdGhlIGZy
b250ZW5kIGhpdHMgdGhlCisqICAgICAgbWF4aW11bSBudW1iZXIgb2YgYWxsb3dlZCBwZXJzaXN0
ZW50bHkgbWFwcGVkIGdyYW50cywgaXQgY2FuIGZhbGxiYWNrCisqICAgICAgdG8gbm9uIHBlcnNp
c3RlbnQgbW9kZS4gVGhpcyB3aWxsIGNhdXNlIGEgcGVyZm9ybWFuY2UgZGVncmFkYXRpb24sCisq
ICAgICAgc2luY2UgdGhlIHRoZSBiYWNrZW5kIGRyaXZlciB3aWxsIHN0aWxsIHRyeSB0byBtYXAg
dGhvc2UgZ3JhbnRzCisqICAgICAgcGVyc2lzdGVudGx5LiBTaW5jZSB0aGUgcGVyc2lzdGVudCBn
cmFudHMgcHJvdG9jb2wgaXMgY29tcGF0aWJsZSB3aXRoCisqICAgICAgdGhlIHByZXZpb3VzIHBy
b3RvY29sLCBhIGZyb250ZW5kIGRyaXZlciBjYW4gY2hvb3NlIHRvIHdvcmsgaW4KKyogICAgICBw
ZXJzaXN0ZW50IG1vZGUgZXZlbiB3aGVuIHRoZSBiYWNrZW5kIGRvZXNuJ3Qgc3VwcG9ydCBpdC4K
KyoKKyogICAgICBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IHRoZSBmcm9udGVuZCBkcml2ZXIgc3Rv
cmVzIHRoZSBwZXJzaXN0ZW50bHkKKyogICAgICBtYXBwZWQgZ3JhbnRzIGluIGEgTElGTyBxdWV1
ZSwgc28gYSBzdWJzZXQgb2YgYWxsIHBlcnNpc3RlbnRseSBtYXBwZWQKKyogICAgICBncmFudHMg
Z2V0cyB1c2VkIGNvbW1vbmx5LiBUaGlzIGlzIGRvbmUgaW4gY2FzZSB0aGUgYmFja2VuZCBkcml2
ZXIKKyogICAgICBkZWNpZGVzIHRvIGxpbWl0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBwZXJzaXN0
ZW50bHkgbWFwcGVkIGdyYW50cworKiAgICAgIHRvIGEgdmFsdWUgbGVzcyB0aGFuIFJJTkdfU0la
RSAqIEJMS0lGX01BWF9TRUdNRU5UU19QRVJfUkVRVUVTVC4KKyoKKyotLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tIFZpcnR1YWwgRGV2aWNlIFByb3BlcnRpZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorKgorKiBkZXZpY2UtdHlwZQorKiAgICAgIFZhbHVlczogICAgICAgICAiZGlzayIsICJj
ZHJvbSIsICJmbG9wcHkiLCBldGMuCisqCisqIHZpcnR1YWwtZGV2aWNlCisqICAgICAgVmFsdWVz
OiAgICAgICAgIDx1aW50MzJfdD4KKyoKKyogICAgICBBIHZhbHVlIGluZGljYXRpbmcgdGhlIHBo
eXNpY2FsIGRldmljZSB0byB2aXJ0dWFsaXplIHdpdGhpbiB0aGUKKyogICAgICBmcm9udGVuZCdz
IGRvbWFpbi4gIChlLmcuICJUaGUgZmlyc3QgQVRBIGRpc2siLCAiVGhlIHRoaXJkIFNDU0kKKyog
ICAgICBkaXNrIiwgZXRjLikKKyoKKyogICAgICBTZWUgZG9jcy9taXNjL3ZiZC1pbnRlcmZhY2Uu
dHh0IGZvciBkZXRhaWxzIG9uIHRoZSBmb3JtYXQgb2YgdGhpcworKiAgICAgIHZhbHVlLgorKgor
KiBOb3RlcworKiAtLS0tLQorKiAoMSkgTXVsdGktcGFnZSByaW5nIGJ1ZmZlciBzY2hlbWUgZmly
c3QgZGV2ZWxvcGVkIGluIHRoZSBDaXRyaXggWGVuU2VydmVyCisqICAgICBQViBkcml2ZXJzLgor
KiAoMikgTXVsdGktcGFnZSByaW5nIGJ1ZmZlciBzY2hlbWUgZmlyc3QgdXNlZCBpbiBzb21lIFJl
ZEhhdCBkaXN0cmlidXRpb25zCisqICAgICBpbmNsdWRpbmcgYSBkaXN0cmlidXRpb24gZGVwbG95
ZWQgb24gY2VydGFpbiBub2RlcyBvZiB0aGUgQW1hem9uCisqICAgICBFQzIgY2x1c3Rlci4KKyog
KDMpIFN1cHBvcnQgZm9yIG11bHRpLXBhZ2UgcmluZyBidWZmZXJzIHdhcyBpbXBsZW1lbnRlZCBp
bmRlcGVuZGVudGx5LAorKiAgICAgaW4gc2xpZ2h0bHkgZGlmZmVyZW50IGZvcm1zLCBieSBib3Ro
IENpdHJpeCBhbmQgUmVkSGF0L0FtYXpvbi4KKyogICAgIEZvciBmdWxsIGludGVyb3BlcmFiaWxp
dHksIGJsb2NrIGZyb250IGFuZCBiYWNrZW5kcyBzaG91bGQgcHVibGlzaAorKiAgICAgaWRlbnRp
Y2FsIHJpbmcgcGFyYW1ldGVycywgYWRqdXN0ZWQgZm9yIHVuaXQgZGlmZmVyZW5jZXMsIHRvIHRo
ZQorKiAgICAgWGVuU3RvcmUgbm9kZXMgdXNlZCBpbiBib3RoIHNjaGVtZXMuCisqICg0KSBEZXZp
Y2VzIHRoYXQgc3VwcG9ydCBkaXNjYXJkIGZ1bmN0aW9uYWxpdHkgbWF5IGludGVybmFsbHkgYWxs
b2NhdGUgc3BhY2UKKyogICAgIChkaXNjYXJkYWJsZSBleHRlbnRzKSBpbiB1bml0cyB0aGF0IGFy
ZSBsYXJnZXIgdGhhbiB0aGUgZXhwb3J0ZWQgbG9naWNhbAorKiAgICAgYmxvY2sgc2l6ZS4gSWYg
dGhlIGJhY2tpbmcgZGV2aWNlIGhhcyBzdWNoIGRpc2NhcmRhYmxlIGV4dGVudHMgdGhlCisqICAg
ICBiYWNrZW5kIHNob3VsZCBwcm92aWRlIGJvdGggZGlzY2FyZC1ncmFudWxhcml0eSBhbmQgZGlz
Y2FyZC1hbGlnbm1lbnQuCisqICAgICBQcm92aWRpbmcganVzdCBvbmUgb2YgdGhlIHR3byBtYXkg
YmUgY29uc2lkZXJlZCBhbiBlcnJvciBieSB0aGUgZnJvbnRlbmQuCisqICAgICBCYWNrZW5kcyBz
dXBwb3J0aW5nIGRpc2NhcmQgc2hvdWxkIGluY2x1ZGUgZGlzY2FyZC1ncmFudWxhcml0eSBhbmQK
KyogICAgIGRpc2NhcmQtYWxpZ25tZW50IGV2ZW4gaWYgaXQgc3VwcG9ydHMgZGlzY2FyZGluZyBp
bmRpdmlkdWFsIHNlY3RvcnMuCisqICAgICBGcm9udGVuZHMgc2hvdWxkIGFzc3VtZSBkaXNjYXJk
LWFsaWdubWVudCA9PSAwIGFuZCBkaXNjYXJkLWdyYW51bGFyaXR5CisqICAgICA9PSBzZWN0b3Ig
c2l6ZSBpZiB0aGVzZSBrZXlzIGFyZSBtaXNzaW5nLgorKiAoNSkgVGhlIGRpc2NhcmQtYWxpZ25t
ZW50IHBhcmFtZXRlciBhbGxvd3MgYSBwaHlzaWNhbCBkZXZpY2UgdG8gYmUKKyogICAgIHBhcnRp
dGlvbmVkIGludG8gdmlydHVhbCBkZXZpY2VzIHRoYXQgZG8gbm90IG5lY2Vzc2FyaWx5IGJlZ2lu
IG9yCisqICAgICBlbmQgb24gYSBkaXNjYXJkYWJsZSBleHRlbnQgYm91bmRhcnkuCisqICg2KSBX
aGVuIHRoZXJlIGlzIG9ubHkgYSBzaW5nbGUgcGFnZSBhbGxvY2F0ZWQgdG8gdGhlIHJlcXVlc3Qg
cmluZywKKyogICAgICdyaW5nLXJlZicgaXMgdXNlZCB0byBjb21tdW5pY2F0ZSB0aGUgZ3JhbnQg
cmVmZXJlbmNlIGZvciB0aGlzCisqICAgICBwYWdlIHRvIHRoZSBiYWNrZW5kLiAgV2hlbiB1c2lu
ZyBhIG11bHRpLXBhZ2UgcmluZywgdGhlICdyaW5nLXJlZicKKyogICAgIG5vZGUgaXMgbm90IGNy
ZWF0ZWQuICBJbnN0ZWFkICdyaW5nLXJlZjAnIC0gJ3JpbmctcmVmTicgYXJlIHVzZWQuCisqICg3
KSBXaGVuIHVzaW5nIHBlcnNpc3RlbnQgZ3JhbnRzIGRhdGEgaGFzIHRvIGJlIGNvcGllZCBmcm9t
L3RvIHRoZSBwYWdlCisqICAgICB3aGVyZSB0aGUgZ3JhbnQgaXMgY3VycmVudGx5IG1hcHBlZC4g
VGhlIG92ZXJoZWFkIG9mIGRvaW5nIHRoaXMgY29weQorKiAgICAgaG93ZXZlciBkb2Vzbid0IHN1
cHByZXNzIHRoZSBzcGVlZCBpbXByb3ZlbWVudCBvZiBub3QgaGF2aW5nIHRvIHVubWFwCisqICAg
ICB0aGUgZ3JhbnRzLgorKiAoOCkgVGhlIGZyb250ZW5kIGRyaXZlciBoYXMgdG8gYWxsb3cgdGhl
IGJhY2tlbmQgZHJpdmVyIHRvIG1hcCBhbGwgZ3JhbnRzCisqICAgICB3aXRoIHdyaXRlIGFjY2Vz
cywgZXZlbiB3aGVuIHRoZXkgc2hvdWxkIGJlIG1hcHBlZCByZWFkLW9ubHksIHNpbmNlCisqICAg
ICBmdXJ0aGVyIHJlcXVlc3RzIG1heSByZXVzZSB0aGVzZSBncmFudHMgYW5kIHJlcXVpcmUgd3Jp
dGUgcGVybWlzc2lvbnMuCisqICg5KSBMaW51eCBpbXBsZW1lbnRhdGlvbiBkb2Vzbid0IGhhdmUg
YSBsaW1pdCBvbiB0aGUgbWF4aW11bSBudW1iZXIgb2YKKyogICAgIGdyYW50cyB0aGF0IGNhbiBi
ZSBwZXJzaXN0ZW50bHkgbWFwcGVkIGluIHRoZSBmcm9udGVuZCBkcml2ZXIsIGJ1dAorKiAgICAg
ZHVlIHRvIHRoZSBmcm9udGVudCBkcml2ZXIgaW1wbGVtZW50YXRpb24gaXQgc2hvdWxkIG5ldmVy
IGJlIGJpZ2dlcgorKiAgICAgdGhhbiBSSU5HX1NJWkUgKiBCTEtJRl9NQVhfU0VHTUVOVFNfUEVS
X1JFUVVFU1QuCisqKDEwKSBUaGUgZGlzY2FyZC1zZWN1cmUgcHJvcGVydHkgbWF5IGJlIHByZXNl
bnQgYW5kIHdpbGwgYmUgc2V0IHRvIDEgaWYgdGhlCisqICAgICBiYWNraW5nIGRldmljZSBzdXBw
b3J0cyBzZWN1cmUgZGlzY2FyZC4KKyooMTEpIE9ubHkgdXNlZCBieSBMaW51eCBhbmQgTmV0QlNE
LgorKi8KIAogLyoKLSAqIFNUQVRFIERJQUdSQU1TCi0gKgotICoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnR1cCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIFRv
b2wgc3RhY2sgY3JlYXRlcyBmcm9udCBhbmQgYmFjayBub2RlcyB3aXRoIHN0YXRlIFhlbmJ1c1N0
YXRlSW5pdGlhbGlzaW5nLgotICoKLSAqIEZyb250ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBCYWNrCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gICAgPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogWGVuYnVzU3RhdGVJbml0aWFsaXNp
bmcgICAgICAgICAgICAgIFhlbmJ1c1N0YXRlSW5pdGlhbGlzaW5nCi0gKiAgbyBRdWVyeSB2aXJ0
dWFsIGRldmljZSAgICAgICAgICAgICAgIG8gUXVlcnkgYmFja2VuZCBkZXZpY2UgaWRlbnRpZmlj
YXRpb24KLSAqICAgIHByb3BlcnRpZXMuICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLgot
ICogIG8gU2V0dXAgT1MgZGV2aWNlIGluc3RhbmNlLiAgICAgICAgICBvIE9wZW4gYW5kIHZhbGlk
YXRlIGJhY2tlbmQgZGV2aWNlLgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBvIFB1Ymxpc2ggYmFja2VuZCBmZWF0dXJlcyBhbmQKLSAqICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0cmFuc3BvcnQgcGFyYW1ldGVycy4KLSAqICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gKiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFYKLSAqICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYZW5idXNTdGF0ZUluaXRXYWl0Ci0g
KgotICogbyBRdWVyeSBiYWNrZW5kIGZlYXR1cmVzIGFuZAotICogICB0cmFuc3BvcnQgcGFyYW1l
dGVycy4KLSAqIG8gQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgdGhlCi0gKiAgIHJlcXVlc3Qgcmlu
Zy4KLSAqIG8gUHVibGlzaCB0cmFuc3BvcnQgcGFyYW1ldGVycwotICogICB0aGF0IHdpbGwgYmUg
aW4gZWZmZWN0IGR1cmluZwotICogICB0aGlzIGNvbm5lY3Rpb24uCi0gKiAgICAgICAgICAgICAg
fAotICogICAgICAgICAgICAgIHwKLSAqICAgICAgICAgICAgICBWCi0gKiBYZW5idXNTdGF0ZUlu
aXRpYWxpc2VkCi0gKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
IFF1ZXJ5IGZyb250ZW5kIHRyYW5zcG9ydCBwYXJhbWV0ZXJzLgotICogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBvIENvbm5lY3QgdG8gdGhlIHJlcXVlc3QgcmluZyBhbmQK
LSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudCBjaGFubmVs
LgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvIFB1Ymxpc2ggYmFj
a2VuZCBkZXZpY2UgcHJvcGVydGllcy4KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFYKLSAqICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBYZW5idXNTdGF0ZUNvbm5lY3RlZAotICoKLSAqICBvIFF1ZXJ5IGJhY2tl
bmQgZGV2aWNlIHByb3BlcnRpZXMuCi0gKiAgbyBGaW5hbGl6ZSBPUyB2aXJ0dWFsIGRldmljZQot
ICogICAgaW5zdGFuY2UuCi0gKiAgICAgICAgICAgICAgfAotICogICAgICAgICAgICAgIHwKLSAq
ICAgICAgICAgICAgICBWCi0gKiBYZW5idXNTdGF0ZUNvbm5lY3RlZAotICoKLSAqIE5vdGU6IERy
aXZlcnMgdGhhdCBkbyBub3Qgc3VwcG9ydCBhbnkgb3B0aW9uYWwgZmVhdHVyZXMsIG9yIHRoZSBu
ZWdvdGlhdGlvbgotICogICAgICAgb2YgdHJhbnNwb3J0IHBhcmFtZXRlcnMsIGNhbiBza2lwIGNl
cnRhaW4gc3RhdGVzIGluIHRoZSBzdGF0ZSBtYWNoaW5lOgotICoKLSAqICAgICAgIG8gQSBmcm9u
dGVuZCBtYXkgdHJhbnNpdGlvbiB0byBYZW5idXNTdGF0ZUluaXRpYWxpc2VkIHdpdGhvdXQKLSAq
ICAgICAgICAgd2FpdGluZyBmb3IgdGhlIGJhY2tlbmQgdG8gZW50ZXIgWGVuYnVzU3RhdGVJbml0
V2FpdC4gIEluIHRoaXMKLSAqICAgICAgICAgY2FzZSwgZGVmYXVsdCB0cmFuc3BvcnQgcGFyYW1l
dGVycyBhcmUgaW4gZWZmZWN0IGFuZCBhbnkKLSAqICAgICAgICAgdHJhbnNwb3J0IHBhcmFtZXRl
cnMgcHVibGlzaGVkIGJ5IHRoZSBmcm9udGVuZCBtdXN0IGNvbnRhaW4KLSAqICAgICAgICAgdGhl
aXIgZGVmYXVsdCB2YWx1ZXMuCi0gKgotICogICAgICAgbyBBIGJhY2tlbmQgbWF5IHRyYW5zaXRp
b24gdG8gWGVuYnVzU3RhdGVJbml0aWFsaXNlZCwgYnlwYXNzaW5nCi0gKiAgICAgICAgIFhlbmJ1
c1N0YXRlSW5pdFdhaXQsIHdpdGhvdXQgd2FpdGluZyBmb3IgdGhlIGZyb250ZW5kIHRvIGZpcnN0
Ci0gKiAgICAgICAgIGVudGVyIHRoZSBYZW5idXNTdGF0ZUluaXRpYWxpc2VkIHN0YXRlLiAgSW4g
dGhpcyBjYXNlLCBkZWZhdWx0Ci0gKiAgICAgICAgIHRyYW5zcG9ydCBwYXJhbWV0ZXJzIGFyZSBp
biBlZmZlY3QgYW5kIGFueSB0cmFuc3BvcnQgcGFyYW1ldGVycwotICogICAgICAgICBwdWJsaXNo
ZWQgYnkgdGhlIGJhY2tlbmQgbXVzdCBjb250YWluIHRoZWlyIGRlZmF1bHQgdmFsdWVzLgotICoK
LSAqICAgICAgIERyaXZlcnMgdGhhdCBzdXBwb3J0IG9wdGlvbmFsIGZlYXR1cmVzIGFuZC9vciB0
cmFuc3BvcnQgcGFyYW1ldGVyCi0gKiAgICAgICBuZWdvdGlhdGlvbiBtdXN0IHRvbGVyYXRlIHRo
ZXNlIGFkZGl0aW9uYWwgc3RhdGUgdHJhbnNpdGlvbiBwYXRocy4KLSAqICAgICAgIEluIGdlbmVy
YWwgdGhpcyBtZWFucyBwZXJmb3JtaW5nIHRoZSB3b3JrIG9mIGFueSBza2lwcGVkIHN0YXRlCi0g
KiAgICAgICB0cmFuc2l0aW9uLCBpZiBpdCBoYXMgbm90IGFscmVhZHkgYmVlbiBwZXJmb3JtZWQs
IGluIGFkZGl0aW9uIHRvIHRoZQotICogICAgICAgd29yayBhc3NvY2lhdGVkIHdpdGggZW50cnkg
aW50byB0aGUgY3VycmVudCBzdGF0ZS4KLSAqLworKiBNdWx0aXBsZSBoYXJkd2FyZSBxdWV1ZXMv
cmluZ3M6CisqIElmIHN1cHBvcnRlZCwgdGhlIGJhY2tlbmQgd2lsbCB3cml0ZSB0aGUga2V5ICJt
dWx0aS1xdWV1ZS1tYXgtcXVldWVzIiB0bworKiB0aGUgZGlyZWN0b3J5IGZvciB0aGF0IHZiZCwg
YW5kIHNldCBpdHMgdmFsdWUgdG8gdGhlIG1heGltdW0gc3VwcG9ydGVkCisqIG51bWJlciBvZiBx
dWV1ZXMuCisqIEZyb250ZW5kcyB0aGF0IGFyZSBhd2FyZSBvZiB0aGlzIGZlYXR1cmUgYW5kIHdp
c2ggdG8gdXNlIGl0IGNhbiB3cml0ZSB0aGUKKyoga2V5ICJtdWx0aS1xdWV1ZS1udW0tcXVldWVz
IiB3aXRoIHRoZSBudW1iZXIgdGhleSB3aXNoIHRvIHVzZSwgd2hpY2ggbXVzdCBiZQorKiBncmVh
dGVyIHRoYW4gemVybywgYW5kIG5vIG1vcmUgdGhhbiB0aGUgdmFsdWUgcmVwb3J0ZWQgYnkgdGhl
IGJhY2tlbmQgaW4KKyogIm11bHRpLXF1ZXVlLW1heC1xdWV1ZXMiLgorKgorKiBGb3IgZnJvbnRl
bmRzIHJlcXVlc3RpbmcganVzdCBvbmUgcXVldWUsIHRoZSB1c3VhbCBldmVudC1jaGFubmVsIGFu
ZAorKiByaW5nLXJlZiBrZXlzIGFyZSB3cml0dGVuIGFzIGJlZm9yZSwgc2ltcGxpZnlpbmcgdGhl
IGJhY2tlbmQgcHJvY2Vzc2luZworKiB0byBhdm9pZCBkaXN0aW5ndWlzaGluZyBiZXR3ZWVuIGEg
ZnJvbnRlbmQgdGhhdCBkb2Vzbid0IHVuZGVyc3RhbmQgdGhlCisqIG11bHRpLXF1ZXVlIGZlYXR1
cmUsIGFuZCBvbmUgdGhhdCBkb2VzLCBidXQgcmVxdWVzdGVkIG9ubHkgb25lIHF1ZXVlLgorKgor
KiBGcm9udGVuZHMgcmVxdWVzdGluZyB0d28gb3IgbW9yZSBxdWV1ZXMgbXVzdCBub3Qgd3JpdGUg
dGhlIHRvcGxldmVsCisqIGV2ZW50LWNoYW5uZWwgYW5kIHJpbmctcmVmIGtleXMsIGluc3RlYWQg
d3JpdGluZyB0aG9zZSBrZXlzIHVuZGVyIHN1Yi1rZXlzCisqIGhhdmluZyB0aGUgbmFtZSAicXVl
dWUtTiIgd2hlcmUgTiBpcyB0aGUgaW50ZWdlciBJRCBvZiB0aGUgcXVldWUvcmluZyBmb3IKKyog
d2hpY2ggdGhvc2Uga2V5cyBiZWxvbmcuIFF1ZXVlcyBhcmUgaW5kZXhlZCBmcm9tIHplcm8uCisq
IEZvciBleGFtcGxlLCBhIGZyb250ZW5kIHdpdGggdHdvIHF1ZXVlcyBtdXN0IHdyaXRlIHRoZSBm
b2xsb3dpbmcgc2V0IG9mCisqIHF1ZXVlLXJlbGF0ZWQga2V5czoKKyoKKyogL2xvY2FsL2RvbWFp
bi8xL2RldmljZS92YmQvMC9tdWx0aS1xdWV1ZS1udW0tcXVldWVzID0gIjIiCisqIC9sb2NhbC9k
b21haW4vMS9kZXZpY2UvdmJkLzAvcXVldWUtMCA9ICIiCisqIC9sb2NhbC9kb21haW4vMS9kZXZp
Y2UvdmJkLzAvcXVldWUtMC9yaW5nLXJlZiA9ICI8cmluZy1yZWYjMD4iCisqIC9sb2NhbC9kb21h
aW4vMS9kZXZpY2UvdmJkLzAvcXVldWUtMC9ldmVudC1jaGFubmVsID0gIjxldnRjaG4jMD4iCisq
IC9sb2NhbC9kb21haW4vMS9kZXZpY2UvdmJkLzAvcXVldWUtMSA9ICIiCisqIC9sb2NhbC9kb21h
aW4vMS9kZXZpY2UvdmJkLzAvcXVldWUtMS9yaW5nLXJlZiA9ICI8cmluZy1yZWYjMT4iCisqIC9s
b2NhbC9kb21haW4vMS9kZXZpY2UvdmJkLzAvcXVldWUtMS9ldmVudC1jaGFubmVsID0gIjxldnRj
aG4jMT4iCisqCisqIEl0IGlzIGFsc28gcG9zc2libGUgdG8gdXNlIG11bHRpcGxlIHF1ZXVlcy9y
aW5ncyB0b2dldGhlciB3aXRoCisqIGZlYXR1cmUgbXVsdGktcGFnZSByaW5nIGJ1ZmZlci4KKyog
Rm9yIGV4YW1wbGUsIGEgZnJvbnRlbmQgcmVxdWVzdHMgdHdvIHF1ZXVlcy9yaW5ncyBhbmQgdGhl
IHNpemUgb2YgZWFjaCByaW5nCisqIGJ1ZmZlciBpcyB0d28gcGFnZXMgbXVzdCB3cml0ZSB0aGUg
Zm9sbG93aW5nIHNldCBvZiByZWxhdGVkIGtleXM6CisqCisqIC9sb2NhbC9kb21haW4vMS9kZXZp
Y2UvdmJkLzAvbXVsdGktcXVldWUtbnVtLXF1ZXVlcyA9ICIyIgorKiAvbG9jYWwvZG9tYWluLzEv
ZGV2aWNlL3ZiZC8wL3JpbmctcGFnZS1vcmRlciA9ICIxIgorKiAvbG9jYWwvZG9tYWluLzEvZGV2
aWNlL3ZiZC8wL3F1ZXVlLTAgPSAiIgorKiAvbG9jYWwvZG9tYWluLzEvZGV2aWNlL3ZiZC8wL3F1
ZXVlLTAvcmluZy1yZWYwID0gIjxyaW5nLXJlZiMwPiIKKyogL2xvY2FsL2RvbWFpbi8xL2Rldmlj
ZS92YmQvMC9xdWV1ZS0wL3JpbmctcmVmMSA9ICI8cmluZy1yZWYjMT4iCisqIC9sb2NhbC9kb21h
aW4vMS9kZXZpY2UvdmJkLzAvcXVldWUtMC9ldmVudC1jaGFubmVsID0gIjxldnRjaG4jMD4iCisq
IC9sb2NhbC9kb21haW4vMS9kZXZpY2UvdmJkLzAvcXVldWUtMSA9ICIiCisqIC9sb2NhbC9kb21h
aW4vMS9kZXZpY2UvdmJkLzAvcXVldWUtMS9yaW5nLXJlZjAgPSAiPHJpbmctcmVmIzI+IgorKiAv
bG9jYWwvZG9tYWluLzEvZGV2aWNlL3ZiZC8wL3F1ZXVlLTEvcmluZy1yZWYxID0gIjxyaW5nLXJl
ZiMzPiIKKyogL2xvY2FsL2RvbWFpbi8xL2RldmljZS92YmQvMC9xdWV1ZS0xL2V2ZW50LWNoYW5u
ZWwgPSAiPGV2dGNobiMxPiIKKyoKKyovCiAKIC8qCi0gKiBSRVFVRVNUIENPREVTLgotICovCisq
IFNUQVRFIERJQUdSQU1TCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgU3RhcnR1cCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqIFRvb2wgc3RhY2sgY3JlYXRlcyBmcm9u
dCBhbmQgYmFjayBub2RlcyB3aXRoIHN0YXRlIFhlbmJ1c1N0YXRlSW5pdGlhbGlzaW5nLgorKgor
KiBGcm9udCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFjaworKiA9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQorKiBYZW5idXNTdGF0ZUluaXRpYWxpc2luZyAgICAgICAgICAgICAgWGVuYnVzU3Rh
dGVJbml0aWFsaXNpbmcKKyogIG8gUXVlcnkgdmlydHVhbCBkZXZpY2UgICAgICAgICAgICAgICBv
IFF1ZXJ5IGJhY2tlbmQgZGV2aWNlIGlkZW50aWZpY2F0aW9uCisqICAgIHByb3BlcnRpZXMuICAg
ICAgICAgICAgICAgICAgICAgICAgICBkYXRhLgorKiAgbyBTZXR1cCBPUyBkZXZpY2UgaW5zdGFu
Y2UuICAgICAgICAgIG8gT3BlbiBhbmQgdmFsaWRhdGUgYmFja2VuZCBkZXZpY2UuCisqICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbyBQdWJsaXNoIGJhY2tlbmQgZmVhdHVy
ZXMgYW5kCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc3Bv
cnQgcGFyYW1ldGVycy4KKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8CisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfAorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFYKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFhlbmJ1c1N0YXRlSW5pdFdhaXQKKyoKKyogbyBRdWVyeSBiYWNrZW5kIGZlYXR1cmVzIGFuZAor
KiAgIHRyYW5zcG9ydCBwYXJhbWV0ZXJzLgorKiBvIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIHRo
ZQorKiAgIHJlcXVlc3QgcmluZy4KKyogbyBQdWJsaXNoIHRyYW5zcG9ydCBwYXJhbWV0ZXJzCisq
ICAgdGhhdCB3aWxsIGJlIGluIGVmZmVjdCBkdXJpbmcKKyogICB0aGlzIGNvbm5lY3Rpb24uCisq
ICAgICAgICAgICAgICB8CisqICAgICAgICAgICAgICB8CisqICAgICAgICAgICAgICBWCisqIFhl
bmJ1c1N0YXRlSW5pdGlhbGlzZWQKKyoKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBvIFF1ZXJ5IGZyb250ZW5kIHRyYW5zcG9ydCBwYXJhbWV0ZXJzLgorKiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gQ29ubmVjdCB0byB0aGUgcmVxdWVzdCBy
aW5nIGFuZAorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQg
Y2hhbm5lbC4KKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvIFB1Ymxp
c2ggYmFja2VuZCBkZXZpY2UgcHJvcGVydGllcy4KKyogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisqICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFYKKyogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFhlbmJ1c1N0YXRlQ29ubmVjdGVkCisqCisqICBvIFF1ZXJ5IGJhY2tl
bmQgZGV2aWNlIHByb3BlcnRpZXMuCisqICBvIEZpbmFsaXplIE9TIHZpcnR1YWwgZGV2aWNlCisq
ICAgIGluc3RhbmNlLgorKiAgICAgICAgICAgICAgfAorKiAgICAgICAgICAgICAgfAorKiAgICAg
ICAgICAgICAgVgorKiBYZW5idXNTdGF0ZUNvbm5lY3RlZAorKgorKiBOb3RlOiBEcml2ZXJzIHRo
YXQgZG8gbm90IHN1cHBvcnQgYW55IG9wdGlvbmFsIGZlYXR1cmVzLCBvciB0aGUgbmVnb3RpYXRp
b24KKyogICAgICAgb2YgdHJhbnNwb3J0IHBhcmFtZXRlcnMsIGNhbiBza2lwIGNlcnRhaW4gc3Rh
dGVzIGluIHRoZSBzdGF0ZSBtYWNoaW5lOgorKgorKiAgICAgICBvIEEgZnJvbnRlbmQgbWF5IHRy
YW5zaXRpb24gdG8gWGVuYnVzU3RhdGVJbml0aWFsaXNlZCB3aXRob3V0CisqICAgICAgICAgd2Fp
dGluZyBmb3IgdGhlIGJhY2tlbmQgdG8gZW50ZXIgWGVuYnVzU3RhdGVJbml0V2FpdC4gIEluIHRo
aXMKKyogICAgICAgICBjYXNlLCBkZWZhdWx0IHRyYW5zcG9ydCBwYXJhbWV0ZXJzIGFyZSBpbiBl
ZmZlY3QgYW5kIGFueQorKiAgICAgICAgIHRyYW5zcG9ydCBwYXJhbWV0ZXJzIHB1Ymxpc2hlZCBi
eSB0aGUgZnJvbnRlbmQgbXVzdCBjb250YWluCisqICAgICAgICAgdGhlaXIgZGVmYXVsdCB2YWx1
ZXMuCisqCisqICAgICAgIG8gQSBiYWNrZW5kIG1heSB0cmFuc2l0aW9uIHRvIFhlbmJ1c1N0YXRl
SW5pdGlhbGlzZWQsIGJ5cGFzc2luZworKiAgICAgICAgIFhlbmJ1c1N0YXRlSW5pdFdhaXQsIHdp
dGhvdXQgd2FpdGluZyBmb3IgdGhlIGZyb250ZW5kIHRvIGZpcnN0CisqICAgICAgICAgZW50ZXIg
dGhlIFhlbmJ1c1N0YXRlSW5pdGlhbGlzZWQgc3RhdGUuICBJbiB0aGlzIGNhc2UsIGRlZmF1bHQK
KyogICAgICAgICB0cmFuc3BvcnQgcGFyYW1ldGVycyBhcmUgaW4gZWZmZWN0IGFuZCBhbnkgdHJh
bnNwb3J0IHBhcmFtZXRlcnMKKyogICAgICAgICBwdWJsaXNoZWQgYnkgdGhlIGJhY2tlbmQgbXVz
dCBjb250YWluIHRoZWlyIGRlZmF1bHQgdmFsdWVzLgorKgorKiAgICAgICBEcml2ZXJzIHRoYXQg
c3VwcG9ydCBvcHRpb25hbCBmZWF0dXJlcyBhbmQvb3IgdHJhbnNwb3J0IHBhcmFtZXRlcgorKiAg
ICAgICBuZWdvdGlhdGlvbiBtdXN0IHRvbGVyYXRlIHRoZXNlIGFkZGl0aW9uYWwgc3RhdGUgdHJh
bnNpdGlvbiBwYXRocy4KKyogICAgICAgSW4gZ2VuZXJhbCB0aGlzIG1lYW5zIHBlcmZvcm1pbmcg
dGhlIHdvcmsgb2YgYW55IHNraXBwZWQgc3RhdGUKKyogICAgICAgdHJhbnNpdGlvbiwgaWYgaXQg
aGFzIG5vdCBhbHJlYWR5IGJlZW4gcGVyZm9ybWVkLCBpbiBhZGRpdGlvbiB0byB0aGUKKyogICAg
ICAgd29yayBhc3NvY2lhdGVkIHdpdGggZW50cnkgaW50byB0aGUgY3VycmVudCBzdGF0ZS4KKyov
CisKKy8qCisqIFJFUVVFU1QgQ09ERVMuCisqLwogI2RlZmluZSBCTEtJRl9PUF9SRUFEICAgICAg
ICAgICAgICAwCiAjZGVmaW5lIEJMS0lGX09QX1dSSVRFICAgICAgICAgICAgIDEKIC8qCi0gKiBB
bGwgd3JpdGVzIGlzc3VlZCBwcmlvciB0byBhIHJlcXVlc3Qgd2l0aCB0aGUgQkxLSUZfT1BfV1JJ
VEVfQkFSUklFUgotICogb3BlcmF0aW9uIGNvZGUgKCJiYXJyaWVyIHJlcXVlc3QiKSBtdXN0IGJl
IGNvbXBsZXRlZCBwcmlvciB0byB0aGUKLSAqIGV4ZWN1dGlvbiBvZiB0aGUgYmFycmllciByZXF1
ZXN0LiAgQWxsIHdyaXRlcyBpc3N1ZWQgYWZ0ZXIgdGhlIGJhcnJpZXIKLSAqIHJlcXVlc3QgbXVz
dCBub3QgZXhlY3V0ZSB1bnRpbCBhZnRlciB0aGUgY29tcGxldGlvbiBvZiB0aGUgYmFycmllciBy
ZXF1ZXN0LgotICoKLSAqIE9wdGlvbmFsLiAgU2VlICJmZWF0dXJlLWJhcnJpZXIiIFhlbkJ1cyBu
b2RlIGRvY3VtZW50YXRpb24gYWJvdmUuCi0gKi8KKyogQWxsIHdyaXRlcyBpc3N1ZWQgcHJpb3Ig
dG8gYSByZXF1ZXN0IHdpdGggdGhlIEJMS0lGX09QX1dSSVRFX0JBUlJJRVIKKyogb3BlcmF0aW9u
IGNvZGUgKCJiYXJyaWVyIHJlcXVlc3QiKSBtdXN0IGJlIGNvbXBsZXRlZCBwcmlvciB0byB0aGUK
KyogZXhlY3V0aW9uIG9mIHRoZSBiYXJyaWVyIHJlcXVlc3QuICBBbGwgd3JpdGVzIGlzc3VlZCBh
ZnRlciB0aGUgYmFycmllcgorKiByZXF1ZXN0IG11c3Qgbm90IGV4ZWN1dGUgdW50aWwgYWZ0ZXIg
dGhlIGNvbXBsZXRpb24gb2YgdGhlIGJhcnJpZXIgcmVxdWVzdC4KKyoKKyogT3B0aW9uYWwuICBT
ZWUgImZlYXR1cmUtYmFycmllciIgWGVuQnVzIG5vZGUgZG9jdW1lbnRhdGlvbiBhYm92ZS4KKyov
CiAjZGVmaW5lIEJMS0lGX09QX1dSSVRFX0JBUlJJRVIgICAgIDIKIC8qCi0gKiBDb21taXQgYW55
IHVuY29tbWl0dGVkIGNvbnRlbnRzIG9mIHRoZSBiYWNraW5nIGRldmljZSdzIHZvbGF0aWxlIGNh
Y2hlCi0gKiB0byBzdGFibGUgc3RvcmFnZS4KLSAqCi0gKiBPcHRpb25hbC4gIFNlZSAiZmVhdHVy
ZS1mbHVzaC1jYWNoZSIgWGVuQnVzIG5vZGUgZG9jdW1lbnRhdGlvbiBhYm92ZS4KLSAqLworKiBD
b21taXQgYW55IHVuY29tbWl0dGVkIGNvbnRlbnRzIG9mIHRoZSBiYWNraW5nIGRldmljZSdzIHZv
bGF0aWxlIGNhY2hlCisqIHRvIHN0YWJsZSBzdG9yYWdlLgorKgorKiBPcHRpb25hbC4gIFNlZSAi
ZmVhdHVyZS1mbHVzaC1jYWNoZSIgWGVuQnVzIG5vZGUgZG9jdW1lbnRhdGlvbiBhYm92ZS4KKyov
CiAjZGVmaW5lIEJMS0lGX09QX0ZMVVNIX0RJU0tDQUNIRSAgIDMKIC8qCi0gKiBVc2VkIGluIFNM
RVMgc291cmNlcyBmb3IgZGV2aWNlIHNwZWNpZmljIGNvbW1hbmQgcGFja2V0Ci0gKiBjb250YWlu
ZWQgd2l0aGluIHRoZSByZXF1ZXN0LiBSZXNlcnZlZCBmb3IgdGhhdCBwdXJwb3NlLgotICovCisq
IFVzZWQgaW4gU0xFUyBzb3VyY2VzIGZvciBkZXZpY2Ugc3BlY2lmaWMgY29tbWFuZCBwYWNrZXQK
KyogY29udGFpbmVkIHdpdGhpbiB0aGUgcmVxdWVzdC4gUmVzZXJ2ZWQgZm9yIHRoYXQgcHVycG9z
ZS4KKyovCiAjZGVmaW5lIEJMS0lGX09QX1JFU0VSVkVEXzEgICAgICAgIDQKIC8qCi0gKiBJbmRp
Y2F0ZSB0byB0aGUgYmFja2VuZCBkZXZpY2UgdGhhdCBhIHJlZ2lvbiBvZiBzdG9yYWdlIGlzIG5v
IGxvbmdlciBpbgotICogdXNlLCBhbmQgbWF5IGJlIGRpc2NhcmRlZCBhdCBhbnkgdGltZSB3aXRo
b3V0IGltcGFjdCB0byB0aGUgY2xpZW50LiAgSWYKLSAqIHRoZSBCTEtJRl9ESVNDQVJEX1NFQ1VS
RSBmbGFnIGlzIHNldCBvbiB0aGUgcmVxdWVzdCwgYWxsIGNvcGllcyBvZiB0aGUKLSAqIGRpc2Nh
cmRlZCByZWdpb24gb24gdGhlIGRldmljZSBtdXN0IGJlIHJlbmRlcmVkIHVucmVjb3ZlcmFibGUg
YmVmb3JlIHRoZQotICogY29tbWFuZCByZXR1cm5zLgotICoKLSAqIFRoaXMgb3BlcmF0aW9uIGlz
IGFuYWxvZ291cyB0byBwZXJmb3JtaW5nIGEgdHJpbSAoQVRBKSBvciB1bmFtcCAoU0NTSSksCi0g
KiBjb21tYW5kIG9uIGEgbmF0aXZlIGRldmljZS4KLSAqCi0gKiBNb3JlIGluZm9ybWF0aW9uIGFi
b3V0IHRyaW0vdW5tYXAgb3BlcmF0aW9ucyBjYW4gYmUgZm91bmQgYXQ6Ci0gKiBodHRwOi8vdDEz
Lm9yZy9Eb2N1bWVudHMvVXBsb2FkZWREb2N1bWVudHMvZG9jczIwMDgvCi0gKiAgICAgZTA3MTU0
cjYtRGF0YV9TZXRfTWFuYWdlbWVudF9Qcm9wb3NhbF9mb3JfQVRBLUFDUzIuZG9jCi0gKiBodHRw
Oi8vd3d3LnNlYWdhdGUuY29tL3N0YXRpY2ZpbGVzL3N1cHBvcnQvZGlzYy9tYW51YWxzLwotICog
ICAgIEludGVyZmFjZSUyMG1hbnVhbHMvMTAwMjkzMDY4Yy5wZGYKLSAqCi0gKiBPcHRpb25hbC4g
IFNlZSAiZmVhdHVyZS1kaXNjYXJkIiwgImRpc2NhcmQtYWxpZ25tZW50IiwKLSAqICJkaXNjYXJk
LWdyYW51bGFyaXR5IiwgYW5kICJkaXNjYXJkLXNlY3VyZSIgaW4gdGhlIFhlbkJ1cyBub2RlCi0g
KiBkb2N1bWVudGF0aW9uIGFib3ZlLgotICovCisqIEluZGljYXRlIHRvIHRoZSBiYWNrZW5kIGRl
dmljZSB0aGF0IGEgcmVnaW9uIG9mIHN0b3JhZ2UgaXMgbm8gbG9uZ2VyIGluCisqIHVzZSwgYW5k
IG1heSBiZSBkaXNjYXJkZWQgYXQgYW55IHRpbWUgd2l0aG91dCBpbXBhY3QgdG8gdGhlIGNsaWVu
dC4gIElmCisqIHRoZSBCTEtJRl9ESVNDQVJEX1NFQ1VSRSBmbGFnIGlzIHNldCBvbiB0aGUgcmVx
dWVzdCwgYWxsIGNvcGllcyBvZiB0aGUKKyogZGlzY2FyZGVkIHJlZ2lvbiBvbiB0aGUgZGV2aWNl
IG11c3QgYmUgcmVuZGVyZWQgdW5yZWNvdmVyYWJsZSBiZWZvcmUgdGhlCisqIGNvbW1hbmQgcmV0
dXJucy4KKyoKKyogVGhpcyBvcGVyYXRpb24gaXMgYW5hbG9nb3VzIHRvIHBlcmZvcm1pbmcgYSB0
cmltIChBVEEpIG9yIHVuYW1wIChTQ1NJKSwKKyogY29tbWFuZCBvbiBhIG5hdGl2ZSBkZXZpY2Uu
CisqCisqIE1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdHJpbS91bm1hcCBvcGVyYXRpb25zIGNhbiBi
ZSBmb3VuZCBhdDoKKyogaHR0cDovL3QxMy5vcmcvRG9jdW1lbnRzL1VwbG9hZGVkRG9jdW1lbnRz
L2RvY3MyMDA4LworKiAgICAgZTA3MTU0cjYtRGF0YV9TZXRfTWFuYWdlbWVudF9Qcm9wb3NhbF9m
b3JfQVRBLUFDUzIuZG9jCisqIGh0dHA6Ly93d3cuc2VhZ2F0ZS5jb20vc3RhdGljZmlsZXMvc3Vw
cG9ydC9kaXNjL21hbnVhbHMvCisqICAgICBJbnRlcmZhY2UlMjBtYW51YWxzLzEwMDI5MzA2OGMu
cGRmCisqCisqIE9wdGlvbmFsLiAgU2VlICJmZWF0dXJlLWRpc2NhcmQiLCAiZGlzY2FyZC1hbGln
bm1lbnQiLAorKiAiZGlzY2FyZC1ncmFudWxhcml0eSIsIGFuZCAiZGlzY2FyZC1zZWN1cmUiIGlu
IHRoZSBYZW5CdXMgbm9kZQorKiBkb2N1bWVudGF0aW9uIGFib3ZlLgorKi8KICNkZWZpbmUgQkxL
SUZfT1BfRElTQ0FSRCAgICAgICAgICAgNQogCiAvKgotICogUmVjb2duaXplZCBpZiAiZmVhdHVy
ZS1tYXgtaW5kaXJlY3Qtc2VnbWVudHMiIGluIHByZXNlbnQgaW4gdGhlIGJhY2tlbmQKLSAqIHhl
bmJ1cyBpbmZvLiBUaGUgImZlYXR1cmUtbWF4LWluZGlyZWN0LXNlZ21lbnRzIiBub2RlIGNvbnRh
aW5zIHRoZSBtYXhpbXVtCi0gKiBudW1iZXIgb2Ygc2VnbWVudHMgYWxsb3dlZCBieSB0aGUgYmFj
a2VuZCBwZXIgcmVxdWVzdC4gSWYgdGhlIG5vZGUgaXMKLSAqIHByZXNlbnQsIHRoZSBmcm9udGVu
ZCBtaWdodCB1c2UgYmxraWZfcmVxdWVzdF9pbmRpcmVjdCBzdHJ1Y3RzIGluIG9yZGVyIHRvCi0g
KiBpc3N1ZSByZXF1ZXN0cyB3aXRoIG1vcmUgdGhhbiBCTEtJRl9NQVhfU0VHTUVOVFNfUEVSX1JF
UVVFU1QgKDExKS4gVGhlCi0gKiBtYXhpbXVtIG51bWJlciBvZiBpbmRpcmVjdCBzZWdtZW50cyBp
cyBmaXhlZCBieSB0aGUgYmFja2VuZCwgYnV0IHRoZQotICogZnJvbnRlbmQgY2FuIGlzc3VlIHJl
cXVlc3RzIHdpdGggYW55IG51bWJlciBvZiBpbmRpcmVjdCBzZWdtZW50cyBhcyBsb25nIGFzCi0g
KiBpdCdzIGxlc3MgdGhhbiB0aGUgbnVtYmVyIHByb3ZpZGVkIGJ5IHRoZSBiYWNrZW5kLiBUaGUg
aW5kaXJlY3RfZ3JlZnMgZmllbGQKLSAqIGluIGJsa2lmX3JlcXVlc3RfaW5kaXJlY3Qgc2hvdWxk
IGJlIGZpbGxlZCBieSB0aGUgZnJvbnRlbmQgd2l0aCB0aGUKLSAqIGdyYW50IHJlZmVyZW5jZXMg
b2YgdGhlIHBhZ2VzIHRoYXQgYXJlIGhvbGRpbmcgdGhlIGluZGlyZWN0IHNlZ21lbnRzLgotICog
VGhlc2UgcGFnZXMgYXJlIGZpbGxlZCB3aXRoIGFuIGFycmF5IG9mIGJsa2lmX3JlcXVlc3Rfc2Vn
bWVudCB0aGF0IGhvbGQgdGhlCi0gKiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc2VnbWVudHMuIFRo
ZSBudW1iZXIgb2YgaW5kaXJlY3QgcGFnZXMgdG8gdXNlIGlzCi0gKiBkZXRlcm1pbmVkIGJ5IHRo
ZSBudW1iZXIgb2Ygc2VnbWVudHMgYW4gaW5kaXJlY3QgcmVxdWVzdCBjb250YWlucy4gRXZlcnkK
LSAqIGluZGlyZWN0IHBhZ2UgY2FuIGNvbnRhaW4gYSBtYXhpbXVtIG9mCi0gKiAoUEFHRV9TSVpF
IC8gc2l6ZW9mKHN0cnVjdCBibGtpZl9yZXF1ZXN0X3NlZ21lbnQpKSBzZWdtZW50cywgc28gdG8K
LSAqIGNhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIGluZGlyZWN0IHBhZ2VzIHRvIHVzZSB3ZSBoYXZl
IHRvIGRvCi0gKiBjZWlsKGluZGlyZWN0X3NlZ21lbnRzIC8gKFBBR0VfU0laRSAvIHNpemVvZihz
dHJ1Y3QgYmxraWZfcmVxdWVzdF9zZWdtZW50KSkpLgotICoKLSAqIElmIGEgYmFja2VuZCBkb2Vz
IG5vdCByZWNvZ25pemUgQkxLSUZfT1BfSU5ESVJFQ1QsIGl0IHNob3VsZCAqbm90KgotICogY3Jl
YXRlIHRoZSAiZmVhdHVyZS1tYXgtaW5kaXJlY3Qtc2VnbWVudHMiIG5vZGUhCi0gKi8KKyogUmVj
b2duaXplZCBpZiAiZmVhdHVyZS1tYXgtaW5kaXJlY3Qtc2VnbWVudHMiIGluIHByZXNlbnQgaW4g
dGhlIGJhY2tlbmQKKyogeGVuYnVzIGluZm8uIFRoZSAiZmVhdHVyZS1tYXgtaW5kaXJlY3Qtc2Vn
bWVudHMiIG5vZGUgY29udGFpbnMgdGhlIG1heGltdW0KKyogbnVtYmVyIG9mIHNlZ21lbnRzIGFs
bG93ZWQgYnkgdGhlIGJhY2tlbmQgcGVyIHJlcXVlc3QuIElmIHRoZSBub2RlIGlzCisqIHByZXNl
bnQsIHRoZSBmcm9udGVuZCBtaWdodCB1c2UgYmxraWZfcmVxdWVzdF9pbmRpcmVjdCBzdHJ1Y3Rz
IGluIG9yZGVyIHRvCisqIGlzc3VlIHJlcXVlc3RzIHdpdGggbW9yZSB0aGFuIEJMS0lGX01BWF9T
RUdNRU5UU19QRVJfUkVRVUVTVCAoMTEpLiBUaGUKKyogbWF4aW11bSBudW1iZXIgb2YgaW5kaXJl
Y3Qgc2VnbWVudHMgaXMgZml4ZWQgYnkgdGhlIGJhY2tlbmQsIGJ1dCB0aGUKKyogZnJvbnRlbmQg
Y2FuIGlzc3VlIHJlcXVlc3RzIHdpdGggYW55IG51bWJlciBvZiBpbmRpcmVjdCBzZWdtZW50cyBh
cyBsb25nIGFzCisqIGl0J3MgbGVzcyB0aGFuIHRoZSBudW1iZXIgcHJvdmlkZWQgYnkgdGhlIGJh
Y2tlbmQuIFRoZSBpbmRpcmVjdF9ncmVmcyBmaWVsZAorKiBpbiBibGtpZl9yZXF1ZXN0X2luZGly
ZWN0IHNob3VsZCBiZSBmaWxsZWQgYnkgdGhlIGZyb250ZW5kIHdpdGggdGhlCisqIGdyYW50IHJl
ZmVyZW5jZXMgb2YgdGhlIHBhZ2VzIHRoYXQgYXJlIGhvbGRpbmcgdGhlIGluZGlyZWN0IHNlZ21l
bnRzLgorKiBUaGVzZSBwYWdlcyBhcmUgZmlsbGVkIHdpdGggYW4gYXJyYXkgb2YgYmxraWZfcmVx
dWVzdF9zZWdtZW50IHRoYXQgaG9sZCB0aGUKKyogaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNlZ21l
bnRzLiBUaGUgbnVtYmVyIG9mIGluZGlyZWN0IHBhZ2VzIHRvIHVzZSBpcworKiBkZXRlcm1pbmVk
IGJ5IHRoZSBudW1iZXIgb2Ygc2VnbWVudHMgYW4gaW5kaXJlY3QgcmVxdWVzdCBjb250YWlucy4g
RXZlcnkKKyogaW5kaXJlY3QgcGFnZSBjYW4gY29udGFpbiBhIG1heGltdW0gb2YKKyogKFBBR0Vf
U0laRSAvIHNpemVvZihzdHJ1Y3QgYmxraWZfcmVxdWVzdF9zZWdtZW50KSkgc2VnbWVudHMsIHNv
IHRvCisqIGNhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIGluZGlyZWN0IHBhZ2VzIHRvIHVzZSB3ZSBo
YXZlIHRvIGRvCisqIGNlaWwoaW5kaXJlY3Rfc2VnbWVudHMgLyAoUEFHRV9TSVpFIC8gc2l6ZW9m
KHN0cnVjdCBibGtpZl9yZXF1ZXN0X3NlZ21lbnQpKSkuCisqCisqIElmIGEgYmFja2VuZCBkb2Vz
IG5vdCByZWNvZ25pemUgQkxLSUZfT1BfSU5ESVJFQ1QsIGl0IHNob3VsZCAqbm90KgorKiBjcmVh
dGUgdGhlICJmZWF0dXJlLW1heC1pbmRpcmVjdC1zZWdtZW50cyIgbm9kZSEKKyovCiAjZGVmaW5l
IEJMS0lGX09QX0lORElSRUNUICAgICAgICAgIDYKIAogLyoKLSAqIE1heGltdW0gc2NhdHRlci9n
YXRoZXIgc2VnbWVudHMgcGVyIHJlcXVlc3QuCi0gKiBUaGlzIGlzIGNhcmVmdWxseSBjaG9zZW4g
c28gdGhhdCBzaXplb2YoYmxraWZfcmluZ190KSA8PSBQQUdFX1NJWkUuCi0gKiBOQi4gVGhpcyBj
b3VsZCBiZSAxMiBpZiB0aGUgcmluZyBpbmRleGVzIHdlcmVuJ3Qgc3RvcmVkIGluIHRoZSBzYW1l
IHBhZ2UuCi0gKi8KKyogTWF4aW11bSBzY2F0dGVyL2dhdGhlciBzZWdtZW50cyBwZXIgcmVxdWVz
dC4KKyogVGhpcyBpcyBjYXJlZnVsbHkgY2hvc2VuIHNvIHRoYXQgc2l6ZW9mKGJsa2lmX3Jpbmdf
dCkgPD0gUEFHRV9TSVpFLgorKiBOQi4gVGhpcyBjb3VsZCBiZSAxMiBpZiB0aGUgcmluZyBpbmRl
eGVzIHdlcmVuJ3Qgc3RvcmVkIGluIHRoZSBzYW1lIHBhZ2UuCisqLwogI2RlZmluZSBCTEtJRl9N
QVhfU0VHTUVOVFNfUEVSX1JFUVVFU1QgMTEKIAogLyoKLSAqIE1heGltdW0gbnVtYmVyIG9mIGlu
ZGlyZWN0IHBhZ2VzIHRvIHVzZSBwZXIgcmVxdWVzdC4KLSAqLworKiBNYXhpbXVtIG51bWJlciBv
ZiBpbmRpcmVjdCBwYWdlcyB0byB1c2UgcGVyIHJlcXVlc3QuCisqLwogI2RlZmluZSBCTEtJRl9N
QVhfSU5ESVJFQ1RfUEFHRVNfUEVSX1JFUVVFU1QgOAogCiAvKgotICogTkIuIGZpcnN0X3NlY3Qg
YW5kIGxhc3Rfc2VjdCBpbiBibGtpZl9yZXF1ZXN0X3NlZ21lbnQsIGFzIHdlbGwgYXMKLSAqIHNl
Y3Rvcl9udW1iZXIgaW4gYmxraWZfcmVxdWVzdCwgYXJlIGFsd2F5cyBleHByZXNzZWQgaW4gNTEy
LWJ5dGUgdW5pdHMuCi0gKiBIb3dldmVyIHRoZXkgbXVzdCBiZSBwcm9wZXJseSBhbGlnbmVkIHRv
IHRoZSByZWFsIHNlY3RvciBzaXplIG9mIHRoZQotICogcGh5c2ljYWwgZGlzaywgd2hpY2ggaXMg
cmVwb3J0ZWQgaW4gdGhlICJwaHlzaWNhbC1zZWN0b3Itc2l6ZSIgbm9kZSBpbgotICogdGhlIGJh
Y2tlbmQgeGVuYnVzIGluZm8uIEFsc28gdGhlIHhlbmJ1cyAic2VjdG9ycyIgbm9kZSBpcyBleHBy
ZXNzZWQgaW4KLSAqIDUxMi1ieXRlIHVuaXRzLgotICovCisqIE5CLiBmaXJzdF9zZWN0IGFuZCBs
YXN0X3NlY3QgaW4gYmxraWZfcmVxdWVzdF9zZWdtZW50LCBhcyB3ZWxsIGFzCisqIHNlY3Rvcl9u
dW1iZXIgaW4gYmxraWZfcmVxdWVzdCwgYXJlIGFsd2F5cyBleHByZXNzZWQgaW4gNTEyLWJ5dGUg
dW5pdHMuCisqIEhvd2V2ZXIgdGhleSBtdXN0IGJlIHByb3Blcmx5IGFsaWduZWQgdG8gdGhlIHJl
YWwgc2VjdG9yIHNpemUgb2YgdGhlCisqIHBoeXNpY2FsIGRpc2ssIHdoaWNoIGlzIHJlcG9ydGVk
IGluIHRoZSAicGh5c2ljYWwtc2VjdG9yLXNpemUiIG5vZGUgaW4KKyogdGhlIGJhY2tlbmQgeGVu
YnVzIGluZm8uIEFsc28gdGhlIHhlbmJ1cyAic2VjdG9ycyIgbm9kZSBpcyBleHByZXNzZWQgaW4K
KyogNTEyLWJ5dGUgdW5pdHMuCisqLwogc3RydWN0IGJsa2lmX3JlcXVlc3Rfc2VnbWVudCB7CiAg
ICAgZ3JhbnRfcmVmX3QgZ3JlZjsgICAgICAgIC8qIHJlZmVyZW5jZSB0byBJL08gYnVmZmVyIGZy
YW1lICAgICAgICAqLwotICAgIC8qIEBmaXJzdF9zZWN0OiBmaXJzdCBzZWN0b3IgaW4gZnJhbWUg
dG8gdHJhbnNmZXIgKGluY2x1c2l2ZSkuICAgKi8KLSAgICAvKiBAbGFzdF9zZWN0OiBsYXN0IHNl
Y3RvciBpbiBmcmFtZSB0byB0cmFuc2ZlciAoaW5jbHVzaXZlKS4gICAgICovCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8qIEBmaXJzdF9zZWN0OiBmaXJzdCBzZWN0b3IgaW4gZnJhbWUg
dG8gdHJhbnNmZXIgKGluY2x1c2l2ZSkuICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLyogQGxhc3Rfc2VjdDogbGFzdCBzZWN0b3IgaW4gZnJhbWUgdG8gdHJhbnNmZXIgKGluY2x1
c2l2ZSkuICAgICAqLwogICAgIHVpbnQ4X3QgICAgIGZpcnN0X3NlY3QsIGxhc3Rfc2VjdDsKIH07
CiAKIC8qCi0gKiBTdGFydGluZyByaW5nIGVsZW1lbnQgZm9yIGFueSBJL08gcmVxdWVzdC4KLSAq
LworKiBTdGFydGluZyByaW5nIGVsZW1lbnQgZm9yIGFueSBJL08gcmVxdWVzdC4KKyovCiBzdHJ1
Y3QgYmxraWZfcmVxdWVzdCB7CiAgICAgdWludDhfdCAgICAgICAgb3BlcmF0aW9uOyAgICAvKiBC
TEtJRl9PUF8/Pz8gICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgICB1aW50OF90ICAgICAg
ICBucl9zZWdtZW50czsgIC8qIG51bWJlciBvZiBzZWdtZW50cyAgICAgICAgICAgICAgICAgICAq
LwpAQCAtNTQxLDkgKzYzNSw5IEBAIHN0cnVjdCBibGtpZl9yZXF1ZXN0IHsKIHR5cGVkZWYgc3Ry
dWN0IGJsa2lmX3JlcXVlc3QgYmxraWZfcmVxdWVzdF90OwogCiAvKgotICogQ2FzdCB0byB0aGlz
IHN0cnVjdHVyZSB3aGVuIGJsa2lmX3JlcXVlc3Qub3BlcmF0aW9uID09IEJMS0lGX09QX0RJU0NB
UkQKLSAqIHNpemVvZihzdHJ1Y3QgYmxraWZfcmVxdWVzdF9kaXNjYXJkKSA8PSBzaXplb2Yoc3Ry
dWN0IGJsa2lmX3JlcXVlc3QpCi0gKi8KKyogQ2FzdCB0byB0aGlzIHN0cnVjdHVyZSB3aGVuIGJs
a2lmX3JlcXVlc3Qub3BlcmF0aW9uID09IEJMS0lGX09QX0RJU0NBUkQKKyogc2l6ZW9mKHN0cnVj
dCBibGtpZl9yZXF1ZXN0X2Rpc2NhcmQpIDw9IHNpemVvZihzdHJ1Y3QgYmxraWZfcmVxdWVzdCkK
KyovCiBzdHJ1Y3QgYmxraWZfcmVxdWVzdF9kaXNjYXJkIHsKICAgICB1aW50OF90ICAgICAgICBv
cGVyYXRpb247ICAgIC8qIEJMS0lGX09QX0RJU0NBUkQgICAgICAgICAgICAgICAgICAgICAqLwog
ICAgIHVpbnQ4X3QgICAgICAgIGZsYWc7ICAgICAgICAgLyogQkxLSUZfRElTQ0FSRF9TRUNVUkUg
b3IgemVybyAgICAgICAgICovCkBAIC01NzcsMTggKzY3MSwxOCBAQCBzdHJ1Y3QgYmxraWZfcmVz
cG9uc2UgewogdHlwZWRlZiBzdHJ1Y3QgYmxraWZfcmVzcG9uc2UgYmxraWZfcmVzcG9uc2VfdDsK
IAogLyoKLSAqIFNUQVRVUyBSRVRVUk4gQ09ERVMuCi0gKi8KLSAvKiBPcGVyYXRpb24gbm90IHN1
cHBvcnRlZCAob25seSBoYXBwZW5zIG9uIGJhcnJpZXIgd3JpdGVzKS4gKi8KKyogU1RBVFVTIFJF
VFVSTiBDT0RFUy4KKyovCisvKiBPcGVyYXRpb24gbm90IHN1cHBvcnRlZCAob25seSBoYXBwZW5z
IG9uIGJhcnJpZXIgd3JpdGVzKS4gKi8KICNkZWZpbmUgQkxLSUZfUlNQX0VPUE5PVFNVUFAgIC0y
Ci0gLyogT3BlcmF0aW9uIGZhaWxlZCBmb3Igc29tZSB1bnNwZWNpZmllZCByZWFzb24gKC1FSU8p
LiAqLworLyogT3BlcmF0aW9uIGZhaWxlZCBmb3Igc29tZSB1bnNwZWNpZmllZCByZWFzb24gKC1F
SU8pLiAqLwogI2RlZmluZSBCTEtJRl9SU1BfRVJST1IgICAgICAgLTEKLSAvKiBPcGVyYXRpb24g
Y29tcGxldGVkIHN1Y2Nlc3NmdWxseS4gKi8KKy8qIE9wZXJhdGlvbiBjb21wbGV0ZWQgc3VjY2Vz
c2Z1bGx5LiAqLwogI2RlZmluZSBCTEtJRl9SU1BfT0tBWSAgICAgICAgIDAKIAogLyoKLSAqIEdl
bmVyYXRlIGJsa2lmIHJpbmcgc3RydWN0dXJlcyBhbmQgdHlwZXMuCi0gKi8KKyogR2VuZXJhdGUg
YmxraWYgcmluZyBzdHJ1Y3R1cmVzIGFuZCB0eXBlcy4KKyovCiBERUZJTkVfUklOR19UWVBFUyhi
bGtpZiwgc3RydWN0IGJsa2lmX3JlcXVlc3QsIHN0cnVjdCBibGtpZl9yZXNwb25zZSk7CiAKICNk
ZWZpbmUgVkRJU0tfQ0RST00gICAgICAgIDB4MQpAQCAtNTk4LDExICs2OTIsMTEgQEAgREVGSU5F
X1JJTkdfVFlQRVMoYmxraWYsIHN0cnVjdCBibGtpZl9yZXF1ZXN0LCBzdHJ1Y3QgYmxraWZfcmVz
cG9uc2UpOwogI2VuZGlmIC8qIF9fWEVOX1BVQkxJQ19JT19CTEtJRl9IX18gKi8KIAogLyoKLSAq
IExvY2FsIHZhcmlhYmxlczoKLSAqIG1vZGU6IEMKLSAqIGMtZmlsZS1zdHlsZTogIkJTRCIKLSAq
IGMtYmFzaWMtb2Zmc2V0OiA0Ci0gKiB0YWItd2lkdGg6IDQKLSAqIGluZGVudC10YWJzLW1vZGU6
IG5pbAotICogRW5kOgotICovCisqIExvY2FsIHZhcmlhYmxlczoKKyogbW9kZTogQworKiBjLWZp
bGUtc3R5bGU6ICJCU0QiCisqIGMtYmFzaWMtb2Zmc2V0OiA0CisqIHRhYi13aWR0aDogNAorKiBp
bmRlbnQtdGFicy1tb2RlOiBuaWwKKyogRW5kOgorKi8KLS0gCjIuMTYuMi53aW5kb3dzLjEKCgpf
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwp3aW4tcHYtZGV2
ZWwgbWFpbGluZyBsaXN0Cndpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczov
L2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vd2luLXB2LWRldmVs

From win-pv-devel-bounces@lists.xenproject.org Tue May 29 10:07:54 2018
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 29 May 2018 10:07:54 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1fNbXm-0002h7-L7; Tue, 29 May 2018 10:07:54 +0000
Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <srs0=z+p9=iq=citrix.com=prvs=680118468=owen.smith@srs-us1.protection.inumbo.net>)
 id 1fNbXl-0002go-U4
 for win-pv-devel@lists.xenproject.org; Tue, 29 May 2018 10:07:54 +0000
X-Inumbo-ID: da5f9033-6327-11e8-9728-bc764e045a96
Received: from SMTP03.CITRIX.COM (unknown [162.221.156.55])
 by us1-rack-dfw2.inumbo.com (Halon) with ESMTPS
 id da5f9033-6327-11e8-9728-bc764e045a96;
 Tue, 29 May 2018 12:05:45 +0200 (CEST)
X-IronPort-AV: E=Sophos;i="5.49,455,1520899200"; d="scan'208";a="55794500"
From: Owen Smith <owen.smith@citrix.com>
To: <win-pv-devel@lists.xenproject.org>
Date: Tue, 29 May 2018 11:07:14 +0100
Message-ID: <20180529100717.8340-7-owen.smith@citrix.com>
X-Mailer: git-send-email 2.16.2.windows.1
In-Reply-To: <20180529100717.8340-1-owen.smith@citrix.com>
References: <20180529100717.8340-1-owen.smith@citrix.com>
MIME-Version: 1.0
Subject: [win-pv-devel] [PATCH 6/9] Implement multi-queues
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Owen Smith <owen.smith@citrix.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>

U3BsaXRzIFhFTlZCRF9SSU5HIGludG8gbXVsdGlwbGUgWEVOVkJEX0JMS0lGX1JJTkdzLCBvbmUg
Zm9yIGVhY2ggc2hhcmVkCnJpbmcuIFVwLXRvICJtdWx0aS1xdWV1ZS1tYXgtcXVldWVzIiByaW5n
cyBhcmUgdXNlZCB0byBwYXNzCmJsa2lmX3JlcXVlc3RzIGFuZCBibGtpZl9yZXNwb25zZXMgYmV0
d2VlbiBmcm9udGVuZCBhbmQgYmFja2VuZC4gUmV3b3Jrcwp0aGUgcmluZyBpbnRlcmFjdGlvbnMg
dG8gcmVtb3ZlIHRoZSBsb2NrcyB1c2VkIGJ5IFhFTlZCRF9RVUVVRSwKaW1wbGVtZW50aW5nIGEg
cXVldWUgc3lzdGVtIHNpbWlsYXIgdG8gWGVuVmlmcyB0cmFuc21pdHRlciBxdWV1ZXMuCgpTaWdu
ZWQtb2ZmLWJ5OiBPd2VuIFNtaXRoIDxvd2VuLnNtaXRoQGNpdHJpeC5jb20+Ci0tLQogc3JjL3hl
bnZiZC9mcm9udGVuZC5jIHwgICAxOCArLQogc3JjL3hlbnZiZC9yaW5nLmMgICAgIHwgMzA5NyAr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tCiAyIGZpbGVz
IGNoYW5nZWQsIDE4NDcgaW5zZXJ0aW9ucygrKSwgMTI2OCBkZWxldGlvbnMoLSkKCmRpZmYgLS1n
aXQgYS9zcmMveGVudmJkL2Zyb250ZW5kLmMgYi9zcmMveGVudmJkL2Zyb250ZW5kLmMKaW5kZXgg
OTAwYWQyYi4uZmQyYzI0NyAxMDA2NDQKLS0tIGEvc3JjL3hlbnZiZC9mcm9udGVuZC5jCisrKyBi
L3NyYy94ZW52YmQvZnJvbnRlbmQuYwpAQCAtMTI3OCwxNSArMTI3OCwxNSBAQCBGcm9udGVuZENv
bm5lY3QoCiAgICAgICAgIGlmICghTlRfU1VDQ0VTUyhTdGF0dXMpKQogICAgICAgICAgICAgZ290
byBhYm9ydDsKIAotICAgICAgICAvL3N0YXR1cyA9IFhFTkJVU19TVE9SRShQcmludGYsCi0gICAg
ICAgIC8vICAgICAgICAgICAgICAgICAgICAgICZGcm9udGVuZC0+U3RvcmVJbnRlcmZhY2UsCi0g
ICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgIFRyYW5zYWN0aW9uLAotICAgICAgICAvLyAg
ICAgICAgICAgICAgICAgICAgICBGcm9udGVuZC0+RnJvbnRlbmRQYXRoLAotICAgICAgICAvLyAg
ICAgICAgICAgICAgICAgICAgICAibXVsdGktcXVldWUtbnVtLXF1ZXVlcyIsCi0gICAgICAgIC8v
ICAgICAgICAgICAgICAgICAgICAgICIldSIsCi0gICAgICAgIC8vICAgICAgICAgICAgICAgICAg
ICAgIF9fRnJvbnRlbmRHZXROdW1RdWV1ZXMoRnJvbnRlbmQpKTsKLSAgICAgICAgLy9pZiAoIU5U
X1NVQ0NFU1Moc3RhdHVzKSkKLSAgICAgICAgLy8gICAgZ290byBhYm9ydDsKKyAgICAgICAgU3Rh
dHVzID0gWEVOQlVTX1NUT1JFKFByaW50ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICZGcm9udGVuZC0+U3RvcmVJbnRlcmZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBUcmFuc2FjdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyb250ZW5kLT5G
cm9udGVuZFBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibXVsdGktcXVldWUt
bnVtLXF1ZXVlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXUiLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19Gcm9udGVuZEdldE51bVF1ZXVlcyhGcm9udGVuZCkp
OworICAgICAgICBpZiAoIU5UX1NVQ0NFU1MoU3RhdHVzKSkKKyAgICAgICAgICAgIGdvdG8gYWJv
cnQ7CiAKICAgICAgICAgU3RhdHVzID0gWEVOQlVTX1NUT1JFKFRyYW5zYWN0aW9uRW5kLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJkZyb250ZW5kLT5TdG9yZUludGVyZmFjZSwKZGlm
ZiAtLWdpdCBhL3NyYy94ZW52YmQvcmluZy5jIGIvc3JjL3hlbnZiZC9yaW5nLmMKaW5kZXggZTQx
YzFiNy4uY2QyY2MwZSAxMDA2NDQKLS0tIGEvc3JjL3hlbnZiZC9yaW5nLmMKKysrIGIvc3JjL3hl
bnZiZC9yaW5nLmMKQEAgLTQ3LDcgKzQ3LDYgQEAKICNpbmNsdWRlICJzcmJleHQuaCIKICNpbmNs
dWRlICJkcml2ZXIuaCIKICNpbmNsdWRlICJncmFudGVyLmgiCi0jaW5jbHVkZSAicXVldWUuaCIK
IAogI2luY2x1ZGUgInV0aWwuaCIKICNpbmNsdWRlICJkZWJ1Zy5oIgpAQCAtNTYsNDcgKzU1LDcy
IEBACiAjZGVmaW5lIFhFTlZCRF9NQVhfUklOR19QQUdFX09SREVSICAoNCkKICNkZWZpbmUgWEVO
VkJEX01BWF9SSU5HX1BBR0VTICAgICAgICgxIDw8IFhFTlZCRF9NQVhfUklOR19QQUdFX09SREVS
KQogCi1zdHJ1Y3QgX1hFTlZCRF9SSU5HIHsKLSAgICBQWEVOVkJEX0ZST05URU5EICAgICAgICAg
ICAgICAgIEZyb250ZW5kOworI2RlZmluZSB4ZW5fbWIgIEtlTWVtb3J5QmFycmllcgorI2RlZmlu
ZSB4ZW5fd21iIEtlTWVtb3J5QmFycmllcgorCit0eXBlZGVmIHN0cnVjdCBfWEVOVkJEX1NSQl9T
VEFURSB7CisgICAgTElTVF9FTlRSWSAgICAgICAgICAgICAgICAgICAgICBMaXN0OworICAgIFVM
T05HICAgICAgICAgICAgICAgICAgICAgICAgICAgQ291bnQ7Cit9IFhFTlZCRF9TUkJfU1RBVEUs
ICpQWEVOVkJEX1NSQl9TVEFURTsKKwordHlwZWRlZiBzdHJ1Y3QgX1hFTlZCRF9CTEtJRl9SSU5H
IHsKKyAgICBQWEVOVkJEX1JJTkcgICAgICAgICAgICAgICAgICAgIFJpbmc7CisgICAgVUxPTkcg
ICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleDsKKyAgICBQQ0hBUiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFBhdGg7CisgICAgUFhFTkJVU19DQUNIRSAgICAgICAgICAgICAgICAgICBS
ZXF1ZXN0Q2FjaGU7CisgICAgUFhFTkJVU19DQUNIRSAgICAgICAgICAgICAgICAgICBTZWdtZW50
Q2FjaGU7CisgICAgUFhFTkJVU19DQUNIRSAgICAgICAgICAgICAgICAgICBJbmRpcmVjdENhY2hl
OworICAgIFBNREwgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWRsOworICAgIGJsa2lmX3Ny
aW5nX3QgICAgICAgICAgICAgICAgICAgKlNoYXJlZDsKKyAgICBibGtpZl9mcm9udF9yaW5nX3Qg
ICAgICAgICAgICAgIEZyb250OworICAgIFBYRU5CVVNfR05UVEFCX0VOVFJZICAgICAgICAgICAg
R3JhbnRzW1hFTlZCRF9NQVhfUklOR19QQUdFU107CisgICAgUFhFTkJVU19FVlRDSE5fQ0hBTk5F
TCAgICAgICAgICBDaGFubmVsOworICAgIEtEUEMgICAgICAgICAgICAgICAgICAgICAgICAgICAg
RHBjOworICAgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgRHBjczsKKyAgICBVTE9O
RyAgICAgICAgICAgICAgICAgICAgICAgICAgIEV2ZW50czsKICAgICBCT09MRUFOICAgICAgICAg
ICAgICAgICAgICAgICAgIENvbm5lY3RlZDsKICAgICBCT09MRUFOICAgICAgICAgICAgICAgICAg
ICAgICAgIEVuYWJsZWQ7CisgICAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICBTdG9w
cGVkOworICAgIFBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9jazsKKyAgICBQS1RI
UkVBRCAgICAgICAgICAgICAgICAgICAgICAgIExvY2tUaHJlYWQ7CisgICAgWEVOVkJEX1NSQl9T
VEFURSAgICAgICAgICAgICAgICBTdGF0ZTsKKyAgICBMSVNUX0VOVFJZICAgICAgICAgICAgICAg
ICAgICAgIFNyYlF1ZXVlOworICAgIExJU1RfRU5UUlkgICAgICAgICAgICAgICAgICAgICAgU3Vi
bWl0dGVkTGlzdDsKKyAgICBMSVNUX0VOVFJZICAgICAgICAgICAgICAgICAgICAgIFNodXRkb3du
UXVldWU7CisgICAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICBTcmJzUXVldWVkOwor
ICAgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgU3Jic0NvbXBsZXRlZDsKKyAgICBV
TE9ORyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNyYnNGYWlsZWQ7CisgICAgVUxPTkcgICAg
ICAgICAgICAgICAgICAgICAgICAgICBSZXF1ZXN0c1Bvc3RlZDsKKyAgICBVTE9ORyAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFJlcXVlc3RzUHVzaGVkOworICAgIFVMT05HICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUmVzcG9uc2VzUHJvY2Vzc2VkOworICAgIFBYRU5CVVNfREVCVUdfQ0FM
TEJBQ0sgICAgICAgICAgRGVidWdDYWxsYmFjazsKK30gWEVOVkJEX0JMS0lGX1JJTkcsICpQWEVO
VkJEX0JMS0lGX1JJTkc7CisKK3R5cGVkZWYgZW51bSBfWEVOVkJEX1NUQVQgeworICAgIFhFTlZC
RF9TVEFUX0JMS0lGX09QX1JFQURfRElSRUNUID0gMCwKKyAgICBYRU5WQkRfU1RBVF9CTEtJRl9P
UF9SRUFEX0lORElSRUNULAorICAgIFhFTlZCRF9TVEFUX0JMS0lGX09QX1dSSVRFX0RJUkVDVCwK
KyAgICBYRU5WQkRfU1RBVF9CTEtJRl9PUF9XUklURV9JTkRJUkVDVCwKKyAgICBYRU5WQkRfU1RB
VF9CTEtJRl9PUF9XUklURV9CQVJSSUVSLAorICAgIFhFTlZCRF9TVEFUX0JMS0lGX09QX0ZMVVNI
X0RJU0tDQUNIRSwKKyAgICBYRU5WQkRfU1RBVF9CTEtJRl9PUF9ESVNDQVJELAorICAgIFhFTlZC
RF9TVEFUX0JMS0lGX09QX1VOS05PV04sCisgICAgWEVOVkJEX1NUQVRfU0VHTUVOVFNfR1JBTlRF
RCwKKyAgICBYRU5WQkRfU1RBVF9TRUdNRU5UU19CT1VOQ0VELAorCisgICAgWEVOVkJEX1NUQVRf
X01BWAorfSBYRU5WQkRfU1RBVCwgKlBYRU5WQkRfU1RBVDsKIAorc3RydWN0IF9YRU5WQkRfUklO
RyB7CisgICAgUFhFTlZCRF9GUk9OVEVORCAgICAgICAgICAgICAgICBGcm9udGVuZDsKKyAgICBY
RU5CVVNfREVCVUdfSU5URVJGQUNFICAgICAgICAgIERlYnVnSW50ZXJmYWNlOwogICAgIFhFTkJV
U19DQUNIRV9JTlRFUkZBQ0UgICAgICAgICAgQ2FjaGVJbnRlcmZhY2U7CiAgICAgWEVOQlVTX1NU
T1JFX0lOVEVSRkFDRSAgICAgICAgICBTdG9yZUludGVyZmFjZTsKICAgICBYRU5CVVNfRVZUQ0hO
X0lOVEVSRkFDRSAgICAgICAgIEV2dGNobkludGVyZmFjZTsKLSAgICBYRU5CVVNfREVCVUdfSU5U
RVJGQUNFICAgICAgICAgIERlYnVnSW50ZXJmYWNlOwotCiAgICAgUFhFTkJVU19ERUJVR19DQUxM
QkFDSyAgICAgICAgICBEZWJ1Z0NhbGxiYWNrOwotCi0gICAgS1NQSU5fTE9DSyAgICAgICAgICAg
ICAgICAgICAgICBMb2NrOwotICAgIFBNREwgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWRs
OwotICAgIGJsa2lmX3NyaW5nX3QqICAgICAgICAgICAgICAgICAgU2hhcmVkOwotICAgIGJsa2lm
X2Zyb250X3JpbmdfdCAgICAgICAgICAgICAgRnJvbnQ7CiAgICAgVUxPTkcgICAgICAgICAgICAg
ICAgICAgICAgICAgICBPcmRlcjsKLSAgICBQVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdyYW50c1tYRU5WQkRfTUFYX1JJTkdfUEFHRVNdOwotICAgIFBYRU5CVVNfRVZUQ0hOX0NIQU5O
RUwgICAgICAgICAgQ2hhbm5lbDsKLSAgICBLRFBDICAgICAgICAgICAgICAgICAgICAgICAgICAg
IERwYzsKLQotICAgIFBYRU5CVVNfQ0FDSEUgICAgICAgICAgICAgICAgICAgUmVxdWVzdENhY2hl
OwotICAgIFBYRU5CVVNfQ0FDSEUgICAgICAgICAgICAgICAgICAgU2VnbWVudENhY2hlOwotICAg
IFBYRU5CVVNfQ0FDSEUgICAgICAgICAgICAgICAgICAgSW5kaXJlY3RDYWNoZTsKLSAgICBYRU5W
QkRfUVVFVUUgICAgICAgICAgICAgICAgICAgIFByZXBhcmVkUmVxczsKLSAgICBYRU5WQkRfUVVF
VUUgICAgICAgICAgICAgICAgICAgIFN1Ym1pdHRlZFJlcXM7Ci0gICAgWEVOVkJEX1FVRVVFICAg
ICAgICAgICAgICAgICAgICBTaHV0ZG93blNyYnM7Ci0KLSAgICBVTE9ORyAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFN1Ym1pdHRlZDsKLSAgICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFJlY2VpdmVkOwotICAgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgRXZlbnRz
OwotICAgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgRHBjczsKLSAgICBVTE9ORyAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEJsa09wUmVhZDsKLSAgICBVTE9ORyAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEJsa09wV3JpdGU7Ci0gICAgVUxPTkcgICAgICAgICAgICAgICAgICAg
ICAgICAgICBCbGtPcEluZGlyZWN0UmVhZDsKLSAgICBVTE9ORyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEJsa09wSW5kaXJlY3RXcml0ZTsKLSAgICBVTE9ORyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEJsa09wQmFycmllcjsKLSAgICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgICAg
IEJsa09wRGlzY2FyZDsKLSAgICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgICAgIEJsa09w
Rmx1c2g7Ci0gICAgVUxPTkc2NCAgICAgICAgICAgICAgICAgICAgICAgICBTZWdzR3JhbnRlZDsK
LSAgICBVTE9ORzY0ICAgICAgICAgICAgICAgICAgICAgICAgIFNlZ3NCb3VuY2VkOworICAgIFBY
RU5WQkRfQkxLSUZfUklORyAgICAgICAgICAgICAgKlJpbmc7CisgICAgTE9ORyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBTdGF0c1tYRU5WQkRfU1RBVF9fTUFYXTsKIH07CiAKICNkZWZpbmUg
TUFYX05BTUVfTEVOICAgICAgICAgICAgICAgIDY0CkBAIC0xMjMsMTM4ICsxNDcsMTE5IEBAIF9f
UmluZ0ZyZWUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFJJTkdfUE9PTF9UQUcpOwogfQog
Ci1zdGF0aWMgRk9SQ0VJTkxJTkUgVk9JRAoteGVuX21iKCkKK3N0YXRpYyBGT1JDRUlOTElORSBQ
Q0hBUgorX19CbGtpZk9wZXJhdGlvbk5hbWUoCisgICAgSU4gIFVDSEFSICAgT3BlcmF0aW9uCisg
ICAgKQogewotICAgIEtlTWVtb3J5QmFycmllcigpOwotICAgIF9SZWFkV3JpdGVCYXJyaWVyKCk7
CisgICAgc3dpdGNoIChPcGVyYXRpb24pIHsKKyAgICBjYXNlIEJMS0lGX09QX1JFQUQ6ICAgICAg
ICAgICAgIHJldHVybiAiUkVBRCI7CisgICAgY2FzZSBCTEtJRl9PUF9XUklURTogICAgICAgICAg
ICByZXR1cm4gIldSSVRFIjsKKyAgICBjYXNlIEJMS0lGX09QX1dSSVRFX0JBUlJJRVI6ICAgIHJl
dHVybiAiV1JJVEVfQkFSUklFUiI7CisgICAgY2FzZSBCTEtJRl9PUF9GTFVTSF9ESVNLQ0FDSEU6
ICByZXR1cm4gIkZMVVNIX0RJU0tDQUNIRSI7CisgICAgY2FzZSBCTEtJRl9PUF9SRVNFUlZFRF8x
OiAgICAgICByZXR1cm4gIlJFU0VSVkVEXzEiOworICAgIGNhc2UgQkxLSUZfT1BfRElTQ0FSRDog
ICAgICAgICAgcmV0dXJuICJESVNDQVJEIjsKKyAgICBjYXNlIEJMS0lGX09QX0lORElSRUNUOiAg
ICAgICAgIHJldHVybiAiSU5ESVJFQ1QiOworICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuICI8dW5rbm93bj4iOworICAgIH0KIH0KIAotc3RhdGljIEZPUkNFSU5MSU5F
IFZPSUQKLXhlbl93bWIoKQorc3RhdGljIEZPUkNFSU5MSU5FIFBDSEFSCitfX1N0YXROYW1lKAor
ICAgIElOICBYRU5WQkRfU1RBVCBPcGVyYXRpb24KKyAgICApCiB7Ci0gICAgS2VNZW1vcnlCYXJy
aWVyKCk7Ci0gICAgX1dyaXRlQmFycmllcigpOworICAgIHN3aXRjaCAoT3BlcmF0aW9uKSB7Cisg
ICAgY2FzZSBYRU5WQkRfU1RBVF9CTEtJRl9PUF9SRUFEX0RJUkVDVDogICAgICByZXR1cm4gIkJM
S0lGX09QX1JFQUQgKGRpcmVjdCkiOworICAgIGNhc2UgWEVOVkJEX1NUQVRfQkxLSUZfT1BfUkVB
RF9JTkRJUkVDVDogICAgcmV0dXJuICJCTEtJRl9PUF9SRUFEIChpbmRpcmVjdCkiOworICAgIGNh
c2UgWEVOVkJEX1NUQVRfQkxLSUZfT1BfV1JJVEVfRElSRUNUOiAgICAgcmV0dXJuICJCTEtJRl9P
UF9XUklURSAoZGlyZWN0KSI7CisgICAgY2FzZSBYRU5WQkRfU1RBVF9CTEtJRl9PUF9XUklURV9J
TkRJUkVDVDogICByZXR1cm4gIkJMS0lGX09QX1dSSVRFIChpbmRpcmVjdCkiOworICAgIGNhc2Ug
WEVOVkJEX1NUQVRfQkxLSUZfT1BfV1JJVEVfQkFSUklFUjogICAgcmV0dXJuICJCTEtJRl9PUF9X
UklURV9CQVJSSUVSIjsKKyAgICBjYXNlIFhFTlZCRF9TVEFUX0JMS0lGX09QX0ZMVVNIX0RJU0tD
QUNIRTogIHJldHVybiAiQkxLSUZfT1BfRkxVU0hfRElTS0NBQ0hFIjsKKyAgICBjYXNlIFhFTlZC
RF9TVEFUX0JMS0lGX09QX0RJU0NBUkQ6ICAgICAgICAgIHJldHVybiAiQkxLSUZfT1BfRElTQ0FS
RCI7CisgICAgY2FzZSBYRU5WQkRfU1RBVF9TRUdNRU5UU19HUkFOVEVEOiAgICAgICAgICByZXR1
cm4gIlNlZ21lbnRzR3JhbnRlZCI7CisgICAgY2FzZSBYRU5WQkRfU1RBVF9TRUdNRU5UU19CT1VO
Q0VEOiAgICAgICAgICByZXR1cm4gIlNlZ21lbnRzQm91bmNlZCI7CisgICAgZGVmYXVsdDogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIlVOS05PV04iOworICAgIH0K
IH0KIAotc3RhdGljIEZPUkNFSU5MSU5FIFZPSUQKLV9fUmluZ0luc2VydCgKLSAgICBJTiAgUFhF
TlZCRF9SSU5HICAgICAgICBSaW5nLAotICAgIElOICBQWEVOVkJEX1JFUVVFU1QgICAgIFJlcXVl
c3QsCi0gICAgSU4gIGJsa2lmX3JlcXVlc3RfdCogICAgcmVxCitzdGF0aWMgRk9SQ0VJTkxJTkUg
VUxPTkcKK19fU2VjdG9yc1BlclBhZ2UoCisgICAgSU4gIFVMT05HICAgU2VjdG9yU2l6ZQogICAg
ICkKIHsKLSAgICBQWEVOVkJEX0dSQU5URVIgICAgICAgICBHcmFudGVyID0gRnJvbnRlbmRHZXRH
cmFudGVyKFJpbmctPkZyb250ZW5kKTsKLQotICAgIHN3aXRjaCAoUmVxdWVzdC0+T3BlcmF0aW9u
KSB7Ci0gICAgY2FzZSBCTEtJRl9PUF9SRUFEOgotICAgIGNhc2UgQkxLSUZfT1BfV1JJVEU6Ci0g
ICAgICAgIGlmIChSZXF1ZXN0LT5OclNlZ21lbnRzID4gQkxLSUZfTUFYX1NFR01FTlRTX1BFUl9S
RVFVRVNUKSB7Ci0gICAgICAgICAgICAvLyBJbmRpcmVjdAotICAgICAgICAgICAgVUxPTkcgICAg
ICAgICAgICAgICAgICAgICAgIFBhZ2VJZHg7Ci0gICAgICAgICAgICBVTE9ORyAgICAgICAgICAg
ICAgICAgICAgICAgU2VnSWR4OwotICAgICAgICAgICAgUExJU1RfRU5UUlkgICAgICAgICAgICAg
ICAgIFBhZ2VFbnRyeTsKLSAgICAgICAgICAgIFBMSVNUX0VOVFJZICAgICAgICAgICAgICAgICBT
ZWdFbnRyeTsKLSAgICAgICAgICAgIGJsa2lmX3JlcXVlc3RfaW5kaXJlY3RfdCogICByZXFfaW5k
aXJlY3Q7Ci0KLSAgICAgICAgICAgIHJlcV9pbmRpcmVjdCA9IChibGtpZl9yZXF1ZXN0X2luZGly
ZWN0X3QqKXJlcTsKLSAgICAgICAgICAgIHJlcV9pbmRpcmVjdC0+b3BlcmF0aW9uICAgICAgICAg
PSBCTEtJRl9PUF9JTkRJUkVDVDsKLSAgICAgICAgICAgIHJlcV9pbmRpcmVjdC0+aW5kaXJlY3Rf
b3AgICAgICAgPSBSZXF1ZXN0LT5PcGVyYXRpb247Ci0gICAgICAgICAgICByZXFfaW5kaXJlY3Qt
Pm5yX3NlZ21lbnRzICAgICAgID0gUmVxdWVzdC0+TnJTZWdtZW50czsKLSAgICAgICAgICAgIHJl
cV9pbmRpcmVjdC0+aWQgICAgICAgICAgICAgICAgPSAoVUxPTkc2NCkoVUxPTkdfUFRSKVJlcXVl
c3Q7Ci0gICAgICAgICAgICByZXFfaW5kaXJlY3QtPnNlY3Rvcl9udW1iZXIgICAgID0gUmVxdWVz
dC0+Rmlyc3RTZWN0b3I7Ci0gICAgICAgICAgICByZXFfaW5kaXJlY3QtPmhhbmRsZSAgICAgICAg
ICAgID0gKFVTSE9SVClGcm9udGVuZEdldERldmljZUlkKFJpbmctPkZyb250ZW5kKTsKLQotICAg
ICAgICAgICAgZm9yIChQYWdlSWR4ID0gMCwKLSAgICAgICAgICAgICAgICAgUGFnZUVudHJ5ID0g
UmVxdWVzdC0+SW5kaXJlY3RzLkZsaW5rLAotICAgICAgICAgICAgICAgICBTZWdFbnRyeSA9IFJl
cXVlc3QtPlNlZ21lbnRzLkZsaW5rOwotICAgICAgICAgICAgICAgICAgICBQYWdlSWR4IDwgQkxL
SUZfTUFYX0lORElSRUNUX1BBR0VTX1BFUl9SRVFVRVNUICYmCi0gICAgICAgICAgICAgICAgICAg
IFBhZ2VFbnRyeSAhPSAmUmVxdWVzdC0+SW5kaXJlY3RzICYmCi0gICAgICAgICAgICAgICAgICAg
IFNlZ0VudHJ5ICE9ICZSZXF1ZXN0LT5TZWdtZW50czsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICsrUGFnZUlkeCwgUGFnZUVudHJ5ID0gUGFnZUVudHJ5LT5GbGluaykgewotICAgICAgICAgICAg
ICAgIFBYRU5WQkRfSU5ESVJFQ1QgUGFnZSA9IENPTlRBSU5JTkdfUkVDT1JEKFBhZ2VFbnRyeSwg
WEVOVkJEX0lORElSRUNULCBMaXN0RW50cnkpOwotCi0gICAgICAgICAgICAgICAgcmVxX2luZGly
ZWN0LT5pbmRpcmVjdF9ncmVmc1tQYWdlSWR4XSA9IEdyYW50ZXJSZWZlcmVuY2UoR3JhbnRlciwg
UGFnZS0+R3JhbnQpOwotCi0gICAgICAgICAgICAgICAgZm9yIChTZWdJZHggPSAwOwotICAgICAg
ICAgICAgICAgICAgICAgICAgU2VnSWR4IDwgWEVOVkJEX01BWF9TRUdNRU5UU19QRVJfUEFHRSAm
JgotICAgICAgICAgICAgICAgICAgICAgICAgU2VnRW50cnkgIT0gJlJlcXVlc3QtPlNlZ21lbnRz
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrU2VnSWR4LCBTZWdFbnRyeSA9IFNlZ0Vu
dHJ5LT5GbGluaykgewotICAgICAgICAgICAgICAgICAgICBQWEVOVkJEX1NFR01FTlQgU2VnbWVu
dCA9IENPTlRBSU5JTkdfUkVDT1JEKFNlZ0VudHJ5LCBYRU5WQkRfU0VHTUVOVCwgTGlzdEVudHJ5
KTsKLQotICAgICAgICAgICAgICAgICAgICBQYWdlLT5QYWdlW1NlZ0lkeF0uR3JhbnRSZWYgPSBH
cmFudGVyUmVmZXJlbmNlKEdyYW50ZXIsIFNlZ21lbnQtPkdyYW50KTsKLSAgICAgICAgICAgICAg
ICAgICAgUGFnZS0+UGFnZVtTZWdJZHhdLkZpcnN0ICAgID0gU2VnbWVudC0+Rmlyc3RTZWN0b3I7
Ci0gICAgICAgICAgICAgICAgICAgIFBhZ2UtPlBhZ2VbU2VnSWR4XS5MYXN0ICAgICA9IFNlZ21l
bnQtPkxhc3RTZWN0b3I7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgLy8gRGlyZWN0Ci0gICAgICAgICAgICBVTE9ORyAgICAg
ICAgICAgSW5kZXg7Ci0gICAgICAgICAgICBQTElTVF9FTlRSWSAgICAgRW50cnk7Ci0KLSAgICAg
ICAgICAgIHJlcS0+b3BlcmF0aW9uICAgICAgICAgICAgICAgICAgPSBSZXF1ZXN0LT5PcGVyYXRp
b247Ci0gICAgICAgICAgICByZXEtPm5yX3NlZ21lbnRzICAgICAgICAgICAgICAgID0gKFVDSEFS
KVJlcXVlc3QtPk5yU2VnbWVudHM7Ci0gICAgICAgICAgICByZXEtPmhhbmRsZSAgICAgICAgICAg
ICAgICAgICAgID0gKFVTSE9SVClGcm9udGVuZEdldERldmljZUlkKFJpbmctPkZyb250ZW5kKTsK
LSAgICAgICAgICAgIHJlcS0+aWQgICAgICAgICAgICAgICAgICAgICAgICAgPSAoVUxPTkc2NCko
VUxPTkdfUFRSKVJlcXVlc3Q7Ci0gICAgICAgICAgICByZXEtPnNlY3Rvcl9udW1iZXIgICAgICAg
ICAgICAgID0gUmVxdWVzdC0+Rmlyc3RTZWN0b3I7CisgICAgQVNTRVJUM1UoU2VjdG9yU2l6ZSwg
IT0gLCAwKTsKKyAgICByZXR1cm4gUEFHRV9TSVpFIC8gU2VjdG9yU2l6ZTsKK30KIAotICAgICAg
ICAgICAgZm9yIChJbmRleCA9IDAsIEVudHJ5ID0gUmVxdWVzdC0+U2VnbWVudHMuRmxpbms7Ci0g
ICAgICAgICAgICAgICAgICAgIEluZGV4IDwgQkxLSUZfTUFYX1NFR01FTlRTX1BFUl9SRVFVRVNU
ICYmCi0gICAgICAgICAgICAgICAgICAgIEVudHJ5ICE9ICZSZXF1ZXN0LT5TZWdtZW50czsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICsrSW5kZXgsIEVudHJ5ID0gRW50cnktPkZsaW5rKSB7Ci0g
ICAgICAgICAgICAgICAgUFhFTlZCRF9TRUdNRU5UIFNlZ21lbnQgPSBDT05UQUlOSU5HX1JFQ09S
RChFbnRyeSwgWEVOVkJEX1NFR01FTlQsIExpc3RFbnRyeSk7Ci0gICAgICAgICAgICAgICAgcmVx
LT5zZWdbSW5kZXhdLmdyZWYgICAgICAgID0gR3JhbnRlclJlZmVyZW5jZShHcmFudGVyLCBTZWdt
ZW50LT5HcmFudCk7Ci0gICAgICAgICAgICAgICAgcmVxLT5zZWdbSW5kZXhdLmZpcnN0X3NlY3Qg
ID0gU2VnbWVudC0+Rmlyc3RTZWN0b3I7Ci0gICAgICAgICAgICAgICAgcmVxLT5zZWdbSW5kZXhd
Lmxhc3Rfc2VjdCAgID0gU2VnbWVudC0+TGFzdFNlY3RvcjsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQorc3RhdGljIEZPUkNFSU5MSU5FIFZPSUQKK19fT3BlcmF0aW9uKAorICAgIElOICBVQ0hB
UiAgICAgICBDZGJPcCwKKyAgICBPVVQgUFVDSEFSICAgICAgUmluZ09wLAorICAgIE9VVCBQQk9P
TEVBTiAgICBSZWFkT25seQorICAgICkKK3sKKyAgICBzd2l0Y2ggKENkYk9wKSB7CisgICAgY2Fz
ZSBTQ1NJT1BfUkVBRDoKKyAgICAgICAgKlJpbmdPcCA9IEJMS0lGX09QX1JFQUQ7CisgICAgICAg
ICpSZWFkT25seSA9IEZBTFNFOwogICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQkxLSUZfT1Bf
V1JJVEVfQkFSUklFUjoKLSAgICBjYXNlIEJMS0lGX09QX0ZMVVNIX0RJU0tDQUNIRToKLSAgICAg
ICAgcmVxLT5vcGVyYXRpb24gICAgICAgICAgICAgICAgICA9IFJlcXVlc3QtPk9wZXJhdGlvbjsK
LSAgICAgICAgcmVxLT5ucl9zZWdtZW50cyAgICAgICAgICAgICAgICA9IDA7Ci0gICAgICAgIHJl
cS0+aGFuZGxlICAgICAgICAgICAgICAgICAgICAgPSAoVVNIT1JUKUZyb250ZW5kR2V0RGV2aWNl
SWQoUmluZy0+RnJvbnRlbmQpOwotICAgICAgICByZXEtPmlkICAgICAgICAgICAgICAgICAgICAg
ICAgID0gKFVMT05HNjQpKFVMT05HX1BUUilSZXF1ZXN0OwotICAgICAgICByZXEtPnNlY3Rvcl9u
dW1iZXIgICAgICAgICAgICAgID0gUmVxdWVzdC0+Rmlyc3RTZWN0b3I7CisgICAgY2FzZSBTQ1NJ
T1BfV1JJVEU6CisgICAgICAgICpSaW5nT3AgPSBCTEtJRl9PUF9XUklURTsKKyAgICAgICAgKlJl
YWRPbmx5ID0gVFJVRTsKICAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEJMS0lGX09QX0RJU0NB
UkQ6IHsKLSAgICAgICAgYmxraWZfcmVxdWVzdF9kaXNjYXJkX3QqICAgICAgICByZXFfZGlzY2Fy
ZDsKLSAgICAgICAgcmVxX2Rpc2NhcmQgPSAoYmxraWZfcmVxdWVzdF9kaXNjYXJkX3QqKXJlcTsK
LSAgICAgICAgcmVxX2Rpc2NhcmQtPm9wZXJhdGlvbiAgICAgICAgICA9IEJMS0lGX09QX0RJU0NB
UkQ7Ci0gICAgICAgIHJlcV9kaXNjYXJkLT5mbGFnICAgICAgICAgICAgICAgPSBSZXF1ZXN0LT5G
bGFnczsKLSAgICAgICAgcmVxX2Rpc2NhcmQtPmhhbmRsZSAgICAgICAgICAgICA9IChVU0hPUlQp
RnJvbnRlbmRHZXREZXZpY2VJZChSaW5nLT5Gcm9udGVuZCk7Ci0gICAgICAgIHJlcV9kaXNjYXJk
LT5pZCAgICAgICAgICAgICAgICAgPSAoVUxPTkc2NCkoVUxPTkdfUFRSKVJlcXVlc3Q7Ci0gICAg
ICAgIHJlcV9kaXNjYXJkLT5zZWN0b3JfbnVtYmVyICAgICAgPSBSZXF1ZXN0LT5GaXJzdFNlY3Rv
cjsKLSAgICAgICAgcmVxX2Rpc2NhcmQtPm5yX3NlY3RvcnMgICAgICAgICA9IFJlcXVlc3QtPk5y
U2VjdG9yczsKLSAgICAgICAgfSBicmVhazsKLQogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VS
VChGQUxTRSk7Ci0gICAgICAgIGJyZWFrOwogICAgIH0KLSAgICArK1JpbmctPlN1Ym1pdHRlZDsK
K30KKworc3RhdGljIEZPUkNFSU5MSU5FIFVMT05HCitfX1VzZUluZGlyZWN0KAorICAgIElOICBV
TE9ORyAgICAgICAgICAgU2VjdG9yc1BlclBhZ2UsCisgICAgSU4gIFVMT05HICAgICAgICAgICBN
YXhJbmRpcmVjdFNlZ3MsCisgICAgSU4gIFVMT05HICAgICAgICAgICBTZWN0b3JzTGVmdAorICAg
ICkKK3sKKyAgICBpZiAoTWF4SW5kaXJlY3RTZWdzIDw9IEJMS0lGX01BWF9TRUdNRU5UU19QRVJf
UkVRVUVTVCkKKyAgICAgICAgcmV0dXJuIEJMS0lGX01BWF9TRUdNRU5UU19QRVJfUkVRVUVTVDsg
Ly8gbm90IHN1cHBvcnRlZAorCisgICAgaWYgKFNlY3RvcnNMZWZ0IDwgQkxLSUZfTUFYX1NFR01F
TlRTX1BFUl9SRVFVRVNUICogU2VjdG9yc1BlclBhZ2UpCisgICAgICAgIHJldHVybiBCTEtJRl9N
QVhfU0VHTUVOVFNfUEVSX1JFUVVFU1Q7IC8vIGZpcnN0IGludG8gYSBzaW5nbGUgQkxLSUZfT1Bf
e1JFQUQvV1JJVEV9CisKKyAgICByZXR1cm4gTWF4SW5kaXJlY3RTZWdzOworfQorCitzdGF0aWMg
Rk9SQ0VJTkxJTkUgTU1fUEFHRV9QUklPUklUWQorX19Qcmlvcml0eSgKKyAgICBJTiAgUFhFTlZC
RF9DQVBTICAgIENhcHMKKyAgICApCit7CisgICAgcmV0dXJuIChDYXBzLT5QYWdpbmcgfHwKKyAg
ICAgICAgICAgIENhcHMtPkhpYmVybmF0aW9uIHx8CisgICAgICAgICAgICBDYXBzLT5EdW1wRmls
ZSkgPyBIaWdoUGFnZVByaW9yaXR5IDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5v
cm1hbFBhZ2VQcmlvcml0eTsKIH0KIAogc3RhdGljIFBYRU5WQkRfSU5ESVJFQ1QKLVJpbmdHZXRJ
bmRpcmVjdCgKLSAgICBJTiAgUFhFTlZCRF9SSU5HICAgIFJpbmcKK0Jsa2lmUmluZ0dldEluZGly
ZWN0KAorICAgIElOICBQWEVOVkJEX0JMS0lGX1JJTkcgIEJsa2lmUmluZwogICAgICkKIHsKLSAg
ICBQWEVOVkJEX0lORElSRUNUICAgIEluZGlyZWN0OwotICAgIE5UU1RBVFVTICAgICAgICAgICAg
c3RhdHVzOwotICAgIFBYRU5WQkRfR1JBTlRFUiAgICAgR3JhbnRlciA9IEZyb250ZW5kR2V0R3Jh
bnRlcihSaW5nLT5Gcm9udGVuZCk7CisgICAgUFhFTlZCRF9SSU5HICAgICAgICAgICAgUmluZyA9
IEJsa2lmUmluZy0+UmluZzsKKyAgICBQWEVOVkJEX0ZST05URU5EICAgICAgICBGcm9udGVuZCA9
IFJpbmctPkZyb250ZW5kOworICAgIFBYRU5WQkRfR1JBTlRFUiAgICAgICAgIEdyYW50ZXIgPSBG
cm9udGVuZEdldEdyYW50ZXIoRnJvbnRlbmQpOworICAgIFBYRU5WQkRfSU5ESVJFQ1QgICAgICAg
IEluZGlyZWN0OworICAgIE5UU1RBVFVTICAgICAgICAgICAgICAgIHN0YXR1czsKIAogICAgIElu
ZGlyZWN0ID0gWEVOQlVTX0NBQ0hFKEdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm
UmluZy0+Q2FjaGVJbnRlcmZhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmluZy0+
SW5kaXJlY3RDYWNoZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQmxraWZSaW5nLT5JbmRpcmVjdENhY2hlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFRSVUUpOwogICAgIGlmIChJbmRpcmVjdCA9PSBOVUxMKQog
ICAgICAgICBnb3RvIGZhaWwxOwogCi0gICAgQVNTRVJUM1AoSW5kaXJlY3QtPk1kbCwgIT0sIE5V
TEwpOwotICAgIEFTU0VSVDNQKEluZGlyZWN0LT5QYWdlLCAhPSwgTlVMTCk7CisgICAgQVNTRVJU
M1AoSW5kaXJlY3QtPk1kbCwgIT0gLCBOVUxMKTsKKyAgICBBU1NFUlQzUChJbmRpcmVjdC0+UGFn
ZSwgIT0gLCBOVUxMKTsKICAgICBzdGF0dXMgPSBHcmFudGVyR2V0KEdyYW50ZXIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICBNbUdldE1kbFBmbkFycmF5KEluZGlyZWN0LT5NZGwpWzBdLAogICAg
ICAgICAgICAgICAgICAgICAgICAgVFJVRSwKQEAgLTI2NywyMCArMjcyLDIyIEBAIFJpbmdHZXRJ
bmRpcmVjdCgKIGZhaWwyOgogICAgIFhFTkJVU19DQUNIRShQdXQsCiAgICAgICAgICAgICAgICAg
ICZSaW5nLT5DYWNoZUludGVyZmFjZSwKLSAgICAgICAgICAgICAgICAgUmluZy0+SW5kaXJlY3RD
YWNoZSwKKyAgICAgICAgICAgICAgICAgQmxraWZSaW5nLT5JbmRpcmVjdENhY2hlLAogICAgICAg
ICAgICAgICAgICBJbmRpcmVjdCwKLSAgICAgICAgICAgICAgICAgRkFMU0UpOworICAgICAgICAg
ICAgICAgICBUUlVFKTsKIGZhaWwxOgogICAgIHJldHVybiBOVUxMOwogfQogCiBzdGF0aWMgVk9J
RAotUmluZ1B1dEluZGlyZWN0KAotICAgIElOICBQWEVOVkJEX1JJTkcgICAgICAgIFJpbmcsCitC
bGtpZlJpbmdQdXRJbmRpcmVjdCgKKyAgICBJTiAgUFhFTlZCRF9CTEtJRl9SSU5HICBCbGtpZlJp
bmcsCiAgICAgSU4gIFBYRU5WQkRfSU5ESVJFQ1QgICAgSW5kaXJlY3QKICAgICApCiB7Ci0gICAg
UFhFTlZCRF9HUkFOVEVSICAgICAgICAgR3JhbnRlciA9IEZyb250ZW5kR2V0R3JhbnRlcihSaW5n
LT5Gcm9udGVuZCk7CisgICAgUFhFTlZCRF9SSU5HICAgICAgICAgICAgUmluZyA9IEJsa2lmUmlu
Zy0+UmluZzsKKyAgICBQWEVOVkJEX0ZST05URU5EICAgICAgICBGcm9udGVuZCA9IFJpbmctPkZy
b250ZW5kOworICAgIFBYRU5WQkRfR1JBTlRFUiAgICAgICAgIEdyYW50ZXIgPSBGcm9udGVuZEdl
dEdyYW50ZXIoRnJvbnRlbmQpOwogCiAgICAgaWYgKEluZGlyZWN0LT5HcmFudCkKICAgICAgICAg
R3JhbnRlclB1dChHcmFudGVyLCBJbmRpcmVjdC0+R3JhbnQpOwpAQCAtMjkwLDMwICsyOTcsMzQg
QEAgUmluZ1B1dEluZGlyZWN0KAogCiAgICAgWEVOQlVTX0NBQ0hFKFB1dCwKICAgICAgICAgICAg
ICAgICAgJlJpbmctPkNhY2hlSW50ZXJmYWNlLAotICAgICAgICAgICAgICAgICBSaW5nLT5JbmRp
cmVjdENhY2hlLAorICAgICAgICAgICAgICAgICBCbGtpZlJpbmctPkluZGlyZWN0Q2FjaGUsCiAg
ICAgICAgICAgICAgICAgIEluZGlyZWN0LAotICAgICAgICAgICAgICAgICBGQUxTRSk7CisgICAg
ICAgICAgICAgICAgIFRSVUUpOwogfQogCiBzdGF0aWMgUFhFTlZCRF9TRUdNRU5UCi1SaW5nR2V0
U2VnbWVudCgKLSAgICBJTiAgUFhFTlZCRF9SSU5HICAgIFJpbmcKK0Jsa2lmUmluZ0dldFNlZ21l
bnQoCisgICAgSU4gIFBYRU5WQkRfQkxLSUZfUklORyAgQmxraWZSaW5nCiAgICAgKQogeworICAg
IFBYRU5WQkRfUklORyAgICAgICAgICAgIFJpbmcgPSBCbGtpZlJpbmctPlJpbmc7CisKICAgICBy
ZXR1cm4gWEVOQlVTX0NBQ0hFKEdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICZSaW5nLT5D
YWNoZUludGVyZmFjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFJpbmctPlNlZ21lbnRDYWNo
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIEJsa2lmUmluZy0+U2VnbWVudENhY2hlLAorICAgICAgICAgICAgICAgICAgICAgICAgVFJV
RSk7CiB9CiAKIHN0YXRpYyBWT0lECi1SaW5nUHV0U2VnbWVudCgKLSAgICBJTiAgUFhFTlZCRF9S
SU5HICAgIFJpbmcsCi0gICAgSU4gIFBYRU5WQkRfU0VHTUVOVCBTZWdtZW50CitCbGtpZlJpbmdQ
dXRTZWdtZW50KAorICAgIElOICBQWEVOVkJEX0JMS0lGX1JJTkcgIEJsa2lmUmluZywKKyAgICBJ
TiAgUFhFTlZCRF9TRUdNRU5UICAgICBTZWdtZW50CiAgICAgKQogewotICAgIFBYRU5WQkRfR1JB
TlRFUiAgICAgR3JhbnRlciA9IEZyb250ZW5kR2V0R3JhbnRlcihSaW5nLT5Gcm9udGVuZCk7Ci0g
ICAgUFhFTlZCRF9CT1VOQ0UgICAgICBCb3VuY2UgPSBTZWdtZW50LT5Cb3VuY2U7CisgICAgUFhF
TlZCRF9SSU5HICAgICAgICAgICAgUmluZyA9IEJsa2lmUmluZy0+UmluZzsKKyAgICBQWEVOVkJE
X0ZST05URU5EICAgICAgICBGcm9udGVuZCA9IFJpbmctPkZyb250ZW5kOworICAgIFBYRU5WQkRf
R1JBTlRFUiAgICAgICAgIEdyYW50ZXIgPSBGcm9udGVuZEdldEdyYW50ZXIoRnJvbnRlbmQpOwor
ICAgIFBYRU5WQkRfQk9VTkNFICAgICAgICAgIEJvdW5jZSA9IFNlZ21lbnQtPkJvdW5jZTsKIAog
ICAgIGlmIChTZWdtZW50LT5HcmFudCkKICAgICAgICAgR3JhbnRlclB1dChHcmFudGVyLCBTZWdt
ZW50LT5HcmFudCk7CkBAIC0zMjksNyArMzQwLDcgQEAgUmluZ1B1dFNlZ21lbnQoCiAgICAgICAg
IEJvdW5jZS0+U291cmNlUGZuWzBdID0gMDsKICAgICAgICAgQm91bmNlLT5Tb3VyY2VQZm5bMV0g
PSAwOwogCi0gICAgICAgIEFkYXB0ZXJQdXRCb3VuY2UoVGFyZ2V0R2V0QWRhcHRlcihGcm9udGVu
ZEdldFRhcmdldChSaW5nLT5Gcm9udGVuZCkpLAorICAgICAgICBBZGFwdGVyUHV0Qm91bmNlKFRh
cmdldEdldEFkYXB0ZXIoRnJvbnRlbmRHZXRUYXJnZXQoRnJvbnRlbmQpKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICBCb3VuY2UpOwogICAgIH0KICAgICBTZWdtZW50LT5Cb3VuY2UgPSBOVUxM
OwpAQCAtMzQwLDI5ICszNTEsMzIgQEAgUmluZ1B1dFNlZ21lbnQoCiAKICAgICBYRU5CVVNfQ0FD
SEUoUHV0LAogICAgICAgICAgICAgICAgICAmUmluZy0+Q2FjaGVJbnRlcmZhY2UsCi0gICAgICAg
ICAgICAgICAgIFJpbmctPlNlZ21lbnRDYWNoZSwKKyAgICAgICAgICAgICAgICAgQmxraWZSaW5n
LT5TZWdtZW50Q2FjaGUsCiAgICAgICAgICAgICAgICAgIFNlZ21lbnQsCi0gICAgICAgICAgICAg
ICAgIEZBTFNFKTsKKyAgICAgICAgICAgICAgICAgVFJVRSk7CiB9CiAKIHN0YXRpYyBQWEVOVkJE
X1JFUVVFU1QKLVJpbmdHZXRSZXF1ZXN0KAotICAgIElOICBQWEVOVkJEX1JJTkcgICAgUmluZwor
QmxraWZSaW5nR2V0UmVxdWVzdCgKKyAgICBJTiAgUFhFTlZCRF9CTEtJRl9SSU5HICBCbGtpZlJp
bmcKICAgICApCiB7CisgICAgUFhFTlZCRF9SSU5HICAgICAgICAgICAgUmluZyA9IEJsa2lmUmlu
Zy0+UmluZzsKKwogICAgIHJldHVybiBYRU5CVVNfQ0FDSEUoR2V0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgJlJpbmctPkNhY2hlSW50ZXJmYWNlLAotICAgICAgICAgICAgICAgICAgICAgICAg
UmluZy0+UmVxdWVzdENhY2hlLAotICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UpOworICAg
ICAgICAgICAgICAgICAgICAgICAgQmxraWZSaW5nLT5SZXF1ZXN0Q2FjaGUsCisgICAgICAgICAg
ICAgICAgICAgICAgICBUUlVFKTsKIH0KIAogc3RhdGljIFZPSUQKLVJpbmdQdXRSZXF1ZXN0KAot
ICAgIElOICBQWEVOVkJEX1JJTkcgICAgUmluZywKLSAgICBJTiAgUFhFTlZCRF9SRVFVRVNUIFJl
cXVlc3QKK0Jsa2lmUmluZ1B1dFJlcXVlc3QoCisgICAgSU4gIFBYRU5WQkRfQkxLSUZfUklORyAg
QmxraWZSaW5nLAorICAgIElOICBQWEVOVkJEX1JFUVVFU1QgICAgIFJlcXVlc3QKICAgICApCiB7
Ci0gICAgUExJU1RfRU5UUlkgICAgICAgICBMaXN0RW50cnk7CisgICAgUFhFTlZCRF9SSU5HICAg
ICAgICAgICAgUmluZyA9IEJsa2lmUmluZy0+UmluZzsKKyAgICBQTElTVF9FTlRSWSAgICAgICAg
ICAgICBMaXN0RW50cnk7CiAKICAgICBmb3IgKDs7KSB7CiAgICAgICAgIFBYRU5WQkRfU0VHTUVO
VCBTZWdtZW50OwpAQCAtMzcxLDcgKzM4NSw3IEBAIFJpbmdQdXRSZXF1ZXN0KAogICAgICAgICBp
ZiAoTGlzdEVudHJ5ID09ICZSZXF1ZXN0LT5TZWdtZW50cykKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBTZWdtZW50ID0gQ09OVEFJTklOR19SRUNPUkQoTGlzdEVudHJ5LCBYRU5WQkRfU0VH
TUVOVCwgTGlzdEVudHJ5KTsKLSAgICAgICAgUmluZ1B1dFNlZ21lbnQoUmluZywgU2VnbWVudCk7
CisgICAgICAgIEJsa2lmUmluZ1B1dFNlZ21lbnQoQmxraWZSaW5nLCBTZWdtZW50KTsKICAgICB9
CiAKICAgICBmb3IgKDs7KSB7CkBAIC0zODEsNyArMzk1LDcgQEAgUmluZ1B1dFJlcXVlc3QoCiAg
ICAgICAgIGlmIChMaXN0RW50cnkgPT0gJlJlcXVlc3QtPkluZGlyZWN0cykKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBJbmRpcmVjdCA9IENPTlRBSU5JTkdfUkVDT1JEKExpc3RFbnRyeSwg
WEVOVkJEX0lORElSRUNULCBMaXN0RW50cnkpOwotICAgICAgICBSaW5nUHV0SW5kaXJlY3QoUmlu
ZywgSW5kaXJlY3QpOworICAgICAgICBCbGtpZlJpbmdQdXRJbmRpcmVjdChCbGtpZlJpbmcsIElu
ZGlyZWN0KTsKICAgICB9CiAKICAgICBSZXF1ZXN0LT5TcmJFeHQgPSBOVUxMOwpAQCAtMzk0LDE4
OSArNDA4LDI3NyBAQCBSaW5nUHV0UmVxdWVzdCgKIAogICAgIFhFTkJVU19DQUNIRShQdXQsCiAg
ICAgICAgICAgICAgICAgICZSaW5nLT5DYWNoZUludGVyZmFjZSwKLSAgICAgICAgICAgICAgICAg
UmluZy0+UmVxdWVzdENhY2hlLAorICAgICAgICAgICAgICAgICBCbGtpZlJpbmctPlJlcXVlc3RD
YWNoZSwKICAgICAgICAgICAgICAgICAgUmVxdWVzdCwKLSAgICAgICAgICAgICAgICAgRkFMU0Up
OworICAgICAgICAgICAgICAgICBUUlVFKTsKIH0KIAotc3RhdGljIEZPUkNFSU5MSU5FIFBYRU5W
QkRfUkVRVUVTVAotUmluZ0ZpbmRSZXF1ZXN0KAotICAgIElOICBQWEVOVkJEX1JJTkcgICAgUmlu
ZywKLSAgICBJTiAgVUxPTkc2NCAgICAgICAgIElkCitzdGF0aWMgREVDTFNQRUNfTk9JTkxJTkUg
TlRTVEFUVVMKK0Jsa2lmUmluZ1JlcXVlc3RDdG9yKAorICAgIElOICBQVk9JRCAgICAgICBBcmd1
bWVudCwKKyAgICBJTiAgUFZPSUQgICAgICAgT2JqZWN0CiAgICAgKQogewotICAgIEtJUlFMICAg
ICAgICAgICAgICAgSXJxbDsKLSAgICBQTElTVF9FTlRSWSAgICAgICAgIExpc3RFbnRyeTsKLSAg
ICBQWEVOVkJEX1JFUVVFU1QgICAgIFJlcXVlc3Q7Ci0gICAgUFhFTlZCRF9RVUVVRSAgICAgICBR
dWV1ZSA9ICZSaW5nLT5TdWJtaXR0ZWRSZXFzOwotCi0gICAgS2VBY3F1aXJlU3BpbkxvY2soJlF1
ZXVlLT5Mb2NrLCAmSXJxbCk7CisgICAgUFhFTlZCRF9SRVFVRVNUIFJlcXVlc3QgPSBPYmplY3Q7
CiAKLSAgICBmb3IgKExpc3RFbnRyeSA9IFF1ZXVlLT5MaXN0LkZsaW5rOwotICAgICAgICAgTGlz
dEVudHJ5ICE9ICZRdWV1ZS0+TGlzdDsKLSAgICAgICAgIExpc3RFbnRyeSA9IExpc3RFbnRyeS0+
RmxpbmspIHsKLSAgICAgICAgUmVxdWVzdCA9IENPTlRBSU5JTkdfUkVDT1JEKExpc3RFbnRyeSwg
WEVOVkJEX1JFUVVFU1QsIExpc3RFbnRyeSk7Ci0gICAgICAgIGlmICgoVUxPTkc2NCkoVUxPTkdf
UFRSKVJlcXVlc3QgPT0gSWQpIHsKLSAgICAgICAgICAgIFJlbW92ZUVudHJ5TGlzdCgmUmVxdWVz
dC0+TGlzdEVudHJ5KTsKLSAgICAgICAgICAgIC0tUXVldWUtPkN1cnJlbnQ7Ci0gICAgICAgICAg
ICBLZVJlbGVhc2VTcGluTG9jaygmUXVldWUtPkxvY2ssIElycWwpOwotICAgICAgICAgICAgcmV0
dXJuIFJlcXVlc3Q7Ci0gICAgICAgIH0KLSAgICB9CisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRF
UihBcmd1bWVudCk7CiAKLSAgICBLZVJlbGVhc2VTcGluTG9jaygmUXVldWUtPkxvY2ssIElycWwp
OwotICAgIFdhcm5pbmcoIlRhcmdldFslZF0gOiBUYWcgJWxseCBub3QgZm91bmQgaW4gc3VibWl0
dGVkIGxpc3QgKCV1IGl0ZW1zKVxuIiwKLSAgICAgICAgICAgIEZyb250ZW5kR2V0VGFyZ2V0SWQo
UmluZy0+RnJvbnRlbmQpLAotICAgICAgICAgICAgSWQsCi0gICAgICAgICAgICBRdWV1ZUNvdW50
KFF1ZXVlKSk7Ci0gICAgcmV0dXJuIE5VTEw7CisgICAgSW5pdGlhbGl6ZUxpc3RIZWFkKCZSZXF1
ZXN0LT5TZWdtZW50cyk7CisgICAgSW5pdGlhbGl6ZUxpc3RIZWFkKCZSZXF1ZXN0LT5JbmRpcmVj
dHMpOworICAgIHJldHVybiBTVEFUVVNfU1VDQ0VTUzsKIH0KIAotc3RhdGljIEZPUkNFSU5MSU5F
IFZPSUQKLV9fUmluZ0luY0Jsa2lmT3BDb3VudCgKLSAgICBJTiAgUFhFTlZCRF9SSU5HICAgIFJp
bmcsCi0gICAgSU4gIFBYRU5WQkRfUkVRVUVTVCBSZXF1ZXN0CitzdGF0aWMgREVDTFNQRUNfTk9J
TkxJTkUgVk9JRAorQmxraWZSaW5nUmVxdWVzdER0b3IoCisgICAgSU4gIFBWT0lEICAgICAgIEFy
Z3VtZW50LAorICAgIElOICBQVk9JRCAgICAgICBPYmplY3QKICAgICApCiB7Ci0gICAgc3dpdGNo
IChSZXF1ZXN0LT5PcGVyYXRpb24pIHsKLSAgICBjYXNlIEJMS0lGX09QX1JFQUQ6Ci0gICAgICAg
IGlmIChSZXF1ZXN0LT5OclNlZ21lbnRzID4gQkxLSUZfTUFYX1NFR01FTlRTX1BFUl9SRVFVRVNU
KQotICAgICAgICAgICAgKytSaW5nLT5CbGtPcEluZGlyZWN0UmVhZDsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgKytSaW5nLT5CbGtPcFJlYWQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
QkxLSUZfT1BfV1JJVEU6Ci0gICAgICAgIGlmIChSZXF1ZXN0LT5OclNlZ21lbnRzID4gQkxLSUZf
TUFYX1NFR01FTlRTX1BFUl9SRVFVRVNUKQotICAgICAgICAgICAgKytSaW5nLT5CbGtPcEluZGly
ZWN0V3JpdGU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgICsrUmluZy0+QmxrT3BXcml0ZTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBCTEtJRl9PUF9XUklURV9CQVJSSUVSOgotICAgICAg
ICArK1JpbmctPkJsa09wQmFycmllcjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBCTEtJRl9P
UF9ESVNDQVJEOgotICAgICAgICArK1JpbmctPkJsa09wRGlzY2FyZDsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBCTEtJRl9PUF9GTFVTSF9ESVNLQ0FDSEU6Ci0gICAgICAgICsrUmluZy0+Qmxr
T3BGbHVzaDsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUKEZB
TFNFKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIo
QXJndW1lbnQpOworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoT2JqZWN0KTsKIH0KIAotc3Rh
dGljIEZPUkNFSU5MSU5FIFVMT05HCi1fX1JpbmdTZWN0b3JzUGVyUGFnZSgKLSAgICBJTiAgVUxP
TkcgICBTZWN0b3JTaXplCitzdGF0aWMgREVDTFNQRUNfTk9JTkxJTkUgTlRTVEFUVVMKK0Jsa2lm
UmluZ1NlZ21lbnRDdG9yKAorICAgIElOICBQVk9JRCAgICAgICBBcmd1bWVudCwKKyAgICBJTiAg
UFZPSUQgICAgICAgT2JqZWN0CiAgICAgKQogewotICAgIEFTU0VSVDNVKFNlY3RvclNpemUsICE9
LCAwKTsKLSAgICByZXR1cm4gUEFHRV9TSVpFIC8gU2VjdG9yU2l6ZTsKKyAgICBVTlJFRkVSRU5D
RURfUEFSQU1FVEVSKEFyZ3VtZW50KTsKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKE9iamVj
dCk7CisgICAgcmV0dXJuIFNUQVRVU19TVUNDRVNTOwogfQogCi1zdGF0aWMgRk9SQ0VJTkxJTkUg
Vk9JRAotX19SaW5nT3BlcmF0aW9uKAotICAgIElOICBVQ0hBUiAgICAgICBDZGJPcCwKLSAgICBP
VVQgUFVDSEFSICAgICAgUmluZ09wLAotICAgIE9VVCBQQk9PTEVBTiAgICBSZWFkT25seQorc3Rh
dGljIERFQ0xTUEVDX05PSU5MSU5FIFZPSUQKK0Jsa2lmUmluZ1NlZ21lbnREdG9yKAorICAgIElO
ICBQVk9JRCAgICAgICBBcmd1bWVudCwKKyAgICBJTiAgUFZPSUQgICAgICAgT2JqZWN0CiAgICAg
KQogewotICAgIHN3aXRjaCAoQ2RiT3ApIHsKLSAgICBjYXNlIFNDU0lPUF9SRUFEOgotICAgICAg
ICAqUmluZ09wICAgICA9IEJMS0lGX09QX1JFQUQ7Ci0gICAgICAgICpSZWFkT25seSAgID0gRkFM
U0U7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU0NTSU9QX1dSSVRFOgotICAgICAgICAqUmlu
Z09wICAgICA9IEJMS0lGX09QX1dSSVRFOwotICAgICAgICAqUmVhZE9ubHkgICA9IFRSVUU7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVChGQUxTRSk7Ci0gICAg
fQorICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoQXJndW1lbnQpOworICAgIFVOUkVGRVJFTkNF
RF9QQVJBTUVURVIoT2JqZWN0KTsKIH0KIAotc3RhdGljIEZPUkNFSU5MSU5FIE1NX1BBR0VfUFJJ
T1JJVFkKLV9fUmluZ1ByaW9yaXR5KAotICAgIElOICBQWEVOVkJEX1JJTkcgICAgUmluZworc3Rh
dGljIERFQ0xTUEVDX05PSU5MSU5FIE5UU1RBVFVTCitCbGtpZlJpbmdJbmRpcmVjdEN0b3IoCisg
ICAgSU4gIFBWT0lEICAgICAgICAgICBBcmd1bWVudCwKKyAgICBJTiAgUFZPSUQgICAgICAgICAg
IE9iamVjdAogICAgICkKIHsKLSAgICBQWEVOVkJEX0NBUFMgICAgICAgIENhcHMgPSBGcm9udGVu
ZEdldENhcHMoUmluZy0+RnJvbnRlbmQpOwotICAgIGlmICghKENhcHMtPlBhZ2luZyB8fAotICAg
ICAgICAgIENhcHMtPkhpYmVybmF0aW9uIHx8Ci0gICAgICAgICAgQ2Fwcy0+RHVtcEZpbGUpKQot
ICAgICAgICByZXR1cm4gTm9ybWFsUGFnZVByaW9yaXR5OworICAgIFBYRU5WQkRfSU5ESVJFQ1Qg
ICAgSW5kaXJlY3QgPSBPYmplY3Q7CisgICAgTlRTVEFUVVMgICAgICAgICAgICBzdGF0dXM7CisK
KyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKEFyZ3VtZW50KTsKKworICAgIHN0YXR1cyA9IFNU
QVRVU19OT19NRU1PUlk7CisgICAgSW5kaXJlY3QtPk1kbCA9IF9fQWxsb2NhdGVQYWdlKCk7Cisg
ICAgaWYgKEluZGlyZWN0LT5NZGwgPT0gTlVMTCkKKyAgICAgICAgZ290byBmYWlsMTsKKworICAg
IEluZGlyZWN0LT5QYWdlID0gTW1HZXRTeXN0ZW1BZGRyZXNzRm9yTWRsU2FmZShJbmRpcmVjdC0+
TWRsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBO
b3JtYWxQYWdlUHJpb3JpdHkpOworICAgIEFTU0VSVChJbmRpcmVjdC0+UGFnZSk7CiAKLSAgICBy
ZXR1cm4gSGlnaFBhZ2VQcmlvcml0eTsKKyAgICByZXR1cm4gU1RBVFVTX1NVQ0NFU1M7CisKK2Zh
aWwxOgorICAgIEVycm9yKCJmYWlsMSAlMDh4XG4iLCBzdGF0dXMpOworICAgIHJldHVybiBzdGF0
dXM7CiB9CiAKLXN0YXRpYyBGT1JDRUlOTElORSBWT0lECi1SaW5nUmVxdWVzdENvcHlPdXRwdXQo
Ci0gICAgSU4gIFBYRU5WQkRfUkVRVUVTVCBSZXF1ZXN0CitzdGF0aWMgREVDTFNQRUNfTk9JTkxJ
TkUgVk9JRAorQmxraWZSaW5nSW5kaXJlY3REdG9yKAorICAgIElOICBQVk9JRCAgICAgICAgICAg
QXJndW1lbnQsCisgICAgSU4gIFBWT0lEICAgICAgICAgICBPYmplY3QKICAgICApCiB7Ci0gICAg
UExJU1RfRU5UUlkgICAgICAgICBMaXN0RW50cnk7Ci0KLSAgICBpZiAoUmVxdWVzdC0+T3BlcmF0
aW9uICE9IEJMS0lGX09QX1JFQUQpCi0gICAgICAgIHJldHVybjsKKyAgICBQWEVOVkJEX0lORElS
RUNUICAgIEluZGlyZWN0ID0gT2JqZWN0OwogCi0gICAgZm9yIChMaXN0RW50cnkgPSBSZXF1ZXN0
LT5TZWdtZW50cy5GbGluazsKLSAgICAgICAgIExpc3RFbnRyeSAhPSAmUmVxdWVzdC0+U2VnbWVu
dHM7Ci0gICAgICAgICBMaXN0RW50cnkgPSBMaXN0RW50cnktPkZsaW5rKSB7Ci0gICAgICAgIFBY
RU5WQkRfU0VHTUVOVCBTZWdtZW50ID0gQ09OVEFJTklOR19SRUNPUkQoTGlzdEVudHJ5LCBYRU5W
QkRfU0VHTUVOVCwgTGlzdEVudHJ5KTsKLSAgICAgICAgUFhFTlZCRF9CT1VOQ0UgIEJvdW5jZSA9
IFNlZ21lbnQtPkJvdW5jZTsKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKEFyZ3VtZW50KTsK
IAotICAgICAgICBpZiAoQm91bmNlKSB7Ci0gICAgICAgICAgICBSdGxDb3B5TWVtb3J5KEJvdW5j
ZS0+U291cmNlUHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICBCb3VuY2UtPkJvdW5jZVB0
ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgTW1HZXRNZGxCeXRlQ291bnQoJkJvdW5jZS0+
U291cmNlTWRsKSk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgX19GcmVlUGFnZXMoSW5kaXJlY3Qt
Pk1kbCk7CisgICAgSW5kaXJlY3QtPlBhZ2UgPSBOVUxMOworICAgIEluZGlyZWN0LT5NZGwgPSBO
VUxMOwogfQogCi1zdGF0aWMgQk9PTEVBTgotUmluZ1ByZXBhcmVTZWdtZW50KAotICAgIElOICBQ
WEVOVkJEX1JJTkcgICAgUmluZywKLSAgICBJTiAgUFhFTlZCRF9TRUdNRU5UIFNlZ21lbnQsCi0g
ICAgSU4gIFBYRU5WQkRfU1JCRVhUICBTcmJFeHQsCi0gICAgSU4gIEJPT0xFQU4gICAgICAgICBS
ZWFkT25seSwKLSAgICBJTiAgVUxPTkcgICAgICAgICAgIFNlY3RvcnNMZWZ0LAotICAgIE9VVCBQ
VUxPTkcgICAgICAgICAgU2VjdG9yc05vdwotICAgICkKLXsKLSAgICBQRk5fTlVNQkVSICAgICAg
ICAgIFBmbjsKLSAgICBVTE9ORyAgICAgICAgICAgICAgIE9mZnNldDsKLSAgICBVTE9ORyAgICAg
ICAgICAgICAgIExlbmd0aDsKLSAgICBOVFNUQVRVUyAgICAgICAgICAgIFN0YXR1czsKLSAgICBQ
WEVOVkJEX0dSQU5URVIgICAgIEdyYW50ZXIgPSBGcm9udGVuZEdldEdyYW50ZXIoUmluZy0+RnJv
bnRlbmQpOwotICAgIGNvbnN0IFVMT05HICAgICAgICAgU2VjdG9yU2l6ZSA9IEZyb250ZW5kR2V0
RGlza0luZm8oUmluZy0+RnJvbnRlbmQpLT5TZWN0b3JTaXplOwotICAgIGNvbnN0IFVMT05HICAg
ICAgICAgU2VjdG9yc1BlclBhZ2UgPSBfX1JpbmdTZWN0b3JzUGVyUGFnZShTZWN0b3JTaXplKTsK
LSAgICBQWEVOVkJEX1RBUkdFVCAgICAgIFRhcmdldCA9IEZyb250ZW5kR2V0VGFyZ2V0KFJpbmct
PkZyb250ZW5kKTsKLSAgICBQWEVOVkJEX0FEQVBURVIgICAgIEFkYXB0ZXIgPSBUYXJnZXRHZXRB
ZGFwdGVyKFRhcmdldCk7CitzdGF0aWMgVk9JRAorQmxraWZSaW5nRGVidWdDYWxsYmFjaygKKyAg
ICBJTiAgUFZPSUQgICAgICAgICAgIEFyZ3VtZW50LAorICAgIElOICBCT09MRUFOICAgICAgICAg
Q3Jhc2hpbmcKKyAgICApCit7CisgICAgUFhFTlZCRF9CTEtJRl9SSU5HICBCbGtpZlJpbmcgPSBB
cmd1bWVudDsKKyAgICBQWEVOVkJEX1JJTkcgICAgICAgIFJpbmcgPSBCbGtpZlJpbmctPlJpbmc7
CiAKLSAgICBQZm4gPSBBZGFwdGVyR2V0TmV4dFNHRW50cnkoQWRhcHRlciwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgU3JiRXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmT2Zmc2V0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAmTGVuZ3RoKTsKLSAgICBpZiAoKE9mZnNldCAmIChT
ZWN0b3JTaXplIC0gMSkpID09IDAgJiYKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKENyYXNo
aW5nKTsKKworICAgIFhFTkJVU19ERUJVRyhQcmludGYsCisgICAgICAgICAgICAgICAgICZSaW5n
LT5EZWJ1Z0ludGVyZmFjZSwKKyAgICAgICAgICAgICAgICAgIjB4JXAgWyVzXVxuIiwKKyAgICAg
ICAgICAgICAgICAgQmxraWZSaW5nLAorICAgICAgICAgICAgICAgICAoQmxraWZSaW5nLT5FbmFi
bGVkKSA/ICJFTkFCTEVEIiA6ICJESVNBQkxFRCIpOworCisgICAgLy8gRHVtcCBmcm9udCByaW5n
CisgICAgWEVOQlVTX0RFQlVHKFByaW50ZiwKKyAgICAgICAgICAgICAgICAgJlJpbmctPkRlYnVn
SW50ZXJmYWNlLAorICAgICAgICAgICAgICAgICAiRlJPTlQ6IHJlcV9wcm9kX3B2dCA9ICV1IHJz
cF9jb25zID0gJXUgbnJfZW50cyA9ICV1IHNyaW5nID0gJXBcbiIsCisgICAgICAgICAgICAgICAg
IEJsa2lmUmluZy0+RnJvbnQucmVxX3Byb2RfcHZ0LAorICAgICAgICAgICAgICAgICBCbGtpZlJp
bmctPkZyb250LnJzcF9jb25zLAorICAgICAgICAgICAgICAgICBCbGtpZlJpbmctPkZyb250Lm5y
X2VudHMsCisgICAgICAgICAgICAgICAgIEJsa2lmUmluZy0+RnJvbnQuc3JpbmcpOworCisgICAg
Ly8gRHVtcCBzaGFyZWQgcmluZworICAgIFhFTkJVU19ERUJVRyhQcmludGYsCisgICAgICAgICAg
ICAgICAgICZSaW5nLT5EZWJ1Z0ludGVyZmFjZSwKKyAgICAgICAgICAgICAgICAgIlNIQVJFRDog
cmVxX3Byb2QgPSAldSByZXFfZXZlbnQgPSAldSByc3BfcHJvZCA9ICV1IHJzcF9ldmVudCA9ICV1
XG4iLAorICAgICAgICAgICAgICAgICBCbGtpZlJpbmctPlNoYXJlZC0+cmVxX3Byb2QsCisgICAg
ICAgICAgICAgICAgIEJsa2lmUmluZy0+U2hhcmVkLT5yZXFfZXZlbnQsCisgICAgICAgICAgICAg
ICAgIEJsa2lmUmluZy0+U2hhcmVkLT5yc3BfcHJvZCwKKyAgICAgICAgICAgICAgICAgQmxraWZS
aW5nLT5TaGFyZWQtPnJzcF9ldmVudCk7CisKKyAgICBYRU5CVVNfREVCVUcoUHJpbnRmLAorICAg
ICAgICAgICAgICAgICAmUmluZy0+RGVidWdJbnRlcmZhY2UsCisgICAgICAgICAgICAgICAgICJS
ZXF1ZXN0c1Bvc3RlZCA9ICV1IFJlcXVlc3RzUHVzaGVkID0gJXUgUmVzcG9uc2VzUHJvY2Vzc2Vk
ID0gJXVcbiIsCisgICAgICAgICAgICAgICAgIEJsa2lmUmluZy0+UmVxdWVzdHNQb3N0ZWQsCisg
ICAgICAgICAgICAgICAgIEJsa2lmUmluZy0+UmVxdWVzdHNQdXNoZWQsCisgICAgICAgICAgICAg
ICAgIEJsa2lmUmluZy0+UmVzcG9uc2VzUHJvY2Vzc2VkKTsKKworICAgIFhFTkJVU19ERUJVRyhQ
cmludGYsCisgICAgICAgICAgICAgICAgICZSaW5nLT5EZWJ1Z0ludGVyZmFjZSwKKyAgICAgICAg
ICAgICAgICAgIlNyYnNRdWV1ZWQgPSAldSwgU3Jic0NvbXBsZXRlZCA9ICV1LCBTcmJzRmFpbGVk
ID0gJXVcbiIsCisgICAgICAgICAgICAgICAgIEJsa2lmUmluZy0+U3Jic1F1ZXVlZCwKKyAgICAg
ICAgICAgICAgICAgQmxraWZSaW5nLT5TcmJzQ29tcGxldGVkLAorICAgICAgICAgICAgICAgICBC
bGtpZlJpbmctPlNyYnNGYWlsZWQpOworCisgICAgWEVOQlVTX0RFQlVHKFByaW50ZiwKKyAgICAg
ICAgICAgICAgICAgJlJpbmctPkRlYnVnSW50ZXJmYWNlLAorICAgICAgICAgICAgICAgICAiRHBj
cyA9ICV1LCBFdmVudHMgPSAldVxuIiwKKyAgICAgICAgICAgICAgICAgQmxraWZSaW5nLT5EcGNz
LAorICAgICAgICAgICAgICAgICBCbGtpZlJpbmctPkV2ZW50cyk7Cit9CisKK3N0YXRpYyBERUNM
U1BFQ19OT0lOTElORSBWT0lECitfX0Jsa2lmUmluZ0NvbXBsZXRlU3JiKAorICAgIElOICBQWEVO
VkJEX0JMS0lGX1JJTkcgIEJsa2lmUmluZywKKyAgICBJTiAgUFhFTlZCRF9TUkJFWFQgICAgICBT
cmJFeHQKKyAgICApCit7CisgICAgUFhFTlZCRF9SSU5HICAgICAgICAgICAgUmluZyA9IEJsa2lm
UmluZy0+UmluZzsKKyAgICBQWEVOVkJEX0ZST05URU5EICAgICAgICBGcm9udGVuZCA9IFJpbmct
PkZyb250ZW5kOworICAgIFBYRU5WQkRfVEFSR0VUICAgICAgICAgIFRhcmdldCA9IEZyb250ZW5k
R2V0VGFyZ2V0KEZyb250ZW5kKTsKKyAgICBQWEVOVkJEX0FEQVBURVIgICAgICAgICBBZGFwdGVy
ID0gVGFyZ2V0R2V0QWRhcHRlcihUYXJnZXQpOworICAgIFBTQ1NJX1JFUVVFU1RfQkxPQ0sgICAg
IFNyYiA9IFNyYkV4dC0+U3JiOworCisgICAgaWYgKFNyYi0+U3JiU3RhdHVzID09IFNSQl9TVEFU
VVNfUEVORElORykgeworICAgICAgICAvLyBTUkIgaGFzIG5vdCBoaXQgYSBmYWlsdXJlIGNvbmRp
dGlvbiAoQkxLSUZfUlNQX0VSUk9SIHwgQkxLSUZfUlNQX0VPUE5PVFNVUFApCisgICAgICAgIC8v
IGZyb20gYW55IG9mIGl0cyByZXNwb25zZXMuIFNSQiBtdXN0IGhhdmUgc3VjY2VlZGVkCisgICAg
ICAgIFNyYi0+U3JiU3RhdHVzID0gU1JCX1NUQVRVU19TVUNDRVNTOworICAgICAgICBTcmItPlNj
c2lTdGF0dXMgPSAweDAwOyAvLyBTQ1NJX0dPT0QKKyAgICAgICAgKytCbGtpZlJpbmctPlNyYnND
b21wbGV0ZWQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gU3JiLT5TcmJTdGF0dXMgaGFzIGFs
cmVhZHkgYmVlbiBzZXQgYnkgMSBvciBtb3JlIHJlcXVlc3RzIHdpdGggU3RhdHVzICE9IEJMS0lG
X1JTUF9PS0FZCisgICAgICAgIFNyYi0+U2NzaVN0YXR1cyA9IDB4NDA7IC8vIFNDU0lfQUJPUlRF
RAorICAgICAgICArK0Jsa2lmUmluZy0+U3Jic0ZhaWxlZDsKKyAgICB9CisKKyAgICBBZGFwdGVy
Q29tcGxldGVTcmIoQWRhcHRlciwgU3JiRXh0KTsKK30KKworc3RhdGljIEZPUkNFSU5MSU5FIFZP
SUQKK0Jsa2lmUmluZ1VucHJlcGFyZVJlcXVlc3QoCisgICAgSU4gIFBYRU5WQkRfQkxLSUZfUklO
RyAgQmxraWZSaW5nLAorICAgIElOICBQTElTVF9FTlRSWSAgICAgICAgIExpc3QKKyAgICApCit7
CisgICAgZm9yICg7OykgeworICAgICAgICBQTElTVF9FTlRSWSAgICAgICAgIExpc3RFbnRyeTsK
KyAgICAgICAgUFhFTlZCRF9SRVFVRVNUICAgICBSZXF1ZXN0OworCisgICAgICAgIExpc3RFbnRy
eSA9IFJlbW92ZUhlYWRMaXN0KExpc3QpOworICAgICAgICBpZiAoTGlzdEVudHJ5ID09IExpc3Qp
CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBSZXF1ZXN0ID0gQ09OVEFJTklOR19SRUNP
UkQoTGlzdEVudHJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWEVOVkJE
X1JFUVVFU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0RW50cnkp
OworCisgICAgICAgIEJsa2lmUmluZ1B1dFJlcXVlc3QoQmxraWZSaW5nLCBSZXF1ZXN0KTsKKyAg
ICB9Cit9CisKK3N0YXRpYyBGT1JDRUlOTElORSBWT0lECitCbGtpZlJpbmdRdWV1ZVJlcXVlc3Rz
KAorICAgIElOICBQWEVOVkJEX0JMS0lGX1JJTkcgIEJsa2lmUmluZywKKyAgICBJTiAgUExJU1Rf
RU5UUlkgICAgICAgICBMaXN0CisgICAgKQoreworICAgIFBYRU5WQkRfU1JCX1NUQVRFICAgICAg
IFN0YXRlID0gJkJsa2lmUmluZy0+U3RhdGU7CisKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIFBM
SVNUX0VOVFJZICAgICAgICAgTGlzdEVudHJ5OworICAgICAgICBQWEVOVkJEX1JFUVVFU1QgICAg
IFJlcXVlc3Q7CisKKyAgICAgICAgTGlzdEVudHJ5ID0gUmVtb3ZlSGVhZExpc3QoTGlzdCk7Cisg
ICAgICAgIGlmIChMaXN0RW50cnkgPT0gTGlzdCkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgIFJlcXVlc3QgPSBDT05UQUlOSU5HX1JFQ09SRChMaXN0RW50cnksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBYRU5WQkRfUkVRVUVTVCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIExpc3RFbnRyeSk7CisKKyAgICAgICAgSW5zZXJ0VGFpbExpc3Qo
JlN0YXRlLT5MaXN0LCBMaXN0RW50cnkpOworICAgICAgICBTdGF0ZS0+Q291bnQrKzsKKyAgICB9
Cit9CisKK3N0YXRpYyBCT09MRUFOCitCbGtpZlJpbmdQcmVwYXJlU2VnbWVudCgKKyAgICBJTiAg
UFhFTlZCRF9CTEtJRl9SSU5HICBCbGtpZlJpbmcsCisgICAgSU4gIFBYRU5WQkRfU0VHTUVOVCAg
ICAgU2VnbWVudCwKKyAgICBJTiAgUFhFTlZCRF9TUkJFWFQgICAgICBTcmJFeHQsCisgICAgSU4g
IEJPT0xFQU4gICAgICAgICAgICAgUmVhZE9ubHksCisgICAgSU4gIFVMT05HICAgICAgICAgICAg
ICAgU2VjdG9yc0xlZnQsCisgICAgT1VUIFBVTE9ORyAgICAgICAgICAgICAgU2VjdG9yc05vdwor
ICAgICkKK3sKKyAgICBQRk5fTlVNQkVSICAgICAgICAgICAgICBQZm47CisgICAgVUxPTkcgICAg
ICAgICAgICAgICAgICAgT2Zmc2V0OworICAgIFVMT05HICAgICAgICAgICAgICAgICAgIExlbmd0
aDsKKyAgICBOVFNUQVRVUyAgICAgICAgICAgICAgICBTdGF0dXM7CisgICAgUFhFTlZCRF9SSU5H
ICAgICAgICAgICAgUmluZyA9IEJsa2lmUmluZy0+UmluZzsKKyAgICBQWEVOVkJEX0dSQU5URVIg
ICAgICAgICBHcmFudGVyID0gRnJvbnRlbmRHZXRHcmFudGVyKFJpbmctPkZyb250ZW5kKTsKKyAg
ICBQWEVOVkJEX1RBUkdFVCAgICAgICAgICBUYXJnZXQgPSBGcm9udGVuZEdldFRhcmdldChSaW5n
LT5Gcm9udGVuZCk7CisgICAgUFhFTlZCRF9BREFQVEVSICAgICAgICAgQWRhcHRlciA9IFRhcmdl
dEdldEFkYXB0ZXIoVGFyZ2V0KTsKKworICAgIGNvbnN0IFVMT05HICAgICAgICAgICAgIFNlY3Rv
clNpemUgPSBGcm9udGVuZEdldERpc2tJbmZvKFJpbmctPkZyb250ZW5kKS0+U2VjdG9yU2l6ZTsK
KyAgICBjb25zdCBVTE9ORyAgICAgICAgICAgICBTZWN0b3JzUGVyUGFnZSA9IF9fU2VjdG9yc1Bl
clBhZ2UoU2VjdG9yU2l6ZSk7CisKKyAgICBQZm4gPSBBZGFwdGVyR2V0TmV4dFNHRW50cnkoQWRh
cHRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3JiRXh0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAmT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmTGVuZ3RoKTsKKyAg
ICBpZiAoKE9mZnNldCAmIChTZWN0b3JTaXplIC0gMSkpID09IDAgJiYKICAgICAgICAgKExlbmd0
aCAmIChTZWN0b3JTaXplIC0gMSkpID09IDApIHsKLSAgICAgICAgKytSaW5nLT5TZWdzR3JhbnRl
ZDsKKyAgICAgICAgSW50ZXJsb2NrZWRJbmNyZW1lbnQoJlJpbmctPlN0YXRzW1hFTlZCRF9TVEFU
X1NFR01FTlRTX0dSQU5URURdKTsKKwogICAgICAgICAvLyBnZXQgZmlyc3Qgc2VjdG9yLCBsYXN0
IHNlY3RvciBhbmQgY291bnQKLSAgICAgICAgU2VnbWVudC0+Rmlyc3RTZWN0b3IgICAgPSAoVUNI
QVIpKChPZmZzZXQgKyBTZWN0b3JTaXplIC0gMSkgLyBTZWN0b3JTaXplKTsKLSAgICAgICAgKlNl
Y3RvcnNOb3cgICAgICAgICAgICAgPSBfX21pbihTZWN0b3JzTGVmdCwgU2VjdG9yc1BlclBhZ2Ug
LSBTZWdtZW50LT5GaXJzdFNlY3Rvcik7Ci0gICAgICAgIFNlZ21lbnQtPkxhc3RTZWN0b3IgICAg
ID0gKFVDSEFSKShTZWdtZW50LT5GaXJzdFNlY3RvciArICpTZWN0b3JzTm93IC0gMSk7CisgICAg
ICAgIFNlZ21lbnQtPkZpcnN0U2VjdG9yID0gKFVDSEFSKSgoT2Zmc2V0ICsgU2VjdG9yU2l6ZSAt
IDEpIC8gU2VjdG9yU2l6ZSk7CisgICAgICAgICpTZWN0b3JzTm93ID0gX19taW4oU2VjdG9yc0xl
ZnQsIFNlY3RvcnNQZXJQYWdlIC0gU2VnbWVudC0+Rmlyc3RTZWN0b3IpOworICAgICAgICBTZWdt
ZW50LT5MYXN0U2VjdG9yID0gKFVDSEFSKShTZWdtZW50LT5GaXJzdFNlY3RvciArICpTZWN0b3Jz
Tm93IC0gMSk7CiAKLSAgICAgICAgQVNTRVJUM1UoKExlbmd0aCAvIFNlY3RvclNpemUpLCA9PSwg
KlNlY3RvcnNOb3cpOworICAgICAgICBBU1NFUlQzVSgoTGVuZ3RoIC8gU2VjdG9yU2l6ZSksID09
ICwgKlNlY3RvcnNOb3cpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIFBYRU5WQkRfQk9VTkNFICAg
ICAgQm91bmNlOwogICAgICAgICBQTURMICAgICAgICAgICAgICAgIE1kbDsKKyAgICAgICAgUFhF
TlZCRF9DQVBTICAgICAgICBDYXBzID0gRnJvbnRlbmRHZXRDYXBzKFJpbmctPkZyb250ZW5kKTsK
KworICAgICAgICBJbnRlcmxvY2tlZEluY3JlbWVudCgmUmluZy0+U3RhdHNbWEVOVkJEX1NUQVRf
U0VHTUVOVFNfQk9VTkNFRF0pOwogCi0gICAgICAgICsrUmluZy0+U2Vnc0JvdW5jZWQ7CiAgICAg
ICAgIC8vIGdldCBmaXJzdCBzZWN0b3IsIGxhc3Qgc2VjdG9yIGFuZCBjb3VudAotICAgICAgICBT
ZWdtZW50LT5GaXJzdFNlY3RvciAgICA9IDA7Ci0gICAgICAgICpTZWN0b3JzTm93ICAgICAgICAg
ICAgID0gX19taW4oU2VjdG9yc0xlZnQsIFNlY3RvcnNQZXJQYWdlKTsKLSAgICAgICAgU2VnbWVu
dC0+TGFzdFNlY3RvciAgICAgPSAoVUNIQVIpKCpTZWN0b3JzTm93IC0gMSk7CisgICAgICAgIFNl
Z21lbnQtPkZpcnN0U2VjdG9yID0gMDsKKyAgICAgICAgKlNlY3RvcnNOb3cgPSBfX21pbihTZWN0
b3JzTGVmdCwgU2VjdG9yc1BlclBhZ2UpOworICAgICAgICBTZWdtZW50LT5MYXN0U2VjdG9yID0g
KFVDSEFSKSgqU2VjdG9yc05vdyAtIDEpOwogCiAgICAgICAgIEJvdW5jZSA9IEFkYXB0ZXJHZXRC
b3VuY2UoQWRhcHRlcik7CiAgICAgICAgIGlmIChCb3VuY2UgPT0gTlVMTCkKQEAgLTU4NiwxNSAr
Njg4LDE1IEBAIFJpbmdQcmVwYXJlU2VnbWVudCgKICNwcmFnbWEgd2FybmluZyhwdXNoKQogI3By
YWdtYSB3YXJuaW5nKGRpc2FibGU6MjgxNDUpCiAgICAgICAgIE1kbCA9ICZCb3VuY2UtPlNvdXJj
ZU1kbDsKLSAgICAgICAgTWRsLT5OZXh0ICAgICAgICAgICAgICAgPSBOVUxMOwotICAgICAgICBN
ZGwtPlNpemUgICAgICAgICAgICAgICA9IChTSE9SVCkoc2l6ZW9mKE1ETCkgKyBzaXplb2YoUEZO
X05VTUJFUikpOwotICAgICAgICBNZGwtPk1kbEZsYWdzICAgICAgICAgICA9IE1ETF9QQUdFU19M
T0NLRUQ7Ci0gICAgICAgIE1kbC0+UHJvY2VzcyAgICAgICAgICAgID0gTlVMTDsKLSAgICAgICAg
TWRsLT5NYXBwZWRTeXN0ZW1WYSAgICAgPSBOVUxMOwotICAgICAgICBNZGwtPlN0YXJ0VmEgICAg
ICAgICAgICA9IE5VTEw7Ci0gICAgICAgIE1kbC0+Qnl0ZUNvdW50ICAgICAgICAgID0gTGVuZ3Ro
OwotICAgICAgICBNZGwtPkJ5dGVPZmZzZXQgICAgICAgICA9IE9mZnNldDsKLSAgICAgICAgQm91
bmNlLT5Tb3VyY2VQZm5bMF0gICAgPSBQZm47CisgICAgICAgIE1kbC0+TmV4dCA9IE5VTEw7Cisg
ICAgICAgIE1kbC0+U2l6ZSA9IChTSE9SVCkoc2l6ZW9mKE1ETCkgKyBzaXplb2YoUEZOX05VTUJF
UikpOworICAgICAgICBNZGwtPk1kbEZsYWdzID0gTURMX1BBR0VTX0xPQ0tFRDsKKyAgICAgICAg
TWRsLT5Qcm9jZXNzID0gTlVMTDsKKyAgICAgICAgTWRsLT5NYXBwZWRTeXN0ZW1WYSA9IE5VTEw7
CisgICAgICAgIE1kbC0+U3RhcnRWYSA9IE5VTEw7CisgICAgICAgIE1kbC0+Qnl0ZUNvdW50ID0g
TGVuZ3RoOworICAgICAgICBNZGwtPkJ5dGVPZmZzZXQgPSBPZmZzZXQ7CisgICAgICAgIEJvdW5j
ZS0+U291cmNlUGZuWzBdID0gUGZuOwogCiAgICAgICAgIGlmIChMZW5ndGggPCAqU2VjdG9yc05v
dyAqIFNlY3RvclNpemUpIHsKICAgICAgICAgICAgIFBmbiA9IEFkYXB0ZXJHZXROZXh0U0dFbnRy
eShBZGFwdGVyLApAQCAtNjAyLDI3ICs3MDQsMjcgQEAgUmluZ1ByZXBhcmVTZWdtZW50KAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExlbmd0aCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmT2Zmc2V0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICZMZW5ndGgpOwotICAgICAgICAgICAgTWRsLT5TaXplICAg
ICAgICAgICArPSBzaXplb2YoUEZOX05VTUJFUik7Ci0gICAgICAgICAgICBNZGwtPkJ5dGVDb3Vu
dCAgICAgICs9IExlbmd0aDsKKyAgICAgICAgICAgIE1kbC0+U2l6ZSArPSBzaXplb2YoUEZOX05V
TUJFUik7CisgICAgICAgICAgICBNZGwtPkJ5dGVDb3VudCArPSBMZW5ndGg7CiAgICAgICAgICAg
ICBCb3VuY2UtPlNvdXJjZVBmblsxXSA9IFBmbjsKICAgICAgICAgfQogI3ByYWdtYSB3YXJuaW5n
KHBvcCkKIAogICAgICAgICBBU1NFUlQoKE1kbC0+Qnl0ZUNvdW50ICYgKFNlY3RvclNpemUgLSAx
KSkgPT0gMCk7Ci0gICAgICAgIEFTU0VSVDNVKE1kbC0+Qnl0ZUNvdW50LCA8PSwgUEFHRV9TSVpF
KTsKLSAgICAgICAgQVNTRVJUM1UoKlNlY3RvcnNOb3csID09LCAoTWRsLT5CeXRlQ291bnQgLyBT
ZWN0b3JTaXplKSk7CisgICAgICAgIEFTU0VSVDNVKE1kbC0+Qnl0ZUNvdW50LCA8PSAsIFBBR0Vf
U0laRSk7CisgICAgICAgIEFTU0VSVDNVKCpTZWN0b3JzTm93LCA9PSAsIChNZGwtPkJ5dGVDb3Vu
dCAvIFNlY3RvclNpemUpKTsKIAogICAgICAgICBCb3VuY2UtPlNvdXJjZVB0ciA9IE1tTWFwTG9j
a2VkUGFnZXNTcGVjaWZ5Q2FjaGUoTWRsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgS2VybmVsTW9kZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1tQ2FjaGVkLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEZBTFNFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19SaW5nUHJpb3JpdHkoUmluZykpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19Qcmlvcml0eShDYXBzKSk7CiAgICAg
ICAgIGlmIChCb3VuY2UtPlNvdXJjZVB0ciA9PSBOVUxMKQogICAgICAgICAgICAgZ290byBmYWls
MjsKIAotICAgICAgICBBU1NFUlQzUChNbUdldE1kbFBmbkFycmF5KE1kbClbMF0sID09LCBCb3Vu
Y2UtPlNvdXJjZVBmblswXSk7Ci0gICAgICAgIEFTU0VSVDNQKE1tR2V0TWRsUGZuQXJyYXkoTWRs
KVsxXSwgPT0sIEJvdW5jZS0+U291cmNlUGZuWzFdKTsKKyAgICAgICAgQVNTRVJUM1AoTW1HZXRN
ZGxQZm5BcnJheShNZGwpWzBdLCA9PSAsIEJvdW5jZS0+U291cmNlUGZuWzBdKTsKKyAgICAgICAg
QVNTRVJUM1AoTW1HZXRNZGxQZm5BcnJheShNZGwpWzFdLCA9PSAsIEJvdW5jZS0+U291cmNlUGZu
WzFdKTsKIAogICAgICAgICAvLyBjb3B5IGNvbnRlbnRzIGluCiAgICAgICAgIGlmIChSZWFkT25s
eSkgeyAvLyBPcGVyYXRpb24gPT0gQkxLSUZfT1BfV1JJVEUKQEAgLTY0Nyw1MjMgKzc0OSw1MTAg
QEAgZmFpbDE6CiAgICAgcmV0dXJuIEZBTFNFOwogfQogCi1zdGF0aWMgQk9PTEVBTgotUmluZ1By
ZXBhcmVCbGtpZlJlYWRXcml0ZSgKLSAgICBJTiAgUFhFTlZCRF9SSU5HICAgIFJpbmcsCi0gICAg
SU4gIFBYRU5WQkRfUkVRVUVTVCBSZXF1ZXN0LAotICAgIElOICBQWEVOVkJEX1NSQkVYVCAgU3Ji
RXh0LAotICAgIElOICBVTE9ORyAgICAgICAgICAgTWF4U2VnbWVudHMsCi0gICAgSU4gIFVMT05H
NjQgICAgICAgICBTZWN0b3JTdGFydCwKLSAgICBJTiAgVUxPTkcgICAgICAgICAgIFNlY3RvcnNM
ZWZ0LAotICAgIE9VVCBQVUxPTkcgICAgICAgICAgU2VjdG9yc0RvbmUKK3N0YXRpYyBOVFNUQVRV
UworQmxraWZSaW5nUHJlcGFyZVJlYWRXcml0ZSgKKyAgICBJTiAgUFhFTlZCRF9CTEtJRl9SSU5H
ICBCbGtpZlJpbmcsCisgICAgSU4gIFBYRU5WQkRfU1JCRVhUICAgICAgU3JiRXh0CiAgICAgKQog
ewotICAgIFBTQ1NJX1JFUVVFU1RfQkxPQ0sgU3JiID0gU3JiRXh0LT5TcmI7Ci0gICAgVUNIQVIg
ICAgICAgICAgICAgICBPcGVyYXRpb247Ci0gICAgQk9PTEVBTiAgICAgICAgICAgICBSZWFkT25s
eTsKLSAgICBVTE9ORyAgICAgICAgICAgICAgIEluZGV4OwotICAgIF9fUmluZ09wZXJhdGlvbihD
ZGJfT3BlcmF0aW9uRXgoU3JiKSwgJk9wZXJhdGlvbiwgJlJlYWRPbmx5KTsKLQotICAgIFJlcXVl
c3QtPk9wZXJhdGlvbiAgPSBPcGVyYXRpb247Ci0gICAgUmVxdWVzdC0+TnJTZWdtZW50cyA9IDA7
Ci0gICAgUmVxdWVzdC0+Rmlyc3RTZWN0b3IgPSBTZWN0b3JTdGFydDsKLQotICAgIGZvciAoSW5k
ZXggPSAwOwotICAgICAgICAgICAgICAgIEluZGV4IDwgTWF4U2VnbWVudHMgJiYKLSAgICAgICAg
ICAgICAgICBTZWN0b3JzTGVmdCA+IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICArK0luZGV4
KSB7Ci0gICAgICAgIFBYRU5WQkRfU0VHTUVOVCBTZWdtZW50OwotICAgICAgICBVTE9ORyAgICAg
ICAgICAgU2VjdG9yc05vdzsKLQotICAgICAgICBTZWdtZW50ID0gUmluZ0dldFNlZ21lbnQoUmlu
Zyk7Ci0gICAgICAgIGlmIChTZWdtZW50ID09IE5VTEwpCi0gICAgICAgICAgICBnb3RvIGZhaWwx
OwotCi0gICAgICAgIEluc2VydFRhaWxMaXN0KCZSZXF1ZXN0LT5TZWdtZW50cywgJlNlZ21lbnQt
Pkxpc3RFbnRyeSk7Ci0gICAgICAgICsrUmVxdWVzdC0+TnJTZWdtZW50czsKKyAgICBQWEVOVkJE
X1JJTkcgICAgICAgICAgICBSaW5nID0gQmxraWZSaW5nLT5SaW5nOworICAgIFBYRU5WQkRfRlJP
TlRFTkQgICAgICAgIEZyb250ZW5kID0gUmluZy0+RnJvbnRlbmQ7CisgICAgUFNDU0lfUkVRVUVT
VF9CTE9DSyAgICAgU3JiID0gU3JiRXh0LT5TcmI7CisgICAgVUxPTkc2NCAgICAgICAgICAgICAg
ICAgU2VjdG9yU3RhcnQgPSBDZGJfTG9naWNhbEJsb2NrKFNyYik7CisgICAgVUxPTkcgICAgICAg
ICAgICAgICAgICAgU2VjdG9yc0xlZnQgPSBDZGJfVHJhbnNmZXJCbG9jayhTcmIpOworICAgIFVD
SEFSICAgICAgICAgICAgICAgICAgIE9wZXJhdGlvbjsKKyAgICBCT09MRUFOICAgICAgICAgICAg
ICAgICBSZWFkT25seTsKKyAgICBMSVNUX0VOVFJZICAgICAgICAgICAgICBMaXN0OwogCi0gICAg
ICAgIGlmICghUmluZ1ByZXBhcmVTZWdtZW50KFJpbmcsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFNlZ21lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNyYkV4
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZE9ubHksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFNlY3RvcnNMZWZ0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAmU2VjdG9yc05vdykpCi0gICAgICAgICAgICBnb3RvIGZhaWwyOworICAgIGNv
bnN0IFVMT05HICAgICAgICAgICAgIFNlY3RvclNpemUgPSBGcm9udGVuZEdldERpc2tJbmZvKEZy
b250ZW5kKS0+U2VjdG9yU2l6ZTsKKyAgICBjb25zdCBVTE9ORyAgICAgICAgICAgICBTZWN0b3Jz
UGVyUGFnZSA9IF9fU2VjdG9yc1BlclBhZ2UoU2VjdG9yU2l6ZSk7CisgICAgY29uc3QgVUxPTkcg
ICAgICAgICAgICAgTWF4SW5kaXJlY3QgPSBGcm9udGVuZEdldEZlYXR1cmVzKEZyb250ZW5kKS0+
SW5kaXJlY3Q7CiAKLSAgICAgICAgKlNlY3RvcnNEb25lICs9IFNlY3RvcnNOb3c7Ci0gICAgICAg
IFNlY3RvcnNMZWZ0ICAtPSBTZWN0b3JzTm93OwotICAgIH0KLSAgICBBU1NFUlQzVShSZXF1ZXN0
LT5OclNlZ21lbnRzLCA+LCAwKTsKLSAgICBBU1NFUlQzVShSZXF1ZXN0LT5OclNlZ21lbnRzLCA8
PSwgTWF4U2VnbWVudHMpOworICAgIEluaXRpYWxpemVMaXN0SGVhZCgmTGlzdCk7CiAKLSAgICBy
ZXR1cm4gVFJVRTsKKyAgICBfX09wZXJhdGlvbihDZGJfT3BlcmF0aW9uRXgoU3JiKSwgJk9wZXJh
dGlvbiwgJlJlYWRPbmx5KTsKIAotZmFpbDI6Ci1mYWlsMToKLSAgICByZXR1cm4gRkFMU0U7Ci19
CisgICAgU3JiLT5TcmJTdGF0dXMgPSBTUkJfU1RBVFVTX1BFTkRJTkc7CiAKLXN0YXRpYyBCT09M
RUFOCi1SaW5nUHJlcGFyZUJsa2lmSW5kaXJlY3QoCi0gICAgSU4gIFBYRU5WQkRfUklORyAgICBS
aW5nLAotICAgIElOICBQWEVOVkJEX1JFUVVFU1QgUmVxdWVzdAotICAgICkKLXsKLSAgICBVTE9O
RyAgICAgICAgICAgICAgIEluZGV4OwotICAgIFVMT05HICAgICAgICAgICAgICAgTnJTZWdtZW50
cyA9IDA7CisgICAgU3JiRXh0LT5SZXF1ZXN0Q291bnQgPSAwOwogCi0gICAgZm9yIChJbmRleCA9
IDA7Ci0gICAgICAgICAgICBJbmRleCA8IEJMS0lGX01BWF9JTkRJUkVDVF9QQUdFU19QRVJfUkVR
VUVTVCAmJgotICAgICAgICAgICAgTnJTZWdtZW50cyA8IFJlcXVlc3QtPk5yU2VnbWVudHM7Ci0g
ICAgICAgICAgICAgICAgKytJbmRleCkgewotICAgICAgICBQWEVOVkJEX0lORElSRUNUICAgIElu
ZGlyZWN0OworICAgIHdoaWxlIChTZWN0b3JzTGVmdCA+IDApIHsKKyAgICAgICAgVUxPTkcgICAg
ICAgICAgIEluZGV4OworICAgICAgICBVTE9ORyAgICAgICAgICAgTWF4U2VnbWVudHM7CisgICAg
ICAgIFBYRU5WQkRfUkVRVUVTVCBSZXF1ZXN0OwogCi0gICAgICAgIEluZGlyZWN0ID0gUmluZ0dl
dEluZGlyZWN0KFJpbmcpOwotICAgICAgICBpZiAoSW5kaXJlY3QgPT0gTlVMTCkKKyAgICAgICAg
UmVxdWVzdCA9IEJsa2lmUmluZ0dldFJlcXVlc3QoQmxraWZSaW5nKTsKKyAgICAgICAgaWYgKFJl
cXVlc3QgPT0gTlVMTCkKICAgICAgICAgICAgIGdvdG8gZmFpbDE7Ci0gICAgICAgIEluc2VydFRh
aWxMaXN0KCZSZXF1ZXN0LT5JbmRpcmVjdHMsICZJbmRpcmVjdC0+TGlzdEVudHJ5KTsKLQotICAg
ICAgICBOclNlZ21lbnRzICs9IFhFTlZCRF9NQVhfU0VHTUVOVFNfUEVSX1BBR0U7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIFRSVUU7Ci0KLWZhaWwxOgotICAgIHJldHVybiBGQUxTRTsKLX0KKyAgICAg
ICAgSW5zZXJ0VGFpbExpc3QoJkxpc3QsICZSZXF1ZXN0LT5MaXN0RW50cnkpOworICAgICAgICBT
cmJFeHQtPlJlcXVlc3RDb3VudCsrOwogCi1zdGF0aWMgRk9SQ0VJTkxJTkUgVUxPTkcKLVJpbmdV
c2VJbmRpcmVjdCgKLSAgICBJTiAgUFhFTlZCRF9SSU5HICAgIFJpbmcsCi0gICAgSU4gIFVMT05H
ICAgICAgICAgICBTZWN0b3JzTGVmdAotICAgICkKLXsKLSAgICBjb25zdCBVTE9ORyBTZWN0b3Jz
UGVyUGFnZSA9IF9fUmluZ1NlY3RvcnNQZXJQYWdlKEZyb250ZW5kR2V0RGlza0luZm8oUmluZy0+
RnJvbnRlbmQpLT5TZWN0b3JTaXplKTsKLSAgICBjb25zdCBVTE9ORyBNYXhJbmRpcmVjdFNlZ3Mg
PSBGcm9udGVuZEdldEZlYXR1cmVzKFJpbmctPkZyb250ZW5kKS0+SW5kaXJlY3Q7CisgICAgICAg
IFJlcXVlc3QtPlNyYkV4dCA9IFNyYkV4dDsKIAotICAgIGlmIChNYXhJbmRpcmVjdFNlZ3MgPD0g
QkxLSUZfTUFYX1NFR01FTlRTX1BFUl9SRVFVRVNUKQotICAgICAgICByZXR1cm4gQkxLSUZfTUFY
X1NFR01FTlRTX1BFUl9SRVFVRVNUOyAvLyBub3Qgc3VwcG9ydGVkCisgICAgICAgIE1heFNlZ21l
bnRzID0gX19Vc2VJbmRpcmVjdChTZWN0b3JzUGVyUGFnZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIE1heEluZGlyZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgU2VjdG9yc0xlZnQpOworCisgICAgICAgIFJlcXVlc3QtPk9wZXJhdGlvbiA9IE9w
ZXJhdGlvbjsKKyAgICAgICAgUmVxdWVzdC0+TnJTZWdtZW50cyA9IDA7CisgICAgICAgIFJlcXVl
c3QtPkZpcnN0U2VjdG9yID0gU2VjdG9yU3RhcnQ7CisKKyAgICAgICAgZm9yIChJbmRleCA9IDA7
CisgICAgICAgICAgICAgSW5kZXggPCBNYXhTZWdtZW50cyAmJgorICAgICAgICAgICAgIFNlY3Rv
cnNMZWZ0ID4gMDsKKyAgICAgICAgICAgICArK0luZGV4KSB7CisgICAgICAgICAgICBQWEVOVkJE
X1NFR01FTlQgU2VnbWVudDsKKyAgICAgICAgICAgIFVMT05HICAgICAgICAgICBTZWN0b3JzTm93
OworCisgICAgICAgICAgICBTZWdtZW50ID0gQmxraWZSaW5nR2V0U2VnbWVudChCbGtpZlJpbmcp
OworICAgICAgICAgICAgaWYgKFNlZ21lbnQgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3Rv
IGZhaWwyOworCisgICAgICAgICAgICBJbnNlcnRUYWlsTGlzdCgmUmVxdWVzdC0+U2VnbWVudHMs
ICZTZWdtZW50LT5MaXN0RW50cnkpOworICAgICAgICAgICAgKytSZXF1ZXN0LT5OclNlZ21lbnRz
OworCisgICAgICAgICAgICBpZiAoIUJsa2lmUmluZ1ByZXBhcmVTZWdtZW50KEJsa2lmUmluZywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VnbWVudCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3JiRXh0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkT25seSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgU2VjdG9yc0xlZnQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICZTZWN0b3JzTm93KSkKKyAgICAgICAgICAgICAgICBnb3Rv
IGZhaWwzOwogCi0gICAgaWYgKFNlY3RvcnNMZWZ0IDwgQkxLSUZfTUFYX1NFR01FTlRTX1BFUl9S
RVFVRVNUICogU2VjdG9yc1BlclBhZ2UpCi0gICAgICAgIHJldHVybiBCTEtJRl9NQVhfU0VHTUVO
VFNfUEVSX1JFUVVFU1Q7IC8vIGZpcnN0IGludG8gYSBzaW5nbGUgQkxLSUZfT1Bfe1JFQUQvV1JJ
VEV9CisgICAgICAgICAgICBTZWN0b3JzTGVmdCAtPSBTZWN0b3JzTm93OworICAgICAgICAgICAg
U2VjdG9yU3RhcnQgKz0gU2VjdG9yc05vdzsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlQzVShS
ZXF1ZXN0LT5OclNlZ21lbnRzLCA+LCAwKTsKKyAgICAgICAgQVNTRVJUM1UoUmVxdWVzdC0+TnJT
ZWdtZW50cywgPD0gLCBNYXhTZWdtZW50cyk7CiAKLSAgICByZXR1cm4gTWF4SW5kaXJlY3RTZWdz
OwotfQorICAgICAgICBpZiAoTWF4U2VnbWVudHMgPiBCTEtJRl9NQVhfU0VHTUVOVFNfUEVSX1JF
UVVFU1QpIHsKKyAgICAgICAgICAgIFVMT05HICAgICAgICAgICAgICAgTnJTZWdtZW50cyA9IDA7
CiAKLXN0YXRpYyBGT1JDRUlOTElORSBWT0lECi1SaW5nUXVldWVSZXF1ZXN0TGlzdCgKLSAgICBJ
TiAgUFhFTlZCRF9SSU5HICAgIFJpbmcsCi0gICAgSU4gIFBMSVNUX0VOVFJZICAgICBMaXN0Ci0g
ICAgKQotewotICAgIGZvciAoOzspIHsKLSAgICAgICAgUFhFTlZCRF9SRVFVRVNUIFJlcXVlc3Q7
Ci0gICAgICAgIFBMSVNUX0VOVFJZICAgICBMaXN0RW50cnk7CisgICAgICAgICAgICBmb3IgKElu
ZGV4ID0gMDsKKyAgICAgICAgICAgICAgICAgSW5kZXggPCBCTEtJRl9NQVhfSU5ESVJFQ1RfUEFH
RVNfUEVSX1JFUVVFU1QgJiYKKyAgICAgICAgICAgICAgICAgTnJTZWdtZW50cyA8IFJlcXVlc3Qt
Pk5yU2VnbWVudHM7CisgICAgICAgICAgICAgICAgICsrSW5kZXgpIHsKKyAgICAgICAgICAgICAg
ICBQWEVOVkJEX0lORElSRUNUICAgIEluZGlyZWN0OwogCi0gICAgICAgIExpc3RFbnRyeSA9IFJl
bW92ZUhlYWRMaXN0KExpc3QpOwotICAgICAgICBpZiAoTGlzdEVudHJ5ID09IExpc3QpCi0gICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBJbmRpcmVjdCA9IEJsa2lmUmluZ0dldElu
ZGlyZWN0KEJsa2lmUmluZyk7CisgICAgICAgICAgICAgICAgaWYgKEluZGlyZWN0ID09IE5VTEwp
CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbDM7CisgICAgICAgICAgICAgICAgSW5zZXJ0
VGFpbExpc3QoJlJlcXVlc3QtPkluZGlyZWN0cywgJkluZGlyZWN0LT5MaXN0RW50cnkpOwogCi0g
ICAgICAgIFJlcXVlc3QgPSBDT05UQUlOSU5HX1JFQ09SRChMaXN0RW50cnksIFhFTlZCRF9SRVFV
RVNULCBMaXN0RW50cnkpOwotICAgICAgICBfX1JpbmdJbmNCbGtpZk9wQ291bnQoUmluZywgUmVx
dWVzdCk7Ci0gICAgICAgIFF1ZXVlQXBwZW5kKCZSaW5nLT5QcmVwYXJlZFJlcXMsICZSZXF1ZXN0
LT5MaXN0RW50cnkpOworICAgICAgICAgICAgICAgIE5yU2VnbWVudHMgKz0gWEVOVkJEX01BWF9T
RUdNRU5UU19QRVJfUEFHRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KLX0KLQot
c3RhdGljIEZPUkNFSU5MSU5FIFZPSUQKLVJpbmdDYW5jZWxSZXF1ZXN0TGlzdCgKLSAgICBJTiAg
UFhFTlZCRF9SSU5HICAgIFJpbmcsCi0gICAgSU4gIFBMSVNUX0VOVFJZICAgICBMaXN0Ci0gICAg
KQotewotICAgIGZvciAoOzspIHsKLSAgICAgICAgUFhFTlZCRF9SRVFVRVNUIFJlcXVlc3Q7Ci0g
ICAgICAgIFBMSVNUX0VOVFJZICAgICBMaXN0RW50cnk7CiAKLSAgICAgICAgTGlzdEVudHJ5ID0g
UmVtb3ZlSGVhZExpc3QoTGlzdCk7Ci0gICAgICAgIGlmIChMaXN0RW50cnkgPT0gTGlzdCkKLSAg
ICAgICAgICAgIGJyZWFrOworICAgIEJsa2lmUmluZ1F1ZXVlUmVxdWVzdHMoQmxraWZSaW5nLCAm
TGlzdCk7CisgICAgcmV0dXJuIFNUQVRVU19TVUNDRVNTOwogCi0gICAgICAgIFJlcXVlc3QgPSBD
T05UQUlOSU5HX1JFQ09SRChMaXN0RW50cnksIFhFTlZCRF9SRVFVRVNULCBMaXN0RW50cnkpOwot
ICAgICAgICBSaW5nUHV0UmVxdWVzdChSaW5nLCBSZXF1ZXN0KTsKLSAgICB9CitmYWlsMzoKK2Zh
aWwyOgorZmFpbDE6CisgICAgQmxraWZSaW5nVW5wcmVwYXJlUmVxdWVzdChCbGtpZlJpbmcsICZM
aXN0KTsKKyAgICBTcmJFeHQtPlJlcXVlc3RDb3VudCA9IDA7CisgICAgU3JiLT5TcmJTdGF0dXMg
PSBTUkJfU1RBVFVTX0VSUk9SOworICAgIHJldHVybiBTVEFUVVNfVU5TVUNDRVNTRlVMOwogfQog
Ci1zdGF0aWMgQk9PTEVBTgotUmluZ1ByZXBhcmVSZWFkV3JpdGUoCi0gICAgSU4gIFBYRU5WQkRf
UklORyAgICAgICAgUmluZywKK3N0YXRpYyBOVFNUQVRVUworQmxraWZSaW5nUHJlcGFyZVVubWFw
KAorICAgIElOICBQWEVOVkJEX0JMS0lGX1JJTkcgIEJsa2lmUmluZywKICAgICBJTiAgUFhFTlZC
RF9TUkJFWFQgICAgICBTcmJFeHQKICAgICApCiB7CiAgICAgUFNDU0lfUkVRVUVTVF9CTE9DSyAg
ICAgU3JiID0gU3JiRXh0LT5TcmI7Ci0gICAgVUxPTkc2NCAgICAgICAgICAgICAgICAgU2VjdG9y
U3RhcnQgPSBDZGJfTG9naWNhbEJsb2NrKFNyYik7Ci0gICAgVUxPTkcgICAgICAgICAgICAgICAg
ICAgU2VjdG9yc0xlZnQgPSBDZGJfVHJhbnNmZXJCbG9jayhTcmIpOworICAgIFBVTk1BUF9MSVNU
X0hFQURFUiAgICAgIFVubWFwID0gU3JiLT5EYXRhQnVmZmVyOworICAgIFVMT05HICAgICAgICAg
ICAgICAgICAgIENvdW50OworICAgIFVMT05HICAgICAgICAgICAgICAgICAgIEluZGV4OwogICAg
IExJU1RfRU5UUlkgICAgICAgICAgICAgIExpc3Q7CiAKKyAgICBJbml0aWFsaXplTGlzdEhlYWQo
Jkxpc3QpOworCisgICAgQ291bnQgPSBfYnl0ZXN3YXBfdXNob3J0KCooUFVTSE9SVClVbm1hcC0+
QmxvY2tEZXNjckRhdGFMZW5ndGgpIC8gc2l6ZW9mKFVOTUFQX0JMT0NLX0RFU0NSSVBUT1IpOwog
ICAgIFNyYi0+U3JiU3RhdHVzID0gU1JCX1NUQVRVU19QRU5ESU5HOwogCi0gICAgSW5pdGlhbGl6
ZUxpc3RIZWFkKCZMaXN0KTsKICAgICBTcmJFeHQtPlJlcXVlc3RDb3VudCA9IDA7CiAKLSAgICB3
aGlsZSAoU2VjdG9yc0xlZnQgPiAwKSB7Ci0gICAgICAgIFVMT05HICAgICAgICAgICBNYXhTZWdt
ZW50czsKLSAgICAgICAgVUxPTkcgICAgICAgICAgIFNlY3RvcnNEb25lID0gMDsKLSAgICAgICAg
UFhFTlZCRF9SRVFVRVNUIFJlcXVlc3Q7CisgICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgQ291
bnQ7ICsrSW5kZXgpIHsKKyAgICAgICAgUFVOTUFQX0JMT0NLX0RFU0NSSVBUT1IgRGVzY3IgPSAm
VW5tYXAtPkRlc2NyaXB0b3JzW0luZGV4XTsKKyAgICAgICAgUFhFTlZCRF9SRVFVRVNUICAgICAg
ICAgUmVxdWVzdDsKIAotICAgICAgICBSZXF1ZXN0ID0gUmluZ0dldFJlcXVlc3QoUmluZyk7Cisg
ICAgICAgIFJlcXVlc3QgPSBCbGtpZlJpbmdHZXRSZXF1ZXN0KEJsa2lmUmluZyk7CiAgICAgICAg
IGlmIChSZXF1ZXN0ID09IE5VTEwpCiAgICAgICAgICAgICBnb3RvIGZhaWwxOwogICAgICAgICBJ
bnNlcnRUYWlsTGlzdCgmTGlzdCwgJlJlcXVlc3QtPkxpc3RFbnRyeSk7Ci0gICAgICAgIEludGVy
bG9ja2VkSW5jcmVtZW50KCZTcmJFeHQtPlJlcXVlc3RDb3VudCk7CisgICAgICAgIFNyYkV4dC0+
UmVxdWVzdENvdW50Kys7CiAKICAgICAgICAgUmVxdWVzdC0+U3JiRXh0ID0gU3JiRXh0OwotICAg
ICAgICBNYXhTZWdtZW50cyA9IFJpbmdVc2VJbmRpcmVjdChSaW5nLCBTZWN0b3JzTGVmdCk7Ci0K
LSAgICAgICAgaWYgKCFSaW5nUHJlcGFyZUJsa2lmUmVhZFdyaXRlKFJpbmcsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXF1ZXN0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgU3JiRXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgTWF4U2VnbWVudHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBTZWN0b3JTdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFNlY3RvcnNMZWZ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
JlNlY3RvcnNEb25lKSkKLSAgICAgICAgICAgIGdvdG8gZmFpbDI7Ci0KLSAgICAgICAgaWYgKE1h
eFNlZ21lbnRzID4gQkxLSUZfTUFYX1NFR01FTlRTX1BFUl9SRVFVRVNUKSB7Ci0gICAgICAgICAg
ICBpZiAoIVJpbmdQcmVwYXJlQmxraWZJbmRpcmVjdChSaW5nLCBSZXF1ZXN0KSkKLSAgICAgICAg
ICAgICAgICBnb3RvIGZhaWwzOwotICAgICAgICB9Ci0KLSAgICAgICAgU2VjdG9yc0xlZnQgLT0g
U2VjdG9yc0RvbmU7Ci0gICAgICAgIFNlY3RvclN0YXJ0ICs9IFNlY3RvcnNEb25lOworICAgICAg
ICBSZXF1ZXN0LT5PcGVyYXRpb24gPSBCTEtJRl9PUF9ESVNDQVJEOworICAgICAgICBSZXF1ZXN0
LT5GaXJzdFNlY3RvciA9IF9ieXRlc3dhcF91aW50NjQoKihQVUxPTkc2NClEZXNjci0+U3RhcnRp
bmdMYmEpOworICAgICAgICBSZXF1ZXN0LT5OclNlY3RvcnMgPSBfYnl0ZXN3YXBfdWxvbmcoKihQ
VUxPTkcpRGVzY3ItPkxiYUNvdW50KTsKKyAgICAgICAgUmVxdWVzdC0+RmxhZ3MgPSAwOwogICAg
IH0KIAotICAgIFJpbmdRdWV1ZVJlcXVlc3RMaXN0KFJpbmcsICZMaXN0KTsKLSAgICByZXR1cm4g
VFJVRTsKKyAgICBCbGtpZlJpbmdRdWV1ZVJlcXVlc3RzKEJsa2lmUmluZywgJkxpc3QpOworICAg
IHJldHVybiBTVEFUVVNfU1VDQ0VTUzsKIAotZmFpbDM6Ci1mYWlsMjoKIGZhaWwxOgotICAgIFJp
bmdDYW5jZWxSZXF1ZXN0TGlzdChSaW5nLCAmTGlzdCk7CisgICAgQmxraWZSaW5nVW5wcmVwYXJl
UmVxdWVzdChCbGtpZlJpbmcsICZMaXN0KTsKICAgICBTcmJFeHQtPlJlcXVlc3RDb3VudCA9IDA7
CiAgICAgU3JiLT5TcmJTdGF0dXMgPSBTUkJfU1RBVFVTX0VSUk9SOwotICAgIHJldHVybiBGQUxT
RTsKKyAgICByZXR1cm4gU1RBVFVTX1VOU1VDQ0VTU0ZVTDsKIH0KIAotc3RhdGljIEJPT0xFQU4K
LVJpbmdQcmVwYXJlU3luY0NhY2hlKAotICAgIElOICBQWEVOVkJEX1JJTkcgICAgICAgIFJpbmcs
CitzdGF0aWMgTlRTVEFUVVMKK0Jsa2lmUmluZ1ByZXBhcmVTeW5jQ2FjaGUoCisgICAgSU4gIFBY
RU5WQkRfQkxLSUZfUklORyAgQmxraWZSaW5nLAogICAgIElOICBQWEVOVkJEX1NSQkVYVCAgICAg
IFNyYkV4dAogICAgICkKIHsKKyAgICBQWEVOVkJEX1JJTkcgICAgICAgICAgICBSaW5nID0gQmxr
aWZSaW5nLT5SaW5nOworICAgIFBYRU5WQkRfRlJPTlRFTkQgICAgICAgIEZyb250ZW5kID0gUmlu
Zy0+RnJvbnRlbmQ7CiAgICAgUFNDU0lfUkVRVUVTVF9CTE9DSyAgICAgU3JiID0gU3JiRXh0LT5T
cmI7CiAgICAgUFhFTlZCRF9SRVFVRVNUICAgICAgICAgUmVxdWVzdDsKLSAgICBMSVNUX0VOVFJZ
ICAgICAgICAgICAgICBMaXN0OwogICAgIFVDSEFSICAgICAgICAgICAgICAgICAgIE9wZXJhdGlv
bjsKKyAgICBMSVNUX0VOVFJZICAgICAgICAgICAgICBMaXN0OwogCisgICAgSW5pdGlhbGl6ZUxp
c3RIZWFkKCZMaXN0KTsKICAgICBTcmItPlNyYlN0YXR1cyA9IFNSQl9TVEFUVVNfUEVORElORzsK
IAotICAgIGlmIChGcm9udGVuZEdldERpc2tJbmZvKFJpbmctPkZyb250ZW5kKS0+Rmx1c2hDYWNo
ZSkKKyAgICBpZiAoRnJvbnRlbmRHZXREaXNrSW5mbyhGcm9udGVuZCktPkZsdXNoQ2FjaGUpCiAg
ICAgICAgIE9wZXJhdGlvbiA9IEJMS0lGX09QX0ZMVVNIX0RJU0tDQUNIRTsKICAgICBlbHNlCiAg
ICAgICAgIE9wZXJhdGlvbiA9IEJMS0lGX09QX1dSSVRFX0JBUlJJRVI7CiAKLSAgICBJbml0aWFs
aXplTGlzdEhlYWQoJkxpc3QpOwogICAgIFNyYkV4dC0+UmVxdWVzdENvdW50ID0gMDsKIAotICAg
IFJlcXVlc3QgPSBSaW5nR2V0UmVxdWVzdChSaW5nKTsKKyAgICBSZXF1ZXN0ID0gQmxraWZSaW5n
R2V0UmVxdWVzdChCbGtpZlJpbmcpOwogICAgIGlmIChSZXF1ZXN0ID09IE5VTEwpCiAgICAgICAg
IGdvdG8gZmFpbDE7CiAgICAgSW5zZXJ0VGFpbExpc3QoJkxpc3QsICZSZXF1ZXN0LT5MaXN0RW50
cnkpOwotICAgIEludGVybG9ja2VkSW5jcmVtZW50KCZTcmJFeHQtPlJlcXVlc3RDb3VudCk7Cisg
ICAgU3JiRXh0LT5SZXF1ZXN0Q291bnQrKzsKIAotICAgIFJlcXVlc3QtPlNyYkV4dCAgICAgPSBT
cmJFeHQ7Ci0gICAgUmVxdWVzdC0+T3BlcmF0aW9uICA9IE9wZXJhdGlvbjsKKyAgICBSZXF1ZXN0
LT5TcmJFeHQgPSBTcmJFeHQ7CisgICAgUmVxdWVzdC0+T3BlcmF0aW9uID0gT3BlcmF0aW9uOwog
ICAgIFJlcXVlc3QtPkZpcnN0U2VjdG9yID0gQ2RiX0xvZ2ljYWxCbG9jayhTcmIpOwogCi0gICAg
UmluZ1F1ZXVlUmVxdWVzdExpc3QoUmluZywgJkxpc3QpOwotICAgIHJldHVybiBUUlVFOworICAg
IEJsa2lmUmluZ1F1ZXVlUmVxdWVzdHMoQmxraWZSaW5nLCAmTGlzdCk7CisgICAgcmV0dXJuIFNU
QVRVU19TVUNDRVNTOwogCiBmYWlsMToKLSAgICBSaW5nQ2FuY2VsUmVxdWVzdExpc3QoUmluZywg
Jkxpc3QpOworICAgIEJsa2lmUmluZ1VucHJlcGFyZVJlcXVlc3QoQmxraWZSaW5nLCAmTGlzdCk7
CiAgICAgU3JiRXh0LT5SZXF1ZXN0Q291bnQgPSAwOwogICAgIFNyYi0+U3JiU3RhdHVzID0gU1JC
X1NUQVRVU19FUlJPUjsKLSAgICByZXR1cm4gRkFMU0U7CisgICAgcmV0dXJuIFNUQVRVU19VTlNV
Q0NFU1NGVUw7CiB9CiAKLXN0YXRpYyBCT09MRUFOCi1SaW5nUHJlcGFyZVVubWFwKAotICAgIElO
ICBQWEVOVkJEX1JJTkcgICAgICAgIFJpbmcsCitzdGF0aWMgREVDTFNQRUNfTk9JTkxJTkUgTlRT
VEFUVVMKK19fQmxraWZSaW5nUHJlcGFyZVNyYigKKyAgICBJTiAgUFhFTlZCRF9CTEtJRl9SSU5H
ICBCbGtpZlJpbmcsCiAgICAgSU4gIFBYRU5WQkRfU1JCRVhUICAgICAgU3JiRXh0CiAgICAgKQot
ewotICAgIFBTQ1NJX1JFUVVFU1RfQkxPQ0sgICAgIFNyYiA9IFNyYkV4dC0+U3JiOwotICAgIFBV
Tk1BUF9MSVNUX0hFQURFUiAgICAgIFVubWFwID0gU3JiLT5EYXRhQnVmZmVyOwotCVVMT05HICAg
ICAgICAgICAgICAgICAgIENvdW50ID0gX2J5dGVzd2FwX3VzaG9ydCgqKFBVU0hPUlQpVW5tYXAt
PkJsb2NrRGVzY3JEYXRhTGVuZ3RoKSAvIHNpemVvZihVTk1BUF9CTE9DS19ERVNDUklQVE9SKTsK
LSAgICBVTE9ORyAgICAgICAgICAgICAgICAgICBJbmRleDsKLSAgICBMSVNUX0VOVFJZICAgICAg
ICAgICAgICBMaXN0OwotCi0gICAgU3JiLT5TcmJTdGF0dXMgPSBTUkJfU1RBVFVTX1BFTkRJTkc7
Ci0KLSAgICBJbml0aWFsaXplTGlzdEhlYWQoJkxpc3QpOwotICAgIFNyYkV4dC0+UmVxdWVzdENv
dW50ID0gMDsKLQotICAgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IENvdW50OyArK0luZGV4KSB7
Ci0gICAgICAgIFBVTk1BUF9CTE9DS19ERVNDUklQVE9SIERlc2NyID0gJlVubWFwLT5EZXNjcmlw
dG9yc1tJbmRleF07Ci0gICAgICAgIFBYRU5WQkRfUkVRVUVTVCAgICAgICAgIFJlcXVlc3Q7Ci0K
LSAgICAgICAgUmVxdWVzdCA9IFJpbmdHZXRSZXF1ZXN0KFJpbmcpOwotICAgICAgICBpZiAoUmVx
dWVzdCA9PSBOVUxMKQotICAgICAgICAgICAgZ290byBmYWlsMTsKLSAgICAgICAgSW5zZXJ0VGFp
bExpc3QoJkxpc3QsICZSZXF1ZXN0LT5MaXN0RW50cnkpOwotICAgICAgICBJbnRlcmxvY2tlZElu
Y3JlbWVudCgmU3JiRXh0LT5SZXF1ZXN0Q291bnQpOwotCi0gICAgICAgIFJlcXVlc3QtPlNyYkV4
dCAgICAgICAgID0gU3JiRXh0OwotICAgICAgICBSZXF1ZXN0LT5PcGVyYXRpb24gICAgICA9IEJM
S0lGX09QX0RJU0NBUkQ7Ci0gICAgICAgIFJlcXVlc3QtPkZpcnN0U2VjdG9yICAgID0gX2J5dGVz
d2FwX3VpbnQ2NCgqKFBVTE9ORzY0KURlc2NyLT5TdGFydGluZ0xiYSk7Ci0gICAgICAgIFJlcXVl
c3QtPk5yU2VjdG9ycyAgICAgID0gX2J5dGVzd2FwX3Vsb25nKCooUFVMT05HKURlc2NyLT5MYmFD
b3VudCk7Ci0gICAgICAgIFJlcXVlc3QtPkZsYWdzICAgICAgICAgID0gMDsKLSAgICB9Ci0KLSAg
ICBSaW5nUXVldWVSZXF1ZXN0TGlzdChSaW5nLCAmTGlzdCk7Ci0gICAgcmV0dXJuIFRSVUU7Ci0K
LWZhaWwxOgotICAgIFJpbmdDYW5jZWxSZXF1ZXN0TGlzdChSaW5nLCAmTGlzdCk7Ci0gICAgU3Ji
RXh0LT5SZXF1ZXN0Q291bnQgPSAwOwotICAgIFNyYi0+U3JiU3RhdHVzID0gU1JCX1NUQVRVU19F
UlJPUjsKLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyBGT1JDRUlOTElORSBCT09MRUFO
Ci1SaW5nUHJlcGFyZVJlcXVlc3QoCi0gICAgSU4gIFBYRU5WQkRfUklORyAgICBSaW5nLAotICAg
IElOICBQWEVOVkJEX1NSQkVYVCAgU3JiRXh0Ci0gICAgKQogewogICAgIHN3aXRjaCAoQ2RiX09w
ZXJhdGlvbkV4KFNyYkV4dC0+U3JiKSkgewogICAgIGNhc2UgU0NTSU9QX1JFQUQ6CiAgICAgY2Fz
ZSBTQ1NJT1BfV1JJVEU6Ci0gICAgICAgIHJldHVybiBSaW5nUHJlcGFyZVJlYWRXcml0ZShSaW5n
LCBTcmJFeHQpOworICAgICAgICByZXR1cm4gQmxraWZSaW5nUHJlcGFyZVJlYWRXcml0ZShCbGtp
ZlJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNyYkV4dCk7
CiAKICAgICBjYXNlIFNDU0lPUF9TWU5DSFJPTklaRV9DQUNIRToKLSAgICAgICAgcmV0dXJuIFJp
bmdQcmVwYXJlU3luY0NhY2hlKFJpbmcsIFNyYkV4dCk7CisgICAgICAgIHJldHVybiBCbGtpZlJp
bmdQcmVwYXJlU3luY0NhY2hlKEJsa2lmUmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgU3JiRXh0KTsKIAogICAgIGNhc2UgU0NTSU9QX1VOTUFQOgotICAgICAg
ICByZXR1cm4gUmluZ1ByZXBhcmVVbm1hcChSaW5nLCBTcmJFeHQpOworICAgICAgICByZXR1cm4g
QmxraWZSaW5nUHJlcGFyZVVubWFwKEJsa2lmUmluZywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBTcmJFeHQpOwogCiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUKEZB
TFNFKTsKLSAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICByZXR1cm4gU1RBVFVTX05PVF9T
VVBQT1JURUQ7CiAgICAgfQogfQogCi1zdGF0aWMgQk9PTEVBTgotUmluZ1N1Ym1pdCgKLSAgICBJ
TiAgUFhFTlZCRF9SSU5HICAgIFJpbmcsCi0gICAgSU4gIFBYRU5WQkRfUkVRVUVTVCBSZXF1ZXN0
CitzdGF0aWMgRk9SQ0VJTkxJTkUgVk9JRAorX19CbGtpZlJpbmdJbnNlcnRSZXF1ZXN0KAorICAg
IElOICBQWEVOVkJEX0JMS0lGX1JJTkcgIEJsa2lmUmluZywKKyAgICBJTiAgUFhFTlZCRF9SRVFV
RVNUICAgICBSZXF1ZXN0LAorICAgIElOICBibGtpZl9yZXF1ZXN0X3QgICAgICpyZXEKICAgICAp
CiB7Ci0gICAgS0lSUUwgICAgICAgICAgICAgICBJcnFsOwotICAgIGJsa2lmX3JlcXVlc3RfdCog
ICAgcmVxOwotICAgIEJPT0xFQU4gICAgICAgICAgICAgTm90aWZ5OwotCi0gICAgS2VBY3F1aXJl
U3BpbkxvY2soJlJpbmctPkxvY2ssICZJcnFsKTsKLSAgICBpZiAoUklOR19GVUxMKCZSaW5nLT5G
cm9udCkpIHsKLSAgICAgICAgS2VSZWxlYXNlU3BpbkxvY2soJlJpbmctPkxvY2ssIElycWwpOwot
ICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotCi0gICAgcmVxID0gUklOR19HRVRfUkVRVUVT
VCgmUmluZy0+RnJvbnQsIFJpbmctPkZyb250LnJlcV9wcm9kX3B2dCk7Ci0gICAgX19SaW5nSW5z
ZXJ0KFJpbmcsIFJlcXVlc3QsIHJlcSk7Ci0gICAgS2VNZW1vcnlCYXJyaWVyKCk7Ci0gICAgKytS
aW5nLT5Gcm9udC5yZXFfcHJvZF9wdnQ7Ci0KLSAgICBSSU5HX1BVU0hfUkVRVUVTVFNfQU5EX0NI
RUNLX05PVElGWSgmUmluZy0+RnJvbnQsIE5vdGlmeSk7Ci0gICAgS2VSZWxlYXNlU3BpbkxvY2so
JlJpbmctPkxvY2ssIElycWwpOworICAgIFBYRU5WQkRfUklORyAgICAgICAgICAgIFJpbmcgPSBC
bGtpZlJpbmctPlJpbmc7CisgICAgUFhFTlZCRF9GUk9OVEVORCAgICAgICAgRnJvbnRlbmQgPSBS
aW5nLT5Gcm9udGVuZDsKKyAgICBQWEVOVkJEX0dSQU5URVIgICAgICAgICBHcmFudGVyID0gRnJv
bnRlbmRHZXRHcmFudGVyKEZyb250ZW5kKTsKIAotICAgIGlmIChOb3RpZnkpIHsKLSAgICAgICAg
aWYgKCFSaW5nLT5FbmFibGVkKQotICAgICAgICAgICAgcmV0dXJuIFRSVUU7Ci0KLSAgICAgICAg
WEVOQlVTX0VWVENITihTZW5kLAotICAgICAgICAgICAgICAgICAgICAgICZSaW5nLT5FdnRjaG5J
bnRlcmZhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgUmluZy0+Q2hhbm5lbCk7Ci0gICAgfQor
ICAgIHN3aXRjaCAoUmVxdWVzdC0+T3BlcmF0aW9uKSB7CisgICAgY2FzZSBCTEtJRl9PUF9SRUFE
OgorICAgIGNhc2UgQkxLSUZfT1BfV1JJVEU6CisgICAgICAgIGlmIChSZXF1ZXN0LT5OclNlZ21l
bnRzID4gQkxLSUZfTUFYX1NFR01FTlRTX1BFUl9SRVFVRVNUKSB7CisgICAgICAgICAgICAvLyBJ
bmRpcmVjdAorICAgICAgICAgICAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgIFBhZ2VJZHg7
CisgICAgICAgICAgICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgU2VnSWR4OworICAgICAg
ICAgICAgUExJU1RfRU5UUlkgICAgICAgICAgICAgICAgIFBhZ2VFbnRyeTsKKyAgICAgICAgICAg
IFBMSVNUX0VOVFJZICAgICAgICAgICAgICAgICBTZWdFbnRyeTsKKyAgICAgICAgICAgIGJsa2lm
X3JlcXVlc3RfaW5kaXJlY3RfdCogICByZXFfaW5kaXJlY3Q7CiAKLSAgICByZXR1cm4gVFJVRTsK
LX0KKyAgICAgICAgICAgIHJlcV9pbmRpcmVjdCA9IChibGtpZl9yZXF1ZXN0X2luZGlyZWN0X3Qq
KXJlcTsKKyAgICAgICAgICAgIHJlcV9pbmRpcmVjdC0+b3BlcmF0aW9uID0gQkxLSUZfT1BfSU5E
SVJFQ1Q7CisgICAgICAgICAgICByZXFfaW5kaXJlY3QtPmluZGlyZWN0X29wID0gUmVxdWVzdC0+
T3BlcmF0aW9uOworICAgICAgICAgICAgcmVxX2luZGlyZWN0LT5ucl9zZWdtZW50cyA9IFJlcXVl
c3QtPk5yU2VnbWVudHM7CisgICAgICAgICAgICByZXFfaW5kaXJlY3QtPmlkID0gKFVMT05HNjQp
KFVMT05HX1BUUilSZXF1ZXN0OworICAgICAgICAgICAgcmVxX2luZGlyZWN0LT5zZWN0b3JfbnVt
YmVyID0gUmVxdWVzdC0+Rmlyc3RTZWN0b3I7CisgICAgICAgICAgICByZXFfaW5kaXJlY3QtPmhh
bmRsZSA9IChVU0hPUlQpRnJvbnRlbmRHZXREZXZpY2VJZChGcm9udGVuZCk7CiAKLXN0YXRpYyBG
T1JDRUlOTElORSBCT09MRUFOCi1SaW5nU3VibWl0UmVxdWVzdHMoCi0gICAgSU4gIFBYRU5WQkRf
UklORyAgICBSaW5nCi0gICAgKQotewotICAgIGlmICghUmluZy0+RW5hYmxlZCkgewotICAgICAg
ICBpZiAoUXVldWVDb3VudCgmUmluZy0+UHJlcGFyZWRSZXFzKSkKLSAgICAgICAgICAgIFdhcm5p
bmcoIlRhcmdldFslZF0gOiBQYXVzZWQsIG5vdCBzdWJtaXR0aW5nIG5ldyByZXF1ZXN0cyAoJXUp
XG4iLAotICAgICAgICAgICAgICAgICAgICBGcm9udGVuZEdldFRhcmdldElkKFJpbmctPkZyb250
ZW5kKSwKLSAgICAgICAgICAgICAgICAgICAgUXVldWVDb3VudCgmUmluZy0+UHJlcGFyZWRSZXFz
KSk7Ci0gICAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9CisgICAgICAgICAgICBmb3IgKFBhZ2VJ
ZHggPSAwLAorICAgICAgICAgICAgICAgICBQYWdlRW50cnkgPSBSZXF1ZXN0LT5JbmRpcmVjdHMu
RmxpbmssCisgICAgICAgICAgICAgICAgIFNlZ0VudHJ5ID0gUmVxdWVzdC0+U2VnbWVudHMuRmxp
bms7CisgICAgICAgICAgICAgICAgIFBhZ2VJZHggPCBCTEtJRl9NQVhfSU5ESVJFQ1RfUEFHRVNf
UEVSX1JFUVVFU1QgJiYKKyAgICAgICAgICAgICAgICAgUGFnZUVudHJ5ICE9ICZSZXF1ZXN0LT5J
bmRpcmVjdHMgJiYKKyAgICAgICAgICAgICAgICAgU2VnRW50cnkgIT0gJlJlcXVlc3QtPlNlZ21l
bnRzOworICAgICAgICAgICAgICAgICArK1BhZ2VJZHgsIFBhZ2VFbnRyeSA9IFBhZ2VFbnRyeS0+
RmxpbmspIHsKKyAgICAgICAgICAgICAgICBQWEVOVkJEX0lORElSRUNUIFBhZ2UgPSBDT05UQUlO
SU5HX1JFQ09SRChQYWdlRW50cnksIFhFTlZCRF9JTkRJUkVDVCwgTGlzdEVudHJ5KTsKIAotICAg
IGZvciAoOzspIHsKLSAgICAgICAgUFhFTlZCRF9SRVFVRVNUIFJlcXVlc3Q7Ci0gICAgICAgIFBM
SVNUX0VOVFJZICAgICBMaXN0RW50cnk7CisgICAgICAgICAgICAgICAgcmVxX2luZGlyZWN0LT5p
bmRpcmVjdF9ncmVmc1tQYWdlSWR4XSA9IEdyYW50ZXJSZWZlcmVuY2UoR3JhbnRlciwgUGFnZS0+
R3JhbnQpOwogCi0gICAgICAgIExpc3RFbnRyeSA9IFF1ZXVlUG9wKCZSaW5nLT5QcmVwYXJlZFJl
cXMpOwotICAgICAgICBpZiAoTGlzdEVudHJ5ID09IE5VTEwpCi0gICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICBmb3IgKFNlZ0lkeCA9IDA7CisgICAgICAgICAgICAgICAgICAgICBT
ZWdJZHggPCBYRU5WQkRfTUFYX1NFR01FTlRTX1BFUl9QQUdFICYmCisgICAgICAgICAgICAgICAg
ICAgICBTZWdFbnRyeSAhPSAmUmVxdWVzdC0+U2VnbWVudHM7CisgICAgICAgICAgICAgICAgICAg
ICArK1NlZ0lkeCwgU2VnRW50cnkgPSBTZWdFbnRyeS0+RmxpbmspIHsKKyAgICAgICAgICAgICAg
ICAgICAgUFhFTlZCRF9TRUdNRU5UIFNlZ21lbnQgPSBDT05UQUlOSU5HX1JFQ09SRChTZWdFbnRy
eSwgWEVOVkJEX1NFR01FTlQsIExpc3RFbnRyeSk7CisKKyAgICAgICAgICAgICAgICAgICAgUGFn
ZS0+UGFnZVtTZWdJZHhdLkdyYW50UmVmID0gR3JhbnRlclJlZmVyZW5jZShHcmFudGVyLCBTZWdt
ZW50LT5HcmFudCk7CisgICAgICAgICAgICAgICAgICAgIFBhZ2UtPlBhZ2VbU2VnSWR4XS5GaXJz
dCA9IFNlZ21lbnQtPkZpcnN0U2VjdG9yOworICAgICAgICAgICAgICAgICAgICBQYWdlLT5QYWdl
W1NlZ0lkeF0uTGFzdCA9IFNlZ21lbnQtPkxhc3RTZWN0b3I7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgSW50ZXJsb2NrZWRJbmNyZW1lbnQoJlJpbmctPlN0
YXRzWyhSZXF1ZXN0LT5PcGVyYXRpb24gPT0gQkxLSUZfT1BfUkVBRCkgPworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgWEVOVkJEX1NUQVRfQkxLSUZfT1BfUkVBRF9JTkRJUkVDVCA6
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYRU5WQkRfU1RBVF9CTEtJRl9PUF9X
UklURV9JTkRJUkVDVF0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gRGlyZWN0
CisgICAgICAgICAgICBVTE9ORyAgICAgICAgICAgSW5kZXg7CisgICAgICAgICAgICBQTElTVF9F
TlRSWSAgICAgRW50cnk7CiAKLSAgICAgICAgUmVxdWVzdCA9IENPTlRBSU5JTkdfUkVDT1JEKExp
c3RFbnRyeSwgWEVOVkJEX1JFUVVFU1QsIExpc3RFbnRyeSk7CisgICAgICAgICAgICByZXEtPm9w
ZXJhdGlvbiA9IFJlcXVlc3QtPk9wZXJhdGlvbjsKKyAgICAgICAgICAgIHJlcS0+bnJfc2VnbWVu
dHMgPSAoVUNIQVIpUmVxdWVzdC0+TnJTZWdtZW50czsKKyAgICAgICAgICAgIHJlcS0+aGFuZGxl
ID0gKFVTSE9SVClGcm9udGVuZEdldERldmljZUlkKEZyb250ZW5kKTsKKyAgICAgICAgICAgIHJl
cS0+aWQgPSAoVUxPTkc2NCkoVUxPTkdfUFRSKVJlcXVlc3Q7CisgICAgICAgICAgICByZXEtPnNl
Y3Rvcl9udW1iZXIgPSBSZXF1ZXN0LT5GaXJzdFNlY3RvcjsKIAotICAgICAgICBRdWV1ZUFwcGVu
ZCgmUmluZy0+U3VibWl0dGVkUmVxcywgJlJlcXVlc3QtPkxpc3RFbnRyeSk7Ci0gICAgICAgIEtl
TWVtb3J5QmFycmllcigpOworICAgICAgICAgICAgZm9yIChJbmRleCA9IDAsIEVudHJ5ID0gUmVx
dWVzdC0+U2VnbWVudHMuRmxpbms7CisgICAgICAgICAgICAgICAgIEluZGV4IDwgQkxLSUZfTUFY
X1NFR01FTlRTX1BFUl9SRVFVRVNUICYmCisgICAgICAgICAgICAgICAgIEVudHJ5ICE9ICZSZXF1
ZXN0LT5TZWdtZW50czsKKyAgICAgICAgICAgICAgICAgKytJbmRleCwgRW50cnkgPSBFbnRyeS0+
RmxpbmspIHsKKyAgICAgICAgICAgICAgICBQWEVOVkJEX1NFR01FTlQgU2VnbWVudCA9IENPTlRB
SU5JTkdfUkVDT1JEKEVudHJ5LCBYRU5WQkRfU0VHTUVOVCwgTGlzdEVudHJ5KTsKKyAgICAgICAg
ICAgICAgICByZXEtPnNlZ1tJbmRleF0uZ3JlZiA9IEdyYW50ZXJSZWZlcmVuY2UoR3JhbnRlciwg
U2VnbWVudC0+R3JhbnQpOworICAgICAgICAgICAgICAgIHJlcS0+c2VnW0luZGV4XS5maXJzdF9z
ZWN0ID0gU2VnbWVudC0+Rmlyc3RTZWN0b3I7CisgICAgICAgICAgICAgICAgcmVxLT5zZWdbSW5k
ZXhdLmxhc3Rfc2VjdCA9IFNlZ21lbnQtPkxhc3RTZWN0b3I7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBJbnRlcmxvY2tlZEluY3JlbWVudCgmUmluZy0+U3RhdHNbKFJlcXVlc3QtPk9wZXJh
dGlvbiA9PSBCTEtJRl9PUF9SRUFEKSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBYRU5WQkRfU1RBVF9CTEtJRl9PUF9SRUFEX0RJUkVDVCA6CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBYRU5WQkRfU1RBVF9CTEtJRl9PUF9XUklURV9ESVJFQ1RdKTsKKyAgICAg
ICAgfQorICAgICAgICBicmVhazsKIAotICAgICAgICBpZiAoUmluZ1N1Ym1pdChSaW5nLCBSZXF1
ZXN0KSkKLSAgICAgICAgICAgIGNvbnRpbnVlOworICAgIGNhc2UgQkxLSUZfT1BfV1JJVEVfQkFS
UklFUjoKKyAgICBjYXNlIEJMS0lGX09QX0ZMVVNIX0RJU0tDQUNIRToKKyAgICAgICAgcmVxLT5v
cGVyYXRpb24gPSBSZXF1ZXN0LT5PcGVyYXRpb247CisgICAgICAgIHJlcS0+bnJfc2VnbWVudHMg
PSAwOworICAgICAgICByZXEtPmhhbmRsZSA9IChVU0hPUlQpRnJvbnRlbmRHZXREZXZpY2VJZChS
aW5nLT5Gcm9udGVuZCk7CisgICAgICAgIHJlcS0+aWQgPSAoVUxPTkc2NCkoVUxPTkdfUFRSKVJl
cXVlc3Q7CisgICAgICAgIHJlcS0+c2VjdG9yX251bWJlciA9IFJlcXVlc3QtPkZpcnN0U2VjdG9y
OworICAgICAgICBJbnRlcmxvY2tlZEluY3JlbWVudCgmUmluZy0+U3RhdHNbKFJlcXVlc3QtPk9w
ZXJhdGlvbiA9PSBCTEtJRl9PUF9XUklURV9CQVJSSUVSKSA/CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFhFTlZCRF9TVEFUX0JMS0lGX09QX1dSSVRFX0JBUlJJRVIgOgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBYRU5WQkRfU1RBVF9CTEtJRl9PUF9GTFVTSF9ESVNLQ0FDSEVd
KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEJMS0lGX09QX0RJU0NBUkQ6CisgICAgewor
ICAgICAgICBibGtpZl9yZXF1ZXN0X2Rpc2NhcmRfdCogICAgICAgIHJlcV9kaXNjYXJkOworICAg
ICAgICByZXFfZGlzY2FyZCA9IChibGtpZl9yZXF1ZXN0X2Rpc2NhcmRfdCopcmVxOworICAgICAg
ICByZXFfZGlzY2FyZC0+b3BlcmF0aW9uID0gQkxLSUZfT1BfRElTQ0FSRDsKKyAgICAgICAgcmVx
X2Rpc2NhcmQtPmZsYWcgPSBSZXF1ZXN0LT5GbGFnczsKKyAgICAgICAgcmVxX2Rpc2NhcmQtPmhh
bmRsZSA9IChVU0hPUlQpRnJvbnRlbmRHZXREZXZpY2VJZChGcm9udGVuZCk7CisgICAgICAgIHJl
cV9kaXNjYXJkLT5pZCA9IChVTE9ORzY0KShVTE9OR19QVFIpUmVxdWVzdDsKKyAgICAgICAgcmVx
X2Rpc2NhcmQtPnNlY3Rvcl9udW1iZXIgPSBSZXF1ZXN0LT5GaXJzdFNlY3RvcjsKKyAgICAgICAg
cmVxX2Rpc2NhcmQtPm5yX3NlY3RvcnMgPSBSZXF1ZXN0LT5OclNlY3RvcnM7CisgICAgICAgIElu
dGVybG9ja2VkSW5jcmVtZW50KCZSaW5nLT5TdGF0c1tYRU5WQkRfU1RBVF9CTEtJRl9PUF9ESVND
QVJEXSk7CisgICAgfSBicmVhazsKIAotICAgICAgICBRdWV1ZVJlbW92ZSgmUmluZy0+U3VibWl0
dGVkUmVxcywgJlJlcXVlc3QtPkxpc3RFbnRyeSk7Ci0gICAgICAgIFF1ZXVlVW5Qb3AoJlJpbmct
PlByZXBhcmVkUmVxcywgJlJlcXVlc3QtPkxpc3RFbnRyeSk7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgQVNTRVJUKEZBTFNFKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotCi0gICAgcmV0dXJuIFF1
ZXVlQ291bnQoJlJpbmctPlByZXBhcmVkUmVxcykgIT0gMDsKIH0KIAotc3RhdGljIEZPUkNFSU5M
SU5FIFZPSUQKLVJpbmdDb21wbGV0ZVNodXRkb3duKAotICAgIElOICBQWEVOVkJEX1JJTkcgICAg
UmluZworc3RhdGljIEZPUkNFSU5MSU5FIE5UU1RBVFVTCitfX0Jsa2lmUmluZ1Bvc3RSZXF1ZXN0
cygKKyAgICBJTiAgUFhFTlZCRF9CTEtJRl9SSU5HICBCbGtpZlJpbmcKICAgICApCiB7Ci0gICAg
UFhFTlZCRF9UQVJHRVQgICAgICBUYXJnZXQ7Ci0gICAgUFhFTlZCRF9BREFQVEVSICAgICBBZGFw
dGVyOworI2RlZmluZSBSSU5HX1NMT1RTX0FWQUlMQUJMRShfRnJvbnQsIF9yZXFfcHJvZCwgX3Jz
cF9jb25zKSAgIFwKKyAgICAgICAgKFJJTkdfU0laRShfRnJvbnQpIC0gKChfcmVxX3Byb2QpIC0g
KF9yc3BfY29ucykpKQogCi0gICAgaWYgKFF1ZXVlQ291bnQoJlJpbmctPlNodXRkb3duU3Jicykg
PT0gMCkKLSAgICAgICAgcmV0dXJuOworICAgIFBYRU5WQkRfU1JCX1NUQVRFICAgICAgIFN0YXRl
OworICAgIFJJTkdfSURYICAgICAgICAgICAgICAgIHJlcV9wcm9kOworICAgIFJJTkdfSURYICAg
ICAgICAgICAgICAgIHJzcF9jb25zOworICAgIE5UU1RBVFVTICAgICAgICAgICAgICAgIHN0YXR1
czsKIAotICAgIGlmIChRdWV1ZUNvdW50KCZSaW5nLT5QcmVwYXJlZFJlcXMpIHx8Ci0gICAgICAg
IFF1ZXVlQ291bnQoJlJpbmctPlN1Ym1pdHRlZFJlcXMpKQotICAgICAgICByZXR1cm47CisgICAg
U3RhdGUgPSAmQmxraWZSaW5nLT5TdGF0ZTsKIAotICAgIFRhcmdldCA9IEZyb250ZW5kR2V0VGFy
Z2V0KFJpbmctPkZyb250ZW5kKTsKLSAgICBBZGFwdGVyID0gVGFyZ2V0R2V0QWRhcHRlcihUYXJn
ZXQpOwotICAgIGZvciAoOzspIHsKLSAgICAgICAgUFhFTlZCRF9TUkJFWFQgICAgICBTcmJFeHQ7
Ci0gICAgICAgIFBTQ1NJX1JFUVVFU1RfQkxPQ0sgU3JiOworICAgIHJlcV9wcm9kID0gQmxraWZS
aW5nLT5Gcm9udC5yZXFfcHJvZF9wdnQ7CisgICAgcnNwX2NvbnMgPSBCbGtpZlJpbmctPkZyb250
LnJzcF9jb25zOworCisgICAgc3RhdHVzID0gU1RBVFVTX0FMTE9UVEVEX1NQQUNFX0VYQ0VFREVE
OworICAgIGlmIChSSU5HX1NMT1RTX0FWQUlMQUJMRSgmQmxraWZSaW5nLT5Gcm9udCwgcmVxX3By
b2QsIHJzcF9jb25zKSA8PSAxKQorICAgICAgICBnb3RvIGZhaWwxOworCisgICAgd2hpbGUgKFN0
YXRlLT5Db3VudCAhPSAwKSB7CisgICAgICAgIGJsa2lmX3JlcXVlc3RfdCAgICAgKnJlcTsKKyAg
ICAgICAgUFhFTlZCRF9SRVFVRVNUICAgICBSZXF1ZXN0OwogICAgICAgICBQTElTVF9FTlRSWSAg
ICAgICAgIExpc3RFbnRyeTsKIAotICAgICAgICBMaXN0RW50cnkgPSBRdWV1ZVBvcCgmUmluZy0+
U2h1dGRvd25TcmJzKTsKLSAgICAgICAgaWYgKExpc3RFbnRyeSA9PSBOVUxMKQorICAgICAgICAt
LVN0YXRlLT5Db3VudDsKKworICAgICAgICBMaXN0RW50cnkgPSBSZW1vdmVIZWFkTGlzdCgmU3Rh
dGUtPkxpc3QpOworICAgICAgICBBU1NFUlQzUChMaXN0RW50cnksICE9ICwgJlN0YXRlLT5MaXN0
KTsKKworICAgICAgICBSdGxaZXJvTWVtb3J5KExpc3RFbnRyeSwgc2l6ZW9mKExJU1RfRU5UUlkp
KTsKKworICAgICAgICBSZXF1ZXN0ID0gQ09OVEFJTklOR19SRUNPUkQoTGlzdEVudHJ5LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWEVOVkJEX1JFUVVFU1QsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0RW50cnkpOworCisgICAgICAgIHJlcSA9
IFJJTkdfR0VUX1JFUVVFU1QoJkJsa2lmUmluZy0+RnJvbnQsIHJlcV9wcm9kKTsKKyAgICAgICAg
cmVxX3Byb2QrKzsKKyAgICAgICAgQmxraWZSaW5nLT5SZXF1ZXN0c1Bvc3RlZCsrOworCisgICAg
ICAgIF9fQmxraWZSaW5nSW5zZXJ0UmVxdWVzdChCbGtpZlJpbmcsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBSZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVxKTsKKworICAgICAgICBJbnNlcnRUYWlsTGlzdCgmQmxraWZSaW5nLT5TdWJtaXR0ZWRM
aXN0LCBMaXN0RW50cnkpOworCisgICAgICAgIGlmIChSSU5HX1NMT1RTX0FWQUlMQUJMRSgmQmxr
aWZSaW5nLT5Gcm9udCwgcmVxX3Byb2QsIHJzcF9jb25zKSA8PSAxKQogICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIFNyYkV4dCA9IENPTlRBSU5JTkdfUkVDT1JEKExpc3RFbnRyeSwgWEVOVkJE
X1NSQkVYVCwgTGlzdEVudHJ5KTsKLSAgICAgICAgU3JiID0gU3JiRXh0LT5TcmI7Ci0gICAgICAg
IAotICAgICAgICBTcmItPlNyYlN0YXR1cyA9IFNSQl9TVEFUVVNfU1VDQ0VTUzsKLSAgICAgICAg
QWRhcHRlckNvbXBsZXRlU3JiKEFkYXB0ZXIsIFNyYkV4dCk7CiAgICAgfQorCisgICAgQmxraWZS
aW5nLT5Gcm9udC5yZXFfcHJvZF9wdnQgPSByZXFfcHJvZDsKKworICAgIHJldHVybiBTVEFUVVNf
U1VDQ0VTUzsKKworZmFpbDE6CisgICAgcmV0dXJuIHN0YXR1czsKKworI3VuZGVmICBSSU5HX1NM
T1RTX0FWQUlMQUJMRQogfQogCi1zdGF0aWMgRk9SQ0VJTkxJTkUgUENIQVIKLV9fQmxraWZPcGVy
YXRpb25OYW1lKAotICAgIElOICBVQ0hBUiAgIE9wZXJhdGlvbgorc3RhdGljIEZPUkNFSU5MSU5F
IFBYRU5WQkRfUkVRVUVTVAorX19CbGtpZlJpbmdHZXRTdWJtaXR0ZWRSZXF1ZXN0KAorICAgIElO
ICBQWEVOVkJEX0JMS0lGX1JJTkcgIEJsa2lmUmluZywKKyAgICBJTiAgVUxPTkc2NCAgICAgICAg
ICAgICBJZAogICAgICkKIHsKLSAgICBzd2l0Y2ggKE9wZXJhdGlvbikgewotICAgIGNhc2UgQkxL
SUZfT1BfUkVBRDogICAgICAgICAgICAgcmV0dXJuICJSRUFEIjsKLSAgICBjYXNlIEJMS0lGX09Q
X1dSSVRFOiAgICAgICAgICAgIHJldHVybiAiV1JJVEUiOwotICAgIGNhc2UgQkxLSUZfT1BfV1JJ
VEVfQkFSUklFUjogICAgcmV0dXJuICJXUklURV9CQVJSSUVSIjsKLSAgICBjYXNlIEJMS0lGX09Q
X0ZMVVNIX0RJU0tDQUNIRTogIHJldHVybiAiRkxVU0hfRElTS0NBQ0hFIjsKLSAgICBjYXNlIEJM
S0lGX09QX1JFU0VSVkVEXzE6ICAgICAgIHJldHVybiAiUkVTRVJWRURfMSI7Ci0gICAgY2FzZSBC
TEtJRl9PUF9ESVNDQVJEOiAgICAgICAgICByZXR1cm4gIkRJU0NBUkQiOwotICAgIGNhc2UgQkxL
SUZfT1BfSU5ESVJFQ1Q6ICAgICAgICAgcmV0dXJuICJJTkRJUkVDVCI7Ci0gICAgZGVmYXVsdDog
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIjx1bmtub3duPiI7CisgICAgUExJU1RfRU5U
UlkgICAgICAgICAgICAgTGlzdEVudHJ5OworICAgIFBYRU5WQkRfUkVRVUVTVCAgICAgICAgIFJl
cXVlc3Q7CisKKyAgICBmb3IgKExpc3RFbnRyeSA9IEJsa2lmUmluZy0+U3VibWl0dGVkTGlzdC5G
bGluazsKKyAgICAgICAgIExpc3RFbnRyeSAhPSAmQmxraWZSaW5nLT5TdWJtaXR0ZWRMaXN0Owor
ICAgICAgICAgTGlzdEVudHJ5ID0gTGlzdEVudHJ5LT5GbGluaykgeworICAgICAgICBSZXF1ZXN0
ID0gQ09OVEFJTklOR19SRUNPUkQoTGlzdEVudHJ5LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgWEVOVkJEX1JFUVVFU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBMaXN0RW50cnkpOworICAgICAgICBpZiAoKFVMT05HNjQpKFVMT05HX1BUUilSZXF1
ZXN0ICE9IElkKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgUmVtb3ZlRW50cnlM
aXN0KExpc3RFbnRyeSk7CisgICAgICAgIHJldHVybiBSZXF1ZXN0OwogICAgIH0KKyAgICByZXR1
cm4gTlVMTDsKIH0KIAotc3RhdGljIFZPSUQKLVJpbmdDb21wbGV0ZVJlc3BvbnNlKAotICAgIElO
ICBQWEVOVkJEX1JJTkcgICAgUmluZywKLSAgICBJTiAgVUxPTkc2NCAgICAgICAgIElkLAotICAg
IElOICBTSE9SVCAgICAgICAgICAgU3RhdHVzCitzdGF0aWMgRk9SQ0VJTkxJTkUgVk9JRAorX19C
bGtpZlJpbmdDb21wbGV0ZVJlc3BvbnNlKAorICAgIElOICBQWEVOVkJEX0JMS0lGX1JJTkcgIEJs
a2lmUmluZywKKyAgICBJTiAgUFhFTlZCRF9SRVFVRVNUICAgICBSZXF1ZXN0LAorICAgIElOICBT
SE9SVCAgICAgICAgICAgICAgIFN0YXR1cwogICAgICkKIHsKLSAgICBQWEVOVkJEX1JFUVVFU1Qg
ICAgIFJlcXVlc3Q7Ci0gICAgUFNDU0lfUkVRVUVTVF9CTE9DSyBTcmI7Ci0gICAgUFhFTlZCRF9T
UkJFWFQgICAgICBTcmJFeHQ7CisgICAgUFhFTlZCRF9SSU5HICAgICAgICAgICAgUmluZyA9IEJs
a2lmUmluZy0+UmluZzsKKyAgICBQWEVOVkJEX0ZST05URU5EICAgICAgICBGcm9udGVuZCA9IFJp
bmctPkZyb250ZW5kOworICAgIFBTQ1NJX1JFUVVFU1RfQkxPQ0sgICAgIFNyYjsKKyAgICBQWEVO
VkJEX1NSQkVYVCAgICAgICAgICBTcmJFeHQ7CisgICAgUExJU1RfRU5UUlkgICAgICAgICAgICAg
TGlzdEVudHJ5OwogCi0gICAgUmVxdWVzdCA9IFJpbmdGaW5kUmVxdWVzdChSaW5nLCBJZCk7Ci0g
ICAgaWYgKFJlcXVlc3QgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU3JiRXh0ICA9
IFJlcXVlc3QtPlNyYkV4dDsKLSAgICBTcmIgICAgID0gU3JiRXh0LT5TcmI7CisgICAgU3JiRXh0
ID0gUmVxdWVzdC0+U3JiRXh0OworICAgIFNyYiA9IFNyYkV4dC0+U3JiOwogCiAgICAgc3dpdGNo
IChTdGF0dXMpIHsKICAgICBjYXNlIEJMS0lGX1JTUF9PS0FZOgotICAgICAgICBSaW5nUmVxdWVz
dENvcHlPdXRwdXQoUmVxdWVzdCk7CisgICAgICAgIGlmIChSZXF1ZXN0LT5PcGVyYXRpb24gIT0g
QkxLSUZfT1BfUkVBRCkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGZvciAoTGlzdEVu
dHJ5ID0gUmVxdWVzdC0+U2VnbWVudHMuRmxpbms7CisgICAgICAgICAgICAgTGlzdEVudHJ5ICE9
ICZSZXF1ZXN0LT5TZWdtZW50czsKKyAgICAgICAgICAgICBMaXN0RW50cnkgPSBMaXN0RW50cnkt
PkZsaW5rKSB7CisgICAgICAgICAgICBQWEVOVkJEX1NFR01FTlQgU2VnbWVudCA9IENPTlRBSU5J
TkdfUkVDT1JEKExpc3RFbnRyeSwgWEVOVkJEX1NFR01FTlQsIExpc3RFbnRyeSk7CisgICAgICAg
ICAgICBQWEVOVkJEX0JPVU5DRSAgQm91bmNlID0gU2VnbWVudC0+Qm91bmNlOworCisgICAgICAg
ICAgICBpZiAoQm91bmNlKSB7CisgICAgICAgICAgICAgICAgUnRsQ29weU1lbW9yeShCb3VuY2Ut
PlNvdXJjZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJvdW5jZS0+Qm91bmNl
UHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTW1HZXRNZGxCeXRlQ291bnQoJkJv
dW5jZS0+U291cmNlTWRsKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICAgICAgYnJl
YWs7CiAKICAgICBjYXNlIEJMS0lGX1JTUF9FT1BOT1RTVVBQOgogICAgICAgICAvLyBSZW1vdmUg
YXBwcm9wcmlhdGUgZmVhdHVyZSBzdXBwb3J0Ci0gICAgICAgIEZyb250ZW5kUmVtb3ZlRmVhdHVy
ZShSaW5nLT5Gcm9udGVuZCwgUmVxdWVzdC0+T3BlcmF0aW9uKTsKKyAgICAgICAgRnJvbnRlbmRS
ZW1vdmVGZWF0dXJlKEZyb250ZW5kLCBSZXF1ZXN0LT5PcGVyYXRpb24pOwogICAgICAgICAvLyBT
dWNjZWVkIHRoaXMgU1JCLCBzdWJzaXF1ZW50IFNSQnMgd2lsbCBiZSBzdWNjZWVkZWQgaW5zdGVh
ZCBvZiBiZWluZyBwYXNzZWQgdG8gdGhlIGJhY2tlbmQuCiAgICAgICAgIFNyYi0+U3JiU3RhdHVz
ID0gU1JCX1NUQVRVU19TVUNDRVNTOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQkxLSUZf
UlNQX0VSUk9SOgogICAgIGRlZmF1bHQ6Ci0gICAgICAgIFdhcm5pbmcoIlRhcmdldFslZF0gOiAl
cyBCTEtJRl9SU1BfRVJST1IgKFRhZyAlbGx4KVxuIiwKLSAgICAgICAgICAgICAgICBGcm9udGVu
ZEdldFRhcmdldElkKFJpbmctPkZyb250ZW5kKSwKLSAgICAgICAgICAgICAgICBfX0Jsa2lmT3Bl
cmF0aW9uTmFtZShSZXF1ZXN0LT5PcGVyYXRpb24pLAotICAgICAgICAgICAgICAgIElkKTsKKyAg
ICAgICAgV2FybmluZygiVGFyZ2V0WyV1XVsldV0gOiAlcyBCTEtJRl9SU1BfRVJST1JcbiIsCisg
ICAgICAgICAgICAgICAgRnJvbnRlbmRHZXRUYXJnZXRJZChGcm9udGVuZCksCisgICAgICAgICAg
ICAgICAgQmxraWZSaW5nLT5JbmRleCwKKyAgICAgICAgICAgICAgICBfX0Jsa2lmT3BlcmF0aW9u
TmFtZShSZXF1ZXN0LT5PcGVyYXRpb24pKTsKICAgICAgICAgU3JiLT5TcmJTdGF0dXMgPSBTUkJf
U1RBVFVTX0VSUk9SOwogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBSaW5nUHV0UmVxdWVz
dChSaW5nLCBSZXF1ZXN0KTsKKyAgICBCbGtpZlJpbmdQdXRSZXF1ZXN0KEJsa2lmUmluZywgUmVx
dWVzdCk7CiAKICAgICAvLyBjb21wbGV0ZSBzcmIKICAgICBpZiAoSW50ZXJsb2NrZWREZWNyZW1l
bnQoJlNyYkV4dC0+UmVxdWVzdENvdW50KSA9PSAwKSB7Ci0gICAgICAgIFBYRU5WQkRfVEFSR0VU
ICBUYXJnZXQgPSBGcm9udGVuZEdldFRhcmdldChSaW5nLT5Gcm9udGVuZCk7Ci0gICAgICAgIFBY
RU5WQkRfQURBUFRFUiBBZGFwdGVyID0gVGFyZ2V0R2V0QWRhcHRlcihUYXJnZXQpOwotCi0gICAg
ICAgIGlmIChTcmItPlNyYlN0YXR1cyA9PSBTUkJfU1RBVFVTX1BFTkRJTkcpIHsKLSAgICAgICAg
ICAgIC8vIFNSQiBoYXMgbm90IGhpdCBhIGZhaWx1cmUgY29uZGl0aW9uIChCTEtJRl9SU1BfRVJS
T1IgfCBCTEtJRl9SU1BfRU9QTk9UU1VQUCkKLSAgICAgICAgICAgIC8vIGZyb20gYW55IG9mIGl0
cyByZXNwb25zZXMuIFNSQiBtdXN0IGhhdmUgc3VjY2VlZGVkCi0gICAgICAgICAgICBTcmItPlNy
YlN0YXR1cyA9IFNSQl9TVEFUVVNfU1VDQ0VTUzsKLSAgICAgICAgICAgIFNyYi0+U2NzaVN0YXR1
cyA9IDB4MDA7IC8vIFNDU0lfR09PRAotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8g
U3JiLT5TcmJTdGF0dXMgaGFzIGFscmVhZHkgYmVlbiBzZXQgYnkgMSBvciBtb3JlIHJlcXVlc3Rz
IHdpdGggU3RhdHVzICE9IEJMS0lGX1JTUF9PS0FZCi0gICAgICAgICAgICBTcmItPlNjc2lTdGF0
dXMgPSAweDQwOyAvLyBTQ1NJX0FCT1JURUQKLSAgICAgICAgfQotCi0gICAgICAgIEFkYXB0ZXJD
b21wbGV0ZVNyYihBZGFwdGVyLCBTcmJFeHQpOworICAgICAgICBfX0Jsa2lmUmluZ0NvbXBsZXRl
U3JiKEJsa2lmUmluZywgU3JiRXh0KTsKICAgICB9CiB9CiAKLXN0YXRpYyBCT09MRUFOCi1SaW5n
UG9sbCgKLSAgICBJTiAgUFhFTlZCRF9SSU5HICAgIFJpbmcKK3N0YXRpYyBGT1JDRUlOTElORSBC
T09MRUFOCitCbGtpZlJpbmdQb2xsKAorICAgIElOICBQWEVOVkJEX0JMS0lGX1JJTkcgIEJsa2lm
UmluZwogICAgICkKIHsKLSAgICBCT09MRUFOICAgICAgICAgICAgIFJldHJ5ID0gRkFMU0U7Cisj
ZGVmaW5lIFhFTlZCRF9CQVRDSChfUmluZykgKFJJTkdfU0laRSgmKF9SaW5nKS0+RnJvbnQpIC8g
NCkKIAotICAgIEFTU0VSVDNVKEtlR2V0Q3VycmVudElycWwoKSwgPT0sIERJU1BBVENIX0xFVkVM
KTsKLSAgICBLZUFjcXVpcmVTcGluTG9ja0F0RHBjTGV2ZWwoJlJpbmctPkxvY2spOworICAgIFBY
RU5WQkRfUklORyAgICAgICAgICAgIFJpbmc7CisgICAgQk9PTEVBTiAgICAgICAgICAgICAgICAg
UmV0cnk7CiAKLSAgICAvLyBHdWFyZCBhZ2FpbnN0IHRoaXMgbG9ja2VkIHJlZ2lvbiBiZWluZyBj
YWxsZWQgYWZ0ZXIgdGhlCi0gICAgLy8gbG9jayBvbiBGcm9udGVuZFNldFN0YXRlCi0gICAgaWYg
KFJpbmctPkVuYWJsZWQgPT0gRkFMU0UpCisgICAgUmluZyA9IEJsa2lmUmluZy0+UmluZzsKKyAg
ICBSZXRyeSA9IEZBTFNFOworCisgICAgaWYgKCFCbGtpZlJpbmctPkVuYWJsZWQpCiAgICAgICAg
IGdvdG8gZG9uZTsKIAogICAgIGZvciAoOzspIHsKLSAgICAgICAgVUxPTkcgICByc3BfcHJvZDsK
LSAgICAgICAgVUxPTkcgICByc3BfY29uczsKKyAgICAgICAgUklOR19JRFggICAgICAgICAgICBy
c3BfcHJvZDsKKyAgICAgICAgUklOR19JRFggICAgICAgICAgICByc3BfY29uczsKIAogICAgICAg
ICBLZU1lbW9yeUJhcnJpZXIoKTsKIAotICAgICAgICByc3BfcHJvZCA9IFJpbmctPlNoYXJlZC0+
cnNwX3Byb2Q7Ci0gICAgICAgIHJzcF9jb25zID0gUmluZy0+RnJvbnQucnNwX2NvbnM7CisgICAg
ICAgIHJzcF9wcm9kID0gQmxraWZSaW5nLT5TaGFyZWQtPnJzcF9wcm9kOworICAgICAgICByc3Bf
Y29ucyA9IEJsa2lmUmluZy0+RnJvbnQucnNwX2NvbnM7CiAKICAgICAgICAgS2VNZW1vcnlCYXJy
aWVyKCk7CiAKQEAgLTExNzEsMzE4ICsxMjYwLDk4NCBAQCBSaW5nUG9sbCgKICAgICAgICAgICAg
IGJyZWFrOwogCiAgICAgICAgIHdoaWxlIChyc3BfY29ucyAhPSByc3BfcHJvZCAmJiAhUmV0cnkp
IHsKLSAgICAgICAgICAgIGJsa2lmX3Jlc3BvbnNlX3QqICAgcnNwOworICAgICAgICAgICAgYmxr
aWZfcmVzcG9uc2VfdCAgICAqcnNwOworICAgICAgICAgICAgUFhFTlZCRF9SRVFVRVNUICAgICBS
ZXF1ZXN0OworCisgICAgICAgICAgICByc3AgPSBSSU5HX0dFVF9SRVNQT05TRSgmQmxraWZSaW5n
LT5Gcm9udCwgcnNwX2NvbnMpOworICAgICAgICAgICAgcnNwX2NvbnMrKzsKKyAgICAgICAgICAg
IEJsa2lmUmluZy0+UmVzcG9uc2VzUHJvY2Vzc2VkKys7CiAKLSAgICAgICAgICAgIHJzcCA9IFJJ
TkdfR0VUX1JFU1BPTlNFKCZSaW5nLT5Gcm9udCwgcnNwX2NvbnMpOwotICAgICAgICAgICAgKyty
c3BfY29uczsKLSAgICAgICAgICAgICsrUmluZy0+UmVjZWl2ZWQ7CisgICAgICAgICAgICBCbGtp
ZlJpbmctPlN0b3BwZWQgPSBGQUxTRTsKIAotICAgICAgICAgICAgUmluZ0NvbXBsZXRlUmVzcG9u
c2UoUmluZywgcnNwLT5pZCwgcnNwLT5zdGF0dXMpOwotICAgICAgICAgICAgUnRsWmVyb01lbW9y
eShyc3AsIHNpemVvZih1bmlvbiBibGtpZl9zcmluZ19lbnRyeSkpOworICAgICAgICAgICAgUmVx
dWVzdCA9IF9fQmxraWZSaW5nR2V0U3VibWl0dGVkUmVxdWVzdChCbGtpZlJpbmcsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzcC0+aWQpOwor
ICAgICAgICAgICAgQVNTRVJUM1AoUmVxdWVzdCwgIT0gLCBOVUxMKTsKIAotICAgICAgICAgICAg
aWYgKHJzcF9jb25zIC0gUmluZy0+RnJvbnQucnNwX2NvbnMgPiBSSU5HX1NJWkUoJlJpbmctPkZy
b250KSAvIDQpCisgICAgICAgICAgICBfX0Jsa2lmUmluZ0NvbXBsZXRlUmVzcG9uc2UoQmxraWZS
aW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlcXVlc3QsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnNwLT5zdGF0dXMpOworCisg
ICAgICAgICAgICBpZiAocnNwX2NvbnMgLSBCbGtpZlJpbmctPkZyb250LnJzcF9jb25zID4gWEVO
VkJEX0JBVENIKEJsa2lmUmluZykpCiAgICAgICAgICAgICAgICAgUmV0cnkgPSBUUlVFOwogICAg
ICAgICB9CiAKICAgICAgICAgS2VNZW1vcnlCYXJyaWVyKCk7CiAKLSAgICAgICAgUmluZy0+RnJv
bnQucnNwX2NvbnMgPSByc3BfY29uczsKLSAgICAgICAgUmluZy0+U2hhcmVkLT5yc3BfZXZlbnQg
PSByc3BfY29ucyArIDE7CisgICAgICAgIEJsa2lmUmluZy0+RnJvbnQucnNwX2NvbnMgPSByc3Bf
Y29uczsKICAgICB9CiAKIGRvbmU6Ci0gICAgS2VSZWxlYXNlU3BpbkxvY2tGcm9tRHBjTGV2ZWwo
JlJpbmctPkxvY2spOwotCiAgICAgcmV0dXJuIFJldHJ5OworCisjdW5kZWYgWEVOVkJEX0JBVENI
CiB9CiAKLV9fZHJ2X3JlcXVpcmVzSVJRTChESVNQQVRDSF9MRVZFTCkKLXN0YXRpYyBCT09MRUFO
Ci1SaW5nTm90aWZ5UmVzcG9uc2VzKAotICAgIElOICBQWEVOVkJEX1JJTkcgICAgUmluZworc3Rh
dGljIEZPUkNFSU5MSU5FIFZPSUQKK19fQmxraWZSaW5nU2VuZCgKKyAgICBJTiAgUFhFTlZCRF9C
TEtJRl9SSU5HICBCbGtpZlJpbmcKICAgICApCiB7Ci0gICAgQk9PTEVBTiAgICAgICAgICAgICBS
ZXRyeSA9IEZBTFNFOwotCi0gICAgaWYgKCFSaW5nLT5FbmFibGVkKQotICAgICAgICByZXR1cm4g
RkFMU0U7CisgICAgUFhFTlZCRF9SSU5HICAgICAgICAgICAgUmluZyA9IEJsa2lmUmluZy0+Umlu
ZzsKIAotICAgIFJldHJ5IHw9IFJpbmdQb2xsKFJpbmcpOwotICAgIFJldHJ5IHw9IFJpbmdTdWJt
aXRSZXF1ZXN0cyhSaW5nKTsKLQotICAgIFJpbmdDb21wbGV0ZVNodXRkb3duKFJpbmcpOwotICAg
IHJldHVybiBSZXRyeTsKKyAgICBYRU5CVVNfRVZUQ0hOKFNlbmQsCisgICAgICAgICAgICAgICAg
ICAmUmluZy0+RXZ0Y2huSW50ZXJmYWNlLAorICAgICAgICAgICAgICAgICAgQmxraWZSaW5nLT5D
aGFubmVsKTsKIH0KIAotS1NFUlZJQ0VfUk9VVElORSAgICBSaW5nSW50ZXJydXB0OwotCi1CT09M
RUFOCi1SaW5nSW50ZXJydXB0KAotICAgIElOICBQS0lOVEVSUlVQVCBJbnRlcnJ1cHQsCi0gICAg
SU4gIFBWT0lEICAgICAgIENvbnRleHQKK3N0YXRpYyBGT1JDRUlOTElORSBWT0lECitfX0Jsa2lm
UmluZ1B1c2hSZXF1ZXN0cygKKyAgICBJTiAgUFhFTlZCRF9CTEtJRl9SSU5HICBCbGtpZlJpbmcK
ICAgICApCiB7Ci0gICAgUFhFTlZCRF9SSU5HICAgIFJpbmcgPSBDb250ZXh0OworICAgIEJPT0xF
QU4gICAgICAgICAgICAgICAgIE5vdGlmeTsKIAotICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIo
SW50ZXJydXB0KTsKKyAgICBpZiAoQmxraWZSaW5nLT5SZXF1ZXN0c1Bvc3RlZCA9PSBCbGtpZlJp
bmctPlJlcXVlc3RzUHVzaGVkKQorICAgICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQoUmluZyAh
PSBOVUxMKTsKKyNwcmFnbWEgd2FybmluZyAocHVzaCkKKyNwcmFnbWEgd2FybmluZyAoZGlzYWJs
ZTo0MjQ0KQogCi0gICAgKytSaW5nLT5FdmVudHM7Ci0gICAgaWYgKCFSaW5nLT5Db25uZWN0ZWQp
Ci0gICAgICAgIHJldHVybiBUUlVFOworICAgIEJsa2lmUmluZy0+U2hhcmVkLT5yc3BfZXZlbnQg
PSBCbGtpZlJpbmctPkZyb250LnJlcV9wcm9kX3B2dDsKIAotICAgIGlmIChLZUluc2VydFF1ZXVl
RHBjKCZSaW5nLT5EcGMsIE5VTEwsIE5VTEwpKQotICAgICAgICArK1JpbmctPkRwY3M7CisgICAg
Ly8gTWFrZSB0aGUgcmVxdWVzdHMgdmlzaWJsZSB0byB0aGUgYmFja2VuZAorICAgIFJJTkdfUFVT
SF9SRVFVRVNUU19BTkRfQ0hFQ0tfTk9USUZZKCZCbGtpZlJpbmctPkZyb250LCBOb3RpZnkpOwog
Ci0gICAgcmV0dXJuIFRSVUU7CisjcHJhZ21hIHdhcm5pbmcgKHBvcCkKKworICAgIGlmIChOb3Rp
ZnkpCisgICAgICAgIF9fQmxraWZSaW5nU2VuZChCbGtpZlJpbmcpOworCisgICAgQmxraWZSaW5n
LT5SZXF1ZXN0c1B1c2hlZCA9IEJsa2lmUmluZy0+UmVxdWVzdHNQb3N0ZWQ7CiB9CiAKLUtERUZF
UlJFRF9ST1VUSU5FIFJpbmdEcGM7CisjZGVmaW5lIFhFTlZCRF9MT0NLX0JJVCAoKFVMT05HX1BU
UikxKQogCi1WT0lECi1SaW5nRHBjKAotICAgIF9faW4gIFBLRFBDICAgICBEcGMsCi0gICAgX19p
bl9vcHQgUFZPSUQgIENvbnRleHQsCi0gICAgX19pbl9vcHQgUFZPSUQgIEFyZzEsCi0gICAgX19p
bl9vcHQgUFZPSUQgIEFyZzIKK3N0YXRpYyBERUNMU1BFQ19OT0lOTElORSBWT0lECitCbGtpZlJp
bmdTd2l6emxlKAorICAgIElOICBQWEVOVkJEX0JMS0lGX1JJTkcgIEJsa2lmUmluZwogICAgICkK
IHsKLSAgICBQWEVOVkJEX1JJTkcgICAgUmluZyA9IENvbnRleHQ7CisgICAgVUxPTkdfUFRSICAg
ICAgICAgICAgICAgT2xkOworICAgIFVMT05HX1BUUiAgICAgICAgICAgICAgIE5ldzsKKyAgICBQ
TElTVF9FTlRSWSAgICAgICAgICAgICBMaXN0RW50cnk7CisgICAgTElTVF9FTlRSWSAgICAgICAg
ICAgICAgTGlzdDsKKyAgICBVTE9ORyAgICAgICAgICAgICAgICAgICBDb3VudDsKIAotICAgIFVO
UkVGRVJFTkNFRF9QQVJBTUVURVIoRHBjKTsKLSAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKEFy
ZzEpOwotICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoQXJnMik7CisgICAgQVNTRVJUM1AoQmxr
aWZSaW5nLT5Mb2NrVGhyZWFkLCA9PSAsIEtlR2V0Q3VycmVudFRocmVhZCgpKTsKIAotICAgIEFT
U0VSVChSaW5nICE9IE5VTEwpOworICAgIEluaXRpYWxpemVMaXN0SGVhZCgmTGlzdCk7CiAKLSAg
ICBmb3IgKDs7KSB7Ci0gICAgICAgIEtJUlFMICAgICAgIElycWw7Ci0gICAgICAgIEJPT0xFQU4g
ICAgIFJldHJ5OworICAgIE5ldyA9IFhFTlZCRF9MT0NLX0JJVDsKKyAgICBPbGQgPSAoVUxPTkdf
UFRSKUludGVybG9ja2VkRXhjaGFuZ2VQb2ludGVyKCZCbGtpZlJpbmctPkxvY2ssIChQVk9JRClO
ZXcpOwogCi0gICAgICAgIEtlUmFpc2VJcnFsKERJU1BBVENIX0xFVkVMLCAmSXJxbCk7Ci0gICAg
ICAgIFJldHJ5ID0gUmluZ05vdGlmeVJlc3BvbnNlcyhSaW5nKTsKLSAgICAgICAgS2VMb3dlckly
cWwoSXJxbCk7CisgICAgQVNTRVJUKE9sZCAmIFhFTlZCRF9MT0NLX0JJVCk7CisgICAgTGlzdEVu
dHJ5ID0gKFBWT0lEKShPbGQgJiB+WEVOVkJEX0xPQ0tfQklUKTsKIAotICAgICAgICBpZiAoIVJl
dHJ5KQotICAgICAgICAgICAgYnJlYWs7CisgICAgaWYgKExpc3RFbnRyeSA9PSBOVUxMKQorICAg
ICAgICByZXR1cm47CisKKyAgICAvLyBQYWNrZXRzIGFyZSBoZWxkIGluIHRoZSBhdG9taWMgcGFj
a2V0IGxpc3QgaW4gcmV2ZXJzZSBvcmRlcgorICAgIC8vIHNvIHRoYXQgdGhlIG1vc3QgcmVjZW50
IGlzIGFsd2F5cyBoZWFkIG9mIHRoZSBsaXN0LiBUaGlzIGlzCisgICAgLy8gbmVjZXNzYXJ5IHRv
IGFsbG93IGFkZGl0aW9uIHRvIHRoZSBsaXN0IHRvIGJlIGRvbmUgYXRvbWljYWxseS4KKworICAg
IGZvciAoQ291bnQgPSAwOyBMaXN0RW50cnkgIT0gTlVMTDsgKytDb3VudCkgeworICAgICAgICBQ
TElTVF9FTlRSWSAgICAgTmV4dEVudHJ5OworCisgICAgICAgIE5leHRFbnRyeSA9IExpc3RFbnRy
eS0+Qmxpbms7CisgICAgICAgIExpc3RFbnRyeS0+RmxpbmsgPSBMaXN0RW50cnktPkJsaW5rID0g
TGlzdEVudHJ5OworCisgICAgICAgIEluc2VydEhlYWRMaXN0KCZMaXN0LCBMaXN0RW50cnkpOwor
CisgICAgICAgIExpc3RFbnRyeSA9IE5leHRFbnRyeTsKICAgICB9CiAKLSAgICBYRU5CVVNfRVZU
Q0hOKFVubWFzaywKLSAgICAgICAgICAgICAgICAgICZSaW5nLT5FdnRjaG5JbnRlcmZhY2UsCi0g
ICAgICAgICAgICAgICAgICBSaW5nLT5DaGFubmVsLAotICAgICAgICAgICAgICAgICAgRkFMU0Up
OworICAgIGlmICghSXNMaXN0RW1wdHkoJkxpc3QpKSB7CisgICAgICAgIExpc3RFbnRyeSA9IExp
c3QuRmxpbms7CisKKyAgICAgICAgUmVtb3ZlRW50cnlMaXN0KCZMaXN0KTsKKyAgICAgICAgQXBw
ZW5kVGFpbExpc3QoJkJsa2lmUmluZy0+U3JiUXVldWUsIExpc3RFbnRyeSk7CisKKyAgICAgICAg
QmxraWZSaW5nLT5TcmJzUXVldWVkICs9IENvdW50OworICAgIH0KIH0KIAogc3RhdGljIERFQ0xT
UEVDX05PSU5MSU5FIFZPSUQKLVJpbmdEZWJ1Z0NhbGxiYWNrKAotICAgIElOICBQVk9JRCAgICAg
ICBBcmd1bWVudCwKLSAgICBJTiAgQk9PTEVBTiAgICAgQ3Jhc2hpbmcKK0Jsa2lmUmluZ1NjaGVk
dWxlKAorICAgIElOICBQWEVOVkJEX0JMS0lGX1JJTkcgIEJsa2lmUmluZwogICAgICkKIHsKLSAg
ICBQWEVOVkJEX1JJTkcgICAgUmluZyA9IEFyZ3VtZW50OwotICAgIFBYRU5WQkRfR1JBTlRFUiBH
cmFudGVyID0gRnJvbnRlbmRHZXRHcmFudGVyKFJpbmctPkZyb250ZW5kKTsKLSAgICBVTE9ORyAg
ICAgICAgICAgSW5kZXg7CisgICAgUFhFTlZCRF9TUkJfU1RBVEUgICAgICAgU3RhdGU7CisgICAg
Qk9PTEVBTiAgICAgICAgICAgICAgICAgUG9sbGVkOwogCi0gICAgVU5SRUZFUkVOQ0VEX1BBUkFN
RVRFUihDcmFzaGluZyk7CisgICAgaWYgKCFCbGtpZlJpbmctPkVuYWJsZWQpCisgICAgICAgIHJl
dHVybjsKIAotICAgIFhFTkJVU19ERUJVRyhQcmludGYsCi0gICAgICAgICAgICAgICAgICZSaW5n
LT5EZWJ1Z0ludGVyZmFjZSwKLSAgICAgICAgICAgICAgICAgIlN1Ym1pdHRlZDogJXUgUmVjZWl2
ZWQ6ICV1XG4iLAotICAgICAgICAgICAgICAgICBSaW5nLT5TdWJtaXR0ZWQsCi0gICAgICAgICAg
ICAgICAgIFJpbmctPlJlY2VpdmVkKTsKKyAgICBTdGF0ZSA9ICZCbGtpZlJpbmctPlN0YXRlOwor
ICAgIFBvbGxlZCA9IEZBTFNFOwogCi0gICAgWEVOQlVTX0RFQlVHKFByaW50ZiwKLSAgICAgICAg
ICAgICAgICAgJlJpbmctPkRlYnVnSW50ZXJmYWNlLAotICAgICAgICAgICAgICAgICAiRXZlbnRz
OiAldSBEcGNzOiAldVxuIiwKLSAgICAgICAgICAgICAgICAgUmluZy0+RXZlbnRzLAotICAgICAg
ICAgICAgICAgICBSaW5nLT5EcGNzKTsKKyAgICB3aGlsZSAoIUJsa2lmUmluZy0+U3RvcHBlZCkg
eworICAgICAgICBQTElTVF9FTlRSWSAgICAgICAgIExpc3RFbnRyeTsKKyAgICAgICAgUFhFTlZC
RF9TUkJFWFQgICAgICBTcmJFeHQ7CisgICAgICAgIE5UU1RBVFVTICAgICAgICAgICAgc3RhdHVz
OwogCi0gICAgWEVOQlVTX0RFQlVHKFByaW50ZiwKLSAgICAgICAgICAgICAgICAgJlJpbmctPkRl
YnVnSW50ZXJmYWNlLAotICAgICAgICAgICAgICAgICAiU2hhcmVkIDogMHglcFxuIiwKLSAgICAg
ICAgICAgICAgICAgUmluZy0+U2hhcmVkKTsKKyAgICAgICAgaWYgKFN0YXRlLT5Db3VudCAhPSAw
KSB7CisgICAgICAgICAgICBzdGF0dXMgPSBfX0Jsa2lmUmluZ1Bvc3RSZXF1ZXN0cyhCbGtpZlJp
bmcpOworICAgICAgICAgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpCisgICAgICAgICAgICAg
ICAgQmxraWZSaW5nLT5TdG9wcGVkID0gVFJVRTsKKyAgICAgICAgfQogCi0gICAgaWYgKFJpbmct
PlNoYXJlZCkgewotICAgICAgICBYRU5CVVNfREVCVUcoUHJpbnRmLAotICAgICAgICAgICAgICAg
ICAgICAgJlJpbmctPkRlYnVnSW50ZXJmYWNlLAotICAgICAgICAgICAgICAgICAgICAgIlNoYXJl
ZDogJWQgLyAlZCAtICVkIC8gJWRcbiIsCi0gICAgICAgICAgICAgICAgICAgICBSaW5nLT5TaGFy
ZWQtPnJlcV9wcm9kLAotICAgICAgICAgICAgICAgICAgICAgUmluZy0+U2hhcmVkLT5yZXFfZXZl
bnQsCi0gICAgICAgICAgICAgICAgICAgICBSaW5nLT5TaGFyZWQtPnJzcF9wcm9kLAotICAgICAg
ICAgICAgICAgICAgICAgUmluZy0+U2hhcmVkLT5yc3BfZXZlbnQpOwotICAgIH0KKyAgICAgICAg
aWYgKEJsa2lmUmluZy0+U3RvcHBlZCkgeworICAgICAgICAgICAgaWYgKCFQb2xsZWQpIHsKKyAg
ICAgICAgICAgICAgICAoVk9JRClCbGtpZlJpbmdQb2xsKEJsa2lmUmluZyk7CisgICAgICAgICAg
ICAgICAgUG9sbGVkID0gVFJVRTsKKyAgICAgICAgICAgIH0KIAotICAgIFhFTkJVU19ERUJVRyhQ
cmludGYsCi0gICAgICAgICAgICAgICAgICZSaW5nLT5EZWJ1Z0ludGVyZmFjZSwKLSAgICAgICAg
ICAgICAgICAgIkZyb250OiAlZCAvICVkICglZClcbiIsCi0gICAgICAgICAgICAgICAgIFJpbmct
PkZyb250LnJlcV9wcm9kX3B2dCwKLSAgICAgICAgICAgICAgICAgUmluZy0+RnJvbnQucnNwX2Nv
bnMsCi0gICAgICAgICAgICAgICAgIFJpbmctPkZyb250Lm5yX2VudHMpOworICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIH0KIAotICAgIFhFTkJVU19ERUJVRyhQcmludGYsCi0gICAgICAg
ICAgICAgICAgICZSaW5nLT5EZWJ1Z0ludGVyZmFjZSwKLSAgICAgICAgICAgICAgICAgIk9yZGVy
OiAlZFxuIiwKLSAgICAgICAgICAgICAgICAgUmluZy0+T3JkZXIpOworICAgICAgICBpZiAoQmxr
aWZSaW5nLT5SZXF1ZXN0c1Bvc3RlZCAtIEJsa2lmUmluZy0+UmVxdWVzdHNQdXNoZWQgPj0KKyAg
ICAgICAgICAgIFJJTkdfU0laRSgmQmxraWZSaW5nLT5Gcm9udCkgLyA0KQorICAgICAgICAgICAg
X19CbGtpZlJpbmdQdXNoUmVxdWVzdHMoQmxraWZSaW5nKTsKIAotICAgIGZvciAoSW5kZXggPSAw
OyBJbmRleCA8ICgxdWwgPDwgUmluZy0+T3JkZXIpOyArK0luZGV4KSB7Ci0gICAgICAgIFhFTkJV
U19ERUJVRyhQcmludGYsCi0gICAgICAgICAgICAgICAgICAgICAmUmluZy0+RGVidWdJbnRlcmZh
Y2UsCi0gICAgICAgICAgICAgICAgICAgICAiR3JhbnRzWyUtMmRdOiAweCVwICgldSlcbiIsCi0g
ICAgICAgICAgICAgICAgICAgICBJbmRleCwKLSAgICAgICAgICAgICAgICAgICAgIFJpbmctPkdy
YW50c1tJbmRleF0sCi0gICAgICAgICAgICAgICAgICAgICBHcmFudGVyUmVmZXJlbmNlKEdyYW50
ZXIsIFJpbmctPkdyYW50c1tJbmRleF0pKTsKKyAgICAgICAgQVNTRVJUM1UoU3RhdGUtPkNvdW50
LCA9PSAsIDApOworCisgICAgICAgIGlmIChJc0xpc3RFbXB0eSgmQmxraWZSaW5nLT5TcmJRdWV1
ZSkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBMaXN0RW50cnkgPSBSZW1vdmVIZWFk
TGlzdCgmQmxraWZSaW5nLT5TcmJRdWV1ZSk7CisgICAgICAgIEFTU0VSVDNQKExpc3RFbnRyeSwg
IT0gLCAmQmxraWZSaW5nLT5TcmJRdWV1ZSk7CisKKyAgICAgICAgUnRsWmVyb01lbW9yeShMaXN0
RW50cnksIHNpemVvZihMSVNUX0VOVFJZKSk7CisKKyAgICAgICAgU3JiRXh0ID0gQ09OVEFJTklO
R19SRUNPUkQoTGlzdEVudHJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBY
RU5WQkRfU1JCRVhULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0RW50
cnkpOworCisgICAgICAgIHN0YXR1cyA9IF9fQmxraWZSaW5nUHJlcGFyZVNyYihCbGtpZlJpbmcs
IFNyYkV4dCk7CisgICAgICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKSB7CisgICAgICAgICAg
ICBQU0NTSV9SRVFVRVNUX0JMT0NLIFNyYiA9IFNyYkV4dC0+U3JiOworICAgICAgICAgICAgU3Ji
LT5TcmJTdGF0dXMgPSBTUkJfU1RBVFVTX0JVU1k7CisgICAgICAgICAgICBfX0Jsa2lmUmluZ0Nv
bXBsZXRlU3JiKEJsa2lmUmluZywgU3JiRXh0KTsKKyAgICAgICAgfQogICAgIH0KIAotICAgIGlm
IChSaW5nLT5DaGFubmVsKSB7Ci0gICAgICAgIFVMT05HICAgICAgIFBvcnQgPSBYRU5CVVNfRVZU
Q0hOKEdldFBvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZS
aW5nLT5FdnRjaG5JbnRlcmZhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFJpbmctPkNoYW5uZWwpOworICAgIF9fQmxraWZSaW5nUHVzaFJlcXVlc3RzKEJsa2lm
UmluZyk7CiAKLSAgICAgICAgWEVOQlVTX0RFQlVHKFByaW50ZiwKLSAgICAgICAgICAgICAgICAg
ICAgICZSaW5nLT5EZWJ1Z0ludGVyZmFjZSwKLSAgICAgICAgICAgICAgICAgICAgICJDaGFubmVs
IDogJXAgKCVkKVxuIiwKLSAgICAgICAgICAgICAgICAgICAgIFJpbmctPkNoYW5uZWwsCi0gICAg
ICAgICAgICAgICAgICAgICBQb3J0KTsKKyAgICBpZiAoSXNMaXN0RW1wdHkoJkJsa2lmUmluZy0+
U2h1dGRvd25RdWV1ZSkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghSXNMaXN0RW1wdHko
JkJsa2lmUmluZy0+U3JiUXVldWUpIHx8CisgICAgICAgICFJc0xpc3RFbXB0eSgmQmxraWZSaW5n
LT5TdWJtaXR0ZWRMaXN0KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yICg7OykgeworICAg
ICAgICBQTElTVF9FTlRSWSAgICAgICAgIExpc3RFbnRyeTsKKyAgICAgICAgUFhFTlZCRF9TUkJF
WFQgICAgICBTcmJFeHQ7CisgICAgICAgIFBTQ1NJX1JFUVVFU1RfQkxPQ0sgU3JiOworCisgICAg
ICAgIExpc3RFbnRyeSA9IFJlbW92ZUhlYWRMaXN0KCZCbGtpZlJpbmctPlNodXRkb3duUXVldWUp
OworICAgICAgICBpZiAoTGlzdEVudHJ5ID09ICZCbGtpZlJpbmctPlNodXRkb3duUXVldWUpCisg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICBTcmJFeHQgPSBDT05UQUlOSU5HX1JFQ09SRChM
aXN0RW50cnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhFTlZCRF9TUkJF
WFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3RFbnRyeSk7CisKKyAg
ICAgICAgU3JiID0gU3JiRXh0LT5TcmI7CisgICAgICAgIFNyYi0+U3JiU3RhdHVzID0gU1JCX1NU
QVRVU19TVUNDRVNTOworICAgICAgICBfX0Jsa2lmUmluZ0NvbXBsZXRlU3JiKEJsa2lmUmluZywg
U3JiRXh0KTsKICAgICB9Cit9CiAKLSAgICBYRU5CVVNfREVCVUcoUHJpbnRmLAotICAgICAgICAg
ICAgICAgICAmUmluZy0+RGVidWdJbnRlcmZhY2UsCi0gICAgICAgICAgICAgICAgICJCTEtJRl9P
UHM6IFJFQUQ9JXUgV1JJVEU9JXVcbiIsCi0gICAgICAgICAgICAgICAgIFJpbmctPkJsa09wUmVh
ZCwKLSAgICAgICAgICAgICAgICAgUmluZy0+QmxrT3BXcml0ZSk7Ci0gICAgWEVOQlVTX0RFQlVH
KFByaW50ZiwKLSAgICAgICAgICAgICAgICAgJlJpbmctPkRlYnVnSW50ZXJmYWNlLAotICAgICAg
ICAgICAgICAgICAiQkxLSUZfT1BzOiBJTkRJUkVDVF9SRUFEPSV1IElORElSRUNUX1dSSVRFPSV1
XG4iLAotICAgICAgICAgICAgICAgICBSaW5nLT5CbGtPcEluZGlyZWN0UmVhZCwKLSAgICAgICAg
ICAgICAgICAgUmluZy0+QmxrT3BJbmRpcmVjdFdyaXRlKTsKLSAgICBYRU5CVVNfREVCVUcoUHJp
bnRmLAotICAgICAgICAgICAgICAgICAmUmluZy0+RGVidWdJbnRlcmZhY2UsCi0gICAgICAgICAg
ICAgICAgICJCTEtJRl9PUHM6IEJBUlJJRVI9JXUgRElTQ0FSRD0ldSBGTFVTSD0ldVxuIiwKLSAg
ICAgICAgICAgICAgICAgUmluZy0+QmxrT3BCYXJyaWVyLAotICAgICAgICAgICAgICAgICBSaW5n
LT5CbGtPcERpc2NhcmQsCi0gICAgICAgICAgICAgICAgIFJpbmctPkJsa09wRmx1c2gpOwotICAg
IFhFTkJVU19ERUJVRyhQcmludGYsCi0gICAgICAgICAgICAgICAgICZSaW5nLT5EZWJ1Z0ludGVy
ZmFjZSwKLSAgICAgICAgICAgICAgICAgIlNlZ21lbnRzIEdyYW50ZWQ9JWxsdSBCb3VuY2VkPSVs
bHVcbiIsCi0gICAgICAgICAgICAgICAgIFJpbmctPlNlZ3NHcmFudGVkLAotICAgICAgICAgICAg
ICAgICBSaW5nLT5TZWdzQm91bmNlZCk7CitzdGF0aWMgRk9SQ0VJTkxJTkUgQk9PTEVBTgorX19k
cnZfcmVxdWlyZXNJUlFMKERJU1BBVENIX0xFVkVMKQorX19CbGtpZlJpbmdUcnlBY3F1aXJlTG9j
aygKKyAgICBJTiAgUFhFTlZCRF9CTEtJRl9SSU5HICBCbGtpZlJpbmcKKyAgICApCit7CisgICAg
VUxPTkdfUFRSICAgICAgICAgICAgICAgT2xkOworICAgIFVMT05HX1BUUiAgICAgICAgICAgICAg
IE5ldzsKKyAgICBCT09MRUFOICAgICAgICAgICAgICAgICBBY3F1aXJlZDsKKworICAgIEFTU0VS
VDNVKEtlR2V0Q3VycmVudElycWwoKSwgPT0gLCBESVNQQVRDSF9MRVZFTCk7CisKKyAgICBLZU1l
bW9yeUJhcnJpZXIoKTsKKworICAgIE9sZCA9IChVTE9OR19QVFIpQmxraWZSaW5nLT5Mb2NrICYg
flhFTlZCRF9MT0NLX0JJVDsKKyAgICBOZXcgPSBPbGQgfCBYRU5WQkRfTE9DS19CSVQ7CisKKyAg
ICBBY3F1aXJlZCA9ICgoVUxPTkdfUFRSKUludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlUG9pbnRl
cigmQmxraWZSaW5nLT5Mb2NrLAorICAgICAgICAoUFZPSUQpTmV3LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQVk9JRClPbGQp
ID09IE9sZCkgPyBUUlVFIDogRkFMU0U7CiAKLSAgICBRdWV1ZURlYnVnQ2FsbGJhY2soJlJpbmct
PlByZXBhcmVkUmVxcywKLSAgICAgICAgICAgICAgICAgICAgICAgIlByZXBhcmVkICIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICZSaW5nLT5EZWJ1Z0ludGVyZmFjZSk7Ci0gICAgUXVldWVEZWJ1
Z0NhbGxiYWNrKCZSaW5nLT5TdWJtaXR0ZWRSZXFzLAotICAgICAgICAgICAgICAgICAgICAgICAi
U3VibWl0dGVkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgJlJpbmctPkRlYnVnSW50ZXJmYWNl
KTsKLSAgICBRdWV1ZURlYnVnQ2FsbGJhY2soJlJpbmctPlNodXRkb3duU3JicywKLSAgICAgICAg
ICAgICAgICAgICAgICAgIlNodXRkb3duICIsCi0gICAgICAgICAgICAgICAgICAgICAgICZSaW5n
LT5EZWJ1Z0ludGVyZmFjZSk7CisgICAgS2VNZW1vcnlCYXJyaWVyKCk7CisKKyAgICBpZiAoQWNx
dWlyZWQpIHsKKyAgICAgICAgQVNTRVJUM1AoQmxraWZSaW5nLT5Mb2NrVGhyZWFkLCA9PSAsIE5V
TEwpOworICAgICAgICBCbGtpZlJpbmctPkxvY2tUaHJlYWQgPSBLZUdldEN1cnJlbnRUaHJlYWQo
KTsKKyAgICAgICAgS2VNZW1vcnlCYXJyaWVyKCk7CisgICAgfQorCisgICAgcmV0dXJuIEFjcXVp
cmVkOwogfQogCi1zdGF0aWMgREVDTFNQRUNfTk9JTkxJTkUgVk9JRAotUmluZ0FjcXVpcmVMb2Nr
KAotICAgIElOICBQVk9JRCAgICAgICBBcmd1bWVudAorc3RhdGljIEZPUkNFSU5MSU5FIFZPSUQK
K19fZHJ2X3JlcXVpcmVzSVJRTChESVNQQVRDSF9MRVZFTCkKK19fQmxraWZSaW5nQWNxdWlyZUxv
Y2soCisgICAgSU4gIFBYRU5WQkRfQkxLSUZfUklORyAgQmxraWZSaW5nCiAgICAgKQogewotICAg
IFBYRU5WQkRfUklORyAgICBSaW5nID0gQXJndW1lbnQ7Ci0gICAgS2VBY3F1aXJlU3BpbkxvY2tB
dERwY0xldmVsKCZSaW5nLT5Mb2NrKTsKKyAgICBBU1NFUlQzVShLZUdldEN1cnJlbnRJcnFsKCks
ID09ICwgRElTUEFUQ0hfTEVWRUwpOworCisgICAgZm9yICg7OykgeworICAgICAgICBpZiAoX19C
bGtpZlJpbmdUcnlBY3F1aXJlTG9jayhCbGtpZlJpbmcpKQorICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgX21tX3BhdXNlKCk7CisgICAgfQogfQogCi1zdGF0aWMgREVDTFNQRUNfTk9JTkxJ
TkUgVk9JRAotUmluZ1JlbGVhc2VMb2NrKAotICAgIElOICBQVk9JRCAgICAgICBBcmd1bWVudAor
c3RhdGljIFZPSUQKK0Jsa2lmUmluZ0FjcXVpcmVMb2NrKAorICAgIElOICBQWEVOVkJEX0JMS0lG
X1JJTkcgIEJsa2lmUmluZwogICAgICkKIHsKLSAgICBQWEVOVkJEX1JJTkcgICAgUmluZyA9IEFy
Z3VtZW50OwotICAgIEtlUmVsZWFzZVNwaW5Mb2NrRnJvbURwY0xldmVsKCZSaW5nLT5Mb2NrKTsK
KyAgICBfX0Jsa2lmUmluZ0FjcXVpcmVMb2NrKEJsa2lmUmluZyk7CiB9CiAKLXN0YXRpYyBERUNM
U1BFQ19OT0lOTElORSBOVFNUQVRVUwotUmluZ1JlcXVlc3RDdG9yKAotICAgIElOICBQVk9JRCAg
ICAgICBBcmd1bWVudCwKLSAgICBJTiAgUFZPSUQgICAgICAgT2JqZWN0CitzdGF0aWMgRk9SQ0VJ
TkxJTkUgQk9PTEVBTgorX19kcnZfcmVxdWlyZXNJUlFMKERJU1BBVENIX0xFVkVMKQorX19CbGtp
ZlJpbmdUcnlSZWxlYXNlTG9jaygKKyAgICBJTiAgUFhFTlZCRF9CTEtJRl9SSU5HICBCbGtpZlJp
bmcKICAgICApCiB7Ci0gICAgUFhFTlZCRF9SRVFVRVNUIFJlcXVlc3QgPSBPYmplY3Q7CisgICAg
VUxPTkdfUFRSICAgICAgICAgICAgICAgT2xkOworICAgIFVMT05HX1BUUiAgICAgICAgICAgICAg
IE5ldzsKKyAgICBCT09MRUFOICAgICAgICAgICAgICAgICBSZWxlYXNlZDsKIAotICAgIFVOUkVG
RVJFTkNFRF9QQVJBTUVURVIoQXJndW1lbnQpOworICAgIEFTU0VSVDNVKEtlR2V0Q3VycmVudEly
cWwoKSwgPT0gLCBESVNQQVRDSF9MRVZFTCk7CisgICAgQVNTRVJUM1AoS2VHZXRDdXJyZW50VGhy
ZWFkKCksID09ICwgQmxraWZSaW5nLT5Mb2NrVGhyZWFkKTsKIAotICAgIEluaXRpYWxpemVMaXN0
SGVhZCgmUmVxdWVzdC0+U2VnbWVudHMpOwotICAgIEluaXRpYWxpemVMaXN0SGVhZCgmUmVxdWVz
dC0+SW5kaXJlY3RzKTsKLSAgICByZXR1cm4gU1RBVFVTX1NVQ0NFU1M7CisgICAgT2xkID0gWEVO
VkJEX0xPQ0tfQklUOworICAgIE5ldyA9IDA7CisKKyAgICBCbGtpZlJpbmctPkxvY2tUaHJlYWQg
PSBOVUxMOworCisgICAgS2VNZW1vcnlCYXJyaWVyKCk7CisKKyAgICBSZWxlYXNlZCA9ICgoVUxP
TkdfUFRSKUludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlUG9pbnRlcigmQmxraWZSaW5nLT5Mb2Nr
LAorICAgICAgICAoUFZPSUQpTmV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQVk9JRClPbGQpID09IE9sZCkgPyBUUlVFIDog
RkFMU0U7CisKKyAgICBLZU1lbW9yeUJhcnJpZXIoKTsKKworICAgIGlmICghUmVsZWFzZWQpIHsK
KyAgICAgICAgQVNTRVJUM1AoQmxraWZSaW5nLT5Mb2NrVGhyZWFkLCA9PSAsIE5VTEwpOworICAg
ICAgICBCbGtpZlJpbmctPkxvY2tUaHJlYWQgPSBLZUdldEN1cnJlbnRUaHJlYWQoKTsKKyAgICAg
ICAgS2VNZW1vcnlCYXJyaWVyKCk7CisgICAgfQorCisgICAgcmV0dXJuIFJlbGVhc2VkOwogfQog
Ci1zdGF0aWMgREVDTFNQRUNfTk9JTkxJTkUgVk9JRAotUmluZ1JlcXVlc3REdG9yKAotICAgIElO
ICBQVk9JRCAgICAgICBBcmd1bWVudCwKLSAgICBJTiAgUFZPSUQgICAgICAgT2JqZWN0CitzdGF0
aWMgRk9SQ0VJTkxJTkUgVk9JRAorX19kcnZfcmVxdWlyZXNJUlFMKERJU1BBVENIX0xFVkVMKQor
X19CbGtpZlJpbmdSZWxlYXNlTG9jaygKKyAgICBJTiAgUFhFTlZCRF9CTEtJRl9SSU5HICBCbGtp
ZlJpbmcKICAgICApCiB7Ci0gICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihBcmd1bWVudCk7Ci0g
ICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihPYmplY3QpOworICAgIEFTU0VSVDNVKEtlR2V0Q3Vy
cmVudElycWwoKSwgPT0gLCBESVNQQVRDSF9MRVZFTCk7CisKKyAgICAvLyBBcyBsb2NrIGhvbGRl
ciBpdCBpcyBvdXIgcmVzcG9uc2liaWxpdHkgdG8gZHJhaW4gdGhlIGF0b21pYworICAgIC8vIHBh
Y2tldCBsaXN0IGludG8gdGhlIHRyYW5zbWl0IHF1ZXVlIGJlZm9yZSB3ZSBhY3R1YWxseSBkcm9w
IHRoZQorICAgIC8vIGxvY2suIFRoaXMgbWF5LCBvZiBjb3Vyc2UsIHRha2UgYSBmZXcgYXR0ZW1w
dHMgYXMgYW5vdGhlcgorICAgIC8vIHRocmVhZCBjb3VsZCBiZSBzaW11bnRhbmVvdXNseSBhZGRp
bmcgdG8gdGhlIGxpc3QuCisKKyAgICBkbyB7CisgICAgICAgIEJsa2lmUmluZ1N3aXp6bGUoQmxr
aWZSaW5nKTsKKyAgICAgICAgQmxraWZSaW5nU2NoZWR1bGUoQmxraWZSaW5nKTsKKyAgICB9IHdo
aWxlICghX19CbGtpZlJpbmdUcnlSZWxlYXNlTG9jayhCbGtpZlJpbmcpKTsKIH0KIAotc3RhdGlj
IERFQ0xTUEVDX05PSU5MSU5FIE5UU1RBVFVTCi1SaW5nU2VnbWVudEN0b3IoCi0gICAgSU4gIFBW
T0lEICAgICAgIEFyZ3VtZW50LAotICAgIElOICBQVk9JRCAgICAgICBPYmplY3QKK3N0YXRpYyBW
T0lECitCbGtpZlJpbmdSZWxlYXNlTG9jaygKKyAgICBJTiAgUFhFTlZCRF9CTEtJRl9SSU5HICBC
bGtpZlJpbmcKICAgICApCiB7Ci0gICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihBcmd1bWVudCk7
Ci0gICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihPYmplY3QpOworICAgIF9fQmxraWZSaW5nUmVs
ZWFzZUxvY2soQmxraWZSaW5nKTsKK30KKworS1NFUlZJQ0VfUk9VVElORSAgICBCbGtpZlJpbmdJ
bnRlcnJ1cHQ7CisKK0JPT0xFQU4KK0Jsa2lmUmluZ0ludGVycnVwdCgKKyAgICBJTiAgUEtJTlRF
UlJVUFQgICAgIEludGVycnVwdE9iamVjdCwKKyAgICBJTiAgUFZPSUQgICAgICAgICAgIEFyZ3Vt
ZW50CisgICAgKQoreworICAgIFBYRU5WQkRfQkxLSUZfUklORyAgQmxraWZSaW5nID0gQXJndW1l
bnQ7CisKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKEludGVycnVwdE9iamVjdCk7CisKKyAg
ICBBU1NFUlQoQmxraWZSaW5nICE9IE5VTEwpOworCisgICAgQmxraWZSaW5nLT5FdmVudHMrKzsK
KworICAgIGlmIChLZUluc2VydFF1ZXVlRHBjKCZCbGtpZlJpbmctPkRwYywgTlVMTCwgTlVMTCkp
CisgICAgICAgIEJsa2lmUmluZy0+RHBjcysrOworCisgICAgcmV0dXJuIFRSVUU7Cit9CisKK19f
ZHJ2X2Z1bmN0aW9uQ2xhc3MoS0RFRkVSUkVEX1JPVVRJTkUpCitfX2Rydl9tYXhJUlFMKERJU1BB
VENIX0xFVkVMKQorX19kcnZfbWluSVJRTChQQVNTSVZFX0xFVkVMKQorX19kcnZfc2FtZUlSUUwK
K3N0YXRpYyBWT0lECitCbGtpZlJpbmdEcGMoCisgICAgSU4gIFBLRFBDICAgICAgICAgICBEcGMs
CisgICAgSU4gIFBWT0lEICAgICAgICAgICBDb250ZXh0LAorICAgIElOICBQVk9JRCAgICAgICAg
ICAgQXJndW1lbnQxLAorICAgIElOICBQVk9JRCAgICAgICAgICAgQXJndW1lbnQyCisgICAgKQor
eworICAgIFBYRU5WQkRfQkxLSUZfUklORyAgQmxraWZSaW5nID0gQ29udGV4dDsKKyAgICBQWEVO
VkJEX1JJTkcgICAgICAgIFJpbmc7CisKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKERwYyk7
CisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihBcmd1bWVudDEpOworICAgIFVOUkVGRVJFTkNF
RF9QQVJBTUVURVIoQXJndW1lbnQyKTsKKworICAgIEFTU0VSVChCbGtpZlJpbmcgIT0gTlVMTCk7
CisKKyAgICBSaW5nID0gQmxraWZSaW5nLT5SaW5nOworCisgICAgZm9yICg7OykgeworICAgICAg
ICBCT09MRUFOICAgICAgICAgUmV0cnk7CisgICAgICAgIEtJUlFMICAgICAgICAgICBJcnFsOwor
CisgICAgICAgIEtlUmFpc2VJcnFsKERJU1BBVENIX0xFVkVMLCAmSXJxbCk7CisgICAgICAgIF9f
QmxraWZSaW5nQWNxdWlyZUxvY2soQmxraWZSaW5nKTsKKyAgICAgICAgUmV0cnkgPSBCbGtpZlJp
bmdQb2xsKEJsa2lmUmluZyk7CisgICAgICAgIF9fQmxraWZSaW5nUmVsZWFzZUxvY2soQmxraWZS
aW5nKTsKKyAgICAgICAgS2VMb3dlcklycWwoSXJxbCk7CisKKyAgICAgICAgaWYgKCFSZXRyeSkK
KyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIFhFTkJVU19FVlRDSE4oVW5tYXNrLAor
ICAgICAgICAgICAgICAgICAgJlJpbmctPkV2dGNobkludGVyZmFjZSwKKyAgICAgICAgICAgICAg
ICAgIEJsa2lmUmluZy0+Q2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgIEZBTFNFKTsKK30KKwor
c3RhdGljIE5UU1RBVFVTCitCbGtpZlJpbmdDcmVhdGUoCisgICAgSU4gIFBYRU5WQkRfUklORyAg
ICAgICAgUmluZywKKyAgICBJTiAgVUxPTkcgICAgICAgICAgICAgICBJbmRleCwKKyAgICBPVVQg
UFhFTlZCRF9CTEtJRl9SSU5HKiBCbGtpZlJpbmcKKyAgICApCit7CisgICAgUFhFTlZCRF9GUk9O
VEVORCAgICAgICAgRnJvbnRlbmQ7CisgICAgVUxPTkcgICAgICAgICAgICAgICAgICAgTGVuZ3Ro
OworICAgIFBDSEFSICAgICAgICAgICAgICAgICAgIFBhdGg7CisgICAgQ0hBUiAgICAgICAgICAg
ICAgICAgICAgTmFtZVtNQVhfTkFNRV9MRU5dOworICAgIE5UU1RBVFVTICAgICAgICAgICAgICAg
IHN0YXR1czsKKworICAgIEZyb250ZW5kID0gUmluZy0+RnJvbnRlbmQ7CisKKyAgICBMZW5ndGgg
PSAoVUxPTkcpc3RybGVuKEZyb250ZW5kR2V0RnJvbnRlbmRQYXRoKEZyb250ZW5kKSkgKworICAg
ICAgICAoVUxPTkcpc3RybGVuKCIvcXVldWUteHh4Iik7CisKKyAgICBQYXRoID0gX19SaW5nQWxs
b2NhdGUoTGVuZ3RoICsgMSk7CisKKyAgICBzdGF0dXMgPSBTVEFUVVNfTk9fTUVNT1JZOworICAg
IGlmIChQYXRoID09IE5VTEwpCisgICAgICAgIGdvdG8gZmFpbDE7CisKKyAgICBzdGF0dXMgPSBS
dGxTdHJpbmdDY2hQcmludGZBKFBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMvcXVldWUtJXUi
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJvbnRlbmRHZXRGcm9udGVuZFBh
dGgoRnJvbnRlbmQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXgpOwor
ICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKQorICAgICAgICBnb3RvIGZhaWwyOworCisgICAg
KkJsa2lmUmluZyA9IF9fUmluZ0FsbG9jYXRlKHNpemVvZihYRU5WQkRfQkxLSUZfUklORykpOwor
CisgICAgc3RhdHVzID0gU1RBVFVTX05PX01FTU9SWTsKKyAgICBpZiAoKkJsa2lmUmluZyA9PSBO
VUxMKQorICAgICAgICBnb3RvIGZhaWwzOworCisgICAgKCpCbGtpZlJpbmcpLT5SaW5nID0gUmlu
ZzsKKyAgICAoKkJsa2lmUmluZyktPkluZGV4ID0gSW5kZXg7CisgICAgKCpCbGtpZlJpbmcpLT5Q
YXRoID0gUGF0aDsKKyAgICBQYXRoID0gTlVMTDsKKworICAgIEluaXRpYWxpemVMaXN0SGVhZCgm
KCpCbGtpZlJpbmcpLT5TcmJRdWV1ZSk7CisgICAgSW5pdGlhbGl6ZUxpc3RIZWFkKCYoKkJsa2lm
UmluZyktPlNodXRkb3duUXVldWUpOworICAgIEluaXRpYWxpemVMaXN0SGVhZCgmKCpCbGtpZlJp
bmcpLT5TdWJtaXR0ZWRMaXN0KTsKKyAgICBJbml0aWFsaXplTGlzdEhlYWQoJigqQmxraWZSaW5n
KS0+U3RhdGUuTGlzdCk7CisKKyAgICBLZUluaXRpYWxpemVUaHJlYWRlZERwYygmKCpCbGtpZlJp
bmcpLT5EcGMsIEJsa2lmUmluZ0RwYywgKkJsa2lmUmluZyk7CisKKyAgICBzdGF0dXMgPSBSdGxT
dHJpbmdDYlByaW50ZkEoTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6
ZW9mKE5hbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmJkXyV1X3F1ZXVl
XyV1X3JlcXVlc3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcm9udGVuZEdl
dFRhcmdldElkKEZyb250ZW5kKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5k
ZXgpOworICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKQorICAgICAgICBnb3RvIGZhaWw0Owor
CisgICAgc3RhdHVzID0gWEVOQlVTX0NBQ0hFKENyZWF0ZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgJlJpbmctPkNhY2hlSW50ZXJmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBO
YW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoWEVOVkJEX1JFUVVFU1QpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICBC
bGtpZlJpbmdSZXF1ZXN0Q3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQmxraWZSaW5n
UmVxdWVzdER0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEJsa2lmUmluZ0FjcXVpcmVM
b2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICBCbGtpZlJpbmdSZWxlYXNlTG9jaywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgKkJsa2lmUmluZywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgJigqQmxraWZSaW5nKS0+UmVxdWVzdENhY2hlKTsKKyAgICBpZiAoIU5UX1NVQ0NFU1Mo
c3RhdHVzKSkKKyAgICAgICAgZ290byBmYWlsNTsKKworICAgIHN0YXR1cyA9IFJ0bFN0cmluZ0Ni
UHJpbnRmQShOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoTmFt
ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YmRfJXVfcXVldWVfJXVfc2Vn
bWVudCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyb250ZW5kR2V0VGFyZ2V0
SWQoRnJvbnRlbmQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleCk7Cisg
ICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpCisgICAgICAgIGdvdG8gZmFpbDY7CisKKyAgICBz
dGF0dXMgPSBYRU5CVVNfQ0FDSEUoQ3JlYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAm
UmluZy0+Q2FjaGVJbnRlcmZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihYRU5WQkRfU0VHTUVOVCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEJsa2lmUmlu
Z1NlZ21lbnRDdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBCbGtpZlJpbmdTZWdtZW50
RHRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQmxraWZSaW5nQWNxdWlyZUxvY2ssCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIEJsa2lmUmluZ1JlbGVhc2VMb2NrLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAqQmxraWZSaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAm
KCpCbGtpZlJpbmcpLT5TZWdtZW50Q2FjaGUpOworICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMp
KQorICAgICAgICBnb3RvIGZhaWw3OworCisgICAgc3RhdHVzID0gUnRsU3RyaW5nQ2JQcmludGZB
KE5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihOYW1lKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZiZF8ldV9xdWV1ZV8ldV9pbmRpcmVjdCIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyb250ZW5kR2V0VGFyZ2V0SWQoRnJv
bnRlbmQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleCk7CisgICAgaWYg
KCFOVF9TVUNDRVNTKHN0YXR1cykpCisgICAgICAgIGdvdG8gZmFpbDg7CisKKyAgICBzdGF0dXMg
PSBYRU5CVVNfQ0FDSEUoQ3JlYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmUmluZy0+
Q2FjaGVJbnRlcmZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNpemVvZihYRU5WQkRfSU5ESVJFQ1QpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICBCbGtpZlJpbmdJbmRp
cmVjdEN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEJsa2lmUmluZ0luZGlyZWN0RHRv
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQmxraWZSaW5nQWNxdWlyZUxvY2ssCisgICAg
ICAgICAgICAgICAgICAgICAgICAgIEJsa2lmUmluZ1JlbGVhc2VMb2NrLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAqQmxraWZSaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmKCpC
bGtpZlJpbmcpLT5JbmRpcmVjdENhY2hlKTsKKyAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkK
KyAgICAgICAgZ290byBmYWlsOTsKKwogICAgIHJldHVybiBTVEFUVVNfU1VDQ0VTUzsKKworZmFp
bDk6CisgICAgRXJyb3IoImZhaWw5XG4iKTsKK2ZhaWw4OgorICAgIEVycm9yKCJmYWlsOFxuIik7
CisgICAgWEVOQlVTX0NBQ0hFKERlc3Ryb3ksCisgICAgICAgICAgICAgICAgICZSaW5nLT5DYWNo
ZUludGVyZmFjZSwKKyAgICAgICAgICAgICAgICAgKCpCbGtpZlJpbmcpLT5TZWdtZW50Q2FjaGUp
OworICAgICgqQmxraWZSaW5nKS0+U2VnbWVudENhY2hlID0gTlVMTDsKK2ZhaWw3OgorICAgIEVy
cm9yKCJmYWlsN1xuIik7CitmYWlsNjoKKyAgICBFcnJvcigiZmFpbDZcbiIpOworICAgIFhFTkJV
U19DQUNIRShEZXN0cm95LAorICAgICAgICAgICAgICAgICAmUmluZy0+Q2FjaGVJbnRlcmZhY2Us
CisgICAgICAgICAgICAgICAgICgqQmxraWZSaW5nKS0+UmVxdWVzdENhY2hlKTsKKyAgICAoKkJs
a2lmUmluZyktPlJlcXVlc3RDYWNoZSA9IE5VTEw7CitmYWlsNToKKyAgICBFcnJvcigiZmFpbDVc
biIpOworZmFpbDQ6CisgICAgRXJyb3IoImZhaWw0XG4iKTsKKworICAgIFJ0bFplcm9NZW1vcnko
JigqQmxraWZSaW5nKS0+RHBjLCBzaXplb2YoS0RQQykpOworCisgICAgUnRsWmVyb01lbW9yeSgm
KCpCbGtpZlJpbmcpLT5TdGF0ZS5MaXN0LCBzaXplb2YoTElTVF9FTlRSWSkpOworICAgIFJ0bFpl
cm9NZW1vcnkoJigqQmxraWZSaW5nKS0+U3VibWl0dGVkTGlzdCwgc2l6ZW9mKExJU1RfRU5UUlkp
KTsKKyAgICBSdGxaZXJvTWVtb3J5KCYoKkJsa2lmUmluZyktPlNodXRkb3duUXVldWUsIHNpemVv
ZihMSVNUX0VOVFJZKSk7CisgICAgUnRsWmVyb01lbW9yeSgmKCpCbGtpZlJpbmcpLT5TcmJRdWV1
ZSwgc2l6ZW9mKExJU1RfRU5UUlkpKTsKKworICAgIF9fUmluZ0ZyZWUoKCpCbGtpZlJpbmcpLT5Q
YXRoKTsKKyAgICAoKkJsa2lmUmluZyktPlBhdGg7CisgICAgKCpCbGtpZlJpbmcpLT5JbmRleCA9
IDA7CisgICAgKCpCbGtpZlJpbmcpLT5SaW5nID0gTlVMTDsKKworICAgIEFTU0VSVChJc1plcm9N
ZW1vcnkoKkJsa2lmUmluZywgc2l6ZW9mKFhFTlZCRF9CTEtJRl9SSU5HKSkpOworICAgIF9fUmlu
Z0ZyZWUoKkJsa2lmUmluZyk7CisgICAgKkJsa2lmUmluZyA9IE5VTEw7CitmYWlsMzoKKyAgICBF
cnJvcigiZmFpbDNcbiIpOworZmFpbDI6CisgICAgRXJyb3IoImZhaWwyXG4iKTsKKyAgICBfX1Jp
bmdGcmVlKFBhdGgpOworZmFpbDE6CisgICAgRXJyb3IoImZhaWwxICglMDh4KVxuIiwgc3RhdHVz
KTsKKyAgICByZXR1cm4gc3RhdHVzOwogfQogCi1zdGF0aWMgREVDTFNQRUNfTk9JTkxJTkUgVk9J
RAotUmluZ1NlZ21lbnREdG9yKAotICAgIElOICBQVk9JRCAgICAgICBBcmd1bWVudCwKLSAgICBJ
TiAgUFZPSUQgICAgICAgT2JqZWN0CitzdGF0aWMgVk9JRAorQmxraWZSaW5nRGVzdHJveSgKKyAg
ICBJTiAgUFhFTlZCRF9CTEtJRl9SSU5HICBCbGtpZlJpbmcKICAgICApCiB7Ci0gICAgVU5SRUZF
UkVOQ0VEX1BBUkFNRVRFUihBcmd1bWVudCk7Ci0gICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihP
YmplY3QpOworICAgIFBYRU5WQkRfUklORyAgICAgICAgICAgIFJpbmcgPSBCbGtpZlJpbmctPlJp
bmc7CisKKyAgICBYRU5CVVNfQ0FDSEUoRGVzdHJveSwKKyAgICAgICAgICAgICAgICAgJlJpbmct
PkNhY2hlSW50ZXJmYWNlLAorICAgICAgICAgICAgICAgICBCbGtpZlJpbmctPkluZGlyZWN0Q2Fj
aGUpOworICAgIEJsa2lmUmluZy0+SW5kaXJlY3RDYWNoZSA9IE5VTEw7CisKKyAgICBYRU5CVVNf
Q0FDSEUoRGVzdHJveSwKKyAgICAgICAgICAgICAgICAgJlJpbmctPkNhY2hlSW50ZXJmYWNlLAor
ICAgICAgICAgICAgICAgICBCbGtpZlJpbmctPlNlZ21lbnRDYWNoZSk7CisgICAgQmxraWZSaW5n
LT5TZWdtZW50Q2FjaGUgPSBOVUxMOworCisgICAgWEVOQlVTX0NBQ0hFKERlc3Ryb3ksCisgICAg
ICAgICAgICAgICAgICZSaW5nLT5DYWNoZUludGVyZmFjZSwKKyAgICAgICAgICAgICAgICAgQmxr
aWZSaW5nLT5SZXF1ZXN0Q2FjaGUpOworICAgIEJsa2lmUmluZy0+UmVxdWVzdENhY2hlID0gTlVM
TDsKKworICAgIFJ0bFplcm9NZW1vcnkoJkJsa2lmUmluZy0+RHBjLCBzaXplb2YoS0RQQykpOwor
CisgICAgQVNTRVJUM1UoQmxraWZSaW5nLT5TdGF0ZS5Db3VudCwgPT0gLCAwKTsKKyAgICBBU1NF
UlQoSXNMaXN0RW1wdHkoJkJsa2lmUmluZy0+U3RhdGUuTGlzdCkpOworICAgIFJ0bFplcm9NZW1v
cnkoJkJsa2lmUmluZy0+U3RhdGUuTGlzdCwgc2l6ZW9mKExJU1RfRU5UUlkpKTsKKworICAgIFJ0
bFplcm9NZW1vcnkoJkJsa2lmUmluZy0+U3VibWl0dGVkTGlzdCwgc2l6ZW9mKExJU1RfRU5UUlkp
KTsKKyAgICBSdGxaZXJvTWVtb3J5KCZCbGtpZlJpbmctPlNyYlF1ZXVlLCBzaXplb2YoTElTVF9F
TlRSWSkpOworICAgIFJ0bFplcm9NZW1vcnkoJkJsa2lmUmluZy0+U2h1dGRvd25RdWV1ZSwgc2l6
ZW9mKExJU1RfRU5UUlkpKTsKKworICAgIF9fUmluZ0ZyZWUoQmxraWZSaW5nLT5QYXRoKTsKKyAg
ICBCbGtpZlJpbmctPlBhdGg7CisgICAgQmxraWZSaW5nLT5JbmRleCA9IDA7CisgICAgQmxraWZS
aW5nLT5SaW5nID0gTlVMTDsKKworICAgIEFTU0VSVChJc1plcm9NZW1vcnkoQmxraWZSaW5nLCBz
aXplb2YoWEVOVkJEX0JMS0lGX1JJTkcpKSk7CisgICAgX19SaW5nRnJlZShCbGtpZlJpbmcpOwog
fQogCi1zdGF0aWMgREVDTFNQRUNfTk9JTkxJTkUgTlRTVEFUVVMKLVJpbmdJbmRpcmVjdEN0b3Io
Ci0gICAgSU4gIFBWT0lEICAgICAgICAgICBBcmd1bWVudCwKLSAgICBJTiAgUFZPSUQgICAgICAg
ICAgIE9iamVjdAorc3RhdGljIE5UU1RBVFVTCitCbGtpZlJpbmdDb25uZWN0KAorICAgIElOICBQ
WEVOVkJEX0JMS0lGX1JJTkcgIEJsa2lmUmluZwogICAgICkKIHsKLSAgICBQWEVOVkJEX0lORElS
RUNUICAgIEluZGlyZWN0ID0gT2JqZWN0OwotICAgIE5UU1RBVFVTICAgICAgICAgICAgc3RhdHVz
OworICAgIFBYRU5WQkRfUklORyAgICAgICAgICAgIFJpbmcgPSBCbGtpZlJpbmctPlJpbmc7Cisg
ICAgUFhFTlZCRF9GUk9OVEVORCAgICAgICAgRnJvbnRlbmQgPSBSaW5nLT5Gcm9udGVuZDsKKyAg
ICBQWEVOVkJEX0dSQU5URVIgICAgICAgICBHcmFudGVyID0gRnJvbnRlbmRHZXRHcmFudGVyKEZy
b250ZW5kKTsKKyAgICBDSEFSICAgICAgICAgICAgICAgICAgICBOYW1lW01BWF9OQU1FX0xFTl07
CisgICAgVUxPTkcgICAgICAgICAgICAgICAgICAgSW5kZXg7CisgICAgTlRTVEFUVVMgICAgICAg
ICAgICAgICAgc3RhdHVzOwogCi0gICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihBcmd1bWVudCk7
CisgICAgVHJhY2UoIj09PT0+ICV1XG4iLCBCbGtpZlJpbmctPkluZGV4KTsKKyAgICBBU1NFUlQo
IUJsa2lmUmluZy0+Q29ubmVjdGVkKTsKKworICAgIGlmIChGcm9udGVuZEdldE51bVF1ZXVlcyhG
cm9udGVuZCkgIT0gMSkgeworICAgICAgICBQUk9DRVNTT1JfTlVNQkVSICAgIFByb2NOdW1iZXI7
CisKKyAgICAgICAgc3RhdHVzID0gS2VHZXRQcm9jZXNzb3JOdW1iZXJGcm9tSW5kZXgoQmxraWZS
aW5nLT5JbmRleCwgJlByb2NOdW1iZXIpOworICAgICAgICBBU1NFUlQoTlRfU1VDQ0VTUyhzdGF0
dXMpKTsKKworICAgICAgICBLZVNldFRhcmdldFByb2Nlc3NvckRwY0V4KCZCbGtpZlJpbmctPkRw
YywgJlByb2NOdW1iZXIpOworICAgIH0KKyAgICBLZVNldEltcG9ydGFuY2VEcGMoJkJsa2lmUmlu
Zy0+RHBjLCBNZWRpdW1IaWdoSW1wb3J0YW5jZSk7CisKKyAgICBCbGtpZlJpbmctPk1kbCA9IF9f
QWxsb2NhdGVQYWdlcygxIDw8IFJpbmctPk9yZGVyKTsKIAogICAgIHN0YXR1cyA9IFNUQVRVU19O
T19NRU1PUlk7Ci0gICAgSW5kaXJlY3QtPk1kbCA9IF9fQWxsb2NhdGVQYWdlKCk7Ci0gICAgaWYg
KEluZGlyZWN0LT5NZGwgPT0gTlVMTCkKKyAgICBpZiAoQmxraWZSaW5nLT5NZGwgPT0gTlVMTCkK
ICAgICAgICAgZ290byBmYWlsMTsKIAotICAgIEluZGlyZWN0LT5QYWdlID0gTW1HZXRTeXN0ZW1B
ZGRyZXNzRm9yTWRsU2FmZShJbmRpcmVjdC0+TWRsLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWxQYWdlUHJpb3JpdHkpOwotICAgIEFTU0VS
VChJbmRpcmVjdC0+UGFnZSk7CisgICAgQmxraWZSaW5nLT5TaGFyZWQgPSBNbUdldFN5c3RlbUFk
ZHJlc3NGb3JNZGxTYWZlKEJsa2lmUmluZy0+TWRsLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWxQYWdlUHJpb3JpdHkpOworICAgIEFT
U0VSVChCbGtpZlJpbmctPlNoYXJlZCAhPSBOVUxMKTsKKworI3ByYWdtYSB3YXJuaW5nKHB1c2gp
CisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDMwNSkKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxl
OiA0MzExKSAvLyAndHlwZSBjYXN0JyBwb2ludGVyIHRydW5jYXRpb24gZnJvbSAnYmxraWZfc3Jp
bmdfZW50cnlbMV0nIHRvICdsb25nJworICAgIFNIQVJFRF9SSU5HX0lOSVQoQmxraWZSaW5nLT5T
aGFyZWQpOworICAgIEZST05UX1JJTkdfSU5JVCgmQmxraWZSaW5nLT5Gcm9udCwgQmxraWZSaW5n
LT5TaGFyZWQsIFBBR0VfU0laRSA8PCBSaW5nLT5PcmRlcik7CisjcHJhZ21hIHdhcm5pbmcocG9w
KQorCisgICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgKDF1bCA8PCBSaW5nLT5PcmRlcik7ICsr
SW5kZXgpIHsKKyAgICAgICAgc3RhdHVzID0gR3JhbnRlckdldChHcmFudGVyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE1tR2V0TWRsUGZuQXJyYXkoQmxraWZSaW5nLT5NZGwpW0luZGV4
XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAmQmxraWZSaW5nLT5HcmFudHNbSW5kZXhdKTsKKyAgICAgICAgaWYgKCFOVF9T
VUNDRVNTKHN0YXR1cykpCisgICAgICAgICAgICBnb3RvIGZhaWwyOworICAgIH0KKworICAgIEJs
a2lmUmluZy0+Q2hhbm5lbCA9IFhFTkJVU19FVlRDSE4oT3BlbiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICZSaW5nLT5FdnRjaG5JbnRlcmZhY2UsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYRU5CVVNfRVZUQ0hOX1RZUEVfVU5CT1VORCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJsa2lmUmluZ0ludGVycnVw
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJsa2lmUmluZywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyb250ZW5kR2V0QmFja2VuZERv
bWFpbihSaW5nLT5Gcm9udGVuZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBUUlVFKTsKKyAgICBzdGF0dXMgPSBTVEFUVVNfTk9fTUVNT1JZOworICAgIGlmIChCbGtp
ZlJpbmctPkNoYW5uZWwgPT0gTlVMTCkKKyAgICAgICAgZ290byBmYWlsMzsKKworICAgIFhFTkJV
U19FVlRDSE4oVW5tYXNrLAorICAgICAgICAgICAgICAgICAgJlJpbmctPkV2dGNobkludGVyZmFj
ZSwKKyAgICAgICAgICAgICAgICAgIEJsa2lmUmluZy0+Q2hhbm5lbCwKKyAgICAgICAgICAgICAg
ICAgIEZBTFNFKTsKKworICAgIHN0YXR1cyA9IFJ0bFN0cmluZ0NjaFByaW50ZkEoTmFtZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1BWF9OQU1FX0xFTiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fTU9EVUxFX18ifFJJTkdbJXVdIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEluZGV4KTsKKyAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVz
KSkKKyAgICAgICAgZ290byBmYWlsNDsKKworICAgIHN0YXR1cyA9IFhFTkJVU19ERUJVRyhSZWdp
c3RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJlJpbmctPkRlYnVnSW50ZXJmYWNlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICBCbGtpZlJpbmdEZWJ1Z0NhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICBCbGtp
ZlJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZCbGtpZlJpbmctPkRlYnVnQ2FsbGJh
Y2spOworICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKQorICAgICAgICBnb3RvIGZhaWw1Owor
CisgICAgQmxraWZSaW5nLT5Db25uZWN0ZWQgPSBUUlVFOworICAgIFRyYWNlKCI8PT09PSAldVxu
IiwgQmxraWZSaW5nLT5JbmRleCk7CiAKICAgICByZXR1cm4gU1RBVFVTX1NVQ0NFU1M7CiAKK2Zh
aWw1OgorICAgIEVycm9yKCJmYWlsNVxuIik7CitmYWlsNDoKKyAgICBFcnJvcigiZmFpbDRcbiIp
OworICAgIFhFTkJVU19FVlRDSE4oQ2xvc2UsCisgICAgICAgICAgICAgICAgICAmUmluZy0+RXZ0
Y2huSW50ZXJmYWNlLAorICAgICAgICAgICAgICAgICAgQmxraWZSaW5nLT5DaGFubmVsKTsKKyAg
ICBCbGtpZlJpbmctPkNoYW5uZWwgPSBOVUxMOworZmFpbDM6CisgICAgRXJyb3IoImZhaWwzXG4i
KTsKK2ZhaWwyOgorICAgIEVycm9yKCJmYWlsMlxuIik7CisgICAgZm9yIChJbmRleCA9IDA7IElu
ZGV4IDwgKDF1bCA8PCBSaW5nLT5PcmRlcik7ICsrSW5kZXgpIHsKKyAgICAgICAgaWYgKEJsa2lm
UmluZy0+R3JhbnRzW0luZGV4XSA9PSBOVUxMKQorICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgR3JhbnRlclB1dChHcmFudGVyLCBCbGtpZlJpbmctPkdyYW50c1tJbmRleF0pOworICAg
ICAgICBCbGtpZlJpbmctPkdyYW50c1tJbmRleF0gPSBOVUxMOworICAgIH0KKworICAgIFJ0bFpl
cm9NZW1vcnkoJkJsa2lmUmluZy0+RnJvbnQsIHNpemVvZihibGtpZl9mcm9udF9yaW5nX3QpKTsK
KworICAgIF9fRnJlZVBhZ2VzKEJsa2lmUmluZy0+TWRsKTsKKyAgICBCbGtpZlJpbmctPlNoYXJl
ZCA9IE5VTEw7CisgICAgQmxraWZSaW5nLT5NZGwgPSBOVUxMOwogZmFpbDE6CiAgICAgRXJyb3Io
ImZhaWwxICUwOHhcbiIsIHN0YXR1cyk7CiAgICAgcmV0dXJuIHN0YXR1czsKIH0KIAorc3RhdGlj
IE5UU1RBVFVTCitCbGtpZlJpbmdTdG9yZVdyaXRlKAorICAgIElOICBQWEVOVkJEX0JMS0lGX1JJ
TkcgIEJsa2lmUmluZywKKyAgICBJTiAgUFZPSUQgICAgICAgICAgICAgICBUcmFuc2FjdGlvbgor
ICAgICkKK3sKKyAgICBQWEVOVkJEX1JJTkcgICAgICAgICAgICBSaW5nID0gQmxraWZSaW5nLT5S
aW5nOworICAgIFBYRU5WQkRfRlJPTlRFTkQgICAgICAgIEZyb250ZW5kID0gUmluZy0+RnJvbnRl
bmQ7CisgICAgUFhFTlZCRF9HUkFOVEVSICAgICAgICAgR3JhbnRlciA9IEZyb250ZW5kR2V0R3Jh
bnRlcihGcm9udGVuZCk7CisgICAgUENIQVIgICAgICAgICAgICAgICAgICAgUGF0aDsKKyAgICBO
VFNUQVRVUyAgICAgICAgICAgICAgICBzdGF0dXM7CisKKyAgICBQYXRoID0gKEZyb250ZW5kR2V0
TnVtUXVldWVzKEZyb250ZW5kKSA9PSAxKSA/CisgICAgICAgIEZyb250ZW5kR2V0RnJvbnRlbmRQ
YXRoKEZyb250ZW5kKSA6CisgICAgICAgIEJsa2lmUmluZy0+UGF0aDsKKworICAgIHN0YXR1cyA9
IFhFTkJVU19TVE9SRShQcmludGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZSaW5nLT5T
dG9yZUludGVyZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNhY3Rpb24sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIFBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICJldmVudC1jaGFubmVsIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiV1IiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgWEVOQlVTX0VWVENITihHZXRQb3J0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZSaW5nLT5FdnRjaG5JbnRlcmZhY2UsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmxraWZSaW5nLT5DaGFubmVsKSk7
CisgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpCisgICAgICAgIGdvdG8gZmFpbDE7CisKKyAg
ICBpZiAoUmluZy0+T3JkZXIgPT0gMCkgeworICAgICAgICBzdGF0dXMgPSBYRU5CVVNfU1RPUkUo
UHJpbnRmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlJpbmctPlN0b3JlSW50ZXJm
YWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNhY3Rpb24sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBQYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgInJpbmctcmVmIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIldSIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHcmFudGVyUmVmZXJlbmNlKEdyYW50ZXIsIEJsa2lm
UmluZy0+R3JhbnRzWzBdKSk7CisgICAgICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKQorICAg
ICAgICAgICAgZ290byBmYWlsMjsKKyAgICB9IGVsc2UgeworICAgICAgICBVTE9ORyAgICAgICAg
ICAgSW5kZXg7CisKKyAgICAgICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgKDF1bCA8PCBSaW5n
LT5PcmRlcik7ICsrSW5kZXgpIHsKKyAgICAgICAgICAgIENIQVIgICAgICAgIE5hbWVbTUFYX05B
TUVfTEVOICsgMV07CisKKyAgICAgICAgICAgIHN0YXR1cyA9IFJ0bFN0cmluZ0NjaFByaW50ZkEo
TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFYX05BTUVf
TEVOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmluZy1yZWYl
dSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4KTsKKyAg
ICAgICAgICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKQorICAgICAgICAgICAgICAgIGdvdG8g
ZmFpbDM7CisKKyAgICAgICAgICAgIHN0YXR1cyA9IFhFTkJVU19TVE9SRShQcmludGYsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlJpbmctPlN0b3JlSW50ZXJmYWNlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zYWN0aW9uLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXUiLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyYW50ZXJSZWZlcmVuY2UoR3JhbnRlciwg
QmxraWZSaW5nLT5HcmFudHNbSW5kZXhdKSk7CisgICAgICAgICAgICBpZiAoIU5UX1NVQ0NFU1Mo
c3RhdHVzKSkKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWw0OworICAgICAgICB9CisgICAgfQor
CisgICAgcmV0dXJuIFNUQVRVU19TVUNDRVNTOworCitmYWlsNDoKK2ZhaWwzOgorZmFpbDI6Citm
YWlsMToKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgVk9JRAorQmxraWZSaW5nRW5h
YmxlKAorICAgIElOICBQWEVOVkJEX0JMS0lGX1JJTkcgIEJsa2lmUmluZworICAgICkKK3sKKyAg
ICBUcmFjZSgiPT09PT4gJXVcbiIsIEJsa2lmUmluZy0+SW5kZXgpOworCisgICAgX19CbGtpZlJp
bmdBY3F1aXJlTG9jayhCbGtpZlJpbmcpOworICAgIEFTU0VSVCghQmxraWZSaW5nLT5FbmFibGVk
KTsKKyAgICBCbGtpZlJpbmctPkVuYWJsZWQgPSBUUlVFOworICAgIF9fQmxraWZSaW5nUmVsZWFz
ZUxvY2soQmxraWZSaW5nKTsKKworICAgIFRyYWNlKCI8PT09PSAldVxuIiwgQmxraWZSaW5nLT5J
bmRleCk7Cit9CisKK3N0YXRpYyBWT0lECitCbGtpZlJpbmdEaXNhYmxlKAorICAgIElOICBQWEVO
VkJEX0JMS0lGX1JJTkcgIEJsa2lmUmluZworICAgICkKK3sKKyAgICBQWEVOVkJEX1JJTkcgICAg
ICAgICAgICBSaW5nID0gQmxraWZSaW5nLT5SaW5nOworICAgIFVMT05HICAgICAgICAgICAgICAg
ICAgIEF0dGVtcHQ7CisKKyAgICBUcmFjZSgiPT09PT4gJXVcbiIsIEJsa2lmUmluZy0+SW5kZXgp
OworCisgICAgX19CbGtpZlJpbmdBY3F1aXJlTG9jayhCbGtpZlJpbmcpOworICAgIEFTU0VSVChC
bGtpZlJpbmctPkVuYWJsZWQpOworCisgICAgLy8gRGlzY2FyZCBhbnkgcGVuZGluZyByZXF1ZXN0
cworICAgIHdoaWxlICghSXNMaXN0RW1wdHkoJkJsa2lmUmluZy0+U3RhdGUuTGlzdCkpIHsKKyAg
ICAgICAgUExJU1RfRU5UUlkgICAgICAgICBMaXN0RW50cnk7CisgICAgICAgIFBYRU5WQkRfUkVR
VUVTVCAgICAgUmVxdWVzdDsKKyAgICAgICAgUFhFTlZCRF9TUkJFWFQgICAgICBTcmJFeHQ7Cisg
ICAgICAgIFBTQ1NJX1JFUVVFU1RfQkxPQ0sgU3JiOworCisgICAgICAgIExpc3RFbnRyeSA9IFJl
bW92ZUhlYWRMaXN0KCZCbGtpZlJpbmctPlN0YXRlLkxpc3QpOworICAgICAgICBBU1NFUlQzUChM
aXN0RW50cnksICE9ICwgJkJsa2lmUmluZy0+U3RhdGUuTGlzdCk7CisKKyAgICAgICAgUmVxdWVz
dCA9IENPTlRBSU5JTkdfUkVDT1JEKExpc3RFbnRyeSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFhFTlZCRF9SRVFVRVNULAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgTGlzdEVudHJ5KTsKKyAgICAgICAgU3JiRXh0ID0gUmVxdWVzdC0+U3JiRXh0Owor
ICAgICAgICBTcmIgPSBTcmJFeHQtPlNyYjsKKyAgICAgICAgU3JiLT5TcmJTdGF0dXMgPSBTUkJf
U1RBVFVTX0FCT1JURUQ7CisgICAgICAgIFNyYi0+U2NzaVN0YXR1cyA9IDB4NDA7IC8vIFNDU0lf
QUJPUlRFRAorCisgICAgICAgIEJsa2lmUmluZ1B1dFJlcXVlc3QoQmxraWZSaW5nLCBSZXF1ZXN0
KTsKKworICAgICAgICBpZiAoSW50ZXJsb2NrZWREZWNyZW1lbnQoJlNyYkV4dC0+UmVxdWVzdENv
dW50KSA9PSAwKQorICAgICAgICAgICAgX19CbGtpZlJpbmdDb21wbGV0ZVNyYihCbGtpZlJpbmcs
IFNyYkV4dCk7CisgICAgfQorCisgICAgQVNTRVJUM1UoQmxraWZSaW5nLT5TdGF0ZS5Db3VudCwg
PT0gLCAwKTsKKworICAgIEF0dGVtcHQgPSAwOworICAgIEFTU0VSVDNVKEJsa2lmUmluZy0+UmVx
dWVzdHNQdXNoZWQsID09ICwgQmxraWZSaW5nLT5SZXF1ZXN0c1Bvc3RlZCk7CisgICAgd2hpbGUg
KEJsa2lmUmluZy0+UmVzcG9uc2VzUHJvY2Vzc2VkICE9IEJsa2lmUmluZy0+UmVxdWVzdHNQdXNo
ZWQpIHsKKyAgICAgICAgQXR0ZW1wdCsrOworICAgICAgICBBU1NFUlQoQXR0ZW1wdCA8IDEwMCk7
CisKKyAgICAgICAgLy8gVHJ5IHRvIG1vdmUgdGhpbmdzIGFsb25nCisgICAgICAgIF9fQmxraWZS
aW5nU2VuZChCbGtpZlJpbmcpOworICAgICAgICAoVk9JRClCbGtpZlJpbmdQb2xsKEJsa2lmUmlu
Zyk7CisKKyAgICAgICAgLy8gV2UgYXJlIHdhaXRpbmcgZm9yIGEgd2F0Y2ggZXZlbnQgYXQgRElT
UEFUQ0hfTEVWRUwgc28KKyAgICAgICAgLy8gaXQgaXMgb3VyIHJlc3BvbnNpYmlsaXR5IHRvIHBv
bGwgdGhlIHN0b3JlIHJpbmcuCisgICAgICAgIFhFTkJVU19TVE9SRShQb2xsLAorICAgICAgICAg
ICAgICAgICAgICAgJlJpbmctPlN0b3JlSW50ZXJmYWNlKTsKKworICAgICAgICBLZVN0YWxsRXhl
Y3V0aW9uUHJvY2Vzc29yKDEwMDApOyAgICAvLyAxbXMKKyAgICB9CisKKyAgICBCbGtpZlJpbmct
PkVuYWJsZWQgPSBGQUxTRTsKKyAgICBfX0Jsa2lmUmluZ1JlbGVhc2VMb2NrKEJsa2lmUmluZyk7
CisKKyAgICBUcmFjZSgiPD09PT0gJXVcbiIsIEJsa2lmUmluZy0+SW5kZXgpOworfQorCitzdGF0
aWMgVk9JRAorQmxraWZSaW5nRGlzY29ubmVjdCgKKyAgICBJTiAgUFhFTlZCRF9CTEtJRl9SSU5H
ICBCbGtpZlJpbmcKKyAgICApCit7CisgICAgUFhFTlZCRF9SSU5HICAgICAgICAgICAgUmluZyA9
IEJsa2lmUmluZy0+UmluZzsKKyAgICBQWEVOVkJEX0dSQU5URVIgICAgICAgICBHcmFudGVyID0g
RnJvbnRlbmRHZXRHcmFudGVyKFJpbmctPkZyb250ZW5kKTsKKyAgICBVTE9ORyAgICAgICAgICAg
ICAgICAgICBJbmRleDsKKworICAgIFRyYWNlKCI9PT09PiAldVxuIiwgQmxraWZSaW5nLT5JbmRl
eCk7CisgICAgQVNTRVJUKEJsa2lmUmluZy0+Q29ubmVjdGVkKTsKKworICAgIFhFTkJVU19ERUJV
RyhEZXJlZ2lzdGVyLAorICAgICAgICAgICAgICAgICAmUmluZy0+RGVidWdJbnRlcmZhY2UsCisg
ICAgICAgICAgICAgICAgIEJsa2lmUmluZy0+RGVidWdDYWxsYmFjayk7CisgICAgQmxraWZSaW5n
LT5EZWJ1Z0NhbGxiYWNrID0gTlVMTDsKKworICAgIFhFTkJVU19FVlRDSE4oQ2xvc2UsCisgICAg
ICAgICAgICAgICAgICAmUmluZy0+RXZ0Y2huSW50ZXJmYWNlLAorICAgICAgICAgICAgICAgICAg
QmxraWZSaW5nLT5DaGFubmVsKTsKKyAgICBCbGtpZlJpbmctPkNoYW5uZWwgPSBOVUxMOworCisg
ICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgKDF1bCA8PCBSaW5nLT5PcmRlcik7ICsrSW5kZXgp
IHsKKyAgICAgICAgaWYgKEJsa2lmUmluZy0+R3JhbnRzW0luZGV4XSA9PSBOVUxMKQorICAgICAg
ICAgICAgY29udGludWU7CisKKyAgICAgICAgR3JhbnRlclB1dChHcmFudGVyLCBCbGtpZlJpbmct
PkdyYW50c1tJbmRleF0pOworICAgICAgICBCbGtpZlJpbmctPkdyYW50c1tJbmRleF0gPSBOVUxM
OworICAgIH0KKworICAgIFJ0bFplcm9NZW1vcnkoJkJsa2lmUmluZy0+RnJvbnQsIHNpemVvZihi
bGtpZl9mcm9udF9yaW5nX3QpKTsKKworICAgIF9fRnJlZVBhZ2VzKEJsa2lmUmluZy0+TWRsKTsK
KyAgICBCbGtpZlJpbmctPlNoYXJlZCA9IE5VTEw7CisgICAgQmxraWZSaW5nLT5NZGwgPSBOVUxM
OworCisgICAgQmxraWZSaW5nLT5FdmVudHMgPSAwOworICAgIEJsa2lmUmluZy0+RHBjcyA9IDA7
CisgICAgQmxraWZSaW5nLT5SZXF1ZXN0c1Bvc3RlZCA9IDA7CisgICAgQmxraWZSaW5nLT5SZXF1
ZXN0c1B1c2hlZCA9IDA7CisgICAgQmxraWZSaW5nLT5SZXNwb25zZXNQcm9jZXNzZWQgPSAwOwor
CisgICAgQmxraWZSaW5nLT5Db25uZWN0ZWQgPSBGQUxTRTsKKworICAgIFRyYWNlKCI8PT09PSAl
dVxuIiwgQmxraWZSaW5nLT5JbmRleCk7Cit9CisKK3N0YXRpYyBWT0lECitfX0Jsa2lmUmluZ1F1
ZXVlU3JiKAorICAgIElOICBQWEVOVkJEX0JMS0lGX1JJTkcgIEJsa2lmUmluZywKKyAgICBJTiAg
UFhFTlZCRF9TUkJFWFQgICAgICBTcmJFeHQKKyAgICApCit7CisgICAgUExJU1RfRU5UUlkgICAg
ICAgICAgICAgTGlzdEVudHJ5OworICAgIFVMT05HX1BUUiAgICAgICAgICAgICAgIE9sZDsKKyAg
ICBVTE9OR19QVFIgICAgICAgICAgICAgICBMb2NrQml0OworICAgIFVMT05HX1BUUiAgICAgICAg
ICAgICAgIE5ldzsKKworICAgIExpc3RFbnRyeSA9ICZTcmJFeHQtPkxpc3RFbnRyeTsKKworICAg
IGRvIHsKKyAgICAgICAgT2xkID0gKFVMT05HX1BUUilCbGtpZlJpbmctPkxvY2s7CisgICAgICAg
IExvY2tCaXQgPSBPbGQgJiBYRU5WQkRfTE9DS19CSVQ7CisKKyAgICAgICAgTGlzdEVudHJ5LT5C
bGluayA9IChQVk9JRCkoT2xkICYgflhFTlZCRF9MT0NLX0JJVCk7CisgICAgICAgIE5ldyA9IChV
TE9OR19QVFIpTGlzdEVudHJ5OworICAgICAgICBBU1NFUlQoKE5ldyAmIFhFTlZCRF9MT0NLX0JJ
VCkgPT0gMCk7CisgICAgICAgIE5ldyB8PSBMb2NrQml0OworICAgIH0gd2hpbGUgKChVTE9OR19Q
VFIpSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2VQb2ludGVyKCZCbGtpZlJpbmctPkxvY2ssIChQ
Vk9JRClOZXcsIChQVk9JRClPbGQpICE9IE9sZCk7CisKKyAgICAvLyBfX0Jsa2lmUmluZ1JlbGVh
c2VMb2NrKCkgZHJhaW5zIHRoZSBhdG9taWMgU1JCIGxpc3QgaW50byB0aGUgcXVldWUgdGhlcmVm
b3JlLAorICAgIC8vIGFmdGVyIGFkZGluZyB0byB0aGUgbGlzdCB3ZSBuZWVkIHRvIGF0dGVtcHQg
dG8gZ3JhYiBhbmQgcmVsZWFzZSB0aGUgbG9jay4gSWYgd2UgY2FuJ3QKKyAgICAvLyBncmFiIGl0
IHRoZW4gdGhhdCdzIG9rIGJlY2F1c2Ugd2hpY2hldmVyIHRocmVhZCBpcyBob2xkaW5nIGl0IHdp
bGwgaGF2ZSB0byBjYWxsCisgICAgLy8gX19CbGtpZlJpbmdSZWxlYXNlTG9jaygpIGFuZCB3aWxs
IHRoZXJlZm9yZSBkcmFpbiB0aGUgYXRvbWljIHBhY2tldCBsaXN0LgorCisgICAgaWYgKF9fQmxr
aWZSaW5nVHJ5QWNxdWlyZUxvY2soQmxraWZSaW5nKSkKKyAgICAgICAgX19CbGtpZlJpbmdSZWxl
YXNlTG9jayhCbGtpZlJpbmcpOworfQorCitzdGF0aWMgVk9JRAorX19CbGtpZlJpbmdRdWV1ZVNo
dXRkb3duKAorICAgIElOICBQWEVOVkJEX0JMS0lGX1JJTkcgIEJsa2lmUmluZywKKyAgICBJTiAg
UFhFTlZCRF9TUkJFWFQgICAgICBTcmJFeHQKKyAgICApCit7CisgICAgX19CbGtpZlJpbmdBY3F1
aXJlTG9jayhCbGtpZlJpbmcpOworICAgIEluc2VydFRhaWxMaXN0KCZCbGtpZlJpbmctPlNodXRk
b3duUXVldWUsICZTcmJFeHQtPkxpc3RFbnRyeSk7CisgICAgX19CbGtpZlJpbmdSZWxlYXNlTG9j
ayhCbGtpZlJpbmcpOworfQorCiBzdGF0aWMgREVDTFNQRUNfTk9JTkxJTkUgVk9JRAotUmluZ0lu
ZGlyZWN0RHRvcigKK1JpbmdEZWJ1Z0NhbGxiYWNrKAogICAgIElOICBQVk9JRCAgICAgICBBcmd1
bWVudCwKLSAgICBJTiAgUFZPSUQgICAgICAgT2JqZWN0CisgICAgSU4gIEJPT0xFQU4gICAgIENy
YXNoaW5nCiAgICAgKQogewotICAgIFBYRU5WQkRfSU5ESVJFQ1QgICAgSW5kaXJlY3QgPSBPYmpl
Y3Q7CisgICAgUFhFTlZCRF9SSU5HICAgIFJpbmcgPSBBcmd1bWVudDsKKyAgICBYRU5WQkRfU1RB
VCAgICAgSW5kZXg7CiAKLSAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKEFyZ3VtZW50KTsKKyAg
ICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKENyYXNoaW5nKTsKIAotICAgIF9fRnJlZVBhZ2VzKElu
ZGlyZWN0LT5NZGwpOwotICAgIEluZGlyZWN0LT5QYWdlID0gTlVMTDsKLSAgICBJbmRpcmVjdC0+
TWRsID0gTlVMTDsKKyAgICBYRU5CVVNfREVCVUcoUHJpbnRmLAorICAgICAgICAgICAgICAgICAm
UmluZy0+RGVidWdJbnRlcmZhY2UsCisgICAgICAgICAgICAgICAgICJPcmRlcjogJWRcbiIsCisg
ICAgICAgICAgICAgICAgIFJpbmctPk9yZGVyKTsKKworICAgIGZvciAoSW5kZXggPSAwOyBJbmRl
eCA8IFhFTlZCRF9TVEFUX19NQVg7ICsrSW5kZXgpIHsKKyAgICAgICAgWEVOQlVTX0RFQlVHKFBy
aW50ZiwKKyAgICAgICAgICAgICAgICAgICAgICZSaW5nLT5EZWJ1Z0ludGVyZmFjZSwKKyAgICAg
ICAgICAgICAgICAgICAgICIlczogJXVcbiIsCisgICAgICAgICAgICAgICAgICAgICBfX1N0YXRO
YW1lKEluZGV4KSwKKyAgICAgICAgICAgICAgICAgICAgIFJpbmctPlN0YXRzW0luZGV4XSk7Cisg
ICAgfQogfQogCiBOVFNUQVRVUwpAQCAtMTQ5Myw3ICsyMjQ4LDggQEAgUmluZ0NyZWF0ZSgKIHsK
ICAgICBQWEVOVkJEX1RBUkdFVCAgICAgICAgICBUYXJnZXQgPSBGcm9udGVuZEdldFRhcmdldChG
cm9udGVuZCk7CiAgICAgUFhFTlZCRF9BREFQVEVSICAgICAgICAgQWRhcHRlciA9IFRhcmdldEdl
dEFkYXB0ZXIoVGFyZ2V0KTsKLSAgICBDSEFSICAgICAgICAgICAgICAgICAgICBOYW1lW01BWF9O
QU1FX0xFTl07CisgICAgVUxPTkcgICAgICAgICAgICAgICAgICAgTWF4UXVldWVzOworICAgIFVM
T05HICAgICAgICAgICAgICAgICAgIEluZGV4OwogICAgIE5UU1RBVFVTICAgICAgICAgICAgICAg
IHN0YXR1czsKIAogICAgICpSaW5nID0gX19SaW5nQWxsb2NhdGUoc2l6ZW9mKFhFTlZCRF9SSU5H
KSk7CkBAIC0xNTAyLDEyNyArMjI1OCw3NCBAQCBSaW5nQ3JlYXRlKAogICAgIGlmICgqUmluZyA9
PSBOVUxMKQogICAgICAgICBnb3RvIGZhaWwxOwogCi0gICAgKCpSaW5nKS0+RnJvbnRlbmQgPSBG
cm9udGVuZDsKLSAgICBLZUluaXRpYWxpemVTcGluTG9jaygmKCpSaW5nKS0+TG9jayk7Ci0gICAg
S2VJbml0aWFsaXplVGhyZWFkZWREcGMoJigqUmluZyktPkRwYywgUmluZ0RwYywgKlJpbmcpOwot
ICAgIEtlU2V0SW1wb3J0YW5jZURwYygmKCpSaW5nKS0+RHBjLCBNZWRpdW1IaWdoSW1wb3J0YW5j
ZSk7Ci0KLSAgICBRdWV1ZUluaXQoJigqUmluZyktPlByZXBhcmVkUmVxcyk7Ci0gICAgUXVldWVJ
bml0KCYoKlJpbmcpLT5TdWJtaXR0ZWRSZXFzKTsKLSAgICBRdWV1ZUluaXQoJigqUmluZyktPlNo
dXRkb3duU3Jicyk7Ci0KLSAgICBBZGFwdGVyR2V0Q2FjaGVJbnRlcmZhY2UoQWRhcHRlciwgJigq
UmluZyktPkNhY2hlSW50ZXJmYWNlKTsKLQotICAgIHN0YXR1cyA9IFhFTkJVU19DQUNIRShBY3F1
aXJlLCAmKCpSaW5nKS0+Q2FjaGVJbnRlcmZhY2UpOwotICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0
dXMpKQotICAgICAgICBnb3RvIGZhaWwyOworICAgIEFkYXB0ZXJHZXREZWJ1Z0ludGVyZmFjZShB
ZGFwdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmKCpSaW5nKS0+RGVidWdJbnRl
cmZhY2UpOworICAgIEFkYXB0ZXJHZXRTdG9yZUludGVyZmFjZShBZGFwdGVyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAmKCpSaW5nKS0+U3RvcmVJbnRlcmZhY2UpOworICAgIEFkYXB0
ZXJHZXRDYWNoZUludGVyZmFjZShBZGFwdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAmKCpSaW5nKS0+Q2FjaGVJbnRlcmZhY2UpOworICAgIEFkYXB0ZXJHZXRFdnRjaG5JbnRlcmZh
Y2UoQWRhcHRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYoKlJpbmcpLT5FdnRj
aG5JbnRlcmZhY2UpOwogCi0gICAgc3RhdHVzID0gUnRsU3RyaW5nQ2JQcmludGZBKE5hbWUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihOYW1lKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgInZiZF8ldV9yZXEiLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBGcm9udGVuZEdldFRhcmdldElkKEZyb250ZW5kKSk7Ci0gICAgaWYgKCFOVF9T
VUNDRVNTKHN0YXR1cykpCi0gICAgICAgIGdvdG8gZmFpbDM7CisgICAgKCpSaW5nKS0+RnJvbnRl
bmQgPSBGcm9udGVuZDsKIAotICAgIHN0YXR1cyA9IFhFTkJVU19DQUNIRShDcmVhdGUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICYoKlJpbmcpLT5DYWNoZUludGVyZmFjZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9m
KFhFTlZCRF9SRVFVRVNUKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgMzIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgIFJpbmdSZXF1ZXN0Q3RvciwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgUmluZ1JlcXVlc3REdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICBSaW5nQWNx
dWlyZUxvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFJpbmdSZWxlYXNlTG9jaywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgKlJpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICYoKlJpbmcpLT5SZXF1ZXN0Q2FjaGUpOwotICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKQot
ICAgICAgICBnb3RvIGZhaWw0OworICAgIE1heFF1ZXVlcyA9IEZyb250ZW5kR2V0TWF4UXVldWVz
KEZyb250ZW5kKTsKKyAgICAoKlJpbmcpLT5SaW5nID0gX19SaW5nQWxsb2NhdGUoc2l6ZW9mKFBY
RU5WQkRfQkxLSUZfUklORykgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBN
YXhRdWV1ZXMpOwogCi0gICAgc3RhdHVzID0gUnRsU3RyaW5nQ2JQcmludGZBKE5hbWUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihOYW1lKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgInZiZF8ldV9zZWciLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBGcm9udGVuZEdldFRhcmdldElkKEZyb250ZW5kKSk7Ci0gICAgaWYgKCFOVF9TVUND
RVNTKHN0YXR1cykpCi0gICAgICAgIGdvdG8gZmFpbDU7CisgICAgc3RhdHVzID0gU1RBVFVTX05P
X01FTU9SWTsKKyAgICBpZiAoKCpSaW5nKS0+UmluZyA9PSBOVUxMKQorICAgICAgICBnb3RvIGZh
aWwyOwogCi0gICAgc3RhdHVzID0gWEVOQlVTX0NBQ0hFKENyZWF0ZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgJigqUmluZyktPkNhY2hlSW50ZXJmYWNlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICBOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoWEVOVkJEX1NF
R01FTlQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAzMiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgUmluZ1NlZ21lbnRDdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICBSaW5n
U2VnbWVudER0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFJpbmdBY3F1aXJlTG9jaywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgUmluZ1JlbGVhc2VMb2NrLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAqUmluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJigqUmluZykt
PlNlZ21lbnRDYWNoZSk7Ci0gICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpCi0gICAgICAgIGdv
dG8gZmFpbDY7CisgICAgSW5kZXggPSAwOworICAgIHdoaWxlIChJbmRleCA8IE1heFF1ZXVlcykg
eworICAgICAgICBQWEVOVkJEX0JMS0lGX1JJTkcgIEJsa2lmUmluZzsKIAotICAgIHN0YXR1cyA9
IFJ0bFN0cmluZ0NiUHJpbnRmQShOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzaXplb2YoTmFtZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YmRfJXVf
aW5kIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJvbnRlbmRHZXRUYXJnZXRJ
ZChGcm9udGVuZCkpOwotICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKQotICAgICAgICBnb3Rv
IGZhaWw3OworICAgICAgICBzdGF0dXMgPSBCbGtpZlJpbmdDcmVhdGUoKlJpbmcsIEluZGV4LCAm
QmxraWZSaW5nKTsKKyAgICAgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpCisgICAgICAgICAg
ICBnb3RvIGZhaWwzOwogCi0gICAgc3RhdHVzID0gWEVOQlVTX0NBQ0hFKENyZWF0ZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgJigqUmluZyktPkNhY2hlSW50ZXJmYWNlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICBOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yo
WEVOVkJEX0lORElSRUNUKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgMSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgUmluZ0luZGlyZWN0Q3RvciwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgUmluZ0luZGlyZWN0RHRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgUmluZ0Fj
cXVpcmVMb2NrLAotICAgICAgICAgICAgICAgICAgICAgICAgICBSaW5nUmVsZWFzZUxvY2ssCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICpSaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAmKCpSaW5nKS0+SW5kaXJlY3RDYWNoZSk7Ci0gICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykp
Ci0gICAgICAgIGdvdG8gZmFpbDg7CisgICAgICAgICgqUmluZyktPlJpbmdbSW5kZXhdID0gQmxr
aWZSaW5nOworICAgICAgICBJbmRleCsrOworICAgIH0KIAogICAgIHJldHVybiBTVEFUVVNfU1VD
Q0VTUzsKIAotZmFpbDg6Ci0gICAgRXJyb3IoImZhaWw4XG4iKTsKLWZhaWw3OgotICAgIEVycm9y
KCJmYWlsN1xuIik7Ci0gICAgWEVOQlVTX0NBQ0hFKERlc3Ryb3ksCi0gICAgICAgICAgICAgICAg
ICYoKlJpbmcpLT5DYWNoZUludGVyZmFjZSwKLSAgICAgICAgICAgICAgICAgKCpSaW5nKS0+U2Vn
bWVudENhY2hlKTsKLSAgICAoKlJpbmcpLT5TZWdtZW50Q2FjaGUgPSBOVUxMOwotZmFpbDY6Ci0g
ICAgRXJyb3IoImZhaWw2XG4iKTsKLWZhaWw1OgotICAgIEVycm9yKCJmYWlsNVxuIik7Ci0gICAg
WEVOQlVTX0NBQ0hFKERlc3Ryb3ksCi0gICAgICAgICAgICAgICAgICYoKlJpbmcpLT5DYWNoZUlu
dGVyZmFjZSwKLSAgICAgICAgICAgICAgICAgKCpSaW5nKS0+UmVxdWVzdENhY2hlKTsKLSAgICAo
KlJpbmcpLT5SZXF1ZXN0Q2FjaGUgPSBOVUxMOwotZmFpbDQ6Ci0gICAgRXJyb3IoImZhaWw0XG4i
KTsKIGZhaWwzOgogICAgIEVycm9yKCJmYWlsM1xuIik7Ci0gICAgWEVOQlVTX0NBQ0hFKFJlbGVh
c2UsCi0gICAgICAgICAgICAgICAgICYoKlJpbmcpLT5DYWNoZUludGVyZmFjZSk7CisKKyAgICB3
aGlsZSAoLS1JbmRleCA+IDApIHsKKyAgICAgICAgUFhFTlZCRF9CTEtJRl9SSU5HICBCbGtpZlJp
bmcgPSAoKlJpbmcpLT5SaW5nW0luZGV4XTsKKworICAgICAgICAoKlJpbmcpLT5SaW5nW0luZGV4
XSA9IE5VTEw7CisgICAgICAgIEJsa2lmUmluZ0Rlc3Ryb3koQmxraWZSaW5nKTsKKyAgICB9CisK
KyAgICBfX1JpbmdGcmVlKCgqUmluZyktPlJpbmcpOworICAgICgqUmluZyktPlJpbmcgPSBOVUxM
OworCiBmYWlsMjoKICAgICBFcnJvcigiZmFpbDJcbiIpOwogCisgICAgKCpSaW5nKS0+RnJvbnRl
bmQgPSBOVUxMOworCiAgICAgUnRsWmVyb01lbW9yeSgmKCpSaW5nKS0+Q2FjaGVJbnRlcmZhY2Us
Ci0gICAgICAgICAgICAgICAgICBzaXplb2YgKFhFTkJVU19DQUNIRV9JTlRFUkZBQ0UpKTsKKyAg
ICAgICAgICAgICAgICAgIHNpemVvZihYRU5CVVNfQ0FDSEVfSU5URVJGQUNFKSk7CisKKyAgICBS
dGxaZXJvTWVtb3J5KCYoKlJpbmcpLT5FdnRjaG5JbnRlcmZhY2UsCisgICAgICAgICAgICAgICAg
ICBzaXplb2YoWEVOQlVTX0VWVENITl9JTlRFUkZBQ0UpKTsKIAotICAgIFJ0bFplcm9NZW1vcnko
JigqUmluZyktPlByZXBhcmVkUmVxcywgc2l6ZW9mKFhFTlZCRF9RVUVVRSkpOwotICAgIFJ0bFpl
cm9NZW1vcnkoJigqUmluZyktPlN1Ym1pdHRlZFJlcXMsIHNpemVvZihYRU5WQkRfUVVFVUUpKTsK
LSAgICBSdGxaZXJvTWVtb3J5KCYoKlJpbmcpLT5TaHV0ZG93blNyYnMsIHNpemVvZihYRU5WQkRf
UVVFVUUpKTsKKyAgICBSdGxaZXJvTWVtb3J5KCYoKlJpbmcpLT5TdG9yZUludGVyZmFjZSwKKyAg
ICAgICAgICAgICAgICAgIHNpemVvZihYRU5CVVNfU1RPUkVfSU5URVJGQUNFKSk7CiAKLSAgICBS
dGxaZXJvTWVtb3J5KCYoKlJpbmcpLT5EcGMsIHNpemVvZihLRFBDKSk7Ci0gICAgUnRsWmVyb01l
bW9yeSgmKCpSaW5nKS0+TG9jaywgc2l6ZW9mKEtTUElOX0xPQ0spKTsKLSAgICAoKlJpbmcpLT5G
cm9udGVuZCA9IE5VTEw7CisgICAgUnRsWmVyb01lbW9yeSgmKCpSaW5nKS0+RGVidWdJbnRlcmZh
Y2UsCisgICAgICAgICAgICAgICAgICBzaXplb2YoWEVOQlVTX0RFQlVHX0lOVEVSRkFDRSkpOwog
CiAgICAgQVNTRVJUKElzWmVyb01lbW9yeSgqUmluZywgc2l6ZW9mKFhFTlZCRF9SSU5HKSkpOwog
ICAgIF9fUmluZ0ZyZWUoKlJpbmcpOwotICAgICpSaW5nID0gTlVMTDsKKwogZmFpbDE6Ci0gICAg
RXJyb3IoImZhaWwxICUwOHhcbiIsIHN0YXR1cyk7CisgICAgRXJyb3IoImZhaWwxICglMDh4KVxu
Iiwgc3RhdHVzKTsKICAgICByZXR1cm4gc3RhdHVzOwogfQogCkBAIC0xNjMxLDQ0ICsyMzM0LDM1
IEBAIFJpbmdEZXN0cm95KAogICAgIElOICBQWEVOVkJEX1JJTkcgICAgUmluZwogICAgICkKIHsK
LSAgICBYRU5CVVNfQ0FDSEUoRGVzdHJveSwKLSAgICAgICAgICAgICAgICAgJlJpbmctPkNhY2hl
SW50ZXJmYWNlLAotICAgICAgICAgICAgICAgICBSaW5nLT5JbmRpcmVjdENhY2hlKTsKLSAgICBS
aW5nLT5JbmRpcmVjdENhY2hlID0gTlVMTDsKKyAgICBVTE9ORyAgICAgICAgICAgICAgIEluZGV4
OwogCi0gICAgWEVOQlVTX0NBQ0hFKERlc3Ryb3ksCi0gICAgICAgICAgICAgICAgICZSaW5nLT5D
YWNoZUludGVyZmFjZSwKLSAgICAgICAgICAgICAgICAgUmluZy0+U2VnbWVudENhY2hlKTsKLSAg
ICBSaW5nLT5TZWdtZW50Q2FjaGUgPSBOVUxMOworICAgIEluZGV4ID0gRnJvbnRlbmRHZXRNYXhR
dWV1ZXMoUmluZy0+RnJvbnRlbmQpOwogCi0gICAgWEVOQlVTX0NBQ0hFKERlc3Ryb3ksCi0gICAg
ICAgICAgICAgICAgICZSaW5nLT5DYWNoZUludGVyZmFjZSwKLSAgICAgICAgICAgICAgICAgUmlu
Zy0+UmVxdWVzdENhY2hlKTsKLSAgICBSaW5nLT5SZXF1ZXN0Q2FjaGUgPSBOVUxMOworICAgIHdo
aWxlICgtLUluZGV4ID4gMCkgeworICAgICAgICBQWEVOVkJEX0JMS0lGX1JJTkcgIEJsa2lmUmlu
ZyA9IFJpbmctPlJpbmdbSW5kZXhdOworCisgICAgICAgIFJpbmctPlJpbmdbSW5kZXhdID0gTlVM
TDsKKyAgICAgICAgQmxraWZSaW5nRGVzdHJveShCbGtpZlJpbmcpOworICAgIH0KKworICAgIF9f
UmluZ0ZyZWUoUmluZy0+UmluZyk7CisgICAgUmluZy0+UmluZyA9IE5VTEw7CiAKLSAgICBYRU5C
VVNfQ0FDSEUoUmVsZWFzZSwKLSAgICAgICAgICAgICAgICAgJlJpbmctPkNhY2hlSW50ZXJmYWNl
KTsKKyAgICBSaW5nLT5Gcm9udGVuZCA9IE5VTEw7CiAKICAgICBSdGxaZXJvTWVtb3J5KCZSaW5n
LT5DYWNoZUludGVyZmFjZSwKLSAgICAgICAgICAgICAgICAgIHNpemVvZiAoWEVOQlVTX0NBQ0hF
X0lOVEVSRkFDRSkpOworICAgICAgICAgICAgICAgICAgc2l6ZW9mKFhFTkJVU19DQUNIRV9JTlRF
UkZBQ0UpKTsKIAotICAgIFJ0bFplcm9NZW1vcnkoJlJpbmctPlByZXBhcmVkUmVxcywgc2l6ZW9m
KFhFTlZCRF9RVUVVRSkpOwotICAgIFJ0bFplcm9NZW1vcnkoJlJpbmctPlN1Ym1pdHRlZFJlcXMs
IHNpemVvZihYRU5WQkRfUVVFVUUpKTsKLSAgICBSdGxaZXJvTWVtb3J5KCZSaW5nLT5TaHV0ZG93
blNyYnMsIHNpemVvZihYRU5WQkRfUVVFVUUpKTsKKyAgICBSdGxaZXJvTWVtb3J5KCZSaW5nLT5F
dnRjaG5JbnRlcmZhY2UsCisgICAgICAgICAgICAgICAgICBzaXplb2YoWEVOQlVTX0VWVENITl9J
TlRFUkZBQ0UpKTsKIAotICAgIFJ0bFplcm9NZW1vcnkoJlJpbmctPkRwYywgc2l6ZW9mKEtEUEMp
KTsKLSAgICBSdGxaZXJvTWVtb3J5KCZSaW5nLT5Mb2NrLCBzaXplb2YoS1NQSU5fTE9DSykpOwot
ICAgIFJpbmctPkZyb250ZW5kID0gTlVMTDsKKyAgICBSdGxaZXJvTWVtb3J5KCZSaW5nLT5TdG9y
ZUludGVyZmFjZSwKKyAgICAgICAgICAgICAgICAgIHNpemVvZihYRU5CVVNfU1RPUkVfSU5URVJG
QUNFKSk7CisKKyAgICBSdGxaZXJvTWVtb3J5KCZSaW5nLT5EZWJ1Z0ludGVyZmFjZSwKKyAgICAg
ICAgICAgICAgICAgIHNpemVvZihYRU5CVVNfREVCVUdfSU5URVJGQUNFKSk7CiAKLSAgICBSaW5n
LT5CbGtPcFJlYWQgPSAwOwotICAgIFJpbmctPkJsa09wV3JpdGUgPSAwOwotICAgIFJpbmctPkJs
a09wSW5kaXJlY3RSZWFkID0gMDsKLSAgICBSaW5nLT5CbGtPcEluZGlyZWN0V3JpdGUgPSAwOwot
ICAgIFJpbmctPkJsa09wQmFycmllciA9IDA7Ci0gICAgUmluZy0+QmxrT3BEaXNjYXJkID0gMDsK
LSAgICBSaW5nLT5CbGtPcEZsdXNoID0gMDsKLSAgICBSaW5nLT5TZWdzR3JhbnRlZCA9IDA7Ci0g
ICAgUmluZy0+U2Vnc0JvdW5jZWQgPSAwOworICAgIFJ0bFplcm9NZW1vcnkoUmluZy0+U3RhdHMs
IHNpemVvZihSaW5nLT5TdGF0cykpOwogCiAgICAgQVNTRVJUKElzWmVyb01lbW9yeShSaW5nLCBz
aXplb2YoWEVOVkJEX1JJTkcpKSk7CiAgICAgX19SaW5nRnJlZShSaW5nKTsKQEAgLTE2NzksMzEg
KzIzNzMsMjcgQEAgUmluZ0Nvbm5lY3QoCiAgICAgSU4gIFBYRU5WQkRfUklORyAgICBSaW5nCiAg
ICAgKQogewotICAgIFBYRU5WQkRfVEFSR0VUICAgICAgVGFyZ2V0ID0gRnJvbnRlbmRHZXRUYXJn
ZXQoUmluZy0+RnJvbnRlbmQpOwotICAgIFBYRU5WQkRfQURBUFRFUiAgICAgQWRhcHRlciA9IFRh
cmdldEdldEFkYXB0ZXIoVGFyZ2V0KTsKLSAgICBQWEVOVkJEX0dSQU5URVIgICAgIEdyYW50ZXIg
PSBGcm9udGVuZEdldEdyYW50ZXIoUmluZy0+RnJvbnRlbmQpOwotICAgIFBDSEFSICAgICAgICAg
ICAgICAgQnVmZmVyOworICAgIFVMT05HICAgICAgICAgICAgICAgTWF4UXVldWVzOwogICAgIFVM
T05HICAgICAgICAgICAgICAgSW5kZXg7CisgICAgUENIQVIgICAgICAgICAgICAgICBCdWZmZXI7
CiAgICAgTlRTVEFUVVMgICAgICAgICAgICBzdGF0dXM7CiAKLSAgICBBU1NFUlQoUmluZy0+Q29u
bmVjdGVkID09IEZBTFNFKTsKLQotICAgIEFkYXB0ZXJHZXRTdG9yZUludGVyZmFjZShBZGFwdGVy
LCAmUmluZy0+U3RvcmVJbnRlcmZhY2UpOwotICAgIEFkYXB0ZXJHZXRFdnRjaG5JbnRlcmZhY2Uo
QWRhcHRlciwgJlJpbmctPkV2dGNobkludGVyZmFjZSk7Ci0gICAgQWRhcHRlckdldERlYnVnSW50
ZXJmYWNlKEFkYXB0ZXIsICZSaW5nLT5EZWJ1Z0ludGVyZmFjZSk7Ci0KLSAgICBzdGF0dXMgPSBY
RU5CVVNfU1RPUkUoQWNxdWlyZSwgJlJpbmctPlN0b3JlSW50ZXJmYWNlKTsKKyAgICBzdGF0dXMg
PSBYRU5CVVNfREVCVUcoQWNxdWlyZSwgJlJpbmctPkRlYnVnSW50ZXJmYWNlKTsKICAgICBpZiAo
IU5UX1NVQ0NFU1Moc3RhdHVzKSkKICAgICAgICAgZ290byBmYWlsMTsKIAotICAgIHN0YXR1cyA9
IFhFTkJVU19FVlRDSE4oQWNxdWlyZSwgJlJpbmctPkV2dGNobkludGVyZmFjZSk7CisgICAgc3Rh
dHVzID0gWEVOQlVTX1NUT1JFKEFjcXVpcmUsICZSaW5nLT5TdG9yZUludGVyZmFjZSk7CiAgICAg
aWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpCiAgICAgICAgIGdvdG8gZmFpbDI7CiAKLSAgICBzdGF0
dXMgPSBYRU5CVVNfREVCVUcoQWNxdWlyZSwgJlJpbmctPkRlYnVnSW50ZXJmYWNlKTsKKyAgICBz
dGF0dXMgPSBYRU5CVVNfQ0FDSEUoQWNxdWlyZSwgJlJpbmctPkNhY2hlSW50ZXJmYWNlKTsKICAg
ICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkKICAgICAgICAgZ290byBmYWlsMzsKIAorICAgIHN0
YXR1cyA9IFhFTkJVU19FVlRDSE4oQWNxdWlyZSwgJlJpbmctPkV2dGNobkludGVyZmFjZSk7Cisg
ICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpCisgICAgICAgIGdvdG8gZmFpbDQ7CisKICAgICBz
dGF0dXMgPSBYRU5CVVNfU1RPUkUoUmVhZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgJlJp
bmctPlN0b3JlSW50ZXJmYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLApAQCAt
MTczMCw0NyArMjQyMCwxNyBAQCBSaW5nQ29ubmVjdCgKICAgICAgICAgUmluZy0+T3JkZXIgPSAw
OwogICAgIH0KIAotICAgIFJpbmctPk1kbCA9IF9fQWxsb2NhdGVQYWdlcygxIDw8IFJpbmctPk9y
ZGVyKTsKLQotICAgIHN0YXR1cyA9IFNUQVRVU19OT19NRU1PUlk7Ci0gICAgaWYgKFJpbmctPk1k
bCA9PSBOVUxMKQotICAgICAgICBnb3RvIGZhaWw0OwotCi0gICAgUmluZy0+U2hhcmVkID0gTW1H
ZXRTeXN0ZW1BZGRyZXNzRm9yTWRsU2FmZShSaW5nLT5NZGwsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWxQYWdlUHJpb3JpdHkpOwotICAgIEFT
U0VSVChSaW5nLT5TaGFyZWQgIT0gTlVMTCk7Ci0KLSNwcmFnbWEgd2FybmluZyhwdXNoKQotI3By
YWdtYSB3YXJuaW5nKGRpc2FibGU6IDQzMDUpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDMx
MSkgLy8gJ3R5cGUgY2FzdCcgcG9pbnRlciB0cnVuY2F0aW9uIGZyb20gJ2Jsa2lmX3NyaW5nX2Vu
dHJ5WzFdJyB0byAnbG9uZycKLSAgICBTSEFSRURfUklOR19JTklUKFJpbmctPlNoYXJlZCk7Ci0g
ICAgRlJPTlRfUklOR19JTklUKCZSaW5nLT5Gcm9udCwgUmluZy0+U2hhcmVkLCBQQUdFX1NJWkUg
PDwgUmluZy0+T3JkZXIpOwotI3ByYWdtYSB3YXJuaW5nKHBvcCkKKyAgICBNYXhRdWV1ZXMgPSBG
cm9udGVuZEdldE51bVF1ZXVlcyhSaW5nLT5Gcm9udGVuZCk7CisgICAgSW5kZXggPSAwOworICAg
IHdoaWxlIChJbmRleCA8IE1heFF1ZXVlcykgeworICAgICAgICBQWEVOVkJEX0JMS0lGX1JJTkcg
IEJsa2lmUmluZyA9IFJpbmctPlJpbmdbSW5kZXhdOwogCi0gICAgZm9yIChJbmRleCA9IDA7IElu
ZGV4IDwgKDF1bCA8PCBSaW5nLT5PcmRlcik7ICsrSW5kZXgpIHsKLSAgICAgICAgc3RhdHVzID0g
R3JhbnRlckdldChHcmFudGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1tR2V0TWRs
UGZuQXJyYXkoUmluZy0+TWRsKVtJbmRleF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
RkFMU0UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJlJpbmctPkdyYW50c1tJbmRleF0p
OworICAgICAgICBzdGF0dXMgPSBCbGtpZlJpbmdDb25uZWN0KEJsa2lmUmluZyk7CiAgICAgICAg
IGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKQogICAgICAgICAgICAgZ290byBmYWlsNTsKLSAgICB9
Ci0KLSAgICBSaW5nLT5DaGFubmVsID0gWEVOQlVTX0VWVENITihPcGVuLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICZSaW5nLT5FdnRjaG5JbnRlcmZhY2UsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgWEVOQlVTX0VWVENITl9UWVBFX1VOQk9VTkQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmluZ0ludGVycnVwdCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBSaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEZyb250ZW5kR2V0QmFja2VuZERvbWFpbihSaW5nLT5Gcm9udGVuZCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSk7Ci0gICAgc3RhdHVzID0gU1RBVFVTX05P
X01FTU9SWTsKLSAgICBpZiAoUmluZy0+Q2hhbm5lbCA9PSBOVUxMKQotICAgICAgICBnb3RvIGZh
aWw2OwogCi0gICAgWEVOQlVTX0VWVENITihVbm1hc2ssCi0gICAgICAgICAgICAgICAgICAmUmlu
Zy0+RXZ0Y2huSW50ZXJmYWNlLAotICAgICAgICAgICAgICAgICAgUmluZy0+Q2hhbm5lbCwKLSAg
ICAgICAgICAgICAgICAgIEZBTFNFKTsKKyAgICAgICAgKytJbmRleDsKKyAgICB9CiAKICAgICBz
dGF0dXMgPSBYRU5CVVNfREVCVUcoUmVnaXN0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICZSaW5nLT5EZWJ1Z0ludGVyZmFjZSwKQEAgLTE3NzksNTUgKzI0MzksNDQgQEAgUmluZ0Nvbm5l
Y3QoCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFJpbmcsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICZSaW5nLT5EZWJ1Z0NhbGxiYWNrKTsKICAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVz
KSkKLSAgICAgICAgZ290byBmYWlsNzsKKyAgICAgICAgZ290byBmYWlsNjsKIAotICAgIFJpbmct
PkNvbm5lY3RlZCA9IFRSVUU7CiAgICAgcmV0dXJuIFNUQVRVU19TVUNDRVNTOwogCi1mYWlsNzoK
LSAgICBFcnJvcigiZmFpbDdcbiIpOwotICAgIFhFTkJVU19FVlRDSE4oQ2xvc2UsCi0gICAgICAg
ICAgICAgICAgICAmUmluZy0+RXZ0Y2huSW50ZXJmYWNlLAotICAgICAgICAgICAgICAgICAgUmlu
Zy0+Q2hhbm5lbCk7Ci0gICAgUmluZy0+Q2hhbm5lbCA9IE5VTEw7CiBmYWlsNjoKICAgICBFcnJv
cigiZmFpbDZcbiIpOworICAgIEluZGV4ID0gRnJvbnRlbmRHZXROdW1RdWV1ZXMoUmluZy0+RnJv
bnRlbmQpOwogZmFpbDU6CiAgICAgRXJyb3IoImZhaWw1XG4iKTsKLSAgICBmb3IgKEluZGV4ID0g
MDsgSW5kZXggPCAoMXVsIDw8IFJpbmctPk9yZGVyKTsgKytJbmRleCkgewotICAgICAgICBpZiAo
UmluZy0+R3JhbnRzW0luZGV4XSA9PSBOVUxMKQotICAgICAgICAgICAgY29udGludWU7CiAKLSAg
ICAgICAgR3JhbnRlclB1dChHcmFudGVyLCBSaW5nLT5HcmFudHNbSW5kZXhdKTsKLSAgICAgICAg
UmluZy0+R3JhbnRzW0luZGV4XSA9IE5VTEw7Ci0gICAgfQorICAgIHdoaWxlIChJbmRleCAhPSAw
KSB7CisgICAgICAgIFBYRU5WQkRfQkxLSUZfUklORyAgQmxraWZSaW5nOworCisgICAgICAgIC0t
SW5kZXg7CisgICAgICAgIEJsa2lmUmluZyA9IFJpbmctPlJpbmdbSW5kZXhdOwogCi0gICAgUnRs
WmVyb01lbW9yeSgmUmluZy0+RnJvbnQsIHNpemVvZihibGtpZl9mcm9udF9yaW5nX3QpKTsKKyAg
ICAgICAgQmxraWZSaW5nRGlzY29ubmVjdChCbGtpZlJpbmcpOworICAgIH0KIAotICAgIF9fRnJl
ZVBhZ2VzKFJpbmctPk1kbCk7Ci0gICAgUmluZy0+U2hhcmVkID0gTlVMTDsKLSAgICBSaW5nLT5N
ZGwgPSBOVUxMOworICAgIFhFTkJVU19FVlRDSE4oUmVsZWFzZSwgJlJpbmctPkV2dGNobkludGVy
ZmFjZSk7CiAKLSAgICBSaW5nLT5PcmRlciA9IDA7CiBmYWlsNDoKICAgICBFcnJvcigiZmFpbDRc
biIpOwotICAgIFhFTkJVU19ERUJVRyhSZWxlYXNlLCAmUmluZy0+RGVidWdJbnRlcmZhY2UpOwor
CisgICAgWEVOQlVTX0NBQ0hFKFJlbGVhc2UsICZSaW5nLT5DYWNoZUludGVyZmFjZSk7CisKIGZh
aWwzOgogICAgIEVycm9yKCJmYWlsM1xuIik7Ci0gICAgWEVOQlVTX0VWVENITihSZWxlYXNlLCAm
UmluZy0+RXZ0Y2huSW50ZXJmYWNlKTsKKworICAgIFhFTkJVU19TVE9SRShSZWxlYXNlLCAmUmlu
Zy0+U3RvcmVJbnRlcmZhY2UpOworCiBmYWlsMjoKICAgICBFcnJvcigiZmFpbDJcbiIpOwotICAg
IFhFTkJVU19TVE9SRShSZWxlYXNlLCAmUmluZy0+U3RvcmVJbnRlcmZhY2UpOwotZmFpbDE6Ci0g
ICAgRXJyb3IoImZhaWwxICUwOHhcbiIsIHN0YXR1cyk7CiAKLSAgICBSdGxaZXJvTWVtb3J5KCZS
aW5nLT5EZWJ1Z0ludGVyZmFjZSwKLSAgICAgICAgICAgICAgICAgIHNpemVvZihYRU5CVVNfREVC
VUdfSU5URVJGQUNFKSk7Ci0gICAgUnRsWmVyb01lbW9yeSgmUmluZy0+RXZ0Y2huSW50ZXJmYWNl
LAotICAgICAgICAgICAgICAgICAgc2l6ZW9mKFhFTkJVU19FVlRDSE5fSU5URVJGQUNFKSk7Ci0g
ICAgUnRsWmVyb01lbW9yeSgmUmluZy0+U3RvcmVJbnRlcmZhY2UsCi0gICAgICAgICAgICAgICAg
ICBzaXplb2YoWEVOQlVTX1NUT1JFX0lOVEVSRkFDRSkpOworICAgIFhFTkJVU19ERUJVRyhSZWxl
YXNlLCAmUmluZy0+RGVidWdJbnRlcmZhY2UpOwogCitmYWlsMToKKyAgICBFcnJvcigiZmFpbDEg
KCUwOHgpXG4iLCBzdGF0dXMpOwogICAgIHJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTE4MzcsMjMg
KzI0ODYsMzMgQEAgUmluZ1N0b3JlV3JpdGUoCiAgICAgSU4gIFBWT0lEICAgICAgICAgICBUcmFu
c2FjdGlvbgogICAgICkKIHsKLSAgICBQWEVOVkJEX0dSQU5URVIgICAgIEdyYW50ZXIgPSBGcm9u
dGVuZEdldEdyYW50ZXIoUmluZy0+RnJvbnRlbmQpOwotICAgIFVMT05HICAgICAgICAgICAgICAg
UG9ydDsKKyAgICBVTE9ORyAgICAgICAgICAgICAgIE51bVF1ZXVlczsKKyAgICBVTE9ORyAgICAg
ICAgICAgICAgIEluZGV4OwogICAgIE5UU1RBVFVTICAgICAgICAgICAgc3RhdHVzOwogCi0gICAg
aWYgKFJpbmctPk9yZGVyID09IDApIHsKLSAgICAgICAgc3RhdHVzID0gWEVOQlVTX1NUT1JFKFBy
aW50ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZSaW5nLT5TdG9yZUludGVyZmFj
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zYWN0aW9uLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgRnJvbnRlbmRHZXRGcm9udGVuZFBhdGgoUmluZy0+RnJvbnRl
bmQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJpbmctcmVmIiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICIldSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHcmFudGVyUmVmZXJlbmNlKEdyYW50ZXIsIFJpbmctPkdyYW50c1swXSkpOworICAgIE51bVF1
ZXVlcyA9IEZyb250ZW5kR2V0TnVtUXVldWVzKFJpbmctPkZyb250ZW5kKTsKKyAgICBJbmRleCA9
IDA7CisgICAgd2hpbGUgKEluZGV4IDwgTnVtUXVldWVzKSB7CisgICAgICAgIFBYRU5WQkRfQkxL
SUZfUklORyAgQmxraWZSaW5nID0gUmluZy0+UmluZ1tJbmRleF07CisKKyAgICAgICAgc3RhdHVz
ID0gQmxraWZSaW5nU3RvcmVXcml0ZShCbGtpZlJpbmcsIFRyYW5zYWN0aW9uKTsKICAgICAgICAg
aWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpCi0gICAgICAgICAgICByZXR1cm4gc3RhdHVzOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIFVMT05HICAgICAgICAgICBJbmRleDsKKyAgICAgICAgICAgIGdv
dG8gZmFpbDE7CisKKyAgICAgICAgKytJbmRleDsKKyAgICB9CisKKyAgICBzdGF0dXMgPSBYRU5C
VVNfU1RPUkUoUHJpbnRmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmUmluZy0+U3RvcmVJ
bnRlcmZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zYWN0aW9uLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICBGcm9udGVuZEdldEZyb250ZW5kUGF0aChSaW5nLT5Gcm9udGVu
ZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICJtdWx0aS1xdWV1ZS1udW0tcXVldWVzIiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgIiV1IiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgTnVtUXVldWVzKTsKKyAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkKKyAgICAgICAgZ290
byBmYWlsMjsKIAorICAgIGlmIChSaW5nLT5PcmRlciAhPSAwKSB7CiAgICAgICAgIHN0YXR1cyA9
IFhFTkJVU19TVE9SRShQcmludGYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUmlu
Zy0+U3RvcmVJbnRlcmZhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Fj
dGlvbiwKQEAgLTE4NjIsMjggKzI1MjEsNyBAQCBSaW5nU3RvcmVXcml0ZSgKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICIldSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBS
aW5nLT5PcmRlcik7CiAgICAgICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKQotICAgICAgICAg
ICAgcmV0dXJuIHN0YXR1czsKLQotICAgICAgICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCAoMXVs
IDw8IFJpbmctPk9yZGVyKTsgKytJbmRleCkgewotICAgICAgICAgICAgQ0hBUiAgICAgICAgTmFt
ZVtNQVhfTkFNRV9MRU4rMV07Ci0KLSAgICAgICAgICAgIHN0YXR1cyA9IFJ0bFN0cmluZ0NjaFBy
aW50ZkEoTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFY
X05BTUVfTEVOLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmlu
Zy1yZWYldSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4
KTsKLSAgICAgICAgICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKQotICAgICAgICAgICAgICAg
IHJldHVybiBzdGF0dXM7Ci0KLSAgICAgICAgICAgIHN0YXR1cyA9IFhFTkJVU19TVE9SRShQcmlu
dGYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlJpbmctPlN0b3JlSW50ZXJm
YWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zYWN0aW9uLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyb250ZW5kR2V0RnJvbnRlbmRQYXRoKFJp
bmctPkZyb250ZW5kKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIldSIsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR3JhbnRlclJlZmVyZW5jZShHcmFudGVyLCBSaW5nLT5HcmFudHNb
SW5kZXhdKSk7Ci0gICAgICAgICAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gc3RhdHVzOwotICAgICAgICB9CisgICAgICAgICAgICBnb3RvIGZhaWwz
OwogICAgIH0KIAogICAgIHN0YXR1cyA9IFhFTkJVU19TVE9SRShQcmludGYsCkBAIC0xODkzLDIz
ICsyNTMxLDE1IEBAIFJpbmdTdG9yZVdyaXRlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAi
cHJvdG9jb2wiLAogICAgICAgICAgICAgICAgICAgICAgICAgICBYRU5fSU9fUFJPVE9fQUJJKTsK
ICAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkKLSAgICAgICAgcmV0dXJuIHN0YXR1czsKLQot
ICAgIFBvcnQgPSBYRU5CVVNfRVZUQ0hOKEdldFBvcnQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgJlJpbmctPkV2dGNobkludGVyZmFjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBSaW5n
LT5DaGFubmVsKTsKLQotICAgIHN0YXR1cyA9IFhFTkJVU19TVE9SRShQcmludGYsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICZSaW5nLT5TdG9yZUludGVyZmFjZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgVHJhbnNhY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEZyb250
ZW5kR2V0RnJvbnRlbmRQYXRoKFJpbmctPkZyb250ZW5kKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgImV2ZW50LWNoYW5uZWwiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAiJXUiLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICBQb3J0KTsKLSAgICBpZiAoIU5UX1NVQ0NFU1Moc3Rh
dHVzKSkKLSAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICAgICAgZ290byBmYWlsNDsKIAogICAg
IHJldHVybiBTVEFUVVNfU1VDQ0VTUzsKKworZmFpbDQ6CitmYWlsMzoKK2ZhaWwyOgorZmFpbDE6
CisgICAgcmV0dXJuIHN0YXR1czsKIH0KIAogVk9JRApAQCAtMTkxNywxMiArMjU0NywxOCBAQCBS
aW5nRW5hYmxlKAogICAgIElOICBQWEVOVkJEX1JJTkcgICAgUmluZwogICAgICkKIHsKLSAgICBB
U1NFUlQoUmluZy0+RW5hYmxlZCA9PSBGQUxTRSk7Ci0gICAgUmluZy0+RW5hYmxlZCA9IFRSVUU7
CisgICAgVUxPTkcgICAgICAgICAgICAgICBOdW1RdWV1ZXM7CisgICAgVUxPTkcgICAgICAgICAg
ICAgICBJbmRleDsKIAotICAgIFhFTkJVU19FVlRDSE4oVHJpZ2dlciwKLSAgICAgICAgICAgICAg
ICAgICZSaW5nLT5FdnRjaG5JbnRlcmZhY2UsCi0gICAgICAgICAgICAgICAgICBSaW5nLT5DaGFu
bmVsKTsKKyAgICBOdW1RdWV1ZXMgPSBGcm9udGVuZEdldE51bVF1ZXVlcyhSaW5nLT5Gcm9udGVu
ZCk7CisgICAgSW5kZXggPSAwOworICAgIHdoaWxlIChJbmRleCA8IE51bVF1ZXVlcykgeworICAg
ICAgICBQWEVOVkJEX0JMS0lGX1JJTkcgIEJsa2lmUmluZyA9IFJpbmctPlJpbmdbSW5kZXhdOwor
CisgICAgICAgIEJsa2lmUmluZ0VuYWJsZShCbGtpZlJpbmcpOworCisgICAgICAgICsrSW5kZXg7
CisgICAgfQogfQogCiBWT0lECkBAIC0xOTMwLDU1ICsyNTY2LDE1IEBAIFJpbmdEaXNhYmxlKAog
ICAgIElOICBQWEVOVkJEX1JJTkcgICAgUmluZwogICAgICkKIHsKLSAgICBVTE9ORyAgICAgICAg
ICAgICAgIENvdW50OwotICAgIEtJUlFMICAgICAgICAgICAgICAgSXJxbDsKLSAgICBQWEVOVkJE
X1RBUkdFVCAgICAgIFRhcmdldCA9IEZyb250ZW5kR2V0VGFyZ2V0KFJpbmctPkZyb250ZW5kKTsK
LSAgICBQWEVOVkJEX0FEQVBURVIgICAgIEFkYXB0ZXIgPSBUYXJnZXRHZXRBZGFwdGVyKFRhcmdl
dCk7Ci0KLSAgICBBU1NFUlQoUmluZy0+RW5hYmxlZCA9PSBUUlVFKTsKLSAgICBSaW5nLT5FbmFi
bGVkID0gRkFMU0U7Ci0KLSAgICAvLyBwb2xsIHJpbmcgYW5kIHNlbmQgZXZlbnQgY2hhbm5lbCBu
b3RpZmljYXRpb24gZXZlcnkgMW1zIChmb3IgdXAgdG8gMyBtaW51dGVzKQotICAgIENvdW50ID0g
MDsKLSAgICB3aGlsZSAoUXVldWVDb3VudCgmUmluZy0+U3VibWl0dGVkUmVxcykpIHsKLSAgICAg
ICAgaWYgKENvdW50ID4gMTgwMDAwKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIEtlUmFp
c2VJcnFsKERJU1BBVENIX0xFVkVMLCAmSXJxbCk7Ci0gICAgICAgIFJpbmdQb2xsKFJpbmcpOwot
ICAgICAgICBLZUxvd2VySXJxbChJcnFsKTsKLSAgICAgICAgWEVOQlVTX0VWVENITihTZW5kLAot
ICAgICAgICAgICAgICAgICAgICAgICZSaW5nLT5FdnRjaG5JbnRlcmZhY2UsCi0gICAgICAgICAg
ICAgICAgICAgICAgUmluZy0+Q2hhbm5lbCk7Ci0gICAgICAgIFN0b3JQb3J0U3RhbGxFeGVjdXRp
b24oMTAwMCk7ICAgLy8gMTAwMCBtaWNyby1zZWNvbmRzCi0gICAgICAgICsrQ291bnQ7Ci0gICAg
fQotCi0gICAgVmVyYm9zZSgiVGFyZ2V0WyVkXSA6ICV1IFN1Ym1pdHRlZCByZXF1ZXN0cyBsZWZ0
ICgldSBpdGVycmF0aW9ucylcbiIsCi0gICAgICAgICAgICBGcm9udGVuZEdldFRhcmdldElkKFJp
bmctPkZyb250ZW5kKSwKLSAgICAgICAgICAgIFF1ZXVlQ291bnQoJlJpbmctPlN1Ym1pdHRlZFJl
cXMpLAotICAgICAgICAgICAgQ291bnQpOwotCi0gICAgLy8gRmFpbCBQcmVwYXJlZFJlcXMKLSAg
ICBmb3IgKDs7KSB7Ci0gICAgICAgIFBYRU5WQkRfU1JCRVhUICAgICAgU3JiRXh0OwotICAgICAg
ICBQU0NTSV9SRVFVRVNUX0JMT0NLIFNyYjsKLSAgICAgICAgUFhFTlZCRF9SRVFVRVNUICAgICBS
ZXF1ZXN0OwotICAgICAgICBQTElTVF9FTlRSWSAgICAgICAgIExpc3RFbnRyeTsKLQotICAgICAg
ICBMaXN0RW50cnkgPSBRdWV1ZVBvcCgmUmluZy0+UHJlcGFyZWRSZXFzKTsKLSAgICAgICAgaWYg
KExpc3RFbnRyeSA9PSBOVUxMKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIFJlcXVlc3Qg
PSBDT05UQUlOSU5HX1JFQ09SRChMaXN0RW50cnksIFhFTlZCRF9SRVFVRVNULCBMaXN0RW50cnkp
OwotICAgICAgICBTcmJFeHQgPSBSZXF1ZXN0LT5TcmJFeHQ7Ci0gICAgICAgIFNyYiA9IFNyYkV4
dC0+U3JiOwotCi0gICAgICAgIFNyYi0+U3JiU3RhdHVzID0gU1JCX1NUQVRVU19BQk9SVEVEOwot
ICAgICAgICBTcmItPlNjc2lTdGF0dXMgPSAweDQwOyAvLyBTQ1NJX0FCT1JURUQKKyAgICBVTE9O
RyAgICAgICAgICAgICAgIEluZGV4OwogCi0gICAgICAgIFJpbmdQdXRSZXF1ZXN0KFJpbmcsIFJl
cXVlc3QpOworICAgIEluZGV4ID0gRnJvbnRlbmRHZXROdW1RdWV1ZXMoUmluZy0+RnJvbnRlbmQp
OworICAgIHdoaWxlIChJbmRleCAhPSAwKSB7CisgICAgICAgIFBYRU5WQkRfQkxLSUZfUklORyAg
QmxraWZSaW5nOwogCi0gICAgICAgIGlmIChJbnRlcmxvY2tlZERlY3JlbWVudCgmU3JiRXh0LT5S
ZXF1ZXN0Q291bnQpID09IDApCi0gICAgICAgICAgICBBZGFwdGVyQ29tcGxldGVTcmIoQWRhcHRl
ciwgU3JiRXh0KTsKKyAgICAgICAgLS1JbmRleDsKKyAgICAgICAgQmxraWZSaW5nID0gUmluZy0+
UmluZ1tJbmRleF07CisgICAgICAgIEJsa2lmUmluZ0Rpc2FibGUoQmxraWZSaW5nKTsKICAgICB9
CiB9CiAKQEAgLTE5ODcsNTQgKzI1ODMsNDkgQEAgUmluZ0Rpc2Nvbm5lY3QoCiAgICAgSU4gIFBY
RU5WQkRfUklORyAgICBSaW5nCiAgICAgKQogewotICAgIFBYRU5WQkRfR1JBTlRFUiAgICAgR3Jh
bnRlciA9IEZyb250ZW5kR2V0R3JhbnRlcihSaW5nLT5Gcm9udGVuZCk7CiAgICAgVUxPTkcgICAg
ICAgICAgICAgICBJbmRleDsKIAotICAgIEFTU0VSVDNVKFJpbmctPlN1Ym1pdHRlZCwgPT0sIFJp
bmctPlJlY2VpdmVkKTsKLSAgICBBU1NFUlQoUmluZy0+Q29ubmVjdGVkKTsKLSAgICBSaW5nLT5D
b25uZWN0ZWQgPSBGQUxTRTsKLQogICAgIFhFTkJVU19ERUJVRyhEZXJlZ2lzdGVyLAogICAgICAg
ICAgICAgICAgICAmUmluZy0+RGVidWdJbnRlcmZhY2UsCiAgICAgICAgICAgICAgICAgIFJpbmct
PkRlYnVnQ2FsbGJhY2spOwogICAgIFJpbmctPkRlYnVnQ2FsbGJhY2sgPSBOVUxMOwogCi0gICAg
WEVOQlVTX0VWVENITihDbG9zZSwKLSAgICAgICAgICAgICAgICAgICZSaW5nLT5FdnRjaG5JbnRl
cmZhY2UsCi0gICAgICAgICAgICAgICAgICBSaW5nLT5DaGFubmVsKTsKLSAgICBSaW5nLT5DaGFu
bmVsID0gTlVMTDsKLQotICAgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8ICgxdWwgPDwgUmluZy0+
T3JkZXIpOyArK0luZGV4KSB7Ci0gICAgICAgIGlmIChSaW5nLT5HcmFudHNbSW5kZXhdID09IE5V
TEwpCi0gICAgICAgICAgICBjb250aW51ZTsKKyAgICBJbmRleCA9IEZyb250ZW5kR2V0TnVtUXVl
dWVzKFJpbmctPkZyb250ZW5kKTsKIAotICAgICAgICBHcmFudGVyUHV0KEdyYW50ZXIsIFJpbmct
PkdyYW50c1tJbmRleF0pOwotICAgICAgICBSaW5nLT5HcmFudHNbSW5kZXhdID0gTlVMTDsKLSAg
ICB9CisgICAgd2hpbGUgKEluZGV4ICE9IDApIHsKKyAgICAgICAgUFhFTlZCRF9CTEtJRl9SSU5H
ICBCbGtpZlJpbmc7CiAKLSAgICBSdGxaZXJvTWVtb3J5KCZSaW5nLT5Gcm9udCwgc2l6ZW9mKGJs
a2lmX2Zyb250X3JpbmdfdCkpOworICAgICAgICAtLUluZGV4OworICAgICAgICBCbGtpZlJpbmcg
PSBSaW5nLT5SaW5nW0luZGV4XTsKIAotICAgIF9fRnJlZVBhZ2VzKFJpbmctPk1kbCk7Ci0gICAg
UmluZy0+U2hhcmVkID0gTlVMTDsKLSAgICBSaW5nLT5NZGwgPSBOVUxMOworICAgICAgICBCbGtp
ZlJpbmdEaXNjb25uZWN0KEJsa2lmUmluZyk7CisgICAgfQogCiAgICAgUmluZy0+T3JkZXIgPSAw
OwogCi0gICAgWEVOQlVTX0RFQlVHKFJlbGVhc2UsICZSaW5nLT5EZWJ1Z0ludGVyZmFjZSk7CiAg
ICAgWEVOQlVTX0VWVENITihSZWxlYXNlLCAmUmluZy0+RXZ0Y2huSW50ZXJmYWNlKTsKKyAgICBY
RU5CVVNfQ0FDSEUoUmVsZWFzZSwgJlJpbmctPkNhY2hlSW50ZXJmYWNlKTsKICAgICBYRU5CVVNf
U1RPUkUoUmVsZWFzZSwgJlJpbmctPlN0b3JlSW50ZXJmYWNlKTsKKyAgICBYRU5CVVNfREVCVUco
UmVsZWFzZSwgJlJpbmctPkRlYnVnSW50ZXJmYWNlKTsKK30KIAotICAgIFJ0bFplcm9NZW1vcnko
JlJpbmctPkRlYnVnSW50ZXJmYWNlLAotICAgICAgICAgICAgICAgICAgc2l6ZW9mKFhFTkJVU19E
RUJVR19JTlRFUkZBQ0UpKTsKLSAgICBSdGxaZXJvTWVtb3J5KCZSaW5nLT5FdnRjaG5JbnRlcmZh
Y2UsCi0gICAgICAgICAgICAgICAgICBzaXplb2YoWEVOQlVTX0VWVENITl9JTlRFUkZBQ0UpKTsK
LSAgICBSdGxaZXJvTWVtb3J5KCZSaW5nLT5TdG9yZUludGVyZmFjZSwKLSAgICAgICAgICAgICAg
ICAgIHNpemVvZihYRU5CVVNfU1RPUkVfSU5URVJGQUNFKSk7CitzdGF0aWMgRk9SQ0VJTkxJTkUg
UFhFTlZCRF9CTEtJRl9SSU5HCitfX1JpbmdHZXRCbGtpZlJpbmcoCisgICAgSU4gIFBYRU5WQkRf
UklORyAgICBSaW5nLAorICAgIElOICBVTE9ORyAgICAgICAgICAgVGFnCisgICAgKQoreworICAg
IFVMT05HICAgICAgICAgICAgICAgVmFsdWU7CisgICAgVUxPTkcgICAgICAgICAgICAgICBJbmRl
eDsKKworICAgIGlmIChUYWcgPT0gMCkKKyAgICAgICAgVmFsdWUgPSBLZUdldEN1cnJlbnRQcm9j
ZXNzb3JOdW1iZXJFeChOVUxMKTsKKyAgICBlbHNlCisgICAgICAgIFZhbHVlID0gVGFnOworCisg
ICAgSW5kZXggPSBWYWx1ZSAlIEZyb250ZW5kR2V0TnVtUXVldWVzKFJpbmctPkZyb250ZW5kKTsK
IAotICAgIFJpbmctPkV2ZW50cyA9IDA7Ci0gICAgUmluZy0+RHBjcyA9IDA7Ci0gICAgUmluZy0+
U3VibWl0dGVkID0gMDsKLSAgICBSaW5nLT5SZWNlaXZlZCA9IDA7CisgICAgcmV0dXJuIFJpbmct
PlJpbmdbSW5kZXhdOwogfQogCiBCT09MRUFOCkBAIC0yMDQ0LDI1ICsyNjM1LDE0IEBAIFJpbmdR
dWV1ZVJlcXVlc3QoCiAgICAgKQogewogICAgIFBTQ1NJX1JFUVVFU1RfQkxPQ0sgU3JiID0gU3Ji
RXh0LT5TcmI7CisgICAgUFhFTlZCRF9CTEtJRl9SSU5HICBCbGtpZlJpbmc7CiAKLSAgICBpZiAo
IVJpbmctPkVuYWJsZWQpCi0gICAgICAgIGdvdG8gZmFpbDE7Ci0KLSAgICBpZiAoIVJpbmdQcmVw
YXJlUmVxdWVzdChSaW5nLCBTcmJFeHQpKQotICAgICAgICBnb3RvIGZhaWwyOworICAgIEJsa2lm
UmluZyA9IF9fUmluZ0dldEJsa2lmUmluZyhSaW5nLCBTcmItPlF1ZXVlVGFnKTsKKyAgICBBU1NF
UlQoQmxraWZSaW5nICE9IE5VTEwpOwogCi0gICAgaWYgKFJpbmdTdWJtaXRSZXF1ZXN0cyhSaW5n
KSkgewotICAgICAgICAvLyBtb3JlIHByZXBhcmVkLXJlcXMgdG8gc3VibWl0Ci0gICAgICAgIGlm
IChLZUluc2VydFF1ZXVlRHBjKCZSaW5nLT5EcGMsIE5VTEwsIE5VTEwpKQotICAgICAgICAgICAg
KytSaW5nLT5EcGNzOwotICAgIH0KKyAgICBfX0Jsa2lmUmluZ1F1ZXVlU3JiKEJsa2lmUmluZywg
U3JiRXh0KTsKIAogICAgIHJldHVybiBUUlVFOwotCi1mYWlsMjoKLWZhaWwxOgotICAgIFNyYi0+
U3JiU3RhdHVzID0gU1JCX1NUQVRVU19CVVNZOwotICAgIHJldHVybiBGQUxTRTsKIH0KIAogVk9J
RApAQCAtMjA3MSwxMiArMjY1MSwxMSBAQCBSaW5nUXVldWVTaHV0ZG93bigKICAgICBJTiAgUFhF
TlZCRF9TUkJFWFQgIFNyYkV4dAogICAgICkKIHsKLSAgICBRdWV1ZUFwcGVuZCgmUmluZy0+U2h1
dGRvd25TcmJzLAotICAgICAgICAgICAgICAgICZTcmJFeHQtPkxpc3RFbnRyeSk7CisgICAgUFND
U0lfUkVRVUVTVF9CTE9DSyBTcmIgPSBTcmJFeHQtPlNyYjsKKyAgICBQWEVOVkJEX0JMS0lGX1JJ
TkcgIEJsa2lmUmluZzsKIAotICAgIGlmICghUmluZy0+RW5hYmxlZCkKLSAgICAgICAgcmV0dXJu
OworICAgIEJsa2lmUmluZyA9IF9fUmluZ0dldEJsa2lmUmluZyhSaW5nLCBTcmItPlF1ZXVlVGFn
KTsKKyAgICBBU1NFUlQoQmxraWZSaW5nICE9IE5VTEwpOwogCi0gICAgaWYgKEtlSW5zZXJ0UXVl
dWVEcGMoJlJpbmctPkRwYywgTlVMTCwgTlVMTCkpCi0JICAgICsrUmluZy0+RHBjczsKKyAgICBf
X0Jsa2lmUmluZ1F1ZXVlU2h1dGRvd24oQmxraWZSaW5nLCBTcmJFeHQpOwogfQotLSAKMi4xNi4y
LndpbmRvd3MuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fCndpbi1wdi1kZXZlbCBtYWlsaW5nIGxpc3QKd2luLXB2LWRldmVsQGxpc3RzLnhlbnByb2pl
Y3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby93aW4t
cHYtZGV2ZWw=

From win-pv-devel-bounces@lists.xenproject.org Wed May 30 18:09:01 2018
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 30 May 2018 18:09:01 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1fO5Ws-0007c2-OE; Wed, 30 May 2018 18:08:58 +0000
Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <srs0=i6ei=ir=licoho.de=r.wagner@srs-us1.protection.inumbo.net>)
 id 1fO5Wr-0007bx-K3
 for win-pv-devel@lists.xenproject.org; Wed, 30 May 2018 18:08:57 +0000
X-Inumbo-ID: 3930584d-6434-11e8-9728-bc764e045a96
Received: from as02.licoho.de (unknown [213.136.89.29])
 by us1-rack-dfw2.inumbo.com (Halon) with ESMTPS
 id 3930584d-6434-11e8-9728-bc764e045a96;
 Wed, 30 May 2018 20:06:50 +0200 (CEST)
Received: from localhost (localhost [127.0.0.1])
 by as02.licoho.de (Postfix) with ESMTP id 22F30CF4C1A
 for <win-pv-devel@lists.xenproject.org>; Wed, 30 May 2018 20:08:54 +0200 (CEST)
Received: from as02.licoho.de ([127.0.0.1])
 by localhost (as02.licoho.de [127.0.0.1]) (maiad, port 10026) with LMTP
 id 19247-10 for <win-pv-devel@lists.xenproject.org>;
 Wed, 30 May 2018 20:08:53 +0200 (CEST)
Received: from GONDOR.licoho.internal (pd95c4c24.dip0.t-ipconnect.de
 [217.92.76.36])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits))
 (No client certificate requested)
 by as02.licoho.de (Postfix) with ESMTPSA id 0BFB5CF40D0
 for <win-pv-devel@lists.xenproject.org>; Wed, 30 May 2018 20:08:53 +0200 (CEST)
Received: from exch01.licoho.internal (10.168.100.17) by
 GONDOR.licoho.internal (172.16.0.17) with Microsoft SMTP Server
 (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id
 15.1.669.32; Wed, 30 May 2018 20:08:42 +0200
Received: from exch01.licoho.internal ([fe80::407e:cdaa:ae00:9c71]) by
 exch01.licoho.internal ([fe80::407e:cdaa:ae00:9c71%15]) with mapi id
 15.01.0669.032; Wed, 30 May 2018 20:08:41 +0200
From: Ronny Wagner <r.wagner@licoho.de>
To: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: Question - Change Win-driver from Gplpv to PV xennet driver
Thread-Index: AdP4P62ewa3aet/fTuSDuklqijyO6g==
Date: Wed, 30 May 2018 18:08:41 +0000
Message-ID: <fd389b31540546ddaa63e1896d482576@licoho.de>
Accept-Language: de-DE, en-US
X-MS-Has-Attach: yes
X-MS-TNEF-Correlator: 
x-originating-ip: [192.168.11.251]
MIME-Version: 1.0
X-Virus-Scanned: TEST OUT VIRUS AND SPAM CHECK
Subject: [win-pv-devel] Question - Change Win-driver from Gplpv to PV xennet
 driver
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============8691639628177959494=="
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>

This is an S/MIME signed message

--===============8691639628177959494==
Content-Type: multipart/signed;
	protocol="application/pkcs7-signature";
	micalg="sha-256";
	boundary="----A32956E7EE936703D67F5AFE05C79172"

This is an S/MIME signed message

------A32956E7EE936703D67F5AFE05C79172
Content-Language: de-DE
Content-Type: multipart/mixed;
	boundary="_002_fd389b31540546ddaa63e1896d482576licohode_"

--_002_fd389b31540546ddaa63e1896d482576licohode_
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64

LS0tLS1CRUdJTiBQR1AgU0lHTkVEIE1FU1NBR0UtLS0tLQ0KSGFzaDogU0hBMjU2DQoNCkhlbGxv
IEBhbGwsDQoNCnRoaXMgaXMgbXkgZmlyc3QgcG9zdCBoZXJlLCBpIG5lZWQgYSBsaXR0bGUgYml0
IGhlbHAgdG8gdXBncmFkZSBteSBXaW5kb3dzIERyaXZlciBmcm9tIGdwbHB2IDAuMTEuMC4zNzMg
dG8geGVubmV0IGRyaXZlciAoV2luZG93cyBQViBEcml2ZXJzIDguMi4xKS4NCg0KSSBzZWFyY2gg
YSBsb25nIHRpbWUgdG8gZmluZCBhIG1hbnVlbCBmb3IgdGhpcyBjYXNlLg0KDQpBdCBsYXN0IGkg
dGVzdGVkIHdpdGggdXBncmFkZSBvbiB0aGUgc3lzdGVtIHRoZSBuZXR3b3JrIGRyaXZlciAoeGVu
bmV0KSBvbiB3aW5kb3dzIDIwMTIgYW5kIHRoZSBzeXN0ZW0gbG9zdCB0aGUgY29ubmVjdGlvbiBh
bmQgaSBuZWVkIGhvdXJzIHRvIHJlYWN0aXZlIHRoZSBncGxwdiBkcml2ZXIuDQoNCkkgdGhpbmsg
aSBtYWtlIGEgbWlzdGFrZSBldmVyeXdoZXJlLg0KDQpDYW4gaSB1cGdyYWRlIHRoZSBuZXR3b3Jr
Y2FyZCB3aXRoIGNsaWNrIG9uIGRwaW5zdC5leGUgaW4gdGhlIGRpcmVjdG9yeSAoeDY0KT8NCg0K
VGhhbmsgeW91IHZlcnkgbXVjaCBmb3IgeW91ciBoZWxwLg0KDQpCZXN0IHJlZ2FyZHMNClJvbm55
IA0KLS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS0NCkNvbW1lbnQ6IFVzaW5nIGdwZzRvIHY1
LjMuMTAwLjkwODIgLSBodHRwczovL3d3dy5ncGc0by5kZS8NCkNoYXJzZXQ6IHV0Zi04DQoNCmlR
SXpCQUVCQ0FBZEZpRUVEY1M4MyswSkE3ZWpmNVlyNHFTazB0clovbXdGQWxzTzZLY0FDZ2tRNHFT
azB0cloNCi9tdzFzQkFBamVEMHBZelVtRWY2aTJoUXVDV0V0L2NPTEFsd09iUlFhL0lTcTNRc1Y2
RWRmdlFwMzJaRm1CR3cNCnNIYnc3N1ZmTTBpT3ZTOU4xRXVwK0x6TGxQL1c2aWZLcmxOWVNuaG1s
T1E0SDE4S2JIL3VCMnprOEt3WjJWYzQNCnZxenVlb2xHckFmMkNYKzVoWHJFM1Uxa2dEbEZNc3F3
cVJiMWVpbDhCS3hSTm1WQ1VNeVV4TG16Ly9nZ1dYUHgNCm9Hb2l1MDhFUW5Bc3drV2JWN3ZRV1I1
MnRUay9LZjFzaVEyVFFVampnQnduWlpMc3dqendSdUxkVWFBd1Q0UjANCnQ3WmZCVTFZYlQ2dGJR
c3M5OVIxRFdaT1ljTWs0WjQ2SklRY0g0dzZaVEY4MExOY1RSVFpzTVh4c3p2RFlWaHkNCjYrSnJs
dFUvWnVkb2hTajErYlpsRFVnVHpRMlhEVmE5N0pGQXNkMFJEUVltdHVMK0srK3RhZGtUWWg5KzJh
TTkNCkVCZi9QWjlMTlpGTWtpbVFmN1pWTUlya01TT2x5UzJuSjhyMkEwVWpWc0N0L2x5MHl6UTN6
L0hnOXg5RHFCai8NCnljbGpjeHl2MjBidVB5NWNuTE9yVk9ubzlha1FrUjRjWEY1d2h5cmJ5L1Yz
V1JqYVBCSWtzbnlKT3NtTGtZVXQNCkJGeEVBZVFOblBGME5MY3JiWFFhYmVrZWtaRWp0eWRxZEpm
OTZJRWwwRmlhNEp5NVpNdi9KaVJlbWhsU0RhK1oNCkR0ZjQ3N3pUTnJzRzlWaHBMRkpPNFRKNDdi
eWd1OFhyQWtKUXljWHhiZmtkMng4dTFZckRLakVxVEZGeUM0V2oNCjBieTZzM1BYM1ZyMllEYll4
QmtHV1k5K2ZhMnBZUm5MMTVYenAwSkdKalJLRmVTSDM5WT0NCj00a2lODQotLS0tLUVORCBQR1Ag
U0lHTkFUVVJFLS0tLS0=

--_002_fd389b31540546ddaa63e1896d482576licohode_
Content-Type: application/octet-stream;
	name="F64B72EDA591C786_r.wagner@licoho.de.asc"
Content-Description: F64B72EDA591C786_r.wagner@licoho.de.asc
Content-Disposition: attachment;
	filename="F64B72EDA591C786_r.wagner@licoho.de.asc"; size=4801;
	creation-date="Wed, 30 May 2018 18:08:39 GMT";
	modification-date="Wed, 30 May 2018 18:08:39 GMT"
Content-Transfer-Encoding: base64

LS0tLS1CRUdJTiBQR1AgUFVCTElDIEtFWSBCTE9DSy0tLS0tDQpDb21tZW50OiBVc2luZyBncGc0
byB2NS4zLjEwMC45MDgyIC0gaHR0cHM6Ly93d3cuZ3BnNG8uZGUvDQoNCm1RSU5CRlJuUCs0QkVB
RGE5QzhZR0FNaStEdHNyQ3NGTU1kNExQRnJBeE96QzhnaXpITDJrQVhlVzZxV3cySi8NCm9EcU5z
SUE3UjRJVHZWSHJETTYydCtaNVg2dTZwRjZWTDFNbWNsajF6QWkxR1dENm1YbXpWTXNoOU9sMnpQ
S2wNCitqTW1xMDA4dWtQcXV1N05pYW5zQUpxcUZXQ1ZwQUxHOWFhNDBTRXpHb2JZdWE5T0FKRjJh
cFlGZXdZWS9ZeWsNCmRUN25kTE5qRzYxcjZhSkEzUEtGRUpueXJud08vVVk1RXJ4RUc3VUZGMnhn
L1N1cW5zcHdGbzdiQnFsL3UrQUgNCmdoS2FDVFdOVm9UUmVTWEVTakU4UGR4SFgwdE5LcVFib0M3
T1FEc281ZmM5VDE5NHU5THRWanNjL0dDZDIxYzINCnZXdXBRWHFDVmNzVnFMazJ1eVVLL2JKQ0dF
YWI4UEtLR3Fid29ZUm9OMEpjUTVDekZXamE5T3g3ZUt2R1k5QXENClVjM2dvVVhTWXNGUVgzNkd1
dUk4RzIyVkRCYXFpdXR4Z2xoSU45UUJ5RVhwbmtMcnlidjdGMlN2bC9tU1greHoNCmZHdi9DQis3
eHRXTjJtanJMMnNaK2NrcUozWHNteFczaVpyV3p0ei9zeEVYdG1uUTFUcVVtYk52a2FId1VZWnIN
CjdJekpmcjg3VGtnYXNVRlRubFkyeU9ad3dITGQxOG5DNHBDcXdJaW03djJNamhmbDZVb0p2MDJn
Nzg1dnNzRFANCncvaitIYzR3ME9pckxKYzNFQkJLZ1dkWnpnRHhWSVhxakF6ZHVKWUI2dmRLejYx
M2lKRXlBdDkxdWVOV2RUMjcNCnNKVzhIZWQ3akhFWlFOaVJqYjM4VHUyeUhpVHRLcXVzdVVvMFRl
QzRrNXpoUVZPcUVKOGlCRWhOVXdBUkFRQUINCnRDRlNiMjV1ZVNCWFlXZHVaWElnUEhJdWQyRm5i
bVZ5UUd4cFkyOW9ieTVrWlQ2SkFsVUVFd0VDQUQ4Q0d5OEcNCkN3a0lCd01DQmhVSUFna0tDd1FX
QWdNQkFoNEJBaGVBRmlFRVM3TlBvdkswQzcrbytvTFY5a3R5N2FXUng0WUYNCkFsc0taTG9GQ1Fs
bkdrd0FDZ2tROWt0eTdhV1J4NGJWRkEvOUVIZURsNHNxV2g4Q2t4WVhMYXhEVmxncVJ4dHMNCjJE
bHNtMGVEZEJUdklQS0RwMTI0SnBrREM3UjB3NUlMMmNjM041ZmpKa2ZjY3V0SGJUZXh5ZGExMENo
a3NjYzkNCmhldm45WXpHZ2lENGJjVjlqVVRRSmo0L0NwZkRnNmdwcDN2UW5QcUtxc3dWTXlrd3Mv
VVJCVlZNaVBpQ1gyTDANCkRmSE9Pbmo2VlZYRzdIb0I4aE1MRTVKQUtKeVp2N1o0NmZJL0Nvekw2
Q1NsVDlRL3pXclpnSm9EZVRtTWRiZFQNCllUUUw4QWFPYkZjd2ZDZyt0WFRlZjVBdWM1ZCsxVDk1
eERQdmZFbGQ2eStUSkFlTzdQMWMwTVB1WVB1dUpvNEINCkxTbU9FK1o2a0hmUmdMc2QvbmpoamIv
RTRNMnBIS0JzUkJMU0JEQzZWZG9TRUEvRm5xejc3MFlnc3h0YWt0RmoNCmJmNW1vWmpGR0dFNEM4
bXZPTlhCcEs1ZG5TVGhyRXJ2Rm1RS3BVOFhWSUcrTlg1ZGJ1Wk9lK21kZ2ppTlIyTHANCjZGZTFQ
YXBCVHg0c3o3WmNpS0p4cmNHbnNOVkhUcEJNR3FRNHRkVGZHNmFLa2ZHR2VmYlpCRk5KcUFRU3Fj
T1YNClI2NjRrVnFwRnVPa01ncnVHUC90a09aem5iTFZzcDdqT25VczdVQ0NsSVNBN25XZzJhbkdR
N2pWb3cvWFh0c28NCm1jVzRMcHl3UHFqM1lRYU9Ga3ZKSXd5cnp4Y3pvQm5xUnF3WEQ0T1NGOCs1
bnhVWHVNdFRCblFPdXkrd0pTQ2UNCnVpTHdxcVFyVmdMQ1RHUmhmVTV4N2pRRXNQZ1NuSndHYWlh
eE8zUEdKdUdvSFJQL1pVOXNKUVNVanNKaXpiaDQNCkE2THJDaWd0Z0trUlhheUpBajRFRXdFQ0FD
Z0ZBbFJuUCs0Q0d5OEZDUVdrN0FBR0N3a0lCd01DQmhVSUFna0sNCkN3UVdBZ01CQWg0QkFoZUFB
QW9KRVBaTGN1MmxrY2VHVjhVUC8wdUZlTS94Vk13a0ZnS0RIaG9BMEZGWk5QMFINCnZqMUN5Qm9K
azFVUHd2TURML3NWRVpRMTlzaDF5UllVUDFuTkFac05oMkxjb1ZrL2E0MmFjN0NxOXlEaWNnN2cN
CkpoK3hMc1J4L2ZXYkxSN3p5ekEwTFVtTW1wT0VwYTRmekYvRW1LOWZBQVJLeFlDVUdZSkNzQ3Na
dktKV2NIZ2ENClhLbmdrR3NUMWg5UTY0M0dDd2FhMXMvajJLWVZBZ1lERW9iZkw0cUoxbll4YVV4
VGVEWG9SMXRTNWsxeHZadTkNCmJpbUtoVWFmUmllZFk5ajZQNU42ZjJoZmxpazlHaVhEM1JVdW5E
ZmtjN1c0TEdMRk1KSXR4SXVoWUttOWR1d20NCkc0U1BpSEw4Q1pZM01yOTczREo1SEtQbjAxallq
TGJKNC9FVjBrY1NadzZxRVhzUkdnS2k2aU1qUFJhL2ZNOW8NClBsalBxM0RaUGk5RWFUaUJJZ2ZP
bUtGK2VSdWR5enZSYkFsVXE3aFBRQTZaYlZ2K0oxOUtHMTBkS0s1SUdoTzANCnhHbEFmZ0lPaWEr
QStzRy9VcVhQR2xBK3F6Y3cwM1ZWOHdtVWtjYzRsQmNPQkNtMmNvRWlSWnhrcWZjZmlscVYNCnVr
cU9MellnSGI4VUxWZkhMOEQ0NVBHZnpSK0pyTnhZM3NlUjFpek1ZM0dZODNjaDBMZGp6WnFNTnla
U1ZWUVgNCk0rWmZKNVdwT3NNaEZsYmg0RjkxZWVmMlRleS9SWmZFNUtVUUhkY0VjMFAxWW9TM3k1
Qm5JNnIrZzJueFZLNkoNCllFWDJOZjlibVFMSUYxMS9WRUF6YzIwT0tjR1dpUm5yVW1LTXRBOFpI
dFJGc3NON2c2MUdRVFFjNXgvbXpTZkkNCmgrc0FpOEJzbXFTekpaMlh1UUlOQkZSblArNEJFQURC
eUY3UFVXdGZuekducXVWSGlNNXcyZXpFbVdZSk9uMUgNClRib2dHbmpHa242dTVLUlhMZjQ0a25l
a3AzanRsSU1zTFZucno2UWVMazUvYjgrSWgvU2swbW14Mkx1K2x2T1cNCkRpWVJCRUJnOUlqV1dk
Q0x2UmhRUUtHckZVSUhtbmdvMys1TTVRbzEycTZUV0RWWm5oMmY3TXZJZmVHRHBwUCsNCkR5N1hj
VXFKRVNMeW0rQStSb25sNXNCRzFPOCtDaUcrc3B4UUZZR2pYRUtVS1BLMkJsUVJIdm15VjVwNW1W
clINCnI1WHNaY0NyaU4xVHdhM1cyRUxTQ3h2VXhUMWhNc2VaSm1GRTBoamhXT2dzQmNrT3FJNnNr
ZkM0b2JHWVcwazINCkZuUWV4NTIyendVTUtZcVJSQ0FNR0grNUVJYVptZTNNWlNldE1tOEU4Q1Ew
YzhkTDlIL0htbGwyTEVrN29tYmYNCkVIRzdsL1R1QmJxb2FXMHNPbzJ2SVEzWDJhd1EvYXhJa3h0
VWFiRTJ6V1g1QUE3ci8rYzJXWVNkYzRDTVdQQUgNCjNIM1FZWHpDWlR1a1FrUGo5eHEvcnFmTkor
Rlg4bHlaMUNLYVo4a2hDVGE1ajZnM2d2WDIwY29SZjVScWRNdWwNCkNpa3VJbEtBUHNtbkYxS1o4
bEZVSkg4Mms3TC9xcmlsTVRWNE9YOWFYSm83NGN1bFBSRTdHbDVoZHNueldnV0wNCmt1UXRwMUxO
TzlxdFNUd0FyZy9BQUd5Wm8wTGRjQU5ncm15RDAvNlVmOURsay9lQ0gzRHN3TWxQcVgzV0tEbFEN
CkRHdmdQRFk3dDVVbUdoU0h3dzMvN204ZFcxRHJweG0zT2RUZnpMZkJwUC9iVmFkRTNBeUxER3gx
Mm4xS1ZqVlANCnpWd2pVWWNPVVFBUkFRQUJpUVJiQkJnQkFnQW1BaHN1RmlFRVM3TlBvdkswQzcr
bytvTFY5a3R5N2FXUng0WUYNCkFsc0taTWdGQ1Fsbkdsb0NLY0ZkSUFRWkFRSUFCZ1VDVkdjLzdn
QUtDUkRpcEtUUzJ0bitiQzdLRC85T0oydVMNCjZxMmdIWEg4ZEgyakh5UlNKalBHN2F5MmRabkhw
T056V3JDd3dSeGpUb296dElTcmtYazhtZzRZc3hZZGJYOEINCkdGQ3NZWitRdGNFc0xhdGJKdVNT
MUdmRlJMVVlpaDZWbkpnL0lqN3VwaVNZaXZqVVduTVQ5TmZQV0JoWlJYWkgNCjR2Tk9BR0d5SFQw
bGRrOXUwUjBTUjUzMVJabk5vSXpseG1ESjJLLzBZYWs2M1lQS295Um1WYWR2ZElYZERKZGkNCkV0
TngrZ2Rja1JjTjBhT3J6QzlWS25zcThueDdVN0JmZHRmN3diN0I4V01YT0hOY3k2ZWZIRG1ITVh5
TWtGL1YNCjNYaGhKdkNqM1k4YkZyTzBmend1RXFQeVpZU3A3OVF4ZEhqaFhuS2R2UmVsS1JxYzVI
ekFrdTlvYzNOMFR6TDMNCnVseUFTc2xwUGI2ckV4ckZ5Z1FRYzF2REljNTlyU0tGZUNVOHI3OVdI
YVQ0UjB0NG8rSmFnbmRaelFKb0xLMWwNCnJYNmlKdmd1NXQ2Vis0MFlUaVJqK2twMTJURXVZMWFr
TnBEVDk0RWhUUUlWQXhad252Zmo3eE14dnZKZVlvTisNCm9Jb2k1UCtKaEpvb1g2U0J0cHpObE5Q
ZG45WUtwMzJPMzVnbndBWXQ3c3BsWERmRWd6UXUvalRBVzNpbWlRbXINCnY0Njlub2d2OU9NbHVK
THpNbEZJRGJMaEVNczhhV2dwZ1lYZWhsdzZIdURjclpxS2ZkZmN6M1hwL0pmU3FJRXYNCk5mSWxW
ZFFEZGFBa2tXaDg0dnRudjMrTVE3TmFrS1hSakh6ZHVCU2JqalNDTVpMcm9vcXZZc0JUU2hGK1lx
WDQNCkltM3N5ekIxdnBwVUhURWorMlZnU24vT3JvMnZ1WWVPMDlUcVN3a1E5a3R5N2FXUng0YmQy
aEFBeHVSNFVvQngNCnhsTFdMaTZScnIrc2N4Y1pRbnUrSnJHajc0NlhMS2IvSmRqVmFvNjJFVmNG
QmE3c3hJd29xck5aVTFrSnJCN28NCmY5VXA4RlJrL2xKUUJ4QmJ6aWVUc1g3dkJ1N0EvbjQ2T0JC
VXpEcGx2N3NWeG04NmxNWnE0NVM5WWE5b3JaeE8NCjBMSjRGTktGZ1BzbGZsOXBRNkgzS3daQm9J
V1FQM2ZEZytyMG9RL0ZmU1FKT01CQ2JTek1OeUJuZ25uVXBxaFANClc4WnhVY2R1NDB1NGRjc1M0
TzA0ZnFWdGNSQk0rVjBrRnpJK3BFakx1ZGxROTc3ejc4bTVTeFNyb3RZUGVCNlYNCmxaSTB3UjJK
d2RjSmhCSnF5UDZ3MkNaMGtPSUI4SGphb1gxdWpFSkdDWkhHN010aEk3RkVTNHFLZk9wOXFuL0MN
CmRWbnN4dEh1QU5kYlA4WVArSmRtRmxqOVRTWERsczNMZG5Ha2UzVmtUT0ZWY0RZa2FTNEsra3pP
WWU2OWNPVGENCllOdGpqNlREdGM1b0x6UmpUb2tNUFNPY0NZZTJnWGViZGQ3ZDNTS3BKT0VYbXU5
V3BkZ0dNcjNLV0gzWXEvWG4NClVSMlNvTEZoSEFVczRPUTlXNGsyOUc5L2VsTzJjY3VkemVCeUF6
dlJpamovMkZpeWpTRkVWN0Ewb2J6dEpqZksNCmFPdldncmpRbGs4bXFOUkYrc1VOQ3ROanhqTTNI
QmpuZUdUaWp6QzhkSDgxZzJ1d2phamtxdDZMcDUreUs3L0sNCkVCR0ErVDB5blRKSE0zdTZDZGMz
ZmY4VTB6aTJ4SGdHY3U3anBJUGpTc01ySDJyNys4QWxIcjBQWUtpSFhabHMNCklBdUwyeEJCMDI0
cDgwRTJEczdlUEdaeTNxcXBoV3dxcXNJPQ0KPXBSelYNCi0tLS0tRU5EIFBHUCBQVUJMSUMgS0VZ
IEJMT0NLLS0tLS0NCg==

--_002_fd389b31540546ddaa63e1896d482576licohode_--

------A32956E7EE936703D67F5AFE05C79172
Content-Type: application/pkcs7-signature; name="smime.p7s"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="smime.p7s"

MIIJXAYJKoZIhvcNAQcCoIIJTTCCCUkCAQExDzANBglghkgBZQMEAgEFADALBgkq
hkiG9w0BBwGgggVaMIIFVjCCBD6gAwIBAgIBNjANBgkqhkiG9w0BAQ0FADCBrTEL
MAkGA1UEBhMCREUxGzAZBgNVBAgMEkJhZGVuLVd1ZXJ0dGVtYmVyZzEPMA0GA1UE
CgwGTGlDb0hvMRAwDgYDVQQLDAdNYWluU3lzMTkwNwYDVQQDDDBMaUNvSG8gSW50
ZXJtZWRpYXRlIFVzZXIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxIzAhBgkqhkiG
9w0BCQEWFGhvc3RtYXN0ZXJAbGljb2hvLmRlMB4XDTE4MDIxNTEyMjYzM1oXDTIw
MDIxNTEyMjYzM1owgZIxCzAJBgNVBAYTAkRFMRswGQYDVQQIDBJCYWRlbi1XdWVy
dHRlbWJlcmcxDzANBgNVBAoMBkxpQ29IbzEbMBkGA1UECwwSR2VzY2hhZWZ0c2Z1
ZWhydW5nMRUwEwYDVQQDDAxSb25ueSBXYWduZXIxITAfBgkqhkiG9w0BCQEWEnIu
d2FnbmVyQGxpY29oby5kZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB
AMV2m4BTjfqtO6xe9fbHv3qcksxfVpycuILyU2RipZrqWY1OrbIi8jMrD6qeUHYL
zwasKmQummU6p9jPgTPzN0MdpebmaYF3N4f9U+7b9a2cs68zXGavsIYMQtyUc9DN
pULBek6nFnxyVLeeZ67L/GG1fzzMdjQ/qJcps98w5aNW600OmtN2HXnGM4L7xuF/
bO75ischL1Bitv/vTjKNS+0Rtm9ij07ptv0YYqFioIqsSfw/9qIq7JxuvI3vyTS3
FHV1ihMKQGmn8vbeHVrate2Mh5/sg60I1itDlbD4p9O2ruTzZn+ZtIrJJwDlG4Wz
CeFxg0+cwK8tyeY8HykRein8ZMQ/iiT5mfO6stseX0r9b3hhxFjQV9HZ9AO0ly9d
BaHbv3vaAshjV76jIt//+B66Bcx4HGYXiJ8VG3YibVD4vZA8XbPfkga+Wl6WwyoX
CyQUIoBamhWxdbdao0ZbSN41OtlMQU2YjiKrhK/EsBdzGvTmyK2L15ExtmH1xsdE
Cy8oBjmH4un/kU0eBLGLCrelsDoxC4Ve1gVuy72Ynw/HhEqrt3MlIFJ98l4F8qI5
MFh1cQivBIiPpZYn/11dDtVz59baePqOv2sVclqA6vZyf8ACtYBQddVNFqZh/9nt
5Q9URk8mhs8xECaVkeVNUA3VwBV+oTAOGXTurA2mXZcZAgMBAAGjgZkwgZYwCQYD
VR0TBAIwADAdBgNVHQ4EFgQULW+xa1ffGVvTrkubAkRbWji5s6cwHwYDVR0jBBgw
FoAUCCIZzWbOahUJQ0sm8liMkf2CJHEwHQYDVR0RBBYwFIESci53YWduZXJAbGlj
b2hvLmRlMAsGA1UdDwQEAwIF4DAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUH
AwQwDQYJKoZIhvcNAQENBQADggEBAG4voFCEggIE5MO8Vir3QxLfODCHgZCYZLeI
fjvXf7HcXBZO/u5FII8vX/2LU3zG4uHeHbVR5ezx6hZXvNCoaEL30jTRdHsFcEiM
LLhJpnesZ6oXCwmmBBz6swRxY27C2HWMrO85F/bDmowHodsJuSvj2uLB+DiZC8Rk
QyHlY8VnXPbgr/u7Zvw/C3d2fQolRJEprNCT/QI3moRddh3K/GUdWPStOoW9VeCn
AaBHpSq6tlKLVVmly+pCCjnvSmvnrMEcwRxm3Z6mCvr/AdG1U9u2i2pc6f1nHc3N
6eouYK6K4EvD/IvM+C5tKi4x8PozuEv9LmxQX+s5LZymqX9HHn8xggPGMIIDwgIB
ATCBszCBrTELMAkGA1UEBhMCREUxGzAZBgNVBAgMEkJhZGVuLVd1ZXJ0dGVtYmVy
ZzEPMA0GA1UECgwGTGlDb0hvMRAwDgYDVQQLDAdNYWluU3lzMTkwNwYDVQQDDDBM
aUNvSG8gSW50ZXJtZWRpYXRlIFVzZXIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkx
IzAhBgkqhkiG9w0BCQEWFGhvc3RtYXN0ZXJAbGljb2hvLmRlAgE2MA0GCWCGSAFl
AwQCAQUAoIHkMBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZIhvcNAQkF
MQ8XDTE4MDUzMDE4MDg1M1owLwYJKoZIhvcNAQkEMSIEIL/HgLsMiG0aoW1xeswG
bW9REvrvfW9hkE73VZvFd9mWMHkGCSqGSIb3DQEJDzFsMGowCwYJYIZIAWUDBAEq
MAsGCWCGSAFlAwQBFjALBglghkgBZQMEAQIwCgYIKoZIhvcNAwcwDgYIKoZIhvcN
AwICAgCAMA0GCCqGSIb3DQMCAgFAMAcGBSsOAwIHMA0GCCqGSIb3DQMCAgEoMA0G
CSqGSIb3DQEBAQUABIICAC6YoJwteBNrvWOP+Jcoy2GCIV4+TUbmZlH480KE4TzM
4dSroJK35GTAZHX9lQunkhyClfwd0f64r+P1cVJjX+Nhabx0BuzwJH0puTGGCufX
zUdWxk1XpxRxrf/U8Tk1ksES9Ax08N705HqcLmteuQjWKf2uwR3NEF984HKj0AKK
YmgfBZBeGwW5bhwH8Cqkw0SWvE77dughK5Ch+LQgJKLwQSSpaQqATyOAR12Z0bFV
1ijClIDxS1/bUYn6NYUclsAlLkd9HN80WV/3wZXHlc4zS6zPh/zb3cefYAx3XCob
KVUv49fEYBEIrfqebzhvjTEsOUpXAB7SpCHNsGlW1g4sM1BftcNfGfhiw3t/bg/1
aKMyE8Aec6PF1CkEmncUtduDrP0pFfjmvP1v2wA7rUjTgDRSD72ANwVdHwwkwZnv
K5xhHXFE4nheX3+3cgOJvZ6RJd4wbmf3oVTa7ofvaDlRTxUJm4G3fIychou3ZGQf
Qo7Fbk0pW/wunfBTsrPnYwRpMfW4pdZu86kWtbP2O+dmgtxgw3R/aEDy86+u2WUC
yvH4EQAZytPBsJnhLgm1Q0IBG0zszlJohjlTps7JtTpiK2mgNj1xd90sPll8JciT
s5/ezJgTsdo3Uy8hzfkhG9CMK+pT3uU4pbgmpGJPkJ9uYzIsiQJBx2jAFLKK+UbF

------A32956E7EE936703D67F5AFE05C79172--



--===============8691639628177959494==
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: base64
Content-Disposition: inline

X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18Kd2luLXB2LWRl
dmVsIG1haWxpbmcgbGlzdAp3aW4tcHYtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6
Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL3dpbi1wdi1kZXZlbA==

--===============8691639628177959494==--



From win-pv-devel-bounces@lists.xenproject.org Wed May 30 18:51:25 2018
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 30 May 2018 18:51:25 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1fO6Bu-0003E0-NS; Wed, 30 May 2018 18:51:22 +0000
Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <srs0=vulc=ir=msibureautique.ca=dominic@srs-us1.protection.inumbo.net>)
 id 1fO6Bt-0003Dv-6o
 for win-pv-devel@lists.xenproject.org; Wed, 30 May 2018 18:51:21 +0000
X-Inumbo-ID: 25b706d9-643a-11e8-9728-bc764e045a96
Received: from mail.msibureautique.ca (unknown
 [2001:470:1d:5dd:216:3eff:fe00:0])
 by us1-rack-dfw2.inumbo.com (Halon) with ESMTP
 id 25b706d9-643a-11e8-9728-bc764e045a96;
 Wed, 30 May 2018 20:49:14 +0200 (CEST)
Received: from [10.0.0.43] (PC10-Doum.domaine.msibureautique.ca [10.0.0.43])
 by xen-Serveur-MAGEIA.domaine.msibureautique.ca (Postfix) with ESMTP id
 29D19839E9
 for <win-pv-devel@lists.xenproject.org>; Wed, 30 May 2018 14:51:15 -0400 (EDT)
To: win-pv-devel@lists.xenproject.org
References: <fd389b31540546ddaa63e1896d482576@licoho.de>
From: Dominic Russell <dominic@msibureautique.ca>
Organization: MSI Bureautique inc.
Message-ID: <31fc59e0-6282-4b4f-ec38-d9d29a710f54@msibureautique.ca>
Date: Wed, 30 May 2018 14:51:18 -0400
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101
 Thunderbird/52.8.0
MIME-Version: 1.0
In-Reply-To: <fd389b31540546ddaa63e1896d482576@licoho.de>
Content-Language: en-CA
Subject: Re: [win-pv-devel] Question - Change Win-driver from Gplpv to PV
 xennet driver
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============1309314511892842239=="
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>

This is a multi-part message in MIME format.
--===============1309314511892842239==
Content-Type: multipart/alternative;
 boundary="------------4D91DBFC3F85DFD826753FFC"
Content-Language: en-CA

This is a multi-part message in MIME format.
--------------4D91DBFC3F85DFD826753FFC
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit

Hello,

The issue when removing the GPL drivers is the XenBus driver, which is 
flagged as critical by Windows and does not get uninstalled.  It has to 
be removed manually from the registry, in the services entries.

So; remove the GPL drivers, remove the XenBus entry in the registry (I 
was searching for the file name of the driver to be sure to catch it 
everywhere, which is xenpci.sys), reboot, then the new drivers can be 
installed.  Make sure that a restoration point is available in case 
something does not work, this way Windows can be restored to make it 
start again.

Best regards,
Dominic Russell
MSI Bureautique inc.

Le 2018-05-30 à 14:08, Ronny Wagner a écrit :
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA256
>
> Hello @all,
>
> this is my first post here, i need a little bit help to upgrade my Windows Driver from gplpv 0.11.0.373 to xennet driver (Windows PV Drivers 8.2.1).
>
> I search a long time to find a manuel for this case.
>
> At last i tested with upgrade on the system the network driver (xennet) on windows 2012 and the system lost the connection and i need hours to reactive the gplpv driver.
>
> I think i make a mistake everywhere.
>
> Can i upgrade the networkcard with click on dpinst.exe in the directory (x64)?
>
> Thank you very much for your help.
>
> Best regards
> Ronny
> -----BEGIN PGP SIGNATURE-----
> Comment: Using gpg4o v5.3.100.9082 - https://www.gpg4o.de/
> Charset: utf-8
>
> iQIzBAEBCAAdFiEEDcS83+0JA7ejf5Yr4qSk0trZ/mwFAlsO6KcACgkQ4qSk0trZ
> /mw1sBAAjeD0pYzUmEf6i2hQuCWEt/cOLAlwObRQa/ISq3QsV6EdfvQp32ZFmBGw
> sHbw77VfM0iOvS9N1Eup+LzLlP/W6ifKrlNYSnhmlOQ4H18KbH/uB2zk8KwZ2Vc4
> vqzueolGrAf2CX+5hXrE3U1kgDlFMsqwqRb1eil8BKxRNmVCUMyUxLmz//ggWXPx
> oGoiu08EQnAswkWbV7vQWR52tTk/Kf1siQ2TQUjjgBwnZZLswjzwRuLdUaAwT4R0
> t7ZfBU1YbT6tbQss99R1DWZOYcMk4Z46JIQcH4w6ZTF80LNcTRTZsMXxszvDYVhy
> 6+JrltU/ZudohSj1+bZlDUgTzQ2XDVa97JFAsd0RDQYmtuL+K++tadkTYh9+2aM9
> EBf/PZ9LNZFMkimQf7ZVMIrkMSOlyS2nJ8r2A0UjVsCt/ly0yzQ3z/Hg9x9DqBj/
> ycljcxyv20buPy5cnLOrVOno9akQkR4cXF5whyrby/V3WRjaPBIksnyJOsmLkYUt
> BFxEAeQNnPF0NLcrbXQabekekZEjtydqdJf96IEl0Fia4Jy5ZMv/JiRemhlSDa+Z
> Dtf477zTNrsG9VhpLFJO4TJ47bygu8XrAkJQycXxbfkd2x8u1YrDKjEqTFFyC4Wj
> 0by6s3PX3Vr2YDbYxBkGWY9+fa2pYRnL15Xzp0JGJjRKFeSH39Y=
> =4kiN
> -----END PGP SIGNATURE-----
>
>
> _______________________________________________
> win-pv-devel mailing list
> win-pv-devel@lists.xenproject.org
> https://lists.xenproject.org/mailman/listinfo/win-pv-devel


--------------4D91DBFC3F85DFD826753FFC
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: 8bit

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <p>Hello,</p>
    <p>The issue when removing the GPL drivers is the XenBus driver,
      which is flagged as critical by Windows and does not get
      uninstalled.  It has to be removed manually from the registry, in
      the services entries.</p>
    <p>So; remove the GPL drivers, remove the XenBus entry in the
      registry (I was searching for the file name of the driver to be
      sure to catch it everywhere, which is xenpci.sys), reboot, then
      the new drivers can be installed.  Make sure that a restoration
      point is available in case something does not work, this way
      Windows can be restored to make it start again.<br>
    </p>
    <pre class="moz-signature" cols="72">Best regards,
Dominic Russell
MSI Bureautique inc.
</pre>
    <div class="moz-cite-prefix">Le 2018-05-30 à 14:08, Ronny Wagner a
      écrit :<br>
    </div>
    <blockquote type="cite"
      cite="mid:fd389b31540546ddaa63e1896d482576@licoho.de">
      <pre wrap="">-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

Hello @all,

this is my first post here, i need a little bit help to upgrade my Windows Driver from gplpv 0.11.0.373 to xennet driver (Windows PV Drivers 8.2.1).

I search a long time to find a manuel for this case.

At last i tested with upgrade on the system the network driver (xennet) on windows 2012 and the system lost the connection and i need hours to reactive the gplpv driver.

I think i make a mistake everywhere.

Can i upgrade the networkcard with click on dpinst.exe in the directory (x64)?

Thank you very much for your help.

Best regards
Ronny 
-----BEGIN PGP SIGNATURE-----
Comment: Using gpg4o v5.3.100.9082 - <a class="moz-txt-link-freetext" href="https://www.gpg4o.de/">https://www.gpg4o.de/</a>
Charset: utf-8

iQIzBAEBCAAdFiEEDcS83+0JA7ejf5Yr4qSk0trZ/mwFAlsO6KcACgkQ4qSk0trZ
/mw1sBAAjeD0pYzUmEf6i2hQuCWEt/cOLAlwObRQa/ISq3QsV6EdfvQp32ZFmBGw
sHbw77VfM0iOvS9N1Eup+LzLlP/W6ifKrlNYSnhmlOQ4H18KbH/uB2zk8KwZ2Vc4
vqzueolGrAf2CX+5hXrE3U1kgDlFMsqwqRb1eil8BKxRNmVCUMyUxLmz//ggWXPx
oGoiu08EQnAswkWbV7vQWR52tTk/Kf1siQ2TQUjjgBwnZZLswjzwRuLdUaAwT4R0
t7ZfBU1YbT6tbQss99R1DWZOYcMk4Z46JIQcH4w6ZTF80LNcTRTZsMXxszvDYVhy
6+JrltU/ZudohSj1+bZlDUgTzQ2XDVa97JFAsd0RDQYmtuL+K++tadkTYh9+2aM9
EBf/PZ9LNZFMkimQf7ZVMIrkMSOlyS2nJ8r2A0UjVsCt/ly0yzQ3z/Hg9x9DqBj/
ycljcxyv20buPy5cnLOrVOno9akQkR4cXF5whyrby/V3WRjaPBIksnyJOsmLkYUt
BFxEAeQNnPF0NLcrbXQabekekZEjtydqdJf96IEl0Fia4Jy5ZMv/JiRemhlSDa+Z
Dtf477zTNrsG9VhpLFJO4TJ47bygu8XrAkJQycXxbfkd2x8u1YrDKjEqTFFyC4Wj
0by6s3PX3Vr2YDbYxBkGWY9+fa2pYRnL15Xzp0JGJjRKFeSH39Y=
=4kiN
-----END PGP SIGNATURE-----</pre>
      <!--'"--><br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">_______________________________________________
win-pv-devel mailing list
<a class="moz-txt-link-abbreviated" href="mailto:win-pv-devel@lists.xenproject.org">win-pv-devel@lists.xenproject.org</a>
<a class="moz-txt-link-freetext" href="https://lists.xenproject.org/mailman/listinfo/win-pv-devel">https://lists.xenproject.org/mailman/listinfo/win-pv-devel</a></pre>
    </blockquote>
    <br>
  </body>
</html>

--------------4D91DBFC3F85DFD826753FFC--


--===============1309314511892842239==
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: base64
Content-Disposition: inline

X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18Kd2luLXB2LWRl
dmVsIG1haWxpbmcgbGlzdAp3aW4tcHYtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6
Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL3dpbi1wdi1kZXZlbA==

--===============1309314511892842239==--


