<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>5747</bug_id>
          
          <creation_ts>2005-11-15 00:16:58 -0800</creation_ts>
          <short_desc>KCPathData needs to be redesigned</short_desc>
          <delta_ts>2005-12-05 17:25:15 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>SVG</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P4</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Eric Seidel (no email)">eric</assigned_to>
          <cc>rwlbuis</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>24090</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-11-15 00:16:58 -0800</bug_when>
    <thetext>KCPathData needs to be redesigned

Currently in KCanvas, there is this strange KCPathData class, which I think exists only for AGG support (in 
linux), since linux renderers may not have their own path structures.  In CG, we&apos;d really like to use 
CGPaths, even if they are wrapped in some other structure.  We&apos;d like to re-work KCanvas to have 
KCPathData abstracted so that it can be a real CGpath on our platform, and whatever else on KDE.  This 
would make converting between the two, transparent (and get rid of the need for 2 types of path data in 
KCanvas)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>25568</commentid>
    <comment_count>1</comment_count>
      <attachid>4963</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-12-05 06:09:24 -0800</bug_when>
    <thetext>Created attachment 4963
replace KCPathDataList &amp; KCanvasUserData with KCanvasPath (abstract)

This patch removes the previous *two* path representations in KCanvas/KSVG2 and
replaces them with a single improved path representation: KCanvasPath. 
KCanvasPath is an abstract class, (KCanvasPathQuartz concrete implementation)
which are vended from the appropriate KRenderingDevice
(QPainter::renderingDevice() in our implementation).  This dramatically
simplifies path handling code and is a major improvement in KCanvas design.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>25569</commentid>
    <comment_count>2</comment_count>
      <attachid>4963</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-12-05 06:12:19 -0800</bug_when>
    <thetext>Comment on attachment 4963
replace KCPathDataList &amp; KCanvasUserData with KCanvasPath (abstract)

See comments in the bug.  This is a pretty straightforward patch.  I welcome
anyone to give it a go.  There are a couple things you will see here:

1.  Removing KCanvasUserData and KCPathData/KCPathDataList, instead replacing
them with KCanvasPath*.

2.  Several places where I renamed &quot;list&quot; to &quot;path&quot; and change . access to -&gt;.

3.  Flat-out removal of several unneeded methods from KRenderingDeviceQuartz,
KCanvasCreator, KCanvasMatrix.

4.  Minor adjustments to the rest of the code to use the new KCanvasPath type.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>25594</commentid>
    <comment_count>3</comment_count>
      <attachid>4963</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-12-05 14:51:35 -0800</bug_when>
    <thetext>Comment on attachment 4963
replace KCPathDataList &amp; KCanvasUserData with KCanvasPath (abstract)

Actually, I have a slightly better patch I&apos;ll post.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>25596</commentid>
    <comment_count>4</comment_count>
      <attachid>4976</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-12-05 14:56:11 -0800</bug_when>
    <thetext>Created attachment 4976
Slightly improved KCanvasPath fix (now with bonus ChangeLog!)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>25597</commentid>
    <comment_count>5</comment_count>
      <attachid>4976</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-12-05 14:56:41 -0800</bug_when>
    <thetext>Comment on attachment 4976
Slightly improved KCanvasPath fix (now with bonus ChangeLog!)

See previous comments in the bug for more information.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>25606</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-12-05 17:25:15 -0800</bug_when>
    <thetext>KDE will want to pick this up.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>4963</attachid>
            <date>2005-12-05 06:09:24 -0800</date>
            <delta_ts>2005-12-05 14:56:11 -0800</delta_ts>
            <desc>replace KCPathDataList &amp; KCanvasUserData with KCanvasPath (abstract)</desc>
            <filename>kcanvaspath.patch</filename>
            <type>text/plain</type>
            <size>64606</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2os
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNTAKZGlmZiAtcCAtdSAtcjEuNTAgV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCi0tLSBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJNCBEZWMgMjAwNSAxMjo0MzowOCAtMDAwMAkxLjUwCisrKyBXZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJNSBEZWMgMjAwNSAxNDowNjo1NSAtMDAwMApAQCAtMTIzOCw2ICsxMjM4
LDggQEAKIAkJQTg5MERGMjIwOTMwOTc0ODAwNTEzRjg4IC8qIFNWR1N0eWxlZExvY2F0YWJsZUVs
ZW1lbnRJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE4OTBERjFFMDkzMDk3NDgwMDUxM0Y4OCAvKiBTVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50
SW1wbC5jcHAgKi87IH07CiAJCUE4OThGMTQ3MDg4MTIxRTkwMDc1RUZCMiAvKiBodG1sZmFjdG9y
eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNFRjM0
MzMwODdCNTYzRTAwQkJGODMzIC8qIGh0bWxmYWN0b3J5LmggKi87IH07CiAJCUE4OThGMTQ4MDg4
MTIxRUQwMDc1RUZCMiAvKiBodG1sZmFjdG9yeS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0VGMzQzMjA4N0I1NjNFMDBCQkY4MzMgLyogaHRtbGZh
Y3RvcnkuY3BwICovOyB9OworCQlBOEFCQzk5QjA5NDQ1RUMwMDAxMzk0NUYgLyogS0NhbnZhc1Bh
dGhRdWFydHouaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE4QUJDOTk5MDk0NDVFQzAwMDEzOTQ1RiAvKiBLQ2FudmFzUGF0aFF1YXJ0ei5oICovOyB9Owor
CQlBOEFCQzk5QzA5NDQ1RUMwMDAxMzk0NUYgLyogS0NhbnZhc1BhdGhRdWFydHoubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEFCQzk5QTA5NDQ1RUMw
MDAxMzk0NUYgLyogS0NhbnZhc1BhdGhRdWFydHoubW0gKi87IH07CiAJCUE4QkE1QzcwMDkwQ0Iw
NzcwMDREMTE4MCAvKiByZW5kZXJfYnV0dG9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNDIwMzVBMDhGQzMzNDEwMEI3ODJFMCAvKiByZW5kZXJf
YnV0dG9uLmNwcCAqLzsgfTsKIAkJQThCQTVDNzEwOTBDQjA3QTAwNEQxMTgwIC8qIHJlbmRlcl9h
cmVuYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODMy
NTU3QzMwNjFFMzE3MjAwN0I4MDU0IC8qIHJlbmRlcl9hcmVuYS5oICovOyB9OwogCQlBOEJBNUM3
MjA5MENCMDdBMDA0RDExODAgLyogcmVuZGVyX2J1dHRvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM0MjAzNUIwOEZDMzM0MTAwQjc4MkUwIC8qIHJl
bmRlcl9idXR0b24uaCAqLzsgfTsKQEAgLTIyMTQsNiArMjIxNiw4IEBACiAJCUE4OTBERjFDMDkz
MDk3NDgwMDUxM0Y4OCAvKiBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudEltcGwuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHU3R5bGVkVHJhbnNmb3JtYWJs
ZUVsZW1lbnRJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTg5MERGMUQw
OTMwOTc0ODAwNTEzRjg4IC8qIFNWR1N0eWxlZExvY2F0YWJsZUVsZW1lbnRJbXBsLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1N0eWxlZExvY2F0YWJsZUVsZW1lbnRJbXBs
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4OTBERjFFMDkzMDk3NDgwMDUxM0Y4
OCAvKiBTVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50SW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50SW1wbC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE4QUJDOTk5MDk0NDVFQzAwMDEzOTQ1RiAvKiBL
Q2FudmFzUGF0aFF1YXJ0ei5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBLQ2Fu
dmFzUGF0aFF1YXJ0ei5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBOEFCQzk5QTA5
NDQ1RUMwMDAxMzk0NUYgLyogS0NhbnZhc1BhdGhRdWFydHoubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBLQ2FudmFzUGF0aFF1YXJ0ei5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQThDMEY2REQwODk3MDFGMTAwQkE1MTE0IC8qIERyYXdDYW52YXNJ
dGVtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERyYXdDYW52YXNJdGVtLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QzBGNkRFMDg5NzAxRjEwMEJBNTExNCAv
KiBEcmF3Q2FudmFzSXRlbS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IERyYXdDYW52YXNJdGVtLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEMw
RjZERjA4OTcwMUYxMDBCQTUxMTQgLyogRHJhd0NhbnZhc0l0ZW1Qcml2YXRlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERyYXdDYW52YXNJdGVtUHJpdmF0ZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzk5Nyw2ICs0MDAxLDggQEAKIAkJCQlBOEMwRkI3NTA4
OTcwMUY4MDBCQTUxMTQgLyogS1JlbmRlcmluZ1BhaW50U2VydmVyUXVhcnR6Lm1tICovLAogCQkJ
CUE4QzBGQjc2MDg5NzAxRjgwMEJBNTExNCAvKiBRdWFydHpTdXBwb3J0LmggKi8sCiAJCQkJQThD
MEZCNzcwODk3MDFGODAwQkE1MTE0IC8qIFF1YXJ0elN1cHBvcnQubW0gKi8sCisJCQkJQThBQkM5
OTkwOTQ0NUVDMDAwMTM5NDVGIC8qIEtDYW52YXNQYXRoUXVhcnR6LmggKi8sCisJCQkJQThBQkM5
OUEwOTQ0NUVDMDAwMTM5NDVGIC8qIEtDYW52YXNQYXRoUXVhcnR6Lm1tICovLAogCQkJKTsKIAkJ
CXBhdGggPSBxdWFydHo7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtNTY2NSw2ICs1
NjcxLDcgQEAKIAkJCQlBOEMzMjk2RTA5M0JCN0IyMDAwQjlDQUMgLyogU1ZHRkVTcG90TGlnaHRF
bGVtZW50SW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThDMzI5NzAwOTNCQjdCMjAwMEI5Q0FD
IC8qIFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnRJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBOEMzMjk3MjA5M0JCN0IyMDAwQjlDQUMgLyogU1ZHRkVQb2ludExpZ2h0RWxlbWVudEltcGwu
aCBpbiBIZWFkZXJzICovLAorCQkJCUE4QUJDOTlCMDk0NDVFQzAwMDEzOTQ1RiAvKiBLQ2FudmFz
UGF0aFF1YXJ0ei5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC03NDY5LDYgKzc0NzYsNyBAQAogCQkJCUE4
QzMyOTcxMDkzQkI3QjIwMDBCOUNBQyAvKiBTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50SW1w
bC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEMzMjk3MzA5M0JCN0IyMDAwQjlDQUMgLyogU1ZH
RkVQb2ludExpZ2h0RWxlbWVudEltcGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThDMzJEOTcw
OTNEOEVBNDAwMEI5Q0FDIC8qIFhMaW5rTmFtZXNXcmFwcGVyLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCUE4QUJDOTlDMDk0NDVFQzAwMDEzOTQ1RiAvKiBLQ2FudmFzUGF0aFF1YXJ0ei5tbSBpbiBT
b3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Npbmcg
PSAwOwogCQl9OwpJbmRleDoga2NhbnZhcy9LQ2FudmFzQ3JlYXRvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2NhbnZhcy9LQ2FudmFzQ3JlYXRvci5jcHAs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNwpkaWZmIC1wIC11IC1yMS43IGtjYW52YXMvS0NhbnZh
c0NyZWF0b3IuY3BwCi0tLSBrY2FudmFzL0tDYW52YXNDcmVhdG9yLmNwcAkyMSBOb3YgMjAwNSAw
ODoyOToxMSAtMDAwMAkxLjcKKysrIGtjYW52YXMvS0NhbnZhc0NyZWF0b3IuY3BwCTUgRGVjIDIw
MDUgMTQ6MDY6NTUgLTAwMDAKQEAgLTUxLDEyICs1MSwxMiBAQCBLQ2FudmFzQ3JlYXRvciAqS0Nh
bnZhc0NyZWF0b3I6OnNlbGYoKQogICAgIHJldHVybiBzX2NyZWF0b3I7CiB9CiAKLUtDUGF0aERh
dGFMaXN0IEtDYW52YXNDcmVhdG9yOjpjcmVhdGVSb3VuZGVkUmVjdGFuZ2xlKGZsb2F0IHgsIGZs
b2F0IHksIGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIGZsb2F0IHJ4LCBmbG9hdCByeSkgY29u
c3QKK0tDYW52YXNQYXRoKiBLQ2FudmFzQ3JlYXRvcjo6Y3JlYXRlUm91bmRlZFJlY3RhbmdsZShm
bG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCByeCwgZmxv
YXQgcnkpIGNvbnN0CiB7Ci0gICAgS0NQYXRoRGF0YUxpc3QgbGlzdDsKKyAgICBLQ2FudmFzUGF0
aCogcGF0aCA9IFFQYWludGVyOjpyZW5kZXJpbmdEZXZpY2UoKS0+Y3JlYXRlUGF0aCgpOwogCi0g
ICAgaWYgKHdpZHRoIDw9IDAuMGYgfHwgaGVpZ2h0IDw9IDAuMGYpCi0gICAgICAgIHJldHVybiBs
aXN0OworICAgIGlmICh3aWR0aCA8PSAwLjBmIHx8IGhlaWdodCA8PSAwLjBmIHx8ICFwYXRoKQor
ICAgICAgICByZXR1cm4gcGF0aDsKIAogICAgIGRvdWJsZSBucnggPSByeCwgbnJ5ID0gcnk7CiAg
ICAgLy8gSWYgcnggaXMgZ3JlYXRlciB0aGFuIGhhbGYgb2YgdGhlIHdpZHRoIG9mIHRoZSByZWN0
YW5nbGUKQEAgLTY5LDUyICs2OSw1MiBAQCBLQ1BhdGhEYXRhTGlzdCBLQ2FudmFzQ3JlYXRvcjo6
Y3JlYXRlUm91CiAgICAgaWYobnJ5ID4gaGVpZ2h0IC8gMikKICAgICAgICAgbnJ5ID0gaGVpZ2h0
IC8gMjsKIAotICAgIGxpc3QubW92ZVRvKHggKyBucngsIHkpOwotICAgIGxpc3QuY3VydmVUbyh4
ICsgbnJ4ICogKDEgLSAwLjU1MiksIHksIHgsIHkgKyBucnkgKiAoMSAtIDAuNTUyKSwgeCwgeSAr
IG5yeSk7CisgICAgcGF0aC0+bW92ZVRvKHggKyBucngsIHkpOworICAgIHBhdGgtPmN1cnZlVG8o
eCArIG5yeCAqICgxIC0gMC41NTIpLCB5LCB4LCB5ICsgbnJ5ICogKDEgLSAwLjU1MiksIHgsIHkg
KyBucnkpOwogCiAgICAgaWYobnJ5IDwgaGVpZ2h0IC8gMikKLSAgICAgICAgbGlzdC5saW5lVG8o
eCwgeSArIGhlaWdodCAtIG5yeSk7CisgICAgICAgIHBhdGgtPmxpbmVUbyh4LCB5ICsgaGVpZ2h0
IC0gbnJ5KTsKIAotICAgIGxpc3QuY3VydmVUbyh4LCB5ICsgaGVpZ2h0IC0gbnJ5ICogKDEgLSAw
LjU1MiksIHggKyBucnggKiAoMSAtIDAuNTUyKSwgeSArIGhlaWdodCwgeCArIG5yeCwgeSArIGhl
aWdodCk7CisgICAgcGF0aC0+Y3VydmVUbyh4LCB5ICsgaGVpZ2h0IC0gbnJ5ICogKDEgLSAwLjU1
MiksIHggKyBucnggKiAoMSAtIDAuNTUyKSwgeSArIGhlaWdodCwgeCArIG5yeCwgeSArIGhlaWdo
dCk7CiAKICAgICBpZihucnggPCB3aWR0aCAvIDIpCi0gICAgICAgIGxpc3QubGluZVRvKHggKyB3
aWR0aCAtIG5yeCwgeSArIGhlaWdodCk7CisgICAgICAgIHBhdGgtPmxpbmVUbyh4ICsgd2lkdGgg
LSBucngsIHkgKyBoZWlnaHQpOwogCi0gICAgbGlzdC5jdXJ2ZVRvKHggKyB3aWR0aCAtIG5yeCAq
ICgxIC0gMC41NTIpLCB5ICsgaGVpZ2h0LCB4ICsgd2lkdGgsIHkgKyBoZWlnaHQgLSBucnkgKiAo
MSAtIDAuNTUyKSwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0IC0gbnJ5KTsKKyAgICBwYXRoLT5jdXJ2
ZVRvKHggKyB3aWR0aCAtIG5yeCAqICgxIC0gMC41NTIpLCB5ICsgaGVpZ2h0LCB4ICsgd2lkdGgs
IHkgKyBoZWlnaHQgLSBucnkgKiAoMSAtIDAuNTUyKSwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0IC0g
bnJ5KTsKIAogICAgIGlmKG5yeSA8IGhlaWdodCAvIDIpCi0gICAgICAgIGxpc3QubGluZVRvKHgg
KyB3aWR0aCwgeSArIG5yeSk7CisgICAgICAgIHBhdGgtPmxpbmVUbyh4ICsgd2lkdGgsIHkgKyBu
cnkpOwogCi0gICAgbGlzdC5jdXJ2ZVRvKHggKyB3aWR0aCwgeSArIG5yeSAqICgxIC0gMC41NTIp
LCB4ICsgd2lkdGggLSBucnggKiAoMSAtIDAuNTUyKSwgeSwgeCArIHdpZHRoIC0gbnJ4LCB5KTsK
KyAgICBwYXRoLT5jdXJ2ZVRvKHggKyB3aWR0aCwgeSArIG5yeSAqICgxIC0gMC41NTIpLCB4ICsg
d2lkdGggLSBucnggKiAoMSAtIDAuNTUyKSwgeSwgeCArIHdpZHRoIC0gbnJ4LCB5KTsKIAogICAg
IGlmKG5yeCA8IHdpZHRoIC8gMikKLSAgICAgICAgbGlzdC5saW5lVG8oeCArIG5yeCwgeSk7Cisg
ICAgICAgIHBhdGgtPmxpbmVUbyh4ICsgbnJ4LCB5KTsKIAotICAgIGxpc3QuY2xvc2VTdWJwYXRo
KCk7Ci0gICAgcmV0dXJuIGxpc3Q7CisgICAgcGF0aC0+Y2xvc2VTdWJwYXRoKCk7CisgICAgcmV0
dXJuIHBhdGg7CiB9CiAKLUtDUGF0aERhdGFMaXN0IEtDYW52YXNDcmVhdG9yOjpjcmVhdGVSZWN0
YW5nbGUoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCkgY29uc3QK
K0tDYW52YXNQYXRoKiBLQ2FudmFzQ3JlYXRvcjo6Y3JlYXRlUmVjdGFuZ2xlKGZsb2F0IHgsIGZs
b2F0IHksIGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQpIGNvbnN0CiB7Ci0gICAgS0NQYXRoRGF0
YUxpc3QgbGlzdDsKKyAgICBLQ2FudmFzUGF0aCogcGF0aCA9IFFQYWludGVyOjpyZW5kZXJpbmdE
ZXZpY2UoKS0+Y3JlYXRlUGF0aCgpOwogICAgIAotICAgIGlmICh3aWR0aCA8PSAwLjBmIHx8IGhl
aWdodCA8PSAwLjBmKQotICAgICAgICByZXR1cm4gbGlzdDsKKyAgICBpZiAod2lkdGggPD0gMC4w
ZiB8fCBoZWlnaHQgPD0gMC4wZiB8fCAhcGF0aCkKKyAgICAgICAgcmV0dXJuIHBhdGg7CiAgICAg
Ci0gICAgbGlzdC5tb3ZlVG8oeCwgeSk7Ci0gICAgbGlzdC5saW5lVG8oeCArIHdpZHRoLCB5KTsK
LSAgICBsaXN0LmxpbmVUbyh4ICsgd2lkdGgsIHkgKyBoZWlnaHQpOwotICAgIGxpc3QubGluZVRv
KHgsIHkgKyBoZWlnaHQpOwotICAgIGxpc3QuY2xvc2VTdWJwYXRoKCk7Ci0gICAgcmV0dXJuIGxp
c3Q7CisgICAgcGF0aC0+bW92ZVRvKHgsIHkpOworICAgIHBhdGgtPmxpbmVUbyh4ICsgd2lkdGgs
IHkpOworICAgIHBhdGgtPmxpbmVUbyh4ICsgd2lkdGgsIHkgKyBoZWlnaHQpOworICAgIHBhdGgt
PmxpbmVUbyh4LCB5ICsgaGVpZ2h0KTsKKyAgICBwYXRoLT5jbG9zZVN1YnBhdGgoKTsKKyAgICBy
ZXR1cm4gcGF0aDsKIH0KIAotS0NQYXRoRGF0YUxpc3QgS0NhbnZhc0NyZWF0b3I6OmNyZWF0ZUVs
bGlwc2UoZmxvYXQgY3gsIGZsb2F0IGN5LCBmbG9hdCByeCwgZmxvYXQgcnkpIGNvbnN0CitLQ2Fu
dmFzUGF0aCogS0NhbnZhc0NyZWF0b3I6OmNyZWF0ZUVsbGlwc2UoZmxvYXQgY3gsIGZsb2F0IGN5
LCBmbG9hdCByeCwgZmxvYXQgcnkpIGNvbnN0CiB7Ci0gICAgS0NQYXRoRGF0YUxpc3QgbGlzdDsK
KyAgICBLQ2FudmFzUGF0aCogcGF0aCA9IFFQYWludGVyOjpyZW5kZXJpbmdEZXZpY2UoKS0+Y3Jl
YXRlUGF0aCgpOwogCi0gICAgaWYgKHJ4IDw9IDAuMGYgfHwgcnkgPD0gMC4wZikKLSAgICAgICAg
cmV0dXJuIGxpc3Q7CisgICAgaWYgKHJ4IDw9IDAuMGYgfHwgcnkgPD0gMC4wZiB8fCAhcGF0aCkK
KyAgICAgICAgcmV0dXJuIHBhdGg7CiAKICAgICAvLyBFbGxpcHNlIGNyZWF0aW9uIC0gbmljZSAm
IGNsZWFuIGFnZzIgY29kZQogICAgIGRvdWJsZSB4ID0gY3gsIHkgPSBjeTsKQEAgLTEzNSw3OCAr
MTM1LDMwIEBAIEtDUGF0aERhdGFMaXN0IEtDYW52YXNDcmVhdG9yOjpjcmVhdGVFbGwKIAogICAg
ICAgICBzdGVwKys7CiAgICAgICAgIGlmKHN0ZXAgPT0gMSkKLSAgICAgICAgICAgIGxpc3QubW92
ZVRvKHgsIHkpOworICAgICAgICAgICAgcGF0aC0+bW92ZVRvKHgsIHkpOwogICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBsaXN0LmxpbmVUbyh4LCB5KTsKKyAgICAgICAgICAgIHBhdGgtPmxpbmVU
byh4LCB5KTsKICAgICB9CiAKLSAgICBsaXN0LmNsb3NlU3VicGF0aCgpOwotICAgIHJldHVybiBs
aXN0OworICAgIHBhdGgtPmNsb3NlU3VicGF0aCgpOworICAgIHJldHVybiBwYXRoOwogfQogCi1L
Q1BhdGhEYXRhTGlzdCBLQ2FudmFzQ3JlYXRvcjo6Y3JlYXRlQ2lyY2xlKGZsb2F0IGN4LCBmbG9h
dCBjeSwgZmxvYXQgcikgY29uc3QKK0tDYW52YXNQYXRoKiBLQ2FudmFzQ3JlYXRvcjo6Y3JlYXRl
Q2lyY2xlKGZsb2F0IGN4LCBmbG9hdCBjeSwgZmxvYXQgcikgY29uc3QKIHsKICAgICByZXR1cm4g
Y3JlYXRlRWxsaXBzZShjeCwgY3ksIHIsIHIpOwogfQogCi1LQ1BhdGhEYXRhTGlzdCBLQ2FudmFz
Q3JlYXRvcjo6Y3JlYXRlTGluZShmbG9hdCB4MSwgZmxvYXQgeTEsIGZsb2F0IHgyLCBmbG9hdCB5
MikgY29uc3QKK0tDYW52YXNQYXRoKiBLQ2FudmFzQ3JlYXRvcjo6Y3JlYXRlTGluZShmbG9hdCB4
MSwgZmxvYXQgeTEsIGZsb2F0IHgyLCBmbG9hdCB5MikgY29uc3QKIHsKLSAgICBLQ1BhdGhEYXRh
TGlzdCBsaXN0OworICAgIEtDYW52YXNQYXRoKiBwYXRoID0gUVBhaW50ZXI6OnJlbmRlcmluZ0Rl
dmljZSgpLT5jcmVhdGVQYXRoKCk7CiAgICAgCi0gICAgaWYgKHgxID09IHgyICYmIHkxID09IHky
KQotICAgICAgICByZXR1cm4gbGlzdDsKKyAgICBpZiAoKHgxID09IHgyICYmIHkxID09IHkyKSB8
fCAhcGF0aCkKKyAgICAgICAgcmV0dXJuIHBhdGg7CiAKLSAgICBsaXN0Lm1vdmVUbyh4MSwgeTEp
OwotICAgIGxpc3QubGluZVRvKHgyLCB5Mik7Ci0gICAgcmV0dXJuIGxpc3Q7Ci19Ci0KLUtDYW52
YXNVc2VyRGF0YSBLQ2FudmFzQ3JlYXRvcjo6Y3JlYXRlQ2FudmFzUGF0aERhdGEoS1JlbmRlcmlu
Z0RldmljZSAqZGV2aWNlLCBjb25zdCBLQ1BhdGhEYXRhTGlzdCAmcGF0aERhdGEpIGNvbnN0Ci17
Ci0gICAgZGV2aWNlLT5zdGFydFBhdGgoKTsKLQotICAgIGludCBkYXRhTGVuZ3RoID0gcGF0aERh
dGEuY291bnQoKTsKLSAgICBpZihkYXRhTGVuZ3RoID09IDApCi0gICAgewotICAgICAgICBkZXZp
Y2UtPmVuZFBhdGgoKTsKLSAgICAgICAgcmV0dXJuIGRldmljZS0+Y3VycmVudFBhdGgoKTsKLSAg
ICB9Ci0KLSAgICBLQ1BhdGhEYXRhTGlzdDo6Q29uc3RJdGVyYXRvciBpdDsKLSAgICBLQ1BhdGhE
YXRhTGlzdDo6Q29uc3RJdGVyYXRvciBlbmQgPSBwYXRoRGF0YS5lbmQoKTsKLQotICAgIC8vIFRo
ZXJlIGFyZSBwdXJlLW1vdmV0byBwYXRocyB3aGljaCByZWZlcmVuY2UKLSAgICAvLyBwYWludCBz
ZXJ2ZXJzICpiYWgqIC0+IERvIE5PVCByZW5kZXIgdGhlbSEKLSAgICBib29sIHZhbGlkID0gZmFs
c2U7Ci0gICAgZm9yKGl0ID0gcGF0aERhdGEuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAg
IHsKLSAgICAgICAgS0NQYXRoRGF0YSBkYXRhID0gKml0OyAgICAgICAgCi0KLSAgICAgICAgaWYo
ZGF0YS5jbWQgPT0gQ01EX01PVkUpCi0gICAgICAgICAgICBkZXZpY2UtPm1vdmVUbyhkYXRhLngz
LCBkYXRhLnkzKTsKLSAgICAgICAgZWxzZSBpZihkYXRhLmNtZCA9PSBDTURfTElORSkKLSAgICAg
ICAgewotICAgICAgICAgICAgZGV2aWNlLT5saW5lVG8oZGF0YS54MywgZGF0YS55Myk7Ci0gICAg
ICAgICAgICB2YWxpZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZihkYXRhLmNt
ZCA9PSBDTURfQ0xPU0VfU1VCUEFUSCkKLSAgICAgICAgICAgIGRldmljZS0+Y2xvc2VTdWJwYXRo
KCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgZGV2aWNlLT5jdXJ2ZVRv
KGRhdGEueDEsIGRhdGEueTEsIGRhdGEueDIsIGRhdGEueTIsIGRhdGEueDMsIGRhdGEueTMpOwot
ICAgICAgICAgICAgdmFsaWQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYoIXZh
bGlkKQotICAgIHsKLSAgICAgICAgZGV2aWNlLT5lbmRQYXRoKCk7Ci0gICAgICAgIGRldmljZS0+
ZGVsZXRlUGF0aChkZXZpY2UtPmN1cnJlbnRQYXRoKCkpOwotICAgICAgICBkZXZpY2UtPnN0YXJ0
UGF0aCgpOwotICAgIH0KLQotICAgIGRldmljZS0+ZW5kUGF0aCgpOwotICAgIHJldHVybiBkZXZp
Y2UtPmN1cnJlbnRQYXRoKCk7CisgICAgcGF0aC0+bW92ZVRvKHgxLCB5MSk7CisgICAgcGF0aC0+
bGluZVRvKHgyLCB5Mik7CisgICAgcmV0dXJuIHBhdGg7CiB9CiAKIC8vIHZpbTp0cz00Om5vZXQK
SW5kZXg6IGtjYW52YXMvS0NhbnZhc0NyZWF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvU1ZHU3VwcG9ydC9rY2FudmFzL0tDYW52YXNDcmVhdG9yLmgsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuNApkaWZmIC1wIC11IC1yMS40IGtjYW52YXMvS0NhbnZhc0NyZWF0b3IuaAotLS0g
a2NhbnZhcy9LQ2FudmFzQ3JlYXRvci5oCTIxIE5vdiAyMDA1IDA4OjI5OjExIC0wMDAwCTEuNAor
Kysga2NhbnZhcy9LQ2FudmFzQ3JlYXRvci5oCTUgRGVjIDIwMDUgMTQ6MDY6NTUgLTAwMDAKQEAg
LTI2LDEyICsyNiw2IEBACiAjaW5jbHVkZSA8a2NhbnZhcy9LQ2FudmFzUGF0aC5oPgogI2luY2x1
ZGUgPGtjYW52YXMvS0NhbnZhc1R5cGVzLmg+CiAKLWNsYXNzIFJlbmRlclBhdGg7Ci1uYW1lc3Bh
Y2UgS1NWRyB7Ci0gICAgY2xhc3MgS0NhbnZhc1JlbmRlcmluZ1N0eWxlOwotfQotY2xhc3MgS0Nh
bnZhc0NvbnRhaW5lcjsKLWNsYXNzIEtSZW5kZXJpbmdEZXZpY2U7CiBjbGFzcyBLQ2FudmFzQ3Jl
YXRvcgogewogcHVibGljOgpAQCAtNDEsMTQgKzM1LDEyIEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
S0NhbnZhc0NyZWF0b3IgKnNlbGYoKTsKIAogICAgIC8vIENhbnZhcyBwYXRoIGNyZWF0aW9uCi0g
ICAgS0NQYXRoRGF0YUxpc3QgY3JlYXRlUm91bmRlZFJlY3RhbmdsZShmbG9hdCB4LCBmbG9hdCB5
LCBmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCByeCwgZmxvYXQgcnkpIGNvbnN0Owot
ICAgIEtDUGF0aERhdGFMaXN0IGNyZWF0ZVJlY3RhbmdsZShmbG9hdCB4LCBmbG9hdCB5LCBmbG9h
dCB3aWR0aCwgZmxvYXQgaGVpZ2h0KSBjb25zdDsKLSAgICBLQ1BhdGhEYXRhTGlzdCBjcmVhdGVF
bGxpcHNlKGZsb2F0IGN4LCBmbG9hdCBjeSwgZmxvYXQgcngsIGZsb2F0IHJ5KSBjb25zdDsKLSAg
ICBLQ1BhdGhEYXRhTGlzdCBjcmVhdGVDaXJjbGUoZmxvYXQgY3gsIGZsb2F0IGN5LCBmbG9hdCBy
KSBjb25zdDsKLSAgICBLQ1BhdGhEYXRhTGlzdCBjcmVhdGVMaW5lKGZsb2F0IHgxLCBmbG9hdCB5
MSwgZmxvYXQgeDIsIGZsb2F0IHkyKSBjb25zdDsKKyAgICBLQ2FudmFzUGF0aCogY3JlYXRlUm91
bmRlZFJlY3RhbmdsZShmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0
LCBmbG9hdCByeCwgZmxvYXQgcnkpIGNvbnN0OworICAgIEtDYW52YXNQYXRoKiBjcmVhdGVSZWN0
YW5nbGUoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCkgY29uc3Q7
CisgICAgS0NhbnZhc1BhdGgqIGNyZWF0ZUVsbGlwc2UoZmxvYXQgY3gsIGZsb2F0IGN5LCBmbG9h
dCByeCwgZmxvYXQgcnkpIGNvbnN0OworICAgIEtDYW52YXNQYXRoKiBjcmVhdGVDaXJjbGUoZmxv
YXQgY3gsIGZsb2F0IGN5LCBmbG9hdCByKSBjb25zdDsKKyAgICBLQ2FudmFzUGF0aCogY3JlYXRl
TGluZShmbG9hdCB4MSwgZmxvYXQgeTEsIGZsb2F0IHgyLCBmbG9hdCB5MikgY29uc3Q7CiAKLSAg
ICAvLyBDYW52YXMgaXRlbSBjcmVhdGlvbgotICAgIEtDYW52YXNVc2VyRGF0YSBjcmVhdGVDYW52
YXNQYXRoRGF0YShLUmVuZGVyaW5nRGV2aWNlICpkZXZpY2UsIGNvbnN0IEtDUGF0aERhdGFMaXN0
ICZwYXRoRGF0YSkgY29uc3Q7CiBwcml2YXRlOgogICAgIHN0YXRpYyBLQ2FudmFzQ3JlYXRvciAq
c19jcmVhdG9yOwogfTsKSW5kZXg6IGtjYW52YXMvS0NhbnZhc0l0ZW0uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tjYW52YXMvS0NhbnZhc0l0ZW0uY3BwLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjkKZGlmZiAtcCAtdSAtcjEuOSBrY2FudmFzL0tDYW52YXNJ
dGVtLmNwcAotLS0ga2NhbnZhcy9LQ2FudmFzSXRlbS5jcHAJMjcgTm92IDIwMDUgMTE6MDI6MTUg
LTAwMDAJMS45CisrKyBrY2FudmFzL0tDYW52YXNJdGVtLmNwcAk1IERlYyAyMDA1IDE0OjA2OjU1
IC0wMDAwCkBAIC00Miw3ICs0Miw2IEBAIGNsYXNzIFJlbmRlclBhdGg6OlByaXZhdGUKIHB1Ymxp
YzoKICAgICBQcml2YXRlKCkKICAgICB7Ci0gICAgICAgIHBhdGggPSAwOwogICAgICAgICBzdHls
ZSA9IDA7CiAgICAgfQogCkBAIC01Miw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBL
U1ZHOjpLQ2FudmFzUmVuZGVyaW5nU3R5bGUgKnN0eWxlOwotICAgIEtDYW52YXNVc2VyRGF0YSBw
YXRoOworICAgIFJlZlB0cjxLQ2FudmFzUGF0aD4gcGF0aDsKIAogICAgIFFSZWN0IGZpbGxCQm94
LCBzdHJva2VCYm94OwogICAgIFFNYXRyaXggbWF0cml4OwpAQCAtNjcsOCArNjYsNiBAQCBSZW5k
ZXJQYXRoOjpSZW5kZXJQYXRoKGtodG1sOjpSZW5kZXJTdHlsCiAKIFJlbmRlclBhdGg6On5SZW5k
ZXJQYXRoKCkKIHsKLSAgICBpZihkLT5wYXRoKQotICAgICAgICBRUGFpbnRlcjo6cmVuZGVyaW5n
RGV2aWNlKCktPmRlbGV0ZVBhdGgoZC0+cGF0aCk7CiAgICAgZGVsZXRlIGQ7CiB9CiAKQEAgLTEz
NiwxOSArMTMzLDE1IEBAIHZvaWQgUmVuZGVyUGF0aDo6c2V0dXBGb3JEcmF3KCkgY29uc3QKICAg
ICB9CiB9CiAKLXZvaWQgUmVuZGVyUGF0aDo6Y2hhbmdlUGF0aChLQ2FudmFzVXNlckRhdGEgbmV3
UGF0aCkKK3ZvaWQgUmVuZGVyUGF0aDo6Y2hhbmdlUGF0aChLQ2FudmFzUGF0aCogbmV3UGF0aCkK
IHsKICAgICBBU1NFUlQobmV3UGF0aCk7Ci0gICAgUVBhaW50ZXI6OnJlbmRlcmluZ0RldmljZSgp
LT5zZXRDdXJyZW50UGF0aChuZXdQYXRoKTsKLSAgICBpZiAoZC0+cGF0aCkKLSAgICAgICAgUVBh
aW50ZXI6OnJlbmRlcmluZ0RldmljZSgpLT5kZWxldGVQYXRoKGQtPnBhdGgpOwotCiAgICAgZC0+
cGF0aCA9IG5ld1BhdGg7CiB9CiAKLUtDYW52YXNVc2VyRGF0YSBSZW5kZXJQYXRoOjpwYXRoKCkg
Y29uc3QKK0tDYW52YXNQYXRoKiBSZW5kZXJQYXRoOjpwYXRoKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gZC0+cGF0aDsKKyAgICByZXR1cm4gZC0+cGF0aC5nZXQoKTsKIH0KIAogS1NWRzo6S0NhbnZh
c1JlbmRlcmluZ1N0eWxlICpSZW5kZXJQYXRoOjpjYW52YXNTdHlsZSgpIGNvbnN0CkluZGV4OiBr
Y2FudmFzL0tDYW52YXNJdGVtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1
cHBvcnQva2NhbnZhcy9LQ2FudmFzSXRlbS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjYKZGlm
ZiAtcCAtdSAtcjEuNiBrY2FudmFzL0tDYW52YXNJdGVtLmgKLS0tIGtjYW52YXMvS0NhbnZhc0l0
ZW0uaAkyMyBOb3YgMjAwNSAxNToxNDowNSAtMDAwMAkxLjYKKysrIGtjYW52YXMvS0NhbnZhc0l0
ZW0uaAk1IERlYyAyMDA1IDE0OjA2OjU2IC0wMDAwCkBAIC01OCw5ICs1OCw5IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNldHVwRm9yRHJhdygpIGNvbnN0OwogCiAgICAgLy8gVXBkYXRlCi0gICAgdm9p
ZCBjaGFuZ2VQYXRoKEtDYW52YXNVc2VyRGF0YSBuZXdQYXRoKTsKKyAgICB2b2lkIGNoYW5nZVBh
dGgoS0NhbnZhc1BhdGgqIG5ld1BhdGgpOwogCi0gICAgS0NhbnZhc1VzZXJEYXRhIHBhdGgoKSBj
b25zdDsKKyAgICBLQ2FudmFzUGF0aCogcGF0aCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBz
ZXRTdHlsZShraHRtbDo6UmVuZGVyU3R5bGUgKnN0eWxlKTsKICAgICBLU1ZHOjpLQ2FudmFzUmVu
ZGVyaW5nU3R5bGUgKmNhbnZhc1N0eWxlKCkgY29uc3Q7CiAKSW5kZXg6IGtjYW52YXMvS0NhbnZh
c01hdHJpeC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2Nh
bnZhcy9LQ2FudmFzTWF0cml4LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS41CmRpZmYgLXAg
LXUgLXIxLjUga2NhbnZhcy9LQ2FudmFzTWF0cml4LmNwcAotLS0ga2NhbnZhcy9LQ2FudmFzTWF0
cml4LmNwcAk1IE9jdCAyMDA1IDA1OjM2OjQ1IC0wMDAwCTEuNQorKysga2NhbnZhcy9LQ2FudmFz
TWF0cml4LmNwcAk1IERlYyAyMDA1IDE0OjA2OjU2IC0wMDAwCkBAIC0yODAsMzEgKzI4MCw2IEBA
IHZvaWQgS0NhbnZhc01hdHJpeDo6cmVtb3ZlU2NhbGUoZG91YmxlICoKICAgICAqeFNjYWxlID0g
c3g7ICp5U2NhbGUgPSBzeTsKIH0KIAotS0NQYXRoRGF0YUxpc3QgS0NhbnZhc01hdHJpeDo6bWFw
KGNvbnN0IEtDUGF0aERhdGFMaXN0ICZwYXRoRGF0YSkgY29uc3QKLXsKLSAgICBLQ1BhdGhEYXRh
TGlzdCBtYXBwZWQ7Ci0gICAgZm9yKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBhdGhEYXRhLmNv
dW50KCk7IGkrKykKLSAgICB7Ci0gICAgICAgIEtDUGF0aERhdGFMaXN0OjpDb25zdEl0ZXJhdG9y
IGl0OwotICAgICAgICBLQ1BhdGhEYXRhTGlzdDo6Q29uc3RJdGVyYXRvciBlbmQgPSBwYXRoRGF0
YS5lbmQoKTsKLQotICAgICAgICBmb3IoaXQgPSBwYXRoRGF0YS5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEtDUGF0aERhdGEgZGF0YSA9ICppdDsKLQot
ICAgICAgICAgICAgZG91YmxlIHggPSAwLjAsIHkgPSAwLjA7Ci0gICAgICAgICAgICBtX21hdHJp
eC5tYXAoZGF0YS54MywgZGF0YS55MywgJngsICZ5KTsKLQotICAgICAgICAgICAgaWYoZGF0YS5j
bWQgPT0gQ01EX01PVkUpCi0gICAgICAgICAgICAgICAgbWFwcGVkLm1vdmVUbyh4LCB5KTsKLSAg
ICAgICAgICAgIGVsc2UgaWYoZGF0YS5jbWQgPT0gQ01EX0xJTkUpCi0gICAgICAgICAgICAgICAg
bWFwcGVkLmxpbmVUbyh4LCB5KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBtYXBw
ZWQ7Ci19Ci0KIFFNYXRyaXggS0NhbnZhc01hdHJpeDo6cW1hdHJpeCgpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIG1fbWF0cml4OwpJbmRleDoga2NhbnZhcy9LQ2FudmFzTWF0cml4LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2NhbnZhcy9LQ2FudmFzTWF0cml4Lmgs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNApkaWZmIC1wIC11IC1yMS40IGtjYW52YXMvS0NhbnZh
c01hdHJpeC5oCi0tLSBrY2FudmFzL0tDYW52YXNNYXRyaXguaAk4IFNlcCAyMDA1IDA4OjAzOjEw
IC0wMDAwCTEuNAorKysga2NhbnZhcy9LQ2FudmFzTWF0cml4LmgJNSBEZWMgMjAwNSAxNDowNjo1
NiAtMDAwMApAQCAtMzEsNyArMzEsNyBAQCB0eXBlZGVmIGVudW0KICAgICBPUFNfUE9TVE1VTCA9
IDIKIH0gS0NNYXRyaXhPcGVyYXRpb25Nb2RlOwogCi1jbGFzcyBLQ1BhdGhEYXRhTGlzdDsKK2Ns
YXNzIEtDYW52YXNQYXRoOwogY2xhc3MgS0NhbnZhc01hdHJpeAogewogcHVibGljOgpAQCAtOTIs
MTAgKzkyLDYgQEAgcHVibGljOgogICAgIC8vIEFmdGVyIHRoaXMgb3BlcmF0aW9uLCB0aGUgbWF0
cml4IGhhcyB4IGFuZCB5IHNjYWxlIG9mIG9uZSAoJzEnKS4KICAgICB2b2lkIHJlbW92ZVNjYWxl
KGRvdWJsZSAqeFNjYWxlLCBkb3VibGUgKnlTY2FsZSk7CiAKLSAgICAvLyBUcmFuc2Zvcm0gJ3Bv
bHlkYXRhJyB1c2luZyBjdXJyZW50IG1hdHJpeC4KLSAgICAvLyAoT25seSB3b3JrcyBmb3IgbGlu
ZXRvL21vdmV0byBvcGVyYXRpb25zISkKLSAgICBLQ1BhdGhEYXRhTGlzdCBtYXAoY29uc3QgS0NQ
YXRoRGF0YUxpc3QgJnBhdGhEYXRhKSBjb25zdDsKLQogICAgIFFNYXRyaXggcW1hdHJpeCgpIGNv
bnN0OwogCiBwcml2YXRlOgpJbmRleDoga2NhbnZhcy9LQ2FudmFzUGF0aC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2NhbnZhcy9LQ2FudmFzUGF0aC5jcHAs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMwpkaWZmIC1wIC11IC1yMS4zIGtjYW52YXMvS0NhbnZh
c1BhdGguY3BwCi0tLSBrY2FudmFzL0tDYW52YXNQYXRoLmNwcAkyMyBOb3YgMjAwNSAxNToxNDow
NSAtMDAwMAkxLjMKKysrIGtjYW52YXMvS0NhbnZhc1BhdGguY3BwCTUgRGVjIDIwMDUgMTQ6MDY6
NTYgLTAwMDAKQEAgLTI0LDI2ICsyNCwxMyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJLQ2FudmFzUGF0aC5oIgorCisjaW5jbHVkZSA8cXBhaW50ZXIuaD4KICNpbmNs
dWRlIDxxdGV4dHN0cmVhbS5oPgotI2luY2x1ZGUgIktDYW52YXNUcmVlRGVidWcuaCIKIAotLy9L
Q1BhdGhDb21tYW5kCi1RVGV4dFN0cmVhbSAmb3BlcmF0b3I8PChRVGV4dFN0cmVhbSAmdHMsIEtD
UGF0aENvbW1hbmQgY21kKQotewotICAgIHN3aXRjaCAoY21kKSAKLSAgICB7Ci0gICAgICAgIGNh
c2UgQ01EX01PVkU6Ci0gICAgICAgICAgICB0cyA8PCAiTU9WRSI7IGJyZWFrOwotICAgICAgICBj
YXNlIENNRF9MSU5FOgotICAgICAgICAgICAgdHMgPDwgIkxJTkUiOyBicmVhazsKLSAgICAgICAg
Y2FzZSBDTURfQ1VSVkU6Ci0gICAgICAgICAgICB0cyA8PCAiQ1VSVkUiOyBicmVhazsKLSAgICAg
ICAgY2FzZSBDTURfQ0xPU0VfU1VCUEFUSDoKLSAgICAgICAgICAgIHRzIDw8ICJDTE9TRV9TVUJQ
QVRIIjsgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiB0czsKLX0KKyNpbmNsdWRlICJLQ2FudmFz
UGF0aC5oIgorI2luY2x1ZGUgIktDYW52YXNUcmVlRGVidWcuaCIKKyNpbmNsdWRlICJLUmVuZGVy
aW5nRGV2aWNlLmgiCiAKIC8vS0NXaW5kUnVsZQogUVRleHRTdHJlYW0gJm9wZXJhdG9yPDwoUVRl
eHRTdHJlYW0gJnRzLCBLQ1dpbmRSdWxlIHJ1bGUpCkBAIC01OCwzNCArNDUsMTIgQEAgUVRleHRT
dHJlYW0gJm9wZXJhdG9yPDwoUVRleHRTdHJlYW0gJnRzLAogICAgIHJldHVybiB0czsKIH0KIAot
Ly9LQ1BhdGhEYXRhCi1RVGV4dFN0cmVhbSAmb3BlcmF0b3I8PChRVGV4dFN0cmVhbSAmdHMsIGNv
bnN0IEtDUGF0aERhdGEgJmQpCi17Ci0gICAgdHMgPDwgIntjbWQ9IiA8PCBkLmNtZDsKLSAgICBz
d2l0Y2goZC5jbWQpCi0gICAgeyAgICAKLSAgICAgICAgY2FzZSBDTURfQ1VSVkU6ICAKLSAgICAg
ICAgICAgIHRzIDw8ICIgeDE9Ijw8IGQueDEgPDwgIiB5MT0iIDw8IGQueTEKLSAgICAgICAgICAg
ICAgICA8PCAiIHgyPSI8PCBkLngyIDw8ICIgeTI9IiA8PCBkLnkyOwotICAgICAgICAgICAgLyog
ZmFsbHRocm91Z2ggKi8KLSAgICAgICAgY2FzZSBDTURfTElORToKLSAgICAgICAgY2FzZSBDTURf
TU9WRToKLSAgICAgICAgICAgIHRzIDw8ICIgeDM9Ijw8IGQueDMgPDwgIiB5Mz0iIDw8IGQueTM7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDTURfQ0xPU0VfU1VCUEFUSDoKLSAg
ICAgICAgICAgIC8qZW1wdHkqLwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHRzIDw8
ICJ9IjsKLSAgICByZXR1cm4gdHM7Ci19Ci0KIC8vS0NDbGlwRGF0YQogUVRleHRTdHJlYW0gJm9w
ZXJhdG9yPDwoUVRleHRTdHJlYW0gJnRzLCBjb25zdCBLQ0NsaXBEYXRhICZkKQogewotICAgIHRz
IDw8ICJbd2luZGluZz0iIDw8IGQucnVsZSAgPDwgIl0iOwotICAgIGlmIChkLmJib3gpCi0gICAg
ICAgIHRzIDw8ICIgW2JvdW5kaW5nIGJveCBtb2RlPSIgPDwgZC5iYm94ICA8PCAiXSI7ICAgIAot
ICAgIHRzIDw8ICIgW3BhdGg9IiA8PCBkLnBhdGggPDwgIl0iOworICAgIHRzIDw8ICJbd2luZGlu
Zz0iIDw8IGQud2luZFJ1bGUgIDw8ICJdIjsKKyAgICBpZiAoZC5iYm94VW5pdHMpCisgICAgICAg
IHRzIDw8ICIgW2JvdW5kaW5nIGJveCBtb2RlPSIgPDwgZC5iYm94VW5pdHMgIDw8ICJdIjsgICAg
CisgICAgdHMgPDwgIiBbcGF0aD0iIDw8IFFQYWludGVyOjpyZW5kZXJpbmdEZXZpY2UoKS0+c3Ry
aW5nRm9yUGF0aChkLnBhdGguZ2V0KCkpIDw8ICJdIjsKICAgICByZXR1cm4gdHM7CiB9CkluZGV4
OiBrY2FudmFzL0tDYW52YXNQYXRoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NW
R1N1cHBvcnQva2NhbnZhcy9LQ2FudmFzUGF0aC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjYK
ZGlmZiAtcCAtdSAtcjEuNiBrY2FudmFzL0tDYW52YXNQYXRoLmgKLS0tIGtjYW52YXMvS0NhbnZh
c1BhdGguaAkyMyBOb3YgMjAwNSAxNToxNDowNSAtMDAwMAkxLjYKKysrIGtjYW52YXMvS0NhbnZh
c1BhdGguaAk1IERlYyAyMDA1IDE0OjA2OjU2IC0wMDAwCkBAIC0xLDQgKzEsNSBAQAogLyoKKyAg
ICBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4KICAgICBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+CiAgICAg
ICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAKQEAgLTI0
LDYgKzI1LDkgQEAKICNkZWZpbmUgS0NhbnZhc1BhdGhfSAogCiAjaW5jbHVkZSA8cTN2YWx1ZWxp
c3QuaD4KKyNpbmNsdWRlIDxreG1sY29yZS9SZWZQdHIuaD4KKyNpbmNsdWRlIDxreG1sY29yZS9B
c3NlcnRpb25zLmg+CisjaW5jbHVkZSAibWlzYy9zaGFyZWQuaCIKIAogY2xhc3MgUVRleHRTdHJl
YW07CiAKQEAgLTQ0LDU5ICs0OCwyNSBAQCB0eXBlZGVmIGVudW0KICAgICBDTURfQ0xPU0VfU1VC
UEFUSCA9IDMKIH0gS0NQYXRoQ29tbWFuZDsKIAotUVRleHRTdHJlYW0gJm9wZXJhdG9yPDwoUVRl
eHRTdHJlYW0gJnRzLCBLQ1BhdGhDb21tYW5kIGNtZCk7Ci0KLXN0cnVjdCBLQ1BhdGhEYXRhCi17
Ci0gICAgS0NQYXRoQ29tbWFuZCBjbWQgOiAyOwotCi0gICAgZG91YmxlIHgxLCB4MiwgeDM7Ci0g
ICAgZG91YmxlIHkxLCB5MiwgeTM7Ci19OwotCi1RVGV4dFN0cmVhbSAmb3BlcmF0b3I8PChRVGV4
dFN0cmVhbSAmdHMsIGNvbnN0IEtDUGF0aERhdGEgJmQpOwotCi1jbGFzcyBLQ1BhdGhEYXRhTGlz
dCA6IHB1YmxpYyBRM1ZhbHVlTGlzdDxLQ1BhdGhEYXRhPgorY2xhc3MgS0NhbnZhc1BhdGggOiBw
dWJsaWMga2h0bWw6OlNoYXJlZDxLQ2FudmFzUGF0aD4KIHsKIHB1YmxpYzoKLSAgICBLQ1BhdGhE
YXRhTGlzdCgpIHsgfQotCi0gICAgaW5saW5lIHZvaWQgbW92ZVRvKGRvdWJsZSB4LCBkb3VibGUg
eSkKLSAgICB7Ci0gICAgICAgIEtDUGF0aERhdGEgZGF0YTsgZGF0YS5jbWQgPSBDTURfTU9WRTsK
LSAgICAgICAgZGF0YS54MyA9IHg7IGRhdGEueTMgPSB5OwotICAgICAgICBhcHBlbmQoZGF0YSk7
Ci0gICAgfQotCi0gICAgaW5saW5lIHZvaWQgbGluZVRvKGRvdWJsZSB4LCBkb3VibGUgeSkKLSAg
ICB7Ci0gICAgICAgIEtDUGF0aERhdGEgZGF0YTsgZGF0YS5jbWQgPSBDTURfTElORTsKLSAgICAg
ICAgZGF0YS54MyA9IHg7IGRhdGEueTMgPSB5OwotICAgICAgICBhcHBlbmQoZGF0YSk7Ci0gICAg
fQotCi0gICAgaW5saW5lIHZvaWQgY3VydmVUbyhkb3VibGUgeDEsIGRvdWJsZSB5MSwgZG91Ymxl
IHgyLCBkb3VibGUgeTIsIGRvdWJsZSB4MywgZG91YmxlIHkzKQotICAgIHsKLSAgICAgICAgS0NQ
YXRoRGF0YSBkYXRhOyBkYXRhLmNtZCA9IENNRF9DVVJWRTsKLSAgICAgICAgZGF0YS54MSA9IHgx
OyBkYXRhLnkxID0geTE7Ci0gICAgICAgIGRhdGEueDIgPSB4MjsgZGF0YS55MiA9IHkyOwotICAg
ICAgICBkYXRhLngzID0geDM7IGRhdGEueTMgPSB5MzsKLSAgICAgICAgYXBwZW5kKGRhdGEpOwot
ICAgIH0KLQotICAgIGlubGluZSB2b2lkIGNsb3NlU3VicGF0aCgpCi0gICAgewotICAgICAgICAg
S0NQYXRoRGF0YSBkYXRhOyBkYXRhLmNtZCA9IENNRF9DTE9TRV9TVUJQQVRIOwotICAgICAgICAg
YXBwZW5kKGRhdGEpOwotICAgIH0KKyAgICB2aXJ0dWFsIH5LQ2FudmFzUGF0aCgpIHsgfQorICAg
IAorICAgIHZpcnR1YWwgYm9vbCBpc0VtcHR5KCkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCB2
b2lkIG1vdmVUbyhkb3VibGUgeCwgZG91YmxlIHkpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbGlu
ZVRvKGRvdWJsZSB4LCBkb3VibGUgeSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjdXJ2ZVRvKGRv
dWJsZSB4MSwgZG91YmxlIHkxLCBkb3VibGUgeDIsIGRvdWJsZSB5MiwgZG91YmxlIHgzLCBkb3Vi
bGUgeTMpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xvc2VTdWJwYXRoKCkgPSAwOwogfTsKIAog
Ly8gQ2xpcHBpbmcgcGF0aHMKIHN0cnVjdCBLQ0NsaXBEYXRhCiB7Ci0gICAgS0NXaW5kUnVsZSBy
dWxlIDogMTsKLSAgICBib29sIGJib3ggOiAxOwotICAgIEtDUGF0aERhdGFMaXN0IHBhdGg7Cisg
ICAgS0NXaW5kUnVsZSB3aW5kUnVsZSA6IDE7CisgICAgYm9vbCBiYm94VW5pdHMgOiAxOworICAg
IFJlZlB0cjxLQ2FudmFzUGF0aD4gcGF0aDsKIH07CiAKIFFUZXh0U3RyZWFtICZvcGVyYXRvcjw8
KFFUZXh0U3RyZWFtICZ0cywgY29uc3QgS0NDbGlwRGF0YSAmZCk7CkBAIC0xMDYsMTMgKzc2LDE0
IEBAIGNsYXNzIEtDQ2xpcERhdGFMaXN0IDogcHVibGljIFEzVmFsdWVMaXMKIHB1YmxpYzoKICAg
ICBLQ0NsaXBEYXRhTGlzdCgpIHsgfQogCi0gICAgaW5saW5lIHZvaWQgYWRkUGF0aChjb25zdCBL
Q1BhdGhEYXRhTGlzdCAmcGF0aERhdGEsIEtDV2luZFJ1bGUgcnVsZSwgYm9vbCBiYm94KQorICAg
IGlubGluZSB2b2lkIGFkZFBhdGgoS0NhbnZhc1BhdGggKnBhdGhEYXRhLCBLQ1dpbmRSdWxlIHdp
bmRSdWxlLCBib29sIGJib3hVbml0cykKICAgICB7Ci0gICAgICAgIEtDQ2xpcERhdGEgZGF0YTsK
LSAgICAgICAgZGF0YS5ydWxlID0gcnVsZTsKLSAgICAgICAgZGF0YS5iYm94ID0gYmJveDsKLSAg
ICAgICAgZGF0YS5wYXRoID0gcGF0aERhdGE7Ci0gICAgICAgIGFwcGVuZChkYXRhKTsKKyAgICAg
ICAgQVNTRVJUKHBhdGhEYXRhKTsKKyAgICAgICAgS0NDbGlwRGF0YSBjbGlwRGF0YTsKKyAgICAg
ICAgY2xpcERhdGEud2luZFJ1bGUgPSB3aW5kUnVsZTsKKyAgICAgICAgY2xpcERhdGEuYmJveFVu
aXRzID0gYmJveFVuaXRzOworICAgICAgICBjbGlwRGF0YS5wYXRoID0gcGF0aERhdGE7CisgICAg
ICAgIGFwcGVuZChjbGlwRGF0YSk7CiAgICAgfQogfTsKIApJbmRleDoga2NhbnZhcy9LQ2FudmFz
UmVzb3VyY2VzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9r
Y2FudmFzL0tDYW52YXNSZXNvdXJjZXMuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjExCmRp
ZmYgLXAgLXUgLXIxLjExIGtjYW52YXMvS0NhbnZhc1Jlc291cmNlcy5jcHAKLS0tIGtjYW52YXMv
S0NhbnZhc1Jlc291cmNlcy5jcHAJMjkgTm92IDIwMDUgMDI6MDM6NTUgLTAwMDAJMS4xMQorKysg
a2NhbnZhcy9LQ2FudmFzUmVzb3VyY2VzLmNwcAk1IERlYyAyMDA1IDE0OjA2OjU3IC0wMDAwCkBA
IC0xMDIsOSArMTAyLDkgQEAgdm9pZCBLQ2FudmFzQ2xpcHBlcjo6cmVzZXRDbGlwRGF0YSgpCiAg
ICAgbV9jbGlwRGF0YS5jbGVhcigpOwogfQogCi12b2lkIEtDYW52YXNDbGlwcGVyOjphZGRDbGlw
RGF0YShjb25zdCBLQ1BhdGhEYXRhTGlzdCAmcGF0aCwgS0NXaW5kUnVsZSBydWxlLCBib29sIGJi
b3gpCit2b2lkIEtDYW52YXNDbGlwcGVyOjphZGRDbGlwRGF0YShLQ2FudmFzUGF0aCogcGF0aCwg
S0NXaW5kUnVsZSBydWxlLCBib29sIGJib3hVbml0cykKIHsKLSAgICBtX2NsaXBEYXRhLmFkZFBh
dGgocGF0aCwgcnVsZSwgYmJveCk7CisgICAgbV9jbGlwRGF0YS5hZGRQYXRoKHBhdGgsIHJ1bGUs
IGJib3hVbml0cyk7CiB9CiAKIEtDQ2xpcERhdGFMaXN0IEtDYW52YXNDbGlwcGVyOjpjbGlwRGF0
YSgpIGNvbnN0CkluZGV4OiBrY2FudmFzL0tDYW52YXNSZXNvdXJjZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rY2FudmFzL0tDYW52YXNSZXNvdXJjZXMuaCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMApkaWZmIC1wIC11IC1yMS4xMCBrY2FudmFzL0tDYW52
YXNSZXNvdXJjZXMuaAotLS0ga2NhbnZhcy9LQ2FudmFzUmVzb3VyY2VzLmgJMjkgTm92IDIwMDUg
MDI6MDM6NTUgLTAwMDAJMS4xMAorKysga2NhbnZhcy9LQ2FudmFzUmVzb3VyY2VzLmgJNSBEZWMg
MjAwNSAxNDowNjo1NyAtMDAwMApAQCAtNzksNyArNzksNyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCBib29sIGlzQ2xpcHBlcigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAogICAgIHZvaWQgcmVz
ZXRDbGlwRGF0YSgpOwotICAgIHZvaWQgYWRkQ2xpcERhdGEoY29uc3QgS0NQYXRoRGF0YUxpc3Qg
JnBhdGgsIEtDV2luZFJ1bGUgcnVsZSwgYm9vbCBiYm94KTsKKyAgICB2b2lkIGFkZENsaXBEYXRh
KEtDYW52YXNQYXRoICpwYXRoLCBLQ1dpbmRSdWxlIHJ1bGUsIGJvb2wgYmJveFVuaXRzKTsKIAog
ICAgIEtDQ2xpcERhdGFMaXN0IGNsaXBEYXRhKCkgY29uc3Q7CiAKSW5kZXg6IGtjYW52YXMvS0Nh
bnZhc1R5cGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2Nh
bnZhcy9LQ2FudmFzVHlwZXMuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS41CmRpZmYgLXAgLXUg
LXIxLjUga2NhbnZhcy9LQ2FudmFzVHlwZXMuaAotLS0ga2NhbnZhcy9LQ2FudmFzVHlwZXMuaAky
MSBOb3YgMjAwNSAwODoyOToxMSAtMDAwMAkxLjUKKysrIGtjYW52YXMvS0NhbnZhc1R5cGVzLmgJ
NSBEZWMgMjAwNSAxNDowNjo1NyAtMDAwMApAQCAtMjMsNDUgKzIzLDMxIEBACiAjaWZuZGVmIEtD
YW52YXNUeXBlc19ICiAjZGVmaW5lIEtDYW52YXNUeXBlc19ICiAKLSNpbmNsdWRlIDxxM3B0cmxp
c3QuaD4KLQotLy8gU29tZSBkZWZhdWx0IGNvbnN0YW50cwotCi0vLyBIb2xkcyBhbnkgcHRyIHVu
ZGVyIGEgbmljZSBzeW5vbnltIDopCi10eXBlZGVmIHZvaWQgKktDYW52YXNVc2VyRGF0YTsKLQot
I2lmZGVmIEFQUExFX0NIQU5HRVMKLWNsYXNzIEtDYW52YXNQcml2YXRlVXNlckRhdGEgewotCi19
OwotCi10eXBlZGVmIFEzUHRyTGlzdDxLQ2FudmFzUHJpdmF0ZVVzZXJEYXRhPiBLQ2FudmFzVXNl
ckRhdGFMaXN0OwotI2Vsc2UKLXR5cGVkZWYgUTNQdHJMaXN0PHZvaWQ+IEtDYW52YXNVc2VyRGF0
YUxpc3Q7Ci0jZW5kaWYKKyNpbmNsdWRlIDxreG1sY29yZS9SZWZQdHIuaD4KIAogLy8gYWthICJ3
aGF0IHRvIGRyYXciCiBuYW1lc3BhY2UgS1NWRyB7CiAgICAgY2xhc3MgS0NhbnZhc1JlbmRlcmlu
Z1N0eWxlOwogfQorCitjbGFzcyBLQ2FudmFzUGF0aDsKIGNsYXNzIEtDYW52YXNDb21tb25Bcmdz
CiB7CiBwdWJsaWM6CiAgICAgS0NhbnZhc0NvbW1vbkFyZ3MoKTsKICAgICB+S0NhbnZhc0NvbW1v
bkFyZ3MoKTsKIAotICAgIEtDYW52YXNVc2VyRGF0YSBwYXRoKCkgY29uc3Q7Ci0gICAgdm9pZCBz
ZXRQYXRoKEtDYW52YXNVc2VyRGF0YSBwYXRoKTsKKyAgICBLQ2FudmFzUGF0aCogcGF0aCgpIGNv
bnN0OworICAgIHZvaWQgc2V0UGF0aChLQ2FudmFzUGF0aCogcGF0aCk7CiAKICAgICBLU1ZHOjpL
Q2FudmFzUmVuZGVyaW5nU3R5bGUgKmNhbnZhc1N0eWxlKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRT
dHlsZShLU1ZHOjpLQ2FudmFzUmVuZGVyaW5nU3R5bGUgKnN0eWxlKTsKICAgICAKIHByaXZhdGU6
Ci0gICAgS0NhbnZhc1VzZXJEYXRhIG1fcGF0aDsKKyAgICBSZWZQdHI8S0NhbnZhc1BhdGg+IG1f
cGF0aDsKICAgICBLU1ZHOjpLQ2FudmFzUmVuZGVyaW5nU3R5bGUgKm1fc3R5bGU7CiB9OwogCi0K
ICNlbmRpZgogCiAvLyB2aW06dHM9NDpub2V0CkluZGV4OiBrY2FudmFzL2RldmljZS9LUmVuZGVy
aW5nRGV2aWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9r
Y2FudmFzL2RldmljZS9LUmVuZGVyaW5nRGV2aWNlLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS41CmRpZmYgLXAgLXUgLXIxLjUga2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ0RldmljZS5jcHAK
LS0tIGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdEZXZpY2UuY3BwCTIxIE5vdiAyMDA1IDA4OjI5
OjEzIC0wMDAwCTEuNQorKysga2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ0RldmljZS5jcHAJNSBE
ZWMgMjAwNSAxNDowNjo1NyAtMDAwMApAQCAtMzMsMTIgKzMzLDEyIEBAIEtDYW52YXNDb21tb25B
cmdzOjp+S0NhbnZhc0NvbW1vbkFyZ3MoKQogewogfQogCi1LQ2FudmFzVXNlckRhdGEgS0NhbnZh
c0NvbW1vbkFyZ3M6OnBhdGgoKSBjb25zdAorS0NhbnZhc1BhdGgqIEtDYW52YXNDb21tb25Bcmdz
OjpwYXRoKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9wYXRoOworICAgIHJldHVybiBtX3BhdGgu
Z2V0KCk7CiB9CiAKLXZvaWQgS0NhbnZhc0NvbW1vbkFyZ3M6OnNldFBhdGgoS0NhbnZhc1VzZXJE
YXRhIHBhdGgpCit2b2lkIEtDYW52YXNDb21tb25BcmdzOjpzZXRQYXRoKEtDYW52YXNQYXRoKiBw
YXRoKQogewogICAgIG1fcGF0aCA9IHBhdGg7CiB9CkBAIC01NSwxOCArNTUsMTIgQEAgdm9pZCBL
Q2FudmFzQ29tbW9uQXJnczo6c2V0U3R5bGUoS1NWRzo6SwogCiBLUmVuZGVyaW5nRGV2aWNlOjpL
UmVuZGVyaW5nRGV2aWNlKCkKIHsKLSAgICBtX2N1cnJlbnRQYXRoID0gMDsKIH0KIAogS1JlbmRl
cmluZ0RldmljZTo6fktSZW5kZXJpbmdEZXZpY2UoKQogewogfQogCi1LQ2FudmFzVXNlckRhdGEg
S1JlbmRlcmluZ0RldmljZTo6Y3VycmVudFBhdGgoKSBjb25zdAotewotICAgIHJldHVybiBtX2N1
cnJlbnRQYXRoOwotfQotCiBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCAqS1JlbmRlcmluZ0Rldmlj
ZTo6Y3VycmVudENvbnRleHQoKSBjb25zdAogewogICAgIHJldHVybiBtX2NvbnRleHRTdGFjay5j
dXJyZW50KCk7CkBAIC04Miw5ICs3Niw0IEBAIHZvaWQgS1JlbmRlcmluZ0RldmljZTo6cHVzaENv
bnRleHQoS1JlbmQKICAgICBtX2NvbnRleHRTdGFjay5wdXNoKGNvbnRleHQpOwogfQogCi12b2lk
IEtSZW5kZXJpbmdEZXZpY2U6OnNldEN1cnJlbnRQYXRoKEtDYW52YXNVc2VyRGF0YSBwYXRoKQot
ewotICAgIG1fY3VycmVudFBhdGggPSBwYXRoOwotfQotCiAvLyB2aW06dHM9NDpub2V0CkluZGV4
OiBrY2FudmFzL2RldmljZS9LUmVuZGVyaW5nRGV2aWNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1NWR1N1cHBvcnQva2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ0RldmljZS5oLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjYKZGlmZiAtcCAtdSAtcjEuNiBrY2FudmFzL2RldmljZS9L
UmVuZGVyaW5nRGV2aWNlLmgKLS0tIGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdEZXZpY2UuaAky
MiBOb3YgMjAwNSAyMzowNDoyNyAtMDAwMAkxLjYKKysrIGtjYW52YXMvZGV2aWNlL0tSZW5kZXJp
bmdEZXZpY2UuaAk1IERlYyAyMDA1IDE0OjA2OjU3IC0wMDAwCkBAIC02MCwxMCArNjAsNiBAQCBw
dWJsaWM6CiAgICAgLy8gYWZ0ZXIgdGhlIGNhbnZhcyB0YXJnZXQsIGl0IG1heSBiZSBvdmVyd3Jp
dHRlbi4KICAgICB2aXJ0dWFsIGJvb2wgaXNCdWZmZXJlZCgpIGNvbnN0ID0gMDsKIAotICAgIC8v
IFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBsYXN0IGNvbnN0cnVjdGVkIHZlY3RvciBwYXRoCi0g
ICAgLy8gQ2FsbCBpdCBhZnRlciBzdGFydFBhdGgoKS4uLi5lbmRQYXRoKCkgdG8gZ2V0IHRoZSBy
ZXN1bHQhCi0gICAgS0NhbnZhc1VzZXJEYXRhIGN1cnJlbnRQYXRoKCkgY29uc3Q7Ci0KICAgICAv
LyBHbG9iYWwgcmVuZGVyaW5nIGRldmljZSBjb250ZXh0CiAgICAgS1JlbmRlcmluZ0RldmljZUNv
bnRleHQgKmN1cnJlbnRDb250ZXh0KCkgY29uc3Q7CiAKQEAgLTcxLDM1ICs2NywxOSBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB2b2lkIHB1c2hDb250ZXh0KEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0
ICpjb250ZXh0KTsKICAgICAKICAgICB2aXJ0dWFsIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0ICpj
b250ZXh0Rm9ySW1hZ2UoS0NhbnZhc0ltYWdlICppbWFnZSkgY29uc3QgPSAwOwotCi0gICAgLy8g
VmVjdG9yIHBhdGggY3JlYXRpb24KLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlUGF0aChLQ2FudmFz
VXNlckRhdGEgcGF0aCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzdGFydFBhdGgoKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIGVuZFBhdGgoKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgbW92ZVRv
KGRvdWJsZSB4LCBkb3VibGUgeSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBsaW5lVG8oZG91Ymxl
IHgsIGRvdWJsZSB5KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGN1cnZlVG8oZG91YmxlIHgxLCBk
b3VibGUgeTEsIGRvdWJsZSB4MiwgZG91YmxlIHkyLCBkb3VibGUgeDMsIGRvdWJsZSB5MykgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBjbG9zZVN1YnBhdGgoKSA9IDA7CiAgICAgCi0gICAgdmlydHVh
bCBRU3RyaW5nIHN0cmluZ0ZvclBhdGgoS0NhbnZhc1VzZXJEYXRhIHBhdGgpID0gMDsKKyAgICB2
aXJ0dWFsIFFTdHJpbmcgc3RyaW5nRm9yUGF0aChjb25zdCBLQ2FudmFzUGF0aCogcGF0aCkgPSAw
OwogCiAgICAgLy8gQ3JlYXRpb24gdG9vbHMKICAgICB2aXJ0dWFsIEtDYW52YXNSZXNvdXJjZSAq
Y3JlYXRlUmVzb3VyY2UoY29uc3QgS0NSZXNvdXJjZVR5cGUgJnR5cGUpIGNvbnN0ID0gMDsKICAg
ICB2aXJ0dWFsIEtDYW52YXNGaWx0ZXJFZmZlY3QgKmNyZWF0ZUZpbHRlckVmZmVjdChjb25zdCBL
Q0ZpbHRlckVmZmVjdFR5cGUgJnR5cGUpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIEtSZW5kZXJp
bmdQYWludFNlcnZlciAqY3JlYXRlUGFpbnRTZXJ2ZXIoY29uc3QgS0NQYWludFNlcnZlclR5cGUg
JnR5cGUpIGNvbnN0ID0gMDsKIAotICAgIHZpcnR1YWwgUmVuZGVyUGF0aCAqY3JlYXRlSXRlbShS
ZW5kZXJBcmVuYSAqYXJlbmEsIGtodG1sOjpSZW5kZXJTdHlsZSAqc3R5bGUsIEtTVkc6OlNWR1N0
eWxlZEVsZW1lbnRJbXBsICpub2RlLCBLQ2FudmFzVXNlckRhdGEgcGF0aCkgY29uc3QgPSAwOwor
ICAgIHZpcnR1YWwgUmVuZGVyUGF0aCAqY3JlYXRlSXRlbShSZW5kZXJBcmVuYSAqYXJlbmEsIGto
dG1sOjpSZW5kZXJTdHlsZSAqc3R5bGUsIEtTVkc6OlNWR1N0eWxlZEVsZW1lbnRJbXBsICpub2Rl
LCBLQ2FudmFzUGF0aCogcGF0aCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgS0NhbnZhc0NvbnRh
aW5lciAqY3JlYXRlQ29udGFpbmVyKFJlbmRlckFyZW5hICphcmVuYSwga2h0bWw6OlJlbmRlclN0
eWxlICpzdHlsZSwgS1NWRzo6U1ZHU3R5bGVkRWxlbWVudEltcGwgKm5vZGUpIGNvbnN0ID0gMDsK
LQotCi1wcm90ZWN0ZWQ6IC8vIFRvIGJlIHVzZWQgYnkgZnJvbSBpbmhlcml0ZWQgZW5kUGF0aCgp
Ci0gICAgZnJpZW5kIGNsYXNzIFJlbmRlclBhdGg7Ci0KLSAgICB2b2lkIHNldEN1cnJlbnRQYXRo
KEtDYW52YXNVc2VyRGF0YSBwYXRoKTsKKyAgICB2aXJ0dWFsIEtDYW52YXNQYXRoKiBjcmVhdGVQ
YXRoKCkgY29uc3QgPSAwOwogCiBwcml2YXRlOgotICAgIEtDYW52YXNVc2VyRGF0YSBtX2N1cnJl
bnRQYXRoOwogICAgIFEzUHRyU3RhY2s8S1JlbmRlcmluZ0RldmljZUNvbnRleHQ+IG1fY29udGV4
dFN0YWNrOwogfTsKIApJbmRleDoga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNJdGVtUXVh
cnR6Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tjYW52YXMv
ZGV2aWNlL3F1YXJ0ei9LQ2FudmFzSXRlbVF1YXJ0ei5tbSx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4xMwpkaWZmIC1wIC11IC1yMS4xMyBrY2FudmFzL2RldmljZS9xdWFydHovS0NhbnZhc0l0ZW1R
dWFydHoubW0KLS0tIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LQ2FudmFzSXRlbVF1YXJ0ei5tbQky
OSBOb3YgMjAwNSAxMToyMDo0MiAtMDAwMAkxLjEzCisrKyBrY2FudmFzL2RldmljZS9xdWFydHov
S0NhbnZhc0l0ZW1RdWFydHoubW0JNSBEZWMgMjAwNSAxNDowNjo1OCAtMDAwMApAQCAtMzUsNiAr
MzUsNyBAQAogI2ltcG9ydCAiS1JlbmRlcmluZ1N0cm9rZVBhaW50ZXIuaCIKICNpbXBvcnQgIktD
YW52YXNNYXRyaXguaCIKIAorI2ltcG9ydCAiS0NhbnZhc1BhdGhRdWFydHouaCIKICNpbXBvcnQg
IktSZW5kZXJpbmdEZXZpY2VRdWFydHouaCIKICNpbXBvcnQgIktDYW52YXNGaWx0ZXJRdWFydHou
aCIKICNpbXBvcnQgIktDYW52YXNSZXNvdXJjZXNRdWFydHouaCIKQEAgLTIwMyw3ICsyMDQsNyBA
QCB2b2lkIEtDYW52YXNJdGVtUXVhcnR6OjpwYWludChQYWludEluZm8gCiAgICAgCiAgICAgUmVu
ZGVyUGF0aDo6c2V0dXBGb3JEcmF3KCk7CiAKLSAgICBDR011dGFibGVQYXRoUmVmIGNnUGF0aCA9
IHN0YXRpY19jYXN0PEtDYW52YXNRdWFydHpQYXRoRGF0YSAqPihwYXRoKCkpLT5wYXRoOworICAg
IENHUGF0aFJlZiBjZ1BhdGggPSBzdGF0aWNfY2FzdDxLQ2FudmFzUGF0aFF1YXJ0eio+KHBhdGgo
KSktPmNnUGF0aCgpOwogICAgIEFTU0VSVChjZ1BhdGggIT0gMCk7CiAKICAgICBDR0FmZmluZVRy
YW5zZm9ybSB0cmFuc2Zvcm0gPSBDR0FmZmluZVRyYW5zZm9ybShsb2NhbFRyYW5zZm9ybSgpKTsK
QEAgLTI4OCw4ICsyODksNyBAQCBDR0NvbnRleHRSZWYgZ2V0U2hhcmVkQ29udGV4dCgpCiAKIFFS
ZWN0IEtDYW52YXNJdGVtUXVhcnR6OjpiYm94Rm9yUGF0aChib29sIGluY2x1ZGVTdHJva2UpIGNv
bnN0CiB7Ci0gICAgS0NhbnZhc1F1YXJ0elBhdGhEYXRhICpwYXRoRGF0YSA9IHN0YXRpY19jYXN0
PEtDYW52YXNRdWFydHpQYXRoRGF0YSAqPihwYXRoKCkpOwotICAgIENHTXV0YWJsZVBhdGhSZWYg
Y2dQYXRoID0gcGF0aERhdGEtPnBhdGg7CisgICAgQ0dQYXRoUmVmIGNnUGF0aCA9IHN0YXRpY19j
YXN0PEtDYW52YXNQYXRoUXVhcnR6Kj4ocGF0aCgpKS0+Y2dQYXRoKCk7CiAgICAgQVNTRVJUKGNn
UGF0aCAhPSAwKTsKICAgICBDR1JlY3QgYmJveDsKIApAQCAtMzE3LDcgKzMxNyw3IEBAIFFSZWN0
IEtDYW52YXNJdGVtUXVhcnR6OjpiYm94Rm9yUGF0aChib28KIAogYm9vbCBLQ2FudmFzSXRlbVF1
YXJ0ejo6aGl0c1BhdGgoY29uc3QgUVBvaW50ICZoaXRQb2ludCwgYm9vbCBmaWxsKSBjb25zdAog
ewotICAgIENHTXV0YWJsZVBhdGhSZWYgY2dQYXRoID0gc3RhdGljX2Nhc3Q8S0NhbnZhc1F1YXJ0
elBhdGhEYXRhICo+KHBhdGgoKSktPnBhdGg7CisgICAgQ0dQYXRoUmVmIGNnUGF0aCA9IHN0YXRp
Y19jYXN0PEtDYW52YXNQYXRoUXVhcnR6Kj4ocGF0aCgpKS0+Y2dQYXRoKCk7CiAgICAgQVNTRVJU
KGNnUGF0aCAhPSAwKTsKIAogICAgIGJvb2wgaGl0U3VjY2VzcyA9IGZhbHNlOwpJbmRleDoga2Nh
bnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNQYXRoUXVhcnR6LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZToga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNQYXRoUXVhcnR6LmgKZGlmZiAtTiBrY2Fu
dmFzL2RldmljZS9xdWFydHovS0NhbnZhc1BhdGhRdWFydHouaAotLS0ga2NhbnZhcy9kZXZpY2Uv
cXVhcnR6L0tDYW52YXNQYXRoUXVhcnR6LmgJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysg
a2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNQYXRoUXVhcnR6LmgJNSBEZWMgMjAwNSAxNDow
Njo1OCAtMDAwMApAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1IEFw
cGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSA8a2NhbnZhcy9LQ2FudmFzUGF0aC5oPgorCit0eXBlZGVmIHN0cnVjdCBDR1BhdGggKkNHTXV0
YWJsZVBhdGhSZWY7Cit0eXBlZGVmIGNvbnN0IHN0cnVjdCBDR1BhdGggKkNHUGF0aFJlZjsKKwor
Y2xhc3MgS0NhbnZhc1BhdGhRdWFydHogOiBwdWJsaWMgS0NhbnZhc1BhdGggeworcHVibGljOgor
ICAgIEtDYW52YXNQYXRoUXVhcnR6KCk7CisgICAgdmlydHVhbCB+S0NhbnZhc1BhdGhRdWFydHoo
KTsKKyAgICAKKyAgICB2aXJ0dWFsIGJvb2wgaXNFbXB0eSgpIGNvbnN0OworCisgICAgdmlydHVh
bCB2b2lkIG1vdmVUbyhkb3VibGUgeCwgZG91YmxlIHkpOworICAgIHZpcnR1YWwgdm9pZCBsaW5l
VG8oZG91YmxlIHgsIGRvdWJsZSB5KTsKKyAgICB2aXJ0dWFsIHZvaWQgY3VydmVUbyhkb3VibGUg
eDEsIGRvdWJsZSB5MSwgZG91YmxlIHgyLCBkb3VibGUgeTIsIGRvdWJsZSB4MywgZG91YmxlIHkz
KTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xvc2VTdWJwYXRoKCk7CisgICAgCisgICAgQ0dQYXRoUmVm
IGNnUGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fY2dQYXRoOyB9CisgICAgCitwcml2YXRlOgorICAg
IENHTXV0YWJsZVBhdGhSZWYgbV9jZ1BhdGg7Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZp
bGUKSW5kZXg6IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LQ2FudmFzUGF0aFF1YXJ0ei5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiBrY2FudmFzL2RldmljZS9xdWFydHovS0NhbnZhc1BhdGhRdWFydHou
bW0KZGlmZiAtTiBrY2FudmFzL2RldmljZS9xdWFydHovS0NhbnZhc1BhdGhRdWFydHoubW0KLS0t
IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LQ2FudmFzUGF0aFF1YXJ0ei5tbQkxIEphbiAxOTcwIDAw
OjAwOjAwIC0wMDAwCisrKyBrY2FudmFzL2RldmljZS9xdWFydHovS0NhbnZhc1BhdGhRdWFydHou
bW0JNSBEZWMgMjAwNSAxNDowNjo1OCAtMDAwMApAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiS0NhbnZhc1BhdGhRdWFy
dHouaCIKKworS0NhbnZhc1BhdGhRdWFydHo6OktDYW52YXNQYXRoUXVhcnR6KCkKK3sKKyAgICBt
X2NnUGF0aCA9IENHUGF0aENyZWF0ZU11dGFibGUoKTsKK30KKworS0NhbnZhc1BhdGhRdWFydHo6
On5LQ2FudmFzUGF0aFF1YXJ0eigpCit7CisgICAgQ0dQYXRoUmVsZWFzZShtX2NnUGF0aCk7Cit9
CisKK2Jvb2wgS0NhbnZhc1BhdGhRdWFydHo6OmlzRW1wdHkoKSBjb25zdAoreworICAgIHJldHVy
biBDR1BhdGhJc0VtcHR5KG1fY2dQYXRoKTsKK30KKwordm9pZCBLQ2FudmFzUGF0aFF1YXJ0ejo6
bW92ZVRvKGRvdWJsZSB4LCBkb3VibGUgeSkKK3sKKyAgICBDR1BhdGhNb3ZlVG9Qb2ludChtX2Nn
UGF0aCwgMCwgKGZsb2F0KXgsIChmbG9hdCl5KTsKK30KKwordm9pZCBLQ2FudmFzUGF0aFF1YXJ0
ejo6bGluZVRvKGRvdWJsZSB4LCBkb3VibGUgeSkKK3sKKyAgICBDR1BhdGhBZGRMaW5lVG9Qb2lu
dChtX2NnUGF0aCwgMCwgKGZsb2F0KXgsIChmbG9hdCl5KTsKK30KKwordm9pZCBLQ2FudmFzUGF0
aFF1YXJ0ejo6Y3VydmVUbyhkb3VibGUgeDEsIGRvdWJsZSB5MSwgZG91YmxlIHgyLCBkb3VibGUg
eTIsIGRvdWJsZSB4MywgZG91YmxlIHkzKQoreworICAgIENHUGF0aEFkZEN1cnZlVG9Qb2ludCht
X2NnUGF0aCwgMCwgKGZsb2F0KXgxLCAoZmxvYXQpeTEsIChmbG9hdCl4MiwgKGZsb2F0KXkyLCAo
ZmxvYXQpeDMsIChmbG9hdCl5Myk7Cit9CisKK3ZvaWQgS0NhbnZhc1BhdGhRdWFydHo6OmNsb3Nl
U3VicGF0aCgpCit7CisgICAgQ0dQYXRoQ2xvc2VTdWJwYXRoKG1fY2dQYXRoKTsKK30KSW5kZXg6
IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LQ2FudmFzUmVzb3VyY2VzUXVhcnR6Lm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tjYW52YXMvZGV2aWNlL3F1YXJ0ei9L
Q2FudmFzUmVzb3VyY2VzUXVhcnR6Lm1tLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjExCmRpZmYg
LXAgLXUgLXIxLjExIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LQ2FudmFzUmVzb3VyY2VzUXVhcnR6
Lm1tCi0tLSBrY2FudmFzL2RldmljZS9xdWFydHovS0NhbnZhc1Jlc291cmNlc1F1YXJ0ei5tbQky
OSBOb3YgMjAwNSAxMToyMDo0MiAtMDAwMAkxLjExCisrKyBrY2FudmFzL2RldmljZS9xdWFydHov
S0NhbnZhc1Jlc291cmNlc1F1YXJ0ei5tbQk1IERlYyAyMDA1IDE0OjA2OjU5IC0wMDAwCkBAIC0z
MSw0MCArMzEsMTMgQEAKICNpbXBvcnQgIlNWR1JlbmRlclN0eWxlLmgiCiAjaW1wb3J0ICJLQ2Fu
dmFzTWF0cml4LmgiCiAKKyNpbXBvcnQgIktDYW52YXNQYXRoUXVhcnR6LmgiCiAjaW1wb3J0ICJL
UmVuZGVyaW5nRGV2aWNlUXVhcnR6LmgiCiAjaW1wb3J0ICJLQ2FudmFzRmlsdGVyUXVhcnR6Lmgi
CiAjaW1wb3J0ICJRdWFydHpTdXBwb3J0LmgiCiAKICNpbXBvcnQgPGt4bWxjb3JlL0Fzc2VydGlv
bnMuaD4KIAotQ0dQYXRoUmVmIENHUGF0aEZyb21LQ1BhdGhEYXRhTGlzdChLQ1BhdGhEYXRhTGlz
dCBwYXRoRGF0YSkKLXsKLSAgICBDR011dGFibGVQYXRoUmVmIHBhdGggPSBDR1BhdGhDcmVhdGVN
dXRhYmxlKCk7Ci0KLSAgICBLQ1BhdGhEYXRhTGlzdDo6Q29uc3RJdGVyYXRvciBpdCA9IHBhdGhE
YXRhLmJlZ2luKCk7Ci0gICAgS0NQYXRoRGF0YUxpc3Q6OkNvbnN0SXRlcmF0b3IgZW5kID0gcGF0
aERhdGEuZW5kKCk7Ci0gICAgZm9yKDsgaXQgIT0gZW5kOyArK2l0KQotICAgIHsKLSAgICAgICAg
S0NQYXRoRGF0YSBkYXRhID0gKml0OwotICAgICAgICAKLSAgICAgICAgc3dpdGNoIChkYXRhLmNt
ZCkgewotICAgICAgICBjYXNlIENNRF9NT1ZFOiAKLSAgICAgICAgICAgIENHUGF0aE1vdmVUb1Bv
aW50KHBhdGgsIE5VTEwsIGRhdGEueDMsIGRhdGEueTMpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgQ01EX0xJTkU6Ci0gICAgICAgICAgICBDR1BhdGhBZGRMaW5lVG9Qb2ludChw
YXRoLCBOVUxMLCBkYXRhLngzLCBkYXRhLnkzKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIENNRF9DVVJWRToKLSAgICAgICAgICAgIENHUGF0aEFkZEN1cnZlVG9Qb2ludChwYXRo
LCBOVUxMLCBkYXRhLngxLCBkYXRhLnkxLCBkYXRhLngyLCBkYXRhLnkyLCBkYXRhLngzLCBkYXRh
LnkzKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENNRF9DTE9TRV9TVUJQQVRI
OgotICAgICAgICAgICAgQ0dQYXRoQ2xvc2VTdWJwYXRoKHBhdGgpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHBhdGg7Ci19Ci0KIHZvaWQgS0NhbnZh
c0NvbnRhaW5lclF1YXJ0ejo6Y2FsY01pbk1heFdpZHRoKCkKIHsKICAgICBLSFRNTEFzc2VydCgg
IW1pbk1heEtub3duKCkpOwpAQCAtMjE3LDE2ICsxOTAsMTMgQEAgUU1hdHJpeCBLQ2FudmFzQ29u
dGFpbmVyUXVhcnR6OjphYnNvbHV0ZQogCiB2b2lkIEtDYW52YXNDbGlwcGVyUXVhcnR6OjphcHBs
eUNsaXAoQ0dDb250ZXh0UmVmIGNvbnRleHQsIENHUmVjdCByZWxhdGl2ZUJCb3gpIGNvbnN0CiB7
Ci0gICAgLy8gRklYTUU6IHVudGlsIHRoZSBwYXRoIHJlcHJlc2VudGF0aW9uIGlzIGZpeGVkIGlu
Ci0gICAgLy8gS0NhbnZhcywgd2UgaGF2ZSB0byBjb252ZXJ0IGEgS0NQYXRoRGF0YUxpc3QgdG8g
YSBDR1BhdGgKLQogICAgIGlmIChtX2NsaXBEYXRhLmNvdW50KCkgPCAxKSB7CiAgICAgICAgIE5T
TG9nKEAiV0FSTklORzogQXBwbHlpbmcgZW1wdHkgY2xpcHBlciwgaWdub3JpbmcuIik7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKICAgICBCT09MIGhldGVyb2dlbm91c0NsaXBSdWxlcyA9IE5P
OwotICAgIEtDV2luZFJ1bGUgY2xpcFJ1bGUgPSBtX2NsaXBEYXRhWzBdLnJ1bGU7CisgICAgS0NX
aW5kUnVsZSBjbGlwUnVsZSA9IG1fY2xpcERhdGFbMF0ud2luZFJ1bGU7CiAKICAgICBDR0NvbnRl
eHRCZWdpblBhdGgoY29udGV4dCk7CiAKQEAgLTIzNCwxNSArMjA0LDE1IEBAIHZvaWQgS0NhbnZh
c0NsaXBwZXJRdWFydHo6OmFwcGx5Q2xpcChDR0MKIAogICAgIGZvciAodW5zaWduZWQgaW50IHgg
PSAwOyB4IDwgbV9jbGlwRGF0YS5jb3VudCgpOyB4KyspIHsKICAgICAgICAgS0NDbGlwRGF0YSBk
YXRhID0gbV9jbGlwRGF0YVt4XTsKLSAgICAgICAgaWYgKGRhdGEucnVsZSAhPSBjbGlwUnVsZSkK
KyAgICAgICAgaWYgKGRhdGEud2luZFJ1bGUgIT0gY2xpcFJ1bGUpCiAgICAgICAgICAgICBoZXRl
cm9nZW5vdXNDbGlwUnVsZXMgPSBZRVM7Ci0KLSAgICAgICAgQ0dQYXRoUmVmIGNsaXBQYXRoID0g
Q0dQYXRoRnJvbUtDUGF0aERhdGFMaXN0KGRhdGEucGF0aCk7CiAgICAgICAgIAorICAgICAgICBL
Q2FudmFzUGF0aFF1YXJ0eiAqcGF0aCA9IHN0YXRpY19jYXN0PEtDYW52YXNQYXRoUXVhcnR6Kj4o
ZGF0YS5wYXRoLmdldCgpKTsgICAgICAgIAorICAgICAgICBDR1BhdGhSZWYgY2xpcFBhdGggPSBz
dGF0aWNfY2FzdDxLQ2FudmFzUGF0aFF1YXJ0eio+KHBhdGgpLT5jZ1BhdGgoKTsKICAgICAgICAg
aWYgKENHUGF0aElzRW1wdHkoY2xpcFBhdGgpKSAvLyBGSVhNRTogb2NjYXNpb25hbGx5IHdlIGdl
dCBlbXB0eSBjbGlwIHBhdGhzLi4uCiAgICAgICAgICAgICBOU0xvZyhAIldBUk5JTkc6IEFza2Vk
IHRvIGNsaXAgYW4gZW1wdHkgcGF0aCwgaWdub3JpbmcuIik7CiAKLSAgICAgICAgaWYgKGRhdGEu
YmJveCkgeworICAgICAgICBpZiAoZGF0YS5iYm94VW5pdHMpIHsKICAgICAgICAgICAgIENHUGF0
aFJlZiB0cmFuc2Zvcm1lZFBhdGggPSBDR1BhdGhBcHBseVRyYW5zZm9ybShjbGlwUGF0aCwgYmJv
eFRyYW5zZm9ybSk7CiAgICAgICAgICAgICBDR1BhdGhSZWxlYXNlKGNsaXBQYXRoKTsKICAgICAg
ICAgICAgIGNsaXBQYXRoID0gdHJhbnNmb3JtZWRQYXRoOwpAQCAtMjYwLDcgKzIzMCw3IEBAIHZv
aWQgS0NhbnZhc0NsaXBwZXJRdWFydHo6OmFwcGx5Q2xpcChDR0MKICAgICAgICAgICAgIE5TTG9n
KEAiV0FSTklORzogUXVhcnR6IGRvZXMgbm90IHlldCBzdXBwb3J0IGhldGVyb2dlbm91cyBjbGlw
IHJ1bGVzLCBjbGlwcGluZyB3aWxsIGJlIGluY29ycmVjdC4iKTsKICAgICAgICAgICAgICAgICAK
ICAgICAgICAgaWYgKCFDR0NvbnRleHRJc1BhdGhFbXB0eShjb250ZXh0KSkgewotICAgICAgICAg
ICAgaWYgKG1fY2xpcERhdGFbMF0ucnVsZSA9PSBSVUxFX0VWRU5PREQpCisgICAgICAgICAgICBp
ZiAoY2xpcFJ1bGUgPT0gUlVMRV9FVkVOT0REKQogICAgICAgICAgICAgICAgIENHQ29udGV4dEVP
Q2xpcChjb250ZXh0KTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBDR0NvbnRl
eHRDbGlwKGNvbnRleHQpOwpJbmRleDoga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tSZW5kZXJpbmdE
ZXZpY2VRdWFydHouaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9r
Y2FudmFzL2RldmljZS9xdWFydHovS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5oLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjYKZGlmZiAtcCAtdSAtcjEuNiBrY2FudmFzL2RldmljZS9xdWFydHovS1Jl
bmRlcmluZ0RldmljZVF1YXJ0ei5oCi0tLSBrY2FudmFzL2RldmljZS9xdWFydHovS1JlbmRlcmlu
Z0RldmljZVF1YXJ0ei5oCTIyIE5vdiAyMDA1IDIzOjA0OjI3IC0wMDAwCTEuNgorKysga2NhbnZh
cy9kZXZpY2UvcXVhcnR6L0tSZW5kZXJpbmdEZXZpY2VRdWFydHouaAk1IERlYyAyMDA1IDE0OjA2
OjU5IC0wMDAwCkBAIC02MSw3ICs2MSw2IEBAIHByaXZhdGU6CiAKIGNsYXNzIEtSZW5kZXJpbmdE
ZXZpY2VRdWFydHogOiBwdWJsaWMgS1JlbmRlcmluZ0RldmljZQogewotUV9PQkpFQ1QKIHB1Ymxp
YzoKICAgICBLUmVuZGVyaW5nRGV2aWNlUXVhcnR6KCkgeyB9CiAgICAgdmlydHVhbCB+S1JlbmRl
cmluZ0RldmljZVF1YXJ0eigpIHsgfQpAQCAtNzYsMjcgKzc1LDE2IEBAIHB1YmxpYzoKICAgICBD
R0NvbnRleHRSZWYgY3VycmVudENHQ29udGV4dCgpIGNvbnN0OwogICAgIHZpcnR1YWwgS1JlbmRl
cmluZ0RldmljZUNvbnRleHQgKmNvbnRleHRGb3JJbWFnZShLQ2FudmFzSW1hZ2UgKikgY29uc3Q7
CiAKLSAgICAvLyBWZWN0b3IgcGF0aCBjcmVhdGlvbgotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVQ
YXRoKEtDYW52YXNVc2VyRGF0YSBwYXRoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc3RhcnRQYXRoKCk7
Ci0gICAgdmlydHVhbCB2b2lkIGVuZFBhdGgoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBtb3ZlVG8o
ZG91YmxlIHgsIGRvdWJsZSB5KTsKLSAgICB2aXJ0dWFsIHZvaWQgbGluZVRvKGRvdWJsZSB4LCBk
b3VibGUgeSk7Ci0gICAgdmlydHVhbCB2b2lkIGN1cnZlVG8oZG91YmxlIHgxLCBkb3VibGUgeTEs
IGRvdWJsZSB4MiwgZG91YmxlIHkyLCBkb3VibGUgeDMsIGRvdWJsZSB5Myk7Ci0gICAgdmlydHVh
bCB2b2lkIGNsb3NlU3VicGF0aCgpOwotICAgIAotICAgIEtDYW52YXNVc2VyRGF0YSBwYXRoRm9y
UmVjdChjb25zdCBRUmVjdCAmKSBjb25zdDsKLSAgICAKLSAgICB2aXJ0dWFsIFFTdHJpbmcgc3Ry
aW5nRm9yUGF0aChLQ2FudmFzVXNlckRhdGEgcGF0aCk7CisgICAgdmlydHVhbCBRU3RyaW5nIHN0
cmluZ0ZvclBhdGgoY29uc3QgS0NhbnZhc1BhdGgqIHBhdGgpOwogCiAgICAgLy8gUmVzb3VyY2Ug
Y3JlYXRpb24KICAgICB2aXJ0dWFsIEtDYW52YXNSZXNvdXJjZSAqY3JlYXRlUmVzb3VyY2UoY29u
c3QgS0NSZXNvdXJjZVR5cGUgJnR5cGUpIGNvbnN0OwogICAgIHZpcnR1YWwgS1JlbmRlcmluZ1Bh
aW50U2VydmVyICpjcmVhdGVQYWludFNlcnZlcihjb25zdCBLQ1BhaW50U2VydmVyVHlwZSAmdHlw
ZSkgY29uc3Q7CiAgICAgdmlydHVhbCBLQ2FudmFzRmlsdGVyRWZmZWN0ICpjcmVhdGVGaWx0ZXJF
ZmZlY3QoY29uc3QgS0NGaWx0ZXJFZmZlY3RUeXBlICZ0eXBlKSBjb25zdDsKKyAgICB2aXJ0dWFs
IEtDYW52YXNQYXRoKiBjcmVhdGVQYXRoKCkgY29uc3Q7CiAgICAgCiAgICAgLy8gaXRlbSBjcmVh
dGlvbgotICAgIHZpcnR1YWwgUmVuZGVyUGF0aCAqY3JlYXRlSXRlbShSZW5kZXJBcmVuYSAqYXJl
bmEsIGtodG1sOjpSZW5kZXJTdHlsZSAqc3R5bGUsIEtTVkc6OlNWR1N0eWxlZEVsZW1lbnRJbXBs
ICpub2RlLCBLQ2FudmFzVXNlckRhdGEgcGF0aCkgY29uc3Q7CisgICAgdmlydHVhbCBSZW5kZXJQ
YXRoICpjcmVhdGVJdGVtKFJlbmRlckFyZW5hICphcmVuYSwga2h0bWw6OlJlbmRlclN0eWxlICpz
dHlsZSwgS1NWRzo6U1ZHU3R5bGVkRWxlbWVudEltcGwgKm5vZGUsIEtDYW52YXNQYXRoKiBwYXRo
KSBjb25zdDsKICAgICB2aXJ0dWFsIEtDYW52YXNDb250YWluZXIgKmNyZWF0ZUNvbnRhaW5lcihS
ZW5kZXJBcmVuYSAqYXJlbmEsIGtodG1sOjpSZW5kZXJTdHlsZSAqc3R5bGUsIEtTVkc6OlNWR1N0
eWxlZEVsZW1lbnRJbXBsICpub2RlKSBjb25zdDsKIAogICAgIC8vIGZpbHRlcnMgKG1vc3RseSBk
ZWJ1Z2dpbmcpCkBAIC0xMDYsMjMgKzk0LDQgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIEtS
ZW5kZXJpbmdEZXZpY2VRdWFydHo6OnNldEhhcmR3YXJlUmVuZGVyaW5nRW5hYmxlZChib29sIGVu
YWJsZWQpOwogfTsKIAotLy8gV3JhcHMgTlNCZXppZXJQYXRocyBmb3IgYysrIGNvbnN1bXB0aW9u
Ci1jbGFzcyBLQ2FudmFzUXVhcnR6UGF0aERhdGEKLXsKLXB1YmxpYzoKLSAgICBLQ2FudmFzUXVh
cnR6UGF0aERhdGEoKTsKLQotICAgIH5LQ2FudmFzUXVhcnR6UGF0aERhdGEoKTsKLQotICAgIENH
TXV0YWJsZVBhdGhSZWYgcGF0aDsKLSAgICBib29sIGhhc1ZhbGlkQkJveDsKLSAgICBDR1JlY3Qg
YmJveDsKLX07Ci0KLWNsYXNzIEtDYW52YXNRdWFydHpVc2VyRGF0YSA6IHB1YmxpYyBLQ2FudmFz
UHJpdmF0ZVVzZXJEYXRhIHsKLXB1YmxpYzogCi0gICAgS0NhbnZhc1F1YXJ0elVzZXJEYXRhKCk7
Ci0gICAgfktDYW52YXNRdWFydHpVc2VyRGF0YSgpOwotfTsKLQogI2VuZGlmCkluZGV4OiBrY2Fu
dmFzL2RldmljZS9xdWFydHovS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rY2FudmFzL2RldmljZS9xdWFydHovS1JlbmRl
cmluZ0RldmljZVF1YXJ0ei5tbSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS43CmRpZmYgLXAgLXUg
LXIxLjcga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tSZW5kZXJpbmdEZXZpY2VRdWFydHoubW0KLS0t
IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LUmVuZGVyaW5nRGV2aWNlUXVhcnR6Lm1tCTI4IE5vdiAy
MDA1IDIzOjMzOjU5IC0wMDAwCTEuNworKysga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tSZW5kZXJp
bmdEZXZpY2VRdWFydHoubW0JNSBEZWMgMjAwNSAxNDowNzowMCAtMDAwMApAQCAtMjUsNiArMjUs
NyBAQAogCiAKICNpbmNsdWRlICJjb25maWcuaCIKKyNpbXBvcnQgIktDYW52YXNQYXRoUXVhcnR6
LmgiCiAjaW1wb3J0ICJLUmVuZGVyaW5nRGV2aWNlUXVhcnR6LmgiCiAjaW1wb3J0ICJLQ2FudmFz
UmVzb3VyY2VzUXVhcnR6LmgiCiAjaW1wb3J0ICJLQ2FudmFzRmlsdGVyUXVhcnR6LmgiCkBAIC00
MSwxOCArNDIsNiBAQAogCiAjaW1wb3J0ICJLV1FMb2dnaW5nLmgiCiAKLQotS0NhbnZhc1F1YXJ0
elBhdGhEYXRhOjpLQ2FudmFzUXVhcnR6UGF0aERhdGEoKQotewotCXBhdGggPSBDR1BhdGhDcmVh
dGVNdXRhYmxlKCk7Ci0JaGFzVmFsaWRCQm94ID0gZmFsc2U7Ci19Ci0KLUtDYW52YXNRdWFydHpQ
YXRoRGF0YTo6fktDYW52YXNRdWFydHpQYXRoRGF0YSgpCi17Ci0JQ0dQYXRoUmVsZWFzZShwYXRo
KTsKLX0KLQogS1JlbmRlcmluZ0RldmljZUNvbnRleHRRdWFydHo6OktSZW5kZXJpbmdEZXZpY2VD
b250ZXh0UXVhcnR6KENHQ29udGV4dFJlZiBjb250ZXh0KSA6IG1fY2dDb250ZXh0KENHQ29udGV4
dFJldGFpbihjb250ZXh0KSksIG1fbnNHcmFwaGljc0NvbnRleHQoMCkKIHsKICAgICBBU1NFUlQo
bV9jZ0NvbnRleHQpOwpAQCAtMTU0LDEwICsxNDMsNiBAQCBLUmVuZGVyaW5nRGV2aWNlQ29udGV4
dCAqS1JlbmRlcmluZ0RldmljCiAgICAgcmV0dXJuIHBvcHBlZENvbnRleHQ7CiB9CiAKLQotI3By
YWdtYSBtYXJrIC0KLSNwcmFnbWEgbWFyayBQYXRoIE1hbmFnZW1lbnQKLQogS1JlbmRlcmluZ0Rl
dmljZUNvbnRleHQgKktSZW5kZXJpbmdEZXZpY2VRdWFydHo6OmNvbnRleHRGb3JJbWFnZShLQ2Fu
dmFzSW1hZ2UgKmltYWdlKSBjb25zdAogewogICAgIEtDYW52YXNJbWFnZVF1YXJ0eiAqcXVhcnR6
SW1hZ2UgPSBzdGF0aWNfY2FzdDxLQ2FudmFzSW1hZ2VRdWFydHogKj4oaW1hZ2UpOwpAQCAtMTcz
LDc1ICsxNTgsMjEgQEAgS1JlbmRlcmluZ0RldmljZUNvbnRleHQgKktSZW5kZXJpbmdEZXZpYwog
ICAgIHJldHVybiBuZXcgS1JlbmRlcmluZ0RldmljZUNvbnRleHRRdWFydHooQ0dMYXllckdldENv
bnRleHQoY2dMYXllcikpOwogfQogCi12b2lkIEtSZW5kZXJpbmdEZXZpY2VRdWFydHo6OmRlbGV0
ZVBhdGgoS0NhbnZhc1VzZXJEYXRhIHBhdGhEYXRhKQotewotCUtDYW52YXNRdWFydHpQYXRoRGF0
YSAqZGF0YSA9IHN0YXRpY19jYXN0PEtDYW52YXNRdWFydHpQYXRoRGF0YSAqPihwYXRoRGF0YSk7
Ci0JQVNTRVJUKGRhdGEgIT0gMCk7Ci0JCi0JZGVsZXRlIGRhdGE7Ci19Ci0KLXZvaWQgS1JlbmRl
cmluZ0RldmljZVF1YXJ0ejo6c3RhcnRQYXRoKCkKLXsKLQlzZXRDdXJyZW50UGF0aChuZXcgS0Nh
bnZhc1F1YXJ0elBhdGhEYXRhKCkpOwotfQotCi12b2lkIEtSZW5kZXJpbmdEZXZpY2VRdWFydHo6
OmVuZFBhdGgoKQotewotCS8vIE5PT1AgZm9yIFF1YXJ0ei4KLX0KLQotdm9pZCBLUmVuZGVyaW5n
RGV2aWNlUXVhcnR6Ojptb3ZlVG8oZG91YmxlIHgsIGRvdWJsZSB5KQotewotCUNHTXV0YWJsZVBh
dGhSZWYgcGF0aCA9IHN0YXRpY19jYXN0PEtDYW52YXNRdWFydHpQYXRoRGF0YSAqPihjdXJyZW50
UGF0aCgpKS0+cGF0aDsKLQlBU1NFUlQocGF0aCAhPSAwKTsKLQotCUNHUGF0aE1vdmVUb1BvaW50
KHBhdGgsTlVMTCx4LCB5KTsKLX0KLQotdm9pZCBLUmVuZGVyaW5nRGV2aWNlUXVhcnR6OjpsaW5l
VG8oZG91YmxlIHgsIGRvdWJsZSB5KQotewotCUtDYW52YXNRdWFydHpQYXRoRGF0YSAqcGF0aERh
dGEgPSBzdGF0aWNfY2FzdDxLQ2FudmFzUXVhcnR6UGF0aERhdGEgKj4oY3VycmVudFBhdGgoKSk7
Ci0JQ0dNdXRhYmxlUGF0aFJlZiBwYXRoID0gcGF0aERhdGEtPnBhdGg7Ci0JQVNTRVJUKHBhdGgg
IT0gMCk7Ci0KLQlDR1BhdGhBZGRMaW5lVG9Qb2ludChwYXRoLE5VTEwseCwgeSk7Ci0JcGF0aERh
dGEtPmhhc1ZhbGlkQkJveCA9IGZhbHNlOwotfQotCi12b2lkIEtSZW5kZXJpbmdEZXZpY2VRdWFy
dHo6OmN1cnZlVG8oZG91YmxlIHgxLCBkb3VibGUgeTEsIGRvdWJsZSB4MiwgZG91YmxlIHkyLCBk
b3VibGUgZW5kWCwgZG91YmxlIGVuZFkpCi17Ci0JS0NhbnZhc1F1YXJ0elBhdGhEYXRhICpwYXRo
RGF0YSA9IHN0YXRpY19jYXN0PEtDYW52YXNRdWFydHpQYXRoRGF0YSAqPihjdXJyZW50UGF0aCgp
KTsKLQlDR011dGFibGVQYXRoUmVmIHBhdGggPSBwYXRoRGF0YS0+cGF0aDsKLQlBU1NFUlQocGF0
aCAhPSAwKTsKLQotCUNHUGF0aEFkZEN1cnZlVG9Qb2ludChwYXRoLCBOVUxMLCB4MSwgeTEsIHgy
LCB5MiwgZW5kWCwgZW5kWSk7Ci0JcGF0aERhdGEtPmhhc1ZhbGlkQkJveCA9IGZhbHNlOwotfQot
Ci12b2lkIEtSZW5kZXJpbmdEZXZpY2VRdWFydHo6OmNsb3NlU3VicGF0aCgpCi17Ci0JQ0dNdXRh
YmxlUGF0aFJlZiBwYXRoID0gc3RhdGljX2Nhc3Q8S0NhbnZhc1F1YXJ0elBhdGhEYXRhICo+KGN1
cnJlbnRQYXRoKCkpLT5wYXRoOwotCUFTU0VSVChwYXRoICE9IDApOwotCi0JQ0dQYXRoQ2xvc2VT
dWJwYXRoKHBhdGgpOwotfQorI3ByYWdtYSBtYXJrIC0KKyNwcmFnbWEgbWFyayBQYXRoIE1hbmFn
ZW1lbnQKIAotS0NhbnZhc1VzZXJEYXRhIEtSZW5kZXJpbmdEZXZpY2VRdWFydHo6OnBhdGhGb3JS
ZWN0KGNvbnN0IFFSZWN0ICZyZWN0KSBjb25zdAorS0NhbnZhc1BhdGgqIEtSZW5kZXJpbmdEZXZp
Y2VRdWFydHo6OmNyZWF0ZVBhdGgoKSBjb25zdAogewotCUtDYW52YXNRdWFydHpQYXRoRGF0YSAq
ZGF0YSA9IG5ldyBLQ2FudmFzUXVhcnR6UGF0aERhdGEoKTsKLQlDR1BhdGhBZGRSZWN0KGRhdGEt
PnBhdGgsIE5VTEwsIENHUmVjdE1ha2UocmVjdC54KCkscmVjdC55KCkscmVjdC53aWR0aCgpLHJl
Y3QuaGVpZ2h0KCkpKTsKLQlyZXR1cm4gZGF0YTsKKyAgICByZXR1cm4gbmV3IEtDYW52YXNQYXRo
UXVhcnR6KCk7CiB9CiAKLVFTdHJpbmcgS1JlbmRlcmluZ0RldmljZVF1YXJ0ejo6c3RyaW5nRm9y
UGF0aChLQ2FudmFzVXNlckRhdGEgcGF0aCkKK1FTdHJpbmcgS1JlbmRlcmluZ0RldmljZVF1YXJ0
ejo6c3RyaW5nRm9yUGF0aChjb25zdCBLQ2FudmFzUGF0aCAqcGF0aCkKIHsKICAgICBRU3RyaW5n
IHJlc3VsdDsKICAgICBpZiAocGF0aCkgewotICAgICAgICBDR011dGFibGVQYXRoUmVmIGNnUGF0
aCA9IHN0YXRpY19jYXN0PEtDYW52YXNRdWFydHpQYXRoRGF0YSAqPihwYXRoKS0+cGF0aDsKKyAg
ICAgICAgQ0dQYXRoUmVmIGNnUGF0aCA9IHN0YXRpY19jYXN0PGNvbnN0IEtDYW52YXNQYXRoUXVh
cnR6ICo+KHBhdGgpLT5jZ1BhdGgoKTsKICAgICAgICAgQ0ZTdHJpbmdSZWYgcGF0aFN0cmluZyA9
IENGU3RyaW5nRnJvbUNHUGF0aChjZ1BhdGgpOwogICAgICAgICByZXN1bHQgPSBRU3RyaW5nOjpm
cm9tQ0ZTdHJpbmcocGF0aFN0cmluZyk7Ci0gICAgICAgIENGUmVsZWFzZShwYXRoU3RyaW5nKTsK
ICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTI2OCw3ICsxOTksNyBAQCBLQ2FudmFz
Q29udGFpbmVyICpLUmVuZGVyaW5nRGV2aWNlUXVhcnR6CiAgICAgcmV0dXJuIG5ldyAoYXJlbmEp
IEtDYW52YXNDb250YWluZXJRdWFydHoobm9kZSk7CiB9CiAKLVJlbmRlclBhdGggKktSZW5kZXJp
bmdEZXZpY2VRdWFydHo6OmNyZWF0ZUl0ZW0oUmVuZGVyQXJlbmEgKmFyZW5hLCBraHRtbDo6UmVu
ZGVyU3R5bGUgKnN0eWxlLCBLU1ZHOjpTVkdTdHlsZWRFbGVtZW50SW1wbCAqbm9kZSwgS0NhbnZh
c1VzZXJEYXRhIHBhdGgpIGNvbnN0CitSZW5kZXJQYXRoICpLUmVuZGVyaW5nRGV2aWNlUXVhcnR6
OjpjcmVhdGVJdGVtKFJlbmRlckFyZW5hICphcmVuYSwga2h0bWw6OlJlbmRlclN0eWxlICpzdHls
ZSwgS1NWRzo6U1ZHU3R5bGVkRWxlbWVudEltcGwgKm5vZGUsIEtDYW52YXNQYXRoKiBwYXRoKSBj
b25zdAogewogICAgIFJlbmRlclBhdGggKml0ZW0gPSBuZXcgKGFyZW5hKSBLQ2FudmFzSXRlbVF1
YXJ0eihzdHlsZSwgbm9kZSk7CiAgICAgaXRlbS0+Y2hhbmdlUGF0aChwYXRoKTsKSW5kZXg6IGtz
dmcyL3N2Zy9TVkdDaXJjbGVFbGVtZW50SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvc3ZnL1NWR0NpcmNsZUVsZW1lbnRJbXBsLmNwcCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS44CmRpZmYgLXAgLXUgLXIxLjgga3N2ZzIvc3ZnL1NWR0NpcmNs
ZUVsZW1lbnRJbXBsLmNwcAotLS0ga3N2ZzIvc3ZnL1NWR0NpcmNsZUVsZW1lbnRJbXBsLmNwcAky
NiBOb3YgMjAwNSAyMjoxOTowNSAtMDAwMAkxLjgKKysrIGtzdmcyL3N2Zy9TVkdDaXJjbGVFbGVt
ZW50SW1wbC5jcHAJNSBEZWMgMjAwNSAxNDowNzowMiAtMDAwMApAQCAtNzUsNyArNzUsNyBAQCB2
b2lkIFNWR0NpcmNsZUVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0CiAgICAgfQogfQogCi1LQ1Bh
dGhEYXRhTGlzdCBTVkdDaXJjbGVFbGVtZW50SW1wbDo6dG9QYXRoRGF0YSgpIGNvbnN0CitLQ2Fu
dmFzUGF0aCogU1ZHQ2lyY2xlRWxlbWVudEltcGw6OnRvUGF0aERhdGEoKSBjb25zdAogewogICAg
IGZsb2F0IF9jeCA9IGN4KCktPmJhc2VWYWwoKS0+dmFsdWUoKSwgX2N5ID0gY3koKS0+YmFzZVZh
bCgpLT52YWx1ZSgpOwogICAgIGZsb2F0IF9yID0gcigpLT5iYXNlVmFsKCktPnZhbHVlKCk7Cklu
ZGV4OiBrc3ZnMi9zdmcvU1ZHQ2lyY2xlRWxlbWVudEltcGwuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9zdmcvU1ZHQ2lyY2xlRWxlbWVudEltcGwuaCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS44CmRpZmYgLXAgLXUgLXIxLjgga3N2ZzIvc3ZnL1NWR0Np
cmNsZUVsZW1lbnRJbXBsLmgKLS0tIGtzdmcyL3N2Zy9TVkdDaXJjbGVFbGVtZW50SW1wbC5oCTMg
RGVjIDIwMDUgMDE6MzI6MzMgLTAwMDAJMS44CisrKyBrc3ZnMi9zdmcvU1ZHQ2lyY2xlRWxlbWVu
dEltcGwuaAk1IERlYyAyMDA1IDE0OjA3OjAyIC0wMDAwCkBAIC01MCw3ICs1MCw3IEBAIG5hbWVz
cGFjZSBLU1ZHCiAgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShLRE9N
OjpNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKTsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgcmVu
ZGVyZXJJc05lZWRlZChraHRtbDo6UmVuZGVyU3R5bGUgKikgeyByZXR1cm4gdHJ1ZTsgfQotICAg
ICAgICB2aXJ0dWFsIEtDUGF0aERhdGFMaXN0IHRvUGF0aERhdGEoKSBjb25zdDsKKyAgICAgICAg
dmlydHVhbCBLQ2FudmFzUGF0aCogdG9QYXRoRGF0YSgpIGNvbnN0OwogCiAgICAgICAgIHZpcnR1
YWwgY29uc3QgU1ZHU3R5bGVkRWxlbWVudEltcGwgKnB1c2hBdHRyaWJ1dGVDb250ZXh0KGNvbnN0
IFNWR1N0eWxlZEVsZW1lbnRJbXBsICpjb250ZXh0KTsKIApJbmRleDoga3N2ZzIvc3ZnL1NWR0Ns
aXBQYXRoRWxlbWVudEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdT
dXBwb3J0L2tzdmcyL3N2Zy9TVkdDbGlwUGF0aEVsZW1lbnRJbXBsLmNwcCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4xMQpkaWZmIC1wIC11IC1yMS4xMSBrc3ZnMi9zdmcvU1ZHQ2xpcFBhdGhFbGVt
ZW50SW1wbC5jcHAKLS0tIGtzdmcyL3N2Zy9TVkdDbGlwUGF0aEVsZW1lbnRJbXBsLmNwcAkyNyBO
b3YgMjAwNSAxMTowMjoyMSAtMDAwMAkxLjExCisrKyBrc3ZnMi9zdmcvU1ZHQ2xpcFBhdGhFbGVt
ZW50SW1wbC5jcHAJNSBEZWMgMjAwNSAxNDowNzowMiAtMDAwMApAQCAtOTUsNyArOTUsOCBAQCBL
Q2FudmFzQ2xpcHBlciAqU1ZHQ2xpcFBhdGhFbGVtZW50SW1wbDo6CiAgICAgICAgIGlmIChlICYm
IGUtPmlzU3R5bGVkKCkpIHsKICAgICAgICAgICAgIFNWR1N0eWxlZEVsZW1lbnRJbXBsICpzdHls
ZWQgPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRFbGVtZW50SW1wbCAqPihlKTsKICAgICAgICAgICAg
IGtodG1sOjpSZW5kZXJTdHlsZSAqcGF0aFN0eWxlID0gZ2V0RG9jdW1lbnQoKS0+c3R5bGVTZWxl
Y3RvcigpLT5zdHlsZUZvckVsZW1lbnQoc3R5bGVkLCBjbGlwUGF0aFN0eWxlKTsKLSAgICAgICAg
ICAgIG1fY2xpcHBlci0+YWRkQ2xpcERhdGEoc3R5bGVkLT50b1BhdGhEYXRhKCksIChLQ1dpbmRS
dWxlKSBwYXRoU3R5bGUtPnN2Z1N0eWxlKCktPmNsaXBSdWxlKCksIGJib3gpOworICAgICAgICAg
ICAgaWYgKEtDYW52YXNQYXRoKiBwYXRoRGF0YSA9IHN0eWxlZC0+dG9QYXRoRGF0YSgpKQorICAg
ICAgICAgICAgICAgIG1fY2xpcHBlci0+YWRkQ2xpcERhdGEocGF0aERhdGEsIChLQ1dpbmRSdWxl
KSBwYXRoU3R5bGUtPnN2Z1N0eWxlKCktPmNsaXBSdWxlKCksIGJib3gpOwogICAgICAgICAgICAg
cGF0aFN0eWxlLT5kZXJlZihjYW52YXMoKS0+cmVuZGVyQXJlbmEoKSk7CiAgICAgICAgIH0KICAg
ICB9CkluZGV4OiBrc3ZnMi9zdmcvU1ZHRWxsaXBzZUVsZW1lbnRJbXBsLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9zdmcvU1ZHRWxsaXBzZUVsZW1l
bnRJbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS44CmRpZmYgLXAgLXUgLXIxLjgga3N2
ZzIvc3ZnL1NWR0VsbGlwc2VFbGVtZW50SW1wbC5jcHAKLS0tIGtzdmcyL3N2Zy9TVkdFbGxpcHNl
RWxlbWVudEltcGwuY3BwCTI2IE5vdiAyMDA1IDIyOjE5OjA2IC0wMDAwCTEuOAorKysga3N2ZzIv
c3ZnL1NWR0VsbGlwc2VFbGVtZW50SW1wbC5jcHAJNSBEZWMgMjAwNSAxNDowNzowMiAtMDAwMApA
QCAtODIsNyArODIsNyBAQCB2b2lkIFNWR0VsbGlwc2VFbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRB
CiAgICAgfQogfQogCi1LQ1BhdGhEYXRhTGlzdCBTVkdFbGxpcHNlRWxlbWVudEltcGw6OnRvUGF0
aERhdGEoKSBjb25zdAorS0NhbnZhc1BhdGgqIFNWR0VsbGlwc2VFbGVtZW50SW1wbDo6dG9QYXRo
RGF0YSgpIGNvbnN0CiB7CiAgICAgZmxvYXQgX2N4ID0gY3goKS0+YmFzZVZhbCgpLT52YWx1ZSgp
LCBfY3kgPSBjeSgpLT5iYXNlVmFsKCktPnZhbHVlKCk7CiAgICAgZmxvYXQgX3J4ID0gcngoKS0+
YmFzZVZhbCgpLT52YWx1ZSgpLCBfcnkgPSByeSgpLT5iYXNlVmFsKCktPnZhbHVlKCk7CkluZGV4
OiBrc3ZnMi9zdmcvU1ZHRWxsaXBzZUVsZW1lbnRJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvc3ZnL1NWR0VsbGlwc2VFbGVtZW50SW1wbC5oLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjgKZGlmZiAtcCAtdSAtcjEuOCBrc3ZnMi9zdmcvU1ZHRWxs
aXBzZUVsZW1lbnRJbXBsLmgKLS0tIGtzdmcyL3N2Zy9TVkdFbGxpcHNlRWxlbWVudEltcGwuaAkz
IERlYyAyMDA1IDAxOjMyOjM0IC0wMDAwCTEuOAorKysga3N2ZzIvc3ZnL1NWR0VsbGlwc2VFbGVt
ZW50SW1wbC5oCTUgRGVjIDIwMDUgMTQ6MDc6MDIgLTAwMDAKQEAgLTUxLDcgKzUxLDcgQEAgbmFt
ZXNwYWNlIEtTVkcKICAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEtE
T006Ok1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpOwogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBy
ZW5kZXJlcklzTmVlZGVkKGtodG1sOjpSZW5kZXJTdHlsZSAqKSB7IHJldHVybiB0cnVlOyB9Ci0g
ICAgICAgIHZpcnR1YWwgS0NQYXRoRGF0YUxpc3QgdG9QYXRoRGF0YSgpIGNvbnN0OworICAgICAg
ICB2aXJ0dWFsIEtDYW52YXNQYXRoKiB0b1BhdGhEYXRhKCkgY29uc3Q7CiAKICAgICAgICAgdmly
dHVhbCBjb25zdCBTVkdTdHlsZWRFbGVtZW50SW1wbCAqcHVzaEF0dHJpYnV0ZUNvbnRleHQoY29u
c3QgU1ZHU3R5bGVkRWxlbWVudEltcGwgKmNvbnRleHQpOwogCkluZGV4OiBrc3ZnMi9zdmcvU1ZH
SW1hZ2VFbGVtZW50SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1
cHBvcnQva3N2ZzIvc3ZnL1NWR0ltYWdlRWxlbWVudEltcGwuY3BwLHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjEyCmRpZmYgLXAgLXUgLXIxLjEyIGtzdmcyL3N2Zy9TVkdJbWFnZUVsZW1lbnRJbXBs
LmNwcAotLS0ga3N2ZzIvc3ZnL1NWR0ltYWdlRWxlbWVudEltcGwuY3BwCTI3IE5vdiAyMDA1IDEx
OjAyOjI2IC0wMDAwCTEuMTIKKysrIGtzdmcyL3N2Zy9TVkdJbWFnZUVsZW1lbnRJbXBsLmNwcAk1
IERlYyAyMDA1IDE0OjA3OjAzIC0wMDAwCkBAIC00OCw3ICs0OCw3IEBACiAjaW5jbHVkZSA8a2Nh
bnZhcy9LQ2FudmFzQ3JlYXRvci5oPgogI2luY2x1ZGUgPGtjYW52YXMvS0NhbnZhc0NvbnRhaW5l
ci5oPgogI2luY2x1ZGUgPGtjYW52YXMvS0NhbnZhc0ltYWdlLmg+Ci0jaW5jbHVkZSAiS0NhbnZh
c1JlbmRlcmluZ1N0eWxlLmgiCisjaW5jbHVkZSA8a2NhbnZhcy9LQ2FudmFzUGF0aC5oPgogI2lu
Y2x1ZGUgPGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdEZXZpY2UuaD4KICNpbmNsdWRlIDxrY2Fu
dmFzL2RldmljZS9LUmVuZGVyaW5nRmlsbFBhaW50ZXIuaD4KICNpbmNsdWRlIDxrY2FudmFzL2Rl
dmljZS9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJJbWFnZS5oPgpAQCAtMTQzLDEyICsxNDMsMTEgQEAg
a2h0bWw6OlJlbmRlck9iamVjdCAqU1ZHSW1hZ2VFbGVtZW50SW1wbAogICAgIGZsb2F0IF93aWR0
aCA9IHdpZHRoKCktPmJhc2VWYWwoKS0+dmFsdWUoKSwgX2hlaWdodCA9IGhlaWdodCgpLT5iYXNl
VmFsKCktPnZhbHVlKCk7CiAKICAgICAvLyBVc2UgZHVtbXkgcmVjdAotICAgIEtDUGF0aERhdGFM
aXN0IHBhdGhEYXRhID0gS0NhbnZhc0NyZWF0b3I6OnNlbGYoKS0+Y3JlYXRlUmVjdGFuZ2xlKF94
LCBfeSwgX3dpZHRoLCBfaGVpZ2h0KTsKLSAgICBpZihwYXRoRGF0YS5pc0VtcHR5KCkpCisgICAg
UmVmUHRyPEtDYW52YXNQYXRoPiBwYXRoRGF0YSA9IEtDYW52YXNDcmVhdG9yOjpzZWxmKCktPmNy
ZWF0ZVJlY3RhbmdsZShfeCwgX3ksIF93aWR0aCwgX2hlaWdodCk7CisgICAgaWYgKCFwYXRoRGF0
YSB8fCBwYXRoRGF0YS0+aXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gMDsKLQotICAgIEtDYW52
YXNVc2VyRGF0YSBwYXRoID0gS0NhbnZhc0NyZWF0b3I6OnNlbGYoKS0+Y3JlYXRlQ2FudmFzUGF0
aERhdGEoUVBhaW50ZXI6OnJlbmRlcmluZ0RldmljZSgpLCBwYXRoRGF0YSk7Ci0gICAgcmV0dXJu
IFFQYWludGVyOjpyZW5kZXJpbmdEZXZpY2UoKS0+Y3JlYXRlSXRlbShhcmVuYSwgc3R5bGUsIHRo
aXMsIHBhdGgpOworICAgIAorICAgIHJldHVybiBRUGFpbnRlcjo6cmVuZGVyaW5nRGV2aWNlKCkt
PmNyZWF0ZUl0ZW0oYXJlbmEsIHN0eWxlLCB0aGlzLCBwYXRoRGF0YS5nZXQoKSk7CiB9CiAKIHZv
aWQgU1ZHSW1hZ2VFbGVtZW50SW1wbDo6YXR0YWNoKCkKSW5kZXg6IGtzdmcyL3N2Zy9TVkdMaW5l
RWxlbWVudEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0
L2tzdmcyL3N2Zy9TVkdMaW5lRWxlbWVudEltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjgKZGlmZiAtcCAtdSAtcjEuOCBrc3ZnMi9zdmcvU1ZHTGluZUVsZW1lbnRJbXBsLmNwcAotLS0g
a3N2ZzIvc3ZnL1NWR0xpbmVFbGVtZW50SW1wbC5jcHAJMjYgTm92IDIwMDUgMjI6MTk6MTIgLTAw
MDAJMS44CisrKyBrc3ZnMi9zdmcvU1ZHTGluZUVsZW1lbnRJbXBsLmNwcAk1IERlYyAyMDA1IDE0
OjA3OjAzIC0wMDAwCkBAIC04Miw3ICs4Miw3IEBAIHZvaWQgU1ZHTGluZUVsZW1lbnRJbXBsOjpw
YXJzZU1hcHBlZEF0dHIKICAgICB9CiB9CiAKLUtDUGF0aERhdGFMaXN0IFNWR0xpbmVFbGVtZW50
SW1wbDo6dG9QYXRoRGF0YSgpIGNvbnN0CitLQ2FudmFzUGF0aCogU1ZHTGluZUVsZW1lbnRJbXBs
Ojp0b1BhdGhEYXRhKCkgY29uc3QKIHsKICAgICBmbG9hdCBfeDEgPSB4MSgpLT5iYXNlVmFsKCkt
PnZhbHVlKCksIF95MSA9IHkxKCktPmJhc2VWYWwoKS0+dmFsdWUoKTsKICAgICBmbG9hdCBfeDIg
PSB4MigpLT5iYXNlVmFsKCktPnZhbHVlKCksIF95MiA9IHkyKCktPmJhc2VWYWwoKS0+dmFsdWUo
KTsKSW5kZXg6IGtzdmcyL3N2Zy9TVkdMaW5lRWxlbWVudEltcGwuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9zdmcvU1ZHTGluZUVsZW1lbnRJbXBsLmgs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuOApkaWZmIC1wIC11IC1yMS44IGtzdmcyL3N2Zy9TVkdM
aW5lRWxlbWVudEltcGwuaAotLS0ga3N2ZzIvc3ZnL1NWR0xpbmVFbGVtZW50SW1wbC5oCTMgRGVj
IDIwMDUgMDE6MzI6MzkgLTAwMDAJMS44CisrKyBrc3ZnMi9zdmcvU1ZHTGluZUVsZW1lbnRJbXBs
LmgJNSBEZWMgMjAwNSAxNDowNzowMyAtMDAwMApAQCAtNTEsNyArNTEsNyBAQCBuYW1lc3BhY2Ug
S1NWRwogICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoS0RPTTo6TWFw
cGVkQXR0cmlidXRlSW1wbCAqYXR0cik7CiAKICAgICAgICAgdmlydHVhbCBib29sIHJlbmRlcmVy
SXNOZWVkZWQoa2h0bWw6OlJlbmRlclN0eWxlICopIHsgcmV0dXJuIHRydWU7IH0KLSAgICAgICAg
dmlydHVhbCBLQ1BhdGhEYXRhTGlzdCB0b1BhdGhEYXRhKCkgY29uc3Q7CisgICAgICAgIHZpcnR1
YWwgS0NhbnZhc1BhdGgqIHRvUGF0aERhdGEoKSBjb25zdDsKIAogICAgICAgICB2aXJ0dWFsIGNv
bnN0IFNWR1N0eWxlZEVsZW1lbnRJbXBsICpwdXNoQXR0cmlidXRlQ29udGV4dChjb25zdCBTVkdT
dHlsZWRFbGVtZW50SW1wbCAqY29udGV4dCk7CiAKSW5kZXg6IGtzdmcyL3N2Zy9TVkdQYXRoRWxl
bWVudEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tz
dmcyL3N2Zy9TVkdQYXRoRWxlbWVudEltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjkK
ZGlmZiAtcCAtdSAtcjEuOSBrc3ZnMi9zdmcvU1ZHUGF0aEVsZW1lbnRJbXBsLmNwcAotLS0ga3N2
ZzIvc3ZnL1NWR1BhdGhFbGVtZW50SW1wbC5jcHAJMjkgTm92IDIwMDUgMTE6MjA6NDcgLTAwMDAJ
MS45CisrKyBrc3ZnMi9zdmcvU1ZHUGF0aEVsZW1lbnRJbXBsLmNwcAk1IERlYyAyMDA1IDE0OjA3
OjA0IC0wMDAwCkBAIC00NSw2ICs0NSw3IEBACiAKICNpbmNsdWRlIDxrY2FudmFzL0tDYW52YXMu
aD4KICNpbmNsdWRlIDxrY2FudmFzL0tDYW52YXNDcmVhdG9yLmg+CisjaW5jbHVkZSA8a2NhbnZh
cy9kZXZpY2UvS1JlbmRlcmluZ0RldmljZS5oPgogCiBuYW1lc3BhY2UgS1NWRyB7CiAKQEAgLTM3
OCwxNCArMzc5LDE1IEBAIFNWR1BhdGhTZWdMaXN0SW1wbCAqU1ZHUGF0aEVsZW1lbnRJbXBsOjoK
ICAgICByZXR1cm4gMDsKIH0KIAotS0NQYXRoRGF0YUxpc3QgU1ZHUGF0aEVsZW1lbnRJbXBsOjp0
b1BhdGhEYXRhKCkgY29uc3QKKy8vIEZJWE1FOiBUaGlzIHByb2JhYmx5IGJlbG9uZ3Mgb24gU1ZH
UGF0aFNlZ0xpc3RJbXBsIGluc3RlYWQuIC0tIGVjcyAxMi81LzA1CitLQ2FudmFzUGF0aCogU1ZH
UGF0aEVsZW1lbnRJbXBsOjp0b1BhdGhEYXRhKCkgY29uc3QKIHsKICAgICAvLyBUT0RPIDogYWxz
byBzdXBwb3J0IG5vbi1ub3JtYWxpemVkIG1vZGUsIGF0IGxlYXN0IGluIGRvbSBzdHJ1Y3R1cmUK
LSAgICBLQ1BhdGhEYXRhTGlzdCBwYXRoRGF0YTsKICAgICBpbnQgbGVuID0gcGF0aFNlZ0xpc3Qo
KS0+bnVtYmVyT2ZJdGVtcygpOwogICAgIGlmKGxlbiA8IDEpCi0gICAgICAgIHJldHVybiBwYXRo
RGF0YTsKKyAgICAgICAgcmV0dXJuIDA7CiAKKyAgICBLQ2FudmFzUGF0aCogcGF0aERhdGEgPSBR
UGFpbnRlcjo6cmVuZGVyaW5nRGV2aWNlKCktPmNyZWF0ZVBhdGgoKTsKICAgICBmb3IoaW50IGkg
PSAwOyBpIDwgbGVuOyArK2kpCiAgICAgewogICAgICAgICBTVkdQYXRoU2VnSW1wbCAqcCA9IHBh
dGhTZWdMaXN0KCktPmdldEl0ZW0oaSk7CkBAIC0zOTQsMjUgKzM5NiwyNSBAQCBLQ1BhdGhEYXRh
TGlzdCBTVkdQYXRoRWxlbWVudEltcGw6OnRvUGF0CiAgICAgICAgICAgICBjYXNlIFBBVEhTRUdf
TU9WRVRPX0FCUzoKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBTVkdQYXRoU2VnTW92
ZXRvQWJzSW1wbCAqbW92ZVRvID0gc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ01vdmV0b0Fic0ltcGwg
Kj4ocCk7Ci0gICAgICAgICAgICAgICAgcGF0aERhdGEubW92ZVRvKG1vdmVUby0+eCgpLCBtb3Zl
VG8tPnkoKSk7CisgICAgICAgICAgICAgICAgcGF0aERhdGEtPm1vdmVUbyhtb3ZlVG8tPngoKSwg
bW92ZVRvLT55KCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgY2FzZSBQQVRIU0VHX0xJTkVUT19BQlM6CiAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgU1ZHUGF0aFNlZ0xpbmV0b0Fic0ltcGwgKmxpbmVUbyA9IHN0YXRpY19jYXN0PFNW
R1BhdGhTZWdMaW5ldG9BYnNJbXBsICo+KHApOwotICAgICAgICAgICAgICAgIHBhdGhEYXRhLmxp
bmVUbyhsaW5lVG8tPngoKSwgbGluZVRvLT55KCkpOworICAgICAgICAgICAgICAgIHBhdGhEYXRh
LT5saW5lVG8obGluZVRvLT54KCksIGxpbmVUby0+eSgpKTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgUEFUSFNFR19DVVJWRVRPX0NVQklD
X0FCUzoKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBTVkdQYXRoU2VnQ3VydmV0b0N1
YmljQWJzSW1wbCAqY3VydmVUbyA9IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNB
YnNJbXBsICo+KHApOwotICAgICAgICAgICAgICAgIHBhdGhEYXRhLmN1cnZlVG8oY3VydmVUby0+
eDEoKSwgY3VydmVUby0+eTEoKSwKKyAgICAgICAgICAgICAgICBwYXRoRGF0YS0+Y3VydmVUbyhj
dXJ2ZVRvLT54MSgpLCBjdXJ2ZVRvLT55MSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY3VydmVUby0+eDIoKSwgY3VydmVUby0+eTIoKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGN1cnZlVG8tPngoKSwgY3VydmVUby0+eSgpKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgUEFUSFNFR19DTE9TRVBB
VEg6Ci0gICAgICAgICAgICAgICAgcGF0aERhdGEuY2xvc2VTdWJwYXRoKCk7CisgICAgICAgICAg
ICAgICAgcGF0aERhdGEtPmNsb3NlU3VicGF0aCgpOwogICAgICAgICAgICAgZGVmYXVsdDoKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpJbmRleDoga3N2ZzIvc3ZnL1NWR1BhdGhF
bGVtZW50SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tz
dmcyL3N2Zy9TVkdQYXRoRWxlbWVudEltcGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS44CmRp
ZmYgLXAgLXUgLXIxLjgga3N2ZzIvc3ZnL1NWR1BhdGhFbGVtZW50SW1wbC5oCi0tLSBrc3ZnMi9z
dmcvU1ZHUGF0aEVsZW1lbnRJbXBsLmgJMyBEZWMgMjAwNSAwMTozMjo0MCAtMDAwMAkxLjgKKysr
IGtzdmcyL3N2Zy9TVkdQYXRoRWxlbWVudEltcGwuaAk1IERlYyAyMDA1IDE0OjA3OjA1IC0wMDAw
CkBAIC0xMDEsNyArMTAxLDcgQEAgbmFtZXNwYWNlIEtTVkcKICAgICAgICAgdmlydHVhbCB2b2lk
IHBhcnNlTWFwcGVkQXR0cmlidXRlKEtET006Ok1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpOwog
CiAgICAgICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKGtodG1sOjpSZW5kZXJTdHls
ZSAqKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgICAgIHZpcnR1YWwgS0NQYXRoRGF0YUxpc3QgdG9Q
YXRoRGF0YSgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIEtDYW52YXNQYXRoKiB0b1BhdGhEYXRh
KCkgY29uc3Q7CiAKICAgICBwcml2YXRlOgogICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdQYXRo
U2VnTGlzdEltcGw+IG1fcGF0aFNlZ0xpc3Q7CkluZGV4OiBrc3ZnMi9zdmcvU1ZHUG9seWdvbkVs
ZW1lbnRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9r
c3ZnMi9zdmcvU1ZHUG9seWdvbkVsZW1lbnRJbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS42CmRpZmYgLXAgLXUgLXIxLjYga3N2ZzIvc3ZnL1NWR1BvbHlnb25FbGVtZW50SW1wbC5jcHAK
LS0tIGtzdmcyL3N2Zy9TVkdQb2x5Z29uRWxlbWVudEltcGwuY3BwCTIxIE5vdiAyMDA1IDA4OjI5
OjQxIC0wMDAwCTEuNgorKysga3N2ZzIvc3ZnL1NWR1BvbHlnb25FbGVtZW50SW1wbC5jcHAJNSBE
ZWMgMjAwNSAxNDowNzowNSAtMDAwMApAQCAtMjYsNiArMjYsNyBAQAogCiAjaW5jbHVkZSA8a2Nh
bnZhcy9LQ2FudmFzLmg+CiAjaW5jbHVkZSA8a2NhbnZhcy9LQ2FudmFzQ3JlYXRvci5oPgorI2lu
Y2x1ZGUgPGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdEZXZpY2UuaD4KIAogdXNpbmcgbmFtZXNw
YWNlIEtTVkc7CiAKQEAgLTM4LDIxICszOSwyMCBAQCBTVkdQb2x5Z29uRWxlbWVudEltcGw6On5T
VkdQb2x5Z29uRWxlbWVuCiB7CiB9CiAKLUtDUGF0aERhdGFMaXN0IFNWR1BvbHlnb25FbGVtZW50
SW1wbDo6dG9QYXRoRGF0YSgpIGNvbnN0CitLQ2FudmFzUGF0aCogU1ZHUG9seWdvbkVsZW1lbnRJ
bXBsOjp0b1BhdGhEYXRhKCkgY29uc3QKIHsKLSAgICBLQ1BhdGhEYXRhTGlzdCBwb2x5RGF0YTsK
ICAgICBpbnQgbGVuID0gcG9pbnRzKCktPm51bWJlck9mSXRlbXMoKTsKICAgICBpZihsZW4gPCAx
KQotICAgICAgICByZXR1cm4gcG9seURhdGE7Ci0KLSAgICBwb2x5RGF0YS5tb3ZlVG8ocG9pbnRz
KCktPmdldEl0ZW0oMCktPngoKSwgcG9pbnRzKCktPmdldEl0ZW0oMCktPnkoKSk7Ci0gICAgZm9y
KGludCBpID0gMTsgaSA8IGxlbjsgKytpKQotICAgIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
CisgICAgS0NhbnZhc1BhdGgqIHBvbHlEYXRhID0gUVBhaW50ZXI6OnJlbmRlcmluZ0RldmljZSgp
LT5jcmVhdGVQYXRoKCk7CisgICAgcG9seURhdGEtPm1vdmVUbyhwb2ludHMoKS0+Z2V0SXRlbSgw
KS0+eCgpLCBwb2ludHMoKS0+Z2V0SXRlbSgwKS0+eSgpKTsKKyAgICBmb3IgKGludCBpID0gMTsg
aSA8IGxlbjsgKytpKSB7CiAgICAgICAgIFNWR1BvaW50SW1wbCAqcCA9IHBvaW50cygpLT5nZXRJ
dGVtKGkpOwotICAgICAgICBwb2x5RGF0YS5saW5lVG8ocC0+eCgpLCBwLT55KCkpOworICAgICAg
ICBwb2x5RGF0YS0+bGluZVRvKHAtPngoKSwgcC0+eSgpKTsKICAgICB9CiAKLSAgICBwb2x5RGF0
YS5jbG9zZVN1YnBhdGgoKTsKKyAgICBwb2x5RGF0YS0+Y2xvc2VTdWJwYXRoKCk7CiAgICAgcmV0
dXJuIHBvbHlEYXRhOwogfQogCkluZGV4OiBrc3ZnMi9zdmcvU1ZHUG9seWdvbkVsZW1lbnRJbXBs
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvc3ZnL1NW
R1BvbHlnb25FbGVtZW50SW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjUKZGlmZiAtcCAt
dSAtcjEuNSBrc3ZnMi9zdmcvU1ZHUG9seWdvbkVsZW1lbnRJbXBsLmgKLS0tIGtzdmcyL3N2Zy9T
VkdQb2x5Z29uRWxlbWVudEltcGwuaAkyMSBOb3YgMjAwNSAwODoyOTo0MSAtMDAwMAkxLjUKKysr
IGtzdmcyL3N2Zy9TVkdQb2x5Z29uRWxlbWVudEltcGwuaAk1IERlYyAyMDA1IDE0OjA3OjA1IC0w
MDAwCkBAIC0zMyw3ICszMyw3IEBAIG5hbWVzcGFjZSBLU1ZHCiAgICAgICAgIFNWR1BvbHlnb25F
bGVtZW50SW1wbChjb25zdCBLRE9NOjpRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBLRE9NOjpEb2N1
bWVudEltcGwgKmRvYyk7CiAgICAgICAgIHZpcnR1YWwgflNWR1BvbHlnb25FbGVtZW50SW1wbCgp
OwogCi0gICAgICAgIHZpcnR1YWwgS0NQYXRoRGF0YUxpc3QgdG9QYXRoRGF0YSgpIGNvbnN0Owor
ICAgICAgICB2aXJ0dWFsIEtDYW52YXNQYXRoKiB0b1BhdGhEYXRhKCkgY29uc3Q7CiAgICAgfTsK
IH07CiAKSW5kZXg6IGtzdmcyL3N2Zy9TVkdQb2x5bGluZUVsZW1lbnRJbXBsLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9zdmcvU1ZHUG9seWxpbmVF
bGVtZW50SW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNgpkaWZmIC1wIC11IC1yMS42
IGtzdmcyL3N2Zy9TVkdQb2x5bGluZUVsZW1lbnRJbXBsLmNwcAotLS0ga3N2ZzIvc3ZnL1NWR1Bv
bHlsaW5lRWxlbWVudEltcGwuY3BwCTIxIE5vdiAyMDA1IDA4OjI5OjQxIC0wMDAwCTEuNgorKysg
a3N2ZzIvc3ZnL1NWR1BvbHlsaW5lRWxlbWVudEltcGwuY3BwCTUgRGVjIDIwMDUgMTQ6MDc6MDYg
LTAwMDAKQEAgLTI2LDYgKzI2LDcgQEAKIAogI2luY2x1ZGUgPGtjYW52YXMvS0NhbnZhcy5oPgog
I2luY2x1ZGUgPGtjYW52YXMvS0NhbnZhc0NyZWF0b3IuaD4KKyNpbmNsdWRlIDxrY2FudmFzL2Rl
dmljZS9LUmVuZGVyaW5nRGV2aWNlLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogCkBAIC0z
OCwxOCArMzksMTcgQEAgU1ZHUG9seWxpbmVFbGVtZW50SW1wbDo6flNWR1BvbHlsaW5lRWxlbQog
ewogfQogCi1LQ1BhdGhEYXRhTGlzdCBTVkdQb2x5bGluZUVsZW1lbnRJbXBsOjp0b1BhdGhEYXRh
KCkgY29uc3QKK0tDYW52YXNQYXRoKiBTVkdQb2x5bGluZUVsZW1lbnRJbXBsOjp0b1BhdGhEYXRh
KCkgY29uc3QKIHsKLSAgICBLQ1BhdGhEYXRhTGlzdCBwb2x5RGF0YTsKICAgICBpbnQgbGVuID0g
cG9pbnRzKCktPm51bWJlck9mSXRlbXMoKTsKICAgICBpZihsZW4gPCAxKQotICAgICAgICByZXR1
cm4gcG9seURhdGE7CisgICAgICAgIHJldHVybiAwOwogCi0gICAgcG9seURhdGEubW92ZVRvKHBv
aW50cygpLT5nZXRJdGVtKDApLT54KCksIHBvaW50cygpLT5nZXRJdGVtKDApLT55KCkpOwotICAg
IGZvcihpbnQgaSA9IDE7IGkgPCBsZW47ICsraSkKLSAgICB7CisgICAgS0NhbnZhc1BhdGgqIHBv
bHlEYXRhID0gUVBhaW50ZXI6OnJlbmRlcmluZ0RldmljZSgpLT5jcmVhdGVQYXRoKCk7CisgICAg
cG9seURhdGEtPm1vdmVUbyhwb2ludHMoKS0+Z2V0SXRlbSgwKS0+eCgpLCBwb2ludHMoKS0+Z2V0
SXRlbSgwKS0+eSgpKTsKKyAgICBmb3IgKGludCBpID0gMTsgaSA8IGxlbjsgKytpKSB7CiAgICAg
ICAgIFNWR1BvaW50SW1wbCAqcCA9IHBvaW50cygpLT5nZXRJdGVtKGkpOwotICAgICAgICBwb2x5
RGF0YS5saW5lVG8ocC0+eCgpLCBwLT55KCkpOworICAgICAgICBwb2x5RGF0YS0+bGluZVRvKHAt
PngoKSwgcC0+eSgpKTsKICAgICB9CiAKICAgICByZXR1cm4gcG9seURhdGE7CkluZGV4OiBrc3Zn
Mi9zdmcvU1ZHUG9seWxpbmVFbGVtZW50SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9TVkdTdXBwb3J0L2tzdmcyL3N2Zy9TVkdQb2x5bGluZUVsZW1lbnRJbXBsLmgsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuNQpkaWZmIC1wIC11IC1yMS41IGtzdmcyL3N2Zy9TVkdQb2x5bGlu
ZUVsZW1lbnRJbXBsLmgKLS0tIGtzdmcyL3N2Zy9TVkdQb2x5bGluZUVsZW1lbnRJbXBsLmgJMjEg
Tm92IDIwMDUgMDg6Mjk6NDEgLTAwMDAJMS41CisrKyBrc3ZnMi9zdmcvU1ZHUG9seWxpbmVFbGVt
ZW50SW1wbC5oCTUgRGVjIDIwMDUgMTQ6MDc6MDYgLTAwMDAKQEAgLTMzLDcgKzMzLDcgQEAgbmFt
ZXNwYWNlIEtTVkcKICAgICAgICAgU1ZHUG9seWxpbmVFbGVtZW50SW1wbChjb25zdCBLRE9NOjpR
dWFsaWZpZWROYW1lJiB0YWdOYW1lLCBLRE9NOjpEb2N1bWVudEltcGwgKmRvYyk7CiAgICAgICAg
IHZpcnR1YWwgflNWR1BvbHlsaW5lRWxlbWVudEltcGwoKTsKIAotICAgICAgICB2aXJ0dWFsIEtD
UGF0aERhdGFMaXN0IHRvUGF0aERhdGEoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBLQ2FudmFz
UGF0aCogdG9QYXRoRGF0YSgpIGNvbnN0OwogICAgIH07CiB9OwogCkluZGV4OiBrc3ZnMi9zdmcv
U1ZHUmVjdEVsZW1lbnRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZH
U3VwcG9ydC9rc3ZnMi9zdmcvU1ZHUmVjdEVsZW1lbnRJbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS44CmRpZmYgLXAgLXUgLXIxLjgga3N2ZzIvc3ZnL1NWR1JlY3RFbGVtZW50SW1wbC5j
cHAKLS0tIGtzdmcyL3N2Zy9TVkdSZWN0RWxlbWVudEltcGwuY3BwCTI2IE5vdiAyMDA1IDIyOjE5
OjE1IC0wMDAwCTEuOAorKysga3N2ZzIvc3ZnL1NWR1JlY3RFbGVtZW50SW1wbC5jcHAJNSBEZWMg
MjAwNSAxNDowNzowNiAtMDAwMApAQCAtMTAwLDcgKzEwMCw3IEBAIHZvaWQgU1ZHUmVjdEVsZW1l
bnRJbXBsOjpwYXJzZU1hcHBlZEF0dHIKICAgICB9CiB9CiAKLUtDUGF0aERhdGFMaXN0IFNWR1Jl
Y3RFbGVtZW50SW1wbDo6dG9QYXRoRGF0YSgpIGNvbnN0CitLQ2FudmFzUGF0aCogU1ZHUmVjdEVs
ZW1lbnRJbXBsOjp0b1BhdGhEYXRhKCkgY29uc3QKIHsKICAgICBmbG9hdCBfeCA9IHgoKS0+YmFz
ZVZhbCgpLT52YWx1ZSgpLCBfeSA9IHkoKS0+YmFzZVZhbCgpLT52YWx1ZSgpOwogICAgIGZsb2F0
IF93aWR0aCA9IHdpZHRoKCktPmJhc2VWYWwoKS0+dmFsdWUoKSwgX2hlaWdodCA9IGhlaWdodCgp
LT5iYXNlVmFsKCktPnZhbHVlKCk7CkluZGV4OiBrc3ZnMi9zdmcvU1ZHUmVjdEVsZW1lbnRJbXBs
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvc3ZnL1NW
R1JlY3RFbGVtZW50SW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjgKZGlmZiAtcCAtdSAt
cjEuOCBrc3ZnMi9zdmcvU1ZHUmVjdEVsZW1lbnRJbXBsLmgKLS0tIGtzdmcyL3N2Zy9TVkdSZWN0
RWxlbWVudEltcGwuaAkzIERlYyAyMDA1IDAxOjMyOjQwIC0wMDAwCTEuOAorKysga3N2ZzIvc3Zn
L1NWR1JlY3RFbGVtZW50SW1wbC5oCTUgRGVjIDIwMDUgMTQ6MDc6MDYgLTAwMDAKQEAgLTU1LDcg
KzU1LDcgQEAgbmFtZXNwYWNlIEtTVkcKICAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVk
QXR0cmlidXRlKEtET006Ok1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpOwogCiAgICAgICAgIHZp
cnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKGtodG1sOjpSZW5kZXJTdHlsZSAqKSB7IHJldHVy
biB0cnVlOyB9Ci0gICAgICAgIHZpcnR1YWwgS0NQYXRoRGF0YUxpc3QgdG9QYXRoRGF0YSgpIGNv
bnN0OworICAgICAgICB2aXJ0dWFsIEtDYW52YXNQYXRoKiB0b1BhdGhEYXRhKCkgY29uc3Q7CiAK
ICAgICAgICAgdmlydHVhbCBjb25zdCBTVkdTdHlsZWRFbGVtZW50SW1wbCAqcHVzaEF0dHJpYnV0
ZUNvbnRleHQoY29uc3QgU1ZHU3R5bGVkRWxlbWVudEltcGwgKmNvbnRleHQpOwogCkluZGV4OiBr
c3ZnMi9zdmcvU1ZHU3R5bGVkRWxlbWVudEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL3N2Zy9TVkdTdHlsZWRFbGVtZW50SW1wbC5jcHAsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMTQKZGlmZiAtcCAtdSAtcjEuMTQga3N2ZzIvc3ZnL1NWR1N0
eWxlZEVsZW1lbnRJbXBsLmNwcAotLS0ga3N2ZzIvc3ZnL1NWR1N0eWxlZEVsZW1lbnRJbXBsLmNw
cAkyOSBOb3YgMjAwNSAxMToyMDo0NyAtMDAwMAkxLjE0CisrKyBrc3ZnMi9zdmcvU1ZHU3R5bGVk
RWxlbWVudEltcGwuY3BwCTUgRGVjIDIwMDUgMTQ6MDc6MDYgLTAwMDAKQEAgLTcwLDExICs3MCwx
MCBAQCBTVkdBbmltYXRlZFN0cmluZ0ltcGwgKlNWR1N0eWxlZEVsZW1lbnRJCiAKIGtodG1sOjpS
ZW5kZXJPYmplY3QgKlNWR1N0eWxlZEVsZW1lbnRJbXBsOjpjcmVhdGVSZW5kZXJlcihSZW5kZXJB
cmVuYSAqYXJlbmEsIGtodG1sOjpSZW5kZXJTdHlsZSAqc3R5bGUpCiB7Ci0gICAgS0NQYXRoRGF0
YUxpc3QgcGF0aERhdGEgPSB0b1BhdGhEYXRhKCk7Ci0gICAgaWYgKHBhdGhEYXRhLmlzRW1wdHko
KSkKKyAgICBSZWZQdHI8S0NhbnZhc1BhdGg+IHBhdGhEYXRhID0gdG9QYXRoRGF0YSgpOworICAg
IGlmICghcGF0aERhdGEgfHwgcGF0aERhdGEtPmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIDA7
Ci0gICAgS0NhbnZhc1VzZXJEYXRhIHBhdGggPSBLQ2FudmFzQ3JlYXRvcjo6c2VsZigpLT5jcmVh
dGVDYW52YXNQYXRoRGF0YShRUGFpbnRlcjo6cmVuZGVyaW5nRGV2aWNlKCksIHBhdGhEYXRhKTsK
LSAgICByZXR1cm4gUVBhaW50ZXI6OnJlbmRlcmluZ0RldmljZSgpLT5jcmVhdGVJdGVtKGFyZW5h
LCBzdHlsZSwgdGhpcywgcGF0aCk7CisgICAgcmV0dXJuIFFQYWludGVyOjpyZW5kZXJpbmdEZXZp
Y2UoKS0+Y3JlYXRlSXRlbShhcmVuYSwgc3R5bGUsIHRoaXMsIHBhdGhEYXRhLmdldCgpKTsKIH0K
IAogdm9pZCBTVkdTdHlsZWRFbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoS0RPTTo6
TWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cikKQEAgLTE1NSw4ICsxNTQsNyBAQCB2b2lkIFNWR1N0
eWxlZEVsZW1lbnRJbXBsOjp1cGRhdGVDYW52YXNJCiAgICAgICAgICYmIHBhcmVudEVsZW1lbnQt
PmNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIodGhpcykpCiAgICAgICAgIHJlbmRlclNlY3Rpb24g
PSB0cnVlOwogCi0gICAgS0NhbnZhc1VzZXJEYXRhIG5ld1BhdGggPSBLQ2FudmFzQ3JlYXRvcjo6
c2VsZigpLT5jcmVhdGVDYW52YXNQYXRoRGF0YShRUGFpbnRlcjo6cmVuZGVyaW5nRGV2aWNlKCks
IHRvUGF0aERhdGEoKSk7Ci0gICAgcmVuZGVyUGF0aC0+Y2hhbmdlUGF0aChuZXdQYXRoKTsKKyAg
ICByZW5kZXJQYXRoLT5jaGFuZ2VQYXRoKHRvUGF0aERhdGEoKSk7CiAKICAgICBpZihyZW5kZXJT
ZWN0aW9uKQogICAgICAgICByZW5kZXJQYXRoLT5zZXROZWVkc0xheW91dCh0cnVlKTsKQEAgLTE2
NywxMCArMTY1LDcgQEAgdm9pZCBTVkdTdHlsZWRFbGVtZW50SW1wbDo6dXBkYXRlQ2FudmFzSQog
Y29uc3QgU1ZHU3R5bGVkRWxlbWVudEltcGwgKlNWR1N0eWxlZEVsZW1lbnRJbXBsOjpwdXNoQXR0
cmlidXRlQ29udGV4dChjb25zdCBTVkdTdHlsZWRFbGVtZW50SW1wbCAqKQogewogICAgIGlmKGNh
bnZhcygpKQotICAgIHsKLSAgICAgICAgS0NhbnZhc1VzZXJEYXRhIG5ld1BhdGggPSBLQ2FudmFz
Q3JlYXRvcjo6c2VsZigpLT5jcmVhdGVDYW52YXNQYXRoRGF0YShRUGFpbnRlcjo6cmVuZGVyaW5n
RGV2aWNlKCksIHRvUGF0aERhdGEoKSk7Ci0gICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclBhdGgg
Kj4ocmVuZGVyZXIoKSktPmNoYW5nZVBhdGgobmV3UGF0aCk7Ci0gICAgfQorICAgICAgICBzdGF0
aWNfY2FzdDxSZW5kZXJQYXRoICo+KHJlbmRlcmVyKCkpLT5jaGFuZ2VQYXRoKHRvUGF0aERhdGEo
KSk7CiAKICAgICByZXR1cm4gMDsKIH0KSW5kZXg6IGtzdmcyL3N2Zy9TVkdTdHlsZWRFbGVtZW50
SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL3N2
Zy9TVkdTdHlsZWRFbGVtZW50SW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEyCmRpZmYg
LXAgLXUgLXIxLjEyIGtzdmcyL3N2Zy9TVkdTdHlsZWRFbGVtZW50SW1wbC5oCi0tLSBrc3ZnMi9z
dmcvU1ZHU3R5bGVkRWxlbWVudEltcGwuaAkzIERlYyAyMDA1IDAxOjMyOjQxIC0wMDAwCTEuMTIK
KysrIGtzdmcyL3N2Zy9TVkdTdHlsZWRFbGVtZW50SW1wbC5oCTUgRGVjIDIwMDUgMTQ6MDc6MDYg
LTAwMDAKQEAgLTU3LDcgKzU3LDcgQEAgbmFtZXNwYWNlIEtTVkcKIAogICAgICAgICAvLyBUaGVz
ZSBuZWVkIHRvIGJlIGltcGxlbWVudGVkLgogICAgICAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJ
c05lZWRlZChraHRtbDo6UmVuZGVyU3R5bGUgKikgeyByZXR1cm4gZmFsc2U7IH0KLSAgICAgICAg
dmlydHVhbCBLQ1BhdGhEYXRhTGlzdCB0b1BhdGhEYXRhKCkgY29uc3QgeyByZXR1cm4gS0NQYXRo
RGF0YUxpc3QoKTsgfQorICAgICAgICB2aXJ0dWFsIEtDYW52YXNQYXRoKiB0b1BhdGhEYXRhKCkg
Y29uc3QgeyByZXR1cm4gMDsgfQogICAgICAgICB2aXJ0dWFsIGtodG1sOjpSZW5kZXJPYmplY3Qg
KmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hICphcmVuYSwga2h0bWw6OlJlbmRlclN0eWxlICpz
dHlsZSk7CiAgICAgICAgIHZpcnR1YWwgS0NhbnZhc1Jlc291cmNlICpjYW52YXNSZXNvdXJjZSgp
IHsgcmV0dXJuIDA7IH0KICAgICAgICAgCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>4976</attachid>
            <date>2005-12-05 14:56:11 -0800</date>
            <delta_ts>2005-12-05 15:41:13 -0800</delta_ts>
            <desc>Slightly improved KCanvasPath fix (now with bonus ChangeLog!)</desc>
            <filename>kcanvaspath.patch</filename>
            <type>text/plain</type>
            <size>73509</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9D
aGFuZ2VMb2csdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDc1CmRpZmYgLXAgLXUgLXIxLjQ3NSBD
aGFuZ2VMb2cKLS0tIENoYW5nZUxvZwk1IERlYyAyMDA1IDIyOjE5OjA5IC0wMDAwCTEuNDc1Cisr
KyBDaGFuZ2VMb2cJNSBEZWMgMjAwNSAyMjo1MjowMiAtMDAwMApAQCAtMSwzICsxLDEwMCBAQAor
MjAwNS0xMi0wNSAgRXJpYyBTZWlkZWwgIDxlc2VpZGVsQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICA1IHRlc3QgY2FzZXMgdXBkYXRl
ZCwgbm8gYWRkaXRpb25hbCB0ZXN0cyBuZWVkZWQuCisKKyAgICAgICAgUmVtb3ZlZCBLQ1BhdGhE
YXRhLCBLQ1BhdGhEYXRhTGlzdCBhbmQgS0NhbnZhc1VzZXJEYXRhLgorICAgICAgICBBZGRlZCBL
Q2FudmFzUGF0aCBhbmQgS0NhbnZhc1BhdGhRdWFydHogaW5zdGVhZC4KKyAgICAgICAgVXBkYXRl
ZCBtZXRob2RzIHRvIGV4cGVjdCBLQ2FudmFzUGF0aCogdHlwZXMgYW5kIHVzZSBSZWZQdHIuCisg
ICAgICAgIFJlbW92ZWQgbm8gbG9uZ2VyIG5lZWRlZCBLQ1BhdGhEYXRhTGlzdCAtPiBLQ2FudmFz
VXNlckRhdGEgcm91dGluZXMKKyAgICAgICAgaHR0cDovL2J1Z3ppbGxhLm9wZW5kYXJ3aW4ub3Jn
L3Nob3dfYnVnLmNnaT9pZD01NzQ3CisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6IGFkZGVkIEtDYW52YXNQYXRoKFF1YXJ0eikKKyAgICAgICAgKiBrY2FudmFz
L0tDYW52YXNDcmVhdG9yLmNwcDoKKyAgICAgICAgKEtDYW52YXNDcmVhdG9yOjpjcmVhdGVSb3Vu
ZGVkUmVjdGFuZ2xlKTogdXBkYXRlZCB0byBLQ2FudmFzUGF0aCoKKyAgICAgICAgKEtDYW52YXND
cmVhdG9yOjpjcmVhdGVSZWN0YW5nbGUpOiB1cGRhdGVkIHRvIEtDYW52YXNQYXRoKgorICAgICAg
ICAoS0NhbnZhc0NyZWF0b3I6OmNyZWF0ZUVsbGlwc2UpOiB1cGRhdGVkIHRvIEtDYW52YXNQYXRo
KgorICAgICAgICAoS0NhbnZhc0NyZWF0b3I6OmNyZWF0ZUNpcmNsZSk6IHVwZGF0ZWQgdG8gS0Nh
bnZhc1BhdGgqCisgICAgICAgIChLQ2FudmFzQ3JlYXRvcjo6Y3JlYXRlTGluZSk6IHVwZGF0ZWQg
dG8gS0NhbnZhc1BhdGgqCisgICAgICAgICoga2NhbnZhcy9LQ2FudmFzQ3JlYXRvci5oOgorICAg
ICAgICAqIGtjYW52YXMvS0NhbnZhc0l0ZW0uY3BwOgorICAgICAgICAoUmVuZGVyUGF0aDo6UHJp
dmF0ZTo6UHJpdmF0ZSk6IHVwZGF0ZWQgdG8gS0NhbnZhc1BhdGgqCisgICAgICAgIChSZW5kZXJQ
YXRoOjp+UmVuZGVyUGF0aCk6CisgICAgICAgIChSZW5kZXJQYXRoOjpjaGFuZ2VQYXRoKToKKyAg
ICAgICAgKFJlbmRlclBhdGg6OnBhdGgpOiB1cGRhdGVkIHRvIEtDYW52YXNQYXRoKgorICAgICAg
ICAqIGtjYW52YXMvS0NhbnZhc0l0ZW0uaDoKKyAgICAgICAgKiBrY2FudmFzL0tDYW52YXNNYXRy
aXguY3BwOgorICAgICAgICAqIGtjYW52YXMvS0NhbnZhc01hdHJpeC5oOgorICAgICAgICAqIGtj
YW52YXMvS0NhbnZhc1BhdGguY3BwOgorICAgICAgICAob3BlcmF0b3I8PCk6IHVwZGF0ZWQgdG8g
Y2FsbCBkZXZpY2UtPnN0cmluZ0ZvclBhdGgoKQorICAgICAgICAqIGtjYW52YXMvS0NhbnZhc1Bh
dGguaDoKKyAgICAgICAgKEtDYW52YXNQYXRoOjp+S0NhbnZhc1BhdGgpOgorICAgICAgICAoS0ND
bGlwRGF0YUxpc3Q6OmFkZFBhdGgpOiB1cGRhdGVkIHRvIEtDYW52YXNQYXRoKgorICAgICAgICAq
IGtjYW52YXMvS0NhbnZhc1Jlc291cmNlcy5jcHA6CisgICAgICAgIChLQ2FudmFzQ2xpcHBlcjo6
YWRkQ2xpcERhdGEpOiB1cGRhdGVkIHRvIEtDYW52YXNQYXRoKgorICAgICAgICAqIGtjYW52YXMv
S0NhbnZhc1Jlc291cmNlcy5oOgorICAgICAgICAqIGtjYW52YXMvS0NhbnZhc1R5cGVzLmg6Cisg
ICAgICAgICoga2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ0RldmljZS5jcHA6CisgICAgICAgIChL
Q2FudmFzQ29tbW9uQXJnczo6cGF0aCk6IHVwZGF0ZWQgdG8gS0NhbnZhc1BhdGgqCisgICAgICAg
IChLQ2FudmFzQ29tbW9uQXJnczo6c2V0UGF0aCk6IHVwZGF0ZWQgdG8gS0NhbnZhc1BhdGgqCisg
ICAgICAgIChLUmVuZGVyaW5nRGV2aWNlOjpLUmVuZGVyaW5nRGV2aWNlKToKKyAgICAgICAgKiBr
Y2FudmFzL2RldmljZS9LUmVuZGVyaW5nRGV2aWNlLmg6CisgICAgICAgICoga2NhbnZhcy9kZXZp
Y2UvcXVhcnR6L0tDYW52YXNJdGVtUXVhcnR6Lm1tOgorICAgICAgICAoS0NhbnZhc0l0ZW1RdWFy
dHo6OnBhaW50KTogdXBkYXRlZCB0byBLQ2FudmFzUGF0aCoKKyAgICAgICAgKEtDYW52YXNJdGVt
UXVhcnR6OjpiYm94Rm9yUGF0aCk6IHVwZGF0ZWQgdG8gS0NhbnZhc1BhdGgqCisgICAgICAgIChL
Q2FudmFzSXRlbVF1YXJ0ejo6aGl0c1BhdGgpOiB1cGRhdGVkIHRvIEtDYW52YXNQYXRoKgorICAg
ICAgICAqIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LQ2FudmFzUGF0aFF1YXJ0ei5oOiBBZGRlZC4K
KyAgICAgICAgKEtDYW52YXNQYXRoUXVhcnR6OjpjZ1BhdGgpOiB1cGRhdGVkIHRvIEtDYW52YXNQ
YXRoKgorICAgICAgICAqIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LQ2FudmFzUGF0aFF1YXJ0ei5t
bTogQWRkZWQuCisgICAgICAgIChLQ2FudmFzUGF0aFF1YXJ0ejo6S0NhbnZhc1BhdGhRdWFydHop
OiBhZGRlZAorICAgICAgICAoS0NhbnZhc1BhdGhRdWFydHo6On5LQ2FudmFzUGF0aFF1YXJ0eik6
IGFkZGVkCisgICAgICAgIChLQ2FudmFzUGF0aFF1YXJ0ejo6aXNFbXB0eSk6IGFkZGVkCisgICAg
ICAgIChLQ2FudmFzUGF0aFF1YXJ0ejo6bW92ZVRvKTogYWRkZWQKKyAgICAgICAgKEtDYW52YXNQ
YXRoUXVhcnR6OjpsaW5lVG8pOiBhZGRlZAorICAgICAgICAoS0NhbnZhc1BhdGhRdWFydHo6OmN1
cnZlVG8pOiBhZGRlZAorICAgICAgICAoS0NhbnZhc1BhdGhRdWFydHo6OmNsb3NlU3VicGF0aCk6
IGFkZGVkCisgICAgICAgICoga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNSZXNvdXJjZXNR
dWFydHoubW06CisgICAgICAgIChLQ2FudmFzQ2xpcHBlclF1YXJ0ejo6YXBwbHlDbGlwKTogdXBk
YXRlZCB0byBLQ2FudmFzUGF0aCoKKyAgICAgICAgKiBrY2FudmFzL2RldmljZS9xdWFydHovS1Jl
bmRlcmluZ0RldmljZVF1YXJ0ei5oOgorICAgICAgICAqIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9L
UmVuZGVyaW5nRGV2aWNlUXVhcnR6Lm1tOgorICAgICAgICAoS1JlbmRlcmluZ0RldmljZVF1YXJ0
ejo6Y3JlYXRlUGF0aCk6IGFkZGVkCisgICAgICAgIChLUmVuZGVyaW5nRGV2aWNlUXVhcnR6Ojpz
dHJpbmdGb3JQYXRoKTogdXBkYXRlZCB0byBLQ2FudmFzUGF0aCoKKyAgICAgICAgKEtSZW5kZXJp
bmdEZXZpY2VRdWFydHo6OmNyZWF0ZUl0ZW0pOiB1cGRhdGVkIHRvIEtDYW52YXNQYXRoKgorICAg
ICAgICAqIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9RdWFydHpTdXBwb3J0Lmg6CisgICAgICAgICog
a2NhbnZhcy9kZXZpY2UvcXVhcnR6L1F1YXJ0elN1cHBvcnQubW06CisgICAgICAgICoga3N2ZzIv
c3ZnL1NWR0NpcmNsZUVsZW1lbnRJbXBsLmNwcDoKKyAgICAgICAgKFNWR0NpcmNsZUVsZW1lbnRJ
bXBsOjp0b1BhdGhEYXRhKTogdXBkYXRlZCB0byBLQ2FudmFzUGF0aCoKKyAgICAgICAgKiBrc3Zn
Mi9zdmcvU1ZHQ2lyY2xlRWxlbWVudEltcGwuaDoKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHQ2xp
cFBhdGhFbGVtZW50SW1wbC5jcHA6CisgICAgICAgIChTVkdDbGlwUGF0aEVsZW1lbnRJbXBsOjpj
YW52YXNSZXNvdXJjZSk6IHVwZGF0ZWQgdG8gS0NhbnZhc1BhdGgqCisgICAgICAgICoga3N2ZzIv
c3ZnL1NWR0VsbGlwc2VFbGVtZW50SW1wbC5jcHA6CisgICAgICAgIChLU1ZHOjpTVkdFbGxpcHNl
RWxlbWVudEltcGw6OnRvUGF0aERhdGEpOiB1cGRhdGVkIHRvIEtDYW52YXNQYXRoKgorICAgICAg
ICAqIGtzdmcyL3N2Zy9TVkdFbGxpcHNlRWxlbWVudEltcGwuaDoKKyAgICAgICAgKiBrc3ZnMi9z
dmcvU1ZHSW1hZ2VFbGVtZW50SW1wbC5jcHA6CisgICAgICAgIChTVkdJbWFnZUVsZW1lbnRJbXBs
OjpjcmVhdGVSZW5kZXJlcik6IHVwZGF0ZWQgdG8gS0NhbnZhc1BhdGgqCisgICAgICAgICoga3N2
ZzIvc3ZnL1NWR0xpbmVFbGVtZW50SW1wbC5jcHA6CisgICAgICAgIChTVkdMaW5lRWxlbWVudElt
cGw6OnRvUGF0aERhdGEpOiB1cGRhdGVkIHRvIEtDYW52YXNQYXRoKgorICAgICAgICAqIGtzdmcy
L3N2Zy9TVkdMaW5lRWxlbWVudEltcGwuaDoKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHUGF0aEVs
ZW1lbnRJbXBsLmNwcDoKKyAgICAgICAgKEtTVkc6OlNWR1BhdGhFbGVtZW50SW1wbDo6dG9QYXRo
RGF0YSk6IHVwZGF0ZWQgdG8gS0NhbnZhc1BhdGgqCisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1Bh
dGhFbGVtZW50SW1wbC5oOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdQb2x5Z29uRWxlbWVudElt
cGwuY3BwOgorICAgICAgICAoU1ZHUG9seWdvbkVsZW1lbnRJbXBsOjp0b1BhdGhEYXRhKTogdXBk
YXRlZCB0byBLQ2FudmFzUGF0aCoKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHUG9seWdvbkVsZW1l
bnRJbXBsLmg6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1BvbHlsaW5lRWxlbWVudEltcGwuY3Bw
OgorICAgICAgICAoU1ZHUG9seWxpbmVFbGVtZW50SW1wbDo6dG9QYXRoRGF0YSk6IHVwZGF0ZWQg
dG8gS0NhbnZhc1BhdGgqCisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1BvbHlsaW5lRWxlbWVudElt
cGwuaDoKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHUmVjdEVsZW1lbnRJbXBsLmNwcDoKKyAgICAg
ICAgKFNWR1JlY3RFbGVtZW50SW1wbDo6dG9QYXRoRGF0YSk6IHVwZGF0ZWQgdG8gS0NhbnZhc1Bh
dGgqCisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1JlY3RFbGVtZW50SW1wbC5oOgorICAgICAgICAq
IGtzdmcyL3N2Zy9TVkdTdHlsZWRFbGVtZW50SW1wbC5jcHA6CisgICAgICAgIChTVkdTdHlsZWRF
bGVtZW50SW1wbDo6Y3JlYXRlUmVuZGVyZXIpOiB1cGRhdGVkIHRvIEtDYW52YXNQYXRoKgorICAg
ICAgICAoU1ZHU3R5bGVkRWxlbWVudEltcGw6OnVwZGF0ZUNhbnZhc0l0ZW0pOiB1cGRhdGVkIHRv
IEtDYW52YXNQYXRoKgorICAgICAgICAoU1ZHU3R5bGVkRWxlbWVudEltcGw6OnB1c2hBdHRyaWJ1
dGVDb250ZXh0KToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHU3R5bGVkRWxlbWVudEltcGwuaDoK
KyAgICAgICAgKEtTVkc6OlNWR1N0eWxlZEVsZW1lbnRJbXBsOjp0b1BhdGhEYXRhKTogdXBkYXRl
ZCB0byBLQ2FudmFzUGF0aCoKKwogMjAwNS0xMi0wNSAgSm9obiBTdWxsaXZhbiAgPHN1bGxpdmFu
QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBUaW0gT21lcm5pY2suCkluZGV4OiBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjUwCmRpZmYgLXAgLXUgLXIxLjUwIFdlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagotLS0gV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCTQgRGVj
IDIwMDUgMTI6NDM6MDggLTAwMDAJMS41MAorKysgV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCTUgRGVjIDIwMDUgMjI6NTI6MDQgLTAwMDAKQEAgLTEyMzgsNiArMTIzOCw4IEBACiAJ
CUE4OTBERjIyMDkzMDk3NDgwMDUxM0Y4OCAvKiBTVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50SW1w
bC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODkw
REYxRTA5MzA5NzQ4MDA1MTNGODggLyogU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudEltcGwuY3Bw
ICovOyB9OwogCQlBODk4RjE0NzA4ODEyMUU5MDA3NUVGQjIgLyogaHRtbGZhY3RvcnkuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRUYzNDMzMDg3QjU2
M0UwMEJCRjgzMyAvKiBodG1sZmFjdG9yeS5oICovOyB9OwogCQlBODk4RjE0ODA4ODEyMUVEMDA3
NUVGQjIgLyogaHRtbGZhY3RvcnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQkNFRjM0MzIwODdCNTYzRTAwQkJGODMzIC8qIGh0bWxmYWN0b3J5LmNw
cCAqLzsgfTsKKwkJQThBQkM5OUIwOTQ0NUVDMDAwMTM5NDVGIC8qIEtDYW52YXNQYXRoUXVhcnR6
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEFCQzk5
OTA5NDQ1RUMwMDAxMzk0NUYgLyogS0NhbnZhc1BhdGhRdWFydHouaCAqLzsgfTsKKwkJQThBQkM5
OUMwOTQ0NUVDMDAwMTM5NDVGIC8qIEtDYW52YXNQYXRoUXVhcnR6Lm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBQkM5OUEwOTQ0NUVDMDAwMTM5NDVG
IC8qIEtDYW52YXNQYXRoUXVhcnR6Lm1tICovOyB9OwogCQlBOEJBNUM3MDA5MENCMDc3MDA0RDEx
ODAgLyogcmVuZGVyX2J1dHRvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCQzQyMDM1QTA4RkMzMzQxMDBCNzgyRTAgLyogcmVuZGVyX2J1dHRvbi5j
cHAgKi87IH07CiAJCUE4QkE1QzcxMDkwQ0IwN0EwMDREMTE4MCAvKiByZW5kZXJfYXJlbmEuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzMjU1N0MzMDYx
RTMxNzIwMDdCODA1NCAvKiByZW5kZXJfYXJlbmEuaCAqLzsgfTsKIAkJQThCQTVDNzIwOTBDQjA3
QTAwNEQxMTgwIC8qIHJlbmRlcl9idXR0b24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEJDNDIwMzVCMDhGQzMzNDEwMEI3ODJFMCAvKiByZW5kZXJfYnV0
dG9uLmggKi87IH07CkBAIC0yMjE0LDYgKzIyMTYsOCBAQAogCQlBODkwREYxQzA5MzA5NzQ4MDA1
MTNGODggLyogU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnRJbXBsLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50
SW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4OTBERjFEMDkzMDk3NDgw
MDUxM0Y4OCAvKiBTVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50SW1wbC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50SW1wbC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODkwREYxRTA5MzA5NzQ4MDA1MTNGODggLyogU1ZH
U3R5bGVkTG9jYXRhYmxlRWxlbWVudEltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudEltcGwuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlBOEFCQzk5OTA5NDQ1RUMwMDAxMzk0NUYgLyogS0NhbnZhc1Bh
dGhRdWFydHouaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gS0NhbnZhc1BhdGhR
dWFydHouaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQThBQkM5OUEwOTQ0NUVDMDAw
MTM5NDVGIC8qIEtDYW52YXNQYXRoUXVhcnR6Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gS0NhbnZhc1BhdGhRdWFydHoubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUE4QzBGNkREMDg5NzAxRjEwMEJBNTExNCAvKiBEcmF3Q2FudmFzSXRlbS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEcmF3Q2FudmFzSXRlbS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlBOEMwRjZERTA4OTcwMUYxMDBCQTUxMTQgLyogRHJhd0Nh
bnZhc0l0ZW0ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBEcmF3
Q2FudmFzSXRlbS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThDMEY2REYwODk3
MDFGMTAwQkE1MTE0IC8qIERyYXdDYW52YXNJdGVtUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBEcmF3Q2FudmFzSXRlbVByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTM5OTcsNiArNDAwMSw4IEBACiAJCQkJQThDMEZCNzUwODk3MDFGODAw
QkE1MTE0IC8qIEtSZW5kZXJpbmdQYWludFNlcnZlclF1YXJ0ei5tbSAqLywKIAkJCQlBOEMwRkI3
NjA4OTcwMUY4MDBCQTUxMTQgLyogUXVhcnR6U3VwcG9ydC5oICovLAogCQkJCUE4QzBGQjc3MDg5
NzAxRjgwMEJBNTExNCAvKiBRdWFydHpTdXBwb3J0Lm1tICovLAorCQkJCUE4QUJDOTk5MDk0NDVF
QzAwMDEzOTQ1RiAvKiBLQ2FudmFzUGF0aFF1YXJ0ei5oICovLAorCQkJCUE4QUJDOTlBMDk0NDVF
QzAwMDEzOTQ1RiAvKiBLQ2FudmFzUGF0aFF1YXJ0ei5tbSAqLywKIAkJCSk7CiAJCQlwYXRoID0g
cXVhcnR6OwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTU2NjUsNiArNTY3MSw3IEBA
CiAJCQkJQThDMzI5NkUwOTNCQjdCMjAwMEI5Q0FDIC8qIFNWR0ZFU3BvdExpZ2h0RWxlbWVudElt
cGwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QzMyOTcwMDkzQkI3QjIwMDBCOUNBQyAvKiBTVkdG
RVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50SW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThDMzI5
NzIwOTNCQjdCMjAwMEI5Q0FDIC8qIFNWR0ZFUG9pbnRMaWdodEVsZW1lbnRJbXBsLmggaW4gSGVh
ZGVycyAqLywKKwkJCQlBOEFCQzk5QjA5NDQ1RUMwMDAxMzk0NUYgLyogS0NhbnZhc1BhdGhRdWFy
dHouaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHBy
b2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtNzQ2OSw2ICs3NDc2LDcgQEAKIAkJCQlBOEMzMjk3MTA5
M0JCN0IyMDAwQjlDQUMgLyogU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudEltcGwuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQThDMzI5NzMwOTNCQjdCMjAwMEI5Q0FDIC8qIFNWR0ZFUG9pbnRM
aWdodEVsZW1lbnRJbXBsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QzMyRDk3MDkzRDhFQTQw
MDBCOUNBQyAvKiBYTGlua05hbWVzV3JhcHBlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBOEFC
Qzk5QzA5NDQ1RUMwMDAxMzk0NUYgLyogS0NhbnZhc1BhdGhRdWFydHoubW0gaW4gU291cmNlcyAq
LywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJ
fTsKSW5kZXg6IGtjYW52YXMvS0NhbnZhc0NyZWF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tjYW52YXMvS0NhbnZhc0NyZWF0b3IuY3BwLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjcKZGlmZiAtcCAtdSAtcjEuNyBrY2FudmFzL0tDYW52YXNDcmVhdG9y
LmNwcAotLS0ga2NhbnZhcy9LQ2FudmFzQ3JlYXRvci5jcHAJMjEgTm92IDIwMDUgMDg6Mjk6MTEg
LTAwMDAJMS43CisrKyBrY2FudmFzL0tDYW52YXNDcmVhdG9yLmNwcAk1IERlYyAyMDA1IDIyOjUy
OjA0IC0wMDAwCkBAIC01MSwxMiArNTEsMTIgQEAgS0NhbnZhc0NyZWF0b3IgKktDYW52YXNDcmVh
dG9yOjpzZWxmKCkKICAgICByZXR1cm4gc19jcmVhdG9yOwogfQogCi1LQ1BhdGhEYXRhTGlzdCBL
Q2FudmFzQ3JlYXRvcjo6Y3JlYXRlUm91bmRlZFJlY3RhbmdsZShmbG9hdCB4LCBmbG9hdCB5LCBm
bG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCByeCwgZmxvYXQgcnkpIGNvbnN0CitLQ2Fu
dmFzUGF0aCogS0NhbnZhc0NyZWF0b3I6OmNyZWF0ZVJvdW5kZWRSZWN0YW5nbGUoZmxvYXQgeCwg
ZmxvYXQgeSwgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgZmxvYXQgcngsIGZsb2F0IHJ5KSBj
b25zdAogewotICAgIEtDUGF0aERhdGFMaXN0IGxpc3Q7CisgICAgS0NhbnZhc1BhdGgqIHBhdGgg
PSBRUGFpbnRlcjo6cmVuZGVyaW5nRGV2aWNlKCktPmNyZWF0ZVBhdGgoKTsKIAotICAgIGlmICh3
aWR0aCA8PSAwLjBmIHx8IGhlaWdodCA8PSAwLjBmKQotICAgICAgICByZXR1cm4gbGlzdDsKKyAg
ICBpZiAod2lkdGggPD0gMC4wZiB8fCBoZWlnaHQgPD0gMC4wZiB8fCAhcGF0aCkKKyAgICAgICAg
cmV0dXJuIHBhdGg7CiAKICAgICBkb3VibGUgbnJ4ID0gcngsIG5yeSA9IHJ5OwogICAgIC8vIElm
IHJ4IGlzIGdyZWF0ZXIgdGhhbiBoYWxmIG9mIHRoZSB3aWR0aCBvZiB0aGUgcmVjdGFuZ2xlCkBA
IC02OSw1MiArNjksNTIgQEAgS0NQYXRoRGF0YUxpc3QgS0NhbnZhc0NyZWF0b3I6OmNyZWF0ZVJv
dQogICAgIGlmKG5yeSA+IGhlaWdodCAvIDIpCiAgICAgICAgIG5yeSA9IGhlaWdodCAvIDI7CiAK
LSAgICBsaXN0Lm1vdmVUbyh4ICsgbnJ4LCB5KTsKLSAgICBsaXN0LmN1cnZlVG8oeCArIG5yeCAq
ICgxIC0gMC41NTIpLCB5LCB4LCB5ICsgbnJ5ICogKDEgLSAwLjU1MiksIHgsIHkgKyBucnkpOwor
ICAgIHBhdGgtPm1vdmVUbyh4ICsgbnJ4LCB5KTsKKyAgICBwYXRoLT5jdXJ2ZVRvKHggKyBucngg
KiAoMSAtIDAuNTUyKSwgeSwgeCwgeSArIG5yeSAqICgxIC0gMC41NTIpLCB4LCB5ICsgbnJ5KTsK
IAogICAgIGlmKG5yeSA8IGhlaWdodCAvIDIpCi0gICAgICAgIGxpc3QubGluZVRvKHgsIHkgKyBo
ZWlnaHQgLSBucnkpOworICAgICAgICBwYXRoLT5saW5lVG8oeCwgeSArIGhlaWdodCAtIG5yeSk7
CiAKLSAgICBsaXN0LmN1cnZlVG8oeCwgeSArIGhlaWdodCAtIG5yeSAqICgxIC0gMC41NTIpLCB4
ICsgbnJ4ICogKDEgLSAwLjU1MiksIHkgKyBoZWlnaHQsIHggKyBucngsIHkgKyBoZWlnaHQpOwor
ICAgIHBhdGgtPmN1cnZlVG8oeCwgeSArIGhlaWdodCAtIG5yeSAqICgxIC0gMC41NTIpLCB4ICsg
bnJ4ICogKDEgLSAwLjU1MiksIHkgKyBoZWlnaHQsIHggKyBucngsIHkgKyBoZWlnaHQpOwogCiAg
ICAgaWYobnJ4IDwgd2lkdGggLyAyKQotICAgICAgICBsaXN0LmxpbmVUbyh4ICsgd2lkdGggLSBu
cngsIHkgKyBoZWlnaHQpOworICAgICAgICBwYXRoLT5saW5lVG8oeCArIHdpZHRoIC0gbnJ4LCB5
ICsgaGVpZ2h0KTsKIAotICAgIGxpc3QuY3VydmVUbyh4ICsgd2lkdGggLSBucnggKiAoMSAtIDAu
NTUyKSwgeSArIGhlaWdodCwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0IC0gbnJ5ICogKDEgLSAwLjU1
MiksIHggKyB3aWR0aCwgeSArIGhlaWdodCAtIG5yeSk7CisgICAgcGF0aC0+Y3VydmVUbyh4ICsg
d2lkdGggLSBucnggKiAoMSAtIDAuNTUyKSwgeSArIGhlaWdodCwgeCArIHdpZHRoLCB5ICsgaGVp
Z2h0IC0gbnJ5ICogKDEgLSAwLjU1MiksIHggKyB3aWR0aCwgeSArIGhlaWdodCAtIG5yeSk7CiAK
ICAgICBpZihucnkgPCBoZWlnaHQgLyAyKQotICAgICAgICBsaXN0LmxpbmVUbyh4ICsgd2lkdGgs
IHkgKyBucnkpOworICAgICAgICBwYXRoLT5saW5lVG8oeCArIHdpZHRoLCB5ICsgbnJ5KTsKIAot
ICAgIGxpc3QuY3VydmVUbyh4ICsgd2lkdGgsIHkgKyBucnkgKiAoMSAtIDAuNTUyKSwgeCArIHdp
ZHRoIC0gbnJ4ICogKDEgLSAwLjU1MiksIHksIHggKyB3aWR0aCAtIG5yeCwgeSk7CisgICAgcGF0
aC0+Y3VydmVUbyh4ICsgd2lkdGgsIHkgKyBucnkgKiAoMSAtIDAuNTUyKSwgeCArIHdpZHRoIC0g
bnJ4ICogKDEgLSAwLjU1MiksIHksIHggKyB3aWR0aCAtIG5yeCwgeSk7CiAKICAgICBpZihucngg
PCB3aWR0aCAvIDIpCi0gICAgICAgIGxpc3QubGluZVRvKHggKyBucngsIHkpOworICAgICAgICBw
YXRoLT5saW5lVG8oeCArIG5yeCwgeSk7CiAKLSAgICBsaXN0LmNsb3NlU3VicGF0aCgpOwotICAg
IHJldHVybiBsaXN0OworICAgIHBhdGgtPmNsb3NlU3VicGF0aCgpOworICAgIHJldHVybiBwYXRo
OwogfQogCi1LQ1BhdGhEYXRhTGlzdCBLQ2FudmFzQ3JlYXRvcjo6Y3JlYXRlUmVjdGFuZ2xlKGZs
b2F0IHgsIGZsb2F0IHksIGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQpIGNvbnN0CitLQ2FudmFz
UGF0aCogS0NhbnZhc0NyZWF0b3I6OmNyZWF0ZVJlY3RhbmdsZShmbG9hdCB4LCBmbG9hdCB5LCBm
bG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0KSBjb25zdAogewotICAgIEtDUGF0aERhdGFMaXN0IGxp
c3Q7CisgICAgS0NhbnZhc1BhdGgqIHBhdGggPSBRUGFpbnRlcjo6cmVuZGVyaW5nRGV2aWNlKCkt
PmNyZWF0ZVBhdGgoKTsKICAgICAKLSAgICBpZiAod2lkdGggPD0gMC4wZiB8fCBoZWlnaHQgPD0g
MC4wZikKLSAgICAgICAgcmV0dXJuIGxpc3Q7CisgICAgaWYgKHdpZHRoIDw9IDAuMGYgfHwgaGVp
Z2h0IDw9IDAuMGYgfHwgIXBhdGgpCisgICAgICAgIHJldHVybiBwYXRoOwogICAgIAotICAgIGxp
c3QubW92ZVRvKHgsIHkpOwotICAgIGxpc3QubGluZVRvKHggKyB3aWR0aCwgeSk7Ci0gICAgbGlz
dC5saW5lVG8oeCArIHdpZHRoLCB5ICsgaGVpZ2h0KTsKLSAgICBsaXN0LmxpbmVUbyh4LCB5ICsg
aGVpZ2h0KTsKLSAgICBsaXN0LmNsb3NlU3VicGF0aCgpOwotICAgIHJldHVybiBsaXN0OworICAg
IHBhdGgtPm1vdmVUbyh4LCB5KTsKKyAgICBwYXRoLT5saW5lVG8oeCArIHdpZHRoLCB5KTsKKyAg
ICBwYXRoLT5saW5lVG8oeCArIHdpZHRoLCB5ICsgaGVpZ2h0KTsKKyAgICBwYXRoLT5saW5lVG8o
eCwgeSArIGhlaWdodCk7CisgICAgcGF0aC0+Y2xvc2VTdWJwYXRoKCk7CisgICAgcmV0dXJuIHBh
dGg7CiB9CiAKLUtDUGF0aERhdGFMaXN0IEtDYW52YXNDcmVhdG9yOjpjcmVhdGVFbGxpcHNlKGZs
b2F0IGN4LCBmbG9hdCBjeSwgZmxvYXQgcngsIGZsb2F0IHJ5KSBjb25zdAorS0NhbnZhc1BhdGgq
IEtDYW52YXNDcmVhdG9yOjpjcmVhdGVFbGxpcHNlKGZsb2F0IGN4LCBmbG9hdCBjeSwgZmxvYXQg
cngsIGZsb2F0IHJ5KSBjb25zdAogewotICAgIEtDUGF0aERhdGFMaXN0IGxpc3Q7CisgICAgS0Nh
bnZhc1BhdGgqIHBhdGggPSBRUGFpbnRlcjo6cmVuZGVyaW5nRGV2aWNlKCktPmNyZWF0ZVBhdGgo
KTsKIAotICAgIGlmIChyeCA8PSAwLjBmIHx8IHJ5IDw9IDAuMGYpCi0gICAgICAgIHJldHVybiBs
aXN0OworICAgIGlmIChyeCA8PSAwLjBmIHx8IHJ5IDw9IDAuMGYgfHwgIXBhdGgpCisgICAgICAg
IHJldHVybiBwYXRoOwogCiAgICAgLy8gRWxsaXBzZSBjcmVhdGlvbiAtIG5pY2UgJiBjbGVhbiBh
Z2cyIGNvZGUKICAgICBkb3VibGUgeCA9IGN4LCB5ID0gY3k7CkBAIC0xMzUsNzggKzEzNSwzMCBA
QCBLQ1BhdGhEYXRhTGlzdCBLQ2FudmFzQ3JlYXRvcjo6Y3JlYXRlRWxsCiAKICAgICAgICAgc3Rl
cCsrOwogICAgICAgICBpZihzdGVwID09IDEpCi0gICAgICAgICAgICBsaXN0Lm1vdmVUbyh4LCB5
KTsKKyAgICAgICAgICAgIHBhdGgtPm1vdmVUbyh4LCB5KTsKICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgbGlzdC5saW5lVG8oeCwgeSk7CisgICAgICAgICAgICBwYXRoLT5saW5lVG8oeCwgeSk7
CiAgICAgfQogCi0gICAgbGlzdC5jbG9zZVN1YnBhdGgoKTsKLSAgICByZXR1cm4gbGlzdDsKKyAg
ICBwYXRoLT5jbG9zZVN1YnBhdGgoKTsKKyAgICByZXR1cm4gcGF0aDsKIH0KIAotS0NQYXRoRGF0
YUxpc3QgS0NhbnZhc0NyZWF0b3I6OmNyZWF0ZUNpcmNsZShmbG9hdCBjeCwgZmxvYXQgY3ksIGZs
b2F0IHIpIGNvbnN0CitLQ2FudmFzUGF0aCogS0NhbnZhc0NyZWF0b3I6OmNyZWF0ZUNpcmNsZShm
bG9hdCBjeCwgZmxvYXQgY3ksIGZsb2F0IHIpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGNyZWF0ZUVs
bGlwc2UoY3gsIGN5LCByLCByKTsKIH0KIAotS0NQYXRoRGF0YUxpc3QgS0NhbnZhc0NyZWF0b3I6
OmNyZWF0ZUxpbmUoZmxvYXQgeDEsIGZsb2F0IHkxLCBmbG9hdCB4MiwgZmxvYXQgeTIpIGNvbnN0
CitLQ2FudmFzUGF0aCogS0NhbnZhc0NyZWF0b3I6OmNyZWF0ZUxpbmUoZmxvYXQgeDEsIGZsb2F0
IHkxLCBmbG9hdCB4MiwgZmxvYXQgeTIpIGNvbnN0CiB7Ci0gICAgS0NQYXRoRGF0YUxpc3QgbGlz
dDsKKyAgICBLQ2FudmFzUGF0aCogcGF0aCA9IFFQYWludGVyOjpyZW5kZXJpbmdEZXZpY2UoKS0+
Y3JlYXRlUGF0aCgpOwogICAgIAotICAgIGlmICh4MSA9PSB4MiAmJiB5MSA9PSB5MikKLSAgICAg
ICAgcmV0dXJuIGxpc3Q7CisgICAgaWYgKCh4MSA9PSB4MiAmJiB5MSA9PSB5MikgfHwgIXBhdGgp
CisgICAgICAgIHJldHVybiBwYXRoOwogCi0gICAgbGlzdC5tb3ZlVG8oeDEsIHkxKTsKLSAgICBs
aXN0LmxpbmVUbyh4MiwgeTIpOwotICAgIHJldHVybiBsaXN0OwotfQotCi1LQ2FudmFzVXNlckRh
dGEgS0NhbnZhc0NyZWF0b3I6OmNyZWF0ZUNhbnZhc1BhdGhEYXRhKEtSZW5kZXJpbmdEZXZpY2Ug
KmRldmljZSwgY29uc3QgS0NQYXRoRGF0YUxpc3QgJnBhdGhEYXRhKSBjb25zdAotewotICAgIGRl
dmljZS0+c3RhcnRQYXRoKCk7Ci0KLSAgICBpbnQgZGF0YUxlbmd0aCA9IHBhdGhEYXRhLmNvdW50
KCk7Ci0gICAgaWYoZGF0YUxlbmd0aCA9PSAwKQotICAgIHsKLSAgICAgICAgZGV2aWNlLT5lbmRQ
YXRoKCk7Ci0gICAgICAgIHJldHVybiBkZXZpY2UtPmN1cnJlbnRQYXRoKCk7Ci0gICAgfQotCi0g
ICAgS0NQYXRoRGF0YUxpc3Q6OkNvbnN0SXRlcmF0b3IgaXQ7Ci0gICAgS0NQYXRoRGF0YUxpc3Q6
OkNvbnN0SXRlcmF0b3IgZW5kID0gcGF0aERhdGEuZW5kKCk7Ci0KLSAgICAvLyBUaGVyZSBhcmUg
cHVyZS1tb3ZldG8gcGF0aHMgd2hpY2ggcmVmZXJlbmNlCi0gICAgLy8gcGFpbnQgc2VydmVycyAq
YmFoKiAtPiBEbyBOT1QgcmVuZGVyIHRoZW0hCi0gICAgYm9vbCB2YWxpZCA9IGZhbHNlOwotICAg
IGZvcihpdCA9IHBhdGhEYXRhLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICB7Ci0gICAg
ICAgIEtDUGF0aERhdGEgZGF0YSA9ICppdDsgICAgICAgIAotCi0gICAgICAgIGlmKGRhdGEuY21k
ID09IENNRF9NT1ZFKQotICAgICAgICAgICAgZGV2aWNlLT5tb3ZlVG8oZGF0YS54MywgZGF0YS55
Myk7Ci0gICAgICAgIGVsc2UgaWYoZGF0YS5jbWQgPT0gQ01EX0xJTkUpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGRldmljZS0+bGluZVRvKGRhdGEueDMsIGRhdGEueTMpOwotICAgICAgICAgICAg
dmFsaWQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYoZGF0YS5jbWQgPT0gQ01E
X0NMT1NFX1NVQlBBVEgpCi0gICAgICAgICAgICBkZXZpY2UtPmNsb3NlU3VicGF0aCgpOwotICAg
ICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRldmljZS0+Y3VydmVUbyhkYXRhLngx
LCBkYXRhLnkxLCBkYXRhLngyLCBkYXRhLnkyLCBkYXRhLngzLCBkYXRhLnkzKTsKLSAgICAgICAg
ICAgIHZhbGlkID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmKCF2YWxpZCkKLSAg
ICB7Ci0gICAgICAgIGRldmljZS0+ZW5kUGF0aCgpOwotICAgICAgICBkZXZpY2UtPmRlbGV0ZVBh
dGgoZGV2aWNlLT5jdXJyZW50UGF0aCgpKTsKLSAgICAgICAgZGV2aWNlLT5zdGFydFBhdGgoKTsK
LSAgICB9Ci0KLSAgICBkZXZpY2UtPmVuZFBhdGgoKTsKLSAgICByZXR1cm4gZGV2aWNlLT5jdXJy
ZW50UGF0aCgpOworICAgIHBhdGgtPm1vdmVUbyh4MSwgeTEpOworICAgIHBhdGgtPmxpbmVUbyh4
MiwgeTIpOworICAgIHJldHVybiBwYXRoOwogfQogCiAvLyB2aW06dHM9NDpub2V0CkluZGV4OiBr
Y2FudmFzL0tDYW52YXNDcmVhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NW
R1N1cHBvcnQva2NhbnZhcy9LQ2FudmFzQ3JlYXRvci5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjQKZGlmZiAtcCAtdSAtcjEuNCBrY2FudmFzL0tDYW52YXNDcmVhdG9yLmgKLS0tIGtjYW52YXMv
S0NhbnZhc0NyZWF0b3IuaAkyMSBOb3YgMjAwNSAwODoyOToxMSAtMDAwMAkxLjQKKysrIGtjYW52
YXMvS0NhbnZhc0NyZWF0b3IuaAk1IERlYyAyMDA1IDIyOjUyOjA0IC0wMDAwCkBAIC0yNiwxMiAr
MjYsNiBAQAogI2luY2x1ZGUgPGtjYW52YXMvS0NhbnZhc1BhdGguaD4KICNpbmNsdWRlIDxrY2Fu
dmFzL0tDYW52YXNUeXBlcy5oPgogCi1jbGFzcyBSZW5kZXJQYXRoOwotbmFtZXNwYWNlIEtTVkcg
ewotICAgIGNsYXNzIEtDYW52YXNSZW5kZXJpbmdTdHlsZTsKLX0KLWNsYXNzIEtDYW52YXNDb250
YWluZXI7Ci1jbGFzcyBLUmVuZGVyaW5nRGV2aWNlOwogY2xhc3MgS0NhbnZhc0NyZWF0b3IKIHsK
IHB1YmxpYzoKQEAgLTQxLDE0ICszNSwxMiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEtDYW52YXND
cmVhdG9yICpzZWxmKCk7CiAKICAgICAvLyBDYW52YXMgcGF0aCBjcmVhdGlvbgotICAgIEtDUGF0
aERhdGFMaXN0IGNyZWF0ZVJvdW5kZWRSZWN0YW5nbGUoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQg
d2lkdGgsIGZsb2F0IGhlaWdodCwgZmxvYXQgcngsIGZsb2F0IHJ5KSBjb25zdDsKLSAgICBLQ1Bh
dGhEYXRhTGlzdCBjcmVhdGVSZWN0YW5nbGUoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgd2lkdGgs
IGZsb2F0IGhlaWdodCkgY29uc3Q7Ci0gICAgS0NQYXRoRGF0YUxpc3QgY3JlYXRlRWxsaXBzZShm
bG9hdCBjeCwgZmxvYXQgY3ksIGZsb2F0IHJ4LCBmbG9hdCByeSkgY29uc3Q7Ci0gICAgS0NQYXRo
RGF0YUxpc3QgY3JlYXRlQ2lyY2xlKGZsb2F0IGN4LCBmbG9hdCBjeSwgZmxvYXQgcikgY29uc3Q7
Ci0gICAgS0NQYXRoRGF0YUxpc3QgY3JlYXRlTGluZShmbG9hdCB4MSwgZmxvYXQgeTEsIGZsb2F0
IHgyLCBmbG9hdCB5MikgY29uc3Q7CisgICAgS0NhbnZhc1BhdGgqIGNyZWF0ZVJvdW5kZWRSZWN0
YW5nbGUoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgZmxvYXQg
cngsIGZsb2F0IHJ5KSBjb25zdDsKKyAgICBLQ2FudmFzUGF0aCogY3JlYXRlUmVjdGFuZ2xlKGZs
b2F0IHgsIGZsb2F0IHksIGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQpIGNvbnN0OworICAgIEtD
YW52YXNQYXRoKiBjcmVhdGVFbGxpcHNlKGZsb2F0IGN4LCBmbG9hdCBjeSwgZmxvYXQgcngsIGZs
b2F0IHJ5KSBjb25zdDsKKyAgICBLQ2FudmFzUGF0aCogY3JlYXRlQ2lyY2xlKGZsb2F0IGN4LCBm
bG9hdCBjeSwgZmxvYXQgcikgY29uc3Q7CisgICAgS0NhbnZhc1BhdGgqIGNyZWF0ZUxpbmUoZmxv
YXQgeDEsIGZsb2F0IHkxLCBmbG9hdCB4MiwgZmxvYXQgeTIpIGNvbnN0OwogCi0gICAgLy8gQ2Fu
dmFzIGl0ZW0gY3JlYXRpb24KLSAgICBLQ2FudmFzVXNlckRhdGEgY3JlYXRlQ2FudmFzUGF0aERh
dGEoS1JlbmRlcmluZ0RldmljZSAqZGV2aWNlLCBjb25zdCBLQ1BhdGhEYXRhTGlzdCAmcGF0aERh
dGEpIGNvbnN0OwogcHJpdmF0ZToKICAgICBzdGF0aWMgS0NhbnZhc0NyZWF0b3IgKnNfY3JlYXRv
cjsKIH07CkluZGV4OiBrY2FudmFzL0tDYW52YXNJdGVtLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rY2FudmFzL0tDYW52YXNJdGVtLmNwcCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS45CmRpZmYgLXAgLXUgLXIxLjkga2NhbnZhcy9LQ2FudmFzSXRlbS5jcHAK
LS0tIGtjYW52YXMvS0NhbnZhc0l0ZW0uY3BwCTI3IE5vdiAyMDA1IDExOjAyOjE1IC0wMDAwCTEu
OQorKysga2NhbnZhcy9LQ2FudmFzSXRlbS5jcHAJNSBEZWMgMjAwNSAyMjo1MjowNCAtMDAwMApA
QCAtNDIsNyArNDIsNiBAQCBjbGFzcyBSZW5kZXJQYXRoOjpQcml2YXRlCiBwdWJsaWM6CiAgICAg
UHJpdmF0ZSgpCiAgICAgewotICAgICAgICBwYXRoID0gMDsKICAgICAgICAgc3R5bGUgPSAwOwog
ICAgIH0KIApAQCAtNTIsNyArNTEsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgS1NWRzo6S0Nh
bnZhc1JlbmRlcmluZ1N0eWxlICpzdHlsZTsKLSAgICBLQ2FudmFzVXNlckRhdGEgcGF0aDsKKyAg
ICBSZWZQdHI8S0NhbnZhc1BhdGg+IHBhdGg7CiAKICAgICBRUmVjdCBmaWxsQkJveCwgc3Ryb2tl
QmJveDsKICAgICBRTWF0cml4IG1hdHJpeDsKQEAgLTY3LDggKzY2LDYgQEAgUmVuZGVyUGF0aDo6
UmVuZGVyUGF0aChraHRtbDo6UmVuZGVyU3R5bAogCiBSZW5kZXJQYXRoOjp+UmVuZGVyUGF0aCgp
CiB7Ci0gICAgaWYoZC0+cGF0aCkKLSAgICAgICAgUVBhaW50ZXI6OnJlbmRlcmluZ0RldmljZSgp
LT5kZWxldGVQYXRoKGQtPnBhdGgpOwogICAgIGRlbGV0ZSBkOwogfQogCkBAIC0xMzYsMTkgKzEz
MywxNCBAQCB2b2lkIFJlbmRlclBhdGg6OnNldHVwRm9yRHJhdygpIGNvbnN0CiAgICAgfQogfQog
Ci12b2lkIFJlbmRlclBhdGg6OmNoYW5nZVBhdGgoS0NhbnZhc1VzZXJEYXRhIG5ld1BhdGgpCit2
b2lkIFJlbmRlclBhdGg6OmNoYW5nZVBhdGgoS0NhbnZhc1BhdGgqIG5ld1BhdGgpCiB7Ci0gICAg
QVNTRVJUKG5ld1BhdGgpOwotICAgIFFQYWludGVyOjpyZW5kZXJpbmdEZXZpY2UoKS0+c2V0Q3Vy
cmVudFBhdGgobmV3UGF0aCk7Ci0gICAgaWYgKGQtPnBhdGgpCi0gICAgICAgIFFQYWludGVyOjpy
ZW5kZXJpbmdEZXZpY2UoKS0+ZGVsZXRlUGF0aChkLT5wYXRoKTsKLQogICAgIGQtPnBhdGggPSBu
ZXdQYXRoOwogfQogCi1LQ2FudmFzVXNlckRhdGEgUmVuZGVyUGF0aDo6cGF0aCgpIGNvbnN0CitL
Q2FudmFzUGF0aCogUmVuZGVyUGF0aDo6cGF0aCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGQtPnBh
dGg7CisgICAgcmV0dXJuIGQtPnBhdGguZ2V0KCk7CiB9CiAKIEtTVkc6OktDYW52YXNSZW5kZXJp
bmdTdHlsZSAqUmVuZGVyUGF0aDo6Y2FudmFzU3R5bGUoKSBjb25zdApJbmRleDoga2NhbnZhcy9L
Q2FudmFzSXRlbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tj
YW52YXMvS0NhbnZhc0l0ZW0uaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42CmRpZmYgLXAgLXUg
LXIxLjYga2NhbnZhcy9LQ2FudmFzSXRlbS5oCi0tLSBrY2FudmFzL0tDYW52YXNJdGVtLmgJMjMg
Tm92IDIwMDUgMTU6MTQ6MDUgLTAwMDAJMS42CisrKyBrY2FudmFzL0tDYW52YXNJdGVtLmgJNSBE
ZWMgMjAwNSAyMjo1MjowNCAtMDAwMApAQCAtNTgsOSArNTgsOSBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzZXR1cEZvckRyYXcoKSBjb25zdDsKIAogICAgIC8vIFVwZGF0ZQotICAgIHZvaWQgY2hhbmdl
UGF0aChLQ2FudmFzVXNlckRhdGEgbmV3UGF0aCk7CisgICAgdm9pZCBjaGFuZ2VQYXRoKEtDYW52
YXNQYXRoKiBuZXdQYXRoKTsKIAotICAgIEtDYW52YXNVc2VyRGF0YSBwYXRoKCkgY29uc3Q7Cisg
ICAgS0NhbnZhc1BhdGgqIHBhdGgoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0U3R5bGUo
a2h0bWw6OlJlbmRlclN0eWxlICpzdHlsZSk7CiAgICAgS1NWRzo6S0NhbnZhc1JlbmRlcmluZ1N0
eWxlICpjYW52YXNTdHlsZSgpIGNvbnN0OwogCkluZGV4OiBrY2FudmFzL0tDYW52YXNNYXRyaXgu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tjYW52YXMvS0Nh
bnZhc01hdHJpeC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNQpkaWZmIC1wIC11IC1yMS41
IGtjYW52YXMvS0NhbnZhc01hdHJpeC5jcHAKLS0tIGtjYW52YXMvS0NhbnZhc01hdHJpeC5jcHAJ
NSBPY3QgMjAwNSAwNTozNjo0NSAtMDAwMAkxLjUKKysrIGtjYW52YXMvS0NhbnZhc01hdHJpeC5j
cHAJNSBEZWMgMjAwNSAyMjo1MjowNCAtMDAwMApAQCAtMjgwLDMxICsyODAsNiBAQCB2b2lkIEtD
YW52YXNNYXRyaXg6OnJlbW92ZVNjYWxlKGRvdWJsZSAqCiAgICAgKnhTY2FsZSA9IHN4OyAqeVNj
YWxlID0gc3k7CiB9CiAKLUtDUGF0aERhdGFMaXN0IEtDYW52YXNNYXRyaXg6Om1hcChjb25zdCBL
Q1BhdGhEYXRhTGlzdCAmcGF0aERhdGEpIGNvbnN0Ci17Ci0gICAgS0NQYXRoRGF0YUxpc3QgbWFw
cGVkOwotICAgIGZvcih1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwYXRoRGF0YS5jb3VudCgpOyBp
KyspCi0gICAgewotICAgICAgICBLQ1BhdGhEYXRhTGlzdDo6Q29uc3RJdGVyYXRvciBpdDsKLSAg
ICAgICAgS0NQYXRoRGF0YUxpc3Q6OkNvbnN0SXRlcmF0b3IgZW5kID0gcGF0aERhdGEuZW5kKCk7
Ci0KLSAgICAgICAgZm9yKGl0ID0gcGF0aERhdGEuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQot
ICAgICAgICB7Ci0gICAgICAgICAgICBLQ1BhdGhEYXRhIGRhdGEgPSAqaXQ7Ci0KLSAgICAgICAg
ICAgIGRvdWJsZSB4ID0gMC4wLCB5ID0gMC4wOwotICAgICAgICAgICAgbV9tYXRyaXgubWFwKGRh
dGEueDMsIGRhdGEueTMsICZ4LCAmeSk7Ci0KLSAgICAgICAgICAgIGlmKGRhdGEuY21kID09IENN
RF9NT1ZFKQotICAgICAgICAgICAgICAgIG1hcHBlZC5tb3ZlVG8oeCwgeSk7Ci0gICAgICAgICAg
ICBlbHNlIGlmKGRhdGEuY21kID09IENNRF9MSU5FKQotICAgICAgICAgICAgICAgIG1hcHBlZC5s
aW5lVG8oeCwgeSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbWFwcGVkOwotfQot
CiBRTWF0cml4IEtDYW52YXNNYXRyaXg6OnFtYXRyaXgoKSBjb25zdAogewogICAgIHJldHVybiBt
X21hdHJpeDsKSW5kZXg6IGtjYW52YXMvS0NhbnZhc01hdHJpeC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tjYW52YXMvS0NhbnZhc01hdHJpeC5oLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjQKZGlmZiAtcCAtdSAtcjEuNCBrY2FudmFzL0tDYW52YXNNYXRyaXgu
aAotLS0ga2NhbnZhcy9LQ2FudmFzTWF0cml4LmgJOCBTZXAgMjAwNSAwODowMzoxMCAtMDAwMAkx
LjQKKysrIGtjYW52YXMvS0NhbnZhc01hdHJpeC5oCTUgRGVjIDIwMDUgMjI6NTI6MDQgLTAwMDAK
QEAgLTMxLDcgKzMxLDcgQEAgdHlwZWRlZiBlbnVtCiAgICAgT1BTX1BPU1RNVUwgPSAyCiB9IEtD
TWF0cml4T3BlcmF0aW9uTW9kZTsKIAotY2xhc3MgS0NQYXRoRGF0YUxpc3Q7CitjbGFzcyBLQ2Fu
dmFzUGF0aDsKIGNsYXNzIEtDYW52YXNNYXRyaXgKIHsKIHB1YmxpYzoKQEAgLTkyLDEwICs5Miw2
IEBAIHB1YmxpYzoKICAgICAvLyBBZnRlciB0aGlzIG9wZXJhdGlvbiwgdGhlIG1hdHJpeCBoYXMg
eCBhbmQgeSBzY2FsZSBvZiBvbmUgKCcxJykuCiAgICAgdm9pZCByZW1vdmVTY2FsZShkb3VibGUg
KnhTY2FsZSwgZG91YmxlICp5U2NhbGUpOwogCi0gICAgLy8gVHJhbnNmb3JtICdwb2x5ZGF0YScg
dXNpbmcgY3VycmVudCBtYXRyaXguCi0gICAgLy8gKE9ubHkgd29ya3MgZm9yIGxpbmV0by9tb3Zl
dG8gb3BlcmF0aW9ucyEpCi0gICAgS0NQYXRoRGF0YUxpc3QgbWFwKGNvbnN0IEtDUGF0aERhdGFM
aXN0ICZwYXRoRGF0YSkgY29uc3Q7Ci0KICAgICBRTWF0cml4IHFtYXRyaXgoKSBjb25zdDsKIAog
cHJpdmF0ZToKSW5kZXg6IGtjYW52YXMvS0NhbnZhc1BhdGguY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tjYW52YXMvS0NhbnZhc1BhdGguY3BwLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjMKZGlmZiAtcCAtdSAtcjEuMyBrY2FudmFzL0tDYW52YXNQYXRoLmNw
cAotLS0ga2NhbnZhcy9LQ2FudmFzUGF0aC5jcHAJMjMgTm92IDIwMDUgMTU6MTQ6MDUgLTAwMDAJ
MS4zCisrKyBrY2FudmFzL0tDYW52YXNQYXRoLmNwcAk1IERlYyAyMDA1IDIyOjUyOjA0IC0wMDAw
CkBAIC0yNCwyNiArMjQsMTMgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiS0NhbnZhc1BhdGguaCIKKworI2luY2x1ZGUgPHFwYWludGVyLmg+CiAjaW5jbHVkZSA8cXRl
eHRzdHJlYW0uaD4KLSNpbmNsdWRlICJLQ2FudmFzVHJlZURlYnVnLmgiCiAKLS8vS0NQYXRoQ29t
bWFuZAotUVRleHRTdHJlYW0gJm9wZXJhdG9yPDwoUVRleHRTdHJlYW0gJnRzLCBLQ1BhdGhDb21t
YW5kIGNtZCkKLXsKLSAgICBzd2l0Y2ggKGNtZCkgCi0gICAgewotICAgICAgICBjYXNlIENNRF9N
T1ZFOgotICAgICAgICAgICAgdHMgPDwgIk1PVkUiOyBicmVhazsKLSAgICAgICAgY2FzZSBDTURf
TElORToKLSAgICAgICAgICAgIHRzIDw8ICJMSU5FIjsgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ01E
X0NVUlZFOgotICAgICAgICAgICAgdHMgPDwgIkNVUlZFIjsgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
Q01EX0NMT1NFX1NVQlBBVEg6Ci0gICAgICAgICAgICB0cyA8PCAiQ0xPU0VfU1VCUEFUSCI7IGJy
ZWFrOwotICAgIH0KLSAgICByZXR1cm4gdHM7Ci19CisjaW5jbHVkZSAiS0NhbnZhc1BhdGguaCIK
KyNpbmNsdWRlICJLQ2FudmFzVHJlZURlYnVnLmgiCisjaW5jbHVkZSAiS1JlbmRlcmluZ0Rldmlj
ZS5oIgogCiAvL0tDV2luZFJ1bGUKIFFUZXh0U3RyZWFtICZvcGVyYXRvcjw8KFFUZXh0U3RyZWFt
ICZ0cywgS0NXaW5kUnVsZSBydWxlKQpAQCAtNTgsMzQgKzQ1LDEyIEBAIFFUZXh0U3RyZWFtICZv
cGVyYXRvcjw8KFFUZXh0U3RyZWFtICZ0cywKICAgICByZXR1cm4gdHM7CiB9CiAKLS8vS0NQYXRo
RGF0YQotUVRleHRTdHJlYW0gJm9wZXJhdG9yPDwoUVRleHRTdHJlYW0gJnRzLCBjb25zdCBLQ1Bh
dGhEYXRhICZkKQotewotICAgIHRzIDw8ICJ7Y21kPSIgPDwgZC5jbWQ7Ci0gICAgc3dpdGNoKGQu
Y21kKQotICAgIHsgICAgCi0gICAgICAgIGNhc2UgQ01EX0NVUlZFOiAgCi0gICAgICAgICAgICB0
cyA8PCAiIHgxPSI8PCBkLngxIDw8ICIgeTE9IiA8PCBkLnkxCi0gICAgICAgICAgICAgICAgPDwg
IiB4Mj0iPDwgZC54MiA8PCAiIHkyPSIgPDwgZC55MjsKLSAgICAgICAgICAgIC8qIGZhbGx0aHJv
dWdoICovCi0gICAgICAgIGNhc2UgQ01EX0xJTkU6Ci0gICAgICAgIGNhc2UgQ01EX01PVkU6Ci0g
ICAgICAgICAgICB0cyA8PCAiIHgzPSI8PCBkLngzIDw8ICIgeTM9IiA8PCBkLnkzOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ01EX0NMT1NFX1NVQlBBVEg6Ci0gICAgICAgICAg
ICAvKmVtcHR5Ki8KLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICB0cyA8PCAifSI7Ci0g
ICAgcmV0dXJuIHRzOwotfQotCiAvL0tDQ2xpcERhdGEKIFFUZXh0U3RyZWFtICZvcGVyYXRvcjw8
KFFUZXh0U3RyZWFtICZ0cywgY29uc3QgS0NDbGlwRGF0YSAmZCkKIHsKLSAgICB0cyA8PCAiW3dp
bmRpbmc9IiA8PCBkLnJ1bGUgIDw8ICJdIjsKLSAgICBpZiAoZC5iYm94KQotICAgICAgICB0cyA8
PCAiIFtib3VuZGluZyBib3ggbW9kZT0iIDw8IGQuYmJveCAgPDwgIl0iOyAgICAKLSAgICB0cyA8
PCAiIFtwYXRoPSIgPDwgZC5wYXRoIDw8ICJdIjsKKyAgICB0cyA8PCAiW3dpbmRpbmc9IiA8PCBk
LndpbmRSdWxlICA8PCAiXSI7CisgICAgaWYgKGQuYmJveFVuaXRzKQorICAgICAgICB0cyA8PCAi
IFtib3VuZGluZyBib3ggbW9kZT0iIDw8IGQuYmJveFVuaXRzICA8PCAiXSI7ICAgIAorICAgIHRz
IDw8ICIgW3BhdGg9IiA8PCBRUGFpbnRlcjo6cmVuZGVyaW5nRGV2aWNlKCktPnN0cmluZ0ZvclBh
dGgoZC5wYXRoLmdldCgpKSA8PCAiXSI7CiAgICAgcmV0dXJuIHRzOwogfQpJbmRleDoga2NhbnZh
cy9LQ2FudmFzUGF0aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0
L2tjYW52YXMvS0NhbnZhc1BhdGguaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42CmRpZmYgLXAg
LXUgLXIxLjYga2NhbnZhcy9LQ2FudmFzUGF0aC5oCi0tLSBrY2FudmFzL0tDYW52YXNQYXRoLmgJ
MjMgTm92IDIwMDUgMTU6MTQ6MDUgLTAwMDAJMS42CisrKyBrY2FudmFzL0tDYW52YXNQYXRoLmgJ
NSBEZWMgMjAwNSAyMjo1MjowNCAtMDAwMApAQCAtMSw0ICsxLDUgQEAKIC8qCisgICAgQ29weXJp
Z2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgogICAgICAgICAgICAg
ICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogCkBAIC0yNCw2ICsyNSw5
IEBACiAjZGVmaW5lIEtDYW52YXNQYXRoX0gKIAogI2luY2x1ZGUgPHEzdmFsdWVsaXN0Lmg+Cisj
aW5jbHVkZSA8a3htbGNvcmUvUmVmUHRyLmg+CisjaW5jbHVkZSA8a3htbGNvcmUvQXNzZXJ0aW9u
cy5oPgorI2luY2x1ZGUgIm1pc2Mvc2hhcmVkLmgiCiAKIGNsYXNzIFFUZXh0U3RyZWFtOwogCkBA
IC00NCw1OSArNDgsMjUgQEAgdHlwZWRlZiBlbnVtCiAgICAgQ01EX0NMT1NFX1NVQlBBVEggPSAz
CiB9IEtDUGF0aENvbW1hbmQ7CiAKLVFUZXh0U3RyZWFtICZvcGVyYXRvcjw8KFFUZXh0U3RyZWFt
ICZ0cywgS0NQYXRoQ29tbWFuZCBjbWQpOwotCi1zdHJ1Y3QgS0NQYXRoRGF0YQotewotICAgIEtD
UGF0aENvbW1hbmQgY21kIDogMjsKLQotICAgIGRvdWJsZSB4MSwgeDIsIHgzOwotICAgIGRvdWJs
ZSB5MSwgeTIsIHkzOwotfTsKLQotUVRleHRTdHJlYW0gJm9wZXJhdG9yPDwoUVRleHRTdHJlYW0g
JnRzLCBjb25zdCBLQ1BhdGhEYXRhICZkKTsKLQotY2xhc3MgS0NQYXRoRGF0YUxpc3QgOiBwdWJs
aWMgUTNWYWx1ZUxpc3Q8S0NQYXRoRGF0YT4KK2NsYXNzIEtDYW52YXNQYXRoIDogcHVibGljIGto
dG1sOjpTaGFyZWQ8S0NhbnZhc1BhdGg+CiB7CiBwdWJsaWM6Ci0gICAgS0NQYXRoRGF0YUxpc3Qo
KSB7IH0KLQotICAgIGlubGluZSB2b2lkIG1vdmVUbyhkb3VibGUgeCwgZG91YmxlIHkpCi0gICAg
ewotICAgICAgICBLQ1BhdGhEYXRhIGRhdGE7IGRhdGEuY21kID0gQ01EX01PVkU7Ci0gICAgICAg
IGRhdGEueDMgPSB4OyBkYXRhLnkzID0geTsKLSAgICAgICAgYXBwZW5kKGRhdGEpOwotICAgIH0K
LQotICAgIGlubGluZSB2b2lkIGxpbmVUbyhkb3VibGUgeCwgZG91YmxlIHkpCi0gICAgewotICAg
ICAgICBLQ1BhdGhEYXRhIGRhdGE7IGRhdGEuY21kID0gQ01EX0xJTkU7Ci0gICAgICAgIGRhdGEu
eDMgPSB4OyBkYXRhLnkzID0geTsKLSAgICAgICAgYXBwZW5kKGRhdGEpOwotICAgIH0KLQotICAg
IGlubGluZSB2b2lkIGN1cnZlVG8oZG91YmxlIHgxLCBkb3VibGUgeTEsIGRvdWJsZSB4MiwgZG91
YmxlIHkyLCBkb3VibGUgeDMsIGRvdWJsZSB5MykKLSAgICB7Ci0gICAgICAgIEtDUGF0aERhdGEg
ZGF0YTsgZGF0YS5jbWQgPSBDTURfQ1VSVkU7Ci0gICAgICAgIGRhdGEueDEgPSB4MTsgZGF0YS55
MSA9IHkxOwotICAgICAgICBkYXRhLngyID0geDI7IGRhdGEueTIgPSB5MjsKLSAgICAgICAgZGF0
YS54MyA9IHgzOyBkYXRhLnkzID0geTM7Ci0gICAgICAgIGFwcGVuZChkYXRhKTsKLSAgICB9Ci0K
LSAgICBpbmxpbmUgdm9pZCBjbG9zZVN1YnBhdGgoKQotICAgIHsKLSAgICAgICAgIEtDUGF0aERh
dGEgZGF0YTsgZGF0YS5jbWQgPSBDTURfQ0xPU0VfU1VCUEFUSDsKLSAgICAgICAgIGFwcGVuZChk
YXRhKTsKLSAgICB9CisgICAgdmlydHVhbCB+S0NhbnZhc1BhdGgoKSB7IH0KKyAgICAKKyAgICB2
aXJ0dWFsIGJvb2wgaXNFbXB0eSgpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBtb3Zl
VG8oZG91YmxlIHgsIGRvdWJsZSB5KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGxpbmVUbyhkb3Vi
bGUgeCwgZG91YmxlIHkpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY3VydmVUbyhkb3VibGUgeDEs
IGRvdWJsZSB5MSwgZG91YmxlIHgyLCBkb3VibGUgeTIsIGRvdWJsZSB4MywgZG91YmxlIHkzKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGNsb3NlU3VicGF0aCgpID0gMDsKIH07CiAKIC8vIENsaXBw
aW5nIHBhdGhzCiBzdHJ1Y3QgS0NDbGlwRGF0YQogewotICAgIEtDV2luZFJ1bGUgcnVsZSA6IDE7
Ci0gICAgYm9vbCBiYm94IDogMTsKLSAgICBLQ1BhdGhEYXRhTGlzdCBwYXRoOworICAgIEtDV2lu
ZFJ1bGUgd2luZFJ1bGUgOiAxOworICAgIGJvb2wgYmJveFVuaXRzIDogMTsKKyAgICBSZWZQdHI8
S0NhbnZhc1BhdGg+IHBhdGg7CiB9OwogCiBRVGV4dFN0cmVhbSAmb3BlcmF0b3I8PChRVGV4dFN0
cmVhbSAmdHMsIGNvbnN0IEtDQ2xpcERhdGEgJmQpOwpAQCAtMTA2LDEzICs3NiwxNCBAQCBjbGFz
cyBLQ0NsaXBEYXRhTGlzdCA6IHB1YmxpYyBRM1ZhbHVlTGlzCiBwdWJsaWM6CiAgICAgS0NDbGlw
RGF0YUxpc3QoKSB7IH0KIAotICAgIGlubGluZSB2b2lkIGFkZFBhdGgoY29uc3QgS0NQYXRoRGF0
YUxpc3QgJnBhdGhEYXRhLCBLQ1dpbmRSdWxlIHJ1bGUsIGJvb2wgYmJveCkKKyAgICBpbmxpbmUg
dm9pZCBhZGRQYXRoKEtDYW52YXNQYXRoICpwYXRoRGF0YSwgS0NXaW5kUnVsZSB3aW5kUnVsZSwg
Ym9vbCBiYm94VW5pdHMpCiAgICAgewotICAgICAgICBLQ0NsaXBEYXRhIGRhdGE7Ci0gICAgICAg
IGRhdGEucnVsZSA9IHJ1bGU7Ci0gICAgICAgIGRhdGEuYmJveCA9IGJib3g7Ci0gICAgICAgIGRh
dGEucGF0aCA9IHBhdGhEYXRhOwotICAgICAgICBhcHBlbmQoZGF0YSk7CisgICAgICAgIEFTU0VS
VChwYXRoRGF0YSk7CisgICAgICAgIEtDQ2xpcERhdGEgY2xpcERhdGE7CisgICAgICAgIGNsaXBE
YXRhLndpbmRSdWxlID0gd2luZFJ1bGU7CisgICAgICAgIGNsaXBEYXRhLmJib3hVbml0cyA9IGJi
b3hVbml0czsKKyAgICAgICAgY2xpcERhdGEucGF0aCA9IHBhdGhEYXRhOworICAgICAgICBhcHBl
bmQoY2xpcERhdGEpOwogICAgIH0KIH07CiAKSW5kZXg6IGtjYW52YXMvS0NhbnZhc1Jlc291cmNl
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2NhbnZhcy9L
Q2FudmFzUmVzb3VyY2VzLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMQpkaWZmIC1wIC11
IC1yMS4xMSBrY2FudmFzL0tDYW52YXNSZXNvdXJjZXMuY3BwCi0tLSBrY2FudmFzL0tDYW52YXNS
ZXNvdXJjZXMuY3BwCTI5IE5vdiAyMDA1IDAyOjAzOjU1IC0wMDAwCTEuMTEKKysrIGtjYW52YXMv
S0NhbnZhc1Jlc291cmNlcy5jcHAJNSBEZWMgMjAwNSAyMjo1MjowNCAtMDAwMApAQCAtMTAyLDkg
KzEwMiw5IEBAIHZvaWQgS0NhbnZhc0NsaXBwZXI6OnJlc2V0Q2xpcERhdGEoKQogICAgIG1fY2xp
cERhdGEuY2xlYXIoKTsKIH0KIAotdm9pZCBLQ2FudmFzQ2xpcHBlcjo6YWRkQ2xpcERhdGEoY29u
c3QgS0NQYXRoRGF0YUxpc3QgJnBhdGgsIEtDV2luZFJ1bGUgcnVsZSwgYm9vbCBiYm94KQordm9p
ZCBLQ2FudmFzQ2xpcHBlcjo6YWRkQ2xpcERhdGEoS0NhbnZhc1BhdGgqIHBhdGgsIEtDV2luZFJ1
bGUgcnVsZSwgYm9vbCBiYm94VW5pdHMpCiB7Ci0gICAgbV9jbGlwRGF0YS5hZGRQYXRoKHBhdGgs
IHJ1bGUsIGJib3gpOworICAgIG1fY2xpcERhdGEuYWRkUGF0aChwYXRoLCBydWxlLCBiYm94VW5p
dHMpOwogfQogCiBLQ0NsaXBEYXRhTGlzdCBLQ2FudmFzQ2xpcHBlcjo6Y2xpcERhdGEoKSBjb25z
dApJbmRleDoga2NhbnZhcy9LQ2FudmFzUmVzb3VyY2VzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1NWR1N1cHBvcnQva2NhbnZhcy9LQ2FudmFzUmVzb3VyY2VzLmgsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMTAKZGlmZiAtcCAtdSAtcjEuMTAga2NhbnZhcy9LQ2FudmFzUmVzb3Vy
Y2VzLmgKLS0tIGtjYW52YXMvS0NhbnZhc1Jlc291cmNlcy5oCTI5IE5vdiAyMDA1IDAyOjAzOjU1
IC0wMDAwCTEuMTAKKysrIGtjYW52YXMvS0NhbnZhc1Jlc291cmNlcy5oCTUgRGVjIDIwMDUgMjI6
NTI6MDQgLTAwMDAKQEAgLTc5LDcgKzc5LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBp
c0NsaXBwZXIoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKICAgICB2b2lkIHJlc2V0Q2xpcERh
dGEoKTsKLSAgICB2b2lkIGFkZENsaXBEYXRhKGNvbnN0IEtDUGF0aERhdGFMaXN0ICZwYXRoLCBL
Q1dpbmRSdWxlIHJ1bGUsIGJvb2wgYmJveCk7CisgICAgdm9pZCBhZGRDbGlwRGF0YShLQ2FudmFz
UGF0aCAqcGF0aCwgS0NXaW5kUnVsZSBydWxlLCBib29sIGJib3hVbml0cyk7CiAKICAgICBLQ0Ns
aXBEYXRhTGlzdCBjbGlwRGF0YSgpIGNvbnN0OwogCkluZGV4OiBrY2FudmFzL0tDYW52YXNUeXBl
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tjYW52YXMvS0Nh
bnZhc1R5cGVzLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNQpkaWZmIC1wIC11IC1yMS41IGtj
YW52YXMvS0NhbnZhc1R5cGVzLmgKLS0tIGtjYW52YXMvS0NhbnZhc1R5cGVzLmgJMjEgTm92IDIw
MDUgMDg6Mjk6MTEgLTAwMDAJMS41CisrKyBrY2FudmFzL0tDYW52YXNUeXBlcy5oCTUgRGVjIDIw
MDUgMjI6NTI6MDQgLTAwMDAKQEAgLTIzLDQ1ICsyMywzMSBAQAogI2lmbmRlZiBLQ2FudmFzVHlw
ZXNfSAogI2RlZmluZSBLQ2FudmFzVHlwZXNfSAogCi0jaW5jbHVkZSA8cTNwdHJsaXN0Lmg+Ci0K
LS8vIFNvbWUgZGVmYXVsdCBjb25zdGFudHMKLQotLy8gSG9sZHMgYW55IHB0ciB1bmRlciBhIG5p
Y2Ugc3lub255bSA6KQotdHlwZWRlZiB2b2lkICpLQ2FudmFzVXNlckRhdGE7Ci0KLSNpZmRlZiBB
UFBMRV9DSEFOR0VTCi1jbGFzcyBLQ2FudmFzUHJpdmF0ZVVzZXJEYXRhIHsKLQotfTsKLQotdHlw
ZWRlZiBRM1B0ckxpc3Q8S0NhbnZhc1ByaXZhdGVVc2VyRGF0YT4gS0NhbnZhc1VzZXJEYXRhTGlz
dDsKLSNlbHNlCi10eXBlZGVmIFEzUHRyTGlzdDx2b2lkPiBLQ2FudmFzVXNlckRhdGFMaXN0Owot
I2VuZGlmCisjaW5jbHVkZSA8a3htbGNvcmUvUmVmUHRyLmg+CiAKIC8vIGFrYSAid2hhdCB0byBk
cmF3IgogbmFtZXNwYWNlIEtTVkcgewogICAgIGNsYXNzIEtDYW52YXNSZW5kZXJpbmdTdHlsZTsK
IH0KKworY2xhc3MgS0NhbnZhc1BhdGg7CiBjbGFzcyBLQ2FudmFzQ29tbW9uQXJncwogewogcHVi
bGljOgogICAgIEtDYW52YXNDb21tb25BcmdzKCk7CiAgICAgfktDYW52YXNDb21tb25BcmdzKCk7
CiAKLSAgICBLQ2FudmFzVXNlckRhdGEgcGF0aCgpIGNvbnN0OwotICAgIHZvaWQgc2V0UGF0aChL
Q2FudmFzVXNlckRhdGEgcGF0aCk7CisgICAgS0NhbnZhc1BhdGgqIHBhdGgoKSBjb25zdDsKKyAg
ICB2b2lkIHNldFBhdGgoS0NhbnZhc1BhdGgqIHBhdGgpOwogCiAgICAgS1NWRzo6S0NhbnZhc1Jl
bmRlcmluZ1N0eWxlICpjYW52YXNTdHlsZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0U3R5bGUoS1NW
Rzo6S0NhbnZhc1JlbmRlcmluZ1N0eWxlICpzdHlsZSk7CiAgICAgCiBwcml2YXRlOgotICAgIEtD
YW52YXNVc2VyRGF0YSBtX3BhdGg7CisgICAgUmVmUHRyPEtDYW52YXNQYXRoPiBtX3BhdGg7CiAg
ICAgS1NWRzo6S0NhbnZhc1JlbmRlcmluZ1N0eWxlICptX3N0eWxlOwogfTsKIAotCiAjZW5kaWYK
IAogLy8gdmltOnRzPTQ6bm9ldApJbmRleDoga2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ0Rldmlj
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2NhbnZhcy9k
ZXZpY2UvS1JlbmRlcmluZ0RldmljZS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNQpkaWZm
IC1wIC11IC1yMS41IGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdEZXZpY2UuY3BwCi0tLSBrY2Fu
dmFzL2RldmljZS9LUmVuZGVyaW5nRGV2aWNlLmNwcAkyMSBOb3YgMjAwNSAwODoyOToxMyAtMDAw
MAkxLjUKKysrIGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdEZXZpY2UuY3BwCTUgRGVjIDIwMDUg
MjI6NTI6MDQgLTAwMDAKQEAgLTMzLDEyICszMywxMiBAQCBLQ2FudmFzQ29tbW9uQXJnczo6fktD
YW52YXNDb21tb25BcmdzKCkKIHsKIH0KIAotS0NhbnZhc1VzZXJEYXRhIEtDYW52YXNDb21tb25B
cmdzOjpwYXRoKCkgY29uc3QKK0tDYW52YXNQYXRoKiBLQ2FudmFzQ29tbW9uQXJnczo6cGF0aCgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fcGF0aDsKKyAgICByZXR1cm4gbV9wYXRoLmdldCgpOwog
fQogCi12b2lkIEtDYW52YXNDb21tb25BcmdzOjpzZXRQYXRoKEtDYW52YXNVc2VyRGF0YSBwYXRo
KQordm9pZCBLQ2FudmFzQ29tbW9uQXJnczo6c2V0UGF0aChLQ2FudmFzUGF0aCogcGF0aCkKIHsK
ICAgICBtX3BhdGggPSBwYXRoOwogfQpAQCAtNTUsMTggKzU1LDEyIEBAIHZvaWQgS0NhbnZhc0Nv
bW1vbkFyZ3M6OnNldFN0eWxlKEtTVkc6OksKIAogS1JlbmRlcmluZ0RldmljZTo6S1JlbmRlcmlu
Z0RldmljZSgpCiB7Ci0gICAgbV9jdXJyZW50UGF0aCA9IDA7CiB9CiAKIEtSZW5kZXJpbmdEZXZp
Y2U6On5LUmVuZGVyaW5nRGV2aWNlKCkKIHsKIH0KIAotS0NhbnZhc1VzZXJEYXRhIEtSZW5kZXJp
bmdEZXZpY2U6OmN1cnJlbnRQYXRoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9jdXJyZW50UGF0
aDsKLX0KLQogS1JlbmRlcmluZ0RldmljZUNvbnRleHQgKktSZW5kZXJpbmdEZXZpY2U6OmN1cnJl
bnRDb250ZXh0KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9jb250ZXh0U3RhY2suY3VycmVudCgp
OwpAQCAtODIsOSArNzYsNCBAQCB2b2lkIEtSZW5kZXJpbmdEZXZpY2U6OnB1c2hDb250ZXh0KEtS
ZW5kCiAgICAgbV9jb250ZXh0U3RhY2sucHVzaChjb250ZXh0KTsKIH0KIAotdm9pZCBLUmVuZGVy
aW5nRGV2aWNlOjpzZXRDdXJyZW50UGF0aChLQ2FudmFzVXNlckRhdGEgcGF0aCkKLXsKLSAgICBt
X2N1cnJlbnRQYXRoID0gcGF0aDsKLX0KLQogLy8gdmltOnRzPTQ6bm9ldApJbmRleDoga2NhbnZh
cy9kZXZpY2UvS1JlbmRlcmluZ0RldmljZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9TVkdTdXBwb3J0L2tjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdEZXZpY2UuaCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS42CmRpZmYgLXAgLXUgLXIxLjYga2NhbnZhcy9kZXZpY2UvS1JlbmRlcmlu
Z0RldmljZS5oCi0tLSBrY2FudmFzL2RldmljZS9LUmVuZGVyaW5nRGV2aWNlLmgJMjIgTm92IDIw
MDUgMjM6MDQ6MjcgLTAwMDAJMS42CisrKyBrY2FudmFzL2RldmljZS9LUmVuZGVyaW5nRGV2aWNl
LmgJNSBEZWMgMjAwNSAyMjo1MjowNCAtMDAwMApAQCAtNjAsMTAgKzYwLDYgQEAgcHVibGljOgog
ICAgIC8vIGFmdGVyIHRoZSBjYW52YXMgdGFyZ2V0LCBpdCBtYXkgYmUgb3ZlcndyaXR0ZW4uCiAg
ICAgdmlydHVhbCBib29sIGlzQnVmZmVyZWQoKSBjb25zdCA9IDA7CiAKLSAgICAvLyBSZXR1cm5z
IGEgcG9pbnRlciB0byB0aGUgbGFzdCBjb25zdHJ1Y3RlZCB2ZWN0b3IgcGF0aAotICAgIC8vIENh
bGwgaXQgYWZ0ZXIgc3RhcnRQYXRoKCkuLi4uZW5kUGF0aCgpIHRvIGdldCB0aGUgcmVzdWx0IQot
ICAgIEtDYW52YXNVc2VyRGF0YSBjdXJyZW50UGF0aCgpIGNvbnN0OwotCiAgICAgLy8gR2xvYmFs
IHJlbmRlcmluZyBkZXZpY2UgY29udGV4dAogICAgIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0ICpj
dXJyZW50Q29udGV4dCgpIGNvbnN0OwogCkBAIC03MSwzNSArNjcsMTkgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCBwdXNoQ29udGV4dChLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCAqY29udGV4
dCk7CiAgICAgCiAgICAgdmlydHVhbCBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCAqY29udGV4dEZv
ckltYWdlKEtDYW52YXNJbWFnZSAqaW1hZ2UpIGNvbnN0ID0gMDsKLQotICAgIC8vIFZlY3RvciBw
YXRoIGNyZWF0aW9uCi0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZVBhdGgoS0NhbnZhc1VzZXJEYXRh
IHBhdGgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc3RhcnRQYXRoKCkgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBlbmRQYXRoKCkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIG1vdmVUbyhkb3VibGUg
eCwgZG91YmxlIHkpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbGluZVRvKGRvdWJsZSB4LCBkb3Vi
bGUgeSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjdXJ2ZVRvKGRvdWJsZSB4MSwgZG91YmxlIHkx
LCBkb3VibGUgeDIsIGRvdWJsZSB5MiwgZG91YmxlIHgzLCBkb3VibGUgeTMpID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgY2xvc2VTdWJwYXRoKCkgPSAwOwogICAgIAotICAgIHZpcnR1YWwgUVN0cmlu
ZyBzdHJpbmdGb3JQYXRoKEtDYW52YXNVc2VyRGF0YSBwYXRoKSA9IDA7CisgICAgdmlydHVhbCBR
U3RyaW5nIHN0cmluZ0ZvclBhdGgoY29uc3QgS0NhbnZhc1BhdGgqIHBhdGgpID0gMDsKIAogICAg
IC8vIENyZWF0aW9uIHRvb2xzCiAgICAgdmlydHVhbCBLQ2FudmFzUmVzb3VyY2UgKmNyZWF0ZVJl
c291cmNlKGNvbnN0IEtDUmVzb3VyY2VUeXBlICZ0eXBlKSBjb25zdCA9IDA7CiAgICAgdmlydHVh
bCBLQ2FudmFzRmlsdGVyRWZmZWN0ICpjcmVhdGVGaWx0ZXJFZmZlY3QoY29uc3QgS0NGaWx0ZXJF
ZmZlY3RUeXBlICZ0eXBlKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBLUmVuZGVyaW5nUGFpbnRT
ZXJ2ZXIgKmNyZWF0ZVBhaW50U2VydmVyKGNvbnN0IEtDUGFpbnRTZXJ2ZXJUeXBlICZ0eXBlKSBj
b25zdCA9IDA7CiAKLSAgICB2aXJ0dWFsIFJlbmRlclBhdGggKmNyZWF0ZUl0ZW0oUmVuZGVyQXJl
bmEgKmFyZW5hLCBraHRtbDo6UmVuZGVyU3R5bGUgKnN0eWxlLCBLU1ZHOjpTVkdTdHlsZWRFbGVt
ZW50SW1wbCAqbm9kZSwgS0NhbnZhc1VzZXJEYXRhIHBhdGgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0
dWFsIFJlbmRlclBhdGggKmNyZWF0ZUl0ZW0oUmVuZGVyQXJlbmEgKmFyZW5hLCBraHRtbDo6UmVu
ZGVyU3R5bGUgKnN0eWxlLCBLU1ZHOjpTVkdTdHlsZWRFbGVtZW50SW1wbCAqbm9kZSwgS0NhbnZh
c1BhdGgqIHBhdGgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIEtDYW52YXNDb250YWluZXIgKmNy
ZWF0ZUNvbnRhaW5lcihSZW5kZXJBcmVuYSAqYXJlbmEsIGtodG1sOjpSZW5kZXJTdHlsZSAqc3R5
bGUsIEtTVkc6OlNWR1N0eWxlZEVsZW1lbnRJbXBsICpub2RlKSBjb25zdCA9IDA7Ci0KLQotcHJv
dGVjdGVkOiAvLyBUbyBiZSB1c2VkIGJ5IGZyb20gaW5oZXJpdGVkIGVuZFBhdGgoKQotICAgIGZy
aWVuZCBjbGFzcyBSZW5kZXJQYXRoOwotCi0gICAgdm9pZCBzZXRDdXJyZW50UGF0aChLQ2FudmFz
VXNlckRhdGEgcGF0aCk7CisgICAgdmlydHVhbCBLQ2FudmFzUGF0aCogY3JlYXRlUGF0aCgpIGNv
bnN0ID0gMDsKIAogcHJpdmF0ZToKLSAgICBLQ2FudmFzVXNlckRhdGEgbV9jdXJyZW50UGF0aDsK
ICAgICBRM1B0clN0YWNrPEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0PiBtX2NvbnRleHRTdGFjazsK
IH07CiAKSW5kZXg6IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LQ2FudmFzSXRlbVF1YXJ0ei5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rY2FudmFzL2RldmljZS9x
dWFydHovS0NhbnZhc0l0ZW1RdWFydHoubW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTMKZGlm
ZiAtcCAtdSAtcjEuMTMga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNJdGVtUXVhcnR6Lm1t
Ci0tLSBrY2FudmFzL2RldmljZS9xdWFydHovS0NhbnZhc0l0ZW1RdWFydHoubW0JMjkgTm92IDIw
MDUgMTE6MjA6NDIgLTAwMDAJMS4xMworKysga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNJ
dGVtUXVhcnR6Lm1tCTUgRGVjIDIwMDUgMjI6NTI6MDQgLTAwMDAKQEAgLTM1LDYgKzM1LDcgQEAK
ICNpbXBvcnQgIktSZW5kZXJpbmdTdHJva2VQYWludGVyLmgiCiAjaW1wb3J0ICJLQ2FudmFzTWF0
cml4LmgiCiAKKyNpbXBvcnQgIktDYW52YXNQYXRoUXVhcnR6LmgiCiAjaW1wb3J0ICJLUmVuZGVy
aW5nRGV2aWNlUXVhcnR6LmgiCiAjaW1wb3J0ICJLQ2FudmFzRmlsdGVyUXVhcnR6LmgiCiAjaW1w
b3J0ICJLQ2FudmFzUmVzb3VyY2VzUXVhcnR6LmgiCkBAIC0yMDMsNyArMjA0LDcgQEAgdm9pZCBL
Q2FudmFzSXRlbVF1YXJ0ejo6cGFpbnQoUGFpbnRJbmZvIAogICAgIAogICAgIFJlbmRlclBhdGg6
OnNldHVwRm9yRHJhdygpOwogCi0gICAgQ0dNdXRhYmxlUGF0aFJlZiBjZ1BhdGggPSBzdGF0aWNf
Y2FzdDxLQ2FudmFzUXVhcnR6UGF0aERhdGEgKj4ocGF0aCgpKS0+cGF0aDsKKyAgICBDR1BhdGhS
ZWYgY2dQYXRoID0gc3RhdGljX2Nhc3Q8S0NhbnZhc1BhdGhRdWFydHoqPihwYXRoKCkpLT5jZ1Bh
dGgoKTsKICAgICBBU1NFUlQoY2dQYXRoICE9IDApOwogCiAgICAgQ0dBZmZpbmVUcmFuc2Zvcm0g
dHJhbnNmb3JtID0gQ0dBZmZpbmVUcmFuc2Zvcm0obG9jYWxUcmFuc2Zvcm0oKSk7CkBAIC0yODgs
OCArMjg5LDcgQEAgQ0dDb250ZXh0UmVmIGdldFNoYXJlZENvbnRleHQoKQogCiBRUmVjdCBLQ2Fu
dmFzSXRlbVF1YXJ0ejo6YmJveEZvclBhdGgoYm9vbCBpbmNsdWRlU3Ryb2tlKSBjb25zdAogewot
ICAgIEtDYW52YXNRdWFydHpQYXRoRGF0YSAqcGF0aERhdGEgPSBzdGF0aWNfY2FzdDxLQ2FudmFz
UXVhcnR6UGF0aERhdGEgKj4ocGF0aCgpKTsKLSAgICBDR011dGFibGVQYXRoUmVmIGNnUGF0aCA9
IHBhdGhEYXRhLT5wYXRoOworICAgIENHUGF0aFJlZiBjZ1BhdGggPSBzdGF0aWNfY2FzdDxLQ2Fu
dmFzUGF0aFF1YXJ0eio+KHBhdGgoKSktPmNnUGF0aCgpOwogICAgIEFTU0VSVChjZ1BhdGggIT0g
MCk7CiAgICAgQ0dSZWN0IGJib3g7CiAKQEAgLTMxNyw3ICszMTcsNyBAQCBRUmVjdCBLQ2FudmFz
SXRlbVF1YXJ0ejo6YmJveEZvclBhdGgoYm9vCiAKIGJvb2wgS0NhbnZhc0l0ZW1RdWFydHo6Omhp
dHNQYXRoKGNvbnN0IFFQb2ludCAmaGl0UG9pbnQsIGJvb2wgZmlsbCkgY29uc3QKIHsKLSAgICBD
R011dGFibGVQYXRoUmVmIGNnUGF0aCA9IHN0YXRpY19jYXN0PEtDYW52YXNRdWFydHpQYXRoRGF0
YSAqPihwYXRoKCkpLT5wYXRoOworICAgIENHUGF0aFJlZiBjZ1BhdGggPSBzdGF0aWNfY2FzdDxL
Q2FudmFzUGF0aFF1YXJ0eio+KHBhdGgoKSktPmNnUGF0aCgpOwogICAgIEFTU0VSVChjZ1BhdGgg
IT0gMCk7CiAKICAgICBib29sIGhpdFN1Y2Nlc3MgPSBmYWxzZTsKSW5kZXg6IGtjYW52YXMvZGV2
aWNlL3F1YXJ0ei9LQ2FudmFzUGF0aFF1YXJ0ei5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IGtjYW52
YXMvZGV2aWNlL3F1YXJ0ei9LQ2FudmFzUGF0aFF1YXJ0ei5oCmRpZmYgLU4ga2NhbnZhcy9kZXZp
Y2UvcXVhcnR6L0tDYW52YXNQYXRoUXVhcnR6LmgKLS0tIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9L
Q2FudmFzUGF0aFF1YXJ0ei5oCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIGtjYW52YXMv
ZGV2aWNlL3F1YXJ0ei9LQ2FudmFzUGF0aFF1YXJ0ei5oCTUgRGVjIDIwMDUgMjI6NTI6MDQgLTAw
MDAKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBDb21w
dXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgPGtjYW52
YXMvS0NhbnZhc1BhdGguaD4KKwordHlwZWRlZiBzdHJ1Y3QgQ0dQYXRoICpDR011dGFibGVQYXRo
UmVmOwordHlwZWRlZiBjb25zdCBzdHJ1Y3QgQ0dQYXRoICpDR1BhdGhSZWY7CisKK2NsYXNzIEtD
YW52YXNQYXRoUXVhcnR6IDogcHVibGljIEtDYW52YXNQYXRoIHsKK3B1YmxpYzoKKyAgICBLQ2Fu
dmFzUGF0aFF1YXJ0eigpOworICAgIHZpcnR1YWwgfktDYW52YXNQYXRoUXVhcnR6KCk7CisgICAg
CisgICAgdmlydHVhbCBib29sIGlzRW1wdHkoKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBt
b3ZlVG8oZG91YmxlIHgsIGRvdWJsZSB5KTsKKyAgICB2aXJ0dWFsIHZvaWQgbGluZVRvKGRvdWJs
ZSB4LCBkb3VibGUgeSk7CisgICAgdmlydHVhbCB2b2lkIGN1cnZlVG8oZG91YmxlIHgxLCBkb3Vi
bGUgeTEsIGRvdWJsZSB4MiwgZG91YmxlIHkyLCBkb3VibGUgeDMsIGRvdWJsZSB5Myk7CisgICAg
dmlydHVhbCB2b2lkIGNsb3NlU3VicGF0aCgpOworICAgIAorICAgIENHUGF0aFJlZiBjZ1BhdGgo
KSBjb25zdCB7IHJldHVybiBtX2NnUGF0aDsgfQorICAgIAorcHJpdmF0ZToKKyAgICBDR011dGFi
bGVQYXRoUmVmIG1fY2dQYXRoOworfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4
OiBrY2FudmFzL2RldmljZS9xdWFydHovS0NhbnZhc1BhdGhRdWFydHoubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZToga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNQYXRoUXVhcnR6Lm1tCmRpZmYg
LU4ga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNQYXRoUXVhcnR6Lm1tCi0tLSBrY2FudmFz
L2RldmljZS9xdWFydHovS0NhbnZhc1BhdGhRdWFydHoubW0JMSBKYW4gMTk3MCAwMDowMDowMCAt
MDAwMAorKysga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNQYXRoUXVhcnR6Lm1tCTUgRGVj
IDIwMDUgMjI6NTI6MDQgLTAwMDAKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIktDYW52YXNQYXRoUXVhcnR6LmgiCisK
K0tDYW52YXNQYXRoUXVhcnR6OjpLQ2FudmFzUGF0aFF1YXJ0eigpCit7CisgICAgbV9jZ1BhdGgg
PSBDR1BhdGhDcmVhdGVNdXRhYmxlKCk7Cit9CisKK0tDYW52YXNQYXRoUXVhcnR6Ojp+S0NhbnZh
c1BhdGhRdWFydHooKQoreworICAgIENHUGF0aFJlbGVhc2UobV9jZ1BhdGgpOworfQorCitib29s
IEtDYW52YXNQYXRoUXVhcnR6Ojppc0VtcHR5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gQ0dQYXRo
SXNFbXB0eShtX2NnUGF0aCk7Cit9CisKK3ZvaWQgS0NhbnZhc1BhdGhRdWFydHo6Om1vdmVUbyhk
b3VibGUgeCwgZG91YmxlIHkpCit7CisgICAgQ0dQYXRoTW92ZVRvUG9pbnQobV9jZ1BhdGgsIDAs
IChmbG9hdCl4LCAoZmxvYXQpeSk7Cit9CisKK3ZvaWQgS0NhbnZhc1BhdGhRdWFydHo6OmxpbmVU
byhkb3VibGUgeCwgZG91YmxlIHkpCit7CisgICAgQ0dQYXRoQWRkTGluZVRvUG9pbnQobV9jZ1Bh
dGgsIDAsIChmbG9hdCl4LCAoZmxvYXQpeSk7Cit9CisKK3ZvaWQgS0NhbnZhc1BhdGhRdWFydHo6
OmN1cnZlVG8oZG91YmxlIHgxLCBkb3VibGUgeTEsIGRvdWJsZSB4MiwgZG91YmxlIHkyLCBkb3Vi
bGUgeDMsIGRvdWJsZSB5MykKK3sKKyAgICBDR1BhdGhBZGRDdXJ2ZVRvUG9pbnQobV9jZ1BhdGgs
IDAsIChmbG9hdCl4MSwgKGZsb2F0KXkxLCAoZmxvYXQpeDIsIChmbG9hdCl5MiwgKGZsb2F0KXgz
LCAoZmxvYXQpeTMpOworfQorCit2b2lkIEtDYW52YXNQYXRoUXVhcnR6OjpjbG9zZVN1YnBhdGgo
KQoreworICAgIENHUGF0aENsb3NlU3VicGF0aChtX2NnUGF0aCk7Cit9CkluZGV4OiBrY2FudmFz
L2RldmljZS9xdWFydHovS0NhbnZhc1Jlc291cmNlc1F1YXJ0ei5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rY2FudmFzL2RldmljZS9xdWFydHovS0NhbnZhc1Jl
c291cmNlc1F1YXJ0ei5tbSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMQpkaWZmIC1wIC11IC1y
MS4xMSBrY2FudmFzL2RldmljZS9xdWFydHovS0NhbnZhc1Jlc291cmNlc1F1YXJ0ei5tbQotLS0g
a2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNSZXNvdXJjZXNRdWFydHoubW0JMjkgTm92IDIw
MDUgMTE6MjA6NDIgLTAwMDAJMS4xMQorKysga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNS
ZXNvdXJjZXNRdWFydHoubW0JNSBEZWMgMjAwNSAyMjo1MjowNCAtMDAwMApAQCAtMzEsNDAgKzMx
LDEzIEBACiAjaW1wb3J0ICJTVkdSZW5kZXJTdHlsZS5oIgogI2ltcG9ydCAiS0NhbnZhc01hdHJp
eC5oIgogCisjaW1wb3J0ICJLQ2FudmFzUGF0aFF1YXJ0ei5oIgogI2ltcG9ydCAiS1JlbmRlcmlu
Z0RldmljZVF1YXJ0ei5oIgogI2ltcG9ydCAiS0NhbnZhc0ZpbHRlclF1YXJ0ei5oIgogI2ltcG9y
dCAiUXVhcnR6U3VwcG9ydC5oIgogCiAjaW1wb3J0IDxreG1sY29yZS9Bc3NlcnRpb25zLmg+CiAK
LUNHUGF0aFJlZiBDR1BhdGhGcm9tS0NQYXRoRGF0YUxpc3QoS0NQYXRoRGF0YUxpc3QgcGF0aERh
dGEpCi17Ci0gICAgQ0dNdXRhYmxlUGF0aFJlZiBwYXRoID0gQ0dQYXRoQ3JlYXRlTXV0YWJsZSgp
OwotCi0gICAgS0NQYXRoRGF0YUxpc3Q6OkNvbnN0SXRlcmF0b3IgaXQgPSBwYXRoRGF0YS5iZWdp
bigpOwotICAgIEtDUGF0aERhdGFMaXN0OjpDb25zdEl0ZXJhdG9yIGVuZCA9IHBhdGhEYXRhLmVu
ZCgpOwotICAgIGZvcig7IGl0ICE9IGVuZDsgKytpdCkKLSAgICB7Ci0gICAgICAgIEtDUGF0aERh
dGEgZGF0YSA9ICppdDsKLSAgICAgICAgCi0gICAgICAgIHN3aXRjaCAoZGF0YS5jbWQpIHsKLSAg
ICAgICAgY2FzZSBDTURfTU9WRTogCi0gICAgICAgICAgICBDR1BhdGhNb3ZlVG9Qb2ludChwYXRo
LCBOVUxMLCBkYXRhLngzLCBkYXRhLnkzKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIENNRF9MSU5FOgotICAgICAgICAgICAgQ0dQYXRoQWRkTGluZVRvUG9pbnQocGF0aCwgTlVM
TCwgZGF0YS54MywgZGF0YS55Myk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBD
TURfQ1VSVkU6Ci0gICAgICAgICAgICBDR1BhdGhBZGRDdXJ2ZVRvUG9pbnQocGF0aCwgTlVMTCwg
ZGF0YS54MSwgZGF0YS55MSwgZGF0YS54MiwgZGF0YS55MiwgZGF0YS54MywgZGF0YS55Myk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDTURfQ0xPU0VfU1VCUEFUSDoKLSAgICAg
ICAgICAgIENHUGF0aENsb3NlU3VicGF0aChwYXRoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgfQotICAgIHJldHVybiBwYXRoOwotfQotCiB2b2lkIEtDYW52YXNDb250YWlu
ZXJRdWFydHo6OmNhbGNNaW5NYXhXaWR0aCgpCiB7CiAgICAgS0hUTUxBc3NlcnQoICFtaW5NYXhL
bm93bigpKTsKQEAgLTIxNywxNiArMTkwLDEzIEBAIFFNYXRyaXggS0NhbnZhc0NvbnRhaW5lclF1
YXJ0ejo6YWJzb2x1dGUKIAogdm9pZCBLQ2FudmFzQ2xpcHBlclF1YXJ0ejo6YXBwbHlDbGlwKENH
Q29udGV4dFJlZiBjb250ZXh0LCBDR1JlY3QgcmVsYXRpdmVCQm94KSBjb25zdAogewotICAgIC8v
IEZJWE1FOiB1bnRpbCB0aGUgcGF0aCByZXByZXNlbnRhdGlvbiBpcyBmaXhlZCBpbgotICAgIC8v
IEtDYW52YXMsIHdlIGhhdmUgdG8gY29udmVydCBhIEtDUGF0aERhdGFMaXN0IHRvIGEgQ0dQYXRo
Ci0KICAgICBpZiAobV9jbGlwRGF0YS5jb3VudCgpIDwgMSkgewogICAgICAgICBOU0xvZyhAIldB
Uk5JTkc6IEFwcGx5aW5nIGVtcHR5IGNsaXBwZXIsIGlnbm9yaW5nLiIpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCiAgICAgQk9PTCBoZXRlcm9nZW5vdXNDbGlwUnVsZXMgPSBOTzsKLSAgICBL
Q1dpbmRSdWxlIGNsaXBSdWxlID0gbV9jbGlwRGF0YVswXS5ydWxlOworICAgIEtDV2luZFJ1bGUg
Y2xpcFJ1bGUgPSBtX2NsaXBEYXRhWzBdLndpbmRSdWxlOwogCiAgICAgQ0dDb250ZXh0QmVnaW5Q
YXRoKGNvbnRleHQpOwogCkBAIC0yMzQsMjEgKzIwNCwyMSBAQCB2b2lkIEtDYW52YXNDbGlwcGVy
UXVhcnR6OjphcHBseUNsaXAoQ0dDCiAKICAgICBmb3IgKHVuc2lnbmVkIGludCB4ID0gMDsgeCA8
IG1fY2xpcERhdGEuY291bnQoKTsgeCsrKSB7CiAgICAgICAgIEtDQ2xpcERhdGEgZGF0YSA9IG1f
Y2xpcERhdGFbeF07Ci0gICAgICAgIGlmIChkYXRhLnJ1bGUgIT0gY2xpcFJ1bGUpCisgICAgICAg
IGlmIChkYXRhLndpbmRSdWxlICE9IGNsaXBSdWxlKQogICAgICAgICAgICAgaGV0ZXJvZ2Vub3Vz
Q2xpcFJ1bGVzID0gWUVTOwotCi0gICAgICAgIENHUGF0aFJlZiBjbGlwUGF0aCA9IENHUGF0aEZy
b21LQ1BhdGhEYXRhTGlzdChkYXRhLnBhdGgpOwogICAgICAgICAKKyAgICAgICAgS0NhbnZhc1Bh
dGhRdWFydHogKnBhdGggPSBzdGF0aWNfY2FzdDxLQ2FudmFzUGF0aFF1YXJ0eio+KGRhdGEucGF0
aC5nZXQoKSk7ICAgICAgICAKKyAgICAgICAgQ0dQYXRoUmVmIGNsaXBQYXRoID0gc3RhdGljX2Nh
c3Q8S0NhbnZhc1BhdGhRdWFydHoqPihwYXRoKS0+Y2dQYXRoKCk7CiAgICAgICAgIGlmIChDR1Bh
dGhJc0VtcHR5KGNsaXBQYXRoKSkgLy8gRklYTUU6IG9jY2FzaW9uYWxseSB3ZSBnZXQgZW1wdHkg
Y2xpcCBwYXRocy4uLgogICAgICAgICAgICAgTlNMb2coQCJXQVJOSU5HOiBBc2tlZCB0byBjbGlw
IGFuIGVtcHR5IHBhdGgsIGlnbm9yaW5nLiIpOwogCi0gICAgICAgIGlmIChkYXRhLmJib3gpIHsK
LSAgICAgICAgICAgIENHUGF0aFJlZiB0cmFuc2Zvcm1lZFBhdGggPSBDR1BhdGhBcHBseVRyYW5z
Zm9ybShjbGlwUGF0aCwgYmJveFRyYW5zZm9ybSk7Ci0gICAgICAgICAgICBDR1BhdGhSZWxlYXNl
KGNsaXBQYXRoKTsKLSAgICAgICAgICAgIGNsaXBQYXRoID0gdHJhbnNmb3JtZWRQYXRoOwotICAg
ICAgICB9Ci0gICAgICAgIENHQ29udGV4dEFkZFBhdGgoY29udGV4dCwgY2xpcFBhdGgpOwotICAg
ICAgICBDR1BhdGhSZWxlYXNlKGNsaXBQYXRoKTsKKyAgICAgICAgaWYgKGRhdGEuYmJveFVuaXRz
KSB7CisgICAgICAgICAgICBDR011dGFibGVQYXRoUmVmIHRyYW5zZm9ybWVkUGF0aCA9IENHUGF0
aENyZWF0ZU11dGFibGUoKTsKKyAgICAgICAgICAgIENHUGF0aEFkZFBhdGgodHJhbnNmb3JtZWRQ
YXRoLCAmYmJveFRyYW5zZm9ybSwgY2xpcFBhdGgpOworICAgICAgICAgICAgQ0dDb250ZXh0QWRk
UGF0aChjb250ZXh0LCB0cmFuc2Zvcm1lZFBhdGgpOworICAgICAgICAgICAgQ0dQYXRoUmVsZWFz
ZSh0cmFuc2Zvcm1lZFBhdGgpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIENHQ29udGV4
dEFkZFBhdGgoY29udGV4dCwgY2xpcFBhdGgpOwogICAgIH0KIAogICAgIGlmIChtX2NsaXBEYXRh
LmNvdW50KCkpIHsKQEAgLTI2MCw3ICsyMzAsNyBAQCB2b2lkIEtDYW52YXNDbGlwcGVyUXVhcnR6
OjphcHBseUNsaXAoQ0dDCiAgICAgICAgICAgICBOU0xvZyhAIldBUk5JTkc6IFF1YXJ0eiBkb2Vz
IG5vdCB5ZXQgc3VwcG9ydCBoZXRlcm9nZW5vdXMgY2xpcCBydWxlcywgY2xpcHBpbmcgd2lsbCBi
ZSBpbmNvcnJlY3QuIik7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgIGlmICghQ0dDb250ZXh0
SXNQYXRoRW1wdHkoY29udGV4dCkpIHsKLSAgICAgICAgICAgIGlmIChtX2NsaXBEYXRhWzBdLnJ1
bGUgPT0gUlVMRV9FVkVOT0REKQorICAgICAgICAgICAgaWYgKGNsaXBSdWxlID09IFJVTEVfRVZF
Tk9ERCkKICAgICAgICAgICAgICAgICBDR0NvbnRleHRFT0NsaXAoY29udGV4dCk7CiAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgQ0dDb250ZXh0Q2xpcChjb250ZXh0KTsKSW5kZXg6
IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LUmVuZGVyaW5nRGV2aWNlUXVhcnR6LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tS
ZW5kZXJpbmdEZXZpY2VRdWFydHouaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42CmRpZmYgLXAg
LXUgLXIxLjYga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tSZW5kZXJpbmdEZXZpY2VRdWFydHouaAot
LS0ga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tSZW5kZXJpbmdEZXZpY2VRdWFydHouaAkyMiBOb3Yg
MjAwNSAyMzowNDoyNyAtMDAwMAkxLjYKKysrIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LUmVuZGVy
aW5nRGV2aWNlUXVhcnR6LmgJNSBEZWMgMjAwNSAyMjo1MjowNCAtMDAwMApAQCAtNjEsNyArNjEs
NiBAQCBwcml2YXRlOgogCiBjbGFzcyBLUmVuZGVyaW5nRGV2aWNlUXVhcnR6IDogcHVibGljIEtS
ZW5kZXJpbmdEZXZpY2UKIHsKLVFfT0JKRUNUCiBwdWJsaWM6CiAgICAgS1JlbmRlcmluZ0Rldmlj
ZVF1YXJ0eigpIHsgfQogICAgIHZpcnR1YWwgfktSZW5kZXJpbmdEZXZpY2VRdWFydHooKSB7IH0K
QEAgLTc2LDI3ICs3NSwxNiBAQCBwdWJsaWM6CiAgICAgQ0dDb250ZXh0UmVmIGN1cnJlbnRDR0Nv
bnRleHQoKSBjb25zdDsKICAgICB2aXJ0dWFsIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0ICpjb250
ZXh0Rm9ySW1hZ2UoS0NhbnZhc0ltYWdlICopIGNvbnN0OwogCi0gICAgLy8gVmVjdG9yIHBhdGgg
Y3JlYXRpb24KLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlUGF0aChLQ2FudmFzVXNlckRhdGEgcGF0
aCk7Ci0gICAgdmlydHVhbCB2b2lkIHN0YXJ0UGF0aCgpOwotICAgIHZpcnR1YWwgdm9pZCBlbmRQ
YXRoKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgbW92ZVRvKGRvdWJsZSB4LCBkb3VibGUgeSk7Ci0g
ICAgdmlydHVhbCB2b2lkIGxpbmVUbyhkb3VibGUgeCwgZG91YmxlIHkpOwotICAgIHZpcnR1YWwg
dm9pZCBjdXJ2ZVRvKGRvdWJsZSB4MSwgZG91YmxlIHkxLCBkb3VibGUgeDIsIGRvdWJsZSB5Miwg
ZG91YmxlIHgzLCBkb3VibGUgeTMpOwotICAgIHZpcnR1YWwgdm9pZCBjbG9zZVN1YnBhdGgoKTsK
LSAgICAKLSAgICBLQ2FudmFzVXNlckRhdGEgcGF0aEZvclJlY3QoY29uc3QgUVJlY3QgJikgY29u
c3Q7Ci0gICAgCi0gICAgdmlydHVhbCBRU3RyaW5nIHN0cmluZ0ZvclBhdGgoS0NhbnZhc1VzZXJE
YXRhIHBhdGgpOworICAgIHZpcnR1YWwgUVN0cmluZyBzdHJpbmdGb3JQYXRoKGNvbnN0IEtDYW52
YXNQYXRoKiBwYXRoKTsKIAogICAgIC8vIFJlc291cmNlIGNyZWF0aW9uCiAgICAgdmlydHVhbCBL
Q2FudmFzUmVzb3VyY2UgKmNyZWF0ZVJlc291cmNlKGNvbnN0IEtDUmVzb3VyY2VUeXBlICZ0eXBl
KSBjb25zdDsKICAgICB2aXJ0dWFsIEtSZW5kZXJpbmdQYWludFNlcnZlciAqY3JlYXRlUGFpbnRT
ZXJ2ZXIoY29uc3QgS0NQYWludFNlcnZlclR5cGUgJnR5cGUpIGNvbnN0OwogICAgIHZpcnR1YWwg
S0NhbnZhc0ZpbHRlckVmZmVjdCAqY3JlYXRlRmlsdGVyRWZmZWN0KGNvbnN0IEtDRmlsdGVyRWZm
ZWN0VHlwZSAmdHlwZSkgY29uc3Q7CisgICAgdmlydHVhbCBLQ2FudmFzUGF0aCogY3JlYXRlUGF0
aCgpIGNvbnN0OwogICAgIAogICAgIC8vIGl0ZW0gY3JlYXRpb24KLSAgICB2aXJ0dWFsIFJlbmRl
clBhdGggKmNyZWF0ZUl0ZW0oUmVuZGVyQXJlbmEgKmFyZW5hLCBraHRtbDo6UmVuZGVyU3R5bGUg
KnN0eWxlLCBLU1ZHOjpTVkdTdHlsZWRFbGVtZW50SW1wbCAqbm9kZSwgS0NhbnZhc1VzZXJEYXRh
IHBhdGgpIGNvbnN0OworICAgIHZpcnR1YWwgUmVuZGVyUGF0aCAqY3JlYXRlSXRlbShSZW5kZXJB
cmVuYSAqYXJlbmEsIGtodG1sOjpSZW5kZXJTdHlsZSAqc3R5bGUsIEtTVkc6OlNWR1N0eWxlZEVs
ZW1lbnRJbXBsICpub2RlLCBLQ2FudmFzUGF0aCogcGF0aCkgY29uc3Q7CiAgICAgdmlydHVhbCBL
Q2FudmFzQ29udGFpbmVyICpjcmVhdGVDb250YWluZXIoUmVuZGVyQXJlbmEgKmFyZW5hLCBraHRt
bDo6UmVuZGVyU3R5bGUgKnN0eWxlLCBLU1ZHOjpTVkdTdHlsZWRFbGVtZW50SW1wbCAqbm9kZSkg
Y29uc3Q7CiAKICAgICAvLyBmaWx0ZXJzIChtb3N0bHkgZGVidWdnaW5nKQpAQCAtMTA2LDIzICs5
NCw0IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBLUmVuZGVyaW5nRGV2aWNlUXVhcnR6Ojpz
ZXRIYXJkd2FyZVJlbmRlcmluZ0VuYWJsZWQoYm9vbCBlbmFibGVkKTsKIH07CiAKLS8vIFdyYXBz
IE5TQmV6aWVyUGF0aHMgZm9yIGMrKyBjb25zdW1wdGlvbgotY2xhc3MgS0NhbnZhc1F1YXJ0elBh
dGhEYXRhCi17Ci1wdWJsaWM6Ci0gICAgS0NhbnZhc1F1YXJ0elBhdGhEYXRhKCk7Ci0KLSAgICB+
S0NhbnZhc1F1YXJ0elBhdGhEYXRhKCk7Ci0KLSAgICBDR011dGFibGVQYXRoUmVmIHBhdGg7Ci0g
ICAgYm9vbCBoYXNWYWxpZEJCb3g7Ci0gICAgQ0dSZWN0IGJib3g7Ci19OwotCi1jbGFzcyBLQ2Fu
dmFzUXVhcnR6VXNlckRhdGEgOiBwdWJsaWMgS0NhbnZhc1ByaXZhdGVVc2VyRGF0YSB7Ci1wdWJs
aWM6IAotICAgIEtDYW52YXNRdWFydHpVc2VyRGF0YSgpOwotICAgIH5LQ2FudmFzUXVhcnR6VXNl
ckRhdGEoKTsKLX07Ci0KICNlbmRpZgpJbmRleDoga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tSZW5k
ZXJpbmdEZXZpY2VRdWFydHoubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1
cHBvcnQva2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tSZW5kZXJpbmdEZXZpY2VRdWFydHoubW0sdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuNwpkaWZmIC1wIC11IC1yMS43IGtjYW52YXMvZGV2aWNlL3F1
YXJ0ei9LUmVuZGVyaW5nRGV2aWNlUXVhcnR6Lm1tCi0tLSBrY2FudmFzL2RldmljZS9xdWFydHov
S1JlbmRlcmluZ0RldmljZVF1YXJ0ei5tbQkyOCBOb3YgMjAwNSAyMzozMzo1OSAtMDAwMAkxLjcK
KysrIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LUmVuZGVyaW5nRGV2aWNlUXVhcnR6Lm1tCTUgRGVj
IDIwMDUgMjI6NTI6MDQgLTAwMDAKQEAgLTI1LDYgKzI1LDcgQEAKIAogCiAjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW1wb3J0ICJLQ2FudmFzUGF0aFF1YXJ0ei5oIgogI2ltcG9ydCAiS1JlbmRlcmlu
Z0RldmljZVF1YXJ0ei5oIgogI2ltcG9ydCAiS0NhbnZhc1Jlc291cmNlc1F1YXJ0ei5oIgogI2lt
cG9ydCAiS0NhbnZhc0ZpbHRlclF1YXJ0ei5oIgpAQCAtNDEsMTggKzQyLDYgQEAKIAogI2ltcG9y
dCAiS1dRTG9nZ2luZy5oIgogCi0KLUtDYW52YXNRdWFydHpQYXRoRGF0YTo6S0NhbnZhc1F1YXJ0
elBhdGhEYXRhKCkKLXsKLQlwYXRoID0gQ0dQYXRoQ3JlYXRlTXV0YWJsZSgpOwotCWhhc1ZhbGlk
QkJveCA9IGZhbHNlOwotfQotCi1LQ2FudmFzUXVhcnR6UGF0aERhdGE6On5LQ2FudmFzUXVhcnR6
UGF0aERhdGEoKQotewotCUNHUGF0aFJlbGVhc2UocGF0aCk7Ci19Ci0KIEtSZW5kZXJpbmdEZXZp
Y2VDb250ZXh0UXVhcnR6OjpLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF1YXJ0eihDR0NvbnRleHRS
ZWYgY29udGV4dCkgOiBtX2NnQ29udGV4dChDR0NvbnRleHRSZXRhaW4oY29udGV4dCkpLCBtX25z
R3JhcGhpY3NDb250ZXh0KDApCiB7CiAgICAgQVNTRVJUKG1fY2dDb250ZXh0KTsKQEAgLTE1NCwx
MCArMTQzLDYgQEAgS1JlbmRlcmluZ0RldmljZUNvbnRleHQgKktSZW5kZXJpbmdEZXZpYwogICAg
IHJldHVybiBwb3BwZWRDb250ZXh0OwogfQogCi0KLSNwcmFnbWEgbWFyayAtCi0jcHJhZ21hIG1h
cmsgUGF0aCBNYW5hZ2VtZW50Ci0KIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0ICpLUmVuZGVyaW5n
RGV2aWNlUXVhcnR6Ojpjb250ZXh0Rm9ySW1hZ2UoS0NhbnZhc0ltYWdlICppbWFnZSkgY29uc3QK
IHsKICAgICBLQ2FudmFzSW1hZ2VRdWFydHogKnF1YXJ0ekltYWdlID0gc3RhdGljX2Nhc3Q8S0Nh
bnZhc0ltYWdlUXVhcnR6ICo+KGltYWdlKTsKQEAgLTE3Myw3NSArMTU4LDIxIEBAIEtSZW5kZXJp
bmdEZXZpY2VDb250ZXh0ICpLUmVuZGVyaW5nRGV2aWMKICAgICByZXR1cm4gbmV3IEtSZW5kZXJp
bmdEZXZpY2VDb250ZXh0UXVhcnR6KENHTGF5ZXJHZXRDb250ZXh0KGNnTGF5ZXIpKTsKIH0KIAot
dm9pZCBLUmVuZGVyaW5nRGV2aWNlUXVhcnR6OjpkZWxldGVQYXRoKEtDYW52YXNVc2VyRGF0YSBw
YXRoRGF0YSkKLXsKLQlLQ2FudmFzUXVhcnR6UGF0aERhdGEgKmRhdGEgPSBzdGF0aWNfY2FzdDxL
Q2FudmFzUXVhcnR6UGF0aERhdGEgKj4ocGF0aERhdGEpOwotCUFTU0VSVChkYXRhICE9IDApOwot
CQotCWRlbGV0ZSBkYXRhOwotfQotCi12b2lkIEtSZW5kZXJpbmdEZXZpY2VRdWFydHo6OnN0YXJ0
UGF0aCgpCi17Ci0Jc2V0Q3VycmVudFBhdGgobmV3IEtDYW52YXNRdWFydHpQYXRoRGF0YSgpKTsK
LX0KLQotdm9pZCBLUmVuZGVyaW5nRGV2aWNlUXVhcnR6OjplbmRQYXRoKCkKLXsKLQkvLyBOT09Q
IGZvciBRdWFydHouCi19Ci0KLXZvaWQgS1JlbmRlcmluZ0RldmljZVF1YXJ0ejo6bW92ZVRvKGRv
dWJsZSB4LCBkb3VibGUgeSkKLXsKLQlDR011dGFibGVQYXRoUmVmIHBhdGggPSBzdGF0aWNfY2Fz
dDxLQ2FudmFzUXVhcnR6UGF0aERhdGEgKj4oY3VycmVudFBhdGgoKSktPnBhdGg7Ci0JQVNTRVJU
KHBhdGggIT0gMCk7Ci0KLQlDR1BhdGhNb3ZlVG9Qb2ludChwYXRoLE5VTEwseCwgeSk7Ci19Ci0K
LXZvaWQgS1JlbmRlcmluZ0RldmljZVF1YXJ0ejo6bGluZVRvKGRvdWJsZSB4LCBkb3VibGUgeSkK
LXsKLQlLQ2FudmFzUXVhcnR6UGF0aERhdGEgKnBhdGhEYXRhID0gc3RhdGljX2Nhc3Q8S0NhbnZh
c1F1YXJ0elBhdGhEYXRhICo+KGN1cnJlbnRQYXRoKCkpOwotCUNHTXV0YWJsZVBhdGhSZWYgcGF0
aCA9IHBhdGhEYXRhLT5wYXRoOwotCUFTU0VSVChwYXRoICE9IDApOwotCi0JQ0dQYXRoQWRkTGlu
ZVRvUG9pbnQocGF0aCxOVUxMLHgsIHkpOwotCXBhdGhEYXRhLT5oYXNWYWxpZEJCb3ggPSBmYWxz
ZTsKLX0KLQotdm9pZCBLUmVuZGVyaW5nRGV2aWNlUXVhcnR6OjpjdXJ2ZVRvKGRvdWJsZSB4MSwg
ZG91YmxlIHkxLCBkb3VibGUgeDIsIGRvdWJsZSB5MiwgZG91YmxlIGVuZFgsIGRvdWJsZSBlbmRZ
KQotewotCUtDYW52YXNRdWFydHpQYXRoRGF0YSAqcGF0aERhdGEgPSBzdGF0aWNfY2FzdDxLQ2Fu
dmFzUXVhcnR6UGF0aERhdGEgKj4oY3VycmVudFBhdGgoKSk7Ci0JQ0dNdXRhYmxlUGF0aFJlZiBw
YXRoID0gcGF0aERhdGEtPnBhdGg7Ci0JQVNTRVJUKHBhdGggIT0gMCk7Ci0KLQlDR1BhdGhBZGRD
dXJ2ZVRvUG9pbnQocGF0aCwgTlVMTCwgeDEsIHkxLCB4MiwgeTIsIGVuZFgsIGVuZFkpOwotCXBh
dGhEYXRhLT5oYXNWYWxpZEJCb3ggPSBmYWxzZTsKLX0KLQotdm9pZCBLUmVuZGVyaW5nRGV2aWNl
UXVhcnR6OjpjbG9zZVN1YnBhdGgoKQotewotCUNHTXV0YWJsZVBhdGhSZWYgcGF0aCA9IHN0YXRp
Y19jYXN0PEtDYW52YXNRdWFydHpQYXRoRGF0YSAqPihjdXJyZW50UGF0aCgpKS0+cGF0aDsKLQlB
U1NFUlQocGF0aCAhPSAwKTsKLQotCUNHUGF0aENsb3NlU3VicGF0aChwYXRoKTsKLX0KKyNwcmFn
bWEgbWFyayAtCisjcHJhZ21hIG1hcmsgUGF0aCBNYW5hZ2VtZW50CiAKLUtDYW52YXNVc2VyRGF0
YSBLUmVuZGVyaW5nRGV2aWNlUXVhcnR6OjpwYXRoRm9yUmVjdChjb25zdCBRUmVjdCAmcmVjdCkg
Y29uc3QKK0tDYW52YXNQYXRoKiBLUmVuZGVyaW5nRGV2aWNlUXVhcnR6OjpjcmVhdGVQYXRoKCkg
Y29uc3QKIHsKLQlLQ2FudmFzUXVhcnR6UGF0aERhdGEgKmRhdGEgPSBuZXcgS0NhbnZhc1F1YXJ0
elBhdGhEYXRhKCk7Ci0JQ0dQYXRoQWRkUmVjdChkYXRhLT5wYXRoLCBOVUxMLCBDR1JlY3RNYWtl
KHJlY3QueCgpLHJlY3QueSgpLHJlY3Qud2lkdGgoKSxyZWN0LmhlaWdodCgpKSk7Ci0JcmV0dXJu
IGRhdGE7CisgICAgcmV0dXJuIG5ldyBLQ2FudmFzUGF0aFF1YXJ0eigpOwogfQogCi1RU3RyaW5n
IEtSZW5kZXJpbmdEZXZpY2VRdWFydHo6OnN0cmluZ0ZvclBhdGgoS0NhbnZhc1VzZXJEYXRhIHBh
dGgpCitRU3RyaW5nIEtSZW5kZXJpbmdEZXZpY2VRdWFydHo6OnN0cmluZ0ZvclBhdGgoY29uc3Qg
S0NhbnZhc1BhdGggKnBhdGgpCiB7CiAgICAgUVN0cmluZyByZXN1bHQ7CiAgICAgaWYgKHBhdGgp
IHsKLSAgICAgICAgQ0dNdXRhYmxlUGF0aFJlZiBjZ1BhdGggPSBzdGF0aWNfY2FzdDxLQ2FudmFz
UXVhcnR6UGF0aERhdGEgKj4ocGF0aCktPnBhdGg7CisgICAgICAgIENHUGF0aFJlZiBjZ1BhdGgg
PSBzdGF0aWNfY2FzdDxjb25zdCBLQ2FudmFzUGF0aFF1YXJ0eiAqPihwYXRoKS0+Y2dQYXRoKCk7
CiAgICAgICAgIENGU3RyaW5nUmVmIHBhdGhTdHJpbmcgPSBDRlN0cmluZ0Zyb21DR1BhdGgoY2dQ
YXRoKTsKICAgICAgICAgcmVzdWx0ID0gUVN0cmluZzo6ZnJvbUNGU3RyaW5nKHBhdGhTdHJpbmcp
OwotICAgICAgICBDRlJlbGVhc2UocGF0aFN0cmluZyk7CiAgICAgfQogICAgIHJldHVybiByZXN1
bHQ7CiB9CkBAIC0yNjgsNyArMTk5LDcgQEAgS0NhbnZhc0NvbnRhaW5lciAqS1JlbmRlcmluZ0Rl
dmljZVF1YXJ0egogICAgIHJldHVybiBuZXcgKGFyZW5hKSBLQ2FudmFzQ29udGFpbmVyUXVhcnR6
KG5vZGUpOwogfQogCi1SZW5kZXJQYXRoICpLUmVuZGVyaW5nRGV2aWNlUXVhcnR6OjpjcmVhdGVJ
dGVtKFJlbmRlckFyZW5hICphcmVuYSwga2h0bWw6OlJlbmRlclN0eWxlICpzdHlsZSwgS1NWRzo6
U1ZHU3R5bGVkRWxlbWVudEltcGwgKm5vZGUsIEtDYW52YXNVc2VyRGF0YSBwYXRoKSBjb25zdAor
UmVuZGVyUGF0aCAqS1JlbmRlcmluZ0RldmljZVF1YXJ0ejo6Y3JlYXRlSXRlbShSZW5kZXJBcmVu
YSAqYXJlbmEsIGtodG1sOjpSZW5kZXJTdHlsZSAqc3R5bGUsIEtTVkc6OlNWR1N0eWxlZEVsZW1l
bnRJbXBsICpub2RlLCBLQ2FudmFzUGF0aCogcGF0aCkgY29uc3QKIHsKICAgICBSZW5kZXJQYXRo
ICppdGVtID0gbmV3IChhcmVuYSkgS0NhbnZhc0l0ZW1RdWFydHooc3R5bGUsIG5vZGUpOwogICAg
IGl0ZW0tPmNoYW5nZVBhdGgocGF0aCk7CkluZGV4OiBrY2FudmFzL2RldmljZS9xdWFydHovUXVh
cnR6U3VwcG9ydC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tj
YW52YXMvZGV2aWNlL3F1YXJ0ei9RdWFydHpTdXBwb3J0LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuNApkaWZmIC1wIC11IC1yMS40IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9RdWFydHpTdXBwb3J0
LmgKLS0tIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9RdWFydHpTdXBwb3J0LmgJMjkgTm92IDIwMDUg
MDI6MDM6NTYgLTAwMDAJMS40CisrKyBrY2FudmFzL2RldmljZS9xdWFydHovUXVhcnR6U3VwcG9y
dC5oCTUgRGVjIDIwMDUgMjI6NTI6MDQgLTAwMDAKQEAgLTM0LDcgKzM0LDYgQEAgbmFtZXNwYWNl
IEtTVkcgewogQ0ZTdHJpbmdSZWYgQ0ZTdHJpbmdGcm9tQ0dQYXRoKENHUGF0aFJlZiBwYXRoKTsK
IENGU3RyaW5nUmVmIENGU3RyaW5nRnJvbUNHQWZmaW5lVHJhbnNmb3JtKENHQWZmaW5lVHJhbnNm
b3JtIHQpOwogQ0dBZmZpbmVUcmFuc2Zvcm0gQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlTWFwQmV0d2Vl
blJlY3RzKENHUmVjdCBzb3VyY2UsIENHUmVjdCBkZXN0KTsKLUNHUGF0aFJlZiBDR1BhdGhBcHBs
eVRyYW5zZm9ybShDR1BhdGhSZWYgcGF0aCwgQ0dBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtKTsK
IAogdm9pZCBhcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KENHQ29udGV4dFJlZiBjb250ZXh0LCBL
U1ZHOjpLQ2FudmFzUmVuZGVyaW5nU3R5bGUgKnN0eWxlKTsKIApJbmRleDoga2NhbnZhcy9kZXZp
Y2UvcXVhcnR6L1F1YXJ0elN1cHBvcnQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1NWR1N1cHBvcnQva2NhbnZhcy9kZXZpY2UvcXVhcnR6L1F1YXJ0elN1cHBvcnQubW0sdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuNQpkaWZmIC1wIC11IC1yMS41IGtjYW52YXMvZGV2aWNlL3F1YXJ0
ei9RdWFydHpTdXBwb3J0Lm1tCi0tLSBrY2FudmFzL2RldmljZS9xdWFydHovUXVhcnR6U3VwcG9y
dC5tbQkyMSBOb3YgMjAwNSAwODoyOToxNiAtMDAwMAkxLjUKKysrIGtjYW52YXMvZGV2aWNlL3F1
YXJ0ei9RdWFydHpTdXBwb3J0Lm1tCTUgRGVjIDIwMDUgMjI6NTI6MDQgLTAwMDAKQEAgLTQ4LDQ3
ICs0OCw2IEBAIENHQWZmaW5lVHJhbnNmb3JtIENHQWZmaW5lVHJhbnNmb3JtTWFrZU0KICAgICBy
ZXR1cm4gdHJhbnNmb3JtOwogfQogCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAgQ0dBZmZpbmVUcmFu
c2Zvcm0gdHJhbnNmb3JtOwotICAgIENHTXV0YWJsZVBhdGhSZWYgcmVzdWx0UGF0aDsKLX0gQ0dQ
YXRoVHJhbnNmb3JtQ2FsbGJhY2tEYXRhOwotCi12b2lkIENHUGF0aFRyYW5zZm9ybUNhbGxiYWNr
KHZvaWQgKmluZm8sIGNvbnN0IENHUGF0aEVsZW1lbnQgKmVsZW1lbnQpCi17Ci0gICAgQ0dQYXRo
VHJhbnNmb3JtQ2FsbGJhY2tEYXRhICpkYXRhID0gKENHUGF0aFRyYW5zZm9ybUNhbGxiYWNrRGF0
YSAqKWluZm87Ci0gICAgQ0dBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gZGF0YS0+dHJhbnNm
b3JtOwotICAgIENHTXV0YWJsZVBhdGhSZWYgcmVzdWx0UGF0aCA9IGRhdGEtPnJlc3VsdFBhdGg7
Ci0KLSAgICBDR1BvaW50ICpwb2ludHMgPSBlbGVtZW50LT5wb2ludHM7Ci0KLSAgICBzd2l0Y2gg
KGVsZW1lbnQtPnR5cGUpIHsKLSAgICBjYXNlIGtDR1BhdGhFbGVtZW50TW92ZVRvUG9pbnQ6Ci0g
ICAgICAgIENHUGF0aE1vdmVUb1BvaW50KHJlc3VsdFBhdGgsICZ0cmFuc2Zvcm0sIHBvaW50c1sw
XS54LCBwb2ludHNbMF0ueSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Uga0NHUGF0aEVsZW1l
bnRBZGRMaW5lVG9Qb2ludDoKLSAgICAgICAgQ0dQYXRoQWRkTGluZVRvUG9pbnQocmVzdWx0UGF0
aCwgJnRyYW5zZm9ybSwgcG9pbnRzWzBdLngsIHBvaW50c1swXS55KTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBrQ0dQYXRoRWxlbWVudEFkZFF1YWRDdXJ2ZVRvUG9pbnQ6Ci0gICAgICAgIENH
UGF0aEFkZFF1YWRDdXJ2ZVRvUG9pbnQocmVzdWx0UGF0aCwgJnRyYW5zZm9ybSwgcG9pbnRzWzBd
LngsIHBvaW50c1swXS55LCBwb2ludHNbMV0ueCwgcG9pbnRzWzFdLnkpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIGtDR1BhdGhFbGVtZW50QWRkQ3VydmVUb1BvaW50OgotICAgICAgICBDR1Bh
dGhBZGRDdXJ2ZVRvUG9pbnQocmVzdWx0UGF0aCwgJnRyYW5zZm9ybSwgcG9pbnRzWzBdLngsIHBv
aW50c1swXS55LCBwb2ludHNbMV0ueCwgcG9pbnRzWzFdLnksIHBvaW50c1syXS54LCBwb2ludHNb
Ml0ueSk7Ci0gICAgY2FzZSBrQ0dQYXRoRWxlbWVudENsb3NlU3VicGF0aDoKLSAgICAgICAgQ0dQ
YXRoQ2xvc2VTdWJwYXRoKHJlc3VsdFBhdGgpOwotICAgIH0KLX0KLQotLy8gRklYTUU6IEhBQ0sg
dGhpcyBzaG91bGQgYmUgcmVwbGFjZSBieSBhIGNhbGwgdG8KLS8vIENHUGF0aEFkZFBhdGgoPCND
R011dGFibGVQYXRoUmVmIHBhdGgxIz4sPCNjb25zdCBDR0FmZmluZVRyYW5zZm9ybSAqIG0jPiw8
I0NHUGF0aFJlZiBwYXRoMiM+KQotQ0dQYXRoUmVmIENHUGF0aEFwcGx5VHJhbnNmb3JtKENHUGF0
aFJlZiBwYXRoLCBDR0FmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0pCi17Ci0gICAgQ0dQYXRoVHJh
bnNmb3JtQ2FsbGJhY2tEYXRhIGRhdGE7Ci0gICAgZGF0YS50cmFuc2Zvcm0gPSB0cmFuc2Zvcm07
Ci0gICAgZGF0YS5yZXN1bHRQYXRoID0gQ0dQYXRoQ3JlYXRlTXV0YWJsZSgpOwotICAgIENHUGF0
aEFwcGx5KHBhdGgsICZkYXRhLCBDR1BhdGhUcmFuc2Zvcm1DYWxsYmFjayk7Ci0gICAgcmV0dXJu
IGRhdGEucmVzdWx0UGF0aDsKLX0KLQogdm9pZCBhcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KENH
Q29udGV4dFJlZiBjb250ZXh0LCBLU1ZHOjpLQ2FudmFzUmVuZGVyaW5nU3R5bGUgKnN0eWxlKQog
ewogICAgIC8qIFNob3VsZG4ndCBhbGwgdGhlc2UgYmUgaW4gdGhlIHN0cm9rZSBwYWludGVyPyAq
LwpJbmRleDoga3N2ZzIvc3ZnL1NWR0NpcmNsZUVsZW1lbnRJbXBsLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9zdmcvU1ZHQ2lyY2xlRWxlbWVudElt
cGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjgKZGlmZiAtcCAtdSAtcjEuOCBrc3ZnMi9z
dmcvU1ZHQ2lyY2xlRWxlbWVudEltcGwuY3BwCi0tLSBrc3ZnMi9zdmcvU1ZHQ2lyY2xlRWxlbWVu
dEltcGwuY3BwCTI2IE5vdiAyMDA1IDIyOjE5OjA1IC0wMDAwCTEuOAorKysga3N2ZzIvc3ZnL1NW
R0NpcmNsZUVsZW1lbnRJbXBsLmNwcAk1IERlYyAyMDA1IDIyOjUyOjA1IC0wMDAwCkBAIC03NSw3
ICs3NSw3IEBAIHZvaWQgU1ZHQ2lyY2xlRWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXQKICAgICB9
CiB9CiAKLUtDUGF0aERhdGFMaXN0IFNWR0NpcmNsZUVsZW1lbnRJbXBsOjp0b1BhdGhEYXRhKCkg
Y29uc3QKK0tDYW52YXNQYXRoKiBTVkdDaXJjbGVFbGVtZW50SW1wbDo6dG9QYXRoRGF0YSgpIGNv
bnN0CiB7CiAgICAgZmxvYXQgX2N4ID0gY3goKS0+YmFzZVZhbCgpLT52YWx1ZSgpLCBfY3kgPSBj
eSgpLT5iYXNlVmFsKCktPnZhbHVlKCk7CiAgICAgZmxvYXQgX3IgPSByKCktPmJhc2VWYWwoKS0+
dmFsdWUoKTsKSW5kZXg6IGtzdmcyL3N2Zy9TVkdDaXJjbGVFbGVtZW50SW1wbC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL3N2Zy9TVkdDaXJjbGVFbGVt
ZW50SW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjgKZGlmZiAtcCAtdSAtcjEuOCBrc3Zn
Mi9zdmcvU1ZHQ2lyY2xlRWxlbWVudEltcGwuaAotLS0ga3N2ZzIvc3ZnL1NWR0NpcmNsZUVsZW1l
bnRJbXBsLmgJMyBEZWMgMjAwNSAwMTozMjozMyAtMDAwMAkxLjgKKysrIGtzdmcyL3N2Zy9TVkdD
aXJjbGVFbGVtZW50SW1wbC5oCTUgRGVjIDIwMDUgMjI6NTI6MDUgLTAwMDAKQEAgLTUwLDcgKzUw
LDcgQEAgbmFtZXNwYWNlIEtTVkcKICAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0
cmlidXRlKEtET006Ok1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpOwogCiAgICAgICAgIHZpcnR1
YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKGtodG1sOjpSZW5kZXJTdHlsZSAqKSB7IHJldHVybiB0
cnVlOyB9Ci0gICAgICAgIHZpcnR1YWwgS0NQYXRoRGF0YUxpc3QgdG9QYXRoRGF0YSgpIGNvbnN0
OworICAgICAgICB2aXJ0dWFsIEtDYW52YXNQYXRoKiB0b1BhdGhEYXRhKCkgY29uc3Q7CiAKICAg
ICAgICAgdmlydHVhbCBjb25zdCBTVkdTdHlsZWRFbGVtZW50SW1wbCAqcHVzaEF0dHJpYnV0ZUNv
bnRleHQoY29uc3QgU1ZHU3R5bGVkRWxlbWVudEltcGwgKmNvbnRleHQpOwogCkluZGV4OiBrc3Zn
Mi9zdmcvU1ZHQ2xpcFBhdGhFbGVtZW50SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvc3ZnL1NWR0NsaXBQYXRoRWxlbWVudEltcGwuY3BwLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjExCmRpZmYgLXAgLXUgLXIxLjExIGtzdmcyL3N2Zy9TVkdD
bGlwUGF0aEVsZW1lbnRJbXBsLmNwcAotLS0ga3N2ZzIvc3ZnL1NWR0NsaXBQYXRoRWxlbWVudElt
cGwuY3BwCTI3IE5vdiAyMDA1IDExOjAyOjIxIC0wMDAwCTEuMTEKKysrIGtzdmcyL3N2Zy9TVkdD
bGlwUGF0aEVsZW1lbnRJbXBsLmNwcAk1IERlYyAyMDA1IDIyOjUyOjA1IC0wMDAwCkBAIC05NSw3
ICs5NSw4IEBAIEtDYW52YXNDbGlwcGVyICpTVkdDbGlwUGF0aEVsZW1lbnRJbXBsOjoKICAgICAg
ICAgaWYgKGUgJiYgZS0+aXNTdHlsZWQoKSkgewogICAgICAgICAgICAgU1ZHU3R5bGVkRWxlbWVu
dEltcGwgKnN0eWxlZCA9IHN0YXRpY19jYXN0PFNWR1N0eWxlZEVsZW1lbnRJbXBsICo+KGUpOwog
ICAgICAgICAgICAga2h0bWw6OlJlbmRlclN0eWxlICpwYXRoU3R5bGUgPSBnZXREb2N1bWVudCgp
LT5zdHlsZVNlbGVjdG9yKCktPnN0eWxlRm9yRWxlbWVudChzdHlsZWQsIGNsaXBQYXRoU3R5bGUp
OwotICAgICAgICAgICAgbV9jbGlwcGVyLT5hZGRDbGlwRGF0YShzdHlsZWQtPnRvUGF0aERhdGEo
KSwgKEtDV2luZFJ1bGUpIHBhdGhTdHlsZS0+c3ZnU3R5bGUoKS0+Y2xpcFJ1bGUoKSwgYmJveCk7
CisgICAgICAgICAgICBpZiAoS0NhbnZhc1BhdGgqIHBhdGhEYXRhID0gc3R5bGVkLT50b1BhdGhE
YXRhKCkpCisgICAgICAgICAgICAgICAgbV9jbGlwcGVyLT5hZGRDbGlwRGF0YShwYXRoRGF0YSwg
KEtDV2luZFJ1bGUpIHBhdGhTdHlsZS0+c3ZnU3R5bGUoKS0+Y2xpcFJ1bGUoKSwgYmJveCk7CiAg
ICAgICAgICAgICBwYXRoU3R5bGUtPmRlcmVmKGNhbnZhcygpLT5yZW5kZXJBcmVuYSgpKTsKICAg
ICAgICAgfQogICAgIH0KSW5kZXg6IGtzdmcyL3N2Zy9TVkdFbGxpcHNlRWxlbWVudEltcGwuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL3N2Zy9TVkdF
bGxpcHNlRWxlbWVudEltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjgKZGlmZiAtcCAt
dSAtcjEuOCBrc3ZnMi9zdmcvU1ZHRWxsaXBzZUVsZW1lbnRJbXBsLmNwcAotLS0ga3N2ZzIvc3Zn
L1NWR0VsbGlwc2VFbGVtZW50SW1wbC5jcHAJMjYgTm92IDIwMDUgMjI6MTk6MDYgLTAwMDAJMS44
CisrKyBrc3ZnMi9zdmcvU1ZHRWxsaXBzZUVsZW1lbnRJbXBsLmNwcAk1IERlYyAyMDA1IDIyOjUy
OjA1IC0wMDAwCkBAIC04Miw3ICs4Miw3IEBAIHZvaWQgU1ZHRWxsaXBzZUVsZW1lbnRJbXBsOjpw
YXJzZU1hcHBlZEEKICAgICB9CiB9CiAKLUtDUGF0aERhdGFMaXN0IFNWR0VsbGlwc2VFbGVtZW50
SW1wbDo6dG9QYXRoRGF0YSgpIGNvbnN0CitLQ2FudmFzUGF0aCogU1ZHRWxsaXBzZUVsZW1lbnRJ
bXBsOjp0b1BhdGhEYXRhKCkgY29uc3QKIHsKICAgICBmbG9hdCBfY3ggPSBjeCgpLT5iYXNlVmFs
KCktPnZhbHVlKCksIF9jeSA9IGN5KCktPmJhc2VWYWwoKS0+dmFsdWUoKTsKICAgICBmbG9hdCBf
cnggPSByeCgpLT5iYXNlVmFsKCktPnZhbHVlKCksIF9yeSA9IHJ5KCktPmJhc2VWYWwoKS0+dmFs
dWUoKTsKSW5kZXg6IGtzdmcyL3N2Zy9TVkdFbGxpcHNlRWxlbWVudEltcGwuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9zdmcvU1ZHRWxsaXBzZUVsZW1l
bnRJbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuOApkaWZmIC1wIC11IC1yMS44IGtzdmcy
L3N2Zy9TVkdFbGxpcHNlRWxlbWVudEltcGwuaAotLS0ga3N2ZzIvc3ZnL1NWR0VsbGlwc2VFbGVt
ZW50SW1wbC5oCTMgRGVjIDIwMDUgMDE6MzI6MzQgLTAwMDAJMS44CisrKyBrc3ZnMi9zdmcvU1ZH
RWxsaXBzZUVsZW1lbnRJbXBsLmgJNSBEZWMgMjAwNSAyMjo1MjowNSAtMDAwMApAQCAtNTEsNyAr
NTEsNyBAQCBuYW1lc3BhY2UgS1NWRwogICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRB
dHRyaWJ1dGUoS0RPTTo6TWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cik7CiAKICAgICAgICAgdmly
dHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoa2h0bWw6OlJlbmRlclN0eWxlICopIHsgcmV0dXJu
IHRydWU7IH0KLSAgICAgICAgdmlydHVhbCBLQ1BhdGhEYXRhTGlzdCB0b1BhdGhEYXRhKCkgY29u
c3Q7CisgICAgICAgIHZpcnR1YWwgS0NhbnZhc1BhdGgqIHRvUGF0aERhdGEoKSBjb25zdDsKIAog
ICAgICAgICB2aXJ0dWFsIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnRJbXBsICpwdXNoQXR0cmlidXRl
Q29udGV4dChjb25zdCBTVkdTdHlsZWRFbGVtZW50SW1wbCAqY29udGV4dCk7CiAKSW5kZXg6IGtz
dmcyL3N2Zy9TVkdJbWFnZUVsZW1lbnRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9zdmcvU1ZHSW1hZ2VFbGVtZW50SW1wbC5jcHAsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMTIKZGlmZiAtcCAtdSAtcjEuMTIga3N2ZzIvc3ZnL1NWR0ltYWdl
RWxlbWVudEltcGwuY3BwCi0tLSBrc3ZnMi9zdmcvU1ZHSW1hZ2VFbGVtZW50SW1wbC5jcHAJMjcg
Tm92IDIwMDUgMTE6MDI6MjYgLTAwMDAJMS4xMgorKysga3N2ZzIvc3ZnL1NWR0ltYWdlRWxlbWVu
dEltcGwuY3BwCTUgRGVjIDIwMDUgMjI6NTI6MDUgLTAwMDAKQEAgLTQ4LDcgKzQ4LDcgQEAKICNp
bmNsdWRlIDxrY2FudmFzL0tDYW52YXNDcmVhdG9yLmg+CiAjaW5jbHVkZSA8a2NhbnZhcy9LQ2Fu
dmFzQ29udGFpbmVyLmg+CiAjaW5jbHVkZSA8a2NhbnZhcy9LQ2FudmFzSW1hZ2UuaD4KLSNpbmNs
dWRlICJLQ2FudmFzUmVuZGVyaW5nU3R5bGUuaCIKKyNpbmNsdWRlIDxrY2FudmFzL0tDYW52YXNQ
YXRoLmg+CiAjaW5jbHVkZSA8a2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ0RldmljZS5oPgogI2lu
Y2x1ZGUgPGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdGaWxsUGFpbnRlci5oPgogI2luY2x1ZGUg
PGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdQYWludFNlcnZlckltYWdlLmg+CkBAIC0xNDMsMTIg
KzE0MywxMSBAQCBraHRtbDo6UmVuZGVyT2JqZWN0ICpTVkdJbWFnZUVsZW1lbnRJbXBsCiAgICAg
ZmxvYXQgX3dpZHRoID0gd2lkdGgoKS0+YmFzZVZhbCgpLT52YWx1ZSgpLCBfaGVpZ2h0ID0gaGVp
Z2h0KCktPmJhc2VWYWwoKS0+dmFsdWUoKTsKIAogICAgIC8vIFVzZSBkdW1teSByZWN0Ci0gICAg
S0NQYXRoRGF0YUxpc3QgcGF0aERhdGEgPSBLQ2FudmFzQ3JlYXRvcjo6c2VsZigpLT5jcmVhdGVS
ZWN0YW5nbGUoX3gsIF95LCBfd2lkdGgsIF9oZWlnaHQpOwotICAgIGlmKHBhdGhEYXRhLmlzRW1w
dHkoKSkKKyAgICBSZWZQdHI8S0NhbnZhc1BhdGg+IHBhdGhEYXRhID0gS0NhbnZhc0NyZWF0b3I6
OnNlbGYoKS0+Y3JlYXRlUmVjdGFuZ2xlKF94LCBfeSwgX3dpZHRoLCBfaGVpZ2h0KTsKKyAgICBp
ZiAoIXBhdGhEYXRhIHx8IHBhdGhEYXRhLT5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiAwOwot
Ci0gICAgS0NhbnZhc1VzZXJEYXRhIHBhdGggPSBLQ2FudmFzQ3JlYXRvcjo6c2VsZigpLT5jcmVh
dGVDYW52YXNQYXRoRGF0YShRUGFpbnRlcjo6cmVuZGVyaW5nRGV2aWNlKCksIHBhdGhEYXRhKTsK
LSAgICByZXR1cm4gUVBhaW50ZXI6OnJlbmRlcmluZ0RldmljZSgpLT5jcmVhdGVJdGVtKGFyZW5h
LCBzdHlsZSwgdGhpcywgcGF0aCk7CisgICAgCisgICAgcmV0dXJuIFFQYWludGVyOjpyZW5kZXJp
bmdEZXZpY2UoKS0+Y3JlYXRlSXRlbShhcmVuYSwgc3R5bGUsIHRoaXMsIHBhdGhEYXRhLmdldCgp
KTsKIH0KIAogdm9pZCBTVkdJbWFnZUVsZW1lbnRJbXBsOjphdHRhY2goKQpJbmRleDoga3N2ZzIv
c3ZnL1NWR0xpbmVFbGVtZW50SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1NWR1N1cHBvcnQva3N2ZzIvc3ZnL1NWR0xpbmVFbGVtZW50SW1wbC5jcHAsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuOApkaWZmIC1wIC11IC1yMS44IGtzdmcyL3N2Zy9TVkdMaW5lRWxlbWVudElt
cGwuY3BwCi0tLSBrc3ZnMi9zdmcvU1ZHTGluZUVsZW1lbnRJbXBsLmNwcAkyNiBOb3YgMjAwNSAy
MjoxOToxMiAtMDAwMAkxLjgKKysrIGtzdmcyL3N2Zy9TVkdMaW5lRWxlbWVudEltcGwuY3BwCTUg
RGVjIDIwMDUgMjI6NTI6MDUgLTAwMDAKQEAgLTgyLDcgKzgyLDcgQEAgdm9pZCBTVkdMaW5lRWxl
bWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cgogICAgIH0KIH0KIAotS0NQYXRoRGF0YUxpc3QgU1ZH
TGluZUVsZW1lbnRJbXBsOjp0b1BhdGhEYXRhKCkgY29uc3QKK0tDYW52YXNQYXRoKiBTVkdMaW5l
RWxlbWVudEltcGw6OnRvUGF0aERhdGEoKSBjb25zdAogewogICAgIGZsb2F0IF94MSA9IHgxKCkt
PmJhc2VWYWwoKS0+dmFsdWUoKSwgX3kxID0geTEoKS0+YmFzZVZhbCgpLT52YWx1ZSgpOwogICAg
IGZsb2F0IF94MiA9IHgyKCktPmJhc2VWYWwoKS0+dmFsdWUoKSwgX3kyID0geTIoKS0+YmFzZVZh
bCgpLT52YWx1ZSgpOwpJbmRleDoga3N2ZzIvc3ZnL1NWR0xpbmVFbGVtZW50SW1wbC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL3N2Zy9TVkdMaW5lRWxl
bWVudEltcGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS44CmRpZmYgLXAgLXUgLXIxLjgga3N2
ZzIvc3ZnL1NWR0xpbmVFbGVtZW50SW1wbC5oCi0tLSBrc3ZnMi9zdmcvU1ZHTGluZUVsZW1lbnRJ
bXBsLmgJMyBEZWMgMjAwNSAwMTozMjozOSAtMDAwMAkxLjgKKysrIGtzdmcyL3N2Zy9TVkdMaW5l
RWxlbWVudEltcGwuaAk1IERlYyAyMDA1IDIyOjUyOjA1IC0wMDAwCkBAIC01MSw3ICs1MSw3IEBA
IG5hbWVzcGFjZSBLU1ZHCiAgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0
ZShLRE9NOjpNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKTsKIAogICAgICAgICB2aXJ0dWFsIGJv
b2wgcmVuZGVyZXJJc05lZWRlZChraHRtbDo6UmVuZGVyU3R5bGUgKikgeyByZXR1cm4gdHJ1ZTsg
fQotICAgICAgICB2aXJ0dWFsIEtDUGF0aERhdGFMaXN0IHRvUGF0aERhdGEoKSBjb25zdDsKKyAg
ICAgICAgdmlydHVhbCBLQ2FudmFzUGF0aCogdG9QYXRoRGF0YSgpIGNvbnN0OwogCiAgICAgICAg
IHZpcnR1YWwgY29uc3QgU1ZHU3R5bGVkRWxlbWVudEltcGwgKnB1c2hBdHRyaWJ1dGVDb250ZXh0
KGNvbnN0IFNWR1N0eWxlZEVsZW1lbnRJbXBsICpjb250ZXh0KTsKIApJbmRleDoga3N2ZzIvc3Zn
L1NWR1BhdGhFbGVtZW50SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NW
R1N1cHBvcnQva3N2ZzIvc3ZnL1NWR1BhdGhFbGVtZW50SW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuOQpkaWZmIC1wIC11IC1yMS45IGtzdmcyL3N2Zy9TVkdQYXRoRWxlbWVudEltcGwu
Y3BwCi0tLSBrc3ZnMi9zdmcvU1ZHUGF0aEVsZW1lbnRJbXBsLmNwcAkyOSBOb3YgMjAwNSAxMToy
MDo0NyAtMDAwMAkxLjkKKysrIGtzdmcyL3N2Zy9TVkdQYXRoRWxlbWVudEltcGwuY3BwCTUgRGVj
IDIwMDUgMjI6NTI6MDUgLTAwMDAKQEAgLTQ1LDYgKzQ1LDcgQEAKIAogI2luY2x1ZGUgPGtjYW52
YXMvS0NhbnZhcy5oPgogI2luY2x1ZGUgPGtjYW52YXMvS0NhbnZhc0NyZWF0b3IuaD4KKyNpbmNs
dWRlIDxrY2FudmFzL2RldmljZS9LUmVuZGVyaW5nRGV2aWNlLmg+CiAKIG5hbWVzcGFjZSBLU1ZH
IHsKIApAQCAtMzc4LDE0ICszNzksMTUgQEAgU1ZHUGF0aFNlZ0xpc3RJbXBsICpTVkdQYXRoRWxl
bWVudEltcGw6OgogICAgIHJldHVybiAwOwogfQogCi1LQ1BhdGhEYXRhTGlzdCBTVkdQYXRoRWxl
bWVudEltcGw6OnRvUGF0aERhdGEoKSBjb25zdAorLy8gRklYTUU6IFRoaXMgcHJvYmFibHkgYmVs
b25ncyBvbiBTVkdQYXRoU2VnTGlzdEltcGwgaW5zdGVhZC4gLS0gZWNzIDEyLzUvMDUKK0tDYW52
YXNQYXRoKiBTVkdQYXRoRWxlbWVudEltcGw6OnRvUGF0aERhdGEoKSBjb25zdAogewogICAgIC8v
IFRPRE8gOiBhbHNvIHN1cHBvcnQgbm9uLW5vcm1hbGl6ZWQgbW9kZSwgYXQgbGVhc3QgaW4gZG9t
IHN0cnVjdHVyZQotICAgIEtDUGF0aERhdGFMaXN0IHBhdGhEYXRhOwogICAgIGludCBsZW4gPSBw
YXRoU2VnTGlzdCgpLT5udW1iZXJPZkl0ZW1zKCk7CiAgICAgaWYobGVuIDwgMSkKLSAgICAgICAg
cmV0dXJuIHBhdGhEYXRhOworICAgICAgICByZXR1cm4gMDsKIAorICAgIEtDYW52YXNQYXRoKiBw
YXRoRGF0YSA9IFFQYWludGVyOjpyZW5kZXJpbmdEZXZpY2UoKS0+Y3JlYXRlUGF0aCgpOwogICAg
IGZvcihpbnQgaSA9IDA7IGkgPCBsZW47ICsraSkKICAgICB7CiAgICAgICAgIFNWR1BhdGhTZWdJ
bXBsICpwID0gcGF0aFNlZ0xpc3QoKS0+Z2V0SXRlbShpKTsKQEAgLTM5NCwyNSArMzk2LDI1IEBA
IEtDUGF0aERhdGFMaXN0IFNWR1BhdGhFbGVtZW50SW1wbDo6dG9QYXQKICAgICAgICAgICAgIGNh
c2UgUEFUSFNFR19NT1ZFVE9fQUJTOgogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIFNW
R1BhdGhTZWdNb3ZldG9BYnNJbXBsICptb3ZlVG8gPSBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnTW92
ZXRvQWJzSW1wbCAqPihwKTsKLSAgICAgICAgICAgICAgICBwYXRoRGF0YS5tb3ZlVG8obW92ZVRv
LT54KCksIG1vdmVUby0+eSgpKTsKKyAgICAgICAgICAgICAgICBwYXRoRGF0YS0+bW92ZVRvKG1v
dmVUby0+eCgpLCBtb3ZlVG8tPnkoKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBjYXNlIFBBVEhTRUdfTElORVRPX0FCUzoKICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICBTVkdQYXRoU2VnTGluZXRvQWJzSW1wbCAqbGluZVRvID0gc3Rh
dGljX2Nhc3Q8U1ZHUGF0aFNlZ0xpbmV0b0Fic0ltcGwgKj4ocCk7Ci0gICAgICAgICAgICAgICAg
cGF0aERhdGEubGluZVRvKGxpbmVUby0+eCgpLCBsaW5lVG8tPnkoKSk7CisgICAgICAgICAgICAg
ICAgcGF0aERhdGEtPmxpbmVUbyhsaW5lVG8tPngoKSwgbGluZVRvLT55KCkpOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBQQVRIU0VHX0NV
UlZFVE9fQ1VCSUNfQUJTOgogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIFNWR1BhdGhT
ZWdDdXJ2ZXRvQ3ViaWNBYnNJbXBsICpjdXJ2ZVRvID0gc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0N1
cnZldG9DdWJpY0Fic0ltcGwgKj4ocCk7Ci0gICAgICAgICAgICAgICAgcGF0aERhdGEuY3VydmVU
byhjdXJ2ZVRvLT54MSgpLCBjdXJ2ZVRvLT55MSgpLAorICAgICAgICAgICAgICAgIHBhdGhEYXRh
LT5jdXJ2ZVRvKGN1cnZlVG8tPngxKCksIGN1cnZlVG8tPnkxKCksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjdXJ2ZVRvLT54MigpLCBjdXJ2ZVRvLT55MigpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY3VydmVUby0+eCgpLCBjdXJ2ZVRvLT55KCkpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBQQVRI
U0VHX0NMT1NFUEFUSDoKLSAgICAgICAgICAgICAgICBwYXRoRGF0YS5jbG9zZVN1YnBhdGgoKTsK
KyAgICAgICAgICAgICAgICBwYXRoRGF0YS0+Y2xvc2VTdWJwYXRoKCk7CiAgICAgICAgICAgICBk
ZWZhdWx0OgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkluZGV4OiBrc3ZnMi9z
dmcvU1ZHUGF0aEVsZW1lbnRJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NW
R1N1cHBvcnQva3N2ZzIvc3ZnL1NWR1BhdGhFbGVtZW50SW1wbC5oLHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjgKZGlmZiAtcCAtdSAtcjEuOCBrc3ZnMi9zdmcvU1ZHUGF0aEVsZW1lbnRJbXBsLmgK
LS0tIGtzdmcyL3N2Zy9TVkdQYXRoRWxlbWVudEltcGwuaAkzIERlYyAyMDA1IDAxOjMyOjQwIC0w
MDAwCTEuOAorKysga3N2ZzIvc3ZnL1NWR1BhdGhFbGVtZW50SW1wbC5oCTUgRGVjIDIwMDUgMjI6
NTI6MDUgLTAwMDAKQEAgLTEwMSw3ICsxMDEsNyBAQCBuYW1lc3BhY2UgS1NWRwogICAgICAgICB2
aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoS0RPTTo6TWFwcGVkQXR0cmlidXRlSW1w
bCAqYXR0cik7CiAKICAgICAgICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoa2h0bWw6
OlJlbmRlclN0eWxlICopIHsgcmV0dXJuIHRydWU7IH0KLSAgICAgICAgdmlydHVhbCBLQ1BhdGhE
YXRhTGlzdCB0b1BhdGhEYXRhKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgS0NhbnZhc1BhdGgq
IHRvUGF0aERhdGEoKSBjb25zdDsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIG11dGFibGUgUmVm
UHRyPFNWR1BhdGhTZWdMaXN0SW1wbD4gbV9wYXRoU2VnTGlzdDsKSW5kZXg6IGtzdmcyL3N2Zy9T
VkdQb2x5Z29uRWxlbWVudEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9T
VkdTdXBwb3J0L2tzdmcyL3N2Zy9TVkdQb2x5Z29uRWxlbWVudEltcGwuY3BwLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjYKZGlmZiAtcCAtdSAtcjEuNiBrc3ZnMi9zdmcvU1ZHUG9seWdvbkVsZW1l
bnRJbXBsLmNwcAotLS0ga3N2ZzIvc3ZnL1NWR1BvbHlnb25FbGVtZW50SW1wbC5jcHAJMjEgTm92
IDIwMDUgMDg6Mjk6NDEgLTAwMDAJMS42CisrKyBrc3ZnMi9zdmcvU1ZHUG9seWdvbkVsZW1lbnRJ
bXBsLmNwcAk1IERlYyAyMDA1IDIyOjUyOjA1IC0wMDAwCkBAIC0yNiw2ICsyNiw3IEBACiAKICNp
bmNsdWRlIDxrY2FudmFzL0tDYW52YXMuaD4KICNpbmNsdWRlIDxrY2FudmFzL0tDYW52YXNDcmVh
dG9yLmg+CisjaW5jbHVkZSA8a2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ0RldmljZS5oPgogCiB1
c2luZyBuYW1lc3BhY2UgS1NWRzsKIApAQCAtMzgsMjEgKzM5LDIwIEBAIFNWR1BvbHlnb25FbGVt
ZW50SW1wbDo6flNWR1BvbHlnb25FbGVtZW4KIHsKIH0KIAotS0NQYXRoRGF0YUxpc3QgU1ZHUG9s
eWdvbkVsZW1lbnRJbXBsOjp0b1BhdGhEYXRhKCkgY29uc3QKK0tDYW52YXNQYXRoKiBTVkdQb2x5
Z29uRWxlbWVudEltcGw6OnRvUGF0aERhdGEoKSBjb25zdAogewotICAgIEtDUGF0aERhdGFMaXN0
IHBvbHlEYXRhOwogICAgIGludCBsZW4gPSBwb2ludHMoKS0+bnVtYmVyT2ZJdGVtcygpOwogICAg
IGlmKGxlbiA8IDEpCi0gICAgICAgIHJldHVybiBwb2x5RGF0YTsKLQotICAgIHBvbHlEYXRhLm1v
dmVUbyhwb2ludHMoKS0+Z2V0SXRlbSgwKS0+eCgpLCBwb2ludHMoKS0+Z2V0SXRlbSgwKS0+eSgp
KTsKLSAgICBmb3IoaW50IGkgPSAxOyBpIDwgbGVuOyArK2kpCi0gICAgeworICAgICAgICByZXR1
cm4gMDsKKyAgICAKKyAgICBLQ2FudmFzUGF0aCogcG9seURhdGEgPSBRUGFpbnRlcjo6cmVuZGVy
aW5nRGV2aWNlKCktPmNyZWF0ZVBhdGgoKTsKKyAgICBwb2x5RGF0YS0+bW92ZVRvKHBvaW50cygp
LT5nZXRJdGVtKDApLT54KCksIHBvaW50cygpLT5nZXRJdGVtKDApLT55KCkpOworICAgIGZvciAo
aW50IGkgPSAxOyBpIDwgbGVuOyArK2kpIHsKICAgICAgICAgU1ZHUG9pbnRJbXBsICpwID0gcG9p
bnRzKCktPmdldEl0ZW0oaSk7Ci0gICAgICAgIHBvbHlEYXRhLmxpbmVUbyhwLT54KCksIHAtPnko
KSk7CisgICAgICAgIHBvbHlEYXRhLT5saW5lVG8ocC0+eCgpLCBwLT55KCkpOwogICAgIH0KIAot
ICAgIHBvbHlEYXRhLmNsb3NlU3VicGF0aCgpOworICAgIHBvbHlEYXRhLT5jbG9zZVN1YnBhdGgo
KTsKICAgICByZXR1cm4gcG9seURhdGE7CiB9CiAKSW5kZXg6IGtzdmcyL3N2Zy9TVkdQb2x5Z29u
RWxlbWVudEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9r
c3ZnMi9zdmcvU1ZHUG9seWdvbkVsZW1lbnRJbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
NQpkaWZmIC1wIC11IC1yMS41IGtzdmcyL3N2Zy9TVkdQb2x5Z29uRWxlbWVudEltcGwuaAotLS0g
a3N2ZzIvc3ZnL1NWR1BvbHlnb25FbGVtZW50SW1wbC5oCTIxIE5vdiAyMDA1IDA4OjI5OjQxIC0w
MDAwCTEuNQorKysga3N2ZzIvc3ZnL1NWR1BvbHlnb25FbGVtZW50SW1wbC5oCTUgRGVjIDIwMDUg
MjI6NTI6MDUgLTAwMDAKQEAgLTMzLDcgKzMzLDcgQEAgbmFtZXNwYWNlIEtTVkcKICAgICAgICAg
U1ZHUG9seWdvbkVsZW1lbnRJbXBsKGNvbnN0IEtET006OlF1YWxpZmllZE5hbWUmIHRhZ05hbWUs
IEtET006OkRvY3VtZW50SW1wbCAqZG9jKTsKICAgICAgICAgdmlydHVhbCB+U1ZHUG9seWdvbkVs
ZW1lbnRJbXBsKCk7CiAKLSAgICAgICAgdmlydHVhbCBLQ1BhdGhEYXRhTGlzdCB0b1BhdGhEYXRh
KCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgS0NhbnZhc1BhdGgqIHRvUGF0aERhdGEoKSBjb25z
dDsKICAgICB9OwogfTsKIApJbmRleDoga3N2ZzIvc3ZnL1NWR1BvbHlsaW5lRWxlbWVudEltcGwu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL3N2Zy9T
VkdQb2x5bGluZUVsZW1lbnRJbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42CmRpZmYg
LXAgLXUgLXIxLjYga3N2ZzIvc3ZnL1NWR1BvbHlsaW5lRWxlbWVudEltcGwuY3BwCi0tLSBrc3Zn
Mi9zdmcvU1ZHUG9seWxpbmVFbGVtZW50SW1wbC5jcHAJMjEgTm92IDIwMDUgMDg6Mjk6NDEgLTAw
MDAJMS42CisrKyBrc3ZnMi9zdmcvU1ZHUG9seWxpbmVFbGVtZW50SW1wbC5jcHAJNSBEZWMgMjAw
NSAyMjo1MjowNSAtMDAwMApAQCAtMjYsNiArMjYsNyBAQAogCiAjaW5jbHVkZSA8a2NhbnZhcy9L
Q2FudmFzLmg+CiAjaW5jbHVkZSA8a2NhbnZhcy9LQ2FudmFzQ3JlYXRvci5oPgorI2luY2x1ZGUg
PGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdEZXZpY2UuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEtT
Vkc7CiAKQEAgLTM4LDE4ICszOSwxNyBAQCBTVkdQb2x5bGluZUVsZW1lbnRJbXBsOjp+U1ZHUG9s
eWxpbmVFbGVtCiB7CiB9CiAKLUtDUGF0aERhdGFMaXN0IFNWR1BvbHlsaW5lRWxlbWVudEltcGw6
OnRvUGF0aERhdGEoKSBjb25zdAorS0NhbnZhc1BhdGgqIFNWR1BvbHlsaW5lRWxlbWVudEltcGw6
OnRvUGF0aERhdGEoKSBjb25zdAogewotICAgIEtDUGF0aERhdGFMaXN0IHBvbHlEYXRhOwogICAg
IGludCBsZW4gPSBwb2ludHMoKS0+bnVtYmVyT2ZJdGVtcygpOwogICAgIGlmKGxlbiA8IDEpCi0g
ICAgICAgIHJldHVybiBwb2x5RGF0YTsKKyAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBwb2x5RGF0
YS5tb3ZlVG8ocG9pbnRzKCktPmdldEl0ZW0oMCktPngoKSwgcG9pbnRzKCktPmdldEl0ZW0oMCkt
PnkoKSk7Ci0gICAgZm9yKGludCBpID0gMTsgaSA8IGxlbjsgKytpKQotICAgIHsKKyAgICBLQ2Fu
dmFzUGF0aCogcG9seURhdGEgPSBRUGFpbnRlcjo6cmVuZGVyaW5nRGV2aWNlKCktPmNyZWF0ZVBh
dGgoKTsKKyAgICBwb2x5RGF0YS0+bW92ZVRvKHBvaW50cygpLT5nZXRJdGVtKDApLT54KCksIHBv
aW50cygpLT5nZXRJdGVtKDApLT55KCkpOworICAgIGZvciAoaW50IGkgPSAxOyBpIDwgbGVuOyAr
K2kpIHsKICAgICAgICAgU1ZHUG9pbnRJbXBsICpwID0gcG9pbnRzKCktPmdldEl0ZW0oaSk7Ci0g
ICAgICAgIHBvbHlEYXRhLmxpbmVUbyhwLT54KCksIHAtPnkoKSk7CisgICAgICAgIHBvbHlEYXRh
LT5saW5lVG8ocC0+eCgpLCBwLT55KCkpOwogICAgIH0KIAogICAgIHJldHVybiBwb2x5RGF0YTsK
SW5kZXg6IGtzdmcyL3N2Zy9TVkdQb2x5bGluZUVsZW1lbnRJbXBsLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvc3ZnL1NWR1BvbHlsaW5lRWxlbWVudElt
cGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS41CmRpZmYgLXAgLXUgLXIxLjUga3N2ZzIvc3Zn
L1NWR1BvbHlsaW5lRWxlbWVudEltcGwuaAotLS0ga3N2ZzIvc3ZnL1NWR1BvbHlsaW5lRWxlbWVu
dEltcGwuaAkyMSBOb3YgMjAwNSAwODoyOTo0MSAtMDAwMAkxLjUKKysrIGtzdmcyL3N2Zy9TVkdQ
b2x5bGluZUVsZW1lbnRJbXBsLmgJNSBEZWMgMjAwNSAyMjo1MjowNSAtMDAwMApAQCAtMzMsNyAr
MzMsNyBAQCBuYW1lc3BhY2UgS1NWRwogICAgICAgICBTVkdQb2x5bGluZUVsZW1lbnRJbXBsKGNv
bnN0IEtET006OlF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIEtET006OkRvY3VtZW50SW1wbCAqZG9j
KTsKICAgICAgICAgdmlydHVhbCB+U1ZHUG9seWxpbmVFbGVtZW50SW1wbCgpOwogCi0gICAgICAg
IHZpcnR1YWwgS0NQYXRoRGF0YUxpc3QgdG9QYXRoRGF0YSgpIGNvbnN0OworICAgICAgICB2aXJ0
dWFsIEtDYW52YXNQYXRoKiB0b1BhdGhEYXRhKCkgY29uc3Q7CiAgICAgfTsKIH07CiAKSW5kZXg6
IGtzdmcyL3N2Zy9TVkdSZWN0RWxlbWVudEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL3N2Zy9TVkdSZWN0RWxlbWVudEltcGwuY3BwLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjgKZGlmZiAtcCAtdSAtcjEuOCBrc3ZnMi9zdmcvU1ZHUmVjdEVs
ZW1lbnRJbXBsLmNwcAotLS0ga3N2ZzIvc3ZnL1NWR1JlY3RFbGVtZW50SW1wbC5jcHAJMjYgTm92
IDIwMDUgMjI6MTk6MTUgLTAwMDAJMS44CisrKyBrc3ZnMi9zdmcvU1ZHUmVjdEVsZW1lbnRJbXBs
LmNwcAk1IERlYyAyMDA1IDIyOjUyOjA1IC0wMDAwCkBAIC0xMDAsNyArMTAwLDcgQEAgdm9pZCBT
VkdSZWN0RWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cgogICAgIH0KIH0KIAotS0NQYXRoRGF0
YUxpc3QgU1ZHUmVjdEVsZW1lbnRJbXBsOjp0b1BhdGhEYXRhKCkgY29uc3QKK0tDYW52YXNQYXRo
KiBTVkdSZWN0RWxlbWVudEltcGw6OnRvUGF0aERhdGEoKSBjb25zdAogewogICAgIGZsb2F0IF94
ID0geCgpLT5iYXNlVmFsKCktPnZhbHVlKCksIF95ID0geSgpLT5iYXNlVmFsKCktPnZhbHVlKCk7
CiAgICAgZmxvYXQgX3dpZHRoID0gd2lkdGgoKS0+YmFzZVZhbCgpLT52YWx1ZSgpLCBfaGVpZ2h0
ID0gaGVpZ2h0KCktPmJhc2VWYWwoKS0+dmFsdWUoKTsKSW5kZXg6IGtzdmcyL3N2Zy9TVkdSZWN0
RWxlbWVudEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9r
c3ZnMi9zdmcvU1ZHUmVjdEVsZW1lbnRJbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuOApk
aWZmIC1wIC11IC1yMS44IGtzdmcyL3N2Zy9TVkdSZWN0RWxlbWVudEltcGwuaAotLS0ga3N2ZzIv
c3ZnL1NWR1JlY3RFbGVtZW50SW1wbC5oCTMgRGVjIDIwMDUgMDE6MzI6NDAgLTAwMDAJMS44Cisr
KyBrc3ZnMi9zdmcvU1ZHUmVjdEVsZW1lbnRJbXBsLmgJNSBEZWMgMjAwNSAyMjo1MjowNSAtMDAw
MApAQCAtNTUsNyArNTUsNyBAQCBuYW1lc3BhY2UgS1NWRwogICAgICAgICB2aXJ0dWFsIHZvaWQg
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoS0RPTTo6TWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cik7CiAK
ICAgICAgICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoa2h0bWw6OlJlbmRlclN0eWxl
ICopIHsgcmV0dXJuIHRydWU7IH0KLSAgICAgICAgdmlydHVhbCBLQ1BhdGhEYXRhTGlzdCB0b1Bh
dGhEYXRhKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgS0NhbnZhc1BhdGgqIHRvUGF0aERhdGEo
KSBjb25zdDsKIAogICAgICAgICB2aXJ0dWFsIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnRJbXBsICpw
dXNoQXR0cmlidXRlQ29udGV4dChjb25zdCBTVkdTdHlsZWRFbGVtZW50SW1wbCAqY29udGV4dCk7
CiAKSW5kZXg6IGtzdmcyL3N2Zy9TVkdTdHlsZWRFbGVtZW50SW1wbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvc3ZnL1NWR1N0eWxlZEVsZW1lbnRJ
bXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNApkaWZmIC1wIC11IC1yMS4xNCBrc3Zn
Mi9zdmcvU1ZHU3R5bGVkRWxlbWVudEltcGwuY3BwCi0tLSBrc3ZnMi9zdmcvU1ZHU3R5bGVkRWxl
bWVudEltcGwuY3BwCTI5IE5vdiAyMDA1IDExOjIwOjQ3IC0wMDAwCTEuMTQKKysrIGtzdmcyL3N2
Zy9TVkdTdHlsZWRFbGVtZW50SW1wbC5jcHAJNSBEZWMgMjAwNSAyMjo1MjowNSAtMDAwMApAQCAt
NzAsMTEgKzcwLDEwIEBAIFNWR0FuaW1hdGVkU3RyaW5nSW1wbCAqU1ZHU3R5bGVkRWxlbWVudEkK
IAoga2h0bWw6OlJlbmRlck9iamVjdCAqU1ZHU3R5bGVkRWxlbWVudEltcGw6OmNyZWF0ZVJlbmRl
cmVyKFJlbmRlckFyZW5hICphcmVuYSwga2h0bWw6OlJlbmRlclN0eWxlICpzdHlsZSkKIHsKLSAg
ICBLQ1BhdGhEYXRhTGlzdCBwYXRoRGF0YSA9IHRvUGF0aERhdGEoKTsKLSAgICBpZiAocGF0aERh
dGEuaXNFbXB0eSgpKQorICAgIFJlZlB0cjxLQ2FudmFzUGF0aD4gcGF0aERhdGEgPSB0b1BhdGhE
YXRhKCk7CisgICAgaWYgKCFwYXRoRGF0YSB8fCBwYXRoRGF0YS0+aXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm4gMDsKLSAgICBLQ2FudmFzVXNlckRhdGEgcGF0aCA9IEtDYW52YXNDcmVhdG9yOjpz
ZWxmKCktPmNyZWF0ZUNhbnZhc1BhdGhEYXRhKFFQYWludGVyOjpyZW5kZXJpbmdEZXZpY2UoKSwg
cGF0aERhdGEpOwotICAgIHJldHVybiBRUGFpbnRlcjo6cmVuZGVyaW5nRGV2aWNlKCktPmNyZWF0
ZUl0ZW0oYXJlbmEsIHN0eWxlLCB0aGlzLCBwYXRoKTsKKyAgICByZXR1cm4gUVBhaW50ZXI6OnJl
bmRlcmluZ0RldmljZSgpLT5jcmVhdGVJdGVtKGFyZW5hLCBzdHlsZSwgdGhpcywgcGF0aERhdGEu
Z2V0KCkpOwogfQogCiB2b2lkIFNWR1N0eWxlZEVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZShLRE9NOjpNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKQpAQCAtMTU1LDggKzE1NCw3IEBA
IHZvaWQgU1ZHU3R5bGVkRWxlbWVudEltcGw6OnVwZGF0ZUNhbnZhc0kKICAgICAgICAgJiYgcGFy
ZW50RWxlbWVudC0+Y2hpbGRTaG91bGRDcmVhdGVSZW5kZXJlcih0aGlzKSkKICAgICAgICAgcmVu
ZGVyU2VjdGlvbiA9IHRydWU7CiAKLSAgICBLQ2FudmFzVXNlckRhdGEgbmV3UGF0aCA9IEtDYW52
YXNDcmVhdG9yOjpzZWxmKCktPmNyZWF0ZUNhbnZhc1BhdGhEYXRhKFFQYWludGVyOjpyZW5kZXJp
bmdEZXZpY2UoKSwgdG9QYXRoRGF0YSgpKTsKLSAgICByZW5kZXJQYXRoLT5jaGFuZ2VQYXRoKG5l
d1BhdGgpOworICAgIHJlbmRlclBhdGgtPmNoYW5nZVBhdGgodG9QYXRoRGF0YSgpKTsKIAogICAg
IGlmKHJlbmRlclNlY3Rpb24pCiAgICAgICAgIHJlbmRlclBhdGgtPnNldE5lZWRzTGF5b3V0KHRy
dWUpOwpAQCAtMTY3LDEwICsxNjUsNyBAQCB2b2lkIFNWR1N0eWxlZEVsZW1lbnRJbXBsOjp1cGRh
dGVDYW52YXNJCiBjb25zdCBTVkdTdHlsZWRFbGVtZW50SW1wbCAqU1ZHU3R5bGVkRWxlbWVudElt
cGw6OnB1c2hBdHRyaWJ1dGVDb250ZXh0KGNvbnN0IFNWR1N0eWxlZEVsZW1lbnRJbXBsICopCiB7
CiAgICAgaWYoY2FudmFzKCkpCi0gICAgewotICAgICAgICBLQ2FudmFzVXNlckRhdGEgbmV3UGF0
aCA9IEtDYW52YXNDcmVhdG9yOjpzZWxmKCktPmNyZWF0ZUNhbnZhc1BhdGhEYXRhKFFQYWludGVy
OjpyZW5kZXJpbmdEZXZpY2UoKSwgdG9QYXRoRGF0YSgpKTsKLSAgICAgICAgc3RhdGljX2Nhc3Q8
UmVuZGVyUGF0aCAqPihyZW5kZXJlcigpKS0+Y2hhbmdlUGF0aChuZXdQYXRoKTsKLSAgICB9Cisg
ICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclBhdGggKj4ocmVuZGVyZXIoKSktPmNoYW5nZVBhdGgo
dG9QYXRoRGF0YSgpKTsKIAogICAgIHJldHVybiAwOwogfQpJbmRleDoga3N2ZzIvc3ZnL1NWR1N0
eWxlZEVsZW1lbnRJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBv
cnQva3N2ZzIvc3ZnL1NWR1N0eWxlZEVsZW1lbnRJbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuMTIKZGlmZiAtcCAtdSAtcjEuMTIga3N2ZzIvc3ZnL1NWR1N0eWxlZEVsZW1lbnRJbXBsLmgK
LS0tIGtzdmcyL3N2Zy9TVkdTdHlsZWRFbGVtZW50SW1wbC5oCTMgRGVjIDIwMDUgMDE6MzI6NDEg
LTAwMDAJMS4xMgorKysga3N2ZzIvc3ZnL1NWR1N0eWxlZEVsZW1lbnRJbXBsLmgJNSBEZWMgMjAw
NSAyMjo1MjowNSAtMDAwMApAQCAtNTcsNyArNTcsNyBAQCBuYW1lc3BhY2UgS1NWRwogCiAgICAg
ICAgIC8vIFRoZXNlIG5lZWQgdG8gYmUgaW1wbGVtZW50ZWQuCiAgICAgICAgIHZpcnR1YWwgYm9v
bCByZW5kZXJlcklzTmVlZGVkKGtodG1sOjpSZW5kZXJTdHlsZSAqKSB7IHJldHVybiBmYWxzZTsg
fQotICAgICAgICB2aXJ0dWFsIEtDUGF0aERhdGFMaXN0IHRvUGF0aERhdGEoKSBjb25zdCB7IHJl
dHVybiBLQ1BhdGhEYXRhTGlzdCgpOyB9CisgICAgICAgIHZpcnR1YWwgS0NhbnZhc1BhdGgqIHRv
UGF0aERhdGEoKSBjb25zdCB7IHJldHVybiAwOyB9CiAgICAgICAgIHZpcnR1YWwga2h0bWw6OlJl
bmRlck9iamVjdCAqY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEgKmFyZW5hLCBraHRtbDo6UmVu
ZGVyU3R5bGUgKnN0eWxlKTsKICAgICAgICAgdmlydHVhbCBLQ2FudmFzUmVzb3VyY2UgKmNhbnZh
c1Jlc291cmNlKCkgeyByZXR1cm4gMDsgfQogICAgICAgICAK
</data>
<flag name="review"
          id="968"
          type_id="1"
          status="+"
          setter="timo"
    />
          </attachment>
      

    </bug>

</bugzilla>