<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "http://bugs.gentoo.org/bugzilla.dtd">

<bugzilla version="2.22.7"
          urlbase="http://bugs.gentoo.org/"
          maintainer="bugzilla@gentoo.org"
>

    <bug>
          <bug_id>96449</bug_id>
          
          <creation_ts>2005-06-18 03:55 0000</creation_ts>
          <short_desc>New: fusd A library and kernel module to create userpsace char devices</short_desc>
          <delta_ts>2007-03-31 09:39:28 0000</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>Gentoo Linux</product>
          <component>Ebuilds</component>
          <version>unspecified</version>
          <rep_platform>x86</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>NEW</bug_status>
          
          
          <status_whiteboard>[sunrise-overlay]</status_whiteboard>
          <keywords>EBUILD, InOverlay</keywords>
          <priority>P2</priority>
          <bug_severity>enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>96450</blocked>
          
          <everconfirmed>1</everconfirmed>
          <reporter>bonbons67@internet.lu</reporter>
          <assigned_to>maintainer-wanted@gentoo.org</assigned_to>
          <cc>endgame.dos@gmail.com</cc>
    
    <cc>gentoo@wildgooses.com</cc>
    
    <cc>jeffrey@borgs.net</cc>
    
    <cc>kripton@kripserver.net</cc>

      

      
          <long_desc isprivate="0">
            <who>bonbons67@internet.lu</who>
            <bug_when>2005-06-18 03:55:34 0000</bug_when>
            <thetext>fusd is a library and a kernel module that allows userspace applications to 
create character devices with send back data and ioctls to the userspace. 

Reproducible: Always
Steps to Reproduce:</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>bonbons67@internet.lu</who>
            <bug_when>2005-06-18 04:04:20 0000</bug_when>
            <thetext>Created an attachment (id=61439)
Suggested ebuild

Initial ebuild.

This ebuild only works on x86 and contains an ugly hack with ARCH=i386 as
kernel module does not compile otherwise (Makefile sees ARCH=x86 and thus does
not find the right kernel includes)

Revision 9 is because it contains Kor Nielsen&apos;s 9th patch-revision (adding
support for 2.6 kernels, udev and mmap) See also Bug #96450

I suggest this to be added to sys-libs category.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>kripton@kripserver.net</who>
            <bug_when>2005-07-02 06:42:30 0000</bug_when>
            <thetext>Created an attachment (id=62465)
Patch that fixes a naming-issue of kernel 2.6.12-gitX and newer in kfusd.c

As of 2.6.12-gitX they changed the name of some functions so kfusd ain&apos;t
working anymore! With this patch it works at my PC.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>trondare@trolltech.com</who>
            <bug_when>2005-09-28 03:36:59 0000</bug_when>
            <thetext>Created an attachment (id=69397)
Patch that fixes a naming-issue of kernel &gt;=2.6.12

jannis&apos; patch didn&apos;t apply properly, so I cleaned it up.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>trondare@trolltech.com</who>
            <bug_when>2005-09-28 03:40:01 0000</bug_when>
            <thetext>Created an attachment (id=69398)
udev rules for creation of the kfusd device nodes

I really hope the fusd ebuild can get some love and be accepted in the main
tree. Same goes for oss2jack, these projects really help those that have
soundcards with poor driver support.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>ciaran.mccreesh@googlemail.com</who>
            <bug_when>2005-09-28 11:37:34 0000</bug_when>
            <thetext>There&apos;s a set_arch_to_kernel function in one of the eclasses. Can you use this?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>kripton@kripserver.net</who>
            <bug_when>2006-05-15 04:39:06 0000</bug_when>
            <thetext>Created an attachment (id=86800)
media-sound/fusd-1.10-r11.ebuild

This ebuild installs fusd-kor-1.10-11. It doesn&apos;t need any patches since everything has been fixed in the source (nice ^^).
The ebuild ain&apos;t really pretty but works on two of my systems.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>jokey@gentoo.org</who>
            <bug_when>2006-09-25 12:16:48 0000</bug_when>
            <thetext>This is now in the sunrise overlay. You can find it at:
http://gentoo-sunrise.org/svn/reviewed/media-sound/fusd-kor</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>endgame.dos@gmail.com</who>
            <bug_when>2007-03-11 22:51:47 0000</bug_when>
            <thetext>Created an attachment (id=113027)
kfusd compile cleanly against gentoo-sources-2.6.20-r2

I don&apos;t know what other kernel versions this patch will work on. It&apos;s a diff from the normal kfusd/kfusd.c against the new one here: http://hg.konstruktiv.org/fusd/file/2df3a93d0724/kfusd/, as specified in http://gentoo-wiki.com/index.php?title=HOWTO_Jack#oss2jack</thetext>
          </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>61439</attachid>
            <date>2005-06-18 04:04 0000</date>
            <desc>Suggested ebuild</desc>
            <filename>fusd-1.10-r9.ebuild</filename>
            <type>text/plain</type>
            <data encoding="base64">IyBDb3B5cmlnaHQgMTk5OS0yMDA0IEdlbnRvbyBGb3VuZGF0aW9uCiMgRGlzdHJpYnV0ZWQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2MgojICRIZWFk
ZXI6ICQKCmluaGVyaXQgZXV0aWxzCgpERVNDUklQVElPTj0iZnVzZCwgYSBsaWIgYW5kIGtlcm5l
bCBtb2R1bGUgdG8gY3JlYXRlIHVzZXItc3BhY2UgY2hhcmFjdGVyIGRldmljZXMiCkhPTUVQQUdF
PSJodHRwOi8vd3d3LmNpcmNsZW11ZC5vcmcvfmplbHNvbi9zb2Z0d2FyZS8ke1BOfS8iClNSQ19V
Ukk9Imh0dHA6Ly93d3cuY2lyY2xlbXVkLm9yZy9wdWIvamVsc29uLyR7UE59LyR7UE59LSR7UFZ9
LnRhci5negoJaHR0cDovL2ZvcnQueGRhcy5jb20vfmtvci9vc3MyamFjay9mdXNkLWtvci0xLjEw
LTkucGF0Y2giCkxJQ0VOU0U9IkJTRCIKS0VZV09SRFM9In54ODYiClNMT1Q9IjAiCgpJVVNFPSJk
b2MgdWRldiIKCkRFUEVORD0iIgoKUz0iJHtXT1JLRElSfS8ke1BOfS0ke1BWfSIKCnNyY191bnBh
Y2soKSB7Cgl1bnBhY2sgIiR7UE59LSR7UFZ9LnRhci5neiIKCWNkICR7UE59LSR7UFZ9CgllcGF0
Y2ggIiR7RElTVERJUn0vZnVzZC1rb3ItMS4xMC05LnBhdGNoIgp9CgpzcmNfY29tcGlsZSgpIHsK
CSMgVE9ETzogRml4IHRoZSBhcmNoIGRldGVjdGlvbiBwcm9ibGVtIHdoaWNoIG1ha2VzIGtvbXBp
bGF0aW9uIGZhaWwKCUFSQ0g9aTM4NiBtYWtlCn0KCnNyY19pbnN0YWxsICgpIHsKCWNkIG9iaioK
CWRvbGliLmEgbGliZnVzZC5hCgljZCAuLi9pbmNsdWRlCglpbnNpbnRvIC91c3IvaW5jbHVkZQoJ
ZG9pbnMgKi5oCgljZCAuLi9rZnVzZAoJaW5zaW50byAvbGliL21vZHVsZXMvYHVuYW1lIC1yYC9l
eHRyYQoJZG9pbnMga2Z1c2Qua28KCWNkIC4uCglkb2RvYyBDaGFuZ2VMb2cgUkVBRE1FIAoJaWYg
dXNlIGRvYyA7IHRoZW4KCQljZCBkb2MKCQlkb2RvYyBmdXNkLnBkZiBmdXNkLnRleAoJZmkKCglp
ZiB1c2UgdWRldjsgdGhlbgoJCSggZWNobyAiIyBmdXNkIGRldmljZXMiCgkJZWNobyAiS0VSTkVM
PVwiY29udHJvbFwiLCBOQU1FPVwiZnVzZC8la1wiLCBHUk9VUD1cIndoZWVsXCIsIE1PREU9XCIw
NjYwXCIiCgkJZWNobyAiS0VSTkVMPVwic3RhdHVzXCIsIE5BTUU9XCJmdXNkLyVrXCIsIEdST1VQ
PVwid2hlZWxcIiwgTU9ERT1cIjA2NjBcIiIgKSA+IDQ5LWZ1c2QucnVsZXMKCQlpbnNpbnRvIC9l
dGMvdWRldi9ydWxlcy5kCgkJZG9pbnMgNDktZnVzZC5ydWxlcwoJZmkKCSggZWNobyAiIyBmdXNk
IGFsaWFzZXMiCgllY2hvICJhbGlhcyAvZGV2L2Z1c2Qga2Z1c2QiCgllY2hvICJhbGlhcyAvZGV2
L2Z1c2QvY29udHJvbCBrZnVzZCIKCWVjaG8gImFsaWFzIC9kZXYvZnVzZC9zdGF0dXMga2Z1c2Qi
ICkgPiBmdXNkLm1vZHVsZXMKCWluc2ludG8gL2V0Yy9tb2R1bGVzLmQKCW5ld2lucyBmdXNkLm1v
ZHVsZXMgZnVzZAp9Cgo=
</data>        

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62465</attachid>
            <date>2005-07-02 06:42 0000</date>
            <desc>Patch that fixes a naming-issue of kernel 2.6.12-gitX and newer in kfusd.c</desc>
            <filename>kfusd_2.6.12-git4+_patch</filename>
            <type>text/plain</type>
            <data encoding="base64">LS0tIGtmdXNkLmMub3JpZwkyMDA1LTA3LTAyIDE1OjM0OjI2LjAwMDAwMDAwMCArMDIwMAorKysg
a2Z1c2QuYwkyMDA1LTA3LTAyIDE1OjIzOjI4LjAwMDAwMDAwMCArMDIwMApAQCAtMTI1LDcgKzEy
NSw3IEBACiBTVEFUSUMgZGV2X3QgY29udHJvbF9pZDsKIFNUQVRJQyBkZXZfdCBzdGF0dXNfaWQ7
CiAKLXN0YXRpYyBzdHJ1Y3QgY2xhc3Nfc2ltcGxlICpmdXNkX2NsYXNzOworc3RhdGljIHN0cnVj
dCBjbGFzcyAqZnVzZF9jbGFzczsKIAogc3RhdGljIHN0cnVjdCBjbGFzc19kZXZpY2UgKmZ1c2Rf
Y29udHJvbF9jbGFzc19kZXZpY2U7CiBzdGF0aWMgc3RydWN0IGNsYXNzX2RldmljZSAqZnVzZF9z
dGF0dXNfY2xhc3NfZGV2aWNlOwpAQCAtMTk2NSw3ICsxOTY1LDcgQEAKICAgICAgICAgfQogICAg
ICAgICBlbHNlCiAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmdXNkX2Rldi0+Y2xhenogPSBj
bGFzc19zaW1wbGVfY3JlYXRlKFRISVNfTU9EVUxFLCBmdXNkX2Rldi0+Y2xhc3NfbmFtZSk7Cisg
ICAgICAgICAgICAgICAgZnVzZF9kZXYtPmNsYXp6ID0gY2xhc3NfY3JlYXRlKFRISVNfTU9EVUxF
LCBmdXNkX2Rldi0+Y2xhc3NfbmFtZSk7CiAgICAgICAgICAgICAgICAgaWYoSVNfRVJSKGZ1c2Rf
ZGV2LT5jbGF6eikpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAg
ZXJyb3IgPSBQVFJfRVJSKGZ1c2RfZGV2LT5jbGF6eik7CkBAIC0xOTc0LDExICsxOTc0LDExIEBA
CiAgICAgICAgICAgICAgICAgZnVzZF9kZXYtPm93bnNfY2xhc3MgPSAxOwogICAgICAgICB9CiAg
ICAgICAgIAotICAgICAgICBmdXNkX2Rldi0+Y2xhc3NfZGV2aWNlID0gY2xhc3Nfc2ltcGxlX2Rl
dmljZV9hZGQoZnVzZF9kZXYtPmNsYXp6LCBmdXNkX2Rldi0+ZGV2X2lkLCBOVUxMLCBmdXNkX2Rl
di0+ZGV2X25hbWUpOworICAgICAgICBmdXNkX2Rldi0+Y2xhc3NfZGV2aWNlID0gY2xhc3NfZGV2
aWNlX2NyZWF0ZShmdXNkX2Rldi0+Y2xhenosIGZ1c2RfZGV2LT5kZXZfaWQsIE5VTEwsIGZ1c2Rf
ZGV2LT5kZXZfbmFtZSk7CiAgICAgICAgIGlmKGZ1c2RfZGV2LT5jbGFzc19kZXZpY2UgPT0gTlVM
TCkKICAgICAgICAgewogICAgICAgICAgICAgICAgIGVycm9yID0gUFRSX0VSUihmdXNkX2Rldi0+
Y2xhc3NfZGV2aWNlKTsKLSAgICAgICAgICAgICAgICBwcmludGsoImNsYXNzX3NpbXBsZV9kZXZp
Y2VfYWRkIGZhaWxlZCBzdGF0dXM6ICVkXG4iLCBlcnJvcik7CisgICAgICAgICAgICAgICAgcHJp
bnRrKCJjbGFzc19kZXZpY2VfY3JlYXRlIGZhaWxlZCBzdGF0dXM6ICVkXG4iLCBlcnJvcik7CiAg
ICAgICAgICAgICAgICAgZ290byByZWdpc3Rlcl9mYWlsZWQ1OwogICAgICAgICB9CiAgICAgICAg
IApAQCAtMjAwMSw3ICsyMDAxLDcgQEAKICAgcmV0dXJuIDA7CiAKIHJlZ2lzdGVyX2ZhaWxlZDU6
Ci0gICAgICAgIGNsYXNzX3NpbXBsZV9kZXN0cm95KGZ1c2RfZGV2LT5jbGF6eik7CisgICAgICAg
IGNsYXNzX2Rlc3Ryb3koZnVzZF9kZXYtPmNsYXp6KTsKIHJlZ2lzdGVyX2ZhaWxlZDQ6CiAgICAg
ICAgIGNkZXZfZGVsKGZ1c2RfZGV2LT5oYW5kbGUpOwogcmVnaXN0ZXJfZmFpbGVkMzoKQEAgLTIw
OTMsMTAgKzIwOTMsMTAgQEAKIAogICAgICAgICBpZihmdXNkX2Rldi0+aGFuZGxlKQogICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgY2xhc3Nfc2ltcGxlX2RldmljZV9yZW1vdmUoZnVzZF9kZXYt
PmRldl9pZCk7CisgICAgICAgICAgICAgICAgY2xhc3NfZGV2aWNlX2Rlc3Ryb3koZnVzZF9jbGFz
cywgZnVzZF9kZXYtPmRldl9pZCk7CiAgICAgICAgICAgICAgICAgaWYoZnVzZF9kZXYtPm93bnNf
Y2xhc3MpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3Nf
c2ltcGxlX2Rlc3Ryb3koZnVzZF9kZXYtPmNsYXp6KTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNsYXNzX2Rlc3Ryb3koZnVzZF9kZXYtPmNsYXp6KTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgY2Rldl9kZWwoZnVzZF9kZXYtPmhhbmRsZSk7CiAjaWZkZWYgQ09ORklHX0RF
VkZTX0ZTCkBAIC0yNzk5LDExICsyNzk5LDExIEBACiAgICAgICAgIGZ1c2RfY29udHJvbF9kZXZp
Y2UgPSBOVUxMOwogICAgICAgICBmdXNkX3N0YXR1c19kZXZpY2UgPSBOVUxMOwogICAgICAgICAK
LSAgICAgICAgZnVzZF9jbGFzcyA9IGNsYXNzX3NpbXBsZV9jcmVhdGUoVEhJU19NT0RVTEUsICJm
dXNkIik7CisgICAgICAgIGZ1c2RfY2xhc3MgPSBjbGFzc19jcmVhdGUoVEhJU19NT0RVTEUsICJm
dXNkIik7CiAgICAgICAgIGlmKElTX0VSUihmdXNkX2NsYXNzKSkKICAgICAgICAgewogICAgICAg
ICAgICAgICAgIHJldHZhbCA9IFBUUl9FUlIoZnVzZF9jbGFzcyk7Ci0gICAgICAgICAgICAgICAg
cHJpbnRrKCJjbGFzc19zaW1wbGVfY3JlYXRlIGZhaWxlZCBzdGF0dXM6ICVkXG4iLCByZXR2YWwp
OworICAgICAgICAgICAgICAgIHByaW50aygiY2xhc3NfY3JlYXRlIGZhaWxlZCBzdGF0dXM6ICVk
XG4iLCByZXR2YWwpOwogICAgICAgICAgICAgICAgIGdvdG8gZmFpbDA7CiAgICAgICAgIH0KICAg
ICAgICAgCkBAIC0yODQxLDExICsyODQxLDExIEBACiAgICAgICAgICAgICAgICAgZ290byBmYWls
NDsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgZnVzZF9jb250cm9sX2NsYXNzX2Rldmlj
ZSA9IGNsYXNzX3NpbXBsZV9kZXZpY2VfYWRkKGZ1c2RfY2xhc3MsIGNvbnRyb2xfaWQsIE5VTEws
ICJjb250cm9sIik7CisgICAgICAgIGZ1c2RfY29udHJvbF9jbGFzc19kZXZpY2UgPSBjbGFzc19k
ZXZpY2VfY3JlYXRlKGZ1c2RfY2xhc3MsIGNvbnRyb2xfaWQsIE5VTEwsICJjb250cm9sIik7CiAg
ICAgICAgIGlmKGZ1c2RfY29udHJvbF9jbGFzc19kZXZpY2UgPT0gTlVMTCkKICAgICAgICAgewog
ICAgICAgICAgICAgICAgIHJldHZhbCA9IFBUUl9FUlIoZnVzZF9jb250cm9sX2NsYXNzX2Rldmlj
ZSk7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKCJjbGFzc19zaW1wbGVfZGV2aWNlX2FkZCBmYWls
ZWQgc3RhdHVzOiAlZFxuIiwgcmV0dmFsKTsKKyAgICAgICAgICAgICAgICBwcmludGsoImNsYXNz
X2RldmljZV9jcmVhdGUgZmFpbGVkIHN0YXR1czogJWRcbiIsIHJldHZhbCk7CiAgICAgICAgICAg
ICAgICAgZ290byBmYWlsNTsKICAgICAgICAgfQogCkBAIC0yODgyLDEwICsyODgyLDEwIEBACiAg
ICAgICAgICAgICAgICAgZ290byBmYWlsOTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAg
ZnVzZF9zdGF0dXNfY2xhc3NfZGV2aWNlID0gY2xhc3Nfc2ltcGxlX2RldmljZV9hZGQoZnVzZF9j
bGFzcywgc3RhdHVzX2lkLCBOVUxMLCAic3RhdHVzIik7CisgICAgICAgIGZ1c2Rfc3RhdHVzX2Ns
YXNzX2RldmljZSA9IGNsYXNzX2RldmljZV9jcmVhdGUoZnVzZF9jbGFzcywgc3RhdHVzX2lkLCBO
VUxMLCAic3RhdHVzIik7CiAgICAgICAgIGlmKGZ1c2Rfc3RhdHVzX2NsYXNzX2RldmljZSA9PSBO
VUxMKQogICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKCJjbGFzc19zaW1wbGVfZGV2
aWNlX2FkZCBmYWlsZWQgc3RhdHVzOiAlZFxuIiwgcmV0dmFsKTsKKyAgICAgICAgICAgICAgICBw
cmludGsoImNsYXNzX2RldmljZV9jcmVhdGUgZmFpbGVkIHN0YXR1czogJWRcbiIsIHJldHZhbCk7
CiAgICAgICAgICAgICAgICAgcmV0dmFsID0gUFRSX0VSUihmdXNkX3N0YXR1c19jbGFzc19kZXZp
Y2UpOwogICAgICAgICAgICAgICAgIGdvdG8gZmFpbDEwOwogICAgICAgICB9CkBAIC0yOTA0LDcg
KzI5MDQsNyBAQAogZmFpbDc6CiAgICAgICAgIHVucmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihzdGF0
dXNfaWQsIDEpOwogZmFpbDY6Ci0gICAgICAgIGNsYXNzX3NpbXBsZV9kZXZpY2VfcmVtb3ZlKGNv
bnRyb2xfaWQpOworICAgICAgICBjbGFzc19kZXZpY2VfZGVzdHJveShmdXNkX2NsYXNzLCBjb250
cm9sX2lkKTsKIGZhaWw1OgogICAgICAgICBjZGV2X2RlbChmdXNkX2NvbnRyb2xfZGV2aWNlKTsK
IGZhaWw0OgpAQCAtMjkxNiw3ICsyOTE2LDcgQEAKIGZhaWwyOgogICAgICAgICB1bnJlZ2lzdGVy
X2NocmRldl9yZWdpb24oY29udHJvbF9pZCwgMSk7CiBmYWlsMToKLSAgICAgICAgY2xhc3Nfc2lt
cGxlX2Rlc3Ryb3koZnVzZF9jbGFzcyk7CisgICAgICAgIGNsYXNzX2Rlc3Ryb3koZnVzZF9jbGFz
cyk7CiBmYWlsMDoKICAgICAgICAgcmV0dXJuIHJldHZhbDsKIH0KQEAgLTI5MjUsOCArMjkyNSw4
IEBACiB7CiAgIFJERUJVRygxLCAiY2xlYW5pbmcgdXAiKTsKIAotICAgICAgICBjbGFzc19zaW1w
bGVfZGV2aWNlX3JlbW92ZShzdGF0dXNfaWQpOwotICAgICAgICBjbGFzc19zaW1wbGVfZGV2aWNl
X3JlbW92ZShjb250cm9sX2lkKTsKKyAgICAgICAgY2xhc3NfZGV2aWNlX2Rlc3Ryb3koZnVzZF9j
bGFzcywgc3RhdHVzX2lkKTsKKyAgICAgICAgY2xhc3NfZGV2aWNlX2Rlc3Ryb3koZnVzZF9jbGFz
cywgY29udHJvbF9pZCk7CiAgICAgICAgIAogICAgICAgICBjZGV2X2RlbChmdXNkX2NvbnRyb2xf
ZGV2aWNlKTsKICAgICAgICAgY2Rldl9kZWwoZnVzZF9zdGF0dXNfZGV2aWNlKTsKQEAgLTI5MzUs
NyArMjkzNSw3IEBACiAgIGRldmZzX3JlbW92ZShGVVNEX1NUQVRVU19GSUxFTkFNRSk7CiAKIAot
ICAgICAgICBjbGFzc19zaW1wbGVfZGVzdHJveShmdXNkX2NsYXNzKTsKKyAgICAgICAgY2xhc3Nf
ZGVzdHJveShmdXNkX2NsYXNzKTsKICAgICAgICAgCiAjaWZkZWYgQ09ORklHX0ZVU0RfTUVNREVC
VUcKICAgZnVzZF9tZW1fY2xlYW51cCgpOwo=
</data>        

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69397</attachid>
            <date>2005-09-28 03:36 0000</date>
            <desc>Patch that fixes a naming-issue of kernel &gt;=2.6.12</desc>
            <filename>kfusd-2.6.12+.patch</filename>
            <type>text/plain</type>
            <data encoding="base64">LS0tIGtmdXNkL2tmdXNkLmMub2xkCTIwMDUtMDktMTcgMDA6MzQ6MTAuMDAwMDAwMDAwICswMjAw
CisrKyBrZnVzZC9rZnVzZC5jCTIwMDUtMDktMTcgMDA6NDM6MDAuMDAwMDAwMDAwICswMjAwCkBA
IC0xMjUsNyArMTI1LDcgQEAKIFNUQVRJQyBkZXZfdCBjb250cm9sX2lkOwogU1RBVElDIGRldl90
IHN0YXR1c19pZDsKIAotc3RhdGljIHN0cnVjdCBjbGFzc19zaW1wbGUgKmZ1c2RfY2xhc3M7Citz
dGF0aWMgc3RydWN0IGNsYXNzICpmdXNkX2NsYXNzOwogCiBzdGF0aWMgc3RydWN0IGNsYXNzX2Rl
dmljZSAqZnVzZF9jb250cm9sX2NsYXNzX2RldmljZTsKIHN0YXRpYyBzdHJ1Y3QgY2xhc3NfZGV2
aWNlICpmdXNkX3N0YXR1c19jbGFzc19kZXZpY2U7CkBAIC0xOTY1LDcgKzE5NjUsNyBAQAogCX0K
IAllbHNlCiAJewotCQlmdXNkX2Rldi0+Y2xhenogPSBjbGFzc19zaW1wbGVfY3JlYXRlKFRISVNf
TU9EVUxFLCBmdXNkX2Rldi0+Y2xhc3NfbmFtZSk7CisJCWZ1c2RfZGV2LT5jbGF6eiA9IGNsYXNz
X2NyZWF0ZShUSElTX01PRFVMRSwgZnVzZF9kZXYtPmNsYXNzX25hbWUpOwogCQlpZihJU19FUlIo
ZnVzZF9kZXYtPmNsYXp6KSkKIAkJewogCQkJZXJyb3IgPSBQVFJfRVJSKGZ1c2RfZGV2LT5jbGF6
eik7CkBAIC0xOTc0LDExICsxOTc0LDExIEBACiAJCWZ1c2RfZGV2LT5vd25zX2NsYXNzID0gMTsK
IAl9CiAJCi0JZnVzZF9kZXYtPmNsYXNzX2RldmljZSA9IGNsYXNzX3NpbXBsZV9kZXZpY2VfYWRk
KGZ1c2RfZGV2LT5jbGF6eiwgZnVzZF9kZXYtPmRldl9pZCwgTlVMTCwgZnVzZF9kZXYtPmRldl9u
YW1lKTsKKwlmdXNkX2Rldi0+Y2xhc3NfZGV2aWNlID0gY2xhc3NfZGV2aWNlX2NyZWF0ZShmdXNk
X2Rldi0+Y2xhenosIGZ1c2RfZGV2LT5kZXZfaWQsIE5VTEwsIGZ1c2RfZGV2LT5kZXZfbmFtZSk7
CiAJaWYoZnVzZF9kZXYtPmNsYXNzX2RldmljZSA9PSBOVUxMKQogCXsKIAkJZXJyb3IgPSBQVFJf
RVJSKGZ1c2RfZGV2LT5jbGFzc19kZXZpY2UpOwotCQlwcmludGsoImNsYXNzX3NpbXBsZV9kZXZp
Y2VfYWRkIGZhaWxlZCBzdGF0dXM6ICVkXG4iLCBlcnJvcik7CisJCXByaW50aygiY2xhc3NfZGV2
aWNlX2NyZWF0ZSBmYWlsZWQgc3RhdHVzOiAlZFxuIiwgZXJyb3IpOwogCQlnb3RvIHJlZ2lzdGVy
X2ZhaWxlZDU7CiAJfQogCQpAQCAtMjAwMSw3ICsyMDAxLDcgQEAKICAgcmV0dXJuIDA7CiAKIHJl
Z2lzdGVyX2ZhaWxlZDU6Ci0JY2xhc3Nfc2ltcGxlX2Rlc3Ryb3koZnVzZF9kZXYtPmNsYXp6KTsK
KwljbGFzc19kZXN0cm95KGZ1c2RfZGV2LT5jbGF6eik7CiByZWdpc3Rlcl9mYWlsZWQ0OgogCWNk
ZXZfZGVsKGZ1c2RfZGV2LT5oYW5kbGUpOwogcmVnaXN0ZXJfZmFpbGVkMzoKQEAgLTIwOTMsMTAg
KzIwOTMsMTAgQEAKIAogCWlmKGZ1c2RfZGV2LT5oYW5kbGUpCiAJewotCQljbGFzc19zaW1wbGVf
ZGV2aWNlX3JlbW92ZShmdXNkX2Rldi0+ZGV2X2lkKTsKKwkJY2xhc3NfZGV2aWNlX2Rlc3Ryb3ko
ZnVzZF9jbGFzcywgZnVzZF9kZXYtPmRldl9pZCk7CiAJCWlmKGZ1c2RfZGV2LT5vd25zX2NsYXNz
KQogCQl7Ci0JCQljbGFzc19zaW1wbGVfZGVzdHJveShmdXNkX2Rldi0+Y2xhenopOworCQkJY2xh
c3NfZGVzdHJveShmdXNkX2Rldi0+Y2xhenopOwogCQl9CiAJCWNkZXZfZGVsKGZ1c2RfZGV2LT5o
YW5kbGUpOwogI2lmZGVmIENPTkZJR19ERVZGU19GUwpAQCAtMjc5OSw3ICsyNzk5LDcgQEAKIAlm
dXNkX2NvbnRyb2xfZGV2aWNlID0gTlVMTDsKIAlmdXNkX3N0YXR1c19kZXZpY2UgPSBOVUxMOwog
CQotCWZ1c2RfY2xhc3MgPSBjbGFzc19zaW1wbGVfY3JlYXRlKFRISVNfTU9EVUxFLCAiZnVzZCIp
OworCWZ1c2RfY2xhc3MgPSBjbGFzc19jcmVhdGUoVEhJU19NT0RVTEUsICJmdXNkIik7CiAJaWYo
SVNfRVJSKGZ1c2RfY2xhc3MpKQogCXsKIAkJcmV0dmFsID0gUFRSX0VSUihmdXNkX2NsYXNzKTsK
QEAgLTI4NDEsMTEgKzI4NDEsMTEgQEAKIAkJZ290byBmYWlsNDsKIAl9CiAJCi0JZnVzZF9jb250
cm9sX2NsYXNzX2RldmljZSA9IGNsYXNzX3NpbXBsZV9kZXZpY2VfYWRkKGZ1c2RfY2xhc3MsIGNv
bnRyb2xfaWQsIE5VTEwsICJjb250cm9sIik7CisJZnVzZF9jb250cm9sX2NsYXNzX2RldmljZSA9
IGNsYXNzX2RldmljZV9jcmVhdGUoZnVzZF9jbGFzcywgY29udHJvbF9pZCwgTlVMTCwgImNvbnRy
b2wiKTsKIAlpZihmdXNkX2NvbnRyb2xfY2xhc3NfZGV2aWNlID09IE5VTEwpCiAJewogCQlyZXR2
YWwgPSBQVFJfRVJSKGZ1c2RfY29udHJvbF9jbGFzc19kZXZpY2UpOwotCQlwcmludGsoImNsYXNz
X3NpbXBsZV9kZXZpY2VfYWRkIGZhaWxlZCBzdGF0dXM6ICVkXG4iLCByZXR2YWwpOworCQlwcmlu
dGsoImNsYXNzX2RldmljZV9jcmVhdGUgZmFpbGVkIHN0YXR1czogJWRcbiIsIHJldHZhbCk7CiAJ
CWdvdG8gZmFpbDU7CiAJfQogCkBAIC0yODgyLDEwICsyODgyLDEwIEBACiAJCWdvdG8gZmFpbDk7
CiAJfQogCQotCWZ1c2Rfc3RhdHVzX2NsYXNzX2RldmljZSA9IGNsYXNzX3NpbXBsZV9kZXZpY2Vf
YWRkKGZ1c2RfY2xhc3MsIHN0YXR1c19pZCwgTlVMTCwgInN0YXR1cyIpOworCWZ1c2Rfc3RhdHVz
X2NsYXNzX2RldmljZSA9IGNsYXNzX2RldmljZV9jcmVhdGUoZnVzZF9jbGFzcywgc3RhdHVzX2lk
LCBOVUxMLCAic3RhdHVzIik7CiAJaWYoZnVzZF9zdGF0dXNfY2xhc3NfZGV2aWNlID09IE5VTEwp
CiAJewotCQlwcmludGsoImNsYXNzX3NpbXBsZV9kZXZpY2VfYWRkIGZhaWxlZCBzdGF0dXM6ICVk
XG4iLCByZXR2YWwpOworCQlwcmludGsoImNsYXNzX2RldmljZV9jcmVhdGUgZmFpbGVkIHN0YXR1
czogJWRcbiIsIHJldHZhbCk7CiAJCXJldHZhbCA9IFBUUl9FUlIoZnVzZF9zdGF0dXNfY2xhc3Nf
ZGV2aWNlKTsKIAkJZ290byBmYWlsMTA7CiAJfQpAQCAtMjkwNCw3ICsyOTA0LDcgQEAKIGZhaWw3
OgogCXVucmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihzdGF0dXNfaWQsIDEpOwogZmFpbDY6Ci0JY2xh
c3Nfc2ltcGxlX2RldmljZV9yZW1vdmUoY29udHJvbF9pZCk7CisJY2xhc3NfZGV2aWNlX2Rlc3Ry
b3koZnVzZF9jbGFzcywgY29udHJvbF9pZCk7CiBmYWlsNToKIAljZGV2X2RlbChmdXNkX2NvbnRy
b2xfZGV2aWNlKTsKIGZhaWw0OgpAQCAtMjkxNiw3ICsyOTE2LDcgQEAKIGZhaWwyOgogCXVucmVn
aXN0ZXJfY2hyZGV2X3JlZ2lvbihjb250cm9sX2lkLCAxKTsKIGZhaWwxOgotCWNsYXNzX3NpbXBs
ZV9kZXN0cm95KGZ1c2RfY2xhc3MpOworCWNsYXNzX2Rlc3Ryb3koZnVzZF9jbGFzcyk7CiBmYWls
MDoKIAlyZXR1cm4gcmV0dmFsOwogfQpAQCAtMjkyNSw4ICsyOTI1LDggQEAKIHsKICAgUkRFQlVH
KDEsICJjbGVhbmluZyB1cCIpOwogCi0JY2xhc3Nfc2ltcGxlX2RldmljZV9yZW1vdmUoc3RhdHVz
X2lkKTsKLQljbGFzc19zaW1wbGVfZGV2aWNlX3JlbW92ZShjb250cm9sX2lkKTsKKwljbGFzc19k
ZXZpY2VfZGVzdHJveShmdXNkX2NsYXNzLCBzdGF0dXNfaWQpOworCWNsYXNzX2RldmljZV9kZXN0
cm95KGZ1c2RfY2xhc3MsIGNvbnRyb2xfaWQpOwogCQogCWNkZXZfZGVsKGZ1c2RfY29udHJvbF9k
ZXZpY2UpOwogCWNkZXZfZGVsKGZ1c2Rfc3RhdHVzX2RldmljZSk7CkBAIC0yOTM1LDcgKzI5MzUs
NyBAQAogICBkZXZmc19yZW1vdmUoRlVTRF9TVEFUVVNfRklMRU5BTUUpOwogCiAKLQljbGFzc19z
aW1wbGVfZGVzdHJveShmdXNkX2NsYXNzKTsKKwljbGFzc19kZXN0cm95KGZ1c2RfY2xhc3MpOwog
CQogI2lmZGVmIENPTkZJR19GVVNEX01FTURFQlVHCiAgIGZ1c2RfbWVtX2NsZWFudXAoKTsK
</data>        

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>69398</attachid>
            <date>2005-09-28 03:40 0000</date>
            <desc>udev rules for creation of the kfusd device nodes</desc>
            <filename>fusd.rules</filename>
            <type>text/plain</type>
            <data encoding="base64">S0VSTkVMPT0iY29udHJvbCIsIE5BTUU9ImZ1c2QvJWsiLCBHUk9VUD0iYXVkaW8iCktFUk5FTD09
InN0YXR1cyIsIE5BTUU9ImZ1c2QvJWsiLCBHUk9VUD0iYXVkaW8iCg==
</data>        

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>86800</attachid>
            <date>2006-05-15 04:39 0000</date>
            <desc>sys-libs/fusd-1.10-r11.ebuild</desc>
            <filename>fusd-1.10-r11.ebuild</filename>
            <type>text/plain</type>
            <data encoding="base64">IyBDb3B5cmlnaHQgMTk5OS0yMDA0IEdlbnRvbyBGb3VuZGF0aW9uCiMgRGlzdHJpYnV0ZWQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2MgojICRIZWFk
ZXI6ICQKCmluaGVyaXQgZXV0aWxzCgpERVNDUklQVElPTj0iZnVzZCwgYSBsaWIgYW5kIGtlcm5l
bCBtb2R1bGUgdG8gY3JlYXRlIHVzZXItc3BhY2UgY2hhcmFjdGVyIGRldmljZXMiCkhPTUVQQUdF
PSJodHRwOi8vZm9ydC54ZGFzLmNvbS9+a29yL29zczJqYWNrLyIKU1JDX1VSST0iaHR0cDovL2Zv
cnQueGRhcy5jb20vfmtvci9vc3MyamFjay9mdXNkLWtvci0ke1BWfS0xMS50YXIuZ3oiCkxJQ0VO
U0U9IkJTRCIKS0VZV09SRFM9In54ODYiClNMT1Q9IjAiCgpJVVNFPSJkb2MgdWRldiIKCkRFUEVO
RD0iIgoKUz0iJHtXT1JLRElSfS8ke1BOfS0ke1BWfSIKCnNyY191bnBhY2soKSB7Cgl1bnBhY2sg
ImZ1c2Qta29yLSR7UFZ9LTExLnRhci5neiIKCWNkIGZ1c2Qta29yLSR7UFZ9LTExCn0KCnNyY19j
b21waWxlKCkgewoJIyBUT0RPOiBGaXggdGhlIGFyY2ggZGV0ZWN0aW9uIHByb2JsZW0gd2hpY2gg
bWFrZXMga29tcGlsYXRpb24gZmFpbAoJY2QgJHtXT1JLRElSfS9mdXNkLWtvci0xLjEwLTExCglB
UkNIPWkzODYgbWFrZQp9CgpzcmNfaW5zdGFsbCAoKSB7CgljZCAke1dPUktESVJ9L2Z1c2Qta29y
LTEuMTAtMTEvb2JqKgoJZG9saWIuYSBsaWJmdXNkLmEKCWNkIC4uL2luY2x1ZGUKCWluc2ludG8g
L3Vzci9pbmNsdWRlCglkb2lucyAqLmgKCWNkIC4uL2tmdXNkCglpbnNpbnRvIC9saWIvbW9kdWxl
cy9gdW5hbWUgLXJgL21pc2MKCWRvaW5zIGtmdXNkLmtvCgljZCAuLgoJZG9kb2MgQ2hhbmdlTG9n
IFJFQURNRSAKCWlmIHVzZSBkb2MgOyB0aGVuCgkJY2QgZG9jCgkJZG9kb2MgZnVzZC5wZGYgZnVz
ZC50ZXgKCWZpCgoJaWYgdXNlIHVkZXY7IHRoZW4KCQkoIGVjaG8gIiMgZnVzZCBkZXZpY2VzIgoJ
CWVjaG8gIktFUk5FTD1cImNvbnRyb2xcIiwgTkFNRT1cImZ1c2QvJWtcIiwgR1JPVVA9XCJ3aGVl
bFwiLCBNT0RFPVwiMDY2MFwiIgoJCWVjaG8gIktFUk5FTD1cInN0YXR1c1wiLCBOQU1FPVwiZnVz
ZC8la1wiLCBHUk9VUD1cIndoZWVsXCIsIE1PREU9XCIwNjYwXCIiICkgPiA0OS1mdXNkLnJ1bGVz
CgkJaW5zaW50byAvZXRjL3VkZXYvcnVsZXMuZAoJCWRvaW5zIDQ5LWZ1c2QucnVsZXMKCWZpCgko
IGVjaG8gIiMgZnVzZCBhbGlhc2VzIgoJZWNobyAiYWxpYXMgL2Rldi9mdXNkIGtmdXNkIgoJZWNo
byAiYWxpYXMgL2Rldi9mdXNkL2NvbnRyb2wga2Z1c2QiCgllY2hvICJhbGlhcyAvZGV2L2Z1c2Qv
c3RhdHVzIGtmdXNkIiApID4gZnVzZC5tb2R1bGVzCglpbnNpbnRvIC9ldGMvbW9kdWxlcy5kCglu
ZXdpbnMgZnVzZC5tb2R1bGVzIGZ1c2QKfQoK
</data>        

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113027</attachid>
            <date>2007-03-11 22:51 0000</date>
            <desc>kfusd compile cleanly against gentoo-sources-2.6.20-r2</desc>
            <filename>kfusd-udev.patch</filename>
            <type>text/plain</type>
            <data encoding="base64">LS0tIGZ1c2Qta29yLTEuMTAtMTEva2Z1c2Qva2Z1c2QuYwkyMDA2LTA0LTEwIDAwOjI4OjU1LjAw
MDAwMDAwMCArMDEwMAorKysgZnVzZC1rb3ItMS4xMC0xMS9rZnVzZC9rZnVzZC5jLm5ldwkyMDA3
LTAzLTExIDIyOjI0OjU1LjAwMDAwMDAwMCArMDAwMApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKgot
ICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENh
bGlmb3JuaWEuICBBbGwgCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIFJlZ2VudHMgb2YgdGhl
IFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gQWxsCiAgKiByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CkBAIC04LDE2ICs4LDE2IEBACiAgKiBhcmUgbWV0OgogICoKICAqIC0gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgogICoKICAqIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUg
VW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogICBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgZnJvbSB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkCisgKiBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCiAgKgogICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwogICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCiAg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQQotICogUEFSVElDVUxBUiAgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIFJFR0VOVFMgT1IKKyAqIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IKICAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAogICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAogICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCkBAIC0yNywxNCArMjcsMTQgQEAKICAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCiAgKgogICovCi0gCisKIAogLyoKICAqIEZVU0Q6IHRoZSBGcmFtZXdvcmsgZm9yIFVzZXIt
U3BhY2UgRGV2aWNlcwogICoKICAqIExpbnV4IEtlcm5lbCBNb2R1bGUKICAqCi0gKiBKZXJlbXkg
RWxzb24gIDxqZWxzb25AY2lyY2xlbXVkLm9yZz4KKyAqIEplcmVteSBFbHNvbiA8amVsc29uQGNp
cmNsZW11ZC5vcmc+CiAgKiBDb3B5cmlnaHQgKGMpIDIwMDEsIFNlbnNvcmlhIENvcnBvcmF0aW9u
CiAgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwMywgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBv
ZiBDYWxpZm9ybmlhCiAgKgpAQCAtNDMsNyArNDMsNyBAQAogCiAvKgogICogTm90ZSBvbiBkZWJ1
Z2dpbmcgbWVzc2FnZXM6IFVuZXhwZWN0ZWQgZXJyb3JzIChpLmUuLCBpbmRpY2F0b3JzIG9mCi0g
KiBidWdzIGluIHRoaXMga2VybmVsIG1vZHVsZSkgc2hvdWxkIGFsd2F5cyBjb250YWluICchJy4g
IEV4cGVjdGVkCisgKiBidWdzIGluIHRoaXMga2VybmVsIG1vZHVsZSkgc2hvdWxkIGFsd2F5cyBj
b250YWluICchJy4gRXhwZWN0ZWQKICAqIGNvbmRpdGlvbnMsIGV2ZW4gaWYgZXhjZXB0aW9uYWwg
KGUuZy4sIHRoZSBkZXZpY2UtZHJpdmVyLXByb3ZpZGVyCiAgKiBkaXNhcHBlYXJzIHdoaWxlIGEg
ZmlsZSBpcyB3YWl0aW5nIGZvciBhIHJldHVybiBmcm9tIGEgc3lzdGVtIGNhbGwpCiAgKiBtdXN0
IE5PVCBjb250YWluICchJy4KQEAgLTU3LDcgKzU3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R2
ZXJzaW9ucy5oPgogI2VuZGlmCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKy8vI2luY2x1
ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogI2luY2x1ZGUg
PGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtNjcsNyArNjcs
NyBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2lu
Y2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZmc19mc19rZXJuZWwu
aD4KKy8vI2luY2x1ZGUgPGxpbnV4L2RldmZzX2ZzX2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4
L3BvbGwuaD4KICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvbWFq
b3IuaD4KQEAgLTg3LDE3ICs4NywxNyBAQAogLyogRGVmaW5lIHRoaXMgaWYgeW91IHdhbnQgdG8g
ZW1pdCBkZWJ1ZyBtZXNzYWdlcyAoYWRkcyB+OEspICovCiAjZGVmaW5lIENPTkZJR19GVVNEX0RF
QlVHCiAKLS8qIERlZmF1bHQgZGVidWcgbGV2ZWwgZm9yIEZVU0QgbWVzc2FnZXMuICBIYXMgbm8g
ZWZmZWN0IHVubGVzcworLyogRGVmYXVsdCBkZWJ1ZyBsZXZlbCBmb3IgRlVTRCBtZXNzYWdlcy4g
SGFzIG5vIGVmZmVjdCB1bmxlc3MKICAqIENPTkZJR19GVVNEX0RFQlVHIGlzIGRlZmluZWQuICov
CiAjaWZuZGVmIENPTkZJR19GVVNEX0RFQlVHTEVWRUwKLSNkZWZpbmUgQ09ORklHX0ZVU0RfREVC
VUdMRVZFTCAyCisjZGVmaW5lIENPTkZJR19GVVNEX0RFQlVHTEVWRUwgMTAKICNlbmRpZgogCiAv
KiBEZWZpbmUgdGhpcyB0byBjaGVjayBmb3IgbWVtb3J5IGxlYWtzICovCiAvKiNkZWZpbmUgQ09O
RklHX0ZVU0RfTUVNREVCVUcqLwogCiAvKiBEZWZpbmUgdGhpcyB0byB1c2UgdGhlIGZhc3RlciB3
YWtlX3VwX2ludGVycnVwdGlibGVfc3luYyBpbnN0ZWFkIG9mCi0gKiB0aGUgbm9ybWFsIHdha2Vf
dXBfaW50ZXJydXB0aWJsZS4gIE5vdGU6IHlvdSBjYW4ndCBkbyB0aGlzIHVubGVzcworICogdGhl
IG5vcm1hbCB3YWtlX3VwX2ludGVycnVwdGlibGUuIE5vdGU6IHlvdSBjYW4ndCBkbyB0aGlzIHVu
bGVzcwogICogeW91J3JlIGJ1bGRpbmcgZnVzZCBhcyBwYXJ0IG9mIHRoZSBrZXJuZWwgKG5vdCBh
IG1vZHVsZSk7IG9yIHlvdSd2ZQogICogcGF0Y2hlZCBrZXJuZWwva3N5bXMucyB0byBhZGQgX193
YWtlX3VwX3N5bmMgaW4gYWRkaXRpb24gdG8KICAqIF9fd2FrZV91cC4gKi8KQEAgLTEwNSw3ICsx
MDUsNyBAQAogCiAjaWYgTElOVVhfVkVSU0lPTl9DT0RFIDw9IEtFUk5FTF9WRVJTSU9OKDIsNCw5
KQogIyBkZWZpbmUgdnNucHJpbnRmKHN0ciwgc2l6ZSwgZm9ybWF0LCBhcCkgdnNwcmludGYoc3Ry
LCBmb3JtYXQsIGFwKQotIyBkZWZpbmUgIHNucHJpbnRmKHN0ciwgbGVuLCBhcmdzLi4uKSAgICAg
IHNwcmludGYoc3RyLCBhcmdzKQorIyBkZWZpbmUgc25wcmludGYoc3RyLCBsZW4sIGFyZ3MuLi4p
IHNwcmludGYoc3RyLCBhcmdzKQogI2VuZGlmCiAKICNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBL
RVJORUxfVkVSU0lPTigyLDYsMTMpCkBAIC0xNzgsMzUgKzE3OCwzNSBAQAogI2lmZGVmIENPTkZJ
R19GVVNEX0RFQlVHCiAKIFNUQVRJQyBpbnQgZnVzZF9kZWJ1Z19sZXZlbCA9IENPTkZJR19GVVNE
X0RFQlVHTEVWRUw7Ci1NT0RVTEVfUEFSTShmdXNkX2RlYnVnX2xldmVsLCAiaSIpOworTU9EVUxF
X1BBUk1fREVTQyhmdXNkX2RlYnVnX2xldmVsLCAiaSIpOwogCiAjZGVmaW5lIEJVRlNJWkUgMTAw
MCAvKiBrZXJuZWwncyBrbWFsbG9jIHBvb2wgaGFzIGEgMTAxMi1zaXplZCBidWNrZXQgKi8KIAog
U1RBVElDIHZvaWQgcmRlYnVnX3JlYWwoY2hhciAqZm10LCAuLi4pCiB7Ci0gIHZhX2xpc3QgYXA7
Ci0gIGludCBsZW47Ci0gIGNoYXIgKm1lc3NhZ2U7Ci0KLSAgLyogSSdtIGttYWxsb2Npbmcgc2lu
Y2UgeW91IGRvbid0IHJlYWxseSB3YW50IDFrIG9uIHRoZSBzdGFjay4gSSd2ZQotICAgKiBoYWQg
c3RhY2sgb3ZlcmZsb3cgcHJvYmxlbXMgYmVmb3JlOyB0aGUga2VybmVsIHN0YWNrIGlzIHF1aXRl
Ci0gICAqIHNtYWxsLi4uICovCi0gIGlmICgobWVzc2FnZSA9IEtNQUxMT0MoQlVGU0laRSwgR0ZQ
X0tFUk5FTCkpID09IE5VTEwpCi0gICAgcmV0dXJuOwotCi0gIHZhX3N0YXJ0KGFwLCBmbXQpOwot
ICBsZW4gPSB2c25wcmludGYobWVzc2FnZSwgQlVGU0laRS0xLCBmbXQsIGFwKTsKLSAgdmFfZW5k
KGFwKTsKLQotICBpZiAobGVuID49IEJVRlNJWkUpIHsKLSAgICBwcmludGsoIldBUk5JTkc6IFBP
U1NJQkxFIEtFUk5FTCBDT1JSVVBUSU9OOyBNRVNTQUdFIFRPTyBMT05HXG4iKTsKLSAgfSBlbHNl
IHsKLSAgICBwcmludGsoImZ1c2Q6ICUuOTc1c1xuIiwgbWVzc2FnZSk7IC8qIG5vdGUgbXNncyBh
cmUgdHJ1bmNhdGVkIGF0Ci0gICAgICAgICAgICAgICAgICAgICAgKiB+MTAwMCBjaGFycyB0byBm
aXQgaW5zaWRlIHRoZSAxMDI0IHByaW50awotICAgICAgICAgICAgICAgICAgICAgICogbGltaXQg
aW1wb3NlZCBieSB0aGUga2VybmVsICovCi0gIH0KKyB2YV9saXN0IGFwOworIGludCBsZW47Cisg
Y2hhciAqbWVzc2FnZTsKKworIC8qIEknbSBrbWFsbG9jaW5nIHNpbmNlIHlvdSBkb24ndCByZWFs
bHkgd2FudCAxayBvbiB0aGUgc3RhY2suIEkndmUKKyAqIGhhZCBzdGFjayBvdmVyZmxvdyBwcm9i
bGVtcyBiZWZvcmU7IHRoZSBrZXJuZWwgc3RhY2sgaXMgcXVpdGUKKyAqIHNtYWxsLi4uICovCisg
aWYgKChtZXNzYWdlID0gS01BTExPQyhCVUZTSVpFLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkKKyBy
ZXR1cm47CisKKyB2YV9zdGFydChhcCwgZm10KTsKKyBsZW4gPSB2c25wcmludGYobWVzc2FnZSwg
QlVGU0laRS0xLCBmbXQsIGFwKTsKKyB2YV9lbmQoYXApOworCisgaWYgKGxlbiA+PSBCVUZTSVpF
KSB7CisgcHJpbnRrKCJXQVJOSU5HOiBQT1NTSUJMRSBLRVJORUwgQ09SUlVQVElPTjsgTUVTU0FH
RSBUT08gTE9OR1xuIik7CisgfSBlbHNlIHsKKyBwcmludGsoImZ1c2Q6ICUuOTc1c1xuIiwgbWVz
c2FnZSk7IC8qIG5vdGUgbXNncyBhcmUgdHJ1bmNhdGVkIGF0CisgKiB+MTAwMCBjaGFycyB0byBm
aXQgaW5zaWRlIHRoZSAxMDI0IHByaW50aworICogbGltaXQgaW1wb3NlZCBieSB0aGUga2VybmVs
ICovCisgfQogCi0gIEtGUkVFKG1lc3NhZ2UpOworIEtGUkVFKG1lc3NhZ2UpOwogfQogCiAjZW5k
aWYgLyogQ09ORklHX0ZVU0RfREVCVUcgKi8KQEAgLTIyMCwxMTAgKzIyMCwxMTAgQEAKIERFQ0xB
UkVfTVVURVgoZnVzZF9tZW1kZWJ1Z19zZW0pOwogCiB0eXBlZGVmIHN0cnVjdCB7Ci0gIHZvaWQg
KnB0cjsKLSAgaW50IGxpbmU7Ci0gIGludCBzaXplOworIHZvaWQgKnB0cjsKKyBpbnQgbGluZTsK
KyBpbnQgc2l6ZTsKIH0gbWVtX2RlYnVnX3Q7CiAKIG1lbV9kZWJ1Z190ICptZW1fZGVidWc7CiAK
IFNUQVRJQyBpbnQgZnVzZF9tZW1faW5pdCh2b2lkKQogewotICBpbnQgaTsKKyBpbnQgaTsKIAot
ICBtZW1fZGVidWcgPSBrbWFsbG9jKHNpemVvZihtZW1fZGVidWdfdCkgKiBNQVhfTUVNX0RFQlVH
LCBHRlBfS0VSTkVMKTsKKyBtZW1fZGVidWcgPSBrbWFsbG9jKHNpemVvZihtZW1fZGVidWdfdCkg
KiBNQVhfTUVNX0RFQlVHLCBHRlBfS0VSTkVMKTsKIAotICBpZiAobWVtX2RlYnVnID09IE5VTEwp
IHsKLSAgICBSREVCVUcoMiwgImFyZ2ggLSBtZW1kZWJ1ZyBtYWxsb2MgZmFpbGVkISIpOwotICAg
IHJldHVybiAtRU5PTUVNOwotICB9CisgaWYgKG1lbV9kZWJ1ZyA9PSBOVUxMKSB7CisgUkRFQlVH
KDIsICJhcmdoIC0gbWVtZGVidWcgbWFsbG9jIGZhaWxlZCEiKTsKKyByZXR1cm4gLUVOT01FTTsK
KyB9CiAKLSAgLyogaW5pdGlhbGl6ZSAqLwotICBmb3IgKGkgPSAwOyBpIDwgTUFYX01FTV9ERUJV
RzsgaSsrKQotICAgIG1lbV9kZWJ1Z1tpXS5wdHIgPSBOVUxMOworIC8qIGluaXRpYWxpemUgKi8K
KyBmb3IgKGkgPSAwOyBpIDwgTUFYX01FTV9ERUJVRzsgaSsrKQorIG1lbV9kZWJ1Z1tpXS5wdHIg
PSBOVUxMOwogCi0gIFJERUJVRygyLCAiRlVTRCBtZW1vcnkgZGVidWdnZXIgYWN0aXZhdGVkIik7
Ci0gIHJldHVybiAwOworIFJERUJVRygyLCAiRlVTRCBtZW1vcnkgZGVidWdnZXIgYWN0aXZhdGVk
Iik7CisgcmV0dXJuIDA7CiB9CiAKIFNUQVRJQyB2b2lkIGZ1c2RfbWVtX2NsZWFudXAodm9pZCkK
IHsKLSAgaW50IGk7Ci0gIGludCBjb3VudD0wOwotICBmb3IgKGkgPSAwOyBpIDwgTUFYX01FTV9E
RUJVRzsgaSsrKQotICAgIGlmIChtZW1fZGVidWdbaV0ucHRyICE9IE5VTEwpIHsKLSAgICAgIFJE
RUJVRygwLCAibWVtZGVidWc6IGZhaWxlZCB0byBmcmVlIG1lbW9yeSBhbGxvY2F0ZWQgYXQgbGlu
ZSAlZCAoJWQgYikiLAotCSAgICAgbWVtX2RlYnVnW2ldLmxpbmUsIG1lbV9kZWJ1Z1tpXS5zaXpl
KTsKLSAgICAgIGNvdW50Kys7Ci0gICAgfQotICBpZiAoIWNvdW50KQotICAgIFJERUJVRygyLCAi
Y29uZ3JhdHVsYXRpb25zIC0gbWVtb3J5IGRlYnVnZ2VyIGlzIGhhcHB5ISIpOwotICBrZnJlZSht
ZW1fZGVidWcpOworIGludCBpOworIGludCBjb3VudD0wOworIGZvciAoaSA9IDA7IGkgPCBNQVhf
TUVNX0RFQlVHOyBpKyspCisgaWYgKG1lbV9kZWJ1Z1tpXS5wdHIgIT0gTlVMTCkgeworIFJERUJV
RygwLCAibWVtZGVidWc6IGZhaWxlZCB0byBmcmVlIG1lbW9yeSBhbGxvY2F0ZWQgYXQgbGluZSAl
ZCAoJWQgYikiLAorIG1lbV9kZWJ1Z1tpXS5saW5lLCBtZW1fZGVidWdbaV0uc2l6ZSk7CisgY291
bnQrKzsKKyB9CisgaWYgKCFjb3VudCkKKyBSREVCVUcoMiwgImNvbmdyYXR1bGF0aW9ucyAtIG1l
bW9yeSBkZWJ1Z2dlciBpcyBoYXBweSEiKTsKKyBrZnJlZShtZW1fZGVidWcpOwogfQogCiBTVEFU
SUMgdm9pZCBmdXNkX21lbV9hZGQodm9pZCAqcHRyLCBpbnQgbGluZSwgaW50IHNpemUpCiB7Ci0g
IGludCBpOworIGludCBpOwogCi0gIGlmIChwdHI9PU5VTEwpCi0gICAgcmV0dXJuOworIGlmIChw
dHI9PU5VTEwpCisgcmV0dXJuOwogCi0gIGZvciAoaSA9IDA7IGkgPCBNQVhfTUVNX0RFQlVHOyBp
KyspIHsKLSAgICBpZiAobWVtX2RlYnVnW2ldLnB0ciA9PSBOVUxMKSB7Ci0gICAgICBtZW1fZGVi
dWdbaV0ucHRyID0gcHRyOwotICAgICAgbWVtX2RlYnVnW2ldLmxpbmUgPSBsaW5lOwotICAgICAg
bWVtX2RlYnVnW2ldLnNpemUgPSBzaXplOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgfQotICBS
REVCVUcoMSwgIldBUk5JTkcgLSBtZW1kZWJ1ZyBvdXQgb2Ygc3BhY2UhISEhIik7CisgZm9yIChp
ID0gMDsgaSA8IE1BWF9NRU1fREVCVUc7IGkrKykgeworIGlmIChtZW1fZGVidWdbaV0ucHRyID09
IE5VTEwpIHsKKyBtZW1fZGVidWdbaV0ucHRyID0gcHRyOworIG1lbV9kZWJ1Z1tpXS5saW5lID0g
bGluZTsKKyBtZW1fZGVidWdbaV0uc2l6ZSA9IHNpemU7CisgcmV0dXJuOworIH0KKyB9CisgUkRF
QlVHKDEsICJXQVJOSU5HIC0gbWVtZGVidWcgb3V0IG9mIHNwYWNlISEhISIpOwogfQogCiBTVEFU
SUMgdm9pZCBmdXNkX21lbV9kZWwodm9pZCAqcHRyKQogewotICBpbnQgaTsKLSAgZm9yIChpID0g
MDsgaSA8IE1BWF9NRU1fREVCVUc7IGkrKykgewotICAgIGlmIChtZW1fZGVidWdbaV0ucHRyID09
IHB0cikgewotICAgICAgbWVtX2RlYnVnW2ldLnB0ciA9IE5VTEw7Ci0gICAgICByZXR1cm47Ci0g
ICAgfQotICB9Ci0gIFJERUJVRygyLCAiV0FSTklORyAtIG1lbWRlYnVnIGlzIGNvbmZ1c2VkISEh
ISIpOworIGludCBpOworIGZvciAoaSA9IDA7IGkgPCBNQVhfTUVNX0RFQlVHOyBpKyspIHsKKyBp
ZiAobWVtX2RlYnVnW2ldLnB0ciA9PSBwdHIpIHsKKyBtZW1fZGVidWdbaV0ucHRyID0gTlVMTDsK
KyByZXR1cm47CisgfQorIH0KKyBSREVCVUcoMiwgIldBUk5JTkcgLSBtZW1kZWJ1ZyBpcyBjb25m
dXNlZCEhISEiKTsKIH0KIAogCiBTVEFUSUMgdm9pZCAqZnVzZF9rbWFsbG9jKHNpemVfdCBzaXpl
LCBpbnQgdHlwZSwgaW50IGxpbmUpCiB7Ci0gIHZvaWQgKnB0ciA9IGttYWxsb2Moc2l6ZSwgdHlw
ZSk7Ci0gIGRvd24oJmZ1c2RfbWVtZGVidWdfc2VtKTsKLSAgZnVzZF9tZW1fYWRkKHB0ciwgbGlu
ZSwgc2l6ZSk7Ci0gIHVwKCZmdXNkX21lbWRlYnVnX3NlbSk7Ci0gIHJldHVybiBwdHI7Cisgdm9p
ZCAqcHRyID0ga21hbGxvYyhzaXplLCB0eXBlKTsKKyBkb3duKCZmdXNkX21lbWRlYnVnX3NlbSk7
CisgZnVzZF9tZW1fYWRkKHB0ciwgbGluZSwgc2l6ZSk7CisgdXAoJmZ1c2RfbWVtZGVidWdfc2Vt
KTsKKyByZXR1cm4gcHRyOwogfQogCiBTVEFUSUMgdm9pZCBmdXNkX2tmcmVlKHZvaWQgKnB0cikK
IHsKLSAgZG93bigmZnVzZF9tZW1kZWJ1Z19zZW0pOwotICBmdXNkX21lbV9kZWwocHRyKTsKLSAg
a2ZyZWUocHRyKTsKLSAgdXAoJmZ1c2RfbWVtZGVidWdfc2VtKTsKKyBkb3duKCZmdXNkX21lbWRl
YnVnX3NlbSk7CisgZnVzZF9tZW1fZGVsKHB0cik7Cisga2ZyZWUocHRyKTsKKyB1cCgmZnVzZF9t
ZW1kZWJ1Z19zZW0pOwogfQogCiBTVEFUSUMgdm9pZCAqZnVzZF92bWFsbG9jKHNpemVfdCBzaXpl
LCBpbnQgbGluZSkKIHsKLSAgdm9pZCAqcHRyID0gdm1hbGxvYyhzaXplKTsKLSAgZG93bigmZnVz
ZF9tZW1kZWJ1Z19zZW0pOwotICBmdXNkX21lbV9hZGQocHRyLCBsaW5lLCBzaXplKTsKLSAgdXAo
JmZ1c2RfbWVtZGVidWdfc2VtKTsKLSAgcmV0dXJuIHB0cjsKKyB2b2lkICpwdHIgPSB2bWFsbG9j
KHNpemUpOworIGRvd24oJmZ1c2RfbWVtZGVidWdfc2VtKTsKKyBmdXNkX21lbV9hZGQocHRyLCBs
aW5lLCBzaXplKTsKKyB1cCgmZnVzZF9tZW1kZWJ1Z19zZW0pOworIHJldHVybiBwdHI7CiB9CiAK
IFNUQVRJQyB2b2lkIGZ1c2RfdmZyZWUodm9pZCAqcHRyKQogewotICBkb3duKCZmdXNkX21lbWRl
YnVnX3NlbSk7Ci0gIGZ1c2RfbWVtX2RlbChwdHIpOwotICB2ZnJlZShwdHIpOwotICB1cCgmZnVz
ZF9tZW1kZWJ1Z19zZW0pOworIGRvd24oJmZ1c2RfbWVtZGVidWdfc2VtKTsKKyBmdXNkX21lbV9k
ZWwocHRyKTsKKyB2ZnJlZShwdHIpOworIHVwKCZmdXNkX21lbWRlYnVnX3NlbSk7CiB9CiAKICNl
bmRpZiAvKiBDT05GSUdfRlVTRF9NRU1ERUJVRyAqLwpAQCAtMzM5LDEyICszMzksMTIgQEAKIAog
U1RBVElDIGlubGluZSB2b2lkIGluaXRfZnVzZF9tc2coZnVzZF9tc2dfdCAqZnVzZF9tc2cpCiB7
Ci0gIGlmIChmdXNkX21zZyA9PSBOVUxMKQotICAgIHJldHVybjsKKyBpZiAoZnVzZF9tc2cgPT0g
TlVMTCkKKyByZXR1cm47CiAKLSAgbWVtc2V0KGZ1c2RfbXNnLCAwLCBzaXplb2YoZnVzZF9tc2df
dCkpOwotICBmdXNkX21zZy0+bWFnaWMgPSBGVVNEX01TR19NQUdJQzsKLSAgZnVzZF9tc2ctPmNt
ZCA9IEZVU0RfRk9QU19DQUxMOyAvKiB0eXBpY2FsLCBidXQgY2FuIGJlIG92ZXJ3cml0dGVuICov
CisgbWVtc2V0KGZ1c2RfbXNnLCAwLCBzaXplb2YoZnVzZF9tc2dfdCkpOworIGZ1c2RfbXNnLT5t
YWdpYyA9IEZVU0RfTVNHX01BR0lDOworIGZ1c2RfbXNnLT5jbWQgPSBGVVNEX0ZPUFNfQ0FMTDsg
LyogdHlwaWNhbCwgYnV0IGNhbiBiZSBvdmVyd3JpdHRlbiAqLwogfQogCiAvKgpAQCAtMzUyLDE1
MiArMzUyLDE1MiBAQAogICovCiBTVEFUSUMgaW5saW5lIHZvaWQgZnJlZV9mdXNkX21zZyhmdXNk
X21zZ190ICoqZnVzZF9tc2cpCiB7Ci0gIGlmIChmdXNkX21zZyA9PSBOVUxMIHx8ICpmdXNkX21z
ZyA9PSBOVUxMKQotICAgIHJldHVybjsKKyBpZiAoZnVzZF9tc2cgPT0gTlVMTCB8fCAqZnVzZF9t
c2cgPT0gTlVMTCkKKyByZXR1cm47CiAKLSAgaWYgKCgqZnVzZF9tc2cpLT5kYXRhICE9IE5VTEwp
IHsKLSAgICAgIFZGUkVFKCgqZnVzZF9tc2cpLT5kYXRhKTsKLSAgICAgICgqZnVzZF9tc2cpLT5k
YXRhID0gTlVMTDsKLSAgICB9Ci0gIEtGUkVFKCpmdXNkX21zZyk7Ci0gICpmdXNkX21zZyA9IE5V
TEw7CisgaWYgKCgqZnVzZF9tc2cpLT5kYXRhICE9IE5VTEwpIHsKKyBWRlJFRSgoKmZ1c2RfbXNn
KS0+ZGF0YSk7CisgKCpmdXNkX21zZyktPmRhdGEgPSBOVUxMOworIH0KKyBLRlJFRSgqZnVzZF9t
c2cpOworICpmdXNkX21zZyA9IE5VTEw7CiB9CiAKIAogLyogYWRqdXN0IHRoZSBzaXplIG9mIHRo
ZSAnZmlsZXMnIGFycmF5IGF0dGFjaGVkIHRvIHRoZSBkZXZpY2UgdG8KLSAqIGJldHRlciBtYXRj
aCB0aGUgbnVtYmVyIG9mIGZpbGVzLiAgSW4gYWxsIGNhc2VzLCBzaXplIG11c3QgYmUgYXQKLSAq
IGxlYXN0IE1JTl9BUlJBWV9TSVpFLiAgU3ViamVjdCB0byB0aGF0IGNvbnN0cmFpbnQ6IGlmCisg
KiBiZXR0ZXIgbWF0Y2ggdGhlIG51bWJlciBvZiBmaWxlcy4gSW4gYWxsIGNhc2VzLCBzaXplIG11
c3QgYmUgYXQKKyAqIGxlYXN0IE1JTl9BUlJBWV9TSVpFLiBTdWJqZWN0IHRvIHRoYXQgY29uc3Ry
YWludDogaWYKICAqIG51bV9maWxlcz09YXJyYXlfc2l6ZSwgdGhlIHNpemUgaXMgZG91YmxlZDsg
aWYKLSAqIG51bV9maWxlczxhcnJheV9zaXplLzQsIHRoZSBzaXplIGlzIGhhbHZlZC4gIEFycmF5
IGlzIGtlcHQgYXMgaXMgaWYKLSAqIHRoZSBtYWxsb2MgZmFpbHMuICBSZXR1cm5zIGEgcG9pbnRl
ciB0byB0aGUgbmV3IGZpbGUgc3RydWN0IG9yIE5VTEwKKyAqIG51bV9maWxlczxhcnJheV9zaXpl
LzQsIHRoZSBzaXplIGlzIGhhbHZlZC4gQXJyYXkgaXMga2VwdCBhcyBpcyBpZgorICogdGhlIG1h
bGxvYyBmYWlscy4gUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIG5ldyBmaWxlIHN0cnVjdCBvciBO
VUxMCiAgKiBpZiB0aGVyZSBpc24ndCBvbmUuICovCiBTVEFUSUMgZnVzZF9maWxlX3QgKipmdXNk
X2Rldl9hZGpzaXplKGZ1c2RfZGV2X3QgKmZ1c2RfZGV2KQogewotICBmdXNkX2ZpbGVfdCAqKm9s
ZF9hcnJheTsKLSAgaW50IG9sZF9zaXplOworIGZ1c2RfZmlsZV90ICoqb2xkX2FycmF5OworIGlu
dCBvbGRfc2l6ZTsKIAotICBvbGRfYXJyYXkgPSBmdXNkX2Rldi0+ZmlsZXM7Ci0gIG9sZF9zaXpl
ID0gZnVzZF9kZXYtPmFycmF5X3NpemU7Cisgb2xkX2FycmF5ID0gZnVzZF9kZXYtPmZpbGVzOwor
IG9sZF9zaXplID0gZnVzZF9kZXYtPmFycmF5X3NpemU7CiAKLSAgLyogY29tcHV0ZSB0aGUgbmV3
IHNpemUgb2YgdGhlIGFycmF5ICovCi0gIGlmIChmdXNkX2Rldi0+YXJyYXlfc2l6ZSA+IDQqZnVz
ZF9kZXYtPm51bV9maWxlcykKLSAgICBmdXNkX2Rldi0+YXJyYXlfc2l6ZSAvPSAyOwotICBlbHNl
IGlmIChmdXNkX2Rldi0+YXJyYXlfc2l6ZSA9PSBmdXNkX2Rldi0+bnVtX2ZpbGVzKQotICAgIGZ1
c2RfZGV2LT5hcnJheV9zaXplICo9IDI7Ci0KLSAgLyogcmVzcGVjdCB0aGUgbWluaW11bXMgYW5k
IG1heGltdW1zIChwb2xpY3kpICovCi0gIGlmIChmdXNkX2Rldi0+YXJyYXlfc2l6ZSA8IE1JTl9G
SUxFQVJSQVlfU0laRSkKLSAgICBmdXNkX2Rldi0+YXJyYXlfc2l6ZSA9IE1JTl9GSUxFQVJSQVlf
U0laRTsKLSAgaWYgKGZ1c2RfZGV2LT5hcnJheV9zaXplID4gTUFYX0ZJTEVBUlJBWV9TSVpFKQot
ICAgIGZ1c2RfZGV2LT5hcnJheV9zaXplID0gTUFYX0ZJTEVBUlJBWV9TSVpFOwotCi0gIC8qIG1h
a2Ugc3VyZSBpdCdzIHNhbmUgKi8KLSAgaWYgKGZ1c2RfZGV2LT5hcnJheV9zaXplIDwgZnVzZF9k
ZXYtPm51bV9maWxlcykgewotICAgIFJERUJVRygwLCAiZnVzZF9kZXZfYWRqc2l6ZSBpcyByb3lh
bGx5IHNjcmV3ZWQgdXAhISEhISIpOwotICAgIHJldHVybiBmdXNkX2Rldi0+ZmlsZXM7Ci0gIH0K
LQotICAvKiBjcmVhdGUgYSBuZXcgYXJyYXkuICBpZiBzdWNjZXNzZnVsLCBjb3B5IHRoZSBjb250
ZW50cyBvZiB0aGUgb2xkCi0gICAqIG9uZS4gIGlmIG5vdCwgcmV2ZXJ0IGJhY2sgdG8gdGhlIG9s
ZC4gKi8KLSAgZnVzZF9kZXYtPmZpbGVzID0gS01BTExPQyhmdXNkX2Rldi0+YXJyYXlfc2l6ZSAq
IHNpemVvZihmdXNkX2ZpbGVfdCAqKSwKLQkJCSAgICBHRlBfS0VSTkVMKTsKLSAgaWYgKGZ1c2Rf
ZGV2LT5maWxlcyA9PSBOVUxMKSB7Ci0gICAgUkRFQlVHKDEsICJtYWxsb2MgZmFpbGVkIGluIGZ1
c2RfZGV2X2FkanNpemUhIik7Ci0gICAgZnVzZF9kZXYtPmZpbGVzID0gb2xkX2FycmF5OwotICAg
IGZ1c2RfZGV2LT5hcnJheV9zaXplID0gb2xkX3NpemU7Ci0gIH0gZWxzZSB7Ci0gICAgUkRFQlVH
KDEwLCAiL2Rldi8lcyBub3cgaGFzIHNwYWNlIGZvciAlZCBmaWxlcyAoaGFkICVkKSIsIE5BTUUo
ZnVzZF9kZXYpLAotCSAgIGZ1c2RfZGV2LT5hcnJheV9zaXplLCBvbGRfc2l6ZSk7Ci0gICAgbWVt
c2V0KGZ1c2RfZGV2LT5maWxlcywgMCwgZnVzZF9kZXYtPmFycmF5X3NpemUgKiBzaXplb2YoZnVz
ZF9maWxlX3QgKikpOwotICAgIG1lbWNweShmdXNkX2Rldi0+ZmlsZXMsIG9sZF9hcnJheSwKLQkg
ICBmdXNkX2Rldi0+bnVtX2ZpbGVzICogc2l6ZW9mKGZ1c2RfZmlsZV90ICopKTsKLSAgICBLRlJF
RShvbGRfYXJyYXkpOwotICB9CisgLyogY29tcHV0ZSB0aGUgbmV3IHNpemUgb2YgdGhlIGFycmF5
ICovCisgaWYgKGZ1c2RfZGV2LT5hcnJheV9zaXplID4gNCpmdXNkX2Rldi0+bnVtX2ZpbGVzKQor
IGZ1c2RfZGV2LT5hcnJheV9zaXplIC89IDI7CisgZWxzZSBpZiAoZnVzZF9kZXYtPmFycmF5X3Np
emUgPT0gZnVzZF9kZXYtPm51bV9maWxlcykKKyBmdXNkX2Rldi0+YXJyYXlfc2l6ZSAqPSAyOwor
CisgLyogcmVzcGVjdCB0aGUgbWluaW11bXMgYW5kIG1heGltdW1zIChwb2xpY3kpICovCisgaWYg
KGZ1c2RfZGV2LT5hcnJheV9zaXplIDwgTUlOX0ZJTEVBUlJBWV9TSVpFKQorIGZ1c2RfZGV2LT5h
cnJheV9zaXplID0gTUlOX0ZJTEVBUlJBWV9TSVpFOworIGlmIChmdXNkX2Rldi0+YXJyYXlfc2l6
ZSA+IE1BWF9GSUxFQVJSQVlfU0laRSkKKyBmdXNkX2Rldi0+YXJyYXlfc2l6ZSA9IE1BWF9GSUxF
QVJSQVlfU0laRTsKKworIC8qIG1ha2Ugc3VyZSBpdCdzIHNhbmUgKi8KKyBpZiAoZnVzZF9kZXYt
PmFycmF5X3NpemUgPCBmdXNkX2Rldi0+bnVtX2ZpbGVzKSB7CisgUkRFQlVHKDAsICJmdXNkX2Rl
dl9hZGpzaXplIGlzIHJveWFsbHkgc2NyZXdlZCB1cCEhISEhIik7CisgcmV0dXJuIGZ1c2RfZGV2
LT5maWxlczsKKyB9CisKKyAvKiBjcmVhdGUgYSBuZXcgYXJyYXkuIGlmIHN1Y2Nlc3NmdWwsIGNv
cHkgdGhlIGNvbnRlbnRzIG9mIHRoZSBvbGQKKyAqIG9uZS4gaWYgbm90LCByZXZlcnQgYmFjayB0
byB0aGUgb2xkLiAqLworIGZ1c2RfZGV2LT5maWxlcyA9IEtNQUxMT0MoZnVzZF9kZXYtPmFycmF5
X3NpemUgKiBzaXplb2YoZnVzZF9maWxlX3QgKiksCisgR0ZQX0tFUk5FTCk7CisgaWYgKGZ1c2Rf
ZGV2LT5maWxlcyA9PSBOVUxMKSB7CisgUkRFQlVHKDEsICJtYWxsb2MgZmFpbGVkIGluIGZ1c2Rf
ZGV2X2FkanNpemUhIik7CisgZnVzZF9kZXYtPmZpbGVzID0gb2xkX2FycmF5OworIGZ1c2RfZGV2
LT5hcnJheV9zaXplID0gb2xkX3NpemU7CisgfSBlbHNlIHsKKyBSREVCVUcoMTAsICIvZGV2LyVz
IG5vdyBoYXMgc3BhY2UgZm9yICVkIGZpbGVzIChoYWQgJWQpIiwgTkFNRShmdXNkX2RldiksCisg
ZnVzZF9kZXYtPmFycmF5X3NpemUsIG9sZF9zaXplKTsKKyBtZW1zZXQoZnVzZF9kZXYtPmZpbGVz
LCAwLCBmdXNkX2Rldi0+YXJyYXlfc2l6ZSAqIHNpemVvZihmdXNkX2ZpbGVfdCAqKSk7CisgbWVt
Y3B5KGZ1c2RfZGV2LT5maWxlcywgb2xkX2FycmF5LAorIGZ1c2RfZGV2LT5udW1fZmlsZXMgKiBz
aXplb2YoZnVzZF9maWxlX3QgKikpOworIEtGUkVFKG9sZF9hcnJheSk7CisgfQogCi0gIHJldHVy
biBmdXNkX2Rldi0+ZmlsZXM7CisgcmV0dXJuIGZ1c2RfZGV2LT5maWxlczsKIH0KIAogCiAvKgog
ICogREVWSUNFIExPQ0sgTVVTVCBCRSBIRUxEIFRPIENBTEwgVEhJUyBGVU5DVElPTgotICogCisg
KgogICogVGhpcyBmdW5jdGlvbiBmcmVlcyBhIGRldmljZSBJRiB0aGVyZSBpcyBub3RoaW5nIGxl
ZnQgdGhhdCBpcwogICogcmVmZXJlbmNpbmcgaXQuCiAgKgogICogU3BlY2lmaWNhbGx5LCB3ZSBk
byBub3QgZnJlZSB0aGUgZGV2aWNlIGlmOgotICogICAtIFRoZSBkcml2ZXIgaXMgc3RpbGwgYWN0
aXZlIChpLmUuIGRldmljZSBpcyBub3QgYSB6b21iaWUpCi0gKiAgIC0gVGhlcmUgYXJlIHN0aWxs
IGZpbGVzIHdpdGggdGhlIGRldmljZSBvcGVuCi0gKiAgIC0gVGhlcmUgaXMgYW4gb3BlbiBpbiBw
cm9ncmVzcywgaS5lLiBhIGNsaWVudCBoYXMgdmVyaWZpZWQgdGhhdAotICogICB0aGlzIGlzIGEg
dmFsaWQgZGV2aWNlIGFuZCBpcyBnZXR0aW5nIHJlYWR5IHRvIGFkZCBpdHNlbGYgYXMgYW4KLSAq
ICAgb3BlbiBmaWxlLgorICogLSBUaGUgZHJpdmVyIGlzIHN0aWxsIGFjdGl2ZSAoaS5lLiBkZXZp
Y2UgaXMgbm90IGEgem9tYmllKQorICogLSBUaGVyZSBhcmUgc3RpbGwgZmlsZXMgd2l0aCB0aGUg
ZGV2aWNlIG9wZW4KKyAqIC0gVGhlcmUgaXMgYW4gb3BlbiBpbiBwcm9ncmVzcywgaS5lLiBhIGNs
aWVudCBoYXMgdmVyaWZpZWQgdGhhdAorICogdGhpcyBpcyBhIHZhbGlkIGRldmljZSBhbmQgaXMg
Z2V0dGluZyByZWFkeSB0byBhZGQgaXRzZWxmIGFzIGFuCisgKiBvcGVuIGZpbGUuCiAgKgogICog
SWYgdGhlIGRldmljZSBpcyBzYWZlIHRvIGZyZWUsIGl0IGlzIHJlbW92ZWQgZnJvbSB0aGUgdmFs
aWQgbGlzdAogICogKGluIHZlcnlzYWZlIG1vZGUgb25seSkgYW5kIGZyZWVkLgogICoKLSAqIFJl
dHVybnM6ICAxIGlmIHRoZSBkZXZpY2Ugd2FzIGZyZWVkCi0gKiAgICAgICAgICAgMCBpZiB0aGUg
ZGV2aWNlIHN0aWxsIGV4aXN0cyAoYW5kIGNhbiBiZSB1bmxvY2tlZCkgKi8KKyAqIFJldHVybnM6
IDEgaWYgdGhlIGRldmljZSB3YXMgZnJlZWQKKyAqIDAgaWYgdGhlIGRldmljZSBzdGlsbCBleGlz
dHMgKGFuZCBjYW4gYmUgdW5sb2NrZWQpICovCiBTVEFUSUMgaW50IG1heWJlX2ZyZWVfZnVzZF9k
ZXYoZnVzZF9kZXZfdCAqZnVzZF9kZXYpCiB7Ci0gIGZ1c2RfbXNnQ190ICpwdHIsICpuZXh0Owor
IGZ1c2RfbXNnQ190ICpwdHIsICpuZXh0OwogCi0gIGRvd24oJmZ1c2RfZGV2bGlzdF9zZW0pOwor
IGRvd24oJmZ1c2RfZGV2bGlzdF9zZW0pOwogCi0gIC8qIERPTidUIGZyZWUgdGhlIGRldmljZSB1
bmRlciBjb25kaXRpb25zIGxpc3RlZCBhYm92ZSAqLwotICBpZiAoIWZ1c2RfZGV2LT56b21iaWUg
fHwgZnVzZF9kZXYtPm51bV9maWxlcyB8fCBmdXNkX2Rldi0+b3Blbl9pbl9wcm9ncmVzcykgewot
ICAgIHVwKCZmdXNkX2Rldmxpc3Rfc2VtKTsKLSAgICByZXR1cm4gMDsKLSAgfQotCi0gIC8qIE9L
IC0gYm9tYnMgYXdheSEgIFRoaXMgZnVzZF9kZXZfdCBpcyBvbiBpdHMgd2F5IG91dCB0aGUgZG9v
ciEgKi8KLQotICBSREVCVUcoOCwgImZyZWVpbmcgc3RhdGUgYXNzb2NpYXRlZCB3aXRoIC9kZXYv
JXMiLCBOQU1FKGZ1c2RfZGV2KSk7Ci0KLSAgLyogZGVsZXRlIGl0IG9mZiB0aGUgbGlzdCBvZiB2
YWxpZCBkZXZpY2VzLCBhbmQgdW5sb2NrICovCi0gIGxpc3RfZGVsKCZmdXNkX2Rldi0+ZGV2bGlz
dCk7Ci0gIHVwKCZmdXNkX2Rldmxpc3Rfc2VtKTsKLQotICAvKiBmcmVlIGFueSBvdXRnb2luZyBt
ZXNzYWdlcyB0aGF0IHRoZSBkZXZpY2UgbWlnaHQgaGF2ZSB3YWl0aW5nICovCi0gIGZvciAocHRy
ID0gZnVzZF9kZXYtPm1zZ19oZWFkOyBwdHIgIT0gTlVMTDsgcHRyID0gbmV4dCkgewotICAgIG5l
eHQgPSBwdHItPm5leHQ7Ci0gICAgRlJFRV9GVVNEX01TR0MocHRyKTsKLSAgfQotICAKLSAgICAg
LyogZnJlZSB0aGUgZGV2aWNlJ3MgZGV2IG5hbWUgKi8KLSAgaWYgKGZ1c2RfZGV2LT5kZXZfbmFt
ZSAhPSBOVUxMKSB7Ci0gICAgS0ZSRUUoZnVzZF9kZXYtPmRldl9uYW1lKTsKLSAgICBmdXNkX2Rl
di0+ZGV2X25hbWUgPSBOVUxMOwotICB9Ci0gIAotICAgIC8qIGZyZWUgdGhlIGRldmljZSdzIGNs
YXNzIG5hbWUgKi8KLSAgaWYgKGZ1c2RfZGV2LT5jbGFzc19uYW1lICE9IE5VTEwpIHsKLSAgICBL
RlJFRShmdXNkX2Rldi0+Y2xhc3NfbmFtZSk7Ci0gICAgZnVzZF9kZXYtPmNsYXNzX25hbWUgPSBO
VUxMOwotICB9Ci0KLSAgLyogZnJlZSB0aGUgZGV2aWNlJ3MgbmFtZSAqLwotICBpZiAoZnVzZF9k
ZXYtPm5hbWUgIT0gTlVMTCkgewotICAgIEtGUkVFKGZ1c2RfZGV2LT5uYW1lKTsKLSAgICBmdXNk
X2Rldi0+bmFtZSA9IE5VTEw7Ci0gIH0KLSAgCi0KLSAgLyogZnJlZSB0aGUgYXJyYXkgdXNlZCB0
byBzdG9yZSBwb2ludGVycyB0byBmdXNkX2ZpbGVfdCdzICovCi0gIGlmIChmdXNkX2Rldi0+Zmls
ZXMgIT0gTlVMTCkgewotICAgIEtGUkVFKGZ1c2RfZGV2LT5maWxlcyk7Ci0gICAgZnVzZF9kZXYt
PmZpbGVzID0gTlVMTDsKLSAgfQotCi0gIC8qIGNsZWFyIHRoZSBzdHJ1Y3R1cmUgYW5kIGZyZWUg
aXQhICovCi0gIG1lbXNldChmdXNkX2RldiwgMCwgc2l6ZW9mKGZ1c2RfZGV2X3QpKTsKLSAgS0ZS
RUUoZnVzZF9kZXYpOwotCi0gIC8qIG5vdGlmeSBmdXNkX3N0YXR1cyByZWFkZXJzIHRoYXQgdGhl
cmUgaGFzIGJlZW4gYSBjaGFuZ2UgaW4gdGhlCi0gICAqIGxpc3Qgb2YgcmVnaXN0ZXJlZCBkZXZp
Y2VzICovCi0gIGF0b21pY19pbmNfYW5kX3JldCgmbGFzdF92ZXJzaW9uKTsKLSAgd2FrZV91cF9p
bnRlcnJ1cHRpYmxlKCZuZXdfZGV2aWNlX3dhaXQpOworIC8qIERPTidUIGZyZWUgdGhlIGRldmlj
ZSB1bmRlciBjb25kaXRpb25zIGxpc3RlZCBhYm92ZSAqLworIGlmICghZnVzZF9kZXYtPnpvbWJp
ZSB8fCBmdXNkX2Rldi0+bnVtX2ZpbGVzIHx8IGZ1c2RfZGV2LT5vcGVuX2luX3Byb2dyZXNzKSB7
CisgdXAoJmZ1c2RfZGV2bGlzdF9zZW0pOworIHJldHVybiAwOworIH0KKworIC8qIE9LIC0gYm9t
YnMgYXdheSEgVGhpcyBmdXNkX2Rldl90IGlzIG9uIGl0cyB3YXkgb3V0IHRoZSBkb29yISAqLwor
CisgUkRFQlVHKDgsICJmcmVlaW5nIHN0YXRlIGFzc29jaWF0ZWQgd2l0aCAvZGV2LyVzIiwgTkFN
RShmdXNkX2RldikpOworCisgLyogZGVsZXRlIGl0IG9mZiB0aGUgbGlzdCBvZiB2YWxpZCBkZXZp
Y2VzLCBhbmQgdW5sb2NrICovCisgbGlzdF9kZWwoJmZ1c2RfZGV2LT5kZXZsaXN0KTsKKyB1cCgm
ZnVzZF9kZXZsaXN0X3NlbSk7CisKKyAvKiBmcmVlIGFueSBvdXRnb2luZyBtZXNzYWdlcyB0aGF0
IHRoZSBkZXZpY2UgbWlnaHQgaGF2ZSB3YWl0aW5nICovCisgZm9yIChwdHIgPSBmdXNkX2Rldi0+
bXNnX2hlYWQ7IHB0ciAhPSBOVUxMOyBwdHIgPSBuZXh0KSB7CisgbmV4dCA9IHB0ci0+bmV4dDsK
KyBGUkVFX0ZVU0RfTVNHQyhwdHIpOworIH0KKworIC8qIGZyZWUgdGhlIGRldmljZSdzIGRldiBu
YW1lICovCisgaWYgKGZ1c2RfZGV2LT5kZXZfbmFtZSAhPSBOVUxMKSB7CisgS0ZSRUUoZnVzZF9k
ZXYtPmRldl9uYW1lKTsKKyBmdXNkX2Rldi0+ZGV2X25hbWUgPSBOVUxMOworIH0KKworIC8qIGZy
ZWUgdGhlIGRldmljZSdzIGNsYXNzIG5hbWUgKi8KKyBpZiAoZnVzZF9kZXYtPmNsYXNzX25hbWUg
IT0gTlVMTCkgeworIEtGUkVFKGZ1c2RfZGV2LT5jbGFzc19uYW1lKTsKKyBmdXNkX2Rldi0+Y2xh
c3NfbmFtZSA9IE5VTEw7CisgfQorCisgLyogZnJlZSB0aGUgZGV2aWNlJ3MgbmFtZSAqLworIGlm
IChmdXNkX2Rldi0+bmFtZSAhPSBOVUxMKSB7CisgS0ZSRUUoZnVzZF9kZXYtPm5hbWUpOworIGZ1
c2RfZGV2LT5uYW1lID0gTlVMTDsKKyB9CisKKworIC8qIGZyZWUgdGhlIGFycmF5IHVzZWQgdG8g
c3RvcmUgcG9pbnRlcnMgdG8gZnVzZF9maWxlX3QncyAqLworIGlmIChmdXNkX2Rldi0+ZmlsZXMg
IT0gTlVMTCkgeworIEtGUkVFKGZ1c2RfZGV2LT5maWxlcyk7CisgZnVzZF9kZXYtPmZpbGVzID0g
TlVMTDsKKyB9CisKKyAvKiBjbGVhciB0aGUgc3RydWN0dXJlIGFuZCBmcmVlIGl0ISAqLworIG1l
bXNldChmdXNkX2RldiwgMCwgc2l6ZW9mKGZ1c2RfZGV2X3QpKTsKKyBLRlJFRShmdXNkX2Rldik7
CisKKyAvKiBub3RpZnkgZnVzZF9zdGF0dXMgcmVhZGVycyB0aGF0IHRoZXJlIGhhcyBiZWVuIGEg
Y2hhbmdlIGluIHRoZQorICogbGlzdCBvZiByZWdpc3RlcmVkIGRldmljZXMgKi8KKyBhdG9taWNf
aW5jX2FuZF9yZXQoJmxhc3RfdmVyc2lvbik7Cisgd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZuZXdf
ZGV2aWNlX3dhaXQpOwogCi0gIC8vTU9EX0RFQ19VU0VfQ09VTlQ7Ci0gIHJldHVybiAxOworIC8v
TU9EX0RFQ19VU0VfQ09VTlQ7CisgcmV0dXJuIDE7CiB9CiAKIApAQCAtNTA1LDEwMyArNTA1LDEw
MyBAQAogICoKICAqIERPIE5PVCBDQUxMIFRISVMgRlVOQ1RJT04gVU5MRVNTIFRIRSBERVZJQ0Ug
SVMgQUxSRUFEWSBMT0NLRUQKICAqCi0gKiB6b21iaWZ5X2RldmljZTogY2FsbGVkIHdoZW4gdGhl
IGRyaXZlciBkaXNhcHBlYXJzLiAgSW5kaWNhdGVzIHRoYXQKLSAqIHRoZSBkcml2ZXIgaXMgbm8g
bG9uZ2VyIGF2YWlsYWJsZSB0byBzZXJ2aWNlIHJlcXVlc3RzLiAgSWYgdGhlcmUKKyAqIHpvbWJp
ZnlfZGV2aWNlOiBjYWxsZWQgd2hlbiB0aGUgZHJpdmVyIGRpc2FwcGVhcnMuIEluZGljYXRlcyB0
aGF0CisgKiB0aGUgZHJpdmVyIGlzIG5vIGxvbmdlciBhdmFpbGFibGUgdG8gc2VydmljZSByZXF1
ZXN0cy4gSWYgdGhlcmUKICAqIGFyZSBubyBvdXRzdGFuZGluZyBzeXN0ZW0gY2FsbHMgd2FpdGlu
ZyBmb3IgdGhlIGZ1c2RfZGV2IHN0YXRlLCB0aGUKICAqIGRldmljZSBzdGF0ZSBpdHNlbGYgaXMg
ZnJlZWQuCiAgKgogICovCiBTVEFUSUMgdm9pZCB6b21iaWZ5X2RldihmdXNkX2Rldl90ICpmdXNk
X2RldikKIHsKLSAgaW50IGk7CisgaW50IGk7CiAKLSAgaWYgKGZ1c2RfZGV2LT56b21iaWUpIHsK
LSAgICBSREVCVUcoMSwgInpvbWJpZnlfZGV2aWNlIGNhbGxlZCBvbiBhIHpvbWJpZSEhIik7Ci0g
ICAgcmV0dXJuOwotICB9Ci0KLSAgZnVzZF9kZXYtPnpvbWJpZSA9IDE7Ci0KLSAgUkRFQlVHKDMs
ICIvZGV2LyVzIHR1cm5pbmcgaW50byBhIHpvbWJpZSAoJWQgb3BlbiBmaWxlcykiLCBOQU1FKGZ1
c2RfZGV2KSwKLQkgZnVzZF9kZXYtPm51bV9maWxlcyk7Ci0KLSAgLyogSWYgdGhlcmUgYXJlIGZp
bGVzIGhvbGRpbmcgdGhpcyBkZXZpY2Ugb3Blbiwgd2FrZSB0aGVtIHVwLiAqLwotICBmb3IgKGkg
PSAwOyBpIDwgZnVzZF9kZXYtPm51bV9maWxlczsgaSsrKSB7Ci0gICAgd2FrZV91cF9pbnRlcnJ1
cHRpYmxlKCZmdXNkX2Rldi0+ZmlsZXNbaV0tPmZpbGVfd2FpdCk7Ci0gICAgd2FrZV91cF9pbnRl
cnJ1cHRpYmxlKCZmdXNkX2Rldi0+ZmlsZXNbaV0tPnBvbGxfd2FpdCk7Ci0gIH0KKyBpZiAoZnVz
ZF9kZXYtPnpvbWJpZSkgeworIFJERUJVRygxLCAiem9tYmlmeV9kZXZpY2UgY2FsbGVkIG9uIGEg
em9tYmllISEiKTsKKyByZXR1cm47CisgfQorCisgZnVzZF9kZXYtPnpvbWJpZSA9IDE7CisKKyBS
REVCVUcoMywgIi9kZXYvJXMgdHVybmluZyBpbnRvIGEgem9tYmllICglZCBvcGVuIGZpbGVzKSIs
IE5BTUUoZnVzZF9kZXYpLAorIGZ1c2RfZGV2LT5udW1fZmlsZXMpOworCisgLyogSWYgdGhlcmUg
YXJlIGZpbGVzIGhvbGRpbmcgdGhpcyBkZXZpY2Ugb3Blbiwgd2FrZSB0aGVtIHVwLiAqLworIGZv
ciAoaSA9IDA7IGkgPCBmdXNkX2Rldi0+bnVtX2ZpbGVzOyBpKyspIHsKKyB3YWtlX3VwX2ludGVy
cnVwdGlibGUoJmZ1c2RfZGV2LT5maWxlc1tpXS0+ZmlsZV93YWl0KTsKKyB3YWtlX3VwX2ludGVy
cnVwdGlibGUoJmZ1c2RfZGV2LT5maWxlc1tpXS0+cG9sbF93YWl0KTsKKyB9CiB9CiAKIAogCiAv
KiB1dGlsaXR5IGZ1bmN0aW9uIHRvIGZpbmQgdGhlIGluZGV4IG9mIGEgZnVzZF9maWxlIGluIGEg
ZnVzZF9kZXYuCi0gKiByZXR1cm5zIGluZGV4IGlmIGZvdW5kLCAtMSBpZiBub3QgZm91bmQuICBB
U1NVTUVTIFdFIEhBVkUgQSBWQUxJRAotICogZnVzZF9kZXYuICBmdXNkX2ZpbGUgbWF5IGJlIE5V
TEwgaWYgd2UgYXJlIHNlYXJjaGluZyBmb3IgYW4gZW1wdHkKKyAqIHJldHVybnMgaW5kZXggaWYg
Zm91bmQsIC0xIGlmIG5vdCBmb3VuZC4gQVNTVU1FUyBXRSBIQVZFIEEgVkFMSUQKKyAqIGZ1c2Rf
ZGV2LiBmdXNkX2ZpbGUgbWF5IGJlIE5VTEwgaWYgd2UgYXJlIHNlYXJjaGluZyBmb3IgYW4gZW1w
dHkKICAqIHNsb3QuICovCiBTVEFUSUMgaW50IGZpbmRfZnVzZF9maWxlKGZ1c2RfZGV2X3QgKmZ1
c2RfZGV2LCBmdXNkX2ZpbGVfdCAqZnVzZF9maWxlKQogewotICBpbnQgaSwgbnVtX2ZpbGVzID0g
ZnVzZF9kZXYtPm51bV9maWxlczsKLSAgZnVzZF9maWxlX3QgKipmaWxlcyA9IGZ1c2RfZGV2LT5m
aWxlczsKKyBpbnQgaSwgbnVtX2ZpbGVzID0gZnVzZF9kZXYtPm51bV9maWxlczsKKyBmdXNkX2Zp
bGVfdCAqKmZpbGVzID0gZnVzZF9kZXYtPmZpbGVzOwogCi0gIGZvciAoaSA9IDA7IGkgPCBudW1f
ZmlsZXM7IGkrKykKLSAgICBpZiAoZmlsZXNbaV0gPT0gZnVzZF9maWxlKQotICAgICAgcmV0dXJu
IGk7CisgZm9yIChpID0gMDsgaSA8IG51bV9maWxlczsgaSsrKQorIGlmIChmaWxlc1tpXSA9PSBm
dXNkX2ZpbGUpCisgcmV0dXJuIGk7CiAKLSAgcmV0dXJuIC0xOworIHJldHVybiAtMTsKIH0KIAog
CiAvKgogICogREVWSUNFIExPQ0sgTVVTVCBCRSBIRUxEIEJFRk9SRSBUSElTIElTIENBTExFRAog
ICoKLSAqIFJldHVybnMgMSBpZiB0aGUgZGV2aWNlIHdhcyBhbHNvIGZyZWVkLiAgMCBpZiBvbmx5
IHRoZSBmaWxlIHdhcwotICogZnJlZWQuICBJZiB0aGUgZGV2aWNlIGlzIGZyZWVkLCB0aGVuIGRv
IG5vdCB0cnkgdG8gdW5sb2NrIGl0IQorICogUmV0dXJucyAxIGlmIHRoZSBkZXZpY2Ugd2FzIGFs
c28gZnJlZWQuIDAgaWYgb25seSB0aGUgZmlsZSB3YXMKKyAqIGZyZWVkLiBJZiB0aGUgZGV2aWNl
IGlzIGZyZWVkLCB0aGVuIGRvIG5vdCB0cnkgdG8gdW5sb2NrIGl0IQogICogKENhbGxlcnM6IENo
ZWNrIHRoZSByZXR1cm4gdmFsdWUgYmVmb3JlIHVubG9ja2luZyEpCiAgKi8KIFNUQVRJQyBpbnQg
ZnJlZV9mdXNkX2ZpbGUoZnVzZF9kZXZfdCAqZnVzZF9kZXYsIGZ1c2RfZmlsZV90ICpmdXNkX2Zp
bGUpCiB7Ci0gIGludCBpOwotICBzdHJ1Y3QgbGlzdF9oZWFkICp0bXAsICppdDsKLSAgIAotICAv
KiBmaW5kIHRoZSBpbmRleCBvZiB0aGUgZmlsZSBpbiB0aGUgZGV2aWNlJ3MgZmlsZS1saXN0Li4u
ICovCi0gIGlmICgoaSA9IGZpbmRfZnVzZF9maWxlKGZ1c2RfZGV2LCBmdXNkX2ZpbGUpKSA8IDAp
Ci0gICAgcGFuaWMoImNvcnJ1cHRlZCBmdXNkX2RldjogcmVsZWFzaW5nIGEgZmlsZSB0aGF0IHdl
IHRoaW5rIGlzIGNsb3NlZCIpOwotICAgIAotICAvKiAuLi5hbmQgcmVtb3ZlIGl0IChieSBwdXR0
aW5nIHRoZSBsYXN0IGVudHJ5IGludG8gaXRzIHBsYWNlKSAqLwotICBmdXNkX2Rldi0+ZmlsZXNb
aV0gPSBmdXNkX2Rldi0+ZmlsZXNbLS0oZnVzZF9kZXYtPm51bV9maWxlcyldOwotCi0gIC8qIHRo
ZXJlIG1pZ2h0IGJlIGFuIGluY29taW5nIG1lc3NhZ2Ugd2FpdGluZyBmb3IgYSByZXN0YXJ0ZWQg
c3lzdGVtCi0gICAqIGNhbGwuICBmcmVlIGl0IC0tIGFmdGVyIHBvc3NpYmx5IGZvcmdpbmcgYSBj
bG9zZSAoc2VlCi0gICAqIGZ1c2RfZm9yZ2VfY2xvc2UpLiAqLwotICAgCi0gICAKLQlsaXN0X2Zv
cl9lYWNoX3NhZmUoaXQsIHRtcCwgJmZ1c2RfZmlsZS0+dHJhbnNhY3Rpb25zKQotCXsKLQkJc3Ry
dWN0IGZ1c2RfdHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uID0gbGlzdF9lbnRyeShpdCwgc3RydWN0
IGZ1c2RfdHJhbnNhY3Rpb24sIGxpc3QpOwotCQlpZih0cmFuc2FjdGlvbi0+bXNnX2luKQotCQl7
Ci0gICAgICBpZiAodHJhbnNhY3Rpb24tPm1zZ19pbi0+c3ViY21kID09IEZVU0RfT1BFTiAmJiB0
cmFuc2FjdGlvbi0+bXNnX2luLT5wYXJtLmZvcHNfbXNnLnJldHZhbCA9PSAwKQotICAgICAgICBm
dXNkX2ZvcmdlX2Nsb3NlKHRyYW5zYWN0aW9uLT5tc2dfaW4sIGZ1c2RfZGV2KTsKLSAgICAgIGZy
ZWVfZnVzZF9tc2coJnRyYW5zYWN0aW9uLT5tc2dfaW4pOwotCQl9IAotCQlLRlJFRSh0cmFuc2Fj
dGlvbik7Ci0JfQotICAKLSAgLyogZnJlZSBzdGF0ZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBmaWxl
ICovCi0gIG1lbXNldChmdXNkX2ZpbGUsIDAsIHNpemVvZihmdXNkX2ZpbGVfdCkpOwotICBLRlJF
RShmdXNkX2ZpbGUpOwotCi0gIC8qIHJlZHVjZSB0aGUgc2l6ZSBvZiB0aGUgZmlsZSBhcnJheSBp
ZiBuZWNlc3NhcnkgKi8KLSAgaWYgKGZ1c2RfZGV2LT5hcnJheV9zaXplID4gTUlOX0ZJTEVBUlJB
WV9TSVpFICYmCi0gICAgICBmdXNkX2Rldi0+YXJyYXlfc2l6ZSA+IDQqZnVzZF9kZXYtPm51bV9m
aWxlcykKLSAgICBmdXNkX2Rldl9hZGpzaXplKGZ1c2RfZGV2KTsKLQotICAvKiByZW51bWJlciB0
aGUgYXJyYXkgKi8KLSAgZm9yIChpID0gMDsgaSA8IGZ1c2RfZGV2LT5udW1fZmlsZXM7IGkrKykK
LSAgICBmdXNkX2Rldi0+ZmlsZXNbaV0tPmluZGV4ID0gaTsKKyBpbnQgaTsKKyBzdHJ1Y3QgbGlz
dF9oZWFkICp0bXAsICppdDsKIAotICAvKiB0cnkgdG8gZnJlZSB0aGUgZGV2aWNlIC0tIHRoaXMg
bWF5IGhhdmUgYmVlbiBpdHMgbGFzdCBmaWxlICovCi0gIHJldHVybiBtYXliZV9mcmVlX2Z1c2Rf
ZGV2KGZ1c2RfZGV2KTsKKyAvKiBmaW5kIHRoZSBpbmRleCBvZiB0aGUgZmlsZSBpbiB0aGUgZGV2
aWNlJ3MgZmlsZS1saXN0Li4uICovCisgaWYgKChpID0gZmluZF9mdXNkX2ZpbGUoZnVzZF9kZXYs
IGZ1c2RfZmlsZSkpIDwgMCkKKyBwYW5pYygiY29ycnVwdGVkIGZ1c2RfZGV2OiByZWxlYXNpbmcg
YSBmaWxlIHRoYXQgd2UgdGhpbmsgaXMgY2xvc2VkIik7CisKKyAvKiAuLi5hbmQgcmVtb3ZlIGl0
IChieSBwdXR0aW5nIHRoZSBsYXN0IGVudHJ5IGludG8gaXRzIHBsYWNlKSAqLworIGZ1c2RfZGV2
LT5maWxlc1tpXSA9IGZ1c2RfZGV2LT5maWxlc1stLShmdXNkX2Rldi0+bnVtX2ZpbGVzKV07CisK
KyAvKiB0aGVyZSBtaWdodCBiZSBhbiBpbmNvbWluZyBtZXNzYWdlIHdhaXRpbmcgZm9yIGEgcmVz
dGFydGVkIHN5c3RlbQorICogY2FsbC4gZnJlZSBpdCAtLSBhZnRlciBwb3NzaWJseSBmb3JnaW5n
IGEgY2xvc2UgKHNlZQorICogZnVzZF9mb3JnZV9jbG9zZSkuICovCisKKworIGxpc3RfZm9yX2Vh
Y2hfc2FmZShpdCwgdG1wLCAmZnVzZF9maWxlLT50cmFuc2FjdGlvbnMpCisgeworIHN0cnVjdCBm
dXNkX3RyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiA9IGxpc3RfZW50cnkoaXQsIHN0cnVjdCBmdXNk
X3RyYW5zYWN0aW9uLCBsaXN0KTsKKyBpZih0cmFuc2FjdGlvbi0+bXNnX2luKQorIHsKKyBpZiAo
dHJhbnNhY3Rpb24tPm1zZ19pbi0+c3ViY21kID09IEZVU0RfT1BFTiAmJiB0cmFuc2FjdGlvbi0+
bXNnX2luLT5wYXJtLmZvcHNfbXNnLnJldHZhbCA9PSAwKQorIGZ1c2RfZm9yZ2VfY2xvc2UodHJh
bnNhY3Rpb24tPm1zZ19pbiwgZnVzZF9kZXYpOworIGZyZWVfZnVzZF9tc2coJnRyYW5zYWN0aW9u
LT5tc2dfaW4pOworIH0KKyBLRlJFRSh0cmFuc2FjdGlvbik7CisgfQorCisgLyogZnJlZSBzdGF0
ZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBmaWxlICovCisgbWVtc2V0KGZ1c2RfZmlsZSwgMCwgc2l6
ZW9mKGZ1c2RfZmlsZV90KSk7CisgS0ZSRUUoZnVzZF9maWxlKTsKKworIC8qIHJlZHVjZSB0aGUg
c2l6ZSBvZiB0aGUgZmlsZSBhcnJheSBpZiBuZWNlc3NhcnkgKi8KKyBpZiAoZnVzZF9kZXYtPmFy
cmF5X3NpemUgPiBNSU5fRklMRUFSUkFZX1NJWkUgJiYKKyBmdXNkX2Rldi0+YXJyYXlfc2l6ZSA+
IDQqZnVzZF9kZXYtPm51bV9maWxlcykKKyBmdXNkX2Rldl9hZGpzaXplKGZ1c2RfZGV2KTsKKwor
IC8qIHJlbnVtYmVyIHRoZSBhcnJheSAqLworIGZvciAoaSA9IDA7IGkgPCBmdXNkX2Rldi0+bnVt
X2ZpbGVzOyBpKyspCisgZnVzZF9kZXYtPmZpbGVzW2ldLT5pbmRleCA9IGk7CisKKyAvKiB0cnkg
dG8gZnJlZSB0aGUgZGV2aWNlIC0tIHRoaXMgbWF5IGhhdmUgYmVlbiBpdHMgbGFzdCBmaWxlICov
CisgcmV0dXJuIG1heWJlX2ZyZWVfZnVzZF9kZXYoZnVzZF9kZXYpOwogfQogCiAKQEAgLTYyMiw4
MiArNjIyLDgyIEBACiAgKgogICogSW4gdGhlIGV2ZW4gTEVTUyAoaG9wZWZ1bGx5IHZlcnkgcmFy
ZSkgY2FzZSB3aGVuIG9uZSBQSUQgaGFkIGFuCiAgKiBpbnRlcnJ1cHRlZCBzeXNjYWxsLCBidXQg
YSBkaWZmZXJlbnQgUElEIGlzIHRoZSBuZXh0IHRvIGRvIGEgc3lzdGVtCi0gKiBjYWxsIG9uIHRo
YXQgZmlsZSBkZXNjcmlwdG9yIC0tIHdlbGwsIHdlIGxvc2UuICBDbGVhciBzdGF0ZSBvZiB0aGF0
CisgKiBjYWxsIG9uIHRoYXQgZmlsZSBkZXNjcmlwdG9yIC0tIHdlbGwsIHdlIGxvc2UuIENsZWFy
IHN0YXRlIG9mIHRoYXQKICAqIG9sZCBzeXNjYWxsIG91dCBhbmQgY29udGludWUgYXMgdXN1YWwu
CiAgKi8KIFNUQVRJQyBzdHJ1Y3QgZnVzZF90cmFuc2FjdGlvbiogZnVzZF9maW5kX2luY29tcGxl
dGVfdHJhbnNhY3Rpb24oZnVzZF9maWxlX3QgKmZ1c2RfZmlsZSwgaW50IHN1YmNtZCkKIHsKLSAg
c3RydWN0IGZ1c2RfdHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uID0gZnVzZF9maW5kX3RyYW5zYWN0
aW9uX2J5X3BpZChmdXNkX2ZpbGUsIGN1cnJlbnQtPnBpZCk7Ci0gIGlmKHRyYW5zYWN0aW9uID09
IE5VTEwpCi0gICAgcmV0dXJuIE5VTEw7Ci0KLQotICBpZiAodHJhbnNhY3Rpb24tPnN1YmNtZCAh
PSBzdWJjbWQpCi0gIHsKLSAgICBSREVCVUcoMiwgIkluY29tcGxldGUgdHJhbnNhY3Rpb24gJWxk
IHRocm93biBvdXQsIHdhcyBleHBlY3Rpbmcgc3ViY21kICVkIGJ1dCByZWNlaXZlZCAlZCIsIAot
ICAgICAgICAgICB0cmFuc2FjdGlvbi0+dHJhbnNpZCwgdHJhbnNhY3Rpb24tPnN1YmNtZCwgc3Vi
Y21kKTsKLSAgICBmdXNkX2NsZWFudXBfdHJhbnNhY3Rpb24oZnVzZF9maWxlLCB0cmFuc2FjdGlv
bik7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLSAgCi0gIFJERUJVRyg0LCAicGlkICVkIHJlc3Rh
cnRpbmcgc3lzdGVtIGNhbGwgd2l0aCB0cmFuc2lkICVsZCIsIGN1cnJlbnQtPnBpZCwKLSAgICAg
ICAgIHRyYW5zYWN0aW9uLT50cmFuc2lkKTsKLSAgcmV0dXJuIHRyYW5zYWN0aW9uOworIHN0cnVj
dCBmdXNkX3RyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiA9IGZ1c2RfZmluZF90cmFuc2FjdGlvbl9i
eV9waWQoZnVzZF9maWxlLCBjdXJyZW50LT5waWQpOworIGlmKHRyYW5zYWN0aW9uID09IE5VTEwp
CisgcmV0dXJuIE5VTEw7CisKKworIGlmICh0cmFuc2FjdGlvbi0+c3ViY21kICE9IHN1YmNtZCkK
KyB7CisgUkRFQlVHKDIsICJJbmNvbXBsZXRlIHRyYW5zYWN0aW9uICVsZCB0aHJvd24gb3V0LCB3
YXMgZXhwZWN0aW5nIHN1YmNtZCAlZCBidXQgcmVjZWl2ZWQgJWQiLAorIHRyYW5zYWN0aW9uLT50
cmFuc2lkLCB0cmFuc2FjdGlvbi0+c3ViY21kLCBzdWJjbWQpOworIGZ1c2RfY2xlYW51cF90cmFu
c2FjdGlvbihmdXNkX2ZpbGUsIHRyYW5zYWN0aW9uKTsKKyByZXR1cm4gTlVMTDsKKyB9CisKKyBS
REVCVUcoNCwgInBpZCAlZCByZXN0YXJ0aW5nIHN5c3RlbSBjYWxsIHdpdGggdHJhbnNpZCAlbGQi
LCBjdXJyZW50LT5waWQsCisgdHJhbnNhY3Rpb24tPnRyYW5zaWQpOworIHJldHVybiB0cmFuc2Fj
dGlvbjsKIH0KIAogCiBTVEFUSUMgaW50IHNlbmRfdG9fZGV2KGZ1c2RfZGV2X3QgKmZ1c2RfZGV2
LCBmdXNkX21zZ190ICpmdXNkX21zZywgaW50IGxvY2tlZCkKIHsKLSAgZnVzZF9tc2dDX3QgKmZ1
c2RfbXNnQzsKKyBmdXNkX21zZ0NfdCAqZnVzZF9tc2dDOwogCi0gIC8qIGFsbG9jYXRlIGEgY29u
dGFpbmVyIGZvciB0aGUgbWVzc2FnZSAqLwotICBpZiAoKGZ1c2RfbXNnQyA9IEtNQUxMT0Moc2l6
ZW9mKGZ1c2RfbXNnQ190KSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpCi0gICAgcmV0dXJuIC1FTk9N
RU07CisgLyogYWxsb2NhdGUgYSBjb250YWluZXIgZm9yIHRoZSBtZXNzYWdlICovCisgaWYgKChm
dXNkX21zZ0MgPSBLTUFMTE9DKHNpemVvZihmdXNkX21zZ0NfdCksIEdGUF9LRVJORUwpKSA9PSBO
VUxMKQorIHJldHVybiAtRU5PTUVNOwogCi0gIG1lbXNldChmdXNkX21zZ0MsIDAsIHNpemVvZihm
dXNkX21zZ0NfdCkpOwotICBtZW1jcHkoJmZ1c2RfbXNnQy0+ZnVzZF9tc2csIGZ1c2RfbXNnLCBz
aXplb2YoZnVzZF9tc2dfdCkpOworIG1lbXNldChmdXNkX21zZ0MsIDAsIHNpemVvZihmdXNkX21z
Z0NfdCkpOworIG1lbWNweSgmZnVzZF9tc2dDLT5mdXNkX21zZywgZnVzZF9tc2csIHNpemVvZihm
dXNkX21zZ190KSk7CiAKLSAgaWYgKCFsb2NrZWQpCi0gICAgTE9DS19GVVNEX0RFVihmdXNkX2Rl
dik7CisgaWYgKCFsb2NrZWQpCisgTE9DS19GVVNEX0RFVihmdXNkX2Rldik7CiAKLSAgLyogcHV0
IHRoZSBtZXNzYWdlIGluIHRoZSBkZXZpY2UncyBvdXRnb2luZyBxdWV1ZS4gICovCi0gIGlmIChm
dXNkX2Rldi0+bXNnX2hlYWQgPT0gTlVMTCkgewotICAgIGZ1c2RfZGV2LT5tc2dfaGVhZCA9IGZ1
c2RfZGV2LT5tc2dfdGFpbCA9IGZ1c2RfbXNnQzsKLSAgfSBlbHNlIHsKLSAgICBmdXNkX2Rldi0+
bXNnX3RhaWwtPm5leHQgPSBmdXNkX21zZ0M7Ci0gICAgZnVzZF9kZXYtPm1zZ190YWlsID0gZnVz
ZF9tc2dDOwotICB9CisgLyogcHV0IHRoZSBtZXNzYWdlIGluIHRoZSBkZXZpY2UncyBvdXRnb2lu
ZyBxdWV1ZS4gKi8KKyBpZiAoZnVzZF9kZXYtPm1zZ19oZWFkID09IE5VTEwpIHsKKyBmdXNkX2Rl
di0+bXNnX2hlYWQgPSBmdXNkX2Rldi0+bXNnX3RhaWwgPSBmdXNkX21zZ0M7CisgfSBlbHNlIHsK
KyBmdXNkX2Rldi0+bXNnX3RhaWwtPm5leHQgPSBmdXNkX21zZ0M7CisgZnVzZF9kZXYtPm1zZ190
YWlsID0gZnVzZF9tc2dDOworIH0KIAotICBpZiAoIWxvY2tlZCkKLSAgICBVTkxPQ0tfRlVTRF9E
RVYoZnVzZF9kZXYpOworIGlmICghbG9ja2VkKQorIFVOTE9DS19GVVNEX0RFVihmdXNkX2Rldik7
CiAKLSAgLyogd2FrZSB1cCB0aGUgZHJpdmVyLCB3aGljaCBub3cgaGFzIGEgbWVzc2FnZSB3YWl0
aW5nIGluIGl0cyBxdWV1ZSAqLwotICBXQUtFX1VQX0lOVEVSUlVQVElCTEVfU1lOQygmZnVzZF9k
ZXYtPmRldl93YWl0KTsKKyAvKiB3YWtlIHVwIHRoZSBkcml2ZXIsIHdoaWNoIG5vdyBoYXMgYSBt
ZXNzYWdlIHdhaXRpbmcgaW4gaXRzIHF1ZXVlICovCisgV0FLRV9VUF9JTlRFUlJVUFRJQkxFX1NZ
TkMoJmZ1c2RfZGV2LT5kZXZfd2FpdCk7CiAKLSAgcmV0dXJuIDA7CisgcmV0dXJuIDA7CiAKICB6
b21iaWVfZGV2OgotICBLRlJFRShmdXNkX21zZ0MpOwotICByZXR1cm4gLUVQSVBFOworIEtGUkVF
KGZ1c2RfbXNnQyk7CisgcmV0dXJuIC1FUElQRTsKIH0KIAogCi0vKiAKKy8qCiAgKiBzcGVjaWFs
IGNhc2U6IGlmIHRoZSBkcml2ZXIgc2VudCBiYWNrIGEgc3VjY2Vzc2Z1bCAib3BlbiIsIGJ1dAog
ICogdGhlcmUgaXMgbm8gZmlsZSB0aGF0IGlzIGFjdHVhbGx5IG9wZW4sIHdlIGZvcmdlIGEgImNs
b3NlIiBzbyB0aGF0Ci0gKiB0aGUgZHJpdmVyIGNhbiBtYWludGFpbiBiYWxhbmNlZCBvcGVuL2Ns
b3NlIHBhaXJzLiAgV2UgcHV0IGNhbGxzIHRvCisgKiB0aGUgZHJpdmVyIGNhbiBtYWludGFpbiBi
YWxhbmNlZCBvcGVuL2Nsb3NlIHBhaXJzLiBXZSBwdXQgY2FsbHMgdG8KICAqIHRoaXMgaW4gZnVz
ZF9mb3BzX3JlcGx5LCB3aGVuIHRoZSByZXBseSBmaXJzdCBjb21lcyBpbjsgYW5kLAogICogZnJl
ZV9mdXNkX2ZpbGUsIHdoZW4gd2UgdGhyb3cgYXdheSBhIHJlcGx5IHRoYXQgaGFkIGJlZW4KICAq
IHBlbmRpbmcgZm9yIGEgcmVzdGFydC4KICAqLwogU1RBVElDIHZvaWQgZnVzZF9mb3JnZV9jbG9z
ZShmdXNkX21zZ190ICptc2csIGZ1c2RfZGV2X3QgKmZ1c2RfZGV2KQogewotICBSREVCVUcoMiwg
Ii9kZXYvJXMgdHJpZWQgdG8gY29tcGxldGUgYW4gb3BlbiBmb3IgdHJhbnNpZCAlbGQsICIKLQkg
ImZvcmdpbmcgYSBjbG9zZSIsIE5BTUUoZnVzZF9kZXYpLCBtc2ctPnBhcm0uZm9wc19tc2cudHJh
bnNpZCk7Ci0gIG1zZy0+Y21kID0gRlVTRF9GT1BTX0NBTExfRFJPUFJFUExZOwotICBtc2ctPnN1
YmNtZCA9IEZVU0RfQ0xPU0U7Ci0gIG1zZy0+cGFybS5mb3BzX21zZy50cmFuc2lkID0gYXRvbWlj
X2luY19hbmRfcmV0KCZsYXN0X3RyYW5zaWQpOwotICBzZW5kX3RvX2RldihmdXNkX2RldiwgbXNn
LCAxKTsKKyBSREVCVUcoMiwgIi9kZXYvJXMgdHJpZWQgdG8gY29tcGxldGUgYW4gb3BlbiBmb3Ig
dHJhbnNpZCAlbGQsICIKKyAiZm9yZ2luZyBhIGNsb3NlIiwgTkFNRShmdXNkX2RldiksIG1zZy0+
cGFybS5mb3BzX21zZy50cmFuc2lkKTsKKyBtc2ctPmNtZCA9IEZVU0RfRk9QU19DQUxMX0RST1BS
RVBMWTsKKyBtc2ctPnN1YmNtZCA9IEZVU0RfQ0xPU0U7CisgbXNnLT5wYXJtLmZvcHNfbXNnLnRy
YW5zaWQgPSBhdG9taWNfaW5jX2FuZF9yZXQoJmxhc3RfdHJhbnNpZCk7Cisgc2VuZF90b19kZXYo
ZnVzZF9kZXYsIG1zZywgMSk7CiB9CiAKIApAQCAtNzA5LDcwICs3MDksNzAgQEAKICAqIGZ1bmN0
aW9uIGlzIGNhbGxlZCwgYnV0IE5PVCB0aGUgbG9jayBvbiB0aGUgZnVzZF9kZXYKICAqLwogU1RB
VElDIGludCBmdXNkX2ZvcHNfY2FsbF9zZW5kKGZ1c2RfZmlsZV90ICpmdXNkX2ZpbGVfYXJnLAot
CQkJICAgICAgIGZ1c2RfbXNnX3QgKmZ1c2RfbXNnLCBzdHJ1Y3QgZnVzZF90cmFuc2FjdGlvbioq
IHRyYW5zYWN0aW9uKQorIGZ1c2RfbXNnX3QgKmZ1c2RfbXNnLCBzdHJ1Y3QgZnVzZF90cmFuc2Fj
dGlvbioqIHRyYW5zYWN0aW9uKQogewotICBmdXNkX2Rldl90ICpmdXNkX2RldjsKLSAgZnVzZF9m
aWxlX3QgKmZ1c2RfZmlsZTsKKyBmdXNkX2Rldl90ICpmdXNkX2RldjsKKyBmdXNkX2ZpbGVfdCAq
ZnVzZF9maWxlOworCisgLyogSSBjaGVjayB0aGlzIGp1c3QgaW4gY2FzZSwgc2hvdWxkbid0IGJl
IG5lY2Vzc2FyeS4gKi8KKyBHRVRfRlVTRF9GSUxFX0FORF9ERVYoZnVzZF9maWxlX2FyZywgZnVz
ZF9maWxlLCBmdXNkX2Rldik7CiAKLSAgLyogSSBjaGVjayB0aGlzIGp1c3QgaW4gY2FzZSwgc2hv
dWxkbid0IGJlIG5lY2Vzc2FyeS4gKi8KLSAgR0VUX0ZVU0RfRklMRV9BTkRfREVWKGZ1c2RfZmls
ZV9hcmcsIGZ1c2RfZmlsZSwgZnVzZF9kZXYpOworIC8qIG1ha2Ugc3VyZSBtZXNzYWdlIGlzIHNh
bmUgKi8KKyBpZiAoKGZ1c2RfbXNnLT5kYXRhID09IE5VTEwpICE9IChmdXNkX21zZy0+ZGF0YWxl
biA9PSAwKSkgeworIFJERUJVRygyLCAiZnVzZF9mb3BzX2NhbGw6IGRhdGEgcG9pbnRlciBhbmQg
ZGF0YWxlbiBtaXNtYXRjaCIpOworIHJldHVybiAtRUlOVkFMOworIH0KKworIC8qIGZpbGwgdGhl
IHJlc3Qgb2YgdGhlIHN0cnVjdHVyZSAqLworIGZ1c2RfbXNnLT5wYXJtLmZvcHNfbXNnLnBpZCA9
IGN1cnJlbnQtPnBpZDsKKyBmdXNkX21zZy0+cGFybS5mb3BzX21zZy51aWQgPSBjdXJyZW50LT51
aWQ7CisgZnVzZF9tc2ctPnBhcm0uZm9wc19tc2cuZ2lkID0gY3VycmVudC0+Z2lkOworIGZ1c2Rf
bXNnLT5wYXJtLmZvcHNfbXNnLmZsYWdzID0gZnVzZF9maWxlLT5maWxlLT5mX2ZsYWdzOworIGZ1
c2RfbXNnLT5wYXJtLmZvcHNfbXNnLm9mZnNldCA9IGZ1c2RfZmlsZS0+ZmlsZS0+Zl9wb3M7Cisg
ZnVzZF9tc2ctPnBhcm0uZm9wc19tc2cuZGV2aWNlX2luZm8gPSBmdXNkX2Rldi0+cHJpdmF0ZV9k
YXRhOworIGZ1c2RfbXNnLT5wYXJtLmZvcHNfbXNnLnByaXZhdGVfaW5mbyA9IGZ1c2RfZmlsZS0+
cHJpdmF0ZV9kYXRhOworIGZ1c2RfbXNnLT5wYXJtLmZvcHNfbXNnLmZ1c2RfZmlsZSA9IGZ1c2Rf
ZmlsZTsKKyBmdXNkX21zZy0+cGFybS5mb3BzX21zZy50cmFuc2lkID0gYXRvbWljX2luY19hbmRf
cmV0KCZsYXN0X3RyYW5zaWQpOworCisgLyogc2V0IHVwIGNlcnRhaW4gc3RhdGUgZGVwZW5kaW5n
IG9uIGlmIHdlIGV4cGVjdCBhIHJlcGx5ICovCisgc3dpdGNoIChmdXNkX21zZy0+Y21kKSB7CisK
KyBjYXNlIEZVU0RfRk9QU19DQUxMOiAvKiBjb21tb24gY2FzZSAqLworIGZ1c2RfbXNnLT5wYXJt
LmZvcHNfbXNnLmhpbnQgPSBmdXNkX2ZpbGUtPmluZGV4OworCisgYnJlYWs7CisKKyBjYXNlIEZV
U0RfRk9QU19DQUxMX0RST1BSRVBMWToKKyAvKiBub3RoaW5nIG5lZWRlZCAqLworIGJyZWFrOwor
CisgY2FzZSBGVVNEX0ZPUFNfTk9OQkxPQ0s6CisgZnVzZF9tc2ctPnBhcm0uZm9wc19tc2cuaGlu
dCA9IGZ1c2RfZmlsZS0+aW5kZXg7CisgYnJlYWs7CisKKyBkZWZhdWx0OgorIFJERUJVRygwLCAi
d2hvYSAtIGZ1c2RfZm9wc19jYWxsX3NlbmQgZ290IG1zZyB3aXRoIHVua25vd24gY21kISIpOwor
IGJyZWFrOworIH0KKworIGlmKHRyYW5zYWN0aW9uICE9IE5VTEwpCisgeworIGludCByZXR2YWw7
CisgcmV0dmFsID0gZnVzZF9hZGRfdHJhbnNhY3Rpb24oZnVzZF9maWxlLCBmdXNkX21zZy0+cGFy
bS5mb3BzX21zZy50cmFuc2lkLCBmdXNkX21zZy0+c3ViY21kLAorIGZ1c2RfbXNnLT5wYXJtLmZv
cHNfbXNnLmxlbmd0aCwgdHJhbnNhY3Rpb24pOworIGlmKHJldHZhbCA8IDApCisgcmV0dXJuIHJl
dHZhbDsKKyB9CiAKLSAgLyogbWFrZSBzdXJlIG1lc3NhZ2UgaXMgc2FuZSAqLwotICBpZiAoKGZ1
c2RfbXNnLT5kYXRhID09IE5VTEwpICE9IChmdXNkX21zZy0+ZGF0YWxlbiA9PSAwKSkgewotICAg
IFJERUJVRygyLCAiZnVzZF9mb3BzX2NhbGw6IGRhdGEgcG9pbnRlciBhbmQgZGF0YWxlbiBtaXNt
YXRjaCIpOwotICAgIHJldHVybiAtRUlOVkFMOwotICB9Ci0KLSAgLyogZmlsbCB0aGUgcmVzdCBv
ZiB0aGUgc3RydWN0dXJlICovCi0gIGZ1c2RfbXNnLT5wYXJtLmZvcHNfbXNnLnBpZCA9IGN1cnJl
bnQtPnBpZDsKLSAgZnVzZF9tc2ctPnBhcm0uZm9wc19tc2cudWlkID0gY3VycmVudC0+dWlkOwot
ICBmdXNkX21zZy0+cGFybS5mb3BzX21zZy5naWQgPSBjdXJyZW50LT5naWQ7Ci0gIGZ1c2RfbXNn
LT5wYXJtLmZvcHNfbXNnLmZsYWdzID0gZnVzZF9maWxlLT5maWxlLT5mX2ZsYWdzOwotICBmdXNk
X21zZy0+cGFybS5mb3BzX21zZy5vZmZzZXQgPSBmdXNkX2ZpbGUtPmZpbGUtPmZfcG9zOwotICBm
dXNkX21zZy0+cGFybS5mb3BzX21zZy5kZXZpY2VfaW5mbyA9IGZ1c2RfZGV2LT5wcml2YXRlX2Rh
dGE7Ci0gIGZ1c2RfbXNnLT5wYXJtLmZvcHNfbXNnLnByaXZhdGVfaW5mbyA9IGZ1c2RfZmlsZS0+
cHJpdmF0ZV9kYXRhOwotICBmdXNkX21zZy0+cGFybS5mb3BzX21zZy5mdXNkX2ZpbGUgPSBmdXNk
X2ZpbGU7Ci0gIGZ1c2RfbXNnLT5wYXJtLmZvcHNfbXNnLnRyYW5zaWQgPSBhdG9taWNfaW5jX2Fu
ZF9yZXQoJmxhc3RfdHJhbnNpZCk7Ci0KLSAgLyogc2V0IHVwIGNlcnRhaW4gc3RhdGUgZGVwZW5k
aW5nIG9uIGlmIHdlIGV4cGVjdCBhIHJlcGx5ICovCi0gIHN3aXRjaCAoZnVzZF9tc2ctPmNtZCkg
ewotCi0gIGNhc2UgRlVTRF9GT1BTX0NBTEw6IC8qIGNvbW1vbiBjYXNlICovCi0gICAgZnVzZF9t
c2ctPnBhcm0uZm9wc19tc2cuaGludCA9IGZ1c2RfZmlsZS0+aW5kZXg7Ci0gICAgIAotICAgIGJy
ZWFrOwotCi0gIGNhc2UgRlVTRF9GT1BTX0NBTExfRFJPUFJFUExZOgotICAgIC8qIG5vdGhpbmcg
bmVlZGVkICovCi0gICAgYnJlYWs7Ci0KLSAgY2FzZSBGVVNEX0ZPUFNfTk9OQkxPQ0s6Ci0gICAg
ZnVzZF9tc2ctPnBhcm0uZm9wc19tc2cuaGludCA9IGZ1c2RfZmlsZS0+aW5kZXg7Ci0gICAgYnJl
YWs7Ci0KLSAgZGVmYXVsdDoKLSAgICBSREVCVUcoMCwgIndob2EgLSBmdXNkX2ZvcHNfY2FsbF9z
ZW5kIGdvdCBtc2cgd2l0aCB1bmtub3duIGNtZCEiKTsKLSAgICBicmVhazsKLSAgfQotICAKLSAg
aWYodHJhbnNhY3Rpb24gIT0gTlVMTCkKLSAgewotICAgIGludCByZXR2YWw7Ci0gICAgcmV0dmFs
ID0gZnVzZF9hZGRfdHJhbnNhY3Rpb24oZnVzZF9maWxlLCBmdXNkX21zZy0+cGFybS5mb3BzX21z
Zy50cmFuc2lkLCBmdXNkX21zZy0+c3ViY21kLAotICAgICAgICAgICAgICAgICAgICBmdXNkX21z
Zy0+cGFybS5mb3BzX21zZy5sZW5ndGgsIHRyYW5zYWN0aW9uKTsKLSAgICBpZihyZXR2YWwgPCAw
KQotICAgICAgcmV0dXJuIHJldHZhbDsKLSAgfQotICAKLSAgLyogbm93IGFkZCB0aGUgbWVzc2Fn
ZSB0byB0aGUgZGV2aWNlJ3Mgb3V0Z29pbmcgcXVldWUhICovCi0gIHJldHVybiBzZW5kX3RvX2Rl
dihmdXNkX2RldiwgZnVzZF9tc2csIDApOworIC8qIG5vdyBhZGQgdGhlIG1lc3NhZ2UgdG8gdGhl
IGRldmljZSdzIG91dGdvaW5nIHF1ZXVlISAqLworIHJldHVybiBzZW5kX3RvX2RldihmdXNkX2Rl
diwgZnVzZF9tc2csIDApOwogCiAKLSAgLyogYml6YXJyZSBlcnJvcnMgZ28gc3RyYWlnaHQgaGVy
ZSAqLworIC8qIGJpemFycmUgZXJyb3JzIGdvIHN0cmFpZ2h0IGhlcmUgKi8KICBpbnZhbGlkX2Rl
djoKICBpbnZhbGlkX2ZpbGU6Ci0gIFJERUJVRygwLCAiZnVzZF9mb3BzX2NhbGw6IGdvdCBpbnZh
bGlkIGRldmljZSBvciBmaWxlISEhISIpOwotICByZXR1cm4gLUVQSVBFOworIFJERUJVRygwLCAi
ZnVzZF9mb3BzX2NhbGw6IGdvdCBpbnZhbGlkIGRldmljZSBvciBmaWxlISEhISIpOworIHJldHVy
biAtRVBJUEU7CiB9CiAKIApAQCAtNzgzLDEwOSArNzgzLDEwOSBAQAogICogZnVuY3Rpb24gaXMg
Y2FsbGVkLCBidXQgTk9UIHRoZSBsb2NrIG9uIHRoZSBmdXNkX2RldgogICovCiBTVEFUSUMgaW50
IGZ1c2RfZm9wc19jYWxsX3dhaXQoZnVzZF9maWxlX3QgKmZ1c2RfZmlsZV9hcmcsCi0JCQkgICAg
ICAgZnVzZF9tc2dfdCAqKmZ1c2RfbXNnX3JlcGx5LCBzdHJ1Y3QgZnVzZF90cmFuc2FjdGlvbiog
dHJhbnNhY3Rpb24pCisgZnVzZF9tc2dfdCAqKmZ1c2RfbXNnX3JlcGx5LCBzdHJ1Y3QgZnVzZF90
cmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCiB7Ci0gIGZ1c2RfZGV2X3QgKmZ1c2RfZGV2OwotICBm
dXNkX2ZpbGVfdCAqZnVzZF9maWxlOwotICBpbnQgcmV0dmFsOwotCi0gIC8qIEkgY2hlY2sgdGhp
cyBqdXN0IGluIGNhc2UsIHNob3VsZG4ndCBiZSBuZWNlc3NhcnkuICovCi0gIEdFVF9GVVNEX0ZJ
TEVfQU5EX0RFVihmdXNkX2ZpbGVfYXJnLCBmdXNkX2ZpbGUsIGZ1c2RfZGV2KTsKLQotICAvKiBp
bml0aWFsaXplIGZpcnN0IHRvIHRlbGwgY2FsbGVycyB0aGVyZSBpcyBubyByZXBseSAoeWV0KSAq
LwotICBpZiAoZnVzZF9tc2dfcmVwbHkgIT0gTlVMTCkKLSAgICAqZnVzZF9tc2dfcmVwbHkgPSBO
VUxMOwotCi0gIC8qCi0gICAqIE5vdywgbG9jayB0aGUgZGV2aWNlLCBjaGVjayBmb3IgYW4gaW5j
b21pbmcgbWVzc2FnZSwgYW5kIHNsZWVwIGlmCi0gICAqIHRoZXJlIGlzIG5vdCBhIG1lc3NhZ2Ug
YWxyZWFkeSB3YWl0aW5nIGZvciB1cy4gIE5vdGUgdGhhdCB3ZSBhcmUKLSAgICogdW5yb2xsaW5n
IHRoZSBpbnRlcnJ1cHRpYmxlX3NsZWVwX29uLCBhcyBpbiB0aGUga2VybmVsJ3MKLSAgICogZnMv
cGlwZS5jLCB0byBhdm9pZCByYWNlIGNvbmRpdGlvbnMgYmV0d2VlbiBjaGVja2luZyBmb3IgdGhl
Ci0gICAqIHNsZWVwIGNvbmRpdGlvbiBhbmQgc2xlZXBpbmcuCi0gICAqLwotICBMT0NLX0ZVU0Rf
REVWKGZ1c2RfZGV2KTsKLSAgd2hpbGUgKHRyYW5zYWN0aW9uLT5tc2dfaW4gPT0gTlVMTCkgewot
ICAgIERFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOwotCi0gICAgUkRFQlVHKDEwLCAi
cGlkICVkIGJsb2NraW5nIG9uIHRyYW5zaWQgJWxkIiwgY3VycmVudC0+cGlkLCB0cmFuc2FjdGlv
bi0+dHJhbnNpZCk7Ci0gICAgY3VycmVudC0+c3RhdGUgPSBUQVNLX0lOVEVSUlVQVElCTEU7Ci0g
ICAgYWRkX3dhaXRfcXVldWUoJmZ1c2RfZmlsZS0+ZmlsZV93YWl0LCAmd2FpdCk7Ci0gICAgVU5M
T0NLX0ZVU0RfREVWKGZ1c2RfZGV2KTsKLSAgICBVTkxPQ0tfRlVTRF9GSUxFKGZ1c2RfZmlsZSk7
Ci0KLSAgICBzY2hlZHVsZSgpOwotICAgIHJlbW92ZV93YWl0X3F1ZXVlKCZmdXNkX2ZpbGUtPmZp
bGVfd2FpdCwgJndhaXQpOwotICAgIGN1cnJlbnQtPnN0YXRlID0gVEFTS19SVU5OSU5HOwotCi0g
ICAgLyoKLSAgICAgKiBJZiB3ZSB3b2tlIHVwIGR1ZSB0byBhIHNpZ25hbCAtLSBhbmQgbm90IGR1
ZSB0byBhIHJlcGx5IG1lc3NhZ2UKLSAgICAgKiBjb21pbmcgaW4gLS0gdGhlbiB3ZSBhcmUgaW4g
c29tZSB0cm91YmxlLiAgVGhlIGRyaXZlciBpcyBhbHJlYWR5Ci0gICAgICogcHJvY2Vzc2luZyB0
aGUgcmVxdWVzdCBhbmQgbWlnaHQgaGF2ZSBjaGFuZ2VkIHNvbWUgc3RhdGUgdGhhdCBpcwotICAg
ICAqIGhhcmQgdG8gcm9sbCBiYWNrLiAgU28sIHdlJ2xsIHRlbGwgdGhlIHByb2Nlc3MgdG8gcmVz
dGFydCB0aGUKLSAgICAgKiBzeXN0ZW0gY2FsbCwgYW5kIGNvbWUgYmFjayB0byB0aGlzIHBvaW50
IHdoZW4gdGhlIHN5c3RlbSBjYWxsIGlzCi0gICAgICogcmVzdGFydGVkLiAgV2UgbmVlZCB0byBy
ZW1lbWJlciB0aGUgUElEIHRvIGF2b2lkIGNvbmZ1c2lvbiBpbgotICAgICAqIGNhc2UgdGhlcmUg
aXMgYW5vdGhlciBwcm9jZXNzIGhvbGRpbmcgdGhpcyBmaWxlIGRlc2NyaXB0b3IgdGhhdAotICAg
ICAqIGlzIGFsc28gdHJ5aW5nIHRvIG1ha2UgYSBjYWxsLgotICAgICAqLwotICAgIGlmIChzaWdu
YWxfcGVuZGluZyhjdXJyZW50KSkgewotICAgICAgUkRFQlVHKDUsICJibG9ja2VkIHBpZCAlZCBn
b3QgYSBzaWduYWw7IHNlbmRpbmcgLUVSRVNUQVJUU1lTIiwKLQkgICAgIGN1cnJlbnQtPnBpZCk7
Ci0JCQlMT0NLX0ZVU0RfRklMRShmdXNkX2ZpbGUpOwotICAgICAgcmV0dXJuIC1FUkVTVEFSVFNZ
UzsKLSAgICB9Ci0KLSAgICBMT0NLX0ZVU0RfRklMRShmdXNkX2ZpbGUpOwotICAgIC8qIHJlLWxv
Y2sgdGhlIGRldmljZSwgc28gd2UgY2FuIGRvIG91ciBtc2dfaW4gY2hlY2sgYWdhaW4gKi8KLSAg
ICBMT0NLX0ZVU0RfREVWKGZ1c2RfZGV2KTsKLSAgfQotICBVTkxPQ0tfRlVTRF9ERVYoZnVzZF9k
ZXYpOwotCi0gIC8qIG9rIC0gYXQgdGhpcyBwb2ludCB3ZSBhcmUgYXdha2UgZHVlIHRvIGEgbWVz
c2FnZSByZWNlaXZlZC4gKi8KLQotICBpZiAodHJhbnNhY3Rpb24tPm1zZ19pbi0+Y21kICE9IEZV
U0RfRk9QU19SRVBMWSB8fAotICAgICAgdHJhbnNhY3Rpb24tPm1zZ19pbi0+c3ViY21kICE9IHRy
YW5zYWN0aW9uLT5zdWJjbWQgfHwKLSAgICAgIHRyYW5zYWN0aW9uLT5tc2dfaW4tPnBhcm0uZm9w
c19tc2cudHJhbnNpZCAhPSB0cmFuc2FjdGlvbi0+dHJhbnNpZCB8fAotICAgICAgdHJhbnNhY3Rp
b24tPm1zZ19pbi0+cGFybS5mb3BzX21zZy5mdXNkX2ZpbGUgIT0gZnVzZF9maWxlKSB7Ci0gICAg
UkRFQlVHKDIsICJmdXNkX2ZvcHNfY2FsbDogaW52YWxpZCByZXBseSEiKTsKLSAgICBnb3RvIGlu
dmFsaWRfcmVwbHk7Ci0gIH0KLQotICAvKiBjb3B5IG1ldGFkYXRhIGJhY2sgZnJvbSB1c2Vyc3Bh
Y2UgKi8KLSAgZnVzZF9maWxlLT5maWxlLT5mX2ZsYWdzID0gdHJhbnNhY3Rpb24tPm1zZ19pbi0+
cGFybS5mb3BzX21zZy5mbGFnczsKLSAgZnVzZF9maWxlLT5wcml2YXRlX2RhdGEgID0gdHJhbnNh
Y3Rpb24tPm1zZ19pbi0+cGFybS5mb3BzX21zZy5wcml2YXRlX2luZm87Ci0gIC8qIG5vdGUsIGNo
YW5nZXMgdG8gZGV2aWNlX2luZm8gYXJlIE5PIExPTkdFUiBob25vcmVkIGhlcmUgKi8KLQotICAv
KiBpZiBldmVyeXRoaW5nJ3Mgb2theSwgcmV0dXJuIHRoZSByZXR1cm4gdmFsdWUuICBpZiBjYWxs
ZXIgaXMKLSAgICogd2lsbGluZyB0byB0YWtlIHJlc3BvbnNpYmlsaXR5IGZvciBmcmVlaW5nIHRo
ZSBtZXNzYWdlIGl0c2VsZiwgd2UKLSAgICogcmV0dXJuIHRoZSBtZXNzYWdlIHRvby4gKi8KLSAg
cmV0dmFsID0gdHJhbnNhY3Rpb24tPm1zZ19pbi0+cGFybS5mb3BzX21zZy5yZXR2YWw7Ci0gIGlm
IChmdXNkX21zZ19yZXBseSAhPSBOVUxMKSB7Ci0gICAgLyogTk9XIFRSQU5TRkVSUklORyBSRVNQ
T05TSUJJTElUWSBGT1IgRlJFRUlORyBUSElTIERBVEEgVE8gVEhFIENBTExFUiAqLwotICAgICpm
dXNkX21zZ19yZXBseSA9IHRyYW5zYWN0aW9uLT5tc2dfaW47Ci0gICAgdHJhbnNhY3Rpb24tPm1z
Z19pbiA9IE5VTEw7Ci0gIH0gZWxzZSB7Ci0gICAgLyogZnJlZSB0aGUgbWVzc2FnZSBvdXJzZWx2
ZXMgKi8KLSAgICBmcmVlX2Z1c2RfbXNnKCZ0cmFuc2FjdGlvbi0+bXNnX2luKTsKLSAgfQotICAK
LSAgLyogc3VjY2VzcyAqLwotICBmdXNkX2NsZWFudXBfdHJhbnNhY3Rpb24oZnVzZF9maWxlLCB0
cmFuc2FjdGlvbik7Ci0gIHJldHVybiByZXR2YWw7CisgZnVzZF9kZXZfdCAqZnVzZF9kZXY7Cisg
ZnVzZF9maWxlX3QgKmZ1c2RfZmlsZTsKKyBpbnQgcmV0dmFsOworCisgLyogSSBjaGVjayB0aGlz
IGp1c3QgaW4gY2FzZSwgc2hvdWxkbid0IGJlIG5lY2Vzc2FyeS4gKi8KKyBHRVRfRlVTRF9GSUxF
X0FORF9ERVYoZnVzZF9maWxlX2FyZywgZnVzZF9maWxlLCBmdXNkX2Rldik7CisKKyAvKiBpbml0
aWFsaXplIGZpcnN0IHRvIHRlbGwgY2FsbGVycyB0aGVyZSBpcyBubyByZXBseSAoeWV0KSAqLwor
IGlmIChmdXNkX21zZ19yZXBseSAhPSBOVUxMKQorICpmdXNkX21zZ19yZXBseSA9IE5VTEw7CisK
KyAvKgorICogTm93LCBsb2NrIHRoZSBkZXZpY2UsIGNoZWNrIGZvciBhbiBpbmNvbWluZyBtZXNz
YWdlLCBhbmQgc2xlZXAgaWYKKyAqIHRoZXJlIGlzIG5vdCBhIG1lc3NhZ2UgYWxyZWFkeSB3YWl0
aW5nIGZvciB1cy4gTm90ZSB0aGF0IHdlIGFyZQorICogdW5yb2xsaW5nIHRoZSBpbnRlcnJ1cHRp
YmxlX3NsZWVwX29uLCBhcyBpbiB0aGUga2VybmVsJ3MKKyAqIGZzL3BpcGUuYywgdG8gYXZvaWQg
cmFjZSBjb25kaXRpb25zIGJldHdlZW4gY2hlY2tpbmcgZm9yIHRoZQorICogc2xlZXAgY29uZGl0
aW9uIGFuZCBzbGVlcGluZy4KKyAqLworIExPQ0tfRlVTRF9ERVYoZnVzZF9kZXYpOworIHdoaWxl
ICh0cmFuc2FjdGlvbi0+bXNnX2luID09IE5VTEwpIHsKKyBERUNMQVJFX1dBSVRRVUVVRSh3YWl0
LCBjdXJyZW50KTsKKworIFJERUJVRygxMCwgInBpZCAlZCBibG9ja2luZyBvbiB0cmFuc2lkICVs
ZCIsIGN1cnJlbnQtPnBpZCwgdHJhbnNhY3Rpb24tPnRyYW5zaWQpOworIGN1cnJlbnQtPnN0YXRl
ID0gVEFTS19JTlRFUlJVUFRJQkxFOworIGFkZF93YWl0X3F1ZXVlKCZmdXNkX2ZpbGUtPmZpbGVf
d2FpdCwgJndhaXQpOworIFVOTE9DS19GVVNEX0RFVihmdXNkX2Rldik7CisgVU5MT0NLX0ZVU0Rf
RklMRShmdXNkX2ZpbGUpOworCisgc2NoZWR1bGUoKTsKKyByZW1vdmVfd2FpdF9xdWV1ZSgmZnVz
ZF9maWxlLT5maWxlX3dhaXQsICZ3YWl0KTsKKyBjdXJyZW50LT5zdGF0ZSA9IFRBU0tfUlVOTklO
RzsKKworIC8qCisgKiBJZiB3ZSB3b2tlIHVwIGR1ZSB0byBhIHNpZ25hbCAtLSBhbmQgbm90IGR1
ZSB0byBhIHJlcGx5IG1lc3NhZ2UKKyAqIGNvbWluZyBpbiAtLSB0aGVuIHdlIGFyZSBpbiBzb21l
IHRyb3VibGUuIFRoZSBkcml2ZXIgaXMgYWxyZWFkeQorICogcHJvY2Vzc2luZyB0aGUgcmVxdWVz
dCBhbmQgbWlnaHQgaGF2ZSBjaGFuZ2VkIHNvbWUgc3RhdGUgdGhhdCBpcworICogaGFyZCB0byBy
b2xsIGJhY2suIFNvLCB3ZSdsbCB0ZWxsIHRoZSBwcm9jZXNzIHRvIHJlc3RhcnQgdGhlCisgKiBz
eXN0ZW0gY2FsbCwgYW5kIGNvbWUgYmFjayB0byB0aGlzIHBvaW50IHdoZW4gdGhlIHN5c3RlbSBj
YWxsIGlzCisgKiByZXN0YXJ0ZWQuIFdlIG5lZWQgdG8gcmVtZW1iZXIgdGhlIFBJRCB0byBhdm9p
ZCBjb25mdXNpb24gaW4KKyAqIGNhc2UgdGhlcmUgaXMgYW5vdGhlciBwcm9jZXNzIGhvbGRpbmcg
dGhpcyBmaWxlIGRlc2NyaXB0b3IgdGhhdAorICogaXMgYWxzbyB0cnlpbmcgdG8gbWFrZSBhIGNh
bGwuCisgKi8KKyBpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKyBSREVCVUcoNSwgImJs
b2NrZWQgcGlkICVkIGdvdCBhIHNpZ25hbDsgc2VuZGluZyAtRVJFU1RBUlRTWVMiLAorIGN1cnJl
bnQtPnBpZCk7CisgTE9DS19GVVNEX0ZJTEUoZnVzZF9maWxlKTsKKyByZXR1cm4gLUVSRVNUQVJU
U1lTOworIH0KKworIExPQ0tfRlVTRF9GSUxFKGZ1c2RfZmlsZSk7CisgLyogcmUtbG9jayB0aGUg
ZGV2aWNlLCBzbyB3ZSBjYW4gZG8gb3VyIG1zZ19pbiBjaGVjayBhZ2FpbiAqLworIExPQ0tfRlVT
RF9ERVYoZnVzZF9kZXYpOworIH0KKyBVTkxPQ0tfRlVTRF9ERVYoZnVzZF9kZXYpOworCisgLyog
b2sgLSBhdCB0aGlzIHBvaW50IHdlIGFyZSBhd2FrZSBkdWUgdG8gYSBtZXNzYWdlIHJlY2VpdmVk
LiAqLworCisgaWYgKHRyYW5zYWN0aW9uLT5tc2dfaW4tPmNtZCAhPSBGVVNEX0ZPUFNfUkVQTFkg
fHwKKyB0cmFuc2FjdGlvbi0+bXNnX2luLT5zdWJjbWQgIT0gdHJhbnNhY3Rpb24tPnN1YmNtZCB8
fAorIHRyYW5zYWN0aW9uLT5tc2dfaW4tPnBhcm0uZm9wc19tc2cudHJhbnNpZCAhPSB0cmFuc2Fj
dGlvbi0+dHJhbnNpZCB8fAorIHRyYW5zYWN0aW9uLT5tc2dfaW4tPnBhcm0uZm9wc19tc2cuZnVz
ZF9maWxlICE9IGZ1c2RfZmlsZSkgeworIFJERUJVRygyLCAiZnVzZF9mb3BzX2NhbGw6IGludmFs
aWQgcmVwbHkhIik7CisgZ290byBpbnZhbGlkX3JlcGx5OworIH0KKworIC8qIGNvcHkgbWV0YWRh
dGEgYmFjayBmcm9tIHVzZXJzcGFjZSAqLworIGZ1c2RfZmlsZS0+ZmlsZS0+Zl9mbGFncyA9IHRy
YW5zYWN0aW9uLT5tc2dfaW4tPnBhcm0uZm9wc19tc2cuZmxhZ3M7CisgZnVzZF9maWxlLT5wcml2
YXRlX2RhdGEgPSB0cmFuc2FjdGlvbi0+bXNnX2luLT5wYXJtLmZvcHNfbXNnLnByaXZhdGVfaW5m
bzsKKyAvKiBub3RlLCBjaGFuZ2VzIHRvIGRldmljZV9pbmZvIGFyZSBOTyBMT05HRVIgaG9ub3Jl
ZCBoZXJlICovCisKKyAvKiBpZiBldmVyeXRoaW5nJ3Mgb2theSwgcmV0dXJuIHRoZSByZXR1cm4g
dmFsdWUuIGlmIGNhbGxlciBpcworICogd2lsbGluZyB0byB0YWtlIHJlc3BvbnNpYmlsaXR5IGZv
ciBmcmVlaW5nIHRoZSBtZXNzYWdlIGl0c2VsZiwgd2UKKyAqIHJldHVybiB0aGUgbWVzc2FnZSB0
b28uICovCisgcmV0dmFsID0gdHJhbnNhY3Rpb24tPm1zZ19pbi0+cGFybS5mb3BzX21zZy5yZXR2
YWw7CisgaWYgKGZ1c2RfbXNnX3JlcGx5ICE9IE5VTEwpIHsKKyAvKiBOT1cgVFJBTlNGRVJSSU5H
IFJFU1BPTlNJQklMSVRZIEZPUiBGUkVFSU5HIFRISVMgREFUQSBUTyBUSEUgQ0FMTEVSICovCisg
KmZ1c2RfbXNnX3JlcGx5ID0gdHJhbnNhY3Rpb24tPm1zZ19pbjsKKyB0cmFuc2FjdGlvbi0+bXNn
X2luID0gTlVMTDsKKyB9IGVsc2UgeworIC8qIGZyZWUgdGhlIG1lc3NhZ2Ugb3Vyc2VsdmVzICov
CisgZnJlZV9mdXNkX21zZygmdHJhbnNhY3Rpb24tPm1zZ19pbik7CisgfQorCisgLyogc3VjY2Vz
cyAqLworIGZ1c2RfY2xlYW51cF90cmFuc2FjdGlvbihmdXNkX2ZpbGUsIHRyYW5zYWN0aW9uKTsK
KyByZXR1cm4gcmV0dmFsOwogCiAgaW52YWxpZF9yZXBseToKLSAgZnVzZF9jbGVhbnVwX3RyYW5z
YWN0aW9uKGZ1c2RfZmlsZSwgdHJhbnNhY3Rpb24pOwotICByZXR1cm4gLUVQSVBFOworIGZ1c2Rf
Y2xlYW51cF90cmFuc2FjdGlvbihmdXNkX2ZpbGUsIHRyYW5zYWN0aW9uKTsKKyByZXR1cm4gLUVQ
SVBFOwogCi0gIC8qIGJpemFycmUgZXJyb3JzIGdvIHN0cmFpZ2h0IGhlcmUgKi8KKyAvKiBiaXph
cnJlIGVycm9ycyBnbyBzdHJhaWdodCBoZXJlICovCiAgaW52YWxpZF9kZXY6CiAgaW52YWxpZF9m
aWxlOgotICBSREVCVUcoMCwgImZ1c2RfZm9wc19jYWxsOiBnb3QgaW52YWxpZCBkZXZpY2Ugb3Ig
ZmlsZSEhISEiKTsKLSAgcmV0dXJuIC1FUElQRTsKKyBSREVCVUcoMCwgImZ1c2RfZm9wc19jYWxs
OiBnb3QgaW52YWxpZCBkZXZpY2Ugb3IgZmlsZSEhISEiKTsKKyByZXR1cm4gLUVQSVBFOwogCiAg
em9tYmllX2RldjoKLSAgUkRFQlVHKDIsICJmdXNkX2ZvcHNfY2FsbDogJXMgem9tYmlmaWVkIHdo
aWxlIHdhaXRpbmcgZm9yIHJlcGx5IiwKLQkgTkFNRShmdXNkX2RldikpOwotICByZXR1cm4gLUVQ
SVBFOworIFJERUJVRygyLCAiZnVzZF9mb3BzX2NhbGw6ICVzIHpvbWJpZmllZCB3aGlsZSB3YWl0
aW5nIGZvciByZXBseSIsCisgTkFNRShmdXNkX2RldikpOworIHJldHVybiAtRVBJUEU7CiB9CiAK
IApAQCAtODkzLDggKzg5Myw4IEBACiAgKiBmb3BzX2NhbGwsIHRvIGRlc3Ryb3kgdGhlIG1lc3Nh
Z2UgdGhhdCB3YXMgcmV0dXJuZWQgdG8gdGhlbS4gKi8KIFNUQVRJQyB2b2lkIGZ1c2RfdHJhbnNh
Y3Rpb25fZG9uZShzdHJ1Y3QgZnVzZF90cmFuc2FjdGlvbiAqdHJhbnNhY3Rpb24pCiB7Ci0JdHJh
bnNhY3Rpb24tPnRyYW5zaWQgPSAtMTsKLQl0cmFuc2FjdGlvbi0+cGlkID0gMDsKKyB0cmFuc2Fj
dGlvbi0+dHJhbnNpZCA9IC0xOworIHRyYW5zYWN0aW9uLT5waWQgPSAwOwogfQogCiAKQEAgLTkw
NSwyOSArOTA1LDI5IEBACiAvKgogICogVGhlIHByb2Nlc3Mgb2YgaGF2aW5nIGEgY2xpZW50IG9w
ZW4gYSBGVVNEIGRldmljZSBpcyBzdXJwcmlzaW5nbHkKICAqIHRyaWNreSAtLSBwZXJoYXBzIHRo
ZSBtb3N0IGNvbXBsZXggcGllY2Ugb2YgRlVTRCAob3IsIGEgY2xvc2UKLSAqIHNlY29uZCB0byBw
b2xsX2RpZmZzKS4gIFJhY2UgY29uZGl0aW9ucyBhcmUgcmFtcGFudCBoZXJlLgorICogc2Vjb25k
IHRvIHBvbGxfZGlmZnMpLiBSYWNlIGNvbmRpdGlvbnMgYXJlIHJhbXBhbnQgaGVyZS4KICAqCiAg
KiBUaGUgbWFpbiBwcm9ibGVtIGlzIHRoYXQgdGhlcmUgaXMgYSByYWNlIGJldHdlZW4gY2xpZW50
cyB0cnlpbmcgdG8KICAqIG9wZW4gdGhlIEZVU0QgZGV2aWNlLCBhbmQgcHJvdmlkZXJzIHVucmVn
aXN0ZXJpbmcgaXQgKGUuZy4sIHRoZQotICogZHJpdmVyIGR5aW5nKS4gIElmIHRoZSBkZXZpY2Ut
dW5yZWdpc3RlciBjYWxsYmFjayBzdGFydHMsIGFuZCBpcworICogZHJpdmVyIGR5aW5nKS4gSWYg
dGhlIGRldmljZS11bnJlZ2lzdGVyIGNhbGxiYWNrIHN0YXJ0cywgYW5kIGlzCiAgKiBzY2hlZHVs
ZWQgb3V0IGFmdGVyIGl0IGxvY2tzIHRoZSBmdXNkIGRldmljZSBidXQgYmVmb3JlIGl0CiAgKiB1
bnJlZ2lzdGVycyB0aGUgZGV2aWNlIHdpdGggZGV2ZnMsIHRoZSBvcGVuIGNhbGxiYWNrIG1pZ2h0
IGJlCi0gKiBpbnZva2VkIGluIHRoaXMgaW50ZXJ2YWwuICBUaGlzIG1lYW5zIHRoZSBjbGllbnQg
d2lsbCBkb3duKCkgb24gYQorICogaW52b2tlZCBpbiB0aGlzIGludGVydmFsLiBUaGlzIG1lYW5z
IHRoZSBjbGllbnQgd2lsbCBkb3duKCkgb24gYQogICogc2VtYXBob3JlIHRoYXQgaXMgYWJvdXQg
dG8gYmUgZnJlZWQgd2hlbiB0aGUgZGV2aWNlIGlzIGRlc3Ryb3llZC4KICAqCiAgKiBUaGUgb25s
eSB3YXkgdG8gZml4IHRoaXMsIGFzIGZhciBhcyBJIGNhbiB0ZWxsLCBpcyBmb3IgZGV2aWNlCiAg
KiByZWdpc3RyYXRpb24gYW5kIHVucmVnaXN0cmF0aW9uIHRvIGJvdGggc2hhcmUgYSBnbG9iYWwg
bG9jazsgdGhlCiAgKiBjbGllbnQgY2hlY2tzIGl0cyAncHJpdmF0ZV9kYXRhJyBwb2ludGVyIHRv
IG1ha2Ugc3VyZSBpdCdzIG9uIHRoZQotICogbGlzdCBvZiB2YWxpZCBkZXZpY2VzLiAgSWYgc28s
IGl0IHNldHMgYSBmbGFnIChvcGVuX2luX3Byb2dyZXNzKQotICogd2hpY2ggbWVhbnMgIkRvbid0
IGZyZWUgdGhpcyBkZXZpY2UgeWV0ISIuICBUaGVuLCBpdCByZWxlYXNlcyB0aGUKKyAqIGxpc3Qg
b2YgdmFsaWQgZGV2aWNlcy4gSWYgc28sIGl0IHNldHMgYSBmbGFnIChvcGVuX2luX3Byb2dyZXNz
KQorICogd2hpY2ggbWVhbnMgIkRvbid0IGZyZWUgdGhpcyBkZXZpY2UgeWV0ISIuIFRoZW4sIGl0
IHJlbGVhc2VzIHRoZQogICogZ2xvYmFsIGxvY2ssIGdyYWJzIHRoZSBkZXZpY2UgbG9jaywgYW5k
IHRyaWVzIHRvIGFkZCBpdHNlbGYgYXMgYQotICogImZpbGUiIHRvIHRoZSBkZXZpY2UgYXJyYXku
ICBJdCBpcyB0aGVuIHNhZmUgdG8gZGVjcmVtZW50CisgKiAiZmlsZSIgdG8gdGhlIGRldmljZSBh
cnJheS4gSXQgaXMgdGhlbiBzYWZlIHRvIGRlY3JlbWVudAogICogb3Blbl9pbl9wcm9ncmVzcywg
YmVjYXVzZSBiZWluZyBhIG1lbWJlciBvZiB0aGUgZmlsZSBhcnJheSB3aWxsCiAgKiBndWFyYW50
ZWUgdGhhdCB0aGUgZGV2aWNlIHdpbGwgem9tYmlmeSBpbnN0ZWFkIG9mIGJlaW5nIGZyZWVkLgog
ICoKICAqIEFub3RoZXIgZ290Y2hhOiBUbyBhdm9pZCBpbmZpbml0ZWx5IGRpbmluZyB3aXRoIHBo
aWxvc29waGVycywgdGhlCiAgKiBnbG9iYWwgbG9jayAoZnVzZF9kZXZsaXN0X3NlbSkgc2hvdWxk
IGFsd2F5cyBiZSBhY3F1aXJlZCBBRlRFUiBhCi0gKiBmdXNkIGRldmljZSBpcyBsb2NrZWQuICBU
aGUgY29kZSBwYXRoIHRoYXQgZnJlZXMgZGV2aWNlcyBhY3F1aXJlcworICogZnVzZCBkZXZpY2Ug
aXMgbG9ja2VkLiBUaGUgY29kZSBwYXRoIHRoYXQgZnJlZXMgZGV2aWNlcyBhY3F1aXJlcwogICog
dGhlIGRldmljZSBsb2NrIEZJUlNULCBzbyB0aGUgY29kZSBoZXJlIG11c3QgZG8gdGhlIHNhbWUu
CiAgKgogICogQmVjYXVzZSBvZiB0aGUgY29tcGxleGl0eSBvZiBvcGVuaW5nIGEgZmlsZSwgSSd2
ZSBicm9rZW4gaXQgdXAgaW50bwpAQCAtOTQxLDExNCArOTQxLDExNCBAQAogICovCiBpbnQgZnVz
ZF9kZXZfaXNfdmFsaWQoZnVzZF9kZXZfdCAqZnVzZF9kZXYpCiB7Ci0gIHN0cnVjdCBsaXN0X2hl
YWQgKnRtcDsKLSAgaW50IGRldl9mb3VuZCA9IDA7Cisgc3RydWN0IGxpc3RfaGVhZCAqdG1wOwor
IGludCBkZXZfZm91bmQgPSAwOwogCi0gIC8qIFRoZSBmaXJzdCB0aGluZyB3ZSBtdXN0IGRvIGlz
IGFjcXVpcmUgdGhlIGdsb2JhbCBsb2NrIG9uIHRoZQotICAgKiBkZXZpY2UgbGlzdCwgYW5kIG1h
a2Ugc3VyZSB0aGlzIGRldmljZSBpcyB2YWxpZDsgaWYgc28sIG1hcmsgaXQKLSAgICogYXMgYmVp
bmcgImluIHVzZSIuICBJZiB3ZSBkb24ndCBkbyB0aGlzLCB0aGVyZSdzIGEgcmFjZTogYWZ0ZXIg
d2UKLSAgICogZW50ZXIgdGhpcyBmdW5jdGlvbiwgdGhlIGRldmljZSBtYXkgYmUgdW5yZWdpc3Rl
cmVkLiAqLwotICBkb3duKCZmdXNkX2Rldmxpc3Rfc2VtKTsKLSAgbGlzdF9mb3JfZWFjaCh0bXAs
ICZmdXNkX2Rldmxpc3RfaGVhZCkgewotICAgIGZ1c2RfZGV2X3QgKmQgPSBsaXN0X2VudHJ5KHRt
cCwgZnVzZF9kZXZfdCwgZGV2bGlzdCk7Ci0KLSAgICBpZiAoZCA9PSBmdXNkX2RldiAmJiBkLT5t
YWdpYyA9PSBGVVNEX0RFVl9NQUdJQyAmJiAhWk9NQklFKGQpKSB7Ci0gICAgICBkZXZfZm91bmQg
PSAxOwotICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0KLSAgLyogQSBkZXZpY2Ugd2lsbCBub3Qg
YmUgZGVhbGxvY2F0ZWQgd2hlbiB0aGlzIGNvdW50ZXIgaXMgPjAgKi8KLSAgaWYgKGRldl9mb3Vu
ZCkKLSAgICBmdXNkX2Rldi0+b3Blbl9pbl9wcm9ncmVzcysrOworIC8qIFRoZSBmaXJzdCB0aGlu
ZyB3ZSBtdXN0IGRvIGlzIGFjcXVpcmUgdGhlIGdsb2JhbCBsb2NrIG9uIHRoZQorICogZGV2aWNl
IGxpc3QsIGFuZCBtYWtlIHN1cmUgdGhpcyBkZXZpY2UgaXMgdmFsaWQ7IGlmIHNvLCBtYXJrIGl0
CisgKiBhcyBiZWluZyAiaW4gdXNlIi4gSWYgd2UgZG9uJ3QgZG8gdGhpcywgdGhlcmUncyBhIHJh
Y2U6IGFmdGVyIHdlCisgKiBlbnRlciB0aGlzIGZ1bmN0aW9uLCB0aGUgZGV2aWNlIG1heSBiZSB1
bnJlZ2lzdGVyZWQuICovCisgZG93bigmZnVzZF9kZXZsaXN0X3NlbSk7CisgbGlzdF9mb3JfZWFj
aCh0bXAsICZmdXNkX2Rldmxpc3RfaGVhZCkgeworIGZ1c2RfZGV2X3QgKmQgPSBsaXN0X2VudHJ5
KHRtcCwgZnVzZF9kZXZfdCwgZGV2bGlzdCk7CisKKyBpZiAoZCA9PSBmdXNkX2RldiAmJiBkLT5t
YWdpYyA9PSBGVVNEX0RFVl9NQUdJQyAmJiAhWk9NQklFKGQpKSB7CisgZGV2X2ZvdW5kID0gMTsK
KyBicmVhazsKKyB9CisgfQorCisgLyogQSBkZXZpY2Ugd2lsbCBub3QgYmUgZGVhbGxvY2F0ZWQg
d2hlbiB0aGlzIGNvdW50ZXIgaXMgPjAgKi8KKyBpZiAoZGV2X2ZvdW5kKQorIGZ1c2RfZGV2LT5v
cGVuX2luX3Byb2dyZXNzKys7CiAKLSAgdXAoJmZ1c2RfZGV2bGlzdF9zZW0pOworIHVwKCZmdXNk
X2Rldmxpc3Rfc2VtKTsKIAotICByZXR1cm4gZGV2X2ZvdW5kOworIHJldHVybiBkZXZfZm91bmQ7
CiB9CiAKIAogaW50IGZ1c2RfZGV2X2FkZF9maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBmdXNkX2Rl
dl90ICpmdXNkX2RldiwgZnVzZF9maWxlX3QgKipmdXNkX2ZpbGVfcmV0KQogewotICBmdXNkX2Zp
bGVfdCAqZnVzZF9maWxlOwotICBpbnQgaTsKKyBmdXNkX2ZpbGVfdCAqZnVzZF9maWxlOworIGlu
dCBpOwogCi0gIC8qIE1ha2Ugc3VyZSB0aGUgZGV2aWNlIGRpZG4ndCBiZWNvbWUgYSB6b21iaWUg
d2hpbGUgd2Ugd2VyZSB3YWl0aW5nCi0gICAqIGZvciB0aGUgZGV2aWNlIGxvY2sgKi8KLSAgaWYg
KFpPTUJJRShmdXNkX2RldikpCi0gICAgcmV0dXJuIC1FTk9FTlQ7Ci0KLSAgLyogdGhpcyBzaG91
bGRuJ3QgaGFwcGVuLiAgbWF5YmUgaSdtIGluc2FuZSwgYnV0IGkgY2hlY2sgYW55d2F5LiAqLwot
ICBmb3IgKGkgPSAwOyBpIDwgZnVzZF9kZXYtPm51bV9maWxlczsgaSsrKQotICAgIGlmIChmdXNk
X2Rldi0+ZmlsZXNbaV0tPmZpbGUgPT0gZmlsZSkgewotICAgICAgUkRFQlVHKDEsICJ3YXJuaW5n
OiBmdXNkX2NsaWVudF9vcGVuIGdvdCBvcGVuIGZvciBhbHJlYWR5LW9wZW4gZmlsZSE/Iik7Ci0g
ICAgICByZXR1cm4gLUVJTzsKLSAgICB9Ci0KLSAgLyogWW91IGNhbid0IG9wZW4geW91ciBvd24g
ZmlsZSEgIFJldHVybiAtRURFQURMT0NLIGlmIHNvbWVvbmUgdHJpZXMgdG8uCi0gICAqCi0gICAq
IFhYWCAtIFRPRE8gLSBGSVhNRSAtIFRoaXMgc2hvdWxkIGV2ZW50dWFsbHkgYmUgbW9yZSBnZW5l
cmFsCi0gICAqIGRlYWRsb2NrIGRldGVjdGlvbiBvZiBhcmJpdHJhcnkgbGVuZ3RoIGN5Y2xlcyAq
LwotICBpZiAoY3VycmVudC0+cGlkID09IGZ1c2RfZGV2LT5waWQpIHsKLSAgICBSREVCVUcoMywg
InBpZCAlZCB0cmllZCB0byBvcGVuIGl0cyBvd24gZGV2aWNlICgvZGV2LyVzKSIsCi0JICAgZnVz
ZF9kZXYtPnBpZCwgTkFNRShmdXNkX2RldikpOwotICAgIHJldHVybiAtRURFQURMT0NLOwotICB9
Ci0KLSAgLyogbWFrZSBtb3JlIHNwYWNlIGluIHRoZSBmaWxlIGFycmF5IGlmIHdlIG5lZWQgaXQg
Ki8KLSAgaWYgKGZ1c2RfZGV2LT5udW1fZmlsZXMgPT0gZnVzZF9kZXYtPmFycmF5X3NpemUgJiYK
LSAgICAgIGZ1c2RfZGV2LT5hcnJheV9zaXplIDwgTUFYX0ZJTEVBUlJBWV9TSVpFKQotICAgIGZ1
c2RfZGV2X2FkanNpemUoZnVzZF9kZXYpOwotCi0gIC8qIG1ha2Ugc3VyZSB3ZSBoYXZlIHJvb20u
Li4gYWRqc2l6ZSBtYXkgaGF2ZSBmYWlsZWQgKi8KLSAgaWYgKGZ1c2RfZGV2LT5udW1fZmlsZXMg
Pj0gZnVzZF9kZXYtPmFycmF5X3NpemUpIHsKLSAgICBSREVCVUcoMSwgIi9kZXYvJXMgb3V0IG9m
IHN0YXRlIHNwYWNlIGZvciBvcGVuIGZpbGVzISIsIE5BTUUoZnVzZF9kZXYpKTsKLSAgICByZXR1
cm4gLUVOT01FTTsKLSAgfQotCi0gIC8qIGNyZWF0ZSBzdGF0ZSBmb3IgdGhpcyBmaWxlICovCi0g
IGlmICgoZnVzZF9maWxlID0gS01BTExPQyhzaXplb2YoZnVzZF9maWxlX3QpLCBHRlBfS0VSTkVM
KSkgPT0gTlVMTCkgewotICAgIFJERUJVRygxLCAieWlrZXMhICBrZXJuZWwgY2FuJ3QgYWxsb2Nh
dGUgbWVtb3J5Iik7Ci0gICAgcmV0dXJuIC1FTk9NRU07Ci0gIH0KLSAgbWVtc2V0KGZ1c2RfZmls
ZSwgMCwgc2l6ZW9mKGZ1c2RfZmlsZV90KSk7Ci0gIGluaXRfd2FpdHF1ZXVlX2hlYWQoJmZ1c2Rf
ZmlsZS0+ZmlsZV93YWl0KTsKLSAgaW5pdF93YWl0cXVldWVfaGVhZCgmZnVzZF9maWxlLT5wb2xs
X3dhaXQpOwotCUlOSVRfTElTVF9IRUFEKCZmdXNkX2ZpbGUtPnRyYW5zYWN0aW9ucyk7Ci0gIGlu
aXRfTVVURVgoJmZ1c2RfZmlsZS0+ZmlsZV9zZW0pOwotICBpbml0X01VVEVYKCZmdXNkX2ZpbGUt
PnRyYW5zYWN0aW9uc19zZW0pOwotICBmdXNkX2ZpbGUtPmxhc3RfcG9sbF9zZW50ID0gLTE7Ci0g
IGZ1c2RfZmlsZS0+bWFnaWMgPSBGVVNEX0ZJTEVfTUFHSUM7Ci0gIGZ1c2RfZmlsZS0+ZnVzZF9k
ZXYgPSBmdXNkX2RldjsKLSAgZnVzZF9maWxlLT5mdXNkX2Rldl92ZXJzaW9uID0gZnVzZF9kZXYt
PnZlcnNpb247Ci0gIGZ1c2RfZmlsZS0+ZmlsZSA9IGZpbGU7Ci0KLSAgLyogYWRkIHRoaXMgZmls
ZSB0byB0aGUgbGlzdCBvZiBmaWxlcyBtYW5hZ2VkIGJ5IHRoZSBkZXZpY2UgKi8KLSAgZnVzZF9m
aWxlLT5pbmRleCA9IGZ1c2RfZGV2LT5udW1fZmlsZXMrKzsKLSAgZnVzZF9kZXYtPmZpbGVzW2Z1
c2RfZmlsZS0+aW5kZXhdID0gZnVzZF9maWxlOwotCi0gIC8qIHN0b3JlIHRoZSBwb2ludGVyIHRv
IHRoaXMgZmlsZSB3aXRoIHRoZSBrZXJuZWwgKi8KLSAgZmlsZS0+cHJpdmF0ZV9kYXRhID0gZnVz
ZF9maWxlOwotICAqZnVzZF9maWxlX3JldCA9IGZ1c2RfZmlsZTsKKyAvKiBNYWtlIHN1cmUgdGhl
IGRldmljZSBkaWRuJ3QgYmVjb21lIGEgem9tYmllIHdoaWxlIHdlIHdlcmUgd2FpdGluZworICog
Zm9yIHRoZSBkZXZpY2UgbG9jayAqLworIGlmIChaT01CSUUoZnVzZF9kZXYpKQorIHJldHVybiAt
RU5PRU5UOworCisgLyogdGhpcyBzaG91bGRuJ3QgaGFwcGVuLiBtYXliZSBpJ20gaW5zYW5lLCBi
dXQgaSBjaGVjayBhbnl3YXkuICovCisgZm9yIChpID0gMDsgaSA8IGZ1c2RfZGV2LT5udW1fZmls
ZXM7IGkrKykKKyBpZiAoZnVzZF9kZXYtPmZpbGVzW2ldLT5maWxlID09IGZpbGUpIHsKKyBSREVC
VUcoMSwgIndhcm5pbmc6IGZ1c2RfY2xpZW50X29wZW4gZ290IG9wZW4gZm9yIGFscmVhZHktb3Bl
biBmaWxlIT8iKTsKKyByZXR1cm4gLUVJTzsKKyB9CisKKyAvKiBZb3UgY2FuJ3Qgb3BlbiB5b3Vy
IG93biBmaWxlISBSZXR1cm4gLUVERUFETE9DSyBpZiBzb21lb25lIHRyaWVzIHRvLgorICoKKyAq
IFhYWCAtIFRPRE8gLSBGSVhNRSAtIFRoaXMgc2hvdWxkIGV2ZW50dWFsbHkgYmUgbW9yZSBnZW5l
cmFsCisgKiBkZWFkbG9jayBkZXRlY3Rpb24gb2YgYXJiaXRyYXJ5IGxlbmd0aCBjeWNsZXMgKi8K
KyBpZiAoY3VycmVudC0+cGlkID09IGZ1c2RfZGV2LT5waWQpIHsKKyBSREVCVUcoMywgInBpZCAl
ZCB0cmllZCB0byBvcGVuIGl0cyBvd24gZGV2aWNlICgvZGV2LyVzKSIsCisgZnVzZF9kZXYtPnBp
ZCwgTkFNRShmdXNkX2RldikpOworIHJldHVybiAtRURFQURMT0NLOworIH0KKworIC8qIG1ha2Ug
bW9yZSBzcGFjZSBpbiB0aGUgZmlsZSBhcnJheSBpZiB3ZSBuZWVkIGl0ICovCisgaWYgKGZ1c2Rf
ZGV2LT5udW1fZmlsZXMgPT0gZnVzZF9kZXYtPmFycmF5X3NpemUgJiYKKyBmdXNkX2Rldi0+YXJy
YXlfc2l6ZSA8IE1BWF9GSUxFQVJSQVlfU0laRSkKKyBmdXNkX2Rldl9hZGpzaXplKGZ1c2RfZGV2
KTsKKworIC8qIG1ha2Ugc3VyZSB3ZSBoYXZlIHJvb20uLi4gYWRqc2l6ZSBtYXkgaGF2ZSBmYWls
ZWQgKi8KKyBpZiAoZnVzZF9kZXYtPm51bV9maWxlcyA+PSBmdXNkX2Rldi0+YXJyYXlfc2l6ZSkg
eworIFJERUJVRygxLCAiL2Rldi8lcyBvdXQgb2Ygc3RhdGUgc3BhY2UgZm9yIG9wZW4gZmlsZXMh
IiwgTkFNRShmdXNkX2RldikpOworIHJldHVybiAtRU5PTUVNOworIH0KKworIC8qIGNyZWF0ZSBz
dGF0ZSBmb3IgdGhpcyBmaWxlICovCisgaWYgKChmdXNkX2ZpbGUgPSBLTUFMTE9DKHNpemVvZihm
dXNkX2ZpbGVfdCksIEdGUF9LRVJORUwpKSA9PSBOVUxMKSB7CisgUkRFQlVHKDEsICJ5aWtlcyEg
a2VybmVsIGNhbid0IGFsbG9jYXRlIG1lbW9yeSIpOworIHJldHVybiAtRU5PTUVNOworIH0KKyBt
ZW1zZXQoZnVzZF9maWxlLCAwLCBzaXplb2YoZnVzZF9maWxlX3QpKTsKKyBpbml0X3dhaXRxdWV1
ZV9oZWFkKCZmdXNkX2ZpbGUtPmZpbGVfd2FpdCk7CisgaW5pdF93YWl0cXVldWVfaGVhZCgmZnVz
ZF9maWxlLT5wb2xsX3dhaXQpOworIElOSVRfTElTVF9IRUFEKCZmdXNkX2ZpbGUtPnRyYW5zYWN0
aW9ucyk7CisgaW5pdF9NVVRFWCgmZnVzZF9maWxlLT5maWxlX3NlbSk7CisgaW5pdF9NVVRFWCgm
ZnVzZF9maWxlLT50cmFuc2FjdGlvbnNfc2VtKTsKKyBmdXNkX2ZpbGUtPmxhc3RfcG9sbF9zZW50
ID0gLTE7CisgZnVzZF9maWxlLT5tYWdpYyA9IEZVU0RfRklMRV9NQUdJQzsKKyBmdXNkX2ZpbGUt
PmZ1c2RfZGV2ID0gZnVzZF9kZXY7CisgZnVzZF9maWxlLT5mdXNkX2Rldl92ZXJzaW9uID0gZnVz
ZF9kZXYtPnZlcnNpb247CisgZnVzZF9maWxlLT5maWxlID0gZmlsZTsKKworIC8qIGFkZCB0aGlz
IGZpbGUgdG8gdGhlIGxpc3Qgb2YgZmlsZXMgbWFuYWdlZCBieSB0aGUgZGV2aWNlICovCisgZnVz
ZF9maWxlLT5pbmRleCA9IGZ1c2RfZGV2LT5udW1fZmlsZXMrKzsKKyBmdXNkX2Rldi0+ZmlsZXNb
ZnVzZF9maWxlLT5pbmRleF0gPSBmdXNkX2ZpbGU7CisKKyAvKiBzdG9yZSB0aGUgcG9pbnRlciB0
byB0aGlzIGZpbGUgd2l0aCB0aGUga2VybmVsICovCisgZmlsZS0+cHJpdmF0ZV9kYXRhID0gZnVz
ZF9maWxlOworICpmdXNkX2ZpbGVfcmV0ID0gZnVzZF9maWxlOwogCi0gIC8qIHN1Y2Nlc3MhICov
Ci0gIHJldHVybiAwOworIC8qIHN1Y2Nlc3MhICovCisgcmV0dXJuIDA7CiB9CiAKIFNUQVRJQyBz
dHJ1Y3QgZnVzZF9kZXZfdF9zKiBmaW5kX3VzZXJfZGV2aWNlKGludCBkZXZfaWQpCiB7Ci0Jc3Ry
dWN0IGxpc3RfaGVhZCogZW50cnk7Ci0JZG93bigmZnVzZF9kZXZsaXN0X3NlbSk7Ci0JbGlzdF9m
b3JfZWFjaChlbnRyeSwgJmZ1c2RfZGV2bGlzdF9oZWFkKQotCXsKLSAgICBmdXNkX2Rldl90ICpk
ID0gbGlzdF9lbnRyeShlbnRyeSwgZnVzZF9kZXZfdCwgZGV2bGlzdCk7Ci0JCWlmKGQtPmRldl9p
ZCA9PSBkZXZfaWQpCi0JCXsKLQkJCXVwKCZmdXNkX2Rldmxpc3Rfc2VtKTsKLQkJCXJldHVybiBk
OwotCQl9Ci0JfQotCXVwKCZmdXNkX2Rldmxpc3Rfc2VtKTsKKyBzdHJ1Y3QgbGlzdF9oZWFkKiBl
bnRyeTsKKyBkb3duKCZmdXNkX2Rldmxpc3Rfc2VtKTsKKyBsaXN0X2Zvcl9lYWNoKGVudHJ5LCAm
ZnVzZF9kZXZsaXN0X2hlYWQpCisgeworIGZ1c2RfZGV2X3QgKmQgPSBsaXN0X2VudHJ5KGVudHJ5
LCBmdXNkX2Rldl90LCBkZXZsaXN0KTsKKyBpZihkLT5kZXZfaWQgPT0gZGV2X2lkKQorIHsKKyB1
cCgmZnVzZF9kZXZsaXN0X3NlbSk7CisgcmV0dXJuIGQ7CisgfQorIH0KKyB1cCgmZnVzZF9kZXZs
aXN0X3NlbSk7CiAgcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTEwNTgsNjEwICsxMDU4LDYxMCBAQAog
ICovCiBTVEFUSUMgaW50IGZ1c2RfY2xpZW50X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3Ry
dWN0IGZpbGUgKmZpbGUpCiB7Ci0gIGludCByZXR2YWw7Ci0gIGludCBkZXZpY2VfZnJlZWQgPSAw
OwotICBmdXNkX2Rldl90ICpmdXNkX2RldiA9IGZpbmRfdXNlcl9kZXZpY2UoaW5vZGUtPmlfcmRl
dik7Ci0gIGZ1c2RfZmlsZV90ICpmdXNkX2ZpbGU7Ci0gIGZ1c2RfbXNnX3QgZnVzZF9tc2c7Ci0g
IHN0cnVjdCBmdXNkX3RyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbjsKLSAgCi0gIC8qIElmIHRoZSBk
ZXZpY2Ugd2Fzbid0IG9uIG91ciB2YWxpZCBsaXN0LCBzdG9wIGhlcmUuICovCi0gIGlmICghZnVz
ZF9kZXZfaXNfdmFsaWQoZnVzZF9kZXYpKQotICAgIHJldHVybiAtRU5PRU5UOwotCi0gIC8qIGZ1
c2RfZGV2LT5vcGVuX2luX3Byb2dyZXNzIG5vdyBzZXQgKi8KLQotICAvKiBMb2NrIHRoZSBmdXNk
IGRldmljZS4gIE5vdGUsIHdoZW4gd2UgZmluYWxseSBkbyBhY3F1aXJlIHRoZSBsb2NrLAotICAg
KiB0aGUgZGV2aWNlIG1pZ2h0IGJlIGEgem9tYmllIChkcml2ZXIgZGlzYXBwZWFyZWQpLiAqLwot
ICBSQVdMT0NLX0ZVU0RfREVWKGZ1c2RfZGV2KTsKLQotICBSREVCVUcoMywgImdvdCBhbiBvcGVu
IGZvciAvZGV2LyVzIChvd25lZCBieSBwaWQgJWQpIGZyb20gcGlkICVkIiwKLQkgTkFNRShmdXNk
X2RldiksIGZ1c2RfZGV2LT5waWQsIGN1cnJlbnQtPnBpZCk7Ci0KLSAgLyogVHJ5IHRvIGFkZCBv
dXJzZWx2ZXMgdG8gdGhlIGRldmljZSdzIGZpbGUgbGlzdC4gIElmIHJldHZhbD09MCwgd2UKLSAg
ICAgYXJlIG5vdyBwYXJ0IG9mIHRoZSBmaWxlIGFycmF5LiAgKi8KLSAgcmV0dmFsID0gZnVzZF9k
ZXZfYWRkX2ZpbGUoZmlsZSwgZnVzZF9kZXYsICZmdXNkX2ZpbGUpOwotCi0gIC8qCi0gICAqIEl0
IGlzIG5vdyBzYWZlIHRvIHVuc2V0IHRoZSBvcGVuX2luX3Byb2dyZXNzIGZsYWcuICBFaXRoZXI6
Ci0gICAqICAgMSkgV2UgYXJlIHBhcnQgb2YgdGhlIGZpbGUgYXJyYXksIHNvIGRldiB3b24ndCBi
ZSBmcmVlZCwgb3I7Ci0gICAqICAgMikgU29tZXRoaW5nIGZhaWxlZCwgc28gd2UgYXJlIHJldHVy
bmluZyBhIGZhaWx1cmUgbm93IGFuZCBubwotICAgKiAgIGxvbmdlciBuZWVkIHRoZSBkZXZpY2Uu
Ci0gICAqIE5vdGUsIG9wZW5faW5fcHJvZ3Jlc3MgbXVzdCBiZSBwcm90ZWN0ZWQgYnkgdGhlIGds
b2JhbCBzZW0sIG5vdAotICAgKiB0aGUgZGV2aWNlIGxvY2ssIGR1ZSB0byB0aGUgYWNjZXNzIG9m
IGl0IGluIGZ1c2RfZGV2X2lzX3ZhbGlkKCkuCi0gICAqLwotICBkb3duKCZmdXNkX2Rldmxpc3Rf
c2VtKTsKLSAgZnVzZF9kZXYtPm9wZW5faW5fcHJvZ3Jlc3MtLTsKLSAgdXAoJmZ1c2RfZGV2bGlz
dF9zZW0pOwotCi0gIC8qIElmIGFkZGluZyBvdXJzZWx2ZXMgdG8gdGhlIGRldmljZSBsaXN0IGZh
aWxlZCwgZ2l2ZSB1cC4gIFBvc3NpYmx5Ci0gICAqIGZyZWUgdGhlIGRldmljZSBpZiBpdCB3YXMg
YSB6b21iaWUgYW5kIHdhaXRpbmcgZm9yIHVzIHRvIGNvbXBsZXRlCi0gICAqIG91ciBvcGVuLiAq
LwotICBpZiAocmV0dmFsIDwgMCkgewotICAgIGlmICghbWF5YmVfZnJlZV9mdXNkX2RldihmdXNk
X2RldikpCi0gICAgICBVTkxPQ0tfRlVTRF9ERVYoZnVzZF9kZXYpOwotICAgIHJldHVybiByZXR2
YWw7Ci0gIH0KLQotICAvKiBzZW5kIG1lc3NhZ2UgdG8gdXNlcnNwYWNlIGFuZCBnZXQgcmV0dmFs
ICovCi0gIGluaXRfZnVzZF9tc2coJmZ1c2RfbXNnKTsKLSAgZnVzZF9tc2cuc3ViY21kID0gRlVT
RF9PUEVOOwotCi0gIC8qIHNlbmQgbWVzc2FnZSB0byB1c2Vyc3BhY2UgYW5kIGdldCB0aGUgcmVw
bHkuICBEZXZpY2UgY2FuJ3QgYmUKLSAgICogbG9ja2VkIGR1cmluZyB0aGF0IG9wZXJhdGlvbi4g
Ki8KLQotICBVTkxPQ0tfRlVTRF9ERVYoZnVzZF9kZXYpOwotICByZXR2YWwgPSBmdXNkX2ZvcHNf
Y2FsbF9zZW5kKGZ1c2RfZmlsZSwgJmZ1c2RfbXNnLCAmdHJhbnNhY3Rpb24pOwotICAKLSAgaWYg
KHJldHZhbCA+PSAwKQotICAgIHJldHZhbCA9IGZ1c2RfZm9wc19jYWxsX3dhaXQoZnVzZF9maWxl
LCBOVUxMLCB0cmFuc2FjdGlvbik7Ci0gIFJBV0xPQ0tfRlVTRF9ERVYoZnVzZF9kZXYpOwotCi0g
IC8qIElmIHRoZSBkZXZpY2Ugem9tYmlmaWVkICh3aGlsZSB3ZSB3ZXJlIHdhaXRpbmcgdG8gcmVh
Y3F1aXJlIHRoZQotICAgKiBsb2NrKS4uLiBjb25zaWRlciB0aGF0IGEgZmFpbHVyZSAqLwotICBp
ZiAoWk9NQklFKGZ1c2RfZGV2KSkKLSAgICByZXR2YWwgPSAtRU5PRU5UOwotCi0gIC8qIGlmIHJl
dHZhbCBpcyBuZWdhdGl2ZSwgdGhyb3cgYXdheSBzdGF0ZS4uLiB0aGUgZmlsZSBvcGVuIGZhaWxl
ZCAqLwotICBpZiAocmV0dmFsIDwgMCkgewotICAgIFJERUJVRygzLCAiLi4ub3BlbiBmYWlsZWQg
Zm9yIC9kZXYvJXMgKG93bmVkIGJ5IHBpZCAlZCkgZnJvbSBwaWQgJWQiLAotCSAgIE5BTUUoZnVz
ZF9kZXYpLCBmdXNkX2Rldi0+cGlkLCBjdXJyZW50LT5waWQpOwotCi0gICAgZGV2aWNlX2ZyZWVk
ID0gZnJlZV9mdXNkX2ZpbGUoZnVzZF9kZXYsIGZ1c2RfZmlsZSk7Ci0gIH0KLQotICAvKiBOb3cg
dW5sb2NrIHRoZSBkZXZpY2UsIGlmIGl0IHN0aWxsIGV4aXN0cy4gIChJdCBtYXkgaGF2ZSBiZWVu
Ci0gICAqIGZyZWVkIGlmIHRoZSBvcGVuIGZhaWxlZCwgYW5kIHdlIHdlcmUgdGhlIGxhc3Qgb3V0
c3RhbmRpbmcKLSAgICogcmVxdWVzdCBmb3IgaXQuKSAqLwotICBpZiAoIWRldmljZV9mcmVlZCkK
LSAgICBVTkxPQ0tfRlVTRF9ERVYoZnVzZF9kZXYpOworIGludCByZXR2YWw7CisgaW50IGRldmlj
ZV9mcmVlZCA9IDA7CisgZnVzZF9kZXZfdCAqZnVzZF9kZXYgPSBmaW5kX3VzZXJfZGV2aWNlKGlu
b2RlLT5pX3JkZXYpOworIGZ1c2RfZmlsZV90ICpmdXNkX2ZpbGU7CisgZnVzZF9tc2dfdCBmdXNk
X21zZzsKKyBzdHJ1Y3QgZnVzZF90cmFuc2FjdGlvbiogdHJhbnNhY3Rpb247CisKKyAvKiBJZiB0
aGUgZGV2aWNlIHdhc24ndCBvbiBvdXIgdmFsaWQgbGlzdCwgc3RvcCBoZXJlLiAqLworIGlmICgh
ZnVzZF9kZXZfaXNfdmFsaWQoZnVzZF9kZXYpKQorIHJldHVybiAtRU5PRU5UOworCisgLyogZnVz
ZF9kZXYtPm9wZW5faW5fcHJvZ3Jlc3Mgbm93IHNldCAqLworCisgLyogTG9jayB0aGUgZnVzZCBk
ZXZpY2UuIE5vdGUsIHdoZW4gd2UgZmluYWxseSBkbyBhY3F1aXJlIHRoZSBsb2NrLAorICogdGhl
IGRldmljZSBtaWdodCBiZSBhIHpvbWJpZSAoZHJpdmVyIGRpc2FwcGVhcmVkKS4gKi8KKyBSQVdM
T0NLX0ZVU0RfREVWKGZ1c2RfZGV2KTsKKworIFJERUJVRygzLCAiZ290IGFuIG9wZW4gZm9yIC9k
ZXYvJXMgKG93bmVkIGJ5IHBpZCAlZCkgZnJvbSBwaWQgJWQiLAorIE5BTUUoZnVzZF9kZXYpLCBm
dXNkX2Rldi0+cGlkLCBjdXJyZW50LT5waWQpOworCisgLyogVHJ5IHRvIGFkZCBvdXJzZWx2ZXMg
dG8gdGhlIGRldmljZSdzIGZpbGUgbGlzdC4gSWYgcmV0dmFsPT0wLCB3ZQorIGFyZSBub3cgcGFy
dCBvZiB0aGUgZmlsZSBhcnJheS4gKi8KKyByZXR2YWwgPSBmdXNkX2Rldl9hZGRfZmlsZShmaWxl
LCBmdXNkX2RldiwgJmZ1c2RfZmlsZSk7CisKKyAvKgorICogSXQgaXMgbm93IHNhZmUgdG8gdW5z
ZXQgdGhlIG9wZW5faW5fcHJvZ3Jlc3MgZmxhZy4gRWl0aGVyOgorICogMSkgV2UgYXJlIHBhcnQg
b2YgdGhlIGZpbGUgYXJyYXksIHNvIGRldiB3b24ndCBiZSBmcmVlZCwgb3I7CisgKiAyKSBTb21l
dGhpbmcgZmFpbGVkLCBzbyB3ZSBhcmUgcmV0dXJuaW5nIGEgZmFpbHVyZSBub3cgYW5kIG5vCisg
KiBsb25nZXIgbmVlZCB0aGUgZGV2aWNlLgorICogTm90ZSwgb3Blbl9pbl9wcm9ncmVzcyBtdXN0
IGJlIHByb3RlY3RlZCBieSB0aGUgZ2xvYmFsIHNlbSwgbm90CisgKiB0aGUgZGV2aWNlIGxvY2ss
IGR1ZSB0byB0aGUgYWNjZXNzIG9mIGl0IGluIGZ1c2RfZGV2X2lzX3ZhbGlkKCkuCisgKi8KKyBk
b3duKCZmdXNkX2Rldmxpc3Rfc2VtKTsKKyBmdXNkX2Rldi0+b3Blbl9pbl9wcm9ncmVzcy0tOwor
IHVwKCZmdXNkX2Rldmxpc3Rfc2VtKTsKKworIC8qIElmIGFkZGluZyBvdXJzZWx2ZXMgdG8gdGhl
IGRldmljZSBsaXN0IGZhaWxlZCwgZ2l2ZSB1cC4gUG9zc2libHkKKyAqIGZyZWUgdGhlIGRldmlj
ZSBpZiBpdCB3YXMgYSB6b21iaWUgYW5kIHdhaXRpbmcgZm9yIHVzIHRvIGNvbXBsZXRlCisgKiBv
dXIgb3Blbi4gKi8KKyBpZiAocmV0dmFsIDwgMCkgeworIGlmICghbWF5YmVfZnJlZV9mdXNkX2Rl
dihmdXNkX2RldikpCisgVU5MT0NLX0ZVU0RfREVWKGZ1c2RfZGV2KTsKKyByZXR1cm4gcmV0dmFs
OworIH0KKworIC8qIHNlbmQgbWVzc2FnZSB0byB1c2Vyc3BhY2UgYW5kIGdldCByZXR2YWwgKi8K
KyBpbml0X2Z1c2RfbXNnKCZmdXNkX21zZyk7CisgZnVzZF9tc2cuc3ViY21kID0gRlVTRF9PUEVO
OworCisgLyogc2VuZCBtZXNzYWdlIHRvIHVzZXJzcGFjZSBhbmQgZ2V0IHRoZSByZXBseS4gRGV2
aWNlIGNhbid0IGJlCisgKiBsb2NrZWQgZHVyaW5nIHRoYXQgb3BlcmF0aW9uLiAqLwogCi0gIHJl
dHVybiByZXR2YWw7CisgVU5MT0NLX0ZVU0RfREVWKGZ1c2RfZGV2KTsKKyByZXR2YWwgPSBmdXNk
X2ZvcHNfY2FsbF9zZW5kKGZ1c2RfZmlsZSwgJmZ1c2RfbXNnLCAmdHJhbnNhY3Rpb24pOworCisg
aWYgKHJldHZhbCA+PSAwKQorIHJldHZhbCA9IGZ1c2RfZm9wc19jYWxsX3dhaXQoZnVzZF9maWxl
LCBOVUxMLCB0cmFuc2FjdGlvbik7CisgUkFXTE9DS19GVVNEX0RFVihmdXNkX2Rldik7CisKKyAv
KiBJZiB0aGUgZGV2aWNlIHpvbWJpZmllZCAod2hpbGUgd2Ugd2VyZSB3YWl0aW5nIHRvIHJlYWNx
dWlyZSB0aGUKKyAqIGxvY2spLi4uIGNvbnNpZGVyIHRoYXQgYSBmYWlsdXJlICovCisgaWYgKFpP
TUJJRShmdXNkX2RldikpCisgcmV0dmFsID0gLUVOT0VOVDsKKworIC8qIGlmIHJldHZhbCBpcyBu
ZWdhdGl2ZSwgdGhyb3cgYXdheSBzdGF0ZS4uLiB0aGUgZmlsZSBvcGVuIGZhaWxlZCAqLworIGlm
IChyZXR2YWwgPCAwKSB7CisgUkRFQlVHKDMsICIuLi5vcGVuIGZhaWxlZCBmb3IgL2Rldi8lcyAo
b3duZWQgYnkgcGlkICVkKSBmcm9tIHBpZCAlZCIsCisgTkFNRShmdXNkX2RldiksIGZ1c2RfZGV2
LT5waWQsIGN1cnJlbnQtPnBpZCk7CisKKyBkZXZpY2VfZnJlZWQgPSBmcmVlX2Z1c2RfZmlsZShm
dXNkX2RldiwgZnVzZF9maWxlKTsKKyB9CisKKyAvKiBOb3cgdW5sb2NrIHRoZSBkZXZpY2UsIGlm
IGl0IHN0aWxsIGV4aXN0cy4gKEl0IG1heSBoYXZlIGJlZW4KKyAqIGZyZWVkIGlmIHRoZSBvcGVu
IGZhaWxlZCwgYW5kIHdlIHdlcmUgdGhlIGxhc3Qgb3V0c3RhbmRpbmcKKyAqIHJlcXVlc3QgZm9y
IGl0LikgKi8KKyBpZiAoIWRldmljZV9mcmVlZCkKKyBVTkxPQ0tfRlVTRF9ERVYoZnVzZF9kZXYp
OworCisgcmV0dXJuIHJldHZhbDsKIH0KIAogCi0vKiBjbG9zZSgpIGhhcyBiZWVuIGNhbGxlZCBv
biBhIHJlZ2lzdGVyZWQgZGV2aWNlLiAgbGlrZQorLyogY2xvc2UoKSBoYXMgYmVlbiBjYWxsZWQg
b24gYSByZWdpc3RlcmVkIGRldmljZS4gbGlrZQogICogZnVzZF9jbGllbnRfb3Blbiwgd2UgbXVz
dCBsb2NrIHRoZSBlbnRpcmUgZGV2aWNlLiAqLwogU1RBVElDIGludCBmdXNkX2NsaWVudF9yZWxl
YXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotICBpbnQgcmV0
dmFsOwotICBmdXNkX2ZpbGVfdCAqZnVzZF9maWxlOwotICBmdXNkX2Rldl90ICpmdXNkX2RldjsK
LSAgZnVzZF9tc2dfdCBmdXNkX21zZzsKLSAgc3RydWN0IGZ1c2RfdHJhbnNhY3Rpb24qIHRyYW5z
YWN0aW9uOwotICAKLSAgR0VUX0ZVU0RfRklMRV9BTkRfREVWKGZpbGUtPnByaXZhdGVfZGF0YSwg
ZnVzZF9maWxlLCBmdXNkX2Rldik7Ci0gIExPQ0tfRlVTRF9GSUxFKGZ1c2RfZmlsZSk7Ci0KLSAg
UkRFQlVHKDMsICJnb3QgYSBjbG9zZSBvbiAvZGV2LyVzIChvd25lZCBieSBwaWQgJWQpIGZyb20g
cGlkICVkIiwKLQkgTkFNRShmdXNkX2RldiksIGZ1c2RfZGV2LT5waWQsIGN1cnJlbnQtPnBpZCk7
Ci0KLSAgLyogVGVsbCB0aGUgZHJpdmVyIHRoYXQgdGhlIGZpbGUgY2xvc2VkLCBpZiBpdCBzdGls
bCBleGlzdHMuICovCi0gIGluaXRfZnVzZF9tc2coJmZ1c2RfbXNnKTsKLSAgZnVzZF9tc2cuc3Vi
Y21kID0gRlVTRF9DTE9TRTsKLSAgcmV0dmFsID0gZnVzZF9mb3BzX2NhbGxfc2VuZChmdXNkX2Zp
bGUsICZmdXNkX21zZywgJnRyYW5zYWN0aW9uKTsKLQlSREVCVUcoNSwgImZ1c2RfY2xpZW50X3Jl
bGVhc2U6IHNlbmQgcmV0dXJuZWQgJWQiLCByZXR2YWwpOwotICBpZiAocmV0dmFsID49IDApCi0g
ICAgcmV0dmFsID0gZnVzZF9mb3BzX2NhbGxfd2FpdChmdXNkX2ZpbGUsIE5VTEwsIHRyYW5zYWN0
aW9uKTsKLQkKLQlSREVCVUcoNSwgImZ1c2RfY2xpZW50X3JlbGVhc2U6IGNhbGxfd2FpdCAlZCIs
IHJldHZhbCk7Ci0gIC8qIGRlbGV0ZSB0aGUgZmlsZSBvZmYgdGhlIGRldmljZSdzIGZpbGUtbGlz
dCwgYW5kIGZyZWUgaXQuICBub3RlCi0gICAqIHRoYXQgZGV2aWNlIG1heSBiZSBhIHpvbWJpZSBy
aWdodCBub3cgYW5kIG1heSBiZSBmcmVlZCB3aGVuIHdlCi0gICAqIGNvbWUgYmFjayBmcm9tIGZy
ZWVfZnVzZF9maWxlLiAgd2Ugb25seSByZWxlYXNlIHRoZSBsb2NrIGlmIHRoZQotICAgKiBkZXZp
Y2Ugc3RpbGwgZXhpc3RzLiAqLwotICBSQVdMT0NLX0ZVU0RfREVWKGZ1c2RfZGV2KTsKLSAgaWYg
KCFmcmVlX2Z1c2RfZmlsZShmdXNkX2RldiwgZnVzZF9maWxlKSkgewotICAgIFVOTE9DS19GVVNE
X0RFVihmdXNkX2Rldik7Ci0gIH0KKyBpbnQgcmV0dmFsOworIGZ1c2RfZmlsZV90ICpmdXNkX2Zp
bGU7CisgZnVzZF9kZXZfdCAqZnVzZF9kZXY7CisgZnVzZF9tc2dfdCBmdXNkX21zZzsKKyBzdHJ1
Y3QgZnVzZF90cmFuc2FjdGlvbiogdHJhbnNhY3Rpb247CisKKyBHRVRfRlVTRF9GSUxFX0FORF9E
RVYoZmlsZS0+cHJpdmF0ZV9kYXRhLCBmdXNkX2ZpbGUsIGZ1c2RfZGV2KTsKKyBMT0NLX0ZVU0Rf
RklMRShmdXNkX2ZpbGUpOworCisgUkRFQlVHKDMsICJnb3QgYSBjbG9zZSBvbiAvZGV2LyVzIChv
d25lZCBieSBwaWQgJWQpIGZyb20gcGlkICVkIiwKKyBOQU1FKGZ1c2RfZGV2KSwgZnVzZF9kZXYt
PnBpZCwgY3VycmVudC0+cGlkKTsKKworIC8qIFRlbGwgdGhlIGRyaXZlciB0aGF0IHRoZSBmaWxl
IGNsb3NlZCwgaWYgaXQgc3RpbGwgZXhpc3RzLiAqLworIGluaXRfZnVzZF9tc2coJmZ1c2RfbXNn
KTsKKyBmdXNkX21zZy5zdWJjbWQgPSBGVVNEX0NMT1NFOworIHJldHZhbCA9IGZ1c2RfZm9wc19j
YWxsX3NlbmQoZnVzZF9maWxlLCAmZnVzZF9tc2csICZ0cmFuc2FjdGlvbik7CisgUkRFQlVHKDUs
ICJmdXNkX2NsaWVudF9yZWxlYXNlOiBzZW5kIHJldHVybmVkICVkIiwgcmV0dmFsKTsKKyBpZiAo
cmV0dmFsID49IDApCisgcmV0dmFsID0gZnVzZF9mb3BzX2NhbGxfd2FpdChmdXNkX2ZpbGUsIE5V
TEwsIHRyYW5zYWN0aW9uKTsKKworIFJERUJVRyg1LCAiZnVzZF9jbGllbnRfcmVsZWFzZTogY2Fs
bF93YWl0ICVkIiwgcmV0dmFsKTsKKyAvKiBkZWxldGUgdGhlIGZpbGUgb2ZmIHRoZSBkZXZpY2Un
cyBmaWxlLWxpc3QsIGFuZCBmcmVlIGl0LiBub3RlCisgKiB0aGF0IGRldmljZSBtYXkgYmUgYSB6
b21iaWUgcmlnaHQgbm93IGFuZCBtYXkgYmUgZnJlZWQgd2hlbiB3ZQorICogY29tZSBiYWNrIGZy
b20gZnJlZV9mdXNkX2ZpbGUuIHdlIG9ubHkgcmVsZWFzZSB0aGUgbG9jayBpZiB0aGUKKyAqIGRl
dmljZSBzdGlsbCBleGlzdHMuICovCisgUkFXTE9DS19GVVNEX0RFVihmdXNkX2Rldik7CisgaWYg
KCFmcmVlX2Z1c2RfZmlsZShmdXNkX2RldiwgZnVzZF9maWxlKSkgeworIFVOTE9DS19GVVNEX0RF
VihmdXNkX2Rldik7CisgfQogCi0gIHJldHVybiByZXR2YWw7CisgcmV0dXJuIHJldHZhbDsKIAog
IGludmFsaWRfZGV2OgogIGludmFsaWRfZmlsZToKLSAgUkRFQlVHKDEsICJnb3QgYSBjbG9zZSBv
biBjbGllbnQgZmlsZSBmcm9tIHBpZCAlZCwgSU5WQUxJRCBERVZJQ0UhIiwKLQkgY3VycmVudC0+
cGlkKTsKLSAgcmV0dXJuIC1FUElQRTsKKyBSREVCVUcoMSwgImdvdCBhIGNsb3NlIG9uIGNsaWVu
dCBmaWxlIGZyb20gcGlkICVkLCBJTlZBTElEIERFVklDRSEiLAorIGN1cnJlbnQtPnBpZCk7Cisg
cmV0dXJuIC1FUElQRTsKIH0KIAogCiAKIFNUQVRJQyBzc2l6ZV90IGZ1c2RfY2xpZW50X3JlYWQo
c3RydWN0IGZpbGUgKmZpbGUgLCBjaGFyICpidWYsCi0JCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3Qg
Km9mZnNldCkKKyBzaXplX3QgY291bnQsIGxvZmZfdCAqb2Zmc2V0KQogewotICBmdXNkX2Rldl90
ICpmdXNkX2RldjsKLSAgZnVzZF9maWxlX3QgKmZ1c2RfZmlsZTsKLSAgc3RydWN0IGZ1c2RfdHJh
bnNhY3Rpb24qIHRyYW5zYWN0aW9uOwotICBmdXNkX21zZ190IGZ1c2RfbXNnLCAqcmVwbHkgPSBO
VUxMOwotICBpbnQgcmV0dmFsID0gLUVQSVBFOwotCi0gIEdFVF9GVVNEX0ZJTEVfQU5EX0RFVihm
aWxlLT5wcml2YXRlX2RhdGEsIGZ1c2RfZmlsZSwgZnVzZF9kZXYpOwotICBMT0NLX0ZVU0RfRklM
RShmdXNkX2ZpbGUpOwotCi0gIFJERUJVRygzLCAiZ290IGEgcmVhZCBvbiAvZGV2LyVzIChvd25l
ZCBieSBwaWQgJWQpIGZyb20gcGlkICVkIiwKLQkgTkFNRShmdXNkX2RldiksIGZ1c2RfZGV2LT5w
aWQsIGN1cnJlbnQtPnBpZCk7Ci0KLSAgdHJhbnNhY3Rpb24gPSBmdXNkX2ZpbmRfaW5jb21wbGV0
ZV90cmFuc2FjdGlvbihmdXNkX2ZpbGUsIEZVU0RfUkVBRCk7Ci0gIGlmICh0cmFuc2FjdGlvbiAm
JiB0cmFuc2FjdGlvbi0+c2l6ZSA+IGNvdW50KQotICB7Ci0gICAgUkRFQlVHKDMsICJJbmNvbXBs
ZXRlIEkvTyB0cmFuc2FjdGlvbiAlbGQgdGhyb3duIG91dCwgYXMgdGhlIHRyYW5zYWN0aW9uJ3Mg
c2l6ZSBvZiAlZCBieXRlcyB3YXMgZ3JlYXRlciB0aGFuICIKLSAgICAgICAgICAgICAgInRoZSBy
ZXRyeSdzIHNpemUgb2YgJWQgYnl0ZXMiLCB0cmFuc2FjdGlvbi0+dHJhbnNpZCwgdHJhbnNhY3Rp
b24tPnNpemUsIChpbnQpY291bnQpOwotCi0gICAgZnVzZF9jbGVhbnVwX3RyYW5zYWN0aW9uKGZ1
c2RfZmlsZSwgdHJhbnNhY3Rpb24pOwotICAgIHRyYW5zYWN0aW9uID0gTlVMTDsKLSAgfQotCi0g
IGlmKHRyYW5zYWN0aW9uID09IE5VTEwpCi0gIHsKLSAgICAvKiBtYWtlIHN1cmUgd2UgYXJlbid0
IHRyeWluZyB0byByZWFkIHRvbyBiaWcgb2YgYSBidWZmZXIgKi8KLSAgICBpZiAoY291bnQgPiBN
QVhfUldfU0laRSkKLSAgICAgIGNvdW50ID0gTUFYX1JXX1NJWkU7Ci0gIAotICAgIC8qIHNlbmQg
dGhlIG1lc3NhZ2UgKi8KLSAgICBpbml0X2Z1c2RfbXNnKCZmdXNkX21zZyk7Ci0gICAgZnVzZF9t
c2cuc3ViY21kID0gRlVTRF9SRUFEOwotICAgIGZ1c2RfbXNnLnBhcm0uZm9wc19tc2cubGVuZ3Ro
ID0gY291bnQ7Ci0gIAotICAgIC8qIHNlbmQgbWVzc2FnZSB0byB1c2Vyc3BhY2UgKi8KLSAgICBp
ZiAoKHJldHZhbCA9IGZ1c2RfZm9wc19jYWxsX3NlbmQoZnVzZF9maWxlLCAmZnVzZF9tc2csICZ0
cmFuc2FjdGlvbikpIDwgMCkKLSAgICAgIGdvdG8gZG9uZTsKLSAgfQotICAKLSAgLyogYW5kIHdh
aXQgZm9yIHRoZSByZXBseSAqLwotICAvKiB0b2RvOiBzdG9yZSBhbmQgcmV0cmlldmUgdGhlIHRy
YW5zaWQgZnJvbSB0aGUgaW50ZXJydXB0ZWQgbWVzc3NhZ2UgKi8KLSAgcmV0dmFsID0gZnVzZF9m
b3BzX2NhbGxfd2FpdChmdXNkX2ZpbGUsICZyZXBseSwgdHJhbnNhY3Rpb24pOwotCi0gIC8qIHJl
dHVybiBpbW1lZGlhdGVseSBpbiBjYXNlIG9mIGVycm9yICovCi0gIGlmIChyZXR2YWwgPCAwIHx8
IHJlcGx5ID09IE5VTEwpCi0gICAgZ290byBkb25lOwotCi0gIC8qIGFkanVzdCB0aGUgcmV2YWwg
aWYgdGhlIHJldHZhbCBpbmRpY2F0ZXMgYSBsYXJnZXIgcmVhZCB0aGFuIHRoZQotICAgKiBkYXRh
IHRoYXQgd2FzIGFjdHVhbGx5IHByb3ZpZGVkICovCi0gIGlmIChyZXBseS0+ZGF0YWxlbiAhPSBy
ZXR2YWwpIHsKLSAgICBSREVCVUcoMSwgIndhcm5pbmc6IC9kZXYvJXMgZHJpdmVyIChwaWQgJWQp
IGNsYWltZWQgaXQgcmV0dXJuZWQgJWQgYnl0ZXMgIgotCSAgICJvbiByZWFkIGJ1dCBhY3R1YWxs
eSByZXR1cm5lZCAlZCIsIAotCSAgIE5BTUUoZnVzZF9kZXYpLCBmdXNkX2Rldi0+cGlkLCByZXR2
YWwsIHJlcGx5LT5kYXRhbGVuKTsKLSAgICByZXR2YWwgPSByZXBseS0+ZGF0YWxlbjsKLSAgfQot
Ci0gIC8qIGFkanVzdCBpZiB0aGUgZGV2aWNlIGRyaXZlciBnYXZlIHVzIG1vcmUgZGF0YSB0aGFu
IHRoZSB1c2VyIGFza2VkIGZvcgotICAgKiAgICAgKGJhZCEgIGJhZCEgIHdoeSBpcyB0aGUgZHJp
dmVyIGJyb2tlbj8/PykgKi8KLSAgaWYgKHJldHZhbCA+IGNvdW50KSB7Ci0gICAgUkRFQlVHKDEs
ICJ3YXJuaW5nOiAvZGV2LyVzIGRyaXZlciAocGlkICVkKSByZXR1cm5lZCAlZCBieXRlcyBvbiBy
ZWFkIGJ1dCAiCi0JICAgInRoZSB1c2VyIG9ubHkgYXNrZWQgZm9yICVkIiwgCi0JICAgTkFNRShm
dXNkX2RldiksIGZ1c2RfZGV2LT5waWQsIHJldHZhbCwgKGludCkgY291bnQpOwotICAgIHJldHZh
bCA9IGNvdW50OwotICB9Ci0KLSAgLyogY29weSB0aGUgb2Zmc2V0IGJhY2sgZnJvbSB0aGUgbWVz
c2FnZSAqLwotICAqb2Zmc2V0ID0gcmVwbHktPnBhcm0uZm9wc19tc2cub2Zmc2V0OwotCi0gIC8q
IElGRiByZXR1cm4gdmFsdWUgaW5kaWNhdGVzIGRhdGEgcHJlc2VudCwgY29weSBpdCBiYWNrICov
Ci0gIGlmIChyZXR2YWwgPiAwKSB7Ci0gICAgaWYgKGNvcHlfdG9fdXNlcihidWYsIHJlcGx5LT5k
YXRhLCByZXR2YWwpKSB7Ci0gICAgICByZXR2YWwgPSAtRUZBVUxUOwotICAgICAgZ290byBkb25l
OwotICAgIH0KLSAgfQorIGZ1c2RfZGV2X3QgKmZ1c2RfZGV2OworIGZ1c2RfZmlsZV90ICpmdXNk
X2ZpbGU7Cisgc3RydWN0IGZ1c2RfdHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uOworIGZ1c2RfbXNn
X3QgZnVzZF9tc2csICpyZXBseSA9IE5VTEw7CisgaW50IHJldHZhbCA9IC1FUElQRTsKKworIEdF
VF9GVVNEX0ZJTEVfQU5EX0RFVihmaWxlLT5wcml2YXRlX2RhdGEsIGZ1c2RfZmlsZSwgZnVzZF9k
ZXYpOworIExPQ0tfRlVTRF9GSUxFKGZ1c2RfZmlsZSk7CisKKyBSREVCVUcoMywgImdvdCBhIHJl
YWQgb24gL2Rldi8lcyAob3duZWQgYnkgcGlkICVkKSBmcm9tIHBpZCAlZCIsCisgTkFNRShmdXNk
X2RldiksIGZ1c2RfZGV2LT5waWQsIGN1cnJlbnQtPnBpZCk7CisKKyB0cmFuc2FjdGlvbiA9IGZ1
c2RfZmluZF9pbmNvbXBsZXRlX3RyYW5zYWN0aW9uKGZ1c2RfZmlsZSwgRlVTRF9SRUFEKTsKKyBp
ZiAodHJhbnNhY3Rpb24gJiYgdHJhbnNhY3Rpb24tPnNpemUgPiBjb3VudCkKKyB7CisgUkRFQlVH
KDMsICJJbmNvbXBsZXRlIEkvTyB0cmFuc2FjdGlvbiAlbGQgdGhyb3duIG91dCwgYXMgdGhlIHRy
YW5zYWN0aW9uJ3Mgc2l6ZSBvZiAlZCBieXRlcyB3YXMgZ3JlYXRlciB0aGFuICIKKyAidGhlIHJl
dHJ5J3Mgc2l6ZSBvZiAlZCBieXRlcyIsIHRyYW5zYWN0aW9uLT50cmFuc2lkLCB0cmFuc2FjdGlv
bi0+c2l6ZSwgKGludCljb3VudCk7CisKKyBmdXNkX2NsZWFudXBfdHJhbnNhY3Rpb24oZnVzZF9m
aWxlLCB0cmFuc2FjdGlvbik7CisgdHJhbnNhY3Rpb24gPSBOVUxMOworIH0KKworIGlmKHRyYW5z
YWN0aW9uID09IE5VTEwpCisgeworIC8qIG1ha2Ugc3VyZSB3ZSBhcmVuJ3QgdHJ5aW5nIHRvIHJl
YWQgdG9vIGJpZyBvZiBhIGJ1ZmZlciAqLworIGlmIChjb3VudCA+IE1BWF9SV19TSVpFKQorIGNv
dW50ID0gTUFYX1JXX1NJWkU7CisKKyAvKiBzZW5kIHRoZSBtZXNzYWdlICovCisgaW5pdF9mdXNk
X21zZygmZnVzZF9tc2cpOworIGZ1c2RfbXNnLnN1YmNtZCA9IEZVU0RfUkVBRDsKKyBmdXNkX21z
Zy5wYXJtLmZvcHNfbXNnLmxlbmd0aCA9IGNvdW50OworCisgLyogc2VuZCBtZXNzYWdlIHRvIHVz
ZXJzcGFjZSAqLworIGlmICgocmV0dmFsID0gZnVzZF9mb3BzX2NhbGxfc2VuZChmdXNkX2ZpbGUs
ICZmdXNkX21zZywgJnRyYW5zYWN0aW9uKSkgPCAwKQorIGdvdG8gZG9uZTsKKyB9CisKKyAvKiBh
bmQgd2FpdCBmb3IgdGhlIHJlcGx5ICovCisgLyogdG9kbzogc3RvcmUgYW5kIHJldHJpZXZlIHRo
ZSB0cmFuc2lkIGZyb20gdGhlIGludGVycnVwdGVkIG1lc3NzYWdlICovCisgcmV0dmFsID0gZnVz
ZF9mb3BzX2NhbGxfd2FpdChmdXNkX2ZpbGUsICZyZXBseSwgdHJhbnNhY3Rpb24pOworCisgLyog
cmV0dXJuIGltbWVkaWF0ZWx5IGluIGNhc2Ugb2YgZXJyb3IgKi8KKyBpZiAocmV0dmFsIDwgMCB8
fCByZXBseSA9PSBOVUxMKQorIGdvdG8gZG9uZTsKKworIC8qIGFkanVzdCB0aGUgcmV2YWwgaWYg
dGhlIHJldHZhbCBpbmRpY2F0ZXMgYSBsYXJnZXIgcmVhZCB0aGFuIHRoZQorICogZGF0YSB0aGF0
IHdhcyBhY3R1YWxseSBwcm92aWRlZCAqLworIGlmIChyZXBseS0+ZGF0YWxlbiAhPSByZXR2YWwp
IHsKKyBSREVCVUcoMSwgIndhcm5pbmc6IC9kZXYvJXMgZHJpdmVyIChwaWQgJWQpIGNsYWltZWQg
aXQgcmV0dXJuZWQgJWQgYnl0ZXMgIgorICJvbiByZWFkIGJ1dCBhY3R1YWxseSByZXR1cm5lZCAl
ZCIsCisgTkFNRShmdXNkX2RldiksIGZ1c2RfZGV2LT5waWQsIHJldHZhbCwgcmVwbHktPmRhdGFs
ZW4pOworIHJldHZhbCA9IHJlcGx5LT5kYXRhbGVuOworIH0KKworIC8qIGFkanVzdCBpZiB0aGUg
ZGV2aWNlIGRyaXZlciBnYXZlIHVzIG1vcmUgZGF0YSB0aGFuIHRoZSB1c2VyIGFza2VkIGZvcgor
ICogKGJhZCEgYmFkISB3aHkgaXMgdGhlIGRyaXZlciBicm9rZW4/Pz8pICovCisgaWYgKHJldHZh
bCA+IGNvdW50KSB7CisgUkRFQlVHKDEsICJ3YXJuaW5nOiAvZGV2LyVzIGRyaXZlciAocGlkICVk
KSByZXR1cm5lZCAlZCBieXRlcyBvbiByZWFkIGJ1dCAiCisgInRoZSB1c2VyIG9ubHkgYXNrZWQg
Zm9yICVkIiwKKyBOQU1FKGZ1c2RfZGV2KSwgZnVzZF9kZXYtPnBpZCwgcmV0dmFsLCAoaW50KSBj
b3VudCk7CisgcmV0dmFsID0gY291bnQ7CisgfQorCisgLyogY29weSB0aGUgb2Zmc2V0IGJhY2sg
ZnJvbSB0aGUgbWVzc2FnZSAqLworICpvZmZzZXQgPSByZXBseS0+cGFybS5mb3BzX21zZy5vZmZz
ZXQ7CisKKyAvKiBJRkYgcmV0dXJuIHZhbHVlIGluZGljYXRlcyBkYXRhIHByZXNlbnQsIGNvcHkg
aXQgYmFjayAqLworIGlmIChyZXR2YWwgPiAwKSB7CisgaWYgKGNvcHlfdG9fdXNlcihidWYsIHJl
cGx5LT5kYXRhLCByZXR2YWwpKSB7CisgcmV0dmFsID0gLUVGQVVMVDsKKyBnb3RvIGRvbmU7Cisg
fQorIH0KIAogIGRvbmU6Ci0gIC8qIGNsZWFyIHRoZSByZWFkYWJsZSBiaXQgb2Ygb3VyIGNhY2hl
ZCBwb2xsIHN0YXRlICovCi0gIGZ1c2RfZmlsZS0+Y2FjaGVkX3BvbGxfc3RhdGUgJj0gfihGVVNE
X05PVElGWV9JTlBVVCk7CisgLyogY2xlYXIgdGhlIHJlYWRhYmxlIGJpdCBvZiBvdXIgY2FjaGVk
IHBvbGwgc3RhdGUgKi8KKyBmdXNkX2ZpbGUtPmNhY2hlZF9wb2xsX3N0YXRlICY9IH4oRlVTRF9O
T1RJRllfSU5QVVQpOwogCi0gIGZyZWVfZnVzZF9tc2coJnJlcGx5KTsKLSAgVU5MT0NLX0ZVU0Rf
RklMRShmdXNkX2ZpbGUpOwotICByZXR1cm4gcmV0dmFsOworIGZyZWVfZnVzZF9tc2coJnJlcGx5
KTsKKyBVTkxPQ0tfRlVTRF9GSUxFKGZ1c2RfZmlsZSk7CisgcmV0dXJuIHJldHZhbDsKIAogIGlu
dmFsaWRfZmlsZToKICBpbnZhbGlkX2RldjoKLSAgUkRFQlVHKDMsICJnb3QgYSByZWFkIG9uIGNs
aWVudCBmaWxlIGZyb20gcGlkICVkLCBkcml2ZXIgaGFzIGRpc2FwcGVhcmVkIiwKLQkgY3VycmVu
dC0+cGlkKTsKLSAgcmV0dXJuIC1FUElQRTsKKyBSREVCVUcoMywgImdvdCBhIHJlYWQgb24gY2xp
ZW50IGZpbGUgZnJvbSBwaWQgJWQsIGRyaXZlciBoYXMgZGlzYXBwZWFyZWQiLAorIGN1cnJlbnQt
PnBpZCk7CisgcmV0dXJuIC1FUElQRTsKIH0KIAogU1RBVElDIGludCBmdXNkX2FkZF90cmFuc2Fj
dGlvbihmdXNkX2ZpbGVfdCAqZnVzZF9maWxlLCBpbnQgdHJhbnNpZCwgaW50IHN1YmNtZCwgaW50
IHNpemUsIHN0cnVjdCBmdXNkX3RyYW5zYWN0aW9uKiogb3V0X3RyYW5zYWN0aW9uKQogewotCXN0
cnVjdCBmdXNkX3RyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiA9IChzdHJ1Y3QgZnVzZF90cmFuc2Fj
dGlvbiopIEtNQUxMT0Moc2l6ZW9mKHN0cnVjdCBmdXNkX3RyYW5zYWN0aW9uKSwgR0ZQX0tFUk5F
TCk7Ci0JaWYodHJhbnNhY3Rpb24gPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JCi0JdHJh
bnNhY3Rpb24tPm1zZ19pbiA9IE5VTEw7Ci0JdHJhbnNhY3Rpb24tPnRyYW5zaWQgPSB0cmFuc2lk
OwotCXRyYW5zYWN0aW9uLT5zdWJjbWQgPSBzdWJjbWQ7Ci0JdHJhbnNhY3Rpb24tPnBpZCA9IGN1
cnJlbnQtPnBpZDsKLQl0cmFuc2FjdGlvbi0+c2l6ZSA9IHNpemU7Ci0JCi0JZG93bigmZnVzZF9m
aWxlLT50cmFuc2FjdGlvbnNfc2VtKTsKLQlsaXN0X2FkZF90YWlsKCZ0cmFuc2FjdGlvbi0+bGlz
dCwgJmZ1c2RfZmlsZS0+dHJhbnNhY3Rpb25zKTsKLQl1cCgmZnVzZF9maWxlLT50cmFuc2FjdGlv
bnNfc2VtKTsKLQkKLQlpZihvdXRfdHJhbnNhY3Rpb24gIT0gTlVMTCkKLQkJKm91dF90cmFuc2Fj
dGlvbiA9IHRyYW5zYWN0aW9uOwotCQotCXJldHVybiAwOworIHN0cnVjdCBmdXNkX3RyYW5zYWN0
aW9uKiB0cmFuc2FjdGlvbiA9IChzdHJ1Y3QgZnVzZF90cmFuc2FjdGlvbiopIEtNQUxMT0Moc2l6
ZW9mKHN0cnVjdCBmdXNkX3RyYW5zYWN0aW9uKSwgR0ZQX0tFUk5FTCk7CisgaWYodHJhbnNhY3Rp
b24gPT0gTlVMTCkKKyByZXR1cm4gLUVOT01FTTsKKworIHRyYW5zYWN0aW9uLT5tc2dfaW4gPSBO
VUxMOworIHRyYW5zYWN0aW9uLT50cmFuc2lkID0gdHJhbnNpZDsKKyB0cmFuc2FjdGlvbi0+c3Vi
Y21kID0gc3ViY21kOworIHRyYW5zYWN0aW9uLT5waWQgPSBjdXJyZW50LT5waWQ7CisgdHJhbnNh
Y3Rpb24tPnNpemUgPSBzaXplOworCisgZG93bigmZnVzZF9maWxlLT50cmFuc2FjdGlvbnNfc2Vt
KTsKKyBsaXN0X2FkZF90YWlsKCZ0cmFuc2FjdGlvbi0+bGlzdCwgJmZ1c2RfZmlsZS0+dHJhbnNh
Y3Rpb25zKTsKKyB1cCgmZnVzZF9maWxlLT50cmFuc2FjdGlvbnNfc2VtKTsKKworIGlmKG91dF90
cmFuc2FjdGlvbiAhPSBOVUxMKQorICpvdXRfdHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvbjsKKwor
IHJldHVybiAwOwogfQogCiBTVEFUSUMgdm9pZCBmdXNkX2NsZWFudXBfdHJhbnNhY3Rpb24oZnVz
ZF9maWxlX3QgKmZ1c2RfZmlsZSwgc3RydWN0IGZ1c2RfdHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9u
KQogewotICBmcmVlX2Z1c2RfbXNnKCZ0cmFuc2FjdGlvbi0+bXNnX2luKTsKLSAgZnVzZF9yZW1v
dmVfdHJhbnNhY3Rpb24oZnVzZF9maWxlLCB0cmFuc2FjdGlvbik7CisgZnJlZV9mdXNkX21zZygm
dHJhbnNhY3Rpb24tPm1zZ19pbik7CisgZnVzZF9yZW1vdmVfdHJhbnNhY3Rpb24oZnVzZF9maWxl
LCB0cmFuc2FjdGlvbik7CiB9CiAKIFNUQVRJQyB2b2lkIGZ1c2RfcmVtb3ZlX3RyYW5zYWN0aW9u
KGZ1c2RfZmlsZV90ICpmdXNkX2ZpbGUsIHN0cnVjdCBmdXNkX3RyYW5zYWN0aW9uKiB0cmFuc2Fj
dGlvbikKIHsKLQlkb3duKCZmdXNkX2ZpbGUtPnRyYW5zYWN0aW9uc19zZW0pOwotCWxpc3RfZGVs
KCZ0cmFuc2FjdGlvbi0+bGlzdCk7Ci0JdXAoJmZ1c2RfZmlsZS0+dHJhbnNhY3Rpb25zX3NlbSk7
Ci0JCi0JS0ZSRUUodHJhbnNhY3Rpb24pOworIGRvd24oJmZ1c2RfZmlsZS0+dHJhbnNhY3Rpb25z
X3NlbSk7CisgbGlzdF9kZWwoJnRyYW5zYWN0aW9uLT5saXN0KTsKKyB1cCgmZnVzZF9maWxlLT50
cmFuc2FjdGlvbnNfc2VtKTsKKworIEtGUkVFKHRyYW5zYWN0aW9uKTsKIH0KIAogU1RBVElDIHN0
cnVjdCBmdXNkX3RyYW5zYWN0aW9uKiBmdXNkX2ZpbmRfdHJhbnNhY3Rpb24oZnVzZF9maWxlX3Qg
KmZ1c2RfZmlsZSwgaW50IHRyYW5zaWQpCiB7Ci0Jc3RydWN0IGxpc3RfaGVhZCogaTsKLQlkb3du
KCZmdXNkX2ZpbGUtPnRyYW5zYWN0aW9uc19zZW0pOwotCWxpc3RfZm9yX2VhY2goaSwgJmZ1c2Rf
ZmlsZS0+dHJhbnNhY3Rpb25zKQotCXsKLQkJc3RydWN0IGZ1c2RfdHJhbnNhY3Rpb24qIHRyYW5z
YWN0aW9uID0gbGlzdF9lbnRyeShpLCBzdHJ1Y3QgZnVzZF90cmFuc2FjdGlvbiwgbGlzdCk7Ci0J
CWlmKHRyYW5zYWN0aW9uLT50cmFuc2lkID09IHRyYW5zaWQpCi0JCXsKLQkJCXVwKCZmdXNkX2Zp
bGUtPnRyYW5zYWN0aW9uc19zZW0pOwotCQkJcmV0dXJuIHRyYW5zYWN0aW9uOwotCQl9Ci0JfQot
CXVwKCZmdXNkX2ZpbGUtPnRyYW5zYWN0aW9uc19zZW0pOwotCXJldHVybiBOVUxMOworIHN0cnVj
dCBsaXN0X2hlYWQqIGk7CisgZG93bigmZnVzZF9maWxlLT50cmFuc2FjdGlvbnNfc2VtKTsKKyBs
aXN0X2Zvcl9lYWNoKGksICZmdXNkX2ZpbGUtPnRyYW5zYWN0aW9ucykKKyB7Cisgc3RydWN0IGZ1
c2RfdHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uID0gbGlzdF9lbnRyeShpLCBzdHJ1Y3QgZnVzZF90
cmFuc2FjdGlvbiwgbGlzdCk7CisgaWYodHJhbnNhY3Rpb24tPnRyYW5zaWQgPT0gdHJhbnNpZCkK
KyB7CisgdXAoJmZ1c2RfZmlsZS0+dHJhbnNhY3Rpb25zX3NlbSk7CisgcmV0dXJuIHRyYW5zYWN0
aW9uOworIH0KKyB9CisgdXAoJmZ1c2RfZmlsZS0+dHJhbnNhY3Rpb25zX3NlbSk7CisgcmV0dXJu
IE5VTEw7CiB9CiAKIFNUQVRJQyBzdHJ1Y3QgZnVzZF90cmFuc2FjdGlvbiogZnVzZF9maW5kX3Ry
YW5zYWN0aW9uX2J5X3BpZChmdXNkX2ZpbGVfdCAqZnVzZF9maWxlLCBpbnQgcGlkKQogewotCXN0
cnVjdCBsaXN0X2hlYWQqIGk7Ci0JZG93bigmZnVzZF9maWxlLT50cmFuc2FjdGlvbnNfc2VtKTsK
LQlsaXN0X2Zvcl9lYWNoKGksICZmdXNkX2ZpbGUtPnRyYW5zYWN0aW9ucykKLQl7Ci0JCXN0cnVj
dCBmdXNkX3RyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiA9IGxpc3RfZW50cnkoaSwgc3RydWN0IGZ1
c2RfdHJhbnNhY3Rpb24sIGxpc3QpOwotCQlpZih0cmFuc2FjdGlvbi0+cGlkID09IHBpZCkKLQkJ
ewotCQkJdXAoJmZ1c2RfZmlsZS0+dHJhbnNhY3Rpb25zX3NlbSk7Ci0JCQlyZXR1cm4gdHJhbnNh
Y3Rpb247Ci0JCX0KLQl9Ci0JdXAoJmZ1c2RfZmlsZS0+dHJhbnNhY3Rpb25zX3NlbSk7Ci0JcmV0
dXJuIE5VTEw7Cisgc3RydWN0IGxpc3RfaGVhZCogaTsKKyBkb3duKCZmdXNkX2ZpbGUtPnRyYW5z
YWN0aW9uc19zZW0pOworIGxpc3RfZm9yX2VhY2goaSwgJmZ1c2RfZmlsZS0+dHJhbnNhY3Rpb25z
KQorIHsKKyBzdHJ1Y3QgZnVzZF90cmFuc2FjdGlvbiogdHJhbnNhY3Rpb24gPSBsaXN0X2VudHJ5
KGksIHN0cnVjdCBmdXNkX3RyYW5zYWN0aW9uLCBsaXN0KTsKKyBpZih0cmFuc2FjdGlvbi0+cGlk
ID09IHBpZCkKKyB7CisgdXAoJmZ1c2RfZmlsZS0+dHJhbnNhY3Rpb25zX3NlbSk7CisgcmV0dXJu
IHRyYW5zYWN0aW9uOworIH0KKyB9CisgdXAoJmZ1c2RfZmlsZS0+dHJhbnNhY3Rpb25zX3NlbSk7
CisgcmV0dXJuIE5VTEw7CiB9CiAKIFNUQVRJQyBzc2l6ZV90IGZ1c2RfY2xpZW50X3dyaXRlKHN0
cnVjdCBmaWxlICpmaWxlLAotICAgIGNvbnN0IGNoYXIgKmJ1ZmZlciwKLSAgICBzaXplX3QgbGVu
Z3RoLAotICAgIGxvZmZfdCAqb2Zmc2V0KQotewotICBmdXNkX2Rldl90ICpmdXNkX2RldjsKLSAg
ZnVzZF9maWxlX3QgKmZ1c2RfZmlsZTsKLSAgZnVzZF9tc2dfdCBmdXNkX21zZzsKLSAgZnVzZF9t
c2dfdCAqcmVwbHkgPSBOVUxMOwotICBpbnQgcmV0dmFsID0gLUVQSVBFOwotICBzdHJ1Y3QgZnVz
ZF90cmFuc2FjdGlvbiogdHJhbnNhY3Rpb247Ci0gIAotICBHRVRfRlVTRF9GSUxFX0FORF9ERVYo
ZmlsZS0+cHJpdmF0ZV9kYXRhLCBmdXNkX2ZpbGUsIGZ1c2RfZGV2KTsKLSAgTE9DS19GVVNEX0ZJ
TEUoZnVzZF9maWxlKTsKLQotICBSREVCVUcoMywgImdvdCBhIHdyaXRlIG9uIC9kZXYvJXMgKG93
bmVkIGJ5IHBpZCAlZCkgZnJvbSBwaWQgJWQiLAotCSBOQU1FKGZ1c2RfZGV2KSwgZnVzZF9kZXYt
PnBpZCwgY3VycmVudC0+cGlkKTsKLQotICB0cmFuc2FjdGlvbiA9IGZ1c2RfZmluZF9pbmNvbXBs
ZXRlX3RyYW5zYWN0aW9uKGZ1c2RfZmlsZSwgRlVTRF9XUklURSk7Ci0gIGlmICh0cmFuc2FjdGlv
biAmJiB0cmFuc2FjdGlvbi0+c2l6ZSA9PSBsZW5ndGgpCi0gIHsKLSAgICBSREVCVUcoMiwgIklu
Y29tcGxldGUgSS9PIHRyYW5zYWN0aW9uICVsZCB0aHJvd24gb3V0LCBhcyB0aGUgdHJhbnNhY3Rp
b24ncyBzaXplIG9mICVkIGJ5dGVzIHdhcyBub3QgZXF1YWwgdG8gIgotICAgICAgICAgICAgICAi
dGhlIHJldHJ5J3Mgc2l6ZSBvZiAlZCBieXRlcyIsIHRyYW5zYWN0aW9uLT50cmFuc2lkLCB0cmFu
c2FjdGlvbi0+c2l6ZSwgKGludCkgbGVuZ3RoKTsKLQotICAgIGZ1c2RfY2xlYW51cF90cmFuc2Fj
dGlvbihmdXNkX2ZpbGUsIHRyYW5zYWN0aW9uKTsKLSAgICB0cmFuc2FjdGlvbiA9IE5VTEw7Ci0g
IH0KLSAgaWYodHJhbnNhY3Rpb24gPT0gTlVMTCkKLSAgewotICAgIGlmIChsZW5ndGggPCAwKSB7
Ci0gICAgICBSREVCVUcoMiwgImZ1c2RfY2xpZW50X3dyaXRlOiBnb3QgaW52YWxpZCBsZW5ndGgg
JWQiLCAoaW50KSBsZW5ndGgpOwotICAgICAgcmV0dmFsID0gLUVJTlZBTDsKLSAgICAgIGdvdG8g
ZG9uZTsKLSAgICB9Ci0gIAotICAgIGlmIChsZW5ndGggPiBNQVhfUldfU0laRSkKLSAgICAgIGxl
bmd0aCA9IE1BWF9SV19TSVpFOwotICAKLSAgICBpbml0X2Z1c2RfbXNnKCZmdXNkX21zZyk7Ci0g
IAotICAgIC8qIHNpZ2guLiBpIGd1ZXNzIHplcm8gbGVuZ3RoIHdyaXRlcyBzaG91bGQgYmUgbGVn
YWwgKi8KLSAgICBpZiAobGVuZ3RoID4gMCkgewotICAgICAgaWYgKChmdXNkX21zZy5kYXRhID0g
Vk1BTExPQyhsZW5ndGgpKSA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHZhbCA9IC1FTk9NRU07Ci0g
ICAgICAgIGdvdG8gZG9uZTsKLSAgICAgIH0KLSAgCi0gICAgICBpZiAoY29weV9mcm9tX3VzZXIo
ZnVzZF9tc2cuZGF0YSwgYnVmZmVyLCBsZW5ndGgpKSB7Ci0gICAgICAgIHJldHZhbCA9IC1FRkFV
TFQ7Ci0gICAgICAgIGdvdG8gZG9uZTsKLSAgICAgIH0KLSAgICAgIGZ1c2RfbXNnLmRhdGFsZW4g
PSBsZW5ndGg7Ci0gICAgfQotICAgIAotICAgIGZ1c2RfbXNnLnN1YmNtZCA9IEZVU0RfV1JJVEU7
Ci0gICAgZnVzZF9tc2cucGFybS5mb3BzX21zZy5sZW5ndGggPSBsZW5ndGg7Ci0gICAgCi0gICAg
aWYgKChyZXR2YWwgPSBmdXNkX2ZvcHNfY2FsbF9zZW5kKGZ1c2RfZmlsZSwgJmZ1c2RfbXNnLCAm
dHJhbnNhY3Rpb24pKSA8IDApCi0gICAgICBnb3RvIGRvbmU7Ci0gIH0KLQkvKiB0b2RvOiBmaXgg
dHJhbnNpZCBvbiByZXN0YXJ0ICovCi0gIHJldHZhbCA9IGZ1c2RfZm9wc19jYWxsX3dhaXQoZnVz
ZF9maWxlLCAmcmVwbHksIHRyYW5zYWN0aW9uKTsKLQotICBpZiAocmV0dmFsIDwgMCB8fCByZXBs
eSA9PSBOVUxMKQotICAgIGdvdG8gZG9uZTsKLQotICAvKiBkcml2ZXJzIHNob3VsZCBub3Qgd3Jp
dGUgbW9yZSBieXRlcyB0aGFuIHRoZXkgd2VyZSBhc2tlZCB0byEgKi8KLSAgaWYgKHJldHZhbCA+
IGxlbmd0aCkgewotICAgIFJERUJVRygxLCAid2FybmluZzogL2Rldi8lcyBkcml2ZXIgKHBpZCAl
ZCkgcmV0dXJuZWQgJWQgYnl0ZXMgb24gd3JpdGU7ICIKLQkgICAidGhlIHVzZXIgb25seSB3YW50
ZWQgJWQiLCAKLQkgICBOQU1FKGZ1c2RfZGV2KSwgZnVzZF9kZXYtPnBpZCwgcmV0dmFsLCAoaW50
KSBsZW5ndGgpOwotICAgIHJldHZhbCA9IGxlbmd0aDsKLSAgfQorIGNvbnN0IGNoYXIgKmJ1ZmZl
ciwKKyBzaXplX3QgbGVuZ3RoLAorIGxvZmZfdCAqb2Zmc2V0KQoreworIGZ1c2RfZGV2X3QgKmZ1
c2RfZGV2OworIGZ1c2RfZmlsZV90ICpmdXNkX2ZpbGU7CisgZnVzZF9tc2dfdCBmdXNkX21zZzsK
KyBmdXNkX21zZ190ICpyZXBseSA9IE5VTEw7CisgaW50IHJldHZhbCA9IC1FUElQRTsKKyBzdHJ1
Y3QgZnVzZF90cmFuc2FjdGlvbiogdHJhbnNhY3Rpb247CisKKyBHRVRfRlVTRF9GSUxFX0FORF9E
RVYoZmlsZS0+cHJpdmF0ZV9kYXRhLCBmdXNkX2ZpbGUsIGZ1c2RfZGV2KTsKKyBMT0NLX0ZVU0Rf
RklMRShmdXNkX2ZpbGUpOworCisgUkRFQlVHKDMsICJnb3QgYSB3cml0ZSBvbiAvZGV2LyVzIChv
d25lZCBieSBwaWQgJWQpIGZyb20gcGlkICVkIiwKKyBOQU1FKGZ1c2RfZGV2KSwgZnVzZF9kZXYt
PnBpZCwgY3VycmVudC0+cGlkKTsKKworIHRyYW5zYWN0aW9uID0gZnVzZF9maW5kX2luY29tcGxl
dGVfdHJhbnNhY3Rpb24oZnVzZF9maWxlLCBGVVNEX1dSSVRFKTsKKyBpZiAodHJhbnNhY3Rpb24g
JiYgdHJhbnNhY3Rpb24tPnNpemUgPT0gbGVuZ3RoKQorIHsKKyBSREVCVUcoMiwgIkluY29tcGxl
dGUgSS9PIHRyYW5zYWN0aW9uICVsZCB0aHJvd24gb3V0LCBhcyB0aGUgdHJhbnNhY3Rpb24ncyBz
aXplIG9mICVkIGJ5dGVzIHdhcyBub3QgZXF1YWwgdG8gIgorICJ0aGUgcmV0cnkncyBzaXplIG9m
ICVkIGJ5dGVzIiwgdHJhbnNhY3Rpb24tPnRyYW5zaWQsIHRyYW5zYWN0aW9uLT5zaXplLCAoaW50
KSBsZW5ndGgpOworCisgZnVzZF9jbGVhbnVwX3RyYW5zYWN0aW9uKGZ1c2RfZmlsZSwgdHJhbnNh
Y3Rpb24pOworIHRyYW5zYWN0aW9uID0gTlVMTDsKKyB9CisgaWYodHJhbnNhY3Rpb24gPT0gTlVM
TCkKKyB7CisgaWYgKGxlbmd0aCA8IDApIHsKKyBSREVCVUcoMiwgImZ1c2RfY2xpZW50X3dyaXRl
OiBnb3QgaW52YWxpZCBsZW5ndGggJWQiLCAoaW50KSBsZW5ndGgpOworIHJldHZhbCA9IC1FSU5W
QUw7CisgZ290byBkb25lOworIH0KKworIGlmIChsZW5ndGggPiBNQVhfUldfU0laRSkKKyBsZW5n
dGggPSBNQVhfUldfU0laRTsKKworIGluaXRfZnVzZF9tc2coJmZ1c2RfbXNnKTsKKworIC8qIHNp
Z2guLiBpIGd1ZXNzIHplcm8gbGVuZ3RoIHdyaXRlcyBzaG91bGQgYmUgbGVnYWwgKi8KKyBpZiAo
bGVuZ3RoID4gMCkgeworIGlmICgoZnVzZF9tc2cuZGF0YSA9IFZNQUxMT0MobGVuZ3RoKSkgPT0g
TlVMTCkgeworIHJldHZhbCA9IC1FTk9NRU07CisgZ290byBkb25lOworIH0KKworIGlmIChjb3B5
X2Zyb21fdXNlcihmdXNkX21zZy5kYXRhLCBidWZmZXIsIGxlbmd0aCkpIHsKKyByZXR2YWwgPSAt
RUZBVUxUOworIGdvdG8gZG9uZTsKKyB9CisgZnVzZF9tc2cuZGF0YWxlbiA9IGxlbmd0aDsKKyB9
CisKKyBmdXNkX21zZy5zdWJjbWQgPSBGVVNEX1dSSVRFOworIGZ1c2RfbXNnLnBhcm0uZm9wc19t
c2cubGVuZ3RoID0gbGVuZ3RoOworCisgaWYgKChyZXR2YWwgPSBmdXNkX2ZvcHNfY2FsbF9zZW5k
KGZ1c2RfZmlsZSwgJmZ1c2RfbXNnLCAmdHJhbnNhY3Rpb24pKSA8IDApCisgZ290byBkb25lOwor
IH0KKyAvKiB0b2RvOiBmaXggdHJhbnNpZCBvbiByZXN0YXJ0ICovCisgcmV0dmFsID0gZnVzZF9m
b3BzX2NhbGxfd2FpdChmdXNkX2ZpbGUsICZyZXBseSwgdHJhbnNhY3Rpb24pOworCisgaWYgKHJl
dHZhbCA8IDAgfHwgcmVwbHkgPT0gTlVMTCkKKyBnb3RvIGRvbmU7CisKKyAvKiBkcml2ZXJzIHNo
b3VsZCBub3Qgd3JpdGUgbW9yZSBieXRlcyB0aGFuIHRoZXkgd2VyZSBhc2tlZCB0byEgKi8KKyBp
ZiAocmV0dmFsID4gbGVuZ3RoKSB7CisgUkRFQlVHKDEsICJ3YXJuaW5nOiAvZGV2LyVzIGRyaXZl
ciAocGlkICVkKSByZXR1cm5lZCAlZCBieXRlcyBvbiB3cml0ZTsgIgorICJ0aGUgdXNlciBvbmx5
IHdhbnRlZCAlZCIsCisgTkFNRShmdXNkX2RldiksIGZ1c2RfZGV2LT5waWQsIHJldHZhbCwgKGlu
dCkgbGVuZ3RoKTsKKyByZXR2YWwgPSBsZW5ndGg7CisgfQogCi0gICpvZmZzZXQgPSByZXBseS0+
cGFybS5mb3BzX21zZy5vZmZzZXQ7CisgKm9mZnNldCA9IHJlcGx5LT5wYXJtLmZvcHNfbXNnLm9m
ZnNldDsKIAotICAvKiBhbGwgZG9uZSEgKi8KKyAvKiBhbGwgZG9uZSEgKi8KIAogIGRvbmU6Ci0g
IC8qIGNsZWFyIHRoZSB3cml0YWJsZSBiaXQgb2Ygb3VyIGNhY2hlZCBwb2xsIHN0YXRlICovCi0g
IGZ1c2RfZmlsZS0+Y2FjaGVkX3BvbGxfc3RhdGUgJj0gfihGVVNEX05PVElGWV9PVVRQVVQpOwor
IC8qIGNsZWFyIHRoZSB3cml0YWJsZSBiaXQgb2Ygb3VyIGNhY2hlZCBwb2xsIHN0YXRlICovCisg
ZnVzZF9maWxlLT5jYWNoZWRfcG9sbF9zdGF0ZSAmPSB+KEZVU0RfTk9USUZZX09VVFBVVCk7CiAK
LSAgZnJlZV9mdXNkX21zZygmcmVwbHkpOwotICBVTkxPQ0tfRlVTRF9GSUxFKGZ1c2RfZmlsZSk7
Ci0gIHJldHVybiByZXR2YWw7CisgZnJlZV9mdXNkX21zZygmcmVwbHkpOworIFVOTE9DS19GVVNE
X0ZJTEUoZnVzZF9maWxlKTsKKyByZXR1cm4gcmV0dmFsOwogCiAgaW52YWxpZF9maWxlOgogIGlu
dmFsaWRfZGV2OgotICBSREVCVUcoMywgImdvdCBhIHJlYWQgb24gY2xpZW50IGZpbGUgZnJvbSBw
aWQgJWQsIGRyaXZlciBoYXMgZGlzYXBwZWFyZWQiLAotCSBjdXJyZW50LT5waWQpOwotICByZXR1
cm4gLUVQSVBFOworIFJERUJVRygzLCAiZ290IGEgcmVhZCBvbiBjbGllbnQgZmlsZSBmcm9tIHBp
ZCAlZCwgZHJpdmVyIGhhcyBkaXNhcHBlYXJlZCIsCisgY3VycmVudC0+cGlkKTsKKyByZXR1cm4g
LUVQSVBFOwogfQogCiAKIFNUQVRJQyBpbnQgZnVzZF9jbGllbnRfaW9jdGwoc3RydWN0IGlub2Rl
ICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkJIHVuc2lnbmVkIGludCBjbWQsIHVuc2ln
bmVkIGxvbmcgYXJnKQorIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewot
ICBmdXNkX2Rldl90ICpmdXNkX2RldjsKLSAgZnVzZF9maWxlX3QgKmZ1c2RfZmlsZTsKLSAgZnVz
ZF9tc2dfdCBmdXNkX21zZywgKnJlcGx5ID0gTlVMTDsKLSAgaW50IHJldHZhbCA9IC1FUElQRSwg
ZGlyLCBsZW5ndGg7Ci0gIHN0cnVjdCBmdXNkX3RyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbjsKLSAg
Ci0gIEdFVF9GVVNEX0ZJTEVfQU5EX0RFVihmaWxlLT5wcml2YXRlX2RhdGEsIGZ1c2RfZmlsZSwg
ZnVzZF9kZXYpOwotICBMT0NLX0ZVU0RfRklMRShmdXNkX2ZpbGUpOwotCi0gIFJERUJVRygzLCAi
Z290IGFuIGlvY3RsIG9uIC9kZXYvJXMgKG93bmVkIGJ5IHBpZCAlZCkgZnJvbSBwaWQgJWQiLAot
CSBOQU1FKGZ1c2RfZGV2KSwgZnVzZF9kZXYtPnBpZCwgY3VycmVudC0+cGlkKTsKLQotICBkaXIg
PSBfSU9DX0RJUihjbWQpOwotICBsZW5ndGggPSBfSU9DX1NJWkUoY21kKTsKLQotICB0cmFuc2Fj
dGlvbiA9IGZ1c2RfZmluZF9pbmNvbXBsZXRlX3RyYW5zYWN0aW9uKGZ1c2RfZmlsZSwgRlVTRF9J
T0NUTCk7Ci0gIC8vIHRvZG86IENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgdHJhbnNhY3Rpb24gaXMg
Zm9yIHRoZSBzYW1lIElPQ1RMCi0KLSAgaWYodHJhbnNhY3Rpb24gPT0gTlVMTCkKLSAgewotICAg
IC8qIGlmIHdlJ3JlIHRyeWluZyB0byByZWFkIG9yIHdyaXRlLCBtYWtlIHN1cmUgbGVuZ3RoIGlz
IHNhbmUgKi8KLSAgICBpZiAoKGRpciAmIChfSU9DX1dSSVRFIHwgX0lPQ19SRUFEKSkgJiYKLSAg
ICAgICAgKGxlbmd0aCA8PSAwIHx8IGxlbmd0aCA+IE1BWF9SV19TSVpFKSkKLSAgICAgIHsKLSAg
ICAgICAgUkRFQlVHKDIsICJjbGllbnQgaW9jdGwgZ290IGNyYXp5IElPQ19TSVpFIG9mICVkIiwg
bGVuZ3RoKTsKLSAgICAgICAgcmV0dmFsID0gLUVJTlZBTDsKLSAgICAgICAgZ290byBkb25lOwot
ICAgICAgfQotICAKLSAgICAvKiBmaWxsIHRoZSBzdHJ1Y3QgKi8KLSAgICBpbml0X2Z1c2RfbXNn
KCZmdXNkX21zZyk7Ci0gICAgZnVzZF9tc2cuc3ViY21kID0gRlVTRF9JT0NUTDsKLSAgICBmdXNk
X21zZy5wYXJtLmZvcHNfbXNnLmNtZCA9IGNtZDsKLSAgICBmdXNkX21zZy5wYXJtLmZvcHNfbXNn
LmFyZyA9IGFyZzsKLSAgCi0gICAgLyogZ2V0IHRoZSBkYXRhIGlmIHVzZXIgaXMgdHJ5aW5nIHRv
IHdyaXRlIHRvIHRoZSBkcml2ZXIgKi8KLSAgICBpZiAoZGlyICYgX0lPQ19XUklURSkgewotICAg
ICAgaWYgKChmdXNkX21zZy5kYXRhID0gVk1BTExPQyhsZW5ndGgpKSA9PSBOVUxMKSB7Ci0gICAg
ICAgIFJERUJVRygyLCAiY2FuJ3Qgdm1hbGxvYyBmb3IgY2xpZW50IGlvY3RsISIpOwotICAgICAg
ICByZXR2YWwgPSAtRU5PTUVNOwotICAgICAgICBnb3RvIGRvbmU7Ci0gICAgICB9Ci0gIAotICAg
ICAgaWYgKGNvcHlfZnJvbV91c2VyKGZ1c2RfbXNnLmRhdGEsICh2b2lkICopIGFyZywgbGVuZ3Ro
KSkgewotICAgICAgICByZXR2YWwgPSAtRUZBVUxUOwotICAgICAgICBnb3RvIGRvbmU7Ci0gICAg
ICB9Ci0gICAgICBmdXNkX21zZy5kYXRhbGVuID0gbGVuZ3RoOwotICAgIH0KLSAgCi0gICAgLyog
c2VuZCByZXF1ZXN0IHRvIHRoZSBkcml2ZXIgKi8KLSAgICBpZiAoKHJldHZhbCA9IGZ1c2RfZm9w
c19jYWxsX3NlbmQoZnVzZF9maWxlLCAmZnVzZF9tc2csICZ0cmFuc2FjdGlvbikpIDwgMCkKLSAg
ICAgIGdvdG8gZG9uZTsKLSAgfQotICAvKiBnZXQgdGhlIHJlc3BvbnNlICovCi0JLyogdG9kbzog
Zml4IHRyYW5zaWQgb24gcmVzdGFydCAqLwotICBpZiAoKHJldHZhbCA9IGZ1c2RfZm9wc19jYWxs
X3dhaXQoZnVzZF9maWxlLCAmcmVwbHksIHRyYW5zYWN0aW9uKSkgPCAwIHx8IHJlcGx5ID09IE5V
TEwpCi0gICAgZ290byBkb25lOwotCi0gIC8qIGlmIHVzZXIgaXMgdHJ5aW5nIHRvIHJlYWQgZnJv
bSB0aGUgZHJpdmVyLCBjb3B5IGRhdGEgYmFjayAqLwotICBpZiAoZGlyICYgX0lPQ19SRUFEKSB7
Ci0gICAgaWYgKHJlcGx5LT5kYXRhID09IE5VTEwgfHwgcmVwbHktPmRhdGFsZW4gIT0gbGVuZ3Ro
KSB7Ci0gICAgICBSREVCVUcoMiwgImNsaWVudF9pb2N0bCByZWFkIHJlcGx5IHdpdGggc2NyZXd5
IGRhdGEgKCVkLCAlZCkiLAotCSAgICAgcmVwbHktPmRhdGFsZW4sIGxlbmd0aCk7Ci0gICAgICBy
ZXR2YWwgPSAtRUlPOwotICAgICAgZ290byBkb25lOwotICAgIH0KLSAgICBpZiAoY29weV90b191
c2VyKCh2b2lkICopYXJnLCByZXBseS0+ZGF0YSwgbGVuZ3RoKSkgewotICAgICAgcmV0dmFsID0g
LUVGQVVMVDsKLSAgICAgIGdvdG8gZG9uZTsKLSAgICB9Ci0gIH0KKyBmdXNkX2Rldl90ICpmdXNk
X2RldjsKKyBmdXNkX2ZpbGVfdCAqZnVzZF9maWxlOworIGZ1c2RfbXNnX3QgZnVzZF9tc2csICpy
ZXBseSA9IE5VTEw7CisgaW50IHJldHZhbCA9IC1FUElQRSwgZGlyLCBsZW5ndGg7Cisgc3RydWN0
IGZ1c2RfdHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uOworCisgR0VUX0ZVU0RfRklMRV9BTkRfREVW
KGZpbGUtPnByaXZhdGVfZGF0YSwgZnVzZF9maWxlLCBmdXNkX2Rldik7CisgTE9DS19GVVNEX0ZJ
TEUoZnVzZF9maWxlKTsKKworIFJERUJVRygzLCAiZ290IGFuIGlvY3RsIG9uIC9kZXYvJXMgKG93
bmVkIGJ5IHBpZCAlZCkgZnJvbSBwaWQgJWQiLAorIE5BTUUoZnVzZF9kZXYpLCBmdXNkX2Rldi0+
cGlkLCBjdXJyZW50LT5waWQpOworCisgZGlyID0gX0lPQ19ESVIoY21kKTsKKyBsZW5ndGggPSBf
SU9DX1NJWkUoY21kKTsKKworIHRyYW5zYWN0aW9uID0gZnVzZF9maW5kX2luY29tcGxldGVfdHJh
bnNhY3Rpb24oZnVzZF9maWxlLCBGVVNEX0lPQ1RMKTsKKyAvLyB0b2RvOiBDaGVjayB0byBtYWtl
IHN1cmUgdGhlIHRyYW5zYWN0aW9uIGlzIGZvciB0aGUgc2FtZSBJT0NUTAorCisgaWYodHJhbnNh
Y3Rpb24gPT0gTlVMTCkKKyB7CisgLyogaWYgd2UncmUgdHJ5aW5nIHRvIHJlYWQgb3Igd3JpdGUs
IG1ha2Ugc3VyZSBsZW5ndGggaXMgc2FuZSAqLworIGlmICgoZGlyICYgKF9JT0NfV1JJVEUgfCBf
SU9DX1JFQUQpKSAmJgorIChsZW5ndGggPD0gMCB8fCBsZW5ndGggPiBNQVhfUldfU0laRSkpCisg
eworIFJERUJVRygyLCAiY2xpZW50IGlvY3RsIGdvdCBjcmF6eSBJT0NfU0laRSBvZiAlZCIsIGxl
bmd0aCk7CisgcmV0dmFsID0gLUVJTlZBTDsKKyBnb3RvIGRvbmU7CisgfQorCisgLyogZmlsbCB0
aGUgc3RydWN0ICovCisgaW5pdF9mdXNkX21zZygmZnVzZF9tc2cpOworIGZ1c2RfbXNnLnN1YmNt
ZCA9IEZVU0RfSU9DVEw7CisgZnVzZF9tc2cucGFybS5mb3BzX21zZy5jbWQgPSBjbWQ7CisgZnVz
ZF9tc2cucGFybS5mb3BzX21zZy5hcmcgPSBhcmc7CisKKyAvKiBnZXQgdGhlIGRhdGEgaWYgdXNl
ciBpcyB0cnlpbmcgdG8gd3JpdGUgdG8gdGhlIGRyaXZlciAqLworIGlmIChkaXIgJiBfSU9DX1dS
SVRFKSB7CisgaWYgKChmdXNkX21zZy5kYXRhID0gVk1BTExPQyhsZW5ndGgpKSA9PSBOVUxMKSB7
CisgUkRFQlVHKDIsICJjYW4ndCB2bWFsbG9jIGZvciBjbGllbnQgaW9jdGwhIik7CisgcmV0dmFs
ID0gLUVOT01FTTsKKyBnb3RvIGRvbmU7CisgfQorCisgaWYgKGNvcHlfZnJvbV91c2VyKGZ1c2Rf
bXNnLmRhdGEsICh2b2lkICopIGFyZywgbGVuZ3RoKSkgeworIHJldHZhbCA9IC1FRkFVTFQ7Cisg
Z290byBkb25lOworIH0KKyBmdXNkX21zZy5kYXRhbGVuID0gbGVuZ3RoOworIH0KKworIC8qIHNl
bmQgcmVxdWVzdCB0byB0aGUgZHJpdmVyICovCisgaWYgKChyZXR2YWwgPSBmdXNkX2ZvcHNfY2Fs
bF9zZW5kKGZ1c2RfZmlsZSwgJmZ1c2RfbXNnLCAmdHJhbnNhY3Rpb24pKSA8IDApCisgZ290byBk
b25lOworIH0KKyAvKiBnZXQgdGhlIHJlc3BvbnNlICovCisgLyogdG9kbzogZml4IHRyYW5zaWQg
b24gcmVzdGFydCAqLworIGlmICgocmV0dmFsID0gZnVzZF9mb3BzX2NhbGxfd2FpdChmdXNkX2Zp
bGUsICZyZXBseSwgdHJhbnNhY3Rpb24pKSA8IDAgfHwgcmVwbHkgPT0gTlVMTCkKKyBnb3RvIGRv
bmU7CisKKyAvKiBpZiB1c2VyIGlzIHRyeWluZyB0byByZWFkIGZyb20gdGhlIGRyaXZlciwgY29w
eSBkYXRhIGJhY2sgKi8KKyBpZiAoZGlyICYgX0lPQ19SRUFEKSB7CisgaWYgKHJlcGx5LT5kYXRh
ID09IE5VTEwgfHwgcmVwbHktPmRhdGFsZW4gIT0gbGVuZ3RoKSB7CisgUkRFQlVHKDIsICJjbGll
bnRfaW9jdGwgcmVhZCByZXBseSB3aXRoIHNjcmV3eSBkYXRhICglZCwgJWQpIiwKKyByZXBseS0+
ZGF0YWxlbiwgbGVuZ3RoKTsKKyByZXR2YWwgPSAtRUlPOworIGdvdG8gZG9uZTsKKyB9CisgaWYg
KGNvcHlfdG9fdXNlcigodm9pZCAqKWFyZywgcmVwbHktPmRhdGEsIGxlbmd0aCkpIHsKKyByZXR2
YWwgPSAtRUZBVUxUOworIGdvdG8gZG9uZTsKKyB9CisgfQogCi0gIC8qIGFsbCBkb25lISAqLwor
IC8qIGFsbCBkb25lISAqLwogIGRvbmU6Ci0gIGZyZWVfZnVzZF9tc2coJnJlcGx5KTsKLSAgVU5M
T0NLX0ZVU0RfRklMRShmdXNkX2ZpbGUpOwotICByZXR1cm4gcmV0dmFsOworIGZyZWVfZnVzZF9t
c2coJnJlcGx5KTsKKyBVTkxPQ0tfRlVTRF9GSUxFKGZ1c2RfZmlsZSk7CisgcmV0dXJuIHJldHZh
bDsKIAogIGludmFsaWRfZmlsZToKICBpbnZhbGlkX2RldjoKLSAgUkRFQlVHKDMsICJnb3QgYSBy
ZWFkIG9uIGNsaWVudCBmaWxlIGZyb20gcGlkICVkLCBkcml2ZXIgaGFzIGRpc2FwcGVhcmVkIiwK
LQkgY3VycmVudC0+cGlkKTsKLSAgcmV0dXJuIC1FUElQRTsKKyBSREVCVUcoMywgImdvdCBhIHJl
YWQgb24gY2xpZW50IGZpbGUgZnJvbSBwaWQgJWQsIGRyaXZlciBoYXMgZGlzYXBwZWFyZWQiLAor
IGN1cnJlbnQtPnBpZCk7CisgcmV0dXJuIC1FUElQRTsKIH0KIHN0YXRpYyB2b2lkIGZ1c2RfY2xp
ZW50X21tX29wZW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICogdm1hKTsKIHN0YXRpYyB2b2lkIGZ1
c2RfY2xpZW50X21tX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIHZtYSk7CiBzdGF0aWMg
c3RydWN0IHBhZ2UqIGZ1c2RfY2xpZW50X25vcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QqIHZt
YSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBpbnQqIHR5cGUpOwogc3RhdGljIHN0cnVjdCB2bV9v
cGVyYXRpb25zX3N0cnVjdCBmdXNkX3JlbWFwX3ZtX29wcyA9CiB7Ci0gIG9wZW46IGZ1c2RfY2xp
ZW50X21tX29wZW4sCi0gIGNsb3NlOiBmdXNkX2NsaWVudF9tbV9jbG9zZSwKLSAgbm9wYWdlOiBm
dXNkX2NsaWVudF9ub3BhZ2UsCisgb3BlbjogZnVzZF9jbGllbnRfbW1fb3BlbiwKKyBjbG9zZTog
ZnVzZF9jbGllbnRfbW1fY2xvc2UsCisgbm9wYWdlOiBmdXNkX2NsaWVudF9ub3BhZ2UsCiB9Owog
CiBzdHJ1Y3QgZnVzZF9tbWFwX2luc3RhbmNlCiB7Ci0gIGZ1c2RfZGV2X3QqIGZ1c2RfZGV2Owot
ICBmdXNkX2ZpbGVfdCogZnVzZF9maWxlOwotICB1bnNpZ25lZCBsb25nIGFkZHI7Ci0gIGludCBz
aXplOwotICBhdG9taWNfdCByZWZjb3VudDsKKyBmdXNkX2Rldl90KiBmdXNkX2RldjsKKyBmdXNk
X2ZpbGVfdCogZnVzZF9maWxlOworIHVuc2lnbmVkIGxvbmcgYWRkcjsKKyBpbnQgc2l6ZTsKKyBh
dG9taWNfdCByZWZjb3VudDsKIH07CiAKIHN0YXRpYyB2b2lkIGZ1c2RfY2xpZW50X21tX29wZW4o
c3RydWN0IHZtX2FyZWFfc3RydWN0ICogdm1hKQogewotICBzdHJ1Y3QgZnVzZF9tbWFwX2luc3Rh
bmNlKiBtbWFwX2luc3RhbmNlID0gKHN0cnVjdCBmdXNkX21tYXBfaW5zdGFuY2UqKSB2bWEtPnZt
X3ByaXZhdGVfZGF0YTsKLSAgYXRvbWljX2luYygmbW1hcF9pbnN0YW5jZS0+cmVmY291bnQpOwot
ICAKKyBzdHJ1Y3QgZnVzZF9tbWFwX2luc3RhbmNlKiBtbWFwX2luc3RhbmNlID0gKHN0cnVjdCBm
dXNkX21tYXBfaW5zdGFuY2UqKSB2bWEtPnZtX3ByaXZhdGVfZGF0YTsKKyBhdG9taWNfaW5jKCZt
bWFwX2luc3RhbmNlLT5yZWZjb3VudCk7CisKIH0KIAogc3RhdGljIHZvaWQgZnVzZF9jbGllbnRf
bW1fY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICogdm1hKQogewotICBzdHJ1Y3QgZnVzZF9t
bWFwX2luc3RhbmNlKiBtbWFwX2luc3RhbmNlID0gKHN0cnVjdCBmdXNkX21tYXBfaW5zdGFuY2Uq
KSB2bWEtPnZtX3ByaXZhdGVfZGF0YTsKLSAgaWYoYXRvbWljX2RlY19hbmRfdGVzdCgmbW1hcF9p
bnN0YW5jZS0+cmVmY291bnQpKQotICB7Ci0gICAgS0ZSRUUobW1hcF9pbnN0YW5jZSk7Ci0gIH0K
KyBzdHJ1Y3QgZnVzZF9tbWFwX2luc3RhbmNlKiBtbWFwX2luc3RhbmNlID0gKHN0cnVjdCBmdXNk
X21tYXBfaW5zdGFuY2UqKSB2bWEtPnZtX3ByaXZhdGVfZGF0YTsKKyBpZihhdG9taWNfZGVjX2Fu
ZF90ZXN0KCZtbWFwX2luc3RhbmNlLT5yZWZjb3VudCkpCisgeworIEtGUkVFKG1tYXBfaW5zdGFu
Y2UpOworIH0KIH0KIAogc3RhdGljIGludCBmdXNkX2NsaWVudF9tbWFwKHN0cnVjdCBmaWxlICpm
aWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bWEpCiB7Ci0gIGZ1c2RfZGV2X3QgKmZ1c2Rf
ZGV2OwotICBmdXNkX2ZpbGVfdCAqZnVzZF9maWxlOwotICBzdHJ1Y3QgZnVzZF90cmFuc2FjdGlv
biogdHJhbnNhY3Rpb247Ci0gIGZ1c2RfbXNnX3QgZnVzZF9tc2csICpyZXBseSA9IE5VTEw7Ci0g
IGludCByZXR2YWwgPSAtRVBJUEU7Ci0gIHN0cnVjdCBmdXNkX21tYXBfaW5zdGFuY2UqIG1tYXBf
aW5zdGFuY2U7Ci0KLSAgR0VUX0ZVU0RfRklMRV9BTkRfREVWKGZpbGUtPnByaXZhdGVfZGF0YSwg
ZnVzZF9maWxlLCBmdXNkX2Rldik7Ci0gIExPQ0tfRlVTRF9GSUxFKGZ1c2RfZmlsZSk7Ci0KLSAg
UkRFQlVHKDMsICJnb3QgYSBtbWFwIG9uIC9kZXYvJXMgKG93bmVkIGJ5IHBpZCAlZCkgZnJvbSBw
aWQgJWQiLAotCSBOQU1FKGZ1c2RfZGV2KSwgZnVzZF9kZXYtPnBpZCwgY3VycmVudC0+cGlkKTsK
LQotICB0cmFuc2FjdGlvbiA9IGZ1c2RfZmluZF9pbmNvbXBsZXRlX3RyYW5zYWN0aW9uKGZ1c2Rf
ZmlsZSwgRlVTRF9NTUFQKTsKLQotICBpZih0cmFuc2FjdGlvbiA9PSBOVUxMKQotICB7Ci0gICAg
Lyogc2VuZCB0aGUgbWVzc2FnZSAqLwotICAgIGluaXRfZnVzZF9tc2coJmZ1c2RfbXNnKTsKLSAg
ICBmdXNkX21zZy5zdWJjbWQgPSBGVVNEX01NQVA7Ci0gICAgZnVzZF9tc2cucGFybS5mb3BzX21z
Zy5vZmZzZXQgPSB2bWEtPnZtX3Bnb2ZmIDw8IFBBR0VfU0hJRlQ7Ci0gICAgZnVzZF9tc2cucGFy
bS5mb3BzX21zZy5mbGFncyA9IHZtYS0+dm1fZmxhZ3M7Ci0gICAgZnVzZF9tc2cucGFybS5mb3Bz
X21zZy5sZW5ndGggPSB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQ7Ci0gICAgCi0gICAgLyog
c2VuZCBtZXNzYWdlIHRvIHVzZXJzcGFjZSAqLwotICAgIGlmICgocmV0dmFsID0gZnVzZF9mb3Bz
X2NhbGxfc2VuZChmdXNkX2ZpbGUsICZmdXNkX21zZywgJnRyYW5zYWN0aW9uKSkgPCAwKQotICAg
ICAgZ290byBkb25lOwotICB9Ci0gIAotICAvKiBhbmQgd2FpdCBmb3IgdGhlIHJlcGx5ICovCi0g
IC8qIHRvZG86IHN0b3JlIGFuZCByZXRyaWV2ZSB0aGUgdHJhbnNpZCBmcm9tIHRoZSBpbnRlcnJ1
cHRlZCBtZXNzc2FnZSAqLwotICByZXR2YWwgPSBmdXNkX2ZvcHNfY2FsbF93YWl0KGZ1c2RfZmls
ZSwgJnJlcGx5LCB0cmFuc2FjdGlvbik7Ci0gIAotICBtbWFwX2luc3RhbmNlID0gCi0gICAgKHN0
cnVjdCBmdXNkX21tYXBfaW5zdGFuY2UqKSBLTUFMTE9DKHNpemVvZihzdHJ1Y3QgZnVzZF9tbWFw
X2luc3RhbmNlKSwgR0ZQX0tFUk5FTCk7Ci0gIC8vIHRvZG86IGZyZWUgdGhpcyB0aGluZyBhdCBz
b21lIHBvaW50Ci0gIAotICBtbWFwX2luc3RhbmNlLT5mdXNkX2RldiA9IGZ1c2RfZGV2OwotICBt
bWFwX2luc3RhbmNlLT5mdXNkX2ZpbGUgPSBmdXNkX2ZpbGU7Ci0gIG1tYXBfaW5zdGFuY2UtPmFk
ZHIgPSByZXBseS0+cGFybS5mb3BzX21zZy5hcmc7Ci0gIG1tYXBfaW5zdGFuY2UtPnNpemUgPSBy
ZXBseS0+cGFybS5mb3BzX21zZy5sZW5ndGg7Ci0gIGF0b21pY19zZXQoJm1tYXBfaW5zdGFuY2Ut
PnJlZmNvdW50LCAwKTsKLSAgCi0gIHJldHZhbCA9IHJlcGx5LT5wYXJtLmZvcHNfbXNnLnJldHZh
bDsKLSAgCi0gIHZtYS0+dm1fcHJpdmF0ZV9kYXRhID0gbW1hcF9pbnN0YW5jZTsKLSAgdm1hLT52
bV9vcHMgPSAmZnVzZF9yZW1hcF92bV9vcHM7Ci0gIHZtYS0+dm1fZmxhZ3MgfD0gVk1fUkVTRVJW
RUQ7Ci0gIAotICBmdXNkX2NsaWVudF9tbV9vcGVuKHZtYSk7Ci0gIAorIGZ1c2RfZGV2X3QgKmZ1
c2RfZGV2OworIGZ1c2RfZmlsZV90ICpmdXNkX2ZpbGU7Cisgc3RydWN0IGZ1c2RfdHJhbnNhY3Rp
b24qIHRyYW5zYWN0aW9uOworIGZ1c2RfbXNnX3QgZnVzZF9tc2csICpyZXBseSA9IE5VTEw7Cisg
aW50IHJldHZhbCA9IC1FUElQRTsKKyBzdHJ1Y3QgZnVzZF9tbWFwX2luc3RhbmNlKiBtbWFwX2lu
c3RhbmNlOworCisgR0VUX0ZVU0RfRklMRV9BTkRfREVWKGZpbGUtPnByaXZhdGVfZGF0YSwgZnVz
ZF9maWxlLCBmdXNkX2Rldik7CisgTE9DS19GVVNEX0ZJTEUoZnVzZF9maWxlKTsKKworIFJERUJV
RygzLCAiZ290IGEgbW1hcCBvbiAvZGV2LyVzIChvd25lZCBieSBwaWQgJWQpIGZyb20gcGlkICVk
IiwKKyBOQU1FKGZ1c2RfZGV2KSwgZnVzZF9kZXYtPnBpZCwgY3VycmVudC0+cGlkKTsKKworIHRy
YW5zYWN0aW9uID0gZnVzZF9maW5kX2luY29tcGxldGVfdHJhbnNhY3Rpb24oZnVzZF9maWxlLCBG
VVNEX01NQVApOworCisgaWYodHJhbnNhY3Rpb24gPT0gTlVMTCkKKyB7CisgLyogc2VuZCB0aGUg
bWVzc2FnZSAqLworIGluaXRfZnVzZF9tc2coJmZ1c2RfbXNnKTsKKyBmdXNkX21zZy5zdWJjbWQg
PSBGVVNEX01NQVA7CisgZnVzZF9tc2cucGFybS5mb3BzX21zZy5vZmZzZXQgPSB2bWEtPnZtX3Bn
b2ZmIDw8IFBBR0VfU0hJRlQ7CisgZnVzZF9tc2cucGFybS5mb3BzX21zZy5mbGFncyA9IHZtYS0+
dm1fZmxhZ3M7CisgZnVzZF9tc2cucGFybS5mb3BzX21zZy5sZW5ndGggPSB2bWEtPnZtX2VuZCAt
IHZtYS0+dm1fc3RhcnQ7CisKKyAvKiBzZW5kIG1lc3NhZ2UgdG8gdXNlcnNwYWNlICovCisgaWYg
KChyZXR2YWwgPSBmdXNkX2ZvcHNfY2FsbF9zZW5kKGZ1c2RfZmlsZSwgJmZ1c2RfbXNnLCAmdHJh
bnNhY3Rpb24pKSA8IDApCisgZ290byBkb25lOworIH0KKworIC8qIGFuZCB3YWl0IGZvciB0aGUg
cmVwbHkgKi8KKyAvKiB0b2RvOiBzdG9yZSBhbmQgcmV0cmlldmUgdGhlIHRyYW5zaWQgZnJvbSB0
aGUgaW50ZXJydXB0ZWQgbWVzc3NhZ2UgKi8KKyByZXR2YWwgPSBmdXNkX2ZvcHNfY2FsbF93YWl0
KGZ1c2RfZmlsZSwgJnJlcGx5LCB0cmFuc2FjdGlvbik7CisKKyBtbWFwX2luc3RhbmNlID0KKyAo
c3RydWN0IGZ1c2RfbW1hcF9pbnN0YW5jZSopIEtNQUxMT0Moc2l6ZW9mKHN0cnVjdCBmdXNkX21t
YXBfaW5zdGFuY2UpLCBHRlBfS0VSTkVMKTsKKyAvLyB0b2RvOiBmcmVlIHRoaXMgdGhpbmcgYXQg
c29tZSBwb2ludAorCisgbW1hcF9pbnN0YW5jZS0+ZnVzZF9kZXYgPSBmdXNkX2RldjsKKyBtbWFw
X2luc3RhbmNlLT5mdXNkX2ZpbGUgPSBmdXNkX2ZpbGU7CisgbW1hcF9pbnN0YW5jZS0+YWRkciA9
IHJlcGx5LT5wYXJtLmZvcHNfbXNnLmFyZzsKKyBtbWFwX2luc3RhbmNlLT5zaXplID0gcmVwbHkt
PnBhcm0uZm9wc19tc2cubGVuZ3RoOworIGF0b21pY19zZXQoJm1tYXBfaW5zdGFuY2UtPnJlZmNv
dW50LCAwKTsKKworIHJldHZhbCA9IHJlcGx5LT5wYXJtLmZvcHNfbXNnLnJldHZhbDsKKworIHZt
YS0+dm1fcHJpdmF0ZV9kYXRhID0gbW1hcF9pbnN0YW5jZTsKKyB2bWEtPnZtX29wcyA9ICZmdXNk
X3JlbWFwX3ZtX29wczsKKyB2bWEtPnZtX2ZsYWdzIHw9IFZNX1JFU0VSVkVEOworCisgZnVzZF9j
bGllbnRfbW1fb3Blbih2bWEpOworCiAgZG9uZToKLSAgZnJlZV9mdXNkX21zZygmcmVwbHkpOwot
ICBVTkxPQ0tfRlVTRF9GSUxFKGZ1c2RfZmlsZSk7Ci0gIHJldHVybiByZXR2YWw7CisgZnJlZV9m
dXNkX21zZygmcmVwbHkpOworIFVOTE9DS19GVVNEX0ZJTEUoZnVzZF9maWxlKTsKKyByZXR1cm4g
cmV0dmFsOwogCiAgaW52YWxpZF9maWxlOgogIGludmFsaWRfZGV2OgotICBSREVCVUcoMywgImdv
dCBhIG1tYXAgb24gY2xpZW50IGZpbGUgZnJvbSBwaWQgJWQsIGRyaXZlciBoYXMgZGlzYXBwZWFy
ZWQiLAotCSBjdXJyZW50LT5waWQpOwotICByZXR1cm4gLUVQSVBFOworIFJERUJVRygzLCAiZ290
IGEgbW1hcCBvbiBjbGllbnQgZmlsZSBmcm9tIHBpZCAlZCwgZHJpdmVyIGhhcyBkaXNhcHBlYXJl
ZCIsCisgY3VycmVudC0+cGlkKTsKKyByZXR1cm4gLUVQSVBFOwogfQogCiBzdGF0aWMgc3RydWN0
IHBhZ2UqIGZ1c2RfY2xpZW50X25vcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QqIHZtYSwgdW5z
aWduZWQgbG9uZyBhZGRyZXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQq
IHR5cGUpCisgaW50KiB0eXBlKQogewotICBzdHJ1Y3QgZnVzZF9tbWFwX2luc3RhbmNlKiBtbWFw
X2luc3RhbmNlID0gKHN0cnVjdCBmdXNkX21tYXBfaW5zdGFuY2UqKSB2bWEtPnZtX3ByaXZhdGVf
ZGF0YTsKLSAgdW5zaWduZWQgbG9uZyBvZmZzZXQ7Ci0gIHN0cnVjdCBwYWdlICpwYWdlID0gTk9Q
QUdFX1NJR0JVUzsKLSAgaW50IHJlc3VsdDsKLSAgb2Zmc2V0ID0gKGFkZHJlc3MgLSB2bWEtPnZt
X3N0YXJ0KSArICh2bWEtPnZtX3Bnb2ZmIDw8IFBBR0VfU0hJRlQpOwotICAvLyB0b2RvOiB3b3Jy
eSBhYm91dCBzaXplCi0gIGlmKG9mZnNldCA+IG1tYXBfaW5zdGFuY2UtPnNpemUpCi0gICAgZ290
byBvdXQ7Ci0gIAotICBkb3duX3JlYWQoJm1tYXBfaW5zdGFuY2UtPmZ1c2RfZGV2LT50YXNrLT5t
bS0+bW1hcF9zZW0pOwotICByZXN1bHQgPSBnZXRfdXNlcl9wYWdlcyhtbWFwX2luc3RhbmNlLT5m
dXNkX2Rldi0+dGFzaywgbW1hcF9pbnN0YW5jZS0+ZnVzZF9kZXYtPnRhc2stPm1tLCBtbWFwX2lu
c3RhbmNlLT5hZGRyICsgb2Zmc2V0LCAxLCAxLCAwLCAmcGFnZSwgTlVMTCk7Ci0gIHVwX3JlYWQo
Jm1tYXBfaW5zdGFuY2UtPmZ1c2RfZGV2LT50YXNrLT5tbS0+bW1hcF9zZW0pOwotICAKLSAgCi0g
IGlmKFBhZ2VBbm9uKHBhZ2UpKQotICB7Ci0gICAgUkRFQlVHKDIsICJDYW5ub3QgbW1hcCBhbm9u
eW1vdXMgcGFnZXMuIEJlIHN1cmUgdG8gYWxsb2NhdGUgeW91ciBzaGFyZWQgYnVmZmVyIHdpdGgg
TUFQX1NIQVJFRCB8IE1BUF9BTk9OWU1PVVMiKTsKLSAgICByZXR1cm4gTk9QQUdFX1NJR0JVUzsK
LSAgfQotICAKLSAgaWYocmVzdWx0ID4gMCkKLSAgewotICAgIGdldF9wYWdlKHBhZ2UpOwotICAg
IGlmICh0eXBlKQotICAgICAgKnR5cGUgPSBWTV9GQVVMVF9NSU5PUjsKLSAgfQorIHN0cnVjdCBm
dXNkX21tYXBfaW5zdGFuY2UqIG1tYXBfaW5zdGFuY2UgPSAoc3RydWN0IGZ1c2RfbW1hcF9pbnN0
YW5jZSopIHZtYS0+dm1fcHJpdmF0ZV9kYXRhOworIHVuc2lnbmVkIGxvbmcgb2Zmc2V0OworIHN0
cnVjdCBwYWdlICpwYWdlID0gTk9QQUdFX1NJR0JVUzsKKyBpbnQgcmVzdWx0OworIG9mZnNldCA9
IChhZGRyZXNzIC0gdm1hLT52bV9zdGFydCkgKyAodm1hLT52bV9wZ29mZiA8PCBQQUdFX1NISUZU
KTsKKyAvLyB0b2RvOiB3b3JyeSBhYm91dCBzaXplCisgaWYob2Zmc2V0ID4gbW1hcF9pbnN0YW5j
ZS0+c2l6ZSkKKyBnb3RvIG91dDsKKworIGRvd25fcmVhZCgmbW1hcF9pbnN0YW5jZS0+ZnVzZF9k
ZXYtPnRhc2stPm1tLT5tbWFwX3NlbSk7CisgcmVzdWx0ID0gZ2V0X3VzZXJfcGFnZXMobW1hcF9p
bnN0YW5jZS0+ZnVzZF9kZXYtPnRhc2ssIG1tYXBfaW5zdGFuY2UtPmZ1c2RfZGV2LT50YXNrLT5t
bSwgbW1hcF9pbnN0YW5jZS0+YWRkciArIG9mZnNldCwgMSwgMSwgMCwgJnBhZ2UsIE5VTEwpOwor
IHVwX3JlYWQoJm1tYXBfaW5zdGFuY2UtPmZ1c2RfZGV2LT50YXNrLT5tbS0+bW1hcF9zZW0pOwor
CisKKyBpZihQYWdlQW5vbihwYWdlKSkKKyB7CisgUkRFQlVHKDIsICJDYW5ub3QgbW1hcCBhbm9u
eW1vdXMgcGFnZXMuIEJlIHN1cmUgdG8gYWxsb2NhdGUgeW91ciBzaGFyZWQgYnVmZmVyIHdpdGgg
TUFQX1NIQVJFRCB8IE1BUF9BTk9OWU1PVVMiKTsKKyByZXR1cm4gTk9QQUdFX1NJR0JVUzsKKyB9
CisKKyBpZihyZXN1bHQgPiAwKQorIHsKKyBnZXRfcGFnZShwYWdlKTsKKyBpZiAodHlwZSkKKyAq
dHlwZSA9IFZNX0ZBVUxUX01JTk9SOworIH0KIG91dDoKLSAgcmV0dXJuIHBhZ2U7CisgcmV0dXJu
IHBhZ2U7CiAKIAogfQpAQCAtMTY3MSwxMDggKzE2NzEsMTA4IEBACiAgKiBUaGUgZGVzaWduIG9m
IHBvbGwgZm9yIGNsaWVudHMgaXMgYSBiaXQgc3VidGxlLgogICoKICAqIFdlIGRvbid0IHdhbnQg
dGhlIHNlbGVjdCgpIGNhbGwgaXRzZWxmIHRvIGJsb2NrLCBzbyB3ZSBrZWVwIGEgY2FjaGUKLSAq
IG9mIHRoZSBtb3N0IHJlY2VudGx5IGtub3duIHN0YXRlIHN1cHBsaWVkIGJ5IHRoZSBkcml2ZXIu
ICBUaGUgY2FjaGUKKyAqIG9mIHRoZSBtb3N0IHJlY2VudGx5IGtub3duIHN0YXRlIHN1cHBsaWVk
IGJ5IHRoZSBkcml2ZXIuIFRoZSBjYWNoZQogICogaXMgaW5pdGlhbGl6ZWQgdG8gMCAobWVhbmlu
Zzogbm90aGluZyByZWFkYWJsZS93cml0YWJsZSkuCiAgKgogICogV2hlbiBhIHBvbGwgY29tZXMg
aW4sIHdlIGRvIGEgbm9uLWJsb2NraW5nICghKSBkaXNwYXRjaCBvZiBhCiAgKiBjb21tYW5kIHRl
bGxpbmcgdGhlIGRyaXZlciAiVGhpcyBpcyB0aGUgc3RhdGUgd2UgaGF2ZSBjYWNoZWQsIHJlcGx5
CiAgKiB0byB0aGlzIGNhbGwgd2hlbiB0aGUgc3RhdGUgY2hhbmdlcy4iLCBhbmQgdGhlbiBpbW1l
ZGlhdGVseSByZXR1cm4KLSAqIHRoZSBjYWNoZWQgc3RhdGUuICBXZSB0ZWxsIHRoZSBrZXJuZWwn
cyBzZWxlY3QgdG8gc2xlZXAgb24gb3VyCisgKiB0aGUgY2FjaGVkIHN0YXRlLiBXZSB0ZWxsIHRo
ZSBrZXJuZWwncyBzZWxlY3QgdG8gc2xlZXAgb24gb3VyCiAgKiBwb2xsX3dhaXQgd2FpdCBxdWV1
ZS4KICAqCiAgKiBXaGVuIHRoZSBkcml2ZXIgcmVwbGllcywgd2UgdXBkYXRlIG91ciBjYWNoZWQg
aW5mbyBhbmQgd2FrZSB1cCB0aGUKLSAqIHdhaXQgcXVldWUuICBXYWtpbmcgdXAgdGhlIHdhaXQg
cXVldWUgd2lsbCBtb3N0IGxpa2VseSBpbW1lZGlhdGVseQorICogd2FpdCBxdWV1ZS4gV2FraW5n
IHVwIHRoZSB3YWl0IHF1ZXVlIHdpbGwgbW9zdCBsaWtlbHkgaW1tZWRpYXRlbHkKICAqIGVmZmVj
dCBhIHBvbGwgYWdhaW4sIGluIHdoaWNoIGNhc2Ugd2Ugd2lsbCByZXBseSB3aGF0ZXZlciB3ZSBq
dXN0CiAgKiBjYWNoZWQgZnJvbSB0aGUgZHJpdmVyLgotICogCisgKgogICovCiBTVEFUSUMgdW5z
aWduZWQgaW50IGZ1c2RfY2xpZW50X3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUg
KndhaXQpCiB7Ci0gIGZ1c2RfZGV2X3QgKmZ1c2RfZGV2OwotICBmdXNkX2ZpbGVfdCAqZnVzZF9m
aWxlOwotICBpbnQga2VybmVsX2JpdHMgPSAwOwotICBpbnQgc2VuZF9wb2xsID0gMDsKLQotICBH
RVRfRlVTRF9GSUxFX0FORF9ERVYoZmlsZS0+cHJpdmF0ZV9kYXRhLCBmdXNkX2ZpbGUsIGZ1c2Rf
ZGV2KTsKLSAgTE9DS19GVVNEX0ZJTEUoZnVzZF9maWxlKTsKLSAgTE9DS19GVVNEX0RFVihmdXNk
X2Rldik7Ci0KLSAgUkRFQlVHKDMsICJnb3QgYSBzZWxlY3Qgb24gL2Rldi8lcyAob3duZWQgYnkg
cGlkICVkKSBmcm9tIHBpZCAlZCwgY3BzPSVkIiwKLQkgTkFNRShmdXNkX2RldiksIGZ1c2RfZGV2
LT5waWQsIGN1cnJlbnQtPnBpZCwKLQkgZnVzZF9maWxlLT5jYWNoZWRfcG9sbF9zdGF0ZSk7Ci0K
LSAgcG9sbF93YWl0KGZpbGUsICZmdXNkX2ZpbGUtPnBvbGxfd2FpdCwgd2FpdCk7Ci0KLSAgLyoK
LSAgICogSWYgb3VyIGN1cnJlbnRseSBjYWNoZWQgcG9sbCBzdGF0ZSBpcyBub3QgdGhlIHNhbWUg
YXMgdGhlCi0gICAqIG1vc3QtcmVjZW50bHktc2VudCBwb2xsZGlmZiByZXF1ZXN0LCB0aGVuLCBk
aXNwYXRjaCBhIG5ldwotICAgKiByZXF1ZXN0LiAgKFdlIERPIE5PVCB3YWl0IGZvciBhIHJlcGx5
LCBidXQganVzdCBkaXNwYXRjaCB0aGUKLSAgICogcmVxdWVzdCkuCi0gICAqCi0gICAqIEFsc28s
IGRvbid0IHNlbmQgYSBuZXcgcG9sbGRpZmYgaWYgdGhlIG1vc3QgcmVjZW50IG9uZSByZXN1bHRl
ZAotICAgKiBpbiBhbiBlcnJvci4KLSAgICovCi0gIGlmIChmdXNkX2ZpbGUtPmxhc3RfcG9sbF9z
ZW50ICE9IGZ1c2RfZmlsZS0+Y2FjaGVkX3BvbGxfc3RhdGUgJiYKLSAgICAgIGZ1c2RfZmlsZS0+
Y2FjaGVkX3BvbGxfc3RhdGUgPj0gMCkgewotICAgIFJERUJVRygzLCAic2VuZGluZyBwb2xsZGlm
ZiByZXF1ZXN0IGJlY2F1c2UgbHBzPSVkLCBjcHM9JWQiLAotCSAgIGZ1c2RfZmlsZS0+bGFzdF9w
b2xsX3NlbnQsIGZ1c2RfZmlsZS0+Y2FjaGVkX3BvbGxfc3RhdGUpOwotICAgIHNlbmRfcG9sbCA9
IDE7Ci0gICAgZnVzZF9maWxlLT5sYXN0X3BvbGxfc2VudCA9IGZ1c2RfZmlsZS0+Y2FjaGVkX3Bv
bGxfc3RhdGU7Ci0gIH0KLQotICAvKiBjb21wdXRlIHdoYXQgdG8gcmV0dXJuIGZvciB0aGUgc3Rh
dGUgd2UgaGFkIGNhY2hlZCwgY29udmVydGluZyB0bwotICAgKiBiaXRzIHRoYXQgaGF2ZSBtZWFu
aW5nIHRvIHRoZSBrZXJuZWwgKi8KLSAgaWYgKGZ1c2RfZmlsZS0+Y2FjaGVkX3BvbGxfc3RhdGUg
PiAwKSB7Ci0gICAgaWYgKGZ1c2RfZmlsZS0+Y2FjaGVkX3BvbGxfc3RhdGUgJiBGVVNEX05PVElG
WV9JTlBVVCkKLSAgICAgIGtlcm5lbF9iaXRzIHw9IFBPTExJTjsKLSAgICBpZiAoZnVzZF9maWxl
LT5jYWNoZWRfcG9sbF9zdGF0ZSAmIEZVU0RfTk9USUZZX09VVFBVVCkKLSAgICAgIGtlcm5lbF9i
aXRzIHw9IFBPTExPVVQ7Ci0gICAgaWYgKGZ1c2RfZmlsZS0+Y2FjaGVkX3BvbGxfc3RhdGUgJiBG
VVNEX05PVElGWV9FWENFUFQpCi0gICAgICBrZXJuZWxfYml0cyB8PSBQT0xMUFJJOwotICB9Ci0K
LSAgLyogTm93IHRoYXQgd2UndmUgY29tbWl0dGVkIHRvIHNlbmRpbmcgdGhlIHBvbGwsIGV0Yy4s
IGl0IHNob3VsZCBiZQotICAgKiBzYWZlIHRvIHVubG9jayB0aGUgZGV2aWNlICovCi0gIFVOTE9D
S19GVVNEX0RFVihmdXNkX2Rldik7Ci0gIFVOTE9DS19GVVNEX0ZJTEUoZnVzZF9maWxlKTsKLQot
ICBpZiAoc2VuZF9wb2xsKSB7Ci0gICAgZnVzZF9tc2dfdCBmdXNkX21zZzsKLQotICAgIGluaXRf
ZnVzZF9tc2coJmZ1c2RfbXNnKTsKLSAgICBmdXNkX21zZy5jbWQgPSBGVVNEX0ZPUFNfTk9OQkxP
Q0s7Ci0gICAgZnVzZF9tc2cuc3ViY21kID0gRlVTRF9QT0xMX0RJRkY7Ci0gICAgZnVzZF9tc2cu
cGFybS5mb3BzX21zZy5jbWQgPSBmdXNkX2ZpbGUtPmNhY2hlZF9wb2xsX3N0YXRlOwotICAgIGlm
IChmdXNkX2ZvcHNfY2FsbF9zZW5kKGZ1c2RfZmlsZSwgJmZ1c2RfbXNnLCBOVUxMKSA8IDApIHsK
LSAgICAgIC8qIElmIHBvbGwgZGlzcGF0Y2hlZCBmYWlsZWQsIHNldCBiYWNrIHRvIC0xIHNvIHdl
IHRyeSBhZ2Fpbi4KLSAgICAgICAqIE5vdCBhIHJhY2UgKEkgdGhpbmspLCBzaW5jZSBzZW5kaW5n
IGFuICpleHRyYSogcG9sbGRpZmYgbmV2ZXIKLSAgICAgICAqIGh1cnRzIGFueXRoaW5nLiAqLwot
ICAgICAgZnVzZF9maWxlLT5sYXN0X3BvbGxfc2VudCA9IC0xOwotICAgIH0KLSAgfQotICByZXR1
cm4ga2VybmVsX2JpdHM7CisgZnVzZF9kZXZfdCAqZnVzZF9kZXY7CisgZnVzZF9maWxlX3QgKmZ1
c2RfZmlsZTsKKyBpbnQga2VybmVsX2JpdHMgPSAwOworIGludCBzZW5kX3BvbGwgPSAwOworCisg
R0VUX0ZVU0RfRklMRV9BTkRfREVWKGZpbGUtPnByaXZhdGVfZGF0YSwgZnVzZF9maWxlLCBmdXNk
X2Rldik7CisgTE9DS19GVVNEX0ZJTEUoZnVzZF9maWxlKTsKKyBMT0NLX0ZVU0RfREVWKGZ1c2Rf
ZGV2KTsKKworIFJERUJVRygzLCAiZ290IGEgc2VsZWN0IG9uIC9kZXYvJXMgKG93bmVkIGJ5IHBp
ZCAlZCkgZnJvbSBwaWQgJWQsIGNwcz0lZCIsCisgTkFNRShmdXNkX2RldiksIGZ1c2RfZGV2LT5w
aWQsIGN1cnJlbnQtPnBpZCwKKyBmdXNkX2ZpbGUtPmNhY2hlZF9wb2xsX3N0YXRlKTsKKworIHBv
bGxfd2FpdChmaWxlLCAmZnVzZF9maWxlLT5wb2xsX3dhaXQsIHdhaXQpOworCisgLyoKKyAqIElm
IG91ciBjdXJyZW50bHkgY2FjaGVkIHBvbGwgc3RhdGUgaXMgbm90IHRoZSBzYW1lIGFzIHRoZQor
ICogbW9zdC1yZWNlbnRseS1zZW50IHBvbGxkaWZmIHJlcXVlc3QsIHRoZW4sIGRpc3BhdGNoIGEg
bmV3CisgKiByZXF1ZXN0LiAoV2UgRE8gTk9UIHdhaXQgZm9yIGEgcmVwbHksIGJ1dCBqdXN0IGRp
c3BhdGNoIHRoZQorICogcmVxdWVzdCkuCisgKgorICogQWxzbywgZG9uJ3Qgc2VuZCBhIG5ldyBw
b2xsZGlmZiBpZiB0aGUgbW9zdCByZWNlbnQgb25lIHJlc3VsdGVkCisgKiBpbiBhbiBlcnJvci4K
KyAqLworIGlmIChmdXNkX2ZpbGUtPmxhc3RfcG9sbF9zZW50ICE9IGZ1c2RfZmlsZS0+Y2FjaGVk
X3BvbGxfc3RhdGUgJiYKKyBmdXNkX2ZpbGUtPmNhY2hlZF9wb2xsX3N0YXRlID49IDApIHsKKyBS
REVCVUcoMywgInNlbmRpbmcgcG9sbGRpZmYgcmVxdWVzdCBiZWNhdXNlIGxwcz0lZCwgY3BzPSVk
IiwKKyBmdXNkX2ZpbGUtPmxhc3RfcG9sbF9zZW50LCBmdXNkX2ZpbGUtPmNhY2hlZF9wb2xsX3N0
YXRlKTsKKyBzZW5kX3BvbGwgPSAxOworIGZ1c2RfZmlsZS0+bGFzdF9wb2xsX3NlbnQgPSBmdXNk
X2ZpbGUtPmNhY2hlZF9wb2xsX3N0YXRlOworIH0KKworIC8qIGNvbXB1dGUgd2hhdCB0byByZXR1
cm4gZm9yIHRoZSBzdGF0ZSB3ZSBoYWQgY2FjaGVkLCBjb252ZXJ0aW5nIHRvCisgKiBiaXRzIHRo
YXQgaGF2ZSBtZWFuaW5nIHRvIHRoZSBrZXJuZWwgKi8KKyBpZiAoZnVzZF9maWxlLT5jYWNoZWRf
cG9sbF9zdGF0ZSA+IDApIHsKKyBpZiAoZnVzZF9maWxlLT5jYWNoZWRfcG9sbF9zdGF0ZSAmIEZV
U0RfTk9USUZZX0lOUFVUKQorIGtlcm5lbF9iaXRzIHw9IFBPTExJTjsKKyBpZiAoZnVzZF9maWxl
LT5jYWNoZWRfcG9sbF9zdGF0ZSAmIEZVU0RfTk9USUZZX09VVFBVVCkKKyBrZXJuZWxfYml0cyB8
PSBQT0xMT1VUOworIGlmIChmdXNkX2ZpbGUtPmNhY2hlZF9wb2xsX3N0YXRlICYgRlVTRF9OT1RJ
RllfRVhDRVBUKQorIGtlcm5lbF9iaXRzIHw9IFBPTExQUkk7CisgfQorCisgLyogTm93IHRoYXQg
d2UndmUgY29tbWl0dGVkIHRvIHNlbmRpbmcgdGhlIHBvbGwsIGV0Yy4sIGl0IHNob3VsZCBiZQor
ICogc2FmZSB0byB1bmxvY2sgdGhlIGRldmljZSAqLworIFVOTE9DS19GVVNEX0RFVihmdXNkX2Rl
dik7CisgVU5MT0NLX0ZVU0RfRklMRShmdXNkX2ZpbGUpOworCisgaWYgKHNlbmRfcG9sbCkgewor
IGZ1c2RfbXNnX3QgZnVzZF9tc2c7CisKKyBpbml0X2Z1c2RfbXNnKCZmdXNkX21zZyk7CisgZnVz
ZF9tc2cuY21kID0gRlVTRF9GT1BTX05PTkJMT0NLOworIGZ1c2RfbXNnLnN1YmNtZCA9IEZVU0Rf
UE9MTF9ESUZGOworIGZ1c2RfbXNnLnBhcm0uZm9wc19tc2cuY21kID0gZnVzZF9maWxlLT5jYWNo
ZWRfcG9sbF9zdGF0ZTsKKyBpZiAoZnVzZF9mb3BzX2NhbGxfc2VuZChmdXNkX2ZpbGUsICZmdXNk
X21zZywgTlVMTCkgPCAwKSB7CisgLyogSWYgcG9sbCBkaXNwYXRjaGVkIGZhaWxlZCwgc2V0IGJh
Y2sgdG8gLTEgc28gd2UgdHJ5IGFnYWluLgorICogTm90IGEgcmFjZSAoSSB0aGluayksIHNpbmNl
IHNlbmRpbmcgYW4gKmV4dHJhKiBwb2xsZGlmZiBuZXZlcgorICogaHVydHMgYW55dGhpbmcuICov
CisgZnVzZF9maWxlLT5sYXN0X3BvbGxfc2VudCA9IC0xOworIH0KKyB9CisgcmV0dXJuIGtlcm5l
bF9iaXRzOwogCiAgem9tYmllX2RldjoKLSAgLyogbWlnaHQganVtcCBoZXJlIGZyb20gTE9DS19G
VVNEX0RFViAqLwotICBVTkxPQ0tfRlVTRF9GSUxFKGZ1c2RfZmlsZSk7CisgLyogbWlnaHQganVt
cCBoZXJlIGZyb20gTE9DS19GVVNEX0RFViAqLworIFVOTE9DS19GVVNEX0ZJTEUoZnVzZF9maWxl
KTsKICBpbnZhbGlkX2RldjoKICBpbnZhbGlkX2ZpbGU6Ci0gIFJERUJVRygzLCAiZ290IGEgc2Vs
ZWN0IG9uIGNsaWVudCBmaWxlIGZyb20gcGlkICVkLCBkcml2ZXIgaGFzIGRpc2FwcGVhcmVkIiwK
LQkgY3VycmVudC0+cGlkKTsKLSAgcmV0dXJuIFBPTExQUkk7CisgUkRFQlVHKDMsICJnb3QgYSBz
ZWxlY3Qgb24gY2xpZW50IGZpbGUgZnJvbSBwaWQgJWQsIGRyaXZlciBoYXMgZGlzYXBwZWFyZWQi
LAorIGN1cnJlbnQtPnBpZCk7CisgcmV0dXJuIFBPTExQUkk7CiB9CiAKIAogCiBTVEFUSUMgc3Ry
dWN0IGZpbGVfb3BlcmF0aW9ucyBmdXNkX2NsaWVudF9mb3BzID0gewotICBvd25lcjogICAgVEhJ
U19NT0RVTEUsCi0gIG9wZW46ICAgICBmdXNkX2NsaWVudF9vcGVuLAotICByZWxlYXNlOiAgZnVz
ZF9jbGllbnRfcmVsZWFzZSwKLSAgcmVhZDogICAgIGZ1c2RfY2xpZW50X3JlYWQsCi0gIHdyaXRl
OiAgICBmdXNkX2NsaWVudF93cml0ZSwKLSAgaW9jdGw6ICAgIGZ1c2RfY2xpZW50X2lvY3RsLAot
ICBwb2xsOiAgICAgZnVzZF9jbGllbnRfcG9sbCwKLSAgbW1hcDogICAgIGZ1c2RfY2xpZW50X21t
YXAKKyBvd25lcjogVEhJU19NT0RVTEUsCisgb3BlbjogZnVzZF9jbGllbnRfb3BlbiwKKyByZWxl
YXNlOiBmdXNkX2NsaWVudF9yZWxlYXNlLAorIHJlYWQ6IGZ1c2RfY2xpZW50X3JlYWQsCisgd3Jp
dGU6IGZ1c2RfY2xpZW50X3dyaXRlLAorIGlvY3RsOiBmdXNkX2NsaWVudF9pb2N0bCwKKyBwb2xs
OiBmdXNkX2NsaWVudF9wb2xsLAorIG1tYXA6IGZ1c2RfY2xpZW50X21tYXAKIH07CiAKIApAQCAt
MTc4MywyNjIgKzE3ODMsMjYyIEBACiAKIFNUQVRJQyBmdXNkX2ZpbGVfdCAqZmluZF9mdXNkX3Jl
cGx5X2ZpbGUoZnVzZF9kZXZfdCAqZnVzZF9kZXYsIGZ1c2RfbXNnX3QgKm1zZykKIHsKLSAgLyog
Zmlyc3QsIHRyeSB0aGUgaGludCAqLwotICBpbnQgaSA9IG1zZy0+cGFybS5mb3BzX21zZy5oaW50
OwotICBpZiAoaSA+PSAwICYmCi0gICAgICBpIDwgZnVzZF9kZXYtPm51bV9maWxlcyAmJgotICAg
ICAgZnVzZF9kZXYtPmZpbGVzW2ldID09IG1zZy0+cGFybS5mb3BzX21zZy5mdXNkX2ZpbGUpCi0g
ICAgewotICAgICAgUkRFQlVHKDE1LCAiZmluZF9mdXNkX3JlcGx5X2ZpbGU6IGhpbnQgd29ya2Vk
Iik7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8qIGhpbnQgZGlkbid0IHdvcmssIGZhbGwgYmFjayB0
byBhIHNlYXJjaCBvZiB0aGUgd2hvbGUgYXJyYXkgKi8KLSAgICAgIGkgPSBmaW5kX2Z1c2RfZmls
ZShmdXNkX2RldiwgbXNnLT5wYXJtLmZvcHNfbXNnLmZ1c2RfZmlsZSk7Ci0gICAgICBSREVCVUco
MTUsICJmaW5kX2Z1c2RfcmVwbHlfZmlsZTogaGludCBmYWlsZWQiKTsKLSAgICB9Ci0KLSAgLyog
d2UgY291bGRuJ3QgZmluZCBhbnlvbmUgd2FpdGluZyBmb3IgdGhpcyBtZXNzYWdlISAqLwotICBp
ZiAoaSA8IDApIHsKLSAgICByZXR1cm4gTlVMTDsKLSAgfSBlbHNlIHsKLSAgICByZXR1cm4gZnVz
ZF9kZXYtPmZpbGVzW2ldOwotICB9CisgLyogZmlyc3QsIHRyeSB0aGUgaGludCAqLworIGludCBp
ID0gbXNnLT5wYXJtLmZvcHNfbXNnLmhpbnQ7CisgaWYgKGkgPj0gMCAmJgorIGkgPCBmdXNkX2Rl
di0+bnVtX2ZpbGVzICYmCisgZnVzZF9kZXYtPmZpbGVzW2ldID09IG1zZy0+cGFybS5mb3BzX21z
Zy5mdXNkX2ZpbGUpCisgeworIFJERUJVRygxNSwgImZpbmRfZnVzZF9yZXBseV9maWxlOiBoaW50
IHdvcmtlZCIpOworIH0gZWxzZSB7CisgLyogaGludCBkaWRuJ3Qgd29yaywgZmFsbCBiYWNrIHRv
IGEgc2VhcmNoIG9mIHRoZSB3aG9sZSBhcnJheSAqLworIGkgPSBmaW5kX2Z1c2RfZmlsZShmdXNk
X2RldiwgbXNnLT5wYXJtLmZvcHNfbXNnLmZ1c2RfZmlsZSk7CisgUkRFQlVHKDE1LCAiZmluZF9m
dXNkX3JlcGx5X2ZpbGU6IGhpbnQgZmFpbGVkIik7CisgfQorCisgLyogd2UgY291bGRuJ3QgZmlu
ZCBhbnlvbmUgd2FpdGluZyBmb3IgdGhpcyBtZXNzYWdlISAqLworIGlmIChpIDwgMCkgeworIHJl
dHVybiBOVUxMOworIH0gZWxzZSB7CisgcmV0dXJuIGZ1c2RfZGV2LT5maWxlc1tpXTsKKyB9CiB9
CiAKIAogLyogUHJvY2VzcyBhbiBpbmNvbWluZyByZXBseSB0byBhIG1lc3NhZ2UgZGlzcGF0Y2hl
ZCBieQotICogZnVzZF9mb3BzX2NhbGwuICBDYWxsZWQgYnkgZnVzZF93cml0ZSB3aGVuIGEgZHJp
dmVyIHdyaXRlcyB0bworICogZnVzZF9mb3BzX2NhbGwuIENhbGxlZCBieSBmdXNkX3dyaXRlIHdo
ZW4gYSBkcml2ZXIgd3JpdGVzIHRvCiAgKiAvZGV2L2Z1c2QuICovCiBTVEFUSUMgaW50IGZ1c2Rf
Zm9wc19yZXBseShmdXNkX2Rldl90ICpmdXNkX2RldiwgZnVzZF9tc2dfdCAqbXNnKQogewotICBm
dXNkX2ZpbGVfdCAqZnVzZF9maWxlOwotICBzdHJ1Y3QgZnVzZF90cmFuc2FjdGlvbiAqdHJhbnNh
Y3Rpb247CisgZnVzZF9maWxlX3QgKmZ1c2RfZmlsZTsKKyBzdHJ1Y3QgZnVzZF90cmFuc2FjdGlv
biAqdHJhbnNhY3Rpb247CiAKLSAgLyogZmlndXJlIG91dCB0aGUgaW5kZXggb2YgdGhlIGZpbGUg
d2UgYXJlIHJlcGx5aW5nIHRvLiAgdXN1YWxseQotICAgKiB2ZXJ5IGZhc3QgKHVzZXMgYSBoaW50
KSAqLwotICBpZiAoKGZ1c2RfZmlsZSA9IGZpbmRfZnVzZF9yZXBseV9maWxlKGZ1c2RfZGV2LCBt
c2cpKSA9PSBOVUxMKSB7Ci0gICAgUkRFQlVHKDIsICJmdXNkX2ZvcHNfcmVwbHk6IGdvdCBhIHJl
cGx5IG9uIC9kZXYvJXMgd2l0aCBubyBjb25uZWN0aW9uIiwKLQkgICBOQU1FKGZ1c2RfZGV2KSk7
Ci0gICAgZ290byBkaXNjYXJkOwotICB9CisgLyogZmlndXJlIG91dCB0aGUgaW5kZXggb2YgdGhl
IGZpbGUgd2UgYXJlIHJlcGx5aW5nIHRvLiB1c3VhbGx5CisgKiB2ZXJ5IGZhc3QgKHVzZXMgYSBo
aW50KSAqLworIGlmICgoZnVzZF9maWxlID0gZmluZF9mdXNkX3JlcGx5X2ZpbGUoZnVzZF9kZXYs
IG1zZykpID09IE5VTEwpIHsKKyBSREVCVUcoMiwgImZ1c2RfZm9wc19yZXBseTogZ290IGEgcmVw
bHkgb24gL2Rldi8lcyB3aXRoIG5vIGNvbm5lY3Rpb24iLAorIE5BTUUoZnVzZF9kZXYpKTsKKyBn
b3RvIGRpc2NhcmQ7CisgfQogCi0gIC8qIG1ha2Ugc3VyZSB0aGlzIGlzIG5vdCBhbiBvbGQgcmVw
bHkgZ29pbmcgdG8gYW4gb2xkIGluc3RhbmNlIHRoYXQncyBnb25lICovCi0JLyogdG9kbzoga29y
IGZpeCB0aGlzICovCisgLyogbWFrZSBzdXJlIHRoaXMgaXMgbm90IGFuIG9sZCByZXBseSBnb2lu
ZyB0byBhbiBvbGQgaW5zdGFuY2UgdGhhdCdzIGdvbmUgKi8KKyAvKiB0b2RvOiBrb3IgZml4IHRo
aXMgKi8KIC8qCi0gIGlmIChmdXNkX2ZpbGUtPmZ1c2RfZGV2X3ZlcnNpb24gIT0gZnVzZF9kZXYt
PnZlcnNpb24gfHwKLSAgICAgIG1zZy0+cGFybS5mb3BzX21zZy50cmFuc2lkICE9IGZ1c2RfZmls
ZS0+dHJhbnNpZF9vdXRzdGFuZGluZykgewotICAgIFJERUJVRygyLCAiZnVzZF9mb3BzX3JlcGx5
OiBnb3QgYW4gb2xkIG1lc3NhZ2UsIGRpc2NhcmRpbmciKTsKLSAgICBnb3RvIGRpc2NhcmQ7Ci0g
IH0qLwotICAKLSAgdHJhbnNhY3Rpb24gPSBmdXNkX2ZpbmRfdHJhbnNhY3Rpb24oZnVzZF9maWxl
LCBtc2ctPnBhcm0uZm9wc19tc2cudHJhbnNpZCk7Ci0JaWYodHJhbnNhY3Rpb24gPT0gTlVMTCkK
LQl7Ci0JCVJERUJVRygyLCAiZnVzZF9mb3BzX3JlcGx5OiBObyB0cmFuc2FjdGlvbiBmb3VuZCB3
aXRoIHRyYW5zaWQgJWxkIiwgbXNnLT5wYXJtLmZvcHNfbXNnLnRyYW5zaWQpOwotCQlnb3RvIGRp
c2NhcmQ7Ci0JfQotCQotICBSREVCVUcoMTAsICJmdXNkX2ZvcHNfcmVwbHk6IC9kZXYvJXMgY29t
cGxldGVkIHRyYW5zaWQgJWxkIChyZXR2YWwgJWQpIiwKLQkgTkFNRShmdXNkX2RldiksIG1zZy0+
cGFybS5mb3BzX21zZy50cmFuc2lkLAotCSAoaW50KSBtc2ctPnBhcm0uZm9wc19tc2cucmV0dmFs
KTsKKyBpZiAoZnVzZF9maWxlLT5mdXNkX2Rldl92ZXJzaW9uICE9IGZ1c2RfZGV2LT52ZXJzaW9u
IHx8CisgbXNnLT5wYXJtLmZvcHNfbXNnLnRyYW5zaWQgIT0gZnVzZF9maWxlLT50cmFuc2lkX291
dHN0YW5kaW5nKSB7CisgUkRFQlVHKDIsICJmdXNkX2ZvcHNfcmVwbHk6IGdvdCBhbiBvbGQgbWVz
c2FnZSwgZGlzY2FyZGluZyIpOworIGdvdG8gZGlzY2FyZDsKKyB9Ki8KKworIHRyYW5zYWN0aW9u
ID0gZnVzZF9maW5kX3RyYW5zYWN0aW9uKGZ1c2RfZmlsZSwgbXNnLT5wYXJtLmZvcHNfbXNnLnRy
YW5zaWQpOworIGlmKHRyYW5zYWN0aW9uID09IE5VTEwpCisgeworIFJERUJVRygyLCAiZnVzZF9m
b3BzX3JlcGx5OiBObyB0cmFuc2FjdGlvbiBmb3VuZCB3aXRoIHRyYW5zaWQgJWxkIiwgbXNnLT5w
YXJtLmZvcHNfbXNnLnRyYW5zaWQpOworIGdvdG8gZGlzY2FyZDsKKyB9CisKKyBSREVCVUcoMTAs
ICJmdXNkX2ZvcHNfcmVwbHk6IC9kZXYvJXMgY29tcGxldGVkIHRyYW5zaWQgJWxkIChyZXR2YWwg
JWQpIiwKKyBOQU1FKGZ1c2RfZGV2KSwgbXNnLT5wYXJtLmZvcHNfbXNnLnRyYW5zaWQsCisgKGlu
dCkgbXNnLT5wYXJtLmZvcHNfbXNnLnJldHZhbCk7CiAKLSAgdHJhbnNhY3Rpb24tPm1zZ19pbiA9
IG1zZzsKLQltYigpOworIHRyYW5zYWN0aW9uLT5tc2dfaW4gPSBtc2c7CisgbWIoKTsKIAotICBX
QUtFX1VQX0lOVEVSUlVQVElCTEVfU1lOQygmZnVzZF9maWxlLT5maWxlX3dhaXQpOworIFdBS0Vf
VVBfSU5URVJSVVBUSUJMRV9TWU5DKCZmdXNkX2ZpbGUtPmZpbGVfd2FpdCk7CiAKLSAgcmV0dXJu
IDA7CisgcmV0dXJuIDA7CiAKICBkaXNjYXJkOgotICBpZiAobXNnLT5zdWJjbWQgPT0gRlVTRF9P
UEVOICYmIG1zZy0+cGFybS5mb3BzX21zZy5yZXR2YWwgPT0gMCkgewotICAgIGZ1c2RfZm9yZ2Vf
Y2xvc2UobXNnLCBmdXNkX2Rldik7Ci0gICAgcmV0dXJuIDA7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0
dXJuIC1FUElQRTsKLSAgfQorIGlmIChtc2ctPnN1YmNtZCA9PSBGVVNEX09QRU4gJiYgbXNnLT5w
YXJtLmZvcHNfbXNnLnJldHZhbCA9PSAwKSB7CisgZnVzZF9mb3JnZV9jbG9zZShtc2csIGZ1c2Rf
ZGV2KTsKKyByZXR1cm4gMDsKKyB9IGVsc2UgeworIHJldHVybiAtRVBJUEU7CisgfQogfQogCiAK
IC8qIHNwZWNpYWwgZnVuY3Rpb24gdG8gcHJvY2VzcyByZXNwb25zZXMgdG8gUE9MTF9ESUZGICov
CiBTVEFUSUMgaW50IGZ1c2RfcG9sbGRpZmZfcmVwbHkoZnVzZF9kZXZfdCAqZnVzZF9kZXYsIGZ1
c2RfbXNnX3QgKm1zZykKIHsKLSAgZnVzZF9maWxlX3QgKmZ1c2RfZmlsZTsKKyBmdXNkX2ZpbGVf
dCAqZnVzZF9maWxlOwogCi0gIC8qIGZpZ3VyZSBvdXQgdGhlIGluZGV4IG9mIHRoZSBmaWxlIHdl
IGFyZSByZXBseWluZyB0by4gIHVzdWFsbHkKLSAgICogdmVyeSBmYXN0ICh1c2VzIGEgaGludCkg
Ki8KLSAgaWYgKChmdXNkX2ZpbGUgPSBmaW5kX2Z1c2RfcmVwbHlfZmlsZShmdXNkX2RldiwgbXNn
KSkgPT0gTlVMTCkKLSAgICByZXR1cm4gLUVQSVBFOworIC8qIGZpZ3VyZSBvdXQgdGhlIGluZGV4
IG9mIHRoZSBmaWxlIHdlIGFyZSByZXBseWluZyB0by4gdXN1YWxseQorICogdmVyeSBmYXN0ICh1
c2VzIGEgaGludCkgKi8KKyBpZiAoKGZ1c2RfZmlsZSA9IGZpbmRfZnVzZF9yZXBseV9maWxlKGZ1
c2RfZGV2LCBtc2cpKSA9PSBOVUxMKQorIHJldHVybiAtRVBJUEU7CiAKLSAgLyogcmVjb3JkIHRo
ZSBwb2xsIHN0YXRlIHJldHVybmVkLiAgY29udmVydCBhbGwgbmVnYXRpdmUgcmV0dmFscyB0byAt
MS4gKi8KLSAgaWYgKChmdXNkX2ZpbGUtPmNhY2hlZF9wb2xsX3N0YXRlID0gbXNnLT5wYXJtLmZv
cHNfbXNnLnJldHZhbCkgPCAwKQotICAgIGZ1c2RfZmlsZS0+Y2FjaGVkX3BvbGxfc3RhdGUgPSAt
MTsKKyAvKiByZWNvcmQgdGhlIHBvbGwgc3RhdGUgcmV0dXJuZWQuIGNvbnZlcnQgYWxsIG5lZ2F0
aXZlIHJldHZhbHMgdG8gLTEuICovCisgaWYgKChmdXNkX2ZpbGUtPmNhY2hlZF9wb2xsX3N0YXRl
ID0gbXNnLT5wYXJtLmZvcHNfbXNnLnJldHZhbCkgPCAwKQorIGZ1c2RfZmlsZS0+Y2FjaGVkX3Bv
bGxfc3RhdGUgPSAtMTsKIAotICBSREVCVUcoMywgImdvdCB1cGRhdGVkIHBvbGwgc3RhdGUgZnJv
bSAvZGV2LyVzIGRyaXZlcjogJWQiLCBOQU1FKGZ1c2RfZGV2KSwKLQkgZnVzZF9maWxlLT5jYWNo
ZWRfcG9sbF9zdGF0ZSk7CisgUkRFQlVHKDMsICJnb3QgdXBkYXRlZCBwb2xsIHN0YXRlIGZyb20g
L2Rldi8lcyBkcml2ZXI6ICVkIiwgTkFNRShmdXNkX2RldiksCisgZnVzZF9maWxlLT5jYWNoZWRf
cG9sbF9zdGF0ZSk7CiAKLSAgLyogc2luY2UgdGhlIGNsaWVudCBoYXMgcmV0dXJuZWQgdGhlIHBv
bGxkaWZmIHdlIHNlbnQsIHNldAotICAgKiBsYXN0X3BvbGxfc2VudCB0byAtMSwgc28gdGhhdCB3
ZSdsbCBzZW5kIGEgcG9sbGRpZmYgcmVxdWVzdCBvbgotICAgKiB0aGUgbmV4dCBzZWxlY3QuICov
Ci0gIGZ1c2RfZmlsZS0+bGFzdF9wb2xsX3NlbnQgPSAtMTsKKyAvKiBzaW5jZSB0aGUgY2xpZW50
IGhhcyByZXR1cm5lZCB0aGUgcG9sbGRpZmYgd2Ugc2VudCwgc2V0CisgKiBsYXN0X3BvbGxfc2Vu
dCB0byAtMSwgc28gdGhhdCB3ZSdsbCBzZW5kIGEgcG9sbGRpZmYgcmVxdWVzdCBvbgorICogdGhl
IG5leHQgc2VsZWN0LiAqLworIGZ1c2RfZmlsZS0+bGFzdF9wb2xsX3NlbnQgPSAtMTsKIAotICAv
KiB3YWtlIHVwIHNlbGVjdCdzIHF1ZXVlIHNvIHRoYXQgYSBuZXcgcG9sbGRpZmYgaXMgZ2VuZXJh
dGVkICovCi0gIHdha2VfdXBfaW50ZXJydXB0aWJsZSgmZnVzZF9maWxlLT5wb2xsX3dhaXQpOwor
IC8qIHdha2UgdXAgc2VsZWN0J3MgcXVldWUgc28gdGhhdCBhIG5ldyBwb2xsZGlmZiBpcyBnZW5l
cmF0ZWQgKi8KKyB3YWtlX3VwX2ludGVycnVwdGlibGUoJmZ1c2RfZmlsZS0+cG9sbF93YWl0KTsK
IAotICByZXR1cm4gMDsKKyByZXR1cm4gMDsKIH0KIAogU1RBVElDIGludCBmdXNkX3JlZ2lzdGVy
X2RldmljZShmdXNkX2Rldl90ICpmdXNkX2RldiwKLQkJCQlyZWdpc3Rlcl9tc2dfdCByZWdpc3Rl
cl9tc2cpCisgcmVnaXN0ZXJfbXNnX3QgcmVnaXN0ZXJfbXNnKQogewotICBpbnQgZXJyb3IgPSAw
OwotICBzdHJ1Y3QgbGlzdF9oZWFkICp0bXA7Ci0gIGludCBkZXZfaWQ7Ci0KLSAgLyogbWFrZSBz
dXJlIGFyZ3MgYXJlIHZhbGlkICovCi0gIGlmIChmdXNkX2RldiA9PSBOVUxMKSB7Ci0gICAgUkRF
QlVHKDAsICJmdXNkX3JlZ2lzdGVyX2RldmljZTogYnVnIGluIGFyZ3VtZW50cyEiKTsKLSAgICBy
ZXR1cm4gLUVJTlZBTDsKLSAgfQotCi0gIC8qIHVzZXIgY2FuIG9ubHkgcmVnaXN0ZXIgb25lIGRl
dmljZSBwZXIgaW5zdGFuY2UgKi8KLS8vICBpZiAoZnVzZF9kZXYtPmhhbmRsZSAhPSAwKQotLy8g
ICAgcmV0dXJuIC1FQlVTWTsKLQotICByZWdpc3Rlcl9tc2cubmFtZVtGVVNEX01BWF9OQU1FX0xF
TkdUSF0gPSAnXDAnOwotCi0gIC8qIG1ha2Ugc3VyZSB0aGF0IHRoZXJlIGlzbid0IGFscmVhZHkg
YSBkZXZpY2UgYnkgdGhpcyBuYW1lICovCi0gIGRvd24oJmZ1c2RfZGV2bGlzdF9zZW0pOwotICBs
aXN0X2Zvcl9lYWNoKHRtcCwgJmZ1c2RfZGV2bGlzdF9oZWFkKSB7Ci0gICAgZnVzZF9kZXZfdCAq
ZCA9IGxpc3RfZW50cnkodG1wLCBmdXNkX2Rldl90LCBkZXZsaXN0KTsKLQotICAgIGlmIChkICYm
IGQtPm5hbWUgJiYgIWQtPnpvbWJpZSAmJiAhc3RyY21wKGQtPm5hbWUsIHJlZ2lzdGVyX21zZy5u
YW1lKSkgewotICAgICAgZXJyb3IgPSAtRUVYSVNUOwotICAgICAgYnJlYWs7Ci0gICAgfQotICB9
Ci0gIHVwKCZmdXNkX2Rldmxpc3Rfc2VtKTsKLQotICBpZiAoZXJyb3IpCi0gICAgcmV0dXJuIGVy
cm9yOwotCi0KLSAgLyogYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgbmFtZSwgYW5kIGNvcHkgKi8K
LSAgaWYgKChmdXNkX2Rldi0+bmFtZSA9IEtNQUxMT0Moc3RybGVuKHJlZ2lzdGVyX21zZy5uYW1l
KSsxLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkgewotICAgICBSREVCVUcoMSwgInlpa2VzISAga2Vy
bmVsIGNhbid0IGFsbG9jYXRlIG1lbW9yeSIpOwotICAgICByZXR1cm4gLUVOT01FTTsKLSAgfQot
CQotICBzdHJjcHkoZnVzZF9kZXYtPm5hbWUsIHJlZ2lzdGVyX21zZy5uYW1lKTsKLQotICAvKiBh
bGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBjbGFzcyBuYW1lLCBhbmQgY29weSAqLwotICBpZiAoKGZ1
c2RfZGV2LT5jbGFzc19uYW1lID0gS01BTExPQyhzdHJsZW4ocmVnaXN0ZXJfbXNnLmNsYXp6KSsx
LCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkgewotICAgICBSREVCVUcoMSwgInlpa2VzISAga2VybmVs
IGNhbid0IGFsbG9jYXRlIG1lbW9yeSIpOwotICAgICByZXR1cm4gLUVOT01FTTsKLSAgfQotCQot
CXN0cmNweShmdXNkX2Rldi0+Y2xhc3NfbmFtZSwgcmVnaXN0ZXJfbXNnLmNsYXp6KTsKLQkKLSAg
LyogYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgY2xhc3MgbmFtZSwgYW5kIGNvcHkgKi8KLSAgaWYg
KChmdXNkX2Rldi0+ZGV2X25hbWUgPSBLTUFMTE9DKHN0cmxlbihyZWdpc3Rlcl9tc2cuZGV2bmFt
ZSkrMSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpIHsKLSAgICAgUkRFQlVHKDEsICJ5aWtlcyEgIGtl
cm5lbCBjYW4ndCBhbGxvY2F0ZSBtZW1vcnkiKTsKLSAgICAgcmV0dXJuIC1FTk9NRU07Ci0gIH0K
LQkKLQlzdHJjcHkoZnVzZF9kZXYtPmRldl9uYW1lLCByZWdpc3Rlcl9tc2cuZGV2bmFtZSk7Ci0K
LQlkZXZfaWQgPSAwOwotCi0JaWYoKGVycm9yID0gYWxsb2NfY2hyZGV2X3JlZ2lvbigmZGV2X2lk
LCAwLCAxLCBmdXNkX2Rldi0+bmFtZSkpIDwgMCkKLQl7Ci0JCXByaW50aygiYWxsb2NfY2hyZGV2
X3JlZ2lvbiBmYWlsZWQgc3RhdHVzOiAlZFxuIiwgZXJyb3IpOwotCQlnb3RvIHJlZ2lzdGVyX2Zh
aWxlZDsKLQl9Ci0KLQlmdXNkX2Rldi0+ZGV2X2lkID0gZGV2X2lkOwotCi0JI2lmZGVmIENPTkZJ
R19ERVZGU19GUwotCWlmKChlcnJvciA9IGRldmZzX21rX2NkZXYoZGV2X2lkLCBTX0lGQ0hSIHwg
cmVnaXN0ZXJfbXNnLm1vZGUsIGZ1c2RfZGV2LT5uYW1lKSkgPCAwKQotCXsKLQkJcHJpbnRrKCJk
ZXZmc19ta19jZGV2IGZhaWxlZCBzdGF0dXM6ICVkXG4iLCBlcnJvcik7Ci0JCWdvdG8gcmVnaXN0
ZXJfZmFpbGVkMjsKLQl9Ci0JI2VuZGlmCi0KLQlmdXNkX2Rldi0+aGFuZGxlID0gY2Rldl9hbGxv
YygpOwotCWlmKGZ1c2RfZGV2LT5oYW5kbGUgPT0gTlVMTCkKLQl7Ci0JCWVycm9yID0gLUVOT01F
TTsKLQkJZ290byByZWdpc3Rlcl9mYWlsZWQzOwotCX0KLQotCWZ1c2RfZGV2LT5oYW5kbGUtPm93
bmVyID0gVEhJU19NT0RVTEU7Ci0JZnVzZF9kZXYtPmhhbmRsZS0+b3BzID0gJmZ1c2RfY2xpZW50
X2ZvcHM7Ci0KLQlrb2JqZWN0X3NldF9uYW1lKCZmdXNkX2Rldi0+aGFuZGxlLT5rb2JqLCBmdXNk
X2Rldi0+bmFtZSk7Ci0KLQlpZigoZXJyb3IgPSBjZGV2X2FkZChmdXNkX2Rldi0+aGFuZGxlLCBk
ZXZfaWQsIDEpKSA8IDApCi0JewotCQlwcmludGsoImNkZXZfYWRkIGZhaWxlZCBzdGF0dXM6ICVk
XG4iLCBlcnJvcik7Ci0JCWtvYmplY3RfcHV0KCZmdXNkX2Rldi0+aGFuZGxlLT5rb2JqKTsKLQkJ
Z290byByZWdpc3Rlcl9mYWlsZWQzOwotCX0KLQotCS8vIEhhY2sgdG8gYWRkIG15IGNsYXNzIHRv
IHRoZSBzb3VuZCBjbGFzcwotCWlmKHN0cmNtcCgic291bmQiLCByZWdpc3Rlcl9tc2cuY2xhenop
ID09IDApCi0JewotCQlmdXNkX2Rldi0+Y2xhenogPSBzb3VuZF9jbGFzczsKLQkJZnVzZF9kZXYt
Pm93bnNfY2xhc3MgPSAwOwotCX0KLQllbHNlCi0JewotCQlmdXNkX2Rldi0+Y2xhenogPSBjbGFz
c19jcmVhdGUoVEhJU19NT0RVTEUsIGZ1c2RfZGV2LT5jbGFzc19uYW1lKTsKLQkJaWYoSVNfRVJS
KGZ1c2RfZGV2LT5jbGF6eikpCi0JCXsKLQkJCWVycm9yID0gUFRSX0VSUihmdXNkX2Rldi0+Y2xh
enopOwotCQkJZ290byByZWdpc3Rlcl9mYWlsZWQ0OwotCQl9Ci0JCWZ1c2RfZGV2LT5vd25zX2Ns
YXNzID0gMTsKLQl9Ci0JCi0JZnVzZF9kZXYtPmNsYXNzX2RldmljZSA9IENMQVNTX0RFVklDRV9D
UkVBVEUoZnVzZF9kZXYtPmNsYXp6LCBOVUxMLCBmdXNkX2Rldi0+ZGV2X2lkLCBOVUxMLCBmdXNk
X2Rldi0+ZGV2X25hbWUpOwotCWlmKGZ1c2RfZGV2LT5jbGFzc19kZXZpY2UgPT0gTlVMTCkKLQl7
Ci0JCWVycm9yID0gUFRSX0VSUihmdXNkX2Rldi0+Y2xhc3NfZGV2aWNlKTsKLQkJcHJpbnRrKCJj
bGFzc19kZXZpY2VfY3JlYXRlIGZhaWxlZCBzdGF0dXM6ICVkXG4iLCBlcnJvcik7Ci0JCWdvdG8g
cmVnaXN0ZXJfZmFpbGVkNTsKLQl9Ci0JCi0JLyogbWFrZSBzdXJlIHRoZSByZWdpc3RyYXRpb24g
d2FzIHN1Y2Nlc3NmdWwgKi8KLSAgLyoKLSAgaWYgKGZ1c2RfZGV2LT5oYW5kbGUgPT0gMCkgewot
ICAgIGVycm9yID0gLUVJTzsKLSAgICBnb3RvIHJlZ2lzdGVyX2ZhaWxlZDsKLSAgfQotICAqLwot
Ci0gIC8qIHJlbWVtYmVyIHRoZSB1c2VyJ3MgcHJpdmF0ZSBkYXRhIHNvIHdlIGNhbiBwYXNzIGl0
IGJhY2sgbGF0ZXIgKi8KLSAgZnVzZF9kZXYtPnByaXZhdGVfZGF0YSA9IHJlZ2lzdGVyX21zZy5k
ZXZpY2VfaW5mbzsKLQotICAvKiBldmVyeXRoaW5nIG9rICovCi0gIGZ1c2RfZGV2LT52ZXJzaW9u
ID0gYXRvbWljX2luY19hbmRfcmV0KCZsYXN0X3ZlcnNpb24pOwotICBSREVCVUcoMywgInBpZCAl
ZCByZWdpc3RlcmVkIC9kZXYvJXMgdiVsZCIsIGZ1c2RfZGV2LT5waWQsIE5BTUUoZnVzZF9kZXYp
LAotCSBmdXNkX2Rldi0+dmVyc2lvbik7Ci0gIHdha2VfdXBfaW50ZXJydXB0aWJsZSgmbmV3X2Rl
dmljZV93YWl0KTsKLSAgcmV0dXJuIDA7CisgaW50IGVycm9yID0gMDsKKyBzdHJ1Y3QgbGlzdF9o
ZWFkICp0bXA7CisgaW50IGRldl9pZDsKKworIC8qIG1ha2Ugc3VyZSBhcmdzIGFyZSB2YWxpZCAq
LworIGlmIChmdXNkX2RldiA9PSBOVUxMKSB7CisgUkRFQlVHKDAsICJmdXNkX3JlZ2lzdGVyX2Rl
dmljZTogYnVnIGluIGFyZ3VtZW50cyEiKTsKKyByZXR1cm4gLUVJTlZBTDsKKyB9CisKKyAvKiB1
c2VyIGNhbiBvbmx5IHJlZ2lzdGVyIG9uZSBkZXZpY2UgcGVyIGluc3RhbmNlICovCisvLyBpZiAo
ZnVzZF9kZXYtPmhhbmRsZSAhPSAwKQorLy8gcmV0dXJuIC1FQlVTWTsKKworIHJlZ2lzdGVyX21z
Zy5uYW1lW0ZVU0RfTUFYX05BTUVfTEVOR1RIXSA9ICdcMCc7CisKKyAvKiBtYWtlIHN1cmUgdGhh
dCB0aGVyZSBpc24ndCBhbHJlYWR5IGEgZGV2aWNlIGJ5IHRoaXMgbmFtZSAqLworIGRvd24oJmZ1
c2RfZGV2bGlzdF9zZW0pOworIGxpc3RfZm9yX2VhY2godG1wLCAmZnVzZF9kZXZsaXN0X2hlYWQp
IHsKKyBmdXNkX2Rldl90ICpkID0gbGlzdF9lbnRyeSh0bXAsIGZ1c2RfZGV2X3QsIGRldmxpc3Qp
OworCisgaWYgKGQgJiYgZC0+bmFtZSAmJiAhZC0+em9tYmllICYmICFzdHJjbXAoZC0+bmFtZSwg
cmVnaXN0ZXJfbXNnLm5hbWUpKSB7CisgZXJyb3IgPSAtRUVYSVNUOworIGJyZWFrOworIH0KKyB9
CisgdXAoJmZ1c2RfZGV2bGlzdF9zZW0pOworCisgaWYgKGVycm9yKQorIHJldHVybiBlcnJvcjsK
KworCisgLyogYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgbmFtZSwgYW5kIGNvcHkgKi8KKyBpZiAo
KGZ1c2RfZGV2LT5uYW1lID0gS01BTExPQyhzdHJsZW4ocmVnaXN0ZXJfbXNnLm5hbWUpKzEsIEdG
UF9LRVJORUwpKSA9PSBOVUxMKSB7CisgUkRFQlVHKDEsICJ5aWtlcyEga2VybmVsIGNhbid0IGFs
bG9jYXRlIG1lbW9yeSIpOworIHJldHVybiAtRU5PTUVNOworIH0KKworIHN0cmNweShmdXNkX2Rl
di0+bmFtZSwgcmVnaXN0ZXJfbXNnLm5hbWUpOworCisgLyogYWxsb2NhdGUgbWVtb3J5IGZvciB0
aGUgY2xhc3MgbmFtZSwgYW5kIGNvcHkgKi8KKyBpZiAoKGZ1c2RfZGV2LT5jbGFzc19uYW1lID0g
S01BTExPQyhzdHJsZW4ocmVnaXN0ZXJfbXNnLmNsYXp6KSsxLCBHRlBfS0VSTkVMKSkgPT0gTlVM
TCkgeworIFJERUJVRygxLCAieWlrZXMhIGtlcm5lbCBjYW4ndCBhbGxvY2F0ZSBtZW1vcnkiKTsK
KyByZXR1cm4gLUVOT01FTTsKKyB9CisKKyBzdHJjcHkoZnVzZF9kZXYtPmNsYXNzX25hbWUsIHJl
Z2lzdGVyX21zZy5jbGF6eik7CisKKyAvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBjbGFzcyBu
YW1lLCBhbmQgY29weSAqLworIGlmICgoZnVzZF9kZXYtPmRldl9uYW1lID0gS01BTExPQyhzdHJs
ZW4ocmVnaXN0ZXJfbXNnLmRldm5hbWUpKzEsIEdGUF9LRVJORUwpKSA9PSBOVUxMKSB7CisgUkRF
QlVHKDEsICJ5aWtlcyEga2VybmVsIGNhbid0IGFsbG9jYXRlIG1lbW9yeSIpOworIHJldHVybiAt
RU5PTUVNOworIH0KKworIHN0cmNweShmdXNkX2Rldi0+ZGV2X25hbWUsIHJlZ2lzdGVyX21zZy5k
ZXZuYW1lKTsKKworIGRldl9pZCA9IDA7CisKKyBpZigoZXJyb3IgPSBhbGxvY19jaHJkZXZfcmVn
aW9uKCZkZXZfaWQsIDAsIDEsIGZ1c2RfZGV2LT5uYW1lKSkgPCAwKQorIHsKKyBwcmludGsoImFs
bG9jX2NocmRldl9yZWdpb24gZmFpbGVkIHN0YXR1czogJWRcbiIsIGVycm9yKTsKKyBnb3RvIHJl
Z2lzdGVyX2ZhaWxlZDsKKyB9CisKKyBmdXNkX2Rldi0+ZGV2X2lkID0gZGV2X2lkOworCisgI2lm
ZGVmIENPTkZJR19ERVZGU19GUworIGlmKChlcnJvciA9IGRldmZzX21rX2NkZXYoZGV2X2lkLCBT
X0lGQ0hSIHwgcmVnaXN0ZXJfbXNnLm1vZGUsIGZ1c2RfZGV2LT5uYW1lKSkgPCAwKQorIHsKKyBw
cmludGsoImRldmZzX21rX2NkZXYgZmFpbGVkIHN0YXR1czogJWRcbiIsIGVycm9yKTsKKyBnb3Rv
IHJlZ2lzdGVyX2ZhaWxlZDI7CisgfQorICNlbmRpZgorCisgZnVzZF9kZXYtPmhhbmRsZSA9IGNk
ZXZfYWxsb2MoKTsKKyBpZihmdXNkX2Rldi0+aGFuZGxlID09IE5VTEwpCisgeworIGVycm9yID0g
LUVOT01FTTsKKyBnb3RvIHJlZ2lzdGVyX2ZhaWxlZDM7CisgfQorCisgZnVzZF9kZXYtPmhhbmRs
ZS0+b3duZXIgPSBUSElTX01PRFVMRTsKKyBmdXNkX2Rldi0+aGFuZGxlLT5vcHMgPSAmZnVzZF9j
bGllbnRfZm9wczsKKworIGtvYmplY3Rfc2V0X25hbWUoJmZ1c2RfZGV2LT5oYW5kbGUtPmtvYmos
IGZ1c2RfZGV2LT5uYW1lKTsKKworIGlmKChlcnJvciA9IGNkZXZfYWRkKGZ1c2RfZGV2LT5oYW5k
bGUsIGRldl9pZCwgMSkpIDwgMCkKKyB7CisgcHJpbnRrKCJjZGV2X2FkZCBmYWlsZWQgc3RhdHVz
OiAlZFxuIiwgZXJyb3IpOworIGtvYmplY3RfcHV0KCZmdXNkX2Rldi0+aGFuZGxlLT5rb2JqKTsK
KyBnb3RvIHJlZ2lzdGVyX2ZhaWxlZDM7CisgfQorCisgLy8gSGFjayB0byBhZGQgbXkgY2xhc3Mg
dG8gdGhlIHNvdW5kIGNsYXNzCisgaWYoc3RyY21wKCJzb3VuZCIsIHJlZ2lzdGVyX21zZy5jbGF6
eikgPT0gMCkKKyB7CisgZnVzZF9kZXYtPmNsYXp6ID0gc291bmRfY2xhc3M7CisgZnVzZF9kZXYt
Pm93bnNfY2xhc3MgPSAwOworIH0KKyBlbHNlCisgeworIGZ1c2RfZGV2LT5jbGF6eiA9IGNsYXNz
X2NyZWF0ZShUSElTX01PRFVMRSwgZnVzZF9kZXYtPmNsYXNzX25hbWUpOworIGlmKElTX0VSUihm
dXNkX2Rldi0+Y2xhenopKQorIHsKKyBlcnJvciA9IFBUUl9FUlIoZnVzZF9kZXYtPmNsYXp6KTsK
KyBnb3RvIHJlZ2lzdGVyX2ZhaWxlZDQ7CisgfQorIGZ1c2RfZGV2LT5vd25zX2NsYXNzID0gMTsK
KyB9CisKKyBmdXNkX2Rldi0+Y2xhc3NfZGV2aWNlID0gQ0xBU1NfREVWSUNFX0NSRUFURShmdXNk
X2Rldi0+Y2xhenosIE5VTEwsIGZ1c2RfZGV2LT5kZXZfaWQsIE5VTEwsIGZ1c2RfZGV2LT5kZXZf
bmFtZSk7CisgaWYoZnVzZF9kZXYtPmNsYXNzX2RldmljZSA9PSBOVUxMKQorIHsKKyBlcnJvciA9
IFBUUl9FUlIoZnVzZF9kZXYtPmNsYXNzX2RldmljZSk7CisgcHJpbnRrKCJjbGFzc19kZXZpY2Vf
Y3JlYXRlIGZhaWxlZCBzdGF0dXM6ICVkXG4iLCBlcnJvcik7CisgZ290byByZWdpc3Rlcl9mYWls
ZWQ1OworIH0KKworIC8qIG1ha2Ugc3VyZSB0aGUgcmVnaXN0cmF0aW9uIHdhcyBzdWNjZXNzZnVs
ICovCisgLyoKKyBpZiAoZnVzZF9kZXYtPmhhbmRsZSA9PSAwKSB7CisgZXJyb3IgPSAtRUlPOwor
IGdvdG8gcmVnaXN0ZXJfZmFpbGVkOworIH0KKyAqLworCisgLyogcmVtZW1iZXIgdGhlIHVzZXIn
cyBwcml2YXRlIGRhdGEgc28gd2UgY2FuIHBhc3MgaXQgYmFjayBsYXRlciAqLworIGZ1c2RfZGV2
LT5wcml2YXRlX2RhdGEgPSByZWdpc3Rlcl9tc2cuZGV2aWNlX2luZm87CisKKyAvKiBldmVyeXRo
aW5nIG9rICovCisgZnVzZF9kZXYtPnZlcnNpb24gPSBhdG9taWNfaW5jX2FuZF9yZXQoJmxhc3Rf
dmVyc2lvbik7CisgUkRFQlVHKDMsICJwaWQgJWQgcmVnaXN0ZXJlZCAvZGV2LyVzIHYlbGQiLCBm
dXNkX2Rldi0+cGlkLCBOQU1FKGZ1c2RfZGV2KSwKKyBmdXNkX2Rldi0+dmVyc2lvbik7Cisgd2Fr
ZV91cF9pbnRlcnJ1cHRpYmxlKCZuZXdfZGV2aWNlX3dhaXQpOworIHJldHVybiAwOwogCiByZWdp
c3Rlcl9mYWlsZWQ1OgotCWNsYXNzX2Rlc3Ryb3koZnVzZF9kZXYtPmNsYXp6KTsKKyBjbGFzc19k
ZXN0cm95KGZ1c2RfZGV2LT5jbGF6eik7CiByZWdpc3Rlcl9mYWlsZWQ0OgotCWNkZXZfZGVsKGZ1
c2RfZGV2LT5oYW5kbGUpOworIGNkZXZfZGVsKGZ1c2RfZGV2LT5oYW5kbGUpOwogcmVnaXN0ZXJf
ZmFpbGVkMzoKICNpZmRlZiBDT05GSUdfREVWRlNfRlMKLQlkZXZmc19yZW1vdmUoZnVzZF9kZXYt
Pm5hbWUpOworIGRldmZzX3JlbW92ZShmdXNkX2Rldi0+bmFtZSk7CiAjZW5kaWYKLXJlZ2lzdGVy
X2ZhaWxlZDI6Ci0JdW5yZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKGRldl9pZCwgMSk7CisvKnJlZ2lz
dGVyX2ZhaWxlZDI6Ki8KKyB1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24oZGV2X2lkLCAxKTsKIHJl
Z2lzdGVyX2ZhaWxlZDoKLSAgS0ZSRUUoZnVzZF9kZXYtPm5hbWUpOwotICBmdXNkX2Rldi0+bmFt
ZSA9IE5VTEw7Ci0gIHJldHVybiBlcnJvcjsKKyBLRlJFRShmdXNkX2Rldi0+bmFtZSk7CisgZnVz
ZF9kZXYtPm5hbWUgPSBOVUxMOworIHJldHVybiBlcnJvcjsKIH0KIAogCkBAIC0yMDUwLDEwNCAr
MjA1MCwxMDQgQEAKIC8qIG9wZW4oKSBjYWxsZWQgb24gL2Rldi9mdXNkIGl0c2VsZiAqLwogU1RB
VElDIGludCBmdXNkX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUp
CiB7Ci0gIGZ1c2RfZGV2X3QgKmZ1c2RfZGV2ID0gTlVMTDsKLSAgZnVzZF9maWxlX3QgKipmaWxl
X2FycmF5ID0gTlVMTDsKKyBmdXNkX2Rldl90ICpmdXNkX2RldiA9IE5VTEw7CisgZnVzZF9maWxl
X3QgKipmaWxlX2FycmF5ID0gTlVMTDsKIAotICAvKiBrZWVwIHRoZSBtb2R1bGUgZnJvbSBiZWlu
ZyB1bmxvYWRlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24hICovCi0gIC8vTU9EX0lOQ19VU0VfQ09V
TlQ7CisgLyoga2VlcCB0aGUgbW9kdWxlIGZyb20gYmVpbmcgdW5sb2FkZWQgZHVyaW5nIGluaXRp
YWxpemF0aW9uISAqLworIC8vTU9EX0lOQ19VU0VfQ09VTlQ7CiAKLSAgLyogYWxsb2NhdGUgbWVt
b3J5IGZvciB0aGUgZGV2aWNlIHN0YXRlICovCi0gIGlmICgoZnVzZF9kZXYgPSBLTUFMTE9DKHNp
emVvZihmdXNkX2Rldl90KSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpCi0gICAgZ290byBkZXZfbWFs
bG9jX2ZhaWxlZDsKLSAgbWVtc2V0KGZ1c2RfZGV2LCAwLCBzaXplb2YoZnVzZF9kZXZfdCkpOwot
Ci0gIGlmICgoZmlsZV9hcnJheSA9IGZ1c2RfZGV2X2FkanNpemUoZnVzZF9kZXYpKSA9PSBOVUxM
KQotICAgIGdvdG8gZmlsZV9tYWxsb2NfZmFpbGVkOwotCi0gIGluaXRfd2FpdHF1ZXVlX2hlYWQo
JmZ1c2RfZGV2LT5kZXZfd2FpdCk7Ci0gIGluaXRfTVVURVgoJmZ1c2RfZGV2LT5kZXZfc2VtKTsK
LSAgZnVzZF9kZXYtPm1hZ2ljID0gRlVTRF9ERVZfTUFHSUM7Ci0gIGZ1c2RfZGV2LT5waWQgPSBj
dXJyZW50LT5waWQ7Ci0gIGZ1c2RfZGV2LT50YXNrID0gY3VycmVudDsKLSAgZmlsZS0+cHJpdmF0
ZV9kYXRhID0gZnVzZF9kZXY7Ci0KLSAgLyogYWRkIHRvIHRoZSBsaXN0IG9mIHZhbGlkIGRldmlj
ZXMgKi8KLSAgZG93bigmZnVzZF9kZXZsaXN0X3NlbSk7Ci0gIGxpc3RfYWRkKCZmdXNkX2Rldi0+
ZGV2bGlzdCwgJmZ1c2RfZGV2bGlzdF9oZWFkKTsKLSAgdXAoJmZ1c2RfZGV2bGlzdF9zZW0pOwor
IC8qIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGRldmljZSBzdGF0ZSAqLworIGlmICgoZnVzZF9k
ZXYgPSBLTUFMTE9DKHNpemVvZihmdXNkX2Rldl90KSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpCisg
Z290byBkZXZfbWFsbG9jX2ZhaWxlZDsKKyBtZW1zZXQoZnVzZF9kZXYsIDAsIHNpemVvZihmdXNk
X2Rldl90KSk7CisKKyBpZiAoKGZpbGVfYXJyYXkgPSBmdXNkX2Rldl9hZGpzaXplKGZ1c2RfZGV2
KSkgPT0gTlVMTCkKKyBnb3RvIGZpbGVfbWFsbG9jX2ZhaWxlZDsKKworIGluaXRfd2FpdHF1ZXVl
X2hlYWQoJmZ1c2RfZGV2LT5kZXZfd2FpdCk7CisgaW5pdF9NVVRFWCgmZnVzZF9kZXYtPmRldl9z
ZW0pOworIGZ1c2RfZGV2LT5tYWdpYyA9IEZVU0RfREVWX01BR0lDOworIGZ1c2RfZGV2LT5waWQg
PSBjdXJyZW50LT5waWQ7CisgZnVzZF9kZXYtPnRhc2sgPSBjdXJyZW50OworIGZpbGUtPnByaXZh
dGVfZGF0YSA9IGZ1c2RfZGV2OworCisgLyogYWRkIHRvIHRoZSBsaXN0IG9mIHZhbGlkIGRldmlj
ZXMgKi8KKyBkb3duKCZmdXNkX2Rldmxpc3Rfc2VtKTsKKyBsaXN0X2FkZCgmZnVzZF9kZXYtPmRl
dmxpc3QsICZmdXNkX2Rldmxpc3RfaGVhZCk7CisgdXAoJmZ1c2RfZGV2bGlzdF9zZW0pOwogCi0g
IFJERUJVRygzLCAicGlkICVkIG9wZW5lZCAvZGV2L2Z1c2QiLCBmdXNkX2Rldi0+cGlkKTsKLSAg
cmV0dXJuIDA7CisgUkRFQlVHKDMsICJwaWQgJWQgb3BlbmVkIC9kZXYvZnVzZCIsIGZ1c2RfZGV2
LT5waWQpOworIHJldHVybiAwOwogCiAgZmlsZV9tYWxsb2NfZmFpbGVkOgotICBLRlJFRShmdXNk
X2Rldik7CisgS0ZSRUUoZnVzZF9kZXYpOwogIGRldl9tYWxsb2NfZmFpbGVkOgotICBSREVCVUco
MSwgIm91dCBvZiBtZW1vcnkgaW4gZnVzZF9vcGVuISIpOwotICAvL01PRF9ERUNfVVNFX0NPVU5U
OwotICByZXR1cm4gLUVOT01FTTsKKyBSREVCVUcoMSwgIm91dCBvZiBtZW1vcnkgaW4gZnVzZF9v
cGVuISIpOworIC8vTU9EX0RFQ19VU0VfQ09VTlQ7CisgcmV0dXJuIC1FTk9NRU07CiB9CiAKIAot
LyogY2xvc2UoKSBjYWxsZWQgb24gL2Rldi9mdXNkIGl0c2VsZi4gIGRlc3Ryb3kgdGhlIGRldmlj
ZSB0aGF0CisvKiBjbG9zZSgpIGNhbGxlZCBvbiAvZGV2L2Z1c2QgaXRzZWxmLiBkZXN0cm95IHRo
ZSBkZXZpY2UgdGhhdAogICogd2FzIHJlZ2lzdGVyZWQgYnkgaXQsIGlmIGFueS4gKi8KIFNUQVRJ
QyBpbnQgZnVzZF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxl
KQogewotICBmdXNkX2Rldl90ICpmdXNkX2RldjsKKyBmdXNkX2Rldl90ICpmdXNkX2RldjsKIAot
ICBHRVRfRlVTRF9ERVYoZmlsZS0+cHJpdmF0ZV9kYXRhLCBmdXNkX2Rldik7Ci0gIExPQ0tfRlVT
RF9ERVYoZnVzZF9kZXYpOworIEdFVF9GVVNEX0RFVihmaWxlLT5wcml2YXRlX2RhdGEsIGZ1c2Rf
ZGV2KTsKKyBMT0NLX0ZVU0RfREVWKGZ1c2RfZGV2KTsKIAotICBpZiAoZnVzZF9kZXYtPnBpZCAh
PSBjdXJyZW50LT5waWQpIHsKLSAgICBSREVCVUcoMiwgInlpa2VzITogd2hlbiByZWxlYXNpbmcg
ZGV2aWNlLCBwaWQgbWlzbWF0Y2giKTsKLSAgfQorIGlmIChmdXNkX2Rldi0+cGlkICE9IGN1cnJl
bnQtPnBpZCkgeworIFJERUJVRygyLCAieWlrZXMhOiB3aGVuIHJlbGVhc2luZyBkZXZpY2UsIHBp
ZCBtaXNtYXRjaCIpOworIH0KIAotICBSREVCVUcoMywgInBpZCAlZCBjbG9zaW5nIC9kZXYvZnVz
ZCIsIGN1cnJlbnQtPnBpZCk7CisgUkRFQlVHKDMsICJwaWQgJWQgY2xvc2luZyAvZGV2L2Z1c2Qi
LCBjdXJyZW50LT5waWQpOwogCiAjaWYgMAotICAvKiBUaGlzIGRlbGF5IGlzIG5lZWRlZCB0byBl
eGVyY2lzZSB0aGUgb3BlbnJhY2UuYyByYWNlIGNvbmRpdGlvbiwKLSAgICogaS5lLiB0ZXN0aW5n
IHRvIG1ha2Ugc3VyZSB0aGF0IG91ciBvcGVuX2luX3Byb2dyZXNzIHN0dWZmIHdvcmtzICovCi0g
IHsKLSAgICBpbnQgdGFyZ2V0ID0gamlmZmllcyArIDEwKkhaOwotCi0gICAgUkRFQlVHKDEsICJz
dGFydGluZyB0byB3YWl0Iik7Ci0gICAgd2hpbGUgKGppZmZpZXMgPCB0YXJnZXQpCi0gICAgICBz
Y2hlZHVsZSgpOwotICAgIFJERUJVRygxLCAic3RvcHBpbmcgd2FpdCIpOwotICB9Ci0jZW5kaWYK
LQotCWlmKGZ1c2RfZGV2LT5oYW5kbGUpCi0JewotCQljbGFzc19kZXZpY2VfZGVzdHJveShmdXNk
X2Rldi0+Y2xhenosIGZ1c2RfZGV2LT5kZXZfaWQpOwotCQlpZihmdXNkX2Rldi0+b3duc19jbGFz
cykKLQkJewotCQkJY2xhc3NfZGVzdHJveShmdXNkX2Rldi0+Y2xhenopOwotCQl9Ci0JCWNkZXZf
ZGVsKGZ1c2RfZGV2LT5oYW5kbGUpOwotI2lmZGVmIENPTkZJR19ERVZGU19GUwotICAJZGV2ZnNf
cmVtb3ZlKGZ1c2RfZGV2LT5uYW1lKTsKKyAvKiBUaGlzIGRlbGF5IGlzIG5lZWRlZCB0byBleGVy
Y2lzZSB0aGUgb3BlbnJhY2UuYyByYWNlIGNvbmRpdGlvbiwKKyAqIGkuZS4gdGVzdGluZyB0byBt
YWtlIHN1cmUgdGhhdCBvdXIgb3Blbl9pbl9wcm9ncmVzcyBzdHVmZiB3b3JrcyAqLworIHsKKyBp
bnQgdGFyZ2V0ID0gamlmZmllcyArIDEwKkhaOworCisgUkRFQlVHKDEsICJzdGFydGluZyB0byB3
YWl0Iik7Cisgd2hpbGUgKGppZmZpZXMgPCB0YXJnZXQpCisgc2NoZWR1bGUoKTsKKyBSREVCVUco
MSwgInN0b3BwaW5nIHdhaXQiKTsKKyB9CiAjZW5kaWYKLQkJdW5yZWdpc3Rlcl9jaHJkZXZfcmVn
aW9uKGZ1c2RfZGV2LT5kZXZfaWQsIDEpOwotCX0KIAotICAvKiBtYXJrIHRoZSBkcml2ZXIgYXMg
YmVpbmcgZ29uZSAqLwotICB6b21iaWZ5X2RldihmdXNkX2Rldik7CisgaWYoZnVzZF9kZXYtPmhh
bmRsZSkKKyB7CisgY2xhc3NfZGV2aWNlX2Rlc3Ryb3koZnVzZF9kZXYtPmNsYXp6LCBmdXNkX2Rl
di0+ZGV2X2lkKTsKKyBpZihmdXNkX2Rldi0+b3duc19jbGFzcykKKyB7CisgY2xhc3NfZGVzdHJv
eShmdXNkX2Rldi0+Y2xhenopOworIH0KKyBjZGV2X2RlbChmdXNkX2Rldi0+aGFuZGxlKTsKKyNp
ZmRlZiBDT05GSUdfREVWRlNfRlMKKyBkZXZmc19yZW1vdmUoZnVzZF9kZXYtPm5hbWUpOworI2Vu
ZGlmCisgdW5yZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKGZ1c2RfZGV2LT5kZXZfaWQsIDEpOworIH0K
IAotICAvKiAuLi5hbmQgcG9zc2libHkgZnJlZSBpdC4gIChSZWxlYXNlIGxvY2sgaWYgaXQgaGFz
bid0IGJlZW4gZnJlZWQpICovCi0gIGlmICghbWF5YmVfZnJlZV9mdXNkX2RldihmdXNkX2Rldikp
Ci0gICAgVU5MT0NLX0ZVU0RfREVWKGZ1c2RfZGV2KTsKKyAvKiBtYXJrIHRoZSBkcml2ZXIgYXMg
YmVpbmcgZ29uZSAqLworIHpvbWJpZnlfZGV2KGZ1c2RfZGV2KTsKIAotICAvKiBub3RpZnkgZnVz
ZF9zdGF0dXMgcmVhZGVycyB0aGF0IHRoZXJlIGhhcyBiZWVuIGEgY2hhbmdlIGluIHRoZQotICAg
KiBsaXN0IG9mIHJlZ2lzdGVyZWQgZGV2aWNlcyAqLwotICBhdG9taWNfaW5jX2FuZF9yZXQoJmxh
c3RfdmVyc2lvbik7Ci0gIHdha2VfdXBfaW50ZXJydXB0aWJsZSgmbmV3X2RldmljZV93YWl0KTsK
KyAvKiAuLi5hbmQgcG9zc2libHkgZnJlZSBpdC4gKFJlbGVhc2UgbG9jayBpZiBpdCBoYXNuJ3Qg
YmVlbiBmcmVlZCkgKi8KKyBpZiAoIW1heWJlX2ZyZWVfZnVzZF9kZXYoZnVzZF9kZXYpKQorIFVO
TE9DS19GVVNEX0RFVihmdXNkX2Rldik7CisKKyAvKiBub3RpZnkgZnVzZF9zdGF0dXMgcmVhZGVy
cyB0aGF0IHRoZXJlIGhhcyBiZWVuIGEgY2hhbmdlIGluIHRoZQorICogbGlzdCBvZiByZWdpc3Rl
cmVkIGRldmljZXMgKi8KKyBhdG9taWNfaW5jX2FuZF9yZXQoJmxhc3RfdmVyc2lvbik7Cisgd2Fr
ZV91cF9pbnRlcnJ1cHRpYmxlKCZuZXdfZGV2aWNlX3dhaXQpOwogCi0gIHJldHVybiAwOworIHJl
dHVybiAwOwogCiAgem9tYmllX2RldjoKICBpbnZhbGlkX2RldjoKLSAgUkRFQlVHKDEsICJpbnZh
bGlkIGRldmljZSBmb3VuZCBpbiBmdXNkX3JlbGVhc2UhISIpOwotICByZXR1cm4gLUVOT0RFVjsK
KyBSREVCVUcoMSwgImludmFsaWQgZGV2aWNlIGZvdW5kIGluIGZ1c2RfcmVsZWFzZSEhIik7Cisg
cmV0dXJuIC1FTk9ERVY7CiB9CiAKIApAQCAtMjE1NiwxNzYgKzIxNTYsMTgzIEBACiAgKiAoaS5l
Liwgd3JpdGVzIHRvIHRoZSAvZGV2L2Z1c2QgY29udHJvbCBjaGFubmVsLikKICAqLwogU1RBVElD
IHNzaXplX3QgZnVzZF9wcm9jZXNzX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAotICAgY29uc3Qg
Y2hhciAqdXNlcl9tc2dfYnVmZmVyLCBzaXplX3QgdXNlcl9tc2dfbGVuLAotICAgY29uc3QgY2hh
ciAqdXNlcl9kYXRhX2J1ZmZlciwgc2l6ZV90IHVzZXJfZGF0YV9sZW4pCisgY29uc3QgY2hhciAq
dXNlcl9tc2dfYnVmZmVyLCBzaXplX3QgdXNlcl9tc2dfbGVuLAorIGNvbnN0IGNoYXIgKnVzZXJf
ZGF0YV9idWZmZXIsIHNpemVfdCB1c2VyX2RhdGFfbGVuKQogewotICBmdXNkX2Rldl90ICpmdXNk
X2RldjsKLSAgZnVzZF9tc2dfdCAqbXNnID0gTlVMTDsKLSAgaW50IHJldHZhbCA9IDA7Ci0gIGlu
dCB5aWVsZCA9IDA7Ci0KLSAgR0VUX0ZVU0RfREVWKGZpbGUtPnByaXZhdGVfZGF0YSwgZnVzZF9k
ZXYpOwotICBMT0NLX0ZVU0RfREVWKGZ1c2RfZGV2KTsKLQotICAvKiBnZXQgdGhlIGhlYWRlciBm
cm9tIHVzZXJzcGFjZSAoZmlyc3QgbWFrZSBzdXJlIHRoZXJlJ3MgZW5vdWdoIGRhdGEpICovCi0g
IGlmICh1c2VyX21zZ19sZW4gIT0gc2l6ZW9mKGZ1c2RfbXNnX3QpKSB7Ci0gICAgUkRFQlVHKDYs
ICJjb250cm9sIGNoYW5uZWwgZ290IGJhZCB3cml0ZSBvZiAlZCBieXRlcyAod2FudGVkICVkKSIs
Ci0JICAgKGludCkgdXNlcl9tc2dfbGVuLCAoaW50KSBzaXplb2YoZnVzZF9tc2dfdCkpOwotICAg
IHJldHZhbCA9IC1FSU5WQUw7Ci0gICAgZ290byBvdXRfbm9fZnJlZTsKLSAgfQotICBpZiAoKG1z
ZyA9IEtNQUxMT0Moc2l6ZW9mKGZ1c2RfbXNnX3QpLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkgewot
ICAgIHJldHZhbCA9IC1FTk9NRU07Ci0gICAgUkRFQlVHKDEsICJ5aWtlcyEgIGtlcm5lbCBjYW4n
dCBhbGxvY2F0ZSBtZW1vcnkiKTsKLSAgICBnb3RvIG91dDsKLSAgfQotICBtZW1zZXQobXNnLCAw
LCBzaXplb2YoZnVzZF9tc2dfdCkpOwotCi0gIGlmIChjb3B5X2Zyb21fdXNlcihtc2csIHVzZXJf
bXNnX2J1ZmZlciwgc2l6ZW9mKGZ1c2RfbXNnX3QpKSkgewotICAgIHJldHZhbCA9IC1FRkFVTFQ7
Ci0gICAgZ290byBvdXQ7Ci0gIH0KLSAgbXNnLT5kYXRhID0gTlVMTDsgLyogcG9pbnRlcnMgZnJv
bSB1c2Vyc3BhY2UgaGF2ZSBubyBtZWFuaW5nICovCi0KLSAgLyogY2hlY2sgdGhlIG1hZ2ljIG51
bWJlciBiZWZvcmUgYWN0aW5nIG9uIHRoZSBtZXNzYWdlIGF0IGFsbCAqLwotICBpZiAobXNnLT5t
YWdpYyAhPSBGVVNEX01TR19NQUdJQykgewotICAgIFJERUJVRygyLCAiZ290IGludmFsaWQgbWFn
aWMgbnVtYmVyIG9uIC9kZXYvZnVzZCB3cml0ZSBmcm9tIHBpZCAlZCIsCi0JICAgY3VycmVudC0+
cGlkKTsKLSAgICByZXR2YWwgPSAtRUlPOwotICAgIGdvdG8gb3V0OwotICB9Ci0KLSAgLyogbm93
IGdldCBkYXRhIHBvcnRpb24gb2YgdGhlIG1lc3NhZ2UgKi8KLSAgaWYgKHVzZXJfZGF0YV9sZW4g
PCAwIHx8IHVzZXJfZGF0YV9sZW4gPiBNQVhfUldfU0laRSkgewotICAgIFJERUJVRygyLCAiZnVz
ZF9wcm9jZXNzX3dyaXRlOiBnb3QgaW52YWxpZCBsZW5ndGggJWQiLCAoaW50KSB1c2VyX2RhdGFf
bGVuKTsKLSAgICByZXR2YWwgPSAtRUlOVkFMOwotICAgIGdvdG8gb3V0OwotICB9Ci0gIGlmICht
c2ctPmRhdGFsZW4gIT0gdXNlcl9kYXRhX2xlbikgewotICAgIFJERUJVRygyLCAibXNnLT5kYXRh
bGVuKCVkKSAhPSB1c2VyX2RhdGFfbGVuKCVkKSwgc2lnaCEiLAotCSAgIG1zZy0+ZGF0YWxlbiwg
KGludCkgdXNlcl9kYXRhX2xlbik7Ci0gICAgcmV0dmFsID0gLUVJTlZBTDsKLSAgICBnb3RvIG91
dDsKLSAgfQotICBpZiAodXNlcl9kYXRhX2xlbiA+IDApIHsKLSAgICBpZiAodXNlcl9kYXRhX2J1
ZmZlciA9PSBOVUxMKSB7Ci0gICAgICBSREVCVUcoMiwgIm1zZy0+ZGF0YWxlbiBhbmQgbm8gZGF0
YSBidWZmZXIsIHNpZ2ghIik7Ci0gICAgICByZXR2YWwgPSAtRUlOVkFMOwotICAgICAgZ290byBv
dXQ7Ci0gICAgfQotICAgIGlmICgobXNnLT5kYXRhID0gVk1BTExPQyh1c2VyX2RhdGFfbGVuKSkg
PT0gTlVMTCkgewotICAgICAgcmV0dmFsID0gLUVOT01FTTsKLSAgICAgIFJERUJVRygxLCAieWlr
ZXMhICBrZXJuZWwgY2FuJ3QgYWxsb2NhdGUgbWVtb3J5Iik7Ci0gICAgICBnb3RvIG91dDsKLSAg
ICB9Ci0gICAgaWYgKGNvcHlfZnJvbV91c2VyKG1zZy0+ZGF0YSwgdXNlcl9kYXRhX2J1ZmZlciwg
dXNlcl9kYXRhX2xlbikpIHsKLSAgICAgIHJldHZhbCA9IC1FRkFVTFQ7Ci0gICAgICBnb3RvIG91
dDsKLSAgICB9Ci0gIH0KLQotICAvKiBiZWZvcmUgZGV2aWNlIHJlZ2lzdHJhdGlvbiwgdGhlIG9u
bHkgY29tbWFuZCBhbGxvd2VkIGlzICdyZWdpc3RlcicuICovCi0gIC8qCi0gIGlmICghZnVzZF9k
ZXYtPmhhbmRsZSAmJiBtc2ctPmNtZCAhPSBGVVNEX1JFR0lTVEVSX0RFVklDRSkgewotICAgIFJE
RUJVRygyLCAiZ290IGEgbWVzc2FnZSBvdGhlciB0aGFuICdyZWdpc3Rlcicgb24gYSBuZXcgZGV2
aWNlISIpOwotICAgIHJldHZhbCA9IC1FSU5WQUw7Ci0gICAgZ290byBvdXQ7Ci0gIH0KLSAgKi8K
LQotICAvKiBub3cgZGlzcGF0Y2ggdGhlIGNvbW1hbmQgdG8gdGhlIGFwcHJvcHJpYXRlIGhhbmRs
ZXIgKi8KLSAgc3dpdGNoIChtc2ctPmNtZCkgewotICBjYXNlIEZVU0RfUkVHSVNURVJfREVWSUNF
OgotICAgIHJldHZhbCA9IGZ1c2RfcmVnaXN0ZXJfZGV2aWNlKGZ1c2RfZGV2LCBtc2ctPnBhcm0u
cmVnaXN0ZXJfbXNnKTsKLSAgICBnb3RvIG91dDsKLSAgICBicmVhazsKLSAgY2FzZSBGVVNEX0ZP
UFNfUkVQTFk6Ci0gICAgLyogaWYgcmVwbHkgaXMgc3VjY2Vzc2Z1bCwgRE8gTk9UIGZyZWUgdGhl
IG1lc3NhZ2UgKi8KLSAgICBpZiAoKHJldHZhbCA9IGZ1c2RfZm9wc19yZXBseShmdXNkX2Rldiwg
bXNnKSkgPT0gMCkgewotICAgICAgeWllbGQgPSAxOwotICAgICAgZ290byBvdXRfbm9fZnJlZTsK
LSAgICB9Ci0gICAgYnJlYWs7Ci0gIGNhc2UgRlVTRF9GT1BTX05PTkJMT0NLX1JFUExZOgotICAg
IHN3aXRjaCAobXNnLT5zdWJjbWQpIHsKLSAgICBjYXNlIEZVU0RfUE9MTF9ESUZGOgotICAgICAg
cmV0dmFsID0gZnVzZF9wb2xsZGlmZl9yZXBseShmdXNkX2RldiwgbXNnKTsKLSAgICAgIGJyZWFr
OwotICAgIGRlZmF1bHQ6Ci0gICAgICBSREVCVUcoMiwgImZ1c2RfZm9wc19ub25ibG9jayBnb3Qg
dW5rbm93biBzdWJjbWQgJWQiLCBtc2ctPnN1YmNtZCk7Ci0gICAgICByZXR2YWwgPSAtRUlOVkFM
OwotICAgIH0KLSAgICBicmVhazsKLSAgZGVmYXVsdDoKLSAgICBSREVCVUcoMiwgIndhcm5pbmc6
IHVua25vd24gbWVzc2FnZSB0eXBlIG9mICVkIHJlY2VpdmVkISIsIG1zZy0+Y21kKTsKLSAgICBy
ZXR2YWwgPSAtRUlOVkFMOwotICAgIGdvdG8gb3V0OwotICAgIGJyZWFrOwotICB9CisgZnVzZF9k
ZXZfdCAqZnVzZF9kZXY7CisgZnVzZF9tc2dfdCAqbXNnID0gTlVMTDsKKyBpbnQgcmV0dmFsID0g
MDsKKyBpbnQgeWllbGQgPSAwOworCisgR0VUX0ZVU0RfREVWKGZpbGUtPnByaXZhdGVfZGF0YSwg
ZnVzZF9kZXYpOworIExPQ0tfRlVTRF9ERVYoZnVzZF9kZXYpOworCisgLyogZ2V0IHRoZSBoZWFk
ZXIgZnJvbSB1c2Vyc3BhY2UgKGZpcnN0IG1ha2Ugc3VyZSB0aGVyZSdzIGVub3VnaCBkYXRhKSAq
LworIGlmICh1c2VyX21zZ19sZW4gIT0gc2l6ZW9mKGZ1c2RfbXNnX3QpKSB7CisgUkRFQlVHKDYs
ICJjb250cm9sIGNoYW5uZWwgZ290IGJhZCB3cml0ZSBvZiAlZCBieXRlcyAod2FudGVkICVkKSIs
CisgKGludCkgdXNlcl9tc2dfbGVuLCAoaW50KSBzaXplb2YoZnVzZF9tc2dfdCkpOworIHJldHZh
bCA9IC1FSU5WQUw7CisgZ290byBvdXRfbm9fZnJlZTsKKyB9CisgaWYgKChtc2cgPSBLTUFMTE9D
KHNpemVvZihmdXNkX21zZ190KSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpIHsKKyByZXR2YWwgPSAt
RU5PTUVNOworIFJERUJVRygxLCAieWlrZXMhIGtlcm5lbCBjYW4ndCBhbGxvY2F0ZSBtZW1vcnki
KTsKKyBnb3RvIG91dDsKKyB9CisgbWVtc2V0KG1zZywgMCwgc2l6ZW9mKGZ1c2RfbXNnX3QpKTsK
KworIGlmIChjb3B5X2Zyb21fdXNlcihtc2csIHVzZXJfbXNnX2J1ZmZlciwgc2l6ZW9mKGZ1c2Rf
bXNnX3QpKSkgeworIHJldHZhbCA9IC1FRkFVTFQ7CisgZ290byBvdXQ7CisgfQorIG1zZy0+ZGF0
YSA9IE5VTEw7IC8qIHBvaW50ZXJzIGZyb20gdXNlcnNwYWNlIGhhdmUgbm8gbWVhbmluZyAqLwor
CisgLyogY2hlY2sgdGhlIG1hZ2ljIG51bWJlciBiZWZvcmUgYWN0aW5nIG9uIHRoZSBtZXNzYWdl
IGF0IGFsbCAqLworIGlmIChtc2ctPm1hZ2ljICE9IEZVU0RfTVNHX01BR0lDKSB7CisgUkRFQlVH
KDIsICJnb3QgaW52YWxpZCBtYWdpYyBudW1iZXIgb24gL2Rldi9mdXNkIHdyaXRlIGZyb20gcGlk
ICVkIiwKKyBjdXJyZW50LT5waWQpOworIHJldHZhbCA9IC1FSU87CisgZ290byBvdXQ7CisgfQor
CisgLyogbm93IGdldCBkYXRhIHBvcnRpb24gb2YgdGhlIG1lc3NhZ2UgKi8KKyBpZiAodXNlcl9k
YXRhX2xlbiA8IDAgfHwgdXNlcl9kYXRhX2xlbiA+IE1BWF9SV19TSVpFKSB7CisgUkRFQlVHKDIs
ICJmdXNkX3Byb2Nlc3Nfd3JpdGU6IGdvdCBpbnZhbGlkIGxlbmd0aCAlZCIsIChpbnQpIHVzZXJf
ZGF0YV9sZW4pOworIHJldHZhbCA9IC1FSU5WQUw7CisgZ290byBvdXQ7CisgfQorIGlmIChtc2ct
PmRhdGFsZW4gIT0gdXNlcl9kYXRhX2xlbikgeworIFJERUJVRygyLCAibXNnLT5kYXRhbGVuKCVk
KSAhPSB1c2VyX2RhdGFfbGVuKCVkKSwgc2lnaCEiLAorIG1zZy0+ZGF0YWxlbiwgKGludCkgdXNl
cl9kYXRhX2xlbik7CisgcmV0dmFsID0gLUVJTlZBTDsKKyBnb3RvIG91dDsKKyB9CisgaWYgKHVz
ZXJfZGF0YV9sZW4gPiAwKSB7CisgaWYgKHVzZXJfZGF0YV9idWZmZXIgPT0gTlVMTCkgeworIFJE
RUJVRygyLCAibXNnLT5kYXRhbGVuIGFuZCBubyBkYXRhIGJ1ZmZlciwgc2lnaCEiKTsKKyByZXR2
YWwgPSAtRUlOVkFMOworIGdvdG8gb3V0OworIH0KKyBpZiAoKG1zZy0+ZGF0YSA9IFZNQUxMT0Mo
dXNlcl9kYXRhX2xlbikpID09IE5VTEwpIHsKKyByZXR2YWwgPSAtRU5PTUVNOworIFJERUJVRygx
LCAieWlrZXMhIGtlcm5lbCBjYW4ndCBhbGxvY2F0ZSBtZW1vcnkiKTsKKyBnb3RvIG91dDsKKyB9
CisgaWYgKGNvcHlfZnJvbV91c2VyKG1zZy0+ZGF0YSwgdXNlcl9kYXRhX2J1ZmZlciwgdXNlcl9k
YXRhX2xlbikpIHsKKyByZXR2YWwgPSAtRUZBVUxUOworIGdvdG8gb3V0OworIH0KKyB9CisKKyAv
KiBiZWZvcmUgZGV2aWNlIHJlZ2lzdHJhdGlvbiwgdGhlIG9ubHkgY29tbWFuZCBhbGxvd2VkIGlz
ICdyZWdpc3RlcicuICovCisgLyoKKyBpZiAoIWZ1c2RfZGV2LT5oYW5kbGUgJiYgbXNnLT5jbWQg
IT0gRlVTRF9SRUdJU1RFUl9ERVZJQ0UpIHsKKyBSREVCVUcoMiwgImdvdCBhIG1lc3NhZ2Ugb3Ro
ZXIgdGhhbiAncmVnaXN0ZXInIG9uIGEgbmV3IGRldmljZSEiKTsKKyByZXR2YWwgPSAtRUlOVkFM
OworIGdvdG8gb3V0OworIH0KKyAqLworCisgLyogbm93IGRpc3BhdGNoIHRoZSBjb21tYW5kIHRv
IHRoZSBhcHByb3ByaWF0ZSBoYW5kbGVyICovCisgc3dpdGNoIChtc2ctPmNtZCkgeworIGNhc2Ug
RlVTRF9SRUdJU1RFUl9ERVZJQ0U6CisgcmV0dmFsID0gZnVzZF9yZWdpc3Rlcl9kZXZpY2UoZnVz
ZF9kZXYsIG1zZy0+cGFybS5yZWdpc3Rlcl9tc2cpOworIGdvdG8gb3V0OworIGJyZWFrOworIGNh
c2UgRlVTRF9GT1BTX1JFUExZOgorIC8qIGlmIHJlcGx5IGlzIHN1Y2Nlc3NmdWwsIERPIE5PVCBm
cmVlIHRoZSBtZXNzYWdlICovCisgaWYgKChyZXR2YWwgPSBmdXNkX2ZvcHNfcmVwbHkoZnVzZF9k
ZXYsIG1zZykpID09IDApIHsKKyB5aWVsZCA9IDE7CisgZ290byBvdXRfbm9fZnJlZTsKKyB9Cisg
YnJlYWs7CisgY2FzZSBGVVNEX0ZPUFNfTk9OQkxPQ0tfUkVQTFk6Cisgc3dpdGNoIChtc2ctPnN1
YmNtZCkgeworIGNhc2UgRlVTRF9QT0xMX0RJRkY6CisgcmV0dmFsID0gZnVzZF9wb2xsZGlmZl9y
ZXBseShmdXNkX2RldiwgbXNnKTsKKyBicmVhazsKKyBkZWZhdWx0OgorIFJERUJVRygyLCAiZnVz
ZF9mb3BzX25vbmJsb2NrIGdvdCB1bmtub3duIHN1YmNtZCAlZCIsIG1zZy0+c3ViY21kKTsKKyBy
ZXR2YWwgPSAtRUlOVkFMOworIH0KKyBicmVhazsKKyBkZWZhdWx0OgorIFJERUJVRygyLCAid2Fy
bmluZzogdW5rbm93biBtZXNzYWdlIHR5cGUgb2YgJWQgcmVjZWl2ZWQhIiwgbXNnLT5jbWQpOwor
IHJldHZhbCA9IC1FSU5WQUw7CisgZ290byBvdXQ7CisgYnJlYWs7CisgfQogCiAKICBvdXQ6Ci0g
IGlmIChtc2cgJiYgbXNnLT5kYXRhKSB7Ci0gICAgVkZSRUUobXNnLT5kYXRhKTsKLSAgICBtc2ct
PmRhdGEgPSBOVUxMOwotICB9Ci0gIGlmIChtc2cgIT0gTlVMTCkgewotICAgIEtGUkVFKG1zZyk7
Ci0gICAgbXNnID0gTlVMTDsKLSAgfQorIGlmIChtc2cgJiYgbXNnLT5kYXRhKSB7CisgVkZSRUUo
bXNnLT5kYXRhKTsKKyBtc2ctPmRhdGEgPSBOVUxMOworIH0KKyBpZiAobXNnICE9IE5VTEwpIHsK
KyBLRlJFRShtc2cpOworIG1zZyA9IE5VTEw7CisgfQogCiAgb3V0X25vX2ZyZWU6CiAKLSAgLyog
dGhlIGZ1bmN0aW9ucyB3ZSBjYWxsIGluZGljYXRlIHN1Y2Nlc3MgYnkgcmV0dXJuaW5nIDAuICB3
ZQotICAgKiBjb252ZXJ0IHRoYXQgaW50byBhIHN1Y2Nlc3MgaW5kaWNhdGlvbiBieSBjaGFuZ2lu
ZyB0aGUgcmV0dmFsIHRvCi0gICAqIHRoZSBsZW5ndGggb2YgdGhlIHdyaXRlLiAqLwotICBpZiAo
cmV0dmFsID09IDApCi0gICAgcmV0dmFsID0gdXNlcl9kYXRhX2xlbiArIHVzZXJfbXNnX2xlbjsK
LQotICBVTkxPQ0tfRlVTRF9ERVYoZnVzZF9kZXYpOwotCi0gIC8qIGlmIHdlIHN1Y2Nlc3NmdWxs
eSBjb21wbGV0ZWQgc29tZW9uZSdzIHN5c2NhbGwsIHlpZWxkIHRoZQotICAgKiBwcm9jZXNzb3Ig
dG8gdGhlbSBpbW1lZGlhdGVseSBhcyBhIHRocm91Z2hwdXQgb3B0aW1pemF0aW9uLiAgd2UKLSAg
ICogYWxzbyBob3BlIHRoYXQgaW4gdGhlIGNhc2Ugb2YgYnVsayBkYXRhIHRyYW5zZmVyLCB0aGVp
ciBuZXh0Ci0gICAqIHN5c2NhbGwgd2lsbCBjb21lIGluIGJlZm9yZSB3ZSBhcmUgc2NoZWR1bGVk
IGFnYWluLiAqLwotICBpZiAoeWllbGQpIHsKKyAvKiB0aGUgZnVuY3Rpb25zIHdlIGNhbGwgaW5k
aWNhdGUgc3VjY2VzcyBieSByZXR1cm5pbmcgMC4gd2UKKyAqIGNvbnZlcnQgdGhhdCBpbnRvIGEg
c3VjY2VzcyBpbmRpY2F0aW9uIGJ5IGNoYW5naW5nIHRoZSByZXR2YWwgdG8KKyAqIHRoZSBsZW5n
dGggb2YgdGhlIHdyaXRlLiAqLworIGlmIChyZXR2YWwgPT0gMCkKKyByZXR2YWwgPSB1c2VyX2Rh
dGFfbGVuICsgdXNlcl9tc2dfbGVuOworCisgVU5MT0NLX0ZVU0RfREVWKGZ1c2RfZGV2KTsKKwor
IC8qIGlmIHdlIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQgc29tZW9uZSdzIHN5c2NhbGwsIHlpZWxk
IHRoZQorICogcHJvY2Vzc29yIHRvIHRoZW0gaW1tZWRpYXRlbHkgYXMgYSB0aHJvdWdocHV0IG9w
dGltaXphdGlvbi4gd2UKKyAqIGFsc28gaG9wZSB0aGF0IGluIHRoZSBjYXNlIG9mIGJ1bGsgZGF0
YSB0cmFuc2ZlciwgdGhlaXIgbmV4dAorICogc3lzY2FsbCB3aWxsIGNvbWUgaW4gYmVmb3JlIHdl
IGFyZSBzY2hlZHVsZWQgYWdhaW4uICovCisgaWYgKHlpZWxkKSB7CiAjaWZkZWYgU0NIRURfWUlF
TEQKLSAgICBjdXJyZW50LT5wb2xpY3kgfD0gU0NIRURfWUlFTEQ7CisgY3VycmVudC0+cG9saWN5
IHw9IFNDSEVEX1lJRUxEOwogI2VuZGlmCi0gICAgc2NoZWR1bGUoKTsKLSAgfQorIHNjaGVkdWxl
KCk7CisgfQogCi0gIHJldHVybiByZXR2YWw7CisgcmV0dXJuIHJldHZhbDsKIAogIHpvbWJpZV9k
ZXY6CiAgaW52YWxpZF9kZXY6Ci0gIFJERUJVRygxLCAiZnVzZF9wcm9jZXNzX3dyaXRlOiBnb3Qg
aW52YWxpZCBkZXZpY2UhIik7Ci0gIHJldHVybiAtRVBJUEU7CisgUkRFQlVHKDEsICJmdXNkX3By
b2Nlc3Nfd3JpdGU6IGdvdCBpbnZhbGlkIGRldmljZSEiKTsKKyByZXR1cm4gLUVQSVBFOwogfQog
CiAKIFNUQVRJQyBzc2l6ZV90IGZ1c2Rfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCi0gICAgY29u
c3QgY2hhciAqYnVmZmVyLAotICAgIHNpemVfdCBsZW5ndGgsCi0gICAgbG9mZl90ICpvZmZzZXQp
CisgY29uc3QgY2hhciAqYnVmZmVyLAorIHNpemVfdCBsZW5ndGgsCisgbG9mZl90ICpvZmZzZXQp
CiB7Ci0gIHJldHVybiBmdXNkX3Byb2Nlc3Nfd3JpdGUoZmlsZSwgYnVmZmVyLCBsZW5ndGgsIE5V
TEwsIDApOworIHJldHVybiBmdXNkX3Byb2Nlc3Nfd3JpdGUoZmlsZSwgYnVmZmVyLCBsZW5ndGgs
IE5VTEwsIDApOwogfQogCiAKKyNpZiAwCiBTVEFUSUMgc3NpemVfdCBmdXNkX3dyaXRldihzdHJ1
Y3QgZmlsZSAqZmlsZSwKLQkJCSAgIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAotCQkJICAgdW5z
aWduZWQgbG9uZyBjb3VudCwKLQkJCSAgIGxvZmZfdCAqb2Zmc2V0KQotewotICBpZiAoY291bnQg
IT0gMikgewotICAgIFJERUJVRygyLCAiZnVzZF93cml0ZXY6IGdvdCBpbGxlZ2FsIGlvdiBjb3Vu
dCBvZiAlbGQiLCBjb3VudCk7Ci0gICAgcmV0dXJuIC1FSU5WQUw7Ci0gIH0KLQotICByZXR1cm4g
ZnVzZF9wcm9jZXNzX3dyaXRlKGZpbGUsCi0JCQkgICAgaW92WzBdLmlvdl9iYXNlLCBpb3ZbMF0u
aW92X2xlbiwKLQkJCSAgICBpb3ZbMV0uaW92X2Jhc2UsIGlvdlsxXS5pb3ZfbGVuKTsKKyBjb25z
dCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKyB1bnNpZ25lZCBsb25nIGNvdW50LAorIGxvZmZfdCAqb2Zm
c2V0KQorI2Vsc2UKK1NUQVRJQyBzc2l6ZV90IGZ1c2RfYWlvX3dyaXRlKHN0cnVjdCBraW9jYiAq
aW9jYiwKKyBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKyB1bnNpZ25lZCBsb25nIGNvdW50LAor
IGxvZmZfdCBwb3MpCisjZW5kaWYKK3sKKyBpZiAoY291bnQgIT0gMikgeworIFJERUJVRygyLCAi
ZnVzZF93cml0ZXY6IGdvdCBpbGxlZ2FsIGlvdiBjb3VudCBvZiAlbGQiLCBjb3VudCk7CisgcmV0
dXJuIC1FSU5WQUw7CisgfQorCisgcmV0dXJuIGZ1c2RfcHJvY2Vzc193cml0ZShpb2NiLT5raV9m
aWxwLAorIGlvdlswXS5pb3ZfYmFzZSwgaW92WzBdLmlvdl9sZW4sCisgaW92WzFdLmlvdl9iYXNl
LCBpb3ZbMV0uaW92X2xlbik7CiB9CiAKIApAQCAtMjMzMywyNjYgKzIzNDAsMjcwIEBACiAgKiB3
YWl0aW5nIHRvIGdvIGZyb20ga2VybmVsIHRvIHVzZXJzcGFjZS4KICAqCiAgKiBJbXBvcnRhbnQg
bm90ZTogdGhlcmUgYXJlIDIgcG9zc2libGUgcmVhZCBtb2RlczsKLSAqICAgMSkgaGVhZGVyLXJl
YWQgbW9kZTsganVzdCB0aGUgZnVzZF9tc2cgc3RydWN0dXJlIGlzIHJldHVybmVkLgorICogMSkg
aGVhZGVyLXJlYWQgbW9kZTsganVzdCB0aGUgZnVzZF9tc2cgc3RydWN0dXJlIGlzIHJldHVybmVk
LgogICoKLSAqICAgMikgZGF0YS1yZWFkIG1vZGU7IHRoZSBkYXRhIHBvcnRpb24gb2YgYSBjYWxs
IChOT1QgaW5jbHVkaW5nIHRoZQotICogICBmdXNkX21zZyBzdHJ1Y3R1cmUpIGlzIHJldHVybmVk
LgorICogMikgZGF0YS1yZWFkIG1vZGU7IHRoZSBkYXRhIHBvcnRpb24gb2YgYSBjYWxsIChOT1Qg
aW5jbHVkaW5nIHRoZQorICogZnVzZF9tc2cgc3RydWN0dXJlKSBpcyByZXR1cm5lZC4KICAqCiAg
KiBUaGUgcHJvdG9jb2wgdGhpcyBmdW5jdGlvbiBleHBlY3RzIHRoZSB1c2VyLXNwYWNlIGxpYnJh
cnkgdG8gZm9sbG93CiAgKiBpczoKLSAqICAgMSkgVXNlcnNwYWNlIGxpYnJhcnkgcmVhZHMgaGVh
ZGVyLgotICogICAyKSBJZiBmdXNkX21zZy0+ZGF0YWxlbiA9PSAwLCBnb3RvIHN0ZXAgNC4KLSAq
ICAgMykgVXNlcnNwYWNlIGxpYnJhcnkgcmVhZHMgZGF0YS4KLSAqICAgNCkgTWVzc2FnZSBnZXRz
IGRlcXVldWVkIGJ5IHRoZSBrZXJuZWwuCisgKiAxKSBVc2Vyc3BhY2UgbGlicmFyeSByZWFkcyBo
ZWFkZXIuCisgKiAyKSBJZiBmdXNkX21zZy0+ZGF0YWxlbiA9PSAwLCBnb3RvIHN0ZXAgNC4KKyAq
IDMpIFVzZXJzcGFjZSBsaWJyYXJ5IHJlYWRzIGRhdGEuCisgKiA0KSBNZXNzYWdlIGdldHMgZGVx
dWV1ZWQgYnkgdGhlIGtlcm5lbC4KICAqCi0gKiBJbiBvdGhlciB3b3JkcywgdXNlcnNwYWNlIGZp
cnN0IHJlYWRzIHRoZSBoZWFkZXIuICBUaGVuLCBpZiBhbmQKKyAqIEluIG90aGVyIHdvcmRzLCB1
c2Vyc3BhY2UgZmlyc3QgcmVhZHMgdGhlIGhlYWRlci4gVGhlbiwgaWYgYW5kCiAgKiBvbmx5IGlm
IHRoZSBoZWFkZXIgeW91IHJlYWQgaW5kaWNhdGVzIHRoYXQgZGF0YSBmb2xsb3dzLCB1c2Vyc3Bh
Y2UKICAqIGZvbGxvd3Mgd2l0aCBhIHJlYWQgZm9yIHRoYXQgZGF0YS4KICAqCiAgKiBGb3IgdGhl
IGhlYWRlciByZWFkLCB0aGUgbGVuZ3RoIHJlcXVlc3RlZCBNVVNUIGJlIHRoZSBleGFjdCBsZW5n
dGgKLSAqIHNpemVvZihmdXNkX21zZ190KS4gIFRoZSBjb3JyZXNwb25kaW5nIGRhdGEgcmVhZCBt
dXN0IHJlcXVlc3QKLSAqIGV4YWN0bHkgdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgZGF0YSBw
b3J0aW9uIG9mIHRoZSBtZXNzYWdlLiAgTk8KKyAqIHNpemVvZihmdXNkX21zZ190KS4gVGhlIGNv
cnJlc3BvbmRpbmcgZGF0YSByZWFkIG11c3QgcmVxdWVzdAorICogZXhhY3RseSB0aGUgbnVtYmVy
IG9mIGJ5dGVzIGluIHRoZSBkYXRhIHBvcnRpb24gb2YgdGhlIG1lc3NhZ2UuIE5PCiAgKiBPVEhF
UiBSRUFEIExFTkdUSFMgQVJFIEFMTE9XRUQgLSBBTEwgT1RIRVIgUkVBRCBMRU5HVEhTIFdJTEwg
R0VUIEFOCi0gKiAtRUlOVkFMLiAgVGhpcyBpcyBkb25lIGFzIGEgYmFzaWMgc2FmZXR5IG1lYXN1
cmUgdG8gbWFrZSBzdXJlIHdlJ3JlCisgKiAtRUlOVkFMLiBUaGlzIGlzIGRvbmUgYXMgYSBiYXNp
YyBzYWZldHkgbWVhc3VyZSB0byBtYWtlIHN1cmUgd2UncmUKICAqIHRhbGtpbmcgdG8gYSB1c2Vy
c3BhY2UgbGlicmFyeSB0aGF0IHVuZGVyc3RhbmRzIG91ciBwcm90b2NvbCwgYW5kCiAgKiB0byBk
ZXRlY3QgZnJhbWluZyBlcnJvcnMuCiAgKgogICogKG5vdGU6IG5vcm1hbGx5IHlvdSdkIGhhdmUg
dG8gd29ycnkgYWJvdXQgcmVlbnRyYW5jeSBpbiBhIGZ1bmN0aW9uCiAgKiBsaWtlIHRoaXMgYmVj
YXVzZSB0aGUgcHJvY2VzcyBjYW4gYmxvY2sgb24gdGhlIHVzZXJzcGFjZSBhY2Nlc3MgYW5kCi0g
KiBhbm90aGVyIG1pZ2h0IHRyeSB0byByZWFkLiAgdXN1YWxseSB3ZSB3b3VsZCBjb3B5IHRoZSBt
ZXNzYWdlIGludG8KKyAqIGFub3RoZXIgbWlnaHQgdHJ5IHRvIHJlYWQuIHVzdWFsbHkgd2Ugd291
bGQgY29weSB0aGUgbWVzc2FnZSBpbnRvCiAgKiBhIHRlbXAgbG9jYXRpb24gdG8gbWFrZSBzdXJl
IHR3byBwcm9jZXNzZXMgZG9uJ3QgZ2V0IHRoZSBzYW1lCi0gKiBtZXNzYWdlLiAgaG93ZXZlciBp
biB0aGlzIHZlcnkgc3BlY2lhbGl6ZWQgY2FzZSwgd2UncmUgb2theSwKKyAqIG1lc3NhZ2UuIGhv
d2V2ZXIgaW4gdGhpcyB2ZXJ5IHNwZWNpYWxpemVkIGNhc2UsIHdlJ3JlIG9rYXksCiAgKiBiZWNh
dXNlIGVhY2ggaW5zdGFuY2Ugb2YgL2Rldi9mdXNkIGhhcyBhIGNvbXBsZXRlbHkgaW5kZXBlbmRl
bnQKLSAqIG1lc3NhZ2UgcXVldWUuKSAgKi8KKyAqIG1lc3NhZ2UgcXVldWUuKSAqLwogCiAKIC8q
IGRvIGEgImhlYWRlciIgcmVhZDogdXNlZCBieSBmdXNkX3JlYWQgKi8KIFNUQVRJQyBpbnQgZnVz
ZF9yZWFkX2hlYWRlcihjaGFyICp1c2VyX2J1ZmZlciwgc2l6ZV90IHVzZXJfbGVuZ3RoLCBmdXNk
X21zZ190ICptc2cpCiB7Ci0gIGludCBsZW4gPSBzaXplb2YoZnVzZF9tc2dfdCk7CisgaW50IGxl
biA9IHNpemVvZihmdXNkX21zZ190KTsKIAotICBpZiAodXNlcl9sZW5ndGggIT0gbGVuKSB7Ci0g
ICAgUkRFQlVHKDQsICJiYWQgbGVuZ3RoIG9mICVkIHNlbnQgdG8gL2Rldi9mdXNkIGZvciBwZWVr
IiwgKGludCkgdXNlcl9sZW5ndGgpOwotICAgIHJldHVybiAtRUlOVkFMOwotICB9CisgaWYgKHVz
ZXJfbGVuZ3RoICE9IGxlbikgeworIFJERUJVRyg0LCAiYmFkIGxlbmd0aCBvZiAlZCBzZW50IHRv
IC9kZXYvZnVzZCBmb3IgcGVlayIsIChpbnQpIHVzZXJfbGVuZ3RoKTsKKyByZXR1cm4gLUVJTlZB
TDsKKyB9CiAKLSAgaWYgKGNvcHlfdG9fdXNlcih1c2VyX2J1ZmZlciwgbXNnLCBsZW4pKQotICAg
IHJldHVybiAtRUZBVUxUOworIGlmIChjb3B5X3RvX3VzZXIodXNlcl9idWZmZXIsIG1zZywgbGVu
KSkKKyByZXR1cm4gLUVGQVVMVDsKIAotICByZXR1cm4gc2l6ZW9mKGZ1c2RfbXNnX3QpOworIHJl
dHVybiBzaXplb2YoZnVzZF9tc2dfdCk7CiB9CiAKIAogLyogZG8gYSAiZGF0YSIgcmVhZDogdXNl
ZCBieSBmdXNkX3JlYWQgKi8KIFNUQVRJQyBpbnQgZnVzZF9yZWFkX2RhdGEoY2hhciAqdXNlcl9i
dWZmZXIsIHNpemVfdCB1c2VyX2xlbmd0aCwgZnVzZF9tc2dfdCAqbXNnKQogewotICBpbnQgbGVu
ID0gbXNnLT5kYXRhbGVuOworIGludCBsZW4gPSBtc2ctPmRhdGFsZW47CiAKLSAgaWYgKGxlbiA9
PSAwIHx8IG1zZy0+ZGF0YSA9PSBOVUxMKSB7Ci0gICAgUkRFQlVHKDEsICJmdXNkX3JlYWRfZGF0
YTogbm8gZGF0YSB0byBzZW5kISIpOwotICAgIHJldHVybiAtRUlPOwotICB9Ci0KLSAgLyogbWFr
ZSBzdXJlIHRoZSB1c2VyIGlzIHJlcXVlc3RpbmcgZXhhY3RseSB0aGUgcmlnaHQgYW1vdW50IChh
cyBhCi0gICAgIHNhbml0eSBjaGVjaykgKi8KLSAgaWYgKHVzZXJfbGVuZ3RoICE9IGxlbikgewot
ICAgIFJERUJVRyg0LCAiYmFkIHJlYWQgZm9yICVkIGJ5dGVzIG9uIC9kZXYvZnVzZCAobmVlZCAl
ZCkiLCAoaW50KSB1c2VyX2xlbmd0aCxsZW4pOwotICAgIHJldHVybiAtRUlOVkFMOwotICB9Ci0K
LSAgLyogbm93IGNvcHkgdG8gdXNlcnNwYWNlICovCi0gIGlmIChjb3B5X3RvX3VzZXIodXNlcl9i
dWZmZXIsIG1zZy0+ZGF0YSwgbGVuKSkKLSAgICByZXR1cm4gLUVGQVVMVDsKKyBpZiAobGVuID09
IDAgfHwgbXNnLT5kYXRhID09IE5VTEwpIHsKKyBSREVCVUcoMSwgImZ1c2RfcmVhZF9kYXRhOiBu
byBkYXRhIHRvIHNlbmQhIik7CisgcmV0dXJuIC1FSU87CisgfQorCisgLyogbWFrZSBzdXJlIHRo
ZSB1c2VyIGlzIHJlcXVlc3RpbmcgZXhhY3RseSB0aGUgcmlnaHQgYW1vdW50IChhcyBhCisgc2Fu
aXR5IGNoZWNrKSAqLworIGlmICh1c2VyX2xlbmd0aCAhPSBsZW4pIHsKKyBSREVCVUcoNCwgImJh
ZCByZWFkIGZvciAlZCBieXRlcyBvbiAvZGV2L2Z1c2QgKG5lZWQgJWQpIiwgKGludCkgdXNlcl9s
ZW5ndGgsbGVuKTsKKyByZXR1cm4gLUVJTlZBTDsKKyB9CisKKyAvKiBub3cgY29weSB0byB1c2Vy
c3BhY2UgKi8KKyBpZiAoY29weV90b191c2VyKHVzZXJfYnVmZmVyLCBtc2ctPmRhdGEsIGxlbikp
CisgcmV0dXJuIC1FRkFVTFQ7CiAKLSAgLyogZG9uZSEgKi8KLSAgcmV0dXJuIGxlbjsKKyAvKiBk
b25lISAqLworIHJldHVybiBsZW47CiB9CiAKIAogU1RBVElDIHNzaXplX3QgZnVzZF9yZWFkKHN0
cnVjdCBmaWxlICpmaWxlLAotICAgIGNoYXIgKnVzZXJfYnVmZmVyLCAgICAvKiBUaGUgYnVmZmVy
IHRvIGZpbGwgd2l0aCBkYXRhICovCi0gICAgc2l6ZV90IHVzZXJfbGVuZ3RoLCAgIC8qIFRoZSBs
ZW5ndGggb2YgdGhlIGJ1ZmZlciAqLwotICAgIGxvZmZfdCAqb2Zmc2V0KSAgLyogT3VyIG9mZnNl
dCBpbiB0aGUgZmlsZSAqLwotewotICBmdXNkX2Rldl90ICpmdXNkX2RldjsKLSAgZnVzZF9tc2dD
X3QgKm1zZ19vdXQ7Ci0gIGludCByZXR2YWwsIGRlcXVldWUgPSAwOwotCi0gIEdFVF9GVVNEX0RF
VihmaWxlLT5wcml2YXRlX2RhdGEsIGZ1c2RfZGV2KTsKLSAgTE9DS19GVVNEX0RFVihmdXNkX2Rl
dik7Ci0KLSAgUkRFQlVHKDE1LCAiZHJpdmVyIHBpZCAlZCAoL2Rldi8lcykgZW50ZXJpbmcgZnVz
ZF9yZWFkIiwgY3VycmVudC0+cGlkLAotCSBOQU1FKGZ1c2RfZGV2KSk7Ci0KLSAgLyogaWYgbm8g
bWVzc2FnZXMgYXJlIHdhaXRpbmcsIGVpdGhlciBibG9jayBvciByZXR1cm4gRUFHQUlOICovCi0g
IHdoaWxlICgobXNnX291dCA9IGZ1c2RfZGV2LT5tc2dfaGVhZCkgPT0gTlVMTCkgewotICAgIERF
Q0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOwotCi0gICAgaWYgKGZpbGUtPmZfZmxhZ3Mg
JiBPX05PTkJMT0NLKSB7Ci0gICAgICByZXR2YWwgPSAtRUFHQUlOOwotICAgICAgZ290byBvdXQ7
Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBzbGVlcCwgd2FpdGluZyBmb3IgYSBtZXNzYWdlIHRv
IGFycml2ZS4gIHdlIGFyZSB1bnJvbGxpbmcKLSAgICAgKiBpbnRlcnJ1cHRpYmxlX3NsZWVwX29u
IHRvIGF2b2lkIGEgcmFjZSBiZXR3ZWVuIHVubG9ja2luZyB0aGUKLSAgICAgKiBkZXZpY2UgYW5k
IHNsZWVwaW5nICh3aGF0IGlmIGEgbWVzc2FnZSBhcnJpdmVzIGluIHRoYXQKLSAgICAgKiBpbnRl
cnZhbD8pCi0gICAgICovCi0gICAgY3VycmVudC0+c3RhdGUgPSBUQVNLX0lOVEVSUlVQVElCTEU7
Ci0gICAgYWRkX3dhaXRfcXVldWUoJmZ1c2RfZGV2LT5kZXZfd2FpdCwgJndhaXQpOwotICAgIFVO
TE9DS19GVVNEX0RFVihmdXNkX2Rldik7Ci0gICAgc2NoZWR1bGUoKTsKLSAgICByZW1vdmVfd2Fp
dF9xdWV1ZSgmZnVzZF9kZXYtPmRldl93YWl0LCAmd2FpdCk7Ci0gICAgTE9DS19GVVNEX0RFVihm
dXNkX2Rldik7Ci0KLSAgICAvKiB3ZSdyZSBiYWNrIGF3YWtlISAgLS1zZWUgaWYgYSBzaWduYWwg
d29rZSB1cyB1cCAqLwotICAgIGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewotICAgICAg
cmV0dmFsID0gLUVSRVNUQVJUU1lTOwotICAgICAgZ290byBvdXQ7Ci0gICAgfQotICB9Ci0KLSAg
LyogaXMgdGhpcyBhIGhlYWRlciByZWFkIG9yIGRhdGEgcmVhZD8gKi8KLSAgaWYgKCFtc2dfb3V0
LT5wZWVrZWQpIHsKLSAgICAvKiB0aGlzIGlzIGEgaGVhZGVyIHJlYWQgKGZpcnN0IHJlYWQpICov
Ci0gICAgcmV0dmFsID0gZnVzZF9yZWFkX2hlYWRlcih1c2VyX2J1ZmZlciwgdXNlcl9sZW5ndGgs
ICZtc2dfb3V0LT5mdXNkX21zZyk7Ci0KLSAgICAvKiBpcyB0aGVyZSBkYXRhPyAgaWYgc28sIG1h
a2Ugc3VyZSBuZXh0IHJlYWQgZ2V0cyBkYXRhLiAgaWYgbm90LAotICAgICAqIG1ha2Ugc3VyZSBt
ZXNzYWdlIGlzIGRlcXVldWVkIG5vdy4qLwotICAgIGlmIChtc2dfb3V0LT5mdXNkX21zZy5kYXRh
bGVuKSB7Ci0gICAgICBtc2dfb3V0LT5wZWVrZWQgPSAxOwotICAgICAgZGVxdWV1ZSA9IDA7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgIGRlcXVldWUgPSAxOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICAv
KiB0aGlzIGlzIGEgZGF0YSByZWFkIChzZWNvbmQgcmVhZCkgKi8KLSAgICByZXR2YWwgPSBmdXNk
X3JlYWRfZGF0YSh1c2VyX2J1ZmZlciwgdXNlcl9sZW5ndGgsICZtc2dfb3V0LT5mdXNkX21zZyk7
Ci0gICAgZGVxdWV1ZSA9IDE7IC8qIG1lc3NhZ2Ugc2hvdWxkIGJlIGRlcXVldWVkICovCi0gIH0K
LQotICAvKiBpZiB0aGlzIG1lc3NhZ2UgaXMgZG9uZSwgdGFrZSBpdCBvdXQgb2YgdGhlIG91dGdv
aW5nIHF1ZXVlICovCi0gIGlmIChkZXF1ZXVlKSB7Ci0gICAgaWYgKGZ1c2RfZGV2LT5tc2dfdGFp
bCA9PSBmdXNkX2Rldi0+bXNnX2hlYWQpCi0gICAgICBmdXNkX2Rldi0+bXNnX3RhaWwgPSBmdXNk
X2Rldi0+bXNnX2hlYWQgPSBOVUxMOwotICAgIGVsc2UKLSAgICAgIGZ1c2RfZGV2LT5tc2dfaGVh
ZCA9IG1zZ19vdXQtPm5leHQ7Ci0gICAgRlJFRV9GVVNEX01TR0MobXNnX291dCk7Ci0gIH0KKyBj
aGFyICp1c2VyX2J1ZmZlciwgLyogVGhlIGJ1ZmZlciB0byBmaWxsIHdpdGggZGF0YSAqLworIHNp
emVfdCB1c2VyX2xlbmd0aCwgLyogVGhlIGxlbmd0aCBvZiB0aGUgYnVmZmVyICovCisgbG9mZl90
ICpvZmZzZXQpIC8qIE91ciBvZmZzZXQgaW4gdGhlIGZpbGUgKi8KK3sKKyBmdXNkX2Rldl90ICpm
dXNkX2RldjsKKyBmdXNkX21zZ0NfdCAqbXNnX291dDsKKyBpbnQgcmV0dmFsLCBkZXF1ZXVlID0g
MDsKKworIEdFVF9GVVNEX0RFVihmaWxlLT5wcml2YXRlX2RhdGEsIGZ1c2RfZGV2KTsKKyBMT0NL
X0ZVU0RfREVWKGZ1c2RfZGV2KTsKKworIFJERUJVRygxNSwgImRyaXZlciBwaWQgJWQgKC9kZXYv
JXMpIGVudGVyaW5nIGZ1c2RfcmVhZCIsIGN1cnJlbnQtPnBpZCwKKyBOQU1FKGZ1c2RfZGV2KSk7
CisKKyAvKiBpZiBubyBtZXNzYWdlcyBhcmUgd2FpdGluZywgZWl0aGVyIGJsb2NrIG9yIHJldHVy
biBFQUdBSU4gKi8KKyB3aGlsZSAoKG1zZ19vdXQgPSBmdXNkX2Rldi0+bXNnX2hlYWQpID09IE5V
TEwpIHsKKyBERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKKworIGlmIChmaWxlLT5m
X2ZsYWdzICYgT19OT05CTE9DSykgeworIHJldHZhbCA9IC1FQUdBSU47CisgZ290byBvdXQ7Cisg
fQorCisgLyoKKyAqIHNsZWVwLCB3YWl0aW5nIGZvciBhIG1lc3NhZ2UgdG8gYXJyaXZlLiB3ZSBh
cmUgdW5yb2xsaW5nCisgKiBpbnRlcnJ1cHRpYmxlX3NsZWVwX29uIHRvIGF2b2lkIGEgcmFjZSBi
ZXR3ZWVuIHVubG9ja2luZyB0aGUKKyAqIGRldmljZSBhbmQgc2xlZXBpbmcgKHdoYXQgaWYgYSBt
ZXNzYWdlIGFycml2ZXMgaW4gdGhhdAorICogaW50ZXJ2YWw/KQorICovCisgY3VycmVudC0+c3Rh
dGUgPSBUQVNLX0lOVEVSUlVQVElCTEU7CisgYWRkX3dhaXRfcXVldWUoJmZ1c2RfZGV2LT5kZXZf
d2FpdCwgJndhaXQpOworIFVOTE9DS19GVVNEX0RFVihmdXNkX2Rldik7Cisgc2NoZWR1bGUoKTsK
KyByZW1vdmVfd2FpdF9xdWV1ZSgmZnVzZF9kZXYtPmRldl93YWl0LCAmd2FpdCk7CisgTE9DS19G
VVNEX0RFVihmdXNkX2Rldik7CisKKyAvKiB3ZSdyZSBiYWNrIGF3YWtlISAtLXNlZSBpZiBhIHNp
Z25hbCB3b2tlIHVzIHVwICovCisgaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisgcmV0
dmFsID0gLUVSRVNUQVJUU1lTOworIGdvdG8gb3V0OworIH0KKyB9CisKKyAvKiBpcyB0aGlzIGEg
aGVhZGVyIHJlYWQgb3IgZGF0YSByZWFkPyAqLworIGlmICghbXNnX291dC0+cGVla2VkKSB7Cisg
LyogdGhpcyBpcyBhIGhlYWRlciByZWFkIChmaXJzdCByZWFkKSAqLworIHJldHZhbCA9IGZ1c2Rf
cmVhZF9oZWFkZXIodXNlcl9idWZmZXIsIHVzZXJfbGVuZ3RoLCAmbXNnX291dC0+ZnVzZF9tc2cp
OworCisgLyogaXMgdGhlcmUgZGF0YT8gaWYgc28sIG1ha2Ugc3VyZSBuZXh0IHJlYWQgZ2V0cyBk
YXRhLiBpZiBub3QsCisgKiBtYWtlIHN1cmUgbWVzc2FnZSBpcyBkZXF1ZXVlZCBub3cuKi8KKyBp
ZiAobXNnX291dC0+ZnVzZF9tc2cuZGF0YWxlbikgeworIG1zZ19vdXQtPnBlZWtlZCA9IDE7Cisg
ZGVxdWV1ZSA9IDA7CisgfSBlbHNlIHsKKyBkZXF1ZXVlID0gMTsKKyB9CisgfSBlbHNlIHsKKyAv
KiB0aGlzIGlzIGEgZGF0YSByZWFkIChzZWNvbmQgcmVhZCkgKi8KKyByZXR2YWwgPSBmdXNkX3Jl
YWRfZGF0YSh1c2VyX2J1ZmZlciwgdXNlcl9sZW5ndGgsICZtc2dfb3V0LT5mdXNkX21zZyk7Cisg
ZGVxdWV1ZSA9IDE7IC8qIG1lc3NhZ2Ugc2hvdWxkIGJlIGRlcXVldWVkICovCisgfQorCisgLyog
aWYgdGhpcyBtZXNzYWdlIGlzIGRvbmUsIHRha2UgaXQgb3V0IG9mIHRoZSBvdXRnb2luZyBxdWV1
ZSAqLworIGlmIChkZXF1ZXVlKSB7CisgaWYgKGZ1c2RfZGV2LT5tc2dfdGFpbCA9PSBmdXNkX2Rl
di0+bXNnX2hlYWQpCisgZnVzZF9kZXYtPm1zZ190YWlsID0gZnVzZF9kZXYtPm1zZ19oZWFkID0g
TlVMTDsKKyBlbHNlCisgZnVzZF9kZXYtPm1zZ19oZWFkID0gbXNnX291dC0+bmV4dDsKKyBGUkVF
X0ZVU0RfTVNHQyhtc2dfb3V0KTsKKyB9CiAKICBvdXQ6Ci0gIFVOTE9DS19GVVNEX0RFVihmdXNk
X2Rldik7Ci0gIHJldHVybiByZXR2YWw7CisgVU5MT0NLX0ZVU0RfREVWKGZ1c2RfZGV2KTsKKyBy
ZXR1cm4gcmV0dmFsOwogCiAgem9tYmllX2RldjoKICBpbnZhbGlkX2RldjoKLSAgUkRFQlVHKDIs
ICJnb3QgcmVhZCBvbiAvZGV2L2Z1c2QgZm9yIHVua25vd24gZGV2aWNlISIpOwotICByZXR1cm4g
LUVQSVBFOworIFJERUJVRygyLCAiZ290IHJlYWQgb24gL2Rldi9mdXNkIGZvciB1bmtub3duIGRl
dmljZSEiKTsKKyByZXR1cm4gLUVQSVBFOwogfQogCiAKIC8qIGEgcG9sbCBvbiAvZGV2L2Z1c2Qg
aXRzZWxmICh0aGUgY29udHJvbCBjaGFubmVsKSAqLwogU1RBVElDIHVuc2lnbmVkIGludCBmdXNk
X3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQpCiB7Ci0gIGZ1c2RfZGV2
X3QgKmZ1c2RfZGV2OwotICBHRVRfRlVTRF9ERVYoZmlsZS0+cHJpdmF0ZV9kYXRhLCBmdXNkX2Rl
dik7CisgZnVzZF9kZXZfdCAqZnVzZF9kZXY7CisgR0VUX0ZVU0RfREVWKGZpbGUtPnByaXZhdGVf
ZGF0YSwgZnVzZF9kZXYpOwogCi0gIHBvbGxfd2FpdChmaWxlLCAmZnVzZF9kZXYtPmRldl93YWl0
LCB3YWl0KTsKKyBwb2xsX3dhaXQoZmlsZSwgJmZ1c2RfZGV2LT5kZXZfd2FpdCwgd2FpdCk7CiAK
LSAgaWYgKGZ1c2RfZGV2LT5tc2dfaGVhZCAhPSBOVUxMKSB7Ci0gICAgcmV0dXJuIFBPTExJTiB8
IFBPTExSRE5PUk07Ci0gIH0KKyBpZiAoZnVzZF9kZXYtPm1zZ19oZWFkICE9IE5VTEwpIHsKKyBy
ZXR1cm4gUE9MTElOIHwgUE9MTFJETk9STTsKKyB9CiAKICBpbnZhbGlkX2RldjoKLSAgcmV0dXJu
IDA7CisgcmV0dXJuIDA7CiB9CiAKIAogU1RBVElDIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZnVz
ZF9mb3BzID0gewotICBvd25lcjogICAgVEhJU19NT0RVTEUsCi0gIG9wZW46ICAgICBmdXNkX29w
ZW4sCi0gIHJlYWQ6ICAgICBmdXNkX3JlYWQsCi0gIHdyaXRlOiAgICBmdXNkX3dyaXRlLAotICB3
cml0ZXY6ICAgZnVzZF93cml0ZXYsCi0gIHJlbGVhc2U6ICBmdXNkX3JlbGVhc2UsCi0gIHBvbGw6
ICAgICBmdXNkX3BvbGwsCisgb3duZXI6IFRISVNfTU9EVUxFLAorIG9wZW46IGZ1c2Rfb3BlbiwK
KyByZWFkOiBmdXNkX3JlYWQsCisgd3JpdGU6IGZ1c2Rfd3JpdGUsCisjaWYgMAorIHdyaXRldjog
ZnVzZF93cml0ZXYsCisjZWxzZQorIGFpb193cml0ZTpmdXNkX2Fpb193cml0ZSwKKyNlbmRpZgor
IHJlbGVhc2U6IGZ1c2RfcmVsZWFzZSwKKyBwb2xsOiBmdXNkX3BvbGwsCiB9OwotICAKKwogCiAK
IC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqLwogCiB0eXBlZGVmIHN0cnVjdCBmdXNkX3N0YXR1c19zdGF0ZSB7
Ci0gIGludCBiaW5hcnlfc3RhdHVzOwotICBpbnQgbmVlZF9uZXdfc3RhdHVzOwotICBjaGFyICpj
dXJyX3N0YXR1czsKLSAgaW50IGN1cnJfc3RhdHVzX2xlbjsKLSAgaW50IGxhc3RfdmVyc2lvbl9z
ZWVuOworIGludCBiaW5hcnlfc3RhdHVzOworIGludCBuZWVkX25ld19zdGF0dXM7CisgY2hhciAq
Y3Vycl9zdGF0dXM7CisgaW50IGN1cnJfc3RhdHVzX2xlbjsKKyBpbnQgbGFzdF92ZXJzaW9uX3Nl
ZW47CiB9IGZ1c2Rfc3RhdGNvbnRleHRfdDsKIAogLyogb3BlbigpIGNhbGxlZCBvbiAvZGV2L2Z1
c2Qvc3RhdHVzICovCiBTVEFUSUMgaW50IGZ1c2Rfc3RhdHVzX29wZW4oc3RydWN0IGlub2RlICpp
bm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0gIGludCBlcnJvciA9IDA7Ci0gIGZ1c2Rfc3Rh
dGNvbnRleHRfdCAqZnM7CisgaW50IGVycm9yID0gMDsKKyBmdXNkX3N0YXRjb250ZXh0X3QgKmZz
OwogCi0gIC8vTU9EX0lOQ19VU0VfQ09VTlQ7CisgLy9NT0RfSU5DX1VTRV9DT1VOVDsKIAotICBp
ZiAoKGZzID0gS01BTExPQyhzaXplb2YoZnVzZF9zdGF0Y29udGV4dF90KSwgR0ZQX0tFUk5FTCkp
ID09IE5VTEwpIHsKLSAgICBSREVCVUcoMSwgInlpa2VzISAga2VybmVsIGNhbid0IGFsbG9jYXRl
IG1lbW9yeSIpOwotICAgIGVycm9yID0gLUVOT01FTTsKLSAgICBnb3RvIG91dDsKLSAgfQotCi0g
IG1lbXNldChmcywgMCwgc2l6ZW9mKGZ1c2Rfc3RhdGNvbnRleHRfdCkpOwotICBmcy0+bmVlZF9u
ZXdfc3RhdHVzID0gMTsKLSAgZmlsZS0+cHJpdmF0ZV9kYXRhID0gKHZvaWQgKikgZnM7CisgaWYg
KChmcyA9IEtNQUxMT0Moc2l6ZW9mKGZ1c2Rfc3RhdGNvbnRleHRfdCksIEdGUF9LRVJORUwpKSA9
PSBOVUxMKSB7CisgUkRFQlVHKDEsICJ5aWtlcyEga2VybmVsIGNhbid0IGFsbG9jYXRlIG1lbW9y
eSIpOworIGVycm9yID0gLUVOT01FTTsKKyBnb3RvIG91dDsKKyB9CisKKyBtZW1zZXQoZnMsIDAs
IHNpemVvZihmdXNkX3N0YXRjb250ZXh0X3QpKTsKKyBmcy0+bmVlZF9uZXdfc3RhdHVzID0gMTsK
KyBmaWxlLT5wcml2YXRlX2RhdGEgPSAodm9pZCAqKSBmczsKIAogIG91dDoKLSAgLy9pZiAoZXJy
b3IpCi0gIC8vICBNT0RfREVDX1VTRV9DT1VOVDsKLSAgcmV0dXJuIGVycm9yOworIC8vaWYgKGVy
cm9yKQorIC8vIE1PRF9ERUNfVVNFX0NPVU5UOworIHJldHVybiBlcnJvcjsKIH0KIAogLyogY2xv
c2Ugb24gL2Rldi9mdXNkX3N0YXR1cyAqLwogU1RBVElDIGludCBmdXNkX3N0YXR1c19yZWxlYXNl
KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotICBmdXNkX3N0YXRj
b250ZXh0X3QgKmZzID0gKGZ1c2Rfc3RhdGNvbnRleHRfdCAqKSBmaWxlLT5wcml2YXRlX2RhdGE7
CisgZnVzZF9zdGF0Y29udGV4dF90ICpmcyA9IChmdXNkX3N0YXRjb250ZXh0X3QgKikgZmlsZS0+
cHJpdmF0ZV9kYXRhOwogCi0gIGlmIChmcykgewotICAgIGlmIChmcy0+Y3Vycl9zdGF0dXMpCi0g
ICAgICBLRlJFRShmcy0+Y3Vycl9zdGF0dXMpOwotICAgIEtGUkVFKGZzKTsKLSAgfQorIGlmIChm
cykgeworIGlmIChmcy0+Y3Vycl9zdGF0dXMpCisgS0ZSRUUoZnMtPmN1cnJfc3RhdHVzKTsKKyBL
RlJFRShmcyk7CisgfQogCi0gIC8vTU9EX0RFQ19VU0VfQ09VTlQ7Ci0gIHJldHVybiAwOworIC8v
TU9EX0RFQ19VU0VfQ09VTlQ7CisgcmV0dXJuIDA7CiB9CiAKIAogLyogaW9jdGwoKSBvbiAvZGV2
L2Z1c2Qvc3RhdHVzICovCiBTVEFUSUMgaW50IGZ1c2Rfc3RhdHVzX2lvY3RsKHN0cnVjdCBpbm9k
ZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAotCQkJCSB1bnNpZ25lZCBpbnQgY21kLCB1bnNp
Z25lZCBsb25nIGFyZykKKyB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsK
LSAgZnVzZF9zdGF0Y29udGV4dF90ICpmcyA9IChmdXNkX3N0YXRjb250ZXh0X3QgKikgZmlsZS0+
cHJpdmF0ZV9kYXRhOworIGZ1c2Rfc3RhdGNvbnRleHRfdCAqZnMgPSAoZnVzZF9zdGF0Y29udGV4
dF90ICopIGZpbGUtPnByaXZhdGVfZGF0YTsKIAotICBpZiAoIWZzKQotICAgIHJldHVybiAtRUlP
OworIGlmICghZnMpCisgcmV0dXJuIC1FSU87CiAKLSAgc3dpdGNoIChjbWQpIHsKLSAgY2FzZSBG
VVNEX1NUQVRVU19VU0VfQklOQVJZOgotICAgIGZzLT5iaW5hcnlfc3RhdHVzID0gMTsKLSAgICBy
ZXR1cm4gMDsKLSAgZGVmYXVsdDoKLSAgICByZXR1cm4gLUVJTlZBTDsKLSAgICBicmVhazsKLSAg
fQorIHN3aXRjaCAoY21kKSB7CisgY2FzZSBGVVNEX1NUQVRVU19VU0VfQklOQVJZOgorIGZzLT5i
aW5hcnlfc3RhdHVzID0gMTsKKyByZXR1cm4gMDsKKyBkZWZhdWx0OgorIHJldHVybiAtRUlOVkFM
OworIGJyZWFrOworIH0KIH0KIAogCiAvKgotICogbWF5YmVfZXhwYW5kX2J1ZmZlcjogZXhwYW5k
IGEgYnVmZmVyIGV4cG9uZW50aWFsbHkgYXMgaXQgZmlsbHMuICBXZQorICogbWF5YmVfZXhwYW5k
X2J1ZmZlcjogZXhwYW5kIGEgYnVmZmVyIGV4cG9uZW50aWFsbHkgYXMgaXQgZmlsbHMuIFdlCiAg
KiBhcmUgZ2l2ZW46CiAgKgogICogLSBBIHJlZmVyZW5jZSB0byBhIHBvaW50ZXIgdG8gYSBidWZm
ZXIgKGJ1ZikKQEAgLTI2MDEsMjYgKzI2MTIsMjYgQEAKICAqIC0gVGhlIGFtb3VudCBvZiBzcGFj
ZSB3ZSB3YW50IHRvIGVuc3VyZSBpcyBmcmVlIGluIHRoZSBidWZmZXIgKHNwYWNlX25lZWRlZCkK
ICAqCiAgKiBJZiB0aGVyZSBpc24ndCBhdCBsZWFzdCBzcGFjZV9uZWVkZWQgZGlmZmVyZW5jZSBi
ZXR3ZWVuIGJ1Zl9zaXplCi0gKiBhbmQgbGVuLCB0aGUgZXhpc3RpbmcgY29udGVudHMgYXJlIG1v
dmVkIGludG8gYSBsYXJnZXIgYnVmZmVyLiAKKyAqIGFuZCBsZW4sIHRoZSBleGlzdGluZyBjb250
ZW50cyBhcmUgbW92ZWQgaW50byBhIGxhcmdlciBidWZmZXIuCiAgKi8KIFNUQVRJQyBpbnQgbWF5
YmVfZXhwYW5kX2J1ZmZlcihjaGFyICoqYnVmLCBpbnQgKmJ1Zl9zaXplLCBpbnQgbGVuLAotCQkJ
ICAgICAgIGludCBzcGFjZV9uZWVkZWQpCisgaW50IHNwYWNlX25lZWRlZCkKIHsKLSAgaWYgKCpi
dWZfc2l6ZSAtIGxlbiA8IHNwYWNlX25lZWRlZCkgewotICAgIGNoYXIgKm9sZF9idWYgPSAqYnVm
OworIGlmICgqYnVmX3NpemUgLSBsZW4gPCBzcGFjZV9uZWVkZWQpIHsKKyBjaGFyICpvbGRfYnVm
ID0gKmJ1ZjsKIAotICAgICpidWZfc2l6ZSAqPSAyOwotICAgICpidWYgPSBLTUFMTE9DKCpidWZf
c2l6ZSwgR0ZQX0tFUk5FTCk7CisgKmJ1Zl9zaXplICo9IDI7CisgKmJ1ZiA9IEtNQUxMT0MoKmJ1
Zl9zaXplLCBHRlBfS0VSTkVMKTsKIAotICAgIGlmICgqYnVmICE9IE5VTEwpCi0gICAgICBtZW1t
b3ZlKCpidWYsIG9sZF9idWYsIGxlbik7Ci0gICAgS0ZSRUUob2xkX2J1Zik7Ci0gICAgaWYgKCpi
dWYgPT0gTlVMTCkgewotICAgICAgUkRFQlVHKDEsICJvdXQgb2YgbWVtb3J5ISIpOwotICAgICAg
cmV0dXJuIC0xOwotICAgIH0KLSAgfQotICByZXR1cm4gMDsKKyBpZiAoKmJ1ZiAhPSBOVUxMKQor
IG1lbW1vdmUoKmJ1Ziwgb2xkX2J1ZiwgbGVuKTsKKyBLRlJFRShvbGRfYnVmKTsKKyBpZiAoKmJ1
ZiA9PSBOVUxMKSB7CisgUkRFQlVHKDEsICJvdXQgb2YgbWVtb3J5ISIpOworIHJldHVybiAtMTsK
KyB9CisgfQorIHJldHVybiAwOwogfQogCiAKQEAgLTI2MjgsMzQ1ICsyNjM5LDM0NyBAQAogLyog
QnVpbGQgYSB0ZXh0IGJ1ZmZlciBjb250YWluaW5nIGN1cnJlbnQgZnVzZCBzdGF0dXMuICovCiBT
VEFUSUMgdm9pZCBmdXNkX3N0YXR1c19idWlsZF90ZXh0KGZ1c2Rfc3RhdGNvbnRleHRfdCAqZnMp
CiB7Ci0gIGludCBidWZfc2l6ZSA9IDUxMjsKLSAgY2hhciAqYnVmID0gS01BTExPQyhidWZfc2l6
ZSwgR0ZQX0tFUk5FTCk7Ci0gIGludCBsZW4gPSAwLCB0b3RhbF9jbGllbnRzID0gMCwgdG90YWxf
ZmlsZXMgPSAwOwotICBzdHJ1Y3QgbGlzdF9oZWFkICp0bXA7Ci0KLSAgaWYgKGJ1ZiA9PSBOVUxM
KSB7Ci0gICAgUkRFQlVHKDEsICJmdXNkX3N0YXR1c19idWlsZDogb3V0IG9mIG1lbW9yeSEiKTsK
LSAgICByZXR1cm47Ci0gIH0KLQotICBsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBidWZfc2l6
ZSAtIGxlbiwKLQkJICAiICBQSUQgIE9wZW4gTmFtZVxuIgotCQkgICItLS0tLS0gLS0tLSAtLS0t
LS0tLS0tLS0tLS0tLVxuIik7Ci0KLSAgZG93bigmZnVzZF9kZXZsaXN0X3NlbSk7Ci0gIGxpc3Rf
Zm9yX2VhY2godG1wLCAmZnVzZF9kZXZsaXN0X2hlYWQpIHsKLSAgICBmdXNkX2Rldl90ICpkID0g
bGlzdF9lbnRyeSh0bXAsIGZ1c2RfZGV2X3QsIGRldmxpc3QpOwotCi0gICAgaWYgKCFkKQotICAg
ICAgY29udGludWU7Ci0KLSAgICAvKiBQb3NzaWJseSBleHBhbmQgdGhlIGJ1ZmZlciBpZiB3ZSBu
ZWVkIG1vcmUgc3BhY2UgKi8KLSAgICBpZiAobWF5YmVfZXhwYW5kX2J1ZmZlcigmYnVmLCAmYnVm
X3NpemUsIGxlbiwgRlVTRF9NQVhfTkFNRV9MRU5HVEgrMTIwKSA8IDApCi0gICAgICBnb3RvIG91
dDsKLQotICAgIGxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIGJ1Zl9zaXplIC0gbGVuLAotCQkg
ICAgIiU2ZCAlNGQgJXMlc1xuIiwgZC0+cGlkLCBkLT5udW1fZmlsZXMsCi0JCSAgICBkLT56b21i
aWUgPyAiPHpvbWJpZT4iIDogIiIsIE5BTUUoZCkpOwotCi0gICAgdG90YWxfZmlsZXMrKzsKLSAg
ICB0b3RhbF9jbGllbnRzICs9IGQtPm51bV9maWxlczsKLSAgfQotCi0gIGxlbiArPSBzbnByaW50
ZihidWYgKyBsZW4sIGJ1Zl9zaXplIC0gbGVuLAotCQkgICJcbkZVU0QgJFJldmlzaW9uOiAxLjk3
LWtvci1oYWNrZWQtMTEgJCAtICVkIGRldmljZXMgdXNlZCBieSAlZCBjbGllbnRzXG4iLAotCQkg
IHRvdGFsX2ZpbGVzLCB0b3RhbF9jbGllbnRzKTsKKyBpbnQgYnVmX3NpemUgPSA1MTI7CisgY2hh
ciAqYnVmID0gS01BTExPQyhidWZfc2l6ZSwgR0ZQX0tFUk5FTCk7CisgaW50IGxlbiA9IDAsIHRv
dGFsX2NsaWVudHMgPSAwLCB0b3RhbF9maWxlcyA9IDA7Cisgc3RydWN0IGxpc3RfaGVhZCAqdG1w
OworCisgaWYgKGJ1ZiA9PSBOVUxMKSB7CisgUkRFQlVHKDEsICJmdXNkX3N0YXR1c19idWlsZDog
b3V0IG9mIG1lbW9yeSEiKTsKKyByZXR1cm47CisgfQorCisgbGVuICs9IHNucHJpbnRmKGJ1ZiAr
IGxlbiwgYnVmX3NpemUgLSBsZW4sCisgIiBQSUQgT3BlbiBOYW1lXG4iCisgIi0tLS0tLSAtLS0t
IC0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKworIGRvd24oJmZ1c2RfZGV2bGlzdF9zZW0pOworIGxp
c3RfZm9yX2VhY2godG1wLCAmZnVzZF9kZXZsaXN0X2hlYWQpIHsKKyBmdXNkX2Rldl90ICpkID0g
bGlzdF9lbnRyeSh0bXAsIGZ1c2RfZGV2X3QsIGRldmxpc3QpOworCisgaWYgKCFkKQorIGNvbnRp
bnVlOworCisgLyogUG9zc2libHkgZXhwYW5kIHRoZSBidWZmZXIgaWYgd2UgbmVlZCBtb3JlIHNw
YWNlICovCisgaWYgKG1heWJlX2V4cGFuZF9idWZmZXIoJmJ1ZiwgJmJ1Zl9zaXplLCBsZW4sIEZV
U0RfTUFYX05BTUVfTEVOR1RIKzEyMCkgPCAwKQorIGdvdG8gb3V0OworCisgbGVuICs9IHNucHJp
bnRmKGJ1ZiArIGxlbiwgYnVmX3NpemUgLSBsZW4sCisgIiU2ZCAlNGQgJXMlc1xuIiwgZC0+cGlk
LCBkLT5udW1fZmlsZXMsCisgZC0+em9tYmllID8gIjx6b21iaWU+IiA6ICIiLCBOQU1FKGQpKTsK
KworIHRvdGFsX2ZpbGVzKys7CisgdG90YWxfY2xpZW50cyArPSBkLT5udW1fZmlsZXM7CisgfQor
CisgbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgYnVmX3NpemUgLSBsZW4sCisgIlxuRlVTRCAk
UmV2aXNpb246IDEuOTcta29yLWhhY2tlZC0xMSAkIC0gJWQgZGV2aWNlcyB1c2VkIGJ5ICVkIGNs
aWVudHNcbiIsCisgdG90YWxfZmlsZXMsIHRvdGFsX2NsaWVudHMpOwogCiAgb3V0OgotICBmcy0+
bGFzdF92ZXJzaW9uX3NlZW4gPSBsYXN0X3ZlcnNpb247Ci0gIHVwKCZmdXNkX2Rldmxpc3Rfc2Vt
KTsKKyBmcy0+bGFzdF92ZXJzaW9uX3NlZW4gPSBsYXN0X3ZlcnNpb247CisgdXAoJmZ1c2RfZGV2
bGlzdF9zZW0pOwogCi0gIGlmIChmcy0+Y3Vycl9zdGF0dXMpCi0gICAgS0ZSRUUoZnMtPmN1cnJf
c3RhdHVzKTsKKyBpZiAoZnMtPmN1cnJfc3RhdHVzKQorIEtGUkVFKGZzLT5jdXJyX3N0YXR1cyk7
CiAKLSAgZnMtPmN1cnJfc3RhdHVzID0gYnVmOwotICBmcy0+Y3Vycl9zdGF0dXNfbGVuID0gbGVu
OwotICBmcy0+bmVlZF9uZXdfc3RhdHVzID0gMDsKKyBmcy0+Y3Vycl9zdGF0dXMgPSBidWY7Cisg
ZnMtPmN1cnJfc3RhdHVzX2xlbiA9IGxlbjsKKyBmcy0+bmVlZF9uZXdfc3RhdHVzID0gMDsKIH0K
IAogCiAvKiBCdWlsZCB0aGUgYmluYXJ5IHZlcnNpb24gb2Ygc3RhdHVzICovCiBTVEFUSUMgdm9p
ZCBmdXNkX3N0YXR1c19idWlsZF9iaW5hcnkoZnVzZF9zdGF0Y29udGV4dF90ICpmcykKIHsKLSAg
aW50IGJ1Zl9zaXplID0gNTEyOwotICBjaGFyICpidWYgPSBLTUFMTE9DKGJ1Zl9zaXplLCBHRlBf
S0VSTkVMKTsKLSAgaW50IGxlbiA9IDAsIGkgPSAwOwotICBzdHJ1Y3QgbGlzdF9oZWFkICp0bXA7
Ci0gIGZ1c2Rfc3RhdHVzX3QgKnM7Ci0KLSAgaWYgKGJ1ZiA9PSBOVUxMKSB7Ci0gICAgUkRFQlVH
KDEsICJvdXQgb2YgbWVtb3J5ISIpOwotICAgIHJldHVybjsKLSAgfQotCi0gIGRvd24oJmZ1c2Rf
ZGV2bGlzdF9zZW0pOwotICBsaXN0X2Zvcl9lYWNoKHRtcCwgJmZ1c2RfZGV2bGlzdF9oZWFkKSB7
Ci0gICAgZnVzZF9kZXZfdCAqZCA9IGxpc3RfZW50cnkodG1wLCBmdXNkX2Rldl90LCBkZXZsaXN0
KTsKLQotICAgIGlmICghZCkKLSAgICAgIGNvbnRpbnVlOwotCi0gICAgLyogUG9zc2libHkgZXhw
YW5kIHRoZSBidWZmZXIgaWYgd2UgbmVlZCBtb3JlIHNwYWNlICovCi0gICAgaWYgKG1heWJlX2V4
cGFuZF9idWZmZXIoJmJ1ZiwgJmJ1Zl9zaXplLCBsZW4sIHNpemVvZihmdXNkX3N0YXR1c190KSkg
PCAwKQotICAgICAgZ290byBvdXQ7Ci0KLSAgICBzID0gJigoZnVzZF9zdGF0dXNfdCAqKSBidWYp
W2ldOwotCi0gICAgLyogY29uc3RydWN0IHRoaXMgc3RhdHVzIGVudHJ5ICovCi0gICAgbWVtc2V0
KHMsIDAsIHNpemVvZihmdXNkX3N0YXR1c190KSk7Ci0gICAgc3RybmNweShzLT5uYW1lLCBOQU1F
KGQpLCBGVVNEX01BWF9OQU1FX0xFTkdUSCk7Ci0gICAgcy0+em9tYmllICAgPSBkLT56b21iaWU7
Ci0gICAgcy0+cGlkICAgICAgPSBkLT5waWQ7Ci0gICAgcy0+bnVtX29wZW4gPSBkLT5udW1fZmls
ZXM7Ci0KLSAgICBpKys7Ci0gICAgbGVuICs9IHNpemVvZihmdXNkX3N0YXR1c190KTsKLSAgfQot
ICAKKyBpbnQgYnVmX3NpemUgPSA1MTI7CisgY2hhciAqYnVmID0gS01BTExPQyhidWZfc2l6ZSwg
R0ZQX0tFUk5FTCk7CisgaW50IGxlbiA9IDAsIGkgPSAwOworIHN0cnVjdCBsaXN0X2hlYWQgKnRt
cDsKKyBmdXNkX3N0YXR1c190ICpzOworCisgaWYgKGJ1ZiA9PSBOVUxMKSB7CisgUkRFQlVHKDEs
ICJvdXQgb2YgbWVtb3J5ISIpOworIHJldHVybjsKKyB9CisKKyBkb3duKCZmdXNkX2Rldmxpc3Rf
c2VtKTsKKyBsaXN0X2Zvcl9lYWNoKHRtcCwgJmZ1c2RfZGV2bGlzdF9oZWFkKSB7CisgZnVzZF9k
ZXZfdCAqZCA9IGxpc3RfZW50cnkodG1wLCBmdXNkX2Rldl90LCBkZXZsaXN0KTsKKworIGlmICgh
ZCkKKyBjb250aW51ZTsKKworIC8qIFBvc3NpYmx5IGV4cGFuZCB0aGUgYnVmZmVyIGlmIHdlIG5l
ZWQgbW9yZSBzcGFjZSAqLworIGlmIChtYXliZV9leHBhbmRfYnVmZmVyKCZidWYsICZidWZfc2l6
ZSwgbGVuLCBzaXplb2YoZnVzZF9zdGF0dXNfdCkpIDwgMCkKKyBnb3RvIG91dDsKKworIHMgPSAm
KChmdXNkX3N0YXR1c190ICopIGJ1ZilbaV07CisKKyAvKiBjb25zdHJ1Y3QgdGhpcyBzdGF0dXMg
ZW50cnkgKi8KKyBtZW1zZXQocywgMCwgc2l6ZW9mKGZ1c2Rfc3RhdHVzX3QpKTsKKyBzdHJuY3B5
KHMtPm5hbWUsIE5BTUUoZCksIEZVU0RfTUFYX05BTUVfTEVOR1RIKTsKKyBzLT56b21iaWUgPSBk
LT56b21iaWU7Cisgcy0+cGlkID0gZC0+cGlkOworIHMtPm51bV9vcGVuID0gZC0+bnVtX2ZpbGVz
OworCisgaSsrOworIGxlbiArPSBzaXplb2YoZnVzZF9zdGF0dXNfdCk7CisgfQorCiAgb3V0Ogot
ICBmcy0+bGFzdF92ZXJzaW9uX3NlZW4gPSBsYXN0X3ZlcnNpb247Ci0gIHVwKCZmdXNkX2Rldmxp
c3Rfc2VtKTsKKyBmcy0+bGFzdF92ZXJzaW9uX3NlZW4gPSBsYXN0X3ZlcnNpb247CisgdXAoJmZ1
c2RfZGV2bGlzdF9zZW0pOwogCi0gIGlmIChmcy0+Y3Vycl9zdGF0dXMpCi0gICAgS0ZSRUUoZnMt
PmN1cnJfc3RhdHVzKTsKKyBpZiAoZnMtPmN1cnJfc3RhdHVzKQorIEtGUkVFKGZzLT5jdXJyX3N0
YXR1cyk7CiAKLSAgZnMtPmN1cnJfc3RhdHVzID0gYnVmOwotICBmcy0+Y3Vycl9zdGF0dXNfbGVu
ID0gbGVuOwotICBmcy0+bmVlZF9uZXdfc3RhdHVzID0gMDsKKyBmcy0+Y3Vycl9zdGF0dXMgPSBi
dWY7CisgZnMtPmN1cnJfc3RhdHVzX2xlbiA9IGxlbjsKKyBmcy0+bmVlZF9uZXdfc3RhdHVzID0g
MDsKIH0KIAogCiAKIFNUQVRJQyBzc2l6ZV90IGZ1c2Rfc3RhdHVzX3JlYWQoc3RydWN0IGZpbGUg
KmZpbGUsCi0gICAgY2hhciAqdXNlcl9idWZmZXIsICAgIC8qIFRoZSBidWZmZXIgdG8gZmlsbCB3
aXRoIGRhdGEgKi8KLSAgICBzaXplX3QgdXNlcl9sZW5ndGgsICAgLyogVGhlIGxlbmd0aCBvZiB0
aGUgYnVmZmVyICovCi0gICAgbG9mZl90ICpvZmZzZXQpICAvKiBPdXIgb2Zmc2V0IGluIHRoZSBm
aWxlICovCi17Ci0gIGZ1c2Rfc3RhdGNvbnRleHRfdCAqZnMgPSAoZnVzZF9zdGF0Y29udGV4dF90
ICopIGZpbGUtPnByaXZhdGVfZGF0YTsKLQotICBpZiAoIWZzKQotICAgIHJldHVybiAtRUlPOwot
Ci0gIC8qIGNyZWF0ZSBhIG5ldyBzdGF0dXMgcGFnZSwgaWYgd2UgYXJlbid0IGluIHRoZSBtaWRk
bGUgb2Ygb25lICovCi0gIGlmIChmcy0+bmVlZF9uZXdfc3RhdHVzKSB7Ci0gICAgaWYgKGZzLT5i
aW5hcnlfc3RhdHVzKQotICAgICAgZnVzZF9zdGF0dXNfYnVpbGRfYmluYXJ5KGZzKTsKLSAgICBl
bHNlCi0gICAgICBmdXNkX3N0YXR1c19idWlsZF90ZXh0KGZzKTsKLSAgfQotCi0gIC8qIHJldHVy
biBFT0YgaWYgd2UncmUgYXQgdGhlIGVuZCAqLwotICBpZiAoZnMtPmN1cnJfc3RhdHVzID09IE5V
TEwgfHwgZnMtPmN1cnJfc3RhdHVzX2xlbiA9PSAwKSB7Ci0gICAgZnMtPm5lZWRfbmV3X3N0YXR1
cyA9IDE7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLQotICAvKiByZXR1cm4gb25seSBhcyBtdWNoIGRh
dGEgYXMgd2UgaGF2ZSAqLwotICBpZiAoZnMtPmN1cnJfc3RhdHVzX2xlbiA8IHVzZXJfbGVuZ3Ro
KQotICAgIHVzZXJfbGVuZ3RoID0gZnMtPmN1cnJfc3RhdHVzX2xlbjsKLSAgaWYgKGNvcHlfdG9f
dXNlcih1c2VyX2J1ZmZlciwgZnMtPmN1cnJfc3RhdHVzLCB1c2VyX2xlbmd0aCkpCi0gICAgcmV0
dXJuIC1FRkFVTFQ7Ci0KLSAgLyogdXBkYXRlIGZzLCBzbyB3ZSBkb24ndCByZXR1cm4gdGhlIHNh
bWUgZGF0YSBuZXh0IHRpbWUgKi8KLSAgZnMtPmN1cnJfc3RhdHVzX2xlbiAtPSB1c2VyX2xlbmd0
aDsKLSAgaWYgKGZzLT5jdXJyX3N0YXR1c19sZW4pCi0gICAgbWVtbW92ZShmcy0+Y3Vycl9zdGF0
dXMsIGZzLT5jdXJyX3N0YXR1cyArIHVzZXJfbGVuZ3RoLCBmcy0+Y3Vycl9zdGF0dXNfbGVuKTsK
LSAgZWxzZSB7Ci0gICAgS0ZSRUUoZnMtPmN1cnJfc3RhdHVzKTsKLSAgICBmcy0+Y3Vycl9zdGF0
dXMgPSBOVUxMOwotICB9CisgY2hhciAqdXNlcl9idWZmZXIsIC8qIFRoZSBidWZmZXIgdG8gZmls
bCB3aXRoIGRhdGEgKi8KKyBzaXplX3QgdXNlcl9sZW5ndGgsIC8qIFRoZSBsZW5ndGggb2YgdGhl
IGJ1ZmZlciAqLworIGxvZmZfdCAqb2Zmc2V0KSAvKiBPdXIgb2Zmc2V0IGluIHRoZSBmaWxlICov
Cit7CisgZnVzZF9zdGF0Y29udGV4dF90ICpmcyA9IChmdXNkX3N0YXRjb250ZXh0X3QgKikgZmls
ZS0+cHJpdmF0ZV9kYXRhOworCisgaWYgKCFmcykKKyByZXR1cm4gLUVJTzsKKworIC8qIGNyZWF0
ZSBhIG5ldyBzdGF0dXMgcGFnZSwgaWYgd2UgYXJlbid0IGluIHRoZSBtaWRkbGUgb2Ygb25lICov
CisgaWYgKGZzLT5uZWVkX25ld19zdGF0dXMpIHsKKyBpZiAoZnMtPmJpbmFyeV9zdGF0dXMpCisg
ZnVzZF9zdGF0dXNfYnVpbGRfYmluYXJ5KGZzKTsKKyBlbHNlCisgZnVzZF9zdGF0dXNfYnVpbGRf
dGV4dChmcyk7CisgfQorCisgLyogcmV0dXJuIEVPRiBpZiB3ZSdyZSBhdCB0aGUgZW5kICovCisg
aWYgKGZzLT5jdXJyX3N0YXR1cyA9PSBOVUxMIHx8IGZzLT5jdXJyX3N0YXR1c19sZW4gPT0gMCkg
eworIGZzLT5uZWVkX25ld19zdGF0dXMgPSAxOworIHJldHVybiAwOworIH0KKworIC8qIHJldHVy
biBvbmx5IGFzIG11Y2ggZGF0YSBhcyB3ZSBoYXZlICovCisgaWYgKGZzLT5jdXJyX3N0YXR1c19s
ZW4gPCB1c2VyX2xlbmd0aCkKKyB1c2VyX2xlbmd0aCA9IGZzLT5jdXJyX3N0YXR1c19sZW47Cisg
aWYgKGNvcHlfdG9fdXNlcih1c2VyX2J1ZmZlciwgZnMtPmN1cnJfc3RhdHVzLCB1c2VyX2xlbmd0
aCkpCisgcmV0dXJuIC1FRkFVTFQ7CisKKyAvKiB1cGRhdGUgZnMsIHNvIHdlIGRvbid0IHJldHVy
biB0aGUgc2FtZSBkYXRhIG5leHQgdGltZSAqLworIGZzLT5jdXJyX3N0YXR1c19sZW4gLT0gdXNl
cl9sZW5ndGg7CisgaWYgKGZzLT5jdXJyX3N0YXR1c19sZW4pCisgbWVtbW92ZShmcy0+Y3Vycl9z
dGF0dXMsIGZzLT5jdXJyX3N0YXR1cyArIHVzZXJfbGVuZ3RoLCBmcy0+Y3Vycl9zdGF0dXNfbGVu
KTsKKyBlbHNlIHsKKyBLRlJFRShmcy0+Y3Vycl9zdGF0dXMpOworIGZzLT5jdXJyX3N0YXR1cyA9
IE5VTEw7CisgfQogCi0gIHJldHVybiB1c2VyX2xlbmd0aDsKKyByZXR1cm4gdXNlcl9sZW5ndGg7
CiB9CiAKIAogLyogYSBwb2xsIG9uIC9kZXYvZnVzZCBpdHNlbGYgKHRoZSBjb250cm9sIGNoYW5u
ZWwpICovCiBTVEFUSUMgdW5zaWduZWQgaW50IGZ1c2Rfc3RhdHVzX3BvbGwoc3RydWN0IGZpbGUg
KmZpbGUsIHBvbGxfdGFibGUgKndhaXQpCiB7Ci0gIGZ1c2Rfc3RhdGNvbnRleHRfdCAqZnMgPSAo
ZnVzZF9zdGF0Y29udGV4dF90ICopIGZpbGUtPnByaXZhdGVfZGF0YTsKKyBmdXNkX3N0YXRjb250
ZXh0X3QgKmZzID0gKGZ1c2Rfc3RhdGNvbnRleHRfdCAqKSBmaWxlLT5wcml2YXRlX2RhdGE7CiAK
LSAgcG9sbF93YWl0KGZpbGUsICZuZXdfZGV2aWNlX3dhaXQsIHdhaXQpOworIHBvbGxfd2FpdChm
aWxlLCAmbmV3X2RldmljZV93YWl0LCB3YWl0KTsKIAotICBpZiAoZnMtPmxhc3RfdmVyc2lvbl9z
ZWVuIDwgbGFzdF92ZXJzaW9uKQotICAgIHJldHVybiBQT0xMSU4gfCBQT0xMUkROT1JNOwotICBl
bHNlCi0gICAgcmV0dXJuIDA7CisgaWYgKGZzLT5sYXN0X3ZlcnNpb25fc2VlbiA8IGxhc3RfdmVy
c2lvbikKKyByZXR1cm4gUE9MTElOIHwgUE9MTFJETk9STTsKKyBlbHNlCisgcmV0dXJuIDA7CiB9
CiAKIAogU1RBVElDIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZnVzZF9zdGF0dXNfZm9wcyA9IHsK
LSAgb3duZXI6ICAgIFRISVNfTU9EVUxFLAotICBvcGVuOiAgICAgZnVzZF9zdGF0dXNfb3BlbiwK
LSAgaW9jdGw6ICAgIGZ1c2Rfc3RhdHVzX2lvY3RsLAotICByZWFkOiAgICAgZnVzZF9zdGF0dXNf
cmVhZCwKLSAgcmVsZWFzZTogIGZ1c2Rfc3RhdHVzX3JlbGVhc2UsCi0gIHBvbGw6ICAgICBmdXNk
X3N0YXR1c19wb2xsLAorIG93bmVyOiBUSElTX01PRFVMRSwKKyBvcGVuOiBmdXNkX3N0YXR1c19v
cGVuLAorIGlvY3RsOiBmdXNkX3N0YXR1c19pb2N0bCwKKyByZWFkOiBmdXNkX3N0YXR1c19yZWFk
LAorIHJlbGVhc2U6IGZ1c2Rfc3RhdHVzX3JlbGVhc2UsCisgcG9sbDogZnVzZF9zdGF0dXNfcG9s
bCwKIH07Ci0gIAorCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKIFNUQVRJQyBpbnQgaW5pdF9m
dXNkKHZvaWQpCiB7Ci0JaW50IHJldHZhbDsKKyBpbnQgcmV0dmFsOwogCiAjaWZkZWYgQ09ORklH
X0ZVU0RfTUVNREVCVUcKLSAgaWYgKChyZXR2YWwgPSBmdXNkX21lbV9pbml0KCkpIDwgMCkKLSAg
ICByZXR1cm4gcmV0dmFsOworIGlmICgocmV0dmFsID0gZnVzZF9tZW1faW5pdCgpKSA8IDApCisg
cmV0dXJuIHJldHZhbDsKICNlbmRpZgogCiAKLSAgcHJpbnRrKEtFUk5fSU5GTwotCSAiZnVzZDog
c3RhcnRpbmcsICRSZXZpc2lvbjogMS45Ny1rb3ItaGFja2VkLTExICQsICREYXRlOiAyMDAzLzA3
LzExIDIyOjI5OjM5ICQiKTsKKyBwcmludGsoS0VSTl9JTkZPCisgImZ1c2Q6IHN0YXJ0aW5nLCAk
UmV2aXNpb246IDEuOTcta29yLWhhY2tlZC0xMSAkLCAkRGF0ZTogMjAwMy8wNy8xMSAyMjoyOToz
OSAkIik7CiAjaWZkZWYgQ1ZTVEFHCi0gIHByaW50aygiLCByZWxlYXNlICVzIiwgQ1ZTVEFHKTsK
KyBwcmludGsoIiwgcmVsZWFzZSAlcyIsIENWU1RBRyk7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdf
RlVTRF9ERUJVRwotICBwcmludGsoIiwgZGVidWdsZXZlbD0lZFxuIiwgZnVzZF9kZWJ1Z19sZXZl
bCk7CisgcHJpbnRrKCIsIGRlYnVnbGV2ZWw9JWRcbiIsIGZ1c2RfZGVidWdfbGV2ZWwpOwogI2Vs
c2UKLSAgcHJpbnRrKCIsIGRlYnVnZ2luZyBtZXNzYWdlcyBkaXNhYmxlZFxuIik7CisgcHJpbnRr
KCIsIGRlYnVnZ2luZyBtZXNzYWdlcyBkaXNhYmxlZFxuIik7CiAjZW5kaWYKIAotCWZ1c2RfY29u
dHJvbF9kZXZpY2UgPSBOVUxMOwotCWZ1c2Rfc3RhdHVzX2RldmljZSA9IE5VTEw7Ci0JCi0JZnVz
ZF9jbGFzcyA9IGNsYXNzX2NyZWF0ZShUSElTX01PRFVMRSwgImZ1c2QiKTsKLQlpZihJU19FUlIo
ZnVzZF9jbGFzcykpCi0JewotCQlyZXR2YWwgPSBQVFJfRVJSKGZ1c2RfY2xhc3MpOwotCQlwcmlu
dGsoImNsYXNzX2NyZWF0ZSBmYWlsZWQgc3RhdHVzOiAlZFxuIiwgcmV0dmFsKTsKLQkJZ290byBm
YWlsMDsKLQl9Ci0JCi0JY29udHJvbF9pZCA9IDA7Ci0KLQlpZigocmV0dmFsID0gYWxsb2NfY2hy
ZGV2X3JlZ2lvbigmY29udHJvbF9pZCwgMCwgMSwgRlVTRF9DT05UUk9MX0ZJTEVOQU1FKSkgPCAw
KQotCXsKLQkJcHJpbnRrKCJhbGxvY19jaHJkZXZfcmVnaW9uIGZhaWxlZCBzdGF0dXM6ICVkXG4i
LCByZXR2YWwpOwotCQlnb3RvIGZhaWwxOwotCX0KKyBmdXNkX2NvbnRyb2xfZGV2aWNlID0gTlVM
TDsKKyBmdXNkX3N0YXR1c19kZXZpY2UgPSBOVUxMOworCisgZnVzZF9jbGFzcyA9IGNsYXNzX2Ny
ZWF0ZShUSElTX01PRFVMRSwgImZ1c2QiKTsKKyBpZihJU19FUlIoZnVzZF9jbGFzcykpCisgewor
IHJldHZhbCA9IFBUUl9FUlIoZnVzZF9jbGFzcyk7CisgcHJpbnRrKCJjbGFzc19jcmVhdGUgZmFp
bGVkIHN0YXR1czogJWRcbiIsIHJldHZhbCk7CisgZ290byBmYWlsMDsKKyB9CisKKyBjb250cm9s
X2lkID0gMDsKKworIGlmKChyZXR2YWwgPSBhbGxvY19jaHJkZXZfcmVnaW9uKCZjb250cm9sX2lk
LCAwLCAxLCBGVVNEX0NPTlRST0xfRklMRU5BTUUpKSA8IDApCisgeworIHByaW50aygiYWxsb2Nf
Y2hyZGV2X3JlZ2lvbiBmYWlsZWQgc3RhdHVzOiAlZFxuIiwgcmV0dmFsKTsKKyBnb3RvIGZhaWwx
OworIH0KICNpZmRlZiBDT05GSUdfREVWRlNfRlMKLQlpZigocmV0dmFsID0gZGV2ZnNfbWtfY2Rl
dihjb250cm9sX2lkLCBTX0lGQ0hSIHwgMDY2NiwgRlVTRF9DT05UUk9MX0ZJTEVOQU1FKSkgPCAw
KQotCXsKLQkJcHJpbnRrKCJkZXZmc19ta19jZGV2IGZhaWxlZCBzdGF0dXM6ICVkXG4iLCByZXR2
YWwpOwotCQlnb3RvIGZhaWwyOwotCX0KLSNlbmRpZgotCi0JZnVzZF9jb250cm9sX2RldmljZSA9
IGNkZXZfYWxsb2MoKTsKLQlpZihmdXNkX2NvbnRyb2xfZGV2aWNlID09IE5VTEwpCi0JewotCQly
ZXR2YWwgPSAtRU5PTUVNOwotCQlnb3RvIGZhaWwzOwotCX0KLQotCWZ1c2RfY29udHJvbF9kZXZp
Y2UtPm93bmVyID0gVEhJU19NT0RVTEU7Ci0JZnVzZF9jb250cm9sX2RldmljZS0+b3BzID0gJmZ1
c2RfZm9wczsKLQlrb2JqZWN0X3NldF9uYW1lKCZmdXNkX2NvbnRyb2xfZGV2aWNlLT5rb2JqLCBG
VVNEX0NPTlRST0xfRklMRU5BTUUpOwotCi0JcHJpbnRrKCJjZGV2IGNvbnRyb2wgaWQ6ICVkXG4i
LCBjb250cm9sX2lkKTsKLQlpZigocmV0dmFsID0gY2Rldl9hZGQoZnVzZF9jb250cm9sX2Rldmlj
ZSwgY29udHJvbF9pZCwgMSkpIDwgMCkKLQl7Ci0JCXByaW50aygiY2Rldl9hZGQgZmFpbGVkIHN0
YXR1czogJWRcbiIsIHJldHZhbCk7Ci0JCWtvYmplY3RfcHV0KCZmdXNkX2NvbnRyb2xfZGV2aWNl
LT5rb2JqKTsKLQkJZ290byBmYWlsNDsKLQl9Ci0JCi0JZnVzZF9jb250cm9sX2NsYXNzX2Rldmlj
ZSA9IENMQVNTX0RFVklDRV9DUkVBVEUoZnVzZF9jbGFzcywgTlVMTCwgY29udHJvbF9pZCwgTlVM
TCwgImNvbnRyb2wiKTsKLQlpZihmdXNkX2NvbnRyb2xfY2xhc3NfZGV2aWNlID09IE5VTEwpCi0J
ewotCQlyZXR2YWwgPSBQVFJfRVJSKGZ1c2RfY29udHJvbF9jbGFzc19kZXZpY2UpOwotCQlwcmlu
dGsoImNsYXNzX2RldmljZV9jcmVhdGUgZmFpbGVkIHN0YXR1czogJWRcbiIsIHJldHZhbCk7Ci0J
CWdvdG8gZmFpbDU7Ci0JfQotCi0Jc3RhdHVzX2lkID0gMDsKLQotCWlmKChyZXR2YWwgPSBhbGxv
Y19jaHJkZXZfcmVnaW9uKCZzdGF0dXNfaWQsIDAsIDEsIEZVU0RfU1RBVFVTX0ZJTEVOQU1FKSkg
PCAwKQotCXsKLQkJcHJpbnRrKCJhbGxvY19jaHJkZXZfcmVnaW9uIGZhaWxlZCBzdGF0dXM6ICVk
XG4iLCByZXR2YWwpOwotCQlnb3RvIGZhaWw2OwotCX0KKyBpZigocmV0dmFsID0gZGV2ZnNfbWtf
Y2Rldihjb250cm9sX2lkLCBTX0lGQ0hSIHwgMDY2NiwgRlVTRF9DT05UUk9MX0ZJTEVOQU1FKSkg
PCAwKQorIHsKKyBwcmludGsoImRldmZzX21rX2NkZXYgZmFpbGVkIHN0YXR1czogJWRcbiIsIHJl
dHZhbCk7CisgZ290byBmYWlsMjsKKyB9CisjZW5kaWYKKworIGZ1c2RfY29udHJvbF9kZXZpY2Ug
PSBjZGV2X2FsbG9jKCk7CisgaWYoZnVzZF9jb250cm9sX2RldmljZSA9PSBOVUxMKQorIHsKKyBy
ZXR2YWwgPSAtRU5PTUVNOworIGdvdG8gZmFpbDM7CisgfQorCisgZnVzZF9jb250cm9sX2Rldmlj
ZS0+b3duZXIgPSBUSElTX01PRFVMRTsKKyBmdXNkX2NvbnRyb2xfZGV2aWNlLT5vcHMgPSAmZnVz
ZF9mb3BzOworIGtvYmplY3Rfc2V0X25hbWUoJmZ1c2RfY29udHJvbF9kZXZpY2UtPmtvYmosIEZV
U0RfQ09OVFJPTF9GSUxFTkFNRSk7CisKKyBwcmludGsoImNkZXYgY29udHJvbCBpZDogJWRcbiIs
IGNvbnRyb2xfaWQpOworIGlmKChyZXR2YWwgPSBjZGV2X2FkZChmdXNkX2NvbnRyb2xfZGV2aWNl
LCBjb250cm9sX2lkLCAxKSkgPCAwKQorIHsKKyBwcmludGsoImNkZXZfYWRkIGZhaWxlZCBzdGF0
dXM6ICVkXG4iLCByZXR2YWwpOworIGtvYmplY3RfcHV0KCZmdXNkX2NvbnRyb2xfZGV2aWNlLT5r
b2JqKTsKKyBnb3RvIGZhaWw0OworIH0KKworIGZ1c2RfY29udHJvbF9jbGFzc19kZXZpY2UgPSBD
TEFTU19ERVZJQ0VfQ1JFQVRFKGZ1c2RfY2xhc3MsIE5VTEwsIGNvbnRyb2xfaWQsIE5VTEwsICJj
b250cm9sIik7CisgaWYoZnVzZF9jb250cm9sX2NsYXNzX2RldmljZSA9PSBOVUxMKQorIHsKKyBy
ZXR2YWwgPSBQVFJfRVJSKGZ1c2RfY29udHJvbF9jbGFzc19kZXZpY2UpOworIHByaW50aygiY2xh
c3NfZGV2aWNlX2NyZWF0ZSBmYWlsZWQgc3RhdHVzOiAlZFxuIiwgcmV0dmFsKTsKKyBnb3RvIGZh
aWw1OworIH0KKworIHN0YXR1c19pZCA9IDA7CisKKyBpZigocmV0dmFsID0gYWxsb2NfY2hyZGV2
X3JlZ2lvbigmc3RhdHVzX2lkLCAwLCAxLCBGVVNEX1NUQVRVU19GSUxFTkFNRSkpIDwgMCkKKyB7
CisgcHJpbnRrKCJhbGxvY19jaHJkZXZfcmVnaW9uIGZhaWxlZCBzdGF0dXM6ICVkXG4iLCByZXR2
YWwpOworIGdvdG8gZmFpbDY7CisgfQogI2lmZGVmIENPTkZJR19ERVZGU19GUwotCWlmKChyZXR2
YWwgPSBkZXZmc19ta19jZGV2KHN0YXR1c19pZCwgU19JRkNIUiB8IDA2NjYsIEZVU0RfU1RBVFVT
X0ZJTEVOQU1FKSkgPCAwKQotCXsKLQkJcHJpbnRrKCJkZXZmc19ta19jZGV2IGZhaWxlZCBzdGF0
dXM6ICVkXG4iLCByZXR2YWwpOwotCQlnb3RvIGZhaWw3OwotCX0KLSNlbmRpZgotCi0JZnVzZF9z
dGF0dXNfZGV2aWNlID0gY2Rldl9hbGxvYygpOwotCWlmKGZ1c2Rfc3RhdHVzX2RldmljZSA9PSBO
VUxMKQotCXsKLQkJcmV0dmFsID0gLUVOT01FTTsKLQkJZ290byBmYWlsODsKLQl9Ci0KLQlmdXNk
X3N0YXR1c19kZXZpY2UtPm93bmVyID0gVEhJU19NT0RVTEU7Ci0JZnVzZF9zdGF0dXNfZGV2aWNl
LT5vcHMgPSAmZnVzZF9zdGF0dXNfZm9wczsKLQlrb2JqZWN0X3NldF9uYW1lKCZmdXNkX3N0YXR1
c19kZXZpY2UtPmtvYmosIEZVU0RfU1RBVFVTX0ZJTEVOQU1FKTsKLQotCWlmKChyZXR2YWwgPSBj
ZGV2X2FkZChmdXNkX3N0YXR1c19kZXZpY2UsIHN0YXR1c19pZCwgMSkpIDwgMCkKLQl7Ci0JCXBy
aW50aygiY2Rldl9hZGQgZmFpbGVkIHN0YXR1czogJWRcbiIsIHJldHZhbCk7Ci0JCWtvYmplY3Rf
cHV0KCZmdXNkX3N0YXR1c19kZXZpY2UtPmtvYmopOwotCQlnb3RvIGZhaWw5OwotCX0KLQkKLQlm
dXNkX3N0YXR1c19jbGFzc19kZXZpY2UgPSBDTEFTU19ERVZJQ0VfQ1JFQVRFKGZ1c2RfY2xhc3Ms
IE5VTEwsIHN0YXR1c19pZCwgTlVMTCwgInN0YXR1cyIpOwotCWlmKGZ1c2Rfc3RhdHVzX2NsYXNz
X2RldmljZSA9PSBOVUxMKQotCXsKLQkJcHJpbnRrKCJjbGFzc19kZXZpY2VfY3JlYXRlIGZhaWxl
ZCBzdGF0dXM6ICVkXG4iLCByZXR2YWwpOwotCQlyZXR2YWwgPSBQVFJfRVJSKGZ1c2Rfc3RhdHVz
X2NsYXNzX2RldmljZSk7Ci0JCWdvdG8gZmFpbDEwOwotCX0KLQkKLSAgUkRFQlVHKDEsICJyZWdp
c3RyYXRpb24gc3VjY2Vzc2Z1bCIpOwotICByZXR1cm4gMDsKKyBpZigocmV0dmFsID0gZGV2ZnNf
bWtfY2RldihzdGF0dXNfaWQsIFNfSUZDSFIgfCAwNjY2LCBGVVNEX1NUQVRVU19GSUxFTkFNRSkp
IDwgMCkKKyB7CisgcHJpbnRrKCJkZXZmc19ta19jZGV2IGZhaWxlZCBzdGF0dXM6ICVkXG4iLCBy
ZXR2YWwpOworIGdvdG8gZmFpbDc7CisgfQorI2VuZGlmCisKKyBmdXNkX3N0YXR1c19kZXZpY2Ug
PSBjZGV2X2FsbG9jKCk7CisgaWYoZnVzZF9zdGF0dXNfZGV2aWNlID09IE5VTEwpCisgeworIHJl
dHZhbCA9IC1FTk9NRU07CisgZ290byBmYWlsODsKKyB9CisKKyBmdXNkX3N0YXR1c19kZXZpY2Ut
Pm93bmVyID0gVEhJU19NT0RVTEU7CisgZnVzZF9zdGF0dXNfZGV2aWNlLT5vcHMgPSAmZnVzZF9z
dGF0dXNfZm9wczsKKyBrb2JqZWN0X3NldF9uYW1lKCZmdXNkX3N0YXR1c19kZXZpY2UtPmtvYmos
IEZVU0RfU1RBVFVTX0ZJTEVOQU1FKTsKKworIGlmKChyZXR2YWwgPSBjZGV2X2FkZChmdXNkX3N0
YXR1c19kZXZpY2UsIHN0YXR1c19pZCwgMSkpIDwgMCkKKyB7CisgcHJpbnRrKCJjZGV2X2FkZCBm
YWlsZWQgc3RhdHVzOiAlZFxuIiwgcmV0dmFsKTsKKyBrb2JqZWN0X3B1dCgmZnVzZF9zdGF0dXNf
ZGV2aWNlLT5rb2JqKTsKKyBnb3RvIGZhaWw5OworIH0KKworIGZ1c2Rfc3RhdHVzX2NsYXNzX2Rl
dmljZSA9IENMQVNTX0RFVklDRV9DUkVBVEUoZnVzZF9jbGFzcywgTlVMTCwgc3RhdHVzX2lkLCBO
VUxMLCAic3RhdHVzIik7CisgaWYoZnVzZF9zdGF0dXNfY2xhc3NfZGV2aWNlID09IE5VTEwpCisg
eworIHByaW50aygiY2xhc3NfZGV2aWNlX2NyZWF0ZSBmYWlsZWQgc3RhdHVzOiAlZFxuIiwgcmV0
dmFsKTsKKyByZXR2YWwgPSBQVFJfRVJSKGZ1c2Rfc3RhdHVzX2NsYXNzX2RldmljZSk7CisgZ290
byBmYWlsMTA7CisgfQorCisgUkRFQlVHKDEsICJyZWdpc3RyYXRpb24gc3VjY2Vzc2Z1bCIpOwor
IHJldHVybiAwOwogCiBmYWlsMTA6Ci0JY2Rldl9kZWwoZnVzZF9zdGF0dXNfZGV2aWNlKTsKKyBj
ZGV2X2RlbChmdXNkX3N0YXR1c19kZXZpY2UpOwogZmFpbDk6Ci0Ja2ZyZWUoZnVzZF9zdGF0dXNf
ZGV2aWNlKTsKKyBrZnJlZShmdXNkX3N0YXR1c19kZXZpY2UpOwogZmFpbDg6CiAjaWZkZWYgQ09O
RklHX0RFVkZTX0ZTCi0JZGV2ZnNfcmVtb3ZlKEZVU0RfU1RBVFVTX0ZJTEVOQU1FKTsKKyBkZXZm
c19yZW1vdmUoRlVTRF9TVEFUVVNfRklMRU5BTUUpOwogI2VuZGlmCi1mYWlsNzoKLQl1bnJlZ2lz
dGVyX2NocmRldl9yZWdpb24oc3RhdHVzX2lkLCAxKTsKKy8qZmFpbDc6Ki8KKyB1bnJlZ2lzdGVy
X2NocmRldl9yZWdpb24oc3RhdHVzX2lkLCAxKTsKIGZhaWw2OgotCWNsYXNzX2RldmljZV9kZXN0
cm95KGZ1c2RfY2xhc3MsIGNvbnRyb2xfaWQpOworIGNsYXNzX2RldmljZV9kZXN0cm95KGZ1c2Rf
Y2xhc3MsIGNvbnRyb2xfaWQpOwogZmFpbDU6Ci0JY2Rldl9kZWwoZnVzZF9jb250cm9sX2Rldmlj
ZSk7CisgY2Rldl9kZWwoZnVzZF9jb250cm9sX2RldmljZSk7CiBmYWlsNDoKLQlrZnJlZShmdXNk
X2NvbnRyb2xfZGV2aWNlKTsKKyBrZnJlZShmdXNkX2NvbnRyb2xfZGV2aWNlKTsKIGZhaWwzOgog
I2lmZGVmIENPTkZJR19ERVZGU19GUwotCWRldmZzX3JlbW92ZShGVVNEX0NPTlRST0xfRklMRU5B
TUUpOworIGRldmZzX3JlbW92ZShGVVNEX0NPTlRST0xfRklMRU5BTUUpOwogI2VuZGlmCi1mYWls
MjoKLQl1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24oY29udHJvbF9pZCwgMSk7CisvKmZhaWwyOiov
CisgdW5yZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKGNvbnRyb2xfaWQsIDEpOwogCiBmYWlsMToKLQlj
bGFzc19kZXN0cm95KGZ1c2RfY2xhc3MpOworIGNsYXNzX2Rlc3Ryb3koZnVzZF9jbGFzcyk7CiBm
YWlsMDoKLQlyZXR1cm4gcmV0dmFsOworIHJldHVybiByZXR2YWw7CiB9CiAKIFNUQVRJQyB2b2lk
IGNsZWFudXBfZnVzZCh2b2lkKQogewotICBSREVCVUcoMSwgImNsZWFuaW5nIHVwIik7CisgUkRF
QlVHKDEsICJjbGVhbmluZyB1cCIpOwogCi0JY2xhc3NfZGV2aWNlX2Rlc3Ryb3koZnVzZF9jbGFz
cywgc3RhdHVzX2lkKTsKLQljbGFzc19kZXZpY2VfZGVzdHJveShmdXNkX2NsYXNzLCBjb250cm9s
X2lkKTsKLQkKLQljZGV2X2RlbChmdXNkX2NvbnRyb2xfZGV2aWNlKTsKLQljZGV2X2RlbChmdXNk
X3N0YXR1c19kZXZpY2UpOworIGNsYXNzX2RldmljZV9kZXN0cm95KGZ1c2RfY2xhc3MsIHN0YXR1
c19pZCk7CisgY2xhc3NfZGV2aWNlX2Rlc3Ryb3koZnVzZF9jbGFzcywgY29udHJvbF9pZCk7CiAK
LSAgZGV2ZnNfcmVtb3ZlKEZVU0RfQ09OVFJPTF9GSUxFTkFNRSk7Ci0gIGRldmZzX3JlbW92ZShG
VVNEX1NUQVRVU19GSUxFTkFNRSk7CisgY2Rldl9kZWwoZnVzZF9jb250cm9sX2RldmljZSk7Cisg
Y2Rldl9kZWwoZnVzZF9zdGF0dXNfZGV2aWNlKTsKIAorI2lmZGVmIENPTkZJR19ERVZGU19GUwor
IGRldmZzX3JlbW92ZShGVVNEX0NPTlRST0xfRklMRU5BTUUpOworIGRldmZzX3JlbW92ZShGVVNE
X1NUQVRVU19GSUxFTkFNRSk7CisjZW5kaWYKKworIGNsYXNzX2Rlc3Ryb3koZnVzZF9jbGFzcyk7
CiAKLQljbGFzc19kZXN0cm95KGZ1c2RfY2xhc3MpOwotCQogI2lmZGVmIENPTkZJR19GVVNEX01F
TURFQlVHCi0gIGZ1c2RfbWVtX2NsZWFudXAoKTsKKyBmdXNkX21lbV9jbGVhbnVwKCk7CiAjZW5k
aWYKIH0KIAogbW9kdWxlX2luaXQoaW5pdF9mdXNkKTsKIG1vZHVsZV9leGl0KGNsZWFudXBfZnVz
ZCk7CisK
</data>        

          </attachment>
    </bug>

</bugzilla>